public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* other/6308: Internal compiler error
@ 2002-04-15  8:06 Dusan, Bruncko
  0 siblings, 0 replies; 2+ messages in thread
From: Dusan, Bruncko @ 2002-04-15  8:06 UTC (permalink / raw)
  To: gcc-gnats


>Number:         6308
>Category:       other
>Synopsis:       Internal compiler error
>Confidential:   no
>Severity:       critical
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Mon Apr 15 08:06:00 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     Dusan Bruncko
>Release:        gcc version 2.95.3 20010315 (release)
>Organization:
>Environment:
redhat7.2, 2.4.9-13smp
>Description:
Compile G4ReactionDynamics.cc from GEANT4.4.0, last corected
file, I have

/usr/local/bin/g++ -pipe -fno-for-scope -DGNU_GCC -fPIC -DG4OPTIMISE -DG4USE_STL -Iinclude
 -I/home/geant4.3.2/source/global/STLInterface -I/home/lhcxx/specific/redhat61/gcc-2.95.2/
CLHEP/pro/include -I/usr/local/include/g++-3 -I/usr/local/include -I/usr/local/lib/gcc-lib
e/geant4.3.2/source/geometry/volumes/include -I/home/geant4.3.2/source/geometry/management/include -I/home/geant4.3.2/source/particles/management/include -I/home/geant4.3.2/source/particles/leptons/include -I/home/geant4.3.2/source/particles/bosons/include -I/home/geant4.3.2/source/particles/hadrons/mesons/include -I/home/geant4.3.2/source/particles/hadrons/barions/include -I/home/geant4.3.2/source/particles/hadrons/ions/include -I/home/geant4.3.2/source/processes/management/include -I/home/geant4.3.2/source/materials/include -c -o /home/simul/tmp/Linux-g++/G4hadronic_util/G4ReactionDynamics.o \
  src/G4ReactionDynamics.cc
src/G4ReactionDynamics.cc: In method `void G4ReactionDynamics::Rotate(double, const G4ThreeVector &, const G4ReactionProduct &, const G4DynamicParticle *, const G4Nucleus &, G4ReactionProduct &, G4ReactionProduct &, G4FastVector<G4ReactionProduct,128> &, G4int &)':
src/G4ReactionDynamics.cc:2696: Internal compiler error.
src/G4ReactionDynamics.cc:2696: Please submit a full bug report.
src/G4ReactionDynamics.cc:2696: See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.
cpp0: output pipe has been closed
make: *** [/home/simul/tmp/Linux-g++/G4hadronic_util/G4ReactionDynamics.o] Error 1
>How-To-Repeat:

>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="G4ReactionDynamics.cc"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="G4ReactionDynamics.cc"

Ly8KLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioKLy8gKiBESVNDTEFJTUVSICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLy8gKiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLy8gKiBUaGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgc3VtbWFyaXplcyBhbGwgdGhlIHNwZWNpZmljIGRpc2NsYWlt
ZXJzICoKLy8gKiBvZiBjb250cmlidXRvcnMgdG8gdGhpcyBzb2Z0d2FyZS4gVGhlIHNwZWNpZmlj
IGRpc2NsYWltZXJzLHdoaWNoICoKLy8gKiBnb3Zlcm4sIGFyZSBsaXN0ZWQgd2l0aCB0aGVpciBs
b2NhdGlvbnMgaW46ICAgICAgICAgICAgICAgICAgICAgICoKLy8gKiAgIGh0dHA6Ly9jZXJuLmNo
L2dlYW50NC9saWNlbnNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLy8gKiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICoKLy8gKiBOZWl0aGVyIHRoZSBhdXRob3JzIG9mIHRoaXMgc29mdHdhcmUgc3lzdGVt
LCBub3IgdGhlaXIgZW1wbG95aW5nICoKLy8gKiBpbnN0aXR1dGVzLG5vciB0aGUgYWdlbmNpZXMg
cHJvdmlkaW5nIGZpbmFuY2lhbCBzdXBwb3J0IGZvciB0aGlzICoKLy8gKiB3b3JrICBtYWtlICBh
bnkgcmVwcmVzZW50YXRpb24gb3IgIHdhcnJhbnR5LCBleHByZXNzIG9yIGltcGxpZWQsICoKLy8g
KiByZWdhcmRpbmcgIHRoaXMgIHNvZnR3YXJlIHN5c3RlbSBvciBhc3N1bWUgYW55IGxpYWJpbGl0
eSBmb3IgaXRzICoKLy8gKiB1c2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICoKLy8gKiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLy8gKiBUaGlzICBjb2Rl
ICBpbXBsZW1lbnRhdGlvbiBpcyB0aGUgIGludGVsbGVjdHVhbCBwcm9wZXJ0eSAgb2YgdGhlICoK
Ly8gKiBHRUFOVDQgY29sbGFib3JhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICoKLy8gKiBCeSBjb3B5aW5nLCAgZGlzdHJpYnV0aW5nICBvciBtb2RpZnlp
bmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrICoKLy8gKiBiYXNlZCAgb24gIHRoZSBQcm9ncmFt
KSAgeW91IGluZGljYXRlICB5b3VyICBhY2NlcHRhbmNlIG9mICB0aGlzICoKLy8gKiBzdGF0ZW1l
bnQsIGFuZCBhbGwgaXRzIHRlcm1zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICoKLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioKLy8KLy8KLy8KIC8vIEhhZHJvbmljIFByb2Nlc3M6IFJlYWN0aW9u
IER5bmFtaWNzCiAvLyBvcmlnaW5hbCBieSBILlAuIFdlbGxpc2NoCiAvLyBtb2RpZmllZCBieSBK
LkwuIENodW1hLCBUUklVTUYsIDE5LU5vdi0xOTk2CiAvLyBMYXN0IG1vZGlmaWVkOiAyNy1NYXIt
MTk5NwogLy8gbW9kaWZpZWQgYnkgSC5QLiBXZWxsaXNjaCwgMjQtQXByLTk3CiAvLyBILlAuIFdl
bGxpc2NoLCAyNS5BcHItOTc6IFNpZGUgb2YgY3VycmVudCBhbmQgdGFyZ2V0IHBhcnRpY2xlIHRh
a2VuIGludG8gYWNjb3VudAogLy8gSC5QLiBXZWxsaXNjaCwgMjkuQXByLTk3OiBCdWcgZml4IGlu
IE51Y2xlYXJSZWFjdGlvbi4gKHBzZXVkbzEgd2FzIHdpdGhvdXQgZW5lcmd5KQogLy8gSi5MLiBD
aHVtYSwgMzAtQXByLTk3OiAgQ2hhbmdlZCByZXR1cm4gdmFsdWUgZm9yIEdlbmVyYXRlWGFuZFB0
LiAgSXQgc2VlbXMgcG9zc2libGUKIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgR2Vu
ZXJhdGVYYW5kUHQgY291bGQgZWxpbWluYXRlIHNvbWUgc2Vjb25kYXJpZXMsIGJ1dAogLy8gICAg
ICAgICAgICAgICAgICAgICAgICAgc3RpbGwgZmluaXNoIGl0cyBjYWxjdWxhdGlvbnMsIHRodXMg
d2Ugd291bGQgbm90IHdhbnQgdG8KIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4gdXNl
IFR3b0NsdXN0ZXIgdG8gYWdhaW4gY2FsY3VsYXRlIHRoZSBtb21lbnRhIGlmIHZlY0xlbgogLy8g
ICAgICAgICAgICAgICAgICAgICAgICAgd2FzIGxlc3MgdGhhbiA2LgogLy8gSi5MLiBDaHVtYSwg
MTAtSnVuLTk3OiAgTW9kaWZpZWQgTnVjbGVhclJlYWN0aW9uLiAgV2FzIG5vdCBjcmVhdGluZyBS
ZWFjdGlvblByb2R1Y3QncwogLy8gICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgbmV3
IG9wZXJhdG9yLCB0aHVzIHRoZXkgd291bGQgYmUgbWVhbmluZ2xlc3Mgd2hlbgogLy8gICAgICAg
ICAgICAgICAgICAgICAgICAgZ29pbmcgb3V0IG9mIHNjb3BlLgogLy8gSi5MLiBDaHVtYSwgMjAt
SnVuLTk3OiAgTW9kaWZpZWQgR2VuZXJhdGVYYW5kUHQgYW5kIFR3b0NsdXN0ZXIgdG8gZml4IHVu
aXRzIHByb2JsZW1zCiAvLyBKLkwuIENodW1hLCAyMy1KdW4tOTc6ICBNb2RpZmllZCBQcm9kdWNl
U3RyYW5nZVBhcnRpY2xlUGFpcnMgdG8gZml4IHVuaXRzIHByb2JsZW1zCiAvLyBKLkwuIENodW1h
LCAyNi1KdW4tOTc6ICBNb2RpZmllZCBQcm9kdWNlU3RyYW5nZVBhcnRpY2xlUGFpcnMgdG8gZml4
IGFycmF5IGluZGljZXMKIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIHdlcmUgc29t
ZXRpbWVzIGdvaW5nIG91dCBvZiBib3VuZHMKIC8vIEouTC4gQ2h1bWEsIDA0LUp1bC05NzogIE1h
bnkgbWlub3IgbW9kaWZpY2F0aW9ucyB0byBHZW5lcmF0ZVhhbmRQdCBhbmQgVHdvQ2x1c3Rlcgog
Ly8gSi5MLiBDaHVtYSwgMDYtQXVnLTk3OiAgQWRkZWQgb3JpZ2luYWwgaW5jaWRlbnQgcGFydGlj
bGUsIGJlZm9yZSBGZXJtaSBtb3Rpb24gYW5kCiAvLyAgICAgICAgICAgICAgICAgICAgICAgICBl
dmFwb3JhdGlvbiBlZmZlY3RzIGFyZSBpbmNsdWRlZCwgbmVlZGVkIGZvciBzZWxmIGFic29ycHRp
b24KIC8vICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBjb3JyZWN0aW9ucyBmb3Igc2luZ2xl
IHBhcnRpY2xlIHNwZWN0cmEgKHNob3dlciBwYXJ0aWNsZXMpCiAvLyBKLiBBbGxpc29uLCAxNy1K
dW4tOTk6ICBSZXBsYWNlZCBhIG1pbiBmdW5jdGlvbiB0byBnZXQgY29ycmVjdCBiZWhhdmlvdXIg
b24gREVDLgogCiNpbmNsdWRlICJHNFJlYWN0aW9uRHluYW1pY3MuaGgiCiNpbmNsdWRlICJHNEFu
dGlQcm90b24uaGgiCiNpbmNsdWRlICJHNEFudGlOZXV0cm9uLmhoIgojaW5jbHVkZSAiUmFuZG9t
aXplLmhoIgojaW5jbHVkZSAiZzRzdGQvaW9zdHJlYW0iCi8vICNpbmNsdWRlICJEdW1wRnJhbWUu
aGgiCiAvLyNpbmNsdWRlICIuLi8uLi9hbHBoYV90ZXN0L2N4eC9OYW1ldG9HaGVpc2hOdW1iZXIu
Y2MiCiAKIEc0Ym9vbCBHNFJlYWN0aW9uRHluYW1pY3M6OkdlbmVyYXRlWGFuZFB0KAogICBHNEZh
c3RWZWN0b3I8RzRSZWFjdGlvblByb2R1Y3QsMTI4PiAmdmVjLAogICBHNGludCAmdmVjTGVuLAog
ICBHNFJlYWN0aW9uUHJvZHVjdCAmbW9kaWZpZWRPcmlnaW5hbCwgICAvLyBGZXJtaSBtb3Rpb24g
JiBldmFwLiBlZmZlY3RzIGluY2x1ZGVkCiAgIGNvbnN0IEc0RHluYW1pY1BhcnRpY2xlICpvcmln
aW5hbEluY2lkZW50LCAgIC8vIHRoZSBvcmlnaW5hbCBpbmNpZGVudCBwYXJ0aWNsZQogICBHNFJl
YWN0aW9uUHJvZHVjdCAmY3VycmVudFBhcnRpY2xlLAogICBHNFJlYWN0aW9uUHJvZHVjdCAmdGFy
Z2V0UGFydGljbGUsCiAgIGNvbnN0IEc0TnVjbGV1cyAmdGFyZ2V0TnVjbGV1cywKICAgRzRib29s
ICZpbmNpZGVudEhhc0NoYW5nZWQsCiAgIEc0Ym9vbCAmdGFyZ2V0SGFzQ2hhbmdlZCwKICAgRzRi
b29sIGxlYWRGbGFnLAogICBHNFJlYWN0aW9uUHJvZHVjdCAmbGVhZGluZ1N0cmFuZ2VQYXJ0aWNs
ZSApCiAgewogICAgLy8gCiAgICAvLyBkZXJpdmVkIGZyb20gb3JpZ2luYWwgRk9SVFJBTiBjb2Rl
IEdFTlhQVCBieSBILiBGZXNlZmVsZHQgKDExLU9jdC0xOTg3KQogICAgLy8KICAgIC8vICBHZW5l
cmF0aW9uIG9mIFgtIGFuZCBQVC0gdmFsdWVzIGZvciBpbmNpZGVudCwgdGFyZ2V0LCBhbmQgYWxs
IHNlY29uZGFyeSBwYXJ0aWNsZXMgCiAgICAvLyAgQSBzaW1wbGUgc2luZ2xlIHZhcmlhYmxlIGRl
c2NyaXB0aW9uIEUgRDNTL0RQMz0gRihRKSB3aXRoCiAgICAvLyAgUV4yID0gKE0qWCleMiArIFBU
XjIgaXMgdXNlZC4gRmluYWwgc3RhdGUga2luZW1hdGljIGlzIHByb2R1Y2VkCiAgICAvLyAgYnkg
YW4gRkYtdHlwZSBpdGVyYXRpdmUgY2FzY2FkZSBtZXRob2QKICAgIC8vCiAgICAvLyAgaW50ZXJu
YWwgdW5pdHMgYXJlIEdlVgogICAgLy8KICAgIC8vIERFQlVHR0lORyAtLT4gRHVtcEZyYW1lczo6
RHVtcEZyYW1lKHZlYywgdmVjTGVuKTsKICAgIAogICAgLy8gUHJvdGVjdGlvbiBpbiBjYXNlIG5v
IHNlY29uZGFyeSBoYXMgYmVlbiBjcmVhdGVkOyBjYXNjYWRlcyBkb3duIHRvIHR3by1ib2R5Lgog
ICAgaWYodmVjTGVuID09IDApIHJldHVybiBmYWxzZTsKCiAgICBHNFBhcnRpY2xlRGVmaW5pdGlv
biAqYVBpTWludXMgPSBHNFBpb25NaW51czo6UGlvbk1pbnVzKCk7CiAgICBHNFBhcnRpY2xlRGVm
aW5pdGlvbiAqYW5BbnRpUHJvdG9uID0gRzRBbnRpUHJvdG9uOjpBbnRpUHJvdG9uKCk7CiAgICBH
NFBhcnRpY2xlRGVmaW5pdGlvbiAqYW5BbnRpTmV1dHJvbiA9IEc0QW50aU5ldXRyb246OkFudGlO
ZXV0cm9uKCk7CiAgICBHNFBhcnRpY2xlRGVmaW5pdGlvbiAqYVByb3RvbiA9IEc0UHJvdG9uOjpQ
cm90b24oKTsKICAgIEc0UGFydGljbGVEZWZpbml0aW9uICphTmV1dHJvbiA9IEc0TmV1dHJvbjo6
TmV1dHJvbigpOwogICAgRzRQYXJ0aWNsZURlZmluaXRpb24gKmFQaVBsdXMgPSBHNFBpb25QbHVz
OjpQaW9uUGx1cygpOwogICAgRzRQYXJ0aWNsZURlZmluaXRpb24gKmFQaVplcm8gPSBHNFBpb25a
ZXJvOjpQaW9uWmVybygpOwogICAgRzRQYXJ0aWNsZURlZmluaXRpb24gKmFLYW9uUGx1cyA9IEc0
S2FvblBsdXM6Okthb25QbHVzKCk7CiAgICBHNFBhcnRpY2xlRGVmaW5pdGlvbiAqYUthb25NaW51
cyA9IEc0S2Fvbk1pbnVzOjpLYW9uTWludXMoKTsKICAgIEc0UGFydGljbGVEZWZpbml0aW9uICph
S2Fvblplcm9TID0gRzRLYW9uWmVyb1Nob3J0OjpLYW9uWmVyb1Nob3J0KCk7CiAgICBHNFBhcnRp
Y2xlRGVmaW5pdGlvbiAqYUthb25aZXJvTCA9IEc0S2Fvblplcm9Mb25nOjpLYW9uWmVyb0xvbmco
KTsKCiAgICBHNGludCBpLCBsOwogICAgCiAgICBjb25zdCBHNGRvdWJsZSBla09yaWdpbmFsID0g
bW9kaWZpZWRPcmlnaW5hbC5HZXRLaW5ldGljRW5lcmd5KCkvR2VWOwogICAgY29uc3QgRzRkb3Vi
bGUgZXRPcmlnaW5hbCA9IG1vZGlmaWVkT3JpZ2luYWwuR2V0VG90YWxFbmVyZ3koKS9HZVY7CiAg
ICBjb25zdCBHNGRvdWJsZSBtT3JpZ2luYWwgPSBtb2RpZmllZE9yaWdpbmFsLkdldE1hc3MoKS9H
ZVY7CiAgICBjb25zdCBHNGRvdWJsZSBwT3JpZ2luYWwgPSBtb2RpZmllZE9yaWdpbmFsLkdldE1v
bWVudHVtKCkubWFnKCkvR2VWOwogICAgRzRkb3VibGUgdGFyZ2V0TWFzcyA9IHRhcmdldFBhcnRp
Y2xlLkdldERlZmluaXRpb24oKS0+R2V0UERHTWFzcygpL0dlVjsKICAgIEc0ZG91YmxlIGNlbnRl
cm9mbWFzc0VuZXJneSA9IHNxcnQoIG1PcmlnaW5hbCptT3JpZ2luYWwgKwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TWFzcyp0YXJnZXRNYXNzICsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuMCp0YXJnZXRNYXNzKmV0T3JpZ2lu
YWwgKTsgIC8vIEdlVgogICAgRzRkb3VibGUgY3VycmVudE1hc3MgPSBjdXJyZW50UGFydGljbGUu
R2V0TWFzcygpL0dlVjsKICAgIHRhcmdldE1hc3MgPSB0YXJnZXRQYXJ0aWNsZS5HZXRNYXNzKCkv
R2VWOwogICAgaWYoIGN1cnJlbnRNYXNzID09IDAuMCAmJiB0YXJnZXRNYXNzID09IDAuMCApICAg
ICAgIC8vIGFubmloaWxhdGlvbgogICAgewogICAgICBHNGRvdWJsZSBlayA9IGN1cnJlbnRQYXJ0
aWNsZS5HZXRLaW5ldGljRW5lcmd5KCk7CiAgICAgIEc0VGhyZWVWZWN0b3IgbSA9IGN1cnJlbnRQ
YXJ0aWNsZS5HZXRNb21lbnR1bSgpOwogICAgICBjdXJyZW50UGFydGljbGUgPSAqdmVjWzBdOwog
ICAgICB0YXJnZXRQYXJ0aWNsZSA9ICp2ZWNbMV07CiAgICAgIGZvciggaT0wOyBpPCh2ZWNMZW4t
Mik7ICsraSApKnZlY1tpXSA9ICp2ZWNbaSsyXTsKICAgICAgRzRSZWFjdGlvblByb2R1Y3QgKnRl
bXAgPSB2ZWNbdmVjTGVuLTFdOwogICAgICBkZWxldGUgdGVtcDsKICAgICAgdGVtcCA9IHZlY1t2
ZWNMZW4tMl07CiAgICAgIGRlbGV0ZSB0ZW1wOwogICAgICB2ZWNMZW4gLT0gMjsKICAgICAgY3Vy
cmVudE1hc3MgPSBjdXJyZW50UGFydGljbGUuR2V0TWFzcygpL0dlVjsKICAgICAgaW5jaWRlbnRI
YXNDaGFuZ2VkID0gdHJ1ZTsKICAgICAgdGFyZ2V0SGFzQ2hhbmdlZCA9IHRydWU7CiAgICAgIGN1
cnJlbnRQYXJ0aWNsZS5TZXRLaW5ldGljRW5lcmd5KCBlayApOwogICAgICBjdXJyZW50UGFydGlj
bGUuU2V0TW9tZW50dW0oIG0gKTsKICAgIH0KICAgIGNvbnN0IEc0ZG91YmxlIGF0b21pY1dlaWdo
dCA9IHRhcmdldE51Y2xldXMuR2V0TigpOwogICAgY29uc3QgRzRkb3VibGUgYXRvbWljTnVtYmVy
ID0gdGFyZ2V0TnVjbGV1cy5HZXRaKCk7CiAgICBjb25zdCBHNGRvdWJsZSBwcm90b25NYXNzID0g
YVByb3Rvbi0+R2V0UERHTWFzcygpL01lVjsKICAgIGlmKCAob3JpZ2luYWxJbmNpZGVudC0+R2V0
RGVmaW5pdGlvbigpID09IGFLYW9uTWludXMgfHwKICAgICAgICAgb3JpZ2luYWxJbmNpZGVudC0+
R2V0RGVmaW5pdGlvbigpID09IGFLYW9uWmVyb0wgfHwKICAgICAgICAgb3JpZ2luYWxJbmNpZGVu
dC0+R2V0RGVmaW5pdGlvbigpID09IGFLYW9uWmVyb1MgfHwKICAgICAgICAgb3JpZ2luYWxJbmNp
ZGVudC0+R2V0RGVmaW5pdGlvbigpID09IGFLYW9uUGx1cykgJiYKICAgICAgICBHNFVuaWZvcm1S
YW5kKCkgPj0gMC43ICkKICAgIHsKICAgICAgRzRSZWFjdGlvblByb2R1Y3QgdGVtcCA9IGN1cnJl
bnRQYXJ0aWNsZTsKICAgICAgY3VycmVudFBhcnRpY2xlID0gdGFyZ2V0UGFydGljbGU7CiAgICAg
IHRhcmdldFBhcnRpY2xlID0gdGVtcDsKICAgICAgaW5jaWRlbnRIYXNDaGFuZ2VkID0gdHJ1ZTsK
ICAgICAgdGFyZ2V0SGFzQ2hhbmdlZCA9IHRydWU7CiAgICAgIGN1cnJlbnRNYXNzID0gY3VycmVu
dFBhcnRpY2xlLkdldE1hc3MoKS9HZVY7CiAgICAgIHRhcmdldE1hc3MgPSB0YXJnZXRQYXJ0aWNs
ZS5HZXRNYXNzKCkvR2VWOwogICAgfQogICAgY29uc3QgRzRkb3VibGUgYWZjID0gRzRzdGQ6Om1p
biggMC43NSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4zMTIrMC4yMDAqbG9nKGxv
ZyhjZW50ZXJvZm1hc3NFbmVyZ3kqY2VudGVyb2ZtYXNzRW5lcmd5KSkrCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBvdyhjZW50ZXJvZm1hc3NFbmVyZ3kqY2VudGVyb2ZtYXNzRW5lcmd5
LDEuNSkvNjAwMC4wICk7CiAgICAKICAgIEc0ZG91YmxlIGZvcndhcmRFbmVyZ3kgPSBjZW50ZXJv
Zm1hc3NFbmVyZ3kvMi4wIC0gY3VycmVudE1hc3M7CiAgICBHNGludCBmb3J3YXJkQ291bnQgPSAx
OyAgICAgICAgICAgIC8vIG51bWJlciBvZiBwYXJ0aWNsZXMgaW4gZm9yd2FyZCBoZW1pc3BoZXJl
CiAgICAKICAgIEc0ZG91YmxlIGJhY2t3YXJkRW5lcmd5ID0gY2VudGVyb2ZtYXNzRW5lcmd5LzIu
MCAtIHRhcmdldE1hc3M7CiAgICBHNGludCBiYWNrd2FyZENvdW50ID0gMTsgICAgICAgICAgIC8v
IG51bWJlciBvZiBwYXJ0aWNsZXMgaW4gYmFja3dhcmQgaGVtaXNwaGVyZQogICAgLy8KICAgIC8v
ICByYW5kb21pemUgdGhlIG9yZGVyIG9mIHRoZSBzZWNvbmRhcnkgcGFydGljbGVzCiAgICAvLyAg
bm90ZSB0aGF0IHRoZSBjdXJyZW50IGFuZCB0YXJnZXQgcGFydGljbGVzIGFyZSBub3QgYWZmZWN0
ZWQKICAgIC8vCiAgICBmb3IoIGk9MDsgaTx2ZWNMZW47ICsraSApCiAgICB7CiAgICAgIEc0aW50
IGl0ZW1wID0gRzRpbnQoIEc0VW5pZm9ybVJhbmQoKSp2ZWNMZW4gKTsKICAgICAgRzRSZWFjdGlv
blByb2R1Y3QgcFRlbXAgPSAqdmVjW2l0ZW1wXTsKICAgICAgKnZlY1tpdGVtcF0gPSAqdmVjW2ld
OwogICAgICAqdmVjW2ldID0gcFRlbXA7CiAgICAgIC8vIERFQlVHR0lORyAtLT4gRHVtcEZyYW1l
czo6RHVtcEZyYW1lKHZlYywgdmVjTGVuKTsKICAgIH0KICAgIGZvciggaT0wOyBpPHZlY0xlbjsg
KytpICkKICAgIHsKICAgICAgaWYoIHZlY1tpXS0+R2V0U2lkZSgpID09IC0xICkKICAgICAgewog
ICAgICAgICsrYmFja3dhcmRDb3VudDsKICAgICAgICBiYWNrd2FyZEVuZXJneSAtPSB2ZWNbaV0t
PkdldE1hc3MoKS9HZVY7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgKytmb3J3YXJkQ291bnQ7CiAg
ICAgICAgZm9yd2FyZEVuZXJneSAtPSB2ZWNbaV0tPkdldE1hc3MoKS9HZVY7CiAgICAgIH0KICAg
IH0KICAgIC8vCiAgICAvLyAgYWRkIHBhcnRpY2xlcyBmcm9tIGludHJhbnVjbGVhciBjYXNjYWRl
CiAgICAvLyAgbnVjbGVhckV4Y2l0YXRpb25Db3VudCA9IG51bWJlciBvZiBuZXcgc2Vjb25kYXJp
ZXMgcHJvZHVjZWQgYnkgbnVjbGVhciBleGNpdGF0aW9uCiAgICAvLyAgZXh0cmFDb3VudCA9IG51
bWJlciBvZiBudWNsZW9ucyB3aXRoaW4gdGhlc2UgbmV3IHNlY29uZGFyaWVzCiAgICAvLwogICAg
RzRkb3VibGUgeHRhcmc7CiAgICBpZiggY2VudGVyb2ZtYXNzRW5lcmd5IDwgKDIuMCtHNFVuaWZv
cm1SYW5kKCkpICkKICAgICAgeHRhcmcgPSBhZmMgKiAocG93KGF0b21pY1dlaWdodCwwLjMzKS0x
LjApICogKDIuMCpiYWNrd2FyZENvdW50K3ZlY0xlbisyKS8yLjA7CiAgICBlbHNlCiAgICAgIHh0
YXJnID0gYWZjICogKHBvdyhhdG9taWNXZWlnaHQsMC4zMyktMS4wKSAqICgyLjAqYmFja3dhcmRD
b3VudCk7CiAgICBpZiggeHRhcmcgPD0gMC4wICl4dGFyZyA9IDAuMDE7CiAgICBHNGludCBudWNs
ZWFyRXhjaXRhdGlvbkNvdW50ID0gUG9pc3NvbiggeHRhcmcgKTsKICAgIEc0aW50IGV4dHJhTnVj
bGVvbkNvdW50ID0gMDsKICAgIEc0ZG91YmxlIGV4dHJhTnVjbGVvbk1hc3MgPSAwLjA7CiAgICBp
ZiggbnVjbGVhckV4Y2l0YXRpb25Db3VudCA+IDAgKQogICAgewogICAgICBjb25zdCBHNGRvdWJs
ZSBudWNzdXBbXSA9IHsgMS4wMCwgMC43LCAwLjUsIDAuNCwgMC4zNSwgMC4zIH07CiAgICAgIGNv
bnN0IEc0ZG91YmxlIHBzdXBbXSA9IHsgMy4sIDYuLCAyMC4sIDUwLiwgMTAwLiwgMTAwMC4gfTsK
ICAgICAgRzRpbnQgbW9tZW50dW1CaW4gPSAwOwogICAgICB3aGlsZSggKG1vbWVudHVtQmluIDwg
NikgJiYKICAgICAgICAgICAgIChtb2RpZmllZE9yaWdpbmFsLkdldFRvdGFsTW9tZW50dW0oKS9H
ZVYgPiBwc3VwW21vbWVudHVtQmluXSkgKQogICAgICAgICsrbW9tZW50dW1CaW47CiAgICAgIG1v
bWVudHVtQmluID0gRzRzdGQ6Om1pbiggNSwgbW9tZW50dW1CaW4gKTsKICAgICAgLy8KICAgICAg
Ly8gIE5PVEU6IGluIEdFTlhQVCwgdGhlc2UgbmV3IHBhcnRpY2xlcyB3ZXJlIGdpdmVuIG5lZ2F0
aXZlIGNvZGVzCiAgICAgIC8vICAgICAgICBoZXJlIEkgdXNlICBOZXdseUFkZGVkID0gdHJ1ZSAg
aW5zdGVhZAogICAgICAvLwovLyAgICAgIEc0UmVhY3Rpb25Qcm9kdWN0ICpwVmVjID0gbmV3IEc0
UmVhY3Rpb25Qcm9kdWN0IFtudWNsZWFyRXhjaXRhdGlvbkNvdW50XTsKICAgICAgZm9yKCBpPTA7
IGk8bnVjbGVhckV4Y2l0YXRpb25Db3VudDsgKytpICkKICAgICAgewogICAgICAgIEc0UmVhY3Rp
b25Qcm9kdWN0ICogcFZlYyA9IG5ldyBHNFJlYWN0aW9uUHJvZHVjdCgpOwogICAgICAgIGlmKCBH
NFVuaWZvcm1SYW5kKCkgPCBudWNzdXBbbW9tZW50dW1CaW5dICkKICAgICAgICB7CiAgICAgICAg
ICBpZiggRzRVbmlmb3JtUmFuZCgpID4gMS4wLWF0b21pY051bWJlci9hdG9taWNXZWlnaHQgKQog
ICAgICAgICAgICBwVmVjLT5TZXREZWZpbml0aW9uKCBhUHJvdG9uICk7CiAgICAgICAgICBlbHNl
CiAgICAgICAgICAgIHBWZWMtPlNldERlZmluaXRpb24oIGFOZXV0cm9uICk7CiAgICAgICAgICBw
VmVjLT5TZXRTaWRlKCAtMiApOyAgICAgICAgICAgICAgICAvLyAtMiBtZWFucyBiYWNrc2lkZSBu
dWNsZW9uCiAgICAgICAgICArK2V4dHJhTnVjbGVvbkNvdW50OwogICAgICAgICAgYmFja3dhcmRF
bmVyZ3kgKz0gY2VudGVyb2ZtYXNzRW5lcmd5LzIuMDsKICAgICAgICAgIGV4dHJhTnVjbGVvbk1h
c3MgKz0gcFZlYy0+R2V0TWFzcygpL0dlVjsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAg
IHsKICAgICAgICAgIEc0ZG91YmxlIHJhbiA9IEc0VW5pZm9ybVJhbmQoKTsKICAgICAgICAgIGlm
KCByYW4gPCAwLjMxMiApCiAgICAgICAgICAgIHBWZWMtPlNldERlZmluaXRpb24oIGFQaVBsdXMg
KTsKICAgICAgICAgIGVsc2UgaWYoIHJhbiA8IDAuNjg4ICkKICAgICAgICAgICAgcFZlYy0+U2V0
RGVmaW5pdGlvbiggYVBpWmVybyApOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBwVmVjLT5T
ZXREZWZpbml0aW9uKCBhUGlNaW51cyApOwogICAgICAgICAgcFZlYy0+U2V0U2lkZSggLTEgKTsg
ICAgICAgICAgICAgICAgLy8gYmFja3NpZGUgcGFydGljbGUsIGJ1dCBub3QgYSBudWNsZW9uCiAg
ICAgICAgfQogICAgICAgIHBWZWMtPlNldE5ld2x5QWRkZWQoIHRydWUgKTsgICAgICAgICAgICAg
ICAgLy8gdHJ1ZSBpcyB0aGUgc2FtZSBhcyBJUEEoaSk8MAogICAgICAgIHZlYy5TZXRFbGVtZW50
KCB2ZWNMZW4rKywgcFZlYyApOyAgICAKICAgICAgICAvLyBERUJVR0dJTkcgLS0+IER1bXBGcmFt
ZXM6OkR1bXBGcmFtZSh2ZWMsIHZlY0xlbik7CiAgICAgICAgYmFja3dhcmRFbmVyZ3kgLT0gcFZl
Yy0+R2V0TWFzcygpL0dlVjs7CiAgICAgICAgKytiYWNrd2FyZENvdW50OwogICAgICB9CiAgICB9
CiAgICAvLwogICAgLy8gIGFzc3VtZSBjb25zZXJ2YXRpb24gb2Yga2luZXRpYyBlbmVyZ3kgaW4g
Zm9yd2FyZCAmIGJhY2t3YXJkIGhlbWlzcGhlcmVzCiAgICAvLwogICAgRzRpbnQgaXMsIGlza2lw
OwogICAgd2hpbGUoIGZvcndhcmRFbmVyZ3kgPD0gMC4wICkgIC8vIG11c3QgZWxpbWluYXRlIGEg
cGFydGljbGUgZnJvbSB0aGUgZm9yd2FyZCBzaWRlCiAgICB7CiAgICAgIC8vIERFQlVHR0lORyAt
LT4gRHVtcEZyYW1lczo6RHVtcEZyYW1lKHZlYywgdmVjTGVuKTsKICAgICAgaXNraXAgPSBHNGlu
dChHNFVuaWZvcm1SYW5kKCkqZm9yd2FyZENvdW50KSArIDE7IC8vIDEgPD0gaXNraXAgPD0gZm9y
d2FyZENvdW50CiAgICAgIGlzID0gMDsKICAgICAgRzRpbnQgZm9yd2FyZFBhcnRpY2xlc0xlZnQg
PSAwOwogICAgICBmb3IoIGk9KHZlY0xlbi0xKTsgaT49MDsgLS1pICkKICAgICAgewogICAgICAg
IGlmKCB2ZWNbaV0tPkdldFNpZGUoKSA9PSAxICkKICAgICAgICB7CiAgICAgICAgICBpZiggKytp
cyA9PSBpc2tpcCApCiAgICAgICAgICB7CiAgICAgICAgICAgIGZvcndhcmRFbmVyZ3kgKz0gdmVj
W2ldLT5HZXRNYXNzKCkvR2VWOwogICAgICAgICAgICBmb3IoIEc0aW50IGo9aTsgajwodmVjTGVu
LTEpOyBqKysgKSp2ZWNbal0gPSAqdmVjW2orMV07ICAgIC8vIHNoaWZ0IHVwCiAgICAgICAgICAg
IC0tZm9yd2FyZENvdW50OwogICAgICAgICAgICBmb3J3YXJkUGFydGljbGVzTGVmdCA9IDE7ICAK
ICAgICAgICAgICAgRzRSZWFjdGlvblByb2R1Y3QgKnRlbXAgPSB2ZWNbdmVjTGVuLTFdOwogICAg
ICAgICAgICBkZWxldGUgdGVtcDsKICAgICAgICAgICAgaWYoIC0tdmVjTGVuID09IDAgKXJldHVy
biBmYWxzZTsgIC8vIGFsbCB0aGUgc2Vjb25kYXJpZXMgaGF2ZSBiZWVuIGVsaW1pbmF0ZWQKICAg
ICAgICAgICAgYnJlYWs7ICAvLyAtLSsKICAgICAgICAgIH0gICAgICAgICAvLyAgIHwKICAgICAg
ICB9ICAgICAgICAgICAvLyAgIHwKICAgICAgfSAgICAgICAgICAgICAvLyBicmVhayBnb2VzIGRv
d24gdG8gaGVyZQogICAgICAvLyBERUJVR0dJTkcgLS0+IER1bXBGcmFtZXM6OkR1bXBGcmFtZSh2
ZWMsIHZlY0xlbik7CiAgICAgIGlmKCBmb3J3YXJkUGFydGljbGVzTGVmdCA9PSAwICkKICAgICAg
ewogICAgICAgIGZvcndhcmRFbmVyZ3kgKz0gY3VycmVudFBhcnRpY2xlLkdldE1hc3MoKS9HZVY7
CiAgICAgICAgY3VycmVudFBhcnRpY2xlLlNldERlZmluaXRpb25BbmRVcGRhdGVFKCB0YXJnZXRQ
YXJ0aWNsZS5HZXREZWZpbml0aW9uKCkgKTsKICAgICAgICB0YXJnZXRQYXJ0aWNsZS5TZXREZWZp
bml0aW9uQW5kVXBkYXRlRSggdmVjWzBdLT5HZXREZWZpbml0aW9uKCkgKTsKICAgICAgICAvLyBh
Ym92ZSB0d28gbGluZXMgbW9kaWZpZWQgMjAtb2N0LTk3OiB3ZXJlIGp1c3Qgc2ltcGxlIGVxdWFs
aXRpZXMKICAgICAgICAtLWZvcndhcmRDb3VudDsKICAgICAgICBmb3IoIEc0aW50IGo9MDsgajwo
dmVjTGVuLTEpOyArK2ogKSp2ZWNbal0gPSAqdmVjW2orMV07CiAgICAgICAgRzRSZWFjdGlvblBy
b2R1Y3QgKnRlbXAgPSB2ZWNbdmVjTGVuLTFdOwogICAgICAgIGRlbGV0ZSB0ZW1wOwogICAgICAg
IGlmKCAtLXZlY0xlbiA9PSAwIClyZXR1cm4gZmFsc2U7ICAvLyBhbGwgdGhlIHNlY29uZGFyaWVz
IGhhdmUgYmVlbiBlbGltaW5hdGVkCiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgICAg
Ly8gREVCVUdHSU5HIC0tPiBEdW1wRnJhbWVzOjpEdW1wRnJhbWUodmVjLCB2ZWNMZW4pOwogICAg
d2hpbGUoIGJhY2t3YXJkRW5lcmd5IDw9IDAuMCApICAvLyBtdXN0IGVsaW1pbmF0ZSBhIHBhcnRp
Y2xlIGZyb20gdGhlIGJhY2t3YXJkIHNpZGUKICAgIHsKICAgICAgLy8gREVCVUdHSU5HIC0tPiBE
dW1wRnJhbWVzOjpEdW1wRnJhbWUodmVjLCB2ZWNMZW4pOwogICAgICBpc2tpcCA9IEc0aW50KEc0
VW5pZm9ybVJhbmQoKSpiYWNrd2FyZENvdW50KSArIDE7IC8vIDEgPD0gaXNraXAgPD0gYmFja3dh
cmRDb3VudAogICAgICBpcyA9IDA7CiAgICAgIEc0aW50IGJhY2t3YXJkUGFydGljbGVzTGVmdCA9
IDA7CiAgICAgIGZvciggaT0odmVjTGVuLTEpOyBpPj0wOyAtLWkgKQogICAgICB7CiAgICAgICAg
aWYoIHZlY1tpXS0+R2V0U2lkZSgpIDwgMCApCiAgICAgICAgewogICAgICAgICAgaWYoICsraXMg
PT0gaXNraXAgKSAgICAgICAgLy8gZWxpbWluYXRlIHRoZSBpJ3RoIHBhcnRpY2xlCiAgICAgICAg
ICB7CiAgICAgICAgICAgIGlmKCB2ZWNbaV0tPkdldFNpZGUoKSA9PSAtMiApCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAtLWV4dHJhTnVjbGVvbkNvdW50OwogICAgICAgICAgICAgIGV4dHJh
TnVjbGVvbk1hc3MgLT0gdmVjW2ldLT5HZXRNYXNzKCkvR2VWOwogICAgICAgICAgICB9CiAgICAg
ICAgICAgIGJhY2t3YXJkRW5lcmd5ICs9IHZlY1tpXS0+R2V0TWFzcygpL0dlVjsKICAgICAgICAg
ICAgZm9yKCBHNGludCBqPWk7IGo8KHZlY0xlbi0xKTsgKytqICkqdmVjW2pdID0gKnZlY1tqKzFd
OyAgIC8vIHNoaWZ0IHVwCiAgICAgICAgICAgIC0tYmFja3dhcmRDb3VudDsKICAgICAgICAgICAg
YmFja3dhcmRQYXJ0aWNsZXNMZWZ0ID0gMTsKICAgICAgICAgICAgRzRSZWFjdGlvblByb2R1Y3Qg
KnRlbXAgPSB2ZWNbdmVjTGVuLTFdOwogICAgICAgICAgICBkZWxldGUgdGVtcDsKICAgICAgICAg
ICAgaWYoIC0tdmVjTGVuID09IDAgKXJldHVybiBmYWxzZTsgIC8vIGFsbCB0aGUgc2Vjb25kYXJp
ZXMgaGF2ZSBiZWVuIGVsaW1pbmF0ZWQKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAg
ICAgICAgfQogICAgICB9CiAgICAgIC8vIERFQlVHR0lORyAtLT4gRHVtcEZyYW1lczo6RHVtcEZy
YW1lKHZlYywgdmVjTGVuKTsKICAgICAgaWYoIGJhY2t3YXJkUGFydGljbGVzTGVmdCA9PSAwICkK
ICAgICAgewogICAgICAgIGJhY2t3YXJkRW5lcmd5ICs9IHRhcmdldFBhcnRpY2xlLkdldE1hc3Mo
KS9HZVY7CiAgICAgICAgdGFyZ2V0UGFydGljbGUgPSAqdmVjWzBdOwogICAgICAgIC0tYmFja3dh
cmRDb3VudDsKICAgICAgICBmb3IoIEc0aW50IGo9MDsgajwodmVjTGVuLTEpOyArK2ogKSp2ZWNb
al0gPSAqdmVjW2orMV07CiAgICAgICAgRzRSZWFjdGlvblByb2R1Y3QgKnRlbXAgPSB2ZWNbdmVj
TGVuLTFdOwogICAgICAgIGRlbGV0ZSB0ZW1wOwogICAgICAgIGlmKCAtLXZlY0xlbiA9PSAwICly
ZXR1cm4gZmFsc2U7ICAvLyBhbGwgdGhlIHNlY29uZGFyaWVzIGhhdmUgYmVlbiBlbGltaW5hdGVk
CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgICAgLy8gREVCVUdHSU5HIC0tPiBEdW1w
RnJhbWVzOjpEdW1wRnJhbWUodmVjLCB2ZWNMZW4pOwogICAgLy8KICAgIC8vICBkZWZpbmUgaW5p
dGlhbCBzdGF0ZSB2ZWN0b3JzIGZvciBMb3JlbnR6IHRyYW5zZm9ybWF0aW9ucwogICAgLy8gIHRo
ZSBwc2V1ZG9QYXJ0aWNsZXMgaGF2ZSBub24tc3RhbmRhcmQgbWFzc2VzLCBoZW5jZSB0aGUgInBz
ZXVkbyIKICAgIC8vCiAgICBHNFJlYWN0aW9uUHJvZHVjdCBwc2V1ZG9QYXJ0aWNsZVsxMF07CiAg
ICBmb3IoIGk9MDsgaTwxMDsgKytpIClwc2V1ZG9QYXJ0aWNsZVtpXS5TZXRaZXJvKCk7CiAgICAK
ICAgIHBzZXVkb1BhcnRpY2xlWzBdLlNldE1hc3MoIG1PcmlnaW5hbCpHZVYgKTsKICAgIHBzZXVk
b1BhcnRpY2xlWzBdLlNldE1vbWVudHVtKCAwLjAsIDAuMCwgcE9yaWdpbmFsKkdlViApOwogICAg
cHNldWRvUGFydGljbGVbMF0uU2V0VG90YWxFbmVyZ3koCiAgICAgc3FydCggcE9yaWdpbmFsKnBP
cmlnaW5hbCArIG1PcmlnaW5hbCptT3JpZ2luYWwgKSpHZVYgKTsKICAgIAogICAgcHNldWRvUGFy
dGljbGVbMV0uU2V0TWFzcyggcHJvdG9uTWFzcypNZVYgKTsgICAgICAgIC8vIHRoaXMgY291bGQg
YmUgdGFyZ2V0TWFzcwogICAgcHNldWRvUGFydGljbGVbMV0uU2V0VG90YWxFbmVyZ3koIHByb3Rv
bk1hc3MqTWVWICk7CiAgICAKICAgIHBzZXVkb1BhcnRpY2xlWzNdLlNldE1hc3MoIHByb3Rvbk1h
c3MqKDErZXh0cmFOdWNsZW9uQ291bnQpKk1lViApOwogICAgcHNldWRvUGFydGljbGVbM10uU2V0
VG90YWxFbmVyZ3koIHByb3Rvbk1hc3MqKDErZXh0cmFOdWNsZW9uQ291bnQpKk1lViApOwogICAg
CiAgICBwc2V1ZG9QYXJ0aWNsZVs4XS5TZXRNb21lbnR1bSggMS4wKkdlViwgMC4wLCAwLjAgKTsK
ICAgIAogICAgcHNldWRvUGFydGljbGVbMl0gPSBwc2V1ZG9QYXJ0aWNsZVswXSArIHBzZXVkb1Bh
cnRpY2xlWzFdOwogICAgcHNldWRvUGFydGljbGVbM10gPSBwc2V1ZG9QYXJ0aWNsZVszXSArIHBz
ZXVkb1BhcnRpY2xlWzBdOwogICAgCiAgICBwc2V1ZG9QYXJ0aWNsZVswXS5Mb3JlbnR6KCBwc2V1
ZG9QYXJ0aWNsZVswXSwgcHNldWRvUGFydGljbGVbMl0gKTsKICAgIHBzZXVkb1BhcnRpY2xlWzFd
LkxvcmVudHooIHBzZXVkb1BhcnRpY2xlWzFdLCBwc2V1ZG9QYXJ0aWNsZVsyXSApOwogICAgCiAg
ICBHNGRvdWJsZSBkbmRsWzIwXTsKICAgIC8vCiAgICAvLyAgbWFpbiBsb29wIGZvciA0LW1vbWVu
dHVtIGdlbmVyYXRpb24KICAgIC8vICBzZWUgUGl0aGEtcmVwb3J0IChBYWNoZW4pIGZvciBhIGRl
dGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBtZXRob2QKICAgIC8vCiAgICBHNGRvdWJsZSBhc3Bh
ciwgcHQsIGV0LCB4LCBwcCwgcHAxLCBydGhudmUsIHBoaW52ZSwgcm1iLCB3Z3Q7CiAgICBHNGlu
dCAgICBpbm5lckNvdW50ZXIsIG91dGVyQ291bnRlcjsKICAgIEc0Ym9vbCAgIGVsaW1pbmF0ZVRo
aXNQYXJ0aWNsZSwgcmVzZXRFbmVyZ2llcywgY29uc3RhbnRDcm9zc1NlY3Rpb247CiAgICAKICAg
IEc0ZG91YmxlIGZvcndhcmRLaW5ldGljID0gMC4wLCBiYWNrd2FyZEtpbmV0aWMgPSAwLjA7CiAg
ICAvLwogICAgLy8gcHJvY2VzcyB0aGUgc2Vjb25kYXJ5IHBhcnRpY2xlcyBpbiByZXZlcnNlIG9y
ZGVyCiAgICAvLyB0aGUgaW5jaWRlbnQgcGFydGljbGUgaXMgRG9uZSBhZnRlciB0aGUgc2Vjb25k
YXJpZXMKICAgIC8vIG51Y2xlb25zLCBpbmNsdWRpbmcgdGhlIHRhcmdldCwgaW4gdGhlIGJhY2t3
YXJkIGhlbWlzcGhlcmUgYXJlIGFsc28gRG9uZSBsYXRlcgogICAgLy8KICAgIEc0ZG91YmxlIGJp
bmxbMjBdID0gezAuLDAuMSwwLjIsMC4zLDAuNCwwLjUsMC42LDAuNywwLjgsMC45LDEuMCwxLjEx
LDEuMjUsCiAgICAgICAgICAgICAgICAgICAgICAgICAxLjQzLDEuNjcsMi4wLDIuNSwzLjMzLDUu
MDAsMTAuMDB9OwogICAgRzRpbnQgYmFja3dhcmROdWNsZW9uQ291bnQgPSAwOyAgICAgICAvLyBu
dW1iZXIgb2YgbnVjbGVvbnMgaW4gYmFja3dhcmQgaGVtaXNwaGVyZQogICAgRzRkb3VibGUgdG90
YWxFbmVyZ3ksIGtpbmV0aWNFbmVyZ3ksIHZlY01hc3M7CgogICAgZm9yKCBpPSh2ZWNMZW4tMSk7
IGk+PTA7IC0taSApCiAgICB7CiAgICAgIEc0ZG91YmxlIHBoaSA9IEc0VW5pZm9ybVJhbmQoKSp0
d29waTsKICAgICAgaWYoIHZlY1tpXS0+R2V0TmV3bHlBZGRlZCgpICkgICAgICAgICAgIC8vIGFk
ZGVkIGZyb20gaW50cmFudWNsZWFyIGNhc2NhZGUKICAgICAgewogICAgICAgIGlmKCB2ZWNbaV0t
PkdldFNpZGUoKSA9PSAtMiApICAgICAgICAgLy8gIGlzIGEgbnVjbGVvbgogICAgICAgIHsKICAg
ICAgICAgIGlmKCBiYWNrd2FyZE51Y2xlb25Db3VudCA8IDE4ICkKICAgICAgICAgIHsKICAgICAg
ICAgICAgaWYoIHZlY1tpXS0+R2V0RGVmaW5pdGlvbigpID09IEc0UGlvbk1pbnVzOjpQaW9uTWlu
dXMoKSB8fAogICAgICAgICAgICAgICAgdmVjW2ldLT5HZXREZWZpbml0aW9uKCkgPT0gRzRQaW9u
UGx1czo6UGlvblBsdXMoKSB8fAogICAgICAgICAgICAgICAgdmVjW2ldLT5HZXREZWZpbml0aW9u
KCkgPT0gRzRQaW9uWmVybzo6UGlvblplcm8oKSApCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICBHNEV4Y2VwdGlvbigiRzRSZWFjdGlvbkR5bmFtaWNzOjpHZW5lcmF0ZVhhbmRQdCA6IGEgcGlv
biBoYXMgYmVlbiBjb3VudGVkIGFzIGEgYmFja3dhcmQgbnVjbGVvbiIpOwogICAgICAgICAgICB9
CiAgICAgICAgICAgIHZlY1tpXS0+U2V0U2lkZSggLTMgKTsKICAgICAgICAgICAgKytiYWNrd2Fy
ZE51Y2xlb25Db3VudDsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAg
fQogICAgICB9CiAgICAgIC8vCiAgICAgIC8vICBzZXQgcHQgYW5kIHBoaSB2YWx1ZXMsIHRoZXkg
YXJlIGNoYW5nZWQgc29tZXdoYXQgaW4gdGhlIGl0ZXJhdGlvbiBsb29wCiAgICAgIC8vICBzZXQg
bWFzcyBwYXJhbWV0ZXIgZm9yIGxhbWJkYSBmcmFnbWVudGF0aW9uIG1vZGVsCiAgICAgIC8vCiAg
ICAgIHZlY01hc3MgPSB2ZWNbaV0tPkdldE1hc3MoKS9HZVY7CiAgICAgIEc0ZG91YmxlIHJhbiA9
IC1sb2coMS4wLUc0VW5pZm9ybVJhbmQoKSkvMy41OwogICAgICBpZiggdmVjW2ldLT5HZXRTaWRl
KCkgPT0gLTIgKSAgIC8vIGJhY2t3YXJkIG51Y2xlb24KICAgICAgewogICAgICAgIGlmKCB2ZWNb
aV0tPkdldERlZmluaXRpb24oKSA9PSBhS2Fvbk1pbnVzIHx8CiAgICAgICAgICAgIHZlY1tpXS0+
R2V0RGVmaW5pdGlvbigpID09IGFLYW9uWmVyb0wgfHwKICAgICAgICAgICAgdmVjW2ldLT5HZXRE
ZWZpbml0aW9uKCkgPT0gYUthb25aZXJvUyB8fAogICAgICAgICAgICB2ZWNbaV0tPkdldERlZmlu
aXRpb24oKSA9PSBhS2FvblBsdXMgfHwKICAgICAgICAgICAgdmVjW2ldLT5HZXREZWZpbml0aW9u
KCkgPT0gYVBpTWludXMgfHwKICAgICAgICAgICAgdmVjW2ldLT5HZXREZWZpbml0aW9uKCkgPT0g
YVBpWmVybyB8fAogICAgICAgICAgICB2ZWNbaV0tPkdldERlZmluaXRpb24oKSA9PSBhUGlQbHVz
ICkKICAgICAgICB7CiAgICAgICAgICBhc3BhciA9IDAuNzU7CiAgICAgICAgICBwdCA9IHNxcnQo
IHBvdyggcmFuLCAxLjcgKSApOwogICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyB2ZWNbaV0gbXVzdCBiZSBhIHByb3RvbiwgbmV1dHJvbiwKICAgICAgICAgIGFzcGFy
ID0gMC4yMDsgICAgICAgICAgICAgICAgICAgLy8gIGxhbWJkYSwgc2lnbWEsIHhzaSwgb3IgaW9u
CiAgICAgICAgICBwdCA9IHNxcnQoIHBvdyggcmFuLCAxLjIgKSApOwogICAgICAgIH0KICAgICAg
fSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdCBhIGJhY2t3YXJkIG51Y2xl
b24KICAgICAgICBpZiggdmVjW2ldLT5HZXREZWZpbml0aW9uKCkgPT0gYVBpTWludXMgfHwKICAg
ICAgICAgICAgdmVjW2ldLT5HZXREZWZpbml0aW9uKCkgPT0gYVBpWmVybyB8fAogICAgICAgICAg
ICB2ZWNbaV0tPkdldERlZmluaXRpb24oKSA9PSBhUGlQbHVzICkKICAgICAgICB7CiAgICAgICAg
ICBhc3BhciA9IDAuNzU7CiAgICAgICAgICBwdCA9IHNxcnQoIHBvdyggcmFuLCAxLjcgKSApOwog
ICAgICAgIH0gZWxzZSBpZiggdmVjW2ldLT5HZXREZWZpbml0aW9uKCkgPT0gYUthb25NaW51cyB8
fAogICAgICAgICAgICAgICAgICAgdmVjW2ldLT5HZXREZWZpbml0aW9uKCkgPT0gYUthb25aZXJv
TCB8fAogICAgICAgICAgICAgICAgICAgdmVjW2ldLT5HZXREZWZpbml0aW9uKCkgPT0gYUthb25a
ZXJvUyB8fAogICAgICAgICAgICAgICAgICAgdmVjW2ldLT5HZXREZWZpbml0aW9uKCkgPT0gYUth
b25QbHVzICkKICAgICAgICB7CiAgICAgICAgICBhc3BhciA9IDAuNzA7CiAgICAgICAgICBwdCA9
IHNxcnQoIHBvdyggcmFuLCAxLjcgKSApOwogICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gdmVjW2ldIG11c3QgYmUgYSBwcm90b24sIG5ldXRyb24sIAogICAgICAgICAg
YXNwYXIgPSAwLjY1OyAgICAgICAgICAgICAgICAgLy8gIGxhbWJkYSwgc2lnbWEsIHhzaSwgb3Ig
aW9uCiAgICAgICAgICBwdCA9IHNxcnQoIHBvdyggcmFuLCAxLjUgKSApOwogICAgICAgIH0KICAg
ICAgfQogICAgICBwdCA9IEc0c3RkOjptYXgoIDAuMDAxLCBwdCApOwogICAgICB2ZWNbaV0tPlNl
dE1vbWVudHVtKCBwdCpjb3MocGhpKSpHZVYsIHB0KnNpbihwaGkpKkdlViApOwogICAgICBmb3Io
IEc0aW50IGo9MDsgajwyMDsgKytqICliaW5sW2pdID0gai8oMTkuKnB0KTsKICAgICAgaWYoIHZl
Y1tpXS0+R2V0U2lkZSgpID4gMCApCiAgICAgICAgZXQgPSBwc2V1ZG9QYXJ0aWNsZVswXS5HZXRU
b3RhbEVuZXJneSgpL0dlVjsKICAgICAgZWxzZQogICAgICAgIGV0ID0gcHNldWRvUGFydGljbGVb
MV0uR2V0VG90YWxFbmVyZ3koKS9HZVY7CiAgICAgIGRuZGxbMF0gPSAwLjA7CiAgICAgIC8vCiAg
ICAgIC8vICAgc3RhcnQgb2Ygb3V0ZXIgaXRlcmF0aW9uIGxvb3AKICAgICAgLy8KICAgICAgb3V0
ZXJDb3VudGVyID0gMDsKICAgICAgZWxpbWluYXRlVGhpc1BhcnRpY2xlID0gdHJ1ZTsKICAgICAg
cmVzZXRFbmVyZ2llcyA9IHRydWU7CiAgICAgIHdoaWxlKCArK291dGVyQ291bnRlciA8IDMgKQog
ICAgICB7CiAgICAgICAgZm9yKCBsPTE7IGw8MjA7ICsrbCApCiAgICAgICAgewogICAgICAgICAg
eCA9IChiaW5sW2xdK2JpbmxbbC0xXSkvMi47CiAgICAgICAgICBwdCA9IEc0c3RkOjptYXgoIDAu
MDAxLCBwdCApOwogICAgICAgICAgaWYoIHggPiAxLjAvcHQgKQogICAgICAgICAgICBkbmRsW2xd
ICs9IGRuZGxbbC0xXTsgICAvLyAgY2hhbmdlZCBmcm9tIGp1c3QgID0gIG9uIDAyIEFwcmlsIDk4
CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGRuZGxbbF0gPSBldCAqIGFzcGFyL3NxcnQoIHBv
dygoMS4rYXNwYXIqeCphc3Bhcip4KSwzKSApCiAgICAgICAgICAgICAgKiAoYmlubFtsXS1iaW5s
W2wtMV0pIC8gc3FydCggcHQqeCpldCpwdCp4KmV0ICsgcHQqcHQgKyB2ZWNNYXNzKnZlY01hc3Mg
KQogICAgICAgICAgICAgICsgZG5kbFtsLTFdOwogICAgICAgIH0KICAgICAgICBpbm5lckNvdW50
ZXIgPSAwOwogICAgICAgIC8vIGJ1ZzogcmVzZXQgdGhlIHgseSBjb21wb25lbnRzIG9mIHRoZSBt
b21lbnR1bSwgcGxlYXNlLiBAQEBAQEBACiAgICAgICAgdmVjW2ldLT5TZXRNb21lbnR1bSggcHQq
Y29zKHBoaSkqR2VWLCBwdCpzaW4ocGhpKSpHZVYgKTsKICAgICAgICAvLwogICAgICAgIC8vICAg
c3RhcnQgb2YgaW5uZXIgaXRlcmF0aW9uIGxvb3AKICAgICAgICAvLwogICAgICAgIHdoaWxlKCAr
K2lubmVyQ291bnRlciA8IDcgKQogICAgICAgIHsKICAgICAgICAgIHJhbiA9IEc0VW5pZm9ybVJh
bmQoKSpkbmRsWzE5XTsKICAgICAgICAgIGwgPSAxOwogICAgICAgICAgd2hpbGUoICggcmFuID49
IGRuZGxbbF0gKSAmJiAoIGwgPCAyMCApIClsKys7CiAgICAgICAgICBsID0gRzRzdGQ6Om1pbigg
MTksIGwgKTsKICAgICAgICAgIHggPSBHNHN0ZDo6bWluKCAxLjAsIHB0KihiaW5sW2wtMV0gKyBH
NFVuaWZvcm1SYW5kKCkqKGJpbmxbbF0tYmlubFtsLTFdKS8yLikgKTsKICAgICAgICAgIGlmKCB2
ZWNbaV0tPkdldFNpZGUoKSA8IDAgKXggKj0gLTEuOwogICAgICAgICAgdmVjW2ldLT5TZXRNb21l
bnR1bSggeCpldCpHZVYgKTsgICAgICAgICAgICAgIC8vIHNldCB0aGUgei1tb21lbnR1bQogICAg
ICAgICAgdG90YWxFbmVyZ3kgPSBzcXJ0KCB4KmV0KngqZXQgKyBwdCpwdCArIHZlY01hc3MqdmVj
TWFzcyApOwogICAgICAgICAgdmVjW2ldLT5TZXRUb3RhbEVuZXJneSggdG90YWxFbmVyZ3kqR2VW
ICk7CiAgICAgICAgICBraW5ldGljRW5lcmd5ID0gdmVjW2ldLT5HZXRLaW5ldGljRW5lcmd5KCkv
R2VWOwogICAgICAgICAgaWYoIHZlY1tpXS0+R2V0U2lkZSgpID4gMCApICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGZvcndhcmQgc2lkZQogICAgICAgICAgewogICAgICAgICAgICBpZigg
KGZvcndhcmRLaW5ldGljK2tpbmV0aWNFbmVyZ3kpIDwgMC45NSpmb3J3YXJkRW5lcmd5ICkKICAg
ICAgICAgICAgewogICAgICAgICAgICAgIHBzZXVkb1BhcnRpY2xlWzRdID0gcHNldWRvUGFydGlj
bGVbNF0gKyAoKnZlY1tpXSk7CiAgICAgICAgICAgICAgZm9yd2FyZEtpbmV0aWMgKz0ga2luZXRp
Y0VuZXJneTsKICAgICAgICAgICAgICBwc2V1ZG9QYXJ0aWNsZVs2XSA9IHBzZXVkb1BhcnRpY2xl
WzRdICsgcHNldWRvUGFydGljbGVbNV07CiAgICAgICAgICAgICAgcHNldWRvUGFydGljbGVbNl0u
U2V0TW9tZW50dW0oIDAuMCApOyAgICAgICAgICAgLy8gc2V0IHRoZSB6LW1vbWVudHVtCiAgICAg
ICAgICAgICAgcGhpID0gcHNldWRvUGFydGljbGVbNl0uQW5nbGUoIHBzZXVkb1BhcnRpY2xlWzhd
ICk7CiAgICAgICAgICAgICAgaWYoIHBzZXVkb1BhcnRpY2xlWzZdLkdldE1vbWVudHVtKCkueSgp
L01lViA8IDAuMCApcGhpID0gdHdvcGkgLSBwaGk7CiAgICAgICAgICAgICAgcGhpICs9IHBpICsg
bm9ybWFsKCkqcGkvMTIuMDsKICAgICAgICAgICAgICBpZiggcGhpID4gdHdvcGkgKXBoaSAtPSB0
d29waTsKICAgICAgICAgICAgICBpZiggcGhpIDwgMC4wIClwaGkgPSB0d29waSAtIHBoaTsKICAg
ICAgICAgICAgICBvdXRlckNvdW50ZXIgPSAyOyAgICAgICAgICAgICAgICAgICAgIC8vIGxlYXZl
IG91dGVyIGxvb3AKICAgICAgICAgICAgICBlbGltaW5hdGVUaGlzUGFydGljbGUgPSBmYWxzZTsg
ICAgICAgIC8vIGRvbid0IGVsaW1pbmF0ZSB0aGlzIHBhcnRpY2xlCiAgICAgICAgICAgICAgcmVz
ZXRFbmVyZ2llcyA9IGZhbHNlOwogICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gbGVhdmUgaW5uZXIgbG9vcAogICAgICAgICAgICB9CiAgICAgICAg
ICAgIGlmKCBpbm5lckNvdW50ZXIgPiA1IClicmVhazsgICAgICAgICAgIC8vIGxlYXZlIGlubmVy
IGxvb3AKICAgICAgICAgICAgaWYoIGJhY2t3YXJkRW5lcmd5ID49IHZlY01hc3MgKSAgLy8gc3dp
dGNoIHNpZGVzCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB2ZWNbaV0tPlNldFNpZGUoIC0x
ICk7CiAgICAgICAgICAgICAgZm9yd2FyZEVuZXJneSArPSB2ZWNNYXNzOwogICAgICAgICAgICAg
IGJhY2t3YXJkRW5lcmd5IC09IHZlY01hc3M7CiAgICAgICAgICAgICAgKytiYWNrd2FyZENvdW50
OwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiYWNrd2FyZCBzaWRlCiAgICAgICAgICAgaWYo
IGV4dHJhTnVjbGVvbkNvdW50ID4gMTkgKSAgIC8vIGNvbW1lbnRlZCBvdXQgdG8gZHVwbGljYXRl
ID9idWc/IGluIEdFTlhQVAogICAgICAgICAgICAgeCA9IDAuOTk5OwogICAgICAgICAgIEc0ZG91
YmxlIHh4eCA9IDAuOTUrMC4wNSpleHRyYU51Y2xlb25Db3VudC8yMC4wOwogICAgICAgICAgIGlm
KCAoYmFja3dhcmRLaW5ldGljK2tpbmV0aWNFbmVyZ3kpIDwgeHh4KmJhY2t3YXJkRW5lcmd5ICkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIHBzZXVkb1BhcnRpY2xlWzVdID0gcHNldWRvUGFy
dGljbGVbNV0gKyAoKnZlY1tpXSk7CiAgICAgICAgICAgICAgYmFja3dhcmRLaW5ldGljICs9IGtp
bmV0aWNFbmVyZ3k7CiAgICAgICAgICAgICAgcHNldWRvUGFydGljbGVbNl0gPSBwc2V1ZG9QYXJ0
aWNsZVs0XSArIHBzZXVkb1BhcnRpY2xlWzVdOwogICAgICAgICAgICAgIHBzZXVkb1BhcnRpY2xl
WzZdLlNldE1vbWVudHVtKCAwLjAgKTsgICAgICAgICAgIC8vIHNldCB0aGUgei1tb21lbnR1bQog
ICAgICAgICAgICAgIHBoaSA9IHBzZXVkb1BhcnRpY2xlWzZdLkFuZ2xlKCBwc2V1ZG9QYXJ0aWNs
ZVs4XSApOwogICAgICAgICAgICAgIGlmKCBwc2V1ZG9QYXJ0aWNsZVs2XS5HZXRNb21lbnR1bSgp
LnkoKS9NZVYgPCAwLjAgKXBoaSA9IHR3b3BpIC0gcGhpOwogICAgICAgICAgICAgIHBoaSArPSBw
aSArIG5vcm1hbCgpICogcGkgLyAxMi4wOwogICAgICAgICAgICAgIGlmKCBwaGkgPiB0d29waSAp
cGhpIC09IHR3b3BpOwogICAgICAgICAgICAgIGlmKCBwaGkgPCAwLjAgKXBoaSA9IHR3b3BpIC0g
cGhpOwogICAgICAgICAgICAgIG91dGVyQ291bnRlciA9IDI7ICAgICAgICAgICAgICAgICAgICAv
LyBsZWF2ZSBvdXRlciBsb29wCiAgICAgICAgICAgICAgZWxpbWluYXRlVGhpc1BhcnRpY2xlID0g
ZmFsc2U7ICAgICAgIC8vIGRvbid0IGVsaW1pbmF0ZSB0aGlzIHBhcnRpY2xlCiAgICAgICAgICAg
ICAgcmVzZXRFbmVyZ2llcyA9IGZhbHNlOwogICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBsZWF2ZSBpbm5lciBsb29wCiAgICAgICAgICAgIH0KICAg
ICAgICAgICAgaWYoIGlubmVyQ291bnRlciA+IDUgKWJyZWFrOyAgICAgICAgICAgLy8gbGVhdmUg
aW5uZXIgbG9vcAogICAgICAgICAgICBpZiggZm9yd2FyZEVuZXJneSA+PSB2ZWNNYXNzICkgIC8v
IHN3aXRjaCBzaWRlcwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdmVjW2ldLT5TZXRTaWRl
KCAxICk7CiAgICAgICAgICAgICAgZm9yd2FyZEVuZXJneSAtPSB2ZWNNYXNzOwogICAgICAgICAg
ICAgIGJhY2t3YXJkRW5lcmd5ICs9IHZlY01hc3M7CiAgICAgICAgICAgICAgYmFja3dhcmRDb3Vu
dC0tOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBHNFRocmVlVmVjdG9yIG1v
bWVudHVtID0gdmVjW2ldLT5HZXRNb21lbnR1bSgpOwogICAgICAgICAgdmVjW2ldLT5TZXRNb21l
bnR1bSggbW9tZW50dW0ueCgpICogMC45LCBtb21lbnR1bS55KCkgKiAwLjkgKTsKICAgICAgICAg
IHB0ICo9IDAuOTsKICAgICAgICAgIGRuZGxbMTldICo9IDAuOTsKICAgICAgICB9ICAgICAgICAg
ICAgICAgICAgICAgICAvLyBjbG9zZXMgaW5uZXIgbG9vcAogICAgICAgIGlmKCByZXNldEVuZXJn
aWVzICkKICAgICAgICB7CiAgICAgICAgICAvLyAgIGlmIHdlIGdldCB0byBoZXJlLCB0aGUgaW5u
ZXIgbG9vcCBoYXMgYmVlbiBEb25lIDYgVGltZXMKICAgICAgICAgIC8vICAgcmVzZXQgdGhlIGtp
bmV0aWMgZW5lcmdpZXMgb2YgcHJldmlvdXNseSBEb25lIHBhcnRpY2xlcywgaWYgdGhleSBhcmUg
bGlnaHRlcgogICAgICAgICAgLy8gICAgdGhhbiBwcm90b25zIGFuZCBpbiB0aGUgZm9yd2FyZCBo
ZW1pc3BoZXJlCiAgICAgICAgICAvLyAgIHRoZW4gY29udGludWUgd2l0aCBvdXRlciBsb29wCiAg
ICAgICAgICAvLwogICAgICAgICAgZm9yd2FyZEtpbmV0aWMgPSAwLjA7CiAgICAgICAgICBiYWNr
d2FyZEtpbmV0aWMgPSAwLjA7CiAgICAgICAgICBwc2V1ZG9QYXJ0aWNsZVs0XS5TZXRaZXJvKCk7
CiAgICAgICAgICBwc2V1ZG9QYXJ0aWNsZVs1XS5TZXRaZXJvKCk7CiAgICAgICAgICBmb3IoIGw9
aSsxOyBsPHZlY0xlbjsgKytsICkKICAgICAgICAgIHsKICAgICAgICAgICAgaWYoIHZlY1tsXS0+
R2V0U2lkZSgpID4gMCB8fAogICAgICAgICAgICAgICAgdmVjW2xdLT5HZXREZWZpbml0aW9uKCkg
PT0gYUthb25NaW51cyB8fAogICAgICAgICAgICAgICAgdmVjW2xdLT5HZXREZWZpbml0aW9uKCkg
PT0gYUthb25aZXJvTCB8fAogICAgICAgICAgICAgICAgdmVjW2xdLT5HZXREZWZpbml0aW9uKCkg
PT0gYUthb25aZXJvUyB8fAogICAgICAgICAgICAgICAgdmVjW2xdLT5HZXREZWZpbml0aW9uKCkg
PT0gYUthb25QbHVzIHx8CiAgICAgICAgICAgICAgICB2ZWNbbF0tPkdldERlZmluaXRpb24oKSA9
PSBhUGlNaW51cyB8fAogICAgICAgICAgICAgICAgdmVjW2xdLT5HZXREZWZpbml0aW9uKCkgPT0g
YVBpWmVybyB8fAogICAgICAgICAgICAgICAgdmVjW2xdLT5HZXREZWZpbml0aW9uKCkgPT0gYVBp
UGx1cyApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBHNGRvdWJsZSB0ZW1wTWFzcyA9IHZl
Y1tsXS0+R2V0TWFzcygpL01lVjsKICAgICAgICAgICAgICB0b3RhbEVuZXJneSA9IDAuOTUqdmVj
W2xdLT5HZXRUb3RhbEVuZXJneSgpL01lViArIDAuMDUqdGVtcE1hc3M7CiAgICAgICAgICAgICAg
dG90YWxFbmVyZ3kgPSBHNHN0ZDo6bWF4KCB0ZW1wTWFzcywgdG90YWxFbmVyZ3kgKTsKICAgICAg
ICAgICAgICB2ZWNbbF0tPlNldFRvdGFsRW5lcmd5KCB0b3RhbEVuZXJneSpNZVYgKTsKICAgICAg
ICAgICAgICBwcCA9IHNxcnQoIGFicyggdG90YWxFbmVyZ3kqdG90YWxFbmVyZ3kgLSB0ZW1wTWFz
cyp0ZW1wTWFzcyApICk7CiAgICAgICAgICAgICAgcHAxID0gdmVjW2xdLT5HZXRNb21lbnR1bSgp
Lm1hZygpL01lVjsKICAgICAgICAgICAgICBpZiggcHAxIDwgMS4wZS02KkdlViApCiAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgRzRkb3VibGUgcnRobnZlID0gcGkqRzRVbmlmb3JtUmFu
ZCgpOwogICAgICAgICAgICAgICAgRzRkb3VibGUgcGhpbnZlID0gdHdvcGkqRzRVbmlmb3JtUmFu
ZCgpOwogICAgICAgICAgICAgICAgRzRkb3VibGUgc3J0aCA9IHNpbihydGhudmUpOwogICAgICAg
ICAgICAgICAgdmVjW2xdLT5TZXRNb21lbnR1bSggcHAqc3J0aCpjb3MocGhpbnZlKSpNZVYsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcCpzcnRoKnNpbihwaGludmUpKk1l
ViwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwKmNvcyhydGhudmUpKk1l
ViApIDsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdmVjW2xdLT5TZXRN
b21lbnR1bSggdmVjW2xdLT5HZXRNb21lbnR1bSgpICogKHBwL3BwMSkgKTsKICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgRzRkb3VibGUgcHggPSB2ZWNbbF0tPkdldE1vbWVudHVtKCkueCgp
L01lVjsKICAgICAgICAgICAgICBHNGRvdWJsZSBweSA9IHZlY1tsXS0+R2V0TW9tZW50dW0oKS55
KCkvTWVWOwogICAgICAgICAgICAgIHB0ID0gRzRzdGQ6Om1heCggMS4wLCBzcXJ0KCBweCpweCAr
IHB5KnB5ICkgKS9HZVY7CiAgICAgICAgICAgICAgaWYoIHZlY1tsXS0+R2V0U2lkZSgpID4gMCAp
CiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZm9yd2FyZEtpbmV0aWMgKz0gdmVjW2xd
LT5HZXRLaW5ldGljRW5lcmd5KCkvR2VWOwogICAgICAgICAgICAgICAgcHNldWRvUGFydGljbGVb
NF0gPSBwc2V1ZG9QYXJ0aWNsZVs0XSArICgqdmVjW2xdKTsKICAgICAgICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgICAgYmFja3dhcmRLaW5ldGljICs9IHZlY1tsXS0+R2V0S2luZXRpY0Vu
ZXJneSgpL0dlVjsKICAgICAgICAgICAgICAgIHBzZXVkb1BhcnRpY2xlWzVdID0gcHNldWRvUGFy
dGljbGVbNV0gKyAoKnZlY1tsXSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAg
ICAgICB9CiAgICAgICAgfQogICAgICB9ICAgIC8vIGNsb3NlcyBvdXRlciBsb29wCiAgICAgICAg
ICAgICAgCiAgICAgIGlmKCBlbGltaW5hdGVUaGlzUGFydGljbGUgKSAgLy8gbm90IGVub3VnaCBl
bmVyZ3ksIGVsaW1pbmF0ZSB0aGlzIHBhcnRpY2xlCiAgICAgIHsKICAgICAgICBpZiggdmVjW2ld
LT5HZXRTaWRlKCkgPiAwICkKICAgICAgICB7CiAgICAgICAgICAtLWZvcndhcmRDb3VudDsKICAg
ICAgICAgIGZvcndhcmRFbmVyZ3kgKz0gdmVjTWFzczsKICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgaWYoIHZlY1tpXS0+R2V0U2lkZSgpID09IC0yICkKICAgICAgICAgIHsKICAgICAgICAgICAg
LS1leHRyYU51Y2xlb25Db3VudDsKICAgICAgICAgICAgZXh0cmFOdWNsZW9uTWFzcyAtPSB2ZWNN
YXNzOwogICAgICAgICAgfQogICAgICAgICAgLS1iYWNrd2FyZENvdW50OwogICAgICAgICAgYmFj
a3dhcmRFbmVyZ3kgKz0gdmVjTWFzczsKICAgICAgICB9CiAgICAgICAgZm9yKCBHNGludCBqPWk7
IGo8KHZlY0xlbi0xKTsgKytqICkqdmVjW2pdID0gKnZlY1tqKzFdOyAgICAvLyBzaGlmdCB1cAog
ICAgICAgIEc0UmVhY3Rpb25Qcm9kdWN0ICp0ZW1wID0gdmVjW3ZlY0xlbi0xXTsKICAgICAgICBk
ZWxldGUgdGVtcDsKICAgICAgICAvLyBERUJVR0dJTkcgLS0+IER1bXBGcmFtZXM6OkR1bXBGcmFt
ZSh2ZWMsIHZlY0xlbik7CiAgICAgICAgaWYoIC0tdmVjTGVuID09IDAgKXJldHVybiBmYWxzZTsg
IC8vIGFsbCB0aGUgc2Vjb25kYXJpZXMgaGF2ZSBiZWVuIGVsaW1pbmF0ZWQKICAgICAgICBwc2V1
ZG9QYXJ0aWNsZVs2XSA9IHBzZXVkb1BhcnRpY2xlWzRdICsgcHNldWRvUGFydGljbGVbNV07CiAg
ICAgICAgcHNldWRvUGFydGljbGVbNl0uU2V0TW9tZW50dW0oIDAuMCApOyAgICAgICAgICAgICAg
ICAgLy8gc2V0IHotbW9tZW50dW0KICAgICAgICBwaGkgPSBwc2V1ZG9QYXJ0aWNsZVs2XS5Bbmds
ZSggcHNldWRvUGFydGljbGVbOF0gKTsKICAgICAgICBpZiggcHNldWRvUGFydGljbGVbNl0uR2V0
TW9tZW50dW0oKS55KCkvTWVWIDwgMC4wIClwaGkgPSB0d29waSAtIHBoaTsKICAgICAgICBwaGkg
Kz0gcGkgKyBub3JtYWwoKSAqIHBpIC8gMTIuMDsKICAgICAgICBpZiggcGhpID4gdHdvcGkgKXBo
aSAtPSB0d29waTsKICAgICAgICBpZiggcGhpIDwgMC4wIClwaGkgPSB0d29waSAtIHBoaTsKICAg
ICAgfQogICAgfSAgIC8vIGNsb3NlcyBtYWluIGZvciBsb29wCgogICAgLy8KICAgIC8vICBmb3Ig
dGhlIGluY2lkZW50IHBhcnRpY2xlOiAgaXQgd2FzIHBsYWNlZCBpbiB0aGUgZm9yd2FyZCBoZW1p
c3BoZXJlCiAgICAvLyAgIHNldCBwdCBhbmQgcGhpIHZhbHVlcywgdGhleSBhcmUgY2hhbmdlZCBz
b21ld2hhdCBpbiB0aGUgaXRlcmF0aW9uIGxvb3AKICAgIC8vICAgc2V0IG1hc3MgcGFyYW1ldGVy
IGZvciBsYW1iZGEgZnJhZ21lbnRhdGlvbiBtb2RlbAogICAgLy8KICAgIEc0ZG91YmxlIHBoaSA9
IEc0VW5pZm9ybVJhbmQoKSp0d29waTsKICAgIEc0ZG91YmxlIHJhbiA9IC1sb2coMS4wLUc0VW5p
Zm9ybVJhbmQoKSk7CiAgICBpZiggY3VycmVudFBhcnRpY2xlLkdldERlZmluaXRpb24oKSA9PSBh
UGlNaW51cyB8fAogICAgICAgIGN1cnJlbnRQYXJ0aWNsZS5HZXREZWZpbml0aW9uKCkgPT0gYVBp
WmVybyB8fAogICAgICAgIGN1cnJlbnRQYXJ0aWNsZS5HZXREZWZpbml0aW9uKCkgPT0gYVBpUGx1
cyApCiAgICB7CiAgICAgIGFzcGFyID0gMC42MDsKICAgICAgcHQgPSBzcXJ0KCBwb3coIHJhbi82
LjAsIDEuNyApICk7CiAgICB9IGVsc2UgaWYoIGN1cnJlbnRQYXJ0aWNsZS5HZXREZWZpbml0aW9u
KCkgPT0gYUthb25NaW51cyB8fAogICAgICAgICAgICAgICBjdXJyZW50UGFydGljbGUuR2V0RGVm
aW5pdGlvbigpID09IGFLYW9uWmVyb0wgfHwKICAgICAgICAgICAgICAgY3VycmVudFBhcnRpY2xl
LkdldERlZmluaXRpb24oKSA9PSBhS2Fvblplcm9TIHx8CiAgICAgICAgICAgICAgIGN1cnJlbnRQ
YXJ0aWNsZS5HZXREZWZpbml0aW9uKCkgPT0gYUthb25QbHVzICkKICAgIHsKICAgICAgYXNwYXIg
PSAwLjUwOwogICAgICBwdCA9IHNxcnQoIHBvdyggcmFuLzUuMCwgMS40ICkgKTsKICAgIH0gZWxz
ZSB7CiAgICAgIGFzcGFyID0gMC40MDsKICAgICAgcHQgPSBzcXJ0KCBwb3coIHJhbi80LjAsIDEu
MiApICk7CiAgICB9CiAgICBmb3IoIEc0aW50IGo9MDsgajwyMDsgKytqICliaW5sW2pdID0gai8o
MTkuKnB0KTsKICAgIGN1cnJlbnRQYXJ0aWNsZS5TZXRNb21lbnR1bSggcHQqY29zKHBoaSkqR2VW
LCBwdCpzaW4ocGhpKSpHZVYgKTsKICAgIGV0ID0gcHNldWRvUGFydGljbGVbMF0uR2V0VG90YWxF
bmVyZ3koKS9HZVY7CiAgICBkbmRsWzBdID0gMC4wOwogICAgdmVjTWFzcyA9IGN1cnJlbnRQYXJ0
aWNsZS5HZXRNYXNzKCkvR2VWOwogICAgZm9yKCBsPTE7IGw8MjA7ICsrbCApCiAgICB7CiAgICAg
IHggPSAoYmlubFtsXStiaW5sW2wtMV0pLzIuOwogICAgICBpZiggeCA+IDEuMC9wdCApCiAgICAg
ICAgZG5kbFtsXSArPSBkbmRsW2wtMV07ICAgLy8gIGNoYW5nZWQgZnJvbSBqdXN0ICA9ICAgb24g
MDIgQXByaWwgOTgKICAgICAgZWxzZQogICAgICAgIGRuZGxbbF0gPSBhc3Bhci9zcXJ0KCBwb3co
KDEuK3Nxcihhc3Bhcip4KSksMykgKSAqCiAgICAgICAgICAoYmlubFtsXS1iaW5sW2wtMV0pICog
ZXQgLyBzcXJ0KCBwdCp4KmV0KnB0KngqZXQgKyBwdCpwdCArIHZlY01hc3MqdmVjTWFzcyApICsK
ICAgICAgICAgIGRuZGxbbC0xXTsKICAgIH0KICAgIHJhbiA9IEc0VW5pZm9ybVJhbmQoKSpkbmRs
WzE5XTsKICAgIGwgPSAxOwogICAgd2hpbGUoIChyYW4+ZG5kbFtsXSkgJiYgKGw8MjApIClsKys7
CiAgICBsID0gRzRzdGQ6Om1pbiggMTksIGwgKTsKICAgIHggPSBHNHN0ZDo6bWluKCAxLjAsIHB0
KihiaW5sW2wtMV0gKyBHNFVuaWZvcm1SYW5kKCkqKGJpbmxbbF0tYmlubFtsLTFdKS8yLikgKTsg
ICAKICAgIGN1cnJlbnRQYXJ0aWNsZS5TZXRNb21lbnR1bSggeCpldCpHZVYgKTsgICAgICAgICAg
ICAgICAgIC8vIHNldCB0aGUgei1tb21lbnR1bQogICAgaWYoIGZvcndhcmRFbmVyZ3kgPCBmb3J3
YXJkS2luZXRpYyApCiAgICAgIHRvdGFsRW5lcmd5ID0gdmVjTWFzcyArIDAuMDQqZmFicyhub3Jt
YWwoKSk7CiAgICBlbHNlCiAgICAgIHRvdGFsRW5lcmd5ID0gdmVjTWFzcyArIGZvcndhcmRFbmVy
Z3kgLSBmb3J3YXJkS2luZXRpYzsKICAgIGN1cnJlbnRQYXJ0aWNsZS5TZXRUb3RhbEVuZXJneSgg
dG90YWxFbmVyZ3kqR2VWICk7CiAgICBwcCA9IHNxcnQoIGFicyggdG90YWxFbmVyZ3kqdG90YWxF
bmVyZ3kgLSB2ZWNNYXNzKnZlY01hc3MgKSApKkdlVjsKICAgIHBwMSA9IGN1cnJlbnRQYXJ0aWNs
ZS5HZXRNb21lbnR1bSgpLm1hZygpL01lVjsKICAgIGlmKCBwcDEgPCAxLjBlLTYqR2VWICkKICAg
IHsKICAgICAgRzRkb3VibGUgcnRobnZlID0gcGkqRzRVbmlmb3JtUmFuZCgpOwogICAgICBHNGRv
dWJsZSBwaGludmUgPSB0d29waSpHNFVuaWZvcm1SYW5kKCk7CiAgICAgIEc0ZG91YmxlIHNydGgg
PSBzaW4ocnRobnZlKTsKICAgICAgY3VycmVudFBhcnRpY2xlLlNldE1vbWVudHVtKCBwcCpzcnRo
KmNvcyhwaGludmUpKk1lViwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcCpz
cnRoKnNpbihwaGludmUpKk1lViwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
cCpjb3MocnRobnZlKSpNZVYgKTsKICAgIH0gZWxzZSB7CiAgICAgIGN1cnJlbnRQYXJ0aWNsZS5T
ZXRNb21lbnR1bSggY3VycmVudFBhcnRpY2xlLkdldE1vbWVudHVtKCkgKiAocHAvcHAxKSApOwog
ICAgfQogICAgcHNldWRvUGFydGljbGVbNF0gPSBwc2V1ZG9QYXJ0aWNsZVs0XSArIGN1cnJlbnRQ
YXJ0aWNsZTsKICAgIC8vCiAgICAvLyB0aGlzIGZpbmlzaGVzIHRoZSBjdXJyZW50IHBhcnRpY2xl
CiAgICAvLyBub3cgZm9yIHRoZSB0YXJnZXQgcGFydGljbGUKICAgIC8vCiAgICBpZiggYmFja3dh
cmROdWNsZW9uQ291bnQgPCAxOCApCiAgICB7CiAgICAgIHRhcmdldFBhcnRpY2xlLlNldFNpZGUo
IC0zICk7CiAgICAgICsrYmFja3dhcmROdWNsZW9uQ291bnQ7CiAgICB9CiAgICBlbHNlCiAgICB7
CiAgICAgIC8vICBzZXQgcHQgYW5kIHBoaSB2YWx1ZXMsIHRoZXkgYXJlIGNoYW5nZWQgc29tZXdo
YXQgaW4gdGhlIGl0ZXJhdGlvbiBsb29wCiAgICAgIC8vICBzZXQgbWFzcyBwYXJhbWV0ZXIgZm9y
IGxhbWJkYSBmcmFnbWVudGF0aW9uIG1vZGVsCiAgICAgIC8vCiAgICAgIHZlY01hc3MgPSB0YXJn
ZXRQYXJ0aWNsZS5HZXRNYXNzKCkvR2VWOwogICAgICByYW4gPSAtbG9nKDEuMC1HNFVuaWZvcm1S
YW5kKCkpOwogICAgICBhc3BhciA9IDAuNDA7CiAgICAgIHB0ID0gRzRzdGQ6Om1heCggMC4wMDEs
IHNxcnQoIHBvdyggcmFuLzQuMCwgMS4yICkgKSApOwogICAgICB0YXJnZXRQYXJ0aWNsZS5TZXRN
b21lbnR1bSggcHQqY29zKHBoaSkqR2VWLCBwdCpzaW4ocGhpKSpHZVYgKTsKICAgICAgZm9yKCBH
NGludCBqPTA7IGo8MjA7ICsraiApYmlubFtqXSA9IChqLTEuKS8oMTkuKnB0KTsKICAgICAgZXQg
PSBwc2V1ZG9QYXJ0aWNsZVsxXS5HZXRUb3RhbEVuZXJneSgpL0dlVjsKICAgICAgZG5kbFswXSA9
IDAuMDsKICAgICAgb3V0ZXJDb3VudGVyID0gMDsKICAgICAgZWxpbWluYXRlVGhpc1BhcnRpY2xl
ID0gdHJ1ZTsgICAgIC8vIHNob3VsZCBuZXZlciBlbGltaW5hdGUgdGhlIHRhcmdldCBwYXJ0aWNs
ZQogICAgICByZXNldEVuZXJnaWVzID0gdHJ1ZTsKICAgICAgd2hpbGUoICsrb3V0ZXJDb3VudGVy
IDwgMyApICAgICAvLyBzdGFydCBvZiBvdXRlciBpdGVyYXRpb24gbG9vcAogICAgICB7CiAgICAg
ICAgZm9yKCBsPTE7IGw8MjA7ICsrbCApCiAgICAgICAgewogICAgICAgICAgeCA9IChiaW5sW2xd
K2JpbmxbbC0xXSkvMi47CiAgICAgICAgICBpZiggeCA+IDEuMC9wdCApCiAgICAgICAgICAgIGRu
ZGxbbF0gKz0gZG5kbFtsLTFdOyAgIC8vIGNoYW5nZWQgZnJvbSBqdXN0ICA9ICBvbiAwMiBBcHJp
bCA5OAogICAgICAgICAgZWxzZQogICAgICAgICAgICBkbmRsW2xdID0gYXNwYXIvc3FydCggcG93
KCgxLithc3Bhcip4KmFzcGFyKngpLDMpICkgKgogICAgICAgICAgICAgIChiaW5sW2xdLWJpbmxb
bC0xXSkqZXQgLyBzcXJ0KCBwdCp4KmV0KnB0KngqZXQrcHQqcHQrdmVjTWFzcyp2ZWNNYXNzICkg
KwogICAgICAgICAgICAgIGRuZGxbbC0xXTsKICAgICAgICB9CiAgICAgICAgaW5uZXJDb3VudGVy
ID0gMDsKICAgICAgICB3aGlsZSggKytpbm5lckNvdW50ZXIgPCA3ICkgICAgLy8gc3RhcnQgb2Yg
aW5uZXIgaXRlcmF0aW9uIGxvb3AKICAgICAgICB7CiAgICAgICAgICBsID0gMTsKICAgICAgICAg
IHJhbiA9IEc0VW5pZm9ybVJhbmQoKSpkbmRsWzE5XTsKICAgICAgICAgIHdoaWxlKCAoIHJhbiA+
PSBkbmRsW2xdICkgJiYgKCBsIDwgMjAgKSApbCsrOwogICAgICAgICAgbCA9IEc0c3RkOjptaW4o
IDE5LCBsICk7CiAgICAgICAgICB4ID0gRzRzdGQ6Om1pbiggMS4wLCBwdCooYmlubFtsLTFdICsg
RzRVbmlmb3JtUmFuZCgpKihiaW5sW2xdLWJpbmxbbC0xXSkvMi4pICk7CiAgICAgICAgICBpZigg
dGFyZ2V0UGFydGljbGUuR2V0U2lkZSgpIDwgMCApeCAqPSAtMS47CiAgICAgICAgICB0YXJnZXRQ
YXJ0aWNsZS5TZXRNb21lbnR1bSggeCpldCpHZVYgKTsgICAgICAgICAgICAgICAgLy8gc2V0IHRo
ZSB6LW1vbWVudHVtCiAgICAgICAgICB0b3RhbEVuZXJneSA9IHNxcnQoIHgqZXQqeCpldCArIHB0
KnB0ICsgdmVjTWFzcyp2ZWNNYXNzICk7CiAgICAgICAgICB0YXJnZXRQYXJ0aWNsZS5TZXRUb3Rh
bEVuZXJneSggdG90YWxFbmVyZ3kqR2VWICk7CiAgICAgICAgICBpZiggdGFyZ2V0UGFydGljbGUu
R2V0U2lkZSgpIDwgMCApCiAgICAgICAgICB7CiAgICAgICAgICAgIGlmKCBleHRyYU51Y2xlb25D
b3VudCA+IDE5ICl4PTAuOTk5OwogICAgICAgICAgICBHNGRvdWJsZSB4eHggPSAwLjk1KzAuMDUq
ZXh0cmFOdWNsZW9uQ291bnQvMjAuMDsKICAgICAgICAgICAgaWYoIChiYWNrd2FyZEtpbmV0aWMr
dG90YWxFbmVyZ3ktdmVjTWFzcykgPCB4eHgqYmFja3dhcmRFbmVyZ3kgKQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgcHNldWRvUGFydGljbGVbNV0gPSBwc2V1ZG9QYXJ0aWNsZVs1XSArIHRh
cmdldFBhcnRpY2xlOwogICAgICAgICAgICAgIGJhY2t3YXJkS2luZXRpYyArPSB0b3RhbEVuZXJn
eSAtIHZlY01hc3M7CiAgICAgICAgICAgICAgcHNldWRvUGFydGljbGVbNl0gPSBwc2V1ZG9QYXJ0
aWNsZVs0XSArIHBzZXVkb1BhcnRpY2xlWzVdOwogICAgICAgICAgICAgIHBzZXVkb1BhcnRpY2xl
WzZdLlNldE1vbWVudHVtKCAwLjAgKTsgICAgICAgICAgICAgICAgICAgICAgLy8gc2V0IHotbW9t
ZW50dW0KICAgICAgICAgICAgICBwaGkgPSBwc2V1ZG9QYXJ0aWNsZVs2XS5BbmdsZSggcHNldWRv
UGFydGljbGVbOF0gKTsKICAgICAgICAgICAgICBpZiggcHNldWRvUGFydGljbGVbNl0uR2V0TW9t
ZW50dW0oKS55KCkvTWVWIDwgMC4wIClwaGkgPSB0d29waSAtIHBoaTsKICAgICAgICAgICAgICBw
aGkgKz0gcGkgKyBub3JtYWwoKSAqIHBpIC8gMTIuMDsKICAgICAgICAgICAgICBpZiggcGhpID4g
dHdvcGkgKXBoaSAtPSB0d29waTsKICAgICAgICAgICAgICBpZiggcGhpIDwgMC4wIClwaGkgPSB0
d29waSAtIHBoaTsKICAgICAgICAgICAgICBvdXRlckNvdW50ZXIgPSAyOyAgICAgICAgICAgICAg
ICAgICAgLy8gbGVhdmUgb3V0ZXIgbG9vcAogICAgICAgICAgICAgIGVsaW1pbmF0ZVRoaXNQYXJ0
aWNsZSA9IGZhbHNlOyAgICAgICAvLyBkb24ndCBlbGltaW5hdGUgdGhpcyBwYXJ0aWNsZQogICAg
ICAgICAgICAgIHJlc2V0RW5lcmdpZXMgPSBmYWxzZTsKICAgICAgICAgICAgICBicmVhazsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGVhdmUgaW5uZXIgbG9vcAogICAgICAgICAg
ICB9CiAgICAgICAgICAgIGlmKCBpbm5lckNvdW50ZXIgPiA1IClicmVhazsgICAgICAgICAgIC8v
IGxlYXZlIGlubmVyIGxvb3AKICAgICAgICAgICAgaWYoIGZvcndhcmRFbmVyZ3kgPj0gdmVjTWFz
cyApICAvLyBzd2l0Y2ggc2lkZXMKICAgICAgICAgICAgewogICAgICAgICAgICAgIHRhcmdldFBh
cnRpY2xlLlNldFNpZGUoIDEgKTsKICAgICAgICAgICAgICBmb3J3YXJkRW5lcmd5IC09IHZlY01h
c3M7CiAgICAgICAgICAgICAgYmFja3dhcmRFbmVyZ3kgKz0gdmVjTWFzczsKICAgICAgICAgICAg
ICAtLWJhY2t3YXJkQ291bnQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgRzRUaHJlZVZlY3Rv
ciBtb21lbnR1bSA9IHRhcmdldFBhcnRpY2xlLkdldE1vbWVudHVtKCk7CiAgICAgICAgICAgIHRh
cmdldFBhcnRpY2xlLlNldE1vbWVudHVtKCBtb21lbnR1bS54KCkgKiAwLjksIG1vbWVudHVtLnko
KSAqIDAuOSApOwogICAgICAgICAgICBwdCAqPSAwLjk7CiAgICAgICAgICAgIGRuZGxbMTldICo9
IDAuOTsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgIC8vIHRh
cmdldCBoYXMgZ29uZSB0byBmb3J3YXJkIHNpZGUKICAgICAgICAgIHsKICAgICAgICAgICAgaWYo
IGZvcndhcmRFbmVyZ3kgPCBmb3J3YXJkS2luZXRpYyApCiAgICAgICAgICAgICAgdG90YWxFbmVy
Z3kgPSB2ZWNNYXNzICsgMC4wNCpmYWJzKG5vcm1hbCgpKTsKICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgIHRvdGFsRW5lcmd5ID0gdmVjTWFzcyArIGZvcndhcmRFbmVyZ3kgLSBmb3J3YXJk
S2luZXRpYzsKICAgICAgICAgICAgdGFyZ2V0UGFydGljbGUuU2V0VG90YWxFbmVyZ3koIHRvdGFs
RW5lcmd5KkdlViApOwogICAgICAgICAgICBwcCA9IHNxcnQoIGFicyggdG90YWxFbmVyZ3kqdG90
YWxFbmVyZ3kgLSB2ZWNNYXNzKnZlY01hc3MgKSApKkdlVjsKICAgICAgICAgICAgcHAxID0gdGFy
Z2V0UGFydGljbGUuR2V0TW9tZW50dW0oKS5tYWcoKS9NZVY7CiAgICAgICAgICAgIGlmKCBwcDEg
PCAxLjBlLTYqR2VWICkKICAgICAgICAgICAgewogICAgICAgICAgICAgIEc0ZG91YmxlIHJ0aG52
ZSA9IHBpKkc0VW5pZm9ybVJhbmQoKTsKICAgICAgICAgICAgICBHNGRvdWJsZSBwaGludmUgPSB0
d29waSpHNFVuaWZvcm1SYW5kKCk7CiAgICAgICAgICAgICAgRzRkb3VibGUgc3J0aCA9IHNpbihy
dGhudmUpOwogICAgICAgICAgICAgIHRhcmdldFBhcnRpY2xlLlNldE1vbWVudHVtKCBwcCpzcnRo
KmNvcyhwaGludmUpKk1lViwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHAqc3J0aCpzaW4ocGhpbnZlKSpNZVYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBwKmNvcyhydGhudmUpKk1lViApOwogICAgICAgICAgICB9CiAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICB0YXJnZXRQYXJ0aWNsZS5TZXRNb21lbnR1bSggdGFyZ2V0
UGFydGljbGUuR2V0TW9tZW50dW0oKSAqIChwcC9wcDEpICk7CgogICAgICAgICAgICBwc2V1ZG9Q
YXJ0aWNsZVs0XSA9IHBzZXVkb1BhcnRpY2xlWzRdICsgdGFyZ2V0UGFydGljbGU7CiAgICAgICAg
ICAgIG91dGVyQ291bnRlciA9IDI7ICAgICAgICAgICAgICAgICAgICAvLyBsZWF2ZSBvdXRlciBs
b29wCiAgICAgICAgICAgIGVsaW1pbmF0ZVRoaXNQYXJ0aWNsZSA9IGZhbHNlOyAgICAgICAvLyBk
b24ndCBlbGltaW5hdGUgdGhpcyBwYXJ0aWNsZQogICAgICAgICAgICByZXNldEVuZXJnaWVzID0g
ZmFsc2U7CiAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBsZWF2ZSBpbm5lciBsb29wCiAgICAgICAgICB9CiAgICAgICAgfSAgICAvLyBjbG9zZXMgaW5u
ZXIgbG9vcAogICAgICAgIGlmKCByZXNldEVuZXJnaWVzICkKICAgICAgICB7CiAgICAgICAgICAv
LyAgIGlmIHdlIGdldCB0byBoZXJlLCB0aGUgaW5uZXIgbG9vcCBoYXMgYmVlbiBEb25lIDYgVGlt
ZXMKICAgICAgICAgIC8vICAgcmVzZXQgdGhlIGtpbmV0aWMgZW5lcmdpZXMgb2YgcHJldmlvdXNs
eSBEb25lIHBhcnRpY2xlcywgaWYgdGhleSBhcmUgbGlnaHRlcgogICAgICAgICAgLy8gICAgdGhh
biBwcm90b25zIGFuZCBpbiB0aGUgZm9yd2FyZCBoZW1pc3BoZXJlCiAgICAgICAgICAvLyAgIHRo
ZW4gY29udGludWUgd2l0aCBvdXRlciBsb29wCiAgICAgICAgICAKICAgICAgICAgIGZvcndhcmRL
aW5ldGljID0gYmFja3dhcmRLaW5ldGljID0gMC4wOwogICAgICAgICAgcHNldWRvUGFydGljbGVb
NF0uU2V0WmVybygpOwogICAgICAgICAgcHNldWRvUGFydGljbGVbNV0uU2V0WmVybygpOwogICAg
ICAgICAgZm9yKCBsPTA7IGw8dmVjTGVuOyArK2wgKSAvLyBjaGFuZ2VkIGZyb20gbD0xICBvbiAw
MiBBcHJpbCA5OAogICAgICAgICAgewogICAgICAgICAgICBpZiggdmVjW2xdLT5HZXRTaWRlKCkg
PiAwIHx8CiAgICAgICAgICAgICAgICB2ZWNbbF0tPkdldERlZmluaXRpb24oKSA9PSBhS2Fvbk1p
bnVzIHx8CiAgICAgICAgICAgICAgICB2ZWNbbF0tPkdldERlZmluaXRpb24oKSA9PSBhS2Fvblpl
cm9MIHx8CiAgICAgICAgICAgICAgICB2ZWNbbF0tPkdldERlZmluaXRpb24oKSA9PSBhS2Fvblpl
cm9TIHx8CiAgICAgICAgICAgICAgICB2ZWNbbF0tPkdldERlZmluaXRpb24oKSA9PSBhS2FvblBs
dXMgfHwKICAgICAgICAgICAgICAgIHZlY1tsXS0+R2V0RGVmaW5pdGlvbigpID09IGFQaU1pbnVz
IHx8CiAgICAgICAgICAgICAgICB2ZWNbbF0tPkdldERlZmluaXRpb24oKSA9PSBhUGlaZXJvIHx8
CiAgICAgICAgICAgICAgICB2ZWNbbF0tPkdldERlZmluaXRpb24oKSA9PSBhUGlQbHVzICkKICAg
ICAgICAgICAgewogICAgICAgICAgICAgIEc0ZG91YmxlIHRlbXBNYXNzID0gdmVjW2xdLT5HZXRN
YXNzKCkvR2VWOwogICAgICAgICAgICAgIHRvdGFsRW5lcmd5ID0KICAgICAgICAgICAgICAgIEc0
c3RkOjptYXgoIHRlbXBNYXNzLCAwLjk1KnZlY1tsXS0+R2V0VG90YWxFbmVyZ3koKS9HZVYgKyAw
LjA1KnRlbXBNYXNzICk7CiAgICAgICAgICAgICAgdmVjW2xdLT5TZXRUb3RhbEVuZXJneSggdG90
YWxFbmVyZ3kqR2VWICk7CiAgICAgICAgICAgICAgcHAgPSBzcXJ0KCBhYnMoIHRvdGFsRW5lcmd5
KnRvdGFsRW5lcmd5IC0gdGVtcE1hc3MqdGVtcE1hc3MgKSApKkdlVjsKICAgICAgICAgICAgICBw
cDEgPSB2ZWNbbF0tPkdldE1vbWVudHVtKCkubWFnKCkvTWVWOwogICAgICAgICAgICAgIGlmKCBw
cDEgPCAxLjBlLTYqR2VWICkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBHNGRvdWJs
ZSBydGhudmUgPSBwaSpHNFVuaWZvcm1SYW5kKCk7CiAgICAgICAgICAgICAgICBHNGRvdWJsZSBw
aGludmUgPSB0d29waSpHNFVuaWZvcm1SYW5kKCk7CiAgICAgICAgICAgICAgICBHNGRvdWJsZSBz
cnRoID0gc2luKHJ0aG52ZSk7CiAgICAgICAgICAgICAgICB2ZWNbbF0tPlNldE1vbWVudHVtKCBw
cCpzcnRoKmNvcyhwaGludmUpKk1lViwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBwKnNydGgqc2luKHBoaW52ZSkqTWVWLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHAqY29zKHJ0aG52ZSkqTWVWICk7CiAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgIHZlY1tsXS0+U2V0TW9tZW50dW0oIHZlY1tsXS0+R2V0
TW9tZW50dW0oKSAqIChwcC9wcDEpICk7CgogICAgICAgICAgICAgIHB0ID0gRzRzdGQ6Om1heCgg
MC4wMDEqR2VWLCBzcXJ0KCBzcXIodmVjW2xdLT5HZXRNb21lbnR1bSgpLngoKS9NZVYpICsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcXIodmVjW2xdLT5HZXRNb21l
bnR1bSgpLnkoKS9NZVYpICkgKS9HZVY7CiAgICAgICAgICAgICAgaWYoIHZlY1tsXS0+R2V0U2lk
ZSgpID4gMCkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3J3YXJkS2luZXRpYyAr
PSB2ZWNbbF0tPkdldEtpbmV0aWNFbmVyZ3koKS9HZVY7CiAgICAgICAgICAgICAgICBwc2V1ZG9Q
YXJ0aWNsZVs0XSA9IHBzZXVkb1BhcnRpY2xlWzRdICsgKCp2ZWNbbF0pOwogICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICBiYWNrd2FyZEtpbmV0aWMgKz0gdmVjW2xdLT5HZXRL
aW5ldGljRW5lcmd5KCkvR2VWOwogICAgICAgICAgICAgICAgcHNldWRvUGFydGljbGVbNV0gPSBw
c2V1ZG9QYXJ0aWNsZVs1XSArICgqdmVjW2xdKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAg
IH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gICAgLy8gY2xvc2VzIG91dGVyIGxvb3AK
ICAgICAgaWYoIGVsaW1pbmF0ZVRoaXNQYXJ0aWNsZSApICAvLyBub3QgZW5vdWdoIGVuZXJneSwg
ZWxpbWluYXRlIHRhcmdldAogICAgICB7CiAgICAgICAgRzRjZXJyIDw8ICJXYXJuaW5nOiBlbGlt
aW5hdGluZyB0YXJnZXQgcGFydGljbGUiIDw8IEc0ZW5kbDsKLy8gICAgICAgIGV4aXQoIEVYSVRf
RkFJTFVSRSApOwogICAgICB9CiAgICB9CiAgICAvLwogICAgLy8gIHRoaXMgZmluaXNoZXMgdGhl
IHRhcmdldCBwYXJ0aWNsZQogICAgLy8gYmFja3dhcmQgbnVjbGVvbnMgcHJvZHVjZWQgd2l0aCBh
IGNsdXN0ZXIgbW9kZWwKICAgIC8vCiAgICBwc2V1ZG9QYXJ0aWNsZVs2XS5Mb3JlbnR6KCBwc2V1
ZG9QYXJ0aWNsZVszXSwgcHNldWRvUGFydGljbGVbMl0gKTsKICAgIHBzZXVkb1BhcnRpY2xlWzZd
ID0gcHNldWRvUGFydGljbGVbNl0gLSBwc2V1ZG9QYXJ0aWNsZVs0XTsKICAgIHBzZXVkb1BhcnRp
Y2xlWzZdID0gcHNldWRvUGFydGljbGVbNl0gLSBwc2V1ZG9QYXJ0aWNsZVs1XTsKICAgIGlmKCBi
YWNrd2FyZE51Y2xlb25Db3VudCA9PSAxICkgIC8vIHRhcmdldCBwYXJ0aWNsZSBpcyB0aGUgb25s
eSBiYWNrd2FyZCBudWNsZW9uCiAgICB7CiAgICAgIEc0ZG91YmxlIGVraW4gPQogICAgICAgIEc0
c3RkOjptaW4oIGJhY2t3YXJkRW5lcmd5LWJhY2t3YXJkS2luZXRpYywgY2VudGVyb2ZtYXNzRW5l
cmd5LzIuMC1wcm90b25NYXNzL0dlViApOwogICAgICBpZiggZWtpbiA8IDAuMDQgKWVraW4gPSAw
LjA0ICogZmFicyggbm9ybWFsKCkgKTsKICAgICAgdmVjTWFzcyA9IHRhcmdldFBhcnRpY2xlLkdl
dE1hc3MoKS9HZVY7CiAgICAgIHRvdGFsRW5lcmd5ID0gZWtpbit2ZWNNYXNzOwogICAgICB0YXJn
ZXRQYXJ0aWNsZS5TZXRUb3RhbEVuZXJneSggdG90YWxFbmVyZ3kqR2VWICk7CiAgICAgIHBwID0g
c3FydCggYWJzKCB0b3RhbEVuZXJneSp0b3RhbEVuZXJneSAtIHZlY01hc3MqdmVjTWFzcyApICkq
R2VWOwogICAgICBwcDEgPSBwc2V1ZG9QYXJ0aWNsZVs2XS5HZXRNb21lbnR1bSgpLm1hZygpL01l
VjsKICAgICAgaWYoIHBwMSA8IDEuMGUtNipHZVYgKQogICAgICB7IAogICAgICAgIHJ0aG52ZSA9
IHBpKkc0VW5pZm9ybVJhbmQoKTsKICAgICAgICBwaGludmUgPSB0d29waSpHNFVuaWZvcm1SYW5k
KCk7CiAgICAgICAgRzRkb3VibGUgc3J0aCA9IHNpbihydGhudmUpOwogICAgICAgIHRhcmdldFBh
cnRpY2xlLlNldE1vbWVudHVtKCBwcCpzcnRoKmNvcyhwaGludmUpKk1lViwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHAqc3J0aCpzaW4ocGhpbnZlKSpNZVYsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwKmNvcyhydGhudmUpKk1lViApOwogICAgICB9
IGVsc2UgewogICAgICAgIHRhcmdldFBhcnRpY2xlLlNldE1vbWVudHVtKCBwc2V1ZG9QYXJ0aWNs
ZVs2XS5HZXRNb21lbnR1bSgpICogKHBwL3BwMSkgKTsKICAgICAgfQogICAgICBwc2V1ZG9QYXJ0
aWNsZVs1XSA9IHBzZXVkb1BhcnRpY2xlWzVdICsgdGFyZ2V0UGFydGljbGU7CiAgICB9CiAgICBl
bHNlICAvLyBtb3JlIHRoYW4gb25lIGJhY2t3YXJkIG51Y2xlb24KICAgIHsKICAgICAgY29uc3Qg
RzRkb3VibGUgY3BhcltdID0geyAwLjYsIDAuNiwgMC4zNSwgMC4xNSwgMC4xMCB9OwogICAgICBj
b25zdCBHNGRvdWJsZSBncGFyW10gPSB7IDIuNiwgMi42LCAxLjgwLCAxLjMwLCAxLjIwIH07CiAg
ICAgIC8vIFJlcGxhY2VkIHRoZSBmb2xsb3dpbmcgbWluIGZ1bmN0aW9uIHRvIGdldCBjb3JyZWN0
IGJlaGF2aW91ciBvbiBERUMuCiAgICAgIC8vIEc0aW50IHRlbXBDb3VudCA9IEc0c3RkOjptaW4o
IDUsIGJhY2t3YXJkTnVjbGVvbkNvdW50ICkgLSAxOwogICAgICBHNGludCB0ZW1wQ291bnQ7CiAg
ICAgIGlmIChiYWNrd2FyZE51Y2xlb25Db3VudCA8IDUpCgl7CgkgIHRlbXBDb3VudCA9IGJhY2t3
YXJkTnVjbGVvbkNvdW50OwoJfQogICAgICBlbHNlCgl7CgkgIHRlbXBDb3VudCA9IDU7Cgl9CiAg
ICAgIHRlbXBDb3VudC0tOwogICAgICAvL2NvdXQgPDwgImJhY2t3YXJkTnVjbGVvbkNvdW50ICIg
PDwgYmFja3dhcmROdWNsZW9uQ291bnQgPDwgRzRlbmRsOwogICAgICAvL2NvdXQgPDwgInRlbXBD
b3VudCAiIDw8IHRlbXBDb3VudCA8PCBHNGVuZGw7CiAgICAgIEc0ZG91YmxlIHJtYjAgPSAwLjA7
CiAgICAgIGlmKCB0YXJnZXRQYXJ0aWNsZS5HZXRTaWRlKCkgPT0gLTMgKQogICAgICAgIHJtYjAg
Kz0gdGFyZ2V0UGFydGljbGUuR2V0TWFzcygpL0dlVjsKICAgICAgZm9yKCBpPTA7IGk8dmVjTGVu
OyArK2kgKQogICAgICB7CiAgICAgICAgaWYoIHZlY1tpXS0+R2V0U2lkZSgpID09IC0zIClybWIw
ICs9IHZlY1tpXS0+R2V0TWFzcygpL0dlVjsKICAgICAgfQogICAgICBybWIgPSBybWIwICsgcG93
KC1sb2coMS4wLUc0VW5pZm9ybVJhbmQoKSksY3Bhclt0ZW1wQ291bnRdKSAvIGdwYXJbdGVtcENv
dW50XTsKICAgICAgdG90YWxFbmVyZ3kgPSBwc2V1ZG9QYXJ0aWNsZVs2XS5HZXRUb3RhbEVuZXJn
eSgpL0dlVjsKICAgICAgdmVjTWFzcyA9IEc0c3RkOjptaW4oIHJtYiwgdG90YWxFbmVyZ3kgKTsK
ICAgICAgcHNldWRvUGFydGljbGVbNl0uU2V0TWFzcyggdmVjTWFzcypHZVYgKTsKICAgICAgcHAg
PSBzcXJ0KCBhYnMoIHRvdGFsRW5lcmd5KnRvdGFsRW5lcmd5IC0gdmVjTWFzcyp2ZWNNYXNzICkg
KSpHZVY7CiAgICAgIHBwMSA9IHBzZXVkb1BhcnRpY2xlWzZdLkdldE1vbWVudHVtKCkubWFnKCkv
TWVWOwogICAgICBpZiggcHAxIDwgMS4wZS02KkdlViApCiAgICAgIHsKICAgICAgICBydGhudmUg
PSBwaSAqIEc0VW5pZm9ybVJhbmQoKTsKICAgICAgICBwaGludmUgPSB0d29waSAqIEc0VW5pZm9y
bVJhbmQoKTsKICAgICAgICBHNGRvdWJsZSBzcnRoID0gc2luKHJ0aG52ZSk7CiAgICAgICAgcHNl
dWRvUGFydGljbGVbNl0uU2V0TW9tZW50dW0oIC1wcCpzcnRoKmNvcyhwaGludmUpKk1lViwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLXBwKnNydGgqc2luKHBoaW52ZSkq
TWVWLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtcHAqY29zKHJ0aG52
ZSkqTWVWICk7CiAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHBzZXVkb1BhcnRpY2xlWzZdLlNl
dE1vbWVudHVtKCBwc2V1ZG9QYXJ0aWNsZVs2XS5HZXRNb21lbnR1bSgpICogKC1wcC9wcDEpICk7
CiAgICAgIAogICAgICBHNEZhc3RWZWN0b3I8RzRSZWFjdGlvblByb2R1Y3QsMTI4PiB0ZW1wVjsg
IC8vIHRlbXBWIGNvbnRhaW5zIHRoZSBiYWNrd2FyZCBudWNsZW9ucwogICAgICB0ZW1wVi5Jbml0
aWFsaXplKCBiYWNrd2FyZE51Y2xlb25Db3VudCApOwogICAgICBHNGludCB0ZW1wTGVuID0gMDsK
ICAgICAgaWYoIHRhcmdldFBhcnRpY2xlLkdldFNpZGUoKSA9PSAtMyApdGVtcFYuU2V0RWxlbWVu
dCggdGVtcExlbisrLCAmdGFyZ2V0UGFydGljbGUgKTsKICAgICAgZm9yKCBpPTA7IGk8dmVjTGVu
OyArK2kgKQogICAgICB7CiAgICAgICAgaWYoIHZlY1tpXS0+R2V0U2lkZSgpID09IC0zICl0ZW1w
Vi5TZXRFbGVtZW50KCB0ZW1wTGVuKyssIHZlY1tpXSApOwogICAgICB9CiAgICAgIGlmKCB0ZW1w
TGVuICE9IGJhY2t3YXJkTnVjbGVvbkNvdW50ICkKICAgICAgewogICAgICAgIEc0Y2VyciA8PCAi
dGVtcExlbiBpcyBub3QgdGhlIHNhbWUgYXMgYmFja3dhcmROdWNsZW9uQ291bnQiIDw8IEc0ZW5k
bDsKICAgICAgICBHNGNlcnIgPDwgInRlbXBMZW4gPSAiIDw8IHRlbXBMZW47CiAgICAgICAgRzRj
ZXJyIDw8ICIsIGJhY2t3YXJkTnVjbGVvbkNvdW50ID0gIiA8PCBiYWNrd2FyZE51Y2xlb25Db3Vu
dCA8PCBHNGVuZGw7CiAgICAgICAgRzRjZXJyIDw8ICJ0YXJnZXRQYXJ0aWNsZSBzaWRlID0gIiA8
PCB0YXJnZXRQYXJ0aWNsZS5HZXRTaWRlKCkgPDwgRzRlbmRsOwogICAgICAgIEc0Y2VyciA8PCAi
Y3VycmVudFBhcnRpY2xlIHNpZGUgPSAiIDw8IGN1cnJlbnRQYXJ0aWNsZS5HZXRTaWRlKCkgPDwg
RzRlbmRsOwogICAgICAgIGZvciggaT0wOyBpPHZlY0xlbjsgKytpICkKICAgICAgICAgIEc0Y2Vy
ciA8PCAicGFydGljbGUgIyIgPDwgaSA8PCAiIHNpZGUgPSAiIDw8IHZlY1tpXS0+R2V0U2lkZSgp
IDw8IEc0ZW5kbDsKICAgICAgICBleGl0KCBFWElUX0ZBSUxVUkUgKTsKICAgICAgfQogICAgICBj
b25zdGFudENyb3NzU2VjdGlvbiA9IHRydWU7CiAgICAgIC8vIERFQlVHR0lORyAtLT4gRHVtcEZy
YW1lczo6RHVtcEZyYW1lKHZlYywgdmVjTGVuKTsKICAgICAgaWYoIHRlbXBMZW4gPj0gMiApCiAg
ICAgIHsKICAgICAgICB3Z3QgPSBHZW5lcmF0ZU5Cb2R5RXZlbnQoCiAgICAgICAgIHBzZXVkb1Bh
cnRpY2xlWzZdLkdldE1hc3MoKSwgY29uc3RhbnRDcm9zc1NlY3Rpb24sIHRlbXBWLCB0ZW1wTGVu
ICk7CiAgICAgICAgIC8vIERFQlVHR0lORyAtLT4gRHVtcEZyYW1lczo6RHVtcEZyYW1lKHZlYywg
dmVjTGVuKTsKICAgICAgICBpZiggdGFyZ2V0UGFydGljbGUuR2V0U2lkZSgpID09IC0zICkKICAg
ICAgICB7CiAgICAgICAgICB0YXJnZXRQYXJ0aWNsZS5Mb3JlbnR6KCB0YXJnZXRQYXJ0aWNsZSwg
cHNldWRvUGFydGljbGVbNl0gKTsKICAgICAgICAgIC8vIHRlbXBWIGNvbnRhaW5zIHRoZSByZWFs
IHN0dWZmCiAgICAgICAgICBwc2V1ZG9QYXJ0aWNsZVs1XSA9IHBzZXVkb1BhcnRpY2xlWzVdICsg
dGFyZ2V0UGFydGljbGU7CiAgICAgICAgfQogICAgICAgIGZvciggaT0wOyBpPHZlY0xlbjsgKytp
ICkKICAgICAgICB7CiAgICAgICAgICBpZiggdmVjW2ldLT5HZXRTaWRlKCkgPT0gLTMgKQogICAg
ICAgICAgewogICAgICAgICAgICB2ZWNbaV0tPkxvcmVudHooICp2ZWNbaV0sIHBzZXVkb1BhcnRp
Y2xlWzZdICk7CiAgICAgICAgICAgIHBzZXVkb1BhcnRpY2xlWzVdID0gcHNldWRvUGFydGljbGVb
NV0gKyAoKnZlY1tpXSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAvLyBERUJVR0dJTkcg
LS0+IER1bXBGcmFtZXM6OkR1bXBGcmFtZSh2ZWMsIHZlY0xlbik7CiAgICAgIH0KICAgIH0KICAg
IC8vCiAgICAvLyAgTG9yZW50eiB0cmFuc2Zvcm1hdGlvbiBpbiBsYWIgc3lzdGVtCiAgICAvLwog
ICAgaWYoIHZlY0xlbiA9PSAwIClyZXR1cm4gZmFsc2U7ICAvLyBhbGwgdGhlIHNlY29uZGFyaWVz
IGhhdmUgYmVlbiBlbGltaW5hdGVkCiAgICAgIC8vIERFQlVHR0lORyAtLT4gRHVtcEZyYW1lczo6
RHVtcEZyYW1lKHZlYywgdmVjTGVuKTsKICAgIAogICAgRzRpbnQgbnVtYmVyb2ZGaW5hbFN0YXRl
TnVjbGVvbnMgPSAwOwogICAgaWYoIChjdXJyZW50UGFydGljbGUuR2V0RGVmaW5pdGlvbigpID09
IGFQcm90b24pIHx8CiAgICAgICAgKGN1cnJlbnRQYXJ0aWNsZS5HZXREZWZpbml0aW9uKCkgPT0g
YU5ldXRyb24pICkrK251bWJlcm9mRmluYWxTdGF0ZU51Y2xlb25zOwogICAgY3VycmVudFBhcnRp
Y2xlLkxvcmVudHooIGN1cnJlbnRQYXJ0aWNsZSwgcHNldWRvUGFydGljbGVbMV0gKTsKICAgIAog
ICAgaWYoICh0YXJnZXRQYXJ0aWNsZS5HZXREZWZpbml0aW9uKCkgPT0gYVByb3RvbikgfHwKICAg
ICAgICAodGFyZ2V0UGFydGljbGUuR2V0RGVmaW5pdGlvbigpID09IGFOZXV0cm9uKSApKytudW1i
ZXJvZkZpbmFsU3RhdGVOdWNsZW9uczsKICAgIHRhcmdldFBhcnRpY2xlLkxvcmVudHooIHRhcmdl
dFBhcnRpY2xlLCBwc2V1ZG9QYXJ0aWNsZVsxXSApOwogICAgCiAgICBmb3IoIGk9MDsgaTx2ZWNM
ZW47ICsraSApCiAgICB7CiAgICAgIGlmKCAodmVjW2ldLT5HZXREZWZpbml0aW9uKCkgPT0gYVBy
b3RvbikgfHwKICAgICAgICAgICh2ZWNbaV0tPkdldERlZmluaXRpb24oKSA9PSBhTmV1dHJvbikg
KSsrbnVtYmVyb2ZGaW5hbFN0YXRlTnVjbGVvbnM7CiAgICAgICBpZiggKHZlY1tpXS0+R2V0RGVm
aW5pdGlvbigpID09IGFuQW50aVByb3RvbikgfHwKICAgICAgICAgICh2ZWNbaV0tPkdldERlZmlu
aXRpb24oKSA9PSBhbkFudGlOZXV0cm9uKSApLS1udW1iZXJvZkZpbmFsU3RhdGVOdWNsZW9uczsK
ICAgICB2ZWNbaV0tPkxvcmVudHooICp2ZWNbaV0sIHBzZXVkb1BhcnRpY2xlWzFdICk7CiAgICB9
CiAgICAgIC8vIERFQlVHR0lORyAtLT4gRHVtcEZyYW1lczo6RHVtcEZyYW1lKHZlYywgdmVjTGVu
KTsKICAgIG51bWJlcm9mRmluYWxTdGF0ZU51Y2xlb25zID0gRzRzdGQ6Om1heCggMSwgbnVtYmVy
b2ZGaW5hbFN0YXRlTnVjbGVvbnMgKTsKICAgIC8vCiAgICAvLyBsZWFkRmxhZyB3aWxsIGJlIHRy
dWUKICAgIC8vICBpZmYgb3JpZ2luYWwgcGFydGljbGUgaXMgYXQgbGVhc3QgYXMgaGVhdnkgYXMg
SysgYW5kIG5vdCBhIHByb3RvbiBvciBuZXV0cm9uIEFORAogICAgLy8gICBpZgogICAgLy8gICAg
aW5jaWRlbnQgcGFydGljbGUgaXMgYXQgbGVhc3QgYXMgaGVhdnkgYXMgSysgYW5kIGl0IGlzIG5v
dCBhIHByb3RvbiBvciBuZXV0cm9uCiAgICAvLyAgICAgbGVhZEZsYWcgaXMgc2V0IHRvIHRoZSBp
bmNpZGVudCBwYXJ0aWNsZQogICAgLy8gICBvcgogICAgLy8gICAgdGFyZ2V0IHBhcnRpY2xlIGlz
IGF0IGxlYXN0IGFzIGhlYXZ5IGFzIEsrIGFuZCBpdCBpcyBub3QgYSBwcm90b24gb3IgbmV1dHJv
bgogICAgLy8gICAgIGxlYWRGbGFnIGlzIHNldCB0byB0aGUgdGFyZ2V0IHBhcnRpY2xlCiAgICAv
LwogICAgRzRib29sIGxlYWRpbmdTdHJhbmdlUGFydGljbGVIYXNDaGFuZ2VkID0gdHJ1ZTsKICAg
IGlmKCBsZWFkRmxhZyApCiAgICB7CiAgICAgIGlmKCBjdXJyZW50UGFydGljbGUuR2V0RGVmaW5p
dGlvbigpID09IGxlYWRpbmdTdHJhbmdlUGFydGljbGUuR2V0RGVmaW5pdGlvbigpICkKICAgICAg
ICBsZWFkaW5nU3RyYW5nZVBhcnRpY2xlSGFzQ2hhbmdlZCA9IGZhbHNlOwogICAgICBpZiggbGVh
ZGluZ1N0cmFuZ2VQYXJ0aWNsZUhhc0NoYW5nZWQgJiYKICAgICAgICAgICggdGFyZ2V0UGFydGlj
bGUuR2V0RGVmaW5pdGlvbigpID09IGxlYWRpbmdTdHJhbmdlUGFydGljbGUuR2V0RGVmaW5pdGlv
bigpICkgKQogICAgICAgIGxlYWRpbmdTdHJhbmdlUGFydGljbGVIYXNDaGFuZ2VkID0gZmFsc2U7
CiAgICAgIGlmKCBsZWFkaW5nU3RyYW5nZVBhcnRpY2xlSGFzQ2hhbmdlZCApCiAgICAgIHsKICAg
ICAgICBmb3IoIGk9MDsgaTx2ZWNMZW47IGkrKyApCiAgICAgICAgewogICAgICAgICAgaWYoIHZl
Y1tpXS0+R2V0RGVmaW5pdGlvbigpID09IGxlYWRpbmdTdHJhbmdlUGFydGljbGUuR2V0RGVmaW5p
dGlvbigpICkKICAgICAgICAgIHsKICAgICAgICAgICAgbGVhZGluZ1N0cmFuZ2VQYXJ0aWNsZUhh
c0NoYW5nZWQgPSBmYWxzZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAg
fQogICAgICB9CiAgICAgIGlmKCBsZWFkaW5nU3RyYW5nZVBhcnRpY2xlSGFzQ2hhbmdlZCApCiAg
ICAgIHsKICAgICAgICBHNGJvb2wgbGVhZFRlc3QgPSAKICAgICAgICAgIChsZWFkaW5nU3RyYW5n
ZVBhcnRpY2xlLkdldERlZmluaXRpb24oKSA9PSBhS2Fvbk1pbnVzIHx8CiAgICAgICAgICAgbGVh
ZGluZ1N0cmFuZ2VQYXJ0aWNsZS5HZXREZWZpbml0aW9uKCkgPT0gYUthb25aZXJvTCB8fAogICAg
ICAgICAgIGxlYWRpbmdTdHJhbmdlUGFydGljbGUuR2V0RGVmaW5pdGlvbigpID09IGFLYW9uWmVy
b1MgfHwKICAgICAgICAgICBsZWFkaW5nU3RyYW5nZVBhcnRpY2xlLkdldERlZmluaXRpb24oKSA9
PSBhS2FvblBsdXMgfHwKICAgICAgICAgICBsZWFkaW5nU3RyYW5nZVBhcnRpY2xlLkdldERlZmlu
aXRpb24oKSA9PSBhUGlNaW51cyB8fAogICAgICAgICAgIGxlYWRpbmdTdHJhbmdlUGFydGljbGUu
R2V0RGVmaW5pdGlvbigpID09IGFQaVplcm8gfHwKICAgICAgICAgICBsZWFkaW5nU3RyYW5nZVBh
cnRpY2xlLkdldERlZmluaXRpb24oKSA9PSBhUGlQbHVzKTsKICAgICAgICBHNGJvb2wgdGFyZ2V0
VGVzdCA9CiAgICAgICAgICAodGFyZ2V0UGFydGljbGUuR2V0RGVmaW5pdGlvbigpID09IGFLYW9u
TWludXMgfHwKICAgICAgICAgICB0YXJnZXRQYXJ0aWNsZS5HZXREZWZpbml0aW9uKCkgPT0gYUth
b25aZXJvTCB8fAogICAgICAgICAgIHRhcmdldFBhcnRpY2xlLkdldERlZmluaXRpb24oKSA9PSBh
S2Fvblplcm9TIHx8CiAgICAgICAgICAgdGFyZ2V0UGFydGljbGUuR2V0RGVmaW5pdGlvbigpID09
IGFLYW9uUGx1cyB8fAogICAgICAgICAgIHRhcmdldFBhcnRpY2xlLkdldERlZmluaXRpb24oKSA9
PSBhUGlNaW51cyB8fAogICAgICAgICAgIHRhcmdldFBhcnRpY2xlLkdldERlZmluaXRpb24oKSA9
PSBhUGlaZXJvIHx8CiAgICAgICAgICAgdGFyZ2V0UGFydGljbGUuR2V0RGVmaW5pdGlvbigpID09
IGFQaVBsdXMpOwogICAgICAgIAogICAgICAgIC8vIGZvbGxvd2luZyBtb2RpZmllZCBieSBKTEMg
MjItT2N0LTk3CiAgICAgICAgICAKICAgICAgICBpZiggKGxlYWRUZXN0JiZ0YXJnZXRUZXN0KSB8
fCAhKGxlYWRUZXN0fHx0YXJnZXRUZXN0KSApIC8vIGJvdGggdHJ1ZSBvciBib3RoIGZhbHNlCiAg
ICAgICAgewogICAgICAgICAgdGFyZ2V0UGFydGljbGUuU2V0RGVmaW5pdGlvbkFuZFVwZGF0ZUUo
IGxlYWRpbmdTdHJhbmdlUGFydGljbGUuR2V0RGVmaW5pdGlvbigpICk7CiAgICAgICAgICB0YXJn
ZXRIYXNDaGFuZ2VkID0gdHJ1ZTsKICAgICAgLy8gREVCVUdHSU5HIC0tPiBEdW1wRnJhbWVzOjpE
dW1wRnJhbWUodmVjLCB2ZWNMZW4pOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewog
ICAgICAgICAgY3VycmVudFBhcnRpY2xlLlNldERlZmluaXRpb25BbmRVcGRhdGVFKCBsZWFkaW5n
U3RyYW5nZVBhcnRpY2xlLkdldERlZmluaXRpb24oKSApOwogICAgICAgICAgaW5jaWRlbnRIYXND
aGFuZ2VkID0gZmFsc2U7CiAgICAgIC8vIERFQlVHR0lORyAtLT4gRHVtcEZyYW1lczo6RHVtcEZy
YW1lKHZlYywgdmVjTGVuKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gICAvLyBlbmQgb2YgaWYo
IGxlYWRGbGFnICkKICAgIAogICAgcHNldWRvUGFydGljbGVbM10uU2V0TW9tZW50dW0oIDAuMCwg
MC4wLCBwT3JpZ2luYWwqR2VWICk7CiAgICBwc2V1ZG9QYXJ0aWNsZVszXS5TZXRNYXNzKCBtT3Jp
Z2luYWwqR2VWICk7CiAgICBwc2V1ZG9QYXJ0aWNsZVszXS5TZXRUb3RhbEVuZXJneSgKICAgICBz
cXJ0KCBwT3JpZ2luYWwqcE9yaWdpbmFsICsgbU9yaWdpbmFsKm1PcmlnaW5hbCApKkdlViApOwog
ICAgCi8vICAgIEc0ZG91YmxlIGVraW4wID0gcHNldWRvUGFydGljbGVbM10uR2V0S2luZXRpY0Vu
ZXJneSgpL0dlVjsKICAgIAogICAgcHNldWRvUGFydGljbGVbNF0uU2V0TW9tZW50dW0oIDAuMCwg
MC4wLCAwLjAgKTsKICAgIHBzZXVkb1BhcnRpY2xlWzRdLlNldE1hc3MoIHByb3Rvbk1hc3MqbnVt
YmVyb2ZGaW5hbFN0YXRlTnVjbGVvbnMqTWVWICk7CiAgICBwc2V1ZG9QYXJ0aWNsZVs0XS5TZXRU
b3RhbEVuZXJneSggcHJvdG9uTWFzcypudW1iZXJvZkZpbmFsU3RhdGVOdWNsZW9ucypNZVYgKTsK
ICAgIAogICAgRzRkb3VibGUgdGhlb3JldGljYWxLaW5ldGljID0KICAgICAgcHNldWRvUGFydGlj
bGVbM10uR2V0VG90YWxFbmVyZ3koKS9NZVYgKwogICAgICBwc2V1ZG9QYXJ0aWNsZVs0XS5HZXRU
b3RhbEVuZXJneSgpL01lViAtCiAgICAgIGN1cnJlbnRQYXJ0aWNsZS5HZXRNYXNzKCkvTWVWIC0K
ICAgICAgdGFyZ2V0UGFydGljbGUuR2V0TWFzcygpL01lVjsKICAgIAogICAgRzRkb3VibGUgc2lt
dWxhdGVkS2luZXRpYyA9CiAgICAgIGN1cnJlbnRQYXJ0aWNsZS5HZXRLaW5ldGljRW5lcmd5KCkv
TWVWICsgdGFyZ2V0UGFydGljbGUuR2V0S2luZXRpY0VuZXJneSgpL01lVjsKICAgIAogICAgcHNl
dWRvUGFydGljbGVbNV0gPSBwc2V1ZG9QYXJ0aWNsZVszXSArIHBzZXVkb1BhcnRpY2xlWzRdOwog
ICAgcHNldWRvUGFydGljbGVbM10uTG9yZW50eiggcHNldWRvUGFydGljbGVbM10sIHBzZXVkb1Bh
cnRpY2xlWzVdICk7CiAgICBwc2V1ZG9QYXJ0aWNsZVs0XS5Mb3JlbnR6KCBwc2V1ZG9QYXJ0aWNs
ZVs0XSwgcHNldWRvUGFydGljbGVbNV0gKTsKICAgIAogICAgcHNldWRvUGFydGljbGVbN10uU2V0
WmVybygpOwogICAgcHNldWRvUGFydGljbGVbN10gPSBwc2V1ZG9QYXJ0aWNsZVs3XSArIGN1cnJl
bnRQYXJ0aWNsZTsKICAgIHBzZXVkb1BhcnRpY2xlWzddID0gcHNldWRvUGFydGljbGVbN10gKyB0
YXJnZXRQYXJ0aWNsZTsKICAgIAogICAgZm9yKCBpPTA7IGk8dmVjTGVuOyArK2kgKQogICAgewog
ICAgICBwc2V1ZG9QYXJ0aWNsZVs3XSA9IHBzZXVkb1BhcnRpY2xlWzddICsgKnZlY1tpXTsKICAg
ICAgc2ltdWxhdGVkS2luZXRpYyArPSB2ZWNbaV0tPkdldEtpbmV0aWNFbmVyZ3koKS9NZVY7CiAg
ICAgIHRoZW9yZXRpY2FsS2luZXRpYyAtPSB2ZWNbaV0tPkdldE1hc3MoKS9NZVY7CiAgICB9CiAg
ICBpZiggdmVjTGVuIDw9IDE2ICYmIHZlY0xlbiA+IDAgKQogICAgewogICAgICAvLyBtdXN0IGNy
ZWF0ZSBhIG5ldyBzZXQgb2YgUmVhY3Rpb25Qcm9kdWN0cyBoZXJlIGJlY2F1c2UgR2VuZXJhdGVO
Qm9keSB3aWxsCiAgICAgIC8vIG1vZGlmeSB0aGUgbW9tZW50YSBmb3IgdGhlIHBhcnRpY2xlcywg
YW5kIHdlIGRvbid0IHdhbnQgdG8gZG8gdGhpcwogICAgICAvLwogICAgICBHNFJlYWN0aW9uUHJv
ZHVjdCB0ZW1wUlsxMzBdOwogICAgICAvL0c0UmVhY3Rpb25Qcm9kdWN0ICp0ZW1wUiA9IG5ldyBH
NFJlYWN0aW9uUHJvZHVjdCBbdmVjTGVuKzJdOwogICAgICB0ZW1wUlswXSA9IGN1cnJlbnRQYXJ0
aWNsZTsKICAgICAgdGVtcFJbMV0gPSB0YXJnZXRQYXJ0aWNsZTsKICAgICAgZm9yKCBpPTA7IGk8
dmVjTGVuOyArK2kgKXRlbXBSW2krMl0gPSAqdmVjW2ldOwogICAgICBHNEZhc3RWZWN0b3I8RzRS
ZWFjdGlvblByb2R1Y3QsMTI4PiB0ZW1wVjsKICAgICAgdGVtcFYuSW5pdGlhbGl6ZSggdmVjTGVu
KzIgKTsKICAgICAgRzRpbnQgdGVtcExlbiA9IDA7CiAgICAgIGZvciggaT0wOyBpPHZlY0xlbisy
OyArK2kgKXRlbXBWLlNldEVsZW1lbnQoIHRlbXBMZW4rKywgJnRlbXBSW2ldICk7CiAgICAgIGNv
bnN0YW50Q3Jvc3NTZWN0aW9uID0gdHJ1ZTsKCiAgICAgIHdndCA9IEdlbmVyYXRlTkJvZHlFdmVu
dCgKICAgICAgIHBzZXVkb1BhcnRpY2xlWzNdLkdldFRvdGFsRW5lcmd5KCkvTWVWK3BzZXVkb1Bh
cnRpY2xlWzRdLkdldFRvdGFsRW5lcmd5KCkvTWVWLAogICAgICAgY29uc3RhbnRDcm9zc1NlY3Rp
b24sIHRlbXBWLCB0ZW1wTGVuICk7CiAgICAgIHRoZW9yZXRpY2FsS2luZXRpYyA9IDAuMDsKICAg
ICAgZm9yKCBpPTA7IGk8dGVtcExlbjsgKytpICkKICAgICAgewogICAgICAgIHBzZXVkb1BhcnRp
Y2xlWzZdLkxvcmVudHooICp0ZW1wVltpXSwgcHNldWRvUGFydGljbGVbNF0gKTsKICAgICAgICB0
aGVvcmV0aWNhbEtpbmV0aWMgKz0gcHNldWRvUGFydGljbGVbNl0uR2V0S2luZXRpY0VuZXJneSgp
L01lVjsKICAgICAgfQogICAgICAvLyBERUJVR0dJTkcgLS0+IER1bXBGcmFtZXM6OkR1bXBGcmFt
ZSh2ZWMsIHZlY0xlbik7CiAgICAgIC8vZGVsZXRlIFtdIHRlbXBSOwogICAgfQogICAgLy8KICAg
IC8vICBNYWtlIHN1cmUsIHRoYXQgdGhlIGtpbmV0aWMgZW5lcmdpZXMgYXJlIGNvcnJlY3QKICAg
IC8vCiAgICBpZiggc2ltdWxhdGVkS2luZXRpYyAhPSAwLjAgKQogICAgewogICAgICB3Z3QgPSB0
aGVvcmV0aWNhbEtpbmV0aWMvc2ltdWxhdGVkS2luZXRpYzsKICAgICAgdGhlb3JldGljYWxLaW5l
dGljID0gY3VycmVudFBhcnRpY2xlLkdldEtpbmV0aWNFbmVyZ3koKS9NZVYgKiB3Z3Q7CiAgICAg
IHNpbXVsYXRlZEtpbmV0aWMgPSB0aGVvcmV0aWNhbEtpbmV0aWM7CiAgICAgIGN1cnJlbnRQYXJ0
aWNsZS5TZXRLaW5ldGljRW5lcmd5KCB0aGVvcmV0aWNhbEtpbmV0aWMqTWVWICk7CiAgICAgIHBw
ID0gY3VycmVudFBhcnRpY2xlLkdldFRvdGFsTW9tZW50dW0oKS9NZVY7CiAgICAgIHBwMSA9IGN1
cnJlbnRQYXJ0aWNsZS5HZXRNb21lbnR1bSgpLm1hZygpL01lVjsKICAgICAgaWYoIHBwMSA8IDEu
MGUtNipHZVYgKQogICAgICB7CiAgICAgICAgcnRobnZlID0gcGkqRzRVbmlmb3JtUmFuZCgpOwog
ICAgICAgIHBoaW52ZSA9IHR3b3BpKkc0VW5pZm9ybVJhbmQoKTsKICAgICAgICBjdXJyZW50UGFy
dGljbGUuU2V0TW9tZW50dW0oIHBwKnNpbihydGhudmUpKmNvcyhwaGludmUpKk1lViwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwKnNpbihydGhudmUpKnNpbihwaGludmUp
Kk1lViwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwKmNvcyhydGhudmUp
Kk1lViApOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgewogICAgICAgIGN1cnJlbnRQYXJ0aWNs
ZS5TZXRNb21lbnR1bSggY3VycmVudFBhcnRpY2xlLkdldE1vbWVudHVtKCkgKiAocHAvcHAxKSAp
OwogICAgICB9CiAgICAgIHRoZW9yZXRpY2FsS2luZXRpYyA9IHRhcmdldFBhcnRpY2xlLkdldEtp
bmV0aWNFbmVyZ3koKS9NZVYgKiB3Z3Q7CiAgICAgIHRhcmdldFBhcnRpY2xlLlNldEtpbmV0aWNF
bmVyZ3koIHRoZW9yZXRpY2FsS2luZXRpYypNZVYgKTsKICAgICAgc2ltdWxhdGVkS2luZXRpYyAr
PSB0aGVvcmV0aWNhbEtpbmV0aWM7CiAgICAgIHBwID0gdGFyZ2V0UGFydGljbGUuR2V0VG90YWxN
b21lbnR1bSgpL01lVjsKICAgICAgcHAxID0gdGFyZ2V0UGFydGljbGUuR2V0TW9tZW50dW0oKS5t
YWcoKS9NZVY7CiAgICAgIC8vIERFQlVHR0lORyAtLT4gRHVtcEZyYW1lczo6RHVtcEZyYW1lKHZl
YywgdmVjTGVuKTsKICAgICAgaWYoIHBwMSA8IDEuMGUtNipHZVYgKQogICAgICB7CiAgICAgICAg
cnRobnZlID0gcGkqRzRVbmlmb3JtUmFuZCgpOwogICAgICAgIHBoaW52ZSA9IHR3b3BpKkc0VW5p
Zm9ybVJhbmQoKTsKICAgICAgICB0YXJnZXRQYXJ0aWNsZS5TZXRNb21lbnR1bSggcHAqc2luKHJ0
aG52ZSkqY29zKHBoaW52ZSkqTWVWLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwcCpzaW4ocnRobnZlKSpzaW4ocGhpbnZlKSpNZVYsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBwKmNvcyhydGhudmUpKk1lViApOwogICAgICB9IGVsc2UgewogICAgICAg
IHRhcmdldFBhcnRpY2xlLlNldE1vbWVudHVtKCB0YXJnZXRQYXJ0aWNsZS5HZXRNb21lbnR1bSgp
ICogKHBwL3BwMSkgKTsKICAgICAgfQogICAgICBmb3IoIGk9MDsgaTx2ZWNMZW47ICsraSApCiAg
ICAgIHsKICAgICAgICB0aGVvcmV0aWNhbEtpbmV0aWMgPSB2ZWNbaV0tPkdldEtpbmV0aWNFbmVy
Z3koKS9NZVYgKiB3Z3Q7CiAgICAgICAgc2ltdWxhdGVkS2luZXRpYyArPSB0aGVvcmV0aWNhbEtp
bmV0aWM7CiAgICAgICAgdmVjW2ldLT5TZXRLaW5ldGljRW5lcmd5KCB0aGVvcmV0aWNhbEtpbmV0
aWMqTWVWICk7CiAgICAgICAgcHAgPSB2ZWNbaV0tPkdldFRvdGFsTW9tZW50dW0oKS9NZVY7CiAg
ICAgICAgcHAxID0gdmVjW2ldLT5HZXRNb21lbnR1bSgpLm1hZygpL01lVjsKICAgICAgICBpZigg
cHAxIDwgMS4wZS02KkdlViApCiAgICAgICAgewogICAgICAgICAgcnRobnZlID0gcGkqRzRVbmlm
b3JtUmFuZCgpOwogICAgICAgICAgcGhpbnZlID0gdHdvcGkqRzRVbmlmb3JtUmFuZCgpOwogICAg
ICAgICAgdmVjW2ldLT5TZXRNb21lbnR1bSggcHAqc2luKHJ0aG52ZSkqY29zKHBoaW52ZSkqTWVW
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHAqc2luKHJ0aG52ZSkqc2luKHBoaW52
ZSkqTWVWLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHAqY29zKHJ0aG52ZSkqTWVW
ICk7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIHZlY1tpXS0+U2V0TW9tZW50dW0o
IHZlY1tpXS0+R2V0TW9tZW50dW0oKSAqIChwcC9wcDEpICk7CiAgICAgIH0KICAgIH0KICAgICAg
Ly8gREVCVUdHSU5HIC0tPiBEdW1wRnJhbWVzOjpEdW1wRnJhbWUodmVjLCB2ZWNMZW4pOwogICAg
Um90YXRlKCBudW1iZXJvZkZpbmFsU3RhdGVOdWNsZW9ucywgcHNldWRvUGFydGljbGVbM10uR2V0
TW9tZW50dW0oKSwKICAgICAgICAgICAgbW9kaWZpZWRPcmlnaW5hbCwgb3JpZ2luYWxJbmNpZGVu
dCwgdGFyZ2V0TnVjbGV1cywKICAgICAgICAgICAgY3VycmVudFBhcnRpY2xlLCB0YXJnZXRQYXJ0
aWNsZSwgdmVjLCB2ZWNMZW4gKTsKICAgICAgLy8gREVCVUdHSU5HIC0tPiBEdW1wRnJhbWVzOjpE
dW1wRnJhbWUodmVjLCB2ZWNMZW4pOwogICAgLy8KICAgIC8vIGFkZCBibGFjayB0cmFjayBwYXJ0
aWNsZXMKICAgIC8vIHRoZSB0b3RhbCBudW1iZXIgb2YgcGFydGljbGVzIHByb2R1Y2VkIGlzIHJl
c3RyaWN0ZWQgdG8gMTk4CiAgICAvLyB0aGlzIG1heSBoYXZlIGluZmx1ZW5jZSBvbiB2ZXJ5IGhp
Z2ggZW5lcmdpZXMKICAgIC8vCiAgICBpZiggYXRvbWljV2VpZ2h0ID49IDEuNSApCiAgICB7CiAg
ICAgIC8vIG5wbmIgaXMgbnVtYmVyIG9mIHByb3Rvbi9uZXV0cm9uIGJsYWNrIHRyYWNrIHBhcnRp
Y2xlcwogICAgICAvLyBuZHRhIGlzIHRoZSBudW1iZXIgb2YgZGV1dGVyb25zLCB0cml0b25zLCBh
bmQgYWxwaGFzIHByb2R1Y2VkCiAgICAgIC8vIGVwbmIgaXMgdGhlIGtpbmV0aWMgZW5lcmd5IGF2
YWlsYWJsZSBmb3IgcHJvdG9uL25ldXRyb24gYmxhY2sgdHJhY2sgcGFydGljbGVzCiAgICAgIC8v
IGVkdGEgaXMgdGhlIGtpbmV0aWMgZW5lcmd5IGF2YWlsYWJsZSBmb3IgZGV1dGVyb24vdHJpdG9u
L2FscGhhIHBhcnRpY2xlcwogICAgICAvLwogICAgICBHNGRvdWJsZSBlcG5iLCBlZHRhOwogICAg
ICBHNGludCBucG5iID0gMDsKICAgICAgRzRpbnQgbmR0YSA9IDA7CiAgICAgIAogICAgICBlcG5i
ID0gdGFyZ2V0TnVjbGV1cy5HZXRQTkJsYWNrVHJhY2tFbmVyZ3koKTsgICAgICAgICAgICAvLyB3
YXMgZW5wMSBpbiBmb3J0cmFuIGNvZGUKICAgICAgZWR0YSA9IHRhcmdldE51Y2xldXMuR2V0RFRB
QmxhY2tUcmFja0VuZXJneSgpOyAgICAgICAgICAgLy8gd2FzIGVucDMgaW4gZm9ydHJhbiBjb2Rl
CiAgICAgIGNvbnN0IEc0ZG91YmxlIHBuQ3V0T2ZmID0gMC4wMDE7CiAgICAgIGNvbnN0IEc0ZG91
YmxlIGR0YUN1dE9mZiA9IDAuMDAxOwogICAgICBjb25zdCBHNGRvdWJsZSBraW5ldGljTWluaW11
bSA9IDEuZS02OwogICAgICBjb25zdCBHNGRvdWJsZSBraW5ldGljRmFjdG9yID0gLTAuMDEwOwog
ICAgICBHNGRvdWJsZSBzcHJvYiA9IDAuMDsgLy8gc3Byb2IgPSBwcm9iYWJpbGl0eSBvZiBzZWxm
LWFic29ycHRpb24gaW4gaGVhdnkgbW9sZWN1bGVzCiAgICAgIGNvbnN0IEc0ZG91YmxlIGVrSW5j
aWRlbnQgPSBvcmlnaW5hbEluY2lkZW50LT5HZXRLaW5ldGljRW5lcmd5KCkvR2VWOwogICAgICBp
ZiggZWtJbmNpZGVudCA+PSA1LjAgKXNwcm9iID0gRzRzdGQ6Om1pbiggMS4wLCAwLjYqbG9nKGVr
SW5jaWRlbnQtNC4wKSApOwogICAgICBpZiggZXBuYiA+PSBwbkN1dE9mZiApCiAgICAgIHsKICAg
ICAgICBucG5iID0gUG9pc3NvbigoMS41KzEuMjUqbnVtYmVyb2ZGaW5hbFN0YXRlTnVjbGVvbnMp
KmVwbmIvKGVwbmIrZWR0YSkpOwogICAgICAgIGlmKCBudW1iZXJvZkZpbmFsU3RhdGVOdWNsZW9u
cyArIG5wbmIgPiBhdG9taWNXZWlnaHQgKQogICAgICAgICAgbnBuYiA9IEc0aW50KGF0b21pY1dl
aWdodCswLjAwMDAxIC0gbnVtYmVyb2ZGaW5hbFN0YXRlTnVjbGVvbnMpOwogICAgICAgIG5wbmIg
PSBHNHN0ZDo6bWluKCBucG5iLCAxMjctdmVjTGVuICk7CiAgICAgIH0KICAgICAgaWYoIGVkdGEg
Pj0gZHRhQ3V0T2ZmICkKICAgICAgewogICAgICAgIG5kdGEgPSBQb2lzc29uKCAoMS41KzEuMjUq
bnVtYmVyb2ZGaW5hbFN0YXRlTnVjbGVvbnMpKmVkdGEvKGVwbmIrZWR0YSkgKTsKICAgICAgICBu
ZHRhID0gRzRzdGQ6Om1pbiggbmR0YSwgMTI3LXZlY0xlbiApOwogICAgICB9CiAgICAgIEc0ZG91
YmxlIHNwYWxsID0gbnVtYmVyb2ZGaW5hbFN0YXRlTnVjbGVvbnM7CiAgICAgIC8vIERFQlVHR0lO
RyAtLT4gRHVtcEZyYW1lczo6RHVtcEZyYW1lKHZlYywgdmVjTGVuKTsKICAgICAgQWRkQmxhY2tU
cmFja1BhcnRpY2xlcyggZXBuYiwgbnBuYiwgZWR0YSwgbmR0YSwgc3Byb2IsIGtpbmV0aWNNaW5p
bXVtLCBraW5ldGljRmFjdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVk
T3JpZ2luYWwsIHNwYWxsLCB0YXJnZXROdWNsZXVzLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2ZWMsIHZlY0xlbiApOwogICAgICAvLyBERUJVR0dJTkcgLS0+IER1bXBGcmFtZXM6OkR1
bXBGcmFtZSh2ZWMsIHZlY0xlbik7CiAgICB9CiAgICBpZiggY2VudGVyb2ZtYXNzRW5lcmd5IDw9
ICg0LjArRzRVbmlmb3JtUmFuZCgpKSApCiAgICAgIE1vbWVudHVtQ2hlY2soIG1vZGlmaWVkT3Jp
Z2luYWwsIGN1cnJlbnRQYXJ0aWNsZSwgdGFyZ2V0UGFydGljbGUsIHZlYywgdmVjTGVuICk7CiAg
ICAvLwogICAgLy8gIGNhbGN1bGF0ZSB0aW1lIGRlbGF5IGZvciBudWNsZWFyIHJlYWN0aW9ucwog
ICAgLy8KICAgIGlmKCAoYXRvbWljV2VpZ2h0ID49IDEuNSkgJiYgKGF0b21pY1dlaWdodCA8PSAy
MzAuMCkgJiYgKGVrT3JpZ2luYWwgPD0gMC4yKSApCiAgICAgIGN1cnJlbnRQYXJ0aWNsZS5TZXRU
T0YoIDEuMC01MDAuMCpleHAoLWVrT3JpZ2luYWwvMC4wNCkqbG9nKEc0VW5pZm9ybVJhbmQoKSkg
KTsKICAgIGVsc2UKICAgICAgY3VycmVudFBhcnRpY2xlLlNldFRPRiggMS4wICk7CiAgICByZXR1
cm4gdHJ1ZTsKICAgICAgLy8gREVCVUdHSU5HIC0tPiBEdW1wRnJhbWVzOjpEdW1wRnJhbWUodmVj
LCB2ZWNMZW4pOwogIH0KIAogdm9pZCBHNFJlYWN0aW9uRHluYW1pY3M6OlN1cHByZXNzQ2hhcmdl
ZFBpb25zKAogICBHNEZhc3RWZWN0b3I8RzRSZWFjdGlvblByb2R1Y3QsMTI4PiAmdmVjLAogICBH
NGludCAmdmVjTGVuLAogICBjb25zdCBHNFJlYWN0aW9uUHJvZHVjdCAmbW9kaWZpZWRPcmlnaW5h
bCwKICAgRzRSZWFjdGlvblByb2R1Y3QgJmN1cnJlbnRQYXJ0aWNsZSwKICAgRzRSZWFjdGlvblBy
b2R1Y3QgJnRhcmdldFBhcnRpY2xlLAogICBjb25zdCBHNE51Y2xldXMgJnRhcmdldE51Y2xldXMs
CiAgIEc0Ym9vbCAmaW5jaWRlbnRIYXNDaGFuZ2VkLAogICBHNGJvb2wgJnRhcmdldEhhc0NoYW5n
ZWQgKQogIHsKICAgIC8vIHRoaXMgY29kZSB3YXMgb3JpZ2luYWxseSBpbiB0aGUgZm9ydHJhbiBj
b2RlIFRXT0NMVQogICAgLy8KICAgIC8vIHN1cHByZXNzIGNoYXJnZWQgcGlvbnMsIGZvciB2YXJp
b3VzIHJlYXNvbnMKICAgIC8vCiAgICBjb25zdCBHNGRvdWJsZSBhdG9taWNXZWlnaHQgPSB0YXJn
ZXROdWNsZXVzLkdldE4oKTsKICAgIGNvbnN0IEc0ZG91YmxlIGF0b21pY051bWJlciA9IHRhcmdl
dE51Y2xldXMuR2V0WigpOwogICAgY29uc3QgRzRkb3VibGUgcE9yaWdpbmFsID0gbW9kaWZpZWRP
cmlnaW5hbC5HZXRUb3RhbE1vbWVudHVtKCkvR2VWOwogICAgCiAgICAvLyBHNFBhcnRpY2xlRGVm
aW5pdGlvbiAqYUdhbW1hID0gRzRHYW1tYTo6R2FtbWEoKTsKICAgIEc0UGFydGljbGVEZWZpbml0
aW9uICphUHJvdG9uID0gRzRQcm90b246OlByb3RvbigpOwogICAgRzRQYXJ0aWNsZURlZmluaXRp
b24gKmFuQW50aVByb3RvbiA9IEc0QW50aVByb3Rvbjo6QW50aVByb3RvbigpOwogICAgRzRQYXJ0
aWNsZURlZmluaXRpb24gKmFOZXV0cm9uID0gRzROZXV0cm9uOjpOZXV0cm9uKCk7CiAgICBHNFBh
cnRpY2xlRGVmaW5pdGlvbiAqYW5BbnRpTmV1dHJvbiA9IEc0QW50aU5ldXRyb246OkFudGlOZXV0
cm9uKCk7CiAgICBHNFBhcnRpY2xlRGVmaW5pdGlvbiAqYVBpTWludXMgPSBHNFBpb25NaW51czo6
UGlvbk1pbnVzKCk7CiAgICBHNFBhcnRpY2xlRGVmaW5pdGlvbiAqYVBpUGx1cyA9IEc0UGlvblBs
dXM6OlBpb25QbHVzKCk7CiAgICAKICAgIGNvbnN0IEc0Ym9vbCBhbnRpVGVzdCA9CiAgICAgIG1v
ZGlmaWVkT3JpZ2luYWwuR2V0RGVmaW5pdGlvbigpICE9IGFuQW50aVByb3RvbiAmJgogICAgICBt
b2RpZmllZE9yaWdpbmFsLkdldERlZmluaXRpb24oKSAhPSBhbkFudGlOZXV0cm9uOwogICAgaWYo
IGFudGlUZXN0ICYmICgKICAgICAgIC8vIGN1cnJlbnRQYXJ0aWNsZS5HZXREZWZpbml0aW9uKCkg
PT0gYUdhbW1hIHx8CiAgICAgICAgICBjdXJyZW50UGFydGljbGUuR2V0RGVmaW5pdGlvbigpID09
IGFQaVBsdXMgfHwKICAgICAgICAgIGN1cnJlbnRQYXJ0aWNsZS5HZXREZWZpbml0aW9uKCkgPT0g
YVBpTWludXMgKSAmJgogICAgICAgICggRzRVbmlmb3JtUmFuZCgpIDw9ICgxMC4wLXBPcmlnaW5h
bCkvNi4wICkgJiYKICAgICAgICAoIEc0VW5pZm9ybVJhbmQoKSA8PSBhdG9taWNXZWlnaHQvMzAw
LjAgKSApCiAgICB7CiAgICAgIGlmKCBHNFVuaWZvcm1SYW5kKCkgPiBhdG9taWNOdW1iZXIvYXRv
bWljV2VpZ2h0ICkKICAgICAgICBjdXJyZW50UGFydGljbGUuU2V0RGVmaW5pdGlvbkFuZFVwZGF0
ZUUoIGFOZXV0cm9uICk7CiAgICAgIGVsc2UKICAgICAgICBjdXJyZW50UGFydGljbGUuU2V0RGVm
aW5pdGlvbkFuZFVwZGF0ZUUoIGFQcm90b24gKTsKICAgICAgaW5jaWRlbnRIYXNDaGFuZ2VkID0g
dHJ1ZTsKICAgIH0KICAgIGlmKCBhbnRpVGVzdCAmJiAoCiAgICAgICAvLyB0YXJnZXRQYXJ0aWNs
ZS5HZXREZWZpbml0aW9uKCkgPT0gYUdhbW1hIHx8CiAgICAgICAgICB0YXJnZXRQYXJ0aWNsZS5H
ZXREZWZpbml0aW9uKCkgPT0gYVBpUGx1cyB8fAogICAgICAgICAgdGFyZ2V0UGFydGljbGUuR2V0
RGVmaW5pdGlvbigpID09IGFQaU1pbnVzICkgJiYKICAgICAgICAoIEc0VW5pZm9ybVJhbmQoKSA8
PSAoMTAuMC1wT3JpZ2luYWwpLzYuMCApICYmCiAgICAgICAgKCBHNFVuaWZvcm1SYW5kKCkgPD0g
YXRvbWljV2VpZ2h0LzMwMC4wICkgKQogICAgewogICAgICBpZiggRzRVbmlmb3JtUmFuZCgpID4g
YXRvbWljTnVtYmVyL2F0b21pY1dlaWdodCApCiAgICAgICAgdGFyZ2V0UGFydGljbGUuU2V0RGVm
aW5pdGlvbkFuZFVwZGF0ZUUoIGFOZXV0cm9uICk7CiAgICAgIGVsc2UKICAgICAgICB0YXJnZXRQ
YXJ0aWNsZS5TZXREZWZpbml0aW9uQW5kVXBkYXRlRSggYVByb3RvbiApOwogICAgICB0YXJnZXRI
YXNDaGFuZ2VkID0gdHJ1ZTsKICAgIH0KICAgICAgLy8gREVCVUdHSU5HIC0tPiBEdW1wRnJhbWVz
OjpEdW1wRnJhbWUodmVjLCB2ZWNMZW4pOwogICAgZm9yKCBHNGludCBpPTA7IGk8dmVjTGVuOyAr
K2kgKQogICAgewogICAgICBpZiggYW50aVRlc3QgJiYgKAogICAgICAgICAvLyB2ZWNbaV0tPkdl
dERlZmluaXRpb24oKSA9PSBhR2FtbWEgfHwKICAgICAgICAgICAgdmVjW2ldLT5HZXREZWZpbml0
aW9uKCkgPT0gYVBpUGx1cyB8fAogICAgICAgICAgICB2ZWNbaV0tPkdldERlZmluaXRpb24oKSA9
PSBhUGlNaW51cyApICYmCiAgICAgICAgICAoIEc0VW5pZm9ybVJhbmQoKSA8PSAoMTAuMC1wT3Jp
Z2luYWwpLzYuMCApICYmCiAgICAgICAgICAoIEc0VW5pZm9ybVJhbmQoKSA8PSBhdG9taWNXZWln
aHQvMzAwLjAgKSApCiAgICAgIHsKICAgICAgICBpZiggRzRVbmlmb3JtUmFuZCgpID4gYXRvbWlj
TnVtYmVyL2F0b21pY1dlaWdodCApCiAgICAgICAgICB2ZWNbaV0tPlNldERlZmluaXRpb25BbmRV
cGRhdGVFKCBhTmV1dHJvbiApOwogICAgICAgIGVsc2UKICAgICAgICAgIHZlY1tpXS0+U2V0RGVm
aW5pdGlvbkFuZFVwZGF0ZUUoIGFQcm90b24gKTsKICAgICAgLy8gREVCVUdHSU5HIC0tPiBEdW1w
RnJhbWVzOjpEdW1wRnJhbWUodmVjLCB2ZWNMZW4pOwogICAgICB9CiAgICB9CiAgICAgIC8vIERF
QlVHR0lORyAtLT4gRHVtcEZyYW1lczo6RHVtcEZyYW1lKHZlYywgdmVjTGVuKTsKICB9CiAKIEc0
Ym9vbCBHNFJlYWN0aW9uRHluYW1pY3M6OlR3b0NsdXN0ZXIoCiAgIEc0RmFzdFZlY3RvcjxHNFJl
YWN0aW9uUHJvZHVjdCwxMjg+ICZ2ZWMsCiAgIEc0aW50ICZ2ZWNMZW4sCiAgIEc0UmVhY3Rpb25Q
cm9kdWN0ICZtb2RpZmllZE9yaWdpbmFsLCAvLyBGZXJtaSBtb3Rpb24gJiBldmFwLiBlZmZlY3Rz
IGluY2x1ZGVkCiAgIGNvbnN0IEc0RHluYW1pY1BhcnRpY2xlICpvcmlnaW5hbEluY2lkZW50LCAv
LyB0aGUgb3JpZ2luYWwgaW5jaWRlbnQgcGFydGljbGUKICAgRzRSZWFjdGlvblByb2R1Y3QgJmN1
cnJlbnRQYXJ0aWNsZSwKICAgRzRSZWFjdGlvblByb2R1Y3QgJnRhcmdldFBhcnRpY2xlLAogICBj
b25zdCBHNE51Y2xldXMgJnRhcmdldE51Y2xldXMsCiAgIEc0Ym9vbCAmaW5jaWRlbnRIYXNDaGFu
Z2VkLAogICBHNGJvb2wgJnRhcmdldEhhc0NoYW5nZWQsCiAgIEc0Ym9vbCBsZWFkRmxhZywKICAg
RzRSZWFjdGlvblByb2R1Y3QgJmxlYWRpbmdTdHJhbmdlUGFydGljbGUgKQogIHsKICAgICAgLy8g
REVCVUdHSU5HIC0tPiBEdW1wRnJhbWVzOjpEdW1wRnJhbWUodmVjLCB2ZWNMZW4pOwogICAgLy8g
ZGVyaXZlZCBmcm9tIG9yaWdpbmFsIEZPUlRSQU4gY29kZSBUV09DTFUgYnkgSC4gRmVzZWZlbGR0
ICgxMS1PY3QtMTk4NykKICAgIC8vCiAgICAvLyAgR2VuZXJhdGlvbiBvZiBYLSBhbmQgUFQtIHZh
bHVlcyBmb3IgaW5jaWRlbnQsIHRhcmdldCwgYW5kIGFsbCBzZWNvbmRhcnkgcGFydGljbGVzIAog
ICAgLy8gIAogICAgLy8gIEEgc2ltcGxlIHR3byBjbHVzdGVyIG1vZGVsIGlzIHVzZWQuCiAgICAv
LyAgVGhpcyBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgbG93IGVuZXJneSBpbnRlcmFjdGlvbnMu
CiAgICAvLwogICAgRzRpbnQgaTsKICAgIEc0UGFydGljbGVEZWZpbml0aW9uICphUGlNaW51cyA9
IEc0UGlvbk1pbnVzOjpQaW9uTWludXMoKTsKICAgIEc0UGFydGljbGVEZWZpbml0aW9uICphUHJv
dG9uID0gRzRQcm90b246OlByb3RvbigpOwogICAgRzRQYXJ0aWNsZURlZmluaXRpb24gKmFOZXV0
cm9uID0gRzROZXV0cm9uOjpOZXV0cm9uKCk7CiAgICBHNFBhcnRpY2xlRGVmaW5pdGlvbiAqYVBp
UGx1cyA9IEc0UGlvblBsdXM6OlBpb25QbHVzKCk7CiAgICBHNFBhcnRpY2xlRGVmaW5pdGlvbiAq
YVBpWmVybyA9IEc0UGlvblplcm86OlBpb25aZXJvKCk7CiAgICBjb25zdCBHNGRvdWJsZSBwcm90
b25NYXNzID0gYVByb3Rvbi0+R2V0UERHTWFzcygpL01lVjsKICAgIGNvbnN0IEc0ZG91YmxlIGVr
T3JpZ2luYWwgPSBtb2RpZmllZE9yaWdpbmFsLkdldEtpbmV0aWNFbmVyZ3koKS9HZVY7CiAgICBj
b25zdCBHNGRvdWJsZSBldE9yaWdpbmFsID0gbW9kaWZpZWRPcmlnaW5hbC5HZXRUb3RhbEVuZXJn
eSgpL0dlVjsKICAgIGNvbnN0IEc0ZG91YmxlIG1PcmlnaW5hbCA9IG1vZGlmaWVkT3JpZ2luYWwu
R2V0TWFzcygpL0dlVjsKICAgIGNvbnN0IEc0ZG91YmxlIHBPcmlnaW5hbCA9IG1vZGlmaWVkT3Jp
Z2luYWwuR2V0TW9tZW50dW0oKS5tYWcoKS9HZVY7CiAgICBHNGRvdWJsZSB0YXJnZXRNYXNzID0g
dGFyZ2V0UGFydGljbGUuR2V0RGVmaW5pdGlvbigpLT5HZXRQREdNYXNzKCkvR2VWOwogICAgRzRk
b3VibGUgY2VudGVyb2ZtYXNzRW5lcmd5ID0gc3FydCggbU9yaWdpbmFsKm1PcmlnaW5hbCArCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRNYXNzKnRhcmdldE1h
c3MgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMi4wKnRhcmdldE1h
c3MqZXRPcmlnaW5hbCApOyAgLy8gR2VWCiAgICBHNGRvdWJsZSBjdXJyZW50TWFzcyA9IGN1cnJl
bnRQYXJ0aWNsZS5HZXRNYXNzKCkvR2VWOwogICAgdGFyZ2V0TWFzcyA9IHRhcmdldFBhcnRpY2xl
LkdldE1hc3MoKS9HZVY7CiAgICBpZiggY3VycmVudE1hc3MgPT0gMC4wICYmIHRhcmdldE1hc3Mg
PT0gMC4wICkKICAgIHsKICAgICAgRzRkb3VibGUgZWsgPSBjdXJyZW50UGFydGljbGUuR2V0S2lu
ZXRpY0VuZXJneSgpOwogICAgICBHNFRocmVlVmVjdG9yIG0gPSBjdXJyZW50UGFydGljbGUuR2V0
TW9tZW50dW0oKTsKICAgICAgY3VycmVudFBhcnRpY2xlID0gKnZlY1swXTsKICAgICAgdGFyZ2V0
UGFydGljbGUgPSAqdmVjWzFdOwogICAgICBmb3IoIGk9MDsgaTwodmVjTGVuLTIpOyArK2kgKSp2
ZWNbaV0gPSAqdmVjW2krMl07CiAgICAgIGlmKHZlY0xlbjwyKSBHNEV4Y2VwdGlvbigiRzRSZWFj
dGlvbkR5bmFtaWNzOjpUd29DbHVzdGVyOiBOZWdhdGl2ZSBudW1iZXIgb2YgcGFydGljbGVzIik7
CiAgICAgIGRlbGV0ZSB2ZWNbdmVjTGVuLTFdOwogICAgICBkZWxldGUgdmVjW3ZlY0xlbi0yXTsK
ICAgICAgdmVjTGVuIC09IDI7CiAgICAgIGN1cnJlbnRNYXNzID0gY3VycmVudFBhcnRpY2xlLkdl
dE1hc3MoKS9HZVY7CiAgICAgIHRhcmdldE1hc3MgPSB0YXJnZXRQYXJ0aWNsZS5HZXRNYXNzKCkv
R2VWOwogICAgICBpbmNpZGVudEhhc0NoYW5nZWQgPSB0cnVlOwogICAgICB0YXJnZXRIYXNDaGFu
Z2VkID0gdHJ1ZTsKICAgICAgY3VycmVudFBhcnRpY2xlLlNldEtpbmV0aWNFbmVyZ3koIGVrICk7
CiAgICAgIGN1cnJlbnRQYXJ0aWNsZS5TZXRNb21lbnR1bSggbSApOwogICAgfQogICAgY29uc3Qg
RzRkb3VibGUgYXRvbWljV2VpZ2h0ID0gdGFyZ2V0TnVjbGV1cy5HZXROKCk7CiAgICBjb25zdCBH
NGRvdWJsZSBhdG9taWNOdW1iZXIgPSB0YXJnZXROdWNsZXVzLkdldFooKTsKICAgIC8vCiAgICAv
LyBwYXJ0aWNsZXMgaGF2ZSBiZWVuIGRpc3RyaWJ1dGVkIGluIGZvcndhcmQgYW5kIGJhY2t3YXJk
IGhlbWlzcGhlcmVzCiAgICAvLyBpbiBjZW50ZXIgb2YgbWFzcyBzeXN0ZW0gb2YgdGhlIGhhZHJv
biBudWNsZW9uIGludGVyYWN0aW9uCiAgICAvLwogICAgLy8gaW5jaWRlbnQgaXMgYWx3YXlzIGlu
IGZvcndhcmQgaGVtaXNwaGVyZQogICAgRzRpbnQgZm9yd2FyZENvdW50ID0gMTsgICAgICAgICAg
ICAvLyBudW1iZXIgb2YgcGFydGljbGVzIGluIGZvcndhcmQgaGVtaXNwaGVyZQogICAgY3VycmVu
dFBhcnRpY2xlLlNldFNpZGUoIDEgKTsKICAgIEc0ZG91YmxlIGZvcndhcmRNYXNzID0gY3VycmVu
dFBhcnRpY2xlLkdldE1hc3MoKS9HZVY7CiAgICAKICAgIC8vIHRhcmdldCBpcyBhbHdheXMgaW4g
YmFja3dhcmQgaGVtaXNwaGVyZQogICAgRzRpbnQgYmFja3dhcmRDb3VudCA9IDE7ICAgICAgICAg
ICAvLyBudW1iZXIgb2YgcGFydGljbGVzIGluIGJhY2t3YXJkIGhlbWlzcGhlcmUKICAgIEc0aW50
IGJhY2t3YXJkTnVjbGVvbkNvdW50ID0gMTsgICAgLy8gbnVtYmVyIG9mIG51Y2xlb25zIGluIGJh
Y2t3YXJkIGhlbWlzcGhlcmUKICAgIHRhcmdldFBhcnRpY2xlLlNldFNpZGUoIC0xICk7CiAgICBH
NGRvdWJsZSBiYWNrd2FyZE1hc3MgPSB0YXJnZXRQYXJ0aWNsZS5HZXRNYXNzKCkvR2VWOwogICAg
CiAgICBmb3IoIGk9MDsgaTx2ZWNMZW47ICsraSApCiAgICB7CiAgICAgIGlmKCB2ZWNbaV0tPkdl
dFNpZGUoKSA8IDAgKXZlY1tpXS0+U2V0U2lkZSggLTEgKTsgLy8gYWRkZWQgYnkgSkxDLCAySnVs
OTcKICAgICAgLy8gdG8gdGFrZSBjYXJlIG9mIHRoZSBjYXNlIHdoZXJlIHZlYyBoYXMgYmVlbiBw
cmVwcm9jZXNzZWQgYnkgR2VuZXJhdGVYYW5kUHQKICAgICAgLy8gYW5kIHNvbWUgb2YgdGhlbSBo
YXZlIGJlZW4gc2V0IHRvIC0yIG9yIC0zCiAgICAgIGlmKCB2ZWNbaV0tPkdldFNpZGUoKSA9PSAt
MSApCiAgICAgIHsKICAgICAgICArK2JhY2t3YXJkQ291bnQ7CiAgICAgICAgYmFja3dhcmRNYXNz
ICs9IHZlY1tpXS0+R2V0TWFzcygpL0dlVjsKICAgICAgfQogICAgICBlbHNlCiAgICAgIHsKICAg
ICAgICArK2ZvcndhcmRDb3VudDsKICAgICAgICBmb3J3YXJkTWFzcyArPSB2ZWNbaV0tPkdldE1h
c3MoKS9HZVY7CiAgICAgIH0KICAgIH0KICAgIC8vCiAgICAvLyBudWNsZW9ucyBhbmQgc29tZSBw
aW9ucyBmcm9tIGludHJhbnVjbGVhciBjYXNjYWRlCiAgICAvLwogICAgRzRkb3VibGUgdGVybTEg
PSBsb2coY2VudGVyb2ZtYXNzRW5lcmd5KmNlbnRlcm9mbWFzc0VuZXJneSk7CiAgICBpZih0ZXJt
MSA8IDApIHRlcm0xID0gMC4wMDAxOyAvLyBtYWtpbmcgc3VyZSB4dGFyZzwwOwogICAgY29uc3Qg
RzRkb3VibGUgYWZjID0gMC4zMTIgKyAwLjIgKiBsb2codGVybTEpOwogICAgRzRkb3VibGUgeHRh
cmc7CiAgICBpZiggY2VudGVyb2ZtYXNzRW5lcmd5IDwgMi4wK0c0VW5pZm9ybVJhbmQoKSApICAg
ICAgICAvLyBhZGRlZCArMiBiZWxvdywgSkxDIDRKdWw5NwogICAgICB4dGFyZyA9IGFmYyAqIChw
b3coYXRvbWljV2VpZ2h0LDAuMzMpLTEuMCkgKiAoMipiYWNrd2FyZENvdW50K3ZlY0xlbisyKS8y
LjA7CiAgICBlbHNlCiAgICAgIHh0YXJnID0gYWZjICogKHBvdyhhdG9taWNXZWlnaHQsMC4zMykt
MS4wKSAqICgyKmJhY2t3YXJkQ291bnQpOwogICAgaWYoIHh0YXJnIDw9IDAuMCApeHRhcmcgPSAw
LjAxOwogICAgRzRpbnQgbnVjbGVhckV4Y2l0YXRpb25Db3VudCA9IFBvaXNzb24oIHh0YXJnICk7
CiAgICBHNGludCBleHRyYU51Y2xlb25Db3VudCA9IDA7CiAgICBHNGRvdWJsZSBleHRyYU1hc3Mg
PSAwLjA7CiAgICBHNGRvdWJsZSBleHRyYU51Y2xlb25NYXNzID0gMC4wOwogICAgaWYoIG51Y2xl
YXJFeGNpdGF0aW9uQ291bnQgPiAwICkKICAgIHsKICAgICAgRzRpbnQgbW9tZW50dW1CaW4gPSBH
NHN0ZDo6bWluKCA0LCBHNGludChwT3JpZ2luYWwvMy4wKSApOyAgICAgCiAgICAgIGNvbnN0IEc0
ZG91YmxlIG51Y3N1cFtdID0geyAxLjAsIDAuOCwgMC42LCAwLjUsIDAuNCB9OwogICAgICAvLwog
ICAgICAvLyAgTk9URTogaW4gVFdPQ0xVLCB0aGVzZSBuZXcgcGFydGljbGVzIHdlcmUgZ2l2ZW4g
bmVnYXRpdmUgY29kZXMKICAgICAgLy8gICAgICAgIGhlcmUgd2UgdXNlICBOZXdseUFkZGVkID0g
dHJ1ZSAgaW5zdGVhZAogICAgICAvLwovLyAgICAgIEc0UmVhY3Rpb25Qcm9kdWN0ICpwVmVjID0g
bmV3IEc0UmVhY3Rpb25Qcm9kdWN0IFtudWNsZWFyRXhjaXRhdGlvbkNvdW50XTsKICAgICAgZm9y
KCBpPTA7IGk8bnVjbGVhckV4Y2l0YXRpb25Db3VudDsgKytpICkKICAgICAgewogICAgICAgIEc0
UmVhY3Rpb25Qcm9kdWN0KiBwVmVjID0gbmV3IEc0UmVhY3Rpb25Qcm9kdWN0KCk7CiAgICAgICAg
aWYoIEc0VW5pZm9ybVJhbmQoKSA8IG51Y3N1cFttb21lbnR1bUJpbl0gKSAgLy8gYWRkIHByb3Rv
biBvciBuZXV0cm9uCiAgICAgICAgewogICAgICAgICAgaWYoIEc0VW5pZm9ybVJhbmQoKSA+IDEu
MC1hdG9taWNOdW1iZXIvYXRvbWljV2VpZ2h0ICkKICAgICAgICAgICAgLy8gSFBXOiBsb29rcyBs
aWtlIGEgZ2hlaXNoYSBidWcgCiAgICAgICAgICAgIHBWZWMtPlNldERlZmluaXRpb24oIGFQcm90
b24gKTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgcFZlYy0+U2V0RGVmaW5pdGlvbiggYU5l
dXRyb24gKTsKICAgICAgICAgICsrYmFja3dhcmROdWNsZW9uQ291bnQ7CiAgICAgICAgICArK2V4
dHJhTnVjbGVvbkNvdW50OwogICAgICAgICAgZXh0cmFOdWNsZW9uTWFzcyArPSBwVmVjLT5HZXRN
YXNzKCkvR2VWOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgeyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFkZCBhIHBpb24KICAgICAgICAgIEc0ZG91Ymxl
IHJhbiA9IEc0VW5pZm9ybVJhbmQoKTsKICAgICAgICAgIGlmKCByYW4gPCAwLjMxMiApCiAgICAg
ICAgICAgIHBWZWMtPlNldERlZmluaXRpb24oIGFQaVBsdXMgKTsKICAgICAgICAgIGVsc2UgaWYo
IHJhbiA8IDAuNjg4ICkKICAgICAgICAgICAgcFZlYy0+U2V0RGVmaW5pdGlvbiggYVBpWmVybyAp
OwogICAgICAgICAgZWxzZQogICAgICAgICAgICBwVmVjLT5TZXREZWZpbml0aW9uKCBhUGlNaW51
cyApOwogICAgICAgIH0KICAgICAgICBwVmVjLT5TZXRTaWRlKCAtMiApOyAgICAvLyBiYWNrc2lk
ZSBwYXJ0aWNsZQogICAgICAgIGV4dHJhTWFzcyArPSBwVmVjLT5HZXRNYXNzKCkvR2VWOwogICAg
ICAgIHBWZWMtPlNldE5ld2x5QWRkZWQoIHRydWUgKTsKICAgICAgICB2ZWMuU2V0RWxlbWVudCgg
dmVjTGVuKyssIHBWZWMgKTsKICAgICAgICAvLyBERUJVR0dJTkcgLS0+IER1bXBGcmFtZXM6OkR1
bXBGcmFtZSh2ZWMsIHZlY0xlbik7CiAgICAgIH0KICAgIH0KICAgICAgLy8gREVCVUdHSU5HIC0t
PiBEdW1wRnJhbWVzOjpEdW1wRnJhbWUodmVjLCB2ZWNMZW4pOwogICAgRzRkb3VibGUgZm9yd2Fy
ZEVuZXJneSA9IGNlbnRlcm9mbWFzc0VuZXJneS8yLjAgLSBmb3J3YXJkTWFzczsKICAgIEc0ZG91
YmxlIGJhY2t3YXJkRW5lcmd5ID0gY2VudGVyb2ZtYXNzRW5lcmd5LzIuMCAtIGJhY2t3YXJkTWFz
czsKICAgIEc0ZG91YmxlIGVBdmFpbGFibGUgPSBjZW50ZXJvZm1hc3NFbmVyZ3kgLSAoZm9yd2Fy
ZE1hc3MrYmFja3dhcmRNYXNzKTsKICAgIEc0Ym9vbCBzZWNvbmRhcnlEZWxldGVkOwogICAgRzRk
b3VibGUgcE1hc3M7CiAgICB3aGlsZSggZUF2YWlsYWJsZSA8PSAwLjAgKSAgIC8vIG11c3QgZWxp
bWluYXRlIGEgcGFydGljbGUKICAgIHsKICAgICAgc2Vjb25kYXJ5RGVsZXRlZCA9IGZhbHNlOwog
ICAgICBmb3IoIGk9KHZlY0xlbi0xKTsgaT49MDsgLS1pICkKICAgICAgewogICAgICAgIGlmKCB2
ZWNbaV0tPkdldFNpZGUoKSA9PSAxICkKICAgICAgICB7CiAgICAgICAgICBwTWFzcyA9IHZlY1tp
XS0+R2V0TWFzcygpL0dlVjsKICAgICAgICAgIGZvciggRzRpbnQgaj1pOyBqPCh2ZWNMZW4tMSk7
ICsraiApKnZlY1tqXSA9ICp2ZWNbaisxXTsgICAgIC8vIHNoaWZ0IHVwCiAgICAgICAgICAtLWZv
cndhcmRDb3VudDsKICAgICAgICAgIGZvcndhcmRFbmVyZ3kgKz0gcE1hc3M7CiAgICAgICAgICBm
b3J3YXJkTWFzcyAtPSBwTWFzczsKICAgICAgICAgIHNlY29uZGFyeURlbGV0ZWQgPSB0cnVlOwog
ICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYoIHZlY1tpXS0+R2V0U2lk
ZSgpID09IC0xICkKICAgICAgICB7CiAgICAgICAgICBwTWFzcyA9IHZlY1tpXS0+R2V0TWFzcygp
L0dlVjsKICAgICAgICAgIGZvciggRzRpbnQgaj1pOyBqPCh2ZWNMZW4tMSk7ICsraiApKnZlY1tq
XSA9ICp2ZWNbaisxXTsgICAgLy8gc2hpZnQgdXAKICAgICAgICAgIC0tYmFja3dhcmRDb3VudDsK
ICAgICAgICAgIGJhY2t3YXJkRW5lcmd5ICs9IHBNYXNzOwogICAgICAgICAgYmFja3dhcmRNYXNz
IC09IHBNYXNzOwogICAgICAgICAgc2Vjb25kYXJ5RGVsZXRlZCA9IHRydWU7CiAgICAgICAgICBi
cmVhazsKICAgICAgICB9CiAgICAgIH0gICAgICAgICAgIC8vIGJyZWFrcyBnbyBkb3duIHRvIGhl
cmUKICAgICAgaWYoIHNlY29uZGFyeURlbGV0ZWQgKQogICAgICB7ICAgICAgCiAgICAgICAgRzRS
ZWFjdGlvblByb2R1Y3QgKnRlbXAgPSB2ZWNbdmVjTGVuLTFdOwogICAgICAgIGRlbGV0ZSB0ZW1w
OwogICAgICAgIC0tdmVjTGVuOwogICAgICAgIC8vIERFQlVHR0lORyAtLT4gRHVtcEZyYW1lczo6
RHVtcEZyYW1lKHZlYywgdmVjTGVuKTsKICAgICAgfQogICAgICBlbHNlCiAgICAgIHsKICAgICAg
ICBpZiggdmVjTGVuID09IDAgKQoJewoJICByZXR1cm4gZmFsc2U7ICAvLyBhbGwgc2Vjb25kYXJp
ZXMgaGF2ZSBiZWVuIGVsaW1pbmF0ZWQKCX0KICAgICAgICBpZiggdGFyZ2V0UGFydGljbGUuR2V0
U2lkZSgpID09IC0xICkKICAgICAgICB7CiAgICAgICAgICBwTWFzcyA9IHRhcmdldFBhcnRpY2xl
LkdldE1hc3MoKS9HZVY7CiAgICAgICAgICB0YXJnZXRQYXJ0aWNsZSA9ICp2ZWNbMF07CiAgICAg
ICAgICBmb3IoIEc0aW50IGo9MDsgajwodmVjTGVuLTEpOyArK2ogKSp2ZWNbal0gPSAqdmVjW2or
MV07ICAgIC8vIHNoaWZ0IHVwCiAgICAgICAgICAtLWJhY2t3YXJkQ291bnQ7CiAgICAgICAgICBi
YWNrd2FyZEVuZXJneSArPSBwTWFzczsKICAgICAgICAgIGJhY2t3YXJkTWFzcyAtPSBwTWFzczsK
ICAgICAgICAgIHNlY29uZGFyeURlbGV0ZWQgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBlbHNl
IGlmKCB0YXJnZXRQYXJ0aWNsZS5HZXRTaWRlKCkgPT0gMSApCiAgICAgICAgewogICAgICAgICAg
cE1hc3MgPSB0YXJnZXRQYXJ0aWNsZS5HZXRNYXNzKCkvR2VWOwogICAgICAgICAgdGFyZ2V0UGFy
dGljbGUgPSAqdmVjWzBdOwogICAgICAgICAgZm9yKCBHNGludCBqPTA7IGo8KHZlY0xlbi0xKTsg
KytqICkqdmVjW2pdID0gKnZlY1tqKzFdOyAgICAvLyBzaGlmdCB1cAogICAgICAgICAgLS1mb3J3
YXJkQ291bnQ7CiAgICAgICAgICBmb3J3YXJkRW5lcmd5ICs9IHBNYXNzOwogICAgICAgICAgZm9y
d2FyZE1hc3MgLT0gcE1hc3M7CiAgICAgICAgICBzZWNvbmRhcnlEZWxldGVkID0gdHJ1ZTsKICAg
ICAgICB9CiAgICAgICAgaWYoIHNlY29uZGFyeURlbGV0ZWQgKQogICAgICAgIHsKICAgICAgICAg
IEc0UmVhY3Rpb25Qcm9kdWN0ICp0ZW1wID0gdmVjW3ZlY0xlbi0xXTsKICAgICAgICAgIGRlbGV0
ZSB0ZW1wOwogICAgICAgICAgLS12ZWNMZW47CiAgICAgICAgICAvLyBERUJVR0dJTkcgLS0+IER1
bXBGcmFtZXM6OkR1bXBGcmFtZSh2ZWMsIHZlY0xlbik7CiAgICAgICAgfQogICAgICAgIGVsc2UK
ICAgICAgICB7CiAgICAgICAgICBpZiggY3VycmVudFBhcnRpY2xlLkdldFNpZGUoKSA9PSAtMSAp
CiAgICAgICAgICB7CiAgICAgICAgICAgIHBNYXNzID0gY3VycmVudFBhcnRpY2xlLkdldE1hc3Mo
KS9HZVY7CiAgICAgICAgICAgIGN1cnJlbnRQYXJ0aWNsZSA9ICp2ZWNbMF07CiAgICAgICAgICAg
IGZvciggRzRpbnQgaj0wOyBqPCh2ZWNMZW4tMSk7ICsraiApKnZlY1tqXSA9ICp2ZWNbaisxXTsg
ICAgLy8gc2hpZnQgdXAKICAgICAgICAgICAgLS1iYWNrd2FyZENvdW50OwogICAgICAgICAgICBi
YWNrd2FyZEVuZXJneSArPSBwTWFzczsKICAgICAgICAgICAgYmFja3dhcmRNYXNzIC09IHBNYXNz
OwogICAgICAgICAgICBzZWNvbmRhcnlEZWxldGVkID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAg
ICAgIGVsc2UgaWYoIGN1cnJlbnRQYXJ0aWNsZS5HZXRTaWRlKCkgPT0gMSApCiAgICAgICAgICB7
CiAgICAgICAgICAgIHBNYXNzID0gY3VycmVudFBhcnRpY2xlLkdldE1hc3MoKS9HZVY7CiAgICAg
ICAgICAgIGN1cnJlbnRQYXJ0aWNsZSA9ICp2ZWNbMF07CiAgICAgICAgICAgIGZvciggRzRpbnQg
aj0wOyBqPCh2ZWNMZW4tMSk7ICsraiApKnZlY1tqXSA9ICp2ZWNbaisxXTsgICAgLy8gc2hpZnQg
dXAKICAgICAgICAgICAgLS1mb3J3YXJkQ291bnQ7CiAgICAgICAgICAgIGZvcndhcmRFbmVyZ3kg
Kz0gcE1hc3M7CiAgICAgICAgICAgIGZvcndhcmRNYXNzIC09IHBNYXNzOwogICAgICAgICAgICBz
ZWNvbmRhcnlEZWxldGVkID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmKCBzZWNvbmRh
cnlEZWxldGVkICkKICAgICAgICAgIHsKICAgICAgICAgICAgRzRSZWFjdGlvblByb2R1Y3QgKnRl
bXAgPSB2ZWNbdmVjTGVuLTFdOwogICAgICAgICAgICBkZWxldGUgdGVtcDsKICAgICAgICAgICAg
LS12ZWNMZW47CiAgICAgICAgICAgIC8vIERFQlVHR0lORyAtLT4gRHVtcEZyYW1lczo6RHVtcEZy
YW1lKHZlYywgdmVjTGVuKTsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgYnJlYWs7CiAgICAg
ICAgfQogICAgICB9CiAgICAgIGVBdmFpbGFibGUgPSBjZW50ZXJvZm1hc3NFbmVyZ3kgLSAoZm9y
d2FyZE1hc3MrYmFja3dhcmRNYXNzKTsKICAgIH0KICAgIC8vCiAgICAvLyBUaGlzIGlzIHRoZSBz
dGFydCBvZiB0aGUgVHdvQ2x1c3RlciBmdW5jdGlvbgogICAgLy8gIENob29zZSBtYXNzZXMgZm9y
IHRoZSAzIGNsdXN0ZXJzOgogICAgLy8gICBmb3J3YXJkIGNsdXN0ZXIKICAgIC8vICAgYmFja3dh
cmQgbWVzb24gY2x1c3RlcgogICAgLy8gICBiYWNrd2FyZCBudWNsZW9uIGNsdXN0ZXIKICAgIC8v
CiAgICBHNGRvdWJsZSBybWMgPSAwLjAsIHJtZCA9IDAuMDsgLy8gcm1lID0gMC4wOwogICAgY29u
c3QgRzRkb3VibGUgY3BhcltdID0geyAwLjYsIDAuNiwgMC4zNSwgMC4xNSwgMC4xMCB9OwogICAg
Y29uc3QgRzRkb3VibGUgZ3BhcltdID0geyAyLjYsIDIuNiwgMS44LCAxLjMwLCAxLjIwIH07CiAg
ICAKICAgIGlmKCBmb3J3YXJkQ291bnQgPT0gMSApcm1jID0gZm9yd2FyZE1hc3M7CiAgICBlbHNl
CiAgICB7Ci8vICAgICAgRzRpbnQgbnRjID0gRzRzdGQ6Om1pbig1LGZvcndhcmRDb3VudCk7IC8v
IGNoZWNrIGlmIG9mZnNldCBieSAxIEBACiAgICAgIEc0aW50IG50YyA9IEc0c3RkOjptYXgoMSwg
RzRzdGQ6Om1pbig1LGZvcndhcmRDb3VudCkpOyAvLyBjaGVjayBpZiBvZmZzZXQgYnkgMSBAQAog
ICAgICBybWMgPSBmb3J3YXJkTWFzcyArIHBvdygtbG9nKDEuMC1HNFVuaWZvcm1SYW5kKCkpLGNw
YXJbbnRjLTFdKS9ncGFyW250Yy0xXTsKICAgIH0KICAgIGlmKCBiYWNrd2FyZENvdW50ID09IDEg
KXJtZCA9IGJhY2t3YXJkTWFzczsKICAgIGVsc2UKICAgIHsKLy8gICAgICBHNGludCBudGMgPSBH
NHN0ZDo6bWluKDUsYmFja3dhcmRDb3VudCk7IC8vIGNoZWNrLCBpZiBvZmZmc2V0IGJ5IDEgQEAK
ICAgICAgRzRpbnQgbnRjID0gRzRzdGQ6Om1heCgxLCBHNHN0ZDo6bWluKDUsYmFja3dhcmRDb3Vu
dCkpOyAvLyBjaGVjaywgaWYgb2ZmZnNldCBieSAxIEBACiAgICAgIHJtZCA9IGJhY2t3YXJkTWFz
cyArIHBvdygtbG9nKDEuMC1HNFVuaWZvcm1SYW5kKCkpLGNwYXJbbnRjLTFdKS9ncGFyW250Yy0x
XTsKICAgIH0KICAgIHdoaWxlKCBybWMrcm1kID4gY2VudGVyb2ZtYXNzRW5lcmd5ICkKICAgIHsK
ICAgICAgaWYoIChybWMgPD0gZm9yd2FyZE1hc3MpICYmIChybWQgPD0gYmFja3dhcmRNYXNzKSAp
CiAgICAgIHsKICAgICAgICBHNGRvdWJsZSB0ZW1wID0gMC45OTkqY2VudGVyb2ZtYXNzRW5lcmd5
LyhybWMrcm1kKTsKICAgICAgICBybWMgKj0gdGVtcDsKICAgICAgICBybWQgKj0gdGVtcDsKICAg
ICAgfQogICAgICBlbHNlCiAgICAgIHsKICAgICAgICBybWMgPSAwLjEqZm9yd2FyZE1hc3MgKyAw
Ljkqcm1jOwogICAgICAgIHJtZCA9IDAuMSpiYWNrd2FyZE1hc3MgKyAwLjkqcm1kOwogICAgICB9
CiAgICB9CiAgICAvLyBub3RlIHRoYXQgcm1lIGlzIG5ldmVyIHVzZWQgYmVsb3cgdGhpcyBzZWN0
aW9uCiAgICAvLwogICAgLy9pZiggbnVjbGVhckV4Y2l0YXRpb25Db3VudCA9PSAwIClybWUgPSAw
LjA7CiAgICAvL2Vsc2UgaWYoIG51Y2xlYXJFeGNpdGF0aW9uQ291bnQgPT0gMSApcm1lID0gZXh0
cmFNYXNzOwogICAgLy9lbHNlCiAgICAvL3sKICAgIC8vICBHNGludCBudGMgPSBHNHN0ZDo6bWlu
KDUsbnVjbGVhckV4Y2l0YXRpb25Db3VudCktMTsKICAgIC8vICBybWUgPSBleHRyYU1hc3MgKyBw
b3coLWxvZygxLi1HNFVuaWZvcm1SYW5kKCkpLGNwYXJbbnRjXSkvZ3BhcltudGNdOwogICAgLy99
CiAgICAvLwogICAgLy8gIFNldCBiZWFtLCB0YXJnZXQgb2YgZmlyc3QgaW50ZXJhY3Rpb24gaW4g
Y2VudHJlIG9mIG1hc3Mgc3lzdGVtCiAgICAvLwogICAgRzRSZWFjdGlvblByb2R1Y3QgcHNldWRv
UGFydGljbGVbOF07CiAgICBmb3IoIGk9MDsgaTw4OyArK2kgKXBzZXVkb1BhcnRpY2xlW2ldLlNl
dFplcm8oKTsKICAgIAogICAgcHNldWRvUGFydGljbGVbMV0uU2V0TWFzcyggbU9yaWdpbmFsKkdl
ViApOwogICAgcHNldWRvUGFydGljbGVbMV0uU2V0VG90YWxFbmVyZ3koIGV0T3JpZ2luYWwqR2VW
ICk7CiAgICBwc2V1ZG9QYXJ0aWNsZVsxXS5TZXRNb21lbnR1bSggMC4wLCAwLjAsIHBPcmlnaW5h
bCpHZVYgKTsKICAgIAogICAgcHNldWRvUGFydGljbGVbMl0uU2V0TWFzcyggcHJvdG9uTWFzcypN
ZVYgKTsKICAgIHBzZXVkb1BhcnRpY2xlWzJdLlNldFRvdGFsRW5lcmd5KCBwcm90b25NYXNzKk1l
ViApOwogICAgcHNldWRvUGFydGljbGVbMl0uU2V0TW9tZW50dW0oIDAuMCwgMC4wLCAwLjAgKTsK
ICAgIC8vCiAgICAvLyAgdHJhbnNmb3JtIGludG8gY2VudHJlIG9mIG1hc3Mgc3lzdGVtCiAgICAv
LwogICAgcHNldWRvUGFydGljbGVbMF0gPSBwc2V1ZG9QYXJ0aWNsZVsxXSArIHBzZXVkb1BhcnRp
Y2xlWzJdOwogICAgcHNldWRvUGFydGljbGVbMV0uTG9yZW50eiggcHNldWRvUGFydGljbGVbMV0s
IHBzZXVkb1BhcnRpY2xlWzBdICk7CiAgICBwc2V1ZG9QYXJ0aWNsZVsyXS5Mb3JlbnR6KCBwc2V1
ZG9QYXJ0aWNsZVsyXSwgcHNldWRvUGFydGljbGVbMF0gKTsKICAgIAogICAgY29uc3QgRzRkb3Vi
bGUgcGZNaW4gPSAwLjAwMDE7CiAgICBHNGRvdWJsZSBwZiA9IChjZW50ZXJvZm1hc3NFbmVyZ3kq
Y2VudGVyb2ZtYXNzRW5lcmd5K3JtZCpybWQtcm1jKnJtYyk7CiAgICBwZiAqPSBwZjsKICAgIHBm
IC09IDQqY2VudGVyb2ZtYXNzRW5lcmd5KmNlbnRlcm9mbWFzc0VuZXJneSpybWQqcm1kOwogICAg
cGYgPSBzcXJ0KCBHNHN0ZDo6bWF4KHBmLHBmTWluKSApLygyLjAqY2VudGVyb2ZtYXNzRW5lcmd5
KTsKICAgIC8vCiAgICAvLyAgc2V0IGZpbmFsIHN0YXRlIG1hc3NlcyBhbmQgZW5lcmdpZXMgaW4g
Y2VudHJlIG9mIG1hc3Mgc3lzdGVtCiAgICAvLwogICAgcHNldWRvUGFydGljbGVbM10uU2V0TWFz
cyggcm1jKkdlViApOwogICAgcHNldWRvUGFydGljbGVbM10uU2V0VG90YWxFbmVyZ3koIHNxcnQo
cGYqcGYrcm1jKnJtYykqR2VWICk7CiAgICAKICAgIHBzZXVkb1BhcnRpY2xlWzRdLlNldE1hc3Mo
IHJtZCpHZVYgKTsKICAgIHBzZXVkb1BhcnRpY2xlWzRdLlNldFRvdGFsRW5lcmd5KCBzcXJ0KHBm
KnBmK3JtZCpybWQpKkdlViApOwogICAgLy8KICAgIC8vIHNldCB8VHwgYW5kIHxUTUlOfAogICAg
Ly8KICAgIGNvbnN0IEc0ZG91YmxlIGJNaW4gPSAwLjAxOwogICAgY29uc3QgRzRkb3VibGUgYjEg
PSA0LjA7CiAgICBjb25zdCBHNGRvdWJsZSBiMiA9IDEuNjsKICAgIEc0ZG91YmxlIHQgPSBsb2co
IDEuMC1HNFVuaWZvcm1SYW5kKCkgKSAvIEc0c3RkOjptYXgoIGJNaW4sIGIxK2IyKmxvZyhwT3Jp
Z2luYWwpICk7CiAgICBHNGRvdWJsZSB0MSA9CiAgICAgIHBzZXVkb1BhcnRpY2xlWzFdLkdldFRv
dGFsRW5lcmd5KCkvR2VWIC0gcHNldWRvUGFydGljbGVbM10uR2V0VG90YWxFbmVyZ3koKS9HZVY7
CiAgICBHNGRvdWJsZSBwaW4gPSBwc2V1ZG9QYXJ0aWNsZVsxXS5HZXRNb21lbnR1bSgpLm1hZygp
L0dlVjsKICAgIEc0ZG91YmxlIHRhY21pbiA9IHQxKnQxIC0gKHBpbi1wZikqKHBpbi1wZik7CiAg
ICAvLwogICAgLy8gY2FsY3VsYXRlIChzaW4odGV0YS8yLileMiBhbmQgY29zKHRldGEpLCBzZXQg
YXppbXV0aCBhbmdsZSBwaGkKICAgIC8vCiAgICBjb25zdCBHNGRvdWJsZSBzbWFsbFZhbHVlID0g
MS4wZS0xMDsKICAgIEc0ZG91YmxlIGR1bW52ZSA9IDQuMCpwaW4qcGY7CiAgICBpZiggZHVtbnZl
ID09IDAuMCApZHVtbnZlID0gc21hbGxWYWx1ZTsKICAgIEc0ZG91YmxlIGN0ZXQgPSBHNHN0ZDo6
bWF4KCAtMS4wLCBHNHN0ZDo6bWluKCAxLjAsIDEuMCsyLjAqKHQtdGFjbWluKS9kdW1udmUgKSAp
OwogICAgZHVtbnZlID0gRzRzdGQ6Om1heCggMC4wLCAxLjAtY3RldCpjdGV0ICk7CiAgICBHNGRv
dWJsZSBzdGV0ID0gc3FydChkdW1udmUpOwogICAgRzRkb3VibGUgcGhpID0gRzRVbmlmb3JtUmFu
ZCgpICogdHdvcGk7CiAgICAvLwogICAgLy8gY2FsY3VsYXRlIGZpbmFsIHN0YXRlIG1vbWVudGEg
aW4gY2VudHJlIG9mIG1hc3Mgc3lzdGVtCiAgICAvLwogICAgcHNldWRvUGFydGljbGVbM10uU2V0
TW9tZW50dW0oIHBmKnN0ZXQqc2luKHBoaSkqR2VWLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBmKnN0ZXQqY29zKHBoaSkqR2VWLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBmKmN0ZXQqR2VWICk7CiAgICBwc2V1ZG9QYXJ0aWNsZVs0XS5TZXRNb21lbnR1
bSggcHNldWRvUGFydGljbGVbM10uR2V0TW9tZW50dW0oKSAqICgtMS4wKSApOwogICAgLy8KICAg
IC8vIHNpbXVsYXRlIGJhY2t3YXJkIG51Y2xlb24gY2x1c3RlciBpbiBsYWIuIHN5c3RlbSBhbmQg
dHJhbnNmb3JtIGluIGNtcwogICAgLy8KICAgIEc0ZG91YmxlIHBwLCBwcDEsIHJ0aG52ZSwgcGhp
bnZlOwogICAgaWYoIG51Y2xlYXJFeGNpdGF0aW9uQ291bnQgPiAwICkKICAgIHsKICAgICAgY29u
c3QgRzRkb3VibGUgZ2EgPSAxLjI7CiAgICAgIEc0ZG91YmxlIGVraXQxID0gMC4wNDsKICAgICAg
RzRkb3VibGUgZWtpdDIgPSAwLjY7CiAgICAgIGlmKCBla09yaWdpbmFsIDw9IDUuMCApCiAgICAg
IHsKICAgICAgICBla2l0MSAqPSBla09yaWdpbmFsKmVrT3JpZ2luYWwvMjUuMDsKICAgICAgICBl
a2l0MiAqPSBla09yaWdpbmFsKmVrT3JpZ2luYWwvMjUuMDsKICAgICAgfQogICAgICBjb25zdCBH
NGRvdWJsZSBhID0gKDEuMC1nYSkvKHBvdyhla2l0MiwoMS4wLWdhKSkgLSBwb3coZWtpdDEsKDEu
MC1nYSkpKTsKICAgICAgZm9yKCBpPTA7IGk8dmVjTGVuOyArK2kgKQogICAgICB7CiAgICAgICAg
aWYoIHZlY1tpXS0+R2V0U2lkZSgpID09IC0yICkKICAgICAgICB7CiAgICAgICAgICBHNGRvdWJs
ZSBraW5ldGljRSA9CiAgICAgICAgICAgIHBvdyggKEc0VW5pZm9ybVJhbmQoKSooMS4wLWdhKS9h
K3Bvdyhla2l0MSwoMS4wLWdhKSkpLCAoMS4wLygxLjAtZ2EpKSApOwogICAgICAgICAgdmVjW2ld
LT5TZXRLaW5ldGljRW5lcmd5KCBraW5ldGljRSpHZVYgKTsKICAgICAgICAgIEc0ZG91YmxlIHZN
YXNzID0gdmVjW2ldLT5HZXRNYXNzKCkvTWVWOwogICAgICAgICAgRzRkb3VibGUgdG90YWxFID0g
a2luZXRpY0UgKyB2TWFzczsKICAgICAgICAgIHBwID0gc3FydCggYWJzKHRvdGFsRSp0b3RhbEUt
dk1hc3Mqdk1hc3MpICk7CiAgICAgICAgICBHNGRvdWJsZSBjb3N0ID0gRzRzdGQ6Om1pbiggMS4w
LCBHNHN0ZDo6bWF4KCAtMS4wLCBsb2coMi4yMypHNFVuaWZvcm1SYW5kKCkrMC4zODMpLzAuOTYg
KSApOwogICAgICAgICAgRzRkb3VibGUgc2ludCA9IHNxcnQoIEc0c3RkOjptYXgoIDAuMCwgKDEu
MC1jb3N0KmNvc3QpICkgKTsKICAgICAgICAgIHBoaSA9IHR3b3BpKkc0VW5pZm9ybVJhbmQoKTsK
ICAgICAgICAgIHZlY1tpXS0+U2V0TW9tZW50dW0oIHBwKnNpbnQqc2luKHBoaSkqTWVWLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHAqc2ludCpjb3MocGhpKSpNZVYsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcCpjb3N0Kk1lViApOwogICAgICAgICAgdmVjW2ldLT5M
b3JlbnR6KCAqdmVjW2ldLCBwc2V1ZG9QYXJ0aWNsZVswXSApOwogICAgICAgIH0KICAgICAgfQog
ICAgICAvLyBERUJVR0dJTkcgLS0+IER1bXBGcmFtZXM6OkR1bXBGcmFtZSh2ZWMsIHZlY0xlbik7
CiAgICB9CiAgICAvLwogICAgLy8gZnJhZ21lbnRhdGlvbiBvZiBmb3J3YXJkIGNsdXN0ZXIgYW5k
IGJhY2t3YXJkIG1lc29uIGNsdXN0ZXIKICAgIC8vCiAgICBjdXJyZW50UGFydGljbGUuU2V0TW9t
ZW50dW0oIHBzZXVkb1BhcnRpY2xlWzNdLkdldE1vbWVudHVtKCkgKTsKICAgIGN1cnJlbnRQYXJ0
aWNsZS5TZXRUb3RhbEVuZXJneSggcHNldWRvUGFydGljbGVbM10uR2V0VG90YWxFbmVyZ3koKSAp
OwogICAgCiAgICB0YXJnZXRQYXJ0aWNsZS5TZXRNb21lbnR1bSggcHNldWRvUGFydGljbGVbNF0u
R2V0TW9tZW50dW0oKSApOwogICAgdGFyZ2V0UGFydGljbGUuU2V0VG90YWxFbmVyZ3koIHBzZXVk
b1BhcnRpY2xlWzRdLkdldFRvdGFsRW5lcmd5KCkgKTsKICAgIAogICAgcHNldWRvUGFydGljbGVb
NV0uU2V0TW9tZW50dW0oIHBzZXVkb1BhcnRpY2xlWzNdLkdldE1vbWVudHVtKCkgKiAoLTEuMCkg
KTsKICAgIHBzZXVkb1BhcnRpY2xlWzVdLlNldE1hc3MoIHBzZXVkb1BhcnRpY2xlWzNdLkdldE1h
c3MoKSApOwogICAgcHNldWRvUGFydGljbGVbNV0uU2V0VG90YWxFbmVyZ3koIHBzZXVkb1BhcnRp
Y2xlWzNdLkdldFRvdGFsRW5lcmd5KCkgKTsKICAgIAogICAgcHNldWRvUGFydGljbGVbNl0uU2V0
TW9tZW50dW0oIHBzZXVkb1BhcnRpY2xlWzRdLkdldE1vbWVudHVtKCkgKiAoLTEuMCkgKTsKICAg
IHBzZXVkb1BhcnRpY2xlWzZdLlNldE1hc3MoIHBzZXVkb1BhcnRpY2xlWzRdLkdldE1hc3MoKSAp
OwogICAgcHNldWRvUGFydGljbGVbNl0uU2V0VG90YWxFbmVyZ3koIHBzZXVkb1BhcnRpY2xlWzRd
LkdldFRvdGFsRW5lcmd5KCkgKTsKICAgIAogICAgRzRkb3VibGUgd2d0OwogICAgICAvLyBERUJV
R0dJTkcgLS0+IER1bXBGcmFtZXM6OkR1bXBGcmFtZSh2ZWMsIHZlY0xlbik7CiAgICBpZiggZm9y
d2FyZENvdW50ID4gMSApICAgICAvLyB0ZW1wViB3aWxsIGNvbnRhaW4gdGhlIGZvcndhcmQgcGFy
dGljbGVzCiAgICB7CiAgICAgIEc0RmFzdFZlY3RvcjxHNFJlYWN0aW9uUHJvZHVjdCwxMjg+IHRl
bXBWOwogICAgICB0ZW1wVi5Jbml0aWFsaXplKCBmb3J3YXJkQ291bnQgKTsKICAgICAgRzRib29s
IGNvbnN0YW50Q3Jvc3NTZWN0aW9uID0gdHJ1ZTsKICAgICAgRzRpbnQgdGVtcExlbiA9IDA7CiAg
ICAgIGlmKCBjdXJyZW50UGFydGljbGUuR2V0U2lkZSgpID09IDEgKQogICAgICAgIHRlbXBWLlNl
dEVsZW1lbnQoIHRlbXBMZW4rKywgJmN1cnJlbnRQYXJ0aWNsZSApOwogICAgICBpZiggdGFyZ2V0
UGFydGljbGUuR2V0U2lkZSgpID09IDEgKQogICAgICAgIHRlbXBWLlNldEVsZW1lbnQoIHRlbXBM
ZW4rKywgJnRhcmdldFBhcnRpY2xlICk7CiAgICAgIGZvciggaT0wOyBpPHZlY0xlbjsgKytpICkK
ICAgICAgewogICAgICAgIGlmKCB2ZWNbaV0tPkdldFNpZGUoKSA9PSAxICkKICAgICAgICB7CiAg
ICAgICAgICBpZiggdGVtcExlbiA8IDE4ICkKICAgICAgICAgICAgdGVtcFYuU2V0RWxlbWVudCgg
dGVtcExlbisrLCB2ZWNbaV0gKTsKICAgICAgICAgIGVsc2UKICAgICAgICAgIHsKICAgICAgICAg
ICAgdmVjW2ldLT5TZXRTaWRlKCAtMSApOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
IH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaWYoIHRlbXBMZW4gPj0gMiApCiAgICAgIHsKICAg
ICAgICB3Z3QgPSBHZW5lcmF0ZU5Cb2R5RXZlbnQoIHBzZXVkb1BhcnRpY2xlWzNdLkdldE1hc3Mo
KS9NZVYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudENyb3NzU2Vj
dGlvbiwgdGVtcFYsIHRlbXBMZW4gKTsKICAgICAgICBpZiggY3VycmVudFBhcnRpY2xlLkdldFNp
ZGUoKSA9PSAxICkKICAgICAgICAgIGN1cnJlbnRQYXJ0aWNsZS5Mb3JlbnR6KCBjdXJyZW50UGFy
dGljbGUsIHBzZXVkb1BhcnRpY2xlWzVdICk7CiAgICAgICAgaWYoIHRhcmdldFBhcnRpY2xlLkdl
dFNpZGUoKSA9PSAxICkKICAgICAgICAgIHRhcmdldFBhcnRpY2xlLkxvcmVudHooIHRhcmdldFBh
cnRpY2xlLCBwc2V1ZG9QYXJ0aWNsZVs1XSApOwogICAgICAgIGZvciggaT0wOyBpPHZlY0xlbjsg
KytpICkKICAgICAgICB7CiAgICAgICAgICBpZiggdmVjW2ldLT5HZXRTaWRlKCkgPT0gMSApdmVj
W2ldLT5Mb3JlbnR6KCAqdmVjW2ldLCBwc2V1ZG9QYXJ0aWNsZVs1XSApOwogICAgICAgIH0KICAg
ICAgfQogICAgfQogICAgICAvLyBERUJVR0dJTkcgLS0+IER1bXBGcmFtZXM6OkR1bXBGcmFtZSh2
ZWMsIHZlY0xlbik7CiAgICBpZiggYmFja3dhcmRDb3VudCA+IDEgKSAgIC8vICB0ZW1wViB3aWxs
IGNvbnRhaW4gdGhlIGJhY2t3YXJkIHBhcnRpY2xlcywKICAgIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gIGJ1dCBub3QgdGhvc2UgY3JlYXRlZCBmcm9tIHRoZSBpbnRyYW51Y2xlYXIgY2Fz
Y2FkZQogICAgICBHNEZhc3RWZWN0b3I8RzRSZWFjdGlvblByb2R1Y3QsMTI4PiB0ZW1wVjsKICAg
ICAgdGVtcFYuSW5pdGlhbGl6ZSggYmFja3dhcmRDb3VudCApOwogICAgICBHNGJvb2wgY29uc3Rh
bnRDcm9zc1NlY3Rpb24gPSB0cnVlOwogICAgICBHNGludCB0ZW1wTGVuID0gMDsKICAgICAgaWYo
IGN1cnJlbnRQYXJ0aWNsZS5HZXRTaWRlKCkgPT0gLTEgKQogICAgICAgIHRlbXBWLlNldEVsZW1l
bnQoIHRlbXBMZW4rKywgJmN1cnJlbnRQYXJ0aWNsZSApOwogICAgICBpZiggdGFyZ2V0UGFydGlj
bGUuR2V0U2lkZSgpID09IC0xICkKICAgICAgICB0ZW1wVi5TZXRFbGVtZW50KCB0ZW1wTGVuKyss
ICZ0YXJnZXRQYXJ0aWNsZSApOwogICAgICBmb3IoIGk9MDsgaTx2ZWNMZW47ICsraSApCiAgICAg
IHsKICAgICAgICBpZiggdmVjW2ldLT5HZXRTaWRlKCkgPT0gLTEgKQogICAgICAgIHsKICAgICAg
ICAgIGlmKCB0ZW1wTGVuIDwgMTggKQogICAgICAgICAgICB0ZW1wVi5TZXRFbGVtZW50KCB0ZW1w
TGVuKyssIHZlY1tpXSApOwogICAgICAgICAgZWxzZQogICAgICAgICAgewogICAgICAgICAgICB2
ZWNbaV0tPlNldFNpZGUoIC0yICk7CiAgICAgICAgICAgIHZlY1tpXS0+U2V0S2luZXRpY0VuZXJn
eSggMC4wICk7CiAgICAgICAgICAgIHZlY1tpXS0+U2V0TW9tZW50dW0oIDAuMCwgMC4wLCAwLjAg
KTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAg
ICAgIGlmKCB0ZW1wTGVuID49IDIgKQogICAgICB7CiAgICAgICAgd2d0ID0gR2VuZXJhdGVOQm9k
eUV2ZW50KCBwc2V1ZG9QYXJ0aWNsZVs0XS5HZXRNYXNzKCkvTWVWLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3RhbnRDcm9zc1NlY3Rpb24sIHRlbXBWLCB0ZW1wTGVuICk7
CiAgICAgICAgaWYoIGN1cnJlbnRQYXJ0aWNsZS5HZXRTaWRlKCkgPT0gLTEgKQogICAgICAgICAg
Y3VycmVudFBhcnRpY2xlLkxvcmVudHooIGN1cnJlbnRQYXJ0aWNsZSwgcHNldWRvUGFydGljbGVb
Nl0gKTsKICAgICAgICBpZiggdGFyZ2V0UGFydGljbGUuR2V0U2lkZSgpID09IC0xICkKICAgICAg
ICAgIHRhcmdldFBhcnRpY2xlLkxvcmVudHooIHRhcmdldFBhcnRpY2xlLCBwc2V1ZG9QYXJ0aWNs
ZVs2XSApOwogICAgICAgIGZvciggaT0wOyBpPHZlY0xlbjsgKytpICkKICAgICAgICB7CiAgICAg
ICAgICBpZiggdmVjW2ldLT5HZXRTaWRlKCkgPT0gLTEgKXZlY1tpXS0+TG9yZW50eiggKnZlY1tp
XSwgcHNldWRvUGFydGljbGVbNl0gKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgICAgLy8g
REVCVUdHSU5HIC0tPiBEdW1wRnJhbWVzOjpEdW1wRnJhbWUodmVjLCB2ZWNMZW4pOwogICAgLy8K
ICAgIC8vIExvcmVudHogdHJhbnNmb3JtYXRpb24gaW4gbGFiIHN5c3RlbQogICAgLy8KICAgIEc0
aW50IG51bWJlcm9mRmluYWxTdGF0ZU51Y2xlb25zID0gMDsKICAgIGlmKCBjdXJyZW50UGFydGlj
bGUuR2V0TWFzcygpID4gMC41KkdlViApKytudW1iZXJvZkZpbmFsU3RhdGVOdWNsZW9uczsKICAg
IGN1cnJlbnRQYXJ0aWNsZS5Mb3JlbnR6KCBjdXJyZW50UGFydGljbGUsIHBzZXVkb1BhcnRpY2xl
WzJdICk7CiAgICBpZiggdGFyZ2V0UGFydGljbGUuR2V0TWFzcygpID4gMC41KkdlViApKytudW1i
ZXJvZkZpbmFsU3RhdGVOdWNsZW9uczsKICAgIHRhcmdldFBhcnRpY2xlLkxvcmVudHooIHRhcmdl
dFBhcnRpY2xlLCBwc2V1ZG9QYXJ0aWNsZVsyXSApOwogICAgZm9yKCBpPTA7IGk8dmVjTGVuOyAr
K2kgKQogICAgewogICAgICBpZiggdmVjW2ldLT5HZXRNYXNzKCkgPiAwLjUqR2VWICkrK251bWJl
cm9mRmluYWxTdGF0ZU51Y2xlb25zOwogICAgICB2ZWNbaV0tPkxvcmVudHooICp2ZWNbaV0sIHBz
ZXVkb1BhcnRpY2xlWzJdICk7CiAgICB9CiAgICAgIC8vIERFQlVHR0lORyAtLT4gRHVtcEZyYW1l
czo6RHVtcEZyYW1lKHZlYywgdmVjTGVuKTsKICAgIG51bWJlcm9mRmluYWxTdGF0ZU51Y2xlb25z
ID0gRzRzdGQ6Om1heCggMSwgbnVtYmVyb2ZGaW5hbFN0YXRlTnVjbGVvbnMgKTsKICAgIC8vCiAg
ICAvLyBzb21ldGltZXMgdGhlIGxlYWRpbmcgc3RyYW5nZSBwYXJ0aWNsZSBpcyBsb3N0LCBzZXQg
aXQgYmFjawogICAgLy8KICAgIEc0Ym9vbCBkdW0gPSB0cnVlOwogICAgaWYoIGxlYWRGbGFnICkK
ICAgIHsKICAgICAgLy8gbGVhZEZsYWcgd2lsbCBiZSB0cnVlCiAgICAgIC8vICBpZmYgb3JpZ2lu
YWwgcGFydGljbGUgaXMgYXQgbGVhc3QgYXMgaGVhdnkgYXMgSysgYW5kIG5vdCBhIHByb3RvbiBv
ciBuZXV0cm9uIEFORAogICAgICAvLyAgIGlmCiAgICAgIC8vICAgIGluY2lkZW50IHBhcnRpY2xl
IGlzIGF0IGxlYXN0IGFzIGhlYXZ5IGFzIEsrIGFuZCBpdCBpcyBub3QgYSBwcm90b24gb3IgbmV1
dHJvbgogICAgICAvLyAgICAgbGVhZEZsYWcgaXMgc2V0IHRvIHRoZSBpbmNpZGVudCBwYXJ0aWNs
ZQogICAgICAvLyAgIG9yCiAgICAgIC8vICAgIHRhcmdldCBwYXJ0aWNsZSBpcyBhdCBsZWFzdCBh
cyBoZWF2eSBhcyBLKyBhbmQgaXQgaXMgbm90IGEgcHJvdG9uIG9yIG5ldXRyb24KICAgICAgLy8g
ICAgIGxlYWRGbGFnIGlzIHNldCB0byB0aGUgdGFyZ2V0IHBhcnRpY2xlCiAgICAgIC8vCiAgICAg
IGlmKCBjdXJyZW50UGFydGljbGUuR2V0RGVmaW5pdGlvbigpID09IGxlYWRpbmdTdHJhbmdlUGFy
dGljbGUuR2V0RGVmaW5pdGlvbigpICkKICAgICAgICBkdW0gPSBmYWxzZTsKICAgICAgZWxzZSBp
ZiggdGFyZ2V0UGFydGljbGUuR2V0RGVmaW5pdGlvbigpID09IGxlYWRpbmdTdHJhbmdlUGFydGlj
bGUuR2V0RGVmaW5pdGlvbigpICkKICAgICAgICBkdW0gPSBmYWxzZTsKICAgICAgZWxzZQogICAg
ICB7CiAgICAgICAgZm9yKCBpPTA7IGk8dmVjTGVuOyArK2kgKQogICAgICAgIHsKICAgICAgICAg
IGlmKCB2ZWNbaV0tPkdldERlZmluaXRpb24oKSA9PSBsZWFkaW5nU3RyYW5nZVBhcnRpY2xlLkdl
dERlZmluaXRpb24oKSApCiAgICAgICAgICB7CiAgICAgICAgICAgIGR1bSA9IGZhbHNlOwogICAg
ICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaWYoIGR1
bSApCiAgICAgIHsKICAgICAgICBHNGRvdWJsZSBsZWFkTWFzcyA9IGxlYWRpbmdTdHJhbmdlUGFy
dGljbGUuR2V0TWFzcygpL01lVjsKICAgICAgICBHNGRvdWJsZSBla2luOwogICAgICAgIGlmKCAo
KGxlYWRNYXNzIDwgIHByb3Rvbk1hc3MpICYmICh0YXJnZXRQYXJ0aWNsZS5HZXRNYXNzKCkvTWVW
IDwgIHByb3Rvbk1hc3MpKSB8fAogICAgICAgICAgICAoKGxlYWRNYXNzID49IHByb3Rvbk1hc3Mp
ICYmICh0YXJnZXRQYXJ0aWNsZS5HZXRNYXNzKCkvTWVWID49IHByb3Rvbk1hc3MpKSApCiAgICAg
ICAgewogICAgICAgICAgZWtpbiA9IHRhcmdldFBhcnRpY2xlLkdldEtpbmV0aWNFbmVyZ3koKS9H
ZVY7CiAgICAgICAgICBwcDEgPSB0YXJnZXRQYXJ0aWNsZS5HZXRNb21lbnR1bSgpLm1hZygpL01l
VjsgLy8gb2xkIG1vbWVudHVtCiAgICAgICAgICB0YXJnZXRQYXJ0aWNsZS5TZXREZWZpbml0aW9u
KCBsZWFkaW5nU3RyYW5nZVBhcnRpY2xlLkdldERlZmluaXRpb24oKSApOwogICAgICAgICAgdGFy
Z2V0UGFydGljbGUuU2V0S2luZXRpY0VuZXJneSggZWtpbipHZVYgKTsKICAgICAgICAgIHBwID0g
dGFyZ2V0UGFydGljbGUuR2V0VG90YWxNb21lbnR1bSgpL01lVjsgICAvLyBuZXcgbW9tZW50dW0K
ICAgICAgICAgIGlmKCBwcDEgPCAxLjBlLTMgKQogICAgICAgICAgewogICAgICAgICAgICBydGhu
dmUgPSBwaSpHNFVuaWZvcm1SYW5kKCk7CiAgICAgICAgICAgIHBoaW52ZSA9IHR3b3BpKkc0VW5p
Zm9ybVJhbmQoKTsKICAgICAgICAgICAgdGFyZ2V0UGFydGljbGUuU2V0TW9tZW50dW0oIHBwKnNp
bihydGhudmUpKmNvcyhydGhudmUpKk1lViwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBwKnNpbihydGhudmUpKnNpbihydGhudmUpKk1lViwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBwKmNvcyhydGhudmUpKk1lViApOwogICAgICAgICAg
fQogICAgICAgICAgZWxzZQogICAgICAgICAgICB0YXJnZXRQYXJ0aWNsZS5TZXRNb21lbnR1bSgg
dGFyZ2V0UGFydGljbGUuR2V0TW9tZW50dW0oKSAqIChwcC9wcDEpICk7CiAgICAgICAgICAKICAg
ICAgICAgIHRhcmdldEhhc0NoYW5nZWQgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBlbHNlCiAg
ICAgICAgewogICAgICAgICAgZWtpbiA9IGN1cnJlbnRQYXJ0aWNsZS5HZXRLaW5ldGljRW5lcmd5
KCkvR2VWOwogICAgICAgICAgcHAxID0gY3VycmVudFBhcnRpY2xlLkdldE1vbWVudHVtKCkubWFn
KCkvTWVWOwogICAgICAgICAgY3VycmVudFBhcnRpY2xlLlNldERlZmluaXRpb24oIGxlYWRpbmdT
dHJhbmdlUGFydGljbGUuR2V0RGVmaW5pdGlvbigpICk7CiAgICAgICAgICBjdXJyZW50UGFydGlj
bGUuU2V0S2luZXRpY0VuZXJneSggZWtpbipHZVYgKTsKICAgICAgICAgIHBwID0gY3VycmVudFBh
cnRpY2xlLkdldFRvdGFsTW9tZW50dW0oKS9NZVY7CiAgICAgICAgICBpZiggcHAxIDwgMS4wZS0z
ICkKICAgICAgICAgIHsKICAgICAgICAgICAgcnRobnZlID0gcGkqRzRVbmlmb3JtUmFuZCgpOwog
ICAgICAgICAgICBwaGludmUgPSB0d29waSpHNFVuaWZvcm1SYW5kKCk7CiAgICAgICAgICAgIGN1
cnJlbnRQYXJ0aWNsZS5TZXRNb21lbnR1bSggcHAqc2luKHJ0aG52ZSkqY29zKHJ0aG52ZSkqTWVW
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwKnNpbihydGhudmUp
KnNpbihydGhudmUpKk1lViwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwcCpjb3MocnRobnZlKSpNZVYgKTsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgY3VycmVudFBhcnRpY2xlLlNldE1vbWVudHVtKCBjdXJyZW50UGFydGljbGUuR2V0TW9t
ZW50dW0oKSAqIChwcC9wcDEpICk7CiAgICAgICAgICAKICAgICAgICAgIGluY2lkZW50SGFzQ2hh
bmdlZCA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICB9ICAgIC8vIGVuZCBvZiBpZiggbGVh
ZEZsYWcgKQogICAgLy8KICAgIC8vICBmb3IgdmFyaW91cyByZWFzb25zLCB0aGUgZW5lcmd5IGJh
bGFuY2UgaXMgbm90IHN1ZmZpY2llbnQsCiAgICAvLyAgY2hlY2sgdGhhdCwgIGVuZXJneSBiYWxh
bmNlLCBhbmdsZSBvZiBmaW5hbCBzeXN0ZW0sIGV0Yy4KICAgIC8vCiAgICBwc2V1ZG9QYXJ0aWNs
ZVs0XS5TZXRNYXNzKCBtT3JpZ2luYWwqR2VWICk7CiAgICBwc2V1ZG9QYXJ0aWNsZVs0XS5TZXRU
b3RhbEVuZXJneSggZXRPcmlnaW5hbCpHZVYgKTsKICAgIHBzZXVkb1BhcnRpY2xlWzRdLlNldE1v
bWVudHVtKCAwLjAsIDAuMCwgcE9yaWdpbmFsKkdlViApOwogICAgCiAgICBwc2V1ZG9QYXJ0aWNs
ZVs1XS5TZXRNb21lbnR1bSggMC4wLCAwLjAsIDAuMCApOwogICAgcHNldWRvUGFydGljbGVbNV0u
U2V0TWFzcyggcHJvdG9uTWFzcypudW1iZXJvZkZpbmFsU3RhdGVOdWNsZW9ucypNZVYgKTsKICAg
IHBzZXVkb1BhcnRpY2xlWzVdLlNldFRvdGFsRW5lcmd5KCBwcm90b25NYXNzKm51bWJlcm9mRmlu
YWxTdGF0ZU51Y2xlb25zKk1lViApOwogICAgCi8vICAgIEc0ZG91YmxlIGVraW4wID0gcHNldWRv
UGFydGljbGVbNF0uR2V0S2luZXRpY0VuZXJneSgpL0dlVjsKICAgIEc0ZG91YmxlIHRoZW9yZXRp
Y2FsS2luZXRpYyA9CiAgICAgIHBzZXVkb1BhcnRpY2xlWzRdLkdldFRvdGFsRW5lcmd5KCkvR2VW
ICsgcHNldWRvUGFydGljbGVbNV0uR2V0VG90YWxFbmVyZ3koKS9HZVY7CiAgICAKICAgIHBzZXVk
b1BhcnRpY2xlWzZdID0gcHNldWRvUGFydGljbGVbNF0gKyBwc2V1ZG9QYXJ0aWNsZVs1XTsKICAg
IHBzZXVkb1BhcnRpY2xlWzRdLkxvcmVudHooIHBzZXVkb1BhcnRpY2xlWzRdLCBwc2V1ZG9QYXJ0
aWNsZVs2XSApOwogICAgcHNldWRvUGFydGljbGVbNV0uTG9yZW50eiggcHNldWRvUGFydGljbGVb
NV0sIHBzZXVkb1BhcnRpY2xlWzZdICk7CiAgICAKICAgIGlmKCB2ZWNMZW4gPCAxNiApCiAgICB7
CiAgICAgIEc0UmVhY3Rpb25Qcm9kdWN0IHRlbXBSWzEzMF07CiAgICAgIC8vRzRSZWFjdGlvblBy
b2R1Y3QgKnRlbXBSID0gbmV3IEc0UmVhY3Rpb25Qcm9kdWN0IFt2ZWNMZW4rMl07CiAgICAgIHRl
bXBSWzBdID0gY3VycmVudFBhcnRpY2xlOwogICAgICB0ZW1wUlsxXSA9IHRhcmdldFBhcnRpY2xl
OwogICAgICBmb3IoIGk9MDsgaTx2ZWNMZW47ICsraSApdGVtcFJbaSsyXSA9ICp2ZWNbaV07Cgog
ICAgICBHNEZhc3RWZWN0b3I8RzRSZWFjdGlvblByb2R1Y3QsMTI4PiB0ZW1wVjsKICAgICAgdGVt
cFYuSW5pdGlhbGl6ZSggdmVjTGVuKzIgKTsKICAgICAgRzRib29sIGNvbnN0YW50Q3Jvc3NTZWN0
aW9uID0gdHJ1ZTsKICAgICAgRzRpbnQgdGVtcExlbiA9IDA7CiAgICAgIGZvciggaT0wOyBpPHZl
Y0xlbisyOyArK2kgKXRlbXBWLlNldEVsZW1lbnQoIHRlbXBMZW4rKywgJnRlbXBSW2ldICk7Cgog
ICAgICBpZiggdGVtcExlbiA+PSAyICkKICAgICAgewogICAgICAvLyBERUJVR0dJTkcgLS0+IER1
bXBGcmFtZXM6OkR1bXBGcmFtZSh2ZWMsIHZlY0xlbik7CiAgICAgICAgd2d0ID0gR2VuZXJhdGVO
Qm9keUV2ZW50KAogICAgICAgICBwc2V1ZG9QYXJ0aWNsZVs0XS5HZXRUb3RhbEVuZXJneSgpL01l
Vitwc2V1ZG9QYXJ0aWNsZVs1XS5HZXRUb3RhbEVuZXJneSgpL01lViwKICAgICAgICAgY29uc3Rh
bnRDcm9zc1NlY3Rpb24sIHRlbXBWLCB0ZW1wTGVuICk7CiAgICAgICAgdGhlb3JldGljYWxLaW5l
dGljID0gMC4wOwogICAgICAgIGZvciggaT0wOyBpPHZlY0xlbisyOyArK2kgKQogICAgICAgIHsK
ICAgICAgICAgIHBzZXVkb1BhcnRpY2xlWzddLlNldE1vbWVudHVtKCB0ZW1wVltpXS0+R2V0TW9t
ZW50dW0oKSApOwogICAgICAgICAgcHNldWRvUGFydGljbGVbN10uU2V0TWFzcyggdGVtcFZbaV0t
PkdldE1hc3MoKSApOwogICAgICAgICAgcHNldWRvUGFydGljbGVbN10uU2V0VG90YWxFbmVyZ3ko
IHRlbXBWW2ldLT5HZXRUb3RhbEVuZXJneSgpICk7CiAgICAgICAgICBwc2V1ZG9QYXJ0aWNsZVs3
XS5Mb3JlbnR6KCBwc2V1ZG9QYXJ0aWNsZVs3XSwgcHNldWRvUGFydGljbGVbNV0gKTsKICAgICAg
ICAgIHRoZW9yZXRpY2FsS2luZXRpYyArPSBwc2V1ZG9QYXJ0aWNsZVs3XS5HZXRLaW5ldGljRW5l
cmd5KCkvR2VWOwogICAgICAgIH0KICAgICAgfQogICAgICAvLyBERUJVR0dJTkcgLS0+IER1bXBG
cmFtZXM6OkR1bXBGcmFtZSh2ZWMsIHZlY0xlbik7CiAgICAgIC8vZGVsZXRlIFtdIHRlbXBSOwog
ICAgfQogICAgZWxzZQogICAgewogICAgICB0aGVvcmV0aWNhbEtpbmV0aWMgLT0KICAgICAgICAo
IGN1cnJlbnRQYXJ0aWNsZS5HZXRNYXNzKCkvR2VWICsgdGFyZ2V0UGFydGljbGUuR2V0TWFzcygp
L0dlViApOwogICAgICBmb3IoIGk9MDsgaTx2ZWNMZW47ICsraSApdGhlb3JldGljYWxLaW5ldGlj
IC09IHZlY1tpXS0+R2V0TWFzcygpL0dlVjsKICAgIH0KICAgIEc0ZG91YmxlIHNpbXVsYXRlZEtp
bmV0aWMgPQogICAgICBjdXJyZW50UGFydGljbGUuR2V0S2luZXRpY0VuZXJneSgpL0dlViArIHRh
cmdldFBhcnRpY2xlLkdldEtpbmV0aWNFbmVyZ3koKS9HZVY7CiAgICBmb3IoIGk9MDsgaTx2ZWNM
ZW47ICsraSApc2ltdWxhdGVkS2luZXRpYyArPSB2ZWNbaV0tPkdldEtpbmV0aWNFbmVyZ3koKS9H
ZVY7CiAgICAvLwogICAgLy8gbWFrZSBzdXJlIHRoYXQga2luZXRpYyBlbmVyZ2llcyBhcmUgY29y
cmVjdAogICAgLy8gdGhlIGJhY2t3YXJkIG51Y2xlb24gY2x1c3RlciBpcyBub3QgcHJvZHVjZWQg
d2l0aGluIHByb3BlciBraW5lbWF0aWNzISEhCiAgICAvLwogICAgaWYoIHNpbXVsYXRlZEtpbmV0
aWMgIT0gMC4wICkKICAgIHsKICAgICAgd2d0ID0gdGhlb3JldGljYWxLaW5ldGljL3NpbXVsYXRl
ZEtpbmV0aWM7CiAgICAgIGN1cnJlbnRQYXJ0aWNsZS5TZXRLaW5ldGljRW5lcmd5KCB3Z3QqY3Vy
cmVudFBhcnRpY2xlLkdldEtpbmV0aWNFbmVyZ3koKSApOwogICAgICBwcCA9IGN1cnJlbnRQYXJ0
aWNsZS5HZXRUb3RhbE1vbWVudHVtKCkvTWVWOwogICAgICBwcDEgPSBjdXJyZW50UGFydGljbGUu
R2V0TW9tZW50dW0oKS5tYWcoKS9NZVY7CiAgICAgIGlmKCBwcDEgPCAwLjAwMSpNZVYgKQogICAg
ICB7CiAgICAgICAgcnRobnZlID0gcGkgKiBHNFVuaWZvcm1SYW5kKCk7CiAgICAgICAgcGhpbnZl
ID0gdHdvcGkgKiBHNFVuaWZvcm1SYW5kKCk7CiAgICAgICAgY3VycmVudFBhcnRpY2xlLlNldE1v
bWVudHVtKCBwcCpzaW4ocnRobnZlKSpjb3MocGhpbnZlKSpNZVYsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwcCpzaW4ocnRobnZlKSpzaW4ocGhpbnZlKSpNZVYsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcCpjb3MocnRobnZlKSpNZVYgKTsKICAg
ICAgfQogICAgICBlbHNlCiAgICAgICAgY3VycmVudFBhcnRpY2xlLlNldE1vbWVudHVtKCBjdXJy
ZW50UGFydGljbGUuR2V0TW9tZW50dW0oKSAqIChwcC9wcDEpICk7CiAgICAgIAogICAgICB0YXJn
ZXRQYXJ0aWNsZS5TZXRLaW5ldGljRW5lcmd5KCB3Z3QqdGFyZ2V0UGFydGljbGUuR2V0S2luZXRp
Y0VuZXJneSgpICk7CiAgICAgIHBwID0gdGFyZ2V0UGFydGljbGUuR2V0VG90YWxNb21lbnR1bSgp
L01lVjsKICAgICAgcHAxID0gdGFyZ2V0UGFydGljbGUuR2V0TW9tZW50dW0oKS5tYWcoKS9NZVY7
CiAgICAgIGlmKCBwcDEgPCAwLjAwMSpNZVYgKQogICAgICB7CiAgICAgICAgcnRobnZlID0gcGkg
KiBHNFVuaWZvcm1SYW5kKCk7CiAgICAgICAgcGhpbnZlID0gdHdvcGkgKiBHNFVuaWZvcm1SYW5k
KCk7CiAgICAgICAgdGFyZ2V0UGFydGljbGUuU2V0TW9tZW50dW0oIHBwKnNpbihydGhudmUpKmNv
cyhwaGludmUpKk1lViwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHAqc2lu
KHJ0aG52ZSkqc2luKHBoaW52ZSkqTWVWLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwcCpjb3MocnRobnZlKSpNZVYgKTsKICAgICAgfQogICAgICBlbHNlCiAgICAgICAgdGFy
Z2V0UGFydGljbGUuU2V0TW9tZW50dW0oIHRhcmdldFBhcnRpY2xlLkdldE1vbWVudHVtKCkgKiAo
cHAvcHAxKSApOwogICAgICAKICAgICAgZm9yKCBpPTA7IGk8dmVjTGVuOyArK2kgKQogICAgICB7
CiAgICAgICAgdmVjW2ldLT5TZXRLaW5ldGljRW5lcmd5KCB3Z3QqdmVjW2ldLT5HZXRLaW5ldGlj
RW5lcmd5KCkgKTsKICAgICAgICBwcCA9IHZlY1tpXS0+R2V0VG90YWxNb21lbnR1bSgpL01lVjsK
ICAgICAgICBwcDEgPSB2ZWNbaV0tPkdldE1vbWVudHVtKCkubWFnKCkvTWVWOwogICAgICAgIGlm
KCBwcDEgPCAwLjAwMSApCiAgICAgICAgewogICAgICAgICAgcnRobnZlID0gcGkgKiBHNFVuaWZv
cm1SYW5kKCk7CiAgICAgICAgICBwaGludmUgPSB0d29waSAqIEc0VW5pZm9ybVJhbmQoKTsKICAg
ICAgICAgIHZlY1tpXS0+U2V0TW9tZW50dW0oIHBwKnNpbihydGhudmUpKmNvcyhwaGludmUpKk1l
ViwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwKnNpbihydGhudmUpKnNpbihwaGlu
dmUpKk1lViwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwKmNvcyhydGhudmUpKk1l
ViApOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICB2ZWNbaV0tPlNldE1vbWVudHVt
KCB2ZWNbaV0tPkdldE1vbWVudHVtKCkgKiAocHAvcHAxKSApOwogICAgICB9CiAgICB9CiAgICAg
IC8vIERFQlVHR0lORyAtLT4gRHVtcEZyYW1lczo6RHVtcEZyYW1lKHZlYywgdmVjTGVuKTsKICAg
IFJvdGF0ZSggbnVtYmVyb2ZGaW5hbFN0YXRlTnVjbGVvbnMsIHBzZXVkb1BhcnRpY2xlWzRdLkdl
dE1vbWVudHVtKCksCiAgICAgICAgICAgIG1vZGlmaWVkT3JpZ2luYWwsIG9yaWdpbmFsSW5jaWRl
bnQsIHRhcmdldE51Y2xldXMsCiAgICAgICAgICAgIGN1cnJlbnRQYXJ0aWNsZSwgdGFyZ2V0UGFy
dGljbGUsIHZlYywgdmVjTGVuICk7CiAgICAvLwogICAgLy8gIGFkZCBibGFjayB0cmFjayBwYXJ0
aWNsZXMKICAgIC8vICB0aGUgdG90YWwgbnVtYmVyIG9mIHBhcnRpY2xlcyBwcm9kdWNlZCBpcyBy
ZXN0cmljdGVkIHRvIDE5OAogICAgLy8gIHRoaXMgbWF5IGhhdmUgaW5mbHVlbmNlIG9uIHZlcnkg
aGlnaCBlbmVyZ2llcwogICAgLy8KICAgIGlmKCBhdG9taWNXZWlnaHQgPj0gMS41ICkKICAgIHsK
ICAgICAgLy8gbnBuYiBpcyBudW1iZXIgb2YgcHJvdG9uL25ldXRyb24gYmxhY2sgdHJhY2sgcGFy
dGljbGVzCiAgICAgIC8vIG5kdGEgaXMgdGhlIG51bWJlciBvZiBkZXV0ZXJvbnMsIHRyaXRvbnMs
IGFuZCBhbHBoYXMgcHJvZHVjZWQKICAgICAgLy8gZXBuYiBpcyB0aGUga2luZXRpYyBlbmVyZ3kg
YXZhaWxhYmxlIGZvciBwcm90b24vbmV1dHJvbiBibGFjayB0cmFjayBwYXJ0aWNsZXMKICAgICAg
Ly8gZWR0YSBpcyB0aGUga2luZXRpYyBlbmVyZ3kgYXZhaWxhYmxlIGZvciBkZXV0ZXJvbi90cml0
b24vYWxwaGEgcGFydGljbGVzCiAgICAgIC8vCiAgICAgIEc0ZG91YmxlIGVwbmIsIGVkdGE7CiAg
ICAgIEc0aW50IG5wbmIgPSAwOwogICAgICBHNGludCBuZHRhID0gMDsKICAgICAgCiAgICAgIGVw
bmIgPSB0YXJnZXROdWNsZXVzLkdldFBOQmxhY2tUcmFja0VuZXJneSgpOyAgICAgICAgICAgIC8v
IHdhcyBlbnAxIGluIGZvcnRyYW4gY29kZQogICAgICBlZHRhID0gdGFyZ2V0TnVjbGV1cy5HZXRE
VEFCbGFja1RyYWNrRW5lcmd5KCk7ICAgICAgICAgICAvLyB3YXMgZW5wMyBpbiBmb3J0cmFuIGNv
ZGUKICAgICAgY29uc3QgRzRkb3VibGUgcG5DdXRPZmYgPSAwLjAwMTsgICAgIC8vIEdlVgogICAg
ICBjb25zdCBHNGRvdWJsZSBkdGFDdXRPZmYgPSAwLjAwMTsgICAgLy8gR2VWCiAgICAgIGNvbnN0
IEc0ZG91YmxlIGtpbmV0aWNNaW5pbXVtID0gMS5lLTY7CiAgICAgIGNvbnN0IEc0ZG91YmxlIGtp
bmV0aWNGYWN0b3IgPSAtMC4wMDU7CiAgICAgIAogICAgICBHNGRvdWJsZSBzcHJvYiA9IDAuMDsg
Ly8gc3Byb2IgPSBwcm9iYWJpbGl0eSBvZiBzZWxmLWFic29ycHRpb24gaW4gaGVhdnkgbW9sZWN1
bGVzCiAgICAgIGNvbnN0IEc0ZG91YmxlIGVrSW5jaWRlbnQgPSBvcmlnaW5hbEluY2lkZW50LT5H
ZXRLaW5ldGljRW5lcmd5KCkvR2VWOwogICAgICBpZiggZWtJbmNpZGVudCA+PSA1LjAgKXNwcm9i
ID0gRzRzdGQ6Om1pbiggMS4wLCAwLjYqbG9nKGVrSW5jaWRlbnQtNC4wKSApOwogICAgICAKICAg
ICAgaWYoIGVwbmIgPj0gcG5DdXRPZmYgKQogICAgICB7CiAgICAgICAgbnBuYiA9IFBvaXNzb24o
KDEuNSsxLjI1Km51bWJlcm9mRmluYWxTdGF0ZU51Y2xlb25zKSplcG5iLyhlcG5iK2VkdGEpKTsK
ICAgICAgICBpZiggbnVtYmVyb2ZGaW5hbFN0YXRlTnVjbGVvbnMgKyBucG5iID4gYXRvbWljV2Vp
Z2h0ICkKICAgICAgICAgIG5wbmIgPSBHNGludChhdG9taWNXZWlnaHQgLSBudW1iZXJvZkZpbmFs
U3RhdGVOdWNsZW9ucyk7CiAgICAgICAgbnBuYiA9IEc0c3RkOjptaW4oIG5wbmIsIDEyNy12ZWNM
ZW4gKTsKICAgICAgfQogICAgICBpZiggZWR0YSA+PSBkdGFDdXRPZmYgKQogICAgICB7CiAgICAg
ICAgbmR0YSA9IFBvaXNzb24oICgxLjUrMS4yNSpudW1iZXJvZkZpbmFsU3RhdGVOdWNsZW9ucykq
ZWR0YS8oZXBuYitlZHRhKSApOwogICAgICAgIG5kdGEgPSBHNHN0ZDo6bWluKCBuZHRhLCAxMjct
dmVjTGVuICk7CiAgICAgIH0KICAgICAgRzRkb3VibGUgc3BhbGwgPSBudW1iZXJvZkZpbmFsU3Rh
dGVOdWNsZW9uczsKICAgICAgLy8gREVCVUdHSU5HIC0tPiBEdW1wRnJhbWVzOjpEdW1wRnJhbWUo
dmVjLCB2ZWNMZW4pOwogICAgICBBZGRCbGFja1RyYWNrUGFydGljbGVzKCBlcG5iLCBucG5iLCBl
ZHRhLCBuZHRhLCBzcHJvYiwga2luZXRpY01pbmltdW0sIGtpbmV0aWNGYWN0b3IsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkT3JpZ2luYWwsIHNwYWxsLCB0YXJnZXROdWNs
ZXVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWMsIHZlY0xlbiApOwogICAgICAv
LyBERUJVR0dJTkcgLS0+IER1bXBGcmFtZXM6OkR1bXBGcmFtZSh2ZWMsIHZlY0xlbik7CiAgICB9
CiAgICBpZiggY2VudGVyb2ZtYXNzRW5lcmd5IDw9ICg0LjArRzRVbmlmb3JtUmFuZCgpKSApCiAg
ICAgIE1vbWVudHVtQ2hlY2soIG1vZGlmaWVkT3JpZ2luYWwsIGN1cnJlbnRQYXJ0aWNsZSwgdGFy
Z2V0UGFydGljbGUsIHZlYywgdmVjTGVuICk7CiAgICAvLwogICAgLy8gIGNhbGN1bGF0ZSB0aW1l
IGRlbGF5IGZvciBudWNsZWFyIHJlYWN0aW9ucwogICAgLy8KICAgIGlmKCAoYXRvbWljV2VpZ2h0
ID49IDEuNSkgJiYgKGF0b21pY1dlaWdodCA8PSAyMzAuMCkgJiYgKGVrT3JpZ2luYWwgPD0gMC4y
KSApCiAgICAgIGN1cnJlbnRQYXJ0aWNsZS5TZXRUT0YoIDEuMC01MDAuMCpleHAoLWVrT3JpZ2lu
YWwvMC4wNCkqbG9nKEc0VW5pZm9ybVJhbmQoKSkgKTsKICAgIGVsc2UKICAgICAgY3VycmVudFBh
cnRpY2xlLlNldFRPRiggMS4wICk7CiAgICAKICAgICAgLy8gREVCVUdHSU5HIC0tPiBEdW1wRnJh
bWVzOjpEdW1wRnJhbWUodmVjLCB2ZWNMZW4pOwogICAgcmV0dXJuIHRydWU7CiAgfQogCiB2b2lk
IEc0UmVhY3Rpb25EeW5hbWljczo6VHdvQm9keSgKICBHNEZhc3RWZWN0b3I8RzRSZWFjdGlvblBy
b2R1Y3QsMTI4PiAmdmVjLAogIEc0aW50ICZ2ZWNMZW4sCiAgRzRSZWFjdGlvblByb2R1Y3QgJm1v
ZGlmaWVkT3JpZ2luYWwsCiAgY29uc3QgRzREeW5hbWljUGFydGljbGUgKm9yaWdpbmFsVGFyZ2V0
LAogIEc0UmVhY3Rpb25Qcm9kdWN0ICZjdXJyZW50UGFydGljbGUsCiAgRzRSZWFjdGlvblByb2R1
Y3QgJnRhcmdldFBhcnRpY2xlLAogIGNvbnN0IEc0TnVjbGV1cyAmdGFyZ2V0TnVjbGV1cywKICBH
NGJvb2wgJnRhcmdldEhhc0NoYW5nZWQgKQogIHsKICAgIC8vIAogICAgLy8gZGVyaXZlZCBmcm9t
IG9yaWdpbmFsIEZPUlRSQU4gY29kZSBUV09CIGJ5IEguIEZlc2VmZWxkdCAoMTUtU2VwLTE5ODcp
CiAgICAvLwogICAgLy8gR2VuZXJhdGlvbiBvZiBtb21lbnRhIGZvciBlbGFzdGljIGFuZCBxdWFz
aS1lbGFzdGljIDIgYm9keSByZWFjdGlvbnMKICAgIC8vCiAgICAvLyBUaGUgc2ltcGxlIGZvcm11
bGEgZHMvZHx0fCA9IHMwKiBleHAoLWIqfHR8KSBpcyB1c2VkLgogICAgLy8gVGhlIGIgdmFsdWVz
IGFyZSBwYXJhbWV0cml6YXRpb25zIGZyb20gZXhwZXJpbWVudGFsIGRhdGEuCiAgICAvLyBOb3Qg
YXZhaWxhYmxlIHZhbHVlcyBhcmUgdGFrZW4gZnJvbSB0aG9zZSBvZiBzaW1pbGFyIHJlYWN0aW9u
cy4KICAgIC8vCiAgICBHNFBhcnRpY2xlRGVmaW5pdGlvbiAqYVBpTWludXMgPSBHNFBpb25NaW51
czo6UGlvbk1pbnVzKCk7CiAgICBHNFBhcnRpY2xlRGVmaW5pdGlvbiAqYVBpUGx1cyA9IEc0UGlv
blBsdXM6OlBpb25QbHVzKCk7CiAgICBHNFBhcnRpY2xlRGVmaW5pdGlvbiAqYVBpWmVybyA9IEc0
UGlvblplcm86OlBpb25aZXJvKCk7CiAgICBHNFBhcnRpY2xlRGVmaW5pdGlvbiAqYUthb25QbHVz
ID0gRzRLYW9uUGx1czo6S2FvblBsdXMoKTsKICAgIEc0UGFydGljbGVEZWZpbml0aW9uICphS2Fv
bk1pbnVzID0gRzRLYW9uTWludXM6Okthb25NaW51cygpOwogICAgRzRQYXJ0aWNsZURlZmluaXRp
b24gKmFLYW9uWmVyb1MgPSBHNEthb25aZXJvU2hvcnQ6Okthb25aZXJvU2hvcnQoKTsKICAgIEc0
UGFydGljbGVEZWZpbml0aW9uICphS2Fvblplcm9MID0gRzRLYW9uWmVyb0xvbmc6Okthb25aZXJv
TG9uZygpOwogICAgCiAgICAgIC8vIERFQlVHR0lORyAtLT4gRHVtcEZyYW1lczo6RHVtcEZyYW1l
KHZlYywgdmVjTGVuKTsgICAgCiAgICBzdGF0aWMgY29uc3QgRzRkb3VibGUgZXhweHUgPSAgODIu
OyAgICAgICAgICAgLy8gdXBwZXIgYm91bmQgZm9yIGFyZy4gb2YgZXhwCiAgICBzdGF0aWMgY29u
c3QgRzRkb3VibGUgZXhweGwgPSAtZXhweHU7ICAgICAgICAgLy8gbG93ZXIgYm91bmQgZm9yIGFy
Zy4gb2YgZXhwCiAgICAKICAgIGNvbnN0IEc0ZG91YmxlIGVrT3JpZ2luYWwgPSBtb2RpZmllZE9y
aWdpbmFsLkdldEtpbmV0aWNFbmVyZ3koKS9HZVY7CiAgICBjb25zdCBHNGRvdWJsZSBldE9yaWdp
bmFsID0gbW9kaWZpZWRPcmlnaW5hbC5HZXRUb3RhbEVuZXJneSgpL0dlVjsKICAgIGNvbnN0IEc0
ZG91YmxlIG1PcmlnaW5hbCA9IG1vZGlmaWVkT3JpZ2luYWwuR2V0TWFzcygpL0dlVjsKICAgIGNv
bnN0IEc0ZG91YmxlIHBPcmlnaW5hbCA9IG1vZGlmaWVkT3JpZ2luYWwuR2V0TW9tZW50dW0oKS5t
YWcoKS9HZVY7CiAgICBHNGRvdWJsZSBjdXJyZW50TWFzcyA9IGN1cnJlbnRQYXJ0aWNsZS5HZXRN
YXNzKCkvR2VWOwogICAgRzRkb3VibGUgdGFyZ2V0TWFzcyA9IHRhcmdldFBhcnRpY2xlLkdldERl
ZmluaXRpb24oKS0+R2V0UERHTWFzcygpL0dlVjsKLy8gICAgRzRkb3VibGUgY2VudGVyb2ZtYXNz
RW5lcmd5ID0gc3FydCggbU9yaWdpbmFsKm1PcmlnaW5hbCArCi8vICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRhcmdldE1hc3MqdGFyZ2V0TWFzcyArCi8vICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuMCp0YXJnZXRNYXNzKmV0T3JpZ2luYWwg
KTsgIC8vIEdlVgogICAgdGFyZ2V0TWFzcyA9IHRhcmdldFBhcnRpY2xlLkdldE1hc3MoKS9HZVY7
CiAgICBjb25zdCBHNGRvdWJsZSBhdG9taWNXZWlnaHQgPSB0YXJnZXROdWNsZXVzLkdldE4oKTsK
Ly8gICAgY29uc3QgRzRkb3VibGUgYXRvbWljTnVtYmVyID0gdGFyZ2V0TnVjbGV1cy5HZXRaKCk7
CiAgICAKICAgIEc0ZG91YmxlIGV0Q3VycmVudCA9IGN1cnJlbnRQYXJ0aWNsZS5HZXRUb3RhbEVu
ZXJneSgpL0dlVjsKICAgIEc0ZG91YmxlIHBDdXJyZW50ID0gY3VycmVudFBhcnRpY2xlLkdldFRv
dGFsTW9tZW50dW0oKS9HZVY7Ci8vICAgIEc0ZG91YmxlIGVrQ3VycmVudCA9IGN1cnJlbnRQYXJ0
aWNsZS5HZXRLaW5ldGljRW5lcmd5KCkvR2VWOwogICAgRzRkb3VibGUgY21FbmVyZ3kgPSBzcXJ0
KCBjdXJyZW50TWFzcypjdXJyZW50TWFzcyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRhcmdldE1hc3MqdGFyZ2V0TWFzcyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIu
MCp0YXJnZXRNYXNzKmV0Q3VycmVudCApOyAgLy8gaW4gR2VWCgogICAgLy9pZiggKHBPcmlnaW5h
bCA8IDAuMSkgfHwKICAgIC8vICAgIChjZW50ZXJvZm1hc3NFbmVyZ3kgPCAwLjAxKSApIC8vIDIt
Ym9keSBzY2F0dGVyaW5nIG5vdCBwb3NzaWJsZQogICAgLy8gQ29udGludWUgd2l0aCBvcmlnaW5h
bCBwYXJ0aWNsZSwgYnV0IHNwZW5kIHRoZSBudWNsZWFyIGV2YXBvcmF0aW9uIGVuZXJneQogICAg
Ly8gIHRhcmdldFBhcnRpY2xlLlNldE1hc3MoIDAuMCApOyAgLy8gZmxhZyB0aGF0IHRoZSB0YXJn
ZXQgZG9lc24ndCBleGlzdAogICAgLy9lbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
VHdvLWJvZHkgc2NhdHRlcmluZyBpcyBwb3NzaWJsZQoKICAgIGlmKCAocEN1cnJlbnQgPCAwLjEp
IHx8IChjbUVuZXJneSA8IDAuMDEpICkgLy8gMi1ib2R5IHNjYXR0ZXJpbmcgbm90IHBvc3NpYmxl
CiAgICB7CiAgICAgIHRhcmdldFBhcnRpY2xlLlNldE1hc3MoIDAuMCApOyAgLy8gZmxhZyB0aGF0
IHRoZSB0YXJnZXQgcGFydGljbGUgZG9lc24ndCBleGlzdAogICAgfQogICAgZWxzZQogICAgewov
LyBtb3ZlZCB0aGlzIGlmLWJsb2NrIHRvIGEgbGF0ZXIgc3RhZ2UsIGkuZS4gdG8gdGhlIGFzc2ln
bm1lbnQgb2YgdGhlIHNjYXR0ZXJpbmcgYW5nbGUKLy8gQEBAQEAgZG91YmxlLWNoZWNrLgovLyAg
ICAgIGlmKCB0YXJnZXRQYXJ0aWNsZS5HZXREZWZpbml0aW9uKCkgPT0gYUthb25NaW51cyB8fAov
LyAgICAgICAgICB0YXJnZXRQYXJ0aWNsZS5HZXREZWZpbml0aW9uKCkgPT0gYUthb25aZXJvTCB8
fAovLyAgICAgICAgICB0YXJnZXRQYXJ0aWNsZS5HZXREZWZpbml0aW9uKCkgPT0gYUthb25aZXJv
UyB8fAovLyAgICAgICAgICB0YXJnZXRQYXJ0aWNsZS5HZXREZWZpbml0aW9uKCkgPT0gYUthb25Q
bHVzIHx8Ci8vICAgICAgICAgIHRhcmdldFBhcnRpY2xlLkdldERlZmluaXRpb24oKSA9PSBhUGlN
aW51cyB8fAovLyAgICAgICAgICB0YXJnZXRQYXJ0aWNsZS5HZXREZWZpbml0aW9uKCkgPT0gYVBp
WmVybyB8fAovLyAgICAgICAgICB0YXJnZXRQYXJ0aWNsZS5HZXREZWZpbml0aW9uKCkgPT0gYVBp
UGx1cyApCi8vICAgICAgewovLyAgICAgICAgaWYoIEc0VW5pZm9ybVJhbmQoKSA8IDAuNSApCi8v
ICAgICAgICAgIHRhcmdldFBhcnRpY2xlLlNldERlZmluaXRpb25BbmRVcGRhdGVFKCBhTmV1dHJv
biApOwovLyAgICAgICAgZWxzZQovLyAgICAgICAgICB0YXJnZXRQYXJ0aWNsZS5TZXREZWZpbml0
aW9uQW5kVXBkYXRlRSggYVByb3RvbiApOwovLyAgICAgICAgdGFyZ2V0SGFzQ2hhbmdlZCA9IHRy
dWU7Ci8vICAgICAgICB0YXJnZXRNYXNzID0gdGFyZ2V0UGFydGljbGUuR2V0TWFzcygpL0dlVjsK
Ly8gICAgICB9CiAgICAgIC8vCiAgICAgIC8vIFNldCBtYXNzZXMgYW5kIG1vbWVudGEgZm9yIGZp
bmFsIHN0YXRlIHBhcnRpY2xlcwogICAgICAvLwogICAgICBHNGRvdWJsZSBwZiA9IGNtRW5lcmd5
KmNtRW5lcmd5ICsgdGFyZ2V0TWFzcyp0YXJnZXRNYXNzIC0gY3VycmVudE1hc3MqY3VycmVudE1h
c3M7CiAgICAgIHBmID0gcGYqcGYgLSA0KmNtRW5lcmd5KmNtRW5lcmd5KnRhcmdldE1hc3MqdGFy
Z2V0TWFzczsKICAgICAgCiAgICAgIGlmKCBwZiA8IDAuMDAxICkKICAgICAgICBHNEV4Y2VwdGlv
bigiRzRSZWFjdGlvbkR5bmFtaWNzOjpUd29Cb2R5OiBwZiBpcyB0b28gc21hbGwgIik7CiAgICAg
IAogICAgICBwZiA9IHNxcnQoIHBmICkgLyAoIDIuMCpjbUVuZXJneSApOwogICAgICAvLwogICAg
ICAvLyBTZXQgYmVhbSBhbmQgdGFyZ2V0IGluIGNlbnRyZSBvZiBtYXNzIHN5c3RlbQogICAgICAv
LwogICAgICBHNFJlYWN0aW9uUHJvZHVjdCBwc2V1ZG9QYXJ0aWNsZVszXTsKICAgICAgCiAgICAg
IGlmKCB0YXJnZXRQYXJ0aWNsZS5HZXREZWZpbml0aW9uKCkgPT0gYUthb25NaW51cyB8fAogICAg
ICAgICAgdGFyZ2V0UGFydGljbGUuR2V0RGVmaW5pdGlvbigpID09IGFLYW9uWmVyb0wgfHwKICAg
ICAgICAgIHRhcmdldFBhcnRpY2xlLkdldERlZmluaXRpb24oKSA9PSBhS2Fvblplcm9TIHx8CiAg
ICAgICAgICB0YXJnZXRQYXJ0aWNsZS5HZXREZWZpbml0aW9uKCkgPT0gYUthb25QbHVzIHx8CiAg
ICAgICAgICB0YXJnZXRQYXJ0aWNsZS5HZXREZWZpbml0aW9uKCkgPT0gYVBpTWludXMgfHwKICAg
ICAgICAgIHRhcmdldFBhcnRpY2xlLkdldERlZmluaXRpb24oKSA9PSBhUGlaZXJvIHx8CiAgICAg
ICAgICB0YXJnZXRQYXJ0aWNsZS5HZXREZWZpbml0aW9uKCkgPT0gYVBpUGx1cyApCiAgICAgIHsK
ICAgICAgICBwc2V1ZG9QYXJ0aWNsZVswXS5TZXRNYXNzKCB0YXJnZXRNYXNzKkdlViApOwogICAg
ICAgIHBzZXVkb1BhcnRpY2xlWzBdLlNldFRvdGFsRW5lcmd5KCBldE9yaWdpbmFsKkdlViApOwog
ICAgICAgIHBzZXVkb1BhcnRpY2xlWzBdLlNldE1vbWVudHVtKCAwLjAsIDAuMCwgcE9yaWdpbmFs
KkdlViApOwogICAgICAKICAgICAgICBwc2V1ZG9QYXJ0aWNsZVsxXS5TZXRNb21lbnR1bSggMC4w
LCAwLjAsIDAuMCApOwogICAgICAgIHBzZXVkb1BhcnRpY2xlWzFdLlNldE1hc3MoIG1PcmlnaW5h
bCpHZVYgKTsKICAgICAgICBwc2V1ZG9QYXJ0aWNsZVsxXS5TZXRLaW5ldGljRW5lcmd5KCAwLjAg
KTsKICAgICAgfQogICAgICBlbHNlCiAgICAgIHsKICAgICAgICBwc2V1ZG9QYXJ0aWNsZVswXS5T
ZXRNYXNzKCBtT3JpZ2luYWwqR2VWICk7CiAgICAgICAgcHNldWRvUGFydGljbGVbMF0uU2V0VG90
YWxFbmVyZ3koIGV0T3JpZ2luYWwqR2VWICk7CiAgICAgICAgcHNldWRvUGFydGljbGVbMF0uU2V0
TW9tZW50dW0oIDAuMCwgMC4wLCBwT3JpZ2luYWwqR2VWICk7CiAgICAgIAogICAgICAgIHBzZXVk
b1BhcnRpY2xlWzFdLlNldE1vbWVudHVtKCAwLjAsIDAuMCwgMC4wICk7CiAgICAgICAgcHNldWRv
UGFydGljbGVbMV0uU2V0TWFzcyggdGFyZ2V0TWFzcypHZVYgKTsKICAgICAgICBwc2V1ZG9QYXJ0
aWNsZVsxXS5TZXRLaW5ldGljRW5lcmd5KCAwLjAgKTsKICAgICAgfQogICAgICAvLwogICAgICAv
LyBUcmFuc2Zvcm0gaW50byBjZW50cmUgb2YgbWFzcyBzeXN0ZW0KICAgICAgLy8KICAgICAgcHNl
dWRvUGFydGljbGVbMl0gPSBwc2V1ZG9QYXJ0aWNsZVswXSArIHBzZXVkb1BhcnRpY2xlWzFdOwog
ICAgICBwc2V1ZG9QYXJ0aWNsZVswXS5Mb3JlbnR6KCBwc2V1ZG9QYXJ0aWNsZVswXSwgcHNldWRv
UGFydGljbGVbMl0gKTsKICAgICAgcHNldWRvUGFydGljbGVbMV0uTG9yZW50eiggcHNldWRvUGFy
dGljbGVbMV0sIHBzZXVkb1BhcnRpY2xlWzJdICk7CiAgICAgIC8vCiAgICAgIC8vIFNldCBmaW5h
bCBzdGF0ZSBtYXNzZXMgYW5kIGVuZXJnaWVzIGluIGNlbnRyZSBvZiBtYXNzIHN5c3RlbQogICAg
ICAvLwogICAgICBjdXJyZW50UGFydGljbGUuU2V0VG90YWxFbmVyZ3koIHNxcnQocGYqcGYrY3Vy
cmVudE1hc3MqY3VycmVudE1hc3MpKkdlViApOwogICAgICB0YXJnZXRQYXJ0aWNsZS5TZXRUb3Rh
bEVuZXJneSggc3FydChwZipwZit0YXJnZXRNYXNzKnRhcmdldE1hc3MpKkdlViApOwogICAgICAv
LwogICAgICAvLyBTZXQgfHR8IGFuZCB8dG1pbnwKICAgICAgLy8KICAgICAgY29uc3QgRzRkb3Vi
bGUgY2IgPSAwLjAxOwogICAgICBjb25zdCBHNGRvdWJsZSBiMSA9IDQuMjI1OwogICAgICBjb25z
dCBHNGRvdWJsZSBiMiA9IDEuNzk1OwogICAgICAvLwogICAgICAvLyBDYWxjdWxhdGUgc2xvcGUg
YiBmb3IgZWxhc3RpYyBzY2F0dGVyaW5nIG9uIHByb3Rvbi9uZXV0cm9uCiAgICAgIC8vCiAgICAg
IEc0ZG91YmxlIGIgPSBHNHN0ZDo6bWF4KCBjYiwgYjErYjIqbG9nKHBPcmlnaW5hbCkgKTsgICAg
IAogICAgICBHNGRvdWJsZSBidHJhbmcgPSBiICogNC4wICogcGYgKiBwc2V1ZG9QYXJ0aWNsZVsw
XS5HZXRNb21lbnR1bSgpLm1hZygpL0dlVjsKICAgICAgCiAgICAgIEc0ZG91YmxlIGV4aW5kdCA9
IC0xLjA7CiAgICAgIGV4aW5kdCArPSBleHAoRzRzdGQ6Om1heCgtYnRyYW5nLGV4cHhsKSk7CiAg
ICAgIC8vCiAgICAgIC8vIENhbGN1bGF0ZSBzcXIoc2luKHRldGEvMi4pIGFuZCBjb3ModGV0YSks
IHNldCBhemltdXRoIGFuZ2xlIHBoaQogICAgICAvLwogICAgICBHNGRvdWJsZSBjdGV0ID0gMS4w
ICsgMipsb2coIDEuMCtHNFVuaWZvcm1SYW5kKCkqZXhpbmR0ICkgLyBidHJhbmc7CiAgICAgIGlm
KCBmYWJzKGN0ZXQpID4gMS4wICljdGV0ID4gMC4wID8gY3RldCA9IDEuMCA6IGN0ZXQgPSAtMS4w
OwogICAgICBHNGRvdWJsZSBzdGV0ID0gc3FydCggKDEuMC1jdGV0KSooMS4wK2N0ZXQpICk7CiAg
ICAgIEc0ZG91YmxlIHBoaSA9IHR3b3BpICogRzRVbmlmb3JtUmFuZCgpOwogICAgICAvLwogICAg
ICAvLyBDYWxjdWxhdGUgZmluYWwgc3RhdGUgbW9tZW50YSBpbiBjZW50cmUgb2YgbWFzcyBzeXN0
ZW0KICAgICAgLy8KICAgICAgaWYoIHRhcmdldFBhcnRpY2xlLkdldERlZmluaXRpb24oKSA9PSBh
S2Fvbk1pbnVzIHx8CiAgICAgICAgICB0YXJnZXRQYXJ0aWNsZS5HZXREZWZpbml0aW9uKCkgPT0g
YUthb25aZXJvTCB8fAogICAgICAgICAgdGFyZ2V0UGFydGljbGUuR2V0RGVmaW5pdGlvbigpID09
IGFLYW9uWmVyb1MgfHwKICAgICAgICAgIHRhcmdldFBhcnRpY2xlLkdldERlZmluaXRpb24oKSA9
PSBhS2FvblBsdXMgfHwKICAgICAgICAgIHRhcmdldFBhcnRpY2xlLkdldERlZmluaXRpb24oKSA9
PSBhUGlNaW51cyB8fAogICAgICAgICAgdGFyZ2V0UGFydGljbGUuR2V0RGVmaW5pdGlvbigpID09
IGFQaVplcm8gfHwKICAgICAgICAgIHRhcmdldFBhcnRpY2xlLkdldERlZmluaXRpb24oKSA9PSBh
UGlQbHVzICkKICAgICAgewogICAgICAgIGN1cnJlbnRQYXJ0aWNsZS5TZXRNb21lbnR1bSggLXBm
KnN0ZXQqc2luKHBoaSkqR2VWLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LXBmKnN0ZXQqY29zKHBoaSkqR2VWLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLXBmKmN0ZXQqR2VWICk7CiAgICAgIH0KICAgICAgZWxzZQogICAgICB7CiAgICAgICAgY3Vy
cmVudFBhcnRpY2xlLlNldE1vbWVudHVtKCBwZipzdGV0KnNpbihwaGkpKkdlViwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBmKnN0ZXQqY29zKHBoaSkqR2VWLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGYqY3RldCpHZVYgKTsKICAgICAgfQogICAg
ICB0YXJnZXRQYXJ0aWNsZS5TZXRNb21lbnR1bSggY3VycmVudFBhcnRpY2xlLkdldE1vbWVudHVt
KCkgKiAoLTEuMCkgKTsKICAgICAgLy8KICAgICAgLy8gVHJhbnNmb3JtIGludG8gbGFiIHN5c3Rl
bQogICAgICAvLwogICAgICBjdXJyZW50UGFydGljbGUuTG9yZW50eiggY3VycmVudFBhcnRpY2xl
LCBwc2V1ZG9QYXJ0aWNsZVsxXSApOwogICAgICB0YXJnZXRQYXJ0aWNsZS5Mb3JlbnR6KCB0YXJn
ZXRQYXJ0aWNsZSwgcHNldWRvUGFydGljbGVbMV0gKTsKICAgICAgCiAgICAgIERlZnMxKCBtb2Rp
ZmllZE9yaWdpbmFsLCBjdXJyZW50UGFydGljbGUsIHRhcmdldFBhcnRpY2xlLCB2ZWMsIHZlY0xl
biApOwogICAgICAKICAgICAgRzRkb3VibGUgcHAsIHBwMSwgZWtpbjsKICAgICAgaWYoIGF0b21p
Y1dlaWdodCA+PSAxLjUgKQogICAgICB7CiAgICAgICAgY29uc3QgRzRkb3VibGUgY2ZhID0gMC4w
MjUqKChhdG9taWNXZWlnaHQtMS4pLzEyMC4pKmV4cCgtKGF0b21pY1dlaWdodC0xLikvMTIwLik7
CiAgICAgICAgcHAxID0gY3VycmVudFBhcnRpY2xlLkdldE1vbWVudHVtKCkubWFnKCkvTWVWOwog
ICAgICAgIGlmKCBwcDEgPj0gMS4wICkKICAgICAgICB7CiAgICAgICAgICBla2luID0gY3VycmVu
dFBhcnRpY2xlLkdldEtpbmV0aWNFbmVyZ3koKS9NZVYgLSBjZmEqKDEuMCswLjUqbm9ybWFsKCkp
KkdlVjsKICAgICAgICAgIGVraW4gPSBHNHN0ZDo6bWF4KCAwLjAwMDEqR2VWLCBla2luICk7CiAg
ICAgICAgICBjdXJyZW50UGFydGljbGUuU2V0S2luZXRpY0VuZXJneSggZWtpbipNZVYgKTsKICAg
ICAgICAgIHBwID0gY3VycmVudFBhcnRpY2xlLkdldFRvdGFsTW9tZW50dW0oKS9NZVY7CiAgICAg
ICAgICBjdXJyZW50UGFydGljbGUuU2V0TW9tZW50dW0oIGN1cnJlbnRQYXJ0aWNsZS5HZXRNb21l
bnR1bSgpICogKHBwL3BwMSkgKTsKICAgICAgICB9CiAgICAgICAgcHAxID0gdGFyZ2V0UGFydGlj
bGUuR2V0TW9tZW50dW0oKS5tYWcoKS9NZVY7CiAgICAgICAgaWYoIHBwMSA+PSAxLjAgKQogICAg
ICAgIHsKICAgICAgICAgIGVraW4gPSB0YXJnZXRQYXJ0aWNsZS5HZXRLaW5ldGljRW5lcmd5KCkv
TWVWIC0gY2ZhKigxLjArbm9ybWFsKCkvMi4pKkdlVjsKICAgICAgICAgIGVraW4gPSBHNHN0ZDo6
bWF4KCAwLjAwMDEqR2VWLCBla2luICk7CiAgICAgICAgICB0YXJnZXRQYXJ0aWNsZS5TZXRLaW5l
dGljRW5lcmd5KCBla2luKk1lViApOwogICAgICAgICAgcHAgPSB0YXJnZXRQYXJ0aWNsZS5HZXRU
b3RhbE1vbWVudHVtKCkvTWVWOwogICAgICAgICAgdGFyZ2V0UGFydGljbGUuU2V0TW9tZW50dW0o
IHRhcmdldFBhcnRpY2xlLkdldE1vbWVudHVtKCkgKiAocHAvcHAxKSApOwogICAgICAgIH0KICAg
ICAgfQogICAgfQogICAgICAvLyBERUJVR0dJTkcgLS0+IER1bXBGcmFtZXM6OkR1bXBGcmFtZSh2
ZWMsIHZlY0xlbik7CiAgICBpZiggYXRvbWljV2VpZ2h0ID49IDEuNSApCiAgICB7CiAgICAgIC8v
IEFkZCBibGFjayB0cmFjayBwYXJ0aWNsZXMKICAgICAgLy8gIHRoZSBwcm9jZWR1cmUgaXMgc29t
ZXdoYXQgZGlmZmVyZW50IHRoYW4gaW4gVHdvQ2x1c3RlciBhbmQgR2VuZXJhdGVYYW5kUHQuCiAg
ICAgIC8vICBUaGUgcmVhc29uIGlzIHRoYXQgd2UgaGF2ZSB0byBhbHNvIHNpbXVsYXRlIHRoZSBu
dWNsZWFyIHJlYWN0aW9ucwogICAgICAvLyAgYXQgbG93IGVuZXJnaWVzIGxpa2UgYShoLHApYiwg
YShoLHAgcCliLCBhKGgsbiliIGV0Yy4KICAgICAgLy8KICAgICAgLy8gbnBuYiBpcyBudW1iZXIg
b2YgcHJvdG9uL25ldXRyb24gYmxhY2sgdHJhY2sgcGFydGljbGVzCiAgICAgIC8vIG5kdGEgaXMg
dGhlIG51bWJlciBvZiBkZXV0ZXJvbnMsIHRyaXRvbnMsIGFuZCBhbHBoYXMgcHJvZHVjZWQKICAg
ICAgLy8gZXBuYiBpcyB0aGUga2luZXRpYyBlbmVyZ3kgYXZhaWxhYmxlIGZvciBwcm90b24vbmV1
dHJvbiBibGFjayB0cmFjayBwYXJ0aWNsZXMKICAgICAgLy8gZWR0YSBpcyB0aGUga2luZXRpYyBl
bmVyZ3kgYXZhaWxhYmxlIGZvciBkZXV0ZXJvbi90cml0b24vYWxwaGEgcGFydGljbGVzCiAgICAg
IC8vCiAgICAgIEc0ZG91YmxlIGVwbmIsIGVkdGE7CiAgICAgIEc0aW50IG5wbmI9MCwgbmR0YT0w
OwogICAgICAKICAgICAgZXBuYiA9IHRhcmdldE51Y2xldXMuR2V0UE5CbGFja1RyYWNrRW5lcmd5
KCk7ICAgICAgICAgICAgLy8gd2FzIGVucDEgaW4gZm9ydHJhbiBjb2RlCiAgICAgIGVkdGEgPSB0
YXJnZXROdWNsZXVzLkdldERUQUJsYWNrVHJhY2tFbmVyZ3koKTsgICAgICAgICAgIC8vIHdhcyBl
bnAzIGluIGZvcnRyYW4gY29kZQogICAgICBjb25zdCBHNGRvdWJsZSBwbkN1dE9mZiA9IDAuMDAw
MTsgICAgICAgLy8gR2VWCiAgICAgIGNvbnN0IEc0ZG91YmxlIGR0YUN1dE9mZiA9IDAuMDAwMTsg
ICAgICAvLyBHZVYKICAgICAgY29uc3QgRzRkb3VibGUga2luZXRpY01pbmltdW0gPSAwLjAwMDE7
CiAgICAgIGNvbnN0IEc0ZG91YmxlIGtpbmV0aWNGYWN0b3IgPSAtMC4wMTA7CiAgICAgIEc0ZG91
YmxlIHNwcm9iID0gMC4wOyAvLyBzcHJvYiA9IHByb2JhYmlsaXR5IG9mIHNlbGYtYWJzb3JwdGlv
biBpbiBoZWF2eSBtb2xlY3VsZXMKICAgICAgaWYoIGVwbmIgPj0gcG5DdXRPZmYgKQogICAgICB7
CiAgICAgICAgbnBuYiA9IFBvaXNzb24oIGVwbmIvMC4wMiApOwogICAgICAgIGlmKCBucG5iID4g
YXRvbWljV2VpZ2h0IClucG5iID0gRzRpbnQoYXRvbWljV2VpZ2h0KTsKICAgICAgICBpZiggKGVw
bmIgPiBwbkN1dE9mZikgJiYgKG5wbmIgPD0gMCkgKW5wbmIgPSAxOwogICAgICAgIG5wbmIgPSBH
NHN0ZDo6bWluKCBucG5iLCAxMjctdmVjTGVuICk7CiAgICAgIH0KICAgICAgaWYoIGVkdGEgPj0g
ZHRhQ3V0T2ZmICkKICAgICAgewogICAgICAgIG5kdGEgPSBHNGludCgyLjAgKiBsb2coYXRvbWlj
V2VpZ2h0KSk7CiAgICAgICAgbmR0YSA9IEc0c3RkOjptaW4oIG5kdGEsIDEyNy12ZWNMZW4gKTsK
ICAgICAgfQogICAgICBHNGRvdWJsZSBzcGFsbCA9IDAuMDsKICAgICAgLy8gREVCVUdHSU5HIC0t
PiBEdW1wRnJhbWVzOjpEdW1wRnJhbWUodmVjLCB2ZWNMZW4pOwogICAgICBBZGRCbGFja1RyYWNr
UGFydGljbGVzKCBlcG5iLCBucG5iLCBlZHRhLCBuZHRhLCBzcHJvYiwga2luZXRpY01pbmltdW0s
IGtpbmV0aWNGYWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkT3Jp
Z2luYWwsIHNwYWxsLCB0YXJnZXROdWNsZXVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2ZWMsIHZlY0xlbiApOwogICAgICAvLyBERUJVR0dJTkcgLS0+IER1bXBGcmFtZXM6OkR1bXBG
cmFtZSh2ZWMsIHZlY0xlbik7CiAgICB9CiAgICAvLwogICAgLy8gIGNhbGN1bGF0ZSB0aW1lIGRl
bGF5IGZvciBudWNsZWFyIHJlYWN0aW9ucwogICAgLy8KICAgIGlmKCAoYXRvbWljV2VpZ2h0ID49
IDEuNSkgJiYgKGF0b21pY1dlaWdodCA8PSAyMzAuMCkgJiYgKGVrT3JpZ2luYWwgPD0gMC4yKSAp
CiAgICAgIGN1cnJlbnRQYXJ0aWNsZS5TZXRUT0YoIDEuMC01MDAuMCpleHAoLWVrT3JpZ2luYWwv
MC4wNCkqbG9nKEc0VW5pZm9ybVJhbmQoKSkgKTsKICAgIGVsc2UKICAgICAgY3VycmVudFBhcnRp
Y2xlLlNldFRPRiggMS4wICk7CiAgICByZXR1cm47CiAgfQogCiBHNGRvdWJsZSBHNFJlYWN0aW9u
RHluYW1pY3M6OkdlbmVyYXRlTkJvZHlFdmVudCgKICBjb25zdCBHNGRvdWJsZSB0b3RhbEVuZXJn
eSwgICAgICAgICAgICAgICAgLy8gTWVWCiAgY29uc3QgRzRib29sIGNvbnN0YW50Q3Jvc3NTZWN0
aW9uLAogIEc0RmFzdFZlY3RvcjxHNFJlYWN0aW9uUHJvZHVjdCwxMjg+ICZ2ZWMsCiAgRzRpbnQg
JnZlY0xlbiApCiAgewovLyAgICAgIC8vIERFQlVHR0lORyAtLT4gRHVtcEZyYW1lczo6RHVtcEZy
YW1lKHZlYywgdmVjTGVuKTsKICAgIC8vIGRlcml2ZWQgZnJvbSBvcmlnaW5hbCBGT1JUUkFOIGNv
ZGUgUEhBU1AgYnkgSC4gRmVzZWZlbGR0ICgwMi1EZWMtMTk4NikKICAgIC8vIFJldHVybnMgdGhl
IHdlaWdodCBvZiB0aGUgZXZlbnQKICAgIC8vCiAgICBHNGludCBpOwogICAgY29uc3QgRzRkb3Vi
bGUgZXhweHUgPSAgODIuOyAgICAgICAgICAgLy8gdXBwZXIgYm91bmQgZm9yIGFyZy4gb2YgZXhw
CiAgICBjb25zdCBHNGRvdWJsZSBleHB4bCA9IC1leHB4dTsgICAgICAgICAvLyBsb3dlciBib3Vu
ZCBmb3IgYXJnLiBvZiBleHAKICAgIGlmKCB2ZWNMZW4gPCAyICkKICAgIHsKICAgICAgRzRjZXJy
IDw8ICIqKiogRXJyb3IgaW4gRzRSZWFjdGlvbkR5bmFtaWNzOjpHZW5lcmF0ZU5Cb2R5RXZlbnQi
IDw8IEc0ZW5kbDsKICAgICAgRzRjZXJyIDw8ICIgICAgbnVtYmVyIG9mIHBhcnRpY2xlcyA8IDIi
IDw8IEc0ZW5kbDsKICAgICAgRzRjZXJyIDw8ICJ0b3RhbEVuZXJneSA9ICIgPDwgdG90YWxFbmVy
Z3kgPDwgIk1lViwgdmVjTGVuID0gIiA8PCB2ZWNMZW4gPDwgRzRlbmRsOwogICAgICByZXR1cm4g
LTEuMDsKICAgIH0KICAgIEc0ZG91YmxlIG1hc3NbMThdOyAgICAvLyBtYXNzIG9mIGVhY2ggcGFy
dGljbGUKICAgIEc0ZG91YmxlIGVuZXJneVsxOF07ICAvLyB0b3RhbCBlbmVyZ3kgb2YgZWFjaCBw
YXJ0aWNsZQogICAgRzRkb3VibGUgcGNtWzNdWzE4XTsgICAgICAgICAgIC8vIHBjbSBpcyBhbiBh
cnJheSB3aXRoIDMgcm93cyBhbmQgdmVjTGVuIGNvbHVtbnMKICAgIC8vRzRkb3VibGUgKm1hc3Mg
PSBuZXcgRzRkb3VibGUgW3ZlY0xlbl07ICAgIC8vIG1hc3Mgb2YgZWFjaCBwYXJ0aWNsZQogICAg
Ly9HNGRvdWJsZSAqZW5lcmd5ID0gbmV3IEc0ZG91YmxlIFt2ZWNMZW5dOyAgLy8gdG90YWwgZW5l
cmd5IG9mIGVhY2ggcGFydGljbGUKICAgIC8vRzRkb3VibGUgKipwY207ICAgICAgICAgICAvLyBw
Y20gaXMgYW4gYXJyYXkgd2l0aCAzIHJvd3MgYW5kIHZlY0xlbiBjb2x1bW5zCiAgICAvL3BjbSA9
IG5ldyBHNGRvdWJsZSAqIFszXTsKICAgIC8vZm9yKCBpPTA7IGk8MzsgKytpIClwY21baV0gPSBu
ZXcgRzRkb3VibGUgW3ZlY0xlbl07CiAgICAKICAgIEc0ZG91YmxlIHRvdGFsTWFzcyA9IDAuMDsK
ICAgIEc0ZG91YmxlIHNtWzE4XTsKICAgIC8vRzRkb3VibGUgKnNtID0gbmV3IEc0ZG91YmxlIFt2
ZWNMZW5dOwogICAgCiAgICBmb3IoIGk9MDsgaTx2ZWNMZW47ICsraSApCiAgICB7CiAgICAgIG1h
c3NbaV0gPSB2ZWNbaV0tPkdldE1hc3MoKS9HZVY7CiAgICAgIHZlY1tpXS0+U2V0TW9tZW50dW0o
IDAuMCwgMC4wLCAwLjAgKTsKICAgICAgcGNtWzBdW2ldID0gMC4wOyAgICAgIC8vIHgtbW9tZW50
dW0gb2YgaS10aCBwYXJ0aWNsZQogICAgICBwY21bMV1baV0gPSAwLjA7ICAgICAgLy8geS1tb21l
bnR1bSBvZiBpLXRoIHBhcnRpY2xlCiAgICAgIHBjbVsyXVtpXSA9IDAuMDsgICAgICAvLyB6LW1v
bWVudHVtIG9mIGktdGggcGFydGljbGUKICAgICAgZW5lcmd5W2ldID0gbWFzc1tpXTsgIC8vIHRv
dGFsIGVuZXJneSBvZiBpLXRoIHBhcnRpY2xlCiAgICAgIHRvdGFsTWFzcyArPSBtYXNzW2ldOwog
ICAgICBzbVtpXSA9IHRvdGFsTWFzczsKICAgIH0KICAgIEc0ZG91YmxlIHRvdGFsRSA9IHRvdGFs
RW5lcmd5L0dlVjsKICAgIGlmKCB0b3RhbE1hc3MgPiB0b3RhbEUgKQogICAgewogICAgICAvL0c0
Y2VyciA8PCAiKioqIEVycm9yIGluIEc0UmVhY3Rpb25EeW5hbWljczo6R2VuZXJhdGVOQm9keUV2
ZW50IiA8PCBHNGVuZGw7CiAgICAgIC8vRzRjZXJyIDw8ICIgICAgdG90YWwgbWFzcyAoIiA8PCB0
b3RhbE1hc3MqR2VWIDw8ICJNZVYpID4gdG90YWwgZW5lcmd5ICgiCiAgICAgIC8vICAgICA8PCB0
b3RhbEVuZXJneSA8PCAiTWVWKSIgPDwgRzRlbmRsOwogICAgICB0b3RhbEUgPSB0b3RhbE1hc3M7
CiAgICAgIC8vZGVsZXRlIFtdIG1hc3M7CiAgICAgIC8vZGVsZXRlIFtdIGVuZXJneTsKICAgICAg
Ly9mb3IoIGk9MDsgaTwzOyArK2kgKWRlbGV0ZSBbXSBwY21baV07CiAgICAgIC8vZGVsZXRlIFtd
IHBjbTsKICAgICAgLy9kZWxldGUgW10gc207CiAgICAgIHJldHVybiAtMS4wOwogICAgfQogICAg
RzRkb3VibGUga2luZXRpY0VuZXJneSA9IHRvdGFsRSAtIHRvdGFsTWFzczsKICAgIEc0ZG91Ymxl
IGVtbVsxOF07CiAgICAvL0c0ZG91YmxlICplbW0gPSBuZXcgRzRkb3VibGUgW3ZlY0xlbl07CiAg
ICBlbW1bMF0gPSBtYXNzWzBdOwogICAgZW1tW3ZlY0xlbi0xXSA9IHRvdGFsRTsKICAgIGlmKCB2
ZWNMZW4gPiAyICkgICAgICAgICAgLy8gdGhlIHJhbmRvbSBudW1iZXJzIGFyZSBzb3J0ZWQKICAg
IHsKICAgICAgRzRkb3VibGUgcmFuWzE4XTsKICAgICAgZm9yKCBpPTA7IGk8dmVjTGVuOyArK2kg
KXJhbltpXSA9IEc0VW5pZm9ybVJhbmQoKTsKICAgICAgZm9yKCBpPTA7IGk8dmVjTGVuLTI7ICsr
aSApCiAgICAgIHsKICAgICAgICBmb3IoIEc0aW50IGo9dmVjTGVuLTI7IGo+aTsgLS1qICkKICAg
ICAgICB7CiAgICAgICAgICBpZiggcmFuW2ldID4gcmFuW2pdICkKICAgICAgICAgIHsKICAgICAg
ICAgICAgRzRkb3VibGUgdGVtcCA9IHJhbltpXTsKICAgICAgICAgICAgcmFuW2ldID0gcmFuW2pd
OwogICAgICAgICAgICByYW5bal0gPSB0ZW1wOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAg
fQogICAgICBmb3IoIGk9MTsgaTx2ZWNMZW4tMTsgKytpICllbW1baV0gPSByYW5baS0xXSpraW5l
dGljRW5lcmd5ICsgc21baV07CiAgICB9CiAgICAvLyAgIFdlaWdodCBpcyB0aGUgc3VtIG9mIGxv
Z2FyaXRobXMgb2YgdGVybXMgaW5zdGVhZCBvZiB0aGUgcHJvZHVjdCBvZiB0ZXJtcwogICAgRzRi
b29sIGx6ZXJvID0gdHJ1ZTsgICAgCiAgICBHNGRvdWJsZSB3dG1heCA9IDAuMDsKICAgIGlmKCBj
b25zdGFudENyb3NzU2VjdGlvbiApICAgICAvLyB0aGlzIGlzIEtHRU5FVj0xIGluIFBIQVNQCiAg
ICB7CiAgICAgIEc0ZG91YmxlIGVtbWF4ID0ga2luZXRpY0VuZXJneSArIG1hc3NbMF07CiAgICAg
IEc0ZG91YmxlIGVtbWluID0gMC4wOwogICAgICBmb3IoIGk9MTsgaTx2ZWNMZW47ICsraSApCiAg
ICAgIHsKICAgICAgICBlbW1pbiArPSBtYXNzW2ktMV07CiAgICAgICAgZW1tYXggKz0gbWFzc1tp
XTsKICAgICAgICBHNGRvdWJsZSB3dGZjID0gMC4wOwogICAgICAgIGlmKCBlbW1heCplbW1heCA+
IDAuMCApCiAgICAgICAgewogICAgICAgICAgRzRkb3VibGUgYXJnID0gZW1tYXgqZW1tYXgKICAg
ICAgICAgICAgKyAoZW1taW4qZW1taW4tbWFzc1tpXSptYXNzW2ldKSooZW1taW4qZW1taW4tbWFz
c1tpXSptYXNzW2ldKS8oZW1tYXgqZW1tYXgpCiAgICAgICAgICAgIC0gMi4wKihlbW1pbiplbW1p
bittYXNzW2ldKm1hc3NbaV0pOwogICAgICAgICAgaWYoIGFyZyA+IDAuMCApd3RmYyA9IDAuNSpz
cXJ0KCBhcmcgKTsKICAgICAgICB9CiAgICAgICAgaWYoIHd0ZmMgPT0gMC4wICkKICAgICAgICB7
CiAgICAgICAgICBsemVybyA9IGZhbHNlOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAg
ICAgIHd0bWF4ICs9IGxvZyggd3RmYyApOwogICAgICB9CiAgICAgIGlmKCBsemVybyApCiAgICAg
ICAgd3RtYXggPSAtd3RtYXg7CiAgICAgIGVsc2UKICAgICAgICB3dG1heCA9IGV4cHh1OwogICAg
fQogICAgZWxzZQogICAgewogICAgICAvLyAgIGZmcShuKSA9IHBpKigyKnBpKV4obi0yKS8obi0y
KSEKICAgICAgY29uc3QgRzRkb3VibGUgZmZxWzE4XSA9IHsgMC4sIDMuMTQxNTkyLCAxOS43Mzky
MSwgNjIuMDEyNTUsIDEyOS44Nzg4LCAyMDQuMDEzMSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMjU2LjM3MDQsIDI2OC40NzA1LCAyNDAuOTc4MCwgMTg5LjI2MzcsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDEzMi4xMzA4LCAgODMuMDIwMiwgIDQ3LjQyMTAsICAy
NC44Mjk1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMi4wMDA2LCAgIDUuMzg1
OCwgICAyLjI1NjAsICAgMC44ODU5IH07CiAgICAgIHd0bWF4ID0gbG9nKCBwb3coIGtpbmV0aWNF
bmVyZ3ksIHZlY0xlbi0yICkgKiBmZnFbdmVjTGVuLTFdIC8gdG90YWxFICk7CiAgICB9CiAgICBs
emVybyA9IHRydWU7CiAgICBHNGRvdWJsZSBwZFs1MF07CiAgICAvL0c0ZG91YmxlICpwZCA9IG5l
dyBHNGRvdWJsZSBbdmVjTGVuLTFdOwogICAgZm9yKCBpPTA7IGk8dmVjTGVuLTE7ICsraSApCiAg
ICB7CiAgICAgIHBkW2ldID0gMC4wOwogICAgICBpZiggZW1tW2krMV0qZW1tW2krMV0gPiAwLjAg
KQogICAgICB7CiAgICAgICAgRzRkb3VibGUgYXJnID0gZW1tW2krMV0qZW1tW2krMV0KICAgICAg
ICAgICsgKGVtbVtpXSplbW1baV0tbWFzc1tpKzFdKm1hc3NbaSsxXSkqKGVtbVtpXSplbW1baV0t
bWFzc1tpKzFdKm1hc3NbaSsxXSkKICAgICAgICAgICAgLyhlbW1baSsxXSplbW1baSsxXSkKICAg
ICAgICAgIC0gMi4wKihlbW1baV0qZW1tW2ldK21hc3NbaSsxXSptYXNzW2krMV0pOwogICAgICAg
IGlmKCBhcmcgPiAwLjAgKXBkW2ldID0gMC41KnNxcnQoIGFyZyApOwogICAgICB9CiAgICAgIGlm
KCBwZFtpXSA8PSAwLjAgKSAgICAvLyAgY2hhbmdlZCBmcm9tICA9PSAgb24gMDIgQXByaWwgOTgK
ICAgICAgICBsemVybyA9IGZhbHNlOwogICAgICBlbHNlCiAgICAgICAgd3RtYXggKz0gbG9nKCBw
ZFtpXSApOwogICAgfQogICAgRzRkb3VibGUgd2VpZ2h0ID0gMC4wOyAgICAgICAgICAgLy8gd2Vp
Z2h0IGlzIHJldHVybmVkIGJ5IEdlbmVyYXRlTkJvZHlFdmVudAogICAgaWYoIGx6ZXJvICl3ZWln
aHQgPSBleHAoIEc0c3RkOjptYXgoRzRzdGQ6Om1pbih3dG1heCxleHB4dSksZXhweGwpICk7CiAg
ICAKICAgIEc0ZG91YmxlIGJhbmcsIGNiLCBzYiwgczAsIHMxLCBzMiwgYywgcywgZXN5cywgYSwg
YiwgZ2FtYSwgYmV0YTsKICAgIHBjbVswXVswXSA9IDAuMDsKICAgIHBjbVsxXVswXSA9IHBkWzBd
OwogICAgcGNtWzJdWzBdID0gMC4wOwogICAgZm9yKCBpPTE7IGk8dmVjTGVuOyArK2kgKQogICAg
ewogICAgICBwY21bMF1baV0gPSAwLjA7CiAgICAgIHBjbVsxXVtpXSA9IC1wZFtpLTFdOwogICAg
ICBwY21bMl1baV0gPSAwLjA7CiAgICAgIGJhbmcgPSB0d29waSpHNFVuaWZvcm1SYW5kKCk7CiAg
ICAgIGNiID0gY29zKGJhbmcpOwogICAgICBzYiA9IHNpbihiYW5nKTsKICAgICAgYyA9IDIuMCpH
NFVuaWZvcm1SYW5kKCkgLSAxLjA7CiAgICAgIHMgPSBzcXJ0KCBmYWJzKCAxLjAtYypjICkgKTsK
ICAgICAgaWYoIGkgPCB2ZWNMZW4tMSApCiAgICAgIHsKICAgICAgICBlc3lzID0gc3FydChwZFtp
XSpwZFtpXSArIGVtbVtpXSplbW1baV0pOwogICAgICAgIGJldGEgPSBwZFtpXS9lc3lzOwogICAg
ICAgIGdhbWEgPSBlc3lzL2VtbVtpXTsKICAgICAgICBmb3IoIEc0aW50IGo9MDsgajw9aTsgKytq
ICkKICAgICAgICB7CiAgICAgICAgICBzMCA9IHBjbVswXVtqXTsKICAgICAgICAgIHMxID0gcGNt
WzFdW2pdOwogICAgICAgICAgczIgPSBwY21bMl1bal07CiAgICAgICAgICBlbmVyZ3lbal0gPSBz
cXJ0KCBzMCpzMCArIHMxKnMxICsgczIqczIgKyBtYXNzW2pdKm1hc3Nbal0gKTsKICAgICAgICAg
IGEgPSBzMCpjIC0gczEqczsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgcm90YXRpb24K
ICAgICAgICAgIHBjbVsxXVtqXSA9IHMwKnMgKyBzMSpjOwogICAgICAgICAgYiA9IHBjbVsyXVtq
XTsKICAgICAgICAgIHBjbVswXVtqXSA9IGEqY2IgLSBiKnNiOwogICAgICAgICAgcGNtWzJdW2pd
ID0gYSpzYiArIGIqY2I7CiAgICAgICAgICBwY21bMV1bal0gPSBnYW1hKihwY21bMV1bal0gKyBi
ZXRhKmVuZXJneVtqXSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGVsc2UKICAgICAgewogICAg
ICAgIGZvciggRzRpbnQgaj0wOyBqPD1pOyArK2ogKQogICAgICAgIHsKICAgICAgICAgIHMwID0g
cGNtWzBdW2pdOwogICAgICAgICAgczEgPSBwY21bMV1bal07CiAgICAgICAgICBzMiA9IHBjbVsy
XVtqXTsKICAgICAgICAgIGVuZXJneVtqXSA9IHNxcnQoIHMwKnMwICsgczEqczEgKyBzMipzMiAr
IG1hc3Nbal0qbWFzc1tqXSApOwogICAgICAgICAgYSA9IHMwKmMgLSBzMSpzOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vICByb3RhdGlvbgogICAgICAgICAgcGNtWzFdW2pdID0gczAqcyAr
IHMxKmM7CiAgICAgICAgICBiID0gcGNtWzJdW2pdOwogICAgICAgICAgcGNtWzBdW2pdID0gYSpj
YiAtIGIqc2I7CiAgICAgICAgICBwY21bMl1bal0gPSBhKnNiICsgYipjYjsKICAgICAgICB9CiAg
ICAgIH0KICAgIH0KICAgIGZvciggaT0wOyBpPHZlY0xlbjsgKytpICkKICAgIHsKICAgICAgdmVj
W2ldLT5TZXRNb21lbnR1bSggcGNtWzBdW2ldKkdlViwgcGNtWzFdW2ldKkdlViwgcGNtWzJdW2ld
KkdlViApOwogICAgICB2ZWNbaV0tPlNldFRvdGFsRW5lcmd5KCBlbmVyZ3lbaV0qR2VWICk7CiAg
ICB9CiAgICAvL2RlbGV0ZSBbXSBtYXNzOwogICAgLy9kZWxldGUgW10gZW5lcmd5OwogICAgLy9m
b3IoIGk9MDsgaTwzOyArK2kgKWRlbGV0ZSBbXSBwY21baV07CiAgICAvL2RlbGV0ZSBbXSBwY207
CiAgICAvL2RlbGV0ZSBbXSBlbW07CiAgICAvL2RlbGV0ZSBbXSBzbTsKICAgIC8vZGVsZXRlIFtd
IHBkOwogICAgICAvLyBERUJVR0dJTkcgLS0+IER1bXBGcmFtZXM6OkR1bXBGcmFtZSh2ZWMsIHZl
Y0xlbik7CiAgICByZXR1cm4gd2VpZ2h0OwogIH0KIAogRzRkb3VibGUKICAgRzRSZWFjdGlvbkR5
bmFtaWNzOjpub3JtYWwoKQogICB7CiAgICAgRzRkb3VibGUgcmFuID0gLTYuMDsKICAgICBmb3Io
IEc0aW50IGk9MDsgaTwxMjsgKytpIClyYW4gKz0gRzRVbmlmb3JtUmFuZCgpOwogICAgIHJldHVy
biByYW47CiAgIH0KIAogRzRpbnQKICAgRzRSZWFjdGlvbkR5bmFtaWNzOjpQb2lzc29uKCBHNGRv
dWJsZSB4ICkgIC8vIGdlbmVyYXRpb24gb2YgcG9pc3NvbiBkaXN0cmlidXRpb24KICAgewogICAg
IEc0aW50IGlyYW47CiAgICAgRzRkb3VibGUgcmFuOwogICAgIAogICAgIGlmKCB4ID4gOS45ICkg
ICAgLy8gdXNlIG5vcm1hbCBkaXN0cmlidXRpb24gd2l0aCBzaWdtYV4yID0gPHg+CiAgICAgICBp
cmFuID0gc3RhdGljX2Nhc3Q8RzRpbnQ+KEc0c3RkOjptYXgoIDAuMCwgeCtub3JtYWwoKSpzcXJ0
KHgpICkgKTsKICAgICBlbHNlIHsKICAgICAgRzRpbnQgbW0gPSBHNGludCg1LjAqeCk7CiAgICAg
IGlmKCBtbSA8PSAwICkgICAvLyBmb3IgdmVyeSBzbWFsbCB4IHRyeSBpcmFuPTEsMiwzCiAgICAg
IHsKICAgICAgICBHNGRvdWJsZSBwMSA9IHgqZXhwKC14KTsKICAgICAgICBHNGRvdWJsZSBwMiA9
IHgqcDEvMi4wOwogICAgICAgIEc0ZG91YmxlIHAzID0geCpwMi8zLjA7CiAgICAgICAgcmFuID0g
RzRVbmlmb3JtUmFuZCgpOwogICAgICAgIGlmKCByYW4gPCBwMyApCiAgICAgICAgICBpcmFuID0g
MzsKICAgICAgICBlbHNlIGlmKCByYW4gPCBwMiApICAgLy8gdGhpcyBpcyBvcmlnaW5hbCBHZWlz
aGEsIGl0IHNob3VsZCBiZSByYW4gPCBwMitwMwogICAgICAgICAgaXJhbiA9IDI7CiAgICAgICAg
ZWxzZSBpZiggcmFuIDwgcDEgKSAgIC8vIHNob3VsZCBiZSByYW4gPCBwMStwMitwMwogICAgICAg
ICAgaXJhbiA9IDE7CiAgICAgICAgZWxzZQogICAgICAgICAgaXJhbiA9IDA7CiAgICAgIH0KICAg
ICAgZWxzZQogICAgICB7CiAgICAgICAgaXJhbiA9IDA7CiAgICAgICAgRzRkb3VibGUgciA9IGV4
cCgteCk7CiAgICAgICAgcmFuID0gRzRVbmlmb3JtUmFuZCgpOwogICAgICAgIGlmKCByYW4gPiBy
ICkKICAgICAgICB7CiAgICAgICAgICBHNGRvdWJsZSBycnI7CiAgICAgICAgICBHNGRvdWJsZSBy
ciA9IHI7CiAgICAgICAgICBmb3IoIEc0aW50IGk9MTsgaTw9bW07ICsraSApCiAgICAgICAgICB7
CiAgICAgICAgICAgIGlyYW4rKzsKICAgICAgICAgICAgaWYoIGkgPiA1ICkgICAvLyBTdGlybGlu
ZydzIGZvcm11bGEgZm9yIGxhcmdlIG51bWJlcnMKICAgICAgICAgICAgICBycnIgPSBleHAoaSps
b2coeCktKGkrMC41KSpsb2coKEc0ZG91YmxlKWkpK2ktMC45MTg5Mzg1KTsKICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgIHJyciA9IHBvdyh4LGkpL0ZhY3RvcmlhbChpKTsKICAgICAgICAg
ICAgcnIgKz0gcipycnI7CiAgICAgICAgICAgIGlmKCByYW4gPD0gcnIgKWJyZWFrOwogICAgICAg
ICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIGlyYW47CiAgfQogCiBHNGlu
dAogICBHNFJlYWN0aW9uRHluYW1pY3M6OkZhY3RvcmlhbCggRzRpbnQgbiApCiAgIHsgICAvLyBj
YWxjdWxhdGVzIGZhY3RvcmlhbCggbiApID0gbioobi0xKSoobi0yKSouLi4qMQogICAgIEc0aW50
IG0gPSBHNHN0ZDo6bWluKG4sMTApOwogICAgIEc0aW50IHJlc3VsdCA9IDE7CiAgICAgaWYoIG0g
PD0gMSApcmV0dXJuIHJlc3VsdDsKICAgICBmb3IoIEc0aW50IGk9MjsgaTw9bTsgKytpIClyZXN1
bHQgKj0gaTsKICAgICByZXR1cm4gcmVzdWx0OwogICB9CiAKIHZvaWQgRzRSZWFjdGlvbkR5bmFt
aWNzOjpEZWZzMSgKICAgY29uc3QgRzRSZWFjdGlvblByb2R1Y3QgJm1vZGlmaWVkT3JpZ2luYWws
CiAgIEc0UmVhY3Rpb25Qcm9kdWN0ICZjdXJyZW50UGFydGljbGUsCiAgIEc0UmVhY3Rpb25Qcm9k
dWN0ICZ0YXJnZXRQYXJ0aWNsZSwKICAgRzRGYXN0VmVjdG9yPEc0UmVhY3Rpb25Qcm9kdWN0LDEy
OD4gJnZlYywKICAgRzRpbnQgJnZlY0xlbiApCiAgewogICAgY29uc3QgRzRkb3VibGUgcGp4ID0g
bW9kaWZpZWRPcmlnaW5hbC5HZXRNb21lbnR1bSgpLngoKS9NZVY7CiAgICBjb25zdCBHNGRvdWJs
ZSBwankgPSBtb2RpZmllZE9yaWdpbmFsLkdldE1vbWVudHVtKCkueSgpL01lVjsKICAgIGNvbnN0
IEc0ZG91YmxlIHBqeiA9IG1vZGlmaWVkT3JpZ2luYWwuR2V0TW9tZW50dW0oKS56KCkvTWVWOwog
ICAgY29uc3QgRzRkb3VibGUgcCA9IG1vZGlmaWVkT3JpZ2luYWwuR2V0TW9tZW50dW0oKS5tYWco
KS9NZVY7CiAgICBpZiggcGp4KnBqeCtwankqcGp5ID4gMC4wICkKICAgIHsKICAgICAgRzRkb3Vi
bGUgY29zdCwgc2ludCwgcGgsIGNvc3AsIHNpbnAsIHBpeCwgcGl5LCBwaXo7CiAgICAgIGNvc3Qg
PSBwanovcDsKICAgICAgc2ludCA9IDAuNSAqICggc3FydChhYnMoKDEuMC1jb3N0KSooMS4wK2Nv
c3QpKSkgKyBzcXJ0KHBqeCpwangrcGp5KnBqeSkvcCApOwogICAgICBpZiggcGp5IDwgMC4wICkK
ICAgICAgICBwaCA9IDMqaGFsZnBpOwogICAgICBlbHNlCiAgICAgICAgcGggPSBoYWxmcGk7CiAg
ICAgIGlmKCBhYnMoIHBqeCApID4gMC4wMDEqTWVWIClwaCA9IGF0YW4yKHBqeSxwangpOwogICAg
ICBjb3NwID0gY29zKHBoKTsKICAgICAgc2lucCA9IHNpbihwaCk7CiAgICAgIHBpeCA9IGN1cnJl
bnRQYXJ0aWNsZS5HZXRNb21lbnR1bSgpLngoKS9NZVY7CiAgICAgIHBpeSA9IGN1cnJlbnRQYXJ0
aWNsZS5HZXRNb21lbnR1bSgpLnkoKS9NZVY7CiAgICAgIHBpeiA9IGN1cnJlbnRQYXJ0aWNsZS5H
ZXRNb21lbnR1bSgpLnooKS9NZVY7CiAgICAgIGN1cnJlbnRQYXJ0aWNsZS5TZXRNb21lbnR1bSgg
Y29zdCpjb3NwKnBpeCpNZVYgLSBzaW5wKnBpeStzaW50KmNvc3AqcGl6Kk1lViwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb3N0KnNpbnAqcGl4Kk1lViArIGNvc3AqcGl5K3Np
bnQqc2lucCpwaXoqTWVWLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1zaW50
KnBpeCpNZVYgICAgICsgY29zdCpwaXoqTWVWICk7CiAgICAgIHBpeCA9IHRhcmdldFBhcnRpY2xl
LkdldE1vbWVudHVtKCkueCgpL01lVjsKICAgICAgcGl5ID0gdGFyZ2V0UGFydGljbGUuR2V0TW9t
ZW50dW0oKS55KCkvTWVWOwogICAgICBwaXogPSB0YXJnZXRQYXJ0aWNsZS5HZXRNb21lbnR1bSgp
LnooKS9NZVY7CiAgICAgIHRhcmdldFBhcnRpY2xlLlNldE1vbWVudHVtKCBjb3N0KmNvc3AqcGl4
Kk1lViAtIHNpbnAqcGl5K3NpbnQqY29zcCpwaXoqTWVWLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29zdCpzaW5wKnBpeCpNZVYgKyBjb3NwKnBpeStzaW50KnNpbnAqcGl6Kk1l
ViwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1zaW50KnBpeCpNZVYgICAgICsg
Y29zdCpwaXoqTWVWICk7CiAgICAgIGZvciggRzRpbnQgaT0wOyBpPHZlY0xlbjsgKytpICkKICAg
ICAgewogICAgICAgIHBpeCA9IHZlY1tpXS0+R2V0TW9tZW50dW0oKS54KCkvTWVWOwogICAgICAg
IHBpeSA9IHZlY1tpXS0+R2V0TW9tZW50dW0oKS55KCkvTWVWOwogICAgICAgIHBpeiA9IHZlY1tp
XS0+R2V0TW9tZW50dW0oKS56KCkvTWVWOwogICAgICAgIHZlY1tpXS0+U2V0TW9tZW50dW0oIGNv
c3QqY29zcCpwaXgqTWVWIC0gc2lucCpwaXkrc2ludCpjb3NwKnBpeipNZVYsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29zdCpzaW5wKnBpeCpNZVYgKyBjb3NwKnBpeStzaW50KnNpbnAq
cGl6Kk1lViwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtc2ludCpwaXgqTWVWICAgICAr
IGNvc3QqcGl6Kk1lViApOwogICAgICB9CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgIGlmKCBw
anogPCAwLjAgKQogICAgICB7CiAgICAgICAgY3VycmVudFBhcnRpY2xlLlNldE1vbWVudHVtKCAt
Y3VycmVudFBhcnRpY2xlLkdldE1vbWVudHVtKCkueigpICk7CiAgICAgICAgdGFyZ2V0UGFydGlj
bGUuU2V0TW9tZW50dW0oIC10YXJnZXRQYXJ0aWNsZS5HZXRNb21lbnR1bSgpLnooKSApOwogICAg
ICAgIGZvciggRzRpbnQgaT0wOyBpPHZlY0xlbjsgKytpICkKICAgICAgICAgIHZlY1tpXS0+U2V0
TW9tZW50dW0oIC12ZWNbaV0tPkdldE1vbWVudHVtKCkueigpICk7CiAgICAgIH0KICAgIH0KICB9
CiAKIHZvaWQgRzRSZWFjdGlvbkR5bmFtaWNzOjpSb3RhdGUoCiAgY29uc3QgRzRkb3VibGUgbnVt
YmVyb2ZGaW5hbFN0YXRlTnVjbGVvbnMsCiAgY29uc3QgRzRUaHJlZVZlY3RvciAmdGVtcCwKICBj
b25zdCBHNFJlYWN0aW9uUHJvZHVjdCAmbW9kaWZpZWRPcmlnaW5hbCwgLy8gRmVybWkgbW90aW9u
ICYgZXZhcC4gZWZmZWN0IGluY2x1ZGVkCiAgY29uc3QgRzREeW5hbWljUGFydGljbGUgKm9yaWdp
bmFsSW5jaWRlbnQsIC8vIG9yaWdpbmFsIGluY2lkZW50IHBhcnRpY2xlCiAgY29uc3QgRzROdWNs
ZXVzICZ0YXJnZXROdWNsZXVzLAogIEc0UmVhY3Rpb25Qcm9kdWN0ICZjdXJyZW50UGFydGljbGUs
CiAgRzRSZWFjdGlvblByb2R1Y3QgJnRhcmdldFBhcnRpY2xlLAogIEc0RmFzdFZlY3RvcjxHNFJl
YWN0aW9uUHJvZHVjdCwxMjg+ICZ2ZWMsCiAgRzRpbnQgJnZlY0xlbiApCiAgewogICAgLy8gZGVy
aXZlZCBmcm9tIG9yaWdpbmFsIEZPUlRSQU4gY29kZSBpbiBHRU5YUFQgYW5kIFRXT0NMVSBieSBI
LiBGZXNlZmVsZHQKICAgIC8vCiAgICAvLyAgIFJvdGF0ZSBpbiBkaXJlY3Rpb24gb2Ygei1heGlz
LCB0aGlzIGRvZXMgZGlzdHVyYiBpbiBzb21lIHdheSBvdXIKICAgIC8vICAgIGluY2x1c2l2ZSBk
aXN0cmlidXRpb25zLCBidXQgaXQgaXMgbmVjZXNzYXJ5IGZvciBtb21lbnR1bSBjb25zZXJ2YXRp
b24KICAgIC8vCiAgICBjb25zdCBHNGRvdWJsZSBhdG9taWNXZWlnaHQgPSB0YXJnZXROdWNsZXVz
LkdldE4oKTsKICAgIGNvbnN0IEc0ZG91YmxlIGxvZ1dlaWdodCA9IGxvZyhhdG9taWNXZWlnaHQp
OwogICAgCiAgICBHNFBhcnRpY2xlRGVmaW5pdGlvbiAqYVBpTWludXMgPSBHNFBpb25NaW51czo6
UGlvbk1pbnVzKCk7CiAgICBHNFBhcnRpY2xlRGVmaW5pdGlvbiAqYVBpUGx1cyA9IEc0UGlvblBs
dXM6OlBpb25QbHVzKCk7CiAgICBHNFBhcnRpY2xlRGVmaW5pdGlvbiAqYVBpWmVybyA9IEc0UGlv
blplcm86OlBpb25aZXJvKCk7CiAgICAKICAgIEc0aW50IGk7CiAgICBHNFRocmVlVmVjdG9yIHBz
ZXVkb1BhcnRpY2xlWzRdOwogICAgZm9yKCBpPTA7IGk8NDsgKytpIClwc2V1ZG9QYXJ0aWNsZVtp
XS5zZXQoMCwwLDApOwogICAgcHNldWRvUGFydGljbGVbMF0gPSBjdXJyZW50UGFydGljbGUuR2V0
TW9tZW50dW0oKQogICAgICAgICAgICAgICAgICAgICAgICArIHRhcmdldFBhcnRpY2xlLkdldE1v
bWVudHVtKCk7CiAgICBmb3IoIGk9MDsgaTx2ZWNMZW47ICsraSApCiAgICAgIHBzZXVkb1BhcnRp
Y2xlWzBdID0gcHNldWRvUGFydGljbGVbMF0gKyAodmVjW2ldLT5HZXRNb21lbnR1bSgpKTsKICAg
IC8vCiAgICAvLyAgU29tZSBzbWVhcmluZyBpbiB0cmFuc3ZlcnNlIGRpcmVjdGlvbiBmcm9tIEZl
cm1pIG1vdGlvbgogICAgLy8KICAgIEc0ZmxvYXQgcHAsIHBwMTsKICAgIEc0ZG91YmxlIGFsZWt3
LCBwLCBydGhudmUsIHBoaW52ZTsKICAgIEc0ZG91YmxlIHIxLCByMiwgYTEsIHJhbjEsIHJhbjIs
IHh4aCwgZXhoLCBweFRlbXAsIHB5VGVtcCwgcHpUZW1wOwogICAgCiAgICByMSA9IHR3b3BpKkc0
VW5pZm9ybVJhbmQoKTsKICAgIHIyID0gRzRVbmlmb3JtUmFuZCgpOwogICAgYTEgPSBzcXJ0KC0y
LjAqbG9nKHIyKSk7CiAgICByYW4xID0gYTEqc2luKHIxKSowLjAyMCpudW1iZXJvZkZpbmFsU3Rh
dGVOdWNsZW9ucypHZVY7CiAgICByYW4yID0gYTEqY29zKHIxKSowLjAyMCpudW1iZXJvZkZpbmFs
U3RhdGVOdWNsZW9ucypHZVY7CiAgICBHNFRocmVlVmVjdG9yIGZlcm1pKHJhbjEsIHJhbjIsIDAp
OwoKICAgIHBzZXVkb1BhcnRpY2xlWzBdID0gcHNldWRvUGFydGljbGVbMF0rZmVybWk7IC8vIGFs
bCBwYXJ0aWNsZXMgKyBmZXJtaQogICAgcHNldWRvUGFydGljbGVbMl0gPSB0ZW1wOyAvLyBvcmln
aW5hbCBpbiBjbXMgc3lzdGVtCiAgICBwc2V1ZG9QYXJ0aWNsZVszXSA9IHBzZXVkb1BhcnRpY2xl
WzBdOwogICAgCiAgICBwc2V1ZG9QYXJ0aWNsZVsxXSA9IHBzZXVkb1BhcnRpY2xlWzJdLmNyb3Nz
KHBzZXVkb1BhcnRpY2xlWzNdKTsKICAgIHBzZXVkb1BhcnRpY2xlWzJdID0gcHNldWRvUGFydGlj
bGVbM10uY3Jvc3MocHNldWRvUGFydGljbGVbMV0pOyAgICAKICAgIGZvcihHNGludCBpaT0xOyBp
aTw9MzsgaWkrKykKICAgIHsKICAgICAgcCA9IHBzZXVkb1BhcnRpY2xlW2lpXS5tYWcoKTsKICAg
ICAgaWYoIHAgPT0gMC4wICkKICAgICAgICBwc2V1ZG9QYXJ0aWNsZVtpaV09IEc0VGhyZWVWZWN0
b3IoIDAuMCwgMC4wLCAwLjAgKTsKICAgICAgZWxzZQogICAgICAgIHBzZXVkb1BhcnRpY2xlW2lp
XT0gcHNldWRvUGFydGljbGVbaWldICogKDEuL3ApOwogICAgfQogICAgCiAgICBweFRlbXAgPSBw
c2V1ZG9QYXJ0aWNsZVsxXS5kb3QoY3VycmVudFBhcnRpY2xlLkdldE1vbWVudHVtKCkpOwogICAg
cHlUZW1wID0gcHNldWRvUGFydGljbGVbMl0uZG90KGN1cnJlbnRQYXJ0aWNsZS5HZXRNb21lbnR1
bSgpKTsKICAgIHB6VGVtcCA9IHBzZXVkb1BhcnRpY2xlWzNdLmRvdChjdXJyZW50UGFydGljbGUu
R2V0TW9tZW50dW0oKSk7CiAgICBjdXJyZW50UGFydGljbGUuU2V0TW9tZW50dW0oIHB4VGVtcCwg
cHlUZW1wLCBwelRlbXAgKTsKICAgIAogICAgcHhUZW1wID0gcHNldWRvUGFydGljbGVbMV0uZG90
KHRhcmdldFBhcnRpY2xlLkdldE1vbWVudHVtKCkpOwogICAgcHlUZW1wID0gcHNldWRvUGFydGlj
bGVbMl0uZG90KHRhcmdldFBhcnRpY2xlLkdldE1vbWVudHVtKCkpOwogICAgcHpUZW1wID0gcHNl
dWRvUGFydGljbGVbM10uZG90KHRhcmdldFBhcnRpY2xlLkdldE1vbWVudHVtKCkpOwogICAgdGFy
Z2V0UGFydGljbGUuU2V0TW9tZW50dW0oIHB4VGVtcCwgcHlUZW1wLCBwelRlbXAgKTsKICAgIAog
ICAgZm9yKCBpPTA7IGk8dmVjTGVuOyArK2kgKQogICAgewogICAgICBweFRlbXAgPSBwc2V1ZG9Q
YXJ0aWNsZVsxXS5kb3QodmVjW2ldLT5HZXRNb21lbnR1bSgpKTsKICAgICAgcHlUZW1wID0gcHNl
dWRvUGFydGljbGVbMl0uZG90KHZlY1tpXS0+R2V0TW9tZW50dW0oKSk7CiAgICAgIHB6VGVtcCA9
IHBzZXVkb1BhcnRpY2xlWzNdLmRvdCh2ZWNbaV0tPkdldE1vbWVudHVtKCkpOwogICAgICB2ZWNb
aV0tPlNldE1vbWVudHVtKCBweFRlbXAsIHB5VGVtcCwgcHpUZW1wICk7CiAgICB9CiAgICAvLwog
ICAgLy8gIFJvdGF0ZSBpbiBkaXJlY3Rpb24gb2YgcHJpbWFyeSBwYXJ0aWNsZSwgc3VidHJhY3Qg
YmluZGluZyBlbmVyZ2llcwogICAgLy8gICBhbmQgbWFrZSBzb21lIGZ1cnRoZXIgY29ycmVjdGlv
bnMgaWYgcmVxdWlyZWQKICAgIC8vCiAgICBEZWZzMSggbW9kaWZpZWRPcmlnaW5hbCwgY3VycmVu
dFBhcnRpY2xlLCB0YXJnZXRQYXJ0aWNsZSwgdmVjLCB2ZWNMZW4gKTsKICAgIEc0ZG91YmxlIGVr
aW47CiAgICBHNGRvdWJsZSBkZWtpbiA9IDAuMDsKICAgIEc0ZG91YmxlIGVrMSA9IDAuMDsKICAg
IEc0aW50IG5waW9ucyA9IDA7CiAgICBpZiggYXRvbWljV2VpZ2h0ID49IDEuNSApICAgICAgICAg
ICAgLy8gc2VsZi1hYnNvcnB0aW9uIGluIGhlYXZ5IG1vbGVjdWxlcwogICAgewogICAgICAvLyBj
b3JyZWN0aW9ucyBmb3Igc2luZ2xlIHBhcnRpY2xlIHNwZWN0cmEgKHNob3dlciBwYXJ0aWNsZXMp
CiAgICAgIC8vCiAgICAgIGNvbnN0IEc0ZG91YmxlIGFsZW1bXSA9IHsgMS40MCwgMi4zMCwgMi43
MCwgMy4wMCwgMy40MCwgNC42MCwgNy4wMCB9OwogICAgICBjb25zdCBHNGRvdWJsZSB2YWwwW10g
PSB7IDAuMDAsIDAuNDAsIDAuNDgsIDAuNTEsIDAuNTQsIDAuNjAsIDAuNjUgfTsKICAgICAgYWxl
a3cgPSBsb2coIG9yaWdpbmFsSW5jaWRlbnQtPkdldEtpbmV0aWNFbmVyZ3koKS9HZVYgKTsKICAg
ICAgZXhoID0gMS4wOwogICAgICBpZiggYWxla3cgPiBhbGVtWzBdICkgICAvLyAgIGdldCBlbmVy
Z3kgYmluCiAgICAgIHsKICAgICAgICBleGggPSB2YWwwWzZdOwogICAgICAgIGZvciggRzRpbnQg
aj0xOyBqPDc7ICsraiApCiAgICAgICAgewogICAgICAgICAgaWYoIGFsZWt3IDwgYWxlbVtqXSAp
IC8vIHVzZSBsaW5lYXIgaW50ZXJwb2xhdGlvbi9leHRyYXBvbGF0aW9uCiAgICAgICAgICB7CiAg
ICAgICAgICAgIEc0ZG91YmxlIHJjbnZlID0gKHZhbDBbal0gLSB2YWwwW2otMV0pIC8gKGFsZW1b
al0gLSBhbGVtW2otMV0pOwogICAgICAgICAgICBleGggPSByY252ZSAqIGFsZWt3ICsgdmFsMFtq
LTFdIC0gcmNudmUgKiBhbGVtW2otMV07CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQog
ICAgICAgIH0KICAgICAgICBleGggPSAxLjAgLSBleGg7CiAgICAgIH0KICAgICAgY29uc3QgRzRk
b3VibGUgY2ZhID0gMC4wMjUqKChhdG9taWNXZWlnaHQtMS4pLzEyMC4pKmV4cCgtKGF0b21pY1dl
aWdodC0xLikvMTIwLik7CiAgICAgIGVraW4gPSBjdXJyZW50UGFydGljbGUuR2V0S2luZXRpY0Vu
ZXJneSgpL0dlViAtIGNmYSooMStub3JtYWwoKS8yLjApOwogICAgICBla2luID0gRzRzdGQ6Om1h
eCggMS4wZS02LCBla2luICk7CiAgICAgIHh4aCA9IDEuMDsKICAgICAgaWYoICggKG1vZGlmaWVk
T3JpZ2luYWwuR2V0RGVmaW5pdGlvbigpID09IGFQaVBsdXMpIHx8CiAgICAgICAgICAgIChtb2Rp
ZmllZE9yaWdpbmFsLkdldERlZmluaXRpb24oKSA9PSBhUGlNaW51cykgKSAmJgogICAgICAgICAg
KGN1cnJlbnRQYXJ0aWNsZS5HZXREZWZpbml0aW9uKCkgPT0gYVBpWmVybykgJiYKICAgICAgICAg
IChHNFVuaWZvcm1SYW5kKCkgPD0gbG9nV2VpZ2h0KSApeHhoID0gZXhoOwogICAgICBkZWtpbiAr
PSBla2luKigxLjAteHhoKTsKICAgICAgZWtpbiAqPSB4eGg7CiAgICAgIGlmKCAoY3VycmVudFBh
cnRpY2xlLkdldERlZmluaXRpb24oKSA9PSBhUGlQbHVzKSB8fAogICAgICAgICAgKGN1cnJlbnRQ
YXJ0aWNsZS5HZXREZWZpbml0aW9uKCkgPT0gYVBpWmVybykgfHwKICAgICAgICAgIChjdXJyZW50
UGFydGljbGUuR2V0RGVmaW5pdGlvbigpID09IGFQaU1pbnVzKSApCiAgICAgIHsKICAgICAgICAr
K25waW9uczsKICAgICAgICBlazEgKz0gZWtpbjsKICAgICAgfQogICAgICBjdXJyZW50UGFydGlj
bGUuU2V0S2luZXRpY0VuZXJneSggZWtpbipHZVYgKTsKICAgICAgcHAgPSBjdXJyZW50UGFydGlj
bGUuR2V0VG90YWxNb21lbnR1bSgpL01lVjsKICAgICAgcHAxID0gY3VycmVudFBhcnRpY2xlLkdl
dE1vbWVudHVtKCkubWFnKCkvTWVWOwogICAgICBpZiggcHAxIDwgMC4wMDEqTWVWICkKICAgICAg
ewogICAgICAgIHJ0aG52ZSA9IHBpKkc0VW5pZm9ybVJhbmQoKTsKICAgICAgICBwaGludmUgPSB0
d29waSpHNFVuaWZvcm1SYW5kKCk7CiAgICAgICAgY3VycmVudFBhcnRpY2xlLlNldE1vbWVudHVt
KCBwcCpzaW4ocnRobnZlKSpjb3MocGhpbnZlKSpNZVYsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwcCpzaW4ocnRobnZlKSpzaW4ocGhpbnZlKSpNZVYsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwcCpjb3MocnRobnZlKSpNZVYgKTsKICAgICAgfQog
ICAgICBlbHNlCiAgICAgICAgY3VycmVudFBhcnRpY2xlLlNldE1vbWVudHVtKCBjdXJyZW50UGFy
dGljbGUuR2V0TW9tZW50dW0oKSAqIChwcC9wcDEpICk7CiAgICAgIGVraW4gPSB0YXJnZXRQYXJ0
aWNsZS5HZXRLaW5ldGljRW5lcmd5KCkvR2VWIC0gY2ZhKigxK25vcm1hbCgpLzIuMCk7CiAgICAg
IGVraW4gPSBHNHN0ZDo6bWF4KCAxLjBlLTYsIGVraW4gKTsKICAgICAgeHhoID0gMS4wOwogICAg
ICBpZiggKCAobW9kaWZpZWRPcmlnaW5hbC5HZXREZWZpbml0aW9uKCkgPT0gYVBpUGx1cykgfHwK
ICAgICAgICAgICAgKG1vZGlmaWVkT3JpZ2luYWwuR2V0RGVmaW5pdGlvbigpID09IGFQaU1pbnVz
KSApICYmCiAgICAgICAgICAodGFyZ2V0UGFydGljbGUuR2V0RGVmaW5pdGlvbigpID09IGFQaVpl
cm8pICYmCiAgICAgICAgICAoRzRVbmlmb3JtUmFuZCgpIDwgbG9nV2VpZ2h0KSApeHhoID0gZXho
OwogICAgICBkZWtpbiArPSBla2luKigxLjAteHhoKTsKICAgICAgZWtpbiAqPSB4eGg7CiAgICAg
IGlmKCAodGFyZ2V0UGFydGljbGUuR2V0RGVmaW5pdGlvbigpID09IGFQaVBsdXMpIHx8CiAgICAg
ICAgICAodGFyZ2V0UGFydGljbGUuR2V0RGVmaW5pdGlvbigpID09IGFQaVplcm8pIHx8CiAgICAg
ICAgICAodGFyZ2V0UGFydGljbGUuR2V0RGVmaW5pdGlvbigpID09IGFQaU1pbnVzKSApCiAgICAg
IHsKICAgICAgICArK25waW9uczsKICAgICAgICBlazEgKz0gZWtpbjsKICAgICAgfQogICAgICB0
YXJnZXRQYXJ0aWNsZS5TZXRLaW5ldGljRW5lcmd5KCBla2luKkdlViApOwogICAgICBwcCA9IHRh
cmdldFBhcnRpY2xlLkdldFRvdGFsTW9tZW50dW0oKS9NZVY7CiAgICAgIHBwMSA9IHRhcmdldFBh
cnRpY2xlLkdldE1vbWVudHVtKCkubWFnKCkvTWVWOwogICAgICBpZiggcHAxIDwgMC4wMDEqTWVW
ICkKICAgICAgewogICAgICAgIHJ0aG52ZSA9IHBpKkc0VW5pZm9ybVJhbmQoKTsKICAgICAgICBw
aGludmUgPSB0d29waSpHNFVuaWZvcm1SYW5kKCk7CiAgICAgICAgdGFyZ2V0UGFydGljbGUuU2V0
TW9tZW50dW0oIHBwKnNpbihydGhudmUpKmNvcyhwaGludmUpKk1lViwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHAqc2luKHJ0aG52ZSkqc2luKHBoaW52ZSkqTWVWLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcCpjb3MocnRobnZlKSpNZVYgKTsKICAg
ICAgfQogICAgICBlbHNlCiAgICAgICAgdGFyZ2V0UGFydGljbGUuU2V0TW9tZW50dW0oIHRhcmdl
dFBhcnRpY2xlLkdldE1vbWVudHVtKCkgKiAocHAvcHAxKSApOwogICAgICBmb3IoIGk9MDsgaTx2
ZWNMZW47ICsraSApCiAgICAgIHsKICAgICAgICBla2luID0gdmVjW2ldLT5HZXRLaW5ldGljRW5l
cmd5KCkvR2VWIC0gY2ZhKigxK25vcm1hbCgpLzIuMCk7CiAgICAgICAgZWtpbiA9IEc0c3RkOjpt
YXgoIDEuMGUtNiwgZWtpbiApOwogICAgICAgIHh4aCA9IDEuMDsKICAgICAgICBpZiggKCAobW9k
aWZpZWRPcmlnaW5hbC5HZXREZWZpbml0aW9uKCkgPT0gYVBpUGx1cykgfHwKICAgICAgICAgICAg
ICAobW9kaWZpZWRPcmlnaW5hbC5HZXREZWZpbml0aW9uKCkgPT0gYVBpTWludXMpICkgJiYKICAg
ICAgICAgICAgKHZlY1tpXS0+R2V0RGVmaW5pdGlvbigpID09IGFQaVplcm8pICYmCiAgICAgICAg
ICAgIChHNFVuaWZvcm1SYW5kKCkgPCBsb2dXZWlnaHQpICl4eGggPSBleGg7CiAgICAgICAgZGVr
aW4gKz0gZWtpbiooMS4wLXh4aCk7CiAgICAgICAgZWtpbiAqPSB4eGg7CiAgICAgICAgaWYoICh2
ZWNbaV0tPkdldERlZmluaXRpb24oKSA9PSBhUGlQbHVzKSB8fAogICAgICAgICAgICAodmVjW2ld
LT5HZXREZWZpbml0aW9uKCkgPT0gYVBpWmVybykgfHwKICAgICAgICAgICAgKHZlY1tpXS0+R2V0
RGVmaW5pdGlvbigpID09IGFQaU1pbnVzKSApCiAgICAgICAgewogICAgICAgICAgKytucGlvbnM7
CiAgICAgICAgICBlazEgKz0gZWtpbjsKICAgICAgICB9CiAgICAgICAgdmVjW2ldLT5TZXRLaW5l
dGljRW5lcmd5KCBla2luKkdlViApOwogICAgICAgIHBwID0gdmVjW2ldLT5HZXRUb3RhbE1vbWVu
dHVtKCkvTWVWOwogICAgICAgIHBwMSA9IHZlY1tpXS0+R2V0TW9tZW50dW0oKS5tYWcoKS9NZVY7
CiAgICAgICAgaWYoIHBwMSA8IDAuMDAxKk1lViApCiAgICAgICAgewogICAgICAgICAgcnRobnZl
ID0gcGkqRzRVbmlmb3JtUmFuZCgpOwogICAgICAgICAgcGhpbnZlID0gdHdvcGkqRzRVbmlmb3Jt
UmFuZCgpOwogICAgICAgICAgdmVjW2ldLT5TZXRNb21lbnR1bSggcHAqc2luKHJ0aG52ZSkqY29z
KHBoaW52ZSkqTWVWLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHAqc2luKHJ0aG52
ZSkqc2luKHBoaW52ZSkqTWVWLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHAqY29z
KHJ0aG52ZSkqTWVWICk7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIHZlY1tpXS0+
U2V0TW9tZW50dW0oIHZlY1tpXS0+R2V0TW9tZW50dW0oKSAqIChwcC9wcDEpICk7CiAgICAgIH0K
ICAgIH0KICAgIGlmKCAoZWsxICE9IDAuMCkgJiYgKG5waW9ucyA+IDApICkKICAgIHsKICAgICAg
ZGVraW4gPSAxLjAgKyBkZWtpbi9lazE7CiAgICAgIC8vCiAgICAgIC8vICBmaXJzdCBkbyB0aGUg
aW5jaWRlbnQgcGFydGljbGUKICAgICAgLy8KICAgICAgaWYoIChjdXJyZW50UGFydGljbGUuR2V0
RGVmaW5pdGlvbigpID09IGFQaVBsdXMpIHx8CiAgICAgICAgICAoY3VycmVudFBhcnRpY2xlLkdl
dERlZmluaXRpb24oKSA9PSBhUGlaZXJvKSB8fAogICAgICAgICAgKGN1cnJlbnRQYXJ0aWNsZS5H
ZXREZWZpbml0aW9uKCkgPT0gYVBpTWludXMpICkKICAgICAgewogICAgICAgIGN1cnJlbnRQYXJ0
aWNsZS5TZXRLaW5ldGljRW5lcmd5KAogICAgICAgICBHNHN0ZDo6bWF4KCAwLjAwMSpNZVYsIGRl
a2luKmN1cnJlbnRQYXJ0aWNsZS5HZXRLaW5ldGljRW5lcmd5KCkgKSApOwogICAgICAgIHBwID0g
Y3VycmVudFBhcnRpY2xlLkdldFRvdGFsTW9tZW50dW0oKS9NZVY7CiAgICAgICAgcHAxID0gY3Vy
cmVudFBhcnRpY2xlLkdldE1vbWVudHVtKCkubWFnKCkvTWVWOwogICAgICAgIGlmKCBwcDEgPCAw
LjAwMSApCiAgICAgICAgewogICAgICAgICAgcnRobnZlID0gcGkqRzRVbmlmb3JtUmFuZCgpOwog
ICAgICAgICAgcGhpbnZlID0gdHdvcGkqRzRVbmlmb3JtUmFuZCgpOwogICAgICAgICAgY3VycmVu
dFBhcnRpY2xlLlNldE1vbWVudHVtKCBwcCpzaW4ocnRobnZlKSpjb3MocGhpbnZlKSpNZVYsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwKnNpbihydGhudmUpKnNpbihw
aGludmUpKk1lViwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHAqY29z
KHJ0aG52ZSkqTWVWICk7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIGN1cnJlbnRQ
YXJ0aWNsZS5TZXRNb21lbnR1bSggY3VycmVudFBhcnRpY2xlLkdldE1vbWVudHVtKCkgKiAocHAv
cHAxKSApOwogICAgICB9CiAgICAgIGlmKCAodGFyZ2V0UGFydGljbGUuR2V0RGVmaW5pdGlvbigp
ID09IGFQaVBsdXMpIHx8CiAgICAgICAgICAodGFyZ2V0UGFydGljbGUuR2V0RGVmaW5pdGlvbigp
ID09IGFQaVplcm8pIHx8CiAgICAgICAgICAodGFyZ2V0UGFydGljbGUuR2V0RGVmaW5pdGlvbigp
ID09IGFQaU1pbnVzKSApCiAgICAgIHsKICAgICAgICB0YXJnZXRQYXJ0aWNsZS5TZXRLaW5ldGlj
RW5lcmd5KAogICAgICAgICBHNHN0ZDo6bWF4KCAwLjAwMSpNZVYsIGRla2luKnRhcmdldFBhcnRp
Y2xlLkdldEtpbmV0aWNFbmVyZ3koKSApICk7CiAgICAgICAgcHAgPSB0YXJnZXRQYXJ0aWNsZS5H
ZXRUb3RhbE1vbWVudHVtKCkvTWVWOwogICAgICAgIHBwMSA9IHRhcmdldFBhcnRpY2xlLkdldE1v
bWVudHVtKCkubWFnKCkvTWVWOwogICAgICAgIGlmKCBwcDEgPCAwLjAwMSApCiAgICAgICAgewog
ICAgICAgICAgcnRobnZlID0gcGkqRzRVbmlmb3JtUmFuZCgpOwogICAgICAgICAgcGhpbnZlID0g
dHdvcGkqRzRVbmlmb3JtUmFuZCgpOwogICAgICAgICAgdGFyZ2V0UGFydGljbGUuU2V0TW9tZW50
dW0oIHBwKnNpbihydGhudmUpKmNvcyhwaGludmUpKk1lViwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcCpzaW4ocnRobnZlKSpzaW4ocGhpbnZlKSpNZVYsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHAqY29zKHJ0aG52ZSkqTWVWICk7CiAgICAg
ICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIHRhcmdldFBhcnRpY2xlLlNldE1vbWVudHVtKCB0
YXJnZXRQYXJ0aWNsZS5HZXRNb21lbnR1bSgpICogKHBwL3BwMSkgKTsKICAgICAgfQogICAgICBm
b3IoIGk9MDsgaTx2ZWNMZW47ICsraSApCiAgICAgIHsKICAgICAgICBpZiggKHZlY1tpXS0+R2V0
RGVmaW5pdGlvbigpID09IGFQaVBsdXMpIHx8CiAgICAgICAgICAgICh2ZWNbaV0tPkdldERlZmlu
aXRpb24oKSA9PSBhUGlaZXJvKSB8fAogICAgICAgICAgICAodmVjW2ldLT5HZXREZWZpbml0aW9u
KCkgPT0gYVBpTWludXMpICkKICAgICAgICB7CiAgICAgICAgICB2ZWNbaV0tPlNldEtpbmV0aWNF
bmVyZ3koIEc0c3RkOjptYXgoIDAuMDAxKk1lViwgZGVraW4qdmVjW2ldLT5HZXRLaW5ldGljRW5l
cmd5KCkgKSApOwogICAgICAgICAgcHAgPSB2ZWNbaV0tPkdldFRvdGFsTW9tZW50dW0oKS9NZVY7
CiAgICAgICAgICBwcDEgPSB2ZWNbaV0tPkdldE1vbWVudHVtKCkubWFnKCkvTWVWOwogICAgICAg
ICAgaWYoIHBwMSA8IDAuMDAxICkKICAgICAgICAgIHsKICAgICAgICAgICAgcnRobnZlID0gcGkq
RzRVbmlmb3JtUmFuZCgpOwogICAgICAgICAgICBwaGludmUgPSB0d29waSpHNFVuaWZvcm1SYW5k
KCk7CiAgICAgICAgICAgIHZlY1tpXS0+U2V0TW9tZW50dW0oIHBwKnNpbihydGhudmUpKmNvcyhw
aGludmUpKk1lViwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHAqc2luKHJ0aG52
ZSkqc2luKHBoaW52ZSkqTWVWLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcCpj
b3MocnRobnZlKSpNZVYgKTsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
dmVjW2ldLT5TZXRNb21lbnR1bSggdmVjW2ldLT5HZXRNb21lbnR1bSgpICogKHBwL3BwMSkgKTsK
ICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CiAKIHZvaWQgRzRSZWFjdGlvbkR5bmFtaWNzOjpB
ZGRCbGFja1RyYWNrUGFydGljbGVzKAogICBjb25zdCBHNGRvdWJsZSBlcG5iLCAgICAgICAgICAg
IC8vIEdlVgogICBjb25zdCBHNGludCBucG5iLAogICBjb25zdCBHNGRvdWJsZSBlZHRhLCAgICAg
ICAgICAgIC8vIEdlVgogICBjb25zdCBHNGludCBuZHRhLAogICBjb25zdCBHNGRvdWJsZSBzcHJv
YiwKICAgY29uc3QgRzRkb3VibGUga2luZXRpY01pbmltdW0sICAvLyBHZVYKICAgY29uc3QgRzRk
b3VibGUga2luZXRpY0ZhY3RvciwgICAvLyBHZVYKICAgY29uc3QgRzRSZWFjdGlvblByb2R1Y3Qg
Jm1vZGlmaWVkT3JpZ2luYWwsCiAgIEc0ZG91YmxlIHNwYWxsLAogICBjb25zdCBHNE51Y2xldXMg
JnRhcmdldE51Y2xldXMsCiAgIEc0RmFzdFZlY3RvcjxHNFJlYWN0aW9uUHJvZHVjdCwxMjg+ICZ2
ZWMsCiAgIEc0aW50ICZ2ZWNMZW4gKQogIHsKICAgIC8vIGRlcml2ZWQgZnJvbSBvcmlnaW5hbCBG
T1JUUkFOIGNvZGUgaW4gR0VOWFBUIGFuZCBUV09DTFUgYnkgSC4gRmVzZWZlbGR0CiAgICAvLwog
ICAgLy8gbnBuYiBpcyBudW1iZXIgb2YgcHJvdG9uL25ldXRyb24gYmxhY2sgdHJhY2sgcGFydGlj
bGVzCiAgICAvLyBuZHRhIGlzIHRoZSBudW1iZXIgb2YgZGV1dGVyb25zLCB0cml0b25zLCBhbmQg
YWxwaGFzIHByb2R1Y2VkCiAgICAvLyBlcG5iIGlzIHRoZSBraW5ldGljIGVuZXJneSBhdmFpbGFi
bGUgZm9yIHByb3Rvbi9uZXV0cm9uIGJsYWNrIHRyYWNrIHBhcnRpY2xlcwogICAgLy8gZWR0YSBp
cyB0aGUga2luZXRpYyBlbmVyZ3kgYXZhaWxhYmxlIGZvciBkZXV0ZXJvbi90cml0b24vYWxwaGEg
cGFydGljbGVzCiAgICAvLwogICAgRzRQYXJ0aWNsZURlZmluaXRpb24gKmFQcm90b24gPSBHNFBy
b3Rvbjo6UHJvdG9uKCk7CiAgICBHNFBhcnRpY2xlRGVmaW5pdGlvbiAqYU5ldXRyb24gPSBHNE5l
dXRyb246Ok5ldXRyb24oKTsKICAgIEc0UGFydGljbGVEZWZpbml0aW9uICphRGV1dGVyb24gPSBH
NERldXRlcm9uOjpEZXV0ZXJvbigpOwogICAgRzRQYXJ0aWNsZURlZmluaXRpb24gKmFUcml0b24g
PSBHNFRyaXRvbjo6VHJpdG9uKCk7CiAgICBHNFBhcnRpY2xlRGVmaW5pdGlvbiAqYW5BbHBoYSA9
IEc0QWxwaGE6OkFscGhhKCk7CiAgICAKICAgIGNvbnN0IEc0ZG91YmxlIGVrT3JpZ2luYWwgPSBt
b2RpZmllZE9yaWdpbmFsLkdldEtpbmV0aWNFbmVyZ3koKS9NZVY7CiAgICBjb25zdCBHNGRvdWJs
ZSBhdG9taWNXZWlnaHQgPSB0YXJnZXROdWNsZXVzLkdldE4oKTsKICAgIGNvbnN0IEc0ZG91Ymxl
IGF0b21pY051bWJlciA9IHRhcmdldE51Y2xldXMuR2V0WigpOwogICAgCiAgICBjb25zdCBHNGRv
dWJsZSBpa2ExID0gMy42OwogICAgY29uc3QgRzRkb3VibGUgaWthMiA9IDM1LjU2OwogICAgY29u
c3QgRzRkb3VibGUgaWthMyA9IDYuNDU7CiAgICBjb25zdCBHNGRvdWJsZSBzcDEgPSAxLjA2NjsK
ICAgIAogICAgRzRpbnQgaTsKICAgIEc0ZG91YmxlIHBwOwogICAgRzRkb3VibGUgY2ZhID0gMC4w
MjUqKChhdG9taWNXZWlnaHQtMS4wKS8xMjAuMCkgKiBleHAoLShhdG9taWNXZWlnaHQtMS4wKS8x
MjAuMCk7CiAgICBpZiggbnBuYiA+IDApICAvLyBmaXJzdCBhZGQgcHJvdG9ucyBhbmQgbmV1dHJv
bnMKICAgIHsKLy8gICAgICBHNFJlYWN0aW9uUHJvZHVjdCAqcDEgPSBuZXcgRzRSZWFjdGlvblBy
b2R1Y3QgW25wbmJdOwogICAgICBHNGRvdWJsZSBla2luID0gZXBuYi9ucG5iOwogICAgICBHNGRv
dWJsZSBiYWNrd2FyZEtpbmV0aWMgPSAwLjA7CiAgICAgIGZvciggaT0wOyBpPG5wbmI7ICsraSAp
CiAgICAgIHsKICAgICAgICBHNFJlYWN0aW9uUHJvZHVjdCAqIHAxID0gbmV3IEc0UmVhY3Rpb25Q
cm9kdWN0KCk7CiAgICAgICAgaWYoIEc0VW5pZm9ybVJhbmQoKSA8IHNwcm9iICkKICAgICAgICB7
CiAgICAgICAgICBkZWxldGUgcDE7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAg
ICAgaWYoIGJhY2t3YXJkS2luZXRpYyA+IGVwbmIgKQogICAgICAgIHsKICAgICAgICAgIGRlbGV0
ZSBwMTsKICAgICAgICAgIGJyZWFrOyAgICAKICAgICAgICB9CiAgICAgICAgRzRkb3VibGUgcmFu
ID0gRzRVbmlmb3JtUmFuZCgpOwogICAgICAgIEc0ZG91YmxlIGtpbmV0aWMgPSAtZWtpbipsb2co
cmFuKSAtIGNmYSooMS4wKzAuNSpub3JtYWwoKSk7CiAgICAgICAgaWYoIGtpbmV0aWMgPCAwLjAg
KWtpbmV0aWMgPSAtMC4wMTAqbG9nKHJhbik7CiAgICAgICAgYmFja3dhcmRLaW5ldGljICs9IGtp
bmV0aWM7CiAgICAgICAgaWYoIGJhY2t3YXJkS2luZXRpYyA+IGVwbmIgKQogICAgICAgICAga2lu
ZXRpYyA9IEc0c3RkOjptYXgoIGtpbmV0aWNNaW5pbXVtLCBlcG5iLShiYWNrd2FyZEtpbmV0aWMt
a2luZXRpYykgKTsKICAgICAgICBpZiggRzRVbmlmb3JtUmFuZCgpID4gKDEuMC1hdG9taWNOdW1i
ZXIvYXRvbWljV2VpZ2h0KSApCiAgICAgICAgICBwMS0+U2V0RGVmaW5pdGlvbiggYVByb3RvbiAp
OwogICAgICAgIGVsc2UKICAgICAgICAgIHAxLT5TZXREZWZpbml0aW9uKCBhTmV1dHJvbiApOwog
ICAgICAgIHZlYy5TZXRFbGVtZW50KCB2ZWNMZW4sIHAxICk7CiAgICAgICAgKytzcGFsbDsKICAg
ICAgICBHNGRvdWJsZSBjb3N0ID0gRzRVbmlmb3JtUmFuZCgpICogMi4wIC0gMS4wOwogICAgICAg
IEc0ZG91YmxlIHNpbnQgPSBzcXJ0KGZhYnMoMS4wLWNvc3QqY29zdCkpOwogICAgICAgIEc0ZG91
YmxlIHBoaSA9IHR3b3BpICogRzRVbmlmb3JtUmFuZCgpOwogICAgICAgIHZlY1t2ZWNMZW5dLT5T
ZXROZXdseUFkZGVkKCB0cnVlICk7CiAgICAgICAgdmVjW3ZlY0xlbl0tPlNldEtpbmV0aWNFbmVy
Z3koIGtpbmV0aWMqR2VWICk7CiAgICAgICAgcHAgPSB2ZWNbdmVjTGVuXS0+R2V0VG90YWxNb21l
bnR1bSgpL01lVjsKICAgICAgICB2ZWNbdmVjTGVuKytdLT5TZXRNb21lbnR1bSggcHAqc2ludCpz
aW4ocGhpKSpNZVYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwKnNpbnQq
Y29zKHBoaSkqTWVWLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcCpjb3N0
Kk1lViApOwogICAgICAgIC8vIERFQlVHR0lORyAtLT4gRHVtcEZyYW1lczo6RHVtcEZyYW1lKHZl
YywgdmVjTGVuKTsKICAgICAgfQogICAgICBpZiggKGF0b21pY1dlaWdodCA+PSAxMC4wKSAmJiAo
ZWtPcmlnaW5hbCA8PSAyLjAqR2VWKSApCiAgICAgIHsKICAgICAgICBHNGRvdWJsZSBla3cgPSBl
a09yaWdpbmFsL0dlVjsKICAgICAgICBHNGludCBpa2EsIGtrID0gMDsKICAgICAgICBpZiggZWt3
ID4gMS4wIClla3cgKj0gZWt3OwogICAgICAgIGVrdyA9IEc0c3RkOjptYXgoIDAuMSwgZWt3ICk7
CiAgICAgICAgaWthID0gRzRpbnQoaWthMSpleHAoKGF0b21pY051bWJlciphdG9taWNOdW1iZXIv
YXRvbWljV2VpZ2h0LWlrYTIpL2lrYTMpL2Vrdyk7CiAgICAgICAgaWYoIGlrYSA+IDAgKQogICAg
ICAgIHsKICAgICAgICAgIGZvciggaT0odmVjTGVuLTEpOyBpPj0wOyAtLWkgKQogICAgICAgICAg
ewogICAgICAgICAgICBpZiggKHZlY1tpXS0+R2V0RGVmaW5pdGlvbigpID09IGFQcm90b24pICYm
IHZlY1tpXS0+R2V0TmV3bHlBZGRlZCgpICkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHZl
Y1tpXS0+U2V0RGVmaW5pdGlvbkFuZFVwZGF0ZUUoIGFOZXV0cm9uICk7ICAvLyBtb2RpZmllZCAy
Mi1PY3QtOTcKICAgICAgICAgICAgICBpZiggKytrayA+IGlrYSApYnJlYWs7CiAgICAgICAgICAg
IH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmKCBuZHRhID4gMCAp
ICAgIC8vICBub3csIHRyeSB0byBhZGQgZGV1dGVyb25zLCB0cml0b25zIGFuZCBhbHBoYXMKICAg
IHsKLy8gICAgICBHNFJlYWN0aW9uUHJvZHVjdCAqcDIgPSBuZXcgRzRSZWFjdGlvblByb2R1Y3Qg
W25kdGFdOwogICAgICBHNGRvdWJsZSBla2luID0gZWR0YS9uZHRhOwogICAgICBHNGRvdWJsZSBi
YWNrd2FyZEtpbmV0aWMgPSAwLjA7CiAgICAgIGZvciggaT0wOyBpPG5kdGE7ICsraSApCiAgICAg
IHsKICAgICAgICBHNFJlYWN0aW9uUHJvZHVjdCAqcDIgPSBuZXcgRzRSZWFjdGlvblByb2R1Y3Qo
KTsKICAgICAgICBpZiggRzRVbmlmb3JtUmFuZCgpIDwgc3Byb2IgKQogICAgICAgIHsKICAgICAg
ICAgIGRlbGV0ZSBwMjsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBpZigg
YmFja3dhcmRLaW5ldGljID4gZWR0YSApCiAgICAgICAgewogICAgICAgICAgZGVsZXRlIHAyOwog
ICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIEc0ZG91YmxlIHJhbiA9IEc0VW5pZm9y
bVJhbmQoKTsKICAgICAgICBHNGRvdWJsZSBraW5ldGljID0gLWVraW4qbG9nKHJhbiktY2ZhKigx
LiswLjUqbm9ybWFsKCkpOwogICAgICAgIGlmKCBraW5ldGljIDwgMC4wIClraW5ldGljID0ga2lu
ZXRpY0ZhY3Rvcipsb2cocmFuKTsKICAgICAgICBiYWNrd2FyZEtpbmV0aWMgKz0ga2luZXRpYzsK
ICAgICAgICBpZiggYmFja3dhcmRLaW5ldGljID4gZWR0YSApa2luZXRpYyA9IGVkdGEtKGJhY2t3
YXJkS2luZXRpYy1raW5ldGljKTsKICAgICAgICBpZigga2luZXRpYyA8IDAuMCApa2luZXRpYyA9
IGtpbmV0aWNNaW5pbXVtOwogICAgICAgIEc0ZG91YmxlIGNvc3QgPSAyLjAqRzRVbmlmb3JtUmFu
ZCgpIC0gMS4wOwogICAgICAgIEc0ZG91YmxlIHNpbnQgPSBzcXJ0KEc0c3RkOjptYXgoMC4wLCgx
LjAtY29zdCpjb3N0KSkpOwogICAgICAgIEc0ZG91YmxlIHBoaSA9IHR3b3BpKkc0VW5pZm9ybVJh
bmQoKTsKICAgICAgICByYW4gPSBHNFVuaWZvcm1SYW5kKCk7CiAgICAgICAgaWYoIHJhbiA8PSAw
LjYwICkKICAgICAgICAgIHAyLT5TZXREZWZpbml0aW9uKCBhRGV1dGVyb24gKTsKICAgICAgICBl
bHNlIGlmKCByYW4gPD0gMC45MCApCiAgICAgICAgICBwMi0+U2V0RGVmaW5pdGlvbiggYVRyaXRv
biApOwogICAgICAgIGVsc2UKICAgICAgICAgIHAyLT5TZXREZWZpbml0aW9uKCBhbkFscGhhICk7
CiAgICAgICAgc3BhbGwgKz0gcDItPkdldE1hc3MoKS9HZVYgKiBzcDE7CiAgICAgICAgaWYoIHNw
YWxsID4gYXRvbWljV2VpZ2h0ICkKCXsKCSAgZGVsZXRlIHAyOwoJICBicmVhazsKCX0KICAgICAg
ICB2ZWMuU2V0RWxlbWVudCggdmVjTGVuLCBwMiApOwogICAgICAgIHZlY1t2ZWNMZW5dLT5TZXRO
ZXdseUFkZGVkKCB0cnVlICk7CiAgICAgICAgdmVjW3ZlY0xlbl0tPlNldEtpbmV0aWNFbmVyZ3ko
IGtpbmV0aWMqR2VWICk7CiAgICAgICAgcHAgPSB2ZWNbdmVjTGVuXS0+R2V0VG90YWxNb21lbnR1
bSgpL01lVjsKICAgICAgICB2ZWNbdmVjTGVuKytdLT5TZXRNb21lbnR1bSggcHAqc2ludCpzaW4o
cGhpKSpNZVYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwKnNpbnQqY29z
KHBoaSkqTWVWLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcCpjb3N0Kk1l
ViApOwogICAgICAvLyBERUJVR0dJTkcgLS0+IER1bXBGcmFtZXM6OkR1bXBGcmFtZSh2ZWMsIHZl
Y0xlbik7CiAgICAgIH0KICAgIH0KICB9CiAKIHZvaWQgRzRSZWFjdGlvbkR5bmFtaWNzOjpNb21l
bnR1bUNoZWNrKAogICBjb25zdCBHNFJlYWN0aW9uUHJvZHVjdCAmbW9kaWZpZWRPcmlnaW5hbCwK
ICAgRzRSZWFjdGlvblByb2R1Y3QgJmN1cnJlbnRQYXJ0aWNsZSwKICAgRzRSZWFjdGlvblByb2R1
Y3QgJnRhcmdldFBhcnRpY2xlLAogICBHNEZhc3RWZWN0b3I8RzRSZWFjdGlvblByb2R1Y3QsMTI4
PiAmdmVjLAogICBHNGludCAmdmVjTGVuICkKICB7CiAgICBjb25zdCBHNGRvdWJsZSBwT3JpZ2lu
YWwgPSBtb2RpZmllZE9yaWdpbmFsLkdldFRvdGFsTW9tZW50dW0oKS9NZVY7CiAgICBHNGRvdWJs
ZSB0ZXN0TW9tZW50dW0gPSBjdXJyZW50UGFydGljbGUuR2V0TW9tZW50dW0oKS5tYWcoKS9NZVY7
CiAgICBHNGRvdWJsZSBwTWFzczsKICAgIGlmKCB0ZXN0TW9tZW50dW0gPj0gcE9yaWdpbmFsICkK
ICAgIHsKICAgICAgcE1hc3MgPSBjdXJyZW50UGFydGljbGUuR2V0TWFzcygpL01lVjsKICAgICAg
Y3VycmVudFBhcnRpY2xlLlNldFRvdGFsRW5lcmd5KAogICAgICAgc3FydCggcE1hc3MqcE1hc3Mg
KyBwT3JpZ2luYWwqcE9yaWdpbmFsICkqTWVWICk7CiAgICAgIGN1cnJlbnRQYXJ0aWNsZS5TZXRN
b21lbnR1bSgKICAgICAgIGN1cnJlbnRQYXJ0aWNsZS5HZXRNb21lbnR1bSgpICogKHBPcmlnaW5h
bC90ZXN0TW9tZW50dW0pICk7CiAgICB9CiAgICB0ZXN0TW9tZW50dW0gPSB0YXJnZXRQYXJ0aWNs
ZS5HZXRNb21lbnR1bSgpLm1hZygpL01lVjsKICAgIGlmKCB0ZXN0TW9tZW50dW0gPj0gcE9yaWdp
bmFsICkKICAgIHsKICAgICAgcE1hc3MgPSB0YXJnZXRQYXJ0aWNsZS5HZXRNYXNzKCkvTWVWOwog
ICAgICB0YXJnZXRQYXJ0aWNsZS5TZXRUb3RhbEVuZXJneSgKICAgICAgIHNxcnQoIHBNYXNzKnBN
YXNzICsgcE9yaWdpbmFsKnBPcmlnaW5hbCApKk1lViApOwogICAgICB0YXJnZXRQYXJ0aWNsZS5T
ZXRNb21lbnR1bSgKICAgICAgIHRhcmdldFBhcnRpY2xlLkdldE1vbWVudHVtKCkgKiAocE9yaWdp
bmFsL3Rlc3RNb21lbnR1bSkgKTsKICAgIH0KICAgIGZvciggRzRpbnQgaT0wOyBpPHZlY0xlbjsg
KytpICkKICAgIHsKICAgICAgdGVzdE1vbWVudHVtID0gdmVjW2ldLT5HZXRNb21lbnR1bSgpLm1h
ZygpL01lVjsKICAgICAgaWYoIHRlc3RNb21lbnR1bSA+PSBwT3JpZ2luYWwgKQogICAgICB7CiAg
ICAgICAgcE1hc3MgPSB2ZWNbaV0tPkdldE1hc3MoKS9NZVY7CiAgICAgICAgdmVjW2ldLT5TZXRU
b3RhbEVuZXJneSgKICAgICAgICAgc3FydCggcE1hc3MqcE1hc3MgKyBwT3JpZ2luYWwqcE9yaWdp
bmFsICkqTWVWICk7CiAgICAgICAgdmVjW2ldLT5TZXRNb21lbnR1bSggdmVjW2ldLT5HZXRNb21l
bnR1bSgpICogKHBPcmlnaW5hbC90ZXN0TW9tZW50dW0pICk7CiAgICAgIH0KICAgIH0KICB9Cgog
dm9pZCBHNFJlYWN0aW9uRHluYW1pY3M6OlByb2R1Y2VTdHJhbmdlUGFydGljbGVQYWlycygKICAg
RzRGYXN0VmVjdG9yPEc0UmVhY3Rpb25Qcm9kdWN0LDEyOD4gJnZlYywKICAgRzRpbnQgJnZlY0xl
biwKICAgY29uc3QgRzRSZWFjdGlvblByb2R1Y3QgJm1vZGlmaWVkT3JpZ2luYWwsCiAgIGNvbnN0
IEc0RHluYW1pY1BhcnRpY2xlICpvcmlnaW5hbFRhcmdldCwgCiAgIEc0UmVhY3Rpb25Qcm9kdWN0
ICZjdXJyZW50UGFydGljbGUsCiAgIEc0UmVhY3Rpb25Qcm9kdWN0ICZ0YXJnZXRQYXJ0aWNsZSwK
ICAgRzRib29sICZpbmNpZGVudEhhc0NoYW5nZWQsCiAgIEc0Ym9vbCAmdGFyZ2V0SGFzQ2hhbmdl
ZCApCiAgewogICAgLy8gZGVyaXZlZCBmcm9tIG9yaWdpbmFsIEZPUlRSQU4gY29kZSBTVFBBSVIg
YnkgSC4gRmVzZWZlbGR0ICgxNi1EZWMtMTk4NykKICAgIC8vCiAgICAvLyBDaG9vc2UgY2hhcmdl
IGNvbWJpbmF0aW9ucyBLKyBLLSwgSysgSzBCLCBLMCBLMEIsIEswIEstLAogICAgLy8gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgSysgWTAsIEswIFkrLCAgSzAgWS0KICAgIC8vIEZvciBhbnRp
YmFyeW9uIGluZHVjZWQgcmVhY3Rpb25zIGhhbGYgb2YgdGhlIGNyb3NzIHNlY3Rpb25zIEtCIFlC
CiAgICAvLyBwYWlycyBhcmUgcHJvZHVjZWQuICBDaGFyZ2UgaXMgbm90IGNvbnNlcnZlZCwgbm8g
ZXhwZXJpbWVudGFsIGRhdGEgYXZhaWxhYmxlCiAgICAvLyBmb3IgZXhjbHVzaXZlIHJlYWN0aW9u
cywgdGhlcmVmb3JlIHNvbWUgYXZlcmFnZSBiZWhhdmlvdXIgYXNzdW1lZC4KICAgIC8vIFRoZSBy
YXRpbyBML1NJR01BIGlzIHRha2VuIGFzIDM6MSAoZnJvbSBleHBlcmltZW50YWwgbG93IGVuZXJn
eSkKICAgIC8vCiAgICBpZiggdmVjTGVuID09IDAgKXJldHVybjsKICAgIC8vCiAgICAvLyB0aGUg
Zm9sbG93aW5nIHByb3RlY3RzIGFnYWluc3QgYW5uaWhpbGF0aW9uIHByb2Nlc3NlcwogICAgLy8K
ICAgIGlmKCBjdXJyZW50UGFydGljbGUuR2V0TWFzcygpID09IDAuMCB8fCB0YXJnZXRQYXJ0aWNs
ZS5HZXRNYXNzKCkgPT0gMC4wIClyZXR1cm47CiAgICAKICAgIGNvbnN0IEc0ZG91YmxlIGV0T3Jp
Z2luYWwgPSBtb2RpZmllZE9yaWdpbmFsLkdldFRvdGFsRW5lcmd5KCkvR2VWOwogICAgY29uc3Qg
RzRkb3VibGUgbU9yaWdpbmFsID0gbW9kaWZpZWRPcmlnaW5hbC5HZXREZWZpbml0aW9uKCktPkdl
dFBER01hc3MoKS9HZVY7CiAgICBHNGRvdWJsZSB0YXJnZXRNYXNzID0gb3JpZ2luYWxUYXJnZXQt
PkdldERlZmluaXRpb24oKS0+R2V0UERHTWFzcygpL0dlVjsKICAgIEc0ZG91YmxlIGNlbnRlcm9m
bWFzc0VuZXJneSA9IHNxcnQoIG1PcmlnaW5hbCptT3JpZ2luYWwgKwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TWFzcyp0YXJnZXRNYXNzICsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuMCp0YXJnZXRNYXNzKmV0T3JpZ2luYWwg
KTsgIC8vIEdlVgogICAgRzRkb3VibGUgY3VycmVudE1hc3MgPSBjdXJyZW50UGFydGljbGUuR2V0
TWFzcygpL0dlVjsKICAgIEc0ZG91YmxlIGF2YWlsYWJsZUVuZXJneSA9IGNlbnRlcm9mbWFzc0Vu
ZXJneS0odGFyZ2V0TWFzcytjdXJyZW50TWFzcyk7CiAgICBpZiggYXZhaWxhYmxlRW5lcmd5IDw9
IDEuMCApcmV0dXJuOwogICAgCiAgICBHNFBhcnRpY2xlRGVmaW5pdGlvbiAqYVByb3RvbiA9IEc0
UHJvdG9uOjpQcm90b24oKTsKICAgIEc0UGFydGljbGVEZWZpbml0aW9uICphbkFudGlQcm90b24g
PSBHNEFudGlQcm90b246OkFudGlQcm90b24oKTsKICAgIEc0UGFydGljbGVEZWZpbml0aW9uICph
TmV1dHJvbiA9IEc0TmV1dHJvbjo6TmV1dHJvbigpOwogICAgRzRQYXJ0aWNsZURlZmluaXRpb24g
KmFuQW50aU5ldXRyb24gPSBHNEFudGlOZXV0cm9uOjpBbnRpTmV1dHJvbigpOwogICAgRzRQYXJ0
aWNsZURlZmluaXRpb24gKmFTaWdtYU1pbnVzID0gRzRTaWdtYU1pbnVzOjpTaWdtYU1pbnVzKCk7
CiAgICBHNFBhcnRpY2xlRGVmaW5pdGlvbiAqYVNpZ21hUGx1cyA9IEc0U2lnbWFQbHVzOjpTaWdt
YVBsdXMoKTsKICAgIEc0UGFydGljbGVEZWZpbml0aW9uICphU2lnbWFaZXJvID0gRzRTaWdtYVpl
cm86OlNpZ21hWmVybygpOwogICAgRzRQYXJ0aWNsZURlZmluaXRpb24gKmFuQW50aVNpZ21hTWlu
dXMgPSBHNEFudGlTaWdtYU1pbnVzOjpBbnRpU2lnbWFNaW51cygpOwogICAgRzRQYXJ0aWNsZURl
ZmluaXRpb24gKmFuQW50aVNpZ21hUGx1cyA9IEc0QW50aVNpZ21hUGx1czo6QW50aVNpZ21hUGx1
cygpOwogICAgRzRQYXJ0aWNsZURlZmluaXRpb24gKmFuQW50aVNpZ21hWmVybyA9IEc0QW50aVNp
Z21hWmVybzo6QW50aVNpZ21hWmVybygpOwogICAgRzRQYXJ0aWNsZURlZmluaXRpb24gKmFLYW9u
TWludXMgPSBHNEthb25NaW51czo6S2Fvbk1pbnVzKCk7CiAgICBHNFBhcnRpY2xlRGVmaW5pdGlv
biAqYUthb25QbHVzID0gRzRLYW9uUGx1czo6S2FvblBsdXMoKTsKICAgIEc0UGFydGljbGVEZWZp
bml0aW9uICphS2FvblpMID0gRzRLYW9uWmVyb0xvbmc6Okthb25aZXJvTG9uZygpOwogICAgRzRQ
YXJ0aWNsZURlZmluaXRpb24gKmFLYW9uWlMgPSBHNEthb25aZXJvU2hvcnQ6Okthb25aZXJvU2hv
cnQoKTsKICAgIEc0UGFydGljbGVEZWZpbml0aW9uICphTGFtYmRhID0gRzRMYW1iZGE6OkxhbWJk
YSgpOwogICAgRzRQYXJ0aWNsZURlZmluaXRpb24gKmFuQW50aUxhbWJkYSA9IEc0QW50aUxhbWJk
YTo6QW50aUxhbWJkYSgpOwogICAgCiAgICBjb25zdCBHNGRvdWJsZSBwcm90b25NYXNzID0gYVBy
b3Rvbi0+R2V0UERHTWFzcygpL0dlVjsKICAgIGNvbnN0IEc0ZG91YmxlIHNpZ21hTWludXNNYXNz
ID0gYVNpZ21hTWludXMtPkdldFBER01hc3MoKS9HZVY7CiAgICAvLwogICAgLy8gZGV0ZXJtaW5l
IHRoZSBjZW50ZXIgb2YgbWFzcyBlbmVyZ3kgYmluCiAgICAvLwogICAgY29uc3QgRzRkb3VibGUg
YXZyc1tdID0gezMuLDQuLDUuLDYuLDcuLDguLDkuLDEwLiwyMC4sMzAuLDQwLiw1MC59OwoKICAg
IEc0aW50IGliaW4sIGkzLCBpNDsKICAgIEc0ZG91YmxlIGF2aywgYXZ5LCBhdm4sIHJhbjsKICAg
IEc0aW50IGkgPSAxOwogICAgd2hpbGUoIChpPDEyKSAmJiAoY2VudGVyb2ZtYXNzRW5lcmd5PmF2
cnNbaV0pICkrK2k7CiAgICBpZiggaSA9PSAxMiApCiAgICAgIGliaW4gPSAxMTsKICAgIGVsc2UK
ICAgICAgaWJpbiA9IGk7CiAgICAvLwogICAgLy8gdGhlIGZvcnRyYW4gY29kZSBjaG9vc2VzIGEg
cmFuZG9tIHJlcGxhY2VtZW50IG9mIHByb2R1Y2VkIGthb25zCiAgICAvLyAgYnV0IGRvZXMgbm90
IHRha2UgaW50byBhY2NvdW50IGNoYXJnZSBjb25zZXJ2YXRpb24gCiAgICAvLwogICAgaWYoIHZl
Y0xlbiA9PSAxICkgIC8vIHdlIGtub3cgdGhhdCB2ZWNMZW4gPiAwCiAgICB7CiAgICAgIGkzID0g
MDsKICAgICAgaTQgPSAxOyAgIC8vIG5vdGUgdGhhdCB3ZSB3aWxsIGJlIGFkZGluZyBhIG5ldyBz
ZWNvbmRhcnkgcGFydGljbGUgaW4gdGhpcyBjYXNlIG9ubHkKICAgIH0KICAgIGVsc2UgICAgICAg
ICAgICAgICAvLyBvdGhlcndpc2UgIDAgPD0gaTMsaTQgPCB2ZWNMZW4KICAgIHsKICAgICAgRzRk
b3VibGUgcmFuID0gRzRVbmlmb3JtUmFuZCgpOwogICAgICB3aGlsZSggcmFuID09IDEuMCApcmFu
ID0gRzRVbmlmb3JtUmFuZCgpOwogICAgICBpNCA9IGkzID0gRzRpbnQoIHZlY0xlbipyYW4gKTsK
ICAgICAgd2hpbGUoIGkzID09IGk0ICkKICAgICAgewogICAgICAgIHJhbiA9IEc0VW5pZm9ybVJh
bmQoKTsKICAgICAgICB3aGlsZSggcmFuID09IDEuMCApcmFuID0gRzRVbmlmb3JtUmFuZCgpOwog
ICAgICAgIGk0ID0gRzRpbnQoIHZlY0xlbipyYW4gKTsKICAgICAgfQogICAgfQogICAgLy8KICAg
IC8vIHVzZSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBvciBleHRyYXBvbGF0aW9uIGJ5IHk9Y2VudGVy
b2ZtYXNzRW5lcmd5KngrYgogICAgLy8KICAgIGNvbnN0IEc0ZG91YmxlIGF2a2tiW10gPSB7IDAu
MDAxNSwgMC4wMDUsIDAuMDEyLCAwLjAyODUsIDAuMDUyNSwgMC4wNzUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAwLjA5NzUsIDAuMTIzLCAwLjI4LCAgMC4zOTgsICAwLjQ5NSwgIDAu
NTczIH07CiAgICBjb25zdCBHNGRvdWJsZSBhdmt5W10gPSB7IDAuMDA1LCAwLjAzLCAgMC4wNjQs
IDAuMDk1LCAwLjExNSwgMC4xMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4xNDUs
IDAuMTU1LCAwLjIwLCAgMC4yMDUsIDAuMjEwLCAwLjIxMiB9OwogICAgY29uc3QgRzRkb3VibGUg
YXZubmJbXSA9IHsgMC4wMDAwMSwgMC4wMDAxLCAwLjAwMDYsIDAuMDAyNSwgMC4wMSwgMC4wMiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMDQsICAgIDAuMDUsICAgMC4xMiwgICAw
LjE1LCAgIDAuMTgsIDAuMjAgfTsKICAgIAogICAgYXZrID0gKGxvZyhhdmtrYltpYmluXSktbG9n
KGF2a2tiW2liaW4tMV0pKSooY2VudGVyb2ZtYXNzRW5lcmd5LWF2cnNbaWJpbi0xXSkKICAgICAg
LyhhdnJzW2liaW5dLWF2cnNbaWJpbi0xXSkgKyBsb2coYXZra2JbaWJpbi0xXSk7CiAgICBhdmsg
PSBleHAoYXZrKTsKICAgIAogICAgYXZ5ID0gKGxvZyhhdmt5W2liaW5dKS1sb2coYXZreVtpYmlu
LTFdKSkqKGNlbnRlcm9mbWFzc0VuZXJneS1hdnJzW2liaW4tMV0pCiAgICAgIC8oYXZyc1tpYmlu
XS1hdnJzW2liaW4tMV0pICsgbG9nKGF2a3lbaWJpbi0xXSk7CiAgICBhdnkgPSBleHAoYXZ5KTsK
ICAgIAogICAgYXZuID0gKGxvZyhhdm5uYltpYmluXSktbG9nKGF2bm5iW2liaW4tMV0pKSooY2Vu
dGVyb2ZtYXNzRW5lcmd5LWF2cnNbaWJpbi0xXSkKICAgICAgLyhhdnJzW2liaW5dLWF2cnNbaWJp
bi0xXSkgKyBsb2coYXZubmJbaWJpbi0xXSk7CiAgICBhdm4gPSBleHAoYXZuKTsKICAgIAogICAg
aWYoIGF2aythdnkrYXZuIDw9IDAuMCApcmV0dXJuOwogICAgCiAgICBpZiggY3VycmVudE1hc3Mg
PCBwcm90b25NYXNzIClhdnkgLz0gMi4wOwogICAgaWYoIHRhcmdldE1hc3MgPCBwcm90b25NYXNz
IClhdnkgPSAwLjA7CiAgICBhdnkgKz0gYXZrK2F2bjsKICAgIGF2ayArPSBhdm47CiAgICByYW4g
PSBHNFVuaWZvcm1SYW5kKCk7CiAgICBpZiggIHJhbiA8IGF2biApCiAgICB7CiAgICAgIGlmKCBh
dmFpbGFibGVFbmVyZ3kgPCAyLjAgKXJldHVybjsKICAgICAgaWYoIHZlY0xlbiA9PSAxICkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZGQgYSBuZXcgc2Vjb25kYXJ5CiAgICAgIHsK
ICAgICAgICBHNFJlYWN0aW9uUHJvZHVjdCAqcDEgPSBuZXcgRzRSZWFjdGlvblByb2R1Y3Q7CiAg
ICAgICAgaWYoIEc0VW5pZm9ybVJhbmQoKSA8IDAuNSApCiAgICAgICAgewogICAgICAgICAgdmVj
WzBdLT5TZXREZWZpbml0aW9uKCBhTmV1dHJvbiApOwogICAgICAgICAgcDEtPlNldERlZmluaXRp
b24oIGFuQW50aU5ldXRyb24gKTsKICAgICAgICAgIChHNFVuaWZvcm1SYW5kKCkgPCAwLjUpID8g
cDEtPlNldFNpZGUoIC0xICkgOiBwMS0+U2V0U2lkZSggMSApOwogICAgICAgIH0KICAgICAgICBl
bHNlCiAgICAgICAgewogICAgICAgICAgdmVjWzBdLT5TZXREZWZpbml0aW9uKCBhUHJvdG9uICk7
CiAgICAgICAgICBwMS0+U2V0RGVmaW5pdGlvbiggYW5BbnRpUHJvdG9uICk7CiAgICAgICAgICAo
RzRVbmlmb3JtUmFuZCgpIDwgMC41KSA/IHAxLT5TZXRTaWRlKCAtMSApIDogcDEtPlNldFNpZGUo
IDEgKTsKICAgICAgICB9CiAgICAgICAgdmVjLlNldEVsZW1lbnQoIHZlY0xlbisrLCBwMSApOwog
ICAgICAvLyBERUJVR0dJTkcgLS0+IER1bXBGcmFtZXM6OkR1bXBGcmFtZSh2ZWMsIHZlY0xlbik7
CiAgICAgIH0KICAgICAgZWxzZQogICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gcmVwbGFjZSB0d28gc2Vjb25kYXJpZXMKICAgICAgICBpZiggRzRV
bmlmb3JtUmFuZCgpIDwgMC41ICkKICAgICAgICB7CiAgICAgICAgICB2ZWNbaTNdLT5TZXREZWZp
bml0aW9uKCBhTmV1dHJvbiApOwogICAgICAgICAgdmVjW2k0XS0+U2V0RGVmaW5pdGlvbiggYW5B
bnRpTmV1dHJvbiApOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAg
dmVjW2kzXS0+U2V0RGVmaW5pdGlvbiggYVByb3RvbiApOwogICAgICAgICAgdmVjW2k0XS0+U2V0
RGVmaW5pdGlvbiggYW5BbnRpUHJvdG9uICk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBl
bHNlIGlmKCByYW4gPCBhdmsgKQogICAgewogICAgICBpZiggYXZhaWxhYmxlRW5lcmd5IDwgMS4w
IClyZXR1cm47CiAgICAgIAogICAgICBjb25zdCBHNGRvdWJsZSBra2JbXSA9IHsgMC4yNTAwLCAw
LjM3NTAsIDAuNTAwMCwgMC41NjI1LCAwLjYyNTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAwLjY4NzUsIDAuNzUwMCwgMC44NzUwLCAxLjAwMCB9OwogICAgICBjb25zdCBHNGludCBp
cGFra2IxW10gPSB7IDEwLCAxMCwgMTAsIDExLCAxMSwgMTIsIDEyLCAxMSwgMTIgfTsKICAgICAg
Y29uc3QgRzRpbnQgaXBha2tiMltdID0geyAxMywgMTEsIDEyLCAxMSwgMTIsIDExLCAxMiwgMTMs
IDEzIH07CiAgICAgIHJhbiA9IEc0VW5pZm9ybVJhbmQoKTsKICAgICAgaSA9IDA7CiAgICAgIHdo
aWxlKCAoaTw5KSAmJiAocmFuPj1ra2JbaV0pICkrK2k7CiAgICAgIGlmKCBpID09IDkgKXJldHVy
bjsKICAgICAgLy8KICAgICAgLy8gaXBha2tiW10gPSB7IDEwLDEzLCAxMCwxMSwgMTAsMTIsIDEx
LDExLCAxMSwxMiwgMTIsMTEsIDEyLDEyLCAxMSwxMywgMTIsMTMgfTsKICAgICAgLy8gY2hhcmdl
ICAgICAgICsgIC0gICArICAwICAgKyAgMCAgIDAgIDAgICAwICAwICAgMCAgMCAgIDAgIDAgICAw
ICAtICAgMCAgLQogICAgICAvLwogICAgICBzd2l0Y2goIGlwYWtrYjFbaV0gKQogICAgICB7CiAg
ICAgICBjYXNlIDEwOgogICAgICAgICB2ZWNbaTNdLT5TZXREZWZpbml0aW9uKCBhS2FvblBsdXMg
KTsKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIDExOgogICAgICAgICB2ZWNbaTNdLT5TZXRE
ZWZpbml0aW9uKCBhS2FvblpTICk7CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSAxMjoKICAg
ICAgICAgdmVjW2kzXS0+U2V0RGVmaW5pdGlvbiggYUthb25aTCApOwogICAgICAgICBicmVhazsK
ICAgICAgfQogICAgICBpZiggdmVjTGVuID09IDEgKSAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gYWRkIGEgc2Vjb25kYXJ5CiAgICAgIHsKICAgICAgICBHNFJlYWN0aW9uUHJvZHVjdCAqcDEg
PSBuZXcgRzRSZWFjdGlvblByb2R1Y3Q7CiAgICAgICAgc3dpdGNoKCBpcGFra2IyW2ldICkKICAg
ICAgICB7CiAgICAgICAgIGNhc2UgMTE6CiAgICAgICAgICAgcDEtPlNldERlZmluaXRpb24oIGFL
YW9uWlMgKTsKICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAxMjoKICAgICAgICAgICBw
MS0+U2V0RGVmaW5pdGlvbiggYUthb25aTCApOwogICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIDEzOgogICAgICAgICAgIHAxLT5TZXREZWZpbml0aW9uKCBhS2Fvbk1pbnVzICk7CiAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIChHNFVuaWZvcm1SYW5kKCkgPCAwLjUpID8g
cDEtPlNldFNpZGUoIC0xICkgOiBwMS0+U2V0U2lkZSggMSApOwogICAgICAgIHZlYy5TZXRFbGVt
ZW50KCB2ZWNMZW4rKywgcDEgKTsKICAgICAgLy8gREVCVUdHSU5HIC0tPiBEdW1wRnJhbWVzOjpE
dW1wRnJhbWUodmVjLCB2ZWNMZW4pOwogICAgICB9CiAgICAgIGVsc2UgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVwbGFjZQogICAgICB7CiAgICAgICAgc3dpdGNo
KCBpcGFra2IyW2ldICkKICAgICAgICB7CiAgICAgICAgIGNhc2UgMTE6CiAgICAgICAgICAgdmVj
W2k0XS0+U2V0RGVmaW5pdGlvbiggYUthb25aUyApOwogICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIDEyOgogICAgICAgICAgIHZlY1tpNF0tPlNldERlZmluaXRpb24oIGFLYW9uWkwgKTsK
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAxMzoKICAgICAgICAgICB2ZWNbaTRdLT5T
ZXREZWZpbml0aW9uKCBhS2Fvbk1pbnVzICk7CiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQog
ICAgICB9CiAgICB9CiAgICBlbHNlIGlmKCByYW4gPCBhdnkgKQogICAgewogICAgICBpZiggYXZh
aWxhYmxlRW5lcmd5IDwgMS42IClyZXR1cm47CiAgICAgIAogICAgICBjb25zdCBHNGRvdWJsZSBr
eVtdID0geyAwLjIwMCwgMC4zMDAsIDAuNDAwLCAwLjU1MCwgMC42MjUsIDAuNzAwLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAwLjgwMCwgMC44NTAsIDAuOTAwLCAwLjk1MCwgMC45NzUs
IDEuMDAwIH07CiAgICAgIGNvbnN0IEc0aW50IGlwYWt5MVtdID0geyAxOCwgMTgsIDE4LCAyMCwg
MjAsIDIwLCAyMSwgMjEsIDIxLCAyMiwgMjIsIDIyIH07CiAgICAgIGNvbnN0IEc0aW50IGlwYWt5
MltdID0geyAxMCwgMTEsIDEyLCAxMCwgMTEsIDEyLCAxMCwgMTEsIDEyLCAxMCwgMTEsIDEyIH07
CiAgICAgIGNvbnN0IEc0aW50IGlwYWt5YjFbXSA9IHsgMTksIDE5LCAxOSwgMjMsIDIzLCAyMywg
MjQsIDI0LCAyNCwgMjUsIDI1LCAyNSB9OwogICAgICBjb25zdCBHNGludCBpcGFreWIyW10gPSB7
IDEzLCAxMiwgMTEsIDEzLCAxMiwgMTEsIDEzLCAxMiwgMTEsIDEzLCAxMiwgMTEgfTsKICAgICAg
cmFuID0gRzRVbmlmb3JtUmFuZCgpOwogICAgICBpID0gMDsKICAgICAgd2hpbGUoIChpPDEyKSAm
JiAocmFuPmt5W2ldKSApKytpOwogICAgICBpZiggaSA9PSAxMiApcmV0dXJuOwogICAgICBpZigg
KGN1cnJlbnRNYXNzPHByb3Rvbk1hc3MpIHx8IChHNFVuaWZvcm1SYW5kKCk8MC41KSApCiAgICAg
IHsKICAgICAgICAvLyBpcGFreVtdID0geyAxOCwxMCwgMTgsMTEsIDE4LDEyLCAyMCwxMCwgMjAs
MTEsIDIwLDEyLAogICAgICAgIC8vICAgICAgICAgICAgIDAgICsgICAwICAwICAgMCAgMCAgICsg
ICsgICArICAwICAgKyAgMAogICAgICAgIC8vCiAgICAgICAgLy8gICAgICAgICAgICAgMjEsMTAs
IDIxLDExLCAyMSwxMiwgMjIsMTAsIDIyLDExLCAyMiwxMiB9CiAgICAgICAgLy8gICAgICAgICAg
ICAgMCAgKyAgIDAgIDAgICAwICAwICAgLSAgKyAgIC0gIDAgICAtICAwCiAgICAgICAgc3dpdGNo
KCBpcGFreTFbaV0gKQogICAgICAgIHsKICAgICAgICAgY2FzZSAxODoKICAgICAgICAgICB0YXJn
ZXRQYXJ0aWNsZS5TZXREZWZpbml0aW9uKCBhTGFtYmRhICk7CiAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgMjA6CiAgICAgICAgICAgdGFyZ2V0UGFydGljbGUuU2V0RGVmaW5pdGlvbigg
YVNpZ21hUGx1cyApOwogICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIDIxOgogICAgICAg
ICAgIHRhcmdldFBhcnRpY2xlLlNldERlZmluaXRpb24oIGFTaWdtYVplcm8gKTsKICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSAyMjoKICAgICAgICAgICB0YXJnZXRQYXJ0aWNsZS5TZXRE
ZWZpbml0aW9uKCBhU2lnbWFNaW51cyApOwogICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAg
ICAgICB0YXJnZXRIYXNDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICBzd2l0Y2goIGlwYWt5MltpXSAp
CiAgICAgICAgewogICAgICAgICBjYXNlIDEwOgogICAgICAgICAgIHZlY1tpM10tPlNldERlZmlu
aXRpb24oIGFLYW9uUGx1cyApOyAKICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAxMToK
ICAgICAgICAgICB2ZWNbaTNdLT5TZXREZWZpbml0aW9uKCBhS2FvblpTICk7CiAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgMTI6CiAgICAgICAgICAgdmVjW2kzXS0+U2V0RGVmaW5pdGlv
biggYUthb25aTCApOwogICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBl
bHNlICAvLyAoY3VycmVudE1hc3MgPj0gcHJvdG9uTWFzcykgJiYgKEc0VW5pZm9ybVJhbmQoKSA+
PSAwLjUpCiAgICAgIHsKICAgICAgICAvLyBpcGFreWJbXSA9IHsgMTksMTMsIDE5LDEyLCAxOSwx
MSwgMjMsMTMsIDIzLDEyLCAyMywxMSwKICAgICAgICAvLyAgICAgICAgICAgICAgMjQsMTMsIDI0
LDEyLCAyNCwxMSwgMjUsMTMsIDI1LDEyLCAyNSwxMSB9OwogICAgICAgIGlmKCAoY3VycmVudFBh
cnRpY2xlLkdldERlZmluaXRpb24oKSA9PSBhbkFudGlQcm90b24pIHx8CiAgICAgICAgICAgIChj
dXJyZW50UGFydGljbGUuR2V0RGVmaW5pdGlvbigpID09IGFuQW50aU5ldXRyb24pIHx8CiAgICAg
ICAgICAgIChjdXJyZW50UGFydGljbGUuR2V0RGVmaW5pdGlvbigpID09IGFuQW50aUxhbWJkYSkg
fHwKICAgICAgICAgICAgKGN1cnJlbnRNYXNzID4gc2lnbWFNaW51c01hc3MpICkKICAgICAgICB7
CiAgICAgICAgICBzd2l0Y2goIGlwYWt5YjFbaV0gKQogICAgICAgICAgewogICAgICAgICAgIGNh
c2UgMTk6CiAgICAgICAgICAgICBjdXJyZW50UGFydGljbGUuU2V0RGVmaW5pdGlvbkFuZFVwZGF0
ZUUoIGFuQW50aUxhbWJkYSApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSAy
MzoKICAgICAgICAgICAgIGN1cnJlbnRQYXJ0aWNsZS5TZXREZWZpbml0aW9uQW5kVXBkYXRlRSgg
YW5BbnRpU2lnbWFQbHVzICk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIDI0
OgogICAgICAgICAgICAgY3VycmVudFBhcnRpY2xlLlNldERlZmluaXRpb25BbmRVcGRhdGVFKCBh
bkFudGlTaWdtYVplcm8gKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgMjU6
CiAgICAgICAgICAgICBjdXJyZW50UGFydGljbGUuU2V0RGVmaW5pdGlvbkFuZFVwZGF0ZUUoIGFu
QW50aVNpZ21hTWludXMgKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAg
ICAgaW5jaWRlbnRIYXNDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgIHN3aXRjaCggaXBha3liMltp
XSApCiAgICAgICAgICB7CiAgICAgICAgICAgY2FzZSAxMToKICAgICAgICAgICAgIHZlY1tpM10t
PlNldERlZmluaXRpb24oIGFLYW9uWlMgKTsgCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICBjYXNlIDEyOgogICAgICAgICAgICAgdmVjW2kzXS0+U2V0RGVmaW5pdGlvbiggYUthb25aTCAp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSAxMzoKICAgICAgICAgICAgIHZl
Y1tpM10tPlNldERlZmluaXRpb24oIGFLYW9uTWludXMgKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgc3dp
dGNoKCBpcGFreTFbaV0gKQogICAgICAgICAgewogICAgICAgICAgIGNhc2UgMTg6CiAgICAgICAg
ICAgICBjdXJyZW50UGFydGljbGUuU2V0RGVmaW5pdGlvbkFuZFVwZGF0ZUUoIGFMYW1iZGEgKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgMjA6CiAgICAgICAgICAgICBjdXJy
ZW50UGFydGljbGUuU2V0RGVmaW5pdGlvbkFuZFVwZGF0ZUUoIGFTaWdtYVBsdXMgKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgMjE6CiAgICAgICAgICAgICBjdXJyZW50UGFy
dGljbGUuU2V0RGVmaW5pdGlvbkFuZFVwZGF0ZUUoIGFTaWdtYVplcm8gKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgIGNhc2UgMjI6CiAgICAgICAgICAgICBjdXJyZW50UGFydGljbGUu
U2V0RGVmaW5pdGlvbkFuZFVwZGF0ZUUoIGFTaWdtYU1pbnVzICk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgIH0KICAgICAgICAgIGluY2lkZW50SGFzQ2hhbmdlZCA9IHRydWU7CiAgICAg
ICAgICBzd2l0Y2goIGlwYWt5MltpXSApCiAgICAgICAgICB7CiAgICAgICAgICAgY2FzZSAxMDoK
ICAgICAgICAgICAgIHZlY1tpM10tPlNldERlZmluaXRpb24oIGFLYW9uUGx1cyApOyAKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgMTE6CiAgICAgICAgICAgICB2ZWNbaTNdLT5T
ZXREZWZpbml0aW9uKCBhS2FvblpTICk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBj
YXNlIDEyOgogICAgICAgICAgICAgdmVjW2kzXS0+U2V0RGVmaW5pdGlvbiggYUthb25aTCApOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAg
ICBlbHNlIHJldHVybjsKICAgIC8vCiAgICAvLyAgY2hlY2sgdGhlIGF2YWlsYWJsZSBlbmVyZ3kK
ICAgIC8vICAgaWYgdGhlcmUgaXMgbm90IGVub3VnaCBlbmVyZ3kgZm9yIGtrYi9reSBwYWlyIHBy
b2R1Y3Rpb24KICAgIC8vICAgdGhlbiByZWR1Y2UgdGhlIG51bWJlciBvZiBzZWNvbmRhcnkgcGFy
dGljbGVzIAogICAgLy8gIE5PVEU6CiAgICAvLyAgICAgICAgdGhlIG51bWJlciBvZiBzZWNvbmRh
cmllcyBtYXkgaGF2ZSBiZWVuIGNoYW5nZWQKICAgIC8vICAgICAgICB0aGUgaW5jaWRlbnQgYW5k
L29yIHRhcmdldCBwYXJ0aWNsZXMgbWF5IGhhdmUgY2hhbmdlZAogICAgLy8gICAgICAgIGNoYXJn
ZSBjb25zZXJ2YXRpb24gaXMgaWdub3JlZCAoYXMgd2VsbCBhcyBzdHJhbmduZXNzIGNvbnNlcnZh
dGlvbikKICAgIC8vCiAgICBjdXJyZW50TWFzcyA9IGN1cnJlbnRQYXJ0aWNsZS5HZXRNYXNzKCkv
R2VWOwogICAgdGFyZ2V0TWFzcyA9IHRhcmdldFBhcnRpY2xlLkdldE1hc3MoKS9HZVY7CiAgICAK
ICAgIEc0ZG91YmxlIGVuZXJneUNoZWNrID0gY2VudGVyb2ZtYXNzRW5lcmd5LShjdXJyZW50TWFz
cyt0YXJnZXRNYXNzKTsKICAgIGZvciggaT0wOyBpPHZlY0xlbjsgKytpICkKICAgIHsKICAgICAg
ZW5lcmd5Q2hlY2sgLT0gdmVjW2ldLT5HZXRNYXNzKCkvR2VWOwogICAgICBpZiggZW5lcmd5Q2hl
Y2sgPCAwLjAgKSAgICAgIC8vIGNob3Agb2ZmIHRoZSBzZWNvbmRhcnkgTGlzdAogICAgICB7CiAg
ICAgICAgdmVjTGVuID0gRzRzdGQ6Om1heCggMCwgLS1pICk7IC8vIGxvb2tzIGxpa2UgYSBtZW1v
cnkgbGVhayBAQEBAQEBAQEBAQEAKCUc0aW50IGo7Cglmb3Ioaj1pOyBqPHZlY0xlbjsgaisrKSBk
ZWxldGUgdmVjW2pdOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICByZXR1cm47CiAg
fQoKIHZvaWQKICBHNFJlYWN0aW9uRHluYW1pY3M6Ok51Y2xlYXJSZWFjdGlvbigKICAgRzRGYXN0
VmVjdG9yPEc0UmVhY3Rpb25Qcm9kdWN0LDQ+ICZ2ZWMsCiAgIEc0aW50ICZ2ZWNMZW4sCiAgIGNv
bnN0IEc0RHluYW1pY1BhcnRpY2xlICpvcmlnaW5hbEluY2lkZW50LAogICBjb25zdCBHNE51Y2xl
dXMgJnRhcmdldE51Y2xldXMsCiAgIGNvbnN0IEc0ZG91YmxlIHRoZUF0b21pY01hc3MsCiAgIGNv
bnN0IEc0ZG91YmxlICptYXNzICkKICB7CiAgICAvLyBkZXJpdmVkIGZyb20gb3JpZ2luYWwgRk9S
VFJBTiBjb2RlIE5VQ1JFQyBieSBILiBGZXNlZmVsZHQgKDEyLUZlYi0xOTg3KQogICAgLy8KICAg
IC8vIE51Y2xlYXIgcmVhY3Rpb24ga2luZW1hdGljcyBhdCBsb3cgZW5lcmdpZXMKICAgIC8vCiAg
ICBHNFBhcnRpY2xlRGVmaW5pdGlvbiAqYUdhbW1hID0gRzRHYW1tYTo6R2FtbWEoKTsKICAgIEc0
UGFydGljbGVEZWZpbml0aW9uICphUHJvdG9uID0gRzRQcm90b246OlByb3RvbigpOwogICAgRzRQ
YXJ0aWNsZURlZmluaXRpb24gKmFOZXV0cm9uID0gRzROZXV0cm9uOjpOZXV0cm9uKCk7CiAgICBH
NFBhcnRpY2xlRGVmaW5pdGlvbiAqYURldXRlcm9uID0gRzREZXV0ZXJvbjo6RGV1dGVyb24oKTsK
ICAgIEc0UGFydGljbGVEZWZpbml0aW9uICphVHJpdG9uID0gRzRUcml0b246OlRyaXRvbigpOwog
ICAgRzRQYXJ0aWNsZURlZmluaXRpb24gKmFuQWxwaGEgPSBHNEFscGhhOjpBbHBoYSgpOwogICAg
CiAgICBjb25zdCBHNGRvdWJsZSBhUHJvdG9uTWFzcyA9IGFQcm90b24tPkdldFBER01hc3MoKS9N
ZVY7CiAgICBjb25zdCBHNGRvdWJsZSBhTmV1dHJvbk1hc3MgPSBhTmV1dHJvbi0+R2V0UERHTWFz
cygpL01lVjsKICAgIGNvbnN0IEc0ZG91YmxlIGFEZXV0ZXJvbk1hc3MgPSBhRGV1dGVyb24tPkdl
dFBER01hc3MoKS9NZVY7CiAgICBjb25zdCBHNGRvdWJsZSBhVHJpdG9uTWFzcyA9IGFUcml0b24t
PkdldFBER01hc3MoKS9NZVY7CiAgICBjb25zdCBHNGRvdWJsZSBhbkFscGhhTWFzcyA9IGFuQWxw
aGEtPkdldFBER01hc3MoKS9NZVY7CgogICAgRzRSZWFjdGlvblByb2R1Y3QgY3VycmVudFBhcnRp
Y2xlOwogICAgY3VycmVudFBhcnRpY2xlID0gKm9yaWdpbmFsSW5jaWRlbnQ7CiAgICAvLwogICAg
Ly8gU2V0IGJlYW0gcGFydGljbGUsIHRha2Uga2luZXRpYyBlbmVyZ3kgb2YgY3VycmVudCBwYXJ0
aWNsZSBhcyB0aGUKICAgIC8vIGZ1bmRhbWVudGFsIHF1YW50aXR5LiAgRHVlIHRvIHRoZSBkaWZm
aWN1bHQga2luZW1hdGljLCBhbGwgbWFzc2VzIGhhdmUgdG8KICAgIC8vIGJlIGFzc2lnbmVkIHRo
ZSBiZXN0IG1lYXN1cmVkIHZhbHVlcwogICAgLy8KICAgIEc0ZG91YmxlIHAgPSBjdXJyZW50UGFy
dGljbGUuR2V0VG90YWxNb21lbnR1bSgpOwogICAgRzRkb3VibGUgcHAgPSBjdXJyZW50UGFydGlj
bGUuR2V0TW9tZW50dW0oKS5tYWcoKTsKICAgIGlmKCBwcCA8PSAwLjAwMSpNZVYgKQogICAgewog
ICAgICBHNGRvdWJsZSBwaGludmUgPSB0d29waSpHNFVuaWZvcm1SYW5kKCk7CiAgICAgIEc0ZG91
YmxlIHJ0aG52ZSA9IGFjb3MoIEc0c3RkOjptYXgoIC0xLjAsIEc0c3RkOjptaW4oIDEuMCwgLTEu
MCArIDIuMCpHNFVuaWZvcm1SYW5kKCkgKSApICk7CiAgICAgIGN1cnJlbnRQYXJ0aWNsZS5TZXRN
b21lbnR1bSggcCpzaW4ocnRobnZlKSpjb3MocGhpbnZlKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwKnNpbihydGhudmUpKnNpbihwaGludmUpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHAqY29zKHJ0aG52ZSkgKTsKICAgIH0KICAgIGVsc2UKICAgICAg
Y3VycmVudFBhcnRpY2xlLlNldE1vbWVudHVtKCBjdXJyZW50UGFydGljbGUuR2V0TW9tZW50dW0o
KSAqIChwL3BwKSApOwogICAgLy8KICAgIC8vIGNhbGN1bGF0ZSBRLXZhbHVlIG9mIHJlYWN0aW9u
cwogICAgLy8KICAgIEc0ZG91YmxlIGN1cnJlbnRLaW5ldGljID0gY3VycmVudFBhcnRpY2xlLkdl
dEtpbmV0aWNFbmVyZ3koKS9NZVY7CiAgICBHNGRvdWJsZSBjdXJyZW50TWFzcyA9IGN1cnJlbnRQ
YXJ0aWNsZS5HZXREZWZpbml0aW9uKCktPkdldFBER01hc3MoKS9NZVY7CiAgICBHNGRvdWJsZSBx
diA9IGN1cnJlbnRLaW5ldGljICsgdGhlQXRvbWljTWFzcyArIGN1cnJlbnRNYXNzOwogICAgCiAg
ICBHNGRvdWJsZSBxdmFsWzldOwogICAgcXZhbFswXSA9IHF2IC0gbWFzc1swXTsKICAgIHF2YWxb
MV0gPSBxdiAtIG1hc3NbMV0gLSBhTmV1dHJvbk1hc3M7CiAgICBxdmFsWzJdID0gcXYgLSBtYXNz
WzJdIC0gYVByb3Rvbk1hc3M7CiAgICBxdmFsWzNdID0gcXYgLSBtYXNzWzNdIC0gYURldXRlcm9u
TWFzczsKICAgIHF2YWxbNF0gPSBxdiAtIG1hc3NbNF0gLSBhVHJpdG9uTWFzczsKICAgIHF2YWxb
NV0gPSBxdiAtIG1hc3NbNV0gLSBhbkFscGhhTWFzczsKICAgIHF2YWxbNl0gPSBxdiAtIG1hc3Nb
Nl0gLSBhTmV1dHJvbk1hc3MgLSBhTmV1dHJvbk1hc3M7CiAgICBxdmFsWzddID0gcXYgLSBtYXNz
WzddIC0gYU5ldXRyb25NYXNzIC0gYVByb3Rvbk1hc3M7CiAgICBxdmFsWzhdID0gcXYgLSBtYXNz
WzhdIC0gYVByb3Rvbk1hc3MgIC0gYVByb3Rvbk1hc3M7CiAgICAKICAgIGlmKCBjdXJyZW50UGFy
dGljbGUuR2V0RGVmaW5pdGlvbigpID09IGFOZXV0cm9uICkKICAgIHsKICAgICAgY29uc3QgRzRk
b3VibGUgQSA9IHRhcmdldE51Y2xldXMuR2V0TigpOyAgICAvLyBhdG9taWMgd2VpZ2h0CiAgICAg
IGlmKCBHNFVuaWZvcm1SYW5kKCkgPiAoKEEtMS4wKS8yMzAuMCkqKChBLTEuMCkvMjMwLjApICkK
ICAgICAgICBxdmFsWzBdID0gMC4wOwogICAgICBpZiggRzRVbmlmb3JtUmFuZCgpID49IGN1cnJl
bnRLaW5ldGljLzcuOTI1NCpBICkKICAgICAgICBxdmFsWzJdID0gcXZhbFszXSA9IHF2YWxbNF0g
PSBxdmFsWzVdID0gcXZhbFs4XSA9IDAuMDsKICAgIH0KICAgIGVsc2UKICAgICAgcXZhbFswXSA9
IDAuMDsKICAgIAogICAgRzRpbnQgaTsKICAgIHF2ID0gMC4wOwogICAgZm9yKCBpPTA7IGk8OTsg
KytpICkKICAgIHsKICAgICAgaWYoIG1hc3NbaV0gPCA1MDAuMCpNZVYgKXF2YWxbaV0gPSAwLjA7
CiAgICAgIGlmKCBxdmFsW2ldIDwgMC4wIClxdmFsW2ldID0gMC4wOwogICAgICBxdiArPSBxdmFs
W2ldOwogICAgfQogICAgRzRkb3VibGUgcXYxID0gMC4wOwogICAgRzRkb3VibGUgcmFuID0gRzRV
bmlmb3JtUmFuZCgpOwogICAgRzRpbnQgaW5kZXg7CiAgICBmb3IoIGluZGV4PTA7IGluZGV4PDk7
ICsraW5kZXggKQogICAgewogICAgICBpZiggcXZhbFtpbmRleF0gPiAwLjAgKQogICAgICB7CiAg
ICAgICAgcXYxICs9IHF2YWxbaW5kZXhdL3F2OwogICAgICAgIGlmKCByYW4gPD0gcXYxIClicmVh
azsKICAgICAgfQogICAgfQogICAgaWYoIGluZGV4ID09IDkgKSAgLy8gbG9vcCBjb250aW51ZWQg
dG8gdGhlIGVuZAogICAgICBHNEV4Y2VwdGlvbigiRzRSZWFjdGlvbkR5bmFtaWNzOjpOdWNsZWFy
UmVhY3Rpb246IGluZWxhc3RpYyByZWFjdGlvbiBraW5lbWF0aWNhbGx5IG5vdCBwb3NzaWJsZSIp
OwogICAgCiAgICBHNGRvdWJsZSBrZSA9IGN1cnJlbnRQYXJ0aWNsZS5HZXRLaW5ldGljRW5lcmd5
KCkvR2VWOwogICAgRzRpbnQgbnQgPSAyOwogICAgaWYoIChpbmRleD49NikgfHwgKEc0VW5pZm9y
bVJhbmQoKTxHNHN0ZDo6bWluKDAuNSxrZSoxMC4wKSkgKW50ID0gMzsKICAgIAogICAgRzRSZWFj
dGlvblByb2R1Y3QgKip2ID0gbmV3IEc0UmVhY3Rpb25Qcm9kdWN0ICogWzNdOwogICAgdlswXSA9
ICBuZXcgRzRSZWFjdGlvblByb2R1Y3Q7CiAgICB2WzFdID0gIG5ldyBHNFJlYWN0aW9uUHJvZHVj
dDsKICAgIHZbMl0gPSAgbmV3IEc0UmVhY3Rpb25Qcm9kdWN0OwogICAgCiAgICB2WzBdLT5TZXRN
YXNzKCBtYXNzW2luZGV4XSpNZVYgKTsKICAgIHN3aXRjaCggaW5kZXggKQogICAgewogICAgIGNh
c2UgMDoKICAgICAgIHZbMV0tPlNldERlZmluaXRpb24oIGFHYW1tYSApOwogICAgICAgdlsyXS0+
U2V0RGVmaW5pdGlvbiggYUdhbW1hICk7CiAgICAgICBicmVhazsKICAgICBjYXNlIDE6CiAgICAg
ICB2WzFdLT5TZXREZWZpbml0aW9uKCBhTmV1dHJvbiApOwogICAgICAgdlsyXS0+U2V0RGVmaW5p
dGlvbiggYUdhbW1hICk7CiAgICAgICBicmVhazsKICAgICBjYXNlIDI6CiAgICAgICB2WzFdLT5T
ZXREZWZpbml0aW9uKCBhUHJvdG9uICk7CiAgICAgICB2WzJdLT5TZXREZWZpbml0aW9uKCBhR2Ft
bWEgKTsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgMzoKICAgICAgIHZbMV0tPlNldERlZmluaXRp
b24oIGFEZXV0ZXJvbiApOwogICAgICAgdlsyXS0+U2V0RGVmaW5pdGlvbiggYUdhbW1hICk7CiAg
ICAgICBicmVhazsKICAgICBjYXNlIDQ6CiAgICAgICB2WzFdLT5TZXREZWZpbml0aW9uKCBhVHJp
dG9uICk7CiAgICAgICB2WzJdLT5TZXREZWZpbml0aW9uKCBhR2FtbWEgKTsKICAgICAgIGJyZWFr
OwogICAgIGNhc2UgNToKICAgICAgIHZbMV0tPlNldERlZmluaXRpb24oIGFuQWxwaGEgKTsKICAg
ICAgIHZbMl0tPlNldERlZmluaXRpb24oIGFHYW1tYSApOwogICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSA2OgogICAgICAgdlsxXS0+U2V0RGVmaW5pdGlvbiggYU5ldXRyb24gKTsKICAgICAgIHZbMl0t
PlNldERlZmluaXRpb24oIGFOZXV0cm9uICk7CiAgICAgICBicmVhazsKICAgICBjYXNlIDc6CiAg
ICAgICB2WzFdLT5TZXREZWZpbml0aW9uKCBhTmV1dHJvbiApOwogICAgICAgdlsyXS0+U2V0RGVm
aW5pdGlvbiggYVByb3RvbiApOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSA4OgogICAgICAgdlsx
XS0+U2V0RGVmaW5pdGlvbiggYVByb3RvbiApOwogICAgICAgdlsyXS0+U2V0RGVmaW5pdGlvbigg
YVByb3RvbiApOwogICAgICAgYnJlYWs7CiAgICB9CiAgICAvLwogICAgLy8gY2FsY3VsYXRlIGNl
bnRyZSBvZiBtYXNzIGVuZXJneQogICAgLy8KICAgIEc0UmVhY3Rpb25Qcm9kdWN0IHBzZXVkbzE7
CiAgICBwc2V1ZG8xLlNldE1hc3MoIHRoZUF0b21pY01hc3MqTWVWICk7CiAgICBwc2V1ZG8xLlNl
dFRvdGFsRW5lcmd5KCB0aGVBdG9taWNNYXNzKk1lViApOwogICAgRzRSZWFjdGlvblByb2R1Y3Qg
cHNldWRvMiA9IGN1cnJlbnRQYXJ0aWNsZSArIHBzZXVkbzE7CiAgICBwc2V1ZG8yLlNldE1vbWVu
dHVtKCBwc2V1ZG8yLkdldE1vbWVudHVtKCkgKiAoLTEuMCkgKTsKICAgIC8vCiAgICAvLyB1c2Ug
cGhhc2Ugc3BhY2Ugcm91dGluZSBpbiBjZW50cmUgb2YgbWFzcyBzeXN0ZW0KICAgIC8vCiAgICBH
NEZhc3RWZWN0b3I8RzRSZWFjdGlvblByb2R1Y3QsMTI4PiB0ZW1wVjsKICAgIHRlbXBWLkluaXRp
YWxpemUoIG50ICk7CiAgICBHNGludCB0ZW1wTGVuID0gMDsKICAgIHRlbXBWLlNldEVsZW1lbnQo
IHRlbXBMZW4rKywgdlswXSApOwogICAgdGVtcFYuU2V0RWxlbWVudCggdGVtcExlbisrLCB2WzFd
ICk7CiAgICBpZiggbnQgPT0gMyApdGVtcFYuU2V0RWxlbWVudCggdGVtcExlbisrLCB2WzJdICk7
CiAgICBHNGJvb2wgY29uc3RhbnRDcm9zc1NlY3Rpb24gPSB0cnVlOwogICAgR2VuZXJhdGVOQm9k
eUV2ZW50KCBwc2V1ZG8yLkdldE1hc3MoKS9NZVYsIGNvbnN0YW50Q3Jvc3NTZWN0aW9uLCB0ZW1w
ViwgdGVtcExlbiApOwogICAgdlswXS0+TG9yZW50eiggKnZbMF0sIHBzZXVkbzIgKTsKICAgIHZb
MV0tPkxvcmVudHooICp2WzFdLCBwc2V1ZG8yICk7CiAgICBpZiggbnQgPT0gMyApdlsyXS0+TG9y
ZW50eiggKnZbMl0sIHBzZXVkbzIgKTsKICAgIAogICAgRzRib29sIHBhcnRpY2xlSXNEZWZpbmVk
ID0gZmFsc2U7CiAgICBpZiggdlswXS0+R2V0TWFzcygpL01lViAtIGFQcm90b25NYXNzIDwgMC4x
ICkKICAgIHsKICAgICAgdlswXS0+U2V0RGVmaW5pdGlvbiggYVByb3RvbiApOwogICAgICBwYXJ0
aWNsZUlzRGVmaW5lZCA9IHRydWU7CiAgICB9CiAgICBlbHNlIGlmKCB2WzBdLT5HZXRNYXNzKCkv
TWVWIC0gYU5ldXRyb25NYXNzIDwgMC4xICkKICAgIHsKICAgICAgdlswXS0+U2V0RGVmaW5pdGlv
biggYU5ldXRyb24gKTsKICAgICAgcGFydGljbGVJc0RlZmluZWQgPSB0cnVlOwogICAgfQogICAg
ZWxzZSBpZiggdlswXS0+R2V0TWFzcygpL01lViAtIGFEZXV0ZXJvbk1hc3MgPCAwLjEgKQogICAg
ewogICAgICB2WzBdLT5TZXREZWZpbml0aW9uKCBhRGV1dGVyb24gKTsKICAgICAgcGFydGljbGVJ
c0RlZmluZWQgPSB0cnVlOwogICAgfQogICAgZWxzZSBpZiggdlswXS0+R2V0TWFzcygpL01lViAt
IGFUcml0b25NYXNzIDwgMC4xICkKICAgIHsKICAgICAgdlswXS0+U2V0RGVmaW5pdGlvbiggYVRy
aXRvbiApOwogICAgICBwYXJ0aWNsZUlzRGVmaW5lZCA9IHRydWU7CiAgICB9CiAgICBlbHNlIGlm
KCB2WzBdLT5HZXRNYXNzKCkvTWVWIC0gYW5BbHBoYU1hc3MgPCAwLjEgKQogICAgewogICAgICB2
WzBdLT5TZXREZWZpbml0aW9uKCBhbkFscGhhICk7CiAgICAgIHBhcnRpY2xlSXNEZWZpbmVkID0g
dHJ1ZTsKICAgIH0KICAgIGN1cnJlbnRQYXJ0aWNsZS5TZXRLaW5ldGljRW5lcmd5KAogICAgIEc0
c3RkOjptYXgoIDAuMDAxLCBjdXJyZW50UGFydGljbGUuR2V0S2luZXRpY0VuZXJneSgpL01lViAp
ICk7CiAgICBwID0gY3VycmVudFBhcnRpY2xlLkdldFRvdGFsTW9tZW50dW0oKTsKICAgIHBwID0g
Y3VycmVudFBhcnRpY2xlLkdldE1vbWVudHVtKCkubWFnKCk7CiAgICBpZiggcHAgPD0gMC4wMDEq
TWVWICkKICAgIHsKICAgICAgRzRkb3VibGUgcGhpbnZlID0gdHdvcGkqRzRVbmlmb3JtUmFuZCgp
OwogICAgICBHNGRvdWJsZSBydGhudmUgPSBhY29zKCBHNHN0ZDo6bWF4KCAtMS4wLCBHNHN0ZDo6
bWluKCAxLjAsIC0xLjAgKyAyLjAqRzRVbmlmb3JtUmFuZCgpICkgKSApOwogICAgICBjdXJyZW50
UGFydGljbGUuU2V0TW9tZW50dW0oIHAqc2luKHJ0aG52ZSkqY29zKHBoaW52ZSksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcCpzaW4ocnRobnZlKSpzaW4ocGhpbnZlKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwKmNvcyhydGhudmUpICk7CiAgICB9CiAg
ICBlbHNlCiAgICAgIGN1cnJlbnRQYXJ0aWNsZS5TZXRNb21lbnR1bSggY3VycmVudFBhcnRpY2xl
LkdldE1vbWVudHVtKCkgKiAocC9wcCkgKTsKICAgIAogICAgaWYoIHBhcnRpY2xlSXNEZWZpbmVk
ICkKICAgIHsKICAgICAgdlswXS0+U2V0S2luZXRpY0VuZXJneSgKICAgICAgIEc0c3RkOjptYXgo
IDAuMDAxLCAwLjUqRzRVbmlmb3JtUmFuZCgpKnZbMF0tPkdldEtpbmV0aWNFbmVyZ3koKS9NZVYg
KSApOwogICAgICBwID0gdlswXS0+R2V0VG90YWxNb21lbnR1bSgpOwogICAgICBwcCA9IHZbMF0t
PkdldE1vbWVudHVtKCkubWFnKCk7CiAgICAgIGlmKCBwcCA8PSAwLjAwMSpNZVYgKQogICAgICB7
CiAgICAgICAgRzRkb3VibGUgcGhpbnZlID0gdHdvcGkqRzRVbmlmb3JtUmFuZCgpOwogICAgICAg
IEc0ZG91YmxlIHJ0aG52ZSA9IGFjb3MoIEc0c3RkOjptYXgoLTEuMCxHNHN0ZDo6bWluKDEuMCwt
MS4wKzIuMCpHNFVuaWZvcm1SYW5kKCkpKSApOwogICAgICAgIHZbMF0tPlNldE1vbWVudHVtKCBw
KnNpbihydGhudmUpKmNvcyhwaGludmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHAqc2lu
KHJ0aG52ZSkqc2luKHBoaW52ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgcCpjb3MocnRo
bnZlKSApOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgICB2WzBdLT5TZXRNb21lbnR1bSggdlsw
XS0+R2V0TW9tZW50dW0oKSAqIChwL3BwKSApOwogICAgfQogICAgaWYoICh2WzFdLT5HZXREZWZp
bml0aW9uKCkgPT0gYURldXRlcm9uKSB8fAogICAgICAgICh2WzFdLT5HZXREZWZpbml0aW9uKCkg
PT0gYVRyaXRvbikgICB8fAogICAgICAgICh2WzFdLT5HZXREZWZpbml0aW9uKCkgPT0gYW5BbHBo
YSkgKSAKICAgICAgdlsxXS0+U2V0S2luZXRpY0VuZXJneSgKICAgICAgIEc0c3RkOjptYXgoIDAu
MDAxLCAwLjUqRzRVbmlmb3JtUmFuZCgpKnZbMV0tPkdldEtpbmV0aWNFbmVyZ3koKS9NZVYgKSAp
OwogICAgZWxzZQogICAgICB2WzFdLT5TZXRLaW5ldGljRW5lcmd5KCBHNHN0ZDo6bWF4KCAwLjAw
MSwgdlsxXS0+R2V0S2luZXRpY0VuZXJneSgpL01lViApICk7CiAgICAKICAgIHAgPSB2WzFdLT5H
ZXRUb3RhbE1vbWVudHVtKCk7CiAgICBwcCA9IHZbMV0tPkdldE1vbWVudHVtKCkubWFnKCk7CiAg
ICBpZiggcHAgPD0gMC4wMDEqTWVWICkKICAgIHsKICAgICAgRzRkb3VibGUgcGhpbnZlID0gdHdv
cGkqRzRVbmlmb3JtUmFuZCgpOwogICAgICBHNGRvdWJsZSBydGhudmUgPSBhY29zKCBHNHN0ZDo6
bWF4KC0xLjAsRzRzdGQ6Om1pbigxLjAsLTEuMCsyLjAqRzRVbmlmb3JtUmFuZCgpKSkgKTsKICAg
ICAgdlsxXS0+U2V0TW9tZW50dW0oIHAqc2luKHJ0aG52ZSkqY29zKHBoaW52ZSksCiAgICAgICAg
ICAgICAgICAgICAgICAgIHAqc2luKHJ0aG52ZSkqc2luKHBoaW52ZSksCiAgICAgICAgICAgICAg
ICAgICAgICAgIHAqY29zKHJ0aG52ZSkgKTsKICAgIH0KICAgIGVsc2UKICAgICAgdlsxXS0+U2V0
TW9tZW50dW0oIHZbMV0tPkdldE1vbWVudHVtKCkgKiAocC9wcCkgKTsKICAgIAogICAgaWYoIG50
ID09IDMgKQogICAgewogICAgICBpZiggKHZbMl0tPkdldERlZmluaXRpb24oKSA9PSBhRGV1dGVy
b24pIHx8CiAgICAgICAgICAodlsyXS0+R2V0RGVmaW5pdGlvbigpID09IGFUcml0b24pICAgfHwK
ICAgICAgICAgICh2WzJdLT5HZXREZWZpbml0aW9uKCkgPT0gYW5BbHBoYSkgKSAKICAgICAgICB2
WzJdLT5TZXRLaW5ldGljRW5lcmd5KAogICAgICAgICBHNHN0ZDo6bWF4KCAwLjAwMSwgMC41Kkc0
VW5pZm9ybVJhbmQoKSp2WzJdLT5HZXRLaW5ldGljRW5lcmd5KCkvTWVWICkgKTsKICAgICAgZWxz
ZQogICAgICAgIHZbMl0tPlNldEtpbmV0aWNFbmVyZ3koIEc0c3RkOjptYXgoIDAuMDAxLCB2WzJd
LT5HZXRLaW5ldGljRW5lcmd5KCkvTWVWICkgKTsKICAgICAgCiAgICAgIHAgPSB2WzJdLT5HZXRU
b3RhbE1vbWVudHVtKCk7CiAgICAgIHBwID0gdlsyXS0+R2V0TW9tZW50dW0oKS5tYWcoKTsKICAg
ICAgaWYoIHBwIDw9IDAuMDAxKk1lViApCiAgICAgIHsKICAgICAgICBHNGRvdWJsZSBwaGludmUg
PSB0d29waSpHNFVuaWZvcm1SYW5kKCk7CiAgICAgICAgRzRkb3VibGUgcnRobnZlID0gYWNvcygg
RzRzdGQ6Om1heCgtMS4wLEc0c3RkOjptaW4oMS4wLC0xLjArMi4wKkc0VW5pZm9ybVJhbmQoKSkp
ICk7CiAgICAgICAgdlsyXS0+U2V0TW9tZW50dW0oIHAqc2luKHJ0aG52ZSkqY29zKHBoaW52ZSks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgcCpzaW4ocnRobnZlKSpzaW4ocGhpbnZlKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICBwKmNvcyhydGhudmUpICk7CiAgICAgIH0KICAgICAgZWxz
ZQogICAgICAgIHZbMl0tPlNldE1vbWVudHVtKCB2WzJdLT5HZXRNb21lbnR1bSgpICogKHAvcHAp
ICk7CiAgICB9CiAgICBHNGludCBkZWw7CiAgICBmb3IoZGVsPTA7IGRlbDx2ZWNMZW47IGRlbCsr
KSBkZWxldGUgdmVjW2RlbF07CiAgICB2ZWNMZW4gPSAwOwogICAgaWYoIHBhcnRpY2xlSXNEZWZp
bmVkICkKICAgIHsKICAgICAgdmVjLlNldEVsZW1lbnQoIHZlY0xlbisrLCB2WzBdICk7CiAgICB9
CiAgICBlbHNlCiAgICB7CiAgICAgIGRlbGV0ZSB2WzBdOwogICAgfQogICAgdmVjLlNldEVsZW1l
bnQoIHZlY0xlbisrLCB2WzFdICk7CiAgICBpZiggbnQgPT0gMyApCiAgICB7CiAgICAgIHZlYy5T
ZXRFbGVtZW50KCB2ZWNMZW4rKywgdlsyXSApOwogICAgfQogICAgZWxzZQogICAgewogICAgICBk
ZWxldGUgdlsyXTsKICAgIH0KICAgIGRlbGV0ZSBbXSB2OwogICAgcmV0dXJuOwogIH0KIAogLyog
ZW5kIG9mIGZpbGUgKi8KIAo=


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: other/6308: Internal compiler error
@ 2002-04-15 15:07 rodrigc
  0 siblings, 0 replies; 2+ messages in thread
From: rodrigc @ 2002-04-15 15:07 UTC (permalink / raw)
  To: Bruncko, Dusan, gcc-bugs, gcc-prs, nobody

Synopsis: Internal compiler error

State-Changed-From-To: open->feedback
State-Changed-By: rodrigc
State-Changed-When: Mon Apr 15 15:07:01 2002
State-Changed-Why:
    Read: http://gcc.gnu.org/bugs.html and provide pre-processed
    source code.
    I can't compile your G4ReactionDynamics.cc file.

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=6308


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2002-04-15 22:07 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-04-15  8:06 other/6308: Internal compiler error Dusan, Bruncko
2002-04-15 15:07 rodrigc

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).