From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <pve-devel-bounces@lists.proxmox.com>
Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68])
	by lore.proxmox.com (Postfix) with ESMTPS id 7879D1FF164
	for <inbox@lore.proxmox.com>; Fri, 14 Feb 2025 14:41:13 +0100 (CET)
Received: from firstgate.proxmox.com (localhost [127.0.0.1])
	by firstgate.proxmox.com (Proxmox) with ESMTP id 8B04B1AF71;
	Fri, 14 Feb 2025 14:40:36 +0100 (CET)
From: Gabriel Goller <g.goller@proxmox.com>
To: pve-devel@lists.proxmox.com
Date: Fri, 14 Feb 2025 14:39:42 +0100
Message-Id: <20250214133951.344500-3-g.goller@proxmox.com>
X-Mailer: git-send-email 2.39.5
In-Reply-To: <20250214133951.344500-1-g.goller@proxmox.com>
References: <20250214133951.344500-1-g.goller@proxmox.com>
MIME-Version: 1.0
X-SPAM-LEVEL: Spam detection results:  0
 AWL -0.031 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: [pve-devel] [PATCH proxmox-ve-rs 02/11] add proxmox-frr crate with
 frr types
X-BeenThere: pve-devel@lists.proxmox.com
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Proxmox VE development discussion <pve-devel.lists.proxmox.com>
List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pve-devel>, 
 <mailto:pve-devel-request@lists.proxmox.com?subject=unsubscribe>
List-Archive: <http://lists.proxmox.com/pipermail/pve-devel/>
List-Post: <mailto:pve-devel@lists.proxmox.com>
List-Help: <mailto:pve-devel-request@lists.proxmox.com?subject=help>
List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel>, 
 <mailto:pve-devel-request@lists.proxmox.com?subject=subscribe>
Reply-To: Proxmox VE development discussion <pve-devel@lists.proxmox.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: pve-devel-bounces@lists.proxmox.com
Sender: "pve-devel" <pve-devel-bounces@lists.proxmox.com>

VGhpcyBjcmF0ZSBjb250YWlucyB0eXBlcyB0aGF0IHJlcHJlc2VudCB0aGUgZnJyIGNvbmZpZy4g
Rm9yIGV4YW1wbGUgaXQKY29udGFpbnMgYSBgUm91dGVyYCBhbmQgYEludGVyZmFjZWAgc3RydWN0
LiBUaGlzIEZyci1SZXByZXNlbnRhdGlvbiBjYW4KdGhlbiBiZSBjb252ZXJ0ZWQgdG8gdGhlIHJl
YWwgZnJyIGNvbmZpZy4KCkNvLWF1dGhvcmVkLWJ5OiBTdGVmYW4gSGFucmVpY2ggPHMuaGFucmVp
Y2hAcHJveG1veC5jb20+ClNpZ25lZC1vZmYtYnk6IEdhYnJpZWwgR29sbGVyIDxnLmdvbGxlckBw
cm94bW94LmNvbT4KLS0tCiBDYXJnby50b21sICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBw
cm94bW94LWZyci9DYXJnby50b21sICAgICAgICB8ICAyNSArKysrCiBwcm94bW94LWZyci9zcmMv
Y29tbW9uLnJzICAgICB8ICA1NCArKysrKysrKwogcHJveG1veC1mcnIvc3JjL2xpYi5ycyAgICAg
ICAgfCAyMjMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogcHJveG1veC1mcnIv
c3JjL29wZW5mYWJyaWMucnMgfCAxMzcgKysrKysrKysrKysrKysrKysrKysrCiBwcm94bW94LWZy
ci9zcmMvb3NwZi5ycyAgICAgICB8IDE0OCArKysrKysrKysrKysrKysrKysrKysrCiA2IGZpbGVz
IGNoYW5nZWQsIDU4OCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgcHJveG1veC1m
cnIvQ2FyZ28udG9tbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHByb3htb3gtZnJyL3NyYy9jb21tb24u
cnMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBwcm94bW94LWZyci9zcmMvbGliLnJzCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgcHJveG1veC1mcnIvc3JjL29wZW5mYWJyaWMucnMKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBwcm94bW94LWZyci9zcmMvb3NwZi5ycwoKZGlmZiAtLWdpdCBhL0NhcmdvLnRvbWwgYi9DYXJn
by50b21sCmluZGV4IGU0NTJjOTMxZTc4Yy4uZmZkYTEyMzNiMTdhIDEwMDY0NAotLS0gYS9DYXJn
by50b21sCisrKyBiL0NhcmdvLnRvbWwKQEAgLTEsNiArMSw3IEBACiBbd29ya3NwYWNlXQogbWVt
YmVycyA9IFsKICAgICAicHJveG1veC12ZS1jb25maWciLAorICAgICJwcm94bW94LWZyciIsCiAg
ICAgInByb3htb3gtbmV0d29yay10eXBlcyIsCiBdCiBleGNsdWRlID0gWwpkaWZmIC0tZ2l0IGEv
cHJveG1veC1mcnIvQ2FyZ28udG9tbCBiL3Byb3htb3gtZnJyL0NhcmdvLnRvbWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5iZWE4YTBmOGJhYjMKLS0tIC9kZXYvbnVs
bAorKysgYi9wcm94bW94LWZyci9DYXJnby50b21sCkBAIC0wLDAgKzEsMjUgQEAKK1twYWNrYWdl
XQorbmFtZSA9ICJwcm94bW94LWZyciIKK3ZlcnNpb24gPSAiMC4xLjAiCithdXRob3JzLndvcmtz
cGFjZSA9IHRydWUKK2VkaXRpb24ud29ya3NwYWNlID0gdHJ1ZQorbGljZW5zZS53b3Jrc3BhY2Ug
PSB0cnVlCitob21lcGFnZS53b3Jrc3BhY2UgPSB0cnVlCitleGNsdWRlLndvcmtzcGFjZSA9IHRy
dWUKK3J1c3QtdmVyc2lvbi53b3Jrc3BhY2UgPSB0cnVlCisKK1tkZXBlbmRlbmNpZXNdCit0aGlz
ZXJyb3IgPSB7IHdvcmtzcGFjZSA9IHRydWUgfQorYW55aG93ID0gIjEiCit0cmFjaW5nID0gIjAu
MSIKKworc2VyZGUgPSB7IHdvcmtzcGFjZSA9IHRydWUsIGZlYXR1cmVzID0gWyAiZGVyaXZlIiBd
IH0KK3NlcmRlX3dpdGggPSB7IHdvcmtzcGFjZSA9IHRydWUgfQoraXRvYSA9ICIxLjAuOSIKKwor
cHJveG1veC12ZS1jb25maWcgPSB7IHBhdGggPSAiLi4vcHJveG1veC12ZS1jb25maWciLCBvcHRp
b25hbCA9IHRydWUgfQorcHJveG1veC1zZWN0aW9uLWNvbmZpZyA9IHsgd29ya3NwYWNlID0gdHJ1
ZSwgb3B0aW9uYWwgPSB0cnVlIH0KK3Byb3htb3gtbmV0d29yay10eXBlcyA9IHsgcGF0aCA9ICIu
Li9wcm94bW94LW5ldHdvcmstdHlwZXMvIiB9CisKK1tmZWF0dXJlc10KK2NvbmZpZy1leHQgPSBb
ImRlcDpwcm94bW94LXZlLWNvbmZpZyIsICJkZXA6cHJveG1veC1zZWN0aW9uLWNvbmZpZyIgXQpk
aWZmIC0tZ2l0IGEvcHJveG1veC1mcnIvc3JjL2NvbW1vbi5ycyBiL3Byb3htb3gtZnJyL3NyYy9j
b21tb24ucnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4wZDk5YmI0
ZGE2ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9wcm94bW94LWZyci9zcmMvY29tbW9uLnJzCkBAIC0w
LDAgKzEsNTQgQEAKK3VzZSBzdGQ6OntmbXQ6OkRpc3BsYXksIHN0cjo6RnJvbVN0cn07CisKK3Vz
ZSBzZXJkZV93aXRoOjp7RGVzZXJpYWxpemVGcm9tU3RyLCBTZXJpYWxpemVEaXNwbGF5fTsKK3Vz
ZSB0aGlzZXJyb3I6OkVycm9yOworCisjW2Rlcml2ZShFcnJvciwgRGVidWcpXQorcHViIGVudW0g
RnJyV29yZEVycm9yIHsKKyAgICAjW2Vycm9yKCJ3b3JkIGlzIGVtcHR5IildCisgICAgSXNFbXB0
eSwKKyAgICAjW2Vycm9yKCJ3b3JkIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVyIildCisgICAg
SW52YWxpZENoYXJhY3RlciwKK30KKworI1tkZXJpdmUoQ2xvbmUsIERlYnVnLCBQYXJ0aWFsRXEs
IEVxLCBIYXNoLCBEZXNlcmlhbGl6ZUZyb21TdHIsIFNlcmlhbGl6ZURpc3BsYXkpXQorcHViIHN0
cnVjdCBGcnJXb3JkKFN0cmluZyk7CisKK2ltcGwgRnJyV29yZCB7CisgICAgcHViIGZuIG5ldyhu
YW1lOiBTdHJpbmcpIC0+IFJlc3VsdDxTZWxmLCBGcnJXb3JkRXJyb3I+IHsKKyAgICAgICAgaWYg
bmFtZS5pc19lbXB0eSgpIHsKKyAgICAgICAgICAgIHJldHVybiBFcnIoRnJyV29yZEVycm9yOjpJ
c0VtcHR5KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIG5hbWUKKyAgICAgICAgICAgIC5hc19i
eXRlcygpCisgICAgICAgICAgICAuaXRlcigpCisgICAgICAgICAgICAuYW55KHxjfCAhYy5pc19h
c2NpaSgpIHx8IGMuaXNfYXNjaWlfd2hpdGVzcGFjZSgpKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gRXJyKEZycldvcmRFcnJvcjo6SW52YWxpZENoYXJhY3Rlcik7CisgICAgICAgIH0K
KworICAgICAgICBPayhTZWxmKG5hbWUpKQorICAgIH0KK30KKworaW1wbCBGcm9tU3RyIGZvciBG
cnJXb3JkIHsKKyAgICB0eXBlIEVyciA9IEZycldvcmRFcnJvcjsKKworICAgIGZuIGZyb21fc3Ry
KHM6ICZzdHIpIC0+IFJlc3VsdDxTZWxmLCBTZWxmOjpFcnI+IHsKKyAgICAgICAgRnJyV29yZDo6
bmV3KHMudG9fc3RyaW5nKCkpCisgICAgfQorfQorCitpbXBsIERpc3BsYXkgZm9yIEZycldvcmQg
eworICAgIGZuIGZtdCgmc2VsZiwgZjogJm11dCBzdGQ6OmZtdDo6Rm9ybWF0dGVyPCdfPikgLT4g
c3RkOjpmbXQ6OlJlc3VsdCB7CisgICAgICAgIHNlbGYuMC5mbXQoZikKKyAgICB9Cit9CisKK2lt
cGwgQXNSZWY8c3RyPiBmb3IgRnJyV29yZCB7CisgICAgZm4gYXNfcmVmKCZzZWxmKSAtPiAmc3Ry
IHsKKyAgICAgICAgJnNlbGYuMAorICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvcHJveG1veC1mcnIv
c3JjL2xpYi5ycyBiL3Byb3htb3gtZnJyL3NyYy9saWIucnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwLi5jZWVmODI5OTk2MTkKLS0tIC9kZXYvbnVsbAorKysgYi9wcm94
bW94LWZyci9zcmMvbGliLnJzCkBAIC0wLDAgKzEsMjIzIEBACitwdWIgbW9kIGNvbW1vbjsKK3B1
YiBtb2Qgb3BlbmZhYnJpYzsKK3B1YiBtb2Qgb3NwZjsKKwordXNlIHN0ZDo6e2NvbGxlY3Rpb25z
Ojp7aGFzaF9tYXA6OkVudHJ5LCBIYXNoTWFwfSwgZm10OjpEaXNwbGF5LCBzdHI6OkZyb21TdHJ9
OworCit1c2UgY29tbW9uOjp7RnJyV29yZCwgRnJyV29yZEVycm9yfTsKK3VzZSBwcm94bW94X3Zl
X2NvbmZpZzo6c2RuOjpmYWJyaWM6OmNvbW1vbjo6SG9zdG5hbWU7CisjW2NmZyhmZWF0dXJlID0g
ImNvbmZpZy1leHQiKV0KK3VzZSBwcm94bW94X3ZlX2NvbmZpZzo6c2RuOjpmYWJyaWM6OkZhYnJp
Y0NvbmZpZzsKKwordXNlIHNlcmRlOjp7RGVzZXJpYWxpemUsIFNlcmlhbGl6ZX07Cit1c2Ugc2Vy
ZGVfd2l0aDo6e0Rlc2VyaWFsaXplRnJvbVN0ciwgU2VyaWFsaXplRGlzcGxheX07Cit1c2UgdGhp
c2Vycm9yOjpFcnJvcjsKKworI1tkZXJpdmUoRXJyb3IsIERlYnVnKV0KK3B1YiBlbnVtIFJvdXRl
ck5hbWVFcnJvciB7CisgICAgI1tlcnJvcigiaW52YWxpZCBuYW1lIildCisgICAgSW52YWxpZE5h
bWUsCisgICAgI1tlcnJvcigiaW52YWxpZCBmcnIgd29yZCIpXQorICAgIEZycldvcmRFcnJvcigj
W2Zyb21dIEZycldvcmRFcnJvciksCit9CisKKyNbZGVyaXZlKENsb25lLCBEZWJ1ZywgUGFydGlh
bEVxLCBFcSwgSGFzaCwgRGVzZXJpYWxpemUsIFNlcmlhbGl6ZSldCitwdWIgZW51bSBSb3V0ZXIg
eworICAgIE9wZW5GYWJyaWMob3BlbmZhYnJpYzo6T3BlbkZhYnJpY1JvdXRlciksCisgICAgT3Nw
Zihvc3BmOjpPc3BmUm91dGVyKSwKK30KKworaW1wbCBGcm9tPG9wZW5mYWJyaWM6Ok9wZW5GYWJy
aWNSb3V0ZXI+IGZvciBSb3V0ZXIgeworICAgIGZuIGZyb20odmFsdWU6IG9wZW5mYWJyaWM6Ok9w
ZW5GYWJyaWNSb3V0ZXIpIC0+IFNlbGYgeworICAgICAgICBSb3V0ZXI6Ok9wZW5GYWJyaWModmFs
dWUpCisgICAgfQorfQorCisjW2Rlcml2ZShDbG9uZSwgRGVidWcsIFBhcnRpYWxFcSwgRXEsIEhh
c2gsIERlc2VyaWFsaXplRnJvbVN0ciwgU2VyaWFsaXplRGlzcGxheSldCitwdWIgZW51bSBSb3V0
ZXJOYW1lIHsKKyAgICBPcGVuRmFicmljKG9wZW5mYWJyaWM6Ok9wZW5GYWJyaWNSb3V0ZXJOYW1l
KSwKKyAgICBPc3BmKG9zcGY6Ok9zcGZSb3V0ZXJOYW1lKSwKK30KKworaW1wbCBGcm9tPG9wZW5m
YWJyaWM6Ok9wZW5GYWJyaWNSb3V0ZXJOYW1lPiBmb3IgUm91dGVyTmFtZSB7CisgICAgZm4gZnJv
bSh2YWx1ZTogb3BlbmZhYnJpYzo6T3BlbkZhYnJpY1JvdXRlck5hbWUpIC0+IFNlbGYgeworICAg
ICAgICBTZWxmOjpPcGVuRmFicmljKHZhbHVlKQorICAgIH0KK30KKworaW1wbCBEaXNwbGF5IGZv
ciBSb3V0ZXJOYW1lIHsKKyAgICBmbiBmbXQoJnNlbGYsIGY6ICZtdXQgc3RkOjpmbXQ6OkZvcm1h
dHRlcjwnXz4pIC0+IHN0ZDo6Zm10OjpSZXN1bHQgeworICAgICAgICBtYXRjaCBzZWxmIHsKKyAg
ICAgICAgICAgIFNlbGY6Ok9wZW5GYWJyaWMocikgPT4gci5mbXQoZiksCisgICAgICAgICAgICBT
ZWxmOjpPc3BmKHIpID0+IHIuZm10KGYpLAorICAgICAgICB9CisgICAgfQorfQorCitpbXBsIEZy
b21TdHIgZm9yIFJvdXRlck5hbWUgeworICAgIHR5cGUgRXJyID0gUm91dGVyTmFtZUVycm9yOwor
CisgICAgZm4gZnJvbV9zdHIoczogJnN0cikgLT4gUmVzdWx0PFNlbGYsIFNlbGY6OkVycj4gewor
ICAgICAgICBpZiBsZXQgT2socm91dGVyKSA9IHMucGFyc2UoKSB7CisgICAgICAgICAgICByZXR1
cm4gT2soU2VsZjo6T3BlbkZhYnJpYyhyb3V0ZXIpKTsKKyAgICAgICAgfQorCisgICAgICAgIEVy
cihSb3V0ZXJOYW1lRXJyb3I6OkludmFsaWROYW1lKQorICAgIH0KK30KKworLy8vIFRoZSBpbnRl
cmZhY2UgbmFtZSBpcyB0aGUgc2FtZSBvbiBvc3BmIGFuZCBvcGVuZmFicmljLCBidXQgaXQgaXMg
YW4gZW51bSBzbyB3ZSBjYW4gaGF2ZSB0d28KKy8vLyBkaWZmZXJlbnQgZW50cmllcyBpbiB0aGUg
aGFzaG1hcC4gVGhpcyBhbGxvd3MgdXMgdG8gaGF2ZSBhbiBpbnRlcmZhY2UgaW4gYW4gb3NwZiBh
bmQgb3BlbmZhYnJpYworLy8vIGZhYnJpYy4KKyNbZGVyaXZlKENsb25lLCBEZWJ1ZywgUGFydGlh
bEVxLCBFcSwgRGVzZXJpYWxpemUsIFNlcmlhbGl6ZSwgSGFzaCldCitwdWIgZW51bSBJbnRlcmZh
Y2VOYW1lIHsKKyAgICBPcGVuRmFicmljKEZycldvcmQpLAorICAgIE9zcGYoRnJyV29yZCksCit9
CisKK2ltcGwgRGlzcGxheSBmb3IgSW50ZXJmYWNlTmFtZSB7CisgICAgZm4gZm10KCZzZWxmLCBm
OiAmbXV0IHN0ZDo6Zm10OjpGb3JtYXR0ZXI8J18+KSAtPiBzdGQ6OmZtdDo6UmVzdWx0IHsKKyAg
ICAgICAgbWF0Y2ggc2VsZiB7CisgICAgICAgICAgICBJbnRlcmZhY2VOYW1lOjpPcGVuRmFicmlj
KGZycl93b3JkKSA9PiBmcnJfd29yZC5mbXQoZiksCisgICAgICAgICAgICBJbnRlcmZhY2VOYW1l
OjpPc3BmKGZycl93b3JkKSA9PiBmcnJfd29yZC5mbXQoZiksCisgICAgICAgIH0KKyAgICAgICAg
CisgICAgfQorfQorCisjW2Rlcml2ZShDbG9uZSwgRGVidWcsIFBhcnRpYWxFcSwgRXEsIERlc2Vy
aWFsaXplLCBTZXJpYWxpemUpXQorcHViIGVudW0gSW50ZXJmYWNlIHsKKyAgICBPcGVuRmFicmlj
KG9wZW5mYWJyaWM6Ok9wZW5GYWJyaWNJbnRlcmZhY2UpLAorICAgIE9zcGYob3NwZjo6T3NwZklu
dGVyZmFjZSksCit9CisKK2ltcGwgRnJvbTxvcGVuZmFicmljOjpPcGVuRmFicmljSW50ZXJmYWNl
PiBmb3IgSW50ZXJmYWNlIHsKKyAgICBmbiBmcm9tKHZhbHVlOiBvcGVuZmFicmljOjpPcGVuRmFi
cmljSW50ZXJmYWNlKSAtPiBTZWxmIHsKKyAgICAgICAgU2VsZjo6T3BlbkZhYnJpYyh2YWx1ZSkK
KyAgICB9Cit9CisKK2ltcGwgRnJvbTxvc3BmOjpPc3BmSW50ZXJmYWNlPiBmb3IgSW50ZXJmYWNl
IHsKKyAgICBmbiBmcm9tKHZhbHVlOiBvc3BmOjpPc3BmSW50ZXJmYWNlKSAtPiBTZWxmIHsKKyAg
ICAgICAgU2VsZjo6T3NwZih2YWx1ZSkKKyAgICB9Cit9CisKKyNbZGVyaXZlKENsb25lLCBEZWJ1
ZywgUGFydGlhbEVxLCBFcSwgRGVmYXVsdCwgRGVzZXJpYWxpemUsIFNlcmlhbGl6ZSldCitwdWIg
c3RydWN0IEZyckNvbmZpZyB7CisgICAgcm91dGVyOiBIYXNoTWFwPFJvdXRlck5hbWUsIFJvdXRl
cj4sCisgICAgaW50ZXJmYWNlczogSGFzaE1hcDxJbnRlcmZhY2VOYW1lLCBJbnRlcmZhY2U+LAor
fQorCitpbXBsIEZyckNvbmZpZyB7CisgICAgcHViIGZuIG5ldygpIC0+IFNlbGYgeworICAgICAg
ICBTZWxmOjpkZWZhdWx0KCkKKyAgICB9CisKKyAgICAjW2NmZyhmZWF0dXJlID0gImNvbmZpZy1l
eHQiKV0KKyAgICBwdWIgZm4gYnVpbGRlcigpIC0+IEZyckNvbmZpZ0J1aWxkZXIgeworICAgICAg
ICBGcnJDb25maWdCdWlsZGVyOjpkZWZhdWx0KCkKKyAgICB9CisKKyAgICBwdWIgZm4gcm91dGVy
KCZzZWxmKSAtPiBpbXBsIEl0ZXJhdG9yPEl0ZW0gPSAoJlJvdXRlck5hbWUsICZSb3V0ZXIpPiAr
ICdfIHsKKyAgICAgICAgc2VsZi5yb3V0ZXIuaXRlcigpCisgICAgfQorCisgICAgcHViIGZuIGlu
dGVyZmFjZXMoJnNlbGYpIC0+IGltcGwgSXRlcmF0b3I8SXRlbSA9ICgmSW50ZXJmYWNlTmFtZSwg
JkludGVyZmFjZSk+ICsgJ18geworICAgICAgICBzZWxmLmludGVyZmFjZXMuaXRlcigpCisgICAg
fQorfQorCisjW2Rlcml2ZShEZWZhdWx0KV0KKyNbY2ZnKGZlYXR1cmUgPSAiY29uZmlnLWV4dCIp
XQorcHViIHN0cnVjdCBGcnJDb25maWdCdWlsZGVyIHsKKyAgICBmYWJyaWNzOiBGYWJyaWNDb25m
aWcsCisgICAgLy9iZ3A6IE9wdGlvbjxpbnRlcm5hbDo6QmdwQ29uZmlnPgorfQorCisjW2NmZyhm
ZWF0dXJlID0gImNvbmZpZy1leHQiKV0KK2ltcGwgRnJyQ29uZmlnQnVpbGRlciB7CisgICAgcHVi
IGZuIGFkZF9mYWJyaWNzKG11dCBzZWxmLCBmYWJyaWM6IEZhYnJpY0NvbmZpZykgLT4gRnJyQ29u
ZmlnQnVpbGRlciB7CisgICAgICAgIHNlbGYuZmFicmljcyA9IGZhYnJpYzsKKyAgICAgICAgc2Vs
ZgorICAgIH0KKworICAgIHB1YiBmbiBidWlsZChzZWxmLCBjdXJyZW50X25vZGU6ICZzdHIpIC0+
IFJlc3VsdDxGcnJDb25maWcsIGFueWhvdzo6RXJyb3I+IHsKKyAgICAgICAgbGV0IG11dCByb3V0
ZXI6IEhhc2hNYXA8Um91dGVyTmFtZSwgUm91dGVyPiA9IEhhc2hNYXA6Om5ldygpOworICAgICAg
ICBsZXQgbXV0IGludGVyZmFjZXM6IEhhc2hNYXA8SW50ZXJmYWNlTmFtZSwgSW50ZXJmYWNlPiA9
IEhhc2hNYXA6Om5ldygpOworCisgICAgICAgIGlmIGxldCBTb21lKG9wZW5mYWJyaWMpID0gc2Vs
Zi5mYWJyaWNzLm9wZW5mYWJyaWMoKSB7CisgICAgICAgICAgICAvLyBvcGVuZmFicmljCisgICAg
ICAgICAgICBvcGVuZmFicmljCisgICAgICAgICAgICAgICAgLmZhYnJpY3MoKQorICAgICAgICAg
ICAgICAgIC5pdGVyKCkKKyAgICAgICAgICAgICAgICAudHJ5X2Zvcl9lYWNoKHwoZmFicmljX2lk
LCBmYWJyaWNfY29uZmlnKXwgeworICAgICAgICAgICAgICAgICAgICBsZXQgbm9kZV9jb25maWcg
PSBmYWJyaWNfY29uZmlnLm5vZGVzKCkuZ2V0KCZIb3N0bmFtZTo6bmV3KGN1cnJlbnRfbm9kZSkp
OworICAgICAgICAgICAgICAgICAgICBpZiBsZXQgU29tZShub2RlX2NvbmZpZykgPSBub2RlX2Nv
bmZpZyB7CisgICAgICAgICAgICAgICAgICAgICAgICBsZXQgb2ZyID0gb3BlbmZhYnJpYzo6T3Bl
bkZhYnJpY1JvdXRlcjo6ZnJvbSgoZmFicmljX2NvbmZpZywgbm9kZV9jb25maWcpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGxldCByb3V0ZXJfaXRlbSA9IFJvdXRlcjo6T3BlbkZhYnJpYyhv
ZnIpOworICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJvdXRlcl9uYW1lID0gUm91dGVyTmFt
ZTo6T3BlbkZhYnJpYygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuZmFicmljOjpP
cGVuRmFicmljUm91dGVyTmFtZTo6dHJ5X2Zyb20oZmFicmljX2lkKT8sCisgICAgICAgICAgICAg
ICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVyLmluc2VydChyb3V0
ZXJfbmFtZS5jbG9uZSgpLCByb3V0ZXJfaXRlbSk7CisgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlX2NvbmZpZy5pbnRlcmZhY2VzKCkudHJ5X2Zvcl9lYWNoKHxpbnRlcmZhY2V8IHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsZXQgbXV0IG9wZW5mYWJyaWNfaW50ZXJmYWNlOiBvcGVu
ZmFicmljOjpPcGVuRmFicmljSW50ZXJmYWNlID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGZhYnJpY19pZCwgaW50ZXJmYWNlKS50cnlfaW50bygpPzsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBJZiBubyBzcGVjaWZpYyBoZWxsb19pbnRlcnZhbCBpcyBzZXQsIGdl
dCBkZWZhdWx0IG9uZSBmcm9tIGZhYnJpYworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGNvbmZpZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9wZW5mYWJyaWNfaW50ZXJm
YWNlLmhlbGxvX2ludGVydmFsKCkuaXNfbm9uZSgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3BlbmZhYnJpY19pbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC5zZXRfaGVsbG9faW50ZXJ2YWwoZmFicmljX2NvbmZpZy5oZWxsb19pbnRlcnZh
bCgpLmNsb25lKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsZXQgaW50ZXJmYWNlX25hbWUgPSBJbnRlcmZhY2VOYW1lOjpPcGVu
RmFicmljKEZycldvcmQ6OmZyb21fc3RyKGludGVyZmFjZS5uYW1lKCkpPyk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gT3BlbmZhYnJpYyBkb2Vzbid0IGFsbG93IGFuIGludGVyZmFj
ZSB0byBiZSBpbiBtdWx0aXBsZSBvcGVuZmFicmljCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gZmFicmljcy4gRnJyIHdpbGwganVzdCBpZ25vcmUgaXQgYW5kIHRha2UgdGhlIGZpcnN0
IG9uZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsZXQgRW50cnk6OlZhY2FudChl
KSA9IGludGVyZmFjZXMuZW50cnkoaW50ZXJmYWNlX25hbWUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZS5pbnNlcnQob3BlbmZhYnJpY19pbnRlcmZhY2UuaW50bygpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0cmFjaW5nOjp3YXJuISgiQW4gaW50ZXJmYWNlIGNhbm5vdCBiZSBpbiBtdWx0
aXBsZSBvcGVuZmFicmljIGZhYnJpY3MiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2s6OjwoKSwgYW55aG93OjpFcnJvcj4oKCkp
CisgICAgICAgICAgICAgICAgICAgICAgICB9KT87CisgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cmFjaW5nOjp3YXJuISgibm8gbm9kZSBjb25m
aWd1cmF0aW9uIGZvciBmYWJyaWMgXCJ7ZmFicmljX2lkfVwiIOKAkyB0aGlzIGZhYnJpYyBpcyBu
b3QgY29uZmlndXJlZCBmb3IgdGhpcyBub2RlLiIpOworICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIE9rOjo8KCksIGFueWhvdzo6RXJyb3I+KCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBPaygoKSkKKyAgICAgICAgICAgICAgICB9KT87CisgICAg
ICAgIH0KKyAgICAgICAgaWYgbGV0IFNvbWUob3NwZikgPSBzZWxmLmZhYnJpY3Mub3NwZigpIHsK
KyAgICAgICAgICAgIC8vIG9zcGYKKyAgICAgICAgICAgIG9zcGYuZmFicmljcygpCisgICAgICAg
ICAgICAgICAgLml0ZXIoKQorICAgICAgICAgICAgICAgIC50cnlfZm9yX2VhY2gofChmYWJyaWNf
aWQsIGZhYnJpY19jb25maWcpfCB7CisgICAgICAgICAgICAgICAgICAgIGxldCBub2RlX2NvbmZp
ZyA9IGZhYnJpY19jb25maWcubm9kZXMoKS5nZXQoJkhvc3RuYW1lOjpuZXcoY3VycmVudF9ub2Rl
KSk7CisgICAgICAgICAgICAgICAgICAgIGlmIGxldCBTb21lKG5vZGVfY29uZmlnKSA9IG5vZGVf
Y29uZmlnIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvc3BmX3JvdXRlciA9IG9zcGY6
Ok9zcGZSb3V0ZXI6OmZyb20oKGZhYnJpY19jb25maWcsIG5vZGVfY29uZmlnKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBsZXQgcm91dGVyX2l0ZW0gPSBSb3V0ZXI6Ok9zcGYob3NwZl9yb3V0
ZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJvdXRlcl9uYW1lID0gUm91dGVyTmFt
ZTo6T3NwZihvc3BmOjpPc3BmUm91dGVyTmFtZTo6ZnJvbShvc3BmOjpBcmVhOjp0cnlfZnJvbShm
YWJyaWNfaWQpPykpOworICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVyLmluc2VydChyb3V0
ZXJfbmFtZS5jbG9uZSgpLCByb3V0ZXJfaXRlbSk7CisgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlX2NvbmZpZy5pbnRlcmZhY2VzKCkudHJ5X2Zvcl9lYWNoKHxpbnRlcmZhY2V8IHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsZXQgb3NwZl9pbnRlcmZhY2U6IG9zcGY6Ok9zcGZJbnRl
cmZhY2UgPSAoZmFicmljX2lkLCBpbnRlcmZhY2UpLnRyeV9pbnRvKCk/OworCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGV0IGludGVyZmFjZV9uYW1lID0gSW50ZXJmYWNlTmFtZTo6T3Nw
ZihGcnJXb3JkOjpmcm9tX3N0cihpbnRlcmZhY2UubmFtZSgpKT8pOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIE9zcGYgb25seSBhbGxvd3Mgb25lIGFyZWEgcGVyIGludGVyZmFjZSwg
c28gb25lIGludGVyZmFjZSBjYW5ub3QgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBpbiB0d28gYXJlYXMgKGZhYnJpY3MpLiBUaG91Z2ggZXZlbiBpZiB0aGlzIGhhcHBlbnMsIGl0
IGlzIG5vdCBhIGJpZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByb2JsZW0gYXMg
ZnJyIGZpbHRlcnMgaXQgb3V0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxldCBF
bnRyeTo6VmFjYW50KGUpID0gaW50ZXJmYWNlcy5lbnRyeShpbnRlcmZhY2VfbmFtZSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmluc2VydChvc3BmX2ludGVyZmFjZS5pbnRv
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRyYWNpbmc6Ondhcm4hKCJBbiBpbnRlcmZhY2UgY2Fubm90IGJl
IGluIG11bHRpcGxlIG9zcGYgYXJlYXMiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2s6OjwoKSwgYW55aG93OjpFcnJvcj4oKCkp
CisgICAgICAgICAgICAgICAgICAgICAgICB9KT87CisgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cmFjaW5nOjp3YXJuISgibm8gbm9kZSBjb25m
aWd1cmF0aW9uIGZvciBmYWJyaWMgXCJ7ZmFicmljX2lkfVwiIOKAkyB0aGlzIGZhYnJpYyBpcyBu
b3QgY29uZmlndXJlZCBmb3IgdGhpcyBub2RlLiIpOworICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIE9rOjo8KCksIGFueWhvdzo6RXJyb3I+KCgpKTsgCisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgT2soKCkpCisgICAgICAgICAgICAgICAgfSk/OworICAg
ICAgICB9CisgICAgICAgIE9rKEZyckNvbmZpZyB7IHJvdXRlciwgaW50ZXJmYWNlcyB9KQorICAg
IH0KK30KZGlmZiAtLWdpdCBhL3Byb3htb3gtZnJyL3NyYy9vcGVuZmFicmljLnJzIGIvcHJveG1v
eC1mcnIvc3JjL29wZW5mYWJyaWMucnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwLi4xMmNmYzYxMjM2Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9wcm94bW94LWZyci9zcmMv
b3BlbmZhYnJpYy5ycwpAQCAtMCwwICsxLDEzNyBAQAordXNlIHN0ZDo6Zm10OjpEZWJ1ZzsKK3Vz
ZSBzdGQ6OntmbXQ6OkRpc3BsYXksIHN0cjo6RnJvbVN0cn07CisKK3VzZSBwcm94bW94X25ldHdv
cmtfdHlwZXM6Om5ldDo6TmV0OwordXNlIHNlcmRlOjp7RGVzZXJpYWxpemUsIFNlcmlhbGl6ZX07
Cit1c2Ugc2VyZGVfd2l0aDo6e0Rlc2VyaWFsaXplRnJvbVN0ciwgU2VyaWFsaXplRGlzcGxheX07
CisKKyNbY2ZnKGZlYXR1cmUgPSAiY29uZmlnLWV4dCIpXQordXNlIHByb3htb3hfdmVfY29uZmln
OjpzZG46OmZhYnJpYzo6b3BlbmZhYnJpYzo6e3NlbGYsIGludGVybmFsfTsKK3VzZSB0aGlzZXJy
b3I6OkVycm9yOworCit1c2UgY3JhdGU6OmNvbW1vbjo6RnJyV29yZDsKK3VzZSBjcmF0ZTo6Um91
dGVyTmFtZUVycm9yOworCisjW2Rlcml2ZShDbG9uZSwgRGVidWcsIFBhcnRpYWxFcSwgRXEsIEhh
c2gsIERlc2VyaWFsaXplRnJvbVN0ciwgU2VyaWFsaXplRGlzcGxheSldCitwdWIgc3RydWN0IE9w
ZW5GYWJyaWNSb3V0ZXJOYW1lKEZycldvcmQpOworCitpbXBsIEZyb208RnJyV29yZD4gZm9yIE9w
ZW5GYWJyaWNSb3V0ZXJOYW1lIHsKKyAgICBmbiBmcm9tKHZhbHVlOiBGcnJXb3JkKSAtPiBTZWxm
IHsKKyAgICAgICAgU2VsZih2YWx1ZSkKKyAgICB9Cit9CisKK2ltcGwgT3BlbkZhYnJpY1JvdXRl
ck5hbWUgeworICAgIHB1YiBmbiBuZXcobmFtZTogRnJyV29yZCkgLT4gU2VsZiB7CisgICAgICAg
IFNlbGYobmFtZSkKKyAgICB9Cit9CisKK2ltcGwgRnJvbVN0ciBmb3IgT3BlbkZhYnJpY1JvdXRl
ck5hbWUgeworICAgIHR5cGUgRXJyID0gUm91dGVyTmFtZUVycm9yOworCisgICAgZm4gZnJvbV9z
dHIoczogJnN0cikgLT4gUmVzdWx0PFNlbGYsIFNlbGY6OkVycj4geworICAgICAgICBpZiBsZXQg
U29tZShuYW1lKSA9IHMuc3RyaXBfcHJlZml4KCJvcGVuZmFicmljICIpIHsKKyAgICAgICAgICAg
IHJldHVybiBPayhTZWxmOjpuZXcoCisgICAgICAgICAgICAgICAgRnJyV29yZDo6ZnJvbV9zdHIo
bmFtZSkubWFwX2Vycih8X3wgUm91dGVyTmFtZUVycm9yOjpJbnZhbGlkTmFtZSk/LAorICAgICAg
ICAgICAgKSk7CisgICAgICAgIH0KKworICAgICAgICBFcnIoUm91dGVyTmFtZUVycm9yOjpJbnZh
bGlkTmFtZSkKKyAgICB9Cit9CisKK2ltcGwgRGlzcGxheSBmb3IgT3BlbkZhYnJpY1JvdXRlck5h
bWUgeworICAgIGZuIGZtdCgmc2VsZiwgZjogJm11dCBzdGQ6OmZtdDo6Rm9ybWF0dGVyPCdfPikg
LT4gc3RkOjpmbXQ6OlJlc3VsdCB7CisgICAgICAgIHdyaXRlIShmLCAib3BlbmZhYnJpYyB7fSIs
IHNlbGYuMCkKKyAgICB9Cit9CisKKyNbZGVyaXZlKENsb25lLCBEZWJ1ZywgUGFydGlhbEVxLCBF
cSwgSGFzaCwgRGVzZXJpYWxpemUsIFNlcmlhbGl6ZSldCitwdWIgc3RydWN0IE9wZW5GYWJyaWNS
b3V0ZXIgeworICAgIG5ldDogTmV0LAorfQorCitpbXBsIE9wZW5GYWJyaWNSb3V0ZXIgeworICAg
IHB1YiBmbiBuZXcobmV0OiBOZXQpIC0+IFNlbGYgeworICAgICAgICBTZWxmIHsKKyAgICAgICAg
ICAgIG5ldCwKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YiBmbiBuZXQoJnNlbGYpIC0+ICZO
ZXQgeworICAgICAgICAmc2VsZi5uZXQKKyAgICB9Cit9CisKKyNbZGVyaXZlKENsb25lLCBEZWJ1
ZywgUGFydGlhbEVxLCBFcSwgSGFzaCwgRGVzZXJpYWxpemUsIFNlcmlhbGl6ZSldCitwdWIgc3Ry
dWN0IE9wZW5GYWJyaWNJbnRlcmZhY2UgeworICAgIC8vIE5vdGU6IGFuIGludGVyZmFjZSBjYW4g
b25seSBiZSBhIHBhcnQgb2YgYSBzaW5nbGUgZmFicmljIChzbyBubyB2ZWMgbmVlZGVkIGhlcmUp
CisgICAgZmFicmljX2lkOiBPcGVuRmFicmljUm91dGVyTmFtZSwKKyAgICBwYXNzaXZlOiBPcHRp
b248Ym9vbD4sCisgICAgaGVsbG9faW50ZXJ2YWw6IE9wdGlvbjxvcGVuZmFicmljOjpIZWxsb0lu
dGVydmFsPiwKKyAgICBjc25wX2ludGVydmFsOiBPcHRpb248b3BlbmZhYnJpYzo6Q3NucEludGVy
dmFsPiwKKyAgICBoZWxsb19tdWx0aXBsaWVyOiBPcHRpb248b3BlbmZhYnJpYzo6SGVsbG9NdWx0
aXBsaWVyPiwKK30KKworaW1wbCBPcGVuRmFicmljSW50ZXJmYWNlIHsKKyAgICBwdWIgZm4gZmFi
cmljX2lkKCZzZWxmKSAtPiAmT3BlbkZhYnJpY1JvdXRlck5hbWUgeworICAgICAgICAmc2VsZi5m
YWJyaWNfaWQKKyAgICB9CisgICAgcHViIGZuIHBhc3NpdmUoJnNlbGYpIC0+ICZPcHRpb248Ym9v
bD4geworICAgICAgICAmc2VsZi5wYXNzaXZlCisgICAgfQorICAgIHB1YiBmbiBoZWxsb19pbnRl
cnZhbCgmc2VsZikgLT4gJk9wdGlvbjxvcGVuZmFicmljOjpIZWxsb0ludGVydmFsPiB7CisgICAg
ICAgICZzZWxmLmhlbGxvX2ludGVydmFsCisgICAgfQorICAgIHB1YiBmbiBjc25wX2ludGVydmFs
KCZzZWxmKSAtPiAmT3B0aW9uPG9wZW5mYWJyaWM6OkNzbnBJbnRlcnZhbD4geworICAgICAgICAm
c2VsZi5jc25wX2ludGVydmFsCisgICAgfQorICAgIHB1YiBmbiBoZWxsb19tdWx0aXBsaWVyKCZz
ZWxmKSAtPiAmT3B0aW9uPG9wZW5mYWJyaWM6OkhlbGxvTXVsdGlwbGllcj4geworICAgICAgICAm
c2VsZi5oZWxsb19tdWx0aXBsaWVyCisgICAgfQorICAgIHB1YiBmbiBzZXRfaGVsbG9faW50ZXJ2
YWwoJm11dCBzZWxmLCBpbnRlcnZhbDogT3B0aW9uPG9wZW5mYWJyaWM6OkhlbGxvSW50ZXJ2YWw+
KSB7CisgICAgICAgIHNlbGYuaGVsbG9faW50ZXJ2YWwgPSBpbnRlcnZhbDsKKyAgICB9Cit9CisK
KyNbZGVyaXZlKEVycm9yLCBEZWJ1ZyldCitwdWIgZW51bSBPcGVuRmFicmljSW50ZXJmYWNlRXJy
b3IgeworICAgICNbZXJyb3IoIlVua25vd24gZXJyb3IgY29udmVydGluZyB0byBPcGVuRmFicmlj
SW50ZXJmYWNlIildCisgICAgVW5rbm93bkVycm9yLAorICAgICNbZXJyb3IoIkVycm9yIGNvbnZl
cnRpbmcgcm91dGVyIG5hbWUiKV0KKyAgICBSb3V0ZXJOYW1lRXJyb3IoI1tmcm9tXSBSb3V0ZXJO
YW1lRXJyb3IpLAorfQorCisjW2NmZyhmZWF0dXJlID0gImNvbmZpZy1leHQiKV0KK2ltcGwgVHJ5
RnJvbTwoJmludGVybmFsOjpGYWJyaWNJZCwgJmludGVybmFsOjpJbnRlcmZhY2UpPiBmb3IgT3Bl
bkZhYnJpY0ludGVyZmFjZSB7CisgICAgdHlwZSBFcnJvciA9IE9wZW5GYWJyaWNJbnRlcmZhY2VF
cnJvcjsKKworICAgIGZuIHRyeV9mcm9tKHZhbHVlOiAoJmludGVybmFsOjpGYWJyaWNJZCwgJmlu
dGVybmFsOjpJbnRlcmZhY2UpKSAtPiBSZXN1bHQ8U2VsZiwgU2VsZjo6RXJyb3I+IHsKKyAgICAg
ICAgT2soU2VsZiB7CisgICAgICAgICAgICBmYWJyaWNfaWQ6IE9wZW5GYWJyaWNSb3V0ZXJOYW1l
Ojp0cnlfZnJvbSh2YWx1ZS4wKT8sCisgICAgICAgICAgICBwYXNzaXZlOiB2YWx1ZS4xLnBhc3Np
dmUoKSwKKyAgICAgICAgICAgIGhlbGxvX2ludGVydmFsOiB2YWx1ZS4xLmhlbGxvX2ludGVydmFs
KCkuY2xvbmUoKSwKKyAgICAgICAgICAgIGNzbnBfaW50ZXJ2YWw6IHZhbHVlLjEuY3NucF9pbnRl
cnZhbCgpLmNsb25lKCksCisgICAgICAgICAgICBoZWxsb19tdWx0aXBsaWVyOiB2YWx1ZS4xLmhl
bGxvX211bHRpcGxpZXIoKS5jbG9uZSgpLAorICAgICAgICB9KQorICAgIH0KK30KKworI1tjZmco
ZmVhdHVyZSA9ICJjb25maWctZXh0IildCitpbXBsIFRyeUZyb208JmludGVybmFsOjpGYWJyaWNJ
ZD4gZm9yIE9wZW5GYWJyaWNSb3V0ZXJOYW1lIHsKKyAgICB0eXBlIEVycm9yID0gUm91dGVyTmFt
ZUVycm9yOworCisgICAgZm4gdHJ5X2Zyb20odmFsdWU6ICZpbnRlcm5hbDo6RmFicmljSWQpIC0+
IFJlc3VsdDxTZWxmLCBTZWxmOjpFcnJvcj4geworICAgICAgICBPayhPcGVuRmFicmljUm91dGVy
TmFtZTo6bmV3KEZycldvcmQ6Om5ldyh2YWx1ZS50b19zdHJpbmcoKSk/KSkKKyAgICB9Cit9CisK
KyNbY2ZnKGZlYXR1cmUgPSAiY29uZmlnLWV4dCIpXQoraW1wbCBGcm9tPCgmaW50ZXJuYWw6OkZh
YnJpY0NvbmZpZywgJmludGVybmFsOjpOb2RlQ29uZmlnKT4gZm9yIE9wZW5GYWJyaWNSb3V0ZXIg
eworICAgIGZuIGZyb20odmFsdWU6ICgmaW50ZXJuYWw6OkZhYnJpY0NvbmZpZywgJmludGVybmFs
OjpOb2RlQ29uZmlnKSkgLT4gU2VsZiB7CisgICAgICAgIFNlbGYgeworICAgICAgICAgICAgbmV0
OiB2YWx1ZS4xLm5ldCgpLnRvX293bmVkKCksCisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1n
aXQgYS9wcm94bW94LWZyci9zcmMvb3NwZi5ycyBiL3Byb3htb3gtZnJyL3NyYy9vc3BmLnJzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYTE0ZWYyYzU1YzI3Ci0tLSAv
ZGV2L251bGwKKysrIGIvcHJveG1veC1mcnIvc3JjL29zcGYucnMKQEAgLTAsMCArMSwxNDggQEAK
K3VzZSBzdGQ6OmZtdDo6RGVidWc7Cit1c2Ugc3RkOjpuZXQ6OklwdjRBZGRyOwordXNlIHN0ZDo6
e2ZtdDo6RGlzcGxheSwgc3RyOjpGcm9tU3RyfTsKKwordXNlIHNlcmRlOjp7RGVzZXJpYWxpemUs
IFNlcmlhbGl6ZX07CisKKyNbY2ZnKGZlYXR1cmUgPSAiY29uZmlnLWV4dCIpXQordXNlIHByb3ht
b3hfdmVfY29uZmlnOjpzZG46OmZhYnJpYzo6b3NwZjo6aW50ZXJuYWw7Cit1c2UgdGhpc2Vycm9y
OjpFcnJvcjsKKwordXNlIGNyYXRlOjpjb21tb246OntGcnJXb3JkLCBGcnJXb3JkRXJyb3J9Owor
CisvLy8gVGhlIG5hbWUgb2YgdGhlIG9zcGYgZnJyIHJvdXRlci4gVGhlcmUgaXMgb25seSBvbmUg
b3NwZiBmYWJyaWMgcG9zc2libGUgaW4gZnJyIChpZ25vcmluZworLy8vIG11bHRpcGxlIGludm9j
YXRpb25zIG9mIHRoZSBvc3BmZCBkYWVtb24pIGFuZCB0aGUgc2VwYXJhdGlvbiBpcyBkb25lIHdp
dGggYXJlYXMuIFN0aWxsLAorLy8vIGRpZmZlcmVudCBhcmVhcyBoYXZlIHRoZSBzYW1lIGZyciBy
b3V0ZXIsIHNvIHRoZSBuYW1lIG9mIHRoZSByb3V0ZXIgaXMganVzdCAib3NwZiIgaW4gInJvdXRl
cgorLy8vIG9zcGYiLiBUaGlzIHR5cGUgc3RpbGwgY29udGFpbnMgdGhlIEFyZWEgc28gdGhhdCB3
ZSBjYW4gaW5zZXJ0IGl0IGluIHRoZSBIYXNobWFwLgorI1tkZXJpdmUoQ2xvbmUsIERlYnVnLCBQ
YXJ0aWFsRXEsIEVxLCBIYXNoLCBEZXNlcmlhbGl6ZSwgU2VyaWFsaXplKV0KK3B1YiBzdHJ1Y3Qg
T3NwZlJvdXRlck5hbWUoQXJlYSk7CisKK2ltcGwgRnJvbTxBcmVhPiBmb3IgT3NwZlJvdXRlck5h
bWUgeworICAgIGZuIGZyb20odmFsdWU6IEFyZWEpIC0+IFNlbGYgeworICAgICAgICBTZWxmKHZh
bHVlKQorICAgIH0KK30KKworaW1wbCBEaXNwbGF5IGZvciBPc3BmUm91dGVyTmFtZSB7CisgICAg
Zm4gZm10KCZzZWxmLCBmOiAmbXV0IHN0ZDo6Zm10OjpGb3JtYXR0ZXI8J18+KSAtPiBzdGQ6OmZt
dDo6UmVzdWx0IHsKKyAgICAgICAgd3JpdGUhKGYsICJvc3BmIikKKyAgICB9Cit9CisKKyNbZGVy
aXZlKEVycm9yLCBEZWJ1ZyldCitwdWIgZW51bSBBcmVhUGFyc2luZ0Vycm9yIHsKKyAgICAjW2Vy
cm9yKCJJbnZhbGlkIGFyZWEgaWRlbml0aWZpZXIuIEFyZWEgbXVzdCBiZSBhIG51bWJlciBvciBh
biBpcHY0IGFkZHJlc3MuIildCisgICAgSW52YWxpZEFyZWEsCisgICAgI1tlcnJvcigiSW52YWxp
ZCBhcmVhIGlkZW5pdGlmaWVyLiBNaXNzaW5nICdhcmVhJyBwcmVmaXguIildCisgICAgTWlzc2lu
Z1ByZWZpeCwKKyAgICAjW2Vycm9yKCJFcnJvciBwYXJzaW5nIHRvIEZycldvcmQiKV0KKyAgICBG
cnJXb3JkRXJyb3IoI1tmcm9tXSBGcnJXb3JkRXJyb3IpLAorfQorCisvLy8gVGhlIE9TUEYgQXJl
YS4gTW9zdCBjb21tb25seSwgdGhpcyBpcyBqdXN0IGEgbnVtYmVyLCBlLmcuIDUsIGJ1dCBzb21l
dGltZXMgYWxzbyBhCisvLy8gcHNldWRvLWlwYWRkcmVzcywgZS5nLiAwLjAuMC4wCisjW2Rlcml2
ZShDbG9uZSwgRGVidWcsIFBhcnRpYWxFcSwgRXEsIEhhc2gsIERlc2VyaWFsaXplLCBTZXJpYWxp
emUpXQorcHViIHN0cnVjdCBBcmVhKEZycldvcmQpOworCitpbXBsIFRyeUZyb208RnJyV29yZD4g
Zm9yIEFyZWEgeworICAgIHR5cGUgRXJyb3IgPSBBcmVhUGFyc2luZ0Vycm9yOworCisgICAgZm4g
dHJ5X2Zyb20odmFsdWU6IEZycldvcmQpIC0+IFJlc3VsdDxTZWxmLCBTZWxmOjpFcnJvcj4gewor
ICAgICAgICBBcmVhOjpuZXcodmFsdWUpCisgICAgfQorfQorCitpbXBsIEFyZWEgeworICAgIHB1
YiBmbiBuZXcobmFtZTogRnJyV29yZCkgLT4gUmVzdWx0PFNlbGYsIEFyZWFQYXJzaW5nRXJyb3I+
IHsKKyAgICAgICAgaWYgbmFtZS5hc19yZWYoKS5wYXJzZTo6PGkzMj4oKS5pc19vaygpIHx8IG5h
bWUuYXNfcmVmKCkucGFyc2U6OjxJcHY0QWRkcj4oKS5pc19vaygpIHsKKyAgICAgICAgICAgIE9r
KFNlbGYobmFtZSkpCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBFcnIoQXJlYVBhcnNp
bmdFcnJvcjo6SW52YWxpZEFyZWEpCisgICAgICAgIH0KKyAgICB9Cit9CisKK2ltcGwgRnJvbVN0
ciBmb3IgQXJlYSB7CisgICAgdHlwZSBFcnIgPSBBcmVhUGFyc2luZ0Vycm9yOworCisgICAgZm4g
ZnJvbV9zdHIoczogJnN0cikgLT4gUmVzdWx0PFNlbGYsIFNlbGY6OkVycj4geworICAgICAgICBp
ZiBsZXQgU29tZShuYW1lKSA9IHMuc3RyaXBfcHJlZml4KCJhcmVhICIpIHsKKyAgICAgICAgICAg
IHJldHVybiBTZWxmOjpuZXcoRnJyV29yZDo6ZnJvbV9zdHIobmFtZSkubWFwX2Vycih8X3wgQXJl
YVBhcnNpbmdFcnJvcjo6SW52YWxpZEFyZWEpPyk7CisgICAgICAgIH0KKworICAgICAgICBFcnIo
QXJlYVBhcnNpbmdFcnJvcjo6TWlzc2luZ1ByZWZpeCkKKyAgICB9Cit9CisKK2ltcGwgRGlzcGxh
eSBmb3IgQXJlYSB7CisgICAgZm4gZm10KCZzZWxmLCBmOiAmbXV0IHN0ZDo6Zm10OjpGb3JtYXR0
ZXI8J18+KSAtPiBzdGQ6OmZtdDo6UmVzdWx0IHsKKyAgICAgICAgd3JpdGUhKGYsICJhcmVhIHt9
Iiwgc2VsZi4wKQorICAgIH0KK30KKworI1tkZXJpdmUoQ2xvbmUsIERlYnVnLCBQYXJ0aWFsRXEs
IEVxLCBIYXNoLCBEZXNlcmlhbGl6ZSwgU2VyaWFsaXplKV0KK3B1YiBzdHJ1Y3QgT3NwZlJvdXRl
ciB7CisgICAgcm91dGVyX2lkOiBJcHY0QWRkciwKK30KKworaW1wbCBPc3BmUm91dGVyIHsKKyAg
ICBwdWIgZm4gbmV3KHJvdXRlcl9pZDogSXB2NEFkZHIpIC0+IFNlbGYgeworICAgICAgICBTZWxm
IHsgcm91dGVyX2lkIH0KKyAgICB9CisKKyAgICBwdWIgZm4gcm91dGVyX2lkKCZzZWxmKSAtPiAm
SXB2NEFkZHIgeworICAgICAgICAmc2VsZi5yb3V0ZXJfaWQKKyAgICB9Cit9CisKKyNbZGVyaXZl
KEVycm9yLCBEZWJ1ZyldCitwdWIgZW51bSBPc3BmSW50ZXJmYWNlUGFyc2luZ0Vycm9yIHsKKyAg
ICAjW2Vycm9yKCJFcnJvciBwYXJzaW5nIGFyZWEiKV0KKyAgICBBcmVhUGFyc2luZ0Vycm9yKCNb
ZnJvbV0gQXJlYVBhcnNpbmdFcnJvcikKK30KKworI1tkZXJpdmUoQ2xvbmUsIERlYnVnLCBQYXJ0
aWFsRXEsIEVxLCBIYXNoLCBEZXNlcmlhbGl6ZSwgU2VyaWFsaXplKV0KK3B1YiBzdHJ1Y3QgT3Nw
ZkludGVyZmFjZSB7CisgICAgLy8gTm90ZTogYW4gaW50ZXJmYWNlIGNhbiBvbmx5IGJlIGEgcGFy
dCBvZiBhIHNpbmdsZSBhcmVhKHNvIG5vIHZlYyBuZWVkZWQgaGVyZSkKKyAgICBhcmVhOiBBcmVh
LAorICAgIHBhc3NpdmU6IE9wdGlvbjxib29sPiwKK30KKworaW1wbCBPc3BmSW50ZXJmYWNlIHsK
KyAgICBwdWIgZm4gYXJlYSgmc2VsZikgLT4gJkFyZWEgeworICAgICAgICAmc2VsZi5hcmVhCisg
ICAgfQorICAgIHB1YiBmbiBwYXNzaXZlKCZzZWxmKSAtPiAmT3B0aW9uPGJvb2w+IHsKKyAgICAg
ICAgJnNlbGYucGFzc2l2ZQorICAgIH0KK30KKworI1tjZmcoZmVhdHVyZSA9ICJjb25maWctZXh0
IildCitpbXBsIFRyeUZyb208KCZpbnRlcm5hbDo6QXJlYSwgJmludGVybmFsOjpJbnRlcmZhY2Up
PiBmb3IgT3NwZkludGVyZmFjZSB7CisgICAgdHlwZSBFcnJvciA9IE9zcGZJbnRlcmZhY2VQYXJz
aW5nRXJyb3I7CisKKyAgICBmbiB0cnlfZnJvbSh2YWx1ZTogKCZpbnRlcm5hbDo6QXJlYSwgJmlu
dGVybmFsOjpJbnRlcmZhY2UpKSAtPiBSZXN1bHQ8U2VsZiwgU2VsZjo6RXJyb3I+IHsKKyAgICAg
ICAgT2soU2VsZiB7CisgICAgICAgICAgICBhcmVhOiBBcmVhOjp0cnlfZnJvbSh2YWx1ZS4wKT8s
CisgICAgICAgICAgICBwYXNzaXZlOiB2YWx1ZS4xLnBhc3NpdmUoKSwKKyAgICAgICAgfSkKKyAg
ICB9Cit9CisKKyNbY2ZnKGZlYXR1cmUgPSAiY29uZmlnLWV4dCIpXQoraW1wbCBUcnlGcm9tPCZp
bnRlcm5hbDo6QXJlYT4gZm9yIEFyZWEgeworICAgIHR5cGUgRXJyb3IgPSBBcmVhUGFyc2luZ0Vy
cm9yOworCisgICAgZm4gdHJ5X2Zyb20odmFsdWU6ICZpbnRlcm5hbDo6QXJlYSkgLT4gUmVzdWx0
PFNlbGYsIFNlbGY6OkVycm9yPiB7CisgICAgICAgIEFyZWE6Om5ldyhGcnJXb3JkOjpuZXcodmFs
dWUudG9fc3RyaW5nKCkpPykKKyAgICB9Cit9CisKKyNbY2ZnKGZlYXR1cmUgPSAiY29uZmlnLWV4
dCIpXQoraW1wbCBGcm9tPCgmaW50ZXJuYWw6OkZhYnJpY0NvbmZpZywgJmludGVybmFsOjpOb2Rl
Q29uZmlnKT4gZm9yIE9zcGZSb3V0ZXIgeworICAgIGZuIGZyb20odmFsdWU6ICgmaW50ZXJuYWw6
OkZhYnJpY0NvbmZpZywgJmludGVybmFsOjpOb2RlQ29uZmlnKSkgLT4gU2VsZiB7CisgICAgICAg
IFNlbGYgeworICAgICAgICAgICAgcm91dGVyX2lkOiB2YWx1ZS4xLnJvdXRlcl9pZCwKKyAgICAg
ICAgfQorICAgIH0KK30KLS0gCjIuMzkuNQoKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpwdmUtZGV2ZWwgbWFpbGluZyBsaXN0CnB2ZS1kZXZlbEBsaXN0
cy5wcm94bW94LmNvbQpodHRwczovL2xpc3RzLnByb3htb3guY29tL2NnaS1iaW4vbWFpbG1hbi9s
aXN0aW5mby9wdmUtZGV2ZWwK