[ns] The MPLS/ns-2 works on Linux :-)

Antoine Bagula bagula@cs.sun.ac.za
Mon, 10 Apr 2000 10:50:42 +0200 (SAST)


  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime@docserver.cac.washington.edu for more info.

---393082156-29175302-955356642=:26718
Content-Type: TEXT/PLAIN; charset=US-ASCII

Dear Dr. Miroslav,

I have just downloaded the mpls tar file from my linux redhat 6.0 but
the file is trucated. we have some problems with the net here. Can you
please send me your copy. See my copy attached and please tell me if you
have the same file. I think that mine have been truncated. It has 27 KB.

Regards

Bagula



###############################################################################
BIGOMOKERO ANTOINE BAGULA               Home : Gardenia 2
Dept of Computer Science                       Skyvuedrive
University of Stellenbosch                     Kluis Rivier
Private Bag XI                                    7580
7602 Matieland                                 Cape Town
South Africa                                   South Africa

Email :bagula@cs.sun.ac.za
       bagula@unikin.net
http://www.cs.sun.ac.za/projects/COE/#members
http://www.cs-net.org
Fax : +2721 8084416 (W)
Tel : +2721 8084605 (W)                                
Cell :+2782 9760453
###############################################################################

On Thu, 6 Apr 2000, Miroslav I. Klun wrote:

