Boost logo

Boost-Build :

From: Rene Rivera (grafik.list_at_[hidden])
Date: 2004-11-17 03:40:49


c_andy_martin wrote:

> --- In jamboost_at_[hidden], Rene Rivera <grafik.list_at_r...> wrote:
>
>>May I suggest Andy try with the BBv1 in the 1.32 tarballs.
>
> Sorry, I should have mentioned earlier, but I have been using the 1.32

After a long investigation, and much hair pulling, I found the "problem"
and hacked a solution.

The problem is a basic issue with the SEARCH capability of Jam. Simply
put it makes no distinction between files and directories. Which means
that it will match a directory to a header without question.
Unfortunately this is something that is not easy to fix in Jam itself.

Attached is a fix which does the search for headers "manually", and
hence can check and ignore directory matches. (replace the files from 1.32)

My brain is a few minutes from shutting down, it's 2.30am for me :-( If
anyone wants to take it upon themselves to merge this into the RC_1_32_0
branch, be my guest ;-)

Goodnight... Enjoy.

PS. If BBv2 uses SEARCH for header scanning it likely has the same issue.

-- 
-- Grafik - Don't Assume Anything
-- Redshift Software, Inc. - http://redshift-software.com
-- rrivera/acm.org - grafik/redshift-software.com - 102708583/icq
 --------------070906060407020908080708 Content-Type: text/plain;
name="allyourbase.jam"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
filename="allyourbase.jam"
Iw0KIyAvK1wNCiMgK1wgICAgQ29weXJpZ2h0IDE5OTMsIDIwMDAgQ2hyaXN0b3BoZXIgU2Vp
d2FsZC4NCiMgXCsvDQojDQojIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEphbSAtIHNlZSBqYW0u
YyBmb3IgQ29weXJpZ2h0IGluZm9ybWF0aW9uLg0KIw0KDQojIFRoaXMgZmlsZSBpcyBBTFNP
Og0KIyAoQykgQ29weXJpZ2h0IERhdmlkIEFicmFoYW1zIDIwMDEuDQojIERpc3RyaWJ1dGVk
IHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4NCiMgKFNl
ZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgaHR0cDovL3d3dy5ib29z
dC5vcmcvTElDRU5TRV8xXzAudHh0KQ0KDQojDQojIEpBTUJBU0UgLSBqYW0gMi4zIHJ1bGVz
ZXQgcHJvdmlkaW5nIG1ha2UoMSktbGlrZSBmdW5jdGlvbmFsaXR5DQojDQojIFN1cHBvcnRz
IFVOSVgsIE5ULCBhbmQgVk1TLg0KIw0KIyAxMi8yNy85MyAoc2Vpd2FsZCkgLSBwdXJ0dXJi
IGxpYnJhcnkgc291cmNlcyB3aXRoIFNPVVJDRV9HUklTVA0KIyAwNC8xOC85NCAoc2Vpd2Fs
ZCkgLSB1c2UgJz89JyB3aGVuIHNldHRpbmcgT1Mgc3BlY2lmaWMgdmFycw0KIyAwNC8yMS85
NCAoc2Vpd2FsZCkgLSBkbyBSbVRlbXBzIHRvZ2V0aGVyDQojIDA1LzA1Lzk0IChzZWl3YWxk
KSAtIGFsbCBzdXBwb3J0ZWQgQyBjb21waWxlcnMgc3VwcG9ydCAtbzogcmVsZWdhdGUNCiMg
ICAgICAgICAgICAgICAgICAgICAgUkVMT0NBVEUgYXMgYW4gb3B0aW9uOyBzZXQgUmFubGli
IHRvICIiIHRvIGRpc2FibGUgaXQNCiMgMDYvMDEvOTQgKHNlaXdhbGQpIC0gbmV3ICdhY3Rp
b25zIGV4aXN0aW5nJyB0byBkbyBleGlzdGluZyBzb3VyY2VzDQojIDA4LzI1Lzk0IChzZWl3
YWxkKSAtIG5ldyBPYmplY3RDY0ZsYWdzIHJ1bGUgdG8gYXBwZW5kIHRvIHBlci10YXJnZXQg
Q0NGTEFHUw0KIyAwOC8yOS85NCAoc2Vpd2FsZCkgLSBuZXcgT2JqZWN0SGRycyBydWxlIHRv
IGFwcGVuZCB0byBwZXItdGFyZ2V0IEhEUlMNCiMgMDkvMTkvOTQgKHNlaXdhbGQpIC0gTGlu
a0xpYnJhcmllcyBhbmQgVW5kZWZzIG5vdyBhcHBlbmQNCiMgICAgICAgICAgICAgICAgICAg
IC0gUnVsZSBuYW1lcyBkb3duc2hpZnRlZC4NCiMgMTAvMDYvOTQgKHNlaXdhbGQpIC0gRHVt
YiB5eWFjYyBzdHVmZiBtb3ZlZCBpbnRvIEphbWZpbGUuDQojIDEwLzE0Lzk0IChzZWl3YWxk
KSAtIChDcnVkZSkgc3VwcG9ydCBmb3IgLnMsIC5DLCAuY2MsIC5jcHAsIGFuZCAuZiBmaWxl
cy4NCiMgMDEvMDgvOTUgKHNlaXdhbGQpIC0gU2hlbGwgbm93IGhhbmRsZWQgd2l0aCBhd2ss
IG5vdCBzZWQNCiMgMDEvMDkvOTUgKHNlaXdhbGQpIC0gSW5zdGFsbCogbm93IHRha2UgZGVz
dCBkaXJlY3RvcnkgYXMgdGFyZ2V0DQojIDAxLzEwLzk1IChzZWl3YWxkKSAtIEFsbCBlbnRy
aWVzIHNvcnRlZC4NCiMgMDEvMTAvOTUgKHNlaXdhbGQpIC0gTlQgc3VwcG9ydCBtb3ZlZCBp
biwgd2l0aCBMYXVyYVcncyBoZWxwLiAgDQojIDAxLzEwLzk1IChzZWl3YWxkKSAtIFZNUyBz
dXBwb3J0IG1vdmVkIGluLg0KIyAwMi8wNi85NSAoc2Vpd2FsZCkgLSBPYmplY3RDKytGbGFn
cyBhbmQgU3ViRGlyQysrRmxhZ3MgYWRkZWQuDQojIDAyLzA3Lzk1IChzZWl3YWxkKSAtIEly
b24gb3V0IHdoZW4gSERSU0VBUkNIIHVzZXMgIiIgb3IgU0VBUkNIX1NPVVJDRS4NCiMgMDIv
MDgvOTUgKHNlaXdhbGQpIC0gU3ViRGlyIHdvcmtzIG9uIFZNUy4NCiMgMDIvMTQvOTUgKHNl
aXdhbGQpIC0gTWtEaXIgYW5kIGVudG91cmFnZS4NCiMgMDQvMzAvOTUgKHNlaXdhbGQpIC0g
VXNlIGluc3RhbGwgLWMgZmxhZyBzbyB0aGF0IGl0IGNvcGllcywgbm90IG1vdmVzLg0KIyAw
Ny8xMC85NSAodGF5bG9yKSAtIFN1cHBvcnQgZm9yIE1pY3Jvc29mdCBDKysuDQojIDExLzIx
Lzk2IChwZXRlcmspIC0gU3VwcG9ydCBmb3IgQmVPUw0KIyAwNy8xOS85OSAoc2lja2VsKSAt
IFN1cHBvcnQgZm9yIE1hYyBPUyBYIFNlcnZlciAoYW5kIG1heWJlIGNsaWVudCkNCiMgMDIv
MTgvMDAgKGJlbG1vbnRlKS0gU3VwcG9ydCBmb3IgQ3lnd2luLg0KDQojIFNwZWNpYWwgdGFy
Z2V0cyBkZWZpbmVkIGluIHRoaXMgZmlsZToNCiMNCiMgYWxsICAgICAgICAgICAtIHBhcmVu
dCBvZiBmaXJzdCwgc2hlbGwsIGZpbGVzLCBsaWIsIGV4ZQ0KIyBmaXJzdCAgICAgICAgIC0g
Zmlyc3QgZGVwZW5kZW50IG9mICdhbGwnLCBmb3IgcG90ZW50aWFsIGluaXRpYWxpemF0aW9u
DQojIHNoZWxsICAgICAgICAgLSBwYXJlbnQgb2YgYWxsIFNoZWxsIHRhcmdldHMgDQojIGZp
bGVzICAgICAgICAgLSBwYXJlbnQgb2YgYWxsIEZpbGUgdGFyZ2V0cw0KIyBsaWIgICAgICAg
ICAgIC0gcGFyZW50IG9mIGFsbCBMaWJyYXJ5IHRhcmdldHMNCiMgZXhlICAgICAgICAgICAt
IHBhcmVudCBvZiBhbGwgTWFpbiB0YXJnZXRzDQojIGRpcnMgICAgICAgICAgLSBwYXJlbnQg
b2YgYWxsIE1rRGlyIHRhcmdldHMNCiMgY2xlYW4gICAgICAgICAtIHJlbW92ZXMgYWxsIFNo
ZWxsLCBGaWxlLCBMaWJyYXJ5LCBhbmQgTWFpbiB0YXJnZXRzDQojIHVuaW5zdGFsbCAgICAg
LSByZW1vdmVzIGFsbCBJbnN0YWxsIHRhcmdldHMNCiMgICAgICAgDQoNCiMgUnVsZXMgZGVm
aW5lZCBieSB0aGlzIGZpbGU6DQojDQojIGFzIG9iai5vIDogc291cmNlLnMgOyAgICAgICAg
ICAgICAgICAgLnMgLT4gLm8NCiMgQnVsayBkaXIgOiBmaWxlcyA7ICAgICAgICAgICAgICAg
ICAgICBwb3B1bGF0ZSBkaXJlY3Rvcnkgd2l0aCBtYW55IGZpbGVzDQojIENjIG9iai5vIDog
c291cmNlLmMgOyAgICAgICAgICAgICAgICAgLmMgLT4gLm8NCiMgQysrIG9iai5vIDogc291
cmNlLmNjIDsgICAgICAgICAgICAgICAuY2MgLT4gLm8NCiMgQ2xlYW4gY2xlYW4gOiBzb3Vy
Y2VzIDsgICAgICAgICAgICAgICByZW1vdmUgc291cmNlcyB3aXRoICdqYW0gY2xlYW4nDQoj
IEZpbGUgZGVzdCA6IHNvdXJjZSA7ICAgICAgICAgICAgICAgICAgY29weSBmaWxlDQojIEZv
cnRyYW4gb2JqLm8gOiBzb3VyY2UuZiA7ICAgICAgICAgICAgLmYgLT4gLm8NCiMgR2VuRmls
ZSBzb3VyY2UuYyA6IHByb2dyYW0gYXJncyA7ICAgICBtYWtlIGN1c3RvbSBmaWxlDQojIEhh
cmRsaW5rIHRhcmdldCA6IHNvdXJjZSA7ICAgICAgICAgICAgbWFrZSBsaW5rIGZyb20gc291
cmNlIHRvIHRhcmdldA0KIyBIZHJSdWxlIHNvdXJjZSA6IGhlYWRlcnMgOyAgICAgICAgICAg
IGhhbmRsZSAjaW5jbHVkZXMNCiMgSW5zdGFsbEludG8gZGlyIDogc291cmNlcyA7ICAgICAg
ICAgICBpbnN0YWxsIGFueSBmaWxlcw0KIyBJbnN0YWxsQmluIGRpciA6IHNvdXJjZXMgOyAg
ICAgICAgICAgIGluc3RhbGwgYmluYXJpZXMNCiMgSW5zdGFsbExpYiBkaXIgOiBzb3VyY2Vz
IDsgICAgICAgICAgICBpbnN0YWxsIGZpbGVzDQojIEluc3RhbGxGaWxlIGRpciA6IHNvdXJj
ZXMgOyAgICAgICAgICAgaW5zdGFsbCBmaWxlcw0KIyBJbnN0YWxsTWFuIGRpciA6IHNvdXJj
ZXMgOyAgICAgICAgICAgIGluc3RhbGwgbWFuIHBhZ2VzDQojIEluc3RhbGxTaGVsbCBkaXIg
OiBzb3VyY2VzIDsgICAgICAgICAgaW5zdGFsbCBzaGVsbCBzY3JpcHRzDQojIExleCBzb3Vy
Y2UuYyA6IHNvdXJjZS5sIDsgICAgICAgICAgICAgLmwgLT4gLmMNCiMgTGlicmFyeSBsaWIg
OiBzb3VyY2UgOyAgICAgICAgICAgICAgICBhcmNoaXZlIGxpYnJhcnkgZnJvbSBjb21waWxl
ZCBzb3VyY2VzDQojIExpYnJhcnlGcm9tT2JqZWN0cyBsaWIgOiBvYmplY3RzIDsgICAgYXJj
aGl2ZSBsaWJyYXJ5IGZyb20gb2JqZWN0cw0KIyBMaW5rTGlicmFyaWVzIGltYWdlcyA6IGxp
YnJhcmllcyA7ICAgIGJhZyBsaWJyYXJpZXMgb250byBNYWlucw0KIyBNYWluIGltYWdlIDog
c291cmNlIDsgICAgICAgICAgICAgICAgIGxpbmsgZXhlY3V0YWJsZSBmcm9tIGNvbXBpbGVk
IHNvdXJjZXMNCiMgTWFpbkZyb21PYmplY3RzIGltYWdlIDogb2JqZWN0cyA7ICAgICBsaW5r
IGV4ZWN1dGFibGUgZnJvbSBvYmplY3RzDQojIE1rRGlyIGRpciA7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbWFrZSBhIGRpcmVjdG9yeSwgaWYgbm90IHRoZXJlDQojIE9iamVjdCBv
YmplY3QgOiBzb3VyY2UgOyAgICAgICAgICAgICAgY29tcGlsZSBvYmplY3QgZnJvbSBzb3Vy
Y2UNCiMgT2JqZWN0Q2NGbGFncyBzb3VyY2UgOiBmbGFncyA7ICAgICAgICBhZGQgY29tcGls
ZXIgZmxhZ3MgZm9yIG9iamVjdA0KIyBPYmplY3RDKytGbGFncyBzb3VyY2UgOiBmbGFncyA7
ICAgICAgIGFkZCBjb21waWxlciBmbGFncyBmb3Igb2JqZWN0DQojIE9iamVjdEhkcnMgc291
cmNlIDogZGlycyA7ICAgICAgICAgICAgYWRkIGluY2x1ZGUgZGlyZWN0b3JpZXMgZm9yIG9i
amVjdA0KIyBPYmplY3RzIHNvdXJjZXMgOyAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGUg
c291cmNlcw0KIyBSbVRlbXBzIHRhcmdldCA6IHNvdXJjZXMgOyAgICAgICAgICAgIHJlbW92
ZSB0ZW1wIHNvdXJjZXMgYWZ0ZXIgdGFyZ2V0IG1hZGUNCiMgU2V0dWlkIGltYWdlcyA7ICAg
ICAgICAgICAgICAgICAgICAgICBtYXJrIGV4ZWN1dGFibGVzIFNldHVpZA0KIyBTdWJEaXIg
VE9QIGQxIGQyIC4uLiA7ICAgICAgICAgICAgICAgIHN0YXJ0IGEgc3ViZGlyZWN0b3J5IEph
bWZpbGUNCiMgU3ViRGlyQ2NGbGFncyBmbGFncyA7ICAgICAgICAgICAgICAgICBhZGQgY29t
cGlsZXIgZmxhZ3MgdW50aWwgbmV4dCBTdWJEaXINCiMgU3ViRGlyQysrRmxhZ3MgZmxhZ3Mg
OyAgICAgICAgICAgICAgICBhZGQgY29tcGlsZXIgZmxhZ3MgdW50aWwgbmV4dCBTdWJEaXIN
CiMgU3ViRGlySGRycyBkaXJzIDsgICAgICAgICAgICAgICAgICAgICBhZGQgaW5jbHVkZSBk
aXJzIHVudGlsIG5leHQgU3ViRGlyDQojIFN1YkluY2x1ZGUgVE9QIGQxIGQyIC4uLiA7ICAg
ICAgICAgICAgaW5jbHVkZSBhIHN1YmRpcmVjdG9yeSBKYW1maWxlDQojIFNoZWxsIGV4ZSA6
IHNvdXJjZSA7ICAgICAgICAgICAgICAgICAgbWFrZSBhIHNoZWxsIGV4ZWN1dGFibGUNCiMg
VW5kZWZpbmVzIGltYWdlcyA6IHN5bWJvbHMgOyAgICAgICAgICBzYXZlIHVuZGVmJ3MgZm9y
IGxpbmtpbmcNCiMgVXNlck9iamVjdCBvYmplY3QgOiBzb3VyY2UgOyAgICAgICAgICBoYW5k
bGUgdW5rbm93biBzdWZmaXhlcyBmb3IgT2JqZWN0DQojIFlhY2Mgc291cmNlLmMgOiBzb3Vy
Y2UueSA7ICAgICAgICAgICAgLnkgLT4gLmMNCiMNCiMgVXRpbGl0eSBydWxlcyB0aGF0IGhh
dmUgbm8gc2lkZSBlZmZlY3RzIChub3Qgc3VwcG9ydGVkKToNCiMNCiMgRkFwcGVuZFN1ZmZp
eCBmMSBmMiAuLi4gOiAkKFNVRikgOyAgICByZXR1cm4gJCg8KSB3aXRoIHN1ZmZpeGVzDQoj
IGpvaW4gdmFsdWUgLi4uIDsgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRhdGVuYXRl
ZCB2YWx1ZXMNCiMgRkRpck5hbWUgZDEgZDIgLi4uIDsgICAgICAgICAgICAgICAgICByZXR1
cm4gcGF0aCBmcm9tIHJvb3QgdG8gZGlyDQojIEZHcmlzdCBkMSBkMiAuLi4gOyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGQxIWQyIS4uLg0KIyBGR3Jpc3RGaWxlcyB2YWx1ZSA7ICAg
ICAgICAgICAgICAgICAgIHJldHVybiAkKHZhbHVlOkc9JChTT1VSQ0VfR1JJU1QpKQ0KIyBG
R3Jpc3RTb3VyY2VGaWxlcyB2YWx1ZSA7ICAgICAgICAgICAgIHJldHVybiAkKHZhbHVlOkc9
JChTT1VSQ0VfR1JJU1QpKQ0KIyBGUmVsUGF0aCBkMSA6IGQyIDsgICAgICAgICAgICAgICAg
ICAgIHJldHVybiByZWwgcGF0aCBmcm9tIGQxIHRvIGQyDQojIEZTdWJEaXIgZDEgZDIgLi4u
IDsgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhdGggdG8gcm9vdA0KIw0KDQoNCiMgQnJp
ZWYgcmV2aWV3IG9mIHRoZSBqYW0gbGFuZ3VhZ2U6DQojDQojIFN0YXRlbWVudHM6DQojICAg
ICAgIHJ1bGUgUlVMRSAtIHN0YXRlbWVudHMgdG8gcHJvY2VzcyBhIHJ1bGUNCiMgICAgICAg
YWN0aW9ucyBSVUxFIC0gc3lzdGVtIGNvbW1hbmRzIHRvIGNhcnJ5IG91dCB0YXJnZXQgdXBk
YXRlDQojDQojIE1vZGlmaWVycyBvbiBhY3Rpb25zOg0KIyAgICAgICB0b2dldGhlciAtIG11
bHRpcGxlIGluc3RhbmNlcyBvZiBzYW1lIHJ1bGUgb24gdGFyZ2V0IGdldCBleGVjdXRlZA0K
IyAgICAgICAgICAgICAgICAgIG9uY2Ugd2l0aCB0aGVpciBzb3VyY2VzICgkKD4pKSBjb25j
YXRlbmF0ZWQNCiMgICAgICAgdXBkYXRlZCAtIHJlZmVycyB0byB1cGRhdGVkIHNvdXJjZXMg
KCQoPikpIG9ubHkNCiMgICAgICAgaWdub3JlIC0gaWdub3JlIHJldHVybiBzdGF0dXMgb2Yg
Y29tbWFuZA0KIyAgICAgICBxdWlldGx5IC0gZG9uJ3QgdHJhY2UgaXRzIGV4ZWN1dGlvbiB1
bmxlc3MgdmVyYm9zZQ0KIyAgICAgICBwaWVjZW1lYWwgLSBpdGVyYXRlIGNvbW1hbmQgZWFj
aCB0aW1lIHdpdGggYSBzbWFsbCBzdWJzZXQgb2YgJCg+KQ0KIyAgICAgICBleGlzdGluZyAt
IHJlZmVycyB0byBjdXJyZW50bHkgZXhpc3Rpbmcgc291cmNlcyAoJCg+KSkgb25seQ0KIyAg
ICAgICBiaW5kIHZhcnMgLSBzdWJqZWN0IHRvIGJpbmRpbmcgYmVmb3JlIGV4cGFuZGluZyBp
biBhY3Rpb25zDQojDQojIFNwZWNpYWwgcnVsZXM6DQojICAgICAgIEFMV0FZUyAtIGFsd2F5
cyBidWlsZCBhIHRhcmdldA0KIyAgICAgICBERVBFTkRTIC0gYnVpbGRzIHRoZSBkZXBlbmRl
bmN5IGdyYXBoDQojICAgICAgIEVDSE8gLSBibHVydCBvdXQgdGFyZ2V0cyBvbiBzdGRvdXQN
CiMgICAgICAgRVhJVCAtIGJsdXJ0IG91dCB0YXJnZXRzIGFuZCBleGl0DQojICAgICAgIElO
Q0xVREVTIC0gbWFya3Mgc291cmNlcyBhcyBoZWFkZXJzIGZvciB0YXJnZXQgKGEgY29kZXBl
bmRlbmN5KQ0KIyAgICAgICBOT0NBUkUgLSBkb24ndCBwYW5pYyBpZiB0aGUgdGFyZ2V0IGNh
bid0IGJlIGJ1aWx0DQojICAgICAgIE5PVVBEQVRFIC0gY3JlYXRlIHRoZSB0YXJnZXQgaWYg
bmVlZGVkIGJ1dCBuZXZlciB1cGRhdGUgaXQgDQojICAgICAgIE5PVEZJTEUgLSBpZ25vcmUg
dGhlIHRpbWVzdGFtcCBvZiB0aGUgdGFyZ2V0IChpdCdzIG5vdCBhIGZpbGUpDQojICAgICAg
IFRFTVBPUkFSWSAtIHRhcmdldCBuZWVkIG5vdCBiZSBwcmVzZW50IGlmIHNvdXJjZXMgaGF2
ZW4ndCBjaGFuZ2VkDQojDQojIFNwZWNpYWwgdmFyaWFibGVzIHNldCBieSBqYW06DQojICAg
ICAgICQoPCkgLSB0YXJnZXRzIG9mIGEgcnVsZSAodG8gdGhlIGxlZnQgb2YgdGhlIDopDQoj
ICAgICAgICQoPikgLSBzb3VyY2VzIG9mIGEgcnVsZSAodG8gdGhlIHJpZ2h0IG9mIHRoZSA6
KQ0KIyAgICAgICAkKHh4eCkgLSB0cnVlIG9uIHh4eCAoVU5JWCwgVk1TLCBOVCwgT1MyLCBN
QUMpDQojICAgICAgICQoT1MpIC0gbmFtZSBvZiBPUyAtIHZhcmllcyB3aWxkbHkNCiMgICAg
ICAgJChKQU1WRVJTSU9OKSAtIHZlcnNpb24gbnVtYmVyICgyLjMpDQojDQojIFNwZWNpYWwg
dmFyaWFibGVzIHVzZWQgYnkgamFtOg0KIyAgICAgICBTRUFSQ0ggLSB3aGVyZSB0byBmaW5k
IHNvbWV0aGluZyAodXNlZCBkdXJpbmcgYmluZGluZyBhbmQgYWN0aW9ucykNCiMgICAgICAg
TE9DQVRFIC0gd2hlcmUgdG8gcGxvcCBzb21ldGhpbmcgbm90IGZvdW5kIHdpdGggU0VBUkNI
DQojICAgICAgIEhEUlJVTEUgLSBydWxlIHRvIGNhbGwgdG8gaGFuZGxlIGluY2x1ZGUgZmls
ZXMNCiMgICAgICAgSERSU0NBTiAtIGVncmVwIHJlZ2V4IHRvIGV4dHJhY3QgaW5jbHVkZSBm
aWxlcw0KIw0KIyBTcGVjaWFsIHRhcmdldHM6DQojICAgICAgIGFsbCAtIGRlZmF1bHQgaWYg
bm9uZSBnaXZlbiBvbiBjb21tYW5kIGxpbmUNCiMNCg0KIyBJbml0aWFsaXplIHZhcmlhYmxl
cw0KIw0KDQojDQojIE9TIHNwZWNpZmljIHZhcmlhYmxlIHNldHRpbmdzDQojDQoNCiMgZHdh
IDYvNC8wMSAtIHJlbW92ZWQgYWxsIHNldHRpbmdzIG9mIHRoZSBmb2xsb3dpbmcgdmFyaWFi
bGVzIGZvciBib29zdDoNCiMgICBDQywgQ0NGTEFHUywgQysrLCBDKytGTEFHUywgTElOSywg
TElOS0ZMQUdTLCBMSU5LTElCUw0KIyBwcm9iYWJseSBhIGxvdCBtb3JlIGNvdWxkIGJlIGNs
ZWFyZWQgYXdheQ0KDQppZiAkKE5UKQ0Kew0KICAgIENQICAgICAgICAgICAgICA/PSBjb3B5
IDsNCiAgICBSTSAgICAgICAgICAgICAgPz0gZGVsIC9mL3EgOw0KICAgIFNMQVNIICAgICAg
ICAgICA/PSBcXCA7DQogICAgU1BMSVRQQVRIICAgICAgID89ICI7IiA7ICMgZHdhIC0tIGFk
ZGVkIG1pc3NpbmcgU1BMSVRQQVRIDQogICAgU1VGTElCICAgICAgICAgID89IC5saWIgOw0K
ICAgIFNVRk9CSiAgICAgICAgICA/PSAub2JqIDsNCiAgICBTVUZFWEUgICAgICAgICAgPz0g
LmV4ZSA7DQogICAgU1VGRExMICAgICAgICAgID89IC5kbGwgLmxpYiA7DQogICAgZ0xJTktf
VkFSSUFCTEUoLmRsbCkgPSA7ICAgICAgICAgICAgICMgZGxscyBhcmUgTk9UIGxpbmtlZCB0
byBkaXJlY3RseQ0KICAgIGdMSU5LX1ZBUklBQkxFKC5saWIpID0gTkVFRExJQlMgOyAgICAj
IGluc3RlYWQsIHVzZXJzIGxpbmsgdG8gaW1wb3J0IGxpYnMNCiAgICBQUkVETEwgICAgICAg
ICAgPz0gIiIgOw0KICAgIE5PQVJTQ0FOICAgICAgICA/PSB0cnVlIDsNCiAgICBTSEVMTF9F
WFBPUlQgICAgPz0gOw0KICAgIFNIRUxMX1NFVCAgICAgICA/PSAic2V0ICIgOw0KICAgIA0K
ICAgICMgZHdhIDYvNC8wMSAtIHJlbW92ZWQgY29tcGlsZXIgZGV0ZXJtaW5hdGlvbiBmb3Ig
Ym9vc3QNCiAgICAjIGFkZGVkIHNvbWUgeWFjYy9sZXggc3R1ZmYsIGFzc3VtaW5nIGN5Z3dp
biBmb3Igbm93Lg0KICAgIExFWCAgICAgICAgICAgICA/PSBmbGV4IDsNCiAgICBZQUNDICAg
ICAgICAgICAgPz0gYmlzb24gLXkgOw0KICAgIFlBQ0NGSUxFUyAgICAgICA/PSB5LnRhYiA7
DQogICAgWUFDQ19PVVRQVVQgICAgID89IC0tb3V0cHV0PSA7DQogICAgTEVYX09VVFBVVCAg
ICAgID89IC1vIDsNCiAgICANCiAgICBMTiAgICAgICAgICAgICAgPz0gJChDUCkgOw0KICAg
IE5VTExfT1VUICAgICAgICA/PSA+TlVMOiA7DQp9DQplbHNlIGlmICQoT1MyKQ0Kew0KICAg
IFdBVENPTSAgICAgICAgICA/PSAkKHdhdGNvbSkgOw0KDQogICAgaWYgISAkKFdBVENPTSkN
CiAgICB7DQogICAgICAgIEVYSVQgT24gT1MyLCBzZXQgV0FUQ09NIHRvIHRoZSByb290IG9m
IHRoZSBXYXRjb20gZGlyZWN0b3J5LiA7DQogICAgfQ0KDQogICAgQVIgICAgICAgICAgICAg
ID89IHdsaWIgOw0KICAgIEJJTkRJUiAgICAgICAgICA/PSBcXG9zMlxcYXBwcyA7DQogICAg
Q1AgICAgICAgICAgICAgID89IGNvcHkgOw0KICAgIERPVCAgICAgICAgICAgICA/PSAuIDsN
CiAgICBET1RET1QgICAgICAgICAgPz0gLi4gOw0KICAgIE1WICAgICAgICAgICAgICA/PSBt
b3ZlIDsNCiAgICBOT0FSU0NBTiAgICAgICAgPz0gdHJ1ZSA7DQogICAgT1BUSU0gICAgICAg
ICAgID89IDsNCiAgICBSTSAgICAgICAgICAgICAgPz0gZGVsIC9mIDsNCiAgICBTTEFTSCAg
ICAgICAgICAgPz0gXFwgOw0KICAgIFNQTElUUEFUSCAgICAgICA/PSAiOyIgOyAjIGR3YSAt
LSBhZGRlZCBtaXNzaW5nIFNQTElUUEFUSA0KICAgIFNUREhEUlMgICAgICAgICA/PSAkKFdB
VENPTSlcXGggOw0KICAgIFNVRkVYRSAgICAgICAgICA/PSAuZXhlIDsNCiAgICBTVUZMSUIg
ICAgICAgICAgPz0gLmxpYiA7DQogICAgU1VGT0JKICAgICAgICAgID89IC5vYmogOw0KICAg
IFVOREVGRkxBRyAgICAgICA/PSAiL3UgXyIgOw0KDQp9DQplbHNlIGlmICQoVk1TKQ0Kew0K
ICAgIENITU9EICAgICAgICAgICA/PSBzZXQgZmlsZS9wcm90PSA7DQogICAgQ1AgICAgICAg
ICAgICAgID89IGNvcHkvcmVwbGFjZSA7DQogICAgQ1JFTElCICAgICAgICAgID89IHRydWUg
Ow0KICAgIERPVCAgICAgICAgICAgICA/PSBbXSA7DQogICAgRE9URE9UICAgICAgICAgID89
IFstXSA7DQogICAgRVhFTU9ERSAgICAgICAgID89ICh3OmUpIDsNCiAgICBGSUxFTU9ERSAg
ICAgICAgPz0gKHc6cikgOw0KICAgIEhEUlMgICAgICAgICAgICA/PSA7DQogICAgTUtESVIg
ICAgICAgICAgID89IGNyZWF0ZS9kaXIgOw0KICAgIE1WICAgICAgICAgICAgICA/PSByZW5h
bWUgOw0KICAgIE9QVElNICAgICAgICAgICA/PSAiIiA7DQogICAgUk0gICAgICAgICAgICAg
ID89IGRlbGV0ZSA7DQogICAgUlVOVk1TICAgICAgICAgID89IG1jciA7DQogICAgU0hFTExN
T0RFICAgICAgID89ICh3OmVyKSA7DQogICAgU0xBU0ggICAgICAgICAgID89IC4gOw0KICAg
IFNUREhEUlMgICAgICAgICA/PSBkZWNjJGxpYnJhcnlfaW5jbHVkZSA7DQogICAgU1VGRVhF
ICAgICAgICAgID89IC5leGUgOw0KICAgIFNVRkxJQiAgICAgICAgICA/PSAub2xiIDsNCiAg
ICBTVUZPQkogICAgICAgICAgPz0gLm9iaiA7DQoNCiAgICBzd2l0Y2ggJChPUykgDQogICAg
ew0KICAgIGNhc2UgVk1TICAgICA6IExJTktMSUJTID89IHN5cyRsaWJyYXJ5OnZheGNydGwu
b2xiL2xpYiA7DQogICAgfQ0KfQ0KZWxzZSBpZiAkKE1BQykNCnsNCiAgICBsb2NhbCBPUFQg
Ow0KDQogICAgQ1cgICAgICA/PSAie0NXfSIgOw0KDQogICAgTUFDSERSUyA/PQ0KICAgICAg
ICAgICAgIiQoVU1BQ0hEUlMpOlVuaXZlcnNhbDpJbnRlcmZhY2VzOkNJbmNsdWRlcyINCiAg
ICAgICAgICAgICIkKENXKTpNU0w6TVNMX0M6TVNMX0NvbW1vbjpJbmNsdWRlIg0KICAgICAg
ICAgICAgIiQoQ1cpOk1TTDpNU0xfQzpNU0xfTWFjT1M6SW5jbHVkZSIgOw0KDQogICAgTUFD
TElCUyA/PQ0KICAgICAgICAgICAgIiQoQ1cpOk1hY09TIFN1cHBvcnQ6VW5pdmVyc2FsOkxp
YnJhcmllczpTdHViTGlicmFyaWVzOkludGVyZmFjZWxpYiINCiAgICAgICAgICAgICIkKENX
KTpNYWNPUyBTdXBwb3J0OlVuaXZlcnNhbDpMaWJyYXJpZXM6U3R1YkxpYnJhcmllczpNYXRo
bGliIiA7DQoNCiAgICBNUFdMSUJTID89IA0KICAgICAgICAgICAgIiQoQ1cpOk1hY09TIFN1
cHBvcnQ6TGlicmFyaWVzOlJ1bnRpbWU6UnVudGltZSBQUEM6TVNMIE1QV0NSdW50aW1lLmxp
YiINCiAgICAgICAgICAgICIkKENXKTpNU0w6TVNMX0M6TVNMX01hY09TOkxpYjpQUEM6TVNM
IEMuUFBDIE1QVy5MaWIiIDsNCg0KICAgIE1QV05MTElCUyA/PSANCiAgICAgICAgICAgICIk
KENXKTpNYWNPUyBTdXBwb3J0OkxpYnJhcmllczpSdW50aW1lOlJ1bnRpbWUgUFBDOk1TTCBN
UFdDUnVudGltZS5saWIiDQogICAgICAgICAgICAiJChDVyk6TVNMOk1TTF9DOk1TTF9NYWNP
UzpMaWI6UFBDOk1TTCBDLlBQQyBNUFcoTkwpLkxpYiIgOw0KDQogICAgU0lPVVhIRFJTID89
IDsNCg0KICAgIFNJT1VYTElCUyA/PSANCiAgICAgICAgICAgICIkKENXKTpNYWNPUyBTdXBw
b3J0OkxpYnJhcmllczpSdW50aW1lOlJ1bnRpbWUgUFBDOk1TTCBSdW50aW1lUFBDLmxpYiIN
CiAgICAgICAgICAgICIkKENXKTpNU0w6TVNMX0M6TVNMX01hY09TOkxpYjpQUEM6TVNMIFNJ
T1VYLlBQQy5MaWIiIA0KICAgICAgICAgICAgIiQoQ1cpOk1TTDpNU0xfQzpNU0xfTWFjT1M6
TGliOlBQQzpNU0wgQy5QUEMuTGliIiA7DQoNCiAgICBDUCAgICAgICAgICAgICAgPz0gZHVw
bGljYXRlIC15IDsNCiAgICBET1QgICAgICAgICAgICAgPz0gIjoiIDsNCiAgICBET1RET1Qg
ICAgICAgICAgPz0gIjo6IiA7DQogICAgSERSUyAgICAgICAgICAgID89ICQoTUFDSERSUykg
JChNUFdIRFJTKSA7DQogICAgTUtESVIgICAgICAgICAgID89IG5ld2ZvbGRlciA7DQogICAg
TVYgICAgICAgICAgICAgID89IHJlbmFtZSAteSA7DQogICAgTk9BUlNDQU4gICAgICAgID89
IHRydWUgOw0KICAgIE9QVElNICAgICAgICAgICA/PSA7DQogICAgUk0gICAgICAgICAgICAg
ID89IGRlbGV0ZSAteSA7DQogICAgU0xBU0ggICAgICAgICAgID89ICI6IiA7DQogICAgU1RE
SERSUyAgICAgICAgID89IDsgDQogICAgU1VGTElCICAgICAgICAgID89IC5saWIgOw0KICAg
IFNVRk9CSiAgICAgICAgICA/PSAubyA7DQp9DQplbHNlIGlmICQoT1MpID0gQkVPUyAmJiAk
KE1FVFJPV0VSS1MpDQp7DQogICAgQVIgICAgICAgICAgICAgID89IG13bGQgLXhtbCAtbyA7
DQogICAgQklORElSICAgICAgICAgID89IC9ib290L2FwcHMgOw0KICAgIEZPUlRSQU4gICAg
ICAgICA/PSAiIiA7DQogICAgTElCRElSICAgICAgICAgID89IC9ib290L2RldmVsb3AvbGli
cmFyaWVzIDsNCiAgICBNQU5ESVIgICAgICAgICAgPz0gL2Jvb3QvZG9jdW1lbnRhdGlvbi8i
U2hlbGwgVG9vbHMiL0hUTUwgOw0KICAgIE5PQVJTQ0FOICAgICAgICA/PSB0cnVlIDsNCiAg
ICBTVERIRFJTICAgICAgICAgPz0gL2Jvb3QvZGV2ZWxvcC9oZWFkZXJzL3Bvc2l4IDsNCn0N
CmVsc2UgaWYgJChPUykgPSBCRU9TIA0Kew0KICAgIEJJTkRJUiAgICAgICAgICA/PSAvYm9v
dC9hcHBzIDsNCiAgICBGT1JUUkFOICAgICAgICAgPz0gIiIgOw0KICAgIExJQkRJUiAgICAg
ICAgICA/PSAvYm9vdC9kZXZlbG9wL2xpYnJhcmllcyA7DQogICAgTk9BUlNDQU4gICAgICAg
ID89IHRydWUgOw0KICAgIFNUREhEUlMgICAgICAgICA/PSAvYm9vdC9kZXZlbG9wL2hlYWRl
cnMvcG9zaXggOw0KfQ0KZWxzZSBpZiAkKFVOSVgpDQp7DQogICAgc3dpdGNoICQoT1MpDQog
ICAgew0KICAgIGNhc2UgQUlYIDoNCiAgICAgICAgSU1QTElCX0ZMQUdTICAgID89IC1iSTog
Ow0KICAgICAgICBTVUZETEwgICAgICAgICAgPz0gLnNvIDsNCiAgICAgICAgZ0xJTktfVkFS
SUFCTEUoLnNvKSA9IE5FRURMSUJTIDsgICMgc2hhcmVkIGxpYnMgc2hvdWxkIGJlIGFkZGVk
IHRvIHRoZSBsaXN0IG9mIGxpYnMgbmVlZGVkDQogICAgICAgIGdMSU5LX1ZBUklBQkxFKC5p
bXApID0gTkVFRElNUFMgOyAjIGltcG9ydCBsaWJzIGFyZSBoYW5kbGVkIHNlcGFyYXRlbHku
DQogICAgICAgIGdTSEVMTF9MSUJQQVRIID0gTElCUEFUSCA7DQogICAgICAgIA0KICAgIGNh
c2UgQU1JR0EgOg0KICAgICAgICBZQUNDICAgICAgICAgICAgPz0gYmlzb24gLXkgOw0KDQog
ICAgY2FzZSBDWUdXSU4gOiAgICAgICANCiAgICAgICAgTEVYICAgICAgICAgICAgID89IGZs
ZXggOw0KICAgICAgICBSQU5MSUIgICAgICAgICAgPz0gIiIgOw0KICAgICAgICBTVUZFWEUg
ICAgICAgICAgPz0gLmV4ZSA7DQogICAgICAgIFlBQ0MgICAgICAgICAgICA/PSBiaXNvbiAt
eSA7DQogICAgICAgIE1LRElSICAgICAgICAgICA/PSBta2RpciAtcCA7DQogICAgICAgIFNV
RkRMTCAgICAgICAgICA/PSAuZGxsIDsNCg0KICAgIGNhc2UgREdVWCA6DQogICAgICAgIFJB
TkxJQiAgICAgICAgICA/PSAiIiA7DQogICAgICAgIFJFTE9DQVRFICAgICAgICA/PSB0cnVl
IDsNCg0KICAgIGNhc2UgSFBVWCA6DQogICAgICAgIFJBTkxJQiAgICAgICAgICA/PSAiIiA7
DQoNCiAgICBjYXNlIElOVEVSSVggOg0KICAgICAgICBSQU5MSUIgICAgICAgICAgPz0gIiIg
Ow0KDQogICAgY2FzZSBJUklYIDoNCiAgICAgICAgUkFOTElCICAgICAgICAgID89ICIiIDsN
Cg0KICAgIGNhc2UgTElOVVggOg0KICAgICAgICBDTE9ORSAgICAgICAgICAgPz0gY3AgLWZw
ZCA7DQoNCiAgICBjYXNlIE1QRUlYIDoNCiAgICAgICAgSERSUyAgICAgICAgICAgICs9IC91
c3IvaW5jbHVkZSA7DQogICAgICAgIFJBTkxJQiAgICAgICAgICA/PSAiIiA7IA0KICAgICAg
ICBOT0FSU0NBTiAgICAgICAgPz0gdHJ1ZSA7DQogICAgICAgIE5PQVJVUERBVEUgICAgICA/
PSB0cnVlIDsNCg0KICAgIGNhc2UgTVZTIDoNCiAgICAgICAgUkFOTElCICAgICAgICAgID89
ICIiIDsgDQoNCiAgICBjYXNlIE5FWFQgOg0KICAgICAgICBBUiAgICAgICAgICAgICAgPz0g
bGlidG9vbCAtbyA7DQogICAgICAgIFJBTkxJQiAgICAgICAgICA/PSAiIiA7DQoNCiAgICBj
YXNlIE1BQ09TWCA6DQogICAgICAgIE1BTkRJUiAgICAgICAgICA/PSAvdXNyL2xvY2FsL3No
YXJlL21hbiA7DQogICAgICAgIFNVRkRMTCAgICAgICAgICA/PSAuZHlsaWIgOw0KICAgICAg
ICBnU0hFTExfTElCUEFUSCAgPz0gRFlMRF9MSUJSQVJZX1BBVEggOw0KICAgICAgICBOT0FS
U0NBTiAgICAgICAgPz0gdHJ1ZSA7DQoNCiAgICBjYXNlIE5DUiA6DQogICAgICAgIFJBTkxJ
QiAgICAgICAgICA/PSAiIiA7DQoNCiAgICBjYXNlIFBUWCA6DQogICAgICAgIFJBTkxJQiAg
ICAgICAgICA/PSAiIiA7DQoNCiAgICBjYXNlIFFOWCA6DQogICAgICAgIEFSICAgICAgICAg
ICAgICA/PSB3bGliIDsNCiAgICAgICAgTk9BUlNDQU4gICAgICAgID89IHRydWUgOw0KICAg
ICAgICBSQU5MSUIgICAgICAgICAgPz0gIiIgOw0KDQogICAgY2FzZSBTQ08gOg0KICAgICAg
ICBSQU5MSUIgICAgICAgICAgPz0gIiIgOw0KICAgICAgICBSRUxPQ0FURSAgICAgICAgPz0g
dHJ1ZSA7DQoNCiAgICBjYXNlIFNJTklYIDoNCiAgICAgICAgUkFOTElCICAgICAgICAgID89
ICIiIDsNCg0KICAgIGNhc2UgU09MQVJJUyA6DQogICAgICAgIFJBTkxJQiAgICAgICAgICA/
PSAiIiA7DQogICAgICAgIEFSICAgICAgICAgICAgICA/PSAiL3Vzci9jY3MvYmluL2FyIHJ1
IiA7DQoNCiAgICBjYXNlIFVOSUNPUyA6DQogICAgICAgIE5PQVJTQ0FOICAgICAgICA/PSB0
cnVlIDsNCiAgICAgICAgT1BUSU0gICAgICAgICAgID89IC1PMCA7DQoNCiAgICBjYXNlIFVO
SVhXQVJFIDoNCiAgICAgICAgUkFOTElCICAgICAgICAgID89ICIiIDsNCiAgICAgICAgUkVM
T0NBVEUgICAgICAgID89IHRydWUgOw0KDQogICAgY2FzZSBPU0YgOg0KICAgICAgICBnTElO
S19WQVJJQUJMRSguc28pID0gTkVFRExJQlMgOyAjIHNoYXJlZCBvYmplY3RzIHNob3VsZCBi
ZSBhZGRlZCB0byB0aGUgbGlzdCBvZiBsaWJzIG5lZWRlZA0KICAgIH0NCg0KICAgICMgVU5J
WCBkZWZhdWx0cw0KICAgIENITU9EICAgICAgICAgICA/PSBjaG1vZCA7DQogICAgTEVYICAg
ICAgICAgICAgID89IGxleCA7DQogICAgT1BUSU0gICAgICAgICAgID89IC1PIDsNCiAgICBS
QU5MSUIgICAgICAgICAgPz0gcmFubGliIDsNCiAgICBZQUNDICAgICAgICAgICAgPz0geWFj
YyA7DQogICAgWUFDQ0ZJTEVTICAgICAgID89IHkudGFiIDsNCiAgICBZQUNDRkxBR1MgICAg
ICAgPz0gLWQgOw0KICAgIFNIRUxMX0VYUE9SVCAgICA/PSAiZXhwb3J0ICIgOw0KICAgIFNI
RUxMX1NFVCAgICAgICA/PSAiIiA7DQogICAgZ1NIRUxMX0xJQlBBVEggID89IExEX0xJQlJB
UllfUEFUSCA7DQogICAgQklORElSICAgICAgICAgID89IC91c3IvbG9jYWwvYmluIDsNCiAg
ICBMSUJESVIgICAgICAgICAgPz0gL3Vzci9sb2NhbC9saWIgOw0KICAgIE1BTkRJUiAgICAg
ICAgICA/PSAvdXNyL2xvY2FsL21hbiA7DQogICAgU1RESERSUyAgICAgICAgID89IC91c3Iv
aW5jbHVkZSA7DQp9DQogICAgDQojDQojIEdlbmVyYWwgZGVmYXVsdHM7IGEgbG90IGxpa2Ug
VU5JWA0KIw0KDQpBUiAgICAgICAgICAgICAgPz0gYXIgcnUgOw0KQVMgICAgICAgICAgICAg
ID89IGFzIDsNCkFTRkxBR1MgICAgICAgICA/PSA7DQpBV0sgICAgICAgICAgICAgPz0gYXdr
IDsNCkJJTkRJUiAgICAgICAgICA/PSA7DQpDTE9ORSAgICAgICAgICAgPz0gJChDUCkgOw0K
Q0xPTkUgICAgICAgICAgID89IGNwIC1mcCA7DQpDUCAgICAgICAgICAgICAgPz0gY3AgLWYg
Ow0KQ1JFTElCICAgICAgICAgID89IDsNCkRPVCAgICAgICAgICAgICA/PSAuIDsNCkRPVERP
VCAgICAgICAgICA/PSAuLiA7DQpFWEVNT0RFICAgICAgICAgPz0gNzExIDsNCkRMTE1PREUg
ICAgICAgICA/PSA3NTUgOw0KRklMRU1PREUgICAgICAgID89IDY0NCA7DQpGT1JUUkFOICAg
ICAgICAgPz0gZjc3IDsNCkZPUlRSQU5GTEFHUyAgICA/PSA7DQpIRFJTICAgICAgICAgICAg
Pz0gOw0KSkFNRklMRSAgICAgICAgID89IEphbWZpbGUgOw0KSkFNUlVMRVMgICAgICAgID89
IEphbXJ1bGVzIDsNCkxFWCAgICAgICAgICAgICA/PSA7DQpMSUJESVIgICAgICAgICAgPz0g
Ow0KTE4gICAgICAgICAgICAgID89IGxuIDsNCk1BTkRJUiAgICAgICAgICA/PSA7DQpNS0RJ
UiAgICAgICAgICAgPz0gbWtkaXIgOw0KTVYgICAgICAgICAgICAgID89IG12IC1mIDsNCk9Q
VElNICAgICAgICAgICA/PSA7DQpSQ1AgICAgICAgICAgICAgPz0gcmNwIDsNClJNICAgICAg
ICAgICAgICA/PSBybSAtZiA7DQpSU0ggICAgICAgICAgICAgPz0gcnNoIDsNClNFRCAgICAg
ICAgICAgICA/PSBzZWQgOw0KU0hFTExIRUFERVIgICAgID89ICIjIS9iaW4vc2giIDsNClNI
RUxMTU9ERSAgICAgICA/PSA3NTUgOw0KU0hFTExfRVhQT1JUICAgID89IDsNClNIRUxMX1NF
VCAgICAgICA/PSAiIiA7DQpTTEFTSCAgICAgICAgICAgPz0gLyA7DQpTUExJVFBBVEggICAg
ICAgPz0gIjoiIDsgIyBkd2EgLS0gYWRkZWQgbWlzc2luZyBTUExJVFBBVEgNClNUREhEUlMg
ICAgICAgICA/PSA7DQpTVUZFWEUgICAgICAgICAgPz0gIiIgOw0KU1VGRExMICAgICAgICAg
ID89IC5zbyA7DQpTVUZMSUIgICAgICAgICAgPz0gLmEgOw0KU1VGT0JKICAgICAgICAgID89
IC5vIDsNClBSRURMTCAgICAgICAgICA/PSBsaWIgOw0KUFJFTElCICAgICAgICAgID89IGxp
YiA7DQpVTkRFRkZMQUcgICAgICAgPz0gIi11IF8iIDsNCllBQ0MgICAgICAgICAgICA/PSA7
DQpZQUNDRklMRVMgICAgICAgPz0gOw0KWUFDQ0ZMQUdTICAgICAgID89IDsNCkJJTl9ESVJF
Q1RPUlkgICA/PSBiaW4gOw0KDQojfiBIRFJQQVRURVJOID0gDQogICAgICAgICN+ICJeWyAg
ICAgXSojWyAgICBdKmluY2x1ZGVbICAgICAgXSooWzxcIl1bXlwiPl0qW1wiPl0pLiokIiA7
DQpIRFJQQVRURVJOID0gDQogICAgICAgICJeWyAJXSojWyAJXSppbmNsdWRlWyAJXSooWzxc
Il1bXlwiPl0qW1wiPl0pLiokIiA7DQogICAgICAgICAgDQojIiBNeSBKYW0gbW9kZSBnZXRz
IGl0cyBzeW50YXggaGlnaGxpZ2h0aW5nIGNvbmZ1c2VkIHdpdGhvdXQgdGhpcyBjb21tZW50
DQoNCk9TRlVMTCA9ICQoT1MpJChPU1ZFUikkKE9TUExBVCkgJChPUykkKE9TUExBVCkgJChP
UykkKE9TVkVSKSAkKE9TKSA7DQoNCiMNCiMgUnVsZSB0byBhdXRvbWF0ZSBwYXRjaGluZyBv
ZiBzaW5nbGV0b24gdmFyaWFibGVzIGZyb20gdGhlIHVzZXIgc28gdGhhdA0KIyB0aGV5IGFy
ZSBjb3JyZWN0bHkgaW50ZXJwcmV0ZWQgYXMgYSBzaW5nbGUgZW50cnkgaW5zdGVhZCBvZiBh
cyBhIGxpc3QgaWYNCiMgdGhleSBoYXBwZW4gdG8gY29udGFpbiBzcGFjZXMuDQojDQojIFRo
aXMgYWxzbyByZW1lbWJlcnMgdGhlIGZpcnN0KGdsb2JhbCkgdmFsdWUgc28gdGhhdCBpdCBj
YW4gYmUgcmVzZXQNCiMgd2hlbiBjbGVhcmVkLCBidXQgdXNlZCBhZ2Fpbi4NCiMNCnJ1bGUg
c2V0LWFzLXNpbmdsZXRvbiAoIHZhcmlhYmxlcyArICkNCnsNCiAgICBmb3IgbG9jYWwgdmFy
aWFibGUgaW4gJCh2YXJpYWJsZXMpDQogICAgew0KICAgICAgICAkKHZhcmlhYmxlKSA9ICQo
JCh2YXJpYWJsZSk6Sj0iICIpIDsNCiAgICAgICAgI34gaWYgISAkKGdTSU5HTEVUT05fU0VU
KCQodmFyaWFibGUpKSkNCiAgICAgICAgI34gew0KICAgICAgICAgICAgI34gZ1NJTkdMRVRP
TigkKHZhcmlhYmxlKSkgPSAkKCQodmFyaWFibGUpKSA7DQogICAgICAgICAgICAjfiBnU0lO
R0xFVE9OX1NFVCgkKHZhcmlhYmxlKSkgPSB0cnVlIDsNCiAgICAgICAgI34gfQ0KICAgICAg
ICAjfiAkKHZhcmlhYmxlKSA/PSAkKGdTSU5HTEVUT04oJCh2YXJpYWJsZSkpKSA7DQogICAg
fQ0KfQ0KDQojDQojICJGaXgiIHRoZSBrbm93biBwb3NzaWJseSBkaXJlY3RvcnkgdmFyaWFi
bGVzLg0KIw0Kc2V0LWFzLXNpbmdsZXRvbg0KICAgIEJJTkRJUg0KICAgIENXDQogICAgSkFN
RklMRQ0KICAgIEpBTVJVTEVTDQogICAgSkFNU0hFTEwNCiAgICBMSUJESVINCiAgICBNQU5E
SVINCiAgICBXQVRDT00NCiAgICA7DQoNCiMNCiMgQmFzZSBkZXBlbmRlbmNpZXMgLSBmaXJz
dCBmb3IgImJvb3RzdHJhcCIga2luZHMgb2YgcnVsZXMNCiMNCg0KIyBkd2EgNi8xNy8wMSAt
IGFkZGVkIHRlc3QNCkRFUEVORFMgYWxsIDogc2hlbGwgZmlsZXMgbGliIGRsbCBleGUgb2Jq
IDsNCkRFUEVORFMgYWxsIHNoZWxsIGZpbGVzIGxpYiBkbGwgZXhlIG9iaiB0ZXN0IDogZmly
c3QgOw0KTk9URklMRSBhbGwgZmlyc3Qgc2hlbGwgZmlsZXMgbGliIGRsbCBleGUgb2JqIGRp
cnMgY2xlYW4gdW5pbnN0YWxsIHRlc3QgOw0KQUxXQVlTIGNsZWFuIHVuaW5zdGFsbCA7DQoN
CiMNCiMgUnVsZXMNCiMNCg0KIyBkd2EgNi80LzAxIC0gYWRkZWQgZm9yIGJvb3N0DQojIHR5
cGUtREVQRU5EUyB0eXBlIDogdGFyZ2V0cy4uLg0KIw0KIyBVc2UgdGhpcyB0byBjcmVhdGUg
YSBkZXBlbmRlbmN5IGJldHdlZW4gYSBmYWtlIHR5cGUtdGFyZ2V0IGFuZCBvdGhlciB0YXJn
ZXRzLiBXaWxsIHByZXZlbnQNCiMgdGFyZ2V0cyBpbiBkZXBlbmRlZSBzdWJwcm9qZWN0cyBm
cm9tIGJlaW5nIGFkZGVkIHRvIHRoZSB0eXBlLXRhcmdldCdzIGRlcGVuZGVuY2llcy4NCnJ1
bGUgdHlwZS1ERVBFTkRTICMgdHlwZS10YXJnZXQgOiB0YXJnZXRzLi4uDQp7DQogICAgaWYg
ISAkKGdTVVBQUkVTU19GQUtFX1RBUkdFVFMpICYmICEgJChnSU5fTElCX0lOQ0xVREUpDQog
ICAgew0KICAgICAgICBERVBFTkRTICQoPCkgOiAkKD4pIDsNCiAgICB9DQp9DQoNCiMgZHdh
IDYvNC8wMSAtIGFkZGVkIGZvciBib29zdA0KIyBBcmNoaXZlIGZpbGUtdGFyZ2V0IDogc291
cmNlcw0KIw0KIyBVc2VkIHRvIGRpc3BhdGNoIHRocm91Z2ggQXJjaGl2ZS1hY3Rpb24sIHdo
aWNoIHNob3VsZCBiZSByZWRlZmluZWQgaW4gdG9vbHNldA0KIyBkZXNjcmlwdGlvbiBmaWxl
cy4NCnJ1bGUgQXJjaGl2ZQ0Kew0KICAgIEFyY2hpdmUtYWN0aW9uICQoPCkgOiAkKD4pIDsN
Cn0NCg0KcnVsZSBBcw0Kew0KICAgIERFUEVORFMgJCg8KSA6ICQoPikgOw0KICAgIEFTRkxB
R1Mgb24gJCg8KSArPSAkKEFTRkxBR1MpICQoU1VCRElSQVNGTEFHUykgOw0KfQ0KDQpydWxl
IEJ1bGsNCnsNCiAgICBsb2NhbCBpIDsNCg0KICAgIGZvciBpIGluICQoPikNCiAgICB7DQog
ICAgICAgIEZpbGUgJChpOkQ9JCg8KSkgOiAkKGkpIDsNCiAgICB9DQp9DQoNCiMgZHdhIDYv
NC8wMSAtIG1vZGlmaWVkIGZvciBib29zdA0KIyBmYWN0b3JlZCBvdXQgc3R1ZmYgZnJvbSB0
aGUgYnVpbHRpbiBDYyBhbmQgQysrIHJ1bGVzDQpydWxlIENjLXBsYXRmb3JtLXNwZWNpZmlj
cw0Kew0KICAgICMgSWYgdGhlIGNvbXBpbGVyJ3MgLW8gZmxhZyBkb2Vzbid0IHdvcmssIHJl
bG9jYXRlIHRoZSAubw0KDQogICAgaWYgJChSRUxPQ0FURSkNCiAgICB7DQogICAgICAgIENj
TXYgJCg8KSA6ICQoPikgOw0KICAgIH0NCg0KICAgIGxvY2FsIF9oID0gJChTRUFSQ0hfU09V
UkNFKSAkKEhEUlMpIDsNCg0KICAgIGlmICQoVk1TKSAmJiAkKF9oKQ0KICAgIHsNCiAgICAg
ICAgU0xBU0hJTkMgb24gJCg8KSA9ICIvaW5jPSgiICQoX2hbMV0pICwkKF9oWzItXSkgIiki
IDsNCiAgICB9DQogICAgZWxzZSBpZiAkKE1BQykgJiYgJChfaCkNCiAgICB7DQogICAgICAg
IGxvY2FsIF9pIF9qIDsNCiAgICAgICAgX2ogPSAkKF9oWzFdKSA7DQogICAgICAgIGZvciBf
aSBpbiAkKF9oWzItXSkNCiAgICAgICAgew0KICAgICAgICAgICAgX2ogPSAkKF9qKSwkKF9p
KSA7DQogICAgICAgIH0NCiAgICAgICAgTUFDSU5DIG9uICQoPCkgPSBcIiQoX2opXCIgOw0K
ICAgIH0NCn0NCg0KIyBkd2EgNi80LzAxIC0gYWRkZWQgZm9yIGJvb3N0DQojIGFsd2F5cy1j
KysgZmlsZW5hbWUuLi4NCiMNCiMgZGVjbGFyZXMgdGhhdCB0aGUgZ2l2ZW4gZmlsZXMgc2hv
dWxkIGJlIGNvbXBpbGVkIGFzIEMrKywgcmVnYXJkbGVzcyBvZiB0aGVpcg0KIyBmaWxlbmFt
ZSBleHRlbnNpb24uDQpydWxlIGFsd2F5cy1jKysNCnsNCiAgICBnQUxXQVlTX0MrKyArPSBb
IEZHcmlzdEZpbGVzICQoPCkgXSA7DQp9DQoNCiMgZHdhIDYvNC8wMSAtIG1vZGlmaWVkIGZv
ciBib29zdA0KcnVsZSBDYw0Kew0KICAgIERFUEVORFMgJCg8KSA6ICQoPikgOw0KDQogICAg
Q2MtcGxhdGZvcm0tc3BlY2lmaWNzICQoPCkgOiAkKD4pIDsNCg0KICAgIGlmICQoPikgaW4g
JChnQUxXQVlTX0MrKykNCiAgICB7DQogICAgICAgIEMrKy1hY3Rpb24gJCg8KSA6ICQoPikg
Ow0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICBDYy1hY3Rpb24gJCg8KSA6ICQo
PikgOw0KICAgIH0NCn0NCg0KIyBkd2EgNi80LzAxIC0gbW9kaWZpZWQgZm9yIGJvb3N0DQpy
dWxlIEMrKw0Kew0KICAgIERFUEVORFMgJCg8KSA6ICQoPikgOw0KDQogICAgQ2MtcGxhdGZv
cm0tc3BlY2lmaWNzICQoPCkgOiAkKD4pIDsNCiAgICANCiAgICBDKystYWN0aW9uICQoPCkg
OiAkKD4pIDsNCn0NCg0KcnVsZSBDaG1vZA0Kew0KICAgIGlmICQoQ0hNT0QpIHsgQ2htb2Qx
ICQoPCkgOyB9DQp9DQoNCiMgZHdhIDYvNC8wMSAtIGFkZGVkIGZvciBib29zdA0KIyBjb25k
aXRpb25hbCA8Y29uZD4gOiA8dHJ1ZS12YWx1ZT4gOiA8ZmFsc2UtdmFsdWU+DQojIHJldHVy
bnMgPHRydWUtdmFsdWU+IGlmIDxjb25kPiwgPGZhbHNlLXZhbHVlPiBvdGhlcndpc2UNCnJ1
bGUgY29uZGl0aW9uYWwNCnsNCiAgICBpZiAkKDEpIHsgcmV0dXJuICQoMikgOyB9IGVsc2Ug
eyByZXR1cm4gJCgzKSA7IH0NCn0NCg0KIyBkd2EgNi80LzAxIC0gbW9kaWZpZWQgZm9yIGJv
b3N0DQpydWxlIEZpbGUNCnsNCiAgICB0eXBlLURFUEVORFMgZmlsZXMgOiAkKDwpIDsNCiAg
ICBERVBFTkRTICQoPCkgOiAkKD4pIDsNCiAgICBTRUFSQ0ggb24gJCg+KSA9ICQoU0VBUkNI
X1NPVVJDRSkgOw0KICAgIE1PREUgb24gJCg8KSA9ICQoRklMRU1PREUpIDsNCiAgICBDaG1v
ZCAkKDwpIDsNCn0NCg0KcnVsZSBGaWxlQ2xvbmUNCnsNCiAgICB0eXBlLURFUEVORFMgZmls
ZXMgOiAkKDwpIDsNCiAgICBERVBFTkRTICQoPCkgOiAkKD4pIDsNCiAgICBTRUFSQ0ggb24g
JCg+KSA9ICQoU0VBUkNIX1NPVVJDRSkgOw0KfQ0KDQpydWxlIEZvcnRyYW4NCnsNCiAgICBE
RVBFTkRTICQoPCkgOiAkKD4pIDsNCn0NCg0KcnVsZSBHZW5GaWxlIA0Kew0KICAgIGxvY2Fs
IF90ID0gWyBGR3Jpc3RTb3VyY2VGaWxlcyAkKDwpIF0gOw0KICAgIGxvY2FsIF9zID0gWyBG
QXBwZW5kU3VmZml4ICQoPlsxXSkgOiAkKFNVRkVYRSkgXSA7DQogICAgRGVwZW5kcyAkKF90
KSA6ICQoX3MpICQoPlsyLV0pIDsNCiAgICBHZW5GaWxlMSAkKF90KSA6ICQoX3MpICQoPlsy
LV0pIDsNCiAgICBDbGVhbiBjbGVhbiA6ICQoX3QpIDsNCn0NCg0KcnVsZSBHZW5GaWxlMQ0K
ew0KICAgIE1ha2VMb2NhdGUgJCg8KSA6ICQoTE9DQVRFX1NPVVJDRSkgOw0KICAgIFNFQVJD
SCBvbiAkKD4pID0gJChTRUFSQ0hfU09VUkNFKSA7DQp9DQoNCiMgZHdhIDYvNC8wMSAtIG1v
ZGlmaWVkIGZvciBib29zdA0KcnVsZSBIYXJkTGluaw0Kew0KICAgIHR5cGUtREVQRU5EUyBm
aWxlcyA6ICQoPCkgOw0KICAgIERFUEVORFMgJCg8KSA6ICQoPikgOw0KICAgIFNFQVJDSCBv
biAkKD4pID0gJChTRUFSQ0hfU09VUkNFKSA7DQp9DQoNCnJ1bGUgSGRyUnVsZQ0Kew0KICAg
ICMgSGRyUnVsZSBzb3VyY2UgOiBoZWFkZXJzIDsNCg0KICAgICMgTi5CLiAgVGhpcyBydWxl
IGlzIGNhbGxlZCBkdXJpbmcgYmluZGluZywgcG90ZW50aWFsbHkgYWZ0ZXINCiAgICAjIHRo
ZSBmYXRlIG9mIG1hbnkgdGFyZ2V0cyBoYXMgYmVlbiBkZXRlcm1pbmVkLCBhbmQgbXVzdCBi
ZQ0KICAgICMgdXNlZCB3aXRoIGNhdXRpb246IGRvbid0IGFkZCBkZXBlbmRlbmNpZXMgdG8g
dW5yZWxhdGVkDQogICAgIyB0YXJnZXRzLCBhbmQgZG9uJ3Qgc2V0IHZhcmlhYmxlcyBvbiAk
KDwpLg0KDQogICAgIyBUZWxsIEphbSB0aGF0IGFueXRoaW5nIGRlcGVuZGluZyBvbiAkKDwp
IGFsc28gZGVwZW5kcyBvbiAkKD4pLA0KICAgICMgc2V0IFNFQVJDSCBzbyBKYW0gY2FuIGZp
bmQgdGhlIGhlYWRlcnMsIGJ1dCB0aGVuIHNheSB3ZSBkb24ndA0KICAgICMgY2FyZSBpZiB3
ZSBjYW4ndCBhY3R1YWxseSBmaW5kIHRoZSBoZWFkZXJzICh0aGV5IG1heSBoYXZlIGJlZW4N
CiAgICAjIHdpdGhpbiBpZmRlZnMpLA0KDQogICAgbG9jYWwgYW5nbGUtaW5jbHVkZXMgPSBb
IE1BVENIICJbPF0oW14+XSspWz5dIiA6ICQoPikgXSA7DQogICAgbG9jYWwgcXVvdGVkLWlu
Y2x1ZGVzID0gWyBNQVRDSCAiW1wiXShbXlwiXSspW1wiXSIgOiAkKD4pIF0gOw0KDQogICAg
bG9jYWwgcyA7DQoNCiAgICBpZiAkKEhEUkdSSVNUKSANCiAgICB7IA0KICAgICAgICBhbmds
ZS1pbmNsdWRlcyA9ICQoYW5nbGUtaW5jbHVkZXM6Rz0kKEhEUkdSSVNUKSkgOw0KICAgICAg
ICBxdW90ZWQtaW5jbHVkZXMgPSAkKHF1b3RlZC1pbmNsdWRlczpHPSQoSERSR1JJU1QpKSA7
DQogICAgfSANCg0KICAgIGxvY2FsIHMgPSAkKGFuZ2xlLWluY2x1ZGVzKSAkKHF1b3RlZC1p
bmNsdWRlcykgOw0KDQogICAgSU5DTFVERVMgJCg8KSA6ICQocykgOw0KICAgIE5PQ0FSRSAk
KHMpIDsNCg0KICAgICMgVGhpcyBpcyBlcXVpdmFsZW50IHRvIGRvaW5nIGEgU0VBUkNIIGZv
ciB0aGUgaGVhZGVycy4gSXQncw0KICAgICMgZG9uZSB0aGlzIHdheSB0byBnZXQgYXJvdW5k
IHRoZSBpbmFiaWxpdHkgb2YgSmFtIHRvIGRpc3Rpbmd1aXNoDQogICAgIyBmaWxlcyBmcm9t
IGRpcmVjdG9yaWVzLiBUaGF0IHdvdWxkIGNhdXNlIHByb2JsZW1zIG9mIGZhbHNlDQogICAg
IyB1cGRhdGVzIHdoZW4gYSBkaXJlY3RvcnkgaGFzIHRoZSBzYW1lIG5hbWUgYXMgYSBoZWFk
ZXIuIFRoZQ0KICAgICMgSGRyU2VhcmNoQW5kTG9jYXRlIGRvZXMgdGhlIHNlYXJjaCBtYW51
YWxseSBhbmQgc2V0cyBMT0NBVEUNCiAgICAjIG9ubHkgaWYgaXQgZmluZCBhIGZpbGUsIGln
bm9yaW5nIGRpcmVjdG9yaWVzLg0KDQogICAgZm9yIGxvY2FsIGFuZ2xlLWluY2x1ZGUgaW4g
JChhbmdsZS1pbmNsdWRlcykNCiAgICB7DQogICAgICAgIEhkclNlYXJjaEFuZExvY2F0ZSAk
KGFuZ2xlLWluY2x1ZGUpIDogJChIRFJTRUFSQ0gpIDsNCiAgICB9DQogICAgZm9yIGxvY2Fs
IHF1b3RlZC1pbmNsdWRlIGluICQocXVvdGVkLWluY2x1ZGVzKQ0KICAgIHsNCiAgICAgICAg
SGRyU2VhcmNoQW5kTG9jYXRlICQocXVvdGVkLWluY2x1ZGUpIDogJChnQklORElORygkKDwp
KTpEKSAkKEhEUlNFQVJDSCkgOw0KICAgIH0NCiAgICANCiAgICBCSU5EUlVMRSBvbiAkKHMp
ID0gcmVtZW1iZXItYmluZGluZyA7DQoNCiAgICAjIFByb3BhZ2F0ZSBvbiAkKDwpIHRvICQo
PikNCg0KICAgIEhEUlNFQVJDSCBvbiAkKHMpID0gJChIRFJTRUFSQ0gpIDsNCiAgICBIRFJT
Q0FOIG9uICQocykgPSAkKEhEUlNDQU4pIDsNCiAgICBIRFJSVUxFIG9uICQocykgPSAkKEhE
UlJVTEUpIDsNCiAgICBIRFJHUklTVCBvbiAkKHMpID0gJChIRFJHUklTVCkgOw0KfQ0KcnVs
ZSBIZHJTZWFyY2hBbmRMb2NhdGUgKCBoZWFkZXIgOiBzZWFyY2ggKiApDQp7DQogICAgaWYg
ISAkKGdCSU5ESU5HKCQoaGVhZGVyKSkpDQogICAgew0KICAgICAgICBsb2NhbCBoZWFkZXIt
Z2xvYiA9IFsgR0xPQiAiJChzZWFyY2g6Rz0pIiA6ICQoaGVhZGVyOkc9KSBdIDsNCiAgICAg
ICAgbG9jYWwgaGVhZGVyLWxvY2F0ZSA9IDsNCiAgICAgICAgZm9yIGxvY2FsIGJvdW5kLXBh
dGggaW4gJChoZWFkZXItZ2xvYikNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgISAkKGhl
YWRlci1sb2NhdGUpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaWYgISBbIEdM
T0IgIiQoYm91bmQtcGF0aCkiIDogKiBdDQogICAgICAgICAgICAgICAgew0KICAgICAgICAg
ICAgICAgICAgICBoZWFkZXItbG9jYXRlID0gJChib3VuZC1wYXRoKSA7DQogICAgICAgICAg
ICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGlmICQoaGVhZGVy
LWxvY2F0ZSkNCiAgICAgICAgew0KICAgICAgICAgICAgTE9DQVRFIG9uICQoaGVhZGVyKSA9
ICQoaGVhZGVyLWxvY2F0ZTpEKSA7DQogICAgICAgICAgICBnQklORElORygkKGhlYWRlcikp
ID0gJChoZWFkZXItbG9jYXRlKSA7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAg
ICB7DQogICAgICAgICAgICBOT1VQREFURSAkKGhlYWRlcikgOw0KICAgICAgICAgICAgTE9D
QVRFIG9uICQoaGVhZGVyKSA9ICQoRE9UKSA7DQogICAgICAgICAgICBnQklORElORygkKGhl
YWRlcikpID0gJChoZWFkZXI6Rz06Uj0kKERPVCkpIDsNCiAgICAgICAgfQ0KICAgIH0NCn0N
Cg0KIyBkd2EgNi80LzAxIC0gbW9kaWZpZWQgZm9yIGJvb3N0DQpydWxlIEluc3RhbGxJbnRv
DQp7DQogICAgbG9jYWwgaSB0IDsNCg0KICAgIHQgPSAkKD46Rz1pbnN0YWxsZWQpIDsNCg0K
ICAgIHR5cGUtREVQRU5EUyBpbnN0YWxsIDogJCh0KSA7DQogICAgREVQRU5EUyAkKHQpIDog
JCg+KSA7DQogICAgU0VBUkNIIG9uICQoPikgPSAkKFNFQVJDSF9TT1VSQ0UpIDsNCiAgICBN
YWtlTG9jYXRlICQodCkgOiAkKDwpIDsNCg0KICAgICMgQXJyYW5nZSBmb3IgamFtIHVuaW5z
dGFsbA0KDQogICAgQ2xlYW4gdW5pbnN0YWxsIDogJCh0KSA7DQoNCiAgICBmb3IgaSBpbiAk
KD4pDQogICAgew0KICAgICAgICBJbnN0YWxsICQoaTpHPWluc3RhbGxlZCkgOiAkKGkpIDsN
CiAgICB9DQoNCiAgICBDaG1vZCAkKHQpIDsNCg0KICAgIGlmICQoVU5JWCkNCiAgICB7DQog
ICAgICAgIGlmICQoT1dORVIpIHsgQ2hvd24gJCh0KSA7IE9XTkVSIG9uICQodCkgPSAkKE9X
TkVSKSA7IH0NCiAgICAgICAgaWYgJChHUk9VUCkgeyBDaGdycCAkKHQpIDsgR1JPVVAgb24g
JCh0KSA9ICQoR1JPVVApIDsgfQ0KICAgIH0NCn0NCg0KcnVsZSBJbnN0YWxsQmluDQp7DQog
ICAgbG9jYWwgX3QgPSBbIEZBcHBlbmRTdWZmaXggJCg+KSA6ICQoU1VGRVhFKSBdIDsNCg0K
ICAgIEluc3RhbGxJbnRvICQoPCkgOiAkKF90KSA7DQogICAgTU9ERSBvbiAkKF90Okc9aW5z
dGFsbGVkKSA9ICQoRVhFTU9ERSkgOw0KfQ0KDQpydWxlIEluc3RhbGxGaWxlDQp7DQogICAg
SW5zdGFsbEludG8gJCg8KSA6ICQoPikgOw0KICAgIE1PREUgb24gJCg+Okc9aW5zdGFsbGVk
KSA9ICQoRklMRU1PREUpIDsNCn0NCg0KcnVsZSBJbnN0YWxsTGliDQp7DQogICAgSW5zdGFs
bEludG8gJCg8KSA6ICQoPikgOw0KICAgIE1PREUgb24gJCg+Okc9aW5zdGFsbGVkKSA9ICQo
RklMRU1PREUpIDsNCn0NCg0KcnVsZSBJbnN0YWxsTWFuDQp7DQogICAgIyBSZWFsbHkgdGhp
cyBqdXN0IHN0cmlwcyB0aGUgLiBmcm9tIHRoZSBzdWZmaXgNCg0KICAgIGxvY2FsIGkgcyBk
IDsNCg0KICAgIGZvciBpIGluICQoPikNCiAgICB7DQogICAgICAgIHN3aXRjaCAkKGk6UykN
CiAgICAgICAgew0KICAgICAgICBjYXNlIC4xIDogcyA9IDEgOyBjYXNlIC4yIDogcyA9IDIg
OyBjYXNlIC4zIDogcyA9IDMgOw0KICAgICAgICBjYXNlIC40IDogcyA9IDQgOyBjYXNlIC41
IDogcyA9IDUgOyBjYXNlIC42IDogcyA9IDYgOw0KICAgICAgICBjYXNlIC43IDogcyA9IDcg
OyBjYXNlIC44IDogcyA9IDggOyBjYXNlIC5sIDogcyA9IGwgOw0KICAgICAgICBjYXNlIC5u
IDogcyA9IG4gOyBjYXNlIC5tYW4gOiBzID0gMSA7DQogICAgICAgIH0NCg0KICAgICAgICBk
ID0gbWFuJChzKSA7DQoNCiAgICAgICAgSW5zdGFsbEludG8gJChkOlI9JCg8KSkgOiAkKGkp
IDsNCiAgICB9DQoNCiAgICBNT0RFIG9uICQoPjpHPWluc3RhbGxlZCkgPSAkKEZJTEVNT0RF
KSA7DQp9DQoNCnJ1bGUgSW5zdGFsbFNoZWxsDQp7DQogICAgSW5zdGFsbEludG8gJCg8KSA6
ICQoPikgOw0KICAgIE1PREUgb24gJCg+Okc9aW5zdGFsbGVkKSA9ICQoU0hFTExNT0RFKSA7
DQp9DQoNCiMgZHdhIDYvNC8wMSAtIG1vZGlmaWVkIGZvciBib29zdA0KcnVsZSBMZXggIyBm
aWxlLmMgOiBmaWxlLmwNCnsNCiAgICAjIElmIHdlIGRvbid0IGhhdmUgYSB3YXkgb2Ygc3Bl
Y2lmeWluZyB0aGUgbGV4IG91dHB1dCBmaWxlLCB3ZSdsbCBoYXZlIHRvIG1vdmUgaXQNCiAg
ICAjIFdlJ2QgcmF0aGVyIG5vdCBkbyB0aGlzIGlmIHBvc3NpYmxlIGJlY2F1c2U6IGEuIGxl
eCBnZW5lcmF0ZXMgI2xpbmUNCiAgICAjIGRpcmVjdGl2ZXMgZm9yIHRoZSBvdXRwdXQgZmls
ZSB3aGljaCB3b3VsZCByZWZlciB0byB0aGUgd3JvbmcgcGxhY2UgYW5kDQogICAgIyBiLiB0
aGUgSmFtIGludm9jYXRpb24gZGlyZWN0b3J5IGNvdWxkIGJlIHJlYWQtb25seQ0KICAgIGlm
ICEgJChMRVhfT1VUUFVUKQ0KICAgIHsNCiAgICAgICAgTGV4TXYgJCg8KSA6ICQoPikgOw0K
ICAgIH0NCiAgICANCiAgICBERVBFTkRTICQoPCkgOiAkKD4pIDsNCiAgICBNYWtlTG9jYXRl
ICQoPCkgOiAkKExPQ0FURV9TT1VSQ0UpIDsNCiAgICBTRUFSQ0ggb24gJCg8KSA9ICQoTE9D
QVRFX1NPVVJDRSkgOw0KICAgIENsZWFuIGNsZWFuIDogJCg8KSA7DQp9DQoNCiMgZHdhIDYv
NC8wMSAtIG1vZGlmaWVkIGZvciBib29zdA0KcnVsZSBMaWJyYXJ5DQp7DQogICAgTGlicmFy
eUZyb21PYmplY3RzICQoPCkgOiBbIE9iamVjdHMgJCg+KSBdIDsNCn0NCg0KIyBkd2EgNi80
LzAxIC0gbW9kaWZpZWQgZm9yIGJvb3N0DQpydWxlIExpYnJhcnlGcm9tT2JqZWN0cw0Kew0K
ICAgIGxvY2FsIF9pIF9sIDsNCg0KICAgIF9sID0gJCg8OlM9JChTVUZMSUIpKSA7DQoNCiAg
ICAjIGxpYnJhcnkgZGVwZW5kcyBvbiBpdHMgbWVtYmVyIG9iamVjdHMNCg0KICAgIGlmICQo
S0VFUE9CSlMpDQogICAgew0KICAgICAgICB0eXBlLURFUEVORFMgb2JqIDogJCg+KSA7DQog
ICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAgIHR5cGUtREVQRU5EUyBsaWIgOiAkKF9s
KSA7DQogICAgfQ0KDQogICAgIyBTZXQgTE9DQVRFIGZvciB0aGUgbGlicmFyeSBhbmQgaXRz
IGNvbnRlbnRzLiAgVGhlIGJvdW5kDQogICAgIyB2YWx1ZSBzaG93cyB1cCBhcyAkKE5FRURM
SUJTKSBvbiB0aGUgTGluayBhY3Rpb25zLg0KICAgICMgRm9yIGNvbXBhdGliaWxpdHksIHdl
IG9ubHkgZG8gdGhpcyBpZiB0aGUgbGlicmFyeSBkb2Vzbid0DQogICAgIyBhbHJlYWR5IGhh
dmUgYSBwYXRoLg0KDQogICAgaWYgISAkKF9sOkQpDQogICAgew0KICAgICAgICBNYWtlTG9j
YXRlICQoX2wpICQoX2wpKCQoPjpCUykpIDogJChMT0NBVEVfVEFSR0VUKSA7DQogICAgfQ0K
DQogICAgaWYgJChOT0FSU0NBTikgDQogICAgeyANCiAgICAgICAgIyBJZiB3ZSBjYW4ndCBz
Y2FuIHRoZSBsaWJyYXJ5IHRvIHRpbWVzdGFtcCBpdHMgY29udGVudHMsDQogICAgICAgICMg
d2UgaGF2ZSB0byBqdXN0IG1ha2UgdGhlIGxpYnJhcnkgZGVwZW5kIGRpcmVjdGx5IG9uIHRo
ZQ0KICAgICAgICAjIG9uLWRpc2sgb2JqZWN0IGZpbGVzLiAgDQoNCiAgICAgICAgREVQRU5E
UyAkKF9sKSA6ICQoPikgOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICAjIElm
IHdlIGNhbiBzY2FuIHRoZSBsaWJyYXJ5LCB3ZSBtYWtlIHRoZSBsaWJyYXJ5IGRlcGVuZA0K
ICAgICAgICAjIG9uIGl0cyBtZW1iZXJzIGFuZCBlYWNoIG1lbWJlciBkZXBlbmQgb24gdGhl
IG9uLWRpc2sNCiAgICAgICAgIyBvYmplY3QgZmlsZS4NCg0KICAgICAgICBERVBFTkRTICQo
X2wpIDogJChfbCkoJCg+OkJTKSkgOw0KDQogICAgICAgIGZvciBfaSBpbiAkKD4pDQogICAg
ICAgIHsNCiAgICAgICAgICAgIERFUEVORFMgJChfbCkoJChfaTpCUykpIDogJChfaSkgOw0K
ICAgICAgICB9DQogICAgfQ0KDQogICAgQ2xlYW4gY2xlYW4gOiAkKF9sKSA7DQoNCiAgICBp
ZiAkKENSRUxJQikgeyBDcmVMaWIgJChfbCkgOiAkKD5bMV0pIDsgfQ0KDQogICAgQXJjaGl2
ZSAkKF9sKSA6ICQoPikgOw0KDQogICAgaWYgJChSQU5MSUIpIHsgUmFubGliICQoX2wpIDsg
fQ0KDQogICAgIyBJZiB3ZSBjYW4ndCBzY2FuIHRoZSBsaWJyYXJ5LCB3ZSBoYXZlIHRvIGxl
YXZlIHRoZSAubydzIGFyb3VuZC4NCg0KICAgIGlmICEgKCAkKE5PQVJTQ0FOKSB8fCAkKEtF
RVBPQkpTKSApIHsgUm1UZW1wcyAkKF9sKSA6ICQoPikgOyB9DQp9DQoNCiMgZHdhIDYvNC8w
MSAtIG1vZGlmaWVkIGZvciBib29zdCB0byBkaXNwYXRjaCB0aHJvdWdoIExpbmstYWN0aW9u
IGFuZCB0byBwYXNzDQojIHRoZSB0YXJnZXQtdHlwZSB0aHJvdWdoLiAqKiogTk9XIFVOVVNF
RCBCWSBCT09TVCAqKioNCiMNCiMgTGluayBleGVjdXRhYmxlLXRhcmdldCA6IG9iamVjdC10
YXJnZXQuLi4NCnJ1bGUgTGluaw0Kew0KICAgIE1PREUgb24gJCg8KSA9ICQoRVhFTU9ERSkg
Ow0KICAgIExpbmstYWN0aW9uICQoPCkgOiAkKD4pIDogJCgzKSA7DQogICAgQ2htb2QgJCg8
KSA7DQp9DQoNCnJ1bGUgTGlua0xpYnJhcmllcw0Kew0KICAgICMgbWFrZSBsaWJyYXJ5IGRl
cGVuZGVuY2llcyBvZiB0YXJnZXQNCiAgICAjIHNldCBORUVETElCUyB2YXJpYWJsZSB1c2Vk
IGJ5ICdhY3Rpb25zIE1haW4nDQoNCiAgICBsb2NhbCBfdCA9IFsgRkFwcGVuZFN1ZmZpeCAk
KDwpIDogJChTVUZFWEUpIF0gOw0KDQogICAgREVQRU5EUyAkKF90KSA6ICQoPjpTPSQoU1VG
TElCKSkgOw0KICAgIE5FRURMSUJTIG9uICQoX3QpICs9ICQoPjpTPSQoU1VGTElCKSkgOw0K
fQ0KDQojIGR3YSA2LzQvMDEgLSBtb2RpZmllZCBmb3IgYm9vc3QNCnJ1bGUgTWFpbg0Kew0K
ICAgIE1haW5Gcm9tT2JqZWN0cyAkKDwpIDogWyBPYmplY3RzICQoPikgXSA7DQp9DQoNCiMg
ZHdhIDYvNC8wMSAtIG1vZGlmaWVkIGZvciBib29zdA0KcnVsZSBNYWluRnJvbU9iamVjdHMN
CnsNCiAgICBsb2NhbCBfcyBfdCA7DQoNCiAgICAjIEFkZCBncmlzdCB0byBmaWxlIG5hbWVz
DQogICAgIyBBZGQgc3VmZml4IHRvIGV4ZQ0KDQogICAgX3MgPSAkKD4pIDsNCiAgICBfdCA9
IFsgRkFwcGVuZFN1ZmZpeCAkKDwpIDogJChTVUZFWEUpIF0gOw0KDQogICAgaWYgJChfdCkg
IT0gJCg8KQ0KICAgIHsNCiAgICAgICAgREVQRU5EUyAkKDwpIDogJChfdCkgOw0KICAgICAg
ICBOT1RGSUxFICQoPCkgOw0KICAgIH0NCg0KICAgICMgbWFrZSBjb21waWxlZCBzb3VyY2Vz
IGEgZGVwZW5kZW5jeSBvZiB0YXJnZXQNCg0KICAgIHR5cGUtREVQRU5EUyBleGUgOiAkKF90
KSA7DQogICAgREVQRU5EUyAkKF90KSA6ICQoX3MpIDsNCiAgICBNYWtlTG9jYXRlICQoX3Qp
IDogJChMT0NBVEVfVEFSR0VUKSA7DQoNCiAgICBDbGVhbiBjbGVhbiA6ICQoX3QpIDsNCg0K
ICAgIExpbmsgJChfdCkgOiAkKF9zKSA7DQp9DQoNCiMgZHdhIDYvNC8wMSAtIG1vZGlmaWVk
IGZvciBib29zdA0KcnVsZSBNYWtlTG9jYXRlDQp7DQogICAgaWYgJCg+KQ0KICAgIHsNCiAg
ICAgICAgTE9DQVRFIG9uICQoPCkgPSAkKD4pIDsNCg0KICAgICAgICAjIHByb3ZpZGUgYSB3
YXkgdG8gZ2V0IGJhY2sgdGhlIGxvY2F0aW9uIGZyb20gYSBidWlsdCB0YXJnZXQgbmFtZS4N
CiAgICAgICAgZ0xPQ0FURSgkKDwpKSA9ICQoPikgOyANCiAgICAgICAgDQogICAgICAgICMg
V2UgYWRkIGRpcmVjdG9yeS1ncmlzdCBoZXJlIHNvIHRoYXQgaW1wbGljaXRseS1jcmVhdGVk
IGRpcmVjdG9yeQ0KICAgICAgICAjIHRhcmdldCBuYW1lcyBkb24ndCBjb2xsaWRlIHdpdGgg
dXNlci1zcGVjaWZpZWQgdGFyZ2V0cy4NCiAgICAgICAgRGVwZW5kcyAkKDwpIDogWyBNa0Rp
ciAkKD5bMV06Rz1kaXJlY3RvcnktZ3Jpc3QpIF0gOw0KICAgIH0NCn0NCg0KIyBub3cgcmV0
dXJucyB0aGUgY3JlYXRlZCBkaXJlY3RvcnkgdGFyZ2V0IC0tIGR3YQ0KcnVsZSBNa0Rpcg0K
ew0KICAgICMgSWYgZGlyIGV4aXN0cywgZG9uJ3QgdXBkYXRlIGl0DQogICAgIyBEbyB0aGlz
IGV2ZW4gZm9yICQoRE9UKS4NCg0KICAgIGxvY2FsIGRpciA9ICQoPCkgOw0KICAgIGlmICQo
TlQpDQogICAgew0KICAgICAgICAjIG1ha2Ugc3VyZSBzbGFzaGVzIGFsbCBnbyB0aGUgcmln
aHQgd2F5DQogICAgICAgIGRpciA9IFsgc3BsaXQtcGF0aCAkKGRpcikgXSA7DQogICAgICAg
IGRpciA9ICQoZGlyOko9JChTTEFTSCkpIDsNCiAgICB9DQogICAgDQogICAgbG9jYWwgcmVz
dWx0ID0gJChkaXIpIDsNCiAgICANCiAgICB3aGlsZSAkKGRpcikgJiYgKCAkKGRpcikgIT0g
JChET1QpICkgJiYgISAkKCQoZGlyKS1ta2RpcikgDQogICAgew0KICAgICAgICAjIENoZWVz
eSBnYXRlIHRvIHByZXZlbnQgbXVsdGlwbGUgaW52b2NhdGlvbnMgb24gc2FtZSBkaXINCiAg
ICAgICAgIyBNa0RpcjEgaGFzIHRoZSBhY3Rpb25zIA0KICAgICAgICAjIEFycmFuZ2UgZm9y
IGphbSBkaXJzDQoNCiAgICAgICAgJChkaXIpLW1rZGlyID0gdHJ1ZSA7DQogICAgICAgIE1r
RGlyMSAkKGRpcikgOw0KICAgICAgICBEZXBlbmRzIGRpcnMgOiAkKGRpcikgOw0KICAgICAg
ICBOT1VQREFURSAkKGRpcikgOw0KDQoNCiAgICAgICAgIyBSZWN1cnNpdmVseSBtYWtlIHBh
cmVudCBkaXJlY3Rvcmllcy4NCiAgICAgICAgIyAkKGRpcjpQKSA9ICQoZGlyKSdzIHBhcmVu
dCwgJiB3ZSByZWN1cnNlIHVudGlsIHJvb3QNCg0KICAgICAgICBsb2NhbCBzID0gJChkaXI6
UCkgOw0KDQogICAgICAgIGlmICQoTlQpDQogICAgICAgIHsNCiAgICAgICAgICAgIHN3aXRj
aCAkKHMpDQogICAgICAgICAgICB7DQogICAgICAgICAgICBjYXNlICo6ICAgOiBzID0gOw0K
ICAgICAgICAgICAgY2FzZSAqOlxcIDogcyA9IDsNCiAgICAgICAgICAgIH0NCiAgICAgICAg
fQ0KDQogICAgICAgIGlmICQocykgJiYgJChzKSAhPSAkKGRpcikNCiAgICAgICAgew0KICAg
ICAgICAgICAgRGVwZW5kcyAkKGRpcikgOiAkKHMpIDsNCiAgICAgICAgICAgIGRpciA9ICQo
cykgOw0KICAgICAgICB9DQogICAgICAgIGVsc2UgDQogICAgICAgIHsNCiAgICAgICAgICAg
IGRpciA9IDsgIyBzdG9wIGl0ZXJhdGluZw0KICAgICAgICAgICAgaWYgJChzKSB7IE5PVEZJ
TEUgJChzKSA7IH0NCiAgICAgICAgfQ0KICAgIH0NCiAgICByZXR1cm4gJChyZXN1bHQpIDsN
Cn0NCg0KIyBkd2EgNi80LzAxIC0gbW9kaWZpZWQgZm9yIGJvb3N0DQpydWxlIE9iamVjdA0K
ew0KICAgIGxvY2FsIGggOw0KDQogICAgdHlwZS1ERVBFTkRTIG9iaiA6ICQoPCkgOw0KICAg
IHNldC10YXJnZXQtdmFyaWFibGVzICQoPCkgOw0KICAgIA0KICAgICMgTWFrZSBpdCBwb3Nz
aWJsZSB0byBjb21waWxlIGEgZ2l2ZW4gc291cmNlIGZpbGUgYnkgZ2l2aW5nIGl0cw0KICAg
ICMgb2JqZWN0IGZpbGUgbmFtZSBhcyBhIHRhcmdldC4NCiAgICB0eXBlLURFUEVORFMgJCg8
Okc9KSA6ICQoPCkgOyANCiAgICANCiAgICAjIGxvY2F0ZSBvYmplY3QgYW5kIHNlYXJjaCBm
b3Igc291cmNlLCBpZiB3YW50ZWQNCg0KICAgIENsZWFuIGNsZWFuIDogJCg8KSA7DQoNCiAg
ICBNYWtlTG9jYXRlICQoPCkgOiAkKExPQ0FURV9UQVJHRVQpIDsNCiAgICBTRUFSQ0ggb24g
JCg+KSA9ICQoU0VBUkNIX1NPVVJDRSkgOw0KDQogICAgIyBTYXZlIEhEUlMgZm9yIC1JJChI
RFJTKSBvbiBjb21waWxlLg0KICAgICMgV2Ugc2hvdWxkbid0IG5lZWQgLUkkKFNFQVJDSF9T
T1VSQ0UpIGFzIGNjIGNhbiBmaW5kIGhlYWRlcnMNCiAgICAjIGluIHRoZSAuYyBmaWxlJ3Mg
ZGlyZWN0b3J5LCBidXQgZ2VuZXJhdGVkIC5jIGZpbGVzIChmcm9tDQogICAgIyB5YWNjLCBs
ZXgsIGV0YykgYXJlIGxvY2F0ZWQgaW4gJChMT0NBVEVfVEFSR0VUKSwgcG9zc2libHkNCiAg
ICAjIGRpZmZlcmVudCBmcm9tICQoU0VBUkNIX1NPVVJDRSkuDQoNCiAgICAjIFVzZSB1bmlx
dWUgdG8gY2xlYW4gdXAgY29uZnVzaW5nIGR1cGxpY2F0ZXMgYSBiaXQNCiAgICBIRFJTIG9u
ICQoPCkgPSBbIHVuaXF1ZSAkKExPQ0FURV9TT1VSQ0UpICQoSERSUykgXSA7DQoNCiAgICAj
IFNldCBTVERIRFJTIG9uIHRoZSBvYmplY3Qgc28gdGhhdCBtdWx0aS1jb21waWxlciBidWls
ZHMgd2lsbCBzZWFyY2ggZm9yDQogICAgIyBoZWFkZXJzIGluIHRoZSByaWdodCBwbGFjZXMu
IA0KICAgIFNUREhEUlMgb24gJCg8KSA9ICQoU1RESERSUykgOw0KICAgIFNZU0hEUlMgb24g
JCg8KSA9ICQoU1lTSERSUykgOw0KDQogICAgIyBoYW5kbGUgI2luY2x1ZGVzIGZvciBzb3Vy
Y2U6IEphbSBzY2FucyBmb3IgaGVhZGVycyB3aXRoDQogICAgIyB0aGUgcmVnZXhwIHBhdHRl
cm4gJChIRFJTQ0FOKSBhbmQgdGhlbiBpbnZva2VzICQoSERSUlVMRSkNCiAgICAjIHdpdGgg
dGhlIHNjYW5uZWQgZmlsZSBhcyB0aGUgdGFyZ2V0IGFuZCB0aGUgZm91bmQgaGVhZGVycw0K
ICAgICMgYXMgdGhlIHNvdXJjZXMuICBIRFJTRUFSQ0ggaXMgdGhlIHZhbHVlIG9mIFNFQVJD
SCB1c2VkIGZvcg0KICAgICMgdGhlIGZvdW5kIGhlYWRlciBmaWxlcy4gIEZpbmFsbHksIGlm
IGphbSBtdXN0IGRlYWwgd2l0aCANCiAgICAjIGhlYWRlciBmaWxlcyBvZiB0aGUgc2FtZSBu
YW1lIGluIGRpZmZlcmVudCBkaXJlY3RvcmllcywNCiAgICAjIHRoZXkgY2FuIGJlIGRpc3Rp
bmd1aXNoZWQgd2l0aCBIRFJHUklTVC4NCg0KICAgICMgJChoKSBpcyB3aGVyZSBjYyBmaXJz
dCBsb29rcyBmb3IgI2luY2x1ZGUgImZvby5oIiBmaWxlcy4NCiAgICAjIElmIHRoZSBzb3Vy
Y2UgZmlsZSBpcyBpbiBhIGRpc3RhbnQgZGlyZWN0b3J5LCBsb29rIHRoZXJlLg0KICAgICMg
RWxzZSwgbG9vayBpbiAiIiAodGhlIGN1cnJlbnQgZGlyZWN0b3J5KS4NCg0KICAgIGlmICQo
U0VBUkNIX1NPVVJDRSkNCiAgICB7DQogICAgICAgIGggPSAkKFNFQVJDSF9TT1VSQ0UpJChT
TEFTSCkkKD46RCkgOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICBoID0gJCg+
OkQpIDsNCiAgICB9DQoNCiAgICBIRFJSVUxFIG9uICQoPikgPSBIZHJSdWxlIDsNCiAgICBI
RFJTQ0FOIG9uICQoPikgPSAkKEhEUlBBVFRFUk4pIDsNCiAgICBIRFJTRUFSQ0ggb24gJCg+
KSA9ICQoSERSUykgJChoKSAkKFNUREhEUlMpICQoU1lTSERSUykgOw0KICAgIEhEUkdSSVNU
IG9uICQoPikgPSAkKEhEUkdSSVNUKSA7DQoNCiAgICAjIGlmIHNvdXJjZSBpcyBub3QgLmMs
IGdlbmVyYXRlIC5jIHdpdGggc3BlY2lmaWMgcnVsZQ0KDQogICAgIyBtYWtlIHN1cmUgd2Ug
ZG9uJ3QgZ2VuZXJhdGUgdGhlIHNhbWUgb2JqZWN0IHR3aWNlLg0KICAgIGlmICEgJChnR0VO
RVJBVEVEX1RBUkdFVCgkKDwpKSkNCiAgICB7DQogICAgICAgIHN3aXRjaCAkKD46UykNCiAg
ICAgICAgew0KICAgICAgICAgICAgY2FzZSAuYXNtIDogQXMgJCg8KSA6ICQoPikgOw0KICAg
ICAgICAgICAgY2FzZSAuYyA6ICAgQ2MgJCg8KSA6ICQoPikgOw0KICAgICAgICAgICAgY2Fz
ZSAuQyA6ICAgQysrICQoPCkgOiAkKD4pIDsNCiAgICAgICAgICAgIGNhc2UgLmNjIDogIEMr
KyAkKDwpIDogJCg+KSA7DQogICAgICAgICAgICBjYXNlIC5jcHAgOiBDKysgJCg8KSA6ICQo
PikgOw0KICAgICAgICAgICAgY2FzZSAuY3h4IDogQysrICQoPCkgOiAkKD4pIDsNCiAgICAg
ICAgICAgIGNhc2UgLmYgOiAgIEZvcnRyYW4gJCg8KSA6ICQoPikgOw0KICAgICAgICAgICAg
Y2FzZSAucyA6ICAgQXMgJCg8KSA6ICQoPikgOw0KICAgICAgICAgICAgY2FzZSAqIDogICAg
VXNlck9iamVjdCAkKDwpIDogJCg+KSA7DQogICAgICAgIH0NCiAgICAgICAgZ0dFTkVSQVRF
RF9UQVJHRVQoJCg8KSkgPSB0cnVlIDsNCiAgICB9DQp9DQogICAgDQojIGR3YSA2LzQvMDEg
LSBhZGRlZCBmb3IgYm9vc3QNCiMgUmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIG9iamVjdCBm
aWxlIHRhcmdldCBuYW1lcyBnaXZlbiBhIGxpc3Qgb2Ygc291cmNlIGZpbGUNCiMgdGFyZ2V0
IG5hbWVzLg0KcnVsZSBvYmplY3QtbmFtZSAjIHNvdXJjZXMuLi4NCnsNCiAgICByZXR1cm4g
JCg8OkQ9OlM9JChTVUZPQkopOkc9JChUQVJHRVRfR1JJU1QpKSA7DQp9DQoNCiMgZHdhIDYv
NC8wMSAtIGFkZGVkIGZvciBib29zdA0KIyBCdWlsZCBhIGdlbmVyYXRlZCBzb3VyY2UgZmls
ZSBmcm9tIGlucHV0LXRhcmdldCwgYW5kIGJ1aWxkIHdoYXRldmVyIHRoYXQgZmlsZSBnZW5l
cmF0ZXMuDQojIFJldHVybiBhIGxpc3Qgb2YgYWxsIG9iamVjdCB0YXJnZXQgbmFtZXMgdWx0
aW1hdGVseSBnZW5lcmF0ZWQgYnkgcmVjdXJzaXZlbHkNCiMgYnVpbGRpbmcgdGhlIHByb2R1
Y3RzIG9mIGlucHV0LXRhcmdldC4NCnJ1bGUgZ2VuLXNvdXJjZSAjIHNvdXJjZSA9PiBvYmpl
Y3QtZmlsZS1uYW1lcw0Kew0KICAgIGxvY2FsIHN1ZmZpeCA9IC5jIDsNCiAgICBpZiAkKDw6
UykgaW4gLmxwcCAueXBwDQogICAgew0KICAgICAgICBzdWZmaXggPSAuY3BwIDsNCiAgICB9
DQogICAgDQogICAgbG9jYWwgaW1tZWRpYXRlLXRhcmdldCA9ICQoPDpEPTpTPSQoc3VmZml4
KTpHPSQoU09VUkNFX0dSSVNUKSkgOw0KICAgICMgbWFrZSBzdXJlIHdlIGRvbid0IHJlZ2Vu
ZXJhdGUgc291cmNlcyB0d2ljZS4NCiAgICBpZiAhICQoZ0dFTkVSQVRFRF9UQVJHRVQoJChp
bW1lZGlhdGUtdGFyZ2V0KSkpDQogICAgew0KICAgICAgICBzd2l0Y2ggJCg8OlMpDQogICAg
ICAgIHsNCiAgICAgICAgIGNhc2UgLmwqIDogTGV4ICQoaW1tZWRpYXRlLXRhcmdldCkgOiAk
KDwpIDsgU0VBUkNIIG9uICQoPCkgPSAkKFNFQVJDSF9TT1VSQ0UpIDsNCiAgICAgICAgIGNh
c2UgLnkqIDogWWFjYyAkKGltbWVkaWF0ZS10YXJnZXQpIDogJCg8KSA7IFNFQVJDSCBvbiAk
KDwpID0gJChTRUFSQ0hfU09VUkNFKSA7DQogICAgICAgIH0NCiAgICAgICAgZ0dFTkVSQVRF
RF9UQVJHRVQoJChpbW1lZGlhdGUtdGFyZ2V0KSkgPSB0cnVlIDsNCiAgICB9DQogICAgcmV0
dXJuIFsgT2JqZWN0cyAkKGltbWVkaWF0ZS10YXJnZXQpIF0gOw0KfQ0KDQojIGR3YSA2LzQv
MDEgLSBhZGRlZCBmb3IgYm9vc3QNCiMgQSBsaXN0IG9mIGFsbCBmaWxlIGV4dGVuc2lvbnMg
d2hpY2ggZ2VuZXJhdGUgc291cmNlIGZpbGVzIHdoZW4gYnVpbHQuDQpTT1VSQ0VfR0VORVJB
VElOR19FWFRFTlNJT05TID89IC5scHAgLnlwcCAubCAueSA7DQoNCiMgZHdhIDYvNC8wMSAt
IG1vZGlmaWVkIGZvciBib29zdA0KIyBCdWlsZCBhbGwgb2JqZWN0IGZpbGVzIGdlbmVyYXRl
ZCBieSBidWlsZGluZyAkKDwpLCBhbmQgcmV0dXJuIGEgbGlzdCBvZiB0aGUNCiMgbmFtZXMg
b2YgdGhvc2Ugb2JqZWN0IGZpbGUgdGFyZ2V0cy4NCnJ1bGUgT2JqZWN0cw0Kew0KICAgIGxv
Y2FsIF9pIF9uIF9yIDsNCg0KDQogICAgZm9yIF9pIGluICQoPCkNCiAgICB7DQogICAgICAg
IGlmICQoX2k6UykgaW4gJChTT1VSQ0VfR0VORVJBVElOR19FWFRFTlNJT05TKQ0KICAgICAg
ICB7DQogICAgICAgICAgICBfbiA9IFsgZ2VuLXNvdXJjZSAkKF9pKSBdIDsNCiAgICAgICAg
fQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAgIF9uID0gWyBvYmplY3Qt
bmFtZSAkKF9pKSBdIDsNCiAgICAgICAgICAgIE9iamVjdCAkKF9uKSA6ICQoX2kpIDsNCiAg
ICAgICAgfQ0KICAgICAgICBfciArPSAkKF9uKSA7DQogICAgfQ0KICAgIA0KICAgIHJldHVy
biAkKF9yKSA7DQp9DQoNCnJ1bGUgUm1UZW1wcw0Kew0KICAgIFRFTVBPUkFSWSAkKD4pIDsN
Cn0NCg0KcnVsZSBTZXR1aWQNCnsNCiAgICBNT0RFIG9uIFsgRkFwcGVuZFN1ZmZpeCAkKDwp
IDogJChTVUZFWEUpIF0gPSA0NzExIDsNCn0NCg0KIyBkd2EgNi80LzAxIC0gbW9kaWZpZWQg
Zm9yIGJvb3N0DQpydWxlIFNoZWxsDQp7DQogICAgdHlwZS1ERVBFTkRTIHNoZWxsIDogJCg8
KSA7DQogICAgREVQRU5EUyAkKDwpIDogJCg+KSA7DQogICAgU0VBUkNIIG9uICQoPikgPSAk
KFNFQVJDSF9TT1VSQ0UpIDsNCiAgICBNT0RFIG9uICQoPCkgPSAkKFNIRUxMTU9ERSkgOw0K
ICAgIENsZWFuIGNsZWFuIDogJCg8KSA7DQogICAgQ2htb2QgJCg8KSA7DQp9DQoNCiMgZHdh
IDYvNy8wMSAtIGFkZGVkIGZvciBib29zdA0KIyBzdWJwcm9qZWN0IHBhdGgNCiMNCiMgSW52
b2tlcyBTdWJEaXIgd2l0aCBhIHBhdGggZGVzY3JpcHRpb24NCnJ1bGUgc3VicHJvamVjdA0K
ew0KICAgIFN1YkRpciBUT1AgWyBzcGxpdC1wYXRoICQoPCkgXSA7DQp9DQoNCiMgZHdhIDYv
MTgvMDEgLSBhZGRlZCBmb3IgYm9vc3QNCiMgcHJvamVjdC1yb290DQojDQojIERlY2xhcmVz
IHRoaXMgZGlyZWN0b3J5IHRvIGJlIHRoZSBwcm9qZWN0IHJvb3QuDQpydWxlIHByb2plY3Qt
cm9vdCAoICkNCnsNCiAgICBsb2NhbCBwcm9qZWN0LWxvY2F0aW9uIDsNCiAgICBpZiAkKGdU
T1ApDQogICAgew0KICAgICAgICBwcm9qZWN0LWxvY2F0aW9uID0gWyByb290LXBhdGhzICQo
JChnVE9QKSkgOiBbIFBXRCBdIF0gOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAg
ICBwcm9qZWN0LWxvY2F0aW9uID0gWyBQV0QgXSA7DQogICAgfQ0KICAgIGxvY2FsIG5hbWUg
Ow0KICAgIG5hbWUgPSAkKFBST0pFQ1QoJChwcm9qZWN0LWxvY2F0aW9uKSkpIDsNCiAgICBu
YW1lID89ICQocHJvamVjdC1sb2NhdGlvbjpCKSA7DQogICAgUFJPSkVDVCA9ICQobmFtZSkg
Ow0KICAgIGdQUk9KRUNUKCQobmFtZSkpID0gJChwcm9qZWN0LWxvY2F0aW9uKSA7DQogICAg
U3ViRGlyIFRPUCA7DQp9DQoNCiMgZ3JhZmlrLg0KIw0KIyBEZWNsYXJlIGVpdGhlciB5b3Vy
IG93biBwcm9qZWN0LCBvciBhbiBleHRlcm5hbCBwcm9qZWN0Lg0KIw0KcnVsZSBwcm9qZWN0
ICggbmFtZSA6IGxvY2F0aW9uID8gKQ0Kew0KICAgIGlmICEgJChsb2NhdGlvbikNCiAgICB7
DQogICAgICAgIGdQUk9KRUNUKCQobmFtZSkpID0gJChnUFJPSkVDVCgkKFBST0pFQ1QpKSkg
Ow0KICAgICAgICBQUk9KRUNUKCQoZ1BST0pFQ1QoJChuYW1lKSkpKSA9ICQobmFtZSkgOw0K
ICAgICAgICBQUk9KRUNUID0gJChuYW1lKSA7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQog
ICAgICAgIGdQUk9KRUNUKCQobmFtZSkpID0gWyByb290LXBhdGhzICQobG9jYXRpb24pIDog
WyByb290LXBhdGhzICQoJChnVE9QKSkgOiBbIFBXRCBdIF0gXSA7DQogICAgICAgIGxvY2Fs
IFsgcHJvdGVjdC1zdWJwcm9qZWN0IF0gOw0KICAgICAgICBlbnRlci1zdWJwcm9qZWN0IEAk
KG5hbWUpIDsNCiAgICB9DQp9DQoNCiMgZ3JhZmlrLg0KIw0KIyBSZXR1cm5zIHRoZSBzZXQg
b2YgdmFycyB0byBsb2NhbGl6ZSB0byBwcmV2ZW50IGNoYW5nZXMgZnJvbQ0KIyBhZmZlY3Rp
bmcgdGhlIGN1cnJlbnQgcHJvamVjdC4gQWxzbyByZW1lbWJlcnMgdGhlIGN1cnJlbnQgdmFs
dWVzDQojIHRvIHVzZSBieSBlbnRlci1zdWJwcm9qZWN0IHRvIHNldCB0aGUgZGVmYXVsdHMg
Zm9yIHRoZSBuZXcgdmFycy4NCiMNCnJ1bGUgcHJvdGVjdC1zdWJwcm9qZWN0ICggKQ0Kew0K
ICAgIC5UT1AgPSAkKFRPUCkgOw0KICAgIC5UT1BfVE9LRU5TID0gJChUT1BfVE9LRU5TKSA7
DQogICAgLmdUT1AgPSAkKGdUT1ApIDsNCiAgICAuUFJPSkVDVCA9ICQoUFJPSkVDVCkgOw0K
ICAgIHJldHVybiBUT1AgVE9QX1RPS0VOUyBnVE9QIFBST0pFQ1QgWyBwcm90ZWN0LXN1YmRp
ciBdIDsNCn0NCg0KIyBncmFmaWsuDQojDQojIFNldHMgdXAgdGhlIGVudmlyb25tZW50IGFz
IGlmIHRoZSBjb250ZXh0IGlzIGFub3RoZXIgcHJvamVjdCBpbg0KIyBwcmVwYXJhdGlvbiB0
byBpbmNsdWRlIHRoZSBleHRlcm5hbCBwcm9qZWN0cyB0YXJnZXRzLiBUaGlzIGFsc28NCiMg
d29ya3MgZm9yIHJlZmVyaW5nIHRvIHRoZSBjdXJyZW50IHByb2plY3QuDQojDQpydWxlIGVu
dGVyLXN1YnByb2plY3QgKCBwcm9qZWN0LXBhdGggKQ0Kew0KICAgIFRPUCA9ICQoLlRPUCkg
Ow0KICAgIFRPUF9UT0tFTlMgPSAkKC5UT1BfVE9LRU5TKSA7DQogICAgZ1RPUCA9ICQoLmdU
T1ApIDsNCiAgICBQUk9KRUNUID0gJCguUFJPSkVDVCkgOw0KICAgIA0KICAgIGxvY2FsIHBy
b2plY3QtbmFtZSA9IFsgTUFUQ0ggIl5AKFteL1xcXSspIiA6ICQocHJvamVjdC1wYXRoKSBd
IDsNCiAgICBwcm9qZWN0LW5hbWUgPz0gJChQUk9KRUNUKSA7DQogICAgcHJvamVjdC1uYW1l
ID89ICIiIDsNCiAgICBsb2NhbCBwcm9qZWN0LXN1YmRpciA9IFsgTUFUQ0ggIl5AW14vXFxd
K1svXFxdKC4qKSIgOiAkKHByb2plY3QtcGF0aCkgXSA7DQogICAgbG9jYWwgcHJvamVjdC10
b3AgOw0KICAgIA0KICAgIGlmICQocHJvamVjdC1uYW1lKQ0KICAgIHsNCiAgICAgICAgcHJv
amVjdC10b3AgPSBbIHNwbGl0LXBhdGggJChnUFJPSkVDVCgkKHByb2plY3QtbmFtZSkpKSBd
IDsNCiAgICAgICAgaWYgJChwcm9qZWN0LXN1YmRpcikNCiAgICAgICAgew0KICAgICAgICAg
ICAgcHJvamVjdC10b3AgKz0NCiAgICAgICAgICAgICAgICBbIHNwbGl0LXBhdGggWyByZWxh
dGl2ZS1wYXRoICQocHJvamVjdC1zdWJkaXIpIF0gXQ0KICAgICAgICAgICAgICAgIFsgc3Bs
aXQtcGF0aCBbIEZTdWJEaXIgWyBzcGxpdC1wYXRoIFsgcmVsYXRpdmUtcGF0aCAkKHByb2pl
Y3Qtc3ViZGlyKSBdIF0gXSBdIDsNCiAgICAgICAgfQ0KICAgICAgICBUT1AgPSBbIGpvaW4t
cGF0aCAkKHByb2plY3QtdG9wKSBdIDsNCiAgICAgICAgVE9QX1RPS0VOUyA9ICQocHJvamVj
dC10b3ApIDsNCiAgICAgICAgZ1RPUCA9IFRPUCA7DQogICAgICAgIFBST0pFQ1QgPSAkKHBy
b2plY3QtbmFtZSkgOw0KICAgIH0NCiAgICBwcm9qZWN0LXN1YmRpciA/PSAuIDsNCiAgICAN
CiAgICBzdWJwcm9qZWN0ICQocHJvamVjdC1zdWJkaXIpIDsNCiAgICANCiAgICByZXR1cm4g
JChwcm9qZWN0LW5hbWUpICQocHJvamVjdC1zdWJkaXIpIDsNCn0NCg0KIyBkd2EgNi83LzAx
IC0gYWRkZWQgZm9yIGJvb3N0DQojIHN1YmluY2x1ZGUgcGF0aC4uLg0KIw0KIyBJbnZva2Vz
IFN1YkluY2x1ZGUgZm9yIGVhY2ggcGF0aA0KcnVsZSBzdWJpbmNsdWRlDQp7DQogICAgbG9j
YWwgZCA7DQogICAgZm9yIGQgaW4gJCg8KQ0KICAgIHsNCiAgICAgICAgU3ViSW5jbHVkZSBU
T1AgWyBzcGxpdC1wYXRoICQoZCkgXSA7DQogICAgfQ0KfQ0KDQojIGR3YSAxMC82LzAxIC0g
YWRkZWQgZm9yIGJvb3N0DQojDQojIHBhdGgtZ2xvYmFsIHZhcmlhYmxlLW5hbWUgOiBwYXRo
Li4uIDsNCiMNCiMgaWYgJCh2YXJpYWJsZS1uYW1lKSBpcyB1bnNldCwgc2V0cyB2YXJpYWJs
ZS1uYW1lIHRvIHBhdGguLi4NCiMgdmFyaWFibGUtbmFtZSB3aWxsIGJlIGFkanVzdGVkIG9u
IGEgcGVyLXN1YnByb2plY3QgYmFzaXMgdG8gcmVmZXIgdG8gdGhlIHNhbWUgcGF0aC4NCnJ1
bGUgcGF0aC1nbG9iYWwNCnsNCiAgICAkKDwpID89ICQoPikgOw0KICAgIGdQQVRIX0dMT0JB
TF9WQUxVRSgkKDwpKSA9ICQoJCg8KSkgOw0KICAgIA0KICAgIGlmICEgKCAkKDwpIGluICQo
Z1BBVEhfR0xPQkFMUykgKQ0KICAgIHsNCiAgICAgICAgZ1BBVEhfR0xPQkFMUyArPSAkKDwp
IDsNCiAgICB9DQp9DQoNCiMgZHdhIDYvNC8wMSAtIG1vZGlmaWVkIGZvciBib29zdA0KcnVs
ZSBTdWJEaXINCnsNCiAgICBsb2NhbCBfciA7DQoNCiAgICAjDQogICAgIyBTdWJEaXIgVE9Q
IGQxIFsgLi4uIF0NCiAgICAjDQogICAgIyBUaGlzIGludHJvZHVjZXMgYSBKYW1maWxlIHRo
YXQgaXMgcGFydCBvZiBhIHByb2plY3QgdHJlZSANCiAgICAjIHJvb3RlZCBhdCAkKFRPUCku
ICBJdCAob25seSBvbmNlKSBpbmNsdWRlcyB0aGUgcHJvamVjdC1zcGVjaWZpYw0KICAgICMg
cnVsZXMgZmlsZSAkKFRPUCkvSmFtcnVsZXMgYW5kIHRoZW4gc2V0cyBzZWFyY2ggJiBsb2Nh
dGUgc3R1ZmYuDQogICAgIw0KICAgICMgSWYgdGhlIHZhcmlhYmxlICQoVE9QUlVMRVMpIGlz
IHNldCAod2hlcmUgVE9QIGlzIHRoZSBmaXJzdCBhcmcgDQogICAgIyB0byBTdWJEaXIpLCB0
aGF0IGZpbGUgaXMgaW5jbHVkZWQgaW5zdGVhZCBvZiAkKFRPUCkvSmFtcnVsZXMuDQogICAg
Iw0KICAgICMgZDEgLi4uIGFyZSB0aGUgZGlyZWN0b3J5IGVsZW1lbnRzIHRoYXQgbGVhZCB0
byB0aGlzIGRpcmVjdG9yeSANCiAgICAjIGZyb20gJChUT1ApLiAgV2UgY29uc3RydWN0IHRo
ZSBzeXN0ZW0gZGVwZW5kZW50IHBhdGggZnJvbSB0aGVzZQ0KICAgICMgZGlyZWN0b3J5IGVs
ZW1lbnRzIGluIG9yZGVyIHRvIHNldCBzZWFyY2gmbG9jYXRlIHN0dWZmLg0KICAgICMgDQoN
CiAgICBpZiAhICQoJCg8WzFdKSkNCiAgICB7DQogICAgICAgIGlmICEgJCg8WzFdKQ0KICAg
ICAgICB7DQogICAgICAgICAgICBFWElUIFN1YkRpciBzeW50YXggZXJyb3IgOw0KICAgICAg
ICB9DQoNCiAgICAgICAgJCg8WzFdKSA9IFsgRlN1YkRpciAkKDxbMi1dKSBdIDsNCiAgICAg
ICAgJCg8WzFdKV9UT0tFTlMgPSBbIHNwbGl0LXBhdGggJCgkKDxbMV0pKSBdIDsNCiAgICAg
ICAgZ1RPUCA9ICQoPFsxXSkgOyAjICBub3Qgc3VyZSB3aHkgc29tZW9uZSB3b3VsZCB3YW50
IHRvIHVzZSBhbnl0aGluZw0KICAgICAgICAgICAgICAgICAgICAgICAgICMgb3RoZXIgdGhh
biBUT1AsIGJ1dCBqdXN0IGluIGNhc2UuLi4NCiAgICB9DQoNCiAgICAjDQogICAgIyBJZiAk
KFRPUCkvSmFtcnVsZXMgaGFzbid0IGJlZW4gaW5jbHVkZWQsIGRvIHNvLg0KICAgICMNCg0K
ICAgIGxvY2FsIHRvcCA9IFsgcm9vdC1wYXRocyAkKCQoZ1RPUCkpIDogWyBQV0QgXSBdIDsN
CiAgICBpZiAhICQoZ0lOQ0xVREVEKCQoSkFNUlVMRVM6Uj0kKHRvcCkpKSkNCiAgICB7DQog
ICAgICAgICMgR2F0ZWQgZW50cnkuDQoNCiAgICAgICAgZ0lOQ0xVREVEKCQoSkFNUlVMRVM6
Uj0kKHRvcCkpKSA9IFRSVUUgOw0KDQogICAgICAgICMgSW5jbHVkZSBpdC4NCg0KICAgICAg
ICBwcm9qZWN0LXJvb3QgOw0KICAgICAgICBpbmNsdWRlICQoSkFNUlVMRVM6Uj0kKHRvcCkp
IDsNCiAgICB9DQoNCiAgICAjIEdldCBwYXRoIHRvIGN1cnJlbnQgZGlyZWN0b3J5IGZyb20g
cm9vdCB1c2luZyBTdWJEaXIuDQogICAgIyBTYXZlIGRpciB0b2tlbnMgZm9yIG90aGVyIHBv
dGVudGlhbCB1c2VzLg0KICAgIFNVQkRJUl9UT0tFTlMgPSAkKDxbMi1dKSA7DQogICAgDQog
ICAgIyBUaGlzIGFsbG93cyB1cyB0byBkZXRlcm1pbmUgd2hldGhlciB3ZSdyZSBpbiB0aGUg
ZGlyZWN0b3J5IHdoZXJlIGphbSB3YXMNCiAgICAjIGludm9rZWQgZnJvbSBzbyB0aGF0IHdl
IGNhbiBtYWtlIGxvY2FsbHkgbmFtZWQgdGFyZ2V0cw0KICAgIGdJTlZPQ0FUSU9OX1NVQkRJ
Ul9UT0tFTlMgPz0gJChTVUJESVJfVE9LRU5TKSA7DQogICAgZ0lOVk9DQVRJT05fU1VCRElS
X1RPS0VOUyA/PSAkKERPVCkgOw0KDQogICAgIyBTVUJESVIgaXMgdGhlIHBhdGggZnJvbSB0
aGUgaW52b2NhdGlvbiBkaXJlY3RvcnkgdG8gdGhlIHN1YnByb2plY3QNCiAgICAjIGRpcmVj
dG9yeS4NCiAgICBTVUJESVIgPSBbIHRva2Vucy10by1zaW1wbGUtcGF0aCAkKCQoZ1RPUClf
VE9LRU5TKSAgJChTVUJESVJfVE9LRU5TKSBdIDsNCg0KICAgIFNFQVJDSF9TT1VSQ0UgPSAk
KFNVQkRJUikgOw0KDQogICAgIyBUaGlzIHdpbGwgc3RyaXAgb2ZmIGFueSBsZWFkaW5nIGRv
dCBvbiBTVUJESVJfVE9LRU5TDQogICAgbG9jYWwgbm9kb3Rfc3ViZGlyID0gWyBzaW1wbGlm
eS1wYXRoLXRva2VucyAkKFNVQkRJUl9UT0tFTlMpIF0gOw0KDQogICAgaWYgJChBTExfTE9D
QVRFX1RBUkdFVCkgJiYgISAkKGZpcnN0X0FMTF9MT0NBVEVfVEFSR0VUKQ0KICAgIHsNCiAg
ICAgICAgbm9ybWFsaXplZF9BTExfTE9DQVRFX1RBUkdFVCA9IFsgam9pbi1wYXRoICQoJChn
VE9QKSkgJChBTExfTE9DQVRFX1RBUkdFVCkgXSA7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7
DQogICAgICAgIG5vcm1hbGl6ZWRfQUxMX0xPQ0FURV9UQVJHRVQgPz0gWyBqb2luLXBhdGgg
JCgkKGdUT1ApKSAkKEFMTF9MT0NBVEVfVEFSR0VUKSBdIDsNCiAgICB9DQogICAgZmlyc3Rf
QUxMX0xPQ0FURV9UQVJHRVQgPz0gJChBTExfTE9DQVRFX1RBUkdFVCkgOw0KICAgIExPQ0FU
RV9TT1VSQ0UgPSBbIEZEaXJOYW1lICQobm9ybWFsaXplZF9BTExfTE9DQVRFX1RBUkdFVCkg
JChCSU5fRElSRUNUT1JZKSAkKFBST0pFQ1QpICQobm9kb3Rfc3ViZGlyKSBdIDsNCiAgICBM
T0NBVEVfVEFSR0VUID0gJChMT0NBVEVfU09VUkNFKSA7DQogICAgSENBQ0hFRklMRSA9IFsg
RkRpck5hbWUgJChub3JtYWxpemVkX0FMTF9MT0NBVEVfVEFSR0VUKSAkKEJJTl9ESVJFQ1RP
UlkpIC5qYW1kZXBzIF0gOw0KICAgIA0KICAgIFNPVVJDRV9HUklTVCA9IFsgRkdyaXN0IEAk
KFBST0pFQ1QpICQoU1VCRElSX1RPS0VOUykgXSA7DQoNCiAgICAjIFJlc2V0IHBlci1kaXJl
Y3RvcnkgY2NmbGFncywgaGRycw0KDQogICAgU1VCRElSQ0NGTEFHUyA9IDsNCiAgICBTVUJE
SVJDKytGTEFHUyA9IDsNCg0KICAgICMgVGhpcyB2YXJpYWJsZSBob2xkcyB0aGUgcGF0aCBm
cm9tIHRoZSBkaXJlY3Rvcnkgb2YgSmFtJ3MgaW52b2NhdGlvbiB0byB0aGUNCiAgICAjIGRp
cmVjdG9yeSBvZiB0aGUgY3VycmVudCBzdWJwcm9qZWN0Lg0KICAgIFJFTEFUSVZFX1NVQkRJ
Ul9UT0tFTlMgPSBbIHNpbXBsaWZ5LXBhdGgtdG9rZW5zICQoJChnVE9QKV9UT0tFTlMpICQo
U1VCRElSX1RPS0VOUykgOiAkKERPVCkgXSA7DQogICAgUkVMQVRJVkVfU1VCRElSID0gWyBq
b2luLXBhdGggJChSRUxBVElWRV9TVUJESVJfVE9LRU5TKSBdIDsNCg0KICAgIGFkanVzdC1w
YXRoLWdsb2JhbHMgOw0KfQ0KDQpydWxlIGluLWludm9jYXRpb24tc3ViZGlyDQp7DQogICAg
bG9jYWwgc3ViZGlyLXRva2VucyA9ICQoU1VCRElSX1RPS0VOUykgOw0KICAgIHN1YmRpci10
b2tlbnMgPz0gJChET1QpIDsNCiAgICBpZiAkKHN1YmRpci10b2tlbnMpID0gJChnSU5WT0NB
VElPTl9TVUJESVJfVE9LRU5TKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuIHRydWUgOw0KICAg
IH0NCn0NCg0KIyBUaGVzZSBhcmUgdGhlIGdsb2JhbCB2YXJpYWJsZXMgdGhhdCBnZXQgc2V0
IHVwIGJ5IFN1YkRpci4gSWYgeW91IG5lZWQgdG8NCiMgaW52b2tlIFN1YkRpciB0ZW1wb3Jh
cmlseSBhbmQgdGhlbiByZXN0b3JlIHRoZW0sIGRlY2xhcmUNCiMgICAgICAgbG9jYWwgJChn
U1VCRElSX0dMT0JBTFMpIDsNCmdTVUJESVJfR0xPQkFMUyA9IFNVQkRJUiBTVUJESVJfVE9L
RU5TIFNFQVJDSF9TT1VSQ0UgTE9DQVRFX1NPVVJDRSBMT0NBVEVfVEFSR0VUDQogICAgU09V
UkNFX0dSSVNUIFJFTEFUSVZFX1NVQkRJUiBSRUxBVElWRV9TVUJESVJfVE9LRU5TIDsgDQoN
Cg0KcnVsZSBwcm90ZWN0LXN1YmRpcg0Kew0KICAgIHJldHVybiAkKGdTVUJESVJfR0xPQkFM
UykgJChnUEFUSF9HTE9CQUxTKSA7DQp9DQoNCiMgcHJlcGVuZHMgcm9vdCB0byBhbnkgdW5y
b290ZWQgZWxlbWVudHMgb2YgcGF0aHMsIGFuZCBzaW1wbGlmaWVzDQpydWxlIHJvb3QtcGF0
aHMgKCBwYXRocyAqIDogcm9vdCApDQp7DQogICAgbG9jYWwgcGF0aCByZXN1bHQgOw0KICAg
IGZvciBwYXRoIGluICQocGF0aHMpDQogICAgew0KICAgICAgICBsb2NhbCByb290ZWQgPSAk
KHBhdGg6Uj0kKHJvb3QpKSA7DQogICAgICAgIHBhdGggPSBbIHRva2Vucy10by1zaW1wbGUt
cGF0aCBbIHNwbGl0LXBhdGggJChyb290ZWQ6Rz0pIF0gXSA7DQogICAgICAgIHBhdGggPSAk
KHBhdGg6Rz0kKHJvb3RlZDpHKSkgOw0KICAgICAgICByZXN1bHQgKz0gJChwYXRoKSA7DQog
ICAgfQ0KICAgIHJldHVybiAkKHJlc3VsdCkgOw0KfQ0KDQojIEFkanVzdCBhbGwgcGF0aCBn
bG9iYWxzIHNvIHRoYXQgdGhleSBhcmUgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgc3VicHJv
amVjdC4NCnJ1bGUgYWRqdXN0LXBhdGgtZ2xvYmFscw0Kew0KICAgICMgY29tcHV0ZSBwYXRo
IHRva2VucyBmcm9tIGN1cnJlbnQgc3VicHJvamVjdCB0byByb290DQogICAgbG9jYWwgdG9r
ZW5zLXRvLXJvb3QgPSBbIHNwbGl0LXBhdGggWyBGU3ViRGlyICQoU1VCRElSX1RPS0VOUykg
XSBdIDsNCiAgICANCiAgICAjIGNvbXB1dGUgcGF0aCB0b2tlbnMgZnJvbSBjdXJyZW50IHN1
YnByb2plY3QgdG8gaW52b2NhdGlvbg0KICAgICMgZGlyZWN0b3J5LiAkKERPVCkgaXMgYWRk
ZWQganVzdCBpbiBjYXNlIHdlJ3JlIGJ1aWxkaW5nIGZyb20gdGhlIHByb2plY3QNCiAgICAj
IHJvb3QNCiAgICBsb2NhbCB0b2tlbnMtdG8taW52b2NhdGlvbg0KICAgICAgICA9ICQodG9r
ZW5zLXRvLXJvb3QpICQoZ0lOVk9DQVRJT05fU1VCRElSX1RPS0VOUykgOw0KICAgICAgICAg
DQogICAgbG9jYWwgdmFyaWFibGUgOw0KICAgIGZvciB2YXJpYWJsZSBpbiAkKGdQQVRIX0dM
T0JBTFMpDQogICAgew0KICAgICAgICBsb2NhbCBwYXRocyA9ICQoZ1BBVEhfR0xPQkFMX1ZB
TFVFKCQodmFyaWFibGUpKSkgOw0KICAgICAgICAkKHZhcmlhYmxlKSA9IDsNCiAgICAgICAg
bG9jYWwgcGF0aCA7DQogICAgICAgIGZvciBwYXRoIGluICQocGF0aHMpDQogICAgICAgIHsN
CiAgICAgICAgICAgICMgaXMgcGF0aCBhbHJlYWR5IHJvb3RlZD8NCiAgICAgICAgICAgIGlm
ICQocGF0aDpSPXgpID0gJChwYXRoKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAg
ICQodmFyaWFibGUpICs9ICQocGF0aCkgOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAg
ZWxzZQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGxvY2FsIHRva2VucyA9ICQo
dG9rZW5zLXRvLWludm9jYXRpb24pIFsgc3BsaXQtcGF0aCAkKHBhdGgpIF0gOw0KICAgICAg
ICAgICAgICAgICQodmFyaWFibGUpICs9IFsgdG9rZW5zLXRvLXNpbXBsZS1wYXRoICQodG9r
ZW5zKSBdIDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCn0NCg0KIyBkd2Eg
Ni80LzAxIC0gYWRkZWQgZm9yIGJvb3N0DQojIHN0cmlwLWdyaXN0IHZhbHVlDQojDQojIHN0
cmlwIGFsbCBsZWFkaW5nIGdyaXN0ZWQgZWxlbWVudHMgZnJvbSB2YWx1ZSBhbmQgcmV0dXJu
IHRoZSByZXN1bHQuDQpydWxlIHN0cmlwLWdyaXN0DQp7DQogICAgbG9jYWwgeCA9ICQoPDpH
PSkgOw0KICAgIGlmICEgJCh4OkcpDQogICAgew0KICAgICAgICByZXR1cm4gJCh4KSA7DQog
ICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAgIHJldHVybiBbIHN0cmlwLWdyaXN0ICQo
eCkgXSA7DQogICAgfQ0KfQ0KDQojIGR3YSA2LzQvMDEgLSBhZGRlZCBmb3IgYm9vc3QNCiMg
QnJlYWtzICQoPCkgaW50byBwYXRoIGNvbXBvbmVudHMNCiMgVGhpcyBjb3VsZCBjZXJ0YWlu
bHkgYmUgaW1wcm92ZWQgbm93IHRoYXQgd2UgaGF2ZSBEYXZpZCBUdXJuZXIncyByZWd1bGFy
IGV4cHJlc3Npb24gZmVhdHVyZXMuDQojDQojIHNwbGl0LXBhdGggPGZvbz5iYXIvPGJlZT5i
YXovbXVtYmxlICA9PiA8Zm9vPmJhciA8YmVlPmJheiBtdW1ibGUgDQpydWxlIHNwbGl0LXBh
dGgNCnsNCiAgICBsb2NhbCByZXN1bHQgPSAkKGdTUExJVC1QQVRILiQoPCkpIDsNCg0KICAg
IGlmICEgJChyZXN1bHQpDQogICAgew0KICAgICAgICBsb2NhbCBwYXJlbnQgPSAkKDw6UCkg
Ow0KICAgICAgICBpZiAkKE5UKQ0KICAgICAgICB7DQogICAgICAgICAgICBzd2l0Y2ggJCg8
Okc9KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICMgSXQgdHVybnMgb3V0IHRo
YXQgdG8gbWF0Y2ggYSBiYWNrc2xhc2gsIHlvdSBuZWVkIGEgL3F1YWRydXBsZS8gc2xhc2gN
CiAgICAgICAgICAgICAgICAjIGluIHRoZSBjYXNlIGNsYXVzZSENCiAgICAgICAgICAgICAg
ICBjYXNlICpcXFxcKjoqIDogIyBjb250aW51ZSBzcGxpdHRpbmcNCiAgICAgICAgICAgICAg
ICAgIGNhc2UgKjpcXFxcKlxcXFwqIDogICMgY29udGludWUgc3BsaXR0aW5nDQogICAgICAg
ICAgICAgICAgICBjYXNlICo6LypcXFxcKiA6ICAjIGNvbnRpbnVlIHNwbGl0dGluZw0KICAg
ICAgICAgICAgICAgICAgY2FzZSAqOlxcXFwqLyogOiAgIyBjb250aW51ZSBzcGxpdHRpbmcN
CiAgICAgICAgICAgICAgICAgIGNhc2UgKjovKi8qIDogICMgY29udGludWUgc3BsaXR0aW5n
DQogICAgICAgICAgICAgICAgICBjYXNlICo6LyogOiByZXN1bHQgPSAkKDwpIDsNCiAgICAg
ICAgICAgICAgICBjYXNlICo6XFxcXCogOiByZXN1bHQgPSAkKDwpIDsNCiAgICAgICAgICAg
ICAgICBjYXNlICo6IDogcmVzdWx0ID0gJCg8KSA7DQogICAgICAgICAgICB9DQogICAgICAg
IH0NCg0KICAgICAgICBpZiAoICEgJCg8OkIpICkgJiYgKCAkKDwpICE9ICQoRE9UKSApICMg
aGFuZGxlIHRoZSBjYXNlIHdoZXJlICQoPCkgaXMgYWxsIGdyaXN0Lg0KICAgICAgICB7DQog
ICAgICAgICAgICByZXN1bHQgPz0gJCg8OkcpIDsNCiAgICAgICAgfQ0KICAgICAgICBlbHNl
IGlmICggISAkKHBhcmVudDpHPSkgKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXN1bHQg
Pz0gJCg8KSA7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAg
ICAgICBsb2NhbCBwID0gWyBzcGxpdC1wYXRoICQocGFyZW50KSBdIDsNCiAgICAgICAgICAg
IGxvY2FsIGIgPSBbIHN0cmlwLWdyaXN0ICQoPCkgXSA7DQogICAgICAgICAgICBwICs9ICQo
YjpEPSkgOyAjIGNhbid0IHVzZSA6QiBoZXJlIGJlY2F1c2UgaXQgZGVzdHJveXMgLiBhbmQg
Li4NCiAgICAgICAgICAgIHJlc3VsdCA/PSAkKHApIDsNCiAgICAgICAgfQ0KICAgICAgICBn
U1BMSVQtUEFUSC4kKDwpID0gJChyZXN1bHQpIDsNCiAgICB9DQogICAgcmV0dXJuICQocmVz
dWx0KSA7DQp9DQoNCnJ1bGUgc3BsaXQgKCBzdHJpbmcgc2VwYXJhdG9yICkNCnsNCiAgICBs
b2NhbCByZXN1bHQgOw0KICAgIGxvY2FsIHMgPSAkKHN0cmluZykgOw0KICAgIA0KICAgIHdo
aWxlICQocykNCiAgICB7DQogICAgICAgIGxvY2FsIG1hdGNoID0gWyBNQVRDSCBeKC4qKSQo
c2VwYXJhdG9yKSguKikgOiAkKHMpIF0gOw0KICAgICAgICANCiAgICAgICAgbG9jYWwgdGFp
bCA9ICQobWF0Y2hbMl0pIDsNCiAgICAgICAgdGFpbCA/PSAkKHMpIDsNCg0KICAgICAgICBy
ZXN1bHQgPSAkKHRhaWwpICQocmVzdWx0KSA7DQogICAgICAgIHMgPSAkKG1hdGNoWzFdKSA7
DQogICAgfQ0KICAgIHJldHVybiAkKHJlc3VsdCkgOw0KfQ0KDQpydWxlIHNwbGl0LXBhdGgg
KCBwYXRoICkNCnsNCiAgICBpZiAhICQoZ1NQTElUX1BBVEhfQ0FDSEUoJChwYXRoKSkpDQog
ICAgew0KICAgICAgICBnU1BMSVRfUEFUSF9DQUNIRSgkKHBhdGgpKSA9DQogICAgICAgICAg
WyBNQVRDSCAgIl4oWy8kKFNMQVNIKV0rKS4qIiA6ICQocGF0aCkgXSAjIHJvb3Rpbmcgc2xh
c2goZXMpLCBpZiBhbnkNCiAgICAgICAgICAgIFsgc3BsaXQgJChwYXRoKSAiWy8kKFNMQVNI
KV0iIF0gICAgICAgICMgdGhlIHJlc3QuDQogICAgICAgICAgICAgIDsNCiAgICB9DQogICAg
cmV0dXJuICQoZ1NQTElUX1BBVEhfQ0FDSEUoJChwYXRoKSkpIDsNCn0NCg0KIyBkd2EgNi80
LzAxIC0gYWRkZWQgZm9yIGJvb3N0DQojIHJldmVyc2UgaXRlbTEgaXRlbTIuLi4gDQojDQoj
IFJldHVybnMgLi4uaXRlbTIgaXRlbTENCnJ1bGUgcmV2ZXJzZQ0Kew0KICAgIGxvY2FsIHJl
c3VsdCA7DQogICAgZm9yIHggaW4gJCg8KQ0KICAgIHsNCiAgICAgICAgcmVzdWx0ID0gJCh4
KSAkKHJlc3VsdCkgOw0KICAgIH0NCiAgICByZXR1cm4gJChyZXN1bHQpIDsNCn0NCg0KIyBk
d2EgNi8yOC8wMSAtIGFkZGVkIGZvciBib29zdA0KIyBzdHJpcC1pbml0aWFsIHRva2Vucy4u
LiA6IGlucHV0DQojDQojIGlmIGlucHV0IGJlZ2lucyB3aXRoIHRva2VucywgcmVtb3ZlIHRo
ZSBpbml0aWFsIHNlcXVlbmNlIG9mIHRva2VucyBhbmQgcmV0dXJuDQojIHRoZSByZXN0LiBP
dGhlcndpc2UgcmV0dXJuIGlucHV0IHVuY2hhbmdlZC4NCnJ1bGUgc3RyaXAtaW5pdGlhbA0K
ew0KICAgIGxvY2FsIHJlc3VsdCA9ICQoPikgOw0KICAgIGxvY2FsIHQgOw0KICAgIGxvY2Fs
IG1hdGNoZWQgPSB0cnVlIDsNCiAgICBmb3IgdCBpbiAkKDwpDQogICAgew0KICAgICAgICBp
ZiAkKG1hdGNoZWQpICYmICggJCh0KSA9ICQocmVzdWx0WzFdKSApDQogICAgICAgIHsNCiAg
ICAgICAgICAgIHJlc3VsdCA9ICQocmVzdWx0WzItXSkgOw0KICAgICAgICB9DQogICAgICAg
IGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICAgbWF0Y2hlZCA9IDsNCiAgICAgICAgICAg
IHJlc3VsdCA9ICQoPikgOw0KICAgICAgICB9DQogICAgfQ0KICAgIHJldHVybiAkKHJlc3Vs
dCkgOw0KfQ0KDQojIGR3YSA2LzQvMDEgLSBhZGRlZCBmb3IgYm9vc3QNCiMgc2ltcGxpZnkt
cGF0aC10b2tlbnMgdG9rZW4xIHRva2VuMiAuLi4gdG9rZW5OIDogRE9ULW9wdA0KIw0KIyBS
ZW1vdmUgcmVkdW5kYW50IGluZm9ybWF0aW9uIGZyb20gdGhlIGdpdmVuIHBhdGggZWxlbWVu
dHMNCiMgaWYgRE9ULW9wdCBpcyBzdXBwbGllZCwgZW1wdHkgcmVzdWx0cyBhcmUgcmVwbGFj
ZWQgd2l0aA0KIyAkKERPVC1vcHQpLg0KIw0KIyBbIHNpbXBsaWZ5LXBhdGgtdG9rZW5zIGEg
YiAuIGMgLi4gLi4gZCBlIF0gPT4gYSBkIGUNCiMgWyBzaW1wbGlmeS1wYXRoLXRva2VucyBh
IGIgLi4gLi4gLi4gZCBlIF0gID0+IC4uIGQgZQ0KIyBbIHNpbXBsaWZ5LXBhdGgtdG9rZW5z
IC4uIC4uIGQgZSA6IHh4eCBdICAgPT4gLi4gLi4gZCBlIChwcm92aWRlZCBUT1AgIT0gLi4v
Li4pDQojIFsgc2ltcGxpZnktcGF0aC10b2tlbnMgYSBiIC4uIC4uIDogeHh4IF0gICA9PiB4
eHgNCnJ1bGUgc2ltcGxpZnktcGF0aC10b2tlbnMNCnsNCiAgICBsb2NhbCByZXZlcnNlLXBh
dGggPSBbIHJldmVyc2UgJCg8KSBdIDsNCiAgICBsb2NhbCBkb3Rkb3RzIDsNCiAgICBsb2Nh
bCByZXN1bHQgOw0KICAgIGxvY2FsIHRva2VuIDsNCiAgICBmb3IgdG9rZW4gaW4gJChyZXZl
cnNlLXBhdGgpDQogICAgew0KICAgICAgICBpZiAkKHRva2VuKSA9ICQoRE9UKQ0KICAgICAg
ICB7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSBpZiAkKHRva2VuKSA9ICQoRE9URE9UKQ0K
ICAgICAgICB7DQogICAgICAgICAgICBkb3Rkb3RzICs9ICQodG9rZW4pIDsNCiAgICAgICAg
fQ0KICAgICAgICBlbHNlIGlmICQoZG90ZG90cykNCiAgICAgICAgew0KICAgICAgICAgICAg
ZG90ZG90cyA9ICQoZG90ZG90c1syLV0pIDsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQog
ICAgICAgIHsNCiAgICAgICAgICAgIHJlc3VsdCA9ICQodG9rZW4pICQocmVzdWx0KSA7DQog
ICAgICAgIH0NCiAgICB9DQoNCiAgICByZXN1bHQgPSAkKGRvdGRvdHMpICQocmVzdWx0KSA7
DQogICAgcmVzdWx0ID0gWyBzdHJpcC1pbml0aWFsICQoJChnVE9QKV9UT0tFTlMpICQoZ0lO
Vk9DQVRJT05fU1VCRElSX1RPS0VOUykgOiAkKHJlc3VsdCkgXSA7DQogICAgcmVzdWx0ID89
ICQoPikgOw0KICAgIHJldHVybiAkKHJlc3VsdCkgOw0KfQ0KDQpydWxlIHRva2Vucy10by1z
aW1wbGUtcGF0aA0Kew0KICAgIHJldHVybiBbIEZEaXJOYW1lIFsgc2ltcGxpZnktcGF0aC10
b2tlbnMgICQoPCkgXSBdIDsNCn0NCg0KcnVsZSBTdWJEaXJDY0ZsYWdzDQp7DQogICAgU1VC
RElSQ0NGTEFHUyArPSAkKDwpIDsNCn0NCg0KcnVsZSBTdWJEaXJDKytGbGFncw0Kew0KICAg
IFNVQkRJUkMrK0ZMQUdTICs9ICQoPCkgOw0KfQ0KDQpydWxlIFN1YkRpckhkcnMNCnsNCiAg
ICBTVUJESVJIRFJTICs9ICQoPCkgOw0KfQ0KDQpydWxlIFN1YkluY2x1ZGUNCnsNCiAgICBs
b2NhbCBfcyA7DQoNCiAgICAjIFRoYXQncw0KICAgICMgICAgICAgU3ViSW5jbHVkZSBUT1Ag
ZDEgWyBkMiBbIGQzIFsgZDQgXSBdIF0NCiAgICAjDQogICAgIyB0byBpbmNsdWRlIGEgc3Vi
ZGlyZWN0b3J5J3MgSmFtZmlsZS4NCg0KICAgIGlmICEgJCgkKDxbMV0pKQ0KICAgIHsNCiAg
ICAgICAgRVhJVCBUb3AgbGV2ZWwgb2Ygc291cmNlIHRyZWUgaGFzIG5vdCBiZWVuIHNldCB3
aXRoICQoPFsxXSkgOw0KICAgIH0NCg0KICAgIF9zID0gWyBGRGlyTmFtZSAkKDxbMi1dKSBd
IDsNCg0KICAgICMgcHJvdGVjdCB2YXJpYWJsZXMgZnJvbSBiZWluZyBwZXJtYW5lbnRseSBz
ZXQgYnkgU3ViRGlyIGludm9jYXRpb25zDQogICAgIyBpbiBpbmNsdWRlZCBmaWxlcy4NCiAg
ICBsb2NhbCBwcm9qZWN0ID0gJChQUk9KRUNUKSA7DQogICAgbG9jYWwgWyBwcm90ZWN0LXN1
YmRpciBdIDsNCiAgICBQUk9KRUNUID0gJChwcm9qZWN0KSA7DQogICAgbG9jYWwgamFtZmls
ZS1wYXRoDQogICAgICAgID0gWyB0b2tlbnMtdG8tc2ltcGxlLXBhdGgNCiAgICAgICAgICAg
IFsgc3BsaXQtcGF0aCAkKEpBTUZJTEU6RD0kKF9zKTpSPSQoJCg8WzFdKSkpIF0gXSA7DQog
ICAgbG9hZC1qYW1maWxlcyAkKGphbWZpbGUtcGF0aCkgOw0KfQ0KDQojIExvYWQgYSB1c2Vy
J3MgSmFtZmlsZShzKS4NCiMNCnJ1bGUgbG9hZC1qYW1maWxlcyAoIGphbWZpbGVzICogKQ0K
ew0KICAgICMgRmlyc3Qgd2UgbG9hZCB0aGUgSmFtZmlsZXMgd2l0aG91dCBnZW5lcmF0aW9u
IG9mIG1haW4gdGFyZ2V0cyBzbyB0aGF0DQogICAgIyBkZXBlbmRlbmNpZXMgYXJlIHByZWxv
YWRlZC4gVGhlbiB3ZSByZWxvYWQgdGhlIGZpbGVzIHdpdGggdGFyZ2V0DQogICAgIyBnZW5l
cmF0aW9uIGVuYWJsZWQuDQogICAgDQogICAgbG9jYWwgamFtZmlsZSA7DQogICAgbG9jYWwg
YXMtZGVwZW5kYW50ID0gJChnSU5fTElCX0lOQ0xVREUpIDsNCiAgICBsb2NhbCBnSU5fTElC
X0lOQ0xVREUgOw0KICAgIA0KICAgIGdJTl9MSUJfSU5DTFVERSA9IFRSVUUgOw0KICAgIGZv
ciBqYW1maWxlLXBhdGggaW4gJChqYW1maWxlcykNCiAgICB7DQogICAgICAgIGlmICEgJChn
SU5DTFVERURfQVNfREVQRU5EQU5UKCQoamFtZmlsZS1wYXRoKSkpDQogICAgICAgIHsNCiAg
ICAgICAgICAgIGdJTkNMVURFRF9BU19ERVBFTkRBTlQoJChqYW1maWxlLXBhdGgpKSA9IFRS
VUUgOw0KICAgICAgICAgICAgaW5jbHVkZSAkKGphbWZpbGUtcGF0aCkgOw0KICAgICAgICB9
DQogICAgfQ0KICAgIA0KICAgIGlmICEgJChhcy1kZXBlbmRhbnQpDQogICAgew0KICAgICAg
ICBnSU5fTElCX0lOQ0xVREUgPSA7DQogICAgICAgIGZvciBqYW1maWxlLXBhdGggaW4gJChq
YW1maWxlcykNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgISAkKGdJTkNMVURFRCgkKGph
bWZpbGUtcGF0aCkpKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGdJTkNMVURF
RCgkKGphbWZpbGUtcGF0aCkpID0gVFJVRSA7DQogICAgICAgICAgICAgICAgaW5jbHVkZSAk
KGphbWZpbGUtcGF0aCkgOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KfQ0K
DQpydWxlIFVuZGVmaW5lcw0Kew0KICAgIFVOREVGUyBvbiBbIEZBcHBlbmRTdWZmaXggJCg8
KSA6ICQoU1VGRVhFKSBdICs9ICQoVU5ERUZGTEFHKSQoPikgOw0KfQ0KDQpydWxlIFVzZXJP
YmplY3QNCnsNCiAgICBFWElUICJVbmtub3duIHN1ZmZpeCBvbiIgJCg+KSAiLSBzZWUgVXNl
ck9iamVjdCBydWxlIGluIEphbWZpbGUoNSkuIiA7DQp9DQoNCiMgZHdhIDYvNC8wMSAtIG1v
ZGlmaWVkIGZvciBib29zdA0KcnVsZSBZYWNjDQp7DQogICAgbG9jYWwgX2ggOw0KDQogICAg
IyBDYW4ndCBqdXN0IHJlcGxhY2UgLmNwcCB3aXRoIC5oLCBiZWNhdXNlIGJpc29uIHNlZW1z
IHRvIGdlbmVyYXRlIGEgLmNwcC5oIGZpbGUNCiAgICBfaCA9ICQoPCkuaCA7DQoNCiAgICAj
IFNvbWUgcGxhY2VzIGRvbid0IGhhdmUgYSB5YWNjLg0KDQogICAgTWFrZUxvY2F0ZSAkKDwp
ICQoX2gpIDogJChMT0NBVEVfU09VUkNFKSA7DQogICAgU0VBUkNIIG9uICQoPCkgJChfaCkg
PSAkKExPQ0FURV9TT1VSQ0UpIDsNCg0KICAgIGlmICQoWUFDQykNCiAgICB7DQogICAgICAg
IERFUEVORFMgJCg8KSAkKF9oKSA6ICQoPikgOw0KDQogICAgICAgICMgaWYgWUFDQyBjYW4g
YWNjZXB0IGFuIG91dHB1dCBmaWxlLCB3ZSdsbCBqdXN0IGdlbmVyYXRlIHRoZSBmaWxlIHRo
ZXJlLg0KICAgICAgICBZQUNDRklMRVMgb24gJCg8KSAkKF9oKSA9IFsgam9pbi1wYXRoICQo
TE9DQVRFX1NPVVJDRSkgJCg8WzFdKSBdIDsNCiAgICAgICAgDQogICAgICAgIFlhY2MxICQo
PCkgJChfaCkgOiAkKD4pIDsNCiAgICAgICAgDQogICAgICAgIGlmICEgJChZQUNDX09VVFBV
VCkNCiAgICAgICAgew0KICAgICAgICAgICAgWWFjY012ICQoPCkgJChfaCkgOiAkKD4pIDsN
CiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgQ2xlYW4gY2xlYW4gOiAkKDwpICQoX2gp
IDsNCiAgICB9DQoNCiAgICAjIG1ha2Ugc3VyZSBzb21lb25lIGluY2x1ZGVzICQoX2gpIGVs
c2UgaXQgd2lsbCBiZQ0KICAgICMgYSBkZWFkbHkgaW5kZXBlbmRlbnQgdGFyZ2V0DQoNCiAg
ICBJTkNMVURFUyAkKDwpIDogJChfaCkgOw0KfQ0KDQpydWxlIHJlbWVtYmVyLWJpbmRpbmcg
KCB0YXJnZXQgOiBib3VuZC1wYXRoICkgew0KICAgIGdCSU5ESU5HKCQodGFyZ2V0KSkgPSAk
KGJvdW5kLXBhdGgpIDsNCn0NCg0KIw0KIyBVdGlsaXR5IHJ1bGVzOyBubyBzaWRlIGVmZmVj
dHMgb24gdGhlc2UNCiMNCg0KcnVsZSBGR3Jpc3QNCnsNCiAgICAjIFR1cm4gaW5kaXZpZHVh
bCBlbGVtZW50cyBpbiAkKDwpIGludG8gZ3Jpc3QuDQoNCiAgICBsb2NhbCBfZyBfaSA7DQoN
CiAgICBfZyA9ICQoPFsxXSkgOw0KDQogICAgZm9yIF9pIGluICQoPFsyLV0pDQogICAgew0K
ICAgICAgICBfZyA9ICQoX2cpISQoX2kpIDsNCiAgICB9DQoNCiAgICByZXR1cm4gJChfZykg
Ow0KfQ0KDQpydWxlIEZHcmlzdEZpbGVzIA0Kew0KICAgIGlmICEgJChTT1VSQ0VfR1JJU1Qp
DQogICAgew0KICAgICAgICByZXR1cm4gJCg8KSA7DQogICAgfQ0KICAgIGVsc2UgDQogICAg
ew0KICAgICAgICByZXR1cm4gJCg8Okc9JChTT1VSQ0VfR1JJU1QpKSA7DQogICAgfQ0KfQ0K
DQojIGR3YSA2LzQvMDEgLSBtb2RpZmllZCBmb3IgYm9vc3QNCnJ1bGUgRkdyaXN0U291cmNl
RmlsZXMNCnsNCiAgICAjIFByb2R1Y2Ugc291cmNlIGZpbGUgbmFtZSBuYW1lIHdpdGggZ3Jp
c3QgaW4gaXQsIA0KICAgICMgaWYgU09VUkNFX0dSSVNUIGlzIHNldC4NCg0KICAgICMgTGVh
dmUgaGVhZGVyIGZpbGVzIGFsb25lLCBiZWNhdXNlIHRoZXkgaGF2ZSBhIGdsb2JhbA0KICAg
ICMgdmlzaWJpbGl0eS4NCg0KICAgIGlmICEgJChTT1VSQ0VfR1JJU1QpDQogICAgew0KICAg
ICAgICByZXR1cm4gJCg8KSA7DQogICAgfQ0KICAgIGVsc2UgDQogICAgew0KICAgICAgICBs
b2NhbCBfaSBfbyA7DQoNCiAgICAgICAgZm9yIF9pIGluICQoPCkNCiAgICAgICAgew0KICAg
ICAgICAgICAgc3dpdGNoICQoX2kpDQogICAgICAgICAgICB7DQogICAgICAgICAgICBjYXNl
ICouaCA6ICAgICAgX28gKz0gJChfaSkgOw0KICAgICAgICAgICAgY2FzZSAqLmhwcCA6ICAg
ICAgX28gKz0gJChfaSkgOw0KICAgICAgICAgICAgY2FzZSAqIDogICAgICAgIF9vICs9ICQo
X2k6Rz0kKFNPVVJDRV9HUklTVCkpIDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQog
ICAgICAgIHJldHVybiAkKF9vKSA7DQogICAgfQ0KfQ0KDQojIGR3YSA2LzQvMDEgLSBtb2Rp
ZmllZCBmb3IgYm9vc3QNCiMgam9pbiB2YWx1ZXMuLi4gOiBbc2VwYXJhdG9yXQ0KIw0KIyBQ
YXN0ZXMgdmFsdWVzIHRvZ2V0aGVyIGludG8gYSBzaW5nbGUgbGlzdCBlbGVtZW50LCBzZXBh
cmF0ZWQgYnkgYW4gb3B0aW9uYWwgc2VwYXJhdG9yLg0KcnVsZSBqb2luICggdmFsdWVzICog
OiBzZXAgPyApDQp7DQogICAgc2VwID89ICIiIDsNCiAgICByZXR1cm4gJCh2YWx1ZXM6Sj0k
KHNlcCkpIDsNCn0NCg0KIyBHaXZlbiAkKDwpLCB0aGUgdG9rZW5zIGNvbXByaXNpbmcgYSBy
ZWxhdGl2ZSBwYXRoIGZyb20gRDEgdG8gYSBzdWJkaXJlY3RvcnkNCiMgRDIsIHJldHVybiB0
aGUgcmVsYXRpdmUgcGF0aCBmcm9tIEQyIHRvIEQxLCB1c2luZyAuLi8uLi8gZXRjLg0KcnVs
ZSBGU3ViRGlyDQp7DQogICAgbG9jYWwgX2QgOw0KDQogICAgaWYgISAkKDxbMV0pIA0KICAg
IHsNCiAgICAgICAgX2QgPSAkKERPVCkgOw0KICAgIH0gDQogICAgZWxzZQ0KICAgIHsNCiAg
ICAgICAgX2QgPSAkKERPVERPVCkgOw0KDQogICAgICAgIGxvY2FsIF9pIDsNCiAgICAgICAg
Zm9yIF9pIGluICQoPFsyLV0pDQogICAgICAgIHsNCiAgICAgICAgICAgIF9kID0gJChfZDpS
PSQoRE9URE9UKSkgOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgcmV0dXJuICQoX2QpIDsN
Cn0NCg0KIyBkd2EgNi80LzAxIC0gYWRkZWQgZm9yIGJvb3N0DQojIFR1cm4gaW5kaXZpZHVh
bCBlbGVtZW50cyBpbiAkKDwpIGludG8gYSB1c2FibGUgcGF0aC4gSWYgJCg8KSBpcyBlbXB0
eSwgJCg+KSBpcw0KIyByZXR1cm5lZC4NCnJ1bGUgam9pbi1wYXRoDQp7DQogICAgbG9jYWwg
X3MgX2kgOw0KDQogICAgaWYgISAkKDwpDQogICAgew0KICAgICAgICBfcyA9ICQoPikgOw0K
ICAgIH0NCiAgICBlbHNlIGlmICQoVk1TKQ0KICAgIHsNCiAgICAgICAgIyBUaGlzIGhhbmRs
ZXMgdGhlIGZvbGxvd2luZyBjYXNlczoNCiAgICAgICAgIyAgIGEgLT4gWy5hXQ0KICAgICAg
ICAjICAgYSBiIGMgLT4gWy5hLmIuY10NCiAgICAgICAgIyAgIHg6IC0+IHg6DQogICAgICAg
ICMgICB4OiBhIC0+IHg6W2FdDQogICAgICAgICMgICB4OlthXSBiIC0+IHg6W2EuYl0NCg0K
ICAgICAgICBzd2l0Y2ggJCg8WzFdKQ0KICAgICAgICB7DQogICAgICAgIGNhc2UgKjoqIDog
X3MgPSAkKDxbMV0pIDsNCiAgICAgICAgY2FzZSBcXFsqXFxdIDogX3MgPSAkKDxbMV0pIDsN
CiAgICAgICAgY2FzZSAqIDogX3MgPSBbLiQoPFsxXSldIDsNCiAgICAgICAgfQ0KDQogICAg
ICAgIGZvciBfaSBpbiBbLiQoPFsyLV0pXQ0KICAgICAgICB7DQogICAgICAgICAgICBfcyA9
ICQoX2k6Uj0kKF9zKSkgOw0KICAgICAgICB9DQogICAgfQ0KICAgIGVsc2UgaWYgJChNQUMp
DQogICAgew0KICAgICAgICBfcyA9ICQoRE9UKSA7DQoNCiAgICAgICAgZm9yIF9pIGluICQo
PCkNCiAgICAgICAgew0KICAgICAgICAgICAgX3MgPSAkKF9pOlI9JChfcykpIDsNCiAgICAg
ICAgfQ0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICBfcyA9ICQoPFsxXSkgOw0K
ICAgICAgICBsb2NhbCBfciA9ICQoPFsyLV0pIDsNCg0KICAgICAgICAjIEphbSBkb2Vzbid0
IGhhbmRsZSB0aGUgcm9vdCBkaXJlY3RvcnkgcHJvcGVybHkNCiAgICAgICAgaWYgJChfcykg
aW4gLyAkKFNMQVNIKQ0KICAgICAgICB7DQogICAgICAgICAgICBfcyA9ICQoX3MpJChfclsx
XSkgOw0KICAgICAgICAgICAgX3IgPSAkKF9yWzItXSkgOw0KICAgICAgICB9DQogICAgICAg
IA0KICAgICAgICBmb3IgX2kgaW4gJChfcikNCiAgICAgICAgew0KICAgICAgICAgICAgX3Mg
PSAkKF9pOlI9JChfcykpIDsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIHJldHVybiAkKF9z
KSA7DQp9DQoNCiMgZHdhIDYvNC8wMSAtIG1vZGlmaWVkIGZvciBib29zdA0KcnVsZSBGRGly
TmFtZQ0Kew0KICAgICMgVHVybiBpbmRpdmlkdWFsIGVsZW1lbnRzIGluICQoPCkgaW50byBh
IHVzYWJsZSBwYXRoLg0KICAgIHJldHVybiBbIGpvaW4tcGF0aCAkKDwpIDogJChET1QpIF0g
Ow0KfQ0KDQoNCnJ1bGUgX21ha2VDb21tb24NCnsNCiAgICAjIHN0cmlwIGNvbW1vbiBpbml0
aWFsIGVsZW1lbnRzDQoNCiAgICBpZiAkKCQoPClbMV0pICYmICQoJCg8KVsxXSkgPSAkKCQo
PilbMV0pDQogICAgew0KICAgICAgICAkKDwpID0gJCgkKDwpWzItXSkgOw0KICAgICAgICAk
KD4pID0gJCgkKD4pWzItXSkgOw0KICAgICAgICBfbWFrZUNvbW1vbiAkKDwpIDogJCg+KSA7
DQogICAgfQ0KfQ0KDQoNCnJ1bGUgRlJlbFBhdGgNCnsNCiAgICBsb2NhbCBfbCBfciA7DQoN
CiAgICAjIGZpcnN0IHN0cmlwIG9mZiBjb21tb24gcGFydHMNCg0KICAgIF9sID0gJCg8KSA7
DQogICAgX3IgPSAkKD4pIDsNCg0KICAgIF9tYWtlQ29tbW9uIF9sIDogX3IgOw0KDQogICAg
IyBub3cgbWFrZSBwYXRoIHRvIHJvb3QgYW5kIHBhdGggZG93bg0KDQogICAgX2wgPSBbIEZT
dWJEaXIgJChfbCkgXSA7DQogICAgX3IgPSBbIEZEaXJOYW1lICQoX3IpIF0gOw0KDQogICAg
IyBDb25jYXRlbmF0ZSBhbmQgc2F2ZQ0KDQogICAgIyBYWFggVGhpcyBzaG91bGQgYmUgYmV0
dGVyDQoNCiAgICBpZiAkKF9yKSA9ICQoRE9UKSB7DQogICAgICAgIHJldHVybiAkKF9sKSA7
DQogICAgfSBlbHNlIHsNCiAgICAgICAgcmV0dXJuICQoX3I6Uj0kKF9sKSkgOw0KICAgIH0N
Cn0NCg0KIyBkd2EgNi8xNy8wMSAtIG1vZGlmaWVkIGZvciBib29zdCB0byBoYW5kbGUgbXVs
dGlwbGUgc3VmZml4ZXMNCnJ1bGUgRkFwcGVuZFN1ZmZpeA0Kew0KICAgIyBFLmcuLCAiRkFw
cGVuZFN1ZmZpeCB5YWNjIGxleCBmb28uYmF0IDogJChTVUZFWEUpIDsiDQogICAjIHJldHVy
bnMgKHlhY2MsbGV4LGZvby5iYXQpIG9uIFVuaXggYW5kIA0KICAgIyAoeWFjYy5leGUsbGV4
LmV4ZSxmb28uYmF0KSBvbiBOVC4NCg0KICAgIGlmICQoPikNCiAgICB7DQogICAgICAgIGxv
Y2FsIF9pIF9vIDsNCg0KICAgICAgICBmb3IgX2kgaW4gJCg8KQ0KICAgICAgICB7DQogICAg
ICAgICAgICBpZiAkKF9pOlMpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgX28g
Kz0gJChfaSkgJChfaTpTPSQoPlsyLV0pKSA7DQogICAgICAgICAgICB9DQogICAgICAgICAg
ICBlbHNlDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgX28gKz0gJChfaTpTPSQo
PikpIDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gJChfbykg
Ow0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICByZXR1cm4gJCg8KSA7DQogICAg
fQ0KfQ0KDQpydWxlIHVubWFrZURpcg0Kew0KICAgIGlmICQoPlsxXTpEKSAmJiAkKD5bMV06
RCkgIT0gJCg+WzFdKSAmJiAkKD5bMV06RCkgIT0gXFxcXCANCiAgICB7DQogICAgICAgIHVu
bWFrZURpciAkKDwpIDogJCg+WzFdOkQpICQoPlsxXTpCUykgJCg+WzItXSkgOw0KICAgIH0N
CiAgICBlbHNlDQogICAgew0KICAgICAgICAkKDwpID0gJCg+KSA7DQogICAgfQ0KfQ0KDQoj
DQojIEFjdGlvbnMNCiMNCg0KIw0KIyBGaXJzdCB0aGUgZGVmYXVsdHMNCiMNCg0KYWN0aW9u
cyBBcw0Kew0KICAgICQoQVMpICQoQVNGTEFHUykgLUkkKEhEUlMpIC1vICQoPCkgJCg+KQ0K
fQ0KDQphY3Rpb25zIENoZ3JwDQp7DQogICAgY2hncnAgJChHUk9VUCkgJCg8KQ0KfQ0KDQph
Y3Rpb25zIENobW9kMQ0Kew0KICAgICQoQ0hNT0QpICQoTU9ERSkgIiQoPCkiDQp9DQoNCmFj
dGlvbnMgQ2hvd24NCnsNCiAgICBjaG93biAkKE9XTkVSKSAkKDwpDQp9DQoNCmFjdGlvbnMg
cGllY2VtZWFsIHRvZ2V0aGVyIGV4aXN0aW5nIENsZWFuDQp7DQogICAgJChSTSkgIiQoPiki
ICQoTlVMTF9PVVQpDQp9DQoNCmFjdGlvbnMgRmlsZQ0Kew0KICAgICQoQ1ApICIkKD4pIiAi
JCg8KSIgJChOVUxMX09VVCkNCn0NCg0KYWN0aW9ucyBGaWxlQ2xvbmUNCnsNCiAgICAkKENM
T05FKSAiJCg+KSIgIiQoPCkiICQoTlVMTF9PVVQpDQp9DQoNCmFjdGlvbnMgR2VuRmlsZTEN
CnsNCiAgICAkKD5bMV0pICQoPCkgJCg+WzItXSkNCn0NCg0KYWN0aW9ucyBGb3J0cmFuDQp7
DQogICAgJChGT1JUUkFOKSAkKEZPUlRSQU5GTEFHUykgLW8gJCg8KSAkKD4pDQp9DQoNCmFj
dGlvbnMgSGFyZExpbmsNCnsNCiAgICAkKFJNKSAiJCg8KSIgMiQoTlVMTF9PVVQpICQoTlVM
TF9PVVQpDQogICAgJChMTikgIiQoPikiICIkKDwpIiAkKE5VTExfT1VUKQ0KfQ0KDQphY3Rp
b25zIEluc3RhbGwNCnsNCiAgICAkKENQKSAkKD4pICQoPCkgDQp9DQoNCiMgZHdhIDYvNC8w
MSAtIG1vZGlmaWVkIGZvciBib29zdA0KYWN0aW9ucyB0b2dldGhlciBMZXgNCnsNCiAgICAk
KExFWCkgJChMRVhGTEFHUykgJChMRVhfT1VUUFVUKSQoPCkgJCg+KQ0KfQ0KDQojIGR3YSA2
LzQvMDEgLSBtb2RpZmllZCBmb3IgYm9vc3QNCmFjdGlvbnMgdG9nZXRoZXIgTGV4TXYNCnsN
CiAgICAkKE1WKSBsZXgueXkuYyAkKDwpDQp9DQoNCmFjdGlvbnMgTWtEaXIxDQp7DQogICAg
JChNS0RJUikgIiQoPCkiDQp9DQoNCmFjdGlvbnMgdG9nZXRoZXIgUmFubGliDQp7DQogICAg
JChSQU5MSUIpICIkKDwpIg0KfQ0KDQphY3Rpb25zIHF1aWV0bHkgdXBkYXRlZCBwaWVjZW1l
YWwgdG9nZXRoZXIgUm1UZW1wcw0Kew0KICAgICQoUk0pICIkKD4pIg0KfQ0KDQphY3Rpb25z
IFNoZWxsDQp7DQogICAgJChBV0spICcNCiAgICAgICAgICAgIE5SID09IDEgeyBwcmludCAi
JChTSEVMTEhFQURFUikiIH0NCiAgICAgICAgICAgIE5SID09IDEgJiYgL15bIzpdLyB7IG5l
eHQgfQ0KICAgICAgICAgICAgL14jIy8geyBuZXh0IH0NCiAgICAgICAgICAgIHsgcHJpbnQg
fQ0KICAgICcgPCAkKD4pID4gJCg8KQ0KfQ0KDQojIGR3YSA2LzQvMDEgLSBtb2RpZmllZCBm
b3IgYm9vc3QNCmFjdGlvbnMgdG9nZXRoZXIgWWFjYzENCnsNCiAgICAkKFlBQ0MpICQoWUFD
Q0ZMQUdTKSAkKFlBQ0NfT1VUUFVUKSQoPFsxXSkgJCg+KQ0KfQ0KDQojIGR3YSA2LzQvMDEg
LSBtb2RpZmllZCBmb3IgYm9vc3QNCmFjdGlvbnMgdG9nZXRoZXIgWWFjY012DQp7DQogICAg
JChNVikgJChZQUNDRklMRVMpLmMgJCg8WzFdKQ0KICAgICQoTVYpICQoWUFDQ0ZJTEVTKS5o
ICQoPFsyXSkNCn0NCg0KIyBkd2EgNi80LzAxIC0ga2lsbGVkIGFsbCBwbGF0Zm9ybS1zcGVj
aWZpYyBhY3Rpb25zIGZvciBib29zdA0KDQojIGR3YSA2LzQvMDEgLSBtb2RpZmllZCBmb3Ig
Ym9vc3QNCmFjdGlvbnMgdG9nZXRoZXIgWWFjYy1maXgtbGluZS1kaXJlY3RpdmVzDQp7DQog
ICAgJChZQUNDX0ZJWF9MSU5FUykgJCg8KSA+ICQoPCkNCn0NCg==
 --------------070906060407020908080708 Content-Type: text/plain;
name="boost-base.jam"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
filename="boost-base.jam"
I34gQ29weXJpZ2h0IDIwMDItMjAwNCBSZW5lIFJpdmVyYS4NCiN+IENvcHlyaWdodCAyMDAx
LTIwMDQgRGF2aWQgQWJyYWhhbXMuDQojfiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3Qg
U29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuDQojfiAoU2VlIGFjY29tcGFueWluZyBm
aWxlIExJQ0VOU0VfMV8wLnR4dCBvciBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFf
MC50eHQpDQoNCiMgIChDKSBDb3B5cmlnaHQgRGF2aWQgQWJyYWhhbXMgYW5kIENhcmxvcyBQ
aW50byBDb2VsaG8gMjAwMS4gUGVybWlzc2lvbiB0bw0KIyAgY29weSwgdXNlLCBtb2RpZnks
IHNlbGwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBpcyBncmFudGVkIHByb3ZpZGVk
IHRoaXMNCiMgIGNvcHlyaWdodCBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLiBUaGlz
IHNvZnR3YXJlIGlzIHByb3ZpZGVkICJhcyBpcyINCiMgIHdpdGhvdXQgZXhwcmVzcyBvciBp
bXBsaWVkIHdhcnJhbnR5LCBhbmQgd2l0aCBubyBjbGFpbSBhcyB0byBpdHMgc3VpdGFiaWxp
dHkNCiMgIGZvciBhbnkgcHVycG9zZS4NCiMNCiMgSmFtcnVsZXMgZmlsZSBieSBEYXZpZCBB
YnJhaGFtcyAoYWJyYWhhbXNAbWVkaWFvbmUubmV0KSBhbmQgQ2FybG9zIFBpbnRvDQojIENv
ZWxobyAoY2ZzcGNAYWx0cmFicm9hZGJhbmQuY29tKS4NCg0KIyBOb3RlcyBvbiB0aGUgZGVz
aWduIG9mIHRoZSBzeXN0ZW06DQojDQojIFRoaXMgc3lzdGVtIGlzIGRlc2lnbmVkIHRvIHN1
cHBvcnQgYnVpbGRpbmcgdGhlICJzYW1lIiB0YXJnZXRzIHdpdGggbXVsdGlwbGUNCiMgYnVp
bGQgdG9vbCBzdWl0ZXMgKGUuZy4gbXN2YywgZ2NjLC4uLikgIGFuZCBidWlsZCB2YXJpYW50
cyAoZS5nLiBkZWJ1ZywNCiMgcmVsZWFzZS4uLikuIEFsdGhvdWdoIGl0IGN1cnJlbnRseSB2
YXJpZXMgYWNyb3NzIHR3byBkaW1lbnNpb25zLCBpdCBzaG91bGQNCiMgdHJpdmlhbGx5IHN1
cHBvcnQgZXh0ZW5zaW9uIHRvIHRocmVlIG9yIG1vcmUsIGUuZy4gaW4gY2FzZSBvZiBjcm9z
cy1wbGF0Zm9ybQ0KIyBidWlsZHMuIFRoZSB3b3JkICJzYW1lIiBpcyB3cml0dGVuIGluIHF1
b3RlcyBhYm92ZSBiZWNhdXNlIGludGVybmFsbHksDQojIHNlcGFyYXRlIHRhcmdldHMgYXJl
IGdlbmVyYXRlZCBmb3IgZWFjaCB1bmlxdWUgdG9vbHNldC9idWlsZC12YXJpYW50DQojIGNv
bWJpbmF0aW9uLg0KIw0KIyBTcGVjaWZpY3Mgb2YgYnVpbGQgdG9vbCBzdWl0ZXMgYXJlIHNw
ZWNpZmllZCBpbiBmaWxlcyB3aXRoIG5hbWVzIG9mIHRoZSBmb3JtDQojICI8bmFtZT4tdG9v
bHMuamFtIiwgd2hlcmUgPG5hbWU+IGlzIHRoZSBuYW1lIHVzZWQgdG8gaWRlbnRpZnkgdGhl
IHRvb2wgc3VpdGUuDQoNCiMgV29ya2Fyb3VuZHMgZm9yIEphbSBsaW1pdGF0aW9uczoNCiMN
CiMgMS4gSmFtIHN1cHBvcnRzIHNvbWV0aGluZyBsaWtlIHRoZSBzZXR0aW5nIG9mIGF0dHJp
YnV0ZXMgb24gdGFyZ2V0cyB1c2luZyB0aGUNCiMgICAgc3ludGF4Og0KIyAgICAgICA8bmFt
ZT4gb24gPHRhcmdldD4gPSA8ZXhwcmVzc2lvbj4NCiMNCiMgICAgVGhpcyBmYWNpbGl0eSBp
cyB1c2VkIHRvIGNvbnRyb2wgYnVpbGQgYWN0aW9ucyBmb3IgaW5kaXZpZHVhbCB0YXJnZXRz
DQojICAgICh0YXJnZXQtc3BlY2lmaWMgdmFyaWFibGVzIHRha2UgcHJlY2VkZW5jZSBvdmVy
IGdsb2JhbCBvbmVzIHdoZW4gYnVpbGQNCiMgICAgYWN0aW9ucyAjIGFyZSBleGVjdXRlZCku
IEFuIG9idmlvdXMgYXBwcm9hY2ggd291bGQgYmUgdG8gdXNlIHRhcmdldA0KIyAgICBhdHRy
aWJ1dGVzIHRvIGhvbGQgIyBwcm9wZXJ0aWVzIG9mIGJ1aWxkIHRvb2xzIChlLmcuIHdoZXJl
IHRvIGZpbmQgdGhlDQojICAgIHN0YW5kYXJkIGluY2x1ZGVzKS4gICMgVW5mb3J0dW5hdGVs
eSwgYWx0aG91Z2ggeW91IGNhbiB3cml0ZSB0YXJnZXQNCiMgICAgYXR0cmlidXRlcywgdGhl
cmUgaXMgbm8gd2F5IHRvICMgcmVhZCB0aGVtLiBJbnN0ZWFkLCB3ZSB0YWtlIGFkdmFudGFn
ZSBvZg0KIyAgICB0d28gcHJvcGVydGllcyBvZiBKYW06DQojDQojICAgIGEuIEEgdmFyaWFi
bGUgbmFtZSBjYW4gYmUgZm9ybWVkIGJ5IGV2YWx1YXRpbmcgYW4gZXhwcmVzc2lvbi4gRm9y
IGV4YW1wbGUsDQojICAgICAgIHRoZSBmb2xsb3dpbmcgcnVsZSwgYXBwZW5kcyBGT09CQVIg
dG8gaXRzIGZpcnN0IGFyZ3VtZW50IHRvIGZvcm0gdGhlDQojICAgICAgIG5hbWUgb2YgYSBu
ZXcgdmFyaWFibGUsIHdoaWNoIGlzIGdpdmVuIHRoZSB2YWx1ZSAiYmF6Ig0KIw0KIyAgICAg
ICAgICBydWxlIFggeyAkKDEpRk9PQkFSID0gYmF6IDsgfQ0KIw0KIyAgICBiLiBBbnkgY2hh
cmFjdGVyIGlzIGFsbG93ZWQgaW4gYSB2YXJpYWJsZSBuYW1lLiBTbywgYWx0aG91Z2ggdGhl
eSBhcmUNCiMgICAgICAgYWN0dWFsbHkgZ2xvYmFsIHZhcmlhYmxlcywgd2UgY2FuIGZvcm0g
bmFtZXMgbGlrZSA8bmFtZT4uYysrLWZsYWdzIHRodXM6DQojICAgICAgIA0KIyAgICAgICAg
ICBDKytGTEFHUyA9ICQoJCgxKS5jKystZmxhZ3MpICMgR2V0IHRoZSBjKystZmxhZ3MgImF0
dHJpYnV0ZSIgZnJvbSAkKDEpDQojDQojIDIuIFRoZXJlIGlzIG5vIHdheSB0byBjYWxsIGEg
cnVsZSBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZQ0KIyAgICBvdGhlciB0aGFu
IGJ5IHVzaW5nIGEgc3dpdGNoIHN0YXRlbWVudC4gQmVjYXVzZSB0aGF0IGFwcHJvYWNoIHJl
cXVpcmVzDQojICAgIGludHJ1c2l2ZSBjaGFuZ2VzIHRvIHJ1bGVzIHdoZW4gdGhlIHN5c3Rl
bSBpcyBleHRlbmRlZCwgd2UgaGF2ZSBhdm9pZGVkDQojICAgIGl0LiBJbnN0ZWFkLCB3ZSBo
YXZlIHRha2VuIGFkdmFudGFnZSBvZiB0d28gImZlYXR1cmVzIiBvZiBKYW06DQojDQojICAg
IGEuIFRoZSBuYW1lIG9mIGEgZmlsZSB0byBiZSBpbmNsdWRlZCBjYW4gYmUgY29tcHV0ZWQg
ZnJvbSBhbg0KIyAgICAgICBleHByZXNzaW9uLiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2lu
ZyBpbmNsdWRlcyBhIGZpbGUgd2hvc2UgbmFtZSBpcw0KIyAgICAgICBmb3JtZWQgYnkgY29u
Y2F0ZW5hdGluZyAkKDEpIGFuZCAiLXRvb2xzLmphbSI6DQojDQojICAgICAgICAgICBpbmNs
dWRlICQoMSktdG9vbHMuamFtIA0KIw0KIyAgICBiLiBBIHJ1bGUgY2FuIGJlIHJlZGVmaW5l
ZCBhbnkgbnVtYmVyIG9mIHRpbWVzLiBJdHMgbGF0ZXN0IGRlZmluaXRpb24gaXMNCiMgICAg
ICAgdGhlIG9uZSBpbnZva2VkLiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBwcmludHMg
IiMyIi4NCiMNCiMgICAgICAgICAgIHJ1bGUgWCB7IEVDSE8gIzEgOyB9DQojICAgICAgICAg
ICBydWxlIFggeyBFQ0hPICMyIDsgfQ0KIyAgICAgICAgICAgWCA7DQojDQojICAgIFRvZ2V0
aGVyLCB0aGVzZSBmYWN0cyBhbGxvdyB1cyB0byBzZWxlY3QgdG9vbC1zdWl0ZS1zcGVjaWZp
YyBhY3Rpb25zIGZvcg0KIyAgICBidWlsZGluZyBzcGVjaWZpYyB0YXJnZXQgdHlwZXMgYnkg
cmVwZWF0ZWRseSByZWRlZmluaW5nIHRoZSBnZW5lcmFsaXplZA0KIyAgICBidWlsZCBhY3Rp
b25zIGluIHRoZSB2YXJpb3VzIDxidWlsZC10b29scz4tdG9vbHMuamFtIGZpbGVzDQoNCmlm
ICQoTlQpDQp7DQogICAgVE9PTFMgPz0gdmMtN18xIDsNCn0NCmVsc2UNCnsNCiAgICBUT09M
UyA/PSBnY2MgOw0KfQ0KDQpTSEFSRURfVFlQRVMgPSBETEwgOw0KU1RBVElDX1RZUEVTID0g
TElCIDsNCg0KIyBkZXRlY3QtYnVpbGQtdG9vbHMgPHRvb2xzLW5hbWU+IDogPGRldGVjdGlv
bi1jb21tYW5kPg0KIw0KIyBEZWNsYXJlcyBhIHBzZXVkb3RhcmdldCBmb3IgdGhlIHNwZWNp
ZmllZCBidWlsZCB0b29scyB3aGljaCBpcyBidWlsdCBieQ0KIyB0aGUgZ2l2ZW4gPGRldGVj
dGlvbi1jb21tYW5kPi4gDQojDQojIEFsdGhvdWdoIG5vdCBjdXJyZW50bHkgaW1wbGVtZW50
ZWQsIHRoZSBwbGFuIGlzIHRvIG1ha2UgY29tcGlsYXRpb24gb2YNCiMgdG9vbC1zcGVjaWZp
YyB0YXJnZXRzIGRlcGVuZGVudCBvbiB0aGlzIHBzZXVkb3RhcmdldC4gVGhhdCB3YXksIHdl
IHdpbGwgbmV2ZXINCiMgZXZlbiBhdHRlbXB0IHRvIGJ1aWxkIHRhcmdldHMgZm9yIHRvb2xz
IHRoYXQgZG9uJ3QgZXhpc3QuDQpydWxlIGRldGVjdC1idWlsZC10b29scw0Kew0KICAgIGRl
dGVjdGlvbi1jb21tYW5kIG9uICQoPCkgPSAkKCQoPCkuYmluLWRpcmVjdG9yeSkkKD4pIDsN
Cn0NCg0KIyBsaWI6IGdlbmVyYXRvciBmdW5jdGlvbg0KIw0KcnVsZSBsaWJyYXJ5LWZpbGUg
KCB0YXJnZXQgOiBzb3VyY2VzICsgKQ0Kew0KICAgIExpYnJhcnlGcm9tT2JqZWN0cyAkKDwp
IDogWyBPYmplY3RzICQoPikgXSA7DQp9DQoNCiMgZXhlOiBnZW5lcmF0b3IgZnVuY3Rpb24N
CiMNCnJ1bGUgZXhlY3V0YWJsZS1maWxlICggdGFyZ2V0IDogc291cmNlcyArICkNCnsNCiAg
ICB0eXBlLURFUEVORFMgZXhlIDogJCg8KSA7DQogICAgbWFpbi1mcm9tLW9iamVjdHMgJCg8
KSA6IFsgT2JqZWN0cyAkKD4pIF0gOiBFWEUgOw0KfQ0KDQojIGRsbDogZ2VuZXJhdG9yIGZ1
bmN0aW9uDQojDQpydWxlIGRsbC1maWxlcyAoIG1vZHVsZSBpbXBsaWIgPyA6IHNvdXJjZXMg
KiA6IHRhcmdldC10eXBlID8gKQ0Kew0KICAgIHR5cGUtREVQRU5EUyBkbGwgOiAkKDwpIDsN
CiAgICANCiAgICAjIFNldCB1cCB0aGUgaW1wb3J0IGxpYnJhcnkgZGVwZW5kZW5jeSBvbiBX
aW5kb3dzDQogICAgaWYgJCg8WzJdKQ0KICAgIHsNCiAgICAgICAgSU5DTFVERVMgJCg8WzFd
KSA6ICQoPFsyLV0pIDsNCiAgICAgICAgSU5DTFVERVMgJCg8WzItXSkgOiAkKDxbMV0pIDsN
CiAgICB9DQogICAgDQogICAgdGFyZ2V0LXR5cGUgPz0gRExMIDsNCiAgICBpZiBbIE1BVENI
IF4oQ1JBWSkuKiA6ICQoSkFNVU5BTUVbLTFdKSBdICMgbm8gc2hhcmVkIGxpYnMgb24gY3Jh
eQ0KICAgIHsNCiAgICAgICAgTk9URklMRSAkKDwpIDsNCiAgICB9DQogICAgZWxzZQ0KICAg
IHsNCiAgICAgICAgbWFpbi1mcm9tLW9iamVjdHMgJCg8KSA6IFsgT2JqZWN0cyAkKD4pIF0g
OiAkKHRhcmdldC10eXBlKSA7DQogICAgfQ0KfQ0KDQojIHRlbXBsYXRlOiBtb2RpZmllciBm
dW5jdGlvbg0KIw0KIyBUaGUgdGFyZ2V0IHNwZWNzIGFyZSBtb2RpZmllZCBieSBhZGRpbmcg
dGhvc2UgcHJldmlvdXNseSBzcGVjaWZpZWQgaW4gYSB0ZW1wbGF0ZSBzb3VyY2UuDQojIEFu
eSBzcGVjcyBjb250YWluaW5nIHBhdGhzIGFyZSByZXJvb3RlZCB0byBjb3JyZWN0bHkgcmVm
ZXJlbmNlIHRoZSBkZXBlbmRlZSBsb2NhdGlvbnMuDQojDQpydWxlIHRlbXBsYXRlLW1vZGlm
aWVyICggdGFyZ2V0IDogc291cmNlICkNCnsNCiAgICBsb2NhbCBzb3VyY2UtZGlyID0gWyBk
aXJlY3Rvcnktb2YgJChzb3VyY2U6Rz0pIF0gOw0KICAgIGxvY2FsIHNvdXJjZS1pZCA9IFsg
dGFyZ2V0LWlkLW9mICQoc291cmNlKSBdIDsNCiAgICANCiAgICAjIE1ha2Ugc3VyZSBpdCdz
IGRlZmluZWQuDQogICAgIw0KICAgIGlmICEgJChnVEFSR0VUX1RZUEUoJChzb3VyY2UtaWQp
KSkNCiAgICB7DQogICAgICAgIGRlcGVuZGVudC1pbmNsdWRlICQoc291cmNlOkc9KSA7DQog
ICAgfQ0KICAgIA0KICAgICMgQ29weSB0aGUgYmFzZSBzcGVjcyBpbnRvIHRoZSB0YXJnZXQg
c3BlY3MsIGFkanVzdCBhbnkgcGF0aHMNCiAgICAjDQogICAgZ1RBUkdFVF9TT1VSQ0VTKCQo
dGFyZ2V0KSkgKz0NCiAgICAgICAgWyByb290LXBhdGhzICQoZ1RBUkdFVF9TT1VSQ0VTKCQo
c291cmNlLWlkKSkpIDogJChzb3VyY2UtZGlyKSBdIDsNCiAgICBnVEFSR0VUX0RFUFMoJCh0
YXJnZXQpKSArPQ0KICAgICAgICBbIHJvb3QtcGF0aHMgJChnVEFSR0VUX0RFUFMoJChzb3Vy
Y2UtaWQpKSkgOiAkKHNvdXJjZS1kaXIpIF0gOw0KICAgIGdUQVJHRVRfUkVRVUlSRU1FTlRT
KCQodGFyZ2V0KSkgKz0NCiAgICAgICAgWyBmaXh1cC1wYXRoLXByb3BlcnRpZXMgJChnVEFS
R0VUX1JFUVVJUkVNRU5UUygkKHNvdXJjZS1pZCkpKSA6ICQoc291cmNlLWRpcikgXSA7DQog
ICAgZ1RBUkdFVF9ERUZBVUxUX0JVSUxEKCQodGFyZ2V0KSkgKz0NCiAgICAgICAgJChnVEFS
R0VUX0RFRkFVTFRfQlVJTEQoJChzb3VyY2UtaWQpKSkgOw0KfQ0KDQojIG1haW4tZnJvbS1v
YmplY3RzIGV4ZS10YXJnZXQgOiBvYmotdGFyZ2V0Li4uIDogKCJFWEUifCJETEwiKQ0KIw0K
IyBnZW5lcmF0ZSBpbnN0cnVjdGlvbnMgdG8gYnVpbGQgdGhlIGdpdmVuICJtYWluIiB0YXJn
ZXQgZnJvbSB0aGUgZ2l2ZW4gb2JqZWN0DQojIGZpbGVzIGdpdmVuIGluIHRoZSAybmQgcGFy
YW1ldGVyLiBUaGUgM3JkIHBhcmFtZXRlciBzaG91bGQgYmUgRVhFIGZvciBhbg0KIyBleGVj
dXRhYmxlLCBvciBETEwgZm9yIGEgc2hhcmVkIGxpYnJhcnkuDQpydWxlIG1haW4tZnJvbS1v
YmplY3RzICggdGFyZ2V0cyAqIDogb2JqZWN0cyAqIDogdHlwZSApDQp7DQogICAgIyBtYWtl
IGNvbXBpbGVkIHNvdXJjZXMgYSBkZXBlbmRlbmN5IG9mIHRhcmdldA0KDQogICAgTWFrZUxv
Y2F0ZSAkKHRhcmdldHMpIDogJChMT0NBVEVfVEFSR0VUKSA7DQoNCiAgICBDbGVhbiBjbGVh
biA6ICQodGFyZ2V0cykgOw0KDQogICAgTU9ERSBvbiAkKHRhcmdldHMpID0gJCgkKHR5cGUp
TU9ERSkgOw0KICAgIGxvY2FsIGxpbmstZnVuY3Rpb24gPSBMaW5rLSQodHlwZSkgOw0KICAg
IGxvY2FsIGV4dHJhLWZpbGVzID0gWyAkKGxpbmstZnVuY3Rpb24pICQodGFyZ2V0cykgOiAk
KG9iamVjdHMpIDogJCh0eXBlKSBdIDsNCiAgICBDaG1vZCAkKHRhcmdldHNbMV0pIDsNCiAg
ICBERVBFTkRTICQodGFyZ2V0cykgOiAkKG9iamVjdHMpIDsNCiAgICANCiAgICAjIGxvY2F0
ZSBhbmQgYXR0YWNoIHRoZSBleHRyYSBmaWxlcyBnZW5lcmF0ZWQNCiAgICBpZiAkKGV4dHJh
LWZpbGVzKQ0KICAgIHsNCiAgICAgICAgTWFrZUxvY2F0ZSAkKGV4dHJhLWZpbGVzKSA6ICQo
TE9DQVRFX1RBUkdFVCkgOw0KICAgICAgICBERVBFTkRTICQodGFyZ2V0cykgOiAkKGV4dHJh
LWZpbGVzKSA7DQogICAgfQ0KICAgIA0KICAgIGdGSUxFUygkKHRhcmdldHNbMV0pKSA9ICQo
dGFyZ2V0cykgJChleHRyYS1maWxlcykgOw0KfQ0KDQpydWxlIC5kby1saW5rICggdGFyZ2V0
cyArIDogc291cmNlcyArIDogdHlwZSApDQp7DQogICAgIyBQcmVwYXJlIE5FRURMSUJTIGZv
ciB1c2UgYnkgdGhlIHRvb2xzZXRzJyBsaW5rIGFjdGlvbiAoZS5nLiBmb3INCiAgICAjIGlu
dm9raW5nIHdpdGgtY29tbWFuZC1maWxlKQ0KICAgIGxvY2FsIE5FRURMSUJTID0gWyBvbiAk
KDwpIHJldHVybiAkKE5FRURMSUJTKSBdIDsNCiAgICANCiAgICByZXR1cm4gWyBMaW5rLWFj
dGlvbiAkKHRhcmdldHMpIDogJChzb3VyY2VzKSA6ICQodHlwZSkgXSA7DQp9DQoNCnJ1bGUg
TGluay1FWEUNCnsNCiAgICAjIE4uQi4gQnkgdGhlIHRpbWUgdGhpcyBydWxlIGlzIGludm9r
ZWQsIHdlIGhhZCBiZXR0ZXIgaGF2ZSBnUlVOX1BBVEggY29tcGxldGVseSBzZXQuDQogICAg
DQogICAgbG9jYWwgZXh0cmEtZmlsZXMgPSBbIC5kby1saW5rICQoPCkgOiAkKD4pIDogRVhF
IF0gOw0KICAgIFJVTl9QQVRIIG9uICQoPCkgPSBbIGpvaW4gWyB1bmlxdWUgJChnUlVOX1BB
VEgoJCg8KSkpICQoZ1RPT0xTRVRfTElCX1BBVEgpIF0gOiAkKFNQTElUUEFUSCkgXSA7DQog
ICAgaWYgJChVTklYKSANCiAgICB7DQogICAgICAgIExJTktfTElCUEFUSCBvbiAkKDwpID0g
WyBqb2luICQoZ1JVTl9MRF9MSUJSQVJZX1BBVEgoJCg8KSkpIDogJChTUExJVFBBVEgpIF0g
Ow0KICAgIH0NCiAgICANCiAgICByZXR1cm4gJChleHRyYS1maWxlcykgOw0KfQ0KDQpydWxl
IExpbmstRExMDQp7DQogICAgZ1JVTl9MRF9MSUJSQVJZX1BBVEgoJCg8KSkgKz0gJChnTE9D
QVRFKCQoPFsxXSkpKSAkKGdUT09MU0VUX0xJQl9QQVRIKSA7DQogICAgaWYgJChVTklYKSAN
CiAgICB7DQogICAgICAgIExJTktfTElCUEFUSCBvbiAkKDwpID0gWyBqb2luICQoZ1JVTl9M
RF9MSUJSQVJZX1BBVEgoJCg8KSkpIDogJChTUExJVFBBVEgpIF0gOw0KICAgIH0NCiAgICAN
CiAgICByZXR1cm4gWyAuZG8tbGluayAkKDwpIDogJCg+KSA6IERMTCBdIDsNCn0NCg0KIyBz
dG9yZSB0aGUgc2hlbGwncyBQQVRIIGFnYWluLCBqdXN0IGluIGNhc2Ugc29tZW9uZSB1c2Vz
IFBBVEguDQojIFRoaXMgYWxzbyBhbGxvd3MgdGhlIHVzZXIgdG8gY3VzdG9taXplIHRoZSBi
YXNlIHBhdGggZm9yIHJ1bm5pbmcgYnVpbHQNCiMgcHJvZHVjdHMgZnJvbSB0aGUgY29tbWFu
ZC1saW5lDQpSVU5fUEFUSCA/PSAkKFBBVEgpIDsNCmlmICQoVU5JWCkNCnsNCiAgICBMSU5L
X0xJQlBBVEggPz0gJCgkKGdTSEVMTF9MSUJQQVRIKSkgOw0KICAgIGdBUFBFTkRfTERfTElC
UkFSWV9QQVRIID0gIjokIiQoZ1NIRUxMX0xJQlBBVEgpIDsNCiAgICBnQVBQRU5EX1BBVEgg
PSAiOiQiUEFUSCA7DQp9IA0KaWYgJChOVCkNCnsNCiAgICAjIFRyeSBzb21lIG90aGVyIGxp
a2VseSBzcGVsbGluZ3MNCiAgICBSVU5fUEFUSCA/PSAkKFBhdGgpIDsNCiAgICBSVU5fUEFU
SCA/PSAkKHBhdGgpIDsNCiAgICBnQVBQRU5EX0xEX0xJQlJBUllfUEFUSCA9ICI7JUxEX0xJ
QlJBUllfUEFUSCUiIDsNCiAgICBnQVBQRU5EX1BBVEggPSAgO1wiJVBBVEglXCIgOw0KfQ0K
DQojIE5vdyBzZXQgdGhpcywganVzdCBpbiBjYXNlIHNvbWVvbmUgdHJpZXMgdG8gdXNlIGl0
Lg0KUEFUSCA9ICQoUlVOX1BBVEgpIDsNCmlmICQoVU5JWCkNCnsNCiAgICAkKGdTSEVMTF9M
SUJQQVRIKSA9ICQoTElOS19MSUJQQVRIKSA7DQp9IA0KDQpET0xMQVIgPSAiJCIgOw0KICAN
CiMgYnViYmxlIHZhcmlhYmxlLW5hbWUNCiMNCiMgSGVscGVyIGZ1bmN0aW9uIGZvciBzb3J0
LCBiZWxvdw0KIyBSZW1vdmVzIHRoZSBncmVhdGVzdCBlbGVtZW50IGZyb20gJCh2YXJpYWJs
ZS1uYW1lKSBhbmQgcmV0dXJucyBpdC4NCnJ1bGUgYnViYmxlICMgDQp7DQogICAgbG9jYWwg
cmVzdWx0ID0gOw0KICAgIGxvY2FsIGxhc3QgPSAkKCQoPClbMV0pIDsNCiAgICBmb3IgeCBp
biAkKCQoPClbMi1dKQ0KICAgIHsNCiAgICAgICAgaWYgJChsYXN0KSA8PSAkKHgpDQogICAg
ICAgIHsNCiAgICAgICAgICAgIHJlc3VsdCArPSAkKGxhc3QpIDsNCiAgICAgICAgICAgIGxh
c3QgPSAkKHgpIDsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAg
ICAgICAgIHJlc3VsdCArPSAkKHgpIDsNCiAgICAgICAgfQ0KICAgIH0NCiAgICAkKDwpID0g
JChyZXN1bHQpIDsNCiAgICByZXR1cm4gJChsYXN0KSA7DQp9DQoNCiMgc29ydCBhcmdzDQoj
DQojIHJldHVybiBhcmdzIHNvcnRlZCBpbiBsZXhpY29ncmFwaGljIG9yZGVyLg0KcnVsZSBz
b3J0DQp7DQogICAgbG9jYWwgX2FsbCA9ICQoPCkgOw0KICAgIGxvY2FsIF9yZXN1bHQgPSA7
DQogICAgbG9jYWwgX2NvdW50IDsNCiAgICBmb3IgX2NvdW50IGluICQoPCkNCiAgICB7DQog
ICAgICAgIF9yZXN1bHQgPSBbIGJ1YmJsZSBfYWxsIF0gJChfcmVzdWx0KSA7DQogICAgfQ0K
ICAgIHJldHVybiAkKF9yZXN1bHQpIDsNCn0NCg0KIyBtaW4gYXJncw0KIw0KIyByZXR1cm4g
dGhlIGxleGljb2dyYXBoaWMgbWluaW11bSBlbGVtZW50IG9mIGFyZ3MNCnJ1bGUgbWluDQp7
DQogICAgbG9jYWwgcmVzdWx0ID0gOw0KICAgIGxvY2FsIHggOw0KICAgIGZvciB4IGluICQo
PCkNCiAgICB7DQogICAgICAgIGlmICEgJChyZXN1bHQpIHx8ICggJCh4KSA8ICQocmVzdWx0
KSApDQogICAgICAgIHsNCiAgICAgICAgICAgIHJlc3VsdCA9ICQoeCkgOw0KICAgICAgICB9
DQogICAgfQ0KICAgIHJldHVybiAkKHJlc3VsdCkgOw0KfQ0KDQojIGRpZmZlcmVuY2UgbGlz
dEIgOiBsaXN0QQ0KIyByZXR1cm5zIHRoZSBlbGVtZW50cyBvZiBCIHRoYXQgYXJlIG5vdCBp
biBBDQpydWxlIGRpZmZlcmVuY2UNCnsNCiAgICBsb2NhbCByZXN1bHQgPSA7DQogICAgbG9j
YWwgZWxlbWVudCA7DQogICAgZm9yIGVsZW1lbnQgaW4gJCg8KQ0KICAgIHsNCiAgICAgICAg
aWYgISAoICQoZWxlbWVudCkgaW4gJCg+KSApDQogICAgICAgIHsNCiAgICAgICAgICAgIHJl
c3VsdCArPSAkKGVsZW1lbnQpIDsNCiAgICAgICAgfQ0KICAgIH0NCiAgICByZXR1cm4gJChy
ZXN1bHQpIDsNCn0NCg0KIyByZXBsYWNlIGxpc3QgOiBvbGQtdmFsdWUgbmV3LXZhbHVlDQoj
DQojIHJldHVybnMgbGlzdCB3aXRoIG9jY3VycmVuY2VzIG9mIG9sZC12YWx1ZSByZXBsYWNl
ZCBieSBuZXctdmFsdWUNCnJ1bGUgcmVwbGFjZQ0Kew0KICAgIGxvY2FsIHJlc3VsdCA9IDsN
CiAgICBsb2NhbCB4IDsNCiAgICBmb3IgeCBpbiAkKDwpDQogICAgew0KICAgICAgICBpZiAk
KHgpID0gJCg+WzFdKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXN1bHQgKz0gJCg+WzJd
KSA7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICBy
ZXN1bHQgKz0gJCh4KSA7DQogICAgICAgIH0NCiAgICB9DQogICAgcmV0dXJuICQocmVzdWx0
KSA7DQp9DQoNCiMgc2VsZWN0LXVuZ3Jpc3RlZCBsaXN0Li4uDQojDQojIFJldHVybnMgdGhl
IGVsZW1lbnRzIG9mIGxpc3QgdGhhdCBoYXZlIG5vIGdyaXN0DQpydWxlIHNlbGVjdC11bmdy
aXN0ZWQNCnsNCiAgICBsb2NhbCByZXN1bHQgeCA7DQogICAgZm9yIHggaW4gJCg8KQ0KICAg
IHsNCiAgICAgICAgaWYgISAkKHg6RykNCiAgICAgICAgew0KICAgICAgICAgICAgcmVzdWx0
ICs9ICQoeCkgOw0KICAgICAgICB9DQogICAgfQ0KICAgIHJldHVybiAkKHJlc3VsdCkgOw0K
fQ0KDQpydWxlIHNlbGVjdC1ncmlzdGVkICggbGlzdCAqICkNCnsNCiAgICBsb2NhbCByZXN1
bHQgOw0KICAgIGZvciBsb2NhbCB4IGluICQobGlzdCkNCiAgICB7DQogICAgICAgIGlmICQo
eDpHKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXN1bHQgKz0gJCh4KSA7DQogICAgICAg
IH0NCiAgICB9DQogICAgcmV0dXJuICQocmVzdWx0KSA7DQp9DQoNCiMgUmV0dXJucyBncmlz
dCB3aXRob3V0ICI8Ii8iPiIgZm9yIGVsZW1lbnRzIG1hdGNoaW5nICI8Lio+IiwNCiMgYW5k
IGlnbm9yZXMgb3RoZXIgZWxlbWVudHMuDQpydWxlIHVuZ3Jpc3QgKCBuYW1lcyAqICkNCnsN
CiAgICBsb2NhbCByZXN1bHQgOw0KICAgIGZvciBsb2NhbCBuYW1lIGluICQobmFtZXMpDQog
ICAgew0KICAgICAgICBsb2NhbCBzdHJpcHBlZCA9IFsgTUFUQ0ggXjwoLiopPiQgOiAkKG5h
bWUpIF0gOw0KICAgICAgICByZXN1bHQgKz0gJChzdHJpcHBlZCkgOw0KICAgIH0NCiAgICBy
ZXR1cm4gJChyZXN1bHQpIDsNCn0NCg0KDQojIFNwbGl0IGEgcXVhbGlmaWVkIHByb3BlcnR5
IGludG8gMyBlbGVtZW50cy4gDQojDQojIEdyYW1tYXIgZGVzY3JpcHRpb24gb2YgcXVhbGlm
aWVkLXByb3BlcnR5IDoNCiMgICBbWzx0b29sc2V0Pl08dmFyaWFudD5dcHJvcGVydHkNCiMN
CiMgcmV0dXJucyA8dG9vbHNldD4gPHZhcmlhbnQ+IHByb3BlcnR5DQp7DQogICAgbG9jYWwg
Z3Jpc3QxID0gJCg8OkcpIDsNCiAgICBsb2NhbCB1bmdyaXN0MSA9ICQoPDpHPSkgOw0KICAg
IGxvY2FsIGdyaXN0MiA9ICQodW5ncmlzdDE6RykgOw0KICAgIGxvY2FsIHVuZ3Jpc3QyID0g
JCh1bmdyaXN0MTpHPSkgOw0KICAgIGxvY2FsIGdyaXN0MyA9ICQodW5ncmlzdDI6RykgOw0K
ICAgIGxvY2FsIHVuZ3Jpc3QzID0gJCh1bmdyaXN0MjpHPSkgOw0KICAgIGlmICQoZ3Jpc3Qz
KQ0KICAgIHsNCiAgICAgICAgcmV0dXJuICQoZ3Jpc3QxKSAkKGdyaXN0MikgJChncmlzdDMp
JCh1bmdyaXN0MykgOw0KICAgIH0NCiAgICBlbHNlIGlmICQoZ3Jpc3QyKQ0KICAgIHsNCiAg
ICBlbHNlDQogICAgew0KfQ0KDQpydWxlIHVuaXF1ZSAjIGxpc3QNCnsNCiAgICBsb2NhbCBy
ZXN1bHQgPSA7DQogICAgbG9jYWwgZiA7DQogICAgZm9yIGYgaW4gJCg8KQ0KICAgIHsNCiAg
ICAgICAgaWYgISAkKGYpIGluICQocmVzdWx0KQ0KICAgICAgICB7DQogICAgICAgICAgICBy
ZXN1bHQgKz0gJChmKSA7DQogICAgICAgIH0NCiAgICB9DQogICAgcmV0dXJuICQocmVzdWx0
KSA7DQp9DQoNCiMgZ2V0LXByb3BlcnRpZXMgZmVhdHVyZXMgOiBwcm9wZXJ0aWVzDQojDQoj
IEdpdmVuIGEgbGlzdCBvZiBncmlzdGVkIGZlYXR1cmVzIGFuZCBhIGxpc3Qgb2YgcHJvcGVy
dGllcywgcmV0dXJucyB0aGUNCiMgcHJvcGVydGllcyBtYXRjaGluZyB0aGUgZ2l2ZW4gZmVh
dHVyZXMuDQpydWxlIGdldC1wcm9wZXJ0aWVzIA0Kew0KICAgIGxvY2FsIHJlc3VsdCA9IDsN
CiAgICBsb2NhbCBwcm9wZXJ0eSA7DQogICAgZm9yIHByb3BlcnR5IGluICQoPikNCiAgICB7
DQogICAgICAgIGlmICQocHJvcGVydHk6RykgaW4gJCg8KQ0KICAgICAgICB7DQogICAgICAg
ICAgICByZXN1bHQgKz0gJChwcm9wZXJ0eSkgOw0KICAgICAgICB9DQogICAgfQ0KICAgIHJl
dHVybiAkKHJlc3VsdCkgOw0KfQ0KICAgIA0KIyBnZXQtdmFsdWVzIGZlYXR1cmVzIDogcHJv
cGVydGllcw0KIw0KIyBHaXZlbiBhIGxpc3Qgb2YgZ3Jpc3RlZCBmZWF0dXJlIG5hbWVzIGFu
ZCBhIGxpc3Qgb2YgcHJvcGVydGllcywgcmV0dXJucyB0aGUNCiMgdmFsdWUocykgb2YgdGhl
IGdpdmVuIGZlYXR1cmVzLg0KcnVsZSBnZXQtdmFsdWVzDQp7DQogICAgbG9jYWwgX3Byb3Bl
cnRpZXMgPSBbIGdldC1wcm9wZXJ0aWVzICQoPCkgOiAkKD4pIF0gOw0KICAgIHJldHVybiAk
KF9wcm9wZXJ0aWVzOkc9KSA7DQp9DQoNCnJ1bGUgcmVwbGFjZS1wcm9wZXJ0aWVzICggcHJv
cGVydHktc2V0ICogOiBuZXctcHJvcGVydGllcyAqICkNCnsNCiAgICBsb2NhbCByZXN1bHQg
PSA7DQogICAgZm9yIGxvY2FsIHggaW4gJChwcm9wZXJ0eS1zZXQpDQogICAgew0KICAgICAg
ICBpZiAkKHg6RykgaW4gJChuZXctcHJvcGVydGllczpHKQ0KICAgICAgICB7DQogICAgICAg
ICAgICBpZiAhICQoeDpHKSBpbiAkKHJlc3VsdDpHKQ0KICAgICAgICAgICAgew0KICAgICAg
ICAgICAgICAgIHJlc3VsdCArPSBbIGdldC1wcm9wZXJ0aWVzICQoeDpHKSA6ICQobmV3LXBy
b3BlcnRpZXMpIF0gOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgIH0N
CiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICByZXN1bHQgKz0gJCh4KSA7
DQogICAgICAgIH0NCiAgICB9DQogICAgcmV0dXJuICQocmVzdWx0KSA7DQp9DQoNCg0KIyBu
b3JtYWxpemUtcHJvcGVydGllcyBwcm9wZXJ0aWVzDQojDQpydWxlIG5vcm1hbGl6ZS1wcm9w
ZXJ0aWVzDQp7DQogICAgbG9jYWwgcHJvcGVydHkgOw0KICAgIGxvY2FsIHJlc3VsdCA7DQog
ICAgZm9yIHByb3BlcnR5IGluICQoPCkNCiAgICB7DQogICAgICAgIHN3aXRjaCAkKHByb3Bl
cnR5KQ0KICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgfQ0K
ICAgIH0NCiAgICByZXR1cm4gJChyZXN1bHQpIDsNCn0NCg0KIyBpbnRlcnNlY3Rpb24gc2V0
MSA6IHNldDINCiMNCiMgUmVtb3ZlcyBmcm9tIHNldDEgYW55IGl0ZW1zIHdoaWNoIGRvbid0
IGFwcGVhciBpbiBzZXQyIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuDQpydWxlIGludGVyc2Vj
dGlvbiANCnsNCiAgICBsb2NhbCByZXN1bHQgdiA7DQogICAgZm9yIHYgaW4gJCg8KQ0KICAg
IHsNCiAgICAgICAgaWYgJCh2KSBpbiAkKD4pDQogICAgICAgIHsNCiAgICAgICAgICAgIHJl
c3VsdCArPSAkKHYpIDsNCiAgICAgICAgfQ0KICAgIH0NCiAgICByZXR1cm4gJChyZXN1bHQp
IDsNCn0NCg0KIyBzdWJzZXQgc3ViIDogc3VwZXINCiMNCiMgUmV0dXJucyB0cnVlIGlmZiBz
dWIgaXMgYSBzdWJzZXQgb2Ygc3VwZXIsIGVtcHR5IG90aGVyd2lzZQ0KcnVsZSBpcy1zdWJz
ZXQNCnsNCiAgICBpZiBbIGludGVyc2VjdGlvbiAkKDwpIDogJCg+KSBdID0gJCg8KQ0KICAg
IHsNCiAgICAgICAgcmV0dXJuIHRydWUgOw0KICAgIH0NCn0NCg0KIyBkaXN0cmlidXRlLWZl
YXR1cmUgPGZlYXR1cmU+dmFsdWUxWy92YWx1ZTIuLi5dDQojDQojIERpc3RyaWJ1dGUgdGhl
IGdpdmVuIGZlYXR1cmUgYWNyb3NzIHRoZSBzbGFzaC1zZXBhcmF0ZWQgc2V0IG9mIHZhbHVl
cywgaS5lLg0KIyByZXR1cm5zIDxmZWF0dXJlPnZhbHVlMVsgPGZlYXR1cmU+L3ZhbHVlMi4u
Ll0NCnJ1bGUgZGlzdHJpYnV0ZS1mZWF0dXJlDQp7DQogICAgbG9jYWwgZyA9ICQoPDpHKSA7
DQogICAgbG9jYWwgcmVzdWx0ID0gWyBzcGxpdC1wYXRoICQoPDpHPSkgXSA7DQogICAgcmV0
dXJuICQoZykkKHJlc3VsdCkgOw0KfQ0KDQojIHNldC1pbnNlcnQgdmFyaWFibGUtbmFtZSA6
IHZhbHVlLi4uIDsNCiMNCiMgQXBwZW5kcyB0aGUgZ2l2ZW4gdmFsdWVzIHRvIHRoZSBsaXN0
IGRlc2lnbmF0ZWQgYnkgdmFyaWFibGUtbmFtZSBpZiB0aGV5IGFyZQ0KIyBub3QgYWxyZWFk
eSBwcmVzZW50Lg0KcnVsZSBzZXQtaW5zZXJ0DQp7DQogICAgbG9jYWwgdiA7DQogICAgZm9y
IHYgaW4gJCg+KQ0KICAgIHsNCiAgICAgICAgaWYgISAoICQodikgaW4gJCgkKDwpKSApDQog
ICAgICAgIHsNCiAgICAgICAgICAgICQoPCkgKz0gJCh2KSA7DQogICAgICAgIH0NCiAgICB9
DQp9DQoNCiMgZXF1YWwtc2V0cyBzZXQxIDogc2V0Mg0KIw0KIyBSZXR1cm5zIHRydWUgaWZm
IHNldDEgY29udGFpbnMgdGhlIHNhbWUgZWxlbWVudHMgYXMgc2V0Mi4NCiMgTm90IHNlbnNp
dGl2ZSB0byB0aGUgc2FtZSBlbGVtZW50IGFwcGVhcmluZyBtdWx0aXBsZSB0aW1lcw0KcnVs
ZSBlcXVhbC1zZXRzDQp7DQogICAgaWYgKCAhIFsgZGlmZmVyZW5jZSAkKDwpIDogJCg+KSBd
ICkgJiYgKCAhIFsgZGlmZmVyZW5jZSAkKD4pIDogJCg8KSBdICkNCiAgICB7DQogICAgICAg
IHJldHVybiB0cnVlIDsNCiAgICB9DQp9DQoNCiMgZmVhdHVyZSBuYW1lIDogW3ZhbHVlcy4u
Ll0NCiMNCiMgRGVjbGFyZXMgYSBmZWF0dXJlIHdpdGggdGhlIGdpdmVuIG5hbWUsIGFuZCB0
aGUgZ2l2ZW4gYWxsb3dlZCB2YWx1ZXMuDQpydWxlIGZlYXR1cmUNCnsNCiAgICBpZiAkKDwp
IGluICQoZ0ZFQVRVUkVTKQ0KICAgIHsNCiAgICAgICAgRVhJVCBmZWF0dXJlICQoPCkgOiAk
KGdGRUFUVVJFX1ZBTFVFUyg8JCg8KT4pIHJlZGVjbGFyZWQgYXMgJCg8KSA6ICQoPikgOw0K
ICAgIH0NCiAgICBnRkVBVFVSRVMgKz0gPCQoPCk+IDsNCiAgICBnVU5HUklTVEVEKDwkKDwp
PikgPSAkKDwpIDsNCiAgICBnRkVBVFVSRV9WQUxVRVMoPCQoPCk+KSA9ICQoPikgOw0KfQ0K
DQpydWxlIGZyZWUtZmVhdHVyZQ0Kew0KICAgIGZlYXR1cmUgJCg8KSA6ICQoPikgOw0KICAg
IGdGUkVFX0ZFQVRVUkVTICs9IDwkKDwpPiA7DQogICAgaWYgJCg+KQ0KICAgIHsNCiAgICAg
ICAgZ1NJTkdMRV9WQUxVRURfRlJFRV9GRUFUVVJFUyArPSA8JCg8KT4gOw0KICAgIH0NCn0N
Cg0KcnVsZSBwYXRoLWZlYXR1cmUNCnsNCiAgICBmcmVlLWZlYXR1cmUgJCg8KSA6ICQoPikg
Ow0KICAgIGdQQVRIX0ZFQVRVUkVTICs9IDwkKDwpPiA7DQp9DQoNCnJ1bGUgZGVwZW5kZW5j
eS1mZWF0dXJlDQp7DQogICAgcGF0aC1mZWF0dXJlICQoPCkgOiAkKD4pIDsNCiAgICBnREVQ
RU5ERU5DWV9GRUFUVVJFUyArPSA8JCg8KT4gOw0KfQ0KDQojIGZlYXR1cmUtZGVmYXVsdCA8
ZmVhdHVyZT4uLi4NCiMNCiMgcmV0dXJuIHRoZSBkZWZhdWx0IHByb3BlcnRpZXMgY29ycmVz
cG9uZGluZyB0byB0aGUgZ2l2ZW4gZmVhdHVyZShzKQ0KcnVsZSBmZWF0dXJlLWRlZmF1bHQN
CnsNCiAgICBsb2NhbCByZXN1bHQgZiA7DQogICAgZm9yIGYgaW4gJCg8KQ0KICAgIHsNCiAg
ICAgICAgcmVzdWx0ICs9ICQoZikkKGdGRUFUVVJFX1ZBTFVFUygkKGYpKVsxXSkgOw0KICAg
IH0NCiAgICByZXR1cm4gJChyZXN1bHQpIDsNCn0NCg0KIyBmbGFncyB0b29scy1uYW1lIHZh
cmlhYmxlLW5hbWUgY29uZGl0aW9uIFs6IHZhbHVlKHMpXQ0KIw0KIyBEZWNsYXJlIGNvbW1h
bmQtbGluZSBzZXR0aW5ncyBmb3IgYSBnaXZlbiB0b29sc2V0Lg0KIyAgIHRvb2xzZXQ6ICAg
ICAgICAgdGhlIG5hbWUgb2YgdGhlIHRvb2xzZXQNCiMgICB2YXJpYWJsZS1uYW1lOiAgIHRo
ZSBuYW1lIG9mIGEgZ2xvYmFsIHZhcmlhYmxlIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNhcnJ5
DQojICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiB0byBhIGNvbW1hbmQtbGluZQ0K
IyAgIGNvbmRpdGlvbjogICAgICAgT25lIG9mIHRoZSBmb2xsb3dpbmc6DQojICAgICAgICAg
ICAgICAgICAgICAxLiB6ZXJvIG9yIG1vcmUgcHJvcGVydHktc2V0cyBvZiB0aGUgZm9ybToN
CiMgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlPnZhbHVlWy88ZmVhdHVyZT52
YWx1ZS4uLl0NCiMgICAgICAgICAgICAgICAgICAgIDIuIG9uZSBvciBtb3JlIDxmZWF0dXJl
PlsvPGZlYXR1cmU+Li4uXQ0KIw0KIyBUaGlzIHJ1bGUgYXBwZW5kcyB0byB0aGUgc3BlY2lm
aWVkIHZhcmlhYmxlLCBkZXBlbmRpbmcgb24gYSB0YXJnZXQncyBidWlsZA0KIyBjb25maWd1
cmF0aW9uIGFuZCB0aGUgZm9ybSBvZiBjb25kaXRpb24uDQojDQojICAgMS4gaWYgYW55IHNw
ZWNpZmllZCBwcm9wZXJ0eS1zZXQgaXMgYSBzdWJzZXQgb2YgdGhlIHRhcmdldCdzIGJ1aWxk
IHByb3BlcnRpZXMgb3IgaWYgDQojICAgY29uZGl0aW9uIGlzIGVtcHR5LCB0aGUgdmFsdWVz
IHNwZWNpZmllZCBpbiAkKDMpIHdpbGwgYmUgYXBwZW5kZWQgb25jZSB0bw0KIyAgIC92YXJp
YWJsZS1uYW1lLy4NCiMNCiMgICAyLiBUaGUgdmFsdWUgb2YgZWFjaCBzcGVjaWZpZWQgZmVh
dHVyZSB0aGF0IHBhcnRpY2lwYXRlcyBpbiB0aGUgdGFyZ2V0J3MNCiMgICBidWlsZCBwcm9w
ZXJhdGllcyBpcyBhcHBlbmRlZCB0byAvdmFyaWFibGUtbmFtZS8uDQojDQojIFRoZSB2YXJp
YWJsZSB3aWxsIGJlIHNldCAib24iIHRoZSB0YXJnZXQgc28gaXQgbWF5IGJlICB1c2VkIGlu
IGl0cyBidWlsZCBhY3Rpb25zLiANCnJ1bGUgZmxhZ3MNCnsNCiAgICBsb2NhbCB0b29sc2V0
ID0gJChnQ1VSUkVOVF9UT09MU0VUKSA7DQogICAgbG9jYWwgdmFyaWFibGUgPSAkKDxbMl0p
IDsNCiAgICBsb2NhbCBjb25kaXRpb24gPSAkKDxbMy1dKSA7DQoNCiAgICAjIHJlY29yZCB0
aGUgbmFtZXMgb2YgYWxsIHZhcmlhYmxlcyB1c2VkIHNvIHRoZXkgY2FuIGJlIHNldCBvbiB0
YXJnZXRzDQogICAgaWYgISAoICQodmFyaWFibGUpIGluICQoZ1RBUkdFVF9WQVJJQUJMRVMp
ICkNCiAgICB7DQogICAgICAgIGdUQVJHRVRfVkFSSUFCTEVTICs9ICQodmFyaWFibGUpIDsN
CiAgICAgICAgJCh2YXJpYWJsZSkgPSA7DQogICAgfQ0KDQogICAgbG9jYWwgZm91bmQgPSA7
DQogICAgbG9jYWwgeCA7DQogICAgZm9yIHggaW4gJChjb25kaXRpb24pDQogICAgew0KICAg
ICAgICB4ID0gWyBzcGxpdC1wYXRoICQoeCkgXSA7DQogICAgICAgIA0KICAgICAgICAjIEFk
ZCBlYWNoIGZlYXR1cmUgdG8gdGhlIHNldCBvZiBmZWF0dXJlcyByZWxldmFudCB0byB0aGUg
dG9vbHNldA0KICAgICAgICBnUkVMRVZBTlRfRkVBVFVSRVMoJCh0b29sc2V0KSkgKz0gJCh4
OkcpIDsNCg0KICAgICAgICAjIGlzIGl0IGEgcHJvcGVydHkgc2V0Pw0KICAgICAgICBpZiAk
KHg6Rz0pDQogICAgICAgIHsNCiAgICAgICAgICAgICAjIGlmIHRoaXMgcHJvcGVydHlfc2V0
IGlzIGEgc3Vic2V0IG9mIHRoZSBjdXJyZW50IGJ1aWxkLXByb3BlcnRpZXMNCiAgICAgICAg
ICAgICBpZiAoICEgJChmb3VuZCkgKSAmJiBbIGlzLXN1YnNldCAkKHgpIDogJChnQlVJTERf
UFJPUEVSVElFUykgXQ0KICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgZm91bmQg
PSB0cnVlIDsNCiAgICAgICAgICAgICAgICAgJCh2YXJpYWJsZSkgKz0gJCg+KSA7DQogICAg
ICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAg
ICAgICAgJCh2YXJpYWJsZSkgKz0gWyBnZXQtdmFsdWVzICQoeCkgOiAkKGdCVUlMRF9QUk9Q
RVJUSUVTKSBdIDsNCiAgICAgICAgICAgIGlmICQoeDpHKSBpbiAkKGdERVBFTkRFTkNZX0ZF
QVRVUkVTKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGdERVBFTkRFTkNZX1ZB
UklBQkxFUygkKHRvb2xzZXQpKSArPSAkKHZhcmlhYmxlKSA7DQogICAgICAgICAgICB9DQog
ICAgICAgIH0NCiAgICB9DQogICAgaWYgISAkKGNvbmRpdGlvbikNCiAgICB7DQogICAgICAg
ICQodmFyaWFibGUpICs9ICQoPikgOw0KICAgIH0NCn0NCg0KIyBpbmNsdWRlLXRvb2xzIHRv
b2xzZXQNCiMNCiMgVW5jb25kaXRpb25hbGx5IHByb2Nlc3MgdGhlIHNwZWNpZmljYXRpb24g
ZmlsZSBmb3IgdGhlIGdpdmVuIHRvb2xzZXQuIEl0IGlzDQojIG5lY2Nlc3NhcnkgdG8gZG8g
dGhpcyBmb3IgZWFjaCB0YXJnZXQgYnVpbHQgd2l0aCB0aGF0IHRvb2xzZXQsIHNpbmNlIHRo
ZQ0KIyB0b29sc2V0IHdpbGwgaW52b2tlIHRoZSBmbGFncyBydWxlIHRvIHNldCBnbG9iYWwg
dmFyaWFibGVzIGJhc2VkIG9uIHRoZSBidWlsZA0KIyBwcm9wZXJ0aWVzIG9mIHRoZSB0YXJn
ZXQuDQpydWxlIGluY2x1ZGUtdG9vbHMgDQp7DQogICAgaWYgISAkKGdJTl9JTkNMVURFX1RP
T0xTKQ0KICAgIHsNCiAgICAgICAgZ0NVUlJFTlRfVE9PTFNFVCA9ICQoPCkgOw0KICAgICAg
ICBnUkVMRVZBTlRfRkVBVFVSRVMoJCg8KSkgPSA7ICMgY2xlYXIgcmVsZXZhbnQgZmVhdHVy
ZSBzZXQNCiAgICAgICAgZ0RFUEVOREVOQ1lfVkFSSUFCTEVTKCQoPCkpID0gOw0KDQogICAg
ICAgICMgY2xlYXIgYW55IGxpbmdlcmluZyB0YXJnZXQgdmFyaWFibGVzIHRoYXQgbWF5IGhh
dmUgYmVlbiBkZWNsYXJlZA0KICAgICAgICAkKGdUQVJHRVRfVkFSSUFCTEVTKSA9IDsNCiAg
ICAgICAgZ1RBUkdFVF9WQVJJQUJMRVMgPSBORUVETElCUyBORUVESU1QUyA7ICMgc3RhcnQg
b3ZlciBmcm9tIHRoZSBiZWdpbm5pbmcNCiAgICAgICAgZ1RPT0xTRVRfTElCX1BBVEggPSA7
DQogICAgfQ0KICAgIA0KICAgIHsNCiAgICAgICAgbG9jYWwgZ0lOX0lOQ0xVREVfVE9PTFMg
PSB0cnVlIDsNCiAgICAgICAgU0VBUkNIIG9uIDxqYW0tbW9kdWxlPiQoPCktdG9vbHMuamFt
ID0gJChCT09TVF9CVUlMRF9QQVRIKSA7DQogICAgICAgIGluY2x1ZGUgPGphbS1tb2R1bGU+
JCg8KS10b29scy5qYW0gOw0KICAgIH0NCiAgICANCiAgICAjIEFsd2F5cyBtYWludGFpbiB0
aGUgbGlzdCBvZiByZWxldmFudCBmZWF0dXJlcyBhcyB1bmlxdWUNCiAgICBpZiAhICQoZ0lO
X0lOQ0xVREVfVE9PTFMpDQogICAgew0KICAgICAgICBnUkVMRVZBTlRfRkVBVFVSRVMoJCg8
KSkgPSBbIA0KICAgICAgICAgIHVuaXF1ZSAkKGdSRUxFVkFOVF9GRUFUVVJFUygkKDwpKSkg
DQogICAgICAgICAgICAkKGdBTFdBWVNfUkVMRVZBTlQpDQogICAgICAgIF0gOw0KICAgIH0N
CiAgICANCiAgICBnSU5DTFVERUQoPGphbS1tb2R1bGU+JCg8KS10b29scy5qYW0pID0gVFJV
RSA7DQp9DQoNCiMgZXh0ZW5kcy10b29sc2V0IHRvb2xzZXQNCiMNCiMgVXNlZCBpbiBhIHRv
b2xzZXQgZGVmaW5pdGlvbiBmaWxlOyBEZWNsYXJlcyB0aGF0IHRoZSB0b29sc2V0IGN1cnJl
bnRseSBiZWluZw0KIyBkZWZpbmVkIGlzIGFuIGV4dGVuc2lvbiBvZiB0aGUgZ2l2ZW4gdG9v
bHNldC4NCnJ1bGUgZXh0ZW5kcy10b29sc2V0DQp7DQogICAgaW5jbHVkZS10b29scyAkKDwp
IDsNCn0NCg0KIyByZWxldmFudC1mZWF0dXJlcyB0b29sc2V0DQojDQojIFJldHVybnMgdGhl
IHNldCBvZiB1bmlxdWUgZmVhdHVyZXMgcmVsZXZhbnQgdG8gdGhlIGdpdmVuIHRvb2xzZXQ7
IGluY2x1ZGVzIHRoZQ0KIyB0b29sc2V0IGRlc2NyaXB0aW9uIGZpbGUgYXMgYSBzaWRlLWVm
ZmVjdCBpZiBuZWNjZXNzYXJ5Lg0KcnVsZSByZWxldmFudC1mZWF0dXJlcyAjIG5hbWUNCnsN
CiAgICBpZiAhICQoZ1JFTEVWQU5UX0ZFQVRVUkVTKCQoPCkpKQ0KICAgIHsNCiAgICAgICAg
aW5jbHVkZS10b29scyAkKDwpIDsNCiAgICB9DQogICAgcmV0dXJuICQoZ1JFTEVWQU5UX0ZF
QVRVUkVTKCQoPCkpKSA7DQp9DQoNCiMgdmFyaWFudCBuYW1lIFsgOiBwYXJlbnRzLi4uIF0g
OiBbPHRvb2xzZXQ+XTxmZWF0dXJlPnZhbHVlLi4uDQojDQojIERlY2xhcmUgYSBidWlsZCB2
YXJpYW50LCB3aG9zZSBjb25maWd1cmF0aW9uIGlzIGdpdmVuIGJ5IHRoZSBnaXZlbiAob3B0
aW9uYWxseQ0KIyB0b29sc2V0LXF1YWxpZmllZCkgcHJvcGVydGllcy4NCnJ1bGUgdmFyaWFu
dCAoIG5hbWUgOiBwYXJlbnRzLW9yLXByb3BlcnRpZXMgKiA6IHRvb2wtcHJvcGVydGllcyAq
ICkNCnsNCiAgICBnQUxMX1ZBUklBTlRTICs9ICQobmFtZSkgOw0KICAgIGxvY2FsIHBhcmVu
dHMgOw0KICAgIGlmICEgJCh0b29sLXByb3BlcnRpZXMpDQogICAgew0KICAgICAgICBpZiAk
KHBhcmVudHMtb3ItcHJvcGVydGllc1sxXTpHKQ0KICAgICAgICB7DQogICAgICAgICAgICB0
b29sLXByb3BlcnRpZXMgPSAkKHBhcmVudHMtb3ItcHJvcGVydGllcykgOw0KICAgICAgICB9
DQogICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICAgcGFyZW50cyA9ICQocGFy
ZW50cy1vci1wcm9wZXJ0aWVzKSA7DQogICAgICAgIH0NCiAgICB9DQogICAgZWxzZQ0KICAg
IHsNCiAgICAgICAgcGFyZW50cyA9ICQocGFyZW50cy1vci1wcm9wZXJ0aWVzKSA7DQogICAg
fQ0KICAgIGxvY2FsIHRvb2xzZXQgOw0KICAgIGZvciB0b29sc2V0IGluICQoVE9PTFMpDQog
ICAgew0KICAgICAgICAjIFdlIGhpamFjayBzZWxlY3QtcHJvcGVydGllcyB0byBkbyBvdXIg
ZGlydHkgd29yayBoZXJlLg0KICAgICAgICAjIEJlY2F1c2UgcHJvcGVydGllcyBpbiBhIHZh
cmlhbnQgZGVjbGFyYXRpb24gYXJlIG9ubHkgcXVhbGlmaWVkIHdpdGgNCiAgICAgICAgIyB0
b29sc2V0IGFuZCBub3QgdmFyaWFudCwgd2Ugc3BlY2lmeSB0aGUgdG9vbHNldCB3aGVyZQ0K
ICAgICAgICAjIHNlbGVjdC1wcm9wZXJ0aWVzIGV4cGVjdHMgYSB2YXJpYW50IG5hbWUuIFRo
ZSBmaXJzdCB0b29sc2V0IHBhcmFtZXRlcg0KICAgICAgICAjIGlzIG5lY2Nlc3NhcnkgdG8g
Z2V0IHRoZSByZWxldmFudC1mZWF0dXJlcyBjb3JyZWN0bHkgc2V0LiBXZSBzdXBwbHkNCiAg
ICAgICAgIyB0aGUgdmFyaWFudCBuYW1lIGFzIHRoZSB0YXJnZXQgbmFtZSwgc28gdGhhdCBl
cnJvciBtZXNzYWdlcyB3aWxsIGxvb2sNCiAgICAgICAgIyBjb2hlcmVudC4NCiAgICAgICAg
bG9jYWwgbmFtZS1wcm9wZXJ0aWVzDQogICAgICAgICAgICA9IFsgc2VsZWN0LXByb3BlcnRp
ZXMgJCh0b29sc2V0KSAkKHRvb2xzZXQpICQobmFtZSkgOiAkKHRvb2wtcHJvcGVydGllcykg
XSA7DQogICAgICAgIGlmICQocGFyZW50cykNCiAgICAgICAgew0KICAgICAgICAgICAgbG9j
YWwgcGFyZW50IDsNCiAgICAgICAgICAgIGZvciBwYXJlbnQgaW4gJChwYXJlbnRzKQ0KICAg
ICAgICAgICAgew0KICAgICAgICAgICAgICAgIGxvY2FsIHBhcmVudC1wcm9wZXJ0aWVzDQog
ICAgICAgICAgICAgICAgICAgID0gJChnQkFTRV9QUk9QRVJUSUVTKCQodG9vbHNldCksJChw
YXJlbnQpKSkgOw0KICAgICAgICAgICAgICAgIGxvY2FsIGluaGVyaXRlZC1mZWF0dXJlcw0K
ICAgICAgICAgICAgICAgICAgICA9IFsgdW5pcXVlDQogICAgICAgICAgICAgICAgICAgICAg
ICBbIGRpZmZlcmVuY2UgJChwYXJlbnQtcHJvcGVydGllczpHKSA6ICQobmFtZS1wcm9wZXJ0
aWVzOkcpIF0NCiAgICAgICAgICAgICAgICAgICAgICAgICQoZ0ZSRUVfRkVBVFVSRVMpDQog
ICAgICAgICAgICAgICAgICAgICAgICAkKGdQQVRIX0ZFQVRVUkVTKQ0KICAgICAgICAgICAg
ICAgICAgICAgICAgJChnREVQRU5ERU5DWV9GRUFUVVJFUyBdIDsNCiAgICAgICAgICAgICAg
ICBsb2NhbCBpbmhlcml0ZWQtcHJvcGVydGllcw0KICAgICAgICAgICAgICAgICAgICA9IFsg
Z2V0LXByb3BlcnRpZXMgJChpbmhlcml0ZWQtZmVhdHVyZXMpIDogJChwYXJlbnQtcHJvcGVy
dGllcykgXSA7DQogICAgICAgICAgICAgICAgbmFtZS1wcm9wZXJ0aWVzDQogICAgICAgICAg
ICAgICAgICAgICs9ICQoaW5oZXJpdGVkLXByb3BlcnRpZXMpIDsNCiAgICAgICAgICAgIH0N
CiAgICAgICAgfQ0KICAgICAgICBnQkFTRV9QUk9QRVJUSUVTKCQodG9vbHNldCksJChuYW1l
KSkgPSBbIHNvcnQgJChuYW1lLXByb3BlcnRpZXMpIF0gOw0KICAgIH0NCn0NCg0KIyBzZWxl
Y3QtcHJvcGVydGllcyB0b29sc2V0IHZhcmlhbnQgdGFyZ2V0IDogcXVhbGlmaWVkLXByb3Bl
cnRpZXMuLi4NCiMNCiMgUmV0dXJucw0KcnVsZSBzZWxlY3QtcHJvcGVydGllcyAoIHRvb2xz
ZXQgdmFyaWFudCB0YXJnZXQgPyA6IHF1YWxpZmllZC1wcm9wZXJ0aWVzICogKQ0Kew0KICAg
IGxvY2FsIHJlbGV2YW50X2ZlYXR1cmVzID0gWyByZWxldmFudC1mZWF0dXJlcyAkKHRvb2xz
ZXQpIF0gOw0KICAgIGxvY2FsIG5vcm1hbGl6ZWQgPSBbIG5vcm1hbGl6ZS1wcm9wZXJ0aWVz
ICQoPikgXSA7DQoNCiAgICAjIENsYXNzaWZ5IHByb3BlcnRpZXMgYnkgdGhlIHNwZWNpZmlj
aXR5IG9mIHRoZWlyIHF1YWxpZmljYXRpb24uDQogICAgIyBGaXJzdCwgZ3JhYiB0aG9zZSB0
aGF0IGFwcGx5IHRvIHRoaXMgdG9vbHNldCwgb3IgYWxsIHRvb2xzZXRzDQogICAgbG9jYWwg
dGhpc190b29sc2V0ID0gWyBnZXQtdmFsdWVzIDwkKHRvb2xzZXQpPiA6ICQobm9ybWFsaXpl
ZCkgXSA7DQogICAgbG9jYWwgMC1zdGFycyA9IFsgZ2V0LXZhbHVlcyA8JCh2YXJpYW50KT4g
OiAkKHRoaXNfdG9vbHNldCkgXSA7DQoNCiAgICAjIFNlbGVjdCBmZWF0dXJlIG5hbWVzIGZy
b20gdGhlIGZlYXR1cmVzIHJlbGV2YW50IHRvIHRoZSB0b29sc2V0Lg0KICAgIGxvY2FsIGZl
YXR1cmVzID0gWyBpbnRlcnNlY3Rpb24gJChyZWxldmFudF9mZWF0dXJlcykNCiAgICAgICAg
OiAkKDAtc3RhcnM6RykgJCgxLXN0YXJzOkcpICQoMi1zdGFyczpHKSBdIDsNCg0KICAgIGxv
Y2FsIHJlc3VsdCBmIDsNCiAgICBmb3IgZiBpbiAkKGZlYXR1cmVzKQ0KICAgIHsNCiAgICAg
ICAgbG9jYWwgaXNfZnJlZSA9IFsgaW50ZXJzZWN0aW9uICQoZikgOiAkKGdGUkVFX0ZFQVRV
UkVTKSBdIDsNCiAgICAgICAgDQogICAgICAgICMgR28gdGhyb3VnaCB0aGUgJChuLXN0YXJz
KSBsaXN0cyBmcm9tIG1vc3QtIHRvIGxlYXN0LSBzcGVjaWZpYzsNCiAgICAgICAgIyBjb2xs
ZWN0IHRoZSBiZXN0IHNldCBvZiB2YWx1ZXMgb2YgYSBzaW1wbGUgZmVhdHVyZSwgYW5kIC9h
bGwvDQogICAgICAgICMgdmFsdWVzIG9mIGEgZnJlZSBmZWF0dXJlLg0KICAgICAgICBsb2Nh
bCByIG4gOw0KICAgICAgICBmb3IgbiBpbiAwIDEgMg0KICAgICAgICB7DQogICAgICAgICAg
ICBpZiAhICQocikgfHwgJChpc19mcmVlKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAg
ICAgIHIgKz0gWyBnZXQtdmFsdWVzICQoZikgOiAkKCQobiktc3RhcnMpIF0gOw0KICAgICAg
ICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgciA9IFsgdW5pcXVlICQocikgXSA7DQog
ICAgICAgIGlmICQoclsyXSkgJiYgISAkKGlzX2ZyZWUpICMgQ2hlY2sgZm9yIGNvbmZsaWN0
aW5nIHNpbXBsZS1mZWF0dXJlIHJlcXVlc3RzDQogICAgICAgIHsNCiAgICAgICAgICAgIEVY
SVQgIkVycm9yOiBBbWJpZ3VvdXMgcHJvcGVydGllcyByZXF1ZXN0ZWQgZm9yIg0KICAgICAg
ICAgICAgJCh0YXJnZXQpIDwkKHRvb2xzZXQpPjwkKHZhcmlhbnQpPiAiOiIgJChmKSQocikg
Ow0KICAgICAgICB9DQogICAgICAgIHJlc3VsdCArPSAkKGYpJChyKSA7DQogICAgfQ0KICAg
IHJldHVybiAkKHJlc3VsdCkgOw0KfQ0KIyBnZXQgdG9vbHNldCBmZWF0dXJlcw0KU0VBUkNI
IG9uIDxqYW0tbW9kdWxlPmZlYXR1cmVzLmphbSA9ICQoQk9PU1RfQlVJTERfUEFUSCkgOw0K
aW5jbHVkZSA8amFtLW1vZHVsZT5mZWF0dXJlcy5qYW0gOw0KDQojIHVuZ3Jpc3QtcHJvcGVy
dGllcyBwcm9wZXJ0aWVzLi4uDQojDQojIFRyYW5zZm9ybXMgYSBsaXN0IG9mIHByb3BlcnRp
ZXMgb2YgdGhlIGZvcm06DQojICAgICAgIDxmZWF0dXJlMT52YWx1ZTEgWzxmZWF0dXJlMj52
YWx1ZTIuLi4gXQ0KIyBpbnRvIGEgbGlzdCBvZiB0aGUgZm9ybToNCiMgICAgICAgZmVhdHVy
ZTEtdmFsdWUxIGZlYXR1cmUyLXZhbHVlMg0KIyBzdWl0YWJsZSBmb3IgdXNlIGFzIGRpcmVj
dG9yeSBwYXRoIGVsZW1lbnRzDQojDQpydWxlIHVuZ3Jpc3QtcHJvcGVydGllcw0Kew0KICAg
IGxvY2FsIHByb3BlcnR5IDsNCiAgICBsb2NhbCByZXN1bHQgPSA7DQogICAgZm9yIHByb3Bl
cnR5IGluICQoPCkNCiAgICB7DQogICAgICAgIHJlc3VsdCArPSAkKGdVTkdSSVNURUQoJChw
cm9wZXJ0eTpHKSkpLSQocHJvcGVydHk6Rz0pIDsNCiAgICB9DQogICAgcmV0dXJuICQocmVz
dWx0KSA7DQp9DQoNCiMgc2V0LXRhcmdldC12YXJpYWJsZXMgdGFyZ2V0DQojDQojIGF0dGFj
aCBnbG9iYWwgYnVpbGQgdG9vbCBzZXR0aW5ncyB0byB0aGUgZ2l2ZW4gZmlsZS10YXJnZXQs
IHNvIHRoYXQgdGhleSBjYW4gYmUNCiMgdXNlZCBpbiBidWlsZCBhY3Rpb25zLg0KcnVsZSBz
ZXQtdGFyZ2V0LXZhcmlhYmxlcyAoIHRhcmdldHMgKiApDQp7DQogICAgbG9jYWwgcyA7DQog
ICAgZm9yIHMgaW4gJChnVEFSR0VUX1ZBUklBQkxFUykNCiAgICB7DQogICAgICAgICQocykg
b24gJCh0YXJnZXRzKSA9ICQoJChzKSkgOw0KDQogICAgICAgICMgc2V0IHVwIGRlcGVuZGVu
Y2llcyBpZiB0aGUgdGFyZ2V0IGlzIGEgInRvcC1sZXZlbCIgdGFyZ2V0DQogICAgICAgIGlm
ICggJChzKSBpbiAkKGdERVBFTkRFTkNZX1ZBUklBQkxFUygkKGdDVVJSRU5UX1RPT0xTRVQp
KSkgKSAmJiAkKGdUQVJHRVRfVFlQRSgkKDwpKSkNCiAgICAgICAgew0KICAgICAgICAgICAg
REVQRU5EUyAkKHRhcmdldHMpIDogJCgkKHMpKSA7DQogICAgICAgIH0NCiAgICB9DQogICAg
bG9jYWwgbGlicGF0aCA9IFsgZ2V0LXByb3BlcnRpZXMgPGxpYnJhcnktcGF0aD4gOiAkKGdC
VUlMRF9QUk9QRVJUSUVTKSBdIDsNCiAgICBnUlVOX1BBVEgoJCh0YXJnZXRzKSkgKz0gJChs
aWJwYXRoOkc9KSA7DQogICAgZ1JVTl9MRF9MSUJSQVJZX1BBVEgoJCh0YXJnZXRzKSkgKz0g
JChsaWJwYXRoOkc9KSA7DQp9DQoNCiMgRm9yIHBhdGggcHJvcGVydGllcywgYWRkIGEgcmVs
YXRpdmUgcGF0aCBwcmVmaXggdG8gdGhlIHZhbHVlIGFzDQojIG5lY2Nlc3NhcnkgdG8gbG9j
YXRlIHRoZSBwYXRoIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBzdWJwcm9qZWN0DQojIGRpcmVj
dG9yeS4NCnJ1bGUgZml4dXAtcGF0aC1wcm9wZXJ0aWVzICggcHJvcGVydGllcyAqIDogc3Vi
cHJvamVjdC1kaXJlY3RvcnkgPyApDQp7DQogICAgbG9jYWwgcmVzdWx0IDsNCiAgICANCiAg
ICBmb3IgbG9jYWwgcCBpbiAkKHByb3BlcnRpZXMpDQogICAgew0KICAgICAgICBpZiAkKHA6
RykgaW4gJChnUEFUSF9GRUFUVVJFUykNCiAgICAgICAgew0KICAgICAgICAgICAgIyBJZiB0
aGUgcGF0aCBwcm9wZXJ0eSB2YWx1ZSBpcyBwcm9qZWN0LXJlbGF0aXZlLCByZS1yb290DQog
ICAgICAgICAgICAjIGl0IGFwcHJvcHJpYXRlbHkgZm9yIHRoYXQgcHJvamVjdA0KICAgICAg
ICAgICAgbG9jYWwgcGFyc2UtcHJvamVjdCA9IFsgTUFUQ0ggXkAoW14vJChTTEFTSCldKylb
LyQoU0xBU0gpXT8oLiopIDogJChwOkc9KSBdIDsNCiAgICAgICAgICAgIGlmICQocGFyc2Ut
cHJvamVjdCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBsb2NhbCBwcm9qZWN0
ID0gJChwYXJzZS1wcm9qZWN0WzFdKSA7DQogICAgICAgICAgICAgICAgbG9jYWwgc3VicHJv
amVjdCA9ICQocGFyc2UtcHJvamVjdFsyXSkgOw0KICAgICAgICAgICAgICAgIHAgPSBbIHJv
b3QtcGF0aHMgJChzdWJwcm9qZWN0Okc9JChwOkcpKSA6ICQoZ1BST0pFQ1QoJChwcm9qZWN0
KSkpIF0gOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZSBpZiAkKHN1YnByb2pl
Y3QtZGlyZWN0b3J5KSAgIyByZS1yb290IGl0IHJlbGF0aXZlIHRvIHRoaXMgZGlyZWN0b3J5
DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgcCA9IFsgcm9vdC1wYXRocyAkKHAp
IDogJChzdWJwcm9qZWN0LWRpcmVjdG9yeSkgXSA7DQogICAgICAgICAgICB9DQogICAgICAg
IH0NCiAgICAgICAgDQogICAgICAgIHJlc3VsdCArPSAkKHApIDsNCiAgICB9DQogICAgDQog
ICAgcmV0dXJuICQocmVzdWx0KSA7DQp9DQoNCiMgcmVtb3ZlLWluY29tcGF0aWJsZS1idWls
ZHMgcmVxdWlyZW1lbnRzLi4uIDogYnVpbGQtcmVxdWVzdC4uLiA6IHRhcmdldC1uYW1lDQoj
DQojIElmIGFueSBlbGVtZW50IG9mIHJlcXVpcmVtZW50cyBoYXMgdGhlIHNhbWUgZ3Jpc3Qg
YnV0IGEgZGlmZmVyZW50IHVuZ3Jpc3RlZA0KIyBwYXJ0IGFzIGFueSBlbGVtZW50IG9mIGJ1
aWxkLXJlcXVlc3QsIGV4aXRzIHdpdGggYW4gZXJyb3IgcmVwb3J0IGFib3V0IHRhcmdldC1u
YW1lDQpydWxlIHJlbW92ZS1pbmNvbXBhdGlibGUtYnVpbGRzICggcmVxdWlyZW1lbnRzICog
OiBidWlsZC1yZXF1ZXN0ICogOiB0YXJnZXQtbmFtZSArICkNCnsNCiAgICBsb2NhbCBhbGwt
cHJvcGVydGllcyA9IFsgdW5pcXVlICQoPCkgJCg+KSBdIDsNCiAgICBsb2NhbCBhbGwtZmVh
dHVyZXMgPSAkKGFsbC1wcm9wZXJ0aWVzOkcpIDsNCiAgICBsb2NhbCB1bmlxdWUtZmVhdHVy
ZXMgPSBbIHVuaXF1ZSAkKGFsbC1mZWF0dXJlcykgXSA7DQogICAgaWYgJChhbGwtZmVhdHVy
ZXMpICE9ICQodW5pcXVlLWZlYXR1cmVzKQ0KICAgIHsNCiAgICAgICAgbG9jYWwgcmVzdWx0
IDsNCiAgICAgICAgbG9jYWwgc2tpcCA7DQogICAgICAgIGZvciBsb2NhbCBwIGluICQoYnVp
bGQtcmVxdWVzdCkNCiAgICAgICAgew0KICAgICAgICAgICAgIyBpZiBhIGZlYXR1cmUgb2Yg
dGhlIGJ1aWxkIHJlcXVlc3QgaXMgYWxzbyBpbiB0aGUNCiAgICAgICAgICAgICMgcmVxdWly
ZW1lbnRzLCBidXQgd2l0aCBkaWZmZXJpbmcgdmFsdWUocykNCiAgICAgICAgICAgIGlmICgg
JChwOkcpIGluICQocmVxdWlyZW1lbnRzOkcpICkNCiAgICAgICAgICAgICAgJiYgISAoICQo
cCkgaW4gJChyZXF1aXJlbWVudHMpICkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAg
ICAjIGRlY2lkZSB3aGF0IHRvIGRvLg0KICAgICAgICAgICAgICAgIGxvY2FsIHZhbHVlID0g
WyBnZXQtdmFsdWVzICQocDpHKSA6ICQocmVxdWlyZW1lbnRzKSBdIDsNCiAgICAgICAgICAg
ICAgICBpZiAkKHZhbHVlWzJdKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAg
ICAgICAgRVhJVCBVbmV4cGVjdGVkbHkgZm91bmQgbXVsdGlwbGUgYnVpbGQgcmVxdWVzdHMN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGZlYXR1cmUgJChwOkcpIHdpdGggdmFs
dWVzICQodmFsdWVzKSA7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIA0K
ICAgICAgICAgICAgICAgIGxvY2FsIHJlcXVlc3RlZCA9IFsgc3BsaXQtcGF0aCAkKHA6Rz0p
IF0gOw0KICAgICAgICAgICAgICAgIGlmICQocmVxdWVzdGVkWzJdKQ0KICAgICAgICAgICAg
ICAgIHsNCiAgICAgICAgICAgICAgICAgICAgbG9jYWwgc2tpcHBlZCA9IFsgZGlmZmVyZW5j
ZSAkKHJlcXVlc3RlZCkgOiAkKHZhbHVlKSBdIDsNCiAgICAgICAgICAgICAgICAgICAgDQog
ICAgICAgICAgICAgICAgICAgIGlmICEgJChnTk9XQVJOX0lOQ09NUEFUSUJMRV9CVUlMRFMp
DQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIEVDSE8g
JCh0YXJnZXQtbmFtZSkgcmVxdWlyZXMgJChwOkcpJCh2YWx1ZSksDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2tpcHBpbmcgcmVxdWVzdGVkIGJ1aWxkIGNvbmZpZ3VyYXRpb24o
cykgJChwOkcpJChza2lwcGVkKS4gOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg
ICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJChwOkcpJCh2
YWx1ZSkgOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBlbHNlDQogICAg
ICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBpZiAhICQoZ05PV0FSTl9JTkNP
TVBBVElCTEVfQlVJTERTKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAg
ICAgICAgICAgICBFQ0hPIHNraXBwaW5nICQodGFyZ2V0LW5hbWUpIGR1ZSB0byBpbmNvbXBh
dGlibGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCByZXF1aXJlbWVudHMg
JChwOkcpJCh2YWx1ZSkuIDsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg
ICAgICAgICBza2lwID0gdHJ1ZSA7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg
fQ0KICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHJl
c3VsdCArPSAkKHApIDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICANCiAg
ICAgICAgaWYgJChza2lwKQ0KICAgICAgICB7DQogICAgICAgICAgICBidWlsZC1yZXF1ZXN0
ID0gU0tJUCA7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAg
ICAgICBidWlsZC1yZXF1ZXN0ID0gJChyZXN1bHQpIDsNCiAgICAgICAgfQ0KICAgIH0NCiAg
ICByZXR1cm4gJChidWlsZC1yZXF1ZXN0KSA7DQp9DQoNCiMgbXVsdGlwbHktcHJvcGVydHkt
c2V0cyBbPGZlYXR1cmU+dmFsdWUxWy92YWx1ZTIuLi5dIF0uLi4NCiMNCiMgRXhwYW5kcyBh
IHNldCBvZiAocG9zc2libHkgbXVsdGktdmFsdWVkKSBwcm9wZXJ0aWVzIGludG8gYWxsIHRo
ZSBjb21iaW5hdGlvbnMNCiMgdGhhdCBpbmNsdWRlIGV2ZXJ5IGZlYXR1cmUgaW4gdGhlIHNl
dC4gRWFjaCBjb21iaW5hdGlvbiBpcyBnaXZlbiBhcyBhIHBhdGgsDQojIHdpdGggdGhlIHNs
YXNoIHNlcGFyYXRpbmcgdGhlIHByb3BlcnRpZXMsIHNvcnRlZCBpbiBmZWF0dXJlIG9yZGVy
Lg0KcnVsZSBtdWx0aXBseS1wcm9wZXJ0eS1zZXRzDQp7DQogICAgbG9jYWwgcmVzdWx0IHAg
Ow0KICAgIGZvciBwIGluIFsgc29ydCAkKDwpIF0NCiAgICB7DQogICAgICAgICMgZXhwYW5k
IGFueSBtdWx0aS12YWx1ZWQgc2ltcGxlIGZlYXR1cmVzIGZyb20gdGhlIGRlZmF1bHQgYnVp
bGQNCiAgICAgICAgbG9jYWwgbXVsdGlwbGUgPSBbIGRpc3RyaWJ1dGUtZmVhdHVyZSAkKHAp
IF0gOw0KDQogICAgICAgICMgY29uY2F0ZW5hdGlvbiBwcm9kdWNlcyBhIHByb2R1Y3QsIHNv
IHRoZSB0cmVlIGJyYW5jaGVzIGZvciBlYWNoDQogICAgICAgICMgbXVsdGktdmFsdWVkIHNp
bXBsZSBmZWF0dXJlLg0KICAgICAgICByZXN1bHQgPSAkKHJlc3VsdCkvJChtdWx0aXBsZSkg
Ow0KICAgICAgICByZXN1bHQgPz0gJChtdWx0aXBsZSkgOyAjIHRoaXMgdHJpY2sgYWxsb3dz
IHVzIHRvIGdldCBzdGFydGVkIA0KICAgIH0NCiAgICByZXR1cm4gJChyZXN1bHQpIDsNCn0N
Cg0KIyBSZXR1cm4gYSBsaXN0IGNvbnNpc3Rpbmcgb2YgYWxsIHRoZSBlbGVtZW50cyBvZiBw
cm9wZXJ0aWVzIHdoaWNoDQojIGFyZW4ndCB0aGUgZGVmYXVsdHMgZm9yIHRoZWlyIGZlYXR1
cmVzLg0KcnVsZSByZW1vdmUtZGVmYXVsdC1wcm9wZXJ0aWVzICggcHJvcGVydGllcyAqICkN
CnsNCiAgICByZXR1cm4gWyBkaWZmZXJlbmNlICQocHJvcGVydGllcykgOiBbIGZlYXR1cmUt
ZGVmYXVsdCAkKHByb3BlcnRpZXM6RykgXSBdIDsNCn0NCg0KIyBtYWtlLXBhdGgtcHJvcGVy
dHktc2V0cyBiYXNlLXBhdGggOiBjb21tb24tcHJvcGVydGllcyA6IHByb3BlcnR5LXNldHMN
CiMNCiMgUmV0dXJucyBhIGxpc3Qgb2YgcGF0aHMgd2hlcmUgdGhlIGluaXRpYWwgdW5ncmlz
dGVkIHBhcnQgb2YgZWFjaCBlbGVtZW50IGlzIGENCiMgcmVsYXRpdmUgcGF0aCB0byBhIHN1
YnZhcmlhbnQgZGlyZWN0b3J5IGZyb20gYSB0YXJnZXQncyBidWlsZCByb290IGFuZCB0aGUN
CiMgcmVzdCBvZiB0aGUgZWxlbWVudCBpcyBhIHNsYXNoLXNlcGFyYXRlZCBwcm9wZXJ0eSBz
ZXQgZGVzY3JpYmluZyB0aGUNCiMgcHJvcGVydGllcyBvZiB0aGUgdGFyZ2V0IHRvIGJlIGJ1
aWx0Lg0KIw0KIyBFYWNoIHBhdGggcmV0dXJuZWQgaXMgYmFzZS1wYXRoIGV4dGVuZGVkIGJ5
IG9uZSBvZiB0aGUgdW5ncmlzdGVkIHByb3BlcnR5LXNldHMNCiMgKG9yIGp1c3QgdGhlIGJh
c2UtcGF0aCBpZiBubyBwcm9wZXJ0eS1zZXRzIGFyZSBzdXBwbGllZCkuIEVhY2ggcHJvcGVy
dHkgc2V0DQojIHJldHVybmVkIGlzIGZvcm1lZCBieSBleHRlbmRpbmcgY29tbW9uLXByb3Bl
cnRpZXMgd2l0aCBvbmUgb2YgdGhlIHByb3BlcnR5LXNldHMuDQojDQojIEZvciBleGFtcGxl
LA0KIw0KIyAgIG1ha2UtcGF0aC1wcm9wZXJ0eS1zZXRzIGdjYy9yZWxlYXNlIDogPHAxPnYx
IDogPHAyPnYyLzxwMz52Mw0KIw0KIyByZXR1cm5zIHRoaXMgc2luZ2xlLWVsZW1lbnQgbGlz
dDoNCiMNCiMgICAgICBnY2MvcmVsZWFzZS9wMi12Mi9wMy12My88cDE+djEvPHAyPnYyLzxw
Mz52Mw0KIyAgICAgfDwtLSBzdWJ2YXJpYW50IHBhdGggLS0+fDwtLSBwcm9wZXJ0eS1zZXQg
LS0+fA0KcnVsZSBtYWtlLXBhdGgtcHJvcGVydHktc2V0cyAoIGJhc2UtcGF0aCA6IGNvbW1v
bi1wcm9wZXJ0aWVzICogOiBwcm9wZXJ0eS1zZXRzICogKQ0Kew0KICAgIGxvY2FsIHJlc3Vs
dCA7DQogICAgbG9jYWwgcyA7DQogICAgZm9yIHMgaW4gJChwcm9wZXJ0eS1zZXRzKQ0KICAg
IHsNCiAgICAgICAgbG9jYWwgeCA9IA0KICAgICAgICAgICMgZGlyZWN0b3J5IGNvbXBvbmVu
dHMNCiAgICAgICAgICAkKGJhc2UtcGF0aCkgDQogICAgICAgICAgWyB1bmdyaXN0LXByb3Bl
cnRpZXMNCiAgICAgICAgICAgICAgWyByZW1vdmUtZGVmYXVsdC1wcm9wZXJ0aWVzIFsgc3Bs
aXQtcGF0aCAkKHMpIF0gXSANCiAgICAgICAgICBdIA0KICAgICAgICAgICMgcHJvcGVydGll
cw0KICAgICAgICAgICQoY29tbW9uLXByb3BlcnRpZXMpICQocykgDQogICAgICAgICAgICA7
DQogICAgICAgIA0KICAgICAgICByZXN1bHQgKz0gJCh4Oko9JChTTEFTSCkpIDsNCiAgICB9
DQoNCiAgICAjIGlmIHRoZXJlIHdlcmUgbm8gb3ZlcnJpZGVzLCBqdXN0IGFkZCB0aGUgYmFz
ZSB2YXJpYW50IGFuZCBwcm9wZXJ0aWVzDQogICAgaWYgISAkKHJlc3VsdCkNCiAgICB7DQog
ICAgICAgIHJlc3VsdCA9IFsgam9pbiAkKGJhc2UtcGF0aCkgJChjb21tb24tcHJvcGVydGll
cykgOiAkKFNMQVNIKSBdIDsNCiAgICB9DQogICAgcmV0dXJuICQocmVzdWx0KSA7DQp9DQoN
CiMgc2VncmVnYXRlLW92ZXJyaWRlcyBvdmVycmlkZS12YXIgYmFzZS12YXINCiMNCiMgcmVt
b3ZlcyBlbGVtZW50cyBvZiAkKGJhc2UtdmFyKSBmcm9tICQob3ZlcnJpZGUtdmFyKSwgYW5k
IHJlbW92ZXMgZWxlbWVudHMNCiMgd2hvc2UgZ3Jpc3QgaXMgaW4gJChvdmVycmlkZS12YXI6
RykgZnJvbSAkKGJhc2UtdmFyKS4NCnJ1bGUgc2VncmVnYXRlLW92ZXJyaWRlcw0Kew0KICAg
ICQoPCkgPSBbIGRpZmZlcmVuY2UgJCgkKDwpKSA6ICQoJCg+KSkgXSA7DQoNCiAgICAjIFdo
aWNoIGZlYXR1cmVzLCBhbmQgdGh1cyBwcm9wZXJ0aWVzLCBvZiB0aGUgYmFzZSB2YXJpYW50
IGFyZSB3ZSBrZWVwaW5nPw0KICAgIGxvY2FsIGtlcHQtZmVhdHVyZXMgPSBbIGRpZmZlcmVu
Y2UgJCgkKD4pOkcpIDogJCgkKDwpOkcpIF0gOw0KICAgICQoPikgPSBbIGdldC1wcm9wZXJ0
aWVzICQoa2VwdC1mZWF0dXJlcykgOiAkKCQoPikpIF0gOw0KfQ0KDQojIElmIGFueSBzaW5n
bGUtdmFsdWVkIGZyZWUtZmVhdHVyZSBhcHBlYXJzIG1vcmUgdGhhbiBvbmNlIGluIGZyZWUt
cHJvcGVydHkuLi4sDQojIGV4aXQgd2l0aCBhbiBhcHByb3ByaWF0ZSBlcnJvciBtZXNzYWdl
Lg0KcnVsZSByZXBvcnQtZnJlZS1wcm9wZXJ0eS1jb25mbGljdHMgKCBmcmVlLXByb3BlcnR5
ICogOiB0YXJnZXQgKyApDQp7DQogICAgbG9jYWwgcCA9IFsgZ2V0LXByb3BlcnRpZXMgJChn
U0lOR0xFX1ZBTFVFRF9GUkVFX0ZFQVRVUkVTKSA6ICQoZnJlZS1wcm9wZXJ0eSkgXSA7DQog
ICAgbG9jYWwgZiA9IFsgdW5pcXVlICQocDpHKSBdIDsNCiAgICBpZiAkKHA6RykgIT0gJChm
KQ0KICAgIHsNCiAgICAgICAgRVhJVCAkKD4pOiBtdWx0aXBsZSB2YWx1ZXMgZm9yIHNpbmds
ZS12YWx1ZWQgZnJlZSBmZWF0dXJlKHMpDQogICAgICAgICAgICBbIGRpZmZlcmVuY2UgJChw
OkcpICQoZikgXSByZXF1ZXN0ZWQgOw0KICAgIH0NCn0NCg0KIyBSZXR1cm5zIGEgbGlzdCBv
ZiBwYXRoLXByb3BlcnR5LXNldHMgKHNlZSBtYWtlLXBhdGgtcHJvcGVydHktc2V0cyBhYm92
ZSkgZm9yDQojIGFsbCBidWlsZCBjb25maWd1cmF0aW9ucyBiYXNlZCBvbiB0aGUgZ2l2ZW4g
dG9vbHNldCwgcmVxdWlyZW1lbnRzLCBhbmQNCiMgYnVpbGQtcmVxdWVzdC4gVGFyZ2V0LW5h
bWUgaXMganVzdCB1c2VkIGZvciBlcnJvciByZXBvcnRpbmcuDQpydWxlIGV4cGFuZC1idWls
ZC1yZXF1ZXN0ICggdG9vbHNldCB2YXJpYW50IHRhcmdldCA6IHJhdy1yZXF1aXJlbWVudHMg
KiA6IHJhdy1idWlsZC1yZXF1ZXN0ICogKQ0Kew0KICAgICMgZ3JhYiB0aGUgcmVxdWlyZW1l
bnRzIGFuZCBCVUlMRC1yZXF1ZXN0IHJlbGV2YW50IHRvIHRoaXMgdG9vbHNldCBhbmQgdmFy
aWFudA0KICAgIGxvY2FsIHJlcXVpcmVtZW50cyA9IFsgc2VsZWN0LXByb3BlcnRpZXMgJCh0
b29sc2V0KSAkKHZhcmlhbnQpIDogJChyYXctcmVxdWlyZW1lbnRzKSBdIDsNCiAgICBsb2Nh
bCBidWlsZC1yZXF1ZXN0ID0gWyBzZWxlY3QtcHJvcGVydGllcyAkKHRvb2xzZXQpICQodmFy
aWFudCkgOiAkKHJhdy1idWlsZC1yZXF1ZXN0KSBdIDsNCg0KICAgICMgU2VwYXJhdGUgdGhl
IGZyZWUgZmVhdHVyZXMgKGUuZy4gPGRlZmluZT4sIDx1bmRlZj4sIDxpbmNsdWRlPikgZnJv
bSB0aGUgb3RoZXJzDQogICAgbG9jYWwgZnJlZS1wcm9wZXJ0aWVzID0gWyBzZWdyZWdhdGUt
ZnJlZS1wcm9wZXJ0aWVzIHJlcXVpcmVtZW50cyBidWlsZC1yZXF1ZXN0IF0gOw0KDQogICAg
IyBDaGVjayBmb3IgY29uZmxpY3RzDQogICAgcmVwb3J0LWZyZWUtcHJvcGVydHktY29uZmxp
Y3RzICQoZnJlZS1wcm9wZXJ0aWVzKSA6ICQodGFyZ2V0KSA7DQogICAgYnVpbGQtcmVxdWVz
dCA9IFsgcmVtb3ZlLWluY29tcGF0aWJsZS1idWlsZHMgJChyZXF1aXJlbWVudHMpDQogICAg
ICA6ICQoYnVpbGQtcmVxdWVzdCkgOiAkKHRhcmdldCkgXSA7DQoNCiAgICBpZiAkKGJ1aWxk
LXJlcXVlc3QpICE9IFNLSVANCiAgICB7DQogICAgICAgICMgR2V0ICB0aGUgYmFzZSB2YXJp
YW50IGZvciB0aGUgdG9vbHNldC4gSW5jbHVkZXMgZnJlZSBmZWF0dXJlcw0KICAgICAgICBs
b2NhbCBiYXNlLXByb3BlcnRpZXMgPSAkKGdCQVNFX1BST1BFUlRJRVMoJCh0b29sc2V0KSwk
KHZhcmlhbnQpKSkgOw0KDQogICAgICAgICMgV2hpY2ggcHJvcGVydGllcyB3aWxsIG92ZXJy
aWRlIHNldHRpbmdzIGluIHRoZSBiYXNlIHZhcmlhbnQ/DQogICAgICAgIGxvY2FsIG92ZXJy
aWRlLXByb3BlcnRpZXMgPSBbIHVuaXF1ZSAkKHJlcXVpcmVtZW50cykgJChidWlsZC1yZXF1
ZXN0KSBdIDsNCiAgICAgICAgc2VncmVnYXRlLW92ZXJyaWRlcyBvdmVycmlkZS1wcm9wZXJ0
aWVzIDogYmFzZS1wcm9wZXJ0aWVzIDsNCg0KICAgICAgICAjIFdoaWNoIGZlYXR1cmVzIHdp
bGwgcGljayB1cCBhIGRlZmF1bHQgdmFsdWUgYmVjYXVzZSB0aGV5IGFyZSBub3QgaW4NCiAg
ICAgICAgIyB0aGUgYmFzZSB2YXJpYW50IG9yIGluIHRoZSBvdmVycmlkZXM/DQogICAgICAg
IGxvY2FsIHJlbGV2YW50LWZlYXR1cmVzID0gWyByZWxldmFudC1mZWF0dXJlcyAkKHRvb2xz
ZXQpIF0gOw0KICAgICAgICBsb2NhbCBvdmVycmlkZS1mcmVlLWZlYXR1cmVzID0gWyBpbnRl
cnNlY3Rpb24gJChnU0lOR0xFX1ZBTFVFRF9GUkVFX0ZFQVRVUkVTKQ0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJChmcmVlLXByb3BlcnRpZXM6RykgXSA7
DQogICAgICAgIGxvY2FsIGRlZmF1bHRlZC1mZWF0dXJlcyA9IFsgZGlmZmVyZW5jZSAkKHJl
bGV2YW50LWZlYXR1cmVzKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OiAkKG92ZXJyaWRlLXByb3BlcnRpZXM6RykgJChiYXNlLXByb3BlcnRpZXM6RykNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChvdmVycmlkZS1mcmVlLWZlYXR1
cmVzKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIDsNCiAgICAgICAg
DQogICAgICAgIGxvY2FsIGRlZmF1bHRlZC1wcm9wZXJ0aWVzID0gWyBmZWF0dXJlLWRlZmF1
bHQgJChkZWZhdWx0ZWQtZmVhdHVyZXMpIF0gOw0KICAgICAgICANCiAgICAgICAgIyBWUDog
ZGVmYXVsdGVkLXByb3BlcnRpZXMgaGF2ZSB0aGUgZm9ybSA8ZmVhdHVyZT52YWx1ZSBhbmQg
dGhlcmUncyAxIHZhbHVlLg0KICAgICAgICAjIEhlbmNlLCBlYWNoIGVsZW1lbnQgb2YgZGVm
YXVsdGVkLXByb3BlcnRpZXMgd2lsbCBiZSBwYXJ0IG9mIGVhY2gNCiAgICAgICAgIyBjb21w
b25lbnQgb2Ygb3ZlcnJpZGUtc2V0cyBhbmQgd2lsbCBiZSBhIHBhcnQgb2YgZWFjaCBwcm9w
ZXJ0eS1zZXQgDQogICAgICAgICMgcmV0dXJuZWQuIEJ5IHNlZ3JlZ2F0aW5nIHRoZW0sIHRo
ZSByZXN1bHQgaXMgY2hhbmdlZCBpbiBvbmx5IG9uZQ0KICAgICAgICAjIHdheTogZnJlZSBw
cm9wZXJ0aWVzIGRvZXMgbm90IHNob3cgdXAgaW4gdGFyZ2V0IHBhdGguDQogICAgICAgIGxv
Y2FsIGRlZmF1bHRlZC1mcmVlLXByb3BlcnRpZXMgPSBbIHNlZ3JlZ2F0ZS1mcmVlLXByb3Bl
cnRpZXMgZGVmYXVsdGVkLXByb3BlcnRpZXMgXSA7DQoNCiAgICAgICAgIw0KICAgICAgICAj
IEFsbG93IDxkZWZhdWx0PiBwcm9wZXJ0aWVzIGFuZCBydWxlcyB0byB0YWtlIGVmZmVjdC4N
CiAgICAgICAgIw0KICAgICAgICBsb2NhbCBkZWZhdWx0LXJlcXVpcmVtZW50cyA9IFsgZ2V0
LXZhbHVlcyA8ZGVmYXVsdD4gOiAkKGZyZWUtcHJvcGVydGllcykgXSA7DQogICAgICAgIA0K
ICAgICAgICBkZWZhdWx0ZWQtcHJvcGVydGllcyA9IFsgcmVwbGFjZS1wcm9wZXJ0aWVzICQo
ZGVmYXVsdGVkLXByb3BlcnRpZXMpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDogWyBzZWxlY3QtZ3Jpc3RlZCAkKGRlZmF1bHQtcmVxdWlyZW1lbnRzKSBdIF0gOw0KICAg
ICAgICANCiAgICAgICAgbG9jYWwgbm9uLWRlZmF1bHRzID0gICQocmVxdWlyZW1lbnRzKSAk
KGJ1aWxkLXJlcXVlc3QpICQoZnJlZS1wcm9wZXJ0aWVzKSA7DQoNCiAgICAgICAgZm9yIGxv
Y2FsIHIgaW4gWyBzZWxlY3QtdW5ncmlzdGVkICQoZGVmYXVsdC1yZXF1aXJlbWVudHMpIF0N
CiAgICAgICAgew0KICAgICAgICAgICAgbG9jYWwgeCA9IFsgJChyKSAkKHRvb2xzZXQpICQo
dmFyaWFudCkgOiAkKG5vbi1kZWZhdWx0cykgXSA7DQogICAgICAgICAgICAjIEVDSE8gICQo
cikgeWllbGRzICQoeCkgOw0KICAgICAgICAgICAgIyBFQ0hPIGRlZmF1bHRlZC1wcm9wZXJ0
aWVzPSAkKGRlZmF1bHRlZC1wcm9wZXJ0aWVzKSA7DQogICAgICAgICAgICBkZWZhdWx0ZWQt
cHJvcGVydGllcyA9IFsgDQogICAgICAgICAgICAgIHJlcGxhY2UtcHJvcGVydGllcyAkKGRl
ZmF1bHRlZC1wcm9wZXJ0aWVzKSA6ICQoeCkgXSA7DQogICAgICAgIH0NCiAgICAgICAgDQog
ICAgICAgICMgSW4gY2FzZSBhbnkgZGVmYXVsdHMgc2hvdWxkIGNvbmZsaWN0IHdpdGggdGhl
IHJlcXVpcmVtZW50cywNCiAgICAgICAgIyBmb3JjZSB0aGVtIHRvIG1hdGNoIHVwLg0KICAg
ICAgICBkZWZhdWx0ZWQtcHJvcGVydGllcyA9IFsgcmVwbGFjZS1wcm9wZXJ0aWVzICQoZGVm
YXVsdGVkLXByb3BlcnRpZXMpIDogJChyZXF1aXJlbWVudHMpIF0gOw0KDQogICAgICAgICMg
Zm9ybSBvdmVycmlkZSBwcm9wZXJ0eSBzZXRzIG9mIHRoZSBmb3JtIChwcm9wZXJ0eTFbL3By
b3BlcnR5Mi4uLl0gKSssDQogICAgICAgICMgc29ydGVkIGluIGZlYXR1cmUgb3JkZXIuIFRo
ZXNlIHJlcHJlc2VudCB0aGUgcHJvcGVydGllcyBvZiBzdWJ2YXJpYW50cw0KICAgICAgICAj
IHRoYXQgZGlmZmVyIGZyb20gdGhlIGJhc2UgdmFyaWFudCANCiAgICAgICAgbG9jYWwgb3Zl
cnJpZGUtc2V0cw0KICAgICAgICAgICAgPSBbIG11bHRpcGx5LXByb3BlcnR5LXNldHMgJChv
dmVycmlkZS1wcm9wZXJ0aWVzKSAkKGRlZmF1bHRlZC1wcm9wZXJ0aWVzKSBdIDsNCg0KICAg
ICAgICAjIHJldHVybiBwYXRoLXByb3BlcnR5LXNldHMgY29ycmVzcG9uZGluZyB0byBlYWNo
IChzdWIpdmFyaWFudCBidWlsZA0KICAgICAgICAjIGRlc2NyaWJlZC4NCiAgICAgICAgcmV0
dXJuIFsgbWFrZS1wYXRoLXByb3BlcnR5LXNldHMgDQogICAgICAgICAgICAgICAgICAgJCh0
b29sc2V0KSQoU0xBU0gpJCh2YXJpYW50KQ0KICAgICAgICAgICAgICAgICA6IFsgZml4dXAt
cGF0aC1wcm9wZXJ0aWVzIA0KICAgICAgICAgICAgICAgICAgICAgICAgICQoYmFzZS1wcm9w
ZXJ0aWVzKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAkKGZyZWUtcHJvcGVydGllcykg
DQogICAgICAgICAgICAgICAgICAgICAgICAgJChkZWZhdWx0ZWQtZnJlZS1wcm9wZXJ0aWVz
KSANCiAgICAgICAgICAgICAgICAgICAgICAgOiAkKFJFTEFUSVZFX1NVQkRJUikNCiAgICAg
ICAgICAgICAgICAgICBdDQogICAgICAgICAgICAgICAgIDogJChvdmVycmlkZS1zZXRzKQ0K
ICAgICAgICAgICAgICAgXSA7DQogICAgfQ0KfQ0KDQojIHNwbGl0LXBhdGgtYXQtZ3Jpc3Qg
cGF0aA0KIw0KIyBCcmVha3MgcGF0aCBhdCBlYWNoICQoU0xBU0gpIHRoYXQgaXMgZm9sbG93
ZWQgYnkgZ3Jpc3QuIFRoaXMgY2FuIGJlIHVzZWQgdG8NCiMgYnJlYWsgYXBhcnQgcHJvcGVy
dHkgc2V0cywgcGFydGljdWxhcmx5IHdoZXJlIHRoZSA8aW5jbHVkZT4gZmVhdHVyZSBpcyB1
c2VkLA0KIyBzaW5jZSBpdHMgdmFsdWUgaXMgdHlwaWNhbGx5IGEgcGF0aC4NCnJ1bGUgc3Bs
aXQtcGF0aC1hdC1ncmlzdA0Kew0KICAgIGxvY2FsIGZ1bGwtc3BsaXQgPSBbIHNwbGl0LXBh
dGggJCg8KSBdIDsNCiAgICBsb2NhbCBsYXN0IDsNCiAgICBsb2NhbCByZXN1bHQgeCA7DQog
ICAgZm9yIHggaW4gJChmdWxsLXNwbGl0KQ0KICAgIHsNCiAgICAgICAgaWYgJCh4OkcpDQog
ICAgICAgIHsNCiAgICAgICAgICAgIHJlc3VsdCArPSAkKGxhc3QpIDsNCiAgICAgICAgICAg
IGxhc3QgPSAkKHgpIDsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAg
ICAgICAgICAgIGxhc3QgPSAkKGxhc3QpJChTTEFTSCkkKHgpIDsNCiAgICAgICAgICAgIGxh
c3QgPz0gJCh4KSA7DQogICAgICAgIH0NCiAgICB9DQogICAgcmV0dXJuICQocmVzdWx0KSAk
KGxhc3QpIDsNCn0NCg0KIw0KIyBHSVZFTjoNCiMNCiMgQSBzZXQgb2YgZGVwZW5kZW5jeSBz
b3VyY2VzIHdpdGggZ3Jpc3QgdG8gaW5kaWNhdGUgdGhlIHR5cGVzDQojICg8ZGxsPiosIDxs
aWI+KiwgZXRjKQ0KIw0KIyBSRVNVTFQ6DQojDQojIFdpbGwgdXNlIHRoZSB0eXBlLCBiYXNl
bmFtZSwgYW5kIFNVRiovUFJFKiB0byBleHBhbmQgdGhlIG5hbWUNCiMgb2YgdGhlIHNvdXJj
ZXMgdG8gdGhlaXIgZnVsbHkgc3BlY2lmaWMgdGFyZ2V0IG5hbWUuDQojDQojIEVYQU1QTEU6
DQojDQojIFsgZXhwYW5kLXNvdXJjZS1uYW1lcyA8bGliPnRlc3QgPGRsbD50ZXN0IDxleGU+
dGVzdCBSRUFETUUudHh0IDxweWQ+dGVzdCBdDQojDQojIFJFVFVSTlM6DQojDQojIDxsaWI+
bGlidGVzdC5hIDxkbGw+bGlidGVzdC5zbyA8ZXhlPnRlc3QuYXBwIFJFQURNRS5UWFQgPHB5
ZD50ZXN0LnNvDQojDQpydWxlIGV4cGFuZC1zb3VyY2UtbmFtZXMgKCBzb3VyY2VzICogKQ0K
ew0KICAgIGxvY2FsIHgtc291cmNlcyA9IDsNCiAgICBmb3IgbG9jYWwgc291cmNlIGluICQo
c291cmNlcykNCiAgICB7DQogICAgICAgIGxvY2FsIGdyaXN0ID0gWyB1bmdyaXN0ICQoc291
cmNlOkcpIF0gOw0KICAgICAgICBsb2NhbCB0eXBlID0gJChnVEFSR0VUX1RZUEVfSUQoJChn
cmlzdCkpKSA7DQogICAgICAgIGlmICQodHlwZSkNCiAgICAgICAgew0KICAgICAgICAgICAg
bG9jYWwgcCA9ICIiIDsgaWYgJChzb3VyY2U6Qj06Uz06Rz0pIHsgcCA9ICIvIiA7IH0NCiAg
ICAgICAgICAgIGxvY2FsIHByZWZpeCA9ICIiIDsNCiAgICAgICAgICAgIGxvY2FsIHN1ZmZp
eCA9ICIiIDsNCiAgICAgICAgICAgIGlmICQoUFJFJCh0eXBlKVsxXSkgeyBwcmVmaXggPSAk
KFBSRSQodHlwZSlbMV0pIDsgfQ0KICAgICAgICAgICAgaWYgJChTVUYkKHR5cGUpWzFdKSB7
IHN1ZmZpeCA9ICQoU1VGJCh0eXBlKVsxXSkgOyB9DQogICAgICAgICAgICB4LXNvdXJjZXMg
Kz0gJChzb3VyY2U6Qj06Uz0pJChwKSQocHJlZml4KSQoc291cmNlOkI6Uz0pJChzdWZmaXgp
IDsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAgIHgt
c291cmNlcyArPSAkKHNvdXJjZSkgOw0KICAgICAgICB9DQogICAgfQ0KICAgIHJldHVybiAk
KHgtc291cmNlcykgOw0KfQ0KDQojDQojIEdJVkVOOg0KIw0KIyBBIHNldCBvZiB0YXJnZXRz
IGFuZCBhIHNpbmdsZSB0YXJnZXQgdHlwZSBmb3IgYWxsIHRoZSB0YXJnZXRzDQojIChETEws
IExJQiwgZXRjLikNCiMNCiMgUkVTVUxUOg0KIw0KIyBXaWxsIHVzZSB0aGUgdHlwZSwgYmFz
ZW5hbWUsIGFuZCBTVUYqL1BSRSogdG8gZXhwYW5kIHRoZSBuYW1lDQojIG9mIHRoZSB0YXJn
ZXRzIHRvIHRoZWlyIGZ1bGx5IHNwZWNpZmljIHRhcmdldCBuYW1lLg0KIw0KIyBFWEFNUExF
Og0KIw0KIyBbIGV4cGFuZC10YXJnZXRzLW5hbWVzIGZvbyBiYXIgOiBETEwgXQ0KIw0KIyBS
RVRVUk5TOg0KIw0KIyBsaWJmb28uYSBsaWJiYXIuc28NCiMNCnJ1bGUgZXhwYW5kLXRhcmdl
dC1uYW1lcyAoIHRhcmdldHMgKyA6IHRhcmdldC10eXBlICkNCnsNCiAgICBsb2NhbCB4LXRh
cmdldHMgPSA7DQogICAgZm9yIGxvY2FsIHRhcmdldCBpbiAkKHRhcmdldHMpDQogICAgew0K
ICAgICAgICBsb2NhbCBwcmVmaXggPSAiIiA7DQogICAgICAgIGxvY2FsIHN1ZmZpeCA9ICIi
IDsNCiAgICAgICAgaWYgJChQUkUkKHRhcmdldC10eXBlKVsxXSkgeyBwcmVmaXggPSAkKFBS
RSQodGFyZ2V0LXR5cGUpWzFdKSA7IH0NCiAgICAgICAgaWYgJChTVUYkKHRhcmdldC10eXBl
KVsxXSkgeyBzdWZmaXggPSAkKFNVRiQodGFyZ2V0LXR5cGUpWzFdKSA7IH0NCiAgICAgICAg
eC10YXJnZXRzICs9ICQocHJlZml4KSQodGFyZ2V0KSQoc3VmZml4KSA7DQogICAgfQ0KICAg
IHJldHVybiAkKHgtdGFyZ2V0cykgOw0KfQ0KDQojIGRlY2xhcmUtbG9jYWwtdGFyZ2V0IG5h
bWUgOiBzb3VyY2VzIDogcmVxdWlyZW1lbnRzIDogbG9jYWwtQlVJTEQgOiB0YXJnZXQtdHlw
ZQ0KIw0KIyBkZWNsYXJlcyBhIHN1YnByb2plY3QtbG9jYWwgdGFyZ2V0IG9mIHRoZSBnaXZl
biBuYW1lIGFuZCB0YXJnZXQtdHlwZS4gVGhpcyBpcw0KIyBhbGwgdG9wLWxldmVsIHJ1bGVz
IHdoaWNoIGRlY2xhcmUgdGFyZ2V0cyBzaG91bGQgZXZlbnR1YWxseSBnbyB0aHJvdWdoIGhl
cmUuDQojDQojIFJFVFVSTlM6IHRoZSBhIGxpc3Qgb2YgdGFyZ2V0IG5hbWVzIGZvciB0aGUg
ZmlsZXMgYnVpbHQgYnkgdGhlIHRhcmdldC4NCnJ1bGUgZGVjbGFyZS1sb2NhbC10YXJnZXQg
KCB0YXJnZXQgOiBzb3VyY2VzICogOiByZXF1aXJlbWVudHMgKiA6IGRlZmF1bHQtYnVpbGQg
KiA6IHRhcmdldC10eXBlICkNCnsNCiAgICAjIFdlIGV4cGFuZCBvdXQgdGhlIG5hbWUgb2Yg
dGhlIHRhcmdldA0KICAgIGxvY2FsIHgtdGFyZ2V0ID0gWyBleHBhbmQtdGFyZ2V0LW5hbWVz
ICQodGFyZ2V0KSA6ICQodGFyZ2V0LXR5cGUpIF0gOw0KDQogICAgIyBXZSBhZGQgU09VUkNF
X0dSSVNUIHRoZSBiYXNlIHRhcmdldCBuYW1lIGhlcmUgYmVjYXVzZSB3ZSdyZSByZWZlcnJp
bmcgdGhlDQogICAgIyBhYnN0cmFjdCAgdGFyZ2V0IHdoaWNoIGdlbmVyYXRlcyBhbGwgb2Yg
dGhlIGFjdHVhbCBidWlsZHMuIFdlIG5lZWQgYSB3YXkgdG8NCiAgICAjIGRpc3Rpbmd1aXNo
IHRhcmdldHMgb2YgdGhlIHNhbWUgbmFtZSBmcm9tIGRpZmZlcmVudCBzdWJwcm9qZWN0cy4g
DQogICAgbG9jYWwgdGFyZ2V0LWlkID0gWyBGR3Jpc3RGaWxlcyAkKHgtdGFyZ2V0KSBdIDsN
Cg0KICAgIGlmICEgJCh0YXJnZXQtdHlwZSkNCiAgICB7DQogICAgICAgIEVYSVQgTm8gdGFy
Z2V0IHR5cGUgZ2l2ZW4gZm9yICIkKHgtdGFyZ2V0KSIgOw0KICAgIH0NCg0KICAgICMgRGVm
aW5lIHRoZSBzcGVjaWZpY2F0aW9ucyBvZiB0aGUgdGFyZ2V0Lg0KICAgIGdUQVJHRVRfTkFN
RSgkKHRhcmdldC1pZCkpID0gJCh0YXJnZXQpIDsNCg0KICAgICMgRGVjbGFyZSB0aGUgYmFz
aWMgdGFyZ2V0Lg0KICAgIGRlY2xhcmUtYmFzaWMtdGFyZ2V0ICQodGFyZ2V0LWlkKSA6ICQo
c291cmNlcykgOiAkKHJlcXVpcmVtZW50cykgOiAkKGRlZmF1bHQtYnVpbGQpIDogJCh0YXJn
ZXQtdHlwZSkgOw0KDQogICAgIyBHZW5lcmF0ZSBidWlsZCBpbnN0cnVjdGlvbnMsIGJ1dCBv
bmx5IGlmIHRoZSB0YXJnZXQgaGFzIGEgZ2VuZXJhdG9yLg0KICAgICMNCiAgICBpZiAkKGdH
RU5FUkFUT1JfRlVOQ1RJT04oJChnVEFSR0VUX1RZUEUoJCh0YXJnZXQtaWQpKSkpKQ0KICAg
IHsNCiAgICAgICAgIyBTdXByZXNzIHRoZSByZWd1bGFyIGJ1aWxkIG9mIHRoaXMgdGFyZ2V0
DQogICAgICAgIGxvY2FsIHN1cHByZXNzID0gWyBnZXQtdmFsdWVzIDxzdXBwcmVzcz4gOiAk
KGRlZmF1bHQtYnVpbGQpIF0gOw0KICAgICAgICBsb2NhbCBnU1VQUFJFU1NfRkFLRV9UQVJH
RVRTID0gJChzdXBwcmVzc1sxXSkgOw0KDQogICAgICAgIGRlY2xhcmUtZmFrZS10YXJnZXRz
ICQodGFyZ2V0KSA6ICQodGFyZ2V0LWlkKSA7DQoNCiAgICAgICAgIyBKdXN0IGdhdGhlciBp
bmZvcm1hdGlvbiBpZiB3ZSBhcmUgaW5jbHVkaW5nIGEgbGlicmFyeSdzIEphbWZpbGUgZm9y
IGENCiAgICAgICAgIyBkZXBlbmRlbnQgdGFyZ2V0LiBEb24ndCBnZW5lcmF0ZSBidWlsZCBp
bnN0cnVjdGlvbnMgaGVyZS4NCiAgICAgICAgaWYgISAkKGdJTl9MSUJfSU5DTFVERSkNCiAg
ICAgICAgew0KICAgICAgICAgICAgbWFpbi10YXJnZXQgJCh0YXJnZXQtaWQpIDogJChnVEFS
R0VUX0RFRkFVTFRfQlVJTEQoJCh0YXJnZXQtaWQpKSkgOw0KICAgICAgICB9DQogICAgfQ0K
DQogICAgcmV0dXJuICQoZ1RBUkdFVF9GSUxFUygkKHRhcmdldC1pZCkpKSA7DQp9DQoNCiMg
ZGVjbGFyZS1iYXNpYy10YXJnZXQgdGFyZ2V0LWlkIDogc291cmNlcyA6IHJlcXVpcmVtZW50
cyA6IGxvY2FsLUJVSUxEIDogdGFyZ2V0LXR5cGUNCiMNCiMgRGVjbGFyZXMgYSBiYXNpYyB0
YXJnZXQgZm9yIHRoZSBnaXZlbiB0YXJnZXQtaWQgYW5kIHRhcmdldC10eXBlLg0KIyBBbGwg
dGFyZ2V0IGdlbmVyYXRpb24gc2hvdWxkIGdvIHRocm91Z2ggaGVyZSB0byBlbnN1cmUgYWxs
IHZhcnMgYXJlIHNldA0KIyBmb3IgdGhlIHRhcmdldHMuDQojDQojIFdBUk5JTkc6IFRoaXMg
b25seSBkZWNsYXJlcywgbm8gYnVpbGQgaW5zdHJ1Y3Rpb25zIGFyZSBnZW5lcmF0ZWQgaGVy
ZS4NCnJ1bGUgZGVjbGFyZS1iYXNpYy10YXJnZXQgKCB0YXJnZXQtaWQgOiBzb3VyY2VzICog
OiByZXF1aXJlbWVudHMgKiA6IGRlZmF1bHQtYnVpbGQgKiA6IHRhcmdldC10eXBlICkNCnsN
CiAgICAjIFdlIGV4cGFuZCBvdXQgdGhlIG5hbWUgb2YgdGhlIHNvdXJjZXMNCiAgICBsb2Nh
bCB4LXNvdXJjZXMgPSBbIGV4cGFuZC1zb3VyY2UtbmFtZXMgJChzb3VyY2VzKSBdIDsNCg0K
ICAgICMgRGVmaW5lIHRoZSBzcGVjaWZpY2F0aW9ucyBvZiB0aGUgdGFyZ2V0LCBidXQgb25s
eSBpZiB3ZSBoYXZlbid0IGFscmVhZHkuDQogICAgIw0KICAgIGlmICEgJChnVEFSR0VUX1RZ
UEUoJCh0YXJnZXQtaWQpKSkNCiAgICB7DQogICAgICAgICMgU2F2ZSBiYXNpYyBpbmZvcm1h
dGlvbiBhYm91dCB0aGUgdGFyZ2V0Lg0KICAgICAgICAjDQogICAgICAgIGdUQVJHRVRfVFlQ
RSgkKHRhcmdldC1pZCkpID0gJCh0YXJnZXQtdHlwZSkgOw0KDQogICAgICAgICMgQWRkIHRo
ZSBzcGVjaWZpZWQgcmVxdWlyZW1lbnRzIHRvIGFueSByZXF1aXJlbWVudHMgZ2l2ZW4gYnkg
dGhlIHRhcmdldA0KICAgICAgICAjIHR5cGUsIGFuZCB0aGUgY29ycmVzcG9uZGluZyA8dGFy
Z2V0LXR5cGU+IHByb3BlcnR5Lg0KICAgICAgICAjDQogICAgICAgIGdUQVJHRVRfUkVRVUlS
RU1FTlRTKCQodGFyZ2V0LWlkKSkNCiAgICAgICAgICAgID0gdG9vbHNldDo6cmVxdWlyZW1l
bnRzICQocmVxdWlyZW1lbnRzKSAkKGdUQVJHRVRfVFlQRV9SRVFVSVJFTUVOVFMoJCh0YXJn
ZXQtdHlwZSkpKSA7DQogICAgICAgIGlmICEgJChnTk9fVEFSR0VUX1RZUEVfUkVRVUlSRU1F
TlQoJCh0YXJnZXQtdHlwZSkpKQ0KICAgICAgICB7DQogICAgICAgICAgICBnVEFSR0VUX1JF
UVVJUkVNRU5UUygkKHRhcmdldC1pZCkpICs9IDx0YXJnZXQtdHlwZT4kKHRhcmdldC10eXBl
KSA7DQogICAgICAgIH0NCg0KICAgICAgICAjIENvbGxlY3QgdGhlIHJlY29nbml6ZWQgZGVw
ZW5kZW5jaWVzIHRvIG90aGVyIHRhcmdldHMuDQogICAgICAgICMNCiAgICAgICAgbG9jYWwg
ZGVwZW5kZW5jaWVzIDsNCiAgICAgICAgZm9yIGxvY2FsIHNvdXJjZSBpbiBbIHNlbGVjdC1n
cmlzdGVkICQoeC1zb3VyY2VzKSBdDQogICAgICAgIHsNCiAgICAgICAgICAgIGxvY2FsIGRl
cGVuZGVuY3ktdHlwZSA9IFsgdW5ncmlzdCAkKHNvdXJjZTpHOkwpIF0gOw0KICAgICAgICAg
ICAgbG9jYWwgZGVwZW5kZW5jeS10eXBlLWlkID0gJChnVEFSR0VUX1RZUEVfSUQoJChkZXBl
bmRlbmN5LXR5cGUpKSkgOw0KICAgICAgICAgICAgaWYgJChnSVNfREVQRU5ERU5DWSgkKGRl
cGVuZGVuY3ktdHlwZS1pZCkpKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGdU
QVJHRVRfREVQUygkKHRhcmdldC1pZCkpICs9ICQoc291cmNlOkc9JChkZXBlbmRlbmN5LXR5
cGUtaWQpKSA7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICAjIFNvdXJj
ZXMgdGhhdCBhcmVuJ3QgcmVjb2duaXplZCBhcyB0YXJnZXRzLCBhcmUgY29uc2lkZXJlZCBy
YXcgc291cmNlcy4NCiAgICAgICAgIw0KICAgICAgICBnVEFSR0VUX1NPVVJDRVMoJCh0YXJn
ZXQtaWQpKQ0KICAgICAgICAgICAgPSBbIEZHcmlzdEZpbGVzDQogICAgICAgICAgICAgICAg
WyBkaWZmZXJlbmNlICQoeC1zb3VyY2VzOkc9KSA6ICQoZ1RBUkdFVF9ERVBTKCQodGFyZ2V0
LWlkKSk6Rz0pIF0gXSA7DQoNCiAgICAgICAgIyBTYXZlIHRoZSBkZWZhdWx0IGJ1aWxkcy4N
CiAgICAgICAgIw0KICAgICAgICBnVEFSR0VUX0RFRkFVTFRfQlVJTEQoJCh0YXJnZXQtaWQp
KSA9ICQoZGVmYXVsdC1idWlsZCkgOw0KDQogICAgICAgICMgQXBwbHkgYW55IG1vZGlmaWVy
cyB0byB0aGUgdGFyZ2V0IHNwZWNzLg0KICAgICAgICAjDQogICAgICAgIGZvciBsb2NhbCBt
b2QgaW4gJChnVEFSR0VUX0RFUFMoJCh0YXJnZXQtaWQpKSkNCiAgICAgICAgew0KICAgICAg
ICAgICAgbG9jYWwgZGVwZW5kZW5jeS10eXBlLWlkID0gWyB1bmdyaXN0ICQobW9kOkcpIF0g
Ow0KICAgICAgICAgICAgbG9jYWwgbW9kaWZpZXItZnVuY3Rpb24gPSAkKGdNT0RJRklFUl9G
VU5DVElPTigkKGRlcGVuZGVuY3ktdHlwZS1pZCkpKSA7DQogICAgICAgICAgICBpZiAkKG1v
ZGlmaWVyLWZ1bmN0aW9uKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICMgUmVt
b3ZlIGFuZCBhcHBseSB0aGUgbW9kaWZpZXIuDQogICAgICAgICAgICAgICAgZ1RBUkdFVF9E
RVBTKCQodGFyZ2V0LWlkKSkgPSBbIGRpZmZlcmVuY2UgJChnVEFSR0VUX0RFUFMoJCh0YXJn
ZXQtaWQpKSkgOiAkKG1vZCkgXSA7DQogICAgICAgICAgICAgICAgbG9jYWwgaWdub3JlZCA9
IFsgJChtb2RpZmllci1mdW5jdGlvbikgJCh0YXJnZXQtaWQpIDogJChtb2QpIF0gOw0KICAg
ICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KICAgICMgVHJ5aW5nIHRvIGRlZmluZSB0
aGUgc2FtZSBzcGVjaWZpYyB0YXJnZXQgd2l0aCBhIGRpZmZlcmVudCB0eXBlLg0KICAgICMN
CiAgICBlbHNlIGlmICQoZ1RBUkdFVF9UWVBFKCQodGFyZ2V0LWlkKSkpICE9ICQodGFyZ2V0
LXR5cGUpDQogICAgew0KICAgICAgICBFWElUIGNvbmZsaWN0aW5nIHRhcmdldCB0eXBlcyBm
b3IgIiQoeC10YXJnZXQpIjoNCiAgICAgICAgIiQoZ1RBUkdFVF9UWVBFKCQodGFyZ2V0LWlk
KSkpIiAiJCh0YXJnZXQtdHlwZSkiIDsNCiAgICB9DQp9DQoNCiMgZGlyZWN0b3J5LW9mIGZp
bGVzLi4uDQojDQojIFJldHVybnMgYSBsaXN0IG9mIHRoZSBkaXJlY3RvcmllcyBjb250YWlu
aW5nIGVhY2ggZWxlbWVudCBvZiBmaWxlcw0KcnVsZSBkaXJlY3Rvcnktb2YNCnsNCiAgICBs
b2NhbCByZXN1bHQgZCA7DQogICAgZm9yIGQgaW4gJCg8OkQpDQogICAgew0KICAgICAgICBp
ZiAkKGQpID0gIiINCiAgICAgICAgew0KICAgICAgICAgICAgcmVzdWx0ICs9ICQoRE9UKSA7
DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICByZXN1
bHQgKz0gJChkKSA7DQogICAgICAgIH0NCiAgICB9DQogICAgcmV0dXJuICQocmVzdWx0KSA7
DQp9DQoNCiMgdG9wLXJlbGF0aXZlLXRva2VucyBwYXRoDQojDQojIFJldHVybnMgYSBsaXN0
IG9mIHBhdGggZWxlbWVudHMgd2hpY2ggZm9ybSB0aGUgcmVsYXRpdmUgcGF0aCBmcm9tIFRP
UCB0byBwYXRoLA0KIyB3aGljaCBpcyBleHBlY3RlZCB0byBiZSBnaXZlbiByZWxhdGl2ZSB0
byB0aGUgY3VycmVudCBzdWJwcm9qZWN0Lg0KcnVsZSB0b3AtcmVsYXRpdmUtdG9rZW5zDQp7
DQogICAgcmV0dXJuIFsgc2ltcGxpZnktcGF0aC10b2tlbnMgJChTVUJESVJfVE9LRU5TKSBb
IHNwbGl0LXBhdGggJCg8KSBdIF0gOw0KfQ0KDQoucHJvamVjdC1yb290LXRva2VucyA9IFsg
c3BsaXQtcGF0aCAkKC5ib29zdC1idWlsZC1maWxlOkQpIF0gOw0KDQojIHRyeSB0byBtYWtl
IGEgcG90ZW50aWFsbHkgYWJzb2x1dGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdA0K
IyByb290LiAgT25seSB3b3JrcyBmb3IgcGF0aHMgYmVsb3cgdGhlIHByb2plY3Qgcm9vdCBy
aWdodCBub3c7IG90aGVycw0KIyB3aWxsIHJlbWFpbiBhYnNvbHV0ZS4NCnJ1bGUgcmVsYXRp
dmUtcGF0aCAoIHBhdGggKQ0Kew0KICAgIGxvY2FsIHBhdGgtdG9rZW5zID0gWyBzcGxpdC1w
YXRoICQocGF0aCkgXSA7DQogICAgDQogICAgIyB0cnkgdG8gc3RyaXAgdGhlIHByb2plY3Qg
cm9vdA0KICAgIGxvY2FsIHIgPSAkKC5wcm9qZWN0LXJvb3QtdG9rZW5zKSA7DQogICAgbG9j
YWwgcCA9ICQocGF0aC10b2tlbnMpIDsNCiAgICB3aGlsZSAkKHIpICYmICggJChyWzFdKSA9
ICQocFsxXSkgKQ0KICAgIHsNCiAgICAgICAgcCA9ICQocFsyLV0pIDsNCiAgICAgICAgciA9
ICQoclsyLV0pIDsNCiAgICB9DQogICAgDQogICAgIyBpZiBzdWNjZXNzZnVsLCB1c2UgdGhl
IHN0cmlwcGVkIHByb2plY3Qgcm9vdA0KICAgIGlmICEgJChyKQ0KICAgIHsNCiAgICAgICAg
cGF0aC10b2tlbnMgPSAkKHApIDsNCiAgICB9DQogICAgDQogICAgcmV0dXJuIFsgdG9rZW5z
LXRvLXNpbXBsZS1wYXRoICAkKHBhdGgtdG9rZW5zKSBdIDsNCn0NCg0KIyBkZXBlbmRlbnQt
aW5jbHVkZSB0YXJnZXQtcGF0aC4uLg0KIw0KIyBGb3IgZWFjaCB0YXJnZXQtcGF0aCwgZW5z
dXJlIHRoYXQgdGhlIGFwcHJvcHJpYXRlIEphbWZpbGUgaGFzIGJlZW4NCiMgaW5jbHVkZWQu
IFVzZWQgd2hlbiBhIHRhcmdldCBkZWNsYXJlcyBpdHMgZGVwZW5kZW5jeSBvbiBhbm90aGVy
IHRhcmdldC4NCnJ1bGUgZGVwZW5kZW50LWluY2x1ZGUNCnsNCiAgICBsb2NhbCB0YXJnZXQg
Ow0KICAgIGZvciB0YXJnZXQgaW4gJCg8KQ0KICAgIHsNCiAgICAgICAgew0KICAgICAgICAg
ICAgbG9jYWwgLnByb2plY3QtcGF0aCA9IFsgdGFyZ2V0LXBhdGgtb2YgJCh0YXJnZXQpIF0g
Ow0KICAgICAgICAgICAgLnByb2plY3QtcGF0aCA9ICQoLnByb2plY3QtcGF0aDpEKSA7DQog
ICAgICAgICAgICANCiAgICAgICAgICAgICMgbG9hZCB0aGUgZmlsZSBhcyBhIGRlcGVuZGVu
dC4NCiAgICAgICAgICAgIGxvY2FsIGdJTl9MSUJfSU5DTFVERSA9IFRSVUUgOw0KICAgICAg
ICAgICAgDQogICAgICAgICAgICAjDQogICAgICAgICAgICBsb2NhbCBbIHByb3RlY3Qtc3Vi
cHJvamVjdCBdIDsNCiAgICAgICAgICAgIGxvY2FsIC5wcm9qZWN0LW5hbWUtYW5kLXN1YmRp
ciA9IFsgZW50ZXItc3VicHJvamVjdCAkKC5wcm9qZWN0LXBhdGgpIF0gOw0KICAgICAgICAg
ICAgbG9jYWwgLnByb2plY3QtbmFtZSA9ICQoLnByb2plY3QtbmFtZS1hbmQtc3ViZGlyWzFd
KSA7DQogICAgICAgICAgICBsb2NhbCAucHJvamVjdC1zdWJkaXIgPSAkKC5wcm9qZWN0LW5h
bWUtYW5kLXN1YmRpclsyXSkgOw0KICAgICAgICAgICAgbG9jYWwgLmphbWZpbGUtcGF0aCA9
IFsgcm9vdC1wYXRocyAkKEpBTUZJTEUpIDogWyByb290LXBhdGhzICQoLnByb2plY3Qtc3Vi
ZGlyKSA6ICQoVE9QKSBdIF0gOw0KICAgICAgICAgICAgDQogICAgICAgICAgICBsb2FkLWph
bWZpbGVzICQoLmphbWZpbGUtcGF0aCkgOw0KICAgICAgICB9DQogICAgfQ0KfQ0KDQojIHNl
Z3JlZ2F0ZS1mcmVlLXByb3BlcnRpZXMgdmFyaWFibGUxIHZhcmlhYmxlMi4uLg0KIw0KIyBy
ZXR1cm5zIHRoZSBhbmQgcmVtb3ZlcyB0aGUgdW5pcXVlIGxpc3Qgb2YgZnJlZSBwcm9wZXJ0
aWVzIGZyb20NCiMgJCh2YXJpYWJsZTEpICQodmFyaWFibGUyKS4uLiANCnJ1bGUgc2VncmVn
YXRlLWZyZWUtcHJvcGVydGllcw0Kew0KICAgIGxvY2FsIGZyZWUtcHJvcGVydGllcyA9IFsg
dW5pcXVlIFsgZ2V0LXByb3BlcnRpZXMgJChnRlJFRV9GRUFUVVJFUykgOiAkKCQoPCkpIF0g
XSA7DQogICAgbG9jYWwgdiA7DQogICAgZm9yIHYgaW4gJCg8KQ0KICAgIHsNCiAgICAgICAg
JCh2KSA9IFsgZGlmZmVyZW5jZSAkKCQodikpIDogJChmcmVlLXByb3BlcnRpZXMpIF0gOw0K
ICAgIH0NCiAgICByZXR1cm4gJChmcmVlLXByb3BlcnRpZXMpIDsNCn0NCg0KIyBpcy1saW5r
LWNvbXBhdGlibGUgZmVhdHVyZSA6IHZhbHVlMSA6IHZhbHVlMg0KIw0KIyByZXR1cm4gbm9u
LWVtcHR5IGlmZiBhIGxpYnJhcnkgYnVpbHQgd2l0aCA8ZmVhdHVyZT52YWx1ZTEgY2FuIGJl
IGxpbmtlZCBpbnRvIGENCiMgdGFyZ2V0IHdpdGggPGZlYXR1cmU+dmFsdWUyLCBlbXB0eSBv
dGhlcndpc2UNCnJ1bGUgaXMtbGluay1jb21wYXRpYmxlICggZmVhdHVyZSA6IHZhbHVlMSA6
IHZhbHVlMiApDQp7DQogICAgcmV0dXJuIFsgaW50ZXJzZWN0aW9uDQogICAgICAgICQoZmVh
dHVyZSkgJCh2YWx1ZTE6Rz0kKGZlYXR1cmUpKQ0KICAgICAgICAkKHZhbHVlMTpHPSQoZmVh
dHVyZSkpJChTTEFTSCkkKHZhbHVlMTI6Rz0kKGZlYXR1cmUpKQ0KICAgICAgICAkKHZhbHVl
MjpHPSQoZmVhdHVyZSkpDQogICAgICAgIDogJChnTElOS19DT01QQVRJQkxFKSBdIDsNCn0N
Cg0KIyBmaW5kLWNvbXBhdGlibGUtc3VidmFyaWFudCBtYWluLXRhcmdldCA6IHRvb2xzZXQg
dmFyaWFudCA6IGRlcGVuZGVudC1zaW1wbGUtcHJvcGVydGllcw0KcnVsZSBmaW5kLWNvbXBh
dGlibGUtc3VidmFyaWFudCAoIG1haW4tdGFyZ2V0IDogdG9vbHNldCB2YXJpYW50IDogZGVw
ZW5kZW50LXNpbXBsZS1wcm9wZXJ0aWVzICogKQ0Kew0KICAgICMgY2FsY3VsYXRlIHRoZSBz
dWJ2YXJpYW50IG9ubHkgb2Ygd2hhdCBpcyByZXF1ZXN0ZWQNCiAgICAjIHRoZSBzdWJ2YXJp
YW50IHJlcXVlc3RlZC4uLg0KICAgIGxvY2FsIHN2LXJlcXVlc3QgPQ0KICAgICAgICBbIG11
bHRpcGx5LXByb3BlcnR5LXNldHMNCiAgICAgICAgICAgIFsgZ2V0LXByb3BlcnRpZXMgJChC
VUlMRDpHKSA6ICQoZGVwZW5kZW50LXNpbXBsZS1wcm9wZXJ0aWVzKSBdIF0gOw0KICAgICMg
dGhlIGF2YWlsYWJsZSBidWlsZCByZXF1ZXN0cy4uLg0KICAgIGxvY2FsIGJ1aWxkLXJlcXVl
c3RzID0NCiAgICAgICAgWyBtdWx0aXBseS1wcm9wZXJ0eS1zZXRzIFsgc2VsZWN0LWdyaXN0
ZWQgJChCVUlMRCkgXSBdIDsNCiAgICAjIHRoZSBidWlsZCByZXF1c3Qgd2Ugd2FudCB0byBi
dWlsZC4uLg0KICAgIGxvY2FsIHN2LWJ1aWxkID0NCiAgICAgICAgWyBpbnRlcnNlY3Rpb24g
JChzdi1yZXF1ZXN0KSA6ICQoYnVpbGQtcmVxdWVzdHMpIF0gOw0KICAgICAgICBzdi1idWls
ZCA/PSAiIiA7DQogICAgbG9jYWwgQlVJTEQgPSAkKHZhcmlhbnQpIFsgc3BsaXQtcGF0aCAk
KHN2LWJ1aWxkKSBdIDsNCiAgICBsb2NhbCBnVEFSR0VUX0RFRkFVTFRfQlVJTEQoJChtYWlu
LXRhcmdldCkpID0gOw0KICAgICMgdGhlIGZ1bGwgc3VidmFyaWFudCB0byBidWlsZC4uLg0K
ICAgIGxvY2FsIHN1YnZhcmlhbnQgPSBbIGV4cGFuZC10YXJnZXQtc3VidmFyaWFudHMgJCht
YWluLXRhcmdldCkgOiAkKHZhcmlhbnQpIDogJCh0b29sc2V0KSBdIDsNCg0KICAgIGxvY2Fs
IHN2LXRhcmdldCA9IDsgbG9jYWwgc3YtcHJvcGVydGllcyA9IDsgbG9jYWwgc3YtdG9vbHNl
dCA9IDsgbG9jYWwgc3YtdmFyaWFudCA9IDsNCiAgICBzcGxpdC10YXJnZXQtc3VidmFyaWFu
dCBzdi10YXJnZXQgc3YtcHJvcGVydGllcyBzdi10b29sc2V0IHN2LXZhcmlhbnQgOiAkKHN1
YnZhcmlhbnQpIDsNCiAgICBsb2NhbCBzdi1vdmVycmlkZXMgPQ0KICAgICAgICBbIGRpZmZl
cmVuY2UgJChkZXBlbmRlbnQtc2ltcGxlLXByb3BlcnRpZXMpIDogWyBzZWxlY3QtZ3Jpc3Rl
ZCAkKHN2LXByb3BlcnRpZXMpIF0gXSA7DQogICAgc3Ytb3ZlcnJpZGVzICs9DQogICAgICAg
IFsgZ2V0LXByb3BlcnRpZXMNCiAgICAgICAgICAgIFsgZGlmZmVyZW5jZSAkKGRlcGVuZGVu
dC1zaW1wbGUtcHJvcGVydGllczpHKSA6ICQoc3Ytb3ZlcnJpZGVzOkcpIF0gOiAkKHN2LXBy
b3BlcnRpZXMpIF0gOw0KDQogICAgaWYgISAkKGdUQVJHRVRfVFlQRSgkKG1haW4tdGFyZ2V0
KSkpDQogICAgew0KICAgICAgICBFWElUIHVua25vd24gZGVwZW5kZW50IHRhcmdldCAkKG1h
aW4tdGFyZ2V0KSA7DQogICAgfQ0KICAgIA0KICAgICMgY2hlY2sgdG8gbWFrZSBzdXJlIHdl
IGNhbiBsaW5rIGFnYWluc3QgdGhlIHN1YnZhcmlhbnQNCiAgICBsb2NhbCB0YXJnZXQtcmVx
dWlyZW1lbnRzDQogICAgICAgID0gWyBzZWxlY3QtZ3Jpc3RlZCAkKGdUQVJHRVRfUkVRVUlS
RU1FTlRTKCQobWFpbi10YXJnZXQpKSkgXSA7DQogICAgbG9jYWwgb3ZlcnJpZGUtY29uZmxp
Y3RzDQogICAgICAgID0gWyBnZXQtcHJvcGVydGllcyAkKHRhcmdldC1yZXF1aXJlbWVudHM6
RykgJChnQUxXQVlTX1JFTEVWQU5UKSA6ICQoc3Ytb3ZlcnJpZGVzKSBdIDsNCiAgICBmb3Ig
bG9jYWwgc3Ytb3ZlcnJpZGUgaW4gJChvdmVycmlkZS1jb25mbGljdHMpDQogICAgew0KICAg
ICAgICBsb2NhbCBzdi1yZXF1aXJlZCA9IFsgZ2V0LXZhbHVlcyAkKHN2LW92ZXJyaWRlOkcp
IDogJChzdi1wcm9wZXJ0aWVzKSBdIDsNCiAgICAgICAgaWYgJChzdi1vdmVycmlkZTpHPSkg
IT0gJChzdi1yZXF1aXJlZCkgJiYNCiAgICAgICAgICAgICEgWyBpcy1saW5rLWNvbXBhdGli
bGUgJChzdi1vdmVycmlkZTpHKSA6ICQoc3Ytb3ZlcnJpZGU6Rz0pIDogJChzdi1yZXF1aXJl
ZCkgXQ0KICAgICAgICB7DQogICAgICAgICAgICBFWElUICQobWFpbi10YXJnZXQpOiByZXF1
aXJlZCBwcm9wZXJ0eSAkKHN2LW92ZXJyaWRlOkcpJChzdi1yZXF1aXJlZCkNCiAgICAgICAg
ICAgICAgICBpbmNvbXBhdGlibGUgd2l0aCAkKHN2LW92ZXJyaWRlKSA7DQogICAgICAgIH0N
CiAgICB9DQoNCiAgICAjIG5vdyB0aGF0IHdlIGhhdmUgYSBtb3N0bHkgKG9yIGNvbXBsZXRl
bHkpIGNvbXBhdGlibGUgc3VidmFyaWFudCBkbyB0aGUgb3ZlcnJpZGVzDQogICAgbG9jYWwg
Z1RBUkdFVF9SRVFVSVJFTUVOVFMoJChtYWluLXRhcmdldCkpID0NCiAgICAgICAgIyBwcm9w
ZXJ0eSBydWxlcy4uLg0KICAgICAgICBbIHNlbGVjdC11bmdyaXN0ZWQgJChnVEFSR0VUX1JF
UVVJUkVNRU5UUygkKG1haW4tdGFyZ2V0KSkpIF0NCiAgICAgICAgIyBhbHdheXMgcmVsZXZh
bnQgcHJvcGVydGllcyB0byB0YXJnZXQuLi4NCiAgICAgICAgWyBkaWZmZXJlbmNlDQogICAg
ICAgICAgICAkKHRhcmdldC1yZXF1aXJlbWVudHMpIDoNCiAgICAgICAgICAgIFsgZ2V0LXBy
b3BlcnRpZXMgWyBkaWZmZXJlbmNlICQoc3Ytb3ZlcnJpZGVzOkcpIDogJChnQUxXQVlTX1JF
TEVWQU5UKSBdIDogJCh0YXJnZXQtcmVxdWlyZW1lbnRzKSBdIF0NCiAgICAgICAgIyBsaW5r
IGNvbXBhdGlibGUgcHJvcGVydGllcywgb24gdGhlIHRhcmdldC4uLg0KICAgICAgICBbIGdl
dC1wcm9wZXJ0aWVzDQogICAgICAgICAgICBbIGRpZmZlcmVuY2UgJChzdi1vdmVycmlkZXM6
RykgOiAkKGdBTFdBWVNfUkVMRVZBTlQpIF0gOiAkKHRhcmdldC1yZXF1aXJlbWVudHMpIF0N
CiAgICAgICAgIyBvdmVycmlkZXMgZnJvbSBkZXBlbmRlbnQuLi4NCiAgICAgICAgWyBnZXQt
cHJvcGVydGllcw0KICAgICAgICAgICAgWyBkaWZmZXJlbmNlICQoc3Ytb3ZlcnJpZGVzOkcp
IDogJChvdmVycmlkZS1jb25mbGljdHM6RykgXSA6ICQoZGVwZW5kZW50LXNpbXBsZS1wcm9w
ZXJ0aWVzKSBdDQogICAgICAgIDsNCiAgICBzdWJ2YXJpYW50ID0gWyBleHBhbmQtdGFyZ2V0
LXN1YnZhcmlhbnRzICQoc3YtdGFyZ2V0KSA6ICQoc3YtdmFyaWFudCkgOiAkKHN2LXRvb2xz
ZXQpIF0gOw0KICAgIHNwbGl0LXRhcmdldC1zdWJ2YXJpYW50IHN2LXRhcmdldCBzdi1wcm9w
ZXJ0aWVzIHN2LXRvb2xzZXQgc3YtdmFyaWFudCA6ICQoc3VidmFyaWFudCkgOw0KDQogICAg
cmV0dXJuICQoc3YtcHJvcGVydGllcykgOw0KfQ0KDQoNCiMgRm9yIGVhY2ggdGFyZ2V0IHNw
ZWNpZmllZCBpbiBsaWJzLCBnZW5lcmF0ZSBidWlsZCBpbnN0cnVjdGlvbnMNCiMgZm9yIGEg
c3VidmFyaWFudCB0aGF0IGNhbiBiZSBsaW5rZWQgd2l0aCBhIGRlcGVuZGVudCB0YXJnZXQg
d2l0aA0KIyBkZXBlbmRlbnQtcHJvcGVydGllcywgcmV0dXJuaW5nIGEgbGlzdCBvZiBhbGwg
Z2VuZXJhdGVkIHRhcmdldHMuDQpydWxlIGxpbmstbGlicmFyaWVzICggbGlicyAqIDogdG9v
bHNldCB2YXJpYW50IDogZGVwZW5kZW50LXNpbXBsZS1wcm9wZXJ0aWVzICogKQ0Kew0KICAg
IGxvY2FsIGxpYi1wYXRoIHJlc3VsdCA7DQogICAgDQogICAgZm9yIGxpYi1wYXRoIGluICQo
bGlicykNCiAgICB7DQogICAgICAgIGxvY2FsIGxpYi1wYXRoID0gWyB0YXJnZXQtcGF0aC1v
ZiAkKGxpYi1wYXRoKSBdIDsNCiAgICAgICAgbG9jYWwgbGliLXRhcmdldCA9IFsgdGFyZ2V0
LWlkLW9mICQobGliLXBhdGgpIF0gOw0KDQogICAgICAgICMgRW50ZXIgdGhlIGRlcGVuZGVl
IHN1YnByb2plY3QNCiAgICAgICAgbG9jYWwgWyBwcm90ZWN0LXN1YnByb2plY3QgXSA7DQog
ICAgICAgIGVudGVyLXN1YnByb2plY3QgWyBkaXJlY3Rvcnktb2YgJChsaWItcGF0aCkgXSA7
DQoNCiAgICAgICAgbG9jYWwgbGliLXN1YnZhcmlhbnQgPSBbIA0KICAgICAgICAgIGZpbmQt
Y29tcGF0aWJsZS1zdWJ2YXJpYW50ICQobGliLXRhcmdldCkNCiAgICAgICAgICAgIDogJCh0
b29sc2V0KSAkKHZhcmlhbnQpDQogICAgICAgICAgICAgIDogJChkZXBlbmRlbnQtc2ltcGxl
LXByb3BlcnRpZXMpIF0gOw0KDQogICAgICAgICMgR2VuZXJhdGUgYnVpbGQgaW5zdHJ1Y3Rp
b25zIGZvciB0aGUgbGlicmFyeSB0YXJnZXQNCiAgICAgICAgcmVzdWx0ICs9IFsgc3VidmFy
aWFudC10YXJnZXQgJChsaWItdGFyZ2V0KSA6ICQobGliLXN1YnZhcmlhbnQpIDogJCh0b29s
c2V0KSAkKHZhcmlhbnQpIF0gOw0KICAgIH0NCiAgICByZXR1cm4gJChyZXN1bHQpIDsNCn0N
Cg0KIyBXaGljaCBjb25maWd1cmF0aW9uKHMpIHRvIGJ1aWxkIGlmIG5vdGhpbmcgaXMgZXhw
bGljaXRseSBzcGVjaWZpZWQNCkRFRkFVTFRfQlVJTEQgPz0gZGVidWcgOw0KDQojIGdldC1C
VUlMRCBbdGFyZ2V0LWRlZmF1bHQtYnVpbGRdDQojDQojIHBpY2sgdGhlIGZpcnN0IG9mICgk
KEJVSUxEKSwgJCg+KSwgJChERUZBVUxUX0JVSUxEKSkgd2hpY2ggaXMgc2V0LiBJZiBpdA0K
IyBjb250YWlucyBubyB2YXJpYW50cywgYWRkIHZhcmlhbnRzIGZyb20gJChERUZBVUxUX0JV
SUxEKS4NCnJ1bGUgZ2V0LUJVSUxEDQp7DQogIGxvY2FsIGJ1aWxkID0gJChCVUlMRCkgOw0K
ICBidWlsZCA/PSAkKDwpIDsNCiAgYnVpbGQgPz0gJChERUZBVUxUX0JVSUxEKSA7DQogIGxv
Y2FsIHZhcmlhbnRzID0gWyBzZWxlY3QtdW5ncmlzdGVkICQoYnVpbGQpIF0gOw0KICBpZiAh
ICQodmFyaWFudHMpDQogIHsNCiAgICBidWlsZCArPSBbIHNlbGVjdC11bmdyaXN0ZWQgJChE
RUZBVUxUX0JVSUxEKSBdIDsNCiAgfQ0KICByZXR1cm4gJChidWlsZCkgOw0KfQ0KDQojIGRl
Y2xhcmUtZmFrZS10YXJnZXRzIGFic3RyYWN0LXRhcmdldCA6IHRhcmdldC1maWxlDQojDQoj
IA0KcnVsZSBkZWNsYXJlLWZha2UtdGFyZ2V0cw0Kew0KICAgICMgbWFrZSBhIGZha2UgdGFy
Z2V0IHNvIHRoYXQgaXQgY2FuIGJlIGJ1aWx0IHdpdGhvdXQga25vd2luZyB0aGUgc3VmZml4
DQogICAgIyBTaW5jZSBleGVjdXRhYmxlcyB1bmRlciAqTklYIGhhdmUgbm8gc3VmZml4LCB3
ZSdkIGJldHRlciBjaGVjaw0KICAgIGlmICQoPikgIT0gJCg8KQ0KICAgIHsNCiAgICAgICAg
REVQRU5EUyAkKDwpIDogJCg+KSA7DQogICAgICAgIE5PVEZJTEUgJCg8KSA7DQogICAgfQ0K
ICAgIA0KICAgICMgVGhlIGZvbGxvd2luZyBjaGVja3MgdGhhdCB3ZSdyZSBpbiB0aGUgc3Vi
ZGlyZWN0b3J5IG9mIEphbSdzIGludm9jYXRpb24NCiAgICAjIHNvIHRoYXQgd2UgY2FuIGFy
cmFuZ2UgZm9yIHVuZ3Jpc3RlZCB0YXJnZXQgbmFtZXMgdG8gYmUgYnVpbHQgZnJvbSB0aGUN
CiAgICAjIGNvbW1hbmQtbGluZS4NCiAgICBpZiAkKDw6RykgJiYgWyBpbi1pbnZvY2F0aW9u
LXN1YmRpciBdDQogICAgew0KICAgICAgICBERVBFTkRTICQoPDpHPSkgOiAkKDwpIDsgIyBh
bGxvd3MgJCg8Okc9KSB0byBiZSB1c2VkIHRvIGJ1aWxkIGFsbCB2YXJpYW50cw0KICAgICAg
ICBOT1RGSUxFICQoPDpHPSkgOw0KICAgIH0NCn0NCg0KIyBkZWNsYXJlLXRhcmdldC10eXBl
IFRZUEUgOiBbWzxjb21waWxlcj5dPHZhcmlhbnQ+XTxmZWF0dXJlPnZhbHVlLi4uDQpydWxl
IGRlY2xhcmUtdGFyZ2V0LXR5cGUNCnsNCiAgICBnVEFSR0VUX1RZUEVfUkVRVUlSRU1FTlRT
KCQoPCkpID0gJCg+KSA7DQp9DQoNCmRlY2xhcmUtdGFyZ2V0LXR5cGUgRExMIDogPHNoYXJl
ZC1saW5rYWJsZT50cnVlIDsNCg0KaWYgJChOVCkNCnsNCiAgZ0lNUE9SVF9TVUZGSVgoRExM
KSA9IC5saWIgOw0KICBnSU1QT1JUX1NVRkZJWChMSUIpID0gLmxpYiA7DQogIGdFWFBPUlRf
U1VGRklYKERMTCkgPSAubGliIDsNCn0NCmVsc2UNCnsNCiAgZ0lNUE9SVF9TVUZGSVgoRExM
KSA9IC5zbyA7DQogIGdJTVBPUlRfU1VGRklYKExJQikgPSAuYSA7DQp9DQoNCiMNCiMgcHJl
cGFyZSBwYXRoIGNvbnN0YW50cw0KIw0Kew0KICAgICMgVGhlIG5hbWVzIG9mIHBhdGggdmFy
aWFibGVzIHRoYXQgYXJlIHNldCBvbiB0YXJnZXRzDQogICAgLnJ1bi1wYXRoLXZhcnMgPSBM
RF9MSUJSQVJZX1BBVEggUEFUSCBQWVRIT05QQVRIIDsNCg0KICAgIGZvciBsb2NhbCB2IGlu
ICQoLnJ1bi1wYXRoLXZhcnMpDQogICAgew0KICAgICAgICAuc2hlbGwtdmFyKCQodikpID0g
JCh2KSA7DQogICAgfQ0KICAgIA0KICAgICMgRHluYW1pYyBsaWJyYXJpZXMgYXJlIGFjdHVh
bGx5IGZvdW5kIG9uIFBBVEgNCiAgICBpZiAkKE5UKSB8fCAoICQoVU5JWCkgPSAkKENZR1dJ
TikgKQ0KICAgIHsNCiAgICAgICAgLnNoZWxsLXZhcihMRF9MSUJSQVJZX1BBVEgpID0gUEFU
SCA7DQogICAgfQ0KDQogICAgIyBUaGUgbmFtZXMgb2YgcGF0aCB2YXJpYWJsZXMgaW4gdGhl
IHNoZWxsDQogICAgLnJ1bi1wYXRoLXNoZWxsLXZhcnMgPSBbIHVuaXF1ZSAkKC5zaGVsbC12
YXIoJCgucnVuLXBhdGgtdmFycykpKSBdIDsNCiAgICANCiAgICAjIFJlY29yZCB0aGUgb3Jp
Z2luYWwgdmFsdWUgb2YgZWFjaCBzaGVsbCB2YXJpYWJsZQ0KICAgIGZvciBsb2NhbCB2IGlu
ICQoLnJ1bi1wYXRoLXNoZWxsLXZhcnMpDQogICAgew0KICAgICAgICAucnVuLXBhdGgtc2hl
bGwtdmFyLXZhbHVlKCQodikpID0gJCgkKHYpKSA7DQogICAgfQ0KICAgIA0KICAgIGlmICQo
TlQpDQogICAgew0KICAgICAgICAuZW52LXByZWZpeCA9ICUgOyANCiAgICAgICAgLmVudi1z
dWZmaXggPSAlIDsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICAgLmVudi1wcmVm
aXggPSAiJCIgOw0KICAgICAgICAuZW52LXN1ZmZpeCA9ICIiIDsNCiAgICB9DQp9DQoNCg0K
DQojIEhlbHBlcg0KcnVsZSBkZXBlbmQtb24tbGlicyAoIHRhcmdldHMgKyA6IGxpYnMgKiAp
DQp7DQogICAgTElCUEFUSCBvbiAkKDwpICs9IFsgdW5pcXVlICQoZ0xPQ0FURSgkKD4pKSkg
XSA7DQogICAgREVQRU5EUyAkKDwpIDogJCg+KSA7DQogICAgIyBUbyBydW4gdGhlc2UgdGFy
Z2V0cywgd2UgbmVlZCBldmVyeXRoaW5nIG5lZWRlZCB0byBydW4gdGhlIGxpYnJhcmllcw0K
ICAgIGZvciBsb2NhbCB2IGluICQoLnJ1bi1wYXRoLXZhcnMpDQogICAgew0KICAgICAgICBn
UlVOXyQodikoJCg8KSkgPSBbIHVuaXF1ZSAkKGdSVU5fJCh2KSgkKDwpKSkgJChnUlVOXyQo
dikoJCg+KSkpIF0gOw0KICAgIH0NCn0NCg0KcnVsZSBkZXBlbmQtb24tc3RhdGljICggdGFy
Z2V0cyArIDogc3RhdGljLWxpYnMgKiApDQp7DQogICAgbG9jYWwgTkVFRExJQlMgPSBbIHVu
aXF1ZSAkKE5FRURMSUJTKSAkKD4pIF0gOw0KICAgIE5FRURMSUJTIG9uICQoPCkgPSBbIG9u
ICQoPCkgcmV0dXJuIFsgdW5pcXVlICQoTkVFRExJQlMpICQoPikgXSBdIDsNCiAgICBkZXBl
bmQtb24tbGlicyAkKHRhcmdldHMpIDogJChzdGF0aWMtbGlicykgOw0KfQ0KDQpydWxlIGRl
cGVuZC1vbi1zaGFyZWQgKCB0YXJnZXRzICsgOiBkbGxzLWFuZC1pbXBvcnQtbGlicyAqICkN
CnsNCiAgICBsb2NhbCBsaW5rYWJsZSA7DQogICAgDQogICAgIyBjb2xsZWN0IHRoZSBsaW5r
YWJsZSBlbGVtZW50cyBvZiB0aGUgc291cmNlIGxpYnMgaW50byB0aGUgYXBwcm9wcmlhdGUg
dmFyaWFibGVzDQogICAgZm9yIGxvY2FsIGYgaW4gJChkbGxzLWFuZC1pbXBvcnQtbGlicykN
CiAgICB7DQogICAgICAgIGxvY2FsIHYgPSAkKGdMSU5LX1ZBUklBQkxFKCQoZjpTKSkpIDsN
CiAgICAgICAgJCh2KSArPSAkKGYpIDsNCiAgICAgICAgJCh2KSBvbiAkKHRhcmdldHMpICs9
ICQoZikgOw0KICAgICAgICBpZiAkKHYpDQogICAgICAgIHsNCiAgICAgICAgICAgIGxpbmth
YmxlICs9ICQoZikgOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgRklORExJQlMgb24gJCg8
KSArPSBbIHVuaXF1ZSAkKGdUQVJHRVRfQkFTRU5BTUUoJChnVEFSR0VUX1NVQlZBUklBTlQo
JCg+KSkpKSkgXSA7DQogICAgDQogICAgZGVwZW5kLW9uLWxpYnMgJCh0YXJnZXRzKSA6ICQo
ZGxscy1hbmQtaW1wb3J0LWxpYnMpIDsNCn0NCg0KIyBHaXZlbiBidWlsZCBwcm9wZXJ0aWVz
LCByZXR1cm5zIHRoZSBub3JtYWxpc2VkIHZlcnNpb24gb2YgdGhlIDx0YWc+IGZlYXR1cmVz
IGZvcg0KIyB1c2UgYnkgcmVuYW1lLXRhcmdldHMuDQpydWxlIGdldC10YWctZmVhdHVyZXMg
KCB2YXJpYW50IDogYnVpbGQtcHJvcGVydGllcyAqICkNCnsNCiAgICBsb2NhbCByZXN1bHQg
PSA7DQogICAgbG9jYWwgdGFncyA9IFsgZ2V0LXByb3BlcnRpZXMgPHRhZz4gOiAkKGJ1aWxk
LXByb3BlcnRpZXMpIF0gOw0KICAgIGZvciBsb2NhbCB0YWcgaW4gJCh0YWdzKQ0KICAgIHsN
CiAgICAgICAgdGFnID0gJCh0YWc6Rz0pIDsNCiAgICAgICAgaWYgJCh0YWc6RykNCiAgICAg
ICAgew0KICAgICAgICAgICAgcmVzdWx0ICs9IDx0YWc+JCh0YWcpIDsNCiAgICAgICAgfQ0K
ICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAgIHJlc3VsdCArPSA8dGFnPjwk
KHZhcmlhbnQpPiQodGFnKSA7DQogICAgICAgIH0NCiAgICB9DQogICAgcmV0dXJuICQocmVz
dWx0KSA7DQp9DQoNCnJ1bGUgZ2VuZXJhdGUtZGVwZW5kZW5jaWVzICggbWFpbi10YXJnZXQg
OiBzdWJ2YXJpYW50LXRhcmdldHMgKyApDQp7DQogICAgbG9jYWwgZGVwZW5kZW5jaWVzID0g
JChnVEFSR0VUX0RFUFMoJChtYWluLXRhcmdldCkpKSA7DQogICAgew0KICAgICAgICAjIFBy
b3RlY3QgdGFyZ2V0IHZhcmlhYmxlcyBhZ2FpbnN0IG1vZGlmaWNhdGlvbiB3aGlsZSBsaWIg
ZGVwZW5kZW5jaWVzDQogICAgICAgICMgYXJlIGJ1aWx0LiBUaGV5IHdpbGwgYmUgbWFkZSBl
bXB0eSBoZXJlLCBhbmQgcmVzdG9yZWQgd2hlbiB0aGlzIHNjb3BlIGV4aXRzDQogICAgICAg
IGxvY2FsICQoZ1RBUkdFVF9WQVJJQUJMRVMpIDsNCg0KICAgICAgICAjIGV4dHJhY3QgdGhl
IHNpbXBsZSBwcm9wZXJ0aWVzIGZyb20gZGVwZW5kZW50LXByb3BlcnRpZXMNCiAgICAgICAg
bG9jYWwgcCA9ICQoZ0JVSUxEX1BST1BFUlRJRVMpIDsNCiAgICAgICAgc2VncmVnYXRlLWZy
ZWUtcHJvcGVydGllcyBwIDsNCg0KICAgICAgICAjIGdlbmVyYXRlIGxpYnJhcnkgYnVpbGQg
aW5zdHJ1Y3Rpb25zDQogICAgICAgIGxvY2FsIEJVSUxEID0gJChCVUlMRCkgOw0KICAgICAg
ICBCVUlMRCA/PSAkKGdUQVJHRVRfREVGQVVMVF9CVUlMRCgkKG1haW4tdGFyZ2V0KSkpIDsN
CiAgICAgICAgDQogICAgICAgIGZvciB0IGluIHN0YXRpYyBzaGFyZWQNCiAgICAgICAgew0K
ICAgICAgICAgICAgbG9jYWwgbGliLW1haW4tdGFyZ2V0cyA9IFsgZ2V0LXZhbHVlcyA8JCgk
KHQ6VSlfVFlQRVMpPiA6ICQoZGVwZW5kZW5jaWVzKSBdIDsNCiAgICAgICAgICAgIA0KICAg
ICAgICAgICAgbG9jYWwgbGliLXRhcmdldHMNCiAgICAgICAgICAgICAgPSBbIGxpbmstbGli
cmFyaWVzICQobGliLW1haW4tdGFyZ2V0cykNCiAgICAgICAgICAgICAgICAgIDogJChnQ1VS
UkVOVF9UT09MU0VUKSAkKHZhcmlhbnQpIDogJChwKQ0KICAgICAgICAgICAgICAgIF0gOw0K
ICAgICAgICAgICAgZGVwZW5kLW9uLSQodCkgJChzdWJ2YXJpYW50LXRhcmdldHMpIDogJChs
aWItdGFyZ2V0cykgOw0KICAgICAgICB9DQogICAgfQ0KfQ0KDQojIEdpdmVuIG1haW4tdGFy
Z2V0LCBhIG1haW4gdGFyZ2V0IG5hbWUgZ3Jpc3RlZCB3aXRoICQoU09VUkNFX0dSSVNUKSwg
Z2VuZXJhdGUgYnVpbGQNCiMgaW5zdHJ1Y3Rpb25zIGZvciBhIHN1YnZhcmlhbnQgdGFyZ2V0
IHVzaW5nIHRoZSBnaXZlbiB0b29sc2V0LCB2YXJpYW50LCBldGMuDQojDQojIFJFVFVSTlM6
IHRoZSBhIGxpc3Qgb2YgdGFyZ2V0IG5hbWVzIGZvciB0aGUgZmlsZXMgYnVpbHQgYnkgdGhl
IHN1YnZhcmlhbnQuIElmDQojIHRoZSBtYWluLXRhcmdldCBpcyBhIGxpYnJhcnksIHRoZSBm
aXJzdCBmaWxlbmFtZSBpcyB0aGUgb25lIHRoYXQgc2hvdWxkIGJlIGxpbmtlZA0KIyBpbnRv
IGEgZGVwZW5kZW50IHRhcmdldC4NCnJ1bGUgc3VidmFyaWFudC10YXJnZXQgKCBtYWluLXRh
cmdldCA6IHN1YnZhcmlhbnQtaWQgYnVpbGQtcHJvcGVydGllcyAqIDogdG9vbHNldCB2YXJp
YW50ICkNCnsNCiAgIyBTT1VSQ0VfR1JJU1QgaWRlbnRpZmllcyB0aGUgc3VicHJvamVjdCBk
aXJlY3Rvcnk7IFRBUkdFVF9HUklTVCB3aWxsIGlkZW50aWZ5DQogICMgdGhlIHRhcmdldCBh
bmQgc3VidmFyaWFudCwgc2luY2UgdW5pcXVlIHZlcnNpb25zIG9mIGZpbGVzIHdpbGwgYmUg
YnVpbHQgZm9yDQogICMgdGhhdCBjb21iaW5hdGlvbi4NCiAgbG9jYWwgcHJvcGVydHktdGFn
cyA9IFsgZ2V0LXRhZy1mZWF0dXJlcyAkKHZhcmlhbnQpIDogJChidWlsZC1wcm9wZXJ0aWVz
KSBdIDsNCiAgbG9jYWwgdGFncyA9IFsgZ2V0LXByb3BlcnRpZXMgPHRhZz4gOiAkKGdJTVBP
U0VEX1JFUVVJUkVNRU5UUygkKG1haW4tdGFyZ2V0KSkpIF0gJChwcm9wZXJ0eS10YWdzKSA7
DQogIGxvY2FsIFRBUkdFVF9HUklTVCA9IFsgam9pbi1wYXRoICQoU09VUkNFX0dSSVNUKSAk
KG1haW4tdGFyZ2V0Okc9KSAkKHN1YnZhcmlhbnQtaWQpIF0gOw0KICBsb2NhbCBzdWJ2YXJp
YW50ID0gJChtYWluLXRhcmdldDpHPSQoVEFSR0VUX0dSSVNUKSkgOw0KDQogICMgS2VlcCB0
cmFjayBvZiB0aGUgZ2VuZXJhdGVkIHRhcmdldHMuDQogIGlmICEgJChUQVJHRVRfR1JJU1Qp
IGluICQoZ0RFQ0xBUkVEX1RBUkdFVFMpDQogIHsNCiAgICBnREVDTEFSRURfVEFSR0VUUyAr
PSAkKFRBUkdFVF9HUklTVCkgOw0KICB9DQoNCiAgIyBNYWtlIHN1cmUgd2Uga25vdyBob3cg
dG8gZ2VuZXJhdGUgdGhlc2UgdHlwZXMgb2YgdGFyZ2V0cy4NCiAgbG9jYWwgdGFyZ2V0LXR5
cGUgPSAkKGdUQVJHRVRfVFlQRSgkKG1haW4tdGFyZ2V0KSkpIDsNCiAgaWYgISAkKHRhcmdl
dC10eXBlKQ0KICB7DQogICAgICBFWElUIHVua25vd24gdGFyZ2V0IHR5cGUgZm9yICQobWFp
bi10YXJnZXQpIDsNCiAgfQ0KICANCiAgZ1RBUkdFVF9UWVBFKCQoc3VidmFyaWFudCkpID0g
JCh0YXJnZXQtdHlwZSkgOw0KICANCiAgIyBMT0NBVEVfVEFSR0VUIGFmZmVjdHMgd2hlcmUg
YnVpbHQgdGFyZ2V0cyBhcmUgZ2VuZXJhdGVkLiBXZSBtb3ZlIGl0DQogICMgcmVsYXRpdmUg
dG8gdGhlIGRlZmF1bHQgbG9jYXRpb24gYmFzZWQgb24gdGhlIHN1YnZhcmlhbnQgDQogIGxv
Y2FsIExPQ0FURV9UQVJHRVQNCiAgICA9IFsgam9pbi1wYXRoICQoTE9DQVRFX1RBUkdFVCkg
JChtYWluLXRhcmdldDpHPSkgJChzdWJ2YXJpYW50LWlkKSBdIDsNCg0KICAjIFRoZSByZW5h
bWVkIGJhc2UgbmFtZSBvZiB0aGUgdGFyZ2V0LiBPbmx5IGNvbnNpZGVycyB0aGUgdGFncyBk
ZWZpbmVkIGRpcmVjdGx5DQogICMgb24gdGhlIHRhcmdldC4NCiAgaWYgJChnVEFSR0VUX05B
TUUoJChtYWluLXRhcmdldCkpKQ0KICB7DQogICAgZ1RBUkdFVF9CQVNFTkFNRSgkKG1haW4t
dGFyZ2V0KSkgPQ0KICAgICAgWyByZW5hbWUtdGFyZ2V0ICQoZ1RBUkdFVF9OQU1FKCQobWFp
bi10YXJnZXQpKSkgOiBbIHNwbGl0LXBhdGggWyB1bmdyaXN0ICQoc3VidmFyaWFudDpHKSBd
IF0gOiAkKHByb3BlcnR5LXRhZ3MpIF0gOw0KICB9DQoNCiAgIyBGaXJzdCBvcmRlciBuYW1l
cyBoYXZlIHRoZSBzdWZmaXgsIGlmIGFueSBhY2NvcmRpbmcgdG8gdGhlIHBsYXRmb3JtLg0K
ICBsb2NhbCB0YXJnZXQtZmlsZXMgPSBbIEZBcHBlbmRTdWZmaXggJChzdWJ2YXJpYW50KSA6
ICQoU1VGJCh0YXJnZXQtdHlwZSkpIF0gOw0KICAjIFNlY29uZCBvcmRlciBuYW1lcyBoYXZl
IGFueSB0YWdzIGFzIGltcG9zZWQgZnJvbSBzdGFnZSB0YXJnZXQgY29udGV4dHMuDQogIHRh
cmdldC1maWxlcyA9IFsgcmVuYW1lLXRhcmdldCAkKHRhcmdldC1maWxlcykgOiBbIHNwbGl0
LXBhdGggWyB1bmdyaXN0ICQoc3VidmFyaWFudDpHKSBdIF0gOiAkKHRhZ3MpIF0gOw0KICAj
IFRoaXJkIG9yZGVyIG5hbWVzIGFyZSBjdXN0b21pemVkIGFzIGRldGVybWluZWQgYnkgYSBy
ZW5hbWUgcnVsZSBvbiB0aGUgdGFyZ2V0IHR5cGUuDQogIGlmICQoZ05BTUVfQURKVVNUKCQo
dGFyZ2V0LXR5cGUpKSkNCiAgew0KICAgIHRhcmdldC1maWxlcyA9IFsNCiAgICAgICQoZ05B
TUVfQURKVVNUKCQodGFyZ2V0LXR5cGUpKSkgJCh0YXJnZXQtZmlsZXMpDQogICAgICA6ICQo
c3VidmFyaWFudC1pZCkgJChidWlsZC1wcm9wZXJ0aWVzKQ0KICAgICAgOiAkKHRvb2xzZXQp
ICQodmFyaWFudCkgXSA7DQogIH0NCg0KICAjIERvIG5vdGhpbmcgaWYgd2UgYWxyZWFkeSBo
YXZlIHRoZSBidWlsZCBpbnN0cnVjdGlvbnMgZm9yIHRoZSBzcGVjaWZpYw0KICAjIHRhcmdl
dCBmaWxlcyBvZiB0aGlzIHN1YnZhcmlhbnQgdGFyZ2V0Lg0KICBpZiAhICQodGFyZ2V0LWZp
bGVzKSBpbiAkKGdUQVJHRVRfRklMRVMoJChtYWluLXRhcmdldCkpKQ0KICB7DQogICAgZ1RB
UkdFVF9TVUJWQVJJQU5UKCQodGFyZ2V0LWZpbGVzKSkgPSAkKG1haW4tdGFyZ2V0KSA7DQog
ICAgDQogICAgIyMjZ1RBUkdFVF9GSUxFUygkKHN1YnZhcmlhbnQpKSA9ICQodGFyZ2V0LWZp
bGVzKSA7DQogICAgZ1RBUkdFVF9GSUxFUygkKG1haW4tdGFyZ2V0KSkgKz0gJCh0YXJnZXQt
ZmlsZXMpIDsNCg0KICAgICMgUmVtZW1iZXIgdGhlIHBhdGggZnJvbSB0aGUgYnVpbGQgcm9v
dCB0byB0aGUgc3VidmFyaWFudCBkaXJlY3RvcnkNCiAgICBnU1VCVkFSSUFOVF9QQVRIKCQo
c3VidmFyaWFudCkpID0gJChzdWJ2YXJpYW50LWlkKSA7DQogICAgDQogICAgIyBBZGQgdGFy
Z2V0IHN1cHByZXNzaW9uIGlmIDxzdXBwcmVzcz4gd2FzIGluIHRoZSByZXF1aXJlbWVudHMN
CiAgICBsb2NhbCBnU1VQUFJFU1NfRkFLRV9UQVJHRVRTID0gWyBnZXQtdmFsdWVzIDxzdXBw
cmVzcz4gOiAkKGdUQVJHRVRfUkVRVUlSRU1FTlRTKCQobWFpbi10YXJnZXQpKSkgXSAkKGdT
VVBQUkVTU19GQUtFX1RBUkdFVFMpIDsNCg0KICAgIGRlY2xhcmUtZmFrZS10YXJnZXRzICQo
bWFpbi10YXJnZXQpIDogJCh0YXJnZXQtZmlsZXMpIDsNCg0KICAgICMgc2V0IHVwIGdCVUlM
RF9QUk9QRVJUSUVTIGZvciBpbmNsdWRlLXRvb2xzIChiZWxvdykNCiAgICBsb2NhbCBnQlVJ
TERfUFJPUEVSVElFUyA9ICQoYnVpbGQtcHJvcGVydGllcykgOw0KDQogICAgIyBJbmNsdWRl
IHRoZSB0b29sc2V0IHNwZWNpZmljYXRpb24uIFRoaXMgd2lsbCBzZXQgdXAgdGhlIGdsb2Jh
bCBmbGFncw0KICAgICMgdmFyaWFibGVzIGluIGEgd2F5IGFwcHJvcHJpYXRlIHRvIHRoaXMg
YnVpbGQuIA0KICAgIA0KICAgIGluY2x1ZGUtdG9vbHMgJCh0b29sc2V0KSA7DQoNCiAgICAj
IGhlYWRlcnMgc2hvdWxkIGJlIGlkZW50aWZpZWQgc3BlY2lmaWMgdG8gdGhlIHRhcmdldCwg
c2luY2Ugc2VhcmNoIHBhdGhzDQogICAgIyBtYXkgZGlmZmVyIGZvciBkaWZmZXJlbnQgc3Vi
dmFyaWFudHMuIFRoZSBzYW1lIGhlYWRlciBuYW1lIG9yIHJlbGF0aXZlDQogICAgIyBwYXRo
IG1heSByZWZlciB0byBkaWZmZXJlbnQgZmlsZXMuDQogICAgbG9jYWwgSERSR1JJU1QgPSBb
IGpvaW4gJChTT1VSQ0VfR1JJU1QpICQoU1RESERSUykgJChTWVNIRFJTKSAkKEhEUlMpICIi
IDogIiMiIF0gOw0KICAgIA0KICAgICMgdHJhbnNmZXIgdGFyZ2V0IHZhcmlhYmxlcyB0byB0
aGUgdGFyZ2V0IGZpbGUuDQogICAgc2V0LXRhcmdldC12YXJpYWJsZXMgJCh0YXJnZXQtZmls
ZXMpIDsNCg0KICAgIGxvY2FsIGRlcGVuZGVuY2llcw0KICAgICAgICA9IFsgZ2V0LXZhbHVl
cyA8JChTVEFUSUNfVFlQRVMpPiA8JChTSEFSRURfVFlQRVMpPiANCiAgICAgICAgICA6ICQo
Z1RBUkdFVF9ERVBTKCQobWFpbi10YXJnZXQpKSkNCiAgICAgICAgXSA7DQogICAgICANCiAg
ICBpZiAkKGRlcGVuZGVuY2llcykNCiAgICB7DQogICAgICAgICMgaW5jbHVkZSBlYWNoIGph
bWZpbGUgZGVzY3JpYmluZyBhIGRlcGVuZGVlIHRhcmdldC4NCiAgICAgICAgZGVwZW5kZW50
LWluY2x1ZGUgJChkZXBlbmRlbmNpZXMpIDsNCiAgICAgICAgZ2VuZXJhdGUtZGVwZW5kZW5j
aWVzICQobWFpbi10YXJnZXQpIDogJCh0YXJnZXQtZmlsZXMpIDsNCiAgICB9DQogICAgDQog
ICAgbG9jYWwgZ2VuZXJhdG9yID0gJChnR0VORVJBVE9SX0ZVTkNUSU9OKCQodGFyZ2V0LXR5
cGUpKSkgOw0KICAgIGxvY2FsIHNvdXJjZXMgPSAkKGdUQVJHRVRfU09VUkNFUygkKG1haW4t
dGFyZ2V0KSkpIDsNCiAgICAkKGdlbmVyYXRvcikgJCh0YXJnZXQtZmlsZXMpIDogJChzb3Vy
Y2VzKSA7DQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAkKGdUQVJHRVRfVkFSSUFC
TEVTKSA9IDsgIyBCZSBzdXJlIHRoYXQgd2UgZG9uJ3QgbWFzayBidWdzIHdpdGggbGluZ2Vy
aW5nIHRhcmdldCB2YXJpYWJsZXMNCiAgfQ0KICByZXR1cm4gJCh0YXJnZXQtZmlsZXMpIDsN
Cn0NCg0KIyBHZW5lcmF0ZSB0aGUgZXhwYW5kZWQgc3VidmFyaWFudHMgb2YgYSB0YXJnZXQu
DQojDQpydWxlIGV4cGFuZC10YXJnZXQtc3VidmFyaWFudHMgKCB0YXJnZXQgOiBsb2NhbC1i
dWlsZCAqIDogdG9vbHMgKyA6ICkNCnsNCiAgICBsb2NhbCBCVUlMRCA9IFsgZ2V0LUJVSUxE
ICQobG9jYWwtYnVpbGQpIF0gOw0KICAgIGxvY2FsIHZhcmlhbnRzID0gWyBzZWxlY3QtdW5n
cmlzdGVkICQoQlVJTEQpIF0gOw0KICAgIGxvY2FsIGJ1aWxkLXJlcXVlc3QgPSBbIGRpZmZl
cmVuY2UgJChCVUlMRCkgOiAkKHZhcmlhbnRzKSBdIDsNCg0KICAgIGxvY2FsIHN1YnZhcmlh
bnRzID0gOw0KICAgIGZvciBsb2NhbCB0b29sc2V0IGluICQodG9vbHMpDQogICAgew0KICAg
ICAgICBmb3IgbG9jYWwgdmFyaWFudCBpbiAkKHZhcmlhbnRzKQ0KICAgICAgICB7DQogICAg
ICAgICAgICBsb2NhbCBydWxlcyA9IFsgc2VsZWN0LXVuZ3Jpc3RlZA0KICAgICAgICAgICAg
ICAgICQoZ1RBUkdFVF9SRVFVSVJFTUVOVFMoJCh0YXJnZXQpKSkNCiAgICAgICAgICAgICAg
ICAkKGdJTVBPU0VEX1JFUVVJUkVNRU5UUygkKHRhcmdldCkpKSBdIDsNCiAgICAgICAgICAg
IGxvY2FsIHJlcXVpcmVtZW50cyA9IFsgc2VsZWN0LWdyaXN0ZWQNCiAgICAgICAgICAgICAg
ICAkKGdUQVJHRVRfUkVRVUlSRU1FTlRTKCQodGFyZ2V0KSkpDQogICAgICAgICAgICAgICAg
JChnSU1QT1NFRF9SRVFVSVJFTUVOVFMoJCh0YXJnZXQpKSkgXSA7DQogICAgICAgICAgICAN
CiAgICAgICAgICAgIGxvY2FsIGV4cGFuZGVkDQogICAgICAgICAgICAgICAgPSBbIGV4cGFu
ZC1idWlsZC1yZXF1ZXN0ICQodG9vbHNldCkgJCh2YXJpYW50KSAkKHRhcmdldCkNCiAgICAg
ICAgICAgICAgICAgICAgOiAkKHJlcXVpcmVtZW50cykgOiAkKGJ1aWxkLXJlcXVlc3QpIF0g
Ow0KICAgICAgICAgICAgDQogICAgICAgICAgICBsb2NhbCBnTk9XQVJOX0lOQ09NUEFUSUJM
RV9CVUlMRFMgPSBUUlVFIDsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgZm9yIGxvY2Fs
IGluc3RhbmNlIGluICQoZXhwYW5kZWQpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAg
ICAgbG9jYWwgcHJvcGVydGllcyA9IFsgc3BsaXQtcGF0aC1hdC1ncmlzdCAkKGluc3RhbmNl
KSBdIDsNCiAgICAgICAgICAgICAgICBmb3IgbG9jYWwgciBpbiAkKHJ1bGVzKQ0KICAgICAg
ICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcyA9IFsgJChyKSAk
KHRvb2xzZXQpICQodmFyaWFudCkgOiAkKHByb3BlcnRpZXMpIF0gOw0KICAgICAgICAgICAg
ICAgIH0NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBpZiAhICggPGJ1aWxk
Pm5vIGluICQocHJvcGVydGllcykgKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAg
ICAgICAgICAgIyB0aGUgcnVsZXMgbWF5IGhhdmUgbW9kaWZpZWQgdGhlIGJ1aWxkIHJlcXVl
c3QsIHJlY29uc3RydWN0IGl0DQogICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMgPSBb
IGV4cGFuZC1idWlsZC1yZXF1ZXN0ICQodG9vbHNldCkgJCh2YXJpYW50KSAkKHRhcmdldCkN
CiAgICAgICAgICAgICAgICAgICAgICA6ICQocHJvcGVydGllc1syLV0pIDogJChidWlsZC1y
ZXF1ZXN0KSBdIDsNCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAg
IHN1YnZhcmlhbnRzICs9ICQodGFyZ2V0KXwkKHByb3BlcnRpZXMpfCQodG9vbHNldCl8JCh2
YXJpYW50KSA7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGVsc2UgaWYg
LS1kdW1wLXVuYnVpbHQNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAg
IEVDSE8gKioqKiBza2lwcGluZyBidWlsZCBvZiAkKHRhcmdldCk7IHRvb2xzZXQ9ICQodG9v
bHNldCkgdmFyaWFudD0gJCh2YXJpYW50KSAqKioqIDsNCiAgICAgICAgICAgICAgICB9DQog
ICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQogICAgcmV0dXJuIFsgdW5pcXVlICQo
c3VidmFyaWFudHMpIF0gOw0KfQ0KDQojIEdpdmVuIGFuIGV4cGFuZGVkIHN1YnZhcmlhbnQg
b2YgYSB0ZXJnZXQsIHNldHMgdGhlIHZhcmlvdXMgdmFyaWFibGVzIGFjY29yZGluZ2x5Lg0K
Iw0KcnVsZSBzcGxpdC10YXJnZXQtc3VidmFyaWFudCAoIHRhcmdldC12YXIgcHJvcGVydGll
cy12YXIgdG9vbHNldC12YXIgdmFyaWFudC12YXIgOiBzdWJ2YXJpYW50ICkNCnsNCiAgICBs
b2NhbCBzdWJ2YXJpYW50LWl0ZW1zID0gWyBNQVRDSCAoLiopW3xdKC4qKVt8XSguKilbfF0o
LiopIDogJChzdWJ2YXJpYW50KSBdIDsNCiAgICAkKHRhcmdldC12YXIpID0gJChzdWJ2YXJp
YW50LWl0ZW1zWzFdKSA7DQogICAgJChwcm9wZXJ0aWVzLXZhcikgPSBbIHNwbGl0LXBhdGgt
YXQtZ3Jpc3QgJChzdWJ2YXJpYW50LWl0ZW1zWzJdKSBdIDsNCiAgICAkKHRvb2xzZXQtdmFy
KSA9ICQoc3VidmFyaWFudC1pdGVtc1szXSkgOw0KICAgICQodmFyaWFudC12YXIpID0gJChz
dWJ2YXJpYW50LWl0ZW1zWzRdKSA7DQogICAgcmV0dXJuICQoKHRhcmdldC12YXIpKSA7DQp9
DQoNCiMgbWFpbi10YXJnZXQgdGFyZ2V0IDogbG9jYWwtYnVpbGQNCiMNCiMgR2VuZXJhdGVz
IHJlcXVlc3RlZCBzdWJ2YXJpYW50IGJ1aWxkIGluc3RydWN0aW9ucyBmb3IgdGhlIGdpdmVu
IG1haW4gdGFyZ2V0DQpydWxlIG1haW4tdGFyZ2V0DQp7DQogICAgbG9jYWwgc3VidmFyaWFu
dHMgPSBbIGV4cGFuZC10YXJnZXQtc3VidmFyaWFudHMgJCg8KSA6ICQoPikgOiAkKFRPT0xT
KSBdIDsNCg0KICAgICMgaW5jbHVkZSBlYWNoIGphbWZpbGUgZGVzY3JpYmluZyBhIGRlcGVu
ZGVlIHRhcmdldC4NCiAgICBkZXBlbmRlbnQtaW5jbHVkZSBbIGdldC12YWx1ZXMgPCQoU1RB
VElDX1RZUEVTKT4gPCQoU0hBUkVEX1RZUEVTKT4gOiAkKGdUQVJHRVRfREVQUygkKDwpKSkg
XSA7DQoNCiAgICBmb3IgbG9jYWwgc3VidmFyaWFudCBpbiAkKHN1YnZhcmlhbnRzKQ0KICAg
IHsNCiAgICAgICAgbG9jYWwgdGFyZ2V0ID0gOw0KICAgICAgICBsb2NhbCBwcm9wZXJ0aWVz
ID0gOw0KICAgICAgICBsb2NhbCB0b29sc2V0ID0gOw0KICAgICAgICBsb2NhbCB2YXJpYW50
ID0gOw0KICAgICAgICBzcGxpdC10YXJnZXQtc3VidmFyaWFudCB0YXJnZXQgcHJvcGVydGll
cyB0b29sc2V0IHZhcmlhbnQgOiAkKHN1YnZhcmlhbnQpIDsNCiAgICAgICAgc3VidmFyaWFu
dC10YXJnZXQgJCh0YXJnZXQpIDogJChwcm9wZXJ0aWVzKSA6ICQodG9vbHNldCkgJCh2YXJp
YW50KSA7DQogICAgfQ0KfQ0KDQojIERlY2xhcmUgYW4gZXhlY3V0YWJsZSB0YXJnZXQuDQoj
DQpnVEFSR0VUX1RZUEVfSUQoZXhlKSA9IEVYRSA7DQpnR0VORVJBVE9SX0ZVTkNUSU9OKEVY
RSkgPSBleGVjdXRhYmxlLWZpbGUgOw0KcnVsZSBleGUgKCB0YXJnZXQgOiBzb3VyY2VzICsg
OiByZXF1aXJlbWVudHMgKiA6IGRlZmF1bHQtYnVpbGQgKiApDQp7DQogICAgZGVjbGFyZS1s
b2NhbC10YXJnZXQgJCh0YXJnZXQpIDogJChzb3VyY2VzKSA6ICQocmVxdWlyZW1lbnRzKSA6
ICQoZGVmYXVsdC1idWlsZCkgOiBFWEUgOw0KfQ0KDQojIERlY2xhcmUgYSBzaGFyZWQgbGli
cmFyeSB0YXJnZXQuDQojDQpnVEFSR0VUX1RZUEVfSUQoZGxsKSA9IERMTCA7DQpnR0VORVJB
VE9SX0ZVTkNUSU9OKERMTCkgPSBkbGwtZmlsZXMgOw0KZ0lTX0RFUEVOREVOQ1koRExMKSA9
IFRSVUUgOw0KcnVsZSBkbGwgKCB0YXJnZXQgOiBzb3VyY2VzICsgOiByZXF1aXJlbWVudHMg
KiA6IGRlZmF1bHQtYnVpbGQgKiApDQp7DQogICAgaWYgJChKQU1VTkFNRVsxXSkgPSBPcGVu
QlNEDQogICAgew0KICAgICAgICBpZiAhIFsgZ2V0LXZhbHVlcyA8ZGxsdmVyc2lvbj4gOiAk
KHJlcXVpcmVtZW50cykgXQ0KICAgICAgICB7DQogICAgICAgICAgICByZXF1aXJlbWVudHMg
Kz0gPGRsbHZlcnNpb24+MC4wIDsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBkZWNsYXJlLWxv
Y2FsLXRhcmdldCAkKHRhcmdldCkgOiAkKHNvdXJjZXMpIDogJChyZXF1aXJlbWVudHMpIDog
JChkZWZhdWx0LWJ1aWxkKSA6IERMTCA7DQp9DQoNCiMgRGVjbGFyZSBhIHN0YXRpY2FsbHkt
bGlua2VkIGxpYnJhcnkgdGFyZ2V0Lg0KIw0KZ1RBUkdFVF9UWVBFX0lEKGxpYikgPSBMSUIg
Ow0KZ0dFTkVSQVRPUl9GVU5DVElPTihMSUIpID0gbGlicmFyeS1maWxlIDsNCmdJU19ERVBF
TkRFTkNZKExJQikgPSBUUlVFIDsNCnJ1bGUgbGliICggdGFyZ2V0IDogc291cmNlcyArIDog
cmVxdWlyZW1lbnRzICogOiBkZWZhdWx0LWJ1aWxkICogKQ0Kew0KICAgIGRlY2xhcmUtbG9j
YWwtdGFyZ2V0ICQodGFyZ2V0KSA6ICQoc291cmNlcykgOiAkKHJlcXVpcmVtZW50cykgOiAk
KGRlZmF1bHQtYnVpbGQpIDogTElCIDsNCn0NCg0KIyBEZWNsYXJlIGEgdGVtcGxhdGUgdGFy
Z2V0IGZvciBvdGhlciB0YXJnZXRzLiBUaGlzIGlzIGEgbW9kaWZpZXIgb25seS4gSXQNCiMg
QWRkcyB0aGUgc3BlY3Mgc3BlY2lmaWVkIGhlcmUgdG8gYW55IG90aGVyIHRhcmdldCBpdCdz
IGEgZGVwZW5kZWUgb2YuDQojDQpnVEFSR0VUX1RZUEVfSUQodGVtcGxhdGUpID0gVEVNUExB
VEUgOw0KZ01PRElGSUVSX0ZVTkNUSU9OKFRFTVBMQVRFKSA9IHRlbXBsYXRlLW1vZGlmaWVy
IDsNCmdJU19ERVBFTkRFTkNZKFRFTVBMQVRFKSA9IFRSVUUgOw0KZ05PX1RBUkdFVF9UWVBF
X1JFUVVJUkVNRU5UKFRFTVBMQVRFKSA9IFRSVUUgOw0KcnVsZSB0ZW1wbGF0ZSAoIHRhcmdl
dCA6IHNvdXJjZXMgKiA6IHJlcXVpcmVtZW50cyAqIDogZGVmYXVsdC1idWlsZCAqICkNCnsN
CiAgICBkZWNsYXJlLWxvY2FsLXRhcmdldCAkKHRhcmdldCkgOiAkKHNvdXJjZXMpIDogJChy
ZXF1aXJlbWVudHMpIDogJChkZWZhdWx0LWJ1aWxkKSA6IFRFTVBMQVRFIDsNCn0NCg0KIyBE
ZWNsYXJlIGFuIGV4ZWN1dGFibGUgdGFyZ2V0LCB0byBiZSBydW4gYnkgdGVzdHMuDQpydWxl
IHVuaXQtdGVzdCAoIHRhcmdldCArICA6IHNvdXJjZXMgKyA6IHJlcXVpcmVtZW50cyAqIDog
ZGVmYXVsdC1idWlsZCAqIDogY21kLWxpbmUgKiApDQp7DQogICAgaWYgISAkKC50ZXN0aW5n
LmphbS1pbmNsdWRlZCkNCiAgICB7DQogICAgICAgIFNFQVJDSCBvbiB0ZXN0aW5nLmphbSA9
ICQoQk9PU1RfQlVJTERfUEFUSCkgOw0KICAgICAgICBpbmNsdWRlIHRlc3RpbmcuamFtIDsN
CiAgICB9DQogICAgDQogICAgREVQRU5EUyBhbGwNCiAgICAgIDogWyBydW4gJChzb3VyY2Vz
KQ0KICAgICAgICAgIDogJChjbWQtbGluZSkNCiAgICAgICAgICA6ICMgaW5wdXQtZmlsZXMN
CiAgICAgICAgICA6ICQocmVxdWlyZW1lbnRzKQ0KICAgICAgICAgIDogJCh0YXJnZXQpDQog
ICAgICAgICAgOiAkKGRlZmF1bHQtYnVpbGQpDQogICAgICAgIF0NCiAgICAgIDsNCn0NCg0K
IyBVc2VkIHRvIGJ1aWxkIGNvbW1hbmQgZmlsZXMgZnJvbSBhIGxpc3Qgb2Ygc291cmNlcy4N
CnJ1bGUgYnVpbGQtY29tbWFuZC1maWxlICggY29tbWFuZCA6IHNvdXJjZXMgKiA6IHByZWZp
eCA/IGxpbmUtYnJlYWsgPyApDQp7DQogICAgIyBDbGVhbiB1cCBhZnRlciBvdXJzZWx2ZXMN
CiAgICBDbGVhbiBjbGVhbiA6ICQoY29tbWFuZCkgOw0KICAgIA0KICAgIERFUEVORFMgJChj
b21tYW5kKSA6ICQoc291cmNlcykgOw0KICAgIA0KICAgIFBSRUZJWCBvbiAkKGNvbW1hbmQp
ID0gJChwcmVmaXg6RT0pIDsNCiAgICANCiAgICBsb2NhbCAnIF8gID0gIiIgOw0KICAgIA0K
ICAgIGlmICEgJChOVCkNCiAgICB7DQogICAgICAgICcgPSAnIDsNCiAgICAgICAgXyA9ICIg
IiA7DQogICAgfQ0KICAgICAgICANCiAgICAnIG9uICQoY29tbWFuZCkgPSAkKCcpIDsNCiAg
ICBfIG9uICQoY29tbWFuZCkgPSAkKF8pIDsNCiAgICANCiAgICBFT0wgb24gJChjb21tYW5k
KSA9IFwiJChsaW5lLWJyZWFrOkU9KSQoJykkKF8pPj4kKF8pXCIgOw0KICAgIEJPTCBvbiAk
KGNvbW1hbmQpID0gIlwiDQplY2hvICQoJykkKHByZWZpeDpFPSlcIiIgOw0KICAgIA0KICAg
ICMgQ2hlY2sgd2hldGhlciB0aGVyZSdzIGFueXRoaW5nIHRvIGR1bXAsIHNvIHRoYXQgd2Ug
ZG9uJ3QgZW5kIHVwDQogICAgIyBleGVjdXRpbmcgYSBsaW5lIG9mIHRoZSBmb3JtOg0KICAg
ICMNCiAgICAjICAgIGVjaG8gPj4gZmlsZS5DTUQNCiAgICAjDQogICAgIyBvbiBXaW5kb3dz
IHRoaXMgd3JpdGVzICJlY2hvIGlzIG9uLiIgaW50byB0aGUgY29tbWFuZC1maWxlLA0KICAg
ICMgd2hpY2ggdGhlbiBicmVha3MgdGhlIGxpbmsuDQogICAgDQogICAgaWYgJChzb3VyY2Vz
KQ0KICAgIHsNCiAgICAgICAgIyBIYW5kbGUgdGhlIGZpcnN0IHRhcmdldCBzcGVjaWFsbHks
IHNvIHRoYXQgdGhlIGZpcnN0IHNvdXJjZSBmaWxlDQogICAgICAgICMgd2lsbCBjbGVhciB0
aGUgY29tbWFuZCBmaWxlDQogICAgICAgIGNvbW1hbmQtZmlsZS1kdW1wICQoY29tbWFuZCkg
OiAkKHNvdXJjZXMpIDsNCiAgICB9ICAgIA0KfQ0KDQojIFF1aWV0bHkgZGVsZXRlICQoeCkg
aWYgaXQgZXhpc3RzIHdpdGggJChSTTEpIiQoeCkiICANCmlmICQoTlQpDQp7DQogICAgUk0x
ID0gIklGIEVYSVNUICIgIkRFTCAiIDsNCn0NCmVsc2UNCnsNCiAgICBSTTEgPSAiJChSTSkg
IiA7DQp9DQoNCiMgQnVpbGQgdGhlIGNvbW1hbmQtZmlsZQ0KYWN0aW9ucyBxdWlldGx5IGNv
bW1hbmQtZmlsZS1kdW1wDQp7DQogICAgJChSTTEpIiQoPCkiDQogICAgZWNobyAkKCcpJChQ
UkVGSVgpIiQoPjpKPSQoRU9MKSQoPCkkKEJPTCkpIiQoJykkKF8pPj4kKF8pJCg8KQ0KfQ0K
DQojIENsZWFuIHVwIHRoZSB0ZW1wb3JhcnkgQ09NTUFORC1GSUxFIHVzZWQgdG8gYnVpbGQg
VEFSR0VUUy4NCnJ1bGUgcmVtb3ZlLWNvbW1hbmQtZmlsZSAoIHRhcmdldHMgKyA6IGNvbW1h
bmQtZmlsZSApDQp7DQogICAgVEVNUE9SQVJZICQoY29tbWFuZC1maWxlKSA7DQogICAgQ2xl
YW4gY2xlYW4gOiAkKGNvbW1hbmQtZmlsZSkgOyAjIE1hcmsgdGhlIGZpbGUgZm9yIHJlbW92
YWwgdmlhIGNsZWFuDQp9DQphY3Rpb25zIGlnbm9yZSBxdWlldGx5IHBpZWNlbWVhbCB0b2dl
dGhlciByZW1vdmUtY29tbWFuZC1maWxlDQp7DQogICAgJChSTSkgJCg+KQ0KfQ0KDQojIGJ1
aWxkIFRBUkdFVFMgZnJvbSBTT1VSQ0VTIHVzaW5nIGEgY29tbWFuZC1maWxlLCB3aGVyZSBS
VUxFLU5BTUUgaXMNCiMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgYnVpbGQgaW5zdHJ1Y3Rpb25z
IGZyb20gdGhlIGNvbW1hbmQtZmlsZSB0bw0KIyBUQVJHRVRTDQpydWxlIHdpdGgtY29tbWFu
ZC1maWxlICggcnVsZS1uYW1lIHRhcmdldHMgKiA6IHNvdXJjZXMgKiA6IHByZWZpeCA/IGxp
bmUtYnJlYWsgPyApDQp7DQogICAgIyBjcmVhdGUgYSBjb21tYW5kLWZpbGUgdGFyZ2V0IGFu
ZCBwbGFjZSBpdCB3aGVyZSB0aGUgZmlyc3QgdGFyZ2V0DQogICAgIyB3aWxsIGJlIGJ1aWx0
DQogICAgbG9jYWwgY29tbWFuZC1maWxlID0gJCh0YXJnZXRzWzFdOlM9LkNNRCkgOw0KICAg
IExPQ0FURSBvbiAkKGNvbW1hbmQtZmlsZSkgPSAkKGdMT0NBVEUoJCh0YXJnZXRzWzFdKSkp
IDsNCiAgICBidWlsZC1jb21tYW5kLWZpbGUgJChjb21tYW5kLWZpbGUpIDogJChzb3VyY2Vz
KSA6ICQocHJlZml4KSAkKGxpbmUtYnJlYWspIDsNCg0KICAgICMgQnVpbGQgdGhlIHRhcmdl
dHMgZnJvbSB0aGUgY29tbWFuZC1maWxlIGluc3RlYWQgb2YgdGhlIHNvdXJjZXMNCiAgICBE
RVBFTkRTICQodGFyZ2V0cykgOiAkKGNvbW1hbmQtZmlsZSkgOw0KICAgIGxvY2FsIHJlc3Vs
dCA9IFsgJChydWxlLW5hbWUpICQodGFyZ2V0cykgOiAkKGNvbW1hbmQtZmlsZSkgXSA7DQoN
CiAgICAjIGNsZWFuIHVwIGFmdGVyd2FyZHMNCiAgICAjIENhbid0IHJlYWxseSBkbyB0aGlz
IHVudGlsIDxmaW5kLWxpYnJhcnk+IGFyZ3VtZW50cyBhcmUgYWNjb3VudGVkIGZvci4NCiAg
ICAjIHJlbW92ZS1jb21tYW5kLWZpbGUgJCh0YXJnZXRzKSA6ICQoY29tbWFuZC1maWxlKSA7
DQogICAgcmV0dXJuICQocmVzdWx0KSA7DQp9DQoNClRBRyhwcmVmaXgpID0gIiIgOw0KVEFH
KHBvc3RmaXgpID0gIiIgOw0KDQojIEdJVkVOOg0KIw0KIyBBIHRhcmdldCBzdWJ2YXJpYW50
LCB0aGUgc3VidmFyaWFudCBpbmZvLCBhbmQgYSBzZXQgb2YgcmVuYW1lIHRhZ3MuDQojDQoj
IFJFU1VMVDoNCiMNCiMgVXNlcyB0aGUgcmVuYW1lIHRhZ3MsIGFuZCB0aGUgZ2xvYmFsIFRB
RyBtYXAsIHRvIGFwcGVuZCBhIHRhZyB0byB0aGUNCiMgdGFyZ2V0IGJhc2VuYW1lLiBUaGUg
bmV3IHN1YnZhcmlhbnQgdGFyZ2V0IGlzIHJldHVybmVkLiBUaGUgdGFnIGZvcg0KIyB0aGUg
dGFyZ2V0IGlzIGNvbXBvc2VkIGZyb20gdGhlIHN1YnZhcmlhbnQgaW5mbyBhbmQgdGhlIGNv
cnJlc3BvbmRpbmcNCiMgZW50cnkgaW4gdGhlIHRhZ3MuIFRoaXMgY3JlYXRlcyB0aGUgdGFn
IGluIHRoZSBvcmRlciBhcyBnaXZlbiBieSB0aGUNCiMgc3VidmFyaWFudCBpbmZvLg0KIw0K
IyBFWEFNUExFOg0KIw0KIyBbIHJlbmFtZS10YXJnZXQgPGdjYy9kZWJ1Zz5saWJ0ZXN0LnNv
IDogZ2NjIGRlYnVnIDogPHRhZz48Z2NjPl9nY2MgPHRhZz48ZGVidWc+X2RlYnVnIF0NCiMN
CiMgUkVUVVJOUzoNCiMNCiMgPGdjYy9kZWJ1Zz5saWJ0ZXN0X2djY19kZWJ1Zy5zbw0KIw0K
cnVsZSByZW5hbWUtdGFyZ2V0ICggdGFyZ2V0ICsgOiBzdWJ2YXJpYW50ICogOiB0YWdzICog
KQ0Kew0KICAgIGxvY2FsIHRhZy12YWx1ZXMgPSA7DQogICAgZm9yIGxvY2FsIHRhZyBpbiAk
KHRhZ3MpDQogICAgew0KICAgICAgICBsb2NhbCB0YWctdG9rZW5zID0gWyBNQVRDSCAoPCko
LiopKD4pKC4qKSA6ICQodGFnOkc9KSBdIDsNCiAgICAgICAgdGFnLXRva2VucyA9ICQodGFn
LXRva2Vuc1syXSkgJCh0YWctdG9rZW5zWzRdKSA7DQogICAgICAgIHRhZy12YWx1ZXMgKz0g
JCh0YWctdG9rZW5zWzJdOkc9JCh0YWctdG9rZW5zWzFdKSkgOw0KICAgIH0NCg0KICAgIGxv
Y2FsIHRhZy10ZXh0ID0gIiIgOw0KDQogICAgIyB0aGUgcHJlZml4IG9mIHRoZSB0YWcuLi4N
CiAgICAjDQogICAgbG9jYWwgcHJlZml4LXRhZyA9IFsgZ2V0LXZhbHVlcyA8cHJlZml4PiA6
ICQodGFnLXZhbHVlcykgJChUQUcocHJlZml4KTpHPXByZWZpeCkgXSA7DQogICAgdGFnLXRl
eHQgPSAkKHByZWZpeC10YWdbMV0pIDsNCg0KICAgICMgdGhlIHN1YnZhcmlhbnQgdGFncy4u
Lg0KICAgICMNCiAgICBmb3IgbG9jYWwgc3YgaW4gJChzdWJ2YXJpYW50KQ0KICAgIHsNCiAg
ICAgICAgbG9jYWwgc3YtdGFnID0gWyBnZXQtdmFsdWVzIDwkKHN2KT4gOiAkKHRhZy12YWx1
ZXMpICQoVEFHKCQoc3YpKTpHPSQoc3YpKSBdIDsNCiAgICAgICAgaWYgJChzdi10YWcpDQog
ICAgICAgIHsNCiAgICAgICAgICAgIHRhZy10ZXh0ID0gJCh0YWctdGV4dCkkKHN2LXRhZ1sx
XSkgOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgIyB0aGUgcG9zdGZpeCBvZiB0aGUgdGFn
Li4uDQogICAgIw0KICAgIGxvY2FsIHBvc3RmaXgtdGFnID0gWyBnZXQtdmFsdWVzIDxwb3N0
Zml4PiA6ICQodGFnLXZhbHVlcykgJChUQUcocG9zdGZpeCk6Rz1wb3N0Zml4KSBdIDsNCiAg
ICB0YWctdGV4dCA9ICQodGFnLXRleHQpJChwb3N0Zml4LXRhZ1sxXSkgOw0KDQogICAgbG9j
YWwgcmVuYW1lZC10YXJnZXQgPSA7DQogICAgZm9yIGxvY2FsIHQgaW4gJCh0YXJnZXQpDQog
ICAgew0KICAgICAgICBsb2NhbCBCLVMgPSBbIE1BVENIIChbXlxcLl0qKSguKikgOiAkKHQ6
Rz0pIF0gOw0KICAgICAgICBsb2NhbCBCID0gJChCLVNbMV0pIDsgQiA/PSAiIiA7DQogICAg
ICAgIGxvY2FsIFMgPSAkKEItU1syXSkgOyBTID89ICIiIDsNCiAgICAgICAgbG9jYWwgbmV3
LW5hbWUgPSAkKEIpJCh0YWctdGV4dCkkKFMpIDsgbmV3LW5hbWUgPSAkKG5ldy1uYW1lOkc9
JCh0OkcpKSA7DQogICAgICAgIHJlbmFtZWQtdGFyZ2V0ICs9ICQobmV3LW5hbWUpIDsNCiAg
ICB9DQogICAgcmV0dXJuICQocmVuYW1lZC10YXJnZXQpIDsNCn0NCg0KcnVsZSBncmlzdC10
YXJnZXRzICggdGFyZ2V0cyArIDogc3ViZGlyLXRva2VucyAqICkNCnsNCiAgICBsb2NhbCBz
dWJkaXItZ3Jpc3QgPSAiIiA7DQogICAgaWYgJChzdWJkaXItdG9rZW5zKQ0KICAgIHsNCiAg
ICAgICAgc3ViZGlyLWdyaXN0ID0gWyBGR3Jpc3QgJChzdWJkaXItdG9rZW5zKSBdIDsNCiAg
ICAgICAgaWYgJChTT1VSQ0VfR1JJU1QpDQogICAgICAgIHsNCiAgICAgICAgICAgIHN1YmRp
ci1ncmlzdCA9ICIhJChzdWJkaXItZ3Jpc3QpIiA7DQogICAgICAgIH0NCiAgICB9DQogICAg
aWYgISAkKFNPVVJDRV9HUklTVCkNCiAgICB7DQogICAgICAgIHJldHVybiAkKHRhcmdldHM6
Rz0kKHN1YmRpci1ncmlzdCkpIDsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICAg
cmV0dXJuICQodGFyZ2V0czpHPSQoU09VUkNFX0dSSVNUKSQoc3ViZGlyLWdyaXN0KSkgOw0K
ICAgIH0NCn0NCg0KIyBFWEFNUExFOg0KIw0KIyBzdGFnZSB0ZXN0LXN0YWdlDQojICAgOiA8
ZXhlPmZvby9iYXIvdGVzdDEgPGRsbD5xd2VydHkva2V5cyBkb2NzL1JFQURNRQ0KIyAgIDog
PHRhZz48cHJlZml4PiJfIiA8dGFnPjxkZWJ1Zz4iRCIgPHRhZz48cHJvZmlsZT4iUCIgPHRh
Zz48Z2NjPiJHQ0MiDQojICAgOiBkZWJ1ZyBwcm9maWxlIDxzdXBwcmVzcz50cnVlDQojICAg
Ow0KIw0KIyBQUk9EVUNFUzoNCiMNCiMgdGVzdC1zdGFnZS9saWJrZXlzX0dDQ0Quc28NCiMg
dGVzdC1zdGFnZS9saWJrZXlzX0dDQ1Auc28NCiMgdGVzdC1zdGFnZS90ZXN0MV9HQ0NEDQoj
IHRlc3Qtc3RhZ2UvdGVzdDFfR0NDUA0KIyB0ZXN0LXN0YWdlL1JFQURNRQ0KIw0KIyBJRkY6
DQojDQojICRzaGVsbD4gamFtIHRlc3Qtc3RhZ2UNCiMNCnJ1bGUgc3RhZ2UgKCBuYW1lIDog
c291cmNlcyArIDogcmVxdWlyZW1lbnRzICogOiBsb2NhbC1idWlsZCAqICkNCnsNCiAgICBp
ZiAhICQoZ0lOX0xJQl9JTkNMVURFKQ0KICAgIHsNCg0KICAgIGxvY2FsIHN0YWdlLWlkID0N
CiAgICAgICAgWyBncmlzdC10YXJnZXRzICQobmFtZSkgXSA7DQogICAgbG9jYWwgYXJjaC1z
dWJkaXJzID0gWyBnZXQtdmFsdWVzIDxhcmNoaXRlY3R1cmUtc3ViZGlycz4gOiAkKHJlcXVp
cmVtZW50cykgXSA7DQogICAgbG9jYWwgdHJlZS1yb290ID0gWyBnZXQtdmFsdWVzIDx0cmVl
LXN1YmRpcnM+IDogJChyZXF1aXJlbWVudHMpIF0gOw0KICAgIGlmICQodHJlZS1yb290KSB7
IHRyZWUtcm9vdCA9IFsgc3BsaXQtcGF0aCAkKHRyZWUtcm9vdFsxXSkgXSA7IH0NCiAgICBs
b2NhbCBsb2NhdGUgPSBbIGdldC12YWx1ZXMgPGxvY2F0ZT4gOiAkKHJlcXVpcmVtZW50cykg
XSA7DQogICAgaWYgJChsb2NhdGUpIHsgbG9jYXRlID0gWyBzcGxpdC1wYXRoICQobG9jYXRl
KSBdIDsgfQ0KICAgIGxvY2FsIGZha2UtdGFyZ2V0ID0gWyBnZXQtdmFsdWVzIDx0YXJnZXQ+
IDogJChyZXF1aXJlbWVudHMpIF0gOw0KICAgIGxvY2FsIHJlbmFtZS1ydWxlID0gWyBnZXQt
dmFsdWVzIDxyZW5hbWU+IDogJChyZXF1aXJlbWVudHMpIF0gOw0KDQogICAgIyBTdXByZXNz
IHRoZSByZWd1bGFyIGJ1aWxkIG9mIHRoaXMgdGFyZ2V0DQogICAgbG9jYWwgZ1NVUFBSRVNT
X0ZBS0VfVEFSR0VUUyA9IFsgZ2V0LXZhbHVlcyA8c3VwcHJlc3M+IDogJChsb2NhbC1idWls
ZCkgXSA7DQoNCiAgICBsb2NhbCBzdGFnZS1kaXIgPSAkKG5hbWU6Rz0pIDsNCiAgICBsb2Nh
bCBmaWxlcyA7DQogICAgbG9jYWwgZmlsZS1tb2RlIDsNCiAgICBsb2NhbCBmaWxlLXRhZ2dl
ZCA7DQogICAgbG9jYWwgZmlsZS1zdWJkaXIgOw0KDQogICAgIyBQcmV2ZW50IGJ1aWx0IG9i
amVjdCBmcm9tIGdldHRpbmcgZGVsZXRlZCBzbyB0aGF0IHdoZW4gdGFyZ2V0cyBhcmUgbGlu
a2VkDQogICAgIyBtdWx0aXBsZSB0aW1lcyB0aGV5IGFyZSBhdmFpbGFibGUuDQogICAgbG9j
YWwgS0VFUE9CSlMgPSB0cnVlIDsNCg0KICAgICMgRm9yIGVhY2ggc291cmNlLCBjb2xsZWN0
IGl0cyBpbmZvcm1hdGlvbiwgYW5kIHBvc3NpYmx5IGdlbmVyYXRlIGl0Lg0KICAgICMNCiAg
ICBmb3IgbG9jYWwgc291cmNlIGluICQoc291cmNlcykNCiAgICB7DQogICAgICAgIHNvdXJj
ZSA9IFsgc3BsaXQtcXVhbGlmaWVkLXByb3BlcnR5ICQoc291cmNlKSBdIDsNCiAgICAgICAg
bG9jYWwgc291cmNlLWJ1aWxkID0gWyBNQVRDSCAiXjwoW14+XSopPiIgOiAkKHNvdXJjZVsx
LTJdKSBdIDsNCiAgICAgICAgc291cmNlID0gWyBleHBhbmQtc291cmNlLW5hbWVzICQoc291
cmNlWzNdKSBdIDsNCg0KICAgICAgICBpZiAkKHNvdXJjZTpHKQ0KICAgICAgICB7DQogICAg
ICAgICAgICBsb2NhbCBnSU5fTElCX0lOQ0xVREUgPSBUUlVFIDsNCg0KICAgICAgICAgICAg
bG9jYWwgdGFyZ2V0ID0gJChzb3VyY2U6RD06Rz0pIDsNCiAgICAgICAgICAgIGxvY2FsIHRh
cmdldC1pZCA9IFsgdGFyZ2V0LWlkLW9mICQoc291cmNlKSBdIDsNCiAgICAgICAgICAgIGxv
Y2FsIHRhcmdldC1zdWJkaXIgPSBbIGRpcmVjdG9yeS1vZiBbIHRhcmdldC1wYXRoLW9mICQo
c291cmNlKSBdIF0gOw0KDQogICAgICAgICAgICBkZXBlbmRlbnQtaW5jbHVkZSAkKHNvdXJj
ZTpHPSkgOw0KICAgICAgICAgICAgbG9jYWwgZ0lNUE9TRURfUkVRVUlSRU1FTlRTKCQodGFy
Z2V0LWlkKSkgPSAkKHJlcXVpcmVtZW50cykgOw0KICAgICAgICAgICAgbG9jYWwgc3VidmFy
aWFudHMgPSBbIGV4cGFuZC10YXJnZXQtc3VidmFyaWFudHMgJCh0YXJnZXQtaWQpIDogJChs
b2NhbC1idWlsZCkgOiAkKFRPT0xTKSBdIDsNCg0KICAgICAgICAgICAgZm9yIGxvY2FsIHN1
YnZhcmlhbnQgaW4gJChzdWJ2YXJpYW50cykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAg
ICAgICBsb2NhbCBzLXRhcmdldCA9IDsNCiAgICAgICAgICAgICAgICBsb2NhbCBzLXByb3Bl
cnRpZXMgPSA7DQogICAgICAgICAgICAgICAgbG9jYWwgcy10b29sc2V0ID0gOw0KICAgICAg
ICAgICAgICAgIGxvY2FsIHMtdmFyaWFudCA9IDsNCiAgICAgICAgICAgICAgICBzcGxpdC10
YXJnZXQtc3VidmFyaWFudCBzLXRhcmdldCBzLXByb3BlcnRpZXMgcy10b29sc2V0IHMtdmFy
aWFudCA6ICQoc3VidmFyaWFudCkgOw0KICAgICAgICAgICAgICAgIGxvY2FsIHMtc3ViZGly
IDsNCiAgICAgICAgICAgICAgICBpZiAkKGFyY2gtc3ViZGlycykNCiAgICAgICAgICAgICAg
ICB7DQogICAgICAgICAgICAgICAgICAgIGxvY2FsIGFyY2ggPSBbIGdldC12YWx1ZXMgPGlu
c3RydWN0aW9uLXNldD4gOiAkKHMtcHJvcGVydGllcykgXSA7DQogICAgICAgICAgICAgICAg
ICAgIGFyY2ggPz0gWyBnZXQtdmFsdWVzIDxhcmNoaXRlY3R1cmU+IDogJChzLXByb3BlcnRp
ZXMpIF0gOw0KICAgICAgICAgICAgICAgICAgICBhcmNoID89ICQoT1NQTEFUOkwpIDsNCiAg
ICAgICAgICAgICAgICAgICAgaWYgJChhcmNoKSA9ICJkZWZhdWx0IiB7IGFyY2ggPSAkKE9T
UExBVDpMKSA7IH0NCiAgICAgICAgICAgICAgICAgICAgYXJjaCArPSBbIGdldC12YWx1ZXMg
PGFkZHJlc3MtbW9kZWw+IDogJChzLXByb3BlcnRpZXMpIF0gOw0KICAgICAgICAgICAgICAg
ICAgICBhcmNoICs9ICQoT1M6TCkgOw0KICAgICAgICAgICAgICAgICAgICBzLXN1YmRpciA9
ICQoYXJjaDpKPS0pIDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgDQog
ICAgICAgICAgICAgICAgbG9jYWwgc291cmNlLWJ1aWxkLXJ1bGUgPSBbIE1BVENIICJbYF0o
W15gXSspW2BdIiA6ICQoc291cmNlLWJ1aWxkWzJdKSBdIDsNCiAgICAgICAgICAgICAgICBp
ZiAgKCAkKHMtdG9vbHNldCkgPSAkKHNvdXJjZS1idWlsZFsxXSkgfHwgJChzb3VyY2UtYnVp
bGRbMV0pID0gKiApICYmDQogICAgICAgICAgICAgICAgICAgICAgICAoICQocy12YXJpYW50
KSA9ICQoc291cmNlLWJ1aWxkWzJdKSB8fCAkKHNvdXJjZS1idWlsZFsyXSkgPSAqICkgfHwN
CiAgICAgICAgICAgICAgICAgICAgJChzb3VyY2UtYnVpbGQtcnVsZSkgJiYgWyAkKHNvdXJj
ZS1idWlsZC1ydWxlKSAkKHMtdG9vbHNldCkgJChzLXZhcmlhbnQpIF0NCiAgICAgICAgICAg
ICAgICB7DQoNCiAgICAgICAgICAgICAgICAgICAgbG9jYWwgdGFyZ2V0LXN1YnZhcmlhbnQg
PSA7DQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGxv
Y2FsIFsgcHJvdGVjdC1zdWJwcm9qZWN0IF0gOw0KICAgICAgICAgICAgICAgICAgICAgICAg
ZW50ZXItc3VicHJvamVjdCAkKHRhcmdldC1zdWJkaXIpIDsNCiAgICAgICAgICAgICAgICAg
ICAgICAgIHRhcmdldC1zdWJ2YXJpYW50ID0NCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBbIHN1YnZhcmlhbnQtdGFyZ2V0ICQocy10YXJnZXQpIDogJChzLXByb3BlcnRpZXMpIDog
JChzLXRvb2xzZXQpICQocy12YXJpYW50KSBdIDsNCiAgICAgICAgICAgICAgICAgICAgfQ0K
DQogICAgICAgICAgICAgICAgICAgIGxvY2FsIHN2LWZpbGVzID0gOw0KICAgICAgICAgICAg
ICAgICAgICBmb3IgbG9jYWwgc3YgaW4gJCh0YXJnZXQtc3VidmFyaWFudCkNCiAgICAgICAg
ICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwgc3YtZmlsZSA9
ICQoZ0ZJTEVTKCQoc3YpKSkgOw0KICAgICAgICAgICAgICAgICAgICAgICAgc3YtZmlsZSA/
PSAkKHN2KSA7DQogICAgICAgICAgICAgICAgICAgICAgICBzdi1maWxlcyArPSAkKHN2LWZp
bGUpIDsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBzdi1m
aWxlcyA9IFsgdW5pcXVlICQoc3YtZmlsZXMpIF0gOw0KICAgICAgICAgICAgICAgICAgICBm
b3IgbG9jYWwgc3YgaW4gJChzdi1maWxlcykNCiAgICAgICAgICAgICAgICAgICAgew0KICAg
ICAgICAgICAgICAgICAgICAgICAgbG9jYWwgcmVuYW1lZC10YXJnZXQgOw0KICAgICAgICAg
ICAgICAgICAgICAgICAgbG9jYWwgc3BsaXQtcHJvcGVydGllcyA9IFsgc3BsaXQtcGF0aCAk
KHMtcHJvcGVydGllc1sxXSkgXSA7DQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgbG9j
YWwgcnIgaW4gJChyZW5hbWUtcnVsZSkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZW5hbWVkLXRhcmdldCArPSBbICQocnIpICQo
c3YpIDogJChzcGxpdC1wcm9wZXJ0aWVzKSBdIDsNCiAgICAgICAgICAgICAgICAgICAgICAg
IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmFtZWQtdGFyZ2V0ID89DQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgWyByZW5hbWUtdGFyZ2V0ICQoc3YpIDogWyBzcGxpdC1w
YXRoICQocy1wcm9wZXJ0aWVzWzFdKSBdIDogXSA7DQoNCiAgICAgICAgICAgICAgICAgICAg
ICAgIGZpbGVzICs9ICQoc3YpIDsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUtbW9k
ZSgkKHN2KSkgPSAkKCQoZ1RBUkdFVF9UWVBFKCQocy10YXJnZXQpKSlNT0RFKSA7DQogICAg
ICAgICAgICAgICAgICAgICAgICBmaWxlLXRhZ2dlZCgkKHN2KSkgPSAkKHJlbmFtZWQtdGFy
Z2V0KSA7DQogICAgICAgICAgICAgICAgICAgICAgICBmaWxlLXN1YmRpcigkKHN2KSkgPSAk
KHMtc3ViZGlyKSA7DQogICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAg
IH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsN
CiAgICAgICAgICAgIGxvY2FsIHJlbmFtZWQtZmlsZSA7DQogICAgICAgICAgICBmb3IgbG9j
YWwgcnIgaW4gJChyZW5hbWUtcnVsZSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAg
ICByZW5hbWVkLWZpbGUgKz0gWyAkKHJyKSAkKHNvdXJjZSkgXSA7DQogICAgICAgICAgICB9
DQogICAgICAgICAgICByZW5hbWVkLWZpbGUgPz0gJChzb3VyY2UpIDsNCiAgICAgICAgICAg
IA0KICAgICAgICAgICAgZmlsZXMgKz0gJChzb3VyY2UpIDsNCiAgICAgICAgICAgIGZpbGUt
dGFnZ2VkKCQoc291cmNlKSkgPSAkKHJlbmFtZWQtZmlsZSkgOw0KICAgICAgICB9DQogICAg
fQ0KDQogICAgIyBHZW5lcmF0ZSBhbmQgY29sbGVjdCB0aGUgZmlsZSBjb3B5IGJ1aWxkIGlu
c3RydWN0aW9ucy4gSWYgd2UNCiAgICAjIGFyZSBnZXR0aW5nIGRlZmluZWQgaW4gdGhlIGRl
cGVuZGVudCBwaGFzZSBza2lwIHRoZSBhY3R1YWwgaW5zdHJ1Y3Rpb25zLg0KICAgICMNCiAg
ICBsb2NhbCBkZXN0aW5hdGlvbi1maWxlcyA9IDsNCiAgICBsb2NhbCByZXN1bHQtZmlsZXMg
PSA7DQogICAgbG9jYWwgbG9jYXRlLXRhcmdldCA9ICQobG9jYXRlKSA7DQogICAgaWYgJChB
TExfTE9DQVRFX1RBUkdFVCkNCiAgICB7DQogICAgICAgIGxvY2F0ZS10YXJnZXQgPz0gWyBq
b2luLXBhdGggWyBzcGxpdC1wYXRoICQoQUxMX0xPQ0FURV9UQVJHRVQpIF0gJChTVUJESVJf
VE9LRU5TKSBdIDsNCiAgICB9DQogICAgbG9jYXRlLXRhcmdldCA/PSBbIHNwbGl0LXBhdGgg
JChTVUJESVIpIF0gOw0KICAgIGZvciBsb2NhbCBmaWxlIGluICQoZmlsZXMpDQogICAgew0K
ICAgICAgICBsb2NhbCBkZXN0aW5hdGlvbi1maWxlIDsNCiAgICAgICAgbG9jYWwgZGVzdGlu
YXRpb24tc3ViZGlyIDsNCiAgICAgICAgaWYgJChmaWxlOkcpDQogICAgICAgIHsNCiAgICAg
ICAgICAgIGRlc3RpbmF0aW9uLWZpbGUgPSAkKGZpbGUtdGFnZ2VkKCQoZmlsZSkpOkc9OkQ9
KSA7DQogICAgICAgICAgICBkZXN0aW5hdGlvbi1zdWJkaXIgPSAkKGZpbGUtc3ViZGlyKCQo
ZmlsZSkpKSA7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAg
ICAgICBkZXN0aW5hdGlvbi1maWxlID0gJChmaWxlLXRhZ2dlZCgkKGZpbGUpKTpEPSkgOw0K
ICAgICAgICAgICAgaWYgJCh0cmVlLXJvb3QpDQogICAgICAgICAgICB7DQogICAgICAgICAg
ICAgICAgZGVzdGluYXRpb24tc3ViZGlyID0gWyBzdHJpcC1pbml0aWFsICQodHJlZS1yb290
KSA6IFsgc3BsaXQtcGF0aCAkKGZpbGU6RCkgXSBdIDsNCiAgICAgICAgICAgIH0NCiAgICAg
ICAgfQ0KICAgICAgICBkZXN0aW5hdGlvbi1maWxlID0NCiAgICAgICAgICAgIFsgZ3Jpc3Qt
dGFyZ2V0cyAkKGRlc3RpbmF0aW9uLWZpbGUpIDogWyBzcGxpdC1wYXRoICQoc3RhZ2UtZGly
KSBdICQoZGVzdGluYXRpb24tc3ViZGlyKSBdIDsNCiAgICAgICAgZGVzdGluYXRpb24tZmls
ZXMgKz0gJChkZXN0aW5hdGlvbi1maWxlKSA7DQogICAgICAgIHsNCiAgICAgICAgICAgIGxv
Y2FsIEZJTEVNT0RFID0gJChGSUxFTU9ERSkgOw0KICAgICAgICAgICAgaWYgJChmaWxlLW1v
ZGUoJChmaWxlKSkpIHsgRklMRU1PREUgPSAkKGZpbGUtbW9kZSgkKGZpbGUpKSkgOyB9DQog
ICAgICAgICAgICBNYWtlTG9jYXRlICQoZGVzdGluYXRpb24tZmlsZSkgOg0KICAgICAgICAg
ICAgICAgIFsgRkRpck5hbWUgJChsb2NhdGUtdGFyZ2V0KSBbIHNwbGl0LXBhdGggJChzdGFn
ZS1kaXIpIF0gJChkZXN0aW5hdGlvbi1zdWJkaXIpIF0gOw0KICAgICAgICAgICAgZm9yIGxv
Y2FsIGRmIGluICQoZGVzdGluYXRpb24tZmlsZSkNCiAgICAgICAgICAgIHsNCiAgICAgICAg
ICAgICAgICByZXN1bHQtZmlsZXMgKz0gJChkZikgOw0KICAgICAgICAgICAgICAgIEZpbGVD
bG9uZSAkKGRmKSA6ICQoZmlsZSkgOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgbG9j
YWwgdGFyZ2V0ID0gJChzdGFnZS1pZCkgJChkZXN0aW5hdGlvbi1zdWJkaXIpICQoZGVzdGlu
YXRpb24tZmlsZTpHPSkgOw0KICAgICAgICAgICAgZGVjbGFyZS1mYWtlLXRhcmdldHMgJCh0
YXJnZXQ6Sj0vKSA6ICQoZGVzdGluYXRpb24tZmlsZSkgOw0KICAgICAgICB9DQogICAgfQ0K
DQogICAgIyBEb24ndCBleHBvc2UgZmFrZSB0YXJnZXRzIHdoZW4gc3VwcHJlc3NpbmcgZGVm
YXVsdCBidWlsZHMuDQogICAgIyBCdXQgaG9ub3IgcmVxdWlyZW1lbnQgdG8gZXhwb3NlIHNv
dXJjZXMgdGhyb3VnaCBnaXZlbiA8dGFyZ2V0Pi4NCiAgICAjDQogICAgaWYgISAkKGZha2Ut
dGFyZ2V0KQ0KICAgIHsNCiAgICAgICAgZGVjbGFyZS1mYWtlLXRhcmdldHMgJChzdGFnZS1p
ZDpHPSkgOiAkKGRlc3RpbmF0aW9uLWZpbGVzKSA7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7
DQogICAgICAgIGlmICQoZ1NVUFBSRVNTX0ZBS0VfVEFSR0VUUykNCiAgICAgICAgew0KICAg
ICAgICAgICAgZGVjbGFyZS1mYWtlLXRhcmdldHMgJChmYWtlLXRhcmdldCkgOiAkKGZpbGVz
KSA7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICBk
ZWNsYXJlLWZha2UtdGFyZ2V0cyAkKGZha2UtdGFyZ2V0KSA6ICQoZGVzdGluYXRpb24tZmls
ZXMpIDsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIENsZWFuIGNsZWFuIDogJChkZXN0aW5h
dGlvbi1maWxlcykgOw0KDQogICAgcmV0dXJuICQocmVzdWx0LWZpbGVzKSA7DQoNCiAgICB9
DQp9DQoNCiMgR0lWRU46DQojDQojIEEgYmFyZSB0YXJnZXQsIGVpdGhlciB3aXRoIG9yIHdp
dGhvdXQgZ3Jpc3QuDQojDQojIFJFVFVSTlM6DQojDQojIFRoZSBmdWxseSBxdWFsaWZpZWQg
YW5kIGdyaXN0ZWQgdGFyZ2V0IElELg0KIw0KIyBFWEFNUExFOg0KIw0KIyBbIHRhcmdldC1p
ZC1vZiA8bGliPi4uLy4uL3N1YjEvc3ViMi90ZXN0LmRsbCBdDQojDQojIFJFVFVSTlM6DQoj
DQojIDxzdWIxIXN1YjI+dGVzdC5kbGwNCiMNCnJ1bGUgdGFyZ2V0LWlkLW9mICggdGFyZ2V0
LXJlZiApDQp7DQogICAgbG9jYWwgZ3Jpc3QgPSAkKHRhcmdldC1yZWY6RykgOw0KICAgIGxv
Y2FsIHRhcmdldCA9ICQodGFyZ2V0LXJlZjpHPSkgOw0KICAgIHdoaWxlICQodGFyZ2V0Okcp
DQogICAgew0KICAgICAgICBncmlzdCArPSAkKHRhcmdldDpHKSA7DQogICAgICAgIHRhcmdl
dCA9ICQodGFyZ2V0Okc9KSA7DQogICAgfQ0KICAgIGxvY2FsIHBhdGggPSBbIGRpcmVjdG9y
eS1vZiAkKHRhcmdldCkgXSA7DQogICAgaWYgISBbIE1BVENIICJeKEApIiA6ICQocGF0aCkg
XQ0KICAgIHsNCiAgICAgICAgcGF0aCA9IFsgam9pbiBAJChQUk9KRUNUKSBbIHNpbXBsaWZ5
LXBhdGgtdG9rZW5zIFsgdG9wLXJlbGF0aXZlLXRva2VucyAkKHBhdGgpIF0gXSA6IC8gXSA7
DQogICAgfQ0KICAgIGxvY2FsIHRva2VucyA9IFsgc3BsaXQtcGF0aCAkKHBhdGgpIF0gOw0K
ICAgIGxvY2FsIHByb2plY3QtbmFtZSA9IFsgTUFUQ0ggIl5AKFteL1xcXSspIiA6ICQodG9r
ZW5zWzFdKSBdIDsNCiAgICBpZiAkKHByb2plY3QtbmFtZSkNCiAgICB7DQogICAgICAgIHRv
a2VucyA9ICQodG9rZW5zWzItXSkgOw0KICAgIH0NCiAgICBwcm9qZWN0LW5hbWUgPz0gJChQ
Uk9KRUNUKSA7DQogICAgbG9jYWwgU09VUkNFX0dSSVNUID0gWyBGR3Jpc3QgQCQocHJvamVj
dC1uYW1lKSBbIHNpbXBsaWZ5LXBhdGgtdG9rZW5zICQodG9rZW5zKSBdIF0gOw0KICAgIGxv
Y2FsIHRhcmdldC1pZCA9IFsgRkdyaXN0RmlsZXMgJCh0YXJnZXQ6RD0pIF0gOw0KICAgIHJl
dHVybiAkKHRhcmdldC1pZCkgOw0KfQ0KDQojDQojDQpydWxlIHRhcmdldC1wYXRoLW9mICgg
dGFyZ2V0LXJlZiApDQp7DQogICAgbG9jYWwgZ3Jpc3QgPSAkKHRhcmdldC1yZWY6RykgOw0K
ICAgIGxvY2FsIHRhcmdldCA9ICQodGFyZ2V0LXJlZjpHPSkgOw0KICAgIHdoaWxlICQodGFy
Z2V0OkcpDQogICAgew0KICAgICAgICBncmlzdCArPSAkKHRhcmdldDpHKSA7DQogICAgICAg
IHRhcmdldCA9ICQodGFyZ2V0Okc9KSA7DQogICAgfQ0KICAgIGxvY2FsIHBhdGggPSBbIGRp
cmVjdG9yeS1vZiAkKHRhcmdldCkgXSA7DQogICAgaWYgISBbIE1BVENIICJeKEApIiA6ICQo
cGF0aCkgXQ0KICAgIHsNCiAgICAgICAgcGF0aCA9IFsgam9pbiBAJChQUk9KRUNUKSBbIHNp
bXBsaWZ5LXBhdGgtdG9rZW5zIFsgdG9wLXJlbGF0aXZlLXRva2VucyAkKHBhdGgpIF0gXSA6
IC8gXSA7DQogICAgfQ0KICAgIHBhdGggPSAkKHBhdGgpLyQodGFyZ2V0OkQ9KSA7DQogICAg
aWYgJChncmlzdCkNCiAgICB7DQogICAgICAgIHBhdGggPSAkKGdyaXN0Oko9IiIpJChwYXRo
KSA7DQogICAgfQ0KICAgIHJldHVybiAkKHBhdGgpIDsNCn0NCg0KIyBDb21tb24gcnVsZXMg
Zm9yIGdlbmVyYXRpbmcgYSBzaW5nbGUgdGFnIGJhc2VkIG9uIHRoZQ0KIyB2YXJpYW50LCBi
dWlsZCBwcm9wZXJ0aWVzLCBhbmQgdGhlIHRvb2xzZXQgdXNlZCB0byBidWlsZC4NCiMgVG8g
dXNlIHBsYWNlIHRoaXMgcnVsZSBuYW1lIGluIHRoZSByZXF1aXJlbWVudGVzIHNlY3Rpb24g
b2YNCiMgYSBzdGFnZSB0YXJnZXQuDQojDQojIFRoZSB0YWcgaXMgY29uc3RydWN0ZWQgYXMg
c3VjaDoNCiMNCiMgICBbLTx0b29sc2V0LXRhZz5dWy08dGhyZWFkLXRhZz5dWy08cnVudGlt
ZS10YWc+XVstPHZlcnNpb24tdGFnPl0NCiMNCiMgICA8dG9vbHNldC10YWc+IG1hcHMgdG8g
YW4gYWJicmV2aWF0ZWQgbmFtZSBvZiB0aGUgdG9vbHNldA0KIyAgIGFuZCB3aGVuIHBvc3Np
YmxlIGFuZCBhcHBsaWNhYmxlIHRoZSB2ZXJzaW9uIG9mIHRoZSB0b29sc2V0Lg0KIw0KIyAg
IDx0aHJlYWQtdGFnPiAibXQiIHdoZW4gbXVsdGktdGhyZWFkaW5nIGlzIGVuYWJsZWQuDQoj
DQojICAgPHJ1bnRpbWUtdGFnPiBhZGRzIHRoZXNlIHNpbmdsZSBsZXR0ZXIgdGFnczoNCiMg
ICAgICAgInMiIHdoZW4gc3RhdGljIGxpbmtpbmcgdG8gcnVudGltZQ0KIyAgICAgICAiZyIg
d2hlbiBsaW5raW5nIHRvIGRlYnVnIHJ1bnRpbWUNCiMgICAgICAgInkiIHdoZW4gYnVpbGRp
bmcgZGVidWctcHl0aG9uIHZhcmlhbnRzDQojICAgICAgICJkIiB3aGVuIGJ1aWxkaW5nIGRl
YnVnIHZhcmlhbnRzDQojICAgICAgICJwIiB3aGVuIGJ1aWxkaW5nIHdpdGggc3RscG9ydCBs
aWJyYXJpZXMNCiMgICAgICAgIm4iIHdoZW4gYnVpbGRpbmcgd2l0aCBzdGxwb3J0IGFuZCB1
c2luZyBuYXRpdmUgaW9zdHJlYW1zDQojDQojIFRoZSB0YWcgYWRkZWQgaXMgYSA8dGFnPjxw
cmVmaXg+IHRvIGFsbG93IGZvciBhZGRpdGlvbmFsIHRhZ3MuDQojDQpydWxlIGNvbW1vbi12
YXJpYW50LXRhZyAoIHRvb2xzZXQgdmFyaWFudCA6IHByb3BlcnRpZXMgKiApDQp7DQogICAg
bG9jYWwgdGFncyA9IDsNCiAgICANCiAgICBsb2NhbCB0aHJlYWQtdGFnID0gOw0KICAgIGlm
IDx0aHJlYWRpbmc+bXVsdGkgaW4gJChwcm9wZXJ0aWVzKSB7IHRocmVhZC10YWcgPSBtdCA7
IH0NCiAgICANCiAgICBsb2NhbCBydW50aW1lLXRhZyA9IDsNCiAgICBpZiA8cnVudGltZS1s
aW5rPnN0YXRpYyBpbiAkKHByb3BlcnRpZXMpIHsgcnVudGltZS10YWcgKz0gcyA7IH0NCiAg
ICBpZiA8cnVudGltZS1idWlsZD5kZWJ1ZyBpbiAkKHByb3BlcnRpZXMpIHsgcnVudGltZS10
YWcgKz0gZyA7IH0NCiAgICBpZiBbIE1BVENIIC4qKGRlYnVnLXB5dGhvbikuKiA6ICQodmFy
aWFudCkgXSB7IHJ1bnRpbWUtdGFnICs9IHkgOyB9DQogICAgZWxzZSB7IGlmIFsgTUFUQ0gg
LiooZGVidWcpLiogOiAkKHZhcmlhbnQpIF0geyBydW50aW1lLXRhZyArPSBkIDsgfSB9DQog
ICAgaWYgWyBNQVRDSCAuKihzdGxwKS4qIDogJCh0b29sc2V0KSBdIHx8DQogICAgICAgIFsg
TUFUQ0ggLiooc3RscCkuKiA6ICQocHJvcGVydGllczpHKSBdDQogICAgeyBydW50aW1lLXRh
ZyArPSBwIDsgfQ0KICAgIGlmIDxzdGxwb3J0LWlvc3RyZWFtPm9mZiBpbiAkKHByb3BlcnRp
ZXMpIHsgcnVudGltZS10YWcgKz0gbiA7IH0NCiAgICANCiAgICBsb2NhbCB0b29sc2V0LXRh
ZyA9IDsNCiAgICBpZiAhICQoZ1VOVkVSU0lPTkVEX1ZBUklBTlRfVEFHKQ0KICAgIHsNCiAg
ICAgICAgc3dpdGNoICQodG9vbHNldCkNCiAgICAgICAgew0KICAgICAgICAgICAgY2FzZSBi
b3JsYW5kKiA6IHRvb2xzZXQtdGFnICs9IGJjYiA7DQogICAgICAgICAgICBjYXNlIGNvbW8q
IDogdG9vbHNldC10YWcgKz0gY29tbyA7DQogICAgICAgICAgICBjYXNlIGN3cHJvOCogOiB0
b29sc2V0LXRhZyArPSBjdyA4IDsNCiAgICAgICAgICAgIGNhc2UgY3dwcm85KiA6IHRvb2xz
ZXQtdGFnICs9IGN3IDkgOw0KICAgICAgICAgICAgY2FzZSBkYXJ3aW4qIDogdG9vbHNldC10
YWcgKz0gOw0KICAgICAgICAgICAgY2FzZSBlZGcqIDogdG9vbHNldC10YWcgKz0gZWRnIDsN
CiAgICAgICAgICAgIGNhc2UgZ2NjKiA6IHRvb2xzZXQtdGFnICs9IGdjYyA7DQogICAgICAg
ICAgICBjYXNlIGludGVsLWxpbnV4KiA6IHRvb2xzZXQtdGFnICs9IGlsIDsNCiAgICAgICAg
ICAgIGNhc2UgaW50ZWwtd2luMzIqIDogdG9vbHNldC10YWcgKz0gaXcgOw0KICAgICAgICAg
ICAgY2FzZSBrY2MqIDogdG9vbHNldC10YWcgKz0ga2NjIDsNCiAgICAgICAgICAgIGNhc2Ug
a3lsaXgqIDogdG9vbHNldC10YWcgKz0gYmNrIDsNCiAgICAgICAgICAgIGNhc2UgbWV0cm93
ZXJrcyogOiB0b29sc2V0LXRhZyArPSBjdyA7DQogICAgICAgICAgICBjYXNlIG1pbmd3KiA6
IHRvb2xzZXQtdGFnICs9IG1ndyA7DQogICAgICAgICAgICBjYXNlIG1pcHNwcm8qIDogdG9v
bHNldC10YWcgKz0gbXAgOw0KICAgICAgICAgICAgY2FzZSBtc3ZjKiA6IHRvb2xzZXQtdGFn
ICs9IHZjIDYgOw0KICAgICAgICAgICAgY2FzZSBzdW5wcm8qIDogdG9vbHNldC10YWcgKz0g
c3cgOw0KICAgICAgICAgICAgY2FzZSB0cnU2NGN4eCogOiB0b29sc2V0LXRhZyArPSB0cnUg
Ow0KICAgICAgICAgICAgY2FzZSB2YWNwcCogOiB0b29sc2V0LXRhZyArPSB4bGMgOw0KICAg
ICAgICAgICAgY2FzZSB2Y1s2NzhdW19dKiA6DQogICAgICAgICAgICB7DQogICAgICAgICAg
ICAgICAgdG9vbHNldC10YWcgKz0gdmMgOw0KICAgICAgICAgICAgICAgIHRvb2xzZXQtdGFn
ICs9IFsgTUFUQ0ggInZjKFs2NzhdKVtfXShbMDEyMzQ1Njc4OV0qKSIgOiAkKHRvb2xzZXQp
IF0gOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgY2FzZSB2Y1s2NzhdKiA6DQogICAg
ICAgICAgICB7DQogICAgICAgICAgICAgICAgdG9vbHNldC10YWcgKz0gdmMgOw0KICAgICAg
ICAgICAgICAgIHRvb2xzZXQtdGFnICs9IFsgTUFUQ0ggInZjKFs2NzhdKSIgOiAkKHRvb2xz
ZXQpIF0gOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgY2FzZSAqIDoNCiAgICAgICAg
ICAgIHRvb2xzZXQtdGFnICs9IFsgTUFUQ0ggIl4oW14tXSopIiA6ICQodG9vbHNldCkgXSA7
DQogICAgICAgIH0NCiAgICAgICAgdG9vbHNldC10YWcgKz0gWyBNQVRDSCAiWy1dKFswMTIz
NDU2Nzg5XSspW19dKFswMTIzNDU2Nzg5XSopIiA6ICQodG9vbHNldCkgXSA7DQogICAgfQ0K
ICAgIA0KICAgIGxvY2FsIHZlcnNpb24tdGFnID0gOw0KICAgIGlmICEgJChnVU5WRVJTSU9O
RURfVkFSSUFOVF9UQUcpDQogICAgew0KICAgICAgICBsb2NhbCB2ZXJzaW9uLW51bWJlciA9
IFsgZ2V0LXZhbHVlcyA8dmVyc2lvbj4gOiAkKHByb3BlcnRpZXMpIF0gOw0KICAgICAgICB2
ZXJzaW9uLW51bWJlciA/PSAkKEJPT1NUX1ZFUlNJT04pIDsNCiAgICAgICAgdmVyc2lvbi10
YWcgPSBbIE1BVENIICJeKFteLl0rKVsuXShbXi5dKykiIDogJCh2ZXJzaW9uLW51bWJlclsx
XSkgXSA7DQogICAgICAgIHZlcnNpb24tdGFnID0gJCh2ZXJzaW9uLXRhZzpKPSJfIikgOw0K
ICAgIH0NCiAgICANCiAgICB0YWdzICs9ICQodG9vbHNldC10YWc6Sj0pIDsNCiAgICB0YWdz
ICs9ICQodGhyZWFkLXRhZzpKPSkgOw0KICAgIHRhZ3MgKz0gJChydW50aW1lLXRhZzpKPSkg
Ow0KICAgIHRhZ3MgKz0gJCh2ZXJzaW9uLXRhZykgOw0KICAgIA0KICAgIGlmICQodGFncykN
CiAgICB7DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICAgcmV0dXJuICQocHJvcGVydGllcykg
Ow0KICAgIH0NCn0NCg0KIyBSZWN1cnNpdmUgdmVyc2lvbiBvZiBHTE9CLiBCdWlsZHMgdGhl
IGdsb2Igb2YgZmlsZXMgd2hpbGUNCiMgYWxzbyBzZWFyY2hpbmcgaW4gdGhlIHN1YmRpcmVj
dG9yaWVzIG9mIHRoZSBnaXZlbiByb290Lg0KIw0KcnVsZSBnbG9iLXRyZWUgKCByb290IDog
cGF0dGVybnMgKiApDQp7DQogICAgbG9jYWwgZSA7DQogICAgbG9jYWwgZiA9IFsgR0xPQiAk
KHJvb3QpIDogJChwYXR0ZXJucykgXSA7DQogICAgbG9jYWwgZmlsZXMgOw0KICAgIGZvciBl
IGluICQoZikNCiAgICB7DQogICAgICAgIGlmICQoZTpEPSkgIT0gQ1ZTIHsgZmlsZXMgKz0g
JChlKSA7IH0NCiAgICB9DQogICAgbG9jYWwgZCA9IFsgZGlmZmVyZW5jZSBbIEdMT0IgJChy
b290KSA6ICogXSA6ICQoZmlsZXMpIF0gOw0KICAgIGZvciBlIGluICQoZCkNCiAgICB7DQog
ICAgICAgIGlmICEgKCAkKGU6RD0pIGluIC4gLi4gKSB7IGZpbGVzICs9IFsgZ2xvYi10cmVl
ICQoZSkgOiAkKHBhdHRlcm5zKSBdIDsgfQ0KICAgIH0NCiAgICByZXR1cm4gJChmaWxlcykg
Ow0KfQ0KDQpydWxlIHVubGVzcyAoIHRlc3QgKiA6IG5vLXZhbHVlICogOiB5ZXMtdmFsdWUg
KiApDQp7IGlmICEgJCh0ZXN0KSB7IHJldHVybiAkKG5vLXZhbHVlKSA7IH0gZWxzZSB7IHJl
dHVybiAkKHllcy12YWx1ZSkgOyB9IH0NCg0KcnVsZSBjb25kICggdGVzdCAqIDogeWVzLXZh
bHVlICogOiBuby12YWx1ZSAqICkNCnsgaWYgJCh0ZXN0KSB7IHJldHVybiAkKHllcy12YWx1
ZSkgOyB9IGVsc2UgeyByZXR1cm4gJChuby12YWx1ZSkgOyB9IH0NCg0KIyBJZiB0aGUgdG9v
bHNldCBtYXRjaGVzIHRoZSBnaXZlbiByZWdleCBwYXR0ZXJuLCBtb2RpZnkgdGhlDQojIHN1
YnZhcmlhbnQtcGF0aCBhbmQgcHJvcGVydGllcyBmb3Igc3RhdGljIGxpbmtpbmcNCnJ1bGUg
Zm9yY2UtTlQtc3RhdGljLWxpbmsgKCBwYXR0ZXJuIDogdG9vbHNldCA6IHN1YnZhcmlhbnQt
cGF0aCBwcm9wZXJ0aWVzICogKQ0Kew0KICAgIGlmICAkKE5UKSAmJiBbIE1BVENIICQocGF0
dGVybikgOiAkKHRvb2xzZXQpIF0NCiAgICB7DQogICAgICAgIHByb3BlcnRpZXMgPQ0KICAg
ICAgICAgIFsgZGlmZmVyZW5jZSAkKHByb3BlcnRpZXMpIDogPHJ1bnRpbWUtbGluaz5keW5h
bWljIF0NCiAgICAgICAgICA8cnVudGltZS1saW5rPnN0YXRpYw0KICAgICAgICAgIDsNCiAg
ICB9DQoNCiAgICByZXR1cm4gJChzdWJ2YXJpYW50LXBhdGgpICQocHJvcGVydGllcykgOw0K
fQ0KDQojIFN0aWNrIHRoaXMgcnVsZSBuYW1lIGluIHlvdXIgcmVxdWlyZW1lbnRzIGlmIHlv
dSBhcmUgYnVpbGRpbmcgY29kZQ0KIyB3aGljaCByZXF1aXJlcyBsb2NhbGUgc3VwcG9ydC4g
IEl0IGhhbmRsZXMgdGhlIG1ldHJvd2Vya3Mtc3BlY2lmaWMNCiMgY2FzZSB0aGF0IGxvY2Fs
ZSBzdXBwb3J0IGRlbWFuZHMgdGhlIHN0YXRpYyB2ZXJzaW9uIG9mIHRoZSBydW50aW1lDQoj
IGxpYnJhcnkuDQpydWxlIHN0ZDo6bG9jYWxlLXN1cHBvcnQgKCB0b29sc2V0IHZhcmlhbnQg
OiBzdWJ2YXJpYW50LXBhdGggcHJvcGVydGllcyAqICkNCnsNCiAgICByZXR1cm4gWyANCiAg
ICAgIGZvcmNlLU5ULXN0YXRpYy1saW5rIC4qKG1ldHJvd2Vya3N8Y3dwcm98Y3cpLiogDQog
ICAgICAgIDogJCh0b29sc2V0KSA6ICQoc3VidmFyaWFudC1wYXRoKSAkKHByb3BlcnRpZXMp
DQogICAgICAgICAgXSA7DQp9DQoNCiMgU3RpY2sgdGhpcyBydWxlIG5hbWUgaW4geW91ciBy
ZXF1aXJlbWVudHMgaWYgeW91IGFyZSBidWlsZGluZyBjb2RlDQojIHdoaWNoIHJlcXVpcmVz
IGZhY2V0IHN1cHBvcnQuICBJdCBoYW5kbGVzIHRoZSBpbnRlbC13aW4zMi1zcGVjaWZpYw0K
IyBjYXNlIHRoYXQgZmFjZXQgc3VwcG9ydCBzZWVtcyB0byBkZW1hbmQgdGhlIHN0YXRpYyB2
ZXJzaW9uIG9mIHRoZQ0KIyBydW50aW1lIGxpYnJhcnkuDQpydWxlIHN0ZDo6ZmFjZXQtc3Vw
cG9ydCAoIHRvb2xzZXQgdmFyaWFudCA6IHN1YnZhcmlhbnQtcGF0aCBwcm9wZXJ0aWVzICog
KQ0Kew0KICAgIHJldHVybiBbIA0KICAgICAgZm9yY2UtTlQtc3RhdGljLWxpbmsgLiooaW50
ZWwpLiogDQogICAgICAgIDogJCh0b29sc2V0KSA6ICQoc3VidmFyaWFudC1wYXRoKSAkKHBy
b3BlcnRpZXMpDQogICAgICAgICAgXSA7DQp9DQoNCiMgbG9hZCB0aGUgc3BlY2lmaWVkIG1v
ZHVsZXMgaWYgdGhleSBoYXZlbid0IGJlZW4gbG9hZGVkIGFscmVhZHkuICBJZg0KIyB0aGUg
bW9kdWxlIGhhcyBubyBzdWZmaXgsICIuamFtIiBpcyBhcHBlbmRlZC4gIElmIHRoZSBtb2R1
bGUgbmFtZSBpcw0KIyBwcmVwZW5kZWQgd2l0aCBhIHBhdGgsIGl0IGlzIHNvdWdodCBpbiB0
aGF0IGxvY2F0aW9uIHJlbGF0aXZlIHRvIHRoZQ0KIyBjdXJyZW50IEphbWZpbGUsIG90aGVy
d2lzZSBpdCBpcyBzb3VnaHQgaW4gQk9PU1RfQlVJTERfUEFUSC4NCnJ1bGUgaW1wb3J0ICgg
bW9kdWxlcyArICkNCnsNCiAgICBmb3IgbG9jYWwgbmFtZSBpbiAkKG1vZHVsZXMpDQogICAg
ew0KICAgICAgICBsb2NhbCBzZWFyY2ggPSAkKEJPT1NUX0JVSUxEX1BBVEgpIDsgICMgc2Vh
cmNoIGhlcmUNCiAgICAgICAgbG9jYWwgbiA9ICQobmFtZTpEPSkgOyAgICAgICAgICAgICAg
ICAjIGZvciB0aGlzIGJhc2VuYW1lDQogICAgICAgIGlmICEgJChuOlMpDQogICAgICAgIHsN
CiAgICAgICAgICAgIG4gPSAkKG4pLmphbSA7DQogICAgICAgIH0NCiAgICAgICAgDQogICAg
ICAgICMgaWYgYSBkaXJlY3Rvcnkgd2FzIHNwZWNpZmllZA0KICAgICAgICBsb2NhbCBkID0g
JChuYW1lOkQpIDsNCiAgICAgICAgaWYgJChkKQ0KICAgICAgICB7DQogICAgICAgICAgICAj
IE5vcm1hbGl6ZSB0aGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgaW52b2NhdGlvbiBkaXJlY3Rv
cnkuDQogICAgICAgICAgICBuID0gWyByb290LXBhdGhzICQobikgOiAkKGQ6Uj0kKFNVQkRJ
UikpIF0gOw0KICAgICAgICAgICAgbiA9IFsgcm9vdC1wYXRocyAkKG4pIDogWyBQV0QgXSBd
IDsNCiAgICAgICAgICAgIHNlYXJjaCA9IDsgIyBubyBzZWFyY2hpbmc7IHRoZSBwYXRoIHdh
cyBzcGVjaWZpZWQuDQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIFNFQVJDSCBvbiAk
KG4pID0gJChzZWFyY2gpIDsNCiAgICAgICAgDQogICAgICAgIGlmICEgJCgkKG4pLmluY2x1
ZGVkKQ0KICAgICAgICB7DQogICAgICAgICAgICBpbmNsdWRlICQobikgOw0KICAgICAgICAg
ICAgJChuKS5pbmNsdWRlZCA9IHRydWUgOw0KICAgICAgICB9DQogICAgfQ0KfQ0KDQojIERl
Y2xhcmUgYSBwcm9qZWN0J3MgaW5zdGFsbGFibGUgc291cmNlcyAocmF3IHNvdXJjZXMgb3Ig
YnVpbHQgdGFyZ2V0cykNCiMNCnJ1bGUgaW5zdGFsbCAoDQogICAgbmFtZSAjIFRoZSBuYW1l
IHRvIHJlZmVyIHRvIHRoZXNlIHNldCBvZiB0YXJnZXRzL3NvdXJjZXMuDQogICAgdHlwZSAj
IFRoZSB0eXBlIG9mIHRhcmdldHMvc291cmNlcywgYW5kIHRoZXJlZm9yZSB0aGVpciBpbnN0
YWxsIGxvY2F0aW9uLg0KICAgIDogc291cmNlcyArICMgVGhlIHRhcmdldHMgYW5kIHNvdXJj
ZXMgdG8gbWFrZSBhdmFpbGFibGUgZm9yIGluc3RhbGxhdGlvbi4NCiAgICA6IG9wdGlvbnMg
Kg0KICAgICkNCnsNCiAgICBpZiAkKGdJTlNUQUxMX1NPVVJDRVMpDQogICAgew0KICAgICAg
ICBsb2NhbCBfaW5jbHVkZV8gOw0KICAgICAgICBpZiAkKGdJTlNUQUxMX0lOQ0xVU0lPTlMp
DQogICAgICAgIHsNCiAgICAgICAgICAgIGlmICQobmFtZSkgaW4gJChnSU5TVEFMTF9JTkNM
VVNJT05TKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIF9pbmNsdWRlXyA9IHRy
dWUgOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGVsc2UgaWYgISAkKG5h
bWUpIGluICQoZ0lOU1RBTExfRVhDTFVTSU9OUykNCiAgICAgICAgew0KICAgICAgICAgICAg
X2luY2x1ZGVfID0gdHJ1ZSA7DQogICAgICAgIH0NCiAgICAgICAgaWYgJChfaW5jbHVkZV8p
DQogICAgICAgIHsNCiAgICAgICAgICAgIGxvY2FsIHJlc3VsdCA7DQogICAgICAgICAgICBm
b3IgbG9jYWwgc291cmNlIGluICQoc291cmNlcykNCiAgICAgICAgICAgIHsNCiAgICAgICAg
ICAgICAgICByZXN1bHQgKz0gWyB0YXJnZXQtcGF0aC1vZiAkKHNvdXJjZSkgXSA7DQogICAg
ICAgICAgICB9DQogICAgICAgICAgICBpZiAhICQocmVzdWx0KSBpbiAkKGdJTlNUQUxMX1NP
VVJDRVMoJCh0eXBlKSkpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgZ0lOU1RB
TExfU09VUkNFUygkKHR5cGUpKSArPSAkKHJlc3VsdCkgOw0KICAgICAgICAgICAgfQ0KICAg
ICAgICAgICAgcmV0dXJuICQocmVzdWx0KSA7DQogICAgICAgIH0NCiAgICB9DQp9DQoNCiMN
CnJ1bGUgaW5zdGFsbC1zdWJpbmNsdWRlICggamFtZmlsZXMgKyA6IG9wdGlvbnMgKiApDQp7
DQogICAgbG9jYWwgZ0lOU1RBTExfU09VUkNFUyA9IFRSVUUgOw0KICAgIGxvY2FsIGdJTl9M
SUJfSU5DTFVERSA9IFRSVUUgOw0KICAgIGxvY2FsIGdJTlNUQUxMX0VYQ0xVU0lPTlMgPSBb
IGdldC12YWx1ZXMgPGV4Y2x1ZGU+IDogJChvcHRpb25zKSBdIDsNCiAgICBsb2NhbCBnSU5T
VEFMTF9JTkNMVVNJT05TID0gWyBnZXQtdmFsdWVzIDxpbmNsdWRlPiA6ICQob3B0aW9ucykg
XSA7DQogICAgDQogICAgZm9yIGxvY2FsIGphbWZpbGUgaW4gJChqYW1maWxlcykNCiAgICB7
DQogICAgICBsb2NhbCBzdWItamFtZmlsZSA9IFsgcmVsYXRpdmUtcGF0aCAkKGphbWZpbGUp
IF0gOw0KICAgICAgZGVwZW5kZW50LWluY2x1ZGUgJChzdWItamFtZmlsZSkgOw0KICAgIH0N
Cn0NCg0KIyBnZXQgcHJvamVjdCBpbnN0YWxsYXRpb24gc291cmNlcyBvZiBhIGdpdmVuIHR5
cGUNCnJ1bGUgaW5zdGFsbC1zb3VyY2VzICggdHlwZSApDQp7DQogICAgcmV0dXJuICQoZ0lO
U1RBTExfU09VUkNFUygkKHR5cGUpKSkgOw0KfQ0KDQpydWxlIGNvbW1vbi1uYW1lcyAoICkN
CnsNCiAgICByZXR1cm4gY29tbW9uLXZhcmlhbnQtdGFnIDsNCn0NCnJ1bGUgY29tbW9uLXN0
YWdlLXRhZyAoIHRvb2xzZXQgdmFyaWFudCA6IHN1YnZhcmlhbnQtcGF0aCBwcm9wZXJ0aWVz
ICogKQ0Kew0KICAgIHJldHVybiBbIGNvbW1vbi12YXJpYW50LXRhZyAkKHRvb2xzZXQpICQo
dmFyaWFudCkgOiAkKHN1YnZhcmlhbnQtcGF0aCkgJChwcm9wZXJ0aWVzKSBdIDsNCn0NCg0K
IyBFbmZvcmNlcyB0b29sc2V0IGxldmVsIHJlcXVpcmVtZW50cy4gVGhpcyBpcyBhZGRlZCB0
byBhbGwgdGFyZ2V0cy4NCnJ1bGUgdG9vbHNldDo6cmVxdWlyZW1lbnRzICggdG9vbHNldCB2
YXJpYW50IDogc3VidmFyaWFudC1wYXRoIHByb3BlcnRpZXMgKiApDQp7DQogICAgbG9jYWwg
cmVxdWlyZW1lbnRzID0gOw0KICAgIHN3aXRjaCAkKHRvb2xzZXQpDQogICAgew0KICAgICAg
ICBjYXNlIGN3cHJvOCogOg0KICAgICAgICB7DQogICAgICAgICAgICAjIGR5bmFtaWMgcnVu
dGltZSBvbmx5IGNvbWVzIGluIHRoZSBtdWx0aS10aHJlYWRpbmcgZmxhdm9yDQogICAgICAg
ICAgICBpZiA8cnVudGltZS1saW5rPmR5bmFtaWMgaW4gJChwcm9wZXJ0aWVzKSB7IHJlcXVp
cmVtZW50cyArPSA8dGhyZWFkaW5nPm11bHRpIDsgfQ0KICAgICAgICB9DQogICAgICAgIGNh
c2UgY3dwcm85KiA6DQogICAgICAgIHsNCiAgICAgICAgICAgICMgZHluYW1pYyBydW50aW1l
IG9ubHkgY29tZXMgaW4gdGhlIG11bHRpLXRocmVhZGluZyBmbGF2b3INCiAgICAgICAgICAg
IGlmIDxydW50aW1lLWxpbms+ZHluYW1pYyBpbiAkKHByb3BlcnRpZXMpIHsgcmVxdWlyZW1l
bnRzICs9IDx0aHJlYWRpbmc+bXVsdGkgOyB9DQogICAgICAgIH0NCiAgICAgICAgY2FzZSBj
dyogOg0KICAgICAgICB7DQogICAgICAgICAgICAjIGR5bmFtaWMgcnVudGltZSBvbmx5IGNv
bWVzIGluIHRoZSBtdWx0aS10aHJlYWRpbmcgZmxhdm9yDQogICAgICAgICAgICBpZiA8cnVu
dGltZS1saW5rPmR5bmFtaWMgaW4gJChwcm9wZXJ0aWVzKSB7IHJlcXVpcmVtZW50cyArPSA8
dGhyZWFkaW5nPm11bHRpIDsgfQ0KICAgICAgICB9DQogICAgICAgIGNhc2UgbXN2YyogOg0K
ICAgICAgICB7DQogICAgICAgICAgICAjIGR5bmFtaWMgcnVudGltZSBvbmx5IGNvbWVzIGlu
IHRoZSBtdWx0aS10aHJlYWRpbmcgZmxhdm9yDQogICAgICAgICAgICBpZiA8cnVudGltZS1s
aW5rPmR5bmFtaWMgaW4gJChwcm9wZXJ0aWVzKSB7IHJlcXVpcmVtZW50cyArPSA8dGhyZWFk
aW5nPm11bHRpIDsgfQ0KICAgICAgICAgICAgaWYgWyBNQVRDSCAuKihzdGxwKS4qIDogJCh0
b29sc2V0KSBdIHx8DQogICAgICAgICAgICAgICAgWyBNQVRDSCAuKihzdGxwKS4qIDogJChw
cm9wZXJ0aWVzOkcpIF0NCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAjIFNUTFBv
cnQgZG9lc24ndCBoYXZlIGFueSBzaW5nbGUtdGhyZWFkZWQgYnVpbGRzLCBzbyB3ZSdyZSBn
b2luZw0KICAgICAgICAgICAgICAgICMgdG8gZm9yY2UgYWxsIHN1Y2ggdGFyZ2V0cyB0byBi
ZSBidWlsdCB3aXRoIG11bHRpdGhyZWFkIHN1cHBvcnQuDQogICAgICAgICAgICAgICAgIyBU
aGlzIGlzIGVzc2VudGlhbGx5IGEgdXNhZ2UtcmVxdWlyZW1lbnQgb24gdGhlIHN0bHBvcnQg
bGlicmFyeS4NCiAgICAgICAgICAgICAgICByZXF1aXJlbWVudHMgKz0gPHRocmVhZGluZz5t
dWx0aSA7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgY2FzZSB2YyogOg0K
ICAgICAgICB7DQogICAgICAgICAgICAjIGR5bmFtaWMgcnVudGltZSBvbmx5IGNvbWVzIGlu
IHRoZSBtdWx0aS10aHJlYWRpbmcgZmxhdm9yDQogICAgICAgICAgICBpZiA8cnVudGltZS1s
aW5rPmR5bmFtaWMgaW4gJChwcm9wZXJ0aWVzKSB7IHJlcXVpcmVtZW50cyArPSA8dGhyZWFk
aW5nPm11bHRpIDsgfQ0KICAgICAgICAgICAgaWYgWyBNQVRDSCAuKihzdGxwKS4qIDogJCh0
b29sc2V0KSBdIHx8DQogICAgICAgICAgICAgICAgWyBNQVRDSCAuKihzdGxwKS4qIDogJChw
cm9wZXJ0aWVzOkcpIF0NCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAjIFNUTFBv
cnQgZG9lc24ndCBoYXZlIGFueSBzaW5nbGUtdGhyZWFkZWQgYnVpbGRzLCBzbyB3ZSdyZSBn
b2luZw0KICAgICAgICAgICAgICAgICMgdG8gZm9yY2UgYWxsIHN1Y2ggdGFyZ2V0cyB0byBi
ZSBidWlsdCB3aXRoIG11bHRpdGhyZWFkIHN1cHBvcnQuDQogICAgICAgICAgICAgICAgIyBU
aGlzIGlzIGVzc2VudGlhbGx5IGEgdXNhZ2UtcmVxdWlyZW1lbnQgb24gdGhlIHN0bHBvcnQg
bGlicmFyeS4NCiAgICAgICAgICAgICAgICByZXF1aXJlbWVudHMgKz0gPHRocmVhZGluZz5t
dWx0aSA7DQogICAgICAgICAgICAgICAgIyBTVExQb3J0IGRvZXNuJ3Qgc3VwcG9ydCA8c3Rs
cG9ydC1pb3N0cmVhbT5vZmYgd2l0aCB2YzcgYW5kIHZjOC4NCiAgICAgICAgICAgICAgICAj
IFRoaXMgaXMgZXNzZW50aWFsbHkgYSB1c2FnZS1yZXF1aXJlbWVudCBvbiB0aGUgc3RscG9y
dCBsaWJyYXJ5Lg0KICAgICAgICAgICAgICAgIHN3aXRjaCAkKHRvb2xzZXQpDQogICAgICAg
ICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBjYXNlIHZjNyogOiByZXF1aXJlbWVu
dHMgKz0gPHN0bHBvcnQtaW9zdHJlYW0+b24gOw0KICAgICAgICAgICAgICAgICAgICBjYXNl
IHZjOCogOiByZXF1aXJlbWVudHMgKz0gPHN0bHBvcnQtaW9zdHJlYW0+b24gOw0KICAgICAg
ICAgICAgICAgICAgICBjYXNlIHZjLTcqIDogcmVxdWlyZW1lbnRzICs9IDxzdGxwb3J0LWlv
c3RyZWFtPm9uIDsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSB2Yy04KiA6IHJlcXVpcmVt
ZW50cyArPSA8c3RscG9ydC1pb3N0cmVhbT5vbiA7DQogICAgICAgICAgICAgICAgfQ0KICAg
ICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGNhc2UgaW50ZWwtd2luMzIqIDoNCiAg
ICAgICAgew0KICAgICAgICAgICAgIyBkeW5hbWljIHJ1bnRpbWUgb25seSBjb21lcyBpbiB0
aGUgbXVsdGktdGhyZWFkaW5nIGZsYXZvcg0KICAgICAgICAgICAgaWYgPHJ1bnRpbWUtbGlu
az5keW5hbWljIGluICQocHJvcGVydGllcykgeyByZXF1aXJlbWVudHMgKz0gPHRocmVhZGlu
Zz5tdWx0aSA7IH0NCiAgICAgICAgfQ0KICAgICAgICBjYXNlIGl3KiA6DQogICAgICAgIHsN
CiAgICAgICAgICAgICMgZHluYW1pYyBydW50aW1lIG9ubHkgY29tZXMgaW4gdGhlIG11bHRp
LXRocmVhZGluZyBmbGF2b3INCiAgICAgICAgICAgIGlmIDxydW50aW1lLWxpbms+ZHluYW1p
YyBpbiAkKHByb3BlcnRpZXMpIHsgcmVxdWlyZW1lbnRzICs9IDx0aHJlYWRpbmc+bXVsdGkg
OyB9DQogICAgICAgIH0NCiAgICB9DQogICAgcmVxdWlyZW1lbnRzID0gWyB1bmlxdWUgJChy
ZXF1aXJlbWVudHMpIF0gOw0KICAgIGxvY2FsIGZyZWUtZmVhdHVyZS1yZXF1aXJlbWVudHMg
PSBbIHNlZ3JlZ2F0ZS1mcmVlLXByb3BlcnRpZXMgcHJvcGVydGllcyBdIDsNCiAgICBwcm9w
ZXJ0aWVzID0NCiAgICAgICAgWyBzb3J0DQogICAgICAgICAgICBbIGRpZmZlcmVuY2UgJChw
cm9wZXJ0aWVzKSA6IFsgZ2V0LXByb3BlcnRpZXMgJChyZXF1aXJlbWVudHM6RykgOiAkKHBy
b3BlcnRpZXMpIF0gXQ0KICAgICAgICAgICAgJChyZXF1aXJlbWVudHMpDQogICAgICAgICAg
ICBdDQogICAgICAgICQoZnJlZS1mZWF0dXJlLXJlcXVpcmVtZW50cykNCiAgICAgICAgOw0K
ICAgIHJldHVybiAkKHN1YnZhcmlhbnQtcGF0aCkgJChwcm9wZXJ0aWVzKSA7DQp9DQo=
 --------------070906060407020908080708-- 

Boost-Build list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk