From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED autolearn=ham autolearn_force=no version=3.4.2 Received: from inbox.vuxu.org (localhost [IPv6:::1]) by inbox.vuxu.org (OpenSMTPD) with ESMTP id 62c17aa8 for ; Sun, 27 Oct 2019 08:41:50 +0000 (UTC) Content-Type: multipart/mixed; boundary="===============5652147208788952338==" MIME-Version: 1.0 Subject: Re: [PR PATCH] [Updated] par: added unicode support To: ml@inbox.vuxu.org From: voidlinux-github@inbox.vuxu.org Reply-to: ml@inbox.vuxu.org In-Reply-To: References: Date: Sun, 27 Oct 2019 09:41:50 +0100 Message-ID: <20191027084150.NZqC6wHlZkyQJ7AkACI7juvuCp0AD_u_IIwftMlDmKs@z> GitHub notification mails are now in MIME to allow UTF8. --===============5652147208788952338== MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 VGhlcmUgaXMgYW4gdXBkYXRlZCBwdWxsIHJlcXVlc3QgYnkgVmFsVGltY2hlbmtvIGFnYWluc3Qg bWFzdGVyIG9uIHRoZSB2b2lkLXBhY2thZ2VzIHJlcG9zaXRvcnkKCmh0dHBzOi8vZ2l0aHViLmNv bS9WYWxUaW1jaGVua28vdm9pZC1wYWNrYWdlcyBwYXItdW5pY29kZQpodHRwczovL2dpdGh1Yi5j b20vdm9pZC1saW51eC92b2lkLXBhY2thZ2VzL3B1bGwvMTU4MTIKCnBhcjogYWRkZWQgdW5pY29k ZSBzdXBwb3J0ClN1YmouIEp1c3QgYWRkZWQgdW5pY29kZSBwYXRjaCBtYWRlIGJ5IErDg8KpcsOD wrRtZSBQb3VpbGxlciBhcyBvZjogaHR0cDovL3N5c21pYy5vcmcvZG90Y2xlYXIvaW5kZXgucGhw P3Bvc3QvMjAwNi8wNi8yMi81NS1hZGQtbXVsdGlieXRlLWNoYXJhY3RlcnMtc3VwcG9ydC1pbi1w YXIKCkEgcGF0Y2ggZmlsZSBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS92b2lkLWxpbnV4L3ZvaWQt cGFja2FnZXMvcHVsbC8xNTgxMi5wYXRjaCBpcyBhdHRhY2hlZA== --===============5652147208788952338== Content-Type: text/x-diff MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="github-pr-par-unicode-15812.patch" RnJvbSA1YmFmMThhYWEzMjNlYTFhMWZiNmM3ZjhkM2Q0OGFkZjhiMzU4Y2MwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWYWxUaW1jaGVua28gPFZhbFRpbWNoZW5rb0BnbWFpbC5jb20+ CkRhdGU6IFNhdCwgMjYgT2N0IDIwMTkgMTc6MzU6MjkgKzAzMDAKU3ViamVjdDogW1BBVENIIDEv Ml0gQWRkZWQgdW5pY29kZSBwYXRjaCBmb3IgcGFyLTEuNTIKCi0tLQogc3JjcGtncy9wYXIvcGF0 Y2hlcy9wYXItaTE4bi5wYXRjaCB8IDI4NTggKysrKysrKysrKysrKysrKysrKysrKysrKysrKwog MSBmaWxlIGNoYW5nZWQsIDI4NTggaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNy Y3BrZ3MvcGFyL3BhdGNoZXMvcGFyLWkxOG4ucGF0Y2gKCmRpZmYgLS1naXQgYS9zcmNwa2dzL3Bh ci9wYXRjaGVzL3Bhci1pMThuLnBhdGNoIGIvc3JjcGtncy9wYXIvcGF0Y2hlcy9wYXItaTE4bi5w YXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMjc1NTQyNWY3MDIK LS0tIC9kZXYvbnVsbAorKysgYi9zcmNwa2dzL3Bhci9wYXRjaGVzL3Bhci1pMThuLnBhdGNoCkBA IC0wLDAgKzEsMjg1OCBAQAorZGlmZiAtYyAuL2J1ZmZlci5jIC4uL1BhcjE1Mi11bmljb2RlL2J1 ZmZlci5jCisqKiogLi9idWZmZXIuYwkyMDAxLTAzLTA5IDAyOjUxOjExLjAwMDAwMDAwMCArMDMw MAorLS0tIC4uL1BhcjE1Mi11bmljb2RlL2J1ZmZlci5jCTIwMTktMTAtMjYgMTc6MjE6MDguNTQy MDUwODUzICswMzAwCisqKioqKioqKioqKioqKioKKyoqKiAxLDkgKioqKgorISAvKioqKioqKioq KioqKioqKioqKioqLworISAvKiBidWZmZXIuYyAgICAgICAgICAqLworISAvKiBmb3IgUGFyIDEu NTIgICAgICAqLworISAvKiBDb3B5cmlnaHQgMjAwMSBieSAqLworISAvKiBBZGFtIE0uIENvc3Rl bGxvICAqLworISAvKioqKioqKioqKioqKioqKioqKioqLworICAKKyAgLyogVGhpcyBpcyBBTlNJ IEMgY29kZSAoQzg5KS4gKi8KKyAgCistLS0gMSwxMSAtLS0tCishIC8qKioqKioqKioqKioqKioq KioqKioqKi8KKyEgLyogYnVmZmVyLmMgICAgICAgICAgICAqLworISAvKiBmb3IgUGFyIDEuNTIt aTE4bi40ICovCishIC8qIENvcHlyaWdodCAyMDAxIGJ5ICAgKi8KKyEgLyogQWRhbSBNLiBDb3N0 ZWxsbyAgICAqLworISAvKiBNb2RpZmllZCBieSAgICAgICAgICovCishIC8qIErDqXLDtG1lIFBv dWlsbGVyICAgICAqLworISAvKioqKioqKioqKioqKioqKioqKioqKiovCisgIAorICAvKiBUaGlz IGlzIEFOU0kgQyBjb2RlIChDODkpLiAqLworICAKKyoqKioqKioqKioqKioqKgorKioqIDE4LDIz ICoqKioKKy0tLSAyMCwyNiAtLS0tCisgIAorICAjaW5jbHVkZSA8c3RkbGliLmg+CisgICNpbmNs dWRlIDxzdHJpbmcuaD4KKysgI2luY2x1ZGUgPHdjaGFyLmg+CisgIAorICAjdW5kZWYgTlVMTAor ICAjZGVmaW5lIE5VTEwgKCh2b2lkICopIDApCisqKioqKioqKioqKioqKioKKyoqKiA2MCw2NiAq KioqCisgICAgYmxrID0gbWFsbG9jKHNpemVvZiAoYmxvY2spKTsKKyAgICBpdGVtcyA9IG1hbGxv YyhtYXhoZXJlICogaXRlbXNpemUpOworICAgIGlmICghYnVmIHx8ICFibGsgfHwgIWl0ZW1zKSB7 CishICAgICBzdHJjcHkoZXJybXNnLG91dG9mbWVtKTsKKyAgICAgIGdvdG8gbmJlcnJvcjsKKyAg ICB9CisgIAorLS0tIDYzLDY5IC0tLS0KKyAgICBibGsgPSBtYWxsb2Moc2l6ZW9mIChibG9jaykp OworICAgIGl0ZW1zID0gbWFsbG9jKG1heGhlcmUgKiBpdGVtc2l6ZSk7CisgICAgaWYgKCFidWYg fHwgIWJsayB8fCAhaXRlbXMpIHsKKyEgICAgIHdjc2NweShlcnJtc2csb3V0b2ZtZW0pOworICAg ICAgZ290byBuYmVycm9yOworICAgIH0KKyAgCisqKioqKioqKioqKioqKioKKyoqKiAxMjcsMTMz ICoqKioKKyAgICAgICAgbmV3ID0gbWFsbG9jKHNpemVvZiAoYmxvY2spKTsKKyAgICAgICAgaXRl bXMgPSBtYWxsb2MobWF4aGVyZSAqIGl0ZW1zaXplKTsKKyAgICAgICAgaWYgKCFuZXcgfHwgIWl0 ZW1zKSB7CishICAgICAgICAgc3RyY3B5KGVycm1zZyxvdXRvZm1lbSk7CisgICAgICAgICAgZ290 byBhaWVycm9yOworICAgICAgICB9CisgICAgICAgIGJsay0+bmV4dCA9IG5ldzsKKy0tLSAxMzAs MTM2IC0tLS0KKyAgICAgICAgbmV3ID0gbWFsbG9jKHNpemVvZiAoYmxvY2spKTsKKyAgICAgICAg aXRlbXMgPSBtYWxsb2MobWF4aGVyZSAqIGl0ZW1zaXplKTsKKyAgICAgICAgaWYgKCFuZXcgfHwg IWl0ZW1zKSB7CishICAgICAgICAgd2NzY3B5KGVycm1zZyxvdXRvZm1lbSk7CisgICAgICAgICAg Z290byBhaWVycm9yOworICAgICAgICB9CisgICAgICAgIGJsay0+bmV4dCA9IG5ldzsKKyoqKioq KioqKioqKioqKgorKioqIDE3NCwxODAgKioqKgorICAKKyAgICByID0gbWFsbG9jKG4gKiBpdGVt c2l6ZSk7CisgICAgaWYgKCFyKSB7CishICAgICBzdHJjcHkoZXJybXNnLG91dG9mbWVtKTsKKyAg ICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgCistLS0gMTc3LDE4MyAtLS0tCisgIAorICAgIHIg PSBtYWxsb2MobiAqIGl0ZW1zaXplKTsKKyAgICBpZiAoIXIpIHsKKyEgICAgIHdjc2NweShlcnJt c2csb3V0b2ZtZW0pOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAKK2RpZmYgLWMgLi9i dWZmZXIuaCAuLi9QYXIxNTItdW5pY29kZS9idWZmZXIuaAorKioqIC4vYnVmZmVyLmgJMjAwMS0w My0wOSAwMjo1MToyNS4wMDAwMDAwMDAgKzAzMDAKKy0tLSAuLi9QYXIxNTItdW5pY29kZS9idWZm ZXIuaAkyMDE5LTEwLTI2IDE3OjIxOjA4LjU0MzA1MDg1MyArMDMwMAorKioqKioqKioqKioqKioq CisqKiogMSw5ICoqKioKKyEgLyoqKioqKioqKioqKioqKioqKioqKi8KKyEgLyogYnVmZmVyLmgg ICAgICAgICAgKi8KKyEgLyogZm9yIFBhciAxLjUyICAgICAgKi8KKyEgLyogQ29weXJpZ2h0IDIw MDEgYnkgKi8KKyEgLyogQWRhbSBNLiBDb3N0ZWxsbyAgKi8KKyEgLyoqKioqKioqKioqKioqKioq KioqKi8KKyAgCisgIC8qIFRoaXMgaXMgQU5TSSBDIGNvZGUgKEM4OSkuICovCisgIAorLS0tIDEs MTEgLS0tLQorISAvKioqKioqKioqKioqKioqKioqKioqKiovCishIC8qIGJ1ZmZlci5oICAgICAg ICAgICAgKi8KKyEgLyogZm9yIFBhciAxLjUyLWkxOG4uNCAqLworISAvKiBDb3B5cmlnaHQgMjAw MSBieSAgICovCishIC8qIEFkYW0gTS4gQ29zdGVsbG8gICAgKi8KKyEgLyogTW9kaWZpZWQgYnkg ICAgICAgICAqLworISAvKiBKw6lyw7RtZSBQb3VpbGxlciAgICAgKi8KKyEgLyoqKioqKioqKioq KioqKioqKioqKioqLworICAKKyAgLyogVGhpcyBpcyBBTlNJIEMgY29kZSAoQzg5KS4gKi8KKyAg CitkaWZmIC1jIC4vY2hhcnNldC5jIC4uL1BhcjE1Mi11bmljb2RlL2NoYXJzZXQuYworKioqIC4v Y2hhcnNldC5jCTIwMDEtMDQtMDMgMDE6NTE6NDguMDAwMDAwMDAwICswNDAwCistLS0gLi4vUGFy MTUyLXVuaWNvZGUvY2hhcnNldC5jCTIwMTktMTAtMjYgMTc6MjE6MDguNTQ0MDUwODUzICswMzAw CisqKioqKioqKioqKioqKioKKyoqKiAxLDkgKioqKgorISAvKioqKioqKioqKioqKioqKioqKioq LworISAvKiBjaGFyc2V0LmMgICAgICAgICAqLworISAvKiBmb3IgUGFyIDEuNTIgICAgICAqLwor ISAvKiBDb3B5cmlnaHQgMjAwMSBieSAqLworISAvKiBBZGFtIE0uIENvc3RlbGxvICAqLworISAv KioqKioqKioqKioqKioqKioqKioqLworICAKKyAgLyogVGhpcyBpcyBBTlNJIEMgY29kZSAoQzg5 KS4gKi8KKyAgCistLS0gMSwxMSAtLS0tCishIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKyEg LyogY2hhcnNldC5jICAgICAgICAgICAqLworISAvKiBmb3IgUGFyIDEuNTItaTE4bi40ICovCish IC8qIENvcHlyaWdodCAyMDAxIGJ5ICAgKi8KKyEgLyogQWRhbSBNLiBDb3N0ZWxsbyAgICAqLwor ISAvKiBNb2RpZmllZCBieSAgICAgICAgICovCishIC8qIErDqXLDtG1lIFBvdWlsbGVyICAgICAq LworISAvKioqKioqKioqKioqKioqKioqKioqKiovCisgIAorICAvKiBUaGlzIGlzIEFOU0kgQyBj b2RlIChDODkpLiAqLworICAKKyoqKioqKioqKioqKioqKgorKioqIDE4LDI1ICoqKioKKyAgICAg ICAgICAgICAgICAgICAgICAgIC8qIHByb3RvdHlwZXMuICBBbHNvIGluY2x1ZGVzICJlcnJtc2cu aCIuICovCisgICNpbmNsdWRlICJidWZmZXIuaCIgICAvKiBBbHNvIGluY2x1ZGVzIDxzdGRkZWYu aD4uICAgICAgICAgICAgICAqLworICAKKy0gI2luY2x1ZGUgPGN0eXBlLmg+CisgICNpbmNsdWRl IDxzdGRpby5oPgorICAjaW5jbHVkZSA8c3RkbGliLmg+CisgICNpbmNsdWRlIDxzdHJpbmcuaD4K KyAgCistLS0gMjAsMjggLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG90eXBl cy4gIEFsc28gaW5jbHVkZXMgImVycm1zZy5oIi4gKi8KKyAgI2luY2x1ZGUgImJ1ZmZlci5oIiAg IC8qIEFsc28gaW5jbHVkZXMgPHN0ZGRlZi5oPi4gICAgICAgICAgICAgICovCisgIAorICAjaW5j bHVkZSA8c3RkaW8uaD4KKysgI2luY2x1ZGUgPHdjaGFyLmg+CisrICNpbmNsdWRlIDx3Y3R5cGUu aD4KKyAgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICAjaW5jbHVkZSA8c3RyaW5nLmg+CisgIAorKioq KioqKioqKioqKioqCisqKiogMzksNDYgKioqKgorICB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgY3Nm bGFnX3Q7CisgIAorICBzdHJ1Y3QgY2hhcnNldCB7CishICAgY2hhciAqaW5saXN0OyAgICAvKiBD aGFyYWN0ZXJzIGluIGlubGlzdCBhcmUgaW4gdGhlIHNldC4gICAgICAgICAgICAgICAgKi8KKyEg ICBjaGFyICpvdXRsaXN0OyAgIC8qIENoYXJhY3RlcnMgaW4gb3V0bGlzdCBhcmUgbm90IGluIHRo ZSBzZXQuICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgLyogaW5saXN0IGFuZCBv dXRsaXN0IG11c3QgaGF2ZSBubyBjb21tb24gY2hhcmFjdGVycy4gICovCisgICAgICAgICAgICAg ICAgICAgICAvKiBpbmxpc3QgYW5kIG91dGxpc3QgbWF5IGJlIE5VTEwsIHdoaWNoIGFjdHMgbGlr ZSAiIi4gKi8KKyAgICBjc2ZsYWdfdCBmbGFnczsgIC8qIENoYXJhY3RlcnMgaW4gbmVpdGhlciBs aXN0IGFyZSBpbiB0aGUgc2V0IGlmIHRoZXkgICAqLworLS0tIDQyLDQ5IC0tLS0KKyAgdHlwZWRl ZiB1bnNpZ25lZCBjaGFyIGNzZmxhZ190OworICAKKyAgc3RydWN0IGNoYXJzZXQgeworISAgIHdj aGFyX3QgKmlubGlzdDsgICAgLyogQ2hhcmFjdGVycyBpbiBpbmxpc3QgYXJlIGluIHRoZSBzZXQu ICAgICAgICAgICAgICAgICovCishICAgd2NoYXJfdCAqb3V0bGlzdDsgICAvKiBDaGFyYWN0ZXJz IGluIG91dGxpc3QgYXJlIG5vdCBpbiB0aGUgc2V0LiAgICAgICAgICAgKi8KKyAgICAgICAgICAg ICAgICAgICAgIC8qIGlubGlzdCBhbmQgb3V0bGlzdCBtdXN0IGhhdmUgbm8gY29tbW9uIGNoYXJh Y3RlcnMuICAqLworICAgICAgICAgICAgICAgICAgICAgLyogaW5saXN0IGFuZCBvdXRsaXN0IG1h eSBiZSBOVUxMLCB3aGljaCBhY3RzIGxpa2UgIiIuICovCisgICAgY3NmbGFnX3QgZmxhZ3M7ICAv KiBDaGFyYWN0ZXJzIGluIG5laXRoZXIgbGlzdCBhcmUgaW4gdGhlIHNldCBpZiB0aGV5ICAgKi8K KyoqKioqKioqKioqKioqKgorKioqIDU2LDgwICoqKioKKyAgICAgICAgICAgICAgICAgICAgICAg IENTX05VTCAgID0gODsgIC8qIEluY2x1ZGVzIHRoZSBOVUwgY2hhcmFjdGVyLiAgICAgICovCisg IAorICAKKyEgc3RhdGljIGludCBhcHBlYXJzaW4oY2hhciBjLCBjb25zdCBjaGFyICpzdHIpCisg IAorICAvKiBSZXR1cm5zIDAgaWYgYyBpcyAnXDAnIG9yIHN0ciBpcyBOVUxMIG9yIGMgICAgICov CisgIC8qIGRvZXMgbm90IGFwcGVhciBpbiAqc3RyLiAgT3RoZXJ3aXNlIHJldHVybnMgMS4gKi8K KyAgeworISAgIHJldHVybiBjICYmIHN0ciAmJiBzdHJjaHIoc3RyLGMpOworICB9CisgIAorICAK KyEgc3RhdGljIGludCBoZXhkaWd0b2ludChjaGFyIGMpCisgIAorICAvKiBSZXR1cm5zIHRoZSB2 YWx1ZSByZXByZXNlbnRlZCBieSB0aGUgaGV4YWRlY2ltYWwgKi8KKyAgLyogZGlnaXQgYywgb3Ig LTEgaWYgYyBpcyBub3QgYSBoZXhhZGVjaW1hbCBkaWdpdC4gICovCisgIHsKKyEgICBjb25zdCBj aGFyICpwLCAqIGNvbnN0IGhleGRpZ2l0cyA9ICIwMTIzNDU2Nzg5QUJDREVGYWJjZGVmIjsKKyAg ICBpbnQgbjsKKyAgCisgICAgaWYgKCFjKSByZXR1cm4gLTE7CishICAgcCA9IHN0cmNocihoZXhk aWdpdHMsICoodW5zaWduZWQgY2hhciAqKSZjKTsKKyAgICBpZiAoIXApIHJldHVybiAtMTsKKyAg ICBuID0gcCAtIGhleGRpZ2l0czsKKyAgICBpZiAobiA+PSAxNikgbiAtPSA2OworLS0tIDU5LDgz IC0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgIENTX05VTCAgID0gODsgIC8qIEluY2x1ZGVz IHRoZSBOVUwgY2hhcmFjdGVyLiAgICAgICovCisgIAorICAKKyEgc3RhdGljIGludCBhcHBlYXJz aW4od2NoYXJfdCBjLCBjb25zdCB3Y2hhcl90ICpzdHIpCisgIAorICAvKiBSZXR1cm5zIDAgaWYg YyBpcyAnXDAnIG9yIHN0ciBpcyBOVUxMIG9yIGMgICAgICovCisgIC8qIGRvZXMgbm90IGFwcGVh ciBpbiAqc3RyLiAgT3RoZXJ3aXNlIHJldHVybnMgMS4gKi8KKyAgeworISAgIHJldHVybiBjICYm IHN0ciAmJiB3Y3NjaHIoc3RyLGMpOworICB9CisgIAorICAKKyEgc3RhdGljIGludCBoZXhkaWd0 b2ludCh3Y2hhcl90IGMpCisgIAorICAvKiBSZXR1cm5zIHRoZSB2YWx1ZSByZXByZXNlbnRlZCBi eSB0aGUgaGV4YWRlY2ltYWwgKi8KKyAgLyogZGlnaXQgYywgb3IgLTEgaWYgYyBpcyBub3QgYSBo ZXhhZGVjaW1hbCBkaWdpdC4gICovCisgIHsKKyEgICBjb25zdCB3Y2hhcl90ICpwLCAqIGNvbnN0 IGhleGRpZ2l0cyA9IEwiMDEyMzQ1Njc4OUFCQ0RFRmFiY2RlZiI7CisgICAgaW50IG47CisgIAor ICAgIGlmICghYykgcmV0dXJuIC0xOworISAgIHAgPSB3Y3NjaHIoaGV4ZGlnaXRzLCBjKTsKKyAg ICBpZiAoIXApIHJldHVybiAtMTsKKyAgICBuID0gcCAtIGhleGRpZ2l0czsKKyAgICBpZiAobiA+ PSAxNikgbiAtPSA2OworKioqKioqKioqKioqKioqCisqKiogODcsMTI1ICoqKioKKyAgfQorICAK KyAgCishIGNoYXJzZXQgKnBhcnNlY2hhcnNldChjb25zdCBjaGFyICpzdHIsIGVycm1zZ190IGVy cm1zZykKKyAgeworICAgIGNoYXJzZXQgKmNzZXQgPSBOVUxMOworICAgIGJ1ZmZlciAqY2J1ZiA9 IE5VTEw7CishICAgY29uc3QgY2hhciAqcCwgKiBjb25zdCBzaW5nbGVlc2NhcGVzID0gIl9zYnFR eCI7CisgICAgaW50IGhleDEsIGhleDI7CishICAgY2hhciBjaDsKKyEgCisgICAgY3NldCA9IG1h bGxvYyhzaXplb2YgKGNoYXJzZXQpKTsKKyAgICBpZiAoIWNzZXQpIHsKKyEgICAgIHN0cmNweShl cnJtc2csb3V0b2ZtZW0pOworICAgICAgZ290byBwY3NlcnJvcjsKKyAgICB9CisgICAgY3NldC0+ aW5saXN0ID0gY3NldC0+b3V0bGlzdCA9IE5VTEw7CisgICAgY3NldC0+ZmxhZ3MgPSAwOworICAK KyEgICBjYnVmID0gbmV3YnVmZmVyKHNpemVvZiAoY2hhciksIGVycm1zZyk7CisgICAgaWYgKCpl cnJtc2cpIGdvdG8gcGNzZXJyb3I7CisgIAorICAgIGZvciAocCA9IHN0cjsgICpwOyAgKytwKQor ISAgICAgaWYgKCpwID09ICdfJykgeworICAgICAgICArK3A7CisgICAgICAgIGlmIChhcHBlYXJz aW4oKnAsIHNpbmdsZWVzY2FwZXMpKSB7CishICAgICAgICAgaWYgICAgICAoKnAgPT0gJ18nKSBj aCA9ICdfJyA7CishICAgICAgICAgZWxzZSBpZiAoKnAgPT0gJ3MnKSBjaCA9ICcgJyA7CishICAg ICAgICAgZWxzZSBpZiAoKnAgPT0gJ2InKSBjaCA9ICdcXCc7CishICAgICAgICAgZWxzZSBpZiAo KnAgPT0gJ3EnKSBjaCA9ICdcJyc7CishICAgICAgICAgZWxzZSBpZiAoKnAgPT0gJ1EnKSBjaCA9 ICdcIic7CisgICAgICAgICAgZWxzZSAvKiAgKnAgPT0gJ3gnICAqLyB7CisgICAgICAgICAgICBo ZXgxID0gaGV4ZGlndG9pbnQocFsxXSk7CisgICAgICAgICAgICBoZXgyID0gaGV4ZGlndG9pbnQo cFsyXSk7CisgICAgICAgICAgICBpZiAoaGV4MSA8IDAgIHx8ICBoZXgyIDwgMCkgZ290byBwY3Ni YWRzdHI7CishICAgICAgICAgICAqKHVuc2lnbmVkIGNoYXIgKikmY2ggPSAxNiAqIGhleDEgKyBo ZXgyOworICAgICAgICAgICAgcCArPSAyOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoIWNo KQorLS0tIDkwLDEyOSAtLS0tCisgIH0KKyAgCisgIAorISBjaGFyc2V0ICpwYXJzZWNoYXJzZXQo Y29uc3Qgd2NoYXJfdCAqc3RyLCBlcnJtc2dfdCBlcnJtc2cpCisgIHsKKyAgICBjaGFyc2V0ICpj c2V0ID0gTlVMTDsKKyAgICBidWZmZXIgKmNidWYgPSBOVUxMOworISAgIGNvbnN0IHdjaGFyX3Qg KnAsICogY29uc3Qgc2luZ2xlZXNjYXBlcyA9IEwiX3NicVF4IjsKKyAgICBpbnQgaGV4MSwgaGV4 MjsKKyEgICB3Y2hhcl90IGNoOworISAgICAgICAKKyAgICBjc2V0ID0gbWFsbG9jKHNpemVvZiAo Y2hhcnNldCkpOworICAgIGlmICghY3NldCkgeworISAgICAgd2NzY3B5KGVycm1zZyxvdXRvZm1l bSk7CisgICAgICBnb3RvIHBjc2Vycm9yOworICAgIH0KKyAgICBjc2V0LT5pbmxpc3QgPSBjc2V0 LT5vdXRsaXN0ID0gTlVMTDsKKyAgICBjc2V0LT5mbGFncyA9IDA7CisgIAorISAgIGNidWYgPSBu ZXdidWZmZXIoc2l6ZW9mICh3Y2hhcl90KSwgZXJybXNnKTsKKyAgICBpZiAoKmVycm1zZykgZ290 byBwY3NlcnJvcjsKKyAgCisgICAgZm9yIChwID0gc3RyOyAgKnA7ICArK3ApCishICAgICBpZiAo KnAgPT0gTCdfJykgeworICAgICAgICArK3A7CisgICAgICAgIGlmIChhcHBlYXJzaW4oKnAsIHNp bmdsZWVzY2FwZXMpKSB7CishICAgICAgICAgaWYgICAgICAoKnAgPT0gTCdfJykgY2ggPSBMJ18n IDsKKyEgICAgICAgICBlbHNlIGlmICgqcCA9PSBMJ3MnKSBjaCA9IEwnICcgOworISAgICAgICAg IGVsc2UgaWYgKCpwID09IEwnYicpIGNoID0gTCdcXCc7CishICAgICAgICAgZWxzZSBpZiAoKnAg PT0gTCdxJykgY2ggPSBMJ1wnJzsKKyEgICAgICAgICBlbHNlIGlmICgqcCA9PSBMJ1EnKSBjaCA9 IEwnXCInOworICAgICAgICAgIGVsc2UgLyogICpwID09ICd4JyAgKi8geworKyAgICAgICAgICAg LyogRklYTUUgX3ggbWV0YWNoYXJhY3RlciBzaG91bGQgYWxsb3cgd2lkZSBjaGFyYWN0ZXJzIGlu cHV0LiovCisgICAgICAgICAgICBoZXgxID0gaGV4ZGlndG9pbnQocFsxXSk7CisgICAgICAgICAg ICBoZXgyID0gaGV4ZGlndG9pbnQocFsyXSk7CisgICAgICAgICAgICBpZiAoaGV4MSA8IDAgIHx8 ICBoZXgyIDwgMCkgZ290byBwY3NiYWRzdHI7CishICAgICAgICAgICBjaCA9IDE2ICogaGV4MSAr IGhleDI7CisgICAgICAgICAgICBwICs9IDI7CisgICAgICAgICAgfQorICAgICAgICAgIGlmICgh Y2gpCisqKioqKioqKioqKioqKioKKyoqKiAxMzAsMTQzICoqKioKKyAgICAgICAgICB9CisgICAg ICAgIH0KKyAgICAgICAgZWxzZSB7CishICAgICAgICAgaWYgICAgICAoKnAgPT0gJ0EnKSBjc2V0 LT5mbGFncyB8PSBDU19VQ0FTRTsKKyEgICAgICAgICBlbHNlIGlmICgqcCA9PSAnYScpIGNzZXQt PmZsYWdzIHw9IENTX0xDQVNFOworISAgICAgICAgIGVsc2UgaWYgKCpwID09ICcwJykgY3NldC0+ ZmxhZ3MgfD0gQ1NfRElHSVQ7CisgICAgICAgICAgZWxzZSBnb3RvIHBjc2JhZHN0cjsKKyAgICAg ICAgfQorICAgICAgfQorICAgICAgZWxzZSB7CishICAgICAgIGFkZGl0ZW0oY2J1ZixwLGVycm1z Zyk7CisgICAgICAgIGlmICgqZXJybXNnKSBnb3RvIHBjc2Vycm9yOworICAgICAgfQorICAgIGNo ID0gJ1wwJzsKKy0tLSAxMzQsMTQ3IC0tLS0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg ICAgZWxzZSB7CishICAgICAgICAgaWYgICAgICAoKnAgPT0gTCdBJykgY3NldC0+ZmxhZ3MgfD0g Q1NfVUNBU0U7CishICAgICAgICAgZWxzZSBpZiAoKnAgPT0gTCdhJykgY3NldC0+ZmxhZ3MgfD0g Q1NfTENBU0U7CishICAgICAgICAgZWxzZSBpZiAoKnAgPT0gTCcwJykgY3NldC0+ZmxhZ3MgfD0g Q1NfRElHSVQ7CisgICAgICAgICAgZWxzZSBnb3RvIHBjc2JhZHN0cjsKKyAgICAgICAgfQorICAg ICAgfQorICAgICAgZWxzZSB7CishICAgICAgIGFkZGl0ZW0oY2J1ZiwgcCxlcnJtc2cpOworICAg ICAgICBpZiAoKmVycm1zZykgZ290byBwY3NlcnJvcjsKKyAgICAgIH0KKyAgICBjaCA9ICdcMCc7 CisqKioqKioqKioqKioqKioKKyoqKiAxNDksMTU5ICoqKioKKyAgcGNzY2xlYW51cDoKKyAgCisg ICAgaWYgKGNidWYpIGZyZWVidWZmZXIoY2J1Zik7CisgICAgcmV0dXJuIGNzZXQ7CisgIAorICBw Y3NiYWRzdHI6CisgIAorISAgIHNwcmludGYoZXJybXNnLCAiQmFkIGNoYXJzZXQgc3ludGF4OiAl LipzXG4iLCBlcnJtc2dfc2l6ZSAtIDIyLCBzdHIpOworICAKKyAgcGNzZXJyb3I6CisgIAorLS0t IDE1MywxNjQgLS0tLQorICBwY3NjbGVhbnVwOgorICAKKyAgICBpZiAoY2J1ZikgZnJlZWJ1ZmZl cihjYnVmKTsKKysgICAvL2lmICh3c3RyKSBmcmVlKHdzdHIpOworICAgIHJldHVybiBjc2V0Owor ICAKKyAgcGNzYmFkc3RyOgorICAKKyEgICBzd3ByaW50ZihlcnJtc2csIGVycm1zZ19zaXplLCBM IkJhZCBjaGFyc2V0IHN5bnRheDogJS4qc1xuIiwgZXJybXNnX3NpemUgLSAyMiwgc3RyKTsKKyAg CisgIHBjc2Vycm9yOgorICAKKyoqKioqKioqKioqKioqKgorKioqIDE3MSwxODQgKioqKgorICB9 CisgIAorICAKKyEgaW50IGNzbWVtYmVyKGNoYXIgYywgY29uc3QgY2hhcnNldCAqY3NldCkKKyAg eworICAgIHJldHVybgorICAgICAgYXBwZWFyc2luKGMsIGNzZXQtPmlubGlzdCkgfHwKKyAgICAg ICggIWFwcGVhcnNpbihjLCBjc2V0LT5vdXRsaXN0KSAmJgorISAgICAgICAoIChjc2V0LT5mbGFn cyAmIENTX0xDQVNFICYmIGlzbG93ZXIoKih1bnNpZ25lZCBjaGFyICopJmMpKSB8fAorISAgICAg ICAgIChjc2V0LT5mbGFncyAmIENTX1VDQVNFICYmIGlzdXBwZXIoKih1bnNpZ25lZCBjaGFyICop JmMpKSB8fAorISAgICAgICAgIChjc2V0LT5mbGFncyAmIENTX0RJR0lUICYmIGlzZGlnaXQoKih1 bnNpZ25lZCBjaGFyICopJmMpKSB8fAorICAgICAgICAgIChjc2V0LT5mbGFncyAmIENTX05VTCAg ICYmICFjICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAgICkgKTsKKyAgfQorICAKKy0tLSAx NzYsMTg5IC0tLS0KKyAgfQorICAKKyAgCishIGludCBjc21lbWJlcih3Y2hhcl90IGMsIGNvbnN0 IGNoYXJzZXQgKmNzZXQpCisgIHsKKyAgICByZXR1cm4KKyAgICAgIGFwcGVhcnNpbihjLCBjc2V0 LT5pbmxpc3QpIHx8CisgICAgICAoICFhcHBlYXJzaW4oYywgY3NldC0+b3V0bGlzdCkgJiYKKyEg ICAgICAgICAoIChjc2V0LT5mbGFncyAmIENTX0xDQVNFICYmIGlzd2xvd2VyKCood2ludF90ICop JmMpKSB8fAorISAgICAgICAgICAgKGNzZXQtPmZsYWdzICYgQ1NfVUNBU0UgJiYgaXN3dXBwZXIo Kih3aW50X3QgKikmYykpIHx8CishICAgICAgICAgICAoY3NldC0+ZmxhZ3MgJiBDU19ESUdJVCAm JiBpc3dkaWdpdCgqKHdpbnRfdCAqKSZjKSkgfHwKKyAgICAgICAgICAoY3NldC0+ZmxhZ3MgJiBD U19OVUwgICAmJiAhYyAgICAgICAgICAgICAgICAgICAgICAgICAgICkgICApICk7CisgIH0KKyAg CisqKioqKioqKioqKioqKioKKyoqKiAxOTEsMjA2ICoqKioKKyAgeworICAgIGNoYXJzZXQgKmNz dTsKKyAgICBidWZmZXIgKmluYnVmID0gTlVMTCwgKm91dGJ1ZiA9IE5VTEw7CishICAgY2hhciAq bGlzdHNbNF0sICoqbGlzdCwgKnAsIG51bGxjaGFyID0gJ1wwJzsKKyAgCisgICAgY3N1ID0gbWFs bG9jKHNpemVvZiAoY2hhcnNldCkpOworICAgIGlmICghY3N1KSB7CishICAgICBzdHJjcHkoZXJy bXNnLG91dG9mbWVtKTsKKyAgICAgIGdvdG8gY3N1ZGVycm9yOworICAgIH0KKyEgICBpbmJ1ZiA9 IG5ld2J1ZmZlcihzaXplb2YgKGNoYXIpLCBlcnJtc2cpOworICAgIGlmICgqZXJybXNnKSBnb3Rv IGNzdWRlcnJvcjsKKyEgICBvdXRidWYgPSBuZXdidWZmZXIoc2l6ZW9mIChjaGFyKSwgZXJybXNn KTsKKyAgICBpZiAoKmVycm1zZykgZ290byBjc3VkZXJyb3I7CisgICAgY3N1LT5pbmxpc3QgPSBj c3UtPm91dGxpc3QgPSBOVUxMOworICAgIGNzdS0+ZmxhZ3MgPSAgdSAgPyAgY3NldDEtPmZsYWdz IHwgIGNzZXQyLT5mbGFncworLS0tIDE5NiwyMTEgLS0tLQorICB7CisgICAgY2hhcnNldCAqY3N1 OworICAgIGJ1ZmZlciAqaW5idWYgPSBOVUxMLCAqb3V0YnVmID0gTlVMTDsKKyEgICB3Y2hhcl90 ICpsaXN0c1s0XSwgKipsaXN0LCAqcCwgbnVsbGNoYXIgPSBMJ1wwJzsKKyAgCisgICAgY3N1ID0g bWFsbG9jKHNpemVvZiAoY2hhcnNldCkpOworICAgIGlmICghY3N1KSB7CishICAgICB3Y3NjcHko ZXJybXNnLG91dG9mbWVtKTsKKyAgICAgIGdvdG8gY3N1ZGVycm9yOworICAgIH0KKyEgICBpbmJ1 ZiA9IG5ld2J1ZmZlcihzaXplb2YgKHdjaGFyX3QpLCBlcnJtc2cpOworICAgIGlmICgqZXJybXNn KSBnb3RvIGNzdWRlcnJvcjsKKyEgICBvdXRidWYgPSBuZXdidWZmZXIoc2l6ZW9mICh3Y2hhcl90 KSwgZXJybXNnKTsKKyAgICBpZiAoKmVycm1zZykgZ290byBjc3VkZXJyb3I7CisgICAgY3N1LT5p bmxpc3QgPSBjc3UtPm91dGxpc3QgPSBOVUxMOworICAgIGNzdS0+ZmxhZ3MgPSAgdSAgPyAgY3Nl dDEtPmZsYWdzIHwgIGNzZXQyLT5mbGFncworZGlmZiAtYyAuL2NoYXJzZXQuaCAuLi9QYXIxNTIt dW5pY29kZS9jaGFyc2V0LmgKKyoqKiAuL2NoYXJzZXQuaAkyMDAxLTAzLTA5IDAzOjUwOjM1LjAw MDAwMDAwMCArMDMwMAorLS0tIC4uL1BhcjE1Mi11bmljb2RlL2NoYXJzZXQuaAkyMDE5LTEwLTI2 IDE3OjIxOjA4LjU0NDA1MDg1MyArMDMwMAorKioqKioqKioqKioqKioqCisqKiogMSw5ICoqKioK KyEgLyoqKioqKioqKioqKioqKioqKioqKi8KKyEgLyogY2hhcnNldC5oICAgICAgICAgKi8KKyEg LyogZm9yIFBhciAxLjUyICAgICAgKi8KKyEgLyogQ29weXJpZ2h0IDIwMDEgYnkgKi8KKyEgLyog QWRhbSBNLiBDb3N0ZWxsbyAgKi8KKyEgLyoqKioqKioqKioqKioqKioqKioqKi8KKyAgCisgIC8q IFRoaXMgaXMgQU5TSSBDIGNvZGUgKEM4OSkuICovCisgIAorLS0tIDEsMTEgLS0tLQorISAvKioq KioqKioqKioqKioqKioqKioqKiovCishIC8qIGNoYXJzZXQuaCAgICAgICAgICAgKi8KKyEgLyog Zm9yIFBhciAxLjUyLWkxOG4uNCAqLworISAvKiBDb3B5cmlnaHQgMjAwMSBieSAgICovCishIC8q IEFkYW0gTS4gQ29zdGVsbG8gICAgKi8KKyEgLyogTW9kaWZpZWQgYnkgICAgICAgICAqLworISAv KiBKw6lyw7RtZSBQb3VpbGxlciAgICAgKi8KKyEgLyoqKioqKioqKioqKioqKioqKioqKioqLwor ICAKKyAgLyogVGhpcyBpcyBBTlNJIEMgY29kZSAoQzg5KS4gKi8KKyAgCisqKioqKioqKioqKioq KioKKyoqKiAxMSwyNCAqKioqCisgIC8qIE5vdGU6IFRob3NlIGZ1bmN0aW9ucyBkZWNsYXJlZCBo ZXJlIHdoaWNoIGRvIG5vdCB1c2UgZXJybXNnICAgICovCisgIC8qIGFsd2F5cyBzdWNjZWVkLCBw cm92aWRlZCB0aGF0IHRoZXkgYXJlIHBhc3NlZCB2YWxpZCBhcmd1bWVudHMuICovCisgIAorISAK KyAgI2luY2x1ZGUgImVycm1zZy5oIgorICAKKyAgCisgIHR5cGVkZWYgc3RydWN0IGNoYXJzZXQg Y2hhcnNldDsKKyAgCisgIAorISBjaGFyc2V0ICpwYXJzZWNoYXJzZXQoY29uc3QgY2hhciAqc3Ry LCBlcnJtc2dfdCBlcnJtc2cpOworICAKKyAgICAvKiBwYXJzZWNoYXJzZXQoc3RyLGVycm1zZykg cmV0dXJucyB0aGUgc2V0IG9mIGNoYXJhY3RlcnMgZGVmaW5lZCBieSAqLworICAgIC8qIHN0ciB1 c2luZyBjaGFyc2V0IHN5bnRheCAoc2VlIHBhci5kb2MpLiAgUmV0dXJucyBOVUxMIG9uIGZhaWx1 cmUuICovCistLS0gMTMsMjYgLS0tLQorICAvKiBOb3RlOiBUaG9zZSBmdW5jdGlvbnMgZGVjbGFy ZWQgaGVyZSB3aGljaCBkbyBub3QgdXNlIGVycm1zZyAgICAqLworICAvKiBhbHdheXMgc3VjY2Vl ZCwgcHJvdmlkZWQgdGhhdCB0aGV5IGFyZSBwYXNzZWQgdmFsaWQgYXJndW1lbnRzLiAqLworICAK KyEgI2luY2x1ZGUgPHdjaGFyLmg+CisgICNpbmNsdWRlICJlcnJtc2cuaCIKKyAgCisgIAorICB0 eXBlZGVmIHN0cnVjdCBjaGFyc2V0IGNoYXJzZXQ7CisgIAorICAKKyEgY2hhcnNldCAqcGFyc2Vj aGFyc2V0KGNvbnN0IHdjaGFyX3QgKnN0ciwgZXJybXNnX3QgZXJybXNnKTsKKyAgCisgICAgLyog cGFyc2VjaGFyc2V0KHN0cixlcnJtc2cpIHJldHVybnMgdGhlIHNldCBvZiBjaGFyYWN0ZXJzIGRl ZmluZWQgYnkgKi8KKyAgICAvKiBzdHIgdXNpbmcgY2hhcnNldCBzeW50YXggKHNlZSBwYXIuZG9j KS4gIFJldHVybnMgTlVMTCBvbiBmYWlsdXJlLiAqLworKioqKioqKioqKioqKioqCisqKiogMzAs MzYgKioqKgorICAgIC8qICpjc2V0LiAgY3NldCBtYXkgbm90IGJlIHVzZWQgYWZ0ZXIgdGhpcyBj YWxsLiAgICAgICovCisgIAorICAKKyEgaW50IGNzbWVtYmVyKGNoYXIgYywgY29uc3QgY2hhcnNl dCAqY3NldCk7CisgIAorICAgIC8qIGNzbWVtYmVyKGMsY3NldCkgcmV0dXJucyAxIGlmIGMgaXMg YSBtZW1iZXIgb2YgKmNzZXQsIDAgb3RoZXJ3aXNlLiAqLworICAKKy0tLSAzMiwzOCAtLS0tCisg ICAgLyogKmNzZXQuICBjc2V0IG1heSBub3QgYmUgdXNlZCBhZnRlciB0aGlzIGNhbGwuICAgICAg Ki8KKyAgCisgIAorISBpbnQgY3NtZW1iZXIod2NoYXJfdCBjLCBjb25zdCBjaGFyc2V0ICpjc2V0 KTsKKyAgCisgICAgLyogY3NtZW1iZXIoYyxjc2V0KSByZXR1cm5zIDEgaWYgYyBpcyBhIG1lbWJl ciBvZiAqY3NldCwgMCBvdGhlcndpc2UuICovCisgIAorZGlmZiAtYyAuL2Vycm1zZy5jIC4uL1Bh cjE1Mi11bmljb2RlL2Vycm1zZy5jCisqKiogLi9lcnJtc2cuYwkyMDAxLTAzLTA5IDAzOjUwOjQ2 LjAwMDAwMDAwMCArMDMwMAorLS0tIC4uL1BhcjE1Mi11bmljb2RlL2Vycm1zZy5jCTIwMTktMTAt MjYgMTc6MjE6MDguNTQ1MDUwODUzICswMzAwCisqKioqKioqKioqKioqKioKKyoqKiAxLDkgKioq KgorISAvKioqKioqKioqKioqKioqKioqKioqLworISAvKiBlcnJtc2cuYyAgICAgICAgICAqLwor ISAvKiBmb3IgUGFyIDEuNTIgICAgICAqLworISAvKiBDb3B5cmlnaHQgMjAwMSBieSAqLworISAv KiBBZGFtIE0uIENvc3RlbGxvICAqLworISAvKioqKioqKioqKioqKioqKioqKioqLworICAKKyAg LyogVGhpcyBpcyBBTlNJIEMgY29kZSAoQzg5KS4gKi8KKyAgCistLS0gMSwxMSAtLS0tCishIC8q KioqKioqKioqKioqKioqKioqKioqKi8KKyEgLyogZXJybXNnLmMgICAgICAgICAgICAqLworISAv KiBmb3IgUGFyIDEuNTItaTE4bi40ICovCishIC8qIENvcHlyaWdodCAyMDAxIGJ5ICAgKi8KKyEg LyogQWRhbSBNLiBDb3N0ZWxsbyAgICAqLworISAvKiBNb2RpZmllZCBieSAgICAgICAgICovCish IC8qIErDqXLDtG1lIFBvdWlsbGVyICAgICAqLworISAvKioqKioqKioqKioqKioqKioqKioqKiov CisgIAorICAvKiBUaGlzIGlzIEFOU0kgQyBjb2RlIChDODkpLiAqLworICAKKyoqKioqKioqKioq KioqKgorKioqIDExLDE4ICoqKioKKyAgI2luY2x1ZGUgImVycm1zZy5oIiAgLyogTWFrZXMgc3Vy ZSB3ZSdyZSBjb25zaXN0ZW50IHdpdGggdGhlIGRlY2xhcmF0aW9ucy4gKi8KKyAgCisgIAorISBj b25zdCBjaGFyICogY29uc3Qgb3V0b2ZtZW0gPQorISAgICJPdXQgb2YgbWVtb3J5LlxuIjsKKyAg CishIGNvbnN0IGNoYXIgKiBjb25zdCBpbXBvc3NpYmlsaXR5ID0KKyEgICAiSW1wb3NzaWJpbGl0 eSAjJWQgaGFzIG9jY3VycmVkLiAgUGxlYXNlIHJlcG9ydCBpdC5cbiI7CistLS0gMTMsMjMgLS0t LQorICAjaW5jbHVkZSAiZXJybXNnLmgiICAvKiBNYWtlcyBzdXJlIHdlJ3JlIGNvbnNpc3RlbnQg d2l0aCB0aGUgZGVjbGFyYXRpb25zLiAqLworICAKKyAgCishIGNvbnN0IHdjaGFyX3QgKiBjb25z dCBvdXRvZm1lbSA9CishICAgTCJPdXQgb2YgbWVtb3J5LlxuIjsKKyAgCishIGNvbnN0IHdjaGFy X3QgKiBjb25zdCBtYnNlcnJvciA9CishICAgTCJFcnJvciBpbiBpbnB1dCBtdWx0aWJ5dGUgc3Ry aW5nLlxuIjsKKyEgCishIGNvbnN0IHdjaGFyX3QgKiBjb25zdCBpbXBvc3NpYmlsaXR5ID0KKyEg ICBMIkltcG9zc2liaWxpdHkgIyVkIGhhcyBvY2N1cnJlZC4gIFBsZWFzZSByZXBvcnQgaXQuXG4i OworZGlmZiAtYyAuL2Vycm1zZy5oIC4uL1BhcjE1Mi11bmljb2RlL2Vycm1zZy5oCisqKiogLi9l cnJtc2cuaAkyMDAxLTAzLTA5IDAzOjUwOjU2LjAwMDAwMDAwMCArMDMwMAorLS0tIC4uL1BhcjE1 Mi11bmljb2RlL2Vycm1zZy5oCTIwMTktMTAtMjYgMTc6MjE6MDguNTQ1MDUwODUzICswMzAwCisq KioqKioqKioqKioqKioKKyoqKiAxLDkgKioqKgorISAvKioqKioqKioqKioqKioqKioqKioqLwor ISAvKiBlcnJtc2cuaCAgICAgICAgICAqLworISAvKiBmb3IgUGFyIDEuNTIgICAgICAqLworISAv KiBDb3B5cmlnaHQgMjAwMSBieSAqLworISAvKiBBZGFtIE0uIENvc3RlbGxvICAqLworISAvKioq KioqKioqKioqKioqKioqKioqLworICAKKyAgLyogVGhpcyBpcyBBTlNJIEMgY29kZSAoQzg5KS4g Ki8KKyAgCistLS0gMSwxMSAtLS0tCishIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKyEgLyog ZXJybXNnLmggICAgICAgICAgICAqLworISAvKiBmb3IgUGFyIDEuNTItaTE4bi40ICovCishIC8q IENvcHlyaWdodCAyMDAxIGJ5ICAgKi8KKyEgLyogQWRhbSBNLiBDb3N0ZWxsbyAgICAqLworISAv KiBNb2RpZmllZCBieSAgICAgICAgICovCishIC8qIErDqXLDtG1lIFBvdWlsbGVyICAgICAqLwor ISAvKioqKioqKioqKioqKioqKioqKioqKiovCisgIAorICAvKiBUaGlzIGlzIEFOU0kgQyBjb2Rl IChDODkpLiAqLworICAKKyoqKioqKioqKioqKioqKgorKioqIDExLDE3ICoqKioKKyAgI2lmbmRl ZiBFUlJNU0dfSAorICAjZGVmaW5lIEVSUk1TR19ICisgIAorISAKKyAgI2RlZmluZSBlcnJtc2df c2l6ZSAxNjMKKyAgCisgIC8qIFRoaXMgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3Rl cnMgdGhhdCB3aWxsICAqLworLS0tIDEzLDE5IC0tLS0KKyAgI2lmbmRlZiBFUlJNU0dfSAorICAj ZGVmaW5lIEVSUk1TR19ICisgIAorISAjaW5jbHVkZSA8d2NoYXIuaD4KKyAgI2RlZmluZSBlcnJt c2dfc2l6ZSAxNjMKKyAgCisgIC8qIFRoaXMgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNoYXJh Y3RlcnMgdGhhdCB3aWxsICAqLworKioqKioqKioqKioqKioqCisqKiogMjAsMjYgKioqKgorICAv KiB2ZXJzaW9ucyBvZiB0aGlzIGhlYWRlciBmaWxlLiAgICAgICAgICAgICAgICAgICAgICAgKi8K KyAgCisgIAorISB0eXBlZGVmIGNoYXIgZXJybXNnX3RbZXJybXNnX3NpemVdOworICAKKyAgLyog QW55IGZ1bmN0aW9uIHdoaWNoIHRha2VzIHRoZSBhcmd1bWVudCBlcnJtc2dfdCBlcnJtc2cgbXVz dCwgYmVmb3JlICovCisgIC8qIHJldHVybmluZywgZWl0aGVyIHNldCBlcnJtc2dbMF0gdG8gJ1ww JyAoaW5kaWNhdGluZyBzdWNjZXNzKSwgb3IgICAqLworLS0tIDIyLDI4IC0tLS0KKyAgLyogdmVy c2lvbnMgb2YgdGhpcyBoZWFkZXIgZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICovCisgIAor ICAKKyEgdHlwZWRlZiB3Y2hhcl90IGVycm1zZ190W2Vycm1zZ19zaXplXTsKKyAgCisgIC8qIEFu eSBmdW5jdGlvbiB3aGljaCB0YWtlcyB0aGUgYXJndW1lbnQgZXJybXNnX3QgZXJybXNnIG11c3Qs IGJlZm9yZSAqLworICAvKiByZXR1cm5pbmcsIGVpdGhlciBzZXQgZXJybXNnWzBdIHRvICdcMCcg KGluZGljYXRpbmcgc3VjY2VzcyksIG9yICAgKi8KKyoqKioqKioqKioqKioqKgorKioqIDI4LDM3 ICoqKioKKyAgLyogYmVpbmcgY2FyZWZ1bCBub3QgdG8gb3ZlcnJ1biB0aGUgc3BhY2UuICAgICAg ICAgICAgICAgICAgICAgICAgICAgICovCisgIAorICAKKyEgZXh0ZXJuIGNvbnN0IGNoYXIgKiBj b25zdCBvdXRvZm1lbTsKKyAgICAvKiAiT3V0IG9mIG1lbW9yeS5cbiIgKi8KKyAgCishIGV4dGVy biBjb25zdCBjaGFyICogY29uc3QgaW1wb3NzaWJpbGl0eTsKKyAgICAvKiAiSW1wb3NzaWJpbGl0 eSAjJWQgaGFzIG9jY3VycmVkLiAgUGxlYXNlIHJlcG9ydCBpdC5cbiIgKi8KKyAgCisgIAorLS0t IDMwLDQyIC0tLS0KKyAgLyogYmVpbmcgY2FyZWZ1bCBub3QgdG8gb3ZlcnJ1biB0aGUgc3BhY2Uu ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIAorICAKKyEgZXh0ZXJuIGNvbnN0IHdj aGFyX3QgKiBjb25zdCBvdXRvZm1lbTsKKyAgICAvKiAiT3V0IG9mIG1lbW9yeS5cbiIgKi8KKyAg CishIGV4dGVybiBjb25zdCB3Y2hhcl90ICogY29uc3QgbWJzZXJyb3I7CishICAgLyogIkVycm9y IGluIGlucHV0IG11bHRpYnl0ZSBzdHJpbmcuXG4iICovCishICAgCishIGV4dGVybiBjb25zdCB3 Y2hhcl90ICogY29uc3QgaW1wb3NzaWJpbGl0eTsKKyAgICAvKiAiSW1wb3NzaWJpbGl0eSAjJWQg aGFzIG9jY3VycmVkLiAgUGxlYXNlIHJlcG9ydCBpdC5cbiIgKi8KKyAgCisgIAorZGlmZiAtYyAu L3Bhci4xIC4uL1BhcjE1Mi11bmljb2RlL3Bhci4xCisqKiogLi9wYXIuMQkyMDAxLTA0LTMwIDAx OjE2OjIyLjAwMDAwMDAwMCArMDQwMAorLS0tIC4uL1BhcjE1Mi11bmljb2RlL3Bhci4xCTIwMTkt MTAtMjYgMTc6MjE6MDguNTQ2MDUwODUzICswMzAwCisqKioqKioqKioqKioqKioKKyoqKiAxLDYg KioqKgorICAuXCIqKioqKioqKioqKioqKioqKioqKioKKyAgLlwiKiBwYXIuMSAgICAgICAgICAg ICAqCishIC5cIiogZm9yIFBhciAxLjUyICAgICAgKgorICAuXCIqIENvcHlyaWdodCAyMDAxIGJ5 ICoKKyAgLlwiKiBBZGFtIE0uIENvc3RlbGxvICAqCisgIC5cIioqKioqKioqKioqKioqKioqKioq KgorLS0tIDEsNiAtLS0tCisgIC5cIioqKioqKioqKioqKioqKioqKioqKgorICAuXCIqIHBhci4x ICAgICAgICAgICAgICoKKyEgLlwiKiBmb3IgUGFyIDEuNTIgaTE4biAqCisgIC5cIiogQ29weXJp Z2h0IDIwMDEgYnkgKgorICAuXCIqIEFkYW0gTS4gQ29zdGVsbG8gICoKKyAgLlwiKioqKioqKioq KioqKioqKioqKioqCitkaWZmIC1jIC4vcGFyLmMgLi4vUGFyMTUyLXVuaWNvZGUvcGFyLmMKKyoq KiAuL3Bhci5jCTIwMDEtMDQtMDIgMDg6MjU6NTcuMDAwMDAwMDAwICswNDAwCistLS0gLi4vUGFy MTUyLXVuaWNvZGUvcGFyLmMJMjAxOS0xMC0yNiAxNzoyMTowOC41NDcwNTA4NTMgKzAzMDAKKyoq KioqKioqKioqKioqKgorKioqIDEsOSAqKioqCishIC8qKioqKioqKioqKioqKioqKioqKiovCish IC8qIHBhci5jICAgICAgICAgICAgICovCishIC8qIGZvciBQYXIgMS41MiAgICAgICovCishIC8q IENvcHlyaWdodCAyMDAxIGJ5ICovCishIC8qIEFkYW0gTS4gQ29zdGVsbG8gICovCishIC8qKioq KioqKioqKioqKioqKioqKiovCisgIAorICAvKiBUaGlzIGlzIEFOU0kgQyBjb2RlIChDODkpLiAq LworICAKKy0tLSAxLDExIC0tLS0KKyEgLyoqKioqKioqKioqKioqKioqKioqKioqLworISAvKiBw YXIuYyAgICAgICAgICAgICAgICovCishIC8qIGZvciBQYXIgMS41Mi1pMThuLjQgKi8KKyEgLyog Q29weXJpZ2h0IDIwMDEgYnkgICAqLworISAvKiBBZGFtIE0uIENvc3RlbGxvICAgICovCishIC8q IE1vZGlmaWVkIGJ5ICAgICAgICAgKi8KKyEgLyogSsOpcsO0bWUgUG91aWxsZXIgICAgICovCish IC8qKioqKioqKioqKioqKioqKioqKioqKi8KKyAgCisgIC8qIFRoaXMgaXMgQU5TSSBDIGNvZGUg KEM4OSkuICovCisgIAorKioqKioqKioqKioqKioqCisqKiogMTIsMjIgKioqKgorICAjaW5jbHVk ZSAiYnVmZmVyLmgiICAgIC8qIEFsc28gaW5jbHVkZXMgPHN0ZGRlZi5oPi4gKi8KKyAgI2luY2x1 ZGUgInJlZm9ybWF0LmgiCisgIAorISAjaW5jbHVkZSA8Y3R5cGUuaD4KKyAgI2luY2x1ZGUgPGxv Y2FsZS5oPgorICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICAj aW5jbHVkZSA8c3RyaW5nLmg+CisgIAorICAjdW5kZWYgTlVMTAorICAjZGVmaW5lIE5VTEwgKCh2 b2lkICopIDApCistLS0gMTQsMjcgLS0tLQorICAjaW5jbHVkZSAiYnVmZmVyLmgiICAgIC8qIEFs c28gaW5jbHVkZXMgPHN0ZGRlZi5oPi4gKi8KKyAgI2luY2x1ZGUgInJlZm9ybWF0LmgiCisgIAor ISAjaW5jbHVkZSA8bGFuZ2luZm8uaD4KKyEgI2luY2x1ZGUgPHdjaGFyLmg+CishICNpbmNsdWRl IDx3Y3R5cGUuaD4KKyAgI2luY2x1ZGUgPGxvY2FsZS5oPgorICAjaW5jbHVkZSA8c3RkaW8uaD4K KyAgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICAjaW5jbHVkZSA8c3RyaW5nLmg+CisrICNpbmNsdWRl IDxlcnJuby5oPgorICAKKyAgI3VuZGVmIE5VTEwKKyAgI2RlZmluZSBOVUxMICgodm9pZCAqKSAw KQorKioqKioqKioqKioqKioqCisqKiogMjUsODAgKioqKgorICAjZGVmaW5lIGZyZWUocHRyKQor ICAjZW5kaWYKKyAgCistIAorLSAvKj09PQorLSAKKy0gUmVnYXJkaW5nIGNoYXIgYW5kIHVuc2ln bmVkIGNoYXI6ICBBTlNJIEMgaXMgYSBuaWdodG1hcmUgaW4gdGhpcworLSByZXNwZWN0LiAgU29t ZSBmdW5jdGlvbnMsIGxpa2UgcHV0cygpLCBzdHJjaHIoKSwgYW5kIGdldGVudigpLCB1c2UgY2hh cgorLSBvciBjaGFyKiwgc28gdGhleSB3b3JrIHdlbGwgd2l0aCBjaGFyYWN0ZXIgY29uc3RhbnRz IGxpa2UgJ2EnLCB3aGljaAorLSBhcmUgY2hhciwgYW5kIHdpdGggYXJndiwgd2hpY2ggaXMgY2hh cioqLiAgQnV0IHNldmVyYWwgb3RoZXIgZnVuY3Rpb25zLAorLSBsaWtlIGdldGNoYXIoKSwgcHV0 Y2hhcigpLCBhbmQgaXNkaWdpdCgpLCB1c2UgdW5zaWduZWQgY2hhciAoY29udmVydGVkCistIHRv L2Zyb20gaW50KS4gIFRoZXJlZm9yZSBpbm5vY2VudC1sb29raW5nIGNvZGUgY2FuIGJlIHdyb25n LCBmb3IKKy0gZXhhbXBsZToKKy0gCistICAgICBpbnQgYyA9IGdldGNoYXIoKTsKKy0gICAgIGlm IChjID09ICdhJykgLi4uCistIAorLSBUaGlzIGlzIHdyb25nIGJlY2F1c2UgJ2EnIGlzIGNoYXIg KGNvbnZlcnRlZCB0byBpbnQpIGFuZCBjb3VsZCBiZQorLSBuZWdhdGl2ZSwgYnV0IGdldGNoYXIo KSByZXR1cm5zIHVuc2lnbmVkIGNoYXIgKGNvbnZlcnRlZCB0byBpbnQpLCBzbyBjCistIGlzIGFs d2F5cyBub25uZWdhdGl2ZSBvciBFT0YuICBGb3Igc2ltaWxhciByZWFzb25zLCBpdCBpcyB3cm9u ZyB0byBwYXNzCistIGEgY2hhciB0byBhIGZ1bmN0aW9uIHRoYXQgZXhwZWN0cyBhbiB1bnNpZ25l ZCBjaGFyOgorLSAKKy0gICAgIHB1dGNoYXIoJ1xuJyk7CistICAgICBpZiAoaXNkaWdpdChhcmd2 WzFdWzBdKSkgLi4uCistIAorLSBJbmV2aXRhYmx5LCB3ZSBuZWVkIHRvIGNvbnZlcnQgYmV0d2Vl biBjaGFyIGFuZCB1bnNpZ25lZCBjaGFyLiAgVGhpcyBjYW4KKy0gYmUgZG9uZSBieSBpbnRlZ3Jh bCBjb252ZXJzaW9uIChjYXN0aW5nIG9yIGFzc2lnbmluZyBhIGNoYXIgdG8gdW5zaWduZWQKKy0g Y2hhciBvciB2aWNlIHZlcnNhKSwgb3IgYnkgYWxpYXNpbmcgKGNvbnZlcnRpbmcgYSBwb2ludGVy IHRvIGNoYXIgdG8KKy0gYSBwb2ludGVyIHRvIHVuc2lnbmVkIGNoYXIgKG9yIHZpY2UgdmVyc2Ep IGFuZCB0aGVuIGRlcmVmZXJlbmNpbmcKKy0gaXQpLiAgQU5TSSBDIHJlcXVpcmVzIHRoYXQgaW50 ZWdyYWwgY29udmVyc2lvbiBhbHRlcnMgdGhlIGJpdHMgd2hlbiB0aGUKKy0gdW5zaWduZWQgdmFs dWUgaXMgbm90IHJlcHJlc2VudGFibGUgaW4gdGhlIHNpZ25lZCB0eXBlIGFuZCB0aGUgc2lnbmVk CistIHR5cGUgZG9lcyBub3QgdXNlIHR3bydzIGNvbXBsZW1lbnQgcmVwcmVzZW50YXRpb24uICBB bGlhc2luZywgb24gdGhlCistIG90aGVyIGhhbmQsIHByZXNlcnZlcyB0aGUgYml0cy4gIEFsdGhv dWdoIHRoZSBDIHN0YW5kYXJkIGlzIG5vdCBhdCBhbGwKKy0gY2xlYXIgYWJvdXQgd2hpY2ggc29y dCBvZiBjb252ZXJzaW9uIGlzIGFwcHJvcHJpYXRlIGZvciBtYWtpbmcgdGhlCistIHN0YW5kYXJk IGxpYnJhcnkgZnVuY3Rpb25zIGludGVyb3BlcmF0ZSwgSSB0aGluayBwcmVzZXJ2aW5nIHRoZSBi aXRzCistIGlzIHdoYXQgaXMgbmVlZGVkLiAgVW5kZXIgdGhhdCBhc3N1bXB0aW9uLCBoZXJlIGFy ZSBzb21lIGV4YW1wbGVzIG9mCistIGNvcnJlY3QgY29kZToKKy0gCistICAgICBpbnQgYyA9IGdl dGNoYXIoKTsKKy0gICAgIGNoYXIgY2g7CistIAorLSAgICAgaWYgKGMgIT0gRU9GKSB7CistICAg ICAgICoodW5zaWduZWQgY2hhciAqKSZjaCA9IGM7CistICAgICAgIGlmIChjaCA9PSAnYScpIC4u LgorLSAgICAgICBpZiAoaXNkaWdpdChjKSkgLi4uCistICAgICB9CistIAorLSAgICAgY2hhciAq cyA9IC4uLgorLSAgICAgaWYgKGlzZGlnaXQoKih1bnNpZ25lZCBjaGFyICopcykpIC4uLgorLSAK Ky0gPT09Ki8KKy0gCistIAorICBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHVzYWdlbXNnID0K KyAgIlxuIgorICAiT3B0aW9ucyBmb3IgcGFyOlxuIgorLS0tIDMwLDM1IC0tLS0KKyoqKioqKioq KioqKioqKgorKioqIDEyNiwxMzIgKioqKgorICAgICAgICAgICAgICAgICAgICAvKiBsaW5lLCBv ciB0aGUgZmFsbGJhY2sgcHJlbGVuIGFuZCBzdWZsZW4gICAgICAgKi8KKyAgICAgICAgICAgICAg ICAgICAgLyogb2YgdGhlIElQIGNvbnRhaW5pbmcgYSBub24tYm9kaWxlc3MgbGluZS4gICAgICov CisgICAgbGZsYWdfdCBmbGFnczsgIC8qIEJvb2xlYW4gcHJvcGVydGllcyAoc2VlIGJlbG93KS4g ICAgICAgICAgICAgICAqLworISAgIGNoYXIgcmM7ICAgICAgICAvKiBUaGUgcmVwZWF0ZWQgY2hh cmFjdGVyIG9mIGEgYm9kaWxlc3MgbGluZS4gICAgKi8KKyAgfSBsaW5lcHJvcDsKKyAgCisgIC8q IEZsYWdzIGZvciBtYXJraW5nIGJvb2xlYW4gcHJvcGVydGllczogKi8KKy0tLSA4MSw4NyAtLS0t CisgICAgICAgICAgICAgICAgICAgIC8qIGxpbmUsIG9yIHRoZSBmYWxsYmFjayBwcmVsZW4gYW5k IHN1ZmxlbiAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAvKiBvZiB0aGUgSVAgY29udGFp bmluZyBhIG5vbi1ib2RpbGVzcyBsaW5lLiAgICAgKi8KKyAgICBsZmxhZ190IGZsYWdzOyAgLyog Qm9vbGVhbiBwcm9wZXJ0aWVzIChzZWUgYmVsb3cpLiAgICAgICAgICAgICAgICovCishICAgd2No YXJfdCByYzsgICAgIC8qIFRoZSByZXBlYXRlZCBjaGFyYWN0ZXIgb2YgYSBib2RpbGVzcyBsaW5l LiAgICAqLworICB9IGxpbmVwcm9wOworICAKKyAgLyogRmxhZ3MgZm9yIG1hcmtpbmcgYm9vbGVh biBwcm9wZXJ0aWVzOiAqLworKioqKioqKioqKioqKioqCisqKiogMTQzLDE1NiAqKioqCisgICNk ZWZpbmUgICBpc3ZhY2FudChwcm9wKSAoaXNib2RpbGVzcyhwcm9wKSAmJiAocHJvcCktPnJjID09 ICcgJykKKyAgCisgIAorISBzdGF0aWMgaW50IGRpZ3RvaW50KGNoYXIgYykKKyAgCisgIC8qIFJl dHVybnMgdGhlIHZhbHVlIHJlcHJlc2VudGVkIGJ5IHRoZSBkaWdpdCBjLCBvciAtMSBpZiBjIGlz IG5vdCBhIGRpZ2l0LiAqLworICB7CishICAgY29uc3QgY2hhciAqcCwgKiBjb25zdCBkaWdpdHMg PSAiMDEyMzQ1Njc4OSI7CisgIAorICAgIGlmICghYykgcmV0dXJuIC0xOworISAgIHAgPSBzdHJj aHIoZGlnaXRzLGMpOworICAgIHJldHVybiAgcCAgPyAgcCAtIGRpZ2l0cyAgOiAgLTE7CisgIAor ICAgIC8qIFdlIGNhbid0IHNpbXBseSByZXR1cm4gYyAtICcwJyBiZWNhdXNlIHRoaXMgaXMgQU5T SSBDIGNvZGUsICAqLworLS0tIDk4LDExMSAtLS0tCisgICNkZWZpbmUgICBpc3ZhY2FudChwcm9w KSAoaXNib2RpbGVzcyhwcm9wKSAmJiAocHJvcCktPnJjID09ICcgJykKKyAgCisgIAorISBzdGF0 aWMgaW50IGRpZ3RvaW50KHdjaGFyX3QgYykKKyAgCisgIC8qIFJldHVybnMgdGhlIHZhbHVlIHJl cHJlc2VudGVkIGJ5IHRoZSBkaWdpdCBjLCBvciAtMSBpZiBjIGlzIG5vdCBhIGRpZ2l0LiAqLwor ICB7CishICAgY29uc3Qgd2NoYXJfdCAqcCwgKiBjb25zdCBkaWdpdHMgPSBMIjAxMjM0NTY3ODki OworICAKKyAgICBpZiAoIWMpIHJldHVybiAtMTsKKyEgICBwID0gd2NzY2hyKGRpZ2l0cyxjKTsK KyAgICByZXR1cm4gIHAgID8gIHAgLSBkaWdpdHMgIDogIC0xOworICAKKyAgICAvKiBXZSBjYW4n dCBzaW1wbHkgcmV0dXJuIGMgLSAnMCcgYmVjYXVzZSB0aGlzIGlzIEFOU0kgQyBjb2RlLCAgKi8K KyoqKioqKioqKioqKioqKgorKioqIDE2MSwxNjcgKioqKgorICB9CisgIAorICAKKyEgc3RhdGlj IGludCBzdHJ0b3VkZWMoY29uc3QgY2hhciAqcywgaW50ICpwbikKKyAgCisgIC8qIENvbnZlcnRz IHRoZSBsb25nZXN0IHByZWZpeCBvZiBzdHJpbmcgcyBjb25zaXN0aW5nIG9mIGRlY2ltYWwgICAq LworICAvKiBkaWdpdHMgdG8gYW4gaW50ZWdlciwgd2hpY2ggaXMgc3RvcmVkIGluICpwbi4gIE5v cm1hbGx5IHJldHVybnMgKi8KKy0tLSAxMTYsMTIyIC0tLS0KKyAgfQorICAKKyAgCishIHN0YXRp YyBpbnQgc3RydG91ZGVjKGNvbnN0IHdjaGFyX3QgKnMsIGludCAqcG4pCisgIAorICAvKiBDb252 ZXJ0cyB0aGUgbG9uZ2VzdCBwcmVmaXggb2Ygc3RyaW5nIHMgY29uc2lzdGluZyBvZiBkZWNpbWFs ICAgKi8KKyAgLyogZGlnaXRzIHRvIGFuIGludGVnZXIsIHdoaWNoIGlzIHN0b3JlZCBpbiAqcG4u ICBOb3JtYWxseSByZXR1cm5zICovCisqKioqKioqKioqKioqKioKKyoqKiAxODcsMTkzICoqKioK KyAgCisgIAorICBzdGF0aWMgdm9pZCBwYXJzZWFyZygKKyEgICBjb25zdCBjaGFyICphcmcsIGlu dCAqcGhlbHAsIGludCAqcHZlcnNpb24sIGNoYXJzZXQgKmJvZHljaGFycywgY2hhcnNldAorICAg ICpwcm90ZWN0Y2hhcnMsIGNoYXJzZXQgKnF1b3RlY2hhcnMsIGludCAqcGhhbmcsIGludCAqcHBy ZWZpeCwgaW50ICpwcmVwZWF0LAorICAgIGludCAqcHN1ZmZpeCwgaW50ICpwVGFiLCBpbnQgKnB3 aWR0aCwgaW50ICpwYm9keSwgaW50ICpwY2FwLCBpbnQgKnBkaXYsIGludAorICAgICpwRXJyLCBp bnQgKnBleHBlbCwgaW50ICpwZml0LCBpbnQgKnBndWVzcywgaW50ICpwaW52aXMsIGludCAqcGp1 c3QsIGludAorLS0tIDE0MiwxNDggLS0tLQorICAKKyAgCisgIHN0YXRpYyB2b2lkIHBhcnNlYXJn KAorISAgIGNvbnN0IHdjaGFyX3QgKmFyZywgaW50ICpwaGVscCwgaW50ICpwdmVyc2lvbiwgY2hh cnNldCAqYm9keWNoYXJzLCBjaGFyc2V0CisgICAgKnByb3RlY3RjaGFycywgY2hhcnNldCAqcXVv dGVjaGFycywgaW50ICpwaGFuZywgaW50ICpwcHJlZml4LCBpbnQgKnByZXBlYXQsCisgICAgaW50 ICpwc3VmZml4LCBpbnQgKnBUYWIsIGludCAqcHdpZHRoLCBpbnQgKnBib2R5LCBpbnQgKnBjYXAs IGludCAqcGRpdiwgaW50CisgICAgKnBFcnIsIGludCAqcGV4cGVsLCBpbnQgKnBmaXQsIGludCAq cGd1ZXNzLCBpbnQgKnBpbnZpcywgaW50ICpwanVzdCwgaW50CisqKioqKioqKioqKioqKioKKyoq KiAxOTcsMjc0ICoqKioKKyAgLyogYnkgdGhlIG90aGVyIHBvaW50ZXJzIGFzIGFwcHJvcHJpYXRl LiAgKnBoZWxwIGFuZCAqcHZlcnNpb24gYXJlIGJvb2xlYW4gICovCisgIC8qIGZsYWdzIGluZGlj YXRpbmcgd2hldGhlciB0aGUgaGVscCBhbmQgdmVyc2lvbiBvcHRpb25zIHdlcmUgc3VwcGxpZWQu ICAgICAqLworICB7CishICAgY29uc3QgY2hhciAqc2F2ZWFyZyA9IGFyZzsKKyAgICBjaGFyc2V0 ICpjaGFycywgKmNoYW5nZTsKKyEgICBjaGFyIG9jOworICAgIGludCBuOworICAKKyAgICAqZXJy bXNnID0gJ1wwJzsKKyAgCishICAgaWYgKCphcmcgPT0gJy0nKSArK2FyZzsKKyEgCishICAgaWYg KCFzdHJjbXAoYXJnLCAiaGVscCIpKSB7CisgICAgICAqcGhlbHAgPSAxOworICAgICAgcmV0dXJu OworICAgIH0KKyAgCishICAgaWYgKCFzdHJjbXAoYXJnLCAidmVyc2lvbiIpKSB7CisgICAgICAq cHZlcnNpb24gPSAxOworICAgICAgcmV0dXJuOworICAgIH0KKyAgCishICAgaWYgKCphcmcgPT0g J0InIHx8ICphcmcgPT0gJ1AnIHx8ICphcmcgPT0gJ1EnICkgeworISAgICAgY2hhcnMgPSAgKmFy ZyA9PSAnQicgID8gIGJvZHljaGFycyAgICA6CishICAgICAgICAgICAgICAqYXJnID09ICdQJyAg PyAgcHJvdGVjdGNoYXJzIDoKKyEgICAgICAgICAgIC8qICphcmcgPT0gJ1EnICovICBxdW90ZWNo YXJzICAgOworICAgICAgKythcmc7CishICAgICBpZiAoKmFyZyAhPSAnPScgICYmICAqYXJnICE9 ICcrJyAgJiYgICphcmcgIT0gJy0nKSBnb3RvIGJhZGFyZzsKKyAgICAgIGNoYW5nZSA9IHBhcnNl Y2hhcnNldChhcmcgKyAxLCBlcnJtc2cpOworICAgICAgaWYgKGNoYW5nZSkgeworISAgICAgICBp ZiAgICAgICgqYXJnID09ICc9JykgICBjc3N3YXAoY2hhcnMsY2hhbmdlKTsKKyEgICAgICAgZWxz ZSBpZiAoKmFyZyA9PSAnKycpICAgY3NhZGQoY2hhcnMsY2hhbmdlLGVycm1zZyk7CishICAgICAg IGVsc2UgIC8qICphcmcgPT0gJy0nICovIGNzcmVtb3ZlKGNoYXJzLGNoYW5nZSxlcnJtc2cpOwor ICAgICAgICBmcmVlY2hhcnNldChjaGFuZ2UpOworICAgICAgfQorICAgICAgcmV0dXJuOworICAg IH0KKyAgCishICAgaWYgKGlzZGlnaXQoKih1bnNpZ25lZCBjaGFyICopYXJnKSkgeworICAgICAg aWYgKCFzdHJ0b3VkZWMoYXJnLCAmbikpIGdvdG8gYmFkYXJnOworICAgICAgaWYgKG4gPD0gOCkg KnBwcmVmaXggPSBuOworICAgICAgZWxzZSAqcHdpZHRoID0gbjsKKyAgICB9CisgIAorICAgIGZv ciAoOzspIHsKKyEgICAgIHdoaWxlIChpc2RpZ2l0KCoodW5zaWduZWQgY2hhciAqKWFyZykpICsr YXJnOworICAgICAgb2MgPSAqYXJnOworICAgICAgaWYgKCFvYykgYnJlYWs7CisgICAgICBuID0g LTE7CisgICAgICBpZiAoIXN0cnRvdWRlYygrK2FyZywgJm4pKSBnb3RvIGJhZGFyZzsKKyEgICAg IGlmICggICBvYyA9PSAnaCcgfHwgb2MgPT0gJ3AnIHx8IG9jID09ICdyJworISAgICAgICAgIHx8 IG9jID09ICdzJyB8fCBvYyA9PSAnVCcgfHwgb2MgPT0gJ3cnKSB7CishICAgICAgIGlmICAgICAg KG9jID09ICdoJykgICAqcGhhbmcgICA9ICBuID49IDAgPyBuIDogIDE7CishICAgICAgIGVsc2Ug aWYgKG9jID09ICdwJykgICAqcHByZWZpeCA9ICBuOworISAgICAgICBlbHNlIGlmIChvYyA9PSAn cicpICAgKnByZXBlYXQgPSAgbiA+PSAwID8gbiA6ICAzOworISAgICAgICBlbHNlIGlmIChvYyA9 PSAncycpICAgKnBzdWZmaXggPSAgbjsKKyEgICAgICAgZWxzZSBpZiAob2MgPT0gJ1QnKSAgICpw VGFiICAgID0gIG4gPj0gMCA/IG4gOiAgODsKKyEgICAgICAgZWxzZSAgLyogb2MgPT0gJ3cnICov ICpwd2lkdGggID0gIG4gPj0gMCA/IG4gOiA3OTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAg ICAgICBpZiAobiA8IDApIG4gPSAxOworICAgICAgICBpZiAobiA+IDEpIGdvdG8gYmFkYXJnOwor ISAgICAgICBpZiAgICAgIChvYyA9PSAnYicpICpwYm9keSAgID0gbjsKKyEgICAgICAgZWxzZSBp ZiAob2MgPT0gJ2MnKSAqcGNhcCAgICA9IG47CishICAgICAgIGVsc2UgaWYgKG9jID09ICdkJykg KnBkaXYgICAgPSBuOworISAgICAgICBlbHNlIGlmIChvYyA9PSAnRScpICpwRXJyICAgID0gbjsK KyEgICAgICAgZWxzZSBpZiAob2MgPT0gJ2UnKSAqcGV4cGVsICA9IG47CishICAgICAgIGVsc2Ug aWYgKG9jID09ICdmJykgKnBmaXQgICAgPSBuOworISAgICAgICBlbHNlIGlmIChvYyA9PSAnZycp ICpwZ3Vlc3MgID0gbjsKKyEgICAgICAgZWxzZSBpZiAob2MgPT0gJ2knKSAqcGludmlzICA9IG47 CishICAgICAgIGVsc2UgaWYgKG9jID09ICdqJykgKnBqdXN0ICAgPSBuOworISAgICAgICBlbHNl IGlmIChvYyA9PSAnbCcpICpwbGFzdCAgID0gbjsKKyEgICAgICAgZWxzZSBpZiAob2MgPT0gJ3En KSAqcHF1b3RlICA9IG47CishICAgICAgIGVsc2UgaWYgKG9jID09ICdSJykgKnBSZXBvcnQgPSBu OworISAgICAgICBlbHNlIGlmIChvYyA9PSAndCcpICpwdG91Y2ggID0gbjsKKyAgICAgICAgZWxz ZSBnb3RvIGJhZGFyZzsKKyAgICAgIH0KKyAgICB9CistLS0gMTUyLDIyOSAtLS0tCisgIC8qIGJ5 IHRoZSBvdGhlciBwb2ludGVycyBhcyBhcHByb3ByaWF0ZS4gICpwaGVscCBhbmQgKnB2ZXJzaW9u IGFyZSBib29sZWFuICAqLworICAvKiBmbGFncyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGhlbHAg YW5kIHZlcnNpb24gb3B0aW9ucyB3ZXJlIHN1cHBsaWVkLiAgICAgKi8KKyAgeworISAgIGNvbnN0 IHdjaGFyX3QgKnNhdmVhcmcgPSBhcmc7CisgICAgY2hhcnNldCAqY2hhcnMsICpjaGFuZ2U7Cish ICAgd2NoYXJfdCBvYzsKKyAgICBpbnQgbjsKKyAgCisgICAgKmVycm1zZyA9ICdcMCc7CisrICAg CisrICAgaWYgKCphcmcgPT0gTCctJykgKythcmc7CisgIAorISAgIGlmICghd2NzY21wKGFyZywg TCJoZWxwIikpIHsKKyAgICAgICpwaGVscCA9IDE7CisgICAgICByZXR1cm47CisgICAgfQorICAK KyEgICBpZiAoIXdjc2NtcChhcmcsIEwidmVyc2lvbiIpKSB7CisgICAgICAqcHZlcnNpb24gPSAx OworICAgICAgcmV0dXJuOworICAgIH0KKyAgCishICAgaWYgKCphcmcgPT0gTCdCJyB8fCAqYXJn ID09IEwnUCcgfHwgKmFyZyA9PSBMJ1EnICkgeworISAgICAgY2hhcnMgPSAgKmFyZyA9PSBMJ0In ICA/ICBib2R5Y2hhcnMgICAgOgorISAgICAgICAgICAgICAgKmFyZyA9PSBMJ1AnICA/ICBwcm90 ZWN0Y2hhcnMgOgorISAgICAgICAgICAgLyogKmFyZyA9PSBMJ1EnICovICBxdW90ZWNoYXJzICAg OworICAgICAgKythcmc7CishICAgICBpZiAoKmFyZyAhPSBMJz0nICAmJiAgKmFyZyAhPSBMJysn ICAmJiAgKmFyZyAhPSBMJy0nKSBnb3RvIGJhZGFyZzsKKyAgICAgIGNoYW5nZSA9IHBhcnNlY2hh cnNldChhcmcgKyAxLCBlcnJtc2cpOworICAgICAgaWYgKGNoYW5nZSkgeworISAgICAgICBpZiAg ICAgICgqYXJnID09IEwnPScpICAgY3Nzd2FwKGNoYXJzLGNoYW5nZSk7CishICAgICAgIGVsc2Ug aWYgKCphcmcgPT0gTCcrJykgICBjc2FkZChjaGFycyxjaGFuZ2UsZXJybXNnKTsKKyEgICAgICAg ZWxzZSAgLyogKmFyZyA9PSBMJy0nICovIGNzcmVtb3ZlKGNoYXJzLGNoYW5nZSxlcnJtc2cpOwor ICAgICAgICBmcmVlY2hhcnNldChjaGFuZ2UpOworICAgICAgfQorICAgICAgcmV0dXJuOworICAg IH0KKyAgCishICAgaWYgKGlzd2RpZ2l0KCphcmcpKSB7CisgICAgICBpZiAoIXN0cnRvdWRlYyhh cmcsICZuKSkgZ290byBiYWRhcmc7CisgICAgICBpZiAobiA8PSA4KSAqcHByZWZpeCA9IG47Cisg ICAgICBlbHNlICpwd2lkdGggPSBuOworICAgIH0KKyAgCisgICAgZm9yICg7OykgeworISAgICAg d2hpbGUgKGlzd2RpZ2l0KCphcmcpKSArK2FyZzsKKyAgICAgIG9jID0gKmFyZzsKKyAgICAgIGlm ICghb2MpIGJyZWFrOworICAgICAgbiA9IC0xOworICAgICAgaWYgKCFzdHJ0b3VkZWMoKythcmcs ICZuKSkgZ290byBiYWRhcmc7CishICAgICBpZiAoICAgb2MgPT0gTCdoJyB8fCBvYyA9PSBMJ3An IHx8IG9jID09IEwncicKKyEgICAgICAgICB8fCBvYyA9PSBMJ3MnIHx8IG9jID09IEwnVCcgfHwg b2MgPT0gTCd3JykgeworISAgICAgICBpZiAgICAgIChvYyA9PSBMJ2gnKSAgICpwaGFuZyAgID0g IG4gPj0gMCA/IG4gOiAgMTsKKyEgICAgICAgZWxzZSBpZiAob2MgPT0gTCdwJykgICAqcHByZWZp eCA9ICBuOworISAgICAgICBlbHNlIGlmIChvYyA9PSBMJ3InKSAgICpwcmVwZWF0ID0gIG4gPj0g MCA/IG4gOiAgMzsKKyEgICAgICAgZWxzZSBpZiAob2MgPT0gTCdzJykgICAqcHN1ZmZpeCA9ICBu OworISAgICAgICBlbHNlIGlmIChvYyA9PSBMJ1QnKSAgICpwVGFiICAgID0gIG4gPj0gMCA/IG4g OiAgODsKKyEgICAgICAgZWxzZSAgLyogb2MgPT0gTCd3JyAqLyAqcHdpZHRoICA9ICBuID49IDAg PyBuIDogNzk7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgaWYgKG4gPCAwKSBuID0g MTsKKyAgICAgICAgaWYgKG4gPiAxKSBnb3RvIGJhZGFyZzsKKyEgICAgICAgaWYgICAgICAob2Mg PT0gTCdiJykgKnBib2R5ICAgPSBuOworISAgICAgICBlbHNlIGlmIChvYyA9PSBMJ2MnKSAqcGNh cCAgICA9IG47CishICAgICAgIGVsc2UgaWYgKG9jID09IEwnZCcpICpwZGl2ICAgID0gbjsKKyEg ICAgICAgZWxzZSBpZiAob2MgPT0gTCdFJykgKnBFcnIgICAgPSBuOworISAgICAgICBlbHNlIGlm IChvYyA9PSBMJ2UnKSAqcGV4cGVsICA9IG47CishICAgICAgIGVsc2UgaWYgKG9jID09IEwnZicp ICpwZml0ICAgID0gbjsKKyEgICAgICAgZWxzZSBpZiAob2MgPT0gTCdnJykgKnBndWVzcyAgPSBu OworISAgICAgICBlbHNlIGlmIChvYyA9PSBMJ2knKSAqcGludmlzICA9IG47CishICAgICAgIGVs c2UgaWYgKG9jID09IEwnaicpICpwanVzdCAgID0gbjsKKyEgICAgICAgZWxzZSBpZiAob2MgPT0g TCdsJykgKnBsYXN0ICAgPSBuOworISAgICAgICBlbHNlIGlmIChvYyA9PSBMJ3EnKSAqcHF1b3Rl ICA9IG47CishICAgICAgIGVsc2UgaWYgKG9jID09IEwnUicpICpwUmVwb3J0ID0gbjsKKyEgICAg ICAgZWxzZSBpZiAob2MgPT0gTCd0JykgKnB0b3VjaCAgPSBuOworICAgICAgICBlbHNlIGdvdG8g YmFkYXJnOworICAgICAgfQorICAgIH0KKyoqKioqKioqKioqKioqKgorKioqIDI3NywyODggKioq KgorICAKKyAgYmFkYXJnOgorICAKKyEgICBzcHJpbnRmKGVycm1zZywgIkJhZCBhcmd1bWVudDog JS4qc1xuIiwgZXJybXNnX3NpemUgLSAxNiwgc2F2ZWFyZyk7CisgICAgKnBoZWxwID0gMTsKKyAg fQorICAKKyAgCishIHN0YXRpYyBjaGFyICoqcmVhZGxpbmVzKAorICAgIGxpbmVwcm9wICoqcHBy b3BzLCBjb25zdCBjaGFyc2V0ICpwcm90ZWN0Y2hhcnMsCisgICAgY29uc3QgY2hhcnNldCAqcXVv dGVjaGFycywgaW50IFRhYiwgaW50IGludmlzLCBpbnQgcXVvdGUsIGVycm1zZ190IGVycm1zZwor ICApCistLS0gMjMyLDI0MyAtLS0tCisgIAorICBiYWRhcmc6CisgIAorISAgIHN3cHJpbnRmKGVy cm1zZywgZXJybXNnX3NpemUsIEwiQmFkIGFyZ3VtZW50OiAlLipzXG4iLCBlcnJtc2dfc2l6ZSAt IDE2LCBzYXZlYXJnKTsKKyAgICAqcGhlbHAgPSAxOworICB9CisgIAorICAKKyEgc3RhdGljIHdj aGFyX3QgKipyZWFkbGluZXMoCisgICAgbGluZXByb3AgKipwcHJvcHMsIGNvbnN0IGNoYXJzZXQg KnByb3RlY3RjaGFycywKKyAgICBjb25zdCBjaGFyc2V0ICpxdW90ZWNoYXJzLCBpbnQgVGFiLCBp bnQgaW52aXMsIGludCBxdW90ZSwgZXJybXNnX3QgZXJybXNnCisgICkKKyoqKioqKioqKioqKioq KgorKioqIDMwMiwzMTAgKioqKgorICAvKiBpdCdzIG5vdCBOVUxMLiAgT24gZmFpbHVyZSwgcmV0 dXJucyBOVUxMIGFuZCBzZXRzICpwcHJvcHMgdG8gTlVMTC4gICAqLworICB7CisgICAgYnVmZmVy ICpjYnVmID0gTlVMTCwgKmxidWYgPSBOVUxMLCAqbHBidWYgPSBOVUxMOworISAgIGludCBjLCBl bXB0eSwgYmxhbmssIGZpcnN0bGluZSwgcXNvbmx5LCBvbGRxc29ubHkgPSAwLCB2bG5sZW4sIGk7 CishICAgY2hhciBjaCwgKmxuID0gTlVMTCwgbnVsbGNoYXIgPSAnXDAnLCAqbnVsbGxpbmUgPSBO VUxMLCAqcXBlbmQsCishICAgICAgICAqb2xkbG4gPSBOVUxMLCAqb2xkcXBlbmQgPSBOVUxMLCAq cCwgKm9wLCAqdmxuID0gTlVMTCwgKipsaW5lcyA9IE5VTEw7CisgICAgbGluZXByb3AgdnByb3Ag PSB7IDAsIDAsIDAsICdcMCcgfSwgaXByb3AgPSB7IDAsIDAsIDAsICdcMCcgfTsKKyAgCisgICAg Lyogb2xkcXNvbmx5LCBvbGRsbiwgYW5kIG9sZHF1ZW5kIGRvbid0IHJlYWxseSBuZWVkIHRvIGJl IGluaXRpYWxpemVkLiAgICovCistLS0gMjU3LDI2NiAtLS0tCisgIC8qIGl0J3Mgbm90IE5VTEwu ICBPbiBmYWlsdXJlLCByZXR1cm5zIE5VTEwgYW5kIHNldHMgKnBwcm9wcyB0byBOVUxMLiAgICov CisgIHsKKyAgICBidWZmZXIgKmNidWYgPSBOVUxMLCAqbGJ1ZiA9IE5VTEwsICpscGJ1ZiA9IE5V TEw7CishICAgd2ludF90IGM7CishICAgaW50IGVtcHR5LCBibGFuaywgZmlyc3RsaW5lLCBxc29u bHksIG9sZHFzb25seSA9IDAsIHZsbmxlbiwgaTsKKyEgICB3Y2hhcl90ICpsbiA9IE5VTEwsIG51 bGxjaGFyID0gTCdcMCcsICpudWxsbGluZSA9IE5VTEwsICpxcGVuZCwgCishICAgICAqb2xkbG4g PSBOVUxMLCAqb2xkcXBlbmQgPSBOVUxMLCAqcCwgKm9wLCAqdmxuID0gTlVMTCwgKipsaW5lcyA9 IE5VTEw7CisgICAgbGluZXByb3AgdnByb3AgPSB7IDAsIDAsIDAsICdcMCcgfSwgaXByb3AgPSB7 IDAsIDAsIDAsICdcMCcgfTsKKyAgCisgICAgLyogb2xkcXNvbmx5LCBvbGRsbiwgYW5kIG9sZHF1 ZW5kIGRvbid0IHJlYWxseSBuZWVkIHRvIGJlIGluaXRpYWxpemVkLiAgICovCisqKioqKioqKioq KioqKioKKyoqKiAzMTYsMzM1ICoqKioKKyAgCisgICAgKnBwcm9wcyA9IE5VTEw7CisgIAorISAg IGNidWYgPSBuZXdidWZmZXIoc2l6ZW9mIChjaGFyKSwgZXJybXNnKTsKKyAgICBpZiAoKmVycm1z ZykgZ290byBybGNsZWFudXA7CishICAgbGJ1ZiA9IG5ld2J1ZmZlcihzaXplb2YgKGNoYXIgKiks IGVycm1zZyk7CisgICAgaWYgKCplcnJtc2cpIGdvdG8gcmxjbGVhbnVwOworICAgIGxwYnVmID0g bmV3YnVmZmVyKHNpemVvZiAobGluZXByb3ApLCBlcnJtc2cpOworICAgIGlmICgqZXJybXNnKSBn b3RvIHJsY2xlYW51cDsKKyAgCisgICAgZm9yIChlbXB0eSA9IGJsYW5rID0gZmlyc3RsaW5lID0g MTsgIDsgICkgeworISAgICAgYyA9IGdldGNoYXIoKTsKKyEgICAgIGlmIChjID09IEVPRikgYnJl YWs7CishICAgICAqKHVuc2lnbmVkIGNoYXIgKikmY2ggPSBjOworISAgICAgaWYgKGNoID09ICdc bicpIHsKKyAgICAgICAgaWYgKGJsYW5rKSB7CishICAgICAgICAgdW5nZXRjKGMsc3RkaW4pOwor ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGFkZGl0ZW0oY2J1ZiwgJm51bGxj aGFyLCBlcnJtc2cpOworLS0tIDI3MiwyOTYgLS0tLQorICAKKyAgICAqcHByb3BzID0gTlVMTDsK KyAgCishICAgY2J1ZiA9IG5ld2J1ZmZlcihzaXplb2YgKHdjaGFyX3QpLCBlcnJtc2cpOworICAg IGlmICgqZXJybXNnKSBnb3RvIHJsY2xlYW51cDsKKyEgICBsYnVmID0gbmV3YnVmZmVyKHNpemVv ZiAod2NoYXJfdCAqKSwgZXJybXNnKTsKKyAgICBpZiAoKmVycm1zZykgZ290byBybGNsZWFudXA7 CisgICAgbHBidWYgPSBuZXdidWZmZXIoc2l6ZW9mIChsaW5lcHJvcCksIGVycm1zZyk7CisgICAg aWYgKCplcnJtc2cpIGdvdG8gcmxjbGVhbnVwOworICAKKyAgICBmb3IgKGVtcHR5ID0gYmxhbmsg PSBmaXJzdGxpbmUgPSAxOyAgOyAgKSB7CishICAgICBjID0gZ2V0d2NoYXIoKTsKKyEgICAgIGlm IChjID09IFdFT0YpIHsKKyEgICAgICAgaWYgKGVycm5vID09IEVJTFNFUSkgeworISAgICAgICAJ d2NzY3B5KGVycm1zZywgTCJJbnZhbGlkIG11bHRpYnl0ZSBzZXF1ZW5jZSBpbiBpbnB1dFxuIik7 CishIAlnb3RvIHJsY2xlYW51cDsKKyEgICAgICAgfQorISAgICAgICBicmVhazsKKyEgICAgIH0K KyEgICAgIGlmIChjID09IEwnXG4nKSB7CisgICAgICAgIGlmIChibGFuaykgeworISAgICAgICAg IHVuZ2V0d2MoYyxzdGRpbik7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg YWRkaXRlbShjYnVmLCAmbnVsbGNoYXIsIGVycm1zZyk7CisqKioqKioqKioqKioqKioKKyoqKiAz MzgsMzQ2ICoqKioKKyAgICAgICAgaWYgKCplcnJtc2cpIGdvdG8gcmxjbGVhbnVwOworICAgICAg ICBpZiAocXVvdGUpIHsKKyAgICAgICAgICBmb3IgKHFwZW5kID0gbG47ICAqcXBlbmQgJiYgY3Nt ZW1iZXIoKnFwZW5kLCBxdW90ZWNoYXJzKTsgICsrcXBlbmQpOworISAgICAgICAgIGZvciAocCA9 IHFwZW5kOyAgKnAgPT0gJyAnIHx8IGNzbWVtYmVyKCpwLCBxdW90ZWNoYXJzKTsgICsrcCk7Cish ICAgICAgICAgcXNvbmx5ID0gICpwID09ICdcMCc7CishICAgICAgICAgd2hpbGUgKHFwZW5kID4g bG4gJiYgcXBlbmRbLTFdID09ICcgJykgLS1xcGVuZDsKKyAgICAgICAgICBpZiAoIWZpcnN0bGlu ZSkgeworICAgICAgICAgICAgZm9yIChwID0gbG4sIG9wID0gb2xkbG47CisgICAgICAgICAgICAg ICAgIHAgPCBxcGVuZCAmJiBvcCA8IG9sZHFwZW5kICYmICpwID09ICpvcDsKKy0tLSAyOTksMzA3 IC0tLS0KKyAgICAgICAgaWYgKCplcnJtc2cpIGdvdG8gcmxjbGVhbnVwOworICAgICAgICBpZiAo cXVvdGUpIHsKKyAgICAgICAgICBmb3IgKHFwZW5kID0gbG47ICAqcXBlbmQgJiYgY3NtZW1iZXIo KnFwZW5kLCBxdW90ZWNoYXJzKTsgICsrcXBlbmQpOworISAgICAgICAgIGZvciAocCA9IHFwZW5k OyAgKnAgPT0gTCcgJyB8fCBjc21lbWJlcigqcCwgcXVvdGVjaGFycyk7ICArK3ApOworISAgICAg ICAgIHFzb25seSA9ICAoKnAgPT0gTCdcMCcpOworISAgICAgICAgIHdoaWxlIChxcGVuZCA+IGxu ICYmIHFwZW5kWy0xXSA9PSBMJyAnKSAtLXFwZW5kOworICAgICAgICAgIGlmICghZmlyc3RsaW5l KSB7CisgICAgICAgICAgICBmb3IgKHAgPSBsbiwgb3AgPSBvbGRsbjsKKyAgICAgICAgICAgICAg ICAgcCA8IHFwZW5kICYmIG9wIDwgb2xkcXBlbmQgJiYgKnAgPT0gKm9wOworKioqKioqKioqKioq KioqCisqKiogMzQ4LDM3MCAqKioqCisgICAgICAgICAgICBpZiAoIShwID09IHFwZW5kICYmIG9w ID09IG9sZHFwZW5kKSkgeworICAgICAgICAgICAgICBpZiAoIWludmlzICYmIChvbGRxc29ubHkg fHwgcXNvbmx5KSkgeworICAgICAgICAgICAgICAgIGlmIChvbGRxc29ubHkpIHsKKyEgICAgICAg ICAgICAgICAgICpvcCA9ICdcMCc7CisgICAgICAgICAgICAgICAgICBvbGRxcGVuZCA9IG9wOwor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAocXNvbmx5KSB7CishICAgICAg ICAgICAgICAgICAqcCA9ICdcMCc7CisgICAgICAgICAgICAgICAgICBxcGVuZCA9IHA7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UgeworICAg ICAgICAgICAgICAgIHZsbmxlbiA9IHAgLSBsbjsKKyEgICAgICAgICAgICAgICB2bG4gPSBtYWxs b2MoKHZsbmxlbiArIDEpICogc2l6ZW9mIChjaGFyKSk7CisgICAgICAgICAgICAgICAgaWYgKCF2 bG4pIHsKKyEgICAgICAgICAgICAgICAgIHN0cmNweShlcnJtc2csb3V0b2ZtZW0pOworICAgICAg ICAgICAgICAgICAgZ290byBybGNsZWFudXA7CisgICAgICAgICAgICAgICAgfQorISAgICAgICAg ICAgICAgIHN0cm5jcHkodmxuLGxuLHZsbmxlbik7CishICAgICAgICAgICAgICAgdmxuW3Zsbmxl bl0gPSAnXDAnOworICAgICAgICAgICAgICAgIGFkZGl0ZW0obGJ1ZiwgJnZsbiwgZXJybXNnKTsK KyAgICAgICAgICAgICAgICBpZiAoKmVycm1zZykgZ290byBybGNsZWFudXA7CisgICAgICAgICAg ICAgICAgYWRkaXRlbShscGJ1ZiwgIGludmlzID8gJmlwcm9wIDogJnZwcm9wLCAgZXJybXNnKTsK Ky0tLSAzMDksMzMxIC0tLS0KKyAgICAgICAgICAgIGlmICghKHAgPT0gcXBlbmQgJiYgb3AgPT0g b2xkcXBlbmQpKSB7CisgICAgICAgICAgICAgIGlmICghaW52aXMgJiYgKG9sZHFzb25seSB8fCBx c29ubHkpKSB7CisgICAgICAgICAgICAgICAgaWYgKG9sZHFzb25seSkgeworISAgICAgICAgICAg ICAgICAgKm9wID0gTCdcMCc7CisgICAgICAgICAgICAgICAgICBvbGRxcGVuZCA9IG9wOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAocXNvbmx5KSB7CishICAgICAgICAg ICAgICAgICAqcCA9IEwnXDAnOworICAgICAgICAgICAgICAgICAgcXBlbmQgPSBwOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlIHsKKyAgICAg ICAgICAgICAgICB2bG5sZW4gPSBwIC0gbG47CishICAgICAgICAgICAgICAgdmxuID0gbWFsbG9j KCh2bG5sZW4gKyAxKSAqIHNpemVvZiAod2NoYXJfdCkpOworICAgICAgICAgICAgICAgIGlmICgh dmxuKSB7CishICAgICAgICAgICAgICAgICB3Y3NjcHkoZXJybXNnLG91dG9mbWVtKTsKKyAgICAg ICAgICAgICAgICAgIGdvdG8gcmxjbGVhbnVwOworICAgICAgICAgICAgICAgIH0KKyEgICAgICAg ICAgICAgICB3Y3NuY3B5KHZsbiwgbG4sIHZsbmxlbik7CishICAgICAgICAgICAgICAgdmxuW3Zs bmxlbl0gPSBMJ1wwJzsKKyAgICAgICAgICAgICAgICBhZGRpdGVtKGxidWYsICZ2bG4sIGVycm1z Zyk7CisgICAgICAgICAgICAgICAgaWYgKCplcnJtc2cpIGdvdG8gcmxjbGVhbnVwOworICAgICAg ICAgICAgICAgIGFkZGl0ZW0obHBidWYsICBpbnZpcyA/ICZpcHJvcCA6ICZ2cHJvcCwgIGVycm1z Zyk7CisqKioqKioqKioqKioqKioKKyoqKiAzODgsNDE1ICoqKioKKyAgICAgIH0KKyAgICAgIGVs c2UgeworICAgICAgICBpZiAoZW1wdHkpIHsKKyEgICAgICAgICBpZiAoY3NtZW1iZXIoY2gsIHBy b3RlY3RjaGFycykpIHsKKyEgICAgICAgICAgIHVuZ2V0YyhjLHN0ZGluKTsKKyAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgICBlbXB0eSA9IDA7CisgICAgICAgIH0KKyEg ICAgICAgaWYgKCFjaCkgY29udGludWU7CishICAgICAgIGlmIChjaCA9PSAnXHQnKSB7CishICAg ICAgICAgY2ggPSAnICc7CisgICAgICAgICAgZm9yIChpID0gVGFiIC0gbnVtaXRlbXMoY2J1Zikg JSBUYWI7ICBpID4gMDsgIC0taSkgeworISAgICAgICAgICAgYWRkaXRlbShjYnVmLCAmY2gsIGVy cm1zZyk7CisgICAgICAgICAgICBpZiAoKmVycm1zZykgZ290byBybGNsZWFudXA7CisgICAgICAg ICAgfQorICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CishICAgICAgIGlmIChpc3NwYWNl KGMpKSBjaCA9ICcgJzsKKyEgICAgICAgZWxzZSBibGFuayA9IDA7CishICAgICAgIGFkZGl0ZW0o Y2J1ZiwgJmNoLCBlcnJtc2cpOworISAgICAgICBpZiAoKmVycm1zZykgZ290byBybGNsZWFudXA7 CisgICAgICB9CisgICAgfQorISAKKyAgICBpZiAoIWJsYW5rKSB7CisgICAgICBhZGRpdGVtKGNi dWYsICZudWxsY2hhciwgZXJybXNnKTsKKyAgICAgIGlmICgqZXJybXNnKSBnb3RvIHJsY2xlYW51 cDsKKy0tLSAzNDksMzc5IC0tLS0KKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBpZiAo ZW1wdHkpIHsKKyEgICAgICAgICBpZiAoY3NtZW1iZXIoYywgcHJvdGVjdGNoYXJzKSkgeworISAg ICAgICAgICAgdW5nZXR3YyhjLHN0ZGluKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg IH0KKyAgICAgICAgICBlbXB0eSA9IDA7CisgICAgICAgIH0KKyEgICAgICAgaWYgKCFjKSBjb250 aW51ZTsKKyEgICAgICAgaWYgKGMgPT0gTCdcdCcpIHsKKyEgICAgICAgICBjID0gTCcgJzsKKyAg ICAgICAgICBmb3IgKGkgPSBUYWIgLSBudW1pdGVtcyhjYnVmKSAlIFRhYjsgIGkgPiAwOyAgLS1p KSB7CishICAgICAgICAgICBhZGRpdGVtKGNidWYsICZjLCBlcnJtc2cpOworICAgICAgICAgICAg aWYgKCplcnJtc2cpIGdvdG8gcmxjbGVhbnVwOworICAgICAgICAgIH0KKyAgICAgICAgICBjb250 aW51ZTsKKyAgICAgICAgfQorISAgICAgICBpZiAoaXN3c3BhY2UoYykpIAorISAgICAgICAgIGMg PSBMJyAnOworISAgICAgICBlbHNlIAorISAgICAgICAgIGJsYW5rID0gMDsKKyEgICAgICAgYWRk aXRlbShjYnVmLCAmYywgZXJybXNnKTsKKyEgICAgICAgaWYgKCplcnJtc2cpIAorISAgICAgICAg IGdvdG8gcmxjbGVhbnVwOworICAgICAgfQorICAgIH0KKyEgICAKKyAgICBpZiAoIWJsYW5rKSB7 CisgICAgICBhZGRpdGVtKGNidWYsICZudWxsY2hhciwgZXJybXNnKTsKKyAgICAgIGlmICgqZXJy bXNnKSBnb3RvIHJsY2xlYW51cDsKKyoqKioqKioqKioqKioqKgorKioqIDQ0OSw0NTUgKioqKgor ICAKKyAgCisgIHN0YXRpYyB2b2lkIGNvbXByZXN1ZmxlbigKKyEgICBjb25zdCBjaGFyICogY29u c3QgKmxpbmVzLCBjb25zdCBjaGFyICogY29uc3QgKmVuZGxpbmUsCisgICAgY29uc3QgY2hhcnNl dCAqYm9keWNoYXJzLCBpbnQgYm9keSwgaW50IHByZSwgaW50IHN1ZiwgaW50ICpwcHJlLCBpbnQg KnBzdWYKKyAgKQorICAvKiBsaW5lcyBpcyBhbiBhcnJheSBvZiBzdHJpbmdzLCB1cCB0byBidXQg bm90IGluY2x1ZGluZyBlbmRsaW5lLiAgKi8KKy0tLSA0MTMsNDE5IC0tLS0KKyAgCisgIAorICBz dGF0aWMgdm9pZCBjb21wcmVzdWZsZW4oCishICAgY29uc3Qgd2NoYXJfdCAqIGNvbnN0ICpsaW5l cywgY29uc3Qgd2NoYXJfdCAqIGNvbnN0ICplbmRsaW5lLAorICAgIGNvbnN0IGNoYXJzZXQgKmJv ZHljaGFycywgaW50IGJvZHksIGludCBwcmUsIGludCBzdWYsIGludCAqcHByZSwgaW50ICpwc3Vm CisgICkKKyAgLyogbGluZXMgaXMgYW4gYXJyYXkgb2Ygc3RyaW5ncywgdXAgdG8gYnV0IG5vdCBp bmNsdWRpbmcgZW5kbGluZS4gICovCisqKioqKioqKioqKioqKioKKyoqKiA0NTcsNDY1ICoqKioK KyAgLyogbGluZXMgaW4gbGluZXMuICBBc3N1bWVzIHRoYXQgdGhleSBoYXZlIGFscmVhZHkgYmVl biBkZXRlcm1pbmVkICovCisgIC8qIHRvIGJlIGF0IGxlYXN0IHByZSBhbmQgc3VmLiAgZW5kbGlu ZSBtdXN0IG5vdCBlcXVhbCBsaW5lcy4gICAgICAqLworICB7CishICAgY29uc3QgY2hhciAqc3Rh cnQsICplbmQsICprbm93bnN0YXJ0LCAqIGNvbnN0ICpsaW5lLCAqcDEsICpwMiwgKmtub3duZW5k LAorICAgICAgICAgICAgICAgKmtub3duc3RhcnQyOworISAKKyAgICBzdGFydCA9ICpsaW5lczsK KyAgICBlbmQgPSBrbm93bnN0YXJ0ID0gc3RhcnQgKyBwcmU7CisgICAgaWYgKGJvZHkpCistLS0g NDIxLDQyOSAtLS0tCisgIC8qIGxpbmVzIGluIGxpbmVzLiAgQXNzdW1lcyB0aGF0IHRoZXkgaGF2 ZSBhbHJlYWR5IGJlZW4gZGV0ZXJtaW5lZCAqLworICAvKiB0byBiZSBhdCBsZWFzdCBwcmUgYW5k IHN1Zi4gIGVuZGxpbmUgbXVzdCBub3QgZXF1YWwgbGluZXMuICAgICAgKi8KKyAgeworISAgIGNv bnN0IHdjaGFyX3QgKnN0YXJ0LCAqZW5kLCAqa25vd25zdGFydCwgKiBjb25zdCAqbGluZSwgKnAx LCAqcDIsICprbm93bmVuZCwKKyAgICAgICAgICAgICAgICprbm93bnN0YXJ0MjsKKyEgICAgICAg ICAgICAKKyAgICBzdGFydCA9ICpsaW5lczsKKyAgICBlbmQgPSBrbm93bnN0YXJ0ID0gc3RhcnQg KyBwcmU7CisgICAgaWYgKGJvZHkpCisqKioqKioqKioqKioqKioKKyoqKiA0NzQsNDgwICoqKioK KyAgICB9CisgICAgaWYgKGJvZHkpCisgICAgICBmb3IgKHAxID0gZW5kOyAgcDEgPiBrbm93bnN0 YXJ0OyAgKQorISAgICAgICBpZiAoKi0tcDEgIT0gJyAnKSB7CisgICAgICAgICAgaWYgKGNzbWVt YmVyKCpwMSwgYm9keWNoYXJzKSkKKyAgICAgICAgICAgIGVuZCA9IHAxOworICAgICAgICAgIGVs c2UKKy0tLSA0MzgsNDQ0IC0tLS0KKyAgICB9CisgICAgaWYgKGJvZHkpCisgICAgICBmb3IgKHAx ID0gZW5kOyAgcDEgPiBrbm93bnN0YXJ0OyAgKQorISAgICAgICBpZiAoKi0tcDEgIT0gTCcgJykg eworICAgICAgICAgIGlmIChjc21lbWJlcigqcDEsIGJvZHljaGFycykpCisgICAgICAgICAgICBl bmQgPSBwMTsKKyAgICAgICAgICBlbHNlCisqKioqKioqKioqKioqKioKKyoqKiA1MDEsNTE4ICoq KioKKyAgICB9CisgICAgaWYgKGJvZHkpIHsKKyAgICAgIGZvciAocDEgPSBzdGFydDsKKyEgICAg ICAgICAgc3RhcnQgPCBrbm93bmVuZCAmJiAoKnN0YXJ0ID09ICcgJyB8fCBjc21lbWJlcigqc3Rh cnQsIGJvZHljaGFycykpOworICAgICAgICAgICArK3N0YXJ0KTsKKyEgICAgIGlmIChzdGFydCA+ IHAxICYmIHN0YXJ0Wy0xXSA9PSAnICcpIC0tc3RhcnQ7CisgICAgfQorICAgIGVsc2UKKyEgICAg IHdoaWxlIChlbmQgLSBzdGFydCA+PSAyICYmICpzdGFydCA9PSAnICcgJiYgc3RhcnRbMV0gPT0g JyAnKSArK3N0YXJ0OworICAgICpwc3VmID0gZW5kIC0gc3RhcnQ7CisgIH0KKyAgCisgIAorICBz dGF0aWMgdm9pZCBkZWxpbWl0KAorISAgIGNvbnN0IGNoYXIgKiBjb25zdCAqbGluZXMsIGNvbnN0 IGNoYXIgKiBjb25zdCAqZW5kbGluZSwKKyAgICBjb25zdCBjaGFyc2V0ICpib2R5Y2hhcnMsIGlu dCByZXBlYXQsIGludCBib2R5LCBpbnQgZGl2LAorICAgIGludCBwcmUsIGludCBzdWYsIGxpbmVw cm9wICpwcm9wcworICApCistLS0gNDY1LDQ4MiAtLS0tCisgICAgfQorICAgIGlmIChib2R5KSB7 CisgICAgICBmb3IgKHAxID0gc3RhcnQ7CishICAgICAgICAgIHN0YXJ0IDwga25vd25lbmQgJiYg KCpzdGFydCA9PSBMJyAnIHx8IGNzbWVtYmVyKCpzdGFydCwgYm9keWNoYXJzKSk7CisgICAgICAg ICAgICsrc3RhcnQpOworISAgICAgaWYgKHN0YXJ0ID4gcDEgJiYgc3RhcnRbLTFdID09IEwnICcp IC0tc3RhcnQ7CisgICAgfQorICAgIGVsc2UKKyEgICAgIHdoaWxlIChlbmQgLSBzdGFydCA+PSAy ICYmICpzdGFydCA9PSBMJyAnICYmIHN0YXJ0WzFdID09IEwnICcpICsrc3RhcnQ7CisgICAgKnBz dWYgPSBlbmQgLSBzdGFydDsKKyAgfQorICAKKyAgCisgIHN0YXRpYyB2b2lkIGRlbGltaXQoCish ICAgY29uc3Qgd2NoYXJfdCAqIGNvbnN0ICpsaW5lcywgY29uc3Qgd2NoYXJfdCAqIGNvbnN0ICpl bmRsaW5lLAorICAgIGNvbnN0IGNoYXJzZXQgKmJvZHljaGFycywgaW50IHJlcGVhdCwgaW50IGJv ZHksIGludCBkaXYsCisgICAgaW50IHByZSwgaW50IHN1ZiwgbGluZXByb3AgKnByb3BzCisgICkK KyoqKioqKioqKioqKioqKgorKioqIDUyMyw1MzAgKioqKgorICAvKiBhbmQgY29tc3VmbGVuIG9m IHRoZSBsaW5lcyBpbiBsaW5lcyBoYXZlIGFscmVhZHkgYmVlbiAgICAgKi8KKyAgLyogZGV0ZXJt aW5lZCB0byBiZSBhdCBsZWFzdCBwcmUgYW5kIHN1ZiwgcmVzcGVjdGl2ZWx5LiAgICAgICovCisg IHsKKyEgICBjb25zdCBjaGFyICogY29uc3QgKmxpbmUsICplbmQsICpwLCAqIGNvbnN0ICpuZXh0 bGluZTsKKyEgICBjaGFyIHJjOworICAgIGxpbmVwcm9wICpwcm9wLCAqbmV4dHByb3A7CisgICAg aW50IGFueWJvZGlsZXNzID0gMCwgc3RhdHVzOworICAKKy0tLSA0ODcsNDk0IC0tLS0KKyAgLyog YW5kIGNvbXN1ZmxlbiBvZiB0aGUgbGluZXMgaW4gbGluZXMgaGF2ZSBhbHJlYWR5IGJlZW4gICAg ICovCisgIC8qIGRldGVybWluZWQgdG8gYmUgYXQgbGVhc3QgcHJlIGFuZCBzdWYsIHJlc3BlY3Rp dmVseS4gICAgICAqLworICB7CishICAgY29uc3Qgd2NoYXJfdCAqIGNvbnN0ICpsaW5lLCAqZW5k LCAqcCwgKiBjb25zdCAqbmV4dGxpbmU7CishICAgd2NoYXJfdCByYzsKKyAgICBsaW5lcHJvcCAq cHJvcCwgKm5leHRwcm9wOworICAgIGludCBhbnlib2RpbGVzcyA9IDAsIHN0YXR1czsKKyAgCisq KioqKioqKioqKioqKioKKyoqKiA1NDUsNTUyICoqKioKKyAgICAgIGZvciAoZW5kID0gKmxpbmU7 ICAqZW5kOyAgKytlbmQpOworICAgICAgZW5kIC09IHN1ZjsKKyAgICAgIHAgPSAqbGluZSArIHBy ZTsKKyEgICAgIHJjID0gIHAgPCBlbmQgID8gICpwICA6ICAnICc7CishICAgICBpZiAocmMgIT0g JyAnICYmICghcmVwZWF0IHx8IGVuZCAtIHAgPCByZXBlYXQpKQorICAgICAgICBwcm9wLT5mbGFn cyAmPSB+TF9CT0RJTEVTUzsKKyAgICAgIGVsc2UKKyAgICAgICAgd2hpbGUgKHAgPCBlbmQpIHsK Ky0tLSA1MDksNTE2IC0tLS0KKyAgICAgIGZvciAoZW5kID0gKmxpbmU7ICAqZW5kOyAgKytlbmQp OworICAgICAgZW5kIC09IHN1ZjsKKyAgICAgIHAgPSAqbGluZSArIHByZTsKKyEgICAgIHJjID0g IHAgPCBlbmQgID8gICpwICA6ICBMJyAnOworISAgICAgaWYgKHJjICE9IEwnICcgJiYgKCFyZXBl YXQgfHwgZW5kIC0gcCA8IHJlcGVhdCkpCisgICAgICAgIHByb3AtPmZsYWdzICY9IH5MX0JPRElM RVNTOworICAgICAgZWxzZQorICAgICAgICB3aGlsZSAocCA8IGVuZCkgeworKioqKioqKioqKioq KioqCisqKiogNTg5LDU5NyAqKioqCisgICAgfQorICAKKyAgICBsaW5lID0gbGluZXMsIHByb3Ag PSBwcm9wczsKKyEgICBzdGF0dXMgPSAoKCpsaW5lcylbcHJlXSA9PSAnICcpOworICAgIGRvIHsK KyEgICAgIGlmICgoKCpsaW5lKVtwcmVdID09ICcgJykgPT0gc3RhdHVzKQorICAgICAgICBwcm9w LT5mbGFncyB8PSBMX0ZJUlNUOworICAgICAgKytsaW5lLCArK3Byb3A7CisgICAgfSB3aGlsZSAo bGluZSA8IGVuZGxpbmUpOworLS0tIDU1Myw1NjEgLS0tLQorICAgIH0KKyAgCisgICAgbGluZSA9 IGxpbmVzLCBwcm9wID0gcHJvcHM7CishICAgc3RhdHVzID0gKCgqbGluZXMpW3ByZV0gPT0gTCcg Jyk7CisgICAgZG8geworISAgICAgaWYgKCgoKmxpbmUpW3ByZV0gPT0gTCcgJykgPT0gc3RhdHVz KQorICAgICAgICBwcm9wLT5mbGFncyB8PSBMX0ZJUlNUOworICAgICAgKytsaW5lLCArK3Byb3A7 CisgICAgfSB3aGlsZSAobGluZSA8IGVuZGxpbmUpOworKioqKioqKioqKioqKioqCisqKiogNTk5 LDYxMiAqKioqCisgIAorICAKKyAgc3RhdGljIHZvaWQgbWFya3N1cGVyZigKKyEgICBjb25zdCBj aGFyICogY29uc3QgKiBsaW5lcywgY29uc3QgY2hhciAqIGNvbnN0ICogZW5kbGluZSwgbGluZXBy b3AgKnByb3BzCisgICkKKyAgLyogbGluZXMgcG9pbnRzIHRvIHRoZSBmaXJzdCBsaW5lIG9mIGEg c2VnbWVudCwgYW5kIGVuZGxpbmUgdG8gb25lICAqLworICAvKiBsaW5lIGJleW9uZCB0aGUgbGFz dCBsaW5lIGluIHRoZSBzZWdtZW50LiAgU2V0cyBMX1NVUEVSRiBiaXRzIGluICovCisgIC8qIHRo ZSBmbGFncyBmaWVsZHMgb2YgdGhlIHByb3BzIGFycmF5IHdoZW5ldmVyIHRoZSBjb3JyZXNwb25k aW5nICAgKi8KKyAgLyogbGluZSBpcyBzdXBlcmZsdW91cy4gIExfQk9ESUxFU1MgYml0cyBtdXN0 IGFscmVhZHkgYmUgc2V0LiAgICAgICAqLworICB7CishICAgY29uc3QgY2hhciAqIGNvbnN0ICps aW5lLCAqcDsKKyAgICBsaW5lcHJvcCAqcHJvcCwgKm1wcm9wLCBkdW1teTsKKyAgICBpbnQgaW5i b2R5LCBudW0sIG1udW07CisgIAorLS0tIDU2Myw1NzYgLS0tLQorICAKKyAgCisgIHN0YXRpYyB2 b2lkIG1hcmtzdXBlcmYoCishICAgY29uc3Qgd2NoYXJfdCAqIGNvbnN0ICogbGluZXMsIGNvbnN0 IHdjaGFyX3QgKiBjb25zdCAqIGVuZGxpbmUsIGxpbmVwcm9wICpwcm9wcworICApCisgIC8qIGxp bmVzIHBvaW50cyB0byB0aGUgZmlyc3QgbGluZSBvZiBhIHNlZ21lbnQsIGFuZCBlbmRsaW5lIHRv IG9uZSAgKi8KKyAgLyogbGluZSBiZXlvbmQgdGhlIGxhc3QgbGluZSBpbiB0aGUgc2VnbWVudC4g IFNldHMgTF9TVVBFUkYgYml0cyBpbiAqLworICAvKiB0aGUgZmxhZ3MgZmllbGRzIG9mIHRoZSBw cm9wcyBhcnJheSB3aGVuZXZlciB0aGUgY29ycmVzcG9uZGluZyAgICovCisgIC8qIGxpbmUgaXMg c3VwZXJmbHVvdXMuICBMX0JPRElMRVNTIGJpdHMgbXVzdCBhbHJlYWR5IGJlIHNldC4gICAgICAg Ki8KKyAgeworISAgIGNvbnN0IHdjaGFyX3QgKiBjb25zdCAqbGluZSwgKnA7CisgICAgbGluZXBy b3AgKnByb3AsICptcHJvcCwgZHVtbXk7CisgICAgaW50IGluYm9keSwgbnVtLCBtbnVtOworICAK KyoqKioqKioqKioqKioqKgorKioqIDYxOSw2MjUgKioqKgorICAgIGZvciAobGluZSA9IGxpbmVz LCBwcm9wID0gcHJvcHM7ICBsaW5lIDwgZW5kbGluZTsgICsrbGluZSwgKytwcm9wKQorICAgICAg aWYgKGlzdmFjYW50KHByb3ApKSB7CisgICAgICAgIGZvciAobnVtID0gMCwgcCA9ICpsaW5lOyAg KnA7ICArK3ApCishICAgICAgICAgaWYgKCpwICE9ICcgJykgKytudW07CisgICAgICAgIGlmIChp bmJvZHkgfHwgbnVtIDwgbW51bSkKKyAgICAgICAgICBtbnVtID0gbnVtLCBtcHJvcCA9IHByb3A7 CisgICAgICAgIGluYm9keSA9IDA7CistLS0gNTgzLDU4OSAtLS0tCisgICAgZm9yIChsaW5lID0g bGluZXMsIHByb3AgPSBwcm9wczsgIGxpbmUgPCBlbmRsaW5lOyAgKytsaW5lLCArK3Byb3ApCisg ICAgICBpZiAoaXN2YWNhbnQocHJvcCkpIHsKKyAgICAgICAgZm9yIChudW0gPSAwLCBwID0gKmxp bmU7ICAqcDsgICsrcCkKKyEgICAgICAgICBpZiAoKnAgIT0gTCcgJykgKytudW07CisgICAgICAg IGlmIChpbmJvZHkgfHwgbnVtIDwgbW51bSkKKyAgICAgICAgICBtbnVtID0gbnVtLCBtcHJvcCA9 IHByb3A7CisgICAgICAgIGluYm9keSA9IDA7CisqKioqKioqKioqKioqKioKKyoqKiA2MzEsNjM3 ICoqKioKKyAgCisgIAorICBzdGF0aWMgdm9pZCBzZXRhZmZpeGVzKAorISAgIGNvbnN0IGNoYXIg KiBjb25zdCAqaW5saW5lcywgY29uc3QgY2hhciAqIGNvbnN0ICplbmRsaW5lLAorICAgIGNvbnN0 IGxpbmVwcm9wICpwcm9wcywgY29uc3QgY2hhcnNldCAqYm9keWNoYXJzLAorICAgIGNvbnN0IGNo YXJzZXQgKnF1b3RlY2hhcnMsIGludCBoYW5nLCBpbnQgYm9keSwgaW50IHF1b3RlLAorICAgIGlu dCAqcGFmcCwgaW50ICpwZnMsIGludCAqcHByZWZpeCwgaW50ICpwc3VmZml4CistLS0gNTk1LDYw MSAtLS0tCisgIAorICAKKyAgc3RhdGljIHZvaWQgc2V0YWZmaXhlcygKKyEgICBjb25zdCB3Y2hh cl90ICogY29uc3QgKmlubGluZXMsIGNvbnN0IHdjaGFyX3QgKiBjb25zdCAqZW5kbGluZSwKKyAg ICBjb25zdCBsaW5lcHJvcCAqcHJvcHMsIGNvbnN0IGNoYXJzZXQgKmJvZHljaGFycywKKyAgICBj b25zdCBjaGFyc2V0ICpxdW90ZWNoYXJzLCBpbnQgaGFuZywgaW50IGJvZHksIGludCBxdW90ZSwK KyAgICBpbnQgKnBhZnAsIGludCAqcGZzLCBpbnQgKnBwcmVmaXgsIGludCAqcHN1ZmZpeAorKioq KioqKioqKioqKioqCisqKiogNjQ0LDY1MCAqKioqCisgIC8qIGRlZmF1bHQgdmFsdWUgYXMgc3Bl Y2lmaWVkIGluICJwYXIuZG9jIi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgewor ICAgIGludCBudW1pbiwgcHJlLCBzdWY7CishICAgY29uc3QgY2hhciAqcDsKKyAgCisgICAgbnVt aW4gPSBlbmRsaW5lIC0gaW5saW5lczsKKyAgCistLS0gNjA4LDYxNCAtLS0tCisgIC8qIGRlZmF1 bHQgdmFsdWUgYXMgc3BlY2lmaWVkIGluICJwYXIuZG9jIi4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgKi8KKyAgeworICAgIGludCBudW1pbiwgcHJlLCBzdWY7CishICAgY29uc3Qgd2NoYXJf dCAqcDsKKyAgCisgICAgbnVtaW4gPSBlbmRsaW5lIC0gaW5saW5lczsKKyAgCisqKioqKioqKioq KioqKioKKyoqKiA2NjYsNjc2ICoqKioKKyAgfQorICAKKyAgCishIHN0YXRpYyB2b2lkIGZyZWVs aW5lcyhjaGFyICoqbGluZXMpCisgIC8qIEZyZWVzIHRoZSBlbGVtZW50cyBvZiBsaW5lcywgYW5k IGxpbmVzIGl0c2VsZi4gKi8KKyAgLyogbGluZXMgaXMgYSBOVUxMLXRlcm1pbmF0ZWQgYXJyYXkg b2Ygc3RyaW5ncy4gICAqLworICB7CishICAgY2hhciAqKmxpbmU7CisgIAorICAgIGZvciAobGlu ZSA9IGxpbmVzOyAgKmxpbmU7ICArK2xpbmUpCisgICAgICBmcmVlKCpsaW5lKTsKKy0tLSA2MzAs NjQwIC0tLS0KKyAgfQorICAKKyAgCishIHN0YXRpYyB2b2lkIGZyZWVsaW5lcyh3Y2hhcl90ICoq bGluZXMpCisgIC8qIEZyZWVzIHRoZSBlbGVtZW50cyBvZiBsaW5lcywgYW5kIGxpbmVzIGl0c2Vs Zi4gKi8KKyAgLyogbGluZXMgaXMgYSBOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgb2Ygc3RyaW5ncy4g ICAqLworICB7CishICAgd2NoYXJfdCAqKmxpbmU7CisgIAorICAgIGZvciAobGluZSA9IGxpbmVz OyAgKmxpbmU7ICArK2xpbmUpCisgICAgICBmcmVlKCpsaW5lKTsKKyoqKioqKioqKioqKioqKgor KioqIDY3OCw3NDUgKioqKgorICAgIGZyZWUobGluZXMpOworICB9CisgIAorLSAKKyAgaW50IG1h aW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiBjb25zdCAqYXJndikKKyAgeworICAgIGludCBoZWxw ID0gMCwgdmVyc2lvbiA9IDAsIGhhbmcgPSAwLCBwcmVmaXggPSAtMSwgcmVwZWF0ID0gMCwgc3Vm Zml4ID0gLTEsCisgICAgICAgIFRhYiA9IDEsIHdpZHRoID0gNzIsIGJvZHkgPSAwLCBjYXAgPSAw LCBkaXYgPSAwLCBFcnIgPSAwLCBleHBlbCA9IDAsCisgICAgICAgIGZpdCA9IDAsIGd1ZXNzID0g MCwgaW52aXMgPSAwLCBqdXN0ID0gMCwgbGFzdCA9IDAsIHF1b3RlID0gMCwgUmVwb3J0ID0gMCwK KyAgICAgICAgdG91Y2ggPSAtMTsKKyEgICBpbnQgcHJlZml4YmFrLCBzdWZmaXhiYWssIGMsIHNh d25vbmJsYW5rLCBvd2VibGFuaywgbiwgaSwgYWZwLCBmczsKKyAgICBjaGFyc2V0ICpib2R5Y2hh cnMgPSBOVUxMLCAqcHJvdGVjdGNoYXJzID0gTlVMTCwgKnF1b3RlY2hhcnMgPSBOVUxMOworISAg IGNoYXIgKnBhcmluaXQgPSBOVUxMLCAqYXJnLCAqKmlubGluZXMgPSBOVUxMLCAqKmVuZGxpbmUs ICoqZmlyc3RsaW5lLCAqZW5kLAorISAgICAgICAgKipuZXh0bGluZSwgKipvdXRsaW5lcyA9IE5V TEwsICoqbGluZSwgY2g7CishICAgY29uc3QgY2hhciAqZW52LCAqIGNvbnN0IHdoaXRlY2hhcnMg PSAiIFxmXG5cclx0XHYiOworICAgIGVycm1zZ190IGVycm1zZyA9IHsgJ1wwJyB9OworICAgIGxp bmVwcm9wICpwcm9wcyA9IE5VTEwsICpmaXJzdHByb3AsICpuZXh0cHJvcDsKKyAgICBGSUxFICpl cnJvdXQ7CisgIAorICAvKiBTZXQgdGhlIGN1cnJlbnQgbG9jYWxlIGZyb20gdGhlIGVudmlyb25t ZW50OiAqLworICAKKyAgICBzZXRsb2NhbGUoTENfQUxMLCIiKTsKKyAgCisgIC8qIFByb2Nlc3Mg ZW52aXJvbm1lbnQgdmFyaWFibGVzOiAqLworICAKKyAgICBlbnYgPSBnZXRlbnYoIlBBUkJPRFki KTsKKyAgICBpZiAoIWVudikgZW52ID0gIiI7CishICAgYm9keWNoYXJzID0gcGFyc2VjaGFyc2V0 KGVudixlcnJtc2cpOworICAgIGlmICgqZXJybXNnKSB7CisgICAgICBoZWxwID0gMTsKKyAgICAg IGdvdG8gcGFyY2xlYW51cDsKKyAgICB9CisgIAorICAgIGVudiA9IGdldGVudigiUEFSUFJPVEVD VCIpOworICAgIGlmICghZW52KSBlbnYgPSAiIjsKKyEgICBwcm90ZWN0Y2hhcnMgPSBwYXJzZWNo YXJzZXQoZW52LGVycm1zZyk7CisgICAgaWYgKCplcnJtc2cpIHsKKyAgICAgIGhlbHAgPSAxOwor ICAgICAgZ290byBwYXJjbGVhbnVwOworICAgIH0KKyAgCisgICAgZW52ID0gZ2V0ZW52KCJQQVJR VU9URSIpOworICAgIGlmICghZW52KSBlbnYgPSAiPiAiOworISAgIHF1b3RlY2hhcnMgPSBwYXJz ZWNoYXJzZXQoZW52LGVycm1zZyk7CisgICAgaWYgKCplcnJtc2cpIHsKKyAgICAgIGhlbHAgPSAx OworICAgICAgZ290byBwYXJjbGVhbnVwOworICAgIH0KKyAgCisgICAgZW52ID0gZ2V0ZW52KCJQ QVJJTklUIik7CisgICAgaWYgKGVudikgeworISAgICAgcGFyaW5pdCA9IG1hbGxvYygoc3RybGVu KGVudikgKyAxKSAqIHNpemVvZiAoY2hhcikpOworICAgICAgaWYgKCFwYXJpbml0KSB7CishICAg ICAgIHN0cmNweShlcnJtc2csb3V0b2ZtZW0pOworICAgICAgICBnb3RvIHBhcmNsZWFudXA7Cisg ICAgICB9CishICAgICBzdHJjcHkocGFyaW5pdCxlbnYpOworISAgICAgYXJnID0gc3RydG9rKHBh cmluaXQsd2hpdGVjaGFycyk7CisgICAgICB3aGlsZSAoYXJnKSB7CisgICAgICAgIHBhcnNlYXJn KGFyZywgJmhlbHAsICZ2ZXJzaW9uLCBib2R5Y2hhcnMsIHByb3RlY3RjaGFycywKKyAgICAgICAg ICAgICAgICAgcXVvdGVjaGFycywgJmhhbmcsICZwcmVmaXgsICZyZXBlYXQsICZzdWZmaXgsICZU YWIsCisgICAgICAgICAgICAgICAgICZ3aWR0aCwgJmJvZHksICZjYXAsICZkaXYsICZFcnIsICZl eHBlbCwgJmZpdCwgJmd1ZXNzLAorICAgICAgICAgICAgICAgICAmaW52aXMsICZqdXN0LCAmbGFz dCwgJnF1b3RlLCAmUmVwb3J0LCAmdG91Y2gsIGVycm1zZyApOworICAgICAgICBpZiAoKmVycm1z ZyB8fCBoZWxwIHx8IHZlcnNpb24pIGdvdG8gcGFyY2xlYW51cDsKKyEgICAgICAgYXJnID0gc3Ry dG9rKE5VTEwsd2hpdGVjaGFycyk7CisgICAgICB9CisgICAgICBmcmVlKHBhcmluaXQpOworICAg ICAgcGFyaW5pdCA9IE5VTEw7CistLS0gNjQyLDc1NyAtLS0tCisgICAgZnJlZShsaW5lcyk7Cisg IH0KKyAgCisgIGludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICogY29uc3QgKmFyZ3YpCisg IHsKKyAgICBpbnQgaGVscCA9IDAsIHZlcnNpb24gPSAwLCBoYW5nID0gMCwgcHJlZml4ID0gLTEs IHJlcGVhdCA9IDAsIHN1ZmZpeCA9IC0xLAorICAgICAgICBUYWIgPSAxLCB3aWR0aCA9IDcyLCBi b2R5ID0gMCwgY2FwID0gMCwgZGl2ID0gMCwgRXJyID0gMCwgZXhwZWwgPSAwLAorICAgICAgICBm aXQgPSAwLCBndWVzcyA9IDAsIGludmlzID0gMCwganVzdCA9IDAsIGxhc3QgPSAwLCBxdW90ZSA9 IDAsIFJlcG9ydCA9IDAsCisgICAgICAgIHRvdWNoID0gLTE7CishICAgaW50IHByZWZpeGJhaywg c3VmZml4YmFrLCBzYXdub25ibGFuaywgb3dlYmxhbmssIG4sIGksIGFmcCwgZnM7CisgICAgY2hh cnNldCAqYm9keWNoYXJzID0gTlVMTCwgKnByb3RlY3RjaGFycyA9IE5VTEwsICpxdW90ZWNoYXJz ID0gTlVMTDsKKyEgICB3aW50X3QgYzsKKyEgICB3Y2hhcl90ICpzdGF0ZTsKKyEgICB3Y2hhcl90 ICpwYXJpbml0ID0gTlVMTCwgKmFyZywgKippbmxpbmVzID0gTlVMTCwgKiplbmRsaW5lLCAqKmZp cnN0bGluZSwgKmVuZCwKKyEgICAgICoqbmV4dGxpbmUsICoqb3V0bGluZXMgPSBOVUxMLCAqKmxp bmU7CishICAgY29uc3QgY2hhciAqZW52OworISAgIHdjaGFyX3QgKndlbnYgPSBOVUxMOworISAg IGNvbnN0IHdjaGFyX3QgKiBjb25zdCB3aGl0ZWNoYXJzID0gTCIgXGZcblxyXHRcdiI7CisgICAg ZXJybXNnX3QgZXJybXNnID0geyAnXDAnIH07CisgICAgbGluZXByb3AgKnByb3BzID0gTlVMTCwg KmZpcnN0cHJvcCwgKm5leHRwcm9wOworICAgIEZJTEUgKmVycm91dDsKKysgICBjaGFyICpsYW5n aW5mbzsKKyAgCisgIC8qIFNldCB0aGUgY3VycmVudCBsb2NhbGUgZnJvbSB0aGUgZW52aXJvbm1l bnQ6ICovCisgIAorICAgIHNldGxvY2FsZShMQ19BTEwsIiIpOworKyAgIGxhbmdpbmZvID0gbmxf bGFuZ2luZm8oQ09ERVNFVCk7CisrICAgaWYgKCFzdHJjbXAobGFuZ2luZm8sICJBTlNJX1gzLjQt MTk2OCIpKSB7CisrICAgICAvLyBXZSB3b3VsZCBsaWtlIHRvIGZhbGxiYWNrIGluIGFuIDggYml0 cyBlbmNvZGluZywgYnV0IGl0IGlzIG5vdCBlYXNpbHkgcG9zc2libGUuCisrICAgICAvL3NldGxv Y2FsZShMQ19DVFlQRSwgIkMiKTsKKysgICAgIC8vbGFuZ2luZm8gPSBubF9sYW5naW5mbyhDT0RF U0VUKTsKKysgICAgIGZ3cHJpbnRmKCBFcnIgPyBzdGRlcnIgOiBzdGRvdXQsIAorKyAgICAgICAg IEwiV2FybmluZzogTG9jYWxlIHNlZW1zIG5vdCBjb25maWd1cmVkXG4iKTsKKysgICB9CisgIAor ICAvKiBQcm9jZXNzIGVudmlyb25tZW50IHZhcmlhYmxlczogKi8KKyAgCisgICAgZW52ID0gZ2V0 ZW52KCJQQVJCT0RZIik7CisgICAgaWYgKCFlbnYpIGVudiA9ICIiOworISAgIHdlbnYgPSBtYWxs b2MoKHN0cmxlbihlbnYpICsgMSkgKiBzaXplb2YgKHdjaGFyX3QpKTsKKyEgICBpZiAoIXdlbnYp IHsKKyEgICAgIHdjc2NweShlcnJtc2csb3V0b2ZtZW0pOworISAgICAgZ290byBwYXJjbGVhbnVw OworISAgIH0KKyEgICBpZiAoMCA+IG1ic3Rvd2NzKHdlbnYsZW52LCBzdHJsZW4oZW52KSArIDEp KSB7CishICAgICB3Y3NjcHkoZXJybXNnLCBMIkludmFsaWQgbXVsdGlieXRlIHNlcXVlbmNlIGlu IFBBUkJPRFlcbiIpOworISAgICAgZ290byBwYXJjbGVhbnVwOworISAgIH0KKyEgICBib2R5Y2hh cnMgPSBwYXJzZWNoYXJzZXQod2VudixlcnJtc2cpOworICAgIGlmICgqZXJybXNnKSB7CisgICAg ICBoZWxwID0gMTsKKyAgICAgIGdvdG8gcGFyY2xlYW51cDsKKyAgICB9CisrICAgZnJlZSh3ZW52 KTsKKysgICB3ZW52ID0gTlVMTDsKKyAgCisgICAgZW52ID0gZ2V0ZW52KCJQQVJQUk9URUNUIik7 CisgICAgaWYgKCFlbnYpIGVudiA9ICIiOworISAgIHdlbnYgPSBtYWxsb2MoKHN0cmxlbihlbnYp ICsgMSkgKiBzaXplb2YgKHdjaGFyX3QpKTsKKyEgICBpZiAoIXdlbnYpIHsKKyEgICAgIHdjc2Nw eShlcnJtc2csb3V0b2ZtZW0pOworISAgICAgZ290byBwYXJjbGVhbnVwOworISAgIH0KKyEgICBp ZiAoMCA+IG1ic3Rvd2NzKHdlbnYsZW52LCBzdHJsZW4oZW52KSArIDEpKSB7CishICAgICB3Y3Nj cHkoZXJybXNnLCBMIkludmFsaWQgbXVsdGlieXRlIHNlcXVlbmNlIGluIFBBUlBST1RFQ1RcbiIp OworISAgICAgZ290byBwYXJjbGVhbnVwOworISAgIH0KKyEgICBwcm90ZWN0Y2hhcnMgPSBwYXJz ZWNoYXJzZXQod2VudixlcnJtc2cpOworICAgIGlmICgqZXJybXNnKSB7CisgICAgICBoZWxwID0g MTsKKyAgICAgIGdvdG8gcGFyY2xlYW51cDsKKyAgICB9CisrICAgZnJlZSh3ZW52KTsKKysgICB3 ZW52ID0gTlVMTDsKKyAgCisgICAgZW52ID0gZ2V0ZW52KCJQQVJRVU9URSIpOworICAgIGlmICgh ZW52KSBlbnYgPSAiPiAiOworISAgIHdlbnYgPSBtYWxsb2MoKHN0cmxlbihlbnYpICsgMSkgKiBz aXplb2YgKHdjaGFyX3QpKTsKKyEgICBpZiAoIXdlbnYpIHsKKyEgICAgIHdjc2NweShlcnJtc2cs b3V0b2ZtZW0pOworISAgICAgZ290byBwYXJjbGVhbnVwOworISAgIH0KKyEgICBpZiAoMCA+IG1i c3Rvd2NzKHdlbnYsZW52LCBzdHJsZW4oZW52KSArIDEpKSB7CishICAgICB3Y3NjcHkoZXJybXNn LCBMIkludmFsaWQgbXVsdGlieXRlIHNlcXVlbmNlIGluIFBBUlFVT1RFXG4iKTsKKyEgICAgIGdv dG8gcGFyY2xlYW51cDsKKyEgICB9CishICAgcXVvdGVjaGFycyA9IHBhcnNlY2hhcnNldCh3ZW52 LGVycm1zZyk7CisgICAgaWYgKCplcnJtc2cpIHsKKyAgICAgIGhlbHAgPSAxOworICAgICAgZ290 byBwYXJjbGVhbnVwOworICAgIH0KKysgICBmcmVlKHdlbnYpOworKyAgIHdlbnYgPSBOVUxMOwor ICAKKyAgICBlbnYgPSBnZXRlbnYoIlBBUklOSVQiKTsKKyAgICBpZiAoZW52KSB7CishICAgICBw YXJpbml0ID0gbWFsbG9jKChzdHJsZW4oZW52KSArIDEpICogc2l6ZW9mICh3Y2hhcl90KSk7Cisg ICAgICBpZiAoIXBhcmluaXQpIHsKKyEgICAgICAgd2NzY3B5KGVycm1zZyxvdXRvZm1lbSk7Cisg ICAgICAgIGdvdG8gcGFyY2xlYW51cDsKKyAgICAgIH0KKyEgICAgIGlmICgwID4gbWJzdG93Y3Mo cGFyaW5pdCxlbnYsIHN0cmxlbihlbnYpICsgMSkpIHsKKyEgICAgICAgd2NzY3B5KGVycm1zZywg TCJJbnZhbGlkIG11bHRpYnl0ZSBzZXF1ZW5jZSBpbiBQQVJJTklUXG4iKTsKKyEgICAgICAgZ290 byBwYXJjbGVhbnVwOworISAgICAgfSAgICAKKyEgICAgIGFyZyA9IHdjc3RvayhwYXJpbml0LCB3 aGl0ZWNoYXJzLCAmc3RhdGUpOworICAgICAgd2hpbGUgKGFyZykgeworICAgICAgICBwYXJzZWFy ZyhhcmcsICZoZWxwLCAmdmVyc2lvbiwgYm9keWNoYXJzLCBwcm90ZWN0Y2hhcnMsCisgICAgICAg ICAgICAgICAgIHF1b3RlY2hhcnMsICZoYW5nLCAmcHJlZml4LCAmcmVwZWF0LCAmc3VmZml4LCAm VGFiLAorICAgICAgICAgICAgICAgICAmd2lkdGgsICZib2R5LCAmY2FwLCAmZGl2LCAmRXJyLCAm ZXhwZWwsICZmaXQsICZndWVzcywKKyAgICAgICAgICAgICAgICAgJmludmlzLCAmanVzdCwgJmxh c3QsICZxdW90ZSwgJlJlcG9ydCwgJnRvdWNoLCBlcnJtc2cgKTsKKyAgICAgICAgaWYgKCplcnJt c2cgfHwgaGVscCB8fCB2ZXJzaW9uKSBnb3RvIHBhcmNsZWFudXA7CishICAgICAgIGFyZyA9IHdj c3RvayhOVUxMLCB3aGl0ZWNoYXJzLCAmc3RhdGUpOworICAgICAgfQorICAgICAgZnJlZShwYXJp bml0KTsKKyAgICAgIHBhcmluaXQgPSBOVUxMOworKioqKioqKioqKioqKioqCisqKiogNzQ4LDgw NCAqKioqCisgIC8qIFByb2Nlc3MgY29tbWFuZCBsaW5lIGFyZ3VtZW50czogKi8KKyAgCisgICAg d2hpbGUgKCorK2FyZ3YpIHsKKyEgICAgIHBhcnNlYXJnKCphcmd2LCAmaGVscCwgJnZlcnNpb24s IGJvZHljaGFycywgcHJvdGVjdGNoYXJzLAorICAgICAgICAgICAgICAgcXVvdGVjaGFycywgJmhh bmcsICZwcmVmaXgsICZyZXBlYXQsICZzdWZmaXgsICZUYWIsCisgICAgICAgICAgICAgICAmd2lk dGgsICZib2R5LCAmY2FwLCAmZGl2LCAmRXJyLCAmZXhwZWwsICZmaXQsICZndWVzcywKKyAgICAg ICAgICAgICAgICZpbnZpcywgJmp1c3QsICZsYXN0LCAmcXVvdGUsICZSZXBvcnQsICZ0b3VjaCwg ZXJybXNnICk7CisgICAgICBpZiAoKmVycm1zZyB8fCBoZWxwIHx8IHZlcnNpb24pIGdvdG8gcGFy Y2xlYW51cDsKKyAgICB9CisgIAorICAgIGlmIChUYWIgPT0gMCkgeworISAgICAgc3RyY3B5KGVy cm1zZywgIjxUYWI+IG11c3Qgbm90IGJlIDAuXG4iKTsKKyAgICAgIGdvdG8gcGFyY2xlYW51cDsK KyAgICB9CisgIAorICAgIGlmICh0b3VjaCA8IDApIHRvdWNoID0gZml0IHx8IGxhc3Q7CisgICAg cHJlZml4YmFrID0gcHJlZml4OworICAgIHN1ZmZpeGJhayA9IHN1ZmZpeDsKKyEgCishIC8qIE1h aW4gbG9vcDogKi8KKyEgCisgICAgZm9yIChzYXdub25ibGFuayA9IG93ZWJsYW5rID0gMDsgIDsg ICkgeworICAgICAgZm9yICg7OykgeworISAgICAgICBjID0gZ2V0Y2hhcigpOworISAgICAgICBp ZiAoYyA9PSBFT0YpIGJyZWFrOworISAgICAgICAqKHVuc2lnbmVkIGNoYXIgKikmY2ggPSBjOwor ISAgICAgICBpZiAoZXhwZWwgJiYgY2ggPT0gJ1xuJykgeworICAgICAgICAgIG93ZWJsYW5rID0g c2F3bm9uYmxhbms7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyEgICAgICAgaWYg KGNzbWVtYmVyKGNoLCBwcm90ZWN0Y2hhcnMpKSB7CisgICAgICAgICAgc2F3bm9uYmxhbmsgPSAx OworICAgICAgICAgIGlmIChvd2VibGFuaykgeworISAgICAgICAgICAgcHV0cygiIik7CisgICAg ICAgICAgICBvd2VibGFuayA9IDA7CisgICAgICAgICAgfQorISAgICAgICAgIHdoaWxlIChjaCAh PSAnXG4nKSB7CishICAgICAgICAgICBwdXRjaGFyKGMpOworISAgICAgICAgICAgYyA9IGdldGNo YXIoKTsKKyEgICAgICAgICAgIGlmIChjID09IEVPRikgYnJlYWs7CishICAgICAgICAgICAqKHVu c2lnbmVkIGNoYXIgKikmY2ggPSBjOworICAgICAgICAgIH0KKyAgICAgICAgfQorISAgICAgICBp ZiAoY2ggIT0gJ1xuJykgYnJlYWs7ICAvKiBzdWJzdW1lcyB0aGUgY2FzZSB0aGF0IGMgPT0gRU9G ICovCishICAgICAgIHB1dGNoYXIoYyk7CisgICAgICB9CishICAgICBpZiAoYyA9PSBFT0YpIGJy ZWFrOworISAgICAgdW5nZXRjKGMsc3RkaW4pOworICAKKyAgICAgIGlubGluZXMgPQorICAgICAg ICByZWFkbGluZXMoJnByb3BzLCBwcm90ZWN0Y2hhcnMsIHF1b3RlY2hhcnMsIFRhYiwgaW52aXMs IHF1b3RlLCBlcnJtc2cpOworICAgICAgaWYgKCplcnJtc2cpIGdvdG8gcGFyY2xlYW51cDsKKyEg CishICAgICBmb3IgKGVuZGxpbmUgPSBpbmxpbmVzOyAgKmVuZGxpbmU7ICArK2VuZGxpbmUpOwor ICAgICAgaWYgKGVuZGxpbmUgPT0gaW5saW5lcykgeworICAgICAgICBmcmVlKGlubGluZXMpOwor ICAgICAgICBpbmxpbmVzID0gTlVMTDsKKy0tLSA3NjAsODMwIC0tLS0KKyAgLyogUHJvY2VzcyBj b21tYW5kIGxpbmUgYXJndW1lbnRzOiAqLworICAKKyAgICB3aGlsZSAoKisrYXJndikgeworISAg ICAgYXJnID0gbWFsbG9jKChzdHJsZW4oKmFyZ3YpICsgMSkgKiBzaXplb2YgKHdjaGFyX3QpKTsK KyEgICAgIGlmICgwID4gbWJzdG93Y3MoYXJnLCAqYXJndiwgc3RybGVuKCphcmd2KSArIDEpKSB7 CishICAgICAgIHdjc2NweShlcnJtc2csIEwiSW52YWxpZCBtdWx0aWJ5dGUgc2VxdWVuY2UgaW4g YXJndW1lbnRcbiIpOworISAgICAgICBnb3RvIHBhcmNsZWFudXA7CishICAgICB9CishICAgICBw YXJzZWFyZyhhcmcsICZoZWxwLCAmdmVyc2lvbiwgYm9keWNoYXJzLCBwcm90ZWN0Y2hhcnMsCisg ICAgICAgICAgICAgICBxdW90ZWNoYXJzLCAmaGFuZywgJnByZWZpeCwgJnJlcGVhdCwgJnN1ZmZp eCwgJlRhYiwKKyAgICAgICAgICAgICAgICZ3aWR0aCwgJmJvZHksICZjYXAsICZkaXYsICZFcnIs ICZleHBlbCwgJmZpdCwgJmd1ZXNzLAorICAgICAgICAgICAgICAgJmludmlzLCAmanVzdCwgJmxh c3QsICZxdW90ZSwgJlJlcG9ydCwgJnRvdWNoLCBlcnJtc2cgKTsKKysgICAgIGZyZWUoYXJnKTsK KyAgICAgIGlmICgqZXJybXNnIHx8IGhlbHAgfHwgdmVyc2lvbikgZ290byBwYXJjbGVhbnVwOwor ICAgIH0KKyAgCisgICAgaWYgKFRhYiA9PSAwKSB7CishICAgICB3Y3NjcHkoZXJybXNnLCBMIjxU YWI+IG11c3Qgbm90IGJlIDAuXG4iKTsKKyAgICAgIGdvdG8gcGFyY2xlYW51cDsKKyAgICB9Cisg IAorICAgIGlmICh0b3VjaCA8IDApIHRvdWNoID0gZml0IHx8IGxhc3Q7CisgICAgcHJlZml4YmFr ID0gcHJlZml4OworICAgIHN1ZmZpeGJhayA9IHN1ZmZpeDsKKyEgICAKKyEgICAvKiBNYWluIGxv b3A6ICovCisgICAgZm9yIChzYXdub25ibGFuayA9IG93ZWJsYW5rID0gMDsgIDsgICkgeworICAg ICAgZm9yICg7OykgeworISAgICAgICBjID0gZ2V0d2NoYXIoKTsKKyEgICAgICAgaWYgKGMgPT0g V0VPRikgeworISAgICAgICAgIGlmIChlcnJubyA9PSBFSUxTRVEpIHsKKyEgICAgICAgICAgIHdj c2NweShlcnJtc2csIEwiSW52YWxpZCBtdWx0aWJ5dGUgc2VxdWVuY2UgaW4gaW5wdXRcbiIpOwor ISAgICAgICAgICAgZ290byBwYXJjbGVhbnVwOworISAgICAgICAgIH0KKyEgICAgICAgICBicmVh azsKKyEgICAgICAgfQorISAgICAgICBpZiAoZXhwZWwgJiYgYyA9PSBMJ1xuJykgeworICAgICAg ICAgIG93ZWJsYW5rID0gc2F3bm9uYmxhbms7CisgICAgICAgICAgY29udGludWU7CisgICAgICAg IH0KKyEgICAgICAgaWYgKGNzbWVtYmVyKGMsIHByb3RlY3RjaGFycykpIHsKKyAgICAgICAgICBz YXdub25ibGFuayA9IDE7CisgICAgICAgICAgaWYgKG93ZWJsYW5rKSB7CishICAgICAgICAgICBm cHV0d2MoTCdcbicsIHN0ZG91dCk7CisgICAgICAgICAgICBvd2VibGFuayA9IDA7CisgICAgICAg ICAgfQorISAgICAgICAgIHdoaWxlIChjICE9IEwnXG4nKSB7CishICAgICAgICAgICBwdXR3Y2hh cihjKTsKKyEgICAgICAgICAgIGMgPSBnZXR3Y2hhcigpOworISAgICAgICAgICAgaWYgKGMgPT0g V0VPRikgeworISAgICAgICAgICAgICBpZiAoZXJybm8gPT0gRUlMU0VRKSB7CishICAgICAgICAg ICAgICAgd2NzY3B5KGVycm1zZywgTCJJbnZhbGlkIG11bHRpYnl0ZSBzZXF1ZW5jZSBpbiBpbnB1 dFxuIik7CishICAgICAgICAgICAgICAgZ290byBwYXJjbGVhbnVwOworISAgICAgICAgICAgICB9 CishICAgICAgICAgICAgIGJyZWFrOworISAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAg ICAgfQorISAgICAgICBpZiAoYyAhPSBMJ1xuJykgYnJlYWs7ICAvKiBzdWJzdW1lcyB0aGUgY2Fz ZSB0aGF0IGMgPT0gRU9GICovCishICAgICAgIHB1dHdjaGFyKGMpOworICAgICAgfQorISAgICAg aWYgKGMgPT0gV0VPRikgYnJlYWs7CishICAgICB1bmdldHdjKGMsc3RkaW4pOworICAKKyAgICAg IGlubGluZXMgPQorICAgICAgICByZWFkbGluZXMoJnByb3BzLCBwcm90ZWN0Y2hhcnMsIHF1b3Rl Y2hhcnMsIFRhYiwgaW52aXMsIHF1b3RlLCBlcnJtc2cpOworICAgICAgaWYgKCplcnJtc2cpIGdv dG8gcGFyY2xlYW51cDsKKyEgICAgIGZvciAoZW5kbGluZSA9IGlubGluZXM7ICAqZW5kbGluZTsg ICsrZW5kbGluZSkgOworICAgICAgaWYgKGVuZGxpbmUgPT0gaW5saW5lcykgeworICAgICAgICBm cmVlKGlubGluZXMpOworICAgICAgICBpbmxpbmVzID0gTlVMTDsKKyoqKioqKioqKioqKioqKgor KioqIDgwNyw4NDQgKioqKgorICAKKyAgICAgIHNhd25vbmJsYW5rID0gMTsKKyAgICAgIGlmIChv d2VibGFuaykgeworISAgICAgICBwdXRzKCIiKTsKKyAgICAgICAgb3dlYmxhbmsgPSAwOworICAg ICAgfQorICAKKyEgICAgIGRlbGltaXQoKGNvbnN0IGNoYXIgKiBjb25zdCAqKSBpbmxpbmVzLAor ISAgICAgICAgICAgICAoY29uc3QgY2hhciAqIGNvbnN0ICopIGVuZGxpbmUsCisgICAgICAgICAg ICAgIGJvZHljaGFycywgcmVwZWF0LCBib2R5LCBkaXYsIDAsIDAsIHByb3BzKTsKKyAgCisgICAg ICBpZiAoZXhwZWwpCishICAgICAgIG1hcmtzdXBlcmYoKGNvbnN0IGNoYXIgKiBjb25zdCAqKSBp bmxpbmVzLAorISAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICogY29uc3QgKikgZW5kbGlu ZSwgcHJvcHMpOworICAKKyAgICAgIGZpcnN0bGluZSA9IGlubGluZXMsIGZpcnN0cHJvcCA9IHBy b3BzOworICAgICAgZG8geworICAgICAgICBpZiAoaXNib2RpbGVzcyhmaXJzdHByb3ApKSB7Cisg ICAgICAgICAgaWYgKCFpc2ludmlzKGZpcnN0cHJvcCkgJiYgIShleHBlbCAmJiBpc3N1cGVyZihm aXJzdHByb3ApKSkgeworICAgICAgICAgICAgZm9yIChlbmQgPSAqZmlyc3RsaW5lOyAgKmVuZDsg ICsrZW5kKTsKKyEgICAgICAgICAgIGlmICghcmVwZWF0IHx8IChmaXJzdHByb3AtPnJjID09ICcg JyAmJiAhZmlyc3Rwcm9wLT5zKSkgeworISAgICAgICAgICAgICB3aGlsZSAoZW5kID4gKmZpcnN0 bGluZSAmJiBlbmRbLTFdID09ICcgJykgLS1lbmQ7CishICAgICAgICAgICAgICplbmQgPSAnXDAn OworISAgICAgICAgICAgICBwdXRzKCpmaXJzdGxpbmUpOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgIG4gPSB3aWR0aCAtIGZpcnN0cHJvcC0+cCAtIGZp cnN0cHJvcC0+czsKKyAgICAgICAgICAgICAgaWYgKG4gPCAwKSB7CishICAgICAgICAgICAgICAg c3ByaW50ZihlcnJtc2csaW1wb3NzaWJpbGl0eSw1KTsKKyAgICAgICAgICAgICAgICBnb3RvIHBh cmNsZWFudXA7CisgICAgICAgICAgICAgIH0KKyEgICAgICAgICAgICAgcHJpbnRmKCIlLipzIiwg Zmlyc3Rwcm9wLT5wLCAqZmlyc3RsaW5lKTsKKyAgICAgICAgICAgICAgZm9yIChpID0gbjsgIGk7 ICAtLWkpCishICAgICAgICAgICAgICAgcHV0Y2hhcigqKHVuc2lnbmVkIGNoYXIgKikmZmlyc3Rw cm9wLT5yYyk7CishICAgICAgICAgICAgIHB1dHMoZW5kIC0gZmlyc3Rwcm9wLT5zKTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgKytmaXJzdGxpbmUsICsrZmlyc3Rwcm9w OworLS0tIDgzMyw4NzEgLS0tLQorICAKKyAgICAgIHNhd25vbmJsYW5rID0gMTsKKyAgICAgIGlm IChvd2VibGFuaykgeworISAgICAgICBmcHV0d2MoTCdcbicsIHN0ZG91dCk7CisgICAgICAgIG93 ZWJsYW5rID0gMDsKKyAgICAgIH0KKyAgCishICAgICBkZWxpbWl0KChjb25zdCB3Y2hhcl90ICog Y29uc3QgKikgaW5saW5lcywKKyEgICAgICAgICAgICAgKGNvbnN0IHdjaGFyX3QgKiBjb25zdCAq KSBlbmRsaW5lLAorICAgICAgICAgICAgICBib2R5Y2hhcnMsIHJlcGVhdCwgYm9keSwgZGl2LCAw LCAwLCBwcm9wcyk7CisgIAorICAgICAgaWYgKGV4cGVsKQorISAgICAgICBtYXJrc3VwZXJmKChj b25zdCB3Y2hhcl90ICogY29uc3QgKikgaW5saW5lcywKKyEgICAgICAgICAgICAgICAgICAoY29u c3Qgd2NoYXJfdCAqIGNvbnN0ICopIGVuZGxpbmUsIHByb3BzKTsKKyAgCisgICAgICBmaXJzdGxp bmUgPSBpbmxpbmVzLCBmaXJzdHByb3AgPSBwcm9wczsKKysgCisgICAgICBkbyB7CisgICAgICAg IGlmIChpc2JvZGlsZXNzKGZpcnN0cHJvcCkpIHsKKyAgICAgICAgICBpZiAoIWlzaW52aXMoZmly c3Rwcm9wKSAmJiAhKGV4cGVsICYmIGlzc3VwZXJmKGZpcnN0cHJvcCkpKSB7CisgICAgICAgICAg ICBmb3IgKGVuZCA9ICpmaXJzdGxpbmU7ICAqZW5kOyAgKytlbmQpOworISAgICAgICAgICAgaWYg KCFyZXBlYXQgfHwgKGZpcnN0cHJvcC0+cmMgPT0gTCcgJyAmJiAhZmlyc3Rwcm9wLT5zKSkgewor ISAgICAgICAgICAgICB3aGlsZSAoZW5kID4gKmZpcnN0bGluZSAmJiBlbmRbLTFdID09IEwnICcp IC0tZW5kOworISAgICAgICAgICAgICAqZW5kID0gTCdcMCc7CishICAgICAgICAgICAgIGZ3cHJp bnRmKHN0ZG91dCwgTCIlbHNcbiIsICpmaXJzdGxpbmUpOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgIG4gPSB3aWR0aCAtIGZpcnN0cHJvcC0+cCAtIGZp cnN0cHJvcC0+czsKKyAgICAgICAgICAgICAgaWYgKG4gPCAwKSB7CishICAgICAgICAgICAgICAg c3dwcmludGYoZXJybXNnLGVycm1zZ19zaXplLGltcG9zc2liaWxpdHksNSk7CisgICAgICAgICAg ICAgICAgZ290byBwYXJjbGVhbnVwOworICAgICAgICAgICAgICB9CishICAgICAgICAgICAgIGZ3 cHJpbnRmKHN0ZG91dCwgTCIlLipscyIsIGZpcnN0cHJvcC0+cCwgKmZpcnN0bGluZSk7CisgICAg ICAgICAgICAgIGZvciAoaSA9IG47ICBpOyAgLS1pKQorISAgICAgICAgICAgICAgIGZwdXR3Yyhm aXJzdHByb3AtPnJjLCBzdGRvdXQpOworISAgICAgICAgICAgICBmd3ByaW50ZihzdGRvdXQsIEwi JWxzXG4iLCBlbmQgLSBmaXJzdHByb3AtPnMpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0K KyAgICAgICAgICArK2ZpcnN0bGluZSwgKytmaXJzdHByb3A7CisqKioqKioqKioqKioqKioKKyoq KiA4NDgsODc1ICoqKioKKyAgICAgICAgZm9yIChuZXh0bGluZSA9IGZpcnN0bGluZSArIDEsIG5l eHRwcm9wID0gZmlyc3Rwcm9wICsgMTsKKyAgICAgICAgICAgICBuZXh0bGluZSA8IGVuZGxpbmUg JiYgIWlzYm9kaWxlc3MobmV4dHByb3ApICYmICFpc2ZpcnN0KG5leHRwcm9wKTsKKyAgICAgICAg ICAgICArK25leHRsaW5lLCArK25leHRwcm9wKTsKKyEgCisgICAgICAgIHByZWZpeCA9IHByZWZp eGJhaywgc3VmZml4ID0gc3VmZml4YmFrOworISAgICAgICBzZXRhZmZpeGVzKChjb25zdCBjaGFy ICogY29uc3QgKikgZmlyc3RsaW5lLAorISAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICog Y29uc3QgKikgbmV4dGxpbmUsIGZpcnN0cHJvcCwgYm9keWNoYXJzLAorICAgICAgICAgICAgICAg ICAgIHF1b3RlY2hhcnMsIGhhbmcsIGJvZHksIHF1b3RlLCAmYWZwLCAmZnMsICZwcmVmaXgsICZz dWZmaXgpOworICAgICAgICBpZiAod2lkdGggPD0gcHJlZml4ICsgc3VmZml4KSB7CishICAgICAg ICAgc3ByaW50ZihlcnJtc2csCishICAgICAgICAgICAgICAgICAiPHdpZHRoPiAoJWQpIDw9IDxw cmVmaXg+ICglZCkgKyA8c3VmZml4PiAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgd2lkdGgs IHByZWZpeCwgc3VmZml4KTsKKyAgICAgICAgICBnb3RvIHBhcmNsZWFudXA7CisgICAgICAgIH0K KyAgCisgICAgICAgIG91dGxpbmVzID0KKyEgICAgICAgICByZWZvcm1hdCgoY29uc3QgY2hhciAq IGNvbnN0ICopIGZpcnN0bGluZSwKKyEgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqIGNv bnN0ICopIG5leHRsaW5lLAorICAgICAgICAgICAgICAgICAgIGFmcCwgZnMsIGhhbmcsIHByZWZp eCwgc3VmZml4LCB3aWR0aCwgY2FwLAorICAgICAgICAgICAgICAgICAgIGZpdCwgZ3Vlc3MsIGp1 c3QsIGxhc3QsIFJlcG9ydCwgdG91Y2gsIGVycm1zZyk7CisgICAgICAgIGlmICgqZXJybXNnKSBn b3RvIHBhcmNsZWFudXA7CistIAorICAgICAgICBmb3IgKGxpbmUgPSBvdXRsaW5lczsgICpsaW5l OyAgKytsaW5lKQorISAgICAgICAgIHB1dHMoKmxpbmUpOworISAKKyAgICAgICAgZnJlZWxpbmVz KG91dGxpbmVzKTsKKyAgICAgICAgb3V0bGluZXMgPSBOVUxMOworICAKKy0tLSA4NzUsOTAwIC0t LS0KKyAgICAgICAgZm9yIChuZXh0bGluZSA9IGZpcnN0bGluZSArIDEsIG5leHRwcm9wID0gZmly c3Rwcm9wICsgMTsKKyAgICAgICAgICAgICBuZXh0bGluZSA8IGVuZGxpbmUgJiYgIWlzYm9kaWxl c3MobmV4dHByb3ApICYmICFpc2ZpcnN0KG5leHRwcm9wKTsKKyAgICAgICAgICAgICArK25leHRs aW5lLCArK25leHRwcm9wKTsKKyEgICAgICAgCisgICAgICAgIHByZWZpeCA9IHByZWZpeGJhaywg c3VmZml4ID0gc3VmZml4YmFrOworISAgICAgICBzZXRhZmZpeGVzKChjb25zdCB3Y2hhcl90ICog Y29uc3QgKikgZmlyc3RsaW5lLAorISAgICAgICAgICAgICAgICAgIChjb25zdCB3Y2hhcl90ICog Y29uc3QgKikgbmV4dGxpbmUsIGZpcnN0cHJvcCwgYm9keWNoYXJzLAorICAgICAgICAgICAgICAg ICAgIHF1b3RlY2hhcnMsIGhhbmcsIGJvZHksIHF1b3RlLCAmYWZwLCAmZnMsICZwcmVmaXgsICZz dWZmaXgpOworICAgICAgICBpZiAod2lkdGggPD0gcHJlZml4ICsgc3VmZml4KSB7CishICAgICAg ICAgc3dwcmludGYoZXJybXNnLGVycm1zZ19zaXplLAorISAgICAgICAgICAgICAgICAgTCI8d2lk dGg+ICglZCkgPD0gPHByZWZpeD4gKCVkKSArIDxzdWZmaXg+ICglZClcbiIsCisgICAgICAgICAg ICAgICAgICB3aWR0aCwgcHJlZml4LCBzdWZmaXgpOworICAgICAgICAgIGdvdG8gcGFyY2xlYW51 cDsKKyAgICAgICAgfQorICAKKyAgICAgICAgb3V0bGluZXMgPQorISAgICAgICAgIHJlZm9ybWF0 KChjb25zdCB3Y2hhcl90ICogY29uc3QgKikgZmlyc3RsaW5lLAorISAgICAgICAgICAgICAgICAg IChjb25zdCB3Y2hhcl90ICogY29uc3QgKikgbmV4dGxpbmUsCisgICAgICAgICAgICAgICAgICAg YWZwLCBmcywgaGFuZywgcHJlZml4LCBzdWZmaXgsIHdpZHRoLCBjYXAsCisgICAgICAgICAgICAg ICAgICAgZml0LCBndWVzcywganVzdCwgbGFzdCwgUmVwb3J0LCB0b3VjaCwgZXJybXNnKTsKKyAg ICAgICAgaWYgKCplcnJtc2cpIGdvdG8gcGFyY2xlYW51cDsKKyAgICAgICAgZm9yIChsaW5lID0g b3V0bGluZXM7ICAqbGluZTsgICsrbGluZSkKKyEgICAgICAgICBmd3ByaW50ZihzdGRvdXQsIEwi JWxzXG4iLCAqbGluZSk7CisgICAgICAgIGZyZWVsaW5lcyhvdXRsaW5lcyk7CisgICAgICAgIG91 dGxpbmVzID0gTlVMTDsKKyAgCisqKioqKioqKioqKioqKioKKyoqKiA4ODQsODkwICoqKioKKyAg ICB9CisgIAorICBwYXJjbGVhbnVwOgorISAKKyAgICBpZiAoYm9keWNoYXJzKSBmcmVlY2hhcnNl dChib2R5Y2hhcnMpOworICAgIGlmIChwcm90ZWN0Y2hhcnMpIGZyZWVjaGFyc2V0KHByb3RlY3Rj aGFycyk7CisgICAgaWYgKHF1b3RlY2hhcnMpIGZyZWVjaGFyc2V0KHF1b3RlY2hhcnMpOworLS0t IDkwOSw5MTUgLS0tLQorICAgIH0KKyAgCisgIHBhcmNsZWFudXA6CishICAgaWYgKHdlbnYpIGZy ZWUod2Vudik7CisgICAgaWYgKGJvZHljaGFycykgZnJlZWNoYXJzZXQoYm9keWNoYXJzKTsKKyAg ICBpZiAocHJvdGVjdGNoYXJzKSBmcmVlY2hhcnNldChwcm90ZWN0Y2hhcnMpOworICAgIGlmIChx dW90ZWNoYXJzKSBmcmVlY2hhcnNldChxdW90ZWNoYXJzKTsKKyoqKioqKioqKioqKioqKgorKioq IDg5NCw5MDEgKioqKgorICAgIGlmIChvdXRsaW5lcykgZnJlZWxpbmVzKG91dGxpbmVzKTsKKyAg CisgICAgZXJyb3V0ID0gRXJyID8gc3RkZXJyIDogc3Rkb3V0OworISAgIGlmICgqZXJybXNnKSBm cHJpbnRmKGVycm91dCwgInBhciBlcnJvcjpcbiUuKnMiLCBlcnJtc2dfc2l6ZSwgZXJybXNnKTsK KyEgICBpZiAodmVyc2lvbikgZnB1dHMoInBhciAxLjUyXG4iLGVycm91dCk7CisgICAgaWYgKGhl bHApICAgIGZwdXRzKHVzYWdlbXNnLGVycm91dCk7CisgIAorICAgIHJldHVybiAqZXJybXNnID8g RVhJVF9GQUlMVVJFIDogRVhJVF9TVUNDRVNTOworLS0tIDkxOSw5MzAgLS0tLQorICAgIGlmIChv dXRsaW5lcykgZnJlZWxpbmVzKG91dGxpbmVzKTsKKyAgCisgICAgZXJyb3V0ID0gRXJyID8gc3Rk ZXJyIDogc3Rkb3V0OworISAgIGlmICgqZXJybXNnKSBmd3ByaW50ZihlcnJvdXQsIEwicGFyIGVy cm9yOlxuJS4qbHMiLCBlcnJtc2dfc2l6ZSwgZXJybXNnKTsKKyEgI2lmZGVmIE5PV0lEVEgKKyEg ICBpZiAodmVyc2lvbikgZnB1dHdzKEwicGFyIDEuNTItaTE4bi40ICh3aXRob3V0IHdjd2lkdGgo KSBzdXBwb3J0KVxuIixlcnJvdXQpOworISAjZWxzZQorISAgIGlmICh2ZXJzaW9uKSBmcHV0d3Mo TCJwYXIgMS41Mi1pMThuLjRcbiIsZXJyb3V0KTsKKyEgI2VuZGlmCisgICAgaWYgKGhlbHApICAg IGZwdXRzKHVzYWdlbXNnLGVycm91dCk7CisgIAorICAgIHJldHVybiAqZXJybXNnID8gRVhJVF9G QUlMVVJFIDogRVhJVF9TVUNDRVNTOwor0KLQvtC70YzQutC+INCyIC4uL1BhcjE1Mi11bmljb2Rl LzogcGFyLmMub3JpZworZGlmZiAtYyAuL3Bhci5kb2MgLi4vUGFyMTUyLXVuaWNvZGUvcGFyLmRv YworKioqIC4vcGFyLmRvYwkyMDAxLTA0LTMwIDAxOjE3OjI4LjAwMDAwMDAwMCArMDQwMAorLS0t IC4uL1BhcjE1Mi11bmljb2RlL3Bhci5kb2MJMjAxOS0xMC0yNiAxNzoyMTowOC41NDgwNTA4NTMg KzAzMDAKKyoqKioqKioqKioqKioqKgorKioqIDEsNiAqKioqCisgICAgKioqKioqKioqKioqKioq KioqKioqCisgICAgKiBwYXIuZG9jICAgICAgICAgICAqCishICAgKiBmb3IgUGFyIDEuNTIgICAg ICAqCisgICAgKiBDb3B5cmlnaHQgMjAwMSBieSAqCisgICAgKiBBZGFtIE0uIENvc3RlbGxvICAq CisgICAgKioqKioqKioqKioqKioqKioqKioqCistLS0gMSw2IC0tLS0KKyAgICAqKioqKioqKioq KioqKioqKioqKioKKyAgICAqIHBhci5kb2MgICAgICAgICAgICoKKyEgICAqIGZvciBQYXIgMS41 MiBpMThuICoKKyAgICAqIENvcHlyaWdodCAyMDAxIGJ5ICoKKyAgICAqIEFkYW0gTS4gQ29zdGVs bG8gICoKKyAgICAqKioqKioqKioqKioqKioqKioqKioKK2RpZmYgLWMgLi9wcm90b01ha2VmaWxl IC4uL1BhcjE1Mi11bmljb2RlL3Byb3RvTWFrZWZpbGUKKyoqKiAuL3Byb3RvTWFrZWZpbGUJMjAw MS0wMy0wOSAwMzo1MzoyNS4wMDAwMDAwMDAgKzAzMDAKKy0tLSAuLi9QYXIxNTItdW5pY29kZS9w cm90b01ha2VmaWxlCTIwMTktMTAtMjYgMTc6MjE6MDguNTQ4MDUwODUzICswMzAwCisqKioqKioq KioqKioqKioKKyoqKiA0Nyw1MyAqKioqCisgICMgRXhhbXBsZSAoZm9yIFNvbGFyaXMgMi54IHdp dGggU1BBUkNvbXBpbGVyIEMpOgorICAjIENDID0gY2MgLWMgLU8gLXMgLVhjIC1ERE9OVEZSRUUK KyAgCishIENDID0gY2MgLWMKKyAgCisgICMgRGVmaW5lIExJTksxIGFuZCBMSU5LMiBzbyB0aGF0 IHRoZSBjb21tYW5kCisgICMKKy0tLSA0Nyw1MyAtLS0tCisgICMgRXhhbXBsZSAoZm9yIFNvbGFy aXMgMi54IHdpdGggU1BBUkNvbXBpbGVyIEMpOgorICAjIENDID0gY2MgLWMgLU8gLXMgLVhjIC1E RE9OVEZSRUUKKyAgCishIENDID0gY2MgLXN0ZD1jOTkgLWMKKyAgCisgICMgRGVmaW5lIExJTksx IGFuZCBMSU5LMiBzbyB0aGF0IHRoZSBjb21tYW5kCisgICMKK2RpZmYgLWMgLi9yZWZvcm1hdC5j IC4uL1BhcjE1Mi11bmljb2RlL3JlZm9ybWF0LmMKKyoqKiAuL3JlZm9ybWF0LmMJMjAwMS0wMy0y MiAwNzoxNzoxNS4wMDAwMDAwMDAgKzAzMDAKKy0tLSAuLi9QYXIxNTItdW5pY29kZS9yZWZvcm1h dC5jCTIwMTktMTAtMjYgMTc6MjE6MDguNTQ4MDUwODUzICswMzAwCisqKioqKioqKioqKioqKioK KyoqKiAxLDkgKioqKgorISAvKioqKioqKioqKioqKioqKioqKioqLworISAvKiByZWZvcm1hdC5j ICAgICAgICAqLworISAvKiBmb3IgUGFyIDEuNTIgICAgICAqLworISAvKiBDb3B5cmlnaHQgMjAw MSBieSAqLworISAvKiBBZGFtIE0uIENvc3RlbGxvICAqLworISAvKioqKioqKioqKioqKioqKioq KioqLworICAKKyAgLyogVGhpcyBpcyBBTlNJIEMgY29kZSAoQzg5KS4gKi8KKyAgCistLS0gMSwx MSAtLS0tCishIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKyEgLyogcmVmb3JtYXQuYyAgICAg ICAgICAqLworISAvKiBmb3IgUGFyIDEuNTItaTE4bi40ICovCishIC8qIENvcHlyaWdodCAyMDAx IGJ5ICAgKi8KKyEgLyogQWRhbSBNLiBDb3N0ZWxsbyAgICAqLworISAvKiBNb2RpZmllZCBieSAg ICAgICAgICovCishIC8qIErDqXLDtG1lIFBvdWlsbGVyICAgICAqLworISAvKioqKioqKioqKioq KioqKioqKioqKiovCisgIAorICAvKiBUaGlzIGlzIEFOU0kgQyBjb2RlIChDODkpLiAqLworICAK KyoqKioqKioqKioqKioqKgorKioqIDE2LDIxICoqKioKKy0tLSAxOCwyNCAtLS0tCisgICNpbmNs dWRlIDxzdGRpby5oPgorICAjaW5jbHVkZSA8c3RkbGliLmg+CisgICNpbmNsdWRlIDxzdHJpbmcu aD4KKysgI2luY2x1ZGUgPHdjdHlwZS5oPgorICAKKyAgI3VuZGVmIE5VTEwKKyAgI2RlZmluZSBO VUxMICgodm9pZCAqKSAwKQorKioqKioqKioqKioqKioqCisqKiogMzMsNDYgKioqKgorICB0eXBl ZGVmIHVuc2lnbmVkIGNoYXIgd2ZsYWdfdDsKKyAgCisgIHR5cGVkZWYgc3RydWN0IHdvcmQgewor ISAgIGNvbnN0IGNoYXIgKmNocnM7ICAgICAgIC8qIFBvaW50ZXIgdG8gdGhlIGNoYXJhY3RlcnMg aW4gdGhlIHdvcmQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAoTk9UIHRlcm1p bmF0ZWQgYnkgJ1wwJykuICAgICAgICAgICAgICovCisgICAgc3RydWN0IHdvcmQgKnByZXYsICAg ICAgLyogUG9pbnRlciB0byBwcmV2aW91cyB3b3JkLiAgICAgICAgICAgICAqLworICAgICAgICAg ICAgICAgICpuZXh0LCAgICAgIC8qIFBvaW50ZXIgdG8gbmV4dCB3b3JkLiAgICAgICAgICAgICAg ICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTdXBwb3NpbmcgdGhpcyB3b3Jk IHdlcmUgdGhlIGZpcnN0Li4uICovCisgICAgICAgICAgICAgICAgKm5leHRsaW5lOyAgLyogICBQ b2ludGVyIHRvIGZpcnN0IHdvcmQgaW4gbmV4dCBsaW5lLiAqLworICAgIGludCBzY29yZSwgICAg ICAgICAgICAgIC8qICAgVmFsdWUgb2YgdGhlIG9iamVjdGl2ZSBmdW5jdGlvbi4gICAgKi8KKyEg ICAgICAgbGVuZ3RoOyAgICAgICAgICAgICAvKiBMZW5ndGggb2YgdGhpcyB3b3JkLiAgICAgICAg ICAgICAgICAgICovCisgICAgd2ZsYWdfdCBmbGFnczsgICAgICAgICAgLyogTm90YWJsZSBwcm9w ZXJ0aWVzIG9mIHRoaXMgd29yZC4gICAgICAqLworICB9IHdvcmQ7CisgIAorLS0tIDM2LDUwIC0t LS0KKyAgdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHdmbGFnX3Q7CisgIAorICB0eXBlZGVmIHN0cnVj dCB3b3JkIHsKKyEgICBjb25zdCB3Y2hhcl90ICpjaHJzOyAgICAvKiBQb2ludGVyIHRvIHRoZSBj aGFyYWN0ZXJzIGluIHRoZSB3b3JkICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog KE5PVCB0ZXJtaW5hdGVkIGJ5ICdcMCcpLiAgICAgICAgICAgICAqLworICAgIHN0cnVjdCB3b3Jk ICpwcmV2LCAgICAgIC8qIFBvaW50ZXIgdG8gcHJldmlvdXMgd29yZC4gICAgICAgICAgICAgKi8K KyAgICAgICAgICAgICAgICAqbmV4dCwgICAgICAvKiBQb2ludGVyIHRvIG5leHQgd29yZC4gICAg ICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3VwcG9zaW5n IHRoaXMgd29yZCB3ZXJlIHRoZSBmaXJzdC4uLiAqLworICAgICAgICAgICAgICAgICpuZXh0bGlu ZTsgIC8qICAgUG9pbnRlciB0byBmaXJzdCB3b3JkIGluIG5leHQgbGluZS4gKi8KKyAgICBpbnQg c2NvcmUsICAgICAgICAgICAgICAvKiAgIFZhbHVlIG9mIHRoZSBvYmplY3RpdmUgZnVuY3Rpb24u ICAgICovCishICAgICAgIGxlbmd0aCwgICAgICAgICAgICAgLyogTGVuZ3RoIChpbiB3aWRlY2hh cikgb2YgdGhpcyB3b3JkLiAgICAqLworISAgICAgICB3aWR0aDsgICAgICAgICAgICAgIC8qIFZp c3VhbCB3aWR0aCBvZiB0aGlzIHdvcmQuICAgICAgICAgICAgKi8KKyAgICB3ZmxhZ190IGZsYWdz OyAgICAgICAgICAvKiBOb3RhYmxlIHByb3BlcnRpZXMgb2YgdGhpcyB3b3JkLiAgICAgICovCisg IH0gd29yZDsKKyAgCisqKioqKioqKioqKioqKioKKyoqKiA1Nyw3MyAqKioqCisgICNkZWZpbmUg aXNjdXJpb3VzKHcpICgoKHcpLT5mbGFncyAmIDIpICE9IDApCisgICNkZWZpbmUgaXNjYXBpdGFs KHcpICgoKHcpLT5mbGFncyAmIDQpICE9IDApCisgIAorICAKKyAgc3RhdGljIGludCBjaGVja2Nh cGl0YWwod29yZCAqdykKKyAgLyogUmV0dXJucyAxIGlmICp3IGlzIGNhcGl0YWxpemVkIGFjY29y ZGluZyB0byB0aGUgZGVmaW5pdGlvbiAqLworICAvKiBpbiBwYXIuZG9jIChhc3N1bWluZyA8Y2Fw PiBpcyAwKSwgb3IgMCBpZiBub3QuICAgICAgICAgICAgICovCisgIHsKKyEgICBjb25zdCBjaGFy ICpwLCAqZW5kOworICAKKyAgICBmb3IgKHAgPSB3LT5jaHJzLCBlbmQgPSBwICsgdy0+bGVuZ3Ro OworISAgICAgICAgcCA8IGVuZCAmJiAhaXNhbG51bSgqKHVuc2lnbmVkIGNoYXIgKilwKTsKKyAg ICAgICAgICsrcCk7CishICAgcmV0dXJuIHAgPCBlbmQgJiYgIWlzbG93ZXIoKih1bnNpZ25lZCBj aGFyICopcCk7CisgIH0KKyAgCisgIAorLS0tIDYxLDk5IC0tLS0KKyAgI2RlZmluZSBpc2N1cmlv dXModykgKCgodyktPmZsYWdzICYgMikgIT0gMCkKKyAgI2RlZmluZSBpc2NhcGl0YWwodykgKCgo dyktPmZsYWdzICYgNCkgIT0gMCkKKyAgCisrIHN0YXRpYyBpbnQgZ2V0V2lkdGgoY29uc3Qgd2No YXJfdCAqYmVnLCBjb25zdCB3Y2hhcl90ICplbmQpCisrIC8qIENvbXB1dGUgKHZpc3VhbCkgd2lk dGggb2YgYSAgd29yZC4gVGhpcyBmdW5jdGlvbiBpcyBhd2FyZSAqLworKyAvKiBhYm91dCBkb3Vi bGUtd2lkdGggY2hhcmFjdGVycyB1c2VkIGluIG9yaWVudGFsIGxhbmdhZ2VzLiAgKi8KKysgewor KyAgIGludCByZXQsIHRtcDsKKysgICAKKysgICBmb3IgKHJldCA9IDA7IGJlZyAhPSBlbmQ7IGJl ZysrKSB7CisrICNpZmRlZiBOT1dJRFRICisrICAgICB0bXAgPSAxOworKyAjZWxzZQorKyAgICAg dG1wID0gd2N3aWR0aCgqYmVnKTsKKysgI2VuZGlmCisrICAgICAvLyBCVUc6IEl0IGlzIG5vdCBy ZWFsbHkgZWFzeSB0byBoYW5kbGUgY2FzZSBvZiB6ZXJvIHdpZHRoIGNoYXJhY3RlcnMuCisrICAg ICAvLyBJZiB3ZSBkb24ndCBkbyB0aGlzLCBzaXplIG1hbGxsb2MgZm9yIHExIHdpbGwgYmUgbGVz cyB0aGFuIHJlYWwgCisrICAgICAvLyBzaXplIGFuZCBwcm9ncmFtIHdpbGwgc2VnZmF1bHQuIFNv IEkgcHJlZmVyIHRvIGhhdmUgYSBidWcgdGhhbiBhIHNlZ2ZhdWx0LgorKyAgICAgaWYgKHRtcCA8 PSAwKQorKyAgICAgICB0bXAgPSAxOworKyAgICAgcmV0ICs9IHRtcDsKKysgICB9CisrICAgCisr ICAgcmV0dXJuIHJldDsKKysgfQorICAKKyAgc3RhdGljIGludCBjaGVja2NhcGl0YWwod29yZCAq dykKKyAgLyogUmV0dXJucyAxIGlmICp3IGlzIGNhcGl0YWxpemVkIGFjY29yZGluZyB0byB0aGUg ZGVmaW5pdGlvbiAqLworICAvKiBpbiBwYXIuZG9jIChhc3N1bWluZyA8Y2FwPiBpcyAwKSwgb3Ig MCBpZiBub3QuICAgICAgICAgICAgICovCisgIHsKKyEgICBjb25zdCB3Y2hhcl90ICpwLCAqZW5k OworICAKKyAgICBmb3IgKHAgPSB3LT5jaHJzLCBlbmQgPSBwICsgdy0+bGVuZ3RoOworISAgICAg ICAgcCA8IGVuZCAmJiAhaXN3YWxudW0oKnApOworICAgICAgICAgKytwKTsKKyEgICByZXR1cm4g cCA8IGVuZCAmJiAhaXN3bG93ZXIoKnApOworICB9CisgIAorICAKKyoqKioqKioqKioqKioqKgor KioqIDc1LDkzICoqKioKKyAgLyogUmV0dXJucyAxIGlmICp3IGlzIGN1cmlvdXMgYWNjb3JkaW5n IHRvICovCisgIC8qIHRoZSBkZWZpbml0aW9uIGluIHBhci5kb2MsIG9yIDAgaWYgbm90LiAqLwor ICB7CishICAgY29uc3QgY2hhciAqc3RhcnQsICpwOworISAgIGNoYXIgY2g7CisgIAorICAgIGZv ciAoc3RhcnQgPSB3LT5jaHJzLCBwID0gc3RhcnQgKyB3LT5sZW5ndGg7ICBwID4gc3RhcnQ7ICAt LXApIHsKKyAgICAgIGNoID0gcFstMV07CishICAgICBpZiAoaXNhbG51bSgqKHVuc2lnbmVkIGNo YXIgKikmY2gpKSByZXR1cm4gMDsKKyEgICAgIGlmIChjaCA9PSAnLicgfHwgY2ggPT0gJz8nIHx8 IGNoID09ICchJyB8fCBjaCA9PSAnOicpIGJyZWFrOworICAgIH0KKyAgCisgICAgaWYgKHAgPD0g c3RhcnQgKyAxKSByZXR1cm4gMDsKKyAgCisgICAgLS1wOworISAgIGRvIGlmIChpc2FsbnVtKCoo dW5zaWduZWQgY2hhciAqKS0tcCkpIHJldHVybiAxOworICAgIHdoaWxlIChwID4gc3RhcnQpOwor ICAKKyAgICByZXR1cm4gMDsKKy0tLSAxMDEsMTE5IC0tLS0KKyAgLyogUmV0dXJucyAxIGlmICp3 IGlzIGN1cmlvdXMgYWNjb3JkaW5nIHRvICovCisgIC8qIHRoZSBkZWZpbml0aW9uIGluIHBhci5k b2MsIG9yIDAgaWYgbm90LiAqLworICB7CishICAgY29uc3Qgd2NoYXJfdCAqc3RhcnQsICpwOwor ISAgIHdjaGFyX3QgY2g7CisgIAorICAgIGZvciAoc3RhcnQgPSB3LT5jaHJzLCBwID0gc3RhcnQg KyB3LT5sZW5ndGg7ICBwID4gc3RhcnQ7ICAtLXApIHsKKyAgICAgIGNoID0gcFstMV07CishICAg ICBpZiAoaXN3YWxudW0oKih3Y2hhcl90ICopJmNoKSkgcmV0dXJuIDA7CishICAgICBpZiAoY2gg PT0gTCcuJyB8fCBjaCA9PSBMJz8nIHx8IGNoID09IEwnIScgfHwgY2ggPT0gTCc6JykgYnJlYWs7 CisgICAgfQorICAKKyAgICBpZiAocCA8PSBzdGFydCArIDEpIHJldHVybiAwOworICAKKyAgICAt LXA7CishICAgZG8gaWYgKGlzd2FsbnVtKCood2NoYXJfdCAqKS0tcCkpIHJldHVybiAxOworICAg IHdoaWxlIChwID4gc3RhcnQpOworICAKKyAgICByZXR1cm4gMDsKKyoqKioqKioqKioqKioqKgor KioqIDk1LDEyNSAqKioqCisgIAorICAKKyAgc3RhdGljIGludCBzaW1wbGVicmVha3Mod29yZCAq aGVhZCwgd29yZCAqdGFpbCwgaW50IEwsIGludCBsYXN0KQorISAKKyEgLyogQ2hvb3NlcyBsaW5l IGJyZWFrcyBpbiBhIGxpc3Qgb2Ygd29yZHMgd2hpY2ggbWF4aW1pemUgdGhlIGxlbmd0aCBvZiB0 aGUgICAqLworISAvKiBzaG9ydGVzdCBsaW5lLiAgTCBpcyB0aGUgbWF4aW11bSBsaW5lIGxlbmd0 aC4gIFRoZSBsYXN0IGxpbmUgY291bnRzIGFzIGEgICovCishIC8qIGxpbmUgb25seSBpZiBsYXN0 IGlzIG5vbi16ZXJvLiBfaGVhZCBtdXN0IHBvaW50IHRvIGEgZHVtbXkgd29yZCwgYW5kIHRhaWwg Ki8KKyEgLyogbXVzdCBwb2ludCB0byB0aGUgbGFzdCB3b3JkLCB3aG9zZSBuZXh0IGZpZWxkIG11 c3QgYmUgTlVMTC4gIFJldHVybnMgdGhlICAqLworISAvKiBsZW5ndGggb2YgdGhlIHNob3J0ZXN0 IGxpbmUgb24gc3VjY2VzcywgLTEgaWYgdGhlcmUgaXMgYSB3b3JkIG9mIGxlbmd0aCAgICovCish IC8qIGdyZWF0ZXIgdGhhbiBMLCBvciBMIGlmIHRoZXJlIGFyZSBubyBsaW5lcy4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKi8KKyAgeworICAgIHdvcmQgKncxLCAqdzI7CisgICAgaW50 IGxpbmVsZW4sIHNjb3JlOworICAKKyAgICBpZiAoIWhlYWQtPm5leHQpIHJldHVybiBMOworICAK KyEgICBmb3IgKHcxID0gdGFpbCwgbGluZWxlbiA9IHcxLT5sZW5ndGg7CisgICAgICAgICB3MSAh PSBoZWFkICYmIGxpbmVsZW4gPD0gTDsKKyEgICAgICAgIGxpbmVsZW4gKz0gaXNzaGlmdGVkKHcx KSwgdzEgPSB3MS0+cHJldiwgbGluZWxlbiArPSAxICsgdzEtPmxlbmd0aCkgeworICAgICAgdzEt PnNjb3JlID0gbGFzdCA/IGxpbmVsZW4gOiBMOworICAgICAgdzEtPm5leHRsaW5lID0gTlVMTDsK KyAgICB9CisgIAorICAgIGZvciAoIDsgIHcxICE9IGhlYWQ7ICB3MSA9IHcxLT5wcmV2KSB7Cisg ICAgICB3MS0+c2NvcmUgPSAtMTsKKyEgICAgIGZvciAobGluZWxlbiA9IHcxLT5sZW5ndGgsICB3 MiA9IHcxLT5uZXh0OworICAgICAgICAgICBsaW5lbGVuIDw9IEw7CishICAgICAgICAgIGxpbmVs ZW4gKz0gMSArIGlzc2hpZnRlZCh3MikgKyB3Mi0+bGVuZ3RoLCAgdzIgPSB3Mi0+bmV4dCkgewor ICAgICAgICBzY29yZSA9IHcyLT5zY29yZTsKKyAgICAgICAgaWYgKGxpbmVsZW4gPCBzY29yZSkg c2NvcmUgPSBsaW5lbGVuOworICAgICAgICBpZiAoc2NvcmUgPj0gdzEtPnNjb3JlKSB7CistLS0g MTIxLDE1MiAtLS0tCisgIAorICAKKyAgc3RhdGljIGludCBzaW1wbGVicmVha3Mod29yZCAqaGVh ZCwgd29yZCAqdGFpbCwgaW50IEwsIGludCBsYXN0KQorISAvKiBDaG9vc2VzIGxpbmUgIGJyZWFr cyBpbiBhICBsaXN0IG9mIHdvcmRzICB3aGljaCBtYXhpbWl6ZSAqLworISAvKiB0aGUgbGVuZ3Ro IG9mICB0aGUgc2hvcnRlc3QgbGluZS4gTCBpcyAgdGhlIG1heGltdW0gbGluZSAqLworISAvKiBs ZW5ndGguIFRoZSBsYXN0ICBsaW5lIGNvdW50cyBhcyBhIGxpbmUgb25seSAgaWYgbGFzdCBpcyAq LworISAvKiBub24temVyby4gX2hlYWQgIG11c3QgcG9pbnQgIHRvIGEgIGR1bW15IHdvcmQsICBh bmQgdGFpbCAqLworISAvKiBtdXN0IHBvaW50ICB0byB0aGUgbGFzdCAgd29yZCwgd2hvc2UgbmV4 dCBmaWVsZCAgbXVzdCBiZSAqLworISAvKiBOVUxMLiAgUmV0dXJucyAgdGhlICBsZW5ndGggIG9m ICB0aGUgIHNob3J0ZXN0ICBsaW5lICBvbiAqLworISAvKiBzdWNjZXNzLCAtMSBpZiB0aGVyZSBp cyBhIHdvcmQgb2YgbGVuZ3RoIGdyZWF0ZXIgdGhhbiBMLCAqLworISAvKiBvciBMIGlmIHRoZXJl IGFyZSBubyBsaW5lcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB7CisgICAg d29yZCAqdzEsICp3MjsKKyAgICBpbnQgbGluZWxlbiwgc2NvcmU7CisgIAorICAgIGlmICghaGVh ZC0+bmV4dCkgcmV0dXJuIEw7CisgIAorISAgIGZvciAodzEgPSB0YWlsLCBsaW5lbGVuID0gdzEt PndpZHRoOworICAgICAgICAgdzEgIT0gaGVhZCAmJiBsaW5lbGVuIDw9IEw7CishICAgICAgICBs aW5lbGVuICs9IGlzc2hpZnRlZCh3MSksIHcxID0gdzEtPnByZXYsIGxpbmVsZW4gKz0gMSArIHcx LT53aWR0aCkgeworICAgICAgdzEtPnNjb3JlID0gbGFzdCA/IGxpbmVsZW4gOiBMOworICAgICAg dzEtPm5leHRsaW5lID0gTlVMTDsKKyAgICB9CisgIAorICAgIGZvciAoIDsgIHcxICE9IGhlYWQ7 ICB3MSA9IHcxLT5wcmV2KSB7CisgICAgICB3MS0+c2NvcmUgPSAtMTsKKyEgICAgIGZvciAobGlu ZWxlbiA9IHcxLT53aWR0aCwgIHcyID0gdzEtPm5leHQ7CisgICAgICAgICAgIGxpbmVsZW4gPD0g TDsKKyEgICAgICAgICAgbGluZWxlbiArPSAxICsgaXNzaGlmdGVkKHcyKSArIHcyLT53aWR0aCwg IHcyID0gdzItPm5leHQpIHsKKyAgICAgICAgc2NvcmUgPSB3Mi0+c2NvcmU7CisgICAgICAgIGlm IChsaW5lbGVuIDwgc2NvcmUpIHNjb3JlID0gbGluZWxlbjsKKyAgICAgICAgaWYgKHNjb3JlID49 IHcxLT5zY29yZSkgeworKioqKioqKioqKioqKioqCisqKiogMTY4LDE3NCAqKioqCisgIAorICAg IHNob3J0ZXN0ID0gc2ltcGxlYnJlYWtzKGhlYWQsdGFpbCx0YXJnZXQsbGFzdCk7CisgICAgaWYg KHNob3J0ZXN0IDwgMCkgeworISAgICAgc3ByaW50ZihlcnJtc2csaW1wb3NzaWJpbGl0eSwxKTsK KyAgICAgIHJldHVybjsKKyAgICB9CisgIAorLS0tIDE5NSwyMDEgLS0tLQorICAKKyAgICBzaG9y dGVzdCA9IHNpbXBsZWJyZWFrcyhoZWFkLHRhaWwsdGFyZ2V0LGxhc3QpOworICAgIGlmIChzaG9y dGVzdCA8IDApIHsKKyEgICAgIHN3cHJpbnRmKGVycm1zZyxlcnJtc2dfc2l6ZSxpbXBvc3NpYmls aXR5LDEpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgCisqKioqKioqKioqKioqKioKKyoqKiAx NzgsMTg2ICoqKioKKyAgICB3MSA9IHRhaWw7CisgICAgZG8geworICAgICAgdzEtPnNjb3JlID0g LTE7CishICAgICBmb3IgKGxpbmVsZW4gPSB3MS0+bGVuZ3RoLCAgdzIgPSB3MS0+bmV4dDsKKyAg ICAgICAgICAgbGluZWxlbiA8PSB0YXJnZXQ7CishICAgICAgICAgIGxpbmVsZW4gKz0gMSArIGlz c2hpZnRlZCh3MikgKyB3Mi0+bGVuZ3RoLCAgdzIgPSB3Mi0+bmV4dCkgeworICAgICAgICBleHRy YSA9IHRhcmdldCAtIGxpbmVsZW47CisgICAgICAgIG1pbmxlbiA9IHNob3J0ZXN0OworICAgICAg ICBpZiAodzIpCistLS0gMjA1LDIxMyAtLS0tCisgICAgdzEgPSB0YWlsOworICAgIGRvIHsKKyAg ICAgIHcxLT5zY29yZSA9IC0xOworISAgICAgZm9yIChsaW5lbGVuID0gdzEtPndpZHRoLCAgdzIg PSB3MS0+bmV4dDsKKyAgICAgICAgICAgbGluZWxlbiA8PSB0YXJnZXQ7CishICAgICAgICAgIGxp bmVsZW4gKz0gMSArIGlzc2hpZnRlZCh3MikgKyB3Mi0+d2lkdGgsICB3MiA9IHcyLT5uZXh0KSB7 CisgICAgICAgIGV4dHJhID0gdGFyZ2V0IC0gbGluZWxlbjsKKyAgICAgICAgbWlubGVuID0gc2hv cnRlc3Q7CisgICAgICAgIGlmICh3MikKKyoqKioqKioqKioqKioqKgorKioqIDIwMiwyMDggKioq KgorICAgIH0gd2hpbGUgKHcxICE9IGhlYWQpOworICAKKyAgICBpZiAoaGVhZC0+bmV4dC0+c2Nv cmUgPCAwKQorISAgICAgc3ByaW50ZihlcnJtc2csaW1wb3NzaWJpbGl0eSwyKTsKKyAgfQorICAK KyAgCistLS0gMjI5LDIzNSAtLS0tCisgICAgfSB3aGlsZSAodzEgIT0gaGVhZCk7CisgIAorICAg IGlmIChoZWFkLT5uZXh0LT5zY29yZSA8IDApCishICAgICBzd3ByaW50ZihlcnJtc2csZXJybXNn X3NpemUsaW1wb3NzaWJpbGl0eSwyKTsKKyAgfQorICAKKyAgCisqKioqKioqKioqKioqKioKKyoq KiAyMjUsMjMzICoqKioKKyAgICB3MSA9IHRhaWw7CisgICAgZG8geworICAgICAgdzEtPnNjb3Jl ID0gTDsKKyEgICAgIGZvciAobnVtZ2FwcyA9IDAsIGV4dHJhID0gTCAtIHcxLT5sZW5ndGgsIHcy ID0gdzEtPm5leHQ7CisgICAgICAgICAgIGV4dHJhID49IDA7CishICAgICAgICAgICsrbnVtZ2Fw cywgZXh0cmEgLT0gMSArIGlzc2hpZnRlZCh3MikgKyB3Mi0+bGVuZ3RoLCB3MiA9IHcyLT5uZXh0 KSB7CisgICAgICAgIGdhcCA9IG51bWdhcHMgPyAoZXh0cmEgKyBudW1nYXBzIC0gMSkgLyBudW1n YXBzIDogTDsKKyAgICAgICAgaWYgKHcyKQorICAgICAgICAgIHNjb3JlID0gdzItPnNjb3JlOwor LS0tIDI1MiwyNjAgLS0tLQorICAgIHcxID0gdGFpbDsKKyAgICBkbyB7CisgICAgICB3MS0+c2Nv cmUgPSBMOworISAgICAgZm9yIChudW1nYXBzID0gMCwgZXh0cmEgPSBMIC0gdzEtPndpZHRoLCB3 MiA9IHcxLT5uZXh0OworICAgICAgICAgICBleHRyYSA+PSAwOworISAgICAgICAgICArK251bWdh cHMsIGV4dHJhIC09IDEgKyBpc3NoaWZ0ZWQodzIpICsgdzItPndpZHRoLCB3MiA9IHcyLT5uZXh0 KSB7CisgICAgICAgIGdhcCA9IG51bWdhcHMgPyAoZXh0cmEgKyBudW1nYXBzIC0gMSkgLyBudW1n YXBzIDogTDsKKyAgICAgICAgaWYgKHcyKQorICAgICAgICAgIHNjb3JlID0gdzItPnNjb3JlOwor KioqKioqKioqKioqKioqCisqKiogMjQ3LDI1MyAqKioqCisgIAorICAgIG1heGdhcCA9IGhlYWQt Pm5leHQtPnNjb3JlOworICAgIGlmIChtYXhnYXAgPj0gTCkgeworISAgICAgc3RyY3B5KGVycm1z ZywgIkNhbm5vdCBqdXN0aWZ5LlxuIik7CisgICAgICByZXR1cm47CisgICAgfQorICAKKy0tLSAy NzQsMjgwIC0tLS0KKyAgCisgICAgbWF4Z2FwID0gaGVhZC0+bmV4dC0+c2NvcmU7CisgICAgaWYg KG1heGdhcCA+PSBMKSB7CishICAgICB3Y3NjcHkoZXJybXNnLCBMIkNhbm5vdCBqdXN0aWZ5Llxu Iik7CisgICAgICByZXR1cm47CisgICAgfQorICAKKyoqKioqKioqKioqKioqKgorKioqIDI1Nywy NjUgKioqKgorICAgIHcxID0gdGFpbDsKKyAgICBkbyB7CisgICAgICB3MS0+c2NvcmUgPSAtMTsK KyEgICAgIGZvciAobnVtZ2FwcyA9IDAsIGV4dHJhID0gTCAtIHcxLT5sZW5ndGgsIHcyID0gdzEt Pm5leHQ7CisgICAgICAgICAgIGV4dHJhID49IDA7CishICAgICAgICAgICsrbnVtZ2FwcywgZXh0 cmEgLT0gMSArIGlzc2hpZnRlZCh3MikgKyB3Mi0+bGVuZ3RoLCB3MiA9IHcyLT5uZXh0KSB7Cisg ICAgICAgIGdhcCA9IG51bWdhcHMgPyAoZXh0cmEgKyBudW1nYXBzIC0gMSkgLyBudW1nYXBzIDog TDsKKyAgICAgICAgaWYgKHcyKQorICAgICAgICAgIHNjb3JlID0gdzItPnNjb3JlOworLS0tIDI4 NCwyOTIgLS0tLQorICAgIHcxID0gdGFpbDsKKyAgICBkbyB7CisgICAgICB3MS0+c2NvcmUgPSAt MTsKKyEgICAgIGZvciAobnVtZ2FwcyA9IDAsIGV4dHJhID0gTCAtIHcxLT53aWR0aCwgdzIgPSB3 MS0+bmV4dDsKKyAgICAgICAgICAgZXh0cmEgPj0gMDsKKyEgICAgICAgICAgKytudW1nYXBzLCBl eHRyYSAtPSAxICsgaXNzaGlmdGVkKHcyKSArIHcyLT53aWR0aCwgdzIgPSB3Mi0+bmV4dCkgewor ICAgICAgICBnYXAgPSBudW1nYXBzID8gKGV4dHJhICsgbnVtZ2FwcyAtIDEpIC8gbnVtZ2FwcyA6 IEw7CisgICAgICAgIGlmICh3MikKKyAgICAgICAgICBzY29yZSA9IHcyLT5zY29yZTsKKyoqKioq KioqKioqKioqKgorKioqIDI4OCwzMjcgKioqKgorICAgIH0gd2hpbGUgKHcxICE9IGhlYWQpOwor ICAKKyAgICBpZiAoaGVhZC0+bmV4dC0+c2NvcmUgPCAwKQorISAgICAgc3ByaW50ZihlcnJtc2cs aW1wb3NzaWJpbGl0eSwzKTsKKyAgfQorICAKKyAgCishIGNoYXIgKipyZWZvcm1hdCgKKyEgICBj b25zdCBjaGFyICogY29uc3QgKmlubGluZXMsIGNvbnN0IGNoYXIgKiBjb25zdCAqZW5kbGluZSwg aW50IGFmcCwgaW50IGZzLAorICAgIGludCBoYW5nLCBpbnQgcHJlZml4LCBpbnQgc3VmZml4LCBp bnQgd2lkdGgsIGludCBjYXAsIGludCBmaXQsIGludCBndWVzcywKKyAgICBpbnQganVzdCwgaW50 IGxhc3QsIGludCBSZXBvcnQsIGludCB0b3VjaCwgZXJybXNnX3QgZXJybXNnCisgICkKKyAgewor ICAgIGludCBudW1pbiwgYWZmaXgsIEwsIG9uZmlyc3R3b3JkID0gMSwgbGluZWxlbiwgbnVtb3V0 LCBudW1nYXBzLCBleHRyYSwgcGhhc2U7CishICAgY29uc3QgY2hhciAqIGNvbnN0ICpsaW5lLCAq KnN1ZmZpeGVzID0gTlVMTCwgKipzdWYsICplbmQsICpwMSwgKnAyOworISAgIGNoYXIgKnExLCAq cTIsICoqb3V0bGluZXMgPSBOVUxMOworICAgIHdvcmQgZHVtbXksICpoZWFkLCAqdGFpbCwgKncx LCAqdzI7CisgICAgYnVmZmVyICpwYnVmID0gTlVMTDsKKyAgCisgIC8qIEluaXRpYWxpemF0aW9u OiAqLworLSAKKyAgICAqZXJybXNnID0gJ1wwJzsKKyAgICBkdW1teS5uZXh0ID0gZHVtbXkucHJl diA9IE5VTEw7CisgICAgZHVtbXkuZmxhZ3MgPSAwOworICAgIGhlYWQgPSB0YWlsID0gJmR1bW15 OworICAgIG51bWluID0gZW5kbGluZSAtIGlubGluZXM7CisgICAgaWYgKG51bWluIDw9IDApIHsK KyEgICAgIHNwcmludGYoZXJybXNnLGltcG9zc2liaWxpdHksNCk7CisgICAgICBnb3RvIHJmY2xl YW51cDsKKyAgICB9CisgICAgbnVtZ2FwcyA9IGV4dHJhID0gMDsgIC8qIHVubmVjZXNzYXJ5LCBi dXQgcXVpZXRzIGNvbXBpbGVyIHdhcm5pbmdzICovCisgIAorICAvKiBBbGxvY2F0ZSBzcGFjZSBm b3IgcG9pbnRlcnMgdG8gdGhlIHN1ZmZpeGVzOiAqLworICAKKyEgICBzdWZmaXhlcyA9IG1hbGxv YyhudW1pbiAqIHNpemVvZiAoY29uc3QgY2hhciAqKSk7CisgICAgaWYgKCFzdWZmaXhlcykgewor ISAgICAgc3RyY3B5KGVycm1zZyxvdXRvZm1lbSk7CisgICAgICBnb3RvIHJmY2xlYW51cDsKKyAg ICB9CisgIAorLS0tIDMxNSwzNTMgLS0tLQorICAgIH0gd2hpbGUgKHcxICE9IGhlYWQpOworICAK KyAgICBpZiAoaGVhZC0+bmV4dC0+c2NvcmUgPCAwKQorISAgICAgc3dwcmludGYoZXJybXNnLGVy cm1zZ19zaXplLGltcG9zc2liaWxpdHksMyk7CisgIH0KKyAgCisgIAorISB3Y2hhcl90ICoqcmVm b3JtYXQoCishICAgY29uc3Qgd2NoYXJfdCAqIGNvbnN0ICppbmxpbmVzLCBjb25zdCB3Y2hhcl90 ICogY29uc3QgKmVuZGxpbmUsIGludCBhZnAsIGludCBmcywKKyAgICBpbnQgaGFuZywgaW50IHBy ZWZpeCwgaW50IHN1ZmZpeCwgaW50IHdpZHRoLCBpbnQgY2FwLCBpbnQgZml0LCBpbnQgZ3Vlc3Ms CisgICAgaW50IGp1c3QsIGludCBsYXN0LCBpbnQgUmVwb3J0LCBpbnQgdG91Y2gsIGVycm1zZ190 IGVycm1zZworICApCisgIHsKKyAgICBpbnQgbnVtaW4sIGFmZml4LCBMLCBvbmZpcnN0d29yZCA9 IDEsIGxpbmVsZW4sIG51bW91dCwgbnVtZ2FwcywgZXh0cmEsIHBoYXNlOworISAgIGNvbnN0IHdj aGFyX3QgKiBjb25zdCAqbGluZSwgKipzdWZmaXhlcyA9IE5VTEwsICoqc3VmLCAqZW5kLCAqcDEs ICpwMjsKKyEgICB3Y2hhcl90ICpxMSwgKnEyLCAqKm91dGxpbmVzID0gTlVMTDsKKyAgICB3b3Jk IGR1bW15LCAqaGVhZCwgKnRhaWwsICp3MSwgKncyOworICAgIGJ1ZmZlciAqcGJ1ZiA9IE5VTEw7 CisgIAorICAvKiBJbml0aWFsaXphdGlvbjogKi8KKyAgICAqZXJybXNnID0gJ1wwJzsKKyAgICBk dW1teS5uZXh0ID0gZHVtbXkucHJldiA9IE5VTEw7CisgICAgZHVtbXkuZmxhZ3MgPSAwOworICAg IGhlYWQgPSB0YWlsID0gJmR1bW15OworICAgIG51bWluID0gZW5kbGluZSAtIGlubGluZXM7Cisg ICAgaWYgKG51bWluIDw9IDApIHsKKyEgICAgIHN3cHJpbnRmKGVycm1zZyxlcnJtc2dfc2l6ZSxp bXBvc3NpYmlsaXR5LDQpOworICAgICAgZ290byByZmNsZWFudXA7CisgICAgfQorICAgIG51bWdh cHMgPSBleHRyYSA9IDA7ICAvKiB1bm5lY2Vzc2FyeSwgYnV0IHF1aWV0cyBjb21waWxlciB3YXJu aW5ncyAqLworICAKKyAgLyogQWxsb2NhdGUgc3BhY2UgZm9yIHBvaW50ZXJzIHRvIHRoZSBzdWZm aXhlczogKi8KKyAgCishICAgc3VmZml4ZXMgPSBtYWxsb2MobnVtaW4gKiBzaXplb2YgKGNvbnN0 IHdjaGFyX3QgKikpOworICAgIGlmICghc3VmZml4ZXMpIHsKKyEgICAgIHdjc2NweShlcnJtc2cs b3V0b2ZtZW0pOworICAgICAgZ290byByZmNsZWFudXA7CisgICAgfQorICAKKyoqKioqKioqKioq KioqKgorKioqIDMzNCwzNDEgKioqKgorICAgIGRvIHsKKyAgICAgIGZvciAoZW5kID0gKmxpbmU7 ICAqZW5kOyAgKytlbmQpOworICAgICAgaWYgKGVuZCAtICpsaW5lIDwgYWZmaXgpIHsKKyEgICAg ICAgc3ByaW50ZihlcnJtc2csCishICAgICAgICAgICAgICAgIkxpbmUgJWQgc2hvcnRlciB0aGFu IDxwcmVmaXg+ICsgPHN1ZmZpeD4gPSAlZCArICVkID0gJWRcbiIsCisgICAgICAgICAgICAgICAg bGluZSAtIGlubGluZXMgKyAxLCBwcmVmaXgsIHN1ZmZpeCwgYWZmaXgpOworICAgICAgICBnb3Rv IHJmY2xlYW51cDsKKyAgICAgIH0KKy0tLSAzNjAsMzY3IC0tLS0KKyAgICBkbyB7CisgICAgICBm b3IgKGVuZCA9ICpsaW5lOyAgKmVuZDsgICsrZW5kKTsKKyAgICAgIGlmIChlbmQgLSAqbGluZSA8 IGFmZml4KSB7CishICAgICAgIHN3cHJpbnRmKGVycm1zZyxlcnJtc2dfc2l6ZSwKKyEgICAgICAg ICAgICAgICBMIkxpbmUgJWQgc2hvcnRlciB0aGFuIDxwcmVmaXg+ICsgPHN1ZmZpeD4gPSAlZCAr ICVkID0gJWRcbiIsCisgICAgICAgICAgICAgICAgbGluZSAtIGlubGluZXMgKyAxLCBwcmVmaXgs IHN1ZmZpeCwgYWZmaXgpOworICAgICAgICBnb3RvIHJmY2xlYW51cDsKKyAgICAgIH0KKyoqKioq KioqKioqKioqKgorKioqIDM0MywzNTkgKioqKgorICAgICAgKnN1ZiA9IGVuZDsKKyAgICAgIHAx ID0gKmxpbmUgKyBwcmVmaXg7CisgICAgICBmb3IgKDs7KSB7CishICAgICAgIHdoaWxlIChwMSA8 IGVuZCAmJiAqcDEgPT0gJyAnKSArK3AxOworICAgICAgICBpZiAocDEgPT0gZW5kKSBicmVhazsK KyAgICAgICAgcDIgPSBwMTsKKyAgICAgICAgaWYgKG9uZmlyc3R3b3JkKSB7CisgICAgICAgICAg cDEgPSAqbGluZSArIHByZWZpeDsKKyAgICAgICAgICBvbmZpcnN0d29yZCA9IDA7CisgICAgICAg IH0KKyEgICAgICAgd2hpbGUgKHAyIDwgZW5kICYmICpwMiAhPSAnICcpICsrcDI7CisgICAgICAg IHcxID0gbWFsbG9jKHNpemVvZiAod29yZCkpOworICAgICAgICBpZiAoIXcxKSB7CishICAgICAg ICAgc3RyY3B5KGVycm1zZyxvdXRvZm1lbSk7CisgICAgICAgICAgZ290byByZmNsZWFudXA7Cisg ICAgICAgIH0KKyAgICAgICAgdzEtPm5leHQgPSBOVUxMOworLS0tIDM2OSwzODUgLS0tLQorICAg ICAgKnN1ZiA9IGVuZDsKKyAgICAgIHAxID0gKmxpbmUgKyBwcmVmaXg7CisgICAgICBmb3IgKDs7 KSB7CishICAgICAgIHdoaWxlIChwMSA8IGVuZCAmJiAqcDEgPT0gTCcgJykgKytwMTsKKyAgICAg ICAgaWYgKHAxID09IGVuZCkgYnJlYWs7CisgICAgICAgIHAyID0gcDE7CisgICAgICAgIGlmIChv bmZpcnN0d29yZCkgeworICAgICAgICAgIHAxID0gKmxpbmUgKyBwcmVmaXg7CisgICAgICAgICAg b25maXJzdHdvcmQgPSAwOworICAgICAgICB9CishICAgICAgIHdoaWxlIChwMiA8IGVuZCAmJiAq cDIgIT0gTCcgJykgKytwMjsKKyAgICAgICAgdzEgPSBtYWxsb2Moc2l6ZW9mICh3b3JkKSk7Cisg ICAgICAgIGlmICghdzEpIHsKKyEgICAgICAgICB3Y3NjcHkoZXJybXNnLG91dG9mbWVtKTsKKyAg ICAgICAgICBnb3RvIHJmY2xlYW51cDsKKyAgICAgICAgfQorICAgICAgICB3MS0+bmV4dCA9IE5V TEw7CisqKioqKioqKioqKioqKioKKyoqKiAzNjEsMzY2ICoqKioKKy0tLSAzODcsMzkzIC0tLS0K KyAgICAgICAgdGFpbCA9IHRhaWwtPm5leHQgPSB3MTsKKyAgICAgICAgdzEtPmNocnMgPSBwMTsK KyAgICAgICAgdzEtPmxlbmd0aCA9IHAyIC0gcDE7CisrICAgICAgIHcxLT53aWR0aCA9IGdldFdp ZHRoKHAxLCBwMik7CisgICAgICAgIHcxLT5mbGFncyA9IDA7CisgICAgICAgIHAxID0gcDI7Cisg ICAgICB9CisqKioqKioqKioqKioqKioKKyoqKiAzNzcsMzgyICoqKioKKy0tLSA0MDQsNDEwIC0t LS0KKyAgICAgICAgICBpZiAoaXNjdXJpb3VzKHcxKSkgeworICAgICAgICAgICAgaWYgKHcxLT5j aHJzW3cxLT5sZW5ndGhdICYmIHcxLT5jaHJzICsgdzEtPmxlbmd0aCArIDEgPT0gdzItPmNocnMp IHsKKyAgICAgICAgICAgICAgdzItPmxlbmd0aCArPSB3MS0+bGVuZ3RoICsgMTsKKysgICAgICAg ICAgICAgdzItPndpZHRoICs9IHcxLT53aWR0aCArIDE7CisgICAgICAgICAgICAgIHcyLT5jaHJz ID0gdzEtPmNocnM7CisgICAgICAgICAgICAgIHcyLT5wcmV2ID0gdzEtPnByZXY7CisgICAgICAg ICAgICAgIHcyLT5wcmV2LT5uZXh0ID0gdzI7CisqKioqKioqKioqKioqKioKKyoqKiAzOTcsNDE2 ICoqKioKKyAgCisgICAgaWYgKFJlcG9ydCkKKyAgICAgIGZvciAodzIgPSBoZWFkLT5uZXh0OyAg dzI7ICB3MiA9IHcyLT5uZXh0KSB7CishICAgICAgIGlmICh3Mi0+bGVuZ3RoID4gTCkgeworISAg ICAgICAgIGxpbmVsZW4gPSB3Mi0+bGVuZ3RoOworICAgICAgICAgIGlmIChsaW5lbGVuID4gZXJy bXNnX3NpemUgLSAxNykKKyAgICAgICAgICAgIGxpbmVsZW4gPSBlcnJtc2dfc2l6ZSAtIDE3Owor ISAgICAgICAgIHNwcmludGYoZXJybXNnLCAiV29yZCB0b28gbG9uZzogJS4qc1xuIiwgbGluZWxl biwgdzItPmNocnMpOworICAgICAgICAgIGdvdG8gcmZjbGVhbnVwOworICAgICAgICB9CisgICAg ICB9CisgICAgZWxzZQorICAgICAgZm9yICh3MiA9IGhlYWQtPm5leHQ7ICB3MjsgIHcyID0gdzIt Pm5leHQpCishICAgICAgIHdoaWxlICh3Mi0+bGVuZ3RoID4gTCkgeworICAgICAgICAgIHcxID0g bWFsbG9jKHNpemVvZiAod29yZCkpOworICAgICAgICAgIGlmICghdzEpIHsKKyEgICAgICAgICAg IHN0cmNweShlcnJtc2csb3V0b2ZtZW0pOworICAgICAgICAgICAgZ290byByZmNsZWFudXA7Cisg ICAgICAgICAgfQorICAgICAgICAgIHcxLT5uZXh0ID0gdzI7CistLS0gNDI1LDQ0NCAtLS0tCisg IAorICAgIGlmIChSZXBvcnQpCisgICAgICBmb3IgKHcyID0gaGVhZC0+bmV4dDsgIHcyOyAgdzIg PSB3Mi0+bmV4dCkgeworISAgICAgICBpZiAodzItPndpZHRoID4gTCkgeworISAgICAgICAgIGxp bmVsZW4gPSB3Mi0+d2lkdGg7CisgICAgICAgICAgaWYgKGxpbmVsZW4gPiBlcnJtc2dfc2l6ZSAt IDE3KQorICAgICAgICAgICAgbGluZWxlbiA9IGVycm1zZ19zaXplIC0gMTc7CishICAgICAgICAg c3dwcmludGYoZXJybXNnLGVycm1zZ19zaXplLCBMIldvcmQgdG9vIGxvbmc6ICUuKmxzXG4iLCBs aW5lbGVuLCB3Mi0+Y2hycyk7CisgICAgICAgICAgZ290byByZmNsZWFudXA7CisgICAgICAgIH0K KyAgICAgIH0KKyAgICBlbHNlCisgICAgICBmb3IgKHcyID0gaGVhZC0+bmV4dDsgIHcyOyAgdzIg PSB3Mi0+bmV4dCkKKyEgICAgICAgd2hpbGUgKHcyLT53aWR0aCA+IEwpIHsKKyAgICAgICAgICB3 MSA9IG1hbGxvYyhzaXplb2YgKHdvcmQpKTsKKyAgICAgICAgICBpZiAoIXcxKSB7CishICAgICAg ICAgICB3Y3NjcHkoZXJybXNnLG91dG9mbWVtKTsKKyAgICAgICAgICAgIGdvdG8gcmZjbGVhbnVw OworICAgICAgICAgIH0KKyAgICAgICAgICB3MS0+bmV4dCA9IHcyOworKioqKioqKioqKioqKioq CisqKiogNDIwLDQyNiAqKioqCistLS0gNDQ4LDQ1NiAtLS0tCisgICAgICAgICAgdzEtPmNocnMg PSB3Mi0+Y2hyczsKKyAgICAgICAgICB3Mi0+Y2hycyArPSBMOworICAgICAgICAgIHcxLT5sZW5n dGggPSBMOworKyAgICAgICAgIHcxLT53aWR0aCA9IGdldFdpZHRoKHcxLT5jaHJzLCB3MS0+Y2hy cyArIEwpOworICAgICAgICAgIHcyLT5sZW5ndGggLT0gTDsKKysgICAgICAgICB3Mi0+d2lkdGgg LT0gdzEtPndpZHRoOworICAgICAgICAgIHcxLT5mbGFncyA9IDA7CisgICAgICAgICAgaWYgKGlz Y2FwaXRhbCh3MikpIHsKKyAgICAgICAgICAgIHcxLT5mbGFncyB8PSBXX0NBUElUQUw7CisqKioq KioqKioqKioqKioKKyoqKiA0NDQsNDUyICoqKioKKyAgICAgIEwgPSAwOworICAgICAgdzEgPSBo ZWFkLT5uZXh0OworICAgICAgd2hpbGUgKHcxKSB7CishICAgICAgIGZvciAobGluZWxlbiA9IHcx LT5sZW5ndGgsIHcyID0gdzEtPm5leHQ7CisgICAgICAgICAgICAgdzIgIT0gdzEtPm5leHRsaW5l OworISAgICAgICAgICAgIGxpbmVsZW4gKz0gMSArIGlzc2hpZnRlZCh3MikgKyB3Mi0+bGVuZ3Ro LCB3MiA9IHcyLT5uZXh0KTsKKyAgICAgICAgaWYgKGxpbmVsZW4gPiBMKSBMID0gbGluZWxlbjsK KyAgICAgICAgdzEgPSB3MjsKKyAgICAgIH0KKy0tLSA0NzQsNDgyIC0tLS0KKyAgICAgIEwgPSAw OworICAgICAgdzEgPSBoZWFkLT5uZXh0OworICAgICAgd2hpbGUgKHcxKSB7CishICAgICAgIGZv ciAobGluZWxlbiA9IHcxLT53aWR0aCwgdzIgPSB3MS0+bmV4dDsKKyAgICAgICAgICAgICB3MiAh PSB3MS0+bmV4dGxpbmU7CishICAgICAgICAgICAgbGluZWxlbiArPSAxICsgaXNzaGlmdGVkKHcy KSArIHcyLT53aWR0aCwgdzIgPSB3Mi0+bmV4dCk7CisgICAgICAgIGlmIChsaW5lbGVuID4gTCkg TCA9IGxpbmVsZW47CisgICAgICAgIHcxID0gdzI7CisgICAgICB9CisqKioqKioqKioqKioqKioK KyoqKiA0NTQsNTIwICoqKioKKyAgCisgIC8qIENvbnN0cnVjdCB0aGUgbGluZXM6ICovCisgIAor ISAgIHBidWYgPSBuZXdidWZmZXIoc2l6ZW9mIChjaGFyICopLCBlcnJtc2cpOworICAgIGlmICgq ZXJybXNnKSBnb3RvIHJmY2xlYW51cDsKKyAgCisgICAgbnVtb3V0ID0gMDsKKyAgICB3MSA9IGhl YWQtPm5leHQ7CisgICAgd2hpbGUgKG51bW91dCA8IGhhbmcgfHwgdzEpIHsKKyAgICAgIGlmICh3 MSkKKyEgICAgICAgZm9yICh3MiA9IHcxLT5uZXh0LCBudW1nYXBzID0gMCwgZXh0cmEgPSBMIC0g dzEtPmxlbmd0aDsKKyAgICAgICAgICAgICB3MiAhPSB3MS0+bmV4dGxpbmU7CishICAgICAgICAg ICAgKytudW1nYXBzLCBleHRyYSAtPSAxICsgaXNzaGlmdGVkKHcyKSArIHcyLT5sZW5ndGgsIHcy ID0gdzItPm5leHQpOworICAgICAgbGluZWxlbiA9IHN1ZmZpeCB8fCAoanVzdCAmJiAodzIgfHwg bGFzdCkpID8KKyAgICAgICAgICAgICAgICAgIEwgKyBhZmZpeCA6CisgICAgICAgICAgICAgICAg ICB3MSA/IHByZWZpeCArIEwgLSBleHRyYSA6IHByZWZpeDsKKyEgICAgIHExID0gbWFsbG9jKChs aW5lbGVuICsgMSkgKiBzaXplb2YgKGNoYXIpKTsKKyAgICAgIGlmICghcTEpIHsKKyEgICAgICAg c3RyY3B5KGVycm1zZyxvdXRvZm1lbSk7CisgICAgICAgIGdvdG8gcmZjbGVhbnVwOworICAgICAg fQorICAgICAgYWRkaXRlbShwYnVmLCAmcTEsIGVycm1zZyk7CisgICAgICBpZiAoKmVycm1zZykg Z290byByZmNsZWFudXA7CisgICAgICArK251bW91dDsKKyAgICAgIHEyID0gcTEgKyBwcmVmaXg7 CishICAgICBpZiAgICAgIChudW1vdXQgPD0gbnVtaW4pIG1lbWNweShxMSwgaW5saW5lc1tudW1v dXQgLSAxXSwgcHJlZml4KTsKKyEgICAgIGVsc2UgaWYgKG51bWluICA+ICBoYW5nICkgbWVtY3B5 KHExLCBlbmRsaW5lWy0xXSwgICAgICAgICBwcmVmaXgpOworICAgICAgZWxzZSB7CisgICAgICAg IGlmIChhZnAgPiBwcmVmaXgpIGFmcCA9IHByZWZpeDsKKyEgICAgICAgbWVtY3B5KHExLCBlbmRs aW5lWy0xXSwgYWZwKTsKKyAgICAgICAgcTEgKz0gYWZwOworISAgICAgICB3aGlsZSAocTEgPCBx MikgKnExKysgPSAnICc7CisgICAgICB9CisgICAgICBxMSA9IHEyOworICAgICAgaWYgKHcxKSB7 CisgICAgICAgIHBoYXNlID0gbnVtZ2FwcyAvIDI7CisgICAgICAgIGZvciAodzIgPSB3MTsgIDsg ICkgeworISAgICAgICAgIG1lbWNweShxMSwgdzItPmNocnMsIHcyLT5sZW5ndGgpOworICAgICAg ICAgIHExICs9IHcyLT5sZW5ndGg7CisgICAgICAgICAgdzIgPSB3Mi0+bmV4dDsKKyAgICAgICAg ICBpZiAodzIgPT0gdzEtPm5leHRsaW5lKSBicmVhazsKKyEgICAgICAgICAqcTErKyA9ICcgJzsK KyAgICAgICAgICBpZiAoanVzdCAmJiAodzEtPm5leHRsaW5lIHx8IGxhc3QpKSB7CisgICAgICAg ICAgICBwaGFzZSArPSBleHRyYTsKKyAgICAgICAgICAgIHdoaWxlIChwaGFzZSA+PSBudW1nYXBz KSB7CishICAgICAgICAgICAgICpxMSsrID0gJyAnOworICAgICAgICAgICAgICBwaGFzZSAtPSBu dW1nYXBzOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyEgICAgICAgICBpZiAoaXNzaGlm dGVkKHcyKSkgKnExKysgPSAnICc7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHEyICs9IGxp bmVsZW4gLSBhZmZpeDsKKyEgICAgIHdoaWxlIChxMSA8IHEyKSAqcTErKyA9ICcgJzsKKyAgICAg IHEyID0gcTEgKyBzdWZmaXg7CishICAgICBpZiAgICAgIChudW1vdXQgPD0gbnVtaW4pIG1lbWNw eShxMSwgc3VmZml4ZXNbbnVtb3V0IC0gMV0sIHN1ZmZpeCk7CishICAgICBlbHNlIGlmIChudW1p biAgPiAgaGFuZyApIG1lbWNweShxMSwgc3VmZml4ZXNbbnVtaW4gIC0gMV0sIHN1ZmZpeCk7Cisg ICAgICBlbHNlIHsKKyAgICAgICAgaWYgKGZzID4gc3VmZml4KSBmcyA9IHN1ZmZpeDsKKyEgICAg ICAgbWVtY3B5KHExLCBzdWZmaXhlc1tudW1pbiAtIDFdLCBmcyk7CisgICAgICAgIHExICs9IGZz OworISAgICAgICB3aGlsZShxMSA8IHEyKSAqcTErKyA9ICcgJzsKKyAgICAgIH0KKyEgICAgICpx MiA9ICdcMCc7CisgICAgICBpZiAodzEpIHcxID0gdzEtPm5leHRsaW5lOworICAgIH0KKyAgCist LS0gNDg0LDU1MCAtLS0tCisgIAorICAvKiBDb25zdHJ1Y3QgdGhlIGxpbmVzOiAqLworICAKKyEg ICBwYnVmID0gbmV3YnVmZmVyKHNpemVvZiAod2NoYXJfdCAqKSwgZXJybXNnKTsKKyAgICBpZiAo KmVycm1zZykgZ290byByZmNsZWFudXA7CisgIAorICAgIG51bW91dCA9IDA7CisgICAgdzEgPSBo ZWFkLT5uZXh0OworICAgIHdoaWxlIChudW1vdXQgPCBoYW5nIHx8IHcxKSB7CisgICAgICBpZiAo dzEpCishICAgICAgIGZvciAodzIgPSB3MS0+bmV4dCwgbnVtZ2FwcyA9IDAsIGV4dHJhID0gTCAt IHcxLT53aWR0aDsKKyAgICAgICAgICAgICB3MiAhPSB3MS0+bmV4dGxpbmU7CishICAgICAgICAg ICAgKytudW1nYXBzLCBleHRyYSAtPSAxICsgaXNzaGlmdGVkKHcyKSArIHcyLT53aWR0aCwgdzIg PSB3Mi0+bmV4dCk7CisgICAgICBsaW5lbGVuID0gc3VmZml4IHx8IChqdXN0ICYmICh3MiB8fCBs YXN0KSkgPworICAgICAgICAgICAgICAgICAgTCArIGFmZml4IDoKKyAgICAgICAgICAgICAgICAg IHcxID8gcHJlZml4ICsgTCAtIGV4dHJhIDogcHJlZml4OworISAgICAgcTEgPSBtYWxsb2MoKGxp bmVsZW4gKyAxKSAqIHNpemVvZiAod2NoYXJfdCkpOworICAgICAgaWYgKCFxMSkgeworISAgICAg ICB3Y3NjcHkoZXJybXNnLG91dG9mbWVtKTsKKyAgICAgICAgZ290byByZmNsZWFudXA7CisgICAg ICB9CisgICAgICBhZGRpdGVtKHBidWYsICZxMSwgZXJybXNnKTsKKyAgICAgIGlmICgqZXJybXNn KSBnb3RvIHJmY2xlYW51cDsKKyAgICAgICsrbnVtb3V0OworICAgICAgcTIgPSBxMSArIHByZWZp eDsKKyEgICAgIGlmICAgICAgKG51bW91dCA8PSBudW1pbikgbWVtY3B5KHExLCBpbmxpbmVzW251 bW91dCAtIDFdLCBwcmVmaXggKiBzaXplb2Yod2NoYXJfdCkpOworISAgICAgZWxzZSBpZiAobnVt aW4gID4gIGhhbmcgKSBtZW1jcHkocTEsIGVuZGxpbmVbLTFdLCAgICAgICAgIHByZWZpeCAqIHNp emVvZih3Y2hhcl90KSk7CisgICAgICBlbHNlIHsKKyAgICAgICAgaWYgKGFmcCA+IHByZWZpeCkg YWZwID0gcHJlZml4OworISAgICAgICBtZW1jcHkocTEsIGVuZGxpbmVbLTFdLCBhZnAgKiBzaXpl b2Yod2NoYXJfdCkpOworICAgICAgICBxMSArPSBhZnA7CishICAgICAgIHdoaWxlIChxMSA8IHEy KSAqcTErKyA9IEwnICc7CisgICAgICB9CisgICAgICBxMSA9IHEyOworICAgICAgaWYgKHcxKSB7 CisgICAgICAgIHBoYXNlID0gbnVtZ2FwcyAvIDI7CisgICAgICAgIGZvciAodzIgPSB3MTsgIDsg ICkgeworISAgICAgICAgIG1lbWNweShxMSwgdzItPmNocnMsIHcyLT5sZW5ndGggKiBzaXplb2Yo d2NoYXJfdCkpOworICAgICAgICAgIHExICs9IHcyLT5sZW5ndGg7CisgICAgICAgICAgdzIgPSB3 Mi0+bmV4dDsKKyAgICAgICAgICBpZiAodzIgPT0gdzEtPm5leHRsaW5lKSBicmVhazsKKyEgICAg ICAgICAqcTErKyA9IEwnICc7CisgICAgICAgICAgaWYgKGp1c3QgJiYgKHcxLT5uZXh0bGluZSB8 fCBsYXN0KSkgeworICAgICAgICAgICAgcGhhc2UgKz0gZXh0cmE7CisgICAgICAgICAgICB3aGls ZSAocGhhc2UgPj0gbnVtZ2FwcykgeworISAgICAgICAgICAgICAqcTErKyA9IEwnICc7CisgICAg ICAgICAgICAgIHBoYXNlIC09IG51bWdhcHM7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQor ISAgICAgICAgIGlmIChpc3NoaWZ0ZWQodzIpKSAqcTErKyA9IEwnICc7CisgICAgICAgIH0KKyAg ICAgIH0KKyAgICAgIHEyICs9IGxpbmVsZW4gLSBhZmZpeDsKKyEgICAgIHdoaWxlIChxMSA8IHEy KSAqcTErKyA9IEwnICc7CisgICAgICBxMiA9IHExICsgc3VmZml4OworISAgICAgaWYgICAgICAo bnVtb3V0IDw9IG51bWluKSBtZW1jcHkocTEsIHN1ZmZpeGVzW251bW91dCAtIDFdLCBzdWZmaXgg KiBzaXplb2Yod2NoYXJfdCkpOworISAgICAgZWxzZSBpZiAobnVtaW4gID4gIGhhbmcgKSBtZW1j cHkocTEsIHN1ZmZpeGVzW251bWluICAtIDFdLCBzdWZmaXggKiBzaXplb2Yod2NoYXJfdCkpOwor ICAgICAgZWxzZSB7CisgICAgICAgIGlmIChmcyA+IHN1ZmZpeCkgZnMgPSBzdWZmaXg7CishICAg ICAgIG1lbWNweShxMSwgc3VmZml4ZXNbbnVtaW4gLSAxXSwgZnMgKiBzaXplb2Yod2NoYXJfdCkp OworICAgICAgICBxMSArPSBmczsKKyEgICAgICAgd2hpbGUocTEgPCBxMikgKnExKysgPSBMJyAn OworICAgICAgfQorISAgICAgKnEyID0gTCdcMCc7CisgICAgICBpZiAodzEpIHcxID0gdzEtPm5l eHRsaW5lOworICAgIH0KKyAgCisqKioqKioqKioqKioqKioKKyoqKiA1NDMsNTQ3ICoqKioKKy0t LSA1NzMsNTc4IC0tLS0KKyAgICAgIGZyZWVidWZmZXIocGJ1Zik7CisgICAgfQorICAKKysgICAK KyAgICByZXR1cm4gb3V0bGluZXM7CisgIH0KK2RpZmYgLWMgLi9yZWZvcm1hdC5oIC4uL1BhcjE1 Mi11bmljb2RlL3JlZm9ybWF0LmgKKyoqKiAuL3JlZm9ybWF0LmgJMjAwMS0wMy0wOSAwMzo1Mzo0 My4wMDAwMDAwMDAgKzAzMDAKKy0tLSAuLi9QYXIxNTItdW5pY29kZS9yZWZvcm1hdC5oCTIwMTkt MTAtMjYgMTc6MjE6MDguNTQ5MDUwODUzICswMzAwCisqKioqKioqKioqKioqKioKKyoqKiAxLDE4 ICoqKioKKyEgLyoqKioqKioqKioqKioqKioqKioqKi8KKyEgLyogcmVmb3JtYXQuaCAgICAgICAg Ki8KKyEgLyogZm9yIFBhciAxLjUyICAgICAgKi8KKyEgLyogQ29weXJpZ2h0IDIwMDEgYnkgKi8K KyEgLyogQWRhbSBNLiBDb3N0ZWxsbyAgKi8KKyEgLyoqKioqKioqKioqKioqKioqKioqKi8KKyAg CisgIC8qIFRoaXMgaXMgQU5TSSBDIGNvZGUgKEM4OSkuICovCisgIAorICAKKyAgI2luY2x1ZGUg ImVycm1zZy5oIgorICAKKyEgCishIGNoYXIgKipyZWZvcm1hdCgKKyEgICBjb25zdCBjaGFyICog Y29uc3QgKmlubGluZXMsIGNvbnN0IGNoYXIgKiBjb25zdCAqZW5kbGluZSwgaW50IGFmcCwgaW50 IGZzLAorICAgIGludCBoYW5nLCBpbnQgcHJlZml4LCBpbnQgc3VmZml4LCBpbnQgd2lkdGgsIGlu dCBjYXAsIGludCBmaXQsIGludCBndWVzcywKKyAgICBpbnQganVzdCwgaW50IGxhc3QsIGludCBS ZXBvcnQsIGludCB0b3VjaCwgZXJybXNnX3QgZXJybXNnCisgICk7CistLS0gMSwyMCAtLS0tCish IC8qKioqKioqKioqKioqKioqKioqKioqKi8KKyEgLyogcmVmb3JtYXQuaCAgICAgICAgICAqLwor ISAvKiBmb3IgUGFyIDEuNTItaTE4bi40ICovCishIC8qIENvcHlyaWdodCAyMDAxIGJ5ICAgKi8K KyEgLyogQWRhbSBNLiBDb3N0ZWxsbyAgICAqLworISAvKiBNb2RpZmllZCBieSAgICAgICAgICov CishIC8qIErDqXLDtG1lIFBvdWlsbGVyICAgICAqLworISAvKioqKioqKioqKioqKioqKioqKioq KiovCisgIAorICAvKiBUaGlzIGlzIEFOU0kgQyBjb2RlIChDODkpLiAqLworICAKKyAgCisgICNp bmNsdWRlICJlcnJtc2cuaCIKKysgI2luY2x1ZGUgPHdjaGFyLmg+CisgIAorISB3Y2hhcl90ICoq cmVmb3JtYXQoCishICAgY29uc3Qgd2NoYXJfdCAqIGNvbnN0ICppbmxpbmVzLCBjb25zdCB3Y2hh cl90ICogY29uc3QgKmVuZGxpbmUsIGludCBhZnAsIGludCBmcywKKyAgICBpbnQgaGFuZywgaW50 IHByZWZpeCwgaW50IHN1ZmZpeCwgaW50IHdpZHRoLCBpbnQgY2FwLCBpbnQgZml0LCBpbnQgZ3Vl c3MsCisgICAgaW50IGp1c3QsIGludCBsYXN0LCBpbnQgUmVwb3J0LCBpbnQgdG91Y2gsIGVycm1z Z190IGVycm1zZworICApOworZGlmZiAtYyAuL3JlbGVhc2Vub3RlcyAuLi9QYXIxNTItdW5pY29k ZS9yZWxlYXNlbm90ZXMKKyoqKiAuL3JlbGVhc2Vub3RlcwkyMDAxLTA0LTMwIDAxOjEyOjA1LjAw MDAwMDAwMCArMDQwMAorLS0tIC4uL1BhcjE1Mi11bmljb2RlL3JlbGVhc2Vub3RlcwkyMDE5LTEw LTI2IDE3OjIxOjA4LjU0OTA1MDg1MyArMDMwMAorKioqKioqKioqKioqKioqCisqKiogMSwxMiAq KioqCishICAgKioqKioqKioqKioqKioqKioqKioqCishICAgKiByZWxlYXNlbm90ZXMgICAgICAq CishICAgKiBmb3IgUGFyIDEuNTIgICAgICAqCishICAgKiBDb3B5cmlnaHQgMjAwMSBieSAqCish ICAgKiBBZGFtIE0uIENvc3RlbGxvICAqCishICAgKioqKioqKioqKioqKioqKioqKioqCisgIAor ICAKKyAgRWFjaCBlbnRyeSBiZWxvdyBkZXNjcmliZXMgY2hhbmdlcyBzaW5jZSB0aGUgcHJldmlv dXMgdmVyc2lvbi4KKyAgCisgIFBhciAxLjUyIHJlbGVhc2VkIDIwMDEtQXByLTI5CisgICAgICBG aXhlZCBhIHBvcnRhYmlsaXR5IHByb2JsZW0gcmVnYXJkaW5nIHVuc2lnbmVkIGNoYXIgdmVyc3Vz IGNoYXIuCistLS0gMSwyOCAtLS0tCishICAgKioqKioqKioqKioqKioqKioqKioqKioKKyEgICAq IHJlbGVhc2Vub3RlcyAgICAgICAgKgorISAgICogZm9yIFBhciAxLjUyLWkxOG4uNCAqCishICAg KiBDb3B5cmlnaHQgMjAwMSBieSAgICoKKyEgICAqIEFkYW0gTS4gQ29zdGVsbG8gICAgKgorISAg ICogTW9kaWZpZWQgYnkgICAgICAgICAqCishICAgKiBKw6lyw7RtZSBQb3VpbGxlciAgICAgKgor ISAgICoqKioqKioqKioqKioqKioqKioqKioqCisgIAorICAKKyAgRWFjaCBlbnRyeSBiZWxvdyBk ZXNjcmliZXMgY2hhbmdlcyBzaW5jZSB0aGUgcHJldmlvdXMgdmVyc2lvbi4KKysgUGFyIDEuNTIt aTE4bi40IHJlbGVhc2VkIDIwMDktTWF5LTA1CisrICAgICBDaGFuZ2UgbmVhcmx5IGFsbCBjaGFy IGluIHdjaGFyX3QgcmVtb3ZlIG5pZ2h0bWFyZSBvZiB1bnNpZ25lZCBjaGFyIHZzIHNpZ25lZCBj aGFyCisrICAgICBGaXggYnVncyB3aXRoIG9wdGlvbiAncScKKysgICAgIEZpeCBidWdzIHdpdGgg J1xuJworKyAKKysgUGFyIDEuNTItaTE4bi4zIHJlbGVhc2VkIDIwMDYtT2N0LTAzCisrICAgICBG aXggYnVnIHdpdGggb3B0aW9uICdnJworKyAKKysgUGFyIDEuNTItaTE4bi4yIHJlbGVhc2VkIDIw MDYtQXVnLTAzCisrICAgICBGaXggYnVnIGRlYmlhbiAjMzEwNDk1LgorKyAKKysgUGFyIDEuNTIt aTE4bi4xIHJlbGVhc2VkIDIwMDYtSnVuLTIyCisrICAgICBDaGFuZ2VkIGNoYXIgaW4gd2NoYXJf dC4gQWxsb3cgc3VwcG9ydCBvZiBtdWx0aWJ5dGVzIGNoYXJhY3RlcnMuCisrICAgICBBZGRlZCBz dXBwb3J0IGZvciBkb3VibGUtd2lkdGggY2hhcmFjdGVycy4KKyAgCisgIFBhciAxLjUyIHJlbGVh c2VkIDIwMDEtQXByLTI5CisgICAgICBGaXhlZCBhIHBvcnRhYmlsaXR5IHByb2JsZW0gcmVnYXJk aW5nIHVuc2lnbmVkIGNoYXIgdmVyc3VzIGNoYXIuCivQntCx0YnQuNC1INC/0L7QtNC60LDRgtCw 0LvQvtCz0Lg6IC4vdGVzdCDQuCAuLi9QYXIxNTItdW5pY29kZS90ZXN0CgpGcm9tIDBkZTQ1ZTMz NWI5NDMyNjA3NWM5YjgzNjE1MDhkNmI2MDFlM2M2NzUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAx CkZyb206IFZhbFRpbWNoZW5rbyA8VmFsVGltY2hlbmtvQGdtYWlsLmNvbT4KRGF0ZTogU3VuLCAy NyBPY3QgMjAxOSAxMTozOTowNSArMDMwMApTdWJqZWN0OiBbUEFUQ0ggMi8yXSBwYXI6IGJ1bXBl ZCByZXZpc2lvbgoKLS0tCiBzcmNwa2dzL3Bhci90ZW1wbGF0ZSB8IDIgKy0KIDEgZmlsZSBjaGFu Z2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL3NyY3BrZ3Mv cGFyL3RlbXBsYXRlIGIvc3JjcGtncy9wYXIvdGVtcGxhdGUKaW5kZXggNTg1YTg4ODc4NDEuLmQz ZTJkNTg4NmFkIDEwMDY0NAotLS0gYS9zcmNwa2dzL3Bhci90ZW1wbGF0ZQorKysgYi9zcmNwa2dz L3Bhci90ZW1wbGF0ZQpAQCAtMSw3ICsxLDcgQEAKICMgVGVtcGxhdGUgZmlsZSBmb3IgJ3BhcicK IHBrZ25hbWU9cGFyCiB2ZXJzaW9uPTEuNTIKLXJldmlzaW9uPTMKK3JldmlzaW9uPTQKIHdya3Ny Yz1QYXIxNTIKIGJ1aWxkX3N0eWxlPWdudS1jb25maWd1cmUKIHNob3J0X2Rlc2M9IlBhcmFncmFw aCByZWZvcm1hdHRlciIK --===============5652147208788952338==--