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=