From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <pdm-devel-bounces@lists.proxmox.com> Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id 15DEE1FF15C for <inbox@lore.proxmox.com>; Wed, 5 Mar 2025 16:01:52 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id B571C18F3E; Wed, 5 Mar 2025 16:01:47 +0100 (CET) From: Wolfgang Bumiller <w.bumiller@proxmox.com> To: pdm-devel@lists.proxmox.com Date: Wed, 5 Mar 2025 16:01:05 +0100 Message-Id: <20250305150108.245584-5-w.bumiller@proxmox.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250305150108.245584-1-w.bumiller@proxmox.com> References: <20250305150108.245584-1-w.bumiller@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.082 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pdm-devel] [PATCH v2 datacenter-manager 4/7] server: cache pve node reachability and names X-BeenThere: pdm-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Datacenter Manager development discussion <pdm-devel.lists.proxmox.com> List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pdm-devel>, <mailto:pdm-devel-request@lists.proxmox.com?subject=unsubscribe> List-Archive: <http://lists.proxmox.com/pipermail/pdm-devel/> List-Post: <mailto:pdm-devel@lists.proxmox.com> List-Help: <mailto:pdm-devel-request@lists.proxmox.com?subject=help> List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pdm-devel>, <mailto:pdm-devel-request@lists.proxmox.com?subject=subscribe> Reply-To: Proxmox Datacenter Manager development discussion <pdm-devel@lists.proxmox.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: pdm-devel-bounces@lists.proxmox.com Sender: "pdm-devel" <pdm-devel-bounces@lists.proxmox.com> QWRkIGEgYHJlbW90ZV9jYWNoZWAgbW9kdWxlIHRvIGFjY2VzcyB0aGUgY2FjaGUgd2hpY2ggbWFw cwoocmVtb3RlLGhvc3QpIHRvIGEgc3RydWN0IGhvbGRpbmcgdGhlIG5vZGUgbmFtZSBhbmQgYSAi cmVhY2hhYmxlIgpib29sZWFuLiBUaGlzIGNhbiBlIHVzZWQgdG8gY29ubmVjdCB0byBzcGVjaWZp YyBub2RlcyBvciBza2lwIG5vZGVzCmtub3duIHRvIGJlIGN1cnJlbnRseSB1bnJlYWNoYWJsZSAo YWx0aG91Z2ggdGhlIGxhdHRlciBwYXJ0IGlzIG5vdApjdXJyZW50bHkgaW1wbGVtZW50ZWQpLgoK VGhlIENsaWVudEZhY3RvcnkgdHJhaXQgZ2FpbnMgaGVscGVycyB0byBjb25uZWN0IHRvIHNwZWNp ZmljIG5vZGVzLgoKVGhlIHVucHJpdmlsZWdlZCBBUEkgZ2V0cyBhIGB0YXNrc2Agc3VibW9kdWxl IHdpdGggYSB0YXNrIHdoaWNoCmZpbGxzIHRoZSBub2RlIGNhY2hlIGFuZCB3YXRjaGVzIHRoZSBy ZW1vdGUgY29uZmlnIGZvciB1cGRhdGVzICh2aWEKdGhlIGNvbmZpZyB2ZXJzaW9uIGNhY2hlKS4K ClNpZ25lZC1vZmYtYnk6IFdvbGZnYW5nIEJ1bWlsbGVyIDx3LmJ1bWlsbGVyQHByb3htb3guY29t PgpSZXZpZXdlZC1ieTogTHVrYXMgV2FnbmVyIDxsLndhZ25lckBwcm94bW94LmNvbT4KLS0tCk5v IGNoYW5nZXMgc2luY2UgdjEuCgogbGliL3BkbS1jb25maWcvc3JjL2NvbmZpZ192ZXJzaW9uX2Nh Y2hlLnJzICAgIHwgIDMzICstCiAuLi4vbWFpbi5yc30gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCAgIDMgKwogLi4uL2Jpbi9wcm94bW94LWRhdGFjZW50ZXItYXBpL3Rhc2tzL21v ZC5ycyAgIHwgICAxICsKIC4uLi90YXNrcy9yZW1vdGVfbm9kZV9tYXBwaW5nLnJzICAgICAgICAg ICAgICB8IDIyNiArKysrKysrKysrKysrKwogc2VydmVyL3NyYy9jb25uZWN0aW9uLnJzICAgICAg ICAgICAgICAgICAgICAgIHwgIDMyICsrCiBzZXJ2ZXIvc3JjL2xpYi5ycyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfCAgIDEgKwogc2VydmVyL3NyYy9yZW1vdGVfY2FjaGUvbW9kLnJzICAg ICAgICAgICAgICAgIHwgMjg1ICsrKysrKysrKysrKysrKysrKwogNyBmaWxlcyBjaGFuZ2VkLCA1 ODAgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogcmVuYW1lIHNlcnZlci9zcmMvYmluL3tw cm94bW94LWRhdGFjZW50ZXItYXBpLnJzID0+IHByb3htb3gtZGF0YWNlbnRlci1hcGkvbWFpbi5y c30gKDk5JSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzZXJ2ZXIvc3JjL2Jpbi9wcm94bW94LWRhdGFj ZW50ZXItYXBpL3Rhc2tzL21vZC5ycwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNlcnZlci9zcmMvYmlu L3Byb3htb3gtZGF0YWNlbnRlci1hcGkvdGFza3MvcmVtb3RlX25vZGVfbWFwcGluZy5ycwogY3Jl YXRlIG1vZGUgMTAwNjQ0IHNlcnZlci9zcmMvcmVtb3RlX2NhY2hlL21vZC5ycwoKZGlmZiAtLWdp dCBhL2xpYi9wZG0tY29uZmlnL3NyYy9jb25maWdfdmVyc2lvbl9jYWNoZS5ycyBiL2xpYi9wZG0t Y29uZmlnL3NyYy9jb25maWdfdmVyc2lvbl9jYWNoZS5ycwppbmRleCBiNGE0N2E4Li41YzRiNjFh IDEwMDY0NAotLS0gYS9saWIvcGRtLWNvbmZpZy9zcmMvY29uZmlnX3ZlcnNpb25fY2FjaGUucnMK KysrIGIvbGliL3BkbS1jb25maWcvc3JjL2NvbmZpZ192ZXJzaW9uX2NhY2hlLnJzCkBAIC0yNSw2 ICsyNSw4IEBAIHN0cnVjdCBDb25maWdWZXJzaW9uQ2FjaGVEYXRhSW5uZXIgewogICAgIHVzZXJf Y2FjaGVfZ2VuZXJhdGlvbjogQXRvbWljVXNpemUsCiAgICAgLy8gVHJhZmZpYyBjb250cm9sICh0 cmFmZmljLWNvbnRyb2wuY2ZnKSBnZW5lcmF0aW9uL3ZlcnNpb24uCiAgICAgdHJhZmZpY19jb250 cm9sX2dlbmVyYXRpb246IEF0b21pY1VzaXplLAorICAgIC8vIFRyYWNrcyB1cGRhdGVzIHRvIHRo ZSByZW1vdGUvaG9zdG5hbWUvbm9kZW5hbWUgbWFwcGluZyBjYWNoZS4KKyAgICByZW1vdGVfbWFw cGluZ19jYWNoZTogQXRvbWljVXNpemUsCiAgICAgLy8gQWRkIGZ1cnRoZXIgYXRvbWljcyBoZXJl CiB9CiAKQEAgLTgxLDExICs4MywyMyBAQCBwdWIgc3RydWN0IENvbmZpZ1ZlcnNpb25DYWNoZSB7 CiBzdGF0aWMgSU5TVEFOQ0U6IE9uY2VDZWxsPEFyYzxDb25maWdWZXJzaW9uQ2FjaGU+PiA9IE9u Y2VDZWxsOjpuZXcoKTsKIAogaW1wbCBDb25maWdWZXJzaW9uQ2FjaGUgewotICAgIC8vLyBPcGVu IHRoZSBtZW1vcnkgYmFzZWQgY29tbXVuaWNhdGlvbiBjaGFubmVsIHNpbmdsZXRvbi4KKyAgICAv Ly8gT3BlbiB0aGUgbWVtb3J5IGJhY2tlZCB2ZXJzaW9uIGNhY2hlLgogICAgIHB1YiBmbiBuZXco KSAtPiBSZXN1bHQ8QXJjPFNlbGY+LCBFcnJvcj4gewogICAgICAgICBJTlNUQU5DRS5nZXRfb3Jf dHJ5X2luaXQoU2VsZjo6b3BlbikuY2xvbmVkKCkKICAgICB9CiAKKyAgICAvLy8gQ29udmVuaWVu Y2UgbWV0aG9kIHRvIGNhbGwgW2BDb25maWdWZXJzaW9uQ2FjaGU6Om5ld2BdIHdoaWxlIHR1cm5p bmcgdGhlIGVycm9yIGludG8gYSBsb2cKKyAgICAvLy8gbWVzc2FnZS4KKyAgICBwdWIgZm4gbmV3 X2xvZ19lcnJvcigpIC0+IE9wdGlvbjxBcmM8U2VsZj4+IHsKKyAgICAgICAgbWF0Y2ggU2VsZjo6 bmV3KCkgeworICAgICAgICAgICAgT2sodGhpcykgPT4gU29tZSh0aGlzKSwKKyAgICAgICAgICAg IEVycihlcnIpID0+IHsKKyAgICAgICAgICAgICAgICBsb2c6OmVycm9yISgiZmFpbGVkIHRvIG9w ZW4gY29uZmlnIHZlcnNpb24gY2FjaGUgLSB7ZXJyOj99Iik7CisgICAgICAgICAgICAgICAgTm9u ZQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCiAgICAgLy8gQWN0dWFsIHdvcmsg b2YgYG5ld2A6CiAgICAgZm4gb3BlbigpIC0+IFJlc3VsdDxBcmM8U2VsZj4sIEVycm9yPiB7CiAg ICAgICAgIGxldCB1c2VyID0gY3JhdGU6OmFwaV91c2VyKCk/OwpAQCAtMTQxLDQgKzE1NSwyMSBA QCBpbXBsIENvbmZpZ1ZlcnNpb25DYWNoZSB7CiAgICAgICAgICAgICAudHJhZmZpY19jb250cm9s X2dlbmVyYXRpb24KICAgICAgICAgICAgIC5mZXRjaF9hZGQoMSwgT3JkZXJpbmc6OkFjcVJlbCk7 CiAgICAgfQorCisgICAgLy8vIFJldHVybiB0aGUgY3VycmVudCByZW1vdGUgbWFwcGluZyBjYWNo ZSBnZW5lcmF0aW9uLgorICAgIHB1YiBmbiByZW1vdGVfbWFwcGluZ19jYWNoZSgmc2VsZikgLT4g dXNpemUgeworICAgICAgICBzZWxmLnNobWVtCisgICAgICAgICAgICAuZGF0YSgpCisgICAgICAg ICAgICAucmVtb3RlX21hcHBpbmdfY2FjaGUKKyAgICAgICAgICAgIC5sb2FkKE9yZGVyaW5nOjpS ZWxheGVkKQorICAgIH0KKworICAgIC8vLyBJbmNyZWFzZSB0aGUgcmVtb3RlIG1hcHBpbmcgY2Fj aGUgbnVtYmVyLgorICAgIHB1YiBmbiBpbmNyZWFzZV9yZW1vdGVfbWFwcGluZ19jYWNoZSgmc2Vs ZikgLT4gdXNpemUgeworICAgICAgICBzZWxmLnNobWVtCisgICAgICAgICAgICAuZGF0YSgpCisg ICAgICAgICAgICAucmVtb3RlX21hcHBpbmdfY2FjaGUKKyAgICAgICAgICAgIC5mZXRjaF9hZGQo MSwgT3JkZXJpbmc6OlJlbGF4ZWQpCisgICAgICAgICAgICArIDEKKyAgICB9CiB9CmRpZmYgLS1n aXQgYS9zZXJ2ZXIvc3JjL2Jpbi9wcm94bW94LWRhdGFjZW50ZXItYXBpLnJzIGIvc2VydmVyL3Ny Yy9iaW4vcHJveG1veC1kYXRhY2VudGVyLWFwaS9tYWluLnJzCnNpbWlsYXJpdHkgaW5kZXggOTkl CnJlbmFtZSBmcm9tIHNlcnZlci9zcmMvYmluL3Byb3htb3gtZGF0YWNlbnRlci1hcGkucnMKcmVu YW1lIHRvIHNlcnZlci9zcmMvYmluL3Byb3htb3gtZGF0YWNlbnRlci1hcGkvbWFpbi5ycwppbmRl eCBhNzkwOTRkLi4yNTg1MmM4IDEwMDY0NAotLS0gYS9zZXJ2ZXIvc3JjL2Jpbi9wcm94bW94LWRh dGFjZW50ZXItYXBpLnJzCisrKyBiL3NlcnZlci9zcmMvYmluL3Byb3htb3gtZGF0YWNlbnRlci1h cGkvbWFpbi5ycwpAQCAtMzEsNiArMzEsOCBAQCB1c2Ugc2VydmVyOjptZXRyaWNfY29sbGVjdGlv bjsKIHVzZSBzZXJ2ZXI6OnJlc291cmNlX2NhY2hlOwogdXNlIHNlcnZlcjo6dGFza191dGlsczsK IAorbW9kIHRhc2tzOworCiBwdWIgY29uc3QgUFJPWE1PWF9CQUNLVVBfVENQX0tFRVBBTElWRV9U SU1FOiB1MzIgPSA1ICogNjA7CiAKIGNvbnN0IFBETV9MSVNURU5fQUREUjogU29ja2V0QWRkciA9 IFNvY2tldEFkZHI6Om5ldygKQEAgLTI4Nyw2ICsyODksNyBAQCBhc3luYyBmbiBydW4oZGVidWc6 IGJvb2wpIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKIAogICAgIHN0YXJ0X3Rhc2tfc2NoZWR1bGVy KCk7CiAgICAgbWV0cmljX2NvbGxlY3Rpb246OnN0YXJ0X3Rhc2soKTsKKyAgICB0YXNrczo6cmVt b3RlX25vZGVfbWFwcGluZzo6c3RhcnRfdGFzaygpOwogICAgIHJlc291cmNlX2NhY2hlOjpzdGFy dF90YXNrKCk7CiAKICAgICBzZXJ2ZXIuYXdhaXQ/OwpkaWZmIC0tZ2l0IGEvc2VydmVyL3NyYy9i aW4vcHJveG1veC1kYXRhY2VudGVyLWFwaS90YXNrcy9tb2QucnMgYi9zZXJ2ZXIvc3JjL2Jpbi9w cm94bW94LWRhdGFjZW50ZXItYXBpL3Rhc2tzL21vZC5ycwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi5lNmVhZDg4Ci0tLSAvZGV2L251bGwKKysrIGIvc2VydmVyL3NyYy9iaW4v cHJveG1veC1kYXRhY2VudGVyLWFwaS90YXNrcy9tb2QucnMKQEAgLTAsMCArMSBAQAorcHViIG1v ZCByZW1vdGVfbm9kZV9tYXBwaW5nOwpkaWZmIC0tZ2l0IGEvc2VydmVyL3NyYy9iaW4vcHJveG1v eC1kYXRhY2VudGVyLWFwaS90YXNrcy9yZW1vdGVfbm9kZV9tYXBwaW5nLnJzIGIvc2VydmVyL3Ny Yy9iaW4vcHJveG1veC1kYXRhY2VudGVyLWFwaS90YXNrcy9yZW1vdGVfbm9kZV9tYXBwaW5nLnJz Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MTIzNjUKLS0tIC9kZXYvbnVs bAorKysgYi9zZXJ2ZXIvc3JjL2Jpbi9wcm94bW94LWRhdGFjZW50ZXItYXBpL3Rhc2tzL3JlbW90 ZV9ub2RlX21hcHBpbmcucnMKQEAgLTAsMCArMSwyMjYgQEAKKy8vISBQVkUgcmVtb3RlcyBoYXZl IG11bHRpcGxlIG5vZGVzIHdoaWNoIGhhdmUgbmFtZXMgd2UgY2Fubm90IG5lY2Vzc2FyaWx5IGlu ZmVyIGZyb20gdGhlCisvLyEgImhvc3RuYW1lIiBmaWVsZCwgc2luY2UgdGhhdCBtaWdodCBiZSBh IGRpZmZlcmVudCBhZGRyZXNzLCBwb3RlbnRpYWxseSB3aXRoIGEgcG9ydC4KKy8vIQorLy8hIFdl IGFsc28gZG8gbm90IHdhbnQgdXNlcnMgdG8gaGF2ZSB0byBtYWludGFpbiB0aGUgUERNIGhvc3Qv bm9kZS1uYW1lIGNvbWJpbmF0aW9ucyAoaW4gY2FzZSB0aGV5CisvLyEgcmVuYW1lIG9yIHJlaW5z dGFsbCBub2RlcykuIFJlbmFtaW5nIHdvdWxkIGJyZWFrIHRoZSBQRE0gY29uZmlnLCByZWluc3Rh bGxpbmcgd291bGQgYnJlYWsgZWcuIGEKKy8vISAibWFjaGluZS1pZCIgYmFzZWQgbWFwcGluZy4K Ky8vIQorLy8hIFdlIGFsc28gY2Fubm90IHJlbHkgaW4gdGhlIFRMUyBmaW5nZXJwcmludHMsIGJl Y2F1c2UgYSB3aG9sZSBjbHVzdGVyIGNvdWxkIHBvdGVudGlhbGx5IHVzZSBhCisvLyEgc2luZ2xl IHdpbGRjYXJkIGNlcnRpZmljYXRlLgorLy8hCisvLyEgSW5zdGVhZCwgd2UgbWFpbnRhaW4gYSBj YWNoZWQgbWFwcGluZyBvZiBgYWRkcmVzcyDihpQgbmFtZWAgaW4gYC92YXJgLCB3aGljaCBnZXRz IHBvbGxlZAorLy8hIHJlZ3VsYXJseS4KKy8vISBGb3IgUFZFIHdlIGNhbiBxdWVyeSBhbiBhZGRy ZXNzJyBgL2NsdXN0ZXIvc3RhdHVzYCBhbmQgbG9vayBmb3IgYW4gZW50cnkgbWFya2VkIGFzIGBs b2NhbDoxYC4KKy8vISBMYXRlciB0aGlzIG1pZ2h0IGJlIGNoYW5nZWQgdG8gbG9va2luZyBmb3Ig dGhlIG5vZGUgbmFtZSBpbiB0aGUgcmVzdWx0IG9mCisvLyEgYC9ub2Rlcy9sb2NhbGhvc3Qvc3Rh dHVzYCAtIG9uY2UgdGhpcyBpcyBpbXBsZW1lbnRlZCBhbmQgcm9sbGVkIG91dCBsb25nIGVub3Vn aCBpbiBQVkUuCisKK3VzZSBzdGQ6OmZ1dHVyZTo6RnV0dXJlOwordXNlIHN0ZDo6cGluOjpwaW47 CisKK3VzZSBhbnlob3c6OntiYWlsLCBFcnJvcn07Cit1c2UgdG9raW86OnRhc2s6OkpvaW5IYW5k bGU7CisKK3VzZSBwcm94bW94X2NvbmZpZ19kaWdlc3Q6OkNvbmZpZ0RpZ2VzdDsKK3VzZSBwcm94 bW94X3NlY3Rpb25fY29uZmlnOjp0eXBlZDo6U2VjdGlvbkNvbmZpZ0RhdGE7CisKK3VzZSBwZG1f YXBpX3R5cGVzOjpyZW1vdGVzOjp7UmVtb3RlLCBSZW1vdGVUeXBlfTsKKwordXNlIHNlcnZlcjo6 cmVtb3RlX2NhY2hlOjp7c2VsZiwgUmVtb3RlTWFwcGluZ0NhY2hlfTsKK3VzZSBzZXJ2ZXI6OnRh c2tfdXRpbHM7CisKK2NvbnN0IENPTkZJR19QT0xMX0lOVEVSVkFMOiB1NjQgPSA2MDsKKworZm4g c3Bhd25fYWJvcnRlZF9vbl9zaHV0ZG93bjxGPihmdXR1cmU6IEYpIC0+IEpvaW5IYW5kbGU8KCk+ Cit3aGVyZQorICAgIEY6IEZ1dHVyZSArIFNlbmQgKyAnc3RhdGljLAoreworICAgIHRva2lvOjpz cGF3bihhc3luYyBtb3ZlIHsKKyAgICAgICAgLy8gVE9ETzogVGhlIHdyYXBwaW5nIGluIGEgc2Vs ZWN0KHNodXRkb3duX2Z1dHVyZSwgZnV0KSBzaG91bGQgcHJvYmFibHkgYmUgYSBoZWxwZXIgaW4K KyAgICAgICAgLy8gYHByb3htb3hfZGFlbW9uYC4KKyAgICAgICAgbGV0IGZ1dHVyZSA9IHBpbiEo ZnV0dXJlKTsKKyAgICAgICAgbGV0IGFib3J0X2Z1dHVyZSA9IHBpbiEocHJveG1veF9kYWVtb246 OnNodXRkb3duX2Z1dHVyZSgpKTsKKyAgICAgICAgZnV0dXJlczo6ZnV0dXJlOjpzZWxlY3QoZnV0 dXJlLCBhYm9ydF9mdXR1cmUpLmF3YWl0OworICAgIH0pCit9CisKK3B1YiBmbiBzdGFydF90YXNr KCkgeworICAgIHNwYXduX2Fib3J0ZWRfb25fc2h1dGRvd24oQ2FjaGluZ1Rhc2s6OmRlZmF1bHQo KS5ydW4oKSk7Cit9CisKK2FzeW5jIGZuIHBvbGxfaW50ZXJ2YWwoKSB7CisgICAgbGV0IGRlbGF5 X3RhcmdldCA9IHRhc2tfdXRpbHM6Om5leHRfYWxpZ25lZF9pbnN0YW50KENPTkZJR19QT0xMX0lO VEVSVkFMKTsKKyAgICB0b2tpbzo6dGltZTo6c2xlZXBfdW50aWwodG9raW86OnRpbWU6Okluc3Rh bnQ6OmZyb21fc3RkKGRlbGF5X3RhcmdldCkpLmF3YWl0OworfQorCisjW2Rlcml2ZShEZWZhdWx0 KV0KK3N0cnVjdCBDYWNoaW5nVGFzayB7CisgICAgY3VycmVudF9uYW1lX3Rhc2s6IE9wdGlvbjxK b2luSGFuZGxlPCgpPj4sCisgICAgbGFzdF9jb25maWdfZGlnZXN0OiBPcHRpb248Q29uZmlnRGln ZXN0PiwKK30KKworaW1wbCBDYWNoaW5nVGFzayB7CisgICAgLy8vIFRoZSBjYWNoaW5nIHRhc2sn cyBtYWluIGVudHJ5IHBvaW50LgorICAgIGFzeW5jIGZuIHJ1bihtdXQgc2VsZikgeworICAgICAg ICBsb29wIHsKKyAgICAgICAgICAgIHNlbGYucnVuX29uY2UoKS5hd2FpdDsKKyAgICAgICAgICAg IHBvbGxfaW50ZXJ2YWwoKS5hd2FpdDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vLyBBIHNp bmdsZSBpdGVyYXRpb24gb2YgdGhlIGNhY2hpbmcgdGFzay4KKyAgICBhc3luYyBmbiBydW5fb25j ZSgmbXV0IHNlbGYpIHsKKyAgICAgICAgbGV0IChjb25maWcsIGRpZ2VzdCkgPSBtYXRjaCBwZG1f Y29uZmlnOjpyZW1vdGVzOjpjb25maWcoKSB7CisgICAgICAgICAgICBPayhjZCkgPT4gY2QsCisg ICAgICAgICAgICBFcnIoZXJyKSA9PiB7CisgICAgICAgICAgICAgICAgbG9nOjplcnJvciEoImZh aWxlZCB0byBsb2FkIHJlbW90ZSBjb25maWcsIG5vdCB1cGRhdGluZyBjYWNoZSAtIHtlcnI6P30i KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH07CisK KyAgICAgICAgaWYgc2VsZgorICAgICAgICAgICAgLmxhc3RfY29uZmlnX2RpZ2VzdAorICAgICAg ICAgICAgLmFzX3JlZigpCisgICAgICAgICAgICAuaXNfbm9uZV9vcih8ZHwgZGlnZXN0ICE9ICpk KQorICAgICAgICB7CisgICAgICAgICAgICB0cmFjaW5nOjpkZWJ1ZyEoIm5ldyBjb25maWcgLSB1 cGRhdGluZyByZW1vdGUgbm9kZSBuYW1lIGNhY2hlIik7CisgICAgICAgICAgICBzZWxmLmxhc3Rf Y29uZmlnX2RpZ2VzdCA9IFNvbWUoZGlnZXN0KTsKKworICAgICAgICAgICAgLy8gdGhlIGNvbmZp ZyBnb3QgdXBkYXRlZCAtIGFib3J0IHRoZSBjdXJyZW50IG5hbWUtZmV0Y2hpbmcgdGFzaywgd2Un bGwKKyAgICAgICAgICAgIC8vIHNwYXduIGEgbmV3IG9uZQorICAgICAgICAgICAgaWYgbGV0IFNv bWUobmFtZV90YXNrKSA9IHNlbGYuY3VycmVudF9uYW1lX3Rhc2sudGFrZSgpIHsKKyAgICAgICAg ICAgICAgICB0cmFjaW5nOjpkZWJ1ZyEoImFib3J0aW5nIHF1ZXJ5IHRhc2siKTsKKyAgICAgICAg ICAgICAgICBuYW1lX3Rhc2suYWJvcnQoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg aWYgbGV0IEVycihlcnIpID0gc2VsZi5jb25maWdfdXBkYXRlKCZjb25maWcpIHsKKyAgICAgICAg ICAgICAgICBsb2c6OmVycm9yISgiZXJyb3IgdXBkYXRpbmcgcmVtb3RlIG5vZGUgY2FjaGU6IHtl cnI6P30iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vfSBlbHNlIHsKKyAgICAgICAg ICAgIC8vICAgIHRyYWNpbmc6OmRlYnVnISgibm8gY2hhbmdlIHRvIHRoZSBjb25maWciKTsKKyAg ICAgICAgfQorCisgICAgICAgIGlmIHNlbGYKKyAgICAgICAgICAgIC5jdXJyZW50X25hbWVfdGFz aworICAgICAgICAgICAgLmFzX3JlZigpCisgICAgICAgICAgICAuaXNfbm9uZV9vcih8dGFza3wg dGFzay5pc19maW5pc2hlZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBsb2c6OmRlYnVnISgi bmFtZSB0YXNrIGZpbmlzaGVkLCBzdGFydGluZyByZWFjaGFiaWxpdHkgcXVlcnkgdGFzayIpOwor ICAgICAgICAgICAgc2VsZi5jdXJyZW50X25hbWVfdGFzayA9CisgICAgICAgICAgICAgICAgU29t ZShzcGF3bl9hYm9ydGVkX29uX3NodXRkb3duKFNlbGY6OnF1ZXJ5X25vZGVfbmFtZXMoY29uZmln KSkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8vIElmIHRoZSBgcmVtb3Rlcy5jZmdgIHdh cyB1cGRhdGVkIHdlIG5lZWQgdG8gZ28gb3ZlciBhbGwgdGhlIHJlbW90ZXMgYW5kIHNlZSBpZiB0 aGVyZSBpcyBhbnkKKyAgICAvLy8gaW5mb3JtYXRpb24gd2UgbmVlZCB0byB1cGRhdGUuCisgICAg Zm4gY29uZmlnX3VwZGF0ZSgmbXV0IHNlbGYsIGNvbmZpZzogJlNlY3Rpb25Db25maWdEYXRhPFJl bW90ZT4pIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKKyAgICAgICAgbGV0IG11dCBjYWNoZSA9IFJl bW90ZU1hcHBpbmdDYWNoZTo6d3JpdGUoKT87CisKKyAgICAgICAgLy8gcHJ1bmUgcmVtb3RlcyB3 aGljaCB3ZXJlIHJlbW92ZWQ6CisgICAgICAgIGNhY2hlCisgICAgICAgICAgICAucmVtb3Rlcwor ICAgICAgICAgICAgLnJldGFpbih8bmFtZSwgX2VudHJ5fCBjb25maWcuY29udGFpbnNfa2V5KG5h bWUpKTsKKworICAgICAgICAvLyBub3cgdXBkYXRlIHRoZSBleGlzdGluZyByZW1vdGVzOgorICAg ICAgICBmb3IgKG5hbWUsIHJlbW90ZSkgaW4gY29uZmlnIHsKKyAgICAgICAgICAgIHNlbGYucHJ1 bmVfcmVtb3RlX25vZGVzKCZtdXQgY2FjaGUsIG5hbWUsIHJlbW90ZSk7CisgICAgICAgIH0KKwor ICAgICAgICBjYWNoZS5zYXZlKCk/OworCisgICAgICAgIE9rKCgpKQorICAgIH0KKworICAgIGZu IHBydW5lX3JlbW90ZV9ub2RlcygmbXV0IHNlbGYsIGNhY2hlOiAmbXV0IFJlbW90ZU1hcHBpbmdD YWNoZSwgbmFtZTogJnN0ciwgcmVtb3RlOiAmUmVtb3RlKSB7CisgICAgICAgIGxldCBlbnRyeSA9 IGNhY2hlCisgICAgICAgICAgICAucmVtb3RlcworICAgICAgICAgICAgLmVudHJ5KG5hbWUudG9f c3RyaW5nKCkpCisgICAgICAgICAgICAub3JfaW5zZXJ0X3dpdGgofHwgcmVtb3RlX2NhY2hlOjpS ZW1vdGVNYXBwaW5nOjpuZXcocmVtb3RlLnR5KSk7CisKKyAgICAgICAgLy8gaWYgdGhlIGVudHJ5 IGNoYW5nZWQgdHlwZSwgY2xlYXIgaXQKKyAgICAgICAgaWYgZW50cnkudHkgIT0gcmVtb3RlLnR5 IHsKKyAgICAgICAgICAgICplbnRyeSA9IHJlbW90ZV9jYWNoZTo6UmVtb3RlTWFwcGluZzo6bmV3 KHJlbW90ZS50eSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBPbmx5IFBWRSBlbnRyaWVzIGN1 cnJlbnRseSBoYXZlIGEgbm9kZSBjYWNoZSwgc28gc2tpcCBub24tUFZFIHJlbW90ZXM6CisgICAg ICAgIGlmIHJlbW90ZS50eSAhPSBSZW1vdGVUeXBlOjpQdmUgeworICAgICAgICAgICAgcmV0dXJu OworICAgICAgICB9CisKKyAgICAgICAgLy8gcHJ1bmUgbm9kZXMgd2hpY2ggd2VyZSByZW1vdmVk OgorICAgICAgICBlbnRyeS5ob3N0cy5yZXRhaW4ofGhvc3RuYW1lLCBpbmZvfCB7CisgICAgICAg ICAgICBsZXQgcmV0YWluID0gcmVtb3RlLm5vZGVzLml0ZXIoKS5hbnkofG5vZGV8IG5vZGUuaG9z dG5hbWUgPT0gKmhvc3RuYW1lKTsKKyAgICAgICAgICAgIGlmICFyZXRhaW4geworICAgICAgICAg ICAgICAgIGlmIGxldCBTb21lKG5vZGVfbmFtZSkgPSBpbmZvLm5vZGVfbmFtZSgpIHsKKyAgICAg ICAgICAgICAgICAgICAgZW50cnkubm9kZV90b19ob3N0LnJlbW92ZShub2RlX25hbWUpOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldGFpbgorICAgICAg ICB9KTsKKworICAgICAgICAvLyBtYWtlIHN1cmUgY3VycmVudGx5IGtub3duIGhvc3RuYW1lcyBl eGlzdCBpbiB0aGUgY2FjaGUgYXQgbGVhc3QgZW1wdHk6CisgICAgICAgIGZvciBub2RlIGluICZy ZW1vdGUubm9kZXMgeworICAgICAgICAgICAgaWYgIWVudHJ5Lmhvc3RzLmNvbnRhaW5zX2tleSgm bm9kZS5ob3N0bmFtZSkgeworICAgICAgICAgICAgICAgIGVudHJ5Lmhvc3RzLmluc2VydCgKKyAg ICAgICAgICAgICAgICAgICAgbm9kZS5ob3N0bmFtZS5jbG9uZSgpLAorICAgICAgICAgICAgICAg ICAgICByZW1vdGVfY2FjaGU6Okhvc3RJbmZvOjpuZXcobm9kZS5ob3N0bmFtZS5jbG9uZSgpKSwK KyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg ICAgYXN5bmMgZm4gcXVlcnlfbm9kZV9uYW1lcyhjb25maWc6IFNlY3Rpb25Db25maWdEYXRhPFJl bW90ZT4pIHsKKyAgICAgICAgZm9yIChfbmFtZSwgcmVtb3RlKSBpbiAmY29uZmlnIHsKKyAgICAg ICAgICAgIGlmIGxldCBFcnIoZXJyKSA9IFNlbGY6OnF1ZXJ5X25vZGVfbmFtZXNfZm9yX3JlbW90 ZShyZW1vdGUpLmF3YWl0IHsKKyAgICAgICAgICAgICAgICBsb2c6OmVycm9yISgiZXJyb3IgdXBk YXRpbmcgbm9kZSBuYW1lIGNhY2hlIC0ge2Vycjo/fSIpOworICAgICAgICAgICAgfQorICAgICAg ICB9CisgICAgfQorCisgICAgYXN5bmMgZm4gcXVlcnlfbm9kZV9uYW1lc19mb3JfcmVtb3RlKHJl bW90ZTogJlJlbW90ZSkgLT4gUmVzdWx0PCgpLCBFcnJvcj4geworICAgICAgICAvLyBPbmx5IFBW RSBlbnRyaWVzIGN1cnJlbnRseSBoYXZlIGEgbm9kZSBjYWNoZSwgc28gc2tpcCBub24tUFZFIHJl bW90ZXM6CisgICAgICAgIGlmIHJlbW90ZS50eSAhPSBSZW1vdGVUeXBlOjpQdmUgeworICAgICAg ICAgICAgcmV0dXJuIE9rKCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIG5vdyBhZGQgbmV3 IG5vZGVzCisgICAgICAgIGZvciBub2RlIGluICZyZW1vdGUubm9kZXMgeworICAgICAgICAgICAg dHJhY2luZzo6ZGVidWchKCJxdWVyeWluZyByZW1vdGUgezo/fSBub2RlIHs6P30iLCByZW1vdGUu aWQsIG5vZGUuaG9zdG5hbWUpOworCisgICAgICAgICAgICAvLyBpZiB0aGUgaG9zdCBpcyBuZXcs IHdlIG5lZWQgdG8gcXVlcnkgaXRzIG5hbWUKKyAgICAgICAgICAgIGxldCBxdWVyeV9yZXN1bHQg PSBtYXRjaCBxdWVyeV9ub2RlX25hbWUocmVtb3RlLCAmbm9kZS5ob3N0bmFtZSkuYXdhaXQgewor ICAgICAgICAgICAgICAgIE9rKG5vZGVfbmFtZSkgPT4gU29tZShub2RlX25hbWUpLAorICAgICAg ICAgICAgICAgIEVycihlcnIpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgbG9nOjplcnJvciEo CisgICAgICAgICAgICAgICAgICAgICAgICAiZmFpbGVkIHRvIHF1ZXJ5IGluZm8gZm9yIHJlbW90 ZSAne30nIG5vZGUgJ3t9JyAtIHtlcnI6P30iLAorICAgICAgICAgICAgICAgICAgICAgICAgcmVt b3RlLmlkLAorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5ob3N0bmFtZQorICAgICAgICAg ICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICBOb25lCisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgbGV0IG11dCBjYWNoZSA9IFJlbW90ZU1h cHBpbmdDYWNoZTo6d3JpdGUoKT87CisgICAgICAgICAgICBpZiBsZXQgU29tZShpbmZvKSA9IGNh Y2hlLmluZm9fYnlfaG9zdG5hbWVfbXV0KCZyZW1vdGUuaWQsICZub2RlLmhvc3RuYW1lKSB7Cisg ICAgICAgICAgICAgICAgaW5mby5yZWFjaGFibGUgPSBxdWVyeV9yZXN1bHQuaXNfc29tZSgpOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgbGV0IFNvbWUobm9kZV9uYW1lKSA9IHF1ZXJ5 X3Jlc3VsdCB7CisgICAgICAgICAgICAgICAgY2FjaGUuc2V0X25vZGVfbmFtZSgmcmVtb3RlLmlk LCAmbm9kZS5ob3N0bmFtZSwgU29tZShub2RlX25hbWUpKTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIGNhY2hlLnNhdmUoKT87CisgICAgICAgIH0KKworICAgICAgICBPaygoKSkKKyAgICB9 Cit9CisKKy8vLyBDYWxscyBgL2NsdXN0ZXIvc3RhdHVzYCBkaXJlY3RseSBvbiBhIHNwZWNpZmlj IG5vZGUgdG8gZmluZCBpdHMgbmFtZS4KK2FzeW5jIGZuIHF1ZXJ5X25vZGVfbmFtZShyZW1vdGU6 ICZSZW1vdGUsIGhvc3RuYW1lOiAmc3RyKSAtPiBSZXN1bHQ8U3RyaW5nLCBFcnJvcj4geworICAg IGxldCBjbGllbnQgPSBzZXJ2ZXI6OmNvbm5lY3Rpb246Om1ha2VfcHZlX2NsaWVudF93aXRoX2Vu ZHBvaW50KHJlbW90ZSwgU29tZShob3N0bmFtZSkpPzsKKyAgICBsZXQgbm9kZV9zdGF0dXNfbGlz dCA9IGNsaWVudC5jbHVzdGVyX3N0YXR1cygpLmF3YWl0PzsKKyAgICBmb3Igbm9kZSBpbiBub2Rl X3N0YXR1c19saXN0IHsKKyAgICAgICAgaWYgbm9kZS5sb2NhbCA9PSBTb21lKHRydWUpIHsKKyAg ICAgICAgICAgIHJldHVybiBPayhub2RlLm5hbWUpOworICAgICAgICB9CisgICAgfQorICAgIGJh aWwhKCJmYWlsZWQgdG8gY29ubmVjdCB0byBub2RlIHtob3N0bmFtZX0iKTsKK30KZGlmZiAtLWdp dCBhL3NlcnZlci9zcmMvY29ubmVjdGlvbi5ycyBiL3NlcnZlci9zcmMvY29ubmVjdGlvbi5ycwpp bmRleCAzNWI5NDYyLi4zY2ZlZmJhIDEwMDY0NAotLS0gYS9zZXJ2ZXIvc3JjL2Nvbm5lY3Rpb24u cnMKKysrIGIvc2VydmVyL3NyYy9jb25uZWN0aW9uLnJzCkBAIC0yMTQsNiArMjE0LDE5IEBAIHB1 YiB0cmFpdCBDbGllbnRGYWN0b3J5IHsKICAgICAgICAgdGFyZ2V0X2VuZHBvaW50OiBPcHRpb248 JnN0cj4sCiAgICAgKSAtPiBSZXN1bHQ8QXJjPFB2ZUNsaWVudD4sIEVycm9yPjsKIAorICAgIC8v LyBDcmVhdGUgYSBuZXcgQVBJIGNsaWVudCBmb3IgUFZFIHJlbW90ZXMsIGJ1dCB3aXRoIGEgc3Bl Y2lmaWMgZW5kcG9pbnQuCisgICAgLy8vCisgICAgLy8vIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0 aW9uIGlnbm9yZXMgdGhlIGBub2RlYCBwYXJhbWV0ZXIgYW5kIGZvcndhcmRzIHRvCisgICAgLy8v IGBtYWtlX3B2ZV9jbGllbnQoKWAuCisgICAgZm4gbWFrZV9wdmVfY2xpZW50X3dpdGhfbm9kZSgK KyAgICAgICAgJnNlbGYsCisgICAgICAgIHJlbW90ZTogJlJlbW90ZSwKKyAgICAgICAgbm9kZTog JnN0ciwKKyAgICApIC0+IFJlc3VsdDxBcmM8UHZlQ2xpZW50PiwgRXJyb3I+IHsKKyAgICAgICAg bGV0IF8gPSBub2RlOworICAgICAgICBzZWxmLm1ha2VfcHZlX2NsaWVudChyZW1vdGUpCisgICAg fQorCiAgICAgLy8vIENyZWF0ZSBhIG5ldyBBUEkgY2xpZW50IGZvciBQVkUgcmVtb3Rlcy4KICAg ICAvLy8KICAgICAvLy8gSW4gY2FzZSB0aGUgcmVtb3RlIGhhcyBhIHVzZXIgY29uZmlndXJlZCAo aW5zdGVhZCBvZiBhbiBBUEkgdG9rZW4pLCBpdCB3aWxsIGNvbm5lY3QgYW5kIGdldApAQCAtMzQz LDYgKzM1NiwyMCBAQCBpbXBsIENsaWVudEZhY3RvcnkgZm9yIERlZmF1bHRDbGllbnRGYWN0b3J5 IHsKICAgICAgICAgT2soQXJjOjpuZXcoUHZlQ2xpZW50SW1wbChjbGllbnQpKSkKICAgICB9CiAK KyAgICBmbiBtYWtlX3B2ZV9jbGllbnRfd2l0aF9ub2RlKAorICAgICAgICAmc2VsZiwKKyAgICAg ICAgcmVtb3RlOiAmUmVtb3RlLAorICAgICAgICBub2RlOiAmc3RyLAorICAgICkgLT4gUmVzdWx0 PEFyYzxQdmVDbGllbnQ+LCBFcnJvcj4geworICAgICAgICBsZXQgY2FjaGUgPSBjcmF0ZTo6cmVt b3RlX2NhY2hlOjpSZW1vdGVNYXBwaW5nQ2FjaGU6OmdldCgpOworICAgICAgICBtYXRjaCBjYWNo ZS5pbmZvX2J5X25vZGVfbmFtZSgmcmVtb3RlLmlkLCBub2RlKSB7CisgICAgICAgICAgICBTb21l KGluZm8pIGlmIGluZm8ucmVhY2hhYmxlID0+IHsKKyAgICAgICAgICAgICAgICBzZWxmLm1ha2Vf cHZlX2NsaWVudF93aXRoX2VuZHBvaW50KHJlbW90ZSwgU29tZSgmaW5mby5ob3N0bmFtZSkpCisg ICAgICAgICAgICB9CisgICAgICAgICAgICBfID0+IHNlbGYubWFrZV9wdmVfY2xpZW50KHJlbW90 ZSksCisgICAgICAgIH0KKyAgICB9CisKICAgICBhc3luYyBmbiBtYWtlX3B2ZV9jbGllbnRfYW5k X2xvZ2luKCZzZWxmLCByZW1vdGU6ICZSZW1vdGUpIC0+IFJlc3VsdDxBcmM8UHZlQ2xpZW50Piwg RXJyb3I+IHsKICAgICAgICAgbGV0IGNsaWVudCA9IGNvbm5lY3Rfb3JfbG9naW4ocmVtb3RlLCBO b25lKS5hd2FpdD87CiAgICAgICAgIE9rKEFyYzo6bmV3KFB2ZUNsaWVudEltcGwoY2xpZW50KSkp CkBAIC0zNzcsNiArNDA0LDExIEBAIHB1YiBmbiBtYWtlX3B2ZV9jbGllbnRfd2l0aF9lbmRwb2lu dCgKICAgICBpbnN0YW5jZSgpLm1ha2VfcHZlX2NsaWVudF93aXRoX2VuZHBvaW50KHJlbW90ZSwg dGFyZ2V0X2VuZHBvaW50KQogfQogCisvLy8gQ3JlYXRlIGEgbmV3IEFQSSBjbGllbnQgZm9yIFBW RSByZW1vdGVzIGFuZCB0cnkgdG8gbWFrZSBpdCBjb25uZWN0IHRvIGEgc3BlY2lmaWMgKm5vZGUq LgorcHViIGZuIG1ha2VfcHZlX2NsaWVudF93aXRoX25vZGUocmVtb3RlOiAmUmVtb3RlLCBub2Rl OiAmc3RyKSAtPiBSZXN1bHQ8QXJjPFB2ZUNsaWVudD4sIEVycm9yPiB7CisgICAgaW5zdGFuY2Uo KS5tYWtlX3B2ZV9jbGllbnRfd2l0aF9ub2RlKHJlbW90ZSwgbm9kZSkKK30KKwogLy8vIENyZWF0 ZSBhIG5ldyBBUEkgY2xpZW50IGZvciBQQlMgcmVtb3RlcwogcHViIGZuIG1ha2VfcGJzX2NsaWVu dChyZW1vdGU6ICZSZW1vdGUpIC0+IFJlc3VsdDxCb3g8UGJzQ2xpZW50PiwgRXJyb3I+IHsKICAg ICBpbnN0YW5jZSgpLm1ha2VfcGJzX2NsaWVudChyZW1vdGUpCmRpZmYgLS1naXQgYS9zZXJ2ZXIv c3JjL2xpYi5ycyBiL3NlcnZlci9zcmMvbGliLnJzCmluZGV4IDEyZGM5MTIuLmRjYjI0ZjAgMTAw NjQ0Ci0tLSBhL3NlcnZlci9zcmMvbGliLnJzCisrKyBiL3NlcnZlci9zcmMvbGliLnJzCkBAIC02 LDYgKzYsNyBAQCBwdWIgbW9kIGF1dGg7CiBwdWIgbW9kIGNvbnRleHQ7CiBwdWIgbW9kIGVudjsK IHB1YiBtb2QgbWV0cmljX2NvbGxlY3Rpb247CitwdWIgbW9kIHJlbW90ZV9jYWNoZTsKIHB1YiBt b2QgcmVzb3VyY2VfY2FjaGU7CiBwdWIgbW9kIHRhc2tfY2FjaGU7CiBwdWIgbW9kIHRhc2tfdXRp bHM7CmRpZmYgLS1naXQgYS9zZXJ2ZXIvc3JjL3JlbW90ZV9jYWNoZS9tb2QucnMgYi9zZXJ2ZXIv c3JjL3JlbW90ZV9jYWNoZS9tb2QucnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uNjllNzlmMQotLS0gL2Rldi9udWxsCisrKyBiL3NlcnZlci9zcmMvcmVtb3RlX2NhY2hlL21v ZC5ycwpAQCAtMCwwICsxLDI4NSBAQAorLy8hIFRoaXMgY3VycmVudGx5IG9ubHkgbWF0dGVycyBm b3IgUFZFIHJlbW90ZXMuCisvLyEKKy8vISBQVkUgcmVtb3RlcyBoYXZlIG11bHRpcGxlIG5vZGVz IHdoaWNoIGhhdmUgbmFtZXMgd2UgY2Fubm90IG5lY2Vzc2FyaWx5IGluZmVyIGZyb20gdGhlCisv LyEgImhvc3RuYW1lIiBmaWVsZCwgc2luY2UgdGhhdCBtaWdodCBiZSBhIGRpZmZlcmVudCBhZGRy ZXNzLCBwb3RlbnRpYWxseSB3aXRoIGEgcG9ydC4KKy8vIQorLy8hIFdlIGFsc28gZG8gbm90IHdh bnQgdXNlcnMgdG8gaGF2ZSB0byBtYWludGFpbiB0aGUgUERNIGhvc3Qvbm9kZS1uYW1lIGNvbWJp bmF0aW9ucyAoaW4gY2FzZSB0aGV5CisvLyEgcmVuYW1lIG9yIHJlaW5zdGFsbCBub2RlcykuIFJl bmFtaW5nIHdvdWxkIGJyZWFrIHRoZSBQRE0gY29uZmlnLCByZWluc3RhbGxpbmcgd291bGQgYnJl YWsgZWcuIGEKKy8vISAibWFjaGluZS1pZCIgYmFzZWQgbWFwcGluZy4KKy8vIQorLy8hIFdlIGFs c28gY2Fubm90IHJlbHkgaW4gdGhlIFRMUyBmaW5nZXJwcmludHMsIGJlY2F1c2UgYSB3aG9sZSBj bHVzdGVyIGNvdWxkIHBvdGVudGlhbGx5IHVzZSBhCisvLyEgc2luZ2xlIHdpbGRjYXJkIGNlcnRp ZmljYXRlLgorLy8hCisvLyEgSW5zdGVhZCwgd2UgbWFpbnRhaW4gYSBjYWNoZWQgbWFwcGluZyBv ZiBgYWRkcmVzcyDihpQgbmFtZWAgaW4gYC92YXJgLCB3aGljaCBnZXRzIHBvbGxlZAorLy8hIHJl Z3VsYXJseS4KKy8vISBGb3IgUFZFIHdlIGNhbiBxdWVyeSBhbiBhZGRyZXNzJyBgL2NsdXN0ZXIv c3RhdHVzYCBhbmQgbG9vayBmb3IgYW4gZW50cnkgbWFya2VkIGFzIGBsb2NhbDoxYC4KKy8vISBM YXRlciB0aGlzIG1pZ2h0IGJlIGNoYW5nZWQgdG8gbG9va2luZyBmb3IgdGhlIG5vZGUgbmFtZSBp biB0aGUgcmVzdWx0IG9mCisvLyEgYC9ub2Rlcy9sb2NhbGhvc3Qvc3RhdHVzYCAtIG9uY2UgdGhp cyBpcyBpbXBsZW1lbnRlZCBhbmQgcm9sbGVkIG91dCBsb25nIGVub3VnaCBpbiBQVkUuCisKK3Vz ZSBzdGQ6OmNvbGxlY3Rpb25zOjpIYXNoTWFwOwordXNlIHN0ZDo6c3luYzo6e0FyYywgTXV0ZXh9 OworCit1c2UgYW55aG93Ojp7Q29udGV4dCBhcyBfLCBFcnJvcn07Cit1c2Ugc2VyZGU6OntEZXNl cmlhbGl6ZSwgU2VyaWFsaXplfTsKKwordXNlIHByb3htb3hfcHJvZHVjdF9jb25maWc6OnJlcGxh Y2VfY29uZmlnOwordXNlIHByb3htb3hfcHJvZHVjdF9jb25maWc6OntvcGVuX2FwaV9sb2NrZmls ZSwgQXBpTG9ja0d1YXJkfTsKKwordXNlIHBkbV9hcGlfdHlwZXM6OnJlbW90ZXM6OlJlbW90ZVR5 cGU7Cit1c2UgcGRtX2NvbmZpZzo6Q29uZmlnVmVyc2lvbkNhY2hlOworCitjb25zdCBDQUNIRV9G SUxFTkFNRTogJnN0ciA9IGNvbmNhdCEoCisgICAgcGRtX2J1aWxkY2ZnOjpQRE1fQ0FDSEVfRElS X00hKCksCisgICAgIi9yZW1vdGUtbWFwcGluZy1jYWNoZS5qc29uIgorKTsKKworY29uc3QgTE9D S19GSUxFOiAmc3RyID0gY29uY2F0ISgKKyAgICBwZG1fYnVpbGRjZmc6OlBETV9DQUNIRV9ESVJf TSEoKSwKKyAgICAiLy5yZW1vdGUtbWFwcGluZy1jYWNoZS5qc29uLmxvY2siCispOworCitzdGF0 aWMgQ1VSUkVOVF9DQUNIRTogTXV0ZXg8T3B0aW9uPENhY2hlU3RhdGU+PiA9IE11dGV4OjpuZXco Tm9uZSk7CisKKyNbZGVyaXZlKENsb25lKV0KK3N0cnVjdCBDYWNoZVN0YXRlIHsKKyAgICBjYWNo ZTogQXJjPFJlbW90ZU1hcHBpbmdDYWNoZT4sCisgICAgZ2VuZXJhdGlvbjogdXNpemUsCit9CisK K2ltcGwgQ2FjaGVTdGF0ZSB7CisgICAgZm4gZ2V0KCkgLT4gU2VsZiB7CisgICAgICAgIGxldCBt dXQgY2FjaGUgPSBDVVJSRU5UX0NBQ0hFLmxvY2soKS51bndyYXAoKTsKKworICAgICAgICBsZXQg dmVyc2lvbl9jYWNoZSA9IENvbmZpZ1ZlcnNpb25DYWNoZTo6bmV3X2xvZ19lcnJvcigpOworCisg ICAgICAgIGlmIGxldCBTb21lKGNhY2hlKSA9IGNhY2hlLmNsb25lKCkgeworICAgICAgICAgICAg aWYgbGV0IFNvbWUodmVyc2lvbl9jYWNoZSkgPSB2ZXJzaW9uX2NhY2hlLmFzX2RlcmVmKCkgewor ICAgICAgICAgICAgICAgIGlmIGNhY2hlLmdlbmVyYXRpb24gPT0gdmVyc2lvbl9jYWNoZS5yZW1v dGVfbWFwcGluZ19jYWNoZSgpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhY2hlOwor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBvdXRkYXRlZCwgZmFsbCBiYWNr IHRvIHJlbG9hZGluZworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gb3V0ZGF0ZWQsIG9y IHdlIGZhaWxlZCB0byBxdWVyeSB0aGUgdmVyc2lvbiBjYWNoZSwgZmFsbCB0aHJvdWdoIHRvIHRo ZSBsb2FkCisgICAgICAgIH0KKworICAgICAgICAvLyB3ZSBoYXZlIG5vIHZhbGlkIGNhY2hlIHll dDoKKyAgICAgICAgbGV0IGdlbmVyYXRpb24gPSB2ZXJzaW9uX2NhY2hlLm1hcCh8Y3wgYy5yZW1v dGVfbWFwcGluZ19jYWNoZSgpKS51bndyYXBfb3IoMCk7CisKKyAgICAgICAgbGV0IGRhdGEgPSBB cmM6Om5ldyhSZW1vdGVNYXBwaW5nQ2FjaGU6OmxvYWQoKSk7CisgICAgICAgIGxldCB0aGlzID0g Q2FjaGVTdGF0ZSB7CisgICAgICAgICAgICBjYWNoZTogQXJjOjpjbG9uZSgmZGF0YSksCisgICAg ICAgICAgICBnZW5lcmF0aW9uLAorICAgICAgICB9OworICAgICAgICAqY2FjaGUgPSBTb21lKHRo aXMuY2xvbmUoKSk7CisgICAgICAgIHRoaXMKKyAgICB9CisKKyAgICBmbiB1cGRhdGUoY2FjaGU6 IFJlbW90ZU1hcHBpbmdDYWNoZSkgeworICAgICAgICBsZXQgbXV0IGN1cnJlbnRfY2FjaGUgPSBD VVJSRU5UX0NBQ0hFLmxvY2soKS51bndyYXAoKTsKKyAgICAgICAgbGV0IGdlbmVyYXRpb24gPSBt YXRjaCBwZG1fY29uZmlnOjpDb25maWdWZXJzaW9uQ2FjaGU6Om5ld19sb2dfZXJyb3IoKSB7Cisg ICAgICAgICAgICBTb21lKHZlcnNpb25fY2FjaGUpID0+IHZlcnNpb25fY2FjaGUuaW5jcmVhc2Vf cmVtb3RlX21hcHBpbmdfY2FjaGUoKSwKKyAgICAgICAgICAgIE5vbmUgPT4gMCwKKyAgICAgICAg fTsKKyAgICAgICAgKmN1cnJlbnRfY2FjaGUgPSBTb21lKENhY2hlU3RhdGUgeworICAgICAgICAg ICAgZ2VuZXJhdGlvbiwKKyAgICAgICAgICAgIGNhY2hlOiBBcmM6Om5ldyhjYWNoZSksCisgICAg ICAgIH0pOworICAgIH0KK30KKworcHViIHN0cnVjdCBXcml0ZVJlbW90ZU1hcHBpbmdDYWNoZSB7 CisgICAgcHViIGRhdGE6IFJlbW90ZU1hcHBpbmdDYWNoZSwKKyAgICBfbG9jazogQXBpTG9ja0d1 YXJkLAorfQorCitpbXBsIHN0ZDo6b3BzOjpEZXJlZiBmb3IgV3JpdGVSZW1vdGVNYXBwaW5nQ2Fj aGUgeworICAgIHR5cGUgVGFyZ2V0ID0gUmVtb3RlTWFwcGluZ0NhY2hlOworCisgICAgZm4gZGVy ZWYoJnNlbGYpIC0+ICZTZWxmOjpUYXJnZXQgeworICAgICAgICAmc2VsZi5kYXRhCisgICAgfQor fQorCitpbXBsIHN0ZDo6b3BzOjpEZXJlZk11dCBmb3IgV3JpdGVSZW1vdGVNYXBwaW5nQ2FjaGUg eworICAgIGZuIGRlcmVmX211dCgmbXV0IHNlbGYpIC0+ICZtdXQgU2VsZjo6VGFyZ2V0IHsKKyAg ICAgICAgJm11dCBzZWxmLmRhdGEKKyAgICB9Cit9CisKK2ltcGwgV3JpdGVSZW1vdGVNYXBwaW5n Q2FjaGUgeworICAgIGZuIG5ldyhsb2NrOiBBcGlMb2NrR3VhcmQsIGRhdGE6IFJlbW90ZU1hcHBp bmdDYWNoZSkgLT4gU2VsZiB7CisgICAgICAgIFNlbGYgeyBfbG9jazogbG9jaywgZGF0YSB9Cisg ICAgfQorCisgICAgcHViIGZuIHNhdmUoc2VsZikgLT4gUmVzdWx0PCgpLCBFcnJvcj4geworICAg ICAgICBzZWxmLmRhdGEuc2F2ZSgpPzsKKyAgICAgICAgQ2FjaGVTdGF0ZTo6dXBkYXRlKHNlbGYu ZGF0YSk7CisgICAgICAgIE9rKCgpKQorICAgIH0KK30KKworLy8vIEZpbGUgZm9ybWF0IGZvciBg L3Zhci9jYWNoZS9wcm94bW94LWRhdGFjZW50ZXItbWFuYWdlci9yZW1vdGUtbWFwcGluZy1jYWNo ZS5qc29uYAorI1tkZXJpdmUoQ2xvbmUsIERlZmF1bHQsIERlc2VyaWFsaXplLCBTZXJpYWxpemUp XQorcHViIHN0cnVjdCBSZW1vdGVNYXBwaW5nQ2FjaGUgeworICAgIC8vLyBUaGlzIG1hcHMgYSBy ZW1vdGUgbmFtZSB0byBpdHMgbWFwcGluZy4KKyAgICBwdWIgcmVtb3RlczogSGFzaE1hcDxTdHJp bmcsIFJlbW90ZU1hcHBpbmc+LAorfQorCitpbXBsIFJlbW90ZU1hcHBpbmdDYWNoZSB7CisgICAg Ly8vIEdldCByZWFkIG9ubHkgYWNjZXNzIHRvIHRoZSBjdXJyZW50IGNhY2hlLgorICAgIHB1YiBm biBnZXQoKSAtPiBBcmM8U2VsZj4geworICAgICAgICBBcmM6OmNsb25lKCZDYWNoZVN0YXRlOjpn ZXQoKS5jYWNoZSkKKyAgICB9CisKKyAgICAvLy8gKkxvY2sqIHRoZSBjYWNoZSBsb2NrIGZpbGUg YW5kIGdldCBtdXRhYmxlIGFjY2VzcyB0byB0aGUgY3VycmVudCBjb250ZW50cy4KKyAgICBwdWIg Zm4gd3JpdGUoKSAtPiBSZXN1bHQ8V3JpdGVSZW1vdGVNYXBwaW5nQ2FjaGUsIEVycm9yPiB7Cisg ICAgICAgIGxldCB3cml0ZV9sb2NrID0gb3Blbl9hcGlfbG9ja2ZpbGUoTE9DS19GSUxFLCBOb25l LCB0cnVlKT87CisKKyAgICAgICAgT2soV3JpdGVSZW1vdGVNYXBwaW5nQ2FjaGU6Om5ldygKKyAg ICAgICAgICAgIHdyaXRlX2xvY2ssCisgICAgICAgICAgICBTZWxmOjpjbG9uZSgmU2VsZjo6Z2V0 KCkpLAorICAgICAgICApKQorICAgIH0KKworICAgIC8vLyBMb2FkIHRoZSBjdXJyZW50IHJlbW90 ZSBtYXBwaW5nIGNhY2hlLiBUaGlzIGFsd2F5cyBzdWNjZWVkcyBhbmQgbWF5IHJldHVybiBhbiBl bXB0eSBjYWNoZS4KKyAgICBmbiBsb2FkKCkgLT4gU2VsZiB7CisgICAgICAgIGZuIGRvX2xvYWQo KSAtPiBSZXN1bHQ8T3B0aW9uPFJlbW90ZU1hcHBpbmdDYWNoZT4sIEVycm9yPiB7CisgICAgICAg ICAgICBPayhwcm94bW94X3N5czo6ZnM6OmZpbGVfcmVhZF9vcHRpb25hbF9zdHJpbmcoQ0FDSEVf RklMRU5BTUUpPworICAgICAgICAgICAgICAgIC5tYXAofGNvbnRlbnR8IHNlcmRlX2pzb246OmZy b21fc3RyKCZjb250ZW50KSkKKyAgICAgICAgICAgICAgICAudHJhbnNwb3NlKCk/KQorICAgICAg ICB9CisKKyAgICAgICAgbWF0Y2ggZG9fbG9hZCgpIHsKKyAgICAgICAgICAgIE9rKFNvbWUoZGF0 YSkpID0+IHJldHVybiBkYXRhLAorICAgICAgICAgICAgT2soTm9uZSkgPT4gKCksCisgICAgICAg ICAgICBFcnIoZXJyKSA9PiB7CisgICAgICAgICAgICAgICAgbG9nOjplcnJvciEoImNvcnJ1cHRl ZCByZW1vdGUtbWFwcGluZy1jYWNoZS5qc29uIGZpbGUsIGRpc2NhcmRpbmcgLSB7ZXJyOj99Iik7 CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBTZWxmOjpkZWZhdWx0KCkKKyAg ICB9CisKKyAgICAvLy8gU2F2ZSB0aGUgY3VycmVudCByZW1vdGUgbWFwcGluZyBjYWNoZS4gVGhp cyBzaG91bGQgb25seSBiZSBkb25lIGJ5IHRoZSByZW1vdGUgbWFwcGluZyB0YXNrLgorICAgIGZu IHNhdmUoJnNlbGYpIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKKyAgICAgICAgbGV0IHJhdyA9IHNl cmRlX2pzb246OnRvX3ZlYyhzZWxmKS5jb250ZXh0KCJmYWlsZWQgdG8gc2VyaWFsaXplIHJlbW90 ZSBtYXBwaW5nIGNhY2hlIik/OworICAgICAgICByZXBsYWNlX2NvbmZpZyhDQUNIRV9GSUxFTkFN RSwgJnJhdykKKyAgICB9CisKKyAgICAvLy8gQXR0ZW1wdCB0byByZXRyaWV2ZSB0aGUgaG9zdCBu YW1lIGZyb20gYSBub2RlIG5hbWUuCisgICAgcHViIGZuIG5vZGVfbmFtZV90b19ob3N0bmFtZSgm c2VsZiwgcmVtb3RlOiAmc3RyLCBub2RlX25hbWU6ICZzdHIpIC0+IE9wdGlvbjwmc3RyPiB7Cisg ICAgICAgIFNvbWUoc2VsZi5yZW1vdGVzLmdldChyZW1vdGUpPy5ub2RlX3RvX2hvc3QuZ2V0KG5v ZGVfbmFtZSk/KQorICAgIH0KKworICAgIC8vLyBBdHRlbXB0IHRvIGdldCB0aGUgbm9kZSBpbmZv IGZvciBhIG5vZGUgbmFtZS4KKyAgICBwdWIgZm4gaW5mb19ieV9ub2RlX25hbWUoJnNlbGYsIHJl bW90ZV9uYW1lOiAmc3RyLCBub2RlX25hbWU6ICZzdHIpIC0+IE9wdGlvbjwmSG9zdEluZm8+IHsK KyAgICAgICAgbGV0IHJlbW90ZSA9IHNlbGYucmVtb3Rlcy5nZXQocmVtb3RlX25hbWUpPzsKKyAg ICAgICAgbGV0IGhvc3QgPSByZW1vdGUubm9kZV90b19ob3N0LmdldChub2RlX25hbWUpPzsKKyAg ICAgICAgcmVtb3RlLmhvc3RzLmdldChob3N0KQorICAgIH0KKworICAgIHB1YiBmbiBpbmZvX2J5 X25vZGVfbmFtZV9tdXQoCisgICAgICAgICZtdXQgc2VsZiwKKyAgICAgICAgcmVtb3RlX25hbWU6 ICZzdHIsCisgICAgICAgIG5vZGVfbmFtZTogJnN0ciwKKyAgICApIC0+IE9wdGlvbjwmbXV0IEhv c3RJbmZvPiB7CisgICAgICAgIGxldCByZW1vdGUgPSBzZWxmLnJlbW90ZXMuZ2V0X211dChyZW1v dGVfbmFtZSk/OworICAgICAgICBsZXQgaG9zdCA9IHJlbW90ZS5ub2RlX3RvX2hvc3QuZ2V0KG5v ZGVfbmFtZSk/OworICAgICAgICByZW1vdGUuaG9zdHMuZ2V0X211dChob3N0KQorICAgIH0KKwor ICAgIC8vLyBBdHRlbXB0IHRvIHJldHJpZXZlIHRoZSBub2RlIG5hbWUgZnJvbSBhIGhvc3QgbmFt ZS4KKyAgICBwdWIgZm4gaW5mb19ieV9ob3N0bmFtZSgmc2VsZiwgcmVtb3RlOiAmc3RyLCBob3N0 bmFtZTogJnN0cikgLT4gT3B0aW9uPCZIb3N0SW5mbz4geworICAgICAgICBzZWxmLnJlbW90ZXMu Z2V0KHJlbW90ZSk/Lmhvc3RzLmdldChob3N0bmFtZSkKKyAgICB9CisKKyAgICBwdWIgZm4gaW5m b19ieV9ob3N0bmFtZV9tdXQoJm11dCBzZWxmLCByZW1vdGU6ICZzdHIsIGhvc3RuYW1lOiAmc3Ry KSAtPiBPcHRpb248Jm11dCBIb3N0SW5mbz4geworICAgICAgICBzZWxmLnJlbW90ZXMuZ2V0X211 dChyZW1vdGUpPy5ob3N0cy5nZXRfbXV0KGhvc3RuYW1lKQorICAgIH0KKworICAgIC8vLyBNYXJr IGEgaG9zdCBhcyByZWFjaGFibGUuCisgICAgcHViIGZuIG1hcmtfaG9zdF9yZWFjaGFibGUoJm11 dCBzZWxmLCByZW1vdGVfbmFtZTogJnN0ciwgaG9zdG5hbWU6ICZzdHIsIHJlYWNoYWJsZTogYm9v bCkgeworICAgICAgICBpZiBsZXQgU29tZShpbmZvKSA9IHNlbGYuaW5mb19ieV9ob3N0bmFtZV9t dXQocmVtb3RlX25hbWUsIGhvc3RuYW1lKSB7CisgICAgICAgICAgICBpbmZvLnJlYWNoYWJsZSA9 IHJlYWNoYWJsZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vLyBNYXJrIGEgaG9zdCBhcyBy ZWFjaGFibGUuCisgICAgcHViIGZuIG1hcmtfbm9kZV9yZWFjaGFibGUoJm11dCBzZWxmLCByZW1v dGVfbmFtZTogJnN0ciwgbm9kZV9uYW1lOiAmc3RyLCByZWFjaGFibGU6IGJvb2wpIHsKKyAgICAg ICAgaWYgbGV0IFNvbWUoaW5mbykgPSBzZWxmLmluZm9fYnlfbm9kZV9uYW1lX211dChyZW1vdGVf bmFtZSwgbm9kZV9uYW1lKSB7CisgICAgICAgICAgICBpbmZvLnJlYWNoYWJsZSA9IHJlYWNoYWJs ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vLyBVcGRhdGUgdGhlIG5vZGUgbmFtZSBmb3Ig YSBob3N0LCBpZiB0aGUgcmVtb3RlIGFuZCBob3N0IGV4aXN0IChvdGhlcndpc2UgdGhpcyBkb2Vz CisgICAgLy8vIG5vdGhpbmcpLgorICAgIHB1YiBmbiBzZXRfbm9kZV9uYW1lKCZtdXQgc2VsZiwg cmVtb3RlX25hbWU6ICZzdHIsIGhvc3RuYW1lOiAmc3RyLCBub2RlX25hbWU6IE9wdGlvbjxTdHJp bmc+KSB7CisgICAgICAgIGlmIGxldCBTb21lKHJlbW90ZSkgPSBzZWxmLnJlbW90ZXMuZ2V0X211 dChyZW1vdGVfbmFtZSkgeworICAgICAgICAgICAgcmVtb3RlLnNldF9ub2RlX25hbWUoaG9zdG5h bWUsIG5vZGVfbmFtZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vLyBBbiBlbnRyeSBmb3Ig YSByZW1vdGUgaW4gYSBbYFJlbW90ZU1hcHBpbmdDYWNoZWBdLgorI1tkZXJpdmUoQ2xvbmUsIERl c2VyaWFsaXplLCBTZXJpYWxpemUpXQorcHViIHN0cnVjdCBSZW1vdGVNYXBwaW5nIHsKKyAgICAv Ly8gVGhlIHJlbW90ZSB0eXBlLgorICAgIHB1YiB0eTogUmVtb3RlVHlwZSwKKworICAgIC8vLyBN YXBzIGEgYGhvc3RuYW1lYCB0byBpbmZvcm1hdGlvbiB3ZSBrZWVwIGFib3V0IGl0LgorICAgIHB1 YiBob3N0czogSGFzaE1hcDxTdHJpbmcsIEhvc3RJbmZvPiwKKworICAgIC8vLyBNYXBzIGEgbm9k ZSBuYW1lIHRvIGEgaG9zdG5hbWUsIGZvciB3aGVyZSB3ZSBoYXZlIHRoYXQgaW5mby4KKyAgICBw dWIgbm9kZV90b19ob3N0OiBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiwKK30KKworaW1wbCBSZW1v dGVNYXBwaW5nIHsKKyAgICBwdWIgZm4gbmV3KHR5OiBSZW1vdGVUeXBlKSAtPiBTZWxmIHsKKyAg ICAgICAgU2VsZiB7CisgICAgICAgICAgICB0eSwKKyAgICAgICAgICAgIGhvc3RzOiBIYXNoTWFw OjpuZXcoKSwKKyAgICAgICAgICAgIG5vZGVfdG9faG9zdDogSGFzaE1hcDo6bmV3KCksCisgICAg ICAgIH0KKyAgICB9CisKKyAgICAvLy8gVXBkYXRlIHRoZSBub2RlIG5hbWUgZm9yIGEgaG9zdCwg aWYgdGhlIGhvc3QgZXhpc3RzIChvdGhlcndpc2UgdGhpcyBkb2VzIG5vdGhpbmcpLgorICAgIHB1 YiBmbiBzZXRfbm9kZV9uYW1lKCZtdXQgc2VsZiwgaG9zdG5hbWU6ICZzdHIsIG5vZGVfbmFtZTog T3B0aW9uPFN0cmluZz4pIHsKKyAgICAgICAgaWYgbGV0IFNvbWUoaW5mbykgPSBzZWxmLmhvc3Rz LmdldF9tdXQoaG9zdG5hbWUpIHsKKyAgICAgICAgICAgIGlmIGxldCBTb21lKG9sZCkgPSBpbmZv Lm5vZGVfbmFtZS50YWtlKCkgeworICAgICAgICAgICAgICAgIHNlbGYubm9kZV90b19ob3N0LnJl bW92ZSgmb2xkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGluZm8ubm9kZV9uYW1lID0g bm9kZV9uYW1lOworICAgICAgICAgICAgaWYgbGV0IFNvbWUobmV3KSA9ICZpbmZvLm5vZGVfbmFt ZSB7CisgICAgICAgICAgICAgICAgc2VsZi5ub2RlX3RvX2hvc3QuaW5zZXJ0KG5ldy5jbG9uZSgp LCBob3N0bmFtZS50b19zdHJpbmcoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9 Cit9CisKKy8vLyBBbGwgdGhlIGRhdGEgd2Uga2VlcCBjYWNoZWQgZm9yIG5vZGVzIGZvdW5kIGlu IFtgUmVtb3RlTWFwcGluZ2BdLgorI1tkZXJpdmUoQ2xvbmUsIERlc2VyaWFsaXplLCBTZXJpYWxp emUpXQorcHViIHN0cnVjdCBIb3N0SW5mbyB7CisgICAgLy8vIFRoaXMgaXMgdGhlIGhvc3QgbmFt ZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBub2RlLgorICAgIHB1YiBob3N0bmFtZTogU3RyaW5nLAor CisgICAgLy8vIFRoaXMgaXMgdGhlIGNsdXN0ZXIgc2lkZSBub2RlIG5hbWUsIGlmIHdlIGtub3cg aXQuCisgICAgbm9kZV9uYW1lOiBPcHRpb248U3RyaW5nPiwKKworICAgIC8vLyBUaGlzIG1lYW5z IHdlIHdlcmUgYWJsZSB0byByZWFjaCB0aGUgbm9kZS4KKyAgICAvLy8gV2hlbiBhIGNsaWVudCBm YWlscyB0byBjb25uZWN0IGl0IG1heSB1cGRhdGUgdGhpcyB0byBtYXJrIGl0IGFzIHVucmVhY2hh YmxlLgorICAgIHB1YiByZWFjaGFibGU6IGJvb2wsCit9CisKK2ltcGwgSG9zdEluZm8geworICAg IHB1YiBmbiBuZXcoaG9zdG5hbWU6IFN0cmluZykgLT4gU2VsZiB7CisgICAgICAgIFNlbGYgewor ICAgICAgICAgICAgaG9zdG5hbWUsCisgICAgICAgICAgICBub2RlX25hbWU6IE5vbmUsCisgICAg ICAgICAgICByZWFjaGFibGU6IHRydWUsCisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWIgZm4g bm9kZV9uYW1lKCZzZWxmKSAtPiBPcHRpb248JnN0cj4geworICAgICAgICBzZWxmLm5vZGVfbmFt ZS5hc19kZXJlZigpCisgICAgfQorfQotLSAKMi4zOS41CgoKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCnBkbS1kZXZlbCBtYWlsaW5nIGxpc3QKcGRtLWRl dmVsQGxpc3RzLnByb3htb3guY29tCmh0dHBzOi8vbGlzdHMucHJveG1veC5jb20vY2dpLWJpbi9t YWlsbWFuL2xpc3RpbmZvL3BkbS1kZXZlbAo=