From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 561 invoked by alias); 26 Jul 2013 04:03:02 -0000 Mailing-List: contact cygwin-developers-help@cygwin.com; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-developers-owner@cygwin.com Mail-Followup-To: cygwin-developers@cygwin.com Received: (qmail 489 invoked by uid 89); 26 Jul 2013 04:03:01 -0000 X-Spam-SWARE-Status: No, score=-3.2 required=5.0 tests=AWL,BAYES_50,FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,KAM_STOCKGEN,KHOP_PGP_INLINE,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,RDNS_NONE,SPF_PASS,TW_CP,TW_GV,TW_NV,TW_RG,TW_VB autolearn=no version=3.3.1 Received: from Unknown (HELO mail-lb0-f171.google.com) (209.85.217.171) by sourceware.org (qpsmtpd/0.84/v0.84-167-ge50287c) with ESMTP; Fri, 26 Jul 2013 04:02:58 +0000 Received: by mail-lb0-f171.google.com with SMTP id 13so2136394lba.16 for ; Thu, 25 Jul 2013 21:02:49 -0700 (PDT) X-Received: by 10.152.21.99 with SMTP id u3mr20815508lae.18.1374811369685; Thu, 25 Jul 2013 21:02:49 -0700 (PDT) Received: from [192.168.4.39] (broadband-95-84-200-156.nationalcablenetworks.ru. [95.84.200.156]) by mx.google.com with ESMTPSA id g7sm17997083lae.6.2013.07.25.21.02.48 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Thu, 25 Jul 2013 21:02:49 -0700 (PDT) Message-ID: <51F1F4E5.2050508@gmail.com> Date: Fri, 26 Jul 2013 04:03:00 -0000 From: LRN User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Thunderbird/25.0a1 MIME-Version: 1.0 To: cygwin-developers@cygwin.com Subject: Re: MSYS mode (continue) References: <20130704163612.GA4729@ednor.casa.cgf.cx> <20130705090704.GB4009@calimero.vinschen.de> <20130705164230.GA7282@ednor.casa.cgf.cx> <20130711111744.GG15346@calimero.vinschen.de> <51F123EB.9000900@cwilson.fastmail.fm> <20130725150209.GA15619@calimero.vinschen.de> <51F16C82.7030509@cwilson.fastmail.fm> <20130725205320.GA2725@ednor.casa.cgf.cx> <51F193AF.8020203@gmail.com> <51F19911.1020705@cygwin.com> <20130726015517.GB1954@ednor.casa.cgf.cx> In-Reply-To: <20130726015517.GB1954@ednor.casa.cgf.cx> Content-Type: multipart/mixed; boundary="------------030100070709080206050506" X-Virus-Found: No X-SW-Source: 2013-07/txt/msg00036.txt.bz2 This is a multi-part message in MIME format. --------------030100070709080206050506 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Content-length: 3835 -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On 26.07.2013 05:55, Christopher Faylor wrote: > On Thu, Jul 25, 2013 at 05:30:57PM -0400, Larry Hall (Cygwin Developers) wrote: >> On 7/25/2013 5:07 PM, LRN wrote: >>> -----BEGIN PGP SIGNED MESSAGE----- >>> Hash: SHA1 >>> >>> On 26.07.2013 00:53, Christopher Faylor wrote: >>>> On Thu, Jul 25, 2013 at 02:20:50PM -0400, Charles Wilson wrote: >>>>>> But underlying there's still a normal Cygwin DLL and >>>>>> most tools could just be copied verbatim since they don't need this >>>>>> extra functionality. >>>>> >>>>> And that's the bit where I disagree. Sure, some scripting tools might >>>>> not need adjustment, so long as their interpreter was $MSYS-enabled >>>>> (e.g. automake -> msys-perl, msys-bash) -- because the script will "see" >>>>> dos-style paths, so its interpreter better be able to handle them. >>>>> >>>>> But unless you restrict yourself to only passing around relative paths >>>>> (or god forbid, that old "unity mount" idea), any .exe will need to live >>>>> in one world or the other. Otherwise, how would paths be interpreted? >>>>> Using which tools' mount table? >>>>> >>>>> Naturally from the command line I can compensate: >>>>> >>>>> msys$ /c/cygwin/bin/foobar.exe $(/c/cygwin/bin/cygpath.exe -u $(cygpath >>>>> -d /msys/mount/table/path) ) >>>>> >>>>> but yee gods that'd be annoying in any automated setting. >>>> >>>> I don't know if this helps but the vague plan is to now have two DLLs >>>> where before you only had one. You'd still be providing "MSYS" binaries >>>> which relied on "MSYS.dll" but, under the hood, MSYS.dll would be only a >>>> small dll which relied on cygwin1.dll for all of the heavy lifting. >>>> >>>> You'd still have a normal MSYS distribution and it would still, in theory, >>>> support everything (with the possible exception of very lax security) that >>>> the old MSYS did. An MSYS release would consist of MSYS*.dll, cygwin1.dll, >>>> bash, etc. >>> >>> Out of curiosity: why do you insist on having MSYS functionality in a >>> separate dll, when it could be just part of cygwin1.dll (disableable and >>> enableable in the same way other Cygwin features are disabled/enabled - >>> via CYGWIN envvar)? What advantage would that give, that justifies the >>> increase in implementation complexity (hooking up the dll, etc)? Was >>> that justified earlier in this thread and i just neglected to read that >>> far back? >> >> Yes, it was mentioned. The idea is to keep the MSYS-specific stuff separate >> so Cygwin functionality isn't impacted by what MSYS wants. This reduces >> the complexity of the Cygwin code at least. > > Right. Thanks Larry. > > The bottom line is that we don't want there to be a bunch of "if > (is_msys)"'s in the code. We don't want to have to worry about how msys > does things. I don't want to have to inspect msys patches, except for > requests for a new hook. > > A hook will be a fast no-op in the pure cygwin cases. There would be > very little "implementation complexity". OK. I've attached the patch that alexey gave me recently, if pointless cygwin->msys renames are removed from msys2, this is what msys2 boils down to. Please specify how the hooks will look, now that you know which points of the code need to be hooked up. - -- O< ascii ribbon - stop html email! - www.asciiribbon.org -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (MingW32) iQEcBAEBAgAGBQJR8fTZAAoJEOs4Jb6SI2CwoU0H/1YQSxBz9NisJcCj6wUfo07u yE7uqieB4sxv3dEJAigBHNVYMbEEqDehY/TVFqMoRIw9SXBSpBWFMla49w8aRHeA 7JUP3+5/cyQYJHXSLBMZBAxdYmSe61PrZVXaH/fMHVuuv31457/He/GaNrM+mos+ q6QqvB2S+lVDIBfZALPyYdS+VZ7jgDVKC2Eb5oFyrEV3EOBnkOFu/PjLUzm1ewMH X5bn9HHiqHKHUxsss2LBbtZLO75ptLdFPBF+TY83H1TJDHDb3byFGSSGtXhB9+iB q0j6fhXEqGT+0nCaXangHtt02zx9fvUMLb6bPJ36JTrhv3F/nxEPOjnUtq7Hzm0= =DGCV -----END PGP SIGNATURE----- --------------030100070709080206050506 Content-Type: text/plain; charset=windows-1251; name="cygwin-msys.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="cygwin-msys.patch" Content-length: 36047 ZGlmZiAtTmF1ciBjdXJyX2N5Zy93aW5zdXAvY3lnd2luL2Vudmlyb24uY2Mg Y3Vycl9tc3lzL3dpbnN1cC9jeWd3aW4vZW52aXJvbi5jYw0KLS0tIGN1cnJf Y3lnL3dpbnN1cC9jeWd3aW4vZW52aXJvbi5jYwkyMDEzLTA3LTIxIDIzOjMw OjE5LjAwMDAwMDAwMCArMDQwMA0KKysrIGN1cnJfbXN5cy93aW5zdXAvY3ln d2luL2Vudmlyb24uY2MJMjAxMy0wNy0yMiAwNjozNDo1NS4wMDAwMDAwMDAg KzA0MDANCkBAIC05OTksNyArMTAyMSw3IEBADQogICAgcHJpb3IgdG8gcGxh Y2luZyB0aGVtIGluIHRoZSBzdHJpbmcuICAqLw0KIGNoYXIgKiogX19yZWcz DQogYnVpbGRfZW52IChjb25zdCBjaGFyICogY29uc3QgKmVudnAsIFBXQ0hB UiAmZW52YmxvY2ssIGludCAmZW52YywNCi0JICAgYm9vbCBub19lbnZibG9j aykNCisJICAgYm9vbCBub19lbnZibG9jaywgYm9vbCBrZWVwX3Bvc2l4KQ0K IHsNCiAgIGludCBsZW4sIG47DQogICBjb25zdCBjaGFyICogY29uc3QgKnNy Y3A7DQpAQCAtMTAyNCw2ICsxMDQ2LDkgQEANCiAgIGZvciAoc3JjcCA9IGVu dnAsIGRzdHAgPSBuZXdlbnYsIHBhc3NfZHN0cCA9IHBhc3NfZW52OyAqc3Jj cDsgc3JjcCsrKQ0KICAgICB7DQogICAgICAgYm9vbCBjYWxjX3RsID0gIW5v X2VudmJsb2NrOw0KKyAgICAgIC8qIERvbid0IHBhc3MgdGltZXpvbmUgZW52 aXJvbm1lbnQgdG8gbm9uLW1zeXMgYXBwbGljYXRpb25zICovDQorICAgICAg aWYgKCFrZWVwX3Bvc2l4ICYmIGFzY2lpX3N0cm5jYXNlbWF0Y2goKnNyY3As ICJUWj0iLCAzKSkNCisgICAgICAgIGdvdG8gbmV4dDE7DQogICAgICAgLyog TG9vayBmb3IgZW50cmllcyB0aGF0IHJlcXVpcmUgc3BlY2lhbCBhdHRlbnRp b24gKi8NCiAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgU1BFTlZT X1NJWkU7IGkrKykNCiAJaWYgKCFzYXdfc3BlbnZbaV0gJiYgKCpkc3RwID0g c3BlbnZzW2ldLnJldHJpZXZlIChub19lbnZibG9jaywgKnNyY3ApKSkNCkBA IC0xMTA0LDYgKzExMjksMTMgQEANCiAJICBjb252ID0gZ2V0d2luZW52ICgq c3JjcCwgcmVzdCwgJnRlbXApOw0KIAkgIGlmIChjb252KQ0KIAkgICAgcCA9 IGNvbnYtPm5hdGl2ZTsJLyogVXNlIHdpbjMyIHBhdGggKi8NCisgICAgICBl bHNlIGlmICgha2VlcF9wb3NpeCkgew0KKyAgICAgICAgY2hhciAqd2luX2Fy ZyA9IGFyZ19oZXVyaXN0aWMoKnNyY3ApOw0KKwkJZGVidWdfcHJpbnRmKCJX SU4zMl9QQVRIIGlzICVzIiwgd2luX2FyZyk7DQorCQlwID0gY3N0cmR1cDEo d2luX2FyZyk7DQorICAgICAgICBpZiAod2luX2FyZyAhPSAqc3JjcCkNCisg ICAgICAgICAgZnJlZSAod2luX2FyZyk7DQorICAgICAgfQ0KIAkgIGVsc2UN CiAJICAgIHAgPSAqc3JjcDsJCS8qIERvbid0IHdvcnJ5IGFib3V0IGl0ICov DQogDQpkaWZmIC1OYXVyIGN1cnJfY3lnL3dpbnN1cC9jeWd3aW4vZW52aXJv bi5oIGN1cnJfbXN5cy93aW5zdXAvY3lnd2luL2Vudmlyb24uaA0KLS0tIGN1 cnJfY3lnL3dpbnN1cC9jeWd3aW4vZW52aXJvbi5oCTIwMTMtMDctMjEgMjM6 MzA6MTkuMDAwMDAwMDAwICswNDAwDQorKysgY3Vycl9tc3lzL3dpbnN1cC9j eWd3aW4vZW52aXJvbi5oCTIwMTMtMDctMjIgMDY6MzQ6NTUuMDAwMDAwMDAw ICswNDAwDQpAQCAtNDUsNiArNDUsNiBAQA0KIGV4dGVybiAiQyIgY2hhciBf X3N0ZGNhbGwgKipjdXJfZW52aXJvbiAoKTsNCiAjZW5kaWYNCiBjaGFyICoq IF9fcmVnMyBidWlsZF9lbnYgKGNvbnN0IGNoYXIgKiBjb25zdCAqZW52cCwg UFdDSEFSICZlbnZibG9jaywNCi0JCQkgIGludCAmZW52YywgYm9vbCBuZWVk X2VudmJsb2NrKTsNCisJCQkgIGludCAmZW52YywgYm9vbCBuZWVkX2VudmJs b2NrLCBib29sIGtlZXBfcG9zaXgpOw0KIA0KICNkZWZpbmUgRU5WX0NWVCAt MQ0KZGlmZiAtTmF1ciBjdXJyX2N5Zy93aW5zdXAvY3lnd2luL2V4dGVybmFs LmNjIGN1cnJfbXN5cy93aW5zdXAvY3lnd2luL2V4dGVybmFsLmNjDQotLS0g Y3Vycl9jeWcvd2luc3VwL2N5Z3dpbi9leHRlcm5hbC5jYwkyMDEzLTA3LTIx IDIzOjMwOjE5LjAwMDAwMDAwMCArMDQwMA0KKysrIGN1cnJfbXN5cy93aW5z dXAvY3lnd2luL2V4dGVybmFsLmNjCTIwMTMtMDctMjIgMDY6MzQ6NTUuMDAw MDAwMDAwICswNDAwDQpAQCAtMTM3LDcgKzEzNyw3IEBADQogew0KICAgaW50 IHVudXNlZF9lbnZjOw0KICAgUFdDSEFSIGVudmJsb2NrID0gTlVMTDsNCi0g IGNoYXIgKiplbnZwID0gYnVpbGRfZW52IChlbnYgPzogY3VyX2Vudmlyb24g KCksIGVudmJsb2NrLCB1bnVzZWRfZW52YywgZmFsc2UpOw0KKyAgY2hhciAq KmVudnAgPSBidWlsZF9lbnYgKGVudiA/OiBjdXJfZW52aXJvbiAoKSwgZW52 YmxvY2ssIHVudXNlZF9lbnZjLCBmYWxzZSwgdHJ1ZSk7DQogICBQV0NIQVIg cCA9IGVudmJsb2NrOw0KIA0KICAgaWYgKGVudnApDQpkaWZmIC1OYXVyIGN1 cnJfY3lnL3dpbnN1cC9jeWd3aW4vZ2xvYmFscy5jYyBjdXJyX21zeXMvd2lu c3VwL2N5Z3dpbi9nbG9iYWxzLmNjDQotLS0gY3Vycl9jeWcvd2luc3VwL2N5 Z3dpbi9nbG9iYWxzLmNjCTIwMTMtMDctMjEgMjM6MzA6MTkuMDAwMDAwMDAw ICswNDAwDQorKysgY3Vycl9tc3lzL3dpbnN1cC9jeWd3aW4vZ2xvYmFscy5j YwkyMDEzLTA3LTIyIDA2OjM0OjU1LjAwMDAwMDAwMCArMDQwMA0KQEAgLTY4 LDcgKzY4LDcgQEANCiAvKiBTb21lIENZR1dJTiBlbnZpcm9ubWVudCB2YXJp YWJsZSB2YXJpYWJsZXMuICovDQogYm9vbCBhbGxvd19nbG9iID0gdHJ1ZTsN CiBib29sIGlnbm9yZV9jYXNlX3dpdGhfZ2xvYiA9IGZhbHNlOw0KLWJvb2wg ZG9zX2ZpbGVfd2FybmluZyA9IHRydWU7DQorYm9vbCBkb3NfZmlsZV93YXJu aW5nID0gZmFsc2U7DQogd2luc3ltX3QgYWxsb3dfd2luc3ltbGlua3MgPSBX U1lNX3N5c2ZpbGU7DQogYm9vbCByZXNldF9jb20gPSBmYWxzZTsNCiBib29s IHBpcGVfYnl0ZSA9IGZhbHNlOw0KZGlmZiAtTmF1ciBjdXJyX2N5Zy93aW5z dXAvY3lnd2luL2luY2x1ZGUvc3lzL2N5Z3dpbi5oIGN1cnJfbXN5cy93aW5z dXAvY3lnd2luL2luY2x1ZGUvc3lzL2N5Z3dpbi5oDQotLS0gY3Vycl9jeWcv d2luc3VwL2N5Z3dpbi9pbmNsdWRlL3N5cy9jeWd3aW4uaAkyMDEzLTA3LTIx IDIzOjMwOjE5LjAwMDAwMDAwMCArMDQwMA0KKysrIGN1cnJfbXN5cy93aW5z dXAvY3lnd2luL2luY2x1ZGUvc3lzL2N5Z3dpbi5oCTIwMTMtMDctMjIgMDY6 MzQ6NTUuMDAwMDAwMDAwICswNDAwDQpAQCAtODEsNiArODEsOCBAQA0KICAg IHRvIG9uZSBvZiB0aGUgYWJvdmUgdmFsdWVzLCBvciB0byBFTk9NRU0gaWYg bWFsbG9jIGZhaWxzLiAqLw0KIGV4dGVybiB2b2lkICpjeWd3aW5fY3JlYXRl X3BhdGggKGN5Z3dpbl9jb252X3BhdGhfdCB3aGF0LCBjb25zdCB2b2lkICpm cm9tKTsNCiANCitleHRlcm4gY2hhciAqIGFyZ19oZXVyaXN0aWMgKGNoYXIg Y29uc3QgKiBjb25zdCk7DQorDQogZXh0ZXJuIHBpZF90IGN5Z3dpbl93aW5w aWRfdG9fcGlkIChpbnQpOw0KIGV4dGVybiBpbnQgY3lnd2luX3Bvc2l4X3Bh dGhfbGlzdF9wIChjb25zdCBjaGFyICopOw0KIGV4dGVybiB2b2lkIGN5Z3dp bl9zcGxpdF9wYXRoIChjb25zdCBjaGFyICosIGNoYXIgKiwgY2hhciAqKTsN CmRpZmYgLU5hdXIgY3Vycl9jeWcvd2luc3VwL2N5Z3dpbi9tb3VudC5jYyBj dXJyX21zeXMvd2luc3VwL2N5Z3dpbi9tb3VudC5jYw0KLS0tIGN1cnJfY3ln L3dpbnN1cC9jeWd3aW4vbW91bnQuY2MJMjAxMy0wNy0yMSAyMzozMDoxOS4w MDAwMDAwMDAgKzA0MDANCisrKyBjdXJyX21zeXMvd2luc3VwL2N5Z3dpbi9t b3VudC5jYwkyMDEzLTA3LTIyIDA2OjM0OjU1LjAwMDAwMDAwMCArMDQwMA0K QEAgLTQ1OCwxMyArNDU2LDEzIEBADQogICBzeXNfd2NzdG9tYnMgKG5hdGl2 ZV9yb290LCBQQVRIX01BWCwgcm9vdCk7DQogICBhc3NlcnQgKCpuYXRpdmVf cm9vdCAhPSAnXDAnKTsNCiAgIGlmIChhZGRfaXRlbSAobmF0aXZlX3Jvb3Qs ICIvIiwNCi0JCU1PVU5UX1NZU1RFTSB8IE1PVU5UX0JJTkFSWSB8IE1PVU5U X0lNTVVUQUJMRSB8IE1PVU5UX0FVVE9NQVRJQykNCisJCU1PVU5UX1NZU1RF TSB8IE1PVU5UX0JJTkFSWSB8IE1PVU5UX0lNTVVUQUJMRSB8IE1PVU5UX0FV VE9NQVRJQyB8IE1PVU5UX05PQUNMKQ0KICAgICAgIDwgMCkNCiAgICAgYXBp X2ZhdGFsICgiYWRkX2l0ZW0gKFwiJXNcIiwgXCIvXCIsIC4uLikgZmFpbGVk LCBlcnJubyAlZCIsIG5hdGl2ZV9yb290LCBlcnJubyk7DQogICAvKiBDcmVh dGUgYSBkZWZhdWx0IGN5Z2RyaXZlIGVudHJ5LiAgTm90ZSB0aGF0IHRoaXMg aXMgYSB1c2VyIGVudHJ5Lg0KICAgICAgVGhpcyBhbGxvd3MgdG8gb3ZlcnJp ZGUgaXQgd2l0aCBtb3VudCwgdW5sZXNzIHRoZSBzeXNhZG1pbiBjcmVhdGVk DQogICAgICBhIGN5Z2RyaXZlIGVudHJ5IGluIC9ldGMvZnN0YWIuICovDQot ICBjeWdkcml2ZV9mbGFncyA9IE1PVU5UX0JJTkFSWSB8IE1PVU5UX05PUE9T SVggfCBNT1VOVF9DWUdEUklWRTsNCisgIGN5Z2RyaXZlX2ZsYWdzID0gTU9V TlRfQklOQVJZIHwgTU9VTlRfTk9QT1NJWCB8IE1PVU5UX0NZR0RSSVZFIHwg TU9VTlRfTk9BQ0w7DQogICBzdHJjcHkgKGN5Z2RyaXZlLCBDWUdXSU5fSU5G T19DWUdEUklWRV9ERUZBVUxUX1BSRUZJWCAiLyIpOw0KICAgY3lnZHJpdmVf bGVuID0gc3RybGVuIChjeWdkcml2ZSk7DQogfQ0KQEAgLTExMjUsOCArMTEx NywxNyBAQA0KICAgaWYgKCEqYykNCiAgICAgcmV0dXJuIHRydWU7DQogICBj ZW5kID0gZmluZF93cyAoYyk7DQotICAqY2VuZCA9ICdcMCc7DQogICBwb3Np eF9wYXRoID0gY29udl9mc3RhYl9zcGFjZXMgKGMpOw0KKyAgaWYgKCEqY2Vu ZCkNCisgICB7DQorICAgICB1bnNpZ25lZCBtb3VudF9mbGFncyA9IE1PVU5U X1NZU1RFTSB8IE1PVU5UX0JJTkFSWSB8IE1PVU5UX05PUE9TSVggfCBNT1VO VF9OT0FDTDsNCisNCisgICAgIGludCByZXMgPSBtb3VudF90YWJsZS0+YWRk X2l0ZW0gKG5hdGl2ZV9wYXRoLCBwb3NpeF9wYXRoLCBtb3VudF9mbGFncyk7 DQorICAgICBpZiAocmVzICYmIGdldF9lcnJubyAoKSA9PSBFTUZJTEUpDQor ICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgIHJldHVybiB0cnVlOw0KKyAg IH0NCisgICpjZW5kID0gJ1wwJzsNCiAgIC8qIFRoaXJkIGZpZWxkOiBGUyB0 eXBlLiAqLw0KICAgYyA9IHNraXBfd3MgKGNlbmQgKyAxKTsNCiAgIGlmICgh KmMpDQpkaWZmIC1OYXVyIGN1cnJfY3lnL3dpbnN1cC9jeWd3aW4vcGF0aC5j YyBjdXJyX21zeXMvd2luc3VwL2N5Z3dpbi9wYXRoLmNjDQotLS0gY3Vycl9j eWcvd2luc3VwL2N5Z3dpbi9wYXRoLmNjCTIwMTMtMDctMjEgMjM6MzA6MTku MDAwMDAwMDAwICswNDAwDQorKysgY3Vycl9tc3lzL3dpbnN1cC9jeWd3aW4v cGF0aC5jYwkyMDEzLTA3LTIyIDA2OjM0OjU1LjAwMDAwMDAwMCArMDQwMA0K QEAgLTE0ODcsNiArMTQ4Niw4NiBAQA0KIA0KIC8qKioqKioqKioqKioqKioq KioqKioqIFN5bWJvbGljIExpbmsgU3VwcG9ydCAqKioqKioqKioqKioqKioq KioqKioqKioqKi8NCiANCisvKg0KKyAgQ3JlYXRlIGEgZGVlcCBjb3B5IG9m IHNyYyBhcyBkc3QsIHdoaWxlIGF2b2lkaW5nIGRlc2NlbmRpbmcgaW4gb3Jp Z3BhdGguDQorKi8NCitzdGF0aWMgaW50DQorcmVjdXJzaXZlQ29weSAoY2hh ciAqIHNyYywgY2hhciAqIGRzdCwgY29uc3QgY2hhciAqIG9yaWdwYXRoKQ0K K3sNCisgIFdJTjMyX0ZJTkRfREFUQSBkSGZpbGU7DQorICBIQU5ETEUgZEg7 DQorICBCT09MIGZpbmRmaWxlczsNCisgIGludCBzcmNwb3MgPSBzdHJsZW4g KHNyYyk7DQorICBpbnQgZHN0cG9zID0gc3RybGVuIChkc3QpOw0KKyAgaW50 IHJlcyA9IC0xOw0KKw0KKyAgZGVidWdfcHJpbnRmKCJyZWN1cnNpdmVDb3B5 ICglcywgJXMpIiwgc3JjLCBkc3QpOw0KKw0KKyAgLyogQ3JlYXRlIHRoZSBk ZXN0aW5hdGlvbiBkaXJlY3RvcnkgKi8NCisgIGlmICghQ3JlYXRlRGlyZWN0 b3J5RXggKHNyYywgZHN0LCBOVUxMKSkNCisgICAgew0KKyAgICAgIGRlYnVn X3ByaW50ZigiQ3JlYXRlRGlyZWN0b3J5RXgoJXMsICVzLCAwKSBmYWlsZWQi LCBzcmMsIGRzdCk7DQorICAgICAgX19zZXRlcnJubyAoKTsNCisgICAgICBn b3RvIGRvbmU7DQorICAgIH0NCisgIC8qIERlc2NlbmQgaW50byB0aGUgc291 cmNlIGRpcmVjdG9yeSAqLw0KKyAgaWYgKHNyY3BvcyArIDIgPj0gTUFYX1BB VEggfHwgZHN0cG9zICsgMSA+PSBNQVhfUEFUSCkNCisgICAgew0KKyAgICAg IHNldF9lcnJubyAoRU5BTUVUT09MT05HKTsNCisgICAgICBnb3RvIGRvbmU7 DQorICAgIH0NCisgIHN0cmNhdCAoc3JjLCAiXFwqIik7DQorICBzdHJjYXQg KGRzdCwgIlxcIik7DQorICBkSCA9IEZpbmRGaXJzdEZpbGUgKHNyYywgJmRI ZmlsZSk7DQorICBkZWJ1Z19wcmludGYoImRIZmlsZSgxKTogJXMiLCBkSGZp bGUuY0ZpbGVOYW1lKTsNCisgIGZpbmRmaWxlcyA9IEZpbmROZXh0RmlsZSAo ZEgsICZkSGZpbGUpOw0KKyAgZGVidWdfcHJpbnRmKCJkSGZpbGUoMik6ICVz IiwgZEhmaWxlLmNGaWxlTmFtZSk7DQorICBmaW5kZmlsZXMgPSBGaW5kTmV4 dEZpbGUgKGRILCAmZEhmaWxlKTsNCisgIHdoaWxlIChmaW5kZmlsZXMpDQor ICAgIHsNCisgICAgICAvKiBBcHBlbmQgdGhlIGRpcmVjdG9yeSBpdGVtIGZp bGVuYW1lIHRvIGJvdGggc291cmNlIGFuZCBkZXN0aW5hdGlvbiAqLw0KKyAg ICAgIGludCBmaWxlbGVuID0gc3RybGVuIChkSGZpbGUuY0ZpbGVOYW1lKTsN CisgICAgICBkZWJ1Z19wcmludGYoImRIZmlsZSgzKTogJXMiLCBkSGZpbGUu Y0ZpbGVOYW1lKTsNCisgICAgICBpZiAoc3JjcG9zICsgMSArIGZpbGVsZW4g Pj0gTUFYX1BBVEggfHwNCisgICAgICAgICAgZHN0cG9zICsgMSArIGZpbGVs ZW4gPj0gTUFYX1BBVEgpDQorICAgICAgICB7DQorICAgICAgICAgIHNldF9l cnJubyAoRU5BTUVUT09MT05HKTsNCisgICAgICAgICAgZ290byBkb25lOw0K KyAgICAgICAgfQ0KKyAgICAgIHN0cmNweSAoJnNyY1tzcmNwb3MrMV0sIGRI ZmlsZS5jRmlsZU5hbWUpOw0KKyAgICAgIHN0cmNweSAoJmRzdFtkc3Rwb3Mr MV0sIGRIZmlsZS5jRmlsZU5hbWUpOw0KKyAgICAgIGRlYnVnX3ByaW50Zigi JXMgLT4gJXMiLCBzcmMsIGRzdCk7DQorICAgICAgaWYgKGRIZmlsZS5kd0Zp bGVBdHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKQ0KKyAg ICAgICAgew0KKyAgICAgICAgICAvKiBSZWN1cnNlIGludG8gdGhlIGNoaWxk IGRpcmVjdG9yeSAqLw0KKyAgICAgICAgICBkZWJ1Z19wcmludGYoIiVzIDwt PiAlcyIsIHNyYywgb3JpZ3BhdGgpOw0KKyAgICAgICAgICBpZiAoc3RyY21w IChzcmMsIG9yaWdwYXRoKSkgLy8gYXZvaWRzIGVuZGxlc3MgcmVjdXJzaW9u DQorICAgICAgICAgICAgaWYgKHJlY3Vyc2l2ZUNvcHkgKHNyYywgZHN0LCBv cmlncGF0aCkpDQorICAgICAgICAgICAgICBnb3RvIGRvbmU7DQorICAgICAg ICB9DQorICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAvKiBK dXN0IGNvcHkgdGhlIGZpbGUgKi8NCisgICAgICAgICAgaWYgKCFDb3B5Rmls ZSAoc3JjLCBkc3QsIEZBTFNFKSkNCisgICAgICAgICAgICB7DQorICAgICAg ICAgICAgICBfX3NldGVycm5vICgpOw0KKyAgICAgICAgICAgICAgZ290byBk b25lOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgICBmaW5k ZmlsZXMgPSBGaW5kTmV4dEZpbGUgKGRILCAmZEhmaWxlKTsNCisgICAgfQ0K KyAgaWYgKEdldExhc3RFcnJvcigpICE9IEVSUk9SX05PX01PUkVfRklMRVMp DQorICAgIHsNCisgICAgICBfX3NldGVycm5vICgpOw0KKyAgICAgIGdvdG8g ZG9uZTsNCisgICAgfQ0KKyAgcmVzID0gMDsNCisNCitkb25lOg0KKw0KKyAg cmV0dXJuIHJlczsNCit9DQorDQogLyogQ3JlYXRlIGEgc3ltbGluayBmcm9t IEZST01QQVRIIHRvIFRPUEFUSC4gKi8NCiANCiBleHRlcm4gIkMiIGludA0K QEAgLTE4OTEsNiArMTk3MCw3MyBAQA0KICAgICB9DQogICBlbHNlDQogICAg IHsNCisgICAgICBwYXRoX2NvbnYgc3JjX3BhdGg7DQorICAgICAgc3JjX3Bh dGguY2hlY2sgKG9sZHBhdGgsIFBDX1NZTV9OT0ZPTExPVywgc3RhdF9zdWZm aXhlcyk7DQorICAgICAgaWYgKHNyY19wYXRoLmVycm9yKQ0KKyAgICAgICAg ew0KKyAgICAgICAgICAgc2V0X2Vycm5vIChzcmNfcGF0aC5lcnJvcik7DQor ICAgICAgICAgICBnb3RvIGRvbmU7DQorICAgICAgICB9DQorICAgICAgaWYg KCFzcmNfcGF0aC5pc2RldmljZSAoKSAmJiAhc3JjX3BhdGguaXNfZnNfc3Bl Y2lhbCAoKSkNCisgICAgICAgIHsNCisgICAgICAgICAgIC8qIE1TWVMgY29w eSBmaWxlIGluc3RlYWQgbWFrZSBzeW1saW5rICovDQorDQorICAgICAgICAg ICBjaGFyICogcmVhbF9vbGRwYXRoOw0KKyAgICAgICAgICAgaWYgKGlzYWJz cGF0aCAob2xkcGF0aCkpDQorICAgICAgICAgICAgIHN0cmNweSAocmVhbF9v bGRwYXRoID0gdHAuY19nZXQgKCksIG9sZHBhdGgpOw0KKyAgICAgICAgICAg ZWxzZQ0KKyAgICAgICAgICAgICAgLyogRmluZCB0aGUgcmVhbCBzb3VyY2Ug cGF0aCwgcmVsYXRpdmUNCisgICAgICAgICAgICAgICAgIHRvIHRoZSBkaXJl Y3Rvcnkgb2YgdGhlIGRlc3RpbmF0aW9uICovDQorICAgICAgICAgICAgIHsN CisgICAgICAgICAgICAgICAgLyogRGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXIg cG9zaXRpb24gb2YgdGhlIGxhc3QgcGF0aCBjb21wb25lbnQgKi8NCisgICAg ICAgICAgICAgICAgaW50IHBvcyA9IHN0cmxlbiAobmV3cGF0aCk7DQorICAg ICAgICAgICAgICAgIHdoaWxlICgtLXBvcyA+PSAwKQ0KKyAgICAgICAgICAg ICAgICAgIGlmIChpc2RpcnNlcCAobmV3cGF0aFtwb3NdKSkNCisgICAgICAg ICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICAvKiBBcHBl bmQgdGhlIHNvdXJjZSBwYXRoIHRvIHRoZSBkaXJlY3RvcnkNCisgICAgICAg ICAgICAgICAgICAgY29tcG9uZW50IG9mIHRoZSBkZXN0aW5hdGlvbiAqLw0K KyAgICAgICAgICAgICAgICBpZiAocG9zKzErc3RybGVuKG9sZHBhdGgpID49 IE1BWF9QQVRIKQ0KKyAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAg ICAgICAgICAgICBzZXRfZXJybm8oRU5BTUVUT09MT05HKTsNCisgICAgICAg ICAgICAgICAgICAgICBnb3RvIGRvbmU7DQorICAgICAgICAgICAgICAgICAg fQ0KKyAgICAgICAgICAgICAgICBzdHJjcHkgKHJlYWxfb2xkcGF0aCA9IHRw LmNfZ2V0ICgpLCBuZXdwYXRoKTsNCisgICAgICAgICAgICAgICAgc3RyY3B5 ICgmcmVhbF9vbGRwYXRoW3BvcysxXSwgb2xkcGF0aCk7DQorICAgICAgICAg ICAgIH0NCisNCisgICAgICAgICAgIC8qIEFzIGEgTVNZUyBsaW1pdGF0aW9u LCB0aGUgc291cmNlIHBhdGggbXVzdCBleGlzdC4gKi8NCisJCSAgIHBhdGhf Y29udiB3aW4zMl9vbGRwYXRoOw0KKyAgICAgICAgICAgd2luMzJfb2xkcGF0 aC5jaGVjayAocmVhbF9vbGRwYXRoLCBQQ19TWU1fTk9GT0xMT1csIHN0YXRf c3VmZml4ZXMpOw0KKyAgICAgICAgICAgaWYgKCF3aW4zMl9vbGRwYXRoLmV4 aXN0cyAoKSkNCisgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBz ZXRfZXJybm8gKEVOT0VOVCk7DQorICAgICAgICAgICAgICAgIGdvdG8gZG9u ZTsNCisgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgY2hhciAqd19u ZXdwYXRoOw0KKyAgICAgICAgICAgY2hhciAqd19vbGRwYXRoOw0KKyAgICAg ICAgICAgc3RwY3B5ICh3X25ld3BhdGggPSB0cC5jX2dldCAoKSwgd2luMzJf bmV3cGF0aC5nZXRfd2luMzIoKSk7DQorICAgICAgICAgICBzdHBjcHkgKHdf b2xkcGF0aCA9IHRwLmNfZ2V0ICgpLCB3aW4zMl9vbGRwYXRoLmdldF93aW4z MigpKTsNCisgICAgICAgICAgIGlmICh3aW4zMl9vbGRwYXRoLmlzZGlyKCkp DQorICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgY2hhciAqb3Jp Z3BhdGg7DQorICAgICAgICAgICAgICAgIHN0cmNweSAob3JpZ3BhdGggPSB0 cC5jX2dldCAoKSwgd19vbGRwYXRoKTsNCisgICAgICAgICAgICAgICAgcmVz ID0gcmVjdXJzaXZlQ29weSAod19vbGRwYXRoLCB3X25ld3BhdGgsIG9yaWdw YXRoKTsNCisgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgZWxzZQ0KKyAg ICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGlmICghQ29weUZpbGUg KHdfb2xkcGF0aCwgd19uZXdwYXRoLCBGQUxTRSkpDQorICAgICAgICAgICAg ICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgIF9fc2V0ZXJybm8gKCk7 DQorICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBlbHNl DQorICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAg IHJlcyA9IDA7DQorICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAg ICB9DQorICAgICAgICAgICBnb3RvIGRvbmU7DQorICAgICAgICB9DQorDQog ICAgICAgLyogRGVmYXVsdCB0ZWNobmlxdWUgY3JlYXRpbmcgYSBzeW1saW5r LiAqLw0KICAgICAgIGJ1ZiA9IHRwLnRfZ2V0ICgpOw0KICAgICAgIGNwID0g c3RwY3B5IChidWYsIFNZTUxJTktfQ09PS0lFKTsNCkBAIC0zMTgyLDYgKzMz MjgsNDg4IEBADQogICByZXR1cm4gcmVzOw0KIH0NCiANCitzdGF0aWMgYm9v bA0KK2lzYWJzd2lucGF0aCAoY29uc3QgY2hhciAqIHBhdGgpDQorew0KKyAg aW50IHBsZW4gPSBzdHJsZW4gKHBhdGgpOw0KKyAgYm9vbCBwMGFscGhhID0g aXNhbHBoYSAocGF0aFswXSkgIT0gMDsNCisgIGJvb2wgcDFjb2xvbiA9IChw bGVuID4gMSAmJiBwYXRoWzFdID09ICc6Jyk7DQorICBib29sIHJ2YWwgPSAN CisgICAgICAgICAoICAgKChwbGVuID09IDIpICYmIHAwYWxwaGEgJiYgcDFj b2xvbikNCisgICAgICAgICAgfHwgKCAgKHBsZW4gPiAyKSANCisJICAgICAg JiYgcDBhbHBoYSANCisJICAgICAgJiYgcDFjb2xvbiANCisJICAgICAgJiYg KHN0cmNociAoJnBhdGhbMl0sICc6JykgPT0gKGNoYXIgKilOVUxMKQ0KKwkg ICAgICkNCisJICB8fCAoICAgcGxlbiA+IDMgDQorCSAgICAgICYmIHBhdGhb MF0gPT0gJ1xcJyANCisJICAgICAgJiYgcGF0aFsxXSA9PSAnXFwnIA0KKwkg ICAgICAmJiBwYXRoWzNdID09ICdcXCcNCisJICAgICApDQorCSApOw0KKyAg ICByZXR1cm4gcnZhbDsNCit9DQorDQorc3RhdGljIGNoYXIgKg0KK1NjcnVi UmV0cGF0aCAoY2hhciAqIGNvbnN0IHJldHBhdGgpDQoreyANCisgIGNoYXIg KiBzc3BhdGggPSAoY2hhciAqKXJldHBhdGg7DQorICAvLw0KKyAgLy8gQ2hl Y2sgZm9yIG51bGwgcGF0aCBiZWNhdXNlIFdpbjMyIGRvZXNuJ3QgbGlrZSB0 aGVtLg0KKyAgLy8gSS5FLjogIFBhdGggbGlzdHMgb2YgYzovZm9vOztjOi9i YXIgbmVlZCBjaGFuZ2VkIHRvIA0KKyAgLy8gYzovZm9vO2M6L2Jhci4NCisg IC8vDQorICAvLyBUaGlzIG5lZWQgYmUgZXhlY3V0ZWQgb25seSBpZiB3ZSBh Y3R1YWxseSBjb252ZXJ0ZWQgdGhlIHBhdGguDQorICAvLw0KKyAgd2hpbGUg KCpzc3BhdGgpDQorICAgIHsNCisgICAgICBpZiAoKnNzcGF0aCA9PSAnOycg JiYgc3NwYXRoWzFdID09ICc7JykNCisJICBmb3IgKGNoYXIgKmkgPSBzc3Bh dGg7ICppOyBpKyspDQorCSAgICAgICppID0gKihpICsgMSk7DQorICAgICAg ZWxzZQ0KKwlzc3BhdGgrKzsNCisgICAgfQ0KKyAgaWYgKCooc3NwYXRoIC0g MSkgPT0gJzsnKQ0KKyAgICAqKHNzcGF0aCAtIDEpID0gJ1wwJzsNCisNCisg IC8vDQorICAvLyBJZiB3ZSBtb2RpZmllZCB0aGUgcGF0aCB0aGVuIGNvbnZl cnQgYWxsIC8gdG8gXCBpZiB3ZSBoYXZlIGEgcGF0aCBsaXN0DQorICAvLyBl bHNlIGNvbnZlcnQgYWxsIFwgdG8gLy4NCisgIC8vIA0KKyAgaWYgKChzdHJj aHIgKHJldHBhdGgsICc7JykpKQ0KKyAgew0KKyAgICBiYWNrc2xhc2hpZnkg KHJldHBhdGgsIHJldHBhdGgsIDApOw0KKyAgfSBlbHNlDQorICB7DQorICAg IHNsYXNoaWZ5IChyZXRwYXRoLCByZXRwYXRoLCAwKTsNCisgIH0NCisgIGRl YnVnX3ByaW50ZigicmV0dXJuaW5nOiAlcyIsIHJldHBhdGgpOw0KKyAgcmV0 dXJuIHJldHBhdGg7DQorfQ0KKw0KKy8vDQorLy8gVGhlIHJldHVybmVkIHBv aW50ZXIgc2hvdWxkIGJlIGZyZWVkIHdpdGggZnJlZSB1bmxlc3MsDQorLy8g YXMgaXQgdHVybnMgb3V0LCBpdCBpcyBlcXVhbCB0byB0aGUgaW5wdXQgcG9p bnRlci4NCisvLw0KK2V4dGVybiAiQyIgY2hhciAqDQorYXJnX2hldXJpc3Rp YyAoY2hhciBjb25zdCAqIGNvbnN0IGFyZykNCit7DQorDQorICBpbnQgYXJn bGVuID0gKGFyZyA/IHN0cmxlbiAoYXJnKTogMCk7DQorICANCisgIGlmIChh cmdsZW4gPT0gMCkNCisgIHsNCisgICAgY2hhciAqcmV0cGF0aCA9IChjaGFy ICopbWFsbG9jIChzaXplb2YgKGNoYXIpKTsNCisgICAgbWVtc2V0IChyZXRw YXRoLCAwLCBzaXplb2YgKGNoYXIpKTsNCisgICAgcmV0dXJuIHJldHBhdGg7 DQorICB9DQorDQorICBkZWJ1Z19wcmludGYoIklucHV0IHZhbHVlOiAoJXMp IiwgYXJnKTsNCisNCisgIC8vDQorICAvLyBjb3B5IG9mIHRoZSBwYXRoIHN0 cmluZyB0aGF0IHdlIGNhbiBvdmVyd3JpdGUNCisgIC8vDQorICBjaGFyICpz cGF0aCA9IChjaGFyICopYWxsb2NhIChhcmdsZW4gKyAxKTsNCisgIG1lbWNw eSAoc3BhdGgsIGFyZywgYXJnbGVuICsgMSk7DQorICANCisgIGNoYXIgKiBz c3BhdGg7DQorICANCisgIC8vDQorICAvLyByZXRwYXRoIGNvbnRhaW5zIHRo ZSBjb252ZXJ0ZWQgcGF0aCBzdHJpbmcgdG8gYmUgcmV0dXJuZWQNCisgIC8v DQorICBjaGFyICpyZXRwYXRoID0gKGNoYXIgKiltYWxsb2MoKChNQVhfUEFU SCAtIGFyZ2xlbikgPiAwKSA/IA0KKyAgICAgIE1BWF9QQVRIIDogYXJnbGVu ICsgTUFYX1BBVEgpOw0KKyAgbWVtc2V0IChyZXRwYXRoLCAwLCBNQVhfUEFU SCk7DQorICBpbnQgcmV0cGF0aF9sZW4gPSAwOw0KKyAgaW50IHJldHBhdGhf YnVmbGVuID0gTUFYX1BBVEg7DQorICAgIA0KKyNkZWZpbmUgcmV0cGF0aGNh dChyZXRzdHIpIFwNCisgIHJldHBhdGhfbGVuICs9IHN0cmxlbihyZXRzdHIp OyBcDQorICBpZiAocmV0cGF0aF9idWZsZW4gPD0gcmV0cGF0aF9sZW4pIFwN CisgICAgeyBcDQorICAgICAgcmV0cGF0aF9idWZsZW4gPSAoKHJldHBhdGhf YnVmbGVuICogMiA8PSByZXRwYXRoX2xlbikgPyBcDQorCSAgcmV0cGF0aF9s ZW4gKyAxIDogcmV0cGF0aF9idWZsZW4gKiAyKTsgXA0KKyAgICAgIHJldHBh dGggPSAoY2hhciAqKXJlYWxsb2MgKHJldHBhdGgsIHJldHBhdGhfYnVmbGVu KTsgXA0KKyAgICB9IFwNCisgIHN0cmNhdCAocmV0cGF0aCwgcmV0c3RyKTsN CisNCisjZGVmaW5lIHJldHBhdGhjcHkocmV0c3RyKSBcDQorICByZXRwYXRo X2xlbiA9IHN0cmxlbiAocmV0c3RyKTsgXA0KKyAgKnJldHBhdGggPSAnXDAn OyBcDQorICBpZiAocmV0cGF0aF9idWZsZW4gPD0gcmV0cGF0aF9sZW4gKSBc DQorICAgIHsgXA0KKyAgICAgIHJldHBhdGhfYnVmbGVuID0gKChyZXRwYXRo X2J1ZmxlbiAqIDIgPD0gcmV0cGF0aF9sZW4pID8gXA0KKwkgIHJldHBhdGhf bGVuICsgMSA6IHJldHBhdGhfYnVmbGVuICogMik7IFwNCisgICAgICByZXRw YXRoID0gKGNoYXIgKilyZWFsbG9jIChyZXRwYXRoLCByZXRwYXRoX2J1Zmxl bik7IFwNCisgICAgfSBcDQorICBzdHJjcHkgKHJldHBhdGgsIHJldHN0cik7 DQorDQorICAvLw0KKyAgLy8gSnVzdCByZXR1cm4gd2luMzIgcGF0aHMgYW5k IHBhdGggbGlzdHMuDQorICAvLw0KKyAgaWYgKGlzYWJzd2lucGF0aCAoYXJn KSANCisgICAgICB8fCAoc3RyY2hyIChhcmcsICc7JykgPiAwKQ0KKyAgICAg ICkNCisgICAgew0KKyAgICAgIGRlYnVnX3ByaW50ZigicmV0dXJuaW5nIFdp bjMyIGFic29sdXRlIHBhdGg6ICVzIiwgYXJnKTsNCisgICAgICByZXR1cm4g KChjaGFyICopYXJnKTsNCisgICAgfQ0KKyAgLy8NCisgIC8vIE11bHRpcGxl IGZvcndhcmQgc2xhc2hlcyBhcmUgdHJlYXRlZCBzcGVjaWFsLA0KKyAgLy8g UmVtb3ZlIG9uZSBhbmQgcmV0dXJuIGZvciB0aGUgZm9ybSBvZiAvL2ZvbyBv ciAvLy9iYXINCisgIC8vIGJ1dCBqdXN0IHJldHVybiBmb3IgdGhlIGZvcm0g b2YgLy9zZXJ2ZXIvc2hhcmUuDQorICAvLw0KKyAgZWxzZSBpZiAoYXJnWzBd ID09ICcvJyAmJiBhcmdbMV0gPT0gJy8nKQ0KKyAgICB7DQorICAgICAgaW50 IHRpZHggPSAyOw0KKyAgICAgIHdoaWxlIChzcGF0aFt0aWR4XSAmJiBzcGF0 aFt0aWR4XSA9PSAnLycpDQorCSAgdGlkeCsrOw0KKyAgICAgIGlmIChzdHJj aHIgKCZzcGF0aFt0aWR4XSwgJy8nKSkNCisJew0KKwkgIHJldHBhdGhjcHkg KHNwYXRoKTsNCisJfQ0KKyAgICAgIGVsc2UNCisJew0KKwkgIHJldHBhdGhj cHkgKCZzcGF0aFsxXSk7DQorCX0NCisgICAgICByZXR1cm4gU2NydWJSZXRw YXRoIChyZXRwYXRoKTsNCisgICAgfQ0KKyAgLy8NCisgIC8vIHNwZWNpYWwg Y2FzZSBjb25mdXNpb24gZWxpbWluYXRpb24NCisgIC8vIFRyYW5zbGF0ZSBh IHBhdGggdGhhdCBsb29rcyBzaW1pbGFyIHRvIC9jOiB0byBjOi8uDQorICAv Lw0KKyAgZWxzZSBpZiAoYXJnWzBdID09ICcvJyAmJiBpc2Fic3dpbnBhdGgg KGFyZyArIDEpKQ0KKyAgICB7DQorICAgICAgcmV0cGF0aGNweSAoJmFyZ1sx XSk7DQorICAgICAgcmV0dXJuIFNjcnViUmV0cGF0aCAocmV0cGF0aCk7DQor ICAgIH0NCisgIC8vDQorICAvLyBDaGVjayBmb3IgdmFyaWFibGUgc2V0Lg0K KyAgLy8NCisgIGVsc2UgaWYgKChzc3BhdGggPSBzdHJjaHIoc3BhdGgsICc9 JykpICYmIGlzYWxwaGEgKHNwYXRoWzBdKSkNCisgICAgew0KKyAgICAgIGlm IChpc2Fic3dpbnBhdGggKHNzcGF0aCArIDEpKSB7DQorCWRlYnVnX3ByaW50 ZigicmV0dXJuaW5nOiAlcyIsIGFyZyk7DQorCXJldHVybiAoY2hhciAqKWFy ZzsNCisgICAgICB9DQorICAgICAgY2hhciAqc3dpbjMyX3BhdGggPSBhcmdf aGV1cmlzdGljKHNzcGF0aCArIDEpOw0KKyAgICAgIGlmIChzd2luMzJfcGF0 aCA9PSAoc3NwYXRoICsgMSkpIHsNCisJZGVidWdfcHJpbnRmKCJyZXR1cm5p bmc6ICVzIiwgYXJnKTsNCisJcmV0dXJuIChjaGFyICopYXJnOw0KKyAgICAg IH0NCisgICAgICAqc3NwYXRoID0gJ1wwJzsNCisgICAgICByZXRwYXRoY3B5 IChzcGF0aCk7DQorICAgICAgcmV0cGF0aGNhdCAoIj0iKTsNCisgICAgICBy ZXRwYXRoY2F0IChzd2luMzJfcGF0aCk7DQorICAgICAgZnJlZSAoc3dpbjMy X3BhdGgpOw0KKyAgICAgIHJldHVybiBTY3J1YlJldHBhdGggKHJldHBhdGgp Ow0KKyAgICB9DQorICAvLw0KKyAgLy8gQ2hlY2sgZm9yIHBhdGhzIGFmdGVy IGNvbW1hcywgaWYgc3RyaW5nIGJlZ2lucyB3aXRoIGEgJy0nIGNoYXJhY3Rl ci4NCisgIC8vDQorICBlbHNlIGlmICgoc3NwYXRoID0gc3RyY2hyKHNwYXRo LCAnLCcpKSAmJiBzcGF0aFswXSA9PSAnLScpDQorICAgIHsNCisgICAgICBp ZiAoaXNhYnN3aW5wYXRoIChzc3BhdGggKyAxKSkgew0KKwlkZWJ1Z19wcmlu dGYoInJldHVybmluZzogJXMiLCBhcmcpOw0KKwlyZXR1cm4gKGNoYXIgKilh cmc7DQorICAgICAgfQ0KKyAgICAgIGNoYXIgKnN3aW4zMl9wYXRoID0gYXJn X2hldXJpc3RpYyhzc3BhdGggKyAxKTsNCisgICAgICBpZiAoc3dpbjMyX3Bh dGggPT0gKHNzcGF0aCArIDEpKSB7DQorCWRlYnVnX3ByaW50ZigicmV0dXJu aW5nOiAlcyIsIGFyZyk7DQorCXJldHVybiAoY2hhciAqKWFyZzsNCisgICAg ICB9DQorICAgICAgKnNzcGF0aCA9ICdcMCc7DQorICAgICAgcmV0cGF0aGNw eSAoc3BhdGgpOw0KKyAgICAgIHJldHBhdGhjYXQgKCIsIik7DQorICAgICAg cmV0cGF0aGNhdCAoc3dpbjMyX3BhdGgpOw0KKyAgICAgIGZyZWUgKHN3aW4z Ml9wYXRoKTsNCisgICAgICByZXR1cm4gU2NydWJSZXRwYXRoIChyZXRwYXRo KTsNCisgICAgfQ0KKyAgLy8NCisgIC8vIENoZWNrIGZvciBQT1NJWCBwYXRo IGxpc3RzLg0KKyAgLy8gQnV0IHdlIGhhdmUgdG8gYWxsb3cgcHJvY2Vzc2lu ZyBvZiBxdW90ZWQgc3RyaW5ncyBhbmQgc3dpdGNoZXMgZmlyc3QNCisgIC8v IHdoaWNoIHVzZXMgcmVjdXJzaW9uIHNvIHRoaXMgY29kZSB3aWxsIGJlIHNl ZW4gYWdhaW4uDQorICAvLw0KKyAgZWxzZSANCisgICAgew0KKyAgICAgIHNz cGF0aCA9IHN0cmNociAoc3BhdGgsICc6Jyk7DQorICAgICAgLy8NCisgICAg ICAvLyBQcmV2ZW50IGh0dHA6Ly9zb21lLnN0cmluZy8gZnJvbSBiZWluZyBt b2RpZmllZC4NCisgICAgICAvLyANCisgICAgICBpZiAoKHNzcGF0aCA+IDAg JiYgc3RybGVuIChzc3BhdGgpID4gMikNCisJICAmJiAoc3NwYXRoWzFdID09 ICcvJykNCisJICAmJiAoc3NwYXRoWzJdID09ICcvJykNCisJICApDQorCXsN CisJICBkZWJ1Z19wcmludGYoInJldHVybmluZzogJXMiLCBhcmcpOw0KKwkg IHJldHVybiAoKGNoYXIgKilhcmcpOw0KKwl9DQorICAgICAgZWxzZQ0KKyAg ICAgIGlmICgoc3NwYXRoID4gMCkNCisJICAgJiYgKHN0cmNociAoc3BhdGgs ICcvJykgPiAwKQ0KKwkgICAvLyANCisJICAgLy8gUHJldmVudCBzdHJpbmdz IGJlZ2lubmluZyB3aXRoIC0sICIsICcsIG9yIEAgZnJvbSBiZWluZyBwcm9j ZXNzZWQsDQorCSAgIC8vIHJlbWVtYmVyIHRoYXQgdGhpcyBpcyBhIHJlY3Vy c2l2ZSByb3V0aW5lLg0KKwkgICAvLyANCisJICAgJiYgKHN0cmNociAoIi1c IlwnQCIsIHNwYXRoWzBdKSA9PSAwKQ0KKwkgICAvLyANCisJICAgLy8gUHJl dmVudCBgYGZvbzplY2hvIC9iYXIvYmF6JycgZnJvbSBiZWluZyBjb25zaWRl cmVkIGEgcGF0aCBsaXN0Lg0KKwkgICAvLyANCisJICAgJiYgKHN0cmxlbiAo c3NwYXRoKSA+IDEgJiYgc3RyY2hyICgiOi4vIiwgc3NwYXRoWzFdKSA+IDAp DQorCSAgICkNCisgICAgew0KKyAgICAgIC8vDQorICAgICAgLy8gWWVzLCBj b252ZXJ0IHRvIFdpbjMyIHBhdGggbGlzdC4NCisgICAgICAvLw0KKyAgICAg IHdoaWxlIChzc3BhdGgpDQorCXsNCisJICAqc3NwYXRoID0gJ1wwJzsNCisJ ICBjaGFyICpzd2luMzJfcGF0aCA9IGFyZ19oZXVyaXN0aWMgKHNwYXRoKTsN CisJICAvLw0KKwkgIC8vIEp1c3QgaWdub3JlIHNyZXQ7IHN3aW4zMl9wYXRo IGhhcyB0aGUgdmFsdWUgd2UgbmVlZC4NCisJICAvLw0KKwkgIHJldHBhdGhj YXQgKHN3aW4zMl9wYXRoKTsNCisJICBpZiAoc3dpbjMyX3BhdGggIT0gc3Bh dGgpDQorCSAgICBmcmVlIChzd2luMzJfcGF0aCk7DQorCSAgc3BhdGggPSBz c3BhdGggKyAxOw0KKwkgIHNzcGF0aCA9IHN0cmNociAoc3BhdGgsICc6Jyk7 DQorCSAgcmV0cGF0aGNhdCAoIjsiKTsNCisJICAvLw0KKwkgIC8vIEhhbmRs ZSB0aGUgbGFzdCBwYXRoIGluIHRoZSBsaXN0Lg0KKwkgIC8vDQorCSAgaWYg KCFzc3BhdGgpDQorCSAgICB7DQorCSAgICAgIGNoYXIgKnN3aW4zMl9wYXRo ID0gYXJnX2hldXJpc3RpYyAoc3BhdGgpOw0KKwkgICAgICByZXRwYXRoY2F0 IChzd2luMzJfcGF0aCk7DQorCSAgICAgIGlmIChzd2luMzJfcGF0aCAhPSBz cGF0aCkNCisJCWZyZWUgKHN3aW4zMl9wYXRoKTsNCisJICAgIH0NCisJfQ0K KyAgICAgIHJldHVybiBTY3J1YlJldHBhdGggKHJldHBhdGgpOw0KKyAgICB9 DQorICBlbHNlDQorICAgIHsNCisgICAgICBzd2l0Y2ggKHNwYXRoWzBdKQ0K Kwl7DQorCWNhc2UgJy8nOg0KKwkgIC8vDQorCSAgLy8gSnVzdCBhIG5vcm1h bCBQT1NJWCBwYXRoLg0KKwkgIC8vDQorCSAgew0KKwkgICAgLy8NCisJICAg IC8vIENvbnZlcnQgb25seSB1cCB0byBhICIuLiIgcGF0aCBjb21wb25lbnQs IGFuZA0KKwkgICAgLy8ga2VlcCBhbGwgd2hhdCBmb2xsb3dzIGFzIGlzLg0K KwkgICAgLy8NCisJICAgIHNzcGF0aCA9IHN0cnN0ciAoc3BhdGgsICIvLi4i KTsNCisJICAgIGlmIChzc3BhdGgpDQorCSAgICAgIHsNCisJCSpzc3BhdGgg PSAnXDAnOw0KKwkJY2hhciAqc3dpbjMyX3BhdGggPSBhcmdfaGV1cmlzdGlj IChzcGF0aCk7DQorCQlpZiAoc3dpbjMyX3BhdGggPT0gc3BhdGgpDQorCQkg IHsNCisJCSAgICBkZWJ1Z19wcmludGYoInJldHVybmluZzogJXMiLCBhcmcp Ow0KKwkJICAgIHJldHVybiAoKGNoYXIgKilhcmcpOw0KKwkJICB9DQorCQly ZXRwYXRoY3B5IChzd2luMzJfcGF0aCk7DQorCQlyZXRwYXRoY2F0ICgiLyIp Ow0KKwkJcmV0cGF0aGNhdCAoc3NwYXRoKzEpOw0KKwkJZnJlZSAoc3dpbjMy X3BhdGgpOw0KKwkJcmV0dXJuIFNjcnViUmV0cGF0aCAocmV0cGF0aCk7DQor CSAgICAgIH0NCisJCWlmIChzdHJjbXAoc3BhdGgsICIvZGV2L251bGwiKSA9 PSAwKQ0KKwkgICAgICB7DQorCQlyZXRwYXRoY3B5KCJudWwiKTsNCisJCXJl dHVybiBTY3J1YlJldHBhdGggKHJldHBhdGgpOw0KKwkgICAgICB9DQorCSAg ICBwYXRoX2NvbnYgcCAoc3BhdGgsIDApOw0KKwkgICAgaWYgKHAuZXJyb3Ip DQorCSAgICAgIHsNCisJCXNldF9lcnJubyhwLmVycm9yKTsNCisJCWRlYnVn X3ByaW50ZigicmV0dXJuaW5nOiAlcyIsIGFyZyk7DQorCQlyZXR1cm4gKChj aGFyICopYXJnKTsNCisJICAgICAgfQ0KKwkgICAgcmV0cGF0aGNweSAocC5n ZXRfd2luMzIgKCkpOw0KKwkgICAgcmV0dXJuIFNjcnViUmV0cGF0aCAocmV0 cGF0aCk7DQorCSAgfQ0KKwljYXNlICctJzoNCisJICAvLw0KKwkgIC8vIGhl cmUgd2UgY2hlY2sgZm9yIFBPU0lYIHBhdGhzIGFzIGF0dHJpYnV0ZXMgdG8g YSBQT1NJWCBzd2l0Y2guDQorCSAgLy8NCisJICBzc3BhdGggPSBzdHJjaHIg KHNwYXRoLCAnPScpOw0KKwkgIGlmIChzc3BhdGgpDQorCSAgICB7DQorCSAg ICAgIC8vDQorCSAgICAgIC8vIGp1c3QgdXNlIHJlY3Vyc2lvbiBpZiB3ZSBm aW5kIGEgc2V0IHZhcmlhYmxlIHRva2VuLg0KKwkgICAgICAvLw0KKwkgICAg ICAqc3NwYXRoID0gJ1wwJzsNCisJICAgICAgaWYgKGlzYWJzd2lucGF0aCAo c3NwYXRoICsgMSkpIHsNCisJCWRlYnVnX3ByaW50ZigicmV0dXJuaW5nOiAl cyIsIGFyZyk7DQorCQlyZXR1cm4gKGNoYXIgKilhcmc7DQorCSAgICAgIH0N CisJICAgICAgY2hhciAqc3dpbjMyX3BhdGggPSBhcmdfaGV1cmlzdGljKHNz cGF0aCArIDEpOw0KKwkgICAgICBpZiAoc3dpbjMyX3BhdGggPT0gc3NwYXRo ICsgMSkNCisJCXsNCisJCSAgZGVidWdfcHJpbnRmKCJyZXR1cm5pbmc6ICVz IiwgYXJnKTsNCisJCSAgcmV0dXJuICgoY2hhciAqKWFyZyk7DQorCQl9DQor CSAgICAgIHJldHBhdGhjcHkgKHNwYXRoKTsNCisJICAgICAgcmV0cGF0aGNh dCAoIj0iKTsNCisJICAgICAgcmV0cGF0aGNhdCAoc3dpbjMyX3BhdGgpOw0K KwkgICAgICBmcmVlIChzd2luMzJfcGF0aCk7DQorCSAgICAgIHJldHVybiBT Y3J1YlJldHBhdGggKHJldHBhdGgpOw0KKwkgICAgfQ0KKwkgIGVsc2UNCisJ ICAgIHsNCisJICAgICAgLy8NCisJICAgICAgLy8gQ2hlY2sgZm9yIHNpbmds ZSBsZXR0ZXIgb3B0aW9uIHdpdGggYQ0KKwkgICAgICAvLyBwYXRoIGFyZ3Vt ZW50IGF0dGFjaGVkLCBlZyAtSS9pbmNsdWRlICovDQorCSAgICAgIC8vDQor CSAgICAgIGlmIChzcGF0aFsxXSAmJiBzcGF0aFsyXSA9PSAnLycpDQorCQl7 DQorCQkgIGRlYnVnX3ByaW50Zigic3BhdGggPSAlcyIsIHNwYXRoKTsNCisJ CSAgc3NwYXRoID0gc3BhdGggKyAyOw0KKwkJICBjaGFyICpzd2luMzJfcGF0 aCA9IGFyZ19oZXVyaXN0aWMgKHNzcGF0aCk7DQorCQkgIGlmIChzd2luMzJf cGF0aCA9PSBzc3BhdGgpDQorCQkgICAgew0KKwkJICAgICAgZGVidWdfcHJp bnRmKCJyZXR1cm5pbmc6ICVzIiwgYXJnKTsNCisJCSAgICAgIHJldHVybiAo KGNoYXIgKilhcmcpOw0KKwkJICAgIH0NCisJCSAgc3NwYXRoID0gKGNoYXIg KilzcGF0aDsNCisJCSAgc3NwYXRoKys7DQorCQkgIHNzcGF0aCsrOw0KKwkJ ICAqc3NwYXRoID0gJ1wwJzsNCisJCSAgcmV0cGF0aGNweSAoc3BhdGgpOw0K KwkJICAqc3NwYXRoID0gJy8nOw0KKwkJICByZXRwYXRoY2F0IChzd2luMzJf cGF0aCk7DQorCQkgIGZyZWUgKHN3aW4zMl9wYXRoKTsNCisJCSAgcmV0dXJu IFNjcnViUmV0cGF0aCAocmV0cGF0aCk7DQorCQl9DQorCSAgICAgIGVsc2UN CisJCXsNCisJCSAgZGVidWdfcHJpbnRmKCJyZXR1cm5pbmc6ICVzIiwgYXJn KTsNCisJCSAgcmV0dXJuICgoY2hhciAqKWFyZyk7DQorCQl9DQorCSAgICB9 DQorCSAgYnJlYWs7DQorCWNhc2UgJ0AnOg0KKwkgIC8vDQorCSAgLy8gaGVy ZSB3ZSBjaGVjayBmb3IgUE9TSVggcGF0aHMgYXMgYXR0cmlidXRlcyB0byBh IHJlc3BvbnNlDQorCSAgLy8gZmlsZSBhcmd1bWVudCAoQGZpbGUpLiBUaGlz IGlzIHNwZWNpZmljYWxseSB0byBzdXBwb3J0DQorCSAgLy8gTWluR1cgYmlu dXRpbHMgYW5kIGdjYy4NCisJICAvLw0KKwkgIHNzcGF0aCA9IHNwYXRoICsg MTsNCisJICBpZiAoaXNhYnN3aW5wYXRoIChzc3BhdGgpKQ0KKwkgICAgew0K KwkgICAgICBkZWJ1Z19wcmludGYoInJldHVybmluZzogJXMiLCBhcmcpOw0K KwkgICAgICByZXR1cm4gKGNoYXIgKilhcmc7DQorCSAgICB9DQorCSAgaWYg KHNwYXRoWzFdID09ICcvJykNCisJICAgIHsNCisJICAgICAgZGVidWdfcHJp bnRmKCJzcGF0aCA9ICVzIiwgc3BhdGgpOw0KKwkgICAgICBjaGFyICpzd2lu MzJfcGF0aCA9IGFyZ19oZXVyaXN0aWMgKHNzcGF0aCk7DQorCSAgICAgIGlm IChzd2luMzJfcGF0aCA9PSBzc3BhdGgpDQorCQl7DQorCQkgIGRlYnVnX3By aW50ZigicmV0dXJuaW5nOiAlcyIsIGFyZyk7DQorCQkgIHJldHVybiAoKGNo YXIgKilhcmcpOw0KKwkJfQ0KKwkgICAgICBzc3BhdGggPSAoY2hhciAqKXNw YXRoOw0KKwkgICAgICBzc3BhdGgrKzsNCisJICAgICAgKnNzcGF0aCA9ICdc MCc7DQorCSAgICAgIHJldHBhdGhjcHkgKHNwYXRoKTsNCisJICAgICAgKnNz cGF0aCA9ICcvJzsNCisJICAgICAgcmV0cGF0aGNhdCAoc3dpbjMyX3BhdGgp Ow0KKwkgICAgICBmcmVlIChzd2luMzJfcGF0aCk7DQorCSAgICAgIHJldHVy biBTY3J1YlJldHBhdGggKHJldHBhdGgpOw0KKwkgICAgfQ0KKwkgIGVsc2UN CisJICAgIHsNCisJICAgICAgZGVidWdfcHJpbnRmKCJyZXR1cm5pbmc6ICVz IiwgYXJnKTsNCisJICAgICAgcmV0dXJuICgoY2hhciAqKWFyZyk7DQorCSAg ICB9DQorCSAgYnJlYWs7DQorCWNhc2UgJyInOg0KKwkgIC8vDQorCSAgLy8g SGFuZGxlIGEgZG91YmxlIHF1b3RlIGNhc2UuDQorCSAgLy8NCisJICBkZWJ1 Z19wcmludGYgKCJzcGF0aDogJXMiLCBzcGF0aCk7DQorCSAgaWYgKHNwYXRo WzFdID09ICcvJykNCisJICAgIHsNCisJICAgICAgcmV0cGF0aGNweSAoIlwi Iik7DQorCSAgICAgIGNoYXIgKnRwYXRoID0gc3RyY2hyKCZzcGF0aFsxXSwg JyInKTsNCisJICAgICAgaWYgKHRwYXRoKQ0KKwkJKnRwYXRoID0gKGNoYXIp TlVMTDsNCisJICAgICAgY2hhciAqc3dpbjMyX3BhdGggPSBhcmdfaGV1cmlz dGljICgmc3BhdGhbMV0pOw0KKwkgICAgICBpZiAoc3dpbjMyX3BhdGggPT0g JnNwYXRoWzFdKQ0KKwkJew0KKwkJICBkZWJ1Z19wcmludGYoInJldHVybmlu ZzogJXMiLCBhcmcpOw0KKwkJICByZXR1cm4gKChjaGFyICopYXJnKTsNCisJ CX0NCisJICAgICAgcmV0cGF0aGNhdCAoc3dpbjMyX3BhdGgpOw0KKwkgICAg ICBmcmVlIChzd2luMzJfcGF0aCk7DQorCSAgICAgIGlmICh0cGF0aCkNCisJ CXJldHBhdGhjYXQgKCJcIiIpOw0KKwkgICAgICByZXR1cm4gU2NydWJSZXRw YXRoIChyZXRwYXRoKTsNCisJICAgIH0NCisJICBkZWJ1Z19wcmludGYoInJl dHVybmluZzogJXMiLCBhcmcpOw0KKwkgIHJldHVybiAoKGNoYXIgKilhcmcp Ow0KKwljYXNlICdcJyc6DQorCSAgLy8NCisJICAvLyBIYW5kbGUgYSBzaW5n bGUgcXVvdGUgY2FzZS4NCisJICAvLw0KKwkgIGRlYnVnX3ByaW50ZiAoInNw YXRoOiAlcyIsIHNwYXRoKTsNCisJICBpZiAoc3BhdGhbMV0gPT0gJy8nKQ0K KwkgICAgew0KKwkgICAgICByZXRwYXRoY3B5ICgiJyIpOw0KKwkgICAgICBj aGFyICp0cGF0aCA9IHN0cmNocigmc3BhdGhbMV0sICdcJycpOw0KKwkgICAg ICBpZiAodHBhdGgpDQorCQkqdHBhdGggPSAoY2hhcilOVUxMOw0KKwkgICAg ICBjaGFyICpzd2luMzJfcGF0aCA9IGFyZ19oZXVyaXN0aWMgKCZzcGF0aFsx XSk7DQorCSAgICAgIGlmIChzd2luMzJfcGF0aCA9PSAmc3BhdGhbMV0pDQor CQl7DQorCQkgIGRlYnVnX3ByaW50ZigicmV0dXJuaW5nOiAlcyIsIGFyZyk7 DQorCQkgIHJldHVybiAoKGNoYXIgKilhcmcpOw0KKwkJfQ0KKwkgICAgICBy ZXRwYXRoY2F0IChzd2luMzJfcGF0aCk7DQorCSAgICAgIGZyZWUgKHN3aW4z Ml9wYXRoKTsNCisJICAgICAgaWYgKHRwYXRoKQ0KKwkJcmV0cGF0aGNhdCAo IiciKTsNCisJICAgICAgcmV0dXJuIFNjcnViUmV0cGF0aCAocmV0cGF0aCk7 DQorCSAgICB9DQorCSAgZGVidWdfcHJpbnRmKCJyZXR1cm5pbmc6ICVzIiwg YXJnKTsNCisJICByZXR1cm4gKChjaGFyICopYXJnKTsNCisJZGVmYXVsdDoN CisJICAvLw0KKwkgIC8vIFRoaXMgdGFrZXMgY2FyZSBvZiB2YXJpYWJsZV9m b289L2Jhci9iYXoNCisJICAvLw0KKwkgIGlmICgoc3NwYXRoID0gc3RyY2hy KHNwYXRoLCAnPScpKSAmJiAoc3NwYXRoWzFdID09ICcvJykpDQorCSAgICB7 DQorCSAgICAgIHNzcGF0aFsxXSA9ICdcMCc7DQorCSAgICAgIHJldHBhdGhj cHkgKHNwYXRoKTsNCisJICAgICAgc3NwYXRoWzFdID0gJy8nOw0KKwkgICAg ICBjaGFyICpzd2luMzJfcGF0aCA9IGFyZ19oZXVyaXN0aWMgKCZzc3BhdGhb MV0pOw0KKwkgICAgICBpZiAoc3dpbjMyX3BhdGggPT0gJnNzcGF0aFsxXSkN CisJCXsNCisJCSAgZGVidWdfcHJpbnRmKCJyZXR1cm5pbmc6ICVzIiwgYXJn KTsNCisJCSAgcmV0dXJuICgoY2hhciAqKWFyZyk7DQorCQl9DQorCSAgICAg IHJldHBhdGhjYXQgKHN3aW4zMl9wYXRoKTsNCisJICAgICAgZnJlZSAoc3dp bjMyX3BhdGgpOw0KKwkgICAgICByZXR1cm4gU2NydWJSZXRwYXRoIChyZXRw YXRoKTsNCisJICAgIH0NCisJICAvLw0KKwkgIC8vIE9oIHdlbGwsIG5vdGhp bmcgc3BlY2lhbCBmb3VuZCwgc2V0IHdpbjMyX3BhdGggc2FtZSBhcyBwYXRo Lg0KKwkgIC8vDQorCSAgZGVidWdfcHJpbnRmKCJyZXR1cm5pbmc6ICVzIiwg YXJnKTsNCisJICByZXR1cm4gKChjaGFyICopYXJnKTsNCisJfQ0KKyAgICAg IH0NCisgICAgfQ0KKyAgLy8gSSBzaG91bGQgbm90IGdldCB0byB0aGlzIHBv aW50Lg0KKyAgYXNzZXJ0IChmYWxzZSk7DQorICBkZWJ1Z19wcmludGYoInJl dHVybmluZzogJXMiLCBhcmcpOw0KKyAgcmV0dXJuIFNjcnViUmV0cGF0aCAo cmV0cGF0aCk7DQorfQ0KKw0KIC8qKioqKioqKioqKioqKioqKioqKiBFeHBv cnRlZCBQYXRoIFJvdXRpbmVzICoqKioqKioqKioqKioqKioqKioqKi8NCiAN CiAvKiBDb3ZlciBmdW5jdGlvbnMgdG8gdGhlIHBhdGggY29udmVyc2lvbiBy b3V0aW5lcy4NCkBAIC00NTcyLDYgKzUyMDAsMTUgQEANCiAgIGVsc2UNCiAg ICAgdG9jb3B5ID0gcG9zaXg7DQogDQorICAvLyBNYWtlIHN1cmUgdGhhdCB3 ZSBoYXZlIGZvcndhcmQgc2xhc2hlcyBhbHdheXMuDQorICBjaGFyICpwc3Ry Ow0KKyAgcHN0ciA9IHN0cmNocih0b2NvcHksICdcXCcpOw0KKyAgd2hpbGUg KHBzdHIpDQorICAgIHsNCisgICAgICAqcHN0ciA9ICcvJzsNCisgICAgICBw c3RyID0gc3RyY2hyKHBzdHIsICdcXCcpOw0KKyAgICB9DQorDQogICBkZWJ1 Z19wcmludGYgKCJwb3NpeCAlcyIsIHBvc2l4KTsNCiAgIGlmIChzdHJsZW4g KHRvY29weSkgPj0gdWxlbikNCiAgICAgew0KZGlmZiAtTmF1ciBjdXJyX2N5 Zy93aW5zdXAvY3lnd2luL3NwYXduLmNjIGN1cnJfbXN5cy93aW5zdXAvY3ln d2luL3NwYXduLmNjDQotLS0gY3Vycl9jeWcvd2luc3VwL2N5Z3dpbi9zcGF3 bi5jYwkyMDEzLTA3LTIxIDIzOjMwOjE5LjAwMDAwMDAwMCArMDQwMA0KKysr IGN1cnJfbXN5cy93aW5zdXAvY3lnd2luL3NwYXduLmNjCTIwMTMtMDctMjIg MDY6MzQ6NTUuMDAwMDAwMDAwICswNDAwDQpAQCAtNDA3LDEyICs0MDcsMjYg QEANCiAJICBtb3JlaW5mby0+YXJnYyA9IG5ld2FyZ3YuYXJnYzsNCiAJICBt b3JlaW5mby0+YXJndiA9IG5ld2FyZ3Y7DQogCX0NCi0gICAgICBlbHNlIGlm ICghY21kLmZyb21hcmd2IChuZXdhcmd2LCByZWFsX3BhdGguZ2V0X3dpbjMy ICgpLA0KKyAgICAgIGVsc2UNCisgICAgew0KKwkgICAgZm9yIChpbnQgaSA9 IDA7IGkgPCBuZXdhcmd2LmFyZ2M7IGkrKykNCisJICAgICAgew0KKyAgICAg ICAgICAgIC8vY29udmVydCBhcmd2IHRvIHdpbjMyDQorCSAgICAgICAgaW50 IG5ld2FyZ3ZsZW4gPSBzdHJsZW4gKG5ld2FyZ3ZbaV0pOw0KKwkgICAgICAg IGNoYXIgKnRtcGJ1ZiA9IChjaGFyICopbWFsbG9jIChuZXdhcmd2bGVuICsg MSk7DQorCSAgICAgICAgbWVtY3B5ICh0bXBidWYsIG5ld2FyZ3ZbaV0sIG5l d2FyZ3ZsZW4gKyAxKTsNCisJICAgICAgICB0bXBidWYgPSBhcmdfaGV1cmlz dGljKHRtcGJ1Zik7DQorCSAgICAgICAgZGVidWdfcHJpbnRmKCJuZXdhcmd2 WyVkXSA9ICVzIiwgaSwgbmV3YXJndltpXSk7DQorCSAgICAgICAgbmV3YXJn di5yZXBsYWNlIChpLCB0bXBidWYpOw0KKwkgICAgICAgIGZyZWUgKHRtcGJ1 Zik7DQorCSAgICAgIH0NCisgICAgICAgIGlmICghY21kLmZyb21hcmd2IChu ZXdhcmd2LCByZWFsX3BhdGguZ2V0X3dpbjMyICgpLA0KIAkJCQkgICByZWFs X3BhdGguaXNjeWdleGVjICgpKSkNCi0Jew0KLQkgIHJlcyA9IC0xOw0KLQkg IGdvdG8gb3V0Ow0KLQl9DQorCSAgICAgIHsNCisJICAgICAgICByZXMgPSAt MTsNCisJICAgICAgICBnb3RvIG91dDsNCisJICAgICAgfQ0KKyAgICB9DQog DQogDQogICAgICAgaWYgKG1vZGUgIT0gX1BfT1ZFUkxBWSB8fCAhcmVhbF9w YXRoLmlzY3lnZXhlYyAoKQ0KQEAgLTUzNywxMSArNTUxLDExIEBADQogDQog ICBjeWdiZW5jaCAoInNwYXduLXdvcmtlciIpOw0KIA0KLSAgaWYgKCFyZWFs X3BhdGguaXNjeWdleGVjKCkpDQorICBpZiAoIXJlYWxfcGF0aC5pc2N5Z2V4 ZWMgKCkpDQogICAgIDo6Y3lnaGVhcC0+ZmR0YWIuc2V0X2ZpbGVfcG9pbnRl cnNfZm9yX2V4ZWMgKCk7DQogDQogICBtb3JlaW5mby0+ZW52cCA9IGJ1aWxk X2VudiAoZW52cCwgZW52YmxvY2ssIG1vcmVpbmZvLT5lbnZjLA0KLQkJCSAg ICAgIHJlYWxfcGF0aC5pc2N5Z2V4ZWMgKCkpOw0KKwkJCSAgICAgIHJlYWxf cGF0aC5pc2N5Z2V4ZWMgKCksIHJlYWxfcGF0aC5pc2N5Z2V4ZWMgKCkpOw0K ICAgaWYgKCFtb3JlaW5mby0+ZW52cCB8fCAhZW52YmxvY2spDQogICAgIHsN CiAgICAgICBzZXRfZXJybm8gKEUyQklHKTsNCmRpZmYgLU5hdXIgY3Vycl9j eWcvd2luc3VwL2N5Z3dpbi91bmFtZS5jYyBjdXJyX21zeXMvd2luc3VwL2N5 Z3dpbi91bmFtZS5jYw0KLS0tIGN1cnJfY3lnL3dpbnN1cC9jeWd3aW4vdW5h bWUuY2MJMjAxMy0wNy0yMSAyMzozMDoxOS4wMDAwMDAwMDAgKzA0MDANCisr KyBjdXJyX21zeXMvd2luc3VwL2N5Z3dpbi91bmFtZS5jYwkyMDEzLTA3LTIy IDA2OjM0OjU1LjAwMDAwMDAwMCArMDQwMA0KQEAgLTI5LDcgKzI5LDkgQEAN CiAgIGNoYXIgKnNucCA9IHN0cnN0ciAgKGN5Z3dpbl92ZXJzaW9uLmRsbF9i dWlsZF9kYXRlLCAiU05QIik7DQogDQogICBtZW1zZXQgKG5hbWUsIDAsIHNp emVvZiAoKm5hbWUpKTsNCi0gIF9fc21hbGxfc3ByaW50ZiAobmFtZS0+c3lz bmFtZSwgIkNZR1dJTl8lcyIsIHdpbmNhcC5vc25hbWUgKCkpOw0KKyAgY2hh ciogbXN5c3RlbSA9IGdldGVudigiTVNZU1RFTSIpOw0KKyAgY29uc3QgY2hh ciAqbXN5c3RlbV9jeWd3aW4gPSAiQ1lHV0lOIjsNCisgIF9fc21hbGxfc3By aW50ZiAobmFtZS0+c3lzbmFtZSwgIiVzXyVzIiwgbXN5c3RlbSA/IG1zeXN0 ZW0gOiBtc3lzdGVtX2N5Z3dpbiwgd2luY2FwLm9zbmFtZSAoKSk7DQogDQog ICAvKiBBZGQgYSBoaW50IHRvIHRoZSBzeXNuYW1lLCB0aGF0IHdlJ3JlIHJ1 bm5pbmcgdW5kZXIgV09XNjQuICBUaGlzIG1pZ2h0DQogICAgICBnaXZlIGFu IGVhcmx5IGNsdWUgaWYgc29tZWJvZHkgZW5jb3VudGVycyBwcm9ibGVtcy4g Ki8NCmRpZmYgLU5hdXIgY3Vycl9jeWcvd2luc3VwL2N5Z3dpbi93aW5mLmgg Y3Vycl9tc3lzL3dpbnN1cC9jeWd3aW4vd2luZi5oDQotLS0gY3Vycl9jeWcv d2luc3VwL2N5Z3dpbi93aW5mLmgJMjAxMy0wNy0yMSAyMzozMDoxOS4wMDAw MDAwMDAgKzA0MDANCisrKyBjdXJyX21zeXMvd2luc3VwL2N5Z3dpbi93aW5m LmgJMjAxMy0wNy0yMiAwNjozNDo1NS4wMDAwMDAwMDAgKzA0MDANCkBAIC01 Myw2ICs1MywxMCBAQA0KIAljYWxsb2NlZCA9IDE7DQogICAgICAgfQ0KICAg fQ0KKyAgdm9pZCByZXBsYWNlIChpbnQgaSwgY29uc3QgY2hhciAqYXJnKQ0K KyAgew0KKyAgICBhcmd2W2ldID0gY3N0cmR1cDEgKGFyZyk7DQorICB9DQog ICB2b2lkIGR1cF9hbGwgKCkNCiAgIHsNCiAgICAgZm9yIChpbnQgaSA9IGNh bGxvY2VkOyBpIDwgYXJnYzsgaSsrKQ0KQEAgLTc2LDYgKzgwLDggQEANCiAg IHZvaWQgcHJlcGVuZCAoY29uc3QgY2hhciAqLCBpbnQpOw0KICAgdm9pZCBf X3JlZzIgZmluaXNoIChib29sKTsNCiAgIGJvb2wgX19yZWczIGZyb21hcmd2 KGF2JiwgY29uc3QgY2hhciAqLCBib29sKTs7DQorICBvcGVyYXRvciBjaGFy ICooKSB7cmV0dXJuIGJ1Zjt9DQorICBzaXplX3QgaWR4KCkge3JldHVybiBp eDt9DQogICBvcGVyYXRvciBzaXplX3QgKCkgY29uc3QgeyByZXR1cm4gaXgg KyAxOyB9DQogICBvcGVyYXRvciBjb25zdCBjaGFyICogKCkgY29uc3QgeyBy ZXR1cm4gYnVmOyB9DQogICBvcGVyYXRvciB3Y2hhcl90ICogKCkNCg== --------------030100070709080206050506--