Problem with pcons-2.2
[email protected] Wed, 19 Nov 2003 09:55:12 -0500
| Newsgroups | gmane.comp.gnu.cons.general |
|---|---|
| Message-ID | <[email protected]> |
---------10b8b12eaa660e010b8b12eaa660e0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Disposition: inline
RV (and anyone else out there who is listening),
Here at Marconi (the birthplace of cons!) we are still using cons, and it works well for us. However, I have been investigating the use of pcons, and we are having a problem with it. What I did was to take our version of cons-2.2 (it has a few minor changes to it), and I applied the pcons.diff to it (pcons.diff comes from http://www.baldmt.com/parallel-cons/). Then, I tried to compile our tree with -j10 -- i.e., up to 10 parallel compiles. The problem is that we have a few places where a target depends on a single file, via two different branches. I've reproduced the problem in a very small Construct, which follows:
$cons = new cons();
Default(end);
Command $cons "step1", "start",
qq(sleep 3 && cp %< %>);
Command $cons "step2", "step1",
qq(sleep 2 && cat %< > %> && echo " -> %>" >> %>);
Command $cons "step3", "step2",
qq(sleep 2 && cat %< > %> && echo " -> %>" >> %>);
# NOTE: this works and produces this output in file "end":
# start
# -> step2
# -> step3
# start
#
# Command $cons "end", "step3", "step1",
# qq( cat %< > %> );
#
# NOTE: this doesn't work: it produces "cat: cannot open step1". The output
# looks like this:
#
# pluto:~/cons-2.2/test
# 93 > ~/pcons-2.2
# sleep 3 && cp start step1
# sleep 2 && cat step1 > step2 && echo " -> step2" >> step2
# cat: cannot open step1
# waited: step2 on: 2952parent
# pcons-2.2: *** [step2] Error 2
# pcons-2.2: errors constructing step2
#
# What we want to see is a "waited" message after the "sleep 3 ..." line, and
# before the "sleep 2" line.
#
Command $cons "end", "step1", "step3",
qq( cat %< > %> );
------- end of Construct file -------
So, you can see that this is a very simple example. And, if we can get pcons to work with this, we can significantly speed up our build process.
Now, I know that cons is dead. SCons is where it is at. Yes, yes, I know all this. But, we are just not going to switch to SCons for a while -- no one here knows Python, and we have literally hundreds of Construct/Conscript files in place that work, and some of which are not simple. So, SCons just isn't going to happen.
I was wondering if anyone out there understood the obfuscated Perl code that is Cons, and could take a quick look and make a fix so that the above Construct file works properly. I'm attaching our version of pcons.
Thanks.
Vic Norman
__________________________________________________________________
McAfee VirusScan Online from the Netscape Network.
Comprehensive protection for your entire computer. Get your free trial today!
http://channels.netscape.com/ns/computing/mcafee/index.jsp?promo=393397
Get AOL Instant Messenger 5.1 free of charge. Download Now!
http://aim.aol.com/aimnew/Aim/register.adp?promo=380455
---------10b8b12eaa660e010b8b12eaa660e0
Content-Type: application/octet-stream; name="old-pcons"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="old-pcons"
Content-Description: old-pcons
IyEvdXNyL2Jpbi9lbnYgcGVybAoKIyBOT1RFOiAgQ29ucyBpbnRlbnRpb25hbGx5IGRvZXMg
bm90IHVzZSB0aGUgInBlcmwgLXciIG9wdGlvbiBvcgojICJ1c2Ugc3RyaWN0LiIgIEJlY2F1
c2UgQ29ucyAiY29uZmlndXJhdGlvbiBmaWxlcyIgYXJlIGFjdHVhbGx5CiMgUGVybCBzY3Jp
cHRzLCBlbmFibGluZyB0aG9zZSByZXN0cmljdGlvbnMgaGVyZSB3b3VsZCBmb3JjZSB0aGVt
CiMgb24gZXZlcnkgdXNlcidzIGNvbmZpZyBmaWxlcywgd2FudGVkIG9yIG5vdC4gIFdvdWxk
IHVzZXJzIHdyaXRlCiMgImJldHRlciIgQ29uc3RydWN0IGFuZCBDb25zY3JpcHQgZmlsZXMg
aWYgd2UgZm9yY2VkICJ1c2Ugc3RyaWN0IgojIG9uIHRoZW0/ICBQcm9iYWJseS4gIEJ1dCB3
ZSB3YW50IHBlb3BsZSB0byB1c2UgQ29ucyB0byBnZXQgd29yawojIGRvbmUsIG5vdCBmb3Jj
ZSBldmVyeW9uZSB0byBiZWNvbWUgYSBQZXJsIGd1cnUgdG8gdXNlIGl0LCBzbyB3ZQojIGRv
bid0IGluc2lzdC4KIwojIFRoYXQgc2FpZCwgQ29ucycgY29kZSBpcyBib3RoICJwZXJsIC13
IiBhbmQgInVzZSBzdHJpY3QiIGNsZWFuLgojIFJlZ3Jlc3Npb24gdGVzdHMga2VlcCB0aGUg
Y29kZSBob25lc3QgYnkgY2hlY2tpbmcgZm9yIHdhcm5pbmdzCiMgYW5kICJ1c2Ugc3RyaWN0
IiBmYWlsdXJlcy4KCiMgJElkOiBjb25zLnBsLHYgMS4xMjkgMjAwMC8xMS8xNiAxMjoyMjoz
NyBrbmlnaHQgRXhwICQKCnVzZSB2YXJzIHF3KCAkdmVyX251bSAkdmVyX3JldiAkdmVyc2lv
biApOwoKJHZlcl9udW0gPSAiMi4yIjsKJHZlcl9yZXYgPSAiLjAucGFycmFsbGVsIjsKJHZl
cnNpb24gPSBzcHJpbnRmICJUaGlzIGlzIENvbnMgJXMlcyAiIC4KCSAgICAnKCRJZDogY29u
cy5wbCx2IDEuMTI5IDIwMDAvMTEvMTYgMTI6MjI6Mzcga25pZ2h0IEV4cCAkKScuICJcbiIs
CgkgICAgJHZlcl9udW0sICR2ZXJfcmV2OwoKIyBDb25zOiBBIFNvZnR3YXJlIENvbnN0cnVj
dGlvbiBUb29sLgojIENvcHlyaWdodCAoYykgMTk5Ni0yMDAwIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLgojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIFRo
aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCiMKIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhp
cyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KIyB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBT
dWl0ZSAzMzAsCiMgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCgpyZXF1aXJlIDUuMDAy
OwojIFNlZSB0aGUgTk9URSBhYm92ZSBhYm91dCB3aHkgQ29ucyBkb2Vzbid0ICJ1c2Ugc3Ry
aWN0Ii4KdXNlIGludGVnZXI7CnVzZSBDd2Q7CnVzZSBGaWxlOjpDb3B5OwoKdXNlIHZhcnMg
cXcoICRfV0lOMzIgJF9hICRfZXhlICRfbyAkX3NvICk7CgojLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgRGV0
ZXJtaW5lIGlmIHJ1bm5pbmcgb24gd2luMzIgcGxhdGZvcm0gLSBlaXRoZXIgV2luZG93cyBO
VCBvciA5NQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCgp1c2UgdmFycyBxdyggJFBBVEhfU0VQQVJBVE9SICRp
c3dpbjMyICRfV0lOMzIgJHVzYWdlICRpbmRlbnQgQHRhcmdldHMgKTsKCkJFR0lOIHsKICAg
IHVzZSBDb25maWc7CgogICAgIyBpZiB0aGUgdmVyc2lvbiBpcyA1LjAwMywgd2UgY2FuIGNo
ZWNrICReTwogICAgaWYgKCRdIDwgIDUuMDAzKSB7CglldmFsKCJyZXF1aXJlIFdpbjMyIik7
CgkkX1dJTjMyID0gKCEkQCk7CiAgICB9IGVsc2UgewoJJF9XSU4zMiA9ICgkXk8gZXEgIk1T
V2luMzIiKSA/IDEgOiAwOwogICAgfQoKICAgICMgRmV0Y2ggdGhlIFBBVEggc2VwYXJhdG9y
IGZyb20gQ29uZmlnOwogICAgIyBwcm92aWRlIG91ciBvbGQgZGVmYXVsdHMgaW4gY2FzZSBp
dCdzIG5vdCBzZXQuCiAgICAkUEFUSF9TRVBBUkFUT1IgPSAkQ29uZmlne3BhdGhfc2VwfTsK
ICAgICRQQVRIX1NFUEFSQVRPUiA9ICRfV0lOMzIgPyAnOycgOiAnOicgaWYgISBkZWZpbmVk
ICRQQVRIX1NFUEFSQVRPUjsKCiAgICAjIEZldGNoIGZpbGUgc3VmZml4ZXMgZnJvbSBDb25m
aWcsCiAgICAjIGFjY29tb2RhdGluZyBkaWZmZXJlbmNlcyBpbiB0aGUgQ29uZmlnIHZhcmlh
YmxlcwogICAgIyB1c2VkIGJ5IGRpZmZlcmVudCBQZXJsIHZlcnNpb25zLgogICAgJF9leGUg
PSAkQ29uZmlne19leGV9OwogICAgJF9leGUgPSAkQ29uZmlne2V4ZV9leHR9IGlmICEgZGVm
aW5lZCAkX2V4ZTsKICAgICRfZXhlID0gJF9XSU4zMiA/ICcuZXhlJyA6ICcnIGlmICEgZGVm
aW5lZCAkX2V4ZTsKICAgICRfbyA9ICRDb25maWd7X299OwogICAgJF9vID0gJENvbmZpZ3tv
YmpfZXh0fSAgaWYgISBkZWZpbmVkICRfbzsKICAgICRfbyA9ICRfV0lOMzIgPyAnLm9iaicg
OiAnLm8nIGlmICEgZGVmaW5lZCAkX287CiAgICAkX2EgPSAkQ29uZmlne19hfTsKICAgICRf
YSA9ICRDb25maWd7bGliX2V4dH0gaWYgISBkZWZpbmVkICRfYTsKICAgICRfYSA9ICRfV0lO
MzIgPyAnLmxpYicgOiAnLmEnIGlmICEgZGVmaW5lZCAkX2E7CiAgICAkX3NvID0gIi4kQ29u
Zmlne3NvfSI7CiAgICAkX3NvID0gJF9XSU4zMiA/ICcuZGxsJyA6ICcuc28nIGlmICEgZGVm
aW5lZCAkX3NvOwp9CgojIEZsdXNoIHN0ZG91dCBlYWNoIHRpbWUuCiR8ID0gMTsKCiMgU2Vl
ZCByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4Kc3JhbmQodGltZSAuICQkKTsgIyB0aGlzIHdv
cmtzIGJldHRlciB0aGFuIHRpbWUgXiAkJCBpbiBwZXJsZnVuYyBtYW5wYWdlLgoKJHVzYWdl
ID0gcSgKVXNhZ2U6IGNvbnMgPGFyZ3VtZW50cz4gLS0gPGNvbnN0cnVjdC1hcmdzPgoKQXJn
dW1lbnRzIGNhbiBiZSBhbnkgb2YgdGhlIGZvbGxvd2luZywgaW4gYW55IG9yZGVyOgoKICA8
dGFyZ2V0cz4JQnVpbGQgdGhlIHNwZWNpZmllZCB0YXJnZXRzLiBJZiA8dGFyZ2V0PiBpcyBh
IGRpcmVjdG9yeQoJCXJlY3Vyc2l2ZWx5IGJ1aWxkIGV2ZXJ5dGhpbmcgd2l0aGluIHRoYXQg
ZGlyZWN0b3J5LgoKICArPHBhdHRlcm4+CUxpbWl0IHRoZSBjb25zIHNjcmlwdHMgY29uc2lk
ZXJlZCB0byBqdXN0IHRob3NlIHRoYXQKCQltYXRjaCA8cGF0dGVybj4uIE11bHRpcGxlICsg
YXJndW1lbnRzIGFyZSBhY2NlcHRlZC4KCiAgPG5hbWU+PTx2YWw+CVNldHMgPG5hbWU+IHRv
IHZhbHVlIDx2YWw+IGluIHRoZSBBUkcgaGFzaCBwYXNzZWQgdG8gdGhlCgkJdG9wLWxldmVs
IENvbnN0cnVjdCBmaWxlLgoKICAtY2MgICAgICAgICAgIFNob3cgY29tbWFuZCB0aGF0IHdv
dWxkIGhhdmUgYmVlbiBleGVjdXRlZCwgd2hlbgoJCXJldHJpZXZpbmcgZnJvbSBjYWNoZS4g
Tm8gaW5kaWNhdGlvbiB0aGF0IHRoZSBmaWxlCgkJaGFzIGJlZW4gcmV0cmlldmVkIGlzIGdp
dmVuOyB0aGlzIGlzIHVzZWZ1bCBmb3IKCQlnZW5lcmF0aW5nIGJ1aWxkIGxvZ3MgdGhhdCBj
YW4gYmUgY29tcGFyZWQgd2l0aAoJCXJlYWwgYnVpbGQgbG9ncy4KCiAgLWNkICAgICAgICAg
ICBEaXNhYmxlIGFsbCBjYWNoaW5nLiBEbyBub3QgcmV0cmlldmUgZnJvbSBjYWNoZSBub3IK
CQlmbHVzaCB0byBjYWNoZS4KCiAgLWNyICAgICAgICAgICBCdWlsZCBkZXBlbmRlbmNpZXMg
aW4gcmFuZG9tIG9yZGVyLiBUaGlzIGlzIHVzZWZ1bCB3aGVuCgkJYnVpbGRpbmcgbXVsdGlw
bGUgc2ltaWxhciB0cmVlcyB3aXRoIGNhY2hpbmcgZW5hYmxlZC4KCiAgLWNzICAgICAgICAg
ICBTeW5jaHJvbml6ZSBleGlzdGluZyBidWlsZCB0YXJnZXRzIHRoYXQgYXJlIGZvdW5kIHRv
IGJlCgkJdXAtdG8tZGF0ZSB3aXRoIGNhY2hlLiBUaGlzIGlzIHVzZWZ1bCBpZiBjYWNoaW5n
IGhhcwoJCWJlZW4gZGlzYWJsZWQgd2l0aCAtY2Mgb3IganVzdCByZWNlbnRseSBlbmFibGVk
IHdpdGgKCQlVc2VDYWNoZS4KCiAgLWQgICAgICAgICAgICBFbmFibGUgZGVwZW5kZW5jeSBk
ZWJ1Z2dpbmcuCgogIC1mIDxmaWxlPglVc2UgdGhlIHNwZWNpZmllZCBmaWxlIGluc3RlYWQg
b2YgIkNvbnN0cnVjdCIgKGJ1dCBmaXJzdAoJCWNoYW5nZSB0byBjb250YWluaW5nIGRpcmVj
dG9yeSBvZiA8ZmlsZT4pLgoKICAtaCAgICAgICAgICAgIFNob3cgYSBoZWxwIG1lc3NhZ2Ug
bG9jYWwgdG8gdGhlIGN1cnJlbnQgYnVpbGQgaWYKCQlvbmUgc3VjaCBpcyBkZWZpbmVkLCAg
YW5kIGV4aXQuCgogIC1rCQlLZWVwIGdvaW5nIGFzIGZhciBhcyBwb3NzaWJsZSBhZnRlciBl
cnJvcnMuCgogIC1vIDxmaWxlPglSZWFkIG92ZXJyaWRlIGZpbGUgPGZpbGU+LgoKICAtcAkJ
U2hvdyBjb25zdHJ1Y3Rpb24gcHJvZHVjdHMgaW4gc3BlY2lmaWVkIHRyZWVzLgogIC1wYQkJ
U2hvdyBjb25zdHJ1Y3Rpb24gcHJvZHVjdHMgYW5kIGFzc29jaWF0ZWQgYWN0aW9ucy4KICAt
cHcJCVNob3cgcHJvZHVjdHMgYW5kIHdoZXJlIHRoZXkgYXJlIGRlZmluZWQuCgogIC1xCQlC
ZSBxdWlldCBhYm91dCBJbnN0YWxsaW5nIGFuZCBSZW1vdmluZyB0YXJnZXRzLgoKICAtcgkJ
UmVtb3ZlIGNvbnN0cnVjdGlvbiBwcm9kdWN0cyBhc3NvY2lhdGVkIHdpdGggPHRhcmdldHM+
CgogIC1SIDxyZXBvcz4JU2VhcmNoIGZvciBmaWxlcyBpbiA8cmVwb3M+LiAgTXVsdGlwbGUg
LVIgPHJlcG9zPgoJCWRpcmVjdG9yaWVzIGFyZSBzZWFyY2hlZCBpbiB0aGUgb3JkZXIgc3Bl
Y2lmaWVkLgoKICAtdCAgICAgICAgICAgIFRyYXZlcnNlIHVwIHRoZSBkaXJlY3RvcnkgaGll
cmFyY2h5IGxvb2tpbmcgZm9yIGEKCQlDb25zdHJ1Y3QgZmlsZSwgaWYgbm9uZSBleGlzdHMg
aW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgoJCShUYXJnZXRzIHdpbGwgYmUgbW9kaWZpZWQg
dG8gYmUgcmVsYXRpdmUgdG8gdGhlCgkJQ29uc3RydWN0IGZpbGUuKQoKICAtdgkJU2hvdyBj
b25zIHZlcnNpb24gYW5kIGNvbnRpbnVlIHByb2Nlc3NpbmcuCiAgLVYgICAgICAgICAgICBT
aG93IGNvbnMgdmVyc2lvbiBhbmQgZXhpdC4KCiAgLXdmIDxmaWxlPiAgICBXcml0ZSBhbGwg
ZmlsZW5hbWVzIGNvbnNpZGVyZWQgaW50byA8ZmlsZT4uCgogIC14CQlTaG93IHRoaXMgbWVz
c2FnZSBhbmQgZXhpdC4KCiAgLWogPGpvYnM+ICAgICBBbGxvdyB1cCB0byA8am9icz4gam9i
cyB0byBiZSBzcGF3bmVkIGluIHBhcmFsbGVsCgogICBQbGVhc2UgcmVwb3J0IGFueSBzdWdn
ZXN0aW9ucyB0aHJvdWdoIHRoZSBjb25zLWRpc2N1c3NAZ251Lm9yZyBtYWlsaW5nCiAgIGxp
c3QuCgogICBUbyBzdWJzY3JpYmUsIHNlbmQgbWFpbCB0byBjb25zLWRpc2N1c3MtcmVxdWVz
dEBnbnUub3JnIHdpdGggYm9keQogICAnc3Vic2NyaWJlJy4KCiAgIElmIHlvdSBmaW5kIGEg
YnVnLCBwbGVhc2UgcmVwb3J0IGl0IHRocm91Z2ggdGhlIGJ1Zy1jb25zQGdudS5vcmcKICAg
bWFpbGluZyBsaXN0LgoKICAgSW5mb3JtYXRpb24gYWJvdXQgQ09OUyBjYW4gYmUgb2J0YWlu
ZWQgZnJvbSB0aGUgb2ZmaWNpYWwgY29ucyB3ZWIgc2l0ZQogICBodHRwOi8vd3d3LmRzbWl0
LmNvbS9jb25zLyBvciBpdHMgbWlycm9ycyAobGlzdGVkIHRoZXJlKS4KCiAgIFRoZSBjb25z
IG1haW50YWluZXJzIGNhbiBiZSBjb250YWN0ZWQgYnkgZW1haWwgYXQgY29ucy1tYWludGFp
bmVyc0BnbnUub3JnCgogICBVc2VyIGRvY3VtZW50YXRpb24gb2YgY29ucyBpcyBjb250YWlu
ZWQgaW4gY29ucyBhbmQgY2FuIGJlIG9idGFpbmVkCiAgIGJ5IGRvaW5nICdwZXJsZG9jIC9w
YXRoL3RvL2NvbnMnLgoKKTsKCiMgU2ltcGxpZnkgcHJvZ3JhbSBuYW1lLCBpZiBpdCBpcyBh
IHBhdGguCnsKICAgIG15ICgkdm9sLCAkZGlyLCAkZmlsZSkgPSBGaWxlOjpTcGVjLT5zcGxp
dHBhdGgoRmlsZTo6U3BlYy0+Y2Fub25wYXRoKCQwKSk7CiAgICAkMCA9ICRmaWxlOwp9Cgoj
IERlZmF1bHQgcGFyYW1ldGVycy4KJHBhcmFtOjp0b3BmaWxlID0gJ0NvbnN0cnVjdCc7CSMg
VG9wLWxldmVsIGNvbnN0cnVjdGlvbiBmaWxlLgokcGFyYW06Omluc3RhbGwgPSAxOwkJIyBT
aG93IGluc3RhbGxhdGlvbnMKJHBhcmFtOjpidWlsZCA9IDE7CQkjIEJ1aWxkIHRhcmdldHMK
IyMjICRwYXJhbTo6c2hvdyA9IDE7CQkjIFNob3cgYnVpbGRpbmcgb2YgdGFyZ2V0cy4KJHBh
cmFtOjpzaWdwcm8gPSAnbWQ1JzsJCSMgU2lnbmF0dXJlIHByb3RvY29sLgokcGFyYW06OmRl
cGZpbGUgPSAnJzsJCSMgV3JpdGUgYWxsIGRlcHMgb3V0IHRvIHRoaXMgZmlsZQokcGFyYW06
OnNhbHQgPSAnJzsJCSMgU2FsdCBkZXJpdmVkIGZpbGUgc2lnbmF0dXJlcyB3aXRoIHRoaXMu
CiRwYXJhbTo6cmVwX3NpZ190aW1lc19vayA9IDE7CSMgUmVwb3NpdG9yeSAuY29uc2lnbiB0
aW1lcyBhcmUgaW4gc3luYwoJCQkJIyAgIHcvZmlsZXMuCiRwYXJhbTo6Y29uc2NyaXB0X2No
ZGlyID0gMDsJIyBDaGFuZ2UgZGlyIHRvIENvbnNjcmlwdCBkaXJlY3RvcnkKJHBhcmFtOjpx
dWlldCA9IDA7CQkjIHNob3VsZCB3ZSBzaG93IHRoZSBjb21tYW5kIGJlaW5nIGV4ZWN1dGVk
LgokcGFyYW06Om1heF9qb2JzID0gMTsKIwokaW5kZW50ID0gJyc7CgojIERpc3BsYXkgYSBj
b21tYW5kIHdoaWxlIGV4ZWN1dGluZyBvciBvdGhlcndpc2UuIFRoaXMKIyBzaG91bGQgYmUg
Y2FsbGVkIGJ5IGNvbW1hbmQgYnVpbGRlciBhY3Rpb24gbWV0aG9kcy4Kc3ViIHNob3djb20g
ewogICAgcHJpbnQoJGluZGVudCAuICRfWzBdIC4gIlxuIik7Cn0KCiMgRGVmYXVsdCBlbnZp
cm9ubWVudC4KIyBUaGlzIGNvbnRhaW5zIG9ubHkgdGhlIGNvbXBsZXRlbHkgcGxhdGZvcm0t
aW5kZXBlbmRlbnQgaW5mb3JtYXRpb24KIyB3ZSBjYW4gZmlndXJlIG91dC4gIFBsYXRmb3Jt
LXNwZWNpZmljIGluZm9ybWF0aW9uIChVTklYLCBXaW4zMikKIyBnZXRzIGFkZGVkIGJlbG93
LgpAcGFyYW06OmRlZmF1bHRzID0gKAogICAgICdTVUZFWEUnCSAgICA9PiAkX2V4ZSwJCQkJ
IyAnJyBvbiBVTklYIHN5c3RlbXMKICAgICAnU1VGTElCJwkgICAgPT4gJF9hLAkJCQkjICcu
YScgb24gVU5JWCBzeXN0ZW1zCiAgICAgJ1NVRkxJQlMnICAgICAgPT4gIiRfc286JF9hIiwJ
CQkjICcuc286LmEnIG9uIFVOSVgKICAgICAnU1VGT0JKJwkgICAgPT4gJF9vLAkJCQkjICcu
bycgb24gVU5JWCBzeXN0ZW1zCiAgICAgJ1NVRk1BUCcgICAgICAgPT4gewoJICcuYycgID0+
ICdidWlsZDo6Y29tbWFuZDo6Y2MnLAoJICcucycgID0+ICdidWlsZDo6Y29tbWFuZDo6Y2Mn
LAoJICcuUycgID0+ICdidWlsZDo6Y29tbWFuZDo6Y2MnLAoJICcuQycgID0+ICdidWlsZDo6
Y29tbWFuZDo6Y3h4JywKCSAnLmNjJyA9PiAnYnVpbGQ6OmNvbW1hbmQ6OmN4eCcsCgkgJy5j
eHgnPT4gJ2J1aWxkOjpjb21tYW5kOjpjeHgnLAoJICcuY3BwJz0+ICdidWlsZDo6Y29tbWFu
ZDo6Y3h4JywKCSAnLmMrKyc9PiAnYnVpbGQ6OmNvbW1hbmQ6OmN4eCcsCgkgJy5DKysnPT4g
J2J1aWxkOjpjb21tYW5kOjpjeHgnLAogICAgIH0sCik7CgppZiAoJF9XSU4zMikgewogICAg
IyBEZWZhdWx0cyBmb3IgV2luMzIuCiAgICAjIERlZmluZWQgZm9yIFZDKysgNi4wIGJ5IEdy
ZWcgU3BlbmNlciA8Z3JlZ19zcGVuY2VyQGFjbS5vcmc+LgogICAgIyBZb3VyIG1pbGVhZ2Ug
bWF5IHZhcnkuCiAgICBteSBAd2luID0gKAoJJ0NDJyAgICAgICAgICAgICA9PiAnY2wnLAoJ
J0NGTEFHUycgICAgICAgICA9PiAnL25vbG9nbycsCgknQ0NDT00nICAgICAgICAgID0+ICcl
Q0MgJUNGTEFHUyAlX0lGTEFHUyAvYyAlPCAvRm8lPicsCgknQ1hYJyAgICAgICAgICAgID0+
ICclQ0MnLAoJJ0NYWEZMQUdTJyAgICAgICA9PiAnJUNGTEFHUycsCgknQ1hYQ09NJyAgICAg
ICAgID0+ICclQ1hYICVDWFhGTEFHUyAlX0lGTEFHUyAvYyAlPCAvRm8lPicsCgknSU5DRElS
UFJFRklYJyAgID0+ICcvSScsCgknTElOSycgICAgICAgICAgID0+ICdsaW5rJywKCSdMSU5L
Q09NJyAgICAgICAgPT4gJyVMSU5LICVMREZMQUdTIC9vdXQ6JT4gJTwgJV9MRElSUyAlTElC
UycsCgknTElOS01PRFVMRUNPTScgID0+ICclTEQgL3IgL28gJT4gJTwnLAoJJ0xJQkRJUlBS
RUZJWCcgICA9PiAnL0xJQlBBVEg6JywKCSdBUicgICAgICAgICAgICAgPT4gJ2xpYicsCgkn
QVJGTEFHUycgICAgICAgID0+ICcvbm9sb2dvICcsCgknQVJDT00nICAgICAgICAgID0+ICIl
QVIgJUFSRkxBR1MgL291dDolPiAlPCIsCgknUkFOTElCJyAgICAgICAgID0+ICcnLAoJJ0xE
JyAgICAgICAgICAgICA9PiAnbGluaycsCgknTERGTEFHUycgICAgICAgID0+ICcvbm9sb2dv
ICcsCgknUFJFRkxJQicgICAgICAgID0+ICcnLAogICAgKTsKICAgIHB1c2goQHBhcmFtOjpk
ZWZhdWx0cywgQHdpbik7Cn0gZWxzZSB7CiAgICAjIERlZmF1bHRzIGZvciBhIHR5cGljYWwg
KD8pIFVOSVggcGxhdGZvcm0uCiAgICAjIFlvdXIgbWlsZWFnZSBtYXkgdmFyeS4KICAgIG15
IEB1bml4ID0gKAoJJ0NDJyAgICAgICAgICAgICA9PiAnY2MnLAoJJ0NGTEFHUycgICAgICAg
ICA9PiAnJywKCSdDQ0NPTScgICAgICAgICAgPT4gJyVDQyAlQ0ZMQUdTICVfSUZMQUdTIC1j
ICU8IC1vICU+JywKCSdDWFgnICAgICAgICAgICAgPT4gJyVDQycsCgknQ1hYRkxBR1MnICAg
ICAgID0+ICclQ0ZMQUdTJywKCSdDWFhDT00nICAgICAgICAgPT4gJyVDWFggJUNYWEZMQUdT
ICVfSUZMQUdTIC1jICU8IC1vICU+JywKCSdJTkNESVJQUkVGSVgnICAgPT4gJy1JJywKCSdM
SU5LJyAgICAgICAgICAgPT4gJyVDWFgnLAoJJ0xJTktDT00nICAgICAgICA9PiAnJUxJTksg
JUxERkxBR1MgLW8gJT4gJTwgJV9MRElSUyAlTElCUycsCgknTElOS01PRFVMRUNPTScgID0+
ICclTEQgLXIgLW8gJT4gJTwnLAoJJ0xJQkRJUlBSRUZJWCcgICA9PiAnLUwnLAoJJ0FSJyAg
ICAgICAgICAgICA9PiAnYXInLAoJJ0FSRkxBR1MnICAgICAgICA9PiAncicsICMgcnM/CiAg
ICAgICAgIyBtdWx0aS1jb21tYW5kcyAgYXJlIGJyb2tlbiB3aXRoIHBhcmFsbGVsIGNvbnMs
IG11c3QgdXNlICYmIGluc3RlYWQKICAgICAgICAjIG9mIFxuCgknQVJDT00nICAgICAgICAg
ID0+ICIlQVIgJUFSRkxBR1MgJT4gJTwgJiYgJVJBTkxJQiAlPiIsCgknUkFOTElCJyAgICAg
ICAgID0+ICdyYW5saWInLAoJJ0FTJyAgICAgICAgICAgICA9PiAnYXMnLAoJJ0FTRkxBR1Mn
ICAgICAgICA9PiAnJywKCSdBU0NPTScgICAgICAgICAgPT4gJyVBUyAlQVNGTEFHUyAlPCAt
byAlPicsCgknTEQnICAgICAgICAgICAgID0+ICdsZCcsCgknTERGTEFHUycgICAgICAgID0+
ICcnLAoJJ1BSRUZMSUInICAgICAgICA9PiAnbGliJywKCSdFTlYnICAgICAgICAgICAgPT4g
eyAnUEFUSCcgPT4gJy9iaW46L3Vzci9iaW4nIH0sCiAgICApOwogICAgcHVzaChAcGFyYW06
OmRlZmF1bHRzLCBAdW5peCk7Cn0KCiMgSGFuZGxlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMu
CndoaWxlIChAQVJHVikgewogICAgJF8gPSBzaGlmdCBAQVJHVjsKICAgIGxhc3QgaWYgL14t
LSQvOwkJIyBBcmd1bWVudCBwYXNzaW5nIHRvIENvbnN0cnVjdC4KICAgICZvcHRpb24sIG5l
eHQJCQlpZiBzL14tLy87CiAgICBwdXNoIChAcGFyYW06OmluY2x1ZGUsICRfKSwgbmV4dAlp
ZiBzL15cKy8vOwogICAgJmVxdWF0ZSwgbmV4dAkJCWlmIC89LzsKICAgIHB1c2ggKEB0YXJn
ZXRzLCAkXyksIG5leHQ7Cn0KCnN1YiBvcHRpb24gewogICAgbXkgJW9wdCA9ICgKCQkgICAg
J2NjJyA9PiAgIHN1YiB7ICRwYXJhbTo6Y2FjaGVjb20gPSAxOyB9LAoJCSAgICAnY2QnID0+
ICAgc3ViIHsgJHBhcmFtOjpjYWNoZWRpc2FibGUgPSAxOyB9LAoJCSAgICAnY3InID0+ICAg
c3ViIHsgJHBhcmFtOjpyYW5kb20gPSAxOyB9LAoJCSAgICAnY3MnID0+ICAgc3ViIHsgJHBh
cmFtOjpjYWNoZXN5bmMgPSAxOyB9LAoJCSAgICAnZCcgPT4gICAgc3ViIHsgJHBhcmFtOjpk
ZXBlbmRzID0gMTsgfSwKCQkgICAgJ2gnID0+ICAgIHN1YiB7ICRwYXJhbTo6bG9jYWxoZWxw
ID0gMTsgfSwKCQkgICAgJ2snID0+ICAgIHN1YiB7ICRwYXJhbTo6a2ZsYWcgPSAxOyB9LAoJ
CSAgICAncCcgPT4gICAgc3ViIHsgJHBhcmFtOjpwZmxhZyA9IDE7CgkJCQkgICAgJHBhcmFt
OjpidWlsZCA9IDA7IH0sCgkJICAgICdwYScgPT4gICBzdWIgeyAkcGFyYW06OnBmbGFnID0g
MTsKCQkJCSAgICAkcGFyYW06OmFmbGFnID0gMTsKCQkJCSAgICAkaW5kZW50ID0gIi4uLiAi
OwoJCQkJICAgICRwYXJhbTo6YnVpbGQgPSAwOyB9LAoJCSAgICAncHcnID0+ICAgc3ViIHsg
JHBhcmFtOjpwZmxhZyA9IDE7CgkJCQkgICAgJHBhcmFtOjp3ZmxhZyA9IDE7CgkJCQkgICAg
JHBhcmFtOjpidWlsZCA9IDA7IH0sCgkJICAgICdxJyA9PiAgICBzdWIgeyAkcGFyYW06OnF1
aWV0ID0gMTsgfSwKCQkgICAgJ3InID0+ICAgIHN1YiB7ICRwYXJhbTo6cmZsYWcgPSAxOwoJ
CQkJICAgICRwYXJhbTo6YnVpbGQgPSAwOyB9LAoJCSAgICAndCcgPT4gICAgc3ViIHsgJHBh
cmFtOjp0cmF2ZXJzZSA9IDE7IH0sCgkJICAgICd2JyA9PiAgICBzdWIgeyBwcmludCgkdmVy
c2lvbik7IH0sCgkJICAgICdWJyA9PiAgICBzdWIgeyBwcmludCgkdmVyc2lvbiksIGV4aXQo
MCk7IH0sCgkJICAgICd4JyA9PiAgICBzdWIgeyBwcmludCgkdXNhZ2UpLCBleGl0IDA7IH0s
CgkJKTsKCiAgICBteSAlb3B0X2FyZyA9ICgKCQkgICAgJ2YnID0+ICAgIHN1YiB7ICRwYXJh
bTo6dG9wZmlsZSA9ICRfWzBdOyB9LAoJCSAgICAnaicgPT4gICAgc3ViIHsgJHBhcmFtOjpt
YXhfam9icyA9ICRfWzBdOyB9LAoJCSAgICAnbycgPT4gICAgc3ViIHsgJHBhcmFtOjpvdmVy
ZmlsZSA9ICRfWzBdOyB9LAoJCSAgICAnUicgPT4gICAgc3ViIHsgc2NyaXB0OjpSZXBvc2l0
b3J5KCRfWzBdKTsgfSwKCQkgICAgJ3dmJyA9PiAgIHN1YiB7ICRwYXJhbTo6ZGVwZmlsZSA9
ICRfWzBdOyB9LAoJCSk7CgogICAgaWYgKGRlZmluZWQgJG9wdHskX30pIHsKCSZ7JG9wdHsk
X319KCk7CglyZXR1cm47CiAgICB9CiAgICAkXyAgPX4gbS8oLikoLiopLzsKICAgIGlmIChk
ZWZpbmVkICRvcHRfYXJneyQxfSkgewoJaWYgKCEgJDIpIHsKCSAgICAkXyA9IHNoaWZ0IEBB
UkdWOwoJICAgIGRpZSgiJDA6IC0kMSBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQuXG4i
KSBpZiAhICRfOwoJfQoJJnskb3B0X2FyZ3skMX19KCQyIHx8ICRfKTsKCXJldHVybjsKICAg
IH0KICAgICRfICA9fiBtLyguLikoLiopLzsKICAgIGlmIChkZWZpbmVkICRvcHRfYXJneyQx
fSkgewoJaWYgKCEgJDIpIHsKCSAgICAkXyA9IHNoaWZ0IEBBUkdWOwoJICAgIGRpZSgiJDA6
IC0kMSBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQuXG4iKSBpZiAhICRfOwoJfQoJJnsk
b3B0X2FyZ3skMX19KCQyIHx8ICRfKTsKCXJldHVybjsKICAgIH0KICAgIGlmICgkXykgewoJ
ZGllIHFxKCQwOiB1bnJlY29nbml6ZWQgb3B0aW9uICItJF8iLiAgVXNlIC14IGZvciBhIHVz
YWdlIG1lc3NhZ2UuXG4pOwogICAgfQp9CgojIFByb2Nlc3MgYW4gZXF1YXRlIGFyZ3VtZW50
ICh2YXI9dmFsKS4Kc3ViIGVxdWF0ZSB7CiAgICBteSgkdmFyLCAkdmFsKSA9IC8oW149XSop
PSguKikvOwogICAgJHNjcmlwdDo6QVJHeyR2YXJ9ID0gJHZhbDsKfQoKIyBEZWZpbmUgZmls
ZSBzaWduYXR1cmUgcHJvdG9jb2wuCidzaWcnLT5zZWxlY3QoJHBhcmFtOjpzaWdwcm8pOwoK
IyBDbGVhbnVwIGFmdGVyIGFuIGludGVycnVwdC4KJFNJR3tJTlR9ID0gJFNJR3tRVUlUfSA9
ICRTSUd7VEVSTX0gPSBzdWIgewogICAgJFNJR3tQSVBFfSA9ICRTSUd7SU5UfSA9ICRTSUd7
UVVJVH0gPSAkU0lHe1RFUk19ID0gJ0lHTk9SRSc7CiAgICAkU0lHe0hVUH0gPSAkU0lHe0lO
VH0gaWYgISAkbWFpbjo6X1dJTjMyOwogICAgd2FybigiXG4kMDoga2lsbGVkXG4iKTsKICAg
ICMgQ2FsbCB0aGlzIGZpcnN0LCB0byBtYWtlIHN1cmUgdGhhdCB0aGlzIHByb2Nlc3NpbmcK
ICAgICMgb2NjdXJzIGV2ZW4gaWYgYSBjaGlsZCBwcm9jZXNzIGRvZXMgbm90IGRpZSAoYW5k
IHdlCiAgICAjIGhhbmcgb24gdGhlIHdhaXQpLgogICAgc2lnOjpoYXNoOjpFTkQoKTsKICAg
IHdhaXQoKTsKICAgIGV4aXQoMSk7Cn07CiRTSUd7SFVQfSA9ICRTSUd7SU5UfSBpZiAhICRt
YWluOjpfV0lOMzI7CgojIENsZWFudXAgYWZ0ZXIgYSBicm9rZW4gcGlwZSAoc29tZW9uZSBw
aXBlZCBvdXIgc3Rkb3V0PykKJFNJR3tQSVBFfSA9IHN1YiB7CiAgICAkU0lHe1BJUEV9ID0g
JFNJR3tIVVB9ID0gJFNJR3tJTlR9ID0gJFNJR3tRVUlUfSA9ICRTSUd7VEVSTX0gPSAnSUdO
T1JFJzsKICAgIHdhcm4oIlxuJDA6IGJyb2tlbiBwaXBlXG4iKTsKICAgIHNpZzo6aGFzaDo6
RU5EKCk7CiAgICB3YWl0KCk7CiAgICBleGl0KDEpOwp9OwoKaWYgKCRwYXJhbTo6ZGVwZmls
ZSkgewogIG9wZW4gKG1haW46OkRFUEZJTEUsICI+Ii4kcGFyYW06OmRlcGZpbGUpIHx8CiAg
ICBkaWUgKCIkMDogY291bGRuJ3Qgb3BlbiAkcGFyYW06OmRlcGZpbGUgKCQhKVxuIik7Cn0K
CiMgSWYgdGhlIHN1cHBsaWVkIHRvcC1sZXZlbCBDb25zY3JpcHQgZmlsZSBpcyBub3QgaW4g
dGhlCiMgY3VycmVudCBkaXJlY3RvcnksIHRoZW4gY2hhbmdlIHRvIHRoYXQgZGlyZWN0b3J5
Lgp7CiAgICBteSAoJHZvbCwgJGRpciwgJGZpbGUpID0gRmlsZTo6U3BlYy0+c3BsaXRwYXRo
KEZpbGU6OlNwZWMtPmNhbm9ucGF0aCgkcGFyYW06OnRvcGZpbGUpKTsKICAgIGlmICgkdm9s
IHx8ICRkaXIpIHsKCW15KCRjZCkgPSBGaWxlOjpTcGVjLT5jYXRwYXRoKCR2b2wsICRkaXIs
IHVuZGVmKTsKCWNoZGlyKCRjZCkgfHwgZGllKCIkMDogY291bGRuJ3QgY2hhbmdlIHRvIGRp
cmVjdG9yeSAkY2QgKCQhKVxuIik7CgkkcGFyYW06OnRvcGZpbGUgPSAkZmlsZTsKICAgIH0K
fQoKIyBXYWxrIHVwIHRoZSBkaXJlY3RvcnkgaGllcmFyY2h5IGxvb2tpbmcgZm9yIGEgQ29u
c2NyaXB0IGZpbGUgKGlmIC10IHNldCkuCm15KCR0YXJnZXRfdG9wKTsKbXkoQHRhcmdldGRp
cikgPSAoKTsKaWYgKCRwYXJhbTo6dHJhdmVyc2UgJiYgISAtZiAkcGFyYW06OnRvcGZpbGUp
IHsKICAgIG15KCR2b2wsICRkaXJzLCAkZmlsZSkgPSBGaWxlOjpTcGVjLT5zcGxpdHBhdGgo
Y3dkKCkpOwogICAgbXkoQGRpcnMpID0gKEZpbGU6OlNwZWMtPnNwbGl0ZGlyKCRkaXJzKSwg
JGZpbGUpOwogICAgd2hpbGUgKCEgLWYgRmlsZTo6U3BlYy0+Y2F0cGF0aCgkdm9sLCBGaWxl
OjpTcGVjLT5jYXRkaXIoQGRpcnMpLCAkcGFyYW06OnRvcGZpbGUpKSB7CglkaWUoIiQwOiB1
bmFibGUgdG8gZmluZCAkcGFyYW06OnRvcGZpbGUuXG4iKSBpZiAhIEBkaXJzOwoJdW5zaGlm
dChAdGFyZ2V0ZGlyLCBwb3AoQGRpcnMpKTsKICAgIH0KICAgIG15KCRjd2QpID0gRmlsZTo6
U3BlYy0+Y2F0cGF0aCgkdm9sLCBGaWxlOjpTcGVjLT5jYXRkaXIoQGRpcnMpLCAnJyk7CiAg
ICBwcmludCAiJDA6IEVudGVyaW5nIGRpcmVjdG9yeSBgJGN3ZCdcbiI7CiAgICBjaGRpcigk
Y3dkKTsKICAgIEB0YXJnZXRzID0gbWFwIHtGaWxlOjpTcGVjLT5jYXRkaXIoQHRhcmdldGRp
ciwgJF8pfSBAdGFyZ2V0czsKfQoKIyBTZXQgdXAgJGRpcjo6dG9wIGFuZCAkZGlyOjpjd2Qs
IG5vdyB0aGF0IHdlIGFyZSBpbiB0aGUgcmlnaHQgZGlyZWN0b3J5LgpkaXI6OmluaXQoKTsK
CiMKaWYgKEB0YXJnZXRkaXIpIHsKICAgICR0YXJnZXRfdG9wID0gJGRpcjo6dG9wLT5sb29r
dXBkaXIoRmlsZTo6U3BlYy0+Y2F0ZGlyKEB0YXJnZXRkaXIpKTsKfQoKIyBOb3cgaGFuZGxl
IG92ZXJyaWRlIGZpbGUuCnBhY2thZ2Ugb3ZlcnJpZGU7CmlmICgkcGFyYW06Om92ZXJmaWxl
KSB7CiAgICBteSgkb3YpID0gJHBhcmFtOjpvdmVyZmlsZTsKICAgIGRpZSBxcSgkMDogY2Fu
XCd0IHJlYWQgb3ZlcnJpZGUgZmlsZSAiJG92IiAoJCEpXG4pIGlmICEgLWYgJG92OyAjJwog
ICAgZG8gJG92OwogICAgaWYgKCRAKSB7CgljaG9wKCRAKTsKCWRpZSBxcSgkMDogZXJyb3Jz
IGluIG92ZXJyaWRlIGZpbGUgIiRvdiIgKCRAKVxuKTsKICAgIH0KfQoKIyBQcm92aWRlIHRo
aXMgdG8gdXNlciB0byBzZXR1cCBvdmVycmlkZSBwYXR0ZXJucy4Kc3ViIE92ZXJyaWRlIHsK
ICAgIG15KCRyZSwgQGVudikgPSBAXzsKICAgIHJldHVybiBpZiAkcGFyYW06Om92ZXJyaWRl
c3skcmV9OyAjIGlmIGlkZW50aWNhbCwgZmlyc3Qgd2lsbCB3aW4uCiAgICAkcGFyYW06Om92
ZXJyaWRlcyA9IDE7CiAgICAkcGFyYW06Om92ZXJyaWRlc3skcmV9ID0gXEBlbnY7CiAgICBw
dXNoKEBwYXJhbTo6b3ZlcnJpZGVzLCAkcmUpOwp9CgpwYWNrYWdlIG1haW47Cgp1c2UgdmFy
cyBxdyggJXByaW9yaXR5ICRlcnJvcnMgKTsKCiMgQ2hlY2sgc2NyaXB0IGluY2x1c2lvbiBy
ZWdleHBzCm15ICRyZTsKZm9yICRyZSAoQHBhcmFtOjppbmNsdWRlKSB7CiAgICBpZiAoISBk
ZWZpbmVkIGV2YWwgeyIiID1+IC8kcmUvfSkgewoJbXkoJGVycikgPSAkQDsKCSRlcnIgPX4g
cy9pbiByZWdleHAgYXQgLiokLy87CglkaWUoIiQwOiBlcnJvciBpbiByZWdleHAgJGVyciIp
OwogICAgfQp9CgojIFJlYWQgdGhlIHRvcC1sZXZlbCBjb25zdHJ1Y3QgZmlsZSBhbmQgaXRz
IGluY2x1ZGVkIHNjcmlwdHMuCmRvc2NyaXB0cygkcGFyYW06OnRvcGZpbGUpOwoKIyBTdGF0
dXMgcHJpb3JpdGllcy4gVGhpcyBsZXRzIHVzIGFnZ3JlZ2F0ZSBzdGF0dXMgZm9yIGRpcmVj
dG9yaWVzCiMgYW5kIHByaW50IGFuIGFwcHJvcHJpYXRlIG1lc3NhZ2UgKGF0IHRoZSB0b3At
bGV2ZWwpLgolcHJpb3JpdHkgPQogICAgKCdub25lJyA9PiAxLCAnaGFuZGxlZCcgPT4gMiwg
J2J1aWx0JyA9PiAzLCAndW5rbm93bicgPT4gNCwgJ2Vycm9ycycgPT4gNSk7CgojIElmIG5v
IHRhcmdldHMgd2VyZSBzcGVjaWZpZWQsIHN1cHBseSBkZWZhdWx0IHRhcmdldHMgKGlmIGFu
eSkuCkB0YXJnZXRzID0gQHBhcmFtOjpkZWZhdWx0X3RhcmdldHMgaWYgISBAdGFyZ2V0czsK
CiRlcnJvcnMgPSAwOwoKIyBCdWlsZCB0aGUgc3VwcGxpZWQgdGFyZ2V0IHBhdHRlcm5zLgpt
eSAkdGd0Owpmb3IgJHRndCAobWFwKCRkaXI6OnRvcC0+bG9va3VwKCRfKSwgQHRhcmdldHMp
KSB7CiAgICBpZiAoJHRhcmdldF90b3AgJiYgISAkdGd0LT5pc191bmRlcigkdGFyZ2V0X3Rv
cCkpIHsKCSMgQSAtdCBvcHRpb24gd2FzIHVzZWQsIGFuZCB0aGlzIHRhcmdldCBpcyBub3Qg
dW5kZXJuZWF0aAoJIyB0aGUgZGlyZWN0b3J5IHdoZXJlIHdlIHdlcmUgaW52b2tlZCB2aWEg
LXQuCgkjIElmIHRoZSB0YXJnZXQgaXMgYSBkaXJlY3RvcnkgYW5kIHRoZSAtdCBkaXJlY3Rv
cnkKCSMgaXMgdW5kZXJuZWF0aCBpdCwgdGhlbiBidWlsZCB0aGUgLXQgZGlyZWN0b3J5LgoJ
aWYgKHJlZiAkdGd0IG5lICJkaXIiIHx8ICEgJHRhcmdldF90b3AtPmlzX3VuZGVyKCR0Z3Qp
KSB7CgkgICAgbmV4dDsKCX0KCSR0Z3QgPSAkdGFyZ2V0X3RvcDsKICAgIH0KICAgIGJ1aWxk
dG9wdGFyZ2V0KCR0Z3QpOwp9CgpleGl0IDAgKyAoJGVycm9ycyAhPSAwKTsKCnN1YiBidWls
ZHRvcHRhcmdldCB7CiAgICBteSgkdGd0KSA9IEBfOwogICAgcmV0dXJuIGlmICEgJHRndDsK
ICAgIG15KCRzdGF0dXMpID0gYnVpbGR0YXJnZXQoJHRndCk7CiAgICBpZiAoJHN0YXR1cyBu
ZSAnYnVpbHQnKSB7CglteSgkcGF0aCkgPSAkdGd0LT5wYXRoOwoJaWYgKCRzdGF0dXMgZXEg
ImVycm9ycyIpIHsKCSAgICBwcmludCBxcSgkMDogIiRwYXRoIiBub3QgcmVtYWRlIGJlY2F1
c2Ugb2YgZXJyb3JzLlxuKTsKCSAgICAkZXJyb3JzKys7Cgl9IGVsc2lmICgkc3RhdHVzIGVx
ICJoYW5kbGVkIikgewoJICAgIHByaW50IHFxKCQwOiAiJHBhdGgiIGlzIHVwLXRvLWRhdGUu
XG4pOwoJfSBlbHNpZiAoJHN0YXR1cyBlcSAidW5rbm93biIpIHsKCSAgICAjIGNvbnMgZXJy
b3IgYWxyZWFkeSByZXBvcnRlZC4KCSAgICAkZXJyb3JzKys7Cgl9IGVsc2lmICgkc3RhdHVz
IGVxICJub25lIikgewoJICAgICMgc2VhcmNoIGZvciB0YXJnZXRzIHRoYXQgbWF5IGJlIGxp
bmtlZCB0byB0aGUgZ2l2ZW4gcGF0aC4KCSAgICBteSBAbGlua2VkID0gZGlyOjpsaW5rZWRf
dGFyZ2V0cygkdGd0KSBpZiAkdGFyZ2V0X3RvcDsKCSAgICBpZiAoQGxpbmtlZCkgewoJCW15
IEBuYW1lcyA9IG1hcCgkXy0+cGF0aCwgQGxpbmtlZCk7CgkJcHJpbnQgIkxpbmtlZCB0YXJn
ZXRzOiBAbmFtZXNcbiIgdW5sZXNzICgkcGFyYW06OnF1aWV0KTsKCQltYXAoYnVpbGR0b3B0
YXJnZXQoJF8pLCBAbGlua2VkKTsKCSAgICB9IGVsc2UgewoJCXByaW50IHFxKCQwOiBub3Ro
aW5nIHRvIGJlIGJ1aWx0IGluICIkcGF0aCIuXG4pIGlmICRwYXJhbTo6YnVpbGQ7CgkgICAg
fQoJfSBlbHNlIHsKCSAgICBwcmludCBxcSgkMDogZG9uXCd0IGtub3cgaG93IHRvIGNvbnN0
cnVjdCAiJHBhdGgiLlxuKTsgIycKCSAgICAkZXJyb3JzKys7Cgl9CiAgICB9Cn0KCiMgQnVp
bGQgdGhlIHN1cHBsaWVkIHRhcmdldCBkaXJlY3Rvcnkgb3IgZmlsZXMuIFJldHVybiBhZ2dy
ZWdhdGVkIHN0YXR1cy4Kc3ViIGJ1aWxkdGFyZ2V0IHsKICAgIG15KCR0Z3QpID0gQF87CiAg
ICBpZiAocmVmKCR0Z3QpIGVxICJkaXIiKSB7CglteSgkcmVzdWx0KSA9ICJub25lIjsKCW15
KCRwcmlvcml0eSkgPSAkcHJpb3JpdHl7JHJlc3VsdH07CglpZiAoZXhpc3RzICR0Z3QtPntt
ZW1iZXJ9KSB7CgkgICAgbXkoJG1lbWJlcnMpID0gJHRndC0+e21lbWJlcn07CgkgICAgbXkg
JGVudHJ5OwoJICAgIGZvciAkZW50cnkgKHNvcnQga2V5cyAlJG1lbWJlcnMpIHsKCQluZXh0
IGlmICRlbnRyeSBlcSAkZGlyOjpDVVJESVIgfHwgJGVudHJ5IGVxICRkaXI6OlVQRElSOwoJ
CW15KCR0Z3QpID0gJG1lbWJlcnMtPnskZW50cnl9OwoJCW5leHQgaWYgcmVmKCR0Z3QpIG5l
ICJkaXIiICYmICFleGlzdHMoJHRndC0+e2J1aWxkZXJ9KTsKCQlteSgkc3RhdCkgPSBidWls
ZHRhcmdldCgkbWVtYmVycy0+eyRlbnRyeX0pOwoJCW15KCRwcmkpID0gJHByaW9yaXR5eyRz
dGF0fTsKCQlpZiAoJHByaSA+ICRwcmlvcml0eSkgewoJCSAgICAkcHJpb3JpdHkgPSAkcHJp
OwoJCSAgICAkcmVzdWx0ID0gJHN0YXQ7CgkJfQoJICAgIH0KCX0KCXJldHVybiAkcmVzdWx0
OwogICAgfQogICAgaWYgKCRwYXJhbTo6ZGVwZW5kcykgewoJbXkoJHBhdGgpID0gJHRndC0+
cGF0aDsKCWlmICgkdGd0LT57YnVpbGRlcn0pIHsKCSAgICBteShAZGVwKSA9IChAeyR0Z3Qt
PntkZXB9fSwgQHskdGd0LT57c291cmNlc319KTsKCSAgICBteSgkZGVwKSA9IGpvaW4oJyAn
LG1hcCgkXy0+cGF0aCwgQGRlcCkpOwoJICAgIHByaW50KCJUYXJnZXQgJHBhdGg6ICRkZXBc
biIpOwoJfSBlbHNlIHsKCSAgICBwcmludCgiVGFyZ2V0ICRwYXRoOiBub3QgYSBkZXJpdmVk
IGZpbGVcbiIpOwoJfQogICAgfQogICAgaWYgKCRwYXJhbTo6YnVpbGQpIHsKCXJldHVybiBi
dWlsZCAkdGd0OwogICAgfSBlbHNpZiAoJHBhcmFtOjpwZmxhZyB8fCAkcGFyYW06OndmbGFn
IHx8ICRwYXJhbTo6YWZsYWcpIHsKCWlmICgkdGd0LT57YnVpbGRlcn0pIHsKCSAgICBpZiAo
JHBhcmFtOjp3ZmxhZykgewoJCXByaW50IHFxKCR7XCR0Z3QtPnBhdGh9OiAkdGd0LT57c2Ny
aXB0fVxuKTsKCSAgICB9IGVsc2lmICgkcGFyYW06OnBmbGFnKSB7CgkJcHJpbnQgcXEoJHtc
JHRndC0+cGF0aH06XG4pIGlmICRwYXJhbTo6YWZsYWc7CgkJcHJpbnQgcXEoJHtcJHRndC0+
cGF0aH1cbikgaWYgISRwYXJhbTo6YWZsYWc7CgkgICAgfQoJICAgIGlmICgkcGFyYW06OmFm
bGFnKSB7CgkJJHRndC0+e2J1aWxkZXJ9LT5hY3Rpb24oJHRndCk7CgkgICAgfQoJfQogICAg
fSBlbHNpZiAoJHBhcmFtOjpyZmxhZyAmJiAkdGd0LT57YnVpbGRlcn0pIHsKCW15KCRwYXRo
KSA9ICR0Z3QtPnBhdGg7CglpZiAoLWYgJHBhdGgpIHsKCSAgICBpZiAodW5saW5rKCRwYXRo
KSkgewoJCXByaW50KCJSZW1vdmVkICRwYXRoXG4iKSB1bmxlc3MgKCRwYXJhbTo6cXVpZXQp
OwoJICAgIH0gZWxzZSB7CgkJd2FybigiJDA6IGNvdWxkbid0IHJlbW92ZSAkcGF0aFxuIik7
CgkgICAgfQoJfQogICAgfQoKICAgIHJldHVybiAibm9uZSI7Cn0KCnBhY2thZ2UgTmFtZVNw
YWNlOwoKIyBSZXR1cm4gYSBoYXNoIHRoYXQgbWFwcyB0aGUgbmFtZSBvZiBzeW1ib2xzIGlu
IGEgbmFtZXNwYWNlIHRvIGFuCiMgYXJyYXkgb2YgcmVmcyBmb3IgYWxsIHR5cGVzIGZvciB3
aGljaCB0aGUgbmFtZSBoYXMgYSBkZWZpbmVkIHZhbHVlLgojIEEgbGlzdCBvZiBzeW1ib2xz
IG1heSBiZSBzcGVjaWZpZWQ7IGRlZmF1bHQgaXMgYWxsIHN5bWJvbHMgaW4gdGhlCiMgbmFt
ZSBzcGFjZS4Kc3ViIHNhdmUgewogICAgbXkgJHBhY2thZ2UgPSBzaGlmdDsKICAgIG15KCVu
YW1lcmVmcywgJHZhciwgJHR5cGUpOwogICAgbm8gc3RyaWN0ICdyZWZzJzsKICAgIEBfID0g
a2V5cyAleyRwYWNrYWdlLiI6OiJ9IGlmICEgQF87CiAgICBmb3JlYWNoICR2YXIgKEBfKSB7
CgkkbmFtZXJlZnN7JHZhcn0gPSBbXTsKCW15ICRmcXZhciA9ICRwYWNrYWdlLiI6OiIuJHZh
cjsKCSMgSWYgdGhlIHNjYWxhciBmb3IgdGhpcyB2YXJpYWJsZSBuYW1lIGRvZXNuJ3QgYWxy
ZWFkeQoJIyBleGlzdCwgKmZvb3tTQ0FMQVJ9IHdpbGwgYXV0b3ZpdmlmeSB0aGUgcmVmZXJl
bmNlCgkjIGluc3RlYWQgb2YgcmV0dXJuaW5nIHVuZGVmLCBzbyB1bmxpa2UgdGhlIG90aGVy
IHR5cGVzLAoJIyB3ZSBoYXZlIHRvIGRlcmVmZXJlbmNlIHRvIGZpbmQgb3V0IGlmIGl0IGV4
aXN0cy4KCXB1c2goQHskbmFtZXJlZnN7JHZhcn19LCAqeyRmcXZhcn17U0NBTEFSfSkKCQkg
ICAgaWYgZGVmaW5lZCAkeyp7JGZxdmFyfXtTQ0FMQVJ9fTsKCWZvcmVhY2ggJHR5cGUgKHF3
KEFSUkFZIEhBU0ggQ09ERSBJTykpIHsKCSAgICBwdXNoKEB7JG5hbWVyZWZzeyR2YXJ9fSwg
KnskZnF2YXJ9eyR0eXBlfSkKCQkJICBpZiBkZWZpbmVkICp7JGZxdmFyfXskdHlwZX07Cgl9
CiAgICB9CiAgICByZXR1cm4gXCVuYW1lcmVmczsKfQoKIyBSZW1vdmUgdGhlIHNwZWNpZmll
ZCBzeW1ib2xzIGZyb20gdGhlIG5hbWVzcGFjZS4KIyBEZWZhdWx0IGlzIHRvIHJlbW92ZSBh
bGwuCnN1YiByZW1vdmUgewogICAgbXkgJHBhY2thZ2UgPSBzaGlmdDsKICAgIG15KCVuYW1l
cmVmcywgJHZhcik7CiAgICBubyBzdHJpY3QgJ3JlZnMnOwogICAgQF8gPSBrZXlzICV7JHBh
Y2thZ2UuIjo6In0gaWYgISBAXzsKICAgIGZvcmVhY2ggJHZhciAoQF8pIHsKCWRlbGV0ZSAk
eyRwYWNrYWdlLiI6OiJ9eyR2YXJ9OwogICAgfQp9CgojIFJlc3RvcmUgdmFsdWVzIHRvIHN5
bWJvbHMgc3BlY2lmaWVkIGluIGEgaGFzaCBhcyByZXR1cm5lZAojIGJ5IE5hbWVTcGFjZTo6
c2F2ZS4Kc3ViIHJlc3RvcmUgewogICAgbXkoJHBhY2thZ2UsICRuYW1lcmVmcykgPSBAXzsK
ICAgIG15KCR2YXIsICRyZWYpOwogICAgbm8gc3RyaWN0ICdyZWZzJzsKICAgIGZvcmVhY2gg
JHZhciAoa2V5cyAlJG5hbWVyZWZzKSB7CglteSAkZnF2YXIgPSAkcGFja2FnZS4iOjoiLiR2
YXI7Cglmb3JlYWNoICRyZWYgKEB7JG5hbWVyZWZzLT57JHZhcn19KSB7CgkgICAgKnskZnF2
YXJ9ID0gJHJlZjsKCX0KICAgIH0KfQoKIyBTdXBwb3J0IGZvciAiYnVpbGRpbmciIHNjcmlw
dHMsIGltcG9ydGluZyBhbmQgZXhwb3J0aW5nIHZhcmlhYmxlcy4KIyBXaXRoIHRoZSBleGNl
cHRpb24gb2YgdGhlIHRvcC1sZXZlbCByb3V0aW5lIGhlcmUgKGludm9rZWQgZnJvbSB0aGUK
IyBtYWluIHBhY2thZ2UgYnkgY29ucyksIHRoZXNlIGFyZSBhbGwgaW52b2tlZCBieSB1c2Vy
IHNjcmlwdHMuCnBhY2thZ2Ugc2NyaXB0OwoKdXNlIHZhcnMgcXcoICRBUkcgJGNhbGxlcl9k
aXJfcGF0aCAlc3BlY2lhbF92YXIgKTsKCkJFR0lOIHsKICAgICMgV2UgY2FuJ3QgRXhwb3J0
IG9yIEltcG9ydCB0aGUgZm9sbG93aW5nIHZhcmlhYmxlcyBiZWNhdXNlIFBlcmwgYWx3YXlz
CiAgICAjIHRyZWF0cyB0aGVtIGFzIHBhcnQgb2YgdGhlICJtYWluOjoiIHBhY2thZ2UgKHNl
ZSBwZXJsdmFyKDEpKS4KICAgICVzcGVjaWFsX3ZhciA9IG1hcCB7JF8gPT4gMX0gcXcoRU5W
IElOQyBBUkdWIEFSR1ZPVVQgU0lHCgkJCQkgICAgU1RESU4gU1RET1VUIFNUREVSUik7Cn0K
CiMgVGhpcyBpcyBjYWxsZWQgZnJvbSBtYWluIHRvIGludGVycHJldC9ydW4gdGhlIHRvcC1s
ZXZlbCBDb25zdHJ1Y3QKIyBmaWxlLCBwYXNzZWQgaW4gYXMgdGhlIHNpbmdsZSBhcmd1bWVu
dC4Kc3ViIG1haW46OmRvc2NyaXB0cyB7CiAgICBteSgkc2NyaXB0KSA9IEBfOwogICAgQnVp
bGQoJHNjcmlwdCk7CiAgICAjIE5vdyBzZXQgdXAgdGhlIGluY2x1ZGVzL2V4Y2x1ZGVzIChh
ZnRlciB0aGUgQ29uc3RydWN0IGZpbGUgaXMgcmVhZCkuCiAgICAkcGFyYW06OmluY2x1ZGUg
PSBqb2luKCd8JywgQHBhcmFtOjppbmNsdWRlKTsKCiAgICAjIFNhdmUgdGhlIG9yaWdpbmFs
IHZhcmlhYmxlIG5hbWVzIGZyb20gdGhlIHNjcmlwdCBwYWNrYWdlLgogICAgIyBUaGVzZSB3
aWxsIHN0YXkgaW50YWN0LCBidXQgYW55IG90aGVyICJzY3JpcHQ6OiIgdmFyaWFibGVzCiAg
ICAjIGRlZmluZWQgaW4gYSBDb25zY3JpcHQgZmlsZSB3aWxsIGdldCBzYXZlZCwgZGVsZXRl
ZCwKICAgICMgYW5kICh3aGVuIG5lY2Vzc2FyeSkgcmVzdG9yZWQuCiAgICBteSglb3JpZ19z
Y3JpcHRfdmFyKSA9IG1hcCB7JF8gPT4gMX0ga2V5cyAlc2NyaXB0Ojo7CiAgICAkY2FsbGVy
X2Rpcl9wYXRoID0gdW5kZWY7CiAgICBteSAkY3dkID0gQ3dkOjpjd2QoKTsKICAgIG15KEBz
Y3JpcHRzKSA9IHBvcChAcHJpdjo6c2NyaXB0cyk7CiAgICB3aGlsZSAoJHByaXY6OnNlbGYg
PSBzaGlmdChAc2NyaXB0cykpIHsKCW15KCRwYXRoKSA9ICRwcml2OjpzZWxmLT57c2NyaXB0
fS0+cnNyY3BhdGg7CglpZiAoLWYgJHBhdGgpIHsKCSAgICAkZGlyOjpjd2QgPSAkcHJpdjo6
c2VsZi0+e3NjcmlwdH0tPntkaXJ9OwoJICAgICMgSGFuZGxlIGNoZGlyIHRvIHRoZSBDb25z
Y3JpcHQgZmlsZSBkaXJlY3RvcnksIGlmIG5lY2Vzc2FyeS4KCSAgICBteSAoJHZvbCwgJGRp
ciwgJGZpbGUpOwoJICAgIGlmICgkcGFyYW06OmNvbnNjcmlwdF9jaGRpcikgewoJCSgkdm9s
LCAkZGlyLCAkZmlsZSkgPSBGaWxlOjpTcGVjLT5zcGxpdHBhdGgoRmlsZTo6U3BlYy0+Y2Fu
b25wYXRoKCRwYXRoKSk7CgkJaWYgKCR2b2wgbmUgJycgfHwgJGRpciBuZSAnJykgewoJCSAg
ICAkY2FsbGVyX2Rpcl9wYXRoID0gRmlsZTo6U3BlYy0+Y2F0cGF0aCgkdm9sLCAkZGlyLCB1
bmRlZik7CgkJICAgIGNoZGlyKCRjYWxsZXJfZGlyX3BhdGgpIHx8CgkJCWRpZSAiQ291bGQg
bm90IGNoZGlyIHRvICRjYWxsZXJfZGlyX3BhdGg6ICQhXG4iOwoJCX0KCSAgICB9IGVsc2Ug
ewoJCSRmaWxlID0gJHBhdGg7CgkgICAgfQoJICAgICMgQWN0dWFsbHkgcHJvY2VzcyB0aGUg
Q29uc2NyaXB0IGZpbGUuCgkgICAgZG8gJGZpbGU7CgkgICAgIyBTYXZlIGFueSB2YXJpYWJs
ZXMgZGVmaW5lZCBieSB0aGUgQ29uc2NyaXB0IGZpbGUKCSAgICAjIHNvIHdlIGNhbiByZXN0
b3JlIHRoZW0gbGF0ZXIsIGlmIG5lZWRlZDsKCSAgICAjIHRoZW4gZGVsZXRlIHRoZW0gZnJv
bSB0aGUgc2NyaXB0OjogbmFtZXNwYWNlLgoJICAgIG15KEBkZWwpID0gZ3JlcCghICRvcmln
X3NjcmlwdF92YXJ7JF99LCBrZXlzICVzY3JpcHQ6Oik7CgkgICAgaWYgKEBkZWwpIHsKCQkk
cHJpdjo6c2VsZi0+e3NjcmlwdH0tPntwa2d2YXJzfSA9CgkJCQkJCU5hbWVTcGFjZTo6c2F2
ZSgnc2NyaXB0JywgQGRlbCk7CgkJTmFtZVNwYWNlOjpyZW1vdmUoJ3NjcmlwdCcsIEBkZWwp
OwoJICAgIH0KCSAgICBpZiAoJGNhbGxlcl9kaXJfcGF0aCkgewoJCWNoZGlyKCRjd2QpOwoJ
CSRjYWxsZXJfZGlyX3BhdGggPSB1bmRlZjsKCSAgICB9CgkgICAgaWYgKCRAKSB7CgkJY2hv
bXAoJEApOwoJCW15ICRlcnIgPSAoJEAgPX4gL1xuL21zKSA/ICI6XG4kQCIgOiAiICgkQCki
OwoJCXByaW50IHFxKCQwOiBlcnJvciBpbiBmaWxlICIkcGF0aCIkZXJyXG4pOwoJCSRydW46
OmVycm9ycysrOwoJICAgIH0gZWxzZSB7CgkJIyBPbmx5IHByb2Nlc3Mgc3Vic2lkaWFyeSBz
Y3JpcHRzIGlmIG5vIGVycm9ycyBpbiBwYXJlbnQuCgkJdW5zaGlmdChAc2NyaXB0cywgQHBy
aXY6OnNjcmlwdHMpOwoJICAgIH0KCSAgICB1bmRlZiBAcHJpdjo6c2NyaXB0czsKCX0gZWxz
ZSB7CgkgICAgbXkgJHdoZXJlID0gJyc7CgkgICAgbXkgJGNyZWYgPSAkcHJpdjo6c2VsZi0+
e3NjcmlwdH0tPmNyZWF0b3I7CgkgICAgaWYgKGRlZmluZWQgJGNyZWYpIHsKCQlteSgkX2Zv
bywgJHNjcmlwdCwgJGxpbmUsICRzdWIpID0gQCRjcmVmOwoJCSR3aGVyZSA9ICIgKCRzdWIg
aW4gJHNjcmlwdCwgbGluZSAkbGluZSkiOwoJICAgIH0KCSAgICB3YXJuIHFxKElnbm9yaW5n
IG1pc3Npbmcgc2NyaXB0ICIkcGF0aCIkd2hlcmUpOwoJfQogICAgfQogICAgZGllKCIkMDog
c2NyaXB0IGVycm9ycyBlbmNvdW50ZXJlZDogY29uc3RydWN0aW9uIGFib3J0ZWRcbiIpCglp
ZiAkcnVuOjplcnJvcnM7Cn0KCiMgUmV0dXJuIGNhbGxlciBpbmZvIGFib3V0IHRoZSBtZXRo
b2QgYmVpbmcgaW52b2tlZC4KIyBUaGlzIGlzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgUGVybCAi
Y2FsbGVyIiBidWlsdGluIGZ1bmN0aW9uLAojIGluY2x1ZGluZyB3aGljaCBDb25zdHJ1Y3Qv
Q29uc2NyaXB0IGZpbGUsIGxpbmUgbnVtYmVyLAojIHN1YnJvdXRpbmUgbmFtZSwgZXRjLgpz
dWIgY2FsbGVyX2luZm8gewogICAgbXkoJGxldikgPSAxOwogICAgbXkoQGZyYW1lKTsKICAg
IGRvIHsKCUBmcmFtZSA9IGNhbGxlciArKyRsZXY7CglpZiAoZGVmaW5lZCgkZnJhbWVbM10p
ICYmICRmcmFtZVszXSBlcSAnKGV2YWwpJykgewoJICAgIEBmcmFtZSA9IGNhbGxlciAtLSRs
ZXY7CgkgICAgaWYgKCRjYWxsZXJfZGlyX3BhdGgpIHsKCQkkZnJhbWVbMV0gPSBGaWxlOjpT
cGVjLT5jYXRmaWxlKCRjYWxsZXJfZGlyX3BhdGgsICRmcmFtZVsxXSk7CgkgICAgfQoJICAg
IHJldHVybiBAZnJhbWU7Cgl9CiAgICB9IHdoaWxlICgkZnJhbWVbM10pOwogICAgcmV0dXJu
Owp9CgojIExpbmsgYSBkaXJlY3RvcnkgdG8gYW5vdGhlci4gVGhpcyBzaW1wbHkgbWVhbnMg
c2V0IHVwIHRoZSAqc291cmNlKgojIGZvciB0aGUgZGlyZWN0b3J5IHRvIGJlIHRoZSBvdGhl
ciBkaXJlY3RvcnkuCnN1YiBMaW5rIHsKICAgIGRpcjo6bGluayhAXyk7Cn0KCiMgQWRkIGRp
cmVjdG9yaWVzIHRvIHRoZSByZXBvc2l0b3J5IHNlYXJjaCBwYXRoIGZvciBmaWxlcy4KIyBX
ZSdyZSBjYXJlZnVsIGFib3V0IHN0cmlwcGluZyBvdXIgY3VycmVudCBkaXJlY3RvcnkgZnJv
bQojIHRoZSBsaXN0LCB3aGljaCB3ZSBkbyBieSBjb21wYXJpbmcgdGhlIGBwd2RgIHJlc3Vs
dHMgZnJvbQojIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhbmQgdGhlIHNwZWNpZmllZCBkaXJl
Y3RvcnkuICBUaGlzCiMgaXMgY3VtYmVyc29tZSwgYnV0IGFzc3VyZXMgdGhhdCB0aGUgcGF0
aHMgd2lsbCBiZSByZXBvcnRlZAojIHRoZSBzYW1lIHJlZ2FyZGxlc3Mgb2Ygc3ltYm9saWMg
bGlua3MuCnN1YiBSZXBvc2l0b3J5IHsKICAgIG15KCRteV9kaXIpID0gQ3dkOjpjd2QoKTsK
ICAgIG15ICRkaXI7CiAgICBmb3JlYWNoICRkaXIgKEBfKSB7CglteSgkZCkgPSBgJF5YIC1l
ICJ1c2UgQ3dkOyBjaGRpcignJGRpcicpICYmIHByaW50IGN3ZCJgOwoJbmV4dCBpZiAhICRk
IHx8ICEgLWQgJGQgfHwgJGQgZXEgJG15X2RpcjsKCSMgV2Uga25vdyB3ZSBjYW4gZ2V0IGF3
YXkgd2l0aCBwYXNzaW5nIHVuZGVmIHRvIGxvb2t1cGRpcgoJIyBhcyB0aGUgZGlyZWN0b3J5
IGJlY2F1c2UgJGRpciBpcyBhbiBhYnNvbHV0ZSBwYXRoLgoJcHVzaChAcGFyYW06OnJwYXRo
LCBkaXI6Omxvb2t1cGRpcih1bmRlZiwgJGRpcikpOwoJcHVzaCBASU5DLCAkZDsKICAgIH0K
fQoKIyBSZXR1cm4gdGhlIGxpc3Qgb2YgUmVwb3NpdG9yeSBkaXJlY3RvcmllcyBzcGVjaWZp
ZWQuCnN1YiBSZXBvc2l0b3J5X0xpc3QgewogICAgbWFwKCRfLT5wYXRoLCBAcGFyYW06OnJw
YXRoKTsKfQoKIyBTcGVjaWZ5IHdoZXRoZXIgdGhlIC5jb25zaWduIHNpZ25hdHVyZSB0aW1l
cyBpbiByZXBvc2l0b3J5IGZpbGVzIGFyZSwKIyBpbiBmYWN0LCBjb25zaXN0ZW50IHdpdGgg
dGhlIHRpbWVzIG9uIHRoZSBmaWxlcyB0aGVtc2VsdmVzLgpzdWIgUmVwb3NpdG9yeV9TaWdf
VGltZXNfT0sgewogICAgJHBhcmFtOjpyZXBfc2lnX3RpbWVzX29rID0gc2hpZnQ7Cn0KCiMg
U3BlY2lmeSB3aGV0aGVyIHdlIHNob3VsZCBjaGRpciB0byB0aGUgY29udGFpbmluZyBkaXJl
Y3RvcmllcwojIG9mIENvbnNjcmlwdCBmaWxlcy4Kc3ViIENvbnNjcmlwdF9jaGRpciB7CiAg
ICAkcGFyYW06OmNvbnNjcmlwdF9jaGRpciA9IHNoaWZ0Owp9CgojIFNwZWNpZnkgZmlsZXMv
dGFyZ2V0cyB0aGF0IG11c3QgYmUgcHJlc2VudCBhbmQgYnVpbHQgbG9jYWxseSwKIyBldmVu
IGlmIHRoZXkgZXhpc3QgYWxyZWFkeS1idWlsdCBpbiBhIFJlcG9zaXRvcnkuCnN1YiBMb2Nh
bCB7CiAgICBteShAZmlsZXMpID0gbWFwKCRkaXI6OmN3ZC0+bG9va3VwZmlsZSgkXyksIEBf
KTsKICAgIG1hcCgkXy0+bG9jYWwoMSksIEBmaWxlcyk7Cn0KCiMgRXhwb3J0IHZhcmlhYmxl
cyB0byBhbnkgc2NyaXB0cyBpbnZva2VkIGZyb20gdGhpcyBvbmUuCnN1YiBFeHBvcnQgewog
ICAgbXkoQGlsbGVnYWwpID0gZ3JlcCgkc3BlY2lhbF92YXJ7JF99LCBAXyk7CiAgICBpZiAo
QGlsbGVnYWwpIHsKCWRpZSBxcSgkMDogY2Fubm90IEV4cG9ydCBzcGVjaWFsIFBlcmwgdmFy
aWFibGVzOiBAaWxsZWdhbFxuKTsKICAgIH0KICAgIEB7JHByaXY6OnNlbGYtPntleHBvcnRz
fX0gPSBncmVwKCEgZGVmaW5lZCAkc3BlY2lhbF92YXJ7JF99LCBAXyk7Cn0KCiMgSW1wb3J0
IHZhcmlhYmxlcyBmcm9tIHRoZSBleHBvcnQgbGlzdCBvZiB0aGUgY2FsbGVyCiMgb2YgdGhl
IGN1cnJlbnQgc2NyaXB0LgpzdWIgSW1wb3J0IHsKICAgIG15KEBpbGxlZ2FsKSA9IGdyZXAo
JHNwZWNpYWxfdmFyeyRffSwgQF8pOwogICAgaWYgKEBpbGxlZ2FsKSB7CglkaWUgcXEoJDA6
IGNhbm5vdCBJbXBvcnQgc3BlY2lhbCBQZXJsIHZhcmlhYmxlczogQGlsbGVnYWxcbik7CiAg
ICB9CiAgICBteSgkcGFyZW50KSA9ICRwcml2OjpzZWxmLT57cGFyZW50fTsKICAgIG15KCRp
bXBvcnRzKSA9ICRwcml2OjpzZWxmLT57aW1wb3J0c307CiAgICBAeyRwcml2OjpzZWxmLT57
ZXhwb3J0c319ID0ga2V5cyAlJGltcG9ydHM7CiAgICBteSgkdmFyKTsKICAgIGZvcmVhY2gg
JHZhciAoZ3JlcCghIGRlZmluZWQgJHNwZWNpYWxfdmFyeyRffSwgQF8pKSB7CglpZiAoIWV4
aXN0cyAkaW1wb3J0cy0+eyR2YXJ9KSB7CgkgICAgbXkoJHBhdGgpID0gJHBhcmVudC0+e3Nj
cmlwdH0tPnBhdGg7CgkgICAgZGllIHFxKCQwOiB2YXJpYWJsZSAiJHZhciIgbm90IGV4cG9y
dGVkIGJ5IGZpbGUgIiRwYXRoIlxuKTsKCX0KCWlmICghZGVmaW5lZCAkaW1wb3J0cy0+eyR2
YXJ9KSB7CgkgICAgbXkgJHBhdGggPSAkcGFyZW50LT57c2NyaXB0fS0+cGF0aDsKCSAgICBt
eSAkZXJyID0gIiQwOiB2YXJpYWJsZSBcIiR2YXJcIiBleHBvcnRlZCBidXQgbm90ICIgLgoJ
CSAgICAgICJkZWZpbmVkIGJ5IGZpbGUgXCIkcGF0aFwiXG4iOwoJICAgIGRpZSAkZXJyOwoJ
fQoJJHsic2NyaXB0OjokdmFyIn0gPSAkaW1wb3J0cy0+eyR2YXJ9OwogICAgfQp9CgojIEJ1
aWxkIGFuIGluZmVyaW9yIHNjcmlwdC4gVGhhdCBpcywgYXJyYW5nZSB0byByZWFkIGFuZCBl
eGVjdXRlCiMgdGhlIHNwZWNpZmllZCBzY3JpcHQsIHBhc3NpbmcgdG8gaXQgYW55IGV4cG9y
dGVkIHZhcmlhYmxlcyBmcm9tCiMgdGhlIGN1cnJlbnQgc2NyaXB0LgpzdWIgQnVpbGQgewog
ICAgbXkoQGZpbGVzKSA9IG1hcCgkZGlyOjpjd2QtPmxvb2t1cGZpbGUoJF8pLCBAXyk7CiAg
ICBteSglaW1wb3J0cykgPSBtYXAgeyRfID0+ICR7InNjcmlwdDo6JF8ifX0gQHskcHJpdjo6
c2VsZi0+e2V4cG9ydHN9fTsKICAgIG15ICRmaWxlOwogICAgZm9yICRmaWxlIChAZmlsZXMp
IHsKCW5leHQgaWYgJHBhcmFtOjppbmNsdWRlICYmICRmaWxlLT5wYXRoICF+IC8kcGFyYW06
OmluY2x1ZGUvbzsKCW15KCRzZWxmKSA9IHsnc2NyaXB0JyA9PiAkZmlsZSwKCQkgICAgICdw
YXJlbnQnID0+ICRwcml2OjpzZWxmLAoJCSAgICAgJ2ltcG9ydHMnID0+IFwlaW1wb3J0c307
CglibGVzcyAkc2VsZjsgICMgbWF5IHdhbnQgdG8gYmxlc3MgaW50byBjbGFzcyBvZiBwYXJl
bnQgaW4gZnV0dXJlCglwdXNoKEBwcml2OjpzY3JpcHRzLCAkc2VsZik7CiAgICB9Cn0KCiMg
U2V0IHVwIHJlZ2V4cHMgZGVwZW5kZW5jaWVzIHRvIGlnbm9yZS4gU2hvdWxkIG9ubHkgYmUg
Y2FsbGVkIG9uY2UuCnN1YiBJZ25vcmUgewogICAgZGllKCJJZ25vcmUgY2FsbGVkIG1vcmUg
dGhhbiBvbmNlXG4iKSBpZiAkcGFyYW06Omlnbm9yZTsKICAgICRwYXJhbTo6aWdub3JlID0g
am9pbigifCIsIG1hcCgiKCRfKSIsIEBfKSkgaWYgQF87Cn0KCiMgU3BlY2lmaWNhdGlvbiBv
ZiBkZWZhdWx0IHRhcmdldHMuCnN1YiBEZWZhdWx0IHsKICAgIHB1c2goQHBhcmFtOjpkZWZh
dWx0X3RhcmdldHMsIG1hcCgkZGlyOjpjd2QtPmxvb2t1cCgkXyktPnBhdGgsIEBfKSk7Cn0K
CiMgTG9jYWwgSGVscC4gIFNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlLgpzdWIgSGVscCB7
CiAgICBpZiAoJHBhcmFtOjpsb2NhbGhlbHApIHsKCXByaW50ICJAX1xuIjsKCWV4aXQgMjsK
ICAgIH0KfQoKIyBSZXR1cm4gdGhlIGJ1aWxkIG5hbWUocykgb2YgYSBmaWxlIG9yIGZpbGUg
bGlzdC4Kc3ViIEZpbGVQYXRoIHsKICAgIHdhbnRhcnJheQoJPyBtYXAoJGRpcjo6Y3dkLT5s
b29rdXBmaWxlKCRfKS0+cGF0aCwgQF8pCgk6ICRkaXI6OmN3ZC0+bG9va3VwZmlsZSgkX1sw
XSktPnBhdGg7Cn0KCiMgUmV0dXJuIHRoZSBidWlsZCBuYW1lKHMpIG9mIGEgZGlyZWN0b3J5
IG9yIGRpcmVjdG9yeSBsaXN0LgpzdWIgRGlyUGF0aCB7CiAgICB3YW50YXJyYXkKCT8gbWFw
KCRkaXI6OmN3ZC0+bG9va3VwZGlyKCRfKS0+cGF0aCwgQF8pCgk6ICRkaXI6OmN3ZC0+bG9v
a3VwZGlyKCRfWzBdKS0+cGF0aDsKfQoKIyBTcGxpdCB0aGUgc2VhcmNoIHBhdGggcHJvdmlk
ZWQgaW50byBjb21wb25lbnRzLiBMb29rIGVhY2ggdXAKIyByZWxhdGl2ZSB0byB0aGUgY3Vy
cmVudCBkaXJlY3RvcnkuCiMgVGhlIHVzdWFsIHBhdGggc2VwYXJhdG9yIHByb2JsZW1zIGFi
b3VuZDsgZm9yIG5vdyB3ZSdsbCB1c2UgOgpzdWIgU3BsaXRQYXRoIHsKICAgIG15KCRkaXJz
KSA9IEBfOwogICAgaWYgKHJlZigkZGlycykgbmUgIkFSUkFZIikgewoJJGRpcnMgPSBbIHNw
bGl0KC8kbWFpbjo6UEFUSF9TRVBBUkFUT1IvbywgJGRpcnMpIF07CiAgICB9CiAgICBtYXAg
eyBEaXJQYXRoKCRfKSB9IEAkZGlyczsKfQoKIyBSZXR1cm4gdHJ1ZSBpZiB0aGUgc3VwcGxp
ZWQgcGF0aCBpcyBhdmFpbGFibGUgYXMgYSBzb3VyY2UgZmlsZQojIG9yIGlzIGJ1aWxkYWJs
ZSAoYnkgcnVsZXMgc2VlbiB0by1kYXRlIGluIHRoZSBidWlsZCkuCnN1YiBDb25zUGF0aCB7
CiAgICBteSgkcGF0aCkgPSBAXzsKICAgIG15KCRmaWxlKSA9ICRkaXI6OmN3ZC0+bG9va3Vw
KCRwYXRoKTsKICAgIHJldHVybiAkZmlsZS0+YWNjZXNzaWJsZTsKfQoKIyBSZXR1cm4gdGhl
IHNvdXJjZSBwYXRoIG9mIHRoZSBzdXBwbGllZCBwYXRoLgpzdWIgU291cmNlUGF0aCB7CiAg
ICB3YW50YXJyYXkKCT8gbWFwKCRkaXI6OmN3ZC0+bG9va3VwZmlsZSgkXyktPnJzcmNwYXRo
LCBAXykKCTogJGRpcjo6Y3dkLT5sb29rdXBmaWxlKCRfWzBdKS0+cnNyY3BhdGg7Cn0KCiMg
U2VhcmNoIHVwIHRoZSB0cmVlIGZvciB0aGUgc3BlY2lmaWVkIGNhY2hlIGRpcmVjdG9yeSwg
c3RhcnRpbmcgd2l0aAojIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gUmV0dXJucyB1bmRlZiBp
ZiBub3QgZm91bmQsIDEgb3RoZXJ3aXNlLgojIElmIHRoZSBkaXJlY3RvcnkgaXMgZm91bmQs
IHRoZW4gY2FjaGluZyBpcyBlbmFibGVkLiBUaGUgZGlyZWN0b3J5CiMgbXVzdCBiZSByZWFk
YWJsZSBhbmQgd3JpdGFibGUuIElmIHRoZSBhcmd1bWVudCAibWl4dGFyZ2V0cyIgaXMgcHJv
dmlkZWQsCiMgdGhlbiB0YXJnZXRzIG1heSBiZSBtaXhlZCBpbiB0aGUgY2FjaGUgKHR3byB0
YXJnZXRzIG1heSBzaGFyZSB0aGUgc2FtZQojIGNhY2hlIGZpbGUtLW5vdCByZWNvbW1lbmRl
ZCkuCnN1YiBVc2VDYWNoZSgkQCkgewogICAgbXkoJGRpciwgQGFyZ3MpID0gQF87CiAgICAj
IE5PVEU6IGl0J3MgaW1wb3J0YW50IHRvIHByb2Nlc3MgYXJndW1lbnRzIGhlcmUgcmVnYXJk
bGVzcyBvZiB3aGV0aGVyCiAgICAjIHRoZSBjYWNoZSBpcyBkaXNhYmxlZCB0ZW1wb3Jhcmls
eSwgc2luY2UgdGhlIG1peHRhcmdldHMgb3B0aW9uIGFmZmVjdHMKICAgICMgdGhlIHNhbHQg
Zm9yIGRlcml2ZWQgc2lnbmF0dXJlcy4KICAgIGZvciAoQGFyZ3MpIHsKCWlmICgkXyBlcSAi
bWl4dGFyZ2V0cyIpIHsKCSAgICAjIFdoZW4gbWl4dGFyZ2V0cyBpcyBlbmFibGVkLCB3ZSBz
YWx0IHRoZSB0YXJnZXQgc2lnbmF0dXJlcy4KCSAgICAjIFRoaXMgaXMgZG9uZSBwdXJlbHkg
dG8gYXZvaWQgYSBzY2VuYXJpbyB3aGVyZWJ5IGlmCgkgICAgIyBtaXh0YXJnZXRzIGlzIHR1
cm5lZCBvbiBvciBvZmYgYWZ0ZXIgZG9pbmcgYnVpbGRzLCBhbmQKCSAgICAjIGlmIGNhY2hl
IHN5bmNocm9uaXphdGlvbiB3aXRoIC1jcyBpcyB1c2VkLCB0aGVuCgkgICAgIyBjYWNoZSBm
aWxlcyBtYXkgYmUgc2hhcmVkIGluIHRoZSBjYWNoZSBpdHNlbGYgKGxpbmtlZAoJICAgICMg
dW5kZXIgbW9yZSB0aGFuIG9uZSBuYW1lIGluIHRoZSBjYWNoZSkuIFRoaXMgaXMgbm90IGJh
ZCwKCSAgICAjIHBlciBzZSwgYnV0IHNpbXBseSB3b3VsZCBtZWFuIHRoYXQgYSBjYWNoZSBj
bGVhbmluZyBhbGdvcml0aG0KCSAgICAjIHRoYXQgbG9va2VkIGZvciBhIGxpbmsgY291bnQg
b2YgMSB3b3VsZCBuZXZlciBmaW5kIHRob3NlCgkgICAgIyBwYXJ0aWN1bGFyIGZpbGVzOyB0
aGV5IHdvdWxkIGFsd2F5cyBhcHBlYXIgdG8gYmUgaW4gdXNlLgoJICAgICRwYXJhbTo6c2Fs
dCA9ICdNJyAuICRwYXJhbTo6c2FsdDsKCSAgICAkcGFyYW06Om1peHRhcmdldHMgPSAxOwoJ
fSBlbHNlIHsKCSAgICBkaWUgcXEoJDA6IFVzZUNhY2hlIHVucmVjb2duaXplZCBvcHRpb24g
IiRfIlxuKTsKCX0KICAgIH0KICAgIGlmICgkcGFyYW06OmNhY2hlZGlzYWJsZSkgewoJd2Fy
bigiTm90ZTogY2FjaGluZyBkaXNhYmxlZCBieSAtY2QgZmxhZ1xuIik7CglyZXR1cm4gMTsK
ICAgIH0KICAgIG15KCRkZXB0aCkgPSAxNTsKICAgIHdoaWxlICgkZGVwdGgtLSAmJiAhIC1k
ICRkaXIpIHsKCSRkaXIgPSBGaWxlOjpTcGVjLT5jYXRkaXIoJGRpcjo6VVBESVIsICRkaXIp
OwogICAgfQogICAgaWYgKC1kICRkaXIpIHsKCSRwYXJhbTo6Y2FjaGUgPSAkZGlyOwoJcmV0
dXJuIDE7CiAgICB9CiAgICByZXR1cm4gdW5kZWY7Cn0KCiMgU2FsdCB0aGUgc2lnbmF0dXJl
IGdlbmVyYXRvci4gVGhlIHNhbHQgKGEgbnVtYmVyIG9mIHN0cmluZykgaXMgYWRkZWQKIyBp
bnRvIHRoZSBzaWduYXR1cmUgb2YgZWFjaCBkZXJpdmVkIGZpbGUuIENoYW5naW5nIHRoZSBz
YWx0IHdpbGwKIyBmb3JjZSByZWNvbXBpbGF0aW9uIG9mIGFsbCBkZXJpdmVkIGZpbGVzLgpz
dWIgU2FsdCgkKSB7CiAgICAjIFdlIGFwcGVuZCB0aGUgdmFsdWUsIHNvIHRoYXQgVXNlQ2Fj
aGUgYW5kIFNhbHQgbWF5IGJlIHVzZWQKICAgICMgaW4gZWl0aGVyIG9yZGVyIHdpdGhvdXQg
Y2hhbmdpbmcgdGhlIHNpZ25hdHVyZSBjYWxjdWxhdGlvbi4KICAgICRwYXJhbTo6c2FsdCAu
PSAkX1swXTsKfQoKIyBNYXJrIGZpbGVzIChvciBkaXJlY3RvcmllcykgdG8gbm90IGJlIHJl
bW92ZWQgYmVmb3JlIGJ1aWxkaW5nLgpzdWIgUHJlY2lvdXMgewogICAgbWFwKCRfLT57cHJl
Y2lvdXN9ID0gMSwgbWFwKCRkaXI6OmN3ZC0+bG9va3VwKCRfKSwgQF8pKTsKfQoKDAojIFRo
ZXNlIG1ldGhvZHMgYXJlIGNhbGxhYmxlIGZyb20gQ29uc2NyaXB0IGZpbGVzLCB2aWEgYSBj
b25zCiMgb2JqZWN0LiBQcm9jcyBiZWdpbm5pbmcgd2l0aCBfIGFyZSBpbnRlbmRlZCBmb3Ig
aW50ZXJuYWwgdXNlLgpwYWNrYWdlIGNvbnM7Cgp1c2UgdmFycyBxdyggJWVudmNhY2hlICk7
CgojIFRoaXMgaXMgcGFzc2VkIHRoZSBuYW1lIG9mIHRoZSBiYXNlIGVudmlyb25tZW50IHRv
IGluc3RhbnRpYXRlLgojIE92ZXJyaWRlcyB0byB0aGUgYmFzZSBlbnZpcm9ubWVudCBtYXkg
YWxzbyBiZSBwYXNzZWQgaW4KIyBhcyBrZXkvdmFsdWUgcGFpcnMuCnN1YiBuZXcgewogICAg
bXkoJHBhY2thZ2UpID0gc2hpZnQ7CiAgICBteSAoJGVudikgPSB7QHBhcmFtOjpkZWZhdWx0
cywgQF99OwogICAgQHskZW52LT57X2VudmNvcHl9fSA9ICUkZW52OyAjIE5vdGU6IHdlIG5l
dmVyIGNoYW5nZSBQQVRICiAgICAkZW52LT57X2N3ZH0gPSAkZGlyOjpjd2Q7ICMgU2F2ZSBk
aXJlY3Rvcnkgb2YgZW52aXJvbm1lbnQgZm9yCiAgICBibGVzcyAkZW52LCAkcGFja2FnZTsJ
IyBhbnkgZGVmZXJyZWQgbmFtZSBpbnRlcnByZXRhdGlvbi4KfQoKIyBDbG9uZSBhbiBlbnZp
cm9ubWVudC4KIyBOb3RlIHRoYXQgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdpbGwgYmUgdGhl
IGluaXRpYWwgZGlyZWN0b3J5CiMgb2YgdGhlIG9yaWdpbmFsIGVudmlyb25tZW50LgpzdWIg
Y2xvbmUgewogICAgbXkoJGVudikgPSBzaGlmdDsKICAgIG15ICRjbG9uZSA9IHtAeyRlbnYt
PntfZW52Y29weX19LCBAX307CiAgICBAeyRjbG9uZS0+e19lbnZjb3B5fX0gPSAlJGNsb25l
OyAjIE5vdGU6IHdlIG5ldmVyIGNoYW5nZSBQQVRICiAgICAkY2xvbmUtPntfY3dkfSA9ICRl
bnYtPntfY3dkfTsKICAgIGJsZXNzICRjbG9uZSwgcmVmICRlbnY7Cn0KCiMgQ3JlYXRlIGEg
ZmxhdHRlbmVkIGhhc2ggcmVwcmVzZW50aW5nIHRoZSBlbnZpcm9ubWVudC4KIyBJdCBhbHNv
IGNvbnRhaW5zIGEgY29weSBvZiB0aGUgUEFUSCwgc28gdGhhdCB0aGUgcGF0aAojIG1heSBi
ZSBtb2RpZmllZCBpZiBpdCBpcyBjb252ZXJ0ZWQgYmFjayB0byBhIGhhc2guCnN1YiBjb3B5
IHsKICAgIG15KCRlbnYpID0gc2hpZnQ7CiAgICAoQHskZW52LT57X2VudmNvcHl9fSwgJ0VO
VicgPT4geyV7JGVudi0+e0VOVn19fSwgQF8pCn0KCiMgUmVzb2x2ZSB3aGljaCBlbnZpcm9u
bWVudCB0byBhY3R1YWxseSB1c2UgZm9yIGEgZ2l2ZW4KIyB0YXJnZXQuIFRoaXMgaXMganVz
dCB1c2VkIGZvciBzaW1wbGUgb3ZlcnJpZGVzLgpzdWIgX3Jlc29sdmUgewogICAgcmV0dXJu
ICRfWzBdIGlmICEkcGFyYW06Om92ZXJyaWRlczsKICAgIG15KCRlbnYsICR0Z3QpID0gQF87
CiAgICBteSgkcGF0aCkgPSAkdGd0LT5wYXRoOwogICAgbXkgJHJlOwogICAgZm9yICRyZSAo
QHBhcmFtOjpvdmVycmlkZXMpIHsKCW5leHQgaWYgJHBhdGggIX4gLyRyZS87CgkjIEZvdW5k
IG9uZS4gUmV0dXJuIGEgY29tYmluYXRpb24gb2YgdGhlIG9yaWdpbmFsIGVudmlyb25tZW50
CgkjIGFuZCB0aGUgb3ZlcnJpZGUuCglteSgkb3ZyKSA9ICRwYXJhbTo6b3ZlcnJpZGVzeyRy
ZX07CglyZXR1cm4gJGVudmNhY2hleyRlbnYsJHJlfSBpZiAkZW52Y2FjaGV7JGVudiwkcmV9
OwoJbXkoJG5ld2VudikgPSB7QHskZW52LT57X2VudmNvcHl9fSwgQCRvdnJ9OwoJQHskbmV3
ZW52LT57X2VudmNvcHl9fSA9ICUkZW52OwoJJG5ld2Vudi0+e19jd2R9ID0gJGVudi0+e19j
d2R9OwoJcmV0dXJuICRlbnZjYWNoZXskZW52LCRyZX0gPSBibGVzcyAkbmV3ZW52LCByZWYg
JGVudjsKICAgIH0KICAgIHJldHVybiAkZW52Owp9CgojIFN1YnN0aXR1dGUgY29uc3RydWN0
aW9uIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbnRvIGEgc3RyaW5nLgojIEludGVybmFsIGZ1
bmN0aW9uL21ldGhvZC4Kc3ViIF9zdWJzdCB7CiAgICBteSgkZW52LCAkc3RyKSA9IEBfOwog
ICAgaWYgKCEgZGVmaW5lZCAkc3RyKSB7CglyZXR1cm4gdW5kZWY7CiAgICB9IGVsc2lmIChy
ZWYoJHN0cikgZXEgIkFSUkFZIikgewoJcmV0dXJuIFsgbWFwKCRlbnYtPl9zdWJzdCgkXyks
IEAkc3RyKSBdOwogICAgfSBlbHNlIHsKCSMgJSBleHBhbnNpb24uICAlJSBnZXRzIGNvbnZl
cnRlZCB0byAlIGxhdGVyLCBzbyBleHBhbmQgYW55CgkjICVrZXl3b3JkIGNvbnN0cnVjdGlv
biB0aGF0IGRvZXNuJ3QgaGF2ZSBhICUgaW4gZnJvbnQgb2YgaXQsCgkjIG1vZHVsbyBtdWx0
aXBsZSAlJSBwYWlycyBpbiBiZXR3ZWVuLgoJIyBJbiBQZXJsIDUuMDA1IGFuZCBsYXRlciwg
d2UgY291bGQgYWN0dWFsbHkgZG8gdGhpcyBpbiBvbmUgcmVnZXgKCSMgdXNpbmcgYSBjb25k
aXRpb25hbCBleHByZXNzaW9uIGFzIGZvbGxvd3MsCgkjCXdoaWxlICgkc3RyID1+IHMvKCRw
cmUpXCUoXHspPyhbX2EtekEtWl1cdyopKD8oMilcfSkvIiQxIi4kZW52LT57JDN9L2dlKSB7
fQoJIyBUaGUgZm9sbG93aW5nIHR3by1zdGVwIGFwcHJvYWNoIGlzIGJhY2t3YXJkcy1jb21w
YXRpYmxlCgkjIHRvIChhdCBsZWFzdCkgUGVybDUuMDAzLgoJbXkgJHByZSA9ICdefFteXCVd
KD86XCVcJSkqJzsKCXdoaWxlICgoJHN0ciA9fiBzLygkcHJlKVwlKFtfYS16QS1aXVx3Kikv
JDEuKCRlbnYtPnskMn18fCcnKS9nZSkgfHwKCSAgICAgICAoJHN0ciA9fiBzLygkcHJlKVwl
XHsoW19hLXpBLVpdXHcqKVx9LyQxLigkZW52LT57JDJ9fHwnJykvZ2UpKSB7fQoJcmV0dXJu
ICRzdHI7CiAgICB9Cn0KCnN1YiBJbnN0YWxsIHsKICAgIG15KCRlbnYpID0gc2hpZnQ7CiAg
ICBteSgkdGd0ZGlyKSA9ICRkaXI6OmN3ZC0+bG9va3VwZGlyKCRlbnYtPl9zdWJzdChzaGlm
dCkpOwogICAgbXkgJGZpbGU7CiAgICBmb3IgJGZpbGUgKG1hcCgkZGlyOjpjd2QtPmxvb2t1
cGZpbGUoJGVudi0+X3N1YnN0KCRfKSksIEBfKSkgewoJbXkoJHRndCkgPSAkdGd0ZGlyLT5s
b29rdXBmaWxlKCRmaWxlLT57ZW50cnl9KTsKCSR0Z3QtPmJpbmQoZmluZCBidWlsZDo6aW5z
dGFsbCwgJGZpbGUpOwogICAgfQp9CgpzdWIgSW5zdGFsbEFzIHsKICAgIG15ICRlbnYgPSBz
aGlmdDsKICAgIG15ICR0Z3QgPSBzaGlmdDsKICAgIG15ICRzcmMgPSBzaGlmdDsKICAgIG15
IEBzb3VyY2VzID0gKCk7CiAgICBteSBAdGFyZ2V0cyA9ICgpOwoKICAgIGlmIChyZWYgJHRn
dCkgewoJZGllICJJbnN0YWxsQXM6IFNvdXJjZSBpcyBhIGZpbGUgYW5kIHRhcmdldCBpcyBh
IGxpc3QhXG4iCgkgICAgaWYgKCFyZWYoJHNyYykpOwoJQHNvdXJjZXMgPSBAJHNyYzsKCUB0
YXJnZXRzID0gQCR0Z3Q7CiAgICB9IGVsc2lmIChyZWYgJHNyYykgewoJZGllICJJbnN0YWxs
QXM6IFRhcmdldCBpcyBhIGZpbGUgYW5kIHNvdXJjZSBpcyBhIGxpc3QhXG4iOwogICAgfSBl
bHNlIHsKCXB1c2ggQHNvdXJjZXMsICRzcmM7CglwdXNoIEB0YXJnZXRzLCAkdGd0OwogICAg
fQoKICAgIGlmICgkI3NvdXJjZXMgIT0gJCN0YXJnZXRzKSB7CglteSAkdG4gPSAkI3Rhcmdl
dHMrMTsKCW15ICRzbiA9ICQjc291cmNlcysxOwoJZGllICJJbnN0YWxsQXM6IFNvdXJjZSBm
aWxlIGxpc3QgKCRzbikgYW5kIHRhcmdldCBmaWxlIGxpc3QgKCR0bikgIiAuCgkgICAgImFy
ZSBpbmNvbnNpc3RlbnQgaW4gbGVuZ3RoIVxuIjsKICAgIH0gZWxzZSB7Cglmb3JlYWNoICgw
Li4kI3NvdXJjZXMpIHsKCSAgICBteSAkdGZpbGUgPSAkZGlyOjpjd2QtPmxvb2t1cGZpbGUo
JGVudi0+X3N1YnN0KCR0YXJnZXRzWyRfXSkpOwoJICAgIG15ICRzZmlsZSA9ICRkaXI6OmN3
ZC0+bG9va3VwZmlsZSgkZW52LT5fc3Vic3QoJHNvdXJjZXNbJF9dKSk7CgkgICAgJHRmaWxl
LT5iaW5kKGZpbmQgYnVpbGQ6Omluc3RhbGwsICRzZmlsZSk7Cgl9CiAgICB9Cn0KCiMgSW5z
dGFsbGF0aW9uIGluIGEgbG9jYWwgYnVpbGQgZGlyZWN0b3J5LAojIGNvcHlpbmcgZnJvbSB0
aGUgcmVwb3NpdG9yeSBpZiBpdCdzIGFscmVhZHkgYnVpbHQgdGhlcmUuCiMgRnVuY3Rpb25h
bGx5IGVxdWl2YWxlbnQgdG86CiMJSW5zdGFsbCAkZW52ICRkaXIsICRmaWxlOwojCUxvY2Fs
ICIkZGlyLyRmaWxlIjsKc3ViIEluc3RhbGxfTG9jYWwgewogICAgbXkoJGVudikgPSBzaGlm
dDsKICAgIG15KCR0Z3RkaXIpID0gJGRpcjo6Y3dkLT5sb29rdXBkaXIoJGVudi0+X3N1YnN0
KHNoaWZ0KSk7CiAgICBteSAkZmlsZTsKICAgIGZvciAkZmlsZSAobWFwKCRkaXI6OmN3ZC0+
bG9va3VwZmlsZSgkZW52LT5fc3Vic3QoJF8pKSwgQF8pKSB7CglteSgkdGd0KSA9ICR0Z3Rk
aXItPmxvb2t1cGZpbGUoJGZpbGUtPntlbnRyeX0pOwoJJHRndC0+YmluZChmaW5kIGJ1aWxk
OjppbnN0YWxsLCAkZmlsZSk7CgkkdGd0LT5sb2NhbCgxKTsKICAgIH0KfQoKc3ViIE9iamVj
dHMgewogICAgbXkoJGVudikgPSBzaGlmdDsKICAgIG1hcCgkZGlyOjpjd2QtPnJlbHBhdGgo
JF8pLAoJX09iamVjdHMoJGVudiwgbWFwKCRkaXI6OmN3ZC0+bG9va3VwZmlsZSgkZW52LT5f
c3Vic3QoJF8pKSwgQF8pKSkKfQoKIyBDYWxsZWQgd2l0aCBtdWx0aXBsZSBzb3VyY2UgZmls
ZSByZWZlcmVuY2VzIChvciBvYmplY3QgZmlsZXMpLgojIFJldHVybnMgY29ycmVzcG9uZGlu
ZyBvYmplY3QgZmlsZXMgcmVmZXJlbmNlcy4Kc3ViIF9PYmplY3RzIHsKICAgIG15KCRlbnYp
ID0gc2hpZnQ7CiAgICBteSgkc3VmZml4KSA9ICRlbnYtPntTVUZPQkp9OwogICAgbWFwKF9P
YmplY3QoJGVudiwgJF8sICRfLT57ZGlyfS0+bG9va3VwZmlsZSgkXy0+YmFzZV9zdWYoJHN1
ZmZpeCkpKSwgQF8pOwp9CgojIENhbGxlZCB3aXRoIGFuIG9iamVjdCBhbmQgc291cmNlIHJl
ZmVyZW5jZS4gIElmIG5vIG9iamVjdCByZWZlcmVuY2UKIyBpcyBzdXBwbGllZCwgdGhlbiB0
aGUgb2JqZWN0IGZpbGUgaXMgZGV0ZXJtaW5lZCBpbXBsaWNpdGx5IGZyb20gdGhlCiMgc291
cmNlIGZpbGUncyBleHRlbnNpb24uIFNldHMgdXAgdGhlIGFwcHJvcHJpYXRlIHJ1bGVzIGZv
ciBjcmVhdGluZwojIHRoZSBvYmplY3QgZnJvbSB0aGUgc291cmNlLiAgUmV0dXJucyB0aGUg
b2JqZWN0IHJlZmVyZW5jZS4Kc3ViIF9PYmplY3QgewogICAgbXkoJGVudiwgJHNyYywgJG9i
aikgPSBAXzsKICAgIHJldHVybiAkb2JqIGlmICRzcmMgZXEgJG9iajsgIyBkb24ndCBuZWVk
IHRvIGJ1aWxkIHNlbGYgZnJvbSBzZWxmLgogICAgbXkoJG9iamVudikgPSAkZW52LT5fcmVz
b2x2ZSgkb2JqKTsKICAgIG15KCRzdWZmaXgpID0gJHNyYy0+c3VmZml4OwoKICAgIG15KCRi
dWlsZGVyKSA9ICRlbnYtPntTVUZNQVB9eyRzdWZmaXh9OwoKICAgIGlmICgkYnVpbGRlcikg
ewoJJG9iai0+YmluZCgoZmluZCAkYnVpbGRlcigkb2JqZW52KSksICRzcmMpOwogICAgfSBl
bHNlIHsKCWRpZSgiZG9uJ3Qga25vdyBob3cgdG8gY29uc3RydWN0ICR7XCRvYmotPnBhdGh9
IGZyb20gIiAuCgkgICAgIiR7XCRzcmMtPnBhdGh9LlxuIik7CiAgICB9CiAgICAkb2JqCn0K
CnN1YiBQcm9ncmFtIHsKICAgIG15KCRlbnYpID0gc2hpZnQ7CiAgICBteSgkdGd0KSA9ICRk
aXI6OmN3ZC0+bG9va3VwZmlsZShmaWxlOjphZGRzdWZmaXgoJGVudi0+X3N1YnN0KHNoaWZ0
KSwKCQkJCQkJICRlbnYtPntTVUZFWEV9KSk7CiAgICBteSgkcHJvZ2VudikgPSAkZW52LT5f
cmVzb2x2ZSgkdGd0KTsKICAgICR0Z3QtPmJpbmQoZmluZCBidWlsZDo6Y29tbWFuZDo6bGlu
aygkcHJvZ2VudiwgJHByb2dlbnYtPntMSU5LQ09NfSksCgkgICAgICAgJGVudi0+X09iamVj
dHMobWFwKCRkaXI6OmN3ZC0+bG9va3VwZmlsZSgkZW52LT5fc3Vic3QoJF8pKSwgQF8pKSk7
Cn0KCnN1YiBNb2R1bGUgewogICAgbXkoJGVudikgPSBzaGlmdDsKICAgIG15KCR0Z3QpID0g
JGRpcjo6Y3dkLT5sb29rdXBmaWxlKCRlbnYtPl9zdWJzdChzaGlmdCkpOwogICAgbXkoJG1v
ZGVudikgPSAkZW52LT5fcmVzb2x2ZSgkdGd0KTsKICAgIG15KCRjb20pID0gcG9wKEBfKTsK
ICAgICR0Z3QtPmJpbmQoZmluZCBidWlsZDo6Y29tbWFuZDo6bGluaygkbW9kZW52LCAkY29t
KSwKCSAgICAgICAkZW52LT5fT2JqZWN0cyhtYXAoJGRpcjo6Y3dkLT5sb29rdXBmaWxlKCRl
bnYtPl9zdWJzdCgkXykpLCBAXykpKTsKfQoKc3ViIExpbmtlZE1vZHVsZSB7CiAgICBteSgk
ZW52KSA9IHNoaWZ0OwogICAgbXkoJHRndCkgPSAkZGlyOjpjd2QtPmxvb2t1cGZpbGUoJGVu
di0+X3N1YnN0KHNoaWZ0KSk7CiAgICBteSgkcHJvZ2VudikgPSAkZW52LT5fcmVzb2x2ZSgk
dGd0KTsKICAgICR0Z3QtPmJpbmQoZmluZCBidWlsZDo6Y29tbWFuZDo6bGlua2VkbW9kdWxl
CgkgICAgICAgKCRwcm9nZW52LCAkcHJvZ2Vudi0+e0xJTktNT0RVTEVDT019KSwKCSAgICAg
ICAkZW52LT5fT2JqZWN0cyhtYXAoJGRpcjo6Y3dkLT5sb29rdXBmaWxlKCRlbnYtPl9zdWJz
dCgkXykpLCBAXykpKTsKfQoKc3ViIExpYnJhcnkgewogICAgbXkoJGVudikgPSBzaGlmdDsK
ICAgIG15KCRsaWIpID0gJGRpcjo6Y3dkLT5sb29rdXBmaWxlKGZpbGU6OmFkZHN1ZmZpeCgk
ZW52LT5fc3Vic3Qoc2hpZnQpLAoJCQkJCQkgJGVudi0+e1NVRkxJQn0pKTsKICAgIG15KCRs
aWJlbnYpID0gJGVudi0+X3Jlc29sdmUoJGxpYik7CiAgICAkbGliLT5iaW5kKGZpbmQgYnVp
bGQ6OmNvbW1hbmQ6OmxpYnJhcnkoJGxpYmVudiksCgkgICAgICAgJGVudi0+X09iamVjdHMo
bWFwKCRkaXI6OmN3ZC0+bG9va3VwZmlsZSgkZW52LT5fc3Vic3QoJF8pKSwgQF8pKSk7Cn0K
CiMgU2ltcGxlIGRlcml2YXRpb246IHlvdSBwcm92aWRlIHRhcmdldCwgc291cmNlKHMpLCBj
b21tYW5kLgojIFNwZWNpYWwgdmFyaWFibGVzIHN1YnN0aXR1dGUgaW50byB0aGUgcnVsZS4K
IyBUYXJnZXQgbWF5IGJlIGEgcmVmZXJlbmNlLCBpbiB3aGljaCBjYXNlIGl0IGlzIHRha2Vu
CiMgdG8gYmUgYSBtdWx0aXBsZSB0YXJnZXQgKGFsbCB0YXJnZXRzIGJ1aWx0IGF0IG9uY2Up
LgpzdWIgQ29tbWFuZCB7CiAgICBteSgkZW52KSA9IHNoaWZ0OwogICAgbXkoJHRndCkgPSAk
ZW52LT5fc3Vic3Qoc2hpZnQpOwogICAgbXkoJGNvbSkgPSBwb3AoQF8pOwogICAgbXkoQHNv
dXJjZXMpID0gbWFwKCRkaXI6OmN3ZC0+bG9va3VwZmlsZSgkZW52LT5fc3Vic3QoJF8pKSwg
QF8pOwogICAgaWYgKHJlZigkdGd0KSkgewoJIyBBIG11bHRpLXRhcmdldCBjb21tYW5kLgoJ
bXkoQHRndHMpID0gbWFwKCRkaXI6OmN3ZC0+bG9va3VwZmlsZSgkXyksIEAkdGd0KTsKCWRp
ZSgiZW1wdHkgdGFyZ2V0IGxpc3QgaW4gbXVsdGktdGFyZ2V0IGNvbW1hbmRcbiIpIGlmICFA
dGd0czsKCSRlbnYgPSAkZW52LT5fcmVzb2x2ZSgkdGd0c1swXSk7CglteSAkYnVpbGRlciA9
IGZpbmQgYnVpbGQ6OmNvbW1hbmQ6OnVzZXIoJGVudiwgJGNvbSwgJ3NjcmlwdCcpOwoJbXko
JG11bHRpKSA9IGJ1aWxkOjptdWx0aXBsZS0+bmV3KCRidWlsZGVyLCBcQHRndHMpOwoJZm9y
ICR0Z3QgKEB0Z3RzKSB7CgkgICAgJHRndC0+YmluZCgkbXVsdGksIEBzb3VyY2VzKTsKCX0K
ICAgIH0gZWxzZSB7CgkkdGd0ID0gJGRpcjo6Y3dkLT5sb29rdXBmaWxlKCR0Z3QpOwoJJGVu
diA9ICRlbnYtPl9yZXNvbHZlKCR0Z3QpOwoJbXkgJGJ1aWxkZXIgPSBmaW5kIGJ1aWxkOjpj
b21tYW5kOjp1c2VyKCRlbnYsICRjb20sICdzY3JpcHQnKTsKCSR0Z3QtPmJpbmQoJGJ1aWxk
ZXIsIEBzb3VyY2VzKTsKICAgIH0KfQoKc3ViIERlcGVuZHMgewogICAgbXkoJGVudikgPSBz
aGlmdDsKICAgIG15KCR0Z3QpID0gJGVudi0+X3N1YnN0KHNoaWZ0KTsKICAgIG15KEBkZXBz
KSA9IG1hcCgkZGlyOjpjd2QtPmxvb2t1cCgkZW52LT5fc3Vic3QoJF8pKSwgQF8pOwogICAg
aWYgKCEgcmVmKCR0Z3QpKSB7CgkkdGd0ID0gWyAkdGd0IF07CiAgICB9CiAgICBteSgkdCk7
CiAgICBmb3JlYWNoICR0IChtYXAoJGRpcjo6Y3dkLT5sb29rdXBmaWxlKCRfKSwgQCR0Z3Qp
KSB7CglwdXNoKEB7JHQtPntkZXB9fSwgQGRlcHMpOwogICAgfQp9CgojIFNldHVwIGEgcXVp
Y2sgc2Nhbm5lciBmb3IgdGhlIHNwZWNpZmllZCBpbnB1dCBmaWxlLCBmb3IgdGhlCiMgYXNz
b2NpYXRlZCBlbnZpcm9ubWVudC4gQW55IHVzZSBvZiB0aGUgaW5wdXQgZmlsZSB3aWxsIGNh
dXNlIHRoZQojIHNjYW5uZXIgdG8gYmUgaW52b2tlZCwgb25jZSBvbmx5LiBUaGUgc2Nhbm5l
ciBzZWVzIGp1c3Qgb25lIGxpbmUgYXQKIyBhIHRpbWUgb2YgdGhlIGZpbGUsIGFuZCBpcyBl
eHBlY3RlZCB0byByZXR1cm4gYSBsaXN0IG9mCiMgZGVwZW5kZW5jaWVzLgpzdWIgUXVpY2tT
Y2FuIHsKICAgIG15KCRlbnYsICRjb2RlLCAkZmlsZSwgJHBhdGgpID0gQF87CiAgICAkZGly
Ojpjd2QtPmxvb2t1cCgkZW52LT5fc3Vic3QoJGZpbGUpKS0+eydzcmNzY2FuJywkZW52fSA9
CglmaW5kIHNjYW46OnF1aWNrc2NhbigkY29kZSwgJGVudiwgJGVudi0+X3N1YnN0KCRwYXRo
KSk7Cn0KDAojIEdlbmVyaWMgYnVpbGRlciBtb2R1bGUuIEp1c3QgYSBmZXcgZGVmYXVsdCBt
ZXRob2RzLiAgRXZlcnkgZGVyaXZhYmxlCiMgZmlsZSBtdXN0IGhhdmUgYSBidWlsZGVyIG9i
amVjdCBvZiBzb21lIHNvcnQgYXR0YWNoZWQuICBVc3VhbGx5CiMgYnVpbGRlciBvYmplY3Rz
IGFyZSBzaGFyZWQuCnBhY2thZ2UgYnVpbGQ7CgojIE51bGwgc2lnbmF0dXJlIGZvciBkeW5h
bWljIGluY2x1ZGVzLgpzdWIgaW5jbHVkZXMgeyAoKSB9CgojIE51bGwgc2lnbmF0dXJlIGZv
ciBidWlsZCBzY3JpcHQuCnN1YiBzY3JpcHQgeyAoKSB9CgojIE5vdCBjb21wYXRpYmxlIHdp
dGggYW55IG90aGVyIGJ1aWxkZXIsIGJ5IGRlZmF1bHQuCnN1YiBjb21wYXRpYmxlIHsgMCB9
CgoMCiMgQnVpbGRlciBtb2R1bGUgZm9yIHRoZSBJbnN0YWxsIGNvbW1hbmQuCnBhY2thZ2Ug
YnVpbGQ6Omluc3RhbGw7Cgp1c2UgdmFycyBxdyggQElTQSAkaW5zdGFsbGVyICk7CgpCRUdJ
TiB7CiAgICBASVNBID0gcXcoYnVpbGQpOwogICAgYmxlc3MgJGluc3RhbGxlciA9IHt9ICAg
ICMgaGFuZGxlIGZvciB0aGlzIGNsYXNzLgp9CgpzdWIgZmluZCB7CiAgICAkaW5zdGFsbGVy
Cn0KCiMgQ2FjaGluZyBub3Qgc3VwcG9ydGVkIGZvciBJbnN0YWxsOiBnZW5lcmFsbHkgaW5z
dGFsbCBpcyB0cml2aWFsIGFueXdheSwKIyBhbmQgd2UgZG9uJ3Qgd2FudCB0byBjbHV0dGVy
IHRoZSBjYWNoZS4Kc3ViIGNhY2hpbiB7IHVuZGVmIH0Kc3ViIGNhY2hvdXQgeyB9CgojIERv
IHRoZSBpbnN0YWxsYXRpb24uCnN1YiBhY3Rpb24gewogICAgbXkoJHNlbGYsICR0Z3QpID0g
QF87CiAgICBteSgkc3JjKSA9ICR0Z3QtPntzb3VyY2VzfVswXTsKICAgIG1haW46OnNob3dj
b20oIkluc3RhbGwgJHtcJHNyYy0+cnBhdGh9IGFzICR7XCR0Z3QtPnBhdGh9IikKCWlmICgk
cGFyYW06Omluc3RhbGwgJiYgISRwYXJhbTo6cXVpZXQpOwogICAgcmV0dXJuIHVubGVzcyAk
cGFyYW06OmJ1aWxkOwogICAgZnV0aWw6Omluc3RhbGwoJHNyYy0+cnBhdGgsICR0Z3QpOwog
ICAgcmV0dXJuIDE7Cn0KCgwKIyBCdWlsZGVyIG1vZHVsZSBmb3IgZ2VuZXJpYyBVTklYIGNv
bW1hbmRzLgpwYWNrYWdlIGJ1aWxkOjpjb21tYW5kOwoKdXNlIHZhcnMgcXcoIEBJU0EgJWNv
bSApOwoKQkVHSU4geyBASVNBID0gcXcoYnVpbGQpIH0KCnN1YiBmaW5kIHsKICAgIG15ICgk
Y2xhc3MsICRlbnYsICRjb20sICRwYWNrYWdlKSA9IEBfOwogICAgJGNvbSA9ICRlbnYtPl9z
dWJzdCgkY29tKTsKICAgICRwYWNrYWdlIHx8PSAnJzsKICAgICRjb217JGVudiwkY29tLCRw
YWNrYWdlfSB8fCBkbyB7CgkjIFJlbW92ZSB1bndhbnRlZCBiaXRzIGZyb20gc2lnbmF0dXJl
IC0tIHRob3NlIGJyYWNrZXRlZCBieSAlKCAuLi4gJSkKCW15ICRjb21zaWcgPSAkY29tOwoJ
JGNvbXNpZyA9fiBzL15cQFxzKi8vbWc7Cgl3aGlsZSAoJGNvbXNpZyA9fiBzLyVcKChbXiVd
fCVbXlwoXSkqPyVcKS8vZykgeyB9CglteSAkc2VsZiA9IHsgZW52ID0+ICRlbnYsIGNvbSA9
PiAkY29tLCAncGFja2FnZScgPT4gJHBhY2thZ2UsCgkJICAgICBjb21zaWcgPT4gJGNvbXNp
ZyB9OwoJJGNvbXskZW52LCRjb20sJHBhY2thZ2V9ID0gYmxlc3MgJHNlbGYsICRjbGFzczsK
ICAgIH0KfQoKIyBEZWZhdWx0IGNhY2hlIGluIGZ1bmN0aW9uLgpzdWIgY2FjaGluIHsKICAg
IG15KCRzZWxmLCAkdGd0LCAkc2lnKSA9IEBfOwogICAgaWYgKGNhY2hlOjppbigkdGd0LCAk
c2lnKSkgewoJaWYgKCRwYXJhbTo6Y2FjaGVjb20pIHsKCSAgICBtYXAgeyBpZiAoISBzL15c
QFxzKi8vKSB7IG1haW46OnNob3djb20oJF8pIH0gfSAkc2VsZi0+Z2V0Y29tcygkdGd0KTsK
CX0gZWxzZSB7CgkgICAgcHJpbnRmKCJSZXRyaWV2ZWQgJXMgZnJvbSBjYWNoZVxuIiwgJHRn
dC0+cGF0aCkKCQl1bmxlc3MgKCRwYXJhbTo6cXVpZXQpOwoJfQoJcmV0dXJuIDE7CiAgICB9
CiAgICByZXR1cm4gdW5kZWY7Cn0KCiMgRGVmYXVsdCBjYWNoZSBvdXQgZnVuY3Rpb24uCnN1
YiBjYWNob3V0IHsKICAgIG15KCRzZWxmLCAkdGd0LCAkc2lnKSA9IEBfOwogICAgY2FjaGU6
Om91dCgkdGd0LCAkc2lnKTsKfQoKIyBpbnRlcm5hbCByb3V0aW5lIHRvIHByb2Nlc3MgdmFy
aWFibGUgb3B0aW9ucy4KIyBmOiByZXR1cm4gZmlsZSBwYXJ0CiMgRjogcmV0dXJuIGZpbGUg
cGFydCwgYnV0IHN0cmlwIGFueSBzdWZmaXgKIyBkOiByZXR1cm4gZGlyZWN0b3J5IHBhcnQK
IyBiOiByZXR1cm4gZnVsbCBwYXRoLCBidXQgc3RyaXAgYW55IHN1ZmZpeCAoYS5rLmEuIHJl
dHVybiBiYXNlbmFtZSkKIyBzOiByZXR1cm4gb25seSB0aGUgc3VmZml4IChvciBhbiBlbXB0
eSBzdHJpbmcsIGlmIG5vIHN1ZmZpeCBpcyB0aGVyZSkKIyBhOiByZXR1cm4gdGhlIGFic29s
dXRlIHBhdGggdG8gdGhlIGZpbGUKIyBubyBvcHRpb246IHJldHVybiBmdWxsIHBhdGggdG8g
ZmlsZQpzdWIgX3ZhcmlhbnQgewogICAgbXkoJG9wdCwgJGZpbGUpID0gQF87CiAgICAkb3B0
ID0gJycgaWYgISBkZWZpbmVkICRvcHQ7CiAgICBpZiAoJG9wdCBlcSAnZicpIHsgcmV0dXJu
ICRmaWxlLT57ZW50cnl9OyB9CiAgICBlbHNpZiAoJG9wdCBlcSAnZCcpIHsgcmV0dXJuICRm
aWxlLT57ZGlyfS0+cGF0aDsgfQogICAgZWxzaWYgKCRvcHQgZXEgJ0YnKSB7CglteSAkc3Vi
c3QgPSAkZmlsZS0+e2VudHJ5fTsKCSRzdWJzdCA9fiBzL1wuW15cLl0rJC8vOwoJcmV0dXJu
ICRzdWJzdDsKICAgIH0KICAgIGVsc2lmICgkb3B0IGVxICdiJykgewoJbXkgJHN1YnN0ID0g
JGZpbGUtPnBhdGg7Cgkkc3Vic3QgPX4gcy9cLlteXC5dKyQvLzsKCXJldHVybiAkc3Vic3Q7
CiAgICB9CiAgICBlbHNpZiAoJG9wdCBlcSAncycpIHsKCW15ICRzdWJzdCA9ICRmaWxlLT57
ZW50cnl9OwoJJHN1YnN0ID1+IG0vKFwuW15cLl0rKSQvOwoJcmV0dXJuICQxOwogICAgfQog
ICAgZWxzaWYgKCRvcHQgZXEgJ2EnKSB7CglteSAkcGF0aCA9ICRmaWxlLT5wYXRoOwoJaWYg
KCEgRmlsZTo6U3BlYy0+ZmlsZV9uYW1lX2lzX2Fic29sdXRlKCRwYXRoKSkgewoJICAgICRw
YXRoID0gRmlsZTo6U3BlYy0+Y2F0ZmlsZShDd2Q6OmN3ZCgpLCAkcGF0aCk7Cgl9CglyZXR1
cm4gJHBhdGg7CiAgICB9CiAgICBlbHNlIHsgcmV0dXJuICRmaWxlLT5wYXRoOyB9Cn0KCiMg
Rm9yIHRoZSBzaWduYXR1cmUgb2YgYSBiYXNpYyBjb21tYW5kLCB3ZSBkb24ndCBib3RoZXIK
IyBpbmNsdWRpbmcgdGhlIGNvbW1hbmQgaXRzZWxmLiBUaGlzIGlzIG5vdCBzdHJpY3RseSBj
b3JyZWN0LAojIGFuZCBpZiB3ZSB3YW50ZWQgdG8gYmUgcmlnb3JvdXMsIHdlIG1pZ2h0IHdh
bnQgdG8gaW5zaXN0CiMgdGhhdCB0aGUgY29tbWFuZCB3YXMgY2hlY2tlZCBmb3IgYWxsIHRo
ZSBiYXNpYyBjb21tYW5kcwojIGxpa2UgZ2NjLCBldGMuIEZvciB0aGlzIHJlYXNvbiB3ZSBk
b24ndCBoYXZlIGFuIGluY2x1ZGVzCiMgbWV0aG9kLgoKIyBDYWxsIHRoaXMgdG8gZ2V0IHRo
ZSBjb21tYW5kIGxpbmUgc2NyaXB0OiBhbiBhcnJheSBvZgojIGZ1bGx5IHN1YnN0aXR1dGVk
IGNvbW1hbmRzLgpzdWIgZ2V0Y29tcyB7CiAgICBteSgkc2VsZiwgJHRndCkgPSBAXzsKICAg
IG15KEBjb21zKTsKICAgIG15ICRjb207CiAgICBmb3IgJGNvbSAoc3BsaXQoL1xuLywgJHNl
bGYtPntjb219KSkgewoJbXkoQHNyYykgPSAodW5kZWYsIEB7JHRndC0+e3NvdXJjZXN9fSk7
CglteShAc3JjMSkgPSBAc3JjOwoKCW5leHQgaWYgJGNvbSA9fiAvXlxzKiQvOwoKCSMgTk9U
RTogd2UgdXNlZCB0byBoYXZlIGEgbW9yZSBlbGVnYW50IHMvLy4uLi9lIHNvbHV0aW9uCgkj
IGZvciB0aGUgaXRlbXMgYmVsb3csIGJ1dCB0aGlzIGNhdXNlZCBhIGJ1cyBlcnJvci4uLgoK
CSMgUmVtb3ZlICUoIGFuZCAlKSAtLSB0aG9zZSBhcmUgb25seSB1c2VkIHRvIGJyYWNrZXQg
cGFydHMKCSMgb2YgdGhlIGNvbW1hbmQgdGhhdCB3ZSBkb24ndCBkZXBlbmQgb24uCgkkY29t
ID1+IHMvJVsoKV0vL2c7CgoJIyBEZWFsIHdpdGggJW4sIG49MSw5IGFuZCB2YXJpYW50cy4K
CXdoaWxlICgkY29tID1+IC8lKFsxLTldKSg6KFtmZGJzRmFdPykpPy8pIHsKCSAgICBteSgk
bWF0Y2gpID0gJCY7CgkgICAgbXkoJHNyYykgPSAkc3JjMVskMV07CgkgICAgbXkoJHN1YnN0
KSA9IF92YXJpYW50KCQzLCAkc3JjMVskMV0tPnJmaWxlKTsKCSAgICB1bmRlZiAkc3JjWyQx
XTsKCSAgICAkY29tID1+IHMvJG1hdGNoLyRzdWJzdC87Cgl9CgoJIyBEZWFsIHdpdGggJTAg
YWthICU+IGFuZCB2YXJpYW50cy4KCXdoaWxlICgkY29tID1+IC8lWzA+XSg6KFtmZGJzRmFd
PykpPy8pIHsKCSAgICBteSgkbWF0Y2gpID0gJCY7CgkgICAgbXkoJHN1YnN0KSA9IF92YXJp
YW50KCQyLCAkdGd0KTsKCSAgICAkY29tID1+IHMvJG1hdGNoLyRzdWJzdC87Cgl9CgoJIyBE
ZWFsIHdpdGggJTwgKGFsbCBzb3VyY2VzIGV4Y2VwdCAlbidzIGFscmVhZHkgdXNlZCkKCXdo
aWxlICgkY29tID1+IC8lPCg6KFtmZGJzRmFdPykpPy8pIHsKCSAgICBteSgkbWF0Y2gpID0g
JCY7CgkgICAgbXkgQGxpc3QgPSAoKTsKCSAgICBmb3JlYWNoIChAc3JjKSB7CgkJcHVzaChA
bGlzdCwgX3ZhcmlhbnQoJDIsICRfLT5yZmlsZSkpIGlmICRfOwoJICAgIH0KCSAgICBteSgk
c3Vic3QpID0gam9pbignICcsIEBsaXN0KTsKCSAgICAkY29tID1+IHMvJG1hdGNoLyRzdWJz
dC87Cgl9CgoJIyBEZWFsIHdpdGggJVsgJV0uCgkkY29tID1+IHN7JVxbKC4qPyklXF19ewoJ
ICAgIG15KCRmdW5jLCBAYXJncykgPSBncmVwIHsgJF8gbmUgJycgfSBzcGxpdCgvXHMrLywg
JDEpOwoJICAgIGRpZSgiJDA6IFwiJGZ1bmNcIiBpcyBub3QgZGVmaW5lZC5cbiIpCgkJdW5s
ZXNzICgkc2VsZi0+e2Vudn0tPnskZnVuY30pOwoJICAgICZ7JHNlbGYtPntlbnZ9LT57JGZ1
bmN9fShAYXJncyk7Cgl9Z2V4OwoKCSMgQ29udmVydCBsZWZ0LW92ZXIgJSUgaW50byAlLgoJ
JGNvbSA9fiBzLyUlLyUvZzsKCgkjIFdoaXRlIHNwYWNlIGNsZWFudXAuIFhYWCBOTyBXQVkg
Rk9SIFVTRVIgVE8gSEFWRSBRVU9URUQgU1BBQ0VTCgkkY29tID0gam9pbignICcsIHNwbGl0
KCcgJywgJGNvbSkpOwoJbmV4dCBpZiAkY29tID1+IC9eOi8gJiYgJGNvbSAhfiAvXjpcUy87
CglwdXNoKEBjb21zLCAkY29tKTsKICAgIH0KICAgIEBjb21zCn0KCiMgQnVpbGQgdGhlIHRh
cmdldCB1c2luZyB0aGUgcHJldmlvdXNseSBzcGVjaWZpZWQgY29tbWFuZHMuCnN1YiBhY3Rp
b24gewogICAgbXkoJHNlbGYsICR0Z3QpID0gQF87CiAgICBteSgkZW52KSA9ICRzZWxmLT57
ZW52fTsKCiAgICBpZiAoJHBhcmFtOjpidWlsZCkgewoJZnV0aWw6Om1rZGlyKCR0Z3QtPntk
aXJ9KTsKCXVubGluaygkdGd0LT5wYXRoKSBpZiAhICR0Z3QtPnByZWNpb3VzOwogICAgfQoK
ICAgICMgU2V0IGVudmlyb25tZW50LgogICAgbWFwKGRlbGV0ZSAkRU5WeyRffSwga2V5cyAl
RU5WKTsKICAgICVFTlYgPSAleyRlbnYtPntFTlZ9fTsKCiAgICAjIEhhbmRsZSBtdWx0aS1s
aW5lIGNvbW1hbmRzLgogICAgbXkgJGNvbTsKICAgIGZvciAkY29tICgkc2VsZi0+Z2V0Y29t
cygkdGd0KSkgewoJaWYgKCRjb20gIX4gcy9eXEBccyovLykgewoJICAgIG1haW46OnNob3dj
b20oJGNvbSk7Cgl9CglpZiAoJHBhcmFtOjpidWlsZCkgewoKCSAgaWYgKCRjb20gPX4gL15c
W3BlcmxcXVxzKi8pIHsKCSAgICBteSAkcGVybGNtZCA9ICQnOwoJICAgIG15ICRzdGF0dXM7
CgkgICAgewoJICAgICAgIyBSZXN0b3JlIHRoZSBzY3JpcHQgcGFja2FnZSB2YXJpYWJsZXMg
dGhhdCB3ZXJlIGRlZmluZWQKCSAgICAgICMgaW4gdGhlIENvbnNjcmlwdCBmaWxlIHRoYXQg
ZGVmaW5lZCB0aGlzIFtwZXJsXSBidWlsZCwKCSAgICAgICMgc28gdGhlIGNvZGUgZXhlY3V0
ZXMgd2l0aCB0aGUgZXhwZWN0ZWQgdmFyaWFibGVzLgoJICAgICAgbXkoJHBhY2thZ2UpID0g
JHNlbGYtPnsncGFja2FnZSd9OwoJICAgICAgbXkoJHBrZ3ZhcnMpID0gJHRndC0+e2NvbnNj
cmlwdH0tPntwa2d2YXJzfTsKCSAgICAgIE5hbWVTcGFjZTo6cmVzdG9yZSgkcGFja2FnZSwg
JHBrZ3ZhcnMpIGlmICRwa2d2YXJzOwoJICAgICAgIyBBY3R1YWxseSBleGVjdXRlIHRoZSBb
cGVybF0gY29tbWFuZCB0byBidWlsZCB0aGUgdGFyZ2V0LgoJICAgICAgJHN0YXR1cyA9IGV2
YWwgInBhY2thZ2UgJHBhY2thZ2U7ICRwZXJsY21kIjsKCSAgICAgICMgQ2xlYW4gdXAgdGhl
IG5hbWVzcGFjZSBieSBkZWxldGluZyB0aGUgcGFja2FnZSB2YXJpYWJsZXMKCSAgICAgICMg
d2UganVzdCByZXN0b3JlZC4KCSAgICAgIE5hbWVTcGFjZTo6cmVtb3ZlKCRwYWNrYWdlLCBr
ZXlzICUkcGtndmFycykgaWYgJHBrZ3ZhcnM7CgkgICAgfQoJICAgIGlmICghZGVmaW5lZCgk
c3RhdHVzKSkgewoJCXdhcm4gIiQwOiAqKiogRXJyb3IgZHVyaW5nIHBlcmwgY29tbWFuZCBl
dmFsOiAkQC5cbiI7CgkJcmV0dXJuIHVuZGVmOwoJICAgIH0gZWxzaWYgKCRzdGF0dXMgPT0g
MCkgewoJCXdhcm4gIiQwOiAqKiogUGVybCBjb21tYW5kIHJldHVybmVkICRzdGF0dXMgKHRo
aXMgaW5kaWNhdGVzIGFuIGVycm9yKS5cbiI7CgkJcmV0dXJuIHVuZGVmOwoJICAgIH0KCSAg
ICBuZXh0OwoJICB9CgkgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KCSAgIyBDYW4ndCBmb3Jr
IG9uIFdpbjMyCgkgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KCSAgaWYgKCRtYWluOjpfV0lO
MzIpIHsKCSAgICBzeXN0ZW0oJGNvbSk7CgkgICAgaWYgKCQ/KSB7CgkgICAgICBteSAoJGIw
LCAkYjEpID0gKCQ/ICYgMHhGRiwgJD8gPj4gOCk7CgkgICAgICBteSAkZXJyID0gJGIxIHx8
ICQ/OwoJICAgICAgbXkgJHBhdGggPSAkdGd0LT5wYXRoOwoJICAgICAgbXkgJHdhcm4gPSBx
cSgkMDogKioqIFskcGF0aF0gRXJyb3IgJGVycik7CgkgICAgICAkd2FybiAuPSAiIChleGVj
dXRhYmxlIG5vdCBmb3VuZCBpbiBwYXRoPykiIGlmICRiMSA9PSAweEZGOwoJICAgICAgd2Fy
biAiJHdhcm5cbiI7CgkgICAgICByZXR1cm4gdW5kZWY7CgkgICAgfQoJICB9IGVsc2UgewoJ
ICAgICZmaWxlOjp3YWl0X29uX21heF9qb2JzKCk7CgkgICAgbXkoJHBpZCkgPSBmb3JrKCk7
CgkgICAgZGllKCIkMDogdW5hYmxlIHRvIGZvcmsgY2hpbGQgcHJvY2VzcyAoJCEpXG4iKSBp
ZiAhZGVmaW5lZCAkcGlkOwoJICAgIGlmICghJHBpZCkgewoJICAgICAgIyBUaGlzIGlzIHRo
ZSBjaGlsZC4gIFdlIGV2YWwgdGhlIGNvbW1hbmQgdG8gc3VwcHJlc3MgLXcKCSAgICAgICMg
d2FybmluZ3MgYWJvdXQgbm90IHJlYWNoaW5nIHRoZSBzdGF0ZW1lbnRzIGFmdGVyd2FyZHMu
CgkgICAgICBldmFsICdleGVjKCRjb20pJzsKCSAgICAgICRjb20gPX4gcy9ccy4qLy87Cgkg
ICAgICBkaWUgcXEoJDA6IGZhaWxlZCB0byBleGVjdXRlICIkY29tIiAoJCEpLiApCgkJLiBx
cShJcyB0aGlzIGFuIGV4ZWN1dGFibGUgb24gcGF0aCAiJEVOVntQQVRIfSI/XG4pOwoJICAg
IH0KCSAgICAkZmlsZTo6Y2hpbGRfcXVldWUtPnskcGlkfS0+e2NvbX0gPSAkY29tOwoJICAg
ICRmaWxlOjpjaGlsZF9xdWV1ZS0+eyRwaWR9LT57dGd0fSA9ICR0Z3Q7CgkgIH0KCX0KICAg
IH0KCiAgICAjIHN1Y2Nlc3MuCiAgICByZXR1cm4gMTsKfQoKIyBSZXR1cm4gc2NyaXB0IHNp
Z25hdHVyZS4Kc3ViIHNjcmlwdCB7CiAgICAkX1swXS0+e2NvbXNpZ30KfQoKDAojIENyZWF0
ZSBhIGxpbmtlZCBtb2R1bGUuCnBhY2thZ2UgYnVpbGQ6OmNvbW1hbmQ6Omxpbms7Cgp1c2Ug
dmFycyBxdyggQElTQSApOwoKQkVHSU4geyBASVNBID0gcXcoYnVpbGQ6OmNvbW1hbmQpIH0K
CiMgRmluZCBhbiBhcHByb3ByaWF0ZSBsaW5rZXIuCnN1YiBmaW5kIHsKICAgIG15KCRjbGFz
cywgJGVudiwgJGNvbW1hbmQpID0gQF87CiAgICBpZiAoIWV4aXN0cyAkZW52LT57X0xESVJT
fSkgewoJbXkoJGxkaXJzKSA9ICcnOwoJbXkoJHdkKSA9ICRlbnYtPntfY3dkfTsKCW15KCRw
ZGlycykgPSAkZW52LT57TElCUEFUSH07CglpZiAoISBkZWZpbmVkICRwZGlycykgewoJICAg
ICRwZGlycyA9IFsgXTsKCX0gZWxzaWYgKHJlZigkcGRpcnMpIG5lICdBUlJBWScpIHsKCSAg
ICAkcGRpcnMgPSBbIHNwbGl0KC8kbWFpbjo6UEFUSF9TRVBBUkFUT1IvbywgJHBkaXJzKSBd
OwoJfQoJbXkgJGRpcjsKCWZvciAkZGlyIChtYXAoJHdkLT5sb29rdXBkaXIoJGVudi0+X3N1
YnN0KCRfKSksIEAkcGRpcnMpKSB7CgkgICAgbXkoJGRwYXRoKSA9ICRkaXItPnBhdGg7Cgkg
ICAgJGxkaXJzIC49ICIgIi4kZW52LT57TElCRElSUFJFRklYfS4kZHBhdGg7CgkgICAgbmV4
dCBpZiBGaWxlOjpTcGVjLT5maWxlX25hbWVfaXNfYWJzb2x1dGUoJGRwYXRoKTsKCSAgICBp
ZiAoQHBhcmFtOjpycGF0aCkgewoJCW15ICRkOwoJCWlmICgkZHBhdGggZXEgJGRpcjo6Q1VS
RElSKSB7CgkJICAgIGZvcmVhY2ggJGQgKG1hcCgkXy0+cGF0aCwgQHBhcmFtOjpycGF0aCkp
IHsKCQkJJGxkaXJzIC49ICIgIi4kZW52LT57TElCRElSUFJFRklYfS4kZDsKCQkgICAgfQoJ
CX0gZWxzZSB7CgkJICAgIGZvcmVhY2ggJGQgKG1hcCgkXy0+cGF0aCwgQHBhcmFtOjpycGF0
aCkpIHsKCQkJJGxkaXJzIC49ICIgIi4kZW52LT57TElCRElSUFJFRklYfS5GaWxlOjpTcGVj
LT5jYXRmaWxlKCRkLCAkZHBhdGgpOwoJCSAgICB9CgkJfQoJICAgIH0KCX0KCSRlbnYtPntf
TERJUlN9ID0gIiUoJGxkaXJzJSkiOwogICAgfQoKICAgICMgSW50cm9kdWNlIGEgbmV3IG1h
Z2ljIF9MSUJTIHN5bWJvbCB3aGljaCBhbGxvd3MgdG8gdXNlIHRoZQogICAgIyBVbml4LXN0
eWxlIC1sTkFNRSBzeW50YXggZm9yIFdpbjMyIG9ubHkuIC1sTkFNRSB3aWxsIGJlIHJlcGxh
Y2VkCiAgICAjIHdpdGggJXtQUkVGTElCfU5BTUUle1NVRkxJQn0uIDxzY2h3YXJ6ZUBpc2Eu
ZGU+IDE5OTgtMDYtMTgKCiAgICBpZiAoJG1haW46Ol9XSU4zMiAmJiAhZXhpc3RzICRlbnYt
PntfTElCU30pIHsKCW15ICRsaWJzOwoJbXkgJG5hbWU7Cglmb3IgJG5hbWUgKHNwbGl0KCcg
JywgJGVudi0+X3N1YnN0KCRlbnYtPntMSUJTfSB8fCAnJykpKSB7CgkgICAgaWYgKCRuYW1l
ID1+IC9eLWwoLiopLykgewoJCSRuYW1lID0gIiRlbnYtPntQUkVGTElCfSQxJGVudi0+e1NV
RkxJQn0iOwoJICAgIH0KCSAgICAkbGlicyAuPSAnICcgLiAkbmFtZTsKCX0KCSRlbnYtPntf
TElCU30gPSAkbGlicyA/ICIlKCRsaWJzJSkiIDogJyc7CiAgICB9CiAgICBibGVzcyBmaW5k
IGJ1aWxkOjpjb21tYW5kKCRlbnYsICRjb21tYW5kKTsKfQoKIyBDYWxsZWQgZnJvbSBmaWxl
OjpidWlsZC4gTWFrZSBzdXJlIGFueSBsaWJyYXJpZXMgbmVlZGVkIGJ5IHRoZQojIGVudmly
b25tZW50IGFyZSBidWlsdCwgYW5kIHJldHVybiB0aGUgY29sbGVjdGVkIHNpZ25hdHVyZXMK
IyBvZiB0aGUgbGlicmFyaWVzIGluIHRoZSBwYXRoLgpzdWIgaW5jbHVkZXMgewogICAgcmV0
dXJuICRfWzBdLT57c2lnfSBpZiBleGlzdHMgJF9bMF0tPntzaWd9OwogICAgbXkoJHNlbGYs
ICR0Z3QpID0gQF87CiAgICBteSgkZW52KSA9ICRzZWxmLT57ZW52fTsKICAgIG15KCRld2Qp
ID0gJGVudi0+e19jd2R9OwogICAgbXkgJGxkaXJzID0gJGVudi0+e0xJQlBBVEh9OwogICAg
aWYgKCEgZGVmaW5lZCAkbGRpcnMpIHsKCSRsZGlycyA9IFsgXTsKICAgIH0gZWxzaWYgKHJl
ZigkbGRpcnMpIG5lICdBUlJBWScpIHsKCSRsZGlycyA9IFsgc3BsaXQoLyRtYWluOjpQQVRI
X1NFUEFSQVRPUi9vLCAkbGRpcnMpIF07CiAgICB9CiAgICBteSBAbHBhdGggPSBtYXAoJGV3
ZC0+bG9va3VwZGlyKCRfKSwgQCRsZGlycyk7CiAgICBteShAc2lncyk7CiAgICBteShAbmFt
ZXMpOwoKICAgIGlmICgkbWFpbjo6X1dJTjMyKSB7CgkjIFBhc3MgJUxJQlMgc3ltYm9sIHRo
cm91Z2ggJS1zdWJzdGl0dWl0aW9uCgkjIDxzY2h3YXJ6ZUBpc2EuZGU+IDE5OTgtMDYtMTgK
CUBuYW1lcyA9IHNwbGl0KCcgJywgJGVudi0+X3N1YnN0KCRlbnYtPntMSUJTfSB8fCAnJykp
OwogICAgfSBlbHNlIHsKCUBuYW1lcyA9IHNwbGl0KCcgJywgJGVudi0+e0xJQlN9IHx8ICcn
KTsKICAgIH0KICAgIG15ICRuYW1lOwogICAgZm9yICRuYW1lIChAbmFtZXMpIHsKCW15ICgk
bHBhdGgsIEBhbGxuYW1lcyk7CglpZiAoJG5hbWUgPX4gL14tbCguKikvKSB7CgkgICAgIyAt
bCBzdHlsZSBuYW1lcyBhcmUgbG9va2VkIHVwIG9uIExJQlBBVEgsIHVzaW5nIGFsbAoJICAg
ICMgcG9zc2libGUgbGliIHN1ZmZpeGVzIGluIHRoZSBzYW1lIHNlYXJjaCBvcmRlciB0aGUK
CSAgICAjIGxpbmtlciB1c2VzIChhY2NvcmRpbmcgdG8gU1VGTElCUykuCgkgICAgIyBSZWNv
Z25pemUgbmV3IFBSRUZMSUIgc3ltYm9sLCB3aGljaCBzaG91bGQgYmUgJ2xpYicgb24KCSAg
ICAjIFVuaXgsIGFuZCBlbXB0eSBvbiBXaW4zMi4gVE9ETzogV2hhdCBhYm91dCBzaGFyZWQK
CSAgICAjIGxpYnJhcnkgc3VmZml4ZXM/ICA8c2Nod2FyemVAaXNhLmRlPiAxOTk4LTA1LTEz
CgkgICBAYWxsbmFtZXMgPSBtYXAoIiRlbnYtPntQUkVGTElCfSQxJF8iLAoJCQkgICBzcGxp
dCgvOi8sICRlbnYtPntTVUZMSUJTfSkpOwoJICAgICRscGF0aCA9IFxAbHBhdGg7Cgl9IGVs
c2UgewoJICAgIEBhbGxuYW1lcyA9ICgkbmFtZSk7CgkgICAgIyBPbiBXaW4zMiwgYWxsIGxp
YnJhcnkgbmFtZXMgYXJlIGxvb2tlZCB1cCBpbiBMSUJQQVRICgkgICAgIyA8c2Nod2FyemVA
aXNhLmRlPiAxOTk4LTA1LTEzCgkgICAgaWYgKCRtYWluOjpfV0lOMzIpIHsKCQkkbHBhdGgg
PSBbJGRpcjo6dG9wLCBAbHBhdGhdOwoJICAgIH0KCSAgICBlbHNlIHsKCQkkbHBhdGggPSBb
JGRpcjo6dG9wXTsKCSAgICB9Cgl9CglteSAkZGlyOwoJRElSOiBmb3IgJGRpciAoQCRscGF0
aCkgewoJICAgIG15ICRuOwoJICAgIGZvciAkbiAoQGFsbG5hbWVzKSB7CgkJbXkoJGxpYikg
PSAkZGlyLT5sb29rdXBfYWNjZXNzaWJsZSgkbik7CgkJaWYgKCRsaWIpIHsKCQkgICAgbGFz
dCBESVIgaWYgJGxpYi0+aWdub3JlOwoJCSAgICBpZiAoKGJ1aWxkICRsaWIpIGVxICdlcnJv
cnMnKSB7CgkJCSR0Z3QtPntzdGF0dXN9ID0gJ2Vycm9ycyc7CgkJCXJldHVybiB1bmRlZjsK
CQkgICAgfQoJCSAgICBwdXNoKEBzaWdzLCAnc2lnJy0+c2lnbmF0dXJlKCRsaWIpKTsKCQkg
ICAgbGFzdCBESVI7CgkJfQoJICAgIH0KCX0KICAgIH0KICAgICRzZWxmLT57c2lnfSA9ICdz
aWcnLT5jb2xsZWN0KEBzaWdzKTsKfQoKIyBBbHdheXMgY29tcGF0aWJsZSB3aXRoIG90aGVy
IHN1Y2ggYnVpbGRlcnMsIHNvIHRoZSB1c2VyCiMgY2FuIGRlZmluZSBhIHNpbmdsZSBwcm9n
cmFtIG9yIG1vZHVsZSBmcm9tIG11bHRpcGxlIHBsYWNlcy4Kc3ViIGNvbXBhdGlibGUgewog
ICAgbXkoJHNlbGYsICRvdGhlcikgPSBAXzsKICAgIHJlZigkb3RoZXIpIGVxICJidWlsZDo6
Y29tbWFuZDo6bGluayI7Cn0KCiMgTGluayBhIHByb2dyYW0uCnBhY2thZ2UgYnVpbGQ6OmNv
bW1hbmQ6OmxpbmtlZG1vZHVsZTsKCnVzZSB2YXJzIHF3KCBASVNBICk7CgpCRUdJTiB7IEBJ
U0EgPSBxdyhidWlsZDo6Y29tbWFuZCkgfQoKIyBBbHdheXMgY29tcGF0aWJsZSB3aXRoIG90
aGVyIHN1Y2ggYnVpbGRlcnMsIHNvIHRoZSB1c2VyCiMgY2FuIGRlZmluZSBhIHNpbmdsZSBs
aW5rZWQgbW9kdWxlIGZyb20gbXVsdGlwbGUgcGxhY2VzLgpzdWIgY29tcGF0aWJsZSB7CiAg
ICBteSgkc2VsZiwgJG90aGVyKSA9IEBfOwogICAgcmVmKCRvdGhlcikgZXEgImJ1aWxkOjpj
b21tYW5kOjpsaW5rZWRtb2R1bGUiOwp9CgwKIyBCdWlsZGVyIGZvciBhIEMgbW9kdWxlCnBh
Y2thZ2UgYnVpbGQ6OmNvbW1hbmQ6OmNjOwoKdXNlIHZhcnMgcXcoIEBJU0EgKTsKCkJFR0lO
IHsgQElTQSA9IHF3KGJ1aWxkOjpjb21tYW5kKSB9CgpzdWIgZmluZCB7CiAgICAkX1sxXS0+
e19jY30gfHwgZG8gewoJbXkoJGNsYXNzLCAkZW52KSA9IEBfOwoJbXkoJGNwcHBhdGgpID0g
JGVudi0+X3N1YnN0KCRlbnYtPntDUFBQQVRIfSk7CglteSgkY3NjYW5uZXIpID0gZmluZCBz
Y2FuOjpjcHAoJGVudi0+e19jd2R9LCAkY3BwcGF0aCk7CgkkZW52LT57X0lGTEFHU30gPSAi
JSgiIC4gJGNzY2FubmVyLT5pZmxhZ3MoJGVudikgLiAiJSkiOwoJbXkoJHNlbGYpID0gZmlu
ZCBidWlsZDo6Y29tbWFuZCgkZW52LCAkZW52LT57Q0NDT019KTsKCSRzZWxmLT57c2Nhbm5l
cn0gPSAkY3NjYW5uZXI7CglibGVzcyAkZW52LT57X2NjfSA9ICRzZWxmOwogICAgfQp9Cgoj
IEludm9rZSB0aGUgYXNzb2NpYXRlZAkgQyBzY2FubmVyIHRvIGdldCBzaWduYXR1cmUgb2Yg
aW5jbHVkZWQgZmlsZXMuCnN1YiBpbmNsdWRlcyB7CiAgICBteSgkc2VsZiwgJHRndCkgPSBA
XzsKICAgICRzZWxmLT57c2Nhbm5lcn0tPmluY2x1ZGVzKCR0Z3QsICR0Z3QtPntzb3VyY2Vz
fVswXSk7Cn0KDAojIEJ1aWxkZXIgZm9yIGEgQysrIG1vZHVsZQpwYWNrYWdlIGJ1aWxkOjpj
b21tYW5kOjpjeHg7Cgp1c2UgdmFycyBxdyggQElTQSApOwoKQkVHSU4geyBASVNBID0gcXco
YnVpbGQ6OmNvbW1hbmQpIH0KCnN1YiBmaW5kIHsKICAgICRfWzFdLT57X2N4eH0gfHwgZG8g
ewoJbXkoJGNsYXNzLCAkZW52KSA9IEBfOwoJbXkoJGNwcHBhdGgpID0gJGVudi0+X3N1YnN0
KCRlbnYtPntDUFBQQVRIfSk7CglteSgkY3NjYW5uZXIpID0gZmluZCBzY2FuOjpjcHAoJGVu
di0+e19jd2R9LCAkY3BwcGF0aCk7CgkkZW52LT57X0lGTEFHU30gPSAiJSgiIC4gJGNzY2Fu
bmVyLT5pZmxhZ3MoJGVudikgLiAiJSkiOwoJbXkoJHNlbGYpID0gZmluZCBidWlsZDo6Y29t
bWFuZCgkZW52LCAkZW52LT57Q1hYQ09NfSk7Cgkkc2VsZi0+e3NjYW5uZXJ9ID0gJGNzY2Fu
bmVyOwoJYmxlc3MgJGVudi0+e19jeHh9ID0gJHNlbGY7CiAgICB9Cn0KCiMgSW52b2tlIHRo
ZSBhc3NvY2lhdGVkCSBDIHNjYW5uZXIgdG8gZ2V0IHNpZ25hdHVyZSBvZiBpbmNsdWRlZCBm
aWxlcy4Kc3ViIGluY2x1ZGVzIHsKICAgIG15KCRzZWxmLCAkdGd0KSA9IEBfOwogICAgJHNl
bGYtPntzY2FubmVyfS0+aW5jbHVkZXMoJHRndCwgJHRndC0+e3NvdXJjZXN9WzBdKTsKfQoM
CiMgQnVpbGRlciBmb3IgYSB1c2VyIGNvbW1hbmQgKGNvbnM6OkNvbW1hbmQpLiAgV2UgYXNz
dW1lIHRoYXQgYSB1c2VyCiMgY29tbWFuZCBtaWdodCBiZSBidWlsdCBhbmQgaW1wbGVtZW50
IHRoZSBhcHByb3ByaWF0ZSBkZXBlbmRlbmNpZXMgb24KIyB0aGUgY29tbWFuZCBpdHNlbGYg
KGFjdHVhbGx5LCBqdXN0IG9uIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBjb21tYW5kCiMgbGlu
ZSkuCnBhY2thZ2UgYnVpbGQ6OmNvbW1hbmQ6OnVzZXI7Cgp1c2UgdmFycyBxdyggQElTQSAp
OwoKQkVHSU4geyBASVNBID0gcXcoYnVpbGQ6OmNvbW1hbmQpIH0KCiMgWFhYIE9wdGltaXpl
IHRoaXMgdG8gbm90IHVzZSBpZ25vcmVkIHBhdGhzLgpzdWIgY29tc2lnIHsKICAgIHJldHVy
biAkX1swXS0+e19jb21zaWd9IGlmIGV4aXN0cyAkX1swXS0+e19jb21zaWd9OwogICAgbXko
JHNlbGYsICR0Z3QpID0gQF87CiAgICBteSgkZW52KSA9ICRzZWxmLT57ZW52fTsKICAgICRz
ZWxmLT57X2NvbXNpZ30gPSAnJzsKICAgIG15ICRjb207CiAgY29tOgogICAgZm9yICRjb20g
KHNwbGl0KC9bXG47XS8sICRzZWxmLT5zY3JpcHQpKSB7CgkjIElzb2xhdGUgY29tbWFuZCB3
b3JkLgoJJGNvbSA9fiBzL15ccyovLzsKCSRjb20gPX4gcy9ccy4qLy87CgluZXh0IGlmICEk
Y29tOyAjIGJsYW5rIGxpbmUKCW15KCRwZGlycykgPSAkZW52LT57RU5WfS0+e1BBVEh9OwoJ
aWYgKCEgZGVmaW5lZCAkcGRpcnMpIHsKCSAgICAkcGRpcnMgPSBbIF07Cgl9IGVsc2lmIChy
ZWYoJHBkaXJzKSBuZSAnQVJSQVknKSB7CgkgICAgJHBkaXJzID0gWyBzcGxpdCgvJG1haW46
OlBBVEhfU0VQQVJBVE9SL28sICRwZGlycykgXTsKCX0KCW15ICRkaXI7Cglmb3IgJGRpciAo
bWFwKCRkaXI6OnRvcC0+bG9va3VwZGlyKCRfKSwgQCRwZGlycykpIHsKCSAgICBteSgkcHJv
ZykgPSAkZGlyLT5sb29rdXBfYWNjZXNzaWJsZSgkY29tKTsKCSAgICBpZiAoJHByb2cpIHsg
IyBYWFggTm90IGNoZWNraW5nIGV4ZWN1dGUgcGVybWlzc2lvbi4KCQlpZiAoKGJ1aWxkICRw
cm9nKSBlcSAnZXJyb3JzJykgewoJCSAgICAkdGd0LT57c3RhdHVzfSA9ICdlcnJvcnMnOwoJ
CSAgICByZXR1cm4gdW5kZWY7CgkJfQoJCW5leHQgY29tIGlmICRwcm9nLT5pZ25vcmU7CgkJ
JHNlbGYtPntfY29tc2lnfSAuPSAnc2lnJy0+c2lnbmF0dXJlKCRwcm9nKTsKCQluZXh0IGNv
bTsKCSAgICB9Cgl9CgkjIE5vdCBmb3VuZDogbGV0IHNoZWxsIGdpdmUgYW4gZXJyb3IuCiAg
ICB9CiAgICAkc2VsZi0+e19jb21zaWd9Cn0KCnN1YiBpbmNsdWRlcyB7CiAgICBteSgkc2Vs
ZiwgJHRndCkgPSBAXzsKICAgIG15KCRzaWcpID0gJyc7CgogICAgIyBDaGVjayBmb3IgYW55
IHF1aWNrIHNjYW5uZXJzIGF0dGFjaGVkIHRvIHNvdXJjZSBmaWxlcy4KICAgIG15ICRkZXA7
CiAgICBmb3IgJGRlcCAoQHskdGd0LT57ZGVwfX0sIEB7JHRndC0+e3NvdXJjZXN9fSkgewoJ
bXkoJHNjYW5uZXIpID0gJGRlcC0+eydzcmNzY2FuJywkc2VsZi0+e2Vudn19OwoJaWYgKCRz
Y2FubmVyKSB7CgkgICAgJHNpZyAuPSAkc2Nhbm5lci0+aW5jbHVkZXMoJHRndCwgJGRlcCk7
Cgl9CiAgICB9CgogICAgIyBBZGQgdGhlIGNvbW1hbmQgc2lnbmF0dXJlLgogICAgcmV0dXJu
ICZjb21zaWcgLiAkc2lnOwp9CgoMCiMgQnVpbGRlciBmb3IgYSBsaWJyYXJ5IG1vZHVsZSAo
YXJjaGl2ZSkuCiMgV2UgYXNzdW1lIHRoYXQgYSB1c2VyIGNvbW1hbmQgbWlnaHQgYmUgYnVp
bHQgYW5kIGltcGxlbWVudCB0aGUKIyBhcHByb3ByaWF0ZSBkZXBlbmRlbmNpZXMgb24gdGhl
IGNvbW1hbmQgaXRzZWxmLgpwYWNrYWdlIGJ1aWxkOjpjb21tYW5kOjpsaWJyYXJ5OwoKdXNl
IHZhcnMgcXcoIEBJU0EgKTsKCkJFR0lOIHsgQElTQSA9IHF3KGJ1aWxkOjpjb21tYW5kKSB9
CgpzdWIgZmluZCB7CiAgICBteSgkY2xhc3MsICRlbnYpID0gQF87CiAgICBibGVzcyBmaW5k
IGJ1aWxkOjpjb21tYW5kKCRlbnYsICRlbnYtPntBUkNPTX0pCn0KCiMgQWx3YXlzIGNvbXBh
dGlibGUgd2l0aCBvdGhlciBsaWJyYXJ5IGJ1aWxkZXJzLCBzbyB0aGUgdXNlcgojIGNhbiBk
ZWZpbmUgYSBzaW5nbGUgbGlicmFyeSBmcm9tIG11bHRpcGxlIHBsYWNlcy4Kc3ViIGNvbXBh
dGlibGUgewogICAgbXkoJHNlbGYsICRvdGhlcikgPSBAXzsKICAgIHJlZigkb3RoZXIpIGVx
ICJidWlsZDo6Y29tbWFuZDo6bGlicmFyeSI7Cn0KDAojIEEgbXVsdGktdGFyZ2V0IGJ1aWxk
ZXIuCiMgVGhpcyBhbGxvd3MgbXVsdGlwbGUgdGFyZ2V0cyB0byBiZSBhc3NvY2lhdGVkIHdp
dGggYSBzaW5nbGUgYnVpbGQKIyBzY3JpcHQsIHdpdGhvdXQgZm9yY2luZyBhbGwgdGhlIGNv
ZGUgdG8gYmUgYXdhcmUgb2YgbXVsdGlwbGUgdGFyZ2V0cy4KcGFja2FnZSBidWlsZDo6bXVs
dGlwbGU7CgpzdWIgbmV3IHsKICAgIG15KCRjbGFzcywgJGJ1aWxkZXIsICR0Z3RzKSA9IEBf
OwogICAgYmxlc3MgeyAnYnVpbGRlcicgPT4gJGJ1aWxkZXIsICd0Z3RzJyA9PiAkdGd0cyB9
Owp9CgpzdWIgc2NyaXB0IHsKICAgIG15KCRzZWxmLCAkdGd0KSA9IEBfOwogICAgJHNlbGYt
PntidWlsZGVyfS0+c2NyaXB0KCR0Z3QpOwp9CgpzdWIgaW5jbHVkZXMgewogICAgbXkoJHNl
bGYsICR0Z3QpID0gQF87CiAgICAkc2VsZi0+e2J1aWxkZXJ9LT5pbmNsdWRlcygkdGd0KTsK
fQoKc3ViIGNvbXBhdGlibGUgewogICAgbXkoJHNlbGYsICR0Z3QpID0gQF87CiAgICAkc2Vs
Zi0+e2J1aWxkZXJ9LT5jb21wYXRpYmxlKCR0Z3QpOwp9CgpzdWIgY2FjaGluIHsKICAgIG15
KCRzZWxmLCAkdGd0LCAkc2lnKSA9IEBfOwogICAgJHNlbGYtPntidWlsZGVyfS0+Y2FjaGlu
KCR0Z3QsICRzaWcpOwp9CgpzdWIgY2FjaG91dCB7CiAgICBteSgkc2VsZiwgJHRndCwgJHNp
ZykgPSBAXzsKICAgICRzZWxmLT57YnVpbGRlcn0tPmNhY2hvdXQoJHRndCwgJHNpZyk7Cn0K
CnN1YiBhY3Rpb24gewogICAgbXkoJHNlbGYsICRpbnZva2VkX3RndCkgPSBAXzsKICAgIHJl
dHVybiAkc2VsZi0+e2J1aWx0fSBpZiBleGlzdHMgJHNlbGYtPntidWlsdH07CgogICAgIyBN
YWtlIHN1cmUgYWxsIHRhcmdldHMgaW4gdGhlIGdyb3VwIGFyZSB1bmxpbmtlZCBiZWZvcmUg
YnVpbGRpbmcgYW55LgogICAgbXkoJHRndHMpID0gJHNlbGYtPnt0Z3RzfTsKICAgIG15ICR0
Z3Q7CiAgICBmb3IgJHRndCAoQCR0Z3RzKSB7CglmdXRpbDo6bWtkaXIoJHRndC0+e2Rpcn0p
OwoJdW5saW5rKCR0Z3QtPnBhdGgpIGlmICEgJHRndC0+cHJlY2lvdXM7CiAgICB9CgogICAg
IyBOb3cgZG8gdGhlIGFjdGlvbiB0byBidWlsZCBhbGwgdGhlIHRhcmdldHMuIEZvciBjb25z
aXN0ZW5jeQogICAgIyB3ZSBhbHdheXMgY2FsbCB0aGUgYWN0aW9uIG9uIHRoZSBmaXJzdCB0
YXJnZXQsIGp1c3Qgc28gdGhhdAogICAgIyAkPiBpcyBkZXRlcm1pbmlzdGljLgogICAgewoJ
IyBhY3Rpb24gbm93IGlzIG5vbi1ibG9ja2luZywgc28gd2UgbXVzdCBrbHVkZ2UgYmxvY2tp
bmcgZm9yIHRoaXMKCSMgZXhwbGljaXQgY2FsbAoJbG9jYWwoICRmaWxlOjpjaGlsZF9xdWV1
ZSApID0geyBwYXJlbnQgPT4gJHRndHMtPlswXSB9OwoJJHNlbGYtPntidWlsdH0gPSAkc2Vs
Zi0+e2J1aWxkZXJ9LT5hY3Rpb24oJHRndHMtPlswXSk7CgkmZmlsZTo6d2FpdF9vbl9hbGxf
Y2hpbGRyZW4oKTsKICAgIH0KCiAgICAjIE5vdyAiYnVpbGQiIGFsbCB0aGUgb3RoZXIgdGFy
Z2V0cyAoZXhjZXB0IGZvciB0aGUgb25lCiAgICAjIHdlIHdlcmUgY2FsbGVkIHdpdGgpLiBU
aGlzIGd1YXJhbnRlZXMgdGhhdCB0aGUgc2lnbmF0dXJlCiAgICAjIG9mIGVhY2ggdGFyZ2V0
IGlzIHVwZGF0ZWQgYXBwcm9wcmlhdGVseS4gV2UgZm9yY2UgdGhlCiAgICAjIHRhcmdldHMg
dG8gYmUgYnVpbHQgZXZlbiBpZiB0aGV5IGhhdmUgYmVlbiBwcmV2aW91c2x5CiAgICAjIGNv
bnNpZGVyZWQgYW5kIGZvdW5kIHRvIGJlIE9LOyB0aGUgb25seSBlZmZlY3QgdGhpcwogICAg
IyBoYXMgaXMgdG8gbWFrZSBzdXJlIHRoYXQgc2lnbmF0dXJlIGZpbGVzIGFyZSB1cGRhdGVk
CiAgICAjIGNvcnJlY3RseS4KICAgIGZvciAkdGd0IChAJHRndHMpIHsKCWlmICgkdGd0IG5l
ICRpbnZva2VkX3RndCkgewoJICAgIGRlbGV0ZSAkdGd0LT57c3RhdHVzfTsKCSAgICAnc2ln
Jy0+aW52YWxpZGF0ZSgkdGd0KTsKCSAgICBidWlsZCAkdGd0OwoJfQogICAgfQoKICAgICMg
U3RhdHVzIG9mIGFjdGlvbi4KICAgICRzZWxmLT57YnVpbHR9Owp9CgoMCiMgR2VuZXJpYyBz
Y2FubmluZyBtb2R1bGUuCnBhY2thZ2Ugc2NhbjsKCiMgUmV0dXJucyB0aGUgc2lnbmF0dXJl
IG9mIGZpbGVzIGluY2x1ZGVkIGJ5IHRoZSBzcGVjaWZpZWQgZmlsZXMgb24KIyBiZWhhbGYg
b2YgdGhlIGFzc29jaWF0ZWQgdGFyZ2V0LiBBbnkgZXJyb3JzIGluIGhhbmRsaW5nIHRoZSBp
bmNsdWRlZAojIGZpbGVzIGFyZSBwcm9wYWdhdGVkIHRvIHRoZSB0YXJnZXQgb24gd2hvc2Ug
YmVoYWxmIHRoaXMgcHJvY2Vzc2luZwojIGlzIGJlaW5nIGRvbmUuIFNpZ25hdHVyZXMgYXJl
IGNhY2hlZCBmb3IgZWFjaCB1bmlxdWUgZmlsZS9zY2FubmVyCiMgcGFpci4Kc3ViIGluY2x1
ZGVzIHsKICAgIG15KCRzZWxmLCAkdGd0LCBAZmlsZXMpID0gQF87CiAgICBteSglZmlsZXMs
ICRmaWxlKTsKICAgIG15KCRpbmMpID0gJHNlbGYtPntpbmNsdWRlc30gfHwgKCRzZWxmLT57
aW5jbHVkZXN9ID0ge30pOwogICAgd2hpbGUgKCRmaWxlID0gcG9wIEBmaWxlcykgewoJbmV4
dCBpZiBleGlzdHMgJGZpbGVzeyRmaWxlfTsKCWlmICgkaW5jLT57JGZpbGV9KSB7CgkgICAg
cHVzaChAZmlsZXMsIEB7JGluYy0+eyRmaWxlfX0pOwoJICAgICRmaWxlc3skZmlsZX0gPSAn
c2lnJy0+c2lnbmF0dXJlKCRmaWxlLT5yZmlsZSk7Cgl9IGVsc2UgewoJICAgIGlmICgoYnVp
bGQgJGZpbGUpIGVxICdlcnJvcnMnKSB7CgkJJHRndC0+e3N0YXR1c30gPSAnZXJyb3JzJzsg
IyB0Z3QgaW5oZXJpdHMgYnVpbGQgc3RhdHVzCgkJcmV0dXJuICgpOwoJICAgIH0KCSAgICAk
ZmlsZXN7JGZpbGV9ID0gJ3NpZyctPnNpZ25hdHVyZSgkZmlsZS0+cmZpbGUpOwoJICAgIG15
KEBpbmNsdWRlcykgPSAkc2VsZi0+c2NhbigkZmlsZSk7CgkgICAgJGluYy0+eyRmaWxlfSA9
IFxAaW5jbHVkZXM7CgkgICAgcHVzaChAZmlsZXMsIEBpbmNsdWRlcyk7Cgl9CiAgICB9CiAg
ICAnc2lnJy0+Y29sbGVjdChzb3J0IHZhbHVlcyAlZmlsZXMpCn0KCgwKIyBBIHNpbXBsZSBz
Y2FubmVyLiBUaGlzIGlzIHVzZWQgYnkgdGhlIFF1aWNrU2NhbmZ1bmN0aW9uLCB0byBzZXR1
cAojIG9uZS10aW1lIHRhcmdldCBhbmQgZW52aXJvbm1lbnQtaW5kZXBlbmRlbnQgc2Nhbm5p
bmcgZm9yIGEgc291cmNlCiMgZmlsZS4gT25seSB1c2VkIGZvciBjb21tYW5kcyBydW4gYnkg
dGhlIENvbW1hbmQgbWV0aG9kLgpwYWNrYWdlIHNjYW46OnF1aWNrc2NhbjsKCnVzZSB2YXJz
IHF3KCBASVNBICVzY2FubmVyICk7CgpCRUdJTiB7IEBJU0EgPSBxdyhzY2FuKSB9CgpzdWIg
ZmluZCB7CiAgICBteSgkY2xhc3MsICRjb2RlLCAkZW52LCAkcGRpcnMpID0gQF87CiAgICBp
ZiAoISBkZWZpbmVkICRwZGlycykgewoJJHBkaXJzID0gWyBdIDsKICAgIH0gZWxzaWYgKHJl
ZigkcGRpcnMpIG5lICdBUlJBWScpIHsKCSRwZGlycyA9IFsgc3BsaXQoLyRtYWluOjpQQVRI
X1NFUEFSQVRPUi9vLCAkcGRpcnMpIF07CiAgICB9CiAgICBteShAcGF0aCkgPSBtYXAgeyAk
ZGlyOjpjd2QtPmxvb2t1cGRpcigkXykgfSBAJHBkaXJzOwogICAgbXkoJHNwYXRoKSA9ICJA
cGF0aCI7CiAgICAkc2Nhbm5lcnskY29kZSwkZW52LCRzcGF0aH0gfHwgZG8gewoJbXkoJHNl
bGYpID0geyBjb2RlID0+ICRjb2RlLCBlbnYgPT4gJGVudiwgcGF0aCA9PiBcQHBhdGggfTsK
CSRzY2FubmVyeyRjb2RlLCRlbnYsJHNwYXRofSA9IGJsZXNzICRzZWxmOwogICAgfQp9Cgoj
IFNjYW4gdGhlIHNwZWNpZmllZCBmaWxlIGZvciBpbmNsdWRlZCBmaWxlIG5hbWVzLgpzdWIg
c2NhbiB7CiAgICBteSgkc2VsZiwgJGZpbGUpID0gQF87CiAgICBteSgkY29kZSkgPSAkc2Vs
Zi0+e2NvZGV9OwogICAgbXkoQGluY2x1ZGVzKTsKICAgICMgRmlsZSBzaG91bGQgaGF2ZSBi
ZWVuIGJ1aWx0IGJ5IG5vdy4gSWYgbm90LCB3ZSdsbCBpZ25vcmUgaXQuCiAgICByZXR1cm4g
KCkgdW5sZXNzIG9wZW4oU0NBTiwgJGZpbGUtPnJwYXRoKTsKICAgIHdoaWxlKDxTQ0FOPikg
ewoJcHVzaChAaW5jbHVkZXMsIGdyZXAoJF8gbmUgJycsICYkY29kZSkpOwogICAgfQogICAg
Y2xvc2UoU0NBTik7CiAgICBteSgkd2QpID0gJGZpbGUtPntkaXJ9OwogICAgbXkoQGZpbGVz
KTsKICAgIG15ICRuYW1lOwogICAgZm9yICRuYW1lIChAaW5jbHVkZXMpIHsKCW15ICRkaXI7
Cglmb3IgJGRpciAoJGZpbGUtPntkaXJ9LCBAeyRzZWxmLT57cGF0aH19KSB7CgkgICAgbXko
JGluY2x1ZGUpID0gJGRpci0+bG9va3VwX2FjY2Vzc2libGUoJG5hbWUpOwoJICAgIGlmICgk
aW5jbHVkZSkgewoJCXB1c2goQGZpbGVzLCAkaW5jbHVkZSkgdW5sZXNzICRpbmNsdWRlLT5p
Z25vcmU7CgkJbGFzdDsKCSAgICB9Cgl9CiAgICB9CiAgICBAZmlsZXMKfQoKDAojIENQUCAo
QyBwcmVwcm9jZXNzb3IpIHNjYW5uaW5nIG1vZHVsZQpwYWNrYWdlIHNjYW46OmNwcDsKCnVz
ZSB2YXJzIHF3KCBASVNBICVzY2FubmVyICk7CgpCRUdJTiB7IEBJU0EgPSBxdyhzY2FuKSB9
CgojIEZvciB0aGlzIGNvbnN0cnVjdG9yLCBwcm92aWRlIHRoZSBpbmNsdWRlIHBhdGggYXJn
dW1lbnQgKGNvbG9uCiMgc2VwYXJhdGVkKS4gRWFjaCBwYXRoIGlzIHRha2VuIHJlbGF0aXZl
IHRvIHRoZSBwcm92aWRlZCBkaXJlY3RvcnkuCgojIE5vdGU6IGEgcGFydGljdWxhciBzY2Fu
bmluZyBvYmplY3QgaXMgYXNzdW1lZCB0byBhbHdheXMgcmV0dXJuIHRoZQojIHNhbWUgcmVz
dWx0IGZvciB0aGUgc2FtZSBpbnB1dC4gVGhpcyBpcyB3aHkgdGhlIHNlYXJjaCBwYXRoIGlz
IGEKIyBwYXJhbWV0ZXIgdG8gdGhlIGNvbnN0cnVjdG9yIGZvciBhIENQUCBzY2FubmluZyBv
YmplY3QuIFdlIGdvIHRvCiMgc29tZSBwYWlucyB0byBtYWtlIHN1cmUgdGhhdCB3ZSByZXR1
cm4gdGhlIHNhbWUgc2Nhbm5lciBvYmplY3QKIyBmb3IgdGhlIHNhbWUgcGF0aDogb3RoZXJ3
aXNlIHdlIHdpbGwgdW5lY2Vzc2FyaWx5IHNjYW4gZmlsZXMuCnN1YiBmaW5kIHsKICAgIG15
KCRjbGFzcywgJGRpciwgJHBkaXJzKSA9IEBfOwogICAgaWYgKCEgZGVmaW5lZCAkcGRpcnMp
IHsKCSRwZGlycyA9IFsgXTsKICAgIH0gZWxzaWYgKHJlZigkcGRpcnMpIG5lICdBUlJBWScp
IHsKCSRwZGlycyA9IFsgc3BsaXQoLyRtYWluOjpQQVRIX1NFUEFSQVRPUi9vLCAkcGRpcnMp
IF07CiAgICB9CiAgICBteSBAcGF0aCA9IG1hcCgkZGlyLT5sb29rdXBkaXIoJF8pLCBAJHBk
aXJzKTsKICAgIG15KCRzcGF0aCkgPSAiQHBhdGgiOwogICAgJHNjYW5uZXJ7JHNwYXRofSB8
fCBkbyB7CglteSgkc2VsZikgPSB7J3BhdGgnID0+IFxAcGF0aH07Cgkkc2Nhbm5lcnskc3Bh
dGh9ID0gYmxlc3MgJHNlbGY7CiAgICB9Cn0KCiMgU2NhbiB0aGUgc3BlY2lmaWVkIGZpbGUg
Zm9yIGluY2x1ZGUgbGluZXMuCnN1YiBzY2FuIHsKICAgIG15KCRzZWxmLCAkZmlsZSkgPSBA
XzsKICAgIG15KCRhbmdsZXMsICRxdW90ZXMpOwoKICAgIGlmIChleGlzdHMgJGZpbGUtPnth
bmdsZXN9KSB7CgkkYW5nbGVzID0gJGZpbGUtPnthbmdsZXN9OwoJJHF1b3RlcyA9ICRmaWxl
LT57cXVvdGVzfTsKICAgIH0gZWxzZSB7CglteShAYW5nbGVuYW1lcywgQHF1b3RlbmFtZXMp
OwoJcmV0dXJuICgpIHVubGVzcyBvcGVuKFNDQU4sICRmaWxlLT5ycGF0aCk7Cgl3aGlsZSAo
PFNDQU4+KSB7CgkgICAgbmV4dCB1bmxlc3MgL15ccyojLzsKCSAgICBpZiAoL15ccyojXHMq
aW5jbHVkZVxzKihbPCJdKSguKj8pWz4iXS8pIHsKCQlpZiAoJDEgZXEgIjwiKSB7CgkJICAg
IHB1c2goQGFuZ2xlbmFtZXMsICQyKTsKCQl9IGVsc2UgewoJCSAgICBwdXNoKEBxdW90ZW5h
bWVzLCAkMik7CgkJfQoJICAgIH0KCX0KCWNsb3NlKFNDQU4pOwoJJGFuZ2xlcyA9ICRmaWxl
LT57YW5nbGVzfSA9IFxAYW5nbGVuYW1lczsKCSRxdW90ZXMgPSAkZmlsZS0+e3F1b3Rlc30g
PSBcQHF1b3RlbmFtZXM7CiAgICB9CgoKICAgIG15KEBzaG9ydHBhdGgpID0gQHskc2VsZi0+
e3BhdGh9fTsJICAjIHBhdGggZm9yIDw+IHN0eWxlIGluY2x1ZGVzCiAgICBteShAbG9uZ3Bh
dGgpID0gKCRmaWxlLT57ZGlyfSwgQHNob3J0cGF0aCk7ICMgcGF0aCBmb3IgIiIgc3R5bGUg
aW5jbHVkZXMKCiAgICBteShAaW5jbHVkZXMpOwoKICAgIG15ICRuYW1lOwogICAgZm9yICRu
YW1lIChAJGFuZ2xlcykgewoJbXkgJGRpcjsKCWZvciAkZGlyIChAc2hvcnRwYXRoKSB7Cgkg
ICAgbXkoJGluY2x1ZGUpID0gJGRpci0+bG9va3VwX2FjY2Vzc2libGUoJG5hbWUpOwoJICAg
IGlmICgkaW5jbHVkZSkgewoJCXB1c2goQGluY2x1ZGVzLCAkaW5jbHVkZSkgdW5sZXNzICRp
bmNsdWRlLT5pZ25vcmU7CgkJbGFzdDsKCSAgICB9Cgl9CiAgICB9CgogICAgZm9yICRuYW1l
IChAJHF1b3RlcykgewoJbXkgJGRpcjsKCWZvciAkZGlyKEBsb25ncGF0aCkgewoJICAgIG15
KCRpbmNsdWRlKSA9ICRkaXItPmxvb2t1cF9hY2Nlc3NpYmxlKCRuYW1lKTsKCSAgICBpZiAo
JGluY2x1ZGUpIHsKCQlwdXNoKEBpbmNsdWRlcywgJGluY2x1ZGUpIHVubGVzcyAkaW5jbHVk
ZS0+aWdub3JlOwoJCWxhc3Q7CgkgICAgfQoJfQogICAgfQoKICAgIHJldHVybiBAaW5jbHVk
ZXMKfQoKIyBSZXR1cm4gdGhlIGluY2x1ZGUgZmxhZ3MgdGhhdCB3b3VsZCBiZSB1c2VkIGZv
ciBhIEMgQ29tcGlsZS4Kc3ViIGlmbGFncyB7CiAgICBteSgkc2VsZiwgJGVudikgPSBAXzsK
ICAgIG15KCRpZmxhZ3MpID0gJyc7CiAgICBteSgkZHBhdGgpOwogICAgZm9yICRkcGF0aCAo
bWFwKCRfLT5wYXRoLCBAeyRzZWxmLT57cGF0aH19KSkgewoJJGlmbGFncyAuPSAiICIuJGVu
di0+e0lOQ0RJUlBSRUZJWH0uJGRwYXRoOwoJbmV4dCBpZiBGaWxlOjpTcGVjLT5maWxlX25h
bWVfaXNfYWJzb2x1dGUoJGRwYXRoKTsKCWlmIChAcGFyYW06OnJwYXRoKSB7CgkgICAgbXkg
JGQ7CgkgICAgaWYgKCRkcGF0aCBlcSAkZGlyOjpDVVJESVIpIHsKCQlmb3JlYWNoICRkICht
YXAoJF8tPnBhdGgsIEBwYXJhbTo6cnBhdGgpKSB7CgkJICAgICRpZmxhZ3MgLj0gIiAiLiRl
bnYtPntJTkNESVJQUkVGSVh9LiRkOwoJCX0KCSAgICB9IGVsc2UgewoJCWZvcmVhY2ggJGQg
KG1hcCgkXy0+cGF0aCwgQHBhcmFtOjpycGF0aCkpIHsKCQkgICAgJGlmbGFncyAuPSAiICIu
JGVudi0+e0lOQ0RJUlBSRUZJWH0uRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkZCwgJGRwYXRoKTsK
CQl9CgkgICAgfQoJfQogICAgfQogICAgJGlmbGFncwp9CgwKcGFja2FnZSBGaWxlOjpTcGVj
OwoKdXNlIHZhcnMgcXcoICRfU0VQICRfTUFUQ0hfU0VQICRfTUFUQ0hfVk9MICk7CgojIENv
bnMgaXMgbWlncmF0aW5nIHRvIHVzaW5nIEZpbGU6OlNwZWMgZm9yIHBvcnRhYmxlIHBhdGgg
bmFtZQojIG1hbmlwdWxhdGlvbi4gIFRoaXMgaXMgdGhlIHJpZ2h0IGxvbmctdGVybSBkaXJl
Y3Rpb24sIGJ1dCB0aGVyZSBhcmUKIyBzb21lIHByb2JsZW1zIHdpdGggbWFraW5nIHRoZSB0
cmFuc2l0aW9uOgojCiMJRm9yIG11bHRpLXZvbHVtZSBzdXBwb3J0LCB3ZSBuZWVkIHRvIHVz
ZSBuZXdlciBpbnRlcmZhY2VzCiMJKHNwbGl0cGF0aCwgY2F0cGF0aCwgc3BsaXRkaXIpIHRo
YXQgYXJlIG9ubHkgYXZhaWxhYmxlIGluCiMJRmlsZTo6U3BlYyAwLjguCiMKIwlGaWxlOjpT
cGVjIDAuOCBkb2Vzbid0IHdvcmsgd2l0aCBQZXJsIDUuMDBbMzRdIGR1ZSB0bwojCXJlZ3Vs
YXIgZXhwcmVzc2lvbiBpbmNvbXBhdGliaWxpdGllcyAodXNlIG9mIFx6KS4KIwojCUZvcmNp
bmcgcGVvcGxlIHRvIHVzZSBhIG5ldyB2ZXJzaW9uIG9mIGEgbW9kdWxlIGlzIHBhaW5mdWwK
IwliZWNhdXNlIChpbiB0aGUgd29ya3BsYWNlKSB0aGVpciBhZG1pbmlzdHJhdG9ycyBhcmVu
J3QKIwlhbHdheXMgZ29pbmcgdG8gYWdyZWUgdG8gaW5zdGFsbCBpdCBldmVyeXdoZXJlLgoj
CiMgQXMgYSBtaWRkbGUgZ3JvdW5kLCB3ZSBwcm92aWRlIG91ciBvd24gdmVyc2lvbnMgb2Yg
YWxsIHRoZSBGaWxlOjpTcGVjCiMgbWV0aG9kcyB3ZSB1c2UsIHN1cHBvcnRpbmcgYm90aCBV
TklYIGFuZCBXaW4zMi4gIFNvbWUgb2YgdGhlc2UgbWV0aG9kcwojIGFyZSBob21lIGJyZXcs
IHNvbWUgYXJlIGN1dC1hbmQtcGFzdGVkIGZyb20gdGhlIHJlYWwgRmlsZTo6U3BlYyBtZXRo
b2RzLgojIFRoaXMgd2F5LCB3ZSdyZSBub3QgcmVpbnZlbnRpbmcgdGhlIHdob2xlIHdoZWVs
LCBhdCBsZWFzdC4KIwojIFdlIGNhbiAoYW5kIHNob3VsZCkgZ2V0IHJpZCBvZiB0aGlzIGNs
YXNzIHdoZW5ldmVyIDUuMDBbMzRdIGFuZAojIHZlcnNpb25zIG9mIEZpbGU6OlNwZWMgcHJp
b3IgdG8gMC45ICg/KSBoYXZlIGZhZGVkIHN1ZmZpY2llbnRseS4KIyBXZSBhbHNvIG1heSBu
ZWVkIHRvIHJldmlzaXQgd2hlbmV2ZXIgc29tZW9uZSBmaXJzdCB3YW50cyB0byB1c2UKIyBD
b25zIG9uIHNvbWUgcGxhdGZvcm0gb3RoZXIgdGhhbiBVTklYIG9yIFdpbjMyLgoKQkVHSU4g
ewogICAgaWYgKCRtYWluOjpfV0lOMzIpIHsKCSRfU0VQID0gJ1xcJzsKCSRfTUFUQ0hfU0VQ
ID0gIltcUS8kX1NFUFxFXSI7CgkkX01BVENIX1ZPTCA9ICIoW2Etel06KT8kX01BVENIX1NF
UCI7CiAgICB9IGVsc2UgewoJJF9TRVAgPSAnLyc7CgkkX01BVENIX1NFUCA9ICJcUSRfU0VQ
XEUiOwoJJF9NQVRDSF9WT0wgPSAkX01BVENIX1NFUDsKICAgIH0KfQoKc3ViIGNhbm9ucGF0
aCB7CiAgICBteSAoJHNlbGYsICRwYXRoKSA9IEBfOwogICAgaWYgKCRtYWluOjpfV0lOMzIp
IHsKCSRwYXRoID1+IHMvXihbYS16XTopL1x1JDEvczsKCSRwYXRoID1+IHN8L3xcXHxnOwoJ
JHBhdGggPX4gc3woW15cXF0pXFwrfCQxXFx8ZzsgICAgICAgICAgICAgICAgICAjIHh4Ly8v
L3h4ICAtPiB4eC94eAoJJHBhdGggPX4gc3woXFxcLikrXFx8XFx8ZzsgICAgICAgICAgICAg
ICAgICAgICAjIHh4Ly4vLi94eCAtPiB4eC94eAoJJHBhdGggPX4gc3xeKFwuXFwpK3x8cyB1
bmxlc3MgJHBhdGggZXEgIi5cXCI7ICAjIC4veHggICAgICAtPiB4eAoJJHBhdGggPX4gc3xc
XCR8fAoJCSB1bmxlc3MgJHBhdGggPX4gbSNeKFtBLVpdOik/XFwkI3M7ICAgIyB4eC8gICAg
ICAgLT4geHgKICAgIH0gZWxzZSB7CgkkcGF0aCA9fiBzfC8rfC98ZyB1bmxlc3MoJF5PIGVx
ICdjeWd3aW4nKTsgICAgICMgeHgvLy8veHggIC0+IHh4L3h4CgkkcGF0aCA9fiBzfCgvXC4p
Ky98L3xnOyAgICAgICAgICAgICAgICAgICAgICAgICMgeHgvLi8uL3h4IC0+IHh4L3h4Cgkk
cGF0aCA9fiBzfF4oXC4vKSt8fHMgdW5sZXNzICRwYXRoIGVxICIuLyI7ICAgICMgLi94eCAg
ICAgIC0+IHh4CgkkcGF0aCA9fiBzfF4vKFwuXC4vKSt8L3xzOyAgICAgICAgICAgICAgICAg
ICAgICMgLy4uLy4uL3h4IC0+IHh4CgkkcGF0aCA9fiBzfC8kfHwgdW5sZXNzICRwYXRoIGVx
ICIvIjsgICAgICAgICAgIyB4eC8gICAgICAgLT4geHgKICAgIH0KICAgIHJldHVybiAkcGF0
aDsKfQoKc3ViIGNhdGRpciB7CiAgICBteSAkc2VsZiA9IHNoaWZ0OwogICAgbXkgQGFyZ3Mg
PSBAXzsKICAgIGZvcmVhY2ggKEBhcmdzKSB7CgkjIGFwcGVuZCBhIHNsYXNoIHRvIGVhY2gg
YXJndW1lbnQgdW5sZXNzIGl0IGhhcyBvbmUgdGhlcmUKCSRfIC49ICRfU0VQIGlmICRfIGVx
ICcnIHx8IHN1YnN0cigkXywtMSkgbmUgJF9TRVA7CiAgICB9CiAgICByZXR1cm4gJHNlbGYt
PmNhbm9ucGF0aChqb2luKCcnLCBAYXJncykpOwp9CgpzdWIgY2F0ZmlsZSB7CiAgICBteSAk
c2VsZiA9IHNoaWZ0OwogICAgbXkgJGZpbGUgPSBwb3AgQF87CiAgICByZXR1cm4gJGZpbGUg
dW5sZXNzIEBfOwogICAgbXkgJGRpciA9ICRzZWxmLT5jYXRkaXIoQF8pOwogICAgJGRpciAu
PSAkX1NFUCB1bmxlc3Mgc3Vic3RyKCRkaXIsLTEpIGVxICRfU0VQOwogICAgJGZpbGUgPSAn
JyBpZiAhIGRlZmluZWQoJGZpbGUpOwogICAgcmV0dXJuICRkaXIuJGZpbGU7Cn0KCnN1YiBj
YXRwYXRoIHsKICAgIG15ICRwYXRoID0gJF9bMV0gLiAkX1swXS0+Y2F0ZmlsZShAX1syLi4k
I19dKTsKICAgICRwYXRoID1+IHMvKC4pJF9NQVRDSF9TRVAqJC8kMS87CiAgICAkcGF0aDsK
fQoKc3ViIGN1cmRpciB7CiAgICAnLicKfQoKc3ViIGZpbGVfbmFtZV9pc19hYnNvbHV0ZSB7
CiAgICBteSAoJHNlbGYsICRmaWxlKSA9IEBfOwogICAgcmV0dXJuIHNjYWxhcigkZmlsZSA9
fiBte14kX01BVENIX1ZPTH1pcyk7Cn0KCnN1YiBzcGxpdGRpciB7CiAgICBteSBAZGlycyA9
IHNwbGl0KC8kX01BVENIX1NFUC8sICRfWzFdLCAtMSk7CiAgICBwdXNoKEBkaXJzLCAnJykg
aWYgJGRpcnNbJCNkaXJzXTsKICAgIEBkaXJzOwp9CgpzdWIgc3BsaXRwYXRoIHsKICAgIG15
ICgkc2VsZiwgJHBhdGgpID0gQF87CiAgICBteSAkdm9sID0gJyc7CiAgICBteSAkc2VwID0g
JF9TRVA7CiAgICBpZiAoJG1haW46Ol9XSU4zMikgewoJaWYgKCRwYXRoID1+IHMjXihbQS1a
YS16XTp8KD86XFxcXHwvLylbXlxcL10rW1xcL11bXlxcL10rKShbXFwvXSkjJDIjKSB7Cgkg
ICAgJHZvbCA9ICQxOwoJICAgICRzZXAgPSAkMjsKCX0KICAgIH0KICAgIG15KEBwYXRoKSA9
IHNwbGl0KC8kX01BVENIX1NFUC8sICRwYXRoLCAtMSk7CiAgICBteSAkZmlsZSA9IHBvcCBA
cGF0aDsKICAgIG15ICRkaXJzID0gam9pbigkc2VwLCBAcGF0aCwgJycpOwogICAgcmV0dXJu
ICgkdm9sLCAkZGlycywgJGZpbGUpOwp9CgpzdWIgdXBkaXIgewogICAgJy4uJwp9CgpzdWIg
Y2FzZV90b2xlcmFudCB7CiAgICByZXR1cm4gJG1haW46Ol9XSU4zMjsKfQoMCiMgRGlyZWN0
b3J5IGFuZCBmaWxlIGhhbmRsaW5nLiBGaWxlcy9kaXJzIGFyZSByZXByZXNlbnRlZCBieSBv
YmplY3RzLgojIE90aGVyIHBhY2thZ2VzIGFyZSB3ZWxjb21lIHRvIGFkZCBjb21wb25lbnQt
c3BlY2lmaWMgYXR0cmlidXRlcy4KcGFja2FnZSBkaXI7Cgp1c2UgdmFycyBxdyggJFNFUEFS
QVRPUiAkTUFUQ0hfU0VQQVJBVE9SICRDVVJESVIgJFVQRElSCgkgICAgICRjd2Rfdm9sICVy
b290ICR0b3AgJGN3ZCApOwoKQkVHSU4gewogICAgIyBBIHBvcnRhYmxlIHdheSBvZiBkZXRl
cm1pbmcgb3VyIGRpcmVjdG9yeSBzZXBhcmF0b3IuCiAgICAkU0VQQVJBVE9SID0gRmlsZTo6
U3BlYy0+Y2F0ZGlyKCcnLCAnJyk7CiAgICAjIEEgZmFzdC1wYXRoIHJlZ3VsYXIgZXhwcmVz
c2lvbiB0byBtYXRjaCBhIGRpcmVjdG9yeSBzZXBhcmF0b3IKICAgICMgYW55d2hlcmUgaW4g
YSBwYXRoIG5hbWUuCiAgICBpZiAoJFNFUEFSQVRPUiBlcSAnLycpIHsKCSRNQVRDSF9TRVBB
UkFUT1IgPSAiXFEkU0VQQVJBVE9SXEUiOwogICAgfSBlbHNlIHsKCSRNQVRDSF9TRVBBUkFU
T1IgPSAiW1xRLyRTRVBBUkFUT1JcRV0iOwogICAgfQogICAgIyBDYWNoZSB0aGVzZSB2YWx1
ZXMgc28gd2UgZG9uJ3QgaGF2ZSB0byBtYWtlIGEgbWV0aG9kIGNhbGwKICAgICMgZXZlcnkg
dGltZSB3ZSBuZWVkIHRoZW0uCiAgICAkQ1VSRElSID0gRmlsZTo6U3BlYy0+Y3VyZGlyOwkj
ICcuJyBvbiBVTklYCiAgICAkVVBESVIgPSBGaWxlOjpTcGVjLT51cGRpcjsJIyAnLi4nIG9u
IFVOSVgKICAgICMKICAgICRjd2Rfdm9sID0gJyc7Cn0KCiMgQW5ub3RhdGUgYSBub2RlIChm
aWxlIG9yIGRpcmVjdG9yeSkgd2l0aCBpbmZvIGFib3V0IHRoZQojIG1ldGhvZCB0aGF0IGNy
ZWF0ZWQgaXQuCnN1YiBjcmVhdG9yIHsKICAgIG15KCRzZWxmLCBAZnJhbWUpID0gQF87CiAg
ICAkc2VsZi0+eydjcmVhdG9yJ30gPSBcQGZyYW1lIGlmIEBmcmFtZTsKICAgICRzZWxmLT57
J2NyZWF0b3InfTsKfQoKIyBIYW5kbGUgYSBmaWxlfGRpciB0eXBlIGV4Y2VwdGlvbi4gIFdl
IG9ubHkgZGllIGlmIHdlIGZpbmQgd2Ugd2VyZQojIGludm9rZWQgYnkgc29tZXRoaW5nIGlu
IGEgQ29uc2NyaXB0L0NvbnN0cnVjdCBmaWxlLCBiZWNhdXNlCiMgZGVwZW5kZW5jaWVzIGNy
ZWF0ZWQgZGlyZWN0bHkgYnkgQ29ucycgYW5hbHlzaXMgc2hvdWxkbid0IGNhdXNlCiMgYW4g
ZXJyb3IuCnN1YiBfdHlwZV9leGNlcHRpb24gewogICAgbXkoJGUpID0gQF87CiAgICBteSgk
bGluZSwgJHN1Yik7CiAgICAodW5kZWYsIHVuZGVmLCAkbGluZSwgJHN1YikgPSBzY3JpcHQ6
OmNhbGxlcl9pbmZvOwogICAgaWYgKGRlZmluZWQgJGxpbmUpIHsKCW15ICRlcnIgPSAiXCIk
e1wkZS0+cGF0aH1cIiBhbHJlYWR5IGluIHVzZSBhcyBhICIgLiByZWYoJGUpIC4gIiBiZWZv
cmUgJHN1YiBvbiBsaW5lICRsaW5lIjsKCWlmICgkZS0+eydjcmVhdG9yJ30pIHsKCSAgICBt
eSAkc2NyaXB0OwoJICAgICh1bmRlZiwgJHNjcmlwdCwgJGxpbmUsICRzdWIpID0gQHskZS0+
eydjcmVhdG9yJ319OwoJICAgICRlcnIgPSAiXHQiIC4gJGVyciAuICIsXG5cdFx0ZGVmaW5l
ZCBieSAkc3ViIGluICRzY3JpcHQsIGxpbmUgJGxpbmUiOwoJfQoJJGVyciAuPSAiXG4iOwoJ
ZGllICRlcnI7CiAgICB9Cn0KCiMgVGhpcyB3cmFwcyB1cCBhbGwgdGhlIGNvbW1vbiBGaWxl
OjpTcGVjIGxvZ2ljIHRoYXQgd2UgdXNlIGZvciBwYXJzaW5nCiMgZGlyZWN0b3J5IHNlcGFy
YXRvcnMgaW4gYSBwYXRoIGFuZCB0dXJuaW5nIGl0IGludG8gaW5kaXZpZHVhbAojIHN1YmRp
cmVjdG9yaWVzIHRoYXQgd2UgbXVzdCBjcmVhdGUsIGFzIHdlbGwgYXMgY3JlYXRpb24gb2Yg
cm9vdAojIG5vZGVzIGZvciBhbnkgbmV3IGZpbGUgc3lzdGVtIHZvbHVtZXMgd2UgZmluZC4g
IEZpbGU6OlNwZWMgZG9lc24ndCBoYXZlCiMgaW50dWl0aXZlbHkgb2J2aW91cyBpbnRlcmZh
Y2VzLCBzbyB0aGlzIGlzIGhlYXZpbHkgY29tbWVudGVkLgojCiMgTm90ZTogIFRoaXMgaXMg
Tk9UIGFuIG9iamVjdCBvciBjbGFzcyBtZXRob2Q7CiMgaXQncyBqdXN0IGEgdXRpbGl0eSBz
dWJyb3V0aW5lLgpzdWIgX3BhcnNlX3BhdGggewogICAgbXkoJGRpciwgJHBhdGgpID0gQF87
CgogICAgIyBDb252ZXJ0IGFsbCBzbGFzaGVzIHRvIHRoZSBuYXRpdmUgZGlyZWN0b3J5IHNl
cGFyYXRvci4KICAgICMgVGhpcyBhbGxvd3MgQ29uc3RydWN0IGZpbGVzIHRvIGFsd2F5cyBi
ZSB3cml0dGVuIHdpdGggZ29vZAogICAgIyBvbGQgUE9TSVggcGF0aCBuYW1lcywgcmVnYXJk
bGVzcyBvZiB3aGF0IHdlJ3JlIHJ1bm5pbmcgb24uCiAgICAkcGF0aCA9IEZpbGU6OlNwZWMt
PmNhbm9ucGF0aCgkcGF0aCk7CgogICAgIyBGaWxlOjpTcGVjIGRvZXNuJ3QgdW5kZXJzdGFu
ZCB0aGUgQ29ucyBjb252ZW50aW9uIG9mCiAgICAjIGFuIGluaXRpYWwgJyMnIGZvciB0b3At
cmVsYXRpdmUgZmlsZXMuICBTdHJpcCBpdC4KICAgIG15KCR0b3ByZWwpID0gJHBhdGggPX4g
cy9eIy8vOwoKICAgICMgTGV0IEZpbGU6OlNwZWMgZG8gdGhlIGhlYXZ5IGxpZnRpbmcgb2Yg
cGFyc2luZyB0aGUgcGF0aCBuYW1lLgogICAgbXkoJHZvbCwgJGRpcmVjdG9yaWVzLCAkZW50
cnkpID0gRmlsZTo6U3BlYy0+c3BsaXRwYXRoKCRwYXRoKTsKICAgIG15IEBkaXJzID0gRmls
ZTo6U3BlYy0+c3BsaXRkaXIoJGRpcmVjdG9yaWVzKTsKCiAgICAjIElmIHRoZXJlIHdhcyBh
IGZpbGUgZW50cnkgb24gdGhlIGVuZCBvZiB0aGUgcGF0aCwgdGhlbiB0aGUKICAgICMgbGFz
dCBAZGlycyBlbGVtZW50IGlzICcnIGFuZCB3ZSBkb24ndCBuZWVkIGl0LiAgSWYgdGhlcmUK
ICAgICMgd2Fzbid0IGEgZmlsZSBlbnRyeSBvbiB0aGUgZW5kIChGaWxlOjpTcGVjLT5zcGxp
dHBhdGgoKSBrbmV3CiAgICAjIHRoZSBsYXN0IGNvbXBvbmVudCB3YXMgYSBkaXJlY3Rvcnkp
LCB0aGVuIHRoZSBsYXN0IEBkaXJzCiAgICAjIGVsZW1lbnQgYmVjb21lcyB0aGUgZW50cnkg
d2Ugd2FudCB0byBsb29rIHVwLgogICAgbXkoJGUpID0gcG9wIEBkaXJzOwogICAgJGVudHJ5
ID0gJGUgaWYgJGVudHJ5IGVxICcnOwoKICAgIGlmIChGaWxlOjpTcGVjLT5maWxlX25hbWVf
aXNfYWJzb2x1dGUoJHBhdGgpKSB7CgkjIEFuIGFic29sdXRlIHBhdGggbmFtZS4gIElmIG5v
IHZvbHVtZSB3YXMgc3VwcGxpZWQsCgkjIHVzZSB0aGUgdm9sdW1lIG9mIG91ciBjdXJyZW50
IGRpcmVjdG9yeS4KCSR2b2wgPSAkY3dkX3ZvbCBpZiAkdm9sIGVxICcnOwoJJHZvbCA9IHVj
KCR2b2wpIGlmIEZpbGU6OlNwZWMtPmNhc2VfdG9sZXJhbnQ7CglpZiAoISBkZWZpbmVkICRy
b290eyR2b2x9KSB7CgkgICAgIyBUaGlzIGlzIG91ciBmaXJzdCB0aW1lIGxvb2tpbmcgdXAg
YSBwYXRoIG5hbWUKCSAgICAjIG9uIHRoaXMgdm9sdW1lLCBzbyBjcmVhdGUgYSByb290IG5v
ZGUgZm9yIGl0LgoJICAgICMgKE9uIFVOSVggc3lzdGVtcywgJHZvbCBpcyBhbHdheXMgJycs
IHNvICcvJwoJICAgICMgYWx3YXlzIG1hcHMgdG8gdGhlICRyb290eycnfSBub2RlLikKCSAg
ICAkcm9vdHskdm9sfSA9IHtwYXRoID0+ICR2b2wuJFNFUEFSQVRPUiwKCQkJcHJlZml4ID0+
ICR2b2wuJFNFUEFSQVRPUiwKCQkJc3JjcGF0aCA9PiAkdm9sLiRTRVBBUkFUT1IsCgkJCSdl
eGlzdHMnID0+IDEgfTsKCSAgICAkcm9vdHskdm9sfS0+eydzcmNkaXInfSA9ICRyb290eyR2
b2x9OwoJICAgIGJsZXNzICRyb290eyR2b2x9OwoJfQoJIyBXZSdyZSBhdCB0aGUgdG9wLCBz
byBzdHJpcCB0aGUgYmxhbmsgZW50cnkgZnJvbSB0aGUgZnJvbnQgb2YKCSMgdGhlIEBkaXJz
IGFycmF5IHNpbmNlIHRoZSBpbml0aWFsICcvJyBpdCByZXByZXNlbnRzIHdpbGwgbm93Cgkj
IGJlIHN1cHBsaWVkIGJ5IHRoZSByb290IG5vZGUgd2UgcmV0dXJuLgoJc2hpZnQgQGRpcnM7
CgkkZGlyID0gJHJvb3R7JHZvbH07CiAgICB9IGVsc2lmICgkdG9wcmVsKSB7CgkkZGlyID0g
JGRpcjo6dG9wOwogICAgfQogICAgKCRkaXIsIFxAZGlycywgJGVudHJ5KTsKfQoKIyBDb21t
b24gc3Vicm91dGluZSBmb3IgY3JlYXRpbmcgZGlyZWN0b3J5IG5vZGVzLgpzdWIgX2NyZWF0
ZV9kaXJzIHsKICAgIG15ICgkZGlyLCBAZGlycykgPSBAXzsKICAgIG15ICRlOwogICAgZm9y
ZWFjaCAkZSAoQGRpcnMpIHsKCW15ICRkID0gJGRpci0+e21lbWJlcn0tPnskZX07CglpZiAo
ISBkZWZpbmVkICRkKSB7CgkgICAgYmxlc3MgJGQgPSB7ICdlbnRyeScgPT4gJGUsICdkaXIn
ID0+ICRkaXIsIH0sICdkaXInOwoJICAgICRkLT5jcmVhdG9yKHNjcmlwdDo6Y2FsbGVyX2lu
Zm8pOwoJICAgICRkLT57bWVtYmVyfS0+eyRkaXI6OkNVUkRJUn0gPSAkZDsKCSAgICAkZC0+
e21lbWJlcn0tPnskZGlyOjpVUERJUn0gPSAkZGlyOwoJICAgICRkaXItPnttZW1iZXJ9LT57
JGV9ID0gJGQ7Cgl9IGVsc2lmIChyZWYgJGQgZXEgJ2VudHJ5JykgewoJICAgIGJsZXNzICRk
LCAnZGlyJzsKCSAgICAkZC0+e21lbWJlcn0tPnskZGlyOjpDVVJESVJ9ID0gJGQ7CgkgICAg
JGQtPnttZW1iZXJ9LT57JGRpcjo6VVBESVJ9ID0gJGRpcjsKCX0gZWxzaWYgKHJlZiAkZCBl
cSAnZmlsZScpIHsKCSAgICAjIFRoaXMgY2xhdXNlIGlzIHRvIHN1cHBseSBiYWNrd2FyZHMg
Y29tcGF0aWJpbGl0eSwKCSAgICAjIHdpdGggYSB3YXJuaW5nLCBmb3IgYW55b25lIHRoYXQn
cyB1c2VkIEZpbGVQYXRoCgkgICAgIyB0byByZWZlciB0byBhIGRpcmVjdG9yeS4gIEFmdGVy
IHBlb3BsZSBoYXZlIHVzaW5nCgkgICAgIyAxLjggaGF2ZSBoYWQgdGltZSB0byBhZGp1c3Qg
KHNvbWV0aW1lIGluIHZlcnNpb24KCSAgICAjIDEuOSBvciBsYXRlciksIHdlIHNob3VsZCBy
ZW1vdmUgdGhpcyBlbnRpcmUgY2xhdXNlLgoJICAgIG15KCRzY3JpcHQsICRsaW5lLCAkc3Vi
KTsKCSAgICAodW5kZWYsICRzY3JpcHQsICRsaW5lLCAkc3ViKSA9IEB7JGQtPnsnY3JlYXRv
cid9fTsKCSAgICBpZiAoJHN1YiBlcSAnc2NyaXB0OjpGaWxlUGF0aCcpIHsKCQlwcmludCBT
VERFUlIgIiQwOiAgV2FybmluZzogICRzdWIgdXNlZCB0byByZWZlciB0byBhIGRpcmVjdG9y
eVxuIgoJCQkuICJcdGF0IGxpbmUgJGxpbmUgb2YgJHNjcmlwdC4gIFVzZSBEaXJQYXRoIGlu
c3RlYWQuXG4iOwoJCWJsZXNzICRkLCAnZGlyJzsKCSAgICB9IGVsc2UgewoJCV90eXBlX2V4
Y2VwdGlvbigkZCk7CgkgICAgfQoJfSBlbHNpZiAocmVmICRkIG5lICdkaXInKSB7CgkgICAg
X3R5cGVfZXhjZXB0aW9uKCRkKTsKCX0KCSRkaXIgPSAkZDsKICAgIH0KICAgICRkaXI7Cn0K
CiMgTG9vayB1cCBhbiBlbnRyeSBpbiBhIGRpcmVjdG9yeS4gIFRoaXMgbWV0aG9kIGlzIGZv
ciB3aGVuIHdlIGRvbid0CiMgY2FyZSB3aGV0aGVyIGEgZmlsZSBvciBkaXJlY3RvcnkgaXMg
cmV0dXJuZWQsIHNvIGlmIHRoZSBlbnRyeSBhbHJlYWR5CiMgZXhpc3RzLCBpdCB3aWxsIHNp
bXBseSBiZSByZXR1cm5lZC4gIElmIG5vdCwgd2UgY3JlYXRlIGl0IGFzIGEKIyBnZW5lcmlj
ICJlbnRyeSIgd2hpY2ggY2FuIGJlIGxhdGVyIHR1cm5lZCBpbnRvIGEgZmlsZSBvciBkaXJl
Y3RvcnkKIyBieSBhIG1vcmUtc3BlY2lmaWMgbG9va3VwLgojCiMgVGhlIGZpbGUgZW50cnkg
bWF5IGJlIHNwZWNpZmllZCBhcyByZWxhdGl2ZSwgYWJzb2x1dGUgKHN0YXJ0cyB3aXRoIC8p
LAojIG9yIHRvcC1yZWxhdGl2ZSAoc3RhcnRzIHdpdGggIykuCnN1YiBsb29rdXAgewogICAg
bXkoJGRpciwgJGVudHJ5KSA9IEBfOwoKICAgIGlmICgkZW50cnkgIX4gbSMkTUFUQ0hfU0VQ
QVJBVE9SI28pIHsKCSMgRmFzdCBwYXRoOiBzaW1wbGUgZW50cnkgbmFtZSBpbiBhIGtub3du
IGRpcmVjdG9yeS4KCWlmICgkZW50cnkgPX4gcy9eIy8vKSB7CgkgICAgIyBUb3AtcmVsYXRp
dmUgbmFtZXMgYmVnaW4gd2l0aCAjLgoJICAgICRkaXIgPSAkZGlyOjp0b3A7Cgl9CiAgICB9
IGVsc2UgewoJbXkgJGRpcnNyZWY7CgkoJGRpciwgJGRpcnNyZWYsICRlbnRyeSkgPSBfcGFy
c2VfcGF0aCgkZGlyLCAkZW50cnkpOwoJJGRpciA9IF9jcmVhdGVfZGlycygkZGlyLCBAJGRp
cnNyZWYpIGlmIEAkZGlyc3JlZjsKCXJldHVybiBpZiAhIGRlZmluZWQgJGRpcjsKCXJldHVy
biAkZGlyIGlmICRlbnRyeSBlcSAnJzsKICAgIH0KCiAgICBteSAkZSA9ICRkaXItPnttZW1i
ZXJ9LT57JGVudHJ5fTsKICAgIGlmICghIGRlZmluZWQgJGUpIHsKCWJsZXNzICRlID0geyAn
ZW50cnknID0+ICRlbnRyeSwgJ2RpcicgPT4gJGRpciwgfSwgJ2VudHJ5JzsKCSRlLT5jcmVh
dG9yKHNjcmlwdDo6Y2FsbGVyX2luZm8pOwoJJGRpci0+e21lbWJlcn0tPnskZW50cnl9ID0g
JGU7CiAgICB9CgogICAgJGU7Cn0KCiMgTG9vayB1cCBhIGZpbGUgZW50cnkgaW4gYSBkaXJl
Y3RvcnkuCiMKIyBUaGUgZmlsZSBlbnRyeSBtYXkgYmUgc3BlY2lmaWVkIGFzIHJlbGF0aXZl
LCBhYnNvbHV0ZSAoc3RhcnRzIHdpdGggLyksCiMgb3IgdG9wLXJlbGF0aXZlIChzdGFydHMg
d2l0aCAjKS4Kc3ViIGxvb2t1cGZpbGUgewogICAgbXkoJGRpciwgJGVudHJ5KSA9IEBfOwoK
ICAgIGlmICgkZW50cnkgIX4gbSMkTUFUQ0hfU0VQQVJBVE9SI28pIHsKCSMgRmFzdCBwYXRo
OiBzaW1wbGUgZW50cnkgbmFtZSBpbiBhIGtub3duIGRpcmVjdG9yeS4KCWlmICgkZW50cnkg
PX4gcy9eIy8vKSB7CgkgICAgIyBUb3AtcmVsYXRpdmUgbmFtZXMgYmVnaW4gd2l0aCAjLgoJ
ICAgICRkaXIgPSAkZGlyOjp0b3A7Cgl9CiAgICB9IGVsc2UgewoJbXkgJGRpcnNyZWY7Cgko
JGRpciwgJGRpcnNyZWYsICRlbnRyeSkgPSBfcGFyc2VfcGF0aCgkZGlyLCAkZW50cnkpOwoJ
JGRpciA9IF9jcmVhdGVfZGlycygkZGlyLCBAJGRpcnNyZWYpIGlmIEAkZGlyc3JlZjsKCXJl
dHVybiB1bmRlZiBpZiAkZW50cnkgZXEgJyc7CiAgICB9CgogICAgbXkgJGYgPSAkZGlyLT57
bWVtYmVyfS0+eyRlbnRyeX07CiAgICBpZiAoISBkZWZpbmVkICRmKSB7CglibGVzcyAkZiA9
IHsgJ2VudHJ5JyA9PiAkZW50cnksICdkaXInID0+ICRkaXIsIH0sICdmaWxlJzsKCSRmLT5j
cmVhdG9yKHNjcmlwdDo6Y2FsbGVyX2luZm8pOwoJJGRpci0+e21lbWJlcn0tPnskZW50cnl9
ID0gJGY7CiAgICB9IGVsc2lmIChyZWYgJGYgZXEgJ2VudHJ5JykgewoJYmxlc3MgJGYsICdm
aWxlJzsKICAgIH0gZWxzaWYgKHJlZiAkZiBuZSAnZmlsZScpIHsKCV90eXBlX2V4Y2VwdGlv
bigkZik7CiAgICB9CgogICAgJGY7Cn0KCiMgTG9vayB1cCBhIChzdWItKWRpcmVjdG9yeSBl
bnRyeSBpbiBhIGRpcmVjdG9yeS4KIwojIFRoZSAoc3ViLSlkaXJlY3RvcnkgZW50cnkgbWF5
IGJlIHNwZWNpZmllZCBhcyByZWxhdGl2ZSwgYWJzb2x1dGUKIyAoc3RhcnRzIHdpdGggLyks
IG9yIHRvcC1yZWxhdGl2ZSAoc3RhcnRzIHdpdGggIykuCnN1YiBsb29rdXBkaXIgewogICAg
bXkoJGRpciwgJGVudHJ5KSA9IEBfOwoKICAgIG15ICRkaXJzcmVmOwogICAgaWYgKCRlbnRy
eSAhfiBtIyRNQVRDSF9TRVBBUkFUT1IjbykgewoJIyBGYXN0IHBhdGg6IHNpbXBsZSBlbnRy
eSBuYW1lIGluIGEga25vd24gZGlyZWN0b3J5LgoJaWYgKCRlbnRyeSA9fiBzL14jLy8pIHsK
CSAgICAjIFRvcC1yZWxhdGl2ZSBuYW1lcyBiZWdpbiB3aXRoICMuCgkgICAgJGRpciA9ICRk
aXI6OnRvcDsKCX0KICAgIH0gZWxzZSB7CgkoJGRpciwgJGRpcnNyZWYsICRlbnRyeSkgPSBf
cGFyc2VfcGF0aCgkZGlyLCAkZW50cnkpOwogICAgfQogICAgX2NyZWF0ZV9kaXJzKCRkaXIs
IEAkZGlyc3JlZiwgJGVudHJ5KTsKfQoKIyBMb29rIHVwIGEgZmlsZSBlbnRyeSBhbmQgcmV0
dXJuIGl0IGlmIGl0J3MgYWNjZXNzaWJsZS4Kc3ViIGxvb2t1cF9hY2Nlc3NpYmxlIHsKICAg
IG15ICRmaWxlID0gJF9bMF0tPmxvb2t1cGZpbGUoJF9bMV0pOwogICAgcmV0dXJuICgkZmls
ZSAmJiAkZmlsZS0+YWNjZXNzaWJsZSkgPyAkZmlsZSA6IHVuZGVmOwp9CgojIFJldHVybiB0
aGUgcGFyZW50IGRpcmVjdG9yeSB3aXRob3V0IGRvaW5nIGEgbG9va3VwZGlyLAojIHdoaWNo
IHdvdWxkIGNyZWF0ZSBhIHBhcmVudCBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QuCiMg
QSByZXR1cm4gdmFsdWUgb2YgdW5kZWYgKCEgJGRpci0+dXApIGluZGljYXRlcyBhIHJvb3Qg
ZGlyZWN0b3J5LgpzdWIgdXAgewogICAgJF9bMF0tPnttZW1iZXJ9LT57JGRpcjo6VVBESVJ9
Owp9CgojIFJldHVybiB3aGV0aGVyIHRoaXMgaXMgYW4gZW50cnkgc29tZXdoZXJlIHVuZGVy
bmVhdGggdGhlCiMgc3BlY2lmaWVkIGRpcmVjdG9yeS4Kc3ViIGlzX3VuZGVyIHsKICAgIG15
ICRkaXIgPSAkX1swXTsKICAgIHdoaWxlICgkZGlyKSB7CglyZXR1cm4gMSBpZiAkX1sxXSA9
PSAkZGlyOwoJJGRpciA9ICRkaXItPnVwOwogICAgfQogICAgcmV0dXJuIHVuZGVmOwp9Cgoj
IFJldHVybiB0aGUgcmVsYXRpdmUgcGF0aCBmcm9tIHRoZSBjYWxsaW5nIGRpcmVjdG9yeSAo
JF9bMV0pCiMgdG8gdGhlIG9iamVjdC4gIElmIHRoZSBvYmplY3QgaXMgbm90IHVuZGVyIHRo
ZSBkaXJlY3RvcnksIHRoZW4KIyB3ZSByZXR1cm4gaXQgYXMgYSB0b3AtcmVsYXRpdmUgb3Ig
YWJzb2x1dGUgcGF0aCBuYW1lLgpzdWIgcmVscGF0aCB7CiAgICBteSAoJGRpciwgJG9iaikg
PSBAXzsKICAgIG15IEBkaXJzOwogICAgbXkgJG8gPSAkb2JqOwogICAgd2hpbGUgKCRvKSB7
CglpZiAoJGRpciA9PSAkbykgewoJICAgIGlmIChAZGlycyA8IDIpIHsKCQlyZXR1cm4gJGRp
cnNbMF0gfHwgJyc7CgkgICAgfSBlbHNlIHsKCQlyZXR1cm4gRmlsZTo6U3BlYy0+Y2F0ZGly
KEBkaXJzKTsKCSAgICB9Cgl9Cgl1bnNoaWZ0KEBkaXJzLCAkby0+e2VudHJ5fSk7CgkkbyA9
ICRvLT51cDsKICAgIH0KICAgICMgVGhlIG9iamVjdCB3YXMgbm90IHVuZGVybmVhdGggdGhl
IHNwZWNpZmllZCBkaXJlY3RvcnkuCiAgICAjIFVzZSB0aGUgbm9kZSdzIGNhY2hlZCBwYXRo
LCB3aGljaCBpcyBlaXRoZXIgdG9wLXJlbGF0aXZlCiAgICAjIChpbiB3aGljaCBjYXNlIHdl
IGFwcGVuZCAnIycgdG8gdGhlIGJlZ2lubmluZykgb3IKICAgICMgYWJzb2x1dGUuCiAgICBt
eSAkcCA9ICRvYmotPnBhdGg7CiAgICAkcCA9ICcjJyAuICRwIGlmICEgRmlsZTo6U3BlYy0+
ZmlsZV9uYW1lX2lzX2Fic29sdXRlKCRwKTsKICAgIHJldHVybiAkcDsKfQoKIyBSZXR1cm4g
dGhlIHBhdGggb2YgdGhlIGRpcmVjdG9yeSAoZmlsZSBwYXRocyBpbXBsZW1lbnRlZAojIHNl
cGFyYXRlbHksIGJlbG93KS4Kc3ViIHBhdGggewogICAgJF9bMF0tPntwYXRofSB8fAoJKCRf
WzBdLT57cGF0aH0gPSAkX1swXS0+e2Rpcn0tPnByZWZpeCAuICRfWzBdLT57ZW50cnl9KTsK
fQoKIyBSZXR1cm4gdGhlIHBhdGhuYW1lIGFzIGEgcHJlZml4IHRvIGJlIGNvbmNhdGVuYXRl
ZCB3aXRoIGFuIGVudHJ5LgpzdWIgcHJlZml4IHsKICAgIHJldHVybiAkX1swXS0+e3ByZWZp
eH0gaWYgZXhpc3RzICRfWzBdLT57cHJlZml4fTsKICAgICRfWzBdLT57cHJlZml4fSA9ICRf
WzBdLT5wYXRoIC4gJFNFUEFSQVRPUjsKfQoKIyBSZXR1cm4gdGhlIHJlbGF0ZWQgc291cmNl
IHBhdGggcHJlZml4LgpzdWIgc3JjcHJlZml4IHsKICAgIHJldHVybiAkX1swXS0+e3NyY3By
ZWZpeH0gaWYgZXhpc3RzICRfWzBdLT57c3JjcHJlZml4fTsKICAgIG15KCRzcmNkaXIpID0g
JF9bMF0tPnNyY2RpcjsKICAgICRzcmNkaXItPntzcmNwcmVmaXh9ID0gJHNyY2RpciBlcSAk
X1swXSA/ICRzcmNkaXItPnByZWZpeAoJCQkJCSAgICA6ICRzcmNkaXItPnNyY3ByZWZpeDsK
fQoKIyBSZXR1cm4gdGhlIHJlbGF0ZWQgc291cmNlIGRpcmVjdG9yeS4Kc3ViIHNyY2RpciB7
CiAgICAkX1swXS0+eydzcmNkaXInfSB8fAoJKCRfWzBdLT57J3NyY2Rpcid9ID0gJF9bMF0t
PntkaXJ9LT5zcmNkaXItPmxvb2t1cGRpcigkX1swXS0+e2VudHJ5fSkpCn0KCiMgUmV0dXJu
IGlmIHRoZSBkaXJlY3RvcnkgaXMgbGlua2VkIHRvIGEgc2VwYXJhdGUgc291cmNlIGRpcmVj
dG9yeS4Kc3ViIGlzX2xpbmtlZCB7CiAgICByZXR1cm4gJF9bMF0tPntpc19saW5rZWR9IGlm
IGRlZmluZWQgJF9bMF0tPntpc19saW5rZWR9OwogICAgJF9bMF0tPntpc19saW5rZWR9ID0g
JF9bMF0tPnBhdGggbmUgJF9bMF0tPnNyY2Rpci0+cGF0aDsKfQoKc3ViIGxpbmsgewogICAg
bXkoQHBhdGhzKSA9IEBfOwogICAgbXkoJHNyY2RpcikgPSAkZGlyOjpjd2QtPmxvb2t1cGRp
cihwb3AgQHBhdGhzKS0+c3JjZGlyOwogICAgbWFwKCRkaXI6OmN3ZC0+bG9va3VwZGlyKCRf
KS0+eydzcmNkaXInfSA9ICRzcmNkaXIsIEBwYXRocyk7CgogICAgIyBtYWtlIGEgcmV2ZXJz
ZSBsb29rdXAgZm9yIHRoZSBsaW5rLgogICAgJHNyY2Rpci0+e2xpbmtzfSA9IFtdIGlmICEg
JHNyY2Rpci0+e2xpbmtzfTsKICAgIHB1c2ggQHskc3JjZGlyLT57bGlua3N9fSwgQHBhdGhz
Owp9Cgp1c2UgdmFycyBxdyggQHRhaWwgKTsgIyBUT0RPOiBXaHkgZ2xvYmFsID8/Pz8KCnN1
YiBsaW5rZWRfdGFyZ2V0cyB7CiAgICBteSAkdGd0ID0gc2hpZnQ7CiAgICBteSBAdGFyZ2V0
cyA9ICgpOwogICAgbXkgJGRpcjsKICAgIGlmIChyZWYgJHRndCBlcSAnZGlyJykgewoJJGRp
ciA9ICR0Z3Q7CiAgICB9IGVsc2UgewoJcHVzaCBAdGFpbCwgJHRndDsKCSRkaXIgPSAkdGd0
LT57ZGlyfTsKICAgIH0KICAgIHdoaWxlICgkZGlyKSB7CglpZiAoZGVmaW5lZCAkZGlyLT57
bGlua3N9ICYmIEB7JGRpci0+e2xpbmtzfX0pIHsKCSAgICBwdXNoKEB0YXJnZXRzLCBtYXAo
RmlsZTo6U3BlYy0+Y2F0ZGlyKCRfLCBAdGFpbCksIEB7JGRpci0+e2xpbmtzfX0pKTsKCSAg
ICAjcHJpbnQgU1RERVJSICJGb3VuZCBMaW5rOiAke1wkZGlyLT5wYXRofSAtPiBAe1wkZGly
LT57bGlua3N9fVxuIjsKCX0KCXVuc2hpZnQgQHRhaWwsICRkaXItPntlbnRyeX07CgkkZGly
ID0gJGRpci0+dXA7CiAgICB9CgogICAgcmV0dXJuIG1hcCgkZGlyOjp0b3AtPmxvb2t1cGRp
cigkXyksIEB0YXJnZXRzKTsKfQoKc3ViIGFjY2Vzc2libGUgewogICAgbXkgJHBhdGggPSAk
X1swXS0+cGF0aDsKICAgIG15ICRlcnIgPSAiJDA6IHlvdSBoYXZlIGF0dGVtcHRlZCB0byB1
c2UgcGF0aCBcIiRwYXRoXCIgYm90aCBhcyBhIGZpbGUgIiAuCgkgICAgICAiYW5kIGFzIGEg
ZGlyZWN0b3J5IVxuIjsKICAgIGRpZSAkZXJyOwp9CgpzdWIgaW5pdCB7CiAgICBteSAkcGF0
aCA9IEN3ZDo6Y3dkKCk7CgogICAgIyBXZSBrbm93IHdlIGNhbiBnZXQgYXdheSB3aXRoIHBh
c3NpbmcgdW5kZWYgdG8gbG9va3VwZGlyCiAgICAjIGFzIHRoZSBkaXJlY3RvcnkgYmVjYXVz
ZSAkZGlyIGlzIGFuIGFic29sdXRlIHBhdGguCiAgICAkdG9wID0gbG9va3VwZGlyKHVuZGVm
LCAkcGF0aCk7CiAgICAkdG9wLT57J3BhdGgnfSA9ICR0b3AtPntzcmNwYXRofSA9ICRkaXI6
OkNVUkRJUjsKICAgICR0b3AtPnsncHJlZml4J30gPSAnJzsKICAgICR0b3AtPnsnc3JjZGly
J30gPSAkdG9wOwoKICAgICRjd2QgPSAkdG9wOwoKICAgICgkY3dkX3ZvbCwgdW5kZWYsIHVu
ZGVmKSA9IEZpbGU6OlNwZWMtPnNwbGl0cGF0aCgkcGF0aCk7CiAgICAkY3dkX3ZvbCA9ICcn
IGlmICEgZGVmaW5lZCAkY3dkX3ZvbDsKICAgICRjd2Rfdm9sID0gdWMoJGN3ZF92b2wpIGlm
IEZpbGU6OlNwZWMtPmNhc2VfdG9sZXJhbnQ7Cn0KDApwYWNrYWdlIGZpbGU7Cgp1c2UgdmFy
cyBxdyggQElTQSAkbGV2ZWwgKTsKCkJFR0lOIHsgQElTQSA9IHF3KGRpcik7ICRsZXZlbCA9
IDAgfQoKIyBSZXR1cm4gdGhlIHBhdGhuYW1lIG9mIHRoZSBmaWxlLgojIERlZmluZSB0aGlz
IHNlcGFyYXRlbHkgZnJvbSBkaXI6OnBhdGggYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvCiMg
Y2FjaGUgYWxsIGZpbGUgcGF0aG5hbWVzIChqdXN0IGRpcmVjdG9yeSBwYXRobmFtZXMpLgpz
dWIgcGF0aCB7CiAgICAkX1swXS0+e2Rpcn0tPnByZWZpeCAuICRfWzBdLT57ZW50cnl9Cn0K
CiMgUmV0dXJuIHRoZSByZWxhdGVkIHNvdXJjZSBmaWxlIHBhdGguCnN1YiBzcmNwYXRoIHsK
ICAgICRfWzBdLT57ZGlyfS0+c3JjcHJlZml4IC4gJF9bMF0tPntlbnRyeX0KfQoKIyBSZXR1
cm4gaWYgdGhlIGZpbGUgaXMgKHNob3VsZCBiZSkgbGlua2VkIHRvIGEgc2VwYXJhdGUgc291
cmNlIGZpbGUuCnN1YiBpc19saW5rZWQgewogICAgJF9bMF0tPntkaXJ9LT5pc19saW5rZWQK
fQoKIyBSZXBvc2l0b3J5IGZpbGUgc2VhcmNoLiAgSWYgdGhlIGxvY2FsIGZpbGUgZXhpc3Rz
LCB0aGF0IHdpbnMuCiMgT3RoZXJ3aXNlLCByZXR1cm4gdGhlIGZpcnN0IGV4aXN0aW5nIHNh
bWUtbmFtZWQgZmlsZSB1bmRlciBhCiMgUmVwb3NpdG9yeSBkaXJlY3RvcnkuICBJZiB0aGVy
ZSBpc24ndCBhbnl0aGluZyB3aXRoIHRoZSBzYW1lIG5hbWUKIyB1bmRlciBhIFJlcG9zaXRv
cnkgZGlyZWN0b3J5LCByZXR1cm4gdGhlIGxvY2FsIGZpbGUgbmFtZSBhbnl3YXkKIyBzbyB0
aGF0IHNvbWUgaGlnaGVyIGxheWVyIGNhbiB0cnkgdG8gY29uc3RydWN0IGl0LgpzdWIgcmZp
bGUgewogICAgcmV0dXJuICRfWzBdLT57cmZpbGV9IGlmIGV4aXN0cyAkX1swXS0+e3JmaWxl
fTsKICAgIG15KCRzZWxmKSA9IEBfOwogICAgbXkoJHJmaWxlKSA9ICRzZWxmOwogICAgaWYg
KEBwYXJhbTo6cnBhdGgpIHsKCW15KCRwYXRoKSA9ICRzZWxmLT5wYXRoOwoJaWYgKCEgRmls
ZTo6U3BlYy0+ZmlsZV9uYW1lX2lzX2Fic29sdXRlKCRwYXRoKSAmJiAhIC1mICRwYXRoKSB7
CgkgICAgbXkoJGRpcik7CgkgICAgZm9yZWFjaCAkZGlyIChAcGFyYW06OnJwYXRoKSB7CgkJ
bXkoJHQpID0gJGRpci0+cHJlZml4IC4gJHBhdGg7CgkJaWYgKC1mICR0KSB7CgkJICAgICRy
ZmlsZSA9ICRfWzBdLT5sb29rdXBmaWxlKCR0KTsKCQkgICAgJHJmaWxlLT57aXNfb25fcnBh
dGh9ID0gMTsKCQkgICAgbGFzdDsKCQl9CgkgICAgfQoJfQogICAgfQogICAgJHNlbGYtPnty
ZmlsZX0gPSAkcmZpbGU7Cn0KCiMgcmV0dXJucyB0aGUgInByZWNpb3VzIiBzdGF0dXMgb2Yg
dGhpcyBmaWxlLgpzdWIgcHJlY2lvdXMgewogICAgcmV0dXJuICRfWzBdLT57cHJlY2lvdXN9
Owp9CgojICJFcmFzZSIgcmVmZXJlbmNlIHRvIGEgUmVwb3NpdG9yeSBmaWxlLAojIG1ha2lu
ZyB0aGlzIGEgY29tcGxldGVseSBsb2NhbCBmaWxlIG9iamVjdAojIGJ5IHBvaW50aW5nIGl0
IGJhY2sgdG8gaXRzZWxmLgpzdWIgbm9fcmZpbGUgewogICAgJF9bMF0tPnsncmZpbGUnfSA9
ICRfWzBdOwp9CgojIFJldHVybiBhIHBhdGggdG8gdGhlIGZpcnN0IGV4aXN0aW5nIGZpbGUg
dW5kZXIgYSBSZXBvc2l0b3J5IGRpcmVjdG9yeSwKIyBpbXBsaWNpdGx5IHJldHVybmluZyB0
aGUgY3VycmVudCBmaWxlJ3MgcGF0aCBpZiB0aGVyZSBpc24ndCBhCiMgc2FtZS1uYW1lZCBm
aWxlIHVuZGVyIGEgUmVwb3NpdG9yeSBkaXJlY3RvcnkuCnN1YiBycGF0aCB7CiAgICAkX1sw
XS0+e3JwYXRofSB8fAoJKCRfWzBdLT57cnBhdGh9ID0gJF9bMF0tPnJmaWxlLT5wYXRoKQp9
CgojIFJldHVybiBhIHBhdGggdG8gdGhlIGZpcnN0IGxpbmtlZCBzcmNwYXRoIGZpbGUgdW5k
ZXIgYSBSZXBvc2l0b3kKIyBkaXJlY3RvcnksIGltcGxpY2l0bHkgcmV0dXJuaW5nIHRoZSBj
dXJyZW50IGZpbGUncyBzcmNwYXRoIGlmIHRoZXJlCiMgaXNuJ3QgYSBzYW1lLW5hbWVkIGZp
bGUgdW5kZXIgYSBSZXBvc2l0b3J5IGRpcmVjdG9yeS4Kc3ViIHJzcmNwYXRoIHsKICAgIHJl
dHVybiAkX1swXS0+e3JzcmNwYXRofSBpZiBleGlzdHMgJF9bMF0tPntyc3JjcGF0aH07CiAg
ICBteSgkc2VsZikgPSBAXzsKICAgIG15KCRwYXRoKSA9ICRzZWxmLT57cnNyY3BhdGh9ID0g
JHNlbGYtPnNyY3BhdGg7CiAgICBpZiAoQHBhcmFtOjpycGF0aCAmJiAhIEZpbGU6OlNwZWMt
PmZpbGVfbmFtZV9pc19hYnNvbHV0ZSgkcGF0aCkgJiYgISAtZiAkcGF0aCkgewoJbXkoJGRp
cik7Cglmb3JlYWNoICRkaXIgKEBwYXJhbTo6cnBhdGgpIHsKCSAgICBteSgkdCkgPSAkZGly
LT5wcmVmaXggLiAkcGF0aDsKCSAgICBpZiAoLWYgJHQpIHsKCQkkc2VsZi0+e3JzcmNwYXRo
fSA9ICR0OwoJCWxhc3Q7CgkgICAgfQoJfQogICAgfQogICAgJHNlbGYtPntyc3JjcGF0aH07
Cn0KCiMgUmV0dXJuIGlmIGEgc2FtZS1uYW1lZCBmaWxlIHNvdXJjZSBmaWxlIGV4aXN0cy4K
IyBUaGlzIGhhbmRsZXMgdGhlIGludGVyYWN0aW9uIG9mIExpbmsgYW5kIFJlcG9zaXRvcnkg
bG9naWMuCiMgQXMgYSBzaWRlIGVmZmVjdCwgaXQgd2lsbCBsaW5rIGEgc291cmNlIGZpbGUg
ZnJvbSBpdHMgTGlua2VkCiMgZGlyZWN0b3J5IChwcmVmZXJhYmx5IGxvY2FsLCBidXQgbWF5
YmUgaW4gYSByZXBvc2l0b3J5KQojIGludG8gYSBidWlsZCBkaXJlY3RvcnkgZnJvbSBpdHMg
cHJvcGVyIExpbmtlZCBkaXJlY3RvcnkuCnN1YiBzb3VyY2VfZXhpc3RzIHsKICAgIHJldHVy
biAkX1swXS0+e3NvdXJjZV9leGlzdHN9IGlmIGRlZmluZWQgJF9bMF0tPntzb3VyY2VfZXhp
c3RzfTsKICAgIG15KCRzZWxmKSA9IEBfOwogICAgbXkoJHBhdGgpID0gJHNlbGYtPnBhdGg7
CiAgICBteSgkdGltZSkgPSAoc3RhdCgkcGF0aCkpWzldOwogICAgaWYgKCRzZWxmLT5pc19s
aW5rZWQpIHsKCSMgTGlua2VkIGRpcmVjdG9yeSwgbG9jYWwgbG9naWMuCglteSgkc3JjcGF0
aCkgPSAkc2VsZi0+c3JjcGF0aDsKCW15KCRzcmN0aW1lKSA9IChzdGF0KCRzcmNwYXRoKSlb
OV07CglpZiAoJHNyY3RpbWUpIHsKCSAgICBpZiAoISAkdGltZSB8fCAkc3JjdGltZSAhPSAk
dGltZSkgewoJCWZ1dGlsOjppbnN0YWxsKCRzcmNwYXRoLCAkc2VsZik7CgkgICAgfQoJICAg
IHJldHVybiAkc2VsZi0+e3NvdXJjZV9leGlzdHN9ID0gMTsKCX0KCSMgTGlua2VkIGRpcmVj
dG9yeSwgcmVwb3NpdG9yeSBsb2dpYy4KCWlmIChAcGFyYW06OnJwYXRoKSB7CgkgICAgaWYg
KCRzZWxmICE9ICRzZWxmLT5yZmlsZSkgewoJCXJldHVybiAkc2VsZi0+e3NvdXJjZV9leGlz
dHN9ID0gMTsKCSAgICB9CgkgICAgbXkoJHJzcmNwYXRoKSA9ICRzZWxmLT5yc3JjcGF0aDsK
CSAgICBpZiAoJHBhdGggbmUgJHJzcmNwYXRoKSB7CgkJbXkoJHJzcmN0aW1lKSA9IChzdGF0
KCRyc3JjcGF0aCkpWzldOwoJCWlmICgkcnNyY3RpbWUpIHsKCQkgICAgaWYgKCEgJHRpbWUg
fHwgJHJzcmN0aW1lICE9ICR0aW1lKSB7CgkJCWZ1dGlsOjppbnN0YWxsKCRyc3JjcGF0aCwg
JHNlbGYpOwoJCSAgICB9CgkJICAgIHJldHVybiAkc2VsZi0+e3NvdXJjZV9leGlzdHN9ID0g
MTsKCQl9CgkgICAgfQoJfQoJIyBUaGVyZSB3YXMgbm8gc291cmNlIGZpbGUgaW4gYW55IExp
bmtlZCBkaXJlY3RvcnkKCSMgdW5kZXIgYW55IFJlcG9zaXRvcnkuICBJZiB0aGVyZSdzIG9u
ZSBpbiB0aGUgbG9jYWwKCSMgYnVpbGQgZGlyZWN0b3J5LCBpdCBubyBsb25nZXIgYmVsb25n
cyB0aGVyZS4KCWlmICgkdGltZSkgewoJICAgIHVubGluaygkcGF0aCkgfHwgZGllKCIkMDog
Y291bGRuJ3QgdW5saW5rICRwYXRoICgkISlcbiIpOwoJfQoJcmV0dXJuICRzZWxmLT57c291
cmNlX2V4aXN0c30gPSAnJzsKICAgIH0gZWxzZSB7CglpZiAoJHRpbWUpIHsKCSAgICByZXR1
cm4gJHNlbGYtPntzb3VyY2VfZXhpc3RzfSA9IDE7Cgl9CglpZiAoQHBhcmFtOjpycGF0aCAm
JiAkc2VsZiAhPSAkc2VsZi0+cmZpbGUpIHsKCSAgICByZXR1cm4gJHNlbGYtPntzb3VyY2Vf
ZXhpc3RzfSA9IDE7Cgl9CglyZXR1cm4gJHNlbGYtPntzb3VyY2VfZXhpc3RzfSA9ICcnOwog
ICAgfQp9CgojIFJldHVybiBpZiBhIHNhbWUtbmFtZWQgZGVyaXZlZCBmaWxlIGV4aXN0cyB1
bmRlciBhIFJlcG9zaXRvcnkgZGlyZWN0b3J5LgpzdWIgZGVyaXZlZF9leGlzdHMgewogICAg
JF9bMF0tPntkZXJpdmVkX2V4aXN0c30gfHwKCSgkX1swXS0+e2Rlcml2ZWRfZXhpc3RzfSA9
ICgkX1swXSAhPSAkX1swXS0+cmZpbGUpKTsKfQoKIyBSZXR1cm4gaWYgdGhpcyBmaWxlIGlz
IHNvbWV3aGVyZSB1bmRlciBhIFJlcG9zaXRvcnkgZGlyZWN0b3J5LgpzdWIgaXNfb25fcnBh
dGggewogICAgJF9bMF0tPntpc19vbl9ycGF0aH07Cn0KCnN1YiBsb2NhbCB7CiAgICBteSgk
c2VsZiwgJGFyZykgPSBAXzsKICAgIGlmIChkZWZpbmVkICRhcmcpIHsKCSRzZWxmLT57J2xv
Y2FsJ30gPSAkYXJnOwogICAgfQogICAgJHNlbGYtPnsnbG9jYWwnfTsKfQoKIyBSZXR1cm4g
dGhlIGVudHJ5IG5hbWUgb2YgdGhlIHNwZWNpZmllZCBmaWxlIHdpdGggdGhlIHNwZWNpZmll
ZAojIHN1ZmZpeCBhcHBlbmRlZC4gIExlYXZlIGl0IHVudG91Y2hlZCBpZiB0aGUgc3VmZml4
IGlzIGFscmVhZHkgdGhlcmUuCiMgRGlmZmVycyBmcm9tIHRoZSBhZGRzdWZmaXggZnVuY3Rp
b24sIGJlbG93LCBpbiB0aGF0IHRoaXMgc3RyaXBzCiMgdGhlIGV4aXN0aW5nIHN1ZmZpeCAo
aWYgYW55KSBiZWZvcmUgYXBwZW5kaW5nIHRoZSBkZXNpcmVkIG9uZS4Kc3ViIGJhc2Vfc3Vm
IHsKICAgIG15KCRlbnRyeSkgPSAkX1swXS0+e2VudHJ5fTsKICAgIGlmICgkZW50cnkgIX4g
bS8kX1sxXSQvKSB7CgkkZW50cnkgPX4gcy9cLlteXC5dKiQvLzsKCSRlbnRyeSAuPSAkX1sx
XTsKICAgIH0KICAgICRlbnRyeTsKfQoKIyBSZXR1cm4gdGhlIHN1ZmZpeCBvZiB0aGUgZmls
ZSwgZm9yIHVwIHRvIGEgMyBjaGFyYWN0ZXIKIyBzdWZmaXguIEFueXRoaW5nIGxlc3MgcmV0
dXJucyBub3RoaW5nLgpzdWIgc3VmZml4IHsKICBpZiAoISAkbWFpbjo6X1dJTjMyKSB7CiAg
ICAkX1swXS0+e2VudHJ5fSA9fiAvXC5bXlwuXC9dezAsM30kLzsKICAgICQmCiAgfSBlbHNl
IHsKICAgIG15IEBwaWVjZXMgPSBzcGxpdCgvXC4vLCAkX1swXS0+e2VudHJ5fSk7CiAgICBt
eSAkc3VmZml4ID0gcG9wKEBwaWVjZXMpOwogICAgcmV0dXJuICIuJHN1ZmZpeCI7CiAgfQp9
CgojIENhbGxlZCBhcyBhIHNpbXBsZSBmdW5jdGlvbiBmaWxlOjphZGRzdWZmaXgobmFtZSwg
c3VmZml4KQpzdWIgYWRkc3VmZml4IHsKICAgIG15KCRuYW1lLCAkc3VmZml4KSA9IEBfOwoK
ICAgIGlmICgkc3VmZml4ICYmIHN1YnN0cigkbmFtZSwgLWxlbmd0aCgkc3VmZml4KSkgbmUg
JHN1ZmZpeCkgewoJcmV0dXJuICRuYW1lIC49ICRzdWZmaXg7CiAgICB9CiAgICAkbmFtZTsK
fQoKIyBSZXR1cm4gdHJ1ZSBpZiB0aGUgZmlsZSBpcyAob3Igd2lsbCBiZSkgYWNjZXNzaWJs
ZS4KIyBUaGF0IGlzLCBpZiB3ZSBjYW4gYnVpbGQgaXQsIG9yIGlmIGl0IGlzIGFscmVhZHkg
cHJlc2VudC4Kc3ViIGFjY2Vzc2libGUgewogICAgKGV4aXN0cyAkX1swXS0+e2J1aWxkZXJ9
KSB8fCAoJF9bMF0tPnNvdXJjZV9leGlzdHMpOwp9CgojIFJldHVybiB0cnVlIGlmIHRoZSBm
aWxlIHNob3VsZCBiZSBpZ25vcmVkIGZvciB0aGUgcHVycG9zZQojIG9mIGNvbXB1dGluZyBk
ZXBlbmRlbmN5IGluZm9ybWF0aW9uIChzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQKIyBhcyBh
IGRlcGVuZGVuY3kgYW5kLCBmdXJ0aGVyLCBzaG91bGQgbm90IGJlIHNjYW5uZWQgZm9yCiMg
ZGVwZW5kZW5jaWVzKS4Kc3ViIGlnbm9yZSB7CiAgICByZXR1cm4gMCBpZiAhJHBhcmFtOjpp
Z25vcmU7CiAgICByZXR1cm4gJF9bMF0tPntpZ25vcmV9IGlmIGV4aXN0cyAkX1swXS0+e2ln
bm9yZX07CiAgICAkX1swXS0+e2lnbm9yZX0gPSAkX1swXS0+cGF0aCA9fiAvJHBhcmFtOjpp
Z25vcmUvbzsKfQoKIyBCdWlsZCB0aGUgZmlsZSwgaWYgbmVjZXNzYXJ5LgpzdWIgYnVpbGQg
ewogICAgJF9bMF0tPntzdGF0dXN9IHx8ICZmaWxlOjpfYnVpbGQ7Cn0KCnN1YiBfYnVpbGQg
ewogICAgbXkoJHRndCkgPSBAXzsKICAgIGxvY2FsKCAkY2hpbGRfcXVldWUgKSA9IHsgcGFy
ZW50ID0+ICR0Z3QgfTsKICAgIF9wYnVpbGQoICR0Z3QgKTsKICAgIHdhaXRfb25fYWxsX2No
aWxkcmVuKCk7CiAgICByZXR1cm4gJHRndC0+e3N0YXR1c307Cn0KCnN1YiBwYnVpbGQgewog
ICAgJF9bMF0tPntzdGF0dXN9IHx8ICZmaWxlOjpfcGJ1aWxkOwp9CgpzdWIgX3BidWlsZCB7
CiAgICBteSgkc2VsZikgPSBAXzsKICAgIHByaW50IG1haW46OkRFUEZJTEUgJHNlbGYtPnBh
dGgsICJcbiIgaWYgJHBhcmFtOjpkZXBmaWxlOwogICAgcHJpbnQoKCcgJyB4ICRsZXZlbCks
ICJDaGVja2luZyAiLCAkc2VsZi0+cGF0aCwgIlxuIikgaWYgJHBhcmFtOjpkZXBlbmRzOwog
ICAgaWYgKCFleGlzdHMgJHNlbGYtPntidWlsZGVyfSkgewoJIyBXZSBkb24ndCBrbm93IGhv
dyB0byBidWlsZCB0aGUgZmlsZS4gVGhpcyBpcyBPSywgaWYKCSMgdGhlIGZpbGUgaXMgcHJl
c2VudCBhcyBhIHNvdXJjZSBmaWxlLCB1bmRlciBlaXRoZXIgdGhlCgkjIGxvY2FsIHRyZWUg
b3IgYSBSZXBvc2l0b3J5LgoJaWYgKCRzZWxmLT5zb3VyY2VfZXhpc3RzKSB7CgkgICAgcmV0
dXJuICRzZWxmLT57c3RhdHVzfSA9ICdoYW5kbGVkJzsKCX0gZWxzZSB7CgkgICAgbXkoJG5h
bWUpID0gJHNlbGYtPnBhdGg7CgkgICAgcHJpbnQoIiQwOiBkb24ndCBrbm93IGhvdyB0byBj
b25zdHJ1Y3QgXCIkbmFtZVwiXG4iKTsKCSAgICBleGl0KDEpIHVubGVzcyAkcGFyYW06Omtm
bGFnOwoJICAgIHJldHVybiAkc2VsZi0+e3N0YXR1c30gPSAnZXJyb3JzJzsgIyB4eHggdXNl
ZCB0byBiZSAndW5rbm93bicKCX0KICAgIH0KCiAgICAjIEFuIGFzc29jaWF0ZWQgYnVpbGQg
b2JqZWN0IGV4aXN0cywgc28gd2Uga25vdyBob3cgdG8gYnVpbGQKICAgICMgdGhlIGZpbGUu
IFdlIGZpcnN0IGNvbXB1dGUgdGhlIHNpZ25hdHVyZSBvZiB0aGUgZmlsZSwgYmFzZWQKICAg
ICMgb24gaXRzIGRlcGVuZGVuZGVuY2llcywgdGhlbiBvbmx5IHJlYnVpbGQgdGhlIGZpbGUg
aWYgdGhlCiAgICAjIHNpZ25hdHVyZSBoYXMgY2hhbmdlZC4KICAgIG15KCRidWlsZGVyKSA9
ICRzZWxmLT57YnVpbGRlcn07CiAgICAkbGV2ZWwgKz0gMjsKCiAgICBteShAZGVwcykgPSAo
QHskc2VsZi0+e2RlcH19LCBAeyRzZWxmLT57c291cmNlc319KTsKICAgIG15KCRyZGVwcykg
PSBcQGRlcHM7CgogICAgaWYgKCRwYXJhbTo6cmFuZG9tKSB7CgkjIElmIHJlcXVlc3RlZCwg
YnVpbGQgaW4gYSByYW5kb20gb3JkZXIsIGluc3RlYWQgb2YgdGhlCgkjIG9yZGVyIHRoYXQg
dGhlIGRlcGVuZGVuY2llcyB3ZXJlIGxpc3RlZC4KCW15KCVyZGVwcyk7CgltYXAgeyAkcmRl
cHN7JF8sJyonIHggaW50KHJhbmQgMTApfSA9ICRfIH0gQGRlcHM7CgkkcmRlcHMgPSBbdmFs
dWVzKCVyZGVwcyldOwogICAgfQoKICAgICRzZWxmLT57c3RhdHVzfSA9ICcnOwoKICAgIG15
ICRkZXA7CiAgICBteSAkc2lnOwogICAgewoJI3ByaW50ICJpbiAiLCAkc2VsZi0+cGF0aCwg
IlxuIjsKCWxvY2FsKCAkZmlsZTo6Y2hpbGRfcXVldWUgKSA9IHsgcGFyZW50ID0+ICRzZWxm
IH07Cglmb3IgJGRlcCAoQCRyZGVwcykgewoJICAgIGlmICgocGJ1aWxkICRkZXApIGVxICdl
cnJvcnMnKSB7CgkJIyBQcm9wYWdhdGUgZGVwZW5kZW50IGVycm9ycyB0byB0YXJnZXQuCgkJ
IyBidXQgdHJ5IHRvIGJ1aWxkIGFsbCBkZXBlbmRlbnRzIHJlZ2FyZGxlc3Mgb2YgZXJyb3Jz
LgoJCSRzZWxmLT57c3RhdHVzfSA9ICdlcnJvcnMnOwoJICAgIH0KCX0KCXdhaXRfb25fYWxs
X2NoaWxkcmVuKCk7CiAgICB9CgogICAgIyBJZiBhbnkgZGVwZW5kZW50cyBoYWQgZXJyb3Jz
LCB0aGVuIHdlIGFib3J0LgogICAgaWYgKCRzZWxmLT57c3RhdHVzfSBlcSAnZXJyb3JzJykg
ewoJJGxldmVsIC09IDI7CglyZXR1cm4gJ2Vycm9ycyc7CiAgICB9CgogICAgIyBDb21wdXRl
IHRoZSBmaW5hbCBzaWduYXR1cmUgb2YgdGhlIGZpbGUsIGJhc2VkIG9uCiAgICAjIHRoZSBz
dGF0aWMgZGVwZW5kZW5jaWVzIChpbiBvcmRlciksIGR5bmFtaWMgZGVwZW5kZW5jaWVzLAog
ICAgIyBvdXRwdXQgcGF0aCBuYW1lLCBhbmQgKG5vbi1zdWJzdGl0dXRlZCkgYnVpbGQgc2Ny
aXB0LgogICAgJHNpZyA9ICRzZWxmLT57c2lnbn0gPSBzaWctPmNvbGxlY3QobWFwKHNpZy0+
c2lnbmF0dXJlKCRfLT5yZmlsZSksIEBkZXBzKSwKCQkJICAgICRidWlsZGVyLT5pbmNsdWRl
cygkc2VsZiksCgkJCSAgICAkYnVpbGRlci0+c2NyaXB0KTsKCiAgICAjIE1heSBoYXZlIGdv
dHRlbiBlcnJvcnMgZHVyaW5nIGNvbXB1dGF0aW9uIG9mIGR5bmFtaWMKICAgICMgZGVwZW5k
ZW5jeSBzaWduYXR1cmUsIGFib3ZlLgogICAgJGxldmVsIC09IDI7CiAgICByZXR1cm4gJ2Vy
cm9ycycgaWYgJHNlbGYtPntzdGF0dXN9IGVxICdlcnJvcnMnOwoKICAgIGlmIChAcGFyYW06
OnJwYXRoICYmICRzZWxmLT5kZXJpdmVkX2V4aXN0cykgewoJIyBUaGVyZSBpcyBubyBsb2Nh
bCBmaWxlIG9mIHRoaXMgbmFtZSwgYnV0IHRoZXJlIGlzIG9uZQoJIyB1bmRlciBhIFJlcG9z
aXRvcnkgZGlyZWN0b3J5LgoKCWlmICgnc2lnJy0+Y3VycmVudCgkc2VsZi0+cmZpbGUsICRz
aWcpKSB7CgkgICAgIyBUaGUgUmVwb3NpdG9yeSBjb3B5IGlzIGN1cnJlbnQgKGl0cyBzaWdu
YXR1cmUgbWF0Y2hlcwoJICAgICMgb3VyIGNhbGN1bGF0ZWQgc2lnbmF0dXJlKS4KCSAgICBp
ZiAoJHNlbGYtPmxvY2FsKSB7CgkJIyAuLi5idXQgdGhleSB3YW50IGEgbG9jYWwgY29weSwg
c28gcHJvdmlkZSBpdC4KCQltYWluOjpzaG93Y29tKCJMb2NhbCBjb3B5IG9mICR7XCRzZWxm
LT5wYXRofSBmcm9tICIgLgoJCQkgICAgICAiJHtcJHNlbGYtPnJwYXRofSIpOwoJCWZ1dGls
OjppbnN0YWxsKCRzZWxmLT5ycGF0aCwgJHNlbGYpOwoJCSdzaWcnLT5zZXQoJHNlbGYsICRz
aWcpOwoJICAgIH0KCSAgICByZXR1cm4gJHNlbGYtPntzdGF0dXN9ID0gJ2hhbmRsZWQnOwoJ
fQoKCSMgVGhlIHNpZ25hdHVyZXMgZG9uJ3QgbWF0Y2gsIGltcGxpY2l0bHkgYmVjYXVzZSBz
b21ldGhpbmcKCSMgb24gd2hpY2ggd2UgZGVwZW5kIGV4aXN0cyBsb2NhbGx5LiAgR2V0IHJp
ZCBvZiB0aGUgcmVmZXJlbmNlCgkjIHRvIHRoZSBSZXBvc2l0b3J5IGZpbGU7IHdlJ2xsIGJ1
aWxkIHRoaXMgKGFuZCBhbnl0aGluZyB0aGF0CgkjIGRlcGVuZHMgb24gaXQpIGxvY2FsbHku
Cgkkc2VsZi0+bm9fcmZpbGU7CiAgICB9CgogICAgIyBUaGVuIGNoZWNrIGZvciBjdXJyZW5j
eS4KICAgIGlmICghICdzaWcnLT5jdXJyZW50KCRzZWxmLCAkc2lnKSkgewoJIyBXZSBoYXZl
IHRvIGJ1aWxkL2Rlcml2ZSB0aGUgZmlsZS4KCXByaW50KCgnICcgeCAkbGV2ZWwpLCAiUmVi
dWlsZGluZyAiLCAkc2VsZi0+cGF0aCwgIjogb3V0IG9mIGRhdGUuXG4iKQoJCWlmICRwYXJh
bTo6ZGVwZW5kczsKCSMgRmlyc3QgY2hlY2sgdG8gc2VlIGlmIHRoZSBidWlsdCBmaWxlIGlz
IGNhY2hlZC4KCWlmICgkYnVpbGRlci0+Y2FjaGluKCRzZWxmLCAkc2lnKSkgewoJICAgICdz
aWcnLT5zZXQoJHNlbGYsICRzaWcpOwoJICAgIHJldHVybiAkc2VsZi0+e3N0YXR1c30gPSAn
YnVpbHQnOwoKCSMgYWN0aW9uIG5vIGxvbmdlciBibG9ja3MgKGZvciBtb3N0IGFjdGlvbnMp
LCBzbyB0aGlzIHJldHVybnMKCSMgaW1tZWRpYXRlbHksIGJlZm9yZSBhbnkgIGNvbW1hbmRz
IGFyZSBhY3R1YWxseSBydW4uICBUaGUKCSMgc2lnbmF0dXJlIGFuZCByZXR1cm4gc3RhdHVz
IHNob3VsZCBiZSBvdmVycmlkZGVuIGxhdGVyIGluCgkjIHdhaXRfb25fY2hpbGQgaWYgYSBw
cm9jZXNzIHdhcyBmb3JrZWQsIGJ1dCB0aGV5IGFyZSBzdGlsbCBzZXQKCSMgaGVyZSBpbiBj
YXNlIGEgbm9uLXNwYXduaW5nIGFjdGlvbiB3YXMgY2FsbGVkCgl9IGVsc2lmICgkYnVpbGRl
ci0+YWN0aW9uKCRzZWxmKSkgewoJICAgICRidWlsZGVyLT5jYWNob3V0KCRzZWxmLCAkc2ln
KTsKCSAgICAnc2lnJy0+c2V0KCRzZWxmLCAkc2lnKTsKCSAgICByZXR1cm4gJHNlbGYtPntz
dGF0dXN9ID0gJ2J1aWx0JzsKCX0gZWxzZSB7CgkgICAgZGllKCIkMDogZXJyb3JzIGNvbnN0
cnVjdGluZyAke1wkc2VsZi0+cGF0aH1cbiIpCgkJdW5sZXNzICRwYXJhbTo6a2ZsYWc7Cgkg
ICAgcmV0dXJuICRzZWxmLT57c3RhdHVzfSA9ICdlcnJvcnMnOwoJfQogICAgfSBlbHNlIHsK
CSMgUHVzaCB0aGlzIG91dCB0byB0aGUgY2FjaGUgaWYgd2UndmUgYmVlbiBhc2tlZCB0byAo
LUMgb3B0aW9uKS4KCSMgRG9uJ3Qgbm9ybWFsbHkgZG8gdGhpcyBiZWNhdXNlIGl0IHNsb3dz
IHVzIGRvd24uCgkjIEluIGEgZnVsbHkgYnVpbHQgc3lzdGVtLCBubyBhY2Nlc3NlcyB0byB0
aGUgY2FjaGUgZGlyZWN0b3J5CgkjIGFyZSByZXF1aXJlZCB0byBjaGVjayBhbnkgZmlsZXMu
IFRoaXMgaXMgYSB3aW4gaWYgY2FjaGUgaXMKCSMgaGVhdmlseSBzaGFyZWQuIEVuYWJsaW5n
IHRoaXMgb3B0aW9uIHB1dHMgdGhlIGRpcmVjdG9yeSBpbiB0aGUKCSMgbG9vcC4gVXNlZnVs
IG9ubHkgd2hlbiB5b3Ugd2lzaCB0byByZWNyZWF0ZSBhIGNhY2hlIGZyb20gYSBidWlsZC4K
CWlmICgkcGFyYW06OmNhY2hlc3luYykgewoJICAgICRidWlsZGVyLT5jYWNob3V0KCRzZWxm
LCAkc2lnKTsKCSAgICAnc2lnJy0+c2V0KCRzZWxmLCAkc2lnKTsKCX0KCXJldHVybiAkc2Vs
Zi0+e3N0YXR1c30gPSAnaGFuZGxlZCc7CiAgICB9Cn0KCnN1YiB3YWl0X29uX21heF9qb2Jz
IHsKCXdoaWxlKCBncmVwKCAvXGQrLywga2V5cyAleyRjaGlsZF9xdWV1ZX0gKSA+PSAkcGFy
YW06Om1heF9qb2JzICkgewoJICAgIHdhaXRfb25fY2hpbGQoKTsKCX0KfQoKc3ViIHdhaXRf
b25fYWxsX2NoaWxkcmVuIHsKCQoJd2hpbGUoIGdyZXAoIC9cZCsvLCBrZXlzICV7JGNoaWxk
X3F1ZXVlfSApICE9IDAgKSB7CgkgICAgd2FpdF9vbl9jaGlsZCgpOwoJfQp9CgpzdWIgd2Fp
dF9vbl9jaGlsZCB7CiAgICBteSggJHF1ZXVlICkgPSAkY2hpbGRfcXVldWU7CiAgICBteSgg
JHBhcmVudCApID0gJHF1ZXVlLT57cGFyZW50fTsKCiAgICAjcHJpbnQJInBhcjogIiwgJHBh
cmVudC0+cGF0aCwgIlxuIiBpZiByZWYoJHBhcmVudCkgZXEgJ2ZpbGUnOwogICAgbXkgJHBp
ZCA9IHVuZGVmOyAKCiAgICAjIGZpcnN0IGNoZWNrIGZvciBqb2JzIHRoYXQgaGF2ZSBhbHJl
YWR5IGJlZW4gY29sbGVjdGVkIGZyb20gY2hpbGQKICAgICMgdGFyZ2V0cwogICAgZm9yICRw
ICggQGZpbmlzaGVkICkgewoJaWYoICRxdWV1ZS0+eyRwfSApIHsKCSAgICAkcGlkID0gJHA7
CgkgICAgbGFzdDsKCX0KICAgIH0KCiAgICB3aGlsZSggISRxdWV1ZS0+eyRwaWR9ICkgewog
ICAgCSRwaWQgPSB3YWl0KCk7CglpZiggJHBpZCA8IDEgKSB7CgkgICAgZGllICJ3YWl0IHJl
dHVybmVkIGludmFsaWQgcGlkICRwaWQiOyAKCX0gZWxzZSB7CgkgICAgIyB0aGlzIGpvYiB3
YXMgbWVhbnQgZm9yIGEgcGFyZW50LCBzYXZlIGl0IHNvIHRoYXQgaXQgY2FuIGJlCgkgICAg
IyBmb3VuZCBsYXRlcgoJICAgIGlmKCAhJHF1ZXVlLT57JHBpZH0gKSB7CgkJcHVzaCBAZmlu
aXNoZWQsICRwaWQ7CiAJICAgIH0KCX0KICAgIH0KCiAgICBteSAkY2hpbGQgPSAkcXVldWUt
PnskcGlkfTsKICAgIG15ICR0Z3QgPSAkcXVldWUtPnskcGlkfS0+e3RndH07CiAgICBteSAk
Y29tID0gJGNoaWxkLT57Y29tfTsKICAgICR0Z3QtPntzdGF0dXN9ID0gJ2J1aWx0JzsKICAg
IHByaW50ICJ3YWl0ZWQ6ICIsICR0Z3QtPnBhdGg7IAogICAgcHJpbnQgIiBvbjogIiwgIGtl
eXMgJXskcXVldWV9LCAiXG4iOwoKICAgIG15KCRiMCwgJGIxICkgPSAoJD8gJiAweEZGLCAk
PyA+PiA4KTsKICAgICAgIyBEb24ndCBhY3R1YWxseSBzZWUgMDE3NyBvbiBzdG9wcGVkIHBy
b2Nlc3M7IGlzIHRoaXMgbmVjZXNzYXJ5PwogICAgICAjIG5leHQgaWYgJGIwID09IDAxNzc7
ICMgcHJvY2VzcyBzdG9wcGVkOyB3ZSBjYW4gd2FpdC4KICAgIGlmICgkYjApIHsKCW15KCRj
b3JlLCAkc2lnKSA9ICgkYjAgJiAwMjAwLCAkYjAgJiAwMTc3KTsKCW15KCRjb3JlbXNnKSA9
ICRjb3JlID8gIjsgY29yZSBkdW1wZWQiIDogIiI7CgkkY29tID1+IHMvXHMuKi8vOwoJbXko
JHBhdGgpID0gJHRndC0+cGF0aDsKCXdhcm4gcXEoJDA6ICoqKiBbJHBhdGhdICRjb20gdGVy
bWluYXRlZCBieSBzaWduYWwgJHNpZyRjb3JlbXNnXG4pOwoJJHBhcmVudC0+e3N0YXR1c30g
PSAkdGd0LT57c3RhdHVzfSA9ICdlcnJvcnMnOwogICAgfQogICAgaWYgKCRiMSkgewoJbXko
JHBhdGgpID0gJHRndC0+cGF0aDsKCXdhcm4gcXEoJDA6ICoqKiBbJHBhdGhdIEVycm9yICRi
MVxuKTsgIyB0cnlpbmcgdG8gYmUgbGlrZSBtYWtlLgoJJHBhcmVudC0+e3N0YXR1c30gPSAk
dGd0LT57c3RhdHVzfSA9ICdlcnJvcnMnOwogICAgfQogICAgaWYoICR0Z3QtPntzdGF0dXN9
IGVxICdidWlsdCcgKSB7CgkkdGd0LT57YnVpbGRlcn0tPmNhY2hvdXQoJHRndCwgJHRndC0+
e3NpZ259KTsKCXNpZy0+c2V0KCR0Z3QsICR0Z3QtPntzaWdufSk7CiAgICB9IGVsc2UgewoJ
ZGllKCIkMDogZXJyb3JzIGNvbnN0cnVjdGluZyAke1wkdGd0LT5wYXRofVxuIikgdW5sZXNz
ICRwYXJhbTo6a2ZsYWc7CiAgICB9CiAgICBkZWxldGUgJHF1ZXVlLT57JHBpZH07Cgp9CgoK
IyBCaW5kIGFuIGFjdGlvbiB0byBhIGZpbGUsIHdpdGggdGhlIHNwZWNpZmllZCBzb3VyY2Vz
LiBObyByZXR1cm4gdmFsdWUuCnN1YiBiaW5kIHsKICAgIG15KCRzZWxmLCAkYnVpbGRlciwg
QHNvdXJjZXMpID0gQF87CiAgICBpZiAoJHNlbGYtPntidWlsZGVyfSAmJiAhJHNlbGYtPnti
dWlsZGVyfS0+Y29tcGF0aWJsZSgkYnVpbGRlcikpIHsKCSMgRXZlbiBpZiBub3QgImNvbXBh
dGlibGUiLCB3ZSBjYW4gc3RpbGwgY2hlY2sgdG8gc2VlIGlmIHRoZQoJIyBkZXJpdmF0aW9u
IGlzIGlkZW50aWNhbC4gSXQgc2hvdWxkIGJlIGlkZW50aWNhbCBpZiB0aGUgYnVpbGRlciBp
cwoJIyB0aGUgc2FtZSBhbmQgdGhlIHNvdXJjZXMgYXJlIHRoZSBzYW1lLgoJaWYgKCIkc2Vs
Zi0+e2J1aWxkZXJ9IEB7JHNlbGYtPntzb3VyY2VzfX0iIG5lICIkYnVpbGRlciBAc291cmNl
cyIpIHsKCSAgICAkbWFpbjo6ZXJyb3JzKys7CgkgICAgbXkoJF9mb28xLCAkc2NyaXB0MSwg
JGxpbmUxLCAkc3ViMSkgPSBAeyRzZWxmLT5jcmVhdG9yfTsKCSAgICBteSgkX2ZvbzIsICRz
Y3JpcHQyLCAkbGluZTIsICRzdWIyKSA9IHNjcmlwdDo6Y2FsbGVyX2luZm87CgkgICAgbXkg
JGVyciA9ICJcdCR7XCRzZWxmLT5wYXRofVxuIiAuCgkJICAgICAgIlx0YnVpbHQgKGF0IGxl
YXN0KSB0d28gZGlmZmVyZW50IHdheXM6XG4iIC4KCQkgICAgICAiXHRcdCRzY3JpcHQxLCBs
aW5lICRsaW5lMTogICRzdWIxXG4iIC4KCQkgICAgICAiXHRcdCRzY3JpcHQyLCBsaW5lICRs
aW5lMjogICRzdWIyXG4iOwoJICAgIGRpZSAkZXJyOwoJfQoJcmV0dXJuOwogICAgfQogICAg
aWYgKCRwYXJhbTo6d2ZsYWcpIHsKCW15KCRzY3JpcHQsICRsaW5lLCAkc3ViKTsKCSh1bmRl
ZiwgJHNjcmlwdCwgJGxpbmUsICRzdWIpID0gc2NyaXB0OjpjYWxsZXJfaW5mbzsKCSRzZWxm
LT57c2NyaXB0fSA9ICcnIGlmICEgZGVmaW5lZCAkc2VsZi0+e3NjcmlwdH07Cgkkc2VsZi0+
e3NjcmlwdH0gLj0gIjsgIiBpZiAkc2VsZi0+e3NjcmlwdH07Cgkkc2VsZi0+e3NjcmlwdH0g
Lj0gcXEoJHN1YiBpbiAiJHNjcmlwdCIsIGxpbmUgJGxpbmUpOwogICAgfQogICAgJHNlbGYt
PntidWlsZGVyfSA9ICRidWlsZGVyOwogICAgcHVzaChAeyRzZWxmLT57c291cmNlc319LCBA
c291cmNlcyk7CiAgICBAeyRzZWxmLT57ZGVwfX0gPSAoKSBpZiAhIGRlZmluZWQgJHNlbGYt
PntkZXB9OwogICAgJHNlbGYtPntjb25zY3JpcHR9ID0gJHByaXY6OnNlbGYtPntzY3JpcHR9
Owp9CgpzdWIgaXNfdW5kZXIgewogICAgJF9bMF0tPntkaXJ9LT5pc191bmRlcigkX1sxXSk7
Cn0KCnN1YiByZWxwYXRoIHsKICAgIG15ICRkaXJwYXRoID0gJF9bMF0tPnJlbHBhdGgoJF9b
MV0tPntkaXJ9KTsKICAgIGlmICghICRkaXJwYXRoKSB7CglyZXR1cm4gJF9bMV0tPntlbnRy
eX07CiAgICB9IGVsc2UgewoJRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkZGlycGF0aCwgJF9bMV0t
PntlbnRyeX0pOwogICAgfQp9CgwKIyBHZW5lcmljIGVudHJ5IChmaWxlIG9yIGRpcmVjdG9y
eSkgaGFuZGxpbmcuCiMgVGhpcyBpcyBhbiBlbXB0eSBzdWJjbGFzcyBmb3Igbm9kZXMgdGhh
dCBoYXZlbid0CiMgcXVpdGUgZGVjaWRlZCB3aGV0aGVyIHRoZXkncmUgZmlsZXMgb3IgZGly
cy4KIyBVc2UgZmlsZSBtZXRob2RzIHVudGlsIHNvbWVvbmUgYmxlc3NlcyB0aGVtIG9uZSB3
YXkgb3IgdGhlIG90aGVyLgpwYWNrYWdlIGVudHJ5OwoKdXNlIHZhcnMgcXcoIEBJU0EgKTsK
CkJFR0lOIHsgQElTQSA9IHF3KGZpbGUpIH0KDAojIEZpbGUgdXRpbGl0aWVzCnBhY2thZ2Ug
ZnV0aWw7CgojIEluc3RhbGwgb25lIGZpbGUgYXMgYW5vdGhlci4KIyBMaW5rcyB0aGVtIGlm
IHBvc3NpYmxlIChoYXJkIGxpbmspLCBvdGhlcndpc2UgY29waWVzLgojIERvbid0IGFzayB3
aHksIGJ1dCB0aGUgc291cmNlIGlzIGEgcGF0aCwgdGhlIHRndCBpcyBhIGZpbGUgb2JqLgpz
dWIgaW5zdGFsbCB7CiAgICBteSgkc3AsICR0Z3QpID0gQF87CiAgICBteSgkdHApID0gJHRn
dC0+cGF0aDsKICAgIHJldHVybiAxIGlmICR0cCBlcSAkc3A7CiAgICByZXR1cm4gMSBpZiBl
dmFsIHsgbGluaygkc3AsICR0cCkgfTsKICAgIHVubGluaygkdHApOwogICAgaWYgKCEgZnV0
aWw6Om1rZGlyKCR0Z3QtPntkaXJ9KSkgewoJcmV0dXJuIHVuZGVmOwogICAgfQogICAgcmV0
dXJuIDEgaWYgZXZhbCB7IGxpbmsoJHNwLCAkdHApIH07CiAgICBmdXRpbDo6Y29weSgkc3As
ICR0cCk7Cn0KCiMgQ29weSBvbmUgZmlsZSB0byBhbm90aGVyLiBBcmd1bWVudHMgYXJlIGFj
dHVhbCBmaWxlIG5hbWVzLgojIFJldHVybnMgdW5kZWYgb24gZmFpbHVyZS4gUHJlc2VydmVz
IG10aW1lIGFuZCBtb2RlLgpzdWIgY29weSB7CiAgICBteSAoJHNwLCAkdHApID0gQF87CiAg
ICBteSAoJG1vZGUsICRsZW5ndGgsICRhdGltZSwgJG10aW1lKSA9IChzdGF0KCRzcCkpWzIs
Nyw4LDldOwoKICAgICMgVXNlIFBlcmwgc3RhbmRhcmQgbGlicmFyeSBtb2R1bGUgZm9yIGZp
bGUgY29weWluZywgd2hpY2ggaGFuZGxlcwogICAgIyBiaW5hcnkgY29waWVzLiA8c2Nod2Fy
emVAaXNhLmRlPiAxOTk4LTA2LTE4CiAgICBpZiAoISBGaWxlOjpDb3B5Ojpjb3B5KCRzcCwg
JHRwKSkgewoJd2FybiBxcSgkMDogY2FuXCd0IGluc3RhbGwgIiRzcCIgdG8gIiR0cCIgKCQh
KVxuKTsgIycKCXJldHVybiB1bmRlZjsKICAgIH0KICAgICMgVGhlIGZpbGUgaGFzIGJlZW4g
Y3JlYXRlZCwgc28gdHJ5IGJvdGggdGhlIGNobW9kIGFuZCB1dGltZSwKICAgICMgZmlyc3Qg
bWFraW5nIHN1cmUgdGhlIGNvcHkgaXMgd3JpdGFibGUgKGJlY2F1c2UgcGVybWlzc2lvbnMK
ICAgICMgYWZmZWN0IHRoZSBhYmlsaXR5IHRvIG1vZGlmeSBmaWxlIHRpbWVzIG9uIHNvbWUg
b3BlcmF0aW5nCiAgICAjIHN5c3RlbXMpLCBhbmQgdGhlbiBjaGFuZ2luZyBwZXJtaXNzaW9u
cyBiYWNrIGlmIG5lY2Vzc2FyeS4KICAgIG15ICRyZXQgPSAxOwogICAgbXkgJHdtb2RlID0g
JG1vZGUgfCAwNzAwOwogICAgaWYgKCEgY2htb2QgJHdtb2RlLCAkdHApIHsKCXdhcm4gcXEo
JDA6IGNhblwndCBzZXQgbW9kZSAkd21vZGUgb24gZmlsZSAiJHRwIiAoJCEpXG4pOyAjJwoJ
JHJldCA9IHVuZGVmOwogICAgfQogICAgaWYgKCEgdXRpbWUgJGF0aW1lLCAkbXRpbWUsICR0
cCkgewoJd2FybiBxcSgkMDogY2FuXCd0IHNldCBtb2RpZmljYXRpb24gdGltZSBmb3IgZmls
ZSAiJHRwIiAoJCEpXG4pOyAjJwoJJHJldCA9IHVuZGVmOwogICAgfQogICAgaWYgKCRtb2Rl
ICE9ICAkd21vZGUgJiYgISBjaG1vZCAkbW9kZSwgJHRwKSB7Cgl3YXJuIHFxKCQwOiBjYW5c
J3Qgc2V0IG1vZGUgJG1vZGUgb24gZmlsZSAiJHRwIiAoJCEpXG4pOyAjJwoJJHJldCA9IHVu
ZGVmOwogICAgfQogICAgcmV0dXJuICRyZXQ7Cn0KCiMgRW5zdXJlIHRoYXQgdGhlIHNwZWNp
ZmllZCBkaXJlY3RvcnkgZXhpc3RzLgojIEFib3J0cyBvbiBmYWlsdXJlLgpzdWIgbWtkaXIg
ewogICAgcmV0dXJuIDEgaWYgJF9bMF0tPnsnZXhpc3RzJ307CiAgICBpZiAoISBmdXRpbDo6
bWtkaXIoJF9bMF0tPntkaXJ9KSkgeyAjIFJlY3Vyc2l2ZWx5IG1ha2UgcGFyZW50LgoJcmV0
dXJuIHVuZGVmOwogICAgfQogICAgbXkoJHBhdGgpID0gJF9bMF0tPnBhdGg7CiAgICBpZiAo
IS1kICRwYXRoICYmICFta2RpcigkcGF0aCwgMDc3NykpIHsKCXdhcm4gcXEoJDA6IGNhbid0
IGNyZWF0ZSBkaXJlY3RvcnkgJHBhdGggKCQhKS5cbik7ICMnCglyZXR1cm4gdW5kZWY7CiAg
ICB9CiAgICAkX1swXS0+eydleGlzdHMnfSA9IDE7Cn0KCgwKIyBTaWduYXR1cmUgcGFja2Fn
ZS4KcGFja2FnZSBzaWc6Omhhc2g7Cgp1c2UgdmFycyBxdyggJGNhbGxlZCApOwoKc3ViIGlu
aXQgewogICAgbXkoJGRpcikgPSBAXzsKICAgIG15KCRjb25zaWduKSA9ICRkaXItPnByZWZp
eCAuICIuY29uc2lnbiI7CiAgICBteSgkZGhhc2gpID0gJGRpci0+e2NvbnNpZ259ID0ge307
CiAgICBpZiAoLWYgJGNvbnNpZ24pIHsKCW9wZW4oQ09OU0lHTiwgJGNvbnNpZ24pIHx8IGRp
ZSgiJDA6IGNhbid0IG9wZW4gJGNvbnNpZ24gKCQhKVxuIik7Cgl3aGlsZSg8Q09OU0lHTj4p
IHsKCSAgICBjaG9wOwoJICAgIG15ICgkZmlsZSwgJHNpZykgPSBzcGxpdCgvOi8sJF8pOwoJ
ICAgICRkaGFzaC0+eyRmaWxlfSA9ICRzaWc7Cgl9CgljbG9zZShDT05TSUdOKTsKICAgIH0K
ICAgICRkaGFzaAp9CgojIFJlYWQgdGhlIGhhc2ggZW50cnkgZm9yIGEgcGFydGljdWxhciBm
aWxlLgpzdWIgaW4gewogICAgbXkoJGRpcikgPSAkX1swXS0+e2Rpcn07CiAgICAoJGRpci0+
e2NvbnNpZ259IHx8IGluaXQoJGRpcikpLT57JF9bMF0tPntlbnRyeX19Cn0KCiMgV3JpdGUg
dGhlIGhhc2ggZW50cnkgZm9yIGEgcGFydGljdWxhciBmaWxlLgpzdWIgb3V0IHsKICAgIG15
KCRmaWxlLCAkc2lnKSA9IEBfOwogICAgbXkoJGRpcikgPSAkZmlsZS0+e2Rpcn07CiAgICAo
JGRpci0+e2NvbnNpZ259IHx8IGluaXQoJGRpcikpLT57JGZpbGUtPntlbnRyeX19ID0gJHNp
ZzsKICAgICRzaWc6Omhhc2g6OmRpcnR5eyRkaXJ9ID0gJGRpcjsKfQoKIyBGbHVzaCBoYXNo
IGVudHJpZXMuIENhbGxlZCBhdCBlbmQgb3IgdmlhIF5DIGludGVycnVwdC4Kc3ViIEVORCB7
CiAgICByZXR1cm4gaWYgJGNhbGxlZCsrOyAjIE1heSBiZSBjYWxsZWQgdHdpY2UuCiAgICBj
bG9zZShDT05TSUdOKTsgIyBpbiBjYXNlIHRoaXMgY2FtZSBpbiB2aWEgXkMuCiAgICBteSAk
ZGlyOwogICAgZm9yICRkaXIgKHZhbHVlcyAlc2lnOjpoYXNoOjpkaXJ0eSkgewoJbXkoJGNv
bnNpZ24pID0gJGRpci0+cHJlZml4IC4gIi5jb25zaWduIjsKCW15KCRjb25zdGVtcCkgPSAk
Y29uc2lnbiAuICIuJCQiOwoJaWYgKCEgb3BlbihDT05TSUdOLCAiPiRjb25zdGVtcCIpKSB7
CgkgICAgZGllKCIkMDogY2FuJ3QgY3JlYXRlICRjb25zdGVtcCAoJCEpXG4iKTsKCX0KCW15
KCRlbnRyeSwgJHNpZyk7Cgl3aGlsZSAoKCRlbnRyeSwgJHNpZykgPSBlYWNoICV7JGRpci0+
e2NvbnNpZ259fSkgewoJICAgIGlmICghIHByaW50IENPTlNJR04gIiRlbnRyeTokc2lnXG4i
KSB7CgkJZGllKCIkMDogZXJyb3Igd3JpdGluZyB0byAkY29uc3RlbXAgKCQhKVxuIik7Cgkg
ICAgfQoJfQoJY2xvc2UoQ09OU0lHTik7CglpZiAoISByZW5hbWUoJGNvbnN0ZW1wLCAkY29u
c2lnbikpIHsKCSAgICBpZiAoZnV0aWw6OmNvcHkoJGNvbnN0ZW1wLCAkY29uc2lnbikpIHsK
CQl1bmxpbmsoJGNvbnN0ZW1wKTsKCSAgICB9IGVsc2UgewoJCWRpZSgiJDA6IGNvdWxkbid0
IHJlbmFtZSBvciBjb3B5ICRjb25zdGVtcCB0byAkY29uc2lnbiAiIC4KCQkgICAgIigkISlc
biIpOwoJICAgIH0KCX0KICAgIH0KfQoKDAojIERlcml2ZWQgZmlsZSBjYWNoaW5nLgpwYWNr
YWdlIGNhY2hlOwoKIyBGaW5kIGEgZmlsZSBpbiB0aGUgY2FjaGUuIFJldHVybiBub24tbnVs
bCBpZiB0aGUgZmlsZSBpcyBpbiB0aGUgY2FjaGUuCnN1YiBpbiB7CiAgICByZXR1cm4gdW5k
ZWYgdW5sZXNzICRwYXJhbTo6Y2FjaGU7CiAgICBteSgkZmlsZSwgJHNpZykgPSBAXzsKICAg
ICMgQWRkIHRoZSBwYXRoIHRvIHRoZSBzaWduYXR1cmUsIHRvIG1ha2UgaXQgdW5pcXVlLgog
ICAgJHNpZyA9ICdzaWcnLT5jb2xsZWN0KCRzaWcsICRmaWxlLT5wYXRoKSB1bmxlc3MgJHBh
cmFtOjptaXh0YXJnZXRzOwogICAgbXkoJGRpcikgPSBzdWJzdHIoJHNpZywgMCwgMSk7CiAg
ICBteSgkY3ApID0gRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkcGFyYW06OmNhY2hlLCAkZGlyLCAk
c2lnKTsKICAgIHJldHVybiAtZiAkY3AgJiYgZnV0aWw6Omluc3RhbGwoJGNwLCAkZmlsZSk7
Cn0KCiMgVHJ5IHRvIGZsdXNoIGEgZmlsZSB0byB0aGUgY2FjaGUsIGlmIG5vdCBhbHJlYWR5
IHRoZXJlLgojIElmIGl0IGRvZXNuJ3QgbWFrZSBpdCBvdXQsIGR1ZSB0byBhbiBlcnJvciwg
dGhlbiB0aGF0IGRvZXNuJ3QKIyByZWFsbHkgbWF0dGVyLgpzdWIgb3V0IHsKICAgIHJldHVy
biB1bmxlc3MgJHBhcmFtOjpjYWNoZTsKICAgIG15KCRmaWxlLCAkc2lnKSA9IEBfOwogICAg
IyBBZGQgdGhlIHBhdGggdG8gdGhlIHNpZ25hdHVyZSwgdG8gbWFrZSBpdCB1bmlxdWUuCiAg
ICAkc2lnID0gJ3NpZyctPmNvbGxlY3QoJHNpZywgJGZpbGUtPnBhdGgpIHVubGVzcyAkcGFy
YW06Om1peHRhcmdldHM7CiAgICBteSgkZGlyKSA9IHN1YnN0cigkc2lnLCAwLCAxKTsKICAg
IG15KCRzcCkgPSAkZmlsZS0+cGF0aDsKICAgIG15KCRjcCkgPSBGaWxlOjpTcGVjLT5jYXRm
aWxlKCRwYXJhbTo6Y2FjaGUsICRkaXIsICRzaWcpOwogICAgbXkoJGNkaXIpID0gRmlsZTo6
U3BlYy0+Y2F0ZmlsZSgkcGFyYW06OmNhY2hlLCAkZGlyKTsKICAgIGlmICghIC1kICRjZGly
KSB7Cglta2RpcigkY2RpciwgMDc3NykgfHwKCSAgICBkaWUoIiQwOiBjYW4ndCBjcmVhdGUg
Y2FjaGUgZGlyZWN0b3J5ICRjZGlyICgkISkuXG4iKTsKICAgIH0gZWxzaWYgKC1mICRjcCkg
ewoJIyBBbHJlYWR5IGNhY2hlZDogdHJ5IHRvIHVzZSB0aGF0IGluc3RlYWQsIHRvIHNhdmUg
c3BhY2UuCgkjIFRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgLWNzIG9wdGlvbiBpcyB1c2VkIG9u
IGEgcHJldmlvdXNseQoJIyB1bmNhY2hlZCBidWlsZCwgb3IgaWYgdHdvIGJ1aWxkcyBvY2N1
ciBzaW11bHRhbmVvdXNseS4KCW15KCRscCkgPSAiLiRzaWciOwoJdW5saW5rKCRscCk7Cgly
ZXR1cm4gaWYgISBldmFsIHsgbGluaygkY3AsICRscCkgfTsKCXJlbmFtZSgkbHAsICRzcCk7
CgkjIFVuaXg5OCBzYXlzLCAiSWYgdGhlIG9sZCBhcmd1bWVudCBhbmQgdGhlIG5ldyBhcmd1
bWVudCBib3RoCgkjIFtyZWZlcl0gdG8gdGhlIHNhbWUgZXhpc3RpbmcgZmlsZSwgdGhlIHJl
bmFtZSgpIGZ1bmN0aW9uCgkjIHJldHVybnMgc3VjY2Vzc2Z1bGx5IGFuZCBwZXJmb3JtcyBu
byBvdGhlciBhY3Rpb24uIiAgU28sIGlmCgkjICRscCBhbmQgJHNwIGFyZSBsaW5rcyAoaS5l
LiwgJGNwIGFuZCAkc3AgYXJlIGxpbmtzKSwgJGxwIGlzCgkjIGxlZnQsIGFuZCB3ZSBtdXN0
IHVubGluayBpdCBvdXJzZWx2ZXMuICBJZiB0aGUgcmVuYW1lIGZhaWxlZAoJIyBmb3IgYW55
IHJlYXNvbiwgaXQgaXMgYWxzbyBnb29kIGZvcm0gdG8gdW5saW5rIHRoZSB0ZW1wb3JhcnkK
CSMgJGxwLiAgT3RoZXJ3aXNlICRscCBubyBsb25nZXIgZXhpc3RzIGFuZCwgYmFycmluZyBz
b21lIHJhY2UsCgkjIHRoZSB1bmxpbmsgZmFpbHMgc2lsZW50bHkuCgl1bmxpbmsoJGxwKTsK
CXJldHVybjsKICAgIH0KCiAgICByZXR1cm4gaWYgZXZhbCB7IGxpbmsoJHNwLCAkY3ApIH07
CiAgICByZXR1cm4gaWYgISAtZiAkc3A7ICMgaWYgbm90aGluZyB0byBjYWNoZS4KICAgIGlm
IChmdXRpbDo6Y29weSgkc3AsICIkY3AubmV3IikpIHsKCXJlbmFtZSgiJGNwLm5ldyIsICRj
cCk7CiAgICB9Cn0KCgwKIyBHZW5lcmljIHNpZ25hdHVyZSBoYW5kbGluZwpwYWNrYWdlIHNp
ZzsKCnVzZSB2YXJzIHF3KCBASVNBICk7CgpzdWIgc2VsZWN0IHsKICAgIG15KCRwYWNrYWdl
LCAkc3ViY2xhc3MpID0gQF87CiAgICBASVNBID0gKCRwYWNrYWdlIC4gIjo6IiAuICRzdWJj
bGFzcyk7Cn07CgoMCiMgTUQ1LWJhc2VkIHNpZ25hdHVyZSBwYWNrYWdlLgpwYWNrYWdlIHNp
Zzo6bWQ1OwoKdXNlIHZhcnMgcXcoICRtZDUgKTsKCkJFR0lOIHsKICAgIG15ICRtb2R1bGU7
CiAgICBteSBAbWQ1X21vZHVsZXMgPSBxdyhEaWdlc3Q6Ok1ENSBNRDUpOwogICAgZm9yIChA
bWQ1X21vZHVsZXMpIHsKCWV2YWwgInVzZSAkXyI7CglpZiAoISAkQCkgewoJICAgICRtb2R1
bGUgPSAkXzsKCSAgICBsYXN0OwoJfQogICAgfQogICAgZGllICJDYW5ub3QgZmluZCBhbnkg
TUQ1IG1vZHVsZSBmcm9tOiAgQG1kNV9tb2R1bGVzIiBpZiAkQDsKCiAgICAkbWQ1ID0gbmV3
ICRtb2R1bGU7Cn0KCiMgSW52YWxpZGF0ZSBhIGNhY2hlIGVudHJ5LgpzdWIgaW52YWxpZGF0
ZSB7CiAgICBkZWxldGUgJF9bMV0tPntzaWd9Cn0KCiMgRGV0ZXJtaW5lIHRoZSBjdXJyZW50
IHNpZ25hdHVyZSBvZiBhbiBhbHJlYWR5LWV4aXN0aW5nIG9yCiMgbm9uLWV4aXN0YW50IGZp
bGUuCnN1YiBzaWduYXR1cmUgewogICAgaWYgKGRlZmluZWQgJF9bMV0tPntzaWd9KSB7Cgly
ZXR1cm4gJF9bMV0tPntzaWd9OwogICAgfQogICAgbXkgKCRzZWxmLCAkZmlsZSkgPSBAXzsK
ICAgIG15KCRwYXRoKSA9ICRmaWxlLT5wYXRoOwogICAgbXkoJHRpbWUpID0gKHN0YXQoJHBh
dGgpKVs5XTsKICAgIGlmICgkdGltZSkgewoJbXkoJHNpZ3RpbWUpID0gc2lnOjpoYXNoOjpp
bigkZmlsZSk7CglpZiAoJGZpbGUtPmlzX29uX3JwYXRoKSB7CgkgICAgaWYgKCRzaWd0aW1l
KSB7CgkJbXkgKCRodGltZSwgJGhzaWcpID0gc3BsaXQoJyAnLCRzaWd0aW1lKTsKCQlpZiAo
ISAkaHNpZykgewoJCSAgICAjIFRoZXJlIHdhcyBubyBzZXBhcmF0ZSAkaHRpbWUgcmVjb3Jk
ZWQgaW4KCQkgICAgIyB0aGUgLmNvbnNpZ24gZmlsZSwgd2hpY2ggaW1wbGllcyB0aGF0IHRo
aXMKCQkgICAgIyBpcyBhIHNvdXJjZSBmaWxlIGluIHRoZSByZXBvc2l0b3J5LgoJCSAgICAj
IChTb3VyY2UgZmlsZSAuY29uc2lnbiBlbnRyaWVzIGRvbid0IHJlY29yZAoJCSAgICAjICRo
dGltZS4pICBKdXN0IHJldHVybiB0aGUgc2lnbmF0dXJlIHRoYXQKCQkgICAgIyBzb21lb25l
IGVsc2UgY29udmVuaWVudGx5IGNhbGN1bGF0ZWQgZm9yIHVzLgoJCSAgICByZXR1cm4gJGh0
aW1lOwkjIGFjdHVhbGx5IHRoZSBzaWduYXR1cmUKCQl9IGVsc2UgewoJCSAgICBpZiAoISAk
cGFyYW06OnJlcF9zaWdfdGltZXNfb2sgfHwgJGh0aW1lID09ICR0aW1lKSB7CgkJCXJldHVy
biAkZmlsZS0+e3NpZ30gPSAkaHNpZzsKCQkgICAgfQoJCX0KCSAgICB9CgkgICAgcmV0dXJu
ICRmaWxlLT57c2lnfSA9ICRmaWxlLT5wYXRoIC4gJHRpbWU7Cgl9CglpZiAoJHNpZ3RpbWUp
IHsKCSAgICBteSAoJGh0aW1lLCAkaHNpZykgPSBzcGxpdCgnICcsJHNpZ3RpbWUpOwoJICAg
IGlmICgkaHRpbWUgZXEgJHRpbWUpIHsKCQlyZXR1cm4gJGZpbGUtPntzaWd9ID0gJGhzaWc7
CgkgICAgfQoJfQoJaWYgKCEgRmlsZTo6U3BlYy0+ZmlsZV9uYW1lX2lzX2Fic29sdXRlKCRw
YXRoKSkgewoJICAgICMgQSBmaWxlIGluIHRoZSBsb2NhbCBidWlsZCBkaXJlY3RvcnkuIEFz
c3VtZSB3ZSBjYW4gd3JpdGUKCSAgICAjIGEgc2lnbmF0dXJlIGZpbGUgZm9yIGl0LCBhbmQg
Y29tcHV0ZSB0aGUgYWN0dWFsIHNvdXJjZQoJICAgICMgc2lnbmF0dXJlLiBXZSBjb21wdXRl
IHRoZSBmaWxlIGJhc2VkIG9uIHRoZSBidWlsZCBwYXRoLAoJICAgICMgbm90IHNvdXJjZSBw
YXRoLCBvbmx5IGJlY2F1c2UgdGhlcmUgbWlnaHQgYmUgcGFyYWxsZWwKCSAgICAjIGJ1aWxk
cyBnb2luZyBvbi4uLiBJbiBwcmluY2lwbGUsIHdlIGNvdWxkIHVzZSB0aGUgc291cmNlCgkg
ICAgIyBwYXRoIGFuZCBvbmx5IGNvbXB1dGUgdGhpcyBvbmNlLgoJICAgIG15KCRzaWcpID0g
c3Jjc2lnKCRwYXRoKTsKCSAgICBzaWc6Omhhc2g6Om91dCgkZmlsZSwgJHNpZyk7CgkgICAg
cmV0dXJuICRmaWxlLT57c2lnfSA9ICRzaWc7Cgl9IGVsc2UgewoJICAgIHJldHVybiAkZmls
ZS0+e3NpZ30gPSAkZmlsZS0+e2VudHJ5fSAuICR0aW1lOwoJfQogICAgfQogICAgJGZpbGUt
PntzaWd9ID0gJyc7Cn0KCiMgSXMgdGhlIHByb3ZpZGVkIHNpZ25hdHVyZSBlcXVhbCB0byB0
aGUgc2lnbmF0dXJlIG9mIHRoZSBjdXJyZW50CiMgaW5zdGFudGlhdGlvbiBvZiB0aGUgdGFy
Z2V0IChhbmQgZG9lcyB0aGUgdGFyZ2V0IGV4aXN0KT8Kc3ViIGN1cnJlbnQgewogICAgbXko
JHNlbGYsICRmaWxlLCAkc2lnKSA9IEBfOwogICAgIyBVbmNvbW1lbnQgdGhpcyB0byBkZWJ1
ZyBjaGVja3MgZm9yIHNpZ25hdHVyZSBjdXJyZW5jeS4KICAgICMgPGtuaWdodEBiYWxkbXQu
Y29tPiAxOTk4LTEwLTI5CiAgICAjIG15ICRmc2lnID0gJHNlbGYtPnNpZ25hdHVyZSgkZmls
ZSk7CiAgICAjIHByaW50IFNURE9VVCAiXCRzZWxmLT5zaWduYXR1cmUoJHtcJGZpbGUtPnBh
dGh9KQogICAgIyAgICAnJGZzaWcnIGVxIFwkc2lnICckc2lnJ1xuIjsKICAgICMgcmV0dXJu
ICRmc2lnIGVxICRzaWc7CiAgICAkc2VsZi0+c2lnbmF0dXJlKCRmaWxlKSBlcSAkc2lnOwp9
CgojIFN0b3JlIHRoZSBzaWduYXR1cmUgZm9yIGEgZmlsZS4Kc3ViIHNldCB7CiAgICBteSgk
c2VsZiwgJGZpbGUsICRzaWcpID0gQF87CiAgICBteSgkdGltZSkgPSAoc3RhdCgkZmlsZS0+
cGF0aCkpWzldOwogICAgc2lnOjpoYXNoOjpvdXQoJGZpbGUsICIkdGltZSAkc2lnIik7CiAg
ICAkZmlsZS0+e3NpZ30gPSAkc2lnCn0KCiMgUmV0dXJuIGFuIGFnZ3JlZ2F0ZSBzaWduYXR1
cmUKc3ViIGNvbGxlY3QgewogICAgbXkoJHNlbGYsIEBzaWdzKSA9IEBfOwogICAgIyBUaGUg
Zm9sbG93aW5nIHNlcXVlbmNlIGlzIGZhc3RlciB0aGFuIGNhbGxpbmcgdGhlIGhleCBpbnRl
cmZhY2UuCiAgICAkbWQ1LT5yZXNldCgpOwogICAgJG1kNS0+YWRkKGpvaW4oJycsICRwYXJh
bTo6c2FsdCwgQHNpZ3MpKTsKCiAgICAjIFVuY29tbWVudCB0aGlzIHRvIGRlYnVnIGRlcGVu
ZGVuY3kgc2lnbmF0dXJlcy4KICAgICMgPHNjaHdhcnplQGlzYS5kZT4gMTk5OC0wNS0wOAog
ICAgIyBteSAkYnVmID0gam9pbignLCAnLCAkcGFyYW06OnNhbHQsIEBzaWdzKTsKICAgICMg
cHJpbnQgU1RET1VUICJzaWdidWY9fCRidWZ8XG4iOwogICAgIyBVbmNvbW1lbnQgdGhpcyB0
byBwcmludCB0aGUgcmVzdWx0IG9mIGRlcGVuZGVuY3kgc2lnbmF0dXJlIGNhbGN1bGF0aW9u
LgogICAgIyA8a25pZ2h0QGJhbGRtdC5jb20+IDE5OTgtMTAtMTMKICAgICMgJGJ1ZiA9IHVu
cGFjaygiSCoiLCAkbWQ1LT5kaWdlc3QoKSk7CiAgICAjIHByaW50IFNURE9VVCAiXHQ9Pnwk
YnVmfFxuIjsKICAgICMgcmV0dXJuICRidWY7CgogICAgdW5wYWNrKCJIKiIsICRtZDUtPmRp
Z2VzdCgpKTsKfQoKIyBEaXJlY3RseSBjb21wdXRlIGEgZmlsZSBzaWduYXR1cmUgYXMgdGhl
IE1ENSBjaGVja3N1bSBvZiB0aGUKIyBieXRlcyBpbiB0aGUgZmlsZS4Kc3ViIHNyY3NpZyB7
CiAgICBteSgkcGF0aCkgPSBAXzsKICAgICRtZDUtPnJlc2V0KCk7CiAgICBvcGVuKEZJTEUs
ICRwYXRoKSB8fCByZXR1cm4gJyc7CiAgICBiaW5tb2RlKEZJTEUpOwogICAgJG1kNS0+YWRk
ZmlsZShcKkZJTEUpOwogICAgY2xvc2UoRklMRSk7CiAgICAjIFVuY29tbWVudCB0aGlzIHRv
IHByaW50IHRoZSByZXN1bHQgb2YgZmlsZSBzaWduYXR1cmUgY2FsY3VsYXRpb24uCiAgICAj
IDxrbmlnaHRAYmFsZG10LmNvbT4gMTk5OC0xMC0xMwogICAgIyBteSAkYnVmID0gdW5wYWNr
KCJIKiIsICRtZDUtPmRpZ2VzdCgpKTsKICAgICMgcHJpbnQgU1RET1VUICIkcGF0aD18JGJ1
ZnxcbiI7CiAgICAjIHJldHVybiAkYnVmOwogICAgdW5wYWNrKCJIKiIsICRtZDUtPmRpZ2Vz
dCgpKTsKfQoKX19FTkRfXzsKCj1oZWFkMSBOQU1FCgpDb25zIC0gQSBTb2Z0d2FyZSBDb25z
dHJ1Y3Rpb24gU3lzdGVtCgo9aGVhZDEgREVTQ1JJUFRJT04KCkEgZ3VpZGUgYW5kIHJlZmVy
ZW5jZSBmb3IgdmVyc2lvbiAyLjIuMAoKQ29weXJpZ2h0IChjKSAxOTk2LTIwMDAgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCgpUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQppdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eQp0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvcgooYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKVGhp
cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCmJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KCllvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCmFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLApCb3N0
b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KCj1oZWFkMSBJbnRyb2R1Y3Rpb24KCkI8Q29ucz4g
aXMgYSBzeXN0ZW0gZm9yIGNvbnN0cnVjdGluZywgcHJpbWFyaWx5LCBzb2Z0d2FyZSwgYnV0
IGlzIHF1aXRlCmRpZmZlcmVudCBmcm9tIHByZXZpb3VzIHNvZnR3YXJlIGNvbnN0cnVjdGlv
biBzeXN0ZW1zLiBDb25zIHdhcyBkZXNpZ25lZApmcm9tIHRoZSBncm91bmQgdXAgdG8gZGVh
bCBlYXNpbHkgd2l0aCB0aGUgY29uc3RydWN0aW9uIG9mIHNvZnR3YXJlIHNwcmVhZApvdmVy
IG11bHRpcGxlIHNvdXJjZSBkaXJlY3Rvcmllcy4gQ29ucyBtYWtlcyBpdCBlYXN5IHRvIGNy
ZWF0ZSBidWlsZCBzY3JpcHRzCnRoYXQgYXJlIHNpbXBsZSwgdW5kZXJzdGFuZGFibGUgYW5k
IG1haW50YWluYWJsZS4gQ29ucyBlbnN1cmVzIHRoYXQgY29tcGxleApzb2Z0d2FyZSBpcyBl
YXNpbHkgYW5kIGFjY3VyYXRlbHkgcmVwcm9kdWNpYmxlLgoKQ29ucyB1c2VzIGEgbnVtYmVy
IG9mIHRlY2huaXF1ZXMgdG8gYWNjb21wbGlzaCBhbGwgb2YgdGhpcy4gQ29uc3RydWN0aW9u
CnNjcmlwdHMgYXJlIGp1c3QgUGVybCBzY3JpcHRzLCBtYWtpbmcgdGhlbSBib3RoIGVhc3kg
dG8gY29tcHJlaGVuZCBhbmQgdmVyeQpmbGV4aWJsZS4gR2xvYmFsIHNjb3Bpbmcgb2YgdmFy
aWFibGVzIGlzIHJlcGxhY2VkIHdpdGggYW4gaW1wb3J0L2V4cG9ydAptZWNoYW5pc20gZm9y
IHNoYXJpbmcgaW5mb3JtYXRpb24gYmV0d2VlbiBzY3JpcHRzLCBzaWduaWZpY2FudGx5IGlt
cHJvdmluZwp0aGUgcmVhZGFiaWxpdHkgYW5kIG1haW50YWluYWJpbGl0eSBvZiBlYWNoIHNj
cmlwdC4gQjxDb25zdHJ1Y3Rpb24KZW52aXJvbm1lbnRzPiBhcmUgaW50cm9kdWNlZDogdGhl
c2UgYXJlIFBlcmwgb2JqZWN0cyB0aGF0IGNhcHR1cmUgdGhlCmluZm9ybWF0aW9uIHJlcXVp
cmVkIGZvciBjb250cm9sbGluZyB0aGUgYnVpbGQgcHJvY2Vzcy4gTXVsdGlwbGUKZW52aXJv
bm1lbnRzIGFyZSB1c2VkIHdoZW4gZGlmZmVyZW50IHNlbWFudGljcyBhcmUgcmVxdWlyZWQg
Zm9yIGdlbmVyYXRpbmcKcHJvZHVjdHMgaW4gdGhlIGJ1aWxkIHRyZWUuIENvbnMgaW1wbGVt
ZW50cyBhdXRvbWF0aWMgZGVwZW5kZW5jeSBhbmFseXNpcwphbmQgdXNlcyB0aGlzIHRvIGds
b2JhbGx5IHNlcXVlbmNlIHRoZSBlbnRpcmUgYnVpbGQuIFZhcmlhbnQgYnVpbGRzIGFyZQpl
YXNpbHkgcHJvZHVjZWQgZnJvbSBhIHNpbmdsZSBzb3VyY2UgdHJlZS4gSW50ZWxsaWdlbnQg
YnVpbGQgc3Vic2V0dGluZyBpcwpwb3NzaWJsZSwgd2hlbiB3b3JraW5nIG9uIGxvY2FsaXpl
ZCBjaGFuZ2VzLiBPdmVycmlkZXMgY2FuIGJlIHNldHVwIHRvCmVhc2lseSBvdmVycmlkZSBi
dWlsZCBpbnN0cnVjdGlvbnMgd2l0aG91dCBtb2RpZnlpbmcgYW55IHNjcmlwdHMuIE1ENQpj
cnlwdG9ncmFwaGljIEI8c2lnbmF0dXJlcz4gYXJlIGFzc29jaWF0ZWQgd2l0aCBkZXJpdmVk
IGZpbGVzLCBhbmQgYXJlIHVzZWQKdG8gYWNjdXJhdGVseSBkZXRlcm1pbmUgd2hldGhlciBh
IGdpdmVuIGZpbGUgbmVlZHMgdG8gYmUgcmVidWlsdC4KCldoaWxlIG9mZmVyaW5nIGFsbCBv
ZiB0aGUgYWJvdmUsIGFuZCBtb3JlLCBDb25zIHJlbWFpbnMgc2ltcGxlIGFuZCBlYXN5IHRv
CnVzZS4gVGhpcyB3aWxsLCBob3BlZnVsbHksIGJlY29tZSBjbGVhciBhcyB5b3UgcmVhZCB0
aGUgcmVtYWluZGVyIG9mIHRoaXMKZG9jdW1lbnQuCgoKPWhlYWQxIFdoeSBDb25zPyBXaHkg
bm90IE1ha2U/CgpDb25zIGlzIGEgQjxtYWtlPiByZXBsYWNlbWVudC4gSW4gdGhlIGZvbGxv
d2luZyBwYXJhZ3JhcGhzLCB3ZSBsb29rIGF0IGEgZmV3Cm9mIHRoZSB1bmRlc2lyYWJsZSBj
aGFyYWN0ZXJpc3RpY3Mgb2YgbWFrZS0tYW5kIHR5cGljYWwgYnVpbGQgZW52aXJvbm1lbnRz
CmJhc2VkIG9uIG1ha2UtLXRoYXQgbW90aXZhdGVkIHRoZSBkZXZlbG9wbWVudCBvZiBDb25z
LgoKPWhlYWQyIEJ1aWxkIGNvbXBsZXhpdHkKClRyYWRpdGlvbmFsIG1ha2UtYmFzZWQgc3lz
dGVtcyBvZiBhbnkgc2l6ZSB0ZW5kIHRvIGJlY29tZSBxdWl0ZSBjb21wbGV4LiBUaGUKb3Jp
Z2luYWwgbWFrZSB1dGlsaXR5IGFuZCBpdHMgZGVyaXZhdGl2ZXMgaGF2ZSBjb250cmlidXRl
ZCB0byB0aGlzIHRlbmRlbmN5CmluIGEgbnVtYmVyIG9mIHdheXMuIE1ha2UgaXMgbm90IGdv
b2QgYXQgZGVhbGluZyB3aXRoIHN5c3RlbXMgdGhhdCBhcmUKc3ByZWFkIG92ZXIgbXVsdGlw
bGUgZGlyZWN0b3JpZXMuIFZhcmlvdXMgd29yay1hcm91bmRzIGFyZSB1c2VkIHRvIG92ZXJj
b21lCnRoaXMgZGlmZmljdWx0eTsgdGhlIHVzdWFsIGNob2ljZSBpcyBmb3IgbWFrZSB0byBp
bnZva2UgaXRzZWxmIHJlY3Vyc2l2ZWx5CmZvciBlYWNoIHN1Yi1kaXJlY3Rvcnkgb2YgYSBi
dWlsZC4gVGhpcyBsZWFkcyB0byBjb21wbGljYXRlZCBjb2RlLCBpbiB3aGljaAppdCBpcyBv
ZnRlbiB1bmNsZWFyIGhvdyBhIHZhcmlhYmxlIGlzIHNldCwgb3Igd2hhdCBlZmZlY3QgdGhl
IHNldHRpbmcgb2YgYQp2YXJpYWJsZSB3aWxsIGhhdmUgb24gdGhlIGJ1aWxkIGFzIGEgd2hv
bGUuIFRoZSBtYWtlIHNjcmlwdGluZyBsYW5ndWFnZSBoYXMKZ3JhZHVhbGx5IGJlZW4gZXh0
ZW5kZWQgdG8gcHJvdmlkZSBtb3JlIHBvc3NpYmlsaXRpZXMsIGJ1dCB0aGVzZSBoYXZlCmxh
cmdlbHkgc2VydmVkIHRvIGNsdXR0ZXIgYW4gYWxyZWFkeSBvdmVyZXh0ZW5kZWQgbGFuZ3Vh
Z2UuIE9mdGVuLCBidWlsZHMKYXJlIGRvbmUgaW4gbXVsdGlwbGUgcGFzc2VzIGluIG9yZGVy
IHRvIHByb3ZpZGUgYXBwcm9wcmlhdGUgcHJvZHVjdHMgZnJvbQpvbmUgZGlyZWN0b3J5IHRv
IGFub3RoZXIgZGlyZWN0b3J5LiBUaGlzIHJlcHJlc2VudHMgYSBmdXJ0aGVyIGluY3JlYXNl
IGluCmJ1aWxkIGNvbXBsZXhpdHkuCgoKPWhlYWQyIEJ1aWxkIHJlcHJvZHVjaWJpbGl0eQoK
VGhlIGJhbmUgb2YgYWxsIG1ha2VzIGhhcyBhbHdheXMgYmVlbiB0aGUgY29ycmVjdCBoYW5k
bGluZyBvZgpkZXBlbmRlbmNpZXMuIE1vc3Qgb2Z0ZW4sIGFuIGF0dGVtcHQgaXMgbWFkZSB0
byBkbyBhIHJlYXNvbmFibGUgam9iIG9mCmRlcGVuZGVuY2llcyB3aXRoaW4gYSBzaW5nbGUg
ZGlyZWN0b3J5LCBidXQgbm8gc2VyaW91cyBhdHRlbXB0IGlzIG1hZGUgdG8gZG8KdGhlIGpv
YiBiZXR3ZWVuIGRpcmVjdG9yaWVzLiBFdmVuIHdoZW4gZGVwZW5kZW5jaWVzIGFyZSB3b3Jr
aW5nIGNvcnJlY3RseSwKbWFrZSdzIHJlbGlhbmNlIG9uIGEgc2ltcGxlIHRpbWUgc3RhbXAg
Y29tcGFyaXNvbiB0byBkZXRlcm1pbmUgd2hldGhlciBhCmZpbGUgaXMgb3V0IG9mIGRhdGUg
d2l0aCByZXNwZWN0IHRvIGl0cyBkZXBlbmRlbnRzIGlzIG5vdCwgaW4gZ2VuZXJhbCwKYWRl
cXVhdGUgZm9yIGRldGVybWluaW5nIHdoZW4gYSBmaWxlIHNob3VsZCBiZSByZWRlcml2ZWQu
IElmIGFuIGV4dGVybmFsCmxpYnJhcnksIGZvciBleGFtcGxlLCBpcyByZWJ1aWx0IGFuZCB0
aGVuIGBgc25hcHBlZCcnIGludG8gcGxhY2UsIHRoZQp0aW1lc3RhbXBzIG9uIGl0cyBuZXds
eSBjcmVhdGVkIGZpbGVzIG1heSB3ZWxsIGJlIGVhcmxpZXIgdGhhbiB0aGUgbGFzdApsb2Nh
bCBidWlsZCwgc2luY2UgaXQgd2FzIGJ1aWx0IGJlZm9yZSBpdCBiZWNhbWUgdmlzaWJsZS4K
Cgo9aGVhZDIgVmFyaWFudCBidWlsZHMKCk1ha2UgcHJvdmlkZXMgb25seSBsaW1pdGVkIGZh
Y2lsaXRpZXMgZm9yIGhhbmRsaW5nIHZhcmlhbnQgYnVpbGRzLiBXaXRoIHRoZQpwcm9saWZl
cmF0aW9uIG9mIGhhcmR3YXJlIHBsYXRmb3JtcyBhbmQgdGhlIG5lZWQgZm9yIGRlYnVnZ2Fi
bGUKdnMuIG9wdGltaXplZCBjb2RlLCB0aGUgYWJpbGl0eSB0byBlYXNpbHkgY3JlYXRlIHRo
ZXNlIHZhcmlhbnRzIGlzCmVzc2VudGlhbC4gTW9yZSBpbXBvcnRhbnRseSwgaWYgdmFyaWFu
dHMgYXJlIGNyZWF0ZWQsIGl0IGlzIGltcG9ydGFudCB0bwplaXRoZXIgYmUgYWJsZSB0byBz
ZXBhcmF0ZSB0aGUgdmFyaWFudHMgb3IgdG8gYmUgYWJsZSB0byByZXByb2R1Y2UgdGhlCm9y
aWdpbmFsIG9yIHZhcmlhbnQgYXQgd2lsbC4gV2l0aCBtYWtlIGl0IGlzIHZlcnkgZGlmZmlj
dWx0IHRvIHNlcGFyYXRlIHRoZQpidWlsZHMgaW50byBtdWx0aXBsZSBidWlsZCBkaXJlY3Rv
cmllcywgc2VwYXJhdGUgZnJvbSB0aGUgc291cmNlLiBBbmQgaWYKdGhpcyB0ZWNobmlxdWUg
aXNuJ3QgdXNlZCwgaXQncyBhbHNvIHZpcnR1YWxseSBpbXBvc3NpYmxlIHRvIGd1YXJhbnRl
ZSBhdAphbnkgZ2l2ZW4gdGltZSB3aGljaCB2YXJpYW50IGlzIHByZXNlbnQgaW4gdGhlIHRy
ZWUsIHdpdGhvdXQgcmVzb3J0aW5nIHRvIGEKY29tcGxldGUgcmVidWlsZC4KCgo9aGVhZDIg
UmVwb3NpdG9yaWVzCgpNYWtlIHByb3ZpZGVzIG9ubHkgbGltaXRlZCBzdXBwb3J0IGZvciBi
dWlsZGluZyBzb2Z0d2FyZSBmcm9tIGNvZGUgdGhhdApleGlzdHMgaW4gYSBjZW50cmFsIHJl
cG9zaXRvcnkgZGlyZWN0b3J5IHN0cnVjdHVyZS4gIFRoZSBWUEFUSCBmZWF0dXJlIG9mCkdO
VSBtYWtlIChhbmQgc29tZSBvdGhlciBtYWtlIGltcGxlbWVudGF0aW9ucykgaXMgaW50ZW5k
ZWQgdG8gcHJvdmlkZSB0aGlzLApidXQgZG9lc24ndCB3b3JrIGFzIGV4cGVjdGVkOiBpdCBj
aGFuZ2VzIHRoZSBwYXRoIG9mIHRhcmdldCBmaWxlIHRvIHRoZQpWUEFUSCBuYW1lIHRvbyBl
YXJseSBpbiBpdHMgYW5hbHlzaXMsIGFuZCB0aGVyZWZvcmUgc2VhcmNoZXMgZm9yIGFsbApk
ZXBlbmRlbmNpZXMgaW4gdGhlIFZQQVRIIGRpcmVjdG9yeS4gIFRvIGVuc3VyZSBjb3JyZWN0
IGRldmVsb3BtZW50IGJ1aWxkcywKaXQgaXMgaW1wb3J0YW50IHRvIGJlIGFibGUgdG8gY3Jl
YXRlIGEgZmlsZSBpbiBhIGxvY2FsIGJ1aWxkIGRpcmVjdG9yeSBhbmQKaGF2ZSBhbnkgZmls
ZXMgaW4gYSBjb2RlIHJlcG9zaXRvcnkgKGEgVlBBVEggZGlyZWN0b3J5LCBpbiBtYWtlIHRl
cm1zKSB0aGF0CmRlcGVuZCBvbiB0aGUgbG9jYWwgZmlsZSBnZXQgcmVidWlsdCBwcm9wZXJs
eS4gIFRoaXMgaXNuJ3QgcG9zc2libGUgd2l0aApWUEFUSCwgd2l0aG91dCBjb2RpbmcgYSBs
b3Qgb2YgY29tcGxleCByZXBvc2l0b3J5IGtub3dsZWRnZSBkaXJlY3RseSBpbnRvCnRoZSBt
YWtlZmlsZXMuCgoKPWhlYWQxIEtlZXBpbmcgaXQgc2ltcGxlCgpBIGZldyBvZiB0aGUgZGlm
ZmljdWx0aWVzIHdpdGggbWFrZSBoYXZlIGJlZW4gY2l0ZWQgYWJvdmUuIEluIHRoaXMgYW5k
CnN1YnNlcXVlbnQgc2VjdGlvbnMsIHdlIHNoYWxsIGludHJvZHVjZSBDb25zIGFuZCBzaG93
IGhvdyB0aGVzZSBpc3N1ZXMgYXJlCmFkZHJlc3NlZC4KCj1oZWFkMiBQZXJsIHNjcmlwdHMK
CkNvbnMgaXMgUGVybC1iYXNlZC4gVGhhdCBpcywgQ29ucyBzY3JpcHRzLS1GPENvbnNjcmlw
dD4gYW5kIEY8Q29uc3RydWN0PgpmaWxlcywgdGhlIGVxdWl2YWxlbnQgdG8gRjxNYWtlZmls
ZT4gb3IgRjxtYWtlZmlsZT4tLWFyZSBhbGwgd3JpdHRlbiBpbgpQZXJsLiBUaGlzIHByb3Zp
ZGVzIGFuIGltbWVkaWF0ZSBiZW5lZml0OiB0aGUgbGFuZ3VhZ2UgZm9yIHdyaXRpbmcgc2Ny
aXB0cwppcyBhIGZhbWlsaWFyIG9uZS4gRXZlbiBpZiB5b3UgZG9uJ3QgaGFwcGVuIHRvIGJl
IGEgUGVybCBwcm9ncmFtbWVyLCBpdApoZWxwcyB0byBrbm93IHRoYXQgUGVybCBpcyBiYXNp
Y2FsbHkganVzdCBhIHNpbXBsZSBkZWNsYXJhdGl2ZSBsYW5ndWFnZSwKd2l0aCBhIHdlbGwt
ZGVmaW5lZCBmbG93IG9mIGNvbnRyb2wsIGFuZCBmYW1pbGlhciBzZW1hbnRpY3MuIEl0IGhh
cwp2YXJpYWJsZXMgdGhhdCBiZWhhdmUgYmFzaWNhbGx5IHRoZSB3YXkgeW91IHdvdWxkIGV4
cGVjdCB0aGVtIHRvLApzdWJyb3V0aW5lcywgZmxvdyBvZiBjb250cm9sLCBhbmQgc28gb24u
IFRoZXJlIGlzIG5vIHNwZWNpYWwgc3ludGF4CmludHJvZHVjZWQgZm9yIENvbnMuIFRoZSB1
c2Ugb2YgUGVybCBhcyBhIHNjcmlwdGluZyBsYW5ndWFnZSBzaW1wbGlmaWVzCnRoZSB0YXNr
IG9mIGV4cHJlc3NpbmcgdGhlIGFwcHJvcHJpYXRlIHNvbHV0aW9uIHRvIHRoZSBvZnRlbiBj
b21wbGV4CnJlcXVpcmVtZW50cyBvZiBhIGJ1aWxkLgoKCj1oZWFkMiBIZWxsbywgV29ybGQh
CgpUbyBncm91bmQgdGhlIGZvbGxvd2luZyBkaXNjdXNzaW9uLCBoZXJlJ3MgaG93IHlvdSBj
b3VsZCBidWlsZCB0aGUgQjxIZWxsbywKV29ybGQhPiBDIGFwcGxpY2F0aW9uIHdpdGggQ29u
czoKCgoKICAkZW52ID0gbmV3IGNvbnMoKTsKICBQcm9ncmFtICRlbnYgJ2hlbGxvJywgJ2hl
bGxvLmMnOwoKSWYgeW91IGluc3RhbGwgdGhpcyBzY3JpcHQgaW4gYSBkaXJlY3RvcnksIG5h
bWluZyB0aGUgc2NyaXB0IEY8Q29uc3RydWN0PiwKYW5kIGNyZWF0ZSB0aGUgRjxoZWxsby5j
PiBzb3VyY2UgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnksIHRoZW4geW91IGNhbgp0eXBl
IEM8Y29ucyBoZWxsbz4gdG8gYnVpbGQgdGhlIGFwcGxpY2F0aW9uOgoKCgogICUgY29ucyBo
ZWxsbwogIGNjIC1jIGhlbGxvLmMgLW8gaGVsbG8ubwogIGNjIC1vIGhlbGxvIGhlbGxvLm8K
Cgo9aGVhZDIgQ29uc3RydWN0aW9uIGVudmlyb25tZW50cwoKQSBrZXkgc2ltcGxpZmljYXRp
b24gb2YgQ29ucyBpcyB0aGUgaWRlYSBvZiBhIEI8Y29uc3RydWN0aW9uIGVudmlyb25tZW50
Pi4gQQpjb25zdHJ1Y3Rpb24gZW52aXJvbm1lbnQgaXMgYW4gQjxvYmplY3Q+IGNoYXJhY3Rl
cml6ZWQgYnkgYSBzZXQgb2Yga2V5L3ZhbHVlCnBhaXJzIGFuZCBhIHNldCBvZiBCPG1ldGhv
ZHMuID5JbiBvcmRlciB0byB0ZWxsIENvbnMgaG93IHRvIGJ1aWxkIHNvbWV0aGluZywKeW91
IGludm9rZSB0aGUgYXBwcm9wcmlhdGUgbWV0aG9kIHZpYSBhbiBhcHByb3ByaWF0ZSBjb25z
dHJ1Y3Rpb24KZW52aXJvbm1lbnQuIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgZXhhbXBsZToK
CgoKICAkZW52ID0gbmV3IGNvbnMoCglDQwk9PgknZ2NjJywKCUxJQlMJPT4JJ2xpYndvcmxk
LmEnCiAgKTsKCiAgUHJvZ3JhbSAkZW52ICdoZWxsbycsICdoZWxsby5jJzsKCkluIHRoaXMg
Y2FzZSwgcmF0aGVyIHRoYW4gdXNpbmcgdGhlIGRlZmF1bHQgY29uc3RydWN0aW9uIGVudmly
b25tZW50LCBhcyBpcywKd2UgaGF2ZSBvdmVycmlkZGVuIHRoZSB2YWx1ZSBvZiBDPENDPiBz
byB0aGF0IHRoZSBHTlUgQyBDb21waWxlciBlcXVpdmFsZW50CmlzIHVzZWQsIGluc3RlYWQu
IFNpbmNlIHRoaXMgdmVyc2lvbiBvZiBCPEhlbGxvLCBXb3JsZCE+IHJlcXVpcmVzIGEgbGli
cmFyeSwKRjxsaWJ3b3JsZC5hPiwgd2UgaGF2ZSBzcGVjaWZpZWQgdGhhdCBhbnkgcHJvZ3Jh
bSBsaW5rZWQgaW4gdGhpcyBlbnZpcm9ubWVudApzaG91bGQgYmUgbGlua2VkIHdpdGggdGhh
dCBsaWJyYXJ5LiBJZiB0aGUgbGlicmFyeSBleGlzdHMgYWxyZWFkeSwgd2VsbCBhbmQKZ29v
ZCwgYnV0IGlmIG5vdCwgdGhlbiB3ZSdsbCBhbHNvIGhhdmUgdG8gaW5jbHVkZSB0aGUgc3Rh
dGVtZW50OgoKCgogIExpYnJhcnkgJGVudiAnbGlid29ybGQnLCAnd29ybGQuYyc7CgpOb3cg
aWYgeW91IHR5cGUgQzxjb25zIGhlbGxvPiwgdGhlIGxpYnJhcnkgd2lsbCBiZSBidWlsdCBi
ZWZvcmUgdGhlIHByb2dyYW0KaXMgbGlua2VkLCBhbmQsIG9mIGNvdXJzZSwgQzxnY2M+IHdp
bGwgYmUgdXNlZCB0byBjb21waWxlIGJvdGggbW9kdWxlczoKCgoKICAlIGNvbnMgaGVsbG8K
ICBnY2MgLWMgaGVsbG8uYyAtbyBoZWxsby5vCiAgZ2NjIC1jIHdvcmxkLmMgLW8gd29ybGQu
bwogIGFyIHIgbGlid29ybGQuYSB3b3JsZC5vCiAgYXI6IGNyZWF0aW5nIGxpYndvcmxkLmEK
ICByYW5saWIgbGlid29ybGQuYQogIGdjYyAtbyBoZWxsbyBoZWxsby5vIGxpYndvcmxkLmEK
Cgo9aGVhZDIgQXV0b21hdGljIGFuZCBjb21wbGV0ZSBkZXBlbmRlbmN5IGFuYWx5c2lzCgpX
aXRoIENvbnMsIGRlcGVuZGVuY2llcyBhcmUgaGFuZGxlZCBhdXRvbWF0aWNhbGx5LiBDb250
aW51aW5nIHRoZSBwcmV2aW91cwpleGFtcGxlLCBub3RlIHRoYXQgd2hlbiB3ZSBtb2RpZnkg
Rjx3b3JsZC5jPiwgRjx3b3JsZC5vPiBpcyByZWNvbXBpbGVkLApGPGxpYndvcmxkLmE+IHJl
Y3JlYXRlZCwgYW5kIEY8aGVsbG8+IHJlbGlua2VkOgoKCgogICUgdmkgd29ybGQuYwogICAg
W0VESVRdCiAgJSBjb25zIGhlbGxvCiAgZ2NjIC1jIHdvcmxkLmMgLW8gd29ybGQubwogIGFy
IHIgbGlid29ybGQuYSB3b3JsZC5vCiAgYXI6IGNyZWF0aW5nIGxpYndvcmxkLmEKICByYW5s
aWIgbGlid29ybGQuYQogIGdjYyAtbyBoZWxsbyBoZWxsby5vIGxpYndvcmxkLmEKClRoaXMg
aXMgYSByZWxhdGl2ZWx5IHNpbXBsZSBleGFtcGxlOiBDb25zIGBga25vd3MnJyBGPHdvcmxk
Lm8+IGRlcGVuZHMgdXBvbgpGPHdvcmxkLmM+LCBiZWNhdXNlIHRoZSBkZXBlbmRlbmN5IGlz
IGV4cGxpY2l0bHkgc2V0IHVwIGJ5IHRoZSBDPExpYnJhcnk+Cm1ldGhvZC4gSXQgYWxzbyBr
bm93cyB0aGF0IEY8bGlid29ybGQuYT4gZGVwZW5kcyB1cG9uIEY8d29ybGQubz4gYW5kIHRo
YXQKRjxoZWxsbz4gZGVwZW5kcyB1cG9uIEY8bGlid29ybGQuYT4sIGFsbCBmb3Igc2ltaWxh
ciByZWFzb25zLgoKTm93IGl0IHR1cm5zIG91dCB0aGF0IEY8aGVsbG8uYz4gYWxzbyBpbmNs
dWRlcyB0aGUgaW50ZXJmYWNlIGRlZmluaXRpb24KZmlsZSwgRjx3b3JsZC5oPjoKCgoKICAl
IGVtYWNzIHdvcmxkLmgKICAgIFtFRElUXQogICUgY29ucyBoZWxsbwogIGdjYyAtYyBoZWxs
by5jIC1vIGhlbGxvLm8KICBnY2MgLW8gaGVsbG8gaGVsbG8ubyBsaWJ3b3JsZC5hCgpIb3cg
ZG9lcyBDb25zIGtub3cgdGhhdCBGPGhlbGxvLmM+IGluY2x1ZGVzIEY8d29ybGQuaD4sIGFu
ZCB0aGF0IEY8aGVsbG8ubz4KbXVzdCB0aGVyZWZvcmUgYmUgcmVjb21waWxlZD8gRm9yIG5v
dywgc3VmZmljZSBpdCB0byBzYXkgdGhhdCB3aGVuCmNvbnNpZGVyaW5nIHdoZXRoZXIgb3Ig
bm90IEY8aGVsbG8ubz4gaXMgdXAtdG8tZGF0ZSwgQ29ucyBpbnZva2VzIGEgc2Nhbm5lcgpm
b3IgaXRzIGRlcGVuZGVuY3ksIEY8aGVsbG8uYz4uIFRoaXMgc2Nhbm5lciBlbnVtZXJhdGVz
IHRoZSBmaWxlcyBpbmNsdWRlZApieSBGPGhlbGxvLmM+IHRvIGNvbWUgdXAgd2l0aCBhIGxp
c3Qgb2YgZnVydGhlciBkZXBlbmRlbmNpZXMsIGJleW9uZCB0aG9zZQptYWRlIGV4cGxpY2l0
IGJ5IHRoZSBDb25zIHNjcmlwdC4gVGhpcyBwcm9jZXNzIGlzIHJlY3Vyc2l2ZTogYW55IGZp
bGVzCmluY2x1ZGVkIGJ5IGluY2x1ZGVkIGZpbGVzIHdpbGwgYWxzbyBiZSBzY2FubmVkLgoK
SXNuJ3QgdGhpcyBleHBlbnNpdmU/IFRoZSBhbnN3ZXIgaXMtLWl0IGRlcGVuZHMuIElmIHlv
dSBkbyBhIGZ1bGwgYnVpbGQgb2YgYQpsYXJnZSBzeXN0ZW0sIHRoZSBzY2FubmluZyB0aW1l
IGlzIGluc2lnbmlmaWNhbnQuIElmIHlvdSBkbyBhIHJlYnVpbGQgb2YgYQpsYXJnZSBzeXN0
ZW0sIHRoZW4gQ29ucyB3aWxsIHNwZW5kIGEgZmFpciBhbW91bnQgb2YgdGltZSB0aGlua2lu
ZyBhYm91dCBpdApiZWZvcmUgaXQgZGVjaWRlcyB0aGF0IG5vdGhpbmcgaGFzIHRvIGJlIGRv
bmUgKGFsdGhvdWdoIG5vdCBuZWNlc3NhcmlseSBtb3JlCnRpbWUgdGhhbiBtYWtlISkuIFRo
ZSBnb29kIG5ld3MgaXMgdGhhdCBDb25zIG1ha2VzIGl0IHZlcnkgZWFzeSB0bwppbnRlbGxp
Z2VudGx5IHN1YnNldCB5b3VyIGJ1aWxkLCB3aGVuIHlvdSBhcmUgd29ya2luZyBvbiBsb2Nh
bGl6ZWQgY2hhbmdlcy4KCgo9aGVhZDIgQXV0b21hdGljIGdsb2JhbCBidWlsZCBzZXF1ZW5j
aW5nCgpCZWNhdXNlIENvbnMgZG9lcyBmdWxsIGFuZCBhY2N1cmF0ZSBkZXBlbmRlbmN5IGFu
YWx5c2lzLCBhbmQgZG9lcyB0aGlzCmdsb2JhbGx5LCBmb3IgdGhlIGVudGlyZSBidWlsZCwg
Q29ucyBpcyBhYmxlIHRvIHVzZSB0aGlzIGluZm9ybWF0aW9uIHRvIHRha2UKZnVsbCBjb250
cm9sIG9mIHRoZSBCPHNlcXVlbmNpbmc+IG9mIHRoZSBidWlsZC4gVGhpcyBzZXF1ZW5jaW5n
IGlzIGV2aWRlbnQKaW4gdGhlIGFib3ZlIGV4YW1wbGVzLCBhbmQgaXMgZXF1aXZhbGVudCB0
byB3aGF0IHlvdSB3b3VsZCBleHBlY3QgZm9yIG1ha2UsCmdpdmVuIGEgZnVsbCBzZXQgb2Yg
ZGVwZW5kZW5jaWVzLiBXaXRoIENvbnMsIHRoaXMgZXh0ZW5kcyB0cml2aWFsbHkgdG8KbGFy
Z2VyLCBtdWx0aS1kaXJlY3RvcnkgYnVpbGRzLiBBcyBhIHJlc3VsdCwgYWxsIG9mIHRoZSBj
b21wbGV4aXR5IGludm9sdmVkCmluIG1ha2luZyBzdXJlIHRoYXQgYSBidWlsZCBpcyBvcmdh
bml6ZWQgY29ycmVjdGx5LS1pbmNsdWRpbmcgbXVsdGktcGFzcwpoaWVyYXJjaGljYWwgYnVp
bGRzLS1pcyBlbGltaW5hdGVkLiBXZSdsbCBkaXNjdXNzIHRoaXMgZnVydGhlciBpbiB0aGUg
bmV4dApzZWN0aW9ucy4KCj1oZWFkMSBCdWlsZGluZyBsYXJnZSB0cmVlcy0tc3RpbGwganVz
dCBhcyBzaW1wbGUKCgo9aGVhZDIgQSBoaWVyYXJjaHkgb2YgYnVpbGQgc2NyaXB0cwoKQSBs
YXJnZXIgYnVpbGQsIGluIENvbnMsIGlzIG9yZ2FuaXplZCBieSBjcmVhdGluZyBhIGhpZXJh
cmNoeSBvZiBCPGJ1aWxkCnNjcmlwdHM+LiBBdCB0aGUgdG9wIG9mIHRoZSB0cmVlIGlzIGEg
c2NyaXB0IGNhbGxlZCBGPENvbnN0cnVjdD4uIFRoZSByZXN0Cm9mIHRoZSBzY3JpcHRzLCBi
eSBjb252ZW50aW9uLCBhcmUgZWFjaCBjYWxsZWQgRjxDb25zY3JpcHQ+LiBUaGVzZSBzY3Jp
cHRzCmFyZSBjb25uZWN0ZWQgdG9nZXRoZXIsIHZlcnkgc2ltcGx5LCBieSB0aGUgQzxCdWls
ZD4sIEM8RXhwb3J0PiwgYW5kCkM8SW1wb3J0PiBjb21tYW5kcy4KCgo9aGVhZDIgVGhlIEJ1
aWxkIGNvbW1hbmQKClRoZSBDPEJ1aWxkPiBjb21tYW5kIHRha2VzIGEgbGlzdCBvZiBGPENv
bnNjcmlwdD4gZmlsZSBuYW1lcywgYW5kIGFycmFuZ2VzCmZvciB0aGVtIHRvIGJlIGluY2x1
ZGVkIGluIHRoZSBidWlsZC4gRm9yIGV4YW1wbGU6CgogIEJ1aWxkIHF3KAoJZHJpdmVycy9k
aXNwbGF5L0NvbnNjcmlwdAoJZHJpdmVycy9tb3VzZS9Db25zY3JpcHQKCXBhcnNlci9Db25z
Y3JpcHQKCXV0aWxpdGllcy9Db25zY3JpcHQKICApOwoKVGhpcyBpcyBhIHNpbXBsZSB0d28t
bGV2ZWwgaGllcmFyY2h5IG9mIGJ1aWxkIHNjcmlwdHM6IGFsbCB0aGUgc3Vic2lkaWFyeQpG
PENvbnNjcmlwdD4gZmlsZXMgYXJlIG1lbnRpb25lZCBpbiB0aGUgdG9wLWxldmVsIEY8Q29u
c3RydWN0PiBmaWxlLiBOb3RpY2UKdGhhdCBub3QgYWxsIGRpcmVjdG9yaWVzIGluIHRoZSB0
cmVlIG5lY2Vzc2FyaWx5IGhhdmUgYnVpbGQgc2NyaXB0cwphc3NvY2lhdGVkIHdpdGggdGhl
bS4KClRoaXMgY291bGQgYWxzbyBiZSB3cml0dGVuIGFzIGEgbXVsdGktbGV2ZWwgc2NyaXB0
LiBGb3IgZXhhbXBsZSwgdGhlCkY8Q29uc3RydWN0PiBmaWxlIG1pZ2h0IGNvbnRhaW4gdGhp
cyBjb21tYW5kOgoKICBCdWlsZCBxdygKCXBhcnNlci9Db25zY3JpcHQKCWRyaXZlcnMvQ29u
c2NyaXB0Cgl1dGlsaXRpZXMvQ29uc2NyaXB0CiAgKTsKCmFuZCB0aGUgRjxDb25zY3JpcHQ+
IGZpbGUgaW4gdGhlIEY8ZHJpdmVycz4gZGlyZWN0b3J5IG1pZ2h0IGNvbnRhaW4gdGhpczoK
CiAgQnVpbGQgcXcoCglkaXNwbGF5L0NvbnNjcmlwdAoJbW91c2UvQ29uc2NyaXB0CiAgKTsK
CkV4cGVyaWVuY2UgaGFzIHNob3duIHRoYXQgdGhlIGZvcm1lciBtb2RlbCBpcyBhIGxpdHRs
ZSBlYXNpZXIgdG8gdW5kZXJzdGFuZCwKc2luY2UgdGhlIHdob2xlIGNvbnN0cnVjdGlvbiB0
cmVlIGlzIGxhaWQgb3V0IGluIGZyb250IG9mIHlvdSwgYXQgdGhlCnRvcC1sZXZlbC4gSHli
cmlkIHNjaGVtZXMgYXJlIGFsc28gcG9zc2libGUuIEEgc2VwYXJhdGVseSBtYWludGFpbmVk
CmNvbXBvbmVudCB0aGF0IG5lZWRzIHRvIGJlIGluY29ycG9yYXRlZCBpbnRvIGEgYnVpbGQg
dHJlZSwgZm9yIGV4YW1wbGUsCm1pZ2h0IGhvb2sgaW50byB0aGUgYnVpbGQgdHJlZSBpbiBv
bmUgcGxhY2UsIGJ1dCBkZWZpbmUgaXRzIG93biBjb25zdHJ1Y3Rpb24KaGllcmFyY2h5LgoK
QnkgZGVmYXVsdCwgQ29ucyBkb2VzIG5vdCBjaGFuZ2UgaXRzIHdvcmtpbmcgZGlyZWN0b3J5
IHRvIHRoZSBkaXJlY3RvcnkKY29udGFpbmluZyBhIHN1YnNpZGlhcnkgRjxDb25zY3JpcHQ+
IGZpbGUgaXQgaXMgaW5jbHVkaW5nLiAgVGhpcyBiZWhhdmlvcgpjYW4gYmUgZW5hYmxlZCBm
b3IgYSBidWlsZCBieSBzcGVjaWZ5aW5nLCBpbiB0aGUgdG9wLWxldmVsIEY8Q29uc3RydWN0
PgpmaWxlOgoKICBDb25zY3JpcHRfY2hkaXIgMTsKCldoZW4gZW5hYmxlZCwgQ29ucyB3aWxs
IGNoYW5nZSB0byB0aGUgc3Vic2lkaWFyeSBGPENvbnNjcmlwdD4gZmlsZSdzCmNvbnRhaW5p
bmcgZGlyZWN0b3J5IHdoaWxlIHJlYWRpbmcgaW4gdGhhdCBmaWxlLCBhbmQgdGhlbiBjaGFu
Z2UgYmFjawp0byB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeSBvbmNlIHRoZSBmaWxlIGhhcyBi
ZWVuIHByb2Nlc3NlZC4KCkl0IGlzIGV4cGVjdGVkIHRoYXQgdGhpcyBiZWhhdmlvciB3aWxs
IGJlY29tZSB0aGUgZGVmYXVsdCBpbiBzb21lIGZ1dHVyZQp2ZXJzaW9uIG9mIENvbnMuICBU
byBwcmVwYXJlIGZvciB0aGlzIHRyYW5zaXRpb24sIGJ1aWxkcyB0aGF0IGV4cGVjdApDb25z
IHRvIHJlbWFpbiBhdCB0aGUgdG9wIG9mIHRoZSBidWlsZCB3aGlsZSBpdCByZWFkcyBpbiBh
IHN1YnNpZGlhcnkKRjxDb25zY3JpcHQ+IGZpbGUgc2hvdWxkIGV4cGxpY2l0bHkgZGlzYWJs
ZSB0aGlzIGZlYXR1cmUgYXMgZm9sbG93czoKCiAgQ29uc2NyaXB0X2NoZGlyIDA7CgoKPWhl
YWQyIFJlbGF0aXZlLCB0b3AtcmVsYXRpdmUsIGFuZCBhYnNvbHV0ZSBmaWxlIG5hbWVzCgpZ
b3UgbWF5IGhhdmUgbm90aWNlZCB0aGF0IHRoZSBmaWxlIG5hbWVzIHNwZWNpZmllZCB0byB0
aGUgQnVpbGQgY29tbWFuZCBhcmUKcmVsYXRpdmUgdG8gdGhlIGxvY2F0aW9uIG9mIHRoZSBz
Y3JpcHQgaXQgaXMgaW52b2tlZCBmcm9tLiBUaGlzIGlzIGdlbmVyYWxseQp0cnVlIGZvciBv
dGhlciBmaWxlbmFtZSBhcmd1bWVudHMgdG8gb3RoZXIgY29tbWFuZHMsIHRvbywgYWx0aG91
Z2ggd2UgbWlnaHQKYXMgd2VsbCBtZW50aW9uIGhlcmUgdGhhdCBpZiB5b3UgYmVnaW4gYSBm
aWxlIG5hbWUgd2l0aCBhIGhhc2ggbWFyaywgYGAjJycsCnRoZW4gdGhhdCBmaWxlIGlzIGlu
dGVycHJldGVkIHJlbGF0aXZlIHRvIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5ICh3aGVyZSB0
aGUKRjxDb25zdHJ1Y3Q+IGZpbGUgcmVzaWRlcykuIEFuZCwgbm90IHN1cnByaXNpbmdseSwg
aWYgeW91IGJlZ2luIGl0IHdpdGggYGAvJycsCnRoZW4gaXQgaXMgY29uc2lkZXJlZCB0byBi
ZSBhbiBhYnNvbHV0ZSBwYXRobmFtZS4gVGhpcyBpcyB0cnVlIGV2ZW4gb24Kc3lzdGVtcyB3
aGljaCB1c2UgYSBiYWNrIHNsYXNoIHJhdGhlciB0aGFuIGEgZm9yd2FyZCBzbGFzaCB0byBu
YW1lIGFic29sdXRlCnBhdGhzLgoKCj1oZWFkMiBVc2luZyBtb2R1bGVzIGluIGJ1aWxkIHNj
cmlwdHMKCllvdSBtYXkgcHVsbCBtb2R1bGVzIGludG8gZWFjaCBGPENvbnNjcmlwdD4gZmls
ZSB1c2luZyB0aGUgbm9ybWFsIFBlcmwKQzx1c2U+IG9yIEM8cmVxdWlyZT4gc3RhdGVtZW50
czoKCiAgdXNlIEVuZ2xpc2g7CiAgcmVxdWlyZSBNeTo6TW9kdWxlOwoKRWFjaCBDPHVzZT4g
b3IgQzxyZXF1aXJlPiBvbmx5IGFmZmVjdHMgdGhlIG9uZSBGPENvbnNjcmlwdD4gZmlsZSBp
biB3aGljaAppdCBhcHBlYXJzLiAgVG8gdXNlIGEgbW9kdWxlIGluIG11bHRpcGxlIEY8Q29u
c2NyaXB0PiBmaWxlcywgeW91IG11c3QKcHV0IGEgQzx1c2U+IG9yIEM8cmVxdWlyZT4gc3Rh
dGVtZW50IGluIGVhY2ggb25lIHRoYXQgbmVlZHMgdGhlIG1vZHVsZS4KCgo9aGVhZDIgU2Nv
cGUgb2YgdmFyaWFibGVzCgpUaGUgdG9wLWxldmVsIEY8Q29uc3RydWN0PiBmaWxlIGFuZCBh
bGwgRjxDb25zY3JpcHQ+IGZpbGVzIGJlZ2luIGxpZmUgaW4KYSBjb21tb24sIHNlcGFyYXRl
IFBlcmwgcGFja2FnZS4gIEI8Q29ucz4gY29udHJvbHMgdGhlIHN5bWJvbCB0YWJsZSBmb3IK
dGhlIHBhY2thZ2Ugc28gdGhhdCwgdGhlIHN5bWJvbCB0YWJsZSBmb3IgZWFjaCBzY3JpcHQg
aXMgZW1wdHksIGV4Y2VwdApmb3IgdGhlIEY8Q29uc3RydWN0PiBmaWxlLCB3aGljaCBnZXRz
IHNvbWUgb2YgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCkFsbCBvZiB0aGUgdmFyaWFi
bGVzIHRoYXQgYXJlIHNldCBvciB1c2VkLCB0aGVyZWZvcmUsIGFyZSBzZXQgYnkgdGhlCnNj
cmlwdCBpdHNlbGYtLW5vdCBieSBzb21lIGV4dGVybmFsIHNjcmlwdC4KClZhcmlhYmxlcyBj
YW4gYmUgZXhwbGljaXRseSBCPGltcG9ydGVkPiBieSBhIHNjcmlwdCBmcm9tIGl0cyBwYXJl
bnQKc2NyaXB0LiBUbyBpbXBvcnQgYSB2YXJpYWJsZSwgaXQgbXVzdCBoYXZlIGJlZW4gQjxl
eHBvcnRlZD4gYnkgdGhlIHBhcmVudAphbmQgaW5pdGlhbGl6ZWQgKG90aGVyd2lzZSBhbiBl
cnJvciB3aWxsIG9jY3VyKS4KCgo9aGVhZDIgVGhlIEV4cG9ydCBjb21tYW5kCgpUaGUgQzxF
eHBvcnQ+IGNvbW1hbmQgaXMgdXNlZCBhcyBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGU6Cgog
ICRlbnYgPSBuZXcgY29ucygpOwogICRJTkNMVURFID0gIiNleHBvcnQvaW5jbHVkZSI7CiAg
JExJQiA9ICIjZXhwb3J0L2xpYiI7CiAgRXhwb3J0IHF3KCBlbnYgSU5DTFVERSBMSUIgKTsK
ICBCdWlsZCBxdyggdXRpbC9Db25zY3JpcHQgKTsKClRoZSB2YWx1ZXMgb2YgdGhlIHNpbXBs
ZSB2YXJpYWJsZXMgbWVudGlvbmVkIGluIHRoZSBDPEV4cG9ydD4gbGlzdCB3aWxsIGJlCnNx
dWlycmVsZWQgYXdheSBieSBhbnkgc3Vic2VxdWVudCBDPEJ1aWxkPiBjb21tYW5kcy4gVGhl
IEM8RXhwb3J0PiBjb21tYW5kCndpbGwgb25seSBleHBvcnQgUGVybCBCPHNjYWxhcj4gdmFy
aWFibGVzLCB0aGF0IGlzLCB2YXJpYWJsZXMgd2hvc2UgbmFtZQpiZWdpbnMgd2l0aCBDPCQ+
LiBPdGhlciB2YXJpYWJsZXMsIG9iamVjdHMsIGV0Yy4gY2FuIGJlIGV4cG9ydGVkIGJ5CnJl
ZmVyZW5jZS0tYnV0IGFsbCBzY3JpcHRzIHdpbGwgcmVmZXIgdG8gdGhlIHNhbWUgb2JqZWN0
LCBhbmQgdGhpcyBvYmplY3QKc2hvdWxkIGJlIGNvbnNpZGVyZWQgdG8gYmUgcmVhZC1vbmx5
IGJ5IHRoZSBzdWJzaWRpYXJ5IHNjcmlwdHMgYW5kIGJ5IHRoZQpvcmlnaW5hbCBleHBvcnRp
bmcgc2NyaXB0LiBJdCdzIGFjY2VwdGFibGUsIGhvd2V2ZXIsIHRvIGFzc2lnbiBhIG5ldyB2
YWx1ZQp0byB0aGUgZXhwb3J0ZWQgc2NhbGFyIHZhcmlhYmxlLS10aGF0IHdvbid0IGNoYW5n
ZSB0aGUgdW5kZXJseWluZyB2YXJpYWJsZQpyZWZlcmVuY2VkLiBUaGlzIHNlcXVlbmNlLCBm
b3IgZXhhbXBsZSwgaXMgT0s6CgogICRlbnYgPSBuZXcgY29ucygpOwogIEV4cG9ydCBxdygg
ZW52IElOQ0xVREUgTElCICk7CiAgQnVpbGQgcXcoIHV0aWwvQ29uc2NyaXB0ICk7CiAgJGVu
diA9IG5ldyBjb25zKENGTEFHUyA9PiAnLU8nKTsKICBCdWlsZCBxdyggb3RoZXIvQ29uc2Ny
aXB0ICk7CgpJdCBkb2Vzbid0IG1hdHRlciB3aGV0aGVyIHRoZSB2YXJpYWJsZSBpcyBzZXQg
YmVmb3JlIG9yIGFmdGVyIHRoZSBDPEV4cG9ydD4KY29tbWFuZC4gVGhlIGltcG9ydGFudCB0
aGluZyBpcyB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIGF0IHRoZSB0aW1lIHRoZQpDPEJ1
aWxkPiBjb21tYW5kIGlzIGV4ZWN1dGVkLiBUaGlzIGlzIHdoYXQgZ2V0cyBzcXVpcnJlbGVk
IGF3YXkuIEFueQpzdWJzZXF1ZW50IEM8RXhwb3J0PiBjb21tYW5kcywgYnkgdGhlIHdheSwg
aW52YWxpZGF0ZSB0aGUgZmlyc3Q6IHlvdSBtdXN0Cm1lbnRpb24gYWxsIHRoZSB2YXJpYWJs
ZXMgeW91IHdpc2ggdG8gZXhwb3J0IG9uIGVhY2ggQzxFeHBvcnQ+IGNvbW1hbmQuCgoKPWhl
YWQyIFRoZSBJbXBvcnQgY29tbWFuZAoKVmFyaWFibGVzIGV4cG9ydGVkIGJ5IHRoZSBDPEV4
cG9ydD4gY29tbWFuZCBjYW4gYmUgaW1wb3J0ZWQgaW50byBzdWJzaWRpYXJ5CnNjcmlwdHMg
YnkgdGhlIEM8SW1wb3J0PiBjb21tYW5kLiBUaGUgc3Vic2lkaWFyeSBzY3JpcHQgYWx3YXlz
IGltcG9ydHMKdmFyaWFibGVzIGRpcmVjdGx5IGZyb20gdGhlIHN1cGVyaW9yIHNjcmlwdC4g
Q29uc2lkZXIgdGhpcyBleGFtcGxlOgoKICBJbXBvcnQgcXcoIGVudiBJTkNMVURFICk7CgpU
aGlzIGlzIG9ubHkgbGVnYWwgaWYgdGhlIHBhcmVudCBzY3JpcHQgZXhwb3J0ZWQgYm90aCBD
PCRlbnY+IGFuZApDPCRJTkNMVURFPi4gSXQgYWxzbyBtdXN0IGhhdmUgZ2l2ZW4gZWFjaCBv
ZiB0aGVzZSB2YXJpYWJsZXMgdmFsdWVzLiBJdCBpcwpPSyBmb3IgdGhlIHN1YnNpZGlhcnkg
c2NyaXB0IHRvIG9ubHkgaW1wb3J0IGEgc3Vic2V0IG9mIHRoZSBleHBvcnRlZAp2YXJpYWJs
ZXMgKGluIHRoaXMgZXhhbXBsZSwgQzwkTElCPiwgd2hpY2ggd2FzIGV4cG9ydGVkIGJ5IHRo
ZSBwcmV2aW91cwpleGFtcGxlLCBpcyBub3QgaW1wb3J0ZWQpLgoKQWxsIHRoZSBpbXBvcnRl
ZCB2YXJpYWJsZXMgYXJlIGF1dG9tYXRpY2FsbHkgcmUtZXhwb3J0ZWQsIHNvIHRoZSBzZXF1
ZW5jZToKCiAgSW1wb3J0IHF3ICggZW52IElOQ0xVREUgKTsKICBCdWlsZCBxdyAoIGJlbmVh
dGgtbWUvQ29uc2NyaXB0ICk7Cgp3aWxsIHN1cHBseSBib3RoIEM8JGVudj4gYW5kIEM8JElO
Q0xVREU+IHRvIHRoZSBzdWJzaWRpYXJ5IGZpbGUuIElmIG9ubHkKQzwkZW52PiBpcyB0byBi
ZSBleHBvcnRlZCwgdGhlbiB0aGUgZm9sbG93aW5nIHdpbGwgc3VmZmljZToKCiAgSW1wb3J0
IHF3ICggZW52IElOQ0xVREUgKTsKICBFeHBvcnQgcXcgKCBlbnYgKTsKICBCdWlsZCBxdyAo
IGJlbmVhdGgtbWUvQ29uc2NyaXB0ICk7CgpOZWVkbGVzcyB0byBzYXksIHRoZSB2YXJpYWJs
ZXMgbWF5IGJlIG1vZGlmaWVkIGxvY2FsbHkgYmVmb3JlIGludm9raW5nCkM8QnVpbGQ+IG9u
IHRoZSBzdWJzaWRpYXJ5IHNjcmlwdC4KCgo9aGVhZDIgQnVpbGQgc2NyaXB0IGV2YWx1YXRp
b24gb3JkZXIKClRoZSBvbmx5IGNvbnN0cmFpbnQgb24gdGhlIG9yZGVyaW5nIG9mIGJ1aWxk
IHNjcmlwdHMgaXMgdGhhdCBzdXBlcmlvcgpzY3JpcHRzIGFyZSBldmFsdWF0ZWQgYmVmb3Jl
IHRoZWlyIGluZmVyaW9yIHNjcmlwdHMuIFRoZSB0b3AtbGV2ZWwKRjxDb25zdHJ1Y3Q+IGZp
bGUsIGZvciBpbnN0YW5jZSwgaXMgZXZhbHVhdGVkIGZpcnN0LCBmb2xsb3dlZCBieSBhbnkK
aW5mZXJpb3Igc2NyaXB0cy4gVGhpcyBpcyBhbGwgeW91IHJlYWxseSBuZWVkIHRvIGtub3cg
YWJvdXQgdGhlIGV2YWx1YXRpb24Kb3JkZXIsIHNpbmNlIG9yZGVyIGlzIGdlbmVyYWxseSBp
cnJlbGV2YW50LiBDb25zaWRlciB0aGUgZm9sbG93aW5nIEM8QnVpbGQ+CmNvbW1hbmQ6Cgog
IEJ1aWxkIHF3KAoJZHJpdmVycy9kaXNwbGF5L0NvbnNjcmlwdAoJZHJpdmVycy9tb3VzZS9D
b25zY3JpcHQKCXBhcnNlci9Db25zY3JpcHQKCXV0aWxpdGllcy9Db25zY3JpcHQKICApOwoK
V2UndmUgY2hvc2VuIHRvIHB1dCB0aGUgc2NyaXB0IG5hbWVzIGluIGFscGhhYmV0aWNhbCBv
cmRlciwgc2ltcGx5IGJlY2F1c2UKdGhhdCdzIHRoZSBtb3N0IGNvbnZlbmllbnQgZm9yIG1h
aW50ZW5hbmNlIHB1cnBvc2VzLiBDaGFuZ2luZyB0aGUgb3JkZXIgd2lsbAptYWtlIG5vIGRp
ZmZlcmVuY2UgdG8gdGhlIGJ1aWxkLgoKCj1oZWFkMSBBIE1vZGVsIGZvciBzaGFyaW5nIGZp
bGVzCgoKPWhlYWQyIFNvbWUgc2ltcGxlIGNvbnZlbnRpb25zCgpJbiBhbnkgY29tcGxleCBz
b2Z0d2FyZSBzeXN0ZW0sIGEgbWV0aG9kIGZvciBzaGFyaW5nIGJ1aWxkIHByb2R1Y3RzIG5l
ZWRzIHRvCmJlIGVzdGFibGlzaGVkLiBXZSBwcm9wb3NlIGEgc2ltcGxlIHNldCBvZiBjb252
ZW50aW9ucyB3aGljaCBhcmUgdHJpdmlhbCB0bwppbXBsZW1lbnQgd2l0aCBDb25zLCBidXQg
dmVyeSBlZmZlY3RpdmUuCgpUaGUgYmFzaWMgcnVsZSBpcyB0byByZXF1aXJlIHRoYXQgYWxs
IGJ1aWxkIHByb2R1Y3RzIHdoaWNoIG5lZWQgdG8gYmUgc2hhcmVkCmJldHdlZW4gZGlyZWN0
b3JpZXMgYXJlIHNoYXJlZCB2aWEgYW4gaW50ZXJtZWRpYXRlIGRpcmVjdG9yeS4gV2UgaGF2
ZQp0eXBpY2FsbHkgY2FsbGVkIHRoaXMgRjxleHBvcnQ+LCBhbmQsIGluIGEgQyBlbnZpcm9u
bWVudCwgcHJvdmlkZWQKY29udmVudGlvbmFsIHN1Yi1kaXJlY3RvcmllcyBvZiB0aGlzIGRp
cmVjdG9yeSwgc3VjaCBhcyBGPGluY2x1ZGU+LCBGPGxpYj4sCkY8YmluPiwgZXRjLgoKVGhl
c2UgZGlyZWN0b3JpZXMgYXJlIGRlZmluZWQgYnkgdGhlIHRvcC1sZXZlbCBGPENvbnN0cnVj
dD4gZmlsZS4gQSBzaW1wbGUKRjxDb25zdHJ1Y3Q+IGZpbGUgZm9yIGEgQjxIZWxsbywgV29y
bGQhPiBhcHBsaWNhdGlvbiwgb3JnYW5pemVkIHVzaW5nCm11bHRpcGxlIGRpcmVjdG9yaWVz
LCBtaWdodCBsb29rIGxpa2UgdGhpczoKCiAgIyBDb25zdHJ1Y3QgZmlsZSBmb3IgSGVsbG8s
IFdvcmxkIQoKICAjIFdoZXJlIHRvIHB1dCBhbGwgb3VyIHNoYXJlZCBwcm9kdWN0cy4KICAk
RVhQT1JUID0gJyNleHBvcnQnOwoKICBFeHBvcnQgcXcoIENPTlMgSU5DTFVERSBMSUIgQklO
ICk7CgogICMgU3RhbmRhcmQgZGlyZWN0b3JpZXMgZm9yIHNoYXJpbmcgcHJvZHVjdHMuCiAg
JElOQ0xVREUgPSAiJEVYUE9SVC9pbmNsdWRlIjsKICAkTElCID0gIiRFWFBPUlQvbGliIjsK
ICAkQklOID0gIiRFWFBPUlQvYmluIjsKCiAgIyBBIHN0YW5kYXJkIGNvbnN0cnVjdGlvbiBl
bnZpcm9ubWVudC4KICAkQ09OUyA9IG5ldyBjb25zICgKCUNQUFBBVEggPT4gJElOQ0xVREUs
CSMgSW5jbHVkZSBwYXRoIGZvciBDIENvbXBpbGF0aW9ucwoJTElCUEFUSCA9PiAkTElCLAkj
IExpYnJhcnkgcGF0aCBmb3IgbGlua2luZyBwcm9ncmFtcwoJTElCUyA9PiAnLWx3b3JsZCcs
CSMgTGlzdCBvZiBzdGFuZGFyZCBsaWJyYXJpZXMKICApOwoKICBCdWlsZCBxdygKCWhlbGxv
L0NvbnNjcmlwdAoJd29ybGQvQ29uc2NyaXB0CiAgKTsKClRoZSBGPHdvcmxkPiBkaXJlY3Rv
cnkncyBGPENvbnNjcmlwdD4gZmlsZSBsb29rcyBsaWtlIHRoaXM6CgogICMgQ29uc2NyaXB0
IGZpbGUgZm9yIGRpcmVjdG9yeSB3b3JsZAogIEltcG9ydCBxdyggQ09OUyBJTkNMVURFIExJ
QiApOwoKICAjIEluc3RhbGwgdGhlIHByb2R1Y3RzIG9mIHRoaXMgZGlyZWN0b3J5CiAgSW5z
dGFsbCAkQ09OUyAkTElCLCAnbGlid29ybGQuYSc7CiAgSW5zdGFsbCAkQ09OUyAkSU5DTFVE
RSwgJ3dvcmxkLmgnOwoKICAjIEludGVybmFsIHByb2R1Y3RzCiAgTGlicmFyeSAkQ09OUyAn
bGlid29ybGQuYScsICd3b3JsZC5jJzsKCmFuZCB0aGUgRjxoZWxsbz4gZGlyZWN0b3J5J3Mg
RjxDb25zY3JpcHQ+IGZpbGUgbG9va3MgbGlrZSB0aGlzOgoKICAjIENvbnNjcmlwdCBmaWxl
IGZvciBkaXJlY3RvcnkgaGVsbG8KICBJbXBvcnQgcXcoIENPTlMgQklOICk7CgogICMgRXhw
b3J0ZWQgcHJvZHVjdHMKICBJbnN0YWxsICRDT05TICRCSU4sICdoZWxsbyc7CgogICMgSW50
ZXJuYWwgcHJvZHVjdHMKICBQcm9ncmFtICRDT05TICdoZWxsbycsICdoZWxsby5jJzsKClRv
IGNvbnN0cnVjdCBhIEI8SGVsbG8sIFdvcmxkIT4gcHJvZ3JhbSB3aXRoIHRoaXMgZGlyZWN0
b3J5IHN0cnVjdHVyZSwgZ28gdG8KdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnksIGFuZCBpbnZv
a2UgQzxjb25zPiB3aXRoIHRoZSBhcHByb3ByaWF0ZQphcmd1bWVudHMuIEluIHRoZSBmb2xs
b3dpbmcgZXhhbXBsZSwgd2UgdGVsbCBDb25zIHRvIGJ1aWxkIHRoZSBkaXJlY3RvcnkKRjxl
eHBvcnQ+LiBUbyBidWlsZCBhIGRpcmVjdG9yeSwgQ29ucyByZWN1cnNpdmVseSBidWlsZHMg
YWxsIGtub3duIHByb2R1Y3RzCndpdGhpbiB0aGF0IGRpcmVjdG9yeSAob25seSBpZiB0aGV5
IG5lZWQgcmVidWlsZGluZywgb2YgY291cnNlKS4gSWYgYW55IG9mCnRob3NlIHByb2R1Y3Rz
IGRlcGVuZCB1cG9uIG90aGVyIHByb2R1Y3RzIGluIG90aGVyIGRpcmVjdG9yaWVzLCB0aGVu
IHRob3NlCndpbGwgYmUgYnVpbHQsIHRvby4KCiAgJSBjb25zIGV4cG9ydAogIEluc3RhbGwg
d29ybGQvd29ybGQuaCBhcyBleHBvcnQvaW5jbHVkZS93b3JsZC5oCiAgY2MgLUlleHBvcnQv
aW5jbHVkZSAtYyBoZWxsby9oZWxsby5jIC1vIGhlbGxvL2hlbGxvLm8KICBjYyAtSWV4cG9y
dC9pbmNsdWRlIC1jIHdvcmxkL3dvcmxkLmMgLW8gd29ybGQvd29ybGQubwogIGFyIHIgd29y
bGQvbGlid29ybGQuYSB3b3JsZC93b3JsZC5vCiAgYXI6IGNyZWF0aW5nIHdvcmxkL2xpYndv
cmxkLmEKICByYW5saWIgd29ybGQvbGlid29ybGQuYQogIEluc3RhbGwgd29ybGQvbGlid29y
bGQuYSBhcyBleHBvcnQvbGliL2xpYndvcmxkLmEKICBjYyAtbyBoZWxsby9oZWxsbyBoZWxs
by9oZWxsby5vIC1MZXhwb3J0L2xpYiAtbHdvcmxkCiAgSW5zdGFsbCBoZWxsby9oZWxsbyBh
cyBleHBvcnQvYmluL2hlbGxvCgoKPWhlYWQyIENsZWFuLCB1bmRlcnN0YW5kYWJsZSwgbG9j
YXRpb24taW5kZXBlbmRlbnQgc2NyaXB0cwoKWW91J2xsIG5vdGUgdGhhdCB0aGUgdHdvIEY8
Q29uc2NyaXB0PiBmaWxlcyBhcmUgdmVyeSBjbGVhbiBhbmQKdG8tdGhlLXBvaW50LiBUaGV5
IHNpbXBseSBzcGVjaWZ5IHByb2R1Y3RzIG9mIHRoZSBkaXJlY3RvcnkgYW5kIGhvdyB0byBi
dWlsZAp0aG9zZSBwcm9kdWN0cy4gVGhlIGJ1aWxkIGluc3RydWN0aW9ucyBhcmUgbWluaW1h
bDogdGhleSBzcGVjaWZ5IHdoaWNoCmNvbnN0cnVjdGlvbiBlbnZpcm9ubWVudCB0byB1c2Us
IHRoZSBuYW1lIG9mIHRoZSBwcm9kdWN0LCBhbmQgdGhlIG5hbWUgb2YKdGhlIGlucHV0cy4g
Tm90ZSBhbHNvIHRoYXQgdGhlIHNjcmlwdHMgYXJlIGxvY2F0aW9uLWluZGVwZW5kZW50OiBp
ZiB5b3Ugd2lzaAp0byByZW9yZ2FuaXplIHlvdXIgc291cmNlIHRyZWUsIHlvdSBhcmUgZnJl
ZSB0byBkbyBzbzogeW91IG9ubHkgaGF2ZSB0bwpjaGFuZ2UgdGhlIEY8Q29uc3RydWN0PiBm
aWxlIChpbiB0aGlzIGV4YW1wbGUpLCB0byBzcGVjaWZ5IHRoZSBuZXcgbG9jYXRpb25zCm9m
IHRoZSBGPENvbnNjcmlwdD4gZmlsZXMuIFRoZSB1c2Ugb2YgYW4gZXhwb3J0IHRyZWUgbWFr
ZXMgdGhpcyBnb2FsIGVhc3kuCgpOb3RlLCB0b28sIGhvdyBDb25zIHRha2VzIGNhcmUgb2Yg
bGl0dGxlIGRldGFpbHMgZm9yIHlvdS4gQWxsIHRoZSBGPGV4cG9ydD4KZGlyZWN0b3JpZXMs
IGZvciBleGFtcGxlLCB3ZXJlIG1hZGUgYXV0b21hdGljYWxseS4gQW5kIHRoZSBpbnN0YWxs
ZWQgZmlsZXMKd2VyZSByZWFsbHkgaGFyZC1saW5rZWQgaW50byB0aGUgcmVzcGVjdGl2ZSBl
eHBvcnQgZGlyZWN0b3JpZXMsIHRvIHNhdmUKc3BhY2UgYW5kIHRpbWUuIFRoaXMgYXR0ZW50
aW9uIHRvIGRldGFpbCBzYXZlcyBjb25zaWRlcmFibGUgd29yaywgYW5kIG1ha2VzCml0IGV2
ZW4gZWFzaWVyIHRvIHByb2R1Y2Ugc2ltcGxlLCBtYWludGFpbmFibGUgc2NyaXB0cy4KCgo9
aGVhZDEgU2VwYXJhdGluZyBzb3VyY2UgYW5kIGJ1aWxkIHRyZWVzCgpJdCdzIG9mdGVuIGRl
c2lyYWJsZSB0byBrZWVwIGFueSBkZXJpdmVkIGZpbGVzIGZyb20gdGhlIGJ1aWxkIGNvbXBs
ZXRlbHkKc2VwYXJhdGUgZnJvbSB0aGUgc291cmNlIGZpbGVzLiBUaGlzIG1ha2VzIGl0IG11
Y2ggZWFzaWVyIHRvIGtlZXAgdHJhY2sgb2YKanVzdCB3aGF0IGlzIGEgc291cmNlIGZpbGUs
IGFuZCBhbHNvIG1ha2VzIGl0IHNpbXBsZXIgdG8gaGFuZGxlIEI8dmFyaWFudD4KYnVpbGRz
LCBlc3BlY2lhbGx5IGlmIHlvdSB3YW50IHRoZSB2YXJpYW50IGJ1aWxkcyB0byBjby1leGlz
dC4KCgo9aGVhZDIgU2VwYXJhdGluZyBidWlsZCBhbmQgc291cmNlIGRpcmVjdG9yaWVzIHVz
aW5nIHRoZSBMaW5rIGNvbW1hbmQKCkNvbnMgcHJvdmlkZXMgYSBzaW1wbGUgbWVjaGFuaXNt
IHRoYXQgaGFuZGxlcyBhbGwgb2YgdGhlc2UgcmVxdWlyZW1lbnRzLiBUaGUKQzxMaW5rPiBj
b21tYW5kIGlzIGludm9rZWQgYXMgaW4gdGhpcyBleGFtcGxlOgoKICBMaW5rICdidWlsZCcg
PT4gJ3NyYyc7CgpUaGUgc3BlY2lmaWVkIGRpcmVjdG9yaWVzIGFyZSBgYGxpbmtlZCcnIHRv
IHRoZSBzcGVjaWZpZWQgc291cmNlCmRpcmVjdG9yeS4gTGV0J3Mgc3VwcG9zZSB0aGF0IHlv
dSBzZXR1cCBhIHNvdXJjZSBkaXJlY3RvcnksIEY8c3JjPiwgd2l0aCB0aGUKc3ViLWRpcmVj
dG9yaWVzIEY8d29ybGQ+IGFuZCBGPGhlbGxvPiBiZWxvdyBpdCwgYXMgaW4gdGhlIHByZXZp
b3VzCmV4YW1wbGUuIFlvdSBjb3VsZCB0aGVuIHN1YnN0aXR1dGUgZm9yIHRoZSBvcmlnaW5h
bCBidWlsZCBsaW5lcyB0aGUKZm9sbG93aW5nOgoKICBCdWlsZCBxdygKCWJ1aWxkL3dvcmxk
L0NvbnNjcmlwdAoJYnVpbGQvaGVsbG8vQ29uc2NyaXB0CiAgKTsKCk5vdGljZSB0aGF0IHlv
dSB0cmVhdCB0aGUgRjxDb25zY3JpcHQ+IGZpbGUgYXMgaWYgaXQgZXhpc3RlZCBpbiB0aGUg
YnVpbGQKZGlyZWN0b3J5LiBOb3cgaWYgeW91IHR5cGUgdGhlIHNhbWUgY29tbWFuZCBhcyBi
ZWZvcmUsIHlvdSB3aWxsIGdldCB0aGUKZm9sbG93aW5nIHJlc3VsdHM6CgogICUgY29ucyBl
eHBvcnQKICBJbnN0YWxsIGJ1aWxkL3dvcmxkL3dvcmxkLmggYXMgZXhwb3J0L2luY2x1ZGUv
d29ybGQuaAogIGNjIC1JZXhwb3J0L2luY2x1ZGUgLWMgYnVpbGQvaGVsbG8vaGVsbG8uYyAt
byBidWlsZC9oZWxsby9oZWxsby5vCiAgY2MgLUlleHBvcnQvaW5jbHVkZSAtYyBidWlsZC93
b3JsZC93b3JsZC5jIC1vIGJ1aWxkL3dvcmxkL3dvcmxkLm8KICBhciByIGJ1aWxkL3dvcmxk
L2xpYndvcmxkLmEgYnVpbGQvd29ybGQvd29ybGQubwogIGFyOiBjcmVhdGluZyBidWlsZC93
b3JsZC9saWJ3b3JsZC5hCiAgcmFubGliIGJ1aWxkL3dvcmxkL2xpYndvcmxkLmEKICBJbnN0
YWxsIGJ1aWxkL3dvcmxkL2xpYndvcmxkLmEgYXMgZXhwb3J0L2xpYi9saWJ3b3JsZC5hCiAg
Y2MgLW8gYnVpbGQvaGVsbG8vaGVsbG8gYnVpbGQvaGVsbG8vaGVsbG8ubyAtTGV4cG9ydC9s
aWIgLWx3b3JsZAogIEluc3RhbGwgYnVpbGQvaGVsbG8vaGVsbG8gYXMgZXhwb3J0L2Jpbi9o
ZWxsbwoKQWdhaW4sIENvbnMgaGFzIHRha2VuIGNhcmUgb2YgdGhlIGRldGFpbHMgZm9yIHlv
dS4gSW4gcGFydGljdWxhciwgeW91IHdpbGwKbm90aWNlIHRoYXQgYWxsIHRoZSBidWlsZHMg
YXJlIGRvbmUgdXNpbmcgc291cmNlIGZpbGVzIGFuZCBvYmplY3QgZmlsZXMgZnJvbQp0aGUg
YnVpbGQgZGlyZWN0b3J5LiBGb3IgZXhhbXBsZSwgRjxidWlsZC93b3JsZC93b3JsZC5vPiBp
cyBjb21waWxlZCBmcm9tCkY8YnVpbGQvd29ybGQvd29ybGQuYz4sIGFuZCBGPGV4cG9ydC9p
bmNsdWRlL3dvcmxkLmg+IGlzIGluc3RhbGxlZCBmcm9tCkY8YnVpbGQvd29ybGQvd29ybGQu
aD4uIFRoaXMgaXMgYWNjb21wbGlzaGVkIG9uIG1vc3Qgc3lzdGVtcyBieSB0aGUgc2ltcGxl
CmV4cGVkaWVudCBvZiBgYGhhcmQnJyBsaW5raW5nIHRoZSByZXF1aXJlZCBmaWxlcyBmcm9t
IGVhY2ggc291cmNlIGRpcmVjdG9yeQppbnRvIHRoZSBhcHByb3ByaWF0ZSBidWlsZCBkaXJl
Y3RvcnkuCgpUaGUgbGlua3MgYXJlIG1haW50YWluZWQgY29ycmVjdGx5IGJ5IENvbnMsIG5v
IG1hdHRlciB3aGF0IHlvdSBkbyB0byB0aGUKc291cmNlIGRpcmVjdG9yeS4gSWYgeW91IG1v
ZGlmeSBhIHNvdXJjZSBmaWxlLCB5b3VyIGVkaXRvciBtYXkgZG8gdGhpcyBgYGluCnBsYWNl
Jycgb3IgaXQgbWF5IHJlbmFtZSBpdCBmaXJzdCBhbmQgY3JlYXRlIGEgbmV3IGZpbGUuIElu
IHRoZSBsYXR0ZXIgY2FzZSwKYW55IGhhcmQgbGluayB3aWxsIGJlIGxvc3QuIENvbnMgd2ls
bCBkZXRlY3QgdGhpcyBjb25kaXRpb24gdGhlIG5leHQgdGltZQp0aGUgc291cmNlIGZpbGUg
aXMgbmVlZGVkLCBhbmQgd2lsbCByZWxpbmsgaXQgYXBwcm9wcmlhdGVseS4KCllvdSdsbCBh
bHNvIG5vdGljZSwgYnkgdGhlIHdheSwgdGhhdCBCPG5vPiBjaGFuZ2VzIHdlcmUgcmVxdWly
ZWQgdG8gdGhlCnVuZGVybHlpbmcgRjxDb25zY3JpcHQ+IGZpbGVzLiBBbmQgd2UgY2FuIGdv
IGZ1cnRoZXIsIGFzIHdlIHNoYWxsIHNlZSBpbiB0aGUKbmV4dCBzZWN0aW9uLgoKCj1oZWFk
MSBWYXJpYW50IGJ1aWxkcwoKCj1oZWFkMiBIZWxsbywgV29ybGQhIGZvciBiYU5hTmEgYW5k
IHBlQWNIIE9TJ3MKClZhcmlhbnQgYnVpbGRzIHJlcXVpcmUganVzdCBhbm90aGVyIHNpbXBs
ZSBleHRlbnNpb24uIExldCdzIHRha2UgYXMgYW4KZXhhbXBsZSBhIHJlcXVpcmVtZW50IHRv
IGFsbG93IGJ1aWxkcyBmb3IgYm90aCB0aGUgYmFOYU5hIGFuZCBwZUFjSApvcGVyYXRpbmcg
c3lzdGVtcy4gSW4gdGhpcyBjYXNlLCB3ZSBhcmUgdXNpbmcgYSBkaXN0cmlidXRlZCBmaWxl
IHN5c3RlbSwKc3VjaCBhcyBORlMgdG8gYWNjZXNzIHRoZSBwYXJ0aWN1bGFyIHN5c3RlbSwg
YW5kIG9ubHkgb25lIG9yIHRoZSBvdGhlciBvZgp0aGUgc3lzdGVtcyBoYXMgdG8gYmUgY29t
cGlsZWQgZm9yIGFueSBnaXZlbiBpbnZvY2F0aW9uIG9mIEM8Y29ucz4uIEhlcmUncwpvbmUg
d2F5IHdlIGNvdWxkIHNldCB1cCB0aGUgRjxDb25zdHJ1Y3Q+IGZpbGUgZm9yIG91ciBCPEhl
bGxvLCBXb3JsZCE+CmFwcGxpY2F0aW9uOgoKICAjIENvbnN0cnVjdCBmaWxlIGZvciBIZWxs
bywgV29ybGQhCgogIGRpZSBxcShPUyBtdXN0IGJlIHNwZWNpZmllZCkgdW5sZXNzICRPUyA9
ICRBUkd7T1N9OwogIGRpZSBxcShPUyBtdXN0IGJlICJwZWFjaCIgb3IgImJhbmFuYSIpCglp
ZiAkT1MgbmUgInBlYWNoIiAmJiAkT1MgbmUgImJhbmFuYSI7CgogICMgV2hlcmUgdG8gcHV0
IGFsbCBvdXIgc2hhcmVkIHByb2R1Y3RzLgogICRFWFBPUlQgPSAiI2V4cG9ydC8kT1MiOwoK
ICBFeHBvcnQgcXcoIENPTlMgSU5DTFVERSBMSUIgQklOICk7CgogICMgU3RhbmRhcmQgZGly
ZWN0b3JpZXMgZm9yIHNoYXJpbmcgcHJvZHVjdHMuCiAgJElOQ0xVREUgPSAiJEVYUE9SVC9p
bmNsdWRlIjsKICAkTElCID0gIiRFWFBPUlQvbGliIjsKICAkQklOID0gIiRFWFBPUlQvYmlu
IjsKCiAgIyBBIHN0YW5kYXJkIGNvbnN0cnVjdGlvbiBlbnZpcm9ubWVudC4KICAkQ09OUyA9
IG5ldyBjb25zICgKCUNQUFBBVEggPT4gJElOQ0xVREUsCSMgSW5jbHVkZSBwYXRoIGZvciBD
IENvbXBpbGF0aW9ucwoJTElCUEFUSCA9PiAkTElCLAkjIExpYnJhcnkgcGF0aCBmb3IgbGlu
a2luZyBwcm9ncmFtcwoJTElCUyA9PiAnLWx3b3JsZCcsCSMgTGlzdCBvZiBzdGFuZGFyZCBs
aWJyYXJpZXMKICApOwoKICAjICRCVUlMRCBpcyB3aGVyZSB3ZSB3aWxsIGRlcml2ZSBldmVy
eXRoaW5nLgogICRCVUlMRCA9ICIjYnVpbGQvJE9TIjsKCiAgIyBUZWxsIGNvbnMgd2hlcmUg
dGhlIHNvdXJjZSBmaWxlcyBmb3IgJEJVSUxEIGFyZS4KICBMaW5rICRCVUlMRCA9PiAnc3Jj
JzsKCiAgQnVpbGQgKAoJIiRCVUlMRC9oZWxsby9Db25zY3JpcHQiLAoJIiRCVUlMRC93b3Js
ZC9Db25zY3JpcHQiLAogICk7CgpOb3cgaWYgd2UgbG9naW4gdG8gYSBwZUFjSCBzeXN0ZW0s
IHdlIGNhbiBidWlsZCBvdXIgQjxIZWxsbywgV29ybGQhPgphcHBsaWNhdGlvbiBmb3IgdGhh
dCBwbGF0Zm9ybToKCiAgJSBjb25zIGV4cG9ydCBPUz1wZWFjaAogIEluc3RhbGwgYnVpbGQv
cGVhY2gvd29ybGQvd29ybGQuaCBhcyBleHBvcnQvcGVhY2gvaW5jbHVkZS93b3JsZC5oCiAg
Y2MgLUlleHBvcnQvcGVhY2gvaW5jbHVkZSAtYyBidWlsZC9wZWFjaC9oZWxsby9oZWxsby5j
IC1vIGJ1aWxkL3BlYWNoL2hlbGxvL2hlbGxvLm8KICBjYyAtSWV4cG9ydC9wZWFjaC9pbmNs
dWRlIC1jIGJ1aWxkL3BlYWNoL3dvcmxkL3dvcmxkLmMgLW8gYnVpbGQvcGVhY2gvd29ybGQv
d29ybGQubwogIGFyIHIgYnVpbGQvcGVhY2gvd29ybGQvbGlid29ybGQuYSBidWlsZC9wZWFj
aC93b3JsZC93b3JsZC5vCiAgYXI6IGNyZWF0aW5nIGJ1aWxkL3BlYWNoL3dvcmxkL2xpYndv
cmxkLmEKICByYW5saWIgYnVpbGQvcGVhY2gvd29ybGQvbGlid29ybGQuYQogIEluc3RhbGwg
YnVpbGQvcGVhY2gvd29ybGQvbGlid29ybGQuYSBhcyBleHBvcnQvcGVhY2gvbGliL2xpYndv
cmxkLmEKICBjYyAtbyBidWlsZC9wZWFjaC9oZWxsby9oZWxsbyBidWlsZC9wZWFjaC9oZWxs
by9oZWxsby5vIC1MZXhwb3J0L3BlYWNoL2xpYiAtbHdvcmxkCiAgSW5zdGFsbCBidWlsZC9w
ZWFjaC9oZWxsby9oZWxsbyBhcyBleHBvcnQvcGVhY2gvYmluL2hlbGxvCgoKPWhlYWQyIFZh
cmlhdGlvbnMgb24gYSB0aGVtZQoKT3RoZXIgdmFyaWF0aW9ucyBvZiB0aGlzIG1vZGVsIGFy
ZSBwb3NzaWJsZS4gRm9yIGV4YW1wbGUsIHlvdSBtaWdodCBkZWNpZGUKdGhhdCB5b3Ugd2Fu
dCB0byBzZXBhcmF0ZSBvdXQgeW91ciBpbmNsdWRlIGZpbGVzIGludG8gcGxhdGZvcm0gZGVw
ZW5kZW50IGFuZApwbGF0Zm9ybSBpbmRlcGVuZGVudCBmaWxlcy4gSW4gdGhpcyBjYXNlLCB5
b3UnZCBoYXZlIHRvIGRlZmluZSBhbgphbHRlcm5hdGl2ZSB0byBDPCRJTkNMVURFPiBmb3Ig
cGxhdGZvcm0tZGVwZW5kZW50IGZpbGVzLiBNb3N0IEY8Q29uc2NyaXB0PgpmaWxlcywgZ2Vu
ZXJhdGluZyBwdXJlbHkgcGxhdGZvcm0taW5kZXBlbmRlbnQgaW5jbHVkZSBmaWxlcywgd291
bGQgbm90IGhhdmUKdG8gY2hhbmdlLgoKWW91IG1pZ2h0IGFsc28gd2FudCB0byBiZSBhYmxl
IHRvIGNvbXBpbGUgeW91ciB3aG9sZSBzeXN0ZW0gd2l0aCBkZWJ1Z2dpbmcKb3IgcHJvZmls
aW5nLCBmb3IgZXhhbXBsZSwgZW5hYmxlZC4gWW91IGNvdWxkIGRvIHRoaXMgd2l0aCBhcHBy
b3ByaWF0ZQpjb21tYW5kIGxpbmUgb3B0aW9ucywgc3VjaCBhcyBDPERFQlVHPW9uPi4gVGhp
cyB3b3VsZCB0aGVuIGJlIHRyYW5zbGF0ZWQKaW50byB0aGUgYXBwcm9wcmlhdGUgcGxhdGZv
cm0tc3BlY2lmaWMgcmVxdWlyZW1lbnRzIHRvIGVuYWJsZSBkZWJ1Z2dpbmcKKHRoaXMgbWln
aHQgaW5jbHVkZSB0dXJuaW5nIG9mZiBvcHRpbWl6YXRpb24sIGZvciBleGFtcGxlKS4gWW91
IGNvdWxkCm9wdGlvbmFsbHkgdmFyeSB0aGUgbmFtZSBzcGFjZSBmb3IgdGhlc2UgZGlmZmVy
ZW50IHR5cGVzIG9mIHN5c3RlbXMsIGJ1dCwgYXMKd2UnbGwgc2VlIGluIHRoZSBuZXh0IHNl
Y3Rpb24sIGl0J3Mgbm90IEI8ZXNzZW50aWFsPiB0byBkbyB0aGlzLCBzaW5jZSBDb25zCmlz
IHByZXR0eSBzbWFydCBhYm91dCByZWJ1aWxkaW5nIHRoaW5ncyB3aGVuIHlvdSBjaGFuZ2Ug
b3B0aW9ucy4KCgo9aGVhZDEgU2lnbmF0dXJlcwoKCj1oZWFkMiBNRDUgY3J5cHRvZ3JhcGhp
YyBzaWduYXR1cmVzCgpXaGVuZXZlciBDb25zIGNyZWF0ZXMgYSBkZXJpdmVkIGZpbGUsIGl0
IHN0b3JlcyBhIEI8c2lnbmF0dXJlPiBmb3IgdGhhdApmaWxlLiBUaGUgc2lnbmF0dXJlIGlz
IHN0b3JlZCBpbiBhIHNlcGFyYXRlIGZpbGUsIG9uZSBwZXIgZGlyZWN0b3J5LiBBZnRlcgp0
aGUgcHJldmlvdXMgZXhhbXBsZSB3YXMgY29tcGlsZWQsIHRoZSBGPC5jb25zaWduPiBmaWxl
IGluIHRoZQpGPGJ1aWxkL3BlYWNoL3dvcmxkPiBkaXJlY3RvcnkgbG9va2VkIGxpa2UgdGhp
czoKCiAgd29ybGQubzo4MzQxNzkzMDMgMjM4NDRjMGIxMDJlY2RjMGI0NTQ4ZDFjZDFjYmQ4
YzYKICBsaWJ3b3JsZC5hOjgzNDE3OTMwNCA5YmY2NTg3ZmEwNmVjNDlkODY0ODExYTEwNTIy
MmMwMAoKVGhlIGZpcnN0IG51bWJlciBpcyBhIHRpbWVzdGFtcC0tZm9yIGEgVU5JWCBzeXN0
ZW1zLCB0aGlzIGlzIHR5cGljYWxseSB0aGUKbnVtYmVyIG9mIHNlY29uZHMgc2luY2UgSmFu
dWFyeSAxc3QsIDE5NzAuIFRoZSBzZWNvbmQgdmFsdWUgaXMgYW4gTUQ1CmNoZWNrc3VtLiBU
aGUgQjxNZXNzYWdlIERpZ2VzdCBBbGdvcml0aG0+IGlzIGFuIGFsZ29yaXRobSB0aGF0LCBn
aXZlbiBhbgppbnB1dCBzdHJpbmcsIGNvbXB1dGVzIGEgc3Ryb25nIGNyeXB0b2dyYXBoaWMg
c2lnbmF0dXJlIGZvciB0aGF0IHN0cmluZy4gVGhlCk1ENSBjaGVja3N1bSBzdG9yZWQgaW4g
dGhlIEY8LmNvbnNpZ24+IGZpbGUgaXMsIGluIGVmZmVjdCwgYSBkaWdlc3Qgb2YgYWxsCnRo
ZSBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIGZpbGUuIFNvLCBm
b3IgZXhhbXBsZSwgZm9yIHRoZQpGPHdvcmxkLm8+IGZpbGUsIHRoaXMgaW5jbHVkZXMgYXQg
bGVhc3QgdGhlIEY8d29ybGQuYz4gZmlsZSwgYW5kIGFsc28gYW55CmhlYWRlciBmaWxlcyB0
aGF0IENvbnMga25vd3MgYWJvdXQgdGhhdCBhcmUgaW5jbHVkZWQsIGRpcmVjdGx5IG9yIGlu
ZGlyZWN0bHkKYnkgRjx3b3JsZC5jPi4gTm90IG9ubHkgdGhhdCwgYnV0IHRoZSBhY3R1YWwg
Y29tbWFuZCBsaW5lIHRoYXQgd2FzIHVzZWQgdG8KZ2VuZXJhdGUgRjx3b3JsZC5vPiBpcyBh
bHNvIGZlZCBpbnRvIHRoZSBjb21wdXRhdGlvbiBvZiB0aGUKc2lnbmF0dXJlLiBTaW1pbGFy
bHksIEY8bGlid29ybGQuYT4gZ2V0cyBhIHNpZ25hdHVyZSB3aGljaCBgYGluY2x1ZGVzJycg
YWxsCnRoZSBzaWduYXR1cmVzIG9mIGl0cyBjb25zdGl0dWVudHMgKGFuZCBoZW5jZSwgdHJh
bnNpdGl2ZWx5LCB0aGUgc2lnbmF0dXJlcwpvZiBCPHRoZWlyPiBjb25zdGl0dWVudHMpLCBh
cyB3ZWxsIGFzIHRoZSBjb21tYW5kIGxpbmUgdGhhdCBjcmVhdGVkIHRoZQpmaWxlLgoKVGhl
IHNpZ25hdHVyZSBvZiBhIG5vbi1kZXJpdmVkIGZpbGUgaXMgY29tcHV0ZWQsIGJ5IGRlZmF1
bHQsIGJ5IHRha2luZyB0aGUKY3VycmVudCBtb2RpZmljYXRpb24gdGltZSBvZiB0aGUgZmls
ZSBhbmQgdGhlIGZpbGUncyBlbnRyeSBuYW1lICh1bmxlc3MKdGhlcmUgaGFwcGVucyB0byBi
ZSBhIGN1cnJlbnQgRjwuY29uc2lnbj4gZW50cnkgZm9yIHRoYXQgZmlsZSwgaW4gd2hpY2gg
Y2FzZQp0aGF0IHNpZ25hdHVyZSBpcyB1c2VkKS4KCk5vdGljZSB0aGF0IHRoZXJlIGlzIG5v
IG5lZWQgZm9yIGEgZGVyaXZlZCBmaWxlIHRvIGRlcGVuZCB1cG9uIGFueQpwYXJ0aWN1bGFy
IEY8Q29uc3RydWN0PiBvciBGPENvbnNjcmlwdD4gZmlsZS0taWYgY2hhbmdlcyB0byB0aGVz
ZSBmaWxlcwphZmZlY3QgdGhlIGZpbGUgaW4gcXVlc3Rpb24sIHRoZW4gdGhpcyB3aWxsIGJl
IGF1dG9tYXRpY2FsbHkgcmVmbGVjdGVkIGluCml0cyBzaWduYXR1cmUsIHNpbmNlIHJlbGV2
YW50IHBhcnRzIG9mIHRoZSBjb21tYW5kIGxpbmUgYXJlIGluY2x1ZGVkIGluIHRoZQpzaWdu
YXR1cmUuIFVucmVsYXRlZCBjaGFuZ2VzIHdpbGwgaGF2ZSBubyBlZmZlY3QuCgpXaGVuIENv
bnMgY29uc2lkZXJzIHdoZXRoZXIgdG8gZGVyaXZlIGEgcGFydGljdWxhciBmaWxlLCB0aGVu
LCBpdCBmaXJzdApjb21wdXRlcyB0aGUgZXhwZWN0ZWQgc2lnbmF0dXJlIG9mIHRoZSBmaWxl
LiBJdCB0aGVuIGNvbXBhcmVzIHRoZSBmaWxlJ3MKbGFzdCBtb2RpZmljYXRpb24gdGltZSB3
aXRoIHRoZSB0aW1lIHJlY29yZGVkIGluIHRoZSBGPC5jb25zaWduPiBlbnRyeSwgaWYKb25l
IGV4aXN0cy4gSWYgdGhlc2UgdGltZXMgbWF0Y2gsIHRoZW4gdGhlIHNpZ25hdHVyZSBzdG9y
ZWQgaW4gdGhlCkY8LmNvbnNpZ24+IGZpbGUgaXMgY29uc2lkZXJlZCB0byBiZSBhY2N1cmF0
ZS4gSWYgdGhlIGZpbGUncyBwcmV2aW91cwpzaWduYXR1cmUgZG9lcyBub3QgbWF0Y2ggdGhl
IG5ldywgZXhwZWN0ZWQgc2lnbmF0dXJlLCB0aGVuIHRoZSBmaWxlIG11c3QgYmUKcmVkZXJp
dmVkLgoKTm90aWNlIHRoYXQgYSBmaWxlIHdpbGwgYmUgcmVkZXJpdmVkIHdoZW5ldmVyIGFu
eXRoaW5nIGFib3V0IGEgZGVwZW5kZW50CmZpbGUgY2hhbmdlcy4gSW4gcGFydGljdWxhciwg
bm90aWNlIHRoYXQgQjxhbnk+IGNoYW5nZSB0byB0aGUgbW9kaWZpY2F0aW9uCnRpbWUgb2Yg
YSBkZXBlbmRlbnQgKGZvcndhcmQgb3IgYmFja3dhcmRzIGluIHRpbWUpIHdpbGwgZm9yY2Ug
cmVjb21waWxhdGlvbgpvZiB0aGUgZGVyaXZlZCBmaWxlLgoKVGhlIHVzZSBvZiB0aGVzZSBz
aWduYXR1cmVzIGlzIGFuIGV4dHJlbWVseSBzaW1wbGUsIGVmZmljaWVudCwgYW5kIGVmZmVj
dGl2ZQptZXRob2Qgb2YgaW1wcm92aW5nLS1kcmFtYXRpY2FsbHktLXRoZSByZXByb2R1Y2li
aWxpdHkgb2YgYSBzeXN0ZW0uCgpXZSdsbCBkZW1vbnN0cmF0ZSB0aGlzIHdpdGggYSBzaW1w
bGUgZXhhbXBsZToKCiAgIyBTaW1wbGUgIkhlbGxvLCBXb3JsZCEiIENvbnN0cnVjdCBmaWxl
CiAgJENGTEFHUyA9ICctZycgaWYgJEFSR3tERUJVR30gZXEgJ29uJzsKICAkQ09OUyA9IG5l
dyBjb25zKENGTEFHUyA9PiAkQ0ZMQUdTKTsKICBQcm9ncmFtICRDT05TICdoZWxsbycsICdo
ZWxsby5jJzsKCk5vdGljZSBob3cgQ29ucyByZWNvbXBpbGVzIGF0IHRoZSBhcHByb3ByaWF0
ZSB0aW1lczoKCiAgJSBjb25zIGhlbGxvCiAgY2MgLWMgaGVsbG8uYyAtbyBoZWxsby5vCiAg
Y2MgLW8gaGVsbG8gaGVsbG8ubwogICUgY29ucyBoZWxsbwogIGNvbnM6ICJoZWxsbyIgaXMg
dXAtdG8tZGF0ZS4KICAlIGNvbnMgREVCVUc9b24gaGVsbG8KICBjYyAtZyAtYyBoZWxsby5j
IC1vIGhlbGxvLm8KICBjYyAtbyBoZWxsbyBoZWxsby5vCiAgJSBjb25zIERFQlVHPW9uIGhl
bGxvCiAgY29uczogImhlbGxvIiBpcyB1cC10by1kYXRlLgogICUgY29ucyBoZWxsbwogIGNj
IC1jIGhlbGxvLmMgLW8gaGVsbG8ubwogIGNjIC1vIGhlbGxvIGhlbGxvLm8KCgo9aGVhZDEg
Q29kZSBSZXBvc2l0b3JpZXMKCk1hbnkgc29mdHdhcmUgZGV2ZWxvcG1lbnQgb3JnYW5pemF0
aW9ucyB3aWxsIGhhdmUgb25lIG9yIG1vcmUgY2VudHJhbApyZXBvc2l0b3J5IGRpcmVjdG9y
eSB0cmVlcyBjb250YWluaW5nIHRoZSBjdXJyZW50IHNvdXJjZSBjb2RlIGZvciBvbmUgb3IK
bW9yZSBwcm9qZWN0cywgYXMgd2VsbCBhcyB0aGUgZGVyaXZlZCBvYmplY3QgZmlsZXMsIGxp
YnJhcmllcywgYW5kCmV4ZWN1dGFibGVzLiAgSW4gb3JkZXIgdG8gcmVkdWNlIHVubmVjZXNz
YXJ5IHJlY29tcGlsYXRpb24sIGl0IGlzIHVzZWZ1bCB0bwp1c2UgZmlsZXMgZnJvbSB0aGUg
cmVwb3NpdG9yeSB0byBidWlsZCBkZXZlbG9wbWVudCBzb2Z0d2FyZS0tYXNzdW1pbmcsIG9m
CmNvdXJzZSwgdGhhdCBubyBuZXdlciBkZXBlbmRlbmN5IGZpbGUgZXhpc3RzIGluIHRoZSBs
b2NhbCBidWlsZCB0cmVlLgoKCj1oZWFkMiBSZXBvc2l0b3J5CgpDb25zIHByb3ZpZGVzIGEg
bWVjaGFuaXNtIHRvIHNwZWNpZnkgYSBsaXN0IG9mIGNvZGUgcmVwb3NpdG9yaWVzIHRoYXQg
d2lsbApiZSBzZWFyY2hlZCwgaW4tb3JkZXIsIGZvciBzb3VyY2UgZmlsZXMgYW5kIGRlcml2
ZWQgZmlsZXMgbm90IGZvdW5kIGluIHRoZQpsb2NhbCBidWlsZCBkaXJlY3RvcnkgdHJlZS4K
ClRoZSBmb2xsb3dpbmcgbGluZXMgaW4gYSBGPENvbnN0cnVjdD4gZmlsZSB3aWxsIGluc3Ry
dWN0IENvbnMgdG8gbG9vayBmaXJzdAp1bmRlciB0aGUgRjwvdXNyL2V4cGVyaW1lbnQvcmVw
b3NpdG9yeT4gZGlyZWN0b3J5IGFuZCB0aGVuIHVuZGVyIHRoZQpGPC91c3IvcHJvZHVjdC9y
ZXBvc2l0b3J5PiBkaXJlY3Rvcnk6CgogIFJlcG9zaXRvcnkgcXcgKAoJL3Vzci9leHBlcmlt
ZW50L3JlcG9zaXRvcnkKCS91c3IvcHJvZHVjdC9yZXBvc2l0b3J5CiAgKTsKClRoZSByZXBv
c2l0b3J5IGRpcmVjdG9yaWVzIHNwZWNpZmllZCBtYXkgY29udGFpbiBzb3VyY2UgZmlsZXMs
IGRlcml2ZWQgZmlsZXMKKG9iamVjdHMsIGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMpLCBv
ciBib3RoLiAgSWYgdGhlcmUgaXMgbm8gbG9jYWwgZmlsZQooc291cmNlIG9yIGRlcml2ZWQp
IHVuZGVyIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggQ29ucyBpcyBleGVjdXRlZCwgdGhlbiB0
aGUKZmlyc3QgY29weSBvZiBhIHNhbWUtbmFtZWQgZmlsZSBmb3VuZCB1bmRlciBhIHJlcG9z
aXRvcnkgZGlyZWN0b3J5IHdpbGwgYmUKdXNlZCB0byBidWlsZCBhbnkgbG9jYWwgZGVyaXZl
ZCBmaWxlcy4KCkNvbnMgbWFpbnRhaW5zIG9uZSBnbG9iYWwgbGlzdCBvZiByZXBvc2l0b3Jp
ZXMgZGlyZWN0b3JpZXMuICBDb25zIHdpbGwKZWxpbWluYXRlIHRoZSBjdXJyZW50IGRpcmVj
dG9yeSwgYW5kIGFueSBub24tZXhpc3RlbnQgZGlyZWN0b3JpZXMsIGZyb20gdGhlCmxpc3Qu
CgoKPWhlYWQyIEZpbmRpbmcgdGhlIENvbnN0cnVjdCBmaWxlIGluIGEgUmVwb3NpdG9yeQoK
Q29ucyB3aWxsIGFsc28gc2VhcmNoIGZvciBGPENvbnN0cnVjdD4gYW5kIEY8Q29uc2NyaXB0
PiBmaWxlcyBpbiB0aGUKcmVwb3NpdG9yeSB0cmVlIG9yIHRyZWVzLiAgVGhpcyBsZWFkcyB0
byBhIGNoaWNrZW4tYW5kLWVnZyBzaXR1YXRpb24sCnRob3VnaDogaG93IGRvIHlvdSBsb29r
IGluIGEgcmVwb3NpdG9yeSB0cmVlIGZvciBhIEY8Q29uc3RydWN0PiBmaWxlIGlmIHRoZQpG
PENvbnN0cnVjdD4gZmlsZSB0ZWxscyB5b3Ugd2hlcmUgdGhlIHJlcG9zaXRvcnkgaXM/ICBU
byBnZXQgYXJvdW5kIHRoaXMsCnJlcG9zaXRvcmllcyBtYXkgYmUgc3BlY2lmaWVkIHZpYSBD
PC1SPiBvcHRpb25zIG9uIHRoZSBjb21tYW5kIGxpbmU6CgogICUgY29ucyAtUiAvdXNyL2V4
cGVyaW1lbnQvcmVwb3NpdG9yeSAtUiAvdXNyL3Byb2R1Y3QvcmVwb3NpdG9yeSAuCgpBbnkg
cmVwb3NpdG9yeSBkaXJlY3RvcmllcyBzcGVjaWZpZWQgaW4gdGhlIEY8Q29uc3RydWN0PiBv
ciBGPENvbnNjcmlwdD4KZmlsZXMgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgcmVwb3NpdG9y
eSBkaXJlY3RvcmllcyBzcGVjaWZpZWQgYnkKY29tbWFuZC1saW5lIEM8LVI+IG9wdGlvbnMu
Cgo9aGVhZDIgUmVwb3NpdG9yeSBzb3VyY2UgZmlsZXMKCklmIHRoZSBzb3VyY2UgY29kZSAo
aW5jbHVkZSB0aGUgRjxDb25zY3JpcHQ+IGZpbGUpIGZvciB0aGUgbGlicmFyeSB2ZXJzaW9u
Cm9mIHRoZSBJPEhlbGxvLCBXb3JsZCE+IEMgYXBwbGljYXRpb24gaXMgaW4gYSByZXBvc2l0
b3J5ICh3aXRoIG5vIGRlcml2ZWQKZmlsZXMpLCBDb25zIHdpbGwgdXNlIHRoZSByZXBvc2l0
b3J5IHNvdXJjZSBmaWxlcyB0byBjcmVhdGUgdGhlIGxvY2FsIG9iamVjdApmaWxlcyBhbmQg
ZXhlY3V0YWJsZSBmaWxlOgoKICAlIGNvbnMgLVIgL3Vzci9zcmNfb25seS9yZXBvc2l0b3J5
IGhlbGxvCiAgZ2NjIC1jIC91c3Ivc3JjX29ubHkvcmVwb3NpdG9yeS9oZWxsby5jIC1vIGhl
bGxvLm8KICBnY2MgLWMgL3Vzci9zcmNfb25seS9yZXBvc2l0b3J5L3dvcmxkLmMgLW8gd29y
bGQubwogIGFyIHIgbGlid29ybGQuYSB3b3JsZC5vCiAgYXI6IGNyZWF0aW5nIGxpYndvcmxk
LmEKICByYW5saWIgbGlid29ybGQuYQogIGdjYyAtbyBoZWxsbyBoZWxsby5vIGxpYndvcmxk
LmEKCkNyZWF0aW5nIGEgbG9jYWwgc291cmNlIGZpbGUgd2lsbCBjYXVzZSBDb25zIHRvIHJl
YnVpbGQgdGhlIGFwcHJvcHJpYXRlCmRlcml2ZWQgZmlsZSBvciBmaWxlczoKCiAgJSBwaWNv
IHdvcmxkLmMKICAgIFtFRElUXQogICUgY29ucyAtUiAvdXNyL3NyY19vbmx5L3JlcG9zaXRv
cnkgaGVsbG8KICBnY2MgLWMgd29ybGQuYyAtbyB3b3JsZC5vCiAgYXIgciBsaWJ3b3JsZC5h
IHdvcmxkLm8KICBhcjogY3JlYXRpbmcgbGlid29ybGQuYQogIHJhbmxpYiBsaWJ3b3JsZC5h
CiAgZ2NjIC1vIGhlbGxvIGhlbGxvLm8gbGlid29ybGQuYQoKQW5kIHJlbW92aW5nIHRoZSBs
b2NhbCBzb3VyY2UgZmlsZSB3aWxsIGNhdXNlIENvbnMgdG8gcmV2ZXJ0IGJhY2sgdG8KYnVp
bGRpbmcgdGhlIGRlcml2ZWQgZmlsZXMgZnJvbSB0aGUgcmVwb3NpdG9yeSBzb3VyY2U6Cgog
ICUgcm0gd29ybGQuYwogICUgY29ucyAtUiAvdXNyL3NyY19vbmx5L3JlcG9zaXRvcnkgaGVs
bG8KICBnY2MgLWMgL3Vzci9zcmNfb25seS9yZXBvc2l0b3J5L3dvcmxkLmMgLW8gd29ybGQu
bwogIGFyIHIgbGlid29ybGQuYSB3b3JsZC5vCiAgYXI6IGNyZWF0aW5nIGxpYndvcmxkLmEK
ICByYW5saWIgbGlid29ybGQuYQogIGdjYyAtbyBoZWxsbyBoZWxsby5vIGxpYndvcmxkLmEK
Cgo9aGVhZDIgUmVwb3NpdG9yeSBkZXJpdmVkIGZpbGVzCgpJZiBhIHJlcG9zaXRvcnkgdHJl
ZSBjb250YWlucyBkZXJpdmVkIGZpbGVzICh1c3VhbGx5IG9iamVjdCBmaWxlcywKbGlicmFy
aWVzLCBvciBleGVjdXRhYmxlcyksIENvbnMgd2lsbCBwZXJmb3JtIGl0cyBub3JtYWwgc2ln
bmF0dXJlCmNhbGN1bGF0aW9uIHRvIGRlY2lkZSB3aGV0aGVyIHRoZSByZXBvc2l0b3J5IGZp
bGUgaXMgdXAtdG8tZGF0ZSBvciBhIGRlcml2ZWQKZmlsZSBtdXN0IGJlIGJ1aWx0IGxvY2Fs
bHkuICBUaGlzIG1lYW5zIHRoYXQsIGluIG9yZGVyIHRvIGVuc3VyZSBjb3JyZWN0CnNpZ25h
dHVyZSBjYWxjdWxhdGlvbiwgYSByZXBvc2l0b3J5IHRyZWUgbXVzdCBhbHNvIGNvbnRhaW4g
dGhlIEY8LmNvbnNpZ24+CmZpbGVzIHRoYXQgd2VyZSBjcmVhdGVkIGJ5IENvbnMgd2hlbiBn
ZW5lcmF0aW5nIHRoZSBkZXJpdmVkIGZpbGVzLgoKVGhpcyB3b3VsZCB1c3VhbGx5IGJlIGFj
Y29tcGxpc2hlZCBieSBidWlsZGluZyB0aGUgc29mdHdhcmUgaW4gdGhlCnJlcG9zaXRvcnkg
KG9yLCBhbHRlcm5hdGl2ZWx5LCBpbiBhIGJ1aWxkIGRpcmVjdG9yeSwgYW5kIHRoZW4gY29w
eWluZyB0aGUKcmVzdWx0IHRvIHRoZSByZXBvc2l0b3J5KToKCiAgJSBjZCAvdXNyL2FsbC9y
ZXBvc2l0b3J5CiAgJSBjb25zIGhlbGxvCiAgZ2NjIC1jIGhlbGxvLmMgLW8gaGVsbG8ubwog
IGdjYyAtYyB3b3JsZC5jIC1vIHdvcmxkLm8KICBhciByIGxpYndvcmxkLmEgd29ybGQubwog
IGFyOiBjcmVhdGluZyBsaWJ3b3JsZC5hCiAgcmFubGliIGxpYndvcmxkLmEKICBnY2MgLW8g
aGVsbG8gaGVsbG8ubyBsaWJ3b3JsZC5hCgooVGhpcyBpcyBzYWZlIGV2ZW4gaWYgdGhlIEY8
Q29uc3RydWN0PiBmaWxlIGxpc3RzIHRoZSBGPC91c3IvYWxsL3JlcG9zaXRvcnk+CmRpcmVj
dG9yeSBpbiBhIEM8UmVwb3NpdG9yeT4gY29tbWFuZCBiZWNhdXNlIENvbnMgd2lsbCByZW1v
dmUgdGhlIGN1cnJlbnQKZGlyZWN0b3J5IGZyb20gdGhlIHJlcG9zaXRvcnkgbGlzdC4pCgpO
b3cgaWYgd2Ugd2FudCB0byBidWlsZCBhIGNvcHkgb2YgdGhlIGFwcGxpY2F0aW9uIHdpdGgg
b3VyIG93biBGPGhlbGxvLmM+CmZpbGUsIHdlIG9ubHkgbmVlZCB0byBjcmVhdGUgdGhlIG9u
ZSBuZWNlc3Nhcnkgc291cmNlIGZpbGUsIGFuZCB1c2UgdGhlCkM8LVI+IG9wdGlvbiB0byBo
YXZlIENvbnMgdXNlIG90aGVyIGZpbGVzIGZyb20gdGhlIHJlcG9zaXRvcnk6CgogICUgbWtk
aXIgJEhPTUUvYnVpbGQxCiAgJSBjZCAkSE9NRS9idWlsZDEKICAlIGVkIGhlbGxvLmMKICAg
IFtFRElUXQogICUgY29ucyAtUiAvdXNyL2FsbC9yZXBvc2l0b3J5IGhlbGxvCiAgZ2NjIC1j
IGhlbGxvLmMgLW8gaGVsbG8ubwogIGdjYyAtbyBoZWxsbyBoZWxsby5vIC91c3IvYWxsL3Jl
cG9zaXRvcnkvbGlid29ybGQuYQoKTm90aWNlIHRoYXQgQ29ucyBoYXMgbm90IGJvdGhlcmVk
IHRvIHJlY3JlYXRlIGEgbG9jYWwgRjxsaWJ3b3JsZC5hPiBsaWJyYXJ5CihvciByZWNvbXBp
bGUgdGhlIEY8d29ybGQubz4gbW9kdWxlKSwgYnV0IGluc3RlYWQgdXNlcyB0aGUgYWxyZWFk
eS1jb21waWxlZAp2ZXJzaW9uIGZyb20gdGhlIHJlcG9zaXRvcnkuCgpCZWNhdXNlIHRoZSBN
RDUgc2lnbmF0dXJlcyB0aGF0IENvbnMgcHV0cyBpbiB0aGUgRjwuY29uc2lnbj4gZmlsZSBj
b250YWluCnRpbWVzdGFtcHMgZm9yIHRoZSBkZXJpdmVkIGZpbGVzLCB0aGUgc2lnbmF0dXJl
IHRpbWVzdGFtcHMgbXVzdCBtYXRjaCB0aGUKZmlsZSB0aW1lc3RhbXBzIGZvciBhIHNpZ25h
dHVyZSB0byBiZSBjb25zaWRlcmVkIHZhbGlkLgoKU29tZSBzb2Z0d2FyZSBzeXN0ZW1zIG1h
eSBhbHRlciB0aGUgdGltZXN0YW1wcyBvbiByZXBvc2l0b3J5IGZpbGVzIChieQpjb3B5aW5n
IHRoZW0sIGUuZy4pLCBpbiB3aGljaCBjYXNlIENvbnMgd2lsbCwgYnkgZGVmYXVsdCwgYXNz
dW1lIHRoZQpyZXBvc2l0b3J5IHNpZ25hdHVyZXMgYXJlIGludmFsaWQgYW5kIHJlYnVpbGQg
ZmlsZXMgdW5uZWNlc3NhcmlseS4gIFRoaXMKYmVoYXZpb3IgbWF5IGJlIGFsdGVyZWQgYnkg
c3BlY2lmeWluZzoKCiAgUmVwb3NpdG9yeV9TaWdfVGltZXNfT0sgMDsKClRoaXMgdGVsbHMg
Q29ucyB0byBpZ25vcmUgdGltZXN0YW1wcyB3aGVuIGRlY2lkaW5nIHdoZXRoZXIgYSBzaWdu
YXR1cmUgaXMKdmFsaWQuICAoTm90ZSB0aGF0IGF2b2lkaW5nIHRoaXMgc2FuaXR5IGNoZWNr
IG1lYW5zIHRoZXJlIG11c3QgYmUgcHJvcGVyCmNvbnRyb2wgb3ZlciB0aGUgcmVwb3NpdG9y
eSB0cmVlIHRvIGVuc3VyZSB0aGF0IHRoZSBkZXJpdmVkIGZpbGVzIGNhbm5vdCBiZQptb2Rp
ZmllZCB3aXRob3V0IHVwZGF0aW5nIHRoZSBGPC5jb25zaWduPiBzaWduYXR1cmUuKQoKCj1o
ZWFkMiBMb2NhbCBjb3BpZXMgb2YgZmlsZXMKCklmIHRoZSByZXBvc2l0b3J5IHRyZWUgY29u
dGFpbnMgdGhlIGNvbXBsZXRlIHJlc3VsdHMgb2YgYSBidWlsZCwgYW5kIHdlIHRyeQp0byBi
dWlsZCBmcm9tIHRoZSByZXBvc2l0b3J5IHdpdGhvdXQgYW55IGZpbGVzIGluIG91ciBsb2Nh
bCB0cmVlLCBzb21ldGhpbmcKbW9kZXJhdGVseSBzdXJwcmlzaW5nIGhhcHBlbnM6CgogICUg
bWtkaXIgJEhPTUUvYnVpbGQyCiAgJSBjZCAkSE9NRS9idWlsZDIKICAlIGNvbnMgLVIgL3Vz
ci9hbGwvcmVwb3NpdG9yeSBoZWxsbwogIGNvbnM6ICJoZWxsbyIgaXMgdXAtdG8tZGF0ZS4K
CldoeSBkb2VzIENvbnMgc2F5IHRoYXQgdGhlIEY8aGVsbG8+IHByb2dyYW0gaXMgdXAtdG8t
ZGF0ZSB3aGVuIHRoZXJlIGlzIG5vCkY8aGVsbG8+IHByb2dyYW0gaW4gdGhlIGxvY2FsIGJ1
aWxkIGRpcmVjdG9yeT8gIEJlY2F1c2UgdGhlIHJlcG9zaXRvcnkgKG5vdAp0aGUgbG9jYWwg
ZGlyZWN0b3J5KSBjb250YWlucyB0aGUgdXAtdG8tZGF0ZSBGPGhlbGxvPiBwcm9ncmFtLCBh
bmQgQ29ucwpjb3JyZWN0bHkgZGV0ZXJtaW5lcyB0aGF0IG5vdGhpbmcgbmVlZHMgdG8gYmUg
ZG9uZSB0byByZWJ1aWxkIHRoaXMKdXAtdG8tZGF0ZSBjb3B5IG9mIHRoZSBmaWxlLgoKVGhl
cmUgYXJlLCBob3dldmVyLCBtYW55IHRpbWVzIGluIHdoaWNoIGl0IGlzIGFwcHJvcHJpYXRl
IHRvIGVuc3VyZSB0aGF0IGEKbG9jYWwgY29weSBvZiBhIGZpbGUgYWx3YXlzIGV4aXN0cy4g
IEEgcGFja2FnaW5nIG9yIHRlc3Rpbmcgc2NyaXB0LCBmb3IKZXhhbXBsZSwgbWF5IGFzc3Vt
ZSB0aGF0IGNlcnRhaW4gZ2VuZXJhdGVkIGZpbGVzIGV4aXN0IGxvY2FsbHkuICBJbnN0ZWFk
IG9mCm1ha2luZyB0aGVzZSBzdWJzaWRpYXJ5IHNjcmlwdHMgYXdhcmUgb2YgdGhlIHJlcG9z
aXRvcnkgZGlyZWN0b3J5LCB0aGUKQzxMb2NhbD4gY29tbWFuZCBtYXkgYmUgYWRkZWQgdG8g
YSBGPENvbnN0cnVjdD4gb3IgRjxDb25zY3JpcHQ+IGZpbGUgdG8Kc3BlY2lmeSB0aGF0IGEg
Y2VydGFpbiBmaWxlIG9yIGZpbGVzIG11c3QgYXBwZWFyIGluIHRoZSBsb2NhbCBidWlsZApk
aXJlY3Rvcnk6CgogIExvY2FsIHF3KAoJaGVsbG8KICApOwoKVGhlbiwgaWYgd2UgcmUtcnVu
IHRoZSBzYW1lIGNvbW1hbmQsIENvbnMgd2lsbCBtYWtlIGEgbG9jYWwgY29weSBvZiB0aGUK
cHJvZ3JhbSBmcm9tIHRoZSByZXBvc2l0b3J5IGNvcHkgKHRlbGxpbmcgeW91IHRoYXQgaXQg
aXMgZG9pbmcgc28pOgoKICAlIGNvbnMgLVIgL3Vzci9hbGwvcmVwb3NpdG9yeSBoZWxsbwog
IExvY2FsIGNvcHkgb2YgaGVsbG8gZnJvbSAvdXNyL2FsbC9yZXBvc2l0b3J5L2hlbGxvCiAg
Y29uczogImhlbGxvIiBpcyB1cC10by1kYXRlLgoKTm90aWNlIHRoYXQsIGJlY2F1c2UgdGhl
IGFjdCBvZiBtYWtpbmcgdGhlIGxvY2FsIGNvcHkgaXMgbm90IGNvbnNpZGVyZWQgYQoiYnVp
bGQiIG9mIHRoZSBGPGhlbGxvPiBmaWxlLCBDb25zIHN0aWxsIHJlcG9ydHMgdGhhdCBpdCBp
cyB1cC10by1kYXRlLgoKQ3JlYXRpbmcgbG9jYWwgY29waWVzIGlzIG1vc3QgdXNlZnVsIGZv
ciBmaWxlcyB0aGF0IGFyZSBiZWluZyBpbnN0YWxsZWQgaW50bwphbiBpbnRlcm1lZGlhdGUg
ZGlyZWN0b3J5IChmb3Igc2hhcmluZyB3aXRoIG90aGVyIGRpcmVjdG9yaWVzKSB2aWEgdGhl
CkM8SW5zdGFsbD4gY29tbWFuZC4gIEFjY29tcGFueWluZyB0aGUgQzxJbnN0YWxsPiBjb21t
YW5kIGZvciBhIGZpbGUgd2l0aCBhCmNvbXBhbmlvbiBDPExvY2FsPiBjb21tYW5kIGlzIHNv
IGNvbW1vbiB0aGF0IENvbnMgcHJvdmlkZXMgYQpDPEluc3RhbGxfTG9jYWw+IGNvbW1hbmQg
YXMgYSBjb252ZW5pZW50IHdheSB0byBkbyBib3RoOgoKICBJbnN0YWxsX0xvY2FsICRlbnYs
ICcjZXhwb3J0JywgJ2hlbGxvJzsKCmlzIGV4YWN0bHkgZXF1aXZhbGVudCB0bzoKCiAgSW5z
dGFsbCAkZW52ICcjZXhwb3J0JywgJ2hlbGxvJzsKICBMb2NhbCAnI2V4cG9ydC9oZWxsbyc7
CgpCb3RoIHRoZSBDPExvY2FsPiBhbmQgQzxJbnN0YWxsX0xvY2FsPiBjb21tYW5kcyB1cGRh
dGUgdGhlIGxvY2FsIEY8LmNvbnNpZ24+CmZpbGUgd2l0aCB0aGUgYXBwcm9wcmlhdGUgZmls
ZSBzaWduYXR1cmVzLCBzbyB0aGF0IGZ1dHVyZSBidWlsZHMgYXJlCnBlcmZvcm1lZCBjb3Jy
ZWN0bHkuCgoKPWhlYWQyIFJlcG9zaXRvcnkgZGVwZW5kZW5jeSBhbmFseXNpcwoKRHVlIHRv
IGl0cyBidWlsdC1pbiBzY2FubmluZywgQ29ucyB3aWxsIHNlYXJjaCB0aGUgc3BlY2lmaWVk
IHJlcG9zaXRvcnkKdHJlZXMgZm9yIGluY2x1ZGVkIEY8Lmg+IGZpbGVzLiAgVW5sZXNzIHRo
ZSBjb21waWxlciBhbHNvIGtub3dzIGFib3V0IHRoZQpyZXBvc2l0b3J5IHRyZWVzLCB0aG91
Z2gsIGl0IHdpbGwgYmUgdW5hYmxlIHRvIGZpbmQgRjwuaD4gZmlsZXMgdGhhdCBvbmx5CmV4
aXN0IGluIGEgcmVwb3NpdG9yeS4gIElmLCBmb3IgZXhhbXBsZSwgdGhlIEY8aGVsbG8uYz4g
ZmlsZSBpbmNsdWRlcyB0aGUKRjxoZWxsby5oPiBmaWxlIGluIGl0cyBjdXJyZW50IGRpcmVj
dG9yeToKCiAgJSBjb25zIC1SIC91c3IvYWxsL3JlcG9zaXRvcnkgaGVsbG8KICBnY2MgLWMg
L3Vzci9hbGwvcmVwb3NpdG9yeS9oZWxsby5jIC1vIGhlbGxvLm8KICAvdXNyL2FsbC9yZXBv
c2l0b3J5L2hlbGxvLmM6MTogaGVsbG8uaDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQoK
U29sdmluZyB0aGlzIHByb2JsZW0gZm9yY2VzIHNvbWUgcmVxdWlyZW1lbnRzIG9udG8gdGhl
IHdheSBjb25zdHJ1Y3Rpb24KZW52aXJvbm1lbnRzIGFyZSBkZWZpbmVkIGFuZCBvbnRvIHRo
ZSB3YXkgdGhlIEMgQzwjaW5jbHVkZT4gcHJlcHJvY2Vzc29yCmRpcmVjdGl2ZSBpcyB1c2Vk
IHRvIGluY2x1ZGUgZmlsZXMuCgpJbiBvcmRlciB0byBpbmZvcm0gdGhlIGNvbXBpbGVyIGFi
b3V0IHRoZSByZXBvc2l0b3J5IHRyZWVzLCBDb25zIHdpbGwgYWRkCmFwcHJvcHJpYXRlIEM8
LUk+IGZsYWdzIHRvIHRoZSBjb21waWxhdGlvbiBjb21tYW5kcy4gIFRoaXMgbWVhbnMgdGhh
dCB0aGUKQzxDUFBQQVRIPiB2YXJpYWJsZSBpbiB0aGUgY29uc3RydWN0IGVudmlyb25tZW50
IG11c3QgZXhwbGljaXRseSBzcGVjaWZ5IGFsbApzdWJkaXJlY3RvcmllcyB3aGljaCBhcmUg
dG8gYmUgc2VhcmNoZWQgZm9yIGluY2x1ZGVkIGZpbGVzLCBpbmNsdWRpbmcgdGhlCmN1cnJl
bnQgZGlyZWN0b3J5LiAgQ29uc2VxdWVudGx5LCB3ZSBjYW4gZml4IHRoZSBhYm92ZSBleGFt
cGxlIGJ5IGNoYW5naW5nCnRoZSBlbnZpcm9ubWVudCBjcmVhdGlvbiBpbiB0aGUgRjxDb25z
dHJ1Y3Q+IGZpbGUgYXMgZm9sbG93czoKCiAgJGVudiA9IG5ldyBjb25zKAoJQ0MJPT4gJ2dj
YycsCglDUFBQQVRICT0+ICcuJywKCUxJQlMJPT4gJ2xpYndvcmxkLmEnLAogICk7CgpEdWUg
dG8gdGhlIGRlZmluaXRpb24gb2YgdGhlIEM8Q1BQUEFUSD4gdmFyaWFibGUsIHRoaXMgeWll
bGRzLCB3aGVuIHdlCnJlLWV4ZWN1dGUgdGhlIGNvbW1hbmQ6CgogICUgY29ucyAtUiAvdXNy
L2FsbC9yZXBvc2l0b3J5IGhlbGxvCiAgZ2NjIC1jIC1JLiAtSS91c3IvYWxsL3JlcG9zaXRv
cnkgL3Vzci9hbGwvcmVwb3NpdG9yeS9oZWxsby5jIC1vIGhlbGxvLm8KICBnY2MgLW8gaGVs
bG8gaGVsbG8ubyAvdXNyL2FsbC9yZXBvc2l0b3J5L2xpYndvcmxkLmEKClRoZSBvcmRlciBv
ZiB0aGUgQzwtST4gZmxhZ3MgcmVwbGljYXRlcywgZm9yIHRoZSBDIHByZXByb2Nlc3Nvciwg
dGhlIHNhbWUKcmVwb3NpdG9yeS1kaXJlY3Rvcnkgc2VhcmNoIHBhdGggdGhhdCBDb25zIHVz
ZXMgZm9yIGl0cyBvd24gZGVwZW5kZW5jeQphbmFseXNpcy4gIElmIHRoZXJlIGFyZSBtdWx0
aXBsZSByZXBvc2l0b3JpZXMgYW5kIG11bHRpcGxlIEM8Q1BQUEFUSD4KZGlyZWN0b3JpZXMs
IENvbnMgd2lsbCBhcHBlbmQgdGhlIHJlcG9zaXRvcnkgZGlyZWN0b3JpZXMgdG8gdGhlIGJl
Z2lubmluZyBvZgplYWNoIEM8Q1BQUEFUSD4gZGlyZWN0b3J5LCByYXBpZGx5IG11bHRpcGx5
aW5nIHRoZSBudW1iZXIgb2YgQzwtST4gZmxhZ3MuCkFzIGFuIGV4dHJlbWUgZXhhbXBsZSwg
YSBGPENvbnN0cnVjdD4gZmlsZSBjb250YWluaW5nOgoKICBSZXBvc2l0b3J5IHF3KAoJL3Ux
CgkvdTIKICApOwoKICAkZW52ID0gbmV3IGNvbnMoCglDUFBQQVRICT0+ICdhOmI6YycsCiAg
KTsKCldvdWxkIHlpZWxkIGEgY29tcGlsYXRpb24gY29tbWFuZCBvZjoKCiAgY2MgLUlhIC1J
L3UxL2EgLUkvdTIvYSAtSWIgLUkvdTEvYiAtSS91Mi9iIC1JYyAtSS91MS9jIC1JL3UyL2Mg
LWMgaGVsbG8uYyAtbyBoZWxsby5vCgpCZWNhdXNlIENvbnMgcmVsaWVzIG9uIHRoZSBjb21w
aWxlcidzIEM8LUk+IGZsYWdzIHRvIGNvbW11bmljYXRlIHRoZSBvcmRlcgppbiB3aGljaCBy
ZXBvc2l0b3J5IGRpcmVjdG9yaWVzIG11c3QgYmUgc2VhcmNoZWQsIENvbnMnIGhhbmRsaW5n
IG9mCnJlcG9zaXRvcnkgZGlyZWN0b3JpZXMgaXMgZnVuZGFtZW50YWxseSBpbmNvbXBhdGli
bGUgd2l0aCB1c2luZwpkb3VibGUtcXVvdGVzIG9uIHRoZSBDPCNpbmNsdWRlPiBkaXJlY3Rp
dmVzIGluIHlvdXIgQyBzb3VyY2UgY29kZToKCiAgI2luY2x1ZGUgImZpbGUuaCIJLyogRE9O
J1QgVVNFIERPVUJMRS1RVU9URVMgTElLRSBUSElTICovCgpUaGlzIGlzIGJlY2F1c2UgbW9z
dCBDIHByZXByb2Nlc3NvcnMsIHdoZW4gZmFjZWQgd2l0aCBzdWNoIGEgZGlyZWN0aXZlLCB3
aWxsCmFsd2F5cyBmaXJzdCBzZWFyY2ggdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBz
b3VyY2UgZmlsZS4gIFRoaXMKdW5kZXJtaW5lcyB0aGUgZWxhYm9yYXRlIEM8LUk+IG9wdGlv
bnMgdGhhdCBDb25zIGNvbnN0cnVjdHMgdG8gbWFrZSB0aGUKcHJlcHJvY2Vzc29yIGNvbmZv
cm0gdG8gaXRzIHByZWZlcnJlZCBzZWFyY2ggcGF0aC4KCkNvbnNlcXVlbnRseSwgd2hlbiB1
c2luZyByZXBvc2l0b3J5IHRyZWVzIGluIENvbnMsCkI8YWx3YXlzPiB1c2UgYW5nbGUtYnJh
Y2tldHMgZm9yIGluY2x1ZGVkIGZpbGVzOgoKICAjaW5jbHVkZSA8ZmlsZS5oPgkvKiBVU0Ug
QU5HTEUtQlJBQ0tFVFMgSU5TVEVBRCAqLwoKCj1oZWFkMiBSZXBvc2l0b3J5X0xpc3QKCkNv
bnMgcHJvdmlkZXMgYSBDPFJlcG9zaXRvcnlfTGlzdD4gY29tbWFuZCB0byByZXR1cm4gYSBs
aXN0IG9mIGFsbApyZXBvc2l0b3J5IGRpcmVjdG9yaWVzIGluIHRoZWlyIGN1cnJlbnQgc2Vh
cmNoIG9yZGVyLiAgVGhpcyBjYW4gYmUgdXNlZCBmb3IKZGVidWdnaW5nLCBvciB0byBkbyBt
b3JlIGNvbXBsZXggUGVybCBzdHVmZjoKCiAgQGxpc3QgPSBSZXBvc2l0b3J5X0xpc3Q7CiAg
cHJpbnQgam9pbignICcsIEBsaXN0KSwgIlxuIjsKCgo9aGVhZDIgUmVwb3NpdG9yeSBpbnRl
cmFjdGlvbiB3aXRoIG90aGVyIENvbnMgZmVhdHVyZXMKCkNvbnMnIGhhbmRsaW5nIG9mIHJl
cG9zaXRvcnkgdHJlZXMgaW50ZXJhY3RzIGNvcnJlY3RseSB3aXRoIG90aGVyIENvbnMKZmVh
dHVyZXMtLXdoaWNoIGlzIHRvIHNheSwgaXQgZ2VuZXJhbGx5IGRvZXMgd2hhdCB5b3Ugd291
bGQgZXhwZWN0LgoKTW9zdCBub3RhYmx5LCByZXBvc2l0b3J5IHRyZWVzIGludGVyYWN0IGNv
cnJlY3RseSwgYW5kIHJhdGhlciBwb3dlcmZ1bGx5LAp3aXRoIHRoZSAnTGluaycgY29tbWFu
ZC4gIEEgcmVwb3NpdG9yeSB0cmVlIG1heSBjb250YWluIG9uZSBvciBtb3JlCnN1YmRpcmVj
dG9yaWVzIGZvciB2ZXJzaW9uIGJ1aWxkcyBlc3RhYmxpc2hlZCB2aWEgQzxMaW5rPiB0byBh
IHNvdXJjZQpzdWJkaXJlY3RvcnkuICBDb25zIHdpbGwgc2VhcmNoIGZvciBkZXJpdmVkIGZp
bGVzIGluIHRoZSBhcHByb3ByaWF0ZSBidWlsZApzdWJkaXJlY3RvcmllcyB1bmRlciB0aGUg
cmVwb3NpdG9yeSB0cmVlLgoKCj1oZWFkMSBEZWZhdWx0IHRhcmdldHMKClVudGlsIG5vdywg
d2UndmUgZGVtb25zdHJhdGVkIGludm9raW5nIENvbnMgd2l0aCBhbiBleHBsaWNpdCB0YXJn
ZXQKdG8gYnVpbGQ6CgogICUgY29ucyBoZWxsbwoKTm9ybWFsbHksIENvbnMgZG9lcyBub3Qg
YnVpbGQgYW55dGhpbmcgdW5sZXNzIGEgdGFyZ2V0IGlzIHNwZWNpZmllZCwKYnV0IHNwZWNp
ZnlpbmcgJy4nICh0aGUgY3VycmVudCBkaXJlY3RvcnkpIHdpbGwgYnVpbGQgZXZlcnl0aGlu
ZzoKCiAgJSBjb25zCQkjIGRvZXMgbm90IGJ1aWxkIGFueXRoaW5nCgogICUgY29ucyAuCQkj
IGJ1aWxkcyBldmVyeXRoaW5nIHVuZGVyIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5CgpBZGRp
bmcgdGhlIEM8RGVmYXVsdD4gbWV0aG9kIHRvIGFueSBGPENvbnN0cnVjdD4gb3IgRjxDb25z
Y3JpcHQ+IGZpbGUgd2lsbCBhZGQKdGhlIHNwZWNpZmllZCB0YXJnZXRzIHRvIGEgbGlzdCBv
ZiBkZWZhdWx0IHRhcmdldHMuICBDb25zIHdpbGwgYnVpbGQKdGhlc2UgZGVmYXVsdHMgaWYg
dGhlcmUgYXJlIG5vIHRhcmdldHMgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUuClNv
IGFkZGluZyB0aGUgZm9sbG93aW5nIGxpbmUgdG8gdGhlIHRvcC1sZXZlbCBGPENvbnN0cnVj
dD4gZmlsZSB3aWxsIG1pbWljCk1ha2UncyB0eXBpY2FsIGJlaGF2aW9yIG9mIGJ1aWxkaW5n
IGV2ZXJ5dGhpbmcgYnkgZGVmYXVsdDoKCiAgRGVmYXVsdCAnLic7CgpUaGUgZm9sbG93aW5n
IHdvdWxkIGFkZCB0aGUgRjxoZWxsbz4gYW5kIEY8Z29vZGJ5ZT4gY29tbWFuZHMgKGluIHRo
ZQpzYW1lIGRpcmVjdG9yeSBhcyB0aGUgRjxDb25zdHJ1Y3Q+IG9yIEY8Q29uc2NyaXB0PiBm
aWxlKSB0byB0aGUgZGVmYXVsdCBsaXN0OgoKICBEZWZhdWx0IHF3KAoJaGVsbG8KCWdvb2Ri
eWUKICApOwoKVGhlIEM8RGVmYXVsdD4gbWV0aG9kIG1heSBiZSB1c2VkIG1vcmUgdGhhbiBv
bmNlIHRvIGFkZCB0YXJnZXRzIHRvIHRoZQpkZWZhdWx0IGxpc3QuCgo9aGVhZDEgU2VsZWN0
aXZlIGJ1aWxkcwoKQ29ucyBwcm92aWRlcyB0d28gbWV0aG9kcyBmb3IgcmVkdWNpbmcgdGhl
IHNpemUgb2YgZ2l2ZW4gYnVpbGQuIFRoZSBmaXJzdCBpcwpieSBzcGVjaWZ5aW5nIHRhcmdl
dHMgb24gdGhlIGNvbW1hbmQgbGluZSwgYW5kIHRoZSBzZWNvbmQgaXMgYSBtZXRob2QgZm9y
CnBydW5pbmcgdGhlIGJ1aWxkIHRyZWUuIFdlJ2xsIGNvbnNpZGVyIHRhcmdldCBzcGVjaWZp
Y2F0aW9uIGZpcnN0LgoKCj1oZWFkMiBTZWxlY3RpdmUgdGFyZ2V0aW5nCgpMaWtlIG1ha2Us
IENvbnMgYWxsb3dzIHRoZSBzcGVjaWZpY2F0aW9uIG9mIGBgdGFyZ2V0cycnIG9uIHRoZSBj
b21tYW5kCmxpbmUuIENvbnMgdGFyZ2V0cyBtYXkgYmUgZWl0aGVyIGZpbGVzIG9yIGRpcmVj
dG9yaWVzLiBXaGVuIGEgZGlyZWN0b3J5IGlzCnNwZWNpZmllZCwgdGhpcyBpcyBzaW1wbHkg
YSBzaG9ydC1oYW5kIG5vdGF0aW9uIGZvciBldmVyeSBkZXJpdmFibGUKcHJvZHVjdC0tdGhh
dCBDb25zIGtub3dzIGFib3V0LS1pbiB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSBhbmQgYmVs
b3cuIEZvcgpleGFtcGxlOgoKICAlIGNvbnMgYnVpbGQvaGVsbG8vaGVsbG8ubwoKbWVhbnMg
YnVpbGQgRjxoZWxsby5vPiBhbmQgZXZlcnl0aGluZyB0aGF0IEY8aGVsbG8ubz4gbWlnaHQg
bmVlZC4gVGhpcyBpcwpmcm9tIGEgcHJldmlvdXMgdmVyc2lvbiBvZiB0aGUgQjxIZWxsbywg
V29ybGQhPiBwcm9ncmFtIGluIHdoaWNoIEY8aGVsbG8ubz4KZGVwZW5kZWQgdXBvbiBGPGV4
cG9ydC9pbmNsdWRlL3dvcmxkLmg+LiBJZiB0aGF0IGZpbGUgaXMgbm90IHVwLXRvLWRhdGUK
KGJlY2F1c2Ugc29tZW9uZSBtb2RpZmllZCBGPHNyYy93b3JsZC93b3JsZC5oKT4sIHRoZW4g
aXQgd2lsbCBiZSByZWJ1aWx0LApldmVuIHRob3VnaCBpdCBpcyBpbiBhIGRpcmVjdG9yeSBy
ZW1vdGUgZnJvbSBGPGJ1aWxkL2hlbGxvPi4KCkluIHRoaXMgZXhhbXBsZToKCiAgJSBjb25z
IGJ1aWxkCgpFdmVyeXRoaW5nIGluIHRoZSBGPGJ1aWxkPiBkaXJlY3RvcnkgaXMgYnVpbHQs
IGlmIG5lY2Vzc2FyeS4gQWdhaW4sIHRoaXMgbWF5CmNhdXNlIG1vcmUgZmlsZXMgdG8gYmUg
YnVpbHQuIEluIHBhcnRpY3VsYXIsIGJvdGggRjxleHBvcnQvaW5jbHVkZS93b3JsZC5oPgph
bmQgRjxleHBvcnQvbGliL2xpYndvcmxkLmE+IGFyZSByZXF1aXJlZCBieSB0aGUgRjxidWls
ZC9oZWxsbz4gZGlyZWN0b3J5LAphbmQgc28gdGhleSB3aWxsIGJlIGJ1aWx0IGlmIHRoZXkg
YXJlIG91dC1vZi1kYXRlLgoKSWYgd2UgZG8sIGluc3RlYWQ6CgogICUgY29ucyBleHBvcnQK
CnRoZW4gb25seSB0aGUgZmlsZXMgdGhhdCBzaG91bGQgYmUgaW5zdGFsbGVkIGluIHRoZSBl
eHBvcnQgZGlyZWN0b3J5IHdpbGwgYmUKcmVidWlsdCwgaWYgbmVjZXNzYXJ5LCBhbmQgdGhl
biBpbnN0YWxsZWQgdGhlcmUuIE5vdGUgdGhhdCBDPGNvbnMgYnVpbGQ+Cm1pZ2h0IGJ1aWxk
IGZpbGVzIHRoYXQgQzxjb25zIGV4cG9ydD4gZG9lc24ndCBidWlsZCwgYW5kIHZpY2UtdmVy
c2EuCgoKPWhlYWQyIE5vIGBgc3BlY2lhbCcnIHRhcmdldHMKCldpdGggQ29ucywgbWFrZS1z
dHlsZSBgYHNwZWNpYWwnJyB0YXJnZXRzIGFyZSBub3QgcmVxdWlyZWQuIFRoZSBzaW1wbGVz
dAphbmFsb2cgd2l0aCBDb25zIGlzIHRvIHVzZSBzcGVjaWFsIEY8ZXhwb3J0PiBkaXJlY3Rv
cmllcywgaW5zdGVhZC4gTGV0J3MKc3VwcG9zZSwgZm9yIGV4YW1wbGUsIHRoYXQgeW91IGhh
dmUgYSB3aG9sZSBzZXJpZXMgb2YgdW5pdCB0ZXN0cyB0aGF0IGFyZQphc3NvY2lhdGVkIHdp
dGggeW91ciBjb2RlLiBUaGUgdGVzdHMgbGl2ZSBpbiB0aGUgc291cmNlIGRpcmVjdG9yeSBu
ZWFyIHRoZQpjb2RlLiBOb3JtYWxseSwgaG93ZXZlciwgeW91IGRvbid0IHdhbnQgdG8gYnVp
bGQgdGhlc2UgdGVzdHMuIE9uZSBzb2x1dGlvbgppcyB0byBwcm92aWRlIGFsbCB0aGUgYnVp
bGQgaW5zdHJ1Y3Rpb25zIGZvciBjcmVhdGluZyB0aGUgdGVzdHMsIGFuZCB0aGVuIHRvCmlu
c3RhbGwgdGhlIHRlc3RzIGludG8gYSBzZXBhcmF0ZSBwYXJ0IG9mIHRoZSB0cmVlLiBJZiB3
ZSBpbnN0YWxsIHRoZSB0ZXN0cwppbiBhIHRvcC1sZXZlbCBkaXJlY3RvcnkgY2FsbGVkIEY8
dGVzdHM+LCB0aGVuOgoKICAlIGNvbnMgdGVzdHMKCndpbGwgYnVpbGQgYWxsIHRoZSB0ZXN0
cy4KCiAgJSBjb25zIGV4cG9ydAoKd2lsbCBidWlsZCB0aGUgcHJvZHVjdGlvbiB2ZXJzaW9u
IG9mIHRoZSBzeXN0ZW0gKGJ1dCBub3QgdGhlIHRlc3RzKSwgYW5kOgoKICAlIGNvbnMgYnVp
bGQKCnNob3VsZCBwcm9iYWJseSBiZSBhdm9pZGVkIChzaW5jZSBpdCB3aWxsIGNvbXBpbGUg
dGVzdHMgdW5lY2Vzc2FyaWx5KS4KCklmIHlvdSB3YW50IHRvIGJ1aWxkIGp1c3QgYSBzaW5n
bGUgdGVzdCwgdGhlbiB5b3UgY291bGQgZXhwbGljaXRseSBuYW1lIHRoZQp0ZXN0IChpbiBl
aXRoZXIgdGhlIEY8dGVzdHM+IGRpcmVjdG9yeSBvciB0aGUgRjxidWlsZD4gZGlyZWN0b3J5
KS4gWW91IGNvdWxkCmFsc28gYWdncmVnYXRlIHRoZSB0ZXN0cyBpbnRvIGEgY29udmVuaWVu
dCBoaWVyYXJjaHkgd2l0aGluIHRoZSB0ZXN0cwpkaXJlY3RvcnkuIFRoaXMgaGllcmFyY2h5
IG5lZWQgbm90IG5lY2Vzc2FyaWx5IG1hdGNoIHRoZSBzb3VyY2UgaGllcmFyY2h5LAppbiBt
dWNoIHRoZSBzYW1lIG1hbm5lciB0aGF0IHRoZSBpbmNsdWRlIGhpZXJhcmNoeSBwcm9iYWJs
eSBkb2Vzbid0IG1hdGNoCnRoZSBzb3VyY2UgaGllcmFyY2h5ICh0aGUgaW5jbHVkZSBoaWVy
YXJjaHkgaXMgdW5saWtlbHkgdG8gYmUgbW9yZSB0aGFuIHR3bwpsZXZlbHMgZGVlcCwgZm9y
IEMgcHJvZ3JhbXMpLgoKSWYgeW91IHdhbnQgdG8gYnVpbGQgYWJzb2x1dGVseSBldmVyeXRo
aW5nIGluIHRoZSB0cmVlIChzdWJqZWN0IHRvIHdoYXRldmVyCm9wdGlvbnMgeW91IHNlbGVj
dCksIHlvdSBjYW4gdXNlOgoKICAlIGNvbnMgLgoKVGhpcyBpcyBub3QgcGFydGljdWxhcmx5
IGVmZmljaWVudCwgc2luY2UgaXQgd2lsbCByZWR1bmRhbnRseSB3YWxrIGFsbCB0aGUKdHJl
ZXMsIGluY2x1ZGluZyB0aGUgc291cmNlIHRyZWUuIFRoZSBzb3VyY2UgdHJlZSwgb2YgY291
cnNlLCBtYXkgaGF2ZQpidWlsZGFibGUgb2JqZWN0cyBpbiBpdC0tbm90aGluZyBzdG9wcyB5
b3UgZnJvbSBkb2luZyB0aGlzLCBldmVuIGlmIHlvdQpub3JtYWxseSBidWlsZCBpbiBhIHNl
cGFyYXRlIGJ1aWxkIHRyZWUuCgoKPWhlYWQxIEJ1aWxkIFBydW5pbmcKCkluIGNvbmp1bmN0
aW9uIHdpdGggdGFyZ2V0IHNlbGVjdGlvbiwgQjxidWlsZCBwcnVuaW5nPiBjYW4gYmUgdXNl
ZCB0byByZWR1Y2UKdGhlIHNjb3BlIG9mIHRoZSBidWlsZC4gSW4gdGhlIHByZXZpb3VzIHBl
QWNIIGFuZCBiYU5hTmEgZXhhbXBsZSwgd2UgaGF2ZQphbHJlYWR5IHNlZW4gaG93IHNjcmlw
dC1kcml2ZW4gYnVpbGQgcHJ1bmluZyBjYW4gYmUgdXNlZCB0byBtYWtlIG9ubHkgaGFsZgpv
ZiB0aGUgcG90ZW50aWFsIGJ1aWxkIGF2YWlsYWJsZSBmb3IgYW55IGdpdmVuIGludm9jYXRp
b24gb2YgQzxjb25zPi4gQ29ucwphbHNvIHByb3ZpZGVzLCBhcyBhIGNvbnZlbmllbmNlLCBh
IGNvbW1hbmQgbGluZSBjb252ZW50aW9uIHRoYXQgYWxsb3dzIHlvdQp0byBzcGVjaWZ5IHdo
aWNoIEY8Q29uc2NyaXB0PiBmaWxlcyBhY3R1YWxseSBnZXQgYGBidWlsdCcnLS10aGF0IGlz
LAppbmNvcnBvcmF0ZWQgaW50byB0aGUgYnVpbGQgdHJlZS4gRm9yIGV4YW1wbGU6CgogICUg
Y29ucyBidWlsZCArd29ybGQKClRoZSBDPCs+IGFyZ3VtZW50IGludHJvZHVjZXMgYSBQZXJs
IHJlZ3VsYXIgZXhwcmVzc2lvbi4gVGhpcyBtdXN0LCBvZgpjb3Vyc2UsIGJlIHF1b3RlZCBh
dCB0aGUgc2hlbGwgbGV2ZWwgaWYgdGhlcmUgYXJlIGFueSBzaGVsbCBtZXRhLWNoYXJhY3Rl
cnMKd2l0aGluIHRoZSBleHByZXNzaW9uLiBUaGUgZXhwcmVzc2lvbiBpcyBtYXRjaGVkIGFn
YWluc3QgZWFjaCBGPENvbnNjcmlwdD4KZmlsZSB3aGljaCBoYXMgYmVlbiBtZW50aW9uZWQg
aW4gYSBDPEJ1aWxkPiBzdGF0ZW1lbnQsIGFuZCBvbmx5IHRob3NlCnNjcmlwdHMgd2l0aCBt
YXRjaGluZyBuYW1lcyBhcmUgYWN0dWFsbHkgaW5jb3Jwb3JhdGVkIGludG8gdGhlIGJ1aWxk
CnRyZWUuIE11bHRpcGxlIHN1Y2ggYXJndW1lbnRzIGFyZSBhbGxvd2VkLCBpbiB3aGljaCBj
YXNlIGEgbWF0Y2ggYWdhaW5zdCBhbnkKb2YgdGhlbSBpcyBzdWZmaWNpZW50IHRvIGNhdXNl
IGEgc2NyaXB0IHRvIGJlIGluY2x1ZGVkLgoKSW4gdGhlIGV4YW1wbGUsIGFib3ZlLCB0aGUg
RjxoZWxsbz4gcHJvZ3JhbSB3aWxsIG5vdCBiZSBidWlsdCwgc2luY2UgQ29ucwp3aWxsIGhh
dmUgbm8ga25vd2xlZGdlIG9mIHRoZSBzY3JpcHQgRjxoZWxsby9Db25zY3JpcHQ+LiBUaGUg
RjxsaWJ3b3JsZC5hPgphcmNoaXZlIHdpbGwgYmUgYnVpbHQsIGhvd2V2ZXIsIGlmIG5lZWQg
YmUuCgpUaGVyZSBhcmUgYSBjb3VwbGUgb2YgdXNlcyBmb3IgYnVpbGQgcHJ1bmluZyB2aWEg
dGhlIGNvbW1hbmQgbGluZS4gUGVyaGFwcwp0aGUgbW9zdCB1c2VmdWwgaXMgdGhlIGFiaWxp
dHkgdG8gbWFrZSBsb2NhbCBjaGFuZ2VzLCBhbmQgdGhlbiwgd2l0aApzdWZmaWNpZW50IGtu
b3dsZWRnZSBvZiB0aGUgY29uc2VxdWVuY2VzIG9mIHRob3NlIGNoYW5nZXMsIHJlc3RyaWN0
IHRoZSBzaXplCm9mIHRoZSBidWlsZCB0cmVlIGluIG9yZGVyIHRvIHNwZWVkIHVwIHRoZSBy
ZWJ1aWxkIHRpbWUuIEEgc2Vjb25kIHVzZSBmb3IKYnVpbGQgcHJ1bmluZyBpcyB0byBhY3Rp
dmVseSBwcmV2ZW50IHRoZSByZWNvbXBpbGF0aW9uIG9mIGNlcnRhaW4gZmlsZXMgdGhhdAp5
b3Uga25vdyB3aWxsIHJlY29tcGlsZSBkdWUgdG8sIGZvciBleGFtcGxlLCBhIG1vZGlmaWVk
IGhlYWRlciBmaWxlLiBZb3UgbWF5Cmtub3cgdGhhdCBlaXRoZXIgdGhlIGNoYW5nZXMgdG8g
dGhlIGhlYWRlciBmaWxlIGFyZSBpbW1hdGVyaWFsLCBvciB0aGF0IHRoZQpjaGFuZ2VzIG1h
eSBiZSBzYWZlbHkgaWdub3JlZCBmb3IgbW9zdCBvZiB0aGUgdHJlZSwgZm9yIHRlc3RpbmcK
cHVycG9zZXMuV2l0aCBDb25zLCB0aGUgdmlldyBpcyB0aGF0IGl0IGlzIHByYWdtYXRpYyB0
byBhZG1pdCB0aGlzIHR5cGUgb2YKYmVoYXZpb3IsIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcg
dGhhdCBvbiB0aGUgbmV4dCBmdWxsIGJ1aWxkIGV2ZXJ5dGhpbmcgdGhhdApuZWVkcyB0byBi
ZSByZWJ1aWx0IHdpbGwgYmUuIFRoZXJlIGlzIG5vIGVxdWl2YWxlbnQgdG8gYSBgYG1ha2Ug
dG91Y2gnJwpjb21tYW5kLCB0byBtYXJrIGZpbGVzIGFzIHBlcm1hbmVudGx5IHVwLXRvLWRh
dGUuIFNvIGFueSByaXNrIHRoYXQgaXMKaW5jdXJyZWQgYnkgYnVpbGQgcHJ1bmluZyBpcyBt
aXRpZ2F0ZWQuIEZvciByZWxlYXNlIHF1YWxpdHkgd29yaywgb2J2aW91c2x5LAp3ZSByZWNv
bW1lbmQgdGhhdCB5b3UgZG8gbm90IHVzZSBidWlsZCBwcnVuaW5nIChpdCdzIHBlcmZlY3Rs
eSBPSyB0byB1c2UKZHVyaW5nIGludGVncmF0aW9uLCBob3dldmVyLCBmb3IgY2hlY2tpbmcg
Y29tcGlsYXRpb24sIGV0Yy4gSnVzdCBiZSBzdXJlIHRvCmRvIGFuIHVuY29uc3RyYWluZWQg
YnVpbGQgYmVmb3JlIGNvbW1pdHRpbmcgdGhlIGludGVncmF0aW9uKS4KCgo9aGVhZDEgVGVt
cG9yYXJ5IG92ZXJyaWRlcwoKQ29ucyBwcm92aWRlcyBhIHZlcnkgc2ltcGxlIG1lY2hhbmlz
bSBmb3Igb3ZlcnJpZGluZyBhc3BlY3RzIG9mIGEgYnVpbGQuIFRoZQplc3NlbmNlIGlzIHRo
YXQgeW91IHdyaXRlIGFuIG92ZXJyaWRlIGZpbGUgY29udGFpbmluZyBvbmUgb3IgbW9yZQpD
PE92ZXJyaWRlPiBjb21tYW5kcywgYW5kIHlvdSBzcGVjaWZ5IHRoaXMgb24gdGhlIGNvbW1h
bmQgbGluZSwgd2hlbiB5b3UgcnVuCkM8Y29ucz46CgogICUgY29ucyAtbyBvdmVyIGV4cG9y
dAoKd2lsbCBidWlsZCB0aGUgRjxleHBvcnQ+IGRpcmVjdG9yeSwgd2l0aCBhbGwgZGVyaXZl
ZCBmaWxlcyBzdWJqZWN0IHRvIHRoZQpvdmVycmlkZXMgcHJlc2VudCBpbiB0aGUgRjxvdmVy
PiBmaWxlLiBJZiB5b3UgbGVhdmUgb3V0IHRoZSBDPC1vPiBvcHRpb24sCnRoZW4gZXZlcnl0
aGluZyBuZWNlc3NhcnkgdG8gcmVtb3ZlIGFsbCBvdmVycmlkZXMgd2lsbCBiZSByZWJ1aWx0
LgoKCj1oZWFkMiBPdmVycmlkaW5nIGVudmlyb25tZW50IHZhcmlhYmxlcwoKVGhlIG92ZXJy
aWRlIGZpbGUgY2FuIGNvbnRhaW4gdHdvIHR5cGVzIG9mIG92ZXJyaWRlcy4gVGhlIGZpcnN0
IGlzIGluY29taW5nCmVudmlyb25tZW50IHZhcmlhYmxlcy4gVGhlc2UgYXJlIG5vcm1hbGx5
IGFjY2Vzc2libGUgYnkgdGhlIEY8Q29uc3RydWN0PgpmaWxlIGZyb20gdGhlIEM8JUVOVj4g
aGFzaCB2YXJpYWJsZS4gVGhlc2UgY2FuIHRyaXZpYWxseSBiZSBvdmVycmlkZGVuIGluCnRo
ZSBvdmVycmlkZSBmaWxlIGJ5IHNldHRpbmcgdGhlIGFwcHJvcHJpYXRlIGVsZW1lbnRzIG9m
IEM8JUVOVj4gKHRoZXNlCmNvdWxkIGFsc28gYmUgb3ZlcnJpZGRlbiBpbiB0aGUgdXNlcidz
IGVudmlyb25tZW50LCBvZiBjb3Vyc2UpLgoKCj1oZWFkMiBUaGUgT3ZlcnJpZGUgY29tbWFu
ZAoKVGhlIHNlY29uZCB0eXBlIG9mIG92ZXJyaWRlIGlzIGFjY29tcGxpc2hlZCB3aXRoIHRo
ZSBDPE92ZXJyaWRlPiBjb21tYW5kLAp3aGljaCBsb29rcyBsaWtlIHRoaXM6CgogIE92ZXJy
aWRlIDxyZWdleHA+LCA8dmFyMT4gPT4gPHZhbHVlMT4sIDx2YXIyPiA9PiA8dmFsdWUyPiwg
Li4uOwoKVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBJPHJlZ2V4cD4gaXMgbWF0Y2hlZCBhZ2Fp
bnN0IGV2ZXJ5IGRlcml2ZWQgZmlsZSB0aGF0CmlzIGEgY2FuZGlkYXRlIGZvciB0aGUgYnVp
bGQuIElmIHRoZSBkZXJpdmVkIGZpbGUgbWF0Y2hlcywgdGhlbiB0aGUKdmFyaWFibGUvdmFs
dWUgcGFpcnMgYXJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIHZhbHVlcyBpbiB0aGUgY29uc3Ry
dWN0aW9uCmVudmlyb25tZW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgZGVyaXZlZCBmaWxlLgoK
TGV0J3Mgc3VwcG9zZSB0aGF0IHdlIGhhdmUgYSBjb25zdHJ1Y3Rpb24gZW52aXJvbm1lbnQg
bGlrZSB0aGlzOgoKICAkQ09OUyA9IG5ldyBjb25zKAoJQ09QVCA9PiAnJywKCUNEQkcgPT4g
Jy1nJywKCUNGTEFHUyA9PiAnJUNPUFQgJUNEQkcnLAogICk7CgpUaGVuIGlmIHdlIGhhdmUg
YW4gb3ZlcnJpZGUgZmlsZSBGPG92ZXI+IGNvbnRhaW5pbmcgdGhpcyBjb21tYW5kOgoKICBP
dmVycmlkZSAnXC5vJCcsIENPUFQgPT4gJy1PJywgQ0RCRyA9PiAnJzsKCnRoZW4gYW55IEM8
Y29ucz4gaW52b2NhdGlvbiB3aXRoIEM8LW8gb3Zlcj4gdGhhdCBjcmVhdGVzIEY8Lm8+IGZp
bGVzIHZpYQp0aGlzIGVudmlyb25tZW50IHdpbGwgY2F1c2UgdGhlbSB0byBiZSBjb21waWxl
ZCB3aXRoIEM8LU8gPmFuZCBubyBDPC1nPi4gVGhlCm92ZXJyaWRlIGNvdWxkLCBvZiBjb3Vy
c2UsIGJlIHJlc3RyaWN0ZWQgdG8gYSBzaW5nbGUgZGlyZWN0b3J5IGJ5IHRoZQphcHByb3By
aWF0ZSBzZWxlY3Rpb24gb2YgYSByZWd1bGFyIGV4cHJlc3Npb24uCgpIZXJlJ3MgdGhlIG9y
aWdpbmFsIHZlcnNpb24gb2YgdGhlIEhlbGxvLCBXb3JsZCEgcHJvZ3JhbSwgYnVpbHQgd2l0
aCB0aGlzCmVudmlyb25tZW50LiBOb3RlIHRoYXQgQ29ucyByZWJ1aWxkcyB0aGUgYXBwcm9w
cmlhdGUgcGllY2VzIHdoZW4gdGhlCm92ZXJyaWRlIGlzIGFwcGxpZWQgb3IgcmVtb3ZlZDoK
CiAgJSBjb25zIGhlbGxvCiAgY2MgLWcgLWMgaGVsbG8uYyAtbyBoZWxsby5vCiAgY2MgLW8g
aGVsbG8gaGVsbG8ubwogICUgY29ucyAtbyBvdmVyIGhlbGxvCiAgY2MgLU8gLWMgaGVsbG8u
YyAtbyBoZWxsby5vCiAgY2MgLW8gaGVsbG8gaGVsbG8ubwogICUgY29ucyAtbyBvdmVyIGhl
bGxvCiAgY29uczogImhlbGxvIiBpcyB1cC10by1kYXRlLgogICUgY29ucyBoZWxsbwogIGNj
IC1nIC1jIGhlbGxvLmMgLW8gaGVsbG8ubwogIGNjIC1vIGhlbGxvIGhlbGxvLm8KCkl0J3Mg
aW1wb3J0YW50IHRoYXQgdGhlIEM8T3ZlcnJpZGU+IGNvbW1hbmQgb25seSBiZSB1c2VkIGZv
ciB0ZW1wb3JhcnksCm9uLXRoZS1mbHkgb3ZlcnJpZGVzIG5lY2Vzc2FyeSBmb3IgZGV2ZWxv
cG1lbnQgYmVjYXVzZSB0aGUgb3ZlcnJpZGVzIGFyZSBub3QKcGxhdGZvcm0gaW5kZXBlbmRl
bnQgYW5kIGJlY2F1c2UgdGhleSByZWx5IHRvbyBtdWNoIG9uIGludGltYXRlIGtub3dsZWRn
ZSBvZgp0aGUgd29ya2luZ3Mgb2YgdGhlIHNjcmlwdHMuIEZvciB0ZW1wb3JhcnkgdXNlLCBo
b3dldmVyLCB0aGV5IGFyZSBleGFjdGx5CndoYXQgeW91IHdhbnQuCgpOb3RlIHRoYXQgaXQg
aXMgc3RpbGwgdXNlZnVsIHRvIHByb3ZpZGUsIHNheSwgdGhlIGFiaWxpdHkgdG8gY3JlYXRl
IGEgZnVsbHkKb3B0aW1pemVkIHZlcnNpb24gb2YgYSBzeXN0ZW0gZm9yIHByb2R1Y3Rpb24g
dXNlLS1mcm9tIHRoZSBGPENvbnN0cnVjdD4gYW5kCkY8Q29uc2NyaXB0PiBmaWxlcy4gVGhp
cyB3YXkgeW91IGNhbiB0YWlsb3IgdGhlIG9wdGltaXplZCBzeXN0ZW0gdG8gdGhlCnBsYXRm
b3JtLiBXaGVyZSBvcHRpbWl6ZXIgdHJhZGUtb2ZmcyBuZWVkIHRvIGJlIG1hZGUgKHBhcnRp
Y3VsYXIgZmlsZXMgbWF5Cm5vdCBiZSBjb21waWxlZCB3aXRoIGZ1bGwgb3B0aW1pemF0aW9u
LCBmb3IgZXhhbXBsZSksIHRoZW4gdGhlc2UgY2FuIGJlCnJlY29yZGVkIGZvciBwb3N0ZXJp
dHkgKGFuZCByZXByb2R1Y2liaWxpdHkpIGRpcmVjdGx5IGluIHRoZSBzY3JpcHRzLgoKCj1o
ZWFkMSBNb3JlIG9uIGNvbnN0cnVjdGlvbiBlbnZpcm9ubWVudHMKCj1oZWFkMiBEZWZhdWx0
IGNvbnN0cnVjdGlvbiB2YXJpYWJsZXMKCldlIGhhdmUgbWVudGlvbmVkLCBhbmQgdXNlZCwg
dGhlIGNvbmNlcHQgb2YgYSBCPGNvbnN0cnVjdGlvbiBlbnZpcm9ubWVudD4sCm1hbnkgdGlt
ZXMgaW4gdGhlIHByZWNlZGluZyBwYWdlcy4gTm93IGl0J3MgdGltZSB0byBtYWtlIHRoaXMg
YSBsaXR0bGUgbW9yZQpjb25jcmV0ZS4gV2l0aCB0aGUgZm9sbG93aW5nIHN0YXRlbWVudDoK
CiAgJGVudiA9IG5ldyBjb25zKCk7CgphIHJlZmVyZW5jZSB0byBhIG5ldywgZGVmYXVsdCBj
b25zdHJ1Y3Rpb24gZW52aXJvbm1lbnQgaXMgY3JlYXRlZC4gVGhpcwpjb250YWlucyBhIG51
bWJlciBvZiBjb25zdHJ1Y3Rpb24gdmFyaWFibGVzIGFuZCBzb21lIG1ldGhvZHMuIEF0IHRo
ZSBwcmVzZW50CndyaXRpbmcsIHRoZSBkZWZhdWx0IGxpc3Qgb2YgY29uc3RydWN0aW9uIHZh
cmlhYmxlcyBpcyBkZWZpbmVkIGFzIGZvbGxvd3M6CgogIENDCQk9PiAnY2MnLAogIENGTEFH
Uwk9PiAnJywKICBDQ0NPTQkJPT4gJyVDQyAlQ0ZMQUdTICVfSUZMQUdTIC1jICU8IC1vICU+
JywKICBJTkNESVJQUkVGSVggID0+ICctSScsCiAgQ1hYCQk9PiAnJUNDJywKICBDWFhGTEFH
Uwk9PiAnJUNGTEFHUycsCiAgQ1hYQ09NCT0+ICclQ1hYICVDWFhGTEFHUyAlX0lGTEFHUyAt
YyAlPCAtbyAlPicsCiAgTElOSwkJPT4gJyVDWFgnLAogIExJTktDT00JPT4gJyVMSU5LICVM
REZMQUdTIC1vICU+ICU8ICVfTERJUlMgJUxJQlMnLAogIExJTktNT0RVTEVDT00JPT4gJyVM
RCAtciAtbyAlPiAlPCcsCiAgTElCRElSUFJFRklYICA9PiAnLUwnLAogIEFSCQk9PiAnYXIn
LAogIEFSRkxBR1MJPT4gJ3InLAogIEFSQ09NCQk9PiAiJUFSICVBUkZMQUdTICU+ICU8XG4l
UkFOTElCICU+IiwKICBSQU5MSUIJPT4gJ3JhbmxpYicsCiAgQVMJCT0+ICdhcycsCiAgQVNG
TEFHUwk9PiAnJywKICBBU0NPTQkJPT4gJyVBUyAlQVNGTEFHUyAlPCAtbyAlPicsCiAgTEQJ
CT0+ICdsZCcsCiAgTERGTEFHUwk9PiAnJywKICBQUkVGTElCCT0+ICdsaWInLAogIFNVRkxJ
Qgk9PiAnLmEnLAogIFNVRkxJQlMJPT4gJy5zbzouYScsCiAgU1VGT0JKCT0+ICcubycsCiAg
RU5WCQk9PiB7ICdQQVRIJyA9PiAnL2JpbjovdXNyL2JpbicgfSwKCgpPbiBXaW4zMiBzeXN0
ZW1zIChXaW5kb3dzIE5UKSwgdGhlIGZvbGxvd2luZyBjb25zdHJ1Y3Rpb24gdmFyaWFibGVz
CmFyZSBvdmVycmlkZGVuIGluIHRoZSBkZWZhdWx0OgoKICBDQwkJPT4gJ2NsJywKICBDRkxB
R1MJPT4gJy9ub2xvZ28nLAogIENDQ09NCQk9PiAnJUNDICVDRkxBR1MgJV9JRkxBR1MgL2Mg
JTwgL0ZvJT4nLAogIENYWENPTSAgICAgICAgPT4gJyVDWFggJUNYWEZMQUdTICVfSUZMQUdT
IC9jICU8IC9GbyU+JywKICBJTkNESVJQUkVGSVggID0+ICcvSScsCiAgTElOSwkJPT4gJ2xp
bmsnLAogIExJTktDT00JPT4gJyVMSU5LICVMREZMQUdTIC9vdXQ6JT4gJTwgJV9MRElSUyAl
TElCUycsCiAgTElOS01PRFVMRUNPTQk9PiAnJUxEIC9yIC9vICU+ICU8JywKICBMSUJESVJQ
UkVGSVggID0+ICcvTElCUEFUSDonLAogIEFSCQk9PiAnbGliJywKICBBUkZMQUdTCT0+ICcv
bm9sb2dvICcsCiAgQVJDT00JCT0+ICIlQVIgJUFSRkxBR1MgL291dDolPiAlPCIsCiAgUkFO
TElCCT0+ICcnLAogIExECQk9PiAnbGluaycsCiAgTERGTEFHUwk9PiAnL25vbG9nbyAnLAog
IFBSRUZMSUIJPT4gJycsCiAgU1VGRVhFCT0+ICcuZXhlJywKICBTVUZMSUIJPT4gJy5saWIn
LAogIFNVRkxJQlMJPT4gJy5kbGw6LmxpYicsCiAgU1VGT0JKCT0+ICcub2JqJywKClRoZXNl
IHZhcmlhYmxlcyBhcmUgdXNlZCBieSB0aGUgdmFyaW91cyBtZXRob2RzIGFzc29jaWF0ZWQg
d2l0aCB0aGUKZW52aXJvbm1lbnQsIGluIHBhcnRpY3VsYXIgYW55IG1ldGhvZCB0aGF0IHVs
dGltYXRlbHkgaW52b2tlcyBhbiBleHRlcm5hbApjb21tYW5kIHdpbGwgc3Vic3RpdHV0ZSB0
aGVzZSB2YXJpYWJsZXMgaW50byB0aGUgZmluYWwgY29tbWFuZCwgYXMKYXBwcm9wcmlhdGUu
IEZvciBleGFtcGxlLCB0aGUgQzxPYmplY3RzPiBtZXRob2QgdGFrZXMgYSBudW1iZXIgb2Yg
c291cmNlCmZpbGVzIGFuZCBhcnJhbmdlcyB0byBkZXJpdmUsIGlmIG5lY2Vzc2FyeSwgdGhl
IGNvcnJlc3BvbmRpbmcgb2JqZWN0CmZpbGVzLiBGb3IgZXhhbXBsZToKCiAgT2JqZWN0cyAk
ZW52ICdmb28uYycsICdiYXIuYyc7CgpUaGlzIHdpbGwgYXJyYW5nZSB0byBwcm9kdWNlLCBp
ZiBuZWNlc3NhcnksIEY8Zm9vLm8+IGFuZCBGPGJhci5vPi4gVGhlCmNvbW1hbmQgaW52b2tl
ZCBpcyBzaW1wbHkgQzwlQ0NDT00+LCB3aGljaCBleHBhbmRzIHRocm91Z2ggc3Vic3RpdHV0
aW9uLCB0bwp0aGUgYXBwcm9wcmlhdGUgZXh0ZXJuYWwgY29tbWFuZCByZXF1aXJlZCB0byBi
dWlsZCBlYWNoIG9iamVjdC4gV2Ugd2lsbApleHBsb3JlIHRoZSBzdWJzdGl0dXRpb24gcnVs
ZXMgZnVydGhlciB1bmRlciB0aGUgQzxDb21tYW5kPiBtZXRob2QsIGJlbG93LgoKVGhlIGNv
bnN0cnVjdGlvbiB2YXJpYWJsZXMgYXJlIGFsc28gdXNlZCBmb3Igb3RoZXIgcHVycG9zZXMu
IEZvciBleGFtcGxlLApDPENQUFBBVEg+IGlzIHVzZWQgdG8gc3BlY2lmeSBhIGNvbG9uLXNl
cGFyYXRlZCBwYXRoIG9mIGluY2x1ZGUKZGlyZWN0b3JpZXMuIFRoZXNlIGFyZSBpbnRlbmRl
ZCB0byBiZSBwYXNzZWQgdG8gdGhlIEMgcHJlcHJvY2Vzc29yIGFuZCBhcmUKYWxzbyB1c2Vk
IGJ5IHRoZSBDLWZpbGUgc2Nhbm5pbmcgbWFjaGluZXJ5IHRvIGRldGVybWluZSB0aGUgZGVw
ZW5kZW5jaWVzCmludm9sdmVkIGluIGEgQyBDb21waWxhdGlvbi4gVmFyaWFibGVzIGJlZ2lu
bmluZyB3aXRoIHVuZGVyc2NvcmUsIGFyZQpjcmVhdGVkIGJ5IHZhcmlvdXMgbWV0aG9kcywg
YW5kIHNob3VsZCBub3JtYWxseSBiZSBjb25zaWRlcmVkIGBgaW50ZXJuYWwnJwp2YXJpYWJs
ZXMuIEZvciBleGFtcGxlLCB3aGVuIGEgbWV0aG9kIGlzIGNhbGxlZCB3aGljaCBjYWxscyBm
b3IgdGhlIGNyZWF0aW9uCm9mIGFuIG9iamVjdCBmcm9tIGEgQyBzb3VyY2UsIHRoZSB2YXJp
YWJsZSBDPF9JRkxBR1M+IGlzIGNyZWF0ZWQ6IHRoaXMKY29ycmVzcG9uZHMgdG8gdGhlIEM8
LUk+IHN3aXRjaGVzIHJlcXVpcmVkIGJ5IHRoZSBDIGNvbXBpbGVyIHRvIHJlcHJlc2VudAp0
aGUgZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGJ5IEM8Q1BQUEFUSD4uCgpOb3RlIHRoYXQsIGZv
ciBhbnkgcGFydGljdWxhciBlbnZpcm9ubWVudCwgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUg
aXMgc2V0Cm9uY2UsIGFuZCB0aGVuIG5ldmVyIHJlc2V0ICh0byBjaGFuZ2UgYSB2YXJpYWJs
ZSwgeW91IG11c3QgY3JlYXRlIGEgbmV3CmVudmlyb25tZW50LiBNZXRob2RzIGFyZSBwcm92
aWRlZCBmb3IgY29weWluZyBleGlzdGluZyBlbnZpcm9ubWVudHMgZm9yIHRoaXMKcHVycG9z
ZSkuIFNvbWUgaW50ZXJuYWwgdmFyaWFibGVzLCBzdWNoIGFzIEM8X0lGTEFHUz4gYXJlIGNy
ZWF0ZWQgb24gZGVtYW5kLApidXQgb25jZSBzZXQsIHRoZXkgcmVtYWluIGZpeGVkIGZvciB0
aGUgbGlmZSBvZiB0aGUgZW52aXJvbm1lbnQuCgpUaGUgQzxDRkxBR1M+LCBDPExERkxBR1M+
LCBhbmQgQzxBUkZMQUdTPiB2YXJpYWJsZXMgYWxsIHN1cHBseSBhIHBsYWNlCmZvciBwYXNz
aW5nIG9wdGlvbnMgdG8gdGhlIGNvbXBpbGVyLCBsb2FkZXIsIGFuZCBhcmNoaXZlciwgcmVz
cGVjdGl2ZWx5LgpMZXNzIG9idmlvdXNseSwgdGhlIEM8SU5DRElSUFJFRklYPiB2YXJpYWJs
ZSBzcGVjaWZpZXMgdGhlIG9wdGlvbiBzdHJpbmcKdG8gYmUgYXBwZW5kZWQgdG8gdGhlIGJl
Z2lubmluZyBvZiBlYWNoIGluY2x1ZGUgZGlyZWN0b3J5IHNvIHRoYXQgdGhlCmNvbXBpbGVy
IGtub3dzIHdoZXJlIHRvIGZpbmQgRjwuaD4gZmlsZXMuICBTaW1pbGFybHksIHRoZSBDPExJ
QkRJUlBSRUZJWD4KdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBvcHRpb24gc3RyaW5nIHRvIGJl
IGFwcGVuZGVkIHRvIHRoZSBiZWdpbm5pbmcgb2YKZWFjaCBkaXJlY3RvcnkgdGhhdCB0aGUg
bGlua2VyIHNob3VsZCBzZWFyY2ggZm9yIGxpYnJhcmllcy4KCkFub3RoZXIgdmFyaWFibGUs
IEM8RU5WPiwgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHN5c3RlbSBlbnZpcm9ubWVudCBk
dXJpbmcKdGhlIGV4ZWN1dGlvbiBvZiBhbiBleHRlcm5hbCBjb21tYW5kLiBCeSBkZWZhdWx0
LCB0aGUgb25seSBlbnZpcm9ubWVudAp2YXJpYWJsZSB0aGF0IGlzIHNldCBpcyBDPFBBVEg+
LCB3aGljaCBpcyB0aGUgZXhlY3V0aW9uIHBhdGggZm9yIGEgVU5JWApjb21tYW5kLiBGb3Ig
dGhlIHV0bW9zdCByZXByb2R1Y2liaWxpdHksIHlvdSBzaG91bGQgcmVhbGx5IGFycmFuZ2Ug
dG8gc2V0CnlvdXIgb3duIGV4ZWN1dGlvbiBwYXRoLCBpbiB5b3VyIHRvcC1sZXZlbCBGPENv
bnN0cnVjdD4gZmlsZSAob3IgcGVyaGFwcyBieQppbXBvcnRpbmcgYW4gYXBwcm9wcmlhdGUg
Y29uc3RydWN0aW9uIHBhY2thZ2Ugd2l0aCB0aGUgUGVybCBDPHVzZT4KY29tbWFuZCkuIFRo
ZSBkZWZhdWx0IHZhcmlhYmxlcyBhcmUgaW50ZW5kZWQgdG8gZ2V0IHlvdSBvZmYgdGhlIGdy
b3VuZC4KCj1oZWFkMiBJbnRlcnBvbGF0aW5nIGNvbnN0cnVjdGlvbiB2YXJpYWJsZXMKCkNv
bnN0cnVjdGlvbiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgbWF5IGJlIGludGVycG9sYXRlZCBp
biB0aGUgc291cmNlIGFuZAp0YXJnZXQgZmlsZSBuYW1lcyBieSBwcmVmaXhpbmcgdGhlIGNv
bnN0cnVjdGlvbiB2YXJpYWJsZSBuYW1lIHdpdGggQzwlPi4KCiAgJGVudiA9IG5ldyBjb25z
KAoJREVTVERJUgk9PgkncHJvZ3JhbXMnLAoJU1JDRElSCT0+CSdzcmMnLAogICk7CiAgUHJv
Z3JhbSAkZW52ICclREVTVERJUi9oZWxsbycsICclU1JDRElSL2hlbGxvLmMnOwoKRXhwYW5z
aW9uIG9mIGNvbnN0cnVjdGlvbiB2YXJpYWJsZXMgaXMgcmVjdXJzaXZlLS10aGF0IGlzLCB0
aGUgZmlsZQpuYW1lKHMpIHdpbGwgYmUgcmUtZXhwYW5kZWQgdW50aWwgbm8gbW9yZSBzdWJz
dGl0dXRpb25zIGNhbiBiZSBtYWRlLiBJZgphIGNvbnN0cnVjdGlvbiB2YXJpYWJsZSBpcyBu
b3QgZGVmaW5lZCBpbiB0aGUgZW52aXJvbm1lbnQsIHRoZW4gdGhlIG51bGwKc3RyaW5nIHdp
bGwgYmUgc3Vic3RpdHV0ZWQuCgo9aGVhZDEgRGVmYXVsdCBjb25zdHJ1Y3Rpb24gbWV0aG9k
cwoKVGhlIGxpc3Qgb2YgZGVmYXVsdCBjb25zdHJ1Y3Rpb24gbWV0aG9kcyBpbmNsdWRlcyB0
aGUgZm9sbG93aW5nOgoKCj1oZWFkMiBUaGUgQzxuZXc+IGNvbnN0cnVjdG9yCgpUaGUgQzxu
ZXc+IG1ldGhvZCBpcyBhIFBlcmwgb2JqZWN0IGNvbnN0cnVjdG9yLiBUaGF0IGlzLCBpdCBp
cyBub3QgaW52b2tlZAp2aWEgYSByZWZlcmVuY2UgdG8gYW4gZXhpc3RpbmcgY29uc3RydWN0
aW9uIGVudmlyb25tZW50IEI8cmVmZXJlbmNlPiwgYnV0LApyYXRoZXIgc3RhdGljYWxseSwg
dXNpbmcgdGhlIG5hbWUgb2YgdGhlIFBlcmwgQjxwYWNrYWdlPiB3aGVyZSB0aGUKY29uc3Ry
dWN0b3IgaXMgZGVmaW5lZC4gVGhlIG1ldGhvZCBpcyBpbnZva2VkIGxpa2UgdGhpczoKCiAg
JGVudiA9IG5ldyBjb25zKDxvdmVycmlkZXM+KTsKClRoZSBlbnZpcm9ubWVudCB5b3UgZ2V0
IGJhY2sgaXMgYmxlc3NlZCBpbnRvIHRoZSBwYWNrYWdlIEM8Y29ucz4sIHdoaWNoCm1lYW5z
IHRoYXQgaXQgd2lsbCBoYXZlIGFzc29jaWF0ZWQgd2l0aCBpdCB0aGUgZGVmYXVsdCBtZXRo
b2RzIGRlc2NyaWJlZApiZWxvdy4gSW5kaXZpZHVhbCBjb25zdHJ1Y3Rpb24gdmFyaWFibGVz
IGNhbiBiZSBvdmVycmlkZGVuIGJ5IHByb3ZpZGluZwpuYW1lL3ZhbHVlIHBhaXJzIGluIGFu
IG92ZXJyaWRlIGxpc3QuIE5vdGUgdGhhdCB0byBvdmVycmlkZSBhbnkgY29tbWFuZAplbnZp
cm9ubWVudCB2YXJpYWJsZSAoaS5lLiBhbnl0aGluZyB1bmRlciBDPEVOVj4pLCB5b3Ugd2ls
bCBoYXZlIHRvIG92ZXJyaWRlCmFsbCBvZiB0aGVtLiBZb3UgY2FuIGdldCBhcm91bmQgdGhp
cyBkaWZmaWN1bHR5IGJ5IHVzaW5nIHRoZSBDPGNvcHk+IG1ldGhvZApvbiBhbiBleGlzdGlu
ZyBjb25zdHJ1Y3Rpb24gZW52aXJvbm1lbnQuCgoKPWhlYWQyIFRoZSBDPGNsb25lPiBtZXRo
b2QKClRoZSBDPGNsb25lPiBtZXRob2QgY3JlYXRlcyBhIGNsb25lIG9mIGFuIGV4aXN0aW5n
IGNvbnN0cnVjdGlvbiBlbnZpcm9ubWVudCwKYW5kIGNhbiBiZSBjYWxsZWQgYXMgaW4gdGhl
IGZvbGxvd2luZyBleGFtcGxlOgoKICAkZW52MiA9ICRlbnYxLT5jbG9uZSg8b3ZlcnJpZGVz
Pik7CgpZb3UgY2FuIHByb3ZpZGUgb3ZlcnJpZGVzIGluIHRoZSB1c3VhbCBtYW5uZXIgdG8g
Y3JlYXRlIGEgZGlmZmVyZW50CmVudmlyb25tZW50IGZyb20gdGhlIG9yaWdpbmFsLiBJZiB5
b3UganVzdCB3YW50IGEgbmV3IG5hbWUgZm9yIHRoZSBzYW1lCmVudmlyb25tZW50ICh3aGlj
aCBtYXkgYmUgaGVscGZ1bCB3aGVuIGV4cG9ydGluZyBlbnZpcm9ubWVudHMgdG8gZXhpc3Rp
bmcKY29tcG9uZW50cyksIHlvdSBjYW4ganVzdCB1c2Ugc2ltcGxlIGFzc2lnbm1lbnQuCgoK
PWhlYWQyIFRoZSBDPGNvcHk+IG1ldGhvZAoKVGhlIEM8Y29weT4gbWV0aG9kIGV4dHJhY3Rz
IHRoZSBleHRlcm5hbGx5IGRlZmluZWQgY29uc3RydWN0aW9uIHZhcmlhYmxlcwpmcm9tIGFu
IGVudmlyb25tZW50IGFuZCByZXR1cm5zIHRoZW0gYXMgYSBsaXN0IG9mIG5hbWUvdmFsdWUK
cGFpcnMuIE92ZXJyaWRlcyBjYW4gYWxzbyBiZSBwcm92aWRlZCwgaW4gd2hpY2ggY2FzZSwg
dGhlIG92ZXJyaWRkZW4gdmFsdWVzCndpbGwgYmUgcmV0dXJuZWQsIGFzIGFwcHJvcHJpYXRl
LiBUaGUgcmV0dXJuZWQgbGlzdCBjYW4gYmUgYXNzaWduZWQgdG8gYQpoYXNoLCBhcyBzaG93
biBpbiB0aGUgcHJvdG90eXBlLCBiZWxvdywgYnV0IGl0IGNhbiBhbHNvIGJlIG1hbmlwdWxh
dGVkIGluCm90aGVyIHdheXM6CgogICVlbnYgPSAkZW52MS0+Y29weSg8b3ZlcnJpZGVzPik7
CgpUaGUgdmFsdWUgb2YgQzxFTlY+LCB3aGljaCBpcyBpdHNlbGYgYSBoYXNoLCBpcyBhbHNv
IGNvcGllZCB0byBhIG5ldyBoYXNoLApzbyB0aGlzIG1heSBiZSBjaGFuZ2VkIHdpdGhvdXQg
ZmVhciBvZiBhZmZlY3RpbmcgdGhlIG9yaWdpbmFsCmVudmlyb25tZW50LiBTbywgZm9yIGV4
YW1wbGUsIGlmIHlvdSByZWFsbHkgd2FudCB0byBvdmVycmlkZSBqdXN0IHRoZQpDPFBBVEg+
IHZhcmlhYmxlIGluIHRoZSBkZWZhdWx0IGVudmlyb25tZW50LCB5b3UgY291bGQgZG8gdGhl
IGZvbGxvd2luZzoKCiAgJWNvbnMgPSBuZXcgY29ucygpLT5jb3B5KCk7CiAgJGNvbnN7RU5W
fXtQQVRIfSA9ICI8eW91ciBwYXRoIGhlcmU+IjsKICAkY29ucyA9IG5ldyBjb25zKCVjb25z
KTsKClRoaXMgd2lsbCBsZWF2ZSBhbnl0aGluZyBlbHNlIHRoYXQgbWlnaHQgYmUgaW4gdGhl
IGRlZmF1bHQgZXhlY3V0aW9uCmVudmlyb25tZW50IHVuZGlzdHVyYmVkLgoKCj1oZWFkMiBU
aGUgQzxJbnN0YWxsPiBtZXRob2QKClRoZSBDPEluc3RhbGw+IG1ldGhvZCBhcnJhbmdlcyBm
b3IgdGhlIHNwZWNpZmllZCBmaWxlcyB0byBiZSBpbnN0YWxsZWQgaW4KdGhlIHNwZWNpZmll
ZCBkaXJlY3RvcnkuIFRoZSBpbnN0YWxsYXRpb24gaXMgb3B0aW1pemVkOiB0aGUgZmlsZSBp
cyBub3QKY29waWVkIGlmIGl0IGNhbiBiZSBsaW5rZWQuIElmIHRoaXMgaXMgbm90IHRoZSBk
ZXNpcmVkIGJlaGF2aW9yLCB5b3Ugd2lsbApuZWVkIHRvIHVzZSBhIGRpZmZlcmVudCBtZXRo
b2QgdG8gaW5zdGFsbCB0aGUgZmlsZS4gSXQgaXMgY2FsbGVkIGFzIGZvbGxvd3M6CgogIElu
c3RhbGwgJGVudiA8ZGlyZWN0b3J5PiwgPG5hbWVzPjsKCk5vdGUgdGhhdCwgd2hpbGUgdGhl
IGZpbGVzIHRvIGJlIGluc3RhbGxlZCBtYXkgYmUgYXJiaXRyYXJpbHkgbmFtZWQsCm9ubHkg
dGhlIGxhc3QgY29tcG9uZW50IG9mIGVhY2ggbmFtZSBpcyB1c2VkIGZvciB0aGUgaW5zdGFs
bGVkIHRhcmdldApuYW1lLiBTbywgZm9yIGV4YW1wbGUsIGlmIHlvdSBhcnJhbmdlIHRvIGlu
c3RhbGwgRjxmb28vYmFyPiBpbiBGPGJhej4sCnRoaXMgd2lsbCBjcmVhdGUgYSBGPGJhcj4g
ZmlsZSBpbiB0aGUgRjxiYXo+IGRpcmVjdG9yeSAobm90IEY8Zm9vL2Jhcj4pLgoKCj1oZWFk
MiBUaGUgQzxJbnN0YWxsQXM+IG1ldGhvZAoKVGhlIEM8SW5zdGFsbEFzPiBtZXRob2QgYXJy
YW5nZXMgZm9yIHRoZSBzcGVjaWZpZWQgc291cmNlIGZpbGUocykgdG8gYmUKaW5zdGFsbGVk
IGFzIHRoZSBzcGVjaWZpZWQgdGFyZ2V0IGZpbGUocykuIE11bHRpcGxlIGZpbGVzIHNob3Vs
ZCBiZQpzcGVjaWZpZWQgYXMgYSBmaWxlIGxpc3QuIFRoZSBpbnN0YWxsYXRpb24gaXMgb3B0
aW1pemVkOiB0aGUgZmlsZSBpcyBub3QKY29waWVkIGlmIGl0IGNhbiBiZSBsaW5rZWQuIElm
IHRoaXMgaXMgbm90IHRoZSBkZXNpcmVkIGJlaGF2aW9yLCB5b3Ugd2lsbApuZWVkIHRvIHVz
ZSBhIGRpZmZlcmVudCBtZXRob2QgdG8gaW5zdGFsbCB0aGUgZmlsZS4gSXQgaXMgY2FsbGVk
IGFzIGZvbGxvd3M6CgpDPEluc3RhbGxBcz4gd29ya3MgaW4gdHdvIHdheXM6CgpTaW5nbGUg
ZmlsZSBpbnN0YWxsOgoKICBJbnN0YWxsQXMgJGVudiBUZ3RGaWxlLCBTcmNGaWxlOwoKTXVs
dGlwbGUgZmlsZSBpbnN0YWxsOgoKICBJbnN0YWxsQXMgJGVudiBbJ3RndDEnLCAndGd0Midd
LCBbJ3NyYzEnLCAnc3JjMiddOwoKT3IsIGV2ZW4gYXM6CgogIEBzcmNzID0gcXcoc3JjMSBz
cmMyIHNyYzMpOwogIEB0Z3RzID0gcXcodGd0MSB0Z3QyIHRndDMpOwogIEluc3RhbGxBcyAk
ZW52IFtAdGd0c10sIFtAc3Jjc107CgpCb3RoIHRoZSB0YXJnZXQgYW5kIHRoZSBzb3VyY2Vz
IGxpc3RzIHNob3VsZCBiZSBvZiB0aGUgc2FtZSBsZW5ndGguCgo9aGVhZDIgVGhlIEM8UHJl
Y2lvdXM+IG1ldGhvZAoKVGhlIEM8UHJlY2lvdXM+IG1ldGhvZCBhc2tzIGNvbnMgbm90IHRv
IGRlbGV0ZSB0aGUgc3BlY2lmaWVkIGZpbGUgb3IKbGlzdCBvZiBmaWxlcyBiZWZvcmUgYnVp
bGRpbmcgdGhlbSBhZ2Fpbi4gIEl0IGlzIGludm9rZWQgYXM6CgogIFByZWNpb3VzIDxmaWxl
cz47CgpUaGlzIGlzIGVzcGVjaWFsbHkgdXNlZnVsIGZvciBhbGxvd2luZyBpbmNyZW1lbnRh
bCB1cGRhdGVzIHRvIGxpYnJhcmllcwpvciBkZWJ1ZyBpbmZvcm1hdGlvbiBmaWxlcyB3aGlj
aCBhcmUgdXBkYXRlZCByYXRoZXIgdGhhbiByZWJ1aWx0IGFuZXcgZWFjaAp0aW1lLiAgQ29u
cyB3aWxsIHN0aWxsIGRlbGV0ZSB0aGUgZmlsZXMgd2hlbiB0aGUgQzwtcj4gZmxhZyBpcyBz
cGVjaWZpZWQuCgo9aGVhZDIgVGhlIEM8Q29tbWFuZD4gbWV0aG9kCgpUaGUgQzxDb21tYW5k
PiBtZXRob2QgaXMgYSBjYXRjaGFsbCBtZXRob2Qgd2hpY2ggY2FuIGJlIHVzZWQgdG8gYXJy
YW5nZSBmb3IKYW55IGV4dGVybmFsIGNvbW1hbmQgdG8gYmUgY2FsbGVkIHRvIHVwZGF0ZSB0
aGUgdGFyZ2V0LiBGb3IgdGhpcyBjb21tYW5kLCBhCnRhcmdldCBmaWxlIGFuZCBsaXN0IG9m
IGlucHV0cyBpcyBwcm92aWRlZC4gSW4gYWRkaXRpb24gYSBjb25zdHJ1Y3Rpb24KY29tbWFu
ZCBsaW5lLCBvciBsaW5lcywgaXMgcHJvdmlkZWQgYXMgYSBzdHJpbmcgKHRoaXMgc3RyaW5n
IG1heSBoYXZlCm11bHRpcGxlIGNvbW1hbmRzIGVtYmVkZGVkIHdpdGhpbiBpdCwgc2VwYXJh
dGVkIGJ5IG5ldyBsaW5lcykuIEM8Q29tbWFuZD4gaXMKY2FsbGVkIGFzIGZvbGxvd3M6Cgog
IENvbW1hbmQgJGVudiA8dGFyZ2V0PiwgPGlucHV0cz4sIDxjb25zdHJ1Y3Rpb24gY29tbWFu
ZD47CgpUaGUgdGFyZ2V0IGlzIG1hZGUgZGVwZW5kZW50IHVwb24gdGhlIGxpc3Qgb2YgaW5w
dXQgZmlsZXMgc3BlY2lmaWVkLCBhbmQgdGhlCmlucHV0cyBtdXN0IGJlIGJ1aWx0IHN1Y2Nl
c3NmdWxseSBvciBDb25zIHdpbGwgbm90IGF0dGVtcHQgdG8gYnVpbGQgdGhlCnRhcmdldC4K
CldpdGhpbiB0aGUgY29uc3RydWN0aW9uIGNvbW1hbmQsIGFueSB2YXJpYWJsZSBmcm9tIHRo
ZSBjb25zdHJ1Y3Rpb24KZW52aXJvbm1lbnQgbWF5IGJlIGludHJvZHVjZWQgYnkgcHJlZml4
aW5nIHRoZSBuYW1lIG9mIHRoZSBjb25zdHJ1Y3Rpb24KdmFyaWFibGUgd2l0aCBDPCU+LiBU
aGlzIGlzIHJlY3Vyc2l2ZTogdGhlIGNvbW1hbmQgaXMgZXhwYW5kZWQgdW50aWwgbm8gbW9y
ZQpzdWJzdGl0dXRpb25zIGNhbiBiZSBtYWRlLiBJZiBhIGNvbnN0cnVjdGlvbiB2YXJpYWJs
ZSBpcyBub3QgZGVmaW5lZCBpbiB0aGUKZW52aXJvbm1lbnQsIHRoZW4gdGhlIG51bGwgc3Ry
aW5nIHdpbGwgYmUgc3Vic3RpdHV0ZWQuICBBIGRvdWJsZWQgQzwlJT4Kd2lsbCBiZSByZXBs
YWNlZCBieSBhIHNpbmdsZSBDPCU+IGluIHRoZSBjb25zdHJ1Y3Rpb24gY29tbWFuZC4KClRo
ZXJlIGFyZSBzZXZlcmFsIHBzZXVkbyB2YXJpYWJsZXMgd2hpY2ggd2lsbCBhbHNvIGJlIGV4
cGFuZGVkOgoKPW92ZXIgMTAKCj1pdGVtICU+CgpUaGUgdGFyZ2V0IGZpbGUgbmFtZSAoaW4g
YSBtdWx0aS10YXJnZXQgY29tbWFuZCwgdGhpcyBpcyBhbHdheXMgdGhlIGZpcnN0CnRhcmdl
dCBtZW50aW9uZWQpLgoKPWl0ZW0gJTAKClNhbWUgYXMgQzwlRTxndD4+LgoKPWl0ZW0gJTEs
ICUyLCAuLi4sICU5CgpUaGVzZSByZWZlciB0byB0aGUgZmlyc3QgdGhyb3VnaCBuaW50aCBp
bnB1dCBmaWxlLCByZXNwZWN0aXZlbHkuCgo9aXRlbSAlRTxsdD4KClRoZSBmdWxsIHNldCBv
ZiBpbnB1dHMuIElmIGFueSBvZiB0aGVzZSBoYXZlIGJlZW4gdXNlZCBhbnl3aGVyZSBlbHNl
IGluIHRoZQpjdXJyZW50IGNvbW1hbmQgbGluZSAodmlhIEM8JTE+LCBDPCUyPiwgZXRjLiks
IHRoZW4gdGhvc2Ugd2lsbCBiZSBkZWxldGVkCmZyb20gdGhlIGxpc3QgcHJvdmlkZWQgYnkg
QzwlRTxsdD4+LiBDb25zaWRlciB0aGUgZm9sbG93aW5nIGNvbW1hbmQgZm91bmQgaW4gYQpG
PENvbnNjcmlwdD4gZmlsZSBpbiB0aGUgRjx0ZXN0PiBkaXJlY3Rvcnk6CgogIENvbW1hbmQg
JGVudiAndGd0JywgcXcoZm9vIGJhciBiYXopLCBxcSgKCWVjaG8gJTwgLWkgJTEgPiAlPgoJ
ZWNobyAlPCAtaSAlMiA+PiAlPgoJZWNobyAlPCAtaSAlMyA+PiAlPgogICk7CgpJZiBGPHRn
dD4gbmVlZGVkIHRvIGJlIHVwZGF0ZWQsIHRoZW4gdGhpcyB3b3VsZCByZXN1bHQgaW4gdGhl
IGV4ZWN1dGlvbiBvZgp0aGUgZm9sbG93aW5nIGNvbW1hbmRzLCBhc3N1bWluZyB0aGF0IG5v
IHJlbWFwcGluZyBoYXMgYmVlbiBlc3RhYmxpc2hlZCBmb3IKdGhlIEY8dGVzdD4gZGlyZWN0
b3J5OgoKICBlY2hvIHRlc3QvYmFyIHRlc3QvYmF6IC1pIHRlc3QvZm9vID4gdGVzdC90Z3QK
ICBlY2hvIHRlc3QvZm9vIHRlc3QvYmF6IC1pIHRlc3QvYmFyID4+IHRlc3QvdGd0CiAgZWNo
byB0ZXN0L2ZvbyB0ZXN0L2JhciAtaSB0ZXN0L2JheiA+PiB0ZXN0L3RndAoKPWJhY2sKCkFu
eSBvZiB0aGUgYWJvdmUgcHNldWRvIHZhcmlhYmxlcyBtYXkgYmUgZm9sbG93ZWQgaW1tZWRp
YXRlbHkgYnkgb25lIG9mCnRoZSBmb2xsb3dpbmcgc3VmZml4ZXMgdG8gc2VsZWN0IGEgcG9y
dGlvbiBvZiB0aGUgZXhwYW5kZWQgcGF0aCBuYW1lOgoKICA6YSAgICB0aGUgYWJzb2x1dGUg
cGF0aCB0byB0aGUgZmlsZSBuYW1lCiAgOmIgICAgdGhlIGRpcmVjdG9yeSBwbHVzIHRoZSBm
aWxlIG5hbWUgc3RyaXBwZWQgb2YgYW55IHN1ZmZpeAogIDpkICAgIHRoZSBkaXJlY3RvcnkK
ICA6ZiAgICB0aGUgZmlsZSBuYW1lCiAgOnMgICAgdGhlIGZpbGUgbmFtZSBzdWZmaXgKICA6
RiAgICB0aGUgZmlsZSBuYW1lIHN0cmlwcGVkIG9mIGFueSBzdWZmaXgKCkNvbnRpbnVpbmcg
d2l0aCB0aGUgYWJvdmUgZXhhbXBsZSwgQzwlPDpmPiB3b3VsZCBleHBhbmQgdG8gQzxmb28g
YmFyIGJhej4sCmFuZCBDPCU+OmQ+IHdvdWxkIGV4cGFuZCB0byBDPHRlc3Q+LgoKSXQgaXMg
cG9zc2libGUgdG8gcHJvZ3JhbW1hdGljYWxseSByZXdyaXRlIHBhcnQgb2YgdGhlIGNvbW1h
bmQgYnkKZW5jbG9zaW5nIHBhcnQgb2YgaXQgYmV0d2VlbiBDPCVbPiBhbmQgQzwlXT4uICBU
aGlzIHdpbGwgY2FsbCB0aGUKY29uc3RydWN0aW9uIHZhcmlhYmxlIG5hbWVkIGFzIHRoZSBm
aXJzdCB3b3JkIGVuY2xvc2VkIGluIHRoZSBicmFja2V0cwphcyBhIFBlcmwgY29kZSByZWZl
cmVuY2U7IHRoZSByZXN1bHRzIG9mIHRoaXMgY2FsbCB3aWxsIGJlIHVzZWQgdG8KcmVwbGFj
ZSB0aGUgY29udGVudHMgb2YgdGhlIGJyYWNrZXRzIGluIHRoZSBjb21tYW5kIGxpbmUuICBG
b3IgZXhhbXBsZSwKZ2l2ZW4gYW4gZXhpc3RpbmcgaW5wdXQgZmlsZSBuYW1lZCBGPHRndC5p
bj46CgogIEBrZXl3b3JkcyA9IHF3KGZvbyBiYXIgYmF6KTsKICAkZW52ID0gbmV3IGNvbnMo
WF9DT01NQSA9PiBzdWIgeyBqb2luKCIsIiwgQF8pIH0pOwogIENvbW1hbmQgJGVudiAndGd0
JywgJ3RndC5pbicsIHFxKAoJZWNobyAnIyBLZXl3b3JkczogJVtYX0NPTU1BIEBrZXl3b3Jk
cyAlXScgPiAlPgoJY2F0ICU8ID4+ICU+CiAgKTsKClRoaXMgd2lsbCBleGVjdXRlOgoKICBl
Y2hvICcjIEtleXdvcmRzOiBmb28sYmFyLGJheicgPiB0Z3QKICBjYXQgdGd0LmluID4+IHRn
dAoKQWZ0ZXIgc3Vic3RpdHV0aW9uIG9jY3Vycywgc3RyaW5ncyBvZiB3aGl0ZSBzcGFjZSBh
cmUgY29udmVydGVkIGludG8gc2luZ2xlCmJsYW5rcywgYW5kIGxlYWRpbmcgYW5kIHRyYWls
aW5nIHdoaXRlIHNwYWNlIGlzIGVsaW1pbmF0ZWQuIEl0IGlzIHRoZXJlZm9yZQpub3QgcG9z
c2libGUgdG8gaW50cm9kdWNlIHZhcmlhYmxlIGxlbmd0aCB3aGl0ZSBzcGFjZSBpbiBzdHJp
bmdzIHBhc3NlZCBpbnRvCmEgY29tbWFuZCwgd2l0aG91dCByZXNvcnRpbmcgdG8gc29tZSBz
b3J0IG9mIHNoZWxsIHF1b3RpbmcuCgpJZiBhIG11bHRpLWxpbmUgY29tbWFuZCBzdHJpbmcg
aXMgcHJvdmlkZWQsIHRoZSBjb21tYW5kcyBhcmUgZXhlY3V0ZWQKc2VxdWVudGlhbGx5LiBJ
ZiBhbnkgb2YgdGhlIGNvbW1hbmRzIGZhaWxzLCB0aGVuIG5vbmUgb2YgdGhlIHJlc3QgYXJl
CmV4ZWN1dGVkLCBhbmQgdGhlIHRhcmdldCBpcyBub3QgbWFya2VkIGFzIHVwZGF0ZWQsIGku
ZS4gYSBuZXcgc2lnbmF0dXJlIGlzCm5vdCBzdG9yZWQgZm9yIHRoZSB0YXJnZXQuCgpOb3Jt
YWxseSwgaWYgYWxsIHRoZSBjb21tYW5kcyBzdWNjZWVkLCBhbmQgcmV0dXJuIGEgemVybyBz
dGF0dXMgKG9yIHdoYXRldmVyCnBsYXRmb3JtLXNwZWNpZmljIGluZGljYXRpb24gb2Ygc3Vj
Y2VzcyBpcyByZXF1aXJlZCksIHRoZW4gYSBuZXcgc2lnbmF0dXJlCmlzIHN0b3JlZCBmb3Ig
dGhlIHRhcmdldC4gSWYgYSBjb21tYW5kIGVycm9uZW91c2x5IHJlcG9ydHMgc3VjY2VzcyBl
dmVuCmFmdGVyIGEgZmFpbHVyZSwgdGhlbiBDb25zIHdpbGwgYXNzdW1lIHRoYXQgdGhlIHRh
cmdldCBmaWxlIGNyZWF0ZWQgYnkgdGhhdApjb21tYW5kIGlzIGFjY3VyYXRlIGFuZCB1cC10
by1kYXRlLgoKVGhlIGZpcnN0IHdvcmQgb2YgZWFjaCBjb21tYW5kIHN0cmluZywgYWZ0ZXIg
ZXhwYW5zaW9uLCBpcyBhc3N1bWVkIHRvIGJlIGFuCmV4ZWN1dGFibGUgY29tbWFuZCBsb29r
ZWQgdXAgb24gdGhlIEM8UEFUSD4gZW52aXJvbm1lbnQgdmFyaWFibGUgKHdoaWNoIGlzLApp
biB0dXJuLCBzcGVjaWZpZWQgYnkgdGhlIEM8RU5WPiBjb25zdHJ1Y3Rpb24gdmFyaWFibGUp
LiBJZiB0aGlzIGNvbW1hbmQgaXMKZm91bmQgb24gdGhlIHBhdGgsIHRoZW4gdGhlIHRhcmdl
dCB3aWxsIGRlcGVuZCB1cG9uIGl0OiB0aGUgY29tbWFuZCB3aWxsCnRoZXJlZm9yZSBiZSBh
dXRvbWF0aWNhbGx5IGJ1aWx0LCBhcyBuZWNlc3NhcnkuIEl0J3MgcG9zc2libGUgdG8gd3Jp
dGUKbXVsdGktcGFydCBjb21tYW5kcyB0byBzb21lIHNoZWxscywgc2VwYXJhdGVkIGJ5IHNl
bWktY29sb25zLiBPbmx5IHRoZSBmaXJzdApjb21tYW5kIHdvcmQgd2lsbCBiZSBkZXBlbmRl
ZCB1cG9uLCBob3dldmVyLCBzbyBpZiB5b3Ugd3JpdGUgeW91ciBjb21tYW5kCnN0cmluZ3Mg
dGhpcyB3YXksIHlvdSBtdXN0IGVpdGhlciBleHBsaWNpdGx5IHNldCB1cCBhIGRlcGVuZGVu
Y3kgKHdpdGggdGhlCkM8RGVwZW5kcz4gbWV0aG9kKSwgb3IgYmUgc3VyZSB0aGF0IHRoZSBj
b21tYW5kIHlvdSBhcmUgdXNpbmcgaXMgYSBzeXN0ZW0KY29tbWFuZCB3aGljaCBpcyBleHBl
Y3RlZCB0byBiZSBhdmFpbGFibGUuIElmIGl0IGlzbid0IGF2YWlsYWJsZSwgeW91IHdpbGws
Cm9mIGNvdXJzZSwgZ2V0IGFuIGVycm9yLgoKSWYgYW55IGNvbW1hbmQgKGV2ZW4gb25lIHdp
dGhpbiBhIG11bHRpLWxpbmUgY29tbWFuZCkgYmVnaW5zIHdpdGgKQzxbcGVybF0+LCB0aGUg
cmVtYWluZGVyIG9mIHRoYXQgY29tbWFuZCBsaW5lIHdpbGwgYmUgZXZhbHVhdGVkIGJ5IHRo
ZQpydW5uaW5nIFBlcmwgaW5zdGVhZCBvZiBiZWluZyBmb3JrZWQgYnkgdGhlIHNoZWxsLiAg
SWYgYW4gZXJyb3Igb2NjdXJzCmluIHBhcnNpbmcgdGhlIFBlcmwgb3IgaWYgdGhlIFBlcmwg
ZXhwcmVzc2lvbiByZXR1cm5zIDAgb3IgdW5kZWYsIHRoZQpjb21tYW5kIHdpbGwgYmUgY29u
c2lkZXJlZCB0byBoYXZlIGZhaWxlZC4gIEZvciBleGFtcGxlLCBoZXJlIGlzIGEgc2ltcGxl
CmNvbW1hbmQgd2hpY2ggY3JlYXRlcyBhIGZpbGUgQzxmb28+IGRpcmVjdGx5IGZyb20gUGVy
bDoKCiAgJGVudiA9IG5ldyBjb25zKCk7CiAgQ29tbWFuZCAkZW52ICdmb28nLAogICAgcXEo
W3BlcmxdIG9wZW4oRk9PLCc+Zm9vJyk7cHJpbnQgRk9PICJoaVxcbiI7IGNsb3NlKEZPTyk7
IDEpOwoKTm90ZSB0aGF0IHdoZW4gdGhlIGNvbW1hbmQgaXMgZXhlY3V0ZWQsIHlvdSBhcmUg
aW4gdGhlIHNhbWUgcGFja2FnZSBhcwp3aGVuIHRoZSBGPENvbnN0cnVjdD4gb3IgRjxDb25z
Y3JpcHQ+IGZpbGUgd2FzIHJlYWQsIHNvIHlvdSBjYW4gY2FsbApQZXJsIGZ1bmN0aW9ucyB5
b3UndmUgZGVmaW5lZCBpbiB0aGUgc2FtZSBGPENvbnN0cnVjdD4gb3IgRjxDb25zY3JpcHQ+
CmZpbGUgaW4gd2hpY2ggdGhlIEM8Q29tbWFuZD4gYXBwZWFyczoKCiAgJGVudiA9IG5ldyBj
b25zKCk7CiAgc3ViIGNyZWF0ZV9maWxlIHsKCW15ICRmaWxlID0gc2hpZnQ7CglvcGVuKEZJ
TEUsICI+JGZpbGUiKTsKCXByaW50IEZJTEUgImhpXG4iOwoJY2xvc2UoRklMRSk7CglyZXR1
cm4gMTsKICB9CiAgQ29tbWFuZCAkZW52ICdmb28nLCAiW3BlcmxdICZjcmVhdGVfZmlsZSgn
JT4nKSI7CgpUaGUgUGVybCBzdHJpbmcgd2lsbCBiZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBz
aWduYXR1cmUgZm9yIHRoZSBkZXJpdmVkCmZpbGUsIHNvIGlmIHlvdSBjaGFuZ2UgdGhlIHN0
cmluZywgdGhlIGZpbGUgd2lsbCBiZSByZWJ1aWx0LiAgVGhlIGNvbnRlbnRzCm9mIGFueSBz
dWJyb3V0aW5lcyB5b3UgY2FsbCwgaG93ZXZlciwgYXJlIG5vdCBwYXJ0IG9mIHRoZSBzaWdu
YXR1cmUsCnNvIGlmIHlvdSBtb2RpZnkgYSBjYWxsZWQgc3Vicm91dGluZSBzdWNoIGFzIEM8
Y3JlYXRlX2ZpbGU+IGFib3ZlLAp0aGUgdGFyZ2V0IHdpbGwgSTxub3Q+IGJlIHJlYnVpbHQu
ICBDYXZlYXQgdXNlci4KCkNvbnMgbm9ybWFsbHkgcHJpbnRzIGEgY29tbWFuZCBiZWZvcmUg
ZXhlY3V0aW5nIGl0LiAgVGhpcyBiZWhhdmlvciBpcwpzdXBwcmVzc2VkIGlmIHRoZSBmaXJz
dCBjaGFyYWN0ZXIgb2YgdGhlIGNvbW1hbmQgaXMgQzxAPi4gIE5vdGUgdGhhdAp5b3UgbWF5
IG5lZWQgdG8gc2VwYXJhdGUgdGhlIEM8QD4gZnJvbSB0aGUgY29tbWFuZCBuYW1lIG9yIGVz
Y2FwZSBpdCB0bwpwcmV2ZW50IEM8QGNtZD4gZnJvbSBsb29raW5nIGxpa2UgYW4gYXJyYXkg
dG8gUGVybCBxdW90ZSBvcGVyYXRvcnMgdGhhdApwZXJmb3JtIGludGVycG9sYXRpb246Cgog
ICMgVGhlIGZpcnN0IGNvbW1hbmQgbGluZSBpcyBpbmNvcnJlY3QsCiAgIyBiZWNhdXNlICJA
Y3AiIGxvb2tzIGxpa2UgYW4gYXJyYXkKICAjIHRvIHRoZSBQZXJsIHFxLy8gZnVuY3Rpb24u
CiAgIyBVc2UgdGhlIHNlY29uZCBmb3JtIGluc3RlYWQuCiAgQ29tbWFuZCAkZW52ICdmb28n
LCAnZm9vLmluJywgcXEoCglAY3AgJTwgdGVtcGZpbGUKCUAgY3AgdGVtcGZpbGUgJT4KICAp
OwoKSWYgdGhlcmUgYXJlIHNoZWxsIG1ldGEgY2hhcmFjdGVycyBhbnl3aGVyZSBpbiB0aGUg
ZXhwYW5kZWQgY29tbWFuZCBsaW5lLApzdWNoIGFzIEM8RTxsdD4+LCBDPEU8Z3Q+PiwgcXVv
dGVzLCBvciBzZW1pLWNvbG9uLCB0aGVuIHRoZSBjb21tYW5kCndpbGwgYWN0dWFsbHkgYmUg
ZXhlY3V0ZWQgYnkgaW52b2tpbmcgYSBzaGVsbC4gVGhpcyBtZWFucyB0aGF0IGEgY29tbWFu
ZApzdWNoIGFzOgoKICBjZCBmb28KCmFsb25lIHdpbGwgdHlwaWNhbGx5IGZhaWwsIHNpbmNl
IHRoZXJlIGlzIG5vIGNvbW1hbmQgQzxjZD4gb24gdGhlIHBhdGguIEJ1dAp0aGUgY29tbWFu
ZCBzdHJpbmc6CgogIGNkICQ8OmQ7IHRhciBjZiAkPjpmICQ8OmYKCndoZW4gZXhwYW5kZWQg
d2lsbCBzdGlsbCBjb250YWluIHRoZSBzaGVsbCBtZXRhIGNoYXJhY3RlciBzZW1pLWNvbG9u
LCBhbmQgYQpzaGVsbCB3aWxsIGJlIGludm9rZWQgdG8gaW50ZXJwcmV0IHRoZSBjb21tYW5k
LiBTaW5jZSBDPGNkPiBpcyBpbnRlcnByZXRlZApieSB0aGlzIHN1Yi1zaGVsbCwgdGhlIGNv
bW1hbmQgd2lsbCBleGVjdXRlIGFzIGV4cGVjdGVkLgoKVG8gc3BlY2lmeSBhIGNvbW1hbmQg
d2l0aCBtdWx0aXBsZSB0YXJnZXRzLCB5b3UgY2FuIHNwZWNpZnkgYSByZWZlcmVuY2UgdG8g
YQpsaXN0IG9mIHRhcmdldHMuIEluIFBlcmwsIGEgbGlzdCByZWZlcmVuY2UgY2FuIGJlIGNy
ZWF0ZWQgYnkgZW5jbG9zaW5nIGEKbGlzdCBpbiBzcXVhcmUgYnJhY2tldHMuIEhlbmNlIHRo
ZSBmb2xsb3dpbmcgY29tbWFuZDoKCiAgQ29tbWFuZCAkZW52IFsnZm9vLmgnLCAnZm9vLmMn
XSwgJ2Zvby50ZW1wbGF0ZScsIHEoCglnZW4gJTEKICApOwoKY291bGQgYmUgdXNlZCBpbiBh
IGNhc2Ugd2hlcmUgdGhlIGNvbW1hbmQgQzxnZW4+IGNyZWF0ZXMgdHdvIGZpbGVzLCBib3Ro
CkY8Zm9vLmg+IGFuZCBGPGZvby5jPi4KCgo9aGVhZDIgVGhlIEM8T2JqZWN0cz4gbWV0aG9k
CgpUaGUgQzxPYmplY3RzPiBtZXRob2QgYXJyYW5nZXMgdG8gY3JlYXRlIHRoZSBvYmplY3Qg
ZmlsZXMgdGhhdCBjb3JyZXNwb25kIHRvCnRoZSBzcGVjaWZpZWQgc291cmNlIGZpbGVzLiBJ
dCBpcyBpbnZva2VkIGFzIHNob3duIGJlbG93OgoKICBAZmlsZXMgPSBPYmplY3RzICRlbnYg
PHNvdXJjZSBvciBvYmplY3QgZmlsZXM+OwoKVW5kZXIgVW5peCwgc291cmNlIGZpbGVzIGVu
ZGluZyBpbiBGPC5zPiBhbmQgRjwuYz4gYXJlIGN1cnJlbnRseQpzdXBwb3J0ZWQsIGFuZCB3
aWxsIGJlIGNvbXBpbGVkIGludG8gYSBuYW1lIG9mIHRoZSBzYW1lIGZpbGUgZW5kaW5nCmlu
IEY8Lm8+LiBCeSBkZWZhdWx0LCBhbGwgZmlsZXMgYXJlIGNyZWF0ZWQgYnkgaW52b2tpbmcg
dGhlIGV4dGVybmFsCmNvbW1hbmQgd2hpY2ggcmVzdWx0cyBmcm9tIGV4cGFuZGluZyB0aGUg
QzxDQ0NPTT4gY29uc3RydWN0aW9uCnZhcmlhYmxlLCB3aXRoIEM8JUU8bHQ+PiBhbmQgQzwl
RTxndD4+IHNldCB0byB0aGUgc291cmNlIGFuZCBvYmplY3QKZmlsZXMsIHJlc3BlY3RpdmVs
eSAoc2VlIHRoZSBDPENvbW1hbmQ+IG1ldGhvZCBmb3IgZXhwYW5zaW9uIGRldGFpbHMpLgpU
aGUgdmFyaWFibGUgQzxDUFBQQVRIPiBpcyBhbHNvIHVzZWQgd2hlbiBzY2FubmluZyBzb3Vy
Y2UgZmlsZXMgZm9yCmRlcGVuZGVuY2llcy4gVGhpcyBpcyBhIGNvbG9uIHNlcGFyYXRlZCBs
aXN0IG9mIHBhdGhuYW1lcywgYW5kIGlzIGFsc28KdXNlZCB0byBjcmVhdGUgdGhlIGNvbnN0
cnVjdGlvbiB2YXJpYWJsZSBDPF9JRkxBR1MsPiB3aGljaCB3aWxsIGNvbnRhaW4KdGhlIGFw
cHJvcHJpYXRlIGxpc3Qgb2YgLUM8ST4gb3B0aW9ucyBmb3IgdGhlIGNvbXBpbGF0aW9uLiBB
bnkgcmVsYXRpdmUKcGF0aG5hbWVzIGluIEM8Q1BQUEFUSD4gaXMgaW50ZXJwcmV0ZWQgcmVs
YXRpdmUgdG8gdGhlIGRpcmVjdG9yeSBpbgp3aGljaCB0aGUgYXNzb2NpYXRlZCBjb25zdHJ1
Y3Rpb24gZW52aXJvbm1lbnQgd2FzIGNyZWF0ZWQgKGFic29sdXRlCmFuZCB0b3AtcmVsYXRp
dmUgbmFtZXMgbWF5IGFsc28gYmUgdXNlZCkuIFRoaXMgdmFyaWFibGUgaXMgdXNlZCBieQpD
PENDQ09NPi4gVGhlIGJlaGF2aW9yIG9mIHRoaXMgY29tbWFuZCBjYW4gYmUgbW9kaWZpZWQg
YnkgY2hhbmdpbmcgYW55Cm9mIHRoZSB2YXJpYWJsZXMgd2hpY2ggYXJlIGludGVycG9sYXRl
ZCBpbnRvIEM8Q0NDT00+LCBzdWNoIGFzIEM8Q0M+LApDPENGTEFHUz4sIGFuZCwgaW5kaXJl
Y3RseSwgQzxDUFBQQVRIPi4gSXQncyBhbHNvIHBvc3NpYmxlIHRvIHJlcGxhY2UKdGhlIHZh
bHVlIG9mIEM8Q0NDT00+LCBpdHNlbGYuIEFzIGEgY29udmVuaWVuY2UsIHRoaXMgZmlsZSBy
ZXR1cm5zIHRoZQpsaXN0IG9mIG9iamVjdCBmaWxlbmFtZXMuCgoKPWhlYWQyIFRoZSBDPFBy
b2dyYW0+IG1ldGhvZAoKVGhlIEM8UHJvZ3JhbT4gbWV0aG9kIGFycmFuZ2VzIHRvIGxpbmsg
dGhlIHNwZWNpZmllZCBwcm9ncmFtIHdpdGggdGhlCnNwZWNpZmllZCBvYmplY3QgZmlsZXMu
IEl0IGlzIGludm9rZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXI6CgogIFByb2dyYW0gJGVu
diA8cHJvZ3JhbSBuYW1lPiwgPHNvdXJjZSBvciBvYmplY3QgZmlsZXM+OwoKVGhlIHByb2dy
YW0gbmFtZSB3aWxsIGhhdmUgdGhlIHZhbHVlIG9mIHRoZSBDPFNVRkVYRT4gY29uc3RydWN0
aW9uCnZhcmlhYmxlIGFwcGVuZGVkIChieSBkZWZhdWx0LCBDPC5leGU+IG9uIFdpbjMyIHN5
c3RlbXMsIG5vdGhpbmcgb24gVW5peApzeXN0ZW1zKSBpZiB0aGUgc3VmZml4IGlzIG5vdCBh
bHJlYWR5IHByZXNlbnQuCgpTb3VyY2UgZmlsZXMgbWF5IGJlIHNwZWNpZmllZCBpbiBwbGFj
ZSBvZiBvYmplY3RzIGZpbGVzLS10aGUgQzxPYmplY3RzPgptZXRob2Qgd2lsbCBiZSBpbnZv
a2VkIHRvIGFycmFuZ2UgdGhlIGNvbnZlcnNpb24gb2YgYWxsIHRoZSBmaWxlcyBpbnRvCm9i
amVjdCBmaWxlcywgYW5kIGhlbmNlIGFsbCB0aGUgb2JzZXJ2YXRpb25zIGFib3V0IHRoZSBD
PE9iamVjdHM+IG1ldGhvZCwKYWJvdmUsIGFwcGx5IHRvIHRoaXMgbWV0aG9kIGFsc28uCgpU
aGUgYWN0dWFsIGxpbmtpbmcgb2YgdGhlIHByb2dyYW0gd2lsbCBiZSBoYW5kbGVkIGJ5IGFu
IGV4dGVybmFsIGNvbW1hbmQKd2hpY2ggcmVzdWx0cyBmcm9tIGV4cGFuZGluZyB0aGUgQzxM
SU5LQ09NPiBjb25zdHJ1Y3Rpb24gdmFyaWFibGUsIHdpdGgKQzwlRTxsdD4+IHNldCB0byB0
aGUgb2JqZWN0IGZpbGVzIHRvIGJlIGxpbmtlZCAoaW4gdGhlIG9yZGVyIHByZXNlbnRlZCks
CmFuZCBDPCVFPGd0Pj4gc2V0IHRvIHRoZSB0YXJnZXQgKHNlZSB0aGUgQzxDb21tYW5kPiBt
ZXRob2QgZm9yIGV4cGFuc2lvbgpkZXRhaWxzKS4gVGhlIHVzZXIgbWF5IHNldCBhZGRpdGlv
bmFsIHZhcmlhYmxlcyBpbiB0aGUgY29uc3RydWN0aW9uCmVudmlyb25tZW50LCBpbmNsdWRp
bmcgQzxMSU5LPiwgdG8gZGVmaW5lIHdoaWNoIHByb2dyYW0gdG8gdXNlIGZvcgpsaW5raW5n
LCBDPExJQlBBVEg+LCBhIGNvbG9uLXNlcGFyYXRlZCBsaXN0IG9mIGxpYnJhcnkgc2VhcmNo
IHBhdGhzLApmb3IgdXNlIHdpdGggbGlicmFyeSBzcGVjaWZpY2F0aW9ucyBvZiB0aGUgZm9y
bSBJPC1sbGliPiwgYW5kIEM8TElCUz4sCnNwZWNpZnlpbmcgdGhlIGxpc3Qgb2YgbGlicmFy
aWVzIHRvIGxpbmsgYWdhaW5zdCAoaW4gZWl0aGVyIEk8LWxsaWI+CmZvcm0gb3IganVzdCBh
cyBwYXRobmFtZXMuIFJlbGF0aXZlIHBhdGhuYW1lcyBpbiBib3RoIEM8TElCUEFUSD4gYW5k
CkM8TElCUz4gYXJlIGludGVycHJldGVkIHJlbGF0aXZlIHRvIHRoZSBkaXJlY3RvcnkgaW4g
d2hpY2ggdGhlIGFzc29jaWF0ZWQKY29uc3RydWN0aW9uIGVudmlyb25tZW50IGlzIGNyZWF0
ZWQgKGFic29sdXRlIGFuZCB0b3AtcmVsYXRpdmUgbmFtZXMgbWF5CmFsc28gYmUgdXNlZCku
IENvbnMgYXV0b21hdGljYWxseSBzZXRzIHVwIGRlcGVuZGVuY2llcyBvbiBhbnkgbGlicmFy
aWVzCm1lbnRpb25lZCBpbiBDPExJQlM+OiB0aG9zZSBsaWJyYXJpZXMgd2lsbCBiZSBidWls
dCBiZWZvcmUgdGhlIGNvbW1hbmQKaXMgbGlua2VkLgoKCj1oZWFkMiBUaGUgQzxMaWJyYXJ5
PiBtZXRob2QKClRoZSBDPExpYnJhcnk+IG1ldGhvZCBhcnJhbmdlcyB0byBjcmVhdGUgdGhl
IHNwZWNpZmllZCBsaWJyYXJ5IGZyb20gdGhlCnNwZWNpZmllZCBvYmplY3QgZmlsZXMuIEl0
IGlzIGludm9rZWQgYXMgZm9sbG93czoKCiAgTGlicmFyeSAkZW52IDxsaWJyYXJ5IG5hbWU+
LCA8c291cmNlIG9yIG9iamVjdCBmaWxlcz47CgpUaGUgbGlicmFyeSBuYW1lIHdpbGwgaGF2
ZSB0aGUgdmFsdWUgb2YgdGhlIEM8U1VGTElCPiBjb25zdHJ1Y3Rpb24KdmFyaWFibGUgYXBw
ZW5kZWQgKGJ5IGRlZmF1bHQsIEM8LmxpYj4gb24gV2luMzIgc3lzdGVtcywgQzwuYT4gb24g
VW5peApzeXN0ZW1zKSBpZiB0aGUgc3VmZml4IGlzIG5vdCBhbHJlYWR5IHByZXNlbnQuCgpT
b3VyY2UgZmlsZXMgbWF5IGJlIHNwZWNpZmllZCBpbiBwbGFjZSBvZiBvYmplY3RzIGZpbGVz
LS10aGUgQzxPYmplY3RzPgptZXRob2Qgd2lsbCBiZSBpbnZva2VkIHRvIGFycmFuZ2UgdGhl
IGNvbnZlcnNpb24gb2YgYWxsIHRoZSBmaWxlcyBpbnRvCm9iamVjdCBmaWxlcywgYW5kIGhl
bmNlIGFsbCB0aGUgb2JzZXJ2YXRpb25zIGFib3V0IHRoZSBDPE9iamVjdHM+IG1ldGhvZCwK
YWJvdmUsIGFwcGx5IHRvIHRoaXMgbWV0aG9kIGFsc28uCgpUaGUgYWN0dWFsIGNyZWF0aW9u
IG9mIHRoZSBsaWJyYXJ5IHdpbGwgYmUgaGFuZGxlZCBieSBhbiBleHRlcm5hbApjb21tYW5k
IHdoaWNoIHJlc3VsdHMgZnJvbSBleHBhbmRpbmcgdGhlIEM8QVJDT00+IGNvbnN0cnVjdGlv
biB2YXJpYWJsZSwKd2l0aCBDPCVFPGx0Pj4gc2V0IHRvIHRoZSBsaWJyYXJ5IG1lbWJlcnMg
KGluIHRoZSBvcmRlciBwcmVzZW50ZWQpLAphbmQgQzwlRTxndD4+IHRvIHRoZSBsaWJyYXJ5
IHRvIGJlIGNyZWF0ZWQgKHNlZSB0aGUgQzxDb21tYW5kPiBtZXRob2QKZm9yIGV4cGFuc2lv
biBkZXRhaWxzKS4gVGhlIHVzZXIgbWF5IHNldCB2YXJpYWJsZXMgaW4gdGhlIGNvbnN0cnVj
dGlvbgplbnZpcm9ubWVudCB3aGljaCB3aWxsIGFmZmVjdCB0aGUgb3BlcmF0aW9uIG9mIHRo
ZSBjb21tYW5kLiBUaGVzZQppbmNsdWRlIEM8QVI+LCB0aGUgYXJjaGl2ZSBwcm9ncmFtIHRv
IHVzZSwgQzxBUkZMQUdTPiwgd2hpY2ggY2FuIGJlCnVzZWQgdG8gbW9kaWZ5IHRoZSBmbGFn
cyBnaXZlbiB0byB0aGUgcHJvZ3JhbSBzcGVjaWZpZWQgYnkgQzxBUj4sIGFuZApDPFJBTkxJ
Qj4sIHRoZSBuYW1lIG9mIGEgYXJjaGl2ZSBpbmRleCBnZW5lcmF0aW9uIHByb2dyYW0sIGlm
IG5lZWRlZAooaWYgdGhlIHBhcnRpY3VsYXIgbmVlZCBkb2VzIG5vdCByZXF1aXJlIHRoZSBs
YXR0ZXIgZnVuY3Rpb25hbGl0eSwKdGhlbiBDPEFSQ09NPiBtdXN0IGJlIHJlZGVmaW5lZCB0
byBub3QgcmVmZXJlbmNlIEM8UkFOTElCPikuCgpUaGUgQzxMaWJyYXJ5PiBtZXRob2QgYWxs
b3dzIHRoZSBzYW1lIGxpYnJhcnkgdG8gYmUgc3BlY2lmaWVkIGluIG11bHRpcGxlCm1ldGhv
ZCBpbnZvY2F0aW9ucy4gQWxsIG9mIHRoZSBjb250cmlidXRpbmcgb2JqZWN0cyBmcm9tIGFs
bCB0aGUgaW52b2NhdGlvbnMKKHdoaWNoIG1heSBiZSBmcm9tIGRpZmZlcmVudCBkaXJlY3Rv
cmllcykgYXJlIGNvbWJpbmVkIGFuZCBnZW5lcmF0ZWQgYnkgYQpzaW5nbGUgYXJjaGl2ZSBj
b21tYW5kLiBOb3RlLCBob3dldmVyLCB0aGF0IGlmIHlvdSBwcnVuZSBhIGJ1aWxkIHNvIHRo
YXQKb25seSBwYXJ0IG9mIGEgbGlicmFyeSBpcyBzcGVjaWZpZWQsIHRoZW4gb25seSB0aGF0
IHBhcnQgb2YgdGhlIGxpYnJhcnkgd2lsbApiZSBnZW5lcmF0ZWQgKHRoZSByZXN0IHdpbGwg
ZGlzYXBwZWFyISkuCgoKPWhlYWQyIFRoZSBDPE1vZHVsZT4gbWV0aG9kCgpUaGUgQzxNb2R1
bGU+IG1ldGhvZCBpcyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBDPFByb2dyYW0+IGFuZCBDPENv
bW1hbmQ+Cm1ldGhvZHMuIFJhdGhlciB0aGFuIGdlbmVyYXRpbmcgYW4gZXhlY3V0YWJsZSBw
cm9ncmFtIGRpcmVjdGx5LCB0aGlzIGNvbW1hbmQKYWxsb3dzIHlvdSB0byBzcGVjaWZ5IHlv
dXIgb3duIGNvbW1hbmQgdG8gYWN0dWFsbHkgZ2VuZXJhdGUgYSBtb2R1bGUuIFRoZQptZXRo
b2QgaXMgaW52b2tlZCBhcyBmb2xsb3dzOgoKICBNb2R1bGUgJGVudiA8bW9kdWxlIG5hbWU+
LCA8c291cmNlIG9yIG9iamVjdCBmaWxlcz4sIDxjb25zdHJ1Y3Rpb24gY29tbWFuZD47CgpU
aGlzIGNvbW1hbmQgaXMgdXNlZnVsIGluIGluc3RhbmNlcyB3aGVyZSB5b3Ugd2lzaCB0byBj
cmVhdGUsIGZvciBleGFtcGxlLApkeW5hbWljYWxseSBsb2FkZWQgbW9kdWxlcywgb3Igc3Rh
dGljYWxseSBsaW5rZWQgY29kZSBsaWJyYXJpZXMuCgoKPWhlYWQyIFRoZSBDPERlcGVuZHM+
IG1ldGhvZAoKVGhlIEM8RGVwZW5kcz4gbWV0aG9kIGFsbG93cyB5b3UgdG8gc3BlY2lmeSBh
ZGRpdGlvbmFsIGRlcGVuZGVuY2llcyBmb3IgYQp0YXJnZXQuICBJdCBpcyBpbnZva2VkIGFz
IGZvbGxvd3M6CgogIERlcGVuZHMgJGVudiA8dGFyZ2V0PiwgPGRlcGVuZGVuY2llcz47CgpU
aGlzIG1heSBiZSBvY2Nhc2lvbmFsbHkgdXNlZnVsLCBlc3BlY2lhbGx5IGluIGNhc2VzIHdo
ZXJlIG5vIHNjYW5uZXIgZXhpc3RzCihvciBpcyB3cml0YWJsZSkgZm9yIHBhcnRpY3VsYXIg
dHlwZXMgb2YgZmlsZXMuIE5vcm1hbGx5LCBkZXBlbmRlbmNpZXMgYXJlCmNhbGN1bGF0ZWQg
YXV0b21hdGljYWxseSBmcm9tIGEgY29tYmluYXRpb24gb2YgdGhlIGV4cGxpY2l0IGRlcGVu
ZGVuY2llcyBzZXQKdXAgYnkgdGhlIG1ldGhvZCBpbnZvY2F0aW9uIG9yIGJ5IHNjYW5uaW5n
IHNvdXJjZSBmaWxlcy4KCkEgc2V0IG9mIGlkZW50aWNhbCBkZXBlbmRlbmNpZXMgZm9yIG11
bHRpcGxlIHRhcmdldHMgbWF5IGJlIHNwZWNpZmllZAp1c2luZyBhIHJlZmVyZW5jZSB0byBh
IGxpc3Qgb2YgdGFyZ2V0cy4gSW4gUGVybCwgYSBsaXN0IHJlZmVyZW5jZSBjYW4KYmUgY3Jl
YXRlZCBieSBlbmNsb3NpbmcgYSBsaXN0IGluIHNxdWFyZSBicmFja2V0cy4gSGVuY2UgdGhl
IGZvbGxvd2luZwpjb21tYW5kOgoKICBEZXBlbmRzICRlbnYgWydmb28nLCAnYmFyJ10sICdp
bnB1dF9maWxlXzEnLCAnaW5wdXRfZmlsZV8yJzsKCnNwZWNpZmllcyB0aGF0IGJvdGggdGhl
IEY8Zm9vPiBhbmQgRjxiYXI+IGZpbGVzIGRlcGVuZCBvbiB0aGUgbGlzdGVkCmlucHV0IGZp
bGVzLgoKCj1oZWFkMiBUaGUgQzxJZ25vcmU+IG1ldGhvZAoKVGhlIEM8SWdub3JlPiBtZXRo
b2QgYWxsb3dzIHlvdSB0byBpZ25vcmUgZXhwbGljaXRseSBkZXBlbmRlbmNpZXMgdGhhdApD
b25zIGluZmVycyBvbiBpdHMgb3duLiAgSXQgaXMgaW52b2tlZCBhcyBmb2xsb3dzOgoKICBJ
Z25vcmUgPHBhdHRlcm5zPjsKClRoaXMgY2FuIGJlIHVzZWQgdG8gYXZvaWQgcmVjb21waWxh
dGlvbnMgZHVlIHRvIGNoYW5nZXMgaW4gc3lzdGVtIGhlYWRlcgpmaWxlcyBvciB1dGlsaXRp
ZXMgdGhhdCBhcmUga25vd24gdG8gbm90IGFmZmVjdCB0aGUgZ2VuZXJhdGVkIHRhcmdldHMu
CgpJZiwgZm9yIGV4YW1wbGUsIGEgcHJvZ3JhbSBpcyBidWlsdCBpbiBhbiBORlMtbW91bnRl
ZCBkaXJlY3Rvcnkgb24KbXVsdGlwbGUgc3lzdGVtcyB0aGF0IGhhdmUgZGlmZmVyZW50IGNv
cGllcyBvZiBGPHN0ZGlvLmg+LCB0aGUgZGlmZmVyZW5jZXMKd2lsbCBhZmZlY3QgdGhlIHNp
Z25hdHVyZXMgb2YgYWxsIGRlcml2ZWQgdGFyZ2V0cyBidWlsdCBmcm9tIHNvdXJjZSBmaWxl
cwp0aGF0IEM8I2luY2x1ZGUgRTxsdD5zdGRpby5oRTxndD4+LiAgVGhpcyB3aWxsIGNhdXNl
IGFsbCB0aG9zZSB0YXJnZXRzIHRvCmJlIHJlYnVpbHQgd2hlbiBjaGFuZ2luZyBzeXN0ZW1z
LiAgSWYgdGhpcyBpcyBub3QgZGVzaXJhYmxlIGJlaGF2aW9yLCB0aGVuCnRoZSBmb2xsb3dp
bmcgbGluZSB3aWxsIHJlbW92ZSB0aGUgZGVwZW5kZW5jaWVzIG9uIHRoZSBGPHN0ZGlvLmg+
IGZpbGU6CgogIElnbm9yZSAnXi91c3IvaW5jbHVkZS9zdGRpb1wuaCQnOwoKTm90ZSB0aGF0
IHRoZSBhcmd1bWVudHMgdG8gdGhlIEM8SWdub3JlPiBtZXRob2QgYXJlIHJlZ3VsYXIgZXhw
cmVzc2lvbnMsCnNvIHNwZWNpYWwgY2hhcmFjdGVycyBtdXN0IGJlIGVzY2FwZWQgYW5kIHlv
dSBtYXkgd2lzaCB0byBhbmNob3IgdGhlCmJlZ2lubmluZyBvciBlbmQgb2YgdGhlIGV4cHJl
c3Npb24gd2l0aCBDPF4+IG9yIEM8JD4gY2hhcmFjdGVycy4KCgo9aGVhZDIgVGhlIEM8U2Fs
dD4gbWV0aG9kCgpUaGUgQzxTYWx0PiBtZXRob2QgYWRkcyBhIGNvbnN0YW50IHZhbHVlIHRv
IHRoZSBzaWduYXR1cmUgY2FsY3VsYXRpb24KZm9yIGV2ZXJ5IGRlcml2ZWQgZmlsZS4gIEl0
IGlzIGludm9rZWQgYXMgZm9sbG93czoKCiAgU2FsdCAkc3RyaW5nOwoKQ2hhbmdpbmcgdGhl
IFNhbHQgdmFsdWUgd2lsbCBmb3JjZSBhIGNvbXBsZXRlIHJlYnVpbGQgb2YgZXZlcnkgZGVy
aXZlZApmaWxlLiAgVGhpcyBjYW4gYmUgdXNlZCB0byBmb3JjZSByZWJ1aWxkcyBpbiBjZXJ0
YWluIGRlc2lyZWQKY2lyY3Vtc3RhbmNlcy4gIEZvciBleGFtcGxlLAoKICBTYWx0IGB1bmFt
ZSAtc2A7CgpXb3VsZCBmb3JjZSBhIGNvbXBsZXRlIHJlYnVpbGQgb2YgZXZlcnkgZGVyaXZl
ZCBmaWxlIHdoZW5ldmVyIHRoZQpvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBidWls
ZCBpcyBwZXJmb3JtZWQgKGFzIHJlcG9ydGVkIGJ5IEM8dW5hbWUKLXM+KSBjaGFuZ2VzLgoK
Cj1oZWFkMiBUaGUgQzxVc2VDYWNoZT4gbWV0aG9kCgpUaGUgQzxVc2VDYWNoZT4gbWV0aG9k
IGluc3RydWN0cyBDb25zIHRvIG1haW50YWluIGEgY2FjaGUgb2YgZGVyaXZlZApmaWxlcywg
dG8gYmUgc2hhcmVkIGFtb25nIHNlcGFyYXRlIGJ1aWxkIHRyZWVzIG9mIHRoZSBzYW1lIHBy
b2plY3QuCgogIFVzZUNhY2hlKCJjYWNoZS88YnVpbGRuYW1lPiIpIHx8IHdhcm4oImNhY2hl
IGRpcmVjdG9yeSBub3QgZm91bmQiKTsKCgo9aGVhZDIgVGhlIEM8U291cmNlUGF0aD4gbWV0
aG9kCgpUaGUgQzxTb3VyY2VQYXRoPiBtYXRob2QgcmV0dXJucyB0aGUgcmVhbCBzb3VyY2Ug
cGF0aCBuYW1lIG9mIGEgZmlsZSwKYXMgb3Bwb3N0ZWQgdG8gdGhlIHBhdGggbmFtZSB3aXRo
aW4gYSBidWlsZCBkaXJlY3RvcnkuICBJdCBpcyBpbnZva2VkCmFzIGZvbGxvd3M6CgogICRw
YXRoID0gU291cmNlUGF0aCA8YnVpbGRwYXRoPjsKCgo9aGVhZDIgVGhlIEM8Q29uc1BhdGg+
IG1ldGhvZAoKVGhlIEM8Q29uc1BhdGg+IG1ldGhvZCByZXR1cm5zIHRydWUgaWYgdGhlIHN1
cHBsaWVkIHBhdGggaXMgYSBkZXJpdmFibGUKZmlsZSwgYW5kIHJldHVybnMgdW5kZWYgKGZh
bHNlKSBvdGhlcndpc2UuCkl0IGlzIGludm9rZWQgYXMgZm9sbG93czoKCiAgJHJlc3VsdCA9
IENvbnNQYXRoIDxwYXRoPjsKCgo9aGVhZDIgVGhlIEM8U3BsaXRQYXRoPiBtZXRob2QKClRo
ZSBDPFNwbGl0UGF0aD4gbWV0aG9kIGxvb2tzIHVwIG11bHRpcGxlIHBhdGggbmFtZXMgaW4g
YSBzdHJpbmcgc2VwYXJhdGVkCmJ5IHRoZSBkZWZhdWx0IHBhdGggc2VwYXJhdG9yIGZvciB0
aGUgb3BlcmF0aW5nIHN5c3RlbSAoJzonIG9uIFVOSVgKc3lzdGVtcywgJzsnIG9uIFdpbmRv
d3MgTlQpLCBhbmQgcmV0dXJucyB0aGUgZnVsbHktcXVhbGlmaWVkIG5hbWVzLgpJdCBpcyBp
bnZva2VkIGFzIGZvbGxvd3M6CgogIEBwYXRocyA9IFNwbGl0UGF0aCA8cGF0aGxpc3Q+OwoK
VGhlIEM8U3BsaXRQYXRoPiBtZXRob2Qgd2lsbCBjb252ZXJ0ICBuYW1lcyBwcmVmaXhlZCAn
IycgdG8gdGhlCmFwcHJvcHJpYXRlIHRvcC1sZXZlbCBidWlsZCBuYW1lICh3aXRob3V0IHRo
ZSAnIycpIGFuZCB3aWxsIGNvbnZlcnQKcmVsYXRpdmUgbmFtZXMgdG8gdG9wLWxldmVsIG5h
bWVzLgoKCj1oZWFkMiBUaGUgQzxEaXJQYXRoPiBtZXRob2QKClRoZSBDPERpclBhdGg+IG1l
dGhvZCByZXR1cm5zIHRoZSBidWlsZCBwYXRoIG5hbWUocykgb2YgYSBkaXJlY3Rvcnkgb3IK
bGlzdCBvZiBkaXJlY3Rvcmllcy4gIEl0IGlzIGludm9rZWQgYXMgZm9sbG93czoKCiAgJGN3
ZCA9IERpclBhdGggPHBhdGhzPjsKClRoZSBtb3N0IGNvbW1vbiB1c2UgZm9yIHRoZSBDPERp
clBhdGg+IG1ldGhvZCBpczoKCiAgJGN3ZCA9IERpclBhdGggJy4nOwoKdG8gZmV0Y2ggdGhl
IHBhdGggdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IG9mIGEgc3Vic2lkaWFyeSBGPENvbnNj
cmlwdD4KZmlsZS4KCgo9aGVhZDIgVGhlIEM8RmlsZVBhdGg+IG1ldGhvZAoKVGhlIEM8Rmls
ZVBhdGg+IG1ldGhvZCByZXR1cm5zIHRoZSBidWlsZCBwYXRoIG5hbWUocykgb2YgYSBmaWxl
IG9yCmxpc3Qgb2YgZmlsZXMuICBJdCBpcyBpbnZva2VkIGFzIGZvbGxvd3M6CgogICRmaWxl
ID0gRmlsZVBhdGggPHBhdGg+OwoKCj1oZWFkMiBUaGUgQzxIZWxwPiBtZXRob2QKClRoZSBD
PEhlbHA+IG1ldGhvZCBzcGVjaWZpZXMgaGVscCB0ZXh0IHRoYXQgd2lsbCBiZSBkaXNwbGF5
ZWQgd2hlbiB0aGUKdXNlciBpbnZva2VzIEM8Y29ucyAtaD4uICBUaGlzIGNhbiBiZSB1c2Vk
IHRvIHByb3ZpZGUgZG9jdW1lbnRhdGlvbgpvZiBzcGVjaWZpYyB0YXJnZXRzLCB2YWx1ZXMs
IGJ1aWxkIG9wdGlvbnMsIGV0Yy4gZm9yIHRoZSBidWlsZCB0cmVlLgpJdCBpcyBpbnZva2Vk
IGFzIGZvbGxvd3M6CgogIEhlbHAgPGhlbHB0ZXh0PjsKClRoZSBDPEhlbHA+IG1ldGhvZCBt
YXkgb25seSBiZSBjYWxsZWQgb25jZSwgYW5kIHNob3VsZCB0eXBpY2FsbHkgYmUKc3BlY2lm
aWVkIGluIHRoZSB0b3AtbGV2ZWwgRjxDb25zdHJ1Y3Q+IGZpbGUuCgoKPWhlYWQxIEV4dGVu
ZGluZyBDb25zCgoKPWhlYWQyIE92ZXJyaWRpbmcgY29uc3RydWN0aW9uIHZhcmlhYmxlcwoK
VGhlcmUgYXJlIHNldmVyYWwgd2F5cyBvZiBleHRlbmRpbmcgQ29ucywgd2hpY2ggdmFyeSBp
biBkZWdyZWUgb2YKZGlmZmljdWx0eS4gVGhlIHNpbXBsZXN0IG1ldGhvZCBpcyB0byBkZWZp
bmUgeW91ciBvd24gY29uc3RydWN0aW9uCmVudmlyb25tZW50LCBiYXNlZCBvbiB0aGUgZGVm
YXVsdCBlbnZpcm9ubWVudCwgYnV0IG1vZGlmaWVkIHRvIHJlZmxlY3QgeW91cgpwYXJ0aWN1
bGFyIG5lZWRzLiBUaGlzIHdpbGwgb2Z0ZW4gc3VmZmljZSBmb3IgQy1iYXNlZCBhcHBsaWNh
dGlvbnMuIFlvdSBjYW4KdXNlIHRoZSBDPG5ldz4gY29uc3RydWN0b3IsIGFuZCB0aGUgQzxj
bG9uZT4gYW5kIEM8Y29weT4gbWV0aG9kcyB0byBjcmVhdGUKaHlicmlkIGVudmlyb25tZW50
cy4gVGhlc2UgY2hhbmdlcyBjYW4gYmUgZW50aXJlbHkgdHJhbnNwYXJlbnQgdG8gdGhlCnVu
ZGVybHlpbmcgRjxDb25zY3JpcHQ+IGZpbGVzLgoKCj1oZWFkMiBBZGRpbmcgbmV3IG1ldGhv
ZHMKCkZvciBzbGlnaHRseSBtb3JlIGRlbWFuZGluZyBjaGFuZ2VzLCB5b3UgbWF5IHdpc2gg
dG8gYWRkIG5ldyBtZXRob2RzIHRvIHRoZQpDPGNvbnM+IHBhY2thZ2UuIEhlcmUncyBhbiBl
eGFtcGxlIG9mIGEgdmVyeSBzaW1wbGUgZXh0ZW5zaW9uLApDPEluc3RhbGxTY3JpcHQ+LCB3
aGljaCBpbnN0YWxscyBhIHRjbCBzY3JpcHQgaW4gYSByZXF1ZXN0ZWQgbG9jYXRpb24sIGJ1
dAplZGl0cyB0aGUgc2NyaXB0IGZpcnN0IHRvIHJlZmxlY3QgYSBwbGF0Zm9ybS1kZXBlbmRl
bnQgcGF0aCB0aGF0IG5lZWRzIHRvIGJlCmluc3RhbGxlZCBpbiB0aGUgc2NyaXB0OgoKICAj
IGNvbnM6Okluc3RhbGxTY3JpcHQgLSBDcmVhdGUgYSBwbGF0Zm9ybSBkZXBlbmRlbnQgdmVy
c2lvbiBvZiBhIHNoZWxsCiAgIyBzY3JpcHQgYnkgcmVwbGFjaW5nIHN0cmluZyBgYCMheW91
ci1wYXRoLWhlcmUnJyB3aXRoIHBsYXRmb3JtIHNwZWNpZmljCiAgIyBwYXRoICRCSU5fRElS
LgoKICBzdWIgY29uczo6SW5zdGFsbFNjcmlwdCB7CglteSAoJGVudiwgJGRzdCwgJHNyYykg
PSBAXzsKCUNvbW1hbmQgJGVudiAkZHN0LCAkc3JjLCBxcSgKCQlzZWQgcyt5b3VyLXBhdGgt
aGVyZSskQklOX0RJUisgJTwgPiAlPgoJCWNobW9kIG91Zyt4ICU+CgkpOwogIH0KCk5vdGlj
ZSB0aGF0IHRoaXMgbWV0aG9kIGlzIGRlZmluZWQgZGlyZWN0bHkgaW4gdGhlIEM8Y29ucz4g
cGFja2FnZSAoYnkKcHJlZml4aW5nIHRoZSBuYW1lIHdpdGggQzxjb25zOjo+KS4gQSBjaGFu
Z2UgbWFkZSBpbiB0aGlzIG1hbm5lciB3aWxsIGJlCmdsb2JhbGx5IHZpc2libGUgdG8gYWxs
IGVudmlyb25tZW50cywgYW5kIGNvdWxkIGJlIGNhbGxlZCBhcyBpbiB0aGUKZm9sbG93aW5n
IGV4YW1wbGU6CgogIEluc3RhbGxTY3JpcHQgJGVudiAiJEJJTi9mb28iLCAiZm9vLnRjbCI7
CgpGb3IgYSBzbWFsbCBpbXByb3ZlbWVudCBpbiBnZW5lcmFsaXR5LCB0aGUgQzxCSU5ESVI+
IHZhcmlhYmxlIGNvdWxkIGJlCnBhc3NlZCBpbiBhcyBhbiBhcmd1bWVudCBvciB0YWtlbiBm
cm9tIHRoZSBjb25zdHJ1Y3Rpb24gZW52aXJvbm1lbnQtLWFzCkM8JUJJTkRJUj4uCgoKPWhl
YWQyIE92ZXJyaWRpbmcgbWV0aG9kcwoKSW5zdGVhZCBvZiBhZGRpbmcgdGhlIG1ldGhvZCB0
byB0aGUgQzxjb25zPiBuYW1lIHNwYWNlLCB5b3UgY291bGQgZGVmaW5lIGEKbmV3IHBhY2th
Z2Ugd2hpY2ggaW5oZXJpdHMgZXhpc3RpbmcgbWV0aG9kcyBmcm9tIHRoZSBDPGNvbnM+IHBh
Y2thZ2UgYW5kCm92ZXJyaWRlcyBvciBhZGRzIG90aGVycy4gVGhpcyBjYW4gYmUgZG9uZSB1
c2luZyBQZXJsJ3MgaW5oZXJpdGFuY2UKbWVjaGFuaXNtcy4KClRoZSBmb2xsb3dpbmcgZXhh
bXBsZSBkZWZpbmVzIGEgbmV3IHBhY2thZ2UgQzxjb25zOjpzd2l0Y2g+IHdoaWNoIG92ZXJy
aWRlcyB0aGUKc3RhbmRhcmQgQzxMaWJyYXJ5PiBtZXRob2QuIFRoZSBvdmVycmlkZGVuIG1l
dGhvZCBidWlsZHMgbGlua2VkIGxpYnJhcnkKbW9kdWxlcywgcmF0aGVyIHRoYW4gbGlicmFy
eSBhcmNoaXZlcy4gQSBuZXcgY29uc3RydWN0b3IgaXMKcHJvdmlkZWQuIEVudmlyb25tZW50
cyBjcmVhdGVkIHdpdGggdGhpcyBjb25zdHJ1Y3RvciB3aWxsIGhhdmUgdGhlIG5ldwpsaWJy
YXJ5IG1ldGhvZDsgb3RoZXJzIHdvbid0LgoKICBwYWNrYWdlIGNvbnM6OnN3aXRjaDsKICBC
RUdJTiB7QElTQSA9ICdjb25zJ30KCiAgc3ViIG5ldyB7CglzaGlmdDsKCWJsZXNzIG5ldyBj
b25zKEBfKTsKICB9CgogIHN1YiBMaWJyYXJ5IHsKCW15KCRlbnYpID0gc2hpZnQ7CglteSgk
bGliKSA9IHNoaWZ0OwoJbXkoQG9ianMpID0gT2JqZWN0cyAkZW52IEBfOwoJQ29tbWFuZCAk
ZW52ICRsaWIsIEBvYmpzLCBxKAoJCSVMRCAtciAlTERGTEFHUyAlPCAtbyAlPgoJKTsKICB9
CgpUaGlzIGZ1bmN0aW9uYWxpdHkgY291bGQgYmUgaW52b2tlZCBhcyBpbiB0aGUgZm9sbG93
aW5nIGV4YW1wbGU6CgogICRlbnYgPSBuZXcgY29uczo6c3dpdGNoKEBvdmVycmlkZXMpOwog
IC4uLgogIExpYnJhcnkgJGVudiAnbGliLm8nLCAnZm9vLmMnLCAnYmFyLmMnOwoKCj1oZWFk
MSBJbnZva2luZyBDb25zCgpUaGUgQzxjb25zPiBjb21tYW5kIGlzIHVzdWFsbHkgaW52b2tl
ZCBmcm9tIHRoZSByb290IG9mIHRoZSBidWlsZCB0cmVlLiBBCkY8Q29uc3RydWN0PiBmaWxl
IG11c3QgZXhpc3QgaW4gdGhhdCBkaXJlY3RvcnkuIElmIHRoZSBDPC1mPiBhcmd1bWVudCBp
cwp1c2VkLCB0aGVuIGFuIGFsdGVybmF0ZSBGPENvbnN0cnVjdD4gZmlsZSBtYXkgYmUgdXNl
ZCAoYW5kLCBwb3NzaWJseSwgYW4KYWx0ZXJuYXRlIHJvb3QsIHNpbmNlIEM8Y29ucz4gd2ls
bCBjZCB0byBGPENvbnN0cnVjdD4gZmlsZSdzIGNvbnRhaW5pbmcKZGlyZWN0b3J5KS4KCklm
IEM8Y29ucz4gaXMgaW52b2tlZCBmcm9tIGEgY2hpbGQgb2YgdGhlIHJvb3Qgb2YgdGhlIGJ1
aWxkIHRyZWUgd2l0aAp0aGUgQzwtdD4gYXJndW1lbnQsIGl0IHdpbGwgd2FsayB1cCB0aGUg
ZGlyZWN0b3J5IGhpZXJhcmNoeSBsb29raW5nIGZvciBhCkY8Q29uc3RydWN0PiBmaWxlLiAg
KEFuIGFsdGVybmF0ZSBuYW1lIG1heSBzdGlsbCBiZSBzcGVjaWZpZWQgd2l0aCBDPC1mPi4p
ClRoZSB0YXJnZXRzIHN1cHBsaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUgd2lsbCBiZSBtb2Rp
ZmllZCB0byBiZSByZWxhdGl2ZQp0byB0aGUgZGlzY292ZXJlZCBGPENvbnN0cnVjdD4gZmls
ZS4gIEZvciBleGFtcGxlLCBmcm9tIGEgZGlyZWN0b3J5CmNvbnRhaW5pbmcgYSB0b3AtbGV2
ZWwgRjxDb25zdHJ1Y3Q+IGZpbGUsIHRoZSBmb2xsb3dpbmcgaW52b2NhdGlvbjoKCiAgJSBj
ZCBsaWJmb28vc3ViZGlyCiAgJSBjb25zIC10IHRhcmdldAoKaXMgZXhhY3RseSBlcXVpdmFs
ZW50IHRvOgoKICAlIGNvbnMgbGliZm9vL3N1YmRpci90YXJnZXQKCklmIHRoZXJlIGFyZSBh
bnkgQzxEZWZhdWx0PiB0YXJnZXRzIHNwZWNpZmllZCBpbiB0aGUgZGlyZWN0b3J5IGhpZXJh
cmNoeSdzCkY8Q29uc3RydWN0PiBvciBGPENvbnNjcmlwdD4gZmlsZXMsIG9ubHkgdGhlIGRl
ZmF1bHQgdGFyZ2V0cyBhdCBvciBiZWxvdwp0aGUgZGlyZWN0b3J5IGZyb20gd2hpY2ggQzxj
b25zIC10PiB3YXMgaW52b2tlZCB3aWxsIGJlIGJ1aWx0LgoKVGhlIGNvbW1hbmQgaXMgaW52
b2tlZCBhcyBmb2xsb3dzOgoKICBjb25zIDxhcmd1bWVudHM+IC0tIDxjb25zdHJ1Y3QtYXJn
cz4KCndoZXJlIEk8YXJndW1lbnRzPiBjYW4gYmUgYW55IG9mIHRoZSBmb2xsb3dpbmcsIGlu
IGFueSBvcmRlcjoKCj1vdmVyIDEwCgo9aXRlbSBJPHRhcmdldD4KCkJ1aWxkIHRoZSBzcGVj
aWZpZWQgdGFyZ2V0LiBJZiBJPHRhcmdldD4gaXMgYSBkaXJlY3RvcnksIHRoZW4gcmVjdXJz
aXZlbHkKYnVpbGQgZXZlcnl0aGluZyB3aXRoaW4gdGhhdCBkaXJlY3RvcnkuCgo9aXRlbSBJ
PCtwYXR0ZXJuPgoKTGltaXQgdGhlIEY8Q29uc2NyaXB0PiBmaWxlcyBjb25zaWRlcmVkIHRv
IGp1c3QgdGhvc2UgdGhhdCBtYXRjaCBJPHBhdHRlcm4+LAp3aGljaCBpcyBhIFBlcmwgcmVn
dWxhciBleHByZXNzaW9uLiBNdWx0aXBsZSBDPCs+IGFyZ3VtZW50cyBhcmUgYWNjZXB0ZWQu
Cgo9aXRlbSBJPG5hbWU+PTx2YWw+CgpTZXRzIEk8bmFtZT4gdG8gdmFsdWUgSTx2YWw+IGlu
IHRoZSBDPEFSRz4gaGFzaCBwYXNzZWQgdG8gdGhlIHRvcC1sZXZlbApGPENvbnN0cnVjdD4g
ZmlsZS4KCj1pdGVtIEM8LWNjPgoKU2hvdyBjb21tYW5kIHRoYXQgd291bGQgaGF2ZSBiZWVu
IGV4ZWN1dGVkLCB3aGVuIHJldHJpZXZpbmcgZnJvbSBjYWNoZS4gTm8KaW5kaWNhdGlvbiB0
aGF0IHRoZSBmaWxlIGhhcyBiZWVuIHJldHJpZXZlZCBpcyBnaXZlbjsgdGhpcyBpcyB1c2Vm
dWwgZm9yCmdlbmVyYXRpbmcgYnVpbGQgbG9ncyB0aGF0IGNhbiBiZSBjb21wYXJlZCB3aXRo
IHJlYWwgYnVpbGQgbG9ncy4KCj1pdGVtIEM8LWNkPgoKRGlzYWJsZSBhbGwgY2FjaGluZy4g
RG8gbm90IHJldHJpZXZlIGZyb20gY2FjaGUgbm9yIGZsdXNoIHRvIGNhY2hlLgoKPWl0ZW0g
QzwtY3I+CgpCdWlsZCBkZXBlbmRlbmNpZXMgaW4gcmFuZG9tIG9yZGVyLiBUaGlzIGlzIHVz
ZWZ1bCB3aGVuIGJ1aWxkaW5nIG11bHRpcGxlCnNpbWlsYXIgdHJlZXMgd2l0aCBjYWNoaW5n
IGVuYWJsZWQuCgo9aXRlbSBDPC1jcz4KClN5bmNocm9uaXplIGV4aXN0aW5nIGJ1aWxkIHRh
cmdldHMgdGhhdCBhcmUgZm91bmQgdG8gYmUgdXAtdG8tZGF0ZSB3aXRoCmNhY2hlLiBUaGlz
IGlzIHVzZWZ1bCBpZiBjYWNoaW5nIGhhcyBiZWVuIGRpc2FibGVkIHdpdGggLWNjIG9yIGp1
c3QgcmVjZW50bHkKZW5hYmxlZCB3aXRoIFVzZUNhY2hlLgoKPWl0ZW0gQzwtZD4KCkVuYWJs
ZSBkZXBlbmRlbmN5IGRlYnVnZ2luZy4KCj1pdGVtIEM8LWY+IDxmaWxlPgoKVXNlIHRoZSBz
cGVjaWZpZWQgZmlsZSBpbnN0ZWFkIG9mIEY8Q29uc3RydWN0PiAoYnV0IGZpcnN0IGNoYW5n
ZSB0bwpjb250YWluaW5nIGRpcmVjdG9yeSBvZiBJPGZpbGU+KS4KCj1pdGVtIEM8LWg+CgpT
aG93IGEgaGVscCBtZXNzYWdlIGxvY2FsIHRvIHRoZSBjdXJyZW50IGJ1aWxkIGlmIG9uZSBz
dWNoIGlzIGRlZmluZWQsIGFuZApleGl0LgoKPWl0ZW0gQzwtaz4KCktlZXAgZ29pbmcgYXMg
ZmFyIGFzIHBvc3NpYmxlIGFmdGVyIGVycm9ycy4KCj1pdGVtIEM8LW8+IDxmaWxlPgoKUmVh
ZCBvdmVycmlkZSBmaWxlIEk8ZmlsZT4uCgo9aXRlbSBDPC1wPgoKU2hvdyBjb25zdHJ1Y3Rp
b24gcHJvZHVjdHMgaW4gc3BlY2lmaWVkIHRyZWVzLiBObyBidWlsZCBpcyBhdHRlbXB0ZWQu
Cgo9aXRlbSBDPC1wYT4KClNob3cgY29uc3RydWN0aW9uIHByb2R1Y3RzIGFuZCBhc3NvY2lh
dGVkIGFjdGlvbnMuIE5vIGJ1aWxkIGlzIGF0dGVtcHRlZC4KCj1pdGVtIEM8LXB3PgoKU2hv
dyBwcm9kdWN0cyBhbmQgd2hlcmUgdGhleSBhcmUgZGVmaW5lZC4gTm8gYnVpbGQgaXMgYXR0
ZW1wdGVkLgoKPWl0ZW0gQzwtcT4KCkRvbid0IGJlIHZlcmJvc2UgYWJvdXQgSW5zdGFsbGlu
ZyBhbmQgUmVtb3ZpbmcgdGFyZ2V0cy4KCj1pdGVtIEM8LXI+CgpSZW1vdmUgY29uc3RydWN0
aW9uIHByb2R1Y3RzIGFzc29jaWF0ZWQgd2l0aCA8dGFyZ2V0cz4uIE5vIGJ1aWxkIGlzCmF0
dGVtcHRlZC4KCj1pdGVtIEM8LVI+IDxyZXBvcz4KClNlYXJjaCBmb3IgZmlsZXMgaW4gSTxy
ZXBvcz4uICBNdWx0aXBsZSBCPC1SPiBJPHJlcG9zPiBkaXJlY3RvcmllcyBhcmUKc2VhcmNo
ZWQgaW4gdGhlIG9yZGVyIHNwZWNpZmllZC4KCj1pdGVtIEM8LXQ+CgpUcmF2ZXJzZSB1cCB0
aGUgZGlyZWN0b3J5IGhpZXJhcmNoeSBsb29raW5nIGZvciBhIEY8Q29uc3RydWN0PiBmaWxl
LCBpZgpub25lIGV4aXN0cyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuICBUYXJnZXRzIHdp
bGwgYmUgbW9kaWZpZWQgdG8gYmUKcmVsYXRpdmUgdG8gdGhlIEY8Q29uc3RydWN0PiBmaWxl
LgoKPWl0ZW0gQzwtdj4KClNob3cgQzxjb25zPiB2ZXJzaW9uIGFuZCBjb250aW51ZSBwcm9j
ZXNzaW5nLgoKPWl0ZW0gQzwtVj4KClNob3cgQzxjb25zPiB2ZXJzaW9uIGFuZCBleGl0LgoK
PWl0ZW0gQzwtd2Y+IDxmaWxlPgoKV3JpdGUgYWxsIGZpbGVuYW1lcyBjb25zaWRlcmVkIGlu
dG8gSTxmaWxlPi4KCj1pdGVtIEM8LXg+CgpTaG93IGEgaGVscCBtZXNzYWdlIHNpbWlsYXIg
dG8gdGhpcyBvbmUsIGFuZCBleGl0LgoKPWJhY2sKCkFuZCBJPGNvbnN0cnVjdC1hcmdzPiBj
YW4gYmUgYW55IGFyZ3VtZW50cyB0aGF0IHlvdSB3aXNoIHRvIHByb2Nlc3MgaW4gdGhlCkY8
Q29uc3RydWN0PiBmaWxlLiBOb3RlIHRoYXQgdGhlcmUgc2hvdWxkIGJlIGEgQjwtLT4gc2Vw
YXJhdGluZyB0aGUgYXJndW1lbnRzCnRvIGNvbnMgYW5kIHRoZSBhcmd1bWVudHMgdGhhdCB5
b3Ugd2lzaCB0byBwcm9jZXNzIGluIHRoZSBGPENvbnN0cnVjdD4gZmlsZS4KClByb2Nlc3Np
bmcgb2YgSTxjb25zdHJ1Y3QtYXJncz4gY2FuIGJlIGRvbmUgYnkgYW55IHN0YW5kYXJkIHBh
Y2thZ2UgbGlrZQpCPEdldG9wdD4gb3IgaXRzIHZhcmlhbnRzLCBvciBhbnkgdXNlciBkZWZp
bmVkIHBhY2thZ2UuIEI8Y29ucz4gd2lsbCBwYXNzIGluCnRoZSBJPGNvbnN0cnVjdC1hcmdz
PiBhcyBCPEBBUkdWPiBhbmQgd2lsbCBub3QgYXR0ZW1wdCB0byBpbnRlcnByZXQgYW55dGhp
bmcKYWZ0ZXIgdGhlIEI8LS0+LgoKICAlIGNvbnMgLVIgL3Vzci9sb2NhbC9yZXBvc2l0b3J5
IC1kIG9zPXNvbGFyaXMgK2RyaXZlciAtLSAtYyB0ZXN0IC1mIERFQlVHCgp3b3VsZCBwYXNz
IHRoZSBmb2xsb3dpbmcgdG8gY29ucwoKICAtUiAvdXNyL2xvY2FsL3JlcG9zaXRvcnkgLWQg
b3M9c29sYXJpcyArZHJpdmVyCgphbmQgdGhlIGZvbGxvd2luZywgdG8gdGhlIHRvcCBsZXZl
bCBGPENvbnN0cnVjdD4gZmlsZSBhcyBCPEBBUkdWPgoKICAtYyB0ZXN0IC1mIERFQlVHCgpO
b3RlIHRoYXQgQzxjb25zIC1yIC4+IGlzIGVxdWl2YWxlbnQgdG8gYSBmdWxsIHJlY3Vyc2l2
ZSBDPG1ha2UgY2xlYW4+LApidXQgcmVxdWlyZXMgbm8gc3VwcG9ydCBpbiB0aGUgRjxDb25z
dHJ1Y3Q+IGZpbGUgb3IgYW55IEY8Q29uc2NyaXB0PgpmaWxlcy4gVGhpcyBpcyBtb3N0IHVz
ZWZ1bCBpZiB5b3UgYXJlIGNvbXBpbGluZyBmaWxlcyBpbnRvIHNvdXJjZQpkaXJlY3Rvcmll
cyAoaWYgeW91IHNlcGFyYXRlIHRoZSBGPGJ1aWxkPiBhbmQgRjxleHBvcnQ+IGRpcmVjdG9y
aWVzLAp0aGVuIHlvdSBjYW4ganVzdCByZW1vdmUgdGhlIGRpcmVjdG9yaWVzKS4KClRoZSBv
cHRpb25zIEM8LXA+LCBDPC1wYT4sIGFuZCBDPC1wdz4gYXJlIGV4dHJlbWVseSB1c2VmdWwg
Zm9yIHVzZSBhcyBhbiBhaWQKaW4gcmVhZGluZyBzY3JpcHRzIG9yIGRlYnVnZ2luZyB0aGVt
LiBJZiB5b3Ugd2FudCB0byBrbm93IHdoYXQgc2NyaXB0Cmluc3RhbGxzIEY8ZXhwb3J0L2lu
Y2x1ZGUvZm9vLmg+LCBmb3IgZXhhbXBsZSwganVzdCB0eXBlOgoKICAlIGNvbnMgLXB3IGV4
cG9ydC9pbmNsdWRlL2Zvby5oCgoKPWhlYWQxIFVzaW5nIGFuZCB3cml0aW5nIGRlcGVuZGVu
Y3kgc2Nhbm5lcnMKClF1aWNrU2NhbiBhbGxvd3Mgc2ltcGxlIHRhcmdldC1pbmRlcGVuZGVu
dCBzY2FubmVycyB0byBiZSBzZXQgdXAgZm9yIHNvdXJjZQpmaWxlcy4gT25seSBvbmUgUXVp
Y2tTY2FuIHNjYW5uZXIgbWF5IGJlIGFzc29jaWF0ZWQgd2l0aCBhbnkgZ2l2ZW4gc291cmNl
CmZpbGUgYW5kIGVudmlyb25tZW50LgoKUXVpY2tTY2FuIGlzIGludm9rZWQgYXMgZm9sbG93
czoKCiAgUXVpY2tTY2FuIENPTlNFTlYgQ09ERVJFRiwgRklMRU5BTUUgWywgUEFUSF0KClRo
ZSBzdWJyb3V0aW5lIHJlZmVyZW5jZWQgYnkgQ09ERVJFRiBpcyBleHBlY3RlZCB0byByZXR1
cm4gYSBsaXN0IG9mCmZpbGVuYW1lcyBpbmNsdWRlZCBkaXJlY3RseSBieSBGSUxFLiBUaGVz
ZSBmaWxlbmFtZXMgd2lsbCwgaW4gdHVybiwgYmUKc2Nhbm5lZC4gVGhlIG9wdGlvbmFsIFBB
VEggYXJndW1lbnQgc3VwcGxpZXMgYSBsb29rdXAgcGF0aCBmb3IgZmluZGluZwpGSUxFTkFN
RSBhbmQvb3IgZmlsZXMgcmV0dXJuZWQgYnkgdGhlIHVzZXItc3VwcGxpZWQgc3Vicm91dGlu
ZS4gIFRoZSBQQVRICm1heSBiZSBhIHJlZmVyZW5jZSB0byBhbiBhcnJheSBvZiBsb29rdXAt
ZGlyZWN0b3J5IG5hbWVzLCBvciBhIHN0cmluZyBvZgpuYW1lcyBzZXBhcmF0ZWQgYnkgdGhl
IHN5c3RlbSdzIHNlcGFyYXRvciBjaGFyYWN0ZXIgKCc6JyBvbiBVTklYIHN5c3RlbXMsCic7
JyBvbiBXaW5kb3dzIE5UKS4KClRoZSBzdWJyb3V0aW5lIGlzIGNhbGxlZCBvbmNlIGZvciBl
YWNoIGxpbmUgaW4gdGhlIGZpbGUsIHdpdGggJF8gc2V0IHRvIHRoZQpjdXJyZW50IGxpbmUu
IElmIHRoZSBzdWJyb3V0aW5lIG5lZWRzIHRvIGxvb2sgYXQgYWRkaXRpb25hbCBsaW5lcywg
b3IsIGZvcgp0aGF0IG1hdHRlciwgdGhlIGVudGlyZSBmaWxlLCB0aGVuIGl0IG1heSByZWFk
IHRoZW0gaXRzZWxmLCBmcm9tIHRoZQpmaWxlaGFuZGxlIFNDQU4uIEl0IG1heSBhbHNvIHRl
cm1pbmF0ZSB0aGUgbG9vcCwgaWYgaXQga25vd3MgdGhhdCBubyBmdXJ0aGVyCmluY2x1ZGUg
aW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlLCBieSBjbG9zaW5nIHRoZSBmaWxlaGFuZGxlLgoK
V2hldGhlciBvciBub3QgYSBsb29rdXAgcGF0aCBpcyBwcm92aWRlZCwgUXVpY2tTY2FuIGZp
cnN0IHRyaWVzIHRvIGxvb2t1cAp0aGUgZmlsZSByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBk
aXJlY3RvcnkgKGZvciB0aGUgdG9wLWxldmVsIGZpbGUgc3VwcGxpZWQKZGlyZWN0bHkgdG8g
UXVpY2tTY2FuKSwgb3IgZnJvbSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGZpbGUg
d2hpY2gKcmVmZXJlbmNlZCB0aGUgZmlsZS4gVGhpcyBpcyBub3QgdmVyeSBnZW5lcmFsLCBi
dXQgc2VlbXMgZ29vZAplbm91Z2gtLWVzcGVjaWFsbHkgaWYgeW91IGhhdmUgdGhlIGx1eHVy
eSBvZiB3cml0aW5nIHlvdXIgb3duIHV0aWxpdGllcyBhbmQKY2FuIGNvbnRyb2wgdGhlIHVz
ZSBvZiB0aGUgc2VhcmNoIHBhdGggaW4gYSBzdGFuZGFyZCB3YXkuIEZpbmFsbHksIHRoZQpz
ZWFyY2ggcGF0aCBpcywgY3VycmVudGx5LCBjb2xvbiBzZXBhcmF0ZWQuIFRoaXMgbWF5IG5v
dCBtYWtlIHRoZSBOVCBjYW1wCmhhcHB5LgoKSGVyZSdzIGEgcmVhbCBleGFtcGxlLCB0YWtl
biBmcm9tIGEgRjxDb25zdHJ1Y3Q+IGZpbGUgaGVyZToKCiAgc3ViIGNvbnM6OlNNRmdlbiB7
CiAgICAgIG15KCRlbnYsIEB0YWJsZXMpID0gQF87CiAgICAgIGZvcmVhY2ggJHQgKEB0YWJs
ZXMpIHsKCSAgJGVudi0+UXVpY2tTY2FuKHN1YiB7IC9cYlxTKj9cLnNtZlxiL2cgfSwgIiR0
LnNtZiIsCgkJCSAgJGVudi0+e1NNRl9JTkNMVURFX1BBVEh9KTsKCSAgJGVudi0+Q29tbWFu
ZCgKCSAgICAgIFsiJHQuc21kYi5jYyIsIiR0LnNtZGIuaCIsIiR0LnNubXAuY2MiLCIkdC5h
bWkuY2MiLCAiJHQuaHR0cC5jYyJdLAoJICAgICAgIiR0LnNtZiIsCgkgICAgICBxKAoJCXNt
ZmdlbiAlKCAlU01GX0lOQ0xVREVfT1BUICUpICU8CgkgICAgICApCgkgICk7CiAgICAgIH0K
ICB9CgpbTk9URSB0aGF0IHRoZSBmb3JtIEM8JGVudi1FPGd0PlF1aWNrU2NhbiAuLi4+ICBh
bmQgQzwkZW52LUU8Z3Q+Q29tbWFuZAouLi4+IHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5LCBi
dXQsIGZvciBzb21lIHJlYXNvbiwgaXMgcmVxdWlyZWQKZm9yIHRoaXMgcGFydGljdWxhciBp
bnZvY2F0aW9uLiBUaGlzIGFwcGVhcnMgdG8gYmUgYSBidWcgaW4gUGVybCBvcgphIG1pc3Vu
ZGVyc3RhbmRpbmcgb24gbXkgcGFydDsgdGhpcyBpbnZvY2F0aW9uIHN0eWxlIGRvZXMgbm90
IGFsd2F5cwphcHBlYXIgdG8gYmUgbmVjZXNzYXJ5Ll0KClRoaXMgZmluZHMgYWxsIG5hbWVz
IG9mIHRoZSBmb3JtIDxuYW1lPi5zbWYgaW4gdGhlIGZpbGUuIEl0IHdpbGwgcmV0dXJuIHRo
ZQpuYW1lcyBldmVuIGlmIHRoZXkncmUgZm91bmQgd2l0aGluIGNvbW1lbnRzLCBidXQgdGhh
dCdzIE9LICh0aGUgbWVjaGFuaXNtIGlzCmZvcmdpdmluZyBvZiBleHRyYSBmaWxlczsgdGhl
eSdyZSBqdXN0IGlnbm9yZWQgb24gdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUKbWlzc2luZyBm
aWxlIHdpbGwgYmUgbm90aWNlZCB3aGVuIHRoZSBwcm9ncmFtLCBpbiB0aGlzIGV4YW1wbGUs
IHNtZmdlbiwgaXMKYWN0dWFsbHkgaW52b2tlZCkuCgpBIHNjYW5uZXIgaXMgb25seSBpbnZv
a2VkIGZvciBhIGdpdmVuIHNvdXJjZSBmaWxlIGlmIGl0IGlzIG5lZWRlZCBieSBzb21lCnRh
cmdldCBpbiB0aGUgdHJlZS4gSXQgaXMgb25seSBldmVyIGludm9rZWQgb25jZSBmb3IgYSBn
aXZlbiBzb3VyY2UgZmlsZS4KCkhlcmUgaXMgYW5vdGhlciB3YXkgdG8gYnVpbGQgdGhlIHNh
bWUgc2Nhbm5lci4gVGhpcyBvbmUgdXNlcyBhbgpleHBsaWNpdCBjb2RlIHJlZmVyZW5jZSwg
YW5kIGFsc28gKHVuZWNlc3NhcmlseSwgaW4gdGhpcyBjYXNlKSByZWFkcwp0aGUgd2hvbGUg
ZmlsZSBpdHNlbGY6CgogIHN1YiBteXNjYW4gewogICAgICBteShAaW5jbHVkZXMpOwogICAg
ICBkbyB7CgkgIHB1c2goQGluY2x1ZGVzLCAvXGJcUyo/XC5zbWZcYi9nKTsKICAgICAgfSB3
aGlsZSA8U0NBTj47CiAgICAgIEBpbmNsdWRlcwogIH0KCk5vdGUgdGhhdCB0aGUgb3JkZXIg
b2YgdGhlIGxvb3AgaXMgcmV2ZXJzZWQsIHdpdGggdGhlIGxvb3AgdGVzdCBhdCB0aGUKZW5k
LiBUaGlzIGlzIGJlY2F1c2UgdGhlIGZpcnN0IGxpbmUgaXMgYWxyZWFkeSByZWFkIGZvciB5
b3UuIFRoaXMgc2Nhbm5lcgpjYW4gYmUgYXR0YWNoZWQgdG8gYSBzb3VyY2UgZmlsZSBieToK
CiAgICBRdWlja1NjYW4gJGVudiBcbXlzY2FuLCAiJF8uc21mIjsKCj1oZWFkMSBTVVBQT1JU
IEFORCBTVUdHRVNUSU9OUwoKQ29ucyBpcyBtYWludGFpbmVkIGJ5IHRoZSB1c2VyIGNvbW11
bml0eS4gIFRvIHN1YnNjcmliZSwgc2VuZCBtYWlsIHRvCkI8Y29ucy1kaXNjdXNzLXJlcXVl
c3RAZ251Lm9yZz4gd2l0aCBib2R5IEI8c3Vic2NyaWJlPi4KClBsZWFzZSByZXBvcnQgYW55
IHN1Z2dlc3Rpb25zIHRocm91Z2ggdGhlIEI8Y29ucy1kaXNjdXNzQGdudS5vcmc+IG1haWxp
bmcKbGlzdC4KCj1oZWFkMSBCVUdTCgpTdXJlIHRvIGJlIHNvbWUuIFBsZWFzZSByZXBvcnQg
YW55IGJ1Z3MgdGhyb3VnaCB0aGUgQjxidWctY29uc0BnbnUub3JnPgptYWlsaW5nIGxpc3Qu
Cgo9aGVhZDEgSU5GT1JNQVRJT04gQUJPVVQgQ09OUwoKSW5mb3JtYXRpb24gYWJvdXQgQ09O
UyBjYW4gYmUgb2J0YWluZWQgZnJvbSB0aGUgb2ZmaWNpYWwgY29ucyB3ZWIgc2l0ZQpCPGh0
dHA6Ly93d3cuZHNtaXQuY29tL2NvbnMvPiBvciBpdHMgbWlycm9ycyBsaXN0ZWQgdGhlcmUu
CgpUaGUgY29ucyBtYWludGFpbmVycyBjYW4gYmUgY29udGFjdGVkIGJ5IGVtYWlsIGF0CkI8
Y29ucy1tYWludGFpbmVyc0BnbnUub3JnPgoKPWhlYWQxIEFVVEhPUlMKCk9yaWdpbmFsbHkg
YnkgQm9iIFNpZGVib3RoYW0uIFRoZW4gc2lnbmlmaWNhbnRseSBlbnJpY2hlZCBieSB0aGUg
bWVtYmVycwpvZiB0aGUgQ29ucyBjb21tdW5pdHkgQjxjb25zLWRpc2N1c3NAZ251Lm9yZz4u
CgpUaGUgQ29ucyBjb21tdW5pdHkgd291bGQgbGlrZSB0byB0aGFuayBVbHJpY2ggUGZlaWZl
ciBmb3IgdGhlIG9yaWdpbmFsIHBvZApkb2N1bWVudGF0aW9uIGRlcml2ZWQgZnJvbSB0aGUg
Rjxjb25zLmh0bWw+IGZpbGUuIENvbnMgZG9jdW1lbnRhdGlvbiBpcyBub3cKYSBwYXJ0IG9m
IHRoZSBwcm9ncmFtIGl0c2VsZi4KCj1jdXQK
---------10b8b12eaa660e010b8b12eaa660e0
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
_______________________________________________
[email protected]
http://mail.gnu.org/mailman/listinfo/cons-discuss
Cons URL: http://www.dsmit.com/cons/
---------10b8b12eaa660e010b8b12eaa660e0--