> 
> Hi everyone,
> 
> The MPLS Network Simulator extension of ns-2.1b5, from Chungnam National
> University, Korea, reported today courtesy of Lloyd Wood, installed properly
> on my Red Hat Linux 6.0 (and got to on other versions too; so, not only on
> Sun Unix platform, http://raonet.com/mns). To install the
> ns-allinone-2.1b5a first apply the usual tclPosixStr.c & xtb.c fixes.
> 
> Miroslav
> 
> 
> ---
> 
> Dr. Miroslav I. Klun
> Network Infrastructure Laboratory
> GTE Laboratories Inc.
> Waltham, MA 02451
> (781) 466-3830
> mklun@gte.com
> 

---393082156-29175302-955356642=:26718
Content-Type: APPLICATION/octet-stream; name="mpls.tar"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.4.10.10004101050420.26718@chivaz.cs.sun.ac.za>
Content-Description: 
Content-Disposition: attachment; filename="mpls.tar"

bXBscy8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAACA0MDc1NSAAICAgNjQ0IAAgICA2MjAgACAgICAgICAgICAw
ICA3MDcyMTM3NjEwICAxMTMyNwAgNQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHJhb25l
dAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcHJvdG9jb2wAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAABtcGxzL3NyYy8AAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIDQwNzU1IAAgICA2NDQgACAg
IDYyMCAAICAgICAgICAgIDAgIDcwNzIxNjExNjIgIDEyMTE1ACA1AAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAHVzdGFyICAAcmFvbmV0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABw
cm90b2NvbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1wbHMvc3JjL2Ns
YXNzaWZpZXItYWRkci1tcGxzLmNjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx
MDA2NDQgACAgIDY0NCAAICAgNjIwIAAgICAgIDEwMzczMyAgNzA3MzEwNjUx
MSAgMTY1NzMAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIAByYW9uZXQAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAHByb3RvY29sAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAALyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogQ29weXJp
Z2h0IChjKSAyMDAwIGJ5IEdhZWlsIEFobiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCSAgKgoqIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0
byBjb3B5IGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUuCQkgICoKKiBQ
bGVhc2Ugc2VuZCBtYWlsIHRvIGZvZzFAY2UuY251LmFjLmtyIHdoZW4geW91
IG1vZGlmeSBvciBkaXN0cmlidXRlICAgICAqCiogdGhpcyBzb3VyY2VzLgkJ
CQkJCQkJICAqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKLyoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKgoqICAgIEZpbGU6IEZpbGUg
Zm9yIHBhY2tldCBzd2l0Y2hpbmcgaW4gTVBMUyBub2RlICAgICAgICAgICoK
KiAgICBBdXRob3I6IEdhZWlsIEFobiAoZm9nMUBjZS5jbnUuYWMua3IpLCBE
ZWMuIDE5OTkgICAgICAqCiogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KCgojaWZuZGVmIGxpbnQKc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9
ICJjbGFzc2lmaWVyLWFkZHItbXBscy5jYyI7CiNlbmRpZgoKI2luY2x1ZGUg
InBhY2tldC5oIgojaW5jbHVkZSAiY2xhc3NpZmllci1hZGRyLW1wbHMuaCIK
I2luY2x1ZGUgPGlvc3RyZWFtLmg+CgpzdGF0aWMgY2xhc3Mgc2hpbWhkcmVh
ZGVyQ2xhc3MgOiBwdWJsaWMgUGFja2V0SGVhZGVyQ2xhc3MKewogIHB1Ymxp
YzoKICBzaGltaGRyZWFkZXJDbGFzcygpIDogUGFja2V0SGVhZGVyQ2xhc3Mo
IlBhY2tldEhlYWRlci9NUExTIiwgCgkJCQkJc2l6ZW9mKGhkcl9tcGxzKSkK
ICAgeyAgfQp9IGNsYXNzX3NoaW1oZHJkcjsKCgoKc3RhdGljIGNsYXNzIE1Q
TFNBZGRyZXNzQ2xhc3NpZmllckNsYXNzIDogcHVibGljIFRjbENsYXNzCnsK
ICBwdWJsaWM6CglNUExTQWRkcmVzc0NsYXNzaWZpZXJDbGFzcygpIDogVGNs
Q2xhc3MoIkNsYXNzaWZpZXIvQWRkci9NUExTIikge30KCVRjbE9iamVjdCog
Y3JlYXRlKGludCwgY29uc3QgY2hhcipjb25zdCopCgkgewoJICAgcmV0dXJu
IChuZXcgTVBMU0FkZHJlc3NDbGFzc2lmaWVyKCkpOwoJIH0KfSBjbGFzc19t
cGxzX2FkZHJlc3NfY2xhc3NpZmllcjsKCgoKTVBMU0FkZHJlc3NDbGFzc2lm
aWVyOjpNUExTQWRkcmVzc0NsYXNzaWZpZXIoKQp7CiAgIGJpbmQoIm9mZl9t
cGxzXyIsICZvZmZfbXBsc18pOwogICBiaW5kKCJwYWNrZXRTaXplXyIsICZz
aXplXyk7CgogICBiaW5kKCJ0dGxfIiAgLCAmdHRsXyk7CgogICBiaW5kKCJ0
cmFjZV9tcGxzXyIsICZ0cmFjZV9tcGxzXyk7ICAgCiAgIGJpbmQoImxhYmVs
XyIsICZsYWJlbF8pOwogICAgICAKICAgYmluZCgiZGF0YV9kcml2ZW5fdHJp
Z2dlcl8iLCAmZGF0YV9kcml2ZW5fdHJpZ2dlcl8pOwogICBiaW5kKCJlbmFi
bGVfcmVyb3V0ZV8iICAgICAsICZlbmFibGVfcmVyb3V0ZV8pOwogICBiaW5k
KCJyZXJvdXRlX29wdGlvbl8iICAgICAsICZyZXJvdXRlX29wdGlvbl8pOwog
ICBiaW5kKCJtaW5pbXVtX2xzcGlkXyIgICAgICAsICZtaW5pbXVtX2xzcGlk
Xyk7CiAgIGJpbmQoImRvbnRfY2FyZV8iICAgICAgICAgICwgJmRvbnRfY2Fy
ZV8pOwogICAKICAgbWluaW11bV9sc3BpZF8gPSBNaW5pbXVtTFNQaWQ7CiAg
IGRvbnRfY2FyZV8gICAgID0gRG9udENhcmU7CiAgIFBGVC5OQiAgICAgID0g
MDsKICAgRVJCLk5CICAgICAgPSAwOwogICBMSUIuTkIgICAgICA9IDA7CiAg
IHR0bF8gICAgICAgID0gMzI7CiAgIHRyYWNlX21wbHNfID0gMDsKfQoKCmlu
dCBNUExTQWRkcmVzc0NsYXNzaWZpZXI6OmNsYXNzaWZ5KFBhY2tldCAqY29u
c3QgcCkKewogICAgaW50IG5leHRob3AgPSBNUExTY2xhc3NpZnkocCk7CiAg
ICAKICAgIGlmICggKGVuYWJsZV9yZXJvdXRlXz09MSkgJiYgKHNpemVfID4g
MCkgJiYgKCFpc19saW5rX2Rvd24obmV4dGhvcCkpICkKICAgICAgIHsKICAg
ICAgIAkgICAgICAvLyB1c2UgYWx0YW5hdGl2ZSBwYXRoIGlmIGl0IGV4aXN0
CiAgICAgICAJICAgbmV4dGhvcCA9IGRvX3Jlcm91dGUocCk7CiAgICAgICB9
CiAgICAgIAogICAgaWYgKCBuZXh0aG9wID09IEdvVG9fTDMgKQogICAgICAg
IHJldHVybiAoQWRkcmVzc0NsYXNzaWZpZXI6OmNsYXNzaWZ5KHApKTsKICAg
IGVsc2UKICAgICAgICByZXR1cm4obmV4dGhvcCk7Cn0KCmludCBNUExTQWRk
cmVzc0NsYXNzaWZpZXI6OmlzX2xpbmtfZG93bihpbnQgbm9kZSkKewogICAg
IFRjbCAmIHRjbCA9IFRjbDo6aW5zdGFuY2UoKTsgICAKICAgICBjaGFyIG91
dFsxMDBdOwogICAgIAogICAgIHNwcmludGYob3V0LCAiJXMgZ2V0LWxpbmst
c3RhdHVzICVkIiwgbmFtZSgpLG5vZGUpOwogICAgIHRjbC5ldmFsKG91dCk7
CiAgICAgCiAgICAgY2hhciAqc3RhdHVzID0gdGNsLnJlc3VsdCgpOwoKICAg
ICBpZiAoICFzdHJjbXAoc3RhdHVzLCJkb3duIikgKQogICAgICAgIHJldHVy
biAwOwogICAgIGVsc2UKICAgICAgICByZXR1cm4gLTE7ICAgCn0KCgppbnQg
TVBMU0FkZHJlc3NDbGFzc2lmaWVyOjpkb19yZXJvdXRlKFBhY2tldCAqY29u
c3QgcCkKewogICBpbnQgb0lmYWNlLG9MYWJlbCxMSUJwdHI7CiAgIAogICBQ
SS5zaGltaGRyID0gR2V0U2hpbUhlYWRlcihwKTsKICAgaW50IGlMYWJlbCA9
IFBJLnNoaW1oZHItPmxhYmVsXzsKICAgCiAgIGlmICggISBhUGF0aExvb2t1
cChQSS5kc3Rub2RlLFBJLnBoYixvSWZhY2Usb0xhYmVsLExJQnB0cikgKQog
ICAgICB7CiAgICAgICAgIHJldHVybiAoIGNvbnZlcnRMMnRvTDIoaUxhYmVs
LG9JZmFjZSxvTGFiZWwsTElCcHRyKSApOwogICAgICB9CiAgIGVsc2UKICAg
ICAgewogIAkgUEkuc2hpbWhkciA9IERlbEFsbFNoaW1IZWFkZXIoUEkuc2hp
bWhkcik7CgogICAgICAgICB0cmFjZSgiTCIsc2l6ZV8sIGlMYWJlbCwiRHJv
cChsaW5rRmFpbCkiLCAtMSwgLTEsIC0xKTsKCiAgICAgICAgIHN3aXRjaCAo
cmVyb3V0ZV9vcHRpb25fKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
IGNhc2UgRHJvcFBhY2tldCA6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJu
KC0xKTsKICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgIGNhc2UgTDNG
b3J3YXJkaW5nIDoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCBHb1Rv
X0wzICk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgY2FzZSBN
YWtlTmV3TFNQIDoKICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgVGNsICYgdGNsID0gVGNsOjppbnN0YW5jZSgpOyAgIAogICAgICAgICAg
ICAgICAgICAgIGNoYXIgb3V0WzEwMF07CiAgICAgCiAgICAgICAgICAgICAg
ICAgICAgc3ByaW50ZihvdXQsICIlcyBpcy1jb250cm9sLWRyaXZlbiIsIG5h
bWUoKSk7CiAgICAgICAgICAgICAgICAgICAgdGNsLmV2YWwob3V0KTsKICAg
ICAKICAgICAgICAgICAgICAgICAgICBjaGFyICpzdGF0dXMgPSB0Y2wucmVz
dWx0KCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCBzdHJjbXAoc3RhdHVz
LCIxIikgKQogICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgZmVjID0gUEkuZHN0bm9kZTsKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3ByaW50ZihvdXQsICIlcyBsZHAtdHJpZ2dl
ci1ieS1zd2l0Y2ggJWQiLCBuYW1lKCksZmVjKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICB0Y2wuZXZhbChvdXQpOwogICAgICAgICAgICAgICAgICAg
ICAgIH0gICAKICAgICAgICAgICAgCSAgICByZXR1cm4gKCAtMSApOwogICAg
ICAgICAgICB9CiAgICAgICAgIHJldHVybigtMSk7ICAgCiAgICAgIH0KfQoK
CgppbnQgTVBMU0FkZHJlc3NDbGFzc2lmaWVyOjpjb252ZXJ0TDN0b0wyKGlu
dCBvSWZhY2UsIGludCBvTGFiZWwsIGludCBMSUJwdHIpCnsKICAgaW50IGlM
YWJlbD0gLTE7CgogCiAgIGludCAgcHRyOwogICAgICAgICAgICAgIAogICB3
aGlsZSAob0xhYmVsID49IDApCiAgICAgICAgIHsKICAgICAgICAgICAgIGlm
IChvTGFiZWwgPT0gMCkgIC8qIHBlbnVsdGltYXRlIGhvcCAqLwogICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIC8qIG5vIG9wZXJhdGlv
biAqLwogICAgICAgICAgICAgICAgICAgIHRyYWNlKCJVIixzaXplXywgaUxh
YmVsLCAiUHVzaChwZW51bHRpbWF0ZSkiLCBvSWZhY2UsIG9MYWJlbCwgdHRs
Xyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlICAgICAg
ICAgICAgICAvKiBwdXNoIG9wZXJhdGlvbiBpbiBpbmdlcnNzIExTUiAqLwog
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFBJLnNoaW1o
ZHIgPSBwdXNoKFBJLnNoaW1oZHIsb0xhYmVsKTsKICAgICAgICAgICAgICAg
ICAgICB0cmFjZSgiVSIsc2l6ZV8sIGlMYWJlbCwgIlB1c2goaW5ncmVzcyki
LCBvSWZhY2UsIG9MYWJlbCwgdHRsXyk7CiAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgaWYgKExJQnB0ciA+PSAwKSAgICAgICAgICAgLyogc3Rh
Y2sgb3BlcmF0aW9uICovCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICBpTGFiZWwgPSBvTGFiZWw7CiAgICAgICAgICAgICAgICAgICBw
dHIgPSBMSUJwdHI7CiAgICAgICAgICAgICAgICAgICBMSUJsb29rdXAocHRy
LCBvSWZhY2UsIG9MYWJlbCwgTElCcHRyKTsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CgogICBpZiAob0xhYmVsIDwgMCkKICAgICAgewogICAgICAg
ICAgaWYgKHNpemVfID4gMCkKICAgICAgICAgICAgICBQSS5zaGltaGRyID0g
RGVsQWxsU2hpbUhlYWRlcihQSS5zaGltaGRyKTsKICAgICAgICAgIAogICAg
ICAgICAgdHJhY2UoIlUiLHNpemVfLCBpTGFiZWwgLCAiTDMoZXJyb3JMYWJl
bCkiLCAtMSwtMSwgLTEpOwogICAgICAgICAgcmV0dXJuKEdvVG9fTDMpOwog
ICAgICB9CiAgICAgICAgICAgICAgIAogICBpZiAob0lmYWNlIDwgMCkKICAg
ICAgeyAgCiAgICAgICAgICBQSS5zaGltaGRyID0gRGVsQWxsU2hpbUhlYWRl
cihQSS5zaGltaGRyKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICB0cmFjZSgiVSIsc2l6ZV8sIGlMYWJlbCAsICJMMyhlcnJvck9JRikiLCAt
MSAsIC0xLCAtMSk7CiAgICAgICAgICByZXR1cm4oR29Ub19MMyk7CiAgICAg
IH0KICAgZWxzZQogICAgICAgICAgcmV0dXJuICggb0lmYWNlICk7Cgp9CgoK
CgppbnQgTVBMU0FkZHJlc3NDbGFzc2lmaWVyOjpjb252ZXJ0TDJ0b0wyKGlu
dCBpTGFiZWwsIGludCBvSWZhY2UsIGludCBvTGFiZWwsIGludCBMSUJwdHIp
Cgp7CiAgIGludCAgdHRsID0gUEkuc2hpbWhkci0+dHRsXzsKICAgaW50ICBw
dHI7CiAgIAoKICAgLyogcHVzaChzdGFjaykgb3BlcmF0aW9uIGFmdGVyIHN3
YXAgb3IgcG9wICovCiAgIAogICBpZiAob0xhYmVsID09IDApICAgLyogaW4g
cGVudWx0aW1hdGUgaG9wICovCiAgICAgIHsKICAgICAgICAgUEkuc2hpbWhk
ciA9IHBvcChQSS5zaGltaGRyKTsKICAgICAgICAgdHJhY2UoIkwiLHNpemVf
LCBpTGFiZWwsICJQb3AocGVudWx0aW1hdGUpIiwgb0lmYWNlLCBvTGFiZWws
IHR0bCk7CiAgICAgIH0KICAgZWxzZSBpZiAob0xhYmVsID4gMCkgICAvKiBz
d2FwIG9wZXJhdGlvbiAqLwogICAgICB7CiAgICAgICAgIHN3YXAoUEkuc2hp
bWhkcixvTGFiZWwpOwogICAgICAgICB0cmFjZSgiTCIsc2l6ZV8sIGlMYWJl
bCwgIlN3YXAiLCBvSWZhY2UsIG9MYWJlbCwgdHRsKTsKICAgICAgfQogICBl
bHNlICAgICAgICAgICAgICAgICAgIC8qIEVycm9yZWQgTGFiZWwgKi8KICAg
ICAgewogICAgICAgICBQSS5zaGltaGRyID0gRGVsQWxsU2hpbUhlYWRlcihQ
SS5zaGltaGRyKTsKICAgICAgICAgdHJhY2UoIkwiLHNpemVfLCBpTGFiZWws
ICJMMyhlcnJvckxhYmVsKSIsIC0xLCAtMSwgLTEpOwogICAgICAgICByZXR1
cm4oR29Ub19MMyk7CiAgICAgIH0KICAgICAgICAgICAgCiAgIHdoaWxlIChM
SUJwdHIgPj0gMCkgICAgICAgICAgIC8qIHN0YWNrIG9wZXJhdGlvbiAqLwog
ICAgICAgICB7ICAgCiAgICAgICAgICAgICBpTGFiZWw9IG9MYWJlbDsKICAg
ICAgICAgICAgIHB0ciA9IExJQnB0cjsKICAgICAgICAgICAgIExJQmxvb2t1
cChwdHIsIG9JZmFjZSwgb0xhYmVsLCBMSUJwdHIpOwogICAgICAgICAgICAg
UEkuc2hpbWhkciA9IHB1c2goUEkuc2hpbWhkcixvTGFiZWwpOwogICAgICAg
ICAgICAgdHJhY2UoIkwiLHNpemVfLCBpTGFiZWwsICJQdXNoKHR1bm5lbCki
LCBvSWZhY2UsIG9MYWJlbCwgdHRsXyk7CiAgICAgICAgIH0gICAKCiAgIGlm
IChvSWZhY2UgPCAwKQogICAgICB7ICAKICAgICAgICAgIGlmIChzaXplXyA+
IDApCiAgICAgICAgICAgICBQSS5zaGltaGRyID0gRGVsQWxsU2hpbUhlYWRl
cihQSS5zaGltaGRyKTsKICAgICAgICAgICAgIAkKICAgICAgICAgIHRyYWNl
KCJMIixzaXplXywgaUxhYmVsICwgIkwzKGVycm9yT0lmKSIsIC0xICwgLTEs
IC0xKTsKICAgICAgICAgIHJldHVybihHb1RvX0wzKTsKICAgICAgfQogICBl
bHNlCiAgICAgICAgICByZXR1cm4gKCBvSWZhY2UgKTsKfQoKCgoKLyogcHJv
Y2VzcyB1bmxhYmVsZWQgcGFja2V0ICovCmludCBNUExTQWRkcmVzc0NsYXNz
aWZpZXI6OnByb2Nlc3NJUCgpCnsKICAgaW50IG9JZmFjZSxvTGFiZWwsTElC
cHRyOwogICBpbnQgaUxhYmVsID0gLTE7CgogICAvKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKgogICAqKioKICAgKioqICAgICBpbnNlcnQgY29kZSB0byBt
YW5pcHVsYXRlIFBIQgogICAqKioKICAgKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqLwogICAgICAgICAKICAgaWYgKCAhIFBGVGxvb2t1cChQSS5kc3Ru
b2RlLFBJLnBoYixvSWZhY2Usb0xhYmVsLExJQnB0cikgKSAgICAvKiBwdXNo
IG9wZXJhdGlvbiAqLwogICAgICB7ICAKICAgICAgICAgIHJldHVybiAoIGNv
bnZlcnRMM3RvTDIob0lmYWNlLG9MYWJlbCxMSUJwdHIpICk7CiAgICAgIH0K
ICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLyogTDMgZm9yd2FyZGluZyAqLwogICAgICB7ICAKICAgICAgICAgIC8q
IHRyYWZmaWMgZGlydmVuIHRyaWdnZXIgYnkgbXBscyBzd2l0Y2ggKi8KICAg
ICAgICAgICAgICAKICAgICAgICAgIGlmIChkYXRhX2RyaXZlbl90cmlnZ2Vy
XykKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGNoYXIgb3V0WzEw
MF07CiAgICAgICAgICAgICAgICBUY2wgJiB0Y2wgPSBUY2w6Omluc3RhbmNl
KCk7CiAgICAgICAgICAgICAgICBpbnQgZmVjID0gUEkuZHN0bm9kZTsKCiAg
ICAgICAgICAgICAgICBzcHJpbnRmKG91dCwgIiVzIGxkcC10cmlnZ2VyLWJ5
LXN3aXRjaCAlZCIsIG5hbWUoKSxmZWMpOwogICAgICAgICAgICAgICAgdGNs
LmV2YWwob3V0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgIAogICAgICAg
ICAgdHJhY2UoIlUiLHNpemVfLCBpTGFiZWwsIkwzIiwgLTEsIC0xLCAtMSk7
ICAgICAgICAgICAgICAgCiAgICAgICAgICAKICAgICAgICAgIHJldHVybihH
b1RvX0wzKTsKICAgICAgfQoJCn0KCgovKiBwcm9jZXNzIGxhYmVsZWQgcGFj
a2V0ICovCmludCBNUExTQWRkcmVzc0NsYXNzaWZpZXI6OnByb2Nlc3NMYWJl
bFAoKQp7CiAgIGludCBvSWZhY2Usb0xhYmVsLExJQnB0cjsKICAgaW50IGlM
YWJlbCA9IFBJLnNoaW1oZHItPmxhYmVsXzsKCgogICBQSS5zaGltaGRyID0g
Y2hlY2tUVEwoUEkuc2hpbWhkcik7CiAgIGlmICggc2l6ZV8gPT0gMCApICAg
LyogVFRMIGNoZWNrICovCiAgICAgIHsKICAgICAgICAgcmV0dXJuICggR29U
b19MMyApOwogICAgICB9CiAgICAgICAgCiAgIGlmICggIUxJQmxvb2t1cCgt
MSwgaUxhYmVsLCBvSWZhY2UsIG9MYWJlbCwgTElCcHRyKSApCiAgICAgIHsK
ICAgICAgICAgLyogbGFiZWwgc3dhcHBpbmcgb3BlcmF0aW9uICovCiAgICAg
ICAgICAgICAgCiAgICAgICAgIHJldHVybiAoIGNvbnZlcnRMMnRvTDIoaUxh
YmVsLG9JZmFjZSxvTGFiZWwsTElCcHRyKSApOwogICAgICB9CiAgIGVsc2Ug
IAogICAgICB7CiAgICAgICAgIFBJLnNoaW1oZHIgPSBEZWxBbGxTaGltSGVh
ZGVyKFBJLnNoaW1oZHIpOwoKICAgICAgICAgdHJhY2UoIkwiLHNpemVfLCBp
TGFiZWwsIkwzKGVycm9yTGFiZWwpIiwgLTEsIC0xLCAtMSk7CiAgICAgICAg
IAogICAgICAgICByZXR1cm4gKCBHb1RvX0wzICk7CiAgICAgIH0KfQoKCgpp
bnQgTVBMU0FkZHJlc3NDbGFzc2lmaWVyOjpNUExTY2xhc3NpZnkoUGFja2V0
ICpjb25zdCBwKQp7CiAgIEdldElQSW5mbyhwLCBQSS5kc3RhZGRyLCBQSS5w
aGIsIFBJLnNyY25vZGUsIFBJLmRzdG5vZGUpOwogICBQSS5zaGltaGRyID0g
R2V0U2hpbUhlYWRlcihwKTsKICAgCiAgIGlmICggc2l6ZV8gPT0gMCApICAg
IC8qIHVubGFiZWQgcGFja2V0ICovCiAgICAgIHsgICAgICAgICAgCiAgICAg
ICAgIHJldHVybiAoIHByb2Nlc3NJUCgpICk7CiAgICAgIH0KICAgZWxzZSAg
ICAgICAgICAgICAgICAgICAvKiBsYWJlZCBwYWNrZXQgKi8KICAgICAgewog
ICAgICAgICBpbnQgcmV0ID0gcHJvY2Vzc0xhYmVsUCgpOwogICAgICAgICAK
ICAgICAgICAgaWYgKCByZXQgPT0gR29Ub19MMyApCiAgICAgICAgICAgIHsg
IFBJLnNoaW1oZHIgPSBHZXRTaGltSGVhZGVyKHApOwogICAgICAgICAgICAg
ICByZXR1cm4gKCBwcm9jZXNzSVAoKSApOwogICAgICAgICAgICB9CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgcmV0dXJuIChyZXQpOyAgIAogICAg
ICB9Cn0KCgoKaGRyX21wbHMgKk1QTFNBZGRyZXNzQ2xhc3NpZmllcjo6Y2hl
Y2tUVEwoaGRyX21wbHMgKnNoaW1oZHIpCnsKICAgc2hpbWhkci0+dHRsXy0t
OwogICAKICAgaW50IHR0bCAgID0gc2hpbWhkci0+dHRsXzsKICAgaW50IGlM
YWJlbD0gc2hpbWhkci0+bGFiZWxfOwogICAKICAgaWYgKCB0dGwgPT0gMCAp
CiAgICAgIHsKICAgICAgICAgIHNoaW1oZHIgPSBEZWxBbGxTaGltSGVhZGVy
KHNoaW1oZHIpOwoKICAgICAgICAgIHRyYWNlKCJMIixzaXplXywgaUxhYmVs
LCAiTDMoVFRMPTApIiwgLTEsIC0xLCB0dGwpOwogICAgICAgICAgCiAgICAg
ICAgICByZXR1cm4oIHNoaW1oZHIgKTsKICAgICAgfQogICAKICAgcmV0dXJu
ICggc2hpbWhkciApOwp9CgoKdm9pZCBNUExTQWRkcmVzc0NsYXNzaWZpZXI6
OkdldElQSW5mbyhQYWNrZXQgKmNvbnN0IHAsIGludCAmZHN0YWRkcixpbnQg
JnBoYiwgaW50ICZzcmNub2RlLCBpbnQgJmRzdG5vZGUpCnsKCiAgIGhkcl9p
cCogaXBoZHIgPSBoZHJfaXA6OmFjY2VzcyhwKTsKCiAgIGRzdGFkZHIgPSAg
aXBoZHItPmRzdF87CiAgICAgICAgCiAgIHNyY25vZGUgPSAgaXBoZHItPnNy
Y18gPj4gQWRkcmVzczo6aW5zdGFuY2UoKS5Ob2RlU2hpZnRfWzFdOwogICBk
c3Rub2RlID0gIGlwaGRyLT5kc3RfID4+IEFkZHJlc3M6Omluc3RhbmNlKCku
Tm9kZVNoaWZ0X1sxXTsKICAgcGhiICAgICA9ICBEZWZhdWx0UEhCOwp9CgoK
Cmhkcl9tcGxzICpNUExTQWRkcmVzc0NsYXNzaWZpZXI6OkdldFNoaW1IZWFk
ZXIoUGFja2V0ICpjb25zdCBwKQp7CiAgIGhkcl9tcGxzICpzaGltaGRyID0g
KGhkcl9tcGxzICopIHAtPmFjY2VzcyhvZmZfbXBsc18pOwoKICAgc2l6ZV8g
PSAwOwogICBpZiAoIChzaGltaGRyLT5sYWJlbF89PTApICYmIChzaGltaGRy
LT5iZmxhZ189PTApICYmIChzaGltaGRyLT50dGxfPT0wKSApCiAgICAgIHsK
ICAgICAgCSBzaGltaGRyLT5iZmxhZ18gPSAtMTsKICAgICAgCSBzaGltaGRy
LT5sYWJlbF8gPSAtMTsKICAgICAgCSBzaGltaGRyLT50dGxfID0gLTE7CiAg
ICAgIAkgc2hpbWhkci0+dG9wICAgID0gc2hpbWhkcjsKICAgICAgCSBzaGlt
aGRyLT5uZXh0aGRyPSBzaGltaGRyOwogICAgICB9CiAgIGVsc2UKICAgICAg
ewogICAgICAJIHdoaWxlIChzaGltaGRyLT50b3AgIT0gc2hpbWhkcikKICAg
ICAgICAgICAgICAgeyAKICAgICAgICAgICAgICAgCSAgc2hpbWhkciA9IHNo
aW1oZHItPnRvcDsKICAgICAgICAgICAgICAgICAgc2l6ZV8gKz0gNDsKICAg
ICAgICAgICAgICAgfQogICAgICB9IAogICAgcmV0dXJuIChzaGltaGRyKTsg
ICAKfQoKCmhkcl9tcGxzICpNUExTQWRkcmVzc0NsYXNzaWZpZXI6OkRlbEFs
bFNoaW1IZWFkZXIoaGRyX21wbHMgKnNoaW1oZHIpCnsKICAgICB3aGlsZSAo
c2hpbWhkci0+YmZsYWdfICE9IC0xKQogICAgICAgICAgICBzaGltaGRyID0g
cG9wKHNoaW1oZHIpOwogICAgIAogICAgIHJldHVybihzaGltaGRyKTsKfQoK
CgoKaGRyX21wbHMgKk1QTFNBZGRyZXNzQ2xhc3NpZmllcjo6cHVzaChoZHJf
bXBscyAqc2hpbWhkciwgaW50IG9MYWJlbCkKewoKICAgIGhkcl9tcGxzICpu
ZXdoZHI7CgogICAgbmV3aGRyID0gKGhkcl9tcGxzICopIG1hbGxvYyggc2l6
ZW9mKGhkcl9tcGxzKSApOwogICAgICAgICAgICAgICAKICAgIG5ld2hkci0+
bGFiZWxfID0gb0xhYmVsOwogICAgbmV3aGRyLT5iZmxhZ18gPSAxOwogICAg
bmV3aGRyLT50dGxfID0gdHRsXzsKICAgIG5ld2hkci0+dG9wICA9IG5ld2hk
cjsKICAgIG5ld2hkci0+bmV4dGhkciA9IHNoaW1oZHI7CgogICAgc2hpbWhk
ci0+dG9wID0gbmV3aGRyOwoKICAgIHNpemVfICs9IDQ7CiAgICAKICAgIHJl
dHVybihuZXdoZHIpOwp9CgoKCmhkcl9tcGxzICpNUExTQWRkcmVzc0NsYXNz
aWZpZXI6OnBvcChoZHJfbXBscyAqc2hpbWhkcikKewogICAgc2hpbWhkciA9
IHNoaW1oZHItPm5leHRoZHI7CiAgICAgICAgICAgICAgIAogICAgZnJlZShz
aGltaGRyLT50b3ApOwoKICAgIHNoaW1oZHItPnRvcCA9IHNoaW1oZHI7CiAg
ICAKICAgIHNpemVfIC09IDQ7CiAgICAKICAgIHJldHVybihzaGltaGRyKTsK
fQoKCnZvaWQgIE1QTFNBZGRyZXNzQ2xhc3NpZmllcjo6c3dhcChoZHJfbXBs
cyAqc2hpbWhkciwgaW50IG9MYWJlbCkKewogICAgc2hpbWhkci0+bGFiZWxf
ID0gb0xhYmVsOwp9CgoKCgoKaW50IE1QTFNBZGRyZXNzQ2xhc3NpZmllcjo6
Y29tbWFuZChpbnQgYXJnYywgY29uc3QgY2hhcipjb25zdCogYXJndikKewoK
ICBpZiAoYXJnYyA9PSAzKQogICB7ICAgICAgCiAgCSAgICAgLyogJE1QTFNB
ZGRyZXNzQ2xhc3NpZmllciBQRlRkdW1wIG5vZGVpZCovCiAgICAgaWYgKHN0
cmNtcChhcmd2WzFdLCAiUEZUZHVtcCIpID09IDApCiAgICAgIHsKICAgICAg
ICAgUEZUZHVtcChhcmd2WzJdKTsKICAgICAgICAgcmV0dXJuIChUQ0xfT0sp
OwogICAgICB9CiAgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMV0sICJFUkJk
dW1wIikgPT0gMCkKICAgICAgewogICAgICAgICBFUkJkdW1wKGFyZ3ZbMl0p
OwogICAgICAgICByZXR1cm4gKFRDTF9PSyk7CiAgICAgIH0KICAgICBlbHNl
IGlmIChzdHJjbXAoYXJndlsxXSwgIkxJQmR1bXAiKSA9PSAwKQogICAgICB7
CiAgICAgICAgIExJQmR1bXAoYXJndlsyXSk7CiAgICAgICAgIHJldHVybiAo
VENMX09LKTsKICAgICAgfQogICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2WzFd
LCAiZ2V0LWZlYy1mb3ItbHNwaWQiKSA9PSAwKQogICAgICB7ICAgICAgICAg
ICAgICAvKiAkTVBMU0FkZHJlc3NDbGFzc2lmaWVyIGdldC1mZWMtZm9yLWxz
cGlkIExTUGlkICovCiAgICAgICAgIAogICAgICAgICBjaGFyIG91dFsxMDBd
OwogICAgICAgICBUY2wgJiB0Y2wgID0gVGNsOjppbnN0YW5jZSgpOwogICAg
ICAgICBpbnQgTFNQaWQgID0gYXRvaShhcmd2WzJdKTsKICAgICAgICAgaW50
IExJQnB0ciA9IC0xOwogICAgICAgICBpbnQgRVJCbmI7CiAgICAgICAgICAg
ICAgIAogICAgICAgICBFUkJuYiA9IEVSQmxvY2F0ZShMU1BpZCwtMSwgTElC
cHRyKTsKICAgICAgICAgaWYgKEVSQm5iID49MCkKICAgICAgICAgICAgc3By
aW50ZihvdXQsICIlZCIsIEVSQi5FbnRyeVtFUkJuYl0uRkVDKTsKICAgICAg
ICAgZWxzZSAgIAogICAgICAgICAgICBzcHJpbnRmKG91dCwgIiVkIiwgLTEp
OwoKICAgICAgICAgdGNsLnJlc3VsdChvdXQpOwogICAgICAgICByZXR1cm4g
KFRDTF9PSyk7CiAgICAgIH0KICAgfQoKICBpZiAoc3RyY21wKGFyZ3ZbMV0s
ICJleGlzdC1mZWMiKSA9PSAwKQogICAgIHsgICAgICAgICAgICAgIC8qICRN
UExTQWRkcmVzc0NsYXNzaWZpZXIgZXhpc3QtZmVjIGZlYyBwaGIgICovCiAg
ICAgICAgIFRjbCAmIHRjbCA9IFRjbDo6aW5zdGFuY2UoKTsKICAgICAgICAg
CiAgICAgICAgIGlmIChhcmdjICE9IDQpIHJldHVybiAoQWRkcmVzc0NsYXNz
aWZpZXI6OmNvbW1hbmQoYXJnYywgYXJndikpOwoKICAgICAgICAgaW50IExJ
QnB0cjsKICAgICAgICAgaW50IFBGVG5iID0gUEZUbG9jYXRlKGF0b2koYXJn
dlsyXSksYXRvaShhcmd2WzNdKSwgTElCcHRyKTsgICAgICAgICAKCiAgICAg
ICAgIGlmICggUEZUbmIgPiAtMSApCiAgICAgICAgICAgIAl0Y2wucmVzdWx0
KCIxIik7CiAgICAgICAgIGVsc2UKICAgICAgICAgCXRjbC5yZXN1bHQoIi0x
Iik7CiAgICAgICAgICAgIAogICAgICAgICByZXR1cm4gKFRDTF9PSyk7CiAg
ICAgfQoKCiAgaWYgKGFyZ2MgPT0gNCkKICAgeyAgICAgIAogICAgIGNoYXIg
b3V0WzEwMF07CiAgICAgVGNsICYgdGNsID0gVGNsOjppbnN0YW5jZSgpOwoK
ICAgICBpbnQgUEZUbmIgPS0xOwogICAgIGludCBMSUJwdHI9LTE7CiAgICAg
aW50IGlMYWJlbCxvTGFiZWwsaUlmYWNlLG9JZmFjZTsKICAgICBpbnQgZmVj
ICAgPSBhdG9pKGFyZ3ZbMl0pOwogICAgIGludCBMU1BpZCA9IGF0b2koYXJn
dlszXSk7CiAgICAgaW50IFBIQiAgID0gTFNQaWQ7CiAgICAgCiAgICAgaWYg
KExTUGlkIDwgMCkgICAgIC8vIHRvcG9sb2d5LWJhc2VkIExTUAogICAgICAg
ICBQRlRuYiA9IFBGVGxvY2F0ZShmZWMsUEhCLCBMSUJwdHIpOwogICAgIGVs
c2UgICAgICAgICAgICAgICAvLyBFUi1MU1AKICAgICAgICAgRVJCbG9jYXRl
KExTUGlkLGZlYywgTElCcHRyKTsKCiAgICAgaWYgKHN0cmNtcChhcmd2WzFd
LCAiR2V0SW5JZmFjZSIpID09IDApCiAgICAgIHsgICAgICAgICAgICAgIC8q
ICRNUExTQWRkcmVzc0NsYXNzaWZpZXIgR2V0SW5JZmFjZSBGRUMgTFNQaWQg
ICovCiAgICAgICAgIGlmICggTElCcHRyID4gLTEgKQogICAgICAgICAgICB7
CiAgICAgICAgICAgIAlMSUJnZXRJbmNvbWluZyhMSUJwdHIsaUlmYWNlLGlM
YWJlbCk7CiAgICAgICAgICAgICAJc3ByaW50ZihvdXQsICIlZCIsIGlJZmFj
ZSk7CiAgICAgICAgICAgIAl0Y2wucmVzdWx0KG91dCk7CiAgICAgICAgICAg
IH0KICAgICAgICAgZWxzZQogICAgICAgICAJdGNsLnJlc3VsdCgiLTEiKTsK
ICAgICAgICAgICAgCiAgICAgICAgIHJldHVybiAoVENMX09LKTsKICAgICAg
fQogICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2WzFdLCAiR2V0SW5MYWJlbCIp
ID09IDApCiAgICAgIHsgICAgICAgICAgICAgIC8qICRNUExTQWRkcmVzc0Ns
YXNzaWZpZXIgR2V0SW5MYWJlbCBGRUMgTFNQaWQgICovCiAgICAgICAgIGlm
ICggTElCcHRyID4gLTEgKQogICAgICAgICAgICB7CiAgICAgICAgICAgIAlM
SUJnZXRJbmNvbWluZyhMSUJwdHIsaUlmYWNlLGlMYWJlbCk7CiAgICAgICAg
ICAgICAJc3ByaW50ZihvdXQsICIlZCIsIGlMYWJlbCk7CiAgICAgICAgICAg
IAl0Y2wucmVzdWx0KG91dCk7CiAgICAgICAgICAgIH0gICAKICAgICAgICAg
ZWxzZQogICAgICAgICAJdGNsLnJlc3VsdCgiLTEiKTsKCiAgICAgICAgIHJl
dHVybiAoVENMX09LKTsKICAgICAgfQogICAgIGVsc2UgaWYgKHN0cmNtcChh
cmd2WzFdLCAiR2V0T3V0SWZhY2UiKSA9PSAwKQogICAgICB7ICAgICAgICAg
ICAgICAvKiAkTVBMU0FkZHJlc3NDbGFzc2lmaWVyIEdldE91dElmYWNlIEZF
QyBwaGIvTFNQaWQgICovCiAgICAgICAgIGlmICggTElCcHRyID4gLTEgKQog
ICAgICAgICAgICB7CiAgICAgICAgICAgIAlMSUJsb29rdXAoTElCcHRyLCBv
SWZhY2UsIG9MYWJlbCwgTElCcHRyKTsKICAgICAgICAgICAgIAlzcHJpbnRm
KG91dCwgIiVkIiwgb0lmYWNlKTsKICAgICAgICAgICAgCXRjbC5yZXN1bHQo
b3V0KTsKICAgICAgICAgICAgfSAgIAogICAgICAgICBlbHNlCiAgICAgICAg
IAl0Y2wucmVzdWx0KCItMSIpOwoKICAgICAgICAgcmV0dXJuIChUQ0xfT0sp
OwogICAgICB9CiAgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMV0sICJHZXRP
dXRMYWJlbCIpID09IDApCiAgICAgIHsgICAgICAgICAgICAgIC8qICRNUExT
QWRkcmVzc0NsYXNzaWZpZXIgR2V0T3V0TGFiZWwgRkVDIHBoYi9MU1BpZCAg
Ki8KICAgICAgICAgaWYgKCBMSUJwdHIgPiAtMSApCiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgCUxJQmxvb2t1cChMSUJwdHIsIG9JZmFjZSwgb0xhYmVs
LCBMSUJwdHIpOwogICAgICAgICAgICAgCXNwcmludGYob3V0LCAiJWQiLCBv
TGFiZWwpOwogICAgICAgICAgICAJdGNsLnJlc3VsdChvdXQpOwogICAgICAg
ICAgICB9ICAgCiAgICAgICAgIGVsc2UKICAgICAgICAgCXRjbC5yZXN1bHQo
Ii0xIik7CgogICAgICAgICByZXR1cm4gKFRDTF9PSyk7CiAgICAgIH0KCiAg
IH0KCiAgCiAgCiAgaWYgKGFyZ2MgPT0gNSkKICAgeyAgICAgIAogICAgIFRj
bCAmIHRjbCA9IFRjbDo6aW5zdGFuY2UoKTsKCiAgCSAgICAgLyogJE1QTFNB
ZGRyZXNzQ2xhc3NpZmllciBFckxzcEJpbmRpbmcgRkVDIFBIQiBsc3BpZCAq
LwogICAgIGlmIChzdHJjbXAoYXJndlsxXSwgIkVyTHNwQmluZGluZyIpID09
IDApCiAgICAgIHsKICAgICAgICAgIGludCBhZGRyICAgPSBhdG9pKGFyZ3Zb
Ml0pOwogICAgICAgICAgaW50IFBIQiAgICA9IGF0b2koYXJndlszXSk7CiAg
ICAgICAgICBpbnQgTFNQaWQgID0gYXRvaShhcmd2WzRdKTsKCiAgICAgICAg
ICBpZiAoICFFckxzcEJpbmRpbmcoYWRkciwgUEhCLC0xLCBMU1BpZCkgKQog
ICAgICAgICAgICAgICB0Y2wucmVzdWx0KCIxIik7CiAgICAgICAgICBlbHNl
ICAgICAKICAgICAgICAgICAgICAgdGNsLnJlc3VsdCgiLTEiKTsKICAKICAg
ICAgICAgIHJldHVybiAoVENMX09LKTsKICAgICAgfQogICB9CiAKIAogaWYg
KGFyZ2MgPT0gNikKICAgeyAgICAgIAogICAgIFRjbCAmIHRjbCA9IFRjbDo6
aW5zdGFuY2UoKTsKCiAgICAgICAgICAgICAgICAgICAgIC8qICRNUExTQWRk
cmVzc0NsYXNzaWZpZXIgRXJMc3BTdGFja2luZyBmZWMwLCBlcmxzcGlkMCwg
ZmVjLCBlcmZlY2lkICovCiAgICAgaWYgKHN0cmNtcChhcmd2WzFdLCAiRXJM
c3BTdGFja2luZyIpID09IDApCiAgICAgIHsKICAgICAgICAgIGludCBlcmZl
YzAgICA9IGF0b2koYXJndlsyXSk7CiAgICAgICAgICBpbnQgZXJsc3BpZDAg
PSBhdG9pKGFyZ3ZbM10pOwogICAgICAgICAgaW50IGVyZmVjICAgID0gYXRv
aShhcmd2WzRdKTsKICAgICAgICAgIGludCBlcmxzcGlkICA9IGF0b2koYXJn
dls1XSk7CgogICAgICAgICAgaWYgKCAhRXJMc3BTdGFja2luZyhlcmZlYzAs
ZXJsc3BpZDAsZXJmZWMsZXJsc3BpZCkgKQogICAgICAgICAgICAgICB0Y2wu
cmVzdWx0KCIxIik7CiAgICAgICAgICBlbHNlICAgICAKICAgICAgICAgICAg
ICAgdGNsLnJlc3VsdCgiLTEiKTsKICAKICAgICAgICAgIHJldHVybiAoVENM
X09LKTsKICAgICAgfQoKICAJICAgICAvKiAkTVBMU0FkZHJlc3NDbGFzc2lm
aWVyIEZsb3dBZ2dyZWdhdGlvbiBmaW5lRkVDLCBmaW5lUEhCLCBjb2Fyc2VG
RUMsIGNvYXJzZVBIQiovCiAgICAgaWYgKHN0cmNtcChhcmd2WzFdLCAiRmxv
d0FnZ3JlZ2F0aW9uIikgPT0gMCkKICAgICAgewogICAgICAgICAgaW50IGZp
bmVhZGRyICAgPSBhdG9pKGFyZ3ZbMl0pOwogICAgICAgICAgaW50IGZpbmVQ
SEIgICAgPSBhdG9pKGFyZ3ZbM10pOwogICAgICAgICAgaW50IGNvYXJzZWFk
ZHIgPSBhdG9pKGFyZ3ZbNF0pOwogICAgICAgICAgaW50IGNvYXJzZVBIQiAg
PSBhdG9pKGFyZ3ZbNV0pOwoKICAgICAgICAgIGlmICggIUZsb3dBZ2dyZWdh
dGlvbihmaW5lYWRkcixmaW5lUEhCLCBjb2Fyc2VhZGRyLGNvYXJzZVBIQikg
KQogICAgICAgICAgICAgICB0Y2wucmVzdWx0KCIxIik7CiAgICAgICAgICBl
bHNlICAgICAKICAgICAgICAgICAgICAgdGNsLnJlc3VsdCgiLTEiKTsKCiAg
ICAgICAgIHJldHVybiAoVENMX09LKTsKICAgICAgfQoKICAJICAgICAvKiAk
TVBMU0FkZHJlc3NDbGFzc2lmaWVyIGFQYXRoQmluZGluZyBGRUMgUEhCIGVy
RkVDIExTUGlkICovCiAgICAgaWYgKHN0cmNtcChhcmd2WzFdLCAiYVBhdGhC
aW5kaW5nIikgPT0gMCkKICAgICAgewogICAgICAgICAgaW50IEZFQyAgID0g
YXRvaShhcmd2WzJdKTsKICAgICAgICAgIGludCBQSEIgICA9IGF0b2koYXJn
dlszXSk7CiAgICAgICAgICBpbnQgZXJGRUMgPSBhdG9pKGFyZ3ZbNF0pOwog
ICAgICAgICAgaW50IExTUGlkID0gYXRvaShhcmd2WzVdKTsKCiAgICAgICAg
ICBpZiAoICFhUGF0aEJpbmRpbmcoRkVDLCBQSEIsIGVyRkVDLCBMU1BpZCkg
KQogICAgICAgICAgICAgICB0Y2wucmVzdWx0KCIxIik7CiAgICAgICAgICBl
bHNlICAgICAKICAgICAgICAgICAgICAgdGNsLnJlc3VsdCgiLTEiKTsKCiAg
ICAgICAgIHJldHVybiAoVENMX09LKTsKICAgICAgfQogICAKICAgfQoKIAog
CiBpZiAoYXJnYyA9PSA4KQogICB7ICAgICAgCgogICAgIGludCBhZGRyICA9
IGF0b2koYXJndlsyXSk7CiAgICAgaW50IExTUGlkID0gYXRvaShhcmd2WzNd
KTsKICAgICBpbnQgUEhCICAgPSBMU1BpZDsKICAgICBpbnQgTElCcHRyLCBQ
RlRuYixFUkJuYiA7CgogICAgIGlmIChMU1BpZCA9PSBEZWZhdWx0UEhCKSAg
IC8vIHRvcG9sb2d5LWJhc2VkIExTUAogICAgICAgICAgICBQRlRuYiA9IFBG
VGxvY2F0ZShhZGRyLFBIQixMSUJwdHIpOwogICAgIGVsc2UgICAgICAgICAg
ICAgICAgLy8gRVItTFNQCiAgICAgICAgICAgIEVSQm5iID0gRVJCbG9jYXRl
KExTUGlkLGFkZHIsTElCcHRyKTsKICAgICAgICAJCiAgCSAgICAgICAgICAg
ICAvKiAkTVBMU0FkZHJlc3NDbGFzc2lmaWVyIExTUHJlbGVhc2UgZmVjIGxz
cGlkIGlpZiBpbGFiZWwgb2lmIG9sYWJlbCAqLwogICAgIGlmIChzdHJjbXAo
YXJndlsxXSwgIkxTUHJlbGVhc2UiKSA9PSAwKQogICAgICAgIHsKICAgICAg
ICAgICBpZiAoTFNQaWQgPCAwKSAgICAvLyB0b3BvbG9neS1iYXNlZCBMU1AK
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgaWYgKCBQRlRuYiA+
PSAwICkgICAvKiBQRlQgZW50cnkgZXhpc3QgKi8KICAgICAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIExJQnVwZGF0ZShMSUJw
dHIsYXRvaShhcmd2WzRdKSxhdG9pKGFyZ3ZbNV0pLGF0b2koYXJndls2XSks
YXRvaShhcmd2WzddKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJ
ICAgIAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFMSUJpc2RlbGV0
ZWQoTElCcHRyKSApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsg
ICAgUEZUZGVsZXRlTElCcHRyKExJQnB0cik7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgfQogICAgICAgICAgIGVsc2UgICAgICAgICAgICAgIC8vIEVSLUxT
UAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpZiAoIEVSQm5i
ID49IDAgKSAgIC8qIEVSQiBlbnRyeSBleGlzdCAqLwogICAgICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgTElCdXBkYXRlKExJ
QnB0cixhdG9pKGFyZ3ZbNF0pLGF0b2koYXJndls1XSksYXRvaShhcmd2WzZd
KSxhdG9pKGFyZ3ZbN10pKTsKICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCAhTElCaXNkZWxldGVkKExJQnB0cikgKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7ICAgRVJCZGVsZXRlKEVSQm5i
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBGVGRlbGV0
ZUxJQnB0cihMSUJwdHIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIChUQ0xfT0spOyAgICAgICAg
CiAgICAgICAgfQoKCiAgCSAgICAgICAgICAgICAgIC8qICRNUExTQWRkcmVz
c0NsYXNzaWZpZXIgTFNQc2V0dXAgZmVjIGxzcGlkIGlpZiBpbGFiZWwgb2lm
IG9sYWJlbCAqLwogICAgIGlmIChzdHJjbXAoYXJndlsxXSwgIkxTUHNldHVw
IikgPT0gMCkKICAgICAgewogICAgICAgICBpZiAoTFNQaWQgPT0gRGVmYXVs
dFBIQikgICAgIC8vIHRvcG9sb2d5LWJhc2VkIExTUAogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICBpZiAoIFBGVG5iIDwgMCApICAgLyogUEZUIGVu
dHJ5IG5vdCBleGlzdCAqLwogICAgICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICAgICAgIGludCBwdHIgPSBMSUJpbnNlcnQoYXRvaShhcmd2
WzRdKSxhdG9pKGFyZ3ZbNV0pLGF0b2koYXJndls2XSksYXRvaShhcmd2Wzdd
KSk7CiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgIGlm
IChwdHIgPiAtMSkgICAgIFBGVGluc2VydChhZGRyLERlZmF1bHRQSEIscHRy
KTsKICAgICAgICAgICAgICAgICAgICAgICBlbHNlICAgIAkgICAgICAgICBy
ZXR1cm4gKFRDTF9FUlJPUik7CiAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICBlbHNlICAgICAgICAvKiBQRlQgZW50cnkgYWxyZWFkeSBl
eGlzdCAqLwogICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgICAgIGlmIChMSUJwdHIgPiAtMSkKICAgICAgICAgICAgICAgICAgICAg
ICAgICB7ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog
Y2hlY2sgd2hldGhlciBvciBub3QgYWx0YW5hdGl2ZSBwYXRoIHNldHVwICov
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggKGVuYWJs
ZV9yZXJvdXRlXyA9PSAxKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKExJQi5FbnRyeVtMSUJwdHJdLm9JZmFjZSA+IC0xKSAmJiAo
cmVyb3V0ZV9vcHRpb25fID09IE1ha2VOZXdMU1ApICYmCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoYXRvaShhcmd2WzZdKSA+IC0xKSAm
JiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICghaXNfbGlu
a19kb3duKExJQi5FbnRyeVtMSUJwdHJdLm9JZmFjZSkpICkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7IAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBGVC5FbnRyeVtQRlRuYl0uYVBBVEhwdHIgPSAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJp
bnNlcnQoYXRvaShhcmd2WzRdKSxhdG9pKGFyZ3ZbNV0pLGF0b2koYXJndls2
XSksYXRvaShhcmd2WzddKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIChpbnQgaT0wOyBpPExJQi5OQjsgaSsrKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggTElCLkVudHJ5W2ldLm9JZmFjZSA9PSBh
dG9pKGFyZ3ZbMl0pICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCSAgICAgZm9yIChpbnQgaz0wOyBrPFBGVC5OQjsgaysrKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkgICAgICAJ
ICBpZiAoUEZULkVudHJ5W2tdLkxJQnB0ciA9PSBpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAJICAgICAgICAgICAgICBQRlQu
RW50cnlba10uYVBBVEhwdHIgPSBQRlQuRW50cnlbUEZUbmJdLmFQQVRIcHRy
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCX0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CQoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgIAkg
ICBMSUJ1cGRhdGUoTElCcHRyLGF0b2koYXJndls0XSksYXRvaShhcmd2WzVd
KSxhdG9pKGFyZ3ZbNl0pLGF0b2koYXJndls3XSkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgcHRyID0gTElCaW5zZXJ0KGF0b2koYXJndls0XSks
YXRvaShhcmd2WzVdKSxhdG9pKGFyZ3ZbNl0pLGF0b2koYXJndls3XSkpOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHB0ciA+IC0xKSAg
ICAgIFBGVHVwZGF0ZShQRlRuYixwdHIpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlICAgICAgICAgICAgICAgcmV0dXJuIChUQ0xfRVJS
T1IpOwkKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICB9ICAgICAgICAgIAogICAgICAgICAgICB9CiAgICAgICAgIGVs
c2UgICAgICAgICAgICAgLy8gRVItTFNQCiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgIGlmICggRVJCbmIgPCAwICkgICAvKiBFUkIgZW50cnkgbm90
IGV4aXN0ICovCiAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgICAgaW50IHB0ciA9IExJQmluc2VydChhdG9pKGFyZ3ZbNF0pLGF0
b2koYXJndls1XSksYXRvaShhcmd2WzZdKSxhdG9pKGFyZ3ZbN10pKTsKICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgaWYgKHB0ciA+
IC0xKSAgICAgRVJCaW5zZXJ0KExTUGlkLGFkZHIscHRyKTsKICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlICAgIAkgICAgICAgICByZXR1cm4gKFRDTF9F
UlJPUik7CiAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBl
bHNlICAgICAgICAvKiBFUkIgZW50cnkgYWxyZWFkeSBleGlzdCAqLwogICAg
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgIGlmIChM
SUJwdHIgPiAtMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAJTElCdXBk
YXRlKExJQnB0cixhdG9pKGFyZ3ZbNF0pLGF0b2koYXJndls1XSksYXRvaShh
cmd2WzZdKSxhdG9pKGFyZ3ZbN10pKTsKICAgICAgICAgICAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgcHRyID0gTElCaW5zZXJ0KGF0b2ko
YXJndls0XSksYXRvaShhcmd2WzVdKSxhdG9pKGFyZ3ZbNl0pLGF0b2koYXJn
dls3XSkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHB0
ciA+IC0xKSAgICAgIEVSQnVwZGF0ZShFUkJuYixwdHIpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlICAgICAgICAgICAgICAgcmV0dXJu
IChUQ0xfRVJST1IpOwkKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgIAkgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgIHJldHVy
biAoVENMX09LKTsKICAgICAgfQoKICAgfQoKICBpZiAoc3RyY21wKGFyZ3Zb
MV0sICJpbnN0YWxsIikgPT0gMCkKICAgICB7IAogICAgIAkgY2hhciBjb21t
WzEwMF07CiAgICAgICAgIFRjbCAmdGNsPSBUY2w6Omluc3RhbmNlKCk7CiAg
ICAgICAgIAoJIGludCBzbG90ID0gYXRvaShhcmd2WzJdKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICBpZiAoc2xvdCA+PSAwICYmIHNs
b3QgPCBuc2xvdF8gJiYgc2xvdF9bc2xvdF0gIT0gTlVMTCkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgaWYgKCBzdHJjbXAoc2xvdF9bc2xvdF0t
Pm5hbWUoKSxhcmd2WzNdKSAhPSAwICkKICAgICAgICAgICAgICAgICAgICAg
eyAgCiAgICAgICAgICAgICAgICAgICAgIAlzcHJpbnRmKGNvbW0sIiVzIHJv
dXRpbmctdXBkYXRlICVzICVzICVmIixuYW1lKCksYXJndlsyXSxhcmd2WzNd
LCBTY2hlZHVsZXI6Omluc3RhbmNlKCkuY2xvY2soKSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHRjbC5ldmFsKGNvbW0pOwogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50Zihjb21tLCIl
cyByb3V0aW5nLW5vY2hhbmdlICVzICVzICVmIixuYW1lKCksYXJndlsyXSxh
cmd2WzNdLCBTY2hlZHVsZXI6Omluc3RhbmNlKCkuY2xvY2soKSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgIHRjbC5ldmFsKGNvbW0pOwogICAgICAgICAg
ICAgICAgICAgICB9CgkgICAgfQoJIGVsc2UKICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgc3ByaW50Zihjb21tLCIlcyByb3V0aW5nLW5ldyAlcyAl
cyAlZiIsbmFtZSgpLGFyZ3ZbMl0sYXJndlszXSwgU2NoZWR1bGVyOjppbnN0
YW5jZSgpLmNsb2NrKCkpOwogICAgICAgICAgICAgICAgdGNsLmV2YWwoY29t
bSk7CgkgICAgfQogICAgIH0KICAKICByZXR1cm4gKEFkZHJlc3NDbGFzc2lm
aWVyOjpjb21tYW5kKGFyZ2MsIGFyZ3YpKTsKfQoKCgoKLyoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKioqICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKioqICAg
ICAgUEZUKFBhcnRpYWwgRm9yd2FyZGluZyBUYWJsZSkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKioq
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioK
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KCnZvaWQgTVBMU0FkZHJlc3NDbGFzc2lmaWVyOjpQRlRpbnNlcnQoaW50
IEZFQywgaW50IFBIQiwgaW50IExJQnB0cikKewogICAgUEZULkVudHJ5W1BG
VC5OQl0uRkVDICAgID0gRkVDOwogICAgUEZULkVudHJ5W1BGVC5OQl0uUEhC
ICAgID0gUEhCOwogICAgUEZULkVudHJ5W1BGVC5OQl0uTElCcHRyID0gTElC
cHRyOwogICAgUEZULkVudHJ5W1BGVC5OQl0uYVBBVEhwdHIgID0gLTE7CiAg
ICBQRlQuTkIrKzsKfQogCgp2b2lkIE1QTFNBZGRyZXNzQ2xhc3NpZmllcjo6
UEZUZGVsZXRlKGludCBlbnRyeW5iKQp7CiAgICBQRlQuRW50cnlbZW50cnlu
Yl0uRkVDICAgID0gLTE7CiAgICBQRlQuRW50cnlbZW50cnluYl0uUEhCICAg
ID0gLTE7CiAgICBQRlQuRW50cnlbZW50cnluYl0uTElCcHRyID0gLTE7Cn0K
Cgp2b2lkIE1QTFNBZGRyZXNzQ2xhc3NpZmllcjo6UEZUZGVsZXRlTElCcHRy
KGludCBMSUJwdHIpCnsKICAgIGZvciAoaW50IGk9MDsgaTxQRlQuTkI7IGkr
KykKICAgICAgICBpZiAoIFBGVC5FbnRyeVtpXS5MSUJwdHIgPT0gTElCcHRy
ICkKICAgICAgICAgICB7ICAgCiAgICAgICAgICAgICAgUEZULkVudHJ5W2ld
LkZFQyAgICA9IC0xOwogICAgICAgICAgICAgIFBGVC5FbnRyeVtpXS5QSEIg
ICAgPSAtMTsKICAgICAgICAgICAgICBQRlQuRW50cnlbaV0uTElCcHRyID0g
LTE7CiAgICAgICAgICAgfSAgCn0KCgp2b2lkIE1QTFNBZGRyZXNzQ2xhc3Np
Zmllcjo6UEZUdXBkYXRlKGludCBlbnRyeW5iLCBpbnQgTElCcHRyKQp7CiAg
ICBQRlQuRW50cnlbZW50cnluYl0uTElCcHRyID0gTElCcHRyOwp9CgoKCmlu
dCAgTVBMU0FkZHJlc3NDbGFzc2lmaWVyOjpQRlRsb2NhdGUoaW50IEZFQywg
aW50IFBIQiwgaW50ICZMSUJwdHIpCnsKICAgIExJQnB0ciA9IC0xOwogICAg
CiAgICBpZiAoRkVDIDwgMCkgcmV0dXJuKC0xKTsKICAgIAogICAgZm9yIChp
bnQgaT0wOyBpPFBGVC5OQjsgaSsrKQogICAgICAgIGlmICggKFBGVC5FbnRy
eVtpXS5GRUMgPT0gRkVDKSAmJiAoUEZULkVudHJ5W2ldLlBIQiA9PSBQSEIp
ICkKICAgICAgICAgICB7ICAgCiAgICAgICAgICAgICAgIExJQnB0ciA9IFBG
VC5FbnRyeVtpXS5MSUJwdHI7CiAgICAgICAgICAgICAgIHJldHVybihpKTsK
ICAgICAgICAgICB9CgogICAgcmV0dXJuKC0xKTsKfQoKCgppbnQgIE1QTFNB
ZGRyZXNzQ2xhc3NpZmllcjo6UEZUbG9va3VwKGludCBGRUMsIGludCBQSEIs
IGludCAmb0lmYWNlLCBpbnQgJm9MYWJlbCwgaW50ICZMSUJwdHIpCnsKICAg
IG9JZmFjZSA9IG9MYWJlbCA9IExJQnB0ciA9IC0xOwoKICAgIGlmIChGRUMg
PCAwKSByZXR1cm4oLTEpOwogICAgCiAgICBmb3IgKGludCBpPTA7IGk8UEZU
Lk5COyBpKyspCiAgICAgICAgaWYgKCAoUEZULkVudHJ5W2ldLkZFQyA9PSBG
RUMpICYmIChQRlQuRW50cnlbaV0uUEhCID09IFBIQikgKQogICAgICAgICAg
IHsgCiAgICAgICAgICAgICAgIHJldHVybihMSUJsb29rdXAoUEZULkVudHJ5
W2ldLkxJQnB0cixvSWZhY2Usb0xhYmVsLExJQnB0cikpOwogICAgICAgICAg
IH0KCiAgICByZXR1cm4oLTEpOwp9CgoKdm9pZCBNUExTQWRkcmVzc0NsYXNz
aWZpZXI6OlBGVGR1bXAoY29uc3QgY2hhciAqaWQpCnsKICAgIGNvdXQgPDwg
IiAgICAgIC0tKSBfX19QRlQgZHVtcF9fXyBbbm9kZTogIiA8PCBpZCA8PCAi
XSAoLS1cbiI7CiAgICBjb3V0IDw8ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiI7CiAgICBjb3V0IDw8ICIgICAg
IEZFQyAgICAgICBQSEIgICAgICAgTElCcHRyICBBbHRhbmF0aXZlUGF0aFxu
IjsKICAgIAogICAgZm9yIChpbnQgaT0wOyBpPFBGVC5OQjsgaSsrKQoJewoJ
ICAgaWYgKCBQRlQuRW50cnlbaV0uRkVDID09IC0xKSBjb250aW51ZTsKCSAg
IAoJICAgY291dCA8PCAiICAgICAiIDw8IFBGVC5FbnRyeVtpXS5GRUMgICAg
ICA8PCAiICAgICI7CgkgICBjb3V0IDw8ICIgICAgICIgPDwgUEZULkVudHJ5
W2ldLlBIQiAgICAgIDw8ICIgICAgIjsKCSAgIGNvdXQgPDwgIiAgICAgIiA8
PCBQRlQuRW50cnlbaV0uTElCcHRyICAgPDwgIiAgICAiOwoJICAgY291dCA8
PCAiICAgICAiIDw8IFBGVC5FbnRyeVtpXS5hUEFUSHB0ciA8PCAiXG4iOwoJ
fQogICAgCiAgICBjb3V0IDw8ICJcbiI7CQp9CgoKCgovKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqKiogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgoqKiogICAg
ICBFUi1MU1AgVGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgoqKiog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio=
---393082156-29175302-955356642=:26718--