GHC for MacOS X

Wolfgang Thaller wolfgang.thaller@gmx.net
Tue, 12 Mar 2002 17:14:19 +0100


--============_-1196172795==_============
Content-Type: text/plain; charset="us-ascii" ; format="flowed"

I've decided to publish another preliminary version of my patches for PowerPC.
I think that unregistered compilation works now - I haven't tried to 
bootstrap ghc using the unregistered compiler yet, but I've had good 
results with some other programs, most notably the cool QBSP sample 
program from the HOpenGL distribution.
Registerized compilation works only partially. Small programs work 
fine, but as soon as things get a little more complicated there are 
segfaults and assertion failures.
The patches are relative to the ghc version from CVS from 
2002.03.04.15.11.33. I didn't want to risk breaking everything again 
by following the bleeding edge too closely.
For now, I recommend including the following lines in mk/build.mk:
GhcUnregistered=YES
SplitObjs=NO
GhcLibWays=

----
Other notes on the patches:
* I've removed the old powerpc/rs6000/aix code from ghc-asm.lprl.
* I've butchered the nice use of non-standard syntax in 
rts/ClosureFlags.c, as it is incompatible with Apple's Objective-C 
compiler. I've solved this by creating a function InitClosureFlags 
which sets the correct values.
* There is some extra initialization code, which resides in Main.c 
for now. It should be moved somewhere else. Can someone tell me what 
the proper place is? I didn't want to break any dependencies by 
moving it to the wrong place (i.e. too late in the initialization 
process).
* I don't think the patches are ready for CVS checkin yet.

Simon Marlow wrote:
>These things are particularly tedious to debug (or fun and rewarding,
>depending on your particular inclinations :-).

Tedious. Very tedious. But when I look back afterwards, I think it 
was fun and rewarding. Probably that's why it is so addictive...


MacOS X users: Please report problems & success stories to me - 
although I can't promise I will be able to solve the problems.


Wolfgang
--============_-1196172795==_============
Content-Id: <a05100300b8b3d93577e9@[192.68.1.4].0.0>
Content-Type: multipart/appledouble; boundary="============_-1196172795==_D============"

--============_-1196172795==_D============
Content-Transfer-Encoding: base64
Content-Type: application/applefile; name="%ghc-macosx-v2.patch"
Content-Disposition: attachment; filename="%ghc-macosx-v2.patch"
 ; modification-date="Tue, 12 Mar 2002 16:56:06 +0100"

AAUWBwACAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAADAAAAPgAAABMAAAAJAAAAUQAAACAA
AAAIAAAAcQAAABBnaGMtbWFjb3N4LXYyLnBhdGNoVEVYVAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAEINlpBCDvpkttDAAEIPQV
--============_-1196172795==_D============
Content-Type: application/octet-stream; name="ghc-macosx-v2.patch"
Content-Disposition: attachment; filename="ghc-macosx-v2.patch"
Content-Transfer-Encoding: base64

