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 [IPv6:2a01:7e0:0:424::9])
	by lore.proxmox.com (Postfix) with ESMTPS id 36DAD1FF16E
	for <inbox@lore.proxmox.com>; Mon,  3 Feb 2025 15:21:33 +0100 (CET)
Received: from firstgate.proxmox.com (localhost [127.0.0.1])
	by firstgate.proxmox.com (Proxmox) with ESMTP id 4E6BA18B8;
	Mon,  3 Feb 2025 15:21:31 +0100 (CET)
Mime-Version: 1.0
Date: Mon, 03 Feb 2025 15:21:23 +0100
Message-Id: <D7IVLKXJY6X0.3GP8C2WBUTDFO@proxmox.com>
To: "Fiona Ebner" <f.ebner@proxmox.com>, "Proxmox VE development discussion"
 <pve-devel@lists.proxmox.com>
From: "Max Carrara" <m.carrara@proxmox.com>
X-Mailer: aerc 0.18.2-0-ge037c095a049
References: <20250109144818.430185-1-m.carrara@proxmox.com>
 <20250109144818.430185-2-m.carrara@proxmox.com>
 <b1d89b2a-4fdc-4e2b-84e4-1c91abb6dbb5@proxmox.com>
In-Reply-To: <b1d89b2a-4fdc-4e2b-84e4-1c91abb6dbb5@proxmox.com>
X-SPAM-LEVEL: Spam detection results:  0
 AWL -2.438 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
 KAM_SOMETLD_ARE_BAD_TLD      5 .bar, .beauty, .buzz, .cam, .casa, .cfd, .club,
 .date, .guru, .link, .live, .monster, .online, .press, .pw, .quest, .rest,
 .sbs, .shop, .stream, .top, .trade, .wiki, .work, .xyz TLD abuse
 RCVD_IN_VALIDITY_CERTIFIED_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to
 Validity was blocked. See
 https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more
 information.
 RCVD_IN_VALIDITY_RPBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to
 Validity was blocked. See
 https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more
 information.
 RCVD_IN_VALIDITY_SAFE_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to
 Validity was blocked. See
 https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more
 information.
 SPF_HELO_NONE           0.001 SPF: HELO does not publish an SPF Record
 SPF_PASS               -0.001 SPF: sender matches SPF record
Subject: Re: [pve-devel] [PATCH v3 pve-common 01/12] introduce PVE::Path
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>

