X-MimeOLE: Produced By Microsoft Exchange V6.5
Received: by onstor-exch02.onstor.net 
	id <01C739A8.92EE17F4@onstor-exch02.onstor.net>; Tue, 16 Jan 2007 11:57:38 -0800
MIME-Version: 1.0
Content-Type: multipart/mixed;
	boundary="----_=_NextPart_001_01C739A8.92EE17F4"
Content-class: urn:content-classes:message
Subject: cmd_upgrade.c to review
Date: Tue, 16 Jan 2007 11:57:38 -0800
Message-ID: <BB375AF679D4A34E9CA8DFA650E2B04E0A947D@onstor-exch02.onstor.net>
X-MS-Has-Attach: yes
X-MS-TNEF-Correlator: 
Thread-Topic: cmd_upgrade.c to review
thread-index: Acc5RB1jJn3V8z0PQqyQ/sQ55Ih4RQ==
From: "Larry Scheer" <larry.scheer@onstor.com>
To: "Andy Sharp" <andy.sharp@onstor.com>

This is a multi-part message in MIME format.

------_=_NextPart_001_01C739A8.92EE17F4
Content-Type: text/plain;
	charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Andy,
  Attached is cmd_upgrade.c for your review. I stripped out much of the
unused functions. A few remain that I need to check if some other code
might use (such as the find_files function.) I left in the prom upgrade
code and placed a #idef around them. I found this define when I was
looking at cmd_system.c with Warren Gale on Monday. We were looking at
how the system upgrade prom command was disabled. I used the same flag.
Warren tells me the only semi-working prom-upgrade code for cheetah is
in cmd_upgrade.c. Warren thinks it is highly unlikely we will be
updating cheetah proms any more. But I left the code in place and in a
deactivated state in cmd_upgade.c just in case.



------_=_NextPart_001_01C739A8.92EE17F4
Content-Type: application/octet-stream;
	name="cmd_upgrade.c"
Content-Transfer-Encoding: base64
Content-Description: cmd_upgrade.c
Content-Disposition: attachment;
	filename="cmd_upgrade.c"

Ci8qIHZpOnRzPTQKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKgogKiBOYW1lOiBjbWRfdXBncmFkZQogKgogKiBSQ1M6
ICAkSWQkCiAqCiAqIENvcHlyaWdodCAoQykgMjAwMSwgQWdpbGUgU3RvcmFnZSwgSW5jLgogKgog
KiBEZXNjcmlwdGlvbjoKICoKICogQ3JlYXRlZCBieTogIE1heGltIEtvemxvdnNreQogKgogKiBE
YXRlIENyZWF0ZWQ6IDA0LzI5LzIwMDIKICoKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKi8KCi8qIFNvbWUgcGFydHMg
YXJlOiAqLwovKgogKiBDb3B5cmlnaHQgKGMpIDE5ODcsIDE5OTMKICogIFRoZSBSZWdlbnRzIG9m
IHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgog
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAqIGFyZSBtZXQ6CiAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogKiAz
LiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9m
IHRoaXMgc29mdHdhcmUKICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVk
Z2VtZW50OgogKiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0
aGUgVW5pdmVyc2l0eSBvZgogKiAgQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmli
dXRvcnMuCiAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBu
YW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCiAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQogKiAgICB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQK
ICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCiAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCiAqIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQog
KiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTAogKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwogKiBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKICog
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QKICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQogKiBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCiAq
IFNVQ0ggREFNQUdFLgogKi8KCgoKI2luY2x1ZGUgPHN5cy90eXBlcy5oPgojaW5jbHVkZSA8cHdk
Lmg+CiNpbmNsdWRlIDxyZWFkbGluZS9oaXN0b3J5Lmg+CiNpbmNsdWRlIDxncnAuaD4KI2luY2x1
ZGUgPHVuaXN0ZC5oPgojaW5jbHVkZSA8c3lzL21tYW4uaD4KI2luY2x1ZGUgPHN5cy9zdGF0Lmg+
CiNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CgojaW5jbHVkZSAiemVicmEuaCIKI2luY2x1ZGUgImNv
bW1hbmQuaCIKI2luY2x1ZGUgImxvZy5oIgojaW5jbHVkZSAidnR5c2guaCIKI2luY2x1ZGUgIm1l
bW9yeS5oIgoKI2luY2x1ZGUgIm5meHNoLmgiCgojaW5jbHVkZSAidmVjdG9yLmgiCgojaW5jbHVk
ZSA8ZGlyZW50Lmg+CgojaW5jbHVkZSAibmZ4LWRlZnMuaCIKI2luY2x1ZGUgIi4uL3NtLWNoYXNz
aXMvY20tYXBpLmgiCiNpbmNsdWRlICIuLi9zbS1hbnBzc2MvYW5wc3NjLWFwaS5oIgojaW5jbHVk
ZSAiLi4vc20tb3B0L29wdC1hcGkuaCIKI2luY2x1ZGUgIi4uL3NtLWVsb2cvZWxvZy1hcGkuaCIK
I2luY2x1ZGUgIi4uL3NzYy1uZnhuaXMvbmZ4bmlzLWFwaS5oIgojaW5jbHVkZSAiLi4vc3NjLW5m
eG5pcy9uZnhhdXRoLWFwaS5oIgojaW5jbHVkZSAiLi4vc20taXBtL2lwbS5oIgoKI2luY2x1ZGUg
PGZzdGFiLmg+CgojZGVmaW5lIEFMTE9XX1BST01fVVBHUkFERV9GQUlMIDEKCmV4dGVybiBpbnQg
bW91bnRfc2Vjb25kYXJ5KHZlY3RvciB2KTsKZXh0ZXJuIHZlY3RvciBtYWtlX3NlY29uZGFyeV9m
c3RhYnModm9pZCk7CmV4dGVybiB2b2lkIHVfbW91bnRfc2Vjb25kYXJ5KHZlY3RvciB2KTsKZXh0
ZXJuIHZvaWQgZnJlZV9mc3RhYl92ZWN0b3IodmVjdG9yIHYpOwpleHRlcm4gdm9pZCBkb19jb3B5
X2ZpbGVzKGNoYXIgKmZyb21kaXIsIGNoYXIgKnRvZGlyLCBjaGFyICpmaWxlcyk7Ci8vc3RhdGlj
IGludCBpc19mcF9hZGRyKGNoYXIgKnBhdGNoX2xvY2F0aW9uKTsKCnN0cnVjdCBkZXNjcmlwdG9y
CnsKICAgIGNoYXIgKm5hbWU7CiAgICBjaGFyICp0eXBlOwogICAgY2hhciAqYm9hcmQ7CiAgICBj
aGFyICpwYXRjaF9uYW1lOwp9OwoKCnN0cnVjdCBkZXNjcmlwdG9yIGRlZmF1bHRfZGVzY3JpcHRv
ciA9IHsKICAgIE5VTEwsCiAgICAiYXBwIiwKICAgICJzc2MiLAogICAgTlVMTAp9OwoKCmNoYXIg
KmJvYXJkX3R5cGVzW10gPSB7CiAgICAic3AiLAogICAgInR4cngiLAogICAgImZwIiwKICAgICJz
c2MiLAogICAgInRvc2hpYmEiLAogICAgTlVMTAp9OwoKCmNoYXIgKmZpbGVfdHlwZXNbXSA9IHsK
ICAgICJwcm9tIiwKICAgICJiaWdwcm9tIiwKICAgICJydW50aW1lIiwKICAgICJkYWVtb24iLAog
ICAgImFwcCIsCiAgICAiZGVzY3IiLAogICAgInZlcnNpb24iLAogICAgImtlcm5lbCIsCiAgICAi
Y29uZmlnIiwKICAgICJzZXJ2aWNlcyIsCiAgICBOVUxMCn07CgpjaGFyICpmcF9wb3J0c1tdID0g
ewogICAgImZwMS4wIiwKICAgICJmcDEuMSIsCiAgICAiZnAxLjIiLAogICAgImZwMS4zIiwKICAg
IE5VTEwKfTsKCiNkZWZpbmUgVElNRV9CVUYgMjcKc3RhdGljIGNoYXIgKm1vdW50X2RpciA9ICIv
bW50IjsKc3RhdGljIGNoYXIgKnBhdGNoX2Rpcl9uYW1lID0gTlVMTDsKc3RhdGljIGNoYXIgKmxv
Y2FsX2Rlc3QgPSAiL21udDIiOwpzdGF0aWMgY2hhciAqbWFuaWZlc3QgPSAiL3Vzci9sb2NhbC9h
Z2lsZS9jb25mLyouYm9tIjsKc3RhdGljIGNoYXIgKmRlc2NyaXB0b3JfZmlsZSA9ICIvdXNyL2xv
Y2FsL2FnaWxlL2V0Yy9kZXNjciI7CnN0YXRpYyBjaGFyICptdHJlZV9maWxlX25hbWUgPSAiL2V0
Yy9tdHJlZS80LjRCU0QuZGlzdCI7CnN0YXRpYyBjaGFyIGZ0cHByZWZpeFtdID0gImZ0cDovLyI7
CnN0YXRpYyBjaGFyICpwYXRjaF9sb2NhdGlvbjsKc3RhdGljIGludCB1cGdyYWRlX3NlY29uZGFy
eTsKc3RhdGljIGludCBjb21wYXJlX3NlY29uZGFyeTsKc3RhdGljIGludCBmb3JjZV91cGdyYWRl
OwpzdGF0aWMgY2hhciAqc3lzX3VwZ3JhZGVfbG9nZmlsZSA9ICIvdmFyL2xvZy9zeXNfdXBncmFk
ZS5sb2ciOwpzdGF0aWMgRklMRSAqc3lzX3VwZ3JhZGUgPSBOVUxMOwpzdGF0aWMgY2hhciBzeXNf
bG9nX3N0cltNQVhQQVRITEVOICsgMV07CnN0YXRpYyBjaGFyIHN5c19sb2dfdGltZVtUSU1FX0JV
Rl07CgpleHRlcm4gY2hhciAqc2Vjb25kYXJ5X21vdW50OwpleHRlcm4gY2hhciAqc3lzX2NvbmZp
Z19maWxlczsKCnN0cnVjdCB2ZXJzaW9uCnsKICAgIGludCBtYWpvcjsKICAgIGludCBtaW5vcjsK
ICAgIGludCBtYWludGVuYW5jZTsKICAgIGludCBwYXRjaDsKICAgIGNoYXIgcGxhdGZvcm07Cn07
CgoKc3RhdGljIHZvaWQgcHJpbnRfdmVjdG9yKHZlY3RvciB2LCB2b2lkICgqcHJpbnRfZm4pKHZv
aWQqKSkgX19hdHRyaWJ1dGUoKHVudXNlZCkpOwpzdGF0aWMgdm9pZCBwcmludF9kZXNjcmlwdG9y
X3ZlY3Rvcih2ZWN0b3IgdikgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOwpzdGF0aWMgdm9pZCBw
cmludF9zdHJpbmdfdmVjdG9yKHZlY3RvciB2KSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7Cmlu
dCBzbGVlcF9hY2N1cmF0ZWx5KGludCBzZWNzKTsKc3RhdGljIHZvaWQgbXlfcHJpbnQoY2hhciAq
c3RyKTsKc3RhdGljIGNoYXIgKmdldF90aW1lKCk7CgoKdHlwZWRlZiBpbnQgKCp1cGdyYWRlX21l
dGhvZF90KSh2ZWN0b3IgZGVzY3JpcHRvcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmVjdG9yIGZpbGVzLCBjaGFyICooKnRydWVuYW1lX2Z1bmMpKGNoYXIgKiksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbXRyZWVfZmlsZXMpOwoKdHlwZWRlZiBjaGFy
KiAoKnRydWVuYW1lX2Z1bmNfdCkoY2hhciAqZmlsZSk7Cgp0cnVlbmFtZV9mdW5jX3QgY3VyX3Ry
dWVuYW1lX2Z1bmM7CgpleHRlcm4gaW50IG5vaXN5X21ha2VfYWxsZnNfd3JpdGFibGUodm9pZCk7
CgoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogKiBOYW1lIDogICBmaW5kX3N0cigpCiAqCiAqIERlc2NyaXB0aW9uOiBG
aW5kIGEgc3RyaW5nIGluIGFycmF5IG9mIHN0cmluZ3MKICoKICogQ3JlYXRlZCBieTogIE1heGlt
IEtvemxvdnNreQogKgogKiBEYXRlIENyZWF0ZWQ6ICAgIDA1LzE0LzAyCiAqCiAqLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
ICovCnN0YXRpYyBjaGFyICoKZmluZF9zdHIoY2hhciAqKmFycmF5LCBjaGFyICpzdHIpCnsKICAg
IGNoYXIgKipwdHI7CiAgICBmb3IgKHB0ciA9ICZhcnJheVswXTsgKnB0ciAhPSBOVUxMICYmIHN0
cmNtcCgqcHRyLCBzdHIpOyArK3B0cikgewogICAgICAgIC8qICovCiAgICB9CiAgICByZXR1cm4g
KnB0cjsKfQoKCi8qIFV0aWxpdHkgcm91dGluZSBmb3IgY3VycmVudCB0aW1lIHByaW50aW5nLiAq
LwpzdGF0aWMgY2hhciAqCmdldF90aW1lICgpCnsKICBpbnQgcmV0OwogIHRpbWVfdCBjbG9jazsK
ICBzdHJ1Y3QgdG0gKnRtOwogIHRpbWUgKCZjbG9jayk7CiAgdG0gPSAoc3RydWN0IHRtKilsb2Nh
bHRpbWUgKCZjbG9jayk7CgogIHJldCA9IHN0cmZ0aW1lIChzeXNfbG9nX3RpbWUsIFRJTUVfQlVG
LCAiJVkvJW0vJWQgJUg6JU06JVMiLCB0bSk7CiAgaWYgKHJldCA9PSAwKSB7CiAgICBzcHJpbnRm
KHN5c19sb2dfdGltZSwiRXJyb3IgZ2V0dGluZyBzeXN0ZW0gdGltZSIpOwogIH0KICAgcmV0dXJu
IHN5c19sb2dfdGltZTsKfQoKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogTmFtZSA6ICAgbXlfcHJpbnQoKQogKgog
KiBEZXNjcmlwdGlvbjogcHJpbnQgdG8gc3Rkb3V0IGFuZCBmaWxlCiAqCiAqIENyZWF0ZWQgYnk6
ICBWaWthcyBTYWluaQogKgogKiBEYXRlIENyZWF0ZWQ6ICAgIDA3LzIwLzA1CiAqCiAqLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KICovCnN0YXRpYyB2b2lkCm15X3ByaW50KGNoYXIgKnN0cikKewogICAgcHJpbnRmKCIlcyIs
c3RyKTsgCiAgICBmZmx1c2goc3Rkb3V0KTsKICAgIGlmIChzeXNfdXBncmFkZSkgewogICAgICAg
IGZwcmludGYoc3lzX3VwZ3JhZGUsIiVzIixzdHIpOyAKICAgICAgICBmZmx1c2goc3lzX3VwZ3Jh
ZGUpOwogICAgfQp9CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIE5hbWUgOiAgIHZlY3Rvcl9mcmVlX2FsbCgpCiAq
CiAqIERlc2NyaXB0aW9uOiBGcmVlIHRoZSB2ZWN0b3IgYW5kIGNhbGwgZnJlZSgpIGZvciBhbGwg
dGhlIGVsZW1lbnRzCiAqCiAqIENyZWF0ZWQgYnk6ICBNYXhpbSBLb3psb3Zza3kKICoKICogRGF0
ZSBDcmVhdGVkOiAgICAwNS8xNC8wMgogKgogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqLwpzdGF0aWMgdm9pZAp2ZWN0
b3JfZnJlZV9hbGwodmVjdG9yIHYpCnsKICAgIGludCBpOwoKICAgIGlmICh2ICE9IE5VTEwpIHsK
ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdmVjdG9yX21heCh2KTsgKytpKSB7CiAgICAgICAgICAg
IHpmcmVlKE1UWVBFX1ZFQ1RPUiwgdmVjdG9yX2xvb2t1cF9pbmRleCh2LCBpKSk7CiAgICAgICAg
fQogICAgICAgIHZlY3Rvcl9mcmVlKHYpOwogICAgfQp9CgoKCi8qLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogTmFtZSA6
ICAgcmVhZF9kZXNjcmlwdG9yKCkKICoKICogRGVzY3JpcHRpb246IFJlYWQgdGhlIGRlc2NyaXB0
b3IgZmlsZSBhbmQgcmV0dXJuIHRoZSB2ZWN0b3Igb2YKICogc3RydWN0IGRlc2NyaXB0b3IuCiAq
CiAqIENyZWF0ZWQgYnk6ICBNYXhpbSBLb3psb3Zza3kKICoKICogRGF0ZSBDcmVhdGVkOiAgICAw
NS8xNC8wMgogKgogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqLwpzdGF0aWMgdmVjdG9yCnJlYWRfZGVzY3JpcHRvcihj
b25zdCBjaGFyICpmaWxlbmFtZSkKewogICAgc3RydWN0IGRlc2NyaXB0b3IgKmRlc2NyOwogICAg
Y2hhciBzdHJbMzAwXSwgdHlwZVsxMDBdLCBib2FyZFsxMDBdLCBuYW1lWzEwMF07CiAgICBpbnQg
cmM7CiAgICBGSUxFICpmID0gZm9wZW4oZmlsZW5hbWUsICJyIik7CiAgICB2ZWN0b3IgdiA9IE5V
TEw7CgogICAgaWYgKGYgIT0gTlVMTCkgewogICAgICAgIHYgPSB2ZWN0b3JfaW5pdCgyMDApOwog
ICAgICAgIHdoaWxlICghZmVvZihmKSkgewogICAgICAgICAgICBpZiAoZmdldHMoc3RyLCAzMDAs
IGYpICE9IE5VTEwpIHsKICAgICAgICAgICAgICAgIGRlc2NyID0gem1hbGxvYyhNVFlQRV9WRUNU
T1IsIHNpemVvZihzdHJ1Y3QgZGVzY3JpcHRvcikpOwogICAgICAgICAgICAgICAgcmMgPSBzc2Nh
bmYoc3RyLCAiJXMgJXMgJXNcbiIsIHR5cGUsIGJvYXJkLCBuYW1lKTsKICAgICAgICAgICAgICAg
IGlmIChyYyAhPSAzKSB7CiAgICAgICAgICAgICAgICAgICAgcmMgPSBzc2NhbmYoc3RyLCAiJXMg
JXMgJXNcbiIsIHR5cGUsIGJvYXJkLCBuYW1lKTsKICAgICAgICAgICAgICAgICAgICBFX0xPRyhj
bGFzc18xLCBub3RpY2VfcywgZWVlX2dldEFwcGxpY2F0aW9uSWQoIm5meHNoIiksIAogICAgICAg
ICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsICgic3NjYW5mIHJldHJ5IGR1cmluZyBzeXN0ZW0g
dXBncmFkZVxuIikpOwogICAgICAgICAgICAgICAgICAgaWYgKHN5c191cGdyYWRlKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgZnByaW50ZihzeXNfdXBncmFkZSwic3NjYW5mIHJldHJ5IGR1cmlu
ZyBzeXN0ZW0gdXBncmFkZVxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgZmZsdXNoKHN5c191
cGdyYWRlKTsKICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgIGFzc2VydChyYyA9PSAzKTsKICAgICAgICAgICAgICAgIGRlc2NyLT5uYW1lID0genN0
cmR1cChNVFlQRV9WRUNUT1IsIG5hbWUpOwogICAgICAgICAgICAgICAgZGVzY3ItPnBhdGNoX25h
bWUgPSBOVUxMOwogICAgICAgICAgICAgICAgZGVzY3ItPnR5cGUgPSBmaW5kX3N0cihmaWxlX3R5
cGVzLCB0eXBlKTsKICAgICAgICAgICAgICAgIGFzc2VydChkZXNjci0+dHlwZSAhPSBOVUxMKTsK
ICAgICAgICAgICAgICAgIGRlc2NyLT5ib2FyZCA9IGZpbmRfc3RyKGJvYXJkX3R5cGVzLCBib2Fy
ZCk7CiAgICAgICAgICAgICAgICBhc3NlcnQoZGVzY3ItPmJvYXJkICE9IE5VTEwpOwogICAgICAg
ICAgICAgICAgdmVjdG9yX3B1c2godiwgZGVzY3IpOwogICAgICAgICAgICB9CiAgICAgICAgfQog
ICAgICAgIGZjbG9zZShmKTsKICAgIH0KICAgIHJldHVybiB2Owp9CgoKLyotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBO
YW1lIDogICBwcmludC12ZWN0b3IoKQogKgogKiBEZXNjcmlwdGlvbjogcHJpbnQgdGhlIHZlY3Rv
ciBlbGVtZW50cyB1c2luZyBmdW5jdGlvbiBwcmludF9mbgogKgogKiBDcmVhdGVkIGJ5OiAgTWF4
aW0gS296bG92c2t5CiAqCiAqIERhdGUgQ3JlYXRlZDogICAgMDUvMTQvMDIKICoKICotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogKi8Kc3RhdGljIHZvaWQKcHJpbnRfdmVjdG9yKHZlY3RvciB2LCB2b2lkICgqcHJpbnRfZm4p
KHZvaWQgKikpCnsKICAgIGludCBpOwogICAgY2hhciAqZmlsZW5hbWU7CiAgICBmb3IgKGkgPSAw
OyBpIDwgdmVjdG9yX21heCh2KTsgKytpKSB7Ci8vICAgICAgICAoKnByaW50X2ZuKSh2ZWN0b3Jf
bG9va3VwX2luZGV4KHYsIGkpKTsKICAgICAgICBmaWxlbmFtZSA9ICh2ZWN0b3JfbG9va3VwX2lu
ZGV4KHYsIGkpKTsKICAgICAgICBteV9wcmludChmaWxlbmFtZSk7CiAgICAgICAgbXlfcHJpbnQo
IlxuIik7CiAgICB9Cn0KCgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIE5hbWUgOiAgIHByaW50X2Rlc2NyaXB0b3Io
KQogKgogKiBEZXNjcmlwdGlvbjogcHJpbnQgZnVuY3Rpb24gZm9yIGRlc2NyaXB0b3JzCiAqCiAq
IENyZWF0ZWQgYnk6ICBNYXhpbSBLb3psb3Zza3kKICoKICogRGF0ZSBDcmVhdGVkOiAgICAwNS8x
NC8wMgogKgogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAqLwpzdGF0aWMgdm9pZApwcmludF9kZXNjcmlwdG9yKHZvaWQg
KnZkKQp7CiAgICBzdHJ1Y3QgZGVzY3JpcHRvciAqZCA9IHZkOwogICAgc3ByaW50ZihzeXNfbG9n
X3N0ciwiJXMgJXMgJXMgJXNcbiIsIGQtPnR5cGUsIGQtPmJvYXJkLCBkLT5uYW1lLAogICAgICAg
ICAgIGQtPnBhdGNoX25hbWUgPyBkLT5wYXRjaF9uYW1lIDogIihudWxsKSIpOwogICAgbXlfcHJp
bnQoc3lzX2xvZ19zdHIpOwp9CgoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBOYW1lIDogICBwcmludF9kZXNjcmlw
dG9yX3ZlY3RvcigpCiAqCiAqIERlc2NyaXB0aW9uOiBwcmludCB2ZWN0b3Igb2Ygc3RydWN0IGRl
c2NyaXB0b3IKICoKICogQ3JlYXRlZCBieTogIE1heGltIEtvemxvdnNreQogKgogKiBEYXRlIENy
ZWF0ZWQ6ICAgIDA1LzE0LzAyCiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICovCnN0YXRpYyB2b2lkCnByaW50X2Rl
c2NyaXB0b3JfdmVjdG9yKHZlY3RvciB2KSAKewogICAgcHJpbnRfdmVjdG9yKHYsIHByaW50X2Rl
c2NyaXB0b3IpOwp9CgoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBOYW1lIDogICBwcmludF9zdHJpbmdfdmVjdG9y
KCkKICoKICogRGVzY3JpcHRpb246IHByaW50IHZlY3RvciBvZiBzdHJpbmdzCiAqCiAqIENyZWF0
ZWQgYnk6ICBNYXhpbSBLb3psb3Zza3kKICoKICogRGF0ZSBDcmVhdGVkOiAgICAwNS8xNC8wMgog
KgogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAqLwpzdGF0aWMgdm9pZApwcmludF9zdHJpbmdfdmVjdG9yKHZlY3RvciB2
KQp7CiAgICBwcmludF92ZWN0b3IodiwgKHZvaWQgKCopKHZvaWQgKikpcHV0cyk7Cn0KCgovKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAqIE5hbWUgOiAgIHBhcnNlX3ZlcnNpb25fc3RyKCkKICoKICogRGVzY3JpcHRpb246
IHBhcnNlIGEgc3RyaW5nIGludG8gc3RydWN0IHZlcnNpb24KICoKICogQ3JlYXRlZCBieTogIE1h
eGltIEtvemxvdnNreQogKgogKiBEYXRlIENyZWF0ZWQ6ICAgIDA1LzE0LzAyCiAqCiAqLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KICovCnN0YXRpYyBpbnQKcGFyc2VfdmVyc2lvbl9zdHIoY2hhciAqc3RyLCBzdHJ1Y3QgdmVy
c2lvbiAqdmVyc2lvbikKewogICAgaW50IHJjID0gc3NjYW5mKHN0ciwgIiVkLiVkLiVkLiVkJWMi
LAogICAgICAgICAgICAgICAgICAgICZ2ZXJzaW9uLT5tYWpvciwgCiAgICAgICAgICAgICAgICAg
ICAgJnZlcnNpb24tPm1pbm9yLCAKICAgICAgICAgICAgICAgICAgICAmdmVyc2lvbi0+bWFpbnRl
bmFuY2UsIAogICAgICAgICAgICAgICAgICAgICZ2ZXJzaW9uLT5wYXRjaCwKICAgICAgICAgICAg
ICAgICAgICAmdmVyc2lvbi0+cGxhdGZvcm0pOwogICAgaWYgKChyYyAhPSA0KSAmJiAocmMgIT0g
NSkpIHsKICAgICAgICBzcHJpbnRmKHN5c19sb2dfc3RyLCJpbnZhbGlkIHZlcnNpb24gc3RyaW5n
ICVzXG4iLCBzdHIpOwogICAgICAgIG15X3ByaW50KHN5c19sb2dfc3RyKTsKICAgICAgICByYyA9
IENNRF9FUlJfRkFJTEVEOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgaWYgKHJjID09IDQpIHsK
ICAgICAgICAgICAgdmVyc2lvbi0+cGxhdGZvcm0gPSAnPyc7CiAgICAgICAgfQogICAgICAgIHJj
ID0gQ01EX1NVQ0NFU1M7CiAgICB9CiAgICByZXR1cm4gcmM7Cn0KCgovKi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIE5h
bWUgOiAgIGNvbXBhcmVfdmVyc2lvbnMoKQogKgogKiBEZXNjcmlwdGlvbjogY29tcGFyZSB0d28g
dmVyc2lvbnMsIHJldHVybiB2YWx1ZSBpcyA8IDAgaWYgdGhlIGZpcnN0IGlzCiAqIGxvd2VyLCAw
IGlmIGVxdWFsLCA+IDAgaWYgdGhlIGZpcnN0IGlzIGdyZWF0ZXIKICoKICogQ3JlYXRlZCBieTog
IE1heGltIEtvemxvdnNreQogKgogKiBEYXRlIENyZWF0ZWQ6ICAgIDA1LzE0LzAyCiAqCiAqLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KICovCnN0YXRpYyBpbnQKY29tcGFyZV92ZXJzaW9ucyhzdHJ1Y3QgdmVyc2lvbiAqdjEs
IHN0cnVjdCB2ZXJzaW9uICp2MikKewogICAgaW50IG1ham9yX2RpZmYsIG1pbm9yX2RpZmYsIG1h
aW50ZW5hbmNlX2RpZmY7CgogICAgaWYgKChtYWpvcl9kaWZmID0gdjEtPm1ham9yIC0gdjItPm1h
am9yKSAhPSAwKQogICAgICAgIHJldHVybiBtYWpvcl9kaWZmOwogICAgZWxzZSBpZiAoKG1pbm9y
X2RpZmYgPSB2MS0+bWlub3IgLSB2Mi0+bWlub3IpICE9IDApCiAgICAgICAgcmV0dXJuIG1pbm9y
X2RpZmY7CiAgICBlbHNlIGlmICgobWFpbnRlbmFuY2VfZGlmZiA9IHYxLT5tYWludGVuYW5jZSAt
IHYyLT5tYWludGVuYW5jZSkgIT0gMCkKICAgICAgICByZXR1cm4gbWFpbnRlbmFuY2VfZGlmZjsK
ICAgIGVsc2UgcmV0dXJuIHYxLT5wYXRjaCAtIHYyLT5wYXRjaDsKfQoKCi8qLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICog
TmFtZSA6ICAgY2hlY2tfdmVyc2lvbnNfY29tcGF0aWJsZSgpCiAqCiAqIERlc2NyaXB0aW9uOiBj
b21wYXJlIHR3byB2ZXJzaW9ucyB0byBzZWUgaWYgdGhleSBhcmUgY29tcGF0aWJsZSBhbmQgd2Ug
Y2FuCiAqIHVwZ3JhZGUgZnJvbSB0aGUgZmlyc3QgdG8gdGhlIHNlY29uZC4KICoKICotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogKi8Kc3RhdGljIGludApjaGVja192ZXJzaW9uc19jb21wYXRpYmxlKHN0cnVjdCB2ZXJzaW9u
ICpjdXJyVmVyLCBzdHJ1Y3QgdmVyc2lvbiAqdXBncmFkZVZlcikKewogICAgaW50IHJjID0gQ01E
X1NVQ0NFU1M7CgogICAgLyogV2UgY2Fubm90IHVwZ3JhZGUgZnJvbSBSMi4wLnggdG8gUjEuMy4y
IG9yIGdyZWF0ZXIuICovCiAgICBpZiAoKGN1cnJWZXItPm1ham9yID09IDIpICYmIChjdXJyVmVy
LT5taW5vciA9PSAwKSkgewogICAgICAgIGlmICgodXBncmFkZVZlci0+bWFqb3IgPT0gMSkgJiYg
KHVwZ3JhZGVWZXItPm1pbm9yID09IDMpICYmCiAgICAgICAgICAgICh1cGdyYWRlVmVyLT5tYWlu
dGVuYW5jZSA+PSAyKSkgewogICAgICAgICAgICByYyA9IENNRF9FUlJfRkFJTEVEOwogICAgICAg
IH0KICAgIH0KCiAgICAvKgogICAgICogV2UgY2Fubm90IHVwZ3JhZGUgZnJvbSBSMS4zLjIgb3Ig
Z3JlYXRlciB0byBSMi4wLiAgVGhlIHBsYW4gaXMgdG8gbWVyZ2UKICAgICAqIHRoZSByZWxlYXNl
IHBhdGhzIGluIFIyLjEsIHNvIHdlIG5lZWQgdG8gYWxsb3cgdGhlIHVwZ3JhZGUgcGF0aCB0bwog
ICAgICogUjIuMSBvciBncmVhdGVyLgogICAgICovCiAgICBlbHNlIGlmICgoY3VyclZlci0+bWFq
b3IgPT0gMSkgJiYgKGN1cnJWZXItPm1pbm9yID09IDMpICYmCiAgICAgICAgICAgICAoY3VyclZl
ci0+bWFpbnRlbmFuY2UgPj0gMikpIHsKICAgICAgICBpZiAoKHVwZ3JhZGVWZXItPm1ham9yID09
IDIpICYmICh1cGdyYWRlVmVyLT5taW5vciA9PSAwKSkgewogICAgICAgICAgICByYyA9IENNRF9F
UlJfRkFJTEVEOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gcmM7Cn0KCi8qIEluIGNhc2Ug
d2UgbmVlZCB0byBkbyBhbiBlbWVyZ2VuY3kgcmVhY3RpdmF0aW9uIGZvciBjaGVldGFoCiogIHBy
b20gdXBncmFkZSB0aGlzIGRlZmluZSBjYW4gYmUgdHVybmVkIG9uLiBCdXQgdGhpcyBjb2RlIHNo
b3VsZCBnbyBhd2F5CiogIHdoZW4gY21kX3Byb211cGdyYWRlLmMgc3VwcG9ydHMgY2hlZXRhaCB1
cGRhdGVzLgoqLwojaWZkZWYgUkVBQ1RJVkFURV9TWVNURU1fQ01EUwovKi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIE5h
bWUgOiAgIHZhbGlkX3Nsb3RfY3B1KCkKICoKICogRGVzY3JpcHRpb246IFJldHVybiB0cnVlIGlm
IHNsb3QvY3B1IGNvbWJpbmF0aW9uIGlzIHZhbGlkCiAqCiAqIENyZWF0ZWQgYnk6ICBNYXhpbSBL
b3psb3Zza3kKICoKICogRGF0ZSBDcmVhdGVkOiAgICAwNS8wOS8wMgogKgogKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAq
LwpzdGF0aWMgaW50CnZhbGlkX3Nsb3RfY3B1KGludCBzbG90LCBpbnQgY3B1KQp7CiAgICBzd2l0
Y2ggKHNsb3QpIHsKICAgIGNhc2UgMCA6CiAgICAgICAgcmV0dXJuIDAgPD0gY3B1ICYmIGNwdSA8
IDI7CiAgICBjYXNlIDE6CiAgICAgICAgcmV0dXJuIDAgPD0gY3B1ICYmIGNwdSA8IDQ7CiAgICBj
YXNlIDI6CiAgICAgICAgcmV0dXJuIDAgPD0gY3B1ICYmIGNwdSA8IDQ7CiAgICBkZWZhdWx0Ogog
ICAgICAgIHJldHVybiAwOwogICAgfQogICAgCn0KI2VuZGlmIC8qIFJFQUNUSVZBVEVfU1lTVEVN
X0NNRFMgKi8KCgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIE5hbWUgOiAgIHJlYWRfdmVyc2lvbigpCiAqCiAqIERl
c2NyaXB0aW9uOiBSZWFkIHRoZSB2ZXJzaW9uIGZyb20gdGhlIGZpbGUgbmFtZWQgZmlsZW5hbWUK
ICoKICogQ3JlYXRlZCBieTogIE1heGltIEtvemxvdnNreQogKgogKiBEYXRlIENyZWF0ZWQ6ICAg
IDA1LzE0LzAyCiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICovCnN0YXRpYyBpbnQKcmVhZF92ZXJzaW9uKGNvbnN0
IGNoYXIgKmZpbGVuYW1lLCBzdHJ1Y3QgdmVyc2lvbiAqdmVyc2lvbikKewogICAgRklMRSAqZiA9
IGZvcGVuKGZpbGVuYW1lLCAiciIpOwogICAgY2hhciAqczsKICAgIGludCBvayA9IENNRF9FUlJf
RkFJTEVEOwoKICAgIGlmIChmICE9IE5VTEwpIHsKICAgICAgICBzaXplX3Qgc2l6ZTsKICAgICAg
ICBzID0gZmdldGxuKGYsICZzaXplKTsKICAgICAgICBpZiAocyAhPSBOVUxMICYmIHNbc2l6ZSAt
IDFdID09ICdcbicpIHsKICAgICAgICAgICAgc1tzaXplIC0gMV0gPSAwOwogICAgICAgICAgICBv
ayA9IHBhcnNlX3ZlcnNpb25fc3RyKHMsIHZlcnNpb24pOwogICAgICAgIH0KICAgICAgICBmY2xv
c2UoZik7CiAgICB9CgogICAgcmV0dXJuIG9rOwp9CgoKLyogSW4gY2FzZSB3ZSBuZWVkIHRvIGRv
IGFuIGVtZXJnZW5jeSByZWFjdGl2YXRpb24gZm9yIGNoZWV0YWgKKiAgcHJvbSB1cGdyYWRlIHRo
aXMgZGVmaW5lIGNhbiBiZSB0dXJuZWQgb24uIEJ1dCB0aGlzIGNvZGUgc2hvdWxkIGdvIGF3YXkK
KiAgd2hlbiBjbWRfcHJvbXVwZ3JhZGUuYyBzdXBwb3J0cyBjaGVldGFoIHVwZGF0ZXMuCiovCiNp
ZmRlZiBSRUFDVElWQVRFX1NZU1RFTV9DTURTCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogTmFtZSA6ICAgaXNfcHJv
bSgpCiAqCiAqIERlc2NyaXB0aW9uOiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZGVzY3JpcHRvciB0eXBl
IGlzIHByb20KICoKICogQ3JlYXRlZCBieTogIE1heGltIEtvemxvdnNreQogKgogKiBEYXRlIENy
ZWF0ZWQ6ICAgIDA1LzE0LzAyCiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICovCnN0YXRpYyBpbnQKaXNfcHJvbShz
dHJ1Y3QgZGVzY3JpcHRvciAqZGVzY3IpCnsKICAgIHJldHVybiAhc3RyY21wKGRlc2NyLT50eXBl
LCAicHJvbSIpOwp9CgoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBOYW1lIDogICBpc19iaWdwcm9tKCkKICoKICog
RGVzY3JpcHRpb246IFJldHVybiB0cnVlIGlmIHRoZSBkZXNjcmlwdG9yIHR5cGUgaXMgYmlncHJv
bQogKgogKiBDcmVhdGVkIGJ5OiAgTWF4aW0gS296bG92c2t5CiAqCiAqIERhdGUgQ3JlYXRlZDog
ICAgMDUvMTQvMDIKICoKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKi8Kc3RhdGljIGludAppc19iaWdwcm9tKHN0cnVj
dCBkZXNjcmlwdG9yICpkZXNjcikKewogICAgcmV0dXJuICFzdHJjbXAoZGVzY3ItPnR5cGUsICJi
aWdwcm9tIik7Cn0KI2VuZGlmIC8qIFJFQUNUSVZBVEVfU1lTVEVNX0NNRFMgKi8KCgovKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAqIE5hbWUgOiAgIHByaW50X3ZlcnNpb24oKQogKgogKiBEZXNjcmlwdGlvbjogCiAqCiAq
IENyZWF0ZWQgYnk6ICBNYXhpbSBLb3psb3Zza3kKICoKICogRGF0ZSBDcmVhdGVkOiAgICAwNS8x
NC8wMgogKgogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAqLwpzdGF0aWMgdm9pZApwcmludF92ZXJzaW9uKHN0cnVjdCB2
ZXJzaW9uICp2ZXJzaW9uKQp7CiAgICBzcHJpbnRmKHN5c19sb2dfc3RyLCIlZC4lZC4lZC4lZFxu
IiwgdmVyc2lvbi0+bWFqb3IsIHZlcnNpb24tPm1pbm9yLCAKICAgICAgICAgICB2ZXJzaW9uLT5t
YWludGVuYW5jZSwgdmVyc2lvbi0+cGF0Y2gpOwogICAgbXlfcHJpbnQoc3lzX2xvZ19zdHIpOwp9
CgoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogKiBOYW1lIDogICBjb252ZXJ0X3JjKCkKICoKICogRGVzY3JpcHRpb246
IENvbnZlcnQgdW5peCByZXR1cm4gY29kZSB0byBuZnhzaCB2YWx1ZXMKICoKICogQ3JlYXRlZCBi
eTogIE1heGltIEtvemxvdnNreQogKgogKiBEYXRlIENyZWF0ZWQ6ICAgIDExLzAxLzAyCiAqCiAq
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KICovCnN0YXRpYyBpbmxpbmUgaW50CmNvbnZlcnRfcmMoaW50IHJjKQp7CiAgICBy
ZXR1cm4gcmMgPT0gMCA/IENNRF9TVUNDRVNTIDogQ01EX0VSUl9GQUlMRUQ7Cn0KCgovKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAqIE5hbWUgOiAgIGlzX2Z0cF91cGdyYWRlKCkKICoKICogRGVzY3JpcHRpb246IHJldHVy
biB0cnVlIGlmIHVwZ3JhZGluZyB1c2luZyBmdHAKICoKICogQ3JlYXRlZCBieTogIE1heGltIEtv
emxvdnNreQogKgogKiBEYXRlIENyZWF0ZWQ6ICAgIDExLzAxLzAyCiAqCiAqLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICov
CnN0YXRpYyBpbnQKaXNfZnRwX3VwZ3JhZGUoY2hhciAqZnJvbSkKewogICAgcmV0dXJuICFzdHJu
Y21wKGZyb20sIGZ0cHByZWZpeCwgc3RybGVuKGZ0cHByZWZpeCkpOwp9CgoKLyotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
KiBOYW1lIDogICB1bW91bnRfcGF0Y2goKQogKgogKiBEZXNjcmlwdGlvbjogdW5tb3VudCBwYXRj
aCBkaXJlY3RvcnkgaWYgaXQgaXMgbW91bnRlZAogKgogKiBDcmVhdGVkIGJ5OiAgTWF4aW0gS296
bG92c2t5CiAqCiAqIERhdGUgQ3JlYXRlZDogICAgMDUvMTQvMDIKICoKICotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKi8K
c3RhdGljIHZvaWQKdW1vdW50X3BhdGNoKCkKewogICBkb19zeXN0ZW0oIi9zYmluL3Vtb3VudCAl
cyAyPi9kZXYvbnVsbCIsIG1vdW50X2Rpcik7Cgp9CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIE5hbWUgICAgICAg
ICA6IHVwZ3JhZGVfcmVzb2x2ZU5hbWUKICoKICogRGVzY3JpcHRpb24gIDogUmVzb2x2ZXMgYSBu
YW1lIHRvIGFuIElQIGFkZHJlc3MuCiAqCiAqIEFyZ3VtZW50cyAgICA6IGhvc3ROYW1lICAtIEhv
c3QgTmFtZS4KICogICAgICAgICAgICAgICAgdnNJZCAgICAgIC0gQXBwcm9wcmlhdGUgdmlydHVh
bCBzZXJ2ZXIgY29udGV4dC4KICogICAgICAgICAgICAgICAgaXBBZGRyZXNzIC0gUmV0dXJuZWQg
dmFsdWUuIAogKgogKiBSZXR1cm4gVmFsdWUgOiBORlhfT0sgIC0gQWJsZSB0byByZXNvbHZlIHRo
ZSBuYW1lIHRvIGFuIElQIGFkZHJlc3MuCiAqICAgICAgICAgICAgICAgIE5GWF9FUlIgLSBVbmFi
bGUgdG8gcmVzb2x2ZSB0aGUgc2VydmVyIG5hbWUgLgogKgogKiBDcmVhdGVkIGJ5ICAgOiBLaXJh
biBTcmluaXZhc2FuCiAqCiAqIERhdGUgQ3JlYXRlZCA6IDA0LzIzLzA0CiAqCiAqLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
ICovCnN0YXRpYyBpbnQzMgp1cGdyYWRlX3Jlc29sdmVOYW1lKGNoYXIgKmhvc3ROYW1lLAogICAg
ICAgICAgICAgICAgICAgIHZzX2lkX3QgdnNJZCwKICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg
aW5fYWRkciAqaG9zdElQKQp7CiAgICAvKiBDaGVjayBpZiBuYW1lIGlzIGFscmVhZHkgaW4gSVAg
YWRkcmVzcyBmb3JtYXQKICAgICAqLwogICAgaWYoaW5ldF9hdG9uKGhvc3ROYW1lLCBob3N0SVAp
ICE9IDApCiAgICAgICAgcmV0dXJuIE5GWF9PSzsKCiAgICAvKiBDYWxsIHRoZSBORlhOSVMgcm91
dGluZSB0byByZXNvbHZlIHVzaW5nIHRoZSB2aXJ0dWFsCiAgICAgKiBzZXJ2ZXIgcHJvdmlkZWQg
KHZpYSBGUCkuIAogICAgICovCiAgICAqKGluX2FkZHJfdCAqKWhvc3RJUCA9IG5meGF1dGhfcmVz
b2x2ZU5hbWUodnNJZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGhvc3ROYW1lKTsKICAgIAogICAgaWYoaG9zdElQLT5zX2FkZHIgPT0gMCkKICAgIHsKICAg
ICAgICBzcHJpbnRmKHN5c19sb2dfc3RyLCJFcnJvciA6IHVuYWJsZSB0byByZXNvbHZlIHNlcnZl
ciA6ICglcykuXG4iLCBob3N0TmFtZSk7CiAgICAgICAgbXlfcHJpbnQoc3lzX2xvZ19zdHIpOwog
ICAgICAgIHJldHVybiBORlhfRVJSOwogICAgfQogCiAgICByZXR1cm4gTkZYX09LOwp9CgovKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAqIE5hbWUgICAgICAgICA6IGZ0cF9nZXRTZXJ2ZXJJUAogKgogKiBEZXNjcmlwdGlv
biAgOiBHZXRzIHRoZSBGVFAgc2VydmVyIGFkZHJlc3MgZnJvbSB0aGUgVVJMLgogKgogKiBBcmd1
bWVudHMgICAgOiBmdHBVUkwgICAgICAgICAgICAtIEZUUCBVUkwKICogICAgICAgICAgICAgICAg
dnNJZCAgICAgICAgICAgICAgLSBWaXJ0dWFsIHNlcnZlciBJZC4KICogICAgICAgICAgICAgICAg
c2VydmVySVAgICAgICAgICAgLSBQb2ludGVyIHRvIGluX2FkZHIgc3RydWN0dXJlIGZvcgogKiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyB0aGUgSVAgYWRkcmVz
cy4KICoKICogUmV0dXJuIFZhbHVlIDogTkZYX09LICAtIEFibGUgdG8gcGFyc2UgdGhlIHNlcnZl
ciBhZGRyZXNzIG91dCBvZiB0aGUgRlRQCiAqICAgICAgICAgICAgICAgICAgICAgICAgICBVUkwu
CiAqICAgICAgICAgICAgICAgIE5GWF9FUlIgLSBVbmFibGUgdG8gZ2V0IHRoZSBzZXJ2ZXIgYWRk
cmVzcy4KICoKICogQ3JlYXRlZCBieSAgIDogS2lyYW4gU3Jpbml2YXNhbgogKgogKiBEYXRlIENy
ZWF0ZWQgOiAwNC8yMy8wNAogKgogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqLwpzdGF0aWMgaW50MzIKZnRwX2dldFNl
cnZlcklQKGNvbnN0IGNoYXIgKmZ0cFVSTCwKICAgICAgICAgICAgICAgIHZzX2lkX3QgdnNJZCwK
ICAgICAgICAgICAgICAgIHN0cnVjdCBpbl9hZGRyICpzZXJ2ZXJJUCkKewogICAgY2hhciAqc3Rh
cnQ7CiAgICBjaGFyICplbmQ7CiAgICBpbnQzMiByYzsKICAgIHVpbnQzMiBzZXJ2ZXJMZW47CiAg
ICBjaGFyICpzZXJ2ZXJOYW1lOwoKICAgIC8qIEdldCB0aGUgc3RhcnQgb2YgdGhlIEZUUCBzZXJ2
ZXIgbmFtZQogICAgICovCiAgICBpZigoc3RhcnQ9IHN0cmNocihmdHBVUkwsCiAgICAgICAgICAg
ICAgICAgICAgICAnQCcpKSA9PSBOVUxMKQogICAgewogICAgICAgIG15X3ByaW50KCJFcnJvcjog
dW5hYmxlIHRvIGZpbmQgQCBpbiBGVFAgVVJMXG4iKTsKICAgICAgICByZXR1cm4gTkZYX0VSUjsK
ICAgIH0KCiAgICAvKiBHZXQgdGhlIGVuZCBvZiB0aGUgc2VydmVyIG5hbWUKICAgICAqLwogICAg
aWYoKGVuZCA9IHN0cmNocihzdGFydCwKICAgICAgICAgICAgICAgICAgICAgJy8nKSkgPT0gTlVM
TCkKICAgIHsKICAgICAgICBteV9wcmludCgiRXJyb3I6IHVuYWJsZSB0byBmaW5kIHRoZSB0ZXJt
aW5hdGluZyAvIGluIHRoZSBGVFAgVVJMLlxuIik7CiAgICAgICAgcmV0dXJuIE5GWF9FUlI7CiAg
ICB9CgogICAgc3RhcnQrKzsKICAgIHNlcnZlckxlbiA9ICh1aW50MzIpIChlbmQgLSBzdGFydCk7
CgogICAgaWYoKHNlcnZlck5hbWUgPSAoY2hhciAqKSBtYWxsb2Moc2VydmVyTGVuICsgc2l6ZW9m
KGNoYXIpKSkgPT0gTlVMTCkKICAgIHsKICAgICAgICBteV9wcmludCgiRXJyb3I6IHVuYWJsZSB0
byBhbGxvY2F0ZSBzZXJ2ZXJOYW1lXG4iKTsKICAgICAgICByZXR1cm4gTkZYX0VSUjsKICAgIH0K
ICAgIHN0cm5jcHkoc2VydmVyTmFtZSwKICAgICAgICAgICAgc3RhcnQsCiAgICAgICAgICAgIHNl
cnZlckxlbik7CiAgICBzZXJ2ZXJOYW1lW3NlcnZlckxlbl0gPSAnXDAnOwoKICAgIC8qIEdldCB0
aGUgSVAgYWRkcmVzcyAKICAgICAqLwogICAgcmMgPSB1cGdyYWRlX3Jlc29sdmVOYW1lKHNlcnZl
ck5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnNJZCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZXJ2ZXJJUCk7ICAKCiAgICBmcmVlKHNlcnZlck5hbWUpOwogICAgcmV0
dXJuIHJjOwp9CgoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBOYW1lIDogICBtb3VudF9wYXRjaCgpCiAqCiAqIERl
c2NyaXB0aW9uOiBtb3VudCB0aGUgcGF0Y2ggZGlyZWN0b3J5ICdmcm9tJyBvbiBtb3VudF9kaXIK
ICoKICogQ3JlYXRlZCBieTogIE1heGltIEtvemxvdnNreQogKgogKiBEYXRlIENyZWF0ZWQ6ICAg
IDA1LzE0LzAyCiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICovCnN0YXRpYyBpbnQKbW91bnRfcGF0Y2goY2hhciAq
ZnJvbSkKewoJaW50IHJjOwogICAgcmMgPSBkb19zeXN0ZW0oIi9zYmluL3Vtb3VudCAtZiAlcyAy
Pi9kZXYvbnVsbCIsIG1vdW50X2Rpcik7CgogICAgaWYgKGlzX2Z0cF91cGdyYWRlKGZyb20pKSB7
CiAgICAgICAgbXlfcHJpbnQoIkRvd25sb2FkaW5nIGV4dGVybmFsIHN5c3RlbSBzb2Z0d2FyZSBk
aXN0cmlidXRpb24uXG4iKTsKICAgICAgICByYyA9IGRvX3N5c3RlbSgiL3NiaW4vbW91bnRfbWZz
IC1tIDAgLXMgMTIwMDAwIHN3YXAgJXMiLCBtb3VudF9kaXIpOwogICAgICAgIHJjID0gY29udmVy
dF9yYyhyYyk7CgogICAgICAgIGlmIChyYyA9PSBDTURfU1VDQ0VTUykgewogICAgICAgICAgICBp
ZihuZnhzaF92c19pZCAhPSBWU19JRF9JTlZBTElEKSB7CiAgICAgICAgICAgICAgICAvKiBVcGdy
YWRlIGlzIGJlaW5nIGRvbmUgd2l0aGluIHRoZSBjb250ZXh0IG9mIGEgCiAgICAgICAgICAgICAg
ICAgKiB2aXJ0dWFsIHNlcnZlciwgcGljayB0aGUgYXBwcm9wcmlhdGUgc291cmNlIElQCiAgICAg
ICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIHN0cnVjdCBpbl9hZGRyIHNlcnZlcklQOwog
ICAgICAgICAgICAgICAgc3RydWN0IGluX2FkZHIgc3JjSVA7CiAgICAgICAgICAgICAgICBOVFNU
QVRVUyBzdGF0dXM7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIC8qIFBhcnNlIHRo
ZSBhZGRyZXNzIG91dCBvZiB0aGUgcGF0Y2ggbG9jYXRpb24KICAgICAgICAgICAgICAgICAqLwog
ICAgICAgICAgICAgICAgaWYoZnRwX2dldFNlcnZlcklQKGZyb20sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbmZ4c2hfdnNfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJnNlcnZlcklQKSAhPSBORlhfT0spCiAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgbXlfcHJpbnQoIkVycm9yOiB1bmFibGUgdG8gcGFyc2UgdGhlIGRlc3RpbmF0
aW9uIElQIGFkZHJlc3MiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICIgc3RyaW5nIGZyb20g
dGhlIGZ0cCBVUkwuXG4iKTsKICAgICAgICAgICAgICAgICAgICB1bW91bnRfcGF0Y2goKTsKICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gQ01EX0VSUl9GQUlMRUQ7CiAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgLyogR2V0IHRoZSBzb3VyY2UgSVAgYWRkcmVzcyAocHJpdmF0ZSkK
ICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgaWYoKHN0YXR1cyA9IG5meG5pc19n
ZXRTb3VyY2VJUChuZnhzaF92c19pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VydmVySVAuc19hZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmc3JjSVAuc19hZGRyKSkKICAgICAgICAgICAgICAgICAgICAh
PSBTVEFUVVNfU1VDQ0VTUykgewogICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gU1RB
VFVTX1NFUlZFUl9ESVNBQkxFRCkgewogICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKHN5
c19sb2dfc3RyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvcjogdmlydHVh
bCBzZXJ2ZXIgKElEIC0gJWQpIGlzIGRpc2FibGVkLiAiCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIkZUUCBzZXJ2ZXIgJXMgdW5yZWFjaGFibGUuXG4iLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5meHNoX3ZzX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGluZXRfbnRvYShzZXJ2ZXJJUCkpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICBlbHNlIGlmIChzdGF0dXMgPT0gU1RBVFVTX05FVFdPUktfVU5SRUFDSEFCTEUp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihzeXNfbG9nX3N0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3I6IHZpcnR1YWwgc2VydmVyIChJRCAtICVkKSBk
b2VzIG5vdCBoYXZlICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYSByb3V0ZSB0
byBGVFAgc2VydmVyICVzLlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZnhz
aF92c19pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmV0X250b2Eoc2VydmVy
SVApKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYoc3lzX2xvZ19zdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIkVycm9yOiBDYW5ub3QgcmVhY2ggRlRQIHNlcnZlciAlcyBmcm9t
IHRoaXMgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2aXJ0dWFsIHNlcnZlciAo
SUQgLSAlZCkgY29udGV4dC4gc3RhdHVzPTB4JVhcbiIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5ldF9udG9hKHNlcnZlcklQKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuZnhzaF92c19pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMp
OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBteV9wcmludChzeXNf
bG9nX3N0cik7IAogICAgICAgICAgICAgICAgICAgIHVtb3VudF9wYXRjaCgpOwogICAgICAgICAg
ICAgICAgICAgIHJldHVybiBDTURfRVJSX0ZBSUxFRDsKICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICAvKiBBZGQgdGhlIC1zIG9wdGlvbiB0byB0aGUgZnRwIGNsaWVudCB0byBiaW5k
IHRvIHRoZQogICAgICAgICAgICAgICAgICogY29ycmVjdCBJUCBhZGRyZXNzIGJlZm9yZSBtYWtp
bmcgdGhlIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICAqLwoJCQkJcmMgPSBkb19zeXN0ZW0o
Ii91c3IvYmluL2Z0cCAtbyAtIC1zICVzIC1tICVzIHwgIgoJCQkJICAgICJ0YXIgeHpwZiAtIC1D
ICVzIC4lcyAuJXMgLiVzIC4vdmVyc2lvbiIsCiAgICAgICAgICAgICAgICAgICAgaW5ldF9udG9h
KHNyY0lQKSwgZnJvbSwgbW91bnRfZGlyLCBkZXNjcmlwdG9yX2ZpbGUsCgkJCQkJbWFuaWZlc3Qs
IG10cmVlX2ZpbGVfbmFtZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CgkJCQkgICAgcmMgPSBkb19z
eXN0ZW0oIi91c3IvYmluL2Z0cCAtbyAtIC1tICVzIHwgIgoJCQkJICAgICJ0YXIgeHpwZiAtIC1D
ICVzIC4lcyAuJXMgLiVzIC4vdmVyc2lvbiIsCiAgICAgICAgICAgICAgICAgICAgZnJvbSwgbW91
bnRfZGlyLCBkZXNjcmlwdG9yX2ZpbGUsIG1hbmlmZXN0LAoJCQkJCW10cmVlX2ZpbGVfbmFtZSk7
CgkJCX0KICAgICAgICAgICAgcmMgPSBjb252ZXJ0X3JjKHJjKTsKCiAgICAgICAgICAgIHBhdGNo
X2Rpcl9uYW1lID0gbW91bnRfZGlyOwogICAgICAgICAgICBpZiAocmMgPT0gQ01EX1NVQ0NFU1Mp
IHsKICAgICAgICAgICAgICAgIG15X3ByaW50KCJEb25lLlxuIik7CiAgICAgICAgICAgIH0gZWxz
ZSB7CgkJCQl1bW91bnRfcGF0Y2goKTsKICAgICAgICAgICAgICAgIG15X3ByaW50KCJEb3dubG9h
ZCBmYWlsZWQuXG4iKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gcmM7
CiAgICB9IGVsc2UgewogICAgICAgIGRvX3N5c3RlbSgiL3NiaW4vdW1vdW50ICVzIDI+L2Rldi9u
dWxsIiwgbW91bnRfZGlyKTsKCiAgICAgICAgcmMgPSBkb19zeXN0ZW0oIi9zYmluL21vdW50IC10
IG5mcyAlcyAlcyIsIGZyb20sIG1vdW50X2Rpcik7CiAgICAgICAgcGF0Y2hfZGlyX25hbWUgPSBt
b3VudF9kaXI7CgogICAgICAgIHJldHVybiBjb252ZXJ0X3JjKHJjKTsKICAgIH0KfQoKCi8qLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KICogTmFtZSA6ICAgZ2V0X3VwZ3JhZGVfdmVyc2lvbigpCiAqCiAqIERlc2NyaXB0aW9u
OiBkZXRlcm1pbmUgdGhlIHZlcnNpb24gb2Ygc3lzdGVtIHVwZ3JhZGUKICoKICogQ3JlYXRlZCBi
eTogIE1heGltIEtvemxvdnNreQogKgogKiBEYXRlIENyZWF0ZWQ6ICAgIDA1LzE0LzAyCiAqCiAq
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KICovCnN0YXRpYyBpbnQKZ2V0X3VwZ3JhZGVfdmVyc2lvbihzdHJ1Y3QgdmVyc2lv
biAqdmVyc2lvbikKewogICAgY2hhciB2ZXJzaW9uX2ZpbGVbTUFYUEFUSExFTiArIDFdOwogICAg
c3RyY3B5KHZlcnNpb25fZmlsZSwgcGF0Y2hfZGlyX25hbWUpOwogICAgc3RyY2F0KHZlcnNpb25f
ZmlsZSwgIi92ZXJzaW9uIik7CiAgICByZXR1cm4gcmVhZF92ZXJzaW9uKHZlcnNpb25fZmlsZSwg
dmVyc2lvbik7Cn0KCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogTmFtZSA6ICAgemVyb192ZXJzaW9uKCkKICoKICog
RGVzY3JpcHRpb246IEZpbGwgdmVyc2lvbiB3aXRoIHplcm9lcwogKgogKiBDcmVhdGVkIGJ5OiAg
TWF4aW0gS296bG92c2t5CiAqCiAqIERhdGUgQ3JlYXRlZDogICAgMDcvMDMvMDIKICoKICotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogKi8Kc3RhdGljIHZvaWQKemVyb192ZXJzaW9uKHN0cnVjdCB2ZXJzaW9uICp2ZXJzaW9u
KQp7CiAgICB2ZXJzaW9uLT5tYWpvciA9IHZlcnNpb24tPm1pbm9yID0gdmVyc2lvbi0+bWFpbnRl
bmFuY2UgPSB2ZXJzaW9uLT5wYXRjaCA9IDA7Cn0KCgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIE5hbWUgOiAgIGdl
dF9vcmdfdXBncmFkZV92ZXJzaW9uKCkKICoKICogRGVzY3JpcHRpb246IHJlYWQgb3JpZ2luYWwg
dmVyc2lvbiBvZiB1cGdyYWRlCiAqCiAqIENyZWF0ZWQgYnk6ICBNYXhpbSBLb3psb3Zza3kKICoK
ICogRGF0ZSBDcmVhdGVkOiAgICAwNy8wMy8wMgogKgogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqLwpzdGF0aWMgdm9p
ZApnZXRfb3JnX3VwZ3JhZGVfdmVyc2lvbihzdHJ1Y3QgdmVyc2lvbiAqdmVyc2lvbikKewogICAg
Y2hhciB2ZXJzaW9uX2ZpbGVbTUFYUEFUSExFTiArIDFdOwogICAgc3RyY3B5KHZlcnNpb25fZmls
ZSwgcGF0Y2hfZGlyX25hbWUpOwogICAgc3RyY2F0KHZlcnNpb25fZmlsZSwgIi92ZXJzaW9uLm9y
ZyIpOwogICAgaWYgKHJlYWRfdmVyc2lvbih2ZXJzaW9uX2ZpbGUsIHZlcnNpb24pICE9IDApIHsK
ICAgICAgICB6ZXJvX3ZlcnNpb24odmVyc2lvbik7CiAgICB9Cn0KCgovKi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIE5h
bWUgOiAgIGlzX2RvdGRpcigpCiAqCiAqIERlc2NyaXB0aW9uOiByZXR1cm4gdHJ1ZSBpZiB0aGUg
bmFtZSBpcyAiLiIgb3IgIi4uIi4KICoKICogQ3JlYXRlZCBieTogIE1heGltIEtvemxvdnNreQog
KgogKiBEYXRlIENyZWF0ZWQ6ICAgIDA1LzE0LzAyCiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICovCnN0YXRpYyBp
bnQKaXNfZG90ZGlyKGNoYXIgKm5hbWUpCnsKICAgIHJldHVybiAobmFtZVswXSA9PSAnLicgJiYg
bmFtZVsxXSA9PSAnXDAnKQogICAgICAgIHx8IChuYW1lWzBdID09ICcuJyAmJiBuYW1lWzFdID09
ICcuJyAmJiBuYW1lWzJdID09ICdcMCcpOwp9CgoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBOYW1lIDogICBmaW5k
X2ZpbGVzKCkKICoKICogRGVzY3JpcHRpb246IEZpbmQgdGhlIGxpc3Qgb2YgdGhlIGZpbGVzIGlu
IHRoZSBkaXJlY3RvcnkKICoKICogQ3JlYXRlZCBieTogIE1heGltIEtvemxvdnNreQogKgogKiBE
YXRlIENyZWF0ZWQ6ICAgIDA1LzE0LzAyCiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICovCnN0YXRpYyBpbnQKZmlu
ZF9maWxlcyhjb25zdCBjaGFyICpkaXJfbmFtZSwgdmVjdG9yIGZpbGVzKQp7CiAgICBpbnQgcmMg
PSBDTURfRVJSX0ZBSUxFRDsKICAgIERJUiAqZGlyID0gb3BlbmRpcihkaXJfbmFtZSk7CiAgICBp
ZiAoZGlyICE9IE5VTEwpIHsKICAgICAgICBzdHJ1Y3QgZGlyZW50ICpkcDsKICAgICAgICBpbnQg
ZXJyb3IgPSAwOwogICAgICAgIHdoaWxlICghZXJyb3IgJiYgKGRwID0gcmVhZGRpcihkaXIpKSAh
PSBOVUxMKSB7CiAgICAgICAgICAgIGlmICghaXNfZG90ZGlyKGRwLT5kX25hbWUpICYmIHN0cmNt
cChkcC0+ZF9uYW1lLCAiLnNuYXBzaG90IikpIHsKICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0
IHN0YnVmOwogICAgICAgICAgICAgICAgY2hhciAqZm5hbWUgPSB6bWFsbG9jKE1UWVBFX1ZFQ1RP
UiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oZGlyX25hbWUp
ICsgMiArIGRwLT5kX3JlY2xlbik7CiAgICAgICAgICAgICAgICBzcHJpbnRmKGZuYW1lLCAiJXMv
JXMiLCBkaXJfbmFtZSwgZHAtPmRfbmFtZSk7CiAgICAgICAgICAgICAgICBpZiAoc3RhdChmbmFt
ZSwgJnN0YnVmKSA8IDApIHsKICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVy
cm9yOiBjYW4ndCBzdGF0ICVzOiAlc1xuIiwgZm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdHJlcnJvcihlcnJubykpOwoJCQkJCWlmIChzeXNfdXBncmFkZSkgewoJCQkJCQlmcHJp
bnRmKHN5c191cGdyYWRlLCAiRXJyb3I6IGNhbid0IHN0YXQgJXM6ICVzXG4iLAoJCQkJCQkJZm5h
bWUsIHN0cmVycm9yKGVycm5vKSk7CgkJCQkJCWZmbHVzaChzeXNfdXBncmFkZSk7CgkJCQkJfQog
ICAgICAgICAgICAgICAgICAgIGVycm9yID0gMTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgICAgaWYgKFNfSVNSRUcoc3RidWYuc3RfbW9kZSkpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgdmVjdG9yX3B1c2goZmlsZXMsIHpzdHJkdXAoTVRZUEVfVkVDVE9SLCBm
bmFtZSkpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoU19JU0RJUihzdGJ1Zi5zdF9t
b2RlKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmluZF9maWxlcyhmbmFtZSwgZmls
ZXMpICE9IENNRF9TVUNDRVNTKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9
IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgemZyZWUoTVRZUEVfVkVDVE9SLCBmbmFtZSk7CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2xvc2VkaXIoZGlyKTsKICAgICAg
ICByYyA9IGVycm9yID8gQ01EX0VSUl9GQUlMRUQgOiBDTURfU1VDQ0VTUzsKICAgIH0KICAgIHJl
dHVybiByYzsKfQoKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogTmFtZSA6ICAgZ2V0X2xvY2FsX3ZlcnNpb24oKQog
KgogKiBEZXNjcmlwdGlvbjogZGV0ZXJtaW5lIHRoZSBjdXJyZW50IHN5c3RlbSB2ZXJzaW9uCiAq
CiAqIENyZWF0ZWQgYnk6ICBNYXhpbSBLb3psb3Zza3kKICoKICogRGF0ZSBDcmVhdGVkOiAgICAw
NS8xNC8wMgogKgogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqLwpzdGF0aWMgaW50CmdldF9sb2NhbF92ZXJzaW9uKHN0
cnVjdCB2ZXJzaW9uICp2ZXJzaW9uKQp7CiAgICBjaGFyIHZlcnNpb25fZmlsZVtNQVhQQVRITEVO
ICsgMV07CiAgICBzdHJjcHkodmVyc2lvbl9maWxlLCBwYXRjaF9kaXJfbmFtZSk7CiAgICBzdHJj
YXQodmVyc2lvbl9maWxlLCAiL3ZlcnNpb24iKTsKICAgIGlmIChyZWFkX3ZlcnNpb24oY3VyX3Ry
dWVuYW1lX2Z1bmModmVyc2lvbl9maWxlKSwKICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbikg
IT0gQ01EX1NVQ0NFU1MpIHsKICAgICAgICB6ZXJvX3ZlcnNpb24odmVyc2lvbik7CiAgICB9CiAg
ICByZXR1cm4gQ01EX1NVQ0NFU1M7Cn0KCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogTmFtZSA6ICAgZ2V0X3NlY29u
ZGFyeV92ZXJzaW9uKCkKICoKICogRGVzY3JpcHRpb246IGRldGVybWluZSB0aGUgc3lzdGVtIHZl
cnNpb24gb2YgdGhlIHNlY29uZGFyeSBmbGFzaAogKgogKiBDcmVhdGVkIGJ5OiAgRGFucWluZyBK
aW4KICoKICogRGF0ZSBDcmVhdGVkOiAgICAwNy8wNS8wNgogKgogKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqLwpzdGF0
aWMgaW50CmdldF9zZWNvbmRhcnlfdmVyc2lvbihzdHJ1Y3QgdmVyc2lvbiAqdmVyc2lvbikKewog
ICAgY2hhciB2ZXJzaW9uX2ZpbGVbTUFYUEFUSExFTiArIDFdOwogICAgaW50IHJjOwoKICAgIHNu
cHJpbnRmKHZlcnNpb25fZmlsZSwgTUFYUEFUSExFTisxLCAiJXMvdmVyc2lvbiIsIHNlY29uZGFy
eV9tb3VudCk7CiAgICBpZiAoKHJjID0gcmVhZF92ZXJzaW9uKHZlcnNpb25fZmlsZSwgdmVyc2lv
bikpICE9IENNRF9TVUNDRVNTKSB7CiAgICAgICAgemVyb192ZXJzaW9uKHZlcnNpb24pOwogICAg
fQogICAgcmV0dXJuIHJjOwp9CgoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBOYW1lIDogICBnZXRfcm9vdF92ZXJz
aW9uKCkKICoKICogRGVzY3JpcHRpb246IGdldCBzeXN0ZW0gdmVyc2lvbiBmcm9tIHJvb3QgZGly
ZWN0b3J5CiAqCiAqIENyZWF0ZWQgYnk6ICBNYXhpbSBLb3psb3Zza3kKICoKICogRGF0ZSBDcmVh
dGVkOiAgICAwMS8xMC8wMwogKgogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqLwpzdGF0aWMgaW50CmdldF9yb290X3Zl
cnNpb24oc3RydWN0IHZlcnNpb24gKnZlcnNpb24pCnsKICAgIGlmIChyZWFkX3ZlcnNpb24oIi92
ZXJzaW9uIiwgdmVyc2lvbikgIT0gQ01EX1NVQ0NFU1MpIHsKICAgICAgICB6ZXJvX3ZlcnNpb24o
dmVyc2lvbik7CiAgICB9CiAgICByZXR1cm4gQ01EX1NVQ0NFU1M7Cn0KCgojaWZkZWYgUkVBQ1RJ
VkFURV9TWVNURU1fQ01EUwovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIE5hbWUgOiAgIGNvbXBhcmVfZGVzY3JfZmls
ZSgpCiAqCiAqIERlc2NyaXB0aW9uOiBjb21wYXJlIHRoZSBkZXNjcmlwdG9ycyB1c2luZyB0aGUg
ZmlsZSBuYW1lcwogKgogKiBDcmVhdGVkIGJ5OiAgTWF4aW0gS296bG92c2t5CiAqCiAqIERhdGUg
Q3JlYXRlZDogICAgMDUvMTQvMDIKICoKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKi8Kc3RhdGljIGludApjb21wYXJl
X2Rlc2NyX2ZpbGUodm9pZCAqZGVzY3IsIHZvaWQgKmZuYW1lKQp7CiAgICByZXR1cm4gIXN0cmNt
cCgoKHN0cnVjdCBkZXNjcmlwdG9yICopZGVzY3IpLT5uYW1lLCBmbmFtZSk7Cn0KCi8qLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KICogTmFtZSA6ICAgZ2V0X2ZpbGVfZGVzY3JpcHRvcigpCiAqCiAqIERlc2NyaXB0aW9uOiBm
aW5kIHRoZSBkZXNjcmlwdG9yIGZvciB0aGUgZmlsZSBpbiB0aGUgZGVzY3JpcHRvcgogKiB2ZWN0
b3IgZHYuCiAqCiAqIENyZWF0ZWQgYnk6ICBNYXhpbSBLb3psb3Zza3kKICoKICogRGF0ZSBDcmVh
dGVkOiAgICAwNS8xNC8wMgogKgogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqLwpzdGF0aWMgc3RydWN0IGRlc2NyaXB0
b3IgKgpnZXRfZmlsZV9kZXNjcmlwdG9yKHZlY3RvciBkdiwgY2hhciAqZm5hbWUpCnsKICAgIHN0
cnVjdCBkZXNjcmlwdG9yICpkZXNjciA9IHZlY3Rvcl9maW5kKGR2LCBjb21wYXJlX2Rlc2NyX2Zp
bGUsIGZuYW1lKTsKICAgIGlmIChkZXNjciA9PSBOVUxMKQogICAgICAgIGRlc2NyID0gJmRlZmF1
bHRfZGVzY3JpcHRvcjsKICAgIHJldHVybiBkZXNjcjsKfQojZW5kaWYgLyogUkVBQ1RJVkFURV9T
WVNURU1fQ01EUyAqLwoKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogTmFtZSA6ICAgZmlsZV9leGlzdHMoKQogKgog
KiBEZXNjcmlwdGlvbjogcmV0dXJuIHRydWUgaWYgdGhlIGZpbGUgZXhpc3RzCiAqCiAqIENyZWF0
ZWQgYnk6ICBNYXhpbSBLb3psb3Zza3kKICoKICogRGF0ZSBDcmVhdGVkOiAgICAwNS8xNC8wMgog
KgogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAqLwpzdGF0aWMgaW50CmZpbGVfZXhpc3RzKGNoYXIgKmZpbGUpCnsKICAg
IHN0cnVjdCBzdGF0IHN0YXRidWY7CiAgICByZXR1cm4gc3RhdChmaWxlLCAmc3RhdGJ1ZikgPT0g
MDsKfQoKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KICogTmFtZSA6ICAgdXBncmFkZV90cnVlbmFtZSgpCiAqCiAqIERl
c2NyaXB0aW9uOiByZXR1cm4gdGhlIGluc3RhbGxhdGlvbiBuYW1lIG9mIGEgZmlsZSBpbiB1cGdy
YWRlCiAqIGRpcmVjdG9yeS4KICoKICogQ3JlYXRlZCBieTogIE1heGltIEtvemxvdnNreQogKgog
KiBEYXRlIENyZWF0ZWQ6ICAgIDA1LzE0LzAyCiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICovCnN0YXRpYyBjaGFy
Kgp1cGdyYWRlX3RydWVuYW1lKGNoYXIgKmZpbGUpCnsKICAgIHJldHVybiBzdHJjaHIoZmlsZSAr
IDEsICcvJyk7Cn0KCgpzdGF0aWMgY2hhciAqCnNlY29uZGFyeV91cGdyYWRlX3RydWVuYW1lKGNo
YXIgKmZpbGUpCnsKICAgIHN0YXRpYyBjaGFyIGJ1ZltNQVhQQVRITEVOXTsKICAgIHN0cmNweShi
dWYsIHNlY29uZGFyeV9tb3VudCk7CiAgICBzdHJjYXQoYnVmLCBzdHJjaHIoZmlsZSArIDEsICcv
JykpOwogICAgcmV0dXJuIGJ1ZjsKfQoKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogTmFtZSA6ICAgc2h1dGRvd25f
c3lzdGVtKCkKICoKICogRGVzY3JpcHRpb246IHRlbGwgdGhlIHVzZXIgdGhlIHN5c3RlbSBpcyBi
ZWluZyBzaHV0IGRvd24KICoKICogQ3JlYXRlZCBieTogIE1heGltIEtvemxvdnNreQogKgogKiBE
YXRlIENyZWF0ZWQ6ICAgIDA1LzE0LzAyCiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICovCnN0YXRpYyB2b2lkCnNo
dXRkb3duX3N5c3RlbSgpCnsKICAgIG15X3ByaW50KCJTaHV0dGluZyBkb3duIHRoZSBzeXN0ZW0g
c29mdHdhcmUuLi4iKTsKICAgIG15X3ByaW50KCJkb25lXG4iKTsKfQoKCi8qLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICog
TmFtZSA6ICAga2lsbF9kYWVtb24oKQogKgogKiBEZXNjcmlwdGlvbjoga2lsbCB0aGUgZGFlbW9u
LCBwaWQgaXMgaW4gcGlkX2ZpbGUgYW5kIHRoZSBkYWVtb24KICogaXMgc3VwcG9zZWQgdG8gcmVt
b3ZlIHRoZSBmaWxlIHdoZW4gZXhpdGluZyBvbiBTSUdURVJNCiAqCiAqIENyZWF0ZWQgYnk6ICBN
YXhpbSBLb3psb3Zza3kKICoKICogRGF0ZSBDcmVhdGVkOiAgICAwNS8xNC8wMgogKgogKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAqLwp2b2lkCmtpbGxfZGFlbW9uKGNoYXIgKnBpZF9maWxlKQp7CiAgICBGSUxFICpmOwog
ICAgaW50IHBpZDsKICAgIGludCB0aW1lX3RvX3NsZWVwID0gMTA7CgogICAgZiA9IGZvcGVuKHBp
ZF9maWxlLCAiciIpOwogICAgaWYgKGYpIHsKICAgICAgICBmc2NhbmYoZiwgIiVkXG4iLCAmcGlk
KTsKICAgICAgICBmY2xvc2UoZik7CiAgICAgICAga2lsbChwaWQsIFNJR1RFUk0pOwogICAgICAg
IHdoaWxlICh0aW1lX3RvX3NsZWVwICYmIGZpbGVfZXhpc3RzKHBpZF9maWxlKSkgewogICAgICAg
ICAgICBzbGVlcCgxKTsKICAgICAgICAgICAgLS10aW1lX3RvX3NsZWVwOwogICAgICAgIH0KICAg
ICAgICBpZiAodGltZV90b19zbGVlcCA9PSAwKSB7CiAgICAgICAgICAgIGtpbGwocGlkLCBTSUdL
SUxMKTsKICAgICAgICAgICAgdW5saW5rKHBpZF9maWxlKTsKICAgICAgICB9CiAgICB9Cn0KCgov
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAqIE5hbWUgOiAgIHNodXRkb3duX2luZXRkKCkKICoKICogRGVzY3JpcHRpb246
IHNodXRkb3duIHRoZSBpbmV0ZAogKgogKiBDcmVhdGVkIGJ5OiAgTWF4aW0gS296bG92c2t5CiAq
CiAqIERhdGUgQ3JlYXRlZDogICAgMDUvMTQvMDIKICoKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKi8Kc3RhdGljIHZv
aWQKc2h1dGRvd25faW5ldGQodm9pZCkKewogICAgbXlfcHJpbnQoIlNodXR0aW5nIGRvd24gdGhl
IGluZXRkLi4uIik7CiAgICBraWxsX2RhZW1vbigiL3Zhci9ydW4vaW5ldGQucGlkIik7CiAgICBt
eV9wcmludCgiZG9uZVxuIik7Cn0KCgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIE5hbWUgOiAgIHNodXRkb3duX3Bt
KCkKICoKICogRGVzY3JpcHRpb246IHNodXRkb3duIHRoZSBwbQogKgogKiBDcmVhdGVkIGJ5OiAg
TWF4aW0gS296bG92c2t5CiAqCiAqIERhdGUgQ3JlYXRlZDogICAgMDUvMTQvMDIKICoKICotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogKi8Kc3RhdGljIHZvaWQKc2h1dGRvd25fcG0odm9pZCkKewoJLyoKICAgICAqIFNodXRk
b3duIEVNUlMgYmVmb3JlIHN0b3BwaW5nIFBNIGJlY2F1c2UgRU1SUyBjYW4gc3RhcnQgYW4gZXhl
Y3V0YWJsZQogICAgICogdGhhdCBpcyBkZXBlbmRlbnQgb24gUE0gcnVubmluZy4KCSAqLwoJc3lz
dGVtKCIvdXNyL2xvY2FsL2FnaWxlL2Jpbi9lbXJzY3JvbiAtciIpOwogICAgbXlfcHJpbnQoIlNo
dXR0aW5nIGRvd24gUE0uLi4iKTsKICAgIGtpbGxfZGFlbW9uKCIvdmFyL3J1bi9wbS5waWQiKTsK
ICAgIG15X3ByaW50KCJkb25lXG4iKTsKfQoKCiNpZmRlZiBSRUFDVElWQVRFX1NZU1RFTV9DTURT
Ci8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KICogTmFtZSA6ICAgdXBncmFkZV9wcm9tX3Nsb3RjcHUoKQogKgogKiBEZXNj
cmlwdGlvbjogdXBncmFkZSBwcm9tIGZvciB0aGUgc3BlY2lmaWVkIHNsb3QvY3B1CiAqCiAqIENy
ZWF0ZWQgYnk6ICBNYXhpbSBLb3psb3Zza3kKICoKICogRGF0ZSBDcmVhdGVkOiAgICAwNi8yNi8w
MgogKgogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAqLwpzdGF0aWMgaW50CnVwZ3JhZGVfcHJvbV9zbG90Y3B1KGludCBz
bG90LCBpbnQgY3B1LCBjaGFyICpmaWxlKQp7CiAgICBhc3NlcnQodmFsaWRfc2xvdF9jcHUoc2xv
dCwgY3B1KSk7CiAgICByZXR1cm4gY29udmVydF9yYyhkb19zeXN0ZW0oIi91c3IvbG9jYWwvYWdp
bGUvYmluL3Byb20tdXBncmFkZSAlZCAlZCAlcyIsCgkJCQlzbG90LCBjcHUsIGZpbGUgPyBmaWxl
IDogIiIpKTsKfQoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBOYW1lIDogICB1cGdyYWRlX3Byb20oKQogKgogKiBE
ZXNjcmlwdGlvbjogVXBncmFkZSB0aGUgcHJvbSBvbiB0aGUgZ2l2ZW4gYm9hcmQuIFJldHVybnMg
MCBpZiBwcm9tCiAqIHVwZ3JhZGUgc3VjY2Vzc2Z1bGx5IGZvciBhbGwgY3B1cy4KICoKICogQ3Jl
YXRlZCBieTogIE1heGltIEtvemxvdnNreQogKgogKiBEYXRlIENyZWF0ZWQ6ICAgIDA1LzE0LzAy
CiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KICovCnN0YXRpYyBpbnQKdXBncmFkZV9wcm9tKGNoYXIgKmJvYXJkLCBj
aGFyICpmaWxlKQp7CiAgICBpbnQgc2xvdCwgY3B1X21pbiwgY3B1X21heCwgY3B1LCBlcnJvciA9
IDA7CiAgICBpZiAoIXN0cmNtcChib2FyZCwgInRvc2hpYmEiKSkgewogICAgICAgIHNsb3QgPSAw
OwogICAgICAgIGNwdV9taW4gPSAxOwogICAgICAgIGNwdV9tYXggPSAxOwogICAgfQogICAgZWxz
ZSBpZiAoIXN0cmNtcChib2FyZCwgInNzYyIpKSB7CiAgICAgICAgc2xvdCA9IDA7CiAgICAgICAg
Y3B1X21pbiA9IDA7CiAgICAgICAgY3B1X21heCA9IDA7CiAgICB9CiAgICBlbHNlIGlmICghc3Ry
Y21wKGJvYXJkLCAidHhyeCIpKSB7CiAgICAgICAgc2xvdCA9IDE7CiAgICAgICAgY3B1X21pbiA9
IDA7CiAgICAgICAgY3B1X21heCA9IDA7CiAgICB9CiAgICBlbHNlIGlmICghc3RyY21wKGJvYXJk
LCAiZnAiKSkgewogICAgICAgIHNsb3QgPSAxOwogICAgICAgIGNwdV9taW4gPSAzOwogICAgICAg
IGNwdV9tYXggPSAzOwogICAgfQogICAgZWxzZSBpZiAoIXN0cmNtcChib2FyZCwgInNwIikpIHsK
ICAgICAgICBzbG90ID0gMjsKICAgICAgICBjcHVfbWluID0gMDsKI2lmZGVmIEJPQkNBVAogICAg
ICAgIGNwdV9tYXggPSAwOwojZWxzZQogICAgICAgIGNwdV9tYXggPSAzOwojZW5kaWYKICAgIH0K
ICAgIGVsc2UgewogICAgICAgIHJldHVybiAxOwogICAgfQogICAgZm9yIChjcHUgPSBjcHVfbWlu
OyBjcHUgPD0gY3B1X21heDsgKytjcHUpIHsKICAgICAgICBpZiAodXBncmFkZV9wcm9tX3Nsb3Rj
cHUoc2xvdCwgY3B1LCBmaWxlKSAhPSAwKSB7CiNpZiBBTExPV19QUk9NX1VQR1JBREVfRkFJTAog
ICAgICAgICAgICBlcnJvciA9IDA7CiNlbHNlCiAgICAgICAgICAgIHNwcmludGYoc3lzX2xvZ19z
dHIsIkZhaWxlZCB0byB1cGdyYWRlIHRoZSBwcm9tIGZvciBzbG90ICVkIGNwdSAlZFxuIiwKICAg
ICAgICAgICAgICAgICAgIHNsb3QsIGNwdSk7CiAgICAgICAgICAgIG15X3ByaW50KHN5c19sb2df
c3RyKTsKICAgICAgICAgICAgbXlfcHJpbnQoIkFmdGVyIHRoZSBzeXN0ZW0gY29tZXMgdXAgYWZ0
ZXIgcmVib290LCB2ZXJpZnkgdGhhdCB0aGUgc2xvdC9jcHVcbiIpOwogICAgICAgICAgICBteV9w
cmludCgiaXMgaW4gVVAgc3RhdGUgYW5kIGV4ZWN1dGUgdGhlIGZvbGxvd2luZyBjb21tYW5kOlxu
Iik7CiAgICAgICAgICAgIHNwcmludGYoc3lzX2xvZ19zdHIsInN5c3RlbSBwcm9tdXBncmFkZSAl
ZCAlZFxuIiwgc2xvdCwgY3B1KTsKICAgICAgICAgICAgbXlfcHJpbnQoc3lzX2xvZ19zdHIpOwog
ICAgICAgICAgICBlcnJvciA9IDE7CiNlbmRpZiAgICAgICAgICAKICAgICAgICB9CiAgICB9CiAg
ICByZXR1cm4gZXJyb3I7Cn0KCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogTmFtZSA6ICAgdXBncmFkZV9wcm9tc19p
Zl9uZWVkZWQoKQogKgogKiBEZXNjcmlwdGlvbjogVXBncmFkZSB0aGUgcHJvbXMgZm9yIHRoZSBi
b2FyZHMgd2hpY2ggaGFkIHRoZWlyCiAqIFBST01zIG1vZGlmaWVkLgogKgogKiBDcmVhdGVkIGJ5
OiAgTWF4aW0gS296bG92c2t5CiAqCiAqIERhdGUgQ3JlYXRlZDogICAgMDUvMTQvMDIKICoKICot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogKi8Kc3RhdGljIGludAp1cGdyYWRlX3Byb21zX2lmX25lZWRlZCh2ZWN0b3IgZHYs
IHZlY3RvciBmaWxlc19saXN0LCBjaGFyICooKnRydWVuYW1lX2Z1bmMpKGNoYXIgKikpCnsKICAg
IGludCByYyA9IDA7CiAgICBpbnQgaTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgdmVjdG9yX21heChm
aWxlc19saXN0KTsgKytpKSB7CiAgICAgICAgY2hhciAqZHN0X2ZpbGUgPSAoKnRydWVuYW1lX2Z1
bmMpKHZlY3Rvcl9sb29rdXBfaW5kZXgoZmlsZXNfbGlzdCwgaSkpOwogICAgICAgIGNoYXIgKnJv
b3RfZHN0X2ZpbGUgPSB1cGdyYWRlX3RydWVuYW1lKAogICAgICAgICAgICB2ZWN0b3JfbG9va3Vw
X2luZGV4KGZpbGVzX2xpc3QsIGkpKTsKICAgICAgICBzdHJ1Y3QgZGVzY3JpcHRvciAqZGVzY3Ig
PSBnZXRfZmlsZV9kZXNjcmlwdG9yKGR2LCByb290X2RzdF9maWxlKTsKICAgICAgICBpZiAoaXNf
cHJvbShkZXNjcikgfHwgaXNfYmlncHJvbShkZXNjcikpIHsKICAgICAgICAgICAgaW50IGo7CiAg
ICAgICAgICAgIGZvciAoaiA9IDA7IGogPCB2ZWN0b3JfbWF4KGR2KTsgKytqKSB7CiAgICAgICAg
ICAgICAgICBzdHJ1Y3QgZGVzY3JpcHRvciAqZGVzY3IgPSB2ZWN0b3JfbG9va3VwX2luZGV4KGR2
LCBqKTsKICAgICAgICAgICAgICAgIGlmICghc3RyY21wKGRlc2NyLT5uYW1lLCByb290X2RzdF9m
aWxlKSAmJiBpc19iaWdwcm9tKGRlc2NyKSkgewojaWZkZWYgQk9CQ0FUCiAgICAgICAgICAgICAg
ICAgICAgLyogRG9uJ3QgdXBncmFkZSBiaWcgZmxhc2ggdGhyb3VnaCBTU0MKICAgICAgICAgICAg
ICAgICAgICAgKiBJdCB3aWxsIGJlIGRvbmUgdGhyb3VnaCBGQwogICAgICAgICAgICAgICAgICAg
ICAqLwogICAgICAgICAgICAgICAgICAgIGlmIChzdHJjbXAoZGVzY3ItPmJvYXJkLCAic3NjIikp
CiNlbmRpZgogICAgICAgICAgICAgICAgICAgIHJjIHw9IHVwZ3JhZGVfcHJvbShkZXNjci0+Ym9h
cmQsIGRzdF9maWxlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAg
ICBmb3IgKGogPSAwOyBqIDwgdmVjdG9yX21heChkdik7ICsraikgewogICAgICAgICAgICAgICAg
c3RydWN0IGRlc2NyaXB0b3IgKmRlc2NyID0gdmVjdG9yX2xvb2t1cF9pbmRleChkdiwgaik7CiAg
ICAgICAgICAgICAgICBpZiAoIXN0cmNtcChkZXNjci0+bmFtZSwgcm9vdF9kc3RfZmlsZSkgJiYg
aXNfcHJvbShkZXNjcikpIHsKI2lmZGVmIEJPQkNBVAogICAgICAgICAgICAgICAgICAgIC8qIERv
bid0IHVwZ3JhZGUgc21hbGwgcHJvbSB0aHJvdWdoIFNQCiAgICAgICAgICAgICAgICAgICAgICog
YmVjYXVzZSBpdCB3b3VsZCBiZSByZWR1bmRhbnQgKHNhbWUgYXMgU1NDIHByb20pCiAgICAgICAg
ICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmNtcChkZXNjci0+Ym9h
cmQsICJzcCIpKQojZW5kaWYKICAgICAgICAgICAgICAgICAgICByYyB8PSB1cGdyYWRlX3Byb20o
ZGVzY3ItPmJvYXJkLCBkc3RfZmlsZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0K
ICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gcmM7Cn0KI2VuZGlmIC8qIFJFQUNUSVZBVEVfU1lT
VEVNX0NNRFMgKi8KCgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIE5hbWUgOiAgIHJlYm9vdF9ib2FyZHMoKQogKgog
KiBEZXNjcmlwdGlvbjogcmVib290IHNsb3RzIDEgYW5kIDIKICoKICogQ3JlYXRlZCBieTogIE1h
eGltIEtvemxvdnNreQogKgogKiBEYXRlIENyZWF0ZWQ6ICAgIDA1LzE0LzAyCiAqCiAqLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KICovCnN0YXRpYyBpbnQKcmVib290X2JvYXJkcyggY2hhciAqKCp0cnVuYW1lX2Z1bmMpKGNo
YXIgKikpCnsKICAgIGNoYXNzaXNkTXNnUmVib290UmVxX3QgbXNnOwogICAgbXlfcHJpbnQoIlJl
Ym9vdGluZyBib2FyZHMuLi4iKTsKICAgIG1zZy5oZHIubWlkID0gQ0hBU1NJU0RfUkVCT09UX1JF
UTsKICAgIG1zZy5yZWJvb3RfdHlwZSA9IENNX1JFQk9PVF9UWVBFX1NMT1Q7CiAgICBtc2cuc2xv
dCA9IDE7CiAgICBtc2cuc2xpY2UgPSAwOwogICAgbmZ4c2hfc2VuZCgmbXNnLCBzaXplb2YobXNn
KSwgImNtIiwgMSwgMCwgMSwgTlVMTCwgTlVMTCwgMCwKICAgICAgICBORlhTSF9TRU5EX0FHSUxF
KTsKICAgIG1zZy5zbG90ID0gMjsKICAgIG5meHNoX3NlbmQoJm1zZywgc2l6ZW9mKG1zZyksICJj
bSIsIDEsIDAsIDEsIE5VTEwsIE5VTEwsIDAsCiAgICAgICAgTkZYU0hfU0VORF9BR0lMRSk7CiAg
ICBteV9wcmludCgiZG9uZVxuIik7CiAgICByZXR1cm4gMDsKfQoKCi8qLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogTmFt
ZSA6ICAgcmVib290X2NvbGQoKQogKgogKiBEZXNjcmlwdGlvbjogRG8gYSBjb2xkIHJlYm9vdCBv
ZiB0aGUgc3lzdGVtCiAqCiAqIENyZWF0ZWQgYnk6ICBNYXhpbSBLb3psb3Zza3kKICoKICogRGF0
ZSBDcmVhdGVkOiAgICAwNS8xNC8wMgogKgogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqLwpzdGF0aWMgdm9pZApyZWJv
b3RfY29sZCgpCnsKICAgIG15X3ByaW50KCJSZWJvb3RpbmcgdGhlIHN5c3RlbS4uLlxuIik7CiAg
ICAvKiBpZiB1cGdyYWRpbmcgdG8gc2Vjb25kYXJ5LCB0ZWxsIHJlYm9vdCB0byBzd2l0Y2ggdGhl
IGRpc2tzICovCiAgICBkb19zeXN0ZW0oIi9zYmluL3JlYm9vdCAtYyAlc1xuIiwgdXBncmFkZV9z
ZWNvbmRhcnkgPyAiLXMiIDogIiIpOwp9CgoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBOYW1lIDogICB1cGdyYWRl
X2RpcmVjdG9yaWVzKCkKICoKICogRGVzY3JpcHRpb246IFVwZGF0ZSBkaXJlY3RvcmllcyBhY2Nv
cmRpbmcgdG8gbmV3IGRpc3QgZmlsZS4KICoKICogQ3JlYXRlZCBieTogIE1heGltIEtvemxvdnNr
eQogKgogKiBEYXRlIENyZWF0ZWQ6ICAgIDA2LzI2LzAyCiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICovCnN0YXRp
YyBpbnQKdXBncmFkZV9kaXJlY3RvcmllcyhjaGFyICptdHJlZV9maWxlKQp7CiAgICBpbnQgcmM7
CgogICAgbXlfcHJpbnQoIlVwZGF0aW5nIGRpcmVjdG9yaWVzLi4uIik7CiAKICAgIHJjID0gZG9f
c3lzdGVtKCIvdXNyL3NiaW4vbXRyZWUgLXFkVWVmICVzIC1wICVzIiwgbXRyZWVfZmlsZSwKICAg
ICAgICAgICAgdXBncmFkZV9zZWNvbmRhcnkgPyBzZWNvbmRhcnlfbW91bnQgOiAiLyIpOwoKICAg
IG15X3ByaW50KCJkb25lXG4iKTsKICAgIHJldHVybiBjb252ZXJ0X3JjKHJjKTsKfQoKCi8qLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KICogTmFtZSA6ICAgc2h1dGRvd25fYWxsKCkKICoKICogRGVzY3JpcHRpb246IFNodXRk
b3duIHRoZSBzeXN0ZW0gc29mdHdhcmUgYW5kIGtpbGwgdGhlIGRhZW1vbnMgc28KICogd2UgY2Fu
IHByb2NlZWQgd2l0aCB1cGdyYWRlIGluIHBlYWNlLgogKgogKiBDcmVhdGVkIGJ5OiAgTWF4aW0g
S296bG92c2t5CiAqCiAqIERhdGUgQ3JlYXRlZDogICAgMDYvMjYvMDIKICoKICotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
Ki8Kdm9pZApzaHV0ZG93bl9hbGwodm9pZCkKewogICAgY2hhciBidWZbMjBdOwoKICAgIC8qIFN0
b3AgdGhlIGhvc3RpZGQKICAgICAqLwogICAgc3RyY3B5KGJ1ZiwgInN1c3BlbmQiKTsKICAgIG5m
eHNoX3NlbmQoYnVmLCBzdHJsZW4oYnVmKSwgImhvc3RpZCIsCiAgICAgICAgICAgICAgIE5GWF9T
U0NfVU5JWCwgU1NDX1NMT1QsIE1HTVRQTEFORSwgXzRzZWMsIDAsIDAsCiAgICAgICAgICAgICAg
IE5GWFNIX1NFTkRfQUdJTEUpOwogICAgc2h1dGRvd25fc3lzdGVtKCk7CiAgICBzaHV0ZG93bl9w
bSgpOwogICAgc2h1dGRvd25faW5ldGQoKTsKfQoKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogTmFtZSA6ICAgcmVi
b290X2FsbCgpCiAqCiAqIERlc2NyaXB0aW9uOiByZXNldCBGUCBhbmQgU1AgYW5kIHJlYm9vdCBT
U0MuCiAqCiAqIENyZWF0ZWQgYnk6ICBNYXhpbSBLb3psb3Zza3kKICoKICogRGF0ZSBDcmVhdGVk
OiAgICAwNi8yNi8wMgogKgogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqLwp2b2lkCnJlYm9vdF9hbGwodm9pZCkKewog
ICAgcmVib290X2JvYXJkcyhOVUxMKTsKICAgIHJlYm9vdF9jb2xkKCk7Cn0KCgovKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAqIE5hbWUgOiAgIG5vaXN5X21ha2VfYWxsZnNfd3JpdGFibGUKICoKICogRGVzY3JpcHRpb246
IFJlbW91bnQgbG9jYWwgZmlsZXN5c3RlbXMgd3JpdGFibGUgbWFraW5nIHNvbWUgbm9pc2UKICoK
ICogQ3JlYXRlZCBieTogIE1heGltIEtvemxvdnNreQogKgogKiBEYXRlIENyZWF0ZWQ6ICAgIDA4
LzE1LzAyCiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KICovCmludApub2lzeV9tYWtlX2FsbGZzX3dyaXRhYmxlKHZv
aWQpCnsKICAgIGludCBydjsKICAgIG15X3ByaW50KCJSZW1vdW50aW5nIHRoZSBsb2NhbCBmaWxl
c3lzdGVtIHJlYWQtd3JpdGUuLi4iKTsKICAgIHJ2ID0gbWFrZV9hbGxmc193cml0YWJsZSgpOwog
ICAgaWYgKHJ2ID09IDApCiAgICAgICAgbXlfcHJpbnQoImRvbmVcbiIpOwogICAgZWxzZQogICAg
ICAgIG15X3ByaW50KCJmYWlsZWRcbiIpOwogICAgcmV0dXJuIHJ2Owp9CgoKLyotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
KiBOYW1lIDogICBjb21wbGV0ZV91cGdyYWRlKCkKICoKICogRGVzY3JpcHRpb246IFRoZSB3b3Jz
dC1jYXNlIHVwZ3JhZGUgLSBzaHV0ZG93biBhbmQgcmVzdGFydCBldmVyeXRoaW5nCiAqCiAqIENy
ZWF0ZWQgYnk6ICBNYXhpbSBLb3psb3Zza3kKICoKICogRGF0ZSBDcmVhdGVkOiAgICAwNS8xNC8w
MgogKgogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAqLwpzdGF0aWMgaW50CmNvbXBsZXRlX3VwZ3JhZGUodmVjdG9yIGR2
LCBjaGFyICooKnRydWVuYW1lX2Z1bmMpKGNoYXIgKiksCiAgICAgICAgICAgICAgICAgY2hhciAq
bXRyZWVfZmlsZSkKewogICAgaW50IHJjID0gMDsKICAgIGNoYXIgY21kWzI1Nl07CiAgICBjbU1z
Z0hlYXJ0YmVhdENvbnRyb2xSZXFfdCByZXE7CiNpZmRlZiBCT0JDQVQKICAgIGludCBpOwogICAg
aXBtX2xpbmtfY2hhbmdlX3N0YXR1c190ICAgaXBtX3JlcSwgaXBtX3JzcDsKI2Vsc2UKICAgIGNo
YXIgYnVmWzIwXTsKI2VuZGlmCgogICAgaWYgKCF1cGdyYWRlX3NlY29uZGFyeSkgewogICAgICAg
IGJ6ZXJvKCZyZXEsIHNpemVvZihyZXEpKTsKICAgICAgICByZXEuaGRyLnNyY1Nsb3QgPSAwOwog
ICAgICAgIHJlcS5oZHIuc3JjQ3B1ID0gMDsKICAgICAgICByZXEuaGRyLnNyY0FwcCA9IAogICAg
ICAgIHJlcS5oZHIuc3JjUGxhbmUgPSBNR01UUExBTkU7CiAgICAgICAgcmVxLmhkci5taWQgPSBD
TV9TRVRfSEVBUlRCRUFUX09GRjsKICAgICAgICByZXEuZmVhdHVyZV9lbiA9IDA7CiAgICAgICAg
bmZ4c2hfc2VuZCgmcmVxLCBzaXplb2YocmVxKSwgImNtIiwgMCwgMSwgTUdNVFBMQU5FLAogICAg
ICAgICAgICAgICAgICAgMCwgTlVMTCwgMCwgTkZYU0hfU0VORF9BR0lMRSk7CiAgICAgICAgRV9M
T0coY2xhc3NfMSwgbm90aWNlX3MsIGVlZV9nZXRBcHBsaWNhdGlvbklkKCJuZnhzaCIpLCAwLCAw
LCAwLCAKICAgICAgICAgICAgICgiU3lzdGVtIHdpbGwgcmVib290IGR1ZSB0byBzeXN0ZW0gdXBn
cmFkZS5cbiIpKTsKICAgICAgICBpZiAoc3lzX3VwZ3JhZGUpIHsKICAgICAgICAgICAgZnByaW50
ZihzeXNfdXBncmFkZSwiU3lzdGVtIHdpbGwgcmVib290IGR1ZSB0byBzeXN0ZW0gdXBncmFkZS5c
biIpOwogICAgICAgICAgICBmZmx1c2goc3lzX3VwZ3JhZGUpOwogICAgICAgIH0KI2lmbmRlZiBC
T0JDQVQKICAgICAgICBzbGVlcF9hY2N1cmF0ZWx5KDMpOwogICAgICAgIC8qIFJlYm9vdCBGUCBh
bmQgU1AgZm9yIGNsdXN0ZXIgZmFpbG92ZXIgYW5kIHdhaXQgZm9yIHRoZW0KICAgICAgICAgKiB0
byBjb21lIGJhY2sgdG8gcmVzdW1lIHVwZ3JhZGUuCiAgICAgICAgICovCiAgICAgICAgcmVib290
X2JvYXJkcyhOVUxMKTsKI2Vsc2UKICAgICAgICBiemVybygmaXBtX3JlcSwgc2l6ZW9mKGlwbV9s
aW5rX2NoYW5nZV9zdGF0dXNfdCkpOwogICAgICAgIGJ6ZXJvKCZpcG1fcnNwLCBzaXplb2YoaXBt
X2xpbmtfY2hhbmdlX3N0YXR1c190KSk7CiAgICAgICAgaXBtX3JlcS5oZHIuaXBtaF9tdHlwZSA9
IElQTV9NU0dfTElOS19ESVM7CiAgICAgICAgaXBtX3JlcS5oZHIuaXBtaF9zaXplID0gc2l6ZW9m
KGlwbV9saW5rX2NoYW5nZV9zdGF0dXNfdCk7CiAgICAgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkr
KykgewogICAgICAgICAgICBzdHJjcHkoaXBtX3JlcS5saW5rX25hbWUsIGZwX3BvcnRzW2ldKTsK
ICAgICAgICAgICAgaWYgKG5meHNoX3NlbmQoJmlwbV9yZXEsIHNpemVvZihpcG1fbGlua19jaGFu
Z2Vfc3RhdHVzX3QpLCAiaXBtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgTkZYX05GUF9U
WFJYMSwgTkZYX1NMT1RUWVBFX05GUCwgTUdNVFBMQU5FLCAzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAmaXBtX3JzcCwgc2l6ZW9mKGlwbV9saW5rX2NoYW5nZV9zdGF0dXNfdCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE5GWFNIX1NFTkRfQUdJTEUpIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICA8IHNpemVvZihpcG1fbGlua19jaGFuZ2Vfc3RhdHVzX3QpKSB7CiAgICAgICAg
ICAgICAgICBzcHJpbnRmKHN5c19sb2dfc3RyLCJUaW1lb3V0IGRpc2FibGluZyBGUCBwb3J0ICVz
XG4iLCBpcG1fcmVxLmxpbmtfbmFtZSk7CiAgICAgICAgICAgICAgICBteV9wcmludChzeXNfbG9n
X3N0cik7CiAgICAgICAgICAgIH0KICAgICAgICB9Ci8qCiAgICAgICAgZXhlY3V0ZV9jb21tYW5k
KCIvdXNyL2xvY2FsL2FnaWxlL2Jpbi9zdG9yYWdlIiwgNCwgImNvbnRyb2wiLCAicG9ydCIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICJkaXNhYmxlIiwgIm9uY2UiLCBOVUxMKTsKKi8KI2VuZGlm
CiAgICAgICAgZXhlY3V0ZV9jb21tYW5kKCIvdXNyL2xvY2FsL2FnaWxlL2Jpbi9jaGFzc2lzIiwg
MiwgCiAgICAgICAgICAgICAgICAgICAgICAgICJ3ZCIsICJkaXNhYmxlIiwgTlVMTCk7Ci8qCiAg
ICAgICAgc2xlZXBfYWNjdXJhdGVseSgzKTsKKi8KICAgICAgICBzaHV0ZG93bl9wbSgpOwojaWZu
ZGVmIEJPQkNBVAogICAgICAgIHNsZWVwX2FjY3VyYXRlbHkoOTApOwojZW5kaWYKICAgICAgICBz
aHV0ZG93bl9zeXN0ZW0oKTsKICAgICAgICBzaHV0ZG93bl9pbmV0ZCgpOwogICAgfQogICAgaWYg
KCh1cGdyYWRlX3NlY29uZGFyeSB8fCAocmMgPSBub2lzeV9tYWtlX2FsbGZzX3dyaXRhYmxlKCkp
ID09IDApCiAgICAgICAgJiYgKHJjID0gdXBncmFkZV9kaXJlY3RvcmllcyhtdHJlZV9maWxlKSkg
PT0gMCkgewogICAgICAgIG15X3ByaW50KCJTdGFydGluZyBpbnN0YWxsIG9mIGZpbGVzeXN0ZW0u
Li4iKTsKICAgICAgICByYz0gZG9fc3lzdGVtKCIvdXNyL2xvY2FsL2FnaWxlL2Jpbi92ZXJpZnlf
aW5zdGFsbC5zaCAtZiAlcyAlcyAtciIsCgkJICAgICAgICAgIHBhdGNoX2xvY2F0aW9uLCB1cGdy
YWRlX3NlY29uZGFyeSA/ICItcyIgOiAiLXAiKSA7CgogICAgICAgIGlmIChyYykgewoJCQkgbXlf
cHJpbnQoIkluc3RhbGxhdGlvbiBmYWlsZWQsIGV4aXRpbmcuLi5cbiIpIDsKCQl9CiAgICAgICAg
aWYgKHVwZ3JhZGVfc2Vjb25kYXJ5KSB7CiAgICAgICAgICAgIHN5bmMoKTsKI2lmIDAKLyogQEBA
IHNob3VsZCBiZSBzYWZlciB3YXkgdG8gY29weSBjb25maWd1cmF0aW9uIGZpbGVzIGZyb20gYQog
KiBsaXZlIHN5c3RlbS4KICovCiAgICAgICAgICAgIHNodXRkb3duX2FsbCgpOwojZW5kaWYKCiAg
ICAgICAgICAgIGlmIChzeXNfdXBncmFkZSkgewogICAgICAgICAgICAgICAgZnByaW50ZihzeXNf
dXBncmFkZSwiVXBkYXRpbmcgY29uZmlndXJhdGlvbiBmaWxlcywgU3RhcnQgdGltZTogJXNcbiIs
Z2V0X3RpbWUoKSk7CiAgICAgICAgICAgICAgICBmZmx1c2goc3lzX3VwZ3JhZGUpOwogICAgICAg
ICAgICB9CiAgICAgICAgICAgIG15X3ByaW50KCJVcGRhdGluZyBjb25maWd1cmF0aW9uIGZpbGVz
XG4iKTsKCiAgICAgICAgICAgIGRvX2NvcHlfZmlsZXMoIi8iLCBzZWNvbmRhcnlfbW91bnQsIHN5
c19jb25maWdfZmlsZXMpOwogICAgICAgICAgICBzcHJpbnRmKGNtZCwgIi91c3Ivc2Jpbi9wd2Rf
bWtkYiAtZCAlcy9ldGMgJXMvZXRjL21hc3Rlci5wYXNzd2QiLAogICAgICAgICAgICAgICAgICAg
IHNlY29uZGFyeV9tb3VudCwgc2Vjb25kYXJ5X21vdW50KTsKICAgICAgICAgICAgc3lzdGVtKGNt
ZCk7CgogICAgICAgICAgICBkb19zeXN0ZW0oIi91c3Ivc2Jpbi9wd2RfbWtkYiAtZCAlcy9ldGMg
JXMvZXRjL21hc3Rlci5wYXNzd2QiLAogICAgICAgICAgICAgICAgICAgIHNlY29uZGFyeV9tb3Vu
dCwgc2Vjb25kYXJ5X21vdW50KTsKCiAgICAgICAgICAgIGlmIChzeXNfdXBncmFkZSkgewogICAg
ICAgICAgICAgICAgZnByaW50ZihzeXNfdXBncmFkZSwiVXBkYXRpbmcgY29uZmlndXJhdGlvbiBm
aWxlcywgRW5kIHRpbWU6ICVzXG4iLGdldF90aW1lKCkpOwogICAgICAgICAgICAgICAgZmZsdXNo
KHN5c191cGdyYWRlKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiNpZm5kZWYgQk9C
Q0FUCiAgICAgICAgICAgIC8qIFN0b3AgdGhlIGhvc3RpZGQgYmVmb3JlIHJlYm9vdGluZyBib2Fy
ZHMgc28gdGhleSBjYW4ndCB0cnkKICAgICAgICAgICAgICogdG8gZG93bmxvYWQgd2hpbGUgU1ND
IGlzIGdvaW5nIGRvd24uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBzdHJjcHkoYnVmLCAi
c3VzcGVuZCIpOwogICAgICAgICAgICBuZnhzaF9zZW5kKGJ1Ziwgc3RybGVuKGJ1ZiksICJob3N0
aWQiLAogICAgICAgICAgICAgICAgICAgICAgIE5GWF9TU0NfVU5JWCwgU1NDX1NMT1QsIE1HTVRQ
TEFORSwgXzRzZWMsIDAsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgTkZYU0hfU0VORF9BR0lM
RSk7CiAgICAgICAgICAgIHJlYm9vdF9ib2FyZHModHJ1ZW5hbWVfZnVuYyk7CiNlbmRpZgoJCQlp
ZiAoc3lzX3VwZ3JhZGUpIHsKCQkJCWZwcmludGYoc3lzX3VwZ3JhZGUsICJTeXN0ZW0gVXBncmFk
ZSBjb21wbGV0ZWQgYXQ6ICVzXG4iLAoJCQkJCWdldF90aW1lKCkpOwoJCQkJZmZsdXNoKHN5c191
cGdyYWRlKTsKCQkJfQogICAgICAgICAgICByZWJvb3RfY29sZCgpOwogICAgICAgIH0KCgkJbXlf
cHJpbnQoIlVwZ3JhZGUgb2YgdGhlIHN0YW5kYnkgZmxhc2ggY29tcGxldGVkXG4iKTsKCQlpZiAo
c3lzX3VwZ3JhZGUpIHsKCQkJZnByaW50ZihzeXNfdXBncmFkZSwgIlN5c3RlbSBVcGdyYWRlIGNv
bXBsZXRlZCBhdDogJXNcbiIsCgkJCQlnZXRfdGltZSgpKTsKCQkJZmZsdXNoKHN5c191cGdyYWRl
KTsKCQl9CgogICAgfQoKICAgIHJldHVybiByYzsKfQoKICAgICAgICAgICAgICAgICAgICAgICAg
IAovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAqIE5hbWUgOiAgIHJlYWRfdXBncmFkZSgpCiAqCiAqIERlc2NyaXB0aW9u
OiBSZWFkIHRoZSBkZXNjcmlwdG9yIGluIHRoZSB1cGdyYWRlIGRpcmVjdG9yeQogKgogKiBDcmVh
dGVkIGJ5OiAgTWF4aW0gS296bG92c2t5CiAqCiAqIERhdGUgQ3JlYXRlZDogICAgMDUvMTQvMDIK
ICoKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogKi8Kc3RhdGljIHZlY3RvcgpyZWFkX3VwZ3JhZGVfZGVzY3JpcHRvcigp
CnsKICAgIC8vY2hhciBmaWxlbmFtZVtNQVhQQVRITEVOXTsKICAgIC8vc3ByaW50ZihmaWxlbmFt
ZSwgIiVzJXMiLCBwYXRjaF9kaXJfbmFtZSwgZGVzY3JpcHRvcl9maWxlKTsKICAgIHJldHVybiBy
ZWFkX2Rlc2NyaXB0b3IoZGVzY3JpcHRvcl9maWxlKTsKfQoKCi8qLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogTmFtZSA6
ICAgaGFzX3ZhbGlkX2lwX2FkZHIoKQogKgogKiBEZXNjcmlwdGlvbjogUmV0dXJuIHRydWUgaWYg
dGhlIHBhdGNoIGxvY2F0aW9uIGNvbnRhaW5zIGEgdmFsaWQKICogICAgICAgICAgICAgIGlwIGFk
ZHJlc3MKICogaW50ZXJmYWNlLgogKgogKiBDcmVhdGVkIGJ5OiAgTGF1cmVudCBCcmFyZAogKgog
KiBEYXRlIENyZWF0ZWQ6MDcvMDkvMDMKICoKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKi8Kc3RhdGljIGludApoYXNf
dmFsaWRfaXBfYWRkcihjaGFyICpwYXRjaF9sb2NhdGlvbikKewogICAgY2hhciAqY29sdW1uID0g
c3RyY2hyKHBhdGNoX2xvY2F0aW9uLCAnOicpOwogICAgc3RydWN0IGluX2FkZHIgaG9zdF9hZGRy
OwogICAgaW50IHJjOwogICAgCiAgICBpZiAoY29sdW1uID09IE5VTEwpCiAgICAgICAgcmV0dXJu
IEZBTFNFOwogICAgKmNvbHVtbiA9IDA7CiAgICByYyA9IGluZXRfYXRvbihwYXRjaF9sb2NhdGlv
biwgJmhvc3RfYWRkcik7CiAgICAqY29sdW1uID0gJzonOwoKICAgIHJldHVybiByYzsKfQoKLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogKiBOYW1lIDogICBpc19mcF9hZGRyKCkKICoKICogRGVzY3JpcHRpb246IFJldHVy
biB0cnVlIGlmIHRoZSBwYXRjaCBpcyBhY2Nlc3NlZCB0aHJvdWdoIGZwCiAqIGludGVyZmFjZS4K
ICoKICogQ3JlYXRlZCBieTogIE1heGltIEtvemxvdnNreQogKgogKiBEYXRlIENyZWF0ZWQ6ICAg
IDExLzAxLzAyCiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICovCnN0YXRpYyBpbnQKaXNfZnBfYWRkcihjaGFyICpw
YXRjaF9sb2NhdGlvbikKewogICAgY2hhciAqY29sdW1uID0gc3RyY2hyKHBhdGNoX2xvY2F0aW9u
LCAnOicpOwogICAgc3RydWN0IGluX2FkZHIgaG9zdF9hZGRyOwogICAgaW5fYWRkcl90IG91cl9h
ZGRyOwogICAgaW50IHJjOwogICAgY2hhciBpZmFjZVsyNTZdOwogICAgKmNvbHVtbiA9IDA7Cgog
ICAgaW5ldF9hdG9uKHBhdGNoX2xvY2F0aW9uLCAmaG9zdF9hZGRyKTsKICAgIHJjID0gZ2V0X291
cl9hZGRyKGhvc3RfYWRkci5zX2FkZHIsIGlmYWNlLCAmb3VyX2FkZHIpOwogICAgcmV0dXJuICEo
cmMgPT0gMCAmJiAoIXN0cmNtcChpZmFjZSwgInNjMSIpIHx8ICFzdHJjbXAoaWZhY2UsICJzYzIi
KSkpOwp9CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAqIE5hbWUgOiAgIG5lZWRfbG9jYWxfY29weSgpCiAqCiAqIERl
c2NyaXB0aW9uOiBSZXR1cm4gdHJ1ZSBpZiBuZWVkIHRvIGNvcHkgZmlsZXMgdG8gbG9jYWwgZGlz
ayBiZWZvcmUKICogdXBncmFkaW5nIC0gaWYgdXNpbmcgZnAgaW50ZXJmYWNlIHRvIHVwZ3JhZGUg
YW5kIG5vdCB1cGdyYWRpbmcgdGhlIHN0YW5kYnkKICogZmxhc2guCiAqCiAqIENyZWF0ZWQgYnk6
ICBNYXhpbSBLb3psb3Zza3kKICoKICogRGF0ZSBDcmVhdGVkOiAgICAwOS8xMy8wMgogKgogKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAqLwpzdGF0aWMgaW50Cm5lZWRfbG9jYWxfY29weSgpCnsKICAgIHJldHVybiAoIXVw
Z3JhZGVfc2Vjb25kYXJ5ICYmCiAgICAgICAgICAgICFpc19mdHBfdXBncmFkZShwYXRjaF9sb2Nh
dGlvbikgJiYKICAgICAgICAgICAgaXNfZnBfYWRkcihwYXRjaF9sb2NhdGlvbikpOwp9CgovKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAqIE5hbWUgOiAgIHBlcmZvcm1fdXBncmFkZSgpCiAqCiAqIERlc2NyaXB0aW9uOiB1
cGdyYWRlIGEgc3lzdGVtIGZyb20gYSBjb21wbGV0ZSBkaXN0cmlidXRpb24KICoKICogQ3JlYXRl
ZCBieTogIE1heGltIEtvemxvdnNreQogKgogKiBEYXRlIENyZWF0ZWQ6ICAgIDA1LzE0LzAyCiAq
CiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KICovCnN0YXRpYyBpbnQKcGVyZm9ybV91cGdyYWRlKHZvaWQpCnsKICAgIHZl
Y3RvciBkdjsKICAgIGludCByYyA9IENNRF9FUlJfRkFJTEVEOwogICAgY2hhciBtdHJlZV9maWxl
WzI1Nl07CglpbnQgbWFrZV9sb2NhbF9jb3B5OwoKICAgIG15X3ByaW50KCJSZWFkaW5nIHRoZSBz
eXN0ZW0gZGVzY3JpcHRvci4uLiIpOwogICAgZHYgPSByZWFkX3VwZ3JhZGVfZGVzY3JpcHRvcigp
OwogICAgaWYgKGR2ICE9IE5VTEwpIHsKICAgICAgICBteV9wcmludCgiZG9uZVxuIik7CiAgICAg
ICAgbWFrZV9sb2NhbF9jb3B5ID0gbmVlZF9sb2NhbF9jb3B5KCk7CiAgICAgICAgc3ByaW50Ziht
dHJlZV9maWxlLCAiJXMlcyIsCiAgICAgICAgICAgICAgICBtYWtlX2xvY2FsX2NvcHkgPyBsb2Nh
bF9kZXN0IDogbW91bnRfZGlyLAogICAgICAgICAgICAgICAgbXRyZWVfZmlsZV9uYW1lKTsKICAg
ICAgICByYyA9IGNvbXBsZXRlX3VwZ3JhZGUoZHYsIGN1cl90cnVlbmFtZV9mdW5jLCBtdHJlZV9m
aWxlKTsKICAgICAgICB2ZWN0b3JfZnJlZV9hbGwoZHYpOwogICAgfSBlbHNlIHsKICAgICAgICBt
eV9wcmludCgiZmFpbGVkXG4iKTsKICAgIH0KICAgIHJldHVybiByYzsKfQoKZXh0ZXJuIGludCBf
X2dldG9wdF9pbml0aWFsaXplZDsKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogTmFtZSA6ICAgcGFyc2VfYXJncygp
CiAqCiAqIERlc2NyaXB0aW9uOiBwYXJzZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzCiAqCiAqIENy
ZWF0ZWQgYnk6ICBNYXhpbSBLb3psb3Zza3kKICoKICogRGF0ZSBDcmVhdGVkOiAgICAxMS8wMS8w
MgogKgogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAqLwpzdGF0aWMgaW50CnBhcnNlX2FyZ3MoaW50IGFyZ2MsIGNoYXIg
Kiphcmd2KQp7CiAgICBpbnQgaTsKCiAgICB1cGdyYWRlX3NlY29uZGFyeSA9IDA7CiAgICBmb3Jj
ZV91cGdyYWRlID0gMDsKCiAgICBpZiAoKGFyZ2MgPiAxKSAmJiAoYXJnYyA8PSAzKSkgewogICAg
ICAgIGZvciAoaSA9IDA7IGkgPCBhcmdjLTE7IGkrKykgewogICAgICAgICAgICBpZiAoIXN0cmNt
cChhcmd2W2ldLCAiLXMiKSkKICAgICAgICAgICAgICAgIHVwZ3JhZGVfc2Vjb25kYXJ5ID0gMTsK
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICBpZiAoIXN0cmNtcChhcmd2W2ldLCAiLWYiKSkK
ICAgICAgICAgICAgICAgIGZvcmNlX3VwZ3JhZGUgPSAxOwogICAgICAgICAgICBlbHNlIHsKICAg
ICAgICAgICAgICAgIHByaW50ZigiPyBJbnZhbGlkIG9wdGlvblxuIik7CiAgICAgICAgICAgICAg
ICByZXR1cm4gQ01EX0VSUl9GQUlMRUQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAg
ICBlbHNlIHsKICAgICAgICBpZiAoYXJnYyAhPSAxKSB7CiAgICAgICAgICAgIHByaW50ZigiPyBJ
bnZhbGlkIG9wdGlvblxuIik7CiAgICAgICAgICAgIHJldHVybiBDTURfRVJSX0ZBSUxFRDsKICAg
ICAgICB9CiAgICB9CgogICAgcGF0Y2hfbG9jYXRpb24gPSBhcmd2W2FyZ2MtMV07CiAgICBpZiAo
IWlzX2Z0cF91cGdyYWRlKHBhdGNoX2xvY2F0aW9uKSkgewogICAgLy8gaWYgKCFpc19mdHBfdXBn
cmFkZShwYXRjaF9sb2NhdGlvbikgJiYKICAgIC8vICAgICAhaGFzX3ZhbGlkX2lwX2FkZHIocGF0
Y2hfbG9jYXRpb24pKSB7CiAgICAgICAgbXlfcHJpbnQoIkludmFsaWQgdXBncmFkZSBsb2NhdGlv
blxuIik7CiAgICAgICAgcmV0dXJuIENNRF9FUlJfRkFJTEVEOwogICAgfQogICAgZWxzZSB7CiAg
ICAgICAgaWYgKHN5c191cGdyYWRlKSB7CiAgICAgICAgICAgIGZwcmludGYoc3lzX3VwZ3JhZGUs
IlBlcmZvcm1pbmcgc3lzdGVtIHVwZ3JhZGUgZnJvbSBsb2NhdGlvbiAlc1xuIixwYXRjaF9sb2Nh
dGlvbik7CiAgICAgICAgICAgIGZmbHVzaChzeXNfdXBncmFkZSk7CiAgICAgICAgfQogICAgfQog
ICAgcmV0dXJuIENNRF9TVUNDRVNTOwp9CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIE5hbWUgOiBmb3JtX2Z1bGxf
cGF0aCgpCiAqCiAqIERlc2NyaXB0aW9uIDogR2V0IHRoZSBwYXNzd29yZCBhbmQgZm9ybXMgYSBm
dWxsIHBhdGggZm9yIGZ0cAogKgogKiBDcmVhdGVkIGJ5OgogKgogKiBEYXRlIENyZWF0ZWQ6IDAz
LzE2LzA2CiAqCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqLwppbnQKZm9ybV9mdWxsX3BhdGgoaW50IGFyZ2MsIGNo
YXIgKiphcmd2LCBjaGFyICoqZnVsbF9wYXRoKQp7CiAgICBjaGFyIHBhc3N3ZFtTRUNfUFdEX01B
WF0sICpzdGFydCwgKnN0YXJ0X2NvbG9uLCAqZW5kX2NvbG9uOwogICAgY2hhciAqcGF0Y2hfbG9j
YXRpb24gPSBhcmd2W2FyZ2MtMV07CiAgICBjaGFyIHN0clRhcls4XTsKICAgIC8qCiAgICAgKiBD
aGVjayBmb3IgdGhlIGNvbW1hbmQgaW5jb21wbGV0ZS4KICAgICAqIGlmIGZ0cCBpcyBub3Qgc3Bl
Y2lmaWVkIHRoZW4gZXJyb3IgbXNnIHdpbGwgYmUgZGlzcGxheWVkLgogICAgICovCiAgICBpZiAo
IWlzX2Z0cF91cGdyYWRlKHBhdGNoX2xvY2F0aW9uKSkKICAgIHsKICAgICAgICBteV9wcmludCgi
ZnRwIFVSTCBpcyBub3Qgc3BlY2lmaWVkXG4iKTsKICAgICAgICByZXR1cm4gQ01EX0VSUl9JTkNP
TVBMRVRFOwogICAgfQoKICAgIC8qIENoZWNrIGlmIHRhciBmaWxlIGlzIHNwZWNpZmllZCAqLwog
ICAgYnplcm8oc3RyVGFyLDgpOwogICAgc3RybmNweShzdHJUYXIscGF0Y2hfbG9jYXRpb24gKyBz
dHJsZW4ocGF0Y2hfbG9jYXRpb24pLTYsNik7CiAgICBpZiAoc3RyY21wKHN0clRhciwgInRhci5n
eiIpKQogICAgewogICAgICAgIG15X3ByaW50KCJ0YXIgZmlsZSBpcyBub3Qgc3BlY2lmaWVkXG4i
KTsgIAogICAgICAgIHJldHVybiBDTURfRVJSX0ZBSUxFRDsKICAgIH0KCiAgICAgLyoKICAgICAq
IENoZWNrIGZvciB0aGUgJ0AnIGluIGZ0cC4KICAgICAqIElmIGl0IGlzIG5vdCBzcGVjaWZpZWQg
dGhlbiBlcnJvciBtc2cgd2lsbCBiZSBkaXNwbGF5ZWQuCiAgICAgKi8KICAgIGlmICgoc3RhcnQg
PSBzdHJjaHIocGF0Y2hfbG9jYXRpb24sICdAJykpID09IE5VTEwpCiAgICB7CiAgICAgICAgbXlf
cHJpbnQoIlVuYWJsZSB0byBmaW5kIGhvc3RuYW1lL2lwIGFkZHJlc3MgaW4gZnRwIFVSTFxuIik7
CiAgICAgICAgcmV0dXJuIENNRF9FUlJfRkFJTEVEOwogICAgfQoKICAgIC8qCiAgICAgKiBDaGVj
ayB0byBzZWUgd2hldGhlciB0aGUgcGFzc3dvcmQgaXMgc3BlY2lmaWVkIHdpdGggdGhlIHVzZXJu
YW1lLgogICAgICovCiAgICBzdGFydF9jb2xvbiA9IHN0cmNocihwYXRjaF9sb2NhdGlvbiwgJzon
KTsKICAgIGVuZF9jb2xvbiA9IHN0cnJjaHIocGF0Y2hfbG9jYXRpb24sICc6Jyk7CiAgICBpZiAo
c3RhcnRfY29sb24gIT0gZW5kX2NvbG9uKQogICAgewogICAgICAgICpmdWxsX3BhdGggPSBOVUxM
OwogICAgICAgIHJldHVybiBDTURfU1VDQ0VTUzsKICAgIH0KICAgIAogICAgLyoKICAgICAqIElm
IHRoZSBwYXNzd29yZCBpcyBub3Qgc3BlY2lmaWVkIHdpdGggdGhlIHVzZXIgbmFtZSwgdGhpcyBm
dW5jdGlvbgogICAgICogZ2V0cyB0aGUgcGFzc3dvcmQgZnJvbSB0aGUgdXNlci4KICAgICAqLwog
ICAgaWYgKGdldFBhc3N3ZEZyb21Vc2VyKHBhc3N3ZCwgTlVMTCwgMCwgc2l6ZW9mKHBhc3N3ZCks
IFRSVUUpICE9IDApCiAgICB7CiAgICAgICAgcmV0dXJuIENNRF9FUlJfRkFJTEVEOwogICAgfQoK
ICAgICpmdWxsX3BhdGggPSAoY2hhciAqKW1hbGxvYyhzdHJsZW4oYXJndlthcmdjLTFdKSArIHN0
cmxlbihwYXNzd2QpICsgMik7CiAgICBpZigqZnVsbF9wYXRoID09IE5VTEwpCiAgICB7CiAgICAg
ICAgbXlfcHJpbnQoIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeVxuIik7CiAgICAgICAgcmV0dXJu
IENNRF9FUlJfRkFJTEVEOwogICAgfQogICAgLyoKICAgICAqIFNwbGl0cyB0aGUgJ2Z0cDovL3Vz
ZXJAaXBhZGRyL3BhdGgnIGludG8gdHdvIHBhcnRzLgogICAgICogRXh0cmFjdHMgdGhlICdmdHA6
Ly91c2VyJyBzdHJpbmcuCiAgICAgKi8KICAgIG1lbXNldCgqZnVsbF9wYXRoLCAwLCAoc3RybGVu
KGFyZ3ZbYXJnYy0xXSkgKyBzdHJsZW4ocGFzc3dkKSArIDIpKTsKICAgIHN0cm5jYXQoKmZ1bGxf
cGF0aCwgcGF0Y2hfbG9jYXRpb24sIHN0YXJ0LXBhdGNoX2xvY2F0aW9uKTsKICAgIC8qCiAgICAg
KiBDb25jYXRlbmF0ZXMgJzonIGFuZCBwYXNzd2Qgd2l0aCAnZnRwOi8vdXNlcicKICAgICAqIEFm
dGVyIHRoYXQgdGhlIHN0cmluZyB3aWxsIGJlICdmdHA6Ly91c2VyOnBhc3N3ZCcKICAgICAqLwog
ICAgc3RyY2F0KCpmdWxsX3BhdGgsICI6Iik7CiAgICBzdHJjYXQoKmZ1bGxfcGF0aCwgcGFzc3dk
KTsKICAgIC8qCiAgICAgKiBBcHBlbmRzIHRoZSByZW1haW5pbmcgc3RyaW5nIGluIGZ0cC4KICAg
ICAqIFRoZSByZW1haW5pbmcgc3RyaW5nIHdpbGwgYmUgJ0BpcGFkZHIvcGF0aCcuCiAgICAgKi8K
ICAgIHN0cmNhdCgqZnVsbF9wYXRoLCBzdGFydCk7CiAgICAKICAgIC8qCiAgICAgKiBBc3NpZ25z
IHRoZSBuZXcgc3RyaW5nIHRvIGFyZ3ZbYXJnYy0xXQogICAgICovCiAgICBhcmd2W2FyZ2MtMV0g
PSAqZnVsbF9wYXRoOwogICAgcmV0dXJuIENNRF9TVUNDRVNTOwp9CiAgICAKLyotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
KiBOYW1lIDogICAgICAgIHNlbmRVcGdyYWRlRXZlbnQoKQogKgogKiBEZXNjcmlwdGlvbjogIFNl
bmQgYSAiTkZYX0VWRU5UX1VQR1JBREUiIGV2ZW50IHRvIHN1cHBvcnQuc2guCiAqCiAqIENyZWF0
ZWQgYnk6ICAgRWQgS3dhbgogKgogKiBEYXRlIENyZWF0ZWQ6IDA5LzA2LzA2CiAqCiAqLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KICovCnN0YXRpYyB2b2lkCnNlbmRVcGdyYWRlRXZlbnQodm9pZCkKewogICAgY2hhciAqY21k
X3N0cjsKCiAgICBpZiAoYXNwcmludGYoJmNtZF9zdHIsCiAgICAgICAgICAgICAgICAgIi91c3Iv
bG9jYWwvYWdpbGUvYmluL3N1cHBvcnQuc2ggLWMwIC1nIE5GWF9FVkVOVF9VUEdSQURFICIKICAg
ICAgICAgICAgICAgICAiLUNhbGxlZF9mcm9tX25meHNoICVzID4gL2Rldi9udWxsIDI+JjEiLAog
ICAgICAgICAgICAgICAgIHN5c191cGdyYWRlX2xvZ2ZpbGUpICE9IC0xKSB7CiAgICAgICAgc3lz
dGVtKGNtZF9zdHIpOwogICAgICAgIGZyZWUoY21kX3N0cik7CiAgICB9CgoJLyogQW5keSdzIGRv
IHN5c3RlbQoJZG9fc3lzdGVtKCIvdXNyL2xvY2FsL2FnaWxlL2Jpbi9zdXBwb3J0LnNoIC1jMCAt
ZyBORlhfRVZFTlRfVVBHUkFERSAiCgkJCSAiLUNhbGxlZF9mcm9tX25meHNoICVzID4gL2Rldi9u
dWxsIDI+JjEiLCBzeXNfdXBncmFkZV9sb2dmaWxlKTsKCSovCn0KCi8qLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogTmFt
ZSA6ICAgZG9fdXBncmFkZSgpCiAqCiAqIERlc2NyaXB0aW9uOiBtYWtlIHN5c3RlbSB1cGdyYWRl
CiAqCiAqIENyZWF0ZWQgYnk6ICBNYXhpbSBLb3psb3Zza3kKICoKICogRGF0ZSBDcmVhdGVkOiAg
ICAwNS8xNC8wMgogKgogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqLwppbnQKZG9fdXBncmFkZShpbnQgYXJnYywgY2hh
ciAqKmFyZ3YpIAp7CiAgICBzdHJ1Y3QgdmVyc2lvbiBjdXJyZW50X3ZlcnNpb24sIHVwZ3JhZGVf
dmVyc2lvbjsKICAgIHN0cnVjdCB2ZXJzaW9uIG9yZ191cGdyYWRlX3ZlcnNpb247CiAgICBpbnQg
cmMgPSBDTURfU1VDQ0VTUzsKICAgIGludCBpOwogICAgdmVjdG9yIHNlY29uZGFyeV9mc3RhYnMg
PSBOVUxMOwoKICAgIGJlY29tZV9yb290KCk7CiAgICBpZiAoKHN5c191cGdyYWRlID0gZm9wZW4o
c3lzX3VwZ3JhZGVfbG9nZmlsZSwidyIpKSA9PSBOVUxMICkKICAgICAgICBwcmludGYoIkVycm9y
IG9wZW5pbmcgZmlsZSAlcy5cbiIsc3lzX3VwZ3JhZGVfbG9nZmlsZSk7CgogICAgaWYgKHN5c191
cGdyYWRlKSB7CiAgICAgICAgZnByaW50ZihzeXNfdXBncmFkZSwiU3lzdGVtIFVwZ3JhZGUgQ29t
bWFuZCBzdGFydGVkIGF0OiAlc1xuIiwKCQkgICAgZ2V0X3RpbWUoKSk7CiAgICAgICAgZmZsdXNo
KHN5c191cGdyYWRlKTsKICAgIH0KCgkvKgoJICogc3lzdGVtIHVwZ3JhZGUgdXNlcyAvdG1wIHNw
YWNlLiB2ZXJpZnkgdGhhdCAvdG1wIGlzIG5vdCBmdWxsLgoJICogaWYgL3RtcCBpcyBmdWxsLCB0
aGVuIGZhaWwgdXBncmFkZSwgYW5kIGxvZyBlcnJvci4KCSAqLwoJaWYgKHN5c3RlbSgiaWYgWyBg
ZGYgLWggL3RtcCB8IHRhaWwgLTEgfCBhd2sgJ3twcmludCAkNX0nIHwgc2VkICdzLyUvLydgIC1s
dCA5OSBdOyB0aGVuIGV4aXQgMDsgZWxzZSBleGl0IDE7IGZpIikpIHsKCQlmcHJpbnRmKHN5c191
cGdyYWRlLCAiL3RtcCBpcyBmdWxsLCBzeXN0ZW0gdXBncmFkZSBmYWlsZWRcbiIpOwoJCXByaW50
ZigiL3RtcCBpcyBGVUxMLCBzeXN0ZW0gdXBncmFkZSBmYWlsZWQhXG4iKTsKCQl1bmJlY29tZV9y
b290KCk7CgkJcmMgPSBDTURfRVJSX0ZBSUxFRDsKCQlnb3RvIGRvbmU7Cgl9CgogICAgcmMgPSBw
YXJzZV9hcmdzKGFyZ2MsIGFyZ3YpOwogICAgaWYgKHJjICE9IENNRF9TVUNDRVNTKSB7CgkJZ290
byBkb25lOwoJfQogICAgCiAgICBpZiAodXBncmFkZV9zZWNvbmRhcnkpIHsKICAgICAgICBnZXRf
ZGV2aWNlX25hbWVzKCk7CgkJc2Vjb25kYXJ5X2ZzdGFicyA9IG1ha2Vfc2Vjb25kYXJ5X2ZzdGFi
cygpOwogICAgICAgIG15X3ByaW50KCJDaGVja2luZyBmaWxlIHN5c3RlbS4uLlxuIik7CiAgICAg
ICAgaWYgKHN5c191cGdyYWRlKSB7CiAgICAgICAgICAgIGZwcmludGYoc3lzX3VwZ3JhZGUsImZp
bGVzeXN0ZW0gY2hlY2sgc3RhcnRlZCBhdDogJXNcbiIsZ2V0X3RpbWUoKSk7CiAgICAgICAgICAg
IGZmbHVzaChzeXNfdXBncmFkZSk7CiAgICAgICAgfQogICAgICAgIGZvciAoaSA9IDA7IGkgPCB2
ZWN0b3JfbWF4KHNlY29uZGFyeV9mc3RhYnMpOyArK2kpIHsKICAgICAgICAgICAgc3RydWN0IGZz
dGFiICpmcyA9IHZlY3Rvcl9sb29rdXBfaW5kZXgoc2Vjb25kYXJ5X2ZzdGFicywgaSk7CiAgICAg
ICAgICAgIGV4ZWN1dGVfY29tbWFuZCgiL3NiaW4vZnNjayIsIDIsICIteSIsIGZzLT5mc19zcGVj
LCBOVUxMKTsKICAgICAgICB9CiAgICAgICAgbXlfcHJpbnQoIlVubW91bnRpbmcgc2Vjb25kYXJ5
IGRpc2suLi4iKTsKICAgICAgICAvL3dob29wcywga2lzcyB0aGF0IG1lbW9yeSBnb29kYnllCgkJ
Ly9zZWNvbmRhcnlfZnN0YWJzID0gbWFrZV9zZWNvbmRhcnlfZnN0YWJzKCk7CiAgICAgICAgdV9t
b3VudF9zZWNvbmRhcnkoc2Vjb25kYXJ5X2ZzdGFicyk7CiAgICAgICAgbXlfcHJpbnQoIk1vdW50
aW5nIHNlY29uZGFyeSBkaXNrLi4uIik7CiAgICAgICAgcmMgPSBjb252ZXJ0X3JjKG1vdW50X3Nl
Y29uZGFyeShzZWNvbmRhcnlfZnN0YWJzKSk7CiAgICAgICAgc3ByaW50ZihzeXNfbG9nX3N0ciwg
IiVzXG4iLCByYyA9PSBDTURfU1VDQ0VTUyA/ICJkb25lLiIgOiAiZmFpbGVkLiIpOwogICAgICAg
IG15X3ByaW50KHN5c19sb2dfc3RyKTsKICAgICAgICBpZiAoc3lzX3VwZ3JhZGUpIHsKICAgICAg
ICAgICAgZnByaW50ZihzeXNfdXBncmFkZSwgIk1vdW50ZWQgc2Vjb25kYXJ5IGRpc2sgYXQ6ICVz
XG4iLCBnZXRfdGltZSgpKTsKICAgICAgICAgICAgZmZsdXNoKHN5c191cGdyYWRlKTsKICAgICAg
ICB9CiAgICAgICAgY3VyX3RydWVuYW1lX2Z1bmMgPSBzZWNvbmRhcnlfdXBncmFkZV90cnVlbmFt
ZTsKICAgIH0gZWxzZSB7CiAgICAgICAgY3VyX3RydWVuYW1lX2Z1bmMgPSB1cGdyYWRlX3RydWVu
YW1lOwogICAgfQoKICAgIGlmIChyYyA9PSBDTURfU1VDQ0VTUykgewogICAgICAgIHJjID0gbW91
bnRfcGF0Y2gocGF0Y2hfbG9jYXRpb24pOwogICAgICAgIGlmIChyYyA9PSBDTURfU1VDQ0VTUykg
ewogICAgICAgICAgICBteV9wcmludCgiTW91bnRlZCB0aGUgdXBncmFkZSBkaXJlY3RvcnlcbiIp
OwogICAgICAgICAgICBpZiAoc3lzX3VwZ3JhZGUpIHsKICAgICAgICAgICAgICAgIGZwcmludGYo
c3lzX3VwZ3JhZGUsIk1vdW50ZWQgdXBncmFkZSBkaXJlY3RvcnkgYXQ6ICVzXG4iLGdldF90aW1l
KCkpOwogICAgICAgICAgICAgICAgZmZsdXNoKHN5c191cGdyYWRlKTsKICAgICAgICAgICAgfQog
ICAgICAgICAgICBpZiAoKHJjID0gZ2V0X3VwZ3JhZGVfdmVyc2lvbigmdXBncmFkZV92ZXJzaW9u
KSkgPT0gQ01EX1NVQ0NFU1MpIHsKICAgICAgICAgICAgICAgIGdldF9vcmdfdXBncmFkZV92ZXJz
aW9uKCZvcmdfdXBncmFkZV92ZXJzaW9uKTsKICAgICAgICAgICAgICAgIGlmICgocmMgPSBnZXRf
bG9jYWxfdmVyc2lvbigmY3VycmVudF92ZXJzaW9uKSkgPT0gQ01EX1NVQ0NFU1MpIHsKICAgICAg
ICAgICAgICAgICAgICBpZiAoY3VycmVudF92ZXJzaW9uLnBsYXRmb3JtICE9IHVwZ3JhZGVfdmVy
c2lvbi5wbGF0Zm9ybSkgewogICAgICAgICAgICAgICAgICAgICAgICBteV9wcmludCgiVGhlIHVw
Z3JhZGUgZGlzdHJpYnV0aW9uIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhpcyBzeXN0ZW0hXG4i
KTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeyAKICAgICAgICAgICAgICAgICAgICAgICAg
c3ByaW50ZihzeXNfbG9nX3N0ciwiQ3VycmVudCBzeXN0ZW0gdmVyc2lvbjogJWQuJWQuJWQuJWQg
IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgInVwZ3JhZGUgdmVyc2lvbjogJWQuJWQuJWQu
JWRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3ZlcnNpb24ubWFqb3Is
IGN1cnJlbnRfdmVyc2lvbi5taW5vciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJl
bnRfdmVyc2lvbi5tYWludGVuYW5jZSwgY3VycmVudF92ZXJzaW9uLnBhdGNoLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdXBncmFkZV92ZXJzaW9uLm1ham9yLCB1cGdyYWRlX3ZlcnNpb24u
bWlub3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGdyYWRlX3ZlcnNpb24ubWFpbnRl
bmFuY2UsIHVwZ3JhZGVfdmVyc2lvbi5wYXRjaCk7CiAgICAgICAgICAgICAgICAgICAgICAgIG15
X3ByaW50KHN5c19sb2dfc3RyKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3JjZV91
cGdyYWRlICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29tcGFyZV92ZXJzaW9ucygm
Y3VycmVudF92ZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmdXBncmFkZV92ZXJzaW9uKSA+PSAwKSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbXlfcHJpbnQoIlRoZSBzeXN0ZW0gaXMgdXAtdG8tZGF0ZVxuIik7CiAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGVjayBm
b3IgaWxsZWdhbCB1cGdyYWRlcy4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjID0g
Y2hlY2tfdmVyc2lvbnNfY29tcGF0aWJsZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZjdXJyZW50X3ZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmdXBncmFkZV92ZXJzaW9uKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChy
YyAhPSBDTURfU1VDQ0VTUykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwcmlu
dGYoc3lzX2xvZ19zdHIsIkNhbm5vdCB1cGdyYWRlIGZyb20gIgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInZlcnNpb24gJWQuJWQuJWQuJWQgdG8gdmVyc2lvbiAiCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJWQuJWQuJWQuJWRcbiIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3ZlcnNpb24ubWFq
b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3ZlcnNp
b24ubWlub3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50
X3ZlcnNpb24ubWFpbnRlbmFuY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjdXJyZW50X3ZlcnNpb24ucGF0Y2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1cGdyYWRlX3ZlcnNpb24ubWFqb3IsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1cGdyYWRlX3ZlcnNpb24ubWlub3IsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1cGdyYWRlX3ZlcnNpb24ubWFpbnRlbmFuY2UsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGdyYWRlX3ZlcnNpb24ucGF0Y2gp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15X3ByaW50KHN5c19sb2dfc3RyKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9yY2VfdXBncmFkZSB8fAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb21wYXJlX3ZlcnNpb25zKCZjdXJyZW50
X3ZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJm9yZ191cGdyYWRlX3ZlcnNpb24pID49IDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmMgPSBwZXJmb3JtX3VwZ3JhZGUoKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihzeXNf
bG9nX3N0ciwiU3RhcnQgdmVyc2lvbiAlZC4lZC4lZC4lZCBpcyBuZXdlciAiCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGFuIGN1cnJlbnQsIGNhbiBub3QgdXBncmFk
ZVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnX3VwZ3JhZGVf
dmVyc2lvbi5tYWpvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Jn
X3VwZ3JhZGVfdmVyc2lvbi5taW5vciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3JnX3VwZ3JhZGVfdmVyc2lvbi5tYWludGVuYW5jZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3JnX3VwZ3JhZGVfdmVyc2lvbi5wYXRjaCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbXlfcHJpbnQoc3lzX2xvZ19zdHIpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJjID0gQ01EX0VSUl9GQUlMRUQ7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICBteV9wcmludCgiZmFpbGVkIHRvIGRldGVybWluZSB0aGUgdXBncmFkZSB2ZXJzaW9uXG4i
KTsKICAgICAgICAgICAgfQogICAgICAgICAgICB1bW91bnRfcGF0Y2goKTsKICAgICAgICB9CiAg
ICB9CgogICAgaWYgKHVwZ3JhZGVfc2Vjb25kYXJ5KSB7CiAgICAgICAgdV9tb3VudF9zZWNvbmRh
cnkoc2Vjb25kYXJ5X2ZzdGFicyk7CiAgICAgICAgZnJlZV9mc3RhYl92ZWN0b3Ioc2Vjb25kYXJ5
X2ZzdGFicyk7CiAgICB9CgogICAgaWYgKGZjbG9zZShzeXNfdXBncmFkZSkgIT0gMCkgewogICAg
ICAgIHByaW50ZigiRXJyb3IgY2xvc2luZyBmaWxlICVzLlxuIiwgc3lzX3VwZ3JhZGVfbG9nZmls
ZSk7Cgl9CmRvbmU6CiAgICB1bmJlY29tZV9yb290KCk7CiAgICBzZW5kVXBncmFkZUV2ZW50KCk7
CiAgICByZXR1cm4gcmM7Cn0KCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogTmFtZSA6ICAgc2hvd19sb2NhbF92ZXJz
aW9uKCkKICoKICogRGVzY3JpcHRpb246IFNob3cgdGhlIHN5c3RlbSB2ZXJzaW9uCiAqCiAqIENy
ZWF0ZWQgYnk6ICBNYXhpbSBLb3psb3Zza3kKICoKICogRGF0ZSBDcmVhdGVkOiAgICAwNS8xNC8w
MgogKgogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAqLwpzdGF0aWMgaW50CnNob3dfbG9jYWxfdmVyc2lvbih2b2lkKQp7
CiAgICBzdHJ1Y3QgdmVyc2lvbiBjdXJyZW50X3ZlcnNpb247CiAgICBpbnQgcmMgPSBnZXRfcm9v
dF92ZXJzaW9uKCZjdXJyZW50X3ZlcnNpb24pOwogICAgaWYgKHJjICE9IENNRF9TVUNDRVNTKSB7
CiAgICAgICAgZnByaW50ZihzdGRlcnIsICJDYW4ndCBkZXRlcm1pbmUgY3VycmVudCB2ZXJzaW9u
XG4iKTsKICAgICAgICBpZiAoc3lzX3VwZ3JhZGUpIHsKICAgICAgICAgICAgZnByaW50ZihzeXNf
dXBncmFkZSwgIkNhbid0IGRldGVybWluZSBjdXJyZW50IHZlcnNpb25cbiIpOwogICAgICAgICAg
ICBmZmx1c2goc3lzX3VwZ3JhZGUpOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICAg
IHByaW50X3ZlcnNpb24oJmN1cnJlbnRfdmVyc2lvbik7CiAgICB9CiAgICByZXR1cm4gcmM7Cn0K
Ci8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KICogTmFtZSA6ICAgc2hvd19zZWNvbmRhcnlfdmVyc2lvbigpCiAqCiAqIERl
c2NyaXB0aW9uOiBTaG93IHRoZSB2ZXJzaW9uIG9mIHRoZSBzZWNvbmRhcnkgZmxhc2gKICoKICog
Q3JlYXRlZCBieTogIERhbnFpbmcgSmluCiAqCiAqIERhdGUgQ3JlYXRlZDogICAgMDcvMDUvMDYK
ICoKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogKi8Kc3RhdGljIGludApzaG93X3NlY29uZGFyeV92ZXJzaW9uKHZvaWQp
CnsKICAgIHN0cnVjdCB2ZXJzaW9uIHNlY192ZXJzaW9uOwogICAgaW50IHJjOwogICAgdmVjdG9y
IHNlY29uZGFyeV9mc3RhYnMgPSBOVUxMOwoKICAgIGJlY29tZV9yb290KCk7CiAgICBnZXRfZGV2
aWNlX25hbWVzKCk7CiAgICBzZWNvbmRhcnlfZnN0YWJzID0gbWFrZV9zZWNvbmRhcnlfZnN0YWJz
KCk7CgogICAgaWYgKChyYyA9IGNvbnZlcnRfcmMobW91bnRfc2Vjb25kYXJ5KHNlY29uZGFyeV9m
c3RhYnMpKSkgPT0gQ01EX1NVQ0NFU1MpIHsKICAgICAgICBpZiAoZ2V0X3NlY29uZGFyeV92ZXJz
aW9uKCZzZWNfdmVyc2lvbikgPT0gQ01EX1NVQ0NFU1MpIHsKICAgICAgICAgICAgcHJpbnRfdmVy
c2lvbigmc2VjX3ZlcnNpb24pOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
ZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gZ2V0IGEgdmFsaWQgdmVyc2lvblxuIik7CiAgICAg
ICAgfSAKICAgIH0KICAgIGVsc2UgewogICAgICAgIGZwcmludGYoc3RkZXJyLCAiTW91bnQgb2Yg
dGhlIHNlY29uZGFyeSBmbGFzaCBmYWlsZWRcbiIpOwogICAgfQogICAgdV9tb3VudF9zZWNvbmRh
cnkoc2Vjb25kYXJ5X2ZzdGFicyk7CiAgICBmcmVlX2ZzdGFiX3ZlY3RvcihzZWNvbmRhcnlfZnN0
YWJzKTsKICAgIHVuYmVjb21lX3Jvb3QoKTsKCiAgICByZXR1cm4gcmM7Cn0KCi8qLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
ICogTmFtZSA6ICAgc2hvd19yZW1vdGVfdmVyc2lvbigpCiAqCiAqIERlc2NyaXB0aW9uOiBTaG93
IHRoZSB2ZXJzaW9uIG9mIHRoZSBwYXRjaCAKICoKICogQ3JlYXRlZCBieTogIE1heGltIEtvemxv
dnNreQogKgogKiBEYXRlIENyZWF0ZWQ6ICAgIDA1LzE0LzAyCiAqCiAqLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICovCnN0
YXRpYyBpbnQKc2hvd19yZW1vdGVfdmVyc2lvbihjaGFyICpwYXRjaF9wYXRoKQp7CiAgICBzdHJ1
Y3QgdmVyc2lvbiB2ZXJzaW9uOwogICAgaW50IHJjOwoJY2hhciB2ZXJzaW9uX2ZpbGVbTUFYUEFU
SExFTiArIDFdOwogICAgCiAgICBiZWNvbWVfcm9vdCgpOwogICAgcmMgPSBtb3VudF9wYXRjaChw
YXRjaF9wYXRoKTsKICAgIGlmIChyYyA9PSBDTURfU1VDQ0VTUykgewogICAJICAgIHNucHJpbnRm
KHZlcnNpb25fZmlsZSwgTUFYUEFUSExFTisxLCAiJXMvdmVyc2lvbiIsIG1vdW50X2Rpcik7CiAg
ICAgICAgaWYgKChyYyA9IHJlYWRfdmVyc2lvbih2ZXJzaW9uX2ZpbGUsICZ2ZXJzaW9uKSkgPT0g
Q01EX1NVQ0NFU1MpIHsKICAgICAgICAgICAgcHJpbnRfdmVyc2lvbigmdmVyc2lvbik7CiAgICAg
ICAgfQogICAgICAgIHVtb3VudF9wYXRjaCgpOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgZnBy
aW50ZihzdGRlcnIsICJDYW4gbm90IG1vdW50IHRoZSBwYXRjaCBkaXJlY3RvcnlcbiIpOwogICAg
ICAgIGlmIChzeXNfdXBncmFkZSkgewogICAgICAgICAgICAgZnByaW50ZihzeXNfdXBncmFkZSwg
IkNhbiBub3QgbW91bnQgdGhlIHBhdGNoIGRpcmVjdG9yeVxuIik7CiAgICAgICAgICAgICBmZmx1
c2goc3lzX3VwZ3JhZGUpOwogICAgICAgIH0KICAgIH0KICAgIHVuYmVjb21lX3Jvb3QoKTsKICAg
IAogICAgcmV0dXJuIHJjOwp9CgoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBOYW1lIDogICBkb19zaG93X3ZlcnNp
b24oKQogKgogKiBEZXNjcmlwdGlvbjogc2hvdyB0aGUgbG9jYWwgdmVyc2lvbiBvciBhIHBhdGNo
IHZlcnNpb24KICoKICogQ3JlYXRlZCBieTogIE1heGltIEtvemxvdnNreQogKgogKiBEYXRlIENy
ZWF0ZWQ6ICAgIDA1LzE0LzAyCiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICovCmludApkb19zaG93X3ZlcnNpb24o
aW50IGFyZ2MsIGNoYXIgKiphcmd2KQp7CiAgICBpbnQgYzsKICAgIG9wdGluZCA9IDA7ICAvLyBU
aGlzIHNlZW1zIHRvIGJlIHRoZSB0cmljayBmb3IgZ2V0b3B0KCkgdG8gd29yawoKICAgIGlmIChh
cmdjID09IDApIHsKICAgICAgICByZXR1cm4gc2hvd19sb2NhbF92ZXJzaW9uKCk7CiAgICB9IGVs
c2UgaWYgKGFyZ2MgPT0gMSkgewogICAgICAgIHdoaWxlICgoYyA9IGdldG9wdChhcmdjLCBhcmd2
LCAicyIpKSAhPSAtMSkgewogICAgICAgICAgICBzd2l0Y2ggKGMpIHsKICAgICAgICAgICAgY2Fz
ZSAncyc6CiAgICAgICAgICAgICAgICByZXR1cm4gc2hvd19zZWNvbmRhcnlfdmVyc2lvbigpOwog
ICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJJbnZh
bGlkIG9wdGlvblxuIik7CiAgICAgICAgICAgICAgICByZXR1cm4gKENNRF9FUlJfRkFJTEVEKTsK
ICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHNob3dfcmVtb3RlX3ZlcnNpb24oYXJndlsw
XSk7CiAgICB9IGVsc2UgewogICAgICAgIHJldHVybiAoQ01EX0VSUl9GQUlMRUQpOwogICAgfQp9
CgojaWZkZWYgUkVBQ1RJVkFURV9TWVNURU1fQ01EUwovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIE5hbWUgOiAgIGRv
X3Byb21fdXBncmFkZSgpCiAqCiAqIERlc2NyaXB0aW9uOiBwcm9tIHVwZ3JhZGUgY29tbWFuZCAK
ICoKICogQ3JlYXRlZCBieTogIE1heGltIEtvemxvdnNreQogKgogKiBEYXRlIENyZWF0ZWQ6ICAg
IDA2LzI2LzAyCiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICovCmludApkb19wcm9tX3VwZ3JhZGUoaW50IGFyZ2Ms
IGNoYXIgKiphcmd2KQp7CiAgICBpbnQgcmMgPSBDTURfRVJSX0ZBSUxFRDsKICAgIGlmIChhcmdj
ID09IDIpIHsKICAgICAgICBpbnQgc2xvdCA9IGF0b2koYXJndlswXSk7CiAgICAgICAgaW50IGNw
dSA9IGF0b2koYXJndlsxXSk7CiAgICAgICAgaWYgKHZhbGlkX3Nsb3RfY3B1KHNsb3QsIGNwdSkp
IHsKICAgICAgICAgICAgcmMgPSB1cGdyYWRlX3Byb21fc2xvdGNwdShzbG90LCBjcHUsIE5VTEwp
OwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiByYzsKfQojZW5kaWYgLyogUkVBQ1RJVkFURV9T
WVNURU1fQ01EUyAqLwoKLyorKwoKUm91dGluZSBEZXNjcmlwdGlvbjoKICAgIFRoaXMgcm91dGlu
ZSBzbGVlcHMgZm9yIGFuIGFic29sdXRlIHRpbWUgbW9yZSBhY2N1cmF0ZWx5IHRoYW4gc2xlZXAo
KS4KCkFyZ3VtZW50czogICAgCiAgICBzZWNzIC0gdGltZSB0byBzbGVlcAoKUmV0dXJuIHZhbHVl
OgogICAgTkZYX09LIG9yIE5GWF9FUlIKCi0tKi8KaW50CnNsZWVwX2FjY3VyYXRlbHkoaW50IHNl
Y3MpCnsKICAgIHVpbnQzMiBlbmRfc2VjczsKICAgIHN0cnVjdCB0aW1ldmFsIHR2OwoKICAgIGlm
IChnZXR0aW1lb2ZkYXkoJnR2LCBOVUxMKSA9PSAwKSB7CiAgICAgICAgZW5kX3NlY3MgPSB0di50
dl9zZWMgKyBzZWNzOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgcmV0dXJuIE5GWF9FUlI7CiAg
ICB9CiAgICB3aGlsZSAodHYudHZfc2VjIDwgZW5kX3NlY3MpIHsKICAgICAgICBzbGVlcCgxKTsK
ICAgICAgICBpZiAoZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCkgIT0gMCkgewogICAgICAgICAgICBy
ZXR1cm4gTkZYX0VSUjsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gTkZYX09LOwp9CgpleHRl
cm4gaW50IF9fZ2V0b3B0X2luaXRpYWxpemVkOwoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBOYW1lIDogICBwYXJz
ZV9jb21wYXJlX2FyZ3MoKQogKgogKiBEZXNjcmlwdGlvbjogcGFyc2UgY29tbWFuZCBsaW5lIGFy
Z3VtZW50cyBmb3IgU3lzdGVtIGNvbXBhcmUKICoKICogQ3JlYXRlZCBieTogIFZpa2FzIFNhaW5p
CiAqCiAqIERhdGUgQ3JlYXRlZDogICAgMDcvMTMvMDUKICoKICotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKi8Kc3RhdGlj
IGludApwYXJzZV9jb21wYXJlX2FyZ3MoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQp7CiAgICBpbnQg
YzsKCiAgICBjb21wYXJlX3NlY29uZGFyeSA9IDA7CgogICAgX19nZXRvcHRfaW5pdGlhbGl6ZWQg
PSAwOwogICAgb3B0aW5kID0gMDsKCiAgICB3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywgYXJndiwg
InMiKSkgIT0gLTEpIHsKICAgICAgICBzd2l0Y2ggKGMpIHsKICAgICAgICBjYXNlICdzJzoKICAg
ICAgICAgICAgY29tcGFyZV9zZWNvbmRhcnkgPSAxOwogICAgICAgICAgICBicmVhazsKICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICBwcmludGYoIkludmFsaWQgb3B0aW9uXG4iKTsKICAgICAg
ICAgICAgcmV0dXJuIENNRF9FUlJfRkFJTEVEOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAob3B0
aW5kICE9IGFyZ2MgLSAxKSB7CiAgICAgICAgcHJpbnRmKCJVcGdyYWRlIGxvY2F0aW9uIG5vdCBz
cGVjaWZpZWRcbiIpOwogICAgICAgIHJldHVybiBDTURfRVJSX0ZBSUxFRDsKICAgIH0KCiAgICBw
YXRjaF9sb2NhdGlvbiA9IGFyZ3Zbb3B0aW5kXTsKICAgIGlmICghaXNfZnRwX3VwZ3JhZGUocGF0
Y2hfbG9jYXRpb24pICYmCiAgICAgICAgIWhhc192YWxpZF9pcF9hZGRyKHBhdGNoX2xvY2F0aW9u
KSkgewogICAgICAgIHByaW50ZigiSW52YWxpZCB1cGdyYWRlIGxvY2F0aW9uXG4iKTsKICAgICAg
ICByZXR1cm4gQ01EX0VSUl9GQUlMRUQ7CiAgICB9CgogICAgcmV0dXJuIENNRF9TVUNDRVNTOwp9
CgoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogKiBOYW1lIDogICBwZXJmb3JtX2NvbXBhcmUoKQogKgogKiBEZXNjcmlw
dGlvbjogY29tcGFyZXMgYSBjb21wbGV0ZSBzeXN0ZW0gc29mdHdhcmUgZGlzdHJpYnV0aW9uCiAq
CiAqIENyZWF0ZWQgYnk6ICBWaWthcyBTYWluaQogKgogKiBEYXRlIENyZWF0ZWQ6ICAgIDA3LzEz
LzA1CiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KICovCnN0YXRpYyBpbnQKcGVyZm9ybV9jb21wYXJlKHZvaWQpCnsK
ICAgIHZlY3RvciBkdjsKCWludCByYyA9IENNRF9FUlJfRkFJTEVEOwogICAgCiAgICBwcmludGYo
IlJlYWRpbmcgdGhlIHN5c3RlbSBkZXNjcmlwdG9yLi4uIik7CiAgICBmZmx1c2goc3Rkb3V0KTsK
ICAgIGR2ID0gcmVhZF91cGdyYWRlX2Rlc2NyaXB0b3IoKTsKICAgIGlmIChkdiAhPSBOVUxMKSB7
CiAgICAgICAgcHJpbnRmKCJkb25lXG4iKTsKICAgICAgICByYz0gZG9fc3lzdGVtKCIvdXNyL2xv
Y2FsL2FnaWxlL2Jpbi92ZXJpZnlfaW5zdGFsbC5zaCAtZiAlcyAlcyIsCgkJICAgICAgICAgIHBh
dGNoX2xvY2F0aW9uLCB1cGdyYWRlX3NlY29uZGFyeSA/ICItcyIgOiAiLXAiKSA7CiAgICAgICAg
dmVjdG9yX2ZyZWVfYWxsKGR2KTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIHByaW50ZigiZmFp
bGVkXG4iKTsKICAgIH0KICAgIHJldHVybiByYzsKfQoKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogTmFtZSA6ICAg
ZG9fY29tcGFyZSgpCiAqCiAqIERlc2NyaXB0aW9uOiBjb21wYXJlIHN5c3RlbSBzb2Z0d2FyZQog
KgogKiBDcmVhdGVkIGJ5OiAgVmlrYXMgU2FpbmkKICoKICogRGF0ZSBDcmVhdGVkOiAgICAwNy8x
My8wNQogKgogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAqLwppbnQKZG9fY29tcGFyZShpbnQgYXJnYywgY2hhciAqKmFy
Z3YpCnsKICAgIHN0cnVjdCB2ZXJzaW9uIGN1cnJlbnRfdmVyc2lvbiwgdXBncmFkZV92ZXJzaW9u
OwogICAgc3RydWN0IHZlcnNpb24gb3JnX3VwZ3JhZGVfdmVyc2lvbjsKICAgIGludCByYyA9IENN
RF9TVUNDRVNTOwogICAgaW50IGk7CiAgICB2ZWN0b3Igc2Vjb25kYXJ5X2ZzdGFicyA9IE5VTEw7
CgogICAgcmMgPSBwYXJzZV9jb21wYXJlX2FyZ3MoYXJnYywgYXJndik7CiAgICBpZiAocmMgIT0g
Q01EX1NVQ0NFU1MpCiAgICAgICAgcmV0dXJuIHJjOwoKICAgIGJlY29tZV9yb290KCk7CiAgICBp
ZiAoY29tcGFyZV9zZWNvbmRhcnkpIHsKCQlnZXRfZGV2aWNlX25hbWVzKCk7CiAgICAgICAgc2Vj
b25kYXJ5X2ZzdGFicyA9IG1ha2Vfc2Vjb25kYXJ5X2ZzdGFicygpOwogICAgICAgIHByaW50Zigi
Q2hlY2tpbmcgZmlsZSBzeXN0ZW0uLi5cbiIpOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCB2ZWN0
b3JfbWF4KHNlY29uZGFyeV9mc3RhYnMpOyArK2kpIHsKICAgICAgICAgICAgc3RydWN0IGZzdGFi
ICpmcyA9IHZlY3Rvcl9sb29rdXBfaW5kZXgoc2Vjb25kYXJ5X2ZzdGFicywgaSk7CiAgICAgICAg
ICAgIGV4ZWN1dGVfY29tbWFuZCgiL3NiaW4vZnNjayIsIDIsICIteSIsIGZzLT5mc19zcGVjLCBO
VUxMKTsKICAgICAgICB9CiAgICAgICAgcHJpbnRmKCJNb3VudGluZyBzZWNvbmRhcnkgZGlzay4u
LiIpOwogICAgICAgIGZmbHVzaChzdGRvdXQpOwogICAgICAgIC8vbG9zdCBpbiBtZW1vcnkKICAg
ICAgICAvL3NlY29uZGFyeV9mc3RhYnMgPSBtYWtlX3NlY29uZGFyeV9mc3RhYnMoKTsKICAgICAg
ICB1X21vdW50X3NlY29uZGFyeShzZWNvbmRhcnlfZnN0YWJzKTsKICAgICAgICByYyA9IGNvbnZl
cnRfcmMobW91bnRfc2Vjb25kYXJ5KHNlY29uZGFyeV9mc3RhYnMpKTsKICAgICAgICBwcmludGYo
IiVzXG4iLCByYyA9PSBDTURfU1VDQ0VTUyA/ICJkb25lLiIgOiAiZmFpbGVkLiIpOwogICAgICAg
IGN1cl90cnVlbmFtZV9mdW5jID0gc2Vjb25kYXJ5X3VwZ3JhZGVfdHJ1ZW5hbWU7CiAgICB9IGVs
c2UgewogICAgICAgIGN1cl90cnVlbmFtZV9mdW5jID0gdXBncmFkZV90cnVlbmFtZTsKICAgIH0K
CiAgICBpZiAocmMgPT0gQ01EX1NVQ0NFU1MpIHsKICAgICAgICByYyA9IG1vdW50X3BhdGNoKHBh
dGNoX2xvY2F0aW9uKTsKICAgICAgICBpZiAocmMgPT0gQ01EX1NVQ0NFU1MpIHsKICAgICAgICAg
ICAgcHJpbnRmKCJNb3VudGVkIHRoZSBleHRlcm5hbCBzeXN0ZW0gc29mdHdhcmUgZGlyZWN0b3J5
XG4iKTsKICAgICAgICAgICAgaWYgKChyYyA9IGdldF91cGdyYWRlX3ZlcnNpb24oJnVwZ3JhZGVf
dmVyc2lvbikpID09IENNRF9TVUNDRVNTKSB7CiAgICAgICAgICAgICAgICBnZXRfb3JnX3VwZ3Jh
ZGVfdmVyc2lvbigmb3JnX3VwZ3JhZGVfdmVyc2lvbik7CiAgICAgICAgICAgICAgICBpZiAoKHJj
ID0gZ2V0X2xvY2FsX3ZlcnNpb24oJmN1cnJlbnRfdmVyc2lvbikpID09IENNRF9TVUNDRVNTKSB7
CiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRfdmVyc2lvbi5wbGF0Zm9ybSAhPSB1cGdy
YWRlX3ZlcnNpb24ucGxhdGZvcm0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJU
aGUgZXh0ZXJuYWwgc3lzdGVtIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBpcyBub3QgY29tcGF0aWJs
ZSB3aXRoIHRoaXMgc3lzdGVtIVxuIik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIkN1cnJlbnQg
c3lzdGVtIHZlcnNpb246ICVkLiVkLiVkLiVkICIKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJjb21wYXJlIHZlcnNpb246ICVkLiVkLiVkLiVkXG4iLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY3VycmVudF92ZXJzaW9uLm1ham9yLCBjdXJyZW50X3ZlcnNpb24ubWlub3IsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3ZlcnNpb24ubWFpbnRlbmFuY2UsIGN1cnJl
bnRfdmVyc2lvbi5wYXRjaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZ3JhZGVfdmVy
c2lvbi5tYWpvciwgdXBncmFkZV92ZXJzaW9uLm1pbm9yLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdXBncmFkZV92ZXJzaW9uLm1haW50ZW5hbmNlLCB1cGdyYWRlX3ZlcnNpb24ucGF0Y2gp
OwogICAgICAgICAgICAgICAgICAgICAgICByYyA9IHBlcmZvcm1fY29tcGFyZSgpOwogICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAg
ICBlbHNlIHsKICAgICAgICAgICAgICAgIHByaW50ZigiZmFpbGVkIHRvIGRldGVybWluZSB0aGUg
Y29tcGFyZSB2ZXJzaW9uIGFuZCBwZXJmb3JtIGNvbXBhcmlzb25cbiIpOwogICAgICAgICAgICB9
CiAgICAgICAgfQogICAgfQoKICAgIGlmIChjb21wYXJlX3NlY29uZGFyeSkgewogICAgICAgIHVf
bW91bnRfc2Vjb25kYXJ5KHNlY29uZGFyeV9mc3RhYnMpOwogICAgICAgIGZyZWVfZnN0YWJfdmVj
dG9yKHNlY29uZGFyeV9mc3RhYnMpOwogICAgfQogICAgCiAgICB1bmJlY29tZV9yb290KCk7CiAg
ICByZXR1cm4gcmM7Cn0KCg==

------_=_NextPart_001_01C739A8.92EE17F4--