SW5kZXg6IGdoYy9jb21waWxlci9hYnNDU3luL0Fic0NVdGlscy5saHMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9mcHRvb2xzL2doYy9jb21waWxlci9hYnNDU3lu
L0Fic0NVdGlscy5saHMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDcKZGlmZiAtcjEu
NDcgQWJzQ1V0aWxzLmxocwoxOWEyMAo+ICNpbmNsdWRlICIuLi9pbmNsdWRlcy9jb25m
aWcuaCIKSW5kZXg6IGdoYy9kcml2ZXIvbWFuZ2xlci9naGMtYXNtLmxwcmwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9mcHRvb2xzL2doYy9kcml2ZXIvbWFuZ2xl
ci9naGMtYXNtLmxwcmwsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNzAKZGlmZiAtcjEu
NzAgZ2hjLWFzbS5scHJsCjI3MiwyNzNjMjcyLDI3Mwo8ICAgICB9IGVsc2lmICggJFRh
cmdldFBsYXRmb3JtID1+IC9ecG93ZXJwYy0uKnxecnM2MDAwLS4qLyApIHsKPCAKLS0t
Cj4gICAgIH0gZWxzaWYgKCAkVGFyZ2V0UGxhdGZvcm0gPX4gL15wb3dlcnBjLWFwcGxl
LS4qLyApIHsKPiAJCQkJIyBBcHBsZSBQb3dlclBDIERhcndpbi9NYWNPUyBYLgoyNzUs
Mjc3YzI3NSwyNzcKPCAgICAgJFRfVVMJICAgID0gJyc7ICMgXyBpZiBzeW1ib2xzIGhh
dmUgYW4gdW5kZXJzY29yZSBvbiB0aGUgZnJvbnQKPCAgICAgJFRfUFJFX0FQUAkgICAg
PSAnTk9UIEFQUExJQ0FCTEUnOyAjIHJlZ2V4cCB0aGF0IHNheXMgd2hhdCBjb21lcyBi
ZWZvcmUgQVBQL05PX0FQUAo8ICAgICAkVF9DT05TVF9MQkwgICAgPSAnTk9UIEFQUExJ
Q0FCTEUnOyAjIHJlZ2V4cCBmb3Igd2hhdCBzdWNoIGEgbGJsIGxvb2tzIGxpa2UKLS0t
Cj4gICAgICRUX1VTCSAgICA9ICdfJzsgIyBfIGlmIHN5bWJvbHMgaGF2ZSBhbiB1bmRl
cnNjb3JlIG9uIHRoZSBmcm9udAo+ICAgICAkVF9QUkVfQVBQCSAgICA9ICdXSEFUIElT
IFRISVMnOyAjIHJlZ2V4cCB0aGF0IHNheXMgd2hhdCBjb21lcyBiZWZvcmUgQVBQL05P
X0FQUAo+ICAgICAkVF9DT05TVF9MQkwgICAgPSAnXlxMQ1xkKzonOyAjIHJlZ2V4cCBm
b3Igd2hhdCBzdWNoIGEgbGJsIGxvb2tzIGxpa2UKMjgwYzI4MAo8ICAgICAkVF9NT1ZF
X0RJUlZTICAgPSAnXihccyooXC50b2N8XC5hbGlnbiBcZCt8XC5jc2VjdCBcUyt8XHRc
Lj9sP2dsb2JsIFxTKylcbiknOwotLS0KPiAgICAgJFRfTU9WRV9ESVJWUyAgID0gJ14o
XHMqKFwuYWxpZ24gXGQrfFwudGV4dHxcLmRhdGF8XC5jc3RyaW5nfFwubm9uX2xhenlf
c3ltYm9sX3BvaW50ZXJ8XC5nbG9ibCBcUyspXG4pJzsKMjg0YzI4NAo8ICAgICAkVF9E
T1RfV09SRAkgICAgPSAnXC5sb25nJzsKLS0tCj4gICAgICRUX0RPVF9XT1JECSAgICA9
ICdcLihsb25nfHNob3J0fGJ5dGUpJzsKMjg3LDI5N2MyODcsMjk3CjwgICAgICRUX0hE
Ul9saXRlcmFsICA9ICJcLmNzZWN0IC5kYXRhW1JXXVxuXHRcLmFsaWduIDJcbiI7CQkj
bm90IFJPIT8KPCAgICAgJFRfSERSX21pc2MJICAgID0gIiMgbWlzY1xuXC5jc2VjdCBc
LnRleHRbUFJdXG5cdFwuYWxpZ24gMlxuIjsKPCAgICAgJFRfSERSX2RhdGEJICAgID0g
IiMgZGF0YVxuXC5jc2VjdCBcLmRhdGFbUlddXG5cdFwuYWxpZ24gMlxuIjsKPCAgICAg
JFRfSERSX2NvbnNpc3QgID0gIiMgY29uc2lzdFxuXC5jc2VjdCBcLmRhdGFbUlddXG5c
dFwuYWxpZ24gMlxuIjsKPCAgICAgJFRfSERSX2Nsb3N1cmUgID0gIiMgY2xvc3VyZVxu
XC5jc2VjdCBcLmRhdGFbUlddXG5cdFwuYWxpZ24gMlxuIjsKPCAgICAgJFRfSERSX3Ny
dCAgICAgID0gIiMgY2xvc3VyZVxuXC5jc2VjdCBcLmRhdGFbUlddXG5cdFwuYWxpZ24g
MlxuIjsKPCAgICAgJFRfSERSX2luZm8JICAgID0gIiMgaW5mb1xuXC5jc2VjdCBcLmRh
dGFbUlddXG5cdFwuYWxpZ24gMlxuIjsgI25vdCBSTyE/CjwgICAgICRUX0hEUl9lbnRy
eSAgICA9ICIjIGVudHJ5XG5cLmNzZWN0IFwudGV4dFtQUl1cblx0XC5hbGlnbiAyXG4i
Owo8ICAgICAkVF9IRFJfZmFzdAkgICAgPSAiIyBmYXN0XG5cLmNzZWN0IFwudGV4dFtQ
Ul1cblx0XC5hbGlnbiAyXG4iOwo8ICAgICAkVF9IRFJfdmVjdG9yICAgPSAiIyB2ZWN0
b3JcblwuY3NlY3QgXC5kYXRhW1JXXVxuXHRcLmFsaWduIDJcbiI7ICNub3QgUk8hPwo8
ICAgICAkVF9IRFJfZGlyZWN0ICAgPSAiIyBkaXJlY3RcbiI7Ci0tLQo+ICAgICAkVF9I
RFJfbGl0ZXJhbCAgPSAiXHRcLmRhdGFcblx0XC5hbGlnbiAyXG4iOwo+ICAgICAkVF9I
RFJfbWlzYwkgICAgPSAiXHRcLnRleHRcblx0XC5hbGlnbiAyXG4iOwo+ICAgICAkVF9I
RFJfZGF0YQkgICAgPSAiXHRcLmRhdGFcblx0XC5hbGlnbiAyXG4iOwo+ICAgICAkVF9I
RFJfY29uc2lzdCAgPSAiXHRcLnRleHRcblx0XC5hbGlnbiAyXG4iOwo+ICAgICAkVF9I
RFJfY2xvc3VyZSAgPSAiXHRcLmRhdGFcblx0XC5hbGlnbiAyXG4iOwo+ICAgICAkVF9I
RFJfc3J0ICAgICAgPSAiXHRcLnRleHRcblx0XC5hbGlnbiAyXG4iOwo+ICAgICAkVF9I
RFJfaW5mbwkgICAgPSAiXHRcLnRleHRcblx0XC5hbGlnbiAyXG4iOwo+ICAgICAkVF9I
RFJfZW50cnkgICAgPSAiXHRcLnRleHRcblx0XC5hbGlnbiAyXG4iOwo+ICAgICAkVF9I
RFJfZmFzdAkgICAgPSAiXHRcLnRleHRcblx0XC5hbGlnbiAyXG4iOwo+ICAgICAkVF9I
RFJfdmVjdG9yICAgPSAiXHRcLnRleHRcblx0XC5hbGlnbiAyXG4iOwo+ICAgICAkVF9I
RFJfZGlyZWN0ICAgPSAiXHRcLnRleHRcblx0XC5hbGlnbiAyXG4iOwo0NDAsNDQyYzQ0
MAo8IAluZXh0IGlmIC8oXiR8Xlx0XC5maWxlXHR8XiAjICkvICYmICRUYXJnZXRQbGF0
Zm9ybSA9fiAvXihtaXBzfHBvd2VycGN8cnM2MDAwKS0vOwo8IAo8IAlsYXN0IGlmIC9e
X3NlY3Rpb25fXC50ZXh0OiQvICYmICRUYXJnZXRQbGF0Zm9ybSA9fiAvXnBvd2VycGMt
fF5yczYwMDAtLzsKLS0tCj4gCW5leHQgaWYgLyheJHxeXHRcLmZpbGVcdHxeICMgKS8g
JiYgJFRhcmdldFBsYXRmb3JtID1+IC9eKG1pcHMpLS87CjU0Niw1NTBkNTQzCjwgIAl9
IGVsc2lmICggJFRhcmdldFBsYXRmb3JtID1+IC9ecG93ZXJwYy18XnJzNjAwMC0vICYm
IC9eTENcLlwuKFswLTldKykvICkgewo8ICAJICAgICRjaGtbKyskaV0gICA9ICRfOwo8
ICAJICAgICRjaGtjYXRbJGldICA9ICd0b2MnOwo8ICAgIAkgICAgJGNoa3N5bWJbJGld
ID0gJDE7CjwgCjU2MSw1NjNkNTUzCjwgIAkgICAgIyRzeW1idG1wID0gJDE7CjwgICAg
ICAgICAgICAgIyRjaGtzeW1iWyRpXSA9ICRzeW1idG1wIGlmICgkVGFyZ2V0UGxhdGZv
cm0gPX4gL15wb3dlcnBjLXxecnM2MDAwLS8pIDsgI3JtIGFuZHJlCjwgCjU5NSw1OTdj
NTg1CjwgCQkgICB8fCAhIC9eTFwkXGQrJC8gKQo8IAkJJiYgKCAkVGFyZ2V0UGxhdGZv
cm0gIX4gL15wb3dlcnBjfF5yczYwMDAvICMgZGl0dG8KPCAJCSAgIHx8ICEgL14oTFwu
XC5cZCt8TFRcLlwuLiopOiQvICkgKSB7Ci0tLQo+IAkJICAgfHwgISAvXkxcJFxkKyQv
ICkgKSB7CjYxMSw2MTNjNTk5CjwgICAgICAgICAgICAgaWYgKCRUYXJnZXRQbGF0Zm9y
bSA9fiAvXnBvd2VycGMtfF5yczYwMDAtLykgCjwgCSAgICAgICB7ICRjaGtzeW1iWyRp
XSA9ICR0aGluZzsgfQo8IAkgICAgZWxzZSB7ICRjaGtzeW1iWyRpXSA9ICcnOyB9Owot
LS0KPiAJICAgICRjaGtzeW1iWyRpXSA9ICcnOwo2MjIsNjI0YzYwOCw2MTIKPCAgICAg
IyBvcGVuIENIVU5LUywgIj4vdG1wL2NodW5rczEiIG9yIGRpZSAiQ2Fubm90IG9wZW4g
L3RtcC9jaHVua3MxOiAkIVxuIjsKPCAgICAgIyBmb3IgKG15ICRpID0gMDsgJGkgPCBA
Y2hrOyArKyRpKSB7IHByaW50IENIVU5LUyAiPT09PT09PSAkaSA9PT09PT09XG4iLCAk
Y2hrWyRpXSB9CjwgICAgICMgY2xvc2UgQ0hVTktTOwotLS0KPiAgICAgb3BlbiBDSFVO
S1MsICI+L3RtcC9jaHVua3MxIiBvciBkaWUgIkNhbm5vdCBvcGVuIC90bXAvY2h1bmtz
MTogJCFcbiI7Cj4gICAgIGZvciAobXkgJGkgPSAwOyAkaSA8IEBjaGs7ICsrJGkpIHsg
cHJpbnQgQ0hVTktTICI9PT09PT09ICRpID09PT09PT1cbiIsICRjaGtbJGldIH0KPiAg
ICAgY2xvc2UgQ0hVTktTOwo+IAo+IAkjICMjIyMjIyMjCjY0Nyw2NzdkNjM0CjwgICAg
IGlmICgkVGFyZ2V0UGxhdGZvcm0gPX4gL15wb3dlcnBjfF5yczYwMDAvKSB7CjwgICAg
ICAgIHByaW50IE9VVEFTTSAkVF9IRFJfdG9jOyAjIHllcywgd2UgaGF2ZSB0byBwdXQg
YSAudG9jIAo8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpbiB0aGUg
YmVnaW5uaW5nIG9mIGV2ZXJ5IGZpbGUhCjwgICAgICV0b2NlcXVpdiA9ICgpOyAgICAg
ICAgICAjIG1hcHMgdG9jIHN5bWJvbCBudW1iZXIgdG8gdG9jIHN5bWJvbAo8ICAgICAl
cmV2dG9jZXF1aXYgPSAoKTsgICAgICAgIyBtYXBzIHRvYyBzeW1ib2wgdG8gdG9jIHN5
bWJvbCBudW1iZXIKPCAgICAgZm9yICgkaSA9IDE7ICRpIDwgJG51bWNoa3M7ICRpKysp
IHsKPCAJJGNoa1skaV0gPX4gcy9cW1JXXF0vL2c7CjwgCSRjaGtbJGldID1+IHMvXFtE
U1xdLy9nOwo8IAkkY2hrWyRpXSA9fiBzL15cLmNzZWN0IC4qXFtEU1xdJC8vZzsKPCAK
PCAJaWYgKCAkY2hrY2F0WyRpXSBlcSAndG9jJyAmJiAkY2hrWyRpXSAhfiAvXC5ieXRl
LyApCjwgI1RvRG86IGluc3RlYWQgb2YgYWxsIHRoZXNlIGNoYW5nZXMsIGp1c3QgZml4
IG1hbmdsZV9wb3dlcnBjX3RhaWxqdW1wIGFuZCBkZWxldGUvaWdub3JlIHRoZXNlIHRv
Y3M/CjwgCSAgIHsgJGNoa1skaV0gPX4gcy8kVF9NT1ZFX0RJUlZTLy9nOwo8IAkgICAg
ICRjaGtbJGldID1+IHMvXHRcLnRjIChcUyspXFtUQ1xdLChcUytfZmFzdFxkKykvXHRc
LnRjIFwxXFtUQ1xdLFwuXDIvOyAKPCAJICAgICAkY2hrWyRpXSA9fiBzL1x0XC50YyAo
XFMrKVxbVENcXSwoXFMrX2VudHJ5KVxuL1x0XC50YyBcMVxbVENcXSxcLlwyXG4vOwo8
IAkgICAgICRjaGtbJGldID1+IHMvXHRcLnRjIChcUyspXFtUQ1xdLChyZXRfXFMrKS9c
dFwudGMgXDFcW1RDXF0sXC5cMi87CjwgCSAgICAgJGNoa1skaV0gPX4gcy9cdFwudGMg
KFxTKylcW1RDXF0sKGFsdF9cUyspL1x0XC50YyBcMVxbVENcXSxcLlwyLzsKPCAJICAg
ICAkY2hrWyRpXSA9fiBzL1x0XC50YyAoXFMrKVxbVENcXSwodnRibF9cUyspL1x0XC50
YyBcMVxbVENcXSxcLlwyLzsKPCAKPCAgICAgICAgICAgICAgJHRvY251bWJlciA9ICRj
aGtzeW1iWyRpXTsKPCAgICAgICAgICAgICAgJHRvY3N5bWIgPSAkY2hrWyRpXTsKPCAg
ICAgICAgICAgICAgJHRvY3N5bWIgPX4gcy9eTENcLlwuXGQrOlxuLy87CjwgICAgICAg
ICAgICAgICR0b2NzeW1iID1+IHMvXlx0XC50YyBcUyssKFxTKylcbi9cMS87CjwgICAg
ICAgICAgICAgICR0b2NlcXVpdnskdG9jbnVtYmVyfSA9ICR0b2NzeW1iOwo8IAo8ICAg
ICAgICAgICAgfSBlbHNpZiAoICRjaGtjYXRbJGldIGVxICd0b2MnICYmICRjaGtbJGld
ID1+IC9cLmJ5dGUvICkgewo8ICAgICAgICAgICAgICAkY2hrY2F0WyRpXSA9ICdsaXRl
cmFsJzsKPCAgICAgICAgICAgIH0KPCAgICAgfQo8ICAgICB9Owo8IAo3MjEsNzI5YzY3
OCw2ODUKPCAgCQl9IGVsc2lmICgkVGFyZ2V0UGxhdGZvcm0gPX4gL15wb3dlcnBjLXxe
cnM2MDAwLykgewo8ICAJCSAgICAkcCA9fiBzL15cdG1mbHIgMFxuLy87CjwgIAkJICAg
ICRwID1+IHMvXlx0c3RtIFxkKywtXGQrXCgxXClcbi8vOwo8ICAgCQkgICAgJHAgPX4g
cy9eXHRzdHc/IDAsXGQrXCgxXClcbi8vZzsKPCAgIAkJICAgICRwID1+IHMvXlx0c3R3
PyAxLFxkK1woMVwpXG4vL2c7ICNtYwo8ICAgCQkgICAgJHAgPX4gcy9eXHRsdz96IDAs
MFwoMVwpXG4vL2c7ICAgI21jCjwgICAJCSAgICAkcCA9fiBzL15cdHN0dz91IDEsLVxk
K1woMVwpXG4vLzsgCjwgICAJCSAgICAkcCA9fiBzL15cdHN0dz8gXGQrLC1cZCtcKDFc
KVxuLy9nOyAKPCAgIAkJICAgICRwID1+IHMvXlx0c3RmZCBcZCssLVxkK1woMVwpXG4v
L2c7IAotLS0KPiAJCX0gZWxzaWYgKCRUYXJnZXRQbGF0Zm9ybSA9fiAvXnBvd2VycGMt
YXBwbGUtLiovKSB7Cj4gIAkJICAgICRwID1+IHMvXlx0bWZsciByMFxuLy87Cj4gIAkJ
ICAgICRwID1+IHMvXlx0Ymwgc2F2ZUZQICMgZlxkK1xuLy87Cj4gIAkJICAgICRwID1+
IHMvXlx0c3RtdyByXGQrLC1cZCtcKHIxXClcbi8vOwo+ICAgIAkJICAgICRwID1+IHMv
Xlx0c3RmZCBmXGQrLC1cZCtcKHIxXClcbi8vZzsKPiAgCQkgICAgJHAgPX4gcy9eXHRz
dHcgcjAsXGQrXChyMVwpXG4vL2c7Cj4gICAJCSAgICAkcCA9fiBzL15cdHN0d3UgcjEs
LVxkK1wocjFcKVxuLy87IAo+ICAgCQkgICAgJHAgPX4gcy9eXHRzdHcgclxkKywtXGQr
XChyMVwpXG4vL2c7IAo3MzQsNzM5YzY5MCw3MDIKPCAJCSMgSFdMIEhBQ0s6IGRvbnQg
ZGllLCBqdXN0IHByaW50IGEgd2FybmluZwo8IAkJI3ByaW50IHN0ZGVyciAgIkhXTDog
dGhpcyBzaG91bGQgZGllISBQcm9sb2d1ZSBqdW5rPzogJHBcbiIgaWYgJHAgPX4gL15c
dFteXC5dLwo8IAkJIyAgICAmJiAkVGFyZ2V0UGxhdGZvcm0gIX4gL15wb3dlcnBjLS87
ICNUb0RvOiByZW1vdmUgdGVzdAo8IAkJZGllICJQcm9sb2d1ZSBqdW5rPzogJHBcbiIg
aWYgJHAgPX4gL15cdFteXC5dLwo8IAkJICAgICYmICRUYXJnZXRQbGF0Zm9ybSAhfiAv
XnBvd2VycGMtLzsgI1RvRG86IHJlbW92ZSB0ZXN0CjwgCi0tLQo+IAkJaWYgKCRUYXJn
ZXRQbGF0Zm9ybSA9fiAvXnBvd2VycGMtYXBwbGUtLiovKSB7Cj4gCQkJIyBvbiBQb3dl
clBDLCB3ZSBoYXZlIHRvIGtlZXAgYSBwYXJ0IG9mIHRoZSBwcm9sb2d1ZQo+IAkJCSMg
KHdoaWNoIGxvYWRzIHRoZSBjdXJyZW50IGluc3RydWN0aW9uIHBvaW50ZXIgaW50byBy
ZWdpc3RlciByMzEpCj4gCQkgICAgJHVfcCA9ICRwOwkjICR1X3AgaXMgZm9yIHVuZXhw
ZWN0ZWQgcHJvbG9ndWUKPiAJCSAgICAkdV9wID1+IHMvXlx0YmNsIDIwLDMxLExcZCtc
JHBiXG4vLzsKPiAJCSAgICAkdV9wID1+IHMvXkxcZCtcJHBiOlxuLy87Cj4gCQkgICAg
JHVfcCA9fiBzL15cdG1mbHIgcjMxXG4vLzsKPiAJCSAgICBkaWUgIlByb2xvZ3VlIGp1
bms/OiAkdV9wXG4iIGlmICR1X3AgPX4gL15cdFteXC5dLwo+IAkJfSBlbHNlIHsKPiAJ
CSAgICAjIEhXTCBIQUNLOiBkb250IGRpZSwganVzdCBwcmludCBhIHdhcm5pbmcKPiAJ
CSAgICAjcHJpbnQgc3RkZXJyICAiSFdMOiB0aGlzIHNob3VsZCBkaWUhIFByb2xvZ3Vl
IGp1bms/OiAkcFxuIiBpZiAkcCA9fiAvXlx0W15cLl0vOwo+IAkJICAgIGRpZSAiUHJv
bG9ndWUganVuaz86ICRwXG4iIGlmICRwID1+IC9eXHRbXlwuXS87Cj4gCQl9Cjc3MCw3
NzVjNzMzLDczOAo8ICAJCX0gZWxzaWYgKCRUYXJnZXRQbGF0Zm9ybSA9fiAvXnBvd2Vy
cGMtfF5yczYwMDAtLykgewo8ICAgCQkgICAgJGUgPX4gcy9eXHRhZGRpIDEsMSxcZCtc
bi8vOwo8ICAgCQkgICAgJGUgPX4gcy9eXHRjYWwgMSxcZCtcKDFcKVxuLy87CjwgICAJ
CSAgICAkZSA9fiBzL15cdGx3P3o/IFxkKyxcZCtcKDFcKVxuLy87IAo8ICAJCSAgICAk
ZSA9fiBzL15cdG10bHIgMFxuLy87CjwgICAJCSAgICAkZSA9fiBzL15cdGJsP3Jcbi8v
OwotLS0KPiAgCQl9IGVsc2lmICgkVGFyZ2V0UGxhdGZvcm0gPX4gL15wb3dlcnBjLWFw
cGxlLS4qLykgewo+ICAgCQkgICAgJGUgPX4gcy9eXHRhZGRpIHIxLHIxLFxkK1xuLy87
Cj4gICAJCSAgICAkZSA9fiBzL15cdGNhbCByMSxcZCtcKHIxXClcbi8vOwo+ICAgCQkg
ICAgJGUgPX4gcy9eXHRsdz96PyByXGQrLFxkK1wocjFcKVxuLy87IAo+ICAJCSAgICAk
ZSA9fiBzL15cdG10bHIgcjBcbi8vOwo+ICAgCQkgICAgJGUgPX4gcy9eXHRibHJcbi8v
Owo3ODAsNzgxYzc0Mwo8IAkJcHJpbnQgU1RERVJSICJXQVJOSU5HOiBFcGlsb2d1ZSBq
dW5rPzogJGVcbiIgaWYgJGUgPX4gL15cdFxzKlteXC5cc1xuXS8KPCAJCSAgICYmICRU
YXJnZXRQbGF0Zm9ybSAhfiAvXnBvd2VycGMtLzsgI1RvRG86IHJlbW92ZSB0ZXN0Ci0t
LQo+IAkJcHJpbnQgU1RERVJSICJXQVJOSU5HOiBFcGlsb2d1ZSBqdW5rPzogJGVcbiIg
aWYgJGUgPX4gL15cdFxzKlteXC5cc1xuXS87CjgwMWE3NjQKPiAJJGMgPX4gcy9eXHRi
bFxzK0xfX19ESVNDQVJEX19cJHN0dWJcbi8vZ28gaWYgJFRhcmdldFBsYXRmb3JtID1+
IC9ecG93ZXJwYy1hcHBsZS0uKi87Cjk0NSw5NTdkOTA3CjwgICAgICAgICAgICAgICAg
IGlmICgkVGFyZ2V0UGxhdGZvcm0gPX4gL15wb3dlcnBjLXxecnM2MDAwLykgeyAKPCAg
ICAgICAgICAgICAgICAgICAgJGNoa3N5bWJbJGldID1+IHMvOi8vOwo8ICNuZXcgICAg
ICAgICAgICAgICAgICAgaWYgKCRjaGtzeW1iWyRpXSA9fiAvcmV0Lip1cGQvIHx8ICRL
Tk9XTl9GVU5OWV9USElOR3skY2hrc3ltYlskaV19CjwgI25ldyAgICAgICAgICAgICAg
ICAgICAgfHwgJGNoa3N5bWJbJGldID1+IC9eJC57VF9VU31fKFBSSW58UFJTdGFydCku
KiR7VF9QT1NUX0xCTH0kL28gKQo8ICNuZXcgICAgICAgICAgICAgICAgICAgICAgeyBw
cmludCBPVVRBU00gIlx0XC5nbG9ibCAkY2hrc3ltYlskaV1cbiI7IH0KPCAjICAgICAg
ICAgICAgICAgICAgIGlmICgkY2hrc3ltYlskaV0gbmUgJycgJiYgJGNoa3N5bWJbJGld
ICF+IC9yZXRfW2Etel0vICYmICRjaGtzeW1iWyRpXSAhfiAvZGpuX1thLXpdLykgCjwg
ICAgICAgICAgICAgICAgICAgIGlmICgkY2hrc3ltYlskaV0gbmUgJycpCjwgICAgICAg
ICAgICAgICAgICAgICAgICB7IHByaW50IE9VVEFTTSAiXHRcLmdsb2JsIFwuJGNoa3N5
bWJbJGldXG4iOyB9Owo8ICAgICAgICAgICAgICAgICAgICBpZiAoJGNoa1skaV0gPX4g
L1RPQ1xbdGMwXF0sIDBcbi8pCjwgCSAgICAgICAgICAgICB7ICgkcCwgJHIpID0gc3Bs
aXQoL1RPQ1xbdGMwXF0sIDBcbi8sICRjaGtbJGldKTsgJHByaW50RFMgPSAxO30KPCAg
ICAgICAgICAgICAgICAgICAgZWxzZSB7ICRyID0gJGNoa1skaV07ICRwcmludERTID0g
MDsgfTsKPCAgICAgICAgICAgICAgICAgICAgJGNoa1skaV0gPSAmbWFuZ2xlX3Bvd2Vy
cGNfdGFpbGp1bXAoJHIpOwo8ICAgICAgICAgICAgICAgICB9Owo5NTksOTY0ZDkwOAo8
ICAgICAgICAgICAgICAgICBpZiAoJFRhcmdldFBsYXRmb3JtID1+IC9ecG93ZXJwYy18
XnJzNjAwMC0vICYmICRwcmludERTKSB7IAo8ICNvayAgICAgICAgICAgICAgICAgICBp
ZiAoJGNoa3N5bWJbJGldICF+IC9cX19zdGdpbml0X01haW4vKSB7CjwgICAJCSAgICAg
cHJpbnQgT1VUQVNNICJcLmNzZWN0ICR7Y2hrc3ltYlskaV19W0RTXVxuIjsgCQo8ICAg
CQkgICAgIHByaW50IE9VVEFTTSAiJHtwfVRPQ1t0YzBdLCAwXG4iOwo8ICNvayAgICAg
ICAgICAgICAgICAgICB9CjwgICAgICAgICAgICAgICAgIH0KMTA0MywxMDU0Yzk4Nyw5
ODgKPCAgICAgICAgICAgICAgICAgaWYgKCRUYXJnZXRQbGF0Zm9ybSA9fiAvXnBvd2Vy
cGMtfF5yczYwMDAtLykgewo8IAkgICAgICAgICAgaWYgKCAhZGVmaW5lZCgkc2xvd2No
a3skc3ltYn0pICYmIGRlZmluZWQoJGZhc3RjaGt7JHN5bWJ9KSApIHsKPCAgCQkgICAg
ICRmYXN0bmFtZSA9ICRjaGtbJGZhc3RjaGt7JHN5bWJ9XTsKPCAgCQkgICAgICRmYXN0
bmFtZSA9fiBzLyhbX0EtWmEtel0qX2Zhc3RcZCspOi4qKC4qXG4pKi9cMS87CjwgICAg
ICAgICAgICAgICAgICAgICAgJGNoa1skaW5mb2Noa3skc3ltYn1dID1+IHMvXC5sb25n
IFN0ZEVycm9yQ29kZS9cLmxvbmcgJGZhc3RuYW1lLzsKPCAgICAgICAgICAgICAgICAg
ICB9CjwgICAgICAgICAgICAgICAgICAgJGNoa1skaW5mb2Noa3skc3ltYn1dID1+IHMv
XC5sb25nIChbX0EtWmEtel1cUytfZW50cnkpL1wubG9uZyBcLlwxLzsKPCAgICAgICAg
ICAgICAgICAgICAkY2hrWyRpbmZvY2hreyRzeW1ifV0gPX4gcy9cLmxvbmcgKFtBLVph
LXpdXFMrX3VwZCkvXC5sb25nIFwuXDEvOwo8ICAgICAgICAgICAgICAgICAgIHByaW50
IE9VVEFTTSAkY2hrWyRpbmZvY2hreyRzeW1ifV07CjwgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CjwgCQkgIHByaW50IE9VVEFTTSAmcmV2X3RibCgkc3ltYiwgJGNoa1skaW5m
b2Noa3skc3ltYn1dLCAxKTsKPCAgICAgICAgICAgICAgICAgfQotLS0KPiAgICAgICAg
ICAgICAgICAgcHJpbnQgT1VUQVNNICZyZXZfdGJsKCRzeW1iLCAkY2hrWyRpbmZvY2hr
eyRzeW1ifV0sIDEpOwo+ICAgICAgICAgICAgICAgICAKMTA2NiwxMDc3ZDk5OQo8ICAg
ICAgICAgICAgICAgICBpZiAoJFRhcmdldFBsYXRmb3JtID1+IC9ecG93ZXJwYy18XnJz
NjAwMC0vKSB7IAo8IAkgICAgICAgICAgKCRwLCAkcikgPSBzcGxpdCgvVE9DXFt0YzBc
XSwgMFxuLywgJGMpOyAKPCAgICAgICAgICAgICAgICAgICBpZiAoJHN5bWIgPX4gL15b
X0EtWl0vKQo8IAkJICB7IAo8IAkJICAgIHByaW50IE9VVEFTTSAiXHRcLmdsb2JsIFwu
JHtjaGtzeW1iWyRpXX1fZW50cnlcbiI7IAo8IAkJICAgIHByaW50IE9VVEFTTSAiXC5j
c2VjdCAke3N5bWJ9X2VudHJ5W0RTXVxuIjsgCQo8IAkJICAgIHByaW50IE9VVEFTTSAi
JHtwfVRPQ1t0YzBdLCAwXG4iOwo8ICAgICAgICAgICAgICAgICAgIH07IAo8ICAgICAg
ICAgICAgICAgICAgICRyID1+IHMvXC5jc2VjdCBcLnRleHRcW1BSXF1cbi8vOyAjIHRv
ZG86IHByb3Blcmx5IC0gYW5kcmUKPCAgICAgICAgICAgICAgICAgICAkYyA9ICZtYW5n
bGVfcG93ZXJwY190YWlsanVtcCgkcik7CjwgICAgICAgICAgICAgICAgIH07CjwgCjEw
OTdjMTAxOQo8IAkJICAgIH0gZWxzaWYgKCAkVGFyZ2V0UGxhdGZvcm0gPX4gL15wb3dl
cnBjLXxecnM2MDAwLS8gKSB7Ci0tLQo+IAkJICAgIH0gZWxzaWYgKCAkVGFyZ2V0UGxh
dGZvcm0gPX4gL15wb3dlcnBjLWFwcGxlLS4qLyApIHsKMTA5OGExMDIxCj4gCQkJJGMg
PX4gcy9eXHRibCBcLiR7VF9VU30ke3N5bWJ9X2Zhc3RcZCtcbi8vOwoxMTA3YzEwMzAK
PCAJCWlmICggJFRhcmdldFBsYXRmb3JtICF+IC9eKGFscGhhLXxocHBhfG1pcHMtKS8g
KSB7Ci0tLQo+IAkJaWYgKCAkVGFyZ2V0UGxhdGZvcm0gIX4gL14oYWxwaGEtfGhwcGF8
bWlwcy18cG93ZXJwYy1hcHBsZS0pLykgewoxMTMyLDExNDNjMTA1NQo8ICAgICAgICAg
ICAgICAgICAgIGlmICgkVGFyZ2V0UGxhdGZvcm0gPX4gL15wb3dlcnBjLXxecnM2MDAw
LS8pIHsKPCAgICAgICAgICAgICAgICAgICAgIGxvY2FsKEBsYmxzKSA9IHNwbGl0KC86
LywgJGMpOwo8ICAgICAgICAgICAgICAgICAgICAgJGZ1bGxuYW1lID0gJGxibHNbMF07
CjwgIAkgICAgICAgICAgICAkZnVsbG5hbWUgPX4gcy8kVF9NT1ZFX0RJUlZTLy9nOwo8
ICAgICAgICAgICAgICAgICAgICAgaWYgKCAkZnVsbG5hbWUgPX4gL15bQS1aXS8pCjwg
ICAgICAgICAgICAgICAgICAgICAgICB7IHByaW50IE9VVEFTTSAiXHRcLmdsb2JsIFwu
JHtmdWxsbmFtZX1cbiI7CjwgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewo8ICMg
ICAgICAgICAgICAgICAgICAgICAgIHByaW50IE9VVEFTTSAiXHRcLmxnbG9ibCBcLiR7
ZnVsbG5hbWV9XG4iOyAjdG9kbzogcm0gLSBhbmRyZQo8ICAgICAgICAgICAgICAgICAg
ICAgfTsKPCAgICAgICAgICAgICAgICAgICAgICRjID1+IHMvKCguKlxuKSopXHQubG9u
ZyBcUyssIFRPQ1xbdGMwXF0sIDBcblwuY3NlY3QgXC50ZXh0XFtQUlxdXG4oKC4qXG4p
KikvXDFcMy87CjwgICAgICAgICAgICAgICAgICAgICAkYyA9ICZtYW5nbGVfcG93ZXJw
Y190YWlsanVtcCgkYyk7CjwgICAgICAgICAgICAgICAgICAgfTsKLS0tCj4gICAgICAg
ICAgICAgICAgICAgCjExNTUsMTE2NGMxMDY3LDEwNjgKPCAgICAgICAgICAgICAgICAg
aWYgKCRUYXJnZXRQbGF0Zm9ybSA9fiAvXnBvd2VycGMtfF5yczYwMDAtLykgeyAKPCAg
ICAgICAgICAgICAgICAgICBpZiAoICRzeW1iID1+IC9eW0EtWl0vKSB7CjwgICAgICAg
ICAgICAgICAgICAgICAgcHJpbnQgT1VUQVNNICJcdFwuZ2xvYmwgXC4ke3N5bWJ9X3Z0
YmxcbiI7CjwgCQkgICAgIHByaW50IE9VVEFTTSAiXHRcLmdsb2JsICR7c3ltYn1fdnRi
bFxuIjsKPCAgICAgICAgICAgICAgICAgICB9Owo8IAkJICAkY2hrWyR2ZWN0b3JjaGt7
JHN5bWJ9XSA9fiBzL1wubG9uZyAoXFMrKS9cLmxvbmcgXC5cMS9nOwo8IAkJICBwcmlu
dCBPVVRBU00gIi4ke3N5bWJ9X3Z0Ymw6XG4iOwo8IAkJICBwcmludCBPVVRBU00gJGNo
a1skdmVjdG9yY2hreyRzeW1ifV07CjwgCQl9IGVsc2Ugewo8ICAgCQkgIHByaW50IE9V
VEFTTSAmcmV2X3RibCgkc3ltYiwgJGNoa1skdmVjdG9yY2hreyRzeW1ifV0sIDApOwot
LS0KPiAgICAgICAgICAgICAgICAgCj4gCQlwcmludCBPVVRBU00gJnJldl90YmwoJHN5
bWIsICRjaGtbJHZlY3RvcmNoa3skc3ltYn1dLCAwKTsKMTE4MywxMTg0YzEwODcsMTA4
OAo8ICAgICAgICAgICAgICAgICAgIHByaW50IE9VVEFTTSAiJHtUX2NyZWF0ZV93b3Jk
fSAwXG4iOwo8IAkJfQotLS0KPiAJCXByaW50IE9VVEFTTSAiJHtUX2NyZWF0ZV93b3Jk
fSAwXG4iOwo+IAoxMjE5LDEyMjJkMTEyMgo8ICAgICBpZiAoJFRhcmdldFBsYXRmb3Jt
ID1+IC9ecG93ZXJwYy18XnJzNjAwMC0vKSB7IAo8ICAgICAgICAgIHByaW50IE9VVEFT
TSAiLmNzZWN0IC50ZXh0W1BSXVxuX3NlY3Rpb25fLnRleHQ6XG4uY3NlY3QgLmRhdGFb
UlddXG5cdC5sb25nIF9zZWN0aW9uXy50ZXh0XG4iCjwgICAgIH07CjwgCjE1MzIsMTU3
OWQxNDMxCjwgXGVuZHtjb2RlfQo8ICAKPCBcYmVnaW57Y29kZX0KPCBzdWIgbWluaV9t
YW5nbGVfYXNtX3Bvd2VycGMgewo8ICAgICBsb2NhbCgkaW5fYXNtZiwgJG91dF9hc21m
KSA9IEBfOwo8IAo8ICAgICBvcGVuKElOQVNNLCAiPCAkaW5fYXNtZiIpCjwgCXx8ICZ0
aWR5X3VwX2FuZF9kaWUoMSwiJFBnbTogZmFpbGVkIHRvIG9wZW4gYCRpbl9hc21mJyAo
dG8gcmVhZClcbiIpOwo8ICAgICBvcGVuKE9VVEFTTSwiPiAkb3V0X2FzbWYiKQo8IAl8
fCAmdGlkeV91cF9hbmRfZGllKDEsIiRQZ206IGZhaWxlZCB0byBvcGVuIGAkb3V0X2Fz
bWYnICh0byB3cml0ZSlcbiIpOwo8IAo8ICAgICB3aGlsZSAoPElOQVNNPikgewo8IAlz
L2xvbmcgX1BSU3RhcnQvbG9uZyAuX1BSU3RhcnQvOwo8IAlzL2xvbmcgX1BSSW5fL2xv
bmcgLl9QUkluXy87CjwgCXMvbG9uZyBfRHVtbXlfKFxTKylfZW50cnkvbG9uZyAuX0R1
bW15X1wxX2VudHJ5LzsKPCAJcy9sb25nIF9QUk1hcmtpbmdfTWFya05leHRSb290XFtE
U1xdL2xvbmcgLl9QUk1hcmtpbmdfTWFya05leHRSb290LzsKPCAJcy9sb25nIF9QUk1h
cmtpbmdfTWFya05leHRDQUZcW0RTXF0vbG9uZyAuX1BSTWFya2luZ19NYXJrTmV4dENB
Ri87CjwgCXMvbG9uZyBfUFJNYXJraW5nX01hcmtOZXh0QVN0YWNrXFtEU1xdL2xvbmcg
Ll9QUk1hcmtpbmdfTWFya05leHRBU3RhY2svOwo8IAlzL2xvbmcgX1BSTWFya2luZ19N
YXJrTmV4dEJTdGFja1xbRFNcXS9sb25nIC5fUFJNYXJraW5nX01hcmtOZXh0QlN0YWNr
LzsKPCAgICAgICAgIHMvXC50YyBFbnRlck5vZGVDb2RlXFtUQ11cLEVudGVyTm9kZUNv
ZGVcW0RTXF0vXC50YyBFbnRlck5vZGVDb2RlXFtUQ11cLC5FbnRlck5vZGVDb2RlLzsg
IyBDT05DCjwgICAgICAgICBzL1wudGMgQ2hlY2tIZWFwQ29kZVxbVENdXCxDaGVja0hl
YXBDb2RlXFtEU1xdL1wudGMgQ2hlY2tIZWFwQ29kZVxbVENdXCwuQ2hlY2tIZWFwQ29k
ZS87ICMgQ09OQwo8IAlwcmludCBPVVRBU007CjwgICAgIH0KPCAKPCAgICAgIyBmaW5p
c2hlZDoKPCAgICAgY2xvc2UoT1VUQVNNKSB8fCAmdGlkeV91cF9hbmRfZGllKDEsIkZh
aWxlZCB3cml0aW5nIHRvICRvdXRfYXNtZlxuIik7CjwgICAgIGNsb3NlKElOQVNNKSAg
fHwgJnRpZHlfdXBfYW5kX2RpZSgxLCJGYWlsZWQgcmVhZGluZyBmcm9tICRpbl9hc21m
XG4iKTsKPCB9CjwgCjwgc3ViIG1hbmdsZV9wb3dlcnBjX3RhaWxqdW1wIHsKPCAgICAg
bG9jYWwoJGMpID0gQF87CjwgICAgIGxvY2FsKCRtYXliZV9tb3JlKSA9IDE7CjwgICAg
IHdoaWxlICgoJGMgPX4gL1x0bHc/ej8gXGQrLExDXC5cLlxkK1woMlwpXG5cdG10Y3Ry
IFxkK1xuXHRiY3RyXG4vKSAmJiAkbWF5YmVfbW9yZSkgCjwgICAgICAgeyAkbWF5YmVf
bW9yZSA9IDA7CjwgICAgICAgICAkbGNzeW1iID0gJGM7CjwgICAgICAgICAkbGNzeW1i
ID1+IHMvKC4qXG4pKlx0bHc/ej8gXGQrLExDXC5cLihcZCspXCgyXClcblx0bXRjdHIg
XGQrXG5cdGJjdHJcbiguKlxuKSovXDIvOwo8ICMgdGhlIGNoZWNrcyBmb3IgcjEgYW5k
IHIyIGFyZSBtb3N0bHkgcGFyYW5vaWEuLi4KPCAgICAgICAgICRyMSA9ICRjOwo8ICAg
ICAgICAgJHIxID1+IHMvKC4qXG4pKlx0bHc/ej8gKFxkKyksTENcLlwuXGQrXCgyXClc
blx0bXRjdHIgXGQrXG5cdGJjdHJcbiguKlxuKSovXDIvOwo8ICAgICAgICAgJHIyID0g
JGM7CjwgICAgICAgICAkcjIgPX4gcy8oLipcbikqXHRsdz96PyBcZCssTENcLlwuKFxk
KylcKDJcKVxuXHRtdGN0ciAoXGQrKVxuXHRiY3RyXG4oLipcbikqL1wzLzsKPCAgICAg
ICAgIGlmIChyMSA9PSByMikKPCAgICAgICAgICAgeyAkbWF5YmVfbW9yZSA9IDE7Cjwg
ICAgICAgICAgICAgJGMgPX4gcy8oKC4qXG4pKilcdGx3P3o/IFxkKyxMQ1wuXC5cZCtc
KDJcKVxuXHRtdGN0ciBcZCtcblx0YmN0clxuKCguKlxuKSopL1wxXHRiICR0b2NlcXVp
dnskbGNzeW1ifVxuXDMvOwo8ICAgICAgICAgICB9CjwgICAgICAgfTsKPCAgICAgJGM7
CjwgfQpJbmRleDogZ2hjL2luY2x1ZGVzL1RhaWxDYWxscy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvZnB0b29scy9naGMvaW5jbHVkZXMvVGFpbENhbGxzLmgs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNwpkaWZmIC1yMS43IFRhaWxDYWxscy5oCjI0
YTI1LDI2Cj4gZXh0ZXJuIHZvaWQgX19ESVNDQVJEX18odm9pZCk7Cj4gCjMxLDMyZDMy
CjwgZXh0ZXJuIHZvaWQgX19ESVNDQVJEX18odm9pZCk7CjwgCjE1MmExNTMsMTc2Cj4g
Cj4gLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiAgICBUYWlsIGNhbGxpbmcg
b24gUG93ZXJQQwo+ICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCj4gCj4gI2lm
ZGVmIHBvd2VycGNfVEFSR0VUX0FSQ0gKPiAKPiAjZGVmaW5lIEpNUF8oY29udCkJCQlc
Cj4gICAgIHsgCQkJCQlcCj4gICAgICAgdm9pZCAqdGFyZ2V0OwkJCVwKPiAgICAgICB0
YXJnZXQgPSAodm9pZCAqKShjb250KTsgICAgCVwKPiAgICAgICBnb3RvICp0YXJnZXQ7
IAkgICAgCSAgICAJXAo+ICAgICB9Cj4gCj4gLyoKPiAJSSB3b3VsZCBfbG92ZV8gdG8g
dXNlIHRoZSBmb2xsb3dpbmcgaW5zdGVhZCwKPiAJYnV0IEdDQyBmYWlscyB0byBnZW5l
cmF0ZSBjb2RlIGZvciBpdCBpZiBpdCBpcyBjYWxsZWQgZm9yIGEgY2FzdGVkCj4gCWRh
dGEgcG9pbnRlciAtIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCB3ZSBhcmUgZ29pbmcgdG8g
ZG8uLi4KPiAKPiAJI2RlZmluZSBKTVBfKGNvbnQpCSgoRl8pIChjb250KSkoKQo+ICov
Cj4gCj4gCj4gI2VuZGlmIC8qIHNwYXJjX1RBUkdFVF9BUkNIICovCkluZGV4OiBnaGMv
cnRzL0FkanVzdG9yLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9mcHRv
b2xzL2doYy9ydHMvQWRqdXN0b3IuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMwpk
aWZmIC1yMS4xMyBBZGp1c3Rvci5jCjQ1LDQ2YzQ1CjwgI2lmIGRlZmluZWQoaTM4Nl9U
QVJHRVRfQVJDSCkgfHwgZGVmaW5lZChzcGFyY19UQVJHRVRfQVJDSCkgfHwgZGVmaW5l
ZChhbHBoYV9UQVJHRVRfQVJDSCkKPCAKLS0tCj4gI2lmIGRlZmluZWQoaTM4Nl9UQVJH
RVRfQVJDSCkgfHwgZGVmaW5lZChzcGFyY19UQVJHRVRfQVJDSCkgfHwgZGVmaW5lZChh
bHBoYV9UQVJHRVRfQVJDSCkgfHwgZGVmaW5lZChwb3dlcnBjX1RBUkdFVF9BUkNIKQoy
ODJhMjgyLDMzMAo+ICNlbGlmIGRlZmluZWQocG93ZXJwY19UQVJHRVRfQVJDSCkKPiAv
Kgo+IAlGb3IgUG93ZXJQQywgdGhlIGZvbGxvd2luZyBjb2RlIGlzIHVzZWQ6Cj4gCj4g
CW1yIHIxMCxyOAo+IAltciByOSxyNwo+IAltciByOCxyNgo+IAltciByNyxyNQo+IAlt
ciByNixyNAo+IAltciByNSxyMwo+IAlsaXMgcjAsMHhERUFEIDtoaSh3cHRyKQo+IAls
aXMgcjMsMHhERUFGIDtoaShocHRyKQo+IAlvcmkgcjAscjAsMHhCRUVGIDsgbG8od3B0
cikKPiAJb3JpIHIzLHIzLDB4RkFDRSA7IGxvKGhwdHIpCj4gCW10Y3RyIHIwCj4gCWJj
dHIKPiAKPiAJVGhlIGFyZ3VtZW50cyAocGFzc2VkIGluIHJlZ2lzdGVycyByMyAtIHIx
MCkgYXJlIHNodWZmbGVkIGFsb25nIGJ5IHR3byB0bwo+IAltYWtlIHJvb20gZm9yIGhw
dHIgYW5kIGEgZHVtbXkgYXJndW1lbnQuIEFzIHI5IGFuZCByMTAgYXJlIG92ZXJ3cml0
dGVuIGJ5Cj4gCXRoaXMgY29kZSwgaXQgb25seSB3b3JrcyBmb3IgdXAgdG8gNiBhcmd1
bWVudHMgKHdoZW4gZmxvYXRpbmcgcG9pbnQgYXJndW1lbnRzCj4gCWFyZSBpbnZvbHZl
ZCwgdGhpcyBtYXkgYmUgbW9yZSBvciBsZXNzLCBkZXBlbmRpbmcgb24gdGhlIGV4YWN0
IHNpdHVhdGlvbikuCj4gKi8KPiAJaWYgKChhZGp1c3RvciA9IHN0Z01hbGxvY0J5dGVz
KDQqMTMsICJjcmVhdGVBZGp1c3RvciIpKSAhPSBOVUxMKSB7Cj4gCQl1bnNpZ25lZCBs
b25nICpjb25zdCBhZGpfY29kZSA9ICh1bnNpZ25lZCBsb25nICopYWRqdXN0b3I7Cj4g
Cj4gCQkvLyBtYWtlIHJvb20gZm9yIGV4dHJhIGFyZ3VtZW50cwo+IAkJYWRqX2NvZGVb
MF0gPSAweDdkMGE0Mzc4OwkvL21yIHIxMCxyOAo+IAkJYWRqX2NvZGVbMV0gPSAweDdj
ZTkzYjc4OwkvL21yIHI5LHI3Cj4gCQlhZGpfY29kZVsyXSA9IDB4N2NjODMzNzg7CS8v
bXIgcjgscjYKPiAJCWFkal9jb2RlWzNdID0gMHg3Y2E3MmI3ODsJLy9tciByNyxyNQo+
IAkJYWRqX2NvZGVbNF0gPSAweDdjODYyMzc4OwkvL21yIHI2LHI0Cj4gCQlhZGpfY29k
ZVs1XSA9IDB4N2M2NTFiNzg7CS8vbXIgcjUscjMKPiAJCQo+IAkJYWRqX2NvZGVbNl0g
PSAweDNjMDAwMDAwOwkvL2xpcyByMCxoaSh3cHRyKQo+IAkJYWRqX2NvZGVbNl0gfD0g
KCh1bnNpZ25lZCBsb25nKXdwdHIpID4+IDE2Owo+IAkJCj4gCQlhZGpfY29kZVs3XSA9
IDB4M2M2MDAwMDA7CS8vbGlzIHIzLGhpKGhwdHIpCj4gCQlhZGpfY29kZVs2XSB8PSAo
KHVuc2lnbmVkIGxvbmcpaHB0cikgPj4gMTY7Cj4gCQkKPiAJCWFkal9jb2RlWzhdID0g
MHg2MDAwMDAwMDsJLy9vcmkgcjAscjAsbG8od3B0cikKPiAJCWFkal9jb2RlWzhdIHw9
ICgodW5zaWduZWQgbG9uZyl3cHRyKSAmIDB4RkZGRjsgCj4gCQkKPiAJCWFkal9jb2Rl
WzldID0gMHg2MDYzMDAwMDsJLy9vcmkgcjMscjMsbG8oaHB0cikKPiAJCWFkal9jb2Rl
WzldIHw9ICgodW5zaWduZWQgbG9uZylocHRyKSAmIDB4RkZGRjsKPiAJCQo+IAkJYWRq
X2NvZGVbMTBdID0gMHg3YzA5MDNhNjsJLy9tdGN0ciByMAo+IAkJYWRqX2NvZGVbMTFd
ID0gMHg0ZTgwMDQyMDsJLy9iY3RyCj4gCQlhZGpfY29kZVsxMl0gPSAodW5zaWduZWQg
bG9uZylocHRyOwo+IAl9CjMyM2MzNzEKPCAjZWxpZiBkZWZpbmVkKHNwYXJjX1RBUkdF
VF9BUkNIKQotLS0KPiAjZWxpZiBkZWZpbmVkKGFscGhhX1RBUkdFVF9BUkNIKQozMzBh
Mzc5LDM4NAo+ICNlbGlmIGRlZmluZWQocG93ZXJwY19UQVJHRVRfQVJDSCkKPiAgaWYg
KCAqKFN0Z1dvcmQqKXB0ciAhPSAweDdkMGE0Mzc4ICkgewo+ICAgIGZwcmludGYoc3Rk
ZXJyLCAiZnJlZUhhc2tlbGxGdW5jdGlvblB0cjogbm90IGZvciBtZSwgZ3V2ISAlcFxu
IiwgcHRyKTsKPiAgICByZXR1cm47Cj4gIH0KPiAgZnJlZVN0YWJsZVB0cigqKChTdGdT
dGFibGVQdHIqKSgodW5zaWduZWQgY2hhciopcHRyICsgNCoxMikpKTsKSW5kZXg6IGdo
Yy9ydHMvQ2xvc3VyZUZsYWdzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9mcHRvb2xzL2doYy9ydHMvQ2xvc3VyZUZsYWdzLmMsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMTEKZGlmZiAtcjEuMTEgQ2xvc3VyZUZsYWdzLmMKMTMsMTRkMTIKPCBTdGdX
b3JkMTYgY2xvc3VyZV9mbGFnc1tdID0gewo8IAozMCw5NGMyOAo8IFtJTlZBTElEX09C
SkVDVCAgICAgICAgIF0gPSAoIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIAkpLAo8IFtDT05TVFIgIAkJXSA9IChfSE5GfCAgICAgX05TICAgICAgICAg
ICAgICAgICAgICAgICAgICAgCSksCjwgW0NPTlNUUl8xXzAJICAgCV0gPSAoX0hORnwg
ICAgIF9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgIAkpLAo8IFtDT05TVFJfMF8x
CSAgIAldID0gKF9ITkZ8ICAgICBfTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAJ
KSwKPCBbQ09OU1RSXzJfMAkgICAJXSA9IChfSE5GfCAgICAgX05TICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCSksCjwgW0NPTlNUUl8xXzEJICAgCV0gPSAoX0hORnwgICAg
IF9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgIAkpLAo8IFtDT05TVFJfMF8yCSAg
IAldID0gKF9ITkZ8ICAgICBfTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAJKSwK
PCBbQ09OU1RSX0lOVExJS0UgCV0gPSAoX0hORnwgICAgIF9OU3xfU1RBICAgICAgICAg
ICAgICAgICAgICAgIAkpLAo8IFtDT05TVFJfQ0hBUkxJS0UgIAldID0gKF9ITkZ8ICAg
ICBfTlN8X1NUQSAgICAgICAgICAgICAgICAgICAgICAJKSwKPCBbQ09OU1RSX1NUQVRJ
QwkgICAgICAgIF0gPSAoX0hORnwgICAgIF9OU3xfU1RBICAgICAgICAgICAgICAgICAg
ICAgIAkpLAo8IFtDT05TVFJfTk9DQUZfU1RBVElDICAgIF0gPSAoX0hORnwgICAgIF9O
U3xfU1RBICAgICAgICAgICAgICAgICAgICAgIAkpLAo8IFtGVU4JCSAgIAldID0gKF9I
TkZ8ICAgICBfTlN8ICAgICAgICAgICAgICAgICAgX1NSVCAgICAJKSwKPCBbRlVOXzFf
MAkJXSA9IChfSE5GfCAgICAgX05TICAgICAgICAgICAgICAgICAgICAgICAgICAgCSks
CjwgW0ZVTl8wXzEJCV0gPSAoX0hORnwgICAgIF9OUyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIAkpLAo8IFtGVU5fMl8wCQldID0gKF9ITkZ8ICAgICBfTlMgICAgICAgICAg
ICAgICAgICAgICAgICAgICAJKSwKPCBbRlVOXzFfMQkJXSA9IChfSE5GfCAgICAgX05T
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCSksCjwgW0ZVTl8wXzIJCV0gPSAoX0hO
RnwgICAgIF9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgIAkpLAo8IFtGVU5fU1RB
VElDCSAgIAldID0gKF9ITkZ8ICAgICBfTlN8X1NUQXwgICAgICAgICAgICAgX1NSVCAg
ICAJKSwKPCBbVEhVTksJCQldID0gKCAgICAgX0JUTXwgICAgICAgICBfVEhVfCAgICAg
ICAgX1NSVCAgICAJKSwKPCBbVEhVTktfMV8wCQldID0gKCAgICAgX0JUTXwgICAgICAg
ICBfVEhVfCAgICAgICAgX1NSVCAgICAJKSwKPCBbVEhVTktfMF8xCQldID0gKCAgICAg
X0JUTXwgICAgICAgICBfVEhVfCAgICAgICAgX1NSVCAgICAJKSwKPCBbVEhVTktfMl8w
CQldID0gKCAgICAgX0JUTXwgICAgICAgICBfVEhVfCAgICAgICAgX1NSVCAgICAJKSwK
PCBbVEhVTktfMV8xCQldID0gKCAgICAgX0JUTXwgICAgICAgICBfVEhVfCAgICAgICAg
X1NSVCAgICAJKSwKPCBbVEhVTktfMF8yCQldID0gKCAgICAgX0JUTXwgICAgICAgICBf
VEhVfCAgICAgICAgX1NSVCAgICAJKSwKPCBbVEhVTktfU1RBVElDCSAgIAldID0gKCAg
ICAgX0JUTXwgICAgX1NUQXxfVEhVfCAgICAgICAgX1NSVCAgICAJKSwKPCBbVEhVTktf
U0VMRUNUT1IJCV0gPSAoICAgICBfQlRNfCAgICAgICAgIF9USFV8ICAgICAgICBfU1JU
ICAgIAkpLAo8IFtCQ08JCSAgIAldID0gKF9ITkZ8ICAgICBfTlMgICAgICAgICAgICAg
ICAgICAgICAgICAgICAJKSwKPCBbQVBfVVBECQkJXSA9ICggICAgIF9CVE18ICAgICAg
ICAgX1RIVSAgICAgICAgICAgICAgICAgCSksCjwgW1BBUAkJICAgCV0gPSAoX0hORnwg
ICAgIF9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgIAkpLAo8IFtJTkQJCSAgIAld
ID0gKCAgICAgICAgICBfTlMgICAgICAgICAgICAgICAgICAgICAgICB8X0lORCApLAo8
IFtJTkRfT0xER0VOCSAgIAldID0gKCAgICAgICAgICBfTlMgICAgICAgICAgICAgICAg
ICAgICAgICB8X0lORCApLAo8IFtJTkRfUEVSTQkJXSA9ICggICAgICAgICAgX05TICAg
ICAgICAgICAgICAgICAgICAgICAgfF9JTkQgKSwKPCBbSU5EX09MREdFTl9QRVJNCV0g
PSAoICAgICAgICAgIF9OUyAgICAgICAgICAgICAgICAgICAgICAgIHxfSU5EICksCjwg
W0lORF9TVEFUSUMJICAgCV0gPSAoICAgICAgICAgIF9OU3xfU1RBICAgICAgICAgICAg
ICAgICAgIHxfSU5EICksCjwgW0NBRl9CTEFDS0hPTEUgICAJXSA9ICggCSAgX0JUTXxf
TlN8ICAgICAgICAgICAgICBfVVBUICAgICAgICAgICApLAo8IFtSRVRfQkNPCQldID0g
KCAgICAgX0JUTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAo8IFtS
RVRfU01BTEwJCV0gPSAoICAgICBfQlRNfCAgICAgICAgICAgICAgICAgICAgICAgX1NS
VCAgICAgICksCjwgW1JFVF9WRUNfU01BTEwJCV0gPSAoICAgICBfQlRNfCAgICAgICAg
ICAgICAgICAgICAgICAgX1NSVCAgICAgICksCjwgW1JFVF9CSUcJCV0gPSAoICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX1NSVCAgICAgICksCjwgW1JFVF9WRUNf
QklHCSAgIAldID0gKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TUlQg
ICAgICApLAo8IFtSRVRfRFlOCQldID0gKCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9TUlQgICAgICApLAo8IFtVUERBVEVfRlJBTUUgICAgICAgICAJXSA9ICgg
ICAgIF9CVE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKPCBbQ0FU
Q0hfRlJBTUUJICAgCV0gPSAoICAgICBfQlRNICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICksCjwgW1NUT1BfRlJBTUUJICAgCV0gPSAoICAgICBfQlRNICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCjwgW1NFUV9GUkFNRSAJICAgCV0g
PSAoICAgICBfQlRNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCjwg
W0JMQUNLSE9MRQkJXSA9ICggCSAgICAgICBfTlN8ICAgICAgICAgICAgICBfVVBUICAg
ICAgICAgICApLAo8IFtCTEFDS0hPTEVfQlEJICAgCV0gPSAoIAkgICAgICAgX05TfCAg
ICAgICAgIF9NVVR8X1VQVCAgICAgICAgICAgKSwKPCBbU0VfQkxBQ0tIT0xFCQldID0g
KCAJICAgICAgIF9OU3wgICAgICAgICAgICAgIF9VUFQgICAgICAgICAgICksCjwgW1NF
X0NBRl9CTEFDS0hPTEUJXSA9ICggCSAgICAgICBfTlN8ICAgICAgICAgICAgICBfVVBU
ICAgICAgICAgICApLAo8IFtNVkFSCQkgICAJXSA9IChfSE5GfCAgICAgX05TfCAgICAg
ICAgIF9NVVR8X1VQVCAgICAgICAgICAgKSwKPCBbQVJSX1dPUkRTCQldID0gKF9ITkZ8
ICAgICBfTlN8ICAgICAgICAgICAgICBfVVBUICAgICAgICAgICApLAo8IFtNVVRfQVJS
X1BUUlMJICAgCV0gPSAoX0hORnwgICAgIF9OU3wgICAgICAgICBfTVVUfF9VUFQgICAg
ICAgICAgICksCjwgW01VVF9BUlJfUFRSU19GUk9aRU4gIAldID0gKF9ITkZ8ICAgICBf
TlN8ICAgICAgICAgICAgICBfVVBUICAgICAgICAgICApLAo8IFtNVVRfVkFSCQldID0g
KF9ITkZ8ICAgICBfTlN8ICAgICAgICAgX01VVHxfVVBUICAgICAgICAgICApLAo8IFtN
VVRfQ09OUwkJXSA9IChfSE5GfCAgICAgX05TfCAgICAgICAgICAgICAgX1VQVCAgICAg
ICAgICAgKSwKPCBbV0VBSwkJICAgCV0gPSAoX0hORnwgICAgIF9OU3wgICAgICAgICAg
ICAgIF9VUFQgICAgICAgICAgICksCjwgW0ZPUkVJR04JCV0gPSAoX0hORnwgICAgIF9O
U3wgICAgICAgICAgICAgIF9VUFQgICAgICAgICAgICksCjwgW1NUQUJMRV9OQU1FCSAg
IAldID0gKF9ITkZ8ICAgICBfTlN8ICAgICAgICAgICAgICBfVVBUICAgICAgICAgICAp
LAo8IFtUU08gICAgICAgICAgICAgICAgICAJXSA9IChfSE5GfCAgICAgX05TfCAgICAg
ICAgIF9NVVR8X1VQVCAgICAgICAgICAgKSwKPCBbQkxPQ0tFRF9GRVRDSAkJXSA9IChf
SE5GfCAgICAgX05TfCAgICAgICAgIF9NVVR8X1VQVCAgICAgICAgICAgKSwKPCBbRkVU
Q0hfTUUJCV0gPSAoX0hORnwgICAgIF9OU3wgICAgICAgICBfTVVUfF9VUFQgICAgICAg
ICAgICksCjwgW0ZFVENIX01FX0JRICAgICAgICAgIAldID0gKCAJICAgICAgIF9OU3wg
ICAgICAgICBfTVVUfF9VUFQgICAgICAgICAgICksCjwgW1JCSCAgICAgICAgICAgICAg
ICAgIAldID0gKCAJICAgICAgIF9OU3wgICAgICAgICBfTVVUfF9VUFQgICAgICAgICAg
ICksCjwgW0VWQUNVQVRFRAkJXSA9ICggMCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKSwKPCBbUkVNT1RFX1JFRgkJXSA9IChfSE5GfCAgICAgX05T
fCAgICAgICAgICAgICAgX1VQVCAgICAgICAgICAgKSwKLS0tCj4gU3RnV29yZDE2IGNs
b3N1cmVfZmxhZ3NbTl9DTE9TVVJFX1RZUEVTKzFdOwo5Niw5N2MzMCw5OQo8IFtOX0NM
T1NVUkVfVFlQRVMgICAgICAgIF0gPSAoIDAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICkKPCB9OwotLS0KPiB2b2lkIEluaXRDbG9zdXJlRmxhZ3MoKQo+IHsK
PiAJY2xvc3VyZV9mbGFnc1tJTlZBTElEX09CSkVDVCAgICAgICAgIF0gPSAoIDAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkpLAo+IAljbG9zdXJlX2Zs
YWdzW0NPTlNUUiAgCQldID0gKF9ITkZ8ICAgICBfTlMgICAgICAgICAgICAgICAgICAg
ICAgICAgICAJKSwKPiAJY2xvc3VyZV9mbGFnc1tDT05TVFJfMV8wCSAgIAldID0gKF9I
TkZ8ICAgICBfTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAJKSwKPiAJY2xvc3Vy
ZV9mbGFnc1tDT05TVFJfMF8xCSAgIAldID0gKF9ITkZ8ICAgICBfTlMgICAgICAgICAg
ICAgICAgICAgICAgICAgICAJKSwKPiAJY2xvc3VyZV9mbGFnc1tDT05TVFJfMl8wCSAg
IAldID0gKF9ITkZ8ICAgICBfTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAJKSwK
PiAJY2xvc3VyZV9mbGFnc1tDT05TVFJfMV8xCSAgIAldID0gKF9ITkZ8ICAgICBfTlMg
ICAgICAgICAgICAgICAgICAgICAgICAgICAJKSwKPiAJY2xvc3VyZV9mbGFnc1tDT05T
VFJfMF8yCSAgIAldID0gKF9ITkZ8ICAgICBfTlMgICAgICAgICAgICAgICAgICAgICAg
ICAgICAJKSwKPiAJY2xvc3VyZV9mbGFnc1tDT05TVFJfSU5UTElLRSAJXSA9IChfSE5G
fCAgICAgX05TfF9TVEEgICAgICAgICAgICAgICAgICAgICAgCSksCj4gCWNsb3N1cmVf
ZmxhZ3NbQ09OU1RSX0NIQVJMSUtFICAJXSA9IChfSE5GfCAgICAgX05TfF9TVEEgICAg
ICAgICAgICAgICAgICAgICAgCSksCj4gCWNsb3N1cmVfZmxhZ3NbQ09OU1RSX1NUQVRJ
QwkgICAgICAgIF0gPSAoX0hORnwgICAgIF9OU3xfU1RBICAgICAgICAgICAgICAgICAg
ICAgIAkpLAo+IAljbG9zdXJlX2ZsYWdzW0NPTlNUUl9OT0NBRl9TVEFUSUMgICAgXSA9
IChfSE5GfCAgICAgX05TfF9TVEEgICAgICAgICAgICAgICAgICAgICAgCSksCj4gCWNs
b3N1cmVfZmxhZ3NbRlVOCQkgICAJXSA9IChfSE5GfCAgICAgX05TfCAgICAgICAgICAg
ICAgICAgIF9TUlQgICAgCSksCj4gCWNsb3N1cmVfZmxhZ3NbRlVOXzFfMAkJXSA9IChf
SE5GfCAgICAgX05TICAgICAgICAgICAgICAgICAgICAgICAgICAgCSksCj4gCWNsb3N1
cmVfZmxhZ3NbRlVOXzBfMQkJXSA9IChfSE5GfCAgICAgX05TICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCSksCj4gCWNsb3N1cmVfZmxhZ3NbRlVOXzJfMAkJXSA9IChfSE5G
fCAgICAgX05TICAgICAgICAgICAgICAgICAgICAgICAgICAgCSksCj4gCWNsb3N1cmVf
ZmxhZ3NbRlVOXzFfMQkJXSA9IChfSE5GfCAgICAgX05TICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCSksCj4gCWNsb3N1cmVfZmxhZ3NbRlVOXzBfMgkJXSA9IChfSE5GfCAg
ICAgX05TICAgICAgICAgICAgICAgICAgICAgICAgICAgCSksCj4gCWNsb3N1cmVfZmxh
Z3NbRlVOX1NUQVRJQwkgICAJXSA9IChfSE5GfCAgICAgX05TfF9TVEF8ICAgICAgICAg
ICAgIF9TUlQgICAgCSksCj4gCWNsb3N1cmVfZmxhZ3NbVEhVTksJCQldID0gKCAgICAg
X0JUTXwgICAgICAgICBfVEhVfCAgICAgICAgX1NSVCAgICAJKSwKPiAJY2xvc3VyZV9m
bGFnc1tUSFVOS18xXzAJCV0gPSAoICAgICBfQlRNfCAgICAgICAgIF9USFV8ICAgICAg
ICBfU1JUICAgIAkpLAo+IAljbG9zdXJlX2ZsYWdzW1RIVU5LXzBfMQkJXSA9ICggICAg
IF9CVE18ICAgICAgICAgX1RIVXwgICAgICAgIF9TUlQgICAgCSksCj4gCWNsb3N1cmVf
ZmxhZ3NbVEhVTktfMl8wCQldID0gKCAgICAgX0JUTXwgICAgICAgICBfVEhVfCAgICAg
ICAgX1NSVCAgICAJKSwKPiAJY2xvc3VyZV9mbGFnc1tUSFVOS18xXzEJCV0gPSAoICAg
ICBfQlRNfCAgICAgICAgIF9USFV8ICAgICAgICBfU1JUICAgIAkpLAo+IAljbG9zdXJl
X2ZsYWdzW1RIVU5LXzBfMgkJXSA9ICggICAgIF9CVE18ICAgICAgICAgX1RIVXwgICAg
ICAgIF9TUlQgICAgCSksCj4gCWNsb3N1cmVfZmxhZ3NbVEhVTktfU1RBVElDCSAgIAld
ID0gKCAgICAgX0JUTXwgICAgX1NUQXxfVEhVfCAgICAgICAgX1NSVCAgICAJKSwKPiAJ
Y2xvc3VyZV9mbGFnc1tUSFVOS19TRUxFQ1RPUgkJXSA9ICggICAgIF9CVE18ICAgICAg
ICAgX1RIVXwgICAgICAgIF9TUlQgICAgCSksCj4gCWNsb3N1cmVfZmxhZ3NbQkNPCQkg
ICAJXSA9IChfSE5GfCAgICAgX05TICAgICAgICAgICAgICAgICAgICAgICAgICAgCSks
Cj4gCWNsb3N1cmVfZmxhZ3NbQVBfVVBECQkJXSA9ICggICAgIF9CVE18ICAgICAgICAg
X1RIVSAgICAgICAgICAgICAgICAgCSksCj4gCWNsb3N1cmVfZmxhZ3NbUEFQCQkgICAJ
XSA9IChfSE5GfCAgICAgX05TICAgICAgICAgICAgICAgICAgICAgICAgICAgCSksCj4g
CWNsb3N1cmVfZmxhZ3NbSU5ECQkgICAJXSA9ICggICAgICAgICAgX05TICAgICAgICAg
ICAgICAgICAgICAgICAgfF9JTkQgKSwKPiAJY2xvc3VyZV9mbGFnc1tJTkRfT0xER0VO
CSAgIAldID0gKCAgICAgICAgICBfTlMgICAgICAgICAgICAgICAgICAgICAgICB8X0lO
RCApLAo+IAljbG9zdXJlX2ZsYWdzW0lORF9QRVJNCQldID0gKCAgICAgICAgICBfTlMg
ICAgICAgICAgICAgICAgICAgICAgICB8X0lORCApLAo+IAljbG9zdXJlX2ZsYWdzW0lO
RF9PTERHRU5fUEVSTQldID0gKCAgICAgICAgICBfTlMgICAgICAgICAgICAgICAgICAg
ICAgICB8X0lORCApLAo+IAljbG9zdXJlX2ZsYWdzW0lORF9TVEFUSUMJICAgCV0gPSAo
ICAgICAgICAgIF9OU3xfU1RBICAgICAgICAgICAgICAgICAgIHxfSU5EICksCj4gCWNs
b3N1cmVfZmxhZ3NbQ0FGX0JMQUNLSE9MRSAgIAldID0gKCAJICBfQlRNfF9OU3wgICAg
ICAgICAgICAgIF9VUFQgICAgICAgICAgICksCj4gCWNsb3N1cmVfZmxhZ3NbUkVUX0JD
TwkJXSA9ICggICAgIF9CVE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KSwKPiAJY2xvc3VyZV9mbGFnc1tSRVRfU01BTEwJCV0gPSAoICAgICBfQlRNfCAgICAg
ICAgICAgICAgICAgICAgICAgX1NSVCAgICAgICksCj4gCWNsb3N1cmVfZmxhZ3NbUkVU
X1ZFQ19TTUFMTAkJXSA9ICggICAgIF9CVE18ICAgICAgICAgICAgICAgICAgICAgICBf
U1JUICAgICAgKSwKPiAJY2xvc3VyZV9mbGFnc1tSRVRfQklHCQldID0gKCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9TUlQgICAgICApLAo+IAljbG9zdXJlX2Zs
YWdzW1JFVF9WRUNfQklHCSAgIAldID0gKCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9TUlQgICAgICApLAo+IAljbG9zdXJlX2ZsYWdzW1JFVF9EWU4JCV0gPSAo
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1NSVCAgICAgICksCj4gCWNs
b3N1cmVfZmxhZ3NbVVBEQVRFX0ZSQU1FICAgICAgICAgCV0gPSAoICAgICBfQlRNICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCj4gCWNsb3N1cmVfZmxhZ3Nb
Q0FUQ0hfRlJBTUUJICAgCV0gPSAoICAgICBfQlRNICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICksCj4gCWNsb3N1cmVfZmxhZ3NbU1RPUF9GUkFNRQkgICAJXSA9
ICggICAgIF9CVE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKPiAJ
Y2xvc3VyZV9mbGFnc1tTRVFfRlJBTUUgCSAgIAldID0gKCAgICAgX0JUTSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICApLAo+IAljbG9zdXJlX2ZsYWdzW0JMQUNL
SE9MRQkJXSA9ICggCSAgICAgICBfTlN8ICAgICAgICAgICAgICBfVVBUICAgICAgICAg
ICApLAo+IAljbG9zdXJlX2ZsYWdzW0JMQUNLSE9MRV9CUQkgICAJXSA9ICggCSAgICAg
ICBfTlN8ICAgICAgICAgX01VVHxfVVBUICAgICAgICAgICApLAo+IAljbG9zdXJlX2Zs
YWdzW1NFX0JMQUNLSE9MRQkJXSA9ICggCSAgICAgICBfTlN8ICAgICAgICAgICAgICBf
VVBUICAgICAgICAgICApLAo+IAljbG9zdXJlX2ZsYWdzW1NFX0NBRl9CTEFDS0hPTEUJ
XSA9ICggCSAgICAgICBfTlN8ICAgICAgICAgICAgICBfVVBUICAgICAgICAgICApLAo+
IAljbG9zdXJlX2ZsYWdzW01WQVIJCSAgIAldID0gKF9ITkZ8ICAgICBfTlN8ICAgICAg
ICAgX01VVHxfVVBUICAgICAgICAgICApLAo+IAljbG9zdXJlX2ZsYWdzW0FSUl9XT1JE
UwkJXSA9IChfSE5GfCAgICAgX05TfCAgICAgICAgICAgICAgX1VQVCAgICAgICAgICAg
KSwKPiAJY2xvc3VyZV9mbGFnc1tNVVRfQVJSX1BUUlMJICAgCV0gPSAoX0hORnwgICAg
IF9OU3wgICAgICAgICBfTVVUfF9VUFQgICAgICAgICAgICksCj4gCWNsb3N1cmVfZmxh
Z3NbTVVUX0FSUl9QVFJTX0ZST1pFTiAgCV0gPSAoX0hORnwgICAgIF9OU3wgICAgICAg
ICAgICAgIF9VUFQgICAgICAgICAgICksCj4gCWNsb3N1cmVfZmxhZ3NbTVVUX1ZBUgkJ
XSA9IChfSE5GfCAgICAgX05TfCAgICAgICAgIF9NVVR8X1VQVCAgICAgICAgICAgKSwK
PiAJY2xvc3VyZV9mbGFnc1tNVVRfQ09OUwkJXSA9IChfSE5GfCAgICAgX05TfCAgICAg
ICAgICAgICAgX1VQVCAgICAgICAgICAgKSwKPiAJY2xvc3VyZV9mbGFnc1tXRUFLCQkg
ICAJXSA9IChfSE5GfCAgICAgX05TfCAgICAgICAgICAgICAgX1VQVCAgICAgICAgICAg
KSwKPiAJY2xvc3VyZV9mbGFnc1tGT1JFSUdOCQldID0gKF9ITkZ8ICAgICBfTlN8ICAg
ICAgICAgICAgICBfVVBUICAgICAgICAgICApLAo+IAljbG9zdXJlX2ZsYWdzW1NUQUJM
RV9OQU1FCSAgIAldID0gKF9ITkZ8ICAgICBfTlN8ICAgICAgICAgICAgICBfVVBUICAg
ICAgICAgICApLAo+IAljbG9zdXJlX2ZsYWdzW1RTTyAgICAgICAgICAgICAgICAgIAld
ID0gKF9ITkZ8ICAgICBfTlN8ICAgICAgICAgX01VVHxfVVBUICAgICAgICAgICApLAo+
IAljbG9zdXJlX2ZsYWdzW0JMT0NLRURfRkVUQ0gJCV0gPSAoX0hORnwgICAgIF9OU3wg
ICAgICAgICBfTVVUfF9VUFQgICAgICAgICAgICksCj4gCWNsb3N1cmVfZmxhZ3NbRkVU
Q0hfTUUJCV0gPSAoX0hORnwgICAgIF9OU3wgICAgICAgICBfTVVUfF9VUFQgICAgICAg
ICAgICksCj4gCWNsb3N1cmVfZmxhZ3NbRkVUQ0hfTUVfQlEgICAgICAgICAgCV0gPSAo
IAkgICAgICAgX05TfCAgICAgICAgIF9NVVR8X1VQVCAgICAgICAgICAgKSwKPiAJY2xv
c3VyZV9mbGFnc1tSQkggICAgICAgICAgICAgICAgICAJXSA9ICggCSAgICAgICBfTlN8
ICAgICAgICAgX01VVHxfVVBUICAgICAgICAgICApLAo+IAljbG9zdXJlX2ZsYWdzW0VW
QUNVQVRFRAkJXSA9ICggMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKSwKPiAJY2xvc3VyZV9mbGFnc1tSRU1PVEVfUkVGCQldID0gKF9ITkZ8ICAg
ICBfTlN8ICAgICAgICAgICAgICBfVVBUICAgICAgICAgICApLAo+IAkKPiAJY2xvc3Vy
ZV9mbGFnc1tOX0NMT1NVUkVfVFlQRVMgICAgICAgIF0gPSAoIDAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICk7Cj4gfQpJbmRleDogZ2hjL3J0cy9NYWluLmMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9mcHRvb2xzL2doYy9ydHMvTWFp
bi5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjM0CmRpZmYgLXIxLjM0IE1haW4uYwo0
MWE0MiwxMDkKPiAjaWZkZWYgZGFyd2luX1RBUkdFVF9PUwo+ICNpbmNsdWRlIDxtYWNo
L21hY2guaD4KPiAjaW5jbHVkZSA8bWFjaC90YXNrLmg+Cj4gI2luY2x1ZGUgPG1hY2gv
bWVzc2FnZS5oPgo+ICNpbmNsdWRlIDxtYWNoL3ZtX3Byb3QuaD4KPiAjaW5jbHVkZSA8
bWFjaC92bV9yZWdpb24uaD4KPiAjaW5jbHVkZSA8bWFjaC1vL2dldHNlY3QuaD4KPiAj
aW5jbHVkZSAiU3RvcmFnZS5oIgo+IAo+IHVuc2lnbmVkIGxvbmcgbWFjaG9fZW5kID0g
MDsKPiB1bnNpZ25lZCBsb25nIG1hY2hvX2V0ZXh0ID0gMDsKPiB1bnNpZ25lZCBsb25n
IG1hY2hvX2V0ZXh0MiA9IDA7Cj4gdW5zaWduZWQgbG9uZyBtYWNob19lZGF0YSA9IDA7
Cj4gCj4gI2RlZmluZSBJTl9SQU5HRShiYXNlLHNpemUseCkgKCgoUF8pYmFzZSkgPD0g
KChQXyl4KSAmJiAoKFBfKXgpIDwgKChQXykoKHVuc2lnbmVkIGxvbmcpYmFzZSArIHNp
emUpKSkKPiBzdGF0aWMgdm9pZCBtYWNvc3hfZ2V0X21lbW9yeV9sYXlvdXQodm9pZCkK
PiB7Cj4gICB2bV9hZGRyZXNzX3QgYWRkcmVzczsKPiAgIHZtX3NpemVfdCBzaXplOwo+
ICAgc3RydWN0IHZtX3JlZ2lvbl9iYXNpY19pbmZvIGluZm87Cj4gICBtYWNoX21zZ190
eXBlX251bWJlcl90IGluZm9fY291bnQ7Cj4gICBtYWNoX3BvcnRfdCBvYmplY3RfbmFt
ZTsKPiAgIHRhc2tfdCB0YXNrID0gbWFjaF90YXNrX3NlbGYoKTsKPiAgIGludCBpc19p
bmZvOwo+ICAgaW50IGlzX3N0YXRpY19jbG9zdXJlOwo+ICAgdW5zaWduZWQgKnA7Cj4g
Cj4gICBwID0gKHZvaWQqKSZzdGdfQkxBQ0tIT0xFX2luZm87Cj4gICBwID0gKHZvaWQq
KSZzdGdfZHVtbXlfcmV0X2Nsb3N1cmU7Cj4gICBhZGRyZXNzID0gMDsgLyogVk1fTUlO
X0FERFJFU1MgKi8KPiAgIHdoaWxlICgxKSB7Cj4gICAgIGluZm9fY291bnQgPSBWTV9S
RUdJT05fQkFTSUNfSU5GT19DT1VOVDsKPiAgICAgaWYgKHZtX3JlZ2lvbih0YXNrLCAm
YWRkcmVzcywgJnNpemUsIFZNX1JFR0lPTl9CQVNJQ19JTkZPLAo+IAkJICAodm1fcmVn
aW9uX2luZm9fdCkmaW5mbywgJmluZm9fY291bnQsICZvYmplY3RfbmFtZSkKPiAJIT0g
S0VSTl9TVUNDRVNTKQo+ICAgICAgIGJyZWFrOwo+ICAgICBpc19pbmZvID0gSU5fUkFO
R0UoYWRkcmVzcyxzaXplLCZzdGdfQkxBQ0tIT0xFX2luZm8pOwo+ICAgICBpc19zdGF0
aWNfY2xvc3VyZSA9IElOX1JBTkdFKGFkZHJlc3Msc2l6ZSwmc3RnX2R1bW15X3JldF9j
bG9zdXJlKTsKPiAgICAgaWYgKGlzX2luZm8pCj4gICAgICAgbWFjaG9fZXRleHQyID0g
YWRkcmVzcyArIHNpemU7Cj4gICAgIGlmIChpc19zdGF0aWNfY2xvc3VyZSkKPiAgICAg
ICBtYWNob19lZGF0YSA9IGFkZHJlc3MgKyBzaXplOwo+ICAgICBhZGRyZXNzICs9IHNp
emU7Cj4gICB9Cj4gICBpZiAoTE9PS1NfTElLRV9TVEFUSUNfQ0xPU1VSRSgmc3RnX0JM
QUNLSE9MRV9pbmZvKSkgewo+IAlwcmludGYoIiUwOHgsICUwOHgsICUwOHhcbiIsJnN0
Z19CTEFDS0hPTEVfaW5mbyxtYWNob19ldGV4dCxtYWNob19lZGF0YSk7Cj4gICAgIGJh
cmYoIkxPT0tTX0xJS0VfU1RBVElDX0NMT1NVUkUtIGlzIGluY29ycmVjdGx5IGRlZmlu
ZWQiKTsKPiAgICAgZXhpdCgwKTsKPiAgIH0KPiAgIGlmICghTE9PS1NfTElLRV9TVEFU
SUNfQ0xPU1VSRSgmc3RnX2R1bW15X3JldF9jbG9zdXJlKSkgewo+ICAgICBiYXJmKCJM
T09LU19MSUtFX1NUQVRJQ19DTE9TVVJFKyBpcyBpbmNvcnJlY3RseSBkZWZpbmVkIik7
Cj4gICAgIGV4aXQoMCk7Cj4gICB9Cj4gICBpZiAoIUxPT0tTX0xJS0VfR0hDX0lORk8o
JnN0Z19CTEFDS0hPTEVfaW5mbykpIHsKPiAgICAgYmFyZigiTE9PS1NfTElLRV9HSENf
SU5GTysgaXMgaW5jb3JyZWN0bHkgZGVmaW5lZCIpOwo+ICAgICBleGl0KDApOwo+ICAg
fQo+ICAgaWYgKExPT0tTX0xJS0VfR0hDX0lORk8oJnN0Z19kdW1teV9yZXRfY2xvc3Vy
ZSkpIHsKPiAgICAgYmFyZigiTE9PS1NfTElLRV9HSENfSU5GTy0gaXMgaW5jb3JyZWN0
bHkgZGVmaW5lZCIpOwo+ICAgICBleGl0KDApOwo+ICAgfQo+ICAgcmV0dXJuOwo+IH0K
PiAKPiB2b2lkIF9fRElTQ0FSRF9fICgpIHt9Cj4gCj4gI2VuZGlmCj4gCjQ2YTExNSwx
MTcKPiAgCj4gdm9pZCBJbml0Q2xvc3VyZUZsYWdzKCk7Cj4gIAo1MmExMjQsMTMxCj4g
Cj4gI2lmIGRlZmluZWQoZGFyd2luX1RBUkdFVF9PUykKPiAgICAgbWFjaG9fZW5kID0g
Z2V0X2VuZCgpOwo+ICAgICBtYWNob19ldGV4dCA9IGdldF9ldGV4dCgpOwo+ICAgICBt
YWNob19lZGF0YSA9IGdldF9lZGF0YSgpOwo+ICAgICBtYWNvc3hfZ2V0X21lbW9yeV9s
YXlvdXQoKTsKPiAjZW5kaWYKPiAJSW5pdENsb3N1cmVGbGFncygpOwpJbmRleDogZ2hj
L3J0cy9TdGdDUnVuLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9mcHRv
b2xzL2doYy9ydHMvU3RnQ1J1bi5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMwCmRp
ZmYgLXIxLjMwIFN0Z0NSdW4uYwo0NTJhNDUzLDQ4Ngo+IC8qIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCj4gICAgUG93ZXJQQyBhcmNoaXRlY3R1cmUKPiAKPiAgICBXZSBj
YW4gdXNlIGEgc2ltcGxlIGZ1bmN0aW9uIGNhbGwgYXMgYSB0YWlsIGNhbGwgKHRoZSBi
bCBpbnN0cnVjdGlvbiBwbGFjZXMKPiAgICB0aGUgcmV0dXJuIGFkZHJlc3MgaW4gdGhl
IExpbmsgUmVnaXN0ZXIsIGFuZCB3ZSBpZ25vcmUgaXQpLgo+ICAgIFdlIG1ha2UgR0ND
IGRvIHRoZSByZWdpc3RlciBzYXZpbmcuIEdDQyBkb2VzIGEgZ29vZCBqb2IKPiAgICBh
bmQgc2F2ZXMgYWxsIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMgd2l0aCBhIHNpbmds
ZSBzdG13Cj4gICAgKHN0b3JlIG11bHRpcGxlIHdvcmRzKSBpbnN0cnVjdGlvbi4KPiAg
ICAKPiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwo+IAo+ICNpZmRlZiBwb3dl
cnBjX1RBUkdFVF9BUkNICj4gCj4gU3RnVGhyZWFkUmV0dXJuQ29kZQo+IFN0Z1J1bihT
dGdGdW5QdHIgZiwgU3RnUmVnVGFibGUgKmJhc2VyZWcpIHsKPiAKPiAgICAgdW5zaWdu
ZWQgY2hhciBzcGFjZVtSRVNFUlZFRF9DX1NUQUNLX0JZVEVTXTsKPiAKPiAgICAgZigp
Owo+ICAgICBfX2FzbV9fIHZvbGF0aWxlICgKPiAJICAgICIuYWxpZ24gNFxuIgo+ICAg
ICAgICAgICAgICIuZ2xvYmwgIiBTVEdfUkVUVVJOICJcbiIKPiAgICAgICAgCSAgICBT
VEdfUkVUVVJOICI6Igo+IAkgICAgOiA6IDogCj4gCQkJInIxNCIsInIxNSIsInIxNiIs
InIxNyIsInIxOCIsInIxOSIsInIyMCIsInIyMSIsInIyMiIsInIyMyIsInIyNCIsInIy
NSIsInIyNiIsCj4gCQkJInIyNyIsInIyOCIsInIyOSIsInIzMCIsInIzMSIsCj4gCQkJ
ImZyMTQiLCJmcjE1IiwiZnIxNiIsImZyMTciLCJmcjE4IiwiZnIxOSIsImZyMjAiLAo+
IAkJCSJmcjIxIiwiZnIyMiIsImZyMjMiLCJmcjI0IiwiZnIyNSIsImZyMjYiLCJmcjI3
IiwiZnIyOCIsImZyMjkiLCJmcjMwIiwiZnIzMSIpOwo+IAkgICAKPiAgICAgcmV0dXJu
IChTdGdUaHJlYWRSZXR1cm5Db2RlKVIxLmk7Cj4gfQo+IAo+ICNlbmRpZgo+IAo0NTNh
NDg4Cj4gCkluZGV4OiBnaGMvcnRzL1N0b3JhZ2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL2ZwdG9vbHMvZ2hjL3J0cy9TdG9yYWdlLmgsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuNDEKZGlmZiAtcjEuNDEgU3RvcmFnZS5oCjQyMWE0MjIsNDM1Cj4g
I2lmZGVmIGRhcndpbl9UQVJHRVRfT1MKPiBleHRlcm4gdW5zaWduZWQgbG9uZyBtYWNo
b19lbmQ7Cj4gZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWFjaG9fZXRleHQ7Cj4gZXh0ZXJu
IHVuc2lnbmVkIGxvbmcgbWFjaG9fZXRleHQyOwo+IGV4dGVybiB1bnNpZ25lZCBsb25n
IG1hY2hvX2VkYXRhOwo+IAo+ICNkZWZpbmUgSVNfQ09ERV9QVFIocCkgKCAgKChQXyko
cCkgPCAoUF8pbWFjaG9fZXRleHQpIFwKPiAgICAgICAgICAgICAgICAgICAgICAgIHx8
IGlzX2R5bmFtaWNhbGx5X2xvYWRlZF9jb2RlX29yX3JvZGF0YV9wdHIoKGNoYXIgKilw
KSApCj4gI2RlZmluZSBJU19EQVRBX1BUUihwKSAoICgoUF8pKHApID49IChQXyltYWNo
b19ldGV4dCAmJiBcCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAoUF8pKHApIDwg
KFBfKW1hY2hvX2VkYXRhKSBcCj4gICAgICAgICAgICAgICAgICAgICAgICB8fCBpc19k
eW5hbWljYWxseV9sb2FkZWRfcndkYXRhX3B0cigoY2hhciAqKXApICkKPiAjZGVmaW5l
IElTX1VTRVJfUFRSKHApICggKChQXykocCkgPj0gKFBfKW1hY2hvX2VkYXRhKSBcCj4g
ICAgICAgICAgICAgICAgICAgICAgICAmJiBpc19ub3RfZHluYW1pY2FsbHlfbG9hZGVk
X3B0cigoY2hhciAqKXApICkKPiAjZWxzZQo0MjhhNDQzCj4gI2VuZGlmCjU0MWE1NTcs
NTYwCj4gI2VsaWYgZGVmaW5lZChkYXJ3aW5fVEFSR0VUX09TKSAmJiBkZWZpbmVkKE5P
X1JFR1MpCj4gI2RlZmluZSBMT09LU19MSUtFX1NUQVRJQyhyKSAoIShIRUFQX0FMTE9D
RUQocikpKQo+ICMgIGRlZmluZSBMT09LU19MSUtFX1NUQVRJQ19DTE9TVVJFKHIpIFwK
PiAgICAgICAoSVNfREFUQV9QVFIocikgJiYgIUxPT0tTX0xJS0VfR0hDX0lORk8ocikp
CjU2M2E1ODMsNTg2Cj4gI2lmIGRlZmluZWQoZGFyd2luX1RBUkdFVF9PUykgJiYgZGVm
aW5lZChOT19SRUdTKQo+IAkvKiBQbGFuIEMsIHNlZSBhYm92ZSAqLwo+ICMgZGVmaW5l
IExPT0tTX0xJS0VfR0hDX0lORk8oaW5mbykgSVNfQ09ERV9QVFIoKChQXyopKGluZm8p
KVswXSkKPiAjZWxzZQo1NjZjNTg5CjwgCi0tLQo+ICNlbmRpZgpJbmRleDogbGlicmFy
aWVzL2Jhc2UvR0hDL1Bvc2l4LmhzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvZnB0b29scy9saWJyYXJpZXMvYmFzZS9HSEMvUG9zaXguaHMsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuNApkaWZmIC1yMS40IFBvc2l4LmhzCjM0M2MzNDMKPCAgICBjX3Np
Z2FkZHNldCA6OiBQdHIgQ1NpZ3NldCAtPiBDSW50IC0+IElPICgpCi0tLQo+ICAgIGNf
c2lnYWRkc2V0IDo6IFB0ciBDU2lnc2V0IC0+IENJbnQgLT4gSU8gQ0ludApJbmRleDog
bGlicmFyaWVzL2Jhc2UvaW5jbHVkZS9Ic0Jhc2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL2ZwdG9vbHMvbGlicmFyaWVzL2Jhc2UvaW5jbHVkZS9Ic0Jhc2Uu
aCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zCmRpZmYgLXIxLjMgSHNCYXNlLmgKODlh
OTAsMTA2Cj4gLyogRm9yIFBvc2l4ICovCj4gI2lmZGVmIGRhcndpbl9UQVJHRVRfT1MK
PiAKPiAjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KPiAjaWZkZWYgc2lnYWRkc2V0Cj4g
CS8vIG9uIE1hY09TIFgsIHNpZ2FkZHNldCBpcyBkZWZpbmVkIGFzIGEgbWFjcm8uLi4g
d2UgbmVlZCBhIHdyYXBwZXIKPiAKPiAJc3RhdGljIGlubGluZSBpbnQgc2lnYWRkc2V0
V3JhcHBlciAoc2lnc2V0X3QgKiBzZXQsIGludCBzKQo+IAl7Cj4gCQlyZXR1cm4gc2ln
YWRkc2V0KHNldCxzKTsKPiAJfQo+IAkKPiAJI3VuZGVmIHNpZ2FkZHNldAo+IAkjZGVm
aW5lIHNpZ2FkZHNldCBzaWdhZGRzZXRXcmFwcGVyCj4gI2VuZGlmCj4gI2VuZGlmCj4g
CkluZGV4OiBsaWJyYXJpZXMvbmV0d29yay9OZXR3b3JrL1NvY2tldC5oc2MKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9mcHRvb2xzL2xpYnJhcmllcy9uZXR3b3Jr
L05ldHdvcmsvU29ja2V0LmhzYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41CmRpZmYg
LXIxLjUgU29ja2V0LmhzYwoyNDMsMjQ1YzI0Mwo8ICNpZm5kZWYgbWluZ3czMl9UQVJH
RVRfT1MKPCB0eXBlIENTYUZhbWlseSA9ICgjdHlwZSBzYV9mYW1pbHlfdCkKPCAjZWxz
ZQotLS0KPiAjaWZkZWYgbWluZ3czMl9UQVJHRVRfT1MKMjQ2YTI0NSwyNDgKPiAjZWxp
ZiBkZWZpbmVkKGRhcndpbl9UQVJHRVRfT1MpCj4gdHlwZSBDU2FGYW1pbHkgPSAoI3R5
cGUgdV9jaGFyKQo+ICNlbHNlCj4gdHlwZSBDU2FGYW1pbHkgPSAoI3R5cGUgc2FfZmFt
aWx5X3QpCg==
--============_-1196172795==_D============--
--============_-1196172795==_============--