Re: Does CORBA::ORBIT place any constraints on the IIOP?

Huw Rogers <[email protected]> Mon, 15 Apr 2002 23:39:03 +0900
Newsgroups gmane.comp.gnome.orbit.perl
Message-ID <[email protected]>
--------_3CBAE51E8CF1020E3C80_MULTIPART_MIXED_
Content-Type: text/plain; charset="US-ASCII"
Content-Transfer-Encoding: 7bit

Here's a patch for CORBA::ORBit 0.4.3 that brings it up to date with CVS
and further adds many bug fixes and patches I've made. Use with ORBit
stable 0.5.13 or later (not 0.5.12). Don't use ORBit2.

Put this at the beginning of your perl script before the
use CORBA::ORBit line:

BEGIN { unshift @ARGV, qw(-ORBIIOPIPv4 1); }

Now you have an interoperable Perl / CORBA binding.

	-Huw
-- 
Huw Rogers <[email protected]>

--------_3CBAE51E8CF1020E3C80_MULTIPART_MIXED_
Content-Type: application/octet-stream; name="CORBA-ORBit-0.4.3.patch"
Content-Disposition: attachment;
 filename="CORBA-ORBit-0.4.3.patch"
Content-Transfer-Encoding: base64

ZGlmZiAtYyAtciBDT1JCQS1PUkJpdC0wLjQuMy9BY2NvdW50LmlkbCBDT1JCQS1PUkJpdC0wLjQu
NC9BY2NvdW50LmlkbAoqKiogQ09SQkEtT1JCaXQtMC40LjMvQWNjb3VudC5pZGwJU3VuIEp1bCAg
OSAwNDowMDowNCAyMDAwCi0tLSBDT1JCQS1PUkJpdC0wLjQuNC9BY2NvdW50LmlkbAlUdWUgTWFy
IDI2IDE1OjE1OjUyIDIwMDIKKioqKioqKioqKioqKioqCioqKiAxMSwxNyAqKioqCiAgICAgIHZv
aWQgZGVzdHJveSgpOwogICAgfTsKICAKISAgIGludGVyZmFjZSBBY2NvdW50IHsKICAgICAgZXhj
ZXB0aW9uIEluc3VmZmljaWVudEZ1bmRzIHsgQW1vdW50IG92ZXJkcmFmdDsgfTsKICAgICAgCiAg
ICAgIHR5cGVkZWYgc2VxdWVuY2U8c2hvcnQ+IG51bWJlcnM7Ci0tLSAxMSwyMSAtLS0tCiAgICAg
IHZvaWQgZGVzdHJveSgpOwogICAgfTsKICAKISAgIGludGVyZmFjZSBCYXNlQWNjb3VudCB7CiEg
ICAgIE9iamVjdCBlY2hvX29iamVjdCAoaW4gT2JqZWN0IG9iaik7CiEgICB9OwohIAohICAgaW50
ZXJmYWNlIEFjY291bnQgOiBCYXNlQWNjb3VudCB7CiAgICAgIGV4Y2VwdGlvbiBJbnN1ZmZpY2ll
bnRGdW5kcyB7IEFtb3VudCBvdmVyZHJhZnQ7IH07CiAgICAgIAogICAgICB0eXBlZGVmIHNlcXVl
bmNlPHNob3J0PiBudW1iZXJzOwoqKioqKioqKioqKioqKioKKioqIDM4LDQzICoqKioKLS0tIDQy
LDQ4IC0tLS0KICAgICAgCiAgICAgIGF0dHJpYnV0ZSBQcmVmZXJlbmNlcyBwcmVmczsKICAgICAg
YXR0cmlidXRlIEZhY2UgYXBwZWFyYW5jZTsKKyAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHN0cmlu
ZyBGb287CiAgCiAgCiAgICAgIHZvaWQgc2V0X3ByZWYgKCBpbiBQcmVmZXJlbmNlIHAgKTsKZGlm
ZiAtYyAtciBDT1JCQS1PUkJpdC0wLjQuMy9DaGFuZ2VMb2cgQ09SQkEtT1JCaXQtMC40LjQvQ2hh
bmdlTG9nCioqKiBDT1JCQS1PUkJpdC0wLjQuMy9DaGFuZ2VMb2cJV2VkIE9jdCAyNSAxNjo1MTo0
MSAyMDAwCi0tLSBDT1JCQS1PUkJpdC0wLjQuNC9DaGFuZ2VMb2cJVHVlIE1hciAyNiAxNToxNTo1
MiAyMDAyCioqKioqKioqKioqKioqKgoqKiogMSw2ICoqKioKLS0tIDEsMTAyIC0tLS0KKyBUaHUg
RmViICA4IDIyOjA4OjQzIDIwMDEgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgor
IAorIAkqIGRlbWFyc2hhbC5jIChnZXRfc3RyaW5nKTogQ2F0Y2ggMCBsZW5ndGggc3RyaW5ncwor
IAl0aGF0IFZpc2lCcm9rZXIgZm9yIEphdmEgZ2VuZXJhdGVzLiAoUHJvYmxlbSByZXBvcnRlZAor
IAlieSBTaW1vbiBLaXJieSBhbmQgQ2FsaW4gTWVkaWFudS4pCisgCisgV2VkIEZlYiAgNyAwMTo0
NTowMCAyMDAxICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KKyAKKyAJKiBzZXJ2
ZXI6IEFkZCBzb21lIHRlc3RzIGZvciB0aW1lb3V0cyBhbmQgaW9fd2F0Y2hlcy4KKyAKKyAJKiBP
UkJpdC54cyBleHRyYXMuW2NoXTogQWRkIHNpbXBsZSBtYWluIGxvb3AgZmFjaWxpdGllcworIAlm
b3IgSU8gd2F0Y2hlcyBhbmQgdGltZW91dHMuIChBIGxpdHRsZSBtb3JlIGNvZGUgdGhhbiBJJ2QK
KyAJbGlrZSwgYnV0IG1vc3RseSBiZWNhdXNlIG9mIHRoZSBhcmd1bWVudCBwYXJzaW5nCisgCWNv
ZGUgaW4gYWRkX3RpbWVvdXQsIGFkZF9pb193YXRjaC4pCisgCisgCSogZGVtYXJzaGFsLmMgKGdl
dF9maXhlZCk6IEFkZCBtaXNzaW5nIFBVVEJBQ0sKKyAKKyBTdW4gRmViICA0IDIyOjM0OjMyIDIw
MDEgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgorIAorIAkqIGludGVyZmFjZXMu
YzogUmVnaXN0ZXIgYSBfaXNfYSBtZXRob2QgZm9yIENvcmJhOjpPYmplY3QuCisgCisgCSogc2Vy
dmVyLltjaF0gKHBvcmJpdF9zZXJ2YW50X2lzX2EpOiBBZGQgbWV0aG9kIHRvCisgCWNoZWNrIHdo
ZXRoZXIgYSBzZXJ2YW50IGRlcml2ZXMgZnJvbSBhIGdpdmVuIHJlcG9faWQuCisgCisgCSogT1JC
aXQueHM6IEFkZCBQb3J0YWJsZVNlcnZhbnQ6OlNlcnZhbnRCYXNlOjpfaXNfYS4KKyAKKyAJKiBp
ZGwuYyAoZGVmaW5lX2ludGVyZmFjZSk6IEFkZCB0aGUgQ09SQkE6Ok9SQml0IGJhc2UgY2xhc3Mg
CisgCXRvIGJhc2VfaW50ZXJmYWNlcyBpZiBpdCBpcyBvdGhlcndpc2UgZW1wdHkuCisgCSAKKyAg
ICAgICAgICogQWNjb3VudC5pZGwgY2xpZW50IHNlcnZlcjogdGVzdCBDT1JCQTo6T2JqZWN0Ojpf
aXNfYS4KKyAKKyAJKiBjbGllbnQuYzogSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHNvbWVvbmUgY2Fs
bHMKKyAJU29tZTo6Q09SQkE6Om1ldGhvZCh1bmRlZikuCisgCisgU3VuIEZlYiAgNCAyMDo0Njoy
NSAyMDAxICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KKyAKKyAJKiBjbGllbnQg
c2VydmVyIEFjY291bnQuaWRsOiBBZGQgdGVzdCBmb3IgbWFyc2hhbGxpbmcKKyAJQ09SQkE6Ok9i
amVjdCBhbmQgZm9yIGRvd25jYXN0aW5nLgorIAorIAkqIGludGVyZmFjZXMuYyBtYXJzaGFsLmM6
IEhhbmRsZSBDT1JCQTo6T2JqZWN0IGJ5CisgCXJlZ2lzdGVyaW5nIGEgZHVtbXkgaW50ZXJmYWNl
IGRlc2NyaXB0aW9uLiAoUHJvYmxlbQorIAlyZXBvcnRlZCBieSBEYXZpZGUgUm9zc2V0dGkpCisg
CisgU3VuIEZlYiAgNCAxNzo1MjoyNSAyMDAxICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0
LmNvbT4KKyAKKyAJKiBPUkJpdC54cyBkZW1hcnNoYWwuYyBleHR0eXBlcy5bY2hdIGlkbC5jIGlu
dGVyZmFjZXMuYworICAgCSAgbWFyc2hhbC5jIHNlcnZlci5jIHR5cGVtYXAuCisgCUFwcGx5IHBh
dGNoIGZyb20gUGFvbG8gTW9sYXJvIHRvIG5hbWVzcGFjZQorIAlzb21lIGV4cG9ydGVkIGZ1bmN0
aW9ucyAodGhlIG9uZXMgaW4gZXh0dHlwZXMuaCkKKyAJYW5kIG1ha2UgdGhlIHJlc3Qgc3RhdGlj
LgorIAorIAkqIHNlcnZlci5oIChzdHJ1Y3QgX1BPUkJpdEluc3RWYXJzKTogRml4IEMrKyBjb21t
ZW50LgorIAorIAkqIGV4dHR5cGVzLmggKGxvbmdkb3VibGVfdG9fc3RyaW5nKTogZml4ICNlbmRp
ZiBGT08KKyAKKyAJKiBlcnJvcnMuYzogRml4IHNvbWUgaW5jb3JyZWN0IGV4Y2VwdGlvbiByZXBv
aWQncy4KKyAJKElhbiBDYW1wYmVsbCkKKyAJCisgCSogY2xpZW50LmMgKGRvX21hcnNoYWwpOiBG
aXggYnVnIHJlcG9ydGVkIGJ5IFRvYmlhcworIAlFbmdlbCB3aGVyZSByZXNwb25zZXMgd2VyZSBi
ZWluZyBzZW50IGZvciBvbmV3YXkKKyAJcmVxdWVzdHMuCisgCisgCSogc2VydmVyLmMgKGNhbGxf
aW1wbGVtZW50YXRpb24pOiBEb24ndCBjYWxsIFBVVEJBQ0sKKyAJdW50aWwgYWZ0ZXIgd2UgbWFy
c2hhbCBhbGwgdGhlIHJldHVybiBpdGVtcywgc2luY2UKKyAJaWYgbWFyc2hhbGxpbmcgZW5kcyB1
cCBjYWxsaW5nIGZ1bmN0aW9uIGNhbGxzLAorIAl3ZSdsbCBsZWFrIHRoZSBzdGFjayBpdGVtcy4g
KEZpeGVzIG1lbWxlYWtzIHJlcG9ydGVkIAorIAlieSBUb2RkIExld2lzKQorIAorIAkqIE1ha2Vm
aWxlLlBMOiBBZGQgUFJFUkVRX1BNIGZvciBFcnJvciBkZXBlbmRlbmN5LgorIAkoVGltIEplbm5l
c3MpCisgCisgCSogZXh0dHlwZXMuYyAoW3VdbG9uZ2xvbmdfZnJvbV9zdHJpbmcpOiBGaXggcHJv
YmxlbQorIAl3aGVyZSB2YWx1ZXMgd2VyZSBvZmYgYnkgYSBmYWN0b3Igb2YgMTAuIChQZWxsZSBK
b2huc2VuKQorIAorIAkqIE1ha2VmaWxlLlBMOiBSZXF1aXJlIE9SQml0IDAuNS43LgorIAorIAkq
IGRlbWFyc2hhbC5jIChSRUNWX0JVRkZFUl9MRUZUKTogQWRkIHRoZSBudW1iZXIgb2YKKyAJYnl0
ZXMgaW4gdGhlIGhlYWRlciwgZHVlIHRvIGNoYW5nZXMgaW4gT1JCaXQtMC41LjYuCisgCisgV2Vk
IERlYyAxMyAyMDoxNjo1OCAyMDAwICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4K
KyAKKyAJKiBPUkJpdC54cyBpZGwuW2NoXTogQWxsb3cgcGFzc2luZyBpbiBmbGFncyBmb3IgSURM
IGNvbXBpbGVyLgorIAorIAkqIE9SQml0LnBtOiBQYXNzIGRpcmVjdG9yaWVzIGZyb20gaWRsX3Bh
dGggYXMgLUkgZmxhZ3MKKyAJdG8gdGhlIElETCBjb21waWxlci4KKyAKKyBTYXQgTm92IDE4IDAz
OjAzOjI0IDIwMDAgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgorIAorIAkqIE9S
Qml0LnhzOiBBZGQgaW1wbGVtZW50YXRpb24gb2YgCisgCUNPUkJBOjpPUkI6Omxpc3RfaW5pdGlh
bF9zZXJ2aWNlcyBiYXNlZCBvbiB0aGF0CisgCW9mIFJvZ2VyIEwgR3VsYnJhbnNvbi4KKyAKICBX
ZWQgT2N0IDI1IDAzOjUxOjI5IDIwMDAgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29t
PgogIAogIAkqIE9SQml0LnBtIHVwIHZlcnNpb24gdG8gMC40LjMuCisgCisgVGh1IE5vdiAxNiAx
MjoxMDoxMCAyMDAwICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KKyAKKyAJKiBS
RUFETUU6IEZpeCBsaW5rIHRvIE9SQml0IHNvdXJjZXMgKHJlcG9ydGVkIGJ5IEpvbiBBbnRvbm92
aWNzKQogIAogIFdlZCBPY3QgMjUgMDM6NDY6NTQgMjAwMCAgT3dlbiBUYXlsb3IgIDxvdGF5bG9y
QHJlZGhhdC5jb20+CiAgCmRpZmYgLWMgLXIgQ09SQkEtT1JCaXQtMC40LjMvTWFrZWZpbGUuUEwg
Q09SQkEtT1JCaXQtMC40LjQvTWFrZWZpbGUuUEwKKioqIENPUkJBLU9SQml0LTAuNC4zL01ha2Vm
aWxlLlBMCVdlZCBPY3QgMjUgMTY6Mjc6MTMgMjAwMAotLS0gQ09SQkEtT1JCaXQtMC40LjQvTWFr
ZWZpbGUuUEwJVHVlIE1hciAyNiAxNToxNTo1MiAyMDAyCioqKioqKioqKioqKioqKgoqKiogMTQs
MjkgKioqKgogICAgICAgICAgICAgICAgc2VydmVyLm8KICAJICAgICAgdHlwZXMubyk7CiAgCiEg
JG9yYml0X2NmbGFncyA9IGBvcmJpdC1jb25maWcgLS1jZmxhZ3MgY2xpZW50IHNlcnZlcmA7CiEg
dW5kZWYgJG9yYml0X2NmbGFncyBpZiAkPzsKISAkb3JiaXRfbGlicyA9IGBvcmJpdC1jb25maWcg
LS1saWJzIGNsaWVudCBzZXJ2ZXJgOwohIHVuZGVmICRvcmJpdF9saWJzIGlmICQ/OwogIAohIGlm
ICghZGVmaW5lZCAkb3JiaXRfbGlicykgewogICAgICBwcmludCBTVERFUlIgIm9yYml0LWNvbmZp
ZyBub3QgZm91bmRcbiI7CiAgICAgIGV4aXQgMTsKICB9CiAgCiAgaWYgKCRdIDwgNS4wMDQ1KSB7
CiAgICAgIHByaW50IFNUREVSUiAiVXNpbmcgY29tcGF0aWJpbGl0eSBtYWNyb3Mvcm91dGluZXMg
Zm9yIFBlcmwgNS4wMDRcbiI7CiAgICAgIHB1c2ggQE9CSkVDVFMsJ2NvbnN0c3ViLm8nOwotLS0g
MTQsNDQgLS0tLQogICAgICAgICAgICAgICAgc2VydmVyLm8KICAJICAgICAgdHlwZXMubyk7CiAg
CiEgJG9yYml0X3ZlcnNpb24gPSBgb3JiaXQtY29uZmlnIC0tdmVyc2lvbmA7CiEgdW5kZWYgJG9y
Yml0X3ZlcnNpb24gaWYgJD87CiAgCiEgaWYgKCFkZWZpbmVkICRvcmJpdF92ZXJzaW9uKSB7CiAg
ICAgIHByaW50IFNUREVSUiAib3JiaXQtY29uZmlnIG5vdCBmb3VuZFxuIjsKICAgICAgZXhpdCAx
OwogIH0KICAKKyBteSAoJGEsJGIsJGMpID0gJG9yYml0X3ZlcnNpb24gPX4gL09SQml0XHMrKFxk
KykuKFxkKykuKFxkKykvOworIAorIGlmIChkZWZpbmVkICRhKSB7CisgICAgIG15ICR2ZXJzaW9u
ID0gJGEgKiAxMDAwICsgJGIgKyAkYyAvIDEwMDA7CisgICAgIGlmICgkdmVyc2lvbiA8IDUuMDEz
KSB7CisgCXByaW50IFNUREVSUiAiQ09SQkE6Ok9SQml0IHJlcXVpcmVzIE9SQml0IDAuNS4xMyBv
ciBiZXR0ZXJcbiI7CisgCWV4aXQgMTsKKyAgICAgfQorIH0gZWxzZSB7CisgICAgIHByaW50IFNU
REVSUiAiQ291bGQgbm90IHBhcnNlIHZlcnNpb24gc3RyaW5nICckb3JiaXRfdmVyc2lvbicsIGFz
c3VtaW5nIE9LXG4iOworIH0KKyAKKyBjaG9tcCgkb3JiaXRfY2ZsYWdzID0gYG9yYml0LWNvbmZp
ZyAtLWNmbGFncyBjbGllbnQgc2VydmVyYCk7CisgJG9yYml0X2NmbGFncyAuPSAnIC1JL29wdC9P
UkJpdC9pbmNsdWRlL2xpYklETC0xLjAnOworIGNob21wKCRvcmJpdF9saWJzID0gYG9yYml0LWNv
bmZpZyAtLWxpYnMgY2xpZW50IHNlcnZlcmApOworICRvcmJpdF9saWJzIC49ICcgLVIvb3B0L09S
Qml0L2xpYic7CisgCiAgaWYgKCRdIDwgNS4wMDQ1KSB7CiAgICAgIHByaW50IFNUREVSUiAiVXNp
bmcgY29tcGF0aWJpbGl0eSBtYWNyb3Mvcm91dGluZXMgZm9yIFBlcmwgNS4wMDRcbiI7CiAgICAg
IHB1c2ggQE9CSkVDVFMsJ2NvbnN0c3ViLm8nOwoqKioqKioqKioqKioqKioKKioqIDMyLDQ2ICoq
KioKICBXcml0ZU1ha2VmaWxlKAogICAgICAnTkFNRScJPT4gJ0NPUkJBOjpPUkJpdCcsCiAgICAg
ICdWRVJTSU9OX0ZST00nID0+ICdPUkJpdC5wbScsCiAgICAgICdMSUJTJwk9PiBbJG9yYml0X2xp
YnMuIiAtbElETCJdLAohICAgICAnREVGSU5FJwk9PiAKISAgICAgICAgICgkXSA8IDUuMDA0NSAg
ICAgICAgID8gJy1EUEVSTDUwMDRfQ09NUEFUICcgOiAnJyksCiAgICAgICdJTkMnCT0+ICRvcmJp
dF9jZmxhZ3MsCiEgICAgICdPQkpFQ1QnICAgID0+IGpvaW4oIiAiLCBAT0JKRUNUUyksCiAgIyAg
ICAnWFNPUFQnICAgICA9PiAnLW5vbGluZW51bWJlcnMnLAohICAgICAnT1BUSU1JWkUnICA9PiAn
LWcgLVdhbGwnLAogICMgICAgJ09QVElNSVpFJyAgPT4gJy1PMiAtV2FsbCcsCiEgICAgICdNQVBf
VEFSR0VUJyA9PiAnb3JiaXRwZXJsJywKICAjICAgICdNQUtFQVBFUkwnID0+IDEsCiEgICAgICdk
aXN0JyAgICAgID0+IHsgQ09NUFJFU1M9PiJnemlwIiwgU1VGRklYPT4iZ3oiIH0sCiAgKTsKLS0t
IDQ3LDYyIC0tLS0KICBXcml0ZU1ha2VmaWxlKAogICAgICAnTkFNRScJPT4gJ0NPUkJBOjpPUkJp
dCcsCiAgICAgICdWRVJTSU9OX0ZST00nID0+ICdPUkJpdC5wbScsCisgICAgICdQUkVSRVFfUE0n
ID0+IHsgJ0Vycm9yJyA9PiAwLjEyIH0sCiAgICAgICdMSUJTJwk9PiBbJG9yYml0X2xpYnMuIiAt
bElETCJdLAohICAgICAnREVGSU5FJwk9PiAoJF0gPCA1LjAwNDUgICAgICAgICA/ICctRFBFUkw1
MDA0X0NPTVBBVCAnIDogJycpLAogICAgICAnSU5DJwk9PiAkb3JiaXRfY2ZsYWdzLAohICAgICAn
T0JKRUNUJyAgICA9PiBqb2luKCcgJywgQE9CSkVDVFMpLAohICAgICAnWFNPUFQnICAgICA9PiAn
LXByb3RvdHlwZXMnLAogICMgICAgJ1hTT1BUJyAgICAgPT4gJy1ub2xpbmVudW1iZXJzJywKISAj
ICAgICdPUFRJTUlaRScgID0+ICctZycsCiAgIyAgICAnT1BUSU1JWkUnICA9PiAnLU8yIC1XYWxs
JywKISAjICAgICdNQVBfVEFSR0VUJyA9PiAnb3JiaXRwZXJsJywKICAjICAgICdNQUtFQVBFUkwn
ID0+IDEsCiEgICAgICdkaXN0JyAgICAgID0+IHsgQ09NUFJFU1M9PiJnemlwIiwgU1VGRklYPT4i
Z3oiIH0KICApOwpkaWZmIC1jIC1yIENPUkJBLU9SQml0LTAuNC4zL09SQml0LnBtIENPUkJBLU9S
Qml0LTAuNC40L09SQml0LnBtCioqKiBDT1JCQS1PUkJpdC0wLjQuMy9PUkJpdC5wbQlXZWQgT2N0
IDI1IDE2OjQ5OjU0IDIwMDAKLS0tIENPUkJBLU9SQml0LTAuNC40L09SQml0LnBtCVR1ZSBNYXIg
MjYgMTU6MTU6NTIgMjAwMgoqKioqKioqKioqKioqKioKKioqIDE1LDIxICoqKioKICAKICBASVNB
ID0gcXcoRHluYUxvYWRlcik7CiAgCiEgJFZFUlNJT04gPSAnMC40LjMnOwogIAogIGJvb3RzdHJh
cCBDT1JCQTo6T1JCaXQgJFZFUlNJT047CiAgCi0tLSAxNSwyMSAtLS0tCiAgCiAgQElTQSA9IHF3
KER5bmFMb2FkZXIpOwogIAohICRWRVJTSU9OID0gJzAuNC40JzsKICAKICBib290c3RyYXAgQ09S
QkE6Ok9SQml0ICRWRVJTSU9OOwogIAoqKioqKioqKioqKioqKioKKioqIDMwLDM1ICoqKioKLS0t
IDMwLDU4IC0tLS0KICAKICBteSAkSURMX1BBVEg7CiAgCisgc3ViIGxvYWRfaWRsIHsKKyAgICAg
bXkgKCRvcmIsICRmaWxlKSA9IEBfOworICAgICAKKyAgICAgbXkgJHBhdGggPSBkZWZpbmVkICRJ
RExfUEFUSCA/ICRJRExfUEFUSCA6ICIiOworICAgICBteSAkaW5jbHVkZXMgPSBqb2luICgiICIs
IG1hcCB7ICItSSAiLiRfIH0gc3BsaXQgLzovLCRwYXRoKTsKKyAgICAgCisgICAgIGlmICgkZmls
ZSA9fiBtQF4vQCkgeworIAlpZiAoLWUgJGZpbGUpIHsKKyAJICAgICRvcmItPmxvYWRfaWRsX2Zp
bGUoIiRmaWxlIiwgJGluY2x1ZGVzKTsKKyAJICAgIHJldHVybiAxOworIAl9CisgICAgIH0gZWxz
ZSB7CisgCWZvcmVhY2ggKChzcGxpdCAvOi8sICRwYXRoKSwgIi4iKSB7CisgCSAgICBpZiAoLWUg
IiRfLyRmaWxlIikgeworIAkJJG9yYi0+bG9hZF9pZGxfZmlsZSgiJF8vJGZpbGUiLCAkaW5jbHVk
ZXMpOworIAkJcmV0dXJuIDE7CisgCSAgICB9CisgCX0KKyAgICAgfQorIAorICAgICAwOworIH07
CisgCiAgc3ViIGltcG9ydCB7CiAgICAgIG15ICRwa2cgPSBzaGlmdDsKICAKKioqKioqKioqKioq
KioqCioqKiA1OSw5MiAqKioqCiAgCiAgICAgIGZpbGU6CiAgCWZvcmVhY2ggbXkgJGZpbGUgKEBp
ZGxzKSB7CiEgCSAgICBpZiAoJGZpbGUgPX4gbUBeL0ApIHsKISAJCWlmICgtZSAkZmlsZSkgewoh
IAkJICAgICRvcmItPmxvYWRfaWRsX2ZpbGUoIiRmaWxlIik7CiEgCQkgICAgbmV4dCBmaWxlOwoh
IAkJfQohIAkgICAgfSBlbHNlIHsKISAJCW15ICRwYXRoID0gZGVmaW5lZCAkSURMX1BBVEggPyAk
SURMX1BBVEggOiAiIjsKISAJCWZvcmVhY2ggKChzcGxpdCAvOi8sICRwYXRoKSwgIi4iKSB7CiEg
CQkgICAgaWYgKC1lICIkXy8kZmlsZSIpIHsKISAJCQkkb3JiLT5sb2FkX2lkbF9maWxlKCIkXy8k
ZmlsZSIpOwohIAkJCW5leHQgZmlsZTsKISAJCSAgICB9CiEgCQl9CiEgCSAgICB9CiEgCSAgICBD
YXJwOjpjcm9haygiQ2Fubm90IGxvY2F0ZSBJREwgZmlsZTogJyRmaWxlJyIpOwogIAl9CiAgICAg
IH0KICB9CiAgCiAgcGFja2FnZSBDT1JCQTo6QW55OwogIAogIHN1YiBuZXcgewogICAgICBteSAo
JHBrZywgJHRjLCAkdmFsKSA9IEBfOwogIAohICAgICBpZiAocmVmKCR0YykgbmUgJ0NPUkJBOjpU
eXBlQ29kZScpIHsKISAJQ2FycDo6Y3JvYWsgKCdGaXJzdCBhcmd1bWVudCB0byBDT1JCQTo6QW55
OjpuZXcgbXVzdCBiZSBhIENPUkJBOjpUeXBlQ29kZScpOwohICAgICB9CiEgICAgIAogICAgICBy
ZXR1cm4gYmxlc3MgWyAkdGMsICR2YWwgXTsKICB9CiAgCi0tLSA4MiwxMDQgLS0tLQogIAogICAg
ICBmaWxlOgogIAlmb3JlYWNoIG15ICRmaWxlIChAaWRscykgewohIAkgICAgbG9hZF9pZGwoJG9y
YiwgJGZpbGUpIG9yIENhcnA6OmNyb2FrKCJDYW5ub3QgbG9hZCBJREwgZmlsZTogJyRmaWxlJyIp
OwogIAl9CiAgICAgIH0KICB9CiAgCiAgcGFja2FnZSBDT1JCQTo6QW55OwogIAorICRDT1JCQTo6
QW55OjpUQ19udWxsID0gQ09SQkE6OlR5cGVDb2RlLT5uZXcoJ0lETDpDT1JCQS9OdWxsOjEuMCcp
OworIAogIHN1YiBuZXcgewogICAgICBteSAoJHBrZywgJHRjLCAkdmFsKSA9IEBfOwogIAohICAg
ICAkdGMgPSAkQ09SQkE6OkFueTo6VENfbnVsbCB1bmxlc3MgKGRlZmluZWQoJHRjKSk7CiEgICAg
IENhcnA6OmNyb2FrICgKISAJJ0ZpcnN0IGFyZ3VtZW50IHRvIENPUkJBOjpBbnk6Om5ldyBtdXN0
IGJlIGEgQ09SQkE6OlR5cGVDb2RlJykKISAJICAgIGlmIChyZWYoJHRjKSBuZSAnQ09SQkE6OlR5
cGVDb2RlJyk7CiEgCiAgICAgIHJldHVybiBibGVzcyBbICR0YywgJHZhbCBdOwogIH0KICAKKioq
KioqKioqKioqKioqCioqKiAxMjcsMTM3ICoqKioKICAJJG5ld2NsYXNzID0gQ09SQkE6Ok9SQml0
Ojpsb2FkX2ludGVyZmFjZSAoJGlmYWNlKTsKICAgICAgfQogIAohICAgICBkZWZpbmVkICRuZXdj
bGFzcyBvciBjcm9hayAiQ2FuJ3QgZ2V0IGludGVyZmFjZSBpbnRmb3JtYXRpb24iOwogIAogICAg
ICBteSAoJG9sZGNsYXNzKSA9ICIkc2VsZiIgPX4gLzoqKFtePV0qKS87CiAgICAgICRvbGRjbGFz
cyBuZSAkbmV3Y2xhc3Mgb3IgCiEgCWNyb2FrIHFxKENhblwndCBsb2NhdGUgb2JqZWN0IG1ldGhv
ZCAiJG1ldGhvZCIgdmlhIHBhY2thZ2UgIiRvbGRjbGFzcyIpOwogICAgICAKICAgICAgYmxlc3Mg
JHNlbGYsICRuZXdjbGFzczsKICAKLS0tIDEzOSwxNDkgLS0tLQogIAkkbmV3Y2xhc3MgPSBDT1JC
QTo6T1JCaXQ6OmxvYWRfaW50ZXJmYWNlICgkaWZhY2UpOwogICAgICB9CiAgCiEgICAgIGRlZmlu
ZWQgJG5ld2NsYXNzIG9yIGNyb2FrICJDYW4ndCBnZXQgaW50ZXJmYWNlIGluZm9ybWF0aW9uIjsK
ICAKICAgICAgbXkgKCRvbGRjbGFzcykgPSAiJHNlbGYiID1+IC86KihbXj1dKikvOwogICAgICAk
b2xkY2xhc3MgbmUgJG5ld2NsYXNzIG9yIAohIAljcm9hayBxcShDYW4ndCBsb2NhdGUgb2JqZWN0
IG1ldGhvZCAiJG1ldGhvZCIgdmlhIHBhY2thZ2UgIiRvbGRjbGFzcyIpOwogICAgICAKICAgICAg
Ymxlc3MgJHNlbGYsICRuZXdjbGFzczsKICAKZGlmZiAtYyAtciBDT1JCQS1PUkJpdC0wLjQuMy9P
UkJpdC54cyBDT1JCQS1PUkJpdC0wLjQuNC9PUkJpdC54cwoqKiogQ09SQkEtT1JCaXQtMC40LjMv
T1JCaXQueHMJV2VkIE9jdCAyNSAxNjoxNToxNyAyMDAwCi0tLSBDT1JCQS1PUkJpdC0wLjQuNC9P
UkJpdC54cwlUdWUgTWFyIDI2IDE1OjE1OjUyIDIwMDIKKioqKioqKioqKioqKioqCioqKiAxLDMg
KioqKgotLS0gMSw1IC0tLS0KKyAvKiAtKi0gbW9kZTogQzsgYy1maWxlLXN0eWxlOiAiYnNkIiAt
Ki0gKi8KKyAKICAjaW5jbHVkZSA8b3JiL29yYml0Lmg+CiAgI2luY2x1ZGUgImludGVyZmFjZXMu
aCIKICAjaW5jbHVkZSAiZXJyb3JzLmgiCioqKioqKioqKioqKioqKgoqKiogMTMsMTggKioqKgot
LS0gMTUsMjEgLS0tLQogIHR5cGVkZWYgQ09SQkFfT2JqZWN0ICAgICAgICAgICBDT1JCQV9fT2Jq
ZWN0OwogIHR5cGVkZWYgQ09SQkFfVHlwZUNvZGUgICAgICAgICBDT1JCQV9fVHlwZUNvZGU7CiAg
dHlwZWRlZiBPUkJpdF9Sb290T2JqZWN0ICAgICAgIENPUkJBX19PUkJpdF9fUm9vdE9iamVjdDsK
KyB0eXBlZGVmIFBPUkJpdFNvdXJjZSAqICAgICAgICAgQ09SQkFfX09SQml0X19Tb3VyY2U7CiAg
CiAgdHlwZWRlZiBDT1JCQV9sb25nX2xvbmcgICAgIENPUkJBX19Mb25nTG9uZzsKICB0eXBlZGVm
IENPUkJBX3Vuc2lnbmVkX2xvbmdfbG9uZyAgICBDT1JCQV9fVUxvbmdMb25nOwoqKioqKioqKioq
KioqKioKKioqIDQwLDQ1ICoqKioKLS0tIDQzLDIwMCAtLS0tCiAgICAgICAgIENIRUNLX0VYQ0VQ
VElPTihldikgICAgICAgICAgICAgICAgICAgIFwKICAgICB9IEdfU1RNVF9FTkQKICAKKyAjZGVm
aW5lIE5fRUxFTUVOVFMoYXJyKSAoc2l6ZW9mKGFycikgLyBzaXplb2YoKGFycilbMF0pKQorIAor
IC8qIENvbnN0YW50cyB0aGF0IHdlIGRlZmluZSBpbiBDT1JCQTo6T1JCaXQgbmFtZXNwYWNlCisg
ICovCisgI2RlZmluZSBFTEVNRU5UKGZvbykgeyAjZm9vLCBHXyAjIyBmb28gfQorIAorIHN0YXRp
YyBzdHJ1Y3QgeworICAgICBjb25zdCBjaGFyICpuYW1lOworICAgICBpbnQgdmFsdWU7CisgfSBj
b3JiYV9vcmJpdF9jb25zdGFudHNbXSA9IHsKKyAgICAgRUxFTUVOVCAoSU9fSU4pLAorICAgICBF
TEVNRU5UIChJT19PVVQpLAorICAgICBFTEVNRU5UIChJT19QUkkpLAorICAgICBFTEVNRU5UIChJ
T19FUlIpLAorICAgICBFTEVNRU5UIChJT19IVVApLAorICAgICBFTEVNRU5UIChJT19OVkFMKSwK
KyAgICAgRUxFTUVOVCAoUFJJT1JJVFlfSElHSCksCisgICAgIEVMRU1FTlQgKFBSSU9SSVRZX0RF
RkFVTFQpLAorICAgICBFTEVNRU5UIChQUklPUklUWV9ISUdIX0lETEUpLAorICAgICBFTEVNRU5U
IChQUklPUklUWV9ERUZBVUxUX0lETEUpLAorICAgICBFTEVNRU5UIChQUklPUklUWV9MT1cpCisg
fTsKKyAKKyAjdW5kZWYgRUxFTUVOVAorIAorIHN0YXRpYyBBViAqCisgY29sbGVjdF9zb3VyY2Vf
YXJncyAoU1YgKnN2KQorIHsKKyAgICAgaW50IGk7CisgICAgIEFWICpyZXN1bHQgPSBuZXdBVigp
OworIAorICAgICBpZiAoU3ZSVihzdikgJiYgKFN2VFlQRShTdlJWKHN2KSkgPT0gU1Z0X1BWQVYp
KSB7CisgICAgICAgICBBViAqYXYgPSAoQVYqKVN2UlYoc3YpOworICAgICAgICAgZm9yIChpID0g
MDsgaSA8PSBhdl9sZW4oYXYpOyBpKyspCisgCSAgICBhdl9wdXNoKHJlc3VsdCwgbmV3U1Zzdigq
YXZfZmV0Y2goYXYsIGksIDApKSk7CisgICAgIH0gZWxzZSB7CisgCWF2X3B1c2ggKHJlc3VsdCwg
bmV3U1ZzdihzdikpOworICAgICB9CisgCisgICAgIHJldHVybiByZXN1bHQ7CisgfQorIAorIHN0
YXRpYyBnYm9vbGVhbgorIHRpbWVvdXRfaGFuZGxlciAoZ3BvaW50ZXIgZGF0YSkgCisgeworICAg
ICBQT1JCaXRTb3VyY2UgKnNvdXJjZTsKKyAgICAgU1YgKmhhbmRsZXI7CisgICAgIGdib29sZWFu
IHJlc3VsdDsKKyAgICAgaW50IGksIGNvdW50OworICAgICBkU1A7CisgCisgICAgIHNvdXJjZSA9
IGRhdGE7CisgCisgICAgIC8qIFdlIGtlZXAgYSByZWZlcmVuY2Ugb24gc291cmNlLT5hcmdzIHdo
aWxlIGludm9raW5nIHRoZSBjYWxsYmFjaworICAgICAgKiB0byBoYW5kbGUgdGhlIGNhc2Ugd2hl
cmUgd2Ugc291cmNlLT5kZXN0cm95KCkgaXMgY2FsbGVkCisgICAgICAqIGR1cmluZyBpbnZva2F0
aW9uCisgICAgICAqLworICAgICBTdlJFRkNOVF9pbmMgKChTViAqKSBzb3VyY2UtPmFyZ3MpOwor
IAorICAgICBoYW5kbGVyID0gKmF2X2ZldGNoKHNvdXJjZS0+YXJncywgMCwgMCk7CisgCisgICAg
IEVOVEVSOworICAgICBTQVZFVE1QUzsKKyAgICAgICAgICAKKyAgICAgUFVTSE1BUksoc3ApOwor
ICAgICBmb3IgKGk9MTtpPD1hdl9sZW4oc291cmNlLT5hcmdzKTtpKyspCisgCVhQVVNIcyhzdl8y
bW9ydGFsKG5ld1NWc3YoKmF2X2ZldGNoKHNvdXJjZS0+YXJncywgaSwgMCkpKSk7CisgICAgIFBV
VEJBQ0s7CisgCisgICAgIGNvdW50ID0gcGVybF9jYWxsX3N2KGhhbmRsZXIsIEdfU0NBTEFSKTsK
KyAgICAgICAgIAorICAgICBTUEFHQUlOOworIAorICAgICBpZiAoY291bnQgIT0gMSkgeworIAl3
YXJuICgiaGFuZGxlciByZXR1cm5lZCAlZCBpdGVtcyIsIGNvdW50KTsKKyAJd2hpbGUgKGNvdW50
LS0pCisgCSAgICAodm9pZClQT1BzOworIAkKKyAJcmV0dXJuIEZBTFNFOworICAgICB9CisgCisg
ICAgIHJlc3VsdCA9IFN2VFJVRSgqc3ApOworICAgICBQT1BzOworIAorICAgICBQVVRCQUNLOwor
ICAgICAgICAgCisgICAgIEZSRUVUTVBTOworICAgICBMRUFWRTsKKyAKKyAgICAgU3ZSRUZDTlRf
ZGVjICgoU1YgKikgc291cmNlLT5hcmdzKTsKKyAKKyAgICAgcmV0dXJuIHJlc3VsdDsKKyB9Cisg
Cisgc3RhdGljIGdib29sZWFuCisgaW9fd2F0Y2hfaGFuZGxlciAoR0lPQ2hhbm5lbCAgICpjaGFu
bmVsLAorIAkJICBHSU9Db25kaXRpb24gIGNvbmRpdGlvbiwKKyAJCSAgZ3BvaW50ZXIgICAgICBk
YXRhKQorIHsKKyAgICAgUE9SQml0U291cmNlICpzb3VyY2U7CisgICAgIFNWICpoYW5kbGVyOwor
ICAgICBnYm9vbGVhbiByZXN1bHQ7CisgICAgIGludCBpLCBjb3VudDsKKyAgICAgZFNQOworIAor
ICAgICBzb3VyY2UgPSBkYXRhOworIAorICAgICAvKiBXZSBrZWVwIGEgcmVmZXJlbmNlIG9uIHNv
dXJjZS0+YXJncyB3aGlsZSBpbnZva2luZyB0aGUgY2FsbGJhY2sKKyAgICAgICogdG8gaGFuZGxl
IHRoZSBjYXNlIHdoZXJlIHdlIHNvdXJjZS0+ZGVzdHJveSgpIGlzIGNhbGxlZAorICAgICAgKiBk
dXJpbmcgaW52b2thdGlvbgorICAgICAgKi8KKyAgICAgU3ZSRUZDTlRfaW5jICgoU1YgKikgc291
cmNlLT5hcmdzKTsKKyAKKyAgICAgaGFuZGxlciA9ICphdl9mZXRjaChzb3VyY2UtPmFyZ3MsIDAs
IDApOworIAorICAgICBFTlRFUjsKKyAgICAgU0FWRVRNUFM7CisgICAgICAgICAgCisgICAgIFBV
U0hNQVJLKHNwKTsKKyAgICAgZm9yIChpPTE7aTw9YXZfbGVuKHNvdXJjZS0+YXJncyk7aSsrKQor
IAlYUFVTSHMoc3ZfMm1vcnRhbChuZXdTVnN2KCphdl9mZXRjaChzb3VyY2UtPmFyZ3MsIGksIDAp
KSkpOworICAgICBQVVRCQUNLOworICAgICAKKyAgICAgWFBVU0hzKHN2XzJtb3J0YWwobmV3U1Zp
dihnX2lvX2NoYW5uZWxfdW5peF9nZXRfZmQgKGNoYW5uZWwpKSkpOworICAgICBYUFVTSHMoc3Zf
Mm1vcnRhbChuZXdTVml2KGNvbmRpdGlvbikpKTsKKyAKKyAgICAgY291bnQgPSBwZXJsX2NhbGxf
c3YoaGFuZGxlciwgR19TQ0FMQVIpOworICAgICAgICAgCisgICAgIFNQQUdBSU47CisgCisgICAg
IGlmIChjb3VudCAhPSAxKSB7CisgCXdhcm4gKCJoYW5kbGVyIHJldHVybmVkICVkIGl0ZW1zIiwg
Y291bnQpOworIAl3aGlsZSAoY291bnQtLSkKKyAJICAgICh2b2lkKVBPUHM7CisgCQorIAlyZXR1
cm4gRkFMU0U7CisgICAgIH0KKyAKKyAgICAgcmVzdWx0ID0gU3ZUUlVFKCpzcCk7CisgICAgICh2
b2lkKVBPUHM7CisgCisgICAgIFBVVEJBQ0s7CisgICAgICAgICAKKyAgICAgRlJFRVRNUFM7Cisg
ICAgIExFQVZFOworIAorICAgICBTdlJFRkNOVF9kZWMgKChTViAqKSBzb3VyY2UtPmFyZ3MpOwor
IAorICAgICByZXR1cm4gcmVzdWx0OworIH0KKyAKKyAKICAvKioqIEdMT0JBTFMgKioqKi8KICBD
T1JCQV9PUkIgcG9yYml0X29yYjsKICAKKioqKioqKioqKioqKioqCioqKiA0OCw1NCAqKioqCiAg
ICovCiAgc3RhdGljIEdTTGlzdCAqbWFpbl9sb29wczsKICAKISBDT1JCQV9Qb2xpY3kKICBtYWtl
X3BvbGljeSAoUG9ydGFibGVTZXJ2ZXJfUE9BIHBvYSwgY2hhciAqa2V5LCBjaGFyICp2YWx1ZSwg
Q09SQkFfRW52aXJvbm1lbnQgKmV2KQogIHsKICAgIHN3aXRjaCAoa2V5WzBdKQotLS0gMjAzLDIw
OSAtLS0tCiAgICovCiAgc3RhdGljIEdTTGlzdCAqbWFpbl9sb29wczsKICAKISBzdGF0aWMgQ09S
QkFfUG9saWN5CiAgbWFrZV9wb2xpY3kgKFBvcnRhYmxlU2VydmVyX1BPQSBwb2EsIGNoYXIgKmtl
eSwgY2hhciAqdmFsdWUsIENPUkJBX0Vudmlyb25tZW50ICpldikKICB7CiAgICBzd2l0Y2ggKGtl
eVswXSkKKioqKioqKioqKioqKioqCioqKiAxODcsMTkzICoqKioKICAKICBDT1JCQTo6T2JqZWN0
CiAgX2dldF9pbnRlcmZhY2UgKHNlbGYpCiEgICAgIENPUkJBOjpPYmplY3Qgc2VsZjsKICAgICAg
Q09ERToKICAgICAgewogIAlERUZJTkVfRVhDRVBUSU9OIChldik7Ci0tLSAzNDIsMzQ4IC0tLS0K
ICAKICBDT1JCQTo6T2JqZWN0CiAgX2dldF9pbnRlcmZhY2UgKHNlbGYpCiEgICAgIENPUkJBOjpP
YmplY3Qgc2VsZgogICAgICBDT0RFOgogICAgICB7CiAgCURFRklORV9FWENFUFRJT04gKGV2KTsK
KioqKioqKioqKioqKioqCioqKiAyMDYsMjExICoqKioKLS0tIDM2MSwzODcgLS0tLQogICAgICBS
RVRWQUwKICAKICB2b2lkCisgX25hcnJvdyAoc2VsZiwgcmVwb2lkKQorICAgICBDT1JCQTo6T2Jq
ZWN0IHNlbGY7CisgICAgIGNoYXIgKiByZXBvaWQ7CisgICAgIENPREU6CisgICAgIGdfZnJlZShz
ZWxmLT5vYmplY3RfaWQpOworICAgICBzZWxmLT5vYmplY3RfaWQgPSBnX3N0cmR1cChyZXBvaWQp
OworIAorIFNWICoKKyBfaXNfYSAoc2VsZiwgcmVwb2lkKQorICAgICBDT1JCQTo6T2JqZWN0IHNl
bGY7CisgICAgIGNoYXIgKiByZXBvaWQ7CisgICAgIENPREU6CisgICAgIHsKKyAJREVGSU5FX0VY
Q0VQVElPTiAoZXYpOworIAlSRVRWQUwgPSBDT1JCQV9PYmplY3RfaXNfYSAoc2VsZiwgcmVwb2lk
LCAmZXYpID8gJlBMX3N2X3llcyA6ICZQTF9zdl9ubzsKKyAJQ0hFQ0tfRVhDRVBUSU9OIChldik7
CisgICAgIH0KKyAgICAgT1VUUFVUOgorICAgICBSRVRWQUwKKyAKKyB2b2lkCiAgREVTVFJPWSAo
c2VsZikKICAgICAgQ09SQkE6Ok9iamVjdCBzZWxmCiAgICAgIENPREU6CioqKioqKioqKioqKioq
KgoqKiogMjI4LDIzMyAqKioqCi0tLSA0MDQsNDM0IC0tLS0KICAgICAgUkVUVkFMCiAgCiAgU1Yg
KgorIGxpc3RfaW5pdGlhbF9zZXJ2aWNlcyAoc2VsZikKKyAgICAgQ09SQkE6Ok9SQiBzZWxmCisg
ICAgIENPREU6CisgICAgIHsKKyAgICAgICAgIENPUkJBX09SQl9PYmplY3RJZExpc3QgKnNlcnZp
Y2VzOworIAlBViAqYXY7CisgICAgICAgICBpbnQgaSwgbnNlcnZpY2VzOworIAorICAgICAgICAg
REVGSU5FX0VYQ0VQVElPTiAoZXYpOworICAgICAgICAgc2VydmljZXMgPSBDT1JCQV9PUkJfbGlz
dF9pbml0aWFsX3NlcnZpY2VzIChzZWxmLCAmZXYpOworICAgICAgICAgQ0hFQ0tfRVhDRVBUSU9O
IChldik7CisgCisgCWF2ID0gbmV3QVYoKTsKKyAJYXZfZXh0ZW5kKGF2LCBzZXJ2aWNlcy0+X2xl
bmd0aCk7CisgCVJFVFZBTCA9IG5ld1JWX25vaW5jKChTViAqKWF2KTsKKyAKKyAJZm9yIChpID0g
MDsgaSA8IHNlcnZpY2VzLT5fbGVuZ3RoOyBpKyspCisgICAgICAgICAgICAgYXZfc3RvcmUoYXYs
IGksIG5ld1NWcHYoc2VydmljZXMtPl9idWZmZXJbaV0sMCkpOworIAorIAlDT1JCQV9mcmVlKHNl
cnZpY2VzKTsKKyAgICAgfQorICAgICBPVVRQVVQ6CisgICAgIFJFVFZBTAorIAorIFNWICoKICBy
ZXNvbHZlX2luaXRpYWxfcmVmZXJlbmNlcyAoc2VsZiwgc3RyKQogICAgICBDT1JCQTo6T1JCIHNl
bGYKICAgICAgQ09SQkFfY2hhciAqc3RyCioqKioqKioqKioqKioqKgoqKiogMjcwLDI4MCAqKioq
CiAgICAgIFJFVFZBTAogIAogIHZvaWQKISBsb2FkX2lkbF9maWxlIChzZWxmLCBmaWxlbmFtZSkK
ICAgICAgQ09SQkE6Ok9SQiBzZWxmCiAgICAgIGNoYXIgKiAgICAgZmlsZW5hbWUKICAgICAgQ09E
RToKISAgICAgcG9yYml0X3BhcnNlX2lkbF9maWxlIChmaWxlbmFtZSk7CiAgCiAgdm9pZAogIHBy
ZWxvYWQgKHNlbGYsIGlkKQotLS0gNDcxLDQ4MiAtLS0tCiAgICAgIFJFVFZBTAogIAogIHZvaWQK
ISBsb2FkX2lkbF9maWxlIChzZWxmLCBmaWxlbmFtZSwgaW5jbHVkZXM9IiIpCiAgICAgIENPUkJB
OjpPUkIgc2VsZgogICAgICBjaGFyICogICAgIGZpbGVuYW1lCisgICAgIGNoYXIgKiAgICAgaW5j
bHVkZXMKICAgICAgQ09ERToKISAgICAgcG9yYml0X3BhcnNlX2lkbF9maWxlIChmaWxlbmFtZSwg
aW5jbHVkZXMpOwogIAogIHZvaWQKICBwcmVsb2FkIChzZWxmLCBpZCkKKioqKioqKioqKioqKioq
CioqKiAzMzYsMzQxICoqKioKLS0tIDUzOCw2OTIgLS0tLQogICAgICB9IGVsc2UgewogICAgICAg
ICAgY3JvYWsoIkNPUkJBOjpzaHV0ZG93bjogTm8gbWFpbiBsb29wIGFjdGl2ZSEiKTsKICAgICAg
fQorIAorIENPUkJBOjpPUkJpdDo6U291cmNlCisgYWRkX3RpbWVvdXQgKHNlbGYsIC4uLikKKyAg
ICAgQ09SQkE6Ok9SQiBzZWxmCisgICAgIENPREU6CisgICAgIHsKKyAJaW50IGk7CisgCUFWICph
cmdzID0gTlVMTDsKKyAJZ2ludCBpbnRlcnZhbCA9IC0xOworIAlnaW50IHByaW9yaXR5ID0gR19Q
UklPUklUWV9ERUZBVUxUOworIAkKKyAJaWYgKGl0ZW1zICUgMiAhPSAxKQorIAkgICAgY3JvYWsg
KCJDT1JCQTo6T1JCaXQ6OmFkZF90aW1lb3V0OiB0aGUgbnVtYmVyIG9mIGFyZ3MgbXVzdCBiZSBl
dmVudCIpOworIAkKKyAJZm9yIChpID0gMTsgaSA8IGl0ZW1zOyBpKyspIHsKKyAJICAgIGNvbnN0
IGNoYXIgKm5hbWUgPSBTdlBWKFNUKGkpLCBQTF9uYSk7CisgCSAgICBnYm9vbGVhbiBmb3VuZCA9
IEZBTFNFOworIAkgICAgCisgCSAgICBzd2l0Y2ggKG5hbWVbMF0pIHsKKyAJICAgIGNhc2UgJ2Mn
OgorIAkJaWYgKHN0cmNtcCAobmFtZSwgImNiIikgPT0gMCkgeworIAkJICAgIGZvdW5kID0gVFJV
RTsKKyAJCSAgICBpKys7CisgCQkgICAgYXJncyA9IGNvbGxlY3Rfc291cmNlX2FyZ3MgKFNUKGkp
KTsKKyAJCX0KKyAJCWJyZWFrOworIAkgICAgY2FzZSAncCc6CisgCQlpZiAoc3RyY21wIChuYW1l
LCAicHJpb3JpdHkiKSA9PSAwKSB7CisgCQkgICAgZm91bmQgPSBUUlVFOworIAkJICAgIGkrKzsK
KyAJCSAgICBwcmlvcml0eSA9IFN2SVYgKFNUKGkpKTsKKyAJCX0KKyAJCWJyZWFrOworIAkgICAg
Y2FzZSAndCc6CisgCQlpZiAoc3RyY21wIChuYW1lLCAidGltZW91dCIpID09IDApIHsKKyAJCSAg
ICBmb3VuZCA9IFRSVUU7CisgCQkgICAgaSsrOworIAkJICAgIGludGVydmFsID0gU3ZJViAoU1Qo
aSkpOworIAkJfQorIAkJYnJlYWs7CisgCSAgICB9CisgCisgCSAgICBpZiAoIWZvdW5kKSB7Cisg
CQlpZiAoYXJncykKKyAJCSAgICBhdl91bmRlZiAoYXJncyk7CisgCQljcm9hayAoIkNPUkJBOjpP
UkJpdDo6YWRkX3RpbWVvdXQ6IHVua25vd24ga2V5ICclcyciLCBuYW1lKTsKKyAJICAgIH0KKyAJ
fQorIAorIAlpZiAoIWFyZ3MpIHsKKyAJICAgIGNyb2FrICgiQ09SQkE6Ok9SQml0OjphZGRfdGlt
ZW91dDogYSBjYWxsYmFjayBtdXN0IGJlIHByb3ZpZGVkIik7CisgCX0KKyAJCisgCWlmIChpbnRl
cnZhbCA8IDApIHsKKyAJICAgIGF2X3VuZGVmIChhcmdzKTsKKyAJICAgIGNyb2FrICgiQ09SQkE6
Ok9SQml0OjphZGRfdGltZW91dDogYSBub24tbmVnYXRpdmUgdGltZW91dCBtdXN0IGJlIHByb3Zp
ZGVkIik7CisgCX0KKyAJCisgCVJFVFZBTCA9IHBvcmJpdF9zb3VyY2VfbmV3ICgpOworIAlSRVRW
QUwtPmFyZ3MgPSBhcmdzOworIAlSRVRWQUwtPmlkID0gZ190aW1lb3V0X2FkZF9mdWxsIChwcmlv
cml0eSwgaW50ZXJ2YWwsIHRpbWVvdXRfaGFuZGxlciwKKyAJCQkJCSBSRVRWQUwsIChHRGVzdHJv
eU5vdGlmeSlwb3JiaXRfc291cmNlX2Rlc3Ryb3llZCk7CisgCXBvcmJpdF9zb3VyY2VfcmVmIChS
RVRWQUwpOworICAgICB9CisgICAgIE9VVFBVVDoKKyAgICAgUkVUVkFMCisgICAgIAorIENPUkJB
OjpPUkJpdDo6U291cmNlCisgYWRkX2lvX3dhdGNoIChzZWxmLCAuLi4pCisgICAgIENPUkJBOjpP
UkIgc2VsZgorICAgICBDT0RFOgorICAgICB7CisgCWludCBpOworIAlBViAqYXJncyA9IE5VTEw7
CisgCWdpbnQgZmQgPSAtMTsKKyAJZ2ludCBjb25kaXRpb24gPSAwOworIAlnaW50IHByaW9yaXR5
ID0gR19QUklPUklUWV9ERUZBVUxUOworIAlHSU9DaGFubmVsICpjaGFubmVsOworIAkKKyAJaWYg
KGl0ZW1zICUgMiAhPSAxKSB7CisgCSAgICBjcm9hayAoIkNPUkJBOjpPUkJpdDo6YWRkX2lvX3dh
dGNoOiB0aGUgbnVtYmVyIG9mIGFyZ3MgbXVzdCBiZSBldmVudCIpOworIAl9CisgCQorIAlmb3Ig
KGkgPSAxOyBpIDwgaXRlbXM7IGkrKykgeworIAkgICAgY29uc3QgY2hhciAqbmFtZSA9IFN2UFYo
U1QoaSksIFBMX25hKTsKKyAJICAgIGdib29sZWFuIGZvdW5kID0gRkFMU0U7CisgCSAgICAKKyAJ
ICAgIHN3aXRjaCAobmFtZVswXSkgeworIAkgICAgY2FzZSAnYyc6CisgCQlpZiAoc3RyY21wIChu
YW1lLCAiY2IiKSA9PSAwKSB7CisgCQkgICAgZm91bmQgPSBUUlVFOworIAkJICAgIGkrKzsKKyAJ
CSAgICBhcmdzID0gY29sbGVjdF9zb3VyY2VfYXJncyAoU1QoaSkpOworIAkJfSBlbHNlIGlmIChz
dHJjbXAgKG5hbWUsICJjb25kaXRpb24iKSA9PSAwKSB7CisgCQkgICAgZm91bmQgPSBUUlVFOwor
IAkJICAgIGkrKzsKKyAJCSAgICBjb25kaXRpb24gPSBTdlVWIChTVChpKSk7CisgCQl9CisgCQli
cmVhazsKKyAJICAgIGNhc2UgJ2YnOgorIAkJaWYgKHN0cmNtcCAobmFtZSwgImZkIikgPT0gMCkg
eworIAkJICAgIGZvdW5kID0gVFJVRTsKKyAJCSAgICBpKys7CisgCQkgICAgZmQgPSBTdklWIChT
VChpKSk7CisgCQl9CisgCQlicmVhazsKKyAJICAgIGNhc2UgJ3AnOgorIAkJaWYgKHN0cmNtcCAo
bmFtZSwgInByaW9yaXR5IikgPT0gMCkgeworIAkJICAgIGZvdW5kID0gVFJVRTsKKyAJCSAgICBp
Kys7CisgCQkgICAgcHJpb3JpdHkgPSBTdklWIChTVChpKSk7CisgCQl9CisgCQlicmVhazsKKyAJ
ICAgIH0KKyAKKyAJICAgIGlmICghZm91bmQpIHsKKyAJCWlmIChhcmdzKQorIAkJICAgIGF2X3Vu
ZGVmIChhcmdzKTsKKyAJCWNyb2FrICgiQ09SQkE6Ok9SQml0OjphZGRfaW9fd2F0Y2g6IHVua25v
d24ga2V5ICclcyciLCBuYW1lKTsKKyAJICAgIH0KKyAJfQorIAorIAlpZiAoIWFyZ3MpIHsKKyAJ
ICAgIGNyb2FrICgiQ09SQkE6Ok9SQml0OjphZGRfaW9fd2F0Y2g6IGEgY2FsbGJhY2sgbXVzdCBi
ZSBwcm92aWRlZCIpOworIAl9CisgCQorIAlpZiAoZmQgPCAwKSB7CisgCSAgICBhdl91bmRlZiAo
YXJncyk7CisgCSAgICBjcm9hayAoIkNPUkJBOjpPUkJpdDo6aW9fd2F0Y2g6IGEgbm9uLW5lZ2F0
aXZlIGZkIG11c3QgYmUgcHJvdmlkZWQiKTsKKyAJfQorIAorIAlpZiAoY29uZGl0aW9uID09IDAp
IHsKKyAJICAgIGF2X3VuZGVmIChhcmdzKTsKKyAJICAgIGNyb2FrICgiQ09SQkE6Ok9SQml0Ojpp
b193YXRjaDogYSBub24tbmVnYXRpdmUgZmQgbXVzdCBiZSBwcm92aWRlZCIpOworIAl9CisgCisg
CVJFVFZBTCA9IHBvcmJpdF9zb3VyY2VfbmV3ICgpOworIAlSRVRWQUwtPmFyZ3MgPSBhcmdzOwor
IAorIAljaGFubmVsID0gZ19pb19jaGFubmVsX3VuaXhfbmV3IChmZCk7CisgCVJFVFZBTC0+aWQg
PSBnX2lvX2FkZF93YXRjaF9mdWxsIChjaGFubmVsLCBwcmlvcml0eSwgY29uZGl0aW9uLAorIAkJ
CQkJICBpb193YXRjaF9oYW5kbGVyLAorIAkJCQkJICBSRVRWQUwsIChHRGVzdHJveU5vdGlmeSlw
b3JiaXRfc291cmNlX2Rlc3Ryb3llZCk7CisgCWdfaW9fY2hhbm5lbF91bnJlZiAoY2hhbm5lbCk7
CisgCisgCXBvcmJpdF9zb3VyY2VfcmVmIChSRVRWQUwpOworICAgICB9CisgICAgIE9VVFBVVDoK
KyAgICAgUkVUVkFMCiAgICAgIAogIE1PRFVMRSA9IENPUkJBOjpPUkJpdCAgICAgICAgICAgIFBB
Q0tBR0UgPSBDT1JCQTo6TG9uZ0xvbmcKICAKKioqKioqKioqKioqKioqCioqKiAzNDMsMzQ5ICoq
KioKICBuZXcgKENsYXNzLCBzdHIpCiAgICAgIGNoYXIgKnN0cgogICAgICBDT0RFOgohICAgICBS
RVRWQUwgPSBsb25nbG9uZ19mcm9tX3N0cmluZyAoc3RyKTsKICAgICAgT1VUUFVUOgogICAgICBS
RVRWQUwKICAKLS0tIDY5NCw3MDAgLS0tLQogIG5ldyAoQ2xhc3MsIHN0cikKICAgICAgY2hhciAq
c3RyCiAgICAgIENPREU6CiEgICAgIFJFVFZBTCA9IHBvcmJpdF9sb25nbG9uZ19mcm9tX3N0cmlu
ZyAoc3RyKTsKICAgICAgT1VUUFVUOgogICAgICBSRVRWQUwKICAKKioqKioqKioqKioqKioqCioq
KiAzNTIsMzU4ICoqKioKICAgICAgQ09SQkE6OkxvbmdMb25nIHNlbGYKICAgICAgQ09ERToKICAg
ICAgewohIAljaGFyICpyZXN1bHQgPSBsb25nbG9uZ190b19zdHJpbmcgKHNlbGYpOwogICAgICAg
ICAgUkVUVkFMID0gbmV3U1ZwdiAocmVzdWx0LCAwKTsKICAJU2FmZWZyZWUgKHJlc3VsdCk7CiAg
ICAgIH0KLS0tIDcwMyw3MDkgLS0tLQogICAgICBDT1JCQTo6TG9uZ0xvbmcgc2VsZgogICAgICBD
T0RFOgogICAgICB7CiEgCWNoYXIgKnJlc3VsdCA9IHBvcmJpdF9sb25nbG9uZ190b19zdHJpbmcg
KHNlbGYpOwogICAgICAgICAgUkVUVkFMID0gbmV3U1ZwdiAocmVzdWx0LCAwKTsKICAJU2FmZWZy
ZWUgKHJlc3VsdCk7CiAgICAgIH0KKioqKioqKioqKioqKioqCioqKiA0NTEsNDU3ICoqKioKICBu
ZXcgKENsYXNzLCBzdHIpCiAgICAgIGNoYXIgKnN0cgogICAgICBDT0RFOgohICAgICBSRVRWQUwg
PSB1bG9uZ2xvbmdfZnJvbV9zdHJpbmcgKHN0cik7CiAgICAgIE9VVFBVVDoKICAgICAgUkVUVkFM
CiAgCi0tLSA4MDIsODA4IC0tLS0KICBuZXcgKENsYXNzLCBzdHIpCiAgICAgIGNoYXIgKnN0cgog
ICAgICBDT0RFOgohICAgICBSRVRWQUwgPSBwb3JiaXRfdWxvbmdsb25nX2Zyb21fc3RyaW5nIChz
dHIpOwogICAgICBPVVRQVVQ6CiAgICAgIFJFVFZBTAogIAoqKioqKioqKioqKioqKioKKioqIDQ2
MCw0NjYgKioqKgogICAgICBDT1JCQTo6VUxvbmdMb25nIHNlbGYKICAgICAgQ09ERToKICAgICAg
ewohIAljaGFyICpyZXN1bHQgPSB1bG9uZ2xvbmdfdG9fc3RyaW5nIChzZWxmKTsKICAgICAgICAg
IFJFVFZBTCA9IG5ld1NWcHYgKHJlc3VsdCwgMCk7CiAgCVNhZmVmcmVlIChyZXN1bHQpOwogICAg
ICB9Ci0tLSA4MTEsODE3IC0tLS0KICAgICAgQ09SQkE6OlVMb25nTG9uZyBzZWxmCiAgICAgIENP
REU6CiAgICAgIHsKISAJY2hhciAqcmVzdWx0ID0gcG9yYml0X3Vsb25nbG9uZ190b19zdHJpbmcg
KHNlbGYpOwogICAgICAgICAgUkVUVkFMID0gbmV3U1ZwdiAocmVzdWx0LCAwKTsKICAJU2FmZWZy
ZWUgKHJlc3VsdCk7CiAgICAgIH0KKioqKioqKioqKioqKioqCioqKiA1NDMsNTQ5ICoqKioKICBu
ZXcgKENsYXNzLCBzdHIpCiAgICAgIGNoYXIgKnN0cgogICAgICBDT0RFOgohICAgICBSRVRWQUwg
PSBsb25nZG91YmxlX2Zyb21fc3RyaW5nIChzdHIpOwogICAgICBPVVRQVVQ6CiAgICAgIFJFVFZB
TAogIAotLS0gODk0LDkwMCAtLS0tCiAgbmV3IChDbGFzcywgc3RyKQogICAgICBjaGFyICpzdHIK
ICAgICAgQ09ERToKISAgICAgUkVUVkFMID0gcG9yYml0X2xvbmdkb3VibGVfZnJvbV9zdHJpbmcg
KHN0cik7CiAgICAgIE9VVFBVVDoKICAgICAgUkVUVkFMCiAgCioqKioqKioqKioqKioqKgoqKiog
NTUyLDU1OCAqKioqCiAgICAgIENPUkJBOjpMb25nRG91YmxlIHNlbGYKICAgICAgQ09ERToKICAg
ICAgewohIAljaGFyICpyZXN1bHQgPSBsb25nZG91YmxlX3RvX3N0cmluZyAoc2VsZik7CiAgICAg
ICAgICBSRVRWQUwgPSBuZXdTVnB2IChyZXN1bHQsIDApOwogIAlTYWZlZnJlZSAocmVzdWx0KTsK
ICAgICAgfQotLS0gOTAzLDkwOSAtLS0tCiAgICAgIENPUkJBOjpMb25nRG91YmxlIHNlbGYKICAg
ICAgQ09ERToKICAgICAgewohIAljaGFyICpyZXN1bHQgPSBwb3JiaXRfbG9uZ2RvdWJsZV90b19z
dHJpbmcgKHNlbGYpOwogICAgICAgICAgUkVUVkFMID0gbmV3U1ZwdiAocmVzdWx0LCAwKTsKICAJ
U2FmZWZyZWUgKHJlc3VsdCk7CiAgICAgIH0KKioqKioqKioqKioqKioqCioqKiA2NDIsNjQ4ICoq
KioKICAgICAgUkVUVkFMID0gcG9yYml0X2ZpbmRfdHlwZWNvZGUgKGlkKTsKICAgICAgaWYgKCFS
RVRWQUwpCiAgICAgICAgICBjcm9hayAoIkNhbm5vdCBmaW5kIHR5cGVjb2RlIGZvciAnJXMnIiwg
aWQpOwotICAgICBSRVRWQUwgPSAoQ09SQkFfVHlwZUNvZGUpQ09SQkFfT2JqZWN0X2R1cGxpY2F0
ZSAoKENPUkJBX09iamVjdClSRVRWQUwsIE5VTEwpOwogICAgICBPVVRQVVQ6CiAgICAgIFJFVFZB
TAogICAgICAKLS0tIDk5Myw5OTggLS0tLQoqKioqKioqKioqKioqKioKKioqIDcyMCw3MjUgKioq
KgotLS0gMTA3MCwxMDkxIC0tLS0KICAgICAgQ09ERToKICAgICAgQ09SQkFfT2JqZWN0X3JlbGVh
c2UgKChDT1JCQV9PYmplY3Qpc2VsZiwgTlVMTCk7CiAgCisgCisgTU9EVUxFID0gQ09SQkE6Ok9S
Qml0ICAgICAgICAgICAgICAgICAgICBQQUNLQUdFID0gQ09SQkE6Ok9SQml0OjpTb3VyY2UKKyAK
KyB2b2lkCisgREVTVFJPWSAoc2VsZikKKyAgICAgQ09SQkE6Ok9SQml0OjpTb3VyY2Ugc2VsZgor
ICAgICBDT0RFOgorICAgICBwb3JiaXRfc291cmNlX3VucmVmIChzZWxmKTsKKyAKKyB2b2lkCisg
ZGVzdHJveSAoc2VsZikKKyAgICAgQ09SQkE6Ok9SQml0OjpTb3VyY2Ugc2VsZgorICAgICBDT0RF
OgorICAgICBnX3NvdXJjZV9yZW1vdmUgKHNlbGYtPmlkKTsKKyAKKyAKICBNT0RVTEUgPSBDT1JC
QTo6T1JCaXQgICAgICAgICAgICAgICAgICAgIFBBQ0tBR0UgPSBQb3J0YWJsZVNlcnZlcjo6UE9B
CiAgCiAgQ09SQkFfY2hhciAqCioqKioqKioqKioqKioqKgoqKiogODcwLDg3NiAqKioqCiAgICAg
IFJFVFZBTAogIAogIENPUkJBOjpPYmplY3QKISBjcmVhdGVfcmVmZXJlbmNlX29iamVjdF93aXRo
X2lkIChzZWxmLCBwZXJsX2lkLCBpbnRmKQogICAgICBQb3J0YWJsZVNlcnZlcjo6UE9BIHNlbGYK
ICAgICAgU1YgKnBlcmxfaWQKICAgICAgY2hhciAqaW50ZgotLS0gMTIzNiwxMjQyIC0tLS0KICAg
ICAgUkVUVkFMCiAgCiAgQ09SQkE6Ok9iamVjdAohIGNyZWF0ZV9yZWZlcmVuY2Vfd2l0aF9pZCAo
c2VsZiwgcGVybF9pZCwgaW50ZikKICAgICAgUG9ydGFibGVTZXJ2ZXI6OlBPQSBzZWxmCiAgICAg
IFNWICpwZXJsX2lkCiAgICAgIGNoYXIgKmludGYKKioqKioqKioqKioqKioqCioqKiA5NjUsOTcx
ICoqKioKICAgICAgT1VUUFVUOgogICAgICBSRVRWQUwKICAKISBNT0RVTEUgPSBDT1JCQTo6TUlD
TyAgICAgICAgICAgIFBBQ0tBR0UgPSBQb3J0YWJsZVNlcnZlcjo6UE9BTWFuYWdlcgogIAogIHZv
aWQKICBhY3RpdmF0ZSAoc2VsZikKLS0tIDEzMzEsMTMzNyAtLS0tCiAgICAgIE9VVFBVVDoKICAg
ICAgUkVUVkFMCiAgCiEgTU9EVUxFID0gQ09SQkE6Ok9SQml0ICAgICAgICAgICAgUEFDS0FHRSA9
IFBvcnRhYmxlU2VydmVyOjpQT0FNYW5hZ2VyCiAgCiAgdm9pZAogIGFjdGl2YXRlIChzZWxmKQoq
KioqKioqKioqKioqKioKKioqIDEwMTIsMTAxOSAqKioqCi0tLSAxMzc4LDE0MDQgLS0tLQogICAg
ICBPVVRQVVQ6CiAgICAgIFJFVFZBTAogIAorIFNWICoKKyBfaXNfYSAoc2VsZiwgcmVwb2lkKQor
ICAgICBTViAqc2VsZgorICAgICBjaGFyICpyZXBvaWQ7CisgICAgIENPREU6CisgICAgIFJFVFZB
TCA9IG5ld1NWc3YocG9yYml0X3NlcnZhbnRfaXNfYSAoc2VsZiwgcmVwb2lkKSA/ICZQTF9zdl95
ZXMgOiAmUExfc3Zfbm8pOworICAgICBPVVRQVVQ6CisgICAgIFJFVFZBTAorIAogIEJPT1Q6CiAg
ICAgIHBvcmJpdF9pbml0X2V4Y2VwdGlvbnMoKTsKKyAgICAgcG9yYml0X2luaXRfaW50ZXJmYWNl
cygpOwogICAgICBwb3JiaXRfaW5pdF90eXBlY29kZXMoKTsKICAgICAgcG9yYml0X3NldF91c2Vf
Z21haW4oMSk7CiAgCisgICAgIC8qIERlZmluZSBJTyBjb25kaXRpb24gY29uc3RhbnRzICovCisg
ICAgIHsKKyAJSFYgKnN0YXNoID0gZ3Zfc3Rhc2hwdiAoIkNPUkJBOjpPUkJpdCIsIFRSVUUpOwor
IAlpbnQgaTsKKyAJZm9yIChpID0gMDsgaSA8IE5fRUxFTUVOVFMgKGNvcmJhX29yYml0X2NvbnN0
YW50cyk7IGkrKykKKyAJICAgIG5ld0NPTlNUU1VCIChzdGFzaCwKKyAJCQkgKGNoYXIgKiljb3Ji
YV9vcmJpdF9jb25zdGFudHNbaV0ubmFtZSwKKyAJCQkgbmV3U1ZpdigoY2hhciAqKWNvcmJhX29y
Yml0X2NvbnN0YW50c1tpXS52YWx1ZSkpOworICAgICB9CmRpZmYgLWMgLXIgQ09SQkEtT1JCaXQt
MC40LjMvUkVBRE1FIENPUkJBLU9SQml0LTAuNC40L1JFQURNRQoqKiogQ09SQkEtT1JCaXQtMC40
LjMvUkVBRE1FCVdlZCBPY3QgMjUgMTY6NTk6MDcgMjAwMAotLS0gQ09SQkEtT1JCaXQtMC40LjQv
UkVBRE1FCVR1ZSBNYXIgMjYgMTU6MTU6NTIgMjAwMgoqKioqKioqKioqKioqKioKKioqIDEsNCAq
KioqCiEgQ09SQkE6Ok9SQml0IDAuNC4zCiAgPT09PT09PT09PT09PT09PT09CiAgCiAgQ09SQkE6
Ok9SQml0IGlzIGEgUGVybCBiaW5kaW5nIGZvciBPUkJpdC4gSXQgaXMgYmFzZWQKLS0tIDEsNCAt
LS0tCiEgQ09SQkE6Ok9SQml0IDAuNC40CiAgPT09PT09PT09PT09PT09PT09CiAgCiAgQ09SQkE6
Ok9SQml0IGlzIGEgUGVybCBiaW5kaW5nIGZvciBPUkJpdC4gSXQgaXMgYmFzZWQKKioqKioqKioq
KioqKioqCioqKiAzNyw0NyAqKioqCiAgCiAgVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIE9SQml0IGlz
IGF2YWlsYWJsZSBmcm9tOgogICAgIAohICAgIGZ0cDovL2Z0cC5nbm9tZS5vcmcvcHViL0dOT01F
L3NvdXJjZXMvT1JCaXQvCiEgCiEgUlBNJ3MgZm9yIHJlZGhhdCA2LjAgYW5kIDYuMSBhcmUgYXZh
aWxhYmxlIGZyb206CiEgCiEgICAgZnRwOi8vZnRwLmdub21lLm9yZy9wdWIvR05PTUUvZ25vbWUt
MS4wLjUzL3JlZGhhdC8KICAKICBZb3UnbGwgYWxzbyBuZWVkIEdyYWhhbSBCYXJyJ3MgRXJyb3Ig
bW9kdWxlIC0gYXZhaWxhYmxlCiAgZnJvbSBDUEFOIGluIHRoZSBkaXJlY3Rvcnk6Ci0tLSAzNyw0
MyAtLS0tCiAgCiAgVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIE9SQml0IGlzIGF2YWlsYWJsZSBmcm9t
OgogICAgIAohICAgIGZ0cDovL2Z0cC5nbm9tZS5vcmcvcHViL0dOT01FL3N0YWJsZS9zb3VyY2Vz
L09SQml0LwogIAogIFlvdSdsbCBhbHNvIG5lZWQgR3JhaGFtIEJhcnIncyBFcnJvciBtb2R1bGUg
LSBhdmFpbGFibGUKICBmcm9tIENQQU4gaW4gdGhlIGRpcmVjdG9yeToKKioqKioqKioqKioqKioq
CioqKiA3OSw4OCAqKioqCiAgWW91IHNob3VsZCBzZWUgb3V0cHV0IHRoYXQgbG9va3Mgc29tZXRo
aW5nIGxpa2U6CiAgCiAgLS0tLS0tLS0tLQohIFVzaW5nIC9ob21lL290YXlsb3Ivd29yay9vcmJp
dC1wZXJsL2JsaWIKISBPb3BzLiBJIGRvbid0IGhhdmUgdGhhdCBtdWNoIG1vbmV5CiEgICAgIChJ
IG5lZWQgKzk5MDgzLjM1IG1vcmUpCiEgQmFsYW5jZSBpcyArOTE2LjY1CiAgRmF2b3JpdGUgY29s
b3IgaXMgY2hhcnRyZXVzZQogIExvdHRlcnkgbnVtYmVycyBhcmUgMSAyIDMgNAogIE5pY2tuYW1l
IGlzIEdydW1weQotLS0gNzUsODIgLS0tLQogIFlvdSBzaG91bGQgc2VlIG91dHB1dCB0aGF0IGxv
b2tzIHNvbWV0aGluZyBsaWtlOgogIAogIC0tLS0tLS0tLS0KISBVc2luZyAvaG9tZS9vdGF5bG9y
L2RldmVsL29yYml0LXBlcmwvYmxpYgohIEJhbGFuY2UgaXMgKzEwOTkuOTgKICBGYXZvcml0ZSBj
b2xvciBpcyBjaGFydHJldXNlCiAgTG90dGVyeSBudW1iZXJzIGFyZSAxIDIgMyA0CiAgTmlja25h
bWUgaXMgR3J1bXB5CioqKioqKioqKioqKioqKgoqKiogOTUsMTAyICoqKioKICBGYXZvcml0ZSBj
b2xvciBpcyBub3cgY2hhcnRyZXVzZQogIEFzIGFuIGFueTogZmF2b3JpdGUgY29sb3IgaXMgbm93
IGNoYXJ0cmV1c2UKICBBcyBhbiBhbnk6IG5pY2tuYW1lIGlzIG5vdyBHcnVtcHkKISAyICogMSww
MDAsMDAwLDAwMCwwMDAwIHBlbm5pZXMgPSAyMDAwMDAwMDAwMDAwMCBwZW5uaWVzCiAgV2l0aGRy
YXdpbmcgJDEwMCwwMDAKICAxIDIgMyA0IDUgNiA3IDggOSAxMAogIENhdWdodCBFeGNlcHRpb246
IENPUkJBOjpPQkpFQ1RfTk9UX0VYSVNUICgnSURMOm9tZy5vcmcvQ09SQkEvT0JKRUNUX05PVF9F
WElTVDoxLjAnKQogICAgICAoMCwgQ09NUExFVEVEX05PKQotLS0gODksOTggLS0tLQogIEZhdm9y
aXRlIGNvbG9yIGlzIG5vdyBjaGFydHJldXNlCiAgQXMgYW4gYW55OiBmYXZvcml0ZSBjb2xvciBp
cyBub3cgY2hhcnRyZXVzZQogIEFzIGFuIGFueTogbmlja25hbWUgaXMgbm93IEdydW1weQohIDIg
KiAxLDAwMCwwMDAsMDAwLDAwMCBwZW5uaWVzID0gMiwwMDAsMDAwLDAwMCwwMDAgcGVubmllcwog
IFdpdGhkcmF3aW5nICQxMDAsMDAwCisgT29wcy4gSSBkb24ndCBoYXZlIHRoYXQgbXVjaCBtb25l
eQorICAgICAoSSBuZWVkICs5ODkwMC4wMiBtb3JlKQogIDEgMiAzIDQgNSA2IDcgOCA5IDEwCiAg
Q2F1Z2h0IEV4Y2VwdGlvbjogQ09SQkE6Ok9CSkVDVF9OT1RfRVhJU1QgKCdJREw6b21nLm9yZy9D
T1JCQS9PQkpFQ1RfTk9UX0VYSVNUOjEuMCcpCiAgICAgICgwLCBDT01QTEVURURfTk8pCmRpZmYg
LWMgLXIgQ09SQkEtT1JCaXQtMC40LjMvY2xpZW50IENPUkJBLU9SQml0LTAuNC40L2NsaWVudAoq
KiogQ09SQkEtT1JCaXQtMC40LjMvY2xpZW50CVN1biBPY3QgMTUgMjI6NDg6NDggMjAwMAotLS0g
Q09SQkEtT1JCaXQtMC40LjQvY2xpZW50CVR1ZSBNYXIgMjYgMTU6MTU6NTIgMjAwMgoqKioqKioq
KioqKioqKioKKioqIDIyLDI3ICoqKioKLS0tIDIyLDMxIC0tLS0KICAKICBteSAkYWNjb3VudCA9
ICRvcmItPnN0cmluZ190b19vYmplY3QoJGlvcik7CiAgCisgaWYgKCEkYWNjb3VudC0+X2lzX2Eg
KCJJREw6QWNjb3VudC9CYXNlQWNjb3VudDoxLjAiKSkgeworICAgICBkaWUgKCJBY2NvdW50IGlz
bid0IGEgQmFzZUFjY291bnQhIik7CisgfQorIAogIGZvciAobXkgJGk9MDskaTwwOyRpKyspIHsK
ICAgICAgJGFjY291bnQtPmRlcG9zaXQoIDEgKTsKICB9CioqKioqKioqKioqKioqKgoqKiogNjMs
NzEgKioqKgogIHByaW50ICJBcyBhbiBhbnk6IG5pY2tuYW1lIGlzIG5vdyAiLAogICAgICAgICAg
ICAkYWNjb3VudC0+Z2V0X3ByZWZfYW55KCdwdF9uaWNrbmFtZScpLT52YWx1ZSwiXG4iOwogIAoh
IHByaW50ICIyICogMSwwMDAsMDAwLDAwMCwwMDAwIHBlbm5pZXMgPSAiLCAKISAgICAgJGFjY291
bnQtPmFkZCAoJzEgMDAwIDAwMCAwMDAgMDAwJywgJzEgMDAwIDAwMCAwMDAgMDAwJyksCiEgICAg
ICIgcGVubmllc1xuIjsKICAKICBwcmludCAiV2l0aGRyYXdpbmcgXCQxMDAsMDAwXG4iOwogIHRy
eSB7Ci0tLSA2Nyw5NCAtLS0tCiAgcHJpbnQgIkFzIGFuIGFueTogbmlja25hbWUgaXMgbm93ICIs
CiAgICAgICAgICAgICRhY2NvdW50LT5nZXRfcHJlZl9hbnkoJ3B0X25pY2tuYW1lJyktPnZhbHVl
LCJcbiI7CiAgCiEgIwohICMgVGVzdCBMb25nTG9uZyBtYXJzaGFsbGluZwohICMKISBzdWIgY29t
bWlmeSAjIEkgZm9yZ2V0IGhvdyB0byBkbyB0aGlzIG1vcmUgZWZmaWNpZW50bHkgYW5kIHNpbXBs
eSA6LSkKISB7CiEgICAgIG15ICRzdHIgPSBzaGlmdDsKISAgICAgJHN0ciA9fiBzLyhcZCkoPz0o
PzpcZFxkXGQpKyg/OiR8XEQpKS8kMSwvZzsKISAgICAgCiEgICAgICRzdHI7CiEgfQohIAohIG15
ICRhbW91bnQgPSAgICAgICAgJzEwMDAwMDAwMDAwMDAnOwohIG15ICRkb3VibGVfYW1vdW50ID0g
JzIwMDAwMDAwMDAwMDAnOwohIAohIG15ICR0ZXN0X2Ftb3VudCA9ICRhY2NvdW50LT5hZGQgKCRh
bW91bnQsICRhbW91bnQpOwohIAohIHByaW50ZiAiMiAqICVzIHBlbm5pZXMgPSAlcyBwZW5uaWVz
XG4iLCAKISAgICAgY29tbWlmeSgkYW1vdW50KSwgY29tbWlmeSgkdGVzdF9hbW91bnQpOwohIAoh
IGlmICgiJHRlc3RfYW1vdW50IiBuZSAiJGRvdWJsZV9hbW91bnQiKSB7CiEgICAgIGRpZSAiSW5j
b3JyZWN0IHJlc3VsdCBmcm9tIGFkZGl0aW9uIGNhbGwhXG4iOwohIH0KICAKICBwcmludCAiV2l0
aGRyYXdpbmcgXCQxMDAsMDAwXG4iOwogIHRyeSB7CioqKioqKioqKioqKioqKgoqKiogNzcsODIg
KioqKgotLS0gMTAwLDEwNiAtLS0tCiAgfTsKICAKICBteSAkY291bnRlciA9ICRhY2NvdW50LT5j
b3VudGVyKCk7CisgJGNvdW50ZXIgPSAkYWNjb3VudC0+ZWNob19vYmplY3QgKCRjb3VudGVyKTsK
ICBwcmludCBqb2luKCIgIiwgbWFwIHsgJGNvdW50ZXItPm5leHQgfSAoMS4uMTApKSwgIlxuIjsK
ICAKICAkY291bnRlci0+ZGVzdHJveSgpOwpkaWZmIC1jIC1yIENPUkJBLU9SQml0LTAuNC4zL2Ns
aWVudC5jIENPUkJBLU9SQml0LTAuNC40L2NsaWVudC5jCioqKiBDT1JCQS1PUkJpdC0wLjQuMy9j
bGllbnQuYwlNb24gSmFuICAzIDA2OjE2OjIwIDIwMDAKLS0tIENPUkJBLU9SQml0LTAuNC40L2Ns
aWVudC5jCVR1ZSBNYXIgMjYgMTU6MTU6NTIgMjAwMgoqKioqKioqKioqKioqKioKKioqIDExLDE2
ICoqKioKLS0tIDExLDIxIC0tLS0KICAgICAgY2hhciBvcG5hbWVbMV07CiAgfSBPcE5hbWVEYXRh
OwogIAorICNkZWZpbmUgSVNfT05FV0FZKGRlc2MsaW5kZXgpICBcCisgICgoKGluZGV4KSA+PSBQ
T1JCSVRfT1BFUkFUSU9OX0JBU0UgJiYgKGluZGV4KSA8IFBPUkJJVF9HRVRURVJfQkFTRSkgJiYg
IFwKKyAgICAoZGVzYyktPm9wZXJhdGlvbnMuX2J1ZmZlclsoaW5kZXgpLVBPUkJJVF9PUEVSQVRJ
T05fQkFTRV0ubW9kZSA9PSBDT1JCQV9PUF9PTkVXQVkpCisgCisgCiAgc3RhdGljIEdQdHJBcnJh
eSAqCiAgZG9fbWFyc2hhbCAoQ1YgKmN2LCBJMzIgYXgsIEkzMiBpdGVtcywKICAJICAgIENPUkJB
X0ludGVyZmFjZURlZl9GdWxsSW50ZXJmYWNlRGVzY3JpcHRpb24gKmRlc2MsIEkzMiBpbmRleCwK
KioqKioqKioqKioqKioqCioqKiA0NCw1MCAqKioqCiAgICAgIG9wZXJhdGlvbl92ZWMuaW92X2xl
biA9IHNpemVvZihDT1JCQV91bnNpZ25lZF9sb25nKSArIG9wZXJhdGlvbl9uYW1lX2RhdGEtPmxl
bjsKICAgICAgCiAgICAgIHNlbmRfYnVmZmVyID0KISAJZ2lvcF9zZW5kX3JlcXVlc3RfYnVmZmVy
X3VzZShjb25uZWN0aW9uLCBOVUxMLCByZXF1ZXN0X2lkLCBDT1JCQV9UUlVFLAogIAkJCQkgICAg
ICYob2JqLT5hY3RpdmVfcHJvZmlsZS0+b2JqZWN0X2tleV92ZWMpLAogIAkJCQkgICAgICZvcGVy
YXRpb25fdmVjLCAmT1JCaXRfZGVmYXVsdF9wcmluY2lwYWxfaW92ZWMpOwogICAgICAKLS0tIDQ5
LDU2IC0tLS0KICAgICAgb3BlcmF0aW9uX3ZlYy5pb3ZfbGVuID0gc2l6ZW9mKENPUkJBX3Vuc2ln
bmVkX2xvbmcpICsgb3BlcmF0aW9uX25hbWVfZGF0YS0+bGVuOwogICAgICAKICAgICAgc2VuZF9i
dWZmZXIgPQohIAlnaW9wX3NlbmRfcmVxdWVzdF9idWZmZXJfdXNlKGNvbm5lY3Rpb24sIE5VTEws
IHJlcXVlc3RfaWQsCiEgCQkJCSAgICAgIUlTX09ORVdBWShkZXNjLGluZGV4KSwKICAJCQkJICAg
ICAmKG9iai0+YWN0aXZlX3Byb2ZpbGUtPm9iamVjdF9rZXlfdmVjKSwKICAJCQkJICAgICAmb3Bl
cmF0aW9uX3ZlYywgJk9SQml0X2RlZmF1bHRfcHJpbmNpcGFsX2lvdmVjKTsKICAgICAgCioqKioq
KioqKioqKioqKgoqKiogMTUyLDE1OCAqKioqCiAgZG9fZGVtYXJzaGFsIChDViAqY3YsIEkzMiBh
eCwgSTMyIGl0ZW1zLAogIAkgICAgICBDT1JCQV9JbnRlcmZhY2VEZWZfRnVsbEludGVyZmFjZURl
c2NyaXB0aW9uICpkZXNjLCBJMzIgaW5kZXgsIAogIAkgICAgICBHUHRyQXJyYXkgKnJldHVybl90
eXBlcywKISAJICAgICAgQ09SQkFfT2JqZWN0IG9iaiwgR0lPUENvbm5lY3Rpb24gKmNvbm5lY3Rp
b24sIEdJT1BfdW5zaWduZWRfbG9uZyByZXF1ZXN0X2lkKQogIHsKICAgICAgR0lPUFJlY3ZCdWZm
ZXIgKnJlY3ZfYnVmZmVyOwogICAgICBTViAqZXJyb3Jfc3YgPSBOVUxMOwotLS0gMTU4LDE2NiAt
LS0tCiAgZG9fZGVtYXJzaGFsIChDViAqY3YsIEkzMiBheCwgSTMyIGl0ZW1zLAogIAkgICAgICBD
T1JCQV9JbnRlcmZhY2VEZWZfRnVsbEludGVyZmFjZURlc2NyaXB0aW9uICpkZXNjLCBJMzIgaW5k
ZXgsIAogIAkgICAgICBHUHRyQXJyYXkgKnJldHVybl90eXBlcywKISAJICAgICAgZ3VpbnQgKnJl
dHVybl9jb3VudCwKISAJICAgICAgQ09SQkFfT2JqZWN0IG9iaiwgR0lPUENvbm5lY3Rpb24gKmNv
bm5lY3Rpb24sCiEgCSAgICAgIEdJT1BfdW5zaWduZWRfbG9uZyByZXF1ZXN0X2lkKQogIHsKICAg
ICAgR0lPUFJlY3ZCdWZmZXIgKnJlY3ZfYnVmZmVyOwogICAgICBTViAqZXJyb3Jfc3YgPSBOVUxM
OwoqKioqKioqKioqKioqKioKKioqIDIzNiwyNDYgKioqKgogIAogIAkvKiBOb3cgd3JpdGUgb3V0
IHJldHVybiB2YWx1ZSBhbmQgT1VUIHBhcmFtZXRlcnMgdG8gc3RhY2sKICAJICovCiAgCXJldF9p
bmRleCA9IDA7CiAgCWlmIChvcHItPnJlc3VsdC0+a2luZCAhPSBDT1JCQV90a192b2lkKSB7CiEg
CSAgICAvKiBGSVhNRSwgZG8gdGhlIHJpZ2h0IHRoaW5nIGluIGFycmF5IGFuZCBzY2FsYXIgY29u
dGV4dHMKISAJICAgICAqLwohIAkgICAgU1QoMCkgPSBzdl8ybW9ydGFsKHJlc3VsdHNbMF0pOwog
IAkgICAgcmV0X2luZGV4Kys7CiAgCX0KICAKLS0tIDI0NCwyNTQgLS0tLQogIAogIAkvKiBOb3cg
d3JpdGUgb3V0IHJldHVybiB2YWx1ZSBhbmQgT1VUIHBhcmFtZXRlcnMgdG8gc3RhY2sKICAJICov
CisgCXN0X2luZGV4ID0gMDsKICAJcmV0X2luZGV4ID0gMDsKICAJaWYgKG9wci0+cmVzdWx0LT5r
aW5kICE9IENPUkJBX3RrX3ZvaWQpIHsKISAJICAgIFNUKHN0X2luZGV4KSA9IHN2XzJtb3J0YWwo
cmVzdWx0c1swXSk7CiEgCSAgICBzdF9pbmRleCsrOwogIAkgICAgcmV0X2luZGV4Kys7CiAgCX0K
ICAKKioqKioqKioqKioqKioqCioqKiAyNTIsMjYyICoqKioKICAJCXJldF9pbmRleCsrOwogIAkJ
YnJlYWs7CiAgCSAgICBjYXNlIENPUkJBX1BBUkFNX09VVDoKISAJCVNUKHJldF9pbmRleCkgPSBz
dl8ybW9ydGFsIChyZXN1bHRzW3JldF9pbmRleF0pOwogIAkJcmV0X2luZGV4Kys7CiAgCQlicmVh
azsKICAJICAgIH0KICAJfQogICAgICB9IGVsc2UgaWYgKGluZGV4ID49IFBPUkJJVF9HRVRURVJf
QkFTRSAmJiBpbmRleCA8IFBPUkJJVF9TRVRURVJfQkFTRSkgewogIAlTVCgwKSA9IHN2XzJtb3J0
YWwocmVzdWx0c1swXSk7CiAgICAgIH0KLS0tIDI2MCwyNzMgLS0tLQogIAkJcmV0X2luZGV4Kys7
CiAgCQlicmVhazsKICAJICAgIGNhc2UgQ09SQkFfUEFSQU1fT1VUOgohIAkJU1Qoc3RfaW5kZXgp
ID0gc3ZfMm1vcnRhbCAocmVzdWx0c1tyZXRfaW5kZXhdKTsKISAJCXN0X2luZGV4Kys7CiAgCQly
ZXRfaW5kZXgrKzsKICAJCWJyZWFrOwogIAkgICAgfQogIAl9CisgCisgCSpyZXR1cm5fY291bnQg
PSBzdF9pbmRleDsKICAgICAgfSBlbHNlIGlmIChpbmRleCA+PSBQT1JCSVRfR0VUVEVSX0JBU0Ug
JiYgaW5kZXggPCBQT1JCSVRfU0VUVEVSX0JBU0UpIHsKICAJU1QoMCkgPSBzdl8ybW9ydGFsKHJl
c3VsdHNbMF0pOwogICAgICB9CioqKioqKioqKioqKioqKgoqKiogMjk5LDMxMSAqKioqCiAgICAg
IAogICAgICByZXBvaWRwID0gaHZfZmV0Y2goQ3ZTVEFTSChjdiksIFBPUkJJVF9SRVBPSURfS0VZ
LCBzdHJsZW4oUE9SQklUX1JFUE9JRF9LRVkpLCAwKTsKICAgICAgaWYgKCFyZXBvaWRwKQohIAlj
cm9haygiX3BtaWNvX2NhbGxTdHViIGNhbGxlZCB3aXRoIGJhZCBwYWNrYWdlIChubyAlcykiLFBP
UkJJVF9SRVBPSURfS0VZKTsKICAgICAgCiEgICAgIHJlcG9pZCA9IFN2UFYoR3ZTVigqcmVwb2lk
cCksIFBMX25hKTsKICAgICAgCiAgICAgIGluZm8gPSBwb3JiaXRfZmluZF9pbnRlcmZhY2VfZGVz
Y3JpcHRpb24gKHJlcG9pZCk7CiAgICAgIGlmICghaW5mbykKISAJY3JvYWsoIl9wbWljb19jYWxs
U3R1YiBjYWxsZWQgb24gdW5kZWZpbmVkIGludGVyZmFjZSIpOwogIAogICAgICAvKiBHZXQgdGhl
IGRpc2NyaW1pbmF0b3IKICAgICAgICovCi0tLSAzMTAsMzIyIC0tLS0KICAgICAgCiAgICAgIHJl
cG9pZHAgPSBodl9mZXRjaChDdlNUQVNIKGN2KSwgUE9SQklUX1JFUE9JRF9LRVksIHN0cmxlbihQ
T1JCSVRfUkVQT0lEX0tFWSksIDApOwogICAgICBpZiAoIXJlcG9pZHApCiEgCWNyb2FrKCJfcG9y
Yml0X2NhbGxTdHViIGNhbGxlZCB3aXRoIGJhZCBwYWNrYWdlIChubyAlcykiLFBPUkJJVF9SRVBP
SURfS0VZKTsKICAgICAgCiEgICAgIHJlcG9pZCA9IFN2UFZfbm9sZW4oR3ZTVigqcmVwb2lkcCkp
OwogICAgICAKICAgICAgaW5mbyA9IHBvcmJpdF9maW5kX2ludGVyZmFjZV9kZXNjcmlwdGlvbiAo
cmVwb2lkKTsKICAgICAgaWYgKCFpbmZvKQohIAljcm9haygiX3BvcmJpdF9jYWxsU3R1YiBjYWxs
ZWQgb24gdW5kZWZpbmVkIGludGVyZmFjZSIpOwogIAogICAgICAvKiBHZXQgdGhlIGRpc2NyaW1p
bmF0b3IKICAgICAgICovCioqKioqKioqKioqKioqKgoqKiogMzEzLDMxOCAqKioqCi0tLSAzMjQs
MzM0IC0tLS0KICAJY3JvYWsoIm1ldGhvZCBtdXN0IGhhdmUgb2JqZWN0IGFzIGZpcnN0IGFyZ3Vt
ZW50Iik7CiAgCiAgICAgIG9iaiA9IHBvcmJpdF9zdl90b19vYmpyZWYoU1QoMCkpOyAvKiBtYXkg
Y3JvYWsgKi8KKyAKKyAgICAgaWYgKCFvYmopIHsKKyAJY3JvYWsoIkNhbid0IGNhbGwgQ09SQkEg
bWV0aG9kIG9uIGFuIHVuZGVmaW5lZCB2YWx1ZSIpOworICAgICB9CisgICAgIAogICAgICBjb25u
ZWN0aW9uID0gT1JCaXRfb2JqZWN0X2dldF9jb25uZWN0aW9uKG9iaik7CiAgCiAgIHJldHJ5X3Jl
cXVlc3Q6CioqKioqKioqKioqKioqKgoqKiogMzMwLDM0MyAqKioqCiAgICAgIGlmIChQTF9zdGFj
a19tYXggLSAmU1QoMCkgPCByZXR1cm5fY291bnQpCiAgICAgICAgIHN0YWNrX2dyb3cgKFBMX3N0
YWNrX3NwLCAmU1QoMCksIHJldHVybl9jb3VudCk7CiAgCiEgICAgIGlmICgoaW5kZXggPj0gUE9S
QklUX09QRVJBVElPTl9CQVNFICYmIGluZGV4IDwgUE9SQklUX0dFVFRFUl9CQVNFKSAmJgohIAlp
bmZvLT5kZXNjLT5vcGVyYXRpb25zLl9idWZmZXJbaW5kZXgtUE9SQklUX09QRVJBVElPTl9CQVNF
XS5tb2RlID09IENPUkJBX09QX09ORVdBWSkgewogIAlpZiAocmV0dXJuX2NvdW50ICE9IDApIHsK
ICAJICAgIHdhcm4gKCJPbmV3YXkgb3BlcmF0aW9uIGhhcyBvdXRwdXQgcGFyYW1ldGVycyBvciBh
IHJldHVybiB2YWx1ZSFcbiIpOwogIAl9CiAgICAgIH0gZWxzZSB7CiAgCW5ld19jb25uZWN0aW9u
ID0gZG9fZGVtYXJzaGFsIChjdiwgYXgsIGl0ZW1zLAohIAkJCQkgICAgICAgaW5mby0+ZGVzYywg
aW5kZXgsIHJldHVybl90eXBlcywKICAJCQkJICAgICAgIG9iaiwgY29ubmVjdGlvbiwgcmVxdWVz
dF9pZCk7CiAgCiAgCWlmIChuZXdfY29ubmVjdGlvbikgewotLS0gMzQ2LDM1OSAtLS0tCiAgICAg
IGlmIChQTF9zdGFja19tYXggLSAmU1QoMCkgPCByZXR1cm5fY291bnQpCiAgICAgICAgIHN0YWNr
X2dyb3cgKFBMX3N0YWNrX3NwLCAmU1QoMCksIHJldHVybl9jb3VudCk7CiAgCiEgICAgIGlmIChJ
U19PTkVXQVkgKGluZm8tPmRlc2MsIGluZGV4KSkgewogIAlpZiAocmV0dXJuX2NvdW50ICE9IDAp
IHsKICAJICAgIHdhcm4gKCJPbmV3YXkgb3BlcmF0aW9uIGhhcyBvdXRwdXQgcGFyYW1ldGVycyBv
ciBhIHJldHVybiB2YWx1ZSFcbiIpOwogIAl9CiAgICAgIH0gZWxzZSB7CiAgCW5ld19jb25uZWN0
aW9uID0gZG9fZGVtYXJzaGFsIChjdiwgYXgsIGl0ZW1zLAohIAkJCQkgICAgICAgaW5mby0+ZGVz
YywgaW5kZXgsCiEgCQkJCSAgICAgICByZXR1cm5fdHlwZXMsICZyZXR1cm5fY291bnQsCiAgCQkJ
CSAgICAgICBvYmosIGNvbm5lY3Rpb24sIHJlcXVlc3RfaWQpOwogIAogIAlpZiAobmV3X2Nvbm5l
Y3Rpb24pIHsKKioqKioqKioqKioqKioqCioqKiAzNDYsMzUwICoqKioKICAJfQogICAgICB9CiAg
CiEgICAgIFhTUkVUVVJOKHJldHVybl9jb3VudCk7CiAgfQotLS0gMzYyLDM3MyAtLS0tCiAgCX0K
ICAgICAgfQogIAohICAgICBzd2l0Y2ggKEdJTU1FX1YpIHsKISAgICAgY2FzZSBHX0FSUkFZOgoh
ICAgICAgIFhTUkVUVVJOKHJldHVybl9jb3VudCk7CiEgICAgIGNhc2UgR19TQ0FMQVI6CiEgICAg
ICAgWFNSRVRVUk4oMSk7CiEgICAgIGNhc2UgR19WT0lEOgohICAgICAgIFhTUkVUVVJOX0VNUFRZ
OwohICAgICB9CiAgfQpkaWZmIC1jIC1yIENPUkJBLU9SQml0LTAuNC4zL2RlbWFyc2hhbC5jIENP
UkJBLU9SQml0LTAuNC40L2RlbWFyc2hhbC5jCioqKiBDT1JCQS1PUkJpdC0wLjQuMy9kZW1hcnNo
YWwuYwlNb24gT2N0IDE2IDA0OjMyOjMyIDIwMDAKLS0tIENPUkJBLU9SQml0LTAuNC40L2RlbWFy
c2hhbC5jCVR1ZSBNYXIgMjYgMTU6MTU6NTIgMjAwMgoqKioqKioqKioqKioqKioKKioqIDcsMTMg
KioqKgogICNpbmNsdWRlICJ0eXBlcy5oIgogIAogICNkZWZpbmUgUkVDVl9CVUZGRVJfTEVGVChi
dWYpIFwKISAgKCgoZ3VjaGFyICopYnVmLT5tZXNzYWdlX2JvZHkgKyBHSU9QX01FU1NBR0VfQlVG
RkVSKGJ1ZiktPm1lc3NhZ2VfaGVhZGVyLm1lc3NhZ2Vfc2l6ZSkgLSAoZ3VjaGFyICopYnVmLT5j
dXIpCiAgCiAgCiAgc3RhdGljIENPUkJBX2Jvb2xlYW4KLS0tIDcsMTMgLS0tLQogICNpbmNsdWRl
ICJ0eXBlcy5oIgogIAogICNkZWZpbmUgUkVDVl9CVUZGRVJfTEVGVChidWYpIFwKISAgKCgoZ3Vj
aGFyICopYnVmLT5tZXNzYWdlX2JvZHkgKyAxMiArIEdJT1BfTUVTU0FHRV9CVUZGRVIoYnVmKS0+
bWVzc2FnZV9oZWFkZXIubWVzc2FnZV9zaXplKSAtIChndWNoYXIgKilidWYtPmN1cikKICAKICAK
ICBzdGF0aWMgQ09SQkFfYm9vbGVhbgoqKioqKioqKioqKioqKioKKioqIDEzNywxNDMgKioqKgog
ICAgICBDT1JCQV9sb25nX2xvbmcgdjsKICAKICAgICAgaWYgKGJ1Zl9nZXRuIChidWYsICZ2LCBz
aXplb2YgKHYpKSkKISAJcmV0dXJuIGxsX2Zyb21fbG9uZ2xvbmcgKHYpOwogICAgICBlbHNlCiAg
CXJldHVybiBOVUxMOwogIH0KLS0tIDEzNywxNDMgLS0tLQogICAgICBDT1JCQV9sb25nX2xvbmcg
djsKICAKICAgICAgaWYgKGJ1Zl9nZXRuIChidWYsICZ2LCBzaXplb2YgKHYpKSkKISAJcmV0dXJu
IHBvcmJpdF9sbF9mcm9tX2xvbmdsb25nICh2KTsKICAgICAgZWxzZQogIAlyZXR1cm4gTlVMTDsK
ICB9CioqKioqKioqKioqKioqKgoqKiogMTQ4LDE1NCAqKioqCiAgICAgIENPUkJBX3Vuc2lnbmVk
X2xvbmdfbG9uZyB2OwogIAogICAgICBpZiAoYnVmX2dldG4gKGJ1ZiwgJnYsIHNpemVvZiAodikp
KQohIAlyZXR1cm4gdWxsX2Zyb21fdWxvbmdsb25nICh2KTsKICAgICAgZWxzZQogIAlyZXR1cm4g
TlVMTDsKICB9Ci0tLSAxNDgsMTU0IC0tLS0KICAgICAgQ09SQkFfdW5zaWduZWRfbG9uZ19sb25n
IHY7CiAgCiAgICAgIGlmIChidWZfZ2V0biAoYnVmLCAmdiwgc2l6ZW9mICh2KSkpCiEgCXJldHVy
biBwb3JiaXRfdWxsX2Zyb21fdWxvbmdsb25nICh2KTsKICAgICAgZWxzZQogIAlyZXR1cm4gTlVM
TDsKICB9CioqKioqKioqKioqKioqKgoqKiogMTYxLDE2NyAqKioqCiAgICAgIC8qIEZJWE1FOiB0
eXBpY2FsIE9SQml0IGZsb2F0L2RvdWJsZSBicmVha2FnZQogICAgICAgKi8KICAgICAgaWYgKGJ1
Zl9nZXRuIChidWYsICZ2LCBzaXplb2YgKHYpKSkKISAJcmV0dXJuIGxkX2Zyb21fbG9uZ2RvdWJs
ZSAodik7CiAgICAgIGVsc2UKICAJcmV0dXJuIE5VTEw7CiAgfQotLS0gMTYxLDE2NyAtLS0tCiAg
ICAgIC8qIEZJWE1FOiB0eXBpY2FsIE9SQml0IGZsb2F0L2RvdWJsZSBicmVha2FnZQogICAgICAg
Ki8KICAgICAgaWYgKGJ1Zl9nZXRuIChidWYsICZ2LCBzaXplb2YgKHYpKSkKISAJcmV0dXJuIHBv
cmJpdF9sZF9mcm9tX2xvbmdkb3VibGUgKHYpOwogICAgICBlbHNlCiAgCXJldHVybiBOVUxMOwog
IH0KKioqKioqKioqKioqKioqCioqKiAyMTgsMjIzICoqKioKLS0tIDIxOCwyMjggLS0tLQogICAg
ICBpZiAodGMtPnN1YnR5cGVzWzBdLT5raW5kID09IENPUkJBX3RrX29jdGV0IHx8CiAgCXRjLT5z
dWJ0eXBlc1swXS0+a2luZCA9PSBDT1JCQV90a19jaGFyKSB7CiAgCisgICAgICAgICBpZiAoUkVD
Vl9CVUZGRVJfTEVGVCAoYnVmKSA8IGxlbikgeworIAkgICAgd2FybiAoImluY29tcGxldGUgbWVz
c2FnZSByZWNlaXZlZCIpOworIAkgICAgcmV0dXJuIE5VTEw7CisgCX0KKyAgICAgCiAgCXJlcyA9
IG5ld1NWKGxlbisxKTsKICAJU3ZDVVJfc2V0KHJlcywgbGVuKTsKICAJU3ZQT0tfb24gKHJlcyk7
CioqKioqKioqKioqKioqKgoqKiogMjg5LDMwMSAqKioqCiAgICAgIGlmICghYnVmX2dldG4gKGJ1
ZiwgJnN0cl9sZW4sIHNpemVvZiAoc3RyX2xlbikpKQogIAlyZXR1cm4gTlVMTDsKICAKICAgICAg
aWYgKCooKGNoYXIgKilidWYtPmN1ciArIHN0cl9sZW4gLSAxKSAhPSAnXDAnKSB7CiAgCXdhcm4g
KCJVbnRlcm1pbmF0ZWQgcmVwb3NpdG9yeSBJRCBpbiBleGNlcHRpb24iKTsKICAJcmV0dXJuIE5V
TEw7CiAgICAgIH0KICAKICAgICAgcmVwb2lkID0gKGNoYXIgKilidWYtPmN1cjsKISAgICAgYnVm
LT5jdXIgKz0gc3RyX2xlbjsKICAKICAgICAgaWYgKHR5cGUgPT0gQ09SQkFfVVNFUl9FWENFUFRJ
T04pIHsKICAJQ09SQkFfdW5zaWduZWRfbG9uZyBpOwotLS0gMjk0LDMxMSAtLS0tCiAgICAgIGlm
ICghYnVmX2dldG4gKGJ1ZiwgJnN0cl9sZW4sIHNpemVvZiAoc3RyX2xlbikpKQogIAlyZXR1cm4g
TlVMTDsKICAKKyAgICAgaWYgKFJFQ1ZfQlVGRkVSX0xFRlQgKGJ1ZikgPCBzdHJfbGVuKSB7Cisg
CXdhcm4gKCJpbmNvbXBsZXRlIG1lc3NhZ2UgcmVjZWl2ZWQiKTsKKyAJcmV0dXJuIE5VTEw7Cisg
ICAgIH0KKyAgICAgCiAgICAgIGlmICgqKChjaGFyICopYnVmLT5jdXIgKyBzdHJfbGVuIC0gMSkg
IT0gJ1wwJykgewogIAl3YXJuICgiVW50ZXJtaW5hdGVkIHJlcG9zaXRvcnkgSUQgaW4gZXhjZXB0
aW9uIik7CiAgCXJldHVybiBOVUxMOwogICAgICB9CiAgCiAgICAgIHJlcG9pZCA9IChjaGFyICop
YnVmLT5jdXI7CiEgICAgIGJ1Zi0+Y3VyID0gKGd1Y2hhciAqKWJ1Zi0+Y3VyICsgc3RyX2xlbjsK
ICAKICAgICAgaWYgKHR5cGUgPT0gQ09SQkFfVVNFUl9FWENFUFRJT04pIHsKICAJQ09SQkFfdW5z
aWduZWRfbG9uZyBpOwoqKioqKioqKioqKioqKioKKioqIDQwNiw0MTIgKioqKgogICAgICBIViAq
c3Rhc2g7CiAgICAgIAogICAgICBPUkJpdF9kZWNvZGVfQ09SQkFfVHlwZUNvZGUoJnJlc190Yywg
YnVmKTsKLSAgICAgQ09SQkFfT2JqZWN0X2R1cGxpY2F0ZSgoQ09SQkFfT2JqZWN0KXJlc190Yywg
TlVMTCk7CiAgCiAgICAgIGF2ID0gbmV3QVYoKTsKICAKLS0tIDQxNiw0MjEgLS0tLQoqKioqKioq
KioqKioqKioKKioqIDQ0Myw0NjAgKioqKgogICAgICBpZiAoIWJ1Zl9nZXRuIChidWYsICZsZW4s
IHNpemVvZiAobGVuKSkpCiAgCXJldHVybiBOVUxMOwogIAogICAgICBpZiAodGMtPmxlbmd0aCAh
PSAwICYmIGxlbi0xID4gdGMtPmxlbmd0aCkgewogIAl3YXJuICgic3RyaW5nIHJlY2VpdmVkIGlz
IGxvbmdlciB0aGFuIHR5cGVjb2RlIGFsbG93cyIpOwogIAlyZXR1cm4gTlVMTDsKICAgICAgfQog
IAogICAgICByZXMgPSBuZXdTVihsZW4pOwogICAgICBTdkNVUl9zZXQocmVzLCBsZW4tMSk7CiAg
ICAgIFN2UE9LX29uIChyZXMpOwogICAgICBzdHJidWYgPSBTdlBWWChyZXMpOwogIAogICAgICBt
ZW1jcHkgKHN0cmJ1ZiwgYnVmLT5jdXIsIGxlbik7CiEgICAgIGJ1Zi0+Y3VyICs9IGxlbjsKICAK
ICAgICAgLyogVGhpcyBzaG91bGQgYWxyZWFkeSBiZSBhIE5VTEwgYWNjb3JkaW5nIHRvIHRoZSBz
cGVjCiAgICAgICAqIGJ1dCB3ZSdsbCBwbGF5IGl0IHNhZmUgaGVyZS4KLS0tIDQ1Miw0NzkgLS0t
LQogICAgICBpZiAoIWJ1Zl9nZXRuIChidWYsICZsZW4sIHNpemVvZiAobGVuKSkpCiAgCXJldHVy
biBOVUxMOwogIAorICAgICBpZiAobGVuID09IDApIHsKKyAgICAgICAgIHdhcm4gKCJzdHJpbmcg
cmVjZWl2ZWQgd2l0aCBpbGxlZ2FsIDAgbGVuZ3RoIik7CisgCXJldHVybiBOVUxMOworICAgICB9
CisgICAgIAogICAgICBpZiAodGMtPmxlbmd0aCAhPSAwICYmIGxlbi0xID4gdGMtPmxlbmd0aCkg
ewogIAl3YXJuICgic3RyaW5nIHJlY2VpdmVkIGlzIGxvbmdlciB0aGFuIHR5cGVjb2RlIGFsbG93
cyIpOwogIAlyZXR1cm4gTlVMTDsKICAgICAgfQogIAorICAgICBpZiAoUkVDVl9CVUZGRVJfTEVG
VCAoYnVmKSA8IGxlbikgeworIAl3YXJuICgiaW5jb21wbGV0ZSBtZXNzYWdlIHJlY2VpdmVkIik7
CisgCXJldHVybiBOVUxMOworICAgICB9CisgICAgIAogICAgICByZXMgPSBuZXdTVihsZW4pOwog
ICAgICBTdkNVUl9zZXQocmVzLCBsZW4tMSk7CiAgICAgIFN2UE9LX29uIChyZXMpOwogICAgICBz
dHJidWYgPSBTdlBWWChyZXMpOwogIAogICAgICBtZW1jcHkgKHN0cmJ1ZiwgYnVmLT5jdXIsIGxl
bik7CiEgICAgIGJ1Zi0+Y3VyID0gKGd1Y2hhciAqKWJ1Zi0+Y3VyICsgbGVuOwogIAogICAgICAv
KiBUaGlzIHNob3VsZCBhbHJlYWR5IGJlIGEgTlVMTCBhY2NvcmRpbmcgdG8gdGhlIHNwZWMKICAg
ICAgICogYnV0IHdlJ2xsIHBsYXkgaXQgc2FmZSBoZXJlLgoqKioqKioqKioqKioqKioKKioqIDQ4
Nyw0OTMgKioqKgogIAogICAgICBpbmRleCA9IDE7CiAgICAgIGZvciAoaSA9IDA7IGkgPCB3aXJl
X2xlbmd0aDsgaSsrKSB7CiEgICAgICAgICBDT1JCQV9vY3RldCBjID0gKihjaGFyICopKGJ1Zi0+
Y3VyKyspOwogIAogIAlpZiAoIShpID09IDAgJiYgb2Zmc2V0KSkKICAJICAgIFN2UFZYKGRpZ2l0
c19zdilbaW5kZXgrK10gPSAnMCcgKyAoKGMgJiAweGYwKSA+PiA0KTsKLS0tIDUwNiw1MTIgLS0t
LQogIAogICAgICBpbmRleCA9IDE7CiAgICAgIGZvciAoaSA9IDA7IGkgPCB3aXJlX2xlbmd0aDsg
aSsrKSB7CiEgICAgICAgICBDT1JCQV9vY3RldCBjID0gKihjaGFyICopKGJ1Zi0+Y3VyID0gKGd1
Y2hhciAqKWJ1Zi0+Y3VyICsgMSk7CiAgCiAgCWlmICghKGkgPT0gMCAmJiBvZmZzZXQpKQogIAkg
ICAgU3ZQVlgoZGlnaXRzX3N2KVtpbmRleCsrXSA9ICcwJyArICgoYyAmIDB4ZjApID4+IDQpOwoq
KioqKioqKioqKioqKioKKioqIDUxNSw1MjAgKioqKgotLS0gNTM0LDU0MSAtLS0tCiAgCQogIAly
ZXR1cm4gTlVMTDsKICAgICAgfQorIAorICAgICBQVVRCQUNLOwogIAogICAgICByZXR1cm4gbmV3
U1ZzdihQT1BzKTsKICB9CmRpZmYgLWMgLXIgQ09SQkEtT1JCaXQtMC40LjMvZXJyb3JzLmMgQ09S
QkEtT1JCaXQtMC40LjQvZXJyb3JzLmMKKioqIENPUkJBLU9SQml0LTAuNC4zL2Vycm9ycy5jCVN1
biBNYXIgMjYgMDQ6MjM6MjAgMjAwMAotLS0gQ09SQkEtT1JCaXQtMC40LjQvZXJyb3JzLmMJVHVl
IE1hciAyNiAxNToxNTo1MiAyMDAyCioqKioqKioqKioqKioqKgoqKiogOTksMTExICoqKioKICAg
ICAgeyAiSURMOm9tZy5vcmcvQ09SQkEvT0JKRUNUX05PVF9FWElTVDoxLjAiLAogICAgICAgICJD
T1JCQTo6T0JKRUNUX05PVF9FWElTVCIsCiAgICAgICAgIk5vbi1leGlzdGVudCBvYmplY3QsIGRl
bGV0ZSByZWZlcmVuY2UiIH0sCiEgICAgIHsgIklETDpvbWcub3JnL0NPUkJBL1RSQU5TQUNUSU9O
X1JFUVVJUkVEIiwKICAgICAgICAiQ09SQkE6OlRSQU5TQUNUSU9OX1JFUVVJUkVEIiwKICAgICAg
ICAiVHJhbnNhY3Rpb24gcmVxdWlyZWQiIH0sCiEgICAgIHsgIklETDpvbWcub3JnL0NPUkJBL1RS
QU5TQUNUSU9OX1JPTExCQUNLIiwKISAgICAgICAiQ09SQkE6OlRSQU5TQUNUSU9OX1JPTExCQUNL
IiwKICAgICAgICAiVHJhbnNhY3Rpb24gcm9sbGVkIGJhY2siIH0sCiEgICAgIHsgIklETDpvbWcu
b3JnL0NPUkJBL0lOVkFMSURfVFJBTlNBQ1RJT04iLAogICAgICAgICJDT1JCQTo6SU5WQUxJRF9U
UkFOU0FDVElPTiIsCiAgICAgICAgIkludmFsaWQgdHJhbnNhY3Rpb24iIH0sCiAgfTsKLS0tIDk5
LDExMSAtLS0tCiAgICAgIHsgIklETDpvbWcub3JnL0NPUkJBL09CSkVDVF9OT1RfRVhJU1Q6MS4w
IiwKICAgICAgICAiQ09SQkE6Ok9CSkVDVF9OT1RfRVhJU1QiLAogICAgICAgICJOb24tZXhpc3Rl
bnQgb2JqZWN0LCBkZWxldGUgcmVmZXJlbmNlIiB9LAohICAgICB7ICJJREw6b21nLm9yZy9DT1JC
QS9UUkFOU0FDVElPTl9SRVFVSVJFRDoxLjAiLAogICAgICAgICJDT1JCQTo6VFJBTlNBQ1RJT05f
UkVRVUlSRUQiLAogICAgICAgICJUcmFuc2FjdGlvbiByZXF1aXJlZCIgfSwKISAgICAgeyAiSURM
Om9tZy5vcmcvQ09SQkEvVFJBTlNBQ1RJT05fUk9MTEVEQkFDSzoxLjAiLAohICAgICAgICJDT1JC
QTo6VFJBTlNBQ1RJT05fUk9MTEVEQkFDSyIsCiAgICAgICAgIlRyYW5zYWN0aW9uIHJvbGxlZCBi
YWNrIiB9LAohICAgICB7ICJJREw6b21nLm9yZy9DT1JCQS9JTlZBTElEX1RSQU5TQUNUSU9OOjEu
MCIsCiAgICAgICAgIkNPUkJBOjpJTlZBTElEX1RSQU5TQUNUSU9OIiwKICAgICAgICAiSW52YWxp
ZCB0cmFuc2FjdGlvbiIgfSwKICB9OwpkaWZmIC1jIC1yIENPUkJBLU9SQml0LTAuNC4zL2V4dHJh
cy5jIENPUkJBLU9SQml0LTAuNC40L2V4dHJhcy5jCioqKiBDT1JCQS1PUkJpdC0wLjQuMy9leHRy
YXMuYwlNb24gSmFuICAzIDA2OjE2OjIwIDIwMDAKLS0tIENPUkJBLU9SQml0LTAuNC40L2V4dHJh
cy5jCVR1ZSBNYXIgMjYgMTU6MTU6NTIgMjAwMgoqKioqKioqKioqKioqKioKKioqIDEsMyAqKioq
Ci0tLSAxLDUgLS0tLQorIC8qIC0qLSBtb2RlOiBDOyBjLWZpbGUtc3R5bGU6ICJic2QiIC0qLSAq
LworIAogICNpbmNsdWRlICJleHRyYXMuaCIKICAKICBzdGF0aWMgQ09SQkFfUHJpbmNpcGFsIHBv
cmJpdF9jb29raWUgPSB7IDAsIDAsIE5VTEwsIENPUkJBX0ZBTFNFIH07CioqKioqKioqKioqKioq
KgoqKiogOTAsOTIgKioqKgotLS0gOTIsMTM4IC0tLS0KICAgICAgT1JCaXRfc2V0X3JlcXVlc3Rf
dmFsaWRhdGlvbl9oYW5kbGVyIChOVUxMKTsKICB9CiAgCisgUE9SQml0U291cmNlICoKKyBwb3Ji
aXRfc291cmNlX25ldyAodm9pZCkKKyB7CisgICBQT1JCaXRTb3VyY2UgKnNvdXJjZSA9IGdfbmV3
IChQT1JCaXRTb3VyY2UsIDEpOworIAorICAgc291cmNlLT5yZWZfY291bnQgPSAxOworICAgc291
cmNlLT5pZCA9IDA7CisgICBzb3VyY2UtPmFyZ3MgPSBOVUxMOworIAorICAgcmV0dXJuIHNvdXJj
ZTsKKyB9CisgCisgUE9SQml0U291cmNlICoKKyBwb3JiaXRfc291cmNlX3JlZiAoUE9SQml0U291
cmNlICpzb3VyY2UpCisgeworICAgc291cmNlLT5yZWZfY291bnQrKzsKKyAKKyAgIHJldHVybiBz
b3VyY2U7CisgfQorIAorIHZvaWQgCisgcG9yYml0X3NvdXJjZV91bnJlZiAoUE9SQml0U291cmNl
ICpzb3VyY2UpCisgeworICAgc291cmNlLT5yZWZfY291bnQtLTsKKyAgIAorICAgaWYgKHNvdXJj
ZS0+cmVmX2NvdW50ID09IDApIHsKKyAgICAgICBpZiAoc291cmNlLT5pZCkgeworIAkgIHdhcm4g
KCIwIHJlZmNvdW50IG9uIGFuIGFjdGl2YXRlIHNvdXJjZSEiKTsKKyAJICBzb3VyY2UtPnJlZl9j
b3VudCsrOworICAgICAgIH0gZWxzZSB7CisgCSAgZ19mcmVlIChzb3VyY2UpOworICAgICAgIH0K
KyAgIH0KKyB9CisgCisgdm9pZAorIHBvcmJpdF9zb3VyY2VfZGVzdHJveWVkIChQT1JCaXRTb3Vy
Y2UgKnNvdXJjZSkKKyB7CisgICBzb3VyY2UtPmlkID0gMDsKKyAgIFN2UkVGQ05UX2RlYyAoKFNW
ICopc291cmNlLT5hcmdzKTsKKyAgIHNvdXJjZS0+YXJncyA9IE5VTEw7CisgICAKKyAgIHBvcmJp
dF9zb3VyY2VfdW5yZWYgKHNvdXJjZSk7CisgfQpkaWZmIC1jIC1yIENPUkJBLU9SQml0LTAuNC4z
L2V4dHJhcy5oIENPUkJBLU9SQml0LTAuNC40L2V4dHJhcy5oCioqKiBDT1JCQS1PUkJpdC0wLjQu
My9leHRyYXMuaAlNb24gSmFuICAzIDA2OjE2OjIwIDIwMDAKLS0tIENPUkJBLU9SQml0LTAuNC40
L2V4dHJhcy5oCVR1ZSBNYXIgMjYgMTU6MTU6NTIgMjAwMgoqKioqKioqKioqKioqKioKKioqIDMs
OSAqKioqCi0tLSAzLDIzIC0tLS0KICAjaWZuZGVmIF9fUE9SQklUX0VYVFJBU19IX18KICAjZGVm
aW5lIF9fUE9SQklUX0VYVFJBU19IX18KICAKKyAjaW5jbHVkZSAicG9yYml0LXBlcmwuaCIKICAj
aW5jbHVkZSA8b3JiL29yYml0Lmg+CisgCisgdHlwZWRlZiBzdHJ1Y3QgX1BPUkJpdFNvdXJjZSBQ
T1JCaXRTb3VyY2U7CisgCisgc3RydWN0IF9QT1JCaXRTb3VyY2UgeworICAgICBndWludCByZWZf
Y291bnQ7CisgICAgIGludCBpZDsKKyAgICAgQVYgKmFyZ3M7CisgfTsKKyAKKyBQT1JCaXRTb3Vy
Y2UgKnBvcmJpdF9zb3VyY2VfbmV3ICAgICAgICh2b2lkKTsKKyBQT1JCaXRTb3VyY2UgKnBvcmJp
dF9zb3VyY2VfcmVmICAgICAgIChQT1JCaXRTb3VyY2UgKnNvdXJjZSk7Cisgdm9pZCAgICAgICAg
ICBwb3JiaXRfc291cmNlX3VucmVmICAgICAoUE9SQml0U291cmNlICpzb3VyY2UpOworIHZvaWQg
ICAgICAgICAgcG9yYml0X3NvdXJjZV9kZXN0cm95ZWQgKFBPUkJpdFNvdXJjZSAqc291cmNlKTsK
ICAKICB2b2lkIHBvcmJpdF9zZXRfY29va2llIChjb25zdCBjaGFyICpjb29raWUpOwogIHZvaWQg
cG9yYml0X3NldF91c2VfZ21haW4gKGdib29sZWFuIHNldCk7CmRpZmYgLWMgLXIgQ09SQkEtT1JC
aXQtMC40LjMvZXh0dHlwZXMuYyBDT1JCQS1PUkJpdC0wLjQuNC9leHR0eXBlcy5jCioqKiBDT1JC
QS1PUkJpdC0wLjQuMy9leHR0eXBlcy5jCU1vbiBKYW4gIDMgMDY6MTY6MjAgMjAwMAotLS0gQ09S
QkEtT1JCaXQtMC40LjQvZXh0dHlwZXMuYwlUdWUgTWFyIDI2IDE1OjE1OjUyIDIwMDIKKioqKioq
KioqKioqKioqCioqKiA0LDEwICoqKioKICAjaW5jbHVkZSA8Y3R5cGUuaD4KICAKICBTViAqCiEg
bGxfZnJvbV9sb25nbG9uZyAobG9uZyBsb25nIHZhbCkKICB7CiAgICAgIFNWICpydjsKICAgICAg
U1YgKnJlc3VsdCA9IG5ld1NWKDApOwotLS0gNCwxMCAtLS0tCiAgI2luY2x1ZGUgPGN0eXBlLmg+
CiAgCiAgU1YgKgohIHBvcmJpdF9sbF9mcm9tX2xvbmdsb25nIChsb25nIGxvbmcgdmFsKQogIHsK
ICAgICAgU1YgKnJ2OwogICAgICBTViAqcmVzdWx0ID0gbmV3U1YoMCk7CioqKioqKioqKioqKioq
KgoqKiogMTksMjUgKioqKgogIH0KICAKICBTViAqCiEgdWxsX2Zyb21fdWxvbmdsb25nICh1bnNp
Z25lZCBsb25nIGxvbmcgdmFsKQogIHsKICAgICAgU1YgKnJ2OwogICAgICBTViAqcmVzdWx0ID0g
bmV3U1YoMCk7Ci0tLSAxOSwyNSAtLS0tCiAgfQogIAogIFNWICoKISBwb3JiaXRfdWxsX2Zyb21f
dWxvbmdsb25nICh1bnNpZ25lZCBsb25nIGxvbmcgdmFsKQogIHsKICAgICAgU1YgKnJ2OwogICAg
ICBTViAqcmVzdWx0ID0gbmV3U1YoMCk7CioqKioqKioqKioqKioqKgoqKiogMzQsNDAgKioqKgog
IH0KICAKICBTViAqCiEgbGRfZnJvbV9sb25nZG91YmxlIChsb25nIGRvdWJsZSB2YWwpCiAgewog
ICAgICBTViAqcnY7CiAgICAgIFNWICpyZXN1bHQgPSBuZXdTVihzaXplb2YobG9uZyBkb3VibGUp
KTsKLS0tIDM0LDQwIC0tLS0KICB9CiAgCiAgU1YgKgohIHBvcmJpdF9sZF9mcm9tX2xvbmdkb3Vi
bGUgKGxvbmcgZG91YmxlIHZhbCkKICB7CiAgICAgIFNWICpydjsKICAgICAgU1YgKnJlc3VsdCA9
IG5ld1NWKHNpemVvZihsb25nIGRvdWJsZSkpOwoqKioqKioqKioqKioqKioKKioqIDU4LDY0ICoq
KioKICAgKi8KICAKICBsb25nIGxvbmcKISBsb25nbG9uZ19mcm9tX3N0cmluZyAoY29uc3QgY2hh
ciAqc3RyKQogIHsKICAgICAgbG9uZyBsb25nIHZhbCA9IDA7CiAgICAgIGludCBuZWdhdGUgPSAw
OwotLS0gNTgsNjQgLS0tLQogICAqLwogIAogIGxvbmcgbG9uZwohIHBvcmJpdF9sb25nbG9uZ19m
cm9tX3N0cmluZyAoY29uc3QgY2hhciAqc3RyKQogIHsKICAgICAgbG9uZyBsb25nIHZhbCA9IDA7
CiAgICAgIGludCBuZWdhdGUgPSAwOwoqKioqKioqKioqKioqKioKKioqIDc5LDg2ICoqKioKICAK
ICAgICAgd2hpbGUgKCpzdHIpIHsKICAJaWYgKGlzZGlnaXQgKCpzdHIpKSB7Ci0gCSAgICB2YWwg
Kz0gKnN0ciAtICcwJzsKICAJICAgIHZhbCAqPSAxMDsKICAJfSBlbHNlIGlmICghaXNzcGFjZSAo
KnN0cikpCiAgCSAgICBicmVhazsKICAJc3RyKys7Ci0tLSA3OSw4NiAtLS0tCiAgCiAgICAgIHdo
aWxlICgqc3RyKSB7CiAgCWlmIChpc2RpZ2l0ICgqc3RyKSkgewogIAkgICAgdmFsICo9IDEwOwor
IAkgICAgdmFsICs9ICpzdHIgLSAnMCc7CiAgCX0gZWxzZSBpZiAoIWlzc3BhY2UgKCpzdHIpKQog
IAkgICAgYnJlYWs7CiAgCXN0cisrOwoqKioqKioqKioqKioqKioKKioqIDkzLDk5ICoqKioKICB9
CiAgCiAgY2hhciAqCiEgbG9uZ2xvbmdfdG9fc3RyaW5nIChsb25nIGxvbmcgdmFsKQogIHsKICAg
ICAgaW50IGxlbmd0aCA9IDI7CiAgICAgIGNoYXIgKnN0cjsKLS0tIDkzLDk5IC0tLS0KICB9CiAg
CiAgY2hhciAqCiEgcG9yYml0X2xvbmdsb25nX3RvX3N0cmluZyAobG9uZyBsb25nIHZhbCkKICB7
CiAgICAgIGludCBsZW5ndGggPSAyOwogICAgICBjaGFyICpzdHI7CioqKioqKioqKioqKioqKgoq
KiogMTM1LDE0MSAqKioqCiAgfQogIAogIHVuc2lnbmVkIGxvbmcgbG9uZwohIHVsb25nbG9uZ19m
cm9tX3N0cmluZyAoY29uc3QgY2hhciAqc3RyKQogIHsKICAgICAgdW5zaWduZWQgbG9uZyBsb25n
IHZhbCA9IDA7CiAgICAgICAgCi0tLSAxMzUsMTQxIC0tLS0KICB9CiAgCiAgdW5zaWduZWQgbG9u
ZyBsb25nCiEgcG9yYml0X3Vsb25nbG9uZ19mcm9tX3N0cmluZyAoY29uc3QgY2hhciAqc3RyKQog
IHsKICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHZhbCA9IDA7CiAgICAgICAgCioqKioqKioqKioq
KioqKgoqKiogMTUxLDE1OCAqKioqCiAgCiAgICAgIHdoaWxlICgqc3RyKSB7CiAgCWlmIChpc2Rp
Z2l0ICgqc3RyKSkgewotIAkgICAgdmFsICs9ICpzdHIgLSAnMCc7CiAgCSAgICB2YWwgKj0gMTA7
CiAgCX0gZWxzZSBpZiAoIWlzc3BhY2UgKCpzdHIpKQogIAkgICAgYnJlYWs7CiAgCXN0cisrOwot
LS0gMTUxLDE1OCAtLS0tCiAgCiAgICAgIHdoaWxlICgqc3RyKSB7CiAgCWlmIChpc2RpZ2l0ICgq
c3RyKSkgewogIAkgICAgdmFsICo9IDEwOworIAkgICAgdmFsICs9ICpzdHIgLSAnMCc7CiAgCX0g
ZWxzZSBpZiAoIWlzc3BhY2UgKCpzdHIpKQogIAkgICAgYnJlYWs7CiAgCXN0cisrOwoqKioqKioq
KioqKioqKioKKioqIDE2MiwxNjggKioqKgogIH0KICAKICBjaGFyICoKISB1bG9uZ2xvbmdfdG9f
c3RyaW5nICh1bnNpZ25lZCBsb25nIGxvbmcgdmFsKQogIHsKICAgICAgaW50IGxlbmd0aCA9IDI7
CiAgICAgIGNoYXIgKnN0cjsKLS0tIDE2MiwxNjggLS0tLQogIH0KICAKICBjaGFyICoKISBwb3Ji
aXRfdWxvbmdsb25nX3RvX3N0cmluZyAodW5zaWduZWQgbG9uZyBsb25nIHZhbCkKICB7CiAgICAg
IGludCBsZW5ndGggPSAyOwogICAgICBjaGFyICpzdHI7CioqKioqKioqKioqKioqKgoqKiogMTk2
LDIwMiAqKioqCiAgfQogIAogIGxvbmcgZG91YmxlIAohIGxvbmdkb3VibGVfZnJvbV9zdHJpbmcg
KGNvbnN0IGNoYXIgKnN0cikKICB7CiAgICAgIGludCBkZWNpbWFsID0gMHg3RkZGRkZGRjsKICAg
ICAgaW50IGV4cG9uZW50ID0gMDsKLS0tIDE5NiwyMDIgLS0tLQogIH0KICAKICBsb25nIGRvdWJs
ZSAKISBwb3JiaXRfbG9uZ2RvdWJsZV9mcm9tX3N0cmluZyAoY29uc3QgY2hhciAqc3RyKQogIHsK
ICAgICAgaW50IGRlY2ltYWwgPSAweDdGRkZGRkZGOwogICAgICBpbnQgZXhwb25lbnQgPSAwOwoq
KioqKioqKioqKioqKioKKioqIDMwMiwzMDggKioqKgogIH0KICAKICBjaGFyICoKISBsb25nZG91
YmxlX3RvX3N0cmluZyAobG9uZyBkb3VibGUgdmFsKQogIHsKICAgICAgaW50IGNvdW50OwogICAg
ICBpbnQgaW52ZXJ0OwotLS0gMzAyLDMwOCAtLS0tCiAgfQogIAogIGNoYXIgKgohIHBvcmJpdF9s
b25nZG91YmxlX3RvX3N0cmluZyAobG9uZyBkb3VibGUgdmFsKQogIHsKICAgICAgaW50IGNvdW50
OwogICAgICBpbnQgaW52ZXJ0OwpkaWZmIC1jIC1yIENPUkJBLU9SQml0LTAuNC4zL2V4dHR5cGVz
LmggQ09SQkEtT1JCaXQtMC40LjQvZXh0dHlwZXMuaAoqKiogQ09SQkEtT1JCaXQtMC40LjMvZXh0
dHlwZXMuaAlNb24gSmFuICAzIDA2OjE2OjIwIDIwMDAKLS0tIENPUkJBLU9SQml0LTAuNC40L2V4
dHR5cGVzLmgJVHVlIE1hciAyNiAxNToxNTo1MiAyMDAyCioqKioqKioqKioqKioqKgoqKiogOCwz
MyAqKioqCiAgI2RlZmluZSBMTF9WQUxVRShzdikgKCoobG9uZyBsb25nICopICZTdk5WWCAoc3Yp
KQogICNkZWZpbmUgU3ZMTFYoc3YpIChzdl9pc2EgKHN2LCAiQ09SQkE6OkxvbmdMb25nIikgPyBc
CiAgCQkgICAgTExfVkFMVUUgKFN2UlYgKHN2KSkgOiBcCiEgCQkgICAgbG9uZ2xvbmdfZnJvbV9z
dHJpbmcgKFN2UFYgKHN2LCBQTF9uYSkpKQogICNkZWZpbmUgVUxMX1ZBTFVFKHN2KSAoKih1bnNp
Z25lZCBsb25nIGxvbmcgKikgJlN2TlZYIChzdikpCiAgI2RlZmluZSBTdlVMTFYoc3YpIChzdl9p
c2EgKHN2LCAiQ09SQkE6OlVMb25nTG9uZyIpID8gXAogIAkJICAgIFVMTF9WQUxVRSAoU3ZSViAo
c3YpKSA6IFwKISAJCSAgICB1bG9uZ2xvbmdfZnJvbV9zdHJpbmcgKFN2UFYgKHN2LCBQTF9uYSkp
KQogICNkZWZpbmUgTERfVkFMVUUoc3YpICgqKGxvbmcgZG91YmxlICopIFN2UFZYIChzdikpCiAg
I2RlZmluZSBTdkxEVihzdikgKHN2X2lzYSAoc3YsICJDT1JCQTo6TG9uZ0RvdWJsZSIpID8gXAog
IAkJICAgIExEX1ZBTFVFIChTdlJWIChzdikpIDogXAohIAkJICAgIGxvbmdkb3VibGVfZnJvbV9z
dHJpbmcgKFN2UFYgKHN2LCBQTF9uYSkpKQogIAohIFNWICpsbF9mcm9tX2xvbmdsb25nIChsb25n
IGxvbmcgdmFsKTsKISBsb25nIGxvbmcgbG9uZ2xvbmdfZnJvbV9zdHJpbmcgKGNvbnN0IGNoYXIg
KnN0cik7CiEgY2hhciAqbG9uZ2xvbmdfdG9fc3RyaW5nIChsb25nIGxvbmcgdmFsKTsKICAKISBT
ViAqdWxsX2Zyb21fdWxvbmdsb25nICh1bnNpZ25lZCBsb25nIGxvbmcgdmFsKTsKISB1bnNpZ25l
ZCBsb25nIGxvbmcgdWxvbmdsb25nX2Zyb21fc3RyaW5nIChjb25zdCBjaGFyICpzdHIpOwohIGNo
YXIgKnVsb25nbG9uZ190b19zdHJpbmcgKHVuc2lnbmVkIGxvbmcgbG9uZyB2YWwpOwogIAohIFNW
ICpsZF9mcm9tX2xvbmdkb3VibGUgKGxvbmcgZG91YmxlIHZhbCk7CiEgbG9uZyBkb3VibGUgbG9u
Z2RvdWJsZV9mcm9tX3N0cmluZyAoY29uc3QgY2hhciAqc3RyKTsKISBjaGFyICpsb25nZG91Ymxl
X3RvX3N0cmluZyAobG9uZyBkb3VibGUgdmFsKTsKICAKISAjZW5kaWYgX19QT1JCSVRfRVhUVFlQ
RVNfSF9fCi0tLSA4LDMzIC0tLS0KICAjZGVmaW5lIExMX1ZBTFVFKHN2KSAoKihsb25nIGxvbmcg
KikgJlN2TlZYIChzdikpCiAgI2RlZmluZSBTdkxMVihzdikgKHN2X2lzYSAoc3YsICJDT1JCQTo6
TG9uZ0xvbmciKSA/IFwKICAJCSAgICBMTF9WQUxVRSAoU3ZSViAoc3YpKSA6IFwKISAJCSAgICBw
b3JiaXRfbG9uZ2xvbmdfZnJvbV9zdHJpbmcgKFN2UFYgKHN2LCBQTF9uYSkpKQogICNkZWZpbmUg
VUxMX1ZBTFVFKHN2KSAoKih1bnNpZ25lZCBsb25nIGxvbmcgKikgJlN2TlZYIChzdikpCiAgI2Rl
ZmluZSBTdlVMTFYoc3YpIChzdl9pc2EgKHN2LCAiQ09SQkE6OlVMb25nTG9uZyIpID8gXAogIAkJ
ICAgIFVMTF9WQUxVRSAoU3ZSViAoc3YpKSA6IFwKISAJCSAgICBwb3JiaXRfdWxvbmdsb25nX2Zy
b21fc3RyaW5nIChTdlBWIChzdiwgUExfbmEpKSkKICAjZGVmaW5lIExEX1ZBTFVFKHN2KSAoKihs
b25nIGRvdWJsZSAqKSBTdlBWWCAoc3YpKQogICNkZWZpbmUgU3ZMRFYoc3YpIChzdl9pc2EgKHN2
LCAiQ09SQkE6OkxvbmdEb3VibGUiKSA/IFwKICAJCSAgICBMRF9WQUxVRSAoU3ZSViAoc3YpKSA6
IFwKISAJCSAgICBwb3JiaXRfbG9uZ2RvdWJsZV9mcm9tX3N0cmluZyAoU3ZQViAoc3YsIFBMX25h
KSkpCiAgCiEgU1YgKnBvcmJpdF9sbF9mcm9tX2xvbmdsb25nIChsb25nIGxvbmcgdmFsKTsKISBs
b25nIGxvbmcgcG9yYml0X2xvbmdsb25nX2Zyb21fc3RyaW5nIChjb25zdCBjaGFyICpzdHIpOwoh
IGNoYXIgKnBvcmJpdF9sb25nbG9uZ190b19zdHJpbmcgKGxvbmcgbG9uZyB2YWwpOwogIAohIFNW
ICpwb3JiaXRfdWxsX2Zyb21fdWxvbmdsb25nICh1bnNpZ25lZCBsb25nIGxvbmcgdmFsKTsKISB1
bnNpZ25lZCBsb25nIGxvbmcgcG9yYml0X3Vsb25nbG9uZ19mcm9tX3N0cmluZyAoY29uc3QgY2hh
ciAqc3RyKTsKISBjaGFyICpwb3JiaXRfdWxvbmdsb25nX3RvX3N0cmluZyAodW5zaWduZWQgbG9u
ZyBsb25nIHZhbCk7CiAgCiEgU1YgKnBvcmJpdF9sZF9mcm9tX2xvbmdkb3VibGUgKGxvbmcgZG91
YmxlIHZhbCk7CiEgbG9uZyBkb3VibGUgcG9yYml0X2xvbmdkb3VibGVfZnJvbV9zdHJpbmcgKGNv
bnN0IGNoYXIgKnN0cik7CiEgY2hhciAqcG9yYml0X2xvbmdkb3VibGVfdG9fc3RyaW5nIChsb25n
IGRvdWJsZSB2YWwpOwogIAohICNlbmRpZiAvKiBfX1BPUkJJVF9FWFRUWVBFU19IX18gKi8KZGlm
ZiAtYyAtciBDT1JCQS1PUkJpdC0wLjQuMy9pZGwuYyBDT1JCQS1PUkJpdC0wLjQuNC9pZGwuYwoq
KiogQ09SQkEtT1JCaXQtMC40LjMvaWRsLmMJU3VuIEp1bCAgOSAwMzo1NToyMiAyMDAwCi0tLSBD
T1JCQS1PUkJpdC0wLjQuNC9pZGwuYwlUaHUgTWFyIDI4IDAxOjAwOjEzIDIwMDIKKioqKioqKioq
KioqKioqCioqKiA1ODAsNTg2ICoqKioKICAgICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgCiEgQ09S
QkFfVHlwZUNvZGUKICBnZXRfaWRlbnRfdHlwZWNvZGUgKElETF90cmVlIHRyZWUpCiAgewogICAg
ICBJRExfdHJlZSBwYXJlbnQ7Ci0tLSA1ODAsNTg2IC0tLS0KICAgICAgcmV0dXJuIHJlc3VsdDsK
ICB9CiAgCiEgc3RhdGljIENPUkJBX1R5cGVDb2RlCiAgZ2V0X2lkZW50X3R5cGVjb2RlIChJRExf
dHJlZSB0cmVlKQogIHsKICAgICAgSURMX3RyZWUgcGFyZW50OwoqKioqKioqKioqKioqKioKKioq
IDY0MSw2NDcgKioqKgogICAgICByZXR1cm4gTlVMTDsKICB9CiAgCiEgQ09SQkFfVHlwZUNvZGUK
ICBnZXRfdHlwZWNvZGUgKElETF90cmVlIHRyZWUpCiAgewogICAgICBzd2l0Y2ggKElETF9OT0RF
X1RZUEUgKHRyZWUpKSB7Ci0tLSA2NDEsNjQ3IC0tLS0KICAgICAgcmV0dXJuIE5VTEw7CiAgfQog
IAohIHN0YXRpYyBDT1JCQV9UeXBlQ29kZQogIGdldF90eXBlY29kZSAoSURMX3RyZWUgdHJlZSkK
ICB7CiAgICAgIHN3aXRjaCAoSURMX05PREVfVFlQRSAodHJlZSkpIHsKKioqKioqKioqKioqKioq
CioqKiA4MTcsODMzICoqKioKICAgICAgY2hhciAqcGtnbmFtZSA9IE5VTEw7CiAgICAgIFNWICpz
djsKICAKISAgICAgc3dpdGNoIChJRExfTk9ERV9UWVBFIChjb250YWluZXIpKSB7CiEgICAgIGNh
c2UgSURMTl9JTlRFUkZBQ0U6CiEgCXBrZ25hbWUgPSBJRExfbnNfaWRlbnRfdG9fcXN0cmluZyAo
SURMX0lOVEVSRkFDRSAoY29udGFpbmVyKS5pZGVudCwgIjo6IiwgMCk7CiEgCWJyZWFrOwohICAg
ICBjYXNlIElETE5fTU9EVUxFOgohIAlwa2duYW1lID0gSURMX25zX2lkZW50X3RvX3FzdHJpbmcg
KElETF9NT0RVTEUgKGNvbnRhaW5lcikuaWRlbnQsICI6OiIsIDApOwohIAlicmVhazsKISAgICAg
ZGVmYXVsdDoKISAJZ193YXJuaW5nICgiQ29uc3RhbnQgaXNuJ3QgY29udGFpbmVkIHdpdGhpbiBh
biBpbnRlcmZhY2Ugb3IgbW9kdWxlIVxuIik7CiEgCWdvdG8gZXJyb3I7CiEgICAgIH0KICAgICAg
CiAgICAgIHN3aXRjaCAodHlwZS0+a2luZCkgewogIAkvKiBGSVhNRTogY2hlY2sgcmFuZ2VzICov
Ci0tLSA4MTcsODM2IC0tLS0KICAgICAgY2hhciAqcGtnbmFtZSA9IE5VTEw7CiAgICAgIFNWICpz
djsKICAKISAgICAgaWYgKCFjb250YWluZXIpCiEgCXBrZ25hbWUgPSAibWFpbiI7CiEgICAgIGVs
c2UKISAJc3dpdGNoIChJRExfTk9ERV9UWVBFIChjb250YWluZXIpKSB7CiEgCWNhc2UgSURMTl9J
TlRFUkZBQ0U6CiEgCSAgICBwa2duYW1lID0gSURMX25zX2lkZW50X3RvX3FzdHJpbmcgKElETF9J
TlRFUkZBQ0UgKGNvbnRhaW5lcikuaWRlbnQsICI6OiIsIDApOwohIAkgICAgYnJlYWs7CiEgCWNh
c2UgSURMTl9NT0RVTEU6CiEgCSAgICBwa2duYW1lID0gSURMX25zX2lkZW50X3RvX3FzdHJpbmcg
KElETF9NT0RVTEUgKGNvbnRhaW5lcikuaWRlbnQsICI6OiIsIDApOwohIAkgICAgYnJlYWs7CiEg
CWRlZmF1bHQ6CiEgCSAgICBnX3dhcm5pbmcgKCJDb25zdGFudCBpc24ndCBjb250YWluZWQgd2l0
aGluIGFuIGludGVyZmFjZSBvciBtb2R1bGUhXG4iKTsKISAJICAgIGdvdG8gZXJyb3I7CiEgCX0K
ICAgICAgCiAgICAgIHN3aXRjaCAodHlwZS0+a2luZCkgewogIAkvKiBGSVhNRTogY2hlY2sgcmFu
Z2VzICovCioqKioqKioqKioqKioqKgoqKiogODU3LDg2OSAqKioqCiAgICAgICAqICAgICAgICBs
b25nIGNvbnN0YW50cyBhcyBmYXIgYXMgSSBjYW4gdGVsbC4KICAgICAgICovCiAgICAgIGNhc2Ug
Q09SQkFfdGtfbG9uZ2RvdWJsZToKISAJc3YgPSBsZF9mcm9tX2xvbmdkb3VibGUgKChDT1JCQV9s
b25nX2RvdWJsZSlJRExfRkxPQVQodmFsdWUpLnZhbHVlKTsKICAJYnJlYWs7CiAgICAgIGNhc2Ug
Q09SQkFfdGtfbG9uZ2xvbmc6CiEgCXN2ID0gbGxfZnJvbV9sb25nbG9uZyAoKENPUkJBX2xvbmdf
bG9uZylJRExfSU5URUdFUih2YWx1ZSkudmFsdWUpOwogIAlicmVhazsKICAgICAgY2FzZSBDT1JC
QV90a191bG9uZ2xvbmc6CiEgCXN2ID0gdWxsX2Zyb21fdWxvbmdsb25nICgoQ09SQkFfdW5zaWdu
ZWRfbG9uZ19sb25nKUlETF9JTlRFR0VSKHZhbHVlKS52YWx1ZSk7CiAgCWJyZWFrOwogIAogICAg
ICBjYXNlIENPUkJBX3RrX3djaGFyOgotLS0gODYwLDg3MiAtLS0tCiAgICAgICAqICAgICAgICBs
b25nIGNvbnN0YW50cyBhcyBmYXIgYXMgSSBjYW4gdGVsbC4KICAgICAgICovCiAgICAgIGNhc2Ug
Q09SQkFfdGtfbG9uZ2RvdWJsZToKISAJc3YgPSBwb3JiaXRfbGRfZnJvbV9sb25nZG91YmxlICgo
Q09SQkFfbG9uZ19kb3VibGUpSURMX0ZMT0FUKHZhbHVlKS52YWx1ZSk7CiAgCWJyZWFrOwogICAg
ICBjYXNlIENPUkJBX3RrX2xvbmdsb25nOgohIAlzdiA9IHBvcmJpdF9sbF9mcm9tX2xvbmdsb25n
ICgoQ09SQkFfbG9uZ19sb25nKUlETF9JTlRFR0VSKHZhbHVlKS52YWx1ZSk7CiAgCWJyZWFrOwog
ICAgICBjYXNlIENPUkJBX3RrX3Vsb25nbG9uZzoKISAJc3YgPSBwb3JiaXRfdWxsX2Zyb21fdWxv
bmdsb25nICgoQ09SQkFfdW5zaWduZWRfbG9uZ19sb25nKUlETF9JTlRFR0VSKHZhbHVlKS52YWx1
ZSk7CiAgCWJyZWFrOwogIAogICAgICBjYXNlIENPUkJBX3RrX3djaGFyOgoqKioqKioqKioqKioq
KioKKioqIDEwMTMsMTAyOCAqKioqCiAgCX0KICAJZ19zbGlzdF9mcmVlIChpZGF0YS0+YXR0cmli
dXRlcyk7CiAgCiEgCWRlc2MtPmJhc2VfaW50ZXJmYWNlcy5fbGVuZ3RoID0gSURMX2xpc3RfbGVu
Z3RoIChpbmhlcml0YW5jZV9zcGVjKTsKISAJZGVzYy0+YmFzZV9pbnRlcmZhY2VzLl9idWZmZXIg
PSAKISAJICAgIENPUkJBX3NlcXVlbmNlX0NPUkJBX1JlcG9zaXRvcnlJZF9hbGxvY2J1ZiAoZGVz
Yy0+YmFzZV9pbnRlcmZhY2VzLl9sZW5ndGgpOwohIAlkZXNjLT5iYXNlX2ludGVyZmFjZXMuX3Jl
bGVhc2UgPSBUUlVFOwohIAohIAlmb3IgKGk9MDsgaTxkZXNjLT5iYXNlX2ludGVyZmFjZXMuX2xl
bmd0aDsgaSsrKSB7CiEgCSAgICBJRExfdHJlZSBpZGVudCA9IElETF9MSVNUIChpbmhlcml0YW5j
ZV9zcGVjKS5kYXRhOwohIAkgICAgCiEgCSAgICBkZXNjLT5iYXNlX2ludGVyZmFjZXMuX2J1ZmZl
cltpXSA9IElETF9JREVOVF9SRVBPX0lEIChpZGVudCk7CiEgCSAgICBpbmhlcml0YW5jZV9zcGVj
ID0gSURMX0xJU1QgKGluaGVyaXRhbmNlX3NwZWMpLm5leHQ7CiAgCX0KICAJCiAgCS8qIFdlIGRv
bid0IG5lZWQgdGhlIGZvbGxvd2luZyBmaWVsZHMgKi8KLS0tIDEwMTYsMTAzOSAtLS0tCiAgCX0K
ICAJZ19zbGlzdF9mcmVlIChpZGF0YS0+YXR0cmlidXRlcyk7CiAgCiEgCWlmIChJRExfbGlzdF9s
ZW5ndGggKGluaGVyaXRhbmNlX3NwZWMpKSB7CiEgCSAgICBkZXNjLT5iYXNlX2ludGVyZmFjZXMu
X2xlbmd0aCA9IElETF9saXN0X2xlbmd0aCAoaW5oZXJpdGFuY2Vfc3BlYyk7CiEgCSAgICBkZXNj
LT5iYXNlX2ludGVyZmFjZXMuX2J1ZmZlciA9IAohIAkJQ09SQkFfc2VxdWVuY2VfQ09SQkFfUmVw
b3NpdG9yeUlkX2FsbG9jYnVmIChkZXNjLT5iYXNlX2ludGVyZmFjZXMuX2xlbmd0aCk7CiEgCSAg
ICBkZXNjLT5iYXNlX2ludGVyZmFjZXMuX3JlbGVhc2UgPSBUUlVFOwohIAohIAkgICAgZm9yIChp
PTA7IGk8ZGVzYy0+YmFzZV9pbnRlcmZhY2VzLl9sZW5ndGg7IGkrKykgewohIAkJSURMX3RyZWUg
aWRlbnQgPSBJRExfTElTVCAoaW5oZXJpdGFuY2Vfc3BlYykuZGF0YTsKISAJCQohIAkJZGVzYy0+
YmFzZV9pbnRlcmZhY2VzLl9idWZmZXJbaV0gPSBJRExfSURFTlRfUkVQT19JRCAoaWRlbnQpOwoh
IAkJaW5oZXJpdGFuY2Vfc3BlYyA9IElETF9MSVNUIChpbmhlcml0YW5jZV9zcGVjKS5uZXh0Owoh
IAkgICAgfQohIAl9IGVsc2UgewohIAkgICAgZGVzYy0+YmFzZV9pbnRlcmZhY2VzLl9sZW5ndGgg
PSAxOwohIAkgICAgZGVzYy0+YmFzZV9pbnRlcmZhY2VzLl9idWZmZXIgPSAKISAJCUNPUkJBX3Nl
cXVlbmNlX0NPUkJBX1JlcG9zaXRvcnlJZF9hbGxvY2J1ZiAoZGVzYy0+YmFzZV9pbnRlcmZhY2Vz
Ll9sZW5ndGgpOwohIAkgICAgZGVzYy0+YmFzZV9pbnRlcmZhY2VzLl9yZWxlYXNlID0gVFJVRTsK
ISAJICAgIGRlc2MtPmJhc2VfaW50ZXJmYWNlcy5fYnVmZmVyWzBdID0gIklETDpDT1JCQS9PYmpl
Y3Q6MS4wIjsKICAJfQogIAkKICAJLyogV2UgZG9uJ3QgbmVlZCB0aGUgZm9sbG93aW5nIGZpZWxk
cyAqLwoqKioqKioqKioqKioqKioKKioqIDEwNzMsMTA3OSAqKioqCiAgfQogIAogIENPUkJBX2Jv
b2xlYW4KISBwb3JiaXRfcGFyc2VfaWRsX2ZpbGUgKGNvbnN0IGNoYXIgKmZpbGUpCiAgewogICAg
SURMX3RyZWUgdHJlZTsKICAgIElETF9ucyBuczsKLS0tIDEwODQsMTA5MSAtLS0tCiAgfQogIAog
IENPUkJBX2Jvb2xlYW4KISBwb3JiaXRfcGFyc2VfaWRsX2ZpbGUgKGNvbnN0IGNoYXIgKmZpbGUs
CiEgCQkgICAgICAgY29uc3QgY2hhciAqaW5jbHVkZXMpCiAgewogICAgSURMX3RyZWUgdHJlZTsK
ICAgIElETF9ucyBuczsKKioqKioqKioqKioqKioqCioqKiAxMDg1LDEwOTEgKioqKgogICAgICog
aXMgI3ByYWdtYSBwdXNoIGluaGliaXQsIHdoaWNoIGJyZWFrcyB1cyBiYWRseSwgc2luY2UKICAg
ICAqIHdlIGNhbid0IHJlbHkgb24gdGhlIGRlZmluaXRpb25zIGluIHNvbWUgQyBsaWJyYXJ5IQog
ICAgICovCiEgICByZXQgPSBJRExfcGFyc2VfZmlsZW5hbWUgKGZpbGUsICIiLCBOVUxMLCAmdHJl
ZSwgJm5zLAogIAkJCSAgICBJRExGX1RZUEVDT0RFUyB8IElETEZfQ09ERUZSQUdTLAogIAkJCSAg
ICBJRExfV0FSTklORzEpOwogIAotLS0gMTA5NywxMTAzIC0tLS0KICAgICAqIGlzICNwcmFnbWEg
cHVzaCBpbmhpYml0LCB3aGljaCBicmVha3MgdXMgYmFkbHksIHNpbmNlCiAgICAgKiB3ZSBjYW4n
dCByZWx5IG9uIHRoZSBkZWZpbml0aW9ucyBpbiBzb21lIEMgbGlicmFyeSEKICAgICAqLwohICAg
cmV0ID0gSURMX3BhcnNlX2ZpbGVuYW1lIChmaWxlLCBpbmNsdWRlcywgTlVMTCwgJnRyZWUsICZu
cywKICAJCQkgICAgSURMRl9UWVBFQ09ERVMgfCBJRExGX0NPREVGUkFHUywKICAJCQkgICAgSURM
X1dBUk5JTkcxKTsKICAKZGlmZiAtYyAtciBDT1JCQS1PUkJpdC0wLjQuMy9pZGwuaCBDT1JCQS1P
UkJpdC0wLjQuNC9pZGwuaAoqKiogQ09SQkEtT1JCaXQtMC40LjMvaWRsLmgJU3VuIEp1bCAgOSAw
MjozMDo0OCAyMDAwCi0tLSBDT1JCQS1PUkJpdC0wLjQuNC9pZGwuaAlUdWUgTWFyIDI2IDE1OjE1
OjUyIDIwMDIKKioqKioqKioqKioqKioqCioqKiAzLDggKioqKgogIAogICNpbmNsdWRlIDxvcmIv
b3JiaXQuaD4KICAKISBDT1JCQV9ib29sZWFuIHBvcmJpdF9wYXJzZV9pZGxfZmlsZSAoY29uc3Qg
Y2hhciAqZmlsZSk7CiAgCiAgI2VuZGlmIC8qIF9fUE9SQklUX0lETF9IX18gKi8KLS0tIDMsOSAt
LS0tCiAgCiAgI2luY2x1ZGUgPG9yYi9vcmJpdC5oPgogIAohIENPUkJBX2Jvb2xlYW4gcG9yYml0
X3BhcnNlX2lkbF9maWxlIChjb25zdCBjaGFyICpmaWxlLCAKISAJCQkJICAgICBjb25zdCBjaGFy
ICppbmNsdWRlcyk7CiAgCiAgI2VuZGlmIC8qIF9fUE9SQklUX0lETF9IX18gKi8KZGlmZiAtYyAt
ciBDT1JCQS1PUkJpdC0wLjQuMy9pbnRlcmZhY2VzLmMgQ09SQkEtT1JCaXQtMC40LjQvaW50ZXJm
YWNlcy5jCioqKiBDT1JCQS1PUkJpdC0wLjQuMy9pbnRlcmZhY2VzLmMJU3VuIEp1bCAgOSAwMzo1
OTo0NiAyMDAwCi0tLSBDT1JCQS1PUkJpdC0wLjQuNC9pbnRlcmZhY2VzLmMJVHVlIE1hciAyNiAx
NToxNTo1MiAyMDAyCioqKioqKioqKioqKioqKgoqKiogMTIwLDEyNSAqKioqCi0tLSAxMjAsMTI2
IC0tLS0KICAKICBYUyhfcG9yYml0X3JlcG9pZCkgewogICAgICBkWFNBUkdTOworICAgICBpZiAo
aXRlbXMgIT0gMSkgY3JvYWsoIlVzYWdlOiBfcmVwb2lkKHNlbGYpIik7CiAgCiAgICAgIFNUKDAp
ID0gKFNWICopQ3ZYU1VCQU5ZKGN2KS5hbnlfcHRyOwogIAoqKioqKioqKioqKioqKioKKioqIDIx
NiwyMjUgKioqKgogIAkgICAgYXZfcHVzaCAoaXNhX2F2LCBuZXdTVnB2KGluZm8tPnBrZywgMCkp
OwogICAgICB9CiAgCi0gICAgIGlmIChkZXNjLT5iYXNlX2ludGVyZmFjZXMuX2xlbmd0aCA9PSAw
KSB7Ci0gCWF2X3B1c2ggKGlzYV9hdiwgbmV3U1ZwdigiQ09SQkE6Ok9iamVjdCIsIDApKTsKLSAg
ICAgfQotIAogICAgICAvKiBTZXQgdXAgdGhlIHNlcnZlciBzaWRlIHBhY2thZ2UKICAgICAgICov
CiAgICAgIHRtcF9zdHIgPSBnX3N0cmNvbmNhdCAoIlBPQV8iLCBpbmZvLT5wa2csICI6OklTQSIs
IE5VTEwpOwotLS0gMjE3LDIyMiAtLS0tCioqKioqKioqKioqKioqKgoqKiogMjc0LDI4MCAqKioq
CiAgCQogIAlmb3IgKGkgPSAwOyBpPGNvbnRlbnRzLT5fbGVuZ3RoOyBpKyspCiAgCSAgICA7CiEg
CSAgICAvL3BvcmJpdF9pbml0X2NvbnN0YW50IChwa2duYW1lLCBjb250ZW50cy0+X2J1ZmZlcltp
XSk7CiAgICAgIH0KICAgICAgQ09SQkFfZnJlZSAoY29udGVudHMpOwogICAgICAKLS0tIDI3MSwy
NzcgLS0tLQogIAkKICAJZm9yIChpID0gMDsgaTxjb250ZW50cy0+X2xlbmd0aDsgaSsrKQogIAkg
ICAgOwohICAgCSAgICAvKiBwb3JiaXRfaW5pdF9jb25zdGFudCAocGtnbmFtZSwgY29udGVudHMt
Pl9idWZmZXJbaV0pOyAqLwogICAgICB9CiAgICAgIENPUkJBX2ZyZWUgKGNvbnRlbnRzKTsKICAg
ICAgCioqKioqKioqKioqKioqKgoqKiogMzA4LDMxNCAqKioqCiAgCiAgfQogIAohIFBPUkJpdElm
YWNlSW5mbyAqCiAgbG9hZF9pbnRlcmZhY2UgKENPUkJBX0ludGVyZmFjZURlZiBpZmFjZSwgQ09S
QkFfRW52aXJvbm1lbnQgKmV2KQogIHsKICAgICAgQ09SQkFfSW50ZXJmYWNlRGVmX0Z1bGxJbnRl
cmZhY2VEZXNjcmlwdGlvbiAqZGVzYzsKLS0tIDMwNSwzMTEgLS0tLQogIAogIH0KICAKISBzdGF0
aWMgUE9SQml0SWZhY2VJbmZvICoKICBsb2FkX2ludGVyZmFjZSAoQ09SQkFfSW50ZXJmYWNlRGVm
IGlmYWNlLCBDT1JCQV9FbnZpcm9ubWVudCAqZXYpCiAgewogICAgICBDT1JCQV9JbnRlcmZhY2VE
ZWZfRnVsbEludGVyZmFjZURlc2NyaXB0aW9uICpkZXNjOwoqKioqKioqKioqKioqKioKKioqIDQw
OCw0MTMgKioqKgotLS0gNDA1LDQxMSAtLS0tCiAgCWxvYWRfY29udGFpbmVyIChjb250YWluZWQs
IHJldHZhbCwgZXYpOwogIAlicmVhazsKICAgICAgZGVmYXVsdDoKKyAgICAgICBicmVhazsKICAg
ICAgfQogIAogICBlcnJvcjoKKioqKioqKioqKioqKioqCioqKiA0NDYsNDUzICoqKioKLS0tIDQ0
NCw0OTMgLS0tLQogIH0KICAKICB2b2lkCisgcG9yYml0X2luaXRfaW50ZXJmYWNlcyAodm9pZCkK
KyB7CisgICAgIENPUkJBX0Vudmlyb25tZW50IGV2OworICAgICAKKyAgICAgQ09SQkFfSW50ZXJm
YWNlRGVmX0Z1bGxJbnRlcmZhY2VEZXNjcmlwdGlvbiAqZGVzYzsKKyAgICAgCisgICAgIGRlc2Mg
PSBnX25ldyAoQ09SQkFfSW50ZXJmYWNlRGVmX0Z1bGxJbnRlcmZhY2VEZXNjcmlwdGlvbiwgMSk7
CisgICAgIGRlc2MtPm5hbWUgPSAiT2JqZWN0IjsKKyAgICAgZGVzYy0+aWQgPSAiSURMOkNPUkJB
L09iamVjdDoxLjAiOworICAgICAKKyAgICAgZGVzYy0+b3BlcmF0aW9ucy5fbWF4aW11bSA9IDA7
CisgICAgIGRlc2MtPm9wZXJhdGlvbnMuX2xlbmd0aCA9IDA7CisgICAgIGRlc2MtPm9wZXJhdGlv
bnMuX2J1ZmZlciA9IE5VTEw7CisgICAgIGRlc2MtPm9wZXJhdGlvbnMuX3JlbGVhc2UgPSBGQUxT
RTsKKyAKKyAgICAgZGVzYy0+YXR0cmlidXRlcy5fbWF4aW11bSA9IDA7CisgICAgIGRlc2MtPmF0
dHJpYnV0ZXMuX2xlbmd0aCA9IDA7CisgICAgIGRlc2MtPmF0dHJpYnV0ZXMuX2J1ZmZlciA9IE5V
TEw7CisgICAgIGRlc2MtPmF0dHJpYnV0ZXMuX3JlbGVhc2UgPSBGQUxTRTsKKyAgICAgCisgICAg
IGRlc2MtPmJhc2VfaW50ZXJmYWNlcy5fbWF4aW11bSA9IDA7CisgICAgIGRlc2MtPmJhc2VfaW50
ZXJmYWNlcy5fbGVuZ3RoID0gMDsKKyAgICAgZGVzYy0+YmFzZV9pbnRlcmZhY2VzLl9idWZmZXIg
PSBOVUxMOworICAgICBkZXNjLT5iYXNlX2ludGVyZmFjZXMuX3JlbGVhc2UgPSBGQUxTRTsKKyAg
ICAgCisgICAgIGRlc2MtPnZlcnNpb24gPSBOVUxMOworICAgICBkZXNjLT5kZWZpbmVkX2luID0g
TlVMTDsKKyAgICAgZGVzYy0+dHlwZSA9IE5VTEw7CisgICAgIAorICAgICBDT1JCQV9leGNlcHRp
b25faW5pdCAoJmV2KTsKKyAgICAgcG9yYml0X2luaXRfaW50ZXJmYWNlIChkZXNjLCAiQ09SQkE6
Ok9iamVjdCIsICZldik7CisgICAgIGlmIChldi5fbWFqb3IgIT0gQ09SQkFfTk9fRVhDRVBUSU9O
KSB7CisgCXdhcm4gKCJSZWdpc3RlcmluZyBpbnRlcmZhY2UgJ0NPUkJBOjpPYmplY3QnIGZhaWxl
ZCFcbiIpOworIAlDT1JCQV9leGNlcHRpb25fZnJlZSAoJmV2KTsKKyAgICAgfQorIH0KKyAKKyB2
b2lkCiAgcG9yYml0X2luaXRfdHlwZWNvZGVzICAodm9pZCkKICB7CisgICAgIHBvcmJpdF9zdG9y
ZV90eXBlY29kZSAoIklETDpDT1JCQS9OdWxsOjEuMCIsCisgCQkJICAgZHVwbGljYXRlX3R5cGVj
b2RlKFRDX251bGwpKTsKKyAgICAgcG9yYml0X3N0b3JlX3R5cGVjb2RlICgiSURMOkNPUkJBL1Zv
aWQ6MS4wIiwKKyAJCQkgICBkdXBsaWNhdGVfdHlwZWNvZGUoVENfdm9pZCkpOwogICAgICBwb3Ji
aXRfc3RvcmVfdHlwZWNvZGUgKCJJREw6Q09SQkEvU2hvcnQ6MS4wIiwgCiAgCQkJICAgZHVwbGlj
YXRlX3R5cGVjb2RlKFRDX0NPUkJBX3Nob3J0KSk7CiAgICAgIHBvcmJpdF9zdG9yZV90eXBlY29k
ZSAoIklETDpDT1JCQS9Mb25nOjEuMCIsIApkaWZmIC1jIC1yIENPUkJBLU9SQml0LTAuNC4zL2lu
dGVyZmFjZXMuaCBDT1JCQS1PUkJpdC0wLjQuNC9pbnRlcmZhY2VzLmgKKioqIENPUkJBLU9SQml0
LTAuNC4zL2ludGVyZmFjZXMuaAlNb24gSmFuICAzIDA2OjE2OjIwIDIwMDAKLS0tIENPUkJBLU9S
Qml0LTAuNC40L2ludGVyZmFjZXMuaAlUdWUgTWFyIDI2IDE1OjE1OjUyIDIwMDIKKioqKioqKioq
KioqKioqCioqKiA0Nyw1MiAqKioqCi0tLSA0Nyw1NiAtLS0tCiAgICovCiAgdm9pZCAgICAgIHBv
cmJpdF9zdG9yZV90eXBlY29kZSAgKGNvbnN0IGNoYXIgKnJlcG9pZCwgQ09SQkFfVHlwZUNvZGUg
dGMpOwogIAorIC8qIEluaXRpYWxpemUgaW50ZXJmYWNlIGRlc2NyaXB0aW9ucyBmb3IgdGhlIHN0
YW5kYXJkIHR5cGVzCisgICovCisgdm9pZCBwb3JiaXRfaW5pdF9pbnRlcmZhY2VzICh2b2lkKTsK
KyAKICAvKiBJbml0aWFsaXplIHR5cGVjb2RlcyBmb3IgdGhlIHN0YW5kYXJkIHR5cGVzCiAgICov
CiAgdm9pZCAgICAgIHBvcmJpdF9pbml0X3R5cGVjb2RlcyAgKHZvaWQpOwpkaWZmIC1jIC1yIENP
UkJBLU9SQml0LTAuNC4zL21hcnNoYWwuYyBDT1JCQS1PUkJpdC0wLjQuNC9tYXJzaGFsLmMKKioq
IENPUkJBLU9SQml0LTAuNC4zL21hcnNoYWwuYwlTdW4gTWFyIDI2IDA0OjIzOjIwIDIwMDAKLS0t
IENPUkJBLU9SQml0LTAuNC40L21hcnNoYWwuYwlUdWUgTWFyIDI2IDE1OjE1OjUyIDIwMDIKKioq
KioqKioqKioqKioqCioqKiAyMTAsMjIwICoqKioKICAgICAgCiAgICAgIENPUkJBX3Vuc2lnbmVk
X2xvbmcgbGVuLCBpOwogIAohICAgICAvKiBnZXQgbGVuZ3RoLCBjaGVjayB0eXBlIChGSVhNRTog
b2ZmIGJ5IG9uZT8/PykKISAgICAgICovCiAgICAgIGlmICh0Yy0+c3VidHlwZXNbMF0tPmtpbmQg
PT0gQ09SQkFfdGtfb2N0ZXQgfHwKICAJdGMtPnN1YnR5cGVzWzBdLT5raW5kID09IENPUkJBX3Rr
X2NoYXIpIHsKLSAKICAJbGVuID0gU3ZDVVIoc3YpOwogICAgICB9IGVsc2UgewogIAlpZiAoIVN2
Uk9LKHN2KSB8fCAoU3ZUWVBFKFN2UlYoc3YpKSAhPSBTVnRfUFZBVikpIHsKLS0tIDIxMCwyMTgg
LS0tLQogICAgICAKICAgICAgQ09SQkFfdW5zaWduZWRfbG9uZyBsZW4sIGk7CiAgCiEgICAgIC8q
IGdldCBsZW5ndGgsIGNoZWNrIHR5cGUgKi8KICAgICAgaWYgKHRjLT5zdWJ0eXBlc1swXS0+a2lu
ZCA9PSBDT1JCQV90a19vY3RldCB8fAogIAl0Yy0+c3VidHlwZXNbMF0tPmtpbmQgPT0gQ09SQkFf
dGtfY2hhcikgewogIAlsZW4gPSBTdkNVUihzdik7CiAgICAgIH0gZWxzZSB7CiAgCWlmICghU3ZS
T0soc3YpIHx8IChTdlRZUEUoU3ZSVihzdikpICE9IFNWdF9QVkFWKSkgewoqKioqKioqKioqKioq
KioKKioqIDMwMywzMDkgKioqKgogIHN0YXRpYyBjb25zdCBjaGFyICpzdGF0dXNfc3VibmFtZXNb
XSA9IHsgIkNPTVBMRVRFRF9ZRVMiLCAiQ09NUExFVEVEX05PIiwgIkNPTVBMRVRFRF9NQVlCRSIg
fTsKICAKICBzdGF0aWMgc3RydWN0IENPUkJBX1R5cGVDb2RlX3N0cnVjdCBzdGF0dXNfdHlwZWNv
ZGUgPSB7CiEgICAge30sIENPUkJBX3RrX2VudW0sIE5VTEwsIE5VTEwsIDAsIDMsIHN0YXR1c19z
dWJuYW1lcwogIH07CiAgCiAgc3RhdGljIGNvbnN0IGNoYXIgKnN5c2V4X3N1Ym5hbWVzW10gPSB7
ICItbWlub3IiLCAiLXN0YXR1cyIgfTsKLS0tIDMwMSwzMDcgLS0tLQogIHN0YXRpYyBjb25zdCBj
aGFyICpzdGF0dXNfc3VibmFtZXNbXSA9IHsgIkNPTVBMRVRFRF9ZRVMiLCAiQ09NUExFVEVEX05P
IiwgIkNPTVBMRVRFRF9NQVlCRSIgfTsKICAKICBzdGF0aWMgc3RydWN0IENPUkJBX1R5cGVDb2Rl
X3N0cnVjdCBzdGF0dXNfdHlwZWNvZGUgPSB7CiEgICAgeyAwIH0sIENPUkJBX3RrX2VudW0sIE5V
TEwsIE5VTEwsIDAsIDMsIHN0YXR1c19zdWJuYW1lcwogIH07CiAgCiAgc3RhdGljIGNvbnN0IGNo
YXIgKnN5c2V4X3N1Ym5hbWVzW10gPSB7ICItbWlub3IiLCAiLXN0YXR1cyIgfTsKKioqKioqKioq
KioqKioqCioqKiAzMTEsMzE3ICoqKioKICBzdGF0aWMgQ09SQkFfVHlwZUNvZGUgc3lzZXhfc3Vi
dHlwZXNbXSA9IHsgKENPUkJBX1R5cGVDb2RlKVRDX0NPUkJBX3Vsb25nLCAmc3RhdHVzX3R5cGVj
b2RlIH07CiAgCiAgc3RhdGljIHN0cnVjdCBDT1JCQV9UeXBlQ29kZV9zdHJ1Y3Qgc3lzZXhfdHlw
ZWNvZGUgPSB7CiEgICAgIHt9LCBDT1JCQV90a19leGNlcHQsIE5VTEwsIE5VTEwsIDAsIDIsIHN5
c2V4X3N1Ym5hbWVzLCBzeXNleF9zdWJ0eXBlcwogIH07CiAgCiAgU1YgKgotLS0gMzA5LDMxNSAt
LS0tCiAgc3RhdGljIENPUkJBX1R5cGVDb2RlIHN5c2V4X3N1YnR5cGVzW10gPSB7IChDT1JCQV9U
eXBlQ29kZSlUQ19DT1JCQV91bG9uZywgJnN0YXR1c190eXBlY29kZSB9OwogIAogIHN0YXRpYyBz
dHJ1Y3QgQ09SQkFfVHlwZUNvZGVfc3RydWN0IHN5c2V4X3R5cGVjb2RlID0gewohICAgICB7IDAg
fSwgQ09SQkFfdGtfZXhjZXB0LCBOVUxMLCBOVUxMLCAwLCAyLCBzeXNleF9zdWJuYW1lcywgc3lz
ZXhfc3VidHlwZXMKICB9OwogIAogIFNWICoKKioqKioqKioqKioqKioqCioqKiAzOTgsNDA0ICoq
KioKICAKICAvKiBUaGlzIHdpbGwgbmV2ZXIgZ2V0IHVzZWQsIGJ1dCB3ZSBzdXBwbHkgaXQganVz
dCBpbiBjYXNlCiAgICovCiEgQ09SQkFfYm9vbGVhbgogIHB1dF9leGNlcHQgKEdJT1BTZW5kQnVm
ZmVyICpidWYsIENPUkJBX1R5cGVDb2RlIHRjLCBTViAqc3YpCiAgewogICAgICBTViAqZXJyb3Jf
c3YgPSBwb3JiaXRfcHV0X2V4Y2VwdGlvbiAoYnVmLCB0Yywgc3YsIE5VTEwpOwotLS0gMzk2LDQw
MiAtLS0tCiAgCiAgLyogVGhpcyB3aWxsIG5ldmVyIGdldCB1c2VkLCBidXQgd2Ugc3VwcGx5IGl0
IGp1c3QgaW4gY2FzZQogICAqLwohIHN0YXRpYyBDT1JCQV9ib29sZWFuCiAgcHV0X2V4Y2VwdCAo
R0lPUFNlbmRCdWZmZXIgKmJ1ZiwgQ09SQkFfVHlwZUNvZGUgdGMsIFNWICpzdikKICB7CiAgICAg
IFNWICplcnJvcl9zdiA9IHBvcmJpdF9wdXRfZXhjZXB0aW9uIChidWYsIHRjLCBzdiwgTlVMTCk7
CioqKioqKioqKioqKioqKgoqKiogNDE0LDQ0MSAqKioqCiAgcHV0X29ianJlZiAoR0lPUFNlbmRC
dWZmZXIgKmJ1ZiwgQ09SQkFfVHlwZUNvZGUgdGMsIFNWICpzdikKICB7CiAgICAgIENPUkJBX09i
amVjdCBvYmo7Ci0gICAgIFBPUkJpdElmYWNlSW5mbyAqaW5mbyA9IHBvcmJpdF9maW5kX2ludGVy
ZmFjZV9kZXNjcmlwdGlvbiAodGMtPnJlcG9faWQpOwogIAotICAgICBpZiAoIWluZm8pCi0gCWNy
b2FrICgiQXR0ZW1wdCB0byBtYXJzaGFsbCB1bmtub3duIG9iamVjdCB0eXBlIik7Ci0gICAgIAog
ICAgICBpZiAoIVN2T0soc3YpKQogIAlvYmogPSBDT1JCQV9PQkpFQ1RfTklMOwogICAgICBlbHNl
IHsKISAJLyogRklYTUU6IFRoaXMgY2hlY2sgaXNuJ3QgcmlnaHQgYXQgYWxsIGlmIHRoZSBvYmpl
Y3QKISAJICogaXMgb2YgYW4gdW5rbm93biB0eXBlLiAoT3IgaWYgdGhlIHR5cGUgd2UgaGF2ZQoh
IAkgKiBmb3IgdGhlIG9iamVjdCBpcyBub3QgdGhlIG1vc3QgZGVyaXZlZCB0eXBlLikKISAJICog
V2Ugc2hvdWxkIGNhbGwgdGhlIHNlcnZlciBzaWRlIElTQSBhbmQgdGhlbgohIAkgKiBkb3duY2Fz
dCBpbiB0aGlzIGNhc2U/CiEgCSAqLwohIAlpZiAoIXN2X2Rlcml2ZWRfZnJvbSAoc3YsIGluZm8t
PnBrZykpIHsKISAJICAgIHdhcm4gKCJWYWx1ZSBpcyBub3QgYSAlcyIsIGluZm8tPnBrZyk7CiAg
CSAgICByZXR1cm4gQ09SQkFfRkFMU0U7CiAgCX0KICAKISAJb2JqID0gKENPUkJBX09iamVjdClT
dklWKChTViopU3ZSVihzdikpOwogICAgICB9CiEgICAgIAogICAgICBPUkJpdF9tYXJzaGFsX29i
amVjdCAoYnVmLCBvYmopOwogICAgICByZXR1cm4gQ09SQkFfVFJVRTsKICB9Ci0tLSA0MTIsNDI5
IC0tLS0KICBwdXRfb2JqcmVmIChHSU9QU2VuZEJ1ZmZlciAqYnVmLCBDT1JCQV9UeXBlQ29kZSB0
YywgU1YgKnN2KQogIHsKICAgICAgQ09SQkFfT2JqZWN0IG9iajsKICAKICAgICAgaWYgKCFTdk9L
KHN2KSkKICAJb2JqID0gQ09SQkFfT0JKRUNUX05JTDsKICAgICAgZWxzZSB7CiEgCWlmICghc3Zf
ZGVyaXZlZF9mcm9tKHN2LCAiQ09SQkE6Ok9iamVjdCIpKSB7CiEgCSAgICB3YXJuKCJub3QgYW4g
b2JqZWN0IHJlZmVyZW5jZSIpOwogIAkgICAgcmV0dXJuIENPUkJBX0ZBTFNFOwogIAl9CiAgCiEg
CW9iaiA9IChDT1JCQV9PYmplY3QpU3ZJVigoU1YgKilTdlJWKHN2KSk7CiAgICAgIH0KISAKICAg
ICAgT1JCaXRfbWFyc2hhbF9vYmplY3QgKGJ1Ziwgb2JqKTsKICAgICAgcmV0dXJuIENPUkJBX1RS
VUU7CiAgfQpkaWZmIC1jIC1yIENPUkJBLU9SQml0LTAuNC4zL3NlcnZlciBDT1JCQS1PUkJpdC0w
LjQuNC9zZXJ2ZXIKKioqIENPUkJBLU9SQml0LTAuNC4zL3NlcnZlcglTdW4gTWFyIDI2IDA0OjIz
OjIwIDIwMDAKLS0tIENPUkJBLU9SQml0LTAuNC40L3NlcnZlcglUdWUgTWFyIDI2IDE1OjE1OjUy
IDIwMDIKKioqKioqKioqKioqKioqCioqKiAxLDYgKioqKgogICMhL3Vzci9iaW4vcGVybCAtdwog
IAohIHVzZSBDT1JCQTo6T1JCaXQgaWRsID0+IFsgcXcoQWNjb3VudC5pZGwpIF07CiAgCiAgbXkg
QHNlcnZlcnM7CiAgCi0tLSAxLDYgLS0tLQogICMhL3Vzci9iaW4vcGVybCAtdwogIAohIHVzZSBD
T1JCQTo6T1JCaXQgaWRsX3BhdGggPT4gJElETF9QQVRILCBpZGwgPT4gWyBxdyhBY2NvdW50Lmlk
bCkgXTsKICAKICBteSBAc2VydmVyczsKICAKKioqKioqKioqKioqKioqCioqKiAxMjQsMTI5ICoq
KioKLS0tIDEyNCwxMzUgLS0tLQogICAgICAkYSskYjsKICB9CiAgCisgc3ViIGVjaG9fb2JqZWN0
IHsKKyAgICAgbXkgKCRzZWxmLCAkb2JqKSA9IEBfOworIAorICAgICAkb2JqOworIH0KKyAKICAj
IFBvc3NpYmxlIGFsdGVybmF0aXZlIG1hcHBpbmcKICAjCiAgI3N1YiBwcmVmcyB7CioqKioqKioq
KioqKioqKgoqKiogMTU1LDE2MCAqKioqCi0tLSAxNjEsMTY5IC0tLS0KICB1c2UgRXJyb3IgcXco
OnRyeSk7CiAgCiAgJG9yYiA9IENPUkJBOjpPUkJfaW5pdCgib3JiaXQtbG9jYWwtb3JiIik7Cisg
CisgcHJpbnQgIkluaXRpYWwgc2VydmljZXM6ICIsIGpvaW4gKCIgIiwgQHskb3JiLT5saXN0X2lu
aXRpYWxfc2VydmljZXN9KSwgIlxuIjsKKyAKICAkcG9hID0gJG9yYi0+cmVzb2x2ZV9pbml0aWFs
X3JlZmVyZW5jZXMoIlJvb3RQT0EiKTsKICAKICAjIENyZWF0ZSB0aGUgbWFpbiBzZXJ2ZXIgb2Jq
ZWN0CioqKioqKioqKioqKioqKgoqKiogMTY1LDE3NCAqKioqCiAgJGlkID0gJHBvYS0+YWN0aXZh
dGVfb2JqZWN0ICgkc2VydmFudCk7CiAgJHJlZiA9ICRvcmItPm9iamVjdF90b19zdHJpbmcgKCRw
b2EtPmlkX3RvX3JlZmVyZW5jZSAoJGlkKSk7CiAgCiEgIyBUaGUgZm9sbG93aW5nIGNhdXNlcyBh
IHNlZ21lbnRhdGlvbiBmYXVsdCB3aXRoaW4gT1JCaXQsIHdoaWNoCiEgIyBpcyBpbmNvcnJlY3Qu
IEl0IHNob3VsZCB0aHJvdyBhIEludmFsaWRQb2xpY3kgZXhjZXB0aW9uLCBJIHRoaW5rLgohICMg
JHNlcnZhbnQgPSAkcG9hLT5zZXJ2YW50X3RvX3JlZmVyZW5jZSAoJHNlcnZhbnQpOwohICMgJHJl
ZiA9ICRvcmItPm9iamVjdF90b19zdHJpbmcgKCRzZXJ2YW50KTsKICAKICBvcGVuIChPVVQsICI+
YWNjb3VudC5yZWYiKTsKICBwcmludCBPVVQgJHJlZjsKLS0tIDE3NCwxODMgLS0tLQogICRpZCA9
ICRwb2EtPmFjdGl2YXRlX29iamVjdCAoJHNlcnZhbnQpOwogICRyZWYgPSAkb3JiLT5vYmplY3Rf
dG9fc3RyaW5nICgkcG9hLT5pZF90b19yZWZlcmVuY2UgKCRpZCkpOwogIAohICMgVGhlIGZvbGxv
d2luZyBpcyBzaW1wbGVyIGFuZCB3b3JrcyBhcyBvZiAwLjUuNwohICMKISAjJG9ianJlZiA9ICRw
b2EtPnNlcnZhbnRfdG9fcmVmZXJlbmNlICgkc2VydmFudCk7CiEgIyRyZWYgPSAkb3JiLT5vYmpl
Y3RfdG9fc3RyaW5nICgkb2JqcmVmKTsKICAKICBvcGVuIChPVVQsICI+YWNjb3VudC5yZWYiKTsK
ICBwcmludCBPVVQgJHJlZjsKKioqKioqKioqKioqKioqCioqKiAxODAsMTg1ICoqKioKICAKICBw
cmludCAiVGhlIGRhaWx5IG1heGltdW0gaXM6ICIsIEFjY291bnQ6OkRBSUxZX01BWCwgIlxuIjsK
ICAKISAkb3JiLT5ydW4gKCk7CiAgCiAgZXhpdCAoMCk7CQkJIyBOZXZlciByZWFjaGVkCi0tLSAx
ODksMjI2IC0tLS0KICAKICBwcmludCAiVGhlIGRhaWx5IG1heGltdW0gaXM6ICIsIEFjY291bnQ6
OkRBSUxZX01BWCwgIlxuIjsKICAKISBteSAkYSA9IDk7CiEgbXkgJHNvdXJjZTsKISAkc291cmNl
ID0gJG9yYi0+YWRkX3RpbWVvdXQgKHRpbWVvdXQgPT4gMTAwMCwgCiEgCQkJICAgICBjYiA9PiBb
IHN1YiB7IAohIAkJCQkJICRyYSA9IHNoaWZ0OyAKISAJCQkJCSAkJHJhLS07IHByaW50ICJDb3Vu
dGluZyAkJHJhXG4iOwohIAkJCQkJIGlmICgkJHJhID09IDEpIHsKISAJCQkJCSAgICAgJHNvdXJj
ZS0+ZGVzdHJveTsKISAJCQkJCSAgICAgdW5kZWYgJHNvdXJjZTsKISAJCQkJCSB9CiEgCQkJCQkg
JCRyYTsgCiEgCQkJCSAgICAgfSwgXCRhIF0pOwohIAohIHN1YiBzeXNlY2hvIAohIHsKISAgICAg
bXkgKCRmaWxlMSwgJGZpbGUyKSA9IEBfOwohICAgICBteSAkYnVmOwohIAohICAgICAkY291bnQg
PSBzeXNyZWFkICgkZmlsZTEsICRidWYsIDEwMjQpOwohICAgICBwcmludCAkZmlsZTIgJGJ1ZjsK
ISAKISAgICAgaWYgKCRjb3VudCA9PSAwKSB7CiEgCXByaW50ICRmaWxlMiAiRU9GXG4iOwohICAg
ICB9CiEgICAgIAohICAgICAkY291bnQ7CiEgfQohIAohICRvcmItPmFkZF9pb193YXRjaCAoZmQg
PT4gZmlsZW5vIChTVERJTiksCiEgCQkgICAgY29uZGl0aW9uID0+IENPUkJBOjpPUkJpdDo6SU9f
SU4gfCBDT1JCQTo6T1JCaXQ6OklPX0hVUCwKISAJCSAgICBjYiA9PiBzdWIgeyBzeXNlY2hvIChc
KlNURElOLCBcKlNURE9VVCk7IH0pOwohIAohICRvcmItPnJ1bigpOwogIAogIGV4aXQgKDApOwkJ
CSMgTmV2ZXIgcmVhY2hlZApkaWZmIC1jIC1yIENPUkJBLU9SQml0LTAuNC4zL3NlcnZlci5jIENP
UkJBLU9SQml0LTAuNC40L3NlcnZlci5jCioqKiBDT1JCQS1PUkJpdC0wLjQuMy9zZXJ2ZXIuYwlX
ZWQgT2N0IDI1IDE2OjQ1OjE5IDIwMDAKLS0tIENPUkJBLU9SQml0LTAuNC40L3NlcnZlci5jCVR1
ZSBNYXIgMjYgMTU6MTU6NTIgMjAwMgoqKioqKioqKioqKioqKioKKioqIDEzMSwxMzYgKioqKgot
LS0gMTMxLDE2NyAtLS0tCiAgICAgIHJldHVybiByZXN1bHQ7CiAgfQogIAorIHN0YXRpYyBnYm9v
bGVhbgorIGlzX2FfcmVjdXJzZSAoQ09SQkFfSW50ZXJmYWNlRGVmX0Z1bGxJbnRlcmZhY2VEZXNj
cmlwdGlvbiAqZGVzYywKKyAJICAgICAgY29uc3QgY2hhciAqcmVwb19pZCkKKyB7CisgICAgIENP
UkJBX3Vuc2lnbmVkX2xvbmcgaTsKKyAgICAgIAorICAgICBpZiAoc3RyY21wIChkZXNjLT5pZCwg
cmVwb19pZCkgPT0gMCkKKyAJcmV0dXJuIFRSVUU7CisgCisgICAgIGZvciAoaSA9IDA7IGkgPCBk
ZXNjLT5iYXNlX2ludGVyZmFjZXMuX2xlbmd0aDsgaSsrKSB7CisgICAgICAgICBQT1JCaXRJZmFj
ZUluZm8gKmluZm8gPSBwb3JiaXRfZmluZF9pbnRlcmZhY2VfZGVzY3JpcHRpb24oZGVzYy0+YmFz
ZV9pbnRlcmZhY2VzLl9idWZmZXJbaV0pOworIAlpZiAoaW5mbykgeworIAkgICAgaWYgKGlzX2Ff
cmVjdXJzZShpbmZvLT5kZXNjLCByZXBvX2lkKSkKKyAJCXJldHVybiBUUlVFOworIAl9CisgICAg
IH0KKyAKKyAgICAgcmV0dXJuIEZBTFNFOworIH0KKyAKKyBnYm9vbGVhbgorIHBvcmJpdF9zZXJ2
YW50X2lzX2EgKFNWICpwZXJsb2JqLCBjb25zdCBjaGFyICpyZXBvX2lkKQorIHsKKyAgICAgUE9S
Qml0SW5zdFZhcnMgKml2OworICAgICBQT1JCaXRTZXJ2YW50ICpzZXJ2YW50OworIAorICAgICBp
diA9IHBvcmJpdF9pbnN0dmFyc19nZXQgKHBlcmxvYmopOworICAgICBzZXJ2YW50ID0gKFBPUkJp
dFNlcnZhbnQgKilpdi0+c2VydmFudDsKKyAKKyAgICAgcmV0dXJuIGlzX2FfcmVjdXJzZSAoc2Vy
dmFudC0+ZGVzYywgcmVwb19pZCk7CisgfQogIAogIHN0YXRpYyBQb3J0YWJsZVNlcnZlcl9TZXJ2
YW50CiAgcG9yYml0X2dldF9vcmJpdF9zZXJ2YW50IChTViAqcGVybG9iaikKKioqKioqKioqKioq
KioqCioqKiAzNDksMzU3ICoqKioKICAJCSAgICBpbm91dF9hcmdzID0gbmV3QVYoKTsKICAJICAg
IAogIAkJYXZfcHVzaChpbm91dF9hcmdzLGFyZyk7CiEgCQlYUFVTSHMoc3ZfMm1vcnRhbChuZXdS
Vl9ub2luYyhhcmcpKSk7CiEgCiEgCQlyZXR1cm5faXRlbXMrKzsKICAJICAgIH0gZWxzZSB7CiAg
CQlYUFVTSHMoc3ZfMm1vcnRhbChhcmcpKTsKICAJICAgIH0KLS0tIDM4MCwzODYgLS0tLQogIAkJ
ICAgIGlub3V0X2FyZ3MgPSBuZXdBVigpOwogIAkgICAgCiAgCQlhdl9wdXNoKGlub3V0X2FyZ3Ms
YXJnKTsKISAJCVhQVVNIcyhzdl8ybW9ydGFsKG5ld1JWX2luYyhhcmcpKSk7CiAgCSAgICB9IGVs
c2UgewogIAkJWFBVU0hzKHN2XzJtb3J0YWwoYXJnKSk7CiAgCSAgICB9CioqKioqKioqKioqKioq
KgoqKiogMzYzLDM4MCAqKioqCiAgICAgIFBVVEJBQ0s7CiAgICAgIGVycm9yX3N2ID0gcG9yYml0
X2NhbGxfbWV0aG9kIChzZXJ2YW50LCBuYW1lLCByZXR1cm5faXRlbXMpOwogICAgICBpZiAoZXJy
b3Jfc3YpCiEgCWdvdG8gY2xlYW51cDsKICAKICAgICAgLyogVGhlIGNhbGwgc3VjY2VlZGVkIC0t
IGRlY29kZSB0aGUgcmVzdWx0cyAqLwogIAogICAgICBTUEFHQUlOOwohICAgICBzcCAtPSByZXR1
cm5faXRlbXM7CiEgICAgIFBVVEJBQ0s7CiEgICAgIAohICAgICBpZiAoIXJlY3ZfYnVmZmVyLT5t
ZXNzYWdlLnUucmVxdWVzdC5yZXNwb25zZV9leHBlY3RlZCkgewohIAkvKiBGSVhNRTogZnJlZSBz
dGFjayBpdGVtcyAqLwogIAlnb3RvIGNsZWFudXA7Ci0gICAgIH0KICAKICAgICAgc2VuZF9idWZm
ZXIgPSBnaW9wX3NlbmRfcmVwbHlfYnVmZmVyX3VzZShHSU9QX01FU1NBR0VfQlVGRkVSKHJlY3Zf
YnVmZmVyKS0+Y29ubmVjdGlvbiwKICAJCQkJCSAgICAgTlVMTCwKLS0tIDM5Miw0MDUgLS0tLQog
ICAgICBQVVRCQUNLOwogICAgICBlcnJvcl9zdiA9IHBvcmJpdF9jYWxsX21ldGhvZCAoc2VydmFu
dCwgbmFtZSwgcmV0dXJuX2l0ZW1zKTsKICAgICAgaWYgKGVycm9yX3N2KQohIAlnb3RvIGNsZWFu
MjsKICAKICAgICAgLyogVGhlIGNhbGwgc3VjY2VlZGVkIC0tIGRlY29kZSB0aGUgcmVzdWx0cyAq
LwogIAogICAgICBTUEFHQUlOOwohIAohICAgICBpZiAoIXJlY3ZfYnVmZmVyLT5tZXNzYWdlLnUu
cmVxdWVzdC5yZXNwb25zZV9leHBlY3RlZCkKICAJZ290byBjbGVhbnVwOwogIAogICAgICBzZW5k
X2J1ZmZlciA9IGdpb3Bfc2VuZF9yZXBseV9idWZmZXJfdXNlKEdJT1BfTUVTU0FHRV9CVUZGRVIo
cmVjdl9idWZmZXIpLT5jb25uZWN0aW9uLAogIAkJCQkJICAgICBOVUxMLAoqKioqKioqKioqKioq
KioKKioqIDM4OCwzOTMgKioqKgotLS0gNDEzLDQyMCAtLS0tCiAgICAgIAogICAgICBzdGFja19p
bmRleCA9IDE7CiAgICAgIGlub3V0X2luZGV4ID0gMDsKKyAKKyAKICAgICAgZm9yIChpID0gMDsg
aSA8IG5wYXJhbXM7IGkrKykgewogIAlDT1JCQV9ib29sZWFuIHN1Y2Nlc3M7CiAgCQoqKioqKioq
KioqKioqKioKKioqIDM5NSw0MDEgKioqKgogIAljYXNlIENPUkJBX1BBUkFNX0lOOgogIAkgICAg
Y29udGludWU7CiAgCWNhc2UgQ09SQkFfUEFSQU1fT1VUOgohIAkgICAgc3VjY2VzcyA9IHBvcmJp
dF9wdXRfc3YgKHNlbmRfYnVmZmVyLCBwYXJhbXNbaV0udHlwZSwgKihzcCtzdGFja19pbmRleCsr
KSk7CiAgCSAgICBicmVhazsKICAJY2FzZSBDT1JCQV9QQVJBTV9JTk9VVDoKICAJICAgIHN1Y2Nl
c3MgPSBwb3JiaXRfcHV0X3N2IChzZW5kX2J1ZmZlciwgcGFyYW1zW2ldLnR5cGUsICphdl9mZXRj
aChpbm91dF9hcmdzLCBpbm91dF9pbmRleCsrLCAwKSk7Ci0tLSA0MjIsNDI4IC0tLS0KICAJY2Fz
ZSBDT1JCQV9QQVJBTV9JTjoKICAJICAgIGNvbnRpbnVlOwogIAljYXNlIENPUkJBX1BBUkFNX09V
VDoKISAJICAgIHN1Y2Nlc3MgPSBwb3JiaXRfcHV0X3N2IChzZW5kX2J1ZmZlciwgcGFyYW1zW2ld
LnR5cGUsICooc3AtcmV0dXJuX2l0ZW1zK3N0YWNrX2luZGV4KyspKTsKICAJICAgIGJyZWFrOwog
IAljYXNlIENPUkJBX1BBUkFNX0lOT1VUOgogIAkgICAgc3VjY2VzcyA9IHBvcmJpdF9wdXRfc3Yg
KHNlbmRfYnVmZmVyLCBwYXJhbXNbaV0udHlwZSwgKmF2X2ZldGNoKGlub3V0X2FyZ3MsIGlub3V0
X2luZGV4KyssIDApKTsKKioqKioqKioqKioqKioqCioqKiA0MTMsNDE4ICoqKioKLS0tIDQ0MCw0
NDkgLS0tLQogICAgICBnaW9wX3NlbmRfYnVmZmVyX3dyaXRlIChzZW5kX2J1ZmZlcik7CiAgCiAg
IGNsZWFudXA6CisgICAgIHNwIC09IHJldHVybl9pdGVtczsKKyAgICAgUFVUQkFDSzsKKyAKKyAg
Y2xlYW4yOgogICAgICBpZiAoaW5vdXRfYXJncykgewogIAlhdl91bmRlZiAoaW5vdXRfYXJncyk7
CiAgCWlub3V0X2FyZ3MgPSBOVUxMOwoqKioqKioqKioqKioqKioKKioqIDU2OSw1NzUgKioqKgog
ICAgICByZXR1cm4gTlVMTDsKICB9CiAgCiEgQ09SQkFfQXR0cmlidXRlRGVzY3JpcHRpb24gKgog
IGZpbmRfYXR0cmlidXRlIChDT1JCQV9JbnRlcmZhY2VEZWZfRnVsbEludGVyZmFjZURlc2NyaXB0
aW9uICpkLAogIAkJY29uc3QgY2hhciAqbmFtZSwgYm9vbCBzZXQpIAogIHsKLS0tIDYwMCw2MDYg
LS0tLQogICAgICByZXR1cm4gTlVMTDsKICB9CiAgCiEgc3RhdGljIENPUkJBX0F0dHJpYnV0ZURl
c2NyaXB0aW9uICoKICBmaW5kX2F0dHJpYnV0ZSAoQ09SQkFfSW50ZXJmYWNlRGVmX0Z1bGxJbnRl
cmZhY2VEZXNjcmlwdGlvbiAqZCwKICAJCWNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgc2V0KSAKICB7
CioqKioqKioqKioqKioqKgoqKiogNTkyLDU5OCAqKioqCiAgICAgIHJldHVybiBOVUxMOwogIH0K
ICAKLSAKICBzdGF0aWMgT1JCaXRTa2VsZXRvbgogIHBvcmJpdF9nZXRfc2tlbCAoUE9SQml0U2Vy
dmFudCAgKnNlcnZhbnQsCiAgCQkgR0lPUFJlY3ZCdWZmZXIgKnJlY3ZfYnVmZmVyLAotLS0gNjIz
LDYyOCAtLS0tCioqKioqKioqKioqKioqKgoqKiogNjIwLDYyNiAqKioqCiAgCSAgICAqaW1wbCA9
IG9wX2Rlc2M7CiAgCSAgICByZXR1cm4gKE9SQml0U2tlbGV0b24pcG9yYml0X29wZXJhdGlvbl9z
a2VsOwogIAl9CiEgICAgIH0KICAKICAgICByZXR1cm4gKE9SQml0U2tlbGV0b24pTlVMTDsKICB9
ICAKLS0tIDY1MCw2NTYgLS0tLQogIAkgICAgKmltcGwgPSBvcF9kZXNjOwogIAkgICAgcmV0dXJu
IChPUkJpdFNrZWxldG9uKXBvcmJpdF9vcGVyYXRpb25fc2tlbDsKICAJfQohICAgICB9IAogIAog
ICAgIHJldHVybiAoT1JCaXRTa2VsZXRvbilOVUxMOwogIH0gIApkaWZmIC1jIC1yIENPUkJBLU9S
Qml0LTAuNC4zL3NlcnZlci5oIENPUkJBLU9SQml0LTAuNC40L3NlcnZlci5oCioqKiBDT1JCQS1P
UkJpdC0wLjQuMy9zZXJ2ZXIuaAlTdW4gTWFyIDI2IDA0OjIzOjIwIDIwMDAKLS0tIENPUkJBLU9S
Qml0LTAuNC40L3NlcnZlci5oCVR1ZSBNYXIgMjYgMTU6MTU6NTIgMjAwMgoqKioqKioqKioqKioq
KioKKioqIDE5LDI1ICoqKioKICAgKi8KICBzdHJ1Y3QgX1BPUkJpdEluc3RWYXJzCiAgewohICAg
ICBVMzIgbWFnaWM7CSAgICAgICAgICAgICAgICAvLyAweDE4OTgxOTcyIAogICAgICBQb3J0YWJs
ZVNlcnZlcl9TZXJ2YW50IHNlcnZhbnQ7CiAgfTsKICAKLS0tIDE5LDI1IC0tLS0KICAgKi8KICBz
dHJ1Y3QgX1BPUkJpdEluc3RWYXJzCiAgewohICAgICBVMzIgbWFnaWM7CSAgICAgICAgICAgICAg
ICAvKiAweDE4OTgxOTcyICovCiAgICAgIFBvcnRhYmxlU2VydmVyX1NlcnZhbnQgc2VydmFudDsK
ICB9OwogIAoqKioqKioqKioqKioqKioKKioqIDQ0LDUxICoqKioKICAKICBQT1JCaXRTZXJ2YW50
ICAgICpwb3JiaXRfc2VydmFudF9jcmVhdGUgICAoU1YgICAgICAgICAgICAgICAgKnBlcmxvYmos
CiAgCQkJCQkgICBDT1JCQV9FbnZpcm9ubWVudCAqZXYpOwohIHZvaWQgICAgICAgICAgICAgIHBv
cmJpdF9zZXJ2YW50X2Rlc3Ryb3kgIChQT1JCaXRTZXJ2YW50ICAgICAgKnNlcnZhbnQsCiEgCQkJ
CQkgICBDT1JCQV9FbnZpcm9ubWVudCAgKmV2KTsKICAKICAvKiBDb252ZXJ0IGJldHdlZW4gU1Yg
KiBhbmQgUG9ydGFibGVTZXJ2ZXJfT2JqZWN0SWQKICAgKi8KLS0tIDQ0LDU3IC0tLS0KICAKICBQ
T1JCaXRTZXJ2YW50ICAgICpwb3JiaXRfc2VydmFudF9jcmVhdGUgICAoU1YgICAgICAgICAgICAg
ICAgKnBlcmxvYmosCiAgCQkJCQkgICBDT1JCQV9FbnZpcm9ubWVudCAqZXYpOwohIHZvaWQgICAg
ICAgICAgICAgIHBvcmJpdF9zZXJ2YW50X2Rlc3Ryb3kgIChQT1JCaXRTZXJ2YW50ICAgICAqc2Vy
dmFudCwKISAJCQkJCSAgIENPUkJBX0Vudmlyb25tZW50ICpldik7CiEgCiEgLyogQ2hlY2sgaWYg
dGhlIENPUkJBIGludGVyZmFjZSBhIHNlcnZlciBpbXBsZW1lbnRzLCBkZXJpdmVzCiEgICogZnJv
bSB0aGUgZ2l2ZW4gcmVwb3NpdG9yeSBJRAohICAqLwohIGdib29sZWFuICAgICAgICAgICBwb3Ji
aXRfc2VydmFudF9pc19hICAgIChTViAgICAgICAgICAgICAgICAqcGVybG9iaiwKISAJCQkJCSAg
IGNvbnN0IGNoYXIgICAgICAgICpyZXBvX2lkKTsKICAKICAvKiBDb252ZXJ0IGJldHdlZW4gU1Yg
KiBhbmQgUG9ydGFibGVTZXJ2ZXJfT2JqZWN0SWQKICAgKi8KZGlmZiAtYyAtciBDT1JCQS1PUkJp
dC0wLjQuMy90eXBlbWFwIENPUkJBLU9SQml0LTAuNC40L3R5cGVtYXAKKioqIENPUkJBLU9SQml0
LTAuNC4zL3R5cGVtYXAJTW9uIEphbiAgMyAwNjoxNjoyMCAyMDAwCi0tLSBDT1JCQS1PUkJpdC0w
LjQuNC90eXBlbWFwCVR1ZSBNYXIgMjYgMTU6MTU6NTIgMjAwMgoqKioqKioqKioqKioqKioKKioq
IDQsOSAqKioqCi0tLSA0LDEwIC0tLS0KICBDT1JCQTo6T1JCCSAgICAgICAgICAgIFRfUFRST0JK
CiAgQ09SQkE6OlR5cGVDb2RlCSAgICAgICAgICAgIFRfUFRST0JKCiAgQ09SQkE6Ok9SQml0OjpS
b290T2JqZWN0ICAgIFRfUFRST0JKCisgQ09SQkE6Ok9SQml0OjpTb3VyY2UgICAgICAgIFRfUFRS
T0JKCiAgUG9ydGFibGVTZXJ2ZXI6OlBPQSAgICAgICAgIFRfUFRST0JKCiAgUG9ydGFibGVTZXJ2
ZXI6OlBPQU1hbmFnZXIgIFRfUFRST0JKCiAgUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnRCYXNlIFRf
U0VSVkFOVAoqKioqKioqKioqKioqKioKKioqIDM3LDQ1ICoqKioKICAJc3Zfc2V0cHYoKFNWKikk
YXJnLCAkdmFyKTsKICAJQ09SQkFfZnJlZSAoJHZhcik7CiAgVF9MT05HTE9ORwohIAkkYXJnID0g
bGxfZnJvbV9sb25nbG9uZyAoJHZhcik7CiAgVF9VTE9OR0xPTkcKISAJJGFyZyA9IHVsbF9mcm9t
X3Vsb25nbG9uZyAoJHZhcik7CiAgVF9MT05HRE9VQkxFCiEgCSRhcmcgPSBsZF9mcm9tX2xvbmdk
b3VibGUgKCR2YXIpOwohIAotLS0gMzgsNDUgLS0tLQogIAlzdl9zZXRwdigoU1YqKSRhcmcsICR2
YXIpOwogIAlDT1JCQV9mcmVlICgkdmFyKTsKICBUX0xPTkdMT05HCiEgCSRhcmcgPSBwb3JiaXRf
bGxfZnJvbV9sb25nbG9uZyAoJHZhcik7CiAgVF9VTE9OR0xPTkcKISAJJGFyZyA9IHBvcmJpdF91
bGxfZnJvbV91bG9uZ2xvbmcgKCR2YXIpOwogIFRfTE9OR0RPVUJMRQohIAkkYXJnID0gcG9yYml0
X2xkX2Zyb21fbG9uZ2RvdWJsZSAoJHZhcik7Cg==

--------_3CBAE51E8CF1020E3C80_MULTIPART_MIXED_--