[22729] in Kerberos
RE: Problem with auth via keytab w/ w2k3 KDC, works fine with w2k DC
daemon@ATHENA.MIT.EDU (Neulinger, Nathan)
Fri Oct 22 15:32:09 2004
Content-class: urn:content-classes:message
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="----_=_NextPart_001_01C4B83A.484677FE"
Date: Fri, 22 Oct 2004 08:23:12 -0500
Message-ID: <19EAC69E19EC9542AF4B0540059BD1AE22C270@UMR-CMAIL1.umr.edu>
From: "Neulinger, Nathan" <nneul@umr.edu>
To: "Gmane" <huaraz@moeller.plus.com>, <kerberos@mit.edu>
Errors-To: kerberos-bounces@mit.edu
This is a multi-part message in MIME format.
------_=_NextPart_001_01C4B83A.484677FE
Content-Type: text/plain;
charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
Yes, we did resolve it. I've attached the perl code I use to create
princs... It's not going to be usable by itself, but you should be able
to pick out what you need. Had to do with the attributes that were being
set and names/etc.=20
------------------------------------------------------------
Nathan Neulinger EMail: nneul@umr.edu
University of Missouri - Rolla Phone: (573) 341-6679
UMR Information Technology Fax: (573) 341-4216
=20
> -----Original Message-----
> From: kerberos-bounces@mit.edu=20
> [mailto:kerberos-bounces@mit.edu] On Behalf Of Gmane
> Sent: Thursday, October 21, 2004 7:13 PM
> To: kerberos@mit.edu
> Subject: Re: Problem with auth via keytab w/ w2k3 KDC, works=20
> fine with w2k DC
>=20
> Nathan,
>=20
> I see now a similar problem. I am running for some time MIT=20
> 1.2.4 with a=20
> 2000 kdc. I now have to update to 2003 and noticed that I get decrypt=20
> integrety errors when using telnet. Everything else is the=20
> same (I use=20
> DESONLY, etc, ) Did you solve your issue ? How did you solve it ?
>=20
> Thanks
> Markus
>=20
>=20
> "Neulinger, Nathan" <nneul@umr.edu> wrote in message=20
> news:5C51DC2B8353AB4BA2CD04B34F2EE79C3EFE5C@umr-umail1.umr.edu...
> >> > ktutil, create keytab with that password, des-cbc-crc, kvno 1
> >> > ktutil, create keytab with that password, des-cbc-crc, kvno 3
> >>
> >> This might be the problem. Can you create the the keytab with
> >> des-cbc-md5,
> >> as the W2003 may be only accepting des-cbc-md5 as the e-type,
> >> and when used with
> >> kinit, kinit may be trying to what it found in the keytab,
> >> des-cbc-crc, and w2003
> >> will only accept des-cbc-md5.
> >
> > No go... Still get preauthentication failed. Also tried changing the
> > enctypes options in krb5.conf to only list md5 instead of=20
> crc and md5,
> > also no change. Password based auth still works fine.
> >
> > ________________________________________________
> > Kerberos mailing list Kerberos@mit.edu
> > https://mailman.mit.edu/mailman/listinfo/kerberos
> >=20
>=20
>=20
>=20
> ________________________________________________
> Kerberos mailing list Kerberos@mit.edu
> https://mailman.mit.edu/mailman/listinfo/kerberos
>=20
>=20
------_=_NextPart_001_01C4B83A.484677FE
Content-Type: application/octet-stream;
name="ADSObject.pm"
Content-Transfer-Encoding: base64
Content-Description: ADSObject.pm
Content-Disposition: attachment;
filename="ADSObject.pm"
cGFja2FnZSBVTVI6OlN5c1Byb2c6OkFEU09iamVjdDsKcmVxdWlyZSA1LjAwMDsKcmVxdWlyZSBF
eHBvcnRlcjsKdXNlIE5ldDo6TERBUFM7CnVzZSBOZXQ6OkxEQVA7CnVzZSBOZXQ6OkxEQVA6OlNl
YXJjaDsKdXNlIE5ldDo6TERBUDo6Q29udHJvbDo6UGFnZWQ7CnVzZSBOZXQ6OkxEQVA6OkNvbnN0
YW50IHF3KCBMREFQX0NPTlRST0xfUEFHRUQgKTsKdXNlIE5ldDo6TERBUDo6TERJRjsKdXNlIE5l
dDo6RE5TOwp1c2UgVU1SOjpBdXRoU3J2Owp1c2UgTWF0aDo6QmlnSW50OyAgICAjIHNob3VsZCBk
byB3aXRoIGV2YWwgaW5zdGVhZCBwZXJoYXBzCnVzZSBVTVI6OlN5c1Byb2c6OlBhc3N3b3JkU3Ry
ZW5ndGg7CnVzZSBVTVI6OlVzYWdlTG9nZ2VyOwoKIyBCZWdpbi1Eb2MKIyBOYW1lOiBVTVI6OlN5
c1Byb2c6OkFEU09iamVjdAojIFR5cGU6IG1vZHVsZQojIERlc2NyaXB0aW9uOiAgQWxsb3dzIGZv
ciBjcmVhdGUvbW9kaWZ5L2RlbGV0ZS9yZXNldCBwYXNzd29yZHMgaW4gQUQKIyBTeW50YXg6ICB1
c2UgVU1SOjpTeXNQcm9nOjpBRFNPYmplY3Q7CiMgUkNTSWQ6ICRIZWFkZXI6IC9hZnMvdW1yLmVk
dS9jdnMvdW1ycGVybC9saWJzL1VNUi9TeXNQcm9nL0FEU09iamVjdC5wbSx2IDEuNzkgMjAwNC8x
MC8wOCAxMzo0MDoyNSB0cm9vdCBFeHAgJAojIEVuZC1Eb2MKCkBJU0EgICAgPSBxdyhFeHBvcnRl
cik7CkBFWFBPUlQgPSBxdygpOwoKbXkgJHJldHJpZXMgPSA0OyAgICAjIFNldCB0aGlzIHRvIG9u
ZSBoaWdoZXIgdGhhbiB0aGUgbnVtYmVyIG9mIERDcy4KCiMgTGFzdCBFcnJvciBNZXNzYWdlCiRF
cnJvck1zZyA9ICJubyBlcnJvciI7CgojCiMgRmxhZyBiaXRzIGZvciBVc2VyQWNjb3VudENvbnRy
b2wgZmllbGQKIwoKbXkgJFVBQ19CSVRfSU5GTyA9IFsKCVsgMHgwMDAwMDAwMSwgIiIsICAgICAg
ICAgICAgICAgICAgICAiVUZfU0NSSVBUIiBdLAoJWyAweDAwMDAwMDAyLCAiQWNjb3VudCBFbmFi
bGVkIiwgICAgICJBY2NvdW50IERpc2FibGVkIiBdLAoJWyAweDAwMDAwMDA0LCAiIiwgICAgICAg
ICAgICAgICAgICAgICJVbms0IiBdLAoJWyAweDAwMDAwMDA4LCAiIiwgICAgICAgICAgICAgICAg
ICAgICJIb21lZGlyIFJlcXVpcmVkIiBdLAoJWyAweDAwMDAwMDEwLCAiIiwgICAgICAgICAgICAg
ICAgICAgICJMb2NrZWQgT3V0IiBdLAoJWyAweDAwMDAwMDIwLCAiUGFzc3dvcmQgUmVxdWlyZWQi
LCAgICJQYXNzd29yZCBOb3QgUmVxdWlyZWQiIF0sCglbIDB4MDAwMDAwNDAsICJDYW4gQ2hhbmdl
IFBhc3N3b3JkIiwgIkNhbm5vdCBDaGFuZ2UgUGFzc3dvcmQiIF0sCglbIDB4MDAwMDAwODAsICIi
LCAiU3RvcmUgUFcgd2l0aCBSZXZlcnNpYmxlIEVuY3J5cHRpb24iIF0sCglbIDB4MDAwMDAxMDAs
ICIiLCAiVGVtcG9yYXJ5IER1cGxpY2F0ZSBBY2NvdW50IiBdLAoJWyAweDAwMDAwMjAwLCAiIiwg
Ik5vcm1hbCBBY2NvdW50IiBdLAoJWyAweDAwMDAwNDAwLCAiIiwgIlVuazEwMjQiIF0sCglbIDB4
MDAwMDA4MDAsICIiLCAiSW50ZXJkb21haW4gVHJ1c3QgQWNjb3VudCIgXSwKCVsgMHgwMDAwMTAw
MCwgIiIsICJXb3Jrc3RhdGlvbiBUcnVzdCBBY2NvdW50IiBdLAoJWyAweDAwMDAyMDAwLCAiIiwg
IlNlcnZlciBUcnVzdCBBY2NvdW50IiBdLAoJWyAweDAwMDEwMDAwLCAiIiwgIlBhc3N3b3JkIG5l
dmVyIGV4cGlyZXMiIF0sCglbIDB4MDAwMjAwMDAsICIiLCAiTU5TIExvZ29uIEFjY291bnQiIF0s
CglbIDB4MDAwNDAwMDAsICIiLCAiU21hcnQgQ2FyZCBSZXF1aXJlZCBmb3IgTG9nb24iIF0sCglb
IDB4MDAwODAwMDAsICIiLCAiQWNjb3VudCB0cnVzdGVkIGZvciBkZWxlZ2F0aW9uIiBdLAoJWyAw
eDAwMTAwMDAwLCAiIiwgIkFjY291bnQgY2Fubm90IGJlIGRlbGVnYXRlZCIgXSwKCVsgMHgwMDIw
MDAwMCwgIiIsICJVc2UgREVTIGVuY3R5cGVzIiBdLAoJWyAweDAwNDAwMDAwLCAiIiwgIk5vIHBy
ZWF1dGggcmVxdWlyZWQiIF0sCglbIDB4MDA4MDAwMDAsICIiLCAiUGFzc3dvcmQgRXhwaXJlZCIg
XSwKXTsKbXkgJFVBQ19ESVNBQkxFRCAgICAgICAgICAgICAgID0gMHgwMDAwMDAwMjsKbXkgJFVB
Q19JTklUSUFMSVpFRCAgICAgICAgICAgID0gMHgwMDAwMDIwMDsKbXkgJFVBQ19ORVZFUl9FWFBJ
UkVTICAgICAgICAgID0gMHgwMDAxMDAwMDsKbXkgJFVBQ19XT1JLU1RBVElPTl9UUlVTVCAgICAg
ID0gMHgwMDAwMTAwMDsKbXkgJFVBQ19UUlVTVEVEX0ZPUl9ERUxFR0FUSU9OID0gMHgwMDA4MDAw
MDsKbXkgJFVBQ19ERVNfT05MWSAgICAgICAgICAgICAgID0gMHgwMDIwMDAwMDsKbXkgJFVBQ19Q
V19OT1RfUkVRVUlSRUQgICAgICAgID0gMHgwMDAwMDAyMDsKbXkgJFVBQ19DQU5OT1RfQ0hBTkdF
X1BXICAgICAgID0gMHgwMDAwMDA0MDsKbXkgJFVBQ19OT1JNQUxfQUNDT1VOVCAgICAgICAgID0g
JFVBQ19JTklUSUFMSVpFRCB8ICRVQUNfTkVWRVJfRVhQSVJFUzsKCm15ICRVQUNfQ09NUFVURVJf
QUNDT1VOVCA9CgkkVUFDX05FVkVSX0VYUElSRVMgfCAkVUFDX1dPUktTVEFUSU9OX1RSVVNUIHwg
JFVBQ19ERVNfT05MWSB8CgkkVUFDX1RSVVNURURfRk9SX0RFTEVHQVRJT047CgpteSAkVUFDX1VO
SVhIT1NUX0FDQ09VTlQgPQoJJFVBQ19OT1JNQUxfQUNDT1VOVCB8ICRVQUNfVFJVU1RFRF9GT1Jf
REVMRUdBVElPTiB8ICRVQUNfREVTX09OTFk7CgojCiMgRmxhZyBiaXRzIGZvciBncm91cCB0eXBl
IGZpZWxkCiMKbXkgJEdUWVBFX0JJVF9JTkZPID0gWwoJWyAweDAwMDAwMDAyLCAiIiwgIkdsb2Jh
bCBHcm91cCIgXSwKCVsgMHgwMDAwMDAwNCwgIiIsICJbRG9tYWluXSBMb2NhbCBHcm91cCIgXSwK
CVsgMHgwMDAwMDAwOCwgIiIsICJVbml2ZXJzYWwgR3JvdXAiIF0sCglbIDB4ODAwMDAwMDAsICIi
LCAiU2VjdXJpdHkgRW5hYmxlZCIgXSwKXTsKCiMKIyBGbGFnIGJpdHMgZm9yIGluc3RhbmNlIHR5
cGUgZmllbGQKIwoKIwojIFZhbHVlcyBhY2NvdW50IHR5cGUgZmllbGQKIwpteSAkQVRZUEVfVkFM
UyA9IFsKCVsgMHgxMDAwMDAwMCwgIlNlY3VyaXR5IEdsb2JhbCBHcm91cCIgXSwKCVsgMHgxMDAw
MDAwMSwgIkRpc3RyaWJ1dGlvbiBHcm91cCIgXSwKCVsgMHgyMDAwMDAwMCwgIlNlY3VyaXR5IExv
Y2FsIEdyb3VwIiBdLAoJWyAweDIwMDAwMDAxLCAiRGlzdHJpYnV0aW9uIExvY2FsIEdyb3VwIiBd
LAoJWyAweDMwMDAwMDAwLCAiTm9ybWFsIEFjY291bnQiIF0sCglbIDB4MzAwMDAwMDEsICJXb3Jr
c3RhdGlvbiBUcnVzdCIgXSwKCVsgMHgzMDAwMDAwMiwgIkludGVyZG9tYWluIFRydXN0IiBdLApd
OwoKIyBCZWdpbi1Eb2MKIyBOYW1lOiBuZXcKIyBUeXBlOiBmdW5jdGlvbgojIERlc2NyaXB0aW9u
OiAgQmluZHMgdG8gQUQKIyBTeW50YXg6ICRleCA9IG5ldyBVTVI6OlN5c1Byb2c6OkFEU09iamVj
dCgKIwkJdXNlciA9PiAkdXNlciwKIwkJcGFzc3dvcmQgPT4gJHB3KSB8fCBkaWUgJFVNUjo6U3lz
UHJvZzo6QURTT2JqZWN0OjpFcnJvck1zZzsKIyBFbmQtRG9jCnN1YiBuZXcKewoJbXkgJHNlbGYg
ICAgICAgICAgPSBzaGlmdDsKCW15ICRjbGFzcyAgICAgICAgID0gcmVmKCRzZWxmKSB8fCAkc2Vs
ZjsKCW15ICVpbmZvICAgICAgICAgID0gQF87CglteSAkbW9kZSAgICAgICAgICA9ICRpbmZve21v
ZGV9IHx8ICJSIjsKCW15ICRzZXJ2ZXIgICAgICAgID0gJGluZm97c2VydmVyfSB8fCAidW1yLWRj
LnVtci5lZHUiOwoJbXkgJHByZWZfcGFnZXNpemUgPSAkaW5mb3twYWdlc2l6ZX0gfHwgMjU7Cglt
eSAkcHJlZl9kZWJ1ZyAgICA9ICRpbmZve2RlYnVnfSB8fCAwOwoKCSZMb2dBUElVc2FnZSgpOwoK
CSRwcmVmX2RlYnVnICYmIHByaW50ICJ1c2luZyBzZXJ2ZXIgKCRzZXJ2ZXIpXG4iOwoKCW15ICRw
b3J0ID0gJGluZm97cG9ydH0gfHwgNjM2OwoJbXkgJHNzbDsKCWlmICggZGVmaW5lZCggJGluZm97
c3NsfSApICkKCXsKCQkkc3NsID0gJGluZm97c3NsfTsKCX0KCWVsc2UKCXsKCQkkc3NsID0gMTsK
CX0KCglpZiAoIGRlZmluZWQoICRpbmZve3BvcnR9ICkgKQoJewoJCSRwb3J0ID0gJGluZm97cG9y
dH07Cgl9CgllbHNlCgl7CgkJaWYgKCRzc2wpCgkJewoJCQkkcG9ydCA9IDYzNjsKCQl9CgkJZWxz
ZQoJCXsKCQkJJHBvcnQgPSAzODk7CgkJfQoJfQoJbXkgJHVzZXIgPSAkaW5mb3t1c2VyfSAgICAg
fHwgKCBnZXRwd3VpZCgkPikgKVswXTsKCW15ICRwdyAgID0gJGluZm97cGFzc3dvcmR9IHx8ICZB
dXRoU3J2X0ZldGNoKAoJCXVzZXIgICAgID0+ICR1c2VyLAoJCWluc3RhbmNlID0+ICdhZHMnCgkp
OwoJbXkgJGRvbWFpbiA9ICRpbmZve2RvbWFpbn0gfHwgInVtci5lZHUiOwoKCSMgc2V0IGFueSBv
YmplY3QgcGFyYW1zCglteSAkdG1wID0ge307CgkkdG1wLT57ImRlYnVnIn0gID0gJHByZWZfZGVi
dWc7CgkkdG1wLT57ImJhc2VkbiJ9ID0gJGluZm97YmFzZWRufSB8fCAiREM9dW1yLERDPWVkdSI7
CgkkdG1wLT57ImRvbWFpbiJ9ID0gJGRvbWFpbjsKCgkkcHJlZl9kZWJ1ZyAmJiBwcmludCAiY3Jl
YXRpbmcgbGRhcCBvYmplY3RcbiI7CglpZiAoJHNzbCkKCXsKCQkkdG1wLT57bGRhcH0gPSBuZXcg
TmV0OjpMREFQUygKCQkJJHNlcnZlciwKCQkJcG9ydCAgICA9PiAkcG9ydCwKCQkJdmVyc2lvbiA9
PiAzCgkJKTsKCX0KCWVsc2UKCXsKCQkkdG1wLT57bGRhcH0gPSBuZXcgTmV0OjpMREFQKAoJCQkk
c2VydmVyLAoJCQlwb3J0ICAgID0+ICRwb3J0LAoJCQl2ZXJzaW9uID0+IDMKCQkpOwoJfQoJaWYg
KCAhJHRtcC0+e2xkYXB9ICkKCXsKCQkkcHJlZl9kZWJ1ZyAmJiBwcmludCAkQCwgIlxuIjsKCQly
ZXR1cm4gdW5kZWY7Cgl9CgkkdG1wLT57cGFnZXNpemV9ID0gJHByZWZfcGFnZXNpemU7CgoJbXkg
JGxkYXAgID0gJHRtcC0+e2xkYXB9OwoJbXkgJGNvdW50ID0gMDsKCW15ICRyZXMgICA9IHVuZGVm
OwoJbXkgJGJvdW5kID0gMDsKCXdoaWxlICggJGNvdW50IDwgJHJldHJpZXMgJiYgISRib3VuZCAp
Cgl7CgkJJHJlcyA9ICRsZGFwLT5iaW5kKCAiJHVzZXJcQCRkb21haW4iLCBwYXNzd29yZCA9PiAk
cHcgKTsKCQlpZiAoICEkcmVzLT5jb2RlICkKCQl7CgkJCSRib3VuZCA9IDE7CgkJCWxhc3Q7CgkJ
fQoJCSRjb3VudCsrOwoJfQoJaWYgKCAhJGJvdW5kICkKCXsKCQkkRXJyb3JNc2cgPSAibGRhcCBi
aW5kIGZhaWxlZDogIiAuICRyZXMtPmVycm9yOwoJCXJldHVybiB1bmRlZjsKCX0KCWVsc2UKCXsK
CQlyZXR1cm4gYmxlc3MgJHRtcCwgJGNsYXNzOwoJfQp9CgpzdWIgZGVidWcKewoJbXkgJHNlbGYg
PSBzaGlmdDsKCWlmIChAXykKCXsKCQkkc2VsZi0+e2RlYnVnfSA9IHNoaWZ0OwoJfQoJZWxzZQoJ
ewoJCXJldHVybiAkc2VsZi0+e2RlYnVnfTsKCX0KfQoKIyBCZWdpbi1Eb2MKIyBOYW1lOiBsZGFw
CiMgVHlwZTogbWV0aG9kCiMgQWNjZXNzOiBzZW1pLXByaXZhdGUKIyBEZXNjcmlwdGlvbjogUmV0
dXJucyB0aGUgaW50ZXJuYWwgbGRhcCBjb25uZWN0aW9uIGVzdGFibGlzaGVkIGJ5IHRoZSBvYmpl
Y3QKIyBSZXR1cm5zOiByZWZlcmVuY2UgdG8gYSBOZXQ6OkxEQVAgb3IgTmV0OjpMREFQUyBvYmpl
Y3QKIyBFbmQtRG9jCnN1YiBsZGFwCnsKCW15ICRzZWxmID0gc2hpZnQ7CglteSAkbGRhcCA9ICRz
ZWxmLT57bGRhcH07CgoJcmV0dXJuICRsZGFwOwp9CgojIEJlZ2luLURvYwojIE5hbWU6IF9HZXRE
TgojIFR5cGU6IG1ldGhvZAojIEFjY2VzczogcHJpdmF0ZQojIERlc2NyaXB0aW9uOiBEb2VzIGEg
c2VhcmNoIG9uIHRoZSBzcG4gYXR0cmlidXRlaSBmb3IgaG9zdC8kaG9zdG5hbWUgYW5kIHJldHVy
bnMgdGhlCiMgZGlzdGluZ3Vpc2hlZE5hbWUgYXR0cmlidXRlCiMgUmV0dXJuczogZGlzdGluZ3Vp
c2hlZE5hbWUKIyBFbmQtRG9jCgpzdWIgX0dldEhvc3RETgp7CglteSAkc2VsZiAgPSBzaGlmdDsK
CW15ICRsZGFwICA9ICRzZWxmLT57bGRhcH07CglteSAkRG5hbWUgPSB1bmRlZjsKCglteSAoJGhv
c3QpID0gQF87CgoJbXkgJGJhc2VETiA9ICRzZWxmLT57YmFzZWRufTsKCW15ICRkb21haW4gPSAk
c2VsZi0+e2RvbWFpbn07CgoJbXkgJHNyY2ggPSAkbGRhcC0+c2VhcmNoKAoJCWJhc2UgICA9PiAk
YmFzZUROLAoJCXNjb3BlICA9PiAnc3ViJywKCQlmaWx0ZXIgPT4gIih8KHNlcnZpY2VQcmluY2lw
YWxOYW1lPWhvc3QvJGhvc3QpKSIsCgkJYXR0cnMgID0+IFsnZGlzdGluZ3Vpc2hlZE5hbWUnXQoJ
KTsKCglteSBAZW50cmllcyA9ICRzcmNoLT5lbnRyaWVzOwoJbXkgJG1heCAgICAgPSAkc3JjaC0+
Y291bnQ7CgoJZm9yZWFjaCBteSAkZW50cnkgKCAkc3JjaC0+YWxsX2VudHJpZXMgKQoJewoJCSRE
bmFtZSA9ICRlbnRyeS0+Z2V0X3ZhbHVlKCdkaXN0aW5ndWlzaGVkTmFtZScpOwoJfQoJJHNlbGYt
PmRlYnVnICYmIHByaW50ICJEbmFtZTIgaXMgJERuYW1lXG4iOwoKCWlmICggJHNyY2gtPmNvZGUg
KQoJewoJCSRFcnJvck1zZyA9ICJTZWFyY2ggZmFpbGVkOiAiIC4gJHNyY2gtPmVycm9yIC4gIlxu
IjsKCQlyZXR1cm4gdW5kZWY7Cgl9CglyZXR1cm4gJERuYW1lOwp9CgojIEJlZ2luLURvYwojIE5h
bWU6IF9HZXRETgojIFR5cGU6IG1ldGhvZAojIEFjY2VzczogcHJpdmF0ZQojIERlc2NyaXB0aW9u
OiBEb2VzIGEgc2VhcmNoIG9uIHRoZSBzQU1BY2NvdW50TmFtZSBhdHRyaWJ1dGUgYW5kIHJldHVy
bnMgdGhlCiMgZGlzdGluZ3Vpc2hlZE5hbWUgYXR0cmlidXRlCiMgUmV0dXJuczogZGlzdGluZ3Vp
c2hlZE5hbWUKIyBFbmQtRG9jCgpzdWIgX0dldEROCnsKCW15ICRzZWxmICA9IHNoaWZ0OwoJbXkg
JGxkYXAgID0gJHNlbGYtPntsZGFwfTsKCW15ICREbmFtZSA9IHVuZGVmOwoKCW15ICgkU0FNKSA9
IEBfOwoJJHNlbGYtPmRlYnVnICYmIHByaW50ICJTQU0gaXMgJFNBTVxuIjsKCglteSAkYmFzZURO
ID0gJHNlbGYtPntiYXNlZG59OwoJJHNlbGYtPmRlYnVnICYmIHByaW50ICJiYXNlRE4gPSAkYmFz
ZUROXG4iOwoKCW15ICRkb21haW4gPSAkc2VsZi0+e2RvbWFpbn07Cgkkc2VsZi0+ZGVidWcgJiYg
cHJpbnQgImRvbWFpbiA9ICRkb21haW5cbiI7CgoJbXkgJHNyY2ggPSAkbGRhcC0+c2VhcmNoKAoJ
CWJhc2UgICA9PiAkYmFzZUROLAoJCXNjb3BlICA9PiAnc3ViJywKCQlmaWx0ZXIgPT4gIih8KHNB
TUFjY291bnROYW1lPSRTQU0pKSIsCgkJYXR0cnMgID0+IFsnZGlzdGluZ3Vpc2hlZE5hbWUnXQoJ
KTsKCglteSBAZW50cmllcyA9ICRzcmNoLT5lbnRyaWVzOwoJbXkgJG1heCAgICAgPSAkc3JjaC0+
Y291bnQ7CgoJZm9yZWFjaCBteSAkZW50cnkgKCAkc3JjaC0+YWxsX2VudHJpZXMgKQoJewoJCSRE
bmFtZSA9ICRlbnRyeS0+Z2V0X3ZhbHVlKCdkaXN0aW5ndWlzaGVkTmFtZScpOwoJfQoJJHNlbGYt
PmRlYnVnICYmIHByaW50ICJEbmFtZTEgaXMgJERuYW1lXG4iOwoKCWlmICggISREbmFtZSApCgl7
CgkJbXkgJHNyY2ggPSAkbGRhcC0+c2VhcmNoKAoJCQliYXNlICAgPT4gJGJhc2VETiwKCQkJc2Nv
cGUgID0+ICdzdWInLAoJCQlmaWx0ZXIgPT4gIih8KHVzZXJQcmluY2lwYWxOYW1lPSRTQU1cQCIg
LiAkZG9tYWluIC4gIikpIiwKCQkJYXR0cnMgID0+IFsnZGlzdGluZ3Vpc2hlZE5hbWUnXQoJCSk7
CgoJCW15IEBlbnRyaWVzID0gJHNyY2gtPmVudHJpZXM7CgkJbXkgJG1heCAgICAgPSAkc3JjaC0+
Y291bnQ7CgoJCWZvcmVhY2ggbXkgJGVudHJ5ICggJHNyY2gtPmFsbF9lbnRyaWVzICkKCQl7CgkJ
CSREbmFtZSA9ICRlbnRyeS0+Z2V0X3ZhbHVlKCdkaXN0aW5ndWlzaGVkTmFtZScpOwoJCX0KCQkk
c2VsZi0+ZGVidWcgJiYgcHJpbnQgIkRuYW1lMiBpcyAkRG5hbWVcbiI7Cgl9CgoJaWYgKCAkc3Jj
aC0+Y29kZSApCgl7CgkJJEVycm9yTXNnID0gIlNlYXJjaCBmYWlsZWQ6ICIgLiAkc3JjaC0+ZXJy
b3IgLiAiXG4iOwoJCXJldHVybiB1bmRlZjsKCX0KCXJldHVybiAkRG5hbWU7Cn0KCiMgQmVnaW4t
RG9jCiMgTmFtZTogU2V0UGFzc3dvcmQKIyBUeXBlOiBtZXRob2QKIyBEZXNjcmlwdGlvbjogIFJl
c2V0cyB0aGUgQURTIFBhc3N3b3JkIGZvciBhIHVzZXJpZAojIFN5bnRheDogICRzZXRwdyA9ICRl
eC0+U2V0UGFzc3dvcmQoCiMJCQl1c2VyaWQgPT4gIm1pbmVyIiwKIwkJCXBhc3N3b3JkID0+ICJl
bmdpbmVlciIpOwojIFJldHVybnM6IHVuZGVmIGlzIHN1Y2Nlc3NmdWwgb3RoZXJ3aXNlIHRoZSBl
cnJvcgojIEVuZC1Eb2MKc3ViIFNldFBhc3N3b3JkCnsKCW15ICRzZWxmID0gc2hpZnQ7CglteSAo
JWluZm8pID0gQF87CglteSAoICR1c2VyaWQsICRwYXNzd29yZCwgJHVwbiwgJGRuLCAkcmVzICk7
CgkkdXNlcmlkICAgPSAkaW5mb3t1c2VyaWR9ICAgfHwgcmV0dXJuICJuZWVkIGEgdXNlcmlkXG4i
OwoJJHBhc3N3b3JkID0gJGluZm97cGFzc3dvcmR9IHx8IHJldHVybiAibmVlZCBuZXcgcGFzc3dv
cmRcbiI7CgkkZG4gPSAkc2VsZi0+X0dldEROKCR1c2VyaWQpOwoJaWYgKCAhJGRuICkKCXsKCQkk
c2VsZi0+ZGVidWcgJiYgcHJpbnQgInVzZXJpZCBub3QgZm91bmRcbiI7CgkJJEVycm9yTXNnID0g
IlVzZXJpZCAnJHVzZXJpZCcgbm90IGZvdW5kLiBQYXNzd29yZCBub3Qgc2V0LlxuIjsKCQlyZXR1
cm4gJEVycm9yTXNnOwoJfQoKCSRzZWxmLT5kZWJ1ZyAmJiBwcmludCAiZG4gaXMgJGRuXG4iOwoJ
JHNlbGYtPmRlYnVnICYmIHByaW50ICJ1c2VyaWQgaXMgJHVzZXJpZFxuIjsKCSRzZWxmLT5kZWJ1
ZyAmJiBwcmludCAicGFzc3dvcmQgaXMgJHBhc3N3b3JkXG4iOwoKCSMtLS0KCSMgc2ltcGxlIHN0
cmluZz0+dW5pY29kZSBjb252ZXJzaW9uCgkjLS0tCgkkcHcgID0gJHNlbGYtPl9NYWtlVW5pY29k
ZSgkcGFzc3dvcmQpOwoJJHJlcyA9ICRzZWxmLT57bGRhcH0tPm1vZGlmeSgKCQlkbiAgICAgID0+
ICRkbiwKCQljaGFuZ2VzID0+IFsgcmVwbGFjZSA9PiBbICJ1bmljb2RlUHdkIiA9PiAkcHcsIF0g
XQoJKTsKCWlmICggJHJlcy0+Y29kZSApCgl7CgkJJEVycm9yTXNnID0gInBhc3N3b3JkIHNldCBm
YWlsZWQ6ICIgLiAkcmVzLT5lcnJvcjsKCQlyZXR1cm4gJEVycm9yTXNnOwoJfQoKCSRyZXMgPSAk
c2VsZi0+X01vZGlmeVVBQ0JpdHMoCgkJdXNlcmlkID0+ICR1c2VyaWQsCgkJcmVzZXQgID0+ICRV
QUNfUFdfTk9UX1JFUVVJUkVELAoJKTsKCWlmICgkcmVzKQoJewoJCSRFcnJvck1zZyA9ICJwYXNz
d29yZCBzZXQgZmFpbGVkOiAiIC4gJHJlczsKCQlyZXR1cm4gJEVycm9yTXNnOwoJfQoKCXJldHVy
biB1bmRlZjsKfQoKIyBCZWdpbi1Eb2MKIyBOYW1lOiBDcmVhdGVVc2VyCiMgVHlwZTogbWV0aG9k
CiMgRGVzY3JpcHRpb246IENyZWF0ZXMgYSB1c2VyIGluIEFELi4ubm90ZSB0aGF0IHRoZSB1c2Vy
aWQgaXMgZGlzYWJsZWQgdW50aWwKIyBTeW50YXg6ICRjcnR1c3IgPSAkZXgtPkFEU19DcmVhdGVV
c2VyKAojCQkJRGlzdGluZ3Vpc2hlZE5hbWUgPT4gJGRuLAojCQkJU2FtQWNjb3VudE5hbWUgPT4g
JHNhbWFjY291bnQsCiMJCQlEaXNwbGF5TmFtZSA9PiAkZGlzcGxheSwKIwkJCVVzZXJQcmluY2lw
YWxOYW1lID0+ICR1cG4pCiMgUmV0dXJuczogdW5kZWYgaWYgc3VjY2VzcywgZWxzZSBlcnJvcgoj
IEVuZC1Eb2MKCnN1YiBDcmVhdGVVc2VyCnsKCW15ICRzZWxmID0gc2hpZnQ7CglteSAoJWluZm8p
ID0gQF87CglteSAoICRkbiwgJHNhbU5hbWUsICRkaXNwTmFtZSwgJHVzZXJQTiwgJHByaW5jICk7
CglteSAkbGRhcCA9ICRzZWxmLT57bGRhcH07CgkkZG4gICAgICAgPSAkaW5mb3tEaXN0aW5ndWlz
aGVkTmFtZX07Cgkkc2FtTmFtZSAgPSAkaW5mb3tTYW1BY2NvdW50TmFtZX07CgkkZGlzcE5hbWUg
PSAkaW5mb3tEaXNwbGF5TmFtZX07CgkkdXNlclBOICAgPSAkaW5mb3tVc2VyUHJpbmNpcGFsTmFt
ZX07Cgkkc3BuICAgICAgPSAkaW5mb3tTZXJ2aWNlUHJpbmNpcGFsTmFtZX07Cgkkc2VsZi0+ZGVi
dWcgJiYgcHJpbnQgImRpc3BOYW1lID0gJGRpc3BOYW1lXG4iOwoJJHNlbGYtPmRlYnVnICYmIHBy
aW50ICJ1c2VyUE4gPSAkdXNlclBOXG4iOwoJJHNlbGYtPmRlYnVnICYmIHByaW50ICJzYW1OYW1l
ID0gJHNhbU5hbWVcbiI7Cgkkc2VsZi0+ZGVidWcgJiYgcHJpbnQgImRuID0gJGRuXG4iOwoKCSRz
ZWxmLT5kZWJ1ZyAmJiBwcmludCAiaW5zaWRlIGNyZWF0ZVxuIjsKCSRjcnR1c3IgPSAkc2VsZi0+
e2xkYXB9LT5hZGQoCgkJZG4gICA9PiAiJGRuIiwKCQlhdHRyID0+IFsKCQkJU2FtQWNjb3VudE5h
bWUgICAgPT4gIiRzYW1OYW1lIiwKCQkJRGlzcGxheU5hbWUgICAgICAgPT4gIiRkaXNwTmFtZSIs
CgkJCVVzZXJQcmluY2lwYWxOYW1lID0+ICIkdXNlclBOXEB1bXIuZWR1IiwKCQkJb2JqZWN0Y2xh
c3MgPT4gWyAndG9wJywgJ3BlcnNvbicsICdvcmdhbml6YXRpb25hbFBlcnNvbicsICd1c2VyJyBd
LAoJCQl1bmljb2RlUHdkICA9PiAkc2VsZi0+X01ha2VVbmljb2RlKCZQV19HZW5lcmF0ZVBhc3N3
b3JkKSwKCQkJdXNlckFjY291bnRDb250cm9sID0+IDAsCgkJXQoJKTsKCglpZiAoICRjcnR1c3It
PmNvZGUgKQoJewoJCSRzZWxmLT5kZWJ1ZyAmJiBwcmludCAiQ3JlYXRlIGZhaWxlZDogIiAuICRj
cnR1c3ItPmVycm9yIC4gIlxuIjsKCQkkRXJyb3JNc2cgPSAiY3JlYXRlIGZhaWxlZDogIiAuICRj
cnR1c3ItPmVycm9yOwoJCXJldHVybiAiQ3JlYXRlIGZhaWxlZDogIiAuICRjcnR1c3ItPmVycm9y
IC4gIlxuIjsKCX0KCWVsc2UKCXsKCQkkc2VsZi0+ZGVidWcgJiYgcHJpbnQgImNyZWF0ZSBva1xu
IjsKCX0KCgkjCgkjIE5vdyBlbmFibGUgdGhlIHVzZXIKCSMKCSMgYW5kIG1ha2UgaXQgbmV2ZXIg
ZXhwaXJlCgkkcmVzID0gJHNlbGYtPkVuYWJsZUFjY291bnQoJHNhbU5hbWUpOwoJaWYgKCRyZXMp
IHsgcmV0dXJuICRyZXM7IH0KCgkkcmVzID0gJHNlbGYtPl9Nb2RpZnlVQUNCaXRzKAoJCXVzZXJp
ZCA9PiAkc2FtTmFtZSwKCQlzZXQgICAgPT4gJFVBQ19ORVZFUl9FWFBJUkVTLAoJCXJlc2V0ICA9
PiAkVUFDX1BXX05PVF9SRVFVSVJFRCwKCSk7CglpZiAoJHJlcykgeyByZXR1cm4gJHJlczsgfQoK
CXJldHVybiB1bmRlZjsKfQoKIyBCZWdpbi1Eb2MKIyBOYW1lOiBDcmVhdGVTZWN1cml0eUdyb3Vw
CiMgVHlwZTogbWV0aG9kCiMgRGVzY3JpcHRpb246IENyZWF0ZXMgYSBzZWN1cml0eSBncm91cCBu
ZXRncm91cAojIFN5bnRheDogJGNydHVzciA9ICRleC0+Q3JlYXRlU2VjdXJpdHlHcm91cCgKIwkJ
CWdyb3VwID0+ICRncm91cCkKIyBSZXR1cm5zOiB1bmRlZiBpZiBzdWNjZXNzLCBlbHNlIGVycm9y
CiMgRW5kLURvYwoKc3ViIENyZWF0ZVNlY3VyaXR5R3JvdXAKewoJbXkgJHNlbGYgPSBzaGlmdDsK
CW15ICglaW5mbykgPSBAXzsKCW15ICgkZ3JvdXApOwoJbXkgJGxkYXAgPSAkc2VsZi0+e2xkYXB9
OwoJJGdyb3VwID0gJGluZm97Z3JvdXB9OwoJbXkgJG91ID0gJGluZm97b3V9OwoJaWYgKCAhZGVm
aW5lZCgkb3UpICkKCXsKCgkJaWYgKCAkZ3JvdXAgPX4gL15uZy0vICkKCQl7CgkJCSRvdSA9ICJP
VT1OZXRHcm91cHMsIiAuICRzZWxmLT57YmFzZWRufTsKCQl9CgkJZWxzZQoJCXsKCQkJcmV0dXJu
ICJuZWVkIHRvIHNwZWNpZnkgT1UiOwoJCX0KCX0KCW15ICRkbiA9ICJDTj0kZ3JvdXAsJG91IjsK
Cgkkc2VsZi0+ZGVidWcgJiYgcHJpbnQgImRuID0gJGRuXG4iOwoKCSRzZWxmLT5kZWJ1ZyAmJiBw
cmludCAiaW5zaWRlIGNyZWF0ZVxuIjsKCSRjcnR1c3IgPSAkc2VsZi0+e2xkYXB9LT5hZGQoCgkJ
ZG4gICA9PiAiJGRuIiwKCQlhdHRyID0+IFsKCQkJc0FNQWNjb3VudE5hbWUgPT4gIiRncm91cCIs
CgkJCW5hbWUgICAgICAgICAgID0+ICRncm91cCwKCQkJb2JqZWN0Y2xhc3MgICAgPT4gWyAndG9w
JywgJ2dyb3VwJyBdLAoJCQlncm91cFR5cGUgICAgICA9PiAtMjE0NzQ4MzY0MAoJCV0KCSk7Cglp
ZiAoICRjcnR1c3ItPmNvZGUgKQoJewoJCSRzZWxmLT5kZWJ1ZyAmJiBwcmludCAiQ3JlYXRlIGZh
aWxlZDogIiAuICRjcnR1c3ItPmVycm9yIC4gIlxuIjsKCQkkRXJyb3JNc2cgPSAiY3JlYXRlIGZh
aWxlZDogIiAuICRjcnR1c3ItPmVycm9yOwoJCXJldHVybiAkRXJyb3JNc2c7Cgl9CgoJcmV0dXJu
IHVuZGVmOwp9CgojIEJlZ2luLURvYwojIE5hbWU6IFVwZGF0ZVNlY3VyaXR5R3JvdXBEZXRhaWxz
CiMgVHlwZTogbWV0aG9kCiMgRGVzY3JpcHRpb246IFVwZGF0ZXMgaW5mbyBmb3IgYSBzZWN1cml0
eSBncm91cCBuZXRncm91cAojIFN5bnRheDogJGNydHVzciA9ICRleC0+VXBkYXRlU2VjdXJpdHlH
cm91cERldGFpbHMoCiMJCQlncm91cCA9PiAkZ3JvdXApCiMgUmV0dXJuczogdW5kZWYgaWYgc3Vj
Y2VzcywgZWxzZSBlcnJvcgojIEVuZC1Eb2MKCnN1YiBVcGRhdGVTZWN1cml0eUdyb3VwRGV0YWls
cwp7CglteSAkc2VsZiA9IHNoaWZ0OwoJbXkgKCVpbmZvKSA9IEBfOwoJbXkgKCRncm91cCk7Cglt
eSAkbGRhcCA9ICRzZWxmLT57bGRhcH07CgkkZ3JvdXAgPSAkaW5mb3tncm91cH07CgoJbXkgJGRp
c3BsYXlOYW1lID0gJGdyb3VwOwoJJGRpc3BsYXlOYW1lID1+IHMvXm5nLS8vZ2lvOwoJJGRpc3Bs
YXlOYW1lID1+IHMvLS8gL2dpbzsKCSRkaXNwbGF5TmFtZSA9fiBzLyhbYS16MC05XSspL3VjZmly
c3QgJDEvZWdpbzsKCSRkaXNwbGF5TmFtZSA9fiBzL15pdCAvSVQgL2dpbzsKCSRkaXNwbGF5TmFt
ZSA9ICJVTVIgTkcgIiAuICRkaXNwbGF5TmFtZTsKCglteSAkcmVzID0gJHNlbGYtPlNldEF0dHJp
YnV0ZXMoCgkJdXNlcmlkICAgICA9PiAkZ3JvdXAsCgkJYXR0cmlidXRlcyA9PiBbCgkJCWRpc3Bs
YXlOYW1lICAgICAgICAgID0+ICRkaXNwbGF5TmFtZSwKCQkJZGlzcGxheU5hbWVQcmludGFibGUg
PT4gJGRpc3BsYXlOYW1lLAoJCQltYWlsICAgICAgICAgICAgICAgICA9PiAiJGdyb3VwXEBtc3gu
dW1yLmVkdSIsCgkJCW1haWxOaWNrbmFtZSAgICAgICAgID0+ICRncm91cCwKCQkJcHJveHlBZGRy
ZXNzZXMgICAgICAgPT4KCQkJCVsgIlNNVFA6JGdyb3VwXEB1bXIuZWR1IiwgInNtdHA6JGdyb3Vw
XEBtc3gudW1yLmVkdSIsIF0sCgkJCWxlZ2FjeUV4Y2hhbmdlRE4gPT4gIi9PPVVuaXZlcnNpdHkg
b2YgTWlzc291cmkvT1U9Um9sbGEiCgkJCQkuICIvY249UmVjaXBpZW50cy9PVT1OZXRncm91cHMv
Y249JGdyb3VwIiwKCQldCgkpOwoKCWlmICgkcmVzKQoJewoJCSRzZWxmLT5kZWJ1ZyAmJiBwcmlu
dCAiVXBkYXRlIGZhaWxlZDogIiAuICRyZXMgLiAiXG4iOwoJCSRFcnJvck1zZyA9ICJ1cGRhdGUg
ZmFpbGVkOiAiIC4gJHJlczsKCQlyZXR1cm4gJEVycm9yTXNnOwoJfQoKCXJldHVybiB1bmRlZjsK
fQoKc3ViIENyZWF0ZV9Vbml4X0hvc3QKewoJbXkgJHNlbGYgPSBzaGlmdDsKCW15ICglaW5mbykg
PSBAXzsKCW15ICggJGZxZG4sICRwdywgJHNhbU5hbWUsICRkaXNwTmFtZSwgJGNvdW50LCAkbmFt
ZSApOwoJbXkgJHJlczsKCgkkY291bnQgPSAxOwoJJGZxZG4gID0gJGluZm97ZnFkbn07CgkkcHcg
ICAgPSAkaW5mb3twd307CgoJbXkgJGhuID0gJGZxZG47CgkkaG4gPX4gc3xcLi4qfHxnaW87CgoJ
JGRpc3BOYW1lID0gJGZxZG47Cgkkc2FtTmFtZSAgPSAiaG9zdC0kaG4iOwoKCW15ICRjbiA9ICRm
cWRuOwoJbXkgJGRuID0gIkNOPSRjbixPVT1Vbml4SG9zdHMsREM9dW1yLERDPWVkdSI7CgoJIy0t
LS0tLQoJIyAgTG9vayBmb3IgdGhlIHNBTUFjY291bnROYW1lIGluIEFELgoJIyAgSWYgaXQncyBh
bHJlYWR5IHByZXNlbnQgc3RhcnQgYWRkaW5nIGRpZ2l0cyB0byB0aGUgZW5kLgoJIy0tLS0tLQoJ
JHNlbGYtPmRlYnVnICYmIHByaW50ICJmcWRuLSAkZnFkblxuIjsKCSRzZWxmLT5kZWJ1ZyAmJiBw
cmludCAic2FtTmFtZSAtICRzYW1OYW1lXG4iOwoJaWYgKCBsZW5ndGgoJHNhbU5hbWUpID4gMTUg
KQoJewoKCQkjanVzdCBpbiBjYXNlIHRvbyBsb25nCgkJJHNhbU5hbWUgPSBzdWJzdHIoICRzYW1O
YW1lLCAwLCAxNSApOwoJfQoJJG9yaWdzYW1OYW1lID0gJHNhbU5hbWU7CglteSAkZm91bmQgPSAx
OwoJd2hpbGUgKCAkc2VsZi0+X0dldEROKCRzYW1OYW1lKSApCgl7CgkJJHNhbU5hbWUgPSAkb3Jp
Z3NhbU5hbWUgLiAkY291bnQ7CgkJaWYgKCBsZW5ndGgoJHNhbU5hbWUpID4gMTUgKQoJCXsKCQkJ
JHNhbU5hbWUgPSBzdWJzdHIoICRvcmlnc2FtTmFtZSwgMCwgMTUgLSBsZW5ndGgoJGNvdW50KSAp
IC4gJGNvdW50OwoJCX0KCQkkY291bnQrKzsKCX0KCSRzZWxmLT5kZWJ1ZyAmJiBwcmludCAiXG5h
ZGQgcHJpbmNpcGFsXG4iOwoKCSRjcnRwcmluYyA9ICRzZWxmLT57bGRhcH0tPmFkZCgKCQlkbiAg
ID0+ICIkZG4iLAoJCWF0dHIgPT4gWwoJCQlzQU1BY2NvdW50TmFtZSAgICAgICA9PiAkc2FtTmFt
ZSwKCQkJdXNlclByaW5jaXBhbE5hbWUgICAgPT4gImhvc3QvJGZxZG5cQFVNUi5FRFUiLAoJCQlz
ZXJ2aWNlUHJpbmNpcGFsTmFtZSA9PiAiaG9zdC8kZnFkbiIsCgkJCWROU0hvc3ROYW1lICAgICAg
ICAgID0+ICRmcWRuLAoJCQljbiAgICAgICAgICAgICAgICAgICA9PiAkY24sCgkJCW9iamVjdGNs
YXNzICAgICAgICAgID0+CgkJCQlbICd0b3AnLCAncGVyc29uJywgJ29yZ2FuaXphdGlvbmFsUGVy
c29uJywgJ3VzZXInLCAnY29tcHV0ZXInIF0sCgoJCQl1bmljb2RlUHdkICAgICAgICAgPT4gJHNl
bGYtPl9NYWtlVW5pY29kZSgkcHcpLAoJCQl1c2VyQWNjb3VudENvbnRyb2wgPT4gJFVBQ19VTklY
SE9TVF9BQ0NPVU5ULAoJCV0KCSk7CglpZiAoICRjcnRwcmluYy0+Y29kZSApCgl7CgkJJEVycm9y
TXNnID0gImNyZWF0ZSBwcmluY2lwYWwgZmFpbGVkOiAiIC4gJGNydHByaW5jLT5lcnJvciAuICJc
biI7CgkJJHNlbGYtPmRlYnVnICYmIHByaW50ICJDcmVhdGUgcHJpbmMgZmFpbGVkOiAiIC4gJGNy
dHByaW5jLT5lcnJvciAuICJcbiI7CgkJcmV0dXJuICJjcmVhdGUgcHJpbmNpcGFsIGZhaWxlZDog
IiAuICRjcnRwcmluYy0+ZXJyb3IgLiAiXG4iOwoJfQoKCW15ICRyZXMgPSAkc2VsZi0+X01vZGlm
eVVBQ0JpdHMoCgkJdXNlcmlkID0+ICRzYW1OYW1lLAoJCXJlc2V0ICA9PiAkVUFDX1BXX05PVF9S
RVFVSVJFRCwKCSk7CglpZiAoJHJlcykgeyByZXR1cm4gJHJlczsgfQoKCXJldHVybiB1bmRlZjsK
fQoKc3ViIENyZWF0ZV9Vbml4X0hvc3RfTkZTCnsKICAgICAgICBteSAkc2VsZiA9IHNoaWZ0Owog
ICAgICAgIG15ICglaW5mbykgPSBAXzsKICAgICAgICBteSAoICRmcWRuLCAkcHcsICRzYW1OYW1l
LCAkZGlzcE5hbWUsICRjb3VudCwgJG5hbWUgKTsKICAgICAgICBteSAkcmVzOwoKICAgICAgICAk
Y291bnQgPSAxOwogICAgICAgICRmcWRuICA9ICRpbmZve2ZxZG59OwogICAgICAgICRwdyAgICA9
ICRpbmZve3B3fTsKCiAgICAgICAgbXkgJGhuID0gJGZxZG47CiAgICAgICAgJGhuID1+IHN8XC4u
Knx8Z2lvOwoKICAgICAgICAkZGlzcE5hbWUgPSAkZnFkbjsKICAgICAgICAkc2FtTmFtZSAgPSAi
bmZzLSRobiI7CgogICAgICAgIG15ICRjbiA9ICRmcWRuOwogICAgICAgIG15ICRkbiA9ICJDTj0k
Y24sT1U9VW5peEhvc3RzTkZTLERDPXVtcixEQz1lZHUiOwoKICAgICAgICAjLS0tLS0tCiAgICAg
ICAgIyAgTG9vayBmb3IgdGhlIHNBTUFjY291bnROYW1lIGluIEFELgogICAgICAgICMgIElmIGl0
J3MgYWxyZWFkeSBwcmVzZW50IHN0YXJ0IGFkZGluZyBkaWdpdHMgdG8gdGhlIGVuZC4KICAgICAg
ICAjLS0tLS0tCiAgICAgICAgJHNlbGYtPmRlYnVnICYmIHByaW50ICJmcWRuLSAkZnFkblxuIjsK
ICAgICAgICAkc2VsZi0+ZGVidWcgJiYgcHJpbnQgInNhbU5hbWUgLSAkc2FtTmFtZVxuIjsKICAg
ICAgICBpZiAoIGxlbmd0aCgkc2FtTmFtZSkgPiAxNSApCiAgICAgICAgewoKICAgICAgICAgICAg
ICAgICNqdXN0IGluIGNhc2UgdG9vIGxvbmcKICAgICAgICAgICAgICAgICRzYW1OYW1lID0gc3Vi
c3RyKCAkc2FtTmFtZSwgMCwgMTUgKTsKICAgICAgICB9CiAgICAgICAgJG9yaWdzYW1OYW1lID0g
JHNhbU5hbWU7CiAgICAgICAgbXkgJGZvdW5kID0gMTsKICAgICAgICB3aGlsZSAoICRzZWxmLT5f
R2V0RE4oJHNhbU5hbWUpICkKICAgICAgICB7CiAgICAgICAgICAgICAgICAkc2FtTmFtZSA9ICRv
cmlnc2FtTmFtZSAuICRjb3VudDsKICAgICAgICAgICAgICAgIGlmICggbGVuZ3RoKCRzYW1OYW1l
KSA+IDE1ICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHNhbU5h
bWUgPSBzdWJzdHIoICRvcmlnc2FtTmFtZSwgMCwgMTUgLSBsZW5ndGgoJGNvdW50KSApIC4gJGNv
dW50OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJGNvdW50Kys7CiAgICAgICAg
fQogICAgICAgICRzZWxmLT5kZWJ1ZyAmJiBwcmludCAiXG5hZGQgcHJpbmNpcGFsXG4iOwoKICAg
ICAgICAkY3J0cHJpbmMgPSAkc2VsZi0+e2xkYXB9LT5hZGQoCiAgICAgICAgICAgICAgICBkbiAg
ID0+ICIkZG4iLAogICAgICAgICAgICAgICAgYXR0ciA9PiBbCiAgICAgICAgICAgICAgICAgICAg
ICAgIHNBTUFjY291bnROYW1lICAgICAgID0+ICRzYW1OYW1lLAogICAgICAgICAgICAgICAgICAg
ICAgICB1c2VyUHJpbmNpcGFsTmFtZSAgICA9PiAibmZzLyRmcWRuXEBVTVIuRURVIiwKICAgICAg
ICAgICAgICAgICAgICAgICAgc2VydmljZVByaW5jaXBhbE5hbWUgPT4gIm5mcy8kZnFkbiIsCiMg
ICAgICAgICAgICAgICAgICAgICAgICBkTlNIb3N0TmFtZSAgICAgICAgICA9PiAkZnFkbiwKICAg
ICAgICAgICAgICAgICAgICAgICAgY24gICAgICAgICAgICAgICAgICAgPT4gJGNuLAogICAgICAg
ICAgICAgICAgICAgICAgICBvYmplY3RjbGFzcyAgICAgICAgICA9PgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFsgJ3RvcCcsICdwZXJzb24nLCAnb3JnYW5pemF0aW9uYWxQZXJzb24n
LCAndXNlcicsICdjb21wdXRlcicgXSwKCiAgICAgICAgICAgICAgICAgICAgICAgIHVuaWNvZGVQ
d2QgICAgICAgICA9PiAkc2VsZi0+X01ha2VVbmljb2RlKCRwdyksCiAgICAgICAgICAgICAgICAg
ICAgICAgIHVzZXJBY2NvdW50Q29udHJvbCA9PiAkVUFDX1VOSVhIT1NUX0FDQ09VTlQsCiAgICAg
ICAgICAgICAgICBdCiAgICAgICAgKTsKICAgICAgICBpZiAoICRjcnRwcmluYy0+Y29kZSApCiAg
ICAgICAgewogICAgICAgICAgICAgICAgJEVycm9yTXNnID0gImNyZWF0ZSBwcmluY2lwYWwgZmFp
bGVkOiAiIC4gJGNydHByaW5jLT5lcnJvciAuICJcbiI7CiAgICAgICAgICAgICAgICAkc2VsZi0+
ZGVidWcgJiYgcHJpbnQgIkNyZWF0ZSBwcmluYyBmYWlsZWQ6ICIgLiAkY3J0cHJpbmMtPmVycm9y
IC4gIlxuIjsKICAgICAgICAgICAgICAgIHJldHVybiAiY3JlYXRlIHByaW5jaXBhbCBmYWlsZWQ6
ICIgLiAkY3J0cHJpbmMtPmVycm9yIC4gIlxuIjsKICAgICAgICB9CgogICAgICAgIG15ICRyZXMg
PSAkc2VsZi0+X01vZGlmeVVBQ0JpdHMoCiAgICAgICAgICAgICAgICB1c2VyaWQgPT4gJHNhbU5h
bWUsCiAgICAgICAgICAgICAgICByZXNldCAgPT4gJFVBQ19QV19OT1RfUkVRVUlSRUQsCiAgICAg
ICAgKTsKICAgICAgICBpZiAoJHJlcykgeyByZXR1cm4gJHJlczsgfQoKICAgICAgICByZXR1cm4g
dW5kZWY7Cn0KCgojIEJlZ2luLURvYwojIE5hbWU6IERlbGV0ZVVzZXIKIyBUeXBlOiBtZXRob2QK
IyBEZXNjcmlwdGlvbjogRGVsZXRlcyBhIHVzZXJpZCBmcm9tIEFECiMgU3ludGF4OiAkZGVsdXNl
ciA9ICRhZHMtPkRlbGV0ZVVzZXIoIHVzZXJpZCA9PiAkbmFtZSk7CiMgRW5kLURvYwoKc3ViIERl
bGV0ZVVzZXIKewoJbXkgJHNlbGYgPSBzaGlmdDsKCW15ICglaW5mbykgPSBAXzsKCW15ICgkdXBu
KTsKCW15ICR1c2VyaWQgPSAkaW5mb3t1c2VyaWR9IHx8IHJldHVybiAiTmVlZCB0aGUgdXNlcmlk
XG4iOwoJbXkgJGRuID0gJHNlbGYtPl9HZXRETigkdXNlcmlkKTsKCSRkZWx1c3IgPSAkc2VsZi0+
e2xkYXB9LT5kZWxldGUoJGRuKTsKCWlmICggJGRlbHVzci0+Y29kZSApCgl7CgkJcmV0dXJuICJk
ZWxldGUgZmFpbGVkOiAiIC4gJGRlbHVzci0+ZXJyb3IgLiAiXG4iOwoJfQoJcmV0dXJuIHVuZGVm
Owp9CgojIEJlZ2luLURvYwojIE5hbWU6IERlbGV0ZV9Vbml4X0hvc3QKIyBUeXBlOiBtZXRob2QK
IyBEZXNjcmlwdGlvbjogRGVsZXRlcyBhIHVuaXggaG9zdCBwcmluY2lwYWwKIyBTeW50YXg6ICRk
ZWx1c2VyID0gJGFkcy0+RGVsZXRlX1VuaXhfSG9zdCggZnFkbiA9PiAkZnFkbik7CiMgRW5kLURv
YwoKc3ViIERlbGV0ZV9Vbml4X0hvc3QKewoJbXkgJHNlbGYgPSBzaGlmdDsKCW15ICglaW5mbykg
PSBAXzsKCglteSAkZnFkbiA9ICRpbmZve2ZxZG59IHx8IHJldHVybiAiTmVlZCB0aGUgdXNlcmlk
XG4iOwoJbXkgJGhuID0gJGZxZG47CgkkaG4gPX4gc3xcLi4qfHxnaW87CgoJZm9yZWFjaCBteSAk
YmFzZXVzZXIgKCAibmZzLSRobiIsICJob3N0LSRobiIsICJob3N0LSRoblwkIiwgIiRobiIsICIk
aG5cJCIgKQoJewoJCWZvcmVhY2ggbXkgJHN1ZmZpeCAoICIiLCAiMSIsICIyIiApCgkJewoJCQlt
eSAkdXNlcmlkID0gJGJhc2V1c2VyIC4gJHN1ZmZpeDsKCQkJbXkgJGRuICAgICA9ICRzZWxmLT5f
R2V0RE4oJHVzZXJpZCk7CgkJCWlmICgkZG4pCgkJCXsKCQkJCWlmICggJGRuID1+IC9ob3N0L2kg
fHwgJGRuID1+IC9jb21wdXRlcnMvaSApCgkJCQl7CgkJCQkJcHJpbnQgImRuIGZvciAkdXNlcmlk
ID0gJGRuXG4iOwoJCQkJCSRkZWx1c3IgPSAkc2VsZi0+e2xkYXB9LT5kZWxldGUoJGRuKTsKCQkJ
CQlwcmludCAiZGVsZXRlIG9mICR1c2VyaWQ6ICIsICRkZWx1c3ItPmNvZGUsICJcbiI7CgkJCQkJ
aWYgKCAkZGVsdXNyLT5jb2RlICkKCQkJCQl7CgkJCQkJCXByaW50ICJkZWxldGUgZmFpbGVkOiAi
IC4gJGRlbHVzci0+ZXJyb3IgLiAiXG4iOwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCX0KCglteSAk
ZG4gPSAkc2VsZi0+X0dldEhvc3RETigkZnFkbik7CglpZiAoICRkbiAmJiAoICRkbiA9fiAvaG9z
dC9pIHx8ICRkbiA9fiAvY29tcHV0ZXJzL2kgKSApCgl7CgkJcHJpbnQgImRuIGZvciAkZnFkbiA9
ICRkblxuIjsKCQlteSAkZGVsdXNyID0gJHNlbGYtPntsZGFwfS0+ZGVsZXRlKCRkbik7CgkJcHJp
bnQgImRlbGV0ZSBvZiAkdXNlcmlkOiAiLCAkZGVsdXNyLT5jb2RlLCAiXG4iOwoJCWlmICggJGRl
bHVzci0+Y29kZSApCgkJewoJCQlwcmludCAiZGVsZXRlIGZhaWxlZDogIiAuICRkZWx1c3ItPmVy
cm9yIC4gIlxuIjsKCQl9CgoJfQoKCXJldHVybiB1bmRlZjsKfQoKIyBCZWdpbi1Eb2MKIyBOYW1l
OiBfTWFrZVVuaWNvZGUKIyBUeXBlOiBtZXRob2QKIyBEZXNjcmlwdGlvbjogc2ltcGxlIGFzY2lp
IHRvIHVuaWNvZGUvMmJ5dGVjaGFyIGNvbnZlcnNpb24KIyBTeW50YXg6ICR1bmljb2RlID0gJGFk
cy0+X01ha2VVbmljb2RlKCRzdHJpbmcpOwojIEFjY2VzczogaW50ZXJuYWwKIyBFbmQtRG9jCnN1
YiBfTWFrZVVuaWNvZGUKewoJbXkgJHNlbGYgPSBzaGlmdDsKCW15ICggJHN0cmluZywgJHBsYWlu
c3RyaW5nLCAkY2hyICk7Cgkkc3RyaW5nID0gc2hpZnQ7CgoJIwlwcmludCAic3RyaW5nICRzdHJp
bmdcbiI7CgkkcGxhaW5zdHJpbmcgPSAiXCIkc3RyaW5nXCIiOwoKCSMtLS0KCSMgc2ltcGxlIHN0
cmluZz0+dW5pY29kZSBjb252ZXJzaW9uCgkjCglteSBAdG1wID0gKCk7Cglmb3JlYWNoICRjaHIg
KCBzcGxpdCggJycsICRwbGFpbnN0cmluZyApICkKCXsKCQlwdXNoKCBAdG1wLCAkY2hyICk7CgkJ
cHVzaCggQHRtcCwgY2hyKDApICk7Cgl9CgkkdW5pc3RyaW5nID0gam9pbiggIiIsIEB0bXAgKTsK
CgkjCgkjLS0tCglyZXR1cm4gJHVuaXN0cmluZzsKCXByaW50ICIkdW5pc3RyaW5nXG4iOwp9Cgoj
IEJlZ2luLURvYwojIE5hbWU6IEZpbmRQcm94eUhvc3QKIyBUeXBlOiBtZXRob2QKIyBEZXNjcmlw
dGlvbjogRmluZHMgbWFpbGJveCBob3N0IGZvciBhIGdpdmVuIHByb3h5IGFkZHJlc3MKIyBTeW50
YXg6ICRob3N0ID0gJGFkLT5GaW5kUHJveHlIb3N0KCRlbWFpbCkKIyBSZXR1cm5zOiBob3N0bmFt
ZSBpZiBzdWNjZXNzLCBlbHNlIGVycm9yCiMgQ29tbWVudHM6IElmIGFkZHJlc3MgZG9lcyBub3Qg
aGF2ZSBhIHR5cGUgaW4gZnJvbnQgb2YgaXQsIGFzc3VtZXMgc210cAojIEVuZC1Eb2MKCnN1YiBG
aW5kUHJveHlIb3N0CnsKCW15ICRzZWxmID0gc2hpZnQ7CglteSAoJGVtYWlsKSA9IEBfOwoJbXkg
KCAkcmVzLCAkaG9tZVNlcnZlciApOwoJbXkgJGxkYXAgPSAkc2VsZi0+e2xkYXB9OwoKCWlmICgg
JGVtYWlsICF+IC9eW2EtejAtOVwuXSs6L28gKQoJewoJCSRlbWFpbCA9ICJzbXRwOiRlbWFpbCI7
Cgl9CgoJJHJlcyA9ICRzZWxmLT57bGRhcH0tPnNlYXJjaCgKCQliYXNlICAgPT4gJ0RDPXVtcixE
Qz1lZHUnLAoJCXNjb3BlICA9PiAnc3ViJywKCQlmaWx0ZXIgPT4gIih8KHByb3h5QWRkcmVzc2Vz
PSRlbWFpbCkpIiwKCQlhdHRycyAgPT4gWydtc0V4Y2hIb21lU2VydmVyTmFtZSddCgkpOwoJaWYg
KCAkcmVzLT5jb2RlICkKCXsKCQkkc2VsZi0+ZGVidWcgJiYgcHJpbnQgIlNlYXJjaCBmYWlsZWQ6
ICIgLiAkcmVzLT5lcnJvciAuICJcbiI7CgkJJEVycm9yTXNnID0gImNyZWF0ZSBmYWlsZWQ6ICIg
LiAkcmVzLT5lcnJvcjsKCQlyZXR1cm4gdW5kZWY7Cgl9CgoJbXkgQGVudHJpZXMgPSAkcmVzLT5l
bnRyaWVzOwoJZm9yZWFjaCBteSAkZW50cnkgKCAkcmVzLT5lbnRyaWVzICkKCXsKCQkkaG9tZVNl
cnZlciA9ICRlbnRyeS0+Z2V0X3ZhbHVlKCdtc0V4Y2hIb21lU2VydmVyTmFtZScpOwoJfQoKCSRo
b21lU2VydmVyID1+IHMvLipjbj0vL2dpbzsKCWlmICggJGhvbWVTZXJ2ZXIgIX4gL1VNUi1NQUlM
XGQrLyApCgl7CgkJJEVycm9yTXNnID0gInVua25vd24gc2VydmVyIHBhdHRlcm4iOwoJCXJldHVy
biB1bmRlZjsKCX0KCglyZXR1cm4gbGMoJGhvbWVTZXJ2ZXIpOwp9CgojIEJlZ2luLURvYwojIE5h
bWU6IEdldFVzZXJMaXN0CiMgVHlwZTogbWV0aG9kCiMgRGVzY3JpcHRpb246IFJldHVybnMgbGlz
dCBvZiBhbGwgQURTIHVzZXJpZHMKIyBTeW50YXg6IEB1c2VycyA9ICRhZC0+R2V0VXNlckxpc3Qo
KQojIFJldHVybnM6IFJldHVybnMgbGlzdCBvZiBhbGwgQURTIHVzZXJpZHMKIyBFbmQtRG9jCgpz
dWIgR2V0VXNlckxpc3QKewoJbXkgJHNlbGYgPSBzaGlmdDsKCW15ICRsZGFwID0gJHNlbGYtPnts
ZGFwfTsKCW15ICRwYWdlID0gbmV3IE5ldDo6TERBUDo6Q29udHJvbDo6UGFnZWQoIHNpemUgPT4g
JHNlbGYtPntwYWdlc2l6ZX0gKQoJCXx8IHJldHVybiB1bmRlZjsKCW15IEB1c2VycyA9ICgpOwoJ
bXkgJHJlczsKCgl3aGlsZSAoMSkKCXsKCQkkcmVzID0gJHNlbGYtPntsZGFwfS0+c2VhcmNoKAoJ
CQliYXNlICAgID0+ICdEQz11bXIsREM9ZWR1JywKCQkJc2NvcGUgICA9PiAnc3ViJywKCQkJZmls
dGVyICA9PiAiKCYoc0FNQWNjb3VudE5hbWU9KikpIiwKCQkJYXR0cnMgICA9PiBbJ3NBTUFjY291
bnROYW1lJ10sCgkJCWNvbnRyb2wgPT4gWyRwYWdlXSwKCQkpOwoJCWlmICggJHJlcy0+Y29kZSAp
CgkJewoJCQkkc2VsZi0+ZGVidWcgJiYgcHJpbnQgIlNlYXJjaCBmYWlsZWQ6ICIgLiAkcmVzLT5l
cnJvciAuICJcbiI7CgkJCSRFcnJvck1zZyA9ICJjcmVhdGUgZmFpbGVkOiAiIC4gJHJlcy0+ZXJy
b3I7CgkJCXJldHVybiB1bmRlZjsKCQl9CgoJCWZvcmVhY2ggJGVudHJ5ICggJHJlcy0+ZW50cmll
cyApCgkJewoJCQlteSAkc2EgPSBsYyAkZW50cnktPmdldF92YWx1ZSgnc0FNQWNjb3VudE5hbWUn
KTsKCQkJcHVzaCggQHVzZXJzLCAkc2EgKTsKCQl9CgoJCW15ICgkcmVzcCkgPSAkcmVzLT5jb250
cm9sKExEQVBfQ09OVFJPTF9QQUdFRCkgb3IgbGFzdDsKCgkJJGNvb2tpZSA9ICRyZXNwLT5jb29r
aWUgb3IgbGFzdDsKCQkkcGFnZS0+Y29va2llKCRjb29raWUpOwoJfQoKCXJldHVybiBAdXNlcnM7
Cn0KCiMgQmVnaW4tRG9jCiMgTmFtZTogR2V0TXVsdGlDYW1wdXNVc2VyTGlzdAojIFR5cGU6IG1l
dGhvZAojIERlc2NyaXB0aW9uOiBSZXR1cm5zIGxpc3Qgb2YgYWxsIEFEUyB1c2VyaWRzCiMgU3lu
dGF4OiBAdXNlcnMgPSAkYWQtPkdldE11bHRpQ2FtcHVzVXNlckxpc3QoKQojIFJldHVybnM6IFJl
dHVybnMgbGlzdCBvZiBhbGwgQURTIHVzZXJpZHMKIyBFbmQtRG9jCgpzdWIgR2V0TXVsdGlDYW1w
dXNVc2VyTGlzdAp7CiAgICAgICAgbXkgJHNlbGYgPSBzaGlmdDsKICAgICAgICBteSAkbGRhcCA9
ICRzZWxmLT57bGRhcH07CiAgICAgICAgbXkgJHBhZ2UgPSBuZXcgTmV0OjpMREFQOjpDb250cm9s
OjpQYWdlZCggc2l6ZSA9PiAkc2VsZi0+e3BhZ2VzaXplfSApCiAgICAgICAgICAgICAgICB8fCBy
ZXR1cm4gdW5kZWY7CiAgICAgICAgbXkgQHVzZXJzID0gKCk7CiAgICAgICAgbXkgJHJlczsKCiAg
ICAgICAgd2hpbGUgKDEpCiAgICAgICAgewogICAgICAgICAgICAgICAgJHJlcyA9ICRzZWxmLT57
bGRhcH0tPnNlYXJjaCgKICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSAgICA9PiAnT1U9TXVs
dGktQ2FtcHVzLE9VPUFjY291bnRzLERDPXVtcixEQz1lZHUnLAogICAgICAgICAgICAgICAgICAg
ICAgICBzY29wZSAgID0+ICdzdWInLAogICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgID0+
ICIoJihzQU1BY2NvdW50TmFtZT0qKSkiLAogICAgICAgICAgICAgICAgICAgICAgICBhdHRycyAg
ID0+IFsnc0FNQWNjb3VudE5hbWUnXSwKICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbCA9
PiBbJHBhZ2VdLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGlmICggJHJlcy0+
Y29kZSApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLT5k
ZWJ1ZyAmJiBwcmludCAiU2VhcmNoIGZhaWxlZDogIiAuICRyZXMtPmVycm9yIC4gIlxuIjsKICAg
ICAgICAgICAgICAgICAgICAgICAgJEVycm9yTXNnID0gImNyZWF0ZSBmYWlsZWQ6ICIgLiAkcmVz
LT5lcnJvcjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmOwogICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgIGZvcmVhY2ggJGVudHJ5ICggJHJlcy0+ZW50cmllcyAp
CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRzYSA9IGxjICRl
bnRyeS0+Z2V0X3ZhbHVlKCdzQU1BY2NvdW50TmFtZScpOwogICAgICAgICAgICAgICAgICAgICAg
ICBwdXNoKCBAdXNlcnMsICRzYSApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
IG15ICgkcmVzcCkgPSAkcmVzLT5jb250cm9sKExEQVBfQ09OVFJPTF9QQUdFRCkgb3IgbGFzdDsK
CiAgICAgICAgICAgICAgICAkY29va2llID0gJHJlc3AtPmNvb2tpZSBvciBsYXN0OwogICAgICAg
ICAgICAgICAgJHBhZ2UtPmNvb2tpZSgkY29va2llKTsKICAgICAgICB9CgogICAgICAgIHJldHVy
biBAdXNlcnM7Cn0KCgojIEJlZ2luLURvYwojIE5hbWU6IEdldE1haWxib3hVc2VyTGlzdAojIFR5
cGU6IG1ldGhvZAojIERlc2NyaXB0aW9uOiBSZXR1cm5zIGxpc3Qgb2YgYWxsIEFEUyB1c2VyaWRz
IHcvIGV4Y2hhbmdlIG1haWxib3hlcwojIFN5bnRheDogQHVzZXJzID0gJGFkLT5HZXRNYWlsYm94
VXNlckxpc3QoKQojIFJldHVybnM6IFJldHVybnMgbGlzdCBvZiBhbGwgQURTIHVzZXJpZHMKIyBF
bmQtRG9jCgpzdWIgR2V0TWFpbGJveFVzZXJMaXN0CnsKCW15ICRzZWxmID0gc2hpZnQ7CglteSAk
bGRhcCA9ICRzZWxmLT57bGRhcH07CglteSAkcGFnZSA9IG5ldyBOZXQ6OkxEQVA6OkNvbnRyb2w6
OlBhZ2VkKCBzaXplID0+ICRzZWxmLT57cGFnZXNpemV9ICkKCQl8fCByZXR1cm4gdW5kZWY7Cglt
eSBAdXNlcnMgPSAoKTsKCW15ICRyZXM7CgoJd2hpbGUgKDEpCgl7CgkJJHJlcyA9ICRzZWxmLT57
bGRhcH0tPnNlYXJjaCgKCQkJYmFzZSAgICA9PiAnREM9dW1yLERDPWVkdScsCgkJCXNjb3BlICAg
PT4gJ3N1YicsCgkJCWZpbHRlciAgPT4gIigmKG1zRXhjaEhvbWVTZXJ2ZXJOYW1lPSpVTVIqKSki
LAoJCQlhdHRycyAgID0+IFsnc0FNQWNjb3VudE5hbWUnXSwKCQkJY29udHJvbCA9PiBbJHBhZ2Vd
LAoJCSk7CgkJaWYgKCAkcmVzLT5jb2RlICkKCQl7CgkJCSRzZWxmLT5kZWJ1ZyAmJiBwcmludCAi
U2VhcmNoIGZhaWxlZDogIiAuICRyZXMtPmVycm9yIC4gIlxuIjsKCQkJJEVycm9yTXNnID0gIlNl
YXJjaCBmYWlsZWQ6ICIgLiAkcmVzLT5lcnJvcjsKCQkJcmV0dXJuIHVuZGVmOwoJCX0KCgkJZm9y
ZWFjaCAkZW50cnkgKCAkcmVzLT5lbnRyaWVzICkKCQl7CgkJCW15ICRzYSA9IGxjICRlbnRyeS0+
Z2V0X3ZhbHVlKCdzQU1BY2NvdW50TmFtZScpOwoJCQlwdXNoKCBAdXNlcnMsICRzYSApOwoJCX0K
CgkJbXkgKCRyZXNwKSA9ICRyZXMtPmNvbnRyb2woTERBUF9DT05UUk9MX1BBR0VEKSBvciBsYXN0
OwoKCQkkY29va2llID0gJHJlc3AtPmNvb2tpZSBvciBsYXN0OwoJCSRwYWdlLT5jb29raWUoJGNv
b2tpZSk7Cgl9CgoJcmV0dXJuIEB1c2VyczsKfQoKIyBCZWdpbi1Eb2MKIyBOYW1lOiBHZXRBdHRy
aWJ1dGVzCiMgVHlwZTogbWV0aG9kCiMgRGVzY3JpcHRpb246IFJldHVybnMgYWxsIGF0dHJpYnV0
ZXMgYXNzb2NpYXRlZCB3aXRoIGEgdXNlcmlkCiMgU3ludGF4OiAkaW5mbyA9ICRhZC0+R2V0QXR0
cmlidXRlcygkdXNlcmlkLCBbYXR0cmlidXRlcyA9PiBbYXR0cmlibGlzdF0sIFtiYXNlID0+ICJi
YXNlZG4iXSkKIyBSZXR1cm5zOiBoYXNoIHJlZmVyZW5jZSwgZWxlbWVudHMgYXJlIHRoZSBsZGFw
IGtleXMgZm9yIGVhY2ggYXR0cmlidXRlLCB2YWx1ZXMgYXJlIGFycmF5IHJlZmVyZW5jZXMKIyBD
b21tZW50czogSW4gbW9zdCBjYXNlcywgdGhlIGFycmF5IHdpbGwgb25seSBoYXZlIGEgc2luZ2xl
IGVsZW1lbnQsIGluIHNvbWUgdGhlcmUgd2lsbCBiZSBtdWx0aXBsZSBlbGVtZW50cy4KIyBDb21t
ZW50czogY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBsaXN0IG9mIHNwZWNpZmljIGF0dHJpYnV0ZXMg
dG8gcmV0cmlldmUsCiMJb3RoZXJ3aXNlIGl0IHJldHJpZXZlcyBldmVyeXRoaW5nLgojIEVuZC1E
b2MKCnN1YiBHZXRBdHRyaWJ1dGVzCnsKCW15ICRzZWxmICAgPSBzaGlmdDsKCW15ICRsZGFwICAg
PSAkc2VsZi0+e2xkYXB9OwoJbXkgJHVzZXJpZCA9IHNoaWZ0OwoJbXkgKCAkaW5mbywgJHJlcywg
QGVudHJpZXMsICRlbnRyeSwgJGF0dHJpYiApOwoJbXkgJW9wdHMgICAgICAgID0gQF87CglteSAk
d2hpY2hhdHRyaWIgPSAkb3B0c3thdHRyaWJ1dGVzfTsKCW15ICRiYXNlICAgICAgICA9ICRvcHRz
e2Jhc2V9IHx8ICJEQz11bXIsREM9ZWR1IjsKCgkkaW5mbyA9IHt9OwoKCWlmICggIWRlZmluZWQo
JHVzZXJpZCkgKQoJewoJCSRzZWxmLT5kZWJ1ZyAmJiBwcmludCAiTXVzdCBzcGVjaWZ5IHVzZXJp
ZC5cbiI7CgkJJEVycm9yTXNnID0gIm11c3Qgc3BlY2lmeSB1c2VyaWQiOwoJCXJldHVybiB1bmRl
ZjsKCX0KCgkkc2VsZi0+ZGVidWcgJiYgcHJpbnQgIkdldEF0dHJpYnV0ZXMgc2VhcmNoaW5nIGZv
ciAkdXNlcmlkXG4iOwoKCWlmICggIWRlZmluZWQoJHdoaWNoYXR0cmliKSApCgl7CgkJJHJlcyA9
ICRzZWxmLT57bGRhcH0tPnNlYXJjaCgKCQkJYmFzZSAgID0+ICRiYXNlLAoJCQlzY29wZSAgPT4g
J3N1YicsCgkJCWZpbHRlciA9PiAiKCYoc0FNQWNjb3VudE5hbWU9JHVzZXJpZCkpIiwKCQkpOwoJ
fQoJZWxzZQoJewoJCSRyZXMgPSAkc2VsZi0+e2xkYXB9LT5zZWFyY2goCgkJCWJhc2UgICA9PiAk
YmFzZSwKCQkJc2NvcGUgID0+ICdzdWInLAoJCQlmaWx0ZXIgPT4gIigmKHNBTUFjY291bnROYW1l
PSR1c2VyaWQpKSIsCgkJCWF0dHJzICA9PiAkd2hpY2hhdHRyaWIsCgkJKTsKCX0KCWlmICggJHJl
cy0+Y29kZSApCgl7CgkJJHNlbGYtPmRlYnVnICYmIHByaW50ICJTZWFyY2ggZmFpbGVkOiAiIC4g
JHJlcy0+ZXJyb3IgLiAiXG4iOwoJCSRFcnJvck1zZyA9ICJjcmVhdGUgZmFpbGVkOiAiIC4gJHJl
cy0+ZXJyb3I7CgkJcmV0dXJuIHVuZGVmOwoJfQoKCUBlbnRyaWVzID0gJHJlcy0+YWxsX2VudHJp
ZXM7CgkkZW50cnkgICA9IHNoaWZ0KEBlbnRyaWVzKTsKCglpZiAoICFkZWZpbmVkKCRlbnRyeSkg
KQoJewoJCXJldHVybiB1bmRlZjsKCX0KCglmb3JlYWNoIG15ICRhcmVmICggQHsgJGVudHJ5LT57
YXNufS0+e2F0dHJpYnV0ZXN9IH0gKQoJewoJCW15ICRuYW1lICAgPSAkYXJlZi0+e3R5cGV9OwoJ
CW15ICR2YWx1ZXMgPSAkYXJlZi0+e3ZhbHN9OwoKCQkjJHNlbGYtPmRlYnVnICYmIHByaW50ICJn
b3QgJG5hbWUgYXR0cmlidXRlXG4iOwoJCSRpbmZvLT57JG5hbWV9ID0gJHZhbHVlczsKCX0KCgly
ZXR1cm4gJGluZm87Cn0KCiMgQmVnaW4tRG9jCiMgTmFtZTogR2V0RE5BdHRyaWJ1dGVzCiMgVHlw
ZTogbWV0aG9kCiMgRGVzY3JpcHRpb246IFJldHVybnMgYWxsIGF0dHJpYnV0ZXMgYXNzb2NpYXRl
ZCB3aXRoIGEgZG4KIyBTeW50YXg6ICRpbmZvID0gJGFkLT5HZXRETkF0dHJpYnV0ZXMoJGRuLCBb
YXR0cmlidXRlcyA9PiBbYXR0cmlibGlzdF0pCiMgUmV0dXJuczogaGFzaCByZWZlcmVuY2UsIGVs
ZW1lbnRzIGFyZSB0aGUgbGRhcCBrZXlzIGZvciBlYWNoIGF0dHJpYnV0ZSwgdmFsdWVzIGFyZSBh
cnJheSByZWZlcmVuY2VzCiMgQ29tbWVudHM6IEluIG1vc3QgY2FzZXMsIHRoZSBhcnJheSB3aWxs
IG9ubHkgaGF2ZSBhIHNpbmdsZSBlbGVtZW50LCBpbiBzb21lIHRoZXJlIHdpbGwgYmUgbXVsdGlw
bGUgZWxlbWVudHMuCiMgQ29tbWVudHM6IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgbGlzdCBvZiBz
cGVjaWZpYyBhdHRyaWJ1dGVzIHRvIHJldHJpZXZlLAojCW90aGVyd2lzZSBpdCByZXRyaWV2ZXMg
ZXZlcnl0aGluZy4KIyBFbmQtRG9jCgpzdWIgR2V0RE5BdHRyaWJ1dGVzCnsKCW15ICRzZWxmID0g
c2hpZnQ7CglteSAkbGRhcCA9ICRzZWxmLT57bGRhcH07CglteSAkZG4gICA9IHNoaWZ0OwoJbXkg
KCAkaW5mbywgJHJlcywgQGVudHJpZXMsICRlbnRyeSwgJGF0dHJpYiApOwoJbXkgJW9wdHMgICAg
ICAgID0gQF87CglteSAkd2hpY2hhdHRyaWIgPSAkb3B0c3thdHRyaWJ1dGVzfTsKCgkkaW5mbyA9
IHt9OwoKCWlmICggIWRlZmluZWQoJGRuKSApCgl7CgkJJHNlbGYtPmRlYnVnICYmIHByaW50ICJN
dXN0IHNwZWNpZnkgZG4uXG4iOwoJCSRFcnJvck1zZyA9ICJtdXN0IHNwZWNpZnkgZG4iOwoJCXJl
dHVybiB1bmRlZjsKCX0KCgkkc2VsZi0+ZGVidWcgJiYgcHJpbnQgIkdldEF0dHJpYnV0ZXMgc2Vh
cmNoaW5nIGZvciAkZG5cbiI7CgoJaWYgKCAhZGVmaW5lZCgkd2hpY2hhdHRyaWIpICkKCXsKCQkk
cmVzID0gJHNlbGYtPntsZGFwfS0+c2VhcmNoKAoJCQliYXNlICAgPT4gJGRuLAoJCQlzY29wZSAg
PT4gJ2Jhc2UnLAoJCQlmaWx0ZXIgPT4gIihvYmplY3RDbGFzcz0qKSIsCgkJKTsKCX0KCWVsc2UK
CXsKCQkkcmVzID0gJHNlbGYtPntsZGFwfS0+c2VhcmNoKAoJCQliYXNlICAgPT4gJGRuLAoJCQlz
Y29wZSAgPT4gJ2Jhc2UnLAoJCQlmaWx0ZXIgPT4gIihvYmplY3RDbGFzcz0qKSIsCgkJCWF0dHJz
ICA9PiAkd2hpY2hhdHRyaWIsCgkJKTsKCX0KCWlmICggJHJlcy0+Y29kZSApCgl7CgkJJHNlbGYt
PmRlYnVnICYmIHByaW50ICJTZWFyY2ggZmFpbGVkOiAiIC4gJHJlcy0+ZXJyb3IgLiAiXG4iOwoJ
CSRFcnJvck1zZyA9ICJjcmVhdGUgZmFpbGVkOiAiIC4gJHJlcy0+ZXJyb3I7CgkJcmV0dXJuIHVu
ZGVmOwoJfQoKCUBlbnRyaWVzID0gJHJlcy0+YWxsX2VudHJpZXM7CgkkZW50cnkgICA9IHNoaWZ0
KEBlbnRyaWVzKTsKCglpZiAoICFkZWZpbmVkKCRlbnRyeSkgKQoJewoJCXJldHVybiB1bmRlZjsK
CX0KCglmb3JlYWNoIG15ICRhcmVmICggQHsgJGVudHJ5LT57YXNufS0+e2F0dHJpYnV0ZXN9IH0g
KQoJewoJCW15ICRuYW1lICAgPSAkYXJlZi0+e3R5cGV9OwoJCW15ICR2YWx1ZXMgPSAkYXJlZi0+
e3ZhbHN9OwoKCQkjJHNlbGYtPmRlYnVnICYmIHByaW50ICJnb3QgJG5hbWUgYXR0cmlidXRlXG4i
OwoJCSRpbmZvLT57JG5hbWV9ID0gJHZhbHVlczsKCX0KCglyZXR1cm4gJGluZm87Cn0KCiMgQmVn
aW4tRG9jCiMgTmFtZTogR2V0QXR0cmlidXRlc01hdGNoCiMgVHlwZTogbWV0aG9kCiMgRGVzY3Jp
cHRpb246IFJldHVybnMgYWxsIGF0dHJpYnV0ZXMgZm9yIHVzZXJpZHMgbWF0Y2hpbmcgYSBmaWx0
ZXIKIyBTeW50YXg6ICRpbmZvID0gJGFkLT5HZXRBdHRyaWJ1dGVzTWF0Y2goJGZpbHRlciwgW2F0
dHJpYnV0ZXMgPT4gW2F0dHJpYmxpc3RdLCBbYmFzZSA9PiAkc2VhcmNoYmFzZV0pCiMgUmV0dXJu
czogcmVmIHRvIGFycmF5IG9mIGhhc2ggcmVmcywgZWxlbWVudHMgYXJlIHRoZSBsZGFwIGtleXMg
Zm9yIGVhY2ggYXR0cmlidXRlLCB2YWx1ZXMgYXJlIGFycmF5IHJlZmVyZW5jZXMKIyBDb21tZW50
czogSW4gbW9zdCBjYXNlcywgdGhlIGFycmF5IHdpbGwgb25seSBoYXZlIGEgc2luZ2xlIGVsZW1l
bnQsIGluIHNvbWUgdGhlcmUgd2lsbCBiZSBtdWx0aXBsZSBlbGVtZW50cy4KIyBDb21tZW50czog
Y2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBsaXN0IG9mIHNwZWNpZmljIGF0dHJpYnV0ZXMgdG8gcmV0
cmlldmUsCiMJb3RoZXJ3aXNlIGl0IHJldHJpZXZlcyBldmVyeXRoaW5nLgojIENvbW1lbnRzOiBm
aWx0ZXIgaXMgYW4gbGRhcCBzZWFyY2ggc3RyaW5nCiMgRW5kLURvYwoKc3ViIEdldEF0dHJpYnV0
ZXNNYXRjaAp7CglteSAkc2VsZiAgID0gc2hpZnQ7CglteSAkbGRhcCAgID0gJHNlbGYtPntsZGFw
fTsKCW15ICRmaWx0ZXIgPSBzaGlmdDsKCW15ICggJGluZm8sICRyZXMsIEBlbnRyaWVzLCAkZW50
cnksICRhdHRyaWIgKTsKCW15ICVvcHRzICAgICAgICA9IEBfOwoJbXkgJHdoaWNoYXR0cmliID0g
JG9wdHN7YXR0cmlidXRlc307CglteSAkbWF4cmVjb3JkcyAgPSAkb3B0c3ttYXhyZWNvcmRzfTsK
CW15ICRiYXNlICAgICAgICA9ICRvcHRze2Jhc2V9IHx8ICJEQz11bXIsREM9ZWR1IjsKCW15ICRw
YWdlICAgICAgICA9IG5ldyBOZXQ6OkxEQVA6OkNvbnRyb2w6OlBhZ2VkKCBzaXplID0+ICRzZWxm
LT57cGFnZXNpemV9ICkKCQl8fCByZXR1cm4gdW5kZWY7CglteSAkY29va2llOwoKCSRpbmZvID0g
e307CgoJaWYgKCAhZGVmaW5lZCgkZmlsdGVyKSApCgl7CgkJJHNlbGYtPmRlYnVnICYmIHByaW50
ICJNdXN0IHNwZWNpZnkgZmlsdGVyLlxuIjsKCQkkRXJyb3JNc2cgPSAibXVzdCBzcGVjaWZ5IGZp
bHRlciI7CgkJcmV0dXJuIHVuZGVmOwoJfQoKCSRzZWxmLT5kZWJ1ZyAmJiBwcmludCAiVXNpbmcg
ZmlsdGVyID0gJGZpbHRlclxuIjsKCglpZiAoICRtYXhyZWNvcmRzID4gMCAmJiAkbWF4cmVjb3Jk
cyA8ICRzZWxmLT57cGFnZXNpemV9ICkKCXsKCQkkc2VsZi0+ZGVidWcgJiYgcHJpbnQgIlVzaW5n
IG1heCByZWNvcmRzID0gJG1heHJlY29yZHNcbiI7CgoJCSRwYWdlID0gbmV3IE5ldDo6TERBUDo6
Q29udHJvbDo6UGFnZWQoIHNpemUgPT4gJG1heHJlY29yZHMgKQoJCQl8fCByZXR1cm4gdW5kZWY7
Cgl9CgoJbXkgJG1hdGNoZXMgPSBbXTsKCW15ICRjb3VudCAgID0gMDsKCXdoaWxlICgxKQoJewoJ
CWxhc3QgaWYgKCAkbWF4cmVjb3JkcyAhPSAwICYmICRjb3VudCA+PSAkbWF4cmVjb3JkcyApOwoK
CQlteSAlcGFyYW1zID0gKAoJCQliYXNlICAgID0+ICRiYXNlLAoJCQlzY29wZSAgID0+ICdzdWIn
LAoJCQlmaWx0ZXIgID0+ICRmaWx0ZXIsCgkJCWNvbnRyb2wgPT4gWyRwYWdlXSwKCQkpOwoKCQlp
ZiAoIGRlZmluZWQoJHdoaWNoYXR0cmliKSApCgkJewoJCQkkcGFyYW1ze2F0dHJzfSA9ICR3aGlj
aGF0dHJpYjsKCQl9CgkJaWYgKCAkbWF4cmVjb3JkcyA+IDAgKQoJCXsKCQkJJHNlbGYtPmRlYnVn
ICYmIHByaW50ICJzaXplbGltaXQgPSAkbWF4cmVjb3Jkc1xuIjsKCQkJJHBhcmFtc3tzaXplbGlt
aXR9ID0gJG1heHJlY29yZHM7CgkJfQoJCSRyZXMgPSAkc2VsZi0+e2xkYXB9LT5zZWFyY2goJXBh
cmFtcyk7CgkJaWYgKCAkcmVzLT5jb2RlICkKCQl7CgkJCSRzZWxmLT5kZWJ1ZyAmJiBwcmludCAi
U2VhcmNoIGZhaWxlZDogIiAuICRyZXMtPmVycm9yIC4gIlxuIjsKCQkJJEVycm9yTXNnID0gIlNl
YXJjaCBmYWlsZWQ6ICIgLiAkcmVzLT5lcnJvcjsKCQkJcmV0dXJuIHVuZGVmOwoJCX0KCgkJZm9y
ZWFjaCAkZW50cnkgKCAkcmVzLT5lbnRyaWVzICkKCQl7CgkJCW15ICRpbmZvID0ge307CgkJCSRj
b3VudCsrOwoKCQkJJHNlbGYtPmRlYnVnICYmIHByaW50ICJnb3QgZW50cnlcbiI7CgkJCWZvcmVh
Y2ggbXkgJGFyZWYgKCBAeyAkZW50cnktPnthc259LT57YXR0cmlidXRlc30gfSApCgkJCXsKCQkJ
CW15ICRuYW1lICAgPSAkYXJlZi0+e3R5cGV9OwoJCQkJbXkgJHZhbHVlcyA9ICRhcmVmLT57dmFs
c307CgoJCQkJJGluZm8tPnskbmFtZX0gPSAkdmFsdWVzOwoKCQkJfQoJCQlwdXNoKCBAJG1hdGNo
ZXMsICRpbmZvICk7CgkJfQoKCQlteSAoJHJlc3ApID0gJHJlcy0+Y29udHJvbChMREFQX0NPTlRS
T0xfUEFHRUQpIG9yIGxhc3Q7CgoJCSRjb29raWUgPSAkcmVzcC0+Y29va2llIG9yIGxhc3Q7CgkJ
JHBhZ2UtPmNvb2tpZSgkY29va2llKTsKCX0KCXJldHVybiAkbWF0Y2hlczsKfQoKIyBCZWdpbi1E
b2MKIyBOYW1lOiBTZXRBdHRyaWJ1dGVzCiMgVHlwZTogbWV0aG9kCiMgRGVzY3JpcHRpb246ICBT
ZXRzIGEgbGlzdCBvZiBhdHRyaWJ1dGVzIGZvciBhIHVzZXJpZAojIFN5bnRheDogICRyZXMgPSAk
ZXgtPlNldEF0dHJpYnV0ZXMoCiMJCQl1c2VyaWQgPT4gIm1pbmVyIiwKIwkJCWF0dHJpYnV0ZXMg
PT4gJGluZm8pOwojIFJldHVybnM6IHVuZGVmIGlzIHN1Y2Nlc3NmdWwgb3RoZXJ3aXNlIHRoZSBl
cnJvcgojIENvbW1lbnRzOiAkaW5mbyBzaG91bGQgYmUgYXJyYXkgcmVmIGNvbnRhaW5pbmcgWyBh
dHRyaWIgPT4gdmFsLCAuLi4gXQojIHZhbHVlcyBzaG91bGQgZWl0aGVyIGJlIHNjYWxhcnMsIG9y
IHNob3VsZCBiZSByZWZlcmVuY2VzIHRvIGFycmF5cyBvZiBzY2FsYXJzCiMgRW5kLURvYwpzdWIg
U2V0QXR0cmlidXRlcwp7CglteSAkc2VsZiA9IHNoaWZ0OwoJbXkgKCVpbmZvKSA9IEBfOwoJbXkg
KCAkdXNlcmlkLCAkY2hhbmdlcywgJHVwbiwgJGRuICk7CgoJJHVzZXJpZCA9ICRpbmZve3VzZXJp
ZH0gfHwgcmV0dXJuICJuZWVkIGEgdXNlcmlkXG4iOwoJJGF0dHJpYnV0ZXMgPSAkaW5mb3thdHRy
aWJ1dGVzfQoJCXx8IHJldHVybiAibmVlZCBsaXN0IG9mIGF0dHJpYnV0ZXMgdG8gY2hhbmdlXG4i
OwoKCSRkbiA9ICRzZWxmLT5fR2V0RE4oJHVzZXJpZCk7Cgkkc2VsZi0+ZGVidWcgJiYgcHJpbnQg
ImRuIGlzICRkblxuIjsKCSRzZWxmLT5kZWJ1ZyAmJiBwcmludCAidXNlcmlkIGlzICR1c2VyaWRc
biI7CgoJJHJlcyA9ICRzZWxmLT57bGRhcH0tPm1vZGlmeSgKCQlkbiAgICAgID0+ICRkbiwKCQlj
aGFuZ2VzID0+IFsgcmVwbGFjZSA9PiAkYXR0cmlidXRlcyBdCgkpOwoKCWlmICggJHJlcy0+Y29k
ZSApCgl7CgkJJEVycm9yTXNnID0gImF0dHJpYnV0ZSBzZXQgZmFpbGVkOiAiIC4gJHJlcy0+ZXJy
b3I7CgkJcmV0dXJuICJhdHRyaWJ1dGUgc2V0IGZhaWxlZDogIiAuICRyZXMtPmVycm9yIC4gIlxu
IjsKCX0KCXJldHVybiB1bmRlZjsKfQoKIyBCZWdpbi1Eb2MKIyBOYW1lOiBDb252ZXJ0VGltZQoj
IERlc2NyaXB0aW9uOiBDb252ZXJ0cyBhIEFEUyBGaWxlVGltZSB2YWx1ZSB0byB1bml4IHRpbWVz
dGFtcAojIFN5bnRheDogJHRpbWVzdGFtcCA9ICRhZHMtPkNvbnZlcnRUaW1lKCR2YWx1ZSk7CiMg
RW5kLURvYwpzdWIgQ29udmVydFRpbWUKewoJbXkgJHNlbGYgPSBzaGlmdDsKCW15ICR0aW1lID0g
c2hpZnQ7CglteSAoICRzZWNzLCAkbnNlY3MgKTsKCgkjIGNvbnZlcnQgZnJvbSAxMDAtbmFub3Nl
Y29uZCBpbnRlcnZhbHMgdG8gMS1zZWMgaW50ZXJ2YWxzCgkkbnNlY3MgPSBuZXcgTWF0aDo6Qmln
SW50ICR0aW1lOwoJJHNlY3MgID0gbmV3IE1hdGg6OkJpZ0ludCAkbnNlY3MtPmJkaXYoMTBfMDAw
XzAwMCk7CgoJIyBzdWJ0cmFjdCBiYXNlIChzZWNvbmRzIGZyb20gMTYwMSB0byAxOTcwKQoJJHNl
Y3MgPSAkc2Vjcy0+YnN1YigiMTE2NDQ0NzM2MDAiKTsKCglyZXR1cm4gaW50KCRzZWNzKTsKfQoK
IyBCZWdpbi1Eb2MKIyBOYW1lOiBEdW1wTERJRgojIFR5cGU6IG1ldGhvZAojIERlc2NyaXB0aW9u
OiBEdW1wcyBsZGFwIGluZm8gdG8gYW4gTERJRiBmb3JtYXQgZmlsZQojIFN5bnRheDogJGFkLT5E
dW1wTERJRigkZmgsICVvcHRpb25zKQojIENvbW1lbnRzOiBEb24ndCB1c2UgdGhpcyB5ZXQuLi4g
T3B0aW9ucyB3aWxsIGV2ZW50dWFsbHkgYWxsb3cgc3BlY2lmeWluZyBsaXN0IG9mCiMgYXR0cmli
dXRlcywgYW5kIGEgZGlmZmVyZW50IGZpbHRlciBzdHJpbmcsIGV0Yy4KIyBFbmQtRG9jCgpzdWIg
RHVtcExESUYKewoJbXkgJHNlbGYgPSBzaGlmdDsKCW15ICRsZGFwID0gJHNlbGYtPntsZGFwfTsK
CW15ICRwYWdlID0gbmV3IE5ldDo6TERBUDo6Q29udHJvbDo6UGFnZWQoIHNpemUgPT4gJHNlbGYt
PntwYWdlc2l6ZX0gKQoJCXx8IHJldHVybiB1bmRlZjsKCW15ICRmaCAgICAgID0gc2hpZnQ7Cglt
eSAlb3B0aW9ucyA9IEBfOwoJbXkgJHJlczsKCW15ICRjb3VudDsKCglteSAkbGRpZiA9IE5ldDo6
TERBUDo6TERJRi0+bmV3KCAkZmgsICJ3Iiwgb25lcnJvciA9PiAndW5kZWYnICk7CgoJIyBEb24n
dCB3cmFwCgkkbGRpZi0+e3dyYXB9ID0gMDsKCgkkY291bnQgPSAwOwoJd2hpbGUgKDEpCgl7CgkJ
bXkgJXBhcmFtcyA9ICgKCQkJYmFzZSAgICA9PiAnREM9dW1yLERDPWVkdScsCgkJCXNjb3BlICAg
PT4gJ3N1YicsCgkJCWNvbnRyb2wgPT4gWyRwYWdlXSwKCQkpOwoJCWlmICggJG9wdGlvbnN7Zmls
dGVyfSApCgkJewoJCQkkcGFyYW1ze2ZpbHRlcn0gPSAkb3B0aW9uc3tmaWx0ZXJ9OwoJCX0KCQll
bHNlCgkJewoJCQkkcGFyYW1ze2ZpbHRlcn0gPSAiKCYoZGlzdGluZ3Vpc2hlZE5hbWU9KikpIjsK
CQl9CgkJaWYgKCAkb3B0aW9uc3thdHRyc30gKQoJCXsKCQkJJHBhcmFtc3thdHRyc30gPSAkb3B0
aW9uc3thdHRyc307CgkJfQoJCSRyZXMgPSAkc2VsZi0+e2xkYXB9LT5zZWFyY2goJXBhcmFtcyk7
CgoJCWlmICggJHJlcy0+Y29kZSApCgkJewoJCQkkc2VsZi0+ZGVidWcgJiYgcHJpbnQgIlNlYXJj
aCBmYWlsZWQ6ICIgLiAkcmVzLT5lcnJvciAuICJcbiI7CgkJCSRFcnJvck1zZyA9ICJTZWFyY2gg
ZmFpbGVkOiAiIC4gJHJlcy0+ZXJyb3I7CgkJCXJldHVybiB1bmRlZjsKCQl9CgoJCWZvcmVhY2gg
JGVudHJ5ICggJHJlcy0+ZW50cmllcyApCgkJewoJCQlteSAkZG4gPSAkZW50cnktPmdldF92YWx1
ZShkaXN0aW5ndWlzaGVkTmFtZSk7CgkJCSRsZGlmLT53cml0ZV9lbnRyeSgkZW50cnkpOwoJCQkk
Y291bnQrKzsKCQkJaWYgKCAkY291bnQgJSA1MCA9PSAwICkKCQkJewoJCQkJcHJpbnQgJGNvdW50
LCAiXG4iOwoJCQl9CgkJfQoKCQlteSAoJHJlc3ApID0gJHJlcy0+Y29udHJvbChMREFQX0NPTlRS
T0xfUEFHRUQpIG9yIGxhc3Q7CgoJCSRjb29raWUgPSAkcmVzcC0+Y29va2llIG9yIGxhc3Q7CgkJ
JHBhZ2UtPmNvb2tpZSgkY29va2llKTsKCX0KCgkkbGRpZi0+ZG9uZTsKfQoKIyBCZWdpbi1Eb2MK
IyBOYW1lOiBDaGVja1Bhc3N3b3JkCiMgVHlwZTogbWV0aG9kCiMgRGVzY3JpcHRpb246IEF0dGVt
cHRzIHRvIHZhbGlkYXRlIGFuIEFEUyBwYXNzd29yZAojIFN5bnRheDogJHJlcyA9ICRhZC0+Q2hl
Y2tQYXNzd29yZCgkdXNlcmlkLCAkcGFzc3dvcmQpCiMgQ29tbWVudHM6IEFjdHVhbGx5IGF0dGVt
cHRzIHRvIGJpbmQgdG8gQURTIHdpdGggdGhhdCB1c2VyIGFuZCBwYXNzd29yZCwgYW5kIHJldHVy
bnMKIyBub24temVybyBpZiBpdCBjYW5ub3QuCiMgRW5kLURvYwpzdWIgQ2hlY2tQYXNzd29yZAp7
CglteSAkc2VsZiA9IHNoaWZ0OwoJbXkgKCAkdXNlcmlkLCAkcGFzc3dvcmQgKSA9IEBfOwoJbXkg
JHRtcGFkOwoKCWlmICggISR1c2VyaWQgfHwgISRwYXNzd29yZCApCgl7CgkJcmV0dXJuIDE7Cgl9
CgoJJHRtcGFkID0gbmV3IFVNUjo6U3lzUHJvZzo6QURTT2JqZWN0KAoJCXVzZXIgICAgID0+ICR1
c2VyaWQsCgkJcGFzc3dvcmQgPT4gJHBhc3N3b3JkCgkpOwoKCWlmICgkdG1wYWQpCgl7CgkJcmV0
dXJuIDA7Cgl9CgllbHNlCgl7CgkJcmV0dXJuIDE7Cgl9Cn0KCiMgQmVnaW4tRG9jCiMgTmFtZTog
RW5hYmxlQWNjb3VudAojIFR5cGU6IG1ldGhvZAojIERlc2NyaXB0aW9uOiBFbmFibGVzIHVzZXIg
YWNjb3VudAojIFN5bnRheDogICRyZXMgPSAkZXgtPkVuYWJsZUFjY291bnQoJHVzZXJpZCkKIyBS
ZXR1cm5zOiB1bmRlZiBpZiBzdWNjZXNzZnVsIG90aGVyd2lzZSB0aGUgZXJyb3IKIyBBY2Nlc3M6
IHB1YmxpYwojIEVuZC1Eb2MKc3ViIEVuYWJsZUFjY291bnQKewoJbXkgJHNlbGYgICA9IHNoaWZ0
OwoJbXkgJHVzZXJpZCA9IHNoaWZ0OwoKCXJldHVybiAiaW52YWxpZCB1c2VyaWQiIGlmICggIWRl
ZmluZWQoJHVzZXJpZCkgKTsKCXJldHVybiAkc2VsZi0+X01vZGlmeVVBQ0JpdHMoCgkJdXNlcmlk
ID0+ICR1c2VyaWQsCgkJc2V0ICAgID0+ICRVQUNfSU5JVElBTElaRUQsCgkJcmVzZXQgID0+ICRV
QUNfRElTQUJMRUQKCSk7Cn0KCiMgQmVnaW4tRG9jCiMgTmFtZTogRGlzYWJsZUFjY291bnQKIyBU
eXBlOiBtZXRob2QKIyBEZXNjcmlwdGlvbjogRGlzYWJsZXMgdXNlciBhY2NvdW50CiMgU3ludGF4
OiAgJHJlcyA9ICRleC0+RGlzYWJsZXNBY2NvdW50KCR1c2VyaWQpCiMgUmV0dXJuczogdW5kZWYg
aWYgc3VjY2Vzc2Z1bCBvdGhlcndpc2UgdGhlIGVycm9yCiMgQWNjZXNzOiBwdWJsaWMKIyBFbmQt
RG9jCnN1YiBEaXNhYmxlQWNjb3VudAp7CglteSAkc2VsZiAgID0gc2hpZnQ7CglteSAkdXNlcmlk
ID0gc2hpZnQ7CgoJcmV0dXJuICJpbnZhbGlkIHVzZXJpZCIgaWYgKCAhZGVmaW5lZCgkdXNlcmlk
KSApOwoJcmV0dXJuICRzZWxmLT5fTW9kaWZ5VUFDQml0cygKCQl1c2VyaWQgPT4gJHVzZXJpZCwK
CQlzZXQgICAgPT4gJFVBQ19ESVNBQkxFRAoJKTsKfQoKIyBCZWdpbi1Eb2MKIyBOYW1lOiBHZXRV
c2VyQWNjb3VudENvbnRyb2wKIyBEZXNjcmlwdGlvbjogRmV0Y2hlcyB0aGUgY29udGVudHMgb2Yg
dGhlIHVzZXJBY2NvdW50Q29udHJvbCBhdHRyaWJ1dGUgZm9yIGEgdXNlcgojIFN5bnRheDogJHJl
cyA9ICRleC0+R2V0VXNlckFjY291bnRDb250cm9sKCR1c2VyaWQpOwojIFJldHVybnM6IGludGVn
ZXIgd2l0aCBjb250ZW50cyBvZiBhdHRyaWJ1dGUKIyBFbmQtRG9jCnN1YiBHZXRVc2VyQWNjb3Vu
dENvbnRyb2wKewoJbXkgJHNlbGYgICA9IHNoaWZ0OwoJbXkgJHVzZXJpZCA9IHNoaWZ0IHx8IHJl
dHVybiAibXVzdCBzcGVjaWZ5IHVzZXJpZCI7CgoJbXkgJGluZm8gPQoJCSRzZWxmLT5HZXRBdHRy
aWJ1dGVzKCAkdXNlcmlkLCBhdHRyaWJ1dGVzID0+IFt1c2VyQWNjb3VudENvbnRyb2xdICk7Cglp
ZiAoIGRlZmluZWQoJGluZm8pICkKCXsKCQlteSAoJHVhYykgPSBAeyAkaW5mby0+e3VzZXJBY2Nv
dW50Q29udHJvbH0gfTsKCQlyZXR1cm4gaW50KCR1YWMpOwoJfQoJcmV0dXJuIHVuZGVmOwp9Cgoj
IEJlZ2luLURvYwojIE5hbWU6IFBhcnNlVXNlckFjY291bnRDb250cm9sCiMgRGVzY3JpcHRpb246
IEV4cGxhaW5zIGNvbnRlbnRzIG9mIFVBQyBiaXRzCiMgU3ludGF4OiBAaW5mbyA9ICRleC0+UGFy
c2VVc2VyQWNjb3VudENvbnRyb2woJHVhYyk7CiMgUmV0dXJuczogYXJyYXkgb2Ygc3RyaW5ncyBl
eHBsYWluaW5nIGJpdHMgdGhhdCBhcmUgc2V0IGFuZCBjbGVhcmVkCiMgRW5kLURvYwpzdWIgUGFy
c2VVc2VyQWNjb3VudENvbnRyb2wKewoJbXkgJHNlbGYgPSBzaGlmdDsKCW15ICR1YWMgID0gc2hp
ZnQ7CglteSBAcmVzICA9ICgpOwoKCWZvcmVhY2ggbXkgJGJpdHJlZiAoQCRVQUNfQklUX0lORk8p
Cgl7CgkJbXkgKCAkYml0LCAkaWZubywgJGlmeWVzICkgPSBAeyRiaXRyZWZ9OwoJCWlmICggKCAk
dWFjICYgJGJpdCApICYmICRpZnllcyBuZSAiIiApCgkJewoJCQlwdXNoKCBAcmVzLCAkaWZ5ZXMg
KTsKCQl9CgkJZWxzaWYgKCAhKCAkdWFjICYgJGJpdCApICYmICRpZm5vIG5lICIiICkKCQl7CgkJ
CXB1c2goIEByZXMsICRpZm5vICk7CgkJfQoJfQoKCXJldHVybiBAcmVzOwp9CgojIEJlZ2luLURv
YwojIE5hbWU6IFBhcnNlR3JvdXBUeXBlCiMgRGVzY3JpcHRpb246IEV4cGxhaW5zIGNvbnRlbnRz
IG9mIEdyb3VwVHlwZSBiaXRzCiMgU3ludGF4OiBAaW5mbyA9ICRleC0+UGFyc2VHcm91cFR5cGUo
JGd0KTsKIyBSZXR1cm5zOiBhcnJheSBvZiBzdHJpbmdzIGV4cGxhaW5pbmcgYml0cyB0aGF0IGFy
ZSBzZXQgYW5kIGNsZWFyZWQKIyBFbmQtRG9jCnN1YiBQYXJzZUdyb3VwVHlwZQp7CglteSAkc2Vs
ZiA9IHNoaWZ0OwoJbXkgJHVhYyAgPSBzaGlmdDsKCW15IEByZXMgID0gKCk7CgoJZm9yZWFjaCBt
eSAkYml0cmVmIChAJEdUWVBFX0JJVF9JTkZPKQoJewoJCW15ICggJGJpdCwgJGlmbm8sICRpZnll
cyApID0gQHskYml0cmVmfTsKCQlpZiAoICggJHVhYyAmICRiaXQgKSAmJiAkaWZ5ZXMgbmUgIiIg
KQoJCXsKCQkJcHVzaCggQHJlcywgJGlmeWVzICk7CgkJfQoJCWVsc2lmICggISggJHVhYyAmICRi
aXQgKSAmJiAkaWZubyBuZSAiIiApCgkJewoJCQlwdXNoKCBAcmVzLCAkaWZubyApOwoJCX0KCX0K
CglyZXR1cm4gQHJlczsKfQoKIyBCZWdpbi1Eb2MKIyBOYW1lOiBQYXJzZUFjY291bnRUeXBlCiMg
RGVzY3JpcHRpb246IEV4cGxhaW5zIGNvbnRlbnRzIG9mIFNBTUFjY291bnRUeXBlIGJpdHMKIyBT
eW50YXg6IEBpbmZvID0gJGV4LT5QYXJzZUFjY291bnRUeXBlKCRndCk7CiMgUmV0dXJuczogYXJy
YXkgb2Ygc3RyaW5ncyBleHBsYWluaW5nIGJpdHMgdGhhdCBhcmUgc2V0IGFuZCBjbGVhcmVkCiMg
RW5kLURvYwpzdWIgUGFyc2VBY2NvdW50VHlwZQp7CglteSAkc2VsZiA9IHNoaWZ0OwoJbXkgJHNh
dCAgPSBzaGlmdDsKCW15IEByZXMgID0gKCk7CgoJZm9yZWFjaCBteSAkdmFscmVmIChAJEFUWVBF
X1ZBTFMpCgl7CgkJbXkgKCAkdmFsLCAkbGFiZWwgKSA9IEB7JHZhbHJlZn07CgkJaWYgKCAkc2F0
ID09ICR2YWwgKQoJCXsKCQkJcmV0dXJuICRsYWJlbDsKCQl9Cgl9CgoJcmV0dXJuICJVbmtub3du
IjsKfQoKIyBCZWdpbi1Eb2MKIyBOYW1lOiBQYXJzZVByb3RvY29sU2V0dGluZ3MKIyBEZXNjcmlw
dGlvbjogRXhwbGFpbnMgY29udGVudHMgb2YgcHJvdG9jb2xTZXR0aW5ncyBmaWVsZAojIFN5bnRh
eDogQGluZm8gPSAkZXgtPlBhcnNlUHJvdG9jb2xTZXR0aW5ncygkdmFsKQojIFJldHVybnM6IGFy
cmF5IG9mIHN0cmluZ3MgZXhwbGFpbmluZyBzZXR0aW5ncwojIEVuZC1Eb2MKc3ViIFBhcnNlUHJv
dG9jb2xTZXR0aW5ncwp7CglteSAkc2VsZiA9IHNoaWZ0OwoJbXkgJHBzICAgPSBzaGlmdDsKCW15
IEByZXMgID0gKCk7CgoJIwlmb3JlYWNoIG15ICRieXRlICggc3BsaXQoJycsICRwcykgKQoJIwl7
CgkjICAgICAgICAgICAgICAgIG15ICRjaCA9IHVucGFjayggIkMiLCAkYnl0ZSApOwoJIwkJcHVz
aChAcmVzLCAiPEJSPlsiLiBzcHJpbnRmKCIlLjJYIiwgJGNoKS4iLyRjaF0gIiAuIGNocigkY2gp
KTsKCSMJfQoKCW15ICggJHR5cGUsIEBzdWJmaWVsZHMgKSA9IHNwbGl0KCAvXHhDMlx4QTcvLCAk
cHMgKTsKCWlmICggJHR5cGUgZXEgIlBPUDMiICkKCXsKCQlteSAoICRlbmFibGUsICRkZWZhdWx0
cywgJG1pbWUsICRjaGFyc2V0LCAkcmljaHRleHQsIEBvdGhlcnMgKSA9CgkJCUBzdWJmaWVsZHM7
CgoJCWlmICggJGVuYWJsZSA9PSAxICkgeyBwdXNoKCBAcmVzLCAiUE9QMy1FbmFibGVkIiApOyB9
CgkJZWxzZSB7IHB1c2goIEByZXMsICJQT1AzLURpc2FibGVkIiApOyB9CgoJCWlmICggJGRlZmF1
bHRzID09IDEgKSB7IHB1c2goIEByZXMsICJQT1AzLVVzZSBTZXJ2ZXIgRGVmYXVsdHMiICk7IH0K
CQllbHNlIHsgcHVzaCggQHJlcywgIlBPUDMtTm8gU2VydmVyIERlZmF1bHRzIiApOyB9CgoJCWlm
ICAgICggJG1pbWUgPT0gMCApIHsgcHVzaCggQHJlcywgIlBPUDMtTUlNRSB3LyBUZXh0IGFuZCBI
VE1MIiApOyB9CgkJZWxzaWYgKCAkbWltZSA9PSAxICkgeyBwdXNoKCBAcmVzLCAiUE9QMy1NSU1F
IHcvIFRleHQgT25seSIgKTsgfQoJCWVsc2lmICggJG1pbWUgPT0gMiApCgkJewoJCQlwdXNoKCBA
cmVzLCAiUE9QMy1VVUVuY29kZSBFbmFibGVkIiApOwoJCQlwdXNoKCBAcmVzLCAiUE9QMy1CaW5I
ZXggRW5hYmxlZCIgKTsKCQl9CgkJZWxzaWYgKCAkbWltZSA9PSAzICkgeyBwdXNoKCBAcmVzLCAi
UE9QMy1VVUVuY29kZSBFbmFibGVkIiApOyB9CgkJZWxzaWYgKCAkbWltZSA9PSA0ICkgeyBwdXNo
KCBAcmVzLCAiUE9QMy1NSU1FIHcvIEhUTUwgT25seSIgKTsgfQoKCQlwdXNoKCBAcmVzLCAiUE9Q
My1EZWZhdWx0IENoYXJzZXQoJGNoYXJzZXQpIiApOwoKCQlpZiAoICRyaWNodGV4dCA9PSAwICkg
eyBwdXNoKCBAcmVzLCAiUE9QMy1SaWNoVGV4dCBEaXNhYmxlZCIgKTsgfQoJCWVsc2UgeyBwdXNo
KCBAcmVzLCAiUE9QMy1SaWNoVGV4dCBFbmFibGVkIiApOyB9Cgl9CgllbHNpZiAoICR0eXBlIGVx
ICJIVFRQIiApCgl7CgkJbXkgKCAkZW5hYmxlLCAkZGVmYXVsdHMsIEBvdGhlcnMgKSA9IEBzdWJm
aWVsZHM7CgoJCWlmICggJGVuYWJsZSA9PSAxICkgeyBwdXNoKCBAcmVzLCAiSFRUUC1FbmFibGVk
IiApOyB9CgkJZWxzZSB7IHB1c2goIEByZXMsICJIVFRQLURpc2FibGVkIiApOyB9CgoJCWlmICgg
JGRlZmF1bHRzID09IDEgKSB7IHB1c2goIEByZXMsICJIVFRQLVVzZSBTZXJ2ZXIgRGVmYXVsdHMi
ICk7IH0KCQllbHNlIHsgcHVzaCggQHJlcywgIkhUVFAtTm8gU2VydmVyIERlZmF1bHRzIiApOyB9
Cgl9CgllbHNpZiAoICR0eXBlIGVxICJJTUFQNCIgKQoJewoJCW15ICggJGVuYWJsZSwgJGRlZmF1
bHRzLCAkbWltZSwgJGNoYXJzZXQsIEBvdGhlcnMgKSA9IEBzdWJmaWVsZHM7CgoJCWlmICggJGVu
YWJsZSA9PSAxICkgeyBwdXNoKCBAcmVzLCAiSU1BUDQtRW5hYmxlZCIgKTsgfQoJCWVsc2UgeyBw
dXNoKCBAcmVzLCAiSU1BUDQtRGlzYWJsZWQiICk7IH0KCgkJaWYgKCAkZGVmYXVsdHMgPT0gMSAp
IHsgcHVzaCggQHJlcywgIklNQVA0LVVzZSBTZXJ2ZXIgRGVmYXVsdHMiICk7IH0KCQllbHNlIHsg
cHVzaCggQHJlcywgIklNQVA0LU5vIFNlcnZlciBEZWZhdWx0cyIgKTsgfQoKCQlpZiAgICAoICRt
aW1lID09IDAgKSB7IHB1c2goIEByZXMsICJJTUFQNC1NSU1FIHcvIFRleHQgYW5kIEhUTUwiICk7
IH0KCQllbHNpZiAoICRtaW1lID09IDEgKSB7IHB1c2goIEByZXMsICJJTUFQNC1NSU1FIHcvIFRl
eHQgT25seSIgKTsgfQoJCWVsc2lmICggJG1pbWUgPT0gMiApCgkJewoJCQlwdXNoKCBAcmVzLCAi
SU1BUDQtVVVFbmNvZGUgRW5hYmxlZCIgKTsKCQkJcHVzaCggQHJlcywgIklNQVA0LUJpbkhleCBF
bmFibGVkIiApOwoJCX0KCQllbHNpZiAoICRtaW1lID09IDMgKSB7IHB1c2goIEByZXMsICJJTUFQ
NC1VVUVuY29kZSBFbmFibGVkIiApOyB9CgkJZWxzaWYgKCAkbWltZSA9PSA0ICkgeyBwdXNoKCBA
cmVzLCAiSU1BUDQtTUlNRSB3LyBIVE1MIE9ubHkiICk7IH0KCgkJcHVzaCggQHJlcywgIklNQVA0
LURlZmF1bHQgQ2hhcnNldCgkY2hhcnNldCkiICk7Cgl9CgoJaWYgKCAkI290aGVycyA+PSAwICkK
CXsKCQlwdXNoKCBAcmVzLCAiSUxTIFNldHRpbmdzIFByZXNlbnQiICk7Cgl9CgoJcmV0dXJuIEBy
ZXM7Cn0KCiMgQmVnaW4tRG9jCiMgTmFtZTogX01vZGlmeVVBQ0JpdHMKIyBUeXBlOiBtZXRob2QK
IyBEZXNjcmlwdGlvbjogU2V0cyBzb21lIHVzZXJBY2NvdW50Q29udHJvbCBiaXRzIGZvciBhIHVz
ZXJpZCwgaWYgc2V0IGFuZCByZXNldAojIG92ZXJsYXAsIHRoZSByZXNldCB0YWtlcyBwcmVjZWRl
bmNlLgojIFN5bnRheDogICRyZXMgPSAkZXgtPlNldF91c2VyQWNjb3VudENvbnRyb2woCiMJCQl1
c2VyaWQgPT4gInVzZXJpZCIsCiMJCQlbc2V0ID0+ICRiaXRzLF0KIwkJCVtyZXNldCA9PiAkYml0
c10pOwojIFJldHVybnM6IHVuZGVmIGlmIHN1Y2Nlc3NmdWwgb3RoZXJ3aXNlIHRoZSBlcnJvcgoj
IEFjY2VzczogcHJpdmF0ZQojIEVuZC1Eb2MKc3ViIF9Nb2RpZnlVQUNCaXRzCnsKCW15ICRzZWxm
ICAgID0gc2hpZnQ7CglteSAlb3B0cyAgICA9IEBfOwoJbXkgJHVzZXJpZCAgPSAkb3B0c3t1c2Vy
aWR9IHx8IHJldHVybiAibXVzdCBzcGVjaWZ5IHVzZXJpZCI7CglteSAkc2V0ICAgICA9IGludCgg
JG9wdHN7c2V0fSApOwoJbXkgJHJlc2V0ICAgPSBpbnQoICRvcHRze3Jlc2V0fSApOwoJbXkgJG9s
ZF91YWMgPSAkc2VsZi0+R2V0VXNlckFjY291bnRDb250cm9sKCR1c2VyaWQpOwoJbXkgJG5ld191
YWMgPSAkb2xkX3VhYzsKCW15ICRkZWJ1ZyAgID0gJHNlbGYtPmRlYnVnOwoKCWlmICggISRvbGRf
dWFjICkKCXsKCQlwcmludCAiQ291bGRuJ3QgcmV0cmlldmUgb2xkIHVzZXJBY2NvdW50Q29udHJv
bCB2YWx1ZS5cbiI7Cgl9CgoJJGRlYnVnICYmIHByaW50ICJvbGQgdWFjID0gJG9sZF91YWNcbiI7
CgoJJGRlYnVnICYmIHByaW50IGpvaW4oICJcbiIsICRzZWxmLT5QYXJzZVVzZXJBY2NvdW50Q29u
dHJvbCgkb2xkX3VhYykgKSwKCQkiXG4iOwoKCSMJJGRlYnVnICYmIHByaW50ZiAiXHQlLjhYLyVk
IHwgJS44WC8lZCA9PSAlLjhYLyVkXG4iLAoJIwkJJG5ld191YWMsICRuZXdfdWFjLCAkc2V0LCAk
c2V0LAoJIwkJJG5ld191YWMgfCAkc2V0LCAkbmV3X3VhYyB8ICRzZXQ7CgkkbmV3X3VhYyA9ICRu
ZXdfdWFjIHwgJHNldDsKCgkjIENsZWFyIGJpdHMgdGhhdCBzaG91bGQgYmUgY2xlYXJlZAoJIwkk
ZGVidWcgJiYgcHJpbnRmICJcdCUuOFgvJWQgJiB+JS44WC8lZCA9PSAlLjhYLyVkXG4iLAoJIwkJ
JG5ld191YWMsICRuZXdfdWFjLCAkcmVzZXQsICRyZXNldCwKCSMJCSRuZXdfdWFjICYgfiRyZXNl
dCwgJG5ld191YWMgJiB+JHJlc2V0OwoKCSRuZXdfdWFjID0gKCAkbmV3X3VhYyAmIH4kcmVzZXQg
KSAmIDB4RkZGRkZGRkY7CgoJIyBBZGQgaW4gYml0cyB0aGF0IHNob3VsZCBiZSBzZXQKCSRkZWJ1
ZyAmJiBwcmludCAibmV3IHVhYyA9ICRuZXdfdWFjXG4iOwoJJGRlYnVnICYmIHByaW50IGpvaW4o
ICJcbiIsICRzZWxmLT5QYXJzZVVzZXJBY2NvdW50Q29udHJvbCgkbmV3X3VhYykgKSwKCQkiXG4i
OwoKCW15ICRyZXMgPSAkc2VsZi0+U2V0QXR0cmlidXRlcygKCQl1c2VyaWQgICAgID0+ICR1c2Vy
aWQsCgkJYXR0cmlidXRlcyA9PiBbIHVzZXJBY2NvdW50Q29udHJvbCA9PiBpbnQoJG5ld191YWMp
LCBdLAoJKTsKCglteSAkY2hhbmdlZF91YWMgPSAkc2VsZi0+R2V0VXNlckFjY291bnRDb250cm9s
KCR1c2VyaWQpOwoJJGRlYnVnICYmIHByaW50ICJjaGFuZ2VkIHVhYyA9ICRjaGFuZ2VkX3VhY1xu
IjsKCSRkZWJ1ZyAmJiBwcmludCBqb2luKCAiXG4iLCAkc2VsZi0+UGFyc2VVc2VyQWNjb3VudENv
bnRyb2woJGNoYW5nZWRfdWFjKSApLAoJCSJcbiI7CgoJcmV0dXJuICRyZXM7Cn0KCiMgQmVnaW4t
RG9jCiMgTmFtZTogTW92ZVVzZXIKIyBUeXBlOiBtZXRob2QKIyBEZXNjcmlwdGlvbjogIE1vdmVz
IGEgdXNlciBvYmplY3QgZnJvbSBvbmUgY29udGFpbmVyIG9yIE9VIHRvIGFub3RoZXIKIyBTeW50
YXg6ICAkbW92ZXVzZXIgPSAkZXgtPk1vdmVVc2VyKCB1c2VyaWQgPT4gIm1pbmVyIiwgZG4gPT4g
ImNuPU1pbmVyXCwgSm9lLGNuPVVzZXJzLGRjPXVtcixkYz1lZHUiLCB0YXJnZXQgPT4gIk9VPUNJ
UyxPVT1BY2NvdW50cyxEQz11bXIsREM9ZWR1Iik7CiMgUGFzcyB0YXJnZXQgaXMgcmVxdWlyZWQg
YW5kIGVpdGhlciB1c2VyaWQgb3IgZG4gaXMgcmVxdWlyZWQuCiMgUmV0dXJuczogdW5kZWYgaXMg
c3VjY2Vzc2Z1bCBvdGhlcndpc2UgdGhlIGVycm9yCiMgRW5kLURvYwpzdWIgTW92ZVVzZXIKewoJ
bXkgJHNlbGYgPSBzaGlmdDsKCW15ICVpbmZvID0gQF87CgoJbXkgJGRlYnVnID0gJHNlbGYtPmRl
YnVnKCk7CglteSAkbGRhcCAgPSAkc2VsZi0+e2xkYXB9OwoKCW15ICR1c2VyaWQgPSAkaW5mb3t1
c2VyaWR9OwoJbXkgJGRuICAgICA9ICRpbmZve2RufQoJCXx8ICRzZWxmLT5fR2V0RE4oJHVzZXJp
ZCkKCQl8fCByZXR1cm4gIm5lZWQgYSBkbiBvciB1c2VyaWQiOwoJbXkgJHRhcmdldCA9ICRpbmZv
e3RhcmdldH0gfHwgcmV0dXJuICJuZWVkIHRhcmdldCBPVVxuIjsKCglteSAkdG1wcmVzID0gJGxk
YXAtPnNlYXJjaCgKCQliYXNlICAgPT4gJGRuLAoJCXNjb3BlICA9PiAnYmFzZScsCgkJZmlsdGVy
ID0+ICIob2JqZWN0Y2xhc3M9KikiLAoJKTsKCWlmICggJHRtcHJlcy0+Y29kZSApCgl7CgkJJHNl
bGYtPmRlYnVnICYmIHByaW50ICJTZWFyY2ggZmFpbGVkOiAiIC4gJHJlcy0+ZXJyb3IgLiAiXG4i
OwoJCSRFcnJvck1zZyA9ICJjcmVhdGUgZmFpbGVkOiAiIC4gJHJlcy0+ZXJyb3I7CgkJcmV0dXJu
ICRFcnJvck1zZzsKCX0KCglteSBAZW50cmllcyA9ICR0bXByZXMtPmFsbF9lbnRyaWVzOwoJbXkg
JGVudHJ5ICAgPSBzaGlmdChAZW50cmllcyk7CgoJJGNuID0gJGVudHJ5LT5nZXRfdmFsdWUoJ2Nu
Jyk7CglpZiAoICEkY24gKQoJewoJCSRFcnJvck1zZyA9ICJmYWlsZWQgdG8gZ2V0IGNuIGZvciAk
ZG4uXG4iOwoJCSRkZWJ1ZyAmJiBwcmludCAiRmFpbGVkIHRvIGdldCBjbiBmb3IgJGRuLlxuIjsK
CQlyZXR1cm4gIkZhaWxlZCB0byBnZXQgY24gZm9yICRkbi5cbiI7Cgl9CgkkZGVidWcgJiYgcHJp
bnQgImNuID0gJGNuXG4iOwoKCSRkZWJ1ZyAmJiBwcmludCAiZG4gaXMgJGRuXG4iOwoJJGRlYnVn
ICYmIHByaW50ICJ1c2VyaWQgaXMgJHVzZXJpZFxuIjsKCSRkZWJ1ZyAmJiBwcmludCAiVGFyZ2V0
IE9VIGlzICR0YXJnZXRcbiI7CgoJIyBUaGUgbmV3IGNuIG5lZWRzIHRvIGhhdmUgY29tbWFzIGVu
Y29kZWQgdG8gZnVuY3Rpb24gcHJvcGVybHkuCgkkY24gPX4gcy8sL1xcLC9naW87CgoJJG1vdmUg
PSAkbGRhcC0+bW9kcmRuKAoJCSRkbiwKCQluZXdyZG4gICAgICAgPT4gJ2NuPScgLiAkY24sCgkJ
bmV3c3VwZXJpb3IgID0+ICR0YXJnZXQsCgkJZGVsZXRlb2xkcmRuID0+IDEKCSk7CgoJaWYgKCAk
bW92ZS0+Y29kZSApCgl7CgkJJEVycm9yTXNnID0gIm1vdmUgZmFpbGVkOiAiIC4gJG1vdmUtPmVy
cm9yOwoJCXJldHVybiAkRXJyb3JNc2c7Cgl9CglyZXR1cm4gdW5kZWY7Cn0KCjE7Cg==
------_=_NextPart_001_01C4B83A.484677FE
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
________________________________________________
Kerberos mailing list Kerberos@mit.edu
https://mailman.mit.edu/mailman/listinfo/kerberos
------_=_NextPart_001_01C4B83A.484677FE--