T24gRnJpIEphbiAzMSwgMjAyNSBhdCAxOjIzIFBNIENFVCwgRmlvbmEgRWJuZXIgd3JvdGU6Cj4g
QW0gMDkuMDEuMjUgdW0gMTU6NDggc2NocmllYiBNYXggQ2FycmFyYToKPiA+ICs9aGVhZDMgcGF0
aF9qb2luKEBwYXRocykKPiA+ICsKPiA+ICtKb2lucyBtdWx0aXBsZSBwYXRocyB0b2dldGhlci4g
QWxsIGtpbmRzIG9mIHBhdGhzIGFyZSBzdXBwb3J0ZWQuCj4gPiArCj4gPiArRG9lcyBub3QgcGVy
Zm9ybSBhbnkgQzxMPDwgbm9ybWFsaXphdGlvbnwvInBhdGhfbm9ybWFsaXplKCRwYXRoKSIgPj4+
Lgo+ID4gKwo+ID4gKyAgICBteSAkam9pbmVkID0gcGF0aF9qb2luKCJmb28iLCAiYmFyL2JheiIs
ICJxdXgudHh0Iik7Cj4gPiArICAgICMgZm9vL2Jhci9iYXovcXV4LnR4dAo+ID4gKwo+ID4gKyAg
ICBteSAkam9pbmVkID0gcGF0aF9qb2luKCIvIiwgImV0Yy9wdmUvIiwgInN0b3JhZ2UuY2ZnIik7
Cj4gPiArICAgICMgL2V0Yy9wdmUvc3RvcmFnZS5jZmcKPiA+ICsKPiA+ICtTaW1pbGFyIHRvIEM8
TDw8IHBhdGhfcHVzaCgpfC8icGF0aF9wdXNoKCRwYXRoLCAkb3RoZXIpIj4+Piwgc2hvdWxkIGFu
eSBvZiB0aGUKPiA+ICtDPEBwYXRocz4gYmUgYW4gYWJzb2x1dGUgcGF0aCwgaXQgSTxyZXBsYWNl
cz4gYWxsIHByZWNlZGluZyBwYXRocy4KPgo+IFNlZW1zIGxpa2UgdGhlIGRvY3MgYXJlIHNvbWVo
b3cgYnJva2VuIGhlcmUsIGxvb2tpbmcgYXQgaXQgd2l0aCBwZXJsZG9jLAo+IGl0IGp1c3Qgc3Rh
dGVzICdTaW1pbGFyIHRvICJwYXRoX3B1c2goKSInIGFuZCB0aGUgcmVzdCBvZiB0aGUgc2VudGVu
Y2UKPiBpcyBtaXNzaW5nLgoKTXkgYmFkOyBtYWRlIGEgdHlwbyBpbiB0aGUgZG9jc3RyaW5nIGZv
ciBwYXRoX2NvbXBvbmVudHMoKSAoanVzdCBhYm92ZQp0aGlzIGZ1bmN0aW9uKS4gVGhhbmtzIGZv
ciBzcG90dGluZyB0aGlzIQoKPgo+IFdoeSB0aGlzIGtpbmQgb2YgYmVoYXZpb3Igd2l0aCBhYnNv
bHV0ZSBwYXRocz8gU2VlbXMgc3VycHJpc2luZyB0byBtZS4KPiBXb3VsZG4ndCBmYWlsaW5nIHRo
ZSBjYWxsIGJlIGJldHRlcj8KCkkgZGVjaWRlZCB0byBzdGljayB3aXRoIFJ1c3QncyBiZWhhdmlv
dXIgW3BhdGhidWZdIGhlcmUgYW5kIGluIG1vc3QKb3RoZXIgcGxhY2VzLCBzaW1wbHkgaW4gb3Jk
ZXIgdG8ga2VlcCB0aGUgYmVoYXZpb3VyIGNvbnNpc3RlbnQuCgpJJ20gbm90ICpyZWFsbHkqIGEg
ZmFuIG9mIGl0IGVpdGhlciwgYnV0IEkgdGhpbmsgaXQncyBiZXR0ZXIgdGhhbgpmYWlsaW5nIHRo
ZSBjYWxsIC0tIElNTyBoYXZpbmcgdG8gd3JhcCBwYXRoX2pvaW4gLyBwYXRoX3B1c2ggaW50byBh
bgpldmFsLWJsb2NrIHdvdWxkIGJlIHF1aXRlIGF3a3dhcmQgZm9yIHdoYXQncyBhIHJhdGhlciAi
c21hbGwiIG9wZXJhdGlvbgo6cwoKUGVyaGFwcyBJIHNob3VsZCBwcm92aWRlIHNvbWUgYWRkaXRp
b25hbCBjb250ZXh0IGhlcmUgYXMgd2VsbCBzbyBhcyB0bwptYWtlIG15ICJkZXNpZ24gcGhpbG9z
b3BoeSIgbW9yZSBjbGVhcjogVGhlIHJlYXNvbiB3aHkgSSBtb2RlbGVkClBWRTo6UGF0aCAobW9z
dGx5KSBhZnRlciBSdXN0J3Mgc3RkOjpwYXRoOjp7UGF0aCwgUGF0aEJ1Zn0gaXMgYmVjYXVzZToK
CiAgMS4gTW9zdCAobmV3ZXIpIGRldmVsb3BlcnMgd2lsbCBiZSBtdWNoIG1vcmUgbGlrZWx5IHRv
IGJlIGZhbWlsaWFyCiAgICAgd2l0aCBSdXN0IGluc3RlYWQgb2YgUGVybCwgc28gaWYgdGhleSBz
aG91bGQgc2VlIHRoaXMgbGlicmFyeSwKICAgICB0aGV5J2xsIGhhdmUgYSBtdWNoIGVhc2llciB0
aW1lIHVzaW5nIGl0IChvciBhdCBsZWFzdCB0aGF0J3Mgd2hhdAogICAgIEkgKmhvcGUqIHdvdWxk
IGhhcHBlbikuIFNvcnQgb2YgYXMgaW46ICJPaCwgdGhpcyBpcyBqdXN0IGxpa2UgdGhlCiAgICAg
cGF0aCBzdHVmZiBpbiBSdXN0LCBleGNlcHQgZm9yIGEgZmV3IFBlcmwtZXNxdWUgZXhjZXB0aW9u
cyEiCgogIDIuIEkgd2FudGVkIHRoZSBsaWJyYXJ5IHRvIGJlIGVzc2VudGlhbGx5IGV4Y2VwdGlv
bi1mcmVlLCBleGNlcHQgd2hlcmUKICAgICBvYnZpb3VzIGludmFyaWFudHMgYXJlbid0IHVwaGVs
ZCBieSB0aGUgY2FsbGVyIChlLmcuIHBhc3NpbmcgdW5kZWYpLgogICAgIFVubGVzcyB5b3UgbWF0
Y2ggdGhlIGVycm9yIG1lc3NhZ2Ugd2l0aCBhIHJlZ2V4LCB0aGVyZSdzIG5vCiAgICAgc3RydWN0
dXJhbGx5IHR5cGVkIHdheSB0byBkaWZmZXIgYmV0d2VlbiBlcnJvcnMgaW4gUGVybCwgc28gSSdk
CiAgICAgbGlrZSB0aGUgInR5cGVzIiBvZiBlcnJvcnMgdG8gYmUgbW9zdGx5IHRoZSBzYW1lIHdo
ZXJldmVyIHBvc3NpYmxlLgoKICAzLiBJIGRpZG4ndCB3YW50IHRvIHJlaW52ZW50IHRoZSB3aGVl
bCBhbmQgaW5zdGVhZCBzdGljayB0byB3aGF0IG90aGVyCiAgICAgcG9wdWxhciBsaWJyYXJpZXMg
ZG8gYXMgbXVjaCBhcyBwb3NzaWJsZSwgd2hpbGUgYWxzbyBhdm9pZGluZyBhbnkKICAgICBhZGRp
dGlvbmFsIGFic3RyYWN0aW9ucyAoZS5nLiBpbnRyb2R1Y2luZyBhbiBvYmplY3QgZm9yIHBhdGhz
KS4KCldpdGggYWxsIHRoYXQgYmVpbmcgc2FpZCwgc2luY2UgdGhhdCBiZWhhdmlvdXIgaXMgc3Vy
cHJpc2luZyB0byB5b3UsIEkKaGF2ZSBubyBxdWFycmVscyBjaGFuZ2luZyBpdCEgOlAgQWZ0ZXIg
YWxsIEknZCBsaWtlIHRvIGhhdmUgc29tZXRoaW5nCnRoYXQgZG9lc24ndCBjYXVzZSBhbnkgZnJp
Y3Rpb24gd2hlbiB1c2luZyBpdC4KCltwYXRoYnVmXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9y
Zy9zdGQvcGF0aC9zdHJ1Y3QuUGF0aEJ1Zi5odG1sI21ldGhvZC5wdXNoCgo+Cj4gPiArCj4gPiAr
ICAgIG15ICRqb2luZWQgPSBwYXRoX2pvaW4oImZvby9iYXIiLCAiL2V0YyIsICJyZXNvbHYuY29u
ZiIpOwo+ID4gKyAgICAjIC9ldGMvcmVzb2x2LmNvbmYKPiA+ICsKPiA+ICsgICAgbXkgJGpvaW5l
ZCA9IHBhdGhfam9pbigiZm9vIiwgIi9ldGMvcmVzb2x2LmNvbmYiLCAiL2V0Yy9ob3N0cyIpOwo+
ID4gKyAgICAjIC9ldGMvaG9zdHMKPiA+ICsKPiA+ICtUaHJvd3MgYW4gZXhjZXB0aW9uIGlmIGFu
eSBvZiB0aGUgcGFzc2VkIEM8QHBhdGhzPiBpcyBDPHVuZGVmPi4KPiA+ICsKPiA+ICs9Y3V0Cj4g
PiArCj4gPiArc3ViIHBhdGhfam9pbiA6IHByb3RvdHlwZShAKSB7Cj4gPiArICAgIG15IChAcGF0
aHMpID0gQF87Cj4gPiArCj4gPiArICAgIGlmICghc2NhbGFyKEBwYXRocykpIHsKPiA+ICsJcmV0
dXJuICcnOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIGNyb2FrICJvbmUgb2YgdGhlIHByb3Zp
ZGVkIHBhdGhzIGlzIHVuZGVmIiBpZiBhbnkgeyAhZGVmaW5lZCgkXykgfSBAcGF0aHM7Cj4gPiAr
Cj4KPiBJIHRoaW5rIHRoZSByZXN0IGNvdWxkIGJlIHdyaXR0ZW4gbW9yZSBlZmZpY2llbnRseSBs
aWtlICh1bnRlc3RlZCk6Cj4KPiBteSAkcmVzdWx0aW5nX3BhdGggPSBzaGlmdCBAcGF0aHM7Cj4g
Zm9yIG15ICRwYXRoIChAcGF0aHMpIHsKPiAgIGlmICgkcGF0aCA9fiBtI14vIykgewo+ICAgICAk
cmVzdWx0aW5nX3BhdGggPSAkcGF0aDsKPiAgIH0gZWxzZSB7Cj4gICAgICRyZXN1bHRpbmdfcGF0
aCA9IHBhdGhfcHVzaCgkcmVzdWx0aW5nX3BhdGgsICRwYXRoKTsKPiAgIH0KPiB9CgpOb3RlIHRo
YXQgSSdtIGRvaW5nIGEgcmV2ZXJzZSBpdGVyYXRpb24gYmVsb3c7IEkgdGhpbmsgZG9pbmcgaXQg
ZWl0aGVyCndheSBzaG91bGQgYmUgZmluZSwgYmVjYXVzZSBJIGRvdWJ0IHdlJ2xsIGV2ZXIgbmVl
ZCB0byBqb2luIHRoYXQgbWFueQpwYXRoIGNvbXBvbmVudHMgd2hlcmUgaXQncyBhY3R1YWxseSBn
b2luZyB0byBtYWtlIGEgZGlmZmVyZW5jZSA7UAoKPgo+ID4gKyAgICAjIEZpbmQgdGhlIGxhc3Qg
b2NjdXJyZW5jZSBvZiBhIHJvb3QgZGlyZWN0b3J5IGFuZCBzdGFydCBjb25qb2luaW5nIHRoZQo+
ID4gKyAgICAjIGNvbXBvbmVudHMgZnJvbSB0aGVyZSBvbndhcmRzCj4gPiArICAgIG15ICRpbmRl
eCA9IHNjYWxhcihAcGF0aHMpIC0gMTsKPiA+ICsgICAgd2hpbGUgKCRpbmRleCA+IDApIHsKPiA+
ICsJbGFzdCBpZiAkcGF0aHNbJGluZGV4XSA9fiBtI14vIzsKPiA+ICsJJGluZGV4LS07Cj4gPiAr
ICAgIH0KPiA+ICsKPiA+ICsgICAgQHBhdGhzID0gQHBhdGhzWyRpbmRleCAuLiAoc2NhbGFyKEBw
YXRocykgLSAxKV07Cj4gPiArCj4gPiArICAgIG15ICRyZXN1bHRpbmdfcGF0aCA9IHNoaWZ0IEBw
YXRoczsKPiA+ICsKPiA+ICsgICAgZm9yIG15ICRwYXRoIChAcGF0aHMpIHsKPiA+ICsJJHJlc3Vs
dGluZ19wYXRoID0gcGF0aF9wdXNoKCRyZXN1bHRpbmdfcGF0aCwgJHBhdGgpOwo+ID4gKyAgICB9
Cj4gPiArCj4gPiArICAgIHJldHVybiAkcmVzdWx0aW5nX3BhdGg7Cj4gPiArfQo+ID4gKwo+ID4g
Kz1oZWFkMyBwYXRoX25vcm1hbGl6ZSgkcGF0aCkKPiA+ICsKPiA+ICtXcmFwcGVyIGZvciBMPEM8
RmlsZTo6U3BlYy9jYW5vbnBhdGg+Pi4gUGVyZm9ybXMgYSBsb2dpY2FsIGNsZWFudXAgb2YgdGhl
IGdpdmVuCj4gPiArQzwkcGF0aD4uCj4gPiArCj4gPiArVGhpcyByZW1vdmVzIHVubmVjZXNzYXJ5
IGNvbXBvbmVudHMgb2YgYSBwYXRoIHRoYXQgY2FuIGJlIHNhZmVseQo+ID4gK3JlbW92ZWQsIHN1
Y2ggYXMgQzwuPiwgdHJhaWxpbmcgQzwvPiBvciByZXBlYXRlZCBvY2N1cnJlbmNlcyBvZiBDPC8+
Lgo+ID4gKwo+ID4gK0ZvciBleGFtcGxlLCBDPGZvby8uL2Jhci9iYXovLj4gYW5kIEM8Zm9vLy8v
L2Jhci8vYmF6Ly8+IHdpbGwgYm90aCBiZWNvbWUKPiA+ICtDPGZvby9iYXIvYmF6Pi4KPiA+ICsK
PiA+ICtCPE5vdGU6PiBUaGlzIHdpbGwgSTxub3Q+IHJlbW92ZSBjb21wb25lbnRzIHJlZmVyZW5j
aW5nIHRoZSBwYXJlbnQgZGlyZWN0b3J5LAo+ID4gK2kuZS4gQzwuLj4uIEZvciBleGFtcGxlLCBD
PGZvby9iYXIvLi4vYmF6PiBhbmQgQzxmb28vYmFyL2Jhei8uLj4gd2lsbCB0aGVyZWZvcmUKPiA+
ICtyZW1haW4gYXMgdGhleSBhcmUuIEhvd2V2ZXIsIHRoZSBwYXJlbnQgZGlyZWN0b3J5IG9mIEM8
Lz4gaXMgQzwvPiwgc28KPiA+ICtDPC8uLi8uLi9mb28+IHdpbGwgYmUgbm9ybWFsaXplZCB0byBD
PC9mb28+Lgo+ID4gKwo+ID4gK1Rocm93cyBhbiBleGNlcHRpb24gaWYgQzwkcGF0aD4gaXMgQzx1
bmRlZj4gb3IgdGhlIGNhbGwgdG8gQzxjYW5vbnBhdGg+IGZhaWxlZC4KPiA+ICsKPiA+ICs9Y3V0
Cj4gPiArCj4gPiArc3ViIHBhdGhfbm9ybWFsaXplIDogcHJvdG90eXBlKCQpIHsKPiA+ICsgICAg
bXkgKCRwYXRoKSA9IEBfOwo+ID4gKwo+ID4gKyAgICBjcm9hayAiXCRwYXRoIGlzIHVuZGVmIiBp
ZiAhZGVmaW5lZCgkcGF0aCk7Cj4gPiArCj4gPiArICAgIG15ICRjbGVhbmVkX3BhdGggPSBldmFs
IHsKPiA+ICsJRmlsZTo6U3BlYy0+Y2Fub25wYXRoKCRwYXRoKTsKPiA+ICsgICAgfTsKPiA+ICsK
Pgo+IFN0eWxlIG5pdDogYmxhbmsgbGluZXMgYmV0d2VlbiBldmFsIGFuZCB1c2luZyAkQCBhcmUg
YmV0dGVyIGF2b2lkZWQKPiBJTUhPLiBJJ2QgYWxzbyBoYXZlIHRoZSBldmFsIGV4cHJlc3Npb24g
YmUgYSBzaW5nbGUgbGluZSwgYnV0IG5vIHN0cm9uZwo+IGZlZWxpbmdzLgoKQ291bGQgeW91IHBl
cmhhcHMgZWxhYm9yYXRlIHdoeSwgcGxlYXNlPwoKPgo+ID4gKyAgICBjcm9hayAiZmFpbGVkIHRv
IGNsZWFuIHVwIHBhdGg6ICRAIiBpZiAkQDsKPiA+ICsKPiA+ICsgICAgcmV0dXJuICRjbGVhbmVk
X3BhdGg7Cj4gPiArfQo+ID4gKwo+ID4gKz1oZWFkMyBwYXRoX3BhcmVudCgkcGF0aCkKPiA+ICsK
PiA+ICtSZXR1cm5zIHRoZSBnaXZlbiBDPCRwYXRoPiB3aXRob3V0IGl0cyBmaW5hbCBjb21wb25l
bnQsIGlmIHRoZXJlIGlzIG9uZS4KPiA+ICsKPiA+ICtUcmFpbGluZyBhbmQgcmVwZWF0ZWQgb2Nj
dXJyZW5jZXMgb2YgQzwvPiBhbmQgQzwuPiBhcmUgbm9ybWFsaXplZCBvbiB0aGUgZmx5Cj4gPiAr
d2hlbiBuZWVkZWQuIFRoaXMgbWVhbnMgdGhhdCBlLmcuIEM8Zm9vLy8vL2Jhci8vLy4vLz4gYmVj
b21lcyBDPGZvbz4sIGJ1dAo+ID4gK0M8Zm9vLy4vL2Jhci8vLi9iYXo+IGJlY29tZXMgQzxmb28v
Li8vYmFyPi4KPiA+ICsKPiA+ICtUaGlzIGZ1bmN0aW9uJ3MgYmVoYXZpb3VyIGlzIGFsbW9zdCBp
ZGVudGljYWwgdG8gUnVzdCdzCj4gPiArTDw8IFBhdGg6OnBhcmVudHxodHRwczovL2RvYy5ydXN0
LWxhbmcub3JnL3N0ZC9wYXRoL3N0cnVjdC5QYXRoLmh0bWwjbWV0aG9kLnBhcmVudCA+PiwKPiA+
ICt3aXRoIGEgZmV3IGFkYXB0YXRpb25zIG1hZGUgd2hlcmV2ZXIgUGVybCB0cmVhdHMgdGhpbmdz
IGRpZmZlcmVudGx5Ogo+ID4gKwo+ID4gKz1vdmVyCj4gPiArCj4gPiArPWl0ZW0gKiBDPC9mb28v
YmFyPiBiZWNvbWVzIEM8L2Zvbz4sIEM8Zm9vL2Jhcj4gYmVjb21lcyBDPGZvbz4uCj4gPiArCj4g
PiArPWl0ZW0gKiBDPC9mb28+IGJlY29tZXMgQzwvPi4KPiA+ICsKPiA+ICs9aXRlbSAqIEM8Zm9v
L2Jhci8uLj4gYmVjb21lcyBDPGZvby9iYXI+LiBOb3RlIHRoYXQgQzxmb28vYmFyPiBpcyBub3QK
PiA+ICtuZWNlc3NhcmlseSB0aGUgcmVhbCBwYXJlbnQgaW4gdGhlIGZpbGVzeXN0ZW0gaW4gdGhl
IGNhc2Ugb2YgZS5nLiBzeW1saW5rcy4KPiA+ICsKPiA+ICs9aXRlbSAqIEM8Zm9vLy4uL2Jhcj4g
YmVjb21lcyBDPGZvby8uLj4uCj4gPiArCj4gPiArPWl0ZW0gKiBDPGZvbz4gaXMgaW50ZXJwcmV0
ZWQgYXMgQzwuL2Zvbz4gYW5kIGJlY29tZXMgQzwuPi4gVGhpcyBpcyBiZWNhdXNlIFBlcmwncwo+
ID4gK0M8TDxGaWxlOjpTcGVjL2Nhbm9ucGF0aD4+IGludGVycHJldHMgQzwuL2Zvbz4gYW5kIEM8
Zm9vPiBhcyB0aGUgc2FtZSB0aGluZy4KPgo+IEkgZmFpbCB0byBzZWUgdGhlICJiZWNhdXNlIiBo
ZXJlLiBXaHkgaXMgdGhpcyBzcGVjaWFsIGhhbmRsaW5nIGltcG9ydGFudAo+IGluIHByYWN0aWNl
LCBpLmUuIHdoeSBleGFjdGx5IGNhcmUgYWJvdXQgdGhlIGJlaGF2aW9yIG9mIGNhbm9ucGF0aCBo
ZXJlPwo+IEl0IHNlZW1zIHJlYWxseSBzdXJwcmlzaW5nIHRvIGdldCAiLiIgd2hlbiBhc2tpbmcg
Zm9yIHRoZSBwYXJlbnQgb2YKPiAiZm9vIi4gV2l0aCB0aGUgbm9ybWFsaXphdGlvbiBleHBsYWlu
ZWQgYWJvdmUsIEknZCBhcmd1ZSBpdCdkIGJlIG11Y2gKPiBtb3JlIG5hdHVyYWwgdG8gcmV0dXJu
IHRoZSBlbXB0eSBzdHJpbmcgZm9yIGJvdGggIi4vZm9vIiBhbmQgImZvbyIuIE9yCj4gaWYgeW91
IHdhbnQgdG8gZm9sbG93IFJ1c3QncyBwYXJlbnQoKSBtb3JlIGNsb3NlbHkgKHdoaWNoIEkgZ3Vl
c3MgaXMgdGhlCj4gcmVhc29uIGZvciAiLyIgYW5kICIuIiBoYXZpbmcgZGlmZmVyZW50IHJlc3Vs
dHMpLCBoYXZlICIuL2ZvbyIgcmV0dXJuCj4gIi4iIGFuZCAiZm9vIiByZXR1cm4gdGhlIGVtcHR5
IHN0cmluZy4KClllYWgsIHRoaXMgaXMgdGhlIG9ubHkgdGhpbmcgd2hlcmUgSSB3YXNuJ3Qgc3Vy
ZSBpZiBpdCdzIHRoZSByaWdodCB3YXkKdG8gZ28uIFRoZSByZWFzb24gd2h5IEkgY2hvc2UgdG8g
aGFuZGxlIGl0IHRoYXQgd2F5IGlzIGJlY2F1c2UKRmlsZTo6U3BlYy0+Y2Fub25wYXRoKCkgd2ls
bCByZXR1cm4gImZvbyIgZm9yIGJvdGggImZvbyIgYW5kICIuL2ZvbyIKLS0gYW5kIEkgd2Fzbid0
IDEwMCUgc3VyZSB3aGV0aGVyICpub3QqIGhhbmRsaW5nIGl0IHRoZSBzYW1lIHdpbGwgYmUKZGV0
cmltZW50YWwgZWxzZXdoZXJlLgoKSSB0b3RhbGx5IGdldCB0aGF0IGl0J3MgdW5leHBlY3RlZCB0
aG91Z2gsIHNvIEkgcmVhbGx5IHdvdWxkbid0IG1pbmQKY2hhbmdpbmcgaXQgdG8gb25lIG9mIHRo
ZSB0d28gYWx0ZXJuYXRpdmVzIHlvdSBzdWdnZXN0ZWQuIDpQCgooQWRkZW5kdW06IEhhbmRsaW5n
IHBhdGhzIGlzIHJlYWxseSBmaW5pY2t5LCBzbyBpbiBjYXNlcyB3aGVyZSBJIHdhc24ndAoxMDAl
IGNvbnZpbmNlZCBvZiBzb21ldGhpbmcgSSBkZWNpZGVkIHRvIGJlIGNvbnNlcnZhdGl2ZSBpbnN0
ZWFkOyB0aGlzCmlzIG9uZSBzdWNoIGNhc2UuIPCfmIUpCgo+Cj4gPiArPWhlYWQzIHBhdGhfcHVz
aCgkcGF0aCwgJG90aGVyKQo+ID4gKwo+ID4gK0V4dGVuZHMgQzwkcGF0aD4gd2l0aCBDPCRvdGhl
cj4sIHJldHVybmluZyBhIG5ldyBwYXRoLgo+ID4gKwo+ID4gK0lmIEM8JG90aGVyPiBpcyBhYnNv
bHV0ZSwgaXQgd2lsbCBiZSByZXR1cm5lZCBpbnN0ZWFkLgo+ID4gKwo+Cj4gQWdhaW4sIHNlZW1z
IHJhdGhlciBzdXJwcmlzaW5nIHRvIG1lIHRvIGF1dG8tbWFnaWNhbGx5IGRvIHRoaXMuCgpTZWUg
bXkgZWxhYm9yYXRpb24gZnVydGhlciBhYm92ZS4KCj4KPiA+ICtUaHJvd3MgYW4gZXhjZXB0aW9u
IGlmIGFueSBvZiB0aGUgYXJndW1lbnRzIGlzIEM8dW5kZWY+Lgo+ID4gKwo+ID4gKz1jdXQKPiA+
ICsKPiA+ICtzdWIgcGF0aF9wdXNoIDogcHJvdG90eXBlKCQkKSB7Cj4gPiArICAgIG15ICgkcGF0
aCwgJG90aGVyKSA9IEBfOwo+ID4gKwo+ID4gKyAgICBjcm9hayAiXCRwYXRoIGlzIHVuZGVmIiBp
ZiAhZGVmaW5lZCgkcGF0aCk7Cj4gPiArICAgIGNyb2FrICJcJG90aGVyIGlzIHVuZGVmIiBpZiAh
ZGVmaW5lZCgkb3RoZXIpOwo+ID4gKwo+ID4gKyAgICByZXR1cm4gJHBhdGggaWYgJG90aGVyIGVx
ICcnOwo+ID4gKyAgICByZXR1cm4gJG90aGVyIGlmIHBhdGhfaXNfYWJzb2x1dGUoJG90aGVyKTsK
PiA+ICsKPiA+ICsgICAgbXkgJG5lZWRfc2VwID0gJHBhdGggbmUgJycgJiYgJHBhdGggIX4gbSMv
JCM7Cj4gPiArCj4gPiArICAgICRwYXRoIC49ICIvIiBpZiAkbmVlZF9zZXA7Cj4gPiArICAgICRw
YXRoIC49ICRvdGhlcjsKPiA+ICsKPiA+ICsgICAgcmV0dXJuICRwYXRoOwo+ID4gK30KPiA+ICsK
PiA+ICs9aGVhZDMgcGF0aF9wb3AoJHBhdGgpCj4gPiArCj4gPiArQWxpYXMgZm9yIEM8TDw8IHBh
dGhfcGFyZW50KCl8LyJwYXRoX3BhcmVudCgkcGF0aCkiID4+Pi4KPiA+ICsKPgo+IFdoeSBoYXZl
IHRoaXMgYWxpYXM/IFRoZSBuYW1lIHN1Z2dlc3RzIGl0IHdvdWxkIGJlaGF2ZSBsaWtlIGFuIGlu
dmVyc2UKPiB0byBwYXRoX3B1c2goKSwgYnV0IGl0IGRvZXMgbm90LCBiZWNhdXNlIG9mIHRoZSBu
b3JtYWxpemF0aW9uIG9mCj4gcGF0aF9wYXJlbnQoKS4gU28gSSdkIHJhdGhlciBub3QgaGF2ZSBp
dCBvciBoYXZlIGl0IGJlIGEgbm9uLW5vcm1hbGl6aW5nCj4gdmVyc2lvbiAoYnV0IG1heWJlIG5v
dCB3b3J0aCBpdCkgdG8gYXZvaWQgc3VycHJpc2VzLgoKQ291bGQgeW91IHBsZWFzZSBlbGFib3Jh
dGUgd2hhdCB5b3UgbWVhbiByZWdhcmRpbmcgdGhlIG5vcm1hbGl6YXRpb24gb2YKcGF0aF9wYXJl
bnQoKT8KCnBhdGhfcGFyZW50KCkgKG9yIHBhdGhfcG9wKCkpIHdpbGwgb25seSBub3JtYWxpemUg
YXMgbXVjaCBhcyBpdCBuZWVkcyB0bwppbiBvcmRlciB0byByZW1vdmUgdGhlIGxhc3QgcGF0aCBj
b21wb25lbnQgYW5kIGdldCB0byB0aGUgb25lIHRoYXQKcHJlY2VkZXMgdGhhdDoKCiAgbXkgJHAg
PSAiZm9vLy4vLi9iYXIvLi8uL2Jhei8uLy4iOwoKICAkcCA9IFBWRTo6UGF0aDo6cGF0aF9wYXJl
bnQoJHApOiAgIyBvciBwYXRoX3BvcCgpCiAgIyAkcCBpcyBub3cgImZvby8uLy4vYmFyIgoKcGF0
aF9wdXNoKCkgZG9lcyBhY3R1YWxseSBiZWhhdmUgbGlrZSBhbiBpbnZlcnNlIGlmIHlvdSBpbmNs
dWRlIHRoZQpyZWR1bmRhbnQgc3R1ZmY6CgogICRwID0gUFZFOjpQYXRoOjpwYXRoX3B1c2goJHAs
ICIuLy4vYmF6Ly4vLiIpCiAgIyAkcCBpcyBub3cgImZvby8uLy4vYmFyLy4vLi9iYXovLi8uIiBh
Z2FpbgoKSXQncyBub3QgYSBjb21wbGV0ZSBpbnZlcnNlLCB0aGF0J3MgdHJ1ZSAoYXMgaW4sIGl0
J3Mgbm90IGJpamVjdGl2ZSA7UCksCmJlY2F1c2UgeW91IGNhbid0IHJlcGxpY2F0ZSB0aGUgZXhh
bXBsZSBhYm92ZSB3aXRoIGEgcGF0aCBsaWtlCiJmb28vLy9iYXIvLy9iYXoiIHNpbmNlIHlvdSBj
YW4ndCBwdXNoICIvLy9iYXoiIG9udG8gImZvby8vL2JhciIKKCIvLy9iYXoiIGlzIHRyZWF0ZWQg
YXMgYW4gYWJzb2x1dGUgcGF0aCkuCgpJIHRoaW5rIGEgbm9uLW5vcm1hbGl6aW5nIHZlcnNpb24g
d291bGRuJ3QgcmVhbGx5IGJlIHRoYXQgbmljZSB0byB1c2U7Cm9uZSB3b3VsZCBoYXZlIHRvIGNv
bnN0YW50bHkgcmVtZW1iZXIgdG8gY2FsbCBwYXRoX25vcm1hbGl6ZSgpCmJlZm9yZWhhbmQgdG8g
YWN0dWFsbHkgZ2V0IHRoZSBkZXNpcmVkIHJlc3VsdCAoaS5lLiBnZXR0aW5nIHRoZSBwYXJlbnQK
ZGlyZWN0b3J5KS4KCkkgY2FuIGp1c3QgcmVtb3ZlIHRoZSBhbGlhcyBpZiB5b3UgcHJlZmVyOyBp
dCdzIG5vdCBlcXVpdmFsZW50IHRvIFJ1c3QncwpQYXRoQnVmOjpwb3AoKSBbcG9wXSBhbmQgaWYg
aXQncyBhIHNvdXJjZSBvZiBjb25mdXNpb24sIHdlIGNhbiBwcm9iYWJseQpkbyB3aXRob3V0LgoK
W3BvcF06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvc3RkL3BhdGgvc3RydWN0LlBhdGhCdWYu
aHRtbCNtZXRob2QucG9wCgo+Cj4gPiArPWN1dAo+ID4gKwo+ID4gK3N1YiBwYXRoX3BvcCA6IHBy
b3RvdHlwZSgkKSB7Cj4gPiArICAgIG15ICgkcGF0aCkgPSBAXzsKPiA+ICsgICAgcmV0dXJuIHBh
dGhfcGFyZW50KCRwYXRoKTsKPiA+ICt9Cj4gPiArCj4gPiArPWhlYWQzIHBhdGhfZmlsZV9uYW1l
KCRwYXRoKQo+ID4gKwo+ID4gK1JldHVybnMgdGhlIGxhc3QgY29tcG9uZW50IG9mIHRoZSBnaXZl
biBDPCRwYXRoPiwgaWYgaXQgaXMgYSBsZWdhbCBmaWxlIG5hbWUsCj4gPiArb3IgQzx1bmRlZj4g
b3RoZXJ3aXNlLgo+ID4gKwo+ID4gK0lmIEM8JHBhdGg+IGlzIGFuIGVtcHR5IHN0cmluZywgQzwv
PiwgQzwuPiBvciBlbmRzIHdpdGggYSBDPC4uPiBjb21wb25lbnQsCj4gPiArdGhlcmUgaXMgbm8g
dmFsaWQgZmlsZSBuYW1lLgo+ID4gKwo+ID4gK0I8Tm90ZTo+IFRoaXMgZG9lcyBub3QgY2hlY2sg
d2hldGhlciB0aGUgZ2l2ZW4gQzwkcGF0aD4gYWN0dWFsbHkgcG9pbnRzIHRvIGEKPiA+ICtmaWxl
IG9yIGEgZGlyZWN0b3J5IGV0Yy4KPiA+ICsKPiA+ICtUaHJvd3MgYW4gZXhjZXB0aW9uIGlmIEM8
JHBhdGg+IGlzIEM8dW5kZWY+Lgo+ID4gKwo+ID4gKz1jdXQKPiA+ICsKPiA+ICtzdWIgcGF0aF9m
aWxlX25hbWUgOiBwcm90b3R5cGUoJCkgewo+ID4gKyAgICBteSAoJHBhdGgpID0gQF87Cj4gPiAr
Cj4gPiArICAgIGNyb2FrICJcJHBhdGggaXMgdW5kZWYiIGlmICFkZWZpbmVkKCRwYXRoKTsKPiA+
ICsKPiA+ICsgICAgbXkgQGNvbXBvbmVudHMgPSBwYXRoX2NvbXBvbmVudHMoJHBhdGgpOwo+ID4g
Kwo+ID4gKyAgICBpZiAoIXNjYWxhcihAY29tcG9uZW50cykpIHsKPiA+ICsJcmV0dXJuOwo+ID4g
KyAgICB9Cj4gPiArCj4gPiArICAgIGlmICgKPiA+ICsJc2NhbGFyKEBjb21wb25lbnRzKSA9PSAx
Cj4gPiArCSYmICgkY29tcG9uZW50c1swXSBlcSAnLycgfHwgJGNvbXBvbmVudHNbMF0gZXEgJy4n
KQo+ID4gKyAgICApIHsKPgo+IFN0eWxlIG5pdDogdGhpcyBjb25kaXRpb25hbCBmaXRzIHdlbGwg
aW50byAxMDAgY2hhcmFjdGVycywgc28gY2FuIGJlIG9uZQo+IGxpbmUgaW5zdGVhZCBvZiBmb3Vy
CgpGYWlyIHBvaW50LCBidXQgSSBwcmVmZXIgdG8gaGF2ZSBpdCBhIGxpdHRsZSBtb3JlIHJlYWRh
YmxlIGhlcmUsIGFuZAppdCdzIHN0aWxsIGluIGxpbmUgd2l0aCBvdXIgc3R5bGUgZ3VpZGUuIDpQ
Cgo+Cj4gPiArCXJldHVybjsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBpZiAoJGNvbXBvbmVu
dHNbLTFdIGVxICcuLicpIHsKPiA+ICsJcmV0dXJuOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAg
IHJldHVybiAkY29tcG9uZW50c1stMV07Cj4gPiArfQo+ID4gKwo+ID4gKz1oZWFkMyBwYXRoX3dp
dGhfZmlsZV9uYW1lKCRwYXRoLCAkZmlsZV9uYW1lKQo+ID4gKwo+ID4gK1JldHVybnMgQzwkcGF0
aD4gd2l0aCBDPCRmaWxlX25hbWU+IGFzIHRoZSBuZXcgbGFzdCBjb21wb25lbnQuCj4gPiArCj4g
PiArVGhpcyBpcyBlc3NlbnRpYWxseSBsaWtlIGNhbGxpbmcgQzxMPDwgcGF0aF9wYXJlbnQoKXwv
InBhdGhfcGFyZW50KCRwYXRoKSIgPj4+Cj4gPiArYW5kIHVzaW5nIEM8TDw8IHBhdGhfcHVzaCgp
fC8icGF0aF9wdXNoKCRwYXRoLCAkb3RoZXIpIiA+Pj4gdG8gYXBwZW5kIHRoZSBuZXcKPiA+ICtm
aWxlIG5hbWUsIGJ1dCBoYW5kbGVzIGEgZmV3IGV4dHJhIGNhc2VzOgo+ID4gKwo+ID4gKz1vdmVy
Cj4gPiArCj4gPiArPWl0ZW0gKiBJZiBDPCRwYXRoPiBpcyBDPC8+LCBhcHBlbmRzIEM8JGZpbGVf
bmFtZT4uCj4gPiArCj4gPiArPWl0ZW0gKiBJZiBDPCRwYXRoPiBpcyBhbiBlbXB0eSBzdHJpbmcs
IGFwcGVuZHMgQzwkZmlsZV9uYW1lPi4KPiA+ICsKPiA+ICs9aXRlbSAqIElmIEM8JHBhdGg+IGVu
ZHMgd2l0aCBhIHBhcmVudCBkaXJlY3RvcnkgcmVmZXJlbmNlIChDPC4uPiksIHJlcGxhY2VzIGl0
Cj4gPiArd2l0aCBDPCRmaWxlX25hbWU+Lgo+Cj4gSG1tLCB3aHkgaXMgdGhhdCBhbiAiZXh0cmEg
Y2FzZSIgY29tcGFyZWQgdG8gY2FsbGluZyBwYXRoX3BhcmVudCgpIGFuZAo+IHBhdGhfcHVzaCgp
PyBJLmUuIHlvdXIgaW1wbGVtZW50YXRpb24gZG9lc24ndCBoYW5kbGUgIi4uIiBzcGVjaWZpY2Fs
bHkuCj4KClRoaXMgaXMgc3RhdGVkIGhlcmUgZm9yIGNvbXBsZXRlbmVzcydzIHNha2UsIGJ1dCBJ
IGd1ZXNzIGl0J3Mgbm90IHJlYWxseQphbiBleHRyYSBjYXNlLCB5ZWFoLgoKSG93ZXZlciwgeW91
IG1hZGUgbWUgY2hlY2sgdGhlIGV4YWN0IGRldGFpbHMgYWdhaW4gdGhvdWdoLCBhbmQgaXQgc2Vl
bXMKdGhhdCBSdXN0J3MgUGF0aEJ1Zjo6c2V0X2ZpbGVfbmFtZSgpIFtzZm5dIHdvdWxkIGFjdHVh
bGx5IGJlaGF2ZQpkaWZmZXJlbnRseSBoZXJlOyBpZiBhIHBhdGggZW5kcyB3aXRoIGEgcGFyZW50
IGRpciByZWZlcmVuY2UsIGl0IHdvdWxkCmFjdHVhbGx5IGp1c3QgYXBwZW5kIHRoZSBmaWxlIG5h
bWUsIG5vdCByZXBsYWNlIGl0IDpQCgouLiBzbywgdGhhbmtzIGZvciBzcG90dGluZyB0aGlzISBJ
IGFjdHVhbGx5IHdhbnQgdG8gYWRhcHQgdGhpcyBub3cg8J+YhAoKW3Nmbl06IGh0dHBzOi8vZG9j
LnJ1c3QtbGFuZy5vcmcvc3RkL3BhdGgvc3RydWN0LlBhdGhCdWYuaHRtbCNtZXRob2Quc2V0X2Zp
bGVfbmFtZQoKPiA+ICsKPiA+ICs9YmFjawo+ID4gKwo+ID4gK1Rocm93cyBhbiBleGNlcHRpb24g
aWYgYW55IG9mIHRoZSBhcmd1bWVudHMgaXMgQzx1bmRlZj4gb3IgaWYgQzwkZmlsZV9uYW1lPgo+
ID4gK2NvbnRhaW5zIGEgcGF0aCBzZXBhcmF0b3IgKEM8Lz4pLgo+ID4gKwo+ID4gKz1jdXQKPiA+
ICsKPiA+ICtzdWIgcGF0aF93aXRoX2ZpbGVfbmFtZSA6IHByb3RvdHlwZSgkJCkgewo+ID4gKyAg
ICBteSAoJHBhdGgsICRmaWxlX25hbWUpID0gQF87Cj4gPiArCj4gPiArICAgIGNyb2FrICJcJHBh
dGggaXMgdW5kZWYiIGlmICFkZWZpbmVkKCRwYXRoKTsKPiA+ICsgICAgY3JvYWsgIlwkZmlsZV9u
YW1lIGlzIHVuZGVmIiBpZiAhZGVmaW5lZCgkZmlsZV9uYW1lKTsKPiA+ICsgICAgY3JvYWsgIlwk
ZmlsZV9uYW1lIGNvbnRhaW5zIGEgcGF0aCBzZXBhcmF0b3I6ICRmaWxlX25hbWUiIGlmICRmaWxl
X25hbWUgPX4gbXwvfDsKPiA+ICsKPiA+ICsgICAgbXkgJHBhcmVudCA9IHBhdGhfcGFyZW50KCRw
YXRoKTsKPiA+ICsKPiA+ICsgICAgIyB1bmRlZiBtZWFucyB0aGF0ICRwYXRoIHdhcyBlaXRoZXIg
IiIgb3IgIi8iLCBzbyB3ZSBjYW4ganVzdCBhcHBlbmQgdG8gaXQKPiA+ICsgICAgcmV0dXJuICgk
cGF0aCAuICRmaWxlX25hbWUpIGlmICFkZWZpbmVkKCRwYXJlbnQpOwo+ID4gKwo+ID4gKyAgICAj
IEJlY2F1c2UgdGhlIHBhcmVudCBvZiAiZm9vIiBpcyAiLiIsIHJldHVybiAkZmlsZV9uYW1lIHRv
IHN0YXkgY29uc2lzdGVudC4KPiA+ICsgICAgIyBPdGhlcndpc2UsIHdlJ2QgZW5kIHVwIHdpdGgg
YSBjdXJyZW50IHBhdGggcmVmIHByZXBlbmRlZCAoIi4vJGZpbGVfbmFtZSIpCj4gPiArICAgIGlm
ICgkcGFyZW50IGVxICcuJyAmJiAkcGF0aCAhfiBtfC98KSB7Cj4gPiArCXJldHVybiAkZmlsZV9u
YW1lOwo+ID4gKyAgICB9Cj4KPiBTZWUsIHlvdSBhbHJlYWR5IG5lZWQgc3BlY2lhbCBoYW5kbGlu
ZyBiZWNhdXNlIG9mIHRoYXQgc3VycHJpc2luZwo+IGJlaGF2aW9yIDspCgpXZWxsIHllYWgsIGJl
Y2F1c2UgSSBjaG9zZSB0aGUgYmVoYXZpb3VyIG9mIHBhdGhfcGFyZW50KCkgdG8gYmUgdGhlIHdh
eQppdCBpczsgb2YgY291cnNlIEknbSBnb25uYSBlbnN1cmUgdGhlIG90aGVyIGZ1bmN0aW9ucyB0
YWtlIHRoYXQgZGVjaXNpb24KaW50byBhY2NvdW50IHRvbyDwn5iFCgo+Cj4gPiArCj4gPiArICAg
IHJldHVybiBwYXRoX3B1c2goJHBhcmVudCwgJGZpbGVfbmFtZSk7Cj4gPiArfQo+ID4gKwo+ID4g
K215IHN1YiBfcGF0aF9maWxlX3ByZWZpeF9zdWZmaXhfc3RyIDogcHJvdG90eXBlKCQpIHsKPiA+
ICsgICAgbXkgKCRmaWxlX25hbWUpID0gQF87Cj4gPiArCj4gPiArICAgIGNvbmZlc3MgIlwkZmls
ZV9uYW1lIGlzIHVuZGVmIiBpZiAhZGVmaW5lZCgkZmlsZV9uYW1lKTsKPiA+ICsKPiA+ICsgICAg
Y29uZmVzcyAiXCRwcmVmaXggbm90IG1hdGNoZWQiIGlmICRmaWxlX25hbWUgIX4gbXxeKFwuKlte
XC5dKikoLiopfDsKPiA+ICsgICAgbXkgKCRwcmVmaXgsICRzdWZmaXhfc3RyKSA9ICgkMSwgJDIp
Owo+ID4gKwo+ID4gKyAgICByZXR1cm4gKCRwcmVmaXgsICRzdWZmaXhfc3RyKTsKPiA+ICt9Cj4g
PiArCj4gPiArbXkgc3ViIF9wYXRoX2ZpbGVfc3VmZml4ZXNfZnJvbV9zdHIgOiBwcm90b3R5cGUo
JCkgewo+ID4gKyAgICBteSAoJHN1ZmZpeF9zdHIpID0gQF87Cj4gPiArCj4gPiArICAgIGNvbmZl
c3MgIlwkc3VmZml4X3N0ciBpcyB1bmRlZiIgaWYgIWRlZmluZWQoJHN1ZmZpeF9zdHIpOwo+ID4g
Kwo+ID4gKyAgICAjIFN1ZmZpeGVzIGFyZSBleHRyYWN0ZWQgIm1hbnVhbGx5IiBiZWNhdXNlIGpv
aW4oKWluZyB0aGUgcmVzdWx0IG9mIHNwbGl0KCkKPiA+ICsgICAgIyByZXN1bHRzIGluIGEgZGlm
ZmVyZW50IGZpbGUgbmFtZSB0aGFuIHRoZSBvcmlnaW5hbC4gTGV0J3Mgc2F5IHlvdSBoYXZlIGEK
PiA+ICsgICAgIyBmaWxlIG5hbWVkICJmb28uYmFyLiIuIFRoZSBjb3JyZWN0IHN1ZmZpeGVzIHdv
dWxkIGJlICgiYmFyIiwgIiIpLgo+ID4gKyAgICAjIFdpdGggc3BsaXQsIHlvdSBnZXQgdGhlIGZv
bGxvd2luZzoKPiA+ICsgICAgIyAgICAgc3BsaXQoL1wuLywgIi5iYXIuIikgICAgIC0tPiAoIiIs
ICJiYXIiKSAgICAgLS0+IGpvaW4oKWVkIHRvICJmb28uLmJhciIKPiA+ICsgICAgIyAgICAgc3Bs
aXQoL1wuLywgIi5iYXIuIiwgLTEpIC0tPiAoIiIsICJiYXIiLCAiIikgLS0+IGpvaW4oKWVkIHRv
ICJmb28uLmJhci4iCj4KPiBDb3VsZG4ndCB5b3UganVzdCBzaGlmdCBhd2F5IHRoZSBmaXJzdCBl
bnRyeSBmcm9tIHRoZSByZXN1bHQ/CgpIbSwgSSB0aGluayBzby4gSSdsbCBzZWUgaG93IGl0IGJl
aGF2ZXMuIFRoYW5rcyBmb3IgdGhlIHN1Z2dlc3Rpb24hCgo+Cj4gPiArICAgIG15IEBzdWZmaXhl
cyA9ICgpOwo+ID4gKyAgICB3aGlsZSAoJHN1ZmZpeF9zdHIgPX4gc3xeKFwuW15cLl0qKXx8KSB7
Cj4gPiArCW15ICRzdWZmaXggPSAkMTsKPiA+ICsJJHN1ZmZpeCA9fiBzfF5cLnx8Owo+Cj4gTml0
OiBDb3VsZCBhbHNvIHVzZSBzdWJzdHIoKSByYXRoZXIgdGhlbiByZWdleCByZXBsYWNlLgoKR29v
ZCBjYXRjaCwgdGhhbmtzIQoKPgo+ID4gKwlwdXNoKEBzdWZmaXhlcywgJHN1ZmZpeCk7Cj4gPiAr
ICAgIH0KPiA+ICsKPiA+ICsgICAgcmV0dXJuIEBzdWZmaXhlczsKPiA+ICt9Cj4gPiArCj4gPiAr
PWhlYWQzIHBhdGhfZmlsZV9wcmVmaXgoJHBhdGgpCj4gPiArCj4gPiArUmV0dXJucyB0aGUgcHJl
Zml4IG9mIHRoZSBmaWxlIG5hbWUgb2YgdGhlIGdpdmVuIEM8JHBhdGg+LiBJZiB0aGUgQzwkcGF0
aD4gZG9lcwo+ID4gK25vdCBoYXZlIGEgdmFsaWQgZmlsZSBuYW1lIGFuZCB0aHVzIG5vIHByZWZp
eCwgQzx1bmRlZj4gaXMgcmV0dXJuZWQgaW5zdGVhZC4KPiA+ICsKPiA+ICtUaGUgcHJlZml4IG9m
IGEgZmlsZSBuYW1lIGlzIHRoZSBwYXJ0IGJlZm9yZSBhbnkgZXh0ZW5zaW9ucyAoc3VmZml4ZXMp
Lgo+ID4gKwo+ID4gKyAgICBteSAkcHJlZml4ID0gcGF0aF9maWxlX3ByZWZpeCgiL2V0Yy9yZXNv
bHYuY29uZiIpOwo+ID4gKyAgICAjIHJlc29sdgo+ID4gKwo+ID4gKyAgICBteSAkcHJlZml4ID0g
cGF0aF9maWxlX3ByZWZpeCgiL3RtcC9hcmNoaXZlLnRhci56c3QiKTsKPiA+ICsgICAgIyBhcmNo
aXZlCj4gPiArCj4gPiArVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiBDPCRwYXRoPiBpcyBDPHVuZGVm
Pi4KPiA+ICsKPgo+IERvY3VtZW50YXRpb24gc2hvdWxkIG1lbnRpb24gaG93IGRvdCBmaWxlcyAo
ZS5nLiAuZm9vLnR4dCkgYXJlIHRyZWF0ZWQuCj4KClN1cmUsIEkgY2FuIGFkZCB0aGF0LgoKRldJ
VyBpbiB0aGUgY2FzZSBvZiAiLmZvby50eHQiLCB0aGUgcHJlZml4IHdvdWxkIGJlICIuZm9vIi4K
Cj4gPiArPWN1dAo+ID4gKwo+ID4gK3N1YiBwYXRoX2ZpbGVfcHJlZml4IDogcHJvdG90eXBlKCQp
IHsKPiA+ICsgICAgbXkgKCRwYXRoKSA9IEBfOwo+ID4gKwo+ID4gKyAgICBjcm9hayAiXCRwYXRo
IGlzIHVuZGVmIiBpZiAhZGVmaW5lZCgkcGF0aCk7Cj4gPiArCj4gPiArICAgIG15ICRmaWxlX25h
bWUgPSBwYXRoX2ZpbGVfbmFtZSgkcGF0aCk7Cj4gPiArICAgIHJldHVybiB1bmRlZiBpZiAhZGVm
aW5lZCgkZmlsZV9uYW1lKTsKPiA+ICsKPiA+ICsgICAgbXkgKCRwcmVmaXgsICRzdWZmaXhfc3Ry
KSA9IF9wYXRoX2ZpbGVfcHJlZml4X3N1ZmZpeF9zdHIoJGZpbGVfbmFtZSk7Cj4gPiArICAgIHJl
dHVybiAkcHJlZml4Owo+ID4gK30KPiA+ICsKPiA+ICs9aGVhZDMgcGF0aF93aXRoX2ZpbGVfcHJl
Zml4KCRwYXRoLCAkcHJlZml4KQo+ID4gKwo+Cj4gSG1tLCBsb29raW5nIGF0IHRoaXMgYW5kIHBh
dGhfd2l0aF9maWxlX3N1ZmZpeHssZXN9KCksIHdvdWxkIGl0IG1heWJlIGJlCj4gbmljZXIgdG8g
aGF2ZSBhIHNpbmdsZQo+IHBhdGhfd2l0aF9maWxlX25hbWVfZnJvbV9wYXJ0cygkcGF0aCwgJHBy
ZWZpeCwgQHN1ZmZpeGVzKQo+IGZ1bmN0aW9uIGluc3RlYWQgb2YgdGhlc2U/IFdvdWxkIHNlZW0g
bW9yZSBuYXR1cmFsL3N0cmFpZ2h0Zm9yd2FyZCB0bwo+IG1lLiBUaGUgaW1wbGVtZW50YXRpb25z
IGFyZSByYXRoZXIgaW52b2x2ZWQgSU1ITyBjb21wYXJlZCB0byBob3cgdXNlZnVsCj4gdGhlIGZ1
bmN0aW9ucyBhcmUuIEl0J3MgdmVyeSBlYXN5IHRvIGdldCB0aGUgYmVoYXZpb3IgZm9yIHRoZSAo
SSBzdXNwZWN0Cj4gcmF0aGVyIHVuY29tbW9uKSBjYXNlIG9mIHdoZXJlIHlvdSB3YW50IHRvIHJl
cGxhY2Ugb25seSBwcmVmaXggb3IKPiBzdWZmaXgoZXMpIHdpdGhvdXQgYWxyZWFkeSBrbm93aW5n
IHRoZSBvdGhlci4gSnVzdCBuZWVkIHRvIGNhbGwKPiBwYXRoX2ZpbGVfcGFydHMoKSBmaXJzdC4g
T3IgZGlkIHlvdSB0YWtlIGluc3BpcmF0aW9uIGZyb20gc29tZXdoZXJlIGVsc2UKPiBmb3IgdGhl
c2U/CgpJJ2xsIGhhdmUgdG8gZGlzYWdyZWUgaGVyZSBwcmVjaXNlbHkgYmVjYXVzZSBoYXZpbmcg
dG8gY2FsbApwYXRoX2ZpbGVfcGFydHMoKSBmaXJzdCBpcyBJTU8gdGVkaW91cyBmcm9tIHRoZSBj
YWxsZXIncyBwZXJzcGVjdGl2ZS4gSW4KbWFueSBjYXNlcyBJIHJhcmVseSBjYXJlIGFib3V0IGFs
bCBvZiB0aGUgaW5kaXZpZHVhbCBwYXJ0czsgaW5zdGVhZCBJCmp1c3QgZS5nLiB3YW50IHRvIHJl
bmFtZSBhIGZpbGUgd2hpbGUga2VlcGluZyB0aGUgc3VmZml4KGVzKSwgb3IgSSB3YW50IHRvCnRy
aW0gb2ZmIHRoZSBsYXN0IHN1ZmZpeCBvZiBzb21ldGhpbmcgbGlrZSAiYXJjaGl2ZS50YXIuZ3oi
IGJlY2F1c2UgSSdtCmRlY29tcHJlc3NpbmcgaXQgdG8gImFyY2hpdmUudGFyIiBvciBzaW1pbGFy
LgoKSW4gb3RoZXIgd29yZHMsIGluIGEgbG90IG9mIGNhc2VzIEkganVzdCB3YW50IHRvIHBlcmZv
cm0gb25lIGluZGl2aWR1YWwKb3BlcmF0aW9uLCBhbmQgdGhlIHBhdGhfZmlsZV8qIGFuZCBwYXRo
X3dpdGhfZmlsZV8qIGZ1bmN0aW9ucyByZXByZXNlbnQKYWxsIHRob3NlIGluZGl2aWR1YWwgb3Bl
cmF0aW9ucyBhcyBjb25jaXNlbHkgYXMgcG9zc2libGUuIFRoZSBidXJkZW4gb2YKImZpZ3VyaW5n
IG91dCB3aGF0IHRvIGRvIiBzaG91bGRuJ3QgYmUgZ2l2ZW4gdG8gdGhlIGNhbGxlciBpbiBzdWNo
CmNhc2VzLgoKUmVnYXJkaW5nIGluc3BpcmF0aW9uOiBUaGVzZSBmdW5jdGlvbnMgd2VyZSBpbnNw
aXJlZCBhZnRlciBoYXZpbmcgcmVhZCBhCnJlbGF0ZWQgUnVzdCBHaXRIdWIgaXNzdWUgW2lzc3Vl
XSB3aGVyZSBhIGxvdCBvZiB0aGlzIHdhcyBkaXNjdXNzZWQgYXMKd2VsbC4KClRoYXQgaXNzdWUg
YWxzbyBzdWdnZXN0cyBoYXZpbmcgc29tZSBraW5kIG9mIGl0ZXJhdG9yIGZvciBmaWxlIHBhcnRz
LAp0aGF0IG90aGVyIG1ldGhvZHMgb2Ygc3RkOjpwYXRoOjpQYXRoIGNhbiBiZSBiYXNlZCBvbjsg
dGhpcyBpcyBhY3R1YWxseQp3aGF0IGxlZCBtZSB0byBhZGRpbmcgcGF0aF9maWxlX3BhcnRzKCkg
YmVsb3cuIFlvdSBoYXZlIGFjY2VzcyB0byB0aGUKaW5kaXZpZHVhbCBwYXJ0cyB0aGVyZSBhbmQg
Y2FuIGp1c3Qgam9pbigpIHRoZW0gdG8gdGhlIGZpbGUgbmFtZS4gVGhhdAp3b3VsZCBiZSB2ZXJ5
IHNpbWlsYXIgdG8gdGhlIHBhdGhfd2l0aF9maWxlX25hbWVfZnJvbV9wYXJ0cygpIGZ1bmN0aW9u
CnlvdSBzdWdnZXN0ZWQuIDpQCgpbaXNzdWVdOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5n
L3J1c3QvaXNzdWVzLzg2MzE5Cgo+Cj4gLS0tc25pcCA4PC0tLQo+Cj4gPiArPWhlYWQzIHBhdGhf
ZmlsZV9wYXJ0cygkcGF0aCkKPiA+ICsKPiA+ICtSZXR1cm5zIHRoZSBwYXJ0cyB0aGF0IGNvbnN0
aXR1dGUgdGhlIGZpbGUgbmFtZSAocHJlZml4IGFuZCBzdWZmaXhlcykgb2YgYQo+ID4gK0M8JHBh
dGg+IGFzIGEgbGlzdC4gSWYgdGhlIEM8JHBhdGg+IGRvZXMgbm90IGhhdmUgYSB2YWxpZCBmaWxl
IG5hbWUsIGFuIGVtcHR5Cj4gPiArbGlzdCBpcyByZXR1cm5lZCBpbnN0ZWFkLgo+ID4gKwo+ID4g
K1RoZXNlIHBhcnRzIGFyZSBzcGxpdCBpbiBzdWNoIGEgd2F5IHRoYXQgYWxsb3dzIHRoZW0gdG8g
YmUgQzxqb2luPmVkIHRvZ2V0aGVyLAo+ID4gK3Jlc3VsdGluZyBpbiB0aGUgb3JpZ2luYWwgZmls
ZSBuYW1lIG9mIHRoZSBnaXZlbiBDPCRwYXRoPiBhZ2Fpbi4KPiA+ICsKPiA+ICsgICAgbXkgQGZp
bGVfcGFydHMgPSBwYXRoX2ZpbGVfcGFydHMoIi9ldGMvcHZlL2ZpcmV3YWxsL2NsdXN0ZXIuZnci
KTsKPiA+ICsgICAgIyAoImNsdXN0ZXIiLCAiZnciKQo+ID4gKyAgICBteSAkZmlsZV9uYW1lID0g
am9pbigiLiIsIEBmaWxlX3BhcnRzKTsKPiA+ICsKPiA+ICsgICAgbXkgQGZpbGVfcGFydHMgPSBw
YXRoX2ZpbGVfcGFydHMoIi90bXAvYXJjaGl2ZS50YXIuZ3oiKTsKPiA+ICsgICAgIyAoImFyY2hp
dmUiLCAidGFyIiwgImd6IikKPiA+ICsgICAgbXkgJGZpbGVfbmFtZSA9IGpvaW4oIi4iLCBAZmls
ZV9wYXJ0cyk7Cj4gPiArCj4gPiArVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiBDPCRwYXRoPiBpcyBD
PHVuZGVmPi4KPiA+ICsKPgo+IFNob3VsZCBtZW50aW9uIGhvdyBkb3QgZmlsZXMgYXJlIHRyZWF0
ZWQuCgpTdXJlIHRoaW5nIQoKPgo+ID4gKz1jdXQKPiA+ICsKPiA+ICtzdWIgcGF0aF9maWxlX3Bh
cnRzIDogcHJvdG90eXBlKCQpIHsKPiA+ICsgICAgbXkgKCRwYXRoKSA9IEBfOwo+ID4gKwo+ID4g
KyAgICBjcm9hayAiXCRwYXRoIGlzIHVuZGVmIiBpZiAhZGVmaW5lZCgkcGF0aCk7Cj4gPiArCj4g
PiArICAgIG15ICRmaWxlX25hbWUgPSBwYXRoX2ZpbGVfbmFtZSgkcGF0aCk7Cj4gPiArICAgIGlm
ICghZGVmaW5lZCgkZmlsZV9uYW1lKSkgewo+ID4gKwlyZXR1cm4gKCk7Cj4gPiArICAgIH0KPiA+
ICsKPiA+ICsgICAgbXkgKCRwcmVmaXgsICRzdWZmaXhfc3RyKSA9IF9wYXRoX2ZpbGVfcHJlZml4
X3N1ZmZpeF9zdHIoJGZpbGVfbmFtZSk7Cj4gPiArICAgIG15IEBzdWZmaXhlcyA9IF9wYXRoX2Zp
bGVfc3VmZml4ZXNfZnJvbV9zdHIoJHN1ZmZpeF9zdHIpOwo+ID4gKwo+ID4gKyAgICByZXR1cm4g
KCRwcmVmaXgsIEBzdWZmaXhlcyk7Cj4gPiArfQo+ID4gKwo+ID4gKz1oZWFkMyBwYXRoX3N0YXJ0
c193aXRoKCRwYXRoLCAkb3RoZXJfcGF0aCkKPiA+ICsKPiA+ICtDaGVja3Mgd2hldGhlciBhIEM8
JHBhdGg+IHN0YXJ0cyB3aXRoIHRoZSBjb21wb25lbnRzIG9mIEM8JG90aGVyX3BhdGg+Lgo+ID4g
Kwo+ID4gKyAgICBteSAkc3RhcnRzX3dpdGggPSBwYXRoX3N0YXJ0c193aXRoKCIvZXRjL3B2ZS9m
aXJld2FsbC9jbHVzdGVyLmZ3IiwgIi9ldGMvcHZlIik7Cj4gPiArICAgICMgMQo+ID4gKwo+ID4g
K1Rocm93cyBhbiBleGNlcHRpb24gaWYgYW55IG9mIHRoZSBhcmd1bWVudHMgaXMgQzx1bmRlZj4u
Cj4gPiArCj4KPiBTaG91bGQgZG9jdW1lbnQgdGhlIGJlaGF2aW9yIGZvciBlbXB0eSBwYXRocyBh
cyB3ZWxsIGFzIHRoZSBub3JtYWxpemF0aW9uLgoKQUNLLCB3aWxsIGFkZCB0aGF0IQoKPgo+ID4g
Kz1jdXQKPiA+ICsKPiA+ICtzdWIgcGF0aF9zdGFydHNfd2l0aCA6IHByb3RvdHlwZSgkJCkgewo+
ID4gKyAgICBteSAoJHBhdGgsICRvdGhlcl9wYXRoKSA9IEBfOwo+ID4gKwo+ID4gKyAgICBjcm9h
ayAiXCRwYXRoIGlzIHVuZGVmIiBpZiAhZGVmaW5lZCgkcGF0aCk7Cj4gPiArICAgIGNyb2FrICJc
JG90aGVyX3BhdGggaWYgdW5kZWYiIGlmICFkZWZpbmVkKCRvdGhlcl9wYXRoKTsKPiA+ICsKPiA+
ICsgICAgIyBOb3RoaW5nIHN0YXJ0cyB3aXRoIG5vdGhpbmcKPiA+ICsgICAgcmV0dXJuIDEgaWYg
KCRwYXRoIGVxICcnICYmICRvdGhlcl9wYXRoIGVxICcnKTsKPiA+ICsKPiA+ICsgICAgIyBOb3Ro
aW5nIGNhbm5vdCBzdGFydCB3aXRoIHNvbWV0aGluZwo+ID4gKyAgICAjIFNvbWV0aGluZyBjYW5u
b3Qgc3RhcnQgd2l0aCBub3RoaW5nCj4gPiArICAgIHJldHVybiBpZiAoJHBhdGggZXEgJycgfHwg
JG90aGVyX3BhdGggZXEgJycpOwo+ID4gKwo+ID4gKyAgICBteSBAY29tcG9uZW50cyA9IHBhdGhf
Y29tcG9uZW50cygkcGF0aCk7Cj4gPiArICAgIG15IEBvdGhlcl9jb21wb25lbnRzID0gcGF0aF9j
b21wb25lbnRzKCRvdGhlcl9wYXRoKTsKPiA+ICsKPiA+ICsgICAgbXkgQHBhaXJzID0gemlwX3No
b3J0ZXN0KFxAY29tcG9uZW50cywgXEBvdGhlcl9jb21wb25lbnRzKTsKPgo+IFdoeSBub3QganVz
dCBzaGlmdCBvZmYgZnJvbSBib3RoIGluIGEgbG9vcD8KPgoKU3VyZSwgdGhhdCdzIG9mIGNvdXJz
ZSBhbHNvIHBvc3NpYmxlOyBJIGp1c3QgZm91bmQgemlwX3Nob3J0ZXN0IG1vcmUKZXhwcmVzc2l2
ZS4KCj4gPiArCj4gPiArICAgICMgZm9yIG15ICgkY29tcCwgJG90aGVyX2NvbXApIChAcGFpcnMp
IGlzIGV4cGVyaW1lbnRhbAo+ID4gKyAgICBmb3IgbXkgJHBhaXIgKEBwYWlycykgewo+ID4gKwlt
eSAoJGNvbXAsICRvdGhlcl9jb21wKSA9ICRwYWlyLT5AKjsKPiA+ICsKPiA+ICsJaWYgKCRjb21w
IG5lICRvdGhlcl9jb21wKSB7Cj4gPiArCSAgICByZXR1cm47Cj4gPiArCX0KPiA+ICsgICAgfQo+
ID4gKwo+ID4gKyAgICByZXR1cm4gMTsKPiA+ICt9Cj4gPiArCj4gPiArPWhlYWQzIHBhdGhfZW5k
c193aXRoKCRwYXRoLCAkb3RoZXJfcGF0aCkKPiA+ICsKPiA+ICtDaGVja3Mgd2hldGhlciBhIEM8
JHBhdGg+IGVuZHMgd2l0aCB0aGUgY29tcG9uZW50cyBvZiBDPCRvdGhlcl9wYXRoPi4KPiA+ICsK
PiA+ICsgICAgbXkgJGVuZHNfd2l0aCA9IHBhdGhfZW5kc193aXRoKCIvZXRjL3B2ZS9maXJld2Fs
bC9jbHVzdGVyLmZ3IiwgImZpcmV3YWxsL2NsdXN0ZXIuZnciKTsKPiA+ICsgICAgIyAxCj4gPiAr
Cj4gPiArVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiBhbnkgb2YgdGhlIGFyZ3VtZW50cyBpcyBDPHVu
ZGVmPi4KPiA+ICsKPgo+IFNob3VsZCBkb2N1bWVudCB0aGUgYmVoYXZpb3IgZm9yIGVtcHR5IHBh
dGhzIGFzIHdlbGwgYXMgdGhlIG5vcm1hbGl6YXRpb24uCj4KClNhbWUgYXMgYWJvdmU7IHdpbGwg
ZG8gdGhhdC4KCj4gPiArPWN1dAo+ID4gKwo+ID4gK3N1YiBwYXRoX2VuZHNfd2l0aCA6IHByb3Rv
dHlwZSgkJCkgewo+ID4gKyAgICBteSAoJHBhdGgsICRvdGhlcl9wYXRoKSA9IEBfOwo+ID4gKwo+
ID4gKyAgICBjcm9hayAiXCRwYXRoIGlzIHVuZGVmIiBpZiAhZGVmaW5lZCgkcGF0aCk7Cj4gPiAr
ICAgIGNyb2FrICJcJG90aGVyX3BhdGggaWYgdW5kZWYiIGlmICFkZWZpbmVkKCRvdGhlcl9wYXRo
KTsKPiA+ICsKPiA+ICsgICAgIyBOb3RoaW5nIGVuZHMgd2l0aCBub3RoaW5nCj4gPiArICAgIHJl
dHVybiAxIGlmICgkcGF0aCBlcSAnJyAmJiAkb3RoZXJfcGF0aCBlcSAnJyk7Cj4gPiArCj4gPiAr
ICAgICMgTm90aGluZyBjYW5ub3QgZW5kIHdpdGggc29tZXRoaW5nCj4gPiArICAgICMgU29tZXRo
aW5nIGNhbm5vdCBlbmQgd2l0aCBub3RoaW5nCj4gPiArICAgIHJldHVybiBpZiAoJHBhdGggZXEg
JycgfHwgJG90aGVyX3BhdGggZXEgJycpOwo+ID4gKwo+ID4gKyAgICBteSBAY29tcG9uZW50c19y
ZXYgPSByZXZlcnNlKHBhdGhfY29tcG9uZW50cygkcGF0aCkpOwo+ID4gKyAgICBteSBAb3RoZXJf
Y29tcG9uZW50c19yZXYgPSByZXZlcnNlKHBhdGhfY29tcG9uZW50cygkb3RoZXJfcGF0aCkpOwo+
ID4gKwo+ID4gKyAgICBteSBAcGFpcnNfcmV2ID0gemlwX3Nob3J0ZXN0KFxAY29tcG9uZW50c19y
ZXYsIFxAb3RoZXJfY29tcG9uZW50c19yZXYpOwo+Cj4gV2h5IG5vdCBqdXN0IHNoaWZ0IG9mZiBm
cm9tIGJvdGggaW4gYSBsb29wPwo+CgpTYW1lIGFzIGFib3ZlOyBqdXN0IGZvdW5kIHppcF9zaG9y
dGVzdCBtb3JlIGV4cHJlc3NpdmUuCgo+ID4gKwo+ID4gKyAgICAjIGZvciBteSAoJGNvbXAsICRv
dGhlcl9jb21wKSAoQHBhaXJzX3JldikgaXMgZXhwZXJpbWVudGFsCj4gPiArICAgIGZvciBteSAk
cGFpciAoQHBhaXJzX3Jldikgewo+ID4gKwlteSAoJGNvbXAsICRvdGhlcl9jb21wKSA9ICRwYWly
LT5AKjsKPiA+ICsKPiA+ICsJaWYgKCRjb21wIG5lICRvdGhlcl9jb21wKSB7Cj4gPiArCSAgICBy
ZXR1cm47Cj4gPiArCX0KPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICByZXR1cm4gMTsKPiA+ICt9
Cj4gPiArCj4gPiArPWhlYWQzIHBhdGhfZXF1YWxzKCRwYXRoLCAkb3RoZXJfcGF0aCkKPiA+ICsK
PiA+ICtDaGVja3Mgd2hldGhlciBDPCRwYXRoPiBlcXVhbHMgQzwkb3RoZXJfcGF0aD4uIFRoZSBw
YXRocyBhcmUgY29tcGFyZWQKPiA+ICtieSB0aGVpciBjb21wb25lbnRzLCBtZWFuaW5nIHRoYXQg
aXQncyBub3QgbmVjZXNzYXJ5IHRvCj4gPiArTDw8IG5vcm1hbGl6ZXwvInBhdGhfbm9ybWFsaXpl
KCRwYXRoKSIgPj4gdGhlbSBiZWZvcmVoYW5kLgo+ID4gKwo+ID4gKz1jdXQKPiA+ICsKPiA+ICtz
dWIgcGF0aF9lcXVhbHMgOiBwcm90b3R5cGUoJCQpIHsKPiA+ICsgICAgbXkgKCRwYXRoLCAkb3Ro
ZXJfcGF0aCkgPSBAXzsKPiA+ICsKPiA+ICsgICAgY3JvYWsgIlwkcGF0aCBpcyB1bmRlZiIgaWYg
IWRlZmluZWQoJHBhdGgpOwo+ID4gKyAgICBjcm9hayAiXCRvdGhlcl9wYXRoIGlmIHVuZGVmIiBp
ZiAhZGVmaW5lZCgkb3RoZXJfcGF0aCk7Cj4gPiArCj4gPiArICAgICMgTm90aGluZyBpcyBub3Ro
aW5nCj4gPiArICAgIHJldHVybiAxIGlmICgkcGF0aCBlcSAnJyAmJiAkb3RoZXJfcGF0aCBlcSAn
Jyk7Cj4gPiArCj4gPiArICAgICMgTm90aGluZyBpcyBub3Qgc29tZXRoaW5nCj4gPiArICAgICMg
U29tZXRoaW5nIGlzIG5vdCBub3RoaW5nCj4gPiArICAgIHJldHVybiBpZiAoJHBhdGggZXEgJycg
fHwgJG90aGVyX3BhdGggZXEgJycpOwo+ID4gKwo+ID4gKyAgICBteSBAY29tcG9uZW50cyA9IHBh
dGhfY29tcG9uZW50cygkcGF0aCk7Cj4gPiArICAgIG15IEBvdGhlcl9jb21wb25lbnRzID0gcGF0
aF9jb21wb25lbnRzKCRvdGhlcl9wYXRoKTsKPiA+ICsKPiA+ICsgICAgcmV0dXJuIGlmIHNjYWxh
cihAY29tcG9uZW50cykgIT0gc2NhbGFyKEBvdGhlcl9jb21wb25lbnRzKTsKPiA+ICsKPiA+ICsg
ICAgbXkgQHBhaXJzID0gemlwX2xvbmdlc3QoXEBjb21wb25lbnRzLCBcQG90aGVyX2NvbXBvbmVu
dHMpOwo+Cj4gV2h5IG5vdCBqdXN0IHNoaWZ0IG9mZiBmcm9tIGJvdGggaW4gYSBsb29wPwo+CgpT
aW1pbGFyIHRvIGFib3ZlLCBJIGp1c3QgZm91bmQgemlwX2xvbmdlc3QgbW9yZSBleHByZXNzaXZl
LgoKPiA+ICsKPiA+ICsgICAgIyBmb3IgbXkgKCRjb21wLCAkb3RoZXJfY29tcCkgKEBwYWlyc19y
ZXYpIGlzIGV4cGVyaW1lbnRhbAo+ID4gKyAgICBmb3IgbXkgJHBhaXIgKEBwYWlycykgewo+ID4g
KwlteSAoJGNvbXAsICRvdGhlcl9jb21wKSA9ICRwYWlyLT5AKjsKPiA+ICsKPiA+ICsJcmV0dXJu
IGlmICFkZWZpbmVkKCRjb21wKSB8fCAhZGVmaW5lZCgkb3RoZXJfY29tcCk7Cj4gPiArCj4gPiAr
CWlmICgkY29tcCBuZSAkb3RoZXJfY29tcCkgewo+ID4gKwkgICAgcmV0dXJuOwo+ID4gKwl9Cj4g
PiArICAgIH0KPiA+ICsKPiA+ICsgICAgcmV0dXJuIDE7Cj4gPiArfQo+ID4gKwo+ID4gKzE7CgoK
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCnB2ZS1kZXZl
bCBtYWlsaW5nIGxpc3QKcHZlLWRldmVsQGxpc3RzLnByb3htb3guY29tCmh0dHBzOi8vbGlzdHMu
cHJveG1veC5jb20vY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3B2ZS1kZXZlbAo=