com php/gtk-src: Segfault bug on win32 and windows build system: main/phpg_gvalue.c win32/config.w32.in win 32/confutils.js

[email protected] (Elizabeth Marie Smith) Wed, 15 Aug 2012 01:40:50 +0000
Newsgroups php.gtk.cvs
Message-ID <[email protected]>
--61c2eea4dd17d53a008762f3e141f5a1b85a71a6
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable

Commit:    b9901ae6000b45d2883122fcbc13dcfba6cbf61c=0AAuthor:    Elizabeth =
M Smith <[email protected]>         Tue, 14 Aug 2012 21:40:26 -0400=
=0AParents:   4cda109cf9fbc3498df709a0cf009da93919439e=0ABranches:  master=
=0A=0ALink:       http://git.php.net/?p=3Dphp/gtk-src.git;a=3Dcommitdiff;h=
=3Db9901ae6000b45d2883122fcbc13dcfba6cbf61c=0A=0ALog:=0ASegfault bug on win=
32 and windows build system=0A=0Aissue with the zend destructor using type =
and getting confused when=0Athere was no type - only showed up on release b=
uilds on win32 (grrr=0Astupid thing) - also fixed the compiler detection an=
d flags.  This=0Aprobably breaks things for older then 2008 compilers, real=
ly don't care=0A=0AChanged paths:=0A  M  main/phpg_gvalue.c=0A  M  win32/co=
nfig.w32.in=0A  M  win32/confutils.js=0A=0A
--61c2eea4dd17d53a008762f3e141f5a1b85a71a6
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="diff_b9901ae6000b45d2883122fcbc13dcfba6cbf61c.txt"

ZGlmZiAtLWdpdCBhL21haW4vcGhwZ19ndmFsdWUuYyBiL21haW4vcGhwZ19ndmFsdWUuYwppbmRl
eCA5NGM5OTY5Li5iNDdjYWIzIDEwMDY0NAotLS0gYS9tYWluL3BocGdfZ3ZhbHVlLmMKKysrIGIv
bWFpbi9waHBnX2d2YWx1ZS5jCkBAIC0xLDU1NCArMSw1NTUgQEAKLS8qCi0gKiBQSFAtR1RLIC0g
VGhlIFBIUCBsYW5ndWFnZSBiaW5kaW5ncyBmb3IgR1RLKwotICoKLSAqIENvcHlyaWdodCAoQykg
MjAwMS0yMDA4IEFuZHJlaSBabWlldnNraSA8YW5kcmVpQHBocC5uZXQ+Ci0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIAotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKiAKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4s
IDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EK
LSAqLwotCi0jaW5jbHVkZSAicGhwX2d0ay5oIgotCi0jaWYgSEFWRV9QSFBfR1RLCi0KLS8qCi0g
KiBHVmFsdWUgcmVsYXRlZCBmdW5jdGlvbnMKLSAqLwotCi0KLS8qIHt7eyBQSFBfR1RLX0FQSSBw
aHBnX2d2YWx1ZV90b196dmFsKCkgKi8KLVBIUF9HVEtfQVBJIGludCBwaHBnX2d2YWx1ZV90b196
dmFsKGNvbnN0IEdWYWx1ZSAqZ3ZhbCwgenZhbCAqKnZhbHVlLCB6ZW5kX2Jvb2wgY29weV9ib3hl
ZCwgemVuZF9ib29sIGRvX3V0ZjggVFNSTUxTX0RDKQotewotICAgIGFzc2VydCh2YWx1ZSAhPSBO
VUxMKTsKLQotICAgIHN3aXRjaCAoR19UWVBFX0ZVTkRBTUVOVEFMKEdfVkFMVUVfVFlQRShndmFs
KSkpIHsKLSAgICAgICAgY2FzZSBHX1RZUEVfSU5WQUxJRDoKLSAgICAgICAgY2FzZSBHX1RZUEVf
Tk9ORToKLSAgICAgICAgICAgIE1BS0VfWlZBTF9JRl9OVUxMKCp2YWx1ZSk7Ci0gICAgICAgICAg
ICBaVkFMX05VTEwoKnZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2Ug
R19UWVBFX0NIQVI6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2NoYXIgdmFsID0g
Z192YWx1ZV9nZXRfY2hhcihndmFsKTsKLSAgICAgICAgICAgICAgICBNQUtFX1pWQUxfSUZfTlVM
TCgqdmFsdWUpOwotICAgICAgICAgICAgICAgIFpWQUxfU1RSSU5HTCgqdmFsdWUsIChjaGFyICop
JnZhbCwgMSwgMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICBjYXNlIEdfVFlQRV9VQ0hBUjoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBndWNo
YXIgdmFsID0gZ192YWx1ZV9nZXRfdWNoYXIoZ3ZhbCk7Ci0gICAgICAgICAgICAgICAgTUFLRV9a
VkFMX0lGX05VTEwoKnZhbHVlKTsKLSAgICAgICAgICAgICAgICBaVkFMX1NUUklOR0woKnZhbHVl
LCAoY2hhciAqKSZ2YWwsIDEsIDEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgY2FzZSBHX1RZUEVfQk9PTEVBTjoKLSAgICAgICAgICAgIE1BS0VfWlZBTF9J
Rl9OVUxMKCp2YWx1ZSk7Ci0gICAgICAgICAgICBaVkFMX0JPT0woKnZhbHVlLCBnX3ZhbHVlX2dl
dF9ib29sZWFuKGd2YWwpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgR19U
WVBFX0lOVDoKLSAgICAgICAgICAgIE1BS0VfWlZBTF9JRl9OVUxMKCp2YWx1ZSk7Ci0gICAgICAg
ICAgICBaVkFMX0xPTkcoKnZhbHVlLCAobG9uZylnX3ZhbHVlX2dldF9pbnQoZ3ZhbCkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBHX1RZUEVfTE9ORzoKLSAgICAgICAgICAg
IE1BS0VfWlZBTF9JRl9OVUxMKCp2YWx1ZSk7Ci0gICAgICAgICAgICBaVkFMX0xPTkcoKnZhbHVl
LCAobG9uZylnX3ZhbHVlX2dldF9sb25nKGd2YWwpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIGNhc2UgR19UWVBFX1VJTlQ6Ci0gICAgICAgICAgICBNQUtFX1pWQUxfSUZfTlVMTCgq
dmFsdWUpOwotICAgICAgICAgICAgWlZBTF9MT05HKCp2YWx1ZSwgKGxvbmcpZ192YWx1ZV9nZXRf
dWludChndmFsKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEdfVFlQRV9V
TE9ORzoKLSAgICAgICAgICAgIE1BS0VfWlZBTF9JRl9OVUxMKCp2YWx1ZSk7Ci0gICAgICAgICAg
ICBaVkFMX0xPTkcoKnZhbHVlLCAobG9uZylnX3ZhbHVlX2dldF91bG9uZyhndmFsKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEdfVFlQRV9GTE9BVDoKLSAgICAgICAgICAg
IE1BS0VfWlZBTF9JRl9OVUxMKCp2YWx1ZSk7Ci0gICAgICAgICAgICBaVkFMX0RPVUJMRSgqdmFs
dWUsIChkb3VibGUpZ192YWx1ZV9nZXRfZmxvYXQoZ3ZhbCkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgY2FzZSBHX1RZUEVfRE9VQkxFOgotICAgICAgICAgICAgTUFLRV9aVkFMX0lG
X05VTEwoKnZhbHVlKTsKLSAgICAgICAgICAgIFpWQUxfRE9VQkxFKCp2YWx1ZSwgKGRvdWJsZSln
X3ZhbHVlX2dldF9kb3VibGUoZ3ZhbCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
Y2FzZSBHX1RZUEVfRU5VTToKLSAgICAgICAgICAgIE1BS0VfWlZBTF9JRl9OVUxMKCp2YWx1ZSk7
Ci0gICAgICAgICAgICBaVkFMX0xPTkcoKnZhbHVlLCAobG9uZylnX3ZhbHVlX2dldF9lbnVtKGd2
YWwpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgR19UWVBFX0ZMQUdTOgot
ICAgICAgICAgICAgTUFLRV9aVkFMX0lGX05VTEwoKnZhbHVlKTsKLSAgICAgICAgICAgIFpWQUxf
TE9ORygqdmFsdWUsIChsb25nKWdfdmFsdWVfZ2V0X2ZsYWdzKGd2YWwpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgIGNhc2UgR19UWVBFX1NUUklORzoKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBnY2hhciAqY3AgPSBOVUxMOwotICAgICAgICAgICAgICAgIGdzaXplIGNw
X2xlbiA9IDA7Ci0gICAgICAgICAgICAgICAgemVuZF9ib29sIGZyZWVfY3AgPSAwOwotICAgICAg
ICAgICAgICAgIGNvbnN0IGdjaGFyICpzdHIgPSBnX3ZhbHVlX2dldF9zdHJpbmcoZ3ZhbCk7Ci0K
LSAgICAgICAgICAgICAgICBNQUtFX1pWQUxfSUZfTlVMTCgqdmFsdWUpOwotICAgICAgICAgICAg
ICAgIGlmIChzdHIgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoZG9fdXRmOCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgY3AgPSBwaHBnX2Zyb21fdXRmOChzdHIsIHN0cmxl
bihzdHIpLCAmY3BfbGVuLCAmZnJlZV9jcCBUU1JNTFNfQ0MpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGNwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gY3A7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBocF9lcnJvcihFX1dBUk5JTkcsICJDb3VsZCBub3QgY29udmVydCBzdHJpbmcgZnJvbSBV
VEYtOCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIFpWQUxfU1RSSU5HKCp2YWx1ZSwgKGNoYXIgKilzdHIsIDEp
OwotICAgICAgICAgICAgICAgICAgICBpZiAoZnJlZV9jcCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgZ19mcmVlKGNwKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBaVkFMX05VTEwoKnZhbHVlKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgR19UWVBFX1BBUkFNOgot
ICAgICAgICAgICAgcGhwZ19wYXJhbXNwZWNfbmV3KHZhbHVlLCBnX3ZhbHVlX2dldF9wYXJhbShn
dmFsKSBUU1JNTFNfQ0MpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBHX1RZ
UEVfT0JKRUNUOgotICAgICAgICAgICAgcGhwZ19nb2JqZWN0X25ldyh2YWx1ZSwgZ192YWx1ZV9n
ZXRfb2JqZWN0KGd2YWwpIFRTUk1MU19DQyk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICBjYXNlIEdfVFlQRV9JTlRFUkZBQ0U6Ci0gICAgICAgICAgICBpZiAoZ190eXBlX2lzX2EoR19W
QUxVRV9UWVBFKGd2YWwpLCBHX1RZUEVfT0JKRUNUKSkgewotICAgICAgICAgICAgICAgIHBocGdf
Z29iamVjdF9uZXcodmFsdWUsIGdfdmFsdWVfZ2V0X29iamVjdChndmFsKSBUU1JNTFNfQ0MpOwot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwaHBfZXJyb3IoRV9XQVJOSU5H
LCAiQ291bGQgbm90IGFjY2VzcyBpbnRlcmZhY2UgJXMiLCBnX3R5cGVfbmFtZShHX1ZBTFVFX1RZ
UEUoZ3ZhbCkpKTsKLSAgICAgICAgICAgICAgICBNQUtFX1NURF9aVkFMKCp2YWx1ZSk7Ci0gICAg
ICAgICAgICAgICAgWlZBTF9OVUxMKCp2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEZB
SUxVUkU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNl
IEdfVFlQRV9QT0lOVEVSOgotICAgICAgICAgICAgcGhwZ19ncG9pbnRlcl9uZXcodmFsdWUsIEdf
VkFMVUVfVFlQRShndmFsKSwgZ192YWx1ZV9nZXRfcG9pbnRlcihndmFsKSBUU1JNTFNfQ0MpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBHX1RZUEVfQk9YRUQ6Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIHBocGdfZ2JveGVkX21hcnNoYWxfdCAqZ2JtOwotCi0gICAgICAgICAg
ICBpZiAoR19WQUxVRV9IT0xEUyhndmFsLCBHX1RZUEVfUEhQX1ZBTFVFKSkgewotICAgICAgICAg
ICAgICAgIHp2YWwgKm9iamVjdCA9ICh6dmFsICopIGdfdmFsdWVfZHVwX2JveGVkKGd2YWwpOwot
ICAgICAgICAgICAgICAgIE1BS0VfWlZBTF9JRl9OVUxMKCp2YWx1ZSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKG9iamVjdCkgewotICAgICAgICAgICAgICAgICAgICBSRVBMQUNFX1pWQUxfVkFMVUUo
dmFsdWUsIG9iamVjdCwgMSk7Ci0gICAgICAgICAgICAgICAgICAgIHp2YWxfcHRyX2R0b3IoJm9i
amVjdCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBTVUNDRVNTOwotICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFpWQUxfTlVMTCgqdmFsdWUpOwotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gRkFJTFVSRTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYgKEdfVkFMVUVfSE9MRFMoZ3ZhbCwgR19UWVBFX1ZBTFVFX0FSUkFZ
KSkgewotICAgICAgICAgICAgICAgIGludCBpOwotICAgICAgICAgICAgICAgIHp2YWwgKml0ZW07
Ci0gICAgICAgICAgICAgICAgaW50IHZhbHVlX2NvdW50OwotCi0gICAgICAgICAgICAgICAgR1Zh
bHVlQXJyYXkgKmFycmF5ID0gKEdWYWx1ZUFycmF5ICopIGdfdmFsdWVfZ2V0X2JveGVkKGd2YWwp
OwotICAgICAgICAgICAgICAgIE1BS0VfWlZBTF9JRl9OVUxMKCp2YWx1ZSk7Ci0gICAgICAgICAg
ICAgICAgYXJyYXlfaW5pdCgqdmFsdWUpOwotICAgICAgICAgICAgICAgIHZhbHVlX2NvdW50ID0g
YXJyYXktPm5fdmFsdWVzOwotCi0gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHZhbHVl
X2NvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgTUFLRV9TVERfWlZBTChpdGVtKTsK
LSAgICAgICAgICAgICAgICAgICAgcGhwZ19ndmFsdWVfdG9fenZhbChhcnJheS0+dmFsdWVzICsg
aSwgJml0ZW0sIGNvcHlfYm94ZWQsIFRSVUUgVFNSTUxTX0NDKTsKLSAgICAgICAgICAgICAgICAg
ICAgYWRkX25leHRfaW5kZXhfenZhbCgqdmFsdWUsIGl0ZW0pOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0gZWxzZSBpZiAoKGdibSA9IHBocGdfZ2JveGVkX2xvb2t1cF9jdXN0b20o
R19WQUxVRV9UWVBFKGd2YWwpKSkpIHsKLSAgICAgICAgICAgICAgICBNQUtFX1NURF9aVkFMKCp2
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdibS0+dG9fenZhbChndmFsLCB2YWx1ZSBU
U1JNTFNfQ0MpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoY29w
eV9ib3hlZCkgewotICAgICAgICAgICAgICAgICAgICBwaHBnX2dib3hlZF9uZXcodmFsdWUsIEdf
VkFMVUVfVFlQRShndmFsKSwgZ192YWx1ZV9nZXRfYm94ZWQoZ3ZhbCksIFRSVUUsIFRSVUUgVFNS
TUxTX0NDKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBw
aHBnX2dib3hlZF9uZXcodmFsdWUsIEdfVkFMVUVfVFlQRShndmFsKSwgZ192YWx1ZV9nZXRfYm94
ZWQoZ3ZhbCksIEZBTFNFLCBGQUxTRSBUU1JNTFNfQ0MpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIHBocF9lcnJvcihFX1dBUk5JTkcsICJQSFAtR1RLIGludGVybmFs
IGVycm9yOiB1bnN1cHBvcnRlZCB0eXBlICVzIiwgZ190eXBlX25hbWUoR19WQUxVRV9UWVBFKGd2
YWwpKSk7Ci0gICAgICAgICAgICBNQUtFX1NURF9aVkFMKCp2YWx1ZSk7Ci0gICAgICAgICAgICBa
VkFMX05VTEwoKnZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBGQUlMVVJFOwotICAgIH0KLQot
ICAgIHJldHVybiBTVUNDRVNTOwotfQotLyogfX19ICovCi0KLS8qIHt7eyBQSFBfR1RLX0FQSSBw
aHBnX2d2YWx1ZV9mcm9tX3p2YWwoKSAqLwotUEhQX0dUS19BUEkgaW50IHBocGdfZ3ZhbHVlX2Zy
b21fenZhbChHVmFsdWUgKmd2YWwsIHp2YWwgKip2YWx1ZSwgemVuZF9ib29sIGRvX3V0ZjggVFNS
TUxTX0RDKQotewotICAgIHN3aXRjaCAoR19UWVBFX0ZVTkRBTUVOVEFMKEdfVkFMVUVfVFlQRShn
dmFsKSkpIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogRm9yIHdoYXRldmVyIHJlYXNvbiwgd2Ug
c2hvdWxkIGFwcGFyZW50bHkgcmVzcGVjdCB0aGF0IHRoZSBndmFsIG1heSBiZSBvZiB0aGVzZQot
ICAgICAgICAgKiB0eXBlcyBhbmQgdGhleSBkbyBub3QgbmVlZCBhIHZhbHVlLgotICAgICAgICAg
Ki8KLSAgICAgICAgY2FzZSBHX1RZUEVfSU5WQUxJRDoKLSAgICAgICAgY2FzZSBHX1RZUEVfTk9O
RToKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgR19UWVBFX0JPT0xFQU46Ci0g
ICAgICAgICAgICBjb252ZXJ0X3RvX2Jvb2xlYW5fZXgodmFsdWUpOwotICAgICAgICAgICAgZ192
YWx1ZV9zZXRfYm9vbGVhbihndmFsLCAoZ2Jvb2xlYW4pWl9CVkFMX1BQKHZhbHVlKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEdfVFlQRV9DSEFSOgotICAgICAgICAgICAg
Y29udmVydF90b19zdHJpbmdfZXgodmFsdWUpOwotICAgICAgICAgICAgZ192YWx1ZV9zZXRfY2hh
cihndmFsLCBaX1NUUlZBTF9QUCh2YWx1ZSlbMF0pOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgY2FzZSBHX1RZUEVfVUNIQVI6Ci0gICAgICAgICAgICBjb252ZXJ0X3RvX3N0cmluZ19l
eCh2YWx1ZSk7Ci0gICAgICAgICAgICBnX3ZhbHVlX3NldF91Y2hhcihndmFsLCAoZ3VjaGFyKVpf
U1RSVkFMX1BQKHZhbHVlKVswXSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNl
IEdfVFlQRV9JTlQ6Ci0gICAgICAgICAgICBjb252ZXJ0X3RvX2xvbmdfZXgodmFsdWUpOwotICAg
ICAgICAgICAgZ192YWx1ZV9zZXRfaW50KGd2YWwsIChnaW50KVpfTFZBTF9QUCh2YWx1ZSkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBHX1RZUEVfVUlOVDoKLSAgICAgICAg
ICAgIGNvbnZlcnRfdG9fbG9uZ19leCh2YWx1ZSk7Ci0gICAgICAgICAgICBnX3ZhbHVlX3NldF91
aW50KGd2YWwsIChndWludClaX0xWQUxfUFAodmFsdWUpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgIGNhc2UgR19UWVBFX0xPTkc6Ci0gICAgICAgICAgICBjb252ZXJ0X3RvX2xvbmdf
ZXgodmFsdWUpOwotICAgICAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyhndmFsLCAoZ2xvbmcpWl9M
VkFMX1BQKHZhbHVlKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEdfVFlQ
RV9VTE9ORzoKLSAgICAgICAgICAgIGNvbnZlcnRfdG9fbG9uZ19leCh2YWx1ZSk7Ci0gICAgICAg
ICAgICBnX3ZhbHVlX3NldF91bG9uZyhndmFsLCAoZ3Vsb25nKVpfTFZBTF9QUCh2YWx1ZSkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBHX1RZUEVfRkxPQVQ6Ci0gICAgICAg
ICAgICBjb252ZXJ0X3RvX2RvdWJsZV9leCh2YWx1ZSk7Ci0gICAgICAgICAgICBnX3ZhbHVlX3Nl
dF9mbG9hdChndmFsLCAoZ2Zsb2F0KVpfRFZBTF9QUCh2YWx1ZSkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0KLSAgICAgICAgY2FzZSBHX1RZUEVfRE9VQkxFOgotICAgICAgICAgICAgY29udmVydF90
b19kb3VibGVfZXgodmFsdWUpOwotICAgICAgICAgICAgZ192YWx1ZV9zZXRfZG91YmxlKGd2YWws
IFpfRFZBTF9QUCh2YWx1ZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBH
X1RZUEVfRU5VTToKLSAgICAgICAgewotICAgICAgICAgICAgZ2ludCB2YWwgPSAwOwotICAgICAg
ICAgICAgaWYgKHBocGdfZ3ZhbHVlX2dldF9lbnVtKEdfVkFMVUVfVFlQRShndmFsKSwgKnZhbHVl
LCAmdmFsKSA9PSBGQUlMVVJFKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEZBSUxVUkU7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBnX3ZhbHVlX3NldF9lbnVtKGd2YWwsIHZhbCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgR19UWVBFX0ZMQUdT
OgotICAgICAgICB7Ci0gICAgICAgICAgICBnaW50IHZhbCA9IDA7Ci0gICAgICAgICAgICBpZiAo
cGhwZ19ndmFsdWVfZ2V0X2ZsYWdzKEdfVkFMVUVfVFlQRShndmFsKSwgKnZhbHVlLCAmdmFsKSA9
PSBGQUlMVVJFKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEZBSUxVUkU7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBnX3ZhbHVlX3NldF9mbGFncyhndmFsLCB2YWwpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIEdfVFlQRV9TVFJJTkc6Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgIGdjaGFyICp1dGY4ID0gTlVMTDsKLSAgICAgICAgICAgIGdzaXpl
IHV0ZjhfbGVuID0gMDsKLSAgICAgICAgICAgIHplbmRfYm9vbCBmcmVlX3V0ZjggPSAwOwotICAg
ICAgICAgICAgZ2NoYXIgKnN0cjsKLQotICAgICAgICAgICAgY29udmVydF90b19zdHJpbmdfZXgo
dmFsdWUpOwotICAgICAgICAgICAgc3RyID0gWl9TVFJWQUxfUFAodmFsdWUpOwotICAgICAgICAg
ICAgaWYgKGRvX3V0ZjgpIHsKLSAgICAgICAgICAgICAgICB1dGY4ID0gcGhwZ190b191dGY4KFpf
U1RSVkFMX1BQKHZhbHVlKSwgWl9TVFJMRU5fUFAodmFsdWUpLCAmdXRmOF9sZW4sICZmcmVlX3V0
ZjggVFNSTUxTX0NDKTsKLSAgICAgICAgICAgICAgICBpZiAodXRmOCkgewotICAgICAgICAgICAg
ICAgICAgICBzdHIgPSB1dGY4OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHBocF9lcnJvcihFX1dBUk5JTkcsICJDb3VsZCBub3QgY29udmVydCBzdHJpbmcg
dG8gVVRGLTgiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBnX3ZhbHVlX3NldF9zdHJpbmcoZ3ZhbCwgc3RyKTsKLSAgICAgICAgICAgIGlmIChmcmVlX3V0
ZjgpIHsKLSAgICAgICAgICAgICAgICBnX2ZyZWUodXRmOCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgR19UWVBFX1BPSU5URVI6
Ci0gICAgICAgICAgICBpZiAoWl9UWVBFX1BQKHZhbHVlKSA9PSBJU19OVUxMKSB7Ci0gICAgICAg
ICAgICAgICAgZ192YWx1ZV9zZXRfcG9pbnRlcihndmFsLCBOVUxMKTsKLSAgICAgICAgICAgIH0g
ZWxzZSBpZiAoWl9UWVBFX1BQKHZhbHVlKSA9PSBJU19PQkpFQ1QKLSAgICAgICAgICAgICAgICAg
ICAgICAgJiYgaW5zdGFuY2VvZl9mdW5jdGlvbihaX09CSkNFX1BQKHZhbHVlKSwgZ3BvaW50ZXJf
Y2UgVFNSTUxTX0NDKQotICAgICAgICAgICAgICAgICAgICAgICAmJiBHX1ZBTFVFX0hPTERTKGd2
YWwsICgocGhwZ19ncG9pbnRlcl90KilQSFBHX0dFVCgqdmFsdWUpKS0+Z3R5cGUpKSB7Ci0gICAg
ICAgICAgICAgICAgZ192YWx1ZV9zZXRfcG9pbnRlcihndmFsLCAoKHBocGdfZ3BvaW50ZXJfdCop
UEhQR19HRVQoKnZhbHVlKSktPnBvaW50ZXIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gRkFJTFVSRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgIGNhc2UgR19UWVBFX0JPWEVEOgotICAgICAgICB7Ci0gICAgICAgICAg
ICBwaHBnX2dib3hlZF9tYXJzaGFsX3QgKmdibTsKLQotICAgICAgICAgICAgaWYgKFpfVFlQRV9Q
UCh2YWx1ZSkgPT0gSVNfTlVMTCkgewotICAgICAgICAgICAgICAgIGdfdmFsdWVfc2V0X2JveGVk
KGd2YWwsIE5VTEwpOwotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIFdlIHNob3VsZCBi
ZSBzYWZlIGp1c3Qgc2V0dGluZyB0aGUgenZhbCBoZXJlLCBzaW5jZSBHX1RZUEVfUEhQX1ZBTFVF
IGlzCi0gICAgICAgICAgICAgKiBzdXBwb3NlZCB0byB0YWtlIGFueSB6dmFsIHR5cGUuCi0gICAg
ICAgICAgICAgKi8KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoR19WQUxVRV9IT0xEUyhndmFsLCBH
X1RZUEVfUEhQX1ZBTFVFKSkgewotICAgICAgICAgICAgICAgIGdfdmFsdWVfc2V0X2JveGVkKGd2
YWwsICp2YWx1ZSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKFpfVFlQRV9QUCh2YWx1ZSkgPT0g
SVNfT0JKRUNUCi0gICAgICAgICAgICAgICAgICAgICAgICYmIGluc3RhbmNlb2ZfZnVuY3Rpb24o
Wl9PQkpDRV9QUCh2YWx1ZSksIGdib3hlZF9jZSBUU1JNTFNfQ0MpCi0gICAgICAgICAgICAgICAg
ICAgICAgICYmIEdfVkFMVUVfSE9MRFMoZ3ZhbCwgKChwaHBnX2dib3hlZF90KilQSFBHX0dFVCgq
dmFsdWUpKS0+Z3R5cGUpKSB7Ci0gICAgICAgICAgICAgICAgZ192YWx1ZV9zZXRfYm94ZWQoZ3Zh
bCwgUEhQR19HQk9YRUQoKnZhbHVlKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKChnYm0gPSBw
aHBnX2dib3hlZF9sb29rdXBfY3VzdG9tKEdfVkFMVUVfVFlQRShndmFsKSkpKSB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGdibS0+ZnJvbV96dmFsKCp2YWx1ZSwgZ3ZhbCBUU1JNTFNfQ0MpOwot
ICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZBSUxVUkU7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgR19UWVBFX1BBUkFNOgot
ICAgICAgICAgICAgaWYgKHBocF9ndGtfY2hlY2tfY2xhc3MoKnZhbHVlLCBncGFyYW1zcGVjX2Nl
KSkgewotICAgICAgICAgICAgICAgIGdfdmFsdWVfc2V0X3BhcmFtKGd2YWwsIFBIUEdfR1BBUkFN
U1BFQygqdmFsdWUpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIEZBSUxVUkU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNh
c2UgR19UWVBFX09CSkVDVDoKLSAgICAgICAgICAgIGlmIChaX1RZUEVfUFAodmFsdWUpID09IElT
X05VTEwpIHsKLSAgICAgICAgICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QoZ3ZhbCwgTlVMTCk7
Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKFpfVFlQRV9QKCp2YWx1ZSkgPT0gSVNfT0JKRUNUCi0g
ICAgICAgICAgICAgICAgICAgICAgICYmIGluc3RhbmNlb2ZfZnVuY3Rpb24oWl9PQkpDRV9QUCh2
YWx1ZSksIGdvYmplY3RfY2UgVFNSTUxTX0NDKQotICAgICAgICAgICAgICAgICAgICAgICAmJiBH
X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRShQSFBHX0dPQkpFQ1QoKnZhbHVlKSwgR19WQUxVRV9U
WVBFKGd2YWwpKSkgewotICAgICAgICAgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdChndmFsLCBQ
SFBHX0dPQkpFQ1QoKnZhbHVlKSk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAg
ICByZXR1cm4gRkFJTFVSRTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgR19U
WVBFX0lOVEVSRkFDRToKLSAgICAgICAgICAgIGlmIChnX3R5cGVfaXNfYShHX1ZBTFVFX1RZUEUo
Z3ZhbCksIEdfVFlQRV9PQkpFQ1QpICYmCi0gICAgICAgICAgICAgICAgWl9UWVBFX1BQKHZhbHVl
KSA9PSBJU19PQkpFQ1QgJiYKLSAgICAgICAgICAgICAgICBHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
VFlQRShQSFBHX0dPQkpFQ1QoKnZhbHVlKSwgR19WQUxVRV9UWVBFKGd2YWwpKSkgewotICAgICAg
ICAgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdChndmFsLCBQSFBHX0dPQkpFQ1QoKnZhbHVlKSk7
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHBocF9lcnJvcihFX1dBUk5J
TkcsICJDb3VsZCBub3QgYWNjZXNzIGludGVyZmFjZSAlcyIsIGdfdHlwZV9uYW1lKEdfVkFMVUVf
VFlQRShndmFsKSkpOwotICAgICAgICAgICAgICAgIHJldHVybiBGQUlMVVJFOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IHBocF9lcnJvcihFX1dBUk5JTkcsICJQSFAtR1RLIGludGVybmFsIGVycm9yOiB1bnN1cHBvcnRl
ZCB0eXBlICVzIiwgZ190eXBlX25hbWUoR19WQUxVRV9UWVBFKGd2YWwpKSk7Ci0gICAgICAgICAg
ICByZXR1cm4gRkFJTFVSRTsKLQotICAgIH0KLQotICAgIHJldHVybiBTVUNDRVNTOwotfQotLyog
fX19ICovCi0KLS8qIHt7eyBQSFBfR1RLX0FQSSBwaHBnX3BhcmFtX2d2YWx1ZV90b196dmFsKCkg
Ki8KLVBIUF9HVEtfQVBJIGludCBwaHBnX3BhcmFtX2d2YWx1ZV90b196dmFsKGNvbnN0IEdWYWx1
ZSAqZ3ZhbCwgenZhbCAqKnZhbHVlLCB6ZW5kX2Jvb2wgY29weV9ib3hlZCwgY29uc3QgR1BhcmFt
U3BlYyAqcHNwZWMgVFNSTUxTX0RDKQotewotICAgIGlmIChHX0lTX1BBUkFNX1NQRUNfVU5JQ0hB
Uihwc3BlYykpIHsKLSAgICAgICAgLyogVE9ETyAqLwotICAgICAgICByZXR1cm4gRkFJTFVSRTsK
LSAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gcGhwZ19ndmFsdWVfdG9fenZhbChndmFsLCB2
YWx1ZSwgY29weV9ib3hlZCwgVFJVRSBUU1JNTFNfQ0MpOwotICAgIH0KLX0KLS8qIH19fSAqLwot
Ci0vKiB7e3sgUEhQX0dUS19BUEkgcGhwZ19wYXJhbV9ndmFsdWVfZnJvbV96dmFsKCkgKi8KLVBI
UF9HVEtfQVBJIGludCBwaHBnX3BhcmFtX2d2YWx1ZV9mcm9tX3p2YWwoR1ZhbHVlICpndmFsLCB6
dmFsICoqdmFsdWUsIGNvbnN0IEdQYXJhbVNwZWMgKnBzcGVjIFRTUk1MU19EQykKLXsKLSAgICBp
ZiAoR19JU19QQVJBTV9TUEVDX1VOSUNIQVIocHNwZWMpKSB7Ci0gICAgICAgIC8qIFRPRE8gKi8K
LSAgICAgICAgcmV0dXJuIEZBSUxVUkU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIHBo
cGdfZ3ZhbHVlX2Zyb21fenZhbChndmFsLCB2YWx1ZSwgVFJVRSBUU1JNTFNfQ0MpOwotICAgIH0K
LX0KLS8qIH19fSAqLwotCi0vKiB7e3sgUEhQX0dUS19BUEkgcGhwZ19ndmFsdWVzX3RvX2FycmF5
KCkgKi8KLVBIUF9HVEtfQVBJIHp2YWwgKnBocGdfZ3ZhbHVlc190b19hcnJheShjb25zdCBHVmFs
dWUgKnZhbHVlcywgdWludCBuX3ZhbHVlcykKLXsKLQl6dmFsICpoYXNoOwotCXp2YWwgKml0ZW0g
PSBOVUxMOwotCWludCBpOwotCWludCB2YWx1ZV9jb3VudDsKLQotCU1BS0VfU1REX1pWQUwoaGFz
aCk7Ci0JYXJyYXlfaW5pdChoYXNoKTsKLQl2YWx1ZV9jb3VudCA9IG5fdmFsdWVzOwotCi0JZm9y
IChpID0gMDsgaSA8IHZhbHVlX2NvdW50OyBpKyspIHsKLQkJLy9pdGVtID0gcGhwZ19ndmFsdWVf
dG9fenZhbCgmdmFsdWVzW2ldLCBGQUxTRSk7Ci0JCWlmICghaXRlbSkgewotCQkJTUFLRV9TVERf
WlZBTChpdGVtKTsKLQkJCVpWQUxfTlVMTChpdGVtKTsKLQkJfQotCQl6ZW5kX2hhc2hfbmV4dF9p
bmRleF9pbnNlcnQoWl9BUlJWQUxfUChoYXNoKSwgJml0ZW0sIHNpemVvZih6dmFsICopLCBOVUxM
KTsKLQl9Ci0KLQlyZXR1cm4gaGFzaDsKLX0KLS8qIH19fSAqLwotCi0vKiB7e3sgUEhQX0dUS19B
UEkgcGhwZ19ndmFsdWVfZ2V0X2VudW0oKSAqLwotUEhQX0dUS19BUEkgaW50IHBocGdfZ3ZhbHVl
X2dldF9lbnVtKEdUeXBlIGVudW1fdHlwZSwgenZhbCAqZW51bV92YWwsIGdpbnQgKnJlc3VsdCkK
LXsKLSAgICBpZiAocmVzdWx0ID09IE5VTEwpCi0gICAgICAgIHJldHVybiBGQUlMVVJFOwotCi0g
ICAgaWYgKGVudW1fdmFsID09IE5VTEwpIHsKLSAgICAgICAgKnJlc3VsdCA9IDA7Ci0gICAgfSBl
bHNlIGlmIChaX1RZUEVfUChlbnVtX3ZhbCkgPT0gSVNfTE9ORykgewotICAgICAgICAqcmVzdWx0
ID0gWl9MVkFMX1AoZW51bV92YWwpOwotICAgIH0gZWxzZSBpZiAoWl9UWVBFX1AoZW51bV92YWwp
ID09IElTX1NUUklORykgewotICAgICAgICBHRW51bUNsYXNzICplY2xhc3MgPSBOVUxMOwotICAg
ICAgICBHRW51bVZhbHVlICppbmZvID0gTlVMTDsKLQotICAgICAgICBpZiAoZW51bV90eXBlICE9
IEdfVFlQRV9OT05FKSB7Ci0gICAgICAgICAgICBlY2xhc3MgPSBHX0VOVU1fQ0xBU1MoZ190eXBl
X2NsYXNzX3JlZihlbnVtX3R5cGUpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBo
cF9lcnJvcihFX1dBUk5JTkcsICJQSFAtR1RLIGludGVybmFsIGVycm9yOiBjb3VsZCBub3Qgb2J0
YWluIHRoZSB0eXBlIG9mIGVudW0iKTsKLSAgICAgICAgICAgIHJldHVybiBGQUlMVVJFOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaW5mbyA9IGdfZW51bV9nZXRfdmFsdWVfYnlfbmFtZShlY2xhc3Ms
IFpfU1RSVkFMX1AoZW51bV92YWwpKTsKLQotICAgICAgICBpZiAoaW5mbyA9PSBOVUxMKSB7Ci0g
ICAgICAgICAgICBpbmZvID0gZ19lbnVtX2dldF92YWx1ZV9ieV9uaWNrKGVjbGFzcywgWl9TVFJW
QUxfUChlbnVtX3ZhbCkpOwotICAgICAgICB9Ci0gICAgICAgIGdfdHlwZV9jbGFzc191bnJlZihl
Y2xhc3MpOwotICAgICAgICAKLSAgICAgICAgaWYgKGluZm8gIT0gTlVMTCkgewotICAgICAgICAg
ICAgKnJlc3VsdCA9IGluZm8tPnZhbHVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
cGhwX2Vycm9yKEVfV0FSTklORywgIlBIUC1HVEsgaW50ZXJuYWwgZXJyb3I6IGNvdWxkIG5vdCBj
b252ZXJ0ICclcycgdG8gZW51bSIsIFpfU1RSVkFMX1AoZW51bV92YWwpKTsKLSAgICAgICAgICAg
IHJldHVybiBGQUlMVVJFOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcGhwX2Vy
cm9yKEVfV0FSTklORywgIlBIUC1HVEsgaW50ZXJuYWwgZXJyb3I6IGVudW1zIG11c3QgYmUgc3Ry
aW5ncyBvciBpbnRlZ2VycyIpOwotICAgICAgICByZXR1cm4gRkFJTFVSRTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gU1VDQ0VTUzsKLX0KLS8qIH19fSAqLwotCi0vKiB7e3sgUEhQX0dUS19BUEkgcGhw
Z19ndmFsdWVfZ2V0X2ZsYWdzKCkgKi8KLVBIUF9HVEtfQVBJIGludCBwaHBnX2d2YWx1ZV9nZXRf
ZmxhZ3MoR1R5cGUgZmxhZ3NfdHlwZSwgenZhbCAqZmxhZ3NfdmFsLCBnaW50ICpyZXN1bHQpCi17
Ci0gICAgR0ZsYWdzQ2xhc3MgKmZjbGFzcyA9IE5VTEw7Ci0gICAgR0ZsYWdzVmFsdWUgKmluZm8g
PSBOVUxMOwotCi0gICAgaWYgKHJlc3VsdCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gRkFJTFVS
RTsKLQotICAgIGlmIChmbGFnc192YWwgPT0gTlVMTCkgewotICAgICAgICAqcmVzdWx0ID0gMDsK
LSAgICB9IGVsc2UgaWYgKFpfVFlQRV9QKGZsYWdzX3ZhbCkgPT0gSVNfTE9ORykgewotICAgICAg
ICAqcmVzdWx0ID0gWl9MVkFMX1AoZmxhZ3NfdmFsKTsKLSAgICB9IGVsc2UgaWYgKFpfVFlQRV9Q
KGZsYWdzX3ZhbCkgPT0gSVNfU1RSSU5HKSB7Ci0gICAgICAgIGlmIChmbGFnc190eXBlICE9IEdf
VFlQRV9OT05FKSB7Ci0gICAgICAgICAgICBmY2xhc3MgPSBHX0ZMQUdTX0NMQVNTKGdfdHlwZV9j
bGFzc19yZWYoZmxhZ3NfdHlwZSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcGhw
X2Vycm9yKEVfV0FSTklORywgIlBIUC1HVEsgaW50ZXJuYWwgZXJyb3I6IGNvdWxkIG5vdCBvYnRh
aW4gdGhlIHR5cGUgb2YgZmxhZ3MiKTsKLSAgICAgICAgICAgIHJldHVybiBGQUlMVVJFOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaW5mbyA9IGdfZmxhZ3NfZ2V0X3ZhbHVlX2J5X25hbWUoZmNsYXNz
LCBaX1NUUlZBTF9QKGZsYWdzX3ZhbCkpOwotICAgICAgICBpZiAoaW5mbyA9PSBOVUxMKSB7Ci0g
ICAgICAgICAgICBpbmZvID0gZ19mbGFnc19nZXRfdmFsdWVfYnlfbmljayhmY2xhc3MsIFpfU1RS
VkFMX1AoZmxhZ3NfdmFsKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZ190eXBlX2NsYXNzX3VucmVm
KGZjbGFzcyk7Ci0KLSAgICAgICAgaWYgKGluZm8gIT0gTlVMTCkgewotICAgICAgICAgICAgKnJl
c3VsdCA9IGluZm8tPnZhbHVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcGhwX2Vy
cm9yKEVfV0FSTklORywgIlBIUC1HVEsgaW50ZXJuYWwgZXJyb3I6IGNvdWxkIG5vdCBjb252ZXJ0
ICclcycgdG8gZmxhZ3MiLCBaX1NUUlZBTF9QKGZsYWdzX3ZhbCkpOwotICAgICAgICAgICAgcmV0
dXJuIEZBSUxVUkU7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKFpfVFlQRV9QKGZsYWdzX3Zh
bCkgPT0gSVNfQVJSQVkpIHsKLQkJenZhbCAqKmZsYWc7Ci0KLSAgICAgICAgKnJlc3VsdCA9IDA7
Ci0gICAgICAgIGlmIChmbGFnc190eXBlICE9IEdfVFlQRV9OT05FKSB7Ci0gICAgICAgICAgICBm
Y2xhc3MgPSBHX0ZMQUdTX0NMQVNTKGdfdHlwZV9jbGFzc19yZWYoZmxhZ3NfdHlwZSkpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgcGhwX2Vycm9yKEVfV0FSTklORywgIlBIUC1HVEsg
aW50ZXJuYWwgZXJyb3I6IGNvdWxkIG5vdCBvYnRhaW4gdGhlIHR5cGUgb2YgZmxhZ3MiKTsKLSAg
ICAgICAgICAgIHJldHVybiBGQUlMVVJFOwotICAgICAgICB9Ci0KLQkJZm9yICh6ZW5kX2hhc2hf
aW50ZXJuYWxfcG9pbnRlcl9yZXNldChaX0FSUlZBTF9QKGZsYWdzX3ZhbCkpOwotCQkJIHplbmRf
aGFzaF9nZXRfY3VycmVudF9kYXRhKFpfQVJSVkFMX1AoZmxhZ3NfdmFsKSwgKHZvaWQgKiopJmZs
YWcpID09IFNVQ0NFU1M7Ci0JCQkgemVuZF9oYXNoX21vdmVfZm9yd2FyZChaX0FSUlZBTF9QKGZs
YWdzX3ZhbCkpKSB7Ci0KLQkJCWlmIChaX1RZUEVfUFAoZmxhZykgPT0gSVNfTE9ORykgewotCQkJ
CSpyZXN1bHQgfD0gWl9MVkFMX1BQKGZsYWcpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChaX1RZ
UEVfUFAoZmxhZykgPT0gSVNfU1RSSU5HKSB7Ci0gICAgICAgICAgICAgICAgaW5mbyA9IGdfZmxh
Z3NfZ2V0X3ZhbHVlX2J5X25hbWUoZmNsYXNzLCBaX1NUUlZBTF9QUChmbGFnKSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGluZm8gPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBpbmZvID0g
Z19mbGFnc19nZXRfdmFsdWVfYnlfbmljayhmY2xhc3MsIFpfU1RSVkFMX1BQKGZsYWcpKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGluZm8gIT0gTlVMTCkgewotICAg
ICAgICAgICAgICAgICAgICAqcmVzdWx0IHw9IGluZm8tPnZhbHVlOwotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHBocF9lcnJvcihFX1dBUk5JTkcsICJQSFAt
R1RLIGludGVybmFsIGVycm9yOiBjb3VsZCBub3QgY29udmVydCAnJXMnIHRvIGZsYWdzIiwgWl9T
VFJWQUxfUFAoZmxhZykpOwotICAgICAgICAgICAgICAgICAgICBnX3R5cGVfY2xhc3NfdW5yZWYo
ZmNsYXNzKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBSUxVUkU7Ci0gICAgICAgICAg
ICAgICAgfQotCQkJfSBlbHNlIHsKLQkJCQlwaHBfZXJyb3IoRV9XQVJOSU5HLCAiUEhQLUdUSyBm
bGFnIGFycmF5cyBjYW4gY29udGFpbiBvbmx5IGludGVnZXJzIG9yIHN0cmluZ3MiKTsKLSAgICAg
ICAgICAgICAgICBnX3R5cGVfY2xhc3NfdW5yZWYoZmNsYXNzKTsKLQkJCQlyZXR1cm4gMDsKLQkJ
CX0KLQkJfQotICAgICAgICBnX3R5cGVfY2xhc3NfdW5yZWYoZmNsYXNzKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBwaHBfZXJyb3IoRV9XQVJOSU5HLCAiUEhQLUdUSyBmbGFncyBtdXN0IGJlIHN0
cmluZ3MsIGludGVnZXJzLCBvciBhcnJheXMgb2Ygc3RyaW5ncyBvciBpbnRlZ2VycyIpOwotICAg
ICAgICByZXR1cm4gRkFJTFVSRTsKLSAgICB9Ci0KLSAgICByZXR1cm4gU1VDQ0VTUzsKLX0KLS8q
IH19fSAqLwotCi0jZW5kaWYKLQotLyogdmltOiBzZXQgZmRtPW1hcmtlciBldCA6ICovCisvKg0K
KyAqIFBIUC1HVEsgLSBUaGUgUEhQIGxhbmd1YWdlIGJpbmRpbmdzIGZvciBHVEsrDQorICoNCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwOCBBbmRyZWkgWm1pZXZza2kgPGFuZHJlaUBwaHAubmV0
Pg0KKyAqDQorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcg0KKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXINCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCisgKiANCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwNCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZg0KKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VDQorICogTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCisgKiANCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljDQorICogTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQ0KKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMw
LCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0ENCisgKi8NCisNCisjaW5jbHVkZSAicGhwX2d0
ay5oIg0KKw0KKyNpZiBIQVZFX1BIUF9HVEsNCisNCisvKg0KKyAqIEdWYWx1ZSByZWxhdGVkIGZ1
bmN0aW9ucw0KKyAqLw0KKw0KKw0KKy8qIHt7eyBQSFBfR1RLX0FQSSBwaHBnX2d2YWx1ZV90b196
dmFsKCkgKi8NCitQSFBfR1RLX0FQSSBpbnQgcGhwZ19ndmFsdWVfdG9fenZhbChjb25zdCBHVmFs
dWUgKmd2YWwsIHp2YWwgKip2YWx1ZSwgemVuZF9ib29sIGNvcHlfYm94ZWQsIHplbmRfYm9vbCBk
b191dGY4IFRTUk1MU19EQykNCit7DQorICAgIGFzc2VydCh2YWx1ZSAhPSBOVUxMKTsNCisNCisg
ICAgc3dpdGNoIChHX1RZUEVfRlVOREFNRU5UQUwoR19WQUxVRV9UWVBFKGd2YWwpKSkgew0KKyAg
ICAgICAgY2FzZSBHX1RZUEVfSU5WQUxJRDoNCisgICAgICAgIGNhc2UgR19UWVBFX05PTkU6DQor
ICAgICAgICAgICAgTUFLRV9aVkFMX0lGX05VTEwoKnZhbHVlKTsNCisgICAgICAgICAgICBaVkFM
X05VTEwoKnZhbHVlKTsNCisgICAgICAgICAgICBicmVhazsNCisNCisgICAgICAgIGNhc2UgR19U
WVBFX0NIQVI6DQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBnY2hhciB2YWwgPSBn
X3ZhbHVlX2dldF9jaGFyKGd2YWwpOw0KKyAgICAgICAgICAgICAgICBNQUtFX1pWQUxfSUZfTlVM
TCgqdmFsdWUpOw0KKyAgICAgICAgICAgICAgICBaVkFMX1NUUklOR0woKnZhbHVlLCAoY2hhciAq
KSZ2YWwsIDEsIDEpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBicmVhazsNCisNCisg
ICAgICAgIGNhc2UgR19UWVBFX1VDSEFSOg0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAg
ICAgZ3VjaGFyIHZhbCA9IGdfdmFsdWVfZ2V0X3VjaGFyKGd2YWwpOw0KKyAgICAgICAgICAgICAg
ICBNQUtFX1pWQUxfSUZfTlVMTCgqdmFsdWUpOw0KKyAgICAgICAgICAgICAgICBaVkFMX1NUUklO
R0woKnZhbHVlLCAoY2hhciAqKSZ2YWwsIDEsIDEpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAg
ICAgICBicmVhazsNCisNCisgICAgICAgIGNhc2UgR19UWVBFX0JPT0xFQU46DQorICAgICAgICAg
ICAgTUFLRV9aVkFMX0lGX05VTEwoKnZhbHVlKTsNCisgICAgICAgICAgICBaVkFMX0JPT0woKnZh
bHVlLCBnX3ZhbHVlX2dldF9ib29sZWFuKGd2YWwpKTsNCisgICAgICAgICAgICBicmVhazsNCisN
CisgICAgICAgIGNhc2UgR19UWVBFX0lOVDoNCisgICAgICAgICAgICBNQUtFX1pWQUxfSUZfTlVM
TCgqdmFsdWUpOw0KKyAgICAgICAgICAgIFpWQUxfTE9ORygqdmFsdWUsIChsb25nKWdfdmFsdWVf
Z2V0X2ludChndmFsKSk7DQorICAgICAgICAgICAgYnJlYWs7DQorDQorICAgICAgICBjYXNlIEdf
VFlQRV9MT05HOg0KKyAgICAgICAgICAgIE1BS0VfWlZBTF9JRl9OVUxMKCp2YWx1ZSk7DQorICAg
ICAgICAgICAgWlZBTF9MT05HKCp2YWx1ZSwgKGxvbmcpZ192YWx1ZV9nZXRfbG9uZyhndmFsKSk7
DQorICAgICAgICAgICAgYnJlYWs7DQorDQorICAgICAgICBjYXNlIEdfVFlQRV9VSU5UOg0KKyAg
ICAgICAgICAgIE1BS0VfWlZBTF9JRl9OVUxMKCp2YWx1ZSk7DQorICAgICAgICAgICAgWlZBTF9M
T05HKCp2YWx1ZSwgKGxvbmcpZ192YWx1ZV9nZXRfdWludChndmFsKSk7DQorICAgICAgICAgICAg
YnJlYWs7DQorDQorICAgICAgICBjYXNlIEdfVFlQRV9VTE9ORzoNCisgICAgICAgICAgICBNQUtF
X1pWQUxfSUZfTlVMTCgqdmFsdWUpOw0KKyAgICAgICAgICAgIFpWQUxfTE9ORygqdmFsdWUsIChs
b25nKWdfdmFsdWVfZ2V0X3Vsb25nKGd2YWwpKTsNCisgICAgICAgICAgICBicmVhazsNCisNCisg
ICAgICAgIGNhc2UgR19UWVBFX0ZMT0FUOg0KKyAgICAgICAgICAgIE1BS0VfWlZBTF9JRl9OVUxM
KCp2YWx1ZSk7DQorICAgICAgICAgICAgWlZBTF9ET1VCTEUoKnZhbHVlLCAoZG91YmxlKWdfdmFs
dWVfZ2V0X2Zsb2F0KGd2YWwpKTsNCisgICAgICAgICAgICBicmVhazsNCisNCisgICAgICAgIGNh
c2UgR19UWVBFX0RPVUJMRToNCisgICAgICAgICAgICBNQUtFX1pWQUxfSUZfTlVMTCgqdmFsdWUp
Ow0KKyAgICAgICAgICAgIFpWQUxfRE9VQkxFKCp2YWx1ZSwgKGRvdWJsZSlnX3ZhbHVlX2dldF9k
b3VibGUoZ3ZhbCkpOw0KKyAgICAgICAgICAgIGJyZWFrOw0KKw0KKyAgICAgICAgY2FzZSBHX1RZ
UEVfRU5VTToNCisgICAgICAgICAgICBNQUtFX1pWQUxfSUZfTlVMTCgqdmFsdWUpOw0KKyAgICAg
ICAgICAgIFpWQUxfTE9ORygqdmFsdWUsIChsb25nKWdfdmFsdWVfZ2V0X2VudW0oZ3ZhbCkpOw0K
KyAgICAgICAgICAgIGJyZWFrOw0KKw0KKyAgICAgICAgY2FzZSBHX1RZUEVfRkxBR1M6DQorICAg
ICAgICAgICAgTUFLRV9aVkFMX0lGX05VTEwoKnZhbHVlKTsNCisgICAgICAgICAgICBaVkFMX0xP
TkcoKnZhbHVlLCAobG9uZylnX3ZhbHVlX2dldF9mbGFncyhndmFsKSk7DQorICAgICAgICAgICAg
YnJlYWs7DQorDQorICAgICAgICBjYXNlIEdfVFlQRV9TVFJJTkc6DQorICAgICAgICAgICAgew0K
KyAgICAgICAgICAgICAgICBnY2hhciAqY3AgPSBOVUxMOw0KKyAgICAgICAgICAgICAgICBnc2l6
ZSBjcF9sZW4gPSAwOw0KKyAgICAgICAgICAgICAgICB6ZW5kX2Jvb2wgZnJlZV9jcCA9IDA7DQor
ICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICpzdHIgPSBnX3ZhbHVlX2dldF9zdHJpbmcoZ3Zh
bCk7DQorDQorICAgICAgICAgICAgICAgIE1BS0VfWlZBTF9JRl9OVUxMKCp2YWx1ZSk7DQorICAg
ICAgICAgICAgICAgIGlmIChzdHIgIT0gTlVMTCkgew0KKyAgICAgICAgICAgICAgICAgICAgaWYg
KGRvX3V0ZjgpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBjcCA9IHBocGdfZnJvbV91dGY4
KHN0ciwgc3RybGVuKHN0ciksICZjcF9sZW4sICZmcmVlX2NwIFRTUk1MU19DQyk7DQorICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGNwKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ciA9IGNwOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBocF9lcnJvcihFX1dBUk5JTkcsICJDb3VsZCBub3QgY29udmVy
dCBzdHJpbmcgZnJvbSBVVEYtOCIpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAg
ICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIFpWQUxfU1RSSU5HKCp2YWx1
ZSwgKGNoYXIgKilzdHIsIDEpOw0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGZyZWVfY3ApIHsN
CisgICAgICAgICAgICAgICAgICAgICAgICBnX2ZyZWUoY3ApOw0KKyAgICAgICAgICAgICAgICAg
ICAgfQ0KKyAgICAgICAgICAgICAgICB9IGVsc2UNCisgICAgICAgICAgICAgICAgICAgIFpWQUxf
TlVMTCgqdmFsdWUpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBicmVhazsNCisNCisg
ICAgICAgIGNhc2UgR19UWVBFX1BBUkFNOg0KKyAgICAgICAgICAgIHBocGdfcGFyYW1zcGVjX25l
dyh2YWx1ZSwgZ192YWx1ZV9nZXRfcGFyYW0oZ3ZhbCkgVFNSTUxTX0NDKTsNCisgICAgICAgICAg
ICBicmVhazsNCisNCisgICAgICAgIGNhc2UgR19UWVBFX09CSkVDVDoNCisgICAgICAgICAgICBw
aHBnX2dvYmplY3RfbmV3KHZhbHVlLCBnX3ZhbHVlX2dldF9vYmplY3QoZ3ZhbCkgVFNSTUxTX0ND
KTsNCisgICAgICAgICAgICBicmVhazsNCisNCisgICAgICAgIGNhc2UgR19UWVBFX0lOVEVSRkFD
RToNCisgICAgICAgICAgICBpZiAoZ190eXBlX2lzX2EoR19WQUxVRV9UWVBFKGd2YWwpLCBHX1RZ
UEVfT0JKRUNUKSkgew0KKyAgICAgICAgICAgICAgICBwaHBnX2dvYmplY3RfbmV3KHZhbHVlLCBn
X3ZhbHVlX2dldF9vYmplY3QoZ3ZhbCkgVFNSTUxTX0NDKTsNCisgICAgICAgICAgICB9IGVsc2Ug
ew0KKyAgICAgICAgICAgICAgICBwaHBfZXJyb3IoRV9XQVJOSU5HLCAiQ291bGQgbm90IGFjY2Vz
cyBpbnRlcmZhY2UgJXMiLCBnX3R5cGVfbmFtZShHX1ZBTFVFX1RZUEUoZ3ZhbCkpKTsNCisgICAg
ICAgICAgICAgICAgTUFLRV9TVERfWlZBTCgqdmFsdWUpOw0KKyAgICAgICAgICAgICAgICBaVkFM
X05VTEwoKnZhbHVlKTsNCisgICAgICAgICAgICAgICAgcmV0dXJuIEZBSUxVUkU7DQorICAgICAg
ICAgICAgfQ0KKyAgICAgICAgICAgIGJyZWFrOw0KKw0KKyAgICAgICAgY2FzZSBHX1RZUEVfUE9J
TlRFUjoNCisgICAgICAgICAgICBwaHBnX2dwb2ludGVyX25ldyh2YWx1ZSwgR19WQUxVRV9UWVBF
KGd2YWwpLCBnX3ZhbHVlX2dldF9wb2ludGVyKGd2YWwpIFRTUk1MU19DQyk7DQorICAgICAgICAg
ICAgYnJlYWs7DQorDQorICAgICAgICBjYXNlIEdfVFlQRV9CT1hFRDoNCisgICAgICAgIHsNCisg
ICAgICAgICAgICBwaHBnX2dib3hlZF9tYXJzaGFsX3QgKmdibTsNCisNCisgICAgICAgICAgICBp
ZiAoR19WQUxVRV9IT0xEUyhndmFsLCBHX1RZUEVfUEhQX1ZBTFVFKSkgew0KKyAgICAgICAgICAg
ICAgICB6dmFsICpvYmplY3QgPSAoenZhbCAqKSBnX3ZhbHVlX2R1cF9ib3hlZChndmFsKTsNCisg
ICAgICAgICAgICAgICAgTUFLRV9aVkFMX0lGX05VTEwoKnZhbHVlKTsNCisJCQkJWlZBTF9OVUxM
KCp2YWx1ZSk7DQorICAgICAgICAgICAgICAgIGlmIChvYmplY3QpIHsNCisgICAgICAgICAgICAg
ICAgICAgIFJFUExBQ0VfWlZBTF9WQUxVRSh2YWx1ZSwgb2JqZWN0LCAxKTsNCisgICAgICAgICAg
ICAgICAgICAgIHp2YWxfcHRyX2R0b3IoJm9iamVjdCk7DQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gU1VDQ0VTUzsNCisgICAgICAgICAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICAg
ICAgICAgIFpWQUxfTlVMTCgqdmFsdWUpOw0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZB
SUxVUkU7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9IGVsc2UgaWYgKEdfVkFM
VUVfSE9MRFMoZ3ZhbCwgR19UWVBFX1ZBTFVFX0FSUkFZKSkgew0KKyAgICAgICAgICAgICAgICBp
bnQgaTsNCisgICAgICAgICAgICAgICAgenZhbCAqaXRlbTsNCisgICAgICAgICAgICAgICAgaW50
IHZhbHVlX2NvdW50Ow0KKw0KKyAgICAgICAgICAgICAgICBHVmFsdWVBcnJheSAqYXJyYXkgPSAo
R1ZhbHVlQXJyYXkgKikgZ192YWx1ZV9nZXRfYm94ZWQoZ3ZhbCk7DQorICAgICAgICAgICAgICAg
IE1BS0VfWlZBTF9JRl9OVUxMKCp2YWx1ZSk7DQorICAgICAgICAgICAgICAgIGFycmF5X2luaXQo
KnZhbHVlKTsNCisgICAgICAgICAgICAgICAgdmFsdWVfY291bnQgPSBhcnJheS0+bl92YWx1ZXM7
DQorDQorICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB2YWx1ZV9jb3VudDsgaSsrKSB7
DQorICAgICAgICAgICAgICAgICAgICBNQUtFX1NURF9aVkFMKGl0ZW0pOw0KKyAgICAgICAgICAg
ICAgICAgICAgcGhwZ19ndmFsdWVfdG9fenZhbChhcnJheS0+dmFsdWVzICsgaSwgJml0ZW0sIGNv
cHlfYm94ZWQsIFRSVUUgVFNSTUxTX0NDKTsNCisgICAgICAgICAgICAgICAgICAgIGFkZF9uZXh0
X2luZGV4X3p2YWwoKnZhbHVlLCBpdGVtKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoKGdibSA9IHBocGdfZ2JveGVkX2xvb2t1cF9jdXN0b20oR19WQUxVRV9U
WVBFKGd2YWwpKSkpIHsNCisgICAgICAgICAgICAgICAgTUFLRV9TVERfWlZBTCgqdmFsdWUpOw0K
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2JtLT50b196dmFsKGd2YWwsIHZhbHVlIFRTUk1MU19D
Qyk7DQorICAgICAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICAgICAgaWYgKGNvcHlfYm94
ZWQpIHsNCisgICAgICAgICAgICAgICAgICAgIHBocGdfZ2JveGVkX25ldyh2YWx1ZSwgR19WQUxV
RV9UWVBFKGd2YWwpLCBnX3ZhbHVlX2dldF9ib3hlZChndmFsKSwgVFJVRSwgVFJVRSBUU1JNTFNf
Q0MpOw0KKyAgICAgICAgICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgICAgICAgICAgcGhw
Z19nYm94ZWRfbmV3KHZhbHVlLCBHX1ZBTFVFX1RZUEUoZ3ZhbCksIGdfdmFsdWVfZ2V0X2JveGVk
KGd2YWwpLCBGQUxTRSwgRkFMU0UgVFNSTUxTX0NDKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAg
ICAgICAgICAgIH0NCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgIH0NCisNCisgICAgICAg
IGRlZmF1bHQ6DQorICAgICAgICAgICAgcGhwX2Vycm9yKEVfV0FSTklORywgIlBIUC1HVEsgaW50
ZXJuYWwgZXJyb3I6IHVuc3VwcG9ydGVkIHR5cGUgJXMiLCBnX3R5cGVfbmFtZShHX1ZBTFVFX1RZ
UEUoZ3ZhbCkpKTsNCisgICAgICAgICAgICBNQUtFX1NURF9aVkFMKCp2YWx1ZSk7DQorICAgICAg
ICAgICAgWlZBTF9OVUxMKCp2YWx1ZSk7DQorICAgICAgICAgICAgcmV0dXJuIEZBSUxVUkU7DQor
ICAgIH0NCisNCisgICAgcmV0dXJuIFNVQ0NFU1M7DQorfQ0KKy8qIH19fSAqLw0KKw0KKy8qIHt7
eyBQSFBfR1RLX0FQSSBwaHBnX2d2YWx1ZV9mcm9tX3p2YWwoKSAqLw0KK1BIUF9HVEtfQVBJIGlu
dCBwaHBnX2d2YWx1ZV9mcm9tX3p2YWwoR1ZhbHVlICpndmFsLCB6dmFsICoqdmFsdWUsIHplbmRf
Ym9vbCBkb191dGY4IFRTUk1MU19EQykNCit7DQorICAgIHN3aXRjaCAoR19UWVBFX0ZVTkRBTUVO
VEFMKEdfVkFMVUVfVFlQRShndmFsKSkpIHsNCisgICAgICAgIC8qDQorICAgICAgICAgKiBGb3Ig
d2hhdGV2ZXIgcmVhc29uLCB3ZSBzaG91bGQgYXBwYXJlbnRseSByZXNwZWN0IHRoYXQgdGhlIGd2
YWwgbWF5IGJlIG9mIHRoZXNlDQorICAgICAgICAgKiB0eXBlcyBhbmQgdGhleSBkbyBub3QgbmVl
ZCBhIHZhbHVlLg0KKyAgICAgICAgICovDQorICAgICAgICBjYXNlIEdfVFlQRV9JTlZBTElEOg0K
KyAgICAgICAgY2FzZSBHX1RZUEVfTk9ORToNCisgICAgICAgICAgICBicmVhazsNCisNCisgICAg
ICAgIGNhc2UgR19UWVBFX0JPT0xFQU46DQorICAgICAgICAgICAgY29udmVydF90b19ib29sZWFu
X2V4KHZhbHVlKTsNCisgICAgICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKGd2YWwsIChnYm9v
bGVhbilaX0JWQUxfUFAodmFsdWUpKTsNCisgICAgICAgICAgICBicmVhazsNCisNCisgICAgICAg
IGNhc2UgR19UWVBFX0NIQVI6DQorICAgICAgICAgICAgY29udmVydF90b19zdHJpbmdfZXgodmFs
dWUpOw0KKyAgICAgICAgICAgIGdfdmFsdWVfc2V0X2NoYXIoZ3ZhbCwgWl9TVFJWQUxfUFAodmFs
dWUpWzBdKTsNCisgICAgICAgICAgICBicmVhazsNCisNCisgICAgICAgIGNhc2UgR19UWVBFX1VD
SEFSOg0KKyAgICAgICAgICAgIGNvbnZlcnRfdG9fc3RyaW5nX2V4KHZhbHVlKTsNCisgICAgICAg
ICAgICBnX3ZhbHVlX3NldF91Y2hhcihndmFsLCAoZ3VjaGFyKVpfU1RSVkFMX1BQKHZhbHVlKVsw
XSk7DQorICAgICAgICAgICAgYnJlYWs7DQorDQorICAgICAgICBjYXNlIEdfVFlQRV9JTlQ6DQor
ICAgICAgICAgICAgY29udmVydF90b19sb25nX2V4KHZhbHVlKTsNCisgICAgICAgICAgICBnX3Zh
bHVlX3NldF9pbnQoZ3ZhbCwgKGdpbnQpWl9MVkFMX1BQKHZhbHVlKSk7DQorICAgICAgICAgICAg
YnJlYWs7DQorDQorICAgICAgICBjYXNlIEdfVFlQRV9VSU5UOg0KKyAgICAgICAgICAgIGNvbnZl
cnRfdG9fbG9uZ19leCh2YWx1ZSk7DQorICAgICAgICAgICAgZ192YWx1ZV9zZXRfdWludChndmFs
LCAoZ3VpbnQpWl9MVkFMX1BQKHZhbHVlKSk7DQorICAgICAgICAgICAgYnJlYWs7DQorDQorICAg
ICAgICBjYXNlIEdfVFlQRV9MT05HOg0KKyAgICAgICAgICAgIGNvbnZlcnRfdG9fbG9uZ19leCh2
YWx1ZSk7DQorICAgICAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyhndmFsLCAoZ2xvbmcpWl9MVkFM
X1BQKHZhbHVlKSk7DQorICAgICAgICAgICAgYnJlYWs7DQorDQorICAgICAgICBjYXNlIEdfVFlQ
RV9VTE9ORzoNCisgICAgICAgICAgICBjb252ZXJ0X3RvX2xvbmdfZXgodmFsdWUpOw0KKyAgICAg
ICAgICAgIGdfdmFsdWVfc2V0X3Vsb25nKGd2YWwsIChndWxvbmcpWl9MVkFMX1BQKHZhbHVlKSk7
DQorICAgICAgICAgICAgYnJlYWs7DQorDQorICAgICAgICBjYXNlIEdfVFlQRV9GTE9BVDoNCisg
ICAgICAgICAgICBjb252ZXJ0X3RvX2RvdWJsZV9leCh2YWx1ZSk7DQorICAgICAgICAgICAgZ192
YWx1ZV9zZXRfZmxvYXQoZ3ZhbCwgKGdmbG9hdClaX0RWQUxfUFAodmFsdWUpKTsNCisgICAgICAg
ICAgICBicmVhazsNCisNCisgICAgICAgIGNhc2UgR19UWVBFX0RPVUJMRToNCisgICAgICAgICAg
ICBjb252ZXJ0X3RvX2RvdWJsZV9leCh2YWx1ZSk7DQorICAgICAgICAgICAgZ192YWx1ZV9zZXRf
ZG91YmxlKGd2YWwsIFpfRFZBTF9QUCh2YWx1ZSkpOw0KKyAgICAgICAgICAgIGJyZWFrOw0KKw0K
KyAgICAgICAgY2FzZSBHX1RZUEVfRU5VTToNCisgICAgICAgIHsNCisgICAgICAgICAgICBnaW50
IHZhbCA9IDA7DQorICAgICAgICAgICAgaWYgKHBocGdfZ3ZhbHVlX2dldF9lbnVtKEdfVkFMVUVf
VFlQRShndmFsKSwgKnZhbHVlLCAmdmFsKSA9PSBGQUlMVVJFKSB7DQorICAgICAgICAgICAgICAg
IHJldHVybiBGQUlMVVJFOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBnX3ZhbHVlX3Nl
dF9lbnVtKGd2YWwsIHZhbCk7DQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICB9DQorDQor
ICAgICAgICBjYXNlIEdfVFlQRV9GTEFHUzoNCisgICAgICAgIHsNCisgICAgICAgICAgICBnaW50
IHZhbCA9IDA7DQorICAgICAgICAgICAgaWYgKHBocGdfZ3ZhbHVlX2dldF9mbGFncyhHX1ZBTFVF
X1RZUEUoZ3ZhbCksICp2YWx1ZSwgJnZhbCkgPT0gRkFJTFVSRSkgew0KKyAgICAgICAgICAgICAg
ICByZXR1cm4gRkFJTFVSRTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgZ192YWx1ZV9z
ZXRfZmxhZ3MoZ3ZhbCwgdmFsKTsNCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgIH0NCisN
CisgICAgICAgIGNhc2UgR19UWVBFX1NUUklORzoNCisgICAgICAgIHsNCisgICAgICAgICAgICBn
Y2hhciAqdXRmOCA9IE5VTEw7DQorICAgICAgICAgICAgZ3NpemUgdXRmOF9sZW4gPSAwOw0KKyAg
ICAgICAgICAgIHplbmRfYm9vbCBmcmVlX3V0ZjggPSAwOw0KKyAgICAgICAgICAgIGdjaGFyICpz
dHI7DQorDQorICAgICAgICAgICAgY29udmVydF90b19zdHJpbmdfZXgodmFsdWUpOw0KKyAgICAg
ICAgICAgIHN0ciA9IFpfU1RSVkFMX1BQKHZhbHVlKTsNCisgICAgICAgICAgICBpZiAoZG9fdXRm
OCkgew0KKyAgICAgICAgICAgICAgICB1dGY4ID0gcGhwZ190b191dGY4KFpfU1RSVkFMX1BQKHZh
bHVlKSwgWl9TVFJMRU5fUFAodmFsdWUpLCAmdXRmOF9sZW4sICZmcmVlX3V0ZjggVFNSTUxTX0ND
KTsNCisgICAgICAgICAgICAgICAgaWYgKHV0ZjgpIHsNCisgICAgICAgICAgICAgICAgICAgIHN0
ciA9IHV0Zjg7DQorICAgICAgICAgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgICAgICAg
ICBwaHBfZXJyb3IoRV9XQVJOSU5HLCAiQ291bGQgbm90IGNvbnZlcnQgc3RyaW5nIHRvIFVURi04
Iik7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgZ192
YWx1ZV9zZXRfc3RyaW5nKGd2YWwsIHN0cik7DQorICAgICAgICAgICAgaWYgKGZyZWVfdXRmOCkg
ew0KKyAgICAgICAgICAgICAgICBnX2ZyZWUodXRmOCk7DQorICAgICAgICAgICAgfQ0KKyAgICAg
ICAgICAgIGJyZWFrOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgY2FzZSBHX1RZUEVfUE9JTlRF
UjoNCisgICAgICAgICAgICBpZiAoWl9UWVBFX1BQKHZhbHVlKSA9PSBJU19OVUxMKSB7DQorICAg
ICAgICAgICAgICAgIGdfdmFsdWVfc2V0X3BvaW50ZXIoZ3ZhbCwgTlVMTCk7DQorICAgICAgICAg
ICAgfSBlbHNlIGlmIChaX1RZUEVfUFAodmFsdWUpID09IElTX09CSkVDVA0KKyAgICAgICAgICAg
ICAgICAgICAgICAgJiYgaW5zdGFuY2VvZl9mdW5jdGlvbihaX09CSkNFX1BQKHZhbHVlKSwgZ3Bv
aW50ZXJfY2UgVFNSTUxTX0NDKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgJiYgR19WQUxVRV9I
T0xEUyhndmFsLCAoKHBocGdfZ3BvaW50ZXJfdCopUEhQR19HRVQoKnZhbHVlKSktPmd0eXBlKSkg
ew0KKyAgICAgICAgICAgICAgICBnX3ZhbHVlX3NldF9wb2ludGVyKGd2YWwsICgocGhwZ19ncG9p
bnRlcl90KilQSFBHX0dFVCgqdmFsdWUpKS0+cG9pbnRlcik7DQorICAgICAgICAgICAgfSBlbHNl
IHsNCisgICAgICAgICAgICAgICAgcmV0dXJuIEZBSUxVUkU7DQorICAgICAgICAgICAgfQ0KKyAg
ICAgICAgICAgIGJyZWFrOw0KKw0KKyAgICAgICAgY2FzZSBHX1RZUEVfQk9YRUQ6DQorICAgICAg
ICB7DQorICAgICAgICAgICAgcGhwZ19nYm94ZWRfbWFyc2hhbF90ICpnYm07DQorDQorICAgICAg
ICAgICAgaWYgKFpfVFlQRV9QUCh2YWx1ZSkgPT0gSVNfTlVMTCkgew0KKyAgICAgICAgICAgICAg
ICBnX3ZhbHVlX3NldF9ib3hlZChndmFsLCBOVUxMKTsNCisgICAgICAgICAgICAvKg0KKyAgICAg
ICAgICAgICAqIFdlIHNob3VsZCBiZSBzYWZlIGp1c3Qgc2V0dGluZyB0aGUgenZhbCBoZXJlLCBz
aW5jZSBHX1RZUEVfUEhQX1ZBTFVFIGlzDQorICAgICAgICAgICAgICogc3VwcG9zZWQgdG8gdGFr
ZSBhbnkgenZhbCB0eXBlLg0KKyAgICAgICAgICAgICAqLw0KKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAoR19WQUxVRV9IT0xEUyhndmFsLCBHX1RZUEVfUEhQX1ZBTFVFKSkgew0KKyAgICAgICAgICAg
ICAgICBnX3ZhbHVlX3NldF9ib3hlZChndmFsLCAqdmFsdWUpOw0KKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAoWl9UWVBFX1BQKHZhbHVlKSA9PSBJU19PQkpFQ1QNCisgICAgICAgICAgICAgICAgICAg
ICAgICYmIGluc3RhbmNlb2ZfZnVuY3Rpb24oWl9PQkpDRV9QUCh2YWx1ZSksIGdib3hlZF9jZSBU
U1JNTFNfQ0MpDQorICAgICAgICAgICAgICAgICAgICAgICAmJiBHX1ZBTFVFX0hPTERTKGd2YWws
ICgocGhwZ19nYm94ZWRfdCopUEhQR19HRVQoKnZhbHVlKSktPmd0eXBlKSkgew0KKyAgICAgICAg
ICAgICAgICBnX3ZhbHVlX3NldF9ib3hlZChndmFsLCBQSFBHX0dCT1hFRCgqdmFsdWUpKTsNCisg
ICAgICAgICAgICB9IGVsc2UgaWYgKChnYm0gPSBwaHBnX2dib3hlZF9sb29rdXBfY3VzdG9tKEdf
VkFMVUVfVFlQRShndmFsKSkpKSB7DQorICAgICAgICAgICAgICAgIHJldHVybiBnYm0tPmZyb21f
enZhbCgqdmFsdWUsIGd2YWwgVFNSTUxTX0NDKTsNCisgICAgICAgICAgICB9IGVsc2UNCisgICAg
ICAgICAgICAgICAgcmV0dXJuIEZBSUxVUkU7DQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAg
ICB9DQorDQorICAgICAgICBjYXNlIEdfVFlQRV9QQVJBTToNCisgICAgICAgICAgICBpZiAocGhw
X2d0a19jaGVja19jbGFzcygqdmFsdWUsIGdwYXJhbXNwZWNfY2UpKSB7DQorICAgICAgICAgICAg
ICAgIGdfdmFsdWVfc2V0X3BhcmFtKGd2YWwsIFBIUEdfR1BBUkFNU1BFQygqdmFsdWUpKTsNCisg
ICAgICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgICAgICByZXR1cm4gRkFJTFVSRTsNCisg
ICAgICAgICAgICB9DQorICAgICAgICBicmVhazsNCisNCisgICAgICAgIGNhc2UgR19UWVBFX09C
SkVDVDoNCisgICAgICAgICAgICBpZiAoWl9UWVBFX1BQKHZhbHVlKSA9PSBJU19OVUxMKSB7DQor
ICAgICAgICAgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdChndmFsLCBOVUxMKTsNCisgICAgICAg
ICAgICB9IGVsc2UgaWYgKFpfVFlQRV9QKCp2YWx1ZSkgPT0gSVNfT0JKRUNUDQorICAgICAgICAg
ICAgICAgICAgICAgICAmJiBpbnN0YW5jZW9mX2Z1bmN0aW9uKFpfT0JKQ0VfUFAodmFsdWUpLCBn
b2JqZWN0X2NlIFRTUk1MU19DQykNCisgICAgICAgICAgICAgICAgICAgICAgICYmIEdfVFlQRV9D
SEVDS19JTlNUQU5DRV9UWVBFKFBIUEdfR09CSkVDVCgqdmFsdWUpLCBHX1ZBTFVFX1RZUEUoZ3Zh
bCkpKSB7DQorICAgICAgICAgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdChndmFsLCBQSFBHX0dP
QkpFQ1QoKnZhbHVlKSk7DQorICAgICAgICAgICAgfSBlbHNlDQorICAgICAgICAgICAgICAgIHJl
dHVybiBGQUlMVVJFOw0KKyAgICAgICAgICAgIGJyZWFrOw0KKw0KKyAgICAgICAgY2FzZSBHX1RZ
UEVfSU5URVJGQUNFOg0KKyAgICAgICAgICAgIGlmIChnX3R5cGVfaXNfYShHX1ZBTFVFX1RZUEUo
Z3ZhbCksIEdfVFlQRV9PQkpFQ1QpICYmDQorICAgICAgICAgICAgICAgIFpfVFlQRV9QUCh2YWx1
ZSkgPT0gSVNfT0JKRUNUICYmDQorICAgICAgICAgICAgICAgIEdfVFlQRV9DSEVDS19JTlNUQU5D
RV9UWVBFKFBIUEdfR09CSkVDVCgqdmFsdWUpLCBHX1ZBTFVFX1RZUEUoZ3ZhbCkpKSB7DQorICAg
ICAgICAgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdChndmFsLCBQSFBHX0dPQkpFQ1QoKnZhbHVl
KSk7DQorICAgICAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICAgICAgcGhwX2Vycm9yKEVf
V0FSTklORywgIkNvdWxkIG5vdCBhY2Nlc3MgaW50ZXJmYWNlICVzIiwgZ190eXBlX25hbWUoR19W
QUxVRV9UWVBFKGd2YWwpKSk7DQorICAgICAgICAgICAgICAgIHJldHVybiBGQUlMVVJFOw0KKyAg
ICAgICAgICAgIH0NCisgICAgICAgICAgICBicmVhazsNCisNCisgICAgICAgIGRlZmF1bHQ6DQor
ICAgICAgICAgICAgcGhwX2Vycm9yKEVfV0FSTklORywgIlBIUC1HVEsgaW50ZXJuYWwgZXJyb3I6
IHVuc3VwcG9ydGVkIHR5cGUgJXMiLCBnX3R5cGVfbmFtZShHX1ZBTFVFX1RZUEUoZ3ZhbCkpKTsN
CisgICAgICAgICAgICByZXR1cm4gRkFJTFVSRTsNCisNCisgICAgfQ0KKw0KKyAgICByZXR1cm4g
U1VDQ0VTUzsNCit9DQorLyogfX19ICovDQorDQorLyoge3t7IFBIUF9HVEtfQVBJIHBocGdfcGFy
YW1fZ3ZhbHVlX3RvX3p2YWwoKSAqLw0KK1BIUF9HVEtfQVBJIGludCBwaHBnX3BhcmFtX2d2YWx1
ZV90b196dmFsKGNvbnN0IEdWYWx1ZSAqZ3ZhbCwgenZhbCAqKnZhbHVlLCB6ZW5kX2Jvb2wgY29w
eV9ib3hlZCwgY29uc3QgR1BhcmFtU3BlYyAqcHNwZWMgVFNSTUxTX0RDKQ0KK3sNCisgICAgaWYg
KEdfSVNfUEFSQU1fU1BFQ19VTklDSEFSKHBzcGVjKSkgew0KKyAgICAgICAgLyogVE9ETyAqLw0K
KyAgICAgICAgcmV0dXJuIEZBSUxVUkU7DQorICAgIH0gZWxzZSB7DQorICAgICAgICByZXR1cm4g
cGhwZ19ndmFsdWVfdG9fenZhbChndmFsLCB2YWx1ZSwgY29weV9ib3hlZCwgVFJVRSBUU1JNTFNf
Q0MpOw0KKyAgICB9DQorfQ0KKy8qIH19fSAqLw0KKw0KKy8qIHt7eyBQSFBfR1RLX0FQSSBwaHBn
X3BhcmFtX2d2YWx1ZV9mcm9tX3p2YWwoKSAqLw0KK1BIUF9HVEtfQVBJIGludCBwaHBnX3BhcmFt
X2d2YWx1ZV9mcm9tX3p2YWwoR1ZhbHVlICpndmFsLCB6dmFsICoqdmFsdWUsIGNvbnN0IEdQYXJh
bVNwZWMgKnBzcGVjIFRTUk1MU19EQykNCit7DQorICAgIGlmIChHX0lTX1BBUkFNX1NQRUNfVU5J
Q0hBUihwc3BlYykpIHsNCisgICAgICAgIC8qIFRPRE8gKi8NCisgICAgICAgIHJldHVybiBGQUlM
VVJFOw0KKyAgICB9IGVsc2Ugew0KKyAgICAgICAgcmV0dXJuIHBocGdfZ3ZhbHVlX2Zyb21fenZh
bChndmFsLCB2YWx1ZSwgVFJVRSBUU1JNTFNfQ0MpOw0KKyAgICB9DQorfQ0KKy8qIH19fSAqLw0K
Kw0KKy8qIHt7eyBQSFBfR1RLX0FQSSBwaHBnX2d2YWx1ZXNfdG9fYXJyYXkoKSAqLw0KK1BIUF9H
VEtfQVBJIHp2YWwgKnBocGdfZ3ZhbHVlc190b19hcnJheShjb25zdCBHVmFsdWUgKnZhbHVlcywg
dWludCBuX3ZhbHVlcykNCit7DQorCXp2YWwgKmhhc2g7DQorCXp2YWwgKml0ZW0gPSBOVUxMOw0K
KwlpbnQgaTsNCisJaW50IHZhbHVlX2NvdW50Ow0KKw0KKwlNQUtFX1NURF9aVkFMKGhhc2gpOw0K
KwlhcnJheV9pbml0KGhhc2gpOw0KKwl2YWx1ZV9jb3VudCA9IG5fdmFsdWVzOw0KKw0KKwlmb3Ig
KGkgPSAwOyBpIDwgdmFsdWVfY291bnQ7IGkrKykgew0KKwkJLy9pdGVtID0gcGhwZ19ndmFsdWVf
dG9fenZhbCgmdmFsdWVzW2ldLCBGQUxTRSk7DQorCQlpZiAoIWl0ZW0pIHsNCisJCQlNQUtFX1NU
RF9aVkFMKGl0ZW0pOw0KKwkJCVpWQUxfTlVMTChpdGVtKTsNCisJCX0NCisJCXplbmRfaGFzaF9u
ZXh0X2luZGV4X2luc2VydChaX0FSUlZBTF9QKGhhc2gpLCAmaXRlbSwgc2l6ZW9mKHp2YWwgKiks
IE5VTEwpOw0KKwl9DQorDQorCXJldHVybiBoYXNoOw0KK30NCisvKiB9fX0gKi8NCisNCisvKiB7
e3sgUEhQX0dUS19BUEkgcGhwZ19ndmFsdWVfZ2V0X2VudW0oKSAqLw0KK1BIUF9HVEtfQVBJIGlu
dCBwaHBnX2d2YWx1ZV9nZXRfZW51bShHVHlwZSBlbnVtX3R5cGUsIHp2YWwgKmVudW1fdmFsLCBn
aW50ICpyZXN1bHQpDQorew0KKyAgICBpZiAocmVzdWx0ID09IE5VTEwpDQorICAgICAgICByZXR1
cm4gRkFJTFVSRTsNCisNCisgICAgaWYgKGVudW1fdmFsID09IE5VTEwpIHsNCisgICAgICAgICpy
ZXN1bHQgPSAwOw0KKyAgICB9IGVsc2UgaWYgKFpfVFlQRV9QKGVudW1fdmFsKSA9PSBJU19MT05H
KSB7DQorICAgICAgICAqcmVzdWx0ID0gWl9MVkFMX1AoZW51bV92YWwpOw0KKyAgICB9IGVsc2Ug
aWYgKFpfVFlQRV9QKGVudW1fdmFsKSA9PSBJU19TVFJJTkcpIHsNCisgICAgICAgIEdFbnVtQ2xh
c3MgKmVjbGFzcyA9IE5VTEw7DQorICAgICAgICBHRW51bVZhbHVlICppbmZvID0gTlVMTDsNCisN
CisgICAgICAgIGlmIChlbnVtX3R5cGUgIT0gR19UWVBFX05PTkUpIHsNCisgICAgICAgICAgICBl
Y2xhc3MgPSBHX0VOVU1fQ0xBU1MoZ190eXBlX2NsYXNzX3JlZihlbnVtX3R5cGUpKTsNCisgICAg
ICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgcGhwX2Vycm9yKEVfV0FSTklORywgIlBIUC1HVEsg
aW50ZXJuYWwgZXJyb3I6IGNvdWxkIG5vdCBvYnRhaW4gdGhlIHR5cGUgb2YgZW51bSIpOw0KKyAg
ICAgICAgICAgIHJldHVybiBGQUlMVVJFOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaW5mbyA9
IGdfZW51bV9nZXRfdmFsdWVfYnlfbmFtZShlY2xhc3MsIFpfU1RSVkFMX1AoZW51bV92YWwpKTsN
CisNCisgICAgICAgIGlmIChpbmZvID09IE5VTEwpIHsNCisgICAgICAgICAgICBpbmZvID0gZ19l
bnVtX2dldF92YWx1ZV9ieV9uaWNrKGVjbGFzcywgWl9TVFJWQUxfUChlbnVtX3ZhbCkpOw0KKyAg
ICAgICAgfQ0KKyAgICAgICAgZ190eXBlX2NsYXNzX3VucmVmKGVjbGFzcyk7DQorICAgICAgICAN
CisgICAgICAgIGlmIChpbmZvICE9IE5VTEwpIHsNCisgICAgICAgICAgICAqcmVzdWx0ID0gaW5m
by0+dmFsdWU7DQorICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgIHBocF9lcnJvcihFX1dB
Uk5JTkcsICJQSFAtR1RLIGludGVybmFsIGVycm9yOiBjb3VsZCBub3QgY29udmVydCAnJXMnIHRv
IGVudW0iLCBaX1NUUlZBTF9QKGVudW1fdmFsKSk7DQorICAgICAgICAgICAgcmV0dXJuIEZBSUxV
UkU7DQorICAgICAgICB9DQorICAgIH0gZWxzZSB7DQorICAgICAgICBwaHBfZXJyb3IoRV9XQVJO
SU5HLCAiUEhQLUdUSyBpbnRlcm5hbCBlcnJvcjogZW51bXMgbXVzdCBiZSBzdHJpbmdzIG9yIGlu
dGVnZXJzIik7DQorICAgICAgICByZXR1cm4gRkFJTFVSRTsNCisgICAgfQ0KKw0KKyAgICByZXR1
cm4gU1VDQ0VTUzsNCit9DQorLyogfX19ICovDQorDQorLyoge3t7IFBIUF9HVEtfQVBJIHBocGdf
Z3ZhbHVlX2dldF9mbGFncygpICovDQorUEhQX0dUS19BUEkgaW50IHBocGdfZ3ZhbHVlX2dldF9m
bGFncyhHVHlwZSBmbGFnc190eXBlLCB6dmFsICpmbGFnc192YWwsIGdpbnQgKnJlc3VsdCkNCit7
DQorICAgIEdGbGFnc0NsYXNzICpmY2xhc3MgPSBOVUxMOw0KKyAgICBHRmxhZ3NWYWx1ZSAqaW5m
byA9IE5VTEw7DQorDQorICAgIGlmIChyZXN1bHQgPT0gTlVMTCkNCisgICAgICAgIHJldHVybiBG
QUlMVVJFOw0KKw0KKyAgICBpZiAoZmxhZ3NfdmFsID09IE5VTEwpIHsNCisgICAgICAgICpyZXN1
bHQgPSAwOw0KKyAgICB9IGVsc2UgaWYgKFpfVFlQRV9QKGZsYWdzX3ZhbCkgPT0gSVNfTE9ORykg
ew0KKyAgICAgICAgKnJlc3VsdCA9IFpfTFZBTF9QKGZsYWdzX3ZhbCk7DQorICAgIH0gZWxzZSBp
ZiAoWl9UWVBFX1AoZmxhZ3NfdmFsKSA9PSBJU19TVFJJTkcpIHsNCisgICAgICAgIGlmIChmbGFn
c190eXBlICE9IEdfVFlQRV9OT05FKSB7DQorICAgICAgICAgICAgZmNsYXNzID0gR19GTEFHU19D
TEFTUyhnX3R5cGVfY2xhc3NfcmVmKGZsYWdzX3R5cGUpKTsNCisgICAgICAgIH0gZWxzZSB7DQor
ICAgICAgICAgICAgcGhwX2Vycm9yKEVfV0FSTklORywgIlBIUC1HVEsgaW50ZXJuYWwgZXJyb3I6
IGNvdWxkIG5vdCBvYnRhaW4gdGhlIHR5cGUgb2YgZmxhZ3MiKTsNCisgICAgICAgICAgICByZXR1
cm4gRkFJTFVSRTsNCisgICAgICAgIH0NCisNCisgICAgICAgIGluZm8gPSBnX2ZsYWdzX2dldF92
YWx1ZV9ieV9uYW1lKGZjbGFzcywgWl9TVFJWQUxfUChmbGFnc192YWwpKTsNCisgICAgICAgIGlm
IChpbmZvID09IE5VTEwpIHsNCisgICAgICAgICAgICBpbmZvID0gZ19mbGFnc19nZXRfdmFsdWVf
YnlfbmljayhmY2xhc3MsIFpfU1RSVkFMX1AoZmxhZ3NfdmFsKSk7DQorICAgICAgICB9DQorICAg
ICAgICBnX3R5cGVfY2xhc3NfdW5yZWYoZmNsYXNzKTsNCisNCisgICAgICAgIGlmIChpbmZvICE9
IE5VTEwpIHsNCisgICAgICAgICAgICAqcmVzdWx0ID0gaW5mby0+dmFsdWU7DQorICAgICAgICB9
IGVsc2Ugew0KKyAgICAgICAgICAgIHBocF9lcnJvcihFX1dBUk5JTkcsICJQSFAtR1RLIGludGVy
bmFsIGVycm9yOiBjb3VsZCBub3QgY29udmVydCAnJXMnIHRvIGZsYWdzIiwgWl9TVFJWQUxfUChm
bGFnc192YWwpKTsNCisgICAgICAgICAgICByZXR1cm4gRkFJTFVSRTsNCisgICAgICAgIH0NCisg
ICAgfSBlbHNlIGlmIChaX1RZUEVfUChmbGFnc192YWwpID09IElTX0FSUkFZKSB7DQorCQl6dmFs
ICoqZmxhZzsNCisNCisgICAgICAgICpyZXN1bHQgPSAwOw0KKyAgICAgICAgaWYgKGZsYWdzX3R5
cGUgIT0gR19UWVBFX05PTkUpIHsNCisgICAgICAgICAgICBmY2xhc3MgPSBHX0ZMQUdTX0NMQVNT
KGdfdHlwZV9jbGFzc19yZWYoZmxhZ3NfdHlwZSkpOw0KKyAgICAgICAgfSBlbHNlIHsNCisgICAg
ICAgICAgICBwaHBfZXJyb3IoRV9XQVJOSU5HLCAiUEhQLUdUSyBpbnRlcm5hbCBlcnJvcjogY291
bGQgbm90IG9idGFpbiB0aGUgdHlwZSBvZiBmbGFncyIpOw0KKyAgICAgICAgICAgIHJldHVybiBG
QUlMVVJFOw0KKyAgICAgICAgfQ0KKw0KKwkJZm9yICh6ZW5kX2hhc2hfaW50ZXJuYWxfcG9pbnRl
cl9yZXNldChaX0FSUlZBTF9QKGZsYWdzX3ZhbCkpOw0KKwkJCSB6ZW5kX2hhc2hfZ2V0X2N1cnJl
bnRfZGF0YShaX0FSUlZBTF9QKGZsYWdzX3ZhbCksICh2b2lkICoqKSZmbGFnKSA9PSBTVUNDRVNT
Ow0KKwkJCSB6ZW5kX2hhc2hfbW92ZV9mb3J3YXJkKFpfQVJSVkFMX1AoZmxhZ3NfdmFsKSkpIHsN
CisNCisJCQlpZiAoWl9UWVBFX1BQKGZsYWcpID09IElTX0xPTkcpIHsNCisJCQkJKnJlc3VsdCB8
PSBaX0xWQUxfUFAoZmxhZyk7DQorICAgICAgICAgICAgfSBlbHNlIGlmIChaX1RZUEVfUFAoZmxh
ZykgPT0gSVNfU1RSSU5HKSB7DQorICAgICAgICAgICAgICAgIGluZm8gPSBnX2ZsYWdzX2dldF92
YWx1ZV9ieV9uYW1lKGZjbGFzcywgWl9TVFJWQUxfUFAoZmxhZykpOw0KKyAgICAgICAgICAgICAg
ICBpZiAoaW5mbyA9PSBOVUxMKSB7DQorICAgICAgICAgICAgICAgICAgICBpbmZvID0gZ19mbGFn
c19nZXRfdmFsdWVfYnlfbmljayhmY2xhc3MsIFpfU1RSVkFMX1BQKGZsYWcpKTsNCisgICAgICAg
ICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBpZiAoaW5mbyAhPSBOVUxMKSB7DQorICAgICAg
ICAgICAgICAgICAgICAqcmVzdWx0IHw9IGluZm8tPnZhbHVlOw0KKyAgICAgICAgICAgICAgICB9
IGVsc2Ugew0KKyAgICAgICAgICAgICAgICAgICAgcGhwX2Vycm9yKEVfV0FSTklORywgIlBIUC1H
VEsgaW50ZXJuYWwgZXJyb3I6IGNvdWxkIG5vdCBjb252ZXJ0ICclcycgdG8gZmxhZ3MiLCBaX1NU
UlZBTF9QUChmbGFnKSk7DQorICAgICAgICAgICAgICAgICAgICBnX3R5cGVfY2xhc3NfdW5yZWYo
ZmNsYXNzKTsNCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUlMVVJFOw0KKyAgICAgICAg
ICAgICAgICB9DQorCQkJfSBlbHNlIHsNCisJCQkJcGhwX2Vycm9yKEVfV0FSTklORywgIlBIUC1H
VEsgZmxhZyBhcnJheXMgY2FuIGNvbnRhaW4gb25seSBpbnRlZ2VycyBvciBzdHJpbmdzIik7DQor
ICAgICAgICAgICAgICAgIGdfdHlwZV9jbGFzc191bnJlZihmY2xhc3MpOw0KKwkJCQlyZXR1cm4g
MDsNCisJCQl9DQorCQl9DQorICAgICAgICBnX3R5cGVfY2xhc3NfdW5yZWYoZmNsYXNzKTsNCisg
ICAgfSBlbHNlIHsNCisgICAgICAgIHBocF9lcnJvcihFX1dBUk5JTkcsICJQSFAtR1RLIGZsYWdz
IG11c3QgYmUgc3RyaW5ncywgaW50ZWdlcnMsIG9yIGFycmF5cyBvZiBzdHJpbmdzIG9yIGludGVn
ZXJzIik7DQorICAgICAgICByZXR1cm4gRkFJTFVSRTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4g
U1VDQ0VTUzsNCit9DQorLyogfX19ICovDQorDQorI2VuZGlmDQorDQorLyogdmltOiBzZXQgZmRt
PW1hcmtlciBldCA6ICovDQpkaWZmIC0tZ2l0IGEvd2luMzIvY29uZmlnLnczMi5pbiBiL3dpbjMy
L2NvbmZpZy53MzIuaW4KaW5kZXggODhlMjk1ZS4uZmFmYTYxZSAxMDA2NDQKLS0tIGEvd2luMzIv
Y29uZmlnLnczMi5pbgorKysgYi93aW4zMi9jb25maWcudzMyLmluCkBAIC0xLDE1NyArMSwxNjIg
QEAKLS8vIHZpbTpmdD1qYXZhc2NyaXB0Ci0vLyAkSWQkCi0vLyAiTWFzdGVyIiBjb25maWcgZmls
ZTsgdGhpbmsgb2YgaXQgYXMgYSBjb25maWd1cmUuaW4gZXF1aXZhbGVudC4KLQotLy8gTVNWQyB2
ZXJzaW9uIHRhYmxlCi12YXIgTVNWQ1ZFUlMgPSBbXTsKLU1TVkNWRVJTWzEyMDBdID0gJ01TVkM2
IChWaXN1YWwgQysrIDYuMCknOwotTVNWQ1ZFUlNbMTMwMF0gPSAnTVNWQzcgKFZpc3VhbCBDKysg
MjAwMiknOwotTVNWQ1ZFUlNbMTMxMF0gPSAnTVNWQzcuMSAoVmlzdWFsIEMrKyAyMDAzKSc7Ci1N
U1ZDVkVSU1sxNDAwXSA9ICdNU1ZDOCAoVmlzdWFsIEMrKyAyMDA1KSc7Ci1NU1ZDVkVSU1sxNTAw
XSA9ICdNU1ZDOSAoVmlzdWFsIEMrKyAyMDA4KSc7Ci1NU1ZDVkVSU1sxNjAwXSA9ICdNU1ZDMTAg
KFZpc3VhbCBDKysgMjAxMCknOwotCi1TVERPVVQuV3JpdGVCbGFua0xpbmVzKDEpOwotCi1DTCA9
IFBBVEhfUFJPRygnY2wnKTsKLQotLy8gYXZvaWQgcGlja2luZyB1cCBtaWRuaWdodCBjb21tYW5k
ZXIgZnJvbSBjeWd3aW4KLVBBVEhfUFJPRygnbWMnLCBXc2hTaGVsbC5FbnZpcm9ubWVudCgiUHJv
Y2VzcyIpLkl0ZW0oIlBBVEgiKSk7Ci1QQVRIX1BST0coJ3JjJywgV3NoU2hlbGwuRW52aXJvbm1l
bnQoIlByb2Nlc3MiKS5JdGVtKCJQQVRIIikpOwotCi0vKiBjeWd3aW4gc2hpcHMgd2l0aCAnbGlu
ay5leGUnLiBBdm9pZCBzZWFyY2hpbmcgdGhlIGN5Z3dpbiBwYXRoIGZvciB0aGlzLCBhcyB3ZSB3
YW50IHRoZSBNUyBsaW5rZXIgKi8KLVBBVEhfUFJPRygnbGluaycsIFdzaFNoZWxsLkVudmlyb25t
ZW50KCJQcm9jZXNzIikuSXRlbSgiUEFUSCIpLCAiTEQiKTsKLVBBVEhfUFJPRygnbm1ha2UnKTsK
LQotLy8gY2hlY2sgZm9yIGdyZXAgYW5kIHNlZCEKLWlmICghUEFUSF9QUk9HKCdncmVwJywgV3No
U2hlbGwuRW52aXJvbm1lbnQoIlByb2Nlc3MiKS5JdGVtKCJQQVRIIikpIHx8Ci0JIVBBVEhfUFJP
Rygnc2VkJywgV3NoU2hlbGwuRW52aXJvbm1lbnQoIlByb2Nlc3MiKS5JdGVtKCJQQVRIIikpKSB7
Ci0gCUVSUk9SKCJncmVwIGFuZCBzZWQgYXJlIHJlcXVpcmVkIik7Ci19IAotCi0vLyB3ZSBkb24n
dCB3YW50IHRvIGRlZmluZSBMSUIsIGFzIHRoYXQgd2lsbCBvdmVycmlkZSB0aGUgZGVmYXVsdCBs
aWJyYXJ5IHBhdGggc2V0IGluIHRoYXQgZW52IHZhcgotUEFUSF9QUk9HKCdsaWInLCBudWxsLCAn
TUFLRV9MSUInKTsKLVBBVEhfUFJPRygncGhwJyk7Ci0KLVNURE9VVC5Xcml0ZUJsYW5rTGluZXMo
MSk7Ci0KLWlmIChDTCkgewotCXZhciBWQ1ZFUlMgPSBwcm9iZV9tc3ZjX2NvbXBpbGVyX3ZlcnNp
b24oQ0wpOwotCi0JaWYgKHR5cGVvZihNU1ZDVkVSU1tWQ1ZFUlNdKSA9PSB1bmRlZmluZWQpIHsK
LQkJLy8gTGV0cyBqdXN0IGJhaWwgb3V0IGlmIHdlIGRvbnQga25vdyB0aGUgTVNWQyB2ZXJzaW9u
Ci0JCUVSUk9SKCJNUyBDKysgY29tcGlsZXIgaXMgcmVxdWlyZWQgLS0gdW5hYmxlIHRvIGRldGVj
dCB2ZXJzaW9uIik7Ci0JfSBlbHNlIHsKLQkJU1RET1VULldyaXRlTGluZSgiRGV0ZWN0ZWQgY29t
cGlsZXIgdmVyc2lvbjogIiArIE1TVkNWRVJTW1ZDVkVSU10pOwotIAl9Ci19IGVsc2UgewotCUVS
Uk9SKCJNUyBDKysgY29tcGlsZXIgaXMgcmVxdWlyZWQiKTsKLX0KLQotU1RET1VULldyaXRlQmxh
bmtMaW5lcygxKTsKLQotQVJHX1dJVEgoJ3BocC1idWlsZCcsICdQYXRoIHRvIHdoZXJlIHlvdSBl
eHRyYWN0ZWQgaHR0cDovL3d3dy5waHAubmV0L2V4dHJhL3dpbjMyYnVpbGQuemlwLiBBc3N1bWVz
IHRoYXQgaXQgaXMgYSBzaWJsaW5nIG9mIHRoaXMgc291cmNlIGRpciAoLi5cXHBocF9idWlsZCkg
aWYgbm90IHNwZWNpZmllZCcsICdubycpOwotQVJHX1dJVEgoJ2N5Z3dpbicsICdQYXRoIHRvIGN5
Z3dpbiB1dGlsaXRpZXMgb24geW91ciBzeXN0ZW0nLCAnXFxjeWd3aW4nKTsKLUFSR19FTkFCTEUo
J2dkJywgJ1BocCBoYXMgc3RhdGljIGdkJywgJ25vJyk7Ci1BUkdfRU5BQkxFKCd6dHMnLCAnRGlz
YWJsZSB0aHJlYWQgc2FmZXR5JywgJ3llcycpOwotCi0vLyBzdGljayBvYmplY3RzIHNvbWV3aGVy
ZSBvdXRzaWRlIG9mIHRoZSBzb3VyY2UgdHJlZQotQVJHX0VOQUJMRSgnb2JqZWN0LW91dC1kaXIn
LCAnQWx0ZXJuYXRpdmUgbG9jYXRpb24gZm9yIGJpbmFyeSBvYmplY3RzIGR1cmluZyBidWlsZCcs
ICcnKTsKLWlmIChQSFBfR1RLX09CSkVDVF9PVVRfRElSLmxlbmd0aCkgewotCWlmICghRlNPLkZv
bGRlckV4aXN0cyhQSFBfR1RLX09CSkVDVF9PVVRfRElSKSkgewotCQlFUlJPUignWW91ciBjaG9z
ZW4gb3V0cHV0IGRpcmVjdG9yeSAnICsgUEhQX0dUS19PQkpFQ1RfT1VUX0RJUiArICcgZG9lcyBu
b3QgZXhpc3QnKTsKLQl9Ci0JUEhQX0dUS19PQkpFQ1RfT1VUX0RJUiArPSAnXFwnOwotfQotCi1B
UkdfRU5BQkxFKCdkZWJ1ZycsICdDb21waWxlIHdpdGggZGVidWdnaW5nIHN5bWJvbHMnLCAibm8i
KTsKLUFSR19FTkFCTEUoJ2RlYnVnLXBhY2snLCAnUmVsZWFzZSBiaW5hcmllcyB3aXRoIGV4dGVy
bmFsIGRlYnVnIHN5bWJvbHMgKC0tZW5hYmxlLWRlYnVnIG11c3Qgbm90IGJlIHNwZWNpZmllZCkn
LCAnbm8nKTsKLWlmIChQSFBfR1RLX0RFQlVHID09ICJ5ZXMiICYmIFBIUF9HVEtfREVCVUdfUEFD
SyA9PSAieWVzIikgewotCUVSUk9SKCJVc2Ugb2YgYm90aCAtLWVuYWJsZS1kZWJ1ZyBhbmQgLS1l
bmFibGUtZGVidWctcGFjayBub3QgYWxsb3dlZC4iKTsKLX0KLQotLy8gQ29tcGlsZSBkaXJlY3Rv
cnkKLWlmIChQSFBfR1RLX0RFQlVHID09ICJ5ZXMiICYmIFBIUF9HVEtfWlRTID09ICJ5ZXMiKSB7
Ci0JREVGSU5FKCJCVUlMRF9ESVIiLCBQSFBfR1RLX09CSkVDVF9PVVRfRElSICsgIkRlYnVnX1RT
Iik7Ci0JREVGSU5FKCJQSFBfTElCIiwgInBocDV0c19kZWJ1Zy5saWIiKTsKLQlQSFBfTElCID0g
InBocDV0c19kZWJ1Zy5saWIiOwotfSBlbHNlIGlmIChQSFBfR1RLX0RFQlVHID09ICJ5ZXMiKSB7
Ci0JREVGSU5FKCJCVUlMRF9ESVIiLCBQSFBfR1RLX09CSkVDVF9PVVRfRElSICsgIkRlYnVnIik7
Ci0JREVGSU5FKCJQSFBfTElCIiwgInBocDVfZGVidWcubGliIik7Ci0JUEhQX0xJQiA9ICJwaHA1
X2RlYnVnLmxpYiI7Ci19IGVsc2UgaWYgKFBIUF9HVEtfWlRTID09ICJ5ZXMiKSB7Ci0JREVGSU5F
KCJCVUlMRF9ESVIiLCBQSFBfR1RLX09CSkVDVF9PVVRfRElSICsgIlJlbGVhc2VfVFMiKTsKLQlE
RUZJTkUoIlBIUF9MSUIiLCAicGhwNXRzLmxpYiIpOwotCVBIUF9MSUIgPSAicGhwNXRzLmxpYiI7
Ci19IGVsc2UgewotCURFRklORSgiQlVJTERfRElSIiwgUEhQX0dUS19PQkpFQ1RfT1VUX0RJUiAr
ICJSZWxlYXNlIik7Ci0JREVGSU5FKCJQSFBfTElCIiwgInBocDUubGliIik7Ci0JUEhQX0xJQiA9
ICJwaHA1LmxpYiI7Ci19Ci1pZiAoUEhQX0dUS19QSFBfQlVJTEQgPT0gJ25vJykgewotCWlmIChG
U08uRm9sZGVyRXhpc3RzKCIuLlxccGhwX2d0a19idWlsZCIpKSB7Ci0JCVBIUF9HVEtfUEhQX0JV
SUxEID0gIi4uXFxwaHBfZ3RrX2J1aWxkIjsKLQl9IGVsc2UgaWYgKEZTTy5Gb2xkZXJFeGlzdHMo
Ii4uXFxwaHBfYnVpbGQiKSkgewotCQlQSFBfR1RLX1BIUF9CVUlMRCA9ICIuLlxccGhwX2J1aWxk
IjsKLQl9IGVsc2UgaWYgKEZTTy5Gb2xkZXJFeGlzdHMoIi4uXFx3aW4zMmJ1aWxkIikpIHsKLQkJ
UEhQX0dUS19QSFBfQlVJTEQgPSAiLi5cXHdpbjMyYnVpbGQiOwotCX0gZWxzZSBpZiAoRlNPLkZv
bGRlckV4aXN0cygiLi5cXHBocC13aW4zMi1kZXZcXHBocF9idWlsZCIpKSB7Ci0JCVBIUF9HVEtf
UEhQX0JVSUxEID0gIi4uXFxwaHAtd2luMzItZGV2XFxwaHBfYnVpbGQiOwotCX0KLX0KLQotdmFy
IHBocF91c3VhbF9pbmNsdWRlX3N1c3BlY3RzID0gUEhQX0dUS19QSFBfQlVJTEQ7Ci12YXIgcGhw
X3VzdWFsX2xpYl9zdXNwZWN0cyA9IFBIUF9HVEtfUEhQX0JVSUxEOwotCi1BUkdfSVMoJ2FsbCcs
ICdDb25maWd1cmUgYWxsIGF2YWlsYWJsZSBleHRlbnNpb25zJywgJ25vJyk7Ci0KLURFRklORSgi
UEhQR1RLRExMIiwgInBocF9ndGsyLmRsbCIpOwotREVGSU5FKCJQSFBHVEtMSUIiLCAicGhwX2d0
azIubGliIik7Ci1nZXRfdmVyc2lvbl9udW1iZXJzKCk7Ci0vKiBwaWNrIHVwIHRoZSB2ZXJzaW9u
IGZyb20gZ3RrL2d0a3ZlcnNpb24uaCAqLwotZ2V0X2d0a19saWJ2ZXJzaW9uKCk7Ci0KLS8vIEdl
bmVyYWwgbGluayBmbGFncwotREVGSU5FKCJMREZMQUdTIiwgIi9ub2xvZ28iKTsKLS8vIEdlbmVy
YWwgRExMIGxpbmsgZmxhZ3MKLURFRklORSgiRExMX0xERkxBR1MiLCAiL2RsbCAvbWFjaGluZTpJ
Mzg2Iik7Ci0vLyBQSFAtR1RLIERMTCBsaW5rIGZsYWdzCi1ERUZJTkUoIkxERkxBR1NfUEhQX0dU
SyIsICIkKERMTF9MREZMQUdTKSIpOwotCi0vLyBHZW5lcmFsIGxpYnMKLURFRklORSgiTElCUyIs
ICJrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMy
LmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIik7Ci0KLWlmIChQSFBfR1RL
X0RFQlVHID09ICJ5ZXMiKSB7Ci0JREVGSU5FKCJDRkxBR1MiLCAiL25vbG9nbyAvTERkIC9NRGQg
L0dtIC9aSSAvR1ogL0kgLiAvSSAuLlxcIC9JIC4uXFwuLiAvSSBtYWluIC9JIC4uXFxtYWluIC9J
IGV4dCAvSSAuLlxcZXh0IC9EIFpFTkRfV0lOMzIgL0QgWkVORF9ERUJVRz0xIC9EIFBIUF9XSU4z
MiAvRCBXSU4zMiAvRCBfREVCVUcgL0QgX1dJTkRPV1MgL0QgX01CQ1MgL0QgX1VTUkRMTCIpOwot
CUFERF9GTEFHKCJMREZMQUdTIiwgIi9kZWJ1ZyIpOwotCi19IGVsc2UgewotCURFRklORSgiQ0ZM
QUdTIiwgIi9ub2xvZ28gL01EIC9XMyAvR1ggL08yIC9JIC4gL0kgLi5cXCAvSSAuLlxcLi4gL0kg
bWFpbiAvSSAuLlxcbWFpbiAvSSBleHQgL0kgLi5cXGV4dCAvRCBaRU5EX1dJTjMyIC9EIFpFTkRf
REVCVUc9MCAvRCBQSFBfV0lOMzIgL0QgV0lOMzIgL0QgTkRFQlVHIC9EIF9XSU5ET1dTIC9EIF9N
QkNTIC9EIF9VU1JETEwiKTsKLQkvLyBHZW5lcmF0ZSBleHRlcm5hbCBkZWJ1ZyBmaWxlcyB3aGVu
IC0tZW5hYmxlLWRlYnVnLXBhY2sgaXMgc3BlY2lmaWVkCi0JaWYgKFBIUF9HVEtfREVCVUdfUEFD
SyA9PSAieWVzIikgewotCSAJQUREX0ZMQUcoIkNGTEFHUyIsICIvWmkiKTsKLQkgCUFERF9GTEFH
KCJMREZMQUdTIiwgIi9pbmNyZW1lbnRhbDpubyAvZGVidWcgL29wdDpyZWYsaWNmIik7Ci0JIH0K
LX0KLQotaWYgKFBIUF9HVEtfWlRTID09ICJ5ZXMiKSB7Ci0JIAlBRERfRkxBRygiQ0ZMQUdTIiwg
Ii9EIFpUUz0xIik7Ci0JIH0KLQotaWYgKFZDVkVSUyA8IDE0MDApIHsKLQkvLyBFbmFibGUgYXV0
b21hdGljIHByZWNvbXBpbGVkIGhlYWRlcnMKLQlBRERfRkxBRygnQ0ZMQUdTJywgJy9ZWCAvYycp
OwotfSBlbHNlIHsKLQkvLyBmdW4gc3R1ZmY6IE1TIGRlcHJlY2F0ZWQgQU5TSSBzdGRpbyBhbmQg
c2ltaWxhciBmdW5jdGlvbnMgLSBkaXNhYmxlIHdhcm5pbmdzCi0JLy8gR1MgaGFyZGVucyB0aGUg
YmluYXJ5IGFnYWluc3QgYnVmZmVyIG92ZXJydW5zCi0JQUREX0ZMQUcoJ0NGTEFHUycsICcvR1Mg
L3dkNDk5NiAnKTsKLX0KLQotaWYgKFBIUF9HVEtfR0QgPT0gInllcyIpIHsKLQlBRERfRkxBRygn
Q0ZMQUdTJywgJy9EIEhBVkVfR0RfQlVORExFRD0xJyk7IAotfQotCi1wcm9iZV9iYXNpY19oZWFk
ZXJzKCk7Ci0KLUFERF9TT1VSQ0VTKCJtYWluIiwgInBocF9ndGsuYyBwaHBfZ3RrX2V4dC53MzIu
YyBwaHBfZ3RrX3V0aWwuYyBwaHBnX2Nsb3N1cmUuYyBwaHBnX2V4Y2VwdGlvbnMuYyBwaHBnX2di
b3hlZC5jIHBocGdfZ29iamVjdC5jIHBocGdfZ3BvaW50ZXIuYyBwaHBnX2d0eXBlLmMgcGhwZ19n
dmFsdWUuYyBwaHBnX2F0b20uYyBwaHBnX3N1cHBvcnQuYyBwaHBnX3BhcmFtc3BlYy5jIiwgInBo
cC1ndGsiKTsKLQorLy8gdmltOmZ0PWphdmFzY3JpcHQNCisvLyAkSWQkDQorLy8gIk1hc3RlciIg
Y29uZmlnIGZpbGU7IHRoaW5rIG9mIGl0IGFzIGEgY29uZmlndXJlLmluIGVxdWl2YWxlbnQuDQor
DQorLy8gTVNWQyB2ZXJzaW9uIHRhYmxlDQordmFyIE1TVkNWRVJTID0gW107DQorTVNWQ1ZFUlNb
MTIwMF0gPSAnTVNWQzYgKFZpc3VhbCBDKysgNi4wKSc7DQorTVNWQ1ZFUlNbMTMwMF0gPSAnTVNW
QzcgKFZpc3VhbCBDKysgMjAwMiknOw0KK01TVkNWRVJTWzEzMTBdID0gJ01TVkM3LjEgKFZpc3Vh
bCBDKysgMjAwMyknOw0KK01TVkNWRVJTWzE0MDBdID0gJ01TVkM4IChWaXN1YWwgQysrIDIwMDUp
JzsNCitNU1ZDVkVSU1sxNTAwXSA9ICdNU1ZDOSAoVmlzdWFsIEMrKyAyMDA4KSc7DQorTVNWQ1ZF
UlNbMTYwMF0gPSAnTVNWQzEwIChWaXN1YWwgQysrIDIwMTApJzsNCisNCitTVERPVVQuV3JpdGVC
bGFua0xpbmVzKDEpOw0KKw0KK0NMID0gUEFUSF9QUk9HKCdjbCcpOw0KKw0KKy8vIGF2b2lkIHBp
Y2tpbmcgdXAgbWlkbmlnaHQgY29tbWFuZGVyIGZyb20gY3lnd2luDQorUEFUSF9QUk9HKCdtYycs
IFdzaFNoZWxsLkVudmlyb25tZW50KCJQcm9jZXNzIikuSXRlbSgiUEFUSCIpKTsNCitQQVRIX1BS
T0coJ3JjJywgV3NoU2hlbGwuRW52aXJvbm1lbnQoIlByb2Nlc3MiKS5JdGVtKCJQQVRIIikpOw0K
Kw0KKy8qIGN5Z3dpbiBzaGlwcyB3aXRoICdsaW5rLmV4ZScuIEF2b2lkIHNlYXJjaGluZyB0aGUg
Y3lnd2luIHBhdGggZm9yIHRoaXMsIGFzIHdlIHdhbnQgdGhlIE1TIGxpbmtlciAqLw0KK1BBVEhf
UFJPRygnbGluaycsIFdzaFNoZWxsLkVudmlyb25tZW50KCJQcm9jZXNzIikuSXRlbSgiUEFUSCIp
LCAiTEQiKTsNCitQQVRIX1BST0coJ25tYWtlJyk7DQorDQorLy8gY2hlY2sgZm9yIGdyZXAgYW5k
IHNlZCENCitpZiAoIVBBVEhfUFJPRygnZ3JlcCcsIFdzaFNoZWxsLkVudmlyb25tZW50KCJQcm9j
ZXNzIikuSXRlbSgiUEFUSCIpKSB8fA0KKwkhUEFUSF9QUk9HKCdzZWQnLCBXc2hTaGVsbC5FbnZp
cm9ubWVudCgiUHJvY2VzcyIpLkl0ZW0oIlBBVEgiKSkpIHsNCisgCUVSUk9SKCJncmVwIGFuZCBz
ZWQgYXJlIHJlcXVpcmVkIik7DQorfSANCisNCisvLyB3ZSBkb24ndCB3YW50IHRvIGRlZmluZSBM
SUIsIGFzIHRoYXQgd2lsbCBvdmVycmlkZSB0aGUgZGVmYXVsdCBsaWJyYXJ5IHBhdGggc2V0IGlu
IHRoYXQgZW52IHZhcg0KK1BBVEhfUFJPRygnbGliJywgbnVsbCwgJ01BS0VfTElCJyk7DQorUEFU
SF9QUk9HKCdwaHAnKTsNCisNCitpZiAoIVBBVEhfUFJPRygncGhwJywgV3NoU2hlbGwuRW52aXJv
bm1lbnQoIlByb2Nlc3MiKS5JdGVtKCJQQVRIIikpKSB7DQorIAlFUlJPUigicGhwIGlzIHJlcXVp
cmVkIik7DQorfSANCisNCitTVERPVVQuV3JpdGVCbGFua0xpbmVzKDEpOw0KKw0KK2lmIChDTCkg
ew0KKwl2YXIgVkNWRVJTID0gcHJvYmVfbXN2Y19jb21waWxlcl92ZXJzaW9uKENMKTsNCisJU1RE
T1VULldyaXRlTGluZSgiRGV0ZWN0ZWQgY29tcGlsZXIgdmVyc2lvbjogIiArIFZDVkVSUyk7DQor
DQorCWlmICh0eXBlb2YoTVNWQ1ZFUlNbVkNWRVJTXSkgPT0gdW5kZWZpbmVkKSB7DQorCQkvLyBM
ZXRzIGp1c3QgYmFpbCBvdXQgaWYgd2UgZG9udCBrbm93IHRoZSBNU1ZDIHZlcnNpb24NCisJCUVS
Uk9SKCJNUyBDKysgY29tcGlsZXIgaXMgcmVxdWlyZWQgLS0gdW5hYmxlIHRvIGRldGVjdCB2ZXJz
aW9uIik7DQorCX0gZWxzZSB7DQorCQlTVERPVVQuV3JpdGVMaW5lKCJEZXRlY3RlZCBjb21waWxl
ciB2ZXJzaW9uOiAiICsgTVNWQ1ZFUlNbVkNWRVJTXSk7DQorIAl9DQorfSBlbHNlIHsNCisJRVJS
T1IoIk1TIEMrKyBjb21waWxlciBpcyByZXF1aXJlZCIpOw0KK30NCisNCitTVERPVVQuV3JpdGVC
bGFua0xpbmVzKDEpOw0KKw0KK0FSR19XSVRIKCdwaHAtYnVpbGQnLCAnUGF0aCB0byB3aGVyZSB5
b3UgZXh0cmFjdGVkIGh0dHA6Ly93d3cucGhwLm5ldC9leHRyYS93aW4zMmJ1aWxkLnppcC4gQXNz
dW1lcyB0aGF0IGl0IGlzIGEgc2libGluZyBvZiB0aGlzIHNvdXJjZSBkaXIgKC4uXFxwaHBfYnVp
bGQpIGlmIG5vdCBzcGVjaWZpZWQnLCAnbm8nKTsNCitBUkdfV0lUSCgnY3lnd2luJywgJ1BhdGgg
dG8gY3lnd2luIHV0aWxpdGllcyBvbiB5b3VyIHN5c3RlbScsICdcXGN5Z3dpbicpOw0KK0FSR19F
TkFCTEUoJ2dkJywgJ1BocCBoYXMgc3RhdGljIGdkJywgJ25vJyk7DQorQVJHX0VOQUJMRSgnenRz
JywgJ0Rpc2FibGUgdGhyZWFkIHNhZmV0eScsICd5ZXMnKTsNCisNCisvLyBzdGljayBvYmplY3Rz
IHNvbWV3aGVyZSBvdXRzaWRlIG9mIHRoZSBzb3VyY2UgdHJlZQ0KK0FSR19FTkFCTEUoJ29iamVj
dC1vdXQtZGlyJywgJ0FsdGVybmF0aXZlIGxvY2F0aW9uIGZvciBiaW5hcnkgb2JqZWN0cyBkdXJp
bmcgYnVpbGQnLCAnJyk7DQoraWYgKFBIUF9HVEtfT0JKRUNUX09VVF9ESVIubGVuZ3RoKSB7DQor
CWlmICghRlNPLkZvbGRlckV4aXN0cyhQSFBfR1RLX09CSkVDVF9PVVRfRElSKSkgew0KKwkJRVJS
T1IoJ1lvdXIgY2hvc2VuIG91dHB1dCBkaXJlY3RvcnkgJyArIFBIUF9HVEtfT0JKRUNUX09VVF9E
SVIgKyAnIGRvZXMgbm90IGV4aXN0Jyk7DQorCX0NCisJUEhQX0dUS19PQkpFQ1RfT1VUX0RJUiAr
PSAnXFwnOw0KK30NCisNCitBUkdfRU5BQkxFKCdkZWJ1ZycsICdDb21waWxlIHdpdGggZGVidWdn
aW5nIHN5bWJvbHMnLCAibm8iKTsNCitBUkdfRU5BQkxFKCdkZWJ1Zy1wYWNrJywgJ1JlbGVhc2Ug
YmluYXJpZXMgd2l0aCBleHRlcm5hbCBkZWJ1ZyBzeW1ib2xzICgtLWVuYWJsZS1kZWJ1ZyBtdXN0
IG5vdCBiZSBzcGVjaWZpZWQpJywgJ25vJyk7DQoraWYgKFBIUF9HVEtfREVCVUcgPT0gInllcyIg
JiYgUEhQX0dUS19ERUJVR19QQUNLID09ICJ5ZXMiKSB7DQorCUVSUk9SKCJVc2Ugb2YgYm90aCAt
LWVuYWJsZS1kZWJ1ZyBhbmQgLS1lbmFibGUtZGVidWctcGFjayBub3QgYWxsb3dlZC4iKTsNCit9
DQorDQorLy8gQ29tcGlsZSBkaXJlY3RvcnkNCitpZiAoUEhQX0dUS19ERUJVRyA9PSAieWVzIiAm
JiBQSFBfR1RLX1pUUyA9PSAieWVzIikgew0KKwlERUZJTkUoIkJVSUxEX0RJUiIsIFBIUF9HVEtf
T0JKRUNUX09VVF9ESVIgKyAiRGVidWdfVFMiKTsNCisJREVGSU5FKCJQSFBfTElCIiwgInBocDV0
c19kZWJ1Zy5saWIiKTsNCisJUEhQX0xJQiA9ICJwaHA1dHNfZGVidWcubGliIjsNCit9IGVsc2Ug
aWYgKFBIUF9HVEtfREVCVUcgPT0gInllcyIpIHsNCisJREVGSU5FKCJCVUlMRF9ESVIiLCBQSFBf
R1RLX09CSkVDVF9PVVRfRElSICsgIkRlYnVnIik7DQorCURFRklORSgiUEhQX0xJQiIsICJwaHA1
X2RlYnVnLmxpYiIpOw0KKwlQSFBfTElCID0gInBocDVfZGVidWcubGliIjsNCit9IGVsc2UgaWYg
KFBIUF9HVEtfWlRTID09ICJ5ZXMiKSB7DQorCURFRklORSgiQlVJTERfRElSIiwgUEhQX0dUS19P
QkpFQ1RfT1VUX0RJUiArICJSZWxlYXNlX1RTIik7DQorCURFRklORSgiUEhQX0xJQiIsICJwaHA1
dHMubGliIik7DQorCVBIUF9MSUIgPSAicGhwNXRzLmxpYiI7DQorfSBlbHNlIHsNCisJREVGSU5F
KCJCVUlMRF9ESVIiLCBQSFBfR1RLX09CSkVDVF9PVVRfRElSICsgIlJlbGVhc2UiKTsNCisJREVG
SU5FKCJQSFBfTElCIiwgInBocDUubGliIik7DQorCVBIUF9MSUIgPSAicGhwNS5saWIiOw0KK30N
CitpZiAoUEhQX0dUS19QSFBfQlVJTEQgPT0gJ25vJykgew0KKwlpZiAoRlNPLkZvbGRlckV4aXN0
cygiLi5cXHBocF9ndGtfYnVpbGQiKSkgew0KKwkJUEhQX0dUS19QSFBfQlVJTEQgPSAiLi5cXHBo
cF9ndGtfYnVpbGQiOw0KKwl9IGVsc2UgaWYgKEZTTy5Gb2xkZXJFeGlzdHMoIi4uXFxwaHBfYnVp
bGQiKSkgew0KKwkJUEhQX0dUS19QSFBfQlVJTEQgPSAiLi5cXHBocF9idWlsZCI7DQorCX0gZWxz
ZSBpZiAoRlNPLkZvbGRlckV4aXN0cygiLi5cXHdpbjMyYnVpbGQiKSkgew0KKwkJUEhQX0dUS19Q
SFBfQlVJTEQgPSAiLi5cXHdpbjMyYnVpbGQiOw0KKwl9IGVsc2UgaWYgKEZTTy5Gb2xkZXJFeGlz
dHMoIi4uXFxwaHAtd2luMzItZGV2XFxwaHBfYnVpbGQiKSkgew0KKwkJUEhQX0dUS19QSFBfQlVJ
TEQgPSAiLi5cXHBocC13aW4zMi1kZXZcXHBocF9idWlsZCI7DQorCX0NCit9DQorDQordmFyIHBo
cF91c3VhbF9pbmNsdWRlX3N1c3BlY3RzID0gUEhQX0dUS19QSFBfQlVJTEQ7DQordmFyIHBocF91
c3VhbF9saWJfc3VzcGVjdHMgPSBQSFBfR1RLX1BIUF9CVUlMRDsNCisNCitBUkdfSVMoJ2FsbCcs
ICdDb25maWd1cmUgYWxsIGF2YWlsYWJsZSBleHRlbnNpb25zJywgJ25vJyk7DQorDQorREVGSU5F
KCJQSFBHVEtETEwiLCAicGhwX2d0azIuZGxsIik7DQorREVGSU5FKCJQSFBHVEtMSUIiLCAicGhw
X2d0azIubGliIik7DQorZ2V0X3ZlcnNpb25fbnVtYmVycygpOw0KKy8qIHBpY2sgdXAgdGhlIHZl
cnNpb24gZnJvbSBndGsvZ3RrdmVyc2lvbi5oICovDQorZ2V0X2d0a19saWJ2ZXJzaW9uKCk7DQor
DQorLy8gR2VuZXJhbCBsaW5rIGZsYWdzDQorREVGSU5FKCJMREZMQUdTIiwgIi9ub2xvZ28iKTsN
CisvLyBHZW5lcmFsIERMTCBsaW5rIGZsYWdzDQorREVGSU5FKCJETExfTERGTEFHUyIsICIvZGxs
IC9tYWNoaW5lOkkzODYiKTsNCisvLyBQSFAtR1RLIERMTCBsaW5rIGZsYWdzDQorREVGSU5FKCJM
REZMQUdTX1BIUF9HVEsiLCAiJChETExfTERGTEFHUykiKTsNCisNCisvLyBHZW5lcmFsIGxpYnMN
CitERUZJTkUoIkxJQlMiLCAia2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNw
b29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiIp
Ow0KKw0KK2lmIChQSFBfR1RLX0RFQlVHID09ICJ5ZXMiKSB7DQorCURFRklORSgiQ0ZMQUdTIiwg
Ii9ub2xvZ28gL0xEZCAvTURkIC9HbSAvWkkgL0daIC9JIC4gL0kgLi5cXCAvSSAuLlxcLi4gL0kg
bWFpbiAvSSAuLlxcbWFpbiAvSSBleHQgL0kgLi5cXGV4dCAvRCBaRU5EX1dJTjMyIC9EIFpFTkRf
REVCVUc9MSAvRCBQSFBfV0lOMzIgL0QgV0lOMzIgL0QgX0RFQlVHIC9EIF9XSU5ET1dTIC9EIF9N
QkNTIC9EIF9VU1JETEwiKTsNCisJQUREX0ZMQUcoIkxERkxBR1MiLCAiL2RlYnVnIik7DQorDQor
fSBlbHNlIHsNCisJREVGSU5FKCJDRkxBR1MiLCAiL25vbG9nbyAvTUQgL1czIC9FSHNjIC9PeCAv
SSAuIC9JIC4uXFwgL0kgLi5cXC4uIC9JIG1haW4gL0kgLi5cXG1haW4gL0kgZXh0IC9JIC4uXFxl
eHQgL0QgWkVORF9XSU4zMiAvRCBaRU5EX0RFQlVHPTAgL0QgUEhQX1dJTjMyIC9EIFdJTjMyIC9E
IE5ERUJVRyAvRCBfV0lORE9XUyAvRCBfTUJDUyAvRCBfVVNSRExMIik7DQorCS8vIEdlbmVyYXRl
IGV4dGVybmFsIGRlYnVnIGZpbGVzIHdoZW4gLS1lbmFibGUtZGVidWctcGFjayBpcyBzcGVjaWZp
ZWQNCisJaWYgKFBIUF9HVEtfREVCVUdfUEFDSyA9PSAieWVzIikgew0KKwkgCUFERF9GTEFHKCJD
RkxBR1MiLCAiL1ppIik7DQorCSAJQUREX0ZMQUcoIkxERkxBR1MiLCAiL2luY3JlbWVudGFsOm5v
IC9kZWJ1ZyAvb3B0OnJlZixpY2YiKTsNCisJIH0NCit9DQorDQoraWYgKFBIUF9HVEtfWlRTID09
ICJ5ZXMiKSB7DQorCSAJQUREX0ZMQUcoIkNGTEFHUyIsICIvRCBaVFM9MSIpOw0KKwkgfQ0KKw0K
K2lmIChWQ1ZFUlMgPCAxNDAwKSB7DQorCS8vIEVuYWJsZSBhdXRvbWF0aWMgcHJlY29tcGlsZWQg
aGVhZGVycw0KKwlBRERfRkxBRygnQ0ZMQUdTJywgJy9ZWCAvYycpOw0KK30gZWxzZSB7DQorCS8v
IGZ1biBzdHVmZjogTVMgZGVwcmVjYXRlZCBBTlNJIHN0ZGlvIGFuZCBzaW1pbGFyIGZ1bmN0aW9u
cyAtIGRpc2FibGUgd2FybmluZ3MNCisJLy8gR1MgaGFyZGVucyB0aGUgYmluYXJ5IGFnYWluc3Qg
YnVmZmVyIG92ZXJydW5zDQorCUFERF9GTEFHKCdDRkxBR1MnLCAnL0dTIC93ZDQ5OTYgJyk7DQor
fQ0KKw0KK2lmIChQSFBfR1RLX0dEID09ICJ5ZXMiKSB7DQorCUFERF9GTEFHKCdDRkxBR1MnLCAn
L0QgSEFWRV9HRF9CVU5ETEVEPTEnKTsgDQorfQ0KKw0KK3Byb2JlX2Jhc2ljX2hlYWRlcnMoKTsN
CisNCitBRERfU09VUkNFUygibWFpbiIsICJwaHBfZ3RrLmMgcGhwX2d0a19leHQudzMyLmMgcGhw
X2d0a191dGlsLmMgcGhwZ19jbG9zdXJlLmMgcGhwZ19leGNlcHRpb25zLmMgcGhwZ19nYm94ZWQu
YyBwaHBnX2dvYmplY3QuYyBwaHBnX2dwb2ludGVyLmMgcGhwZ19ndHlwZS5jIHBocGdfZ3ZhbHVl
LmMgcGhwZ19hdG9tLmMgcGhwZ19zdXBwb3J0LmMgcGhwZ19wYXJhbXNwZWMuYyIsICJwaHAtZ3Rr
Iik7DQorDQpkaWZmIC0tZ2l0IGEvd2luMzIvY29uZnV0aWxzLmpzIGIvd2luMzIvY29uZnV0aWxz
LmpzCmluZGV4IGExOWNmN2YuLjVjZTA4ZTkgMTAwNjQ0Ci0tLSBhL3dpbjMyL2NvbmZ1dGlscy5q
cworKysgYi93aW4zMi9jb25mdXRpbHMuanMKQEAgLTEsMTI2MyArMSwxMjYzIEBACi0vLyBVdGls
cyBmb3IgY29uZmlndXJlIHNjcmlwdAotLyoKLSAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gIHwgUEhQLUdU
SyBWZXJzaW9uIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfAotICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgfCBDb3B5cmlnaHQgKGMpIDE5OTctMjAwNSBU
aGUgUEhQIEdyb3VwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICstLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKwotICB8IFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB2ZXJzaW9uIDMuMCBv
ZiB0aGUgUEhQIGxpY2Vuc2UsICAgICAgIHwKLSAgfCB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlz
IHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRSwgYW5kIGlzICAgICAgICB8Ci0gIHwgYXZhaWxh
YmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoZSBmb2xsb3dpbmcgdXJsOiAgICAg
ICAgICAgfAotICB8IGh0dHA6Ly93d3cucGhwLm5ldC9saWNlbnNlLzNfMC50eHQuICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgfCBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEg
Y29weSBvZiB0aGUgUEhQIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG8gICB8Ci0gIHwgb2J0YWlu
IGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhIG5vdGUgdG8gICAg
ICAgICAgfAotICB8IGxpY2Vuc2VAcGhwLm5ldCBzbyB3ZSBjYW4gbWFpbCB5b3UgYSBjb3B5IGlt
bWVkaWF0ZWx5LiAgICAgICAgICAgICAgIHwKLSAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gIHwgQXV0aG9y
OiBXZXogRnVybG9uZyA8d2V6QHRoZWJyYWlucm9vbS5jb20+ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfAotICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSovCi0KLS8vICRJZDogY29uZnV0aWxzLmpzLHYg
MS4yNCAyMDA4LTA4LTAxIDE0OjM0OjQzIGF1cm9yYWVvc3Jvc2UgRXhwICQKLQotLyogc2V0IHZh
cnMgKi8KLXZhciBTVERPVVQgPSBXU2NyaXB0LlN0ZE91dDsKLXZhciBTVERFUlIgPSBXU2NyaXB0
LlN0ZEVycjsKLXZhciBXc2hTaGVsbCA9IFdTY3JpcHQuQ3JlYXRlT2JqZWN0KCJXU2NyaXB0LlNo
ZWxsIik7Ci12YXIgRlNPID0gV1NjcmlwdC5DcmVhdGVPYmplY3QoIlNjcmlwdGluZy5GaWxlU3lz
dGVtT2JqZWN0Iik7Ci12YXIgTUZPID0gbnVsbDsKLXZhciBNRkUgPSBudWxsOwotdmFyIFNZU1RF
TV9EUklWRSA9IFdzaFNoZWxsLkVudmlyb25tZW50KCJQcm9jZXNzIikuSXRlbSgiU3lzdGVtRHJp
dmUiKTsKLXZhciBQUk9HUkFNX0ZJTEVTID0gV3NoU2hlbGwuRW52aXJvbm1lbnQoIlByb2Nlc3Mi
KS5JdGVtKCJQcm9ncmFtRmlsZXMiKTsKLQotaWYgKFBST0dSQU1fRklMRVMgPT0gbnVsbCkgewot
CVBST0dSQU1fRklMRVMgPSAiQzpcXFByb2dyYW0gRmlsZXMiOwotfQotCi12YXIgQ1dEID0gV3No
U2hlbGwuQ3VycmVudERpcmVjdG9yeTsKLQotaWYgKHR5cGVvZihDV0QpID09ICJ1bmRlZmluZWQi
KSB7Ci0JQ1dEID0gRlNPLkdldFBhcmVudEZvbGRlck5hbWUoRlNPLkdldEFic29sdXRlUGF0aE5h
bWUoImJ1aWxkY29uZi5iYXQiKSk7Ci19Ci0KLWNvbmZpZ3VyZV9hcmdzID0gbmV3IEFycmF5KCk7
Ci1jb25maWd1cmVfc3Vic3QgPSBXU2NyaXB0LkNyZWF0ZU9iamVjdCgiU2NyaXB0aW5nLkRpY3Rp
b25hcnkiKTsKLQotY29uZmlndXJlX2hkciA9IFdTY3JpcHQuQ3JlYXRlT2JqZWN0KCJTY3JpcHRp
bmcuRGljdGlvbmFyeSIpOwotYnVpbGRfZGlycyA9IG5ldyBBcnJheSgpOwotbWFrZV9idWlsZHMg
PSBuZXcgQXJyYXkoKTsKLQotZXh0ZW5zaW9uX2luY2x1ZGVfY29kZSA9ICIiOwotZXh0ZW5zaW9u
X21vZHVsZV9wdHJzID0gIiI7Ci0KLS8qIGZ1bmN0aW9ucyAqLwotCi1mdW5jdGlvbiBnZXRfZ3Rr
X2xpYnZlcnNpb24oKQotewotCXZhciBlbnYsIGksIHZpbiwgbWFqb3IsIG1pbm9yOwotCXZhciBm
b3VuZCA9IGZhbHNlOwotCi0JZm91bmQgPSBDSEVDS19IRUFERVIoImd0ay9ndGt2ZXJzaW9uLmgi
KTsKLQotCWlmIChmb3VuZCkgewotCQlTVERPVVQuV3JpdGVMaW5lKCIJPGluIGRlZmF1bHQgcGF0
aD4iKTsKLQkJdmluID0gZmlsZV9nZXRfY29udGVudHMoZm91bmQgKyAiXFxndGtcXGd0a3ZlcnNp
b24uaCIpOwotCi0JCXJlZ2V4ID0gbmV3IFJlZ0V4cCgiR1RLX01BSk9SX1ZFUlNJT05cXHMrXFwo
KFswLTldKylcXCkiKTsKLQkJcmVnZXguZXhlYyh2aW4pOwotCQltYWpvciA9IFJlZ0V4cC4kMTsK
LQkJaWYgKG1ham9yIDwgMikKLQkJCW1ham9yID0gMjsKLQkKLQkJcmVnZXggPSBuZXcgUmVnRXhw
KCJHVEtfTUlOT1JfVkVSU0lPTlxccytcXCgoWzAtOV0rKVxcKSIpOwotCQlyZWdleC5leGVjKHZp
bik7Ci0JCW1pbm9yID0gUmVnRXhwLiQxOwotCQlpZiAobWlub3IgPCA2KQotCQkJbWlub3IgPSA2
OwotCQotCQlpZiAobWFqb3IgPj0gMiAmJiBtaW5vciA+PTgpIHsKLQkJCUVOQUJMRV9DQUlSTyA9
IDE7Ci0JCX0gZWxzZSB7Ci0JCQlFTkFCTEVfQ0FJUk8gPSAwOwotCQl9Ci0JCVBIUF9HVEtfTElC
VkVSU0lPTiA9IG1ham9yICsgJy4nICsgbWlub3I7Ci0JfSBlbHNlIHsKLQkJU1RET1VULldyaXRl
TGluZSgiCTxub3QgZm91bmQ+Iik7Ci0JCVBIUF9HVEtfTElCVkVSU0lPTiA9ICcyLjYnOwotCX0K
LQotCVNURE9VVC5Xcml0ZSgiTGlicmFyeSBkZWZpbml0aW9ucyBmb3IgIiArIFBIUF9HVEtfTElC
VkVSU0lPTiArICIgd2lsbCBiZSB1c2VkIik7Ci0JU1RERVJSLldyaXRlQmxhbmtMaW5lcygxKTsK
LX0KLQotZnVuY3Rpb24gZ2VuZXJhdGVfc291cmNlKCkgewotCi0JaWYgKCFGU08uRmlsZUV4aXN0
cygiZXh0XFxndGsrXFxjb21wbGV0ZS50eHQiKSkgewotCQlpZiAoIUZTTy5GaWxlRXhpc3RzKCJ3
aW4zMlxcdGVtcC5iYXQiKSkgewotCQkJU1RERVJSLldyaXRlTGluZSgiUnVuIGJ1aWxkY29uZiBm
aXJzdCAtIHRoZSBzb3VyY2UgZmlsZSBnZW5lcmF0b3IgaXMgbWlzc2luZyIpOwotCQkJV1Njcmlw
dC5RdWl0KDEwKTsKLQkJfSBlbHNlIHsKLQkJCXZhciB0ZW1wID0gRlNPLk9wZW5UZXh0RmlsZSgi
d2luMzJcXHRlbXAuYmF0IiwgOCk7Ci0JCQl0ZW1wLldyaXRlTGluZSgiQGVjaG8gb2ZmID4gc291
cmNlX2NvbXBsZXRlLnR4dCIpOwotCQkJdGVtcC5DbG9zZSgpOwotCQkJV3NoU2hlbGwuUnVuKCJ3
aW4zMlxcdGVtcCIsIDApOwotCQl9Ci0JfQotCXJldHVybjsKLX0KLQotZnVuY3Rpb24gY2hlY2tf
Z2VuZXJhdGlvbigpIHsKLQotCWlmICghRlNPLkZpbGVFeGlzdHMoInNvdXJjZV9jb21wbGV0ZS50
eHQiKSkgewotCQlTVERPVVQuV3JpdGVMaW5lKCJXYWl0aW5nIGZvciBzb3VyY2UgZmlsZXMgdG8g
Z2VuZXJhdGUuLi4iKTsKLQkJV1NjcmlwdC5TbGVlcCgzNTAwKTsKLQkJY2hlY2tfZ2VuZXJhdGlv
bigpOwotCX0KLQlyZXR1cm47Ci19Ci0KLWZ1bmN0aW9uIGdldF92ZXJzaW9uX251bWJlcnMoKSB7
Ci0KLQkvKiBwaWNrIHVwIHRoZSB2ZXJzaW9uIGZyb20gbWFpbi9waHBfZ3RrLmggKi8KLQl2YXIg
dmluID0gZmlsZV9nZXRfY29udGVudHMoIm1haW5cXHBocF9ndGsuaCIpOwotCXZhciB2ZXJzaW9u
LCB2ZXJzaW9uX3N0cmluZ3MsIG1ham9yLCBtaW5vciwgZGV0YWlscywgcmVsZWFzZSA9ICIiLCBl
eHRyYSA9ICIiOwotCi0JaWYgKHZpbi5tYXRjaChuZXcgUmVnRXhwKCJQSFBfR1RLX1ZFUlNJT04g
XCIoW15cIl0rKVwiIikpKSB7Ci0JCXZlcnNpb24gPSBSZWdFeHAuJDE7Ci0JCXZlcnNpb25fc3Ry
aW5ncyA9IHZlcnNpb24uc3BsaXQoIi4iKTsKLQotCQltYWpvciA9IHZlcnNpb25fc3RyaW5nc1sw
XTsKLQkJbWlub3IgPSB2ZXJzaW9uX3N0cmluZ3NbMV07Ci0JCWRldGFpbHMgPSB2ZXJzaW9uX3N0
cmluZ3NbMl07Ci0KLQkJZm9yIChpID0gMDsgaSA8IGRldGFpbHMubGVuZ3RoOyBpKyspIHsKLQkJ
CWlmKCFpc05hTihkZXRhaWxzLmNoYXJBdChpKSkpIHsKLQkJCQlyZWxlYXNlID0gcmVsZWFzZSAr
IGRldGFpbHMuY2hhckF0KGkpOwotCQkJfSBlbHNlIHsKLQkJCQlleHRyYSA9IGRldGFpbHMuc3Vi
c3RyaW5nKGkpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQotCi0JdmFyIHZmaWxlID0gRlNP
LkNyZWF0ZVRleHRGaWxlKCJtYWluL3BocF9ndGtfdmVyc2lvbi5oIiwgdHJ1ZSk7Ci0JdmZpbGUu
V3JpdGVMaW5lKCIvKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZHVyaW5n
IHdpbjMyIGNvbmZpZ3VyYXRpb24gKi8iKTsKLQl2ZmlsZS5Xcml0ZUxpbmUoIi8qIEVkaXQgcGhw
X2d0ay5oIHRvIGNoYW5nZSB0aGUgdmVyc2lvbiBudW1iZXIgKi8iKTsKLQl2ZmlsZS5Xcml0ZUxp
bmUoIiNkZWZpbmUgUEhQX0dUS19NQUpPUl9WRVJTSU9OICIgKyBtYWpvcik7Ci0JdmZpbGUuV3Jp
dGVMaW5lKCIjZGVmaW5lIFBIUF9HVEtfTUlOT1JfVkVSU0lPTiAiICsgbWlub3IpOwotCXZmaWxl
LldyaXRlTGluZSgiI2RlZmluZSBQSFBfR1RLX1JFTEVBU0VfVkVSU0lPTiAiICsgcmVsZWFzZSk7
Ci0JaWYgKFBIUF9HVEtfREVCVUcgPT0gInllcyIpIHsKLQkJdmZpbGUuV3JpdGVMaW5lKCIjZGVm
aW5lIFBIUF9HVEtfRVhUUkFfVkVSU0lPTiBcIiIgKyBleHRyYSArICIgKERFQlVHKVwiIik7Ci0J
fSBlbHNlIHsKLQkJdmZpbGUuV3JpdGVMaW5lKCIjZGVmaW5lIFBIUF9HVEtfRVhUUkFfVkVSU0lP
TiBcIiIgKyBleHRyYSArICJcIiIpOwotCX0KLQotCURFRklORSgnUEhQX0dUS19WRVJTSU9OX1NU
UklORycsIHZlcnNpb24pOwotfQotCi1mdW5jdGlvbiBjb25kZW5zZV9wYXRoKHBhdGgpIHsKLQot
CXBhdGggPSBGU08uR2V0QWJzb2x1dGVQYXRoTmFtZShwYXRoKTsKLQotCWlmIChwYXRoLnN1YnN0
cigwLCBDV0QubGVuZ3RoKS50b0xvd2VyQ2FzZSgpCi0JCQk9PSBDV0QudG9Mb3dlckNhc2UoKSAm
JgotCQkJKHBhdGguY2hhckNvZGVBdChDV0QubGVuZ3RoKSA9PSA5MiB8fCBwYXRoLmNoYXJDb2Rl
QXQoQ1dELmxlbmd0aCkgPT0gNDcpKSB7Ci0JCXJldHVybiBwYXRoLnN1YnN0cihDV0QubGVuZ3Ro
ICsgMSk7Ci0JfQotCi0JdmFyIGEgPSBDV0Quc3BsaXQoIlxcIik7Ci0JdmFyIGIgPSBwYXRoLnNw
bGl0KCJcXCIpOwotCXZhciBpLCBqOwotCi0JZm9yIChpID0gMDsgaSA8IGIubGVuZ3RoOyBpKysp
IHsKLQkJaWYgKGFbaV0udG9Mb3dlckNhc2UoKSA9PSBiW2ldLnRvTG93ZXJDYXNlKCkpCi0JCQlj
b250aW51ZTsKLQkJaWYgKGkgPiAwKSB7Ci0JCQkvKiBmaXJzdCBkaWZmZXJlbmNlIGZvdW5kICov
Ci0JCQlwYXRoID0gIiI7Ci0JCQlmb3IgKGogPSAwOyBqIDwgYS5sZW5ndGggLSBpOyBqKyspIHsK
LQkJCQlwYXRoICs9ICIuLlxcIjsKLQkJCX0KLQkJCWZvciAoaiA9IGk7IGogPCBiLmxlbmd0aDsg
aisrKSB7Ci0JCQkJcGF0aCArPSBiW2pdOwotCQkJCWlmIChqIDwgYi5sZW5ndGggLSAxKQotCQkJ
CQlwYXRoICs9ICJcXCI7Ci0JCQl9Ci0JCQlyZXR1cm4gcGF0aDsKLQkJfQotCQkvKiBvbiBhIGRp
ZmZlcmVudCBkcml2ZSAqLwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gcGF0aDsKLX0KLQotZnVu
Y3Rpb24gQ29uZmlndXJlQXJnKHR5cGUsIG9wdG5hbWUsIGhlbHB0ZXh0LCBkZWZ2YWwpIHsKLQot
CXZhciBvcHB0eXBlID0gIiI7Ci0KLQlpZiAodHlwZSkgewotCi0JCW9wcHR5cGUgPSB0eXBlID09
ICJlbmFibGUiID8gImRpc2FibGUiIDogIndpdGhvdXQiOwotCi0JCWlmIChkZWZ2YWwgPT0gInll
cyIgfHwgZGVmdmFsID09ICJ5ZXMsc2hhcmVkIikgewotCQkJdGhpcy5hcmcgPSAiLS0iICsgb3Bw
dHlwZSArICItIiArIG9wdG5hbWU7Ci0JCQl0aGlzLmltcGFyZyA9ICItLSIgKyB0eXBlICsgIi0i
ICsgb3B0bmFtZTsKLQkJfSBlbHNlIHsKLQkJCXRoaXMuYXJnID0gIi0tIiArIHR5cGUgKyAiLSIg
KyBvcHRuYW1lOwotCQkJdGhpcy5pbXBhcmcgPSAiLS0iICsgb3BwdHlwZSArICItIiArIG9wdG5h
bWU7Ci0JCX0KLQl9IGVsc2UgewotCQl0aGlzLmFyZyA9ICItLSIgKyBvcHRuYW1lOwotCX0KLQot
CXRoaXMub3B0bmFtZSA9IG9wdG5hbWU7Ci0JdGhpcy5oZWxwdGV4dCA9IGhlbHB0ZXh0OwotCXRo
aXMuZGVmdmFsID0gZGVmdmFsOwotCXRoaXMuc3ltdmFsID0gb3B0bmFtZS50b1VwcGVyQ2FzZSgp
LnJlcGxhY2UobmV3IFJlZ0V4cCgiLSIsICJnIiksICJfIik7Ci0JdGhpcy5zZWVuID0gZmFsc2U7
Ci0JdGhpcy5hcmd2YWwgPSBkZWZ2YWw7Ci19Ci0KLWZ1bmN0aW9uIGFuYWx5emVfYXJnKGFyZ3Zh
bCkgewotCi0JdmFyIHJldCA9IG5ldyBBcnJheSgpOwotCi0JaWYgKGFyZ3ZhbCA9PSAic2hhcmVk
IikgewotCQlhcmd2YWwgPSAieWVzIjsKLQl9IGVsc2UgaWYgKGFyZ3ZhbCA9PSBudWxsKSB7Ci0J
CS8qIG5vdGhpbmcgKi8KLQl9IGVsc2UgaWYgKGFyZ19tYXRjaCA9IGFyZ3ZhbC5tYXRjaChuZXcg
UmVnRXhwKCJec2hhcmVkLCguKikiKSkpIHsKLQkJYXJndmFsID0gYXJnX21hdGNoWzFdOwotCX0g
ZWxzZSBpZiAoYXJnX21hdGNoID0gYXJndmFsLm1hdGNoKG5ldyBSZWdFeHAoIl4oLiopLHNoYXJl
ZCQiKSkpIHsKLQkJYXJndmFsID0gYXJnX21hdGNoWzFdOwotCX0KLQotCXJldFswXSA9IGFyZ3Zh
bDsKLQlyZXR1cm4gcmV0OwotfQotCi1mdW5jdGlvbiBjb25mX3Byb2Nlc3NfYXJncygpIHsKLQot
CXZhciBpLCBqOwotCXZhciBjb25maWd1cmVfaGVscF9tb2RlID0gZmFsc2U7Ci0JdmFyIGFuYWx5
emVkID0gZmFsc2U7Ci0JdmFyIG5pY2UgPSAiY3NjcmlwdCAvbm9sb2dvIGNvbmZpZ3VyZS5qcyAi
OwotCi0JYXJncyA9IFdTY3JpcHQuQXJndW1lbnRzOwotCi0JZm9yIChpID0gMDsgaSA8IGFyZ3Mu
bGVuZ3RoOyBpKyspIHsKLQkJYXJnID0gYXJncyhpKTsKLQkJbmljZSArPSAnICInICsgYXJnICsg
JyInOwotCQlpZiAoYXJnID09ICItLWhlbHAiKSB7Ci0JCQljb25maWd1cmVfaGVscF9tb2RlID0g
dHJ1ZTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLy8gSWYgaXQgaXMgLS1mb289YmFyLCBzcGxpdCBv
biB0aGUgZXF1YWxzIHNpZ24KLQkJYXJnID0gYXJnLnNwbGl0KCI9IiwgMik7Ci0JCWFyZ25hbWUg
PSBhcmdbMF07Ci0JCWlmIChhcmcubGVuZ3RoID4gMSkgewotCQkJYXJndmFsID0gYXJnWzFdOwot
CQl9IGVsc2UgewotCQkJYXJndmFsID0gbnVsbDsKLQkJfQotCi0JCS8vIEZpbmQgdGhlIGFyZwot
CQlmb3VuZCA9IGZhbHNlOwotCQlmb3IgKGogPSAwOyBqIDwgY29uZmlndXJlX2FyZ3MubGVuZ3Ro
OyBqKyspIHsKLQkJCWlmIChhcmduYW1lID09IGNvbmZpZ3VyZV9hcmdzW2pdLmltcGFyZyB8fCBh
cmduYW1lID09IGNvbmZpZ3VyZV9hcmdzW2pdLmFyZykgewotCQkJCWZvdW5kID0gdHJ1ZTsKLQot
CQkJCWFyZyA9IGNvbmZpZ3VyZV9hcmdzW2pdOwotCQkJCWFyZy5zZWVuID0gdHJ1ZTsKLQotCQkJ
CWFuYWx5emVkID0gYW5hbHl6ZV9hcmcoYXJndmFsKTsKLQkJCQlhcmd2YWwgPSBhbmFseXplZFsw
XTsKLQotCQkJCWlmIChhcmduYW1lID09IGFyZy5pbXBhcmcpIHsKLQkJCQkJLyogd2UgbWF0Y2hl
ZCB0aGUgaW1wbGljaXQsIG9yIGRlZmF1bHQgYXJnICovCi0JCQkJCWlmIChhcmd2YWwgPT0gbnVs
bCkgewotCQkJCQkJYXJndmFsID0gYXJnLmRlZnZhbDsKLQkJCQkJfQotCQkJCX0gZWxzZSB7Ci0J
CQkJCS8qIHdlIG1hdGNoZWQgdGhlIG5vbi1kZWZhdWx0IGFyZyAqLwotCQkJCQlpZiAoYXJndmFs
ID09IG51bGwpIHsKLQkJCQkJCWFyZ3ZhbCA9IGFyZy5kZWZ2YWwgPT0gIm5vIiA/ICJ5ZXMiIDog
Im5vIjsKLQkJCQkJfQotCQkJCX0KLQotCQkJCWFyZy5hcmd2YWwgPSBhcmd2YWw7Ci0JCQkJZXZh
bCgiUEhQX0dUS18iICsgYXJnLnN5bXZhbCArICIgPSBhcmd2YWw7Iik7Ci0JCQkJYnJlYWs7Ci0J
CQl9Ci0JCX0KLQkJaWYgKCFmb3VuZCkgewotCQkJU1RERVJSLldyaXRlTGluZSgiVW5rbm93biBv
cHRpb24gIiArIGFyZ25hbWUpOwotCQkJU1RERVJSLldyaXRlTGluZSgiUGxlYXNlIHRyeSBjb25m
aWd1cmUuanMgLS1oZWxwIGZvciBhIGxpc3Qgb2YgdmFsaWQgb3B0aW9ucyIpOwotCQkJV1Njcmlw
dC5RdWl0KDIpOwotCQl9Ci0JfQotCi0JaWYgKGNvbmZpZ3VyZV9oZWxwX21vZGUpIHsKLQotCQlT
VERPVVQuV3JpdGVCbGFua0xpbmVzKDEpOwotCi0JCS8vIE1lYXN1cmUgd2lkdGggdG8gcHJldHR5
LXByaW50IHRoZSBvdXRwdXQKLQkJbWF4X3dpZHRoID0gMDsKLQkJZm9yIChpID0gMDsgaSA8IGNv
bmZpZ3VyZV9hcmdzLmxlbmd0aDsgaSsrKSB7Ci0JCQlhcmcgPSBjb25maWd1cmVfYXJnc1tpXTsK
LQkJCWlmIChhcmcuYXJnLmxlbmd0aCA+IG1heF93aWR0aCkgewotCQkJCW1heF93aWR0aCA9IGFy
Zy5hcmcubGVuZ3RoOwotCQkJfQotCQl9Ci0KLQkJZm9yIChpID0gMDsgaSA8IGNvbmZpZ3VyZV9h
cmdzLmxlbmd0aDsgaSsrKSB7Ci0JCQlhcmcgPSBjb25maWd1cmVfYXJnc1tpXTsKLQotCQkJbiA9
IG1heF93aWR0aCAtIGFyZy5hcmcubGVuZ3RoOwotCQkJcGFkID0gIiAgICI7Ci0JCQlmb3IgKGog
PSAwOyBqIDwgbjsgaisrKSB7Ci0JCQkJcGFkICs9ICIgIjsKLQkJCX0KLQkJCVNURE9VVC5Xcml0
ZUxpbmUoIiAgIiArIGFyZy5hcmcgKyBwYWQgKyB3b3JkX3dyYXBfYW5kX2luZGVudChtYXhfd2lk
dGggKyA1LCBhcmcuaGVscHRleHQpKTsKLQkJfQotCQlXU2NyaXB0LlF1aXQoMSk7Ci0JfQotCi0J
Ly8gTm93IHNldCBhbnkgZGVmYXVsdHMgd2UgbWlnaHQgaGF2ZSBtaXNzZWQgb3V0IGVhcmxpZXIK
LQlmb3IgKGkgPSAwOyBpIDwgY29uZmlndXJlX2FyZ3MubGVuZ3RoOyBpKyspIHsKLQkJYXJnID0g
Y29uZmlndXJlX2FyZ3NbaV07Ci0JCWlmIChhcmcuc2VlbikKLQkJCWNvbnRpbnVlOwotCQlhbmFs
eXplZCA9IGFuYWx5emVfYXJnKGFyZy5kZWZ2YWwpOwotCQlhcmd2YWwgPSBhbmFseXplZFswXTsK
LQotCQlldmFsKCJQSFBfR1RLXyIgKyBhcmcuc3ltdmFsICsgIiA9IGFyZ3ZhbDsiKTsKLQl9Ci0K
LQlNRk8gPSBGU08uQ3JlYXRlVGV4dEZpbGUoIk1ha2VmaWxlLm9iamVjdHMiLCB0cnVlKTsKLQlN
RkUgPSBGU08uQ3JlYXRlVGV4dEZpbGUoIk1ha2VmaWxlLmV4dGVuc2lvbnMiLCB0cnVlKTsKLQot
CVNURE9VVC5Xcml0ZUJsYW5rTGluZXMoMSk7Ci0JU1RET1VULldyaXRlTGluZSgiU2F2aW5nIGNv
bmZpZ3VyZSBvcHRpb25zIHRvIGNvbmZpZ3VyZS5iYXQiKTsKLQl2YXIgbmljZWZpbGUgPSBGU08u
Q3JlYXRlVGV4dEZpbGUoImNvbmZpZ3VyZS5iYXQiLCB0cnVlKTsKLQluaWNlZmlsZS5Xcml0ZUxp
bmUobmljZSk7Ci0JbmljZWZpbGUuQ2xvc2UoKTsKLQotCUFDX0RFRklORSgnQ09ORklHVVJFX0NP
TU1BTkQnLCBuaWNlKTsKLX0KLQotZnVuY3Rpb24gZmluZF9wYXR0ZXJuX2luX3BhdGgocGF0dGVy
biwgcGF0aCkgewotCi0JaWYgKHBhdGggPT0gbnVsbCkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQot
Ci0JdmFyIGRpcnMgPSBwYXRoLnNwbGl0KCc7Jyk7Ci0JdmFyIGk7Ci0JdmFyIGl0ZW1zOwotCi0J
Zm9yIChpID0gMDsgaSA8IGRpcnMubGVuZ3RoOyBpKyspIHsKLQkJaXRlbXMgPSBnbG9iKGRpcnNb
aV0gKyAiXFwiICsgcGF0dGVybik7Ci0JCWlmIChpdGVtcykgewotCQkJcmV0dXJuIGNvbmRlbnNl
X3BhdGgoaXRlbXNbMF0pOwotCQl9Ci0JfQotCXJldHVybiBmYWxzZTsKLX0KLQotZnVuY3Rpb24g
QVJHX0lTKG9wdG5hbWUsIGhlbHB0ZXh0LCBkZWZ2YWwpIHsKLQotCWNvbmZpZ3VyZV9hcmdzW2Nv
bmZpZ3VyZV9hcmdzLmxlbmd0aF0gPSBuZXcgQ29uZmlndXJlQXJnKCIiLCBvcHRuYW1lLCBoZWxw
dGV4dCwgZGVmdmFsKTsKLX0KLQotZnVuY3Rpb24gQVJHX1dJVEgob3B0bmFtZSwgaGVscHRleHQs
IGRlZnZhbCkgewotCi0JY29uZmlndXJlX2FyZ3NbY29uZmlndXJlX2FyZ3MubGVuZ3RoXSA9IG5l
dyBDb25maWd1cmVBcmcoIndpdGgiLCBvcHRuYW1lLCBoZWxwdGV4dCwgZGVmdmFsKTsKLX0KLQot
ZnVuY3Rpb24gQVJHX0VOQUJMRShvcHRuYW1lLCBoZWxwdGV4dCwgZGVmdmFsKSB7Ci0KLQljb25m
aWd1cmVfYXJnc1tjb25maWd1cmVfYXJncy5sZW5ndGhdID0gbmV3IENvbmZpZ3VyZUFyZygiZW5h
YmxlIiwgb3B0bmFtZSwgaGVscHRleHQsIGRlZnZhbCk7Ci19Ci0KLWZ1bmN0aW9uIERFRklORShu
YW1lLCB2YWx1ZSkgewotCi0JaWYgKGNvbmZpZ3VyZV9zdWJzdC5FeGlzdHMobmFtZSkpIHsKLQkJ
Y29uZmlndXJlX3N1YnN0LlJlbW92ZShuYW1lKTsKLQl9Ci0JY29uZmlndXJlX3N1YnN0LkFkZChu
YW1lLCB2YWx1ZSk7Ci19Ci0KLWZ1bmN0aW9uIEFDX0RFRklORShuYW1lLCB2YWx1ZSwgY29tbWVu
dCwgcXVvdGUpIHsKLQotCWlmIChxdW90ZSA9PSBudWxsKSB7Ci0JCXF1b3RlID0gdHJ1ZTsKLQl9
Ci0JaWYgKHF1b3RlICYmIHR5cGVvZih2YWx1ZSkgPT0gInN0cmluZyIpIHsKLQkJdmFsdWUgPSAn
IicgKyB2YWx1ZS5yZXBsYWNlKG5ldyBSZWdFeHAoJyhbIlxcXFxdKScsICJnIiksICdcXCQxJykg
KyAnIic7Ci0JfSBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPT0gMCkgewotCQl2YWx1ZSA9ICciIic7
Ci0JfQotCXZhciBpdGVtID0gbmV3IEFycmF5KHZhbHVlLCBjb21tZW50KTsKLQlpZiAoY29uZmln
dXJlX2hkci5FeGlzdHMobmFtZSkpIHsKLQkJdmFyIG9yaWdfaXRlbSA9IGNvbmZpZ3VyZV9oZHIu
SXRlbShuYW1lKTsKLQkJU1RET1VULldyaXRlTGluZSgiQUNfREVGSU5FWyIgKyBuYW1lICsgIl09
IiArIHZhbHVlICsgIjogaXMgYWxyZWFkeSBkZWZpbmVkIHRvICIgKyBpdGVtWzBdKTsKLQl9IGVs
c2UgewotCQljb25maWd1cmVfaGRyLkFkZChuYW1lLCBpdGVtKTsKLQl9Ci19Ci0KLWZ1bmN0aW9u
IFBBVEhfUFJPRyhwcm9nbmFtZSwgYWRkaXRpb25hbF9wYXRocywgc3ltYm9sKSB7Ci0KLQl2YXIg
ZXhlOwotCXZhciBwbGFjZTsKLQl2YXIgY3lnX3BhdGggPSBQSFBfR1RLX0NZR1dJTiArICJcXGJp
bjsiICsgUEhQX0dUS19DWUdXSU4gKyAiXFx1c3JcXGxvY2FsXFxiaW4iOwotCi0JZXhlID0gcHJv
Z25hbWUgKyAiLmV4ZSI7Ci0KLQlpZiAoYWRkaXRpb25hbF9wYXRocyA9PSBudWxsKSB7Ci0JCWFk
ZGl0aW9uYWxfcGF0aHMgPSBjeWdfcGF0aDsKLQl9IGVsc2UgewotCQlhZGRpdGlvbmFsX3BhdGhz
ICs9ICI7IiArIGN5Z19wYXRoOwotCX0KLQotCXBsYWNlID0gc2VhcmNoX3BhdGhzKGV4ZSwgYWRk
aXRpb25hbF9wYXRocywgIlBBVEgiKTsKLQotCWlmIChwbGFjZSA9PSB0cnVlKSB7Ci0JCXBsYWNl
ID0gZXhlOwotCX0gZWxzZSBpZiAocGxhY2UgIT0gZmFsc2UpIHsKLQotCQlpZiAocGxhY2UubGFz
dEluZGV4T2YoIlxcIikgIT0gcGxhY2UubGVuZ3RoIC0gMSkgewotCQkJcGxhY2UgKz0gIlxcIjsK
LQkJfQotCi0JCXBsYWNlID0gcGxhY2UgKyBleGU7Ci0KLQkJaWYgKHBsYWNlLmluZGV4T2YoIiAi
KSkgewotCQkJcGxhY2UgPSAnIicgKyBwbGFjZSArICciJzsKLQkJfQotCX0KLQotCWlmIChwbGFj
ZSkgewotCQlpZiAoc3ltYm9sID09IG51bGwpIHsKLQkJCXN5bWJvbCA9IHByb2duYW1lLnRvVXBw
ZXJDYXNlKCk7Ci0JCX0KLQkJREVGSU5FKHN5bWJvbCwgcGxhY2UpOwotCX0KLQlyZXR1cm4gcGxh
Y2U7Ci19Ci0KLWZ1bmN0aW9uIENIRUNLX0xJQihsaWJuYW1lcywgdGFyZ2V0LCBwYXRoX3RvX2No
ZWNrLCBjb21tb25fbmFtZSkgewotCi0JU1RET1VULldyaXRlKCJDaGVja2luZyBmb3IgIiArIGxp
Ym5hbWVzICsgIiAuLi4gIik7Ci0KLQlpZiAoY29tbW9uX25hbWUgPT0gbnVsbCAmJiB0YXJnZXQg
IT0gbnVsbCkgewotCQljb21tb25fbmFtZSA9IHRhcmdldDsKLQl9Ci0KLQlpZiAocGF0aF90b19j
aGVjayA9PSBudWxsKSB7Ci0JCXBhdGhfdG9fY2hlY2sgPSAiIjsKLQl9Ci0KLQkvLyBpZiB0aGV5
IHNwZWNpZmllZCBhIGNvbW1vbiBuYW1lIGZvciB0aGUgcGFja2FnZSB0aGF0IGNvbnRhaW5zCi0J
Ly8gdGhlIGxpYnJhcnksIHRhZyBzb21lIHVzZWZ1bCBkZWZhdWx0cyBvbiB0byB0aGUgZW5kIG9m
IHRoZQotCS8vIHBhdGggdG8gYmUgc2VhcmNoZWQKLQlpZiAoY29tbW9uX25hbWUgIT0gbnVsbCkg
ewotCQlwYXRoX3RvX2NoZWNrICs9ICI7Li5cXCIgKyBjb21tb25fbmFtZSArICIqIjsKLQl9Ci0K
LQkvLyBEZXRlcm1pbmUgdGFyZ2V0IGZvciBidWlsZCBmbGFncwotCWlmICh0YXJnZXQgPT0gbnVs
bCkgewotCQl0YXJnZXQgPSAiIjsKLQl9IGVsc2UgewotCQl0YXJnZXQgPSAiXyIgKyB0YXJnZXQu
dG9VcHBlckNhc2UoKS5yZXBsYWNlKG5ldyBSZWdFeHAoIi0iLCAiZyIpLCAiXyIpOwotCX0KLQot
CS8vIEV4cGFuZCBwYXRoIHRvIGluY2x1ZGUgZ2VuZXJhbCBkaXJzCi0JcGF0aF90b19jaGVjayAr
PSAiOyIgKyBwaHBfdXN1YWxfbGliX3N1c3BlY3RzOwotCi0JLy8gSXQgaXMgY29tbW9uIHByYWN0
aWNlIHRvIHB1dCBsaWJzIHVuZGVyIG9uZSBvZiB0aGVzZSBkaXIgbmFtZXMKLQl2YXIgc3ViZGly
cyA9IG5ldyBBcnJheShQSFBfR1RLX0RFQlVHID09ICJ5ZXMiID8gIkRlYnVnIiA6ICJSZWxlYXNl
IiwgImxpYiIsICJsaWJzIiwgImxpYmV4ZWMiKTsKLQotCS8vIGxpYm5hbWVzIGNhbiBiZSA7IHNl
cGFyYXRlZCBsaXN0IG9mIGFjY2VwdGVkIGxpYnJhcnkgbmFtZXMKLQlsaWJuYW1lcyA9IGxpYm5h
bWVzLnNwbGl0KCc7Jyk7Ci0KLQl2YXIgaSwgaiwgaywgbGlibmFtZTsKLQl2YXIgbG9jYXRpb24g
PSBmYWxzZTsKLQl2YXIgcGF0aCA9IHBhdGhfdG9fY2hlY2suc3BsaXQoJzsnKTsKLQotCWZvciAo
aSA9IDA7IGkgPCBsaWJuYW1lcy5sZW5ndGg7IGkrKykgewotCQlsaWJuYW1lID0gbGlibmFtZXNb
aV07Ci0KLQkJZm9yIChrID0gMDsgayA8IHBhdGgubGVuZ3RoOyBrKyspIHsKLQkJCWxvY2F0aW9u
ID0gZ2xvYihwYXRoW2tdICsgIlxcIiArIGxpYm5hbWUpOwotCQkJaWYgKGxvY2F0aW9uKSB7Ci0J
CQkJbG9jYXRpb24gPSBsb2NhdGlvblswXTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWZvciAoaiA9
IDA7IGogPCBzdWJkaXJzLmxlbmd0aDsgaisrKSB7Ci0JCQkJbG9jYXRpb24gPSBnbG9iKHBhdGhb
a10gKyAiXFwiICsgc3ViZGlyc1tqXSArICJcXCIgKyBsaWJuYW1lKTsKLQkJCQlpZiAobG9jYXRp
b24pIHsKLQkJCQkJbG9jYXRpb24gPSBsb2NhdGlvblswXTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQot
CQkJfQotCQkJaWYgKGxvY2F0aW9uKQotCQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKGxvY2F0aW9u
KSB7Ci0JCQlsb2NhdGlvbiA9IGNvbmRlbnNlX3BhdGgobG9jYXRpb24pOwotCQkJdmFyIGxpYmRp
ciA9IEZTTy5HZXRQYXJlbnRGb2xkZXJOYW1lKGxvY2F0aW9uKTsKLQkJCWxpYm5hbWUgPSBGU08u
R2V0RmlsZU5hbWUobG9jYXRpb24pOwotCQkJQUREX0ZMQUcoIkxERkxBR1MiICsgdGFyZ2V0LCAn
L2xpYnBhdGg6IicgKyBsaWJkaXIgKyAnIiAnKTsKLQkJCUFERF9GTEFHKCJMSUJTIiArIHRhcmdl
dCwgbGlibmFtZSk7Ci0KLQkJCVNURE9VVC5Xcml0ZUxpbmUoCWxvY2F0aW9uKTsKLQotCQkJcmV0
dXJuIGxvY2F0aW9uOwotCQl9Ci0KLQkJLy8gQ2hlY2sgaW4gdGhlaXIgc3RhbmRhcmQgbGliIHBh
dGgKLQkJbG9jYXRpb24gPSBmaW5kX3BhdHRlcm5faW5fcGF0aChsaWJuYW1lLCBXc2hTaGVsbC5F
bnZpcm9ubWVudCgiUHJvY2VzcyIpLkl0ZW0oIkxJQiIpKTsKLQotCQlpZiAobG9jYXRpb24pIHsK
LQkJCWxvY2F0aW9uID0gY29uZGVuc2VfcGF0aChsb2NhdGlvbik7Ci0JCQlsaWJuYW1lID0gRlNP
LkdldEZpbGVOYW1lKGxvY2F0aW9uKTsKLQkJCUFERF9GTEFHKCJMSUJTIiArIHRhcmdldCwgbGli
bmFtZSk7Ci0KLQkJCVNURE9VVC5Xcml0ZUxpbmUoIgk8aW4gTElCIHBhdGg+ICIgKyBsaWJuYW1l
KTsKLQkJCXJldHVybiBsb2NhdGlvbjsKLQkJfQotCX0KLQotCUVSUk9SKCIJIiArIGxpYm5hbWUg
KyAiIG5vdCBmb3VuZCAtIGFib3J0aW5nIGNvbmZpZ3VyZSBwcm9jZXNzIik7Ci0KLQlyZXR1cm4g
ZmFsc2U7Ci19Ci0KLWZ1bmN0aW9uIENIRUNLX0hFQURFUihoZWFkZXJfbmFtZSwgcGF0aF90b19j
aGVjaykgewotCWlmICghcGF0aF90b19jaGVjaykgewotCQlwYXRoX3RvX2NoZWNrID0gcGhwX3Vz
dWFsX2luY2x1ZGVfc3VzcGVjdHM7Ci0JfQotCi0JdmFyIHBhdGggPSBzZWFyY2hfcGF0aHMoaGVh
ZGVyX25hbWUsIHBhdGhfdG9fY2hlY2ssICJJTkNMVURFIik7Ci0KLQlpZiAoIXBhdGgpIHsKLQkJ
RVJST1IoIgkiICsgaGVhZGVyX25hbWUgKyAiIG5vdCBmb3VuZCAtIGFib3J0aW5nIGNvbmZpZ3Vy
ZSBwcm9jZXNzIik7Ci0JfQotCi0JcmV0dXJuIHBhdGg7Ci19Ci0KLS8vIHVzZSB0aGlzIGZvciB2
ZXJzaW9uIGNoZWNraW5nCi1mdW5jdGlvbiBHUkVQX0hFQURFUihoZWFkZXJfbmFtZSwgcmVnZXgs
IHBhdGhfdG9fY2hlY2spIHsKLQotCXZhciBjID0gZmFsc2U7Ci0KLQlpZiAoRlNPLkZpbGVFeGlz
dHMocGF0aF90b19jaGVjayArICJcXCIgKyBoZWFkZXJfbmFtZSkpIHsKLQkJYyA9IGZpbGVfZ2V0
X2NvbnRlbnRzKHBhdGhfdG9fY2hlY2sgKyAiXFwiICsgaGVhZGVyX25hbWUpOwotCX0KLQotCWlm
ICghYykgewotCQkvKiBsb29rIGluIHRoZSBpbmNsdWRlIHBhdGggKi8KLQotCQl2YXIgcCA9IHNl
YXJjaF9wYXRocyhoZWFkZXJfbmFtZSwgcGF0aF90b19jaGVjaywgIklOQ0xVREUiKTsKLQotCQlp
ZiAodHlwZW9mKHApID09ICJzdHJpbmciKSB7Ci0JCQljID0gZmlsZV9nZXRfY29udGVudHMocCk7
Ci0JCX0KLQotCQlpZiAoIWMpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCX0KLQotCWlmICh0
eXBlb2YocmVnZXgpID09ICJzdHJpbmciKSB7Ci0JCXJlZ2V4ID0gbmV3IFJlZ0V4cChyZWdleCk7
Ci0JfQotCi0JaWYgKGMubWF0Y2gocmVnZXgpKSB7Ci0JCS8qIGNhbGxlciBjYW4gbm93IHVzZSBS
ZWdFeHAuJDEgZXRjLiB0byBnZXQgYXQgcGF0dGVybnMgKi8KLQkJcmV0dXJuIHRydWU7Ci0JfQot
CXJldHVybiBmYWxzZTsKLX0KLQotZnVuY3Rpb24gQ0hFQ0tfSEVBREVSX0FERF9JTkNMVURFKGhl
YWRlcl9uYW1lLCBmbGFnX25hbWUsIHBhdGhfdG9fY2hlY2ssIHVzZV9lbnYsIGFkZF9kaXJfcGFy
dCwgYWRkX3RvX2ZsYWdfb25seSkgewotCi0JdmFyIGRpcl9wYXJ0X3RvX2FkZCA9ICIiOwotCi0J
aWYgKHVzZV9lbnYgPT0gbnVsbCkgewotCQl1c2VfZW52ID0gdHJ1ZTsKLQl9Ci0KLQkvLyBpZiB0
cnVlLCBhZGQgdGhlIGRpciBwYXJ0IG9mIHRoZSBoZWFkZXJfbmFtZSB0byB0aGUgaW5jbHVkZSBw
YXRoCi0JaWYgKGFkZF9kaXJfcGFydCA9PSBudWxsKSB7Ci0JCWFkZF9kaXJfcGFydCA9IGZhbHNl
OwotCX0gZWxzZSBpZiAoYWRkX2Rpcl9wYXJ0KSB7Ci0JCXZhciBiYXNlbmFtZSA9IEZTTy5HZXRG
aWxlTmFtZShoZWFkZXJfbmFtZSk7Ci0JCWRpcl9wYXJ0X3RvX2FkZCA9ICJcXCIgKyBoZWFkZXJf
bmFtZS5zdWJzdHIoMCwgaGVhZGVyX25hbWUubGVuZ3RoIC0gYmFzZW5hbWUubGVuZ3RoIC0gMSk7
Ci0JfQotCi0JaWYgKHBhdGhfdG9fY2hlY2sgPT0gbnVsbCkgewotCQlwYXRoX3RvX2NoZWNrID0g
cGhwX3VzdWFsX2luY2x1ZGVfc3VzcGVjdHM7Ci0JfSBlbHNlIHsKLQkJcGF0aF90b19jaGVjayAr
PSAiOyIgKyBwaHBfdXN1YWxfaW5jbHVkZV9zdXNwZWN0czsKLQl9Ci0KLQl2YXIgcCA9IHNlYXJj
aF9wYXRocyhoZWFkZXJfbmFtZSwgcGF0aF90b19jaGVjaywgdXNlX2VudiA/ICJJTkNMVURFIiA6
IG51bGwpOwotCXZhciBoYXZlID0gMDsKLQl2YXIgc3ltOwotCi0JaWYgKHR5cGVvZihwKSA9PSAi
c3RyaW5nIikgewotCQlBRERfRkxBRyhmbGFnX25hbWUsICcvSSAiJyArIHAgKyBkaXJfcGFydF90
b19hZGQgKyAnIiAnKTsKLQl9Ci0KLQloYXZlID0gcCA/IDEgOiAwCi0KLQlzeW0gPSBoZWFkZXJf
bmFtZS50b1VwcGVyQ2FzZSgpOwotCXN5bSA9IHN5bS5yZXBsYWNlKG5ldyBSZWdFeHAoIltcXFxc
L1wuLV0iLCAiZyIpLCAiXyIpOwotCi0JaWYgKHR5cGVvZihhZGRfdG9fZmxhZ19vbmx5KSA9PSB1
bmRlZmluZWQgJiYKLQkJCWZsYWdfbmFtZS5tYXRjaChuZXcgUmVnRXhwKCJeQ0ZMQUdTXyguKikk
IikpKSB7Ci0JCWFkZF90b19mbGFnX29ubHkgPSB0cnVlOwotCX0KLQotCWlmICh0eXBlb2YoYWRk
X3RvX2ZsYWdfb25seSkgIT0gInVuZGVmaW5lZCIpIHsKLQkJQUREX0ZMQUcoZmxhZ19uYW1lLCAi
L0QgSEFWRV8iICsgc3ltICsgIj0iICsgaGF2ZSk7Ci0JfSBlbHNlIHsKLQkJQUNfREVGSU5FKCJI
QVZFXyIgKyBzeW0sIGhhdmUsICJoYXZlIHRoZSAiICsgaGVhZGVyX25hbWUgKyAiIGhlYWRlciBm
aWxlIik7Ci0JfQotCi0JcmV0dXJuIHA7Ci19Ci0KLWZ1bmN0aW9uIEVYVEVOU0lPTihleHRuYW1l
LCBmaWxlX2xpc3QsIHNoYXJlZCwgY2ZsYWdzLCBkbGxuYW1lLCBvYmpfZGlyKSB7Ci0KLQl2YXIg
ZGxsZmxhZ3MgPSAiIjsKLQl2YXIgZGVwX2xpYnMgPSAiIjsKLQl2YXIgRVhUID0gZXh0bmFtZS50
b1VwcGVyQ2FzZSgpLnJlcGxhY2UobmV3IFJlZ0V4cCgiLSIsICJnIiksICJfIik7Ci0JdmFyIGV4
dG5hbWVfZm9yX3ByaW50aW5nOwotCXZhciByZXNfdmFyID0gIiI7Ci0JdmFyIGZpbGU7Ci0KLQlp
ZiAoY2ZsYWdzID09IG51bGwpIHsKLQkJY2ZsYWdzID0gIiI7Ci0JfQotCi0JaWYgKHR5cGVvZihv
YmpfZGlyKSA9PSAidW5kZWZpbmVkIikgewotCi0JCWV4dG5hbWVfZm9yX3ByaW50aW5nID0gY29u
ZmlndXJlX21vZHVsZV9kaXJuYW1lOwotCi0JfSBlbHNlIHsKLQotCQlleHRuYW1lX2Zvcl9wcmlu
dGluZyA9IGNvbmZpZ3VyZV9tb2R1bGVfZGlybmFtZSArICIgKHZpYSAiICsgb2JqX2RpciArICIp
IjsKLQl9Ci0KLQlTVERPVVQuV3JpdGVMaW5lKCJFbmFibGluZyBleHRlbnNpb24gIiArIGV4dG5h
bWVfZm9yX3ByaW50aW5nKTsKLQotCWlmIChleHRuYW1lID09ICdwaHAtZ3RrJykgewotCQljZmxh
Z3MgPSAiL0QgQ09NUElMRV9ETF8iICsgRVhUICsgIjIgL0QgIiArIEVYVCArICJfRVhQT1JUUz0x
IiArIGNmbGFnczsKLQkJZmlsZSA9IE1GTzsKLQl9IGVsc2UgewotCQljZmxhZ3MgPSAiL0QgUEhQ
X0dUS19DT01QSUxFX0RMXyIgKyBFWFQgKyAiIC9EICIgKyBFWFQgKyAiX0VYUE9SVFM9MSIgKyBj
ZmxhZ3M7Ci0JCWZpbGUgPSBNRkU7Ci0JfQotCi0JZmlsZS5Xcml0ZUJsYW5rTGluZXMoMSk7Ci0J
ZmlsZS5Xcml0ZUxpbmUoIiMgb2JqZWN0cyBmb3IgRVhUICIgKyBleHRuYW1lKTsKLQlmaWxlLldy
aXRlQmxhbmtMaW5lcygxKTsKLQotCUFERF9TT1VSQ0VTKGNvbmZpZ3VyZV9tb2R1bGVfZGlybmFt
ZSwgZmlsZV9saXN0LCBleHRuYW1lLCBvYmpfZGlyKTsKLQotCWZpbGUuV3JpdGVCbGFua0xpbmVz
KDEpOwotCi0JLy8gUEhQLUdUSyBhbmQgaXRzIGV4dGVuc2lvbnMgYXJlIGFsd2F5cyBidWlsdCBh
cyBzaGFyZWQgZm9yIG5vdwotCi0JaWYgKGRsbG5hbWUgPT0gbnVsbCkgewotCQlpZiAoZXh0bmFt
ZSA9PSAncGhwLWd0aycpIHsKLQkJCWRsbG5hbWUgPSAicGhwX2d0azIuZGxsIjsKLQkJCXJlc25h
bWUgPSBnZW5lcmF0ZV92ZXJzaW9uX2luZm9fcmVzb3VyY2UoZGxsbmFtZSwgY29uZmlndXJlX21v
ZHVsZV9kaXJuYW1lKTsKLQkJCXJlc192YXIgPSAiICQoUEhQR1RLRExMX1JFUykiOwotCQl9IGVs
c2UgewotCQkJY2ZsYWdzID0gIi9EIEdUS19TSEFSRUQ9MSAiICsgY2ZsYWdzOwotCQkJZGxsbmFt
ZSA9ICJwaHBfZ3RrXyIgKyBleHRuYW1lICsgIjIuZGxsIjsKLQkJCWRsbGZsYWdzID0gIiAkKERM
TF9MREZMQUdTKSI7Ci0JCQlkZXBfbGlicyA9ICIgJChCVUlMRF9ESVIpXFwkKFBIUEdUS0xJQikg
JChMSUJTX1BIUF9HVEspIjsKLQkJfQotCX0KLQl2YXIgbGlibmFtZSA9IGRsbG5hbWUuc3Vic3Ry
aW5nKDAsIGRsbG5hbWUubGVuZ3RoIC0gNCkgKyAiLmxpYiI7Ci0JdmFyIGxkID0gIkAkKExEKSI7
Ci0KLQlBRERfRkxBRygiRVhUX1RBUkdFVFMiLCAiJChCVUlMRF9ESVIpXFwiICsgZGxsbmFtZSk7
Ci0JbWFrZV9idWlsZHNbbWFrZV9idWlsZHMubGVuZ3RoXSA9IGV4dG5hbWUgKyAiOiAkKEJVSUxE
X0RJUilcXCIgKyBkbGxuYW1lOwotCi0JZmlsZS5Xcml0ZUxpbmUoIiQoQlVJTERfRElSKVxcIiAr
IGRsbG5hbWUgKyAiOiAkKCIgKyBFWFQgKyAiX0dMT0JBTF9PQkpTKSIgKyByZXNfdmFyKTsKLQlm
aWxlLldyaXRlTGluZSgiXHQiICsgbGQgKyAiIC9vdXQ6JChCVUlMRF9ESVIpXFwiICsgZGxsbmFt
ZSArICIgJChMREZMQUdTXyIgKyBFWFQgKyAiKSIgKyBkbGxmbGFncyArICIgJChMREZMQUdTKSAk
KCIgKyBFWFQgKyAiX0dMT0JBTF9PQkpTKSAkKExJQlNfIiArIEVYVCArICIpIiArIGRlcF9saWJz
ICsgIiAkKExJQlMpIiArIHJlc192YXIpOwotCi0JZmlsZS5Xcml0ZUJsYW5rTGluZXMoMSk7Ci0J
ZmlsZS5Xcml0ZUxpbmUoZGxsbmFtZSArICI6ICQoQlVJTERfRElSKVxcIiArIGRsbG5hbWUpOwot
CWZpbGUuV3JpdGVMaW5lKCJcdEBlY2hvIEVYVCAiICsgZXh0bmFtZSArICIgYnVpbGQgY29tcGxl
dGUiKTsKLQlmaWxlLldyaXRlQmxhbmtMaW5lcygxKTsKLQotCUFERF9GTEFHKCJDRkxBR1NfIiAr
IEVYVCwgY2ZsYWdzKTsKLX0KLQotZnVuY3Rpb24gQUREX1NPVVJDRVMoZGlyLCBmaWxlX2xpc3Qs
IHRhcmdldCwgb2JqX2RpcikgewotCi0JdmFyIGk7Ci0JdmFyIHR2OwotCXZhciBzcmMsIG9iaiwg
c3ltLCBmbGFnczsKLQl2YXIgY29yZV9jZmxhZ3MgPSAiIjsKLQl2YXIgZmlsZTsKLQotCXN5bSA9
IHRhcmdldC50b1VwcGVyQ2FzZSgpLnJlcGxhY2UobmV3IFJlZ0V4cCgiLSIsICJnIiksICJfIikg
KyAiX0dMT0JBTF9PQkpTIjsKLQlmbGFncyA9ICJDRkxBR1NfIiArIHRhcmdldC50b1VwcGVyQ2Fz
ZSgpLnJlcGxhY2UobmV3IFJlZ0V4cCgiLSIsICJnIiksICJfIik7Ci0KLQlpZiAoY29uZmlndXJl
X3N1YnN0LkV4aXN0cyhzeW0pKSB7Ci0JCXR2ID0gY29uZmlndXJlX3N1YnN0Lkl0ZW0oc3ltKTsK
LQl9IGVsc2UgewotCQl0diA9ICIiOwotCX0KLQotCWlmICh0YXJnZXQgIT0gInBocC1ndGsiKSB7
Ci0JCWZpbGUgPSBNRkU7Ci0JCWNvcmVfY2ZsYWdzID0gIiQoQ0ZMQUdTX1BIUF9HVEspICI7Ci0J
fSBlbHNlIHsKLQkJZmlsZSA9IE1GTzsKLQl9Ci0KLQlmaWxlX2xpc3QgPSBmaWxlX2xpc3Quc3Bs
aXQobmV3IFJlZ0V4cCgiXFxzKyIpKTsKLQlmaWxlX2xpc3Quc29ydCgpOwotCi0JdmFyIHJlID0g
bmV3IFJlZ0V4cCgiXC5bYS16MC05QS1aXC1dKyQiKTsKLQotCWRpciA9IGRpci5yZXBsYWNlKG5l
dyBSZWdFeHAoIi8iLCAiZyIpLCAiXFwiKTsKLQl2YXIgb2Jqc19saW5lID0gIiI7Ci0JdmFyIHNy
Y3NfbGluZSA9ICIiOwotCi0JdmFyIHN1Yl9idWlsZCA9ICIkKEJVSUxEX0RJUilcXCI7Ci0KLQkv
KiBpZiBtb2R1bGUgZGlyIGlzIG5vdCBhIGNoaWxkIG9mIHRoZSBtYWluIHNvdXJjZSBkaXIsCi0J
ICogd2UgbmVlZCB0byB0d2VhayBpdDsgd2Ugc2hvdWxkIGhhdmUgZGV0ZWN0ZWQgc3VjaCBhCi0J
ICogY2FzZSBpbiBjb25kZW5zZV9wYXRoIGFuZCByZXdyaXR0ZW4gdGhlIHBhdGggdG8KLQkgKiBi
ZSByZWxhdGl2ZS4KLQkgKiBUaGlzIHByb2JhYmx5IGJyZWFrcyBmb3Igbm9uLXNpYmxpbmcgZGly
cyAqLwotCWlmIChvYmpfZGlyID09IG51bGwpIHsKLQkJdmFyIGJ1aWxkX2RpciA9IGRpci5yZXBs
YWNlKG5ldyBSZWdFeHAoIl4uLlxcXFwiKSwgIiIpOwotCX0gZWxzZSB7Ci0JCXZhciBidWlsZF9k
aXIgPSBvYmpfZGlyLnJlcGxhY2UobmV3IFJlZ0V4cCgiXi4uXFxcXCIpLCAiIik7Ci0JfQotCi0J
dmFyIG1hbmdsZV9kaXIgPSBidWlsZF9kaXIucmVwbGFjZShuZXcgUmVnRXhwKCJbXFxcXC8uKy1d
IiwgImciKSwgIl8iKTsKLQotCS8qIGtpbGwgdHJhaWxpbmcgdW5kZXJzY29yZXMgKi8KLQlpZiAo
bWFuZ2xlX2Rpci5zdWJzdHJpbmcobWFuZ2xlX2Rpci5sZW5ndGggLSAxKSA9PSAiXyIpIHsKLQkJ
bWFuZ2xlX2RpciA9IG1hbmdsZV9kaXIuc3Vic3RyaW5nKDAsIG1hbmdsZV9kaXIubGVuZ3RoIC0g
MSk7Ci0JfQotCi0JdmFyIGJkX2ZsYWdzX25hbWUgPSAiQ0ZMQUdTX0JEXyIgKyBtYW5nbGVfZGly
LnRvVXBwZXJDYXNlKCk7Ci0KLQl2YXIgZGlycyA9IGJ1aWxkX2Rpci5zcGxpdCgiXFwiKTsKLQl2
YXIgaSwgZCA9ICIiOwotCWZvciAoaSA9IDA7IGkgPCBkaXJzLmxlbmd0aDsgaSsrKSB7Ci0JCWQg
Kz0gZGlyc1tpXTsKLQkJYnVpbGRfZGlyc1tidWlsZF9kaXJzLmxlbmd0aF0gPSBkOwotCQlkICs9
ICJcXCI7Ci0JfQotCXN1Yl9idWlsZCArPSBkOwotCi0JREVGSU5FKGJkX2ZsYWdzX25hbWUsICIg
L0ZkIiArIHN1Yl9idWlsZCArICIgL0ZwIiArIHN1Yl9idWlsZCArICIgL0ZSIiArIHN1Yl9idWls
ZCk7Ci0KLQlmb3IgKGkgaW4gZmlsZV9saXN0KSB7Ci0JCXNyYyA9IGZpbGVfbGlzdFtpXTsKLQkJ
b2JqID0gc3JjLnJlcGxhY2UocmUsICIub2JqIik7Ci0JCXR2ICs9ICIgIiArIHN1Yl9idWlsZCAr
IG9iajsKLQotCQlmaWxlLldyaXRlTGluZShzdWJfYnVpbGQgKyBvYmogKyAiOiAiICsgZGlyICsg
IlxcIiArIHNyYyk7Ci0JCWZpbGUuV3JpdGVMaW5lKCJcdEAkKENDKSAkKCIgKyBmbGFncyArICIp
ICIgKyBjb3JlX2NmbGFncyArICIkKENGTEFHUykgJCgiICsgYmRfZmxhZ3NfbmFtZSArICIpIC9j
ICIgKyBkaXIgKyAiXFwiICsgc3JjICsgIiAvRm8iICsgc3ViX2J1aWxkICsgb2JqKTsKLQl9Ci0K
LQlERUZJTkUoc3ltLCB0dik7Ci19Ci0KLWZ1bmN0aW9uIEFERF9GTEFHKG5hbWUsIGZsYWdzLCB0
YXJnZXQpIHsKLQotCWlmICh0YXJnZXQgIT0gbnVsbCkgewotCQluYW1lID0gdGFyZ2V0LnRvVXBw
ZXJDYXNlKCkgKyAiXyIgKyBuYW1lOwotCX0KLQlpZiAoY29uZmlndXJlX3N1YnN0LkV4aXN0cyhu
YW1lKSkgewotCQl2YXIgY3Vycl9mbGFncyA9IGNvbmZpZ3VyZV9zdWJzdC5JdGVtKG5hbWUpOwot
Ci0JCWlmIChjdXJyX2ZsYWdzLmluZGV4T2YoZmxhZ3MpID49IDApIHsKLQkJCXJldHVybjsKLQkJ
fQotCi0JCWZsYWdzID0gZmxhZ3MgKyAiICIgKyBjdXJyX2ZsYWdzOwotCQljb25maWd1cmVfc3Vi
c3QuUmVtb3ZlKG5hbWUpOwotCX0KLQljb25maWd1cmVfc3Vic3QuQWRkKG5hbWUsIGZsYWdzKTsK
LX0KLQotZnVuY3Rpb24gZ2V0X2RlZmluZShuYW1lKSB7Ci0KLQlyZXR1cm4gY29uZmlndXJlX3N1
YnN0Lkl0ZW0obmFtZSk7Ci19Ci0KLWZ1bmN0aW9uIEVSUk9SKG1zZykgewotCi0gICAgU1RERVJS
LldyaXRlQmxhbmtMaW5lcygyKTsKLQlTVERFUlIuV3JpdGVMaW5lKCJFUlJPUjogIiArIG1zZyk7
Ci0JV1NjcmlwdC5RdWl0KDMpOwotfQotCi1mdW5jdGlvbiBXQVJOSU5HKG1zZykgewotCi0JU1RE
RVJSLldyaXRlTGluZSgiV0FSTklORzogIiArIG1zZyk7Ci0JU1RERVJSLldyaXRlQmxhbmtMaW5l
cygxKTsKLX0KLQotLyogU2VhcmNoZXMgYSBzZXQgb2YgcGF0aHMgZm9yIGEgZmlsZTsgcmV0dXJu
cyB0aGUgZGlyIGluIHdoaWNoIHRoZSBmaWxlIHdhcyBmb3VuZCwgdHJ1ZSBpZiBpdAotd2FzIGZv
dW5kIGluIHRoZSBkZWZhdWx0IGVudiBwYXRoLCBvciBmYWxzZSBpZiBpdCB3YXMgbm90IGZvdW5k
IGF0IGFsbC4gZW52X25hbWUgaXMgdGhlIG9wdGlvbmFsCi1uYW1lIG9mIGFuIGVudiB2YXIgc3Bl
Y2lmeWluZyB0aGUgZGVmYXVsdCBwYXRoIHRvIHNlYXJjaCAqLwotZnVuY3Rpb24gc2VhcmNoX3Bh
dGhzKHRoaW5nX3RvX2ZpbmQsIGV4cGxpY2l0X3BhdGgsIGVudl9uYW1lKSB7Ci0KLQl2YXIgaSwg
Zm91bmQgPSBmYWxzZSwgcGxhY2UgPSBmYWxzZSwgZmlsZSwgZW52OwotCi0JU1RET1VULldyaXRl
KCJDaGVja2luZyBmb3IgIiArIHRoaW5nX3RvX2ZpbmQgKyAiIC4uLiAiKTsKLQotCWlmICh0aGlu
Z190b19maW5kLmxlbmd0aCA8IDYpIHsKLQkJU1RET1VULldyaXRlKCIJIik7Ci0JfQotCi0JdGhp
bmdfdG9fZmluZCA9IHRoaW5nX3RvX2ZpbmQucmVwbGFjZShuZXcgUmVnRXhwKCIvIiwgImciKSwg
IlxcIik7Ci0KLQlpZiAoZXhwbGljaXRfcGF0aCAhPSBudWxsKSB7Ci0JCWlmICh0eXBlb2YoZXhw
bGljaXRfcGF0aCkgPT0gInN0cmluZyIpIHsKLQkJCWV4cGxpY2l0X3BhdGggPSBleHBsaWNpdF9w
YXRoLnNwbGl0KCI7Iik7Ci0JCX0KLQotCQlmb3IgKGkgPSAwOyBpIDwgZXhwbGljaXRfcGF0aC5s
ZW5ndGg7IGkrKykgewotCQkJZmlsZSA9IGdsb2IoZXhwbGljaXRfcGF0aFtpXSArICJcXCIgKyB0
aGluZ190b19maW5kKTsKLQkJCWlmIChmaWxlKSB7Ci0JCQkJZm91bmQgPSB0cnVlOwotCQkJCXBs
YWNlID0gZmlsZVswXTsKLQkJCQlwbGFjZSA9IHBsYWNlLnN1YnN0cigwLCBwbGFjZS5sZW5ndGgg
LSB0aGluZ190b19maW5kLmxlbmd0aCAtIDEpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQot
Ci0JaWYgKCFmb3VuZCAmJiBlbnZfbmFtZSAhPSBudWxsKSB7Ci0JCWVudiA9IFdzaFNoZWxsLkVu
dmlyb25tZW50KCJQcm9jZXNzIikuSXRlbShlbnZfbmFtZSk7Ci0JCWVudiA9IGVudi5zcGxpdCgi
OyIpOwotCQlmb3IgKGkgPSAwOyBpIDwgZW52Lmxlbmd0aDsgaSsrKSB7Ci0JCQlmaWxlID0gZ2xv
YihlbnZbaV0gKyAiXFwiICsgdGhpbmdfdG9fZmluZCk7Ci0JCQlpZiAoZmlsZSkgewotCQkJCWZv
dW5kID0gdHJ1ZTsKLQkJCQlwbGFjZSA9IHRydWU7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9
Ci0KLQlpZiAoZm91bmQgJiYgcGxhY2UgPT0gdHJ1ZSkgewotCQlTVERPVVQuV3JpdGVMaW5lKCIJ
PGluIGRlZmF1bHQgcGF0aD4iKTsKLQkJcGxhY2UgPSBmaWxlWzBdOwotCQlwbGFjZSA9IHBsYWNl
LnN1YnN0cigwLCBwbGFjZS5sZW5ndGggLSB0aGluZ190b19maW5kLmxlbmd0aCAtIDEpOwotCX0g
ZWxzZSBpZiAoZm91bmQpIHsKLQkJU1RET1VULldyaXRlTGluZSgiCSIgKyBwbGFjZSk7Ci0JfSBl
bHNlIHsKLQkJU1RET1VULldyaXRlTGluZSgiCTxub3QgZm91bmQ+Iik7Ci0JfQotCXJldHVybiBw
bGFjZTsKLX0KLQotZnVuY3Rpb24gd29yZF93cmFwX2FuZF9pbmRlbnQoaW5kZW50LCB0ZXh0LCBs
aW5lX3N1ZmZpeCwgaW5kZW50X2NoYXIpIHsKLQotCWlmICh0ZXh0ID09IG51bGwpIHsKLQkJcmV0
dXJuICIiOwotCX0KLQotCXZhciB3b3JkcyA9IHRleHQuc3BsaXQobmV3IFJlZ0V4cCgiXFxzKyIs
ICJnIikpOwotCXZhciBpID0gMDsKLQl2YXIgcmV0X3RleHQgPSAiIjsKLQl2YXIgdGhpc19saW5l
ID0gIiI7Ci0JdmFyIHQ7Ci0JdmFyIHNwYWNlID0gIiI7Ci0JdmFyIGxpbmVzID0gMDsKLQotCWlm
IChsaW5lX3N1ZmZpeCA9PSBudWxsKSB7Ci0JCWxpbmVfc3VmZml4ID0gIiI7Ci0JfQotCi0JaWYg
KGluZGVudF9jaGFyID09IG51bGwpIHsKLQkJaW5kZW50X2NoYXIgPSAiICI7Ci0JfQotCi0JZm9y
IChpID0gMDsgaSA8IGluZGVudDsgaSsrKSB7Ci0JCXNwYWNlICs9IGluZGVudF9jaGFyOwotCX0K
LQotCWZvciAoaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7IGkrKykgewotCQlpZiAodGhpc19saW5l
Lmxlbmd0aCkgewotCQkJdCA9IHRoaXNfbGluZSArICIgIiArIHdvcmRzW2ldOwotCQl9IGVsc2Ug
ewotCQkJdCA9IHdvcmRzW2ldOwotCQl9Ci0KLQkJaWYgKHQubGVuZ3RoICsgaW5kZW50ID4gNzgp
IHsKLQkJCWlmIChsaW5lcysrKSB7Ci0JCQkJcmV0X3RleHQgKz0gc3BhY2U7Ci0JCQl9Ci0JCQly
ZXRfdGV4dCArPSB0aGlzX2xpbmUgKyBsaW5lX3N1ZmZpeCArICJcclxuIjsKLQkJCXRoaXNfbGlu
ZSA9ICIiOwotCQl9Ci0KLQkJaWYgKHRoaXNfbGluZS5sZW5ndGgpIHsKLQkJCXRoaXNfbGluZSAr
PSAiICIgKyB3b3Jkc1tpXTsKLQkJfSBlbHNlIHsKLQkJCXRoaXNfbGluZSA9IHdvcmRzW2ldOwot
CQl9Ci0JfQotCi0JaWYgKHRoaXNfbGluZS5sZW5ndGgpIHsKLQkJaWYgKGxpbmVzKQotCQkJcmV0
X3RleHQgKz0gc3BhY2U7Ci0JCXJldF90ZXh0ICs9IHRoaXNfbGluZTsKLQl9Ci0KLQlyZXR1cm4g
cmV0X3RleHQ7Ci19Ci0KLWZ1bmN0aW9uIGZpbGVfZ2V0X2NvbnRlbnRzKGZpbGVuYW1lKSB7Ci0K
LQl2YXIgZiwgYzsKLQotCXRyeSB7Ci0JCWYgPSBGU08uT3BlblRleHRGaWxlKGZpbGVuYW1lLCAx
KTsKLQkJYyA9IGYuUmVhZEFsbCgpOwotCQlmLkNsb3NlKCk7Ci0JCXJldHVybiBjOwotCX0gY2F0
Y2ggKGUpIHsKLQkJU1RET1VULldyaXRlTGluZSgiUHJvYmxlbSByZWFkaW5nICIgKyBmaWxlbmFt
ZSk7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci19Ci0KLWZ1bmN0aW9uIGdlbmVyYXRlX2ZpbGVzKCkg
ewotCi0JdmFyIGksIGRpciwgYmQsIGxhc3Q7Ci0KLQlnZW5lcmF0ZV9zb3VyY2UoKTsKLQotCVNU
RE9VVC5Xcml0ZUxpbmUoIkdlbmVyYXRpbmcgc291cmNlIGZpbGVzIC0gdGhpcyBtYXkgdGFrZSBh
IGZldyBzZWNvbmRzIik7Ci0JV1NjcmlwdC5TbGVlcCgzNTAwKTsKLQljaGVja19nZW5lcmF0aW9u
KCk7Ci0KLQkvLyBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBhZGRpdGlvbmFsIG9iamVjdHMgdG8g
YWRkCi0JdmFyIHNvdXJjZXMgPSBmaWxlX2dldF9jb250ZW50cygic291cmNlcy50ZW1wIik7Ci0J
Y29uZmlndXJlX21vZHVsZV9kaXJuYW1lID0gY29uZGVuc2VfcGF0aCgiZXh0XFxndGsrXFwiKTsK
LQlFWFRFTlNJT04oInBocC1ndGsiLCBwaHBfZ3RrX2ZpbGVzICsgc291cmNlcywgdHJ1ZSk7Ci0K
LQlTVERPVVQuV3JpdGVCbGFua0xpbmVzKDEpOwotCVNURE9VVC5Xcml0ZUxpbmUoIkNyZWF0aW5n
IGJ1aWxkIGRpcnMuLi4iKTsKLQlkaXIgPSBnZXRfZGVmaW5lKCJCVUlMRF9ESVIiKTsKLQlidWls
ZF9kaXJzLnNvcnQoKTsKLQlsYXN0ID0gbnVsbDsKLQotCWlmICghRlNPLkZvbGRlckV4aXN0cyhk
aXIpKSB7Ci0JCUZTTy5DcmVhdGVGb2xkZXIoZGlyKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwg
YnVpbGRfZGlycy5sZW5ndGg7IGkrKykgewotCQliZCA9IEZTTy5CdWlsZFBhdGgoZGlyLCBidWls
ZF9kaXJzW2ldKTsKLQkJaWYgKGJkID09IGxhc3QpIHsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWxh
c3QgPSBiZDsKLQkJQUREX0ZMQUcoIkJVSUxEX0RJUlNfU1VCIiwgYmQpOwotCQlpZiAoIUZTTy5G
b2xkZXJFeGlzdHMoYmQpKSB7Ci0JCQlGU08uQ3JlYXRlRm9sZGVyKGJkKTsKLQkJfQotCX0KLQot
CWdlbmVyYXRlX21ha2VmaWxlKCk7Ci0KLQlTVERPVVQuV3JpdGVMaW5lKCJEb25lLiIpOwotCVNU
RE9VVC5Xcml0ZUJsYW5rTGluZXMoMSk7Ci0JU1RET1VULldyaXRlTGluZSgiVHlwZSAnbm1ha2Un
IHRvIGJ1aWxkIGFsbCB0YXJnZXRzLCBvciAnbm1ha2UgcGhwLWd0aycgdG8gYnVpbGQgUEhQLUdU
SyBhbG9uZSIpOwotCVNURE9VVC5Xcml0ZUxpbmUoIiogQ29uZmlndXJlZCBQSFAtR1RLIGV4dGVu
c2lvbnMgY2FuIGJlIGJ1aWx0IGluZGl2aWR1YWxseSBhdCBhIGxhdGVyIHN0YWdlICoiKTsKLX0K
LQotZnVuY3Rpb24gZ2VuZXJhdGVfbWFrZWZpbGUoKSB7Ci0KLSAgICBNRkUuV3JpdGVMaW5lKCIi
KTsgLy8gVG8gYXZvaWQgZXJyb3IgaWYgTUZFIHdpbGwgYmUgY29tcGxldGUKLQlNRkUuQ2xvc2Uo
KTsgLy8gTWFrZWZpbGUuZXh0ZW5zaW9ucyBpcyBub3cgY29tcGxldGUKLQlNRk8uQ2xvc2UoKTsg
Ly8gTWFrZWZpbGUub2JqZWN0cyBpcyBub3cgY29tcGxldGUKLQl2YXIgTUYgPSBGU08uQ3JlYXRl
VGV4dEZpbGUoIk1ha2VmaWxlIiwgdHJ1ZSk7Ci0JU1RET1VULldyaXRlTGluZSgiR2VuZXJhdGlu
ZyBNYWtlZmlsZSIpOwotCi0JTUYuV3JpdGVMaW5lKCIjIEdlbmVyYXRlZCBieSBjb25maWd1cmUu
anMiKTsKLQlNRi5Xcml0ZUJsYW5rTGluZXMoMSk7Ci0KLQkvKiBzcGl0IG91dCB2YXJpYWJsZSBk
ZWZpbml0aW9ucyAqLwotCXZhciBrZXlzID0gKG5ldyBWQkFycmF5KGNvbmZpZ3VyZV9zdWJzdC5L
ZXlzKCkpKS50b0FycmF5KCk7Ci0JdmFyIGk7Ci0KLQlmb3IgKGkgaW4ga2V5cykgewotCQkvKiBU
aGUgdHJhaWxpbmcgc3BhY2UgaXMgbmVlZGVkIHRvIHByZXZlbnQgdGhlIHRyYWlsaW5nIGJhY2tz
bGFzaCB0aGF0IGlzIHBhcnQgb2YKLQkJdGhlIGJ1aWxkIGRpciBmbGFncyAoQ0ZMQUdTX0JEX1hY
WCkgZnJvbSBiZWluZyBzZWVuIGFzIGEgbGluZSBjb250aW51YXRpb24gY2hhcmFjdGVyICovCi0J
CU1GLldyaXRlTGluZShrZXlzW2ldICsgIj0iICsgY29uZmlndXJlX3N1YnN0Lkl0ZW0oa2V5c1tp
XSkgKyAiICIpOwotCX0KLQotCU1GLldyaXRlQmxhbmtMaW5lcygxKTsKLQlNRi5Xcml0ZUxpbmUo
ImFsbDogJChFWFRfVEFSR0VUUykiKTsKLQotCWZvciAoaSA9IG1ha2VfYnVpbGRzLmxlbmd0aDsg
aSA+PSAwOyBpLS0pIHsKLQkJaWYgKGkgPT0gbWFrZV9idWlsZHMubGVuZ3RoKSB7Ci0JCQlNRi5X
cml0ZUxpbmUoIiFJRiBFWElTVCgkKEJVSUxEX0RJUilcXCQoUEhQR1RLTElCKSkiKTsKLQkJfQot
CQlNRi5Xcml0ZUxpbmUobWFrZV9idWlsZHNbaV0pOwotCX0KLQotCWlmIChtYWtlX2J1aWxkcy5s
ZW5ndGggPiAxKSB7Ci0JCU1GLldyaXRlTGluZSgiIUVMU0UiKTsKLQkJTUYuV3JpdGVMaW5lKCIh
TUVTU0FHRSBOb3RlOiAkKFBIUEdUS0xJQikgbXVzdCBiZSBjcmVhdGVkIGJlZm9yZSBQSFAtR1RL
IGV4dGVuc2lvbnMgY2FuIGJlIGJ1aWx0Iik7Ci0JfQotCQotCU1GLldyaXRlTGluZSgiIUVORElG
Iik7Ci0JTUYuV3JpdGVMaW5lKCJidWlsZF9kaXJzOiAkKEJVSUxEX0RJUikgJChCVUlMRF9ESVJT
X1NVQikiKTsKLQlNRi5Xcml0ZUJsYW5rTGluZXMoMSk7Ci0KLQlURiA9IEZTTy5PcGVuVGV4dEZp
bGUoIk1ha2VmaWxlLm9iamVjdHMiLCAxKTsKLQlNRi5Xcml0ZShURi5SZWFkQWxsKCkpOwotCVRG
LkNsb3NlKCk7Ci0KLQlURiA9IEZTTy5PcGVuVGV4dEZpbGUoIk1ha2VmaWxlLmV4dGVuc2lvbnMi
LCAxKTsKLQlNRi5Xcml0ZShURi5SZWFkQWxsKCkpOwotCVRGLkNsb3NlKCk7Ci0KLQlNRi5DbG9z
ZSgpOwotCi0JRlNPLkRlbGV0ZUZpbGUoIk1ha2VmaWxlLm9iamVjdHMiKTsKLQlGU08uRGVsZXRl
RmlsZSgiTWFrZWZpbGUuZXh0ZW5zaW9ucyIpOwotfQotCi1mdW5jdGlvbiBjb3B5X2FuZF9zdWJz
dChzcmNuYW1lLCBkZXN0bmFtZSwgc3Vic3RfYXJyYXkpIHsKLQotCWlmICghRlNPLkZpbGVFeGlz
dHMoc3JjbmFtZSkpIHsKLQkJc3JjbmFtZSA9IGNvbmZpZ3VyZV9tb2R1bGVfZGlybmFtZSArICJc
XCIgKyBzcmNuYW1lOwotCQlkZXN0bmFtZSA9IGNvbmZpZ3VyZV9tb2R1bGVfZGlybmFtZSArICJc
XCIgKyBkZXN0bmFtZTsKLQl9Ci0KLQl2YXIgY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKHNy
Y25hbWUpOwotCXZhciBpOwotCi0JZm9yIChpID0gMDsgaSA8IHN1YnN0X2FycmF5Lmxlbmd0aDsg
aSs9MikgewotCQl2YXIgcmUgPSBzdWJzdF9hcnJheVtpXTsKLQkJdmFyIHJlcCA9IHN1YnN0X2Fy
cmF5W2krMV07Ci0KLQkJY29udGVudCA9IGNvbnRlbnQucmVwbGFjZShyZSwgcmVwKTsKLQl9Ci0K
LQl2YXIgZiA9IEZTTy5DcmVhdGVUZXh0RmlsZShkZXN0bmFtZSwgdHJ1ZSk7Ci0JZi5Xcml0ZShj
b250ZW50KTsKLQlmLkNsb3NlKCk7Ci19Ci0KLS8vIGdsb2IgdXNpbmcgc2ltcGxlIGZpbGVuYW1l
IHdpbGRjYXJkczsgcmV0dXJucyBhbiBhcnJheSBvZiBtYXRjaGVzIGZvdW5kIGluIHRoZSBmaWxl
c3lzdGVtCi1mdW5jdGlvbiBnbG9iKHBhdGhfcGF0dGVybikgewotCi0JdmFyIHBhdGhfcGFydHMg
PSBwYXRoX3BhdHRlcm4ucmVwbGFjZShuZXcgUmVnRXhwKCIvIiwgImciKSwgIlxcIikuc3BsaXQo
IlxcIik7Ci0JdmFyIHA7Ci0JdmFyIGJhc2UgPSAiIjsKLQl2YXIgaXNfcGF0X3JlID0gL1wqLzsK
LQotCWlmIChGU08uRmlsZUV4aXN0cyhwYXRoX3BhdHRlcm4pKSB7Ci0JCXJldHVybiBuZXcgQXJy
YXkocGF0aF9wYXR0ZXJuKTsKLQl9Ci0KLQkvLyBmaXJzdCwgYnVpbGQgYXMgbXVjaCBhcyBwb3Nz
aWJsZSB0aGF0IGRvZXNuJ3QgaGF2ZSBhIHBhdHRlcm4KLQlmb3IgKHAgPSAwOyBwIDwgcGF0aF9w
YXJ0cy5sZW5ndGg7IHArKykgewotCQlpZiAocGF0aF9wYXJ0c1twXS5tYXRjaChpc19wYXRfcmUp
KQotCQkJYnJlYWs7Ci0JCWlmIChwKQotCQkJYmFzZSArPSAiXFwiOwotCQliYXNlICs9IHBhdGhf
cGFydHNbcF07Ci0JfQotCi0JcmV0dXJuIF9pbm5lcl9nbG9iKGJhc2UsIHAsIHBhdGhfcGFydHMp
OwotfQotCi1mdW5jdGlvbiBfaW5uZXJfZ2xvYihiYXNlLCBwLCBwYXJ0cykgewotCi0JdmFyIHBh
dCA9IHBhcnRzW3BdOwotCXZhciBmdWxsX25hbWUgPSBiYXNlICsgIlxcIiArIHBhdDsKLQl2YXIg
cmUgPSBudWxsOwotCXZhciBpdGVtcyA9IG51bGw7Ci0KLQlpZiAocCA9PSBwYXJ0cy5sZW5ndGgp
IHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCWlmIChGU08uRmlsZUV4aXN0cyhmdWxsX25hbWUp
KSB7Ci0JCWlmIChwIDwgcGFydHMubGVuZ3RoIC0gMSkgewotCQkJLy8gd2UgZGlkbid0IHJlYWNo
IHRoZSBmdWxsIGV4dGVudCBvZiB0aGUgcGF0dGVybgotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0J
CXJldHVybiBuZXcgQXJyYXkoZnVsbF9uYW1lKTsKLQl9Ci0KLQlpZiAoRlNPLkZvbGRlckV4aXN0
cyhmdWxsX25hbWUpICYmIHAgPT0gcGFydHMubGVuZ3RoIC0gMSkgewotCQkvLyB3ZSBoYXZlIHJl
YWNoZWQgdGhlIGVuZCBvZiB0aGUgcGF0dGVybjsgbm8gbmVlZCB0byByZWN1cnNlCi0JCXJldHVy
biBuZXcgQXJyYXkoZnVsbF9uYW1lKTsKLQl9Ci0KLQkvLyBDb252ZXJ0IHRoZSBwYXR0ZXJuIGlu
dG8gYSByZWdleHAKLQlyZSA9IG5ldyBSZWdFeHAoIl4iICsgcGF0LnJlcGxhY2UoL1wuL2csICdc
XC4nKS5yZXBsYWNlKC9cKi9nLCAnLionKS5yZXBsYWNlKC9cPy9nLCAnLicpICsgIiQiLCAiaSIp
OwotCi0JaXRlbXMgPSBuZXcgQXJyYXkoKTsKLQotCWlmICghRlNPLkZvbGRlckV4aXN0cyhiYXNl
KSkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JdmFyIGZvbGRlciA9IEZTTy5HZXRGb2xkZXIo
YmFzZSk7Ci0JdmFyIGZjID0gbnVsbDsKLQl2YXIgc3ViaXRlbXMgPSBudWxsOwotCXZhciBpdGVt
X25hbWUgPSBudWxsOwotCXZhciBqOwotCi0JZmMgPSBuZXcgRW51bWVyYXRvcihmb2xkZXIuU3Vi
Rm9sZGVycyk7Ci0JZm9yICg7ICFmYy5hdEVuZCgpOyBmYy5tb3ZlTmV4dCgpKSB7Ci0JCWl0ZW1f
bmFtZSA9IEZTTy5HZXRGaWxlTmFtZShmYy5pdGVtKCkpOwotCi0JCWlmIChpdGVtX25hbWUubWF0
Y2gocmUpKSB7Ci0JCQkvLyBnb3QgYSBtYXRjaDsgaWYgd2UgYXJlIGF0IHRoZSBlbmQgb2YgdGhl
IHBhdHRlcm4sIGp1c3QgYWRkIHRoZXNlCi0JCQkvLyB0aGluZ3MgdG8gdGhlIGl0ZW1zIGFycmF5
Ci0JCQlpZiAocCA9PSBwYXJ0cy5sZW5ndGggLSAxKSB7Ci0JCQkJaXRlbXNbaXRlbXMubGVuZ3Ro
XSA9IGZjLml0ZW0oKTsKLQkJCX0gZWxzZSB7Ci0JCQkJLy8gd2Ugc2hvdWxkIHJlY3Vyc2UgYW5k
IGRvIG1vcmUgbWF0Y2hlcwotCQkJCXN1Yml0ZW1zID0gX2lubmVyX2dsb2IoYmFzZSArICJcXCIg
KyBpdGVtX25hbWUsIHAgKyAxLCBwYXJ0cyk7Ci0JCQkJaWYgKHN1Yml0ZW1zKSB7Ci0JCQkJCWZv
ciAoaiA9IDA7IGogPCBzdWJpdGVtcy5sZW5ndGg7IGorKykgewotCQkJCQkJaXRlbXNbaXRlbXMu
bGVuZ3RoXSA9IHN1Yml0ZW1zW2pdOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0J
Ly8gaWYgd2UgYXJlIGF0IHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIHdlIHNob3VsZCBtYXRjaCBm
aWxlcyB0b28KLQlpZiAocCA9PSBwYXJ0cy5sZW5ndGggLSAxKSB7Ci0JCWZjID0gbmV3IEVudW1l
cmF0b3IoZm9sZGVyLkZpbGVzKTsKLQkJZm9yICg7ICFmYy5hdEVuZCgpOyBmYy5tb3ZlTmV4dCgp
KSB7Ci0JCQlpdGVtX25hbWUgPSBGU08uR2V0RmlsZU5hbWUoZmMuaXRlbSgpKTsKLQkJCWlmIChp
dGVtX25hbWUubWF0Y2gocmUpKSB7Ci0JCQkJaXRlbXNbaXRlbXMubGVuZ3RoXSA9IGZjLml0ZW0o
KTsKLQkJCX0KLQkJfQotCX0KLQotCWlmIChpdGVtcy5sZW5ndGggPT0gMCkKLQkJcmV0dXJuIGZh
bHNlOwotCi0JcmV0dXJuIGl0ZW1zOwotfQotCi0vKiBFbWl0cyBydWxlIHRvIGdlbmVyYXRlIHZl
cnNpb24gaW5mbyBmb3IgYW4gZXh0ZW5zaW9uLgotUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgLnJl
cyBmaWxlIHRoYXQgd2lsbCBiZSBnZW5lcmF0ZWQgKi8KLWZ1bmN0aW9uIGdlbmVyYXRlX3ZlcnNp
b25faW5mb19yZXNvdXJjZShtYWtlZmlsZXRhcmdldCwgY3JlZGl0c3BhdGgpIHsKLQotCS8vIG1h
a2VmaWxldGFyZ2V0IGlzIHBocC1ndGsuZGxsCi0JLy8gY3JlZGl0c3BhdGggaXMgZXh0XGd0aysK
LQotCXZhciByZXNuYW1lID0gbWFrZWZpbGV0YXJnZXQgKyAiLnJlcyI7Ci0JdmFyIHJlc19kZXNj
ID0gIlBIUC1HVEsgU2NyaXB0IEludGVycHJldGVyIjsKLQl2YXIgcmVzX3Byb2RfbmFtZSA9ICJQ
SFAtR1RLIjsKLQl2YXIgY3JlZGl0czsKLQl2YXIgdGhhbmtzID0gIlRoYW5rcyB0byBBbmRyZWkg
Wm1pZXZza2kiOwotCXZhciBsb2dvID0gIiI7Ci0KLQlpZiAoRlNPLkZpbGVFeGlzdHMoY3JlZGl0
c3BhdGggKyAnL0NSRURJVFMnKSkgewotCQljcmVkaXRzID0gRlNPLk9wZW5UZXh0RmlsZShjcmVk
aXRzcGF0aCArICcvQ1JFRElUUycsIDEpOwotCQlyZXNfZGVzYyA9IGNyZWRpdHMuUmVhZExpbmUo
KTsKLQkJdHJ5IHsKLQkJCXRoYW5rcyA9IGNyZWRpdHMuUmVhZExpbmUoKTsKLQkJfSBjYXRjaCAo
ZSkgewotCQkJdGhhbmtzID0gbnVsbDsKLQkJfQotCQlpZiAodGhhbmtzID09IG51bGwpIHsKLQkJ
CXRoYW5rcyA9ICIiOwotCQl9IGVsc2UgewotCQkJdGhhbmtzID0gIlRoYW5rcyB0byAiICsgdGhh
bmtzOwotCQl9Ci0JCWNyZWRpdHMuQ2xvc2UoKTsKLQl9Ci0KLQlNRk8uV3JpdGVMaW5lKCJQSFBH
VEtETExfUkVTPSQoQlVJTERfRElSKVxcJChQSFBHVEtETEwpLnJlcyIpOwotCU1GTy5Xcml0ZUJs
YW5rTGluZXMoMSk7Ci0KLQlpZiAobWFrZWZpbGV0YXJnZXQubWF0Y2gobmV3IFJlZ0V4cCgiXFwu
ZXhlJCIpKSkgewotCQlsb2dvID0gIiAvRCBXQU5UX0xPR08iOwotCX0KLQotCU1GTy5Xcml0ZUxp
bmUoIiQoUEhQR1RLRExMX1JFUyk6IHdpbjMyXFx0ZW1wbGF0ZS5yYyIpOwotCU1GTy5Xcml0ZUxp
bmUoIlx0JChSQykgL2ZvICQoUEhQR1RLRExMX1JFUykiICsgbG9nbyArICcgL0QgRklMRV9ERVND
UklQVElPTj0iXFwiJyArIHJlc19kZXNjICsgJ1xcIiIgL0QgRklMRV9OQU1FPSJcXCIkKFBIUEdU
S0RMTClcXCIiIC9EIFBST0RVQ1RfTkFNRT0iXFwiJyArIHJlc19wcm9kX25hbWUgKyAnXFwiIiAv
RCBUSEFOS1NfR1VZUz0iXFwiJyArIHRoYW5rcyArICdcXCIiIHdpbjMyXFx0ZW1wbGF0ZS5yYycp
OwotCU1GTy5Xcml0ZUJsYW5rTGluZXMoMSk7Ci0KLQlyZXR1cm4gcmVzbmFtZTsKLX0KLQotLyog
ZXhlY3V0ZSBhIGNvbW1hbmQgYW5kIHJldHVybiB0aGUgb3V0cHV0IGFzIGEgc3RyaW5nICovCi1m
dW5jdGlvbiBleGVjdXRlKGNvbW1hbmRfbGluZSkgewotCXZhciBlID0gV3NoU2hlbGwuRXhlYyhj
b21tYW5kX2xpbmUpOwotCXZhciByZXQgPSAiIjsKLQotCXJldCA9IGUuU3RkT3V0LlJlYWRBbGwo
KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLS8vIFdoaWNoIHZlcnNpb24gb2YgdGhlIGNvbXBpbGVy
IGRvIHdlIGhhdmU/CisvLyBVdGlscyBmb3IgY29uZmlndXJlIHNjcmlwdA0KKy8qDQorICArLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSsNCisgIHwgUEhQLUdUSyBWZXJzaW9uIDIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQorICB8
IENvcHlyaWdodCAoYykgMTk5Ny0yMDA1IFRoZSBQSFAgR3JvdXAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwNCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KKyAgfCBUaGlzIHNvdXJjZSBmaWxl
IGlzIHN1YmplY3QgdG8gdmVyc2lvbiAzLjAgb2YgdGhlIFBIUCBsaWNlbnNlLCAgICAgICB8DQor
ICB8IHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNF
LCBhbmQgaXMgICAgICAgIHwNCisgIHwgYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUt
d2ViIGF0IHRoZSBmb2xsb3dpbmcgdXJsOiAgICAgICAgICAgfA0KKyAgfCBodHRwOi8vd3d3LnBo
cC5uZXQvbGljZW5zZS8zXzAudHh0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
DQorICB8IElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBQSFAgbGljZW5zZSBh
bmQgYXJlIHVuYWJsZSB0byAgIHwNCisgIHwgb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdp
ZGUtd2ViLCBwbGVhc2Ugc2VuZCBhIG5vdGUgdG8gICAgICAgICAgfA0KKyAgfCBsaWNlbnNlQHBo
cC5uZXQgc28gd2UgY2FuIG1haWwgeW91IGEgY29weSBpbW1lZGlhdGVseS4gICAgICAgICAgICAg
ICB8DQorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCisgIHwgQXV0aG9yOiBXZXogRnVybG9uZyA8d2V6QHRo
ZWJyYWlucm9vbS5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgKy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0rDQorKi8NCisNCisvLyAkSWQ6IGNvbmZ1dGlscy5qcyx2IDEuMjQgMjAwOC0wOC0wMSAx
NDozNDo0MyBhdXJvcmFlb3Nyb3NlIEV4cCAkDQorDQorLyogc2V0IHZhcnMgKi8NCit2YXIgU1RE
T1VUID0gV1NjcmlwdC5TdGRPdXQ7DQordmFyIFNUREVSUiA9IFdTY3JpcHQuU3RkRXJyOw0KK3Zh
ciBXc2hTaGVsbCA9IFdTY3JpcHQuQ3JlYXRlT2JqZWN0KCJXU2NyaXB0LlNoZWxsIik7DQordmFy
IEZTTyA9IFdTY3JpcHQuQ3JlYXRlT2JqZWN0KCJTY3JpcHRpbmcuRmlsZVN5c3RlbU9iamVjdCIp
Ow0KK3ZhciBNRk8gPSBudWxsOw0KK3ZhciBNRkUgPSBudWxsOw0KK3ZhciBTWVNURU1fRFJJVkUg
PSBXc2hTaGVsbC5FbnZpcm9ubWVudCgiUHJvY2VzcyIpLkl0ZW0oIlN5c3RlbURyaXZlIik7DQor
dmFyIFBST0dSQU1fRklMRVMgPSBXc2hTaGVsbC5FbnZpcm9ubWVudCgiUHJvY2VzcyIpLkl0ZW0o
IlByb2dyYW1GaWxlcyIpOw0KKw0KK2lmIChQUk9HUkFNX0ZJTEVTID09IG51bGwpIHsNCisJUFJP
R1JBTV9GSUxFUyA9ICJDOlxcUHJvZ3JhbSBGaWxlcyI7DQorfQ0KKw0KK3ZhciBDV0QgPSBXc2hT
aGVsbC5DdXJyZW50RGlyZWN0b3J5Ow0KKw0KK2lmICh0eXBlb2YoQ1dEKSA9PSAidW5kZWZpbmVk
Iikgew0KKwlDV0QgPSBGU08uR2V0UGFyZW50Rm9sZGVyTmFtZShGU08uR2V0QWJzb2x1dGVQYXRo
TmFtZSgiYnVpbGRjb25mLmJhdCIpKTsNCit9DQorDQorY29uZmlndXJlX2FyZ3MgPSBuZXcgQXJy
YXkoKTsNCitjb25maWd1cmVfc3Vic3QgPSBXU2NyaXB0LkNyZWF0ZU9iamVjdCgiU2NyaXB0aW5n
LkRpY3Rpb25hcnkiKTsNCisNCitjb25maWd1cmVfaGRyID0gV1NjcmlwdC5DcmVhdGVPYmplY3Qo
IlNjcmlwdGluZy5EaWN0aW9uYXJ5Iik7DQorYnVpbGRfZGlycyA9IG5ldyBBcnJheSgpOw0KK21h
a2VfYnVpbGRzID0gbmV3IEFycmF5KCk7DQorDQorZXh0ZW5zaW9uX2luY2x1ZGVfY29kZSA9ICIi
Ow0KK2V4dGVuc2lvbl9tb2R1bGVfcHRycyA9ICIiOw0KKw0KKy8qIGZ1bmN0aW9ucyAqLw0KKw0K
K2Z1bmN0aW9uIGdldF9ndGtfbGlidmVyc2lvbigpDQorew0KKwl2YXIgZW52LCBpLCB2aW4sIG1h
am9yLCBtaW5vcjsNCisJdmFyIGZvdW5kID0gZmFsc2U7DQorDQorCWZvdW5kID0gQ0hFQ0tfSEVB
REVSKCJndGsvZ3RrdmVyc2lvbi5oIik7DQorDQorCWlmIChmb3VuZCkgew0KKwkJU1RET1VULldy
aXRlTGluZSgiCTxpbiBkZWZhdWx0IHBhdGg+Iik7DQorCQl2aW4gPSBmaWxlX2dldF9jb250ZW50
cyhmb3VuZCArICJcXGd0a1xcZ3RrdmVyc2lvbi5oIik7DQorDQorCQlyZWdleCA9IG5ldyBSZWdF
eHAoIkdUS19NQUpPUl9WRVJTSU9OXFxzK1xcKChbMC05XSspXFwpIik7DQorCQlyZWdleC5leGVj
KHZpbik7DQorCQltYWpvciA9IFJlZ0V4cC4kMTsNCisJCWlmIChtYWpvciA8IDIpDQorCQkJbWFq
b3IgPSAyOw0KKwkNCisJCXJlZ2V4ID0gbmV3IFJlZ0V4cCgiR1RLX01JTk9SX1ZFUlNJT05cXHMr
XFwoKFswLTldKylcXCkiKTsNCisJCXJlZ2V4LmV4ZWModmluKTsNCisJCW1pbm9yID0gUmVnRXhw
LiQxOw0KKwkJaWYgKG1pbm9yIDwgNikNCisJCQltaW5vciA9IDY7DQorCQ0KKwkJaWYgKG1ham9y
ID49IDIgJiYgbWlub3IgPj04KSB7DQorCQkJRU5BQkxFX0NBSVJPID0gMTsNCisJCX0gZWxzZSB7
DQorCQkJRU5BQkxFX0NBSVJPID0gMDsNCisJCX0NCisJCVBIUF9HVEtfTElCVkVSU0lPTiA9IG1h
am9yICsgJy4nICsgbWlub3I7DQorCX0gZWxzZSB7DQorCQlTVERPVVQuV3JpdGVMaW5lKCIJPG5v
dCBmb3VuZD4iKTsNCisJCVBIUF9HVEtfTElCVkVSU0lPTiA9ICcyLjYnOw0KKwl9DQorDQorCVNU
RE9VVC5Xcml0ZSgiTGlicmFyeSBkZWZpbml0aW9ucyBmb3IgIiArIFBIUF9HVEtfTElCVkVSU0lP
TiArICIgd2lsbCBiZSB1c2VkIik7DQorCVNUREVSUi5Xcml0ZUJsYW5rTGluZXMoMSk7DQorfQ0K
Kw0KK2Z1bmN0aW9uIGdlbmVyYXRlX3NvdXJjZSgpIHsNCisNCisJaWYgKCFGU08uRmlsZUV4aXN0
cygiZXh0XFxndGsrXFxjb21wbGV0ZS50eHQiKSkgew0KKwkJaWYgKCFGU08uRmlsZUV4aXN0cygi
d2luMzJcXHRlbXAuYmF0IikpIHsNCisJCQlTVERFUlIuV3JpdGVMaW5lKCJSdW4gYnVpbGRjb25m
IGZpcnN0IC0gdGhlIHNvdXJjZSBmaWxlIGdlbmVyYXRvciBpcyBtaXNzaW5nIik7DQorCQkJV1Nj
cmlwdC5RdWl0KDEwKTsNCisJCX0gZWxzZSB7DQorCQkJdmFyIHRlbXAgPSBGU08uT3BlblRleHRG
aWxlKCJ3aW4zMlxcdGVtcC5iYXQiLCA4KTsNCisJCQl0ZW1wLldyaXRlTGluZSgiQGVjaG8gb2Zm
ID4gc291cmNlX2NvbXBsZXRlLnR4dCIpOw0KKwkJCXRlbXAuQ2xvc2UoKTsNCisJCQlXc2hTaGVs
bC5SdW4oIndpbjMyXFx0ZW1wIiwgMCk7DQorCQl9DQorCX0NCisJcmV0dXJuOw0KK30NCisNCitm
dW5jdGlvbiBjaGVja19nZW5lcmF0aW9uKCkgew0KKw0KKwlpZiAoIUZTTy5GaWxlRXhpc3RzKCJz
b3VyY2VfY29tcGxldGUudHh0IikpIHsNCisJCVNURE9VVC5Xcml0ZUxpbmUoIldhaXRpbmcgZm9y
IHNvdXJjZSBmaWxlcyB0byBnZW5lcmF0ZS4uLiIpOw0KKwkJV1NjcmlwdC5TbGVlcCgzNTAwKTsN
CisJCWNoZWNrX2dlbmVyYXRpb24oKTsNCisJfQ0KKwlyZXR1cm47DQorfQ0KKw0KK2Z1bmN0aW9u
IGdldF92ZXJzaW9uX251bWJlcnMoKSB7DQorDQorCS8qIHBpY2sgdXAgdGhlIHZlcnNpb24gZnJv
bSBtYWluL3BocF9ndGsuaCAqLw0KKwl2YXIgdmluID0gZmlsZV9nZXRfY29udGVudHMoIm1haW5c
XHBocF9ndGsuaCIpOw0KKwl2YXIgdmVyc2lvbiwgdmVyc2lvbl9zdHJpbmdzLCBtYWpvciwgbWlu
b3IsIGRldGFpbHMsIHJlbGVhc2UgPSAiIiwgZXh0cmEgPSAiIjsNCisNCisJaWYgKHZpbi5tYXRj
aChuZXcgUmVnRXhwKCJQSFBfR1RLX1ZFUlNJT04gXCIoW15cIl0rKVwiIikpKSB7DQorCQl2ZXJz
aW9uID0gUmVnRXhwLiQxOw0KKwkJdmVyc2lvbl9zdHJpbmdzID0gdmVyc2lvbi5zcGxpdCgiLiIp
Ow0KKw0KKwkJbWFqb3IgPSB2ZXJzaW9uX3N0cmluZ3NbMF07DQorCQltaW5vciA9IHZlcnNpb25f
c3RyaW5nc1sxXTsNCisJCWRldGFpbHMgPSB2ZXJzaW9uX3N0cmluZ3NbMl07DQorDQorCQlmb3Ig
KGkgPSAwOyBpIDwgZGV0YWlscy5sZW5ndGg7IGkrKykgew0KKwkJCWlmKCFpc05hTihkZXRhaWxz
LmNoYXJBdChpKSkpIHsNCisJCQkJcmVsZWFzZSA9IHJlbGVhc2UgKyBkZXRhaWxzLmNoYXJBdChp
KTsNCisJCQl9IGVsc2Ugew0KKwkJCQlleHRyYSA9IGRldGFpbHMuc3Vic3RyaW5nKGkpOw0KKwkJ
CQlicmVhazsNCisJCQl9DQorCQl9DQorCX0NCisNCisJdmFyIHZmaWxlID0gRlNPLkNyZWF0ZVRl
eHRGaWxlKCJtYWluL3BocF9ndGtfdmVyc2lvbi5oIiwgdHJ1ZSk7DQorCXZmaWxlLldyaXRlTGlu
ZSgiLyogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGR1cmluZyB3aW4zMiBj
b25maWd1cmF0aW9uICovIik7DQorCXZmaWxlLldyaXRlTGluZSgiLyogRWRpdCBwaHBfZ3RrLmgg
dG8gY2hhbmdlIHRoZSB2ZXJzaW9uIG51bWJlciAqLyIpOw0KKwl2ZmlsZS5Xcml0ZUxpbmUoIiNk
ZWZpbmUgUEhQX0dUS19NQUpPUl9WRVJTSU9OICIgKyBtYWpvcik7DQorCXZmaWxlLldyaXRlTGlu
ZSgiI2RlZmluZSBQSFBfR1RLX01JTk9SX1ZFUlNJT04gIiArIG1pbm9yKTsNCisJdmZpbGUuV3Jp
dGVMaW5lKCIjZGVmaW5lIFBIUF9HVEtfUkVMRUFTRV9WRVJTSU9OICIgKyByZWxlYXNlKTsNCisJ
aWYgKFBIUF9HVEtfREVCVUcgPT0gInllcyIpIHsNCisJCXZmaWxlLldyaXRlTGluZSgiI2RlZmlu
ZSBQSFBfR1RLX0VYVFJBX1ZFUlNJT04gXCIiICsgZXh0cmEgKyAiIChERUJVRylcIiIpOw0KKwl9
IGVsc2Ugew0KKwkJdmZpbGUuV3JpdGVMaW5lKCIjZGVmaW5lIFBIUF9HVEtfRVhUUkFfVkVSU0lP
TiBcIiIgKyBleHRyYSArICJcIiIpOw0KKwl9DQorDQorCURFRklORSgnUEhQX0dUS19WRVJTSU9O
X1NUUklORycsIHZlcnNpb24pOw0KK30NCisNCitmdW5jdGlvbiBjb25kZW5zZV9wYXRoKHBhdGgp
IHsNCisNCisJcGF0aCA9IEZTTy5HZXRBYnNvbHV0ZVBhdGhOYW1lKHBhdGgpOw0KKw0KKwlpZiAo
cGF0aC5zdWJzdHIoMCwgQ1dELmxlbmd0aCkudG9Mb3dlckNhc2UoKQ0KKwkJCT09IENXRC50b0xv
d2VyQ2FzZSgpICYmDQorCQkJKHBhdGguY2hhckNvZGVBdChDV0QubGVuZ3RoKSA9PSA5MiB8fCBw
YXRoLmNoYXJDb2RlQXQoQ1dELmxlbmd0aCkgPT0gNDcpKSB7DQorCQlyZXR1cm4gcGF0aC5zdWJz
dHIoQ1dELmxlbmd0aCArIDEpOw0KKwl9DQorDQorCXZhciBhID0gQ1dELnNwbGl0KCJcXCIpOw0K
Kwl2YXIgYiA9IHBhdGguc3BsaXQoIlxcIik7DQorCXZhciBpLCBqOw0KKw0KKwlmb3IgKGkgPSAw
OyBpIDwgYi5sZW5ndGg7IGkrKykgew0KKwkJaWYgKGFbaV0udG9Mb3dlckNhc2UoKSA9PSBiW2ld
LnRvTG93ZXJDYXNlKCkpDQorCQkJY29udGludWU7DQorCQlpZiAoaSA+IDApIHsNCisJCQkvKiBm
aXJzdCBkaWZmZXJlbmNlIGZvdW5kICovDQorCQkJcGF0aCA9ICIiOw0KKwkJCWZvciAoaiA9IDA7
IGogPCBhLmxlbmd0aCAtIGk7IGorKykgew0KKwkJCQlwYXRoICs9ICIuLlxcIjsNCisJCQl9DQor
CQkJZm9yIChqID0gaTsgaiA8IGIubGVuZ3RoOyBqKyspIHsNCisJCQkJcGF0aCArPSBiW2pdOw0K
KwkJCQlpZiAoaiA8IGIubGVuZ3RoIC0gMSkNCisJCQkJCXBhdGggKz0gIlxcIjsNCisJCQl9DQor
CQkJcmV0dXJuIHBhdGg7DQorCQl9DQorCQkvKiBvbiBhIGRpZmZlcmVudCBkcml2ZSAqLw0KKwkJ
YnJlYWs7DQorCX0NCisNCisJcmV0dXJuIHBhdGg7DQorfQ0KKw0KK2Z1bmN0aW9uIENvbmZpZ3Vy
ZUFyZyh0eXBlLCBvcHRuYW1lLCBoZWxwdGV4dCwgZGVmdmFsKSB7DQorDQorCXZhciBvcHB0eXBl
ID0gIiI7DQorDQorCWlmICh0eXBlKSB7DQorDQorCQlvcHB0eXBlID0gdHlwZSA9PSAiZW5hYmxl
IiA/ICJkaXNhYmxlIiA6ICJ3aXRob3V0IjsNCisNCisJCWlmIChkZWZ2YWwgPT0gInllcyIgfHwg
ZGVmdmFsID09ICJ5ZXMsc2hhcmVkIikgew0KKwkJCXRoaXMuYXJnID0gIi0tIiArIG9wcHR5cGUg
KyAiLSIgKyBvcHRuYW1lOw0KKwkJCXRoaXMuaW1wYXJnID0gIi0tIiArIHR5cGUgKyAiLSIgKyBv
cHRuYW1lOw0KKwkJfSBlbHNlIHsNCisJCQl0aGlzLmFyZyA9ICItLSIgKyB0eXBlICsgIi0iICsg
b3B0bmFtZTsNCisJCQl0aGlzLmltcGFyZyA9ICItLSIgKyBvcHB0eXBlICsgIi0iICsgb3B0bmFt
ZTsNCisJCX0NCisJfSBlbHNlIHsNCisJCXRoaXMuYXJnID0gIi0tIiArIG9wdG5hbWU7DQorCX0N
CisNCisJdGhpcy5vcHRuYW1lID0gb3B0bmFtZTsNCisJdGhpcy5oZWxwdGV4dCA9IGhlbHB0ZXh0
Ow0KKwl0aGlzLmRlZnZhbCA9IGRlZnZhbDsNCisJdGhpcy5zeW12YWwgPSBvcHRuYW1lLnRvVXBw
ZXJDYXNlKCkucmVwbGFjZShuZXcgUmVnRXhwKCItIiwgImciKSwgIl8iKTsNCisJdGhpcy5zZWVu
ID0gZmFsc2U7DQorCXRoaXMuYXJndmFsID0gZGVmdmFsOw0KK30NCisNCitmdW5jdGlvbiBhbmFs
eXplX2FyZyhhcmd2YWwpIHsNCisNCisJdmFyIHJldCA9IG5ldyBBcnJheSgpOw0KKw0KKwlpZiAo
YXJndmFsID09ICJzaGFyZWQiKSB7DQorCQlhcmd2YWwgPSAieWVzIjsNCisJfSBlbHNlIGlmIChh
cmd2YWwgPT0gbnVsbCkgew0KKwkJLyogbm90aGluZyAqLw0KKwl9IGVsc2UgaWYgKGFyZ19tYXRj
aCA9IGFyZ3ZhbC5tYXRjaChuZXcgUmVnRXhwKCJec2hhcmVkLCguKikiKSkpIHsNCisJCWFyZ3Zh
bCA9IGFyZ19tYXRjaFsxXTsNCisJfSBlbHNlIGlmIChhcmdfbWF0Y2ggPSBhcmd2YWwubWF0Y2go
bmV3IFJlZ0V4cCgiXiguKiksc2hhcmVkJCIpKSkgew0KKwkJYXJndmFsID0gYXJnX21hdGNoWzFd
Ow0KKwl9DQorDQorCXJldFswXSA9IGFyZ3ZhbDsNCisJcmV0dXJuIHJldDsNCit9DQorDQorZnVu
Y3Rpb24gY29uZl9wcm9jZXNzX2FyZ3MoKSB7DQorDQorCXZhciBpLCBqOw0KKwl2YXIgY29uZmln
dXJlX2hlbHBfbW9kZSA9IGZhbHNlOw0KKwl2YXIgYW5hbHl6ZWQgPSBmYWxzZTsNCisJdmFyIG5p
Y2UgPSAiY3NjcmlwdCAvbm9sb2dvIGNvbmZpZ3VyZS5qcyAiOw0KKw0KKwlhcmdzID0gV1Njcmlw
dC5Bcmd1bWVudHM7DQorDQorCWZvciAoaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7DQor
CQlhcmcgPSBhcmdzKGkpOw0KKwkJbmljZSArPSAnICInICsgYXJnICsgJyInOw0KKwkJaWYgKGFy
ZyA9PSAiLS1oZWxwIikgew0KKwkJCWNvbmZpZ3VyZV9oZWxwX21vZGUgPSB0cnVlOw0KKwkJCWJy
ZWFrOw0KKwkJfQ0KKw0KKwkJLy8gSWYgaXQgaXMgLS1mb289YmFyLCBzcGxpdCBvbiB0aGUgZXF1
YWxzIHNpZ24NCisJCWFyZyA9IGFyZy5zcGxpdCgiPSIsIDIpOw0KKwkJYXJnbmFtZSA9IGFyZ1sw
XTsNCisJCWlmIChhcmcubGVuZ3RoID4gMSkgew0KKwkJCWFyZ3ZhbCA9IGFyZ1sxXTsNCisJCX0g
ZWxzZSB7DQorCQkJYXJndmFsID0gbnVsbDsNCisJCX0NCisNCisJCS8vIEZpbmQgdGhlIGFyZw0K
KwkJZm91bmQgPSBmYWxzZTsNCisJCWZvciAoaiA9IDA7IGogPCBjb25maWd1cmVfYXJncy5sZW5n
dGg7IGorKykgew0KKwkJCWlmIChhcmduYW1lID09IGNvbmZpZ3VyZV9hcmdzW2pdLmltcGFyZyB8
fCBhcmduYW1lID09IGNvbmZpZ3VyZV9hcmdzW2pdLmFyZykgew0KKwkJCQlmb3VuZCA9IHRydWU7
DQorDQorCQkJCWFyZyA9IGNvbmZpZ3VyZV9hcmdzW2pdOw0KKwkJCQlhcmcuc2VlbiA9IHRydWU7
DQorDQorCQkJCWFuYWx5emVkID0gYW5hbHl6ZV9hcmcoYXJndmFsKTsNCisJCQkJYXJndmFsID0g
YW5hbHl6ZWRbMF07DQorDQorCQkJCWlmIChhcmduYW1lID09IGFyZy5pbXBhcmcpIHsNCisJCQkJ
CS8qIHdlIG1hdGNoZWQgdGhlIGltcGxpY2l0LCBvciBkZWZhdWx0IGFyZyAqLw0KKwkJCQkJaWYg
KGFyZ3ZhbCA9PSBudWxsKSB7DQorCQkJCQkJYXJndmFsID0gYXJnLmRlZnZhbDsNCisJCQkJCX0N
CisJCQkJfSBlbHNlIHsNCisJCQkJCS8qIHdlIG1hdGNoZWQgdGhlIG5vbi1kZWZhdWx0IGFyZyAq
Lw0KKwkJCQkJaWYgKGFyZ3ZhbCA9PSBudWxsKSB7DQorCQkJCQkJYXJndmFsID0gYXJnLmRlZnZh
bCA9PSAibm8iID8gInllcyIgOiAibm8iOw0KKwkJCQkJfQ0KKwkJCQl9DQorDQorCQkJCWFyZy5h
cmd2YWwgPSBhcmd2YWw7DQorCQkJCWV2YWwoIlBIUF9HVEtfIiArIGFyZy5zeW12YWwgKyAiID0g
YXJndmFsOyIpOw0KKwkJCQlicmVhazsNCisJCQl9DQorCQl9DQorCQlpZiAoIWZvdW5kKSB7DQor
CQkJU1RERVJSLldyaXRlTGluZSgiVW5rbm93biBvcHRpb24gIiArIGFyZ25hbWUpOw0KKwkJCVNU
REVSUi5Xcml0ZUxpbmUoIlBsZWFzZSB0cnkgY29uZmlndXJlLmpzIC0taGVscCBmb3IgYSBsaXN0
IG9mIHZhbGlkIG9wdGlvbnMiKTsNCisJCQlXU2NyaXB0LlF1aXQoMik7DQorCQl9DQorCX0NCisN
CisJaWYgKGNvbmZpZ3VyZV9oZWxwX21vZGUpIHsNCisNCisJCVNURE9VVC5Xcml0ZUJsYW5rTGlu
ZXMoMSk7DQorDQorCQkvLyBNZWFzdXJlIHdpZHRoIHRvIHByZXR0eS1wcmludCB0aGUgb3V0cHV0
DQorCQltYXhfd2lkdGggPSAwOw0KKwkJZm9yIChpID0gMDsgaSA8IGNvbmZpZ3VyZV9hcmdzLmxl
bmd0aDsgaSsrKSB7DQorCQkJYXJnID0gY29uZmlndXJlX2FyZ3NbaV07DQorCQkJaWYgKGFyZy5h
cmcubGVuZ3RoID4gbWF4X3dpZHRoKSB7DQorCQkJCW1heF93aWR0aCA9IGFyZy5hcmcubGVuZ3Ro
Ow0KKwkJCX0NCisJCX0NCisNCisJCWZvciAoaSA9IDA7IGkgPCBjb25maWd1cmVfYXJncy5sZW5n
dGg7IGkrKykgew0KKwkJCWFyZyA9IGNvbmZpZ3VyZV9hcmdzW2ldOw0KKw0KKwkJCW4gPSBtYXhf
d2lkdGggLSBhcmcuYXJnLmxlbmd0aDsNCisJCQlwYWQgPSAiICAgIjsNCisJCQlmb3IgKGogPSAw
OyBqIDwgbjsgaisrKSB7DQorCQkJCXBhZCArPSAiICI7DQorCQkJfQ0KKwkJCVNURE9VVC5Xcml0
ZUxpbmUoIiAgIiArIGFyZy5hcmcgKyBwYWQgKyB3b3JkX3dyYXBfYW5kX2luZGVudChtYXhfd2lk
dGggKyA1LCBhcmcuaGVscHRleHQpKTsNCisJCX0NCisJCVdTY3JpcHQuUXVpdCgxKTsNCisJfQ0K
Kw0KKwkvLyBOb3cgc2V0IGFueSBkZWZhdWx0cyB3ZSBtaWdodCBoYXZlIG1pc3NlZCBvdXQgZWFy
bGllcg0KKwlmb3IgKGkgPSAwOyBpIDwgY29uZmlndXJlX2FyZ3MubGVuZ3RoOyBpKyspIHsNCisJ
CWFyZyA9IGNvbmZpZ3VyZV9hcmdzW2ldOw0KKwkJaWYgKGFyZy5zZWVuKQ0KKwkJCWNvbnRpbnVl
Ow0KKwkJYW5hbHl6ZWQgPSBhbmFseXplX2FyZyhhcmcuZGVmdmFsKTsNCisJCWFyZ3ZhbCA9IGFu
YWx5emVkWzBdOw0KKw0KKwkJZXZhbCgiUEhQX0dUS18iICsgYXJnLnN5bXZhbCArICIgPSBhcmd2
YWw7Iik7DQorCX0NCisNCisJTUZPID0gRlNPLkNyZWF0ZVRleHRGaWxlKCJNYWtlZmlsZS5vYmpl
Y3RzIiwgdHJ1ZSk7DQorCU1GRSA9IEZTTy5DcmVhdGVUZXh0RmlsZSgiTWFrZWZpbGUuZXh0ZW5z
aW9ucyIsIHRydWUpOw0KKw0KKwlTVERPVVQuV3JpdGVCbGFua0xpbmVzKDEpOw0KKwlTVERPVVQu
V3JpdGVMaW5lKCJTYXZpbmcgY29uZmlndXJlIG9wdGlvbnMgdG8gY29uZmlndXJlLmJhdCIpOw0K
Kwl2YXIgbmljZWZpbGUgPSBGU08uQ3JlYXRlVGV4dEZpbGUoImNvbmZpZ3VyZS5iYXQiLCB0cnVl
KTsNCisJbmljZWZpbGUuV3JpdGVMaW5lKG5pY2UpOw0KKwluaWNlZmlsZS5DbG9zZSgpOw0KKw0K
KwlBQ19ERUZJTkUoJ0NPTkZJR1VSRV9DT01NQU5EJywgbmljZSk7DQorfQ0KKw0KK2Z1bmN0aW9u
IGZpbmRfcGF0dGVybl9pbl9wYXRoKHBhdHRlcm4sIHBhdGgpIHsNCisNCisJaWYgKHBhdGggPT0g
bnVsbCkgew0KKwkJcmV0dXJuIGZhbHNlOw0KKwl9DQorDQorCXZhciBkaXJzID0gcGF0aC5zcGxp
dCgnOycpOw0KKwl2YXIgaTsNCisJdmFyIGl0ZW1zOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgZGly
cy5sZW5ndGg7IGkrKykgew0KKwkJaXRlbXMgPSBnbG9iKGRpcnNbaV0gKyAiXFwiICsgcGF0dGVy
bik7DQorCQlpZiAoaXRlbXMpIHsNCisJCQlyZXR1cm4gY29uZGVuc2VfcGF0aChpdGVtc1swXSk7
DQorCQl9DQorCX0NCisJcmV0dXJuIGZhbHNlOw0KK30NCisNCitmdW5jdGlvbiBBUkdfSVMob3B0
bmFtZSwgaGVscHRleHQsIGRlZnZhbCkgew0KKw0KKwljb25maWd1cmVfYXJnc1tjb25maWd1cmVf
YXJncy5sZW5ndGhdID0gbmV3IENvbmZpZ3VyZUFyZygiIiwgb3B0bmFtZSwgaGVscHRleHQsIGRl
ZnZhbCk7DQorfQ0KKw0KK2Z1bmN0aW9uIEFSR19XSVRIKG9wdG5hbWUsIGhlbHB0ZXh0LCBkZWZ2
YWwpIHsNCisNCisJY29uZmlndXJlX2FyZ3NbY29uZmlndXJlX2FyZ3MubGVuZ3RoXSA9IG5ldyBD
b25maWd1cmVBcmcoIndpdGgiLCBvcHRuYW1lLCBoZWxwdGV4dCwgZGVmdmFsKTsNCit9DQorDQor
ZnVuY3Rpb24gQVJHX0VOQUJMRShvcHRuYW1lLCBoZWxwdGV4dCwgZGVmdmFsKSB7DQorDQorCWNv
bmZpZ3VyZV9hcmdzW2NvbmZpZ3VyZV9hcmdzLmxlbmd0aF0gPSBuZXcgQ29uZmlndXJlQXJnKCJl
bmFibGUiLCBvcHRuYW1lLCBoZWxwdGV4dCwgZGVmdmFsKTsNCit9DQorDQorZnVuY3Rpb24gREVG
SU5FKG5hbWUsIHZhbHVlKSB7DQorDQorCWlmIChjb25maWd1cmVfc3Vic3QuRXhpc3RzKG5hbWUp
KSB7DQorCQljb25maWd1cmVfc3Vic3QuUmVtb3ZlKG5hbWUpOw0KKwl9DQorCWNvbmZpZ3VyZV9z
dWJzdC5BZGQobmFtZSwgdmFsdWUpOw0KK30NCisNCitmdW5jdGlvbiBBQ19ERUZJTkUobmFtZSwg
dmFsdWUsIGNvbW1lbnQsIHF1b3RlKSB7DQorDQorCWlmIChxdW90ZSA9PSBudWxsKSB7DQorCQlx
dW90ZSA9IHRydWU7DQorCX0NCisJaWYgKHF1b3RlICYmIHR5cGVvZih2YWx1ZSkgPT0gInN0cmlu
ZyIpIHsNCisJCXZhbHVlID0gJyInICsgdmFsdWUucmVwbGFjZShuZXcgUmVnRXhwKCcoWyJcXFxc
XSknLCAiZyIpLCAnXFwkMScpICsgJyInOw0KKwl9IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA9PSAw
KSB7DQorCQl2YWx1ZSA9ICciIic7DQorCX0NCisJdmFyIGl0ZW0gPSBuZXcgQXJyYXkodmFsdWUs
IGNvbW1lbnQpOw0KKwlpZiAoY29uZmlndXJlX2hkci5FeGlzdHMobmFtZSkpIHsNCisJCXZhciBv
cmlnX2l0ZW0gPSBjb25maWd1cmVfaGRyLkl0ZW0obmFtZSk7DQorCQlTVERPVVQuV3JpdGVMaW5l
KCJBQ19ERUZJTkVbIiArIG5hbWUgKyAiXT0iICsgdmFsdWUgKyAiOiBpcyBhbHJlYWR5IGRlZmlu
ZWQgdG8gIiArIGl0ZW1bMF0pOw0KKwl9IGVsc2Ugew0KKwkJY29uZmlndXJlX2hkci5BZGQobmFt
ZSwgaXRlbSk7DQorCX0NCit9DQorDQorZnVuY3Rpb24gUEFUSF9QUk9HKHByb2duYW1lLCBhZGRp
dGlvbmFsX3BhdGhzLCBzeW1ib2wpIHsNCisNCisJdmFyIGV4ZTsNCisJdmFyIHBsYWNlOw0KKwl2
YXIgY3lnX3BhdGggPSBQSFBfR1RLX0NZR1dJTiArICJcXGJpbjsiICsgUEhQX0dUS19DWUdXSU4g
KyAiXFx1c3JcXGxvY2FsXFxiaW4iOw0KKw0KKwlleGUgPSBwcm9nbmFtZSArICIuZXhlIjsNCisN
CisJaWYgKGFkZGl0aW9uYWxfcGF0aHMgPT0gbnVsbCkgew0KKwkJYWRkaXRpb25hbF9wYXRocyA9
IGN5Z19wYXRoOw0KKwl9IGVsc2Ugew0KKwkJYWRkaXRpb25hbF9wYXRocyArPSAiOyIgKyBjeWdf
cGF0aDsNCisJfQ0KKw0KKwlwbGFjZSA9IHNlYXJjaF9wYXRocyhleGUsIGFkZGl0aW9uYWxfcGF0
aHMsICJQQVRIIik7DQorDQorCWlmIChwbGFjZSA9PSB0cnVlKSB7DQorCQlwbGFjZSA9IGV4ZTsN
CisJfSBlbHNlIGlmIChwbGFjZSAhPSBmYWxzZSkgew0KKw0KKwkJaWYgKHBsYWNlLmxhc3RJbmRl
eE9mKCJcXCIpICE9IHBsYWNlLmxlbmd0aCAtIDEpIHsNCisJCQlwbGFjZSArPSAiXFwiOw0KKwkJ
fQ0KKw0KKwkJcGxhY2UgPSBwbGFjZSArIGV4ZTsNCisNCisJCWlmIChwbGFjZS5pbmRleE9mKCIg
IikpIHsNCisJCQlwbGFjZSA9ICciJyArIHBsYWNlICsgJyInOw0KKwkJfQ0KKwl9DQorDQorCWlm
IChwbGFjZSkgew0KKwkJaWYgKHN5bWJvbCA9PSBudWxsKSB7DQorCQkJc3ltYm9sID0gcHJvZ25h
bWUudG9VcHBlckNhc2UoKTsNCisJCX0NCisJCURFRklORShzeW1ib2wsIHBsYWNlKTsNCisJfQ0K
KwlyZXR1cm4gcGxhY2U7DQorfQ0KKw0KK2Z1bmN0aW9uIENIRUNLX0xJQihsaWJuYW1lcywgdGFy
Z2V0LCBwYXRoX3RvX2NoZWNrLCBjb21tb25fbmFtZSkgew0KKw0KKwlTVERPVVQuV3JpdGUoIkNo
ZWNraW5nIGZvciAiICsgbGlibmFtZXMgKyAiIC4uLiAiKTsNCisNCisJaWYgKGNvbW1vbl9uYW1l
ID09IG51bGwgJiYgdGFyZ2V0ICE9IG51bGwpIHsNCisJCWNvbW1vbl9uYW1lID0gdGFyZ2V0Ow0K
Kwl9DQorDQorCWlmIChwYXRoX3RvX2NoZWNrID09IG51bGwpIHsNCisJCXBhdGhfdG9fY2hlY2sg
PSAiIjsNCisJfQ0KKw0KKwkvLyBpZiB0aGV5IHNwZWNpZmllZCBhIGNvbW1vbiBuYW1lIGZvciB0
aGUgcGFja2FnZSB0aGF0IGNvbnRhaW5zDQorCS8vIHRoZSBsaWJyYXJ5LCB0YWcgc29tZSB1c2Vm
dWwgZGVmYXVsdHMgb24gdG8gdGhlIGVuZCBvZiB0aGUNCisJLy8gcGF0aCB0byBiZSBzZWFyY2hl
ZA0KKwlpZiAoY29tbW9uX25hbWUgIT0gbnVsbCkgew0KKwkJcGF0aF90b19jaGVjayArPSAiOy4u
XFwiICsgY29tbW9uX25hbWUgKyAiKiI7DQorCX0NCisNCisJLy8gRGV0ZXJtaW5lIHRhcmdldCBm
b3IgYnVpbGQgZmxhZ3MNCisJaWYgKHRhcmdldCA9PSBudWxsKSB7DQorCQl0YXJnZXQgPSAiIjsN
CisJfSBlbHNlIHsNCisJCXRhcmdldCA9ICJfIiArIHRhcmdldC50b1VwcGVyQ2FzZSgpLnJlcGxh
Y2UobmV3IFJlZ0V4cCgiLSIsICJnIiksICJfIik7DQorCX0NCisNCisJLy8gRXhwYW5kIHBhdGgg
dG8gaW5jbHVkZSBnZW5lcmFsIGRpcnMNCisJcGF0aF90b19jaGVjayArPSAiOyIgKyBwaHBfdXN1
YWxfbGliX3N1c3BlY3RzOw0KKw0KKwkvLyBJdCBpcyBjb21tb24gcHJhY3RpY2UgdG8gcHV0IGxp
YnMgdW5kZXIgb25lIG9mIHRoZXNlIGRpciBuYW1lcw0KKwl2YXIgc3ViZGlycyA9IG5ldyBBcnJh
eShQSFBfR1RLX0RFQlVHID09ICJ5ZXMiID8gIkRlYnVnIiA6ICJSZWxlYXNlIiwgImxpYiIsICJs
aWJzIiwgImxpYmV4ZWMiKTsNCisNCisJLy8gbGlibmFtZXMgY2FuIGJlIDsgc2VwYXJhdGVkIGxp
c3Qgb2YgYWNjZXB0ZWQgbGlicmFyeSBuYW1lcw0KKwlsaWJuYW1lcyA9IGxpYm5hbWVzLnNwbGl0
KCc7Jyk7DQorDQorCXZhciBpLCBqLCBrLCBsaWJuYW1lOw0KKwl2YXIgbG9jYXRpb24gPSBmYWxz
ZTsNCisJdmFyIHBhdGggPSBwYXRoX3RvX2NoZWNrLnNwbGl0KCc7Jyk7DQorDQorCWZvciAoaSA9
IDA7IGkgPCBsaWJuYW1lcy5sZW5ndGg7IGkrKykgew0KKwkJbGlibmFtZSA9IGxpYm5hbWVzW2ld
Ow0KKw0KKwkJZm9yIChrID0gMDsgayA8IHBhdGgubGVuZ3RoOyBrKyspIHsNCisJCQlsb2NhdGlv
biA9IGdsb2IocGF0aFtrXSArICJcXCIgKyBsaWJuYW1lKTsNCisJCQlpZiAobG9jYXRpb24pIHsN
CisJCQkJbG9jYXRpb24gPSBsb2NhdGlvblswXTsNCisJCQkJYnJlYWs7DQorCQkJfQ0KKwkJCWZv
ciAoaiA9IDA7IGogPCBzdWJkaXJzLmxlbmd0aDsgaisrKSB7DQorCQkJCWxvY2F0aW9uID0gZ2xv
YihwYXRoW2tdICsgIlxcIiArIHN1YmRpcnNbal0gKyAiXFwiICsgbGlibmFtZSk7DQorCQkJCWlm
IChsb2NhdGlvbikgew0KKwkJCQkJbG9jYXRpb24gPSBsb2NhdGlvblswXTsNCisJCQkJCWJyZWFr
Ow0KKwkJCQl9DQorCQkJfQ0KKwkJCWlmIChsb2NhdGlvbikNCisJCQkJYnJlYWs7DQorCQl9DQor
DQorCQlpZiAobG9jYXRpb24pIHsNCisJCQlsb2NhdGlvbiA9IGNvbmRlbnNlX3BhdGgobG9jYXRp
b24pOw0KKwkJCXZhciBsaWJkaXIgPSBGU08uR2V0UGFyZW50Rm9sZGVyTmFtZShsb2NhdGlvbik7
DQorCQkJbGlibmFtZSA9IEZTTy5HZXRGaWxlTmFtZShsb2NhdGlvbik7DQorCQkJQUREX0ZMQUco
IkxERkxBR1MiICsgdGFyZ2V0LCAnL2xpYnBhdGg6IicgKyBsaWJkaXIgKyAnIiAnKTsNCisJCQlB
RERfRkxBRygiTElCUyIgKyB0YXJnZXQsIGxpYm5hbWUpOw0KKw0KKwkJCVNURE9VVC5Xcml0ZUxp
bmUoCWxvY2F0aW9uKTsNCisNCisJCQlyZXR1cm4gbG9jYXRpb247DQorCQl9DQorDQorCQkvLyBD
aGVjayBpbiB0aGVpciBzdGFuZGFyZCBsaWIgcGF0aA0KKwkJbG9jYXRpb24gPSBmaW5kX3BhdHRl
cm5faW5fcGF0aChsaWJuYW1lLCBXc2hTaGVsbC5FbnZpcm9ubWVudCgiUHJvY2VzcyIpLkl0ZW0o
IkxJQiIpKTsNCisNCisJCWlmIChsb2NhdGlvbikgew0KKwkJCWxvY2F0aW9uID0gY29uZGVuc2Vf
cGF0aChsb2NhdGlvbik7DQorCQkJbGlibmFtZSA9IEZTTy5HZXRGaWxlTmFtZShsb2NhdGlvbik7
DQorCQkJQUREX0ZMQUcoIkxJQlMiICsgdGFyZ2V0LCBsaWJuYW1lKTsNCisNCisJCQlTVERPVVQu
V3JpdGVMaW5lKCIJPGluIExJQiBwYXRoPiAiICsgbGlibmFtZSk7DQorCQkJcmV0dXJuIGxvY2F0
aW9uOw0KKwkJfQ0KKwl9DQorDQorCUVSUk9SKCIJIiArIGxpYm5hbWUgKyAiIG5vdCBmb3VuZCAt
IGFib3J0aW5nIGNvbmZpZ3VyZSBwcm9jZXNzIik7DQorDQorCXJldHVybiBmYWxzZTsNCit9DQor
DQorZnVuY3Rpb24gQ0hFQ0tfSEVBREVSKGhlYWRlcl9uYW1lLCBwYXRoX3RvX2NoZWNrKSB7DQor
CWlmICghcGF0aF90b19jaGVjaykgew0KKwkJcGF0aF90b19jaGVjayA9IHBocF91c3VhbF9pbmNs
dWRlX3N1c3BlY3RzOw0KKwl9DQorDQorCXZhciBwYXRoID0gc2VhcmNoX3BhdGhzKGhlYWRlcl9u
YW1lLCBwYXRoX3RvX2NoZWNrLCAiSU5DTFVERSIpOw0KKw0KKwlpZiAoIXBhdGgpIHsNCisJCUVS
Uk9SKCIJIiArIGhlYWRlcl9uYW1lICsgIiBub3QgZm91bmQgLSBhYm9ydGluZyBjb25maWd1cmUg
cHJvY2VzcyIpOw0KKwl9DQorDQorCXJldHVybiBwYXRoOw0KK30NCisNCisvLyB1c2UgdGhpcyBm
b3IgdmVyc2lvbiBjaGVja2luZw0KK2Z1bmN0aW9uIEdSRVBfSEVBREVSKGhlYWRlcl9uYW1lLCBy
ZWdleCwgcGF0aF90b19jaGVjaykgew0KKw0KKwl2YXIgYyA9IGZhbHNlOw0KKw0KKwlpZiAoRlNP
LkZpbGVFeGlzdHMocGF0aF90b19jaGVjayArICJcXCIgKyBoZWFkZXJfbmFtZSkpIHsNCisJCWMg
PSBmaWxlX2dldF9jb250ZW50cyhwYXRoX3RvX2NoZWNrICsgIlxcIiArIGhlYWRlcl9uYW1lKTsN
CisJfQ0KKw0KKwlpZiAoIWMpIHsNCisJCS8qIGxvb2sgaW4gdGhlIGluY2x1ZGUgcGF0aCAqLw0K
Kw0KKwkJdmFyIHAgPSBzZWFyY2hfcGF0aHMoaGVhZGVyX25hbWUsIHBhdGhfdG9fY2hlY2ssICJJ
TkNMVURFIik7DQorDQorCQlpZiAodHlwZW9mKHApID09ICJzdHJpbmciKSB7DQorCQkJYyA9IGZp
bGVfZ2V0X2NvbnRlbnRzKHApOw0KKwkJfQ0KKw0KKwkJaWYgKCFjKSB7DQorCQkJcmV0dXJuIGZh
bHNlOw0KKwkJfQ0KKwl9DQorDQorCWlmICh0eXBlb2YocmVnZXgpID09ICJzdHJpbmciKSB7DQor
CQlyZWdleCA9IG5ldyBSZWdFeHAocmVnZXgpOw0KKwl9DQorDQorCWlmIChjLm1hdGNoKHJlZ2V4
KSkgew0KKwkJLyogY2FsbGVyIGNhbiBub3cgdXNlIFJlZ0V4cC4kMSBldGMuIHRvIGdldCBhdCBw
YXR0ZXJucyAqLw0KKwkJcmV0dXJuIHRydWU7DQorCX0NCisJcmV0dXJuIGZhbHNlOw0KK30NCisN
CitmdW5jdGlvbiBDSEVDS19IRUFERVJfQUREX0lOQ0xVREUoaGVhZGVyX25hbWUsIGZsYWdfbmFt
ZSwgcGF0aF90b19jaGVjaywgdXNlX2VudiwgYWRkX2Rpcl9wYXJ0LCBhZGRfdG9fZmxhZ19vbmx5
KSB7DQorDQorCXZhciBkaXJfcGFydF90b19hZGQgPSAiIjsNCisNCisJaWYgKHVzZV9lbnYgPT0g
bnVsbCkgew0KKwkJdXNlX2VudiA9IHRydWU7DQorCX0NCisNCisJLy8gaWYgdHJ1ZSwgYWRkIHRo
ZSBkaXIgcGFydCBvZiB0aGUgaGVhZGVyX25hbWUgdG8gdGhlIGluY2x1ZGUgcGF0aA0KKwlpZiAo
YWRkX2Rpcl9wYXJ0ID09IG51bGwpIHsNCisJCWFkZF9kaXJfcGFydCA9IGZhbHNlOw0KKwl9IGVs
c2UgaWYgKGFkZF9kaXJfcGFydCkgew0KKwkJdmFyIGJhc2VuYW1lID0gRlNPLkdldEZpbGVOYW1l
KGhlYWRlcl9uYW1lKTsNCisJCWRpcl9wYXJ0X3RvX2FkZCA9ICJcXCIgKyBoZWFkZXJfbmFtZS5z
dWJzdHIoMCwgaGVhZGVyX25hbWUubGVuZ3RoIC0gYmFzZW5hbWUubGVuZ3RoIC0gMSk7DQorCX0N
CisNCisJaWYgKHBhdGhfdG9fY2hlY2sgPT0gbnVsbCkgew0KKwkJcGF0aF90b19jaGVjayA9IHBo
cF91c3VhbF9pbmNsdWRlX3N1c3BlY3RzOw0KKwl9IGVsc2Ugew0KKwkJcGF0aF90b19jaGVjayAr
PSAiOyIgKyBwaHBfdXN1YWxfaW5jbHVkZV9zdXNwZWN0czsNCisJfQ0KKw0KKwl2YXIgcCA9IHNl
YXJjaF9wYXRocyhoZWFkZXJfbmFtZSwgcGF0aF90b19jaGVjaywgdXNlX2VudiA/ICJJTkNMVURF
IiA6IG51bGwpOw0KKwl2YXIgaGF2ZSA9IDA7DQorCXZhciBzeW07DQorDQorCWlmICh0eXBlb2Yo
cCkgPT0gInN0cmluZyIpIHsNCisJCUFERF9GTEFHKGZsYWdfbmFtZSwgJy9JICInICsgcCArIGRp
cl9wYXJ0X3RvX2FkZCArICciICcpOw0KKwl9DQorDQorCWhhdmUgPSBwID8gMSA6IDANCisNCisJ
c3ltID0gaGVhZGVyX25hbWUudG9VcHBlckNhc2UoKTsNCisJc3ltID0gc3ltLnJlcGxhY2UobmV3
IFJlZ0V4cCgiW1xcXFwvXC4tXSIsICJnIiksICJfIik7DQorDQorCWlmICh0eXBlb2YoYWRkX3Rv
X2ZsYWdfb25seSkgPT0gdW5kZWZpbmVkICYmDQorCQkJZmxhZ19uYW1lLm1hdGNoKG5ldyBSZWdF
eHAoIl5DRkxBR1NfKC4qKSQiKSkpIHsNCisJCWFkZF90b19mbGFnX29ubHkgPSB0cnVlOw0KKwl9
DQorDQorCWlmICh0eXBlb2YoYWRkX3RvX2ZsYWdfb25seSkgIT0gInVuZGVmaW5lZCIpIHsNCisJ
CUFERF9GTEFHKGZsYWdfbmFtZSwgIi9EIEhBVkVfIiArIHN5bSArICI9IiArIGhhdmUpOw0KKwl9
IGVsc2Ugew0KKwkJQUNfREVGSU5FKCJIQVZFXyIgKyBzeW0sIGhhdmUsICJoYXZlIHRoZSAiICsg
aGVhZGVyX25hbWUgKyAiIGhlYWRlciBmaWxlIik7DQorCX0NCisNCisJcmV0dXJuIHA7DQorfQ0K
Kw0KK2Z1bmN0aW9uIEVYVEVOU0lPTihleHRuYW1lLCBmaWxlX2xpc3QsIHNoYXJlZCwgY2ZsYWdz
LCBkbGxuYW1lLCBvYmpfZGlyKSB7DQorDQorCXZhciBkbGxmbGFncyA9ICIiOw0KKwl2YXIgZGVw
X2xpYnMgPSAiIjsNCisJdmFyIEVYVCA9IGV4dG5hbWUudG9VcHBlckNhc2UoKS5yZXBsYWNlKG5l
dyBSZWdFeHAoIi0iLCAiZyIpLCAiXyIpOw0KKwl2YXIgZXh0bmFtZV9mb3JfcHJpbnRpbmc7DQor
CXZhciByZXNfdmFyID0gIiI7DQorCXZhciBmaWxlOw0KKw0KKwlpZiAoY2ZsYWdzID09IG51bGwp
IHsNCisJCWNmbGFncyA9ICIiOw0KKwl9DQorDQorCWlmICh0eXBlb2Yob2JqX2RpcikgPT0gInVu
ZGVmaW5lZCIpIHsNCisNCisJCWV4dG5hbWVfZm9yX3ByaW50aW5nID0gY29uZmlndXJlX21vZHVs
ZV9kaXJuYW1lOw0KKw0KKwl9IGVsc2Ugew0KKw0KKwkJZXh0bmFtZV9mb3JfcHJpbnRpbmcgPSBj
b25maWd1cmVfbW9kdWxlX2Rpcm5hbWUgKyAiICh2aWEgIiArIG9ial9kaXIgKyAiKSI7DQorCX0N
CisNCisJU1RET1VULldyaXRlTGluZSgiRW5hYmxpbmcgZXh0ZW5zaW9uICIgKyBleHRuYW1lX2Zv
cl9wcmludGluZyk7DQorDQorCWlmIChleHRuYW1lID09ICdwaHAtZ3RrJykgew0KKwkJY2ZsYWdz
ID0gIi9EIENPTVBJTEVfRExfIiArIEVYVCArICIyIC9EICIgKyBFWFQgKyAiX0VYUE9SVFM9MSIg
KyBjZmxhZ3M7DQorCQlmaWxlID0gTUZPOw0KKwl9IGVsc2Ugew0KKwkJY2ZsYWdzID0gIi9EIFBI
UF9HVEtfQ09NUElMRV9ETF8iICsgRVhUICsgIiAvRCAiICsgRVhUICsgIl9FWFBPUlRTPTEiICsg
Y2ZsYWdzOw0KKwkJZmlsZSA9IE1GRTsNCisJfQ0KKw0KKwlmaWxlLldyaXRlQmxhbmtMaW5lcygx
KTsNCisJZmlsZS5Xcml0ZUxpbmUoIiMgb2JqZWN0cyBmb3IgRVhUICIgKyBleHRuYW1lKTsNCisJ
ZmlsZS5Xcml0ZUJsYW5rTGluZXMoMSk7DQorDQorCUFERF9TT1VSQ0VTKGNvbmZpZ3VyZV9tb2R1
bGVfZGlybmFtZSwgZmlsZV9saXN0LCBleHRuYW1lLCBvYmpfZGlyKTsNCisNCisJZmlsZS5Xcml0
ZUJsYW5rTGluZXMoMSk7DQorDQorCS8vIFBIUC1HVEsgYW5kIGl0cyBleHRlbnNpb25zIGFyZSBh
bHdheXMgYnVpbHQgYXMgc2hhcmVkIGZvciBub3cNCisNCisJaWYgKGRsbG5hbWUgPT0gbnVsbCkg
ew0KKwkJaWYgKGV4dG5hbWUgPT0gJ3BocC1ndGsnKSB7DQorCQkJZGxsbmFtZSA9ICJwaHBfZ3Rr
Mi5kbGwiOw0KKwkJCXJlc25hbWUgPSBnZW5lcmF0ZV92ZXJzaW9uX2luZm9fcmVzb3VyY2UoZGxs
bmFtZSwgY29uZmlndXJlX21vZHVsZV9kaXJuYW1lKTsNCisJCQlyZXNfdmFyID0gIiAkKFBIUEdU
S0RMTF9SRVMpIjsNCisJCX0gZWxzZSB7DQorCQkJY2ZsYWdzID0gIi9EIEdUS19TSEFSRUQ9MSAi
ICsgY2ZsYWdzOw0KKwkJCWRsbG5hbWUgPSAicGhwX2d0a18iICsgZXh0bmFtZSArICIyLmRsbCI7
DQorCQkJZGxsZmxhZ3MgPSAiICQoRExMX0xERkxBR1MpIjsNCisJCQlkZXBfbGlicyA9ICIgJChC
VUlMRF9ESVIpXFwkKFBIUEdUS0xJQikgJChMSUJTX1BIUF9HVEspIjsNCisJCX0NCisJfQ0KKwl2
YXIgbGlibmFtZSA9IGRsbG5hbWUuc3Vic3RyaW5nKDAsIGRsbG5hbWUubGVuZ3RoIC0gNCkgKyAi
LmxpYiI7DQorCXZhciBsZCA9ICJAJChMRCkiOw0KKw0KKwlBRERfRkxBRygiRVhUX1RBUkdFVFMi
LCAiJChCVUlMRF9ESVIpXFwiICsgZGxsbmFtZSk7DQorCW1ha2VfYnVpbGRzW21ha2VfYnVpbGRz
Lmxlbmd0aF0gPSBleHRuYW1lICsgIjogJChCVUlMRF9ESVIpXFwiICsgZGxsbmFtZTsNCisNCisJ
ZmlsZS5Xcml0ZUxpbmUoIiQoQlVJTERfRElSKVxcIiArIGRsbG5hbWUgKyAiOiAkKCIgKyBFWFQg
KyAiX0dMT0JBTF9PQkpTKSIgKyByZXNfdmFyKTsNCisJZmlsZS5Xcml0ZUxpbmUoIlx0IiArIGxk
ICsgIiAvb3V0OiQoQlVJTERfRElSKVxcIiArIGRsbG5hbWUgKyAiICQoTERGTEFHU18iICsgRVhU
ICsgIikiICsgZGxsZmxhZ3MgKyAiICQoTERGTEFHUykgJCgiICsgRVhUICsgIl9HTE9CQUxfT0JK
UykgJChMSUJTXyIgKyBFWFQgKyAiKSIgKyBkZXBfbGlicyArICIgJChMSUJTKSIgKyByZXNfdmFy
KTsNCisNCisJZmlsZS5Xcml0ZUJsYW5rTGluZXMoMSk7DQorCWZpbGUuV3JpdGVMaW5lKGRsbG5h
bWUgKyAiOiAkKEJVSUxEX0RJUilcXCIgKyBkbGxuYW1lKTsNCisJZmlsZS5Xcml0ZUxpbmUoIlx0
QGVjaG8gRVhUICIgKyBleHRuYW1lICsgIiBidWlsZCBjb21wbGV0ZSIpOw0KKwlmaWxlLldyaXRl
QmxhbmtMaW5lcygxKTsNCisNCisJQUREX0ZMQUcoIkNGTEFHU18iICsgRVhULCBjZmxhZ3MpOw0K
K30NCisNCitmdW5jdGlvbiBBRERfU09VUkNFUyhkaXIsIGZpbGVfbGlzdCwgdGFyZ2V0LCBvYmpf
ZGlyKSB7DQorDQorCXZhciBpOw0KKwl2YXIgdHY7DQorCXZhciBzcmMsIG9iaiwgc3ltLCBmbGFn
czsNCisJdmFyIGNvcmVfY2ZsYWdzID0gIiI7DQorCXZhciBmaWxlOw0KKw0KKwlzeW0gPSB0YXJn
ZXQudG9VcHBlckNhc2UoKS5yZXBsYWNlKG5ldyBSZWdFeHAoIi0iLCAiZyIpLCAiXyIpICsgIl9H
TE9CQUxfT0JKUyI7DQorCWZsYWdzID0gIkNGTEFHU18iICsgdGFyZ2V0LnRvVXBwZXJDYXNlKCku
cmVwbGFjZShuZXcgUmVnRXhwKCItIiwgImciKSwgIl8iKTsNCisNCisJaWYgKGNvbmZpZ3VyZV9z
dWJzdC5FeGlzdHMoc3ltKSkgew0KKwkJdHYgPSBjb25maWd1cmVfc3Vic3QuSXRlbShzeW0pOw0K
Kwl9IGVsc2Ugew0KKwkJdHYgPSAiIjsNCisJfQ0KKw0KKwlpZiAodGFyZ2V0ICE9ICJwaHAtZ3Rr
Iikgew0KKwkJZmlsZSA9IE1GRTsNCisJCWNvcmVfY2ZsYWdzID0gIiQoQ0ZMQUdTX1BIUF9HVEsp
ICI7DQorCX0gZWxzZSB7DQorCQlmaWxlID0gTUZPOw0KKwl9DQorDQorCWZpbGVfbGlzdCA9IGZp
bGVfbGlzdC5zcGxpdChuZXcgUmVnRXhwKCJcXHMrIikpOw0KKwlmaWxlX2xpc3Quc29ydCgpOw0K
Kw0KKwl2YXIgcmUgPSBuZXcgUmVnRXhwKCJcLlthLXowLTlBLVpcLV0rJCIpOw0KKw0KKwlkaXIg
PSBkaXIucmVwbGFjZShuZXcgUmVnRXhwKCIvIiwgImciKSwgIlxcIik7DQorCXZhciBvYmpzX2xp
bmUgPSAiIjsNCisJdmFyIHNyY3NfbGluZSA9ICIiOw0KKw0KKwl2YXIgc3ViX2J1aWxkID0gIiQo
QlVJTERfRElSKVxcIjsNCisNCisJLyogaWYgbW9kdWxlIGRpciBpcyBub3QgYSBjaGlsZCBvZiB0
aGUgbWFpbiBzb3VyY2UgZGlyLA0KKwkgKiB3ZSBuZWVkIHRvIHR3ZWFrIGl0OyB3ZSBzaG91bGQg
aGF2ZSBkZXRlY3RlZCBzdWNoIGENCisJICogY2FzZSBpbiBjb25kZW5zZV9wYXRoIGFuZCByZXdy
aXR0ZW4gdGhlIHBhdGggdG8NCisJICogYmUgcmVsYXRpdmUuDQorCSAqIFRoaXMgcHJvYmFibHkg
YnJlYWtzIGZvciBub24tc2libGluZyBkaXJzICovDQorCWlmIChvYmpfZGlyID09IG51bGwpIHsN
CisJCXZhciBidWlsZF9kaXIgPSBkaXIucmVwbGFjZShuZXcgUmVnRXhwKCJeLi5cXFxcIiksICIi
KTsNCisJfSBlbHNlIHsNCisJCXZhciBidWlsZF9kaXIgPSBvYmpfZGlyLnJlcGxhY2UobmV3IFJl
Z0V4cCgiXi4uXFxcXCIpLCAiIik7DQorCX0NCisNCisJdmFyIG1hbmdsZV9kaXIgPSBidWlsZF9k
aXIucmVwbGFjZShuZXcgUmVnRXhwKCJbXFxcXC8uKy1dIiwgImciKSwgIl8iKTsNCisNCisJLyog
a2lsbCB0cmFpbGluZyB1bmRlcnNjb3JlcyAqLw0KKwlpZiAobWFuZ2xlX2Rpci5zdWJzdHJpbmco
bWFuZ2xlX2Rpci5sZW5ndGggLSAxKSA9PSAiXyIpIHsNCisJCW1hbmdsZV9kaXIgPSBtYW5nbGVf
ZGlyLnN1YnN0cmluZygwLCBtYW5nbGVfZGlyLmxlbmd0aCAtIDEpOw0KKwl9DQorDQorCXZhciBi
ZF9mbGFnc19uYW1lID0gIkNGTEFHU19CRF8iICsgbWFuZ2xlX2Rpci50b1VwcGVyQ2FzZSgpOw0K
Kw0KKwl2YXIgZGlycyA9IGJ1aWxkX2Rpci5zcGxpdCgiXFwiKTsNCisJdmFyIGksIGQgPSAiIjsN
CisJZm9yIChpID0gMDsgaSA8IGRpcnMubGVuZ3RoOyBpKyspIHsNCisJCWQgKz0gZGlyc1tpXTsN
CisJCWJ1aWxkX2RpcnNbYnVpbGRfZGlycy5sZW5ndGhdID0gZDsNCisJCWQgKz0gIlxcIjsNCisJ
fQ0KKwlzdWJfYnVpbGQgKz0gZDsNCisNCisJREVGSU5FKGJkX2ZsYWdzX25hbWUsICIgL0ZkIiAr
IHN1Yl9idWlsZCArICIgL0ZwIiArIHN1Yl9idWlsZCArICIgL0ZSIiArIHN1Yl9idWlsZCk7DQor
DQorCWZvciAoaSBpbiBmaWxlX2xpc3QpIHsNCisJCXNyYyA9IGZpbGVfbGlzdFtpXTsNCisJCW9i
aiA9IHNyYy5yZXBsYWNlKHJlLCAiLm9iaiIpOw0KKwkJdHYgKz0gIiAiICsgc3ViX2J1aWxkICsg
b2JqOw0KKw0KKwkJZmlsZS5Xcml0ZUxpbmUoc3ViX2J1aWxkICsgb2JqICsgIjogIiArIGRpciAr
ICJcXCIgKyBzcmMpOw0KKwkJZmlsZS5Xcml0ZUxpbmUoIlx0QCQoQ0MpICQoIiArIGZsYWdzICsg
IikgIiArIGNvcmVfY2ZsYWdzICsgIiQoQ0ZMQUdTKSAkKCIgKyBiZF9mbGFnc19uYW1lICsgIikg
L2MgIiArIGRpciArICJcXCIgKyBzcmMgKyAiIC9GbyIgKyBzdWJfYnVpbGQgKyBvYmopOw0KKwl9
DQorDQorCURFRklORShzeW0sIHR2KTsNCit9DQorDQorZnVuY3Rpb24gQUREX0ZMQUcobmFtZSwg
ZmxhZ3MsIHRhcmdldCkgew0KKw0KKwlpZiAodGFyZ2V0ICE9IG51bGwpIHsNCisJCW5hbWUgPSB0
YXJnZXQudG9VcHBlckNhc2UoKSArICJfIiArIG5hbWU7DQorCX0NCisJaWYgKGNvbmZpZ3VyZV9z
dWJzdC5FeGlzdHMobmFtZSkpIHsNCisJCXZhciBjdXJyX2ZsYWdzID0gY29uZmlndXJlX3N1YnN0
Lkl0ZW0obmFtZSk7DQorDQorCQlpZiAoY3Vycl9mbGFncy5pbmRleE9mKGZsYWdzKSA+PSAwKSB7
DQorCQkJcmV0dXJuOw0KKwkJfQ0KKw0KKwkJZmxhZ3MgPSBmbGFncyArICIgIiArIGN1cnJfZmxh
Z3M7DQorCQljb25maWd1cmVfc3Vic3QuUmVtb3ZlKG5hbWUpOw0KKwl9DQorCWNvbmZpZ3VyZV9z
dWJzdC5BZGQobmFtZSwgZmxhZ3MpOw0KK30NCisNCitmdW5jdGlvbiBnZXRfZGVmaW5lKG5hbWUp
IHsNCisNCisJcmV0dXJuIGNvbmZpZ3VyZV9zdWJzdC5JdGVtKG5hbWUpOw0KK30NCisNCitmdW5j
dGlvbiBFUlJPUihtc2cpIHsNCisNCisgICAgU1RERVJSLldyaXRlQmxhbmtMaW5lcygyKTsNCisJ
U1RERVJSLldyaXRlTGluZSgiRVJST1I6ICIgKyBtc2cpOw0KKwlXU2NyaXB0LlF1aXQoMyk7DQor
fQ0KKw0KK2Z1bmN0aW9uIFdBUk5JTkcobXNnKSB7DQorDQorCVNUREVSUi5Xcml0ZUxpbmUoIldB
Uk5JTkc6ICIgKyBtc2cpOw0KKwlTVERFUlIuV3JpdGVCbGFua0xpbmVzKDEpOw0KK30NCisNCisv
KiBTZWFyY2hlcyBhIHNldCBvZiBwYXRocyBmb3IgYSBmaWxlOyByZXR1cm5zIHRoZSBkaXIgaW4g
d2hpY2ggdGhlIGZpbGUgd2FzIGZvdW5kLCB0cnVlIGlmIGl0DQord2FzIGZvdW5kIGluIHRoZSBk
ZWZhdWx0IGVudiBwYXRoLCBvciBmYWxzZSBpZiBpdCB3YXMgbm90IGZvdW5kIGF0IGFsbC4gZW52
X25hbWUgaXMgdGhlIG9wdGlvbmFsDQorbmFtZSBvZiBhbiBlbnYgdmFyIHNwZWNpZnlpbmcgdGhl
IGRlZmF1bHQgcGF0aCB0byBzZWFyY2ggKi8NCitmdW5jdGlvbiBzZWFyY2hfcGF0aHModGhpbmdf
dG9fZmluZCwgZXhwbGljaXRfcGF0aCwgZW52X25hbWUpIHsNCisNCisJdmFyIGksIGZvdW5kID0g
ZmFsc2UsIHBsYWNlID0gZmFsc2UsIGZpbGUsIGVudjsNCisNCisJU1RET1VULldyaXRlKCJDaGVj
a2luZyBmb3IgIiArIHRoaW5nX3RvX2ZpbmQgKyAiIC4uLiAiKTsNCisNCisJaWYgKHRoaW5nX3Rv
X2ZpbmQubGVuZ3RoIDwgNikgew0KKwkJU1RET1VULldyaXRlKCIJIik7DQorCX0NCisNCisJdGhp
bmdfdG9fZmluZCA9IHRoaW5nX3RvX2ZpbmQucmVwbGFjZShuZXcgUmVnRXhwKCIvIiwgImciKSwg
IlxcIik7DQorDQorCWlmIChleHBsaWNpdF9wYXRoICE9IG51bGwpIHsNCisJCWlmICh0eXBlb2Yo
ZXhwbGljaXRfcGF0aCkgPT0gInN0cmluZyIpIHsNCisJCQlleHBsaWNpdF9wYXRoID0gZXhwbGlj
aXRfcGF0aC5zcGxpdCgiOyIpOw0KKwkJfQ0KKw0KKwkJZm9yIChpID0gMDsgaSA8IGV4cGxpY2l0
X3BhdGgubGVuZ3RoOyBpKyspIHsNCisJCQlmaWxlID0gZ2xvYihleHBsaWNpdF9wYXRoW2ldICsg
IlxcIiArIHRoaW5nX3RvX2ZpbmQpOw0KKwkJCWlmIChmaWxlKSB7DQorCQkJCWZvdW5kID0gdHJ1
ZTsNCisJCQkJcGxhY2UgPSBmaWxlWzBdOw0KKwkJCQlwbGFjZSA9IHBsYWNlLnN1YnN0cigwLCBw
bGFjZS5sZW5ndGggLSB0aGluZ190b19maW5kLmxlbmd0aCAtIDEpOw0KKwkJCQlicmVhazsNCisJ
CQl9DQorCQl9DQorCX0NCisNCisJaWYgKCFmb3VuZCAmJiBlbnZfbmFtZSAhPSBudWxsKSB7DQor
CQllbnYgPSBXc2hTaGVsbC5FbnZpcm9ubWVudCgiUHJvY2VzcyIpLkl0ZW0oZW52X25hbWUpOw0K
KwkJZW52ID0gZW52LnNwbGl0KCI7Iik7DQorCQlmb3IgKGkgPSAwOyBpIDwgZW52Lmxlbmd0aDsg
aSsrKSB7DQorCQkJZmlsZSA9IGdsb2IoZW52W2ldICsgIlxcIiArIHRoaW5nX3RvX2ZpbmQpOw0K
KwkJCWlmIChmaWxlKSB7DQorCQkJCWZvdW5kID0gdHJ1ZTsNCisJCQkJcGxhY2UgPSB0cnVlOw0K
KwkJCQlicmVhazsNCisJCQl9DQorCQl9DQorCX0NCisNCisJaWYgKGZvdW5kICYmIHBsYWNlID09
IHRydWUpIHsNCisJCVNURE9VVC5Xcml0ZUxpbmUoIgk8aW4gZGVmYXVsdCBwYXRoPiIpOw0KKwkJ
cGxhY2UgPSBmaWxlWzBdOw0KKwkJcGxhY2UgPSBwbGFjZS5zdWJzdHIoMCwgcGxhY2UubGVuZ3Ro
IC0gdGhpbmdfdG9fZmluZC5sZW5ndGggLSAxKTsNCisJfSBlbHNlIGlmIChmb3VuZCkgew0KKwkJ
U1RET1VULldyaXRlTGluZSgiCSIgKyBwbGFjZSk7DQorCX0gZWxzZSB7DQorCQlTVERPVVQuV3Jp
dGVMaW5lKCIJPG5vdCBmb3VuZD4iKTsNCisJfQ0KKwlyZXR1cm4gcGxhY2U7DQorfQ0KKw0KK2Z1
bmN0aW9uIHdvcmRfd3JhcF9hbmRfaW5kZW50KGluZGVudCwgdGV4dCwgbGluZV9zdWZmaXgsIGlu
ZGVudF9jaGFyKSB7DQorDQorCWlmICh0ZXh0ID09IG51bGwpIHsNCisJCXJldHVybiAiIjsNCisJ
fQ0KKw0KKwl2YXIgd29yZHMgPSB0ZXh0LnNwbGl0KG5ldyBSZWdFeHAoIlxccysiLCAiZyIpKTsN
CisJdmFyIGkgPSAwOw0KKwl2YXIgcmV0X3RleHQgPSAiIjsNCisJdmFyIHRoaXNfbGluZSA9ICIi
Ow0KKwl2YXIgdDsNCisJdmFyIHNwYWNlID0gIiI7DQorCXZhciBsaW5lcyA9IDA7DQorDQorCWlm
IChsaW5lX3N1ZmZpeCA9PSBudWxsKSB7DQorCQlsaW5lX3N1ZmZpeCA9ICIiOw0KKwl9DQorDQor
CWlmIChpbmRlbnRfY2hhciA9PSBudWxsKSB7DQorCQlpbmRlbnRfY2hhciA9ICIgIjsNCisJfQ0K
Kw0KKwlmb3IgKGkgPSAwOyBpIDwgaW5kZW50OyBpKyspIHsNCisJCXNwYWNlICs9IGluZGVudF9j
aGFyOw0KKwl9DQorDQorCWZvciAoaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7IGkrKykgew0KKwkJ
aWYgKHRoaXNfbGluZS5sZW5ndGgpIHsNCisJCQl0ID0gdGhpc19saW5lICsgIiAiICsgd29yZHNb
aV07DQorCQl9IGVsc2Ugew0KKwkJCXQgPSB3b3Jkc1tpXTsNCisJCX0NCisNCisJCWlmICh0Lmxl
bmd0aCArIGluZGVudCA+IDc4KSB7DQorCQkJaWYgKGxpbmVzKyspIHsNCisJCQkJcmV0X3RleHQg
Kz0gc3BhY2U7DQorCQkJfQ0KKwkJCXJldF90ZXh0ICs9IHRoaXNfbGluZSArIGxpbmVfc3VmZml4
ICsgIlxyXG4iOw0KKwkJCXRoaXNfbGluZSA9ICIiOw0KKwkJfQ0KKw0KKwkJaWYgKHRoaXNfbGlu
ZS5sZW5ndGgpIHsNCisJCQl0aGlzX2xpbmUgKz0gIiAiICsgd29yZHNbaV07DQorCQl9IGVsc2Ug
ew0KKwkJCXRoaXNfbGluZSA9IHdvcmRzW2ldOw0KKwkJfQ0KKwl9DQorDQorCWlmICh0aGlzX2xp
bmUubGVuZ3RoKSB7DQorCQlpZiAobGluZXMpDQorCQkJcmV0X3RleHQgKz0gc3BhY2U7DQorCQly
ZXRfdGV4dCArPSB0aGlzX2xpbmU7DQorCX0NCisNCisJcmV0dXJuIHJldF90ZXh0Ow0KK30NCisN
CitmdW5jdGlvbiBmaWxlX2dldF9jb250ZW50cyhmaWxlbmFtZSkgew0KKw0KKwl2YXIgZiwgYzsN
CisNCisJdHJ5IHsNCisJCWYgPSBGU08uT3BlblRleHRGaWxlKGZpbGVuYW1lLCAxKTsNCisJCWMg
PSBmLlJlYWRBbGwoKTsNCisJCWYuQ2xvc2UoKTsNCisJCXJldHVybiBjOw0KKwl9IGNhdGNoIChl
KSB7DQorCQlTVERPVVQuV3JpdGVMaW5lKCJQcm9ibGVtIHJlYWRpbmcgIiArIGZpbGVuYW1lKTsN
CisJCXJldHVybiBmYWxzZTsNCisJfQ0KK30NCisNCitmdW5jdGlvbiBnZW5lcmF0ZV9maWxlcygp
IHsNCisNCisJdmFyIGksIGRpciwgYmQsIGxhc3Q7DQorDQorCWdlbmVyYXRlX3NvdXJjZSgpOw0K
Kw0KKwlTVERPVVQuV3JpdGVMaW5lKCJHZW5lcmF0aW5nIHNvdXJjZSBmaWxlcyAtIHRoaXMgbWF5
IHRha2UgYSBmZXcgc2Vjb25kcyIpOw0KKwlXU2NyaXB0LlNsZWVwKDM1MDApOw0KKwljaGVja19n
ZW5lcmF0aW9uKCk7DQorDQorCS8vIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGFkZGl0aW9uYWwg
b2JqZWN0cyB0byBhZGQNCisJdmFyIHNvdXJjZXMgPSBmaWxlX2dldF9jb250ZW50cygic291cmNl
cy50ZW1wIik7DQorCWNvbmZpZ3VyZV9tb2R1bGVfZGlybmFtZSA9IGNvbmRlbnNlX3BhdGgoImV4
dFxcZ3RrK1xcIik7DQorCUVYVEVOU0lPTigicGhwLWd0ayIsIHBocF9ndGtfZmlsZXMgKyBzb3Vy
Y2VzLCB0cnVlKTsNCisNCisJU1RET1VULldyaXRlQmxhbmtMaW5lcygxKTsNCisJU1RET1VULldy
aXRlTGluZSgiQ3JlYXRpbmcgYnVpbGQgZGlycy4uLiIpOw0KKwlkaXIgPSBnZXRfZGVmaW5lKCJC
VUlMRF9ESVIiKTsNCisJYnVpbGRfZGlycy5zb3J0KCk7DQorCWxhc3QgPSBudWxsOw0KKw0KKwlp
ZiAoIUZTTy5Gb2xkZXJFeGlzdHMoZGlyKSkgew0KKwkJRlNPLkNyZWF0ZUZvbGRlcihkaXIpOw0K
Kwl9DQorDQorCWZvciAoaSA9IDA7IGkgPCBidWlsZF9kaXJzLmxlbmd0aDsgaSsrKSB7DQorCQli
ZCA9IEZTTy5CdWlsZFBhdGgoZGlyLCBidWlsZF9kaXJzW2ldKTsNCisJCWlmIChiZCA9PSBsYXN0
KSB7DQorCQkJY29udGludWU7DQorCQl9DQorCQlsYXN0ID0gYmQ7DQorCQlBRERfRkxBRygiQlVJ
TERfRElSU19TVUIiLCBiZCk7DQorCQlpZiAoIUZTTy5Gb2xkZXJFeGlzdHMoYmQpKSB7DQorCQkJ
RlNPLkNyZWF0ZUZvbGRlcihiZCk7DQorCQl9DQorCX0NCisNCisJZ2VuZXJhdGVfbWFrZWZpbGUo
KTsNCisNCisJU1RET1VULldyaXRlTGluZSgiRG9uZS4iKTsNCisJU1RET1VULldyaXRlQmxhbmtM
aW5lcygxKTsNCisJU1RET1VULldyaXRlTGluZSgiVHlwZSAnbm1ha2UnIHRvIGJ1aWxkIGFsbCB0
YXJnZXRzLCBvciAnbm1ha2UgcGhwLWd0aycgdG8gYnVpbGQgUEhQLUdUSyBhbG9uZSIpOw0KKwlT
VERPVVQuV3JpdGVMaW5lKCIqIENvbmZpZ3VyZWQgUEhQLUdUSyBleHRlbnNpb25zIGNhbiBiZSBi
dWlsdCBpbmRpdmlkdWFsbHkgYXQgYSBsYXRlciBzdGFnZSAqIik7DQorfQ0KKw0KK2Z1bmN0aW9u
IGdlbmVyYXRlX21ha2VmaWxlKCkgew0KKw0KKyAgICBNRkUuV3JpdGVMaW5lKCIiKTsgLy8gVG8g
YXZvaWQgZXJyb3IgaWYgTUZFIHdpbGwgYmUgY29tcGxldGUNCisJTUZFLkNsb3NlKCk7IC8vIE1h
a2VmaWxlLmV4dGVuc2lvbnMgaXMgbm93IGNvbXBsZXRlDQorCU1GTy5DbG9zZSgpOyAvLyBNYWtl
ZmlsZS5vYmplY3RzIGlzIG5vdyBjb21wbGV0ZQ0KKwl2YXIgTUYgPSBGU08uQ3JlYXRlVGV4dEZp
bGUoIk1ha2VmaWxlIiwgdHJ1ZSk7DQorCVNURE9VVC5Xcml0ZUxpbmUoIkdlbmVyYXRpbmcgTWFr
ZWZpbGUiKTsNCisNCisJTUYuV3JpdGVMaW5lKCIjIEdlbmVyYXRlZCBieSBjb25maWd1cmUuanMi
KTsNCisJTUYuV3JpdGVCbGFua0xpbmVzKDEpOw0KKw0KKwkvKiBzcGl0IG91dCB2YXJpYWJsZSBk
ZWZpbml0aW9ucyAqLw0KKwl2YXIga2V5cyA9IChuZXcgVkJBcnJheShjb25maWd1cmVfc3Vic3Qu
S2V5cygpKSkudG9BcnJheSgpOw0KKwl2YXIgaTsNCisNCisJZm9yIChpIGluIGtleXMpIHsNCisJ
CS8qIFRoZSB0cmFpbGluZyBzcGFjZSBpcyBuZWVkZWQgdG8gcHJldmVudCB0aGUgdHJhaWxpbmcg
YmFja3NsYXNoIHRoYXQgaXMgcGFydCBvZg0KKwkJdGhlIGJ1aWxkIGRpciBmbGFncyAoQ0ZMQUdT
X0JEX1hYWCkgZnJvbSBiZWluZyBzZWVuIGFzIGEgbGluZSBjb250aW51YXRpb24gY2hhcmFjdGVy
ICovDQorCQlNRi5Xcml0ZUxpbmUoa2V5c1tpXSArICI9IiArIGNvbmZpZ3VyZV9zdWJzdC5JdGVt
KGtleXNbaV0pICsgIiAiKTsNCisJfQ0KKw0KKwlNRi5Xcml0ZUJsYW5rTGluZXMoMSk7DQorCU1G
LldyaXRlTGluZSgiYWxsOiAkKEVYVF9UQVJHRVRTKSIpOw0KKw0KKwlmb3IgKGkgPSBtYWtlX2J1
aWxkcy5sZW5ndGg7IGkgPj0gMDsgaS0tKSB7DQorCQlpZiAoaSA9PSBtYWtlX2J1aWxkcy5sZW5n
dGgpIHsNCisJCQlNRi5Xcml0ZUxpbmUoIiFJRiBFWElTVCgkKEJVSUxEX0RJUilcXCQoUEhQR1RL
TElCKSkiKTsNCisJCX0NCisJCU1GLldyaXRlTGluZShtYWtlX2J1aWxkc1tpXSk7DQorCX0NCisN
CisJaWYgKG1ha2VfYnVpbGRzLmxlbmd0aCA+IDEpIHsNCisJCU1GLldyaXRlTGluZSgiIUVMU0Ui
KTsNCisJCU1GLldyaXRlTGluZSgiIU1FU1NBR0UgTm90ZTogJChQSFBHVEtMSUIpIG11c3QgYmUg
Y3JlYXRlZCBiZWZvcmUgUEhQLUdUSyBleHRlbnNpb25zIGNhbiBiZSBidWlsdCIpOw0KKwl9DQor
CQ0KKwlNRi5Xcml0ZUxpbmUoIiFFTkRJRiIpOw0KKwlNRi5Xcml0ZUxpbmUoImJ1aWxkX2RpcnM6
ICQoQlVJTERfRElSKSAkKEJVSUxEX0RJUlNfU1VCKSIpOw0KKwlNRi5Xcml0ZUJsYW5rTGluZXMo
MSk7DQorDQorCVRGID0gRlNPLk9wZW5UZXh0RmlsZSgiTWFrZWZpbGUub2JqZWN0cyIsIDEpOw0K
KwlNRi5Xcml0ZShURi5SZWFkQWxsKCkpOw0KKwlURi5DbG9zZSgpOw0KKw0KKwlURiA9IEZTTy5P
cGVuVGV4dEZpbGUoIk1ha2VmaWxlLmV4dGVuc2lvbnMiLCAxKTsNCisJTUYuV3JpdGUoVEYuUmVh
ZEFsbCgpKTsNCisJVEYuQ2xvc2UoKTsNCisNCisJTUYuQ2xvc2UoKTsNCisNCisJRlNPLkRlbGV0
ZUZpbGUoIk1ha2VmaWxlLm9iamVjdHMiKTsNCisJRlNPLkRlbGV0ZUZpbGUoIk1ha2VmaWxlLmV4
dGVuc2lvbnMiKTsNCit9DQorDQorZnVuY3Rpb24gY29weV9hbmRfc3Vic3Qoc3JjbmFtZSwgZGVz
dG5hbWUsIHN1YnN0X2FycmF5KSB7DQorDQorCWlmICghRlNPLkZpbGVFeGlzdHMoc3JjbmFtZSkp
IHsNCisJCXNyY25hbWUgPSBjb25maWd1cmVfbW9kdWxlX2Rpcm5hbWUgKyAiXFwiICsgc3JjbmFt
ZTsNCisJCWRlc3RuYW1lID0gY29uZmlndXJlX21vZHVsZV9kaXJuYW1lICsgIlxcIiArIGRlc3Ru
YW1lOw0KKwl9DQorDQorCXZhciBjb250ZW50ID0gZmlsZV9nZXRfY29udGVudHMoc3JjbmFtZSk7
DQorCXZhciBpOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgc3Vic3RfYXJyYXkubGVuZ3RoOyBpKz0y
KSB7DQorCQl2YXIgcmUgPSBzdWJzdF9hcnJheVtpXTsNCisJCXZhciByZXAgPSBzdWJzdF9hcnJh
eVtpKzFdOw0KKw0KKwkJY29udGVudCA9IGNvbnRlbnQucmVwbGFjZShyZSwgcmVwKTsNCisJfQ0K
Kw0KKwl2YXIgZiA9IEZTTy5DcmVhdGVUZXh0RmlsZShkZXN0bmFtZSwgdHJ1ZSk7DQorCWYuV3Jp
dGUoY29udGVudCk7DQorCWYuQ2xvc2UoKTsNCit9DQorDQorLy8gZ2xvYiB1c2luZyBzaW1wbGUg
ZmlsZW5hbWUgd2lsZGNhcmRzOyByZXR1cm5zIGFuIGFycmF5IG9mIG1hdGNoZXMgZm91bmQgaW4g
dGhlIGZpbGVzeXN0ZW0NCitmdW5jdGlvbiBnbG9iKHBhdGhfcGF0dGVybikgew0KKw0KKwl2YXIg
cGF0aF9wYXJ0cyA9IHBhdGhfcGF0dGVybi5yZXBsYWNlKG5ldyBSZWdFeHAoIi8iLCAiZyIpLCAi
XFwiKS5zcGxpdCgiXFwiKTsNCisJdmFyIHA7DQorCXZhciBiYXNlID0gIiI7DQorCXZhciBpc19w
YXRfcmUgPSAvXCovOw0KKw0KKwlpZiAoRlNPLkZpbGVFeGlzdHMocGF0aF9wYXR0ZXJuKSkgew0K
KwkJcmV0dXJuIG5ldyBBcnJheShwYXRoX3BhdHRlcm4pOw0KKwl9DQorDQorCS8vIGZpcnN0LCBi
dWlsZCBhcyBtdWNoIGFzIHBvc3NpYmxlIHRoYXQgZG9lc24ndCBoYXZlIGEgcGF0dGVybg0KKwlm
b3IgKHAgPSAwOyBwIDwgcGF0aF9wYXJ0cy5sZW5ndGg7IHArKykgew0KKwkJaWYgKHBhdGhfcGFy
dHNbcF0ubWF0Y2goaXNfcGF0X3JlKSkNCisJCQlicmVhazsNCisJCWlmIChwKQ0KKwkJCWJhc2Ug
Kz0gIlxcIjsNCisJCWJhc2UgKz0gcGF0aF9wYXJ0c1twXTsNCisJfQ0KKw0KKwlyZXR1cm4gX2lu
bmVyX2dsb2IoYmFzZSwgcCwgcGF0aF9wYXJ0cyk7DQorfQ0KKw0KK2Z1bmN0aW9uIF9pbm5lcl9n
bG9iKGJhc2UsIHAsIHBhcnRzKSB7DQorDQorCXZhciBwYXQgPSBwYXJ0c1twXTsNCisJdmFyIGZ1
bGxfbmFtZSA9IGJhc2UgKyAiXFwiICsgcGF0Ow0KKwl2YXIgcmUgPSBudWxsOw0KKwl2YXIgaXRl
bXMgPSBudWxsOw0KKw0KKwlpZiAocCA9PSBwYXJ0cy5sZW5ndGgpIHsNCisJCXJldHVybiBmYWxz
ZTsNCisJfQ0KKw0KKwlpZiAoRlNPLkZpbGVFeGlzdHMoZnVsbF9uYW1lKSkgew0KKwkJaWYgKHAg
PCBwYXJ0cy5sZW5ndGggLSAxKSB7DQorCQkJLy8gd2UgZGlkbid0IHJlYWNoIHRoZSBmdWxsIGV4
dGVudCBvZiB0aGUgcGF0dGVybg0KKwkJCXJldHVybiBmYWxzZTsNCisJCX0NCisJCXJldHVybiBu
ZXcgQXJyYXkoZnVsbF9uYW1lKTsNCisJfQ0KKw0KKwlpZiAoRlNPLkZvbGRlckV4aXN0cyhmdWxs
X25hbWUpICYmIHAgPT0gcGFydHMubGVuZ3RoIC0gMSkgew0KKwkJLy8gd2UgaGF2ZSByZWFjaGVk
IHRoZSBlbmQgb2YgdGhlIHBhdHRlcm47IG5vIG5lZWQgdG8gcmVjdXJzZQ0KKwkJcmV0dXJuIG5l
dyBBcnJheShmdWxsX25hbWUpOw0KKwl9DQorDQorCS8vIENvbnZlcnQgdGhlIHBhdHRlcm4gaW50
byBhIHJlZ2V4cA0KKwlyZSA9IG5ldyBSZWdFeHAoIl4iICsgcGF0LnJlcGxhY2UoL1wuL2csICdc
XC4nKS5yZXBsYWNlKC9cKi9nLCAnLionKS5yZXBsYWNlKC9cPy9nLCAnLicpICsgIiQiLCAiaSIp
Ow0KKw0KKwlpdGVtcyA9IG5ldyBBcnJheSgpOw0KKw0KKwlpZiAoIUZTTy5Gb2xkZXJFeGlzdHMo
YmFzZSkpIHsNCisJCXJldHVybiBmYWxzZTsNCisJfQ0KKw0KKwl2YXIgZm9sZGVyID0gRlNPLkdl
dEZvbGRlcihiYXNlKTsNCisJdmFyIGZjID0gbnVsbDsNCisJdmFyIHN1Yml0ZW1zID0gbnVsbDsN
CisJdmFyIGl0ZW1fbmFtZSA9IG51bGw7DQorCXZhciBqOw0KKw0KKwlmYyA9IG5ldyBFbnVtZXJh
dG9yKGZvbGRlci5TdWJGb2xkZXJzKTsNCisJZm9yICg7ICFmYy5hdEVuZCgpOyBmYy5tb3ZlTmV4
dCgpKSB7DQorCQlpdGVtX25hbWUgPSBGU08uR2V0RmlsZU5hbWUoZmMuaXRlbSgpKTsNCisNCisJ
CWlmIChpdGVtX25hbWUubWF0Y2gocmUpKSB7DQorCQkJLy8gZ290IGEgbWF0Y2g7IGlmIHdlIGFy
ZSBhdCB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuLCBqdXN0IGFkZCB0aGVzZQ0KKwkJCS8vIHRoaW5n
cyB0byB0aGUgaXRlbXMgYXJyYXkNCisJCQlpZiAocCA9PSBwYXJ0cy5sZW5ndGggLSAxKSB7DQor
CQkJCWl0ZW1zW2l0ZW1zLmxlbmd0aF0gPSBmYy5pdGVtKCk7DQorCQkJfSBlbHNlIHsNCisJCQkJ
Ly8gd2Ugc2hvdWxkIHJlY3Vyc2UgYW5kIGRvIG1vcmUgbWF0Y2hlcw0KKwkJCQlzdWJpdGVtcyA9
IF9pbm5lcl9nbG9iKGJhc2UgKyAiXFwiICsgaXRlbV9uYW1lLCBwICsgMSwgcGFydHMpOw0KKwkJ
CQlpZiAoc3ViaXRlbXMpIHsNCisJCQkJCWZvciAoaiA9IDA7IGogPCBzdWJpdGVtcy5sZW5ndGg7
IGorKykgew0KKwkJCQkJCWl0ZW1zW2l0ZW1zLmxlbmd0aF0gPSBzdWJpdGVtc1tqXTsNCisJCQkJ
CX0NCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKwkvLyBpZiB3ZSBhcmUgYXQgdGhlIGVu
ZCBvZiB0aGUgcGF0dGVybiwgd2Ugc2hvdWxkIG1hdGNoIGZpbGVzIHRvbw0KKwlpZiAocCA9PSBw
YXJ0cy5sZW5ndGggLSAxKSB7DQorCQlmYyA9IG5ldyBFbnVtZXJhdG9yKGZvbGRlci5GaWxlcyk7
DQorCQlmb3IgKDsgIWZjLmF0RW5kKCk7IGZjLm1vdmVOZXh0KCkpIHsNCisJCQlpdGVtX25hbWUg
PSBGU08uR2V0RmlsZU5hbWUoZmMuaXRlbSgpKTsNCisJCQlpZiAoaXRlbV9uYW1lLm1hdGNoKHJl
KSkgew0KKwkJCQlpdGVtc1tpdGVtcy5sZW5ndGhdID0gZmMuaXRlbSgpOw0KKwkJCX0NCisJCX0N
CisJfQ0KKw0KKwlpZiAoaXRlbXMubGVuZ3RoID09IDApDQorCQlyZXR1cm4gZmFsc2U7DQorDQor
CXJldHVybiBpdGVtczsNCit9DQorDQorLyogRW1pdHMgcnVsZSB0byBnZW5lcmF0ZSB2ZXJzaW9u
IGluZm8gZm9yIGFuIGV4dGVuc2lvbi4NCitSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSAucmVzIGZp
bGUgdGhhdCB3aWxsIGJlIGdlbmVyYXRlZCAqLw0KK2Z1bmN0aW9uIGdlbmVyYXRlX3ZlcnNpb25f
aW5mb19yZXNvdXJjZShtYWtlZmlsZXRhcmdldCwgY3JlZGl0c3BhdGgpIHsNCisNCisJLy8gbWFr
ZWZpbGV0YXJnZXQgaXMgcGhwLWd0ay5kbGwNCisJLy8gY3JlZGl0c3BhdGggaXMgZXh0XGd0aysN
CisNCisJdmFyIHJlc25hbWUgPSBtYWtlZmlsZXRhcmdldCArICIucmVzIjsNCisJdmFyIHJlc19k
ZXNjID0gIlBIUC1HVEsgU2NyaXB0IEludGVycHJldGVyIjsNCisJdmFyIHJlc19wcm9kX25hbWUg
PSAiUEhQLUdUSyI7DQorCXZhciBjcmVkaXRzOw0KKwl2YXIgdGhhbmtzID0gIlRoYW5rcyB0byBB
bmRyZWkgWm1pZXZza2kiOw0KKwl2YXIgbG9nbyA9ICIiOw0KKw0KKwlpZiAoRlNPLkZpbGVFeGlz
dHMoY3JlZGl0c3BhdGggKyAnL0NSRURJVFMnKSkgew0KKwkJY3JlZGl0cyA9IEZTTy5PcGVuVGV4
dEZpbGUoY3JlZGl0c3BhdGggKyAnL0NSRURJVFMnLCAxKTsNCisJCXJlc19kZXNjID0gY3JlZGl0
cy5SZWFkTGluZSgpOw0KKwkJdHJ5IHsNCisJCQl0aGFua3MgPSBjcmVkaXRzLlJlYWRMaW5lKCk7
DQorCQl9IGNhdGNoIChlKSB7DQorCQkJdGhhbmtzID0gbnVsbDsNCisJCX0NCisJCWlmICh0aGFu
a3MgPT0gbnVsbCkgew0KKwkJCXRoYW5rcyA9ICIiOw0KKwkJfSBlbHNlIHsNCisJCQl0aGFua3Mg
PSAiVGhhbmtzIHRvICIgKyB0aGFua3M7DQorCQl9DQorCQljcmVkaXRzLkNsb3NlKCk7DQorCX0N
CisNCisJTUZPLldyaXRlTGluZSgiUEhQR1RLRExMX1JFUz0kKEJVSUxEX0RJUilcXCQoUEhQR1RL
RExMKS5yZXMiKTsNCisJTUZPLldyaXRlQmxhbmtMaW5lcygxKTsNCisNCisJaWYgKG1ha2VmaWxl
dGFyZ2V0Lm1hdGNoKG5ldyBSZWdFeHAoIlxcLmV4ZSQiKSkpIHsNCisJCWxvZ28gPSAiIC9EIFdB
TlRfTE9HTyI7DQorCX0NCisNCisJTUZPLldyaXRlTGluZSgiJChQSFBHVEtETExfUkVTKTogd2lu
MzJcXHRlbXBsYXRlLnJjIik7DQorCU1GTy5Xcml0ZUxpbmUoIlx0JChSQykgL2ZvICQoUEhQR1RL
RExMX1JFUykiICsgbG9nbyArICcgL0QgRklMRV9ERVNDUklQVElPTj0iXFwiJyArIHJlc19kZXNj
ICsgJ1xcIiIgL0QgRklMRV9OQU1FPSJcXCIkKFBIUEdUS0RMTClcXCIiIC9EIFBST0RVQ1RfTkFN
RT0iXFwiJyArIHJlc19wcm9kX25hbWUgKyAnXFwiIiAvRCBUSEFOS1NfR1VZUz0iXFwiJyArIHRo
YW5rcyArICdcXCIiIHdpbjMyXFx0ZW1wbGF0ZS5yYycpOw0KKwlNRk8uV3JpdGVCbGFua0xpbmVz
KDEpOw0KKw0KKwlyZXR1cm4gcmVzbmFtZTsNCit9DQorDQorLyogZXhlY3V0ZSBhIGNvbW1hbmQg
YW5kIHJldHVybiB0aGUgb3V0cHV0IGFzIGEgc3RyaW5nICovDQorZnVuY3Rpb24gZXhlY3V0ZShj
b21tYW5kX2xpbmUpIHsNCisJdmFyIGUgPSBXc2hTaGVsbC5FeGVjKGNvbW1hbmRfbGluZSk7DQor
CXZhciByZXQgPSAiIjsNCisNCisJcmV0ID0gZS5TdGRPdXQuUmVhZEFsbCgpOw0KKw0KKwlyZXR1
cm4gcmV0Ow0KK30NCisNCisvLyBXaGljaCB2ZXJzaW9uIG9mIHRoZSBjb21waWxlciBkbyB3ZSBo
YXZlPw0KIGZ1bmN0aW9uIHByb2JlX21zdmNfY29tcGlsZXJfdmVyc2lvbihDTCkgew0KLQl2YXIg
Y29tbWFuZCA9ICdjbWQgL2MgIiInICsgQ0wgKyAnIiAtdiInOw0KLQl2YXIgdmVyc2lvbiA9IGV4
ZWN1dGUoY29tbWFuZCArICciIDI+JjEiJyk7DQorCXZhciBjb21tYW5kID0gJ2NtZCAvYyAnICsg
Q0wgKyAnIC12JzsNCisJdmFyIHZlcnNpb24gPSBleGVjdXRlKGNvbW1hbmQgKyAnIDI+JjEnKTsN
CiANCiAJaWYgKHZlcnNpb24ubWF0Y2goLyhcZCtcLlxkKykvKSkgew0KIAkJcmV0dXJuIFJlZ0V4
cC4kMS5zcGxpdCgiLiIpLmpvaW4oIiIpOw0KIAl9DQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8vIFBv
a2UgYXJvdW5kIGZvciBzb21lIGhlYWRlcnMKLWZ1bmN0aW9uIHByb2JlX2Jhc2ljX2hlYWRlcnMo
KQotewotCXZhciBwOwotCi0JLy8gaGFjayB0byBjYXRjaCBjb21tb24gbG9jYXRpb24gb2YgbGli
cwotCWlmICh0eXBlb2YocCkgPT0gInN0cmluZyIpIHsKLQkJcCA9IHAucmVwbGFjZShuZXcgUmVn
RXhwKCJpbmNsdWRlJCIpLCAibGliIik7Ci0JCUFERF9GTEFHKCJMREZMQUdTIiwgJy9saWJwYXRo
OiInICsgcCArICciICcpOwotCQlwaHBfdXN1YWxfbGliX3N1c3BlY3RzICs9ICI7IiArIHA7Ci0J
fQotCi0JLy8gTWFrZSBzdXJlIHRoYXQgdHNybSwgbWFpbiBhbmQgWkVORCBnZXQgYWRkZWQgdG8g
dGhlIGluY2x1ZGVzCi0JdmFyIHBocF9kaXIgPSBDSEVDS19IRUFERVIoJ1plbmQvemVuZC5oJyk7
Ci0JQUREX0ZMQUcoJ0NGTEFHUycsICcvSSAiJyArIHBocF9kaXIgKyAnIiAnKTsKLQlBRERfRkxB
RygnQ0ZMQUdTJywgJy9JICInICsgcGhwX2RpciArICdcXFRTUk0iICcpOwotCUFERF9GTEFHKCdD
RkxBR1MnLCAnL0kgIicgKyBwaHBfZGlyICsgJ1xcbWFpbiIgJyk7Ci0JQUREX0ZMQUcoJ0NGTEFH
UycsICcvSSAiJyArIHBocF9kaXIgKyAnXFxaZW5kIiAnKTsKLX0KLQotLyogbm9uLWZ1bmN0aW9u
cyAqLwotCi1pZiAoIUZTTy5GaWxlRXhpc3RzKCJidWlsZGNvbmYuYmF0IikpIHsKLQlTVERFUlIu
V3JpdGVMaW5lKCJNdXN0IGJlIHJ1biBmcm9tIHRoZSByb290IG9mIHRoZSBQSFAtR1RLIHNvdXJj
ZSIpOwotCVdTY3JpcHQuUXVpdCgxMCk7Ci19CisNCisJcmV0dXJuIDA7DQorfQ0KKw0KKy8vIFBv
a2UgYXJvdW5kIGZvciBzb21lIGhlYWRlcnMNCitmdW5jdGlvbiBwcm9iZV9iYXNpY19oZWFkZXJz
KCkNCit7DQorCXZhciBwOw0KKw0KKwkvLyBoYWNrIHRvIGNhdGNoIGNvbW1vbiBsb2NhdGlvbiBv
ZiBsaWJzDQorCWlmICh0eXBlb2YocCkgPT0gInN0cmluZyIpIHsNCisJCXAgPSBwLnJlcGxhY2Uo
bmV3IFJlZ0V4cCgiaW5jbHVkZSQiKSwgImxpYiIpOw0KKwkJQUREX0ZMQUcoIkxERkxBR1MiLCAn
L2xpYnBhdGg6IicgKyBwICsgJyIgJyk7DQorCQlwaHBfdXN1YWxfbGliX3N1c3BlY3RzICs9ICI7
IiArIHA7DQorCX0NCisNCisJLy8gTWFrZSBzdXJlIHRoYXQgdHNybSwgbWFpbiBhbmQgWkVORCBn
ZXQgYWRkZWQgdG8gdGhlIGluY2x1ZGVzDQorCXZhciBwaHBfZGlyID0gQ0hFQ0tfSEVBREVSKCda
ZW5kL3plbmQuaCcpOw0KKwlBRERfRkxBRygnQ0ZMQUdTJywgJy9JICInICsgcGhwX2RpciArICci
ICcpOw0KKwlBRERfRkxBRygnQ0ZMQUdTJywgJy9JICInICsgcGhwX2RpciArICdcXFRTUk0iICcp
Ow0KKwlBRERfRkxBRygnQ0ZMQUdTJywgJy9JICInICsgcGhwX2RpciArICdcXG1haW4iICcpOw0K
KwlBRERfRkxBRygnQ0ZMQUdTJywgJy9JICInICsgcGhwX2RpciArICdcXFplbmQiICcpOw0KK30N
CisNCisvKiBub24tZnVuY3Rpb25zICovDQorDQoraWYgKCFGU08uRmlsZUV4aXN0cygiYnVpbGRj
b25mLmJhdCIpKSB7DQorCVNUREVSUi5Xcml0ZUxpbmUoIk11c3QgYmUgcnVuIGZyb20gdGhlIHJv
b3Qgb2YgdGhlIFBIUC1HVEsgc291cmNlIik7DQorCVdTY3JpcHQuUXVpdCgxMCk7DQorfQ==

--61c2eea4dd17d53a008762f3e141f5a1b85a71a6--