Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1YdMjI-0005vP-Cs for pgsql-hackers@arkaria.postgresql.org; Wed, 01 Apr 2015 17:47:05 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.80) (envelope-from ) id 1YdMjH-0005gQ-Mr for pgsql-hackers@arkaria.postgresql.org; Wed, 01 Apr 2015 17:47:03 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.80) (envelope-from ) id 1YdMjE-0005g4-GP for pgsql-hackers@postgresql.org; Wed, 01 Apr 2015 17:47:01 +0000 Received: from linode.thelabyrinth.net ([198.58.117.137] helo=mail.thelabyrinth.net) by makus.postgresql.org with esmtps (TLS1.1:DHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.80) (envelope-from ) id 1YdMj7-0003we-Fh for pgsql-hackers@postgresql.org; Wed, 01 Apr 2015 17:46:58 +0000 Received: from theseus.local (unknown [98.204.177.190]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: dsteele) by mail.thelabyrinth.net (Postfix) with ESMTPSA id 1286F138CF; Wed, 1 Apr 2015 17:46:51 +0000 (UTC) Message-ID: <551C2F0B.3010305@pgmasters.net> Date: Wed, 01 Apr 2015 13:46:51 -0400 From: David Steele User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:31.0) Gecko/20100101 Thunderbird/31.5.0 MIME-Version: 1.0 To: Sawada Masahiko CC: Alvaro Herrera , Abhijit Menon-Sen , Stephen Frost , Fujii Masao , PostgreSQL-development Subject: Re: Auditing extension for PostgreSQL (Take 2) References: <54E005CC.1060605@pgmasters.net> <20150217153402.GQ6717@tamriel.snowman.net> <54EB4E56.7050102@pgmasters.net> <54ECA551.8060306@pgmasters.net> <20150323053146.GA1919@toroid.org> <55104204.80008@pgmasters.net> <20150323181724.GG3636@alvh.no-ip.org> <55118509.8020009@pgmasters.net> <55122A1E.7030401@pgmasters.net> <5512B71C.7030808@pgmasters.net> In-Reply-To: <5512B71C.7030808@pgmasters.net> OpenPGP: id=2624538721DAF9D5FDF4952A9FCDF424A2739CF3 Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="7uVK9cfBC8hsvB44K8sNd0wI2rujkkCIb" X-Pg-Spam-Score: -1.9 (-) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-hackers Precedence: bulk Sender: pgsql-hackers-owner@postgresql.org This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --7uVK9cfBC8hsvB44K8sNd0wI2rujkkCIb Content-Type: multipart/mixed; boundary="------------080708060604090208060604" This is a multi-part message in MIME format. --------------080708060604090208060604 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hi Sawada, On 3/25/15 9:24 AM, David Steele wrote: > On 3/25/15 7:46 AM, Sawada Masahiko wrote: >> 2. >> I got ERROR when executing function uses cursor. >> >> 1) create empty table (hoge table) >> 2) create test function as follows. >> >> create function test() returns int as $$ >> declare >> cur1 cursor for select * from hoge; >> tmp int; >> begin >> open cur1; >> fetch cur1 into tmp; >> return tmp; >> end$$ >> language plpgsql ; >> >> 3) execute test function (got ERROR) >> =3D# select test(); >> LOG: AUDIT: SESSION,6,1,READ,SELECT,,,selecT test(); >> LOG: AUDIT: SESSION,6,2,FUNCTION,EXECUTE,FUNCTION,public.test,selecT = test(); >> LOG: AUDIT: SESSION,6,3,READ,SELECT,,,select * from hoge >> CONTEXT: PL/pgSQL function test() line 6 at OPEN >> ERROR: pg_audit stack is already empty >> STATEMENT: selecT test(); >> >> It seems like that the item in stack is already freed by deleting >> pg_audit memory context (in MemoryContextDelete()), >> before calling stack_pop in dropping of top-level Portal. This has been fixed and I have attached a new patch. I've seen this with cursors before where the parent MemoryContext is freed before control is returned to ProcessUtility. I think that's strange behavior but there's not a lot I can do about it. The code I put in to deal with this situation was not quite robust enough so I had to harden it a bit more. Let me know if you see any other issues. Thanks, --=20 - David Steele david@pgmasters.net --------------080708060604090208060604 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="pg_audit-v6.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="pg_audit-v6.patch" ZGlmZiAtLWdpdCBhL2NvbnRyaWIvTWFrZWZpbGUgYi9jb250cmliL01ha2VmaWxlCmluZGV4 IDE5NWQ0NDcuLmQ4ZTc1ZjQgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvTWFrZWZpbGUKKysrIGIv Y29udHJpYi9NYWtlZmlsZQpAQCAtMjksNiArMjksNyBAQCBTVUJESVJTID0gXAogCQlwYWdl aW5zcGVjdAlcCiAJCXBhc3N3b3JkY2hlY2sJXAogCQlwZ19hcmNoaXZlY2xlYW51cCBcCisJ CXBnX2F1ZGl0CVwKIAkJcGdfYnVmZmVyY2FjaGUJXAogCQlwZ19mcmVlc3BhY2VtYXAgXAog CQlwZ19wcmV3YXJtCVwKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfYXVkaXQvTWFrZWZpbGUg Yi9jb250cmliL3BnX2F1ZGl0L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjMyYmM2ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX2F1ZGl0 L01ha2VmaWxlCkBAIC0wLDAgKzEsMjAgQEAKKyMgcGdfYXVkaXQvTWFrZWZpbGUKKworTU9E VUxFID0gcGdfYXVkaXQKK01PRFVMRV9iaWcgPSBwZ19hdWRpdAorT0JKUyA9IHBnX2F1ZGl0 Lm8KKworRVhURU5TSU9OID0gcGdfYXVkaXQKKworREFUQSA9IHBnX2F1ZGl0LS0xLjAuMC5z cWwKKworaWZkZWYgVVNFX1BHWFMKK1BHX0NPTkZJRyA9IHBnX2NvbmZpZworUEdYUyA6PSAk KHNoZWxsICQoUEdfQ09ORklHKSAtLXBneHMpCitpbmNsdWRlICQoUEdYUykKK2Vsc2UKK3N1 YmRpciA9IGNvbnRyaWIvcGdfYXVkaXQKK3RvcF9idWlsZGRpciA9IC4uLy4uCitpbmNsdWRl ICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCitpbmNsdWRlICQodG9wX3Ny Y2RpcikvY29udHJpYi9jb250cmliLWdsb2JhbC5taworZW5kaWYKZGlmZiAtLWdpdCBhL2Nv bnRyaWIvcGdfYXVkaXQvcGdfYXVkaXQtLTEuMC4wLnNxbCBiL2NvbnRyaWIvcGdfYXVkaXQv cGdfYXVkaXQtLTEuMC4wLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li45ZDllZTgzCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19hdWRpdC9wZ19hdWRp dC0tMS4wLjAuc3FsCkBAIC0wLDAgKzEsMjIgQEAKKy8qIHBnX2F1ZGl0L3BnX2F1ZGl0LS0x LjAuMC5zcWwgKi8KKworLS0gY29tcGxhaW4gaWYgc2NyaXB0IGlzIHNvdXJjZWQgaW4gcHNx bCwgcmF0aGVyIHRoYW4gdmlhIENSRUFURSBFWFRFTlNJT04KK1xlY2hvIFVzZSAiQ1JFQVRF IEVYVEVOU0lPTiBwZ19hdWRpdCIgdG8gbG9hZCB0aGlzIGZpbGUuXHF1aXQKKworQ1JFQVRF IEZVTkNUSU9OIHBnX2F1ZGl0X2RkbF9jb21tYW5kX2VuZCgpCisJUkVUVVJOUyBldmVudF90 cmlnZ2VyCisJTEFOR1VBR0UgQworCUFTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdfYXVkaXRf ZGRsX2NvbW1hbmRfZW5kJzsKKworQ1JFQVRFIEVWRU5UIFRSSUdHRVIgcGdfYXVkaXRfZGRs X2NvbW1hbmRfZW5kCisJT04gZGRsX2NvbW1hbmRfZW5kCisJRVhFQ1VURSBQUk9DRURVUkUg cGdfYXVkaXRfZGRsX2NvbW1hbmRfZW5kKCk7CisKK0NSRUFURSBGVU5DVElPTiBwZ19hdWRp dF9zcWxfZHJvcCgpCisJUkVUVVJOUyBldmVudF90cmlnZ2VyCisJTEFOR1VBR0UgQworCUFT ICdNT0RVTEVfUEFUSE5BTUUnLCAncGdfYXVkaXRfc3FsX2Ryb3AnOworCitDUkVBVEUgRVZF TlQgVFJJR0dFUiBwZ19hdWRpdF9zcWxfZHJvcAorCU9OIHNxbF9kcm9wCisJRVhFQ1VURSBQ Uk9DRURVUkUgcGdfYXVkaXRfc3FsX2Ryb3AoKTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdf YXVkaXQvcGdfYXVkaXQuYyBiL2NvbnRyaWIvcGdfYXVkaXQvcGdfYXVkaXQuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzRkZjVhCi0tLSAvZGV2L251bGwKKysr IGIvY29udHJpYi9wZ19hdWRpdC9wZ19hdWRpdC5jCkBAIC0wLDAgKzEsMTY4OCBAQAorLyot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHBnX2F1ZGl0LmMKKyAqCisgKiBBbiBhdWRp dGluZyBleHRlbnNpb24gZm9yIFBvc3RncmVTUUwuIEltcHJvdmVzIG9uIHN0YW5kYXJkIHN0 YXRlbWVudCBsb2dnaW5nCisgKiBieSBhZGRpbmcgbW9yZSBsb2dnaW5nIGNsYXNzZXMsIG9i amVjdCBsZXZlbCBsb2dnaW5nLCBhbmQgcHJvdmlkaW5nCisgKiBmdWxseS1xdWFsaWZpZWQg b2JqZWN0IG5hbWVzIGZvciBhbGwgRE1MIGFuZCBtYW55IERETCBzdGF0ZW1lbnRzIChTZWUK KyAqIHBnX2F1ZGl0LnNnbWwgZm9yIGRldGFpbHMpLgorICoKKyAqIENvcHlyaWdodCAoYykg MjAxNC0yMDE1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAq IElERU5USUZJQ0FUSU9OCisgKgkJICBjb250cmliL3BnX2F1ZGl0L3BnX2F1ZGl0LmMKKyAq LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgor CisjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgorI2luY2x1ZGUgImFjY2Vzcy9z eXNhdHRyLmgiCisjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIKKyNpbmNsdWRlICJjYXRhbG9n L2NhdGFsb2cuaCIKKyNpbmNsdWRlICJjYXRhbG9nL29iamVjdGFjY2Vzcy5oIgorI2luY2x1 ZGUgImNhdGFsb2cvcGdfY2xhc3MuaCIKKyNpbmNsdWRlICJjYXRhbG9nL25hbWVzcGFjZS5o IgorI2luY2x1ZGUgImNvbW1hbmRzL2RiY29tbWFuZHMuaCIKKyNpbmNsdWRlICJjYXRhbG9n L3BnX3Byb2MuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9ldmVudF90cmlnZ2VyLmgiCisjaW5j bHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKKyNpbmNsdWRlICJleGVjdXRvci9zcGkuaCIK KyNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJsaWJwcS9hdXRoLmgiCisjaW5j bHVkZSAibm9kZXMvbm9kZXMuaCIKKyNpbmNsdWRlICJ0Y29wL3V0aWxpdHkuaCIKKyNpbmNs dWRlICJ1dGlscy9hY2wuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1 ZGUgInV0aWxzL2d1Yy5oIgorI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorI2luY2x1 ZGUgInV0aWxzL21lbXV0aWxzLmgiCisjaW5jbHVkZSAidXRpbHMvcmVsLmgiCisjaW5jbHVk ZSAidXRpbHMvc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKKwor UEdfTU9EVUxFX01BR0lDOworCit2b2lkIF9QR19pbml0KHZvaWQpOworCisvKgorICogRXZl bnQgdHJpZ2dlciBwcm90b3R5cGVzCisgKi8KK0RhdHVtIHBnX2F1ZGl0X2RkbF9jb21tYW5k X2VuZChQR19GVU5DVElPTl9BUkdTKTsKK0RhdHVtIHBnX2F1ZGl0X3NxbF9kcm9wKFBHX0ZV TkNUSU9OX0FSR1MpOworCitQR19GVU5DVElPTl9JTkZPX1YxKHBnX2F1ZGl0X2RkbF9jb21t YW5kX2VuZCk7CitQR19GVU5DVElPTl9JTkZPX1YxKHBnX2F1ZGl0X3NxbF9kcm9wKTsKKwor LyoKKyAqIGF1ZGl0Um9sZSBpcyB0aGUgc3RyaW5nIHZhbHVlIG9mIHRoZSBwZ19hdWRpdC5y b2xlIEdVQywgd2hpY2ggY29udGFpbnMgdGhlCisgKiByb2xlIGZvciBncmFudC1iYXNlZCBh dWRpdGluZy4KKyAqLworY2hhciAqYXVkaXRSb2xlID0gTlVMTDsKKworLyoKKyAqIGF1ZGl0 TG9nIGlzIHRoZSBzdHJpbmcgdmFsdWUgb2YgdGhlIHBnX2F1ZGl0LmxvZyBHVUMsIGUuZy4g InJlYWQsIHdyaXRlLCBkZGwiCisgKiAoaXQncyBub3QgdXNlZCBieSB0aGUgbW9kdWxlIGJ1 dCBpcyByZXF1aXJlZCBieSBEZWZpbmVDdXN0b21TdHJpbmdWYXJpYWJsZSkuCisgKiBFYWNo IHRva2VuIGNvcnJlc3BvbmRzIHRvIGEgZmxhZyBpbiBlbnVtIExvZ0NsYXNzIGJlbG93LiBX ZSBjb252ZXJ0IHRoZSBsaXN0CisgKiBvZiB0b2tlbnMgaW50byBhIGJpdG1hcCBpbiBhdWRp dExvZ0JpdG1hcCBmb3IgaW50ZXJuYWwgdXNlLgorICovCitjaGFyICphdWRpdExvZyA9IE5V TEw7CitzdGF0aWMgdWludDY0IGF1ZGl0TG9nQml0bWFwID0gMDsKKworLyoKKyAqIFN0cmlu ZyBjb25zdGFudHMgZm9yIGF1ZGl0IHR5cGVzIC0gdXNlZCB3aGVuIGxvZ2dpbmcgdG8gZGlz dGluZ3Vpc2ggc2Vzc2lvbgorICogdnMuIG9iamVjdCBhdWRpdGluZy4KKyAqLworI2RlZmlu ZSBBVURJVF9UWVBFX09CSkVDVAkiT0JKRUNUIgorI2RlZmluZSBBVURJVF9UWVBFX1NFU1NJ T04JIlNFU1NJT04iCisKKy8qCisgKiBTdHJpbmcgY29uc3RhbnRzIGZvciBsb2cgY2xhc3Nl cyAtIHVzZWQgd2hlbiBwcm9jZXNzaW5nIHRva2VucyBpbiB0aGUKKyAqIHBnX2F1ZGl0Lmxv ZyBHVUMuCisgKi8KKyNkZWZpbmUgQ0xBU1NfRERMCQkJIkRETCIKKyNkZWZpbmUgQ0xBU1Nf RlVOQ1RJT04JCSJGVU5DVElPTiIKKyNkZWZpbmUgQ0xBU1NfTUlTQwkJCSJNSVNDIgorI2Rl ZmluZSBDTEFTU19QQVJBTUVURVIJCSJQQVJBTUVURVIiCisjZGVmaW5lIENMQVNTX1JFQUQJ CQkiUkVBRCIKKyNkZWZpbmUgQ0xBU1NfV1JJVEUJCQkiV1JJVEUiCisKKyNkZWZpbmUgQ0xB U1NfQUxMCQkJIkFMTCIKKyNkZWZpbmUgQ0xBU1NfTk9ORQkJCSJOT05FIgorCisvKiBMb2cg Y2xhc3MgZW51bSB1c2VkIHRvIHJlcHJlc2VudCBiaXRzIGluIGF1ZGl0TG9nQml0bWFwICov CitlbnVtIExvZ0NsYXNzCit7CisJTE9HX05PTkUgPSAwLAorCisJLyogRERMOiBDUkVBVEUv RFJPUC9BTFRFUiAqLworCUxPR19EREwgPSAoMSA8PCAxKSwKKworCS8qIEZ1bmN0aW9uIGV4 ZWN1dGlvbiAqLworCUxPR19GVU5DVElPTiA9ICgxIDw8IDIpLAorCisJLyogU3RhdGVtZW50 cyBub3QgY292ZXJlZCBieSBhbm90aGVyIGNsYXNzICovCisJTE9HX01JU0MgPSAoMSA8PCAz KSwKKworCS8qIEZ1bmN0aW9uIGV4ZWN1dGlvbiAqLworCUxPR19QQVJBTUVURVIgPSAoMSA8 PCA0KSwKKworCS8qIFNFTEVDVCAqLworCUxPR19SRUFEID0gKDEgPDwgNSksCisKKwkvKiBJ TlNFUlQsIFVQREFURSwgREVMRVRFLCBUUlVOQ0FURSAqLworCUxPR19XUklURSA9ICgxIDw8 IDYpLAorCisJLyogQWJzb2x1dGVseSBldmVyeXRoaW5nICovCisJTE9HX0FMTCA9IH4odWlu dDY0KTAKK307CisKKy8qIFN0cmluZyBjb25zdGFudHMgZm9yIGxvZ2dpbmcgY29tbWFuZHMg Ki8KKyNkZWZpbmUgQ09NTUFORF9ERUxFVEUJCSJERUxFVEUiCisjZGVmaW5lIENPTU1BTkRf RVhFQ1VURQkJIkVYRUNVVEUiCisjZGVmaW5lIENPTU1BTkRfSU5TRVJUCQkiSU5TRVJUIgor I2RlZmluZSBDT01NQU5EX1VQREFURQkJIlVQREFURSIKKyNkZWZpbmUgQ09NTUFORF9TRUxF Q1QJCSJTRUxFQ1QiCisKKyNkZWZpbmUgQ09NTUFORF9VTktOT1dOCQkiVU5LTk9XTiIKKwor LyogU3RyaW5nIGNvbnN0YW50cyBmb3IgbG9nZ2luZyBvYmplY3QgdHlwZXMgKi8KKyNkZWZp bmUgT0JKRUNUX1RZUEVfQ09NUE9TSVRFX1RZUEUJIkNPTVBPU0lURSBUWVBFIgorI2RlZmlu ZSBPQkpFQ1RfVFlQRV9GT1JFSUdOX1RBQkxFCSJGT1JFSUdOIFRBQkxFIgorI2RlZmluZSBP QkpFQ1RfVFlQRV9GVU5DVElPTgkJIkZVTkNUSU9OIgorI2RlZmluZSBPQkpFQ1RfVFlQRV9J TkRFWAkJCSJJTkRFWCIKKyNkZWZpbmUgT0JKRUNUX1RZUEVfVEFCTEUJCQkiVEFCTEUiCisj ZGVmaW5lIE9CSkVDVF9UWVBFX1RPQVNUVkFMVUUJCSJUT0FTVFZBTFVFIgorI2RlZmluZSBP QkpFQ1RfVFlQRV9NQVRWSUVXCQkJIk1BVEVSSUFMSVpFRCBWSUVXIgorI2RlZmluZSBPQkpF Q1RfVFlQRV9TRVFVRU5DRQkJIlNFUVVFTkNFIgorI2RlZmluZSBPQkpFQ1RfVFlQRV9WSUVX CQkJIlZJRVciCisKKyNkZWZpbmUgT0JKRUNUX1RZUEVfVU5LTk9XTgkJCSJVTktOT1dOIgor CisvKgorICogQW4gQXVkaXRFdmVudCByZXByZXNlbnRzIGFuIG9wZXJhdGlvbiB0aGF0IHBv dGVudGlhbGx5IGFmZmVjdHMgYSBzaW5nbGUKKyAqIG9iamVjdC4gSWYgYSBzdGF0ZW1lbnQg YWZmZWN0cyBtdWx0aXBsZSBvYmplY3RzIG11bHRpcGxlIEF1ZGl0RXZlbnRzIG11c3QgYmUK KyAqIGNyZWF0ZWQgdG8gcmVwcmVzZW50IGl0LgorICovCit0eXBlZGVmIHN0cnVjdAorewor CWludDY0IHN0YXRlbWVudElkOworCWludDY0IHN1YnN0YXRlbWVudElkOworCisJTG9nU3Rt dExldmVsIGxvZ1N0bXRMZXZlbDsKKwlOb2RlVGFnIGNvbW1hbmRUYWc7CisJY29uc3QgY2hh ciAqY29tbWFuZDsKKwljb25zdCBjaGFyICpvYmplY3RUeXBlOworCWNoYXIgKm9iamVjdE5h bWU7CisJY29uc3QgY2hhciAqY29tbWFuZFRleHQ7CisJUGFyYW1MaXN0SW5mbyBwYXJhbUxp c3Q7CisKKwlib29sIGdyYW50ZWQ7CisJYm9vbCBsb2dnZWQ7Cit9IEF1ZGl0RXZlbnQ7CisK Ky8qCisgKiBBIHNpbXBsZSBGSUZPIHF1ZXVlIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGN1cnJl bnQgc3RhY2sgb2YgYXVkaXQgZXZlbnRzLgorICovCit0eXBlZGVmIHN0cnVjdCBBdWRpdEV2 ZW50U3RhY2tJdGVtCit7CisJc3RydWN0IEF1ZGl0RXZlbnRTdGFja0l0ZW0gKm5leHQ7CisK KwlBdWRpdEV2ZW50IGF1ZGl0RXZlbnQ7CisKKwlpbnQ2NCBzdGFja0lkOworCisJTWVtb3J5 Q29udGV4dCBjb250ZXh0QXVkaXQ7CisJTWVtb3J5Q29udGV4dENhbGxiYWNrIGNvbnRleHRD YWxsYmFjazsKK30gQXVkaXRFdmVudFN0YWNrSXRlbTsKKworQXVkaXRFdmVudFN0YWNrSXRl bSAqYXVkaXRFdmVudFN0YWNrID0gTlVMTDsKKworLyoKKyAqIFRyYWNrIHdoZW4gYW4gaW50 ZXJuYWwgc3RhdGVtZW50IGlzIHJ1bm5pbmcgc28gaXQgaXMgbm90IGxvZ2dlZAorICovCitz dGF0aWMgYm9vbCBpbnRlcm5hbFN0YXRlbWVudCA9IGZhbHNlOworCisvKgorICogVHJhY2sg cnVubmluZyB0b3RhbCBmb3Igc3RhdGVtZW50cyBhbmQgc3Vic3RhdGVtZW50cyBhbmQgd2hl dGhlciBvciBub3QKKyAqIGFueXRoaW5nIGhhcyBiZWVuIGxvZ2dlZCBzaW5jZSB0aGlzIHN0 YXRlbWVudCBiZWdhbi4KKyAqLworc3RhdGljIGludDY0IHN0YXRlbWVudFRvdGFsID0gMDsK K3N0YXRpYyBpbnQ2NCBzdWJzdGF0ZW1lbnRUb3RhbCA9IDA7CitzdGF0aWMgaW50NjQgc3Rh Y2tUb3RhbCA9IDA7CisKK3N0YXRpYyBib29sIHN0YXRlbWVudExvZ2dlZCA9IGZhbHNlOwor CisvKgorICogU3RhY2sgZnVuY3Rpb25zCisgKgorICogQXVkaXQgZXZlbnRzIGNhbiBnbyBk b3duIHRvIG11bHRpcGxlIGxldmVscyBzbyBhIHN0YWNrIGlzIG1haW50YWluZWQgdG8ga2Vl cAorICogdHJhY2sgb2YgdGhlbS4KKyAqLworCisvKgorICogUmVzcG9uZCB0byBjYWxsYmFj a3MgcmVnaXN0ZXJlZCB3aXRoIE1lbW9yeUNvbnRleHRSZWdpc3RlclJlc2V0Q2FsbGJhY2so KS4KKyAqIFJlbW92ZXMgdGhlIGV2ZW50KHMpIG9mZiB0aGUgc3RhY2sgdGhhdCBoYXZlIGJl Y29tZSBvYnNvbGV0ZSBvbmNlIHRoZQorICogTWVtb3J5Q29udGV4dCBoYXMgYmVlbiBmcmVl ZC4gIFRoZSBjYWxsYmFjayBzaG91bGQgYWx3YXlzIGJlIGZyZWVpbmcgdGhlIHRvcAorICog b2YgdGhlIHN0YWNrLCBidXQgdGhlIGNvZGUgaXMgdG9sZXJhbnQgb2Ygb3V0LW9mLW9yZGVy IGNhbGxiYWNrcy4KKyAqLworc3RhdGljIHZvaWQKK3N0YWNrX2ZyZWUodm9pZCAqc3RhY2tG cmVlKQoreworCUF1ZGl0RXZlbnRTdGFja0l0ZW0gKm5leHRJdGVtID0gYXVkaXRFdmVudFN0 YWNrOworCisJLyogT25seSBwcm9jZXNzIGlmIHRoZSBzdGFjayBjb250YWlucyBpdGVtcyAq LworCXdoaWxlIChuZXh0SXRlbSAhPSBOVUxMKQorCXsKKwkJLyogQ2hlY2sgaWYgdGhpcyBp dGVtIG1hdGNoZXMgdGhlIGl0ZW0gdG8gYmUgZnJlZWQgKi8KKwkJaWYgKG5leHRJdGVtID09 IChBdWRpdEV2ZW50U3RhY2tJdGVtICopc3RhY2tGcmVlKQorCQl7CisJCQkvKiBNb3ZlIHRv cCBvZiBzdGFjayB0byB0aGUgaXRlbSBhZnRlciB0aGUgZnJlZWQgaXRlbSAqLworCQkJYXVk aXRFdmVudFN0YWNrID0gbmV4dEl0ZW0tPm5leHQ7CisKKwkJCS8qIElmIHRoZSBzdGFjayBp cyBub3QgZW1wdHkgKi8KKwkJCWlmIChhdWRpdEV2ZW50U3RhY2sgPT0gTlVMTCkKKwkJCXsK KwkJCQkvKiBSZXNldCBpbnRlcm5hbCBzdGF0ZW1lbnQgaW4gY2FzZSBvZiBlcnJvciAqLwor CQkJCWludGVybmFsU3RhdGVtZW50ID0gZmFsc2U7CisKKwkJCQkvKiBSZXNldCBzdWIgc3Rh dGVtZW50IHRvdGFsICovCisJCQkJc3Vic3RhdGVtZW50VG90YWwgPSAwOworCisJCQkJLyog UmVzZXQgc3RhdGVtZW50IGxvZ2dlZCBmbGFnIHRvdGFsICovCisJCQkJc3RhdGVtZW50TG9n Z2VkID0gZmFsc2U7CisJCQl9CisKKwkJCXJldHVybjsKKwkJfQorCisJCS8qIFN0aWxsIGxv b2tpbmcsIHRlc3QgdGhlIG5leHQgaXRlbSAqLworCQluZXh0SXRlbSA9IG5leHRJdGVtLT5u ZXh0OworCX0KK30KKworLyoKKyAqIFB1c2ggYSBuZXcgYXVkaXQgZXZlbnQgb250byB0aGUg c3RhY2sgYW5kIGNyZWF0ZSBhIG5ldyBtZW1vcnkgY29udGV4dCB0bworICogc3RvcmUgaXQu CisgKi8KK3N0YXRpYyBBdWRpdEV2ZW50U3RhY2tJdGVtICoKK3N0YWNrX3B1c2goKQorewor CU1lbW9yeUNvbnRleHQgY29udGV4dEF1ZGl0OworCU1lbW9yeUNvbnRleHQgY29udGV4dE9s ZDsKKwlBdWRpdEV2ZW50U3RhY2tJdGVtICpzdGFja0l0ZW07CisKKwkvKiBDcmVhdGUgYSBu ZXcgbWVtb3J5IGNvbnRleHQgKi8KKwljb250ZXh0QXVkaXQgPSBBbGxvY1NldENvbnRleHRD cmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCQkJICJwZ19hdWRpdCBzdGFj ayBjb250ZXh0IiwKKwkJCQkJCQkJCQkgQUxMT0NTRVRfREVGQVVMVF9NSU5TSVpFLAorCQkJ CQkJCQkJCSBBTExPQ1NFVF9ERUZBVUxUX0lOSVRTSVpFLAorCQkJCQkJCQkJCSBBTExPQ1NF VF9ERUZBVUxUX01BWFNJWkUpOworCWNvbnRleHRPbGQgPSBNZW1vcnlDb250ZXh0U3dpdGNo VG8oY29udGV4dEF1ZGl0KTsKKworCS8qIEFsbG9jYXRlIHRoZSBzdGFjayBpdGVtICovCisJ c3RhY2tJdGVtID0gcGFsbG9jMChzaXplb2YoQXVkaXRFdmVudFN0YWNrSXRlbSkpOworCisJ LyogU3RvcmUgbWVtb3J5IGNvbnRleHRzICovCisJc3RhY2tJdGVtLT5jb250ZXh0QXVkaXQg PSBjb250ZXh0QXVkaXQ7CisKKwkvKiBJZiBpdGVtIGFscmVhZHkgb24gc3RhY2sgdGhlbiBw dXNoIGl0IGRvd24gKi8KKwlpZiAoYXVkaXRFdmVudFN0YWNrICE9IE5VTEwpCisJCXN0YWNr SXRlbS0+bmV4dCA9IGF1ZGl0RXZlbnRTdGFjazsKKwllbHNlCisJCXN0YWNrSXRlbS0+bmV4 dCA9IE5VTEw7CisKKwkvKgorCSAqIENyZWF0ZSB0aGUgdW5pcXVlIHN0YWNrSWQgLSB1c2Vk IHRvIGtlZXAgdGhlIHN0YWNrIHNhbmUgd2hlbiBtZW1vcnkKKwkgKiBjb250ZXh0cyBhcmUg ZnJlZWQgdW5leHBlY3RlZGx5LgorCSAqLworCXN0YWNrSXRlbS0+c3RhY2tJZCA9ICsrc3Rh Y2tUb3RhbDsKKworCS8qCisJICogU2V0dXAgYSBjYWxsYmFjayBpbiBjYXNlIGFuIGVycm9y IGhhcHBlbnMuICBzdGFja19mcmVlKCkgd2lsbCB0cnVuY2F0ZQorCSAqIHRoZSBzdGFjayBh dCB0aGlzIGl0ZW0uCisJICovCisJc3RhY2tJdGVtLT5jb250ZXh0Q2FsbGJhY2suZnVuYyA9 IHN0YWNrX2ZyZWU7CisJc3RhY2tJdGVtLT5jb250ZXh0Q2FsbGJhY2suYXJnID0gKHZvaWQg KilzdGFja0l0ZW07CisJTWVtb3J5Q29udGV4dFJlZ2lzdGVyUmVzZXRDYWxsYmFjayhjb250 ZXh0QXVkaXQsCisJCQkJCQkJCQkgICAmc3RhY2tJdGVtLT5jb250ZXh0Q2FsbGJhY2spOwor CisJLyogUHVzaCBpdGVtIG9uIHRoZSBzdGFjayAqLworCWF1ZGl0RXZlbnRTdGFjayA9IHN0 YWNrSXRlbTsKKworCS8qIFJldHVybiB0byB0aGUgb2xkIG1lbW9yeSBjb250ZXh0ICovCisJ TWVtb3J5Q29udGV4dFN3aXRjaFRvKGNvbnRleHRPbGQpOworCisJLyogUmV0dXJuIHRoZSBz dGFjayBpdGVtICovCisJcmV0dXJuIHN0YWNrSXRlbTsKK30KKworLyoKKyAqIFBvcCBhbiBh dWRpdCBldmVudCBmcm9tIHRoZSBzdGFjayBieSBkZWxldGluZyB0aGUgbWVtb3J5IGNvbnRl eHQgdGhhdAorICogY29udGFpbnMgaXQuICBUaGUgY2FsbGJhY2sgdG8gc3RhY2tfZnJlZSgp IGRvZXMgdGhlIGFjdHVhbCBwb3AuCisgKi8KK3N0YXRpYyB2b2lkCitzdGFja19wb3AoaW50 NjQgc3RhY2tJZCkKK3sKKwkvKiBNYWtlIHN1cmUgd2hhdCB3ZSB3YW50IHRvIGRlbGV0ZSBp cyBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjayAqLworCWlmIChhdWRpdEV2ZW50U3RhY2sgIT0g TlVMTCAmJiBhdWRpdEV2ZW50U3RhY2stPnN0YWNrSWQgPT0gc3RhY2tJZCkKKwl7CisJCU1l bW9yeUNvbnRleHREZWxldGUoYXVkaXRFdmVudFN0YWNrLT5jb250ZXh0QXVkaXQpOworCX0K K30KKworLyoKKyAqIEFwcGVuZHMgYSBwcm9wZXJseSBxdW90ZWQgQ1NWIGZpZWxkIHRvIFN0 cmluZ0luZm8uCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfdmFsaWRfY3N2KFN0cmluZ0lu Zm9EYXRhICpidWZmZXIsIGNvbnN0IGNoYXIgKmFwcGVuZFN0cikKK3sKKwljb25zdCBjaGFy ICpwQ2hhcjsKKworCS8qCisJICogSWYgdGhlIGFwcGVuZCBzdHJpbmcgaXMgbnVsbCB0aGVu IHJldHVybi4gIE5VTEwgZmllbGRzIGFyZSBub3QgcXVvdGVkCisJICogaW4gQ1NWCisJICov CisJaWYgKGFwcGVuZFN0ciA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkvKiBPbmx5IGZvcm1h dCBmb3IgQ1NWIGlmIGFwcGVuZFN0ciBjb250YWluczogIiwgY29tbWEsIFxuLCBcciAqLwor CWlmIChzdHJzdHIoYXBwZW5kU3RyLCAiLCIpIHx8IHN0cnN0cihhcHBlbmRTdHIsICJcIiIp IHx8CisJCXN0cnN0cihhcHBlbmRTdHIsICJcbiIpIHx8IHN0cnN0cihhcHBlbmRTdHIsICJc ciIpKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybyhidWZmZXIsICciJyk7CisK KwkJZm9yIChwQ2hhciA9IGFwcGVuZFN0cjsgKnBDaGFyOyBwQ2hhcisrKQorCQl7CisJCQlp ZiAoKnBDaGFyID09ICciJykgLyogZG91YmxlIHNpbmdsZSBxdW90ZXMgKi8KKwkJCQlhcHBl bmRTdHJpbmdJbmZvQ2hhck1hY3JvKGJ1ZmZlciwgKnBDaGFyKTsKKworCQkJYXBwZW5kU3Ry aW5nSW5mb0NoYXJNYWNybyhidWZmZXIsICpwQ2hhcik7CisJCX0KKworCQlhcHBlbmRTdHJp bmdJbmZvQ2hhck1hY3JvKGJ1ZmZlciwgJyInKTsKKwl9CisJLyogRWxzZSBqdXN0IGFwcGVu ZCAqLworCWVsc2UKKwl7CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmZmVyLCBhcHBl bmRTdHIpOworCX0KK30KKworLyoKKyAqIFRha2VzIGFuIEF1ZGl0RXZlbnQsIGNsYXNzaWZp ZXMgaXQsIHRoZW4gbG9ncyBpdCBpZiBwZXJtaXNzaW9ucyB3ZXJlIGdyYW50ZWQKKyAqIHZp YSByb2xlcyBvciBpZiB0aGUgc3RhdGVtZW50IGJlbG9uZ3MgaW4gYSBjbGFzcyB0aGF0IGlz IGJlaW5nIGxvZ2dlZC4KKyAqLworc3RhdGljIHZvaWQKK2xvZ19hdWRpdF9ldmVudChBdWRp dEV2ZW50U3RhY2tJdGVtICpzdGFja0l0ZW0pCit7CisJTWVtb3J5Q29udGV4dCBjb250ZXh0 T2xkOworCVN0cmluZ0luZm9EYXRhIGF1ZGl0U3RyOworCisJLyogQnkgZGVmYXVsdCBwdXQg ZXZlcnl0aGluZyBpbiB0aGUgTUlTQyBjbGFzcy4gKi8KKwllbnVtIExvZ0NsYXNzIGNsYXNz ID0gTE9HX01JU0M7CisJY29uc3QgY2hhciAqY2xhc3NOYW1lID0gQ0xBU1NfTUlTQzsKKwor CS8qIENsYXNzaWZ5IHRoZSBzdGF0ZW1lbnQgdXNpbmcgbG9nIHN0bXQgbGV2ZWwgYW5kIHRo ZSBjb21tYW5kIHRhZyAqLworCXN3aXRjaCAoc3RhY2tJdGVtLT5hdWRpdEV2ZW50LmxvZ1N0 bXRMZXZlbCkKKwl7CisJCWNhc2UgTE9HU1RNVF9NT0Q6CisJCQljbGFzc05hbWUgPSBDTEFT U19XUklURTsKKwkJCWNsYXNzID0gTE9HX1dSSVRFOworCQkJYnJlYWs7CisKKwkJY2FzZSBM T0dTVE1UX0RETDoKKwkJCWNsYXNzTmFtZSA9IENMQVNTX0RETDsKKwkJCWNsYXNzID0gTE9H X0RETDsKKworCQljYXNlIExPR1NUTVRfQUxMOgorCQkJc3dpdGNoIChzdGFja0l0ZW0tPmF1 ZGl0RXZlbnQuY29tbWFuZFRhZykKKwkJCXsKKwkJCQljYXNlIFRfQ29weVN0bXQ6CisJCQkJ Y2FzZSBUX1NlbGVjdFN0bXQ6CisJCQkJY2FzZSBUX1ByZXBhcmVTdG10OgorCQkJCWNhc2Ug VF9QbGFubmVkU3RtdDoKKwkJCQljYXNlIFRfRXhlY3V0ZVN0bXQ6CisJCQkJCWNsYXNzTmFt ZSA9IENMQVNTX1JFQUQ7CisJCQkJCWNsYXNzID0gTE9HX1JFQUQ7CisJCQkJCWJyZWFrOwor CisJCQkJY2FzZSBUX1ZhY3V1bVN0bXQ6CisJCQkJY2FzZSBUX1JlaW5kZXhTdG10OgorCQkJ CQljbGFzc05hbWUgPSBDTEFTU19EREw7CisJCQkJCWNsYXNzID0gTE9HX0RETDsKKwkJCQkJ YnJlYWs7CisKKwkJCQljYXNlIFRfRG9TdG10OgorCQkJCQljbGFzc05hbWUgPSBDTEFTU19G VU5DVElPTjsKKwkJCQkJY2xhc3MgPSBMT0dfRlVOQ1RJT047CisJCQkJCWJyZWFrOworCisJ CQkJZGVmYXVsdDoKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIExP R1NUTVRfTk9ORToKKwkJCWJyZWFrOworCX0KKworCS8qCisJICogT25seSBsb2cgdGhlIHN0 YXRlbWVudCBpZjoKKwkgKgorCSAqIDEuIElmIHBlcm1pc3Npb25zIHdlcmUgZ3JhbnRlZCB2 aWEgcm9sZXMKKwkgKiAyLiBUaGUgc3RhdGVtZW50IGJlbG9uZ3MgdG8gYSBjbGFzcyB0aGF0 IGlzIGJlaW5nIGxvZ2dlZAorCSAqLworCWlmICghc3RhY2tJdGVtLT5hdWRpdEV2ZW50Lmdy YW50ZWQgJiYgIShhdWRpdExvZ0JpdG1hcCAmIGNsYXNzKSkKKwkJcmV0dXJuOworCisJLyog VXNlIGF1ZGl0IG1lbW9yeSBjb250ZXh0IGluIGNhc2Ugc29tZXRoaW5nIGlzIG5vdCBmcmVl ZCAqLworCWNvbnRleHRPbGQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oc3RhY2tJdGVtLT5j b250ZXh0QXVkaXQpOworCisJLyogU2V0IHN0YXRlbWVudCBhbmQgc3Vic3RhdGVtZW50IElk cyAqLworCWlmIChzdGFja0l0ZW0tPmF1ZGl0RXZlbnQuc3RhdGVtZW50SWQgPT0gMCkKKwl7 CisJCS8qIElmIG5vdGhpbmcgaGFzIGJlZW4gbG9nZ2VkIHlldCB0aGVuIGNyZWF0ZSBhIG5l dyBzdGF0ZW1lbnQgSWQgKi8KKwkJaWYgKCFzdGF0ZW1lbnRMb2dnZWQpCisJCXsKKwkJCXN0 YXRlbWVudFRvdGFsKys7CisJCQlzdGF0ZW1lbnRMb2dnZWQgPSB0cnVlOworCQl9CisKKwkJ c3RhY2tJdGVtLT5hdWRpdEV2ZW50LnN0YXRlbWVudElkID0gc3RhdGVtZW50VG90YWw7CisJ CXN0YWNrSXRlbS0+YXVkaXRFdmVudC5zdWJzdGF0ZW1lbnRJZCA9ICsrc3Vic3RhdGVtZW50 VG90YWw7CisJfQorCisJLyogQ3JlYXRlIHRoZSBhdWRpdCBzdHJpbmcgKi8KKwlpbml0U3Ry aW5nSW5mbygmYXVkaXRTdHIpOworCisJYXBwZW5kX3ZhbGlkX2NzdigmYXVkaXRTdHIsIHN0 YWNrSXRlbS0+YXVkaXRFdmVudC5jb21tYW5kKTsKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhck1h Y3JvKCZhdWRpdFN0ciwgJywnKTsKKworCWFwcGVuZF92YWxpZF9jc3YoJmF1ZGl0U3RyLCBz dGFja0l0ZW0tPmF1ZGl0RXZlbnQub2JqZWN0VHlwZSk7CisJYXBwZW5kU3RyaW5nSW5mb0No YXJNYWNybygmYXVkaXRTdHIsICcsJyk7CisKKwlhcHBlbmRfdmFsaWRfY3N2KCZhdWRpdFN0 ciwgc3RhY2tJdGVtLT5hdWRpdEV2ZW50Lm9iamVjdE5hbWUpOworCWFwcGVuZFN0cmluZ0lu Zm9DaGFyTWFjcm8oJmF1ZGl0U3RyLCAnLCcpOworCisJYXBwZW5kX3ZhbGlkX2NzdigmYXVk aXRTdHIsIHN0YWNrSXRlbS0+YXVkaXRFdmVudC5jb21tYW5kVGV4dCk7CisKKwkvKiBJZiBw YXJhbWV0ZXIgbG9nZ2luZyBpcyB0dXJuZWQgb24gYW5kIHRoZXJlIGFyZSBwYXJhbWV0ZXJz IHRvIGxvZyAqLworCWlmIChhdWRpdExvZ0JpdG1hcCAmIExPR19QQVJBTUVURVIgJiYKKwkJ c3RhY2tJdGVtLT5hdWRpdEV2ZW50LnBhcmFtTGlzdCAhPSBOVUxMICYmCisJCXN0YWNrSXRl bS0+YXVkaXRFdmVudC5wYXJhbUxpc3QtPm51bVBhcmFtcyA+IDAgJiYKKwkJIUlzQWJvcnRl ZFRyYW5zYWN0aW9uQmxvY2tTdGF0ZSgpKQorCXsKKwkJUGFyYW1MaXN0SW5mbyBwYXJhbUxp c3QgPSBzdGFja0l0ZW0tPmF1ZGl0RXZlbnQucGFyYW1MaXN0OworCQlpbnQgcGFyYW1JZHg7 CisKKwkJLyogSXRlcmF0ZSB0aHJvdWdoIGFsbCBwYXJhbXMgKi8KKwkJZm9yIChwYXJhbUlk eCA9IDA7IHBhcmFtSWR4IDwgcGFyYW1MaXN0LT5udW1QYXJhbXM7IHBhcmFtSWR4KyspCisJ CXsKKwkJCVBhcmFtRXh0ZXJuRGF0YSAqcHJtID0gJnBhcmFtTGlzdC0+cGFyYW1zW3BhcmFt SWR4XTsKKwkJCU9pZCAJCQkgdHlwZU91dHB1dDsKKwkJCWJvb2wgCQkJIHR5cGVJc1Zhckxl bmE7CisJCQljaGFyIAkJCSpwYXJhbVN0cjsKKworCQkJLyogQWRkIGEgY29tbWEgZm9yIGVh Y2ggcGFyYW0gKi8KKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFjcm8oJmF1ZGl0U3RyLCAn LCcpOworCisJCQkvKiBTa2lwIHRoaXMgcGFyYW0gaWYgbnVsbCBvciBpZiBvaWQgaXMgaW52 YWxpZCAqLworCQkJaWYgKHBybS0+aXNudWxsIHx8ICFPaWRJc1ZhbGlkKHBybS0+cHR5cGUp KQorCQkJeworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvKiBPdXRwdXQgdGhlIHN0cmlu ZyAqLworCQkJZ2V0VHlwZU91dHB1dEluZm8ocHJtLT5wdHlwZSwgJnR5cGVPdXRwdXQsICZ0 eXBlSXNWYXJMZW5hKTsKKwkJCXBhcmFtU3RyID0gT2lkT3V0cHV0RnVuY3Rpb25DYWxsKHR5 cGVPdXRwdXQsIHBybS0+dmFsdWUpOworCisJCQlhcHBlbmRfdmFsaWRfY3N2KCZhdWRpdFN0 ciwgcGFyYW1TdHIpOworCQkJcGZyZWUocGFyYW1TdHIpOworCQl9CisJfQorCisJLyogTG9n IHRoZSBhdWRpdCBzdHJpbmcgKi8KKwllcmVwb3J0KExPRywKKwkJKGVycm1zZygiQVVESVQ6 ICVzLCVsZCwlbGQsJXMsJXMiLAorCQkJc3RhY2tJdGVtLT5hdWRpdEV2ZW50LmdyYW50ZWQg PworCQkJCUFVRElUX1RZUEVfT0JKRUNUIDogQVVESVRfVFlQRV9TRVNTSU9OLAorCQkJc3Rh Y2tJdGVtLT5hdWRpdEV2ZW50LnN0YXRlbWVudElkLAorCQkJc3RhY2tJdGVtLT5hdWRpdEV2 ZW50LnN1YnN0YXRlbWVudElkLAorCQkJY2xhc3NOYW1lLCBhdWRpdFN0ci5kYXRhKSwKKwkJ IGVycmhpZGVzdG10KHRydWUpKSk7CisKKwkvKiBNYXJrIHRoZSBhdWRpdCBldmVudCBhcyBs b2dnZWQgKi8KKwlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQubG9nZ2VkID0gdHJ1ZTsKKworCS8q IFN3aXRjaCBiYWNrIHRvIHRoZSBvbGQgbWVtb3J5IGNvbnRleHQgKi8KKwlNZW1vcnlDb250 ZXh0U3dpdGNoVG8oY29udGV4dE9sZCk7Cit9CisKKy8qCisgKiBDaGVjayBpZiB0aGUgcm9s ZSBvciBhbnkgaW5oZXJpdGVkIHJvbGUgaGFzIGFueSBwZXJtaXNzaW9uIGluIHRoZSBtYXNr LiAgVGhlCisgKiBwdWJsaWMgcm9sZSBpcyBleGNsdWRlZCBmcm9tIHRoaXMgY2hlY2sgYW5k IHN1cGVydXNlciBwZXJtaXNzaW9ucyBhcmUgbm90CisgKiBjb25zaWRlcmVkLgorICovCitz dGF0aWMgYm9vbAorYXVkaXRfb25fYWNsKERhdHVtIGFjbERhdHVtLAorCQkJIE9pZCBhdWRp dE9pZCwKKwkJCSBBY2xNb2RlIG1hc2spCit7CisJYm9vbAkJcmVzdWx0ID0gZmFsc2U7CisJ QWNsCQkgICAqYWNsOworCUFjbEl0ZW0JICAgKmFjbEl0ZW1EYXRhOworCWludAkJCWFjbElu ZGV4OworCWludAkJCWFjbFRvdGFsOworCisJLyogRGV0b2FzdCBjb2x1bW4ncyBBQ0wgaWYg bmVjZXNzYXJ5ICovCisJYWNsID0gRGF0dW1HZXRBY2xQKGFjbERhdHVtKTsKKworCS8qIEdl dCB0aGUgYWNsIGxpc3QgYW5kIHRvdGFsICovCisJYWNsVG90YWwgPSBBQ0xfTlVNKGFjbCk7 CisJYWNsSXRlbURhdGEgPSBBQ0xfREFUKGFjbCk7CisKKwkvKiBDaGVjayBwcml2aWxlZ2Vz IGdyYW50ZWQgZGlyZWN0bHkgdG8gYXVkaXRPaWQgKi8KKwlmb3IgKGFjbEluZGV4ID0gMDsg YWNsSW5kZXggPCBhY2xUb3RhbDsgYWNsSW5kZXgrKykKKwl7CisJCUFjbEl0ZW0gKmFjbEl0 ZW0gPSAmYWNsSXRlbURhdGFbYWNsSW5kZXhdOworCisJCWlmIChhY2xJdGVtLT5haV9ncmFu dGVlID09IGF1ZGl0T2lkICYmCisJCQlhY2xJdGVtLT5haV9wcml2cyAmIG1hc2spCisJCXsK KwkJCXJlc3VsdCA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qCisJICogQ2hl Y2sgcHJpdmlsZWdlcyBncmFudGVkIGluZGlyZWN0bHkgdmlhIHJvbGUgbWVtYmVyc2hpcHMu IFdlIGRvIHRoaXMgaW4KKwkgKiBhIHNlcGFyYXRlIHBhc3MgdG8gbWluaW1pemUgZXhwZW5z aXZlIGluZGlyZWN0IG1lbWJlcnNoaXAgdGVzdHMuICBJbgorCSAqIHBhcnRpY3VsYXIsIGl0 J3Mgd29ydGggdGVzdGluZyB3aGV0aGVyIGEgZ2l2ZW4gQUNMIGVudHJ5IGdyYW50cyBhbnkK KwkgKiBwcml2aWxlZ2VzIHN0aWxsIG9mIGludGVyZXN0IGJlZm9yZSB3ZSBwZXJmb3JtIHRo ZSBoYXNfcHJpdnNfb2Zfcm9sZQorCSAqIHRlc3QuCisJICovCisJaWYgKCFyZXN1bHQpCisJ eworCQlmb3IgKGFjbEluZGV4ID0gMDsgYWNsSW5kZXggPCBhY2xUb3RhbDsgYWNsSW5kZXgr KykKKwkJeworCQkJQWNsSXRlbSAqYWNsSXRlbSA9ICZhY2xJdGVtRGF0YVthY2xJbmRleF07 CisKKwkJCS8qIERvbid0IHRlc3QgcHVibGljIG9yIGF1ZGl0T2lkIChpdCBoYXMgYmVlbiB0 ZXN0ZWQgYWxyZWFkeSkgKi8KKwkJCWlmIChhY2xJdGVtLT5haV9ncmFudGVlID09IEFDTF9J RF9QVUJMSUMgfHwKKwkJCQlhY2xJdGVtLT5haV9ncmFudGVlID09IGF1ZGl0T2lkKQorCQkJ CWNvbnRpbnVlOworCisJCQkvKgorCQkJICogQ2hlY2sgdGhhdCB0aGUgcm9sZSBoYXMgdGhl IHJlcXVpcmVkIHByaXZpbGVnZXMgYW5kIHRoYXQgaXQgaXMKKwkJCSAqIGluaGVyaXRlZCBi eSBhdWRpdE9pZC4KKwkJCSAqLworCQkJaWYgKGFjbEl0ZW0tPmFpX3ByaXZzICYgbWFzayAm JgorCQkJCWhhc19wcml2c19vZl9yb2xlKGF1ZGl0T2lkLCBhY2xJdGVtLT5haV9ncmFudGVl KSkKKwkJCXsKKwkJCQlyZXN1bHQgPSB0cnVlOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJ fQorCisJLyogaWYgd2UgaGF2ZSBhIGRldG9hc3RlZCBjb3B5LCBmcmVlIGl0ICovCisJaWYg KGFjbCAmJiAoUG9pbnRlcikgYWNsICE9IERhdHVtR2V0UG9pbnRlcihhY2xEYXR1bSkpCisJ CXBmcmVlKGFjbCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogQ2hlY2sgaWYg YSByb2xlIGhhcyBhbnkgb2YgdGhlIHBlcm1pc3Npb25zIGluIHRoZSBtYXNrIG9uIGEgcmVs YXRpb24uCisgKi8KK3N0YXRpYyBib29sCithdWRpdF9vbl9yZWxhdGlvbihPaWQgcmVsT2lk LAorCQkJCSAgT2lkIGF1ZGl0T2lkLAorCQkJCSAgQWNsTW9kZSBtYXNrKQoreworCWJvb2wJ CXJlc3VsdCA9IGZhbHNlOworCUhlYXBUdXBsZQl0dXBsZTsKKwlEYXR1bQkJYWNsRGF0dW07 CisJYm9vbAkJaXNOdWxsOworCisJLyogR2V0IHJlbGF0aW9uIHR1cGxlIGZyb20gcGdfY2xh c3MgKi8KKwl0dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShSRUxPSUQsIE9iamVjdElkR2V0RGF0 dW0ocmVsT2lkKSk7CisKKwkvKiBSZXR1cm4gZmFsc2UgaWYgdHVwbGUgaXMgbm90IHZhbGlk ICovCisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlKSkKKwkJcmV0dXJuIGZhbHNlOwor CisJLyogR2V0IHRoZSByZWxhdGlvbidzIEFDTCAqLworCWFjbERhdHVtID0gU3lzQ2FjaGVH ZXRBdHRyKFJFTE9JRCwgdHVwbGUsIEFudW1fcGdfY2xhc3NfcmVsYWNsLAorCQkJCQkJCSAg ICZpc051bGwpOworCisJLyogSWYgbm90IG51bGwgdGhlbiB0ZXN0ICovCisJaWYgKCFpc051 bGwpCisJCXJlc3VsdCA9IGF1ZGl0X29uX2FjbChhY2xEYXR1bSwgYXVkaXRPaWQsIG1hc2sp OworCisJLyogRnJlZSB0aGUgcmVsYXRpb24gdHVwbGUgKi8KKwlSZWxlYXNlU3lzQ2FjaGUo dHVwbGUpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIENoZWNrIGlmIGEgcm9s ZSBoYXMgYW55IG9mIHRoZSBwZXJtaXNzaW9ucyBpbiB0aGUgbWFzayBvbiBhbiBhdHRyaWJ1 dGUuCisgKi8KK3N0YXRpYyBib29sCithdWRpdF9vbl9hdHRyaWJ1dGUoT2lkIHJlbE9pZCwK KwkJCQkgICBBdHRyTnVtYmVyIGF0dE51bSwKKwkJCQkgICBPaWQgYXVkaXRPaWQsCisJCQkJ ICAgQWNsTW9kZSBtYXNrKQoreworCWJvb2wJCXJlc3VsdCA9IGZhbHNlOworCUhlYXBUdXBs ZQlhdHRUdXBsZTsKKwlEYXR1bQkJYWNsRGF0dW07CisJYm9vbAkJaXNOdWxsOworCisJLyog R2V0IHRoZSBhdHRyaWJ1dGUncyBBQ0wgKi8KKwlhdHRUdXBsZSA9IFNlYXJjaFN5c0NhY2hl MihBVFROVU0sCisJCQkJCQkJICAgT2JqZWN0SWRHZXREYXR1bShyZWxPaWQpLAorCQkJCQkJ CSAgIEludDE2R2V0RGF0dW0oYXR0TnVtKSk7CisKKwkvKiBSZXR1cm4gZmFsc2UgaWYgYXR0 cmlidXRlIGlzIGludmFsaWQgKi8KKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoYXR0VHVwbGUp KQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBPbmx5IHByb2Nlc3MgYXR0cmlidXRlIHRoYXQg aGF2ZSBub3QgYmVlbiBkcm9wcGVkICovCisJaWYgKCEoKEZvcm1fcGdfYXR0cmlidXRlKSBH RVRTVFJVQ1QoYXR0VHVwbGUpKS0+YXR0aXNkcm9wcGVkKQorCXsKKwkJYWNsRGF0dW0gPSBT eXNDYWNoZUdldEF0dHIoQVRUTlVNLCBhdHRUdXBsZSwgQW51bV9wZ19hdHRyaWJ1dGVfYXR0 YWNsLAorCQkJCQkJCQkgICAmaXNOdWxsKTsKKworCQlpZiAoIWlzTnVsbCkKKwkJCXJlc3Vs dCA9IGF1ZGl0X29uX2FjbChhY2xEYXR1bSwgYXVkaXRPaWQsIG1hc2spOworCX0KKworCS8q IEZyZWUgYXR0cmlidXRlICovCisJUmVsZWFzZVN5c0NhY2hlKGF0dFR1cGxlKTsKKworCXJl dHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBDaGVjayBpZiBhIHJvbGUgaGFzIGFueSBvZiB0 aGUgcGVybWlzc2lvbnMgaW4gdGhlIG1hc2sgb24gYW4gYXR0cmlidXRlIGluCisgKiB0aGUg cHJvdmlkZWQgc2V0LiAgSWYgdGhlIHNldCBpcyBlbXB0eSwgdGhlbiBhbGwgdmFsaWQgYXR0 cmlidXRlcyBpbiB0aGUKKyAqIHJlbGF0aW9uIHdpbGwgYmUgdGVzdGVkLgorICovCitzdGF0 aWMgYm9vbAorYXVkaXRfb25fYW55X2F0dHJpYnV0ZShPaWQgcmVsT2lkLAorCQkJCQkgICBP aWQgYXVkaXRPaWQsCisJCQkJCSAgIEJpdG1hcHNldCAqYXR0cmlidXRlU2V0LAorCQkJCQkg ICBBY2xNb2RlIG1vZGUpCit7CisJYm9vbCByZXN1bHQgPSBmYWxzZTsKKwlBdHRyTnVtYmVy IGNvbDsKKwlCaXRtYXBzZXQgKnRtcFNldDsKKworCS8qIElmIGJtcyBpcyBlbXB0eSB0aGVu IGNoZWNrIGZvciBhbnkgY29sdW1uIG1hdGNoICovCisJaWYgKGJtc19pc19lbXB0eShhdHRy aWJ1dGVTZXQpKQorCXsKKwkJSGVhcFR1cGxlCWNsYXNzVHVwbGU7CisJCUF0dHJOdW1iZXIJ bmF0dHJzOworCQlBdHRyTnVtYmVyCWN1cnJfYXR0OworCisJCS8qIEdldCByZWxhdGlvbiB0 byBkZXRlcm1pbmUgdG90YWwgYXR0cmlidXRlICovCisJCWNsYXNzVHVwbGUgPSBTZWFyY2hT eXNDYWNoZTEoUkVMT0lELCBPYmplY3RJZEdldERhdHVtKHJlbE9pZCkpOworCisJCWlmICgh SGVhcFR1cGxlSXNWYWxpZChjbGFzc1R1cGxlKSkKKwkJCXJldHVybiBmYWxzZTsKKworCQlu YXR0cnMgPSAoKEZvcm1fcGdfY2xhc3MpIEdFVFNUUlVDVChjbGFzc1R1cGxlKSktPnJlbG5h dHRzOworCQlSZWxlYXNlU3lzQ2FjaGUoY2xhc3NUdXBsZSk7CisKKwkJLyogQ2hlY2sgZWFj aCBjb2x1bW4gKi8KKwkJZm9yIChjdXJyX2F0dCA9IDE7IGN1cnJfYXR0IDw9IG5hdHRyczsg Y3Vycl9hdHQrKykKKwkJeworCQkJaWYgKGF1ZGl0X29uX2F0dHJpYnV0ZShyZWxPaWQsIGN1 cnJfYXR0LCBhdWRpdE9pZCwgbW9kZSkpCisJCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9CisK KwkvKiBibXNfZmlyc3RfbWVtYmVyIGlzIGRlc3RydWN0aXZlLCBzbyBtYWtlIGEgY29weSBi ZWZvcmUgdXNpbmcgaXQuICovCisJdG1wU2V0ID0gYm1zX2NvcHkoYXR0cmlidXRlU2V0KTsK KworCS8qIENoZWNrIGVhY2ggY29sdW1uICovCisJd2hpbGUgKChjb2wgPSBibXNfZmlyc3Rf bWVtYmVyKHRtcFNldCkpID49IDApCisJeworCQljb2wgKz0gRmlyc3RMb3dJbnZhbGlkSGVh cEF0dHJpYnV0ZU51bWJlcjsKKworCQlpZiAoY29sICE9IEludmFsaWRBdHRyTnVtYmVyICYm CisJCQlhdWRpdF9vbl9hdHRyaWJ1dGUocmVsT2lkLCBjb2wsIGF1ZGl0T2lkLCBtb2RlKSkK KwkJeworCQkJcmVzdWx0ID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogRnJl ZSB0aGUgY29sdW1uIHNldCAqLworCWJtc19mcmVlKHRtcFNldCk7CisKKwlyZXR1cm4gcmVz dWx0OworfQorCisvKgorICogQ3JlYXRlIEF1ZGl0RXZlbnRzIGZvciBTRUxFQ1QvRE1MIG9w ZXJhdGlvbnMgdmlhIGV4ZWN1dG9yIHBlcm1pc3Npb25zIGNoZWNrcy4KKyAqLworc3RhdGlj IHZvaWQKK2xvZ19zZWxlY3RfZG1sKE9pZCBhdWRpdE9pZCwgTGlzdCAqcmFuZ2VUYWJscykK K3sKKwlMaXN0Q2VsbCAqbHI7CisJYm9vbCBmaXJzdCA9IHRydWU7CisJYm9vbCBmb3VuZCA9 IGZhbHNlOworCisJLyogRG8gbm90IGxvZyBpZiB0aGlzIGlzIGFuIGludGVybmFsIHN0YXRl bWVudCAqLworCWlmIChpbnRlcm5hbFN0YXRlbWVudCkKKwkJcmV0dXJuOworCisJZm9yZWFj aChsciwgcmFuZ2VUYWJscykKKwl7CisJCU9pZCByZWxPaWQ7CisJCVJlbGF0aW9uIHJlbDsK KwkJUmFuZ2VUYmxFbnRyeSAqcnRlID0gbGZpcnN0KGxyKTsKKworCQkvKiBXZSBvbmx5IGNh cmUgYWJvdXQgdGFibGVzLCBhbmQgY2FuIGlnbm9yZSBzdWJxdWVyaWVzIGV0Yy4gKi8KKwkJ aWYgKHJ0ZS0+cnRla2luZCAhPSBSVEVfUkVMQVRJT04pCisJCQljb250aW51ZTsKKworCQlm b3VuZCA9IHRydWU7CisKKwkJLyoKKwkJICogRmlsdGVyIG91dCBhbnkgc3lzdGVtIHJlbGF0 aW9ucworCQkgKi8KKwkJcmVsT2lkID0gcnRlLT5yZWxpZDsKKwkJcmVsID0gcmVsYXRpb25f b3BlbihyZWxPaWQsIE5vTG9jayk7CisKKwkJaWYgKElzU3lzdGVtTmFtZXNwYWNlKFJlbGF0 aW9uR2V0TmFtZXNwYWNlKHJlbCkpKQorCQl7CisJCQlyZWxhdGlvbl9jbG9zZShyZWwsIE5v TG9jayk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIFdlIGRvbid0IGhhdmUg YWNjZXNzIHRvIHRoZSBwYXJzZXRyZWUgaGVyZSwgc28gd2UgaGF2ZSB0byBnZW5lcmF0ZQor CQkgKiB0aGUgbm9kZSB0eXBlLCBvYmplY3QgdHlwZSwgYW5kIGNvbW1hbmQgdGFnIGJ5IGRl Y29kaW5nCisJCSAqIHJ0ZS0+cmVxdWlyZWRQZXJtcyBhbmQgcnRlLT5yZWxraW5kLgorCQkg Ki8KKwkJaWYgKHJ0ZS0+cmVxdWlyZWRQZXJtcyAmIEFDTF9JTlNFUlQpCisJCXsKKwkJCWF1 ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5sb2dTdG10TGV2ZWwgPSBMT0dTVE1UX01PRDsK KwkJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5jb21tYW5kVGFnID0gVF9JbnNlcnRT dG10OworCQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50LmNvbW1hbmQgPSBDT01NQU5E X0lOU0VSVDsKKwkJfQorCQllbHNlIGlmIChydGUtPnJlcXVpcmVkUGVybXMgJiBBQ0xfVVBE QVRFKQorCQl7CisJCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQubG9nU3RtdExldmVs ID0gTE9HU1RNVF9NT0Q7CisJCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQuY29tbWFu ZFRhZyA9IFRfVXBkYXRlU3RtdDsKKwkJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5j b21tYW5kID0gQ09NTUFORF9VUERBVEU7CisJCX0KKwkJZWxzZSBpZiAocnRlLT5yZXF1aXJl ZFBlcm1zICYgQUNMX0RFTEVURSkKKwkJeworCQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2 ZW50LmxvZ1N0bXRMZXZlbCA9IExPR1NUTVRfTU9EOworCQkJYXVkaXRFdmVudFN0YWNrLT5h dWRpdEV2ZW50LmNvbW1hbmRUYWcgPSBUX0RlbGV0ZVN0bXQ7CisJCQlhdWRpdEV2ZW50U3Rh Y2stPmF1ZGl0RXZlbnQuY29tbWFuZCA9IENPTU1BTkRfREVMRVRFOworCQl9CisJCWVsc2Ug aWYgKHJ0ZS0+cmVxdWlyZWRQZXJtcyAmIEFDTF9TRUxFQ1QpCisJCXsKKwkJCWF1ZGl0RXZl bnRTdGFjay0+YXVkaXRFdmVudC5sb2dTdG10TGV2ZWwgPSBMT0dTVE1UX0FMTDsKKwkJCWF1 ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5jb21tYW5kVGFnID0gVF9TZWxlY3RTdG10Owor CQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50LmNvbW1hbmQgPSBDT01NQU5EX1NFTEVD VDsKKwkJfQorCQllbHNlCisJCXsKKwkJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5s b2dTdG10TGV2ZWwgPSBMT0dTVE1UX0FMTDsKKwkJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRF dmVudC5jb21tYW5kVGFnID0gVF9JbnZhbGlkOworCQkJYXVkaXRFdmVudFN0YWNrLT5hdWRp dEV2ZW50LmNvbW1hbmQgPSBDT01NQU5EX1VOS05PV047CisJCX0KKworCQkvKgorCQkgKiBG aWxsIHZhbHVlcyBpbiB0aGUgZXZlbnQgc3RydWN0IHRoYXQgYXJlIHJlcXVpcmVkIGZvciBz ZXNzaW9uCisJCSAqIGxvZ2dpbmcuCisJCSAqLworCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0 RXZlbnQuZ3JhbnRlZCA9IGZhbHNlOworCisJCS8qIElmIHRoaXMgaXMgdGhlIGZpcnN0IHJ0 ZSB0aGVuIHNlc3Npb24gbG9nICovCisJCWlmIChmaXJzdCkKKwkJeworCQkJYXVkaXRFdmVu dFN0YWNrLT5hdWRpdEV2ZW50Lm9iamVjdE5hbWUgPSAiIjsKKwkJCWF1ZGl0RXZlbnRTdGFj ay0+YXVkaXRFdmVudC5vYmplY3RUeXBlID0gIiI7CisKKwkJCWxvZ19hdWRpdF9ldmVudChh dWRpdEV2ZW50U3RhY2spOworCisJCQlmaXJzdCA9IGZhbHNlOworCQl9CisKKwkJLyogR2V0 IHRoZSByZWxhdGlvbiB0eXBlICovCisJCXN3aXRjaCAocnRlLT5yZWxraW5kKQorCQl7CisJ CQljYXNlIFJFTEtJTkRfUkVMQVRJT046CisJCQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2 ZW50Lm9iamVjdFR5cGUgPQorCQkJCQlPQkpFQ1RfVFlQRV9UQUJMRTsKKwkJCQlicmVhazsK KworCQkJY2FzZSBSRUxLSU5EX0lOREVYOgorCQkJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRF dmVudC5vYmplY3RUeXBlID0KKwkJCQkJT0JKRUNUX1RZUEVfSU5ERVg7CisJCQkJYnJlYWs7 CisKKwkJCWNhc2UgUkVMS0lORF9TRVFVRU5DRToKKwkJCQlhdWRpdEV2ZW50U3RhY2stPmF1 ZGl0RXZlbnQub2JqZWN0VHlwZSA9CisJCQkJCU9CSkVDVF9UWVBFX1NFUVVFTkNFOworCQkJ CWJyZWFrOworCisJCQljYXNlIFJFTEtJTkRfVE9BU1RWQUxVRToKKwkJCQlhdWRpdEV2ZW50 U3RhY2stPmF1ZGl0RXZlbnQub2JqZWN0VHlwZSA9CisJCQkJCU9CSkVDVF9UWVBFX1RPQVNU VkFMVUU7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUkVMS0lORF9WSUVXOgorCQkJCWF1ZGl0 RXZlbnRTdGFjay0+YXVkaXRFdmVudC5vYmplY3RUeXBlID0KKwkJCQkJT0JKRUNUX1RZUEVf VklFVzsKKwkJCQlicmVhazsKKworCQkJY2FzZSBSRUxLSU5EX0NPTVBPU0lURV9UWVBFOgor CQkJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5vYmplY3RUeXBlID0KKwkJCQkJT0JK RUNUX1RZUEVfQ09NUE9TSVRFX1RZUEU7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUkVMS0lO RF9GT1JFSUdOX1RBQkxFOgorCQkJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5vYmpl Y3RUeXBlID0KKwkJCQkJT0JKRUNUX1RZUEVfRk9SRUlHTl9UQUJMRTsKKwkJCQlicmVhazsK KworCQkJY2FzZSBSRUxLSU5EX01BVFZJRVc6CisJCQkJYXVkaXRFdmVudFN0YWNrLT5hdWRp dEV2ZW50Lm9iamVjdFR5cGUgPQorCQkJCQlPQkpFQ1RfVFlQRV9NQVRWSUVXOworCQkJCWJy ZWFrOworCisJCQlkZWZhdWx0OgorCQkJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5v YmplY3RUeXBlID0KKwkJCQkJT0JKRUNUX1RZUEVfVU5LTk9XTjsKKwkJCQlicmVhazsKKwkJ fQorCisJCS8qIEdldCB0aGUgcmVsYXRpb24gbmFtZSAqLworCQlhdWRpdEV2ZW50U3RhY2st PmF1ZGl0RXZlbnQub2JqZWN0TmFtZSA9CisJCQlxdW90ZV9xdWFsaWZpZWRfaWRlbnRpZmll cihnZXRfbmFtZXNwYWNlX25hbWUoCisJCQkJCQkJCQkgICBSZWxhdGlvbkdldE5hbWVzcGFj ZShyZWwpKSwKKwkJCQkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpOwor CQlyZWxhdGlvbl9jbG9zZShyZWwsIE5vTG9jayk7CisKKwkJLyogUGVyZm9ybSBvYmplY3Qg YXVkaXRpbmcgb25seSBpZiB0aGUgYXVkaXQgcm9sZSBpcyB2YWxpZCAqLworCQlpZiAoYXVk aXRPaWQgIT0gSW52YWxpZE9pZCkKKwkJeworCQkJQWNsTW9kZSBhdWRpdFBlcm1zID0gKEFD TF9TRUxFQ1QgfCBBQ0xfVVBEQVRFIHwgQUNMX0lOU0VSVCkgJgorCQkJCQkJCQkgcnRlLT5y ZXF1aXJlZFBlcm1zOworCisJCQkvKgorCQkJICogSWYgYW55IG9mIHRoZSByZXF1aXJlZCBw ZXJtaXNzaW9ucyBmb3IgdGhlIHJlbGF0aW9uIGFyZSBncmFudGVkCisJCQkgKiB0byB0aGUg YXVkaXQgcm9sZSB0aGVuIGF1ZGl0IHRoZSByZWxhdGlvbgorCQkJICovCisJCQlpZiAoYXVk aXRfb25fcmVsYXRpb24ocmVsT2lkLCBhdWRpdE9pZCwgYXVkaXRQZXJtcykpCisJCQl7CisJ CQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50LmdyYW50ZWQgPSB0cnVlOworCQkJfQor CisJCQkvKgorCQkJICogRWxzZSBjaGVjayBpZiB0aGUgYXVkaXQgcm9sZSBoYXMgY29sdW1u LWxldmVsIHBlcm1pc3Npb25zIGZvcgorCQkJICogc2VsZWN0LCBpbnNlcnQsIG9yIHVwZGF0 ZS4KKwkJCSAqLworCQkJZWxzZSBpZiAoYXVkaXRQZXJtcyAhPSAwKQorCQkJeworCQkJCS8q CisJCQkJICogQ2hlY2sgdGhlIHNlbGVjdCBjb2x1bW5zIHRvIHNlZSBpZiB0aGUgYXVkaXQg cm9sZSBoYXMKKwkJCQkgKiBwcml2ZWxlZ2VzIG9uIGFueSBvZiB0aGVtLgorCQkJCSAqLwor CQkJCWlmIChhdWRpdFBlcm1zICYgQUNMX1NFTEVDVCkKKwkJCQl7CisJCQkJCWF1ZGl0RXZl bnRTdGFjay0+YXVkaXRFdmVudC5ncmFudGVkID0KKwkJCQkJCWF1ZGl0X29uX2FueV9hdHRy aWJ1dGUocmVsT2lkLCBhdWRpdE9pZCwKKwkJCQkJCQkJCQkJICAgcnRlLT5zZWxlY3RlZENv bHMsCisJCQkJCQkJCQkJCSAgIEFDTF9TRUxFQ1QpOworCQkJCX0KKworCQkJCS8qCisJCQkJ ICogQ2hlY2sgdGhlIG1vZGlmaWVkIGNvbHVtbnMgdG8gc2VlIGlmIHRoZSBhdWRpdCByb2xl IGhhcworCQkJCSAqIHByaXZpbGVnZXMgb24gYW55IG9mIHRoZW0uCisJCQkJICovCisJCQkJ aWYgKCFhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQuZ3JhbnRlZCkKKwkJCQl7CisJCQkJ CWF1ZGl0UGVybXMgJj0gKEFDTF9JTlNFUlQgfCBBQ0xfVVBEQVRFKTsKKworCQkJCQlpZiAo YXVkaXRQZXJtcykKKwkJCQkJeworCQkJCQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50 LmdyYW50ZWQgPQorCQkJCQkJCWF1ZGl0X29uX2FueV9hdHRyaWJ1dGUocmVsT2lkLCBhdWRp dE9pZCwKKwkJCQkJCQkJCQkJCSAgIHJ0ZS0+bW9kaWZpZWRDb2xzLAorCQkJCQkJCQkJCQkJ ICAgYXVkaXRQZXJtcyk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKworCQkvKiBPbmx5 IGRvIHJlbGF0aW9uIGxldmVsIGxvZ2dpbmcgaWYgYSBncmFudCB3YXMgZm91bmQuICovCisJ CWlmIChhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQuZ3JhbnRlZCkKKwkJeworCQkJYXVk aXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50LmxvZ2dlZCA9IGZhbHNlOworCQkJbG9nX2F1ZGl0 X2V2ZW50KGF1ZGl0RXZlbnRTdGFjayk7CisJCX0KKworCQlwZnJlZShhdWRpdEV2ZW50U3Rh Y2stPmF1ZGl0RXZlbnQub2JqZWN0TmFtZSk7CisJfQorCisJLyoKKwkgKiBJZiBubyB0YWJs ZXMgd2VyZSBmb3VuZCB0aGF0IG1lYW5zIHRoYXQgUmFuZ2VUYmxzIHdhcyBlbXB0eSBvciBh bGwKKwkgKiByZWxhdGlvbnMgd2VyZSBpbiB0aGUgc3lzdGVtIHNjaGVtYS4gIEluIHRoYXQg Y2FzZSBzdGlsbCBsb2cgYQorCSAqIHNlc3Npb24gcmVjb3JkLgorCSAqLworCWlmICghZm91 bmQpCisJeworCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQuZ3JhbnRlZCA9IGZhbHNl OworCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQubG9nZ2VkID0gZmFsc2U7CisKKwkJ bG9nX2F1ZGl0X2V2ZW50KGF1ZGl0RXZlbnRTdGFjayk7CisJfQorfQorCisvKgorICogQ3Jl YXRlIEF1ZGl0RXZlbnRzIGZvciBjZXJ0YWluIGtpbmRzIG9mIENSRUFURSwgQUxURVIsIGFu ZCBERUxFVEUgc3RhdGVtZW50cworICogd2hlcmUgdGhlIG9iamVjdCBjYW4gYmUgbG9nZ2Vk LgorICovCitzdGF0aWMgdm9pZAorbG9nX2NyZWF0ZV9hbHRlcl9kcm9wKE9pZCBjbGFzc0lk LAorCQkJCQkgIE9pZCBvYmplY3RJZCkKK3sKKwkvKiBPbmx5IHBlcmZvcm0gd2hlbiBjbGFz cyBpcyByZWxhdGlvbiAqLworCWlmIChjbGFzc0lkID09IFJlbGF0aW9uUmVsYXRpb25JZCkK Kwl7CisJCVJlbGF0aW9uIHJlbDsKKwkJRm9ybV9wZ19jbGFzcyBjbGFzczsKKworCQkvKiBP cGVuIHRoZSByZWxhdGlvbiAqLworCQlyZWwgPSByZWxhdGlvbl9vcGVuKG9iamVjdElkLCBO b0xvY2spOworCisJCS8qIEZpbHRlciBvdXQgYW55IHN5c3RlbSByZWxhdGlvbnMgKi8KKwkJ aWYgKElzVG9hc3ROYW1lc3BhY2UoUmVsYXRpb25HZXROYW1lc3BhY2UocmVsKSkpCisJCXsK KwkJCXJlbGF0aW9uX2Nsb3NlKHJlbCwgTm9Mb2NrKTsKKwkJCXJldHVybjsKKwkJfQorCisJ CS8qIEdldCByZWwgaW5mb3JtYXRpb24gYW5kIGNsb3NlIGl0ICovCisJCWNsYXNzID0gUmVs YXRpb25HZXRGb3JtKHJlbCk7CisJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5vYmpl Y3ROYW1lID0KKwkJCXF1b3RlX3F1YWxpZmllZF9pZGVudGlmaWVyKGdldF9uYW1lc3BhY2Vf bmFtZSgKKwkJCQkJCQkJCSAgIFJlbGF0aW9uR2V0TmFtZXNwYWNlKHJlbCkpLAorCQkJCQkJ CQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSk7CisJCXJlbGF0aW9uX2Nsb3Nl KHJlbCwgTm9Mb2NrKTsKKworCQkvKiBTZXQgb2JqZWN0IHR5cGUgYmFzZWQgb24gcmVsa2lu ZCAqLworCQlzd2l0Y2ggKGNsYXNzLT5yZWxraW5kKQorCQl7CisJCQljYXNlIFJFTEtJTkRf UkVMQVRJT046CisJCQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50Lm9iamVjdFR5cGUg PQorCQkJCQlPQkpFQ1RfVFlQRV9UQUJMRTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBSRUxL SU5EX0lOREVYOgorCQkJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5vYmplY3RUeXBl ID0KKwkJCQkJT0JKRUNUX1RZUEVfSU5ERVg7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUkVM S0lORF9TRVFVRU5DRToKKwkJCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQub2JqZWN0 VHlwZSA9CisJCQkJCU9CSkVDVF9UWVBFX1NFUVVFTkNFOworCQkJCWJyZWFrOworCisJCQlj YXNlIFJFTEtJTkRfVklFVzoKKwkJCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQub2Jq ZWN0VHlwZSA9CisJCQkJCU9CSkVDVF9UWVBFX1ZJRVc7CisJCQkJYnJlYWs7CisKKwkJCWNh c2UgUkVMS0lORF9DT01QT1NJVEVfVFlQRToKKwkJCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0 RXZlbnQub2JqZWN0VHlwZSA9CisJCQkJCU9CSkVDVF9UWVBFX0NPTVBPU0lURV9UWVBFOwor CQkJCWJyZWFrOworCisJCQljYXNlIFJFTEtJTkRfRk9SRUlHTl9UQUJMRToKKwkJCQlhdWRp dEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQub2JqZWN0VHlwZSA9CisJCQkJCU9CSkVDVF9UWVBF X0ZPUkVJR05fVEFCTEU7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUkVMS0lORF9NQVRWSUVX OgorCQkJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5vYmplY3RUeXBlID0KKwkJCQkJ T0JKRUNUX1RZUEVfTUFUVklFVzsKKwkJCQlicmVhazsKKworCQkJLyoKKwkJCSAqIEFueSBv dGhlciBjYXNlcyB3aWxsIGJlIGhhbmRsZWQgYnkgbG9nX3V0aWxpdHlfY29tbWFuZCgpLgor CQkJICovCisJCQlkZWZhdWx0OgorCQkJCXJldHVybjsKKwkJCQlicmVhazsKKwkJfQorCX0K K30KKworLyoKKyAqIENyZWF0ZSBBdWRpdEV2ZW50cyBmb3Igbm9uLWNhdGFsb2cgZnVuY3Rp b24gZXhlY3V0aW9uLCBhcyBkZXRlY3RlZCBieQorICogbG9nX29iamVjdF9hY2Nlc3MoKSBi ZWxvdy4KKyAqLworc3RhdGljIHZvaWQKK2xvZ19mdW5jdGlvbl9leGVjdXRlKE9pZCBvYmpl Y3RJZCkKK3sKKwlIZWFwVHVwbGUgcHJvY3R1cDsKKwlGb3JtX3BnX3Byb2MgcHJvYzsKKwlB dWRpdEV2ZW50U3RhY2tJdGVtICpzdGFja0l0ZW07CisKKwkvKiBHZXQgaW5mbyBhYm91dCB0 aGUgZnVuY3Rpb24uICovCisJcHJvY3R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCBP YmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisKKwlpZiAoIXByb2N0dXApCisJCWVsb2co RVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBmdW5jdGlvbiAldSIsIG9iamVjdElk KTsKKwlwcm9jID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2N0dXApOworCisJLyoK KwkgKiBMb2dnaW5nIGV4ZWN1dGlvbiBvZiBhbGwgcGdfY2F0YWxvZyBmdW5jdGlvbnMgd291 bGQgbWFrZSB0aGUgbG9nCisJICogdW51c2FibHkgbm9pc3kuCisJICovCisJaWYgKElzU3lz dGVtTmFtZXNwYWNlKHByb2MtPnByb25hbWVzcGFjZSkpCisJeworCQlSZWxlYXNlU3lzQ2Fj aGUocHJvY3R1cCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBQdXNoIGF1ZGl0IGV2ZW50IG9u dG8gdGhlIHN0YWNrICovCisJc3RhY2tJdGVtID0gc3RhY2tfcHVzaCgpOworCisJLyogR2Vu ZXJhdGUgdGhlIGZ1bGx5LXF1YWxpZmllZCBmdW5jdGlvbiBuYW1lLiAqLworCXN0YWNrSXRl bS0+YXVkaXRFdmVudC5vYmplY3ROYW1lID0KKwkJcXVvdGVfcXVhbGlmaWVkX2lkZW50aWZp ZXIoZ2V0X25hbWVzcGFjZV9uYW1lKHByb2MtPnByb25hbWVzcGFjZSksCisJCQkJCQkJCSAg IE5hbWVTdHIocHJvYy0+cHJvbmFtZSkpOworCVJlbGVhc2VTeXNDYWNoZShwcm9jdHVwKTsK KworCS8qIExvZyB0aGUgZnVuY3Rpb24gY2FsbCAqLworCXN0YWNrSXRlbS0+YXVkaXRFdmVu dC5sb2dTdG10TGV2ZWwgPSBMT0dTVE1UX0FMTDsKKwlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQu Y29tbWFuZFRhZyA9IFRfRG9TdG10OworCXN0YWNrSXRlbS0+YXVkaXRFdmVudC5jb21tYW5k ID0gQ09NTUFORF9FWEVDVVRFOworCXN0YWNrSXRlbS0+YXVkaXRFdmVudC5vYmplY3RUeXBl ID0gT0JKRUNUX1RZUEVfRlVOQ1RJT047CisJc3RhY2tJdGVtLT5hdWRpdEV2ZW50LmNvbW1h bmRUZXh0ID0gc3RhY2tJdGVtLT5uZXh0LT5hdWRpdEV2ZW50LmNvbW1hbmRUZXh0OworCisJ bG9nX2F1ZGl0X2V2ZW50KHN0YWNrSXRlbSk7CisKKwkvKiBQb3AgYXVkaXQgZXZlbnQgZnJv bSB0aGUgc3RhY2sgKi8KKwlzdGFja19wb3Aoc3RhY2tJdGVtLT5zdGFja0lkKTsKK30KKwor LyoKKyAqIExvZyBvYmplY3QgYWNjZXNzZXMgKHdoaWNoIGlzIG1vcmUgYWJvdXQgRERMIHRo YW4gRE1MLCBldmVuIHRob3VnaCBpdAorICogc291bmRzIGxpa2UgdGhlIGxhdHRlcikuCisg Ki8KK3N0YXRpYyB2b2lkCitsb2dfb2JqZWN0X2FjY2VzcyhPYmplY3RBY2Nlc3NUeXBlIGFj Y2VzcywKKwkJCQkgIE9pZCBjbGFzc0lkLAorCQkJCSAgT2lkIG9iamVjdElkLAorCQkJCSAg aW50IHN1YklkLAorCQkJCSAgdm9pZCAqYXJnKQoreworCXN3aXRjaCAoYWNjZXNzKQorCXsK KwkJLyogTG9nIGV4ZWN1dGUgKi8KKwkJY2FzZSBPQVRfRlVOQ1RJT05fRVhFQ1VURToKKwkJ CWlmIChhdWRpdExvZ0JpdG1hcCAmIExPR19GVU5DVElPTikKKwkJCQlsb2dfZnVuY3Rpb25f ZXhlY3V0ZShvYmplY3RJZCk7CisJCQlicmVhazsKKworCQkvKiBMb2cgY3JlYXRlICovCisJ CWNhc2UgT0FUX1BPU1RfQ1JFQVRFOgorCQkJaWYgKGF1ZGl0TG9nQml0bWFwICYgTE9HX0RE TCkKKwkJCXsKKwkJCQlPYmplY3RBY2Nlc3NQb3N0Q3JlYXRlICpwYyA9IGFyZzsKKworCQkJ CWlmIChwYy0+aXNfaW50ZXJuYWwpCisJCQkJCXJldHVybjsKKworCQkJCWxvZ19jcmVhdGVf YWx0ZXJfZHJvcChjbGFzc0lkLCBvYmplY3RJZCk7CisJCQl9CisJCQlicmVhazsKKworCQkv KiBMb2cgYWx0ZXIgKi8KKwkJY2FzZSBPQVRfUE9TVF9BTFRFUjoKKwkJCWlmIChhdWRpdExv Z0JpdG1hcCAmIExPR19EREwpCisJCQl7CisJCQkJT2JqZWN0QWNjZXNzUG9zdEFsdGVyICpw YSA9IGFyZzsKKworCQkJCWlmIChwYS0+aXNfaW50ZXJuYWwpCisJCQkJCXJldHVybjsKKwor CQkJCWxvZ19jcmVhdGVfYWx0ZXJfZHJvcChjbGFzc0lkLCBvYmplY3RJZCk7CisJCQl9CisJ CQlicmVhazsKKworCQkvKiBMb2cgZHJvcCAqLworCQljYXNlIE9BVF9EUk9QOgorCQkJaWYg KGF1ZGl0TG9nQml0bWFwICYgTE9HX0RETCkKKwkJCXsKKwkJCQlPYmplY3RBY2Nlc3NEcm9w ICpkcm9wID0gYXJnOworCisJCQkJaWYgKGRyb3AtPmRyb3BmbGFncyAmIFBFUkZPUk1fREVM RVRJT05fSU5URVJOQUwpCisJCQkJCXJldHVybjsKKworCQkJCWxvZ19jcmVhdGVfYWx0ZXJf ZHJvcChjbGFzc0lkLCBvYmplY3RJZCk7CisJCQl9CisJCQlicmVhazsKKworCQkvKiBBbGwg b3RoZXJzIHByb2Nlc3NlZCBieSBsb2dfdXRpbGl0eV9jb21tYW5kKCkgKi8KKwkJZGVmYXVs dDoKKwkJCWJyZWFrOworCX0KK30KKworLyoKKyAqIEhvb2sgZnVuY3Rpb25zCisgKi8KK3N0 YXRpYyBFeGVjdXRvckNoZWNrUGVybXNfaG9va190eXBlIG5leHRfRXhlY3V0b3JDaGVja1Bl cm1zX2hvb2sgPSBOVUxMOworc3RhdGljIFByb2Nlc3NVdGlsaXR5X2hvb2tfdHlwZSBuZXh0 X1Byb2Nlc3NVdGlsaXR5X2hvb2sgPSBOVUxMOworc3RhdGljIG9iamVjdF9hY2Nlc3NfaG9v a190eXBlIG5leHRfb2JqZWN0X2FjY2Vzc19ob29rID0gTlVMTDsKK3N0YXRpYyBFeGVjdXRv clN0YXJ0X2hvb2tfdHlwZSBuZXh0X0V4ZWN1dG9yU3RhcnRfaG9vayA9IE5VTEw7CitzdGF0 aWMgRXhlY3V0b3JFbmRfaG9va190eXBlIG5leHRfRXhlY3V0b3JFbmRfaG9vayA9IE5VTEw7 CisKKy8qCisgKiBIb29rIEV4ZWN1dG9yU3RhcnQgdG8gZ2V0IHRoZSBxdWVyeSB0ZXh0IGFu ZCBiYXNpYyBjb21tYW5kIHR5cGUgZm9yIHF1ZXJpZXMKKyAqIHRoYXQgZG8gbm90IGNvbnRh aW4gYSB0YWJsZSBzbyBjYW4ndCBiZSBpZGVuaXRpZmllZCBhY2N1cmF0ZWx5IGluCisgKiBF eGVjdXRvckNoZWNrUGVybXMuCisgKi8KK3N0YXRpYyB2b2lkCitwZ19hdWRpdF9FeGVjdXRv clN0YXJ0X2hvb2soUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3MpCit7CisJQXVk aXRFdmVudFN0YWNrSXRlbSAqc3RhY2tJdGVtID0gTlVMTDsKKworCWlmICghaW50ZXJuYWxT dGF0ZW1lbnQpCisJeworCQkvKiBBbGxvY2F0ZSB0aGUgYXVkaXQgZXZlbnQgKi8KKwkJc3Rh Y2tJdGVtID0gc3RhY2tfcHVzaCgpOworCisJCS8qIEluaXRpYWxpemUgY29tbWFuZCAqLwor CQlzd2l0Y2ggKHF1ZXJ5RGVzYy0+b3BlcmF0aW9uKQorCQl7CisJCQljYXNlIENNRF9TRUxF Q1Q6CisJCQkJc3RhY2tJdGVtLT5hdWRpdEV2ZW50LmxvZ1N0bXRMZXZlbCA9IExPR1NUTVRf QUxMOworCQkJCXN0YWNrSXRlbS0+YXVkaXRFdmVudC5jb21tYW5kVGFnID0gVF9TZWxlY3RT dG10OworCQkJCXN0YWNrSXRlbS0+YXVkaXRFdmVudC5jb21tYW5kID0gQ09NTUFORF9TRUxF Q1Q7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQ01EX0lOU0VSVDoKKwkJCQlzdGFja0l0ZW0t PmF1ZGl0RXZlbnQubG9nU3RtdExldmVsID0gTE9HU1RNVF9NT0Q7CisJCQkJc3RhY2tJdGVt LT5hdWRpdEV2ZW50LmNvbW1hbmRUYWcgPSBUX0luc2VydFN0bXQ7CisJCQkJc3RhY2tJdGVt LT5hdWRpdEV2ZW50LmNvbW1hbmQgPSBDT01NQU5EX0lOU0VSVDsKKwkJCQlicmVhazsKKwor CQkJY2FzZSBDTURfVVBEQVRFOgorCQkJCXN0YWNrSXRlbS0+YXVkaXRFdmVudC5sb2dTdG10 TGV2ZWwgPSBMT0dTVE1UX01PRDsKKwkJCQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQuY29tbWFu ZFRhZyA9IFRfVXBkYXRlU3RtdDsKKwkJCQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQuY29tbWFu ZCA9IENPTU1BTkRfVVBEQVRFOworCQkJCWJyZWFrOworCisJCQljYXNlIENNRF9ERUxFVEU6 CisJCQkJc3RhY2tJdGVtLT5hdWRpdEV2ZW50LmxvZ1N0bXRMZXZlbCA9IExPR1NUTVRfTU9E OworCQkJCXN0YWNrSXRlbS0+YXVkaXRFdmVudC5jb21tYW5kVGFnID0gVF9EZWxldGVTdG10 OworCQkJCXN0YWNrSXRlbS0+YXVkaXRFdmVudC5jb21tYW5kID0gQ09NTUFORF9ERUxFVEU7 CisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJc3RhY2tJdGVtLT5hdWRpdEV2ZW50 LmxvZ1N0bXRMZXZlbCA9IExPR1NUTVRfQUxMOworCQkJCXN0YWNrSXRlbS0+YXVkaXRFdmVu dC5jb21tYW5kVGFnID0gVF9JbnZhbGlkOworCQkJCXN0YWNrSXRlbS0+YXVkaXRFdmVudC5j b21tYW5kID0gQ09NTUFORF9VTktOT1dOOworCQkJCWJyZWFrOworCQl9CisKKwkJLyogSW5p dGlhbGl6ZSB0aGUgYXVkaXQgZXZlbnQgKi8KKwkJc3RhY2tJdGVtLT5hdWRpdEV2ZW50Lm9i amVjdE5hbWUgPSAiIjsKKwkJc3RhY2tJdGVtLT5hdWRpdEV2ZW50Lm9iamVjdFR5cGUgPSAi IjsKKwkJc3RhY2tJdGVtLT5hdWRpdEV2ZW50LmNvbW1hbmRUZXh0ID0gcXVlcnlEZXNjLT5z b3VyY2VUZXh0OworCQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQucGFyYW1MaXN0ID0gcXVlcnlE ZXNjLT5wYXJhbXM7CisJfQorCisJLyogQ2FsbCB0aGUgcHJldmlvdXMgaG9vayBvciBzdGFu ZGFyZCBmdW5jdGlvbiAqLworCWlmIChuZXh0X0V4ZWN1dG9yU3RhcnRfaG9vaykKKwkJbmV4 dF9FeGVjdXRvclN0YXJ0X2hvb2socXVlcnlEZXNjLCBlZmxhZ3MpOworCWVsc2UKKwkJc3Rh bmRhcmRfRXhlY3V0b3JTdGFydChxdWVyeURlc2MsIGVmbGFncyk7Cit9CisKKy8qCisgKiBI b29rIEV4ZWN1dG9yQ2hlY2tQZXJtcyB0byBkbyBzZXNzaW9uIGFuZCBvYmplY3QgYXVkaXRp bmcgZm9yIERNTC4KKyAqLworc3RhdGljIGJvb2wKK3BnX2F1ZGl0X0V4ZWN1dG9yQ2hlY2tQ ZXJtc19ob29rKExpc3QgKnJhbmdlVGFibHMsIGJvb2wgYWJvcnQpCit7CisJT2lkIGF1ZGl0 T2lkOworCisJLyogR2V0IHRoZSBhdWRpdCBvaWQgaWYgdGhlIHJvbGUgZXhpc3RzLiAqLwor CWF1ZGl0T2lkID0gZ2V0X3JvbGVfb2lkKGF1ZGl0Um9sZSwgdHJ1ZSk7CisKKwkvKiBMb2cg RE1MIGlmIHRoZSBhdWRpdCByb2xlIGlzIHZhbGlkIG9yIHNlc3Npb24gbG9nZ2luZyBpcyBl bmFibGVkLiAqLworCWlmICgoYXVkaXRPaWQgIT0gSW52YWxpZE9pZCB8fCBhdWRpdExvZ0Jp dG1hcCAhPSAwKSAmJgorCQkhSXNBYm9ydGVkVHJhbnNhY3Rpb25CbG9ja1N0YXRlKCkpCisJ CWxvZ19zZWxlY3RfZG1sKGF1ZGl0T2lkLCByYW5nZVRhYmxzKTsKKworCS8qIENhbGwgdGhl IG5leHQgaG9vayBmdW5jdGlvbi4gKi8KKwlpZiAobmV4dF9FeGVjdXRvckNoZWNrUGVybXNf aG9vayAmJgorCQkhKCpuZXh0X0V4ZWN1dG9yQ2hlY2tQZXJtc19ob29rKSAocmFuZ2VUYWJs cywgYWJvcnQpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoK KyAqIEhvb2sgRXhlY3V0b3JFbmQgdG8gcG9wIHN0YXRlbWVudCBhdWRpdCBldmVudCBvZmYg dGhlIHN0YWNrLgorICovCitzdGF0aWMgdm9pZAorcGdfYXVkaXRfRXhlY3V0b3JFbmRfaG9v ayhRdWVyeURlc2MgKnF1ZXJ5RGVzYykKK3sKKwkvKiBDYWxsIHRoZSBuZXh0IGhvb2sgb3Ig c3RhbmRhcmQgZnVuY3Rpb24gKi8KKwlpZiAobmV4dF9FeGVjdXRvckVuZF9ob29rKQorCQlu ZXh0X0V4ZWN1dG9yRW5kX2hvb2socXVlcnlEZXNjKTsKKwllbHNlCisJCXN0YW5kYXJkX0V4 ZWN1dG9yRW5kKHF1ZXJ5RGVzYyk7CisKKwkvKiBQb3AgdGhlIGF1ZGl0IGV2ZW50IG9mZiB0 aGUgc3RhY2sgKi8KKwlpZiAoIWludGVybmFsU3RhdGVtZW50KQorCXsKKwkJc3RhY2tfcG9w KGF1ZGl0RXZlbnRTdGFjay0+c3RhY2tJZCk7CisJfQorfQorCisvKgorICogSG9vayBQcm9j ZXNzVXRpbGl0eSB0byBkbyBzZXNzaW9uIGF1ZGl0aW5nIGZvciBEREwgYW5kIHV0aWxpdHkg Y29tbWFuZHMuCisgKi8KK3N0YXRpYyB2b2lkCitwZ19hdWRpdF9Qcm9jZXNzVXRpbGl0eV9o b29rKE5vZGUgKnBhcnNldHJlZSwKKwkJCQkJCQkgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcs CisJCQkJCQkJIFByb2Nlc3NVdGlsaXR5Q29udGV4dCBjb250ZXh0LAorCQkJCQkJCSBQYXJh bUxpc3RJbmZvIHBhcmFtcywKKwkJCQkJCQkgRGVzdFJlY2VpdmVyICpkZXN0LAorCQkJCQkJ CSBjaGFyICpjb21wbGV0aW9uVGFnKQoreworCUF1ZGl0RXZlbnRTdGFja0l0ZW0gKnN0YWNr SXRlbSA9IE5VTEw7CisJaW50NjQgc3RhY2tJZDsKKworCS8qIEFsbG9jYXRlIHRoZSBhdWRp dCBldmVudCAqLworCWlmICghSXNBYm9ydGVkVHJhbnNhY3Rpb25CbG9ja1N0YXRlKCkpCisJ eworCQkvKiBQcm9jZXNzIHRvcCBsZXZlbCB1dGlsaXR5IHN0YXRlbWVudCAqLworCQlpZiAo Y29udGV4dCA9PSBQUk9DRVNTX1VUSUxJVFlfVE9QTEVWRUwpCisJCXsKKwkJCWlmIChhdWRp dEV2ZW50U3RhY2sgIT0gTlVMTCkKKwkJCQllbG9nKEVSUk9SLCAicGdfYXVkaXQgc3RhY2sg aXMgbm90IGVtcHR5Iik7CisKKwkJCS8qIFNldCBwYXJhbXMgKi8KKwkJCXN0YWNrSXRlbSA9 IHN0YWNrX3B1c2goKTsKKwkJCXN0YWNrSXRlbS0+YXVkaXRFdmVudC5wYXJhbUxpc3QgPSBw YXJhbXM7CisJCX0KKwkJZWxzZQorCQkJc3RhY2tJdGVtID0gc3RhY2tfcHVzaCgpOworCisJ CXN0YWNrSWQgPSBzdGFja0l0ZW0tPnN0YWNrSWQ7CisJCXN0YWNrSXRlbS0+YXVkaXRFdmVu dC5sb2dTdG10TGV2ZWwgPSBHZXRDb21tYW5kTG9nTGV2ZWwocGFyc2V0cmVlKTsKKwkJc3Rh Y2tJdGVtLT5hdWRpdEV2ZW50LmNvbW1hbmRUYWcgPSBub2RlVGFnKHBhcnNldHJlZSk7CisJ CXN0YWNrSXRlbS0+YXVkaXRFdmVudC5jb21tYW5kID0gQ3JlYXRlQ29tbWFuZFRhZyhwYXJz ZXRyZWUpOworCQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQub2JqZWN0TmFtZSA9ICIiOworCQlz dGFja0l0ZW0tPmF1ZGl0RXZlbnQub2JqZWN0VHlwZSA9ICIiOworCQlzdGFja0l0ZW0tPmF1 ZGl0RXZlbnQuY29tbWFuZFRleHQgPSBxdWVyeVN0cmluZzsKKworCQkvKgorCQkgKiBJZiB0 aGlzIGlzIGEgRE8gYmxvY2sgbG9nIGl0IGJlZm9yZSBjYWxsaW5nIHRoZSBuZXh0IFByb2Nl c3NVdGlsaXR5CisJCSAqIGhvb2suCisJCSAqLworCQlpZiAoYXVkaXRMb2dCaXRtYXAgIT0g MCAmJgorCQkJc3RhY2tJdGVtLT5hdWRpdEV2ZW50LmNvbW1hbmRUYWcgPT0gVF9Eb1N0bXQg JiYKKwkJCSFJc0Fib3J0ZWRUcmFuc2FjdGlvbkJsb2NrU3RhdGUoKSkKKwkJeworCQkJbG9n X2F1ZGl0X2V2ZW50KHN0YWNrSXRlbSk7CisJCX0KKwl9CisKKwkvKiBDYWxsIHRoZSBzdGFu ZGFyZCBwcm9jZXNzIHV0aWxpdHkgY2hhaW4uICovCisJaWYgKG5leHRfUHJvY2Vzc1V0aWxp dHlfaG9vaykKKwkJKCpuZXh0X1Byb2Nlc3NVdGlsaXR5X2hvb2spIChwYXJzZXRyZWUsIHF1 ZXJ5U3RyaW5nLCBjb250ZXh0LAorCQkJCQkJCQkJIHBhcmFtcywgZGVzdCwgY29tcGxldGlv blRhZyk7CisJZWxzZQorCQlzdGFuZGFyZF9Qcm9jZXNzVXRpbGl0eShwYXJzZXRyZWUsIHF1 ZXJ5U3RyaW5nLCBjb250ZXh0LAorCQkJCQkJCQlwYXJhbXMsIGRlc3QsIGNvbXBsZXRpb25U YWcpOworCisJLyogUHJvY2VzcyB0aGUgYXVkaXQgZXZlbnQgaWYgdGhlcmUgaXMgb25lLiAq LworCWlmIChzdGFja0l0ZW0gIT0gTlVMTCkKKwl7CisJCS8qIExvZyB0aGUgdXRpbGl0eSBj b21tYW5kIGlmIGxvZ2dpbmcgaXMgb24sIHRoZSBjb21tYW5kIGhhcyBub3QgYWxyZWFkeQor CQkgKiBiZWVuIGxvZ2dlZCBieSBhbm90aGVyIGhvb2ssIGFuZCB0aGUgdHJhbnNhY3Rpb24g aXMgbm90IGFib3J0ZWQuICovCisJCWlmIChhdWRpdExvZ0JpdG1hcCAhPSAwICYmICFzdGFj a0l0ZW0tPmF1ZGl0RXZlbnQubG9nZ2VkICYmCisJCQkhSXNBYm9ydGVkVHJhbnNhY3Rpb25C bG9ja1N0YXRlKCkpCisJCQlsb2dfYXVkaXRfZXZlbnQoc3RhY2tJdGVtKTsKKworCQlzdGFj a19wb3Aoc3RhY2tJZCk7CisJfQorfQorCisvKgorICogSG9vayBvYmplY3RfYWNjZXNzX2hv b2sgdG8gcHJvdmlkZSBmdWxseS1xdWFsaWZpZWQgb2JqZWN0IG5hbWVzIGZvciBleGVjdXRl LAorICogY3JlYXRlLCBkcm9wLCBhbmQgYWx0ZXIgY29tbWFuZHMuICBNb3N0IG9mIHRoZSBh dWRpdCBpbmZvcm1hdGlvbiBpcyBmaWxsZWQgaW4KKyAqIGJ5IGxvZ191dGlsaXR5X2NvbW1h bmQoKS4KKyAqLworc3RhdGljIHZvaWQKK3BnX2F1ZGl0X29iamVjdF9hY2Nlc3NfaG9vayhP YmplY3RBY2Nlc3NUeXBlIGFjY2VzcywKKwkJCQkJCQlPaWQgY2xhc3NJZCwKKwkJCQkJCQlP aWQgb2JqZWN0SWQsCisJCQkJCQkJaW50IHN1YklkLAorCQkJCQkJCXZvaWQgKmFyZykKK3sK KwlpZiAoYXVkaXRMb2dCaXRtYXAgIT0gMCAmJiAhSXNBYm9ydGVkVHJhbnNhY3Rpb25CbG9j a1N0YXRlKCkgJiYKKwkJYXVkaXRMb2dCaXRtYXAgJiAoTE9HX0RETCB8IExPR19GVU5DVElP TikpCisJCWxvZ19vYmplY3RfYWNjZXNzKGFjY2VzcywgY2xhc3NJZCwgb2JqZWN0SWQsIHN1 YklkLCBhcmcpOworCisJaWYgKG5leHRfb2JqZWN0X2FjY2Vzc19ob29rKQorCQkoKm5leHRf b2JqZWN0X2FjY2Vzc19ob29rKSAoYWNjZXNzLCBjbGFzc0lkLCBvYmplY3RJZCwgc3ViSWQs IGFyZyk7Cit9CisKKy8qCisgKiBFdmVudCB0cmlnZ2VyIGZ1bmN0aW9ucworICovCisKKy8q CisgKiBTdXBwbHkgYWRkaXRpb25hbCBkYXRhIGZvciAobm9uIGRyb3ApIHN0YXRlbWVudHMg dGhhdCBoYXZlIGV2ZW50IHRyaWdnZXIKKyAqIHN1cHBvcnQgYW5kIGNhbiBiZSBkZXBhcnNl ZC4KKyAqLworRGF0dW0KK3BnX2F1ZGl0X2RkbF9jb21tYW5kX2VuZChQR19GVU5DVElPTl9B UkdTKQoreworCS8qIENvbnRpbnVlIG9ubHkgaWYgc2Vzc2lvbiBsb2dnaW5nIGlzIGVuYWJs ZWQgKi8KKwlpZiAoYXVkaXRMb2dCaXRtYXAgIT0gTE9HX0RETCkKKwl7CisJCUV2ZW50VHJp Z2dlckRhdGEgKmV2ZW50RGF0YTsKKwkJaW50CQkJCSAgcmVzdWx0LCByb3c7CisJCVR1cGxl RGVzYwkJICBzcGlUdXBEZXNjOworCQljb25zdCBjaGFyCQkgKnF1ZXJ5OworCQlNZW1vcnlD b250ZXh0IAkgIGNvbnRleHRRdWVyeTsKKwkJTWVtb3J5Q29udGV4dCAJICBjb250ZXh0T2xk OworCisJCS8qIFRoaXMgaXMgYW4gaW50ZXJuYWwgc3RhdGVtZW50IC0gZG8gbm90IGxvZyBp dCAqLworCQlpbnRlcm5hbFN0YXRlbWVudCA9IHRydWU7CisKKwkJLyogTWFrZSBzdXJlIHRo ZSBmdWN0aW9uIHdhcyBmaXJlZCBhcyBhIHRyaWdnZXIgKi8KKwkJaWYgKCFDQUxMRURfQVNf RVZFTlRfVFJJR0dFUihmY2luZm8pKQorCQkJZWxvZyhFUlJPUiwgIm5vdCBmaXJlZCBieSBl dmVudCB0cmlnZ2VyIG1hbmFnZXIiKTsKKworCQkvKiBTd2l0Y2ggbWVtb3J5IGNvbnRleHQg Ki8KKwkJY29udGV4dFF1ZXJ5ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKAorCQkJCQkJQ3Vy cmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkicGdfYXVkaXRfZnVuY19kZGxfY29tbWFuZF9l bmQgdGVtcG9yYXJ5IGNvbnRleHQiLAorCQkJCQkJQUxMT0NTRVRfREVGQVVMVF9NSU5TSVpF LAorCQkJCQkJQUxMT0NTRVRfREVGQVVMVF9JTklUU0laRSwKKwkJCQkJCUFMTE9DU0VUX0RF RkFVTFRfTUFYU0laRSk7CisJCWNvbnRleHRPbGQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8o Y29udGV4dFF1ZXJ5KTsKKworCQkvKiBHZXQgaW5mb3JtYXRpb24gYWJvdXQgdHJpZ2dlcmVk IGV2ZW50cyAqLworCQlldmVudERhdGEgPSAoRXZlbnRUcmlnZ2VyRGF0YSAqKSBmY2luZm8t PmNvbnRleHQ7CisKKwkJLyogUmV0dXJuIG9iamVjdHMgYWZmZWN0ZWQgYnkgdGhlIChub24g ZHJvcCkgRERMIHN0YXRlbWVudCAqLworCQlxdWVyeSA9ICJTRUxFQ1QgY2xhc3NpZCwgb2Jq aWQsIG9ianN1YmlkLCBVUFBFUihvYmplY3RfdHlwZSksIHNjaGVtYSxcbiIKKwkJCQkiICAg ICAgIGlkZW50aXR5LCBjb21tYW5kXG4iCisJCQkJIiAgRlJPTSBwZ19ldmVudF90cmlnZ2Vy X2dldF9jcmVhdGlvbl9jb21tYW5kcygpIjsKKworCQkvKiBBdHRlbXB0IHRvIGNvbm5lY3Qg Ki8KKwkJcmVzdWx0ID0gU1BJX2Nvbm5lY3QoKTsKKworCQlpZiAocmVzdWx0IDwgMCkKKwkJ CWVsb2coRVJST1IsICJwZ19hdWRpdF9kZGxfY29tbWFuZF9lbmQ6IFNQSV9jb25uZWN0IHJl dHVybmVkICVkIiwKKwkJCQkJCXJlc3VsdCk7CisKKwkJLyogRXhlY3V0ZSB0aGUgcXVlcnkg Ki8KKwkJcmVzdWx0ID0gU1BJX2V4ZWN1dGUocXVlcnksIHRydWUsIDApOworCisJCWlmIChy ZXN1bHQgIT0gU1BJX09LX1NFTEVDVCkKKwkJCWVsb2coRVJST1IsICJwZ19hdWRpdF9kZGxf Y29tbWFuZF9lbmQ6IFNQSV9leGVjdXRlIHJldHVybmVkICVkIiwKKwkJCQkJCXJlc3VsdCk7 CisKKwkJLyogSXRlcmF0ZSByZXR1cm5lZCByb3dzICovCisJCXNwaVR1cERlc2MgPSBTUElf dHVwdGFibGUtPnR1cGRlc2M7CisKKwkJZm9yIChyb3cgPSAwOyByb3cgPCBTUElfcHJvY2Vz c2VkOyByb3crKykKKwkJeworCQkJSGVhcFR1cGxlICBzcGlUdXBsZTsKKwkJCWJvb2wJICAg aXNOdWxsOworCisJCQlzcGlUdXBsZSA9IFNQSV90dXB0YWJsZS0+dmFsc1tyb3ddOworCisJ CQkvKiBTdXBwbHkgYWRkaXRpb24gZGF0YSB0byBjdXJyZW50IGF1ZGl0IGV2ZW50ICovCisJ CQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQubG9nU3RtdExldmVsID0KKwkJCQlHZXRD b21tYW5kTG9nTGV2ZWwoZXZlbnREYXRhLT5wYXJzZXRyZWUpOworCQkJYXVkaXRFdmVudFN0 YWNrLT5hdWRpdEV2ZW50LmNvbW1hbmRUYWcgPQorCQkJCW5vZGVUYWcoZXZlbnREYXRhLT5w YXJzZXRyZWUpOworCQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50LmNvbW1hbmQgPQor CQkJCUNyZWF0ZUNvbW1hbmRUYWcoZXZlbnREYXRhLT5wYXJzZXRyZWUpOworCQkJYXVkaXRF dmVudFN0YWNrLT5hdWRpdEV2ZW50Lm9iamVjdE5hbWUgPQorCQkJCVNQSV9nZXR2YWx1ZShz cGlUdXBsZSwgc3BpVHVwRGVzYywgNik7CisJCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZl bnQub2JqZWN0VHlwZSA9CisJCQkJU1BJX2dldHZhbHVlKHNwaVR1cGxlLCBzcGlUdXBEZXNj LCA0KTsKKwkJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5jb21tYW5kVGV4dCA9CisJ CQkJVGV4dERhdHVtR2V0Q1N0cmluZygKKwkJCQkJRGlyZWN0RnVuY3Rpb25DYWxsMShwZ19l dmVudF90cmlnZ2VyX2V4cGFuZF9jb21tYW5kLAorCQkJCQkJCQkJCVNQSV9nZXRiaW52YWwo c3BpVHVwbGUsIHNwaVR1cERlc2MsCisJCQkJCQkJCQkJCQkJICA3LCAmaXNOdWxsKSkpOwor CisJCQkvKiBMb2cgdGhlIGF1ZGl0IGV2ZW50ICovCisJCQlsb2dfYXVkaXRfZXZlbnQoYXVk aXRFdmVudFN0YWNrKTsKKwkJfQorCisJCS8qIENvbXBsZXRlIHRoZSBxdWVyeSAqLworCQlT UElfZmluaXNoKCk7CisKKwkJLyogU3dpdGNoIHRvIHRoZSBvbGQgbWVtb3J5IGNvbnRleHQg Ki8KKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKGNvbnRleHRPbGQpOworCQlNZW1vcnlDb250 ZXh0RGVsZXRlKGNvbnRleHRRdWVyeSk7CisKKwkJLyogTm8gbG9uZ2VyIGluIGFuIGludGVy bmFsIHN0YXRlbWVudCAqLworCQlpbnRlcm5hbFN0YXRlbWVudCA9IGZhbHNlOworCX0KKwor CVBHX1JFVFVSTl9OVUxMKCk7Cit9CisKKy8qCisgKiBTdXBwbHkgYWRkaXRpb25hbCBkYXRh IGZvciBkcm9wIHN0YXRlbWVudHMgdGhhdCBoYXZlIGV2ZW50IHRyaWdnZXIgc3VwcG9ydC4K KyAqLworRGF0dW0KK3BnX2F1ZGl0X3NxbF9kcm9wKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJ aWYgKGF1ZGl0TG9nQml0bWFwICYgTE9HX0RETCkKKwl7CisJCWludAkJCQkgIHJlc3VsdCwg cm93OworCQlUdXBsZURlc2MJCSAgc3BpVHVwRGVzYzsKKwkJY29uc3QgY2hhcgkJICpxdWVy eTsKKwkJTWVtb3J5Q29udGV4dCAJICBjb250ZXh0UXVlcnk7CisJCU1lbW9yeUNvbnRleHQg CSAgY29udGV4dE9sZDsKKworCQkvKiBUaGlzIGlzIGFuIGludGVybmFsIHN0YXRlbWVudCAt IGRvIG5vdCBsb2cgaXQgKi8KKwkJaW50ZXJuYWxTdGF0ZW1lbnQgPSB0cnVlOworCisJCS8q IE1ha2Ugc3VyZSB0aGUgZnVjdGlvbiB3YXMgZmlyZWQgYXMgYSB0cmlnZ2VyICovCisJCWlm ICghQ0FMTEVEX0FTX0VWRU5UX1RSSUdHRVIoZmNpbmZvKSkKKwkJCWVsb2coRVJST1IsICJu b3QgZmlyZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7CisKKwkJLyogU3dpdGNoIG1l bW9yeSBjb250ZXh0ICovCisJCWNvbnRleHRRdWVyeSA9IEFsbG9jU2V0Q29udGV4dENyZWF0 ZSgKKwkJCQkJCUN1cnJlbnRNZW1vcnlDb250ZXh0LAorCQkJCQkJInBnX2F1ZGl0X2Z1bmNf ZGRsX2NvbW1hbmRfZW5kIHRlbXBvcmFyeSBjb250ZXh0IiwKKwkJCQkJCUFMTE9DU0VUX0RF RkFVTFRfTUlOU0laRSwKKwkJCQkJCUFMTE9DU0VUX0RFRkFVTFRfSU5JVFNJWkUsCisJCQkJ CQlBTExPQ1NFVF9ERUZBVUxUX01BWFNJWkUpOworCQljb250ZXh0T2xkID0gTWVtb3J5Q29u dGV4dFN3aXRjaFRvKGNvbnRleHRRdWVyeSk7CisKKwkJLyogUmV0dXJuIG9iamVjdHMgYWZm ZWN0ZWQgYnkgdGhlIGRyb3Agc3RhdGVtZW50ICovCisJCXF1ZXJ5ID0gIlNFTEVDVCBjbGFz c2lkLCBvYmppZCwgb2Jqc3ViaWQsIFVQUEVSKG9iamVjdF90eXBlKSxcbiIKKwkJCQkiICAg ICAgIHNjaGVtYV9uYW1lLCBvYmplY3RfbmFtZSwgb2JqZWN0X2lkZW50aXR5XG4iCisJCQkJ IiAgRlJPTSBwZ19ldmVudF90cmlnZ2VyX2Ryb3BwZWRfb2JqZWN0cygpIjsKKworCQkvKiBB dHRlbXB0IHRvIGNvbm5lY3QgKi8KKwkJcmVzdWx0ID0gU1BJX2Nvbm5lY3QoKTsKKworCQlp ZiAocmVzdWx0IDwgMCkKKwkJCWVsb2coRVJST1IsICJwZ19hdWRpdF9kZGxfZHJvcDogU1BJ X2Nvbm5lY3QgcmV0dXJuZWQgJWQiLAorCQkJCQkJcmVzdWx0KTsKKworCQkvKiBFeGVjdXRl IHRoZSBxdWVyeSAqLworCQlyZXN1bHQgPSBTUElfZXhlY3V0ZShxdWVyeSwgdHJ1ZSwgMCk7 CisKKwkJaWYgKHJlc3VsdCAhPSBTUElfT0tfU0VMRUNUKQorCQkJZWxvZyhFUlJPUiwgInBn X2F1ZGl0X2RkbF9kcm9wOiBTUElfZXhlY3V0ZSByZXR1cm5lZCAlZCIsCisJCQkJCQlyZXN1 bHQpOworCisJCS8qIEl0ZXJhdGUgcmV0dXJuZWQgcm93cyAqLworCQlzcGlUdXBEZXNjID0g U1BJX3R1cHRhYmxlLT50dXBkZXNjOworCisJCWZvciAocm93ID0gMDsgcm93IDwgU1BJX3By b2Nlc3NlZDsgcm93KyspCisJCXsKKwkJCUhlYXBUdXBsZSAgc3BpVHVwbGU7CisJCQljaGFy ICpzY2hlbWFOYW1lOworCisJCQlzcGlUdXBsZSA9IFNQSV90dXB0YWJsZS0+dmFsc1tyb3dd OworCisJCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQub2JqZWN0VHlwZSA9CisJCQkJ U1BJX2dldHZhbHVlKHNwaVR1cGxlLCBzcGlUdXBEZXNjLCA0KTsKKwkJCXNjaGVtYU5hbWUg PSBTUElfZ2V0dmFsdWUoc3BpVHVwbGUsIHNwaVR1cERlc2MsIDUpOworCisJCQlpZiAoIShw Z19zdHJjYXNlY21wKGF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5vYmplY3RUeXBlLAor CQkJCQkJCSJUWVBFIikgPT0gMCB8fAorCQkJCSAgcGdfc3RyY2FzZWNtcChzY2hlbWFOYW1l LCAicGdfdG9hc3QiKSA9PSAwKSkKKwkJCXsKKwkJCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0 RXZlbnQub2JqZWN0TmFtZSA9CisJCQkJCQlTUElfZ2V0dmFsdWUoc3BpVHVwbGUsIHNwaVR1 cERlc2MsIDcpOworCisJCQkJbG9nX2F1ZGl0X2V2ZW50KGF1ZGl0RXZlbnRTdGFjayk7CisJ CQl9CisJCX0KKworCQkvKiBDb21wbGV0ZSB0aGUgcXVlcnkgKi8KKwkJU1BJX2ZpbmlzaCgp OworCisJCS8qIFN3aXRjaCB0byB0aGUgb2xkIG1lbW9yeSBjb250ZXh0ICovCisJCU1lbW9y eUNvbnRleHRTd2l0Y2hUbyhjb250ZXh0T2xkKTsKKwkJTWVtb3J5Q29udGV4dERlbGV0ZShj b250ZXh0UXVlcnkpOworCisJCS8qIE5vIGxvbmdlciBpbiBhbiBpbnRlcm5hbCBzdGF0ZW1l bnQgKi8KKwkJaW50ZXJuYWxTdGF0ZW1lbnQgPSBmYWxzZTsKKwl9CisKKwlQR19SRVRVUk5f TlVMTCgpOworfQorCisvKgorICogR1VDIGNoZWNrIGFuZCBhc3NpZ24gZnVuY3Rpb25zCisg Ki8KKworLyoKKyAqIFRha2UgYSBwZ19hdWRpdC5sb2cgdmFsdWUgc3VjaCBhcyAicmVhZCwg d3JpdGUsIGRtbCIsIHZlcmlmeSB0aGF0IGVhY2ggb2YgdGhlCisgKiBjb21tYS1zZXBhcmF0 ZWQgdG9rZW5zIGNvcnJlc3BvbmRzIHRvIGEgTG9nQ2xhc3MgdmFsdWUsIGFuZCBjb252ZXJ0 IHRoZW0gaW50bworICogYSBiaXRtYXAgdGhhdCBsb2dfYXVkaXRfZXZlbnQgY2FuIGNoZWNr LgorICovCitzdGF0aWMgYm9vbAorY2hlY2tfcGdfYXVkaXRfbG9nKGNoYXIgKipuZXd2YWws IHZvaWQgKipleHRyYSwgR3VjU291cmNlIHNvdXJjZSkKK3sKKwlMaXN0ICpmbGFnczsKKwlj aGFyICpyYXd2YWw7CisJTGlzdENlbGwgKmx0OworCXVpbnQ2NCAqZjsKKworCS8qIE1ha2Ug c3VyZSBuZXd2YWwgaXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB0b2tlbnMuICovCisJ cmF3dmFsID0gcHN0cmR1cCgqbmV3dmFsKTsKKwlpZiAoIVNwbGl0SWRlbnRpZmllclN0cmlu ZyhyYXd2YWwsICcsJywgJmZsYWdzKSkKKwl7CisJCUdVQ19jaGVja19lcnJkZXRhaWwoIkxp c3Qgc3ludGF4IGlzIGludmFsaWQiKTsKKwkJbGlzdF9mcmVlKGZsYWdzKTsKKwkJcGZyZWUo cmF3dmFsKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qCisJICogQ2hlY2sgdGhhdCB3 ZSByZWNvZ25pc2UgZWFjaCB0b2tlbiwgYW5kIGFkZCBpdCB0byB0aGUgYml0bWFwIHdlJ3Jl CisJICogYnVpbGRpbmcgdXAgaW4gYSBuZXdseS1hbGxvY2F0ZWQgdWludDY0ICpmLgorCSAq LworCWYgPSAodWludDY0ICopIG1hbGxvYyhzaXplb2YodWludDY0KSk7CisJaWYgKCFmKQor CQlyZXR1cm4gZmFsc2U7CisJKmYgPSAwOworCisJZm9yZWFjaChsdCwgZmxhZ3MpCisJewor CQlib29sIHN1YnRyYWN0ID0gZmFsc2U7CisJCXVpbnQ2NCBjbGFzczsKKworCQkvKiBSZXRy aWV2ZSBhIHRva2VuICovCisJCWNoYXIgKnRva2VuID0gKGNoYXIgKilsZmlyc3QobHQpOwor CisJCS8qIElmIHRva2VuIGlzIHByZWNlZGVkIGJ5IC0sIHRoZW4gdGhlbiB0b2tlbiBpcyBz dWJ0cmFjdGl2ZS4gKi8KKwkJaWYgKHN0cnN0cih0b2tlbiwgIi0iKSA9PSB0b2tlbikKKwkJ eworCQkJdG9rZW4gPSB0b2tlbiArIDE7CisJCQlzdWJ0cmFjdCA9IHRydWU7CisJCX0KKwor CQkvKiBUZXN0IGVhY2ggdG9rZW4uICovCisJCWlmIChwZ19zdHJjYXNlY21wKHRva2VuLCBD TEFTU19OT05FKSA9PSAwKQorCQkJY2xhc3MgPSBMT0dfTk9ORTsKKwkJZWxzZSBpZiAocGdf c3RyY2FzZWNtcCh0b2tlbiwgQ0xBU1NfQUxMKSA9PSAwKQorCQkJY2xhc3MgPSBMT0dfQUxM OworCQllbHNlIGlmIChwZ19zdHJjYXNlY21wKHRva2VuLCBDTEFTU19EREwpID09IDApCisJ CQljbGFzcyA9IExPR19EREw7CisJCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAodG9rZW4sIENM QVNTX0ZVTkNUSU9OKSA9PSAwKQorCQkJY2xhc3MgPSBMT0dfRlVOQ1RJT047CisJCWVsc2Ug aWYgKHBnX3N0cmNhc2VjbXAodG9rZW4sIENMQVNTX01JU0MpID09IDApCisJCQljbGFzcyA9 IExPR19NSVNDOworCQllbHNlIGlmIChwZ19zdHJjYXNlY21wKHRva2VuLCBDTEFTU19QQVJB TUVURVIpID09IDApCisJCQljbGFzcyA9IExPR19QQVJBTUVURVI7CisJCWVsc2UgaWYgKHBn X3N0cmNhc2VjbXAodG9rZW4sIENMQVNTX1JFQUQpID09IDApCisJCQljbGFzcyA9IExPR19S RUFEOworCQllbHNlIGlmIChwZ19zdHJjYXNlY21wKHRva2VuLCBDTEFTU19XUklURSkgPT0g MCkKKwkJCWNsYXNzID0gTE9HX1dSSVRFOworCQllbHNlCisJCXsKKwkJCWZyZWUoZik7CisJ CQlwZnJlZShyYXd2YWwpOworCQkJbGlzdF9mcmVlKGZsYWdzKTsKKwkJCXJldHVybiBmYWxz ZTsKKwkJfQorCisJCS8qIEFkZCBvciBzdWJ0cmFjdCBjbGFzcyBiaXRzIGZyb20gdGhlIGxv ZyBiaXRtYXAuICovCisJCWlmIChzdWJ0cmFjdCkKKwkJCSpmICY9IH5jbGFzczsKKwkJZWxz ZQorCQkJKmYgfD0gY2xhc3M7CisJfQorCisJcGZyZWUocmF3dmFsKTsKKwlsaXN0X2ZyZWUo ZmxhZ3MpOworCisJLyoKKwkgKiBTdG9yZSB0aGUgYml0bWFwIGZvciBhc3NpZ25fcGdfYXVk aXRfbG9nLgorCSAqLworCSpleHRyYSA9IGY7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoK KyAqIFNldCBwZ19hdWRpdF9sb2cgZnJvbSBleHRyYSAoaWdub3JpbmcgbmV3dmFsLCB3aGlj aCBoYXMgYWxyZWFkeSBiZWVuCisgKiBjb252ZXJ0ZWQgdG8gYSBiaXRtYXAgYWJvdmUpLiBO b3RlIHRoYXQgZXh0cmEgbWF5IG5vdCBiZSBzZXQgaWYgdGhlCisgKiBhc3NpZ25tZW50IGlz IHRvIGJlIHN1cHByZXNzZWQuCisgKi8KK3N0YXRpYyB2b2lkCithc3NpZ25fcGdfYXVkaXRf bG9nKGNvbnN0IGNoYXIgKm5ld3ZhbCwgdm9pZCAqZXh0cmEpCit7CisJaWYgKGV4dHJhKQor CQlhdWRpdExvZ0JpdG1hcCA9ICoodWludDY0ICopZXh0cmE7Cit9CisKKy8qCisgKiBEZWZp bmUgR1VDIHZhcmlhYmxlcyBhbmQgaW5zdGFsbCBob29rcyB1cG9uIG1vZHVsZSBsb2FkLgor ICovCit2b2lkCitfUEdfaW5pdCh2b2lkKQoreworCWlmIChJc1VuZGVyUG9zdG1hc3RlcikK KwkJZXJlcG9ydChFUlJPUiwKKwkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9Q UkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJZXJybXNnKCJwZ19hdWRpdCBtdXN0IGJlIGxvYWRl ZCB2aWEgc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzIikpKTsKKworCS8qCisJICogcGdfYXVk aXQucm9sZSA9ICJhdWRpdCIKKwkgKgorCSAqIFRoaXMgdmFyaWFibGUgZGVmaW5lcyBhIHJv bGUgdG8gYmUgdXNlZCBmb3IgYXVkaXRpbmcuCisJICovCisJRGVmaW5lQ3VzdG9tU3RyaW5n VmFyaWFibGUoInBnX2F1ZGl0LnJvbGUiLAorCQkJCQkJCSAgICJFbmFibGUgYXVkaXRpbmcg Zm9yIHJvbGUiLAorCQkJCQkJCSAgIE5VTEwsCisJCQkJCQkJICAgJmF1ZGl0Um9sZSwKKwkJ CQkJCQkgICAiIiwKKwkJCQkJCQkgICBQR0NfU1VTRVQsCisJCQkJCQkJICAgR1VDX05PVF9J Tl9TQU1QTEUsCisJCQkJCQkJICAgTlVMTCwgTlVMTCwgTlVMTCk7CisKKwkvKgorCSAqIHBn X2F1ZGl0LmxvZyA9ICJyZWFkLCB3cml0ZSwgZGRsIgorCSAqCisJICogVGhpcyB2YXJpYWJs ZXMgY29udHJvbHMgd2hhdCBjbGFzc2VzIG9mIGNvbW1hbmRzIGFyZSBsb2dnZWQuCisJICov CisJRGVmaW5lQ3VzdG9tU3RyaW5nVmFyaWFibGUoInBnX2F1ZGl0LmxvZyIsCisJCQkJCQkJ ICAgIkVuYWJsZSBhdWRpdGluZyBmb3IgY2xhc3NlcyBvZiBjb21tYW5kcyIsCisJCQkJCQkJ ICAgTlVMTCwKKwkJCQkJCQkgICAmYXVkaXRMb2csCisJCQkJCQkJICAgIm5vbmUiLAorCQkJ CQkJCSAgIFBHQ19TVVNFVCwKKwkJCQkJCQkgICBHVUNfTElTVF9JTlBVVCB8IEdVQ19OT1Rf SU5fU0FNUExFLAorCQkJCQkJCSAgIGNoZWNrX3BnX2F1ZGl0X2xvZywKKwkJCQkJCQkgICBh c3NpZ25fcGdfYXVkaXRfbG9nLAorCQkJCQkJCSAgIE5VTEwpOworCisJLyoKKwkgKiBJbnN0 YWxsIG91ciBob29rIGZ1bmN0aW9ucyBhZnRlciBzYXZpbmcgdGhlIGV4aXN0aW5nIHBvaW50 ZXJzIHRvIHByZXNlcnZlCisJICogdGhlIGNoYWluLgorCSAqLworCW5leHRfRXhlY3V0b3JT dGFydF9ob29rID0gRXhlY3V0b3JTdGFydF9ob29rOworCUV4ZWN1dG9yU3RhcnRfaG9vayA9 IHBnX2F1ZGl0X0V4ZWN1dG9yU3RhcnRfaG9vazsKKworCW5leHRfRXhlY3V0b3JDaGVja1Bl cm1zX2hvb2sgPSBFeGVjdXRvckNoZWNrUGVybXNfaG9vazsKKwlFeGVjdXRvckNoZWNrUGVy bXNfaG9vayA9IHBnX2F1ZGl0X0V4ZWN1dG9yQ2hlY2tQZXJtc19ob29rOworCisJbmV4dF9F eGVjdXRvckVuZF9ob29rID0gRXhlY3V0b3JFbmRfaG9vazsKKwlFeGVjdXRvckVuZF9ob29r ID0gcGdfYXVkaXRfRXhlY3V0b3JFbmRfaG9vazsKKworCW5leHRfUHJvY2Vzc1V0aWxpdHlf aG9vayA9IFByb2Nlc3NVdGlsaXR5X2hvb2s7CisJUHJvY2Vzc1V0aWxpdHlfaG9vayA9IHBn X2F1ZGl0X1Byb2Nlc3NVdGlsaXR5X2hvb2s7CisKKwluZXh0X29iamVjdF9hY2Nlc3NfaG9v ayA9IG9iamVjdF9hY2Nlc3NfaG9vazsKKwlvYmplY3RfYWNjZXNzX2hvb2sgPSBwZ19hdWRp dF9vYmplY3RfYWNjZXNzX2hvb2s7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3BnX2F1ZGl0 L3BnX2F1ZGl0LmNvbnRyb2wgYi9jb250cmliL3BnX2F1ZGl0L3BnX2F1ZGl0LmNvbnRyb2wK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjczMGM2OAotLS0gL2Rldi9u dWxsCisrKyBiL2NvbnRyaWIvcGdfYXVkaXQvcGdfYXVkaXQuY29udHJvbApAQCAtMCwwICsx LDUgQEAKKyMgcGdfYXVkaXQgZXh0ZW5zaW9uCitjb21tZW50ID0gJ3Byb3ZpZGVzIGF1ZGl0 aW5nIGZ1bmN0aW9uYWxpdHknCitkZWZhdWx0X3ZlcnNpb24gPSAnMS4wLjAnCittb2R1bGVf cGF0aG5hbWUgPSAnJGxpYmRpci9wZ19hdWRpdCcKK3JlbG9jYXRhYmxlID0gdHJ1ZQpkaWZm IC0tZ2l0IGEvY29udHJpYi9wZ19hdWRpdC90ZXN0L3Rlc3QucGwgYi9jb250cmliL3BnX2F1 ZGl0L3Rlc3QvdGVzdC5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5i M2YyNDQzCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19hdWRpdC90ZXN0L3Rlc3Qu cGwKQEAgLTAsMCArMSwxNDMzIEBACisjIS91c3IvYmluL3BlcmwKKyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjCisjIHRlc3QucGwgLSBwZ19hdWRpdCBVbml0IFRlc3RzCisjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBQ ZXJsIGluY2x1ZGVzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwordXNlIHN0cmljdDsK K3VzZSB3YXJuaW5nczsKK3VzZSBDYXJwOworCit1c2UgR2V0b3B0OjpMb25nOwordXNlIFBv ZDo6VXNhZ2U7Cit1c2UgREJJOwordXNlIEN3ZCBxdyhhYnNfcGF0aCk7Cit1c2UgSVBDOjpT eXN0ZW06OlNpbXBsZSBxdyhjYXB0dXJlKTsKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMKKyMgQ29uc3RhbnRzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwordXNlIGNvbnN0 YW50Cit7CisJdHJ1ZSAgPT4gMSwKKwlmYWxzZSA9PiAwCit9OworCit1c2UgY29uc3RhbnQK K3sKKwlDT05URVhUX0dMT0JBTCAgID0+ICdHTE9CQUwnLAorCUNPTlRFWFRfREFUQUJBU0Ug PT4gJ0RBVEFCQVNFJywKKwlDT05URVhUX1JPTEUJID0+ICdST0xFJworfTsKKwordXNlIGNv bnN0YW50Cit7CisJQ0xBU1MJCQk9PiAnQ0xBU1MnLAorCisJQ0xBU1NfRERMCQk9PiAnRERM JywKKwlDTEFTU19GVU5DVElPTgk9PiAnRlVOQ1RJT04nLAorCUNMQVNTX01JU0MJCT0+ICdN SVNDJywKKwlDTEFTU19QQVJBTUVURVIgPT4gJ1BBUkFNRVRFUicsCisJQ0xBU1NfUkVBRAkJ PT4gJ1JFQUQnLAorCUNMQVNTX1dSSVRFCQk9PiAnV1JJVEUnLAorCisJQ0xBU1NfQUxMCQk9 PiAnQUxMJywKKwlDTEFTU19OT05FCQk9PiAnTk9ORScKK307CisKK3VzZSBjb25zdGFudAor eworCUNPTU1BTkQJCQkJCQk9PiAnQ09NTUFORCcsCisJQ09NTUFORF9MT0cJCQkJCT0+ICdD T01NQU5EX0xPRycsCisKKwlDT01NQU5EX0FOQUxZWkUJCQkJCT0+ICdBTkFMWVpFJywKKwlD T01NQU5EX0FMVEVSX0FHR1JFR0FURQkJCT0+ICdBTFRFUiBBR0dSRUdBVEUnLAorCUNPTU1B TkRfQUxURVJfQ09MTEFUSU9OCQkJPT4gJ0FMVEVSIENPTExBVElPTicsCisJQ09NTUFORF9B TFRFUl9DT05WRVJTSU9OCQk9PiAnQUxURVIgQ09OVkVSU0lPTicsCisJQ09NTUFORF9BTFRF Ul9EQVRBQkFTRQkJCT0+ICdBTFRFUiBEQVRBQkFTRScsCisJQ09NTUFORF9BTFRFUl9ST0xF CQkJCT0+ICdBTFRFUiBST0xFJywKKwlDT01NQU5EX0FMVEVSX1JPTEVfU0VUCQkJPT4gJ0FM VEVSIFJPTEUgU0VUJywKKwlDT01NQU5EX0FMVEVSX1RBQkxFCQkJCT0+ICdBTFRFUiBUQUJM RScsCisJQ09NTUFORF9BTFRFUl9UQUJMRV9DT0xVTU4JCT0+ICdBTFRFUiBUQUJMRSBDT0xV TU4nLAorCUNPTU1BTkRfQUxURVJfVEFCTEVfSU5ERVgJCT0+ICdBTFRFUiBUQUJMRSBJTkRF WCcsCisJQ09NTUFORF9CRUdJTgkJCQkJPT4gJ0JFR0lOJywKKwlDT01NQU5EX0NMT1NFCQkJ CQk9PiAnQ0xPU0UgQ1VSU09SJywKKwlDT01NQU5EX0NPTU1JVAkJCQkJPT4gJ0NPTU1JVCcs CisJQ09NTUFORF9DT1BZCQkJCQk9PiAnQ09QWScsCisJQ09NTUFORF9DT1BZX1RPCQkJCQk9 PiAnQ09QWSBUTycsCisJQ09NTUFORF9DT1BZX0ZST00JCQkJPT4gJ0NPUFkgRlJPTScsCisJ Q09NTUFORF9DUkVBVEVfQUdHUkVHQVRFCQk9PiAnQ1JFQVRFIEFHR1JFR0FURScsCisJQ09N TUFORF9DUkVBVEVfQ09MTEFUSU9OCQk9PiAnQ1JFQVRFIENPTExBVElPTicsCisJQ09NTUFO RF9DUkVBVEVfQ09OVkVSU0lPTgkJPT4gJ0NSRUFURSBDT05WRVJTSU9OJywKKwlDT01NQU5E X0NSRUFURV9EQVRBQkFTRQkJCT0+ICdDUkVBVEUgREFUQUJBU0UnLAorCUNPTU1BTkRfQ1JF QVRFX0lOREVYCQkJPT4gJ0NSRUFURSBJTkRFWCcsCisJQ09NTUFORF9ERUFMTE9DQVRFCQkJ CT0+ICdERUFMTE9DQVRFJywKKwlDT01NQU5EX0RFQ0xBUkVfQ1VSU09SCQkJPT4gJ0RFQ0xB UkUgQ1VSU09SJywKKwlDT01NQU5EX0RPCQkJCQkJPT4gJ0RPJywKKwlDT01NQU5EX0RJU0NB UkRfQUxMCQkJCT0+ICdESVNDQVJEIEFMTCcsCisJQ09NTUFORF9DUkVBVEVfRlVOQ1RJT04J CQk9PiAnQ1JFQVRFIEZVTkNUSU9OJywKKwlDT01NQU5EX0NSRUFURV9ST0xFCQkJCT0+ICdD UkVBVEUgUk9MRScsCisJQ09NTUFORF9DUkVBVEVfU0NIRU1BCQkJPT4gJ0NSRUFURSBTQ0hF TUEnLAorCUNPTU1BTkRfQ1JFQVRFX1RBQkxFCQkJPT4gJ0NSRUFURSBUQUJMRScsCisJQ09N TUFORF9DUkVBVEVfVEFCTEVfQVMJCQk9PiAnQ1JFQVRFIFRBQkxFIEFTJywKKwlDT01NQU5E X0RST1BfREFUQUJBU0UJCQk9PiAnRFJPUCBEQVRBQkFTRScsCisJQ09NTUFORF9EUk9QX1ND SEVNQQkJCQk9PiAnRFJPUCBTQ0hFTUEnLAorCUNPTU1BTkRfRFJPUF9UQUJMRQkJCQk9PiAn RFJPUCBUQUJMRScsCisJQ09NTUFORF9EUk9QX1RBQkxFX0NPTlNUUkFJTlQJPT4gJ0RST1Ag VEFCTEUgQ09OU1RSQUlOVCcsCisJQ09NTUFORF9EUk9QX1RBQkxFX0lOREVYCQk9PiAnRFJP UCBUQUJMRSBJTkRFWCcsCisJQ09NTUFORF9EUk9QX1RBQkxFX1RPQVNUCQk9PiAnRFJPUCBU QUJMRSBUT0FTVCcsCisJQ09NTUFORF9EUk9QX1RBQkxFX1RZUEUJCQk9PiAnRFJPUCBUQUJM RSBUWVBFJywKKwlDT01NQU5EX0VYRUNVVEUJCQkJCT0+ICdFWEVDVVRFJywKKwlDT01NQU5E X0VYRUNVVEVfUkVBRAkJCT0+ICdFWEVDVVRFIFJFQUQnLAorCUNPTU1BTkRfRVhFQ1VURV9X UklURQkJCT0+ICdFWEVDVVRFIFdSSVRFJywKKwlDT01NQU5EX0VYRUNVVEVfRlVOQ1RJT04J CT0+ICdFWEVDVVRFIEZVTkNUSU9OJywKKwlDT01NQU5EX0VYUExBSU4JCQkJCT0+ICdFWFBM QUlOJywKKwlDT01NQU5EX0ZFVENICQkJCQk9PiAnRkVUQ0gnLAorCUNPTU1BTkRfR1JBTlQJ CQkJCT0+ICdHUkFOVCcsCisJQ09NTUFORF9JTlNFUlQJCQkJCT0+ICdJTlNFUlQnLAorCSMg Q09NTUFORF9QQVJBTUVURVIJCQkJPT4gJ1BBUkFNRVRFUicsCisJIyBDT01NQU5EX1BBUkFN RVRFUl9SRUFECQkJPT4gJ1BBUkFNRVRFUl9SRUFEJywKKwkjIENPTU1BTkRfUEFSQU1FVEVS X1dSSVRFCQkJPT4gJ1BBUkFNRVRFUl9XUklURScsCisJQ09NTUFORF9QUkVQQVJFCQkJCQk9 PiAnUFJFUEFSRScsCisJQ09NTUFORF9QUkVQQVJFX1JFQUQJCQk9PiAnUFJFUEFSRSBSRUFE JywKKwlDT01NQU5EX1BSRVBBUkVfV1JJVEUJCQk9PiAnUFJFUEFSRSBXUklURScsCisJQ09N TUFORF9SRVZPS0UJCQkJCT0+ICdSRVZPS0UnLAorCUNPTU1BTkRfU0VMRUNUCQkJCQk9PiAn U0VMRUNUJywKKwlDT01NQU5EX1NFVAkJCQkJCT0+ICdTRVQnLAorCUNPTU1BTkRfVVBEQVRF CQkJCQk9PiAnVVBEQVRFJworfTsKKwordXNlIGNvbnN0YW50Cit7CisJVFlQRQkJCQkJPT4g J1RZUEUnLAorCVRZUEVfTk9ORQkJCQk9PiAnJywKKworCVRZUEVfQUdHUkVHQVRFCQkJPT4g J0FHR1JFR0FURScsCisJVFlQRV9DT0xMQVRJT04JCQk9PiAnQ09MTEFUSU9OJywKKwlUWVBF X0NPTlZFUlNJT04JCQk9PiAnQ09OVkVSU0lPTicsCisJVFlQRV9TQ0hFTUEJCQkJPT4gJ1ND SEVNQScsCisJVFlQRV9GVU5DVElPTgkJCT0+ICdGVU5DVElPTicsCisJVFlQRV9JTkRFWAkJ CQk9PiAnSU5ERVgnLAorCVRZUEVfVEFCTEUJCQkJPT4gJ1RBQkxFJywKKwlUWVBFX1RBQkxF X0NPTFVNTgkJPT4gJ1RBQkxFIENPTFVNTicsCisJVFlQRV9UQUJMRV9DT05TVFJBSU5UCT0+ ICdUQUJMRSBDT05TVFJBSU5UJywKKwlUWVBFX1RBQkxFX1RPQVNUCQk9PiAnVEFCTEUgVE9B U1QnLAorCVRZUEVfVFlQRQkJCQk9PiAnVFlQRScKK307CisKK3VzZSBjb25zdGFudAorewor CU5BTUUJCQk9PiAnTkFNRScKK307CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisj IENvbW1hbmQgbGluZSBwYXJhbWV0ZXJzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwor bXkgJHN0clBnU3FsQmluID0gJy4uLy4uLy4uLy4uL2Jpbi9iaW4nOwkjIFBhdGggb2YgUEcg YmluYXJpZXMgdG8gdXNlIGZvcgorCQkJCQkJCQkJCQkjIHRoaXMgdGVzdAorbXkgJHN0clRl c3RQYXRoID0gJy4uLy4uLy4uLy4uL2RhdGEnOwkJIyBQYXRoIHdoZXJlIHRlc3Rpbmcgd2ls bCBvY2N1cgorbXkgJGlEZWZhdWx0UG9ydCA9IDYwMDA7CQkJCQkjIERlZmF1bHQgcG9ydCB0 byBydW4gUG9zdGdyZXMgb24KK215ICRiSGVscCA9IGZhbHNlOwkJCQkJCQkjIERpc3BsYXkg aGVscAorbXkgJGJRdWlldCA9IGZhbHNlOwkJCQkJCQkjIFN1cHJlc3Mgb3V0cHV0IGV4Y2Vw dCBmb3IgZXJyb3JzCitteSAkYk5vQ2xlYW51cCA9IGZhbHNlOwkJCQkJCSMgQ2xlYW51cCBk YXRhYmFzZSBvbiBleGl0CisKK0dldE9wdGlvbnMgKCdxfHF1aWV0JyA9PiBcJGJRdWlldCwK KwkJCSduby1jbGVhbnVwJyA9PiBcJGJOb0NsZWFudXAsCisJCQknaGVscCcgPT4gXCRiSGVs cCwKKwkJCSdwZ3NxbC1iaW49cycgPT4gXCRzdHJQZ1NxbEJpbiwKKwkJCSd0ZXN0LXBhdGg9 cycgPT4gXCRzdHJUZXN0UGF0aCkKKwlvciBwb2QydXNhZ2UoMik7CisKKyMgRGlzcGxheSB2 ZXJzaW9uIGFuZCBleGl0IGlmIHJlcXVlc3RlZAoraWYgKCRiSGVscCkKK3sKKwlwcmludCAn cGdfYXVkaXQgdW5pdCB0ZXN0XG5cbic7CisJcG9kMnVzYWdlKCk7CisKKwlleGl0IDA7Cit9 CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEdsb2JhbCB2YXJpYWJsZXMKKyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitteSAkaERiOwkJCQkJIyBDb25uZWN0aW9uIHRv IFBvc3RncmVzCitteSAkc3RyTG9nRXhwZWN0ZWQgPSAnJzsJIyBUaGUgZXhwZWN0ZWQgbG9n IGNvbXBhcmVkIHdpdGggZ3JlcHBpbmcgQVVESVQKKwkJCQkJCQkjIGVudHJpZXMgZnJvbSB0 aGUgcG9zdGdyZXMgbG9nLgorCitteSAkc3RyRGF0YWJhc2UgPSAncG9zdGdyZXMnOwkjIENv bm5lY3RlZCBkYXRhYmFzZSAobW9kaWZpZWQgYnkgUGdTZXREYXRhYmFzZSkKK215ICRzdHJV c2VyID0gJ3Bvc3RncmVzJzsJCSMgQ29ubmVjdGVkIHVzZXIgKG1vZGlmaWVkIGJ5IFBnU2V0 VXNlcikKK215ICRzdHJBdWRpdFJvbGUgPSAnYXVkaXQnOwkJIyBSb2xlIHRvIHVzZSBmb3Ig YXVkaXRpbmcKKworbXkgJW9BdWRpdExvZ0hhc2g7CQkJCSMgSGFzaCB0byBzdG9yZSBwZ19h dWRpdC5sb2cgR1VDUworbXkgJW9BdWRpdEdyYW50SGFzaDsJCQkjIEhhc2ggdG8gc3RvcmUg cGdfYXVkaXQgZ3JhbnRzCisKK215ICRzdHJDdXJyZW50QXVkaXRMb2c7CQkjIHBnX2F1ZGl0 LmxvZyBzZXR0aW5nIHdhcyBQb3N0Z3JlcyB3YXMgc3RhcnRlZCB3aXRoCitteSAkc3RyVGVt cG9yYXJ5QXVkaXRMb2c7CSMgcGdfYXVkaXQubG9nIHNldHRpbmcgdGhhdCB3YXMgc2V0IGhv dAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBTdG9yZXMgdGhlIG1hcHBpbmcg YmV0d2VlbiBjb21tYW5kcywgY2xhc3NlcywgYW5kIHR5cGVzCisjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIworbXkgJW9Db21tYW5kSGFzaCA9CisoJkNPTU1BTkRfQU5BTFlaRSA9PiB7 CisJJkNMQVNTID0+ICZDTEFTU19EREwsICZUWVBFID0+ICZUWVBFX05PTkV9LAorCSZDT01N QU5EX0FMVEVSX0FHR1JFR0FURSA9PiB7JkNMQVNTID0+ICZDTEFTU19EREwsCisJCSZUWVBF ID0+ICZUWVBFX0FHR1JFR0FURX0sCisJJkNPTU1BTkRfQUxURVJfREFUQUJBU0UgPT4geyZD TEFTUyA9PiAmQ0xBU1NfRERMLCAmVFlQRSA9PiAmVFlQRV9OT05FfSwKKwkmQ09NTUFORF9B TFRFUl9DT0xMQVRJT04gPT4geyZDTEFTUyA9PiAmQ0xBU1NfRERMLAorCQkmVFlQRSA9PiAm VFlQRV9DT0xMQVRJT059LAorCSZDT01NQU5EX0FMVEVSX0NPTlZFUlNJT04gPT4geyZDTEFT UyA9PiAmQ0xBU1NfRERMLAorCQkmVFlQRSA9PiAmVFlQRV9DT05WRVJTSU9OfSwKKwkmQ09N TUFORF9BTFRFUl9ST0xFID0+IHsmQ0xBU1MgPT4gJkNMQVNTX0RETCwgJlRZUEUgPT4gJlRZ UEVfTk9ORX0sCisJJkNPTU1BTkRfQUxURVJfUk9MRV9TRVQgPT4geyZDTEFTUyA9PiAmQ0xB U1NfRERMLCAmVFlQRSA9PiAmVFlQRV9OT05FLAorCQkmQ09NTUFORCA9PiAmQ09NTUFORF9B TFRFUl9ST0xFfSwKKwkmQ09NTUFORF9BTFRFUl9UQUJMRSA9PiB7JkNMQVNTID0+ICZDTEFT U19EREwsICZUWVBFID0+ICZUWVBFX1RBQkxFfSwKKwkmQ09NTUFORF9BTFRFUl9UQUJMRV9D T0xVTU4gPT4geyZDTEFTUyA9PiAmQ0xBU1NfRERMLAorCQkmVFlQRSA9PiAmVFlQRV9UQUJM RV9DT0xVTU4sICZDT01NQU5EID0+ICZDT01NQU5EX0FMVEVSX1RBQkxFfSwKKwkmQ09NTUFO RF9BTFRFUl9UQUJMRV9JTkRFWCA9PiB7JkNMQVNTID0+ICZDTEFTU19EREwsICZUWVBFID0+ ICZUWVBFX0lOREVYLAorCQkmQ09NTUFORCA9PiAmQ09NTUFORF9BTFRFUl9UQUJMRX0sCisJ JkNPTU1BTkRfQkVHSU4gPT4geyZDTEFTUyA9PiAmQ0xBU1NfTUlTQywgJlRZUEUgPT4gJlRZ UEVfTk9ORX0sCisJJkNPTU1BTkRfQ0xPU0UgPT4geyZDTEFTUyA9PiAmQ0xBU1NfTUlTQywg JlRZUEUgPT4gJlRZUEVfTk9ORX0sCisJJkNPTU1BTkRfQ09NTUlUID0+IHsmQ0xBU1MgPT4g JkNMQVNTX01JU0MsICZUWVBFID0+ICZUWVBFX05PTkV9LAorCSZDT01NQU5EX0NPUFlfRlJP TSA9PiB7JkNMQVNTID0+ICZDTEFTU19XUklURSwgJlRZUEUgPT4gJlRZUEVfTk9ORSwKKwkJ JkNPTU1BTkQgPT4gJkNPTU1BTkRfQ09QWX0sCisJJkNPTU1BTkRfQ09QWV9UTyA9PiB7JkNM QVNTID0+ICZDTEFTU19SRUFELCAmVFlQRSA9PiAmVFlQRV9OT05FLAorCQkmQ09NTUFORCA9 PiAmQ09NTUFORF9DT1BZfSwKKwkmQ09NTUFORF9DUkVBVEVfQUdHUkVHQVRFID0+IHsmQ0xB U1MgPT4gJkNMQVNTX0RETCwKKwkJJlRZUEUgPT4gJlRZUEVfQUdHUkVHQVRFfSwKKwkmQ09N TUFORF9DUkVBVEVfQ09OVkVSU0lPTiA9PiB7JkNMQVNTID0+ICZDTEFTU19EREwsCisJCSZU WVBFID0+ICZUWVBFX0NPTlZFUlNJT059LAorCSZDT01NQU5EX0NSRUFURV9DT0xMQVRJT04g PT4geyZDTEFTUyA9PiAmQ0xBU1NfRERMLAorCQkmVFlQRSA9PiAmVFlQRV9DT0xMQVRJT059 LAorCSZDT01NQU5EX0NSRUFURV9EQVRBQkFTRSA9PiB7JkNMQVNTID0+ICZDTEFTU19EREws ICZUWVBFID0+ICZUWVBFX05PTkV9LAorCSZDT01NQU5EX0NSRUFURV9JTkRFWCA9PiB7JkNM QVNTID0+ICZDTEFTU19EREwsICZUWVBFID0+ICZUWVBFX0lOREVYfSwKKwkmQ09NTUFORF9E RUFMTE9DQVRFID0+IHsmQ0xBU1MgPT4gJkNMQVNTX01JU0MsICZUWVBFID0+ICZUWVBFX05P TkV9LAorCSZDT01NQU5EX0RFQ0xBUkVfQ1VSU09SID0+IHsmQ0xBU1MgPT4gJkNMQVNTX1JF QUQsICZUWVBFID0+ICZUWVBFX05PTkV9LAorCSZDT01NQU5EX0RPID0+IHsmQ0xBU1MgPT4g JkNMQVNTX0ZVTkNUSU9OLCAmVFlQRSA9PiAmVFlQRV9OT05FfSwKKwkmQ09NTUFORF9ESVND QVJEX0FMTCA9PiB7JkNMQVNTID0+ICZDTEFTU19NSVNDLCAmVFlQRSA9PiAmVFlQRV9OT05F fSwKKwkmQ09NTUFORF9DUkVBVEVfRlVOQ1RJT04gPT4geyZDTEFTUyA9PiAmQ0xBU1NfRERM LCAmVFlQRSA9PiAmVFlQRV9GVU5DVElPTn0sCisJJkNPTU1BTkRfQ1JFQVRFX1JPTEUgPT4g eyZDTEFTUyA9PiAmQ0xBU1NfRERMLCAmVFlQRSA9PiAmVFlQRV9OT05FfSwKKwkmQ09NTUFO RF9DUkVBVEVfU0NIRU1BID0+IHsmQ0xBU1MgPT4gJkNMQVNTX0RETCwgJlRZUEUgPT4gJlRZ UEVfU0NIRU1BfSwKKwkmQ09NTUFORF9DUkVBVEVfVEFCTEUgPT4geyZDTEFTUyA9PiAmQ0xB U1NfRERMLCAmVFlQRSA9PiAmVFlQRV9UQUJMRX0sCisJJkNPTU1BTkRfQ1JFQVRFX1RBQkxF X0FTID0+IHsmQ0xBU1MgPT4gJkNMQVNTX0RETCwgJlRZUEUgPT4gJlRZUEVfVEFCTEV9LAor CSZDT01NQU5EX0RST1BfREFUQUJBU0UgPT4geyZDTEFTUyA9PiAmQ0xBU1NfRERMLCAmVFlQ RSA9PiAmVFlQRV9OT05FfSwKKwkmQ09NTUFORF9EUk9QX1NDSEVNQSA9PiB7JkNMQVNTID0+ ICZDTEFTU19EREwsICZUWVBFID0+ICZUWVBFX05PTkV9LAorCSZDT01NQU5EX0RST1BfVEFC TEUgPT4geyZDTEFTUyA9PiAmQ0xBU1NfRERMLCAmVFlQRSA9PiAmVFlQRV9UQUJMRX0sCisJ JkNPTU1BTkRfRFJPUF9UQUJMRV9DT05TVFJBSU5UID0+IHsmQ0xBU1MgPT4gJkNMQVNTX0RE TCwKKwkJJlRZUEUgPT4gJlRZUEVfVEFCTEVfQ09OU1RSQUlOVCwgJkNPTU1BTkQgPT4gJkNP TU1BTkRfRFJPUF9UQUJMRX0sCisJJkNPTU1BTkRfRFJPUF9UQUJMRV9JTkRFWCA9PiB7JkNM QVNTID0+ICZDTEFTU19EREwsICZUWVBFID0+ICZUWVBFX0lOREVYLAorCQkmQ09NTUFORCA9 PiAmQ09NTUFORF9EUk9QX1RBQkxFfSwKKwkmQ09NTUFORF9EUk9QX1RBQkxFX1RPQVNUID0+ IHsmQ0xBU1MgPT4gJkNMQVNTX0RETCwKKwkJJlRZUEUgPT4gJlRZUEVfVEFCTEVfVE9BU1Qs ICZDT01NQU5EID0+ICZDT01NQU5EX0RST1BfVEFCTEV9LAorCSZDT01NQU5EX0RST1BfVEFC TEVfVFlQRSA9PiB7JkNMQVNTID0+ICZDTEFTU19EREwsICZUWVBFID0+ICZUWVBFX1RZUEUs CisJCSZDT01NQU5EID0+ICZDT01NQU5EX0RST1BfVEFCTEV9LAorCSZDT01NQU5EX0VYRUNV VEVfUkVBRCA9PiB7JkNMQVNTID0+ICZDTEFTU19SRUFELCAmVFlQRSA9PiAmVFlQRV9OT05F LAorCQkmQ09NTUFORCA9PiAmQ09NTUFORF9FWEVDVVRFfSwKKwkmQ09NTUFORF9FWEVDVVRF X1dSSVRFID0+IHsmQ0xBU1MgPT4gJkNMQVNTX1dSSVRFLCAmVFlQRSA9PiAmVFlQRV9OT05F LAorCQkmQ09NTUFORCA9PiAmQ09NTUFORF9FWEVDVVRFfSwKKwkmQ09NTUFORF9FWEVDVVRF X0ZVTkNUSU9OID0+IHsmQ0xBU1MgPT4gJkNMQVNTX0ZVTkNUSU9OLAorCQkmVFlQRSA9PiAm VFlQRV9GVU5DVElPTiwgJkNPTU1BTkQgPT4gJkNPTU1BTkRfRVhFQ1VURX0sCisJJkNPTU1B TkRfRVhQTEFJTiA9PiB7JkNMQVNTID0+ICZDTEFTU19NSVNDLCAmVFlQRSA9PiAmVFlQRV9O T05FfSwKKwkmQ09NTUFORF9GRVRDSCA9PiB7JkNMQVNTID0+ICZDTEFTU19NSVNDLCAmVFlQ RSA9PiAmVFlQRV9OT05FfSwKKwkmQ09NTUFORF9HUkFOVCA9PiB7JkNMQVNTID0+ICZDTEFT U19EREwsICZUWVBFID0+ICZUWVBFX1RBQkxFfSwKKwkmQ09NTUFORF9QUkVQQVJFX1JFQUQg PT4geyZDTEFTUyA9PiAmQ0xBU1NfUkVBRCwgJlRZUEUgPT4gJlRZUEVfTk9ORSwKKwkJJkNP TU1BTkQgPT4gJkNPTU1BTkRfUFJFUEFSRX0sCisJJkNPTU1BTkRfUFJFUEFSRV9XUklURSA9 PiB7JkNMQVNTID0+ICZDTEFTU19XUklURSwgJlRZUEUgPT4gJlRZUEVfTk9ORSwKKwkJJkNP TU1BTkQgPT4gJkNPTU1BTkRfUFJFUEFSRX0sCisJJkNPTU1BTkRfSU5TRVJUID0+IHsmQ0xB U1MgPT4gJkNMQVNTX1dSSVRFLCAmVFlQRSA9PiAmVFlQRV9OT05FfSwKKwkmQ09NTUFORF9S RVZPS0UgPT4geyZDTEFTUyA9PiAmQ0xBU1NfRERMLCAmVFlQRSA9PiAmVFlQRV9UQUJMRX0s CisJJkNPTU1BTkRfU0VMRUNUID0+IHsmQ0xBU1MgPT4gJkNMQVNTX1JFQUQsICZUWVBFID0+ ICZUWVBFX05PTkV9LAorCSZDT01NQU5EX1NFVCA9PiB7JkNMQVNTID0+ICZDTEFTU19NSVND LCAmVFlQRSA9PiAmVFlQRV9OT05FfSwKKwkmQ09NTUFORF9VUERBVEUgPT4geyZDTEFTUyA9 PiAmQ0xBU1NfV1JJVEUsICZUWVBFID0+ICZUWVBFX05PTkV9CispOworCisjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIworIyBDb21tYW5kRXhlY3V0ZQorIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMKK3N1YiBDb21tYW5kRXhlY3V0ZQoreworCW15ICRzdHJDb21tYW5kID0gc2hp ZnQ7CisJbXkgJGJTdXBwcmVzc0Vycm9yID0gc2hpZnQ7CisKKwkjIFNldCBkZWZhdWx0CisJ JGJTdXBwcmVzc0Vycm9yID0gZGVmaW5lZCgkYlN1cHByZXNzRXJyb3IpID8gJGJTdXBwcmVz c0Vycm9yIDogZmFsc2U7CisKKwkjIFJ1biB0aGUgY29tbWFuZAorCW15ICRpUmVzdWx0ID0g c3lzdGVtKCRzdHJDb21tYW5kKTsKKworCWlmICgkaVJlc3VsdCAhPSAwICYmICEkYlN1cHBy ZXNzRXJyb3IpCisJeworCQljb25mZXNzICJjb21tYW5kICcke3N0ckNvbW1hbmR9JyBmYWls ZWQgd2l0aCBlcnJvciAke2lSZXN1bHR9IjsKKwl9Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjCisjIGxvZworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3N1YiBsb2cK K3sKKwlteSAkc3RyTWVzc2FnZSA9IHNoaWZ0OworCW15ICRiRXJyb3IgPSBzaGlmdDsKKwor CSMgU2V0IGRlZmF1bHQKKwkkYkVycm9yID0gZGVmaW5lZCgkYkVycm9yKSA/ICRiRXJyb3Ig OiBmYWxzZTsKKworCWlmICghJGJRdWlldCkKKwl7CisJCXByaW50ICIke3N0ck1lc3NhZ2V9 XG4iOworCX0KKworCWlmICgkYkVycm9yKQorCXsKKwkJZXhpdCAxOworCX0KK30KKworIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQXJyYXlUb1N0cmluZworIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKK3N1YiBBcnJheVRvU3RyaW5nCit7CisJbXkgQHN0cnlBcnJheSA9 IEBfOworCisJbXkgJHN0clJlc3VsdCA9ICcnOworCisJZm9yIChteSAkaUluZGV4ID0gMDsg JGlJbmRleCA8IEBzdHJ5QXJyYXk7ICRpSW5kZXgrKykKKwl7CisJCWlmICgkaUluZGV4ICE9 IDApCisJCXsKKwkJCSRzdHJSZXN1bHQgLj0gJywgJzsKKwkJfQorCisJCSRzdHJSZXN1bHQg Lj0gJHN0cnlBcnJheVskaUluZGV4XTsKKwl9CisKKwlyZXR1cm4gJHN0clJlc3VsdDsKK30K KworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQnVpbGRNb2R1bGUKKyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjCitzdWIgQnVpbGRNb2R1bGUKK3sKKwljYXB0dXJlKCdjZCAu LjttYWtlJyk7CisJQ29tbWFuZEV4ZWN1dGUoImNwIC4uL3BnX2F1ZGl0LnNvIiAuCisJCQkJ ICAgIiAke3N0clBnU3FsQmlufS8uLi9saWIvcG9zdGdyZXNxbCIpOworCUNvbW1hbmRFeGVj dXRlKCJjcCAuLi9wZ19hdWRpdC5jb250cm9sIiAuCisJCQkJICAgIiAke3N0clBnU3FsQmlu fS8uLi9zaGFyZS9wb3N0Z3Jlc3FsL2V4dGVuc2lvbiIpOworCUNvbW1hbmRFeGVjdXRlKCJj cCAuLi9wZ19hdWRpdC0tMS4wLjAuc3FsIiAuCisJCQkJICAgIiAke3N0clBnU3FsQmlufS8u Li9zaGFyZS9wb3N0Z3Jlc3FsL2V4dGVuc2lvbiIpOworfQorCisjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIworIyBQZ0Nvbm5lY3QKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitz dWIgUGdDb25uZWN0Cit7CisJbXkgJGlQb3J0ID0gc2hpZnQ7CisKKwkjIFNldCBkZWZhdWx0 CisJJGlQb3J0ID0gZGVmaW5lZCgkaVBvcnQpID8gJGlQb3J0IDogJGlEZWZhdWx0UG9ydDsK KworCSMgTG9nIENvbm5lY3Rpb24KKwkmbG9nKCIgICBEQjogY29ubmVjdCB1c2VyICR7c3Ry VXNlcn0sIGRhdGFiYXNlICR7c3RyRGF0YWJhc2V9Iik7CisKKwkjIERpc2Nvbm5lY3QgdXNl ciBzZXNzaW9uCisJUGdEaXNjb25uZWN0KCk7CisKKwkjIENvbm5lY3QgdG8gdGhlIGRiCisJ JGhEYiA9IERCSS0+Y29ubmVjdCgiZGJpOlBnOmRibmFtZT0ke3N0ckRhdGFiYXNlfTtwb3J0 PSR7aVBvcnR9O2hvc3Q9L3RtcCIsCisJCQkJCQkkc3RyVXNlciwgdW5kZWYsCisJCQkJCQl7 QXV0b0NvbW1pdCA9PiAxLCBSYWlzZUVycm9yID0+IDF9KTsKK30KKworIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKKyMgUGdEaXNjb25uZWN0CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIworc3ViIFBnRGlzY29ubmVjdAoreworCSMgQ29ubmVjdCB0byB0aGUgZGIgKHdoZXRo ZXIgaXQgaXMgbG9jYWwgb3IgcmVtb3RlKQorCWlmIChkZWZpbmVkKCRoRGIpKQorCXsKKwkJ JGhEYi0+ZGlzY29ubmVjdDsKKwkJdW5kZWYoJGhEYik7CisJfQorfQorCisjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIworIyBQZ0V4ZWN1dGUKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCitzdWIgUGdFeGVjdXRlCit7CisJbXkgJHN0clNxbCA9IHNoaWZ0OworCisJIyBMb2cg dGhlIHN0YXRlbWVudAorCSZsb2coIiAgU1FMOiAke3N0clNxbH0iKTsKKworCSMgRXhlY3V0 ZSB0aGUgc3RhdGVtZW50CisJbXkgJGhTdGF0ZW1lbnQgPSAkaERiLT5wcmVwYXJlKCRzdHJT cWwpOworCisJJGhTdGF0ZW1lbnQtPmV4ZWN1dGUoKTsKKwkkaFN0YXRlbWVudC0+ZmluaXNo KCk7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFBnRXhlY3V0ZU9ubHkK KyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitzdWIgUGdFeGVjdXRlT25seQoreworCW15 ICRzdHJTcWwgPSBzaGlmdDsKKworCSMgTG9nIHRoZSBzdGF0ZW1lbnQKKwkmbG9nKCIgIFNR TDogJHtzdHJTcWx9Iik7CisKKwkjIEV4ZWN1dGUgdGhlIHN0YXRlbWVudAorCSRoRGItPmRv KCRzdHJTcWwpOworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBQZ1NldERh dGFiYXNlCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworc3ViIFBnU2V0RGF0YWJhc2UK K3sKKwlteSAkc3RyRGF0YWJhc2VQYXJhbSA9IHNoaWZ0OworCisJIyBTdG9wIGFuZCBzdGFy dCB0aGUgZGF0YWJhc2UgdG8gcmVzZXQgcGdjb25mIGVudHJpZXMKKwlQZ1N0b3AoKTsKKwlQ Z1N0YXJ0KCk7CisKKwkjIEV4ZWN1dGUgdGhlIHN0YXRlbWVudAorCSRzdHJEYXRhYmFzZSA9 ICRzdHJEYXRhYmFzZVBhcmFtOworCVBnQ29ubmVjdCgpOworfQorCisjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIworIyBQZ1NldFVzZXIKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj CitzdWIgUGdTZXRVc2VyCit7CisJbXkgJHN0clVzZXJQYXJhbSA9IHNoaWZ0OworCisJJHN0 clVzZXIgPSAkc3RyVXNlclBhcmFtOworCisJIyBTdG9wIGFuZCBzdGFydCB0aGUgZGF0YWJh c2UgdG8gcmVzZXQgcGdjb25mIGVudHJpZXMKKwlpZiAoKGRlZmluZWQoJHN0clRlbXBvcmFy eUF1ZGl0TG9nKSAmJiAhZGVmaW5lZCgkc3RyQ3VycmVudEF1ZGl0TG9nKSkgfHwKKwkJKGRl ZmluZWQoJHN0ckN1cnJlbnRBdWRpdExvZykgJiYgIWRlZmluZWQoJHN0clRlbXBvcmFyeUF1 ZGl0TG9nKSkgfHwKKwkJJHN0ckN1cnJlbnRBdWRpdExvZyBuZSAkc3RyVGVtcG9yYXJ5QXVk aXRMb2cpCisJeworCQkkc3RyQ3VycmVudEF1ZGl0TG9nID0gJHN0clRlbXBvcmFyeUF1ZGl0 TG9nOworCisJCVBnU3RvcCgpOworCQlQZ1N0YXJ0KCk7CisJfQorCWVsc2UKKwl7CisJCSMg RXhlY3V0ZSB0aGUgc3RhdGVtZW50CisJCVBnQ29ubmVjdCgpOworCX0KK30KKworIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU2F2ZVN0cmluZworIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMKK3N1YiBTYXZlU3RyaW5nCit7CisJbXkgJHN0ckZpbGUgPSBzaGlmdDsKKwlt eSAkc3RyU3RyaW5nID0gc2hpZnQ7CisKKwkjIE9wZW4gdGhlIGZpbGUgZm9yIHdyaXRpbmcK KwlteSAkaEZpbGU7CisKKwlvcGVuKCRoRmlsZSwgJz4nLCAkc3RyRmlsZSkKKwkJb3IgY29u ZmVzcyAidW5hYmxlIHRvIG9wZW4gJHtzdHJGaWxlfSI7CisKKwlpZiAoJHN0clN0cmluZyBu ZSAnJykKKwl7CisJCXN5c3dyaXRlKCRoRmlsZSwgJHN0clN0cmluZykKKwkJCW9yIGNvbmZl c3MgInVuYWJsZSB0byB3cml0ZSB0byAke3N0ckZpbGV9OiAkISI7CisJfQorCisJY2xvc2Uo JGhGaWxlKTsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUGdMb2dFeGVj dXRlCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworc3ViIFBnTG9nRXhlY3V0ZQorewor CW15ICRzdHJDb21tYW5kID0gc2hpZnQ7CisJbXkgJHN0clNxbCA9IHNoaWZ0OworCW15ICRv RGF0YSA9IHNoaWZ0OworCW15ICRiRXhlY3V0ZSA9IHNoaWZ0OworCW15ICRiV2FpdCA9IHNo aWZ0OworCW15ICRiTG9nU3FsID0gc2hpZnQ7CisJbXkgJHN0clBhcmFtZXRlciA9IHNoaWZ0 OworCW15ICRiRXhwZWN0RXJyb3IgPSBzaGlmdDsKKworCSMgU2V0IGRlZmF1bHRzCisJJGJF eGVjdXRlID0gZGVmaW5lZCgkYkV4ZWN1dGUpID8gJGJFeGVjdXRlIDogdHJ1ZTsKKwkkYldh aXQgPSBkZWZpbmVkKCRiV2FpdCkgPyAkYldhaXQgOiB0cnVlOworCSRiTG9nU3FsID0gZGVm aW5lZCgkYkxvZ1NxbCkgPyAkYkxvZ1NxbCA6IHRydWU7CisKKwlpZiAoJGJFeGVjdXRlKQor CXsKKwkJZXZhbAorCQl7CisJCQlQZ0V4ZWN1dGVPbmx5KCRzdHJTcWwpOworCQl9OworCisJ CWlmICgkQCAmJiAhJGJFeHBlY3RFcnJvcikKKwkJeworCQkJY29uZmVzcyAkQDsKKwkJfQor CX0KKworCVBnTG9nRXhwZWN0KCRzdHJDb21tYW5kLCAkYkxvZ1NxbCA/ICRzdHJTcWwgOiAn JywgJHN0clBhcmFtZXRlciwgJG9EYXRhKTsKKworCWlmICgkYldhaXQpCisJeworCQlQZ0xv Z1dhaXQoKTsKKwl9Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFF1b3Rl Q1NWCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworc3ViIFF1b3RlQ1NWCit7CisJbXkg JHN0ckNTViA9IHNoaWZ0OworCisJaWYgKGRlZmluZWQoJHN0ckNTVikgJiYKKwkJKGluZGV4 KCRzdHJDU1YsICcsJykgPj0gMCB8fCBpbmRleCgkc3RyQ1NWLCAnIicpID4gMCB8fAorCQkg aW5kZXgoJHN0ckNTViwgIlxuIikgPiAwIHx8IGluZGV4KCRzdHJDU1YsICJcciIpID49IDAp KQorCXsKKwkJJHN0ckNTViA9fiBzLyIvIiIvZzsKKwkJJHN0ckNTViA9ICJcIiR7c3RyQ1NW fVwiIjsKKwl9CisKKwlyZXR1cm4gJHN0ckNTVjsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMKKyMgUGdMb2dFeHBlY3QKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitz dWIgUGdMb2dFeHBlY3QKK3sKKwlteSAkc3RyQ29tbWFuZCA9IHNoaWZ0OworCW15ICRzdHJT cWwgPSBzaGlmdDsKKwlteSAkc3RyUGFyYW1ldGVyID0gc2hpZnQ7CisJbXkgJG9EYXRhID0g c2hpZnQ7CisKKwkjIElmIG9EYXRhIGlzIGZhbHNlIHRoZW4gbm8gbG9nZ2luZworCWlmIChk ZWZpbmVkKCRvRGF0YSkgJiYgcmVmKCRvRGF0YSkgZXEgJycgJiYgISRvRGF0YSkKKwl7CisJ CXJldHVybjsKKwl9CisKKwkjIFF1b3RlIFNRTCBpZiBuZWVkcyB0byBiZSBxdW90ZWQKKwkk c3RyU3FsID0gUXVvdGVDU1YoJHN0clNxbCk7CisKKwlpZiAoZGVmaW5lZCgkc3RyUGFyYW1l dGVyKSkKKwl7CisJCSRzdHJTcWwgLj0gIiwke3N0clBhcmFtZXRlcn0iOworCX0KKworCSMg TG9nIGJhc2VkIG9uIHNlc3Npb24KKwlpZiAoUGdTaG91bGRMb2coJHN0ckNvbW1hbmQpKQor CXsKKwkJIyBNYWtlIHN1cmUgY2xhc3MgaXMgZGVmaW5lZAorCQlteSAkc3RyQ2xhc3MgPSAk b0NvbW1hbmRIYXNoeyRzdHJDb21tYW5kfXsmQ0xBU1N9OworCisJCWlmICghZGVmaW5lZCgk c3RyQ2xhc3MpKQorCQl7CisJCQljb25mZXNzICJjbGFzcyBpcyBub3QgZGVmaW5lZCBmb3Ig Y29tbWFuZCAke3N0ckNvbW1hbmR9IjsKKwkJfQorCisJCSMgTWFrZSBzdXJlIG9iamVjdCB0 eXBlIGlzIGRlZmluZWQKKwkJbXkgJHN0ck9iamVjdFR5cGUgPSAkb0NvbW1hbmRIYXNoeyRz dHJDb21tYW5kfXsmVFlQRX07CisKKwkJaWYgKCFkZWZpbmVkKCRzdHJPYmplY3RUeXBlKSkK KwkJeworCQkJY29uZmVzcyAib2JqZWN0IHR5cGUgaXMgbm90IGRlZmluZWQgZm9yIGNvbW1h bmQgJHtzdHJDb21tYW5kfSI7CisJCX0KKworCQkjIENoZWNrIGZvciBjb21tYW5kIG92ZXJy aWRlCisJCW15ICRzdHJDb21tYW5kTG9nID0gJHN0ckNvbW1hbmQ7CisKKwkJaWYgKCRvQ29t bWFuZEhhc2h7JHN0ckNvbW1hbmR9eyZDT01NQU5EfSkKKwkJeworCQkJJHN0ckNvbW1hbmRM b2cgPSAkb0NvbW1hbmRIYXNoeyRzdHJDb21tYW5kfXsmQ09NTUFORH07CisJCX0KKworCQlt eSAkc3RyT2JqZWN0TmFtZSA9ICcnOworCisJCWlmIChkZWZpbmVkKCRvRGF0YSkgJiYgcmVm KCRvRGF0YSkgbmUgJ0FSUkFZJykKKwkJeworCQkJJHN0ck9iamVjdE5hbWUgPSBRdW90ZUNT Vigkb0RhdGEpOworCQl9CisKKwkJbXkgJHN0ckxvZyAuPSAiU0VTU0lPTiwke3N0ckNsYXNz fSwke3N0ckNvbW1hbmRMb2d9LCIgLgorCQkJCQkgICIke3N0ck9iamVjdFR5cGV9LCR7c3Ry T2JqZWN0TmFtZX0sJHtzdHJTcWx9IjsKKwkJJmxvZygiQVVESVQ6ICR7c3RyTG9nfSIpOwor CisJCSRzdHJMb2dFeHBlY3RlZCAuPSAiJHtzdHJMb2d9XG4iOworCX0KKworCSMgTG9nIGJh c2VkIG9uIGdyYW50cworCWlmIChyZWYoJG9EYXRhKSBlcSAnQVJSQVknICYmICgkc3RyQ29t bWFuZCBlcSBDT01NQU5EX1NFTEVDVCB8fAorCQkkb0NvbW1hbmRIYXNoeyRzdHJDb21tYW5k fXsmQ0xBU1N9IGVxIENMQVNTX1dSSVRFKSkKKwl7CisJCWZvcmVhY2ggbXkgJG9UYWJsZUhh c2ggKEB7JG9EYXRhfSkKKwkJeworCQkJbXkgJHN0ck9iamVjdE5hbWUgPSBRdW90ZUNTVigk eyRvVGFibGVIYXNofXsmTkFNRX0pOworCQkJbXkgJHN0ckNvbW1hbmRMb2cgPSAkeyRvVGFi bGVIYXNofXsmQ09NTUFORH07CisKKwkJCWlmIChkZWZpbmVkKCRvQXVkaXRHcmFudEhhc2h7 JHN0ckF1ZGl0Um9sZX0KKwkJCQkJCQkJCQl7JHN0ck9iamVjdE5hbWV9eyRzdHJDb21tYW5k TG9nfSkpCisJCQl7CisJCQkJbXkgJHN0ckNvbW1hbmRMb2cgPSBkZWZpbmVkKCR7JG9UYWJs ZUhhc2h9eyZDT01NQU5EX0xPR30pID8KKwkJCQkJJHskb1RhYmxlSGFzaH17JkNPTU1BTkRf TE9HfSA6ICRzdHJDb21tYW5kTG9nOworCQkJCW15ICRzdHJDbGFzcyA9ICRvQ29tbWFuZEhh c2h7JHN0ckNvbW1hbmRMb2d9eyZDTEFTU307CisJCQkJbXkgJHN0ck9iamVjdFR5cGUgPSAk eyRvVGFibGVIYXNofXsmVFlQRX07CisKKwkJCQlteSAkc3RyTG9nIC49ICJPQkpFQ1QsJHtz dHJDbGFzc30sJHtzdHJDb21tYW5kTG9nfSwiIC4KKwkJCQkJCQkgICIke3N0ck9iamVjdFR5 cGV9LCR7c3RyT2JqZWN0TmFtZX0sJHtzdHJTcWx9IjsKKwkJCQkmbG9nKCJBVURJVDogJHtz dHJMb2d9Iik7CisKKwkJCQkkc3RyTG9nRXhwZWN0ZWQgLj0gIiR7c3RyTG9nfVxuIjsKKwkJ CX0KKwkJfQorCisJCSRvRGF0YSA9IHVuZGVmOworCX0KK30KKworIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMKKyMgUGdTaG91bGRMb2cKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj CitzdWIgUGdTaG91bGRMb2cKK3sKKwlteSAkc3RyQ29tbWFuZCA9IHNoaWZ0OworCisJIyBN YWtlIHN1cmUgY2xhc3MgaXMgZGVmaW5lZAorCW15ICRzdHJDbGFzcyA9ICRvQ29tbWFuZEhh c2h7JHN0ckNvbW1hbmR9eyZDTEFTU307CisKKwlpZiAoIWRlZmluZWQoJHN0ckNsYXNzKSkK Kwl7CisJCWNvbmZlc3MgImNsYXNzIGlzIG5vdCBkZWZpbmVkIGZvciBjb21tYW5kICR7c3Ry Q29tbWFuZH0iOworCX0KKworCSMgQ2hlY2sgbG9nZ2luZyBmb3IgdGhlIHJvbGUKKwlteSAk YkxvZyA9IHVuZGVmOworCisJaWYgKGRlZmluZWQoJG9BdWRpdExvZ0hhc2h7JkNPTlRFWFRf Uk9MRX17JHN0clVzZXJ9KSkKKwl7CisJCSRiTG9nID0gJG9BdWRpdExvZ0hhc2h7JkNPTlRF WFRfUk9MRX17JHN0clVzZXJ9eyRzdHJDbGFzc307CisJfQorCisJIyBFbHNlIGNoZWNrIGxv Z2dpbmcgZm9yIHRoZSBkYgorCWVsc2lmIChkZWZpbmVkKCRvQXVkaXRMb2dIYXNoeyZDT05U RVhUX0RBVEFCQVNFfXskc3RyRGF0YWJhc2V9KSkKKwl7CisJCSRiTG9nID0gJG9BdWRpdExv Z0hhc2h7JkNPTlRFWFRfREFUQUJBU0V9eyRzdHJEYXRhYmFzZX17JHN0ckNsYXNzfTsKKwl9 CisKKwkjIEVsc2UgY2hlY2sgbG9nZ2luZyBmb3IgZ2xvYmFsCisJZWxzaWYgKGRlZmluZWQo JG9BdWRpdExvZ0hhc2h7JkNPTlRFWFRfR0xPQkFMfXsmQ09OVEVYVF9HTE9CQUx9KSkKKwl7 CisJCSRiTG9nID0gJG9BdWRpdExvZ0hhc2h7JkNPTlRFWFRfR0xPQkFMfXsmQ09OVEVYVF9H TE9CQUx9eyRzdHJDbGFzc307CisJfQorCisJcmV0dXJuIGRlZmluZWQoJGJMb2cpID8gdHJ1 ZSA6IGZhbHNlOworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBQZ0xvZ1dh aXQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitzdWIgUGdMb2dXYWl0Cit7CisJbXkg JHN0ckxvZ0FjdHVhbDsKKworCSMgUnVuIGluIGFuIGV2YWwgYmxvY2sgc2luY2UgZ3JlcCBy ZXR1cm5zIDEgd2hlbiBub3RoaW5nIHdhcyBmb3VuZAorCWV2YWwKKwl7CisJCSRzdHJMb2dB Y3R1YWwgPSBjYXB0dXJlKCJncmVwICdMT0c6ICBBVURJVDogJyIgLgorCQkJCQkJCQkiICR7 c3RyVGVzdFBhdGh9L3Bvc3RncmVzcWwubG9nIik7CisJfTsKKworCSMgSWYgYW4gZXJyb3Ig d2FzIHJldHVybmVkLCBjb250aW51ZSBpZiBpdCB3YXMgMSwgb3RoZXJ3aXNlIGNvbmZlc3MK KwlpZiAoJEApCisJeworCQlteSAkaUV4aXRTdGF0dXMgPSAkPyA+PiA4OworCisJCWlmICgk aUV4aXRTdGF0dXMgIT0gMSkKKwkJeworCQkJY29uZmVzcyAiZ3JlcCByZXR1cm5lZCAke2lF eGl0U3RhdHVzfSI7CisJCX0KKworCQkkc3RyTG9nQWN0dWFsID0gJyc7CisJfQorCisJIyBT dHJpcCB0aGUgQVVESVQgYW5kIHRpbWVzdGFtcCBmcm9tIHRoZSBhY3R1YWwgbG9nCisJJHN0 ckxvZ0FjdHVhbCA9fiBzL3ByZWZpeCBMT0c6ICBBVURJVFw6IC8vZzsKKwkkc3RyTG9nQWN0 dWFsID1+IHMvU0VTU0lPTixbMC05XSssWzAtOV0rLC9TRVNTSU9OLC9nOworCSRzdHJMb2dB Y3R1YWwgPX4gcy9PQkpFQ1QsWzAtOV0rLFswLTldKywvT0JKRUNULC9nOworCisJIyBTYXZl IHRoZSBsb2dzCisJU2F2ZVN0cmluZygiJHtzdHJUZXN0UGF0aH0vYXVkaXQuYWN0dWFsIiwg JHN0ckxvZ0FjdHVhbCk7CisJU2F2ZVN0cmluZygiJHtzdHJUZXN0UGF0aH0vYXVkaXQuZXhw ZWN0ZWQiLCAkc3RyTG9nRXhwZWN0ZWQpOworCisJQ29tbWFuZEV4ZWN1dGUoImRpZmYgJHtz dHJUZXN0UGF0aH0vYXVkaXQuZXhwZWN0ZWQiIC4KKwkJCQkgICAiICR7c3RyVGVzdFBhdGh9 L2F1ZGl0LmFjdHVhbCIpOworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBQ Z0Ryb3AKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitzdWIgUGdEcm9wCit7CisJbXkg JHN0clBhdGggPSBzaGlmdDsKKworCSMgU2V0IGRlZmF1bHQKKwkkc3RyUGF0aCA9IGRlZmlu ZWQoJHN0clBhdGgpID8gJHN0clBhdGggOiAkc3RyVGVzdFBhdGg7CisKKwkjIFN0b3AgdGhl IGNsdXN0ZXIKKwlQZ1N0b3AodHJ1ZSwgJHN0clBhdGgpOworCisJIyBSZW1vdmUgdGhlIGRp cmVjdG9yeQorCUNvbW1hbmRFeGVjdXRlKCJybSAtcmYgJHtzdHJUZXN0UGF0aH0iKTsKK30K KworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUGdDcmVhdGUKKyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCitzdWIgUGdDcmVhdGUKK3sKKwlteSAkc3RyUGF0aCA9IHNoaWZ0 OworCisJIyBTZXQgZGVmYXVsdAorCSRzdHJQYXRoID0gZGVmaW5lZCgkc3RyUGF0aCkgPyAk c3RyUGF0aCA6ICRzdHJUZXN0UGF0aDsKKworCUNvbW1hbmRFeGVjdXRlKCIke3N0clBnU3Fs QmlufS9pbml0ZGIgLUQgJHtzdHJQYXRofSAtVSAke3N0clVzZXJ9IiAuCisJCQkJICAgJyAt QSB0cnVzdCA+IC9kZXYvbnVsbCcpOworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IworIyBQZ1N0b3AKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitzdWIgUGdTdG9wCit7 CisJbXkgJGJJbW1lZGlhdGUgPSBzaGlmdDsKKwlteSAkc3RyUGF0aCA9IHNoaWZ0OworCisJ IyBTZXQgZGVmYXVsdAorCSRzdHJQYXRoID0gZGVmaW5lZCgkc3RyUGF0aCkgPyAkc3RyUGF0 aCA6ICRzdHJUZXN0UGF0aDsKKwkkYkltbWVkaWF0ZSA9IGRlZmluZWQoJGJJbW1lZGlhdGUp ID8gJGJJbW1lZGlhdGUgOiBmYWxzZTsKKworCSMgRGlzY29ubmVjdCB1c2VyIHNlc3Npb24K KwlQZ0Rpc2Nvbm5lY3QoKTsKKworCSMgSWYgcG9zdG1hc3RlciBwcm9jZXNzIGlzIHJ1bm5p bmcgdGhlbiBzdG9wIHRoZSBjbHVzdGVyCisJaWYgKC1lICRzdHJQYXRoIC4gJy9wb3N0bWFz dGVyLnBpZCcpCisJeworCQlDb21tYW5kRXhlY3V0ZSgiJHtzdHJQZ1NxbEJpbn0vcGdfY3Rs IHN0b3AgLUQgJHtzdHJQYXRofSAtdyAtcyAtbSAiIC4KKwkJCQkJICAoJGJJbW1lZGlhdGUg PyAnaW1tZWRpYXRlJyA6ICdmYXN0JykpOworCX0KK30KKworIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMKKyMgUGdTdGFydAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3N1YiBQ Z1N0YXJ0Cit7CisJbXkgJGlQb3J0ID0gc2hpZnQ7CisJbXkgJHN0clBhdGggPSBzaGlmdDsK KworCSMgU2V0IGRlZmF1bHQKKwkkaVBvcnQgPSBkZWZpbmVkKCRpUG9ydCkgPyAkaVBvcnQg OiAkaURlZmF1bHRQb3J0OworCSRzdHJQYXRoID0gZGVmaW5lZCgkc3RyUGF0aCkgPyAkc3Ry UGF0aCA6ICRzdHJUZXN0UGF0aDsKKworCSMgTWFrZSBzdXJlIHBvc3RncmVzIGlzIG5vdCBy dW5uaW5nCisJaWYgKC1lICRzdHJQYXRoIC4gJy9wb3N0bWFzdGVyLnBpZCcpCisJeworCQlj b25mZXNzICIke3N0clBhdGh9L3Bvc3RtYXN0ZXIucGlkIGV4aXN0cywgY2Fubm90IHN0YXJ0 IjsKKwl9CisKKwkjIFN0YXJ0IHRoZSBjbHVzdGVyCisJQ29tbWFuZEV4ZWN1dGUoIiR7c3Ry UGdTcWxCaW59L3BnX2N0bCBzdGFydCAtbyBcIiIgLgorCQkJCSAgICItYyBwb3J0PSR7aVBv cnR9IiAuCisJCQkJICAgIiAtYyB1bml4X3NvY2tldF9kaXJlY3Rvcmllcz0nL3RtcCciIC4K KwkJCQkgICAiIC1jIHNoYXJlZF9wcmVsb2FkX2xpYnJhcmllcz0ncGdfYXVkaXQnIiAuCisJ CQkJICAgIiAtYyBsb2dfbWluX21lc3NhZ2VzPWRlYnVnMSIgLgorCQkJCSAgICIgLWMgbG9n X2xpbmVfcHJlZml4PSdwcmVmaXggJyIgLgorCQkJCSAgICIgLWMgbG9nX3N0YXRlbWVudD1h bGwiIC4KKwkJCQkgICAoZGVmaW5lZCgkc3RyQ3VycmVudEF1ZGl0TG9nKSA/CisJCQkJCSAg ICIgLWMgcGdfYXVkaXQubG9nPScke3N0ckN1cnJlbnRBdWRpdExvZ30nIiA6ICcnKSAuCisJ CQkJICAgIiAtYyBwZ19hdWRpdC5yb2xlPScke3N0ckF1ZGl0Um9sZX0nIiAuCisJCQkJICAg IiAtYyBsb2dfY29ubmVjdGlvbnM9b24iIC4KKwkJCQkgICAiXCIgLUQgJHtzdHJQYXRofSAt bCAke3N0clBhdGh9L3Bvc3RncmVzcWwubG9nIC13IC1zIik7CisKKwkjIENvbm5lY3QgdXNl ciBzZXNzaW9uCisJUGdDb25uZWN0KCk7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCisjIFBnQXVkaXRMb2dTZXQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitzdWIg UGdBdWRpdExvZ1NldAoreworCW15ICRzdHJDb250ZXh0ID0gc2hpZnQ7CisJbXkgJHN0ck5h bWUgPSBzaGlmdDsKKwlteSBAc3RyeUNsYXNzID0gQF87CisKKwkjIENyZWF0ZSBTUUwgdG8g c2V0IHRoZSBHVUMKKwlteSAkc3RyQ29tbWFuZDsKKwlteSAkc3RyU3FsOworCisJaWYgKCRz dHJDb250ZXh0IGVxIENPTlRFWFRfR0xPQkFMKQorCXsKKwkJJHN0ckNvbW1hbmQgPSBDT01N QU5EX1NFVDsKKwkJJHN0clNxbCA9ICJzZXQgcGdfYXVkaXQubG9nID0gJyIgLgorCQkJCSAg QXJyYXlUb1N0cmluZyhAc3RyeUNsYXNzKSAuICInIjsKKwkJJHN0clRlbXBvcmFyeUF1ZGl0 TG9nID0gQXJyYXlUb1N0cmluZyhAc3RyeUNsYXNzKTsKKwl9CisJZWxzaWYgKCRzdHJDb250 ZXh0IGVxIENPTlRFWFRfUk9MRSkKKwl7CisJCSRzdHJDb21tYW5kID0gQ09NTUFORF9BTFRF Ul9ST0xFX1NFVDsKKwkJJHN0clNxbCA9ICJhbHRlciByb2xlICR7c3RyTmFtZX0gc2V0IHBn X2F1ZGl0LmxvZyA9ICciIC4KKwkJCQkgIEFycmF5VG9TdHJpbmcoQHN0cnlDbGFzcykgLiAi JyI7CisJfQorCWVsc2UKKwl7CisJCWNvbmZlc3MgInVuYWJsZSB0byBzZXQgcGdfYXVkaXQu bG9nIGZvciBjb250ZXh0ICR7c3RyQ29udGV4dH0iOworCX0KKworCSMgUmVzZXQgdGhlIGF1 ZGl0IGxvZworCWlmICgkc3RyQ29udGV4dCBlcSBDT05URVhUX0dMT0JBTCkKKwl7CisJCWRl bGV0ZSgkb0F1ZGl0TG9nSGFzaHskc3RyQ29udGV4dH0pOworCQkkc3RyTmFtZSA9IENPTlRF WFRfR0xPQkFMOworCX0KKwllbHNlCisJeworCQlkZWxldGUoJG9BdWRpdExvZ0hhc2h7JHN0 ckNvbnRleHR9eyRzdHJOYW1lfSk7CisJfQorCisJIyBTdG9yZSBhbGwgdGhlIGNsYXNzZXMg aW4gdGhlIGhhc2ggYW5kIGJ1aWxkIHRoZSBHVUMKKwlmb3JlYWNoIG15ICRzdHJDbGFzcyAo QHN0cnlDbGFzcykKKwl7CisJCWlmICgkc3RyQ2xhc3MgZXEgQ0xBU1NfQUxMKQorCQl7CisJ CQkkb0F1ZGl0TG9nSGFzaHskc3RyQ29udGV4dH17JHN0ck5hbWV9eyZDTEFTU19EREx9ID0g dHJ1ZTsKKwkJCSRvQXVkaXRMb2dIYXNoeyRzdHJDb250ZXh0fXskc3RyTmFtZX17JkNMQVNT X0ZVTkNUSU9OfSA9IHRydWU7CisJCQkkb0F1ZGl0TG9nSGFzaHskc3RyQ29udGV4dH17JHN0 ck5hbWV9eyZDTEFTU19NSVNDfSA9IHRydWU7CisJCQkkb0F1ZGl0TG9nSGFzaHskc3RyQ29u dGV4dH17JHN0ck5hbWV9eyZDTEFTU19SRUFEfSA9IHRydWU7CisJCQkkb0F1ZGl0TG9nSGFz aHskc3RyQ29udGV4dH17JHN0ck5hbWV9eyZDTEFTU19XUklURX0gPSB0cnVlOworCQl9CisK KwkJaWYgKGluZGV4KCRzdHJDbGFzcywgJy0nKSA9PSAwKQorCQl7CisJCQkkc3RyQ2xhc3Mg PSBzdWJzdHIoJHN0ckNsYXNzLCAxKTsKKworCQkJZGVsZXRlKCRvQXVkaXRMb2dIYXNoeyRz dHJDb250ZXh0fXskc3RyTmFtZX17JHN0ckNsYXNzfSk7CisJCX0KKwkJZWxzZQorCQl7CisJ CQkkb0F1ZGl0TG9nSGFzaHskc3RyQ29udGV4dH17JHN0ck5hbWV9eyRzdHJDbGFzc30gPSB0 cnVlOworCQl9CisJfQorCisJUGdMb2dFeGVjdXRlKCRzdHJDb21tYW5kLCAkc3RyU3FsKTsK K30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUGdBdWRpdEdyYW50U2V0Cisj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworc3ViIFBnQXVkaXRHcmFudFNldAoreworCW15 ICRzdHJSb2xlID0gc2hpZnQ7CisJbXkgJHN0clByaXZpbGVnZSA9IHNoaWZ0OworCW15ICRz dHJPYmplY3QgPSBzaGlmdDsKKwlteSAkc3RyQ29sdW1uID0gc2hpZnQ7CisKKwkjIENyZWF0 ZSBTUUwgdG8gc2V0IHRoZSBncmFudAorCVBnTG9nRXhlY3V0ZShDT01NQU5EX0dSQU5ULCAi R1JBTlQgIiAuCisJCQkJCQkJCShkZWZpbmVkKCRzdHJDb2x1bW4pID8KKwkJCQkJCQkJCWxj KCR7c3RyUHJpdmlsZWdlfSkgLiIgKCR7c3RyQ29sdW1ufSkiIDoKKwkJCQkJCQkJCXVjKCR7 c3RyUHJpdmlsZWdlfSkpIC4KKwkJCQkJCQkJIiBPTiBUQUJMRSAke3N0ck9iamVjdH0gVE8g JHtzdHJSb2xlfSAiKTsKKworCSRvQXVkaXRHcmFudEhhc2h7JHN0clJvbGV9eyRzdHJPYmpl Y3R9eyRzdHJQcml2aWxlZ2V9ID0gdHJ1ZTsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMKKyMgUGdBdWRpdEdyYW50UmVzZXQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj CitzdWIgUGdBdWRpdEdyYW50UmVzZXQKK3sKKwlteSAkc3RyUm9sZSA9IHNoaWZ0OworCW15 ICRzdHJQcml2aWxlZ2UgPSBzaGlmdDsKKwlteSAkc3RyT2JqZWN0ID0gc2hpZnQ7CisJbXkg JHN0ckNvbHVtbiA9IHNoaWZ0OworCisJIyBDcmVhdGUgU1FMIHRvIHNldCB0aGUgZ3JhbnQK KwlQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9SRVZPS0UsICJSRVZPS0UgICIgLiB1Yygke3N0clBy aXZpbGVnZX0pIC4KKwkJCQkgKGRlZmluZWQoJHN0ckNvbHVtbikgPyAiICgke3N0ckNvbHVt bn0pIiA6ICcnKSAuCisJCQkJICIgT04gVEFCTEUgJHtzdHJPYmplY3R9IEZST00gJHtzdHJS b2xlfSAiKTsKKworCWRlbGV0ZSgkb0F1ZGl0R3JhbnRIYXNoeyRzdHJSb2xlfXskc3RyT2Jq ZWN0fXskc3RyUHJpdmlsZWdlfSk7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj CisjIE1haW4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitteSBAb3lUYWJsZTsJICAg IyBTdG9yZSB0YWJsZSBpbmZvIGZvciBzZWxlY3QsIGluc2VydCwgdXBkYXRlLCBkZWxldGUK K215ICRzdHJTcWw7CQkjIEhvbGQgU3FsIGNvbW1hbmRzCisKKyMgRHJvcCB0aGUgb2xkIGNs dXN0ZXIsIGJ1aWxkIHRoZSBjb2RlLCBhbmQgY3JlYXRlIGEgbmV3IGNsdXN0ZXIKK1BnRHJv cCgpOworQnVpbGRNb2R1bGUoKTsKK1BnQ3JlYXRlKCk7CitQZ1N0YXJ0KCk7CisKK1BnRXhl Y3V0ZSgiY3JlYXRlIGV4dGVuc2lvbiBwZ19hdWRpdCIpOworCisjIENyZWF0ZSB0ZXN0IHVz ZXJzIGFuZCB0aGUgYXVkaXQgcm9sZQorUGdFeGVjdXRlKCJjcmVhdGUgdXNlciB1c2VyMSIp OworUGdFeGVjdXRlKCJjcmVhdGUgdXNlciB1c2VyMiIpOworUGdFeGVjdXRlKCJjcmVhdGUg cm9sZSAke3N0ckF1ZGl0Um9sZX0iKTsKKworUGdBdWRpdExvZ1NldChDT05URVhUX0dMT0JB TCwgdW5kZWYsIChDTEFTU19EREwpKTsKKworUGdBdWRpdExvZ1NldChDT05URVhUX1JPTEUs ICd1c2VyMicsIChDTEFTU19SRUFELCBDTEFTU19XUklURSkpOworCisjIFVzZXIxIGZvbGxv d3MgdGhlIGdsb2JhbCBsb2cgc2V0dGluZ3MKK1BnU2V0VXNlcigndXNlcjEnKTsKKworJHN0 clNxbCA9ICdDUkVBVEUgIFRBQkxFICBwdWJsaWMudGVzdCAoaWQgcGdfY2F0YWxvZy5pbnQ0 ICAgKScgLgorCQkgICcgIFdJVEggKG9pZHM9T0ZGKSAgJzsKK1BnTG9nRXhlY3V0ZShDT01N QU5EX0NSRUFURV9UQUJMRSwgJHN0clNxbCwgJ3B1YmxpYy50ZXN0Jyk7CitQZ0xvZ0V4ZWN1 dGUoQ09NTUFORF9TRUxFQ1QsICdzZWxlY3QgKiBmcm9tIHRlc3QnKTsKKworJHN0clNxbCA9 ICdkcm9wIHRhYmxlIHRlc3QnOworUGdMb2dFeGVjdXRlKENPTU1BTkRfRFJPUF9UQUJMRSwg JHN0clNxbCwgJ3B1YmxpYy50ZXN0Jyk7CisKK1BnU2V0VXNlcigndXNlcjInKTsKK1BnTG9n RXhlY3V0ZShDT01NQU5EX0NSRUFURV9UQUJMRSwKKwkJCSAnY3JlYXRlIHRhYmxlIHRlc3Qy IChpZCBpbnQpJywgJ3B1YmxpYy50ZXN0MicpOworUGdBdWRpdEdyYW50U2V0KCRzdHJBdWRp dFJvbGUsICZDT01NQU5EX1NFTEVDVCwgJ3B1YmxpYy50ZXN0MicpOworUGdMb2dFeGVjdXRl KENPTU1BTkRfQ1JFQVRFX1RBQkxFLAorCQkJICdjcmVhdGUgdGFibGUgdGVzdDMgKGlkIGlu dCknLCAncHVibGljLnRlc3QyJyk7CisKKyMgQ2F0YWxvZyBzZWxlY3Qgc2hvdWxkIG5vdCBs b2cKK1BnTG9nRXhlY3V0ZShDT01NQU5EX1NFTEVDVCwgJ3NlbGVjdCAqIGZyb20gcGdfY2xh c3MgbGltaXQgMScsCisJCQkJCQkJICAgZmFsc2UpOworCisjIE11bHRpLXRhYmxlIHNlbGVj dAorQG95VGFibGUgPSAoeyZOQU1FID0+ICdwdWJsaWMudGVzdDMnLCAmVFlQRSA9PiAmVFlQ RV9UQUJMRSwKKwkJCSAmQ09NTUFORCA9PiAmQ09NTUFORF9TRUxFQ1R9LAorCQkJeyZOQU1F ID0+ICdwdWJsaWMudGVzdDInLCAmVFlQRSA9PiAmVFlQRV9UQUJMRSwKKwkJCSAmQ09NTUFO RCA9PiAmQ09NTUFORF9TRUxFQ1R9KTsKK1BnTG9nRXhlY3V0ZShDT01NQU5EX1NFTEVDVCwg J3NlbGVjdCAqIGZyb20gdGVzdDMsIHRlc3QyJywKKwkJCQkJCQkgICBcQG95VGFibGUpOwor CisjIFZhcmlvdXMgQ1RFIGNvbWJpbmF0aW9ucworUGdBdWRpdEdyYW50U2V0KCRzdHJBdWRp dFJvbGUsICZDT01NQU5EX0lOU0VSVCwgJ3B1YmxpYy50ZXN0MycpOworCitAb3lUYWJsZSA9 ICh7Jk5BTUUgPT4gJ3B1YmxpYy50ZXN0MycsICZUWVBFID0+ICZUWVBFX1RBQkxFLAorCQkJ ICZDT01NQU5EID0+ICZDT01NQU5EX0lOU0VSVH0sCisJCQl7Jk5BTUUgPT4gJ3B1YmxpYy50 ZXN0MicsICZUWVBFID0+ICZUWVBFX1RBQkxFLAorCQkJICZDT01NQU5EID0+ICZDT01NQU5E X1NFTEVDVH0pOworUGdMb2dFeGVjdXRlKENPTU1BTkRfSU5TRVJULAorCQkJICd3aXRoIGN0 ZSBhcyAoc2VsZWN0IGlkIGZyb20gdGVzdDIpJyAuCisJCQkgJyBpbnNlcnQgaW50byB0ZXN0 MyBzZWxlY3QgaWQgZnJvbSBjdGUnLAorCQkJIFxAb3lUYWJsZSk7CisKK0BveVRhYmxlID0g KHsmTkFNRSA9PiAncHVibGljLnRlc3QyJywgJlRZUEUgPT4gJlRZUEVfVEFCTEUsCisJCQkg JkNPTU1BTkQgPT4gJkNPTU1BTkRfSU5TRVJUfSwKKwkJCXsmTkFNRSA9PiAncHVibGljLnRl c3QzJywgJlRZUEUgPT4gJlRZUEVfVEFCTEUsCisJCQkgJkNPTU1BTkQgPT4gJkNPTU1BTkRf SU5TRVJUfSk7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9JTlNFUlQsCisJCQkgJ3dpdGggY3Rl IGFzIChpbnNlcnQgaW50byB0ZXN0MyB2YWx1ZXMgKDEpIHJldHVybmluZyBpZCknIC4KKwkJ CSAnIGluc2VydCBpbnRvIHRlc3QyIHNlbGVjdCBpZCBmcm9tIGN0ZScsCisJCQkgXEBveVRh YmxlKTsKKworUGdBdWRpdEdyYW50U2V0KCRzdHJBdWRpdFJvbGUsICZDT01NQU5EX1VQREFU RSwgJ3B1YmxpYy50ZXN0MicpOworCitAb3lUYWJsZSA9ICh7Jk5BTUUgPT4gJ3B1YmxpYy50 ZXN0MycsICZUWVBFID0+ICZUWVBFX1RBQkxFLAorCQkJICZDT01NQU5EID0+ICZDT01NQU5E X0lOU0VSVH0sCisJCQl7Jk5BTUUgPT4gJ3B1YmxpYy50ZXN0MicsICZUWVBFID0+ICZUWVBF X1RBQkxFLAorCQkJICZDT01NQU5EID0+ICZDT01NQU5EX1VQREFURX0pOworUGdMb2dFeGVj dXRlKENPTU1BTkRfSU5TRVJULAorCQkJICd3aXRoIGN0ZSBhcyAodXBkYXRlIHRlc3QyIHNl dCBpZCA9IDEgcmV0dXJuaW5nIGlkKScgLgorCQkJICcgaW5zZXJ0IGludG8gdGVzdDMgc2Vs ZWN0IGlkIGZyb20gY3RlJywKKwkJCSBcQG95VGFibGUpOworCitAb3lUYWJsZSA9ICh7Jk5B TUUgPT4gJ3B1YmxpYy50ZXN0MycsICZUWVBFID0+ICZUWVBFX1RBQkxFLAorCQkJICZDT01N QU5EID0+ICZDT01NQU5EX1VQREFURX0sCisJCQl7Jk5BTUUgPT4gJ3B1YmxpYy50ZXN0Mics ICZUWVBFID0+ICZUWVBFX1RBQkxFLAorCQkJICZDT01NQU5EID0+ICZDT01NQU5EX0lOU0VS VH0sCisJCQl7Jk5BTUUgPT4gJ3B1YmxpYy50ZXN0MicsICZUWVBFID0+ICZUWVBFX1RBQkxF LAorCQkJICZDT01NQU5EID0+ICZDT01NQU5EX1NFTEVDVCwgJkNPTU1BTkRfTE9HID0+ICZD T01NQU5EX0lOU0VSVH0pOworUGdMb2dFeGVjdXRlKENPTU1BTkRfVVBEQVRFLAorCQkJICd3 aXRoIGN0ZSBhcyAoaW5zZXJ0IGludG8gdGVzdDIgdmFsdWVzICgxKSByZXR1cm5pbmcgaWQp JyAuCisJCQkgJyB1cGRhdGUgdGVzdDMgc2V0IGlkID0gY3RlLmlkJyAuCisJCQkgJyBmcm9t IGN0ZSB3aGVyZSB0ZXN0My5pZCA8PiBjdGUuaWQnLAorCQkJIFxAb3lUYWJsZSk7CisKK1Bn U2V0VXNlcigncG9zdGdyZXMnKTsKK1BnQXVkaXRMb2dTZXQoQ09OVEVYVF9ST0xFLCAndXNl cjInLCAoQ0xBU1NfTk9ORSkpOworUGdTZXRVc2VyKCd1c2VyMicpOworCisjIENvbHVtbi1i YXNlZCBhdWRpdHMKK1BnTG9nRXhlY3V0ZShDT01NQU5EX0NSRUFURV9UQUJMRSwKKwkJCSAn Y3JlYXRlIHRhYmxlIHRlc3Q0IChpZCBpbnQsIG5hbWUgdGV4dCknLCAncHVibGljLnRlc3Q0 Jyk7CitQZ0F1ZGl0R3JhbnRTZXQoJHN0ckF1ZGl0Um9sZSwgQ09NTUFORF9TRUxFQ1QsICdw dWJsaWMudGVzdDQnLCAnbmFtZScpOworUGdBdWRpdEdyYW50U2V0KCRzdHJBdWRpdFJvbGUs IENPTU1BTkRfVVBEQVRFLCAncHVibGljLnRlc3Q0JywgJ2lkJyk7CitQZ0F1ZGl0R3JhbnRT ZXQoJHN0ckF1ZGl0Um9sZSwgQ09NTUFORF9JTlNFUlQsICdwdWJsaWMudGVzdDQnLCAnbmFt ZScpOworCisjIFNlbGVjdAorQG95VGFibGUgPSAoKTsKK1BnTG9nRXhlY3V0ZShDT01NQU5E X1NFTEVDVCwgJ3NlbGVjdCBpZCBmcm9tIHB1YmxpYy50ZXN0NCcsCisJCQkJCQkJICBcQG95 VGFibGUpOworCitAb3lUYWJsZSA9ICh7Jk5BTUUgPT4gJ3B1YmxpYy50ZXN0NCcsICZUWVBF ID0+ICZUWVBFX1RBQkxFLAorCQkJICZDT01NQU5EID0+ICZDT01NQU5EX1NFTEVDVH0pOwor UGdMb2dFeGVjdXRlKENPTU1BTkRfU0VMRUNULCAnc2VsZWN0IG5hbWUgZnJvbSBwdWJsaWMu dGVzdDQnLAorCQkJCQkJCSAgXEBveVRhYmxlKTsKKworIyBJbnNlcnQKK0BveVRhYmxlID0g KCk7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9JTlNFUlQsICdpbnNlcnQgaW50byBwdWJsaWMu dGVzdDQgKGlkKSB2YWx1ZXMgKDEpJywKKwkJCQkJCQkgICBcQG95VGFibGUpOworCitAb3lU YWJsZSA9ICh7Jk5BTUUgPT4gJ3B1YmxpYy50ZXN0NCcsICZUWVBFID0+ICZUWVBFX1RBQkxF LAorCQkJICZDT01NQU5EID0+ICZDT01NQU5EX0lOU0VSVH0pOworUGdMb2dFeGVjdXRlKENP TU1BTkRfSU5TRVJULCAiaW5zZXJ0IGludG8gcHVibGljLnRlc3Q0IChuYW1lKSB2YWx1ZXMg KCd0ZXN0JykiLAorCQkJCQkJCSAgXEBveVRhYmxlKTsKKworIyBVcGRhdGUKK0BveVRhYmxl ID0gKCk7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9VUERBVEUsICJ1cGRhdGUgcHVibGljLnRl c3Q0IHNldCBuYW1lID0gJ2ZvbyciLAorCQkJCQkJCSAgIFxAb3lUYWJsZSk7CisKK0BveVRh YmxlID0gKHsmTkFNRSA9PiAncHVibGljLnRlc3Q0JywgJlRZUEUgPT4gJlRZUEVfVEFCTEUs CisJCQkgJkNPTU1BTkQgPT4gJkNPTU1BTkRfVVBEQVRFfSk7CitQZ0xvZ0V4ZWN1dGUoQ09N TUFORF9VUERBVEUsICJ1cGRhdGUgcHVibGljLnRlc3Q0IHNldCBpZCA9IDEiLAorCQkJCQkJ CSAgXEBveVRhYmxlKTsKKworQG95VGFibGUgPSAoeyZOQU1FID0+ICdwdWJsaWMudGVzdDQn LCAmVFlQRSA9PiAmVFlQRV9UQUJMRSwKKwkJCSZDT01NQU5EID0+ICZDT01NQU5EX1NFTEVD VCwgJkNPTU1BTkRfTE9HID0+ICZDT01NQU5EX1VQREFURX0pOworUGdMb2dFeGVjdXRlKENP TU1BTkRfVVBEQVRFLAorCQkJICJ1cGRhdGUgcHVibGljLnRlc3Q0IHNldCBuYW1lID0gJ2Zv bycgd2hlcmUgbmFtZSA9ICdiYXInIiwKKwkJCSBcQG95VGFibGUpOworCisjIERyb3AgdGVz dCB0YWJsZXMKK1BnTG9nRXhlY3V0ZShDT01NQU5EX0RST1BfVEFCTEUsICJkcm9wIHRhYmxl IHRlc3QyIiwgJ3B1YmxpYy50ZXN0MicpOworUGdMb2dFeGVjdXRlKENPTU1BTkRfRFJPUF9U QUJMRSwgImRyb3AgdGFibGUgdGVzdDMiLCAncHVibGljLnRlc3QzJyk7CitQZ0xvZ0V4ZWN1 dGUoQ09NTUFORF9EUk9QX1RBQkxFLCAiZHJvcCB0YWJsZSB0ZXN0NCIsICdwdWJsaWMudGVz dDQnKTsKKworCisjIE1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gbW9yZSBhdWRpdCBldmVudHMg cGVuZGluZyBpbiB0aGUgcG9zdGdyZXMgbG9nCitQZ0xvZ1dhaXQoKTsKKworIyBDcmVhdGUg c29tZSBlbWFpbCBmcmllbmRseSB0ZXN0cy4gIFRoZXNlIGZpcnN0IHRlc3RzIGFyZSBzZXNz aW9uIGxvZ2dpbmcgb25seS4KK1BnU2V0VXNlcigncG9zdGdyZXMnKTsKKworJmxvZygiXG5F eGFtcGxlczoiKTsKKworJmxvZygiXG5TZXNzaW9uIEF1ZGl0OlxuIik7CisKK1BnQXVkaXRM b2dTZXQoQ09OVEVYVF9HTE9CQUwsIHVuZGVmLCAoQ0xBU1NfRERMLCBDTEFTU19SRUFEKSk7 CisKK1BnU2V0VXNlcigndXNlcjEnKTsKKworJHN0clNxbCA9ICdDUkVBVEUgIFRBQkxFICBw dWJsaWMuYWNjb3VudCAoaWQgcGdfY2F0YWxvZy5pbnQ0ICAgLCcgLgorCQkgICcgbmFtZSBw Z19jYXRhbG9nLnRleHQgICBDT0xMQVRFIHBnX2NhdGFsb2cuImRlZmF1bHQiLCAnIC4KKwkJ ICAncGFzc3dvcmQgcGdfY2F0YWxvZy50ZXh0ICAgQ09MTEFURSBwZ19jYXRhbG9nLiJkZWZh dWx0IiwgJy4KKwkJICAnZGVzY3JpcHRpb24gcGdfY2F0YWxvZy50ZXh0ICAgQ09MTEFURSBw Z19jYXRhbG9nLiJkZWZhdWx0IikgICcuCisJCSAgJ1dJVEggKG9pZHM9T0ZGKSAgJzsKK1Bn TG9nRXhlY3V0ZShDT01NQU5EX0NSRUFURV9UQUJMRSwgJHN0clNxbCwgJ3B1YmxpYy5hY2Nv dW50Jyk7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9TRUxFQ1QsCisJCQkgJ3NlbGVjdCAqIGZy b20gYWNjb3VudCcpOworUGdMb2dFeGVjdXRlKENPTU1BTkRfSU5TRVJULAorCQkJICJpbnNl cnQgaW50byBhY2NvdW50IChpZCwgbmFtZSwgcGFzc3dvcmQsIGRlc2NyaXB0aW9uKSIgLgor CQkJICIgdmFsdWVzICgxLCAndXNlcjEnLCAnSEFTSDEnLCAnYmxhaCwgYmxhaCcpIik7Cism bG9nKCJBVURJVDogPG5vdGhpbmcgbG9nZ2VkPiIpOworCisjIE5vdyB0ZXN0cyBmb3Igb2Jq ZWN0IGxvZ2dpbmcKKyZsb2coIlxuT2JqZWN0IEF1ZGl0OlxuIik7CisKK1BnU2V0VXNlcign cG9zdGdyZXMnKTsKK1BnQXVkaXRMb2dTZXQoQ09OVEVYVF9HTE9CQUwsIHVuZGVmLCAoQ0xB U1NfTk9ORSkpOworUGdFeGVjdXRlKCJzZXQgcGdfYXVkaXQucm9sZSA9ICdhdWRpdCciKTsK K1BnU2V0VXNlcigndXNlcjEnKTsKKworUGdBdWRpdEdyYW50U2V0KCRzdHJBdWRpdFJvbGUs ICZDT01NQU5EX1NFTEVDVCwgJ3B1YmxpYy5hY2NvdW50JywgJ3Bhc3N3b3JkJyk7CisKK0Bv eVRhYmxlID0gKCk7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9TRUxFQ1QsICdzZWxlY3QgaWQs IG5hbWUgZnJvbSBhY2NvdW50JywKKwkJCQkJCQkgIFxAb3lUYWJsZSk7CismbG9nKCJBVURJ VDogPG5vdGhpbmcgbG9nZ2VkPiIpOworCitAb3lUYWJsZSA9ICh7Jk5BTUUgPT4gJ3B1Ymxp Yy5hY2NvdW50JywgJlRZUEUgPT4gJlRZUEVfVEFCTEUsCisJCQkgJkNPTU1BTkQgPT4gJkNP TU1BTkRfU0VMRUNUfSk7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9TRUxFQ1QsICdzZWxlY3Qg cGFzc3dvcmQgZnJvbSBhY2NvdW50JywKKwkJCQkJCQkgIFxAb3lUYWJsZSk7CisKK1BnQXVk aXRHcmFudFNldCgkc3RyQXVkaXRSb2xlLCAmQ09NTUFORF9VUERBVEUsCisJCQkJJ3B1Ymxp Yy5hY2NvdW50JywgJ25hbWUsIHBhc3N3b3JkJyk7CisKK0BveVRhYmxlID0gKCk7CitQZ0xv Z0V4ZWN1dGUoQ09NTUFORF9VUERBVEUsICJ1cGRhdGUgYWNjb3VudCBzZXQgZGVzY3JpcHRp b24gPSAneWFkYSwgeWFkYSciLAorCQkJCQkJCSAgXEBveVRhYmxlKTsKKyZsb2coIkFVRElU OiA8bm90aGluZyBsb2dnZWQ+Iik7CisKK0BveVRhYmxlID0gKHsmTkFNRSA9PiAncHVibGlj LmFjY291bnQnLCAmVFlQRSA9PiAmVFlQRV9UQUJMRSwKKwkJCSAmQ09NTUFORCA9PiAmQ09N TUFORF9VUERBVEV9KTsKK1BnTG9nRXhlY3V0ZShDT01NQU5EX1VQREFURSwgInVwZGF0ZSBh Y2NvdW50IHNldCBwYXNzd29yZCA9ICdIQVNIMiciLAorCQkJCQkJCSAgXEBveVRhYmxlKTsK KworIyBOb3cgdGVzdHMgZm9yIHNlc3Npb24vb2JqZWN0IGxvZ2dpbmcKKyZsb2coIlxuU2Vz c2lvbi9PYmplY3QgQXVkaXQ6XG4iKTsKKworUGdTZXRVc2VyKCdwb3N0Z3JlcycpOworUGdB dWRpdExvZ1NldChDT05URVhUX1JPTEUsICd1c2VyMScsIChDTEFTU19SRUFELCBDTEFTU19X UklURSkpOworUGdTZXRVc2VyKCd1c2VyMScpOworCitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9D UkVBVEVfVEFCTEUsCisJCQkgJ2NyZWF0ZSB0YWJsZSBhY2NvdW50X3JvbGVfbWFwIChhY2Nv dW50X2lkIGludCwgcm9sZV9pZCBpbnQpJywKKwkJCSAncHVibGljLmFjY291bnRfcm9sZV9t YXAnKTsKK1BnQXVkaXRHcmFudFNldCgkc3RyQXVkaXRSb2xlLCAmQ09NTUFORF9TRUxFQ1Qs ICdwdWJsaWMuYWNjb3VudF9yb2xlX21hcCcpOworCitAb3lUYWJsZSA9ICh7Jk5BTUUgPT4g J3B1YmxpYy5hY2NvdW50JywgJlRZUEUgPT4gJlRZUEVfVEFCTEUsCisJCQkgJkNPTU1BTkQg PT4gJkNPTU1BTkRfU0VMRUNUfSwKKwkJCXsmTkFNRSA9PiAncHVibGljLmFjY291bnRfcm9s ZV9tYXAnLCAmVFlQRSA9PiAmVFlQRV9UQUJMRSwKKwkJCSAmQ09NTUFORCA9PiAmQ09NTUFO RF9TRUxFQ1R9KTsKK1BnTG9nRXhlY3V0ZShDT01NQU5EX1NFTEVDVCwKKwkJCSAnc2VsZWN0 IGFjY291bnQucGFzc3dvcmQsIGFjY291bnRfcm9sZV9tYXAucm9sZV9pZCBmcm9tIGFjY291 bnQnIC4KKwkJCSAnIGlubmVyIGpvaW4gYWNjb3VudF9yb2xlX21hcCcgLgorCQkJICcgb24g YWNjb3VudC5pZCA9IGFjY291bnRfcm9sZV9tYXAuYWNjb3VudF9pZCcsCisJCQkgXEBveVRh YmxlKTsKKworQG95VGFibGUgPSAoeyZOQU1FID0+ICdwdWJsaWMuYWNjb3VudCcsICZUWVBF ID0+ICZUWVBFX1RBQkxFLAorCQkJICZDT01NQU5EID0+ICZDT01NQU5EX1NFTEVDVH0pOwor UGdMb2dFeGVjdXRlKENPTU1BTkRfU0VMRUNULCAnc2VsZWN0IHBhc3N3b3JkIGZyb20gYWNj b3VudCcsCisJCQkJCQkJICBcQG95VGFibGUpOworCitAb3lUYWJsZSA9ICgpOworUGdMb2dF eGVjdXRlKENPTU1BTkRfVVBEQVRFLCAidXBkYXRlIGFjY291bnQgc2V0IGRlc2NyaXB0aW9u ID0gJ3lhZGEsIHlhZGEnIiwKKwkJCQkJCQkgIFxAb3lUYWJsZSk7CismbG9nKCJBVURJVDog PG5vdGhpbmcgbG9nZ2VkPiIpOworCitAb3lUYWJsZSA9ICh7Jk5BTUUgPT4gJ3B1YmxpYy5h Y2NvdW50JywgJlRZUEUgPT4gJlRZUEVfVEFCTEUsCisJCQkgJkNPTU1BTkQgPT4gJkNPTU1B TkRfU0VMRUNULCAmQ09NTUFORF9MT0cgPT4gJkNPTU1BTkRfVVBEQVRFfSk7CitQZ0xvZ0V4 ZWN1dGUoQ09NTUFORF9VUERBVEUsCisJCQkgInVwZGF0ZSBhY2NvdW50IHNldCBkZXNjcmlw dGlvbiA9ICd5YWRhLCB5YWRhJyIgLgorCQkJICIgd2hlcmUgcGFzc3dvcmQgPSAnSEFTSDIn IiwKKwkJCSBcQG95VGFibGUpOworCitAb3lUYWJsZSA9ICh7Jk5BTUUgPT4gJ3B1YmxpYy5h Y2NvdW50JywgJlRZUEUgPT4gJlRZUEVfVEFCTEUsCisJCQkgJkNPTU1BTkQgPT4gJkNPTU1B TkRfVVBEQVRFfSk7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9VUERBVEUsICJ1cGRhdGUgYWNj b3VudCBzZXQgcGFzc3dvcmQgPSAnSEFTSDInIiwKKwkJCQkJCQkgIFxAb3lUYWJsZSk7CisK KyMgVGVzdCBhbGwgc3FsIGNvbW1hbmRzCismbG9nKCJcbkV4aGF1c3RpdmUgQ29tbWFuZCBU ZXN0czpcbiIpOworCitQZ1NldFVzZXIoJ3Bvc3RncmVzJyk7CisKK1BnQXVkaXRMb2dTZXQo Q09OVEVYVF9HTE9CQUwsIHVuZGVmLCAoQ0xBU1NfQUxMKSk7CitQZ0xvZ0V4ZWN1dGUoQ09N TUFORF9TRVQsICJzZXQgcGdfYXVkaXQucm9sZSA9ICdhdWRpdCciKTsKKworUGdMb2dFeGVj dXRlKENPTU1BTkRfRE8sICJkbyBcJFwkXCBiZWdpbiByYWlzZSBub3RpY2UgJ3Rlc3QnOyBl bmQ7IFwkXCQ7Iik7CisKKyRzdHJTcWwgPSAnQ1JFQVRFIFNDSEVNQSAgdGVzdCAnOworUGdM b2dFeGVjdXRlKENPTU1BTkRfQ1JFQVRFX1NDSEVNQSwgJHN0clNxbCwgJ3Rlc3QnKTsKKwor IyBUZXN0IENPUFkKK1BnTG9nRXhlY3V0ZShDT01NQU5EX0NPUFlfVE8sCisJCQkgIkNPUFkg cGdfY2xhc3MgdG8gJyIgLiBhYnNfcGF0aCgkc3RyVGVzdFBhdGgpIC4gIi9jbGFzcy5vdXQn Iik7CisKKyRzdHJTcWwgPSAnQ1JFQVRFICBUQUJMRSAgdGVzdC5wZ19jbGFzcyAgV0lUSCAo b2lkcz1PRkYpICAgQVMgU0VMRUNUIHJlbG5hbWUsJyAuCisJCSAgJyByZWxuYW1lc3BhY2Us IHJlbHR5cGUsIHJlbG9mdHlwZSwgcmVsb3duZXIsIHJlbGFtLCByZWxmaWxlbm9kZSwgJyAu CisJCSAgJ3JlbHRhYmxlc3BhY2UsIHJlbHBhZ2VzLCByZWx0dXBsZXMsIHJlbGFsbHZpc2li bGUsIHJlbHRvYXN0cmVsaWQsICcgLgorCQkgICdyZWxoYXNpbmRleCwgcmVsaXNzaGFyZWQs IHJlbHBlcnNpc3RlbmNlLCByZWxraW5kLCByZWxuYXR0cywgJyAuCisJCSAgJ3JlbGNoZWNr cywgcmVsaGFzb2lkcywgcmVsaGFzcGtleSwgcmVsaGFzcnVsZXMsIHJlbGhhc3RyaWdnZXJz LCAnIC4KKwkJICAncmVsaGFzc3ViY2xhc3MsIHJlbHJvd3NlY3VyaXR5LCByZWxpc3BvcHVs YXRlZCwgcmVscmVwbGlkZW50LCAnIC4KKwkJICAncmVsZnJvemVueGlkLCByZWxtaW5teGlk LCByZWxhY2wsIHJlbG9wdGlvbnMgJyAuCisJCSAgJ0ZST00gcGdfY2F0YWxvZy5wZ19jbGFz cyAnOworUGdMb2dFeGVjdXRlKENPTU1BTkRfSU5TRVJULCAkc3RyU3FsLCB1bmRlZiwgdHJ1 ZSwgZmFsc2UpOworUGdMb2dFeGVjdXRlKENPTU1BTkRfQ1JFQVRFX1RBQkxFX0FTLCAkc3Ry U3FsLCAndGVzdC5wZ19jbGFzcycsIGZhbHNlLCB0cnVlKTsKKworJHN0clNxbCA9ICJDT1BZ IHRlc3QucGdfY2xhc3MgZnJvbSAnIiAuIGFic19wYXRoKCRzdHJUZXN0UGF0aCkgLiAiL2Ns YXNzLm91dCciOworUGdMb2dFeGVjdXRlKENPTU1BTkRfSU5TRVJULCAkc3RyU3FsKTsKKyNQ Z0xvZ0V4ZWN1dGUoQ09NTUFORF9DT1BZX0ZST00sICRzdHJTcWwsIHVuZGVmLCBmYWxzZSwg dHJ1ZSk7CisKKyMgVGVzdCBwcmVwYXJlZCBTRUxFQ1QKK1BnTG9nRXhlY3V0ZShDT01NQU5E X1BSRVBBUkVfUkVBRCwKKwkJCSAnUFJFUEFSRSBwZ2NsYXNzc3RtdCAob2lkKSBhcyBzZWxl Y3QgKicgLgorCQkJICcgZnJvbSBwZ19jbGFzcyB3aGVyZSBvaWQgPSAkMScpOworUGdMb2dF eGVjdXRlKENPTU1BTkRfRVhFQ1VURV9SRUFELAorCQkJICdFWEVDVVRFIHBnY2xhc3NzdG10 ICgxKScpOworUGdMb2dFeGVjdXRlKENPTU1BTkRfREVBTExPQ0FURSwKKwkJCSAnREVBTExP Q0FURSBwZ2NsYXNzc3RtdCcpOworCisjIFRlc3QgY3Vyc29yCitQZ0xvZ0V4ZWN1dGUoQ09N TUFORF9CRUdJTiwKKwkJCSAnQkVHSU4nKTsKK1BnTG9nRXhlY3V0ZShDT01NQU5EX0RFQ0xB UkVfQ1VSU09SLAorCQkJICdERUNMQVJFIGN0ZXN0IFNDUk9MTCBDVVJTT1IgRk9SIFNFTEVD VCAqIEZST00gcGdfY2xhc3MnKTsKK1BnTG9nRXhlY3V0ZShDT01NQU5EX0ZFVENILAorCQkJ ICdGRVRDSCBORVhUIEZST00gY3Rlc3QnKTsKK1BnTG9nRXhlY3V0ZShDT01NQU5EX0NMT1NF LAorCQkJICdDTE9TRSBjdGVzdCcpOworUGdMb2dFeGVjdXRlKENPTU1BTkRfQ09NTUlULAor CQkJICdDT01NSVQnKTsKKworIyBUZXN0IHByZXBhcmVkIElOU0VSVAorJHN0clNxbCA9ICdD UkVBVEUgIFRBQkxFICB0ZXN0LnRlc3RfaW5zZXJ0IChpZCBwZ19jYXRhbG9nLmludDQgICAp ICAnIC4KKwkJICAnV0lUSCAob2lkcz1PRkYpICAnOworUGdMb2dFeGVjdXRlKENPTU1BTkRf Q1JFQVRFX1RBQkxFLCAkc3RyU3FsLCAndGVzdC50ZXN0X2luc2VydCcpOworCiskc3RyU3Fs ID0gJ1BSRVBBUkUgcGdjbGFzc3N0bXQgKG9pZCkgYXMgaW5zZXJ0IGludG8gdGVzdC50ZXN0 X2luc2VydCAoaWQpICcgLgorCQkgICd2YWx1ZXMgKCQxKSc7CitQZ0xvZ0V4ZWN1dGUoQ09N TUFORF9QUkVQQVJFX1dSSVRFLCAkc3RyU3FsKTsKK1BnTG9nRXhlY3V0ZShDT01NQU5EX0lO U0VSVCwgJHN0clNxbCwgdW5kZWYsIGZhbHNlLCBmYWxzZSwgdW5kZWYsICIxIik7CisKKyRz dHJTcWwgPSAnRVhFQ1VURSBwZ2NsYXNzc3RtdCAoMSknOworUGdMb2dFeGVjdXRlKENPTU1B TkRfRVhFQ1VURV9XUklURSwgJHN0clNxbCwgdW5kZWYsIHRydWUsIHRydWUpOworCisjIENy ZWF0ZSBhIHRhYmxlIHdpdGggYSBwcmltYXJ5IGtleQorJHN0clNxbCA9ICdDUkVBVEUgIFRB QkxFICBwdWJsaWMudGVzdCAoaWQgcGdfY2F0YWxvZy5pbnQ0ICAgLCAnIC4KKwkJICAnbmFt ZSBwZ19jYXRhbG9nLnRleHQgICBDT0xMQVRFIHBnX2NhdGFsb2cuImRlZmF1bHQiLCBkZXNj cmlwdGlvbiAnIC4KKwkJICAncGdfY2F0YWxvZy50ZXh0ICAgQ09MTEFURSBwZ19jYXRhbG9n LiJkZWZhdWx0IiwgQ09OU1RSQUlOVCAnIC4KKwkJICAndGVzdF9wa2V5IFBSSU1BUlkgS0VZ IChpZCkpICBXSVRIIChvaWRzPU9GRikgICc7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9DUkVB VEVfSU5ERVgsICRzdHJTcWwsICdwdWJsaWMudGVzdF9wa2V5JywgdHJ1ZSwgZmFsc2UpOwor UGdMb2dFeGVjdXRlKENPTU1BTkRfQ1JFQVRFX1RBQkxFLCAkc3RyU3FsLCAncHVibGljLnRl c3QnLCBmYWxzZSwgdHJ1ZSk7CisKK1BnTG9nRXhlY3V0ZShDT01NQU5EX0FOQUxZWkUsICdh bmFseXplIHRlc3QnKTsKKworIyBHcmFudCBzZWxlY3QgdG8gcHVibGljIC0gdGhpcyBzaG91 bGQgaGF2ZSBubyBhZmZlY3Qgb24gYXVkaXRpbmcKKyRzdHJTcWwgPSAnR1JBTlQgU0VMRUNU IE9OIFRBQkxFIHB1YmxpYy50ZXN0IFRPIFBVQkxJQyAnOworUGdMb2dFeGVjdXRlKENPTU1B TkRfR1JBTlQsICRzdHJTcWwpOworCitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9TRUxFQ1QsICdz ZWxlY3QgKiBmcm9tIHRlc3QnKTsKKworIyBOb3cgZ3JhbnQgc2VsZWN0IHRvIGF1ZGl0IGFu ZCBpdCBzaG91bGQgYmUgbG9nZ2VkCitQZ0F1ZGl0R3JhbnRTZXQoJHN0ckF1ZGl0Um9sZSwg JkNPTU1BTkRfU0VMRUNULCAncHVibGljLnRlc3QnKTsKK0BveVRhYmxlID0gKHsmTkFNRSA9 PiAncHVibGljLnRlc3QnLCAmVFlQRSA9PiAmVFlQRV9UQUJMRSwKKwkJCSAmQ09NTUFORCA9 PiAmQ09NTUFORF9TRUxFQ1R9KTsKK1BnTG9nRXhlY3V0ZShDT01NQU5EX1NFTEVDVCwgJ3Nl bGVjdCAqIGZyb20gdGVzdCcsIFxAb3lUYWJsZSk7CisKKyMgQ2hlY2sgY29sdW1ucyBncmFu dGVkIHRvIHB1YmxpYyBhbmQgbWFrZSBzdXJlIHRoZXkgZG8gbm90IGxvZworUGdBdWRpdEdy YW50UmVzZXQoJHN0ckF1ZGl0Um9sZSwgJkNPTU1BTkRfU0VMRUNULCAncHVibGljLnRlc3Qn KTsKKworJHN0clNxbCA9ICdHUkFOVCBzZWxlY3QgKG5hbWUpIE9OIFRBQkxFIHB1YmxpYy50 ZXN0IFRPIFBVQkxJQyAnOworUGdMb2dFeGVjdXRlKENPTU1BTkRfR1JBTlQsICRzdHJTcWwp OworCitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9TRUxFQ1QsICdzZWxlY3QgKiBmcm9tIHRlc3Qn KTsKK1BnTG9nRXhlY3V0ZShDT01NQU5EX1NFTEVDVCwgJ3NlbGVjdCBmcm9tIHRlc3QnKTsK KworIyBUcnkgYSBzZWxlY3QgdGhhdCBkb2VzIG5vdCByZWZlcmVuY2UgYW55IHRhYmxlcwor UGdMb2dFeGVjdXRlKENPTU1BTkRfU0VMRUNULCAnc2VsZWN0IDEsIGN1cnJlbnRfdGltZXN0 YW1wJyk7CisKKyMgTm93IHRyeSB0aGUgc2FtZSBpbiBhIGRvIGJsb2NrCiskc3RyU3FsID0g J2RvICQkIGRlY2xhcmUgdGVzdCBpbnQ7IGJlZ2luIHNlbGVjdCAxIGludG8gdGVzdDsgZW5k ICQkJzsKK1BnTG9nRXhlY3V0ZShDT01NQU5EX0RPLCAkc3RyU3FsLCB1bmRlZiwgdHJ1ZSwg ZmFsc2UpOworCiskc3RyU3FsID0gJ3NlbGVjdCAxJzsKK1BnTG9nRXhlY3V0ZShDT01NQU5E X1NFTEVDVCwgJHN0clNxbCwgdW5kZWYsIGZhbHNlLCB0cnVlKTsKKworIyBJbnNlcnQgc29t ZSBkYXRhIGludG8gdGVzdCBhbmQgdHJ5IGEgbG9vcCBpbiBhIGRvIGJsb2NrCitQZ0xvZ0V4 ZWN1dGUoQ09NTUFORF9JTlNFUlQsICdpbnNlcnQgaW50byB0ZXN0IChpZCkgdmFsdWVzICgx KScpOworUGdMb2dFeGVjdXRlKENPTU1BTkRfSU5TRVJULCAnaW5zZXJ0IGludG8gdGVzdCAo aWQpIHZhbHVlcyAoMiknKTsKK1BnTG9nRXhlY3V0ZShDT01NQU5EX0lOU0VSVCwgJ2luc2Vy dCBpbnRvIHRlc3QgKGlkKSB2YWx1ZXMgKDMpJyk7CisKKyRzdHJTcWwgPSAnZG8gJCQgJyAu CisJCSAgJ2RlY2xhcmUgJyAuCisJCSAgJwlyZXN1bHQgcmVjb3JkOycgLgorCQkgICdiZWdp biAnIC4KKwkJICAnCWZvciByZXN1bHQgaW4gc2VsZWN0IGlkIGZyb20gdGVzdCBsb29wICcg LgorCQkgICcJCWluc2VydCBpbnRvIHRlc3QgKGlkKSB2YWx1ZXMgKHJlc3VsdC5pZCArIDEw MCk7ICcgLgorCQkgICcJZW5kIGxvb3A7ICcgLgorCQkgICdlbmQ7ICQkJzsKKworUGdMb2dF eGVjdXRlKENPTU1BTkRfRE8sICRzdHJTcWwsIHVuZGVmLCB0cnVlLCBmYWxzZSk7CisKKyRz dHJTcWwgPSAnc2VsZWN0IGlkIGZyb20gdGVzdCc7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9T RUxFQ1QsICRzdHJTcWwsIHVuZGVmLCBmYWxzZSwgZmFsc2UpOworCiskc3RyU3FsID0gJ2lu c2VydCBpbnRvIHRlc3QgKGlkKSB2YWx1ZXMgKHJlc3VsdC5pZCArIDEwMCknOworUGdMb2dF eGVjdXRlKENPTU1BTkRfSU5TRVJULCAkc3RyU3FsLCB1bmRlZiwgZmFsc2UsIGZhbHNlLCB1 bmRlZiwgIiwsIik7CisKK1BnTG9nRXhlY3V0ZShDT01NQU5EX0lOU0VSVCwgJHN0clNxbCwg dW5kZWYsIGZhbHNlLCBmYWxzZSwgdW5kZWYsICIsLCIpOworCitQZ0xvZ0V4ZWN1dGUoQ09N TUFORF9JTlNFUlQsICRzdHJTcWwsIHVuZGVmLCBmYWxzZSwgZmFsc2UsIHVuZGVmLCAiLCwi KTsKKworIyBUZXN0IEVYRUNVVEUgd2l0aCBiaW5kCiskc3RyU3FsID0gInNlbGVjdCAqIGZy b20gdGVzdCB3aGVyZSBpZCA9ID8iOworbXkgJGhTdGF0ZW1lbnQgPSAkaERiLT5wcmVwYXJl KCRzdHJTcWwpOworCiskc3RyU3FsID0gInNlbGVjdCAqIGZyb20gdGVzdCB3aGVyZSBpZCA9 IFwkMSI7CiskaFN0YXRlbWVudC0+YmluZF9wYXJhbSgxLCAxMDEpOworJGhTdGF0ZW1lbnQt PmV4ZWN1dGUoKTsKKworUGdMb2dFeGVjdXRlKENPTU1BTkRfU0VMRUNULCAkc3RyU3FsLCB1 bmRlZiwgZmFsc2UsIGZhbHNlLCB1bmRlZiwgIjEwMSIpOworCiskaFN0YXRlbWVudC0+Ymlu ZF9wYXJhbSgxLCAxMDMpOworJGhTdGF0ZW1lbnQtPmV4ZWN1dGUoKTsKKworUGdMb2dFeGVj dXRlKENPTU1BTkRfU0VMRUNULCAkc3RyU3FsLCB1bmRlZiwgZmFsc2UsIGZhbHNlLCB1bmRl ZiwgIjEwMyIpOworCiskaFN0YXRlbWVudC0+ZmluaXNoKCk7CisKKyMgQ3Vyc29ycyBpbiBh IGZ1bmN0aW9uIGJsb2NrCiskc3RyU3FsID0gIkNSRUFURSAgRlVOQ1RJT04gcHVibGljLnRl c3QoKSBSRVRVUk5TICBwZ19jYXRhbG9nLmludDQgTEFOR1VBR0UgIiAuCisJCSAgInBscGdz cWwgIFZPTEFUSUxFICBDQUxMRUQgT04gTlVMTCBJTlBVVCBTRUNVUklUWSBJTlZPS0VSIENP U1QgMTAwICIgLgorCQkgICIgIEFTICcgZGVjbGFyZSBjdXIxIGN1cnNvciBmb3Igc2VsZWN0 ICogZnJvbSBob2dlOyB0bXAgaW50OyBiZWdpbiAiIC4KKwkJICAiY3JlYXRlIHRhYmxlIGhv Z2UgKGlkIGludCk7IG9wZW4gY3VyMTsgZmV0Y2ggY3VyMSBpbnRvIHRtcDsgY2xvc2UgIiAu CisJCSAgImN1cjE7IHJldHVybiB0bXA7IGVuZCciOworCitQZ0xvZ0V4ZWN1dGUoQ09NTUFO RF9DUkVBVEVfRlVOQ1RJT04sICRzdHJTcWwsICdwdWJsaWMudGVzdCgpJyk7CisKKyRzdHJT cWwgPSAnc2VsZWN0IHB1YmxpYy50ZXN0KCknOworUGdMb2dFeGVjdXRlKENPTU1BTkRfU0VM RUNULCAkc3RyU3FsLCB1bmRlZiwgdHJ1ZSwgZmFsc2UpOworUGdMb2dFeGVjdXRlKENPTU1B TkRfRVhFQ1VURV9GVU5DVElPTiwgJHN0clNxbCwgJ3B1YmxpYy50ZXN0JywgZmFsc2UsIGZh bHNlKTsKKworJHN0clNxbCA9ICdDUkVBVEUgIFRBQkxFICBwdWJsaWMuaG9nZSAoaWQgcGdf Y2F0YWxvZy5pbnQ0ICAgKScgLgorICAgICAgICAgICcgIFdJVEggKG9pZHM9T0ZGKSAgJzsK K1BnTG9nRXhlY3V0ZShDT01NQU5EX0NSRUFURV9UQUJMRSwgJHN0clNxbCwgJ3B1YmxpYy5o b2dlJywgZmFsc2UsIGZhbHNlKTsKKworJHN0clNxbCA9ICdzZWxlY3QgKiBmcm9tIGhvZ2Un OworUGdMb2dFeGVjdXRlKENPTU1BTkRfU0VMRUNULCAkc3RyU3FsLCB1bmRlZiwgZmFsc2Us IHRydWUpOworI1BnTG9nRXhlY3V0ZShDT01NQU5EX1NFTEVDVCwgJ3NlbGVjdCBwdWJsaWMu dGVzdCgpJyk7CisKKyMgTm93IHRyeSBzb21lIERETCBpbiBhIGRvIGJsb2NrCiskc3RyU3Fs ID0gJ2RvICQkICcgLgorCQkgICdiZWdpbiAnIC4KKwkJICAnCWNyZWF0ZSB0YWJsZSB0ZXN0 X2Jsb2NrIChpZCBpbnQpOyAnIC4KKwkJICAnCWRyb3AgdGFibGUgdGVzdF9ibG9jazsgJyAu CisJCSAgJ2VuZDsgJCQnOworCitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9ETywgJHN0clNxbCwg dW5kZWYsIHRydWUsIGZhbHNlKTsKKworJHN0clNxbCA9ICdDUkVBVEUgIFRBQkxFICBwdWJs aWMudGVzdF9ibG9jayAoaWQgcGdfY2F0YWxvZy5pbnQ0ICAgKSAgJyAuCisJCSAgJ1dJVEgg KG9pZHM9T0ZGKSAgJzsKK1BnTG9nRXhlY3V0ZShDT01NQU5EX0NSRUFURV9UQUJMRSwgJHN0 clNxbCwgJ3B1YmxpYy50ZXN0X2Jsb2NrJywgZmFsc2UsIGZhbHNlKTsKKworJHN0clNxbCA9 ICdkcm9wIHRhYmxlIHRlc3RfYmxvY2snOworUGdMb2dFeGVjdXRlKENPTU1BTkRfRFJPUF9U QUJMRSwgJHN0clNxbCwgJ3B1YmxpYy50ZXN0X2Jsb2NrJywgZmFsc2UsIGZhbHNlKTsKKwor IyBHZW5lcmF0ZSBhbiBlcnJvciBpbiBhIGRvIGJsb2NrIGFuZCBtYWtlIHN1cmUgdGhlIHN0 YWNrIGdldHMgY2xlYW5lZCB1cAorJHN0clNxbCA9ICdkbyAkJCAnIC4KKwkJICAnYmVnaW4g JyAuCisJCSAgJwljcmVhdGUgdGFibGUgYm9idXMudGVzdF9ibG9jayAoaWQgaW50KTsgJyAu CisJCSAgJ2VuZDsgJCQnOworCitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9ETywgJHN0clNxbCwg dW5kZWYsIHVuZGVmLCB1bmRlZiwgdW5kZWYsIHVuZGVmLCB0cnVlKTsKKyMgUGdMb2dFeGVj dXRlKENPTU1BTkRfU0VMRUNULCAnc2VsZWN0IDEnKTsKKyMgZXhpdCAwOworCisjIFRyeSBl eHBsYWluCitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9TRUxFQ1QsICdleHBsYWluIHNlbGVjdCAx JywgdW5kZWYsIHRydWUsIGZhbHNlKTsKK1BnTG9nRXhlY3V0ZShDT01NQU5EX0VYUExBSU4s ICdleHBsYWluIHNlbGVjdCAxJywgdW5kZWYsIGZhbHNlLCB0cnVlKTsKKworIyBOb3cgc2V0 IGdyYW50IHRvIGEgc3BlY2lmaWMgY29sdW1uIHRvIGF1ZGl0IGFuZCBtYWtlIHN1cmUgaXQg bG9ncworIyBNYWtlIHN1cmUgdGhlIHRoZSBjb252ZXJzZSBpcyB0cnVlCitQZ0F1ZGl0R3Jh bnRTZXQoJHN0ckF1ZGl0Um9sZSwgJkNPTU1BTkRfU0VMRUNULCAncHVibGljLnRlc3QnLAor CQkJCSduYW1lLCBkZXNjcmlwdGlvbicpOworUGdMb2dFeGVjdXRlKENPTU1BTkRfU0VMRUNU LCAnc2VsZWN0IGlkIGZyb20gdGVzdCcpOworCitAb3lUYWJsZSA9ICh7Jk5BTUUgPT4gJ3B1 YmxpYy50ZXN0JywgJlRZUEUgPT4gJlRZUEVfVEFCTEUsCisJCQkgJkNPTU1BTkQgPT4gJkNP TU1BTkRfU0VMRUNUfSk7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9TRUxFQ1QsICdzZWxlY3Qg bmFtZSBmcm9tIHRlc3QnLCBcQG95VGFibGUpOworCisjIFRlc3QgYWx0ZXIgYW5kIGRyb3Ag dGFibGUgc3RhdGVtZW50cworJHN0clNxbCA9ICdBTFRFUiBUQUJMRSBwdWJsaWMudGVzdCBE Uk9QIENPTFVNTiBkZXNjcmlwdGlvbiAnOworUGdMb2dFeGVjdXRlKENPTU1BTkRfQUxURVJf VEFCTEVfQ09MVU1OLAorCQkJICRzdHJTcWwsICdwdWJsaWMudGVzdC5kZXNjcmlwdGlvbics IHRydWUsIGZhbHNlKTsKK1BnTG9nRXhlY3V0ZShDT01NQU5EX0FMVEVSX1RBQkxFLAorCQkJ ICRzdHJTcWwsICdwdWJsaWMudGVzdCcsIGZhbHNlLCB0cnVlKTsKK0BveVRhYmxlID0gKHsm TkFNRSA9PiAncHVibGljLnRlc3QnLCAmVFlQRSA9PiAmVFlQRV9UQUJMRSwKKwkJCSAmQ09N TUFORCA9PiAmQ09NTUFORF9TRUxFQ1R9KTsKK1BnTG9nRXhlY3V0ZShDT01NQU5EX1NFTEVD VCwgJ3NlbGVjdCBmcm9tIHRlc3QnLCBcQG95VGFibGUpOworCiskc3RyU3FsID0gJ0FMVEVS IFRBQkxFICBwdWJsaWMudGVzdCBSRU5BTUUgVE8gdGVzdDInOworUGdMb2dFeGVjdXRlKENP TU1BTkRfQUxURVJfVEFCTEUsICRzdHJTcWwsICdwdWJsaWMudGVzdDInKTsKKworJHN0clNx bCA9ICdBTFRFUiBUQUJMRSBwdWJsaWMudGVzdDIgU0VUIFNDSEVNQSB0ZXN0JzsKK1BnTG9n RXhlY3V0ZShDT01NQU5EX0FMVEVSX1RBQkxFLCAkc3RyU3FsLCAndGVzdC50ZXN0MicpOwor Ciskc3RyU3FsID0gJ0FMVEVSIFRBQkxFIHRlc3QudGVzdDIgQUREIENPTFVNTiBkZXNjcmlw dGlvbiBwZ19jYXRhbG9nLnRleHQgICAnIC4KKwkJICAnQ09MTEFURSBwZ19jYXRhbG9nLiJk ZWZhdWx0Iic7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9BTFRFUl9UQUJMRSwgJHN0clNxbCwg J3Rlc3QudGVzdDInKTsKKworJHN0clNxbCA9ICdBTFRFUiBUQUJMRSB0ZXN0LnRlc3QyIERS T1AgQ09MVU1OIGRlc2NyaXB0aW9uICc7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9BTFRFUl9U QUJMRV9DT0xVTU4sICRzdHJTcWwsCisJCQkgJ3Rlc3QudGVzdDIuZGVzY3JpcHRpb24nLCB0 cnVlLCBmYWxzZSk7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9BTFRFUl9UQUJMRSwgJHN0clNx bCwKKwkJCSAndGVzdC50ZXN0MicsIGZhbHNlLCB0cnVlKTsKKworJHN0clNxbCA9ICdkcm9w IHRhYmxlIHRlc3QudGVzdDInOworUGdMb2dFeGVjdXRlKENPTU1BTkRfRFJPUF9UQUJMRSwg JHN0clNxbCwgJ3Rlc3QudGVzdDInLCB0cnVlLCBmYWxzZSk7CitQZ0xvZ0V4ZWN1dGUoQ09N TUFORF9EUk9QX1RBQkxFX0NPTlNUUkFJTlQsICRzdHJTcWwsICd0ZXN0X3BrZXkgb24gdGVz dC50ZXN0MicsCisJCQkgZmFsc2UsIGZhbHNlKTsKK1BnTG9nRXhlY3V0ZShDT01NQU5EX0RS T1BfVEFCTEVfSU5ERVgsICRzdHJTcWwsICd0ZXN0LnRlc3RfcGtleScsIGZhbHNlLCB0cnVl KTsKKworJHN0clNxbCA9ICJDUkVBVEUgIEZVTkNUSU9OIHB1YmxpYy5pbnRfYWRkKElOIGEg cGdfY2F0YWxvZy5pbnQ0ICwgSU4gYiAiIC4KKwkJICAicGdfY2F0YWxvZy5pbnQ0ICkgUkVU VVJOUyAgcGdfY2F0YWxvZy5pbnQ0IExBTkdVQUdFIHBscGdzcWwgICIgLgorCQkgICJWT0xB VElMRSAgQ0FMTEVEIE9OIE5VTEwgSU5QVVQgU0VDVVJJVFkgSU5WT0tFUiBDT1NUIDEwMCAg IEFTICciIC4KKwkJICAiIGJlZ2luIHJldHVybiBhICsgYjsgZW5kICciOworUGdMb2dFeGVj dXRlKENPTU1BTkRfQ1JFQVRFX0ZVTkNUSU9OLCAkc3RyU3FsLAorCQkJICdwdWJsaWMuaW50 X2FkZChpbnRlZ2VyLGludGVnZXIpJyk7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9TRUxFQ1Qs ICJzZWxlY3QgaW50X2FkZCgxLCAxKSIsCisJCQkJCQkJIHVuZGVmLCB0cnVlLCBmYWxzZSk7 CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9FWEVDVVRFX0ZVTkNUSU9OLCAic2VsZWN0IGludF9h ZGQoMSwgMSkiLAorCQkJCQkJCQkJICAgJ3B1YmxpYy5pbnRfYWRkJywgZmFsc2UsIHRydWUp OworCiskc3RyU3FsID0gIkNSRUFURSBBR0dSRUdBVEUgcHVibGljLnN1bV90ZXN0KCAgcGdf Y2F0YWxvZy5pbnQ0KSAiIC4KKwkJICAiKFNGVU5DPXB1YmxpYy5pbnRfYWRkLCBTVFlQRT1w Z19jYXRhbG9nLmludDQsIElOSVRDT05EPScwJykiOworUGdMb2dFeGVjdXRlKENPTU1BTkRf Q1JFQVRFX0FHR1JFR0FURSwgJHN0clNxbCwgJ3B1YmxpYy5zdW1fdGVzdChpbnRlZ2VyKScp OworCisjIFRoZXJlJ3MgYSBidWcgaGVyZSBpbiBkZXBhcnNlOgorJHN0clNxbCA9ICJBTFRF UiBBR0dSRUdBVEUgcHVibGljLnN1bV90ZXN0KGludGVnZXIpIFJFTkFNRSBUTyBzdW1fdGVz dDIiOworUGdMb2dFeGVjdXRlKENPTU1BTkRfQUxURVJfQUdHUkVHQVRFLCAkc3RyU3FsLCAn cHVibGljLnN1bV90ZXN0MihpbnRlZ2VyKScpOworCiskc3RyU3FsID0gIkNSRUFURSBDT0xM QVRJT04gcHVibGljLmNvbGxhdGlvbl90ZXN0IChMQ19DT0xMQVRFID0gJ2RlX0RFJywgIiAu CisJCSAgIkxDX0NUWVBFID0gJ2RlX0RFJykiOworUGdMb2dFeGVjdXRlKENPTU1BTkRfQ1JF QVRFX0NPTExBVElPTiwgJHN0clNxbCwgJ3B1YmxpYy5jb2xsYXRpb25fdGVzdCcpOworCisk c3RyU3FsID0gICJBTFRFUiBDT0xMQVRJT04gcHVibGljLmNvbGxhdGlvbl90ZXN0IFJFTkFN RSBUTyBjb2xsYXRpb25fdGVzdDIiOworUGdMb2dFeGVjdXRlKENPTU1BTkRfQUxURVJfQ09M TEFUSU9OLCAkc3RyU3FsLCAncHVibGljLmNvbGxhdGlvbl90ZXN0MicpOworCiskc3RyU3Fs ID0gIkNSRUFURSAgQ09OVkVSU0lPTiBwdWJsaWMuY29udmVyc2lvbl90ZXN0IEZPUiAnU1FM X0FTQ0lJJyAiIC4KKwkJICAiVE8gJ01VTEVfSU5URVJOQUwnIEZST00gcGdfY2F0YWxvZy5h c2NpaV90b19taWMiOworUGdMb2dFeGVjdXRlKENPTU1BTkRfQ1JFQVRFX0NPTlZFUlNJT04s ICRzdHJTcWwsICdwdWJsaWMuY29udmVyc2lvbl90ZXN0Jyk7CisKKyRzdHJTcWwgPSAiQUxU RVIgQ09OVkVSU0lPTiBwdWJsaWMuY29udmVyc2lvbl90ZXN0IFJFTkFNRSBUTyBjb252ZXJz aW9uX3Rlc3QyIjsKK1BnTG9nRXhlY3V0ZShDT01NQU5EX0FMVEVSX0NPTlZFUlNJT04sICRz dHJTcWwsICdwdWJsaWMuY29udmVyc2lvbl90ZXN0MicpOworCitQZ0xvZ0V4ZWN1dGUoQ09N TUFORF9DUkVBVEVfREFUQUJBU0UsICJDUkVBVEUgREFUQUJBU0UgZGF0YWJhc2VfdGVzdCIp OworUGdMb2dFeGVjdXRlKENPTU1BTkRfQUxURVJfREFUQUJBU0UsCisJCQkgIkFMVEVSIERB VEFCQVNFIGRhdGFiYXNlX3Rlc3QgcmVuYW1lIHRvIGRhdGFiYXNlX3Rlc3QyIik7CitQZ0xv Z0V4ZWN1dGUoQ09NTUFORF9EUk9QX0RBVEFCQVNFLCAiRFJPUCBEQVRBQkFTRSBkYXRhYmFz ZV90ZXN0MiIpOworCisjIE1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gbW9yZSBhdWRpdCBldmVu dHMgcGVuZGluZyBpbiB0aGUgcG9zdGdyZXMgbG9nCitQZ0xvZ1dhaXQoKTsKKworIyBTdG9w IHRoZSBkYXRhYmFzZQoraWYgKCEkYk5vQ2xlYW51cCkKK3sKKwlQZ0Ryb3AoKTsKK30KZGlm ZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jb250cmliLnNnbWwgYi9kb2Mvc3JjL3NnbWwvY29u dHJpYi5zZ21sCmluZGV4IGE2OThkMGYuLjViMjQ3YTkgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMv c2dtbC9jb250cmliLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2NvbnRyaWIuc2dtbApAQCAt MTI0LDYgKzEyNCw3IEBAIENSRUFURSBFWFRFTlNJT04gPHJlcGxhY2VhYmxlPm1vZHVsZV9u YW1lPC8+IEZST00gdW5wYWNrYWdlZDsKICAmbHRyZWU7CiAgJnBhZ2VpbnNwZWN0OwogICZw YXNzd29yZGNoZWNrOworICZwZ2F1ZGl0OwogICZwZ2J1ZmZlcmNhY2hlOwogICZwZ2NyeXB0 bzsKICAmcGdmcmVlc3BhY2VtYXA7CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvZmlsZWxp c3Quc2dtbCBiL2RvYy9zcmMvc2dtbC9maWxlbGlzdC5zZ21sCmluZGV4IDg5ZmZmNzcuLjZi MGI0MDcgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9maWxlbGlzdC5zZ21sCisrKyBiL2Rv Yy9zcmMvc2dtbC9maWxlbGlzdC5zZ21sCkBAIC0xMjUsNiArMTI1LDcgQEAKIDwhRU5USVRZ IG9pZDJuYW1lICAgICAgICBTWVNURU0gIm9pZDJuYW1lLnNnbWwiPgogPCFFTlRJVFkgcGFn ZWluc3BlY3QgICAgIFNZU1RFTSAicGFnZWluc3BlY3Quc2dtbCI+CiA8IUVOVElUWSBwYXNz d29yZGNoZWNrICAgU1lTVEVNICJwYXNzd29yZGNoZWNrLnNnbWwiPgorPCFFTlRJVFkgcGdh dWRpdCAgICAgICAgIFNZU1RFTSAicGdhdWRpdC5zZ21sIj4KIDwhRU5USVRZIHBnYmVuY2gg ICAgICAgICBTWVNURU0gInBnYmVuY2guc2dtbCI+CiA8IUVOVElUWSBwZ2FyY2hpdmVjbGVh bnVwIFNZU1RFTSAicGdhcmNoaXZlY2xlYW51cC5zZ21sIj4KIDwhRU5USVRZIHBnYnVmZmVy Y2FjaGUgICBTWVNURU0gInBnYnVmZmVyY2FjaGUuc2dtbCI+CmRpZmYgLS1naXQgYS9kb2Mv c3JjL3NnbWwvcGdhdWRpdC5zZ21sIGIvZG9jL3NyYy9zZ21sL3BnYXVkaXQuc2dtbApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTg4NjE5Ci0tLSAvZGV2L251bGwK KysrIGIvZG9jL3NyYy9zZ21sL3BnYXVkaXQuc2dtbApAQCAtMCwwICsxLDM0NyBAQAorPCEt LSBkb2Mvc3JjL3NnbWwvcGdhdWRpdC5zZ21sIC0tPgorCis8c2VjdDEgaWQ9InBnYXVkaXQi IHhyZWZsYWJlbD0icGdhdWRpdCI+CisgIDx0aXRsZT5wZ19hdWRpdDwvdGl0bGU+CisKKyAg PGluZGV4dGVybSB6b25lPSJwZ2F1ZGl0Ij4KKyAgICA8cHJpbWFyeT5wZ19hdWRpdDwvcHJp bWFyeT4KKyAgPC9pbmRleHRlcm0+CisKKyAgPHBhcmE+CisgICAgVGhlIDxmaWxlbmFtZT5w Z19hdWRpdDwvZmlsZW5hbWU+IG1vZHVsZSBwcm92aWRlcyBzZXNzaW9uIGFuZCBvYmplY3QK KyAgICBhdWRpdGluZyB2aWEgdGhlIHN0YW5kYXJkIGxvZ2dpbmcgZmFjaWxpdHkuICBTZXNz aW9uIGFuZCBvYmplY3QgYXVkaXRpbmcgYXJlCisgICAgY29tcGxldGVseSBpbmRlcGVuZGVu dCBhbmQgY2FuIGJlIGNvbWJpbmVkLgorICA8L3BhcmE+CisKKyAgPHNlY3QyPgorICAgIDx0 aXRsZT5TZXNzaW9uIEF1ZGl0aW5nPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgU2Vz c2lvbiBhdWRpdGluZyBhbGxvd3MgdGhlIGxvZ2dpbmcgb2YgYWxsIGNvbW1hbmRzIHRoYXQg YXJlIGV4ZWN1dGVkIGJ5CisgICAgICBhIHVzZXIgaW4gdGhlIGJhY2tlbmQuICBFYWNoIGNv bW1hbmQgaXMgbG9nZ2VkIHdpdGggYSBzaW5nbGUgZW50cnkgYW5kCisgICAgICBpbmNsdWRl cyB0aGUgYXVkaXQgdHlwZSAoZS5nLiA8bGl0ZXJhbD5TRVNTSU9OPC9saXRlcmFsPiksIGNv bW1hbmQgdHlwZQorICAgICAgKGUuZy4gPGxpdGVyYWw+Q1JFQVRFIFRBQkxFPC9saXRlcmFs PiwgPGxpdGVyYWw+U0VMRUNUPC9saXRlcmFsPikgYW5kCisgICAgICBzdGF0ZW1lbnQgKGUu Zy4gPGxpdGVyYWw+InNlbGVjdCAqIGZyb20gdGVzdCI8L2xpdGVyYWw+KS4KKworICAgICAg RnVsbHktcXVhbGlmaWVkIG5hbWVzIGFuZCBvYmplY3QgdHlwZXMgd2lsbCBiZSBsb2dnZWQg Zm9yCisgICAgICA8bGl0ZXJhbD5DUkVBVEU8L2xpdGVyYWw+LCA8bGl0ZXJhbD5VUERBVEU8 L2xpdGVyYWw+LCBhbmQKKyAgICAgIDxsaXRlcmFsPkRST1A8L2xpdGVyYWw+IGNvbW1hbmRz IG9uIDxsaXRlcmFsPlRBQkxFPC9saXRlcmFsPiwKKyAgICAgIDxsaXRlcmFsPk1BVFZJRVc8 L2xpdGVyYWw+LCA8bGl0ZXJhbD5WSUVXPC9saXRlcmFsPiwKKyAgICAgIDxsaXRlcmFsPklO REVYPC9saXRlcmFsPiwgPGxpdGVyYWw+Rk9SRUlHTiBUQUJMRTwvbGl0ZXJhbD4sCisgICAg ICA8bGl0ZXJhbD5DT01QT1NJVEUgVFlQRTwvbGl0ZXJhbD4sIDxsaXRlcmFsPklOREVYPC9s aXRlcmFsPiwgYW5kCisgICAgICA8bGl0ZXJhbD5TRVFVRU5DRTwvbGl0ZXJhbD4gb2JqZWN0 cyBhcyB3ZWxsIGFzIGZ1bmN0aW9uIGNhbGxzLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0 Mz4KKyAgICAgIDx0aXRsZT5Db25maWd1cmF0aW9uPC90aXRsZT4KKworICAgICAgPHBhcmE+ CisgICAgICAgIFNlc3Npb24gbG9nZ2luZyBpcyBjb250cm9sbGVkIGJ5IHRoZSA8bGl0ZXJh bD5wZ19hdWRpdC5sb2c8L2xpdGVyYWw+CisgICAgICAgIEdVQy4gVGhlcmUgYXJlIHNpeCBj bGFzc2VzIG9mIGNvbW1hbmRzIHRoYXQgYXJlIHJlY29nbml6ZWQ6CisKKyAgICAgICAgPGl0 ZW1pemVkbGlzdD4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT4K KyAgICAgICAgICAgICAgPGxpdGVyYWw+UkVBRDwvbGl0ZXJhbD4gLSA8bGl0ZXJhbD5TRUxF Q1Q8L2xpdGVyYWw+IGFuZAorICAgICAgICAgICAgICA8bGl0ZXJhbD5DT1BZPC9saXRlcmFs PiB3aGVuIHRoZSBzb3VyY2UgaXMgYSB0YWJsZSBvciBxdWVyeS4KKyAgICAgICAgICAgIDwv cGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAg ICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICA8bGl0ZXJhbD5XUklURTwvbGl0ZXJh bD4gLSA8bGl0ZXJhbD5JTlNFUlQ8L2xpdGVyYWw+LAorICAgICAgICAgICAgICA8bGl0ZXJh bD5VUERBVEU8L2xpdGVyYWw+LCA8bGl0ZXJhbD5ERUxFVEU8L2xpdGVyYWw+LAorICAgICAg ICAgICAgICA8bGl0ZXJhbD5UUlVOQ0FURTwvbGl0ZXJhbD4sIGFuZCA8bGl0ZXJhbD5DT1BZ PC9saXRlcmFsPiB3aGVuIHRoZQorICAgICAgICAgICAgICBkZXN0aW5hdGlvbiBpcyBhIHRh YmxlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAg ICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIDxs aXRlcmFsPkZVTkNUSU9OPC9saXRlcmFsPiAtIEZ1bmN0aW9uIGNhbGxzIGFuZAorICAgICAg ICAgICAgICA8bGl0ZXJhbD5ETzwvbGl0ZXJhbD4gYmxvY2tzLgorICAgICAgICAgICAgPC9w YXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAg ICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIDxsaXRlcmFsPkRETDwvbGl0ZXJhbD4g LSBEREwsIHBsdXMgPGxpdGVyYWw+VkFDVVVNPC9saXRlcmFsPiwKKyAgICAgICAgICAgICAg PGxpdGVyYWw+UkVJTkRFWDwvbGl0ZXJhbD4sIGFuZCA8bGl0ZXJhbD5BTkFMWVpFPC9saXRl cmFsPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAg ICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICA8 bGl0ZXJhbD5QQVJBTUVURVI8L2xpdGVyYWw+IC0gUGFyYW1ldGVycyB0aGF0IHdlcmUgcGFz c2VkIGZvciB0aGUgc3RhdGVtZW50LiAgUGFyYW1ldGVycyBpbW1lZGlhdGVseSBmb2xsb3cg dGhlIHN0YXRlbWVudCB0ZXh0LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDwv bGlzdGl0ZW0+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+Cisg ICAgICAgICAgICAgIDxsaXRlcmFsPk1JU0M8L2xpdGVyYWw+IC0gTWlzY2VsbGFuZW91cyBj b21tYW5kcywgZS5nLgorICAgICAgICAgICAgICA8bGl0ZXJhbD5ESVNDQVJEPC9saXRlcmFs PiwgPGxpdGVyYWw+RkVUQ0g8L2xpdGVyYWw+LAorICAgICAgICAgICAgICA8bGl0ZXJhbD5D SEVDS1BPSU5UPC9saXRlcmFsPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8 L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgIDwvcGFyYT4KKwor ICAgICAgPHBhcmE+CisgICAgICAgIEVuYWJsZSBzZXNzaW9uIGxvZ2dpbmcgZm9yIGFsbCB3 cml0ZXMgYW5kIERETDoKKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CitwZ19hdWRpdC5s b2cgPSAnd3JpdGUsIGRkbCcKKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAg PC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgRW5hYmxlIHNlc3Npb24gbG9nZ2lu ZyBmb3IgYWxsIGNvbW1hbmRzIGV4Y2VwdCBtaXNjZWxsYW5lb3VzOgorICAgICAgICAgIDxw cm9ncmFtbGlzdGluZz4KK3BnX2F1ZGl0LmxvZyA9ICdhbGwsIC1taXNjJworICAgICAgICAg IDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAg ICAgTm90ZSB0aGF0IDxsaXRlcmFsPnBnX2F1ZGl0LmxvZzwvbGl0ZXJhbD4gY2FuIGJlIHNl dCBnbG9iYWxseSAoaW4KKyAgICAgIDxmaWxlbmFtZT5wb3N0Z3Jlc3FsLmNvbmY8L2ZpbGVu YW1lPiksIGF0IHRoZSBkYXRhYmFzZSBsZXZlbCAodXNpbmcKKyAgICAgIDxsaXRlcmFsPmFs dGVyIGRhdGFiYXNlIC4uLiBzZXQ8L2xpdGVyYWw+KSwgb3IgYXQgdGhlIHJvbGUgbGV2ZWwg KHVzaW5nCisgICAgICA8bGl0ZXJhbD5hbHRlciByb2xlIC4uLiBzZXQ8L2xpdGVyYWw+KS4K KyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3QzPgorCisgICAgPHNlY3QzPgorICAgICAgPHRp dGxlPkV4YW1wbGVzPC90aXRsZT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFNldCA8bGl0 ZXJhbD5wZ19hdWRpdC5sb2cgPSAncmVhZCwgZGRsJzwvbGl0ZXJhbD4gaW4KKyAgICAgICAg PGxpdGVyYWw+cG9zdGdyZXNxbC5jb25mPC9saXRlcmFsPi4KKyAgICAgIDwvcGFyYT4KKwor ICAgICAgPHBhcmE+CisgICAgICAgIFNRTDoKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBy b2dyYW1saXN0aW5nPgorY3JlYXRlIHRhYmxlIGFjY291bnQKKygKKyAgICBpZCBpbnQsCisg ICAgbmFtZSB0ZXh0LAorICAgIHBhc3N3b3JkIHRleHQsCisgICAgZGVzY3JpcHRpb24gdGV4 dAorKTsKKworc2VsZWN0ICoKKyAgICBmcm9tIGFjY291bnQ7CisKK2luc2VydCBpbnRvIGFj Y291bnQgKGlkLCBuYW1lLCBwYXNzd29yZCwgZGVzY3JpcHRpb24pCisgICAgICAgICAgICAg dmFsdWVzICgxLCAndXNlcjEnLCAnSEFTSDEnLCAnYmxhaCwgYmxhaCcpOworICAgICAgPC9w cm9ncmFtbGlzdGluZz4KKworICAgICAgPHBhcmE+CisgICAgICAgIExvZyBPdXRwdXQ6Cisg ICAgICA8L3BhcmE+CisKKyAgICAgIDxwcm9ncmFtbGlzdGluZz4KK0FVRElUOiBTRVNTSU9O LERETCxDUkVBVEUgVEFCTEUsVEFCTEUscHVibGljLmFjY291bnQsY3JlYXRlIHRhYmxlIGFj Y291bnQKKygKKyAgICBpZCBpbnQsCisgICAgbmFtZSB0ZXh0LAorICAgIHBhc3N3b3JkIHRl eHQsCisgICAgZGVzY3JpcHRpb24gdGV4dAorKTsKK0FVRElUOiBTRVNTSU9OLFJFQUQsU0VM RUNULCwsc2VsZWN0ICoKKyAgICBmcm9tIGFjY291bnQKKyAgICAgIDwvcHJvZ3JhbWxpc3Rp bmc+CisgICAgPC9zZWN0Mz4KKyAgPC9zZWN0Mj4KKworICA8c2VjdDI+CisgICAgPHRpdGxl Pk9iamVjdCBBdWRpdGluZzwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgIE9iamVjdCBh dWRpdGluZyBsb2dzIGNvbW1hbmRzIHRoYXQgYWZmZWN0IGEgcGFydGljdWxhciBvYmplY3Qu ICBPbmx5CisgICAgICA8bGl0ZXJhbD5TRUxFQ1Q8L2xpdGVyYWw+LCA8bGl0ZXJhbD5JTlNF UlQ8L2xpdGVyYWw+LAorICAgICAgPGxpdGVyYWw+VVBEQVRFPC9saXRlcmFsPiBhbmQgPGxp dGVyYWw+REVMRVRFPC9saXRlcmFsPiBjb21tYW5kcyBhcmUKKyAgICAgIHN1cHBvcnRlZC4K KyAgICA8L3BhcmE+CisKKyAgICA8c2VjdDM+CisgICAgICA8dGl0bGU+Q29uZmlndXJhdGlv bjwvdGl0bGU+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBPYmplY3QtbGV2ZWwgYXVkaXRp bmcgaXMgaW1wbGVtZW50ZWQgdmlhIHRoZSByb2xlcyBzeXN0ZW0uICBUaGUKKyAgICAgICAg PGxpdGVyYWw+cGdfYXVkaXQucm9sZTwvbGl0ZXJhbD4gR1VDIGRlZmluZXMgdGhlIHJvbGUg dGhhdCB3aWxsIGJlIHVzZWQKKyAgICAgICAgZm9yIGF1ZGl0aW5nLiAgQW4gb2JqZWN0IHdp bGwgYmUgYXVkaXRlZCB3aGVuIHRoZSBhdWRpdCByb2xlIGhhcworICAgICAgICBwZXJtaXNz aW9ucyBmb3IgdGhlIGNvbW1hbmQgZXhlY3V0ZWQgb3IgaW5oZXJpdHMgdGhlIHBlcm1pc3Np b25zIGZyb20KKyAgICAgICAgYW5vdGhlciByb2xlLgorICAgICAgPC9wYXJhPgorCisgICAg ICA8cHJvZ3JhbWxpc3Rpbmc+Citwb3N0cmVzcWwuY29uZjogcGdfYXVkaXQucm9sZSA9ICdh dWRpdCcKKworZ3JhbnQgc2VsZWN0LCBkZWxldGUKKyAgIG9uIHB1YmxpYy5hY2NvdW50Owor ICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKworICAgICAgPHBhcmE+CisgICAgICBOb3RlIHRo YXQgPGxpdGVyYWw+cGdfYXVkaXQucm9sZTwvbGl0ZXJhbD4gY2FuIGJlIHNldCBnbG9iYWxs eSAoaW4KKyAgICAgIDxmaWxlbmFtZT5wb3N0Z3Jlc3FsLmNvbmY8L2ZpbGVuYW1lPiksIGF0 IHRoZSBkYXRhYmFzZSBsZXZlbCAodXNpbmcKKyAgICAgIDxsaXRlcmFsPmFsdGVyIGRhdGFi YXNlIC4uLiBzZXQ8L2xpdGVyYWw+KSwgb3IgYXQgdGhlIHJvbGUgbGV2ZWwgKHVzaW5nCisg ICAgICA8bGl0ZXJhbD5hbHRlciByb2xlIC4uLiBzZXQ8L2xpdGVyYWw+KS4KKyAgICAgIDwv cGFyYT4KKyAgICA8L3NlY3QzPgorCisgICAgPHNlY3QzPgorICAgICAgPHRpdGxlPkV4YW1w bGVzPC90aXRsZT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFNldCA8bGl0ZXJhbD5wZ19h dWRpdC5yb2xlID0gJ2F1ZGl0JzwvbGl0ZXJhbD4gaW4KKyAgICAgICAgPGxpdGVyYWw+cG9z dGdyZXNxbC5jb25mPC9saXRlcmFsPi4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+ CisgICAgICAgIFNRTDoKKyAgICAgIDwvcGFyYT4KKworICAgICAgICA8cHJvZ3JhbWxpc3Rp bmc+CitjcmVhdGUgdGFibGUgYWNjb3VudAorKAorICAgIGlkIGludCwKKyAgICBuYW1lIHRl eHQsCisgICAgcGFzc3dvcmQgdGV4dCwKKyAgICBkZXNjcmlwdGlvbiB0ZXh0CispOworCitn cmFudCBzZWxlY3QgKHBhc3N3b3JkKQorICAgb24gcHVibGljLmFjY291bnQKKyAgIHRvIGF1 ZGl0OworCitzZWxlY3QgaWQsIG5hbWUKKyAgZnJvbSBhY2NvdW50OworCitzZWxlY3QgcGFz c3dvcmQKKyAgZnJvbSBhY2NvdW50OworCitncmFudCB1cGRhdGUgKG5hbWUsIHBhc3N3b3Jk KQorICAgb24gcHVibGljLmFjY291bnQKKyAgIHRvIGF1ZGl0OworCit1cGRhdGUgYWNjb3Vu dAorICAgc2V0IGRlc2NyaXB0aW9uID0gJ3lhZGEsIHlhZGEnOworCit1cGRhdGUgYWNjb3Vu dAorICAgc2V0IHBhc3N3b3JkID0gJ0hBU0gyJzsKKworY3JlYXRlIHRhYmxlIGFjY291bnRf cm9sZV9tYXAKKygKKyAgICBhY2NvdW50X2lkIGludCwKKyAgICByb2xlX2lkIGludAorKTsK KworZ3JhbnQgc2VsZWN0CisgICBvbiBwdWJsaWMuYWNjb3VudF9yb2xlX21hcAorICAgdG8g YXVkaXQ7CisKK3NlbGVjdCBhY2NvdW50LnBhc3N3b3JkLAorICAgICAgIGFjY291bnRfcm9s ZV9tYXAucm9sZV9pZAorICBmcm9tIGFjY291bnQKKyAgICAgICBpbm5lciBqb2luIGFjY291 bnRfcm9sZV9tYXAKKyAgICAgICAgICAgIG9uIGFjY291bnQuaWQgPSBhY2NvdW50X3JvbGVf bWFwLmFjY291bnRfaWQKKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKworICAgICAgPHBh cmE+CisgICAgICAgIExvZyBPdXRwdXQ6CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwcm9n cmFtbGlzdGluZz4KK0FVRElUOiBPQkpFQ1QsUkVBRCxTRUxFQ1QsVEFCTEUscHVibGljLmFj Y291bnQsc2VsZWN0IHBhc3N3b3JkCisgIGZyb20gYWNjb3VudAorQVVESVQ6IE9CSkVDVCxX UklURSxVUERBVEUsVEFCTEUscHVibGljLmFjY291bnQsdXBkYXRlIGFjY291bnQKKyAgIHNl dCBwYXNzd29yZCA9ICdIQVNIMicKK0FVRElUOiBPQkpFQ1QsUkVBRCxTRUxFQ1QsVEFCTEUs cHVibGljLmFjY291bnQsc2VsZWN0IGFjY291bnQucGFzc3dvcmQsCisgICAgICAgYWNjb3Vu dF9yb2xlX21hcC5yb2xlX2lkCisgIGZyb20gYWNjb3VudAorICAgICAgIGlubmVyIGpvaW4g YWNjb3VudF9yb2xlX21hcAorICAgICAgICAgICAgb24gYWNjb3VudC5pZCA9IGFjY291bnRf cm9sZV9tYXAuYWNjb3VudF9pZAorQVVESVQ6IE9CSkVDVCxSRUFELFNFTEVDVCxUQUJMRSxw dWJsaWMuYWNjb3VudF9yb2xlX21hcCxzZWxlY3QgYWNjb3VudC5wYXNzd29yZCwKKyAgICAg ICBhY2NvdW50X3JvbGVfbWFwLnJvbGVfaWQKKyAgZnJvbSBhY2NvdW50CisgICAgICAgaW5u ZXIgam9pbiBhY2NvdW50X3JvbGVfbWFwCisgICAgICAgICAgICBvbiBhY2NvdW50LmlkID0g YWNjb3VudF9yb2xlX21hcC5hY2NvdW50X2lkCisgICAgICA8L3Byb2dyYW1saXN0aW5nPgor ICAgIDwvc2VjdDM+CisgIDwvc2VjdDI+CisKKyAgPHNlY3QyPgorICAgIDx0aXRsZT5Gb3Jt YXQ8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICBBdWRpdCBlbnRyaWVzIGFyZSB3cml0 dGVuIHRvIHRoZSBzdGFuZGFyZCBsb2dnaW5nIGZhY2lsaXR5IGFuZCBjb250YWluCisgICAg ICB0aGUgZm9sbG93aW5nIGNvbHVtbnMgaW4gY29tbWEtc2VwYXJhdGVkIGZvcm1hdDoKKwor ICAgICAgPG5vdGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIE91dHB1dCBpcyBjb21w bGlhbnQgQ1NWIGZvcm1hdCBvbmx5IGlmIHRoZSBsb2cgbGluZSBwcmVmaXggcG9ydGlvbgor ICAgICAgICAgIG9mIGVhY2ggbG9nIGVudHJ5IGlzIHJlbW92ZWQuCisgICAgICAgIDwvcGFy YT4KKyAgICAgIDwvbm90ZT4KKworICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgPGxp c3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGxpdGVyYWw+QVVESVRf VFlQRTwvbGl0ZXJhbD4gLSA8bGl0ZXJhbD5TRVNTSU9OPC9saXRlcmFsPiBvcgorICAgICAg ICAgICAgPGxpdGVyYWw+T0JKRUNUPC9saXRlcmFsPi4KKyAgICAgICAgICA8L3BhcmE+Cisg ICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFy YT4KKyAgICAgICAgICAgIDxsaXRlcmFsPlNUQVRFTUVOVF9JRDwvbGl0ZXJhbD4gLSBVbmlx dWUgc3RhdGVtZW50IElEIGZvciB0aGlzCisgICAgICAgICAgICBzZXNzaW9uLiAgRWFjaCBz dGF0ZW1lbnQgSUQgcmVwcmVzZW50cyBhIGJhY2tlbmQgY2FsbC4KKyAgICAgICAgICA8L3Bh cmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAg ICA8cGFyYT4KKyAgICAgICAgICAgIDxsaXRlcmFsPlNVQlNUQVRFTUVOVF9JRDwvbGl0ZXJh bD4gLSBTZXF1ZW50aWFsIElEIGZvciBlYWNoCisgICAgICAgICAgICBzdWJzdGF0ZW1lbnQg d2l0aGluIHRoZSBtYWluIHN0YXRlbWVudC4gIEZvciBleGFtcGxlLCBjYWxsaW5nCisgICAg ICAgICAgICBhIGZ1bmN0aW9uIGZyb20gYSBxdWVyeS4KKyAgICAgICAgICA8L3BhcmE+Cisg ICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFy YT4KKyAgICAgICAgICAgIDxsaXRlcmFsPkNMQVNTPC9saXRlcmFsPiAtIDxsaXRlcmFsPlJF QUQ8L2xpdGVyYWw+LAorICAgICAgICAgICAgPGxpdGVyYWw+V1JJVEU8L2xpdGVyYWw+LCA8 bGl0ZXJhbD5GVU5DVElPTjwvbGl0ZXJhbD4sCisgICAgICAgICAgICA8bGl0ZXJhbD5EREw8 L2xpdGVyYWw+LCBvciA8bGl0ZXJhbD5NSVNDPC9saXRlcmFsPi4KKyAgICAgICAgICA8L3Bh cmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAg ICA8cGFyYT4KKyAgICAgICAgICAgIDxsaXRlcmFsPkNPTU1BTkQ8L2xpdGVyYWw+IC0gPGxp dGVyYWw+QUxURVIgVEFCTEU8L2xpdGVyYWw+LAorICAgICAgICAgICAgPGxpdGVyYWw+U0VM RUNUPC9saXRlcmFsPiwgPGxpdGVyYWw+Q1JFQVRFIElOREVYPC9saXRlcmFsPiwKKyAgICAg ICAgICAgIDxsaXRlcmFsPlVQREFURTwvbGl0ZXJhbD4sIGV0Yy4KKyAgICAgICAgICA8L3Bh cmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAg ICA8cGFyYT4KKyAgICAgICAgICAgIDxsaXRlcmFsPk9CSkVDVF9UWVBFPC9saXRlcmFsPiAt IDxsaXRlcmFsPlRBQkxFPC9saXRlcmFsPiwKKyAgICAgICAgICAgIDxsaXRlcmFsPklOREVY PC9saXRlcmFsPiwgPGxpdGVyYWw+VklFVzwvbGl0ZXJhbD4sIGV0Yy4gIE9ubHkKKyAgICAg ICAgICAgIGF2YWlsYWJsZSBmb3IgRE1MIGFuZCBjZXJ0YWluIERETCBjb21tYW5kcy4KKyAg ICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRl bT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxsaXRlcmFsPk9CSkVDVF9OQU1F PC9saXRlcmFsPiAtIFRoZSBmdWxseS1xdWFsaWZpZWQgb2JqZWN0IG5hbWUKKyAgICAgICAg ICAgIChlLmcuIHB1YmxpYy5hY2NvdW50KS4gIE9ubHkgYXZhaWxhYmxlIGZvciBETUwgYW5k IGNlcnRhaW4gRERMCisgICAgICAgICAgICBjb21tYW5kcy4KKyAgICAgICAgICA8L3BhcmE+ CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8 cGFyYT4KKyAgICAgICAgICAgIDxsaXRlcmFsPlNUQVRFTUVOVDwvbGl0ZXJhbD4gLSBTdGF0 ZW1lbnQgZXhlY3V0ZSBvbiB0aGUgYmFja2VuZC4KKyAgICAgICAgICA8L3BhcmE+CisgICAg ICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+Cisg IDwvc2VjdDI+CisKKyAgPHNlY3QyPgorICAgIDx0aXRsZT5BdXRob3JzPC90aXRsZT4KKwor ICAgIDxwYXJhPgorICAgICAgQWJoaWppdCBNZW5vbi1TZW4gPGVtYWlsPmFtc0AybmRRdWFk cmFudC5jb208L2VtYWlsPiwgSWFuIEJhcndpY2sgPGVtYWlsPmlhbkAybmRRdWFkcmFudC5j b208L2VtYWlsPiwgYW5kIERhdmlkIFN0ZWVsZSA8ZW1haWw+ZGF2aWRAcGdtYXN0ZXJzLm5l dDwvZW1haWw+LgorICAgIDwvcGFyYT4KKyAgPC9zZWN0Mj4KKzwvc2VjdDE+Cg== --------------080708060604090208060604-- --7uVK9cfBC8hsvB44K8sNd0wI2rujkkCIb Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIcBAEBCAAGBQJVHC8LAAoJEIA2uIJQ5SFArTUQAJlSVg7KRmKRuddfIkPeU85A /XfXyfuKubMFS2gpsWV4PY5rAQkpMqyJ2GRNUqD2CzVWEDFNEkzf15MPujLy5Enk TS4Q32mX27cyOJOvN7YP1xVUS0JhaXpbFsFouLzts1WTHUVRx+tmzdkj6jCGo7EI NM9DUQJ7PhC4mZw35QB9KCF1sbAlUpNX2GOOd5Nk7L1Rn/64+CibU0v0Aeg5l8Ki l4JR0Pwt+PBdbgZUNbP48QqHiP7oDqgxDZrdMDoxlIKwDR8/8ppWdUDXi8r0MM7j m90mgscCbb9kdUbLtVhpkCxN6w3nPcMUekQW11n280YPw+NrnuBd9A4sWimBd5g8 Zopjp+qr+fb1Pz40jhNhojSm001J5NvQqZQZ94ZPtAnKW5nJJkPBVCVWkfcQgZHA Qs5fM2jBJVNkzwE0Q9WBGcF/11nTiTU1ijP1WhuI5qkvY/VgCme3qzsnKFYhbQdt fDm4oNd97AC6C0qK2jNvWiajMfdTcSoMS38vrYuoKjBtrJKySuziKvzMTEj/Di/I 1hszc3FrJ/jOfADlksAx0MVwQNbRSCaLWgxtoTiMEAM0Rlbm5rO+obHnoZ5n2jgc wg/7nBEuWCkui34Pmu98i2kqsuyc+hXjCJXzNzx+Wj38YK52NtikQaMiWMjJu35w baIbQRLlS0o2bz4lRPjf =FlJT -----END PGP SIGNATURE----- --7uVK9cfBC8hsvB44K8sNd0wI2rujkkCIb--