From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30679 invoked by alias); 17 Aug 2006 09:41:18 -0000 Received: (qmail 30669 invoked by uid 22791); 17 Aug 2006 09:41:17 -0000 X-Spam-Check-By: sourceware.org Received: from outdoor.onevision.de (HELO outdoor.onevision.de) (212.77.172.51) by sourceware.org (qpsmtpd/0.31) with ESMTP; Thu, 17 Aug 2006 09:41:14 +0000 Received: from sanders.onevision.de (moonrace [212.77.172.62]) by outdoor.onevision.de (8.13.7/8.13.7/ROSCH/DDB) with ESMTP id k7H9erZ3014284 for ; Thu, 17 Aug 2006 11:40:58 +0200 To: binutils@sourceware.org Subject: PE+ and new COFF format for x86_64 target for XP64 and Vista binaries MIME-Version: 1.0 X-Mailer: Lotus Notes Release 7.0.1 January 17, 2006 Message-ID: From: Kai Tietz Date: Thu, 17 Aug 2006 16:25:00 -0000 Content-Type: multipart/mixed; boundary="=_mixed 003527DBC12571CD_=" X-IsSubscribed: yes Mailing-List: contact binutils-help@sourceware.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: binutils-owner@sourceware.org X-SW-Source: 2006-08/txt/msg00198.txt.bz2 --=_mixed 003527DBC12571CD_= Content-Type: text/plain; charset="US-ASCII" Content-length: 1461 Hallo, This is a port of binutils-2.17 for COFF-format x86-64 (AMD64) and the PE+ for Windows XP64 and Vista EXE/DLL. The target is named x86_64-pc-mingw64. I enabled windres and dlltool for this target. For the tool objdump the processing and printing methods for DLL-imports are adjusted (they are now 8 bytes long :( ) I made a copy of the pe_dll(.c&.h) as pep_dll(.c&.h) to minimize intersections. May these files can be merged. In the "include/coff/external.h" I introduced the proper PE+ external aouthdr structure without the data_start member. Because this non-existing member breaks the size of the PEPAOUT structure in include/coff/pe.h. For the bfd/pexxigen.c template I used the pex64 name alias for generation. I added the following new files: bfd/coff-x86_64.c bfd/pe-x86_64.c bfd/pei-x86_64.c gas/config/te-pep.h include/coff/x86_54.h ld/pep_dll.c ld/pep_dll.h ld/emulparams/i386pep.sh ld/emultempl/pep.em ld/scripttempl/pep.sc I tested the ld of this target by MSVC object-files and by (a patched) gcc object-files (using this gas) linking against MS-Runtime-libraries. i.A. Kai Tietz ---------------------------------------- Kai Tietz - Software engineering OneVision Software Entwicklungs GmbH & Co KG Dr.-Leo-Ritter-Str. 9, 93049 Regensburg, Germany Phone: +49-941-78004-0 FAX: +49-941-78004-489 WWW: http://www.OneVision.com --=_mixed 003527DBC12571CD_= Content-Type: application/octet-stream; name="binutils-2.17.pex64.diff" Content-Disposition: attachment; filename="binutils-2.17.pex64.diff" Content-Transfer-Encoding: base64 Content-length: 294988 ZGlmZiAtck5idSBiaW51dGlscy0yLjE3X29yZy9iZmQvTWFrZWZpbGUuYW0g YmludXRpbHMtMi4xNy9iZmQvTWFrZWZpbGUuYW0KLS0tIGJpbnV0aWxzLTIu MTdfb3JnL2JmZC9NYWtlZmlsZS5hbQkyMDA2LTA2LTIzIDIwOjE3OjE3LjAw MDAwMDAwMCArMDIwMAorKysgYmludXRpbHMtMi4xNy9iZmQvTWFrZWZpbGUu YW0JMjAwNi0wOC0wOSAxMDoxNjo1NC4wMDAwMDAwMDAgKzAyMDAKQEAgLTU1 NSw3ICs1NTUsMTEgQEAKIAltbW8ubG8gXAogCW5sbTMyLWFscGhhLmxvIFwK IAlubG02NC5sbyBcCi0JcGVwaWdlbi5sbworCWNvZmYteDg2XzY0LmxvIFwK KwlwZS14ODZfNjQubG8gXAorCXBlaS14ODZfNjQubG8gXAorCXBlcGlnZW4u bG8gXAorCXBleDY0aWdlbi5sbwogCiBCRkQ2NF9CQUNLRU5EU19DRklMRVMg PSBcCiAJYWl4NXBwYy1jb3JlLmMgXApAQCAtNTc4LDYgKzU4Miw5IEBACiAJ ZWxmNjQuYyBcCiAJbW1vLmMgXAogCW5sbTMyLWFscGhhLmMgXAorCWNvZmYt eDg2XzY0LmMgXAorCXBlLXg4Nl82NC5jIFwKKwlwZWkteDg2XzY0LmMgXAog CW5sbTY0LmMKIAogT1BUSU9OQUxfQkFDS0VORFMgPSBcCkBAIC02MjgsNyAr NjM1LDcgQEAKIAkkKE9QVElPTkFMX0JBQ0tFTkRTX0NGSUxFUykKIAogQlVJ TERfQ0ZJTEVTID0gXAotCWVsZjMyLWlhNjQuYyBlbGY2NC1pYTY0LmMgcGVp Z2VuLmMgcGVwaWdlbi5jCisJZWxmMzItaWE2NC5jIGVsZjY0LWlhNjQuYyBw ZWlnZW4uYyBwZXBpZ2VuLmMgcGV4NjRpZ2VuLmMKIAogQ0ZJTEVTID0gJChT T1VSQ0VfQ0ZJTEVTKSAkKEJVSUxEX0NGSUxFUykKIApAQCAtNzgxLDYgKzc4 OCwxMSBAQAogCXNlZCAtZSBzL1hYL3BlL2cgPCAkKHNyY2RpcikvcGVYWGln ZW4uYyA+IHBlaWdlbi5uZXcKIAltdiAtZiBwZWlnZW4ubmV3IHBlaWdlbi5j CiAKK3BleDY0aWdlbi5jIDogcGVYWGlnZW4uYworCXJtIC1mIHBleDY0aWdl bi5jCisJc2VkIC1lIHMvWFgvcGV4NjQvZyA8ICQoc3JjZGlyKS9wZVhYaWdl bi5jID4gcGV4NjRpZ2VuLm5ldworCW12IC1mIHBleDY0aWdlbi5uZXcgcGV4 NjRpZ2VuLmMKKwogcGVwaWdlbi5jIDogcGVYWGlnZW4uYwogCXJtIC1mIHBl cGlnZW4uYwogCXNlZCAtZSBzL1hYL3BlcC9nIDwgJChzcmNkaXIpL3BlWFhp Z2VuLmMgPiBwZXBpZ2VuLm5ldwpAQCAtMTgzMCw2ICsxODQyLDkgQEAKICAg JChJTkNESVIpL2VsZi9leHRlcm5hbC5oICQoSU5DRElSKS9iZmRsaW5rLmgg JChJTkNESVIpL29wY29kZS9pYTY0LmggXAogICAkKElOQ0RJUikvZWxmL2lh NjQuaCAkKElOQ0RJUikvZWxmL3JlbG9jLW1hY3Jvcy5oICQoSU5DRElSKS9v YmphbGxvYy5oIFwKICAgZWxmNjQtdGFyZ2V0LmgKK3BleDY0aWdlbi5sbzog cGV4NjRpZ2VuLmMgJChJTkNESVIpL2ZpbGVuYW1lcy5oICQoSU5DRElSKS9o YXNodGFiLmggXAorICAkKElOQ0RJUikvY29mZi9pbnRlcm5hbC5oICQoSU5D RElSKS9jb2ZmL3g4Nl82NC5oICQoSU5DRElSKS9jb2ZmL2V4dGVybmFsLmgg XAorICAkKElOQ0RJUikvY29mZi9wZS5oIGxpYmNvZmYuaCAkKElOQ0RJUikv YmZkbGluay5oIGxpYnBlaS5oCiBwZWlnZW4ubG86IHBlaWdlbi5jICQoSU5D RElSKS9maWxlbmFtZXMuaCAkKElOQ0RJUikvaGFzaHRhYi5oIFwKICAgJChJ TkNESVIpL2NvZmYvaW50ZXJuYWwuaCAkKElOQ0RJUikvY29mZi9pMzg2Lmgg JChJTkNESVIpL2NvZmYvZXh0ZXJuYWwuaCBcCiAgICQoSU5DRElSKS9jb2Zm L3BlLmggbGliY29mZi5oICQoSU5DRElSKS9iZmRsaW5rLmggbGlicGVpLmgK ZGlmZiAtck5idSBiaW51dGlscy0yLjE3X29yZy9iZmQvTWFrZWZpbGUuaW4g YmludXRpbHMtMi4xNy9iZmQvTWFrZWZpbGUuaW4KLS0tIGJpbnV0aWxzLTIu MTdfb3JnL2JmZC9NYWtlZmlsZS5pbgkyMDA2LTA2LTIzIDIwOjE3OjE5LjAw MDAwMDAwMCArMDIwMAorKysgYmludXRpbHMtMi4xNy9iZmQvTWFrZWZpbGUu aW4JMjAwNi0wOC0wOSAxMDoxNzo1Ni4wMDAwMDAwMDAgKzAyMDAKQEAgLTc5 Myw3ICs3OTMsMTEgQEAKIAltbW8ubG8gXAogCW5sbTMyLWFscGhhLmxvIFwK IAlubG02NC5sbyBcCi0JcGVwaWdlbi5sbworCWNvZmYteDg2XzY0LmxvIFwK KwlwZS14ODZfNjQubG8gXAorCXBlaS14ODZfNjQubG8gXAorCXBlcGlnZW4u bG8gXAorCXBleDY0aWdlbi5sbwogCiBCRkQ2NF9CQUNLRU5EU19DRklMRVMg PSBcCiAJYWl4NXBwYy1jb3JlLmMgXApAQCAtODE2LDYgKzgyMCw5IEBACiAJ ZWxmNjQuYyBcCiAJbW1vLmMgXAogCW5sbTMyLWFscGhhLmMgXAorCWNvZmYt eDg2XzY0LmMgXAorCXBlLXg4Nl82NC5jIFwKKwlwZWkteDg2XzY0LmMgXAog CW5sbTY0LmMKIAogT1BUSU9OQUxfQkFDS0VORFMgPSBcCkBAIC04NjcsNyAr ODc0LDcgQEAKIAkkKE9QVElPTkFMX0JBQ0tFTkRTX0NGSUxFUykKIAogQlVJ TERfQ0ZJTEVTID0gXAotCWVsZjMyLWlhNjQuYyBlbGY2NC1pYTY0LmMgcGVp Z2VuLmMgcGVwaWdlbi5jCisJZWxmMzItaWE2NC5jIGVsZjY0LWlhNjQuYyBw ZWlnZW4uYyBwZXBpZ2VuLmMgcGV4NjRpZ2VuLmMKIAogQ0ZJTEVTID0gJChT T1VSQ0VfQ0ZJTEVTKSAkKEJVSUxEX0NGSUxFUykKIFNPVVJDRV9IRklMRVMg PSBcCkBAIC0xMzY1LDYgKzEzNzIsMTEgQEAKIAlzZWQgLWUgcy9YWC9wZS9n IDwgJChzcmNkaXIpL3BlWFhpZ2VuLmMgPiBwZWlnZW4ubmV3CiAJbXYgLWYg cGVpZ2VuLm5ldyBwZWlnZW4uYwogCitwZXg2NGlnZW4uYyA6IHBlWFhpZ2Vu LmMKKwlybSAtZiBwZXg2NGlnZW4uYworCXNlZCAtZSBzL1hYL3BleDY0L2cg PCAkKHNyY2RpcikvcGVYWGlnZW4uYyA+IHBleDY0aWdlbi5uZXcKKwltdiAt ZiBwZXg2NGlnZW4ubmV3IHBleDY0aWdlbi5jCisJCiBwZXBpZ2VuLmMgOiBw ZVhYaWdlbi5jCiAJcm0gLWYgcGVwaWdlbi5jCiAJc2VkIC1lIHMvWFgvcGVw L2cgPCAkKHNyY2RpcikvcGVYWGlnZW4uYyA+IHBlcGlnZW4ubmV3CkBAIC0y Mzk5LDYgKzI0MTEsOSBAQAogcGVpZ2VuLmxvOiBwZWlnZW4uYyAkKElOQ0RJ UikvZmlsZW5hbWVzLmggJChJTkNESVIpL2hhc2h0YWIuaCBcCiAgICQoSU5D RElSKS9jb2ZmL2ludGVybmFsLmggJChJTkNESVIpL2NvZmYvaTM4Ni5oICQo SU5DRElSKS9jb2ZmL2V4dGVybmFsLmggXAogICAkKElOQ0RJUikvY29mZi9w ZS5oIGxpYmNvZmYuaCAkKElOQ0RJUikvYmZkbGluay5oIGxpYnBlaS5oCitw ZXg2NGlnZW4ubG86IHBleDY0aWdlbi5jICQoSU5DRElSKS9maWxlbmFtZXMu aCAkKElOQ0RJUikvaGFzaHRhYi5oIFwKKyAgJChJTkNESVIpL2NvZmYvaW50 ZXJuYWwuaCAkKElOQ0RJUikvY29mZi94ODZfNjQuaCAkKElOQ0RJUikvY29m Zi9leHRlcm5hbC5oIFwKKyAgJChJTkNESVIpL2NvZmYvcGUuaCBsaWJjb2Zm LmggJChJTkNESVIpL2JmZGxpbmsuaCBsaWJwZWkuaAogcGVwaWdlbi5sbzog cGVwaWdlbi5jICQoSU5DRElSKS9maWxlbmFtZXMuaCAkKElOQ0RJUikvaGFz aHRhYi5oIFwKICAgJChJTkNESVIpL2NvZmYvaW50ZXJuYWwuaCAkKElOQ0RJ UikvY29mZi9pYTY0LmggJChJTkNESVIpL2NvZmYvZXh0ZXJuYWwuaCBcCiAg ICQoSU5DRElSKS9jb2ZmL3BlLmggbGliY29mZi5oICQoSU5DRElSKS9iZmRs aW5rLmggbGlicGVpLmgKZGlmZiAtck5idSBiaW51dGlscy0yLjE3X29yZy9i ZmQvYmZkLmMgYmludXRpbHMtMi4xNy9iZmQvYmZkLmMKLS0tIGJpbnV0aWxz LTIuMTdfb3JnL2JmZC9iZmQuYwkyMDA2LTAzLTE2IDEzOjIwOjE1LjAwMDAw MDAwMCArMDEwMAorKysgYmludXRpbHMtMi4xNy9iZmQvYmZkLmMJMjAwNi0w OC0wNCAxMTo0MjozOC4wMDAwMDAwMDAgKzAyMDAKQEAgLTg1OCw3ICs4NTgs OCBAQAogICAgICBhIHBsYWNlIHdpbGwgaGF2ZSB0byBiZSBmb3VuZC4gIFVu dGlsIHRoZW4sIHRoaXMgaGFjayB3aWxsIGRvLiAgKi8KICAgaWYgKHN0cm5j bXAgKG5hbWUsICJjb2ZmLWdvMzIiLCBzaXplb2YgKCJjb2ZmLWdvMzIiKSAt IDEpID09IDAKICAgICAgIHx8IHN0cmNtcCAobmFtZSwgInBlLWkzODYiKSA9 PSAwCi0gICAgICB8fCBzdHJjbXAgKG5hbWUsICJwZWktaTM4NiIpID09IDAp CisgICAgICB8fCBzdHJjbXAgKG5hbWUsICJwZWktaTM4NiIpID09IDAgfHwK KwkgIHN0cmNtcChuYW1lLCJwZS14ODYtNjQiKT09MCB8fCBzdHJjbXAobmFt ZSwicGVpLXg4Ni02NCIpKQogICAgIHJldHVybiAxOwogCiAgIGJmZF9zZXRf ZXJyb3IgKGJmZF9lcnJvcl93cm9uZ19mb3JtYXQpOwpkaWZmIC1yTmJ1IGJp bnV0aWxzLTIuMTdfb3JnL2JmZC9jb2ZmLXg4Nl82NC5jIGJpbnV0aWxzLTIu MTcvYmZkL2NvZmYteDg2XzY0LmMKLS0tIGJpbnV0aWxzLTIuMTdfb3JnL2Jm ZC9jb2ZmLXg4Nl82NC5jCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAw ICswMTAwCisrKyBiaW51dGlscy0yLjE3L2JmZC9jb2ZmLXg4Nl82NC5jCTIw MDYtMDgtMTcgMDk6MDY6MTUuMDAwMDAwMDAwICswMjAwCkBAIC0wLDAgKzEs NzI4IEBACisvKiBCRkQgYmFjay1lbmQgZm9yIEFNRCA2NCBDT0ZGIGZpbGVz LgorICAgQ29weXJpZ2h0IDE5OTUsIDE5OTYsIDE5OTksIDIwMDEsIDIwMDIs IDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRo aXMgZmlsZSBpcyBwYXJ0IG9mIEJGRCwgdGhlIEJpbmFyeSBGaWxlIERlc2Ny aXB0b3IgbGlicmFyeS4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK KyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNl bnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv bi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBu b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9u LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQgLSBGaWZ0aCBGbG9vciwgQm9z dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgICAKKyAgIFdyaXR0ZW4gYnkg S2FpIFRpZXR6LCBPbmVWaXNpb24gU29mdHdhcmUgR21iSCZDb0tnLgorKi8K KyNpZm5kZWYgQ09GRl9XSVRIX3BleDY0CisjZGVmaW5lIENPRkZfV0lUSF9w ZXg2NAorI2VuZGlmCisKKyNpbmNsdWRlICJiZmQuaCIKKyNpbmNsdWRlICJz eXNkZXAuaCIKKyNpbmNsdWRlICJsaWJiZmQuaCIKKworI2luY2x1ZGUgImNv ZmYveDg2XzY0LmgiCisjaW5jbHVkZSAiY29mZi9pbnRlcm5hbC5oIgorI2lu Y2x1ZGUgImNvZmYvcGUuaCIKKyNpbmNsdWRlICJsaWJjb2ZmLmgiCisKKyNk ZWZpbmUgQkFETUFHKHgpIEFNRDY0QkFETUFHKHgpCisKKyNpZmRlZiBDT0ZG X1dJVEhfcGV4NjQKKyMgdW5kZWYgQU9VVFNaCisjIGRlZmluZSBBT1VUU1oJ CVBFUEFPVVRTWgorIyBkZWZpbmUgUEVBT1VUSERSCVBFUEFPVVRIRFIKKyNl bmRpZgorCitzdGF0aWMgYmZkX3JlbG9jX3N0YXR1c190eXBlIGNvZmZfYW1k NjRfcmVsb2MoYmZkICosIGFyZWxlbnQgKiwgYXN5bWJvbCAqLCBQVFIsIGFz ZWN0aW9uICosIGJmZCAqLCBjaGFyICoqKTsKK3N0YXRpYyByZWxvY19ob3d0 b190eXBlICpjb2ZmX2FtZDY0X3J0eXBlX3RvX2hvd3RvKGJmZCAqLCBhc2Vj dGlvbiAqLCBzdHJ1Y3QgaW50ZXJuYWxfcmVsb2MgKixzdHJ1Y3QgY29mZl9s aW5rX2hhc2hfZW50cnkgKiwgc3RydWN0IGludGVybmFsX3N5bWVudCAqLGJm ZF92bWEgKik7CitzdGF0aWMgcmVsb2NfaG93dG9fdHlwZSAqY29mZl9hbWQ2 NF9yZWxvY190eXBlX2xvb2t1cChiZmQgKiwgYmZkX3JlbG9jX2NvZGVfcmVh bF90eXBlKTsKKworI2RlZmluZSBDT0ZGX0RFRkFVTFRfU0VDVElPTl9BTElH Tk1FTlRfUE9XRVIgKDIpCisvKiBUaGUgcGFnZSBzaXplIGlzIGEgZ3Vlc3Mg YmFzZWQgb24gRUxGLiAgKi8KKworI2RlZmluZSBDT0ZGX1BBR0VfU0laRSAw eDEwMDAKKworLyogRm9yIHNvbWUgcmVhc29uIHdoZW4gdXNpbmcgQU1EIENP RkYgdGhlIHZhbHVlIHN0b3JlZCBpbiB0aGUgLnRleHQKKyAgIHNlY3Rpb24g Zm9yIGEgcmVmZXJlbmNlIHRvIGEgY29tbW9uIHN5bWJvbCBpcyB0aGUgdmFs dWUgaXRzZWxmIHBsdXMKKyAgIGFueSBkZXNpcmVkIG9mZnNldC4gIElhbiBU YXlsb3IsIEN5Z251cyBTdXBwb3J0LiAgKi8KKworLyogSWYgd2UgYXJlIHBy b2R1Y2luZyByZWxvY2F0YWJsZSBvdXRwdXQsIHdlIG5lZWQgdG8gZG8gc29t ZQorICAgYWRqdXN0bWVudHMgdG8gdGhlIG9iamVjdCBmaWxlIHRoYXQgYXJl IG5vdCBkb25lIGJ5IHRoZQorICAgYmZkX3BlcmZvcm1fcmVsb2NhdGlvbiBm dW5jdGlvbi4gIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGV2ZXJ5Cisg ICByZWxvYyB0eXBlIHRvIG1ha2UgYW55IHJlcXVpcmVkIGFkanVzdG1lbnRz LiAgKi8KKworc3RhdGljIGJmZF9yZWxvY19zdGF0dXNfdHlwZQorY29mZl9h bWQ2NF9yZWxvYyhiZmQgKmFiZmQsYXJlbGVudCAqcmVsb2NfZW50cnksYXN5 bWJvbCAqc3ltYm9sLFBUUiBkYXRhLGFzZWN0aW9uICppbnB1dF9zZWN0aW9u IEFUVFJJQlVURV9VTlVTRUQsCisJCQkJIGJmZCAqb3V0cHV0X2JmZCxjaGFy ICoqZXJyb3JfbWVzc2FnZSBBVFRSSUJVVEVfVU5VU0VEKQoreworICBzeW12 YWx1ZSBkaWZmOworCisjaWZuZGVmIENPRkZfV0lUSF9QRQorICBpZihvdXRw dXRfYmZkID09IChiZmQgKikgTlVMTCkKKyAgICByZXR1cm4gYmZkX3JlbG9j X2NvbnRpbnVlOworI2VuZGlmCisKKyAgaWYoYmZkX2lzX2NvbV9zZWN0aW9u IChzeW1ib2wtPnNlY3Rpb24pKSB7CisjaWZuZGVmIENPRkZfV0lUSF9QRQor ICAgICAgLyogV2UgYXJlIHJlbG9jYXRpbmcgYSBjb21tb24gc3ltYm9sLiAg VGhlIGN1cnJlbnQgdmFsdWUgaW4gdGhlCisJIG9iamVjdCBmaWxlIGlzIE9S SUcgKyBPRkZTRVQsIHdoZXJlIE9SSUcgaXMgdGhlIHZhbHVlIG9mIHRoZQor CSBjb21tb24gc3ltYm9sIGFzIHNlZW4gYnkgdGhlIG9iamVjdCBmaWxlIHdo ZW4gaXQgd2FzIGNvbXBpbGVkCisJICh0aGlzIG1heSBiZSB6ZXJvIGlmIHRo ZSBzeW1ib2wgd2FzIHVuZGVmaW5lZCkgYW5kIE9GRlNFVCBpcworCSB0aGUg b2Zmc2V0IGludG8gdGhlIGNvbW1vbiBzeW1ib2wgKG5vcm1hbGx5IHplcm8s IGJ1dCBtYXkgYmUKKwkgbm9uLXplcm8gd2hlbiByZWZlcnJpbmcgdG8gYSBm aWVsZCBpbiBhIGNvbW1vbiBzdHJ1Y3R1cmUpLgorCSBPUklHIGlzIHRoZSBu ZWdhdGl2ZSBvZiByZWxvY19lbnRyeS0+YWRkZW5kLCB3aGljaCBpcyBzZXQg YnkKKwkgdGhlIENBTENfQURERU5EIG1hY3JvIGJlbG93LiAgV2Ugd2FudCB0 byByZXBsYWNlIHRoZSB2YWx1ZSBpbgorCSB0aGUgb2JqZWN0IGZpbGUgd2l0 aCBORVcgKyBPRkZTRVQsIHdoZXJlIE5FVyBpcyB0aGUgdmFsdWUgb2YKKwkg dGhlIGNvbW1vbiBzeW1ib2wgd2hpY2ggd2UgYXJlIGdvaW5nIHRvIHB1dCBp biB0aGUgZmluYWwKKwkgb2JqZWN0IGZpbGUuICBORVcgaXMgc3ltYm9sLT52 YWx1ZS4gICovCisgICAgICBkaWZmID0gc3ltYm9sLT52YWx1ZSArIHJlbG9j X2VudHJ5LT5hZGRlbmQ7CisjZWxzZQorICAgICAgLyogSW4gUEUgbW9kZSwg d2UgZG8gbm90IG9mZnNldCB0aGUgY29tbW9uIHN5bWJvbC4gICovCisgICAg ICBkaWZmID0gcmVsb2NfZW50cnktPmFkZGVuZDsKKyNlbmRpZgorICAgIH0K KyAgZWxzZQorICAgIHsKKyAgICAgIC8qIEZvciBzb21lIHJlYXNvbiBiZmRf cGVyZm9ybV9yZWxvY2F0aW9uIGFsd2F5cyBlZmZlY3RpdmVseQorCSBpZ25v cmVzIHRoZSBhZGRlbmQgZm9yIGEgQ09GRiB0YXJnZXQgd2hlbiBwcm9kdWNp bmcKKwkgcmVsb2NhdGFibGUgb3V0cHV0LiAgVGhpcyBzZWVtcyB0byBiZSBh bHdheXMgd3JvbmcgZm9yIDM4NgorCSBDT0ZGLCBzbyB3ZSBoYW5kbGUgdGhl IGFkZGVuZCBoZXJlIGluc3RlYWQuICAqLworI2lmZGVmIENPRkZfV0lUSF9Q RQorICAgICAgaWYob3V0cHV0X2JmZCA9PSAoYmZkICopIE5VTEwpCisJewor CSAgcmVsb2NfaG93dG9fdHlwZSAqaG93dG8gPSByZWxvY19lbnRyeS0+aG93 dG87CisKKwkgIC8qIEFsdGhvdWdoIFBDIHJlbGF0aXZlIHJlbG9jYXRpb25z IGFyZSB2ZXJ5IHNpbWlsYXIgYmV0d2VlbgorCSAgICAgUEUgYW5kIG5vbi1Q RSBmb3JtYXRzLCBidXQgdGhleSBhcmUgb2ZmIGJ5IDEgPDwgaG93dG8tPnNp emUKKwkgICAgIGJ5dGVzLiBGb3IgdGhlIGV4dGVybmFsIHJlbG9jYXRpb24s IFBFIGlzIHZlcnkgZGlmZmVyZW50CisJICAgICBmcm9tIG90aGVycy4gU2Vl IG1kX2FwcGx5X2ZpeDMgKCkgaW4gZ2FzL2NvbmZpZy90Yy1hbWQ2NC5jLgor CSAgICAgV2hlbiB3ZSBsaW5rIFBFIGFuZCBub24tUEUgb2JqZWN0IGZpbGVz IHRvZ2V0aGVyIHRvCisJICAgICBnZW5lcmF0ZSBhIG5vbi1QRSBleGVjdXRh YmxlLCB3ZSBoYXZlIHRvIGNvbXBlbnNhdGUgaXQKKwkgICAgIGhlcmUuICAq LworCSAgaWYoaG93dG8tPnBjX3JlbGF0aXZlICYmIGhvd3RvLT5wY3JlbF9v ZmZzZXQpCisJICAgIGRpZmYgPSAtKDEgPDwgaG93dG8tPnNpemUpOworCSAg ZWxzZSBpZihzeW1ib2wtPmZsYWdzICYgQlNGX1dFQUspCisJICAgIGRpZmYg PSByZWxvY19lbnRyeS0+YWRkZW5kIC0gc3ltYm9sLT52YWx1ZTsKKwkgIGVs c2UKKwkgICAgZGlmZiA9IC1yZWxvY19lbnRyeS0+YWRkZW5kOworCX0KKyAg ICAgIGVsc2UKKyNlbmRpZgorCWRpZmYgPSByZWxvY19lbnRyeS0+YWRkZW5k OworICAgIH0KKworI2lmZGVmIENPRkZfV0lUSF9QRQorICAvKiBGSVhNRTog SG93IHNob3VsZCB0aGlzIGNhc2UgYmUgaGFuZGxlZD8gICovCisgIGlmKHJl bG9jX2VudHJ5LT5ob3d0by0+dHlwZSA9PSBSX0FNRDY0X0lNQUdFQkFTRQor ICAgICAgJiYgb3V0cHV0X2JmZCE9TlVMTAorICAgICAgJiYgYmZkX2dldF9m bGF2b3VyKG91dHB1dF9iZmQpID09IGJmZF90YXJnZXRfY29mZl9mbGF2b3Vy KQorICAgIGRpZmYgLT0gcGVfZGF0YSAob3V0cHV0X2JmZCktPnBlX29wdGhk ci5JbWFnZUJhc2U7CisjZW5kaWYKKworI2RlZmluZSBET0lUKHgpIFwKKyAg eCA9ICgoeCAmIH5ob3d0by0+ZHN0X21hc2spIHwgKCgoeCAmIGhvd3RvLT5z cmNfbWFzaykgKyBkaWZmKSAmIGhvd3RvLT5kc3RfbWFzaykpCisKKyAgICBp ZihkaWZmIT0wKQorICAgICAgeworCXJlbG9jX2hvd3RvX3R5cGUgKmhvd3Rv ID0gcmVsb2NfZW50cnktPmhvd3RvOworCXVuc2lnbmVkIGNoYXIgKmFkZHIg PSAodW5zaWduZWQgY2hhciAqKSBkYXRhICsgcmVsb2NfZW50cnktPmFkZHJl c3M7CisKKwlzd2l0Y2ggKGhvd3RvLT5zaXplKQorCSAgeworCSAgY2FzZSAw OgorCSAgICB7CisJICAgICAgY2hhciB4ID0gYmZkX2dldF84IChhYmZkLCBh ZGRyKTsKKwkgICAgICBET0lUICh4KTsKKwkgICAgICBiZmRfcHV0XzggKGFi ZmQsIHgsIGFkZHIpOworCSAgICB9CisJICAgIGJyZWFrOworCisJICBjYXNl IDE6CisJICAgIHsKKwkgICAgICBzaG9ydCB4ID0gYmZkX2dldF8xNiAoYWJm ZCwgYWRkcik7CisJICAgICAgRE9JVCAoeCk7CisJICAgICAgYmZkX3B1dF8x NiAoYWJmZCwgKGJmZF92bWEpIHgsIGFkZHIpOworCSAgICB9CisJICAgIGJy ZWFrOworCisJICBjYXNlIDI6CisJICAgIHsKKwkgICAgICBsb25nIHggPSBi ZmRfZ2V0XzMyIChhYmZkLCBhZGRyKTsKKwkgICAgICBET0lUICh4KTsKKwkg ICAgICBiZmRfcHV0XzMyIChhYmZkLCAoYmZkX3ZtYSkgeCwgYWRkcik7CisJ ICAgIH0KKwkgICAgYnJlYWs7CisJICBjYXNlIDQ6CisJICAgIHsKKwkgICAg ICBsb25nIGxvbmcgeCA9IGJmZF9nZXRfNjQgKGFiZmQsIGFkZHIpOworCSAg ICAgIERPSVQgKHgpOworCSAgICAgIGJmZF9wdXRfNjQgKGFiZmQsIChiZmRf dm1hKSB4LCBhZGRyKTsKKwkgICAgfQorCSAgICBicmVhazsKKworCSAgZGVm YXVsdDoKKwkgICAgYWJvcnQgKCk7CisJICB9CisgICAgICB9CisKKyAgLyog Tm93IGxldCBiZmRfcGVyZm9ybV9yZWxvY2F0aW9uIGZpbmlzaCBldmVyeXRo aW5nIHVwLiAgKi8KKyAgcmV0dXJuIGJmZF9yZWxvY19jb250aW51ZTsKK30K KworI2lmZGVmIENPRkZfV0lUSF9QRQorLyogUmV0dXJuIFRSVUUgaWYgdGhp cyByZWxvY2F0aW9uIHNob3VsZCBhcHBlYXIgaW4gdGhlIG91dHB1dCAucmVs b2MKKyAgIHNlY3Rpb24uICAqLworCitzdGF0aWMgYmZkX2Jvb2xlYW4gaW5f cmVsb2NfcChiZmQgKiwgcmVsb2NfaG93dG9fdHlwZSAqKTsKKworc3RhdGlj IGJmZF9ib29sZWFuIGluX3JlbG9jX3AoYmZkICphYmZkIEFUVFJJQlVURV9V TlVTRUQscmVsb2NfaG93dG9fdHlwZSAqaG93dG8pCit7CisgIHJldHVybiAh IGhvd3RvLT5wY19yZWxhdGl2ZSAmJiBob3d0by0+dHlwZSE9Ul9BTUQ2NF9J TUFHRUJBU0U7Cit9CisjZW5kaWYgLyogQ09GRl9XSVRIX1BFICovCisKKyNp Zm5kZWYgUENSRUxPRkZTRVQKKyNkZWZpbmUgUENSRUxPRkZTRVQgVFJVRQor I2VuZGlmCisKK3N0YXRpYyByZWxvY19ob3d0b190eXBlIGhvd3RvX3RhYmxl W10gPQoreworICBFTVBUWV9IT1dUTyAoMCksCisgIEhPV1RPIChSX0FNRDY0 X0RJUjY0LAkJLyogdHlwZSAgMSovCisJIDAsCQkJLyogcmlnaHRzaGlmdCAq LworCSA0LAkJCS8qIHNpemUgKDAgPSBieXRlLCAxID0gc2hvcnQsIDIgPSBs b25nLCA0ID0gbG9uZyBsb25nKSAqLworCSA2NCwJCQkvKiBiaXRzaXplICov CisJIEZBTFNFLAkJCS8qIHBjX3JlbGF0aXZlICovCisJIDAsCQkJLyogYml0 cG9zICovCisJIGNvbXBsYWluX292ZXJmbG93X2JpdGZpZWxkLCAvKiBjb21w bGFpbl9vbl9vdmVyZmxvdyAqLworCSBjb2ZmX2FtZDY0X3JlbG9jLAkvKiBz cGVjaWFsX2Z1bmN0aW9uICovCisJICJkaXI2NCIsCQkvKiBuYW1lICovCisJ IFRSVUUsCQkJLyogcGFydGlhbF9pbnBsYWNlICovCisJIDB4ZmZmZmZmZmZm ZmZmZmZmZiwJCS8qIHNyY19tYXNrICovCisJIDB4ZmZmZmZmZmZmZmZmZmZm ZiwJCS8qIGRzdF9tYXNrICovCisJIFRSVUUpLAkJCS8qIHBjcmVsX29mZnNl dCAqLworICBIT1dUTyAoUl9BTUQ2NF9ESVIzMiwJCS8qIHR5cGUgMiAqLwor CSAwLAkJCS8qIHJpZ2h0c2hpZnQgKi8KKwkgMiwJCQkvKiBzaXplICgwID0g Ynl0ZSwgMSA9IHNob3J0LCAyID0gbG9uZykgKi8KKwkgMzIsCQkJLyogYml0 c2l6ZSAqLworCSBGQUxTRSwJCQkvKiBwY19yZWxhdGl2ZSAqLworCSAwLAkJ CS8qIGJpdHBvcyAqLworCSBjb21wbGFpbl9vdmVyZmxvd19iaXRmaWVsZCwg LyogY29tcGxhaW5fb25fb3ZlcmZsb3cgKi8KKwkgY29mZl9hbWQ2NF9yZWxv YywJLyogc3BlY2lhbF9mdW5jdGlvbiAqLworCSAiZGlyMzIiLAkJLyogbmFt ZSAqLworCSBUUlVFLAkJCS8qIHBhcnRpYWxfaW5wbGFjZSAqLworCSAweGZm ZmZmZmZmLAkJLyogc3JjX21hc2sgKi8KKwkgMHhmZmZmZmZmZiwJCS8qIGRz dF9tYXNrICovCisJIFRSVUUpLAkJCS8qIHBjcmVsX29mZnNldCAqLworICAv KiBQRSBJTUFHRV9SRUxfQU1ENjRfQUREUjMyTkIgcmVsb2NhdGlvbiAoMyku CSovCisgIEhPV1RPIChSX0FNRDY0X0lNQUdFQkFTRSwJCS8qIHR5cGUgKi8K KwkgMCwJCQkvKiByaWdodHNoaWZ0ICovCisJIDIsCQkJLyogc2l6ZSAoMCA9 IGJ5dGUsIDEgPSBzaG9ydCwgMiA9IGxvbmcpICovCisJIDMyLAkJCS8qIGJp dHNpemUgKi8KKwkgRkFMU0UsCQkJLyogcGNfcmVsYXRpdmUgKi8KKwkgMCwJ CQkvKiBiaXRwb3MgKi8KKwkgY29tcGxhaW5fb3ZlcmZsb3dfYml0ZmllbGQs IC8qIGNvbXBsYWluX29uX292ZXJmbG93ICovCisJIGNvZmZfYW1kNjRfcmVs b2MsCS8qIHNwZWNpYWxfZnVuY3Rpb24gKi8KKwkgInJ2YTMyIiwJCS8qIG5h bWUgKi8KKwkgVFJVRSwJCQkvKiBwYXJ0aWFsX2lucGxhY2UgKi8KKwkgMHhm ZmZmZmZmZiwJCS8qIHNyY19tYXNrICovCisJIDB4ZmZmZmZmZmYsCQkvKiBk c3RfbWFzayAqLworCSBGQUxTRSksCQkvKiBwY3JlbF9vZmZzZXQgKi8KKyAg LyogMzItYml0IGxvbmd3b3JkIFBDIHJlbGF0aXZlIHJlbG9jYXRpb24gKDQp LiAgKi8KKyAgSE9XVE8gKFJfQU1ENjRfUENSTE9ORywJCS8qIHR5cGUgNCAq LworCSAwLAkJCS8qIHJpZ2h0c2hpZnQgKi8KKwkgMiwJCQkvKiBzaXplICgw ID0gYnl0ZSwgMSA9IHNob3J0LCAyID0gbG9uZykgKi8KKwkgMzIsCQkJLyog Yml0c2l6ZSAqLworCSBUUlVFLAkJCS8qIHBjX3JlbGF0aXZlICovCisJIDAs CQkJLyogYml0cG9zICovCisJIGNvbXBsYWluX292ZXJmbG93X3NpZ25lZCwg LyogY29tcGxhaW5fb25fb3ZlcmZsb3cgKi8KKwkgY29mZl9hbWQ2NF9yZWxv YywJLyogc3BlY2lhbF9mdW5jdGlvbiAqLworCSAiRElTUDMyIiwJCS8qIG5h bWUgKi8KKwkgVFJVRSwJCQkvKiBwYXJ0aWFsX2lucGxhY2UgKi8KKwkgMHhm ZmZmZmZmZiwJCS8qIHNyY19tYXNrICovCisJIDB4ZmZmZmZmZmYsCQkvKiBk c3RfbWFzayAqLworCSBQQ1JFTE9GRlNFVCksCQkvKiBwY3JlbF9vZmZzZXQg Ki8KKworIEhPV1RPIChSX0FNRDY0X1BDUkxPTkdfMSwJCS8qIHR5cGUgNSAq LworCSAwLAkJCS8qIHJpZ2h0c2hpZnQgKi8KKwkgMiwJCQkvKiBzaXplICgw ID0gYnl0ZSwgMSA9IHNob3J0LCAyID0gbG9uZykgKi8KKwkgMzIsCQkJLyog Yml0c2l6ZSAqLworCSBUUlVFLAkJCS8qIHBjX3JlbGF0aXZlICovCisJIDAs CQkJLyogYml0cG9zICovCisJIGNvbXBsYWluX292ZXJmbG93X3NpZ25lZCwg LyogY29tcGxhaW5fb25fb3ZlcmZsb3cgKi8KKwkgY29mZl9hbWQ2NF9yZWxv YywJLyogc3BlY2lhbF9mdW5jdGlvbiAqLworCSAiRElTUDMyIiwJCS8qIG5h bWUgKi8KKwkgVFJVRSwJCQkvKiBwYXJ0aWFsX2lucGxhY2UgKi8KKwkgMHhm ZmZmZmZmZiwJCS8qIHNyY19tYXNrICovCisJIDB4ZmZmZmZmZmYsCQkvKiBk c3RfbWFzayAqLworCSBQQ1JFTE9GRlNFVCksCQkvKiBwY3JlbF9vZmZzZXQg Ki8KKyBIT1dUTyAoUl9BTUQ2NF9QQ1JMT05HXzIsCQkvKiB0eXBlIDYgKi8K KwkgMCwJCQkvKiByaWdodHNoaWZ0ICovCisJIDIsCQkJLyogc2l6ZSAoMCA9 IGJ5dGUsIDEgPSBzaG9ydCwgMiA9IGxvbmcpICovCisJIDMyLAkJCS8qIGJp dHNpemUgKi8KKwkgVFJVRSwJCQkvKiBwY19yZWxhdGl2ZSAqLworCSAwLAkJ CS8qIGJpdHBvcyAqLworCSBjb21wbGFpbl9vdmVyZmxvd19zaWduZWQsIC8q IGNvbXBsYWluX29uX292ZXJmbG93ICovCisJIGNvZmZfYW1kNjRfcmVsb2Ms CS8qIHNwZWNpYWxfZnVuY3Rpb24gKi8KKwkgIkRJU1AzMiIsCQkvKiBuYW1l ICovCisJIFRSVUUsCQkJLyogcGFydGlhbF9pbnBsYWNlICovCisJIDB4ZmZm ZmZmZmYsCQkvKiBzcmNfbWFzayAqLworCSAweGZmZmZmZmZmLAkJLyogZHN0 X21hc2sgKi8KKwkgUENSRUxPRkZTRVQpLAkJLyogcGNyZWxfb2Zmc2V0ICov CisgSE9XVE8gKFJfQU1ENjRfUENSTE9OR18zLAkJLyogdHlwZSA3ICovCisJ IDAsCQkJLyogcmlnaHRzaGlmdCAqLworCSAyLAkJCS8qIHNpemUgKDAgPSBi eXRlLCAxID0gc2hvcnQsIDIgPSBsb25nKSAqLworCSAzMiwJCQkvKiBiaXRz aXplICovCisJIFRSVUUsCQkJLyogcGNfcmVsYXRpdmUgKi8KKwkgMCwJCQkv KiBiaXRwb3MgKi8KKwkgY29tcGxhaW5fb3ZlcmZsb3dfc2lnbmVkLCAvKiBj b21wbGFpbl9vbl9vdmVyZmxvdyAqLworCSBjb2ZmX2FtZDY0X3JlbG9jLAkv KiBzcGVjaWFsX2Z1bmN0aW9uICovCisJICJESVNQMzIiLAkJLyogbmFtZSAq LworCSBUUlVFLAkJCS8qIHBhcnRpYWxfaW5wbGFjZSAqLworCSAweGZmZmZm ZmZmLAkJLyogc3JjX21hc2sgKi8KKwkgMHhmZmZmZmZmZiwJCS8qIGRzdF9t YXNrICovCisJIFBDUkVMT0ZGU0VUKSwJCS8qIHBjcmVsX29mZnNldCAqLwor IEhPV1RPIChSX0FNRDY0X1BDUkxPTkdfNCwJCS8qIHR5cGUgOCAqLworCSAw LAkJCS8qIHJpZ2h0c2hpZnQgKi8KKwkgMiwJCQkvKiBzaXplICgwID0gYnl0 ZSwgMSA9IHNob3J0LCAyID0gbG9uZykgKi8KKwkgMzIsCQkJLyogYml0c2l6 ZSAqLworCSBUUlVFLAkJCS8qIHBjX3JlbGF0aXZlICovCisJIDAsCQkJLyog Yml0cG9zICovCisJIGNvbXBsYWluX292ZXJmbG93X3NpZ25lZCwgLyogY29t cGxhaW5fb25fb3ZlcmZsb3cgKi8KKwkgY29mZl9hbWQ2NF9yZWxvYywJLyog c3BlY2lhbF9mdW5jdGlvbiAqLworCSAiRElTUDMyIiwJCS8qIG5hbWUgKi8K KwkgVFJVRSwJCQkvKiBwYXJ0aWFsX2lucGxhY2UgKi8KKwkgMHhmZmZmZmZm ZiwJCS8qIHNyY19tYXNrICovCisJIDB4ZmZmZmZmZmYsCQkvKiBkc3RfbWFz ayAqLworCSBQQ1JFTE9GRlNFVCksCQkvKiBwY3JlbF9vZmZzZXQgKi8KKyBI T1dUTyAoUl9BTUQ2NF9QQ1JMT05HXzUsCQkvKiB0eXBlIDkgKi8KKwkgMCwJ CQkvKiByaWdodHNoaWZ0ICovCisJIDIsCQkJLyogc2l6ZSAoMCA9IGJ5dGUs IDEgPSBzaG9ydCwgMiA9IGxvbmcpICovCisJIDMyLAkJCS8qIGJpdHNpemUg Ki8KKwkgVFJVRSwJCQkvKiBwY19yZWxhdGl2ZSAqLworCSAwLAkJCS8qIGJp dHBvcyAqLworCSBjb21wbGFpbl9vdmVyZmxvd19zaWduZWQsIC8qIGNvbXBs YWluX29uX292ZXJmbG93ICovCisJIGNvZmZfYW1kNjRfcmVsb2MsCS8qIHNw ZWNpYWxfZnVuY3Rpb24gKi8KKwkgIkRJU1AzMiIsCQkvKiBuYW1lICovCisJ IFRSVUUsCQkJLyogcGFydGlhbF9pbnBsYWNlICovCisJIDB4ZmZmZmZmZmYs CQkvKiBzcmNfbWFzayAqLworCSAweGZmZmZmZmZmLAkJLyogZHN0X21hc2sg Ki8KKwkgUENSRUxPRkZTRVQpLAkJLyogcGNyZWxfb2Zmc2V0ICovCisgIEVN UFRZX0hPV1RPICgxMCksIC8vIFJfQU1ENjRfU0VDVElPTiAxMAorI2lmZGVm IENPRkZfV0lUSF9QRQorICAvKiAzMi1iaXQgbG9uZ3dvcmQgc2VjdGlvbiBy ZWxhdGl2ZSByZWxvY2F0aW9uICgxMSkuICAqLworICBIT1dUTyAoUl9BTUQ2 NF9TRUNSRUwsCQkvKiB0eXBlICovCisJIDAsCQkJLyogcmlnaHRzaGlmdCAq LworCSAyLAkJCS8qIHNpemUgKDAgPSBieXRlLCAxID0gc2hvcnQsIDIgPSBs b25nKSAqLworCSAzMiwJCQkvKiBiaXRzaXplICovCisJIEZBTFNFLAkJCS8q IHBjX3JlbGF0aXZlICovCisJIDAsCQkJLyogYml0cG9zICovCisJIGNvbXBs YWluX292ZXJmbG93X2JpdGZpZWxkLCAvKiBjb21wbGFpbl9vbl9vdmVyZmxv dyAqLworCSBjb2ZmX2FtZDY0X3JlbG9jLAkvKiBzcGVjaWFsX2Z1bmN0aW9u ICovCisJICJzZWNyZWwzMiIsCQkvKiBuYW1lICovCisJIFRSVUUsCQkJLyog cGFydGlhbF9pbnBsYWNlICovCisJIDB4ZmZmZmZmZmYsCQkvKiBzcmNfbWFz ayAqLworCSAweGZmZmZmZmZmLAkJLyogZHN0X21hc2sgKi8KKwkgVFJVRSks CQkJLyogcGNyZWxfb2Zmc2V0ICovCisjZWxzZQorICBFTVBUWV9IT1dUTyAo MTEpLAorI2VuZGlmCisgIEVNUFRZX0hPV1RPICgxMiksCisgIEVNUFRZX0hP V1RPICgxMyksCisgIEVNUFRZX0hPV1RPICgxNCksCisgIC8qIEJ5dGUgcmVs b2NhdGlvbiAoMTUpLiAgKi8KKyAgSE9XVE8gKFJfUkVMQllURSwJCS8qIHR5 cGUgKi8KKwkgMCwJCQkvKiByaWdodHNoaWZ0ICovCisJIDAsCQkJLyogc2l6 ZSAoMCA9IGJ5dGUsIDEgPSBzaG9ydCwgMiA9IGxvbmcpICovCisJIDgsCQkJ LyogYml0c2l6ZSAqLworCSBGQUxTRSwJCQkvKiBwY19yZWxhdGl2ZSAqLwor CSAwLAkJCS8qIGJpdHBvcyAqLworCSBjb21wbGFpbl9vdmVyZmxvd19iaXRm aWVsZCwgLyogY29tcGxhaW5fb25fb3ZlcmZsb3cgKi8KKwkgY29mZl9hbWQ2 NF9yZWxvYywJLyogc3BlY2lhbF9mdW5jdGlvbiAqLworCSAiOCIsCQkJLyog bmFtZSAqLworCSBUUlVFLAkJCS8qIHBhcnRpYWxfaW5wbGFjZSAqLworCSAw eDAwMDAwMGZmLAkJLyogc3JjX21hc2sgKi8KKwkgMHgwMDAwMDBmZiwJCS8q IGRzdF9tYXNrICovCisJIFBDUkVMT0ZGU0VUKSwJCS8qIHBjcmVsX29mZnNl dCAqLworICAvKiAxNi1iaXQgd29yZCByZWxvY2F0aW9uICgxNikuICAqLwor ICBIT1dUTyAoUl9SRUxXT1JELAkJLyogdHlwZSAqLworCSAwLAkJCS8qIHJp Z2h0c2hpZnQgKi8KKwkgMSwJCQkvKiBzaXplICgwID0gYnl0ZSwgMSA9IHNo b3J0LCAyID0gbG9uZykgKi8KKwkgMTYsCQkJLyogYml0c2l6ZSAqLworCSBG QUxTRSwJCQkvKiBwY19yZWxhdGl2ZSAqLworCSAwLAkJCS8qIGJpdHBvcyAq LworCSBjb21wbGFpbl9vdmVyZmxvd19iaXRmaWVsZCwgLyogY29tcGxhaW5f b25fb3ZlcmZsb3cgKi8KKwkgY29mZl9hbWQ2NF9yZWxvYywJLyogc3BlY2lh bF9mdW5jdGlvbiAqLworCSAiMTYiLAkJCS8qIG5hbWUgKi8KKwkgVFJVRSwJ CQkvKiBwYXJ0aWFsX2lucGxhY2UgKi8KKwkgMHgwMDAwZmZmZiwJCS8qIHNy Y19tYXNrICovCisJIDB4MDAwMGZmZmYsCQkvKiBkc3RfbWFzayAqLworCSBQ Q1JFTE9GRlNFVCksCQkvKiBwY3JlbF9vZmZzZXQgKi8KKyAgLyogMzItYml0 IGxvbmd3b3JkIHJlbG9jYXRpb24gKDE3KS4JKi8KKyAgSE9XVE8gKFJfUkVM TE9ORywJCS8qIHR5cGUgKi8KKwkgMCwJCQkvKiByaWdodHNoaWZ0ICovCisJ IDIsCQkJLyogc2l6ZSAoMCA9IGJ5dGUsIDEgPSBzaG9ydCwgMiA9IGxvbmcp ICovCisJIDMyLAkJCS8qIGJpdHNpemUgKi8KKwkgRkFMU0UsCQkJLyogcGNf cmVsYXRpdmUgKi8KKwkgMCwJCQkvKiBiaXRwb3MgKi8KKwkgY29tcGxhaW5f b3ZlcmZsb3dfYml0ZmllbGQsIC8qIGNvbXBsYWluX29uX292ZXJmbG93ICov CisJIGNvZmZfYW1kNjRfcmVsb2MsCS8qIHNwZWNpYWxfZnVuY3Rpb24gKi8K KwkgIjMyIiwJCQkvKiBuYW1lICovCisJIFRSVUUsCQkJLyogcGFydGlhbF9p bnBsYWNlICovCisJIDB4ZmZmZmZmZmYsCQkvKiBzcmNfbWFzayAqLworCSAw eGZmZmZmZmZmLAkJLyogZHN0X21hc2sgKi8KKwkgUENSRUxPRkZTRVQpLAkJ LyogcGNyZWxfb2Zmc2V0ICovCisgIC8qIEJ5dGUgUEMgcmVsYXRpdmUgcmVs b2NhdGlvbiAoMTgpLgkgKi8KKyAgSE9XVE8gKFJfUENSQllURSwJCS8qIHR5 cGUgKi8KKwkgMCwJCQkvKiByaWdodHNoaWZ0ICovCisJIDAsCQkJLyogc2l6 ZSAoMCA9IGJ5dGUsIDEgPSBzaG9ydCwgMiA9IGxvbmcpICovCisJIDgsCQkJ LyogYml0c2l6ZSAqLworCSBUUlVFLAkJCS8qIHBjX3JlbGF0aXZlICovCisJ IDAsCQkJLyogYml0cG9zICovCisJIGNvbXBsYWluX292ZXJmbG93X3NpZ25l ZCwgLyogY29tcGxhaW5fb25fb3ZlcmZsb3cgKi8KKwkgY29mZl9hbWQ2NF9y ZWxvYywJLyogc3BlY2lhbF9mdW5jdGlvbiAqLworCSAiRElTUDgiLAkJLyog bmFtZSAqLworCSBUUlVFLAkJCS8qIHBhcnRpYWxfaW5wbGFjZSAqLworCSAw eDAwMDAwMGZmLAkJLyogc3JjX21hc2sgKi8KKwkgMHgwMDAwMDBmZiwJCS8q IGRzdF9tYXNrICovCisJIFBDUkVMT0ZGU0VUKSwJCS8qIHBjcmVsX29mZnNl dCAqLworICAvKiAxNi1iaXQgd29yZCBQQyByZWxhdGl2ZSByZWxvY2F0aW9u ICgxOSkuCSovCisgIEhPV1RPIChSX1BDUldPUkQsCQkvKiB0eXBlICovCisJ IDAsCQkJLyogcmlnaHRzaGlmdCAqLworCSAxLAkJCS8qIHNpemUgKDAgPSBi eXRlLCAxID0gc2hvcnQsIDIgPSBsb25nKSAqLworCSAxNiwJCQkvKiBiaXRz aXplICovCisJIFRSVUUsCQkJLyogcGNfcmVsYXRpdmUgKi8KKwkgMCwJCQkv KiBiaXRwb3MgKi8KKwkgY29tcGxhaW5fb3ZlcmZsb3dfc2lnbmVkLCAvKiBj b21wbGFpbl9vbl9vdmVyZmxvdyAqLworCSBjb2ZmX2FtZDY0X3JlbG9jLAkv KiBzcGVjaWFsX2Z1bmN0aW9uICovCisJICJESVNQMTYiLAkJLyogbmFtZSAq LworCSBUUlVFLAkJCS8qIHBhcnRpYWxfaW5wbGFjZSAqLworCSAweDAwMDBm ZmZmLAkJLyogc3JjX21hc2sgKi8KKwkgMHgwMDAwZmZmZiwJCS8qIGRzdF9t YXNrICovCisJIFBDUkVMT0ZGU0VUKSwJCS8qIHBjcmVsX29mZnNldCAqLwor ICAvKiAzMi1iaXQgbG9uZ3dvcmQgUEMgcmVsYXRpdmUgcmVsb2NhdGlvbiAo MjApLiAgKi8KKyAgSE9XVE8gKFJfUENSTE9ORywJCS8qIHR5cGUgKi8KKwkg MCwJCQkvKiByaWdodHNoaWZ0ICovCisJIDIsCQkJLyogc2l6ZSAoMCA9IGJ5 dGUsIDEgPSBzaG9ydCwgMiA9IGxvbmcpICovCisJIDMyLAkJCS8qIGJpdHNp emUgKi8KKwkgVFJVRSwJCQkvKiBwY19yZWxhdGl2ZSAqLworCSAwLAkJCS8q IGJpdHBvcyAqLworCSBjb21wbGFpbl9vdmVyZmxvd19zaWduZWQsIC8qIGNv bXBsYWluX29uX292ZXJmbG93ICovCisJIGNvZmZfYW1kNjRfcmVsb2MsCS8q IHNwZWNpYWxfZnVuY3Rpb24gKi8KKwkgIkRJU1AzMiIsCQkvKiBuYW1lICov CisJIFRSVUUsCQkJLyogcGFydGlhbF9pbnBsYWNlICovCisJIDB4ZmZmZmZm ZmYsCQkvKiBzcmNfbWFzayAqLworCSAweGZmZmZmZmZmLAkJLyogZHN0X21h c2sgKi8KKwkgUENSRUxPRkZTRVQpCQkvKiBwY3JlbF9vZmZzZXQgKi8KK307 CisKKy8qIFR1cm4gYSBob3d0byBpbnRvIGEgcmVsb2MgIG51bm1iZXIgKi8K KworI2RlZmluZSBTRUxFQ1RfUkVMT0MoeCxob3d0bykgeyB4LnJfdHlwZSA9 IGhvd3RvLT50eXBlOyB9CisjZGVmaW5lIEkzODYgMQkJCS8qIEN1c3RvbWl6 ZSBjb2ZmY29kZS5oICovCisjZGVmaW5lIEFNRDY0IDEKKyNkZWZpbmUgUlRZ UEUySE9XVE8oY2FjaGVfcHRyLCBkc3QpCQkJCQlcCisgICgoY2FjaGVfcHRy KS0+aG93dG8gPQkJCQkJCQlcCisgICAoKGRzdCktPnJfdHlwZSA8IHNpemVv ZiAoaG93dG9fdGFibGUpIC8gc2l6ZW9mIChob3d0b190YWJsZVswXSkJXAor ICAgID8gaG93dG9fdGFibGUgKyAoZHN0KS0+cl90eXBlCQkJCQlcCisgICAg OiBOVUxMKSkKKworLyogRm9yIDM4NiBDT0ZGIGEgU1RZUF9OT0xPQUQgfCBT VFlQX0JTUyBzZWN0aW9uIGlzIHBhcnQgb2YgYSBzaGFyZWQKKyAgIGxpYnJh cnkuICBPbiBzb21lIG90aGVyIENPRkYgdGFyZ2V0cyBTVFlQX0JTUyBpcyBu b3JtYWxseQorICAgU1RZUF9OT0xPQUQuICAqLworI2RlZmluZSBCU1NfTk9M T0FEX0lTX1NIQVJFRF9MSUJSQVJZCisKKy8qIENvbXB1dGUgdGhlIGFkZGVu ZCBvZiBhIHJlbG9jLiAgSWYgdGhlIHJlbG9jIGlzIHRvIGEgY29tbW9uIHN5 bWJvbCwKKyAgIHRoZSBvYmplY3QgZmlsZSBjb250YWlucyB0aGUgdmFsdWUg b2YgdGhlIGNvbW1vbiBzeW1ib2wuICBCeSB0aGUKKyAgIHRpbWUgdGhpcyBp cyBjYWxsZWQsIHRoZSBsaW5rZXIgbWF5IGJlIHVzaW5nIGEgZGlmZmVyZW50 IHN5bWJvbAorICAgZnJvbSBhIGRpZmZlcmVudCBvYmplY3QgZmlsZSB3aXRo IGEgZGlmZmVyZW50IHZhbHVlLiAgVGhlcmVmb3JlLCB3ZQorICAgaGFjayB3 aWxkbHkgdG8gbG9jYXRlIHRoZSBvcmlnaW5hbCBzeW1ib2wgZnJvbSB0aGlz IGZpbGUgc28gdGhhdCB3ZQorICAgY2FuIG1ha2UgdGhlIGNvcnJlY3QgYWRq dXN0bWVudC4gIFRoaXMgbWFjcm8gc2V0cyBjb2Zmc3ltIHRvIHRoZQorICAg c3ltYm9sIGZyb20gdGhlIG9yaWdpbmFsIGZpbGUsIGFuZCB1c2VzIGl0IHRv IHNldCB0aGUgYWRkZW5kIHZhbHVlCisgICBjb3JyZWN0bHkuICBJZiB0aGlz IGlzIG5vdCBhIGNvbW1vbiBzeW1ib2wsIHRoZSB1c3VhbCBhZGRlbmQKKyAg IGNhbGN1bGF0aW9uIGlzIGRvbmUsIGV4Y2VwdCB0aGF0IGFuIGFkZGl0aW9u YWwgdHdlYWsgaXMgbmVlZGVkIGZvcgorICAgUEMgcmVsYXRpdmUgcmVsb2Nz LgorICAgRklYTUU6IFRoaXMgbWFjcm8gcmVmZXJzIHRvIHN5bWJvbHMgYW5k IGFzZWN0OyB0aGVzZSBhcmUgZnJvbSB0aGUKKyAgIGNhbGxpbmcgZnVuY3Rp b24sIG5vdCB0aGUgbWFjcm8gYXJndW1lbnRzLiAgKi8KKworI2RlZmluZSBD QUxDX0FEREVORChhYmZkLCBwdHIsIHJlbG9jLCBjYWNoZV9wdHIpCQlcCisg IHsJCQkJCQkJCVwKKyAgICBjb2ZmX3N5bWJvbF90eXBlICpjb2Zmc3ltID0g KGNvZmZfc3ltYm9sX3R5cGUgKikgTlVMTDsJXAorICAgIGlmKHB0ciAmJiBi ZmRfYXN5bWJvbF9iZmQgKHB0cikhPWFiZmQpCQkJXAorICAgICAgY29mZnN5 bSA9IChvYmpfc3ltYm9scyAoYWJmZCkJCQkJXAorCSAgICAgICAgICsgKGNh Y2hlX3B0ci0+c3ltX3B0cl9wdHIgLSBzeW1ib2xzKSk7CQlcCisgICAgZWxz ZSBpZihwdHIpCQkJCQkJXAorICAgICAgY29mZnN5bSA9IGNvZmZfc3ltYm9s X2Zyb20gKGFiZmQsIHB0cik7CQkJXAorICAgIGlmKGNvZmZzeW0hPShjb2Zm X3N5bWJvbF90eXBlICopIE5VTEwJCQlcCisJJiYgY29mZnN5bS0+bmF0aXZl LT51LnN5bWVudC5uX3NjbnVtID09IDApCQlcCisgICAgICBjYWNoZV9wdHIt PmFkZGVuZCA9IC0gY29mZnN5bS0+bmF0aXZlLT51LnN5bWVudC5uX3ZhbHVl OwlcCisgICAgZWxzZSBpZihwdHIgJiYgYmZkX2FzeW1ib2xfYmZkIChwdHIp ID09IGFiZmQJCVwKKwkgICAgICYmIHB0ci0+c2VjdGlvbiE9KGFzZWN0aW9u ICopIE5VTEwpCQlcCisgICAgICBjYWNoZV9wdHItPmFkZGVuZCA9IC0gKHB0 ci0+c2VjdGlvbi0+dm1hICsgcHRyLT52YWx1ZSk7CVwKKyAgICBlbHNlCQkJ CQkJCVwKKyAgICAgIGNhY2hlX3B0ci0+YWRkZW5kID0gMDsJCQkJCVwKKyAg ICBpZihwdHIgJiYgaG93dG9fdGFibGVbcmVsb2Mucl90eXBlXS5wY19yZWxh dGl2ZSkJCVwKKyAgICAgIGNhY2hlX3B0ci0+YWRkZW5kICs9IGFzZWN0LT52 bWE7CQkJCVwKKyAgfQorCisvKiBXZSB1c2UgdGhlIHNwZWNpYWwgQ09GRiBi YWNrZW5kIGxpbmtlci4gIEZvciBub3JtYWwgQU1ENjQgQ09GRiwgd2UKKyAg IGNhbiB1c2UgdGhlIGdlbmVyaWMgcmVsb2NhdGVfc2VjdGlvbiByb3V0aW5l LiAgRm9yIFBFLCB3ZSBuZWVkIG91cgorICAgb3duIHJvdXRpbmUuICAqLwor CisjaWZuZGVmIENPRkZfV0lUSF9QRQorCisjZGVmaW5lIGNvZmZfcmVsb2Nh dGVfc2VjdGlvbiBfYmZkX2NvZmZfZ2VuZXJpY19yZWxvY2F0ZV9zZWN0aW9u CisKKyNlbHNlIC8qIENPRkZfV0lUSF9QRSAqLworCisvKiBUaGUgUEUgcmVs b2NhdGUgc2VjdGlvbiByb3V0aW5lLiAgVGhlIG9ubHkgZGlmZmVyZW5jZSBi ZXR3ZWVuIHRoaXMKKyAgIGFuZCB0aGUgcmVndWxhciByb3V0aW5lIGlzIHRo YXQgd2UgZG9uJ3Qgd2FudCB0byBkbyBhbnl0aGluZyBmb3IgYQorICAgcmVs b2NhdGFibGUgbGluay4gICovCisKK3N0YXRpYyBiZmRfYm9vbGVhbiBjb2Zm X3BlX2FtZDY0X3JlbG9jYXRlX3NlY3Rpb24oYmZkICosIHN0cnVjdCBiZmRf bGlua19pbmZvICosIGJmZCAqLCBhc2VjdGlvbiAqLCBiZmRfYnl0ZSAqLHN0 cnVjdCBpbnRlcm5hbF9yZWxvYyAqLCBzdHJ1Y3QgaW50ZXJuYWxfc3ltZW50 ICosIGFzZWN0aW9uICoqKTsKKworc3RhdGljIGJmZF9ib29sZWFuCitjb2Zm X3BlX2FtZDY0X3JlbG9jYXRlX3NlY3Rpb24oYmZkICpvdXRwdXRfYmZkLHN0 cnVjdCBiZmRfbGlua19pbmZvICppbmZvLGJmZCAqaW5wdXRfYmZkLGFzZWN0 aW9uICppbnB1dF9zZWN0aW9uLGJmZF9ieXRlICpjb250ZW50cyxzdHJ1Y3Qg aW50ZXJuYWxfcmVsb2MgKnJlbG9jcyxzdHJ1Y3QgaW50ZXJuYWxfc3ltZW50 ICpzeW1zLGFzZWN0aW9uICoqc2VjdGlvbnMpCit7CisgIGlmKGluZm8tPnJl bG9jYXRhYmxlKQorICAgIHJldHVybiBUUlVFOworCisgIHJldHVybiBfYmZk X2NvZmZfZ2VuZXJpY19yZWxvY2F0ZV9zZWN0aW9uKG91dHB1dF9iZmQsIGlu Zm8sIGlucHV0X2JmZCxpbnB1dF9zZWN0aW9uLCBjb250ZW50cyxyZWxvY3Ms IHN5bXMsIHNlY3Rpb25zKTsKK30KKworI2RlZmluZSBjb2ZmX3JlbG9jYXRl X3NlY3Rpb24gY29mZl9wZV9hbWQ2NF9yZWxvY2F0ZV9zZWN0aW9uCisKKyNl bmRpZiAvKiBDT0ZGX1dJVEhfUEUgKi8KKworLyogQ29udmVydCBhbiBydHlw ZSB0byBob3d0byBmb3IgdGhlIENPRkYgYmFja2VuZCBsaW5rZXIuICAqLwor CitzdGF0aWMgcmVsb2NfaG93dG9fdHlwZSAqCitjb2ZmX2FtZDY0X3J0eXBl X3RvX2hvd3RvKGJmZCAqYWJmZCBBVFRSSUJVVEVfVU5VU0VELGFzZWN0aW9u ICpzZWMsc3RydWN0IGludGVybmFsX3JlbG9jICpyZWwsc3RydWN0IGNvZmZf bGlua19oYXNoX2VudHJ5ICpoLHN0cnVjdCBpbnRlcm5hbF9zeW1lbnQgKnN5 bSxiZmRfdm1hICphZGRlbmRwKQoreworICByZWxvY19ob3d0b190eXBlICpo b3d0bzsKKworICBpZihyZWwtPnJfdHlwZSA+IHNpemVvZiAoaG93dG9fdGFi bGUpIC8gc2l6ZW9mIChob3d0b190YWJsZVswXSkpIHsKKyAgICAgIGJmZF9z ZXRfZXJyb3IgKGJmZF9lcnJvcl9iYWRfdmFsdWUpOworICAgICAgcmV0dXJu IE5VTEw7CisgICAgfQorICBpZihyZWwtPnJfdHlwZT49Ul9BTUQ2NF9QQ1JM T05HXzEgJiYgcmVsLT5yX3R5cGU8PVJfQU1ENjRfUENSTE9OR181KSB7CisJ ICByZWwtPnJfdmFkZHIrPShiZmRfdm1hKShyZWwtPnJfdHlwZS1SX0FNRDY0 X1BDUkxPTkcpOworCSAgcmVsLT5yX3R5cGU9Ul9BTUQ2NF9QQ1JMT05HOwor ICB9CisgIGhvd3RvID0gaG93dG9fdGFibGUgKyByZWwtPnJfdHlwZTsKKwor I2lmZGVmIENPRkZfV0lUSF9QRQorICAvKiBDYW5jZWwgb3V0IGNvZGUgaW4g X2JmZF9jb2ZmX2dlbmVyaWNfcmVsb2NhdGVfc2VjdGlvbi4gICovCisgICph ZGRlbmRwID0gMDsKKyNlbmRpZgorCisgIGlmKGhvd3RvLT5wY19yZWxhdGl2 ZSkKKyAgICAqYWRkZW5kcCArPSBzZWMtPnZtYTsKKworICBpZihzeW0hPU5V TEwgJiYgc3ltLT5uX3NjbnVtID09IDAgJiYgc3ltLT5uX3ZhbHVlIT0wKQor ICAgIHsKKyAgICAgIC8qIFRoaXMgaXMgYSBjb21tb24gc3ltYm9sLiAgVGhl IHNlY3Rpb24gY29udGVudHMgaW5jbHVkZSB0aGUKKwkgc2l6ZSAoc3ltLT5u X3ZhbHVlKSBhcyBhbiBhZGRlbmQuICBUaGUgcmVsb2NhdGVfc2VjdGlvbgor CSBmdW5jdGlvbiB3aWxsIGJlIGFkZGluZyBpbiB0aGUgZmluYWwgdmFsdWUg b2YgdGhlIHN5bWJvbC4gIFdlCisJIG5lZWQgdG8gc3VidHJhY3Qgb3V0IHRo ZSBjdXJyZW50IHNpemUgaW4gb3JkZXIgdG8gZ2V0IHRoZQorCSBjb3JyZWN0 IHJlc3VsdC4gICovCisKKyAgICAgIC8vQkZEX0FTU0VSVCAoaCE9TlVMTCk7 CisKKyNpZm5kZWYgQ09GRl9XSVRIX1BFCisgICAgICAvKiBJIHRoaW5rIHdl ICpkbyogd2FudCB0byBieXBhc3MgdGhpcy4gIElmIHdlIGRvbid0LCBJIGhh dmUKKwkgc2VlbiBzb21lIGRhdGEgcGFyYW1ldGVycyBnZXQgdGhlIHdyb25n IHJlbG9jYXRpb24gYWRkcmVzcy4KKwkgSWYgSSBsaW5rIHR3byB2ZXJzaW9u cyB3aXRoIGFuZCB3aXRob3V0IHRoaXMgc2VjdGlvbiBieXBhc3NlZAorCSBh bmQgdGhlbiBkbyBhIGJpbmFyeSBjb21wYXJpc29uLCB0aGUgYWRkcmVzc2Vz IHdoaWNoIGFyZQorCSBkaWZmZXJlbnQgY2FuIGJlIGxvb2tlZCB1cCBpbiB0 aGUgbWFwLiAgVGhlIGNhc2UgaW4gd2hpY2gKKwkgdGhpcyBzZWN0aW9uIGhh cyBiZWVuIGJ5cGFzc2VkIGhhcyBhZGRyZXNzZXMgd2hpY2ggY29ycmVzcG9u ZAorCSB0byB2YWx1ZXMgSSBjYW4gZmluZCBpbiB0aGUgbWFwLiAgKi8KKyAg ICAgICphZGRlbmRwIC09IHN5bS0+bl92YWx1ZTsKKyNlbmRpZgorICAgIH0K KworI2lmbmRlZiBDT0ZGX1dJVEhfUEUKKyAgLyogSWYgdGhlIG91dHB1dCBz eW1ib2wgaXMgY29tbW9uIChpbiB3aGljaCBjYXNlIHRoaXMgbXVzdCBiZSBh CisgICAgIHJlbG9jYXRhYmxlIGxpbmspLCB3ZSBuZWVkIHRvIGFkZCBpbiB0 aGUgZmluYWwgc2l6ZSBvZiB0aGUKKyAgICAgY29tbW9uIHN5bWJvbC4gICov CisgIGlmKGghPU5VTEwgJiYgaC0+cm9vdC50eXBlID09IGJmZF9saW5rX2hh c2hfY29tbW9uKQorICAgICphZGRlbmRwICs9IGgtPnJvb3QudS5jLnNpemU7 CisjZW5kaWYKKworI2lmZGVmIENPRkZfV0lUSF9QRQorICBpZihob3d0by0+ cGNfcmVsYXRpdmUpCisgICAgeworICAgICAgKmFkZGVuZHAgLT0gNDsKKwor ICAgICAgLyogSWYgdGhlIHN5bWJvbCBpcyBkZWZpbmVkLCB0aGVuIHRoZSBn ZW5lcmljIGNvZGUgaXMgZ29pbmcgdG8KKyAgICAgICAgIGFkZCBiYWNrIHRo ZSBzeW1ib2wgdmFsdWUgaW4gb3JkZXIgdG8gY2FuY2VsIG91dCBhbgorICAg ICAgICAgYWRqdXN0bWVudCBpdCBtYWRlIHRvIHRoZSBhZGRlbmQuICBIb3dl dmVyLCB3ZSBzZXQgdGhlIGFkZGVuZAorICAgICAgICAgdG8gMCBhdCB0aGUg c3RhcnQgb2YgdGhpcyBmdW5jdGlvbi4gIFdlIG5lZWQgdG8gYWRqdXN0IGhl cmUsCisgICAgICAgICB0byBhdm9pZCB0aGUgYWRqdXN0bWVudCB0aGUgZ2Vu ZXJpYyBjb2RlIHdpbGwgbWFrZS4gIEZJWE1FOgorICAgICAgICAgVGhpcyBp cyBnZXR0aW5nIGEgYml0IGhhY2tpc2guICAqLworICAgICAgaWYoc3ltIT1O VUxMICYmIHN5bS0+bl9zY251bSE9MCkKKwkqYWRkZW5kcCAtPSBzeW0tPm5f dmFsdWU7CisgICAgfQorCisgIGlmKHJlbC0+cl90eXBlID09IFJfQU1ENjRf SU1BR0VCQVNFICYmIChiZmRfZ2V0X2ZsYXZvdXIoc2VjLT5vdXRwdXRfc2Vj dGlvbi0+b3duZXIpID09IGJmZF90YXJnZXRfY29mZl9mbGF2b3VyKSkgewor ICAgICAgKmFkZGVuZHAgLT0gcGVfZGF0YShzZWMtPm91dHB1dF9zZWN0aW9u LT5vd25lciktPnBlX29wdGhkci5JbWFnZUJhc2U7CisgIH0KKworICBpZihy ZWwtPnJfdHlwZSA9PSBSX0FNRDY0X1NFQ1JFTCkgeworICAgICAgYmZkX3Zt YSBvc2VjdF92bWE7CisKKyAgICAgIGlmKGggJiYgKGgtPnR5cGUgPT0gYmZk X2xpbmtfaGFzaF9kZWZpbmVkIHx8IGgtPnR5cGUgPT0gYmZkX2xpbmtfaGFz aF9kZWZ3ZWFrKSkKKwlvc2VjdF92bWEgPSBoLT5yb290LnUuZGVmLnNlY3Rp b24tPm91dHB1dF9zZWN0aW9uLT52bWE7CisgICAgICBlbHNlIHsKKwkgIGFz ZWN0aW9uICpzZWM7CisJICBpbnQgaTsKKworCSAgLyogU2lnaCwgdGhlIG9u bHkgd2F5IHRvIGdldCB0aGUgc2VjdGlvbiB0byBvZmZzZXQgYWdhaW5zdAor CSAgICAgaXMgdG8gZmluZCBpdCB0aGUgaGFyZCB3YXkuICAqLworCisJICBm b3IgKHNlYyA9IGFiZmQtPnNlY3Rpb25zLCBpID0gMTsgaSA8IHN5bS0+bl9z Y251bTsgaSsrKQorCSAgICBzZWMgPSBzZWMtPm5leHQ7CisKKwkgIG9zZWN0 X3ZtYSA9IHNlYy0+b3V0cHV0X3NlY3Rpb24tPnZtYTsKKwl9CisKKyAgICAg ICphZGRlbmRwIC09IG9zZWN0X3ZtYTsKKyAgICB9CisjZW5kaWYKKworICBy ZXR1cm4gaG93dG87Cit9CisKKyNkZWZpbmUgY29mZl9iZmRfcmVsb2NfdHlw ZV9sb29rdXAgY29mZl9hbWQ2NF9yZWxvY190eXBlX2xvb2t1cAorCitzdGF0 aWMgcmVsb2NfaG93dG9fdHlwZSAqCitjb2ZmX2FtZDY0X3JlbG9jX3R5cGVf bG9va3VwKGJmZCAqYWJmZCBBVFRSSUJVVEVfVU5VU0VELGJmZF9yZWxvY19j b2RlX3JlYWxfdHlwZSBjb2RlKQoreworICBzd2l0Y2ggKGNvZGUpIHsKKyAg ICBjYXNlIEJGRF9SRUxPQ19SVkE6CisgICAgICByZXR1cm4gaG93dG9fdGFi bGUgKyBSX0FNRDY0X0lNQUdFQkFTRTsKKyAgICBjYXNlIEJGRF9SRUxPQ18z MjoKKyAgICAgIHJldHVybiBob3d0b190YWJsZSArIFJfQU1ENjRfRElSMzI7 CisJIGNhc2UgQkZEX1JFTE9DXzY0OgorCQkgIHJldHVybiBob3d0b190YWJs ZSArIFJfQU1ENjRfRElSNjQ7CisgICAgY2FzZSBCRkRfUkVMT0NfMzJfUENS RUw6CisJY2FzZSBCRkRfUkVMT0NfWDg2XzY0XzMyUzoKKyAgICAgIHJldHVy biBob3d0b190YWJsZSArIFJfQU1ENjRfUENSTE9ORzsKKyAgICBjYXNlIEJG RF9SRUxPQ18xNjoKKyAgICAgIHJldHVybiBob3d0b190YWJsZSArIFJfUkVM V09SRDsKKyAgICBjYXNlIEJGRF9SRUxPQ18xNl9QQ1JFTDoKKyAgICAgIHJl dHVybiBob3d0b190YWJsZSArIFJfUENSV09SRDsKKyAgICBjYXNlIEJGRF9S RUxPQ184OgorICAgICAgcmV0dXJuIGhvd3RvX3RhYmxlICsgUl9SRUxCWVRF OworICAgIGNhc2UgQkZEX1JFTE9DXzhfUENSRUw6CisgICAgICByZXR1cm4g aG93dG9fdGFibGUgKyBSX1BDUkJZVEU7CisjaWZkZWYgQ09GRl9XSVRIX1BF CisgICAgY2FzZSBCRkRfUkVMT0NfMzJfU0VDUkVMOgorICAgICAgcmV0dXJu IGhvd3RvX3RhYmxlICsgUl9BTUQ2NF9TRUNSRUw7CisjZW5kaWYKKyAgICBk ZWZhdWx0OgorICAgICAgQkZEX0ZBSUwgKCk7CisgICAgICByZXR1cm4gMDsK KyAgICB9Cit9CisKKyNkZWZpbmUgY29mZl9ydHlwZV90b19ob3d0byBjb2Zm X2FtZDY0X3J0eXBlX3RvX2hvd3RvCisKKyNpZmRlZiBUQVJHRVRfVU5ERVJT Q09SRQorCisvKiBJZiBhbWQ2NCBnY2MgdXNlcyB1bmRlcnNjb3JlcyBmb3Ig c3ltYm9sIG5hbWVzLCB0aGVuIGl0IGRvZXMgbm90IHVzZQorICAgYSBsZWFk aW5nIGRvdCBmb3IgbG9jYWwgbGFiZWxzLCBzbyBpZiBUQVJHRVRfVU5ERVJT Q09SRSBpcyBkZWZpbmVkCisgICB3ZSB0cmVhdCBhbGwgc3ltYm9scyBzdGFy dGluZyB3aXRoIEwgYXMgbG9jYWwuICAqLworCitzdGF0aWMgYmZkX2Jvb2xl YW4gY29mZl9hbWQ2NF9pc19sb2NhbF9sYWJlbF9uYW1lKGJmZCAqLCBjb25z dCBjaGFyICopOworCitzdGF0aWMgYmZkX2Jvb2xlYW4gY29mZl9hbWQ2NF9p c19sb2NhbF9sYWJlbF9uYW1lKGJmZCAqYWJmZCxjb25zdCBjaGFyICpuYW1l KQoreworICBpZihuYW1lWzBdID09ICdMJykKKyAgICByZXR1cm4gVFJVRTsK KworICByZXR1cm4gX2JmZF9jb2ZmX2lzX2xvY2FsX2xhYmVsX25hbWUgKGFi ZmQsIG5hbWUpOworfQorCisjZGVmaW5lIGNvZmZfYmZkX2lzX2xvY2FsX2xh YmVsX25hbWUgY29mZl9hbWQ2NF9pc19sb2NhbF9sYWJlbF9uYW1lCisKKyNl bmRpZiAvKiBUQVJHRVRfVU5ERVJTQ09SRSAqLworCisjaW5jbHVkZSAiY29m ZmNvZGUuaCIKKworI2lmZGVmIFBFCisjZGVmaW5lIGFtZDY0Y29mZl9vYmpl Y3RfcCBwZV9iZmRfb2JqZWN0X3AKKyNlbHNlCisjZGVmaW5lIGFtZDY0Y29m Zl9vYmplY3RfcCBjb2ZmX29iamVjdF9wCisjZW5kaWYKKworY29uc3QgYmZk X3RhcmdldAorI2lmZGVmIFRBUkdFVF9TWU0KKyAgVEFSR0VUX1NZTSA9Cisj ZWxzZQorICB4ODZfNjRjb2ZmX3ZlYyA9CisjZW5kaWYKK3sKKyNpZmRlZiBU QVJHRVRfTkFNRQorICBUQVJHRVRfTkFNRSwKKyNlbHNlCisgImNvZmYteDg2 LTY0IiwJCQkvKiBuYW1lICovCisjZW5kaWYKKyAgYmZkX3RhcmdldF9jb2Zm X2ZsYXZvdXIsCisgIEJGRF9FTkRJQU5fTElUVExFLAkJLyogZGF0YSBieXRl IG9yZGVyIGlzIGxpdHRsZSAqLworICBCRkRfRU5ESUFOX0xJVFRMRSwJCS8q IGhlYWRlciBieXRlIG9yZGVyIGlzIGxpdHRsZSAqLworCisgIChIQVNfUkVM T0MgfCBFWEVDX1AgfAkJLyogb2JqZWN0IGZsYWdzICovCisgICBIQVNfTElO RU5PIHwgSEFTX0RFQlVHIHwKKyAgIEhBU19TWU1TIHwgSEFTX0xPQ0FMUyB8 IFdQX1RFWFQgfCBEX1BBR0VEKSwKKworICAoU0VDX0hBU19DT05URU5UUyB8 IFNFQ19BTExPQyB8IFNFQ19MT0FEIHwgU0VDX1JFTE9DIC8qIHNlY3Rpb24g ZmxhZ3MgKi8KKyNpZmRlZiBDT0ZGX1dJVEhfUEUKKyAgIHwgU0VDX0xJTktf T05DRSB8IFNFQ19MSU5LX0RVUExJQ0FURVMgfCBTRUNfUkVBRE9OTFkKKyNl bmRpZgorICAgfCBTRUNfQ09ERSB8IFNFQ19EQVRBKSwKKworI2lmZGVmIFRB UkdFVF9VTkRFUlNDT1JFCisgIFRBUkdFVF9VTkRFUlNDT1JFLAkJLyogbGVh ZGluZyB1bmRlcnNjb3JlICovCisjZWxzZQorICAwLAkJCQkvKiBsZWFkaW5n IHVuZGVyc2NvcmUgKi8KKyNlbmRpZgorICAnLycsCQkJCS8qIGFyX3BhZF9j aGFyICovCisgIDE1LAkJCQkvKiBhcl9tYXhfbmFtZWxlbiAqLworCisgIGJm ZF9nZXRsNjQsIGJmZF9nZXRsX3NpZ25lZF82NCwgYmZkX3B1dGw2NCwKKyAg ICAgYmZkX2dldGwzMiwgYmZkX2dldGxfc2lnbmVkXzMyLCBiZmRfcHV0bDMy LAorICAgICBiZmRfZ2V0bDE2LCBiZmRfZ2V0bF9zaWduZWRfMTYsIGJmZF9w dXRsMTYsIC8qIGRhdGEgKi8KKyAgYmZkX2dldGw2NCwgYmZkX2dldGxfc2ln bmVkXzY0LCBiZmRfcHV0bDY0LAorICAgICBiZmRfZ2V0bDMyLCBiZmRfZ2V0 bF9zaWduZWRfMzIsIGJmZF9wdXRsMzIsCisgICAgIGJmZF9nZXRsMTYsIGJm ZF9nZXRsX3NpZ25lZF8xNiwgYmZkX3B1dGwxNiwgLyogaGRycyAqLworCisv KiBOb3RlIHRoYXQgd2UgYWxsb3cgYW4gb2JqZWN0IGZpbGUgdG8gYmUgdHJl YXRlZCBhcyBhIGNvcmUgZmlsZSBhcyB3ZWxsLiAgKi8KKyAgICB7X2JmZF9k dW1teV90YXJnZXQsIGFtZDY0Y29mZl9vYmplY3RfcCwgLyogYmZkX2NoZWNr X2Zvcm1hdCAqLworICAgICAgIGJmZF9nZW5lcmljX2FyY2hpdmVfcCwgYW1k NjRjb2ZmX29iamVjdF9wfSwKKyAgICB7YmZkX2ZhbHNlLCBjb2ZmX21rb2Jq ZWN0LCBfYmZkX2dlbmVyaWNfbWthcmNoaXZlLCAvKiBiZmRfc2V0X2Zvcm1h dCAqLworICAgICAgIGJmZF9mYWxzZX0sCisgICAge2JmZF9mYWxzZSwgY29m Zl93cml0ZV9vYmplY3RfY29udGVudHMsIC8qIGJmZF93cml0ZV9jb250ZW50 cyAqLworICAgICAgIF9iZmRfd3JpdGVfYXJjaGl2ZV9jb250ZW50cywgYmZk X2ZhbHNlfSwKKworICAgICBCRkRfSlVNUF9UQUJMRV9HRU5FUklDIChjb2Zm KSwKKyAgICAgQkZEX0pVTVBfVEFCTEVfQ09QWSAoY29mZiksCisgICAgIEJG RF9KVU1QX1RBQkxFX0NPUkUgKF9iZmRfbm9jb3JlKSwKKyAgICAgQkZEX0pV TVBfVEFCTEVfQVJDSElWRSAoX2JmZF9hcmNoaXZlX2NvZmYpLAorICAgICBC RkRfSlVNUF9UQUJMRV9TWU1CT0xTIChjb2ZmKSwKKyAgICAgQkZEX0pVTVBf VEFCTEVfUkVMT0NTIChjb2ZmKSwKKyAgICAgQkZEX0pVTVBfVEFCTEVfV1JJ VEUgKGNvZmYpLAorICAgICBCRkRfSlVNUF9UQUJMRV9MSU5LIChjb2ZmKSwK KyAgICAgQkZEX0pVTVBfVEFCTEVfRFlOQU1JQyAoX2JmZF9ub2R5bmFtaWMp LAorCisgIE5VTEwsCisKKyAgQ09GRl9TV0FQX1RBQkxFCit9OwpkaWZmIC1y TmJ1IGJpbnV0aWxzLTIuMTdfb3JnL2JmZC9jb2ZmY29kZS5oIGJpbnV0aWxz LTIuMTcvYmZkL2NvZmZjb2RlLmgKLS0tIGJpbnV0aWxzLTIuMTdfb3JnL2Jm ZC9jb2ZmY29kZS5oCTIwMDUtMTAtMjUgMTk6NDA6MDkuMDAwMDAwMDAwICsw MjAwCisrKyBiaW51dGlscy0yLjE3L2JmZC9jb2ZmY29kZS5oCTIwMDYtMDgt MDkgMTI6MDA6NTAuMDAwMDAwMDAwICswMjAwCkBAIC0xODgzLDYgKzE4ODMs MTIgQEAKICAgICAgIGFyY2ggPSBiZmRfYXJjaF9pMzg2OwogICAgICAgYnJl YWs7CiAjZW5kaWYKKyNpZmRlZiBBTUQ2NE1BR0lDCisJY2FzZSBBTUQ2NE1B R0lDOgorCQlhcmNoPWJmZF9hcmNoX2kzODY7CisJCW1hY2hpbmU9YmZkX21h Y2hfeDg2XzY0OworCQlicmVhazsKKyNlbmRpZgogI2lmZGVmIElBNjRNQUdJ QwogICAgIGNhc2UgSUE2NE1BR0lDOgogICAgICAgYXJjaCA9IGJmZF9hcmNo X2lhNjQ7CkBAIC0yNzEzLDEzICsyNzE5LDE4IEBACiAgICAgICByZXR1cm4g VFJVRTsKICNlbmRpZgogCi0jaWZkZWYgSTM4Nk1BR0lDCisjaWYgZGVmaW5l ZChJMzg2TUFHSUMpIHx8IGRlZmluZWQoQU1ENjRNQUdJQykKICAgICBjYXNl IGJmZF9hcmNoX2kzODY6CisjaWZkZWYgSTM4Nk1BR0lDCiAgICAgICAqbWFn aWNwID0gSTM4Nk1BR0lDOworI2VuZGlmCiAjaWZkZWYgTFlOWE9TCiAgICAg ICAvKiBKdXN0IG92ZXJ3cml0ZSB0aGUgdXN1YWwgdmFsdWUgaWYgd2UncmUg ZG9pbmcgTHlueC4gICovCiAgICAgICAqbWFnaWNwID0gTFlOWENPRkZNQUdJ QzsKICNlbmRpZgorI2lmZGVmIEFNRDY0TUFHSUMKKwkgICptYWdpY3A9QU1E NjRNQUdJQzsKKyNlbmRpZgogICAgICAgcmV0dXJuIFRSVUU7CiAjZW5kaWYK IApAQCAtMzc1MiwxMyArMzc2MywxNyBAQAogI2VuZGlmCiAKICNpZmRlZiBD T0ZGX1dJVEhfUEUKKyNpZiAhZGVmaW5lZChDT0ZGX1dJVEhfcGVwKSAmJiAh ZGVmaW5lZChDT0ZGX1dJVEhfcGV4NjQpCiAgIGludGVybmFsX2YuZl9mbGFn cyB8PSBJTUFHRV9GSUxFXzMyQklUX01BQ0hJTkU7CisjZW5kaWYKICNlbHNl CisjaWZuZGVmIENPRkZfV0lUSF9wZXg2NAogICBpZiAoYmZkX2xpdHRsZV9l bmRpYW4gKGFiZmQpKQogICAgIGludGVybmFsX2YuZl9mbGFncyB8PSBGX0FS MzJXUjsKICAgZWxzZQogICAgIGludGVybmFsX2YuZl9mbGFncyB8PSBGX0FS MzJXOwogI2VuZGlmCisjZW5kaWYKIAogI2lmZGVmIFRJX1RBUkdFVF9JRAog ICAvKiBUYXJnZXQgaWQgaXMgdXNlZCBpbiBUSSBDT0ZGIHYxIGFuZCBsYXRl cjsgQ09GRjAgd29uJ3QgdXNlIHRoaXMgZmllbGQsCkBAIC0zODU1LDcgKzM4 NzAsMTEgQEAKICNpZiBkZWZpbmVkKExZTlhPUykKICAgICBpbnRlcm5hbF9h Lm1hZ2ljID0gTFlOWENPRkZNQUdJQzsKICNlbHNlICAvKiBMWU5YT1MgKi8K KyNpZmRlZiBBTUQ2NAorCWludGVybmFsX2EubWFnaWMgPSBJTUFHRV9OVF9P UFRJT05BTF9IRFI2NF9NQUdJQzsKKyNlbHNlCiAgICAgaW50ZXJuYWxfYS5t YWdpYyA9IFpNQUdJQzsKKyNlbmRpZgogI2VuZGlmIC8qIExZTlhPUyAqLwog I2VuZGlmIC8qIEkzODYgKi8KIApkaWZmIC1yTmJ1IGJpbnV0aWxzLTIuMTdf b3JnL2JmZC9jb25maWcuYmZkIGJpbnV0aWxzLTIuMTcvYmZkL2NvbmZpZy5i ZmQKLS0tIGJpbnV0aWxzLTIuMTdfb3JnL2JmZC9jb25maWcuYmZkCTIwMDYt MDQtMDUgMTQ6NDE6NTcuMDAwMDAwMDAwICswMjAwCisrKyBiaW51dGlscy0y LjE3L2JmZC9jb25maWcuYmZkCTIwMDYtMDctMjcgMTA6MTA6MzUuMDAwMDAw MDAwICswMjAwCkBAIC05OCw3ICs5OCw3IEBACiBzdHJvbmdhcm0qKQkgdGFy Z19hcmNocz1iZmRfYXJtX2FyY2ggOzsKIHRodW1iKikJCSB0YXJnX2FyY2hz PWJmZF9hcm1fYXJjaCA7Owogdjg1MCopCQkgdGFyZ19hcmNocz1iZmRfdjg1 MF9hcmNoIDs7Ci14ODZfNjQpCQkgdGFyZ19hcmNocz1iZmRfaTM4Nl9hcmNo IDs7Cit4ODZfNjQqKQkJIHRhcmdfYXJjaHM9YmZkX2kzODZfYXJjaCA7Owog eHNjYWxlKikJIHRhcmdfYXJjaHM9YmZkX2FybV9hcmNoIDs7CiB4dGVuc2Eq KQkgdGFyZ19hcmNocz1iZmRfeHRlbnNhX2FyY2ggOzsKIHo4MHxyODAwKQkg dGFyZ19hcmNocz1iZmRfejgwX2FyY2ggOzsKQEAgLTU2Miw2ICs1NjIsMTEg QEAKICAgICB0YXJnX2RlZnZlYz1iZmRfZWxmNjRfeDg2XzY0X3ZlYwogICAg IHRhcmdfc2VsdmVjcz0iYmZkX2VsZjMyX2kzODZfdmVjIGkzODZsaW51eF92 ZWMgYmZkX2VmaV9hcHBfaWEzMl92ZWMiCiAgICAgOzsKKyAgeDg2XzY0LSot bWluZ3c2NCopCisgICAgdGFyZ19kZWZ2ZWM9eDg2XzY0cGVfdmVjCisgICAg dGFyZ19zZWx2ZWNzPSJ4ODZfNjRwZV92ZWMgeDg2XzY0cGVpX3ZlYyB4ODZf NjRjb2ZmX3ZlYyBiZmRfZWxmNjRfeDg2XzY0X3ZlYyIKKyAgICB0YXJnX3Vu ZGVyc2NvcmU9eWVzCisgICAgOzsKICNlbmRpZgogICBpWzMtN104Ni0qLWx5 bnhvcyopCiAgICAgdGFyZ19kZWZ2ZWM9YmZkX2VsZjMyX2kzODZfdmVjCmRp ZmYgLXJOYnUgYmludXRpbHMtMi4xN19vcmcvYmZkL2NvbmZpZ3VyZSBiaW51 dGlscy0yLjE3L2JmZC9jb25maWd1cmUKLS0tIGJpbnV0aWxzLTIuMTdfb3Jn L2JmZC9jb25maWd1cmUJMjAwNi0wNi0yMyAyMDoxNzowMy4wMDAwMDAwMDAg KzAyMDAKKysrIGJpbnV0aWxzLTIuMTcvYmZkL2NvbmZpZ3VyZQkyMDA2LTA4 LTAzIDE2OjM4OjA0LjAwMDAwMDAwMCArMDIwMApAQCAtNDA4Nyw3ICs0MDg3 LDcgQEAKICAgcm0gLXJmIGNvbmZ0ZXN0KgogICA7OwogCi14ODZfNjQtKmxp bnV4KnxwcGMqLSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KnxzMzkwKi0qbGlu dXgqfHNwYXJjKi0qbGludXgqKQoreDg2XzY0LSpsaW51eCp8eDg2XzY0LSpt aW5ndzY0KnxwcGMqLSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KnxzMzkwKi0q bGludXgqfHNwYXJjKi0qbGludXgqKQogICAjIEZpbmQgb3V0IHdoaWNoIEFC SSB3ZSBhcmUgdXNpbmcuCiAgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4k YWNfZXh0CiAgIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwi JGFjX2NvbXBpbGVcIiIpID4mNQpAQCAtNDExNCw2ICs0MTE0LDkgQEAKICAg ICAgIDs7CiAgICAgKjY0LWJpdCopCiAgICAgICBjYXNlICRob3N0IGluCisg ICAgICAgIHg4Nl82NC0qbWluZ3c2NCopCisgICAgICAgICAgTEQ9IiR7TEQt bGR9IC1tIGVsZl94ODZfNjQiCisgICAgICAgICAgOzsKICAgICAgICAgeDg2 XzY0LSpsaW51eCopCiAgICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94 ODZfNjQiCiAgICAgICAgICAgOzsKQEAgLTEzMjE2LDYgKzEzMjE5LDcgQEAK ICAgICBpMzg2YW91dF92ZWMpCQl0Yj0iJHRiIGkzODZhb3V0LmxvIGFvdXQz Mi5sbyIgOzsKICAgICBpMzg2YnNkX3ZlYykJCXRiPSIkdGIgaTM4NmJzZC5s byBhb3V0MzIubG8iIDs7CiAgICAgaTM4NmNvZmZfdmVjKQkJdGI9IiR0YiBj b2ZmLWkzODYubG8gY29mZmxpbmsubG8iIDs7CisgICAgeDg2XzY0Y29mZl92 ZWMpCQl0Yj0iJHRiIGNvZmYteDg2XzY0LmxvIGNvZmZsaW5rLmxvIjsgdGFy Z2V0X3NpemU9NjQgOzsKICAgICBpMzg2ZHluaXhfdmVjKQkJdGI9IiR0YiBp Mzg2ZHluaXgubG8gYW91dDMyLmxvIiA7OwogICAgIGkzODZmcmVlYnNkX3Zl YykJCXRiPSIkdGIgaTM4NmZyZWVic2QubG8gYW91dDMyLmxvIiA7OwogICAg IGkzODZsaW51eF92ZWMpCQl0Yj0iJHRiIGkzODZsaW51eC5sbyBhb3V0MzIu bG8iIDs7CkBAIC0xMzIyNiw3ICsxMzIzMCw5IEBACiAgICAgaTM4Nm5ldGJz ZF92ZWMpCQl0Yj0iJHRiIGkzODZuZXRic2QubG8gYW91dDMyLmxvIiA7Owog ICAgIGkzODZvczlrX3ZlYykJCXRiPSIkdGIgaTM4Nm9zOWsubG8gYW91dDMy LmxvIiA7OwogICAgIGkzODZwZV92ZWMpCQkJdGI9IiR0YiBwZS1pMzg2Lmxv IHBlaWdlbi5sbyBjb2ZmbGluay5sbyIgOzsKLSAgICBpMzg2cGVpX3ZlYykJ CXRiPSIkdGIgcGVpLWkzODYubG8gcGVpZ2VuLmxvIGNvZmZsaW5rLmxvIiA7 OworICAgIHg4Nl82NHBlX3ZlYykJCQl0Yj0iJHRiIHBlLXg4Nl82NC5sbyBw ZXg2NGlnZW4ubG8gY29mZmxpbmsubG8iOyB0YXJnZXRfc2l6ZT02NCA7Owor ICAgIGkzODZwZWlfdmVjKQkJdGI9IiR0YiBwZWktaTM4Ni5sbyBwZXBpZ2Vu LmxvIGNvZmZsaW5rLmxvIiA7OworICAgIHg4Nl82NHBlaV92ZWMpCQl0Yj0i JHRiIHBlaS14ODZfNjQubG8gcGV4NjRpZ2VuLmxvIGNvZmZsaW5rLmxvIjsg dGFyZ2V0X3NpemU9NjQgOzsKICAgICBpODYwY29mZl92ZWMpCQl0Yj0iJHRi IGNvZmYtaTg2MC5sbyBjb2ZmbGluay5sbyIgOzsKICAgICBpY29mZl9iaWdf dmVjKQkJdGI9IiR0YiBjb2ZmLWk5NjAubG8gY29mZmxpbmsubG8iIDs7CiAg ICAgaWNvZmZfbGl0dGxlX3ZlYykJCXRiPSIkdGIgY29mZi1pOTYwLmxvIGNv ZmZsaW5rLmxvIiA7OwpkaWZmIC1yTmJ1IGJpbnV0aWxzLTIuMTdfb3JnL2Jm ZC9jb25maWd1cmUuaW4gYmludXRpbHMtMi4xNy9iZmQvY29uZmlndXJlLmlu Ci0tLSBiaW51dGlscy0yLjE3X29yZy9iZmQvY29uZmlndXJlLmluCTIwMDYt MDYtMjMgMjA6MTc6MDcuMDAwMDAwMDAwICswMjAwCisrKyBiaW51dGlscy0y LjE3L2JmZC9jb25maWd1cmUuaW4JMjAwNi0wOC0wMyAxNjozOTowOS4wMDAw MDAwMDAgKzAyMDAKQEAgLTcyOSw2ICs3MjksNyBAQAogICAgIGkzODZhb3V0 X3ZlYykJCXRiPSIkdGIgaTM4NmFvdXQubG8gYW91dDMyLmxvIiA7OwogICAg IGkzODZic2RfdmVjKQkJdGI9IiR0YiBpMzg2YnNkLmxvIGFvdXQzMi5sbyIg OzsKICAgICBpMzg2Y29mZl92ZWMpCQl0Yj0iJHRiIGNvZmYtaTM4Ni5sbyBj b2ZmbGluay5sbyIgOzsKKyAgICB4ODZfNjRjb2ZmX3ZlYykJCXRiPSIkdGIg Y29mZi14ODZfNjQubG8gY29mZmxpbmsubG8iOyB0YXJnZXRfc2l6ZT02NCA7 OwogICAgIGkzODZkeW5peF92ZWMpCQl0Yj0iJHRiIGkzODZkeW5peC5sbyBh b3V0MzIubG8iIDs7CiAgICAgaTM4NmZyZWVic2RfdmVjKQkJdGI9IiR0YiBp Mzg2ZnJlZWJzZC5sbyBhb3V0MzIubG8iIDs7CiAgICAgaTM4NmxpbnV4X3Zl YykJCXRiPSIkdGIgaTM4NmxpbnV4LmxvIGFvdXQzMi5sbyIgOzsKQEAgLTcz OSw3ICs3NDAsOSBAQAogICAgIGkzODZuZXRic2RfdmVjKQkJdGI9IiR0YiBp Mzg2bmV0YnNkLmxvIGFvdXQzMi5sbyIgOzsKICAgICBpMzg2b3M5a192ZWMp CQl0Yj0iJHRiIGkzODZvczlrLmxvIGFvdXQzMi5sbyIgOzsKICAgICBpMzg2 cGVfdmVjKQkJCXRiPSIkdGIgcGUtaTM4Ni5sbyBwZWlnZW4ubG8gY29mZmxp bmsubG8iIDs7CisgICAgeDg2XzY0cGVfdmVjKQkJCXRiPSIkdGIgcGUteDg2 XzY0LmxvIHBleDY0aWdlbi5sbyBjb2ZmbGluay5sbyI7IHRhcmdldF9zaXpl PTY0IDs7CiAgICAgaTM4NnBlaV92ZWMpCQl0Yj0iJHRiIHBlaS1pMzg2Lmxv IHBlaWdlbi5sbyBjb2ZmbGluay5sbyIgOzsKKyAgICB4ODZfNjRwZWlfdmVj KQkJdGI9IiR0YiBwZWkteDg2XzY0LmxvIHBleDY0aWdlbi5sbyBjb2ZmbGlu ay5sbyI7IHRhcmdldF9zaXplPTY0IDs7CiAgICAgaTg2MGNvZmZfdmVjKQkJ dGI9IiR0YiBjb2ZmLWk4NjAubG8gY29mZmxpbmsubG8iIDs7CiAgICAgaWNv ZmZfYmlnX3ZlYykJCXRiPSIkdGIgY29mZi1pOTYwLmxvIGNvZmZsaW5rLmxv IiA7OwogICAgIGljb2ZmX2xpdHRsZV92ZWMpCQl0Yj0iJHRiIGNvZmYtaTk2 MC5sbyBjb2ZmbGluay5sbyIgOzsKZGlmZiAtck5idSBiaW51dGlscy0yLjE3 X29yZy9iZmQvbGlicGVpLmggYmludXRpbHMtMi4xNy9iZmQvbGlicGVpLmgK LS0tIGJpbnV0aWxzLTIuMTdfb3JnL2JmZC9saWJwZWkuaAkyMDA1LTA1LTA0 IDE3OjUzOjM1LjAwMDAwMDAwMCArMDIwMAorKysgYmludXRpbHMtMi4xNy9i ZmQvbGlicGVpLmgJMjAwNi0wOC0wOSAxMDo0Mjo1Mi4wMDAwMDAwMDAgKzAy MDAKQEAgLTIwNCw2ICsyMDQsMzggQEAKICNkZWZpbmUgUFVUX1NDTkhEUl9M Tk5PUFRSIEhfUFVUXzMyCiAjZW5kaWYKIAorI2lmZGVmIENPRkZfV0lUSF9w ZXg2NAorI2RlZmluZSBHRVRfT1BUSERSX0lNQUdFX0JBU0UgSF9HRVRfNjQK KyNkZWZpbmUgUFVUX09QVEhEUl9JTUFHRV9CQVNFIEhfUFVUXzY0CisjZGVm aW5lIEdFVF9PUFRIRFJfU0laRV9PRl9TVEFDS19SRVNFUlZFIEhfR0VUXzY0 CisjZGVmaW5lIFBVVF9PUFRIRFJfU0laRV9PRl9TVEFDS19SRVNFUlZFIEhf UFVUXzY0CisjZGVmaW5lIEdFVF9PUFRIRFJfU0laRV9PRl9TVEFDS19DT01N SVQgSF9HRVRfNjQKKyNkZWZpbmUgUFVUX09QVEhEUl9TSVpFX09GX1NUQUNL X0NPTU1JVCBIX1BVVF82NAorI2RlZmluZSBHRVRfT1BUSERSX1NJWkVfT0Zf SEVBUF9SRVNFUlZFIEhfR0VUXzY0CisjZGVmaW5lIFBVVF9PUFRIRFJfU0la RV9PRl9IRUFQX1JFU0VSVkUgSF9QVVRfNjQKKyNkZWZpbmUgR0VUX09QVEhE Ul9TSVpFX09GX0hFQVBfQ09NTUlUIEhfR0VUXzY0CisjZGVmaW5lIFBVVF9P UFRIRFJfU0laRV9PRl9IRUFQX0NPTU1JVCBIX1BVVF82NAorI2RlZmluZSBH RVRfUERBVEFfRU5UUlkgYmZkX2dldF8zMgorCisjZGVmaW5lIF9iZmRfWFhf YmZkX2NvcHlfcHJpdmF0ZV9iZmRfZGF0YV9jb21tb24JX2JmZF9wZXg2NF9i ZmRfY29weV9wcml2YXRlX2JmZF9kYXRhX2NvbW1vbgorI2RlZmluZSBfYmZk X1hYX2JmZF9jb3B5X3ByaXZhdGVfc2VjdGlvbl9kYXRhCQlfYmZkX3BleDY0 X2JmZF9jb3B5X3ByaXZhdGVfc2VjdGlvbl9kYXRhCisjZGVmaW5lIF9iZmRf WFhfZ2V0X3N5bWJvbF9pbmZvCQkJCV9iZmRfcGV4NjRfZ2V0X3N5bWJvbF9p bmZvCisjZGVmaW5lIF9iZmRfWFhfb25seV9zd2FwX2ZpbGVoZHJfb3V0CQkJ X2JmZF9wZXg2NF9vbmx5X3N3YXBfZmlsZWhkcl9vdXQKKyNkZWZpbmUgX2Jm ZF9YWF9wcmludF9wcml2YXRlX2JmZF9kYXRhX2NvbW1vbgkJX2JmZF9wZXg2 NF9wcmludF9wcml2YXRlX2JmZF9kYXRhX2NvbW1vbgorI2RlZmluZSBfYmZk X1hYaV9maW5hbF9saW5rX3Bvc3RzY3JpcHQJCQlfYmZkX3BleDY0aV9maW5h bF9saW5rX3Bvc3RzY3JpcHQKKyNkZWZpbmUgX2JmZF9YWGlfZmluYWxfbGlu a19wb3N0c2NyaXB0CQkJX2JmZF9wZXg2NGlfZmluYWxfbGlua19wb3N0c2Ny aXB0CisjZGVmaW5lIF9iZmRfWFhpX29ubHlfc3dhcF9maWxlaGRyX291dAkJ CV9iZmRfcGV4NjRpX29ubHlfc3dhcF9maWxlaGRyX291dAorI2RlZmluZSBf YmZkX1hYaV9zd2FwX2FvdXRoZHJfaW4JCQlfYmZkX3BleDY0aV9zd2FwX2Fv dXRoZHJfaW4KKyNkZWZpbmUgX2JmZF9YWGlfc3dhcF9hb3V0aGRyX291dAkJ CV9iZmRfcGV4NjRpX3N3YXBfYW91dGhkcl9vdXQKKyNkZWZpbmUgX2JmZF9Y WGlfc3dhcF9hdXhfaW4JCQkJX2JmZF9wZXg2NGlfc3dhcF9hdXhfaW4KKyNk ZWZpbmUgX2JmZF9YWGlfc3dhcF9hdXhfb3V0CQkJCV9iZmRfcGV4NjRpX3N3 YXBfYXV4X291dAorI2RlZmluZSBfYmZkX1hYaV9zd2FwX2xpbmVub19pbgkJ CQlfYmZkX3BleDY0aV9zd2FwX2xpbmVub19pbgorI2RlZmluZSBfYmZkX1hY aV9zd2FwX2xpbmVub19vdXQJCQlfYmZkX3BleDY0aV9zd2FwX2xpbmVub19v dXQKKyNkZWZpbmUgX2JmZF9YWGlfc3dhcF9zY25oZHJfb3V0CQkJX2JmZF9w ZXg2NGlfc3dhcF9zY25oZHJfb3V0CisjZGVmaW5lIF9iZmRfWFhpX3N3YXBf c3ltX2luCQkJCV9iZmRfcGV4NjRpX3N3YXBfc3ltX2luCisjZGVmaW5lIF9i ZmRfWFhpX3N3YXBfc3ltX291dAkJCQlfYmZkX3BleDY0aV9zd2FwX3N5bV9v dXQKKworI2Vsc2UgLyogIUNPRkZfV0lUSF9wZXg2NCAqLwogI2lmZGVmIENP RkZfV0lUSF9wZXAKIAogI2RlZmluZSBHRVRfT1BUSERSX0lNQUdFX0JBU0Ug SF9HRVRfNjQKQEAgLTI2OSw2ICszMDEsNyBAQAogI2RlZmluZSBfYmZkX1hY aV9zd2FwX3N5bV9vdXQJCQkJX2JmZF9wZWlfc3dhcF9zeW1fb3V0CiAKICNl bmRpZiAvKiAhQ09GRl9XSVRIX3BlcCAqLworI2VuZGlmIC8qICFDT0ZGX1dJ VEhfcGV4NjQgKi8KIAogLyogTWFjcm86IFJldHVybnMgdHJ1ZSBpZiB0aGUg YmZkIGlzIGEgUEUgZXhlY3V0YWJsZSBhcyBvcHBvc2VkIHRvIGEgUEUgb2Jq ZWN0IGZpbGUuICAqLwogI2RlZmluZSBiZmRfcGVfZXhlY3V0YWJsZV9wKGFi ZmQpIFwKZGlmZiAtck5idSBiaW51dGlscy0yLjE3X29yZy9iZmQvcGUteDg2 XzY0LmMgYmludXRpbHMtMi4xNy9iZmQvcGUteDg2XzY0LmMKLS0tIGJpbnV0 aWxzLTIuMTdfb3JnL2JmZC9wZS14ODZfNjQuYwkxOTcwLTAxLTAxIDAxOjAw OjAwLjAwMDAwMDAwMCArMDEwMAorKysgYmludXRpbHMtMi4xNy9iZmQvcGUt eDg2XzY0LmMJMjAwNi0wOC0xNyAwOTowNjo0Mi4wMDAwMDAwMDAgKzAyMDAK QEAgLTAsMCArMSw1NCBAQAorLyogQkZEIGJhY2stZW5kIGZvciBJbnRlbC9B TUQgeDg2XzY0IFBFQ09GRiBmaWxlcy4KKyAgIENvcHlyaWdodCAxOTk1LCAx OTk2LCAxOTk5LCAyMDAxLCAyMDAyLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBCRkQs IHRoZSBCaW5hcnkgRmlsZSBEZXNjcmlwdG9yIGxpYnJhcnkuCisKKyAgIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hl ZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9w dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3 aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT b2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry ZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB LgorICAgCisgICBXcml0dGVuIGJ5IEthaSBUaWV0eiwgT25lVmlzaW9uIFNv ZnR3YXJlIEdtYkgmQ29LZy4KKyovCisKKyNpbmNsdWRlICJiZmQuaCIKKyNp bmNsdWRlICJzeXNkZXAuaCIKKworI2RlZmluZSBUQVJHRVRfU1lNIAkJeDg2 XzY0cGVfdmVjCisjZGVmaW5lIFRBUkdFVF9OQU1FIAkJInBlLXg4Ni02NCIK KyNkZWZpbmUgQ09GRl9XSVRIX1BFCisjZGVmaW5lIENPRkZfV0lUSF9wZXg2 NAorI2RlZmluZSBQQ1JFTE9GRlNFVCAJCVRSVUUKKyNkZWZpbmUgVEFSR0VU X1VOREVSU0NPUkUgCSdfJworI2RlZmluZSBDT0ZGX0xPTkdfU0VDVElPTl9O QU1FUworI2RlZmluZSBDT0ZGX1NVUFBPUlRfR05VX0xJTktPTkNFCisjZGVm aW5lIENPRkZfTE9OR19GSUxFTkFNRVMKKworI2RlZmluZSBDT0ZGX1NFQ1RJ T05fQUxJR05NRU5UX0VOVFJJRVMgXAoreyBDT0ZGX1NFQ1RJT05fTkFNRV9F WEFDVF9NQVRDSCAoIi5ic3MiKSwgXAorICBDT0ZGX0FMSUdOTUVOVF9GSUVM RF9FTVBUWSwgQ09GRl9BTElHTk1FTlRfRklFTERfRU1QVFksIDQgfSwgXAor eyBDT0ZGX1NFQ1RJT05fTkFNRV9FWEFDVF9NQVRDSCAoIi5kYXRhIiksIFwK KyAgQ09GRl9BTElHTk1FTlRfRklFTERfRU1QVFksIENPRkZfQUxJR05NRU5U X0ZJRUxEX0VNUFRZLCA0IH0sIFwKK3sgQ09GRl9TRUNUSU9OX05BTUVfRVhB Q1RfTUFUQ0ggKCIucmRhdGEiKSwgXAorICBDT0ZGX0FMSUdOTUVOVF9GSUVM RF9FTVBUWSwgQ09GRl9BTElHTk1FTlRfRklFTERfRU1QVFksIDQgfSwgXAor eyBDT0ZGX1NFQ1RJT05fTkFNRV9FWEFDVF9NQVRDSCAoIi50ZXh0IiksIFwK KyAgQ09GRl9BTElHTk1FTlRfRklFTERfRU1QVFksIENPRkZfQUxJR05NRU5U X0ZJRUxEX0VNUFRZLCA0IH0sIFwKK3sgQ09GRl9TRUNUSU9OX05BTUVfUEFS VElBTF9NQVRDSCAoIi5pZGF0YSIpLCBcCisgIENPRkZfQUxJR05NRU5UX0ZJ RUxEX0VNUFRZLCBDT0ZGX0FMSUdOTUVOVF9GSUVMRF9FTVBUWSwgMiB9LCBc Cit7IENPRkZfU0VDVElPTl9OQU1FX0VYQUNUX01BVENIICgiLnBkYXRhIiks IFwKKyAgQ09GRl9BTElHTk1FTlRfRklFTERfRU1QVFksIENPRkZfQUxJR05N RU5UX0ZJRUxEX0VNUFRZLCAyIH0sIFwKK3sgQ09GRl9TRUNUSU9OX05BTUVf UEFSVElBTF9NQVRDSCAoIi5kZWJ1ZyIpLCBcCisgIENPRkZfQUxJR05NRU5U X0ZJRUxEX0VNUFRZLCBDT0ZGX0FMSUdOTUVOVF9GSUVMRF9FTVBUWSwgMCB9 LCBcCit7IENPRkZfU0VDVElPTl9OQU1FX1BBUlRJQUxfTUFUQ0ggKCIuZ251 LmxpbmtvbmNlLndpLiIpLCBcCisgIENPRkZfQUxJR05NRU5UX0ZJRUxEX0VN UFRZLCBDT0ZGX0FMSUdOTUVOVF9GSUVMRF9FTVBUWSwgMCB9CisKKyNpbmNs dWRlICJjb2ZmLXg4Nl82NC5jIgpkaWZmIC1yTmJ1IGJpbnV0aWxzLTIuMTdf b3JnL2JmZC9wZVhYaWdlbi5jIGJpbnV0aWxzLTIuMTcvYmZkL3BlWFhpZ2Vu LmMKLS0tIGJpbnV0aWxzLTIuMTdfb3JnL2JmZC9wZVhYaWdlbi5jCTIwMDYt MDEtMDkgMTY6NTg6NDIuMDAwMDAwMDAwICswMTAwCisrKyBiaW51dGlscy0y LjE3L2JmZC9wZVhYaWdlbi5jCTIwMDYtMDgtMDkgMTE6NTc6MzUuMDAwMDAw MDAwICswMjAwCkBAIC01Miw3ICs1Miw3IEBACiAgICBvbiB0aGlzIGNvZGUg aGFzIGEgY2hhbmNlIG9mIGdldHRpbmcgc29tZXRoaW5nIGFjY29tcGxpc2hl ZCB3aXRob3V0CiAgICB3YXN0aW5nIHRvbyBtdWNoIHRpbWUuICAqLwogCi0v KiBUaGlzIGV4cGFuZHMgaW50byBDT0ZGX1dJVEhfcGUgb3IgQ09GRl9XSVRI X3BlcCBkZXBlbmRpbmcgb24gd2hldGhlcgorLyogVGhpcyBleHBhbmRzIGlu dG8gQ09GRl9XSVRIX3BlLCBDT0ZGX1dJVEhfcGVwLCBvciBDT0ZGX1dJVEhf cGV4NjQgZGVwZW5kaW5nIG9uIHdoZXRoZXIKICAgIHdlJ3JlIGNvbXBpbGlu ZyBmb3Igc3RyYWlnaHQgUEUgb3IgUEUrLiAgKi8KICNkZWZpbmUgQ09GRl9X SVRIX1hYCiAKQEAgLTY3LDE3ICs2NywyMSBAQAogICAgd2l0aGluIFBFL1BF SSwgc28gd2UgZ2V0IHRoZW0gZnJvbSB0aGVyZS4gIEZJWE1FOiBUaGUgbGFj ayBvZgogICAgdmFyaWFuY2UgaXMgYW4gYXNzdW1wdGlvbiB3aGljaCBtYXkg cHJvdmUgdG8gYmUgaW5jb3JyZWN0IGlmIG5ldwogICAgUEUvUEVJIHRhcmdl dHMgYXJlIGNyZWF0ZWQuICAqLworI2lmZGVmIENPRkZfV0lUSF9wZXg2NAor IyBpbmNsdWRlICJjb2ZmL3g4Nl82NC5oIgorI2Vsc2UKICNpZmRlZiBDT0ZG X1dJVEhfcGVwCiAjIGluY2x1ZGUgImNvZmYvaWE2NC5oIgogI2Vsc2UKICMg aW5jbHVkZSAiY29mZi9pMzg2LmgiCiAjZW5kaWYKKyNlbmRpZgogCiAjaW5j bHVkZSAiY29mZi9wZS5oIgogI2luY2x1ZGUgImxpYmNvZmYuaCIKICNpbmNs dWRlICJsaWJwZWkuaCIKIAotI2lmZGVmIENPRkZfV0lUSF9wZXAKKyNpZiBk ZWZpbmVkKENPRkZfV0lUSF9wZXApIHx8IGRlZmluZWQoQ09GRl9XSVRIX3Bl eDY0KQogIyB1bmRlZiBBT1VUU1oKICMgZGVmaW5lIEFPVVRTWgkJUEVQQU9V VFNaCiAjIGRlZmluZSBQRUFPVVRIRFIJUEVQQU9VVEhEUgpAQCAtMzk4LDcg KzQwMiw3IEBACiAgIGFvdXRoZHJfaW50LT5lbnRyeSA9IEdFVF9BT1VUSERS X0VOVFJZIChhYmZkLCBhb3V0aGRyX2V4dC0+ZW50cnkpOwogICBhb3V0aGRy X2ludC0+dGV4dF9zdGFydCA9CiAgICAgR0VUX0FPVVRIRFJfVEVYVF9TVEFS VCAoYWJmZCwgYW91dGhkcl9leHQtPnRleHRfc3RhcnQpOwotI2lmbmRlZiBD T0ZGX1dJVEhfcGVwCisjaWYgIWRlZmluZWQoQ09GRl9XSVRIX3BlcCkgJiYg IWRlZmluZWQoQ09GRl9XSVRIX3BleDY0KQogICAvKiBQRTMyKyBkb2VzIG5v dCBoYXZlIGRhdGFfc3RhcnQgbWVtYmVyISAgKi8KICAgYW91dGhkcl9pbnQt PmRhdGFfc3RhcnQgPQogICAgIEdFVF9BT1VUSERSX0RBVEFfU1RBUlQgKGFi ZmQsIGFvdXRoZHJfZXh0LT5kYXRhX3N0YXJ0KTsKQEAgLTQ1NCw3ICs0NTgs NyBAQAogICBpZiAoYW91dGhkcl9pbnQtPmVudHJ5KQogICAgIHsKICAgICAg IGFvdXRoZHJfaW50LT5lbnRyeSArPSBhLT5JbWFnZUJhc2U7Ci0jaWZuZGVm IENPRkZfV0lUSF9wZXAKKyNpZiAhZGVmaW5lZChDT0ZGX1dJVEhfcGVwKSAm JiAhZGVmaW5lZChDT0ZGX1dJVEhfcGV4NjQpCiAgICAgICBhb3V0aGRyX2lu dC0+ZW50cnkgJj0gMHhmZmZmZmZmZjsKICNlbmRpZgogICAgIH0KQEAgLTQ2 MiwxMiArNDY2LDEyIEBACiAgIGlmIChhb3V0aGRyX2ludC0+dHNpemUpCiAg ICAgewogICAgICAgYW91dGhkcl9pbnQtPnRleHRfc3RhcnQgKz0gYS0+SW1h Z2VCYXNlOwotI2lmbmRlZiBDT0ZGX1dJVEhfcGVwCisjaWYgIWRlZmluZWQo Q09GRl9XSVRIX3BlcCkgJiYgIWRlZmluZWQoQ09GRl9XSVRIX3BleDY0KQog ICAgICAgYW91dGhkcl9pbnQtPnRleHRfc3RhcnQgJj0gMHhmZmZmZmZmZjsK ICNlbmRpZgogICAgIH0KIAotI2lmbmRlZiBDT0ZGX1dJVEhfcGVwCisjaWYg IWRlZmluZWQoQ09GRl9XSVRIX3BlcCkgJiYgIWRlZmluZWQoQ09GRl9XSVRI X3BleDY0KQogICAvKiBQRTMyKyBkb2VzIG5vdCBoYXZlIGRhdGFfc3RhcnQg bWVtYmVyISAgKi8KICAgaWYgKGFvdXRoZHJfaW50LT5kc2l6ZSkKICAgICB7 CkBAIC01NDcsNyArNTUxLDcgQEAKICAgaWYgKGFvdXRoZHJfaW4tPnRzaXpl KQogICAgIHsKICAgICAgIGFvdXRoZHJfaW4tPnRleHRfc3RhcnQgLT0gaWI7 Ci0jaWZuZGVmIENPRkZfV0lUSF9wZXAKKyNpZiAhZGVmaW5lZChDT0ZGX1dJ VEhfcGVwKSAmJiAhZGVmaW5lZChDT0ZGX1dJVEhfcGV4NjQpCiAgICAgICBh b3V0aGRyX2luLT50ZXh0X3N0YXJ0ICY9IDB4ZmZmZmZmZmY7CiAjZW5kaWYK ICAgICB9CkBAIC01NTUsNyArNTU5LDcgQEAKICAgaWYgKGFvdXRoZHJfaW4t PmRzaXplKQogICAgIHsKICAgICAgIGFvdXRoZHJfaW4tPmRhdGFfc3RhcnQg LT0gaWI7Ci0jaWZuZGVmIENPRkZfV0lUSF9wZXAKKyNpZiAhZGVmaW5lZChD T0ZGX1dJVEhfcGVwKSAmJiAhZGVmaW5lZChDT0ZGX1dJVEhfcGV4NjQpCiAg ICAgICBhb3V0aGRyX2luLT5kYXRhX3N0YXJ0ICY9IDB4ZmZmZmZmZmY7CiAj ZW5kaWYKICAgICB9CkBAIC01NjMsNyArNTY3LDcgQEAKICAgaWYgKGFvdXRo ZHJfaW4tPmVudHJ5KQogICAgIHsKICAgICAgIGFvdXRoZHJfaW4tPmVudHJ5 IC09IGliOwotI2lmbmRlZiBDT0ZGX1dJVEhfcGVwCisjaWYgIWRlZmluZWQo Q09GRl9XSVRIX3BlcCkgJiYgIWRlZmluZWQoQ09GRl9XSVRIX3BleDY0KQog ICAgICAgYW91dGhkcl9pbi0+ZW50cnkgJj0gMHhmZmZmZmZmZjsKICNlbmRp ZgogICAgIH0KQEAgLTY2MCw3ICs2NjQsNyBAQAogICBQVVRfQU9VVEhEUl9U RVhUX1NUQVJUIChhYmZkLCBhb3V0aGRyX2luLT50ZXh0X3N0YXJ0LAogCQkJ ICBhb3V0aGRyX291dC0+c3RhbmRhcmQudGV4dF9zdGFydCk7CiAKLSNpZm5k ZWYgQ09GRl9XSVRIX3BlcAorI2lmICFkZWZpbmVkKENPRkZfV0lUSF9wZXAp ICYmICFkZWZpbmVkKENPRkZfV0lUSF9wZXg2NCkKICAgLyogUEUzMisgZG9l cyBub3QgaGF2ZSBkYXRhX3N0YXJ0IG1lbWJlciEgICovCiAgIFBVVF9BT1VU SERSX0RBVEFfU1RBUlQgKGFiZmQsIGFvdXRoZHJfaW4tPmRhdGFfc3RhcnQs CiAJCQkgIGFvdXRoZHJfb3V0LT5zdGFuZGFyZC5kYXRhX3N0YXJ0KTsKQEAg LTEyNjEsNiArMTI2NSwzNSBAQAogCSAgICB9CiAKIAkgIC8qIFByaW50IEhp bnROYW1lIHZlY3RvciBlbnRyaWVzLiAgKi8KKyNpZmRlZiBDT0ZGX1dJVEhf cGV4NjQKKwkgIGZvciAoaiA9IDA7IGogPCBkYXRhc2l6ZTsgaiArPSA4KQor CSAgICB7CisJCQl1bnNpZ25lZCBsb25nIG1lbWJlciA9IGJmZF9nZXRfMzIo YWJmZCxkYXRhK2lkeCtqKTsKKwkJCXVuc2lnbmVkIGxvbmcgbWVtYmVyX2hp Z2ggPSBiZmRfZ2V0XzMyKGFiZmQsZGF0YStpZHgrais0KTsKKwkJCWlmKCFt ZW1iZXIgJiYgIW1lbWJlcl9oaWdoKSBicmVhazsKKwkgICAgICBpZiAobWVt YmVyX2hpZ2ggJiAweDgwMDAwMDAwKQorCQlmcHJpbnRmIChmaWxlLCAiXHQl bHglMDhseFx0ICU0bHglMDhseCAgPG5vbmU+IiwKKwkJCSBtZW1iZXJfaGln aCxtZW1iZXIsIG1lbWJlcl9oaWdoICYgMHg3ZmZmZmZmZixtZW1iZXIpOwor CSAgICAgIGVsc2UKKwkJeworCQkgIGludCBvcmRpbmFsOworCQkgIGNoYXIg Km1lbWJlcl9uYW1lOworCisJCSAgb3JkaW5hbCA9IGJmZF9nZXRfMTYgKGFi ZmQsIGRhdGEgKyBtZW1iZXIgLSBhZGopOworCQkgIG1lbWJlcl9uYW1lID0g KGNoYXIgKikgZGF0YSArIG1lbWJlciAtIGFkaiArIDI7CisJCSAgZnByaW50 ZiAoZmlsZSwgIlx0JTA0bHhcdCAlNGQgICVzIixtZW1iZXIsIG9yZGluYWws IG1lbWJlcl9uYW1lKTsKKwkJICB9CisKKwkgICAgICAvKiBJZiB0aGUgdGlt ZSBzdGFtcCBpcyBub3QgemVybywgdGhlIGltcG9ydCBhZGRyZXNzCisJCSB0 YWJsZSBob2xkcyBhY3R1YWwgYWRkcmVzc2VzLiAgKi8KKwkgICAgICBpZiAo dGltZV9zdGFtcCAhPSAwCisJCSAgJiYgZmlyc3RfdGh1bmsgIT0gMAorCQkg ICYmIGZpcnN0X3RodW5rICE9IGhpbnRfYWRkcikKKwkJZnByaW50ZiAoZmls ZSwgIlx0JTA0bHgiLAorCQkJIChsb25nKSBiZmRfZ2V0XzMyIChhYmZkLCBm dF9kYXRhICsgZnRfaWR4ICsgaikpOworCSAgICAgIGZwcmludGYgKGZpbGUs ICJcbiIpOworCSAgICB9CisjZWxzZQogCSAgZm9yIChqID0gMDsgaiA8IGRh dGFzaXplOyBqICs9IDQpCiAJICAgIHsKIAkgICAgICB1bnNpZ25lZCBsb25n IG1lbWJlciA9IGJmZF9nZXRfMzIgKGFiZmQsIGRhdGEgKyBpZHggKyBqKTsK QEAgLTEyOTAsOSArMTMyMyw5IEBACiAJCSAgJiYgZmlyc3RfdGh1bmsgIT0g aGludF9hZGRyKQogCQlmcHJpbnRmIChmaWxlLCAiXHQlMDRseCIsCiAJCQkg KGxvbmcpIGJmZF9nZXRfMzIgKGFiZmQsIGZ0X2RhdGEgKyBmdF9pZHggKyBq KSk7Ci0KIAkgICAgICBmcHJpbnRmIChmaWxlLCAiXG4iKTsKIAkgICAgfQor I2VuZGlmCiAKIAkgIGlmIChmdF9hbGxvY2F0ZWQpCiAJICAgIGZyZWUgKGZ0 X2RhdGEpOwpAQCAtMTUzMyw3ICsxNTY2LDcgQEAKIHN0YXRpYyBiZmRfYm9v bGVhbgogcGVfcHJpbnRfcGRhdGEgKGJmZCAqIGFiZmQsIHZvaWQgKiB2Zmls ZSkKIHsKLSNpZmRlZiBDT0ZGX1dJVEhfcGVwCisjaWYgZGVmaW5lZChDT0ZG X1dJVEhfcGVwKSAmJiAhZGVmaW5lZChDT0ZGX1dJVEhfcGV4NjQpCiAjIGRl ZmluZSBQREFUQV9ST1dfU0laRQkoMyo4KQogI2Vsc2UKICMgZGVmaW5lIFBE QVRBX1JPV19TSVpFCSg1KjQpCkBAIC0xNTU5LDcgKzE1OTIsNyBAQAogCiAg IGZwcmludGYgKGZpbGUsCiAJICAgXygiXG5UaGUgRnVuY3Rpb24gVGFibGUg KGludGVycHJldGVkIC5wZGF0YSBzZWN0aW9uIGNvbnRlbnRzKVxuIikpOwot I2lmZGVmIENPRkZfV0lUSF9wZXAKKyNpZiBkZWZpbmVkKENPRkZfV0lUSF9w ZXApICYmICFkZWZpbmVkKENPRkZfV0lUSF9wZXg2NCkKICAgZnByaW50ZiAo ZmlsZSwKIAkgICBfKCIgdm1hOlx0XHRcdEJlZ2luIEFkZHJlc3MgICAgRW5k IEFkZHJlc3MgICAgICBVbndpbmQgSW5mb1xuIikpOwogI2Vsc2UKQEAgLTE2 MTMsNyArMTY0Niw3IEBACiAgICAgICBmcHJpbnRmX3ZtYSAoZmlsZSwgYmVn aW5fYWRkcik7IGZwdXRjICgnICcsIGZpbGUpOwogICAgICAgZnByaW50Zl92 bWEgKGZpbGUsIGVuZF9hZGRyKTsgZnB1dGMgKCcgJywgZmlsZSk7CiAgICAg ICBmcHJpbnRmX3ZtYSAoZmlsZSwgZWhfaGFuZGxlcik7Ci0jaWZuZGVmIENP RkZfV0lUSF9wZXAKKyNpZiAhZGVmaW5lZChDT0ZGX1dJVEhfcGVwKSB8fCBk ZWZpbmVkKENPRkZfV0lUSF9wZXg2NCkKICAgICAgIGZwdXRjICgnICcsIGZp bGUpOwogICAgICAgZnByaW50Zl92bWEgKGZpbGUsIGVoX2RhdGEpOyBmcHV0 YyAoJyAnLCBmaWxlKTsKICAgICAgIGZwcmludGZfdm1hIChmaWxlLCBwcm9s b2dfZW5kX2FkZHIpOwpkaWZmIC1yTmJ1IGJpbnV0aWxzLTIuMTdfb3JnL2Jm ZC9wZWkteDg2XzY0LmMgYmludXRpbHMtMi4xNy9iZmQvcGVpLXg4Nl82NC5j Ci0tLSBiaW51dGlscy0yLjE3X29yZy9iZmQvcGVpLXg4Nl82NC5jCTE5NzAt MDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyBiaW51dGlscy0y LjE3L2JmZC9wZWkteDg2XzY0LmMJMjAwNi0wOC0xNyAwOTowNjo1OS4wMDAw MDAwMDAgKzAyMDAKQEAgLTAsMCArMSw1NSBAQAorLyogQkZEIGJhY2stZW5k IGZvciBJbnRlbCAzODYgUEUgSU1BR0UgQ09GRiBmaWxlcy4KKyAgIENvcHly aWdodCAxOTk1LCAxOTk2LCAxOTk5LCAyMDAxLCAyMDAyLCAyMDA0IEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIGZpbGUgaXMg cGFydCBvZiBCRkQsIHRoZSBCaW5hcnkgRmlsZSBEZXNjcmlwdG9yIGxpYnJh cnkuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAg IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl CisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0 byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTEg RnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIx MTAtMTMwMSwgVVNBLgorICAgCisgICBXcml0dGVuIGJ5IEthaSBUaWV0eiwg T25lVmlzaW9uIFNvZnR3YXJlIEdtYkgmQ29LZy4KKyovCisKKyNpbmNsdWRl ICJiZmQuaCIKKyNpbmNsdWRlICJzeXNkZXAuaCIKKworI2RlZmluZSBUQVJH RVRfU1lNIAkJeDg2XzY0cGVpX3ZlYworI2RlZmluZSBUQVJHRVRfTkFNRSAJ CSJwZWkteDg2LTY0IgorI2RlZmluZSBDT0ZGX0lNQUdFX1dJVEhfUEUKKyNk ZWZpbmUgQ09GRl9XSVRIX1BFCisjZGVmaW5lIENPRkZfV0lUSF9wZXg2NAor I2RlZmluZSBQQ1JFTE9GRlNFVCAJCVRSVUUKKyNkZWZpbmUgVEFSR0VUX1VO REVSU0NPUkUgCSdfJworI2RlZmluZSBDT0ZGX0xPTkdfU0VDVElPTl9OQU1F UworI2RlZmluZSBDT0ZGX1NVUFBPUlRfR05VX0xJTktPTkNFCisjZGVmaW5l IENPRkZfTE9OR19GSUxFTkFNRVMKKworI2RlZmluZSBDT0ZGX1NFQ1RJT05f QUxJR05NRU5UX0VOVFJJRVMgXAoreyBDT0ZGX1NFQ1RJT05fTkFNRV9FWEFD VF9NQVRDSCAoIi5ic3MiKSwgXAorICBDT0ZGX0FMSUdOTUVOVF9GSUVMRF9F TVBUWSwgQ09GRl9BTElHTk1FTlRfRklFTERfRU1QVFksIDQgfSwgXAoreyBD T0ZGX1NFQ1RJT05fTkFNRV9FWEFDVF9NQVRDSCAoIi5kYXRhIiksIFwKKyAg Q09GRl9BTElHTk1FTlRfRklFTERfRU1QVFksIENPRkZfQUxJR05NRU5UX0ZJ RUxEX0VNUFRZLCA0IH0sIFwKK3sgQ09GRl9TRUNUSU9OX05BTUVfRVhBQ1Rf TUFUQ0ggKCIucmRhdGEiKSwgXAorICBDT0ZGX0FMSUdOTUVOVF9GSUVMRF9F TVBUWSwgQ09GRl9BTElHTk1FTlRfRklFTERfRU1QVFksIDQgfSwgXAoreyBD T0ZGX1NFQ1RJT05fTkFNRV9FWEFDVF9NQVRDSCAoIi50ZXh0IiksIFwKKyAg Q09GRl9BTElHTk1FTlRfRklFTERfRU1QVFksIENPRkZfQUxJR05NRU5UX0ZJ RUxEX0VNUFRZLCA0IH0sIFwKK3sgQ09GRl9TRUNUSU9OX05BTUVfUEFSVElB TF9NQVRDSCAoIi5pZGF0YSIpLCBcCisgIENPRkZfQUxJR05NRU5UX0ZJRUxE X0VNUFRZLCBDT0ZGX0FMSUdOTUVOVF9GSUVMRF9FTVBUWSwgMiB9LCBcCit7 IENPRkZfU0VDVElPTl9OQU1FX0VYQUNUX01BVENIICgiLnBkYXRhIiksIFwK KyAgQ09GRl9BTElHTk1FTlRfRklFTERfRU1QVFksIENPRkZfQUxJR05NRU5U X0ZJRUxEX0VNUFRZLCAyIH0sIFwKK3sgQ09GRl9TRUNUSU9OX05BTUVfUEFS VElBTF9NQVRDSCAoIi5kZWJ1ZyIpLCBcCisgIENPRkZfQUxJR05NRU5UX0ZJ RUxEX0VNUFRZLCBDT0ZGX0FMSUdOTUVOVF9GSUVMRF9FTVBUWSwgMCB9LCBc Cit7IENPRkZfU0VDVElPTl9OQU1FX1BBUlRJQUxfTUFUQ0ggKCIuZ251Lmxp bmtvbmNlLndpLiIpLCBcCisgIENPRkZfQUxJR05NRU5UX0ZJRUxEX0VNUFRZ LCBDT0ZGX0FMSUdOTUVOVF9GSUVMRF9FTVBUWSwgMCB9CisKKyNpbmNsdWRl ICJjb2ZmLXg4Nl82NC5jIgpkaWZmIC1yTmJ1IGJpbnV0aWxzLTIuMTdfb3Jn L2JmZC9wZWljb2RlLmggYmludXRpbHMtMi4xNy9iZmQvcGVpY29kZS5oCi0t LSBiaW51dGlscy0yLjE3X29yZy9iZmQvcGVpY29kZS5oCTIwMDUtMDUtMDQg MTc6NTM6MzcuMDAwMDAwMDAwICswMjAwCisrKyBiaW51dGlscy0yLjE3L2Jm ZC9wZWljb2RlLmgJMjAwNi0wOC0wOSAxMDo1NDozOS4wMDAwMDAwMDAgKzAy MDAKQEAgLTE4Myw4ICsxODMsMTYgQEAKICNpZmRlZiBDT0ZGX0lNQUdFX1dJ VEhfUEUKICMgZGVmaW5lIGNvZmZfc3dhcF9maWxlaGRyX291dCBfYmZkX1hY aV9vbmx5X3N3YXBfZmlsZWhkcl9vdXQKICNlbHNlCisjaWZkZWYgQ09GRl9X SVRIX3BleDY0CisjZGVmaW5lIGNvZmZfc3dhcF9maWxlaGRyX291dCBfYmZk X3BleDY0X29ubHlfc3dhcF9maWxlaGRyX291dAorI2Vsc2UKKyNpZmRlZiBD T0ZGX1dJVEhfcGVwCisjZGVmaW5lIGNvZmZfc3dhcF9maWxlaGRyX291dCBf YmZkX3BlcF9vbmx5X3N3YXBfZmlsZWhkcl9vdXQKKyNlbHNlCiAjIGRlZmlu ZSBjb2ZmX3N3YXBfZmlsZWhkcl9vdXQgX2JmZF9wZV9vbmx5X3N3YXBfZmls ZWhkcl9vdXQKICNlbmRpZgorI2VuZGlmCisjZW5kaWYKIAogc3RhdGljIHZv aWQKIGNvZmZfc3dhcF9zY25oZHJfaW4gKGJmZCAqIGFiZmQsIHZvaWQgKiBl eHQsIHZvaWQgKiBpbikKQEAgLTM2Myw3ICszNzEsNiBAQAogI2RlZmluZSBj b2ZmX2dldF9zeW1ib2xfaW5mbyBfYmZkX1hYX2dldF9zeW1ib2xfaW5mbwog CiAjaWZkZWYgQ09GRl9JTUFHRV9XSVRIX1BFCi0MCiAvKiBDb2RlIHRvIGhh bmRsZSBNaWNyb3NvZnQncyBJbWFnZSBMaWJyYXJ5IEZvcm1hdC4KICAgIEFs c28ga25vd24gYXMgTElOSzYgZm9ybWF0LgogICAgRG9jdW1lbnRhdGlvbiBh Ym91dCB0aGlzIGZvcm1hdCBjYW4gYmUgZm91bmQgYXQ6CkBAIC00MDUsOCAr NDEyLDEzIEBACiAJCQkJCSsgTlVNX0lMRl9TRUNUSU9OUyAqIDkgXAogCQkJ CQkrIFNUUklOR19TSVpFX1NJWkUpCiAjZGVmaW5lIFNJWkVPRl9JREFUQTIJ CSg1ICogNCkKKyNpZm5kZWYgQ09GRl9XSVRIX3BleDY0CiAjZGVmaW5lIFNJ WkVPRl9JREFUQTQJCSgxICogNCkKICNkZWZpbmUgU0laRU9GX0lEQVRBNQkJ KDEgKiA0KQorI2Vsc2UKKyNkZWZpbmUgU0laRU9GX0lEQVRBNAkJKDIgKiA0 KQorI2RlZmluZSBTSVpFT0ZfSURBVEE1CQkoMiAqIDQpCisjZW5kaWYKICNk ZWZpbmUgU0laRU9GX0lEQVRBNgkJKDIgKyBzdHJsZW4gKHN5bWJvbF9uYW1l KSArIDEgKyAxKQogI2RlZmluZSBTSVpFT0ZfSURBVEE3CQkoc3RybGVuIChz b3VyY2VfZGxsKSArIDEgKyAxKQogI2RlZmluZSBTSVpFT0ZfSUxGX1NFQ1RJ T05TICAgICAoTlVNX0lMRl9TRUNUSU9OUyAqIHNpemVvZiAoc3RydWN0IGNv ZmZfc2VjdGlvbl90ZGF0YSkpCkBAIC02NTUsNiArNjY3LDEyIEBACiAgICAg OCwgMgogICB9LAogI2VuZGlmCisjaWZkZWYgQU1ENjRNQUdJQworICB7IEFN RDY0TUFHSUMsCisgIHsgMHhmZiwweDI1LDB4MDAsMHgwMCwweDAwLDB4MDAs MHg5MCwweDkwIH0sCisgIDgsMgorICB9LAorI2VuZGlmCiAKICNpZmRlZiAg TUM2OE1BR0lDCiAgIHsgTUM2OE1BR0lDLCB7IC8qIFhYWCBmaWxsIG1lIGlu ICovIH0sIDAsIDAgfSwKQEAgLTgzMCw4ICs4NDgsMTUgQEAKIAkvKiBYWFgg LSB0cmVhdCBhcyBJTVBPUlRfTkFNRSA/Pz8gKi8KIAlhYm9ydCAoKTsKIAor I2lmbmRlZiBDT0ZGX1dJVEhfcGV4NjQKICAgICAgICogKHVuc2lnbmVkIGlu dCAqKSBpZDQtPmNvbnRlbnRzID0gb3JkaW5hbCB8IDB4ODAwMDAwMDA7CiAg ICAgICAqICh1bnNpZ25lZCBpbnQgKikgaWQ1LT5jb250ZW50cyA9IG9yZGlu YWwgfCAweDgwMDAwMDAwOworI2Vsc2UKKyAgICAgICogKHVuc2lnbmVkIGlu dCAqKSBpZDQtPmNvbnRlbnRzID0gb3JkaW5hbDsKKwkgICgodW5zaWduZWQg aW50ICopIGlkNC0+Y29udGVudHMpWzFdID0gMHg4MDAwMDAwMDsKKyAgICAg ICogKHVuc2lnbmVkIGludCAqKSBpZDUtPmNvbnRlbnRzID0gb3JkaW5hbDsK KyAgICAgICgodW5zaWduZWQgaW50ICopIGlkNS0+Y29udGVudHMpWzFdID0g MHg4MDAwMDAwMDsKKyNlbmRpZgogICAgIH0KICAgZWxzZQogICAgIHsKQEAg LTEwNzAsNyArMTA5NSwxMSBAQAogICAgICAgbWFnaWMgPSBJMzg2TUFHSUM7 CiAjZW5kaWYKICAgICAgIGJyZWFrOwotCisJY2FzZSBJTUFHRV9GSUxFX01B Q0hJTkVfQU1ENjQ6CisjaWZkZWYgQU1ENjRNQUdJQworCQltYWdpYz1BTUQ2 NE1BR0lDOworI2VuZGlmCisJCWJyZWFrOwogICAgIGNhc2UgSU1BR0VfRklM RV9NQUNISU5FX002OEs6CiAjaWZkZWYgTUM2OEFHSUMKICAgICAgIG1hZ2lj ID0gTUM2OE1BR0lDOwpAQCAtMTI1NSw3ICsxMjg0LDYgQEAKICAgICAgIGJm ZF9zZXRfZXJyb3IgKGJmZF9lcnJvcl93cm9uZ19mb3JtYXQpOwogICAgICAg cmV0dXJuIE5VTEw7CiAgICAgfQotCiAgIC8qIEhlcmUgaXMgdGhlIGhhY2su ICBjb2ZmX29iamVjdF9wIHdhbnRzIHRvIHJlYWQgZmlsaHN6IGJ5dGVzIHRv CiAgICAgIHBpY2sgdXAgdGhlIENPRkYgaGVhZGVyIGZvciBQRSwgc2VlICJz dHJ1Y3QgZXh0ZXJuYWxfUEVJX2ZpbGVoZHIiCiAgICAgIGluIGluY2x1ZGUv Y29mZi9wZS5oLiAgV2UgYWRqdXN0IHNvIHRoYXQgdGhhdCB3aWxsIHdvcmsu ICovCkBAIC0xMjY1LDcgKzEyOTMsNiBAQAogCWJmZF9zZXRfZXJyb3IgKGJm ZF9lcnJvcl93cm9uZ19mb3JtYXQpOwogICAgICAgcmV0dXJuIE5VTEw7CiAg ICAgfQotCiAgIHJldHVybiBjb2ZmX29iamVjdF9wIChhYmZkKTsKIH0KIApk aWZmIC1yTmJ1IGJpbnV0aWxzLTIuMTdfb3JnL2JmZC90YXJnZXRzLmMgYmlu dXRpbHMtMi4xNy9iZmQvdGFyZ2V0cy5jCi0tLSBiaW51dGlscy0yLjE3X29y Zy9iZmQvdGFyZ2V0cy5jCTIwMDYtMDQtMDUgMTQ6NDE6NTcuMDAwMDAwMDAw ICswMjAwCisrKyBiaW51dGlscy0yLjE3L2JmZC90YXJnZXRzLmMJMjAwNi0w OC0wNCAxMTo1NzowMS4wMDAwMDAwMDAgKzAyMDAKQEAgLTc4Miw2ICs3ODIs OSBAQAogZXh0ZXJuIGNvbnN0IGJmZF90YXJnZXQgd2UzMmtjb2ZmX3ZlYzsK IGV4dGVybiBjb25zdCBiZmRfdGFyZ2V0IHo4MGNvZmZfdmVjOwogZXh0ZXJu IGNvbnN0IGJmZF90YXJnZXQgejhrY29mZl92ZWM7CitleHRlcm4gY29uc3Qg YmZkX3RhcmdldCB4ODZfNjRwZV92ZWM7CitleHRlcm4gY29uc3QgYmZkX3Rh cmdldCB4ODZfNjRwZWlfdmVjOworZXh0ZXJuIGNvbnN0IGJmZF90YXJnZXQg eDg2XzY0Y29mZl92ZWM7CiAKIC8qIFRoZXNlIGFyZSBhbHdheXMgaW5jbHVk ZWQuICAqLwogZXh0ZXJuIGNvbnN0IGJmZF90YXJnZXQgc3JlY192ZWM7CkBA IC0xMDE5LDYgKzEwMjIsMTEgQEAKICNpZiAwCiAJJmkzODZkeW5peF92ZWMs CiAjZW5kaWYKKyNpZmRlZiBCRkQ2NAorCSZ4ODZfNjRjb2ZmX3ZlYywKKwkm eDg2XzY0cGVfdmVjLAorCSZ4ODZfNjRwZWlfdmVjLAorI2VuZGlmCiAJJmkz ODZmcmVlYnNkX3ZlYywKICNpZiAwCiAJLyogU2luY2UgYS5vdXQgZmlsZXMg bGFjayBkZWNlbnQgbWFnaWMgbnVtYmVycywgbm8gd2F5IHRvIHJlY29nbml6 ZQpkaWZmIC1yTmJ1IGJpbnV0aWxzLTIuMTdfb3JnL2JpbnV0aWxzL2NvbmZp Z3VyZSBiaW51dGlscy0yLjE3L2JpbnV0aWxzL2NvbmZpZ3VyZQotLS0gYmlu dXRpbHMtMi4xN19vcmcvYmludXRpbHMvY29uZmlndXJlCTIwMDYtMDQtMDYg MjM6NDk6MjkuMDAwMDAwMDAwICswMjAwCisrKyBiaW51dGlscy0yLjE3L2Jp bnV0aWxzL2NvbmZpZ3VyZQkyMDA2LTA4LTA4IDE1OjU3OjUzLjAwMDAwMDAw MCArMDIwMApAQCAtMTA3MjIsNiArMTA3MjIsMTIgQEAKIAkgIEJVSUxEX1dJ TkRSRVM9JyQoV0lORFJFU19QUk9HKSQoRVhFRVhUKScKIAkgIEJVSUxEX0RM TFdSQVA9JyQoRExMV1JBUF9QUk9HKSQoRVhFRVhUKScKIAkgIDs7CisJeDg2 XzY0LSotbWluZ3c2NCopCisgIAkgIEJVSUxEX0RMTFRPT0w9JyQoRExMVE9P TF9QUk9HKSQoRVhFRVhUKScKKwkgIERMTFRPT0xfREVGUz0iJERMTFRPT0xf REVGUyAtRERMTFRPT0xfTVg4Nl82NCIKKwkgIEJVSUxEX1dJTkRSRVM9JyQo V0lORFJFU19QUk9HKSQoRVhFRVhUKScKKwkgIEJVSUxEX0RMTFdSQVA9JyQo RExMV1JBUF9QUk9HKSQoRVhFRVhUKScKKwkgIDs7CiAJaVszLTddODYtKi1p bnRlcml4KQogCSAgQlVJTERfRExMVE9PTD0nJChETExUT09MX1BST0cpJwog CSAgRExMVE9PTF9ERUZTPSIkRExMVE9PTF9ERUZTIC1ERExMVE9PTF9JMzg2 IgpkaWZmIC1yTmJ1IGJpbnV0aWxzLTIuMTdfb3JnL2JpbnV0aWxzL2NvbmZp Z3VyZS5pbiBiaW51dGlscy0yLjE3L2JpbnV0aWxzL2NvbmZpZ3VyZS5pbgot LS0gYmludXRpbHMtMi4xN19vcmcvYmludXRpbHMvY29uZmlndXJlLmluCTIw MDYtMDQtMDYgMjM6NDk6MjkuMDAwMDAwMDAwICswMjAwCisrKyBiaW51dGls cy0yLjE3L2JpbnV0aWxzL2NvbmZpZ3VyZS5pbgkyMDA2LTA4LTA4IDE1OjU2 OjU2LjAwMDAwMDAwMCArMDIwMApAQCAtMjYwLDYgKzI2MCwxNCBAQAogCSAg QlVJTERfRExMV1JBUD0nJChETExXUkFQX1BST0cpJChFWEVFWFQpJwogCSAg OzsKIGNoYW5nZXF1b3RlKCwpZG5sCisJeDg2XzY0LSotbWluZ3c2NCopCitj aGFuZ2VxdW90ZShbLF0pZG5sCisgIAkgIEJVSUxEX0RMTFRPT0w9JyQoRExM VE9PTF9QUk9HKSQoRVhFRVhUKScKKwkgIERMTFRPT0xfREVGUz0iJERMTFRP T0xfREVGUyAtRERMTFRPT0xfTVg4Nl82NCIKKwkgIEJVSUxEX1dJTkRSRVM9 JyQoV0lORFJFU19QUk9HKSQoRVhFRVhUKScKKwkgIEJVSUxEX0RMTFdSQVA9 JyQoRExMV1JBUF9QUk9HKSQoRVhFRVhUKScKKwkgIDs7CitjaGFuZ2VxdW90 ZSgsKWRubAogCWlbMy03XTg2LSotaW50ZXJpeCkKIGNoYW5nZXF1b3RlKFss XSlkbmwKIAkgIEJVSUxEX0RMTFRPT0w9JyQoRExMVE9PTF9QUk9HKScKZGlm ZiAtck5idSBiaW51dGlscy0yLjE3X29yZy9iaW51dGlscy9kbGx0b29sLmMg YmludXRpbHMtMi4xNy9iaW51dGlscy9kbGx0b29sLmMKLS0tIGJpbnV0aWxz LTIuMTdfb3JnL2JpbnV0aWxzL2RsbHRvb2wuYwkyMDA2LTAzLTA5IDIyOjUw OjUzLjAwMDAwMDAwMCArMDEwMAorKysgYmludXRpbHMtMi4xNy9iaW51dGls cy9kbGx0b29sLmMJMjAwNi0wOC0xNyAwOTowOToxNS4wMDAwMDAwMDAgKzAy MDAKQEAgLTI2MSw2ICsyNjEsOSBAQAogI2luY2x1ZGUgImNvZmYvYXJtLmgi CiAjaW5jbHVkZSAiY29mZi9pbnRlcm5hbC5oIgogI2VuZGlmCisjaWZkZWYg RExMVE9PTF9NWDg2XzY0CisjaW5jbHVkZSAiY29mZi94ODZfNjQuaCIKKyNl bmRpZgogCiAvKiBGb3J3YXJkIHJlZmVyZW5jZXMuICAqLwogc3RhdGljIGNo YXIgKmxvb2tfZm9yX3Byb2cgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq LCBpbnQpOwpAQCAtMzk2LDYgKzM5OSwxMCBAQAogc3RhdGljIGNvbnN0IGNo YXIgKm1uYW1lID0gImkzODYiOwogI2VuZGlmCiAKKyNpZmRlZiBETExUT09M X01YODZfNjQKK3N0YXRpYyBjb25zdCBjaGFyICptbmFtZSA9ICJpMzg2Ong4 Ni02NCI7CisjZW5kaWYKKwogI2lmZGVmIERMTFRPT0xfUFBDCiBzdGF0aWMg Y29uc3QgY2hhciAqbW5hbWUgPSAicHBjIjsKICNlbmRpZgpAQCAtNjI5LDYg KzYzNiwxNCBAQAogICAgIGFybV9qdGFiLCBzaXplb2YgKGFybV9qdGFiKSwg OAogICB9CiAgICwKKyAgeworI2RlZmluZSBNWDg2IDEwCisgICAgImkzODY6 eDg2LTY0IiwgIi5ieXRlIiwgIi5zaG9ydCIsICIubG9uZyIsICIuYXNjaXoi LCAiIyIsCisgICAgImptcCAqIiwgIi5nbG9iYWwiLCAiLnNwYWNlIiwgIi5h bGlnblx0MiIsIi5hbGlnblx0NCIsICIiLAorICAgICJwZS14ODYtNjQiLGJm ZF9hcmNoX2kzODYsCisgICAgaTM4Nl9qdGFiLCBzaXplb2YgKGkzODZfanRh YiksIDIKKyAgfQorICAsCiAgIHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9CiB9OwogCkBAIC03NTIsNiAr NzY3LDcgQEAKICAgICB7CiAgICAgY2FzZSBNQVJNOgogICAgIGNhc2UgTTM4 NjoKKwljYXNlIE1YODY6CiAgICAgY2FzZSBNUFBDOgogICAgIGNhc2UgTVRI VU1COgogICAgIGNhc2UgTUFSTV9JTlRFUldPUks6CkBAIC03NzYsNiArNzky LDcgQEAKICAgICB7CiAgICAgY2FzZSBNQVJNOgogICAgIGNhc2UgTTM4NjoK KwljYXNlIE1YODY6CiAgICAgY2FzZSBNUFBDOgogICAgIGNhc2UgTVRIVU1C OgogICAgIGNhc2UgTUFSTV9JTlRFUldPUks6CkBAIC04MDksNiArODI2LDcg QEAKICAgICBjYXNlIE1BUk1fRVBPQzoKICAgICAgIGJyZWFrOwogICAgIGNh c2UgTTM4NjoKKwljYXNlIE1YODY6CiAgICAgICAvKiBTeW1ib2wgbmFtZXMg c3RhcnRpbmcgd2l0aCA/IGRvIG5vdCBoYXZlIGEgbGVhZGluZyB1bmRlcnNj b3JlLiAqLwogICAgICAgaWYgKG5hbWUgJiYgKm5hbWUgPT0gJz8nKQogICAg ICAgICBicmVhazsKZGlmZiAtck5idSBiaW51dGlscy0yLjE3X29yZy9jb25m aWcuZ3Vlc3MgYmludXRpbHMtMi4xNy9jb25maWcuZ3Vlc3MKLS0tIGJpbnV0 aWxzLTIuMTdfb3JnL2NvbmZpZy5ndWVzcwkyMDA2LTAxLTE2IDE4OjM0OjM3 LjAwMDAwMDAwMCArMDEwMAorKysgYmludXRpbHMtMi4xNy9jb25maWcuZ3Vl c3MJMjAwNi0wNy0yNiAxNToyMjo1My4wMDAwMDAwMDAgKzAyMDAKQEAgLTc3 Nyw2ICs3NzcsOSBAQAogICAgIGkqOkNZR1dJTio6KikKIAllY2hvICR7VU5B TUVfTUFDSElORX0tcGMtY3lnd2luCiAJZXhpdCA7OworICAgIGkqOk1JTkdX NjQqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1pbmd3NjQKKwll eGl0IDs7CiAgICAgaSo6TUlOR1cqOiopCiAJZWNobyAke1VOQU1FX01BQ0hJ TkV9LXBjLW1pbmd3MzIKIAlleGl0IDs7CmRpZmYgLXJOYnUgYmludXRpbHMt Mi4xN19vcmcvY29uZmlnLnN1YiBiaW51dGlscy0yLjE3L2NvbmZpZy5zdWIK LS0tIGJpbnV0aWxzLTIuMTdfb3JnL2NvbmZpZy5zdWIJMjAwNi0wMS0xNiAx ODozNDozNy4wMDAwMDAwMDAgKzAxMDAKKysrIGJpbnV0aWxzLTIuMTcvY29u ZmlnLnN1YgkyMDA2LTA3LTI2IDE1OjI1OjM1LjAwMDAwMDAwMCArMDIwMApA QCAtNjgzLDYgKzY4MywxMCBAQAogCQliYXNpY19tYWNoaW5lPWkzODYtcGMK IAkJb3M9LW1pbmd3MzIKIAkJOzsKKwltaW5ndzY0KQorCQliYXNpY19tYWNo aW5lPXg4Nl82NC1wYworCQlvcz0tbWluZ3c2NAorCQk7OwogCW1pbmlmcmFt ZSkKIAkJYmFzaWNfbWFjaGluZT1tNjgwMDAtY29udmVyZ2VudAogCQk7OwpA QCAtMTIwNyw3ICsxMjExLDcgQEAKIAkgICAgICB8IC11ZGkqIHwgLWVhYmkq IHwgLWxpdGVzKiB8IC1pZWVlKiB8IC1nbzMyKiB8IC1hdXgqIFwKIAkgICAg ICB8IC1jaG9ydXNvcyogfCAtY2hvcnVzcmRiKiBcCiAJICAgICAgfCAtY3ln d2luKiB8IC1wZSogfCAtcHNvcyogfCAtbW9zcyogfCAtcHJvZWxmKiB8IC1y dGVtcyogXAotCSAgICAgIHwgLW1pbmd3MzIqIHwgLWxpbnV4LWdudSogfCAt bGludXgtbmV3bGliKiB8IC1saW51eC11Y2xpYmMqIFwKKwkgICAgICB8IC1t aW5ndzMyKiB8IC1taW5ndzY0KiB8IC1saW51eC1nbnUqIHwgLWxpbnV4LW5l d2xpYiogfCAtbGludXgtdWNsaWJjKiBcCiAJICAgICAgfCAtdXhwdiogfCAt YmVvcyogfCAtbXBlaXgqIHwgLXVkayogXAogCSAgICAgIHwgLWludGVyaXgq IHwgLXV3aW4qIHwgLW1rcyogfCAtcmhhcHNvZHkqIHwgLWRhcndpbiogfCAt b3BlbmVkKiBcCiAJICAgICAgfCAtb3BlbnN0ZXAqIHwgLW9za2l0KiB8IC1j b25peCogfCAtcHczMiogfCAtbm9uc3RvcHV4KiBcCmRpZmYgLXJOYnUgYmlu dXRpbHMtMi4xN19vcmcvY29uZmlndXJlIGJpbnV0aWxzLTIuMTcvY29uZmln dXJlCi0tLSBiaW51dGlscy0yLjE3X29yZy9jb25maWd1cmUJMjAwNi0wNC0w NiAyMzo0OToyNS4wMDAwMDAwMDAgKzAyMDAKKysrIGJpbnV0aWxzLTIuMTcv Y29uZmlndXJlCTIwMDYtMDctMjYgMTU6Mjk6MDguMDAwMDAwMDAwICswMjAw CkBAIC0xNzcxLDYgKzE3NzEsOCBAQAogICAgIDs7CiAgICotbWluZ3czMiop CiAgICAgOzsKKyAgKi1taW5ndzY0KikKKyAgICA7OwogICAqLWludGVyaXgq KQogICAgIGhvc3RfbWFrZWZpbGVfZnJhZz0iY29uZmlnL21oLWludGVyaXgi CiAgICAgOzsKZGlmZiAtck5idSBiaW51dGlscy0yLjE3X29yZy9nYXMvY29u ZmlnL29iai1jb2ZmLmggYmludXRpbHMtMi4xNy9nYXMvY29uZmlnL29iai1j b2ZmLmgKLS0tIGJpbnV0aWxzLTIuMTdfb3JnL2dhcy9jb25maWcvb2JqLWNv ZmYuaAkyMDA2LTA4LTAzIDE1OjE4OjMyLjAwMDAwMDAwMCArMDIwMAorKysg YmludXRpbHMtMi4xNy9nYXMvY29uZmlnL29iai1jb2ZmLmgJMjAwNi0wOC0w NCAwOTo0Mjo0NS4wMDAwMDAwMDAgKzAyMDAKQEAgLTU3LDI0ICs1NywyOCBA QAogI2VuZGlmCiAKICNpZmRlZiBUQ19JMzg2Ci0jaWZkZWYgVEVfUEVQCi0j aW5jbHVkZSAiY29mZi94ODZfNjQuaCIKLSNlbHNlCisjaWZuZGVmIFRFX1BF UAogI2luY2x1ZGUgImNvZmYvaTM4Ni5oIgorI2Vsc2UKKyNpbmNsdWRlICJj b2ZmL3g4Nl82NC5oIgogI2VuZGlmCiAKICNpZmRlZiBURV9QRQotI2lmbmRl ZiBURV9QRVAKLSNkZWZpbmUgVEFSR0VUX0ZPUk1BVCAicGUtaTM4NiIKKyNp ZmRlZiBURV9QRVAKKyNkZWZpbmUgVEFSR0VUX0ZPUk1BVCAiY29mZi14ODYt NjQiCiAjZWxzZQotI2RlZmluZSBUQVJHRVRfRk9STUFUICJwZS14ODYtNjQi CisjZGVmaW5lIFRBUkdFVF9GT1JNQVQgInBlLWkzODYiCiAjZW5kaWYKICNl bmRpZgogCiAjaWZuZGVmIFRBUkdFVF9GT1JNQVQKKyNpZmRlZiBURV9QRVAK KyNkZWZpbmUgVEFSR0VUX0ZPUk1BVCAiY29mZi14ODYtNjQiCisjZWxzZQog I2RlZmluZSBUQVJHRVRfRk9STUFUICJjb2ZmLWkzODYiCiAjZW5kaWYKICNl bmRpZgorI2VuZGlmCiAKICNpZmRlZiBUQ19NNjhLCiAjaW5jbHVkZSAiY29m Zi9tNjhrLmgiCmRpZmYgLXJOYnUgYmludXRpbHMtMi4xN19vcmcvZ2FzL2Nv bmZpZy90Yy1pMzg2LmMgYmludXRpbHMtMi4xNy9nYXMvY29uZmlnL3RjLWkz ODYuYwotLS0gYmludXRpbHMtMi4xN19vcmcvZ2FzL2NvbmZpZy90Yy1pMzg2 LmMJMjAwNi0wNC0wNyAwODo0MDo1Ny4wMDAwMDAwMDAgKzAyMDAKKysrIGJp bnV0aWxzLTIuMTcvZ2FzL2NvbmZpZy90Yy1pMzg2LmMJMjAwNi0wOC0xNCAx MDozMjozOC4wMDAwMDAwMDAgKzAyMDAKQEAgLTU0NjksNyArNTQ2OSw4IEBA CiAKIAlsaXN0ID0gYmZkX3RhcmdldF9saXN0ICgpOwogCWZvciAobCA9IGxp c3Q7ICpsICE9IE5VTEw7IGwrKykKLQkgIGlmIChzdHJjbXAgKCpsLCAiZWxm NjQteDg2LTY0IikgPT0gMCkKKwkgIGlmIChzdHJjbXAgKCpsLCAiZWxmNjQt eDg2LTY0IikgPT0gMCB8fCBzdHJjbXAoKmwsImNvZmYteDg2LTY0Iik9PTAg fHwgc3RyY21wKCpsLCJwZS14ODYtNjQiKT09MCB8fAorCQkgIHN0cmNtcCgq bCwicGVpLXg4Ni02NCIpPT0wKQogCSAgICB7CiAJICAgICAgZGVmYXVsdF9h cmNoID0gIng4Nl82NCI7CiAJICAgICAgYnJlYWs7CmRpZmYgLXJOYnUgYmlu dXRpbHMtMi4xN19vcmcvZ2FzL2NvbmZpZy90ZS1wZXAuaCBiaW51dGlscy0y LjE3L2dhcy9jb25maWcvdGUtcGVwLmgKLS0tIGJpbnV0aWxzLTIuMTdfb3Jn L2dhcy9jb25maWcvdGUtcGVwLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAw MDAwMDAgKzAxMDAKKysrIGJpbnV0aWxzLTIuMTcvZ2FzL2NvbmZpZy90ZS1w ZXAuaAkyMDA2LTA4LTE3IDA5OjExOjMxLjAwMDAwMDAwMCArMDIwMApAQCAt MCwwICsxLDYgQEAKKyNkZWZpbmUgVEVfUEVQCisjZGVmaW5lIENPRkZfSU1B R0VfV0lUSF9QRQorI2RlZmluZSBDT0ZGX1dJVEhfUEUKKyNkZWZpbmUgQ09G Rl9XSVRIX3BleDY0CisKKyNpbmNsdWRlICJ0ZS1wZS5oIgpkaWZmIC1yTmJ1 IGJpbnV0aWxzLTIuMTdfb3JnL2dhcy9jb25maWd1cmUgYmludXRpbHMtMi4x Ny9nYXMvY29uZmlndXJlCi0tLSBiaW51dGlscy0yLjE3X29yZy9nYXMvY29u ZmlndXJlCTIwMDYtMDQtMDYgMjM6NDk6MzEuMDAwMDAwMDAwICswMjAwCisr KyBiaW51dGlscy0yLjE3L2dhcy9jb25maWd1cmUJMjAwNi0wNy0yMCAxNjox MjowNC4wMDAwMDAwMDAgKzAyMDAKQEAgLTM5MjIsNyArMzkyMiw3IEBACiAg IHJtIC1yZiBjb25mdGVzdCoKICAgOzsKIAoteDg2XzY0LSpsaW51eCp8cHBj Ki0qbGludXgqfHBvd2VycGMqLSpsaW51eCp8czM5MCotKmxpbnV4KnxzcGFy YyotKmxpbnV4KikKK3g4Nl82NC0qbGludXgqfHg4Nl82NC0qbWluZ3c2NCp8 cHBjKi0qbGludXgqfHBvd2VycGMqLSpsaW51eCp8czM5MCotKmxpbnV4Knxz cGFyYyotKmxpbnV4KikKICAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJl IHVzaW5nLgogICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAog ICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21w aWxlXCIiKSA+JjUKQEAgLTM5MzYsNiArMzkzNiw5IEBACiAgICAgICAgIHg4 Nl82NC0qbGludXgqKQogICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGZf aTM4NiIKICAgICAgICAgICA7OworICAgICAgICB4ODZfNjQtKm1pbmd3NjQq KQorICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGZfaTM4NiIKKyAgICAg ICAgICA7OwogICAgICAgICBwcGM2NC0qbGludXgqfHBvd2VycGM2NC0qbGlu dXgqKQogICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGYzMnBwY2xpbnV4 IgogICAgICAgICAgIDs7CkBAIC0zOTUyLDYgKzM5NTUsOSBAQAogICAgICAg ICB4ODZfNjQtKmxpbnV4KikKICAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0g ZWxmX3g4Nl82NCIKICAgICAgICAgICA7OworICAgICAgICB4ODZfNjQtKm1p bmd3NjQqKQorICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0 IgorICAgICAgICAgIDs7CiAgICAgICAgIHBwYyotKmxpbnV4Knxwb3dlcnBj Ki0qbGludXgqKQogICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGY2NHBw YyIKICAgICAgICAgICA7OwpkaWZmIC1yTmJ1IGJpbnV0aWxzLTIuMTdfb3Jn L2dhcy9jb25maWd1cmUuaW4gYmludXRpbHMtMi4xNy9nYXMvY29uZmlndXJl LmluCi0tLSBiaW51dGlscy0yLjE3X29yZy9nYXMvY29uZmlndXJlLmluCTIw MDYtMDQtMDYgMjM6NDk6MzMuMDAwMDAwMDAwICswMjAwCisrKyBiaW51dGls cy0yLjE3L2dhcy9jb25maWd1cmUuaW4JMjAwNi0wNy0yMCAxNToxNzoxMS4w MDAwMDAwMDAgKzAyMDAKQEAgLTQxNyw2ICs0MTcsMTkgQEAKICAgICAgIDs7 CiAgICAgZXNhYwogICA7OworICB4ODZfNjQpCisgICAgY2FzZSAke29ial9m b3JtYXR9IGluCisgICAgYW91dCkKKyAgICAgIGVtdWxhdGlvbnM9IiRlbXVs YXRpb25zIGkzODZjb2ZmIGkzODZlbGYiCisgICAgICA7OworICAgIGNvZmYp CisgICAgICBlbXVsYXRpb25zPSIkZW11bGF0aW9ucyBpMzg2YW91dCBpMzg2 ZWxmIgorICAgIDs7CisgICAgZWxmKQorICAgICAgZW11bGF0aW9ucz0iJGVt dWxhdGlvbnMgaTM4NmFvdXQgaTM4NmNvZmYiCisgICAgICA7OworICAgIGVz YWMKKyAgOzsKICAgZXNhYwogZmkKIApkaWZmIC1yTmJ1IGJpbnV0aWxzLTIu MTdfb3JnL2dhcy9jb25maWd1cmUudGd0IGJpbnV0aWxzLTIuMTcvZ2FzL2Nv bmZpZ3VyZS50Z3QKLS0tIGJpbnV0aWxzLTIuMTdfb3JnL2dhcy9jb25maWd1 cmUudGd0CTIwMDYtMDQtMDUgMTQ6NDE6NTcuMDAwMDAwMDAwICswMjAwCisr KyBiaW51dGlscy0yLjE3L2dhcy9jb25maWd1cmUudGd0CTIwMDYtMDgtMDMg MTQ6MTU6NTguMDAwMDAwMDAwICswMjAwCkBAIC03Nyw3ICs3Nyw3IEBACiAg IHN0cm9uZ2FybSpiKQkJY3B1X3R5cGU9YXJtIGVuZGlhbj1iaWcgOzsKICAg c3Ryb25nYXJtKikJCWNwdV90eXBlPWFybSBlbmRpYW49bGl0dGxlIDs7CiAg IHY4NTAqKQkJY3B1X3R5cGU9djg1MCA7OwotICB4ODZfNjQpCQljcHVfdHlw ZT1pMzg2IGFyY2g9eDg2XzY0OzsKKyAgeDg2XzY0KikJCWNwdV90eXBlPWkz ODYgYXJjaD14ODZfNjQ7OwogICB4c2NhbGUqYmV8eHNjYWxlKmIpCWNwdV90 eXBlPWFybSBlbmRpYW49YmlnIDs7CiAgIHhzY2FsZSopCQljcHVfdHlwZT1h cm0gZW5kaWFuPWxpdHRsZSA7OwogICB4dGVuc2EqKQkJY3B1X3R5cGU9eHRl bnNhIGFyY2g9eHRlbnNhIDs7CkBAIC04Nyw2ICs4Nyw4IEBACiAKICMgQXNz aWduIG9iamVjdCBmb3JtYXQuICBTZXQgZm10LCBlbSwgYW5kIGJmZF9nYXMu CiBnZW5lcmljX3RhcmdldD0ke2NwdV90eXBlfS0kdmVuZG9yLSRvcworZWNo byAiJCQkJDogaW5mbzogR0FTIHdhbnQgc3VwcG9ydCB0YXJnZXQgQ1BVICR7 Z2VuZXJpY190YXJnZXR9IiA+JjI7CisKICMgTm90ZTogVGhpcyB0YWJsZSBp cyBhbHBoYS1zb3J0ZWQsIHBsZWFzZSB0cnkgdG8ga2VlcCBpdCB0aGF0IHdh eS4KIGNhc2UgJHtnZW5lcmljX3RhcmdldH0gaW4KICAgYWxwaGEtKi0qdm1z KikJCQlmbXQ9ZXZheCA7OwpAQCAtMjEwLDYgKzIxMiw3IEBACiAgIGkzODYt Ki1jeWd3aW4qKQkJCWZtdD1jb2ZmIGVtPXBlIDs7CiAgIGkzODYtKi1pbnRl cml4KikJCQlmbXQ9Y29mZiBlbT1pbnRlcml4IDs7CiAgIGkzODYtKi1taW5n dzMyKikJCQlmbXQ9Y29mZiBlbT1wZSA7OworICBpMzg2LSotbWluZ3c2NCop CQkJZm10PWNvZmYgZW09cGVwIDs7CiAgIGkzODYtKi1udG8tcW54KikJCQlm bXQ9ZWxmIDs7CiAgIGkzODYtKi0qbnQqKQkJCQlmbXQ9Y29mZiBlbT1wZSA7 OwogICBpMzg2LSotY2hhb3MpCQkJCWZtdD1lbGYgOzsKZGlmZiAtck5idSBi aW51dGlscy0yLjE3X29yZy9pbmNsdWRlL2NvZmYvZXh0ZXJuYWwuaCBiaW51 dGlscy0yLjE3L2luY2x1ZGUvY29mZi9leHRlcm5hbC5oCi0tLSBiaW51dGls cy0yLjE3X29yZy9pbmNsdWRlL2NvZmYvZXh0ZXJuYWwuaAkyMDA1LTA1LTEw IDEyOjIxOjA5LjAwMDAwMDAwMCArMDIwMAorKysgYmludXRpbHMtMi4xNy9p bmNsdWRlL2NvZmYvZXh0ZXJuYWwuaAkyMDA2LTA4LTA3IDEzOjA4OjU5LjAw MDAwMDAwMCArMDIwMApAQCAtNTUsNiArNTUsMjAgQEAKIAogI2RlZmluZSBB T1VUSERSU1ogMjgKICNkZWZpbmUgQU9VVFNaIDI4CisKK3R5cGVkZWYgc3Ry dWN0IGV4dGVybmFsX2FvdXRoZHI2NAorICB7CisgICAgY2hhciBtYWdpY1sy XTsJLyogdHlwZSBvZiBmaWxlCQkJCSovCisgICAgY2hhciB2c3RhbXBbMl07 CS8qIHZlcnNpb24gc3RhbXAJCQkqLworICAgIGNoYXIgdHNpemVbNF07CS8q IHRleHQgc2l6ZSBpbiBieXRlcywgcGFkZGVkIHRvIEZXIGJkcnkqLworICAg IGNoYXIgZHNpemVbNF07CS8qIGluaXRpYWxpemVkIGRhdGEgIiAgIgkJKi8K KyAgICBjaGFyIGJzaXplWzRdOwkvKiB1bmluaXRpYWxpemVkIGRhdGEgIiAg ICIJCSovCisgICAgY2hhciBlbnRyeVs0XTsJLyogZW50cnkgcHQuCQkJCSov CisgICAgY2hhciB0ZXh0X3N0YXJ0WzRdOwkvKiBiYXNlIG9mIHRleHQgdXNl ZCBmb3IgdGhpcyBmaWxlIAkqLworICB9CitBT1VUSERSNjQ7CisjZGVmaW5l IEFPVVRIRFJTWjY0CTI0CisKICNlbmRpZgogCiAjaWZuZGVmIERPX05PVF9E RUZJTkVfU0NOSERSCmRpZmYgLXJOYnUgYmludXRpbHMtMi4xN19vcmcvaW5j bHVkZS9jb2ZmL2ludGVybmFsLmggYmludXRpbHMtMi4xNy9pbmNsdWRlL2Nv ZmYvaW50ZXJuYWwuaAotLS0gYmludXRpbHMtMi4xN19vcmcvaW5jbHVkZS9j b2ZmL2ludGVybmFsLmgJMjAwNi0wMi0wNSAxMjo1NzozNC4wMDAwMDAwMDAg KzAxMDAKKysrIGJpbnV0aWxzLTIuMTcvaW5jbHVkZS9jb2ZmL2ludGVybmFs LmgJMjAwNi0wOC0wNyAxMjozNjowMS4wMDAwMDAwMDAgKzAyMDAKQEAgLTYw NCw2ICs2MDQsMjIgQEAKICAgdW5zaWduZWQgbG9uZyByX29mZnNldDsJLyog VXNlZCBieSBBbHBoYSBFQ09GRiwgU1BBUkMsIG90aGVycyAqLwogfTsKIAor LyogWDg2LTY0IHJlbG9jYXRpb25zICovDQorI2RlZmluZSBSX0FNRDY0X0FC UyAwIC8qIFJlZmVyZW5jZSBpcyBhYnNvbHV0ZSwgbm8gcmVsb2NhdGlvbiBp cyBuZWNlc3NhcnkgKi8NCisjZGVmaW5lIFJfQU1ENjRfRElSNjQJMSAvKiA2 NC1iaXQgYWRkcmVzcyAoVkEpICovDQorI2RlZmluZSBSX0FNRDY0X0RJUjMy CTIgLyogMzItYml0IGFkZHJlc3MgKFZBKSBSX0RJUjMyICovDQorI2RlZmlu ZSBSX0FNRDY0X0lNQUdFQkFTRQkgMyAvKiAzMi1iaXQgYWJzb2x1dGUgcmVm IHcvbyBiYXNlIFJfSU1BR0VCQVNFICovDQorI2RlZmluZSBSX0FNRDY0X1BD UkxPTkcJCSA0IC8qIDMyLWJpdCByZWxhdGl2ZSBhZGRyZXNzIGZyb20gYnl0 ZSBmb2xsb3dpbmcgcmVsb2MgUl9QQ1JMT05HICovDQorI2RlZmluZSBSX0FN RDY0X1BDUkxPTkdfMQkJIDUgLyogMzItYml0IHJlbGF0aXZlIGFkZHJlc3Mg ZnJvbSBieXRlIGRpc3RhbmNlIDEgZnJvbSByZWxvYyAqLw0KKyNkZWZpbmUg Ul9BTUQ2NF9QQ1JMT05HXzIJCSA2IC8qIDMyLWJpdCByZWxhdGl2ZSBhZGRy ZXNzIGZyb20gYnl0ZSBkaXN0YW5jZSAyIGZyb20gcmVsb2MgKi8NCisjZGVm aW5lIFJfQU1ENjRfUENSTE9OR18zCQkgNyAvKiAzMi1iaXQgcmVsYXRpdmUg YWRkcmVzcyBmcm9tIGJ5dGUgZGlzdGFuY2UgMyBmcm9tIHJlbG9jICovDQor I2RlZmluZSBSX0FNRDY0X1BDUkxPTkdfNAkJIDggLyogMzItYml0IHJlbGF0 aXZlIGFkZHJlc3MgZnJvbSBieXRlIGRpc3RhbmNlIDQgZnJvbSByZWxvYyAq Lw0KKyNkZWZpbmUgUl9BTUQ2NF9QQ1JMT05HXzUJCSA5IC8qIDMyLWJpdCBy ZWxhdGl2ZSBhZGRyZXNzIGZyb20gYnl0ZSBkaXN0YW5jZSA1IGZyb20gcmVs b2MgKi8NCisjZGVmaW5lIFJfQU1ENjRfU0VDVElPTgkxMCAvKiBTZWN0aW9u IGluZGV4ICovDQorI2RlZmluZSBSX0FNRDY0X1NFQ1JFTAkxMSAvKiAzMiBi aXQgb2Zmc2V0IGZyb20gYmFzZSBvZiBzZWN0aW9uIGNvbnRhaW5pbmcgdGFy Z2V0IFJfU0VDUkVMKi8NCisjZGVmaW5lIFJfQU1ENjRfU0VDUkVMNwkxMiAv KiA3IGJpdCB1bnNpZ25lZCBvZmZzZXQgZnJvbSBiYXNlIG9mIHNlY3Rpb24g Y29udGFpbmluZyB0YXJnZXQgKi8NCisjZGVmaW5lIFJfQU1ENjRfVE9LRU4J MTMgLyogMzIgYml0IG1ldGFkYXRhIHRva2VuICovDQorDQogI2RlZmluZSBS X0RJUjE2IAkgMQogI2RlZmluZSBSX1JFTDI0ICAgICAgICAgIDUKICNkZWZp bmUgUl9ESVIzMiAJIDYKZGlmZiAtck5idSBiaW51dGlscy0yLjE3X29yZy9p bmNsdWRlL2NvZmYvcGUuaCBiaW51dGlscy0yLjE3L2luY2x1ZGUvY29mZi9w ZS5oCi0tLSBiaW51dGlscy0yLjE3X29yZy9pbmNsdWRlL2NvZmYvcGUuaAky MDA1LTA1LTEwIDEyOjIxOjA5LjAwMDAwMDAwMCArMDIwMAorKysgYmludXRp bHMtMi4xNy9pbmNsdWRlL2NvZmYvcGUuaAkyMDA2LTA4LTA3IDEzOjA4OjEy LjAwMDAwMDAwMCArMDIwMApAQCAtMTE5LDYgKzExOSw3IEBACiAjZGVmaW5l IElNQUdFX0ZJTEVfTUFDSElORV9USFVNQiAgICAgICAgICAgICAweDAxYzIK ICNkZWZpbmUgSU1BR0VfRklMRV9NQUNISU5FX1RSSUNPUkUgICAgICAgICAg IDB4MDUyMAogI2RlZmluZSBJTUFHRV9GSUxFX01BQ0hJTkVfV0NFTUlQU1Yy ICAgICAgICAgMHgwMTY5CisjZGVmaW5lIElNQUdFX0ZJTEVfTUFDSElORV9B TUQ2NCAgICAgICAgICAgICAweDg2NjQgIC8vIEFNRDY0IChLOCkNCiAKICNk ZWZpbmUgSU1BR0VfU1VCU1lTVEVNX1VOS05PV04JCQkgMAogI2RlZmluZSBJ TUFHRV9TVUJTWVNURU1fTkFUSVZFCQkJIDEKQEAgLTIzMyw3ICsyMzQsNiBA QAogdHlwZWRlZiBzdHJ1Y3QgCiB7CiAgIEFPVVRIRFIgc3RhbmRhcmQ7Ci0K ICAgLyogTlQgZXh0cmEgZmllbGRzOyBzZWUgaW50ZXJuYWwuaCBmb3IgZGVz Y3JpcHRpb25zLiAgKi8KICAgY2hhciAgSW1hZ2VCYXNlWzRdOwogICBjaGFy ICBTZWN0aW9uQWxpZ25tZW50WzRdOwpAQCAtMjY3LDcgKzI2Nyw3IEBACiAg ICBvZiBqdXN0IDQgYnl0ZXMgbG9uZy4gICovCiB0eXBlZGVmIHN0cnVjdCAK IHsKLSAgQU9VVEhEUiBzdGFuZGFyZDsKKyAgQU9VVEhEUjY0IHN0YW5kYXJk Ow0KIAogICAvKiBOVCBleHRyYSBmaWVsZHM7IHNlZSBpbnRlcm5hbC5oIGZv ciBkZXNjcmlwdGlvbnMuICAqLwogICBjaGFyICBJbWFnZUJhc2VbOF07CkBA IC0yOTQsNyArMjk0LDcgQEAKICAgLyogSU1BR0VfREFUQV9ESVJFQ1RPUlkg RGF0YURpcmVjdG9yeVtJTUFHRV9OVU1CRVJPRl9ESVJFQ1RPUllfRU5UUklF U107ICAqLwogICBjaGFyICBEYXRhRGlyZWN0b3J5WzE2XVsyXVs0XTsgLyog MTYgZW50cmllcywgMiBlbGVtZW50cy9lbnRyeSwgNCBjaGFycy4gICovCiB9 IFBFUEFPVVRIRFI7Ci0jZGVmaW5lIFBFUEFPVVRTWgkyNDAKKyNkZWZpbmUg UEVQQU9VVFNaCShBT1VUSERSU1o2NCsxOTYrNSo0KSAvKiAyNDAgKi8NCiAg IAogI3VuZGVmICBFX0ZJTE5NTEVOCiAjZGVmaW5lIEVfRklMTk1MRU4JMTgJ LyogIyBjaGFyYWN0ZXJzIGluIGEgZmlsZSBuYW1lLiAgKi8KZGlmZiAtck5i dSBiaW51dGlscy0yLjE3X29yZy9pbmNsdWRlL2NvZmYveDg2XzY0LmggYmlu dXRpbHMtMi4xNy9pbmNsdWRlL2NvZmYveDg2XzY0LmgKLS0tIGJpbnV0aWxz LTIuMTdfb3JnL2luY2x1ZGUvY29mZi94ODZfNjQuaAkxOTcwLTAxLTAxIDAx OjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgYmludXRpbHMtMi4xNy9pbmNs dWRlL2NvZmYveDg2XzY0LmgJMjAwNi0wOC0xNyAwOToxMjoyMy4wMDAwMDAw MDAgKzAyMDAKQEAgLTAsMCArMSw2NyBAQAorLyogY29mZiBpbmZvcm1hdGlv biBmb3IgQU1EIDY0LgorICAgQ29weXJpZ2h0IDE5OTUsIDE5OTYsIDE5OTks IDIwMDEsIDIwMDIsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ bmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEJGRCwgdGhlIEJpbmFy eSBGaWxlIERlc2NyaXB0b3IgbGlicmFyeS4KKworICAgVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAy IG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBw cm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisg ICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQgLSBGaWZ0 aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgICAKKyAg IFdyaXR0ZW4gYnkgS2FpIFRpZXR6LCBPbmVWaXNpb24gU29mdHdhcmUgR21i SCZDb0tnLgorKi8KKworI2RlZmluZSBMX0xOTk9fU0laRSAyCisjZGVmaW5l IElOQ0xVREVfQ09NREFUX0ZJRUxEU19JTl9BVVhFTlQKKyNpbmNsdWRlICJj b2ZmL2V4dGVybmFsLmgiCisKKy8qIEJpdHMgZm9yIGZfZmxhZ3M6CisgCUZf UkVMRkxHCXJlbG9jYXRpb24gaW5mbyBzdHJpcHBlZCBmcm9tIGZpbGUKKyAJ Rl9FWEVDCQlmaWxlIGlzIGV4ZWN1dGFibGUgKG5vIHVucmVzb2x2ZWQgZXh0 ZXJuYWwgcmVmZXJlbmNlcykKKyAJRl9MTk5PCQlsaW5lIG51bWJlcnMgc3Ry aXBwZWQgZnJvbSBmaWxlCisgCUZfTFNZTVMJCWxvY2FsIHN5bWJvbHMgc3Ry aXBwZWQgZnJvbSBmaWxlCisgCUZfQVIzMldSCWZpbGUgaGFzIGJ5dGUgb3Jk ZXJpbmcgb2YgYW4gQVIzMldSIG1hY2hpbmUgKGUuZy4gdmF4KS4gICovCisK KyNkZWZpbmUgRl9SRUxGTEcJKDB4MDAwMSkKKyNkZWZpbmUgRl9FWEVDCQko MHgwMDAyKQorI2RlZmluZSBGX0xOTk8JCSgweDAwMDQpCisjZGVmaW5lIEZf TFNZTVMJCSgweDAwMDgpCisKKyNkZWZpbmUgQU1ENjRNQUdJQwkweDg2NjQK KworI2RlZmluZSBBTUQ2NEJBRE1BRyh4KQkoICh4KS5mX21hZ2ljICE9IEFN RDY0TUFHSUMpCisjZGVmaW5lIElNQUdFX05UX09QVElPTkFMX0hEUjY0X01B R0lDICAgICAgMHgyMGIKKworI2RlZmluZSBPTUFHSUMgICAgICAgICAgMDQw NCAgICAvKiBvYmplY3QgZmlsZXMsIGVnIGFzIG91dHB1dCAqLworI2RlZmlu ZSBaTUFHSUMgICAgICAgICAgSU1BR0VfTlRfT1BUSU9OQUxfSERSNjRfTUFH SUMgICAgLyogZGVtYW5kIGxvYWQgZm9ybWF0LCBlZyBub3JtYWwgbGQgb3V0 cHV0IDB4MTBiICovCisjZGVmaW5lIFNUTUFHSUMJCTA0MDEJLyogdGFyZ2V0 IHNobGliICovCisjZGVmaW5lIFNITUFHSUMJCTA0NDMJLyogaG9zdCAgIHNo bGliICovCisKKy8qIGRlZmluZSBzb21lIE5UIGRlZmF1bHQgdmFsdWVzICov CisvKiAgI2RlZmluZSBOVF9JTUFHRV9CQVNFICAgICAgICAweDQwMDAwMCBt b3ZlZCB0byBpbnRlcm5hbC5oICovCisjZGVmaW5lIE5UX1NFQ1RJT05fQUxJ R05NRU5UIDB4MTAwMAorI2RlZmluZSBOVF9GSUxFX0FMSUdOTUVOVCAgICAw eDIwMAorI2RlZmluZSBOVF9ERUZfUkVTRVJWRSAgICAgICAweDEwMDAwMAor I2RlZmluZSBOVF9ERUZfQ09NTUlUICAgICAgICAweDEwMDAKKworLyoqKioq KioqKioqKioqKioqKioqKiogUkVMT0NBVElPTiBESVJFQ1RJVkVTICoqKioq KioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBleHRlcm5hbF9yZWxvYwor eworICBjaGFyIHJfdmFkZHJbNF07CisgIGNoYXIgcl9zeW1uZHhbNF07Cisg IGNoYXIgcl90eXBlWzJdOworfTsKKworI2RlZmluZSBSRUxPQyBzdHJ1Y3Qg ZXh0ZXJuYWxfcmVsb2MKKyNkZWZpbmUgUkVMU1ogMTAKKwpkaWZmIC1yTmJ1 IGJpbnV0aWxzLTIuMTdfb3JnL2xkL01ha2VmaWxlLmFtIGJpbnV0aWxzLTIu MTcvbGQvTWFrZWZpbGUuYW0KLS0tIGJpbnV0aWxzLTIuMTdfb3JnL2xkL01h a2VmaWxlLmFtCTIwMDYtMDYtMDMgMDY6NDU6NTAuMDAwMDAwMDAwICswMjAw CisrKyBiaW51dGlscy0yLjE3L2xkL01ha2VmaWxlLmFtCTIwMDYtMDgtMDIg MTA6MzA6MDYuMDAwMDAwMDAwICswMjAwCkBAIC0yNDAsNiArMjQwLDcgQEAK IAllaTM4Nm50by5vIFwKIAllaTM4Nm53Lm8gXAogCWVpMzg2cGUubyBcCisJ ZWkzODZwZXAubyBcCiAJZWkzODZwZV9wb3NpeC5vIFwKIAllbG5rOTYwLm8g XAogCWVtMzJyZWxmLm8gXApAQCAtNDEwLDE1ICs0MTEsMTYgQEAKIAogQUxM X0VNVUxfRVhUUkFfT0ZJTEVTID0gXAogCWRlZmZpbGVwLm8gXAotCXBlLWRs bC5vCisJcGUtZGxsLm8gXAorCXBlcC1kbGwubwogCiBDRklMRVMgPSBsZGN0 b3IuYyBsZGVtdWwuYyBsZGV4cC5jIGxkZmlsZS5jIGxkbGFuZy5jIFwKIAls ZG1haW4uYyBsZG1pc2MuYyBsZHZlci5jIGxkd3JpdGUuYyBsZXhzdXAuYyBc Ci0JbXJpLmMgbGRjcmVmLmMgcGUtZGxsLmMKKwltcmkuYyBsZGNyZWYuYyBw ZS1kbGwuYyBwZXAtZGxsLmMKIAogSEZJTEVTID0gbGQuaCBsZGN0b3IuaCBs ZGVtdWwuaCBsZGV4cC5oIGxkZmlsZS5oIFwKIAlsZGxhbmcuaCBsZGxleC5o IGxkbWFpbi5oIGxkbWlzYy5oIGxkdmVyLmggXAotCWxkd3JpdGUuaCBtcmku aCBkZWZmaWxlLmggcGUtZGxsLmggZWxmLWhpbnRzLWxvY2FsLmgKKwlsZHdy aXRlLmggbXJpLmggZGVmZmlsZS5oIHBlLWRsbC5oIHBlcC1kbGwuaCBlbGYt aGludHMtbG9jYWwuaAogCiBHRU5FUkFURURfQ0ZJTEVTID0gbGRncmFtLmMg bGRsZXguYyBkZWZmaWxlcC5jCiBHRU5FUkFURURfSEZJTEVTID0gbGRncmFt LmggbGRlbXVsLWxpc3QuaCBkZWZmaWxlcC5oCkBAIC0xMDY5LDYgKzEwNzEs OSBAQAogZWkzODZwZS5jOiAkKHNyY2RpcikvZW11bHBhcmFtcy9pMzg2cGUu c2ggXAogICAkKHNyY2RpcikvZW11bHRlbXBsL3BlLmVtICQoc3JjZGlyKS9z Y3JpcHR0ZW1wbC9wZS5zYyAke0dFTl9ERVBFTkRTfQogCSR7R0VOU0NSSVBU U30gaTM4NnBlICIkKHRkaXJfaTM4NnBlKSIKK2VpMzg2cGVwLmM6ICQoc3Jj ZGlyKS9lbXVscGFyYW1zL2kzODZwZXAuc2ggXAorICAkKHNyY2RpcikvZW11 bHRlbXBsL3BlcC5lbSAkKHNyY2Rpcikvc2NyaXB0dGVtcGwvcGVwLnNjICR7 R0VOX0RFUEVORFN9CisJJHtHRU5TQ1JJUFRTfSBpMzg2cGVwICIkKHRkaXJf aTM4NnBlKSIKIGVpMzg2cGVfcG9zaXguYzogJChzcmNkaXIpL2VtdWxwYXJh bXMvaTM4NnBlX3Bvc2l4LnNoIFwKICAgJChzcmNkaXIpL2VtdWx0ZW1wbC9w ZS5lbSAkKHNyY2Rpcikvc2NyaXB0dGVtcGwvcGUuc2MgJHtHRU5fREVQRU5E U30KIAkke0dFTlNDUklQVFN9IGkzODZwZV9wb3NpeCAiJCh0ZGlyX2kzODZw ZV9wb3NpeCkiCkBAIC0xOTM3LDYgKzE5NDIsMTIgQEAKICAgbGQuaCAkKElO Q0RJUikvYmluLWJ1Z3MuaCBsZGV4cC5oIGxkbGFuZy5oIGxkd3JpdGUuaCBc CiAgIGxkbWlzYy5oIGxkZ3JhbS5oIGxkbWFpbi5oIGxkZmlsZS5oIGxkZW11 bC5oICQoSU5DRElSKS9jb2ZmL2ludGVybmFsLmggXAogICAkKEJGRERJUikv bGliY29mZi5oIGRlZmZpbGUuaCBwZS1kbGwuaAorcGVwLWRsbC5vOiBwZXAt ZGxsLmMgLi4vYmZkL2JmZC5oICQoSU5DRElSKS9hbnNpZGVjbC5oIFwKKyAg JChJTkNESVIpL3N5bWNhdC5oIHN5c2RlcC5oIGNvbmZpZy5oICQoSU5DRElS KS9mb3Blbi1zYW1lLmggXAorICAkKElOQ0RJUikvYmZkbGluay5oICQoSU5D RElSKS9saWJpYmVydHkuaCAkKElOQ0RJUikvc2FmZS1jdHlwZS5oIFwKKyAg bGQuaCAkKElOQ0RJUikvYmluLWJ1Z3MuaCBsZGV4cC5oIGxkbGFuZy5oIGxk d3JpdGUuaCBcCisgIGxkbWlzYy5oIGxkZ3JhbS5oIGxkbWFpbi5oIGxkZmls ZS5oIGxkZW11bC5oICQoSU5DRElSKS9jb2ZmL2ludGVybmFsLmggXAorICAk KEJGRERJUikvbGliY29mZi5oIGRlZmZpbGUuaCBwZXAtZGxsLmgKIGxkZ3Jh bS5vOiBsZGdyYW0uYyAuLi9iZmQvYmZkLmggJChJTkNESVIpL2Fuc2lkZWNs LmggXAogICAkKElOQ0RJUikvc3ltY2F0Lmggc3lzZGVwLmggY29uZmlnLmgg JChJTkNESVIpL2ZvcGVuLXNhbWUuaCBcCiAgICQoSU5DRElSKS9iZmRsaW5r LmggbGQuaCAkKElOQ0RJUikvYmluLWJ1Z3MuaCBsZGV4cC5oIFwKZGlmZiAt ck5idSBiaW51dGlscy0yLjE3X29yZy9sZC9NYWtlZmlsZS5pbiBiaW51dGls cy0yLjE3L2xkL01ha2VmaWxlLmluCi0tLSBiaW51dGlscy0yLjE3X29yZy9s ZC9NYWtlZmlsZS5pbgkyMDA2LTA2LTAzIDA2OjQ1OjUwLjAwMDAwMDAwMCAr MDIwMAorKysgYmludXRpbHMtMi4xNy9sZC9NYWtlZmlsZS5pbgkyMDA2LTA4 LTAyIDEwOjMxOjA3LjAwMDAwMDAwMCArMDIwMApAQCAtNDY0LDYgKzQ2NCw3 IEBACiAJZWkzODZudG8ubyBcCiAJZWkzODZudy5vIFwKIAllaTM4NnBlLm8g XAorCWVpMzg2cGVwLm8gXAogCWVpMzg2cGVfcG9zaXgubyBcCiAJZWxuazk2 MC5vIFwKIAllbTMycmVsZi5vIFwKQEAgLTYzNCwxNSArNjM1LDE2IEBACiAK IEFMTF9FTVVMX0VYVFJBX09GSUxFUyA9IFwKIAlkZWZmaWxlcC5vIFwKLQlw ZS1kbGwubworCXBlLWRsbC5vIFwKKwlwZXAtZGxsLm8KIAogQ0ZJTEVTID0g bGRjdG9yLmMgbGRlbXVsLmMgbGRleHAuYyBsZGZpbGUuYyBsZGxhbmcuYyBc CiAJbGRtYWluLmMgbGRtaXNjLmMgbGR2ZXIuYyBsZHdyaXRlLmMgbGV4c3Vw LmMgXAotCW1yaS5jIGxkY3JlZi5jIHBlLWRsbC5jCisJbXJpLmMgbGRjcmVm LmMgcGUtZGxsLmMgcGVwLWRsbC5jCiAKIEhGSUxFUyA9IGxkLmggbGRjdG9y LmggbGRlbXVsLmggbGRleHAuaCBsZGZpbGUuaCBcCiAJbGRsYW5nLmggbGRs ZXguaCBsZG1haW4uaCBsZG1pc2MuaCBsZHZlci5oIFwKLQlsZHdyaXRlLmgg bXJpLmggZGVmZmlsZS5oIHBlLWRsbC5oIGVsZi1oaW50cy1sb2NhbC5oCisJ bGR3cml0ZS5oIG1yaS5oIGRlZmZpbGUuaCBwZS1kbGwuaCBwZXAtZGxsLmgg ZWxmLWhpbnRzLWxvY2FsLmgKIAogR0VORVJBVEVEX0NGSUxFUyA9IGxkZ3Jh bS5jIGxkbGV4LmMgZGVmZmlsZXAuYwogR0VORVJBVEVEX0hGSUxFUyA9IGxk Z3JhbS5oIGxkZW11bC1saXN0LmggZGVmZmlsZXAuaApAQCAtMTg4MCw2ICsx ODgyLDkgQEAKIGVpMzg2cGUuYzogJChzcmNkaXIpL2VtdWxwYXJhbXMvaTM4 NnBlLnNoIFwKICAgJChzcmNkaXIpL2VtdWx0ZW1wbC9wZS5lbSAkKHNyY2Rp cikvc2NyaXB0dGVtcGwvcGUuc2MgJHtHRU5fREVQRU5EU30KIAkke0dFTlND UklQVFN9IGkzODZwZSAiJCh0ZGlyX2kzODZwZSkiCitlaTM4NnBlcC5jOiAk KHNyY2RpcikvZW11bHBhcmFtcy9pMzg2cGVwLnNoIFwKKyAgJChzcmNkaXIp L2VtdWx0ZW1wbC9wZXAuZW0gJChzcmNkaXIpL3NjcmlwdHRlbXBsL3BlcC5z YyAke0dFTl9ERVBFTkRTfQorCSR7R0VOU0NSSVBUU30gaTM4NnBlcCAiJCh0 ZGlyX2kzODZwZSkiCiBlaTM4NnBlX3Bvc2l4LmM6ICQoc3JjZGlyKS9lbXVs cGFyYW1zL2kzODZwZV9wb3NpeC5zaCBcCiAgICQoc3JjZGlyKS9lbXVsdGVt cGwvcGUuZW0gJChzcmNkaXIpL3NjcmlwdHRlbXBsL3BlLnNjICR7R0VOX0RF UEVORFN9CiAJJHtHRU5TQ1JJUFRTfSBpMzg2cGVfcG9zaXggIiQodGRpcl9p Mzg2cGVfcG9zaXgpIgpAQCAtMjcxOCw2ICsyNzIzLDEyIEBACiAgIGxkLmgg JChJTkNESVIpL2Jpbi1idWdzLmggbGRleHAuaCBsZGxhbmcuaCBsZHdyaXRl LmggXAogICBsZG1pc2MuaCBsZGdyYW0uaCBsZG1haW4uaCBsZGZpbGUuaCBs ZGVtdWwuaCAkKElOQ0RJUikvY29mZi9pbnRlcm5hbC5oIFwKICAgJChCRkRE SVIpL2xpYmNvZmYuaCBkZWZmaWxlLmggcGUtZGxsLmgKK3BlcC1kbGwubzog cGVwLWRsbC5jIC4uL2JmZC9iZmQuaCAkKElOQ0RJUikvYW5zaWRlY2wuaCBc CisgICQoSU5DRElSKS9zeW1jYXQuaCBzeXNkZXAuaCBjb25maWcuaCAkKElO Q0RJUikvZm9wZW4tc2FtZS5oIFwKKyAgJChJTkNESVIpL2JmZGxpbmsuaCAk KElOQ0RJUikvbGliaWJlcnR5LmggJChJTkNESVIpL3NhZmUtY3R5cGUuaCBc CisgIGxkLmggJChJTkNESVIpL2Jpbi1idWdzLmggbGRleHAuaCBsZGxhbmcu aCBsZHdyaXRlLmggXAorICBsZG1pc2MuaCBsZGdyYW0uaCBsZG1haW4uaCBs ZGZpbGUuaCBsZGVtdWwuaCAkKElOQ0RJUikvY29mZi9pbnRlcm5hbC5oIFwK KyAgJChCRkRESVIpL2xpYmNvZmYuaCBkZWZmaWxlLmggcGVwLWRsbC5oCiBs ZGdyYW0ubzogbGRncmFtLmMgLi4vYmZkL2JmZC5oICQoSU5DRElSKS9hbnNp ZGVjbC5oIFwKICAgJChJTkNESVIpL3N5bWNhdC5oIHN5c2RlcC5oIGNvbmZp Zy5oICQoSU5DRElSKS9mb3Blbi1zYW1lLmggXAogICAkKElOQ0RJUikvYmZk bGluay5oIGxkLmggJChJTkNESVIpL2Jpbi1idWdzLmggbGRleHAuaCBcCmRp ZmYgLXJOYnUgYmludXRpbHMtMi4xN19vcmcvbGQvY29uZmlndXJlIGJpbnV0 aWxzLTIuMTcvbGQvY29uZmlndXJlCi0tLSBiaW51dGlscy0yLjE3X29yZy9s ZC9jb25maWd1cmUJMjAwNi0wNC0xMSAxMjozNjoyNi4wMDAwMDAwMDAgKzAy MDAKKysrIGJpbnV0aWxzLTIuMTcvbGQvY29uZmlndXJlCTIwMDYtMDctMjcg MTA6NTg6NDMuMDAwMDAwMDAwICswMjAwCkBAIC0zOTI0LDcgKzM5MjQsNyBA QAogICBybSAtcmYgY29uZnRlc3QqCiAgIDs7CiAKLXg4Nl82NC0qbGludXgq fHBwYyotKmxpbnV4Knxwb3dlcnBjKi0qbGludXgqfHMzOTAqLSpsaW51eCp8 c3BhcmMqLSpsaW51eCopCit4ODZfNjQtKmxpbnV4Knx4ODZfNjQtKm1pbmd3 NjQqfHBwYyotKmxpbnV4Knxwb3dlcnBjKi0qbGludXgqfHMzOTAqLSpsaW51 eCp8c3BhcmMqLSpsaW51eCopCiAgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdl IGFyZSB1c2luZy4KICAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19l eHQKICAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNf Y29tcGlsZVwiIikgPiY1CkBAIC0zOTUxLDYgKzM5NTEsOSBAQAogICAgICAg OzsKICAgICAqNjQtYml0KikKICAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAg ICAgeDg2XzY0LSptaW5ndzY0KikKKyAgICAgICAgICBMRD0iJHtMRC1sZH0g LW0gZWxmX3g4Nl82NCIKKyAgICAgICAgICA7OwogICAgICAgICB4ODZfNjQt KmxpbnV4KikKICAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82 NCIKICAgICAgICAgICA7OwpkaWZmIC1yTmJ1IGJpbnV0aWxzLTIuMTdfb3Jn L2xkL2NvbmZpZ3VyZS50Z3QgYmludXRpbHMtMi4xNy9sZC9jb25maWd1cmUu dGd0Ci0tLSBiaW51dGlscy0yLjE3X29yZy9sZC9jb25maWd1cmUudGd0CTIw MDYtMDQtMDUgMTQ6NDE6NTcuMDAwMDAwMDAwICswMjAwCisrKyBiaW51dGls cy0yLjE3L2xkL2NvbmZpZ3VyZS50Z3QJMjAwNi0wOC0wMiAxMDoyNzoyNS4w MDAwMDAwMDAgKzAyMDAKQEAgLTE1NSw2ICsxNTUsOCBAQAogCQkJICB0YXJn X2V4dHJhX2VtdWxzPSIkdGFyZ19leHRyYV9lbXVscyBlbGZfeDg2XzY0Igog CQkJZmkKIAkJCXRkaXJfaTM4NmxpbnV4PSR7dGFyZ19hbGlhc31hb3V0IDs7 Cit4ODZfNjQtKi1taW5ndzY0KikgdGFyZ19lbXVsPWkzODZwZXAgOworCQkJ dGFyZ19leHRyYV9vZmlsZXM9ImRlZmZpbGVwLm8gcGVwLWRsbC5vIiA7Owog eDg2XzY0LSotbGludXgtKikJdGFyZ19lbXVsPWVsZl94ODZfNjQKIAkJCXRh cmdfZXh0cmFfZW11bHM9ImVsZl9pMzg2IGkzODZsaW51eCIKIAkJCXRhcmdf ZXh0cmFfbGlicGF0aD1lbGZfaTM4NgpkaWZmIC1yTmJ1IGJpbnV0aWxzLTIu MTdfb3JnL2xkL2VtdWxwYXJhbXMvaTM4NnBlcC5zaCBiaW51dGlscy0yLjE3 L2xkL2VtdWxwYXJhbXMvaTM4NnBlcC5zaAotLS0gYmludXRpbHMtMi4xN19v cmcvbGQvZW11bHBhcmFtcy9pMzg2cGVwLnNoCTE5NzAtMDEtMDEgMDE6MDA6 MDAuMDAwMDAwMDAwICswMTAwCisrKyBiaW51dGlscy0yLjE3L2xkL2VtdWxw YXJhbXMvaTM4NnBlcC5zaAkyMDA2LTA3LTI4IDEyOjQzOjIyLjAwMDAwMDAw MCArMDIwMApAQCAtMCwwICsxLDkgQEAKK0FSQ0g9ImkzODY6eDg2LTY0Igor U0NSSVBUX05BTUU9cGVwCitPVVRQVVRfRk9STUFUPSJwZWkteDg2LTY0Igor UkVMT0NBVEVBQkxFX09VVFBVVF9GT1JNQVQ9InBlLXg4Ni02NCIKK1RFTVBM QVRFX05BTUU9cGVwCitFTlRSWT0iX21haW5DUlRTdGFydHVwIgorU1VCU1lT VEVNPVBFX0RFRl9TVUJTWVNURU0KK0lOSVRJQUxfU1lNQk9MX0NIQVI9XCJf XCIKK1RBUkdFVF9QQUdFX1NJWkU9MHgxMDAwCmRpZmYgLXJOYnUgYmludXRp bHMtMi4xN19vcmcvbGQvZW11bHRlbXBsL3BlcC5lbSBiaW51dGlscy0yLjE3 L2xkL2VtdWx0ZW1wbC9wZXAuZW0KLS0tIGJpbnV0aWxzLTIuMTdfb3JnL2xk L2VtdWx0ZW1wbC9wZXAuZW0JMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAw MDAgKzAxMDAKKysrIGJpbnV0aWxzLTIuMTcvbGQvZW11bHRlbXBsL3BlcC5l bQkyMDA2LTA4LTE3IDA5OjE2OjQzLjAwMDAwMDAwMCArMDIwMApAQCAtMCww ICsxLDE3NDggQEAKKyMgVGhpcyBzaGVsbCBzY3JpcHQgZW1pdHMgYSBDIGZp bGUuIC0qLSBDIC0qLQorIyBJdCBkb2VzIHNvbWUgc3Vic3RpdHV0aW9ucy4K K3Rlc3QgLXogIiR7RU5UUll9IiAmJiBFTlRSWT0iX21haW5DUlRTdGFydHVw IgoraWYgWyAteiAiJE1BQ0hJTkUiIF07IHRoZW4KKyAgT1VUUFVUX0FSQ0g9 JHtBUkNIfQorZWxzZQorICBPVVRQVVRfQVJDSD0ke0FSQ0h9OiR7TUFDSElO RX0KK2ZpCitybSAtZiBlJHtFTVVMQVRJT05fTkFNRX0uYworKGVjaG87ZWNo bztlY2hvO2VjaG87ZWNobyk+ZSR7RU1VTEFUSU9OX05BTUV9LmMgIyB0aGVy ZSwgbm93IGxpbmUgbnVtYmVycyBtYXRjaCA7LSkKK2NhdCA+PmUke0VNVUxB VElPTl9OQU1FfS5jIDw8RU9GCisvKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBH TEQsIHRoZSBHbnUgTGlua2VyLgorICAgQ29weXJpZ2h0IDE5OTUsIDE5OTYs IDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIw MDQsCisgICAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgor CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAg YWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhl IEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r bGluIFN0cmVldCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEz MDEsIFVTQS4KKyAgIAorICAgV3JpdHRlbiBieSBLYWkgVGlldHosIE9uZVZp c2lvbiBTb2Z0d2FyZSBHbWJIJkNvS2cuCisgICAqLworCisvKiBGb3IgV0lO RE9XU19YUDY0IGFuZCBoaWdoZXIgKi8KKy8qIFRoZSBvcmlnaW5hbCBmaWxl IGdlbmVyYXRlZCByZXR1cm5lZCBkaWZmZXJlbnQgZGVmYXVsdCBzY3JpcHRz IGRlcGVuZGluZworICAgb24gd2hldGhlciBjZXJ0YWluIHN3aXRjaGVzIHdl cmUgc2V0LCBidXQgdGhlc2Ugc3dpdGNoZXMgcGVydGFpbiB0byB0aGUKKyAg IExpbnV4IHN5c3RlbSBhbmQgdGhhdCBwYXJ0aWN1bGFyIHZlcnNpb24gb2Yg Y29mZi4gIEluIHRoZSBOVCBjYXNlLCB3ZQorICAgb25seSBkZXRlcm1pbmUg aWYgdGhlIHN1YnN5c3RlbSBpcyBjb25zb2xlIG9yIHdpbmRvd3MgaW4gb3Jk ZXIgdG8gc2VsZWN0CisgICB0aGUgY29ycmVjdCBlbnRyeSBwb2ludCBieSBk ZWZhdWx0LiAqLworCisjZGVmaW5lIFRBUkdFVF9JU18ke0VNVUxBVElPTl9O QU1FfQorCisjZGVmaW5lIENPRkZfSU1BR0VfV0lUSF9QRQorI2RlZmluZSBD T0ZGX1dJVEhfUEUKKyNkZWZpbmUgQ09GRl9XSVRIX3BleDY0CisKKyNpbmNs dWRlICJiZmQuaCIKKyNpbmNsdWRlICJzeXNkZXAuaCIKKyNpbmNsdWRlICJi ZmRsaW5rLmgiCisjaW5jbHVkZSAiZ2V0b3B0LmgiCisjaW5jbHVkZSAibGli aWJlcnR5LmgiCisjaW5jbHVkZSAibGQuaCIKKyNpbmNsdWRlICJsZG1haW4u aCIKKyNpbmNsdWRlICJsZGV4cC5oIgorI2luY2x1ZGUgImxkbGFuZy5oIgor I2luY2x1ZGUgImxkZmlsZS5oIgorI2luY2x1ZGUgImxkZW11bC5oIgorI2lu Y2x1ZGUgPGxkZ3JhbS5oPgorI2luY2x1ZGUgImxkbGV4LmgiCisjaW5jbHVk ZSAibGRtaXNjLmgiCisjaW5jbHVkZSAibGRjdG9yLmgiCisjaW5jbHVkZSAi Y29mZi9pbnRlcm5hbC5oIgorCisvKiBGSVhNRTogU2VlIGJmZC9wZVhYaWdl bi5jIGZvciB3aHkgd2UgaW5jbHVkZSBhbiBhcmNoaXRlY3R1cmUgc3BlY2lm aWMKKyAgIGhlYWRlciBpbiBnZW5lcmljIFBFIGNvZGUuICAqLworI2luY2x1 ZGUgImNvZmYveDg2XzY0LmgiCisjaW5jbHVkZSAiY29mZi9wZS5oIgorCisv KiBGSVhNRTogVGhpcyBpcyBhIEJGRCBpbnRlcm5hbCBoZWFkZXIgZmlsZSwg YW5kIHdlIHNob3VsZCBub3QgYmUKKyAgIHVzaW5nIGl0IGhlcmUuICAqLwor I2luY2x1ZGUgIi4uL2JmZC9saWJjb2ZmLmgiCisKKyN1bmRlZiBBT1VUU1oK KyNkZWZpbmUgQU9VVFNaCQlQRVBBT1VUU1oKKyNkZWZpbmUgUEVBT1VUSERS CVBFUEFPVVRIRFIKKworI2luY2x1ZGUgImRlZmZpbGUuaCIKKyNpbmNsdWRl ICJwZXAtZGxsLmgiCisjaW5jbHVkZSAic2FmZS1jdHlwZS5oIgorCisvKiBQ ZXJtaXQgdGhlIGVtdWxhdGlvbiBwYXJhbWV0ZXJzIHRvIG92ZXJyaWRlIHRo ZSBkZWZhdWx0IHNlY3Rpb24KKyAgIGFsaWdubWVudCBieSBzZXR0aW5nIE9W RVJSSURFX1NFQ1RJT05fQUxJR05NRU5ULiAgRklYTUU6IFRoaXMgbWFrZXMK KyAgIGl0IHNlZW0gdGhhdCBpbmNsdWRlL2NvZmYvaW50ZXJuYWwuaCBzaG91 bGQgbm90IGRlZmluZQorICAgUEVfREVGX1NFQ1RJT05fQUxJR05NRU5ULiAg Ki8KKyNpZiBQRV9ERUZfU0VDVElPTl9BTElHTk1FTlQgIT0gJHtPVkVSUklE RV9TRUNUSU9OX0FMSUdOTUVOVDotUEVfREVGX1NFQ1RJT05fQUxJR05NRU5U fQorI3VuZGVmIFBFX0RFRl9TRUNUSU9OX0FMSUdOTUVOVAorI2RlZmluZSBQ RV9ERUZfU0VDVElPTl9BTElHTk1FTlQgJHtPVkVSUklERV9TRUNUSU9OX0FM SUdOTUVOVH0KKyNlbmRpZgorCisjaWZkZWYgVEFSR0VUX0lTX2kzODZwZXAK KyNkZWZpbmUgRExMX1NVUFBPUlQKKyNlbmRpZgorCisjaWYgZGVmaW5lZChU QVJHRVRfSVNfaTM4NnBlcCkgfHwgISBkZWZpbmVkKERMTF9TVVBQT1JUKQor I2RlZmluZQlQRV9ERUZfU1VCU1lTVEVNCQkzCisjZWxzZQorI3VuZGVmIE5U X0VYRV9JTUFHRV9CQVNFCisjdW5kZWYgUEVfREVGX1NFQ1RJT05fQUxJR05N RU5UCisjdW5kZWYgUEVfREVGX0ZJTEVfQUxJR05NRU5UCisjZGVmaW5lIE5U X0VYRV9JTUFHRV9CQVNFCQkweDAwMDEwMDAwCisjZGVmaW5lIFBFX0RFRl9T RUNUSU9OX0FMSUdOTUVOVAkweDAwMDAwNDAwCisjZGVmaW5lCVBFX0RFRl9T VUJTWVNURU0JCTIKKyNkZWZpbmUgUEVfREVGX0ZJTEVfQUxJR05NRU5UCQkw eDAwMDAwMjAwCisjZW5kaWYKKworCitzdGF0aWMgc3RydWN0IGludGVybmFs X2V4dHJhX3BlX2FvdXRoZHIgcGVwOworc3RhdGljIGludCBkbGw7CitzdGF0 aWMgZmxhZ3dvcmQgcmVhbF9mbGFncyA9IElNQUdFX0ZJTEVfTEFSR0VfQURE UkVTU19BV0FSRTsKK3N0YXRpYyBpbnQgc3VwcG9ydF9vbGRfY29kZSA9IDA7 CitzdGF0aWMgY2hhciAqIHRodW1iX2VudHJ5X3N5bWJvbCA9IE5VTEw7Citz dGF0aWMgbGFuZ19hc3NpZ25tZW50X3N0YXRlbWVudF90eXBlICppbWFnZV9i YXNlX3N0YXRlbWVudCA9IDA7CisKKyNpZmRlZiBETExfU1VQUE9SVAorc3Rh dGljIGludCBwZXBfZW5hYmxlX3N0ZGNhbGxfZml4dXAgPSAtMTsgLyogMD1k aXNhYmxlIDE9ZW5hYmxlLiAgKi8KK3N0YXRpYyBjaGFyICpwZXBfb3V0X2Rl Zl9maWxlbmFtZSA9IE5VTEw7CitzdGF0aWMgY2hhciAqcGVwX2ltcGxpYl9m aWxlbmFtZSA9IE5VTEw7CitzdGF0aWMgaW50IHBlcF9lbmFibGVfYXV0b19p bWFnZV9iYXNlID0gMDsKK3N0YXRpYyBjaGFyICpwZXBfZGxsX3NlYXJjaF9w cmVmaXggPSBOVUxMOworI2VuZGlmCisKK2V4dGVybiBjb25zdCBjaGFyICpv dXRwdXRfZmlsZW5hbWU7CisKK3N0YXRpYyB2b2lkCitnbGRfJHtFTVVMQVRJ T05fTkFNRX1fYmVmb3JlX3BhcnNlICh2b2lkKQoreworICBsZGZpbGVfc2V0 X291dHB1dF9hcmNoICgiJHtPVVRQVVRfQVJDSH0iLCBiZmRfYXJjaF9gZWNo byAke0FSQ0h9IHwgc2VkIC1lICdzLzouKi8vJ2ApOworICBvdXRwdXRfZmls ZW5hbWUgPSAiJHtFWEVDVVRBQkxFX05BTUU6LWEuZXhlfSI7CisjaWZkZWYg RExMX1NVUFBPUlQKKyAgY29uZmlnLmR5bmFtaWNfbGluayA9IFRSVUU7Cisg IGNvbmZpZy5oYXNfc2hhcmVkID0gMTsKKyAgbGlua19pbmZvLnBlaTM4Nl9h dXRvX2ltcG9ydCA9IC0xOworICBsaW5rX2luZm8ucGVpMzg2X3J1bnRpbWVf cHNldWRvX3JlbG9jID0gLTE7CisKKyNpZiAoUEVfREVGX1NVQlNZU1RFTSA9 PSA5KSB8fCAoUEVfREVGX1NVQlNZU1RFTSA9PSAyKQorI2lmIGRlZmluZWQg VEFSR0VUX0lTX21pcHNwZSB8fCBkZWZpbmVkIFRBUkdFVF9JU19hcm1wZQor ICBsYW5nX2RlZmF1bHRfZW50cnkgKCJXaW5NYWluQ1JUU3RhcnR1cCIpOwor I2Vsc2UKKyAgbGFuZ19kZWZhdWx0X2VudHJ5ICgiX1dpbk1haW5DUlRTdGFy dHVwIik7CisjZW5kaWYKKyNlbHNlCisgIGxhbmdfZGVmYXVsdF9lbnRyeSAo IiR7RU5UUll9Iik7CisjZW5kaWYKKyNlbmRpZgorfQorDAorLyogUEUgZm9y bWF0IGV4dHJhIGNvbW1hbmQgbGluZSBvcHRpb25zLiAgKi8KKworLyogVXNl ZCBmb3Igc2V0dGluZyBmbGFncyBpbiB0aGUgUEUgaGVhZGVyLiAgKi8KKyNk ZWZpbmUgT1BUSU9OX0JBU0VfRklMRQkJKDMwMCAgKyAxKQorI2RlZmluZSBP UFRJT05fRExMCQkJKE9QVElPTl9CQVNFX0ZJTEUgKyAxKQorI2RlZmluZSBP UFRJT05fRklMRV9BTElHTk1FTlQJCShPUFRJT05fRExMICsgMSkKKyNkZWZp bmUgT1BUSU9OX0lNQUdFX0JBU0UJCShPUFRJT05fRklMRV9BTElHTk1FTlQg KyAxKQorI2RlZmluZSBPUFRJT05fTUFKT1JfSU1BR0VfVkVSU0lPTgkoT1BU SU9OX0lNQUdFX0JBU0UgKyAxKQorI2RlZmluZSBPUFRJT05fTUFKT1JfT1Nf VkVSU0lPTgkJKE9QVElPTl9NQUpPUl9JTUFHRV9WRVJTSU9OICsgMSkKKyNk ZWZpbmUgT1BUSU9OX01BSk9SX1NVQlNZU1RFTV9WRVJTSU9OCShPUFRJT05f TUFKT1JfT1NfVkVSU0lPTiArIDEpCisjZGVmaW5lIE9QVElPTl9NSU5PUl9J TUFHRV9WRVJTSU9OCShPUFRJT05fTUFKT1JfU1VCU1lTVEVNX1ZFUlNJT04g KyAxKQorI2RlZmluZSBPUFRJT05fTUlOT1JfT1NfVkVSU0lPTgkJKE9QVElP Tl9NSU5PUl9JTUFHRV9WRVJTSU9OICsgMSkKKyNkZWZpbmUgT1BUSU9OX01J Tk9SX1NVQlNZU1RFTV9WRVJTSU9OCShPUFRJT05fTUlOT1JfT1NfVkVSU0lP TiArIDEpCisjZGVmaW5lIE9QVElPTl9TRUNUSU9OX0FMSUdOTUVOVAkoT1BU SU9OX01JTk9SX1NVQlNZU1RFTV9WRVJTSU9OICsgMSkKKyNkZWZpbmUgT1BU SU9OX1NUQUNLCQkJKE9QVElPTl9TRUNUSU9OX0FMSUdOTUVOVCArIDEpCisj ZGVmaW5lIE9QVElPTl9TVUJTWVNURU0JCShPUFRJT05fU1RBQ0sgKyAxKQor I2RlZmluZSBPUFRJT05fSEVBUAkJCShPUFRJT05fU1VCU1lTVEVNICsgMSkK KyNkZWZpbmUgT1BUSU9OX1NVUFBPUlRfT0xEX0NPREUJCShPUFRJT05fSEVB UCArIDEpCisjZGVmaW5lIE9QVElPTl9PVVRfREVGCQkJKE9QVElPTl9TVVBQ T1JUX09MRF9DT0RFICsgMSkKKyNkZWZpbmUgT1BUSU9OX0VYUE9SVF9BTEwJ CShPUFRJT05fT1VUX0RFRiArIDEpCisjZGVmaW5lIE9QVElPTl9FWENMVURF X1NZTUJPTFMJCShPUFRJT05fRVhQT1JUX0FMTCArIDEpCisjZGVmaW5lIE9Q VElPTl9LSUxMX0FUUwkJCShPUFRJT05fRVhDTFVERV9TWU1CT0xTICsgMSkK KyNkZWZpbmUgT1BUSU9OX1NURENBTExfQUxJQVNFUwkJKE9QVElPTl9LSUxM X0FUUyArIDEpCisjZGVmaW5lIE9QVElPTl9FTkFCTEVfU1REQ0FMTF9GSVhV UAkoT1BUSU9OX1NURENBTExfQUxJQVNFUyArIDEpCisjZGVmaW5lIE9QVElP Tl9ESVNBQkxFX1NURENBTExfRklYVVAJKE9QVElPTl9FTkFCTEVfU1REQ0FM TF9GSVhVUCArIDEpCisjZGVmaW5lIE9QVElPTl9JTVBMSUJfRklMRU5BTUUJ CShPUFRJT05fRElTQUJMRV9TVERDQUxMX0ZJWFVQICsgMSkKKyNkZWZpbmUg T1BUSU9OX1RIVU1CX0VOVFJZCQkoT1BUSU9OX0lNUExJQl9GSUxFTkFNRSAr IDEpCisjZGVmaW5lIE9QVElPTl9XQVJOX0RVUExJQ0FURV9FWFBPUlRTCShP UFRJT05fVEhVTUJfRU5UUlkgKyAxKQorI2RlZmluZSBPUFRJT05fSU1QX0NP TVBBVAkJKE9QVElPTl9XQVJOX0RVUExJQ0FURV9FWFBPUlRTICsgMSkKKyNk ZWZpbmUgT1BUSU9OX0VOQUJMRV9BVVRPX0lNQUdFX0JBU0UJKE9QVElPTl9J TVBfQ09NUEFUICsgMSkKKyNkZWZpbmUgT1BUSU9OX0RJU0FCTEVfQVVUT19J TUFHRV9CQVNFCShPUFRJT05fRU5BQkxFX0FVVE9fSU1BR0VfQkFTRSArIDEp CisjZGVmaW5lIE9QVElPTl9ETExfU0VBUkNIX1BSRUZJWAkoT1BUSU9OX0RJ U0FCTEVfQVVUT19JTUFHRV9CQVNFICsgMSkKKyNkZWZpbmUgT1BUSU9OX05P X0RFRkFVTFRfRVhDTFVERVMJKE9QVElPTl9ETExfU0VBUkNIX1BSRUZJWCAr IDEpCisjZGVmaW5lIE9QVElPTl9ETExfRU5BQkxFX0FVVE9fSU1QT1JUCShP UFRJT05fTk9fREVGQVVMVF9FWENMVURFUyArIDEpCisjZGVmaW5lIE9QVElP Tl9ETExfRElTQUJMRV9BVVRPX0lNUE9SVAkoT1BUSU9OX0RMTF9FTkFCTEVf QVVUT19JTVBPUlQgKyAxKQorI2RlZmluZSBPUFRJT05fRU5BQkxFX0VYVFJB X1BFX0RFQlVHCShPUFRJT05fRExMX0RJU0FCTEVfQVVUT19JTVBPUlQgKyAx KQorI2RlZmluZSBPUFRJT05fRVhDTFVERV9MSUJTCQkoT1BUSU9OX0VOQUJM RV9FWFRSQV9QRV9ERUJVRyArIDEpCisjZGVmaW5lIE9QVElPTl9ETExfRU5B QkxFX1JVTlRJTUVfUFNFVURPX1JFTE9DCVwKKwkJCQkJKE9QVElPTl9FWENM VURFX0xJQlMgKyAxKQorI2RlZmluZSBPUFRJT05fRExMX0RJU0FCTEVfUlVO VElNRV9QU0VVRE9fUkVMT0MJXAorCQkJCQkoT1BUSU9OX0RMTF9FTkFCTEVf UlVOVElNRV9QU0VVRE9fUkVMT0MgKyAxKQorCitzdGF0aWMgdm9pZAorZ2xk JHtFTVVMQVRJT05fTkFNRX1fYWRkX29wdGlvbnMKKyAgKGludCBucyBBVFRS SUJVVEVfVU5VU0VELCBjaGFyICoqc2hvcnRvcHRzIEFUVFJJQlVURV9VTlVT RUQsIGludCBubCwKKyAgICBzdHJ1Y3Qgb3B0aW9uICoqbG9uZ29wdHMsIGlu dCBucmwgQVRUUklCVVRFX1VOVVNFRCwKKyAgICBzdHJ1Y3Qgb3B0aW9uICoq cmVhbGx5X2xvbmdvcHRzIEFUVFJJQlVURV9VTlVTRUQpCit7CisgIHN0YXRp YyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIHh0cmFfbG9uZ1tdID0geworICAgIC8q IFBFIG9wdGlvbnMgKi8KKyAgICB7ImJhc2UtZmlsZSIsIHJlcXVpcmVkX2Fy Z3VtZW50LCBOVUxMLCBPUFRJT05fQkFTRV9GSUxFfSwKKyAgICB7ImRsbCIs IG5vX2FyZ3VtZW50LCBOVUxMLCBPUFRJT05fRExMfSwKKyAgICB7ImZpbGUt YWxpZ25tZW50IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIE9QVElPTl9G SUxFX0FMSUdOTUVOVH0sCisgICAgeyJoZWFwIiwgcmVxdWlyZWRfYXJndW1l bnQsIE5VTEwsIE9QVElPTl9IRUFQfSwKKyAgICB7ImltYWdlLWJhc2UiLCBy ZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgT1BUSU9OX0lNQUdFX0JBU0V9LAor ICAgIHsibWFqb3ItaW1hZ2UtdmVyc2lvbiIsIHJlcXVpcmVkX2FyZ3VtZW50 LCBOVUxMLCBPUFRJT05fTUFKT1JfSU1BR0VfVkVSU0lPTn0sCisgICAgeyJt YWpvci1vcy12ZXJzaW9uIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIE9Q VElPTl9NQUpPUl9PU19WRVJTSU9OfSwKKyAgICB7Im1ham9yLXN1YnN5c3Rl bS12ZXJzaW9uIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIE9QVElPTl9N QUpPUl9TVUJTWVNURU1fVkVSU0lPTn0sCisgICAgeyJtaW5vci1pbWFnZS12 ZXJzaW9uIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIE9QVElPTl9NSU5P Ul9JTUFHRV9WRVJTSU9OfSwKKyAgICB7Im1pbm9yLW9zLXZlcnNpb24iLCBy ZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgT1BUSU9OX01JTk9SX09TX1ZFUlNJ T059LAorICAgIHsibWlub3Itc3Vic3lzdGVtLXZlcnNpb24iLCByZXF1aXJl ZF9hcmd1bWVudCwgTlVMTCwgT1BUSU9OX01JTk9SX1NVQlNZU1RFTV9WRVJT SU9OfSwKKyAgICB7InNlY3Rpb24tYWxpZ25tZW50IiwgcmVxdWlyZWRfYXJn dW1lbnQsIE5VTEwsIE9QVElPTl9TRUNUSU9OX0FMSUdOTUVOVH0sCisgICAg eyJzdGFjayIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCBPUFRJT05fU1RB Q0t9LAorICAgIHsic3Vic3lzdGVtIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5V TEwsIE9QVElPTl9TVUJTWVNURU19LAorICAgIHsic3VwcG9ydC1vbGQtY29k ZSIsIG5vX2FyZ3VtZW50LCBOVUxMLCBPUFRJT05fU1VQUE9SVF9PTERfQ09E RX0sCisgICAgeyJ0aHVtYi1lbnRyeSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBO VUxMLCBPUFRJT05fVEhVTUJfRU5UUll9LAorI2lmZGVmIERMTF9TVVBQT1JU CisgICAgLyogZ2V0b3B0IGFsbG93cyBhYmJyZXZpYXRpb25zLCBzbyB3ZSBk byB0aGlzIHRvIHN0b3AgaXQgZnJvbSB0cmVhdGluZyAtbworICAgICAgIGFz IGFuIGFiYnJldmlhdGlvbiBmb3IgdGhpcyBvcHRpb24gKi8KKyAgICB7Im91 dHB1dC1kZWYiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgT1BUSU9OX09V VF9ERUZ9LAorICAgIHsib3V0cHV0LWRlZiIsIHJlcXVpcmVkX2FyZ3VtZW50 LCBOVUxMLCBPUFRJT05fT1VUX0RFRn0sCisgICAgeyJleHBvcnQtYWxsLXN5 bWJvbHMiLCBub19hcmd1bWVudCwgTlVMTCwgT1BUSU9OX0VYUE9SVF9BTEx9 LAorICAgIHsiZXhjbHVkZS1zeW1ib2xzIiwgcmVxdWlyZWRfYXJndW1lbnQs IE5VTEwsIE9QVElPTl9FWENMVURFX1NZTUJPTFN9LAorICAgIHsiZXhjbHVk ZS1saWJzIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIE9QVElPTl9FWENM VURFX0xJQlN9LAorICAgIHsia2lsbC1hdCIsIG5vX2FyZ3VtZW50LCBOVUxM LCBPUFRJT05fS0lMTF9BVFN9LAorICAgIHsiYWRkLXN0ZGNhbGwtYWxpYXMi LCBub19hcmd1bWVudCwgTlVMTCwgT1BUSU9OX1NURENBTExfQUxJQVNFU30s CisgICAgeyJlbmFibGUtc3RkY2FsbC1maXh1cCIsIG5vX2FyZ3VtZW50LCBO VUxMLCBPUFRJT05fRU5BQkxFX1NURENBTExfRklYVVB9LAorICAgIHsiZGlz YWJsZS1zdGRjYWxsLWZpeHVwIiwgbm9fYXJndW1lbnQsIE5VTEwsIE9QVElP Tl9ESVNBQkxFX1NURENBTExfRklYVVB9LAorICAgIHsib3V0LWltcGxpYiIs IHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCBPUFRJT05fSU1QTElCX0ZJTEVO QU1FfSwKKyAgICB7Indhcm4tZHVwbGljYXRlLWV4cG9ydHMiLCBub19hcmd1 bWVudCwgTlVMTCwgT1BUSU9OX1dBUk5fRFVQTElDQVRFX0VYUE9SVFN9LAor ICAgIC8qIGdldG9wdCgpIGFsbG93cyBhYmJyZXZpYXRpb25zLCBzbyB3ZSBk byB0aGlzIHRvIHN0b3AgaXQgZnJvbQorICAgICAgIHRyZWF0aW5nIC1jIGFz IGFuIGFiYnJldmlhdGlvbiBmb3IgdGhlc2UgLS1jb21wYXQtaW1wbGliLiAg Ki8KKyAgICB7ImNvbXBhdC1pbXBsaWIiLCBub19hcmd1bWVudCwgTlVMTCwg T1BUSU9OX0lNUF9DT01QQVR9LAorICAgIHsiY29tcGF0LWltcGxpYiIsIG5v X2FyZ3VtZW50LCBOVUxMLCBPUFRJT05fSU1QX0NPTVBBVH0sCisgICAgeyJl bmFibGUtYXV0by1pbWFnZS1iYXNlIiwgbm9fYXJndW1lbnQsIE5VTEwsIE9Q VElPTl9FTkFCTEVfQVVUT19JTUFHRV9CQVNFfSwKKyAgICB7ImRpc2FibGUt YXV0by1pbWFnZS1iYXNlIiwgbm9fYXJndW1lbnQsIE5VTEwsIE9QVElPTl9E SVNBQkxFX0FVVE9fSU1BR0VfQkFTRX0sCisgICAgeyJkbGwtc2VhcmNoLXBy ZWZpeCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCBPUFRJT05fRExMX1NF QVJDSF9QUkVGSVh9LAorICAgIHsibm8tZGVmYXVsdC1leGNsdWRlcyIsIG5v X2FyZ3VtZW50LCBOVUxMLCBPUFRJT05fTk9fREVGQVVMVF9FWENMVURFU30s CisgICAgeyJlbmFibGUtYXV0by1pbXBvcnQiLCBub19hcmd1bWVudCwgTlVM TCwgT1BUSU9OX0RMTF9FTkFCTEVfQVVUT19JTVBPUlR9LAorICAgIHsiZGlz YWJsZS1hdXRvLWltcG9ydCIsIG5vX2FyZ3VtZW50LCBOVUxMLCBPUFRJT05f RExMX0RJU0FCTEVfQVVUT19JTVBPUlR9LAorICAgIHsiZW5hYmxlLWV4dHJh LXBlcC1kZWJ1ZyIsIG5vX2FyZ3VtZW50LCBOVUxMLCBPUFRJT05fRU5BQkxF X0VYVFJBX1BFX0RFQlVHfSwKKyAgICB7ImVuYWJsZS1ydW50aW1lLXBzZXVk by1yZWxvYyIsIG5vX2FyZ3VtZW50LCBOVUxMLCBPUFRJT05fRExMX0VOQUJM RV9SVU5USU1FX1BTRVVET19SRUxPQ30sCisgICAgeyJkaXNhYmxlLXJ1bnRp bWUtcHNldWRvLXJlbG9jIiwgbm9fYXJndW1lbnQsIE5VTEwsIE9QVElPTl9E TExfRElTQUJMRV9SVU5USU1FX1BTRVVET19SRUxPQ30sCisjZW5kaWYKKyAg ICB7TlVMTCwgbm9fYXJndW1lbnQsIE5VTEwsIDB9CisgIH07CisKKyAgKmxv bmdvcHRzID0gKHN0cnVjdCBvcHRpb24gKikKKyAgICB4cmVhbGxvYyAoKmxv bmdvcHRzLCBubCAqIHNpemVvZiAoc3RydWN0IG9wdGlvbikgKyBzaXplb2Yg KHh0cmFfbG9uZykpOworICBtZW1jcHkgKCpsb25nb3B0cyArIG5sLCAmeHRy YV9sb25nLCBzaXplb2YgKHh0cmFfbG9uZykpOworfQorCisvKiBQRS9XSU4z MjsgYWRkZWQgcm91dGluZXMgdG8gZ2V0IHRoZSBzdWJzeXN0ZW0gdHlwZSwg aGVhcCBhbmQvb3Igc3RhY2sKKyAgIHBhcmFtZXRlcnMgd2hpY2ggbWF5IGJl IGlucHV0IGZyb20gdGhlIGNvbW1hbmQgbGluZS4gICovCisKK3R5cGVkZWYg c3RydWN0Cit7CisgIHZvaWQgKnB0cjsKKyAgaW50IHNpemU7CisgIGludCB2 YWx1ZTsKKyAgY2hhciAqc3ltYm9sOworICBpbnQgaW5pdGVkOworfSBkZWZp bmZvOworCisjZGVmaW5lIEQoZmllbGQsc3ltYm9sLGRlZikgIHsmcGVwLmZp ZWxkLHNpemVvZihwZXAuZmllbGQpLCBkZWYsIHN5bWJvbCwwfQorCitzdGF0 aWMgZGVmaW5mbyBpbml0W10gPQoreworICAvKiBpbWFnZWJhc2UgbXVzdCBi ZSBmaXJzdCAqLworI2RlZmluZSBJTUFHRUJBU0VPRkYgMAorICBEKEltYWdl QmFzZSwiX19pbWFnZV9iYXNlX18iLCBOVF9FWEVfSU1BR0VfQkFTRSksCisj ZGVmaW5lIERMTE9GRiAxCisgIHsmZGxsLCBzaXplb2YoZGxsKSwgMCwgIl9f ZGxsX18iLCAwfSwKKyNkZWZpbmUgTVNJTUFHRUJBU0VPRkYJMgorICBEKElt YWdlQmFzZSwiX19JbWFnZUJhc2UiLCBOVF9FWEVfSU1BR0VfQkFTRSksCisg IEQoU2VjdGlvbkFsaWdubWVudCwiX19zZWN0aW9uX2FsaWdubWVudF9fIiwg UEVfREVGX1NFQ1RJT05fQUxJR05NRU5UKSwKKyAgRChGaWxlQWxpZ25tZW50 LCJfX2ZpbGVfYWxpZ25tZW50X18iLCBQRV9ERUZfRklMRV9BTElHTk1FTlQp LAorICBEKE1ham9yT3BlcmF0aW5nU3lzdGVtVmVyc2lvbiwiX19tYWpvcl9v c192ZXJzaW9uX18iLCA0KSwKKyAgRChNaW5vck9wZXJhdGluZ1N5c3RlbVZl cnNpb24sIl9fbWlub3Jfb3NfdmVyc2lvbl9fIiwgMCksCisgIEQoTWFqb3JJ bWFnZVZlcnNpb24sIl9fbWFqb3JfaW1hZ2VfdmVyc2lvbl9fIiwgMCksCisg IEQoTWlub3JJbWFnZVZlcnNpb24sIl9fbWlub3JfaW1hZ2VfdmVyc2lvbl9f IiwgMCksCisgIEQoTWFqb3JTdWJzeXN0ZW1WZXJzaW9uLCJfX21ham9yX3N1 YnN5c3RlbV92ZXJzaW9uX18iLCA1KSwKKyAgRChNaW5vclN1YnN5c3RlbVZl cnNpb24sIl9fbWlub3Jfc3Vic3lzdGVtX3ZlcnNpb25fXyIsIDIpLAorICBE KFN1YnN5c3RlbSwiX19zdWJzeXN0ZW1fXyIsICR7U1VCU1lTVEVNfSksCisg IEQoU2l6ZU9mU3RhY2tSZXNlcnZlLCJfX3NpemVfb2Zfc3RhY2tfcmVzZXJ2 ZV9fIiwgMHgyMDAwMDApLAorICBEKFNpemVPZlN0YWNrQ29tbWl0LCJfX3Np emVfb2Zfc3RhY2tfY29tbWl0X18iLCAweDEwMDApLAorICBEKFNpemVPZkhl YXBSZXNlcnZlLCJfX3NpemVfb2ZfaGVhcF9yZXNlcnZlX18iLCAweDEwMDAw MCksCisgIEQoU2l6ZU9mSGVhcENvbW1pdCwiX19zaXplX29mX2hlYXBfY29t bWl0X18iLCAweDEwMDApLAorICBEKExvYWRlckZsYWdzLCJfX2xvYWRlcl9m bGFnc19fIiwgMHgwKSwKKyAgeyBOVUxMLCAwLCAwLCBOVUxMLCAwIH0KK307 CisKKworc3RhdGljIHZvaWQKK2dsZF8ke0VNVUxBVElPTl9OQU1FfV9saXN0 X29wdGlvbnMgKEZJTEUgKmZpbGUpCit7CisgIGZwcmludGYgKGZpbGUsIF8o IiAgLS1iYXNlX2ZpbGUgPGJhc2VmaWxlPiAgICAgICAgICAgICBHZW5lcmF0 ZSBhIGJhc2UgZmlsZSBmb3IgcmVsb2NhdGFibGUgRExMc1xuIikpOworICBm cHJpbnRmIChmaWxlLCBfKCIgIC0tZGxsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgU2V0IGltYWdlIGJhc2UgdG8gdGhlIGRlZmF1bHQgZm9yIERM THNcbiIpKTsKKyAgZnByaW50ZiAoZmlsZSwgXygiICAtLWZpbGUtYWxpZ25t ZW50IDxzaXplPiAgICAgICAgICAgIFNldCBmaWxlIGFsaWdubWVudFxuIikp OworICBmcHJpbnRmIChmaWxlLCBfKCIgIC0taGVhcCA8c2l6ZT4gICAgICAg ICAgICAgICAgICAgICAgU2V0IGluaXRpYWwgc2l6ZSBvZiB0aGUgaGVhcFxu IikpOworICBmcHJpbnRmIChmaWxlLCBfKCIgIC0taW1hZ2UtYmFzZSA8YWRk cmVzcz4gICAgICAgICAgICAgU2V0IHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIGV4 ZWN1dGFibGVcbiIpKTsKKyAgZnByaW50ZiAoZmlsZSwgXygiICAtLW1ham9y LWltYWdlLXZlcnNpb24gPG51bWJlcj4gICAgIFNldCB2ZXJzaW9uIG51bWJl ciBvZiB0aGUgZXhlY3V0YWJsZVxuIikpOworICBmcHJpbnRmIChmaWxlLCBf KCIgIC0tbWFqb3Itb3MtdmVyc2lvbiA8bnVtYmVyPiAgICAgICAgU2V0IG1p bmltdW0gcmVxdWlyZWQgT1MgdmVyc2lvblxuIikpOworICBmcHJpbnRmIChm aWxlLCBfKCIgIC0tbWFqb3Itc3Vic3lzdGVtLXZlcnNpb24gPG51bWJlcj4g U2V0IG1pbmltdW0gcmVxdWlyZWQgT1Mgc3Vic3lzdGVtIHZlcnNpb25cbiIp KTsKKyAgZnByaW50ZiAoZmlsZSwgXygiICAtLW1pbm9yLWltYWdlLXZlcnNp b24gPG51bWJlcj4gICAgIFNldCByZXZpc2lvbiBudW1iZXIgb2YgdGhlIGV4 ZWN1dGFibGVcbiIpKTsKKyAgZnByaW50ZiAoZmlsZSwgXygiICAtLW1pbm9y LW9zLXZlcnNpb24gPG51bWJlcj4gICAgICAgIFNldCBtaW5pbXVtIHJlcXVp cmVkIE9TIHJldmlzaW9uXG4iKSk7CisgIGZwcmludGYgKGZpbGUsIF8oIiAg LS1taW5vci1zdWJzeXN0ZW0tdmVyc2lvbiA8bnVtYmVyPiBTZXQgbWluaW11 bSByZXF1aXJlZCBPUyBzdWJzeXN0ZW0gcmV2aXNpb25cbiIpKTsKKyAgZnBy aW50ZiAoZmlsZSwgXygiICAtLXNlY3Rpb24tYWxpZ25tZW50IDxzaXplPiAg ICAgICAgIFNldCBzZWN0aW9uIGFsaWdubWVudFxuIikpOworICBmcHJpbnRm IChmaWxlLCBfKCIgIC0tc3RhY2sgPHNpemU+ICAgICAgICAgICAgICAgICAg ICAgU2V0IHNpemUgb2YgdGhlIGluaXRpYWwgc3RhY2tcbiIpKTsKKyAgZnBy aW50ZiAoZmlsZSwgXygiICAtLXN1YnN5c3RlbSA8bmFtZT5bOjx2ZXJzaW9u Pl0gICAgIFNldCByZXF1aXJlZCBPUyBzdWJzeXN0ZW0gWyYgdmVyc2lvbl1c biIpKTsKKyAgZnByaW50ZiAoZmlsZSwgXygiICAtLXN1cHBvcnQtb2xkLWNv ZGUgICAgICAgICAgICAgICAgIFN1cHBvcnQgaW50ZXJ3b3JraW5nIHdpdGgg b2xkIGNvZGVcbiIpKTsKKyAgZnByaW50ZiAoZmlsZSwgXygiICAtLXRodW1i LWVudHJ5PTxzeW1ib2w+ICAgICAgICAgICAgIFNldCB0aGUgZW50cnkgcG9p bnQgdG8gYmUgVGh1bWIgPHN5bWJvbD5cbiIpKTsKKyNpZmRlZiBETExfU1VQ UE9SVAorICBmcHJpbnRmIChmaWxlLCBfKCIgIC0tYWRkLXN0ZGNhbGwtYWxp YXMgICAgICAgICAgICAgICAgRXhwb3J0IHN5bWJvbHMgd2l0aCBhbmQgd2l0 aG91dCBAbm5cbiIpKTsKKyAgZnByaW50ZiAoZmlsZSwgXygiICAtLWRpc2Fi bGUtc3RkY2FsbC1maXh1cCAgICAgICAgICAgIERvbid0IGxpbmsgX3N5bSB0 byBfc3ltQG5uXG4iKSk7CisgIGZwcmludGYgKGZpbGUsIF8oIiAgLS1lbmFi bGUtc3RkY2FsbC1maXh1cCAgICAgICAgICAgICBMaW5rIF9zeW0gdG8gX3N5 bUBubiB3aXRob3V0IHdhcm5pbmdzXG4iKSk7CisgIGZwcmludGYgKGZpbGUs IF8oIiAgLS1leGNsdWRlLXN5bWJvbHMgc3ltLHN5bSwuLi4gICAgICBFeGNs dWRlIHN5bWJvbHMgZnJvbSBhdXRvbWF0aWMgZXhwb3J0XG4iKSk7CisgIGZw cmludGYgKGZpbGUsIF8oIiAgLS1leGNsdWRlLWxpYnMgbGliLGxpYiwuLi4g ICAgICAgICBFeGNsdWRlIGxpYnJhcmllcyBmcm9tIGF1dG9tYXRpYyBleHBv cnRcbiIpKTsKKyAgZnByaW50ZiAoZmlsZSwgXygiICAtLWV4cG9ydC1hbGwt c3ltYm9scyAgICAgICAgICAgICAgIEF1dG9tYXRpY2FsbHkgZXhwb3J0IGFs bCBnbG9iYWxzIHRvIERMTFxuIikpOworICBmcHJpbnRmIChmaWxlLCBfKCIg IC0ta2lsbC1hdCAgICAgICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlIEBu biBmcm9tIGV4cG9ydGVkIHN5bWJvbHNcbiIpKTsKKyAgZnByaW50ZiAoZmls ZSwgXygiICAtLW91dC1pbXBsaWIgPGZpbGU+ICAgICAgICAgICAgICAgIEdl bmVyYXRlIGltcG9ydCBsaWJyYXJ5XG4iKSk7CisgIGZwcmludGYgKGZpbGUs IF8oIiAgLS1vdXRwdXQtZGVmIDxmaWxlPiAgICAgICAgICAgICAgICBHZW5l cmF0ZSBhIC5ERUYgZmlsZSBmb3IgdGhlIGJ1aWx0IERMTFxuIikpOworICBm cHJpbnRmIChmaWxlLCBfKCIgIC0td2Fybi1kdXBsaWNhdGUtZXhwb3J0cyAg ICAgICAgICAgV2FybiBhYm91dCBkdXBsaWNhdGUgZXhwb3J0cy5cbiIpKTsK KyAgZnByaW50ZiAoZmlsZSwgXygiICAtLWNvbXBhdC1pbXBsaWIgICAgICAg ICAgICAgICAgICAgIENyZWF0ZSBiYWNrd2FyZCBjb21wYXRpYmxlIGltcG9y dCBsaWJzO1xuXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY3JlYXRlIF9faW1wXzxTWU1CT0w+IGFzIHdlbGwuXG4iKSk7Cisg IGZwcmludGYgKGZpbGUsIF8oIiAgLS1lbmFibGUtYXV0by1pbWFnZS1iYXNl ICAgICAgICAgICBBdXRvbWF0aWNhbGx5IGNob29zZSBpbWFnZSBiYXNlIGZv ciBETExzXG5cCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1bmxlc3MgdXNlciBzcGVjaWZpZXMgb25lXG4iKSk7CisgIGZwcmlu dGYgKGZpbGUsIF8oIiAgLS1kaXNhYmxlLWF1dG8taW1hZ2UtYmFzZSAgICAg ICAgICBEbyBub3QgYXV0by1jaG9vc2UgaW1hZ2UgYmFzZS4gKGRlZmF1bHQp XG4iKSk7CisgIGZwcmludGYgKGZpbGUsIF8oIiAgLS1kbGwtc2VhcmNoLXBy ZWZpeD08c3RyaW5nPiAgICAgICBXaGVuIGxpbmtpbmcgZHluYW1pY2FsbHkg dG8gYSBkbGwgd2l0aG91dFxuXAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYW4gaW1wb3J0bGliLCB1c2UgPHN0cmluZz48YmFz ZW5hbWU+LmRsbFxuXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW4gcHJlZmVyZW5jZSB0byBsaWI8YmFzZW5hbWU+LmRsbCBc biIpKTsKKyAgZnByaW50ZiAoZmlsZSwgXygiICAtLWVuYWJsZS1hdXRvLWlt cG9ydCAgICAgICAgICAgICAgIERvIHNvcGhpc3RjYXRlZCBsaW5raW5nIG9m IF9zeW0gdG9cblwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9faW1wX3N5bSBmb3IgREFUQSByZWZlcmVuY2VzXG4iKSk7Cisg IGZwcmludGYgKGZpbGUsIF8oIiAgLS1kaXNhYmxlLWF1dG8taW1wb3J0ICAg ICAgICAgICAgICBEbyBub3QgYXV0by1pbXBvcnQgREFUQSBpdGVtcyBmcm9t IERMTHNcbiIpKTsKKyAgZnByaW50ZiAoZmlsZSwgXygiICAtLWVuYWJsZS1y dW50aW1lLXBzZXVkby1yZWxvYyAgICAgIFdvcmsgYXJvdW5kIGF1dG8taW1w b3J0IGxpbWl0YXRpb25zIGJ5XG5cCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBhZGRpbmcgcHNldWRvLXJlbG9jYXRpb25zIHJl c29sdmVkIGF0XG5cCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBydW50aW1lLlxuIikpOworICBmcHJpbnRmIChmaWxlLCBfKCIg IC0tZGlzYWJsZS1ydW50aW1lLXBzZXVkby1yZWxvYyAgICAgRG8gbm90IGFk ZCBydW50aW1lIHBzZXVkby1yZWxvY2F0aW9ucyBmb3JcblwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8taW1wb3J0ZWQg REFUQS5cbiIpKTsKKyAgZnByaW50ZiAoZmlsZSwgXygiICAtLWVuYWJsZS1l eHRyYS1wZXAtZGVidWcgICAgICAgICAgICBFbmFibGUgdmVyYm9zZSBkZWJ1 ZyBvdXRwdXQgd2hlbiBidWlsZGluZ1xuXAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgb3IgbGlua2luZyB0byBETExzIChlc3Au IGF1dG8taW1wb3J0KVxuIikpOworI2VuZGlmCit9CisKKworc3RhdGljIHZv aWQKK3NldF9wZXBfbmFtZSAoY2hhciAqbmFtZSwgbG9uZyB2YWwpCit7Cisg IGludCBpOworCisgIC8qIEZpbmQgdGhlIG5hbWUgYW5kIHNldCBpdC4gICov CisgIGZvciAoaSA9IDA7IGluaXRbaV0ucHRyOyBpKyspCisgICAgeworICAg ICAgaWYgKHN0cmNtcCAobmFtZSwgaW5pdFtpXS5zeW1ib2wpID09IDApCisJ eworCSAgaW5pdFtpXS52YWx1ZSA9IHZhbDsKKwkgIGluaXRbaV0uaW5pdGVk ID0gMTsKKwkgIHJldHVybjsKKwl9CisgICAgfQorICBhYm9ydCAoKTsKK30K KworCitzdGF0aWMgdm9pZAorc2V0X3BlcF9zdWJzeXN0ZW0gKHZvaWQpCit7 CisgIGNvbnN0IGNoYXIgKnN2ZXI7CisgIGNvbnN0IGNoYXIgKmVudHJ5Owor ICBjb25zdCBjaGFyICppbml0aWFsX3N5bWJvbF9jaGFyOworICBjaGFyICpl bmQ7CisgIGludCBsZW47CisgIGludCBpOworICBpbnQgc3Vic3lzdGVtOwor ICB1bnNpZ25lZCBsb25nIHRlbXBfc3Vic3lzdGVtOworICBzdGF0aWMgY29u c3Qgc3RydWN0CisgICAgeworICAgICAgY29uc3QgY2hhciAqbmFtZTsKKyAg ICAgIGNvbnN0IGludCB2YWx1ZTsKKyAgICAgIGNvbnN0IGNoYXIgKmVudHJ5 OworICAgIH0KKyAgdltdID0KKyAgICB7CisgICAgICB7ICJuYXRpdmUiLCAg MSwgIk50UHJvY2Vzc1N0YXJ0dXAiIH0sCisgICAgICB7ICJ3aW5kb3dzIiwg MiwgIldpbk1haW5DUlRTdGFydHVwIiB9LAorICAgICAgeyAiY29uc29sZSIs IDMsICJtYWluQ1JUU3RhcnR1cCIgfSwKKyAgICAgIHsgInBvc2l4IiwgICA3 LCAiX19Qb3NpeFByb2Nlc3NTdGFydHVwIn0sCisgICAgICB7ICJ3aW5jZSIs ICAgOSwgIl9XaW5NYWluQ1JUU3RhcnR1cCIgfSwKKyAgICAgIHsgInhib3gi LCAgIDE0LCAibWFpbkNSVFN0YXJ0dXAiIH0sCisgICAgICB7IE5VTEwsIDAs IE5VTEwgfQorICAgIH07CisgIC8qIEVudHJ5IHBvaW50IG5hbWUgZm9yIGFy Yml0cmFyeSBzdWJzeXN0ZW0gbnVtYmVycy4gICovCisgIHN0YXRpYyBjb25z dCBjaGFyIGRlZmF1bHRfZW50cnlbXSA9ICJtYWluQ1JUU3RhcnR1cCI7CisK KyAgLyogQ2hlY2sgZm9yIHRoZSBwcmVzZW5jZSBvZiBhIHZlcnNpb24gbnVt YmVyLiAgKi8KKyAgc3ZlciA9IHN0cmNociAob3B0YXJnLCAnOicpOworICBp ZiAoc3ZlciA9PSBOVUxMKQorICAgIGxlbiA9IHN0cmxlbiAob3B0YXJnKTsK KyAgZWxzZQorICAgIHsKKyAgICAgIGxlbiA9IHN2ZXIgLSBvcHRhcmc7Cisg ICAgICBzZXRfcGVwX25hbWUgKCJfX21ham9yX3N1YnN5c3RlbV92ZXJzaW9u X18iLAorCQkgICBzdHJ0b3VsIChzdmVyICsgMSwgJmVuZCwgMCkpOworICAg ICAgaWYgKCplbmQgPT0gJy4nKQorCXNldF9wZXBfbmFtZSAoIl9fbWlub3Jf c3Vic3lzdGVtX3ZlcnNpb25fXyIsCisJCSAgICAgc3RydG91bCAoZW5kICsg MSwgJmVuZCwgMCkpOworICAgICAgaWYgKCplbmQgIT0gJ1wwJykKKwllaW5m byAoXygiJVA6IHdhcm5pbmc6IGJhZCB2ZXJzaW9uIG51bWJlciBpbiAtc3Vi c3lzdGVtIG9wdGlvblxuIikpOworICAgIH0KKworICAvKiBDaGVjayBmb3Ig bnVtZXJpYyBzdWJzeXN0ZW0uICAqLworICB0ZW1wX3N1YnN5c3RlbSA9IHN0 cnRvdWwgKG9wdGFyZywgJiBlbmQsIDApOworICBpZiAoKCplbmQgPT0gJzon IHx8ICplbmQgPT0gJ1wwJykgJiYgKHRlbXBfc3Vic3lzdGVtIDwgNjU1MzYp KQorICAgIHsKKyAgICAgIC8qIFNlYXJjaCBsaXN0IGZvciBhIG51bWVyaWMg bWF0Y2ggdG8gdXNlIGl0cyBlbnRyeSBwb2ludC4gICovCisgICAgICBmb3Ig KGkgPSAwOyB2W2ldLm5hbWU7IGkrKykKKwlpZiAodltpXS52YWx1ZSA9PSAo aW50KSB0ZW1wX3N1YnN5c3RlbSkKKwkgIGJyZWFrOworCisgICAgICAvKiBJ ZiBubyBtYXRjaCwgdXNlIHRoZSBkZWZhdWx0LiAgKi8KKyAgICAgIGlmICh2 W2ldLm5hbWUgIT0gTlVMTCkKKwllbnRyeSA9IHZbaV0uZW50cnk7CisgICAg ICBlbHNlCisJZW50cnkgPSBkZWZhdWx0X2VudHJ5OworCisgICAgICAvKiBV c2UgdGhpcyBzdWJzeXN0ZW0uICAqLworICAgICAgc3Vic3lzdGVtID0gKGlu dCkgdGVtcF9zdWJzeXN0ZW07CisgICAgfQorICBlbHNlCisgICAgeworICAg ICAgLyogU2VhcmNoIGZvciBzdWJzeXN0ZW0gYnkgbmFtZS4gICovCisgICAg ICBmb3IgKGkgPSAwOyB2W2ldLm5hbWU7IGkrKykKKwlpZiAoc3RybmNtcCAo b3B0YXJnLCB2W2ldLm5hbWUsIGxlbikgPT0gMAorCSAgICAmJiB2W2ldLm5h bWVbbGVuXSA9PSAnXDAnKQorCSAgYnJlYWs7CisKKyAgICAgIGlmICh2W2ld Lm5hbWUgPT0gTlVMTCkKKwl7CisJICBlaW5mbyAoXygiJVAlRjogaW52YWxp ZCBzdWJzeXN0ZW0gdHlwZSAlc1xuIiksIG9wdGFyZyk7CisJICByZXR1cm47 CisJfQorCisgICAgICBlbnRyeSA9IHZbaV0uZW50cnk7CisgICAgICBzdWJz eXN0ZW0gPSB2W2ldLnZhbHVlOworICAgIH0KKworICBzZXRfcGVwX25hbWUg KCJfX3N1YnN5c3RlbV9fIiwgc3Vic3lzdGVtKTsKKworICBpbml0aWFsX3N5 bWJvbF9jaGFyID0gJHtJTklUSUFMX1NZTUJPTF9DSEFSfTsKKyAgaWYgKCpp bml0aWFsX3N5bWJvbF9jaGFyICE9ICdcMCcpCisgICAgeworICAgICAgY2hh ciAqYWxjX2VudHJ5OworCisgICAgICAvKiBsYW5nX2RlZmF1bHRfZW50cnkg ZXhwZWN0cyBpdHMgYXJndW1lbnQgdG8gYmUgcGVybWFuZW50bHkKKwkgYWxs b2NhdGVkLCBzbyB3ZSBkb24ndCBmcmVlIHRoaXMgc3RyaW5nLiAgKi8KKyAg ICAgIGFsY19lbnRyeSA9IHhtYWxsb2MgKHN0cmxlbiAoaW5pdGlhbF9zeW1i b2xfY2hhcikKKwkJCSAgICsgc3RybGVuIChlbnRyeSkKKwkJCSAgICsgMSk7 CisgICAgICBzdHJjcHkgKGFsY19lbnRyeSwgaW5pdGlhbF9zeW1ib2xfY2hh cik7CisgICAgICBzdHJjYXQgKGFsY19lbnRyeSwgZW50cnkpOworICAgICAg ZW50cnkgPSBhbGNfZW50cnk7CisgICAgfQorCisgIGxhbmdfZGVmYXVsdF9l bnRyeSAoZW50cnkpOworCisgIHJldHVybjsKK30KKworCitzdGF0aWMgdm9p ZAorc2V0X3BlcF92YWx1ZSAoY2hhciAqbmFtZSkKK3sKKyAgY2hhciAqZW5k OworCisgIHNldF9wZXBfbmFtZSAobmFtZSwgIHN0cnRvdWwgKG9wdGFyZywg JmVuZCwgMCkpOworCisgIGlmIChlbmQgPT0gb3B0YXJnKQorICAgIGVpbmZv IChfKCIlUCVGOiBpbnZhbGlkIGhleCBudW1iZXIgZm9yIFBFIHBhcmFtZXRl ciAnJXMnXG4iKSwgb3B0YXJnKTsKKworICBvcHRhcmcgPSBlbmQ7Cit9CisK Kworc3RhdGljIHZvaWQKK3NldF9wZXBfc3RhY2tfaGVhcCAoY2hhciAqcmVz bmFtZSwgY2hhciAqY29tbmFtZSkKK3sKKyAgc2V0X3BlcF92YWx1ZSAocmVz bmFtZSk7CisKKyAgaWYgKCpvcHRhcmcgPT0gJywnKQorICAgIHsKKyAgICAg IG9wdGFyZysrOworICAgICAgc2V0X3BlcF92YWx1ZSAoY29tbmFtZSk7Cisg ICAgfQorICBlbHNlIGlmICgqb3B0YXJnKQorICAgIGVpbmZvIChfKCIlUCVG OiBzdHJhbmdlIGhleCBpbmZvIGZvciBQRSBwYXJhbWV0ZXIgJyVzJ1xuIiks IG9wdGFyZyk7Cit9CisKKworc3RhdGljIGJmZF9ib29sZWFuCitnbGQke0VN VUxBVElPTl9OQU1FfV9oYW5kbGVfb3B0aW9uIChpbnQgb3B0YykKK3sKKyAg c3dpdGNoIChvcHRjKQorICAgIHsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0 dXJuIEZBTFNFOworCisgICAgY2FzZSBPUFRJT05fQkFTRV9GSUxFOgorICAg ICAgbGlua19pbmZvLmJhc2VfZmlsZSA9IGZvcGVuIChvcHRhcmcsIEZPUEVO X1dCKTsKKyAgICAgIGlmIChsaW5rX2luZm8uYmFzZV9maWxlID09IE5VTEwp CisJeworCSAgLyogeGdldHRleHQ6Yy1mb3JtYXQgKi8KKwkgIGZwcmludGYg KHN0ZGVyciwgXygiJXM6IENhbid0IG9wZW4gYmFzZSBmaWxlICVzXG4iKSwK KwkJICAgcHJvZ3JhbV9uYW1lLCBvcHRhcmcpOworCSAgeGV4aXQgKDEpOwor CX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBQRSBvcHRpb25zLiAgKi8K KyAgICBjYXNlIE9QVElPTl9IRUFQOgorICAgICAgc2V0X3BlcF9zdGFja19o ZWFwICgiX19zaXplX29mX2hlYXBfcmVzZXJ2ZV9fIiwgIl9fc2l6ZV9vZl9o ZWFwX2NvbW1pdF9fIik7CisgICAgICBicmVhazsKKyAgICBjYXNlIE9QVElP Tl9TVEFDSzoKKyAgICAgIHNldF9wZXBfc3RhY2tfaGVhcCAoIl9fc2l6ZV9v Zl9zdGFja19yZXNlcnZlX18iLCAiX19zaXplX29mX3N0YWNrX2NvbW1pdF9f Iik7CisgICAgICBicmVhazsKKyAgICBjYXNlIE9QVElPTl9TVUJTWVNURU06 CisgICAgICBzZXRfcGVwX3N1YnN5c3RlbSAoKTsKKyAgICAgIGJyZWFrOwor ICAgIGNhc2UgT1BUSU9OX01BSk9SX09TX1ZFUlNJT046CisgICAgICBzZXRf cGVwX3ZhbHVlICgiX19tYWpvcl9vc192ZXJzaW9uX18iKTsKKyAgICAgIGJy ZWFrOworICAgIGNhc2UgT1BUSU9OX01JTk9SX09TX1ZFUlNJT046CisgICAg ICBzZXRfcGVwX3ZhbHVlICgiX19taW5vcl9vc192ZXJzaW9uX18iKTsKKyAg ICAgIGJyZWFrOworICAgIGNhc2UgT1BUSU9OX01BSk9SX1NVQlNZU1RFTV9W RVJTSU9OOgorICAgICAgc2V0X3BlcF92YWx1ZSAoIl9fbWFqb3Jfc3Vic3lz dGVtX3ZlcnNpb25fXyIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBPUFRJ T05fTUlOT1JfU1VCU1lTVEVNX1ZFUlNJT046CisgICAgICBzZXRfcGVwX3Zh bHVlICgiX19taW5vcl9zdWJzeXN0ZW1fdmVyc2lvbl9fIik7CisgICAgICBi cmVhazsKKyAgICBjYXNlIE9QVElPTl9NQUpPUl9JTUFHRV9WRVJTSU9OOgor ICAgICAgc2V0X3BlcF92YWx1ZSAoIl9fbWFqb3JfaW1hZ2VfdmVyc2lvbl9f Iik7CisgICAgICBicmVhazsKKyAgICBjYXNlIE9QVElPTl9NSU5PUl9JTUFH RV9WRVJTSU9OOgorICAgICAgc2V0X3BlcF92YWx1ZSAoIl9fbWlub3JfaW1h Z2VfdmVyc2lvbl9fIik7CisgICAgICBicmVhazsKKyAgICBjYXNlIE9QVElP Tl9GSUxFX0FMSUdOTUVOVDoKKyAgICAgIHNldF9wZXBfdmFsdWUgKCJfX2Zp bGVfYWxpZ25tZW50X18iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgT1BU SU9OX1NFQ1RJT05fQUxJR05NRU5UOgorICAgICAgc2V0X3BlcF92YWx1ZSAo Il9fc2VjdGlvbl9hbGlnbm1lbnRfXyIpOworICAgICAgYnJlYWs7CisgICAg Y2FzZSBPUFRJT05fRExMOgorICAgICAgc2V0X3BlcF9uYW1lICgiX19kbGxf XyIsIDEpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBPUFRJT05fSU1BR0Vf QkFTRToKKyAgICAgIHNldF9wZXBfdmFsdWUgKCJfX2ltYWdlX2Jhc2VfXyIp OworICAgICAgYnJlYWs7CisgICAgY2FzZSBPUFRJT05fU1VQUE9SVF9PTERf Q09ERToKKyAgICAgIHN1cHBvcnRfb2xkX2NvZGUgPSAxOworICAgICAgYnJl YWs7CisgICAgY2FzZSBPUFRJT05fVEhVTUJfRU5UUlk6CisgICAgICB0aHVt Yl9lbnRyeV9zeW1ib2wgPSBvcHRhcmc7CisgICAgICBicmVhazsKKyNpZmRl ZiBETExfU1VQUE9SVAorICAgIGNhc2UgT1BUSU9OX09VVF9ERUY6CisgICAg ICBwZXBfb3V0X2RlZl9maWxlbmFtZSA9IHhzdHJkdXAgKG9wdGFyZyk7Cisg ICAgICBicmVhazsKKyAgICBjYXNlIE9QVElPTl9FWFBPUlRfQUxMOgorICAg ICAgcGVwX2RsbF9leHBvcnRfZXZlcnl0aGluZyA9IDE7CisgICAgICBicmVh azsKKyAgICBjYXNlIE9QVElPTl9FWENMVURFX1NZTUJPTFM6CisgICAgICBw ZXBfZGxsX2FkZF9leGNsdWRlcyAob3B0YXJnLCAwKTsKKyAgICAgIGJyZWFr OworICAgIGNhc2UgT1BUSU9OX0VYQ0xVREVfTElCUzoKKyAgICAgIHBlcF9k bGxfYWRkX2V4Y2x1ZGVzIChvcHRhcmcsIDEpOworICAgICAgYnJlYWs7Cisg ICAgY2FzZSBPUFRJT05fS0lMTF9BVFM6CisgICAgICBwZXBfZGxsX2tpbGxf YXRzID0gMTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgT1BUSU9OX1NURENB TExfQUxJQVNFUzoKKyAgICAgIHBlcF9kbGxfc3RkY2FsbF9hbGlhc2VzID0g MTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgT1BUSU9OX0VOQUJMRV9TVERD QUxMX0ZJWFVQOgorICAgICAgcGVwX2VuYWJsZV9zdGRjYWxsX2ZpeHVwID0g MTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgT1BUSU9OX0RJU0FCTEVfU1RE Q0FMTF9GSVhVUDoKKyAgICAgIHBlcF9lbmFibGVfc3RkY2FsbF9maXh1cCA9 IDA7CisgICAgICBicmVhazsKKyAgICBjYXNlIE9QVElPTl9JTVBMSUJfRklM RU5BTUU6CisgICAgICBwZXBfaW1wbGliX2ZpbGVuYW1lID0geHN0cmR1cCAo b3B0YXJnKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgT1BUSU9OX1dBUk5f RFVQTElDQVRFX0VYUE9SVFM6CisgICAgICBwZXBfZGxsX3dhcm5fZHVwX2V4 cG9ydHMgPSAxOworICAgICAgYnJlYWs7CisgICAgY2FzZSBPUFRJT05fSU1Q X0NPTVBBVDoKKyAgICAgIHBlcF9kbGxfY29tcGF0X2ltcGxpYiA9IDE7Cisg ICAgICBicmVhazsKKyAgICBjYXNlIE9QVElPTl9FTkFCTEVfQVVUT19JTUFH RV9CQVNFOgorICAgICAgcGVwX2VuYWJsZV9hdXRvX2ltYWdlX2Jhc2UgPSAx OworICAgICAgYnJlYWs7CisgICAgY2FzZSBPUFRJT05fRElTQUJMRV9BVVRP X0lNQUdFX0JBU0U6CisgICAgICBwZXBfZW5hYmxlX2F1dG9faW1hZ2VfYmFz ZSA9IDA7CisgICAgICBicmVhazsKKyAgICBjYXNlIE9QVElPTl9ETExfU0VB UkNIX1BSRUZJWDoKKyAgICAgIHBlcF9kbGxfc2VhcmNoX3ByZWZpeCA9IHhz dHJkdXAgKG9wdGFyZyk7CisgICAgICBicmVhazsKKyAgICBjYXNlIE9QVElP Tl9OT19ERUZBVUxUX0VYQ0xVREVTOgorICAgICAgcGVwX2RsbF9kb19kZWZh dWx0X2V4Y2x1ZGVzID0gMDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgT1BU SU9OX0RMTF9FTkFCTEVfQVVUT19JTVBPUlQ6CisgICAgICBsaW5rX2luZm8u cGVpMzg2X2F1dG9faW1wb3J0ID0gMTsKKyAgICAgIGJyZWFrOworICAgIGNh c2UgT1BUSU9OX0RMTF9ESVNBQkxFX0FVVE9fSU1QT1JUOgorICAgICAgbGlu a19pbmZvLnBlaTM4Nl9hdXRvX2ltcG9ydCA9IDA7CisgICAgICBicmVhazsK KyAgICBjYXNlIE9QVElPTl9ETExfRU5BQkxFX1JVTlRJTUVfUFNFVURPX1JF TE9DOgorICAgICAgbGlua19pbmZvLnBlaTM4Nl9ydW50aW1lX3BzZXVkb19y ZWxvYyA9IDE7CisgICAgICBicmVhazsKKyAgICBjYXNlIE9QVElPTl9ETExf RElTQUJMRV9SVU5USU1FX1BTRVVET19SRUxPQzoKKyAgICAgIGxpbmtfaW5m by5wZWkzODZfcnVudGltZV9wc2V1ZG9fcmVsb2MgPSAwOworICAgICAgYnJl YWs7CisgICAgY2FzZSBPUFRJT05fRU5BQkxFX0VYVFJBX1BFX0RFQlVHOgor ICAgICAgcGVwX2RsbF9leHRyYV9wZV9kZWJ1ZyA9IDE7CisgICAgICBicmVh azsKKyNlbmRpZgorICAgIH0KKyAgcmV0dXJuIFRSVUU7Cit9CisMCisKKyNp ZmRlZiBETExfU1VQUE9SVAorc3RhdGljIHVuc2lnbmVkIGxvbmcKK3N0cmhh c2ggKGNvbnN0IGNoYXIgKnN0cikKK3sKKyAgY29uc3QgdW5zaWduZWQgY2hh ciAqczsKKyAgdW5zaWduZWQgbG9uZyBoYXNoOworICB1bnNpZ25lZCBpbnQg YzsKKyAgdW5zaWduZWQgaW50IGxlbjsKKworICBoYXNoID0gMDsKKyAgbGVu ID0gMDsKKyAgcyA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIHN0cjsKKyAg d2hpbGUgKChjID0gKnMrKykgIT0gJ1wwJykKKyAgICB7CisgICAgICBoYXNo ICs9IGMgKyAoYyA8PCAxNyk7CisgICAgICBoYXNoIF49IGhhc2ggPj4gMjsK KyAgICAgICsrbGVuOworICAgIH0KKyAgaGFzaCArPSBsZW4gKyAobGVuIDw8 IDE3KTsKKyAgaGFzaCBePSBoYXNoID4+IDI7CisKKyAgcmV0dXJuIGhhc2g7 Cit9CisKKy8qIFVzZSB0aGUgb3V0cHV0IGZpbGUgdG8gY3JlYXRlIGEgaW1h Z2UgYmFzZSBmb3IgcmVsb2NhdGFibGUgRExMcy4gICovCisKK3N0YXRpYyB1 bnNpZ25lZCBsb25nCitjb21wdXRlX2RsbF9pbWFnZV9iYXNlIChjb25zdCBj aGFyICpvZmlsZSkKK3sKKyAgdW5zaWduZWQgbG9uZyBoYXNoID0gc3RyaGFz aCAob2ZpbGUpOworICByZXR1cm4gMHg2MTMwMDAwMCArICgoaGFzaCA8PCAx NikgJiAweDBGRkMwMDAwKTsKK30KKyNlbmRpZgorCisvKiBBc3NpZ24gdmFs dWVzIHRvIHRoZSBzcGVjaWFsIHN5bWJvbHMgYmVmb3JlIHRoZSBsaW5rZXIg c2NyaXB0IGlzCisgICByZWFkLiAgKi8KKworc3RhdGljIHZvaWQKK2dsZF8k e0VNVUxBVElPTl9OQU1FfV9zZXRfc3ltYm9scyAodm9pZCkKK3sKKyAgLyog UnVuIHRocm91Z2ggYW5kIGludmVudCBzeW1ib2xzIGZvciBhbGwgdGhlCisg ICAgIG5hbWVzIGFuZCBpbnNlcnQgdGhlIGRlZmF1bHRzLiAgKi8KKyAgaW50 IGo7CisgIGxhbmdfc3RhdGVtZW50X2xpc3RfdHlwZSAqc2F2ZTsKKworICBp ZiAoIWluaXRbSU1BR0VCQVNFT0ZGXS5pbml0ZWQpCisgICAgeworICAgICAg aWYgKGxpbmtfaW5mby5yZWxvY2F0YWJsZSkKKwlpbml0W0lNQUdFQkFTRU9G Rl0udmFsdWUgPSAwOworICAgICAgZWxzZSBpZiAoaW5pdFtETExPRkZdLnZh bHVlIHx8IChsaW5rX2luZm8uc2hhcmVkICYmICFsaW5rX2luZm8ucGllKSkK KyNpZmRlZiBETExfU1VQUE9SVAorCWluaXRbSU1BR0VCQVNFT0ZGXS52YWx1 ZSA9IChwZXBfZW5hYmxlX2F1dG9faW1hZ2VfYmFzZSkgPworCSAgY29tcHV0 ZV9kbGxfaW1hZ2VfYmFzZSAob3V0cHV0X2ZpbGVuYW1lKSA6IE5UX0RMTF9J TUFHRV9CQVNFOworI2Vsc2UKKwlpbml0W0lNQUdFQkFTRU9GRl0udmFsdWUg PSBOVF9ETExfSU1BR0VfQkFTRTsKKyNlbmRpZgorICAgICAgZWxzZQorCWlu aXRbSU1BR0VCQVNFT0ZGXS52YWx1ZSA9IE5UX0VYRV9JTUFHRV9CQVNFOwor CWluaXRbTVNJTUFHRUJBU0VPRkZdLnZhbHVlPWluaXRbSU1BR0VCQVNFT0ZG XS52YWx1ZTsKKyAgICB9CisKKyAgLyogRG9uJ3QgZG8gYW55IHN5bWJvbCBh c3NpZ25tZW50cyBpZiB0aGlzIGlzIGEgcmVsb2NhdGFibGUgbGluay4gICov CisgIGlmIChsaW5rX2luZm8ucmVsb2NhdGFibGUpCisgICAgcmV0dXJuOwor CisgIC8qIEdsdWUgdGhlIGFzc2lnbm1lbnRzIGludG8gdGhlIGFicyBzZWN0 aW9uLiAgKi8KKyAgc2F2ZSA9IHN0YXRfcHRyOworCisgIHN0YXRfcHRyID0g JihhYnNfb3V0cHV0X3NlY3Rpb24tPmNoaWxkcmVuKTsKKworICBmb3IgKGog PSAwOyBpbml0W2pdLnB0cjsgaisrKQorICAgIHsKKyAgICAgIGxvbmcgdmFs ID0gaW5pdFtqXS52YWx1ZTsKKyAgICAgIGxhbmdfYXNzaWdubWVudF9zdGF0 ZW1lbnRfdHlwZSAqcnY7CisgICAgICBydiA9IGxhbmdfYWRkX2Fzc2lnbm1l bnQgKGV4cF9hc3NvcCAoJz0nLCBpbml0W2pdLnN5bWJvbCwKKwkJCQkJICAg ZXhwX2ludG9wICh2YWwpKSk7CisgICAgICBpZiAoaW5pdFtqXS5zaXplID09 IHNpemVvZiAoc2hvcnQpKQorCSooc2hvcnQgKikgaW5pdFtqXS5wdHIgPSB2 YWw7CisgICAgICBlbHNlIGlmIChpbml0W2pdLnNpemUgPT0gc2l6ZW9mIChp bnQpKQorCSooaW50ICopIGluaXRbal0ucHRyID0gdmFsOworICAgICAgZWxz ZSBpZiAoaW5pdFtqXS5zaXplID09IHNpemVvZiAobG9uZykpCisJKihsb25n ICopIGluaXRbal0ucHRyID0gdmFsOworICAgICAgLyogVGhpcyBtaWdodCBi ZSBhIGxvbmcgbG9uZyBvciBvdGhlciBzcGVjaWFsIHR5cGUuICAqLworICAg ICAgZWxzZSBpZiAoaW5pdFtqXS5zaXplID09IHNpemVvZiAoYmZkX3ZtYSkp CisJKihiZmRfdm1hICopIGluaXRbal0ucHRyID0gdmFsOworICAgICAgZWxz ZQlhYm9ydCAoKTsKKyAgICAgIGlmIChqID09IElNQUdFQkFTRU9GRikKKwlp bWFnZV9iYXNlX3N0YXRlbWVudCA9IHJ2OworICAgIH0KKwkvKiBSZXN0b3Jl IHRoZSBwb2ludGVyLiAgKi8KKyAgc3RhdF9wdHIgPSBzYXZlOworCisgIGlm IChwZXAuRmlsZUFsaWdubWVudCA+CisgICAgICBwZXAuU2VjdGlvbkFsaWdu bWVudCkKKyAgICB7CisgICAgICBlaW5mbyAoXygiJVA6IHdhcm5pbmcsIGZp bGUgYWxpZ25tZW50ID4gc2VjdGlvbiBhbGlnbm1lbnQuXG4iKSk7CisgICAg fQorfQorCisvKiBUaGlzIGlzIGNhbGxlZCBhZnRlciB0aGUgbGlua2VyIHNj cmlwdCBhbmQgdGhlIGNvbW1hbmQgbGluZSBvcHRpb25zCisgICBoYXZlIGJl ZW4gcmVhZC4gICovCisKK3N0YXRpYyB2b2lkCitnbGRfJHtFTVVMQVRJT05f TkFNRX1fYWZ0ZXJfcGFyc2UgKHZvaWQpCit7CisgIC8qIFRoZSBXaW5kb3dz IGxpYnJhcmllcyBhcmUgZGVzaWduZWQgZm9yIHRoZSBsaW5rZXIgdG8gdHJl YXQgdGhlCisgICAgIGVudHJ5IHBvaW50IGFzIGFuIHVuZGVmaW5lZCBzeW1i b2wuICBPdGhlcndpc2UsIHRoZSAub2JqIHRoYXQKKyAgICAgZGVmaW5lcyBt YWluQ1JUU3RhcnR1cCBpcyBicm91Z2h0IGluIGJlY2F1c2UgaXQgaXMgdGhl IGZpcnN0CisgICAgIGVuY291bnRlcmVkIGluIGxpYmMubGliIGFuZCBpdCBo YXMgb3RoZXIgc3ltYm9scyBpbiBpdCB3aGljaCB3aWxsCisgICAgIGJlIHB1 bGxlZCBpbiBieSB0aGUgbGluayBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywg d2UgYWN0IGFzCisgICAgIHRob3VnaCB0aGUgdXNlciBzcGVjaWZpZWQgLXUg d2l0aCB0aGUgZW50cnkgcG9pbnQgc3ltYm9sLgorCisgICAgIFRoaXMgZnVu Y3Rpb24gaXMgY2FsbGVkIGFmdGVyIHRoZSBsaW5rZXIgc2NyaXB0IGFuZCBj b21tYW5kIGxpbmUKKyAgICAgb3B0aW9ucyBoYXZlIGJlZW4gcmVhZCwgc28g YXQgdGhpcyBwb2ludCB3ZSBrbm93IHRoZSByaWdodCBlbnRyeQorICAgICBw b2ludC4gIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJlZm9yZSB0aGUgaW5w dXQgZmlsZXMgYXJlCisgICAgIG9wZW5lZCwgc28gcmVnaXN0ZXJpbmcgdGhl IHN5bWJvbCBhcyB1bmRlZmluZWQgd2lsbCBtYWtlIGEKKyAgICAgZGlmZmVy ZW5jZS4gICovCisKKyAgaWYgKCEgbGlua19pbmZvLnJlbG9jYXRhYmxlICYm IGVudHJ5X3N5bWJvbC5uYW1lICE9IE5VTEwpCisgICAgbGRsYW5nX2FkZF91 bmRlZiAoZW50cnlfc3ltYm9sLm5hbWUpOworfQorCisvKiBwZXAtZGxsLmMg ZGlyZWN0bHkgYWNjZXNzZXMgcGVwX2RhdGFfaW1wb3J0X2RsbCwKKyAgIHNv IGl0IG11c3QgYmUgZGVmaW5lZCBvdXRzaWRlIG9mICNpZmRlZiBETExfU1VQ UE9SVC4KKyAgIE5vdGUgLSB0aGlzIHZhcmlhYmxlIGlzIGRlbGliZXJhdGVs eSBub3QgaW5pdGlhbGlzZWQuCisgICBUaGlzIGFsbG93cyBpdCB0byBiZSB0 cmVhdGVkIGFzIGEgY29tbW9uIHZhcmFpYmxlLCBhbmQgb25seQorICAgZXhp c3QgaW4gb25lIGluY2FybmF0aW9uIGluIGEgbXVsdGlwbGUgdGFyZ2V0IGVu YWJsZWQgbGlua2VyLiAgKi8KK2NoYXIgKiBwZXBfZGF0YV9pbXBvcnRfZGxs OworCisjaWZkZWYgRExMX1NVUFBPUlQKK3N0YXRpYyBzdHJ1Y3QgYmZkX2xp bmtfaGFzaF9lbnRyeSAqcGVwX3VuZGVmX2ZvdW5kX3N5bTsKKworc3RhdGlj IGJmZF9ib29sZWFuCitwZXBfdW5kZWZfY2RlY2xfbWF0Y2ggKHN0cnVjdCBi ZmRfbGlua19oYXNoX2VudHJ5ICpoLCB2b2lkICppbmYpCit7CisgIGludCBz bDsKKyAgY2hhciAqc3RyaW5nID0gaW5mOworCisgIHNsID0gc3RybGVuIChz dHJpbmcpOworICBpZiAoaC0+dHlwZSA9PSBiZmRfbGlua19oYXNoX2RlZmlu ZWQKKyAgICAgICYmIHN0cm5jbXAgKGgtPnJvb3Quc3RyaW5nLCBzdHJpbmcs IHNsKSA9PSAwCisgICAgICAmJiBoLT5yb290LnN0cmluZ1tzbF0gPT0gJ0An KQorICAgIHsKKyAgICAgIHBlcF91bmRlZl9mb3VuZF9zeW0gPSBoOworICAg ICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgcmV0dXJuIFRSVUU7Cit9CisK K3N0YXRpYyB2b2lkCitwZXBfZml4dXBfc3RkY2FsbHMgKHZvaWQpCit7Cisg IHN0YXRpYyBpbnQgZ2F2ZV93YXJuaW5nX21lc3NhZ2UgPSAwOworICBzdHJ1 Y3QgYmZkX2xpbmtfaGFzaF9lbnRyeSAqdW5kZWYsICpzeW07CisKKyAgaWYg KHBlcF9kbGxfZXh0cmFfcGVfZGVidWcpCisgICAgcHJpbnRmICgiJXNcbiIs IF9fRlVOQ1RJT05fXyk7CisKKyAgZm9yICh1bmRlZiA9IGxpbmtfaW5mby5o YXNoLT51bmRlZnM7IHVuZGVmOyB1bmRlZj11bmRlZi0+dS51bmRlZi5uZXh0 KQorICAgIGlmICh1bmRlZi0+dHlwZSA9PSBiZmRfbGlua19oYXNoX3VuZGVm aW5lZCkKKyAgICAgIHsKKwljaGFyKiBhdCA9IHN0cmNociAodW5kZWYtPnJv b3Quc3RyaW5nLCAnQCcpOworCWludCBsZWFkX2F0ID0gKCp1bmRlZi0+cm9v dC5zdHJpbmcgPT0gJ0AnKTsKKwkvKiBGb3Igbm93LCBkb24ndCB0cnkgdG8g Zml4dXAgZmFzdGNhbGwgc3ltYm9scy4gICovCisKKwlpZiAoYXQgJiYgIWxl YWRfYXQpCisJICB7CisJICAgIC8qIFRoZSBzeW1ib2wgaXMgYSBzdGRjYWxs IHN5bWJvbCwgc28gbGV0J3MgbG9vayBmb3IgYQorCSAgICAgICBjZGVjbCBz eW1ib2wgd2l0aCB0aGUgc2FtZSBuYW1lIGFuZCByZXNvbHZlIHRvIHRoYXQu ICAqLworCSAgICBjaGFyICpjbmFtZSA9IHhzdHJkdXAgKHVuZGVmLT5yb290 LnN0cmluZyAvKiArIGxlYWRfYXQgKi8pOworCSAgICBhdCA9IHN0cmNociAo Y25hbWUsICdAJyk7CisJICAgICphdCA9IDA7CisJICAgIHN5bSA9IGJmZF9s aW5rX2hhc2hfbG9va3VwIChsaW5rX2luZm8uaGFzaCwgY25hbWUsIDAsIDAs IDEpOworCisJICAgIGlmIChzeW0gJiYgc3ltLT50eXBlID09IGJmZF9saW5r X2hhc2hfZGVmaW5lZCkKKwkgICAgICB7CisJCXVuZGVmLT50eXBlID0gYmZk X2xpbmtfaGFzaF9kZWZpbmVkOworCQl1bmRlZi0+dS5kZWYudmFsdWUgPSBz eW0tPnUuZGVmLnZhbHVlOworCQl1bmRlZi0+dS5kZWYuc2VjdGlvbiA9IHN5 bS0+dS5kZWYuc2VjdGlvbjsKKworCQlpZiAocGVwX2VuYWJsZV9zdGRjYWxs X2ZpeHVwID09IC0xKQorCQkgIHsKKwkJICAgIGVpbmZvIChfKCJXYXJuaW5n OiByZXNvbHZpbmcgJXMgYnkgbGlua2luZyB0byAlc1xuIiksCisJCQkgICB1 bmRlZi0+cm9vdC5zdHJpbmcsIGNuYW1lKTsKKwkJICAgIGlmICghIGdhdmVf d2FybmluZ19tZXNzYWdlKQorCQkgICAgICB7CisJCQlnYXZlX3dhcm5pbmdf bWVzc2FnZSA9IDE7CisJCQllaW5mbyAoXygiVXNlIC0tZW5hYmxlLXN0ZGNh bGwtZml4dXAgdG8gZGlzYWJsZSB0aGVzZSB3YXJuaW5nc1xuIikpOworCQkJ ZWluZm8gKF8oIlVzZSAtLWRpc2FibGUtc3RkY2FsbC1maXh1cCB0byBkaXNh YmxlIHRoZXNlIGZpeHVwc1xuIikpOworCQkgICAgICB9CisJCSAgfQorCSAg ICAgIH0KKwkgIH0KKwllbHNlCisJICB7CisJICAgIC8qIFRoZSBzeW1ib2wg aXMgYSBjZGVjbCBzeW1ib2wsIHNvIHdlIGxvb2sgZm9yIHN0ZGNhbGwKKwkg ICAgICAgc3ltYm9scyAtIHdoaWNoIG1lYW5zIHNjYW5uaW5nIHRoZSB3aG9s ZSBzeW1ib2wgdGFibGUuICAqLworCSAgICBwZXBfdW5kZWZfZm91bmRfc3lt ID0gMDsKKwkgICAgYmZkX2xpbmtfaGFzaF90cmF2ZXJzZSAobGlua19pbmZv Lmhhc2gsIHBlcF91bmRlZl9jZGVjbF9tYXRjaCwKKwkJCQkgICAgKGNoYXIg KikgdW5kZWYtPnJvb3Quc3RyaW5nKTsKKwkgICAgc3ltID0gcGVwX3VuZGVm X2ZvdW5kX3N5bTsKKwkgICAgaWYgKHN5bSkKKwkgICAgICB7CisJCXVuZGVm LT50eXBlID0gYmZkX2xpbmtfaGFzaF9kZWZpbmVkOworCQl1bmRlZi0+dS5k ZWYudmFsdWUgPSBzeW0tPnUuZGVmLnZhbHVlOworCQl1bmRlZi0+dS5kZWYu c2VjdGlvbiA9IHN5bS0+dS5kZWYuc2VjdGlvbjsKKworCQlpZiAocGVwX2Vu YWJsZV9zdGRjYWxsX2ZpeHVwID09IC0xKQorCQkgIHsKKwkJICAgIGVpbmZv IChfKCJXYXJuaW5nOiByZXNvbHZpbmcgJXMgYnkgbGlua2luZyB0byAlc1xu IiksCisJCQkgICB1bmRlZi0+cm9vdC5zdHJpbmcsIHN5bS0+cm9vdC5zdHJp bmcpOworCQkgICAgaWYgKCEgZ2F2ZV93YXJuaW5nX21lc3NhZ2UpCisJCSAg ICAgIHsKKwkJCWdhdmVfd2FybmluZ19tZXNzYWdlID0gMTsKKwkJCWVpbmZv IChfKCJVc2UgLS1lbmFibGUtc3RkY2FsbC1maXh1cCB0byBkaXNhYmxlIHRo ZXNlIHdhcm5pbmdzXG4iKSk7CisJCQllaW5mbyAoXygiVXNlIC0tZGlzYWJs ZS1zdGRjYWxsLWZpeHVwIHRvIGRpc2FibGUgdGhlc2UgZml4dXBzXG4iKSk7 CisJCSAgICAgIH0KKwkJICB9CisJICAgICAgfQorCSAgfQorICAgICAgfQor fQorCitzdGF0aWMgaW50CittYWtlX2ltcG9ydF9maXh1cCAoYXJlbGVudCAq cmVsLCBhc2VjdGlvbiAqcykKK3sKKyAgc3RydWN0IGJmZF9zeW1ib2wgKnN5 bSA9ICpyZWwtPnN5bV9wdHJfcHRyOworICBjaGFyIGFkZGVuZFs0XTsKKwor ICBpZiAocGVwX2RsbF9leHRyYV9wZV9kZWJ1ZykKKyAgICBwcmludGYgKCJh cmVsZW50OiAlc0AlI2x4OiBhZGQ9JWxpXG4iLCBzeW0tPm5hbWUsCisJICAg IChsb25nKSByZWwtPmFkZHJlc3MsIChsb25nKSByZWwtPmFkZGVuZCk7CisK KyAgaWYgKCEgYmZkX2dldF9zZWN0aW9uX2NvbnRlbnRzIChzLT5vd25lciwg cywgYWRkZW5kLCByZWwtPmFkZHJlc3MsIHNpemVvZiAoYWRkZW5kKSkpCisg ICAgZWluZm8gKF8oIiVDOiBDYW5ub3QgZ2V0IHNlY3Rpb24gY29udGVudHMg LSBhdXRvLWltcG9ydCBleGNlcHRpb25cbiIpLAorCSAgIHMtPm93bmVyLCBz LCByZWwtPmFkZHJlc3MpOworCisgIHBlcF9jcmVhdGVfaW1wb3J0X2ZpeHVw IChyZWwsIHMsIGJmZF9nZXRfMzIgKHMtPm93bmVyLCBhZGRlbmQpKTsKKwor ICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK3BlcF9maW5kX2RhdGFf aW1wb3J0cyAodm9pZCkKK3sKKyAgc3RydWN0IGJmZF9saW5rX2hhc2hfZW50 cnkgKnVuZGVmLCAqc3ltOworCisgIGlmIChsaW5rX2luZm8ucGVpMzg2X2F1 dG9faW1wb3J0ID09IDApCisgICAgcmV0dXJuOworCisgIGZvciAodW5kZWYg PSBsaW5rX2luZm8uaGFzaC0+dW5kZWZzOyB1bmRlZjsgdW5kZWY9dW5kZWYt PnUudW5kZWYubmV4dCkKKyAgICB7CisgICAgICBpZiAodW5kZWYtPnR5cGUg PT0gYmZkX2xpbmtfaGFzaF91bmRlZmluZWQpCisJeworCSAgLyogQysrIHN5 bWJvbHMgYXJlICpsb25nKi4gICovCisJICBjaGFyIGJ1Zls0MDk2XTsKKwor CSAgaWYgKHBlcF9kbGxfZXh0cmFfcGVfZGVidWcpCisJICAgIHByaW50ZiAo IiVzOiVzXG4iLCBfX0ZVTkNUSU9OX18sIHVuZGVmLT5yb290LnN0cmluZyk7 CisKKwkgIHNwcmludGYgKGJ1ZiwgIl9faW1wXyVzIiwgdW5kZWYtPnJvb3Qu c3RyaW5nKTsKKworCSAgc3ltID0gYmZkX2xpbmtfaGFzaF9sb29rdXAgKGxp bmtfaW5mby5oYXNoLCBidWYsIDAsIDAsIDEpOworCisJICBpZiAoc3ltICYm IHN5bS0+dHlwZSA9PSBiZmRfbGlua19oYXNoX2RlZmluZWQpCisJICAgIHsK KwkgICAgICBiZmQgKmIgPSBzeW0tPnUuZGVmLnNlY3Rpb24tPm93bmVyOwor CSAgICAgIGFzeW1ib2wgKipzeW1ib2xzOworCSAgICAgIGludCBuc3ltcywg c3ltc2l6ZSwgaTsKKworCSAgICAgIGlmIChsaW5rX2luZm8ucGVpMzg2X2F1 dG9faW1wb3J0ID09IC0xKQorCQlpbmZvX21zZyAoXygiSW5mbzogcmVzb2x2 aW5nICVzIGJ5IGxpbmtpbmcgdG8gJXMgKGF1dG8taW1wb3J0KVxuIiksCisJ CQkgIHVuZGVmLT5yb290LnN0cmluZywgYnVmKTsKKworCSAgICAgIHN5bXNp emUgPSBiZmRfZ2V0X3N5bXRhYl91cHBlcl9ib3VuZCAoYik7CisJICAgICAg c3ltYm9scyA9IChhc3ltYm9sICoqKSB4bWFsbG9jIChzeW1zaXplKTsKKwkg ICAgICBuc3ltcyA9IGJmZF9jYW5vbmljYWxpemVfc3ltdGFiIChiLCBzeW1i b2xzKTsKKworCSAgICAgIGZvciAoaSA9IDA7IGkgPCBuc3ltczsgaSsrKQor CQl7CisJCSAgaWYgKG1lbWNtcCAoc3ltYm9sc1tpXS0+bmFtZSwgIl9faGVh ZF8iLAorCQkJICAgICAgc2l6ZW9mICgiX19oZWFkXyIpIC0gMSkpCisJCSAg ICBjb250aW51ZTsKKworCQkgIGlmIChwZXBfZGxsX2V4dHJhX3BlX2RlYnVn KQorCQkgICAgcHJpbnRmICgiLT4lc1xuIiwgc3ltYm9sc1tpXS0+bmFtZSk7 CisKKwkJICBwZXBfZGF0YV9pbXBvcnRfZGxsID0gKGNoYXIqKSAoc3ltYm9s c1tpXS0+bmFtZSArCisJCQkJCQlzaXplb2YgKCJfX2hlYWRfIikgLSAxKTsK KwkJICBicmVhazsKKwkJfQorCisJICAgICAgcGVwX3dhbGtfcmVsb2NzX29m X3N5bWJvbCAoJmxpbmtfaW5mbywgdW5kZWYtPnJvb3Quc3RyaW5nLAorCQkJ CQltYWtlX2ltcG9ydF9maXh1cCk7CisKKwkgICAgICAvKiBMZXQncyBkaWZm ZXJlbnRpYXRlIGl0IHNvbWVob3cgZnJvbSBkZWZpbmVkLiAgKi8KKwkgICAg ICB1bmRlZi0+dHlwZSA9IGJmZF9saW5rX2hhc2hfZGVmd2VhazsKKwkgICAg ICAvKiBXZSByZXBsYWNlIG9yaWdpbmFsIG5hbWUgd2l0aCBfX2ltcF8gcHJl Zml4ZWQsIHRoaXMKKwkJIDEpIG1heSB0cmFzaCBtZW1vcnkgMikgbGVhZHMg dG8gZHVwbGljYXRlIHN5bWJvbCBnZW5lcmF0aW9uLgorCQkgU3RpbGwsIElN SE8gaXQncyBiZXR0ZXIgdGhhbiBoYXZpbmcgbmFtZSBwb2x1dGVkLiAgKi8K KwkgICAgICB1bmRlZi0+cm9vdC5zdHJpbmcgPSBzeW0tPnJvb3Quc3RyaW5n OworCSAgICAgIHVuZGVmLT51LmRlZi52YWx1ZSA9IHN5bS0+dS5kZWYudmFs dWU7CisJICAgICAgdW5kZWYtPnUuZGVmLnNlY3Rpb24gPSBzeW0tPnUuZGVm LnNlY3Rpb247CisJICAgIH0KKwl9CisgICAgfQorfQorCitzdGF0aWMgYmZk X2Jvb2xlYW4KK3ByX3N5bSAoc3RydWN0IGJmZF9oYXNoX2VudHJ5ICpoLCB2 b2lkICppbmYgQVRUUklCVVRFX1VOVVNFRCkKK3sKKyAgaWYgKHBlcF9kbGxf ZXh0cmFfcGVfZGVidWcpCisgICAgcHJpbnRmICgiKyVzXG4iLCBoLT5zdHJp bmcpOworCisgIHJldHVybiBUUlVFOworfQorI2VuZGlmIC8qIERMTF9TVVBQ T1JUICovCisKKworc3RhdGljIHZvaWQKK2dsZF8ke0VNVUxBVElPTl9OQU1F fV9hZnRlcl9vcGVuICh2b2lkKQoreworI2lmZGVmIERMTF9TVVBQT1JUCisg IGlmIChwZXBfZGxsX2V4dHJhX3BlX2RlYnVnKQorICAgIHsKKyAgICAgIGJm ZCAqYTsKKyAgICAgIHN0cnVjdCBiZmRfbGlua19oYXNoX2VudHJ5ICpzeW07 CisKKyAgICAgIHByaW50ZiAoIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisK KyAgICAgIGZvciAoc3ltID0gbGlua19pbmZvLmhhc2gtPnVuZGVmczsgc3lt OyBzeW09c3ltLT51LnVuZGVmLm5leHQpCisJcHJpbnRmICgiLSVzXG4iLCBz eW0tPnJvb3Quc3RyaW5nKTsKKyAgICAgIGJmZF9oYXNoX3RyYXZlcnNlICgm bGlua19pbmZvLmhhc2gtPnRhYmxlLCBwcl9zeW0sIE5VTEwpOworCisgICAg ICBmb3IgKGEgPSBsaW5rX2luZm8uaW5wdXRfYmZkczsgYTsgYSA9IGEtPmxp bmtfbmV4dCkKKwlwcmludGYgKCIqJXNcbiIsYS0+ZmlsZW5hbWUpOworICAg IH0KKyNlbmRpZgorCisgIC8qIFBhc3MgdGhlIHdhY2t5IFBFIGNvbW1hbmQg bGluZSBvcHRpb25zIGludG8gdGhlIG91dHB1dCBiZmQuCisgICAgIEZJWE1F OiBUaGlzIHNob3VsZCBiZSBkb25lIHZpYSBhIGZ1bmN0aW9uLCByYXRoZXIg dGhhbiBieQorICAgICBpbmNsdWRpbmcgYW4gaW50ZXJuYWwgQkZEIGhlYWRl ci4gICovCisKKyAgaWYgKGNvZmZfZGF0YSAob3V0cHV0X2JmZCkgPT0gTlVM TCB8fCBjb2ZmX2RhdGEgKG91dHB1dF9iZmQpLT5wZSA9PSAwKQorICAgIGVp bmZvIChfKCIlRiVQOiBQRSBvcGVyYXRpb25zIG9uIG5vbiBQRSBmaWxlLlxu IikpOworCisgIHBlX2RhdGEgKG91dHB1dF9iZmQpLT5wZV9vcHRoZHIgPSBw ZXA7CisgIHBlX2RhdGEgKG91dHB1dF9iZmQpLT5kbGwgPSBpbml0W0RMTE9G Rl0udmFsdWU7CisgIHBlX2RhdGEgKG91dHB1dF9iZmQpLT5yZWFsX2ZsYWdz IHw9IHJlYWxfZmxhZ3M7CisKKyNpZmRlZiBETExfU1VQUE9SVAorICBpZiAo cGVwX2VuYWJsZV9zdGRjYWxsX2ZpeHVwKSAvKiAtMT13YXJuIG9yIDE9ZGlz YWJsZSAqLworICAgIHBlcF9maXh1cF9zdGRjYWxscyAoKTsKKworICBwZXBf cHJvY2Vzc19pbXBvcnRfZGVmcyAob3V0cHV0X2JmZCwgJiBsaW5rX2luZm8p OworCisgIHBlcF9maW5kX2RhdGFfaW1wb3J0cyAoKTsKKworI2lmbmRlZiBU QVJHRVRfSVNfaTM4NnBlcAorICBpZiAobGlua19pbmZvLnNoYXJlZCkKKyNl bHNlCisgIGlmICghbGlua19pbmZvLnJlbG9jYXRhYmxlKQorI2VuZGlmCisg ICAgcGVwX2RsbF9idWlsZF9zZWN0aW9ucyAob3V0cHV0X2JmZCwgJmxpbmtf aW5mbyk7CisKKyNpZm5kZWYgVEFSR0VUX0lTX2kzODZwZXAKKyAgZWxzZQor ICAgIHBlcF9leGVfYnVpbGRfc2VjdGlvbnMgKG91dHB1dF9iZmQsICZsaW5r X2luZm8pOworI2VuZGlmCisjZW5kaWYKKworICB7CisgICAgLyogVGhpcyBu ZXh0IGNodW5rIG9mIGNvZGUgdHJpZXMgdG8gZGV0ZWN0IHRoZSBjYXNlIHdo ZXJlIHlvdSBoYXZlCisgICAgICAgdHdvIGltcG9ydCBsaWJyYXJpZXMgZm9y IHRoZSBzYW1lIERMTCAoc3BlY2lmaWNhbGx5LAorICAgICAgIHN5bWJvbGlj YWxseSBsaW5raW5nIGxpYm0uYSBhbmQgbGliYy5hIGluIGN5Z3dpbiB0bwor ICAgICAgIGxpYmN5Z3dpbi5hKS4gIEluIHRob3NlIGNhc2VzLCBpdCdzIHBv c3NpYmxlIGZvciBmdW5jdGlvbgorICAgICAgIHRodW5rcyBmcm9tIHRoZSBz ZWNvbmQgaW1wbGliIHRvIGJlIHVzZWQgYnV0IHdpdGhvdXQgdGhlCisgICAg ICAgaGVhZC90YWlsIG9iamVjdHMsIGNhdXNpbmcgYW4gaW1wcm9wZXIgaW1w b3J0IHRhYmxlLiAgV2UgZGV0ZWN0CisgICAgICAgdGhvc2UgY2FzZXMgYW5k IHJlbmFtZSB0aGUgIm90aGVyIiBpbXBvcnQgbGlicmFyaWVzIHRvIG1hdGNo CisgICAgICAgdGhlIG9uZSB0aGUgaGVhZC90YWlsIGNvbWUgZnJvbSwgc28g dGhhdCB0aGUgbGlua2VyIHdpbGwgc29ydAorICAgICAgIHRoaW5ncyBuaWNl bHkgYW5kIHByb2R1Y2UgYSB2YWxpZCBpbXBvcnQgdGFibGUuICAqLworCisg ICAgTEFOR19GT1JfRUFDSF9JTlBVVF9TVEFURU1FTlQgKGlzKQorICAgICAg eworCWlmIChpcy0+dGhlX2JmZC0+bXlfYXJjaGl2ZSkKKwkgIHsKKwkgICAg aW50IGlkYXRhMiA9IDAsIHJlbG9jX2NvdW50PTAsIGlzX2ltcCA9IDA7CisJ ICAgIGFzZWN0aW9uICpzZWM7CisKKwkgICAgLyogU2VlIGlmIHRoaXMgaXMg YW4gaW1wb3J0IGxpYnJhcnkgdGh1bmsuICAqLworCSAgICBmb3IgKHNlYyA9 IGlzLT50aGVfYmZkLT5zZWN0aW9uczsgc2VjOyBzZWMgPSBzZWMtPm5leHQp CisJICAgICAgeworCQlpZiAoc3RyY21wIChzZWMtPm5hbWUsICIuaWRhdGFc JDIiKSA9PSAwKQorCQkgIGlkYXRhMiA9IDE7CisJCWlmIChzdHJuY21wIChz ZWMtPm5hbWUsICIuaWRhdGFcJCIsIDcpID09IDApCisJCSAgaXNfaW1wID0g MTsKKwkJcmVsb2NfY291bnQgKz0gc2VjLT5yZWxvY19jb3VudDsKKwkgICAg ICB9CisKKwkgICAgaWYgKGlzX2ltcCAmJiAhaWRhdGEyICYmIHJlbG9jX2Nv dW50KQorCSAgICAgIHsKKwkJLyogSXQgaXMsIGxvb2sgZm9yIHRoZSByZWZl cmVuY2UgdG8gaGVhZCBhbmQgc2VlIGlmIGl0J3MKKwkJICAgZnJvbSBvdXIg b3duIGxpYnJhcnkuICAqLworCQlmb3IgKHNlYyA9IGlzLT50aGVfYmZkLT5z ZWN0aW9uczsgc2VjOyBzZWMgPSBzZWMtPm5leHQpCisJCSAgeworCQkgICAg aW50IGk7CisJCSAgICBsb25nIHN5bXNpemU7CisJCSAgICBsb25nIHJlbHNp emU7CisJCSAgICBhc3ltYm9sICoqc3ltYm9sczsKKwkJICAgIGFyZWxlbnQg KipyZWxvY3M7CisJCSAgICBpbnQgbnJlbG9jczsKKworCQkgICAgc3ltc2l6 ZSA9IGJmZF9nZXRfc3ltdGFiX3VwcGVyX2JvdW5kIChpcy0+dGhlX2JmZCk7 CisJCSAgICBpZiAoc3ltc2l6ZSA8IDEpCisJCSAgICAgIGJyZWFrOworCQkg ICAgcmVsc2l6ZSA9IGJmZF9nZXRfcmVsb2NfdXBwZXJfYm91bmQgKGlzLT50 aGVfYmZkLCBzZWMpOworCQkgICAgaWYgKHJlbHNpemUgPCAxKQorCQkgICAg ICBicmVhazsKKworCQkgICAgc3ltYm9scyA9IChhc3ltYm9sICoqKSB4bWFs bG9jIChzeW1zaXplKTsKKwkJICAgIHN5bXNpemUgPSBiZmRfY2Fub25pY2Fs aXplX3N5bXRhYiAoaXMtPnRoZV9iZmQsIHN5bWJvbHMpOworCQkgICAgaWYg KHN5bXNpemUgPCAwKQorCQkgICAgICB7CisJCQllaW5mbyAoIiVYJVA6IHVu YWJsZSB0byBwcm9jZXNzIHN5bWJvbHM6ICVFIik7CisJCQlyZXR1cm47CisJ CSAgICAgIH0KKworCQkgICAgcmVsb2NzID0gKGFyZWxlbnQgKiopIHhtYWxs b2MgKChzaXplX3QpIHJlbHNpemUpOworCQkgICAgbnJlbG9jcyA9IGJmZF9j YW5vbmljYWxpemVfcmVsb2MgKGlzLT50aGVfYmZkLCBzZWMsCisJCQkJCQkg ICAgICByZWxvY3MsIHN5bWJvbHMpOworCQkgICAgaWYgKG5yZWxvY3MgPCAw KQorCQkgICAgICB7CisJCQlmcmVlIChyZWxvY3MpOworCQkJZWluZm8gKCIl WCVQOiB1bmFibGUgdG8gcHJvY2VzcyByZWxvY3M6ICVFIik7CisJCQlyZXR1 cm47CisJCSAgICAgIH0KKworCQkgICAgZm9yIChpID0gMDsgaSA8IG5yZWxv Y3M7IGkrKykKKwkJICAgICAgeworCQkJc3RydWN0IGJmZF9zeW1ib2wgKnM7 CisJCQlzdHJ1Y3QgYmZkX2xpbmtfaGFzaF9lbnRyeSAqIGJsaGU7CisJCQlj aGFyICpvdGhlcl9iZmRfZmlsZW5hbWU7CisJCQljaGFyICpuOworCisJCQlz ID0gKHJlbG9jc1tpXS0+c3ltX3B0cl9wdHIpWzBdOworCisJCQlpZiAocy0+ ZmxhZ3MgJiBCU0ZfTE9DQUwpCisJCQkgIGNvbnRpbnVlOworCisJCQkvKiBU aHVuayBzZWN0aW9uIHdpdGggcmVsb2MgdG8gYW5vdGhlciBiZmQuICAqLwor CQkJYmxoZSA9IGJmZF9saW5rX2hhc2hfbG9va3VwIChsaW5rX2luZm8uaGFz aCwKKwkJCQkJCSAgICAgcy0+bmFtZSwKKwkJCQkJCSAgICAgRkFMU0UsIEZB TFNFLCBUUlVFKTsKKworCQkJaWYgKGJsaGUgPT0gTlVMTAorCQkJICAgIHx8 IGJsaGUtPnR5cGUgIT0gYmZkX2xpbmtfaGFzaF9kZWZpbmVkKQorCQkJICBj b250aW51ZTsKKworCQkJb3RoZXJfYmZkX2ZpbGVuYW1lCisJCQkgID0gYmxo ZS0+dS5kZWYuc2VjdGlvbi0+b3duZXItPm15X2FyY2hpdmUKKwkJCSAgICA/ IGJmZF9nZXRfZmlsZW5hbWUgKGJsaGUtPnUuZGVmLnNlY3Rpb24tPm93bmVy LT5teV9hcmNoaXZlKQorCQkJICAgIDogYmZkX2dldF9maWxlbmFtZSAoYmxo ZS0+dS5kZWYuc2VjdGlvbi0+b3duZXIpOworCisJCQlpZiAoc3RyY21wIChi ZmRfZ2V0X2ZpbGVuYW1lIChpcy0+dGhlX2JmZC0+bXlfYXJjaGl2ZSksCisJ CQkJICAgIG90aGVyX2JmZF9maWxlbmFtZSkgPT0gMCkKKwkJCSAgY29udGlu dWU7CisKKwkJCS8qIFJlbmFtZSB0aGlzIGltcGxpYiB0byBtYXRjaCB0aGUg b3RoZXIgb25lLiAgKi8KKwkJCW4gPSB4bWFsbG9jIChzdHJsZW4gKG90aGVy X2JmZF9maWxlbmFtZSkgKyAxKTsKKwkJCXN0cmNweSAobiwgb3RoZXJfYmZk X2ZpbGVuYW1lKTsKKwkJCWlzLT50aGVfYmZkLT5teV9hcmNoaXZlLT5maWxl bmFtZSA9IG47CisJCSAgICAgIH0KKworCQkgICAgZnJlZSAocmVsb2NzKTsK KwkJICAgIC8qIE5vdGUgLSB3ZSBkbyBub3QgZnJlZSB0aGUgc3ltYm9scywK KwkJICAgICAgIHRoZXkgYXJlIG5vdyBjYWNoZWQgaW4gdGhlIEJGRC4gICov CisJCSAgfQorCSAgICAgIH0KKwkgIH0KKyAgICAgIH0KKyAgfQorCisgIHsK KyAgICBpbnQgaXNfbXNfYXJjaCA9IDA7CisgICAgYmZkICpjdXJfYXJjaCA9 IDA7CisgICAgbGFuZ19pbnB1dF9zdGF0ZW1lbnRfdHlwZSAqaXMyOworICAg IGxhbmdfaW5wdXRfc3RhdGVtZW50X3R5cGUgKmlzMzsKKworICAgIC8qIENh cmVmdWwgLSB0aGlzIGlzIGEgc2hlbGwgc2NyaXB0LiAgV2F0Y2ggdGhvc2Ug ZG9sbGFyIHNpZ25zISAqLworICAgIC8qIE1pY3Jvc29mdCBpbXBvcnQgbGli cmFyaWVzIGhhdmUgZXZlcnkgbWVtYmVyIG5hbWVkIHRoZSBzYW1lLAorICAg ICAgIGFuZCBub3QgaW4gdGhlIHJpZ2h0IG9yZGVyIGZvciB1cyB0byBsaW5r IHRoZW0gY29ycmVjdGx5LiAgV2UKKyAgICAgICBtdXN0IGRldGVjdCB0aGVz ZSBhbmQgcmVuYW1lIHRoZSBtZW1iZXJzIHNvIHRoYXQgdGhleSdsbCBsaW5r CisgICAgICAgY29ycmVjdGx5LiAgVGhlcmUgYXJlIHRocmVlIHR5cGVzIG9m IG9iamVjdHM6IHRoZSBoZWFkLCB0aGUKKyAgICAgICB0aHVua3MsIGFuZCB0 aGUgc2VudGluZWwocykuICBUaGUgaGVhZCBpcyBlYXN5OyBpdCdzIHRoZSBv bmUKKyAgICAgICB3aXRoIGlkYXRhMi4gIFdlIGFzc3VtZSB0aGF0IHRoZSBz ZW50aW5lbHMgd29uJ3QgaGF2ZSByZWxvY3MsCisgICAgICAgYW5kIHRoZSB0 aHVua3Mgd2lsbC4gIEl0J3MgZWFzaWVyIHRoYW4gY2hlY2tpbmcgdGhlIHN5 bWJvbAorICAgICAgIHRhYmxlIGZvciBleHRlcm5hbCByZWZlcmVuY2VzLiAg Ki8KKyAgICBMQU5HX0ZPUl9FQUNIX0lOUFVUX1NUQVRFTUVOVCAoaXMpCisg ICAgICB7CisJaWYgKGlzLT50aGVfYmZkLT5teV9hcmNoaXZlKQorCSAgewor CSAgICBjaGFyICpwbnQ7CisJICAgIGJmZCAqYXJjaCA9IGlzLT50aGVfYmZk LT5teV9hcmNoaXZlOworCisJICAgIGlmIChjdXJfYXJjaCAhPSBhcmNoKQor CSAgICAgIHsKKwkJY3VyX2FyY2ggPSBhcmNoOworCQlpc19tc19hcmNoID0g MTsKKworCQlmb3IgKGlzMyA9IGlzOworCQkgICAgIGlzMyAmJiBpczMtPnRo ZV9iZmQtPm15X2FyY2hpdmUgPT0gYXJjaDsKKwkJICAgICBpczMgPSAobGFu Z19pbnB1dF9zdGF0ZW1lbnRfdHlwZSAqKSBpczMtPm5leHQpCisJCSAgewor CQkgICAgLyogQSBNUyBkeW5hbWljIGltcG9ydCBsaWJyYXJ5IGNhbiBhbHNv IGNvbnRhaW4gc3RhdGljCisJCSAgICAgICBtZW1iZXJzLCBzbyBsb29rIGZv ciB0aGUgZmlyc3QgZWxlbWVudCB3aXRoIGEgLmRsbAorCQkgICAgICAgZXh0 ZW5zaW9uLCBhbmQgdXNlIHRoYXQgZm9yIHRoZSByZW1haW5kZXIgb2YgdGhl CisJCSAgICAgICBjb21wYXJpc29ucy4gICovCisJCSAgICBwbnQgPSBzdHJy Y2hyIChpczMtPnRoZV9iZmQtPmZpbGVuYW1lLCAnLicpOworCQkgICAgaWYg KHBudCAhPSBOVUxMICYmIHN0cmNtcCAocG50LCAiLmRsbCIpID09IDApCisJ CSAgICAgIGJyZWFrOworCQkgIH0KKworCQlpZiAoaXMzID09IE5VTEwpCisJ CSAgaXNfbXNfYXJjaCA9IDA7CisJCWVsc2UKKwkJICB7CisJCSAgICAvKiBP SywgZm91bmQgb25lLiAgTm93IGxvb2sgdG8gc2VlIGlmIHRoZSByZW1haW5p bmcKKwkJICAgICAgIChkeW5hbWljIGltcG9ydCkgbWVtYmVycyB1c2UgdGhl IHNhbWUgbmFtZS4gICovCisJCSAgICBmb3IgKGlzMiA9IGlzOworCQkJIGlz MiAmJiBpczItPnRoZV9iZmQtPm15X2FyY2hpdmUgPT0gYXJjaDsKKwkJCSBp czIgPSAobGFuZ19pbnB1dF9zdGF0ZW1lbnRfdHlwZSAqKSBpczItPm5leHQp CisJCSAgICAgIHsKKwkJCS8qIFNraXAgc3RhdGljIG1lbWJlcnMsIGllIGFu eXRoaW5nIHdpdGggYSAub2JqCisJCQkgICBleHRlbnNpb24uICAqLworCQkJ cG50ID0gc3RycmNociAoaXMyLT50aGVfYmZkLT5maWxlbmFtZSwgJy4nKTsK KwkJCWlmIChwbnQgIT0gTlVMTCAmJiBzdHJjbXAgKHBudCwgIi5vYmoiKSA9 PSAwKQorCQkJICBjb250aW51ZTsKKworCQkJaWYgKHN0cmNtcCAoaXMzLT50 aGVfYmZkLT5maWxlbmFtZSwKKwkJCQkgICAgaXMyLT50aGVfYmZkLT5maWxl bmFtZSkpCisJCQkgIHsKKwkJCSAgICBpc19tc19hcmNoID0gMDsKKwkJCSAg ICBicmVhazsKKwkJCSAgfQorCQkgICAgICB9CisJCSAgfQorCSAgICAgIH0K KworCSAgICAvKiBUaGlzIGZyYWdtZW50IG1pZ2h0IGhhdmUgY29tZSBmcm9t IGFuIC5vYmogZmlsZSBpbiBhIE1pY3Jvc29mdAorCSAgICAgICBpbXBvcnQs IGFuZCBub3QgYW4gYWN0dWFsIGltcG9ydCByZWNvcmQuIElmIHRoaXMgaXMg dGhlIGNhc2UsCisJICAgICAgIHRoZW4gbGVhdmUgdGhlIGZpbGVuYW1lIGFs b25lLiAgKi8KKwkgICAgcG50ID0gc3RycmNociAoaXMtPnRoZV9iZmQtPmZp bGVuYW1lLCAnLicpOworCisJICAgIGlmIChpc19tc19hcmNoICYmIChzdHJj bXAgKHBudCwgIi5kbGwiKSA9PSAwKSkKKwkgICAgICB7CisJCWludCBpZGF0 YTIgPSAwLCByZWxvY19jb3VudD0wOworCQlhc2VjdGlvbiAqc2VjOworCQlj aGFyICpuZXdfbmFtZSwgc2VxOworCisJCWZvciAoc2VjID0gaXMtPnRoZV9i ZmQtPnNlY3Rpb25zOyBzZWM7IHNlYyA9IHNlYy0+bmV4dCkKKwkJICB7CisJ CSAgICBpZiAoc3RyY21wIChzZWMtPm5hbWUsICIuaWRhdGFcJDIiKSA9PSAw KQorCQkgICAgICBpZGF0YTIgPSAxOworCQkgICAgcmVsb2NfY291bnQgKz0g c2VjLT5yZWxvY19jb3VudDsKKwkJICB9CisKKwkJaWYgKGlkYXRhMikgLyog LmlkYXRhMiBpcyB0aGUgVE9DICovCisJCSAgc2VxID0gJ2EnOworCQllbHNl IGlmIChyZWxvY19jb3VudCA+IDApIC8qIHRodW5rcyAqLworCQkgIHNlcSA9 ICdiJzsKKwkJZWxzZSAvKiBzZW50aW5lbCAqLworCQkgIHNlcSA9ICdjJzsK KworCQluZXdfbmFtZSA9IHhtYWxsb2MgKHN0cmxlbiAoaXMtPnRoZV9iZmQt PmZpbGVuYW1lKSArIDMpOworCQlzcHJpbnRmIChuZXdfbmFtZSwgIiVzLiVj IiwgaXMtPnRoZV9iZmQtPmZpbGVuYW1lLCBzZXEpOworCQlpcy0+dGhlX2Jm ZC0+ZmlsZW5hbWUgPSBuZXdfbmFtZTsKKworCQluZXdfbmFtZSA9IHhtYWxs b2MgKHN0cmxlbiAoaXMtPmZpbGVuYW1lKSArIDMpOworCQlzcHJpbnRmIChu ZXdfbmFtZSwgIiVzLiVjIiwgaXMtPmZpbGVuYW1lLCBzZXEpOworCQlpcy0+ ZmlsZW5hbWUgPSBuZXdfbmFtZTsKKwkgICAgICB9CisJICB9CisgICAgICB9 CisgIH0KK30KKworc3RhdGljIHZvaWQKK2dsZF8ke0VNVUxBVElPTl9OQU1F fV9iZWZvcmVfYWxsb2NhdGlvbiAodm9pZCkKK3sKKyAgYmVmb3JlX2FsbG9j YXRpb25fZGVmYXVsdCAoKTsKK30KKworI2lmZGVmIERMTF9TVVBQT1JUCisv KiBUaGlzIGlzIGNhbGxlZCB3aGVuIGFuIGlucHV0IGZpbGUgaXNuJ3QgcmVj b2duaXplZCBhcyBhIEJGRC4gIFdlCisgICBjaGVjayBoZXJlIGZvciAuREVG IGZpbGVzIGFuZCBwdWxsIHRoZW0gaW4gYXV0b21hdGljYWxseS4gICovCisK K3N0YXRpYyBpbnQKK3Nhd19vcHRpb24gKGNoYXIgKm9wdGlvbikKK3sKKyAg aW50IGk7CisKKyAgZm9yIChpID0gMDsgaW5pdFtpXS5wdHI7IGkrKykKKyAg ICBpZiAoc3RyY21wIChpbml0W2ldLnN5bWJvbCwgb3B0aW9uKSA9PSAwKQor ICAgICAgcmV0dXJuIGluaXRbaV0uaW5pdGVkOworICByZXR1cm4gMDsKK30K KyNlbmRpZiAvKiBETExfU1VQUE9SVCAqLworCitzdGF0aWMgYmZkX2Jvb2xl YW4KK2dsZF8ke0VNVUxBVElPTl9OQU1FfV91bnJlY29nbml6ZWRfZmlsZSAo bGFuZ19pbnB1dF9zdGF0ZW1lbnRfdHlwZSAqZW50cnkgQVRUUklCVVRFX1VO VVNFRCkKK3sKKyNpZmRlZiBETExfU1VQUE9SVAorICBjb25zdCBjaGFyICpl eHQgPSBlbnRyeS0+ZmlsZW5hbWUgKyBzdHJsZW4gKGVudHJ5LT5maWxlbmFt ZSkgLSA0OworCisgIGlmIChzdHJjbXAgKGV4dCwgIi5kZWYiKSA9PSAwIHx8 IHN0cmNtcCAoZXh0LCAiLkRFRiIpID09IDApCisgICAgeworICAgICAgcGVw X2RlZl9maWxlID0gZGVmX2ZpbGVfcGFyc2UgKGVudHJ5LT5maWxlbmFtZSwg cGVwX2RlZl9maWxlKTsKKworICAgICAgaWYgKHBlcF9kZWZfZmlsZSkKKwl7 CisJICBpbnQgaSwgYnVmbGVuPTAsIGxlbjsKKwkgIGNoYXIgKmJ1ZjsKKwor CSAgZm9yIChpID0gMDsgaSA8IHBlcF9kZWZfZmlsZS0+bnVtX2V4cG9ydHM7 IGkrKykKKwkgICAgeworCSAgICAgIGxlbiA9IHN0cmxlbiAocGVwX2RlZl9m aWxlLT5leHBvcnRzW2ldLmludGVybmFsX25hbWUpOworCSAgICAgIGlmIChi dWZsZW4gPCBsZW4gKyAyKQorCQlidWZsZW4gPSBsZW4gKyAyOworCSAgICB9 CisKKwkgIGJ1ZiA9IChjaGFyICopIHhtYWxsb2MgKGJ1Zmxlbik7CisKKwkg IGZvciAoaSA9IDA7IGkgPCBwZXBfZGVmX2ZpbGUtPm51bV9leHBvcnRzOyBp KyspCisJICAgIHsKKwkgICAgICBzdHJ1Y3QgYmZkX2xpbmtfaGFzaF9lbnRy eSAqaDsKKworCSAgICAgIHNwcmludGYgKGJ1ZiwgIl8lcyIsIHBlcF9kZWZf ZmlsZS0+ZXhwb3J0c1tpXS5pbnRlcm5hbF9uYW1lKTsKKworCSAgICAgIGgg PSBiZmRfbGlua19oYXNoX2xvb2t1cCAobGlua19pbmZvLmhhc2gsIGJ1Ziwg VFJVRSwgVFJVRSwgVFJVRSk7CisJICAgICAgaWYgKGggPT0gKHN0cnVjdCBi ZmRfbGlua19oYXNoX2VudHJ5ICopIE5VTEwpCisJCWVpbmZvIChfKCIlUCVG OiBiZmRfbGlua19oYXNoX2xvb2t1cCBmYWlsZWQ6ICVFXG4iKSk7CisJICAg ICAgaWYgKGgtPnR5cGUgPT0gYmZkX2xpbmtfaGFzaF9uZXcpCisJCXsKKwkJ ICBoLT50eXBlID0gYmZkX2xpbmtfaGFzaF91bmRlZmluZWQ7CisJCSAgaC0+ dS51bmRlZi5hYmZkID0gTlVMTDsKKwkJICBiZmRfbGlua19hZGRfdW5kZWYg KGxpbmtfaW5mby5oYXNoLCBoKTsKKwkJfQorCSAgICB9CisJICBmcmVlIChi dWYpOworCisJICAvKiBkZWZfZmlsZV9wcmludCAoc3Rkb3V0LCBwZXBfZGVm X2ZpbGUpOyAqLworCSAgaWYgKHBlcF9kZWZfZmlsZS0+aXNfZGxsID09IDEp CisJICAgIGxpbmtfaW5mby5zaGFyZWQgPSAxOworCisJICBpZiAocGVwX2Rl Zl9maWxlLT5iYXNlX2FkZHJlc3MgIT0gKGJmZF92bWEpKC0xKSkKKwkgICAg eworCSAgICAgIHBlcC5JbWFnZUJhc2UgPQorCQlwZV9kYXRhIChvdXRwdXRf YmZkKS0+cGVfb3B0aGRyLkltYWdlQmFzZSA9CisJCWluaXRbSU1BR0VCQVNF T0ZGXS52YWx1ZSA9IHBlcF9kZWZfZmlsZS0+YmFzZV9hZGRyZXNzOworCSAg ICAgIGluaXRbSU1BR0VCQVNFT0ZGXS5pbml0ZWQgPSAxOworCSAgICAgIGlm IChpbWFnZV9iYXNlX3N0YXRlbWVudCkKKwkJaW1hZ2VfYmFzZV9zdGF0ZW1l bnQtPmV4cCA9CisJCSAgZXhwX2Fzc29wICgnPScsICJfX2ltYWdlX2Jhc2Vf XyIsIGV4cF9pbnRvcCAocGVwLkltYWdlQmFzZSkpOworCSAgICB9CisKKwkg IGlmIChwZXBfZGVmX2ZpbGUtPnN0YWNrX3Jlc2VydmUgIT0gLTEKKwkgICAg ICAmJiAhIHNhd19vcHRpb24gKCJfX3NpemVfb2Zfc3RhY2tfcmVzZXJ2ZV9f IikpCisJICAgIHsKKwkgICAgICBwZXAuU2l6ZU9mU3RhY2tSZXNlcnZlID0g cGVwX2RlZl9maWxlLT5zdGFja19yZXNlcnZlOworCSAgICAgIGlmIChwZXBf ZGVmX2ZpbGUtPnN0YWNrX2NvbW1pdCAhPSAtMSkKKwkJcGVwLlNpemVPZlN0 YWNrQ29tbWl0ID0gcGVwX2RlZl9maWxlLT5zdGFja19jb21taXQ7CisJICAg IH0KKwkgIGlmIChwZXBfZGVmX2ZpbGUtPmhlYXBfcmVzZXJ2ZSAhPSAtMQor CSAgICAgICYmICEgc2F3X29wdGlvbiAoIl9fc2l6ZV9vZl9oZWFwX3Jlc2Vy dmVfXyIpKQorCSAgICB7CisJICAgICAgcGVwLlNpemVPZkhlYXBSZXNlcnZl ID0gcGVwX2RlZl9maWxlLT5oZWFwX3Jlc2VydmU7CisJICAgICAgaWYgKHBl cF9kZWZfZmlsZS0+aGVhcF9jb21taXQgIT0gLTEpCisJCXBlcC5TaXplT2ZI ZWFwQ29tbWl0ID0gcGVwX2RlZl9maWxlLT5oZWFwX2NvbW1pdDsKKwkgICAg fQorCSAgcmV0dXJuIFRSVUU7CisJfQorICAgIH0KKyNlbmRpZgorICByZXR1 cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBiZmRfYm9vbGVhbgorZ2xkXyR7RU1V TEFUSU9OX05BTUV9X3JlY29nbml6ZWRfZmlsZSAobGFuZ19pbnB1dF9zdGF0 ZW1lbnRfdHlwZSAqZW50cnkgQVRUUklCVVRFX1VOVVNFRCkKK3sKKyNpZmRl ZiBETExfU1VQUE9SVAorI2lmZGVmIFRBUkdFVF9JU19pMzg2cGVwCisgIHBl cF9kbGxfaWRfdGFyZ2V0ICgicGVpLXg4Ni02NCIpOworI2VuZGlmCisgIGlm IChiZmRfZ2V0X2Zvcm1hdCAoZW50cnktPnRoZV9iZmQpID09IGJmZF9vYmpl Y3QpCisgICAgeworICAgICAgY2hhciBmYnVmW0xEX1BBVEhNQVggKyAxXTsK KyAgICAgIGNvbnN0IGNoYXIgKmV4dDsKKworICAgICAgaWYgKFJFQUxQQVRI IChlbnRyeS0+ZmlsZW5hbWUsIGZidWYpID09IE5VTEwpCisJc3RybmNweSAo ZmJ1ZiwgZW50cnktPmZpbGVuYW1lLCBzaXplb2YgKGZidWYpKTsKKworICAg ICAgZXh0ID0gZmJ1ZiArIHN0cmxlbiAoZmJ1ZikgLSA0OworCisgICAgICBp ZiAoc3RyY21wIChleHQsICIuZGxsIikgPT0gMCB8fCBzdHJjbXAgKGV4dCwg Ii5ETEwiKSA9PSAwKQorCXJldHVybiBwZXBfaW1wbGllZF9pbXBvcnRfZGxs IChmYnVmKTsKKyAgICB9CisjZW5kaWYKKyAgcmV0dXJuIEZBTFNFOworfQor CitzdGF0aWMgdm9pZAorZ2xkXyR7RU1VTEFUSU9OX05BTUV9X2ZpbmlzaCAo dm9pZCkKK3sKKyNpZiBkZWZpbmVkKFRBUkdFVF9JU19hcm1wZSkgfHwgZGVm aW5lZChUQVJHRVRfSVNfYXJtX2Vwb2NfcGUpCisgIHN0cnVjdCBiZmRfbGlu a19oYXNoX2VudHJ5ICogaDsKKworICBpZiAodGh1bWJfZW50cnlfc3ltYm9s ICE9IE5VTEwpCisgICAgeworICAgICAgaCA9IGJmZF9saW5rX2hhc2hfbG9v a3VwIChsaW5rX2luZm8uaGFzaCwgdGh1bWJfZW50cnlfc3ltYm9sLAorCQkJ CUZBTFNFLCBGQUxTRSwgVFJVRSk7CisKKyAgICAgIGlmIChoICE9IChzdHJ1 Y3QgYmZkX2xpbmtfaGFzaF9lbnRyeSAqKSBOVUxMCisJICAmJiAoaC0+dHlw ZSA9PSBiZmRfbGlua19oYXNoX2RlZmluZWQKKwkgICAgICB8fCBoLT50eXBl ID09IGJmZF9saW5rX2hhc2hfZGVmd2VhaykKKwkgICYmIGgtPnUuZGVmLnNl Y3Rpb24tPm91dHB1dF9zZWN0aW9uICE9IE5VTEwpCisJeworCSAgc3RhdGlj IGNoYXIgYnVmZmVyWzMyXTsKKwkgIGJmZF92bWEgdmFsOworCisJICAvKiBT cGVjaWFsIHByb2Nlc2luZyBpcyByZXF1aXJlZCBmb3IgYSBUaHVtYiBlbnRy eSBzeW1ib2wuICBUaGUKKwkgICAgIGJvdHRvbSBiaXQgb2YgaXRzIGFkZHJl c3MgbXVzdCBiZSBzZXQuICAqLworCSAgdmFsID0gKGgtPnUuZGVmLnZhbHVl CisJCSArIGJmZF9nZXRfc2VjdGlvbl92bWEgKG91dHB1dF9iZmQsCisJCQkJ CWgtPnUuZGVmLnNlY3Rpb24tPm91dHB1dF9zZWN0aW9uKQorCQkgKyBoLT51 LmRlZi5zZWN0aW9uLT5vdXRwdXRfb2Zmc2V0KTsKKworCSAgdmFsIHw9IDE7 CisKKwkgIC8qIE5vdyBjb252ZXJ0IHRoaXMgdmFsdWUgaW50byBhIHN0cmlu ZyBhbmQgc3RvcmUgaXQgaW4gZW50cnlfc3ltYm9sCisJICAgICB3aGVyZSB0 aGUgbGFuZ19maW5pc2goKSBmdW5jdGlvbiB3aWxsIHBpY2sgaXQgdXAuICAq LworCSAgYnVmZmVyWzBdID0gJzAnOworCSAgYnVmZmVyWzFdID0gJ3gnOwor CisJICBzcHJpbnRmX3ZtYSAoYnVmZmVyICsgMiwgdmFsKTsKKworCSAgaWYg KGVudHJ5X3N5bWJvbC5uYW1lICE9IE5VTEwgJiYgZW50cnlfZnJvbV9jbWRs aW5lKQorCSAgICBlaW5mbyAoXygiJVA6IHdhcm5pbmc6ICctLXRodW1iLWVu dHJ5ICVzJyBpcyBvdmVycmlkaW5nICctZSAlcydcbiIpLAorCQkgICB0aHVt Yl9lbnRyeV9zeW1ib2wsIGVudHJ5X3N5bWJvbC5uYW1lKTsKKwkgIGVudHJ5 X3N5bWJvbC5uYW1lID0gYnVmZmVyOworCX0KKyAgICAgIGVsc2UKKwllaW5m byAoXygiJVA6IHdhcm5pbmc6IGNvbm5vdCBmaW5kIHRodW1iIHN0YXJ0IHN5 bWJvbCAlc1xuIiksIHRodW1iX2VudHJ5X3N5bWJvbCk7CisgICAgfQorI2Vu ZGlmIC8qIGRlZmluZWQoVEFSR0VUX0lTX2FybXBlKSB8fCBkZWZpbmVkKFRB UkdFVF9JU19hcm1fZXBvY19wZSkgKi8KKworICBmaW5pc2hfZGVmYXVsdCAo KTsKKworI2lmZGVmIERMTF9TVVBQT1JUCisgIGlmIChsaW5rX2luZm8uc2hh cmVkCisgICAgfHwgKCFsaW5rX2luZm8ucmVsb2NhdGFibGUgJiYgcGVwX2Rl Zl9maWxlLT5udW1fZXhwb3J0cyAhPSAwKQorICAgICkKKyAgICB7CisgICAg ICBwZXBfZGxsX2ZpbGxfc2VjdGlvbnMgKG91dHB1dF9iZmQsICZsaW5rX2lu Zm8pOworICAgICAgaWYgKHBlcF9pbXBsaWJfZmlsZW5hbWUpCisJcGVwX2Rs bF9nZW5lcmF0ZV9pbXBsaWIgKHBlcF9kZWZfZmlsZSwgcGVwX2ltcGxpYl9m aWxlbmFtZSk7CisgICAgfQorCisgIGlmIChwZXBfb3V0X2RlZl9maWxlbmFt ZSkKKyAgICBwZXBfZGxsX2dlbmVyYXRlX2RlZl9maWxlIChwZXBfb3V0X2Rl Zl9maWxlbmFtZSk7CisjZW5kaWYgLyogRExMX1NVUFBPUlQgKi8KKworICAv KiBJIGRvbid0IGtub3cgd2hlcmUgLmlkYXRhIGdldHMgc2V0IGFzIGNvZGUs IGJ1dCBpdCBzaG91bGRuJ3QgYmUuICAqLworICB7CisgICAgYXNlY3Rpb24g KmFzZWMgPSBiZmRfZ2V0X3NlY3Rpb25fYnlfbmFtZSAob3V0cHV0X2JmZCwg Ii5pZGF0YSIpOworCisgICAgaWYgKGFzZWMpCisgICAgICB7CisJYXNlYy0+ ZmxhZ3MgJj0gflNFQ19DT0RFOworCWFzZWMtPmZsYWdzIHw9IFNFQ19EQVRB OworICAgICAgfQorICB9Cit9CisKKwwKKy8qIFBsYWNlIGFuIG9ycGhhbiBz ZWN0aW9uLgorCisgICBXZSB1c2UgdGhpcyB0byBwdXQgc2VjdGlvbnMgaW4g YSByZWFzb25hYmxlIHBsYWNlIGluIHRoZSBmaWxlLCBhbmQKKyAgIHRvIGVu c3VyZSB0aGF0IHRoZXkgYXJlIGFsaWduZWQgYXMgcmVxdWlyZWQuCisKKyAg IFdlIGhhbmRsZSBncm91cGVkIHNlY3Rpb25zIGhlcmUgYXMgd2VsbC4gIEEg c2VjdGlvbiBuYW1lZCAuZm9vJG5uCisgICBnb2VzIGludG8gdGhlIG91dHB1 dCBzZWN0aW9uIC5mb28uICBBbGwgZ3JvdXBlZCBzZWN0aW9ucyBhcmUgc29y dGVkCisgICBieSBuYW1lLgorCisgICBHcm91cGVkIHNlY3Rpb25zIGZvciB0 aGUgZGVmYXVsdCBzZWN0aW9ucyBhcmUgaGFuZGxlZCBieSB0aGUKKyAgIGRl ZmF1bHQgbGlua2VyIHNjcmlwdCB1c2luZyB3aWxkY2FyZHMsIGFuZCBhcmUg c29ydGVkIGJ5CisgICBzb3J0X3NlY3Rpb25zLiAgKi8KKworc3RhdGljIGJm ZF9ib29sZWFuCitnbGRfJHtFTVVMQVRJT05fTkFNRX1fcGxhY2Vfb3JwaGFu IChhc2VjdGlvbiAqcykKK3sKKyAgY29uc3QgY2hhciAqc2VjbmFtZTsKKyAg Y29uc3QgY2hhciAqb3JpZ19zZWNuYW1lOworICBjaGFyICpkb2xsYXIgPSBO VUxMOworICBsYW5nX291dHB1dF9zZWN0aW9uX3N0YXRlbWVudF90eXBlICpv czsKKyAgbGFuZ19zdGF0ZW1lbnRfbGlzdF90eXBlIGFkZF9jaGlsZDsKKwor ICBzZWNuYW1lID0gYmZkX2dldF9zZWN0aW9uX25hbWUgKHMtPm93bmVyLCBz KTsKKworICAvKiBMb29rIHRocm91Z2ggdGhlIHNjcmlwdCB0byBzZWUgd2hl cmUgdG8gcGxhY2UgdGhpcyBzZWN0aW9uLiAgKi8KKyAgb3JpZ19zZWNuYW1l ID0gc2VjbmFtZTsKKyAgaWYgKCFsaW5rX2luZm8ucmVsb2NhdGFibGUKKyAg ICAgICYmIChkb2xsYXIgPSBzdHJjaHIgKHNlY25hbWUsICckJykpICE9IE5V TEwpCisgICAgeworICAgICAgc2l6ZV90IGxlbiA9IGRvbGxhciAtIG9yaWdf c2VjbmFtZTsKKyAgICAgIGNoYXIgKm5ld25hbWUgPSB4bWFsbG9jIChsZW4g KyAxKTsKKyAgICAgIG1lbWNweSAobmV3bmFtZSwgb3JpZ19zZWNuYW1lLCBs ZW4pOworICAgICAgbmV3bmFtZVtsZW5dID0gJ1wwJzsKKyAgICAgIHNlY25h bWUgPSBuZXduYW1lOworICAgIH0KKworICBvcyA9IGxhbmdfb3V0cHV0X3Nl Y3Rpb25fZmluZCAoc2VjbmFtZSk7CisKKyAgbGFuZ19saXN0X2luaXQgKCZh ZGRfY2hpbGQpOworCisgIGlmIChvcyAhPSBOVUxMCisgICAgICAmJiAob3Mt PmJmZF9zZWN0aW9uID09IE5VTEwKKwkgIHx8IG9zLT5iZmRfc2VjdGlvbi0+ ZmxhZ3MgPT0gMAorCSAgfHwgKChzLT5mbGFncyBeIG9zLT5iZmRfc2VjdGlv bi0+ZmxhZ3MpCisJICAgICAgJiAoU0VDX0xPQUQgfCBTRUNfQUxMT0MpKSA9 PSAwKSkKKyAgICB7CisgICAgICAvKiBXZSBhbHJlYWR5IGhhdmUgYW4gb3V0 cHV0IHNlY3Rpb24gc3RhdGVtZW50IHdpdGggdGhpcworCSBuYW1lLCBhbmQg aXRzIGJmZCBzZWN0aW9uLCBpZiBhbnksIGhhcyBjb21wYXRpYmxlIGZsYWdz LgorCSBJZiB0aGUgc2VjdGlvbiBhbHJlYWR5IGV4aXN0cyBidXQgZG9lcyBu b3QgaGF2ZSBhbnkgZmxhZ3Mgc2V0LAorCSB0aGVuIGl0IGhhcyBiZWVuIGNy ZWF0ZWQgYnkgdGhlIGxpbmtlciwgcHJvYmFibHkgYXMgYSByZXN1bHQgb2YK KwkgYSAtLXNlY3Rpb24tc3RhcnQgY29tbWFuZCBsaW5lIHN3aXRjaC4gICov CisgICAgICBsYW5nX2FkZF9zZWN0aW9uICgmYWRkX2NoaWxkLCBzLCBvcyk7 CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgc3RhdGljIHN0cnVjdCBv cnBoYW5fc2F2ZSBob2xkW10gPQorCXsKKwkgIHsgIi50ZXh0IiwKKwkgICAg U0VDX0hBU19DT05URU5UUyB8IFNFQ19BTExPQyB8IFNFQ19MT0FEIHwgU0VD X1JFQURPTkxZIHwgU0VDX0NPREUsCisJICAgIDAsIDAsIDAsIDAgfSwKKwkg IHsgIi5yZGF0YSIsCisJICAgIFNFQ19IQVNfQ09OVEVOVFMgfCBTRUNfQUxM T0MgfCBTRUNfTE9BRCB8IFNFQ19SRUFET05MWSB8IFNFQ19EQVRBLAorCSAg ICAwLCAwLCAwLCAwIH0sCisJICB7ICIuZGF0YSIsCisJICAgIFNFQ19IQVNf Q09OVEVOVFMgfCBTRUNfQUxMT0MgfCBTRUNfTE9BRCB8IFNFQ19EQVRBLAor CSAgICAwLCAwLCAwLCAwIH0sCisJICB7ICIuYnNzIiwKKwkgICAgU0VDX0FM TE9DLAorCSAgICAwLCAwLCAwLCAwIH0KKwl9OworICAgICAgZW51bSBvcnBo YW5fc2F2ZV9pbmRleAorCXsKKwkgIG9ycGhhbl90ZXh0ID0gMCwKKwkgIG9y cGhhbl9yb2RhdGEsCisJICBvcnBoYW5fZGF0YSwKKwkgIG9ycGhhbl9ic3MK Kwl9OworICAgICAgc3RhdGljIGludCBvcnBoYW5faW5pdF9kb25lID0gMDsK KyAgICAgIHN0cnVjdCBvcnBoYW5fc2F2ZSAqcGxhY2U7CisgICAgICBsYW5n X291dHB1dF9zZWN0aW9uX3N0YXRlbWVudF90eXBlICphZnRlcjsKKyAgICAg IGV0cmVlX3R5cGUgKmFkZHJlc3M7CisKKyAgICAgIGlmICghb3JwaGFuX2lu aXRfZG9uZSkKKwl7CisJICBzdHJ1Y3Qgb3JwaGFuX3NhdmUgKmhvOworCSAg Zm9yIChobyA9IGhvbGQ7IGhvIDwgaG9sZCArIHNpemVvZiAoaG9sZCkgLyBz aXplb2YgKGhvbGRbMF0pOyArK2hvKQorCSAgICBpZiAoaG8tPm5hbWUgIT0g TlVMTCkKKwkgICAgICB7CisJCWhvLT5vcyA9IGxhbmdfb3V0cHV0X3NlY3Rp b25fZmluZCAoaG8tPm5hbWUpOworCQlpZiAoaG8tPm9zICE9IE5VTEwgJiYg aG8tPm9zLT5mbGFncyA9PSAwKQorCQkgIGhvLT5vcy0+ZmxhZ3MgPSBoby0+ ZmxhZ3M7CisJICAgICAgfQorCSAgb3JwaGFuX2luaXRfZG9uZSA9IDE7CisJ fQorCisgICAgICAvKiBUcnkgdG8gcHV0IHRoZSBuZXcgb3V0cHV0IHNlY3Rp b24gaW4gYSByZWFzb25hYmxlIHBsYWNlIGJhc2VkCisJIG9uIHRoZSBzZWN0 aW9uIG5hbWUgYW5kIHNlY3Rpb24gZmxhZ3MuICAqLworCisgICAgICBwbGFj ZSA9IE5VTEw7CisgICAgICBpZiAoKHMtPmZsYWdzICYgU0VDX0FMTE9DKSA9 PSAwKQorCTsKKyAgICAgIGVsc2UgaWYgKChzLT5mbGFncyAmIChTRUNfTE9B RCB8IFNFQ19IQVNfQ09OVEVOVFMpKSA9PSAwKQorCXBsYWNlID0gJmhvbGRb b3JwaGFuX2Jzc107CisgICAgICBlbHNlIGlmICgocy0+ZmxhZ3MgJiBTRUNf UkVBRE9OTFkpID09IDApCisJcGxhY2UgPSAmaG9sZFtvcnBoYW5fZGF0YV07 CisgICAgICBlbHNlIGlmICgocy0+ZmxhZ3MgJiBTRUNfQ09ERSkgPT0gMCkK KwlwbGFjZSA9ICZob2xkW29ycGhhbl9yb2RhdGFdOworICAgICAgZWxzZQor CXBsYWNlID0gJmhvbGRbb3JwaGFuX3RleHRdOworCisgICAgICBhZnRlciA9 IE5VTEw7CisgICAgICBpZiAocGxhY2UgIT0gTlVMTCkKKwl7CisJICBpZiAo cGxhY2UtPm9zID09IE5VTEwpCisJICAgIHBsYWNlLT5vcyA9IGxhbmdfb3V0 cHV0X3NlY3Rpb25fZmluZCAocGxhY2UtPm5hbWUpOworCSAgYWZ0ZXIgPSBw bGFjZS0+b3M7CisJICBpZiAoYWZ0ZXIgPT0gTlVMTCkKKwkgICAgYWZ0ZXIg PSBsYW5nX291dHB1dF9zZWN0aW9uX2ZpbmRfYnlfZmxhZ3MgKHMsICZwbGFj ZS0+b3MsIE5VTEwpOworCSAgaWYgKGFmdGVyID09IE5VTEwpCisJICAgIC8q ICpBQlMqIGlzIGFsd2F5cyB0aGUgZmlyc3Qgb3V0cHV0IHNlY3Rpb24gc3Rh dGVtZW50LiAgKi8KKwkgICAgYWZ0ZXIgPSAoJmxhbmdfb3V0cHV0X3NlY3Rp b25fc3RhdGVtZW50LmhlYWQKKwkJICAgICAtPm91dHB1dF9zZWN0aW9uX3N0 YXRlbWVudCk7CisJfQorCisgICAgICAvKiBDaG9vc2UgYSB1bmlxdWUgbmFt ZSBmb3IgdGhlIHNlY3Rpb24uICBUaGlzIHdpbGwgYmUgbmVlZGVkIGlmIHRo ZQorCSBzYW1lIHNlY3Rpb24gbmFtZSBhcHBlYXJzIGluIHRoZSBpbnB1dCBm aWxlIHdpdGggZGlmZmVyZW50CisJIGxvYWRhYmxlIG9yIGFsbG9jYXRhYmxl IGNoYXJhY3RlcmlzdGljcy4gICovCisgICAgICBpZiAoYmZkX2dldF9zZWN0 aW9uX2J5X25hbWUgKG91dHB1dF9iZmQsIHNlY25hbWUpICE9IE5VTEwpCisJ eworCSAgc3RhdGljIGludCBjb3VudCA9IDE7CisJICBzZWNuYW1lID0gYmZk X2dldF91bmlxdWVfc2VjdGlvbl9uYW1lIChvdXRwdXRfYmZkLCBzZWNuYW1l LCAmY291bnQpOworCSAgaWYgKHNlY25hbWUgPT0gTlVMTCkKKwkgICAgZWlu Zm8gKCIlRiVQOiBwbGFjZV9vcnBoYW4gZmFpbGVkOiAlRVxuIik7CisJfQor CisgICAgICAvKiBBbGwgc2VjdGlvbnMgaW4gYW4gZXhlY3V0YWJsZSBtdXN0 IGJlIGFsaWduZWQgdG8gYSBwYWdlIGJvdW5kYXJ5LiAgKi8KKyAgICAgIGFk ZHJlc3MgPSBleHBfdW5vcCAoQUxJR05fSywgZXhwX25hbWVvcCAoTkFNRSwg Il9fc2VjdGlvbl9hbGlnbm1lbnRfXyIpKTsKKyAgICAgIG9zID0gbGFuZ19p bnNlcnRfb3JwaGFuIChzLCBzZWNuYW1lLCBhZnRlciwgcGxhY2UsIGFkZHJl c3MsICZhZGRfY2hpbGQpOworICAgIH0KKworICB7CisgICAgbGFuZ19zdGF0 ZW1lbnRfdW5pb25fdHlwZSAqKnBsID0gJm9zLT5jaGlsZHJlbi5oZWFkOwor CisgICAgaWYgKGRvbGxhciAhPSBOVUxMKQorICAgICAgeworCWJmZF9ib29s ZWFuIGZvdW5kX2RvbGxhcjsKKworCS8qIFRoZSBzZWN0aW9uIG5hbWUgaGFz IGEgJyQnLiAgU29ydCBpdCB3aXRoIHRoZSBvdGhlciAnJCcKKwkgICBzZWN0 aW9ucy4gICovCisJZm91bmRfZG9sbGFyID0gRkFMU0U7CisJZm9yICggOyAq cGwgIT0gTlVMTDsgcGwgPSAmKCpwbCktPmhlYWRlci5uZXh0KQorCSAgewor CSAgICBsYW5nX2lucHV0X3NlY3Rpb25fdHlwZSAqbHM7CisJICAgIGNvbnN0 IGNoYXIgKmxuYW1lOworCisJICAgIGlmICgoKnBsKS0+aGVhZGVyLnR5cGUg IT0gbGFuZ19pbnB1dF9zZWN0aW9uX2VudW0pCisJICAgICAgY29udGludWU7 CisKKwkgICAgbHMgPSAmKCpwbCktPmlucHV0X3NlY3Rpb247CisKKwkgICAg bG5hbWUgPSBiZmRfZ2V0X3NlY3Rpb25fbmFtZSAobHMtPnNlY3Rpb24tPm93 bmVyLCBscy0+c2VjdGlvbik7CisJICAgIGlmIChzdHJjaHIgKGxuYW1lLCAn JCcpID09IE5VTEwpCisJICAgICAgeworCQlpZiAoZm91bmRfZG9sbGFyKQor CQkgIGJyZWFrOworCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAgIHsKKwkJ Zm91bmRfZG9sbGFyID0gVFJVRTsKKwkJaWYgKHN0cmNtcCAob3JpZ19zZWNu YW1lLCBsbmFtZSkgPCAwKQorCQkgIGJyZWFrOworCSAgICAgIH0KKwkgIH0K KyAgICAgIH0KKworICAgIGlmIChhZGRfY2hpbGQuaGVhZCAhPSBOVUxMKQor ICAgICAgeworCWFkZF9jaGlsZC5oZWFkLT5oZWFkZXIubmV4dCA9ICpwbDsK KwkqcGwgPSBhZGRfY2hpbGQuaGVhZDsKKyAgICAgIH0KKyAgfQorCisgIHJl dHVybiBUUlVFOworfQorCitzdGF0aWMgYmZkX2Jvb2xlYW4KK2dsZF8ke0VN VUxBVElPTl9OQU1FfV9vcGVuX2R5bmFtaWNfYXJjaGl2ZQorICAoY29uc3Qg Y2hhciAqYXJjaCBBVFRSSUJVVEVfVU5VU0VELCBzZWFyY2hfZGlyc190eXBl ICpzZWFyY2gsCisgICBsYW5nX2lucHV0X3N0YXRlbWVudF90eXBlICplbnRy eSkKK3sKKyAgY29uc3QgY2hhciAqIGZpbGVuYW1lOworICBjaGFyICogc3Ry aW5nOworCisgIGlmICghIGVudHJ5LT5pc19hcmNoaXZlKQorICAgIHJldHVy biBGQUxTRTsKKworICBmaWxlbmFtZSA9IGVudHJ5LT5maWxlbmFtZTsKKwor ICBzdHJpbmcgPSAoY2hhciAqKSB4bWFsbG9jIChzdHJsZW4gKHNlYXJjaC0+ bmFtZSkKKwkJCSAgICAgKyBzdHJsZW4gKGZpbGVuYW1lKQorCQkJICAgICAr IHNpemVvZiAiL2xpYi5hLmRsbCIKKyNpZmRlZiBETExfU1VQUE9SVAorCQkJ ICAgICArIChwZXBfZGxsX3NlYXJjaF9wcmVmaXggPyBzdHJsZW4gKHBlcF9k bGxfc2VhcmNoX3ByZWZpeCkgOiAwKQorI2VuZGlmCisJCQkgICAgICsgMSk7 CisKKyAgLyogVHJ5ICJsaWJmb28uZGxsLmEiIGZpcnN0IChwcmVmZXJyZWQg ZXhwbGljaXQgaW1wb3J0IGxpYnJhcnkgZm9yIGRsbCdzLiAgKi8KKyAgc3By aW50ZiAoc3RyaW5nLCAiJXMvbGliJXMuZGxsLmEiLCBzZWFyY2gtPm5hbWUs IGZpbGVuYW1lKTsKKworICBpZiAoISBsZGZpbGVfdHJ5X29wZW5fYmZkIChz dHJpbmcsIGVudHJ5KSkKKyAgICB7CisgICAgICAvKiBUcnkgImZvby5kbGwu YSIgbmV4dCAoYWx0ZXJuYXRlIGV4cGxpY2l0IGltcG9ydCBsaWJyYXJ5IGZv ciBkbGwncy4gICovCisgICAgICBzcHJpbnRmIChzdHJpbmcsICIlcy8lcy5k bGwuYSIsIHNlYXJjaC0+bmFtZSwgZmlsZW5hbWUpOworICAgICAgaWYgKCEg bGRmaWxlX3RyeV9vcGVuX2JmZCAoc3RyaW5nLCBlbnRyeSkpCisJeworCSAg LyogVHJ5IGxpYmZvby5hIG5leHQuIE5vcm1hbGx5LCB0aGlzIHdvdWxkIGJl IGludGVycHJldGVkIGFzIGEgc3RhdGljCisJICAgICBsaWJyYXJ5LCBidXQg aXQgKmNvdWxkKiBiZSBhbiBpbXBvcnQgbGlicmFyeS4gRm9yIGJhY2t3YXJk cyBjb21wYXRpYmlsaXR5LAorCSAgICAgbGliZm9vLmEgbmVlZHMgdG8gPT1w cmVjZWRlPT0gbGliZm9vLmRsbCBhbmQgZm9vLmRsbCBpbiB0aGUgc2VhcmNo LAorCSAgICAgb3Igc29tZXRpbWVzIGVycm9ycyBvY2N1ciB3aGVuIGJ1aWxk aW5nIGxlZ2FjeSBwYWNrYWdlcy4KKworCSAgICAgUHV0dGluZyBsaWJmb28u YSBoZXJlIG1lYW5zIHRoYXQgaW4gYSBmYWlsdXJlIGNhc2UgKGkuZS4gdGhl IGxpYnJhcnkKKwkgICAgIC1sZm9vIGlzIG5vdCBmb3VuZCkgd2Ugd2lsbCBz ZWFyY2ggZm9yIGxpYmZvby5hIHR3aWNlIGJlZm9yZQorCSAgICAgZ2l2aW5n IHVwIC0tIG9uY2UgaGVyZSwgYW5kIG9uY2Ugd2hlbiBzZWFyY2hpbmcgZm9y IGEgInN0YXRpYyIgbGliLgorCSAgICAgZm9yIGEgInN0YXRpYyIgbGliLiAg Ki8KKwkgIC8qIFRyeSAibGliZm9vLmEiIChpbXBvcnQgbGliLCBvciBzdGF0 aWMgbGliLCBidXQgbXVzdAorCSAgICAgdGFrZSBwcmVjZWRlbmNlIG92ZXIg ZGxsJ3MpLiAgKi8KKwkgIHNwcmludGYgKHN0cmluZywgIiVzL2xpYiVzLmEi LCBzZWFyY2gtPm5hbWUsIGZpbGVuYW1lKTsKKwkgIGlmICghIGxkZmlsZV90 cnlfb3Blbl9iZmQgKHN0cmluZywgZW50cnkpKQorCSAgICB7CisjaWZkZWYg RExMX1NVUFBPUlQKKwkgICAgICBpZiAocGVwX2RsbF9zZWFyY2hfcHJlZml4 KQorCQl7CisJCSAgLyogVHJ5ICI8cHJlZml4PmZvby5kbGwiIChwcmVmZXJy ZWQgZGxsIG5hbWUsIGlmIHNwZWNpZmllZCkuICAqLworCQkgIHNwcmludGYg KHN0cmluZywgIiVzLyVzJXMuZGxsIiwgc2VhcmNoLT5uYW1lLCBwZXBfZGxs X3NlYXJjaF9wcmVmaXgsIGZpbGVuYW1lKTsKKwkJICBpZiAoISBsZGZpbGVf dHJ5X29wZW5fYmZkIChzdHJpbmcsIGVudHJ5KSkKKwkJICAgIHsKKwkJICAg ICAgLyogVHJ5ICJsaWJmb28uZGxsIiAoZGVmYXVsdCBwcmVmZXJyZWQgZGxs IG5hbWUpLiAgKi8KKwkJICAgICAgc3ByaW50ZiAoc3RyaW5nLCAiJXMvbGli JXMuZGxsIiwgc2VhcmNoLT5uYW1lLCBmaWxlbmFtZSk7CisJCSAgICAgIGlm ICghIGxkZmlsZV90cnlfb3Blbl9iZmQgKHN0cmluZywgZW50cnkpKQorCQkJ eworCQkJICAvKiBGaW5hbGx5LCB0cnkgImZvby5kbGwiIChhbHRlcm5hdGUg ZGxsIG5hbWUpLiAgKi8KKwkJCSAgc3ByaW50ZiAoc3RyaW5nLCAiJXMvJXMu ZGxsIiwgc2VhcmNoLT5uYW1lLCBmaWxlbmFtZSk7CisJCQkgIGlmICghIGxk ZmlsZV90cnlfb3Blbl9iZmQgKHN0cmluZywgZW50cnkpKQorCQkJICAgIHsK KwkJCSAgICAgIGZyZWUgKHN0cmluZyk7CisJCQkgICAgICByZXR1cm4gRkFM U0U7CisJCQkgICAgfQorCQkJfQorCQkgICAgfQorCQl9CisJICAgICAgZWxz ZSAvKiBwZXBfZGxsX3NlYXJjaF9wcmVmaXggbm90IHNwZWNpZmllZC4gICov CisjZW5kaWYKKwkJeworCQkgIC8qIFRyeSAibGliZm9vLmRsbCIgKHByZWZl cnJlZCBkbGwgbmFtZSkuICAqLworCQkgIHNwcmludGYgKHN0cmluZywgIiVz L2xpYiVzLmRsbCIsIHNlYXJjaC0+bmFtZSwgZmlsZW5hbWUpOworCQkgIGlm ICghIGxkZmlsZV90cnlfb3Blbl9iZmQgKHN0cmluZywgZW50cnkpKQorCQkg ICAgeworCQkgICAgICAvKiBGaW5hbGx5LCB0cnkgImZvby5kbGwiIChhbHRl cm5hdGUgZGxsIG5hbWUpLiAgKi8KKwkJICAgICAgc3ByaW50ZiAoc3RyaW5n LCAiJXMvJXMuZGxsIiwgc2VhcmNoLT5uYW1lLCBmaWxlbmFtZSk7CisJCSAg ICAgIGlmICghIGxkZmlsZV90cnlfb3Blbl9iZmQgKHN0cmluZywgZW50cnkp KQorCQkJeworCQkJICBmcmVlIChzdHJpbmcpOworCQkJICByZXR1cm4gRkFM U0U7CisJCQl9CisJCSAgICB9CisJCX0KKwkgICAgfQorCX0KKyAgICB9CisK KyAgZW50cnktPmZpbGVuYW1lID0gc3RyaW5nOworCisgIHJldHVybiBUUlVF OworfQorCitzdGF0aWMgaW50CitnbGRfJHtFTVVMQVRJT05fTkFNRX1fZmlu ZF9wb3RlbnRpYWxfbGlicmFyaWVzCisgIChjaGFyICpuYW1lLCBsYW5nX2lu cHV0X3N0YXRlbWVudF90eXBlICplbnRyeSkKK3sKKyAgcmV0dXJuIGxkZmls ZV9vcGVuX2ZpbGVfc2VhcmNoIChuYW1lLCBlbnRyeSwgIiIsICIubGliIik7 Cit9CisMCitzdGF0aWMgY2hhciAqCitnbGRfJHtFTVVMQVRJT05fTkFNRX1f Z2V0X3NjcmlwdCAoaW50ICppc2ZpbGUpCitFT0YKKyMgU2NyaXB0cyBjb21w aWxlZCBpbi4KKyMgc2VkIGNvbW1hbmRzIHRvIHF1b3RlIGFuIGxkIHNjcmlw dCBhcyBhIEMgc3RyaW5nLgorc2M9Ii1mIHN0cmluZ2lmeS5zZWQiCisKK2Nh dCA+PmUke0VNVUxBVElPTl9OQU1FfS5jIDw8RU9GCit7CisgICppc2ZpbGUg PSAwOworCisgIGlmIChsaW5rX2luZm8ucmVsb2NhdGFibGUgJiYgY29uZmln LmJ1aWxkX2NvbnN0cnVjdG9ycykKKyAgICByZXR1cm4KK0VPRgorc2VkICRz YyBsZHNjcmlwdHMvJHtFTVVMQVRJT05fTkFNRX0ueHUJCQk+PiBlJHtFTVVM QVRJT05fTkFNRX0uYworZWNobyAnICA7IGVsc2UgaWYgKGxpbmtfaW5mby5y ZWxvY2F0YWJsZSkgcmV0dXJuJwk+PiBlJHtFTVVMQVRJT05fTkFNRX0uYwor c2VkICRzYyBsZHNjcmlwdHMvJHtFTVVMQVRJT05fTkFNRX0ueHIJCQk+PiBl JHtFTVVMQVRJT05fTkFNRX0uYworZWNobyAnICA7IGVsc2UgaWYgKCFjb25m aWcudGV4dF9yZWFkX29ubHkpIHJldHVybicJPj4gZSR7RU1VTEFUSU9OX05B TUV9LmMKK3NlZCAkc2MgbGRzY3JpcHRzLyR7RU1VTEFUSU9OX05BTUV9Lnhi bgkJCT4+IGUke0VNVUxBVElPTl9OQU1FfS5jCitlY2hvICcgIDsgZWxzZSBp ZiAoIWNvbmZpZy5tYWdpY19kZW1hbmRfcGFnZWQpIHJldHVybicJPj4gZSR7 RU1VTEFUSU9OX05BTUV9LmMKK3NlZCAkc2MgbGRzY3JpcHRzLyR7RU1VTEFU SU9OX05BTUV9LnhuCQkJPj4gZSR7RU1VTEFUSU9OX05BTUV9LmMKK2VjaG8g JyAgOyBlbHNlIHJldHVybicJCQkJCT4+IGUke0VNVUxBVElPTl9OQU1FfS5j CitzZWQgJHNjIGxkc2NyaXB0cy8ke0VNVUxBVElPTl9OQU1FfS54CQkJPj4g ZSR7RU1VTEFUSU9OX05BTUV9LmMKK2VjaG8gJzsgfScJCQkJCQk+PiBlJHtF TVVMQVRJT05fTkFNRX0uYworCitjYXQgPj5lJHtFTVVMQVRJT05fTkFNRX0u YyA8PEVPRgorCisKK3N0cnVjdCBsZF9lbXVsYXRpb25feGZlcl9zdHJ1Y3Qg bGRfJHtFTVVMQVRJT05fTkFNRX1fZW11bGF0aW9uID0KK3sKKyAgZ2xkXyR7 RU1VTEFUSU9OX05BTUV9X2JlZm9yZV9wYXJzZSwKKyAgc3lzbGliX2RlZmF1 bHQsCisgIGhsbF9kZWZhdWx0LAorICBnbGRfJHtFTVVMQVRJT05fTkFNRX1f YWZ0ZXJfcGFyc2UsCisgIGdsZF8ke0VNVUxBVElPTl9OQU1FfV9hZnRlcl9v cGVuLAorICBhZnRlcl9hbGxvY2F0aW9uX2RlZmF1bHQsCisgIHNldF9vdXRw dXRfYXJjaF9kZWZhdWx0LAorICBsZGVtdWxfZGVmYXVsdF90YXJnZXQsCisg IGdsZF8ke0VNVUxBVElPTl9OQU1FfV9iZWZvcmVfYWxsb2NhdGlvbiwKKyAg Z2xkXyR7RU1VTEFUSU9OX05BTUV9X2dldF9zY3JpcHQsCisgICIke0VNVUxB VElPTl9OQU1FfSIsCisgICIke09VVFBVVF9GT1JNQVR9IiwKKyAgZ2xkXyR7 RU1VTEFUSU9OX05BTUV9X2ZpbmlzaCwKKyAgTlVMTCwgLyogQ3JlYXRlIG91 dHB1dCBzZWN0aW9uIHN0YXRlbWVudHMuICAqLworICBnbGRfJHtFTVVMQVRJ T05fTkFNRX1fb3Blbl9keW5hbWljX2FyY2hpdmUsCisgIGdsZF8ke0VNVUxB VElPTl9OQU1FfV9wbGFjZV9vcnBoYW4sCisgIGdsZF8ke0VNVUxBVElPTl9O QU1FfV9zZXRfc3ltYm9scywKKyAgTlVMTCwgLyogcGFyc2VfYXJncyAqLwor ICBnbGQke0VNVUxBVElPTl9OQU1FfV9hZGRfb3B0aW9ucywKKyAgZ2xkJHtF TVVMQVRJT05fTkFNRX1faGFuZGxlX29wdGlvbiwKKyAgZ2xkXyR7RU1VTEFU SU9OX05BTUV9X3VucmVjb2duaXplZF9maWxlLAorICBnbGRfJHtFTVVMQVRJ T05fTkFNRX1fbGlzdF9vcHRpb25zLAorICBnbGRfJHtFTVVMQVRJT05fTkFN RX1fcmVjb2duaXplZF9maWxlLAorICBnbGRfJHtFTVVMQVRJT05fTkFNRX1f ZmluZF9wb3RlbnRpYWxfbGlicmFyaWVzLAorICBOVUxMCS8qIG5ld192ZXJz X3BhdHRlcm4uICAqLworfTsKK0VPRgpkaWZmIC1yTmJ1IGJpbnV0aWxzLTIu MTdfb3JnL2xkL3BlcC1kbGwuYyBiaW51dGlscy0yLjE3L2xkL3BlcC1kbGwu YwotLS0gYmludXRpbHMtMi4xN19vcmcvbGQvcGVwLWRsbC5jCTE5NzAtMDEt MDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyBiaW51dGlscy0yLjE3 L2xkL3BlcC1kbGwuYwkyMDA2LTA4LTE3IDA5OjEzOjE3LjAwMDAwMDAwMCAr MDIwMApAQCAtMCwwICsxLDI2ODcgQEAKKy8qIFJvdXRpbmVzIHRvIGhlbHAg YnVpbGQgUEVQSS1mb3JtYXQgRExMcyAoV2luNjQgZXRjKQ0KKyAgIENvcHly aWdodCAxOTk1LCAxOTk2LCAxOTk5LCAyMDAxLCAyMDAyLCAyMDA0IEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIGZpbGUgaXMg cGFydCBvZiBCRkQsIHRoZSBCaW5hcnkgRmlsZSBEZXNjcmlwdG9yIGxpYnJh cnkuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAg IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl CisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0 byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTEg RnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIx MTAtMTMwMSwgVVNBLgorICAgCisgICBXcml0dGVuIGJ5IEthaSBUaWV0eiwg T25lVmlzaW9uIFNvZnR3YXJlIEdtYkgmQ29LZy4KKyovCisNCisjZGVmaW5l IENPRkZfSU1BR0VfV0lUSF9QRQ0KKyNkZWZpbmUgQ09GRl9XSVRIX1BFDQor I2RlZmluZSBDT0ZGX1dJVEhfcGV4NjQNCisNCisjaW5jbHVkZSAiYmZkLmgi DQorI2luY2x1ZGUgInN5c2RlcC5oIg0KKyNpbmNsdWRlICJiZmRsaW5rLmgi DQorI2luY2x1ZGUgImxpYmliZXJ0eS5oIg0KKyNpbmNsdWRlICJzYWZlLWN0 eXBlLmgiDQorDQorI2luY2x1ZGUgPHRpbWUuaD4NCisNCisjaW5jbHVkZSAi bGQuaCINCisjaW5jbHVkZSAibGRleHAuaCINCisjaW5jbHVkZSAibGRsYW5n LmgiDQorI2luY2x1ZGUgImxkd3JpdGUuaCINCisjaW5jbHVkZSAibGRtaXNj LmgiDQorI2luY2x1ZGUgPGxkZ3JhbS5oPg0KKyNpbmNsdWRlICJsZG1haW4u aCINCisjaW5jbHVkZSAibGRmaWxlLmgiDQorI2luY2x1ZGUgImxkZW11bC5o Ig0KKyNpbmNsdWRlICJjb2ZmL2ludGVybmFsLmgiDQorI2luY2x1ZGUgIi4u L2JmZC9saWJjb2ZmLmgiDQorI2luY2x1ZGUgImRlZmZpbGUuaCINCisjaW5j bHVkZSAicGVwLWRsbC5oIg0KKw0KKyN1bmRlZiBBT1VUU1oNCisjZGVmaW5l IEFPVVRTWgkJUEVQQU9VVFNaDQorI2RlZmluZSBQRUFPVVRIRFIJUEVQQU9V VEhEUg0KKw0KKy8qICBUaGlzIGZpbGUgdHVybnMgYSByZWd1bGFyIFdpbmRv d3MgUEUgaW1hZ2UgaW50byBhIERMTC4gIEJlY2F1c2Ugb2YNCisgICAgdGhl IGNvbXBsZXhpdHkgb2YgdGhpcyBvcGVyYXRpb24sIGl0IGhhcyBiZWVuIGJy b2tlbiBkb3duIGludG8gYQ0KKyAgICBudW1iZXIgb2Ygc2VwYXJhdGUgbW9k dWxlcyB3aGljaCBhcmUgYWxsIGNhbGxlZCBieSB0aGUgbWFpbiBmdW5jdGlv bg0KKyAgICBhdCB0aGUgZW5kIG9mIHRoaXMgZmlsZS4gIFRoaXMgZnVuY3Rp b24gaXMgbm90IHJlLWVudHJhbnQgYW5kIGlzDQorICAgIG5vcm1hbGx5IG9u bHkgY2FsbGVkIG9uY2UsIHNvIHN0YXRpYyB2YXJpYWJsZXMgYXJlIHVzZWQg dG8gcmVkdWNlDQorICAgIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycyBhbmQg cmV0dXJuIHZhbHVlcyByZXF1aXJlZC4NCisNCisgICAgU2VlIGFsc286IGxk L2VtdWx0ZW1wbC9wZXAuZW0uICAqLw0KKw0KKy8qICBBdXRvLWltcG9ydCBm ZWF0dXJlIGJ5IFBhdWwgU29rb2xvdnNreQ0KKw0KKyAgICBRdWljayBmYWN0 czoNCisNCisgICAgMS4gV2l0aCB0aGlzIGZlYXR1cmUgb24sIERMTCBjbGll bnRzIGNhbiBpbXBvcnQgdmFyaWFibGVzIGZyb20gRExMDQorICAgIHdpdGhv dXQgYW55IGNvbmNlcm4gZnJvbSB0aGVpciBzaWRlIChmb3IgZXhhbXBsZSwg d2l0aG91dCBhbnkgc291cmNlDQorICAgIGNvZGUgbW9kaWZpY2F0aW9ucyku DQorDQorICAgIDIuIFRoaXMgaXMgZG9uZSBjb21wbGV0ZWx5IGluIGJvdW5k cyBvZiB0aGUgUEUgc3BlY2lmaWNhdGlvbiAodG8gYmUgZmFpciwNCisgICAg dGhlcmUncyBhIHBsYWNlIHdoZXJlIGl0IHBva2VzIG5vc2Ugb3V0IG9mLCBi dXQgaW4gcHJhY3RpY2UgaXQgd29ya3MpLg0KKyAgICBTbywgcmVzdWx0aW5n IG1vZHVsZSBjYW4gYmUgdXNlZCB3aXRoIGFueSBvdGhlciBQRSBjb21waWxl ci9saW5rZXIuDQorDQorICAgIDMuIEF1dG8taW1wb3J0IGlzIGZ1bGx5IGNv bXBhdGlibGUgd2l0aCBzdGFuZGFyZCBpbXBvcnQgbWV0aG9kIGFuZCB0aGV5 DQorICAgIGNhbiBiZSBtaXhlZCB0b2dldGhlci4NCisNCisgICAgNC4gT3Zl cmhlYWRzOiBzcGFjZTogOCBieXRlcyBwZXIgaW1wb3J0ZWQgc3ltYm9sLCBw bHVzIDIwIGZvciBlYWNoDQorICAgIHJlZmVyZW5jZSB0byBpdDsgbG9hZCB0 aW1lOiBuZWdsaWdpYmxlOyB2aXJ0dWFsL3BoeXNpY2FsIG1lbW9yeTogc2hv dWxkIGJlDQorICAgIGxlc3MgdGhhbiBlZmZlY3Qgb2YgRExMIHJlbG9jYXRp b24sIGFuZCBJIHNpbmNlcmVseSBob3BlIGl0IGRvZXNuJ3QgYWZmZWN0DQor ICAgIERMTCBzaGFyYWJpbGl0eSAodG9vIG11Y2gpLg0KKw0KKyAgICBJZGVh DQorDQorICAgIFRoZSBvYnZpb3VzIGFuZCBvbmx5IHdheSB0byBnZXQgcmlk IG9mIGRsbGltcG9ydCBpbnNhbml0eSBpcyB0byBtYWtlIGNsaWVudA0KKyAg ICBhY2Nlc3MgdmFyaWFibGUgZGlyZWN0bHkgaW4gdGhlIERMTCwgYnlwYXNz aW5nIGV4dHJhIGRlcmVmZXJlbmNlLiBJLmUuLA0KKyAgICB3aGVuZXZlciBj bGllbnQgY29udGFpbnMgc29tZXRoaW5nIGxpa2UNCisNCisgICAgbW92IGRs bF92YXIsJWVheCwNCisNCisgICAgYWRkcmVzcyBvZiBkbGxfdmFyIGluIHRo ZSBjb21tYW5kIHNob3VsZCBiZSByZWxvY2F0ZWQgdG8gcG9pbnQgaW50byBs b2FkZWQNCisgICAgRExMLiBUaGUgYWltIGlzIHRvIG1ha2UgT1MgbG9hZGVy IGRvIHNvLCBhbmQgdGhhbiBtYWtlIGxkIGhlbHAgd2l0aCB0aGF0Lg0KKyAg ICBJbXBvcnQgc2VjdGlvbiBvZiBQRSBtYWRlIGZvbGxvd2luZyB3YXk6IHRo ZXJlJ3MgYSB2ZWN0b3Igb2Ygc3RydWN0dXJlcw0KKyAgICBlYWNoIGRlc2Ny aWJpbmcgaW1wb3J0cyBmcm9tIHBhcnRpY3VsYXIgRExMLiBFYWNoIHN1Y2gg c3RydWN0dXJlIHBvaW50cw0KKyAgICB0byB0d28gb3RoZXIgcGFyYWxsZWwg dmVjdG9yczogb25lIGhvbGRpbmcgaW1wb3J0ZWQgbmFtZXMsIGFuZCBvbmUg d2hpY2gNCisgICAgd2lsbCBob2xkIGFkZHJlc3Mgb2YgY29ycmVzcG9uZGlu ZyBpbXBvcnRlZCBuYW1lLiBTbywgdGhlIHNvbHV0aW9uIGlzDQorICAgIGRl LXZlY3Rvcml6ZSB0aGVzZSBzdHJ1Y3R1cmVzLCBtYWtpbmcgaW1wb3J0IGxv Y2F0aW9ucyBiZSBzcGFyc2UgYW5kDQorICAgIHBvaW50aW5nIGRpcmVjdGx5 IGludG8gY29kZS4gQmVmb3JlIGNvbnRpbnVpbmcsIGl0IGlzIHdvcnRoIGEg bm90ZSB0aGF0LA0KKyAgICB3aGlsZSBhdXRob3JzIHN0cml2ZXMgdG8gbWFr ZSBQRSBhY3QgRUxGLWxpa2UsIHRoZXJlJ3JlIHNvbWUgb3RoZXIgcGVvcGxl DQorICAgIG1ha2UgRUxGIGFjdCBQRS1saWtlOiBlbGZ2ZWN0b3IsIDstKSAu DQorDQorICAgIEltcGxlbWVudGF0aW9uDQorDQorICAgIEZvciBlYWNoIHJl ZmVyZW5jZSBvZiBkYXRhIHN5bWJvbCB0byBiZSBpbXBvcnRlZCBmcm9tIERM TCAodG8gc2V0IG9mIHdoaWNoDQorICAgIGJlbG9uZyBzeW1ib2xzIHdpdGgg bmFtZSA8c3ltPiwgaWYgX19pbXBfPHN5bT4gaXMgZm91bmQgaW4gaW1wbGli KSwgdGhlDQorICAgIGltcG9ydCBmaXh1cCBlbnRyeSBpcyBnZW5lcmF0ZWQu IFRoYXQgZW50cnkgaXMgb2YgdHlwZQ0KKyAgICBJTUFHRV9JTVBPUlRfREVT Q1JJUFRPUiBhbmQgc3RvcmVkIGluIC5pZGF0YSQzIHN1YnNlY3Rpb24uIEVh Y2gNCisgICAgZml4dXAgZW50cnkgY29udGFpbnMgcG9pbnRlciB0byBzeW1i b2wncyBhZGRyZXNzIHdpdGhpbiAudGV4dCBzZWN0aW9uDQorICAgIChtYXJr ZWQgd2l0aCBfX2Z1Tl88c3ltPiBzeW1ib2wsIHdoZXJlIE4gaXMgaW50ZWdl ciksIHBvaW50ZXIgdG8gRExMIG5hbWUNCisgICAgKHNvLCBETEwgbmFtZSBp cyByZWZlcmVuY2VkIGJ5IG11bHRpcGxlIGVudHJpZXMpLCBhbmQgcG9pbnRl ciB0byBzeW1ib2wNCisgICAgbmFtZSB0aHVuay4gU3ltYm9sIG5hbWUgdGh1 bmsgaXMgc2luZ2xldG9uIHZlY3RvciAoX19ubV90aF88c3ltYm9sPikNCisg ICAgcG9pbnRpbmcgdG8gSU1BR0VfSU1QT1JUX0JZX05BTUUgc3RydWN0dXJl IChfX25tXzxzeW1ib2w+KSBkaXJlY3RseQ0KKyAgICBjb250YWluaW5nIGlt cG9ydGVkIG5hbWUuIEhlcmUgY29tZXMgdGhhdCAib20gdGhlIGVkZ2UiIHBy b2JsZW0gbWVudGlvbmVkDQorICAgIGFib3ZlOiBQRSBzcGVjaWZpY2F0aW9u IHJhbWJsZXMgdGhhdCBuYW1lIHZlY3RvciAoT3JpZ2luYWxGaXJzdFRodW5r KQ0KKyAgICBzaG91bGQgcnVuIGluIHBhcmFsbGVsIHdpdGggYWRkcmVzc2Vz IHZlY3RvciAoRmlyc3RUaHVuayksIGkuZS4gdGhhdCB0aGV5DQorICAgIHNo b3VsZCBoYXZlIHNhbWUgbnVtYmVyIG9mIGVsZW1lbnRzIGFuZCB0ZXJtaW5h dGVkIHdpdGggemVyby4gV2UgdmlvbGF0ZQ0KKyAgICB0aGlzLCBzaW5jZSBG aXJzdFRodW5rIHBvaW50cyBkaXJlY3RseSBpbnRvIG1hY2hpbmUgY29kZS4g QnV0IGluIHByYWN0aWNlLA0KKyAgICBPUyBsb2FkZXIgaW1wbGVtZW50ZWQg dGhlIHNhbmUgd2F5OiBpdCBnb2VzIHRocnUgT3JpZ2luYWxGaXJzdFRodW5r IGFuZA0KKyAgICBwdXRzIGFkZHJlc3NlcyB0byBGaXJzdFRodW5rLCBub3Qg c29tZXRoaW5nIGVsc2UuIEl0IG9uY2UgYWdhaW4gc2hvdWxkIGJlDQorICAg IG5vdGVkIHRoYXQgZGxsIGFuZCBzeW1ib2wgbmFtZSBzdHJ1Y3R1cmVzIGFy ZSByZXVzZWQgYWNyb3NzIGZpeHVwIGVudHJpZXMNCisgICAgYW5kIHNob3Vs ZCBiZSB0aGVyZSBhbnl3YXkgdG8gc3VwcG9ydCBzdGFuZGFyZCBpbXBvcnQg c3R1ZmYsIHNvIHN1c3RhaW5lZA0KKyAgICBvdmVyaGVhZCBpcyAyMCBieXRl cyBwZXIgcmVmZXJlbmNlLiBPdGhlciBxdWVzdGlvbiBpcyB3aGV0aGVyIGhh dmluZyBzZXZlcmFsDQorICAgIElNQUdFX0lNUE9SVF9ERVNDUklQVE9SUyBm b3IgdGhlIHNhbWUgRExMIGlzIHBvc3NpYmxlLiBBbnN3ZXIgaXMgeWVzLCBp dCBpcw0KKyAgICBkb25lIGV2ZW4gYnkgbmF0aXZlIGNvbXBpbGVyL2xpbmtl ciAobGlidGgzMidzIGZ1bmN0aW9ucyBhcmUgaW4gZmFjdCByZXNpZGUNCisg ICAgaW4gd2luZG93czl4IGtlcm5lbDMyLmRsbCwgc28gaWYgeW91IHVzZSBp dCwgeW91IGhhdmUgdHdvDQorICAgIElNQUdFX0lNUE9SVF9ERVNDUklQVE9S UyBmb3Iga2VybmVsMzIuZGxsKS4gWWV0IG90aGVyIHF1ZXN0aW9uIGlzIHdo ZXRoZXINCisgICAgcmVmZXJlbmNpbmcgdGhlIHNhbWUgUEUgc3RydWN0dXJl cyBzZXZlcmFsIHRpbWVzIGlzIHZhbGlkLiBUaGUgYW5zd2VyIGlzIHdoeQ0K KyAgICBub3QsIHByb2hpYml0aW5nIHRoYXQgKGRldGVjdGluZyB2aW9sYXRp b24pIHdvdWxkIHJlcXVpcmUgbW9yZSB3b3JrIG9uDQorICAgIGJlaGFsZiBv ZiBsb2FkZXIgdGhhbiBub3QgZG9pbmcgaXQuDQorDQorICAgIFNlZSBhbHNv OiBsZC9lbXVsdGVtcGwvcGUuZW0uICAqLw0KKw0KK3N0YXRpYyB2b2lkIGFk ZF9iZmRfdG9fbGluayAoYmZkICosIGNvbnN0IGNoYXIgKiwgc3RydWN0IGJm ZF9saW5rX2luZm8gKik7DQorDQorLyogRm9yIGVtdWx0ZW1wbC9wZS5lbS4g ICovDQorDQorZGVmX2ZpbGUgKiBwZXBfZGVmX2ZpbGUgPSAwOw0KK2ludCBw ZXBfZGxsX2V4cG9ydF9ldmVyeXRoaW5nID0gMDsNCitpbnQgcGVwX2RsbF9k b19kZWZhdWx0X2V4Y2x1ZGVzID0gMTsNCitpbnQgcGVwX2RsbF9raWxsX2F0 cyA9IDA7DQoraW50IHBlcF9kbGxfc3RkY2FsbF9hbGlhc2VzID0gMDsNCitp bnQgcGVwX2RsbF93YXJuX2R1cF9leHBvcnRzID0gMDsNCitpbnQgcGVwX2Rs bF9jb21wYXRfaW1wbGliID0gMDsNCitpbnQgcGVwX2RsbF9leHRyYV9wZV9k ZWJ1ZyA9IDA7DQorDQorLyogU3RhdGljIHZhcmlhYmxlcyBhbmQgdHlwZXMu ICAqLw0KKw0KK3N0YXRpYyBiZmRfdm1hIGltYWdlX2Jhc2U7DQorc3RhdGlj IGJmZCAqZmlsbGVyX2JmZDsNCitzdGF0aWMgc3RydWN0IGJmZF9zZWN0aW9u ICplZGF0YV9zLCAqcmVsb2NfczsNCitzdGF0aWMgdW5zaWduZWQgY2hhciAq ZWRhdGFfZCwgKnJlbG9jX2Q7DQorc3RhdGljIHNpemVfdCBlZGF0YV9zeiwg cmVsb2Nfc3o7DQorc3RhdGljIGludCBydW50aW1lX3BzZXVkb19yZWxvY3Nf Y3JlYXRlZCA9IDA7DQorDQordHlwZWRlZiBzdHJ1Y3QNCisgIHsNCisgICAg Y2hhciAqdGFyZ2V0X25hbWU7DQorICAgIGNoYXIgKm9iamVjdF90YXJnZXQ7 DQorICAgIHVuc2lnbmVkIGludCBpbWFnZWJhc2VfcmVsb2M7DQorICAgIGlu dCBwZXBfYXJjaDsNCisgICAgaW50IGJmZF9hcmNoOw0KKyAgICBpbnQgdW5k ZXJzY29yZWQ7DQorICB9DQorcGVwX2RldGFpbHNfdHlwZTsNCisNCit0eXBl ZGVmIHN0cnVjdA0KKyAgew0KKyAgICBjaGFyICpuYW1lOw0KKyAgICBpbnQg bGVuOw0KKyAgfQ0KK2F1dG9maWx0ZXJfZW50cnlfdHlwZTsNCisNCisjZGVm aW5lIFBFX0FSQ0hfaTM4NgkxDQorI2RlZmluZSBQRV9BUkNIX3NoCTINCisj ZGVmaW5lIFBFX0FSQ0hfbWlwcwkzDQorI2RlZmluZSBQRV9BUkNIX2FybQk0 DQorI2RlZmluZSBQRV9BUkNIX2FybV9lcG9jIDUNCisNCitzdGF0aWMgcGVw X2RldGFpbHNfdHlwZSBwZXBfZGV0YWlsX2xpc3RbXSA9DQorew0KKyAgew0K KyAgICAicGVpLXg4Ni02NCIsDQorICAgICJwZS14ODYtNjQiLA0KKyAgICAz IC8qIFJfSU1BR0VCQVNFICovLA0KKyAgICBQRV9BUkNIX2kzODYsDQorICAg IGJmZF9hcmNoX2kzODYsDQorICAgIDENCisgIH0sDQorICB7IE5VTEwsIE5V TEwsIDAsIDAsIDAsIDAgfQ0KK307DQorDQorc3RhdGljIHBlcF9kZXRhaWxz X3R5cGUgKnBlcF9kZXRhaWxzOw0KKw0KK3N0YXRpYyBhdXRvZmlsdGVyX2Vu dHJ5X3R5cGUgYXV0b2ZpbHRlcl9zeW1ib2xsaXN0W10gPQ0KK3sNCisgIHsg IkRsbE1haW5AMTIiLCAxMCB9LA0KKyAgeyAiRGxsRW50cnlQb2ludEAwIiwg MTUgfSwNCisgIHsgIkRsbE1haW5DUlRTdGFydHVwQDEyIiwgMjAgfSwNCisg IHsgIl9jeWd3aW5fZGxsX2VudHJ5QDEyIiwgMjAgfSwNCisgIHsgIl9jeWd3 aW5fY3J0MF9jb21tb25AOCIsIDIxIH0sDQorICB7ICJfY3lnd2luX25vbmN5 Z3dpbl9kbGxfZW50cnlAMTIiLCAzMCB9LA0KKyAgeyAiaW1wdXJlX3B0ciIs IDEwIH0sDQorICB7ICJfcGVpMzg2X3J1bnRpbWVfcmVsb2NhdG9yIiwgMjUg fSwNCisgIHsgImRvX3BzZXVkb19yZWxvYyIsIDE1IH0sDQorICB7ICJjeWd3 aW5fY3J0MCIsIDExIH0sDQorICB7IE5VTEwsIDAgfQ0KK307DQorDQorLyog RG8gbm90IHNwZWNpZnkgbGlicmFyeSBzdWZmaXggZXhwbGljaXRseSwgdG8g YWxsb3cgZm9yIGRsbGl6ZWQgdmVyc2lvbnMuICAqLw0KK3N0YXRpYyBhdXRv ZmlsdGVyX2VudHJ5X3R5cGUgYXV0b2ZpbHRlcl9saWJsaXN0W10gPQ0KK3sN CisgIHsgImxpYmN5Z3dpbiIsIDkgfSwNCisgIHsgImxpYmdjYyIsIDYgfSwN CisgIHsgImxpYnN0ZGMrKyIsIDkgfSwNCisgIHsgImxpYm1pbmd3MzIiLCAx MCB9LA0KKyAgeyAibGlibWluZ3dleCIsIDEwIH0sDQorICB7ICJsaWJnMmMi LCA2IH0sDQorICB7ICJsaWJzdXBjKysiLCA5IH0sDQorICB7ICJsaWJvYmpj IiwgNyB9LA0KKyAgeyAibGliZ2NqIiwgNiB9LA0KKyAgeyBOVUxMLCAwIH0N Cit9Ow0KKw0KK3N0YXRpYyBhdXRvZmlsdGVyX2VudHJ5X3R5cGUgYXV0b2Zp bHRlcl9vYmpsaXN0W10gPQ0KK3sNCisgIHsgImNydDAubyIsIDYgfSwNCisg IHsgImNydDEubyIsIDYgfSwNCisgIHsgImNydDIubyIsIDYgfSwNCisgIHsg ImRsbGNydDEubyIsIDkgfSwNCisgIHsgImRsbGNydDIubyIsIDkgfSwNCisg IHsgImdjcnQwLm8iLCA3IH0sDQorICB7ICJnY3J0MS5vIiwgNyB9LA0KKyAg eyAiZ2NydDIubyIsIDcgfSwNCisgIHsgImNydGJlZ2luLm8iLCAxMCB9LA0K KyAgeyAiY3J0ZW5kLm8iLCA4IH0sDQorICB7IE5VTEwsIDAgfQ0KK307DQor DQorc3RhdGljIGF1dG9maWx0ZXJfZW50cnlfdHlwZSBhdXRvZmlsdGVyX3N5 bWJvbHByZWZpeGxpc3RbXSA9DQorew0KKyAgLyogeyAiX19pbXBfIiwgNiB9 LCAqLw0KKyAgLyogRG8gX19pbXBfIGV4cGxpY2l0bHkgdG8gc2F2ZSB0aW1l LiAgKi8NCisgIHsgIl9fcnR0aV8iLCA3IH0sDQorICAvKiBEb24ndCByZS1l eHBvcnQgYXV0by1pbXBvcnRlZCBzeW1ib2xzLiAgKi8NCisgIHsgIl9ubV8i LCA0IH0sDQorICB7ICJfX2J1aWx0aW5fIiwgMTAgfSwNCisgIC8qIERvbid0 IGV4cG9ydCBzeW1ib2xzIHNwZWNpZnlpbmcgaW50ZXJuYWwgRExMIGxheW91 dC4gICovDQorICB7ICJfaGVhZF8iLCA2IH0sDQorICB7ICJfZm1vZGUiLCA2 IH0sDQorICB7ICJfaW1wdXJlX3B0ciIsIDExIH0sDQorICB7ICJjeWd3aW5f YXR0YWNoX2RsbCIsIDE3IH0sDQorICB7ICJjeWd3aW5fcHJlbWFpbjAiLCAx NSB9LA0KKyAgeyAiY3lnd2luX3ByZW1haW4xIiwgMTUgfSwNCisgIHsgImN5 Z3dpbl9wcmVtYWluMiIsIDE1IH0sDQorICB7ICJjeWd3aW5fcHJlbWFpbjMi LCAxNSB9LA0KKyAgeyAiZW52aXJvbiIsIDcgfSwNCisgIHsgTlVMTCwgMCB9 DQorfTsNCisNCitzdGF0aWMgYXV0b2ZpbHRlcl9lbnRyeV90eXBlIGF1dG9m aWx0ZXJfc3ltYm9sc3VmZml4bGlzdFtdID0NCit7DQorICB7ICJfaW5hbWUi LCA2IH0sDQorICB7IE5VTEwsIDAgfQ0KK307DQorDQorI2RlZmluZSBVKHN0 cikgKHBlcF9kZXRhaWxzLT51bmRlcnNjb3JlZCA/ICJfIiBzdHIgOiBzdHIp DQorDQordm9pZA0KK3BlcF9kbGxfaWRfdGFyZ2V0IChjb25zdCBjaGFyICp0 YXJnZXQpDQorew0KKyAgaW50IGk7DQorDQorICBmb3IgKGkgPSAwOyBwZXBf ZGV0YWlsX2xpc3RbaV0udGFyZ2V0X25hbWU7IGkrKykNCisgICAgaWYgKHN0 cmNtcCAocGVwX2RldGFpbF9saXN0W2ldLnRhcmdldF9uYW1lLCB0YXJnZXQp ID09IDANCisJfHwgc3RyY21wIChwZXBfZGV0YWlsX2xpc3RbaV0ub2JqZWN0 X3RhcmdldCwgdGFyZ2V0KSA9PSAwKQ0KKyAgICAgIHsNCisJcGVwX2RldGFp bHMgPSBwZXBfZGV0YWlsX2xpc3QgKyBpOw0KKwlyZXR1cm47DQorICAgICAg fQ0KKyAgZWluZm8gKF8oIiVYVW5zdXBwb3J0ZWQgUEVJIGFyY2hpdGVjdHVy ZTogJXNcbiIpLCB0YXJnZXQpOw0KKyAgZXhpdCAoMSk7DQorfQ0KKw0KKy8q IEhlbHBlciBmdW5jdGlvbnMgZm9yIHFzb3J0LiAgUmVsb2NzIG11c3QgYmUg c29ydGVkIHNvIHRoYXQgd2UgY2FuIHdyaXRlDQorICAgdGhlbSBvdXQgYnkg cGFnZXMuICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0DQorICB7DQorICAgIGJm ZF92bWEgdm1hOw0KKyAgICBjaGFyIHR5cGU7DQorICAgIHNob3J0IGV4dHJh Ow0KKyAgfQ0KK3JlbG9jX2RhdGFfdHlwZTsNCisNCitzdGF0aWMgaW50DQor cmVsb2Nfc29ydCAoY29uc3Qgdm9pZCAqdmEsIGNvbnN0IHZvaWQgKnZiKQ0K K3sNCisgIGJmZF92bWEgYSA9ICgoY29uc3QgcmVsb2NfZGF0YV90eXBlICop IHZhKS0+dm1hOw0KKyAgYmZkX3ZtYSBiID0gKChjb25zdCByZWxvY19kYXRh X3R5cGUgKikgdmIpLT52bWE7DQorDQorICByZXR1cm4gKGEgPiBiKSA/IDEg OiAoKGEgPCBiKSA/IC0xIDogMCk7DQorfQ0KKw0KK3N0YXRpYyBpbnQNCitw ZXBfZXhwb3J0X3NvcnQgKGNvbnN0IHZvaWQgKnZhLCBjb25zdCB2b2lkICp2 YikNCit7DQorICBjb25zdCBkZWZfZmlsZV9leHBvcnQgKmEgPSB2YTsNCisg IGNvbnN0IGRlZl9maWxlX2V4cG9ydCAqYiA9IHZiOw0KKw0KKyAgcmV0dXJu IHN0cmNtcCAoYS0+bmFtZSwgYi0+bmFtZSk7DQorfQ0KKw0KKy8qIFJlYWQg YW5kIHByb2Nlc3MgdGhlIC5ERUYgZmlsZS4gICovDQorDQorLyogVGhlc2Ug Y29ycmVzcG9uZCB0byB0aGUgZW50cmllcyBpbiBwZXBfZGVmX2ZpbGUtPmV4 cG9ydHNbXS4gIEkgdXNlDQorICAgZXhwb3J0ZWRfc3ltYm9sX3NlY3Rpb25z W2ldIHRvIHRhZyB3aGV0aGVyIG9yIG5vdCB0aGUgc3ltYm9sIHdhcw0KKyAg IGRlZmluZWQsIHNpbmNlIHdlIGNhbid0IGV4cG9ydCBzeW1ib2xzIHdlIGRv bid0IGhhdmUuICAqLw0KKw0KK3N0YXRpYyBiZmRfdm1hICpleHBvcnRlZF9z eW1ib2xfb2Zmc2V0czsNCitzdGF0aWMgc3RydWN0IGJmZF9zZWN0aW9uICoq ZXhwb3J0ZWRfc3ltYm9sX3NlY3Rpb25zOw0KK3N0YXRpYyBpbnQgZXhwb3J0 X3RhYmxlX3NpemU7DQorc3RhdGljIGludCBjb3VudF9leHBvcnRlZDsNCitz dGF0aWMgaW50IGNvdW50X2V4cG9ydGVkX2J5bmFtZTsNCitzdGF0aWMgaW50 IGNvdW50X3dpdGhfb3JkaW5hbHM7DQorc3RhdGljIGNvbnN0IGNoYXIgKmRs bF9uYW1lOw0KK3N0YXRpYyBpbnQgbWluX29yZGluYWwsIG1heF9vcmRpbmFs Ow0KK3N0YXRpYyBpbnQgKmV4cG9ydGVkX3N5bWJvbHM7DQorDQordHlwZWRl ZiBzdHJ1Y3QgZXhjbHVkZV9saXN0X3N0cnVjdA0KKyAgew0KKyAgICBjaGFy ICpzdHJpbmc7DQorICAgIHN0cnVjdCBleGNsdWRlX2xpc3Rfc3RydWN0ICpu ZXh0Ow0KKyAgICBpbnQgdHlwZTsNCisgIH0NCitleGNsdWRlX2xpc3Rfc3Ry dWN0Ow0KKw0KK3N0YXRpYyBzdHJ1Y3QgZXhjbHVkZV9saXN0X3N0cnVjdCAq ZXhjbHVkZXMgPSAwOw0KKw0KK3ZvaWQNCitwZXBfZGxsX2FkZF9leGNsdWRl cyAoY29uc3QgY2hhciAqbmV3X2V4Y2x1ZGVzLCBjb25zdCBpbnQgdHlwZSkN Cit7DQorICBjaGFyICpsb2NhbF9jb3B5Ow0KKyAgY2hhciAqZXhjbHVkZV9z dHJpbmc7DQorDQorICBsb2NhbF9jb3B5ID0geHN0cmR1cCAobmV3X2V4Y2x1 ZGVzKTsNCisNCisgIGV4Y2x1ZGVfc3RyaW5nID0gc3RydG9rIChsb2NhbF9j b3B5LCAiLDoiKTsNCisgIGZvciAoOyBleGNsdWRlX3N0cmluZzsgZXhjbHVk ZV9zdHJpbmcgPSBzdHJ0b2sgKE5VTEwsICIsOiIpKQ0KKyAgICB7DQorICAg ICAgc3RydWN0IGV4Y2x1ZGVfbGlzdF9zdHJ1Y3QgKm5ld19leGNsdWRlOw0K Kw0KKyAgICAgIG5ld19leGNsdWRlID0geG1hbGxvYyAoc2l6ZW9mIChzdHJ1 Y3QgZXhjbHVkZV9saXN0X3N0cnVjdCkpOw0KKyAgICAgIG5ld19leGNsdWRl LT5zdHJpbmcgPSB4bWFsbG9jIChzdHJsZW4gKGV4Y2x1ZGVfc3RyaW5nKSAr IDEpOw0KKyAgICAgIHN0cmNweSAobmV3X2V4Y2x1ZGUtPnN0cmluZywgZXhj bHVkZV9zdHJpbmcpOw0KKyAgICAgIG5ld19leGNsdWRlLT50eXBlID0gdHlw ZTsNCisgICAgICBuZXdfZXhjbHVkZS0+bmV4dCA9IGV4Y2x1ZGVzOw0KKyAg ICAgIGV4Y2x1ZGVzID0gbmV3X2V4Y2x1ZGU7DQorICAgIH0NCisNCisgIGZy ZWUgKGxvY2FsX2NvcHkpOw0KK30NCisNCisNCisvKiBhYmZkIGlzIGEgYmZk IGNvbnRhaW5pbmcgbiAob3IgTlVMTCkNCisgICBJdCBjYW4gYmUgdXNlZCBm b3IgY29udGV4dHVhbCBjaGVja3MuICAqLw0KKw0KK3N0YXRpYyBpbnQNCith dXRvX2V4cG9ydCAoYmZkICphYmZkLCBkZWZfZmlsZSAqZCwgY29uc3QgY2hh ciAqbikNCit7DQorICBpbnQgaTsNCisgIHN0cnVjdCBleGNsdWRlX2xpc3Rf c3RydWN0ICpleDsNCisgIGF1dG9maWx0ZXJfZW50cnlfdHlwZSAqYWZwdHI7 DQorICBjb25zdCBjaGFyICogbGlibmFtZSA9IDA7DQorICBpZiAoYWJmZCAm JiBhYmZkLT5teV9hcmNoaXZlKQ0KKyAgICBsaWJuYW1lID0gbGJhc2VuYW1l IChhYmZkLT5teV9hcmNoaXZlLT5maWxlbmFtZSk7DQorDQorICAvKiBXZSBz aG91bGQgbm90IHJlLWV4cG9ydCBpbXBvcnRlZCBzdHVmZi4gICovDQorICBp ZiAoc3RybmNtcCAobiwgIl9pbXBfIiwgNSkgPT0gMCkNCisgICAgcmV0dXJu IDA7DQorDQorICBmb3IgKGkgPSAwOyBpIDwgZC0+bnVtX2V4cG9ydHM7IGkr KykNCisgICAgaWYgKHN0cmNtcCAoZC0+ZXhwb3J0c1tpXS5uYW1lLCBuKSA9 PSAwKQ0KKyAgICAgIHJldHVybiAwOw0KKw0KKyAgaWYgKHBlcF9kbGxfZG9f ZGVmYXVsdF9leGNsdWRlcykNCisgICAgew0KKyAgICAgIGNvbnN0IGNoYXIg KiBwOw0KKyAgICAgIGludCAgICBsZW47DQorDQorICAgICAgaWYgKHBlcF9k bGxfZXh0cmFfcGVfZGVidWcpDQorCXByaW50ZiAoImNvbnNpZGVyaW5nIGV4 cG9ydGluZzogJXMsIGFiZmQ9JXAsIGFiZmQtPm15X2FyYz0lcFxuIiwNCisJ CW4sIGFiZmQsIGFiZmQtPm15X2FyY2hpdmUpOw0KKw0KKyAgICAgIC8qIEZp cnN0IG9mIGFsbCwgbWFrZSBjb250ZXh0IGNoZWNrczoNCisJIERvbid0IGV4 cG9ydCBhbnl0aGluZyBmcm9tIHN0YW5kYXJkIGxpYnMuICAqLw0KKyAgICAg IGlmIChsaWJuYW1lKQ0KKwl7DQorCSAgYWZwdHIgPSBhdXRvZmlsdGVyX2xp Ymxpc3Q7DQorDQorCSAgd2hpbGUgKGFmcHRyLT5uYW1lKQ0KKwkgICAgew0K KwkgICAgICBpZiAoc3RybmNtcCAobGlibmFtZSwgYWZwdHItPm5hbWUsIGFm cHRyLT5sZW4pID09IDAgKQ0KKwkJcmV0dXJuIDA7DQorCSAgICAgIGFmcHRy Kys7DQorCSAgICB9DQorCX0NCisNCisgICAgICAvKiBOZXh0LCBleGNsdWRl IHN5bWJvbHMgZnJvbSBjZXJ0YWluIHN0YXJ0dXAgb2JqZWN0cy4gICovDQor DQorICAgICAgaWYgKGFiZmQgJiYgKHAgPSBsYmFzZW5hbWUgKGFiZmQtPmZp bGVuYW1lKSkpDQorCXsNCisJICBhZnB0ciA9IGF1dG9maWx0ZXJfb2JqbGlz dDsNCisJICB3aGlsZSAoYWZwdHItPm5hbWUpDQorCSAgICB7DQorCSAgICAg IGlmIChzdHJjbXAgKHAsIGFmcHRyLT5uYW1lKSA9PSAwKQ0KKwkJcmV0dXJu IDA7DQorCSAgICAgIGFmcHRyKys7DQorCSAgICB9DQorCX0NCisNCisgICAg ICAvKiBEb24ndCB0cnkgdG8gYmxpbmRseSBleGNsdWRlIGFsbCBzeW1ib2xz DQorCSB0aGF0IGJlZ2luIHdpdGggJ19fJzsgdGhpcyB3YXMgdHJpZWQgYW5k DQorCSBpdCBpcyB0b28gcmVzdHJpY3RpdmUuICAqLw0KKw0KKyAgICAgIC8q IFRoZW4sIGV4Y2x1ZGUgc3BlY2lmaWMgc3ltYm9scy4gICovDQorICAgICAg YWZwdHIgPSBhdXRvZmlsdGVyX3N5bWJvbGxpc3Q7DQorICAgICAgd2hpbGUg KGFmcHRyLT5uYW1lKQ0KKwl7DQorCSAgaWYgKHN0cmNtcCAobiwgYWZwdHIt Pm5hbWUpID09IDApDQorCSAgICByZXR1cm4gMDsNCisNCisJICBhZnB0cisr Ow0KKwl9DQorDQorICAgICAgLyogTmV4dCwgZXhjbHVkZSBzeW1ib2xzIHN0 YXJ0aW5nIHdpdGggLi4uICAqLw0KKyAgICAgIGFmcHRyID0gYXV0b2ZpbHRl cl9zeW1ib2xwcmVmaXhsaXN0Ow0KKyAgICAgIHdoaWxlIChhZnB0ci0+bmFt ZSkNCisJew0KKwkgIGlmIChzdHJuY21wIChuLCBhZnB0ci0+bmFtZSwgYWZw dHItPmxlbikgPT0gMCkNCisJICAgIHJldHVybiAwOw0KKw0KKwkgIGFmcHRy Kys7DQorCX0NCisNCisgICAgICAvKiBGaW5hbGx5LCBleGNsdWRlIHN5bWJv bHMgZW5kaW5nIHdpdGggLi4uICAqLw0KKyAgICAgIGxlbiA9IHN0cmxlbiAo bik7DQorICAgICAgYWZwdHIgPSBhdXRvZmlsdGVyX3N5bWJvbHN1ZmZpeGxp c3Q7DQorICAgICAgd2hpbGUgKGFmcHRyLT5uYW1lKQ0KKwl7DQorCSAgaWYg KChsZW4gPj0gYWZwdHItPmxlbikNCisJICAgICAgLyogQWRkIDEgdG8gaW5z dXJlIG1hdGNoIHdpdGggdHJhaWxpbmcgJ1wwJy4gICovDQorCSAgICAgICYm IHN0cm5jbXAgKG4gKyBsZW4gLSBhZnB0ci0+bGVuLCBhZnB0ci0+bmFtZSwN CisJCQkgIGFmcHRyLT5sZW4gKyAxKSA9PSAwKQ0KKwkgICAgcmV0dXJuIDA7 DQorDQorCSAgYWZwdHIrKzsNCisJfQ0KKyAgICB9DQorDQorICBmb3IgKGV4 ID0gZXhjbHVkZXM7IGV4OyBleCA9IGV4LT5uZXh0KQ0KKyAgICB7DQorICAg ICAgaWYgKGV4LT50eXBlID09IDEpIC8qIGV4Y2x1ZGUtbGlicyAqLw0KKwl7 DQorCSAgaWYgKGxpYm5hbWUNCisJICAgICAgJiYgKChzdHJjbXAgKGxpYm5h bWUsIGV4LT5zdHJpbmcpID09IDApDQorCQkgICB8fCAoc3RyY2FzZWNtcCAo IkFMTCIsIGV4LT5zdHJpbmcpID09IDApKSkNCisJICAgIHJldHVybiAwOw0K Kwl9DQorICAgICAgZWxzZSBpZiAoc3RyY21wIChuLCBleC0+c3RyaW5nKSA9 PSAwKQ0KKwlyZXR1cm4gMDsNCisgICAgfQ0KKw0KKyAgcmV0dXJuIDE7DQor fQ0KKw0KK3N0YXRpYyB2b2lkDQorcHJvY2Vzc19kZWZfZmlsZSAoYmZkICph YmZkIEFUVFJJQlVURV9VTlVTRUQsIHN0cnVjdCBiZmRfbGlua19pbmZvICpp bmZvKQ0KK3sNCisgIGludCBpLCBqOw0KKyAgc3RydWN0IGJmZF9saW5rX2hh c2hfZW50cnkgKmJsaGU7DQorICBiZmQgKmI7DQorICBzdHJ1Y3QgYmZkX3Nl Y3Rpb24gKnM7DQorICBkZWZfZmlsZV9leHBvcnQgKmUgPSAwOw0KKw0KKyAg aWYgKCFwZXBfZGVmX2ZpbGUpDQorICAgIHBlcF9kZWZfZmlsZSA9IGRlZl9m aWxlX2VtcHR5ICgpOw0KKw0KKyAgLyogRmlyc3QsIHJ1biBhcm91bmQgdG8g YWxsIHRoZSBvYmplY3RzIGxvb2tpbmcgZm9yIHRoZSAuZHJlY3R2ZQ0KKyAg ICAgc2VjdGlvbnMsIGFuZCBwdXNoIHRob3NlIGludG8gdGhlIGRlZiBmaWxl IHRvby4gICovDQorICBmb3IgKGIgPSBpbmZvLT5pbnB1dF9iZmRzOyBiOyBi ID0gYi0+bGlua19uZXh0KQ0KKyAgICB7DQorICAgICAgcyA9IGJmZF9nZXRf c2VjdGlvbl9ieV9uYW1lIChiLCAiLmRyZWN0dmUiKTsNCisgICAgICBpZiAo cykNCisJew0KKwkgIGxvbmcgc2l6ZSA9IHMtPnNpemU7DQorCSAgY2hhciAq YnVmID0geG1hbGxvYyAoc2l6ZSk7DQorDQorCSAgYmZkX2dldF9zZWN0aW9u X2NvbnRlbnRzIChiLCBzLCBidWYsIDAsIHNpemUpOw0KKwkgIGRlZl9maWxl X2FkZF9kaXJlY3RpdmUgKHBlcF9kZWZfZmlsZSwgYnVmLCBzaXplKTsNCisJ ICBmcmVlIChidWYpOw0KKwl9DQorICAgIH0NCisNCisgIC8qIElmIHdlIGFy ZSBub3QgYnVpbGRpbmcgYSBETEwsIHdoZW4gdGhlcmUgYXJlIG5vIGV4cG9y dHMNCisgICAgIHdlIGRvIG5vdCBidWlsZCBhbiBleHBvcnQgdGFibGUgYXQg YWxsLiAgKi8NCisgIGlmICghcGVwX2RsbF9leHBvcnRfZXZlcnl0aGluZyAm JiBwZXBfZGVmX2ZpbGUtPm51bV9leHBvcnRzID09IDANCisgICAgICAmJiBp bmZvLT5leGVjdXRhYmxlKQ0KKyAgICByZXR1cm47DQorDQorICAvKiBOb3cs IG1heWJlIGV4cG9ydCBldmVyeXRoaW5nIGVsc2UgdGhlIGRlZmF1bHQgd2F5 LiAgKi8NCisgIGlmIChwZXBfZGxsX2V4cG9ydF9ldmVyeXRoaW5nIHx8IHBl cF9kZWZfZmlsZS0+bnVtX2V4cG9ydHMgPT0gMCkNCisgICAgew0KKyAgICAg IGZvciAoYiA9IGluZm8tPmlucHV0X2JmZHM7IGI7IGIgPSBiLT5saW5rX25l eHQpDQorCXsNCisJICBhc3ltYm9sICoqc3ltYm9sczsNCisJICBpbnQgbnN5 bXMsIHN5bXNpemU7DQorDQorCSAgc3ltc2l6ZSA9IGJmZF9nZXRfc3ltdGFi X3VwcGVyX2JvdW5kIChiKTsNCisJICBzeW1ib2xzID0geG1hbGxvYyAoc3lt c2l6ZSk7DQorCSAgbnN5bXMgPSBiZmRfY2Fub25pY2FsaXplX3N5bXRhYiAo Yiwgc3ltYm9scyk7DQorDQorCSAgZm9yIChqID0gMDsgaiA8IG5zeW1zOyBq KyspDQorCSAgICB7DQorCSAgICAgIC8qIFdlIHNob3VsZCBleHBvcnQgc3lt Ym9scyB3aGljaCBhcmUgZWl0aGVyIGdsb2JhbCBvciBub3QNCisJCSBhbnl0 aGluZyBhdCBhbGwuICAoLmJzcyBkYXRhIGlzIHRoZSBsYXR0ZXIpDQorCQkg V2Ugc2hvdWxkIG5vdCBleHBvcnQgdW5kZWZpbmVkIHN5bWJvbHMuICAqLw0K KwkgICAgICBpZiAoc3ltYm9sc1tqXS0+c2VjdGlvbiAhPSAmYmZkX3VuZF9z ZWN0aW9uDQorCQkgICYmICgoc3ltYm9sc1tqXS0+ZmxhZ3MgJiBCU0ZfR0xP QkFMKQ0KKwkJICAgICAgfHwgKHN5bWJvbHNbal0tPmZsYWdzID09IEJGRF9G T1JUX0NPTU1fREVGQVVMVF9WQUxVRSkpKQ0KKwkJew0KKwkJICBjb25zdCBj aGFyICpzbiA9IHN5bWJvbHNbal0tPm5hbWU7DQorDQorCQkgIC8qIFdlIHNo b3VsZCBub3QgcmUtZXhwb3J0IGltcG9ydGVkIHN0dWZmLiAgKi8NCisJCSAg ew0KKwkJICAgIGNoYXIgKm5hbWUgPSB4bWFsbG9jIChzdHJsZW4gKHNuKSAr IDIgKyA2KTsNCisJCSAgICBzcHJpbnRmIChuYW1lLCAiJXMlcyIsIFUoIl9p bXBfIiksIHNuKTsNCisJCQlwcmludGYoIioqKiBFeHBvcnQgU3ltOiVzXG4i LG5hbWUpOw0KKwkJICAgIGJsaGUgPSBiZmRfbGlua19oYXNoX2xvb2t1cCAo aW5mby0+aGFzaCwgbmFtZSwNCisJCQkJCQkgRkFMU0UsIEZBTFNFLCBGQUxT RSk7DQorCQkgICAgZnJlZSAobmFtZSk7DQorDQorCQkgICAgaWYgKGJsaGUg JiYgYmxoZS0+dHlwZSA9PSBiZmRfbGlua19oYXNoX2RlZmluZWQpDQorCQkg ICAgICBjb250aW51ZTsNCisJCSAgfQ0KKw0KKwkJICBpZiAoKnNuID09ICdf JykNCisJCSAgICBzbisrOw0KKw0KKwkJICBpZiAoYXV0b19leHBvcnQgKGIs IHBlcF9kZWZfZmlsZSwgc24pKQ0KKwkJICAgIHsNCisJCSAgICAgIGRlZl9m aWxlX2V4cG9ydCAqcDsNCisJCSAgICAgIHA9ZGVmX2ZpbGVfYWRkX2V4cG9y dCAocGVwX2RlZl9maWxlLCBzbiwgMCwgLTEpOw0KKwkJICAgICAgLyogRmls bCBkYXRhIGZsYWcgcHJvcGVybHksIGZyb20gZGxsdG9vbC5jLiAgKi8NCisJ CSAgICAgIHAtPmZsYWdfZGF0YSA9ICEoc3ltYm9sc1tqXS0+ZmxhZ3MgJiBC U0ZfRlVOQ1RJT04pOw0KKwkJICAgIH0NCisJCX0NCisJICAgIH0NCisJfQ0K KyAgICB9DQorDQorI3VuZGVmIE5FDQorI2RlZmluZSBORSBwZXBfZGVmX2Zp bGUtPm51bV9leHBvcnRzDQorDQorICAvKiBDYW5vbmljYWxpemUgdGhlIGV4 cG9ydCBsaXN0LiAgKi8NCisgIGlmIChwZXBfZGxsX2tpbGxfYXRzKQ0KKyAg ICB7DQorICAgICAgZm9yIChpID0gMDsgaSA8IE5FOyBpKyspDQorCXsNCisJ ICBpZiAoc3RyY2hyIChwZXBfZGVmX2ZpbGUtPmV4cG9ydHNbaV0ubmFtZSwg J0AnKSkNCisJICAgIHsNCisJICAgICAgLyogVGhpcyB3aWxsIHByZXNlcnZl IGludGVybmFsX25hbWUsIHdoaWNoIG1heSBoYXZlIGJlZW4NCisJCSBwb2lu dGluZyB0byB0aGUgc2FtZSBtZW1vcnkgYXMgbmFtZSwgb3IgbWlnaHQgbm90 DQorCQkgaGF2ZS4gICovDQorCSAgICAgIGludCBsZWFkX2F0ID0gKCpwZXBf ZGVmX2ZpbGUtPmV4cG9ydHNbaV0ubmFtZSA9PSAnQCcpOw0KKwkgICAgICBj aGFyICp0bXAgPSB4c3RyZHVwIChwZXBfZGVmX2ZpbGUtPmV4cG9ydHNbaV0u bmFtZSArIGxlYWRfYXQpOw0KKwkgICAgICBjaGFyICp0bXBfYXQgPSBzdHJj aHIgKHRtcCwgJ0AnKTsNCisNCisJICAgICAgaWYgKHRtcF9hdCkNCisJICAg ICAgICAqdG1wX2F0ID0gMDsNCisJICAgICAgZWxzZQ0KKwkgICAgICAgIGVp bmZvIChfKCIlWENhbm5vdCBleHBvcnQgJXM6IGludmFsaWQgZXhwb3J0IG5h bWVcbiIpLA0KKwkJICAgICAgIHBlcF9kZWZfZmlsZS0+ZXhwb3J0c1tpXS5u YW1lKTsNCisJICAgICAgcGVwX2RlZl9maWxlLT5leHBvcnRzW2ldLm5hbWUg PSB0bXA7DQorCSAgICB9DQorCX0NCisgICAgfQ0KKw0KKyAgaWYgKHBlcF9k bGxfc3RkY2FsbF9hbGlhc2VzKQ0KKyAgICB7DQorICAgICAgZm9yIChpID0g MDsgaSA8IE5FOyBpKyspDQorCXsNCisJICBpZiAoc3RyY2hyIChwZXBfZGVm X2ZpbGUtPmV4cG9ydHNbaV0ubmFtZSwgJ0AnKSkNCisJICAgIHsNCisJICAg ICAgaW50IGxlYWRfYXQgPSAoKnBlcF9kZWZfZmlsZS0+ZXhwb3J0c1tpXS5u YW1lID09ICdAJyk7DQorCSAgICAgIGNoYXIgKnRtcCA9IHhzdHJkdXAgKHBl cF9kZWZfZmlsZS0+ZXhwb3J0c1tpXS5uYW1lICsgbGVhZF9hdCk7DQorDQor CSAgICAgICooc3RyY2hyICh0bXAsICdAJykpID0gMDsNCisJICAgICAgaWYg KGF1dG9fZXhwb3J0IChOVUxMLCBwZXBfZGVmX2ZpbGUsIHRtcCkpDQorCQlk ZWZfZmlsZV9hZGRfZXhwb3J0IChwZXBfZGVmX2ZpbGUsIHRtcCwNCisJCQkJ ICAgICBwZXBfZGVmX2ZpbGUtPmV4cG9ydHNbaV0uaW50ZXJuYWxfbmFtZSwN CisJCQkJICAgICAtMSk7DQorCSAgICAgIGVsc2UNCisJCWZyZWUgKHRtcCk7 DQorCSAgICB9DQorCX0NCisgICAgfQ0KKw0KKyAgLyogQ29udmVuaWVuY2Us IGJ1dCB3YXRjaCBvdXQgZm9yIGl0IGNoYW5naW5nLiAgKi8NCisgIGUgPSBw ZXBfZGVmX2ZpbGUtPmV4cG9ydHM7DQorDQorICBleHBvcnRlZF9zeW1ib2xf b2Zmc2V0cyA9IHhtYWxsb2MgKE5FICogc2l6ZW9mIChiZmRfdm1hKSk7DQor ICBleHBvcnRlZF9zeW1ib2xfc2VjdGlvbnMgPSB4bWFsbG9jIChORSAqIHNp emVvZiAoc3RydWN0IGJmZF9zZWN0aW9uICopKTsNCisNCisgIG1lbXNldCAo ZXhwb3J0ZWRfc3ltYm9sX3NlY3Rpb25zLCAwLCBORSAqIHNpemVvZiAoc3Ry dWN0IGJmZF9zZWN0aW9uICopKTsNCisgIG1heF9vcmRpbmFsID0gMDsNCisg IG1pbl9vcmRpbmFsID0gNjU1MzY7DQorICBjb3VudF9leHBvcnRlZCA9IDA7 DQorICBjb3VudF9leHBvcnRlZF9ieW5hbWUgPSAwOw0KKyAgY291bnRfd2l0 aF9vcmRpbmFscyA9IDA7DQorDQorICBxc29ydCAocGVwX2RlZl9maWxlLT5l eHBvcnRzLCBORSwgc2l6ZW9mIChwZXBfZGVmX2ZpbGUtPmV4cG9ydHNbMF0p LA0KKwkgcGVwX2V4cG9ydF9zb3J0KTsNCisgIGZvciAoaSA9IDAsIGogPSAw OyBpIDwgTkU7IGkrKykNCisgICAgew0KKyAgICAgIGlmIChpID4gMCAmJiBz dHJjbXAgKGVbaV0ubmFtZSwgZVtpIC0gMV0ubmFtZSkgPT0gMCkNCisJew0K KwkgIC8qIFRoaXMgaXMgYSBkdXBsaWNhdGUuICAqLw0KKwkgIGlmIChlW2og LSAxXS5vcmRpbmFsICE9IC0xDQorCSAgICAgICYmIGVbaV0ub3JkaW5hbCAh PSAtMQ0KKwkgICAgICAmJiBlW2ogLSAxXS5vcmRpbmFsICE9IGVbaV0ub3Jk aW5hbCkNCisJICAgIHsNCisJICAgICAgaWYgKHBlcF9kbGxfd2Fybl9kdXBf ZXhwb3J0cykNCisJCS8qIHhnZXR0ZXh0OmMtZm9ybWF0ICovDQorCQllaW5m byAoXygiJVhFcnJvciwgZHVwbGljYXRlIEVYUE9SVCB3aXRoIG9yZGluYWxz OiAlcyAoJWQgdnMgJWQpXG4iKSwNCisJCSAgICAgICBlW2ogLSAxXS5uYW1l LCBlW2ogLSAxXS5vcmRpbmFsLCBlW2ldLm9yZGluYWwpOw0KKwkgICAgfQ0K KwkgIGVsc2UNCisJICAgIHsNCisJICAgICAgaWYgKHBlcF9kbGxfd2Fybl9k dXBfZXhwb3J0cykNCisJCS8qIHhnZXR0ZXh0OmMtZm9ybWF0ICovDQorCQll aW5mbyAoXygiV2FybmluZywgZHVwbGljYXRlIEVYUE9SVDogJXNcbiIpLA0K KwkJICAgICAgIGVbaiAtIDFdLm5hbWUpOw0KKwkgICAgfQ0KKw0KKwkgIGlm IChlW2ldLm9yZGluYWwgIT0gLTEpDQorCSAgICBlW2ogLSAxXS5vcmRpbmFs ID0gZVtpXS5vcmRpbmFsOw0KKwkgIGVbaiAtIDFdLmZsYWdfcHJpdmF0ZSB8 PSBlW2ldLmZsYWdfcHJpdmF0ZTsNCisJICBlW2ogLSAxXS5mbGFnX2NvbnN0 YW50IHw9IGVbaV0uZmxhZ19jb25zdGFudDsNCisJICBlW2ogLSAxXS5mbGFn X25vbmFtZSB8PSBlW2ldLmZsYWdfbm9uYW1lOw0KKwkgIGVbaiAtIDFdLmZs YWdfZGF0YSB8PSBlW2ldLmZsYWdfZGF0YTsNCisJfQ0KKyAgICAgIGVsc2UN CisJew0KKwkgIGlmIChpICE9IGopDQorCSAgICBlW2pdID0gZVtpXTsNCisJ ICBqKys7DQorCX0NCisgICAgfQ0KKyAgcGVwX2RlZl9maWxlLT5udW1fZXhw b3J0cyA9IGo7CS8qID09IE5FICovDQorDQorICBmb3IgKGkgPSAwOyBpIDwg TkU7IGkrKykNCisgICAgew0KKyAgICAgIGNoYXIgKm5hbWU7DQorDQorICAg ICAgLyogQ2hlY2sgZm9yIGZvcndhcmQgZXhwb3J0cyAqLw0KKyAgICAgIGlm IChzdHJjaHIgKHBlcF9kZWZfZmlsZS0+ZXhwb3J0c1tpXS5pbnRlcm5hbF9u YW1lLCAnLicpKQ0KKwl7DQorCSAgY291bnRfZXhwb3J0ZWQrKzsNCisJICBp ZiAoIXBlcF9kZWZfZmlsZS0+ZXhwb3J0c1tpXS5mbGFnX25vbmFtZSkNCisJ ICAgIGNvdW50X2V4cG9ydGVkX2J5bmFtZSsrOw0KKw0KKwkgIHBlcF9kZWZf ZmlsZS0+ZXhwb3J0c1tpXS5mbGFnX2ZvcndhcmQgPSAxOw0KKw0KKwkgIGlm IChwZXBfZGVmX2ZpbGUtPmV4cG9ydHNbaV0ub3JkaW5hbCAhPSAtMSkNCisJ ICAgIHsNCisJICAgICAgaWYgKG1heF9vcmRpbmFsIDwgcGVwX2RlZl9maWxl LT5leHBvcnRzW2ldLm9yZGluYWwpDQorCQltYXhfb3JkaW5hbCA9IHBlcF9k ZWZfZmlsZS0+ZXhwb3J0c1tpXS5vcmRpbmFsOw0KKwkgICAgICBpZiAobWlu X29yZGluYWwgPiBwZXBfZGVmX2ZpbGUtPmV4cG9ydHNbaV0ub3JkaW5hbCkN CisJCW1pbl9vcmRpbmFsID0gcGVwX2RlZl9maWxlLT5leHBvcnRzW2ldLm9y ZGluYWw7DQorCSAgICAgIGNvdW50X3dpdGhfb3JkaW5hbHMrKzsNCisJICAg IH0NCisNCisJICBjb250aW51ZTsNCisJfQ0KKw0KKyAgICAgIG5hbWUgPSB4 bWFsbG9jIChzdHJsZW4gKHBlcF9kZWZfZmlsZS0+ZXhwb3J0c1tpXS5pbnRl cm5hbF9uYW1lKSArIDIpOw0KKyAgICAgIGlmIChwZXBfZGV0YWlscy0+dW5k ZXJzY29yZWQNCisgCSAgJiYgKCpwZXBfZGVmX2ZpbGUtPmV4cG9ydHNbaV0u aW50ZXJuYWxfbmFtZSAhPSAnQCcpKQ0KKwl7DQorCSAgKm5hbWUgPSAnXyc7 DQorCSAgc3RyY3B5IChuYW1lICsgMSwgcGVwX2RlZl9maWxlLT5leHBvcnRz W2ldLmludGVybmFsX25hbWUpOw0KKwl9DQorICAgICAgZWxzZQ0KKwlzdHJj cHkgKG5hbWUsIHBlcF9kZWZfZmlsZS0+ZXhwb3J0c1tpXS5pbnRlcm5hbF9u YW1lKTsNCisNCisgICAgICBibGhlID0gYmZkX2xpbmtfaGFzaF9sb29rdXAg KGluZm8tPmhhc2gsDQorCQkJCSAgIG5hbWUsDQorCQkJCSAgIEZBTFNFLCBG QUxTRSwgVFJVRSk7DQorDQorICAgICAgaWYgKGJsaGUNCisJICAmJiAoYmxo ZS0+dHlwZSA9PSBiZmRfbGlua19oYXNoX2RlZmluZWQNCisJICAgICAgfHwg KGJsaGUtPnR5cGUgPT0gYmZkX2xpbmtfaGFzaF9jb21tb24pKSkNCisJew0K KwkgIGNvdW50X2V4cG9ydGVkKys7DQorCSAgaWYgKCFwZXBfZGVmX2ZpbGUt PmV4cG9ydHNbaV0uZmxhZ19ub25hbWUpDQorCSAgICBjb3VudF9leHBvcnRl ZF9ieW5hbWUrKzsNCisNCisJICAvKiBPbmx5IGZpbGwgaW4gdGhlIHNlY3Rp b25zLiBUaGUgYWN0dWFsIG9mZnNldHMgYXJlIGNvbXB1dGVkDQorCSAgICAg aW4gZmlsbF9leHBvcnRlZF9vZmZzZXRzKCkgYWZ0ZXIgY29tbW9uIHN5bWJv bHMgYXJlIGxhaWQNCisJICAgICBvdXQuICAqLw0KKwkgIGlmIChibGhlLT50 eXBlID09IGJmZF9saW5rX2hhc2hfZGVmaW5lZCkNCisJICAgIGV4cG9ydGVk X3N5bWJvbF9zZWN0aW9uc1tpXSA9IGJsaGUtPnUuZGVmLnNlY3Rpb247DQor CSAgZWxzZQ0KKwkgICAgZXhwb3J0ZWRfc3ltYm9sX3NlY3Rpb25zW2ldID0g YmxoZS0+dS5jLnAtPnNlY3Rpb247DQorDQorCSAgaWYgKHBlcF9kZWZfZmls ZS0+ZXhwb3J0c1tpXS5vcmRpbmFsICE9IC0xKQ0KKwkgICAgew0KKwkgICAg ICBpZiAobWF4X29yZGluYWwgPCBwZXBfZGVmX2ZpbGUtPmV4cG9ydHNbaV0u b3JkaW5hbCkNCisJCW1heF9vcmRpbmFsID0gcGVwX2RlZl9maWxlLT5leHBv cnRzW2ldLm9yZGluYWw7DQorCSAgICAgIGlmIChtaW5fb3JkaW5hbCA+IHBl cF9kZWZfZmlsZS0+ZXhwb3J0c1tpXS5vcmRpbmFsKQ0KKwkJbWluX29yZGlu YWwgPSBwZXBfZGVmX2ZpbGUtPmV4cG9ydHNbaV0ub3JkaW5hbDsNCisJICAg ICAgY291bnRfd2l0aF9vcmRpbmFscysrOw0KKwkgICAgfQ0KKwl9DQorICAg ICAgZWxzZSBpZiAoYmxoZSAmJiBibGhlLT50eXBlID09IGJmZF9saW5rX2hh c2hfdW5kZWZpbmVkKQ0KKwl7DQorCSAgLyogeGdldHRleHQ6Yy1mb3JtYXQg Ki8NCisJICBlaW5mbyAoXygiJVhDYW5ub3QgZXhwb3J0ICVzOiBzeW1ib2wg bm90IGRlZmluZWRcbiIpLA0KKwkJIHBlcF9kZWZfZmlsZS0+ZXhwb3J0c1tp XS5pbnRlcm5hbF9uYW1lKTsNCisJfQ0KKyAgICAgIGVsc2UgaWYgKGJsaGUp DQorCXsNCisJICAvKiB4Z2V0dGV4dDpjLWZvcm1hdCAqLw0KKwkgIGVpbmZv IChfKCIlWENhbm5vdCBleHBvcnQgJXM6IHN5bWJvbCB3cm9uZyB0eXBlICgl ZCB2cyAlZClcbiIpLA0KKwkJIHBlcF9kZWZfZmlsZS0+ZXhwb3J0c1tpXS5p bnRlcm5hbF9uYW1lLA0KKwkJIGJsaGUtPnR5cGUsIGJmZF9saW5rX2hhc2hf ZGVmaW5lZCk7DQorCX0NCisgICAgICBlbHNlDQorCXsNCisJICAvKiB4Z2V0 dGV4dDpjLWZvcm1hdCAqLw0KKwkgIGVpbmZvIChfKCIlWENhbm5vdCBleHBv cnQgJXM6IHN5bWJvbCBub3QgZm91bmRcbiIpLA0KKwkJIHBlcF9kZWZfZmls ZS0+ZXhwb3J0c1tpXS5pbnRlcm5hbF9uYW1lKTsNCisJfQ0KKyAgICAgIGZy ZWUgKG5hbWUpOw0KKyAgICB9DQorfQ0KKw0KKy8qIEJ1aWxkIHRoZSBiZmQg dGhhdCB3aWxsIGNvbnRhaW4gLmVkYXRhIGFuZCAucmVsb2Mgc2VjdGlvbnMu ICAqLw0KKw0KK3N0YXRpYyB2b2lkDQorYnVpbGRfZmlsbGVyX2JmZCAoaW50 IGluY2x1ZGVfZWRhdGEpDQorew0KKyAgbGFuZ19pbnB1dF9zdGF0ZW1lbnRf dHlwZSAqZmlsbGVyX2ZpbGU7DQorICBmaWxsZXJfZmlsZSA9IGxhbmdfYWRk X2lucHV0X2ZpbGUgKCJkbGwgc3R1ZmYiLA0KKwkJCQkgICAgIGxhbmdfaW5w dXRfZmlsZV9pc19mYWtlX2VudW0sDQorCQkJCSAgICAgTlVMTCk7DQorICBm aWxsZXJfZmlsZS0+dGhlX2JmZCA9IGZpbGxlcl9iZmQgPSBiZmRfY3JlYXRl ICgiZGxsIHN0dWZmIiwgb3V0cHV0X2JmZCk7DQorICBpZiAoZmlsbGVyX2Jm ZCA9PSBOVUxMDQorICAgICAgfHwgIWJmZF9zZXRfYXJjaF9tYWNoIChmaWxs ZXJfYmZkLA0KKwkJCSAgICAgYmZkX2dldF9hcmNoIChvdXRwdXRfYmZkKSwN CisJCQkgICAgIGJmZF9nZXRfbWFjaCAob3V0cHV0X2JmZCkpKQ0KKyAgICB7 DQorICAgICAgZWluZm8gKCIlWCVQOiBjYW4gbm90IGNyZWF0ZSBCRkQ6ICVF XG4iKTsNCisgICAgICByZXR1cm47DQorICAgIH0NCisNCisgIGlmIChpbmNs dWRlX2VkYXRhKQ0KKyAgICB7DQorICAgICAgZWRhdGFfcyA9IGJmZF9tYWtl X3NlY3Rpb25fb2xkX3dheSAoZmlsbGVyX2JmZCwgIi5lZGF0YSIpOw0KKyAg ICAgIGlmIChlZGF0YV9zID09IE5VTEwNCisJICB8fCAhYmZkX3NldF9zZWN0 aW9uX2ZsYWdzIChmaWxsZXJfYmZkLCBlZGF0YV9zLA0KKwkJCQkgICAgIChT RUNfSEFTX0NPTlRFTlRTDQorCQkJCSAgICAgIHwgU0VDX0FMTE9DDQorCQkJ CSAgICAgIHwgU0VDX0xPQUQNCisJCQkJICAgICAgfCBTRUNfS0VFUA0KKwkJ CQkgICAgICB8IFNFQ19JTl9NRU1PUlkpKSkNCisJew0KKwkgIGVpbmZvICgi JVglUDogY2FuIG5vdCBjcmVhdGUgLmVkYXRhIHNlY3Rpb246ICVFXG4iKTsN CisJICByZXR1cm47DQorCX0NCisgICAgICBiZmRfc2V0X3NlY3Rpb25fc2l6 ZSAoZmlsbGVyX2JmZCwgZWRhdGFfcywgZWRhdGFfc3opOw0KKyAgICB9DQor DQorICByZWxvY19zID0gYmZkX21ha2Vfc2VjdGlvbl9vbGRfd2F5IChmaWxs ZXJfYmZkLCAiLnJlbG9jIik7DQorICBpZiAocmVsb2NfcyA9PSBOVUxMDQor ICAgICAgfHwgIWJmZF9zZXRfc2VjdGlvbl9mbGFncyAoZmlsbGVyX2JmZCwg cmVsb2NfcywNCisJCQkJIChTRUNfSEFTX0NPTlRFTlRTDQorCQkJCSAgfCBT RUNfQUxMT0MNCisJCQkJICB8IFNFQ19MT0FEDQorCQkJCSAgfCBTRUNfS0VF UA0KKwkJCQkgIHwgU0VDX0lOX01FTU9SWSkpKQ0KKyAgICB7DQorICAgICAg ZWluZm8gKCIlWCVQOiBjYW4gbm90IGNyZWF0ZSAucmVsb2Mgc2VjdGlvbjog JUVcbiIpOw0KKyAgICAgIHJldHVybjsNCisgICAgfQ0KKw0KKyAgYmZkX3Nl dF9zZWN0aW9uX3NpemUgKGZpbGxlcl9iZmQsIHJlbG9jX3MsIDApOw0KKw0K KyAgbGRsYW5nX2FkZF9maWxlIChmaWxsZXJfZmlsZSk7DQorfQ0KKw0KKy8q IEdhdGhlciBhbGwgdGhlIGV4cG9ydGVkIHN5bWJvbHMgYW5kIGJ1aWxkIHRo ZSAuZWRhdGEgc2VjdGlvbi4gICovDQorDQorc3RhdGljIHZvaWQNCitnZW5l cmF0ZV9lZGF0YSAoYmZkICphYmZkLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAq aW5mbyBBVFRSSUJVVEVfVU5VU0VEKQ0KK3sNCisgIGludCBpLCBuZXh0X29y ZGluYWw7DQorICBpbnQgbmFtZV90YWJsZV9zaXplID0gMDsNCisgIGNvbnN0 IGNoYXIgKmRsbnA7DQorDQorICAvKiBGaXJzdCwgd2UgbmVlZCB0byBrbm93 IGhvdyBtYW55IGV4cG9ydGVkIHN5bWJvbHMgdGhlcmUgYXJlLA0KKyAgICAg YW5kIHdoYXQgdGhlIHJhbmdlIG9mIG9yZGluYWxzIGlzLiAgKi8NCisgIGlm IChwZXBfZGVmX2ZpbGUtPm5hbWUpDQorICAgIGRsbF9uYW1lID0gcGVwX2Rl Zl9maWxlLT5uYW1lOw0KKyAgZWxzZQ0KKyAgICB7DQorICAgICAgZGxsX25h bWUgPSBhYmZkLT5maWxlbmFtZTsNCisNCisgICAgICBmb3IgKGRsbnAgPSBk bGxfbmFtZTsgKmRsbnA7IGRsbnArKykNCisJaWYgKCpkbG5wID09ICdcXCcg fHwgKmRsbnAgPT0gJy8nIHx8ICpkbG5wID09ICc6JykNCisJICBkbGxfbmFt ZSA9IGRsbnAgKyAxOw0KKyAgICB9DQorDQorICBpZiAoY291bnRfd2l0aF9v cmRpbmFscyAmJiBtYXhfb3JkaW5hbCA+IGNvdW50X2V4cG9ydGVkKQ0KKyAg ICB7DQorICAgICAgaWYgKG1pbl9vcmRpbmFsID4gbWF4X29yZGluYWwgLSBj b3VudF9leHBvcnRlZCArIDEpDQorCW1pbl9vcmRpbmFsID0gbWF4X29yZGlu YWwgLSBjb3VudF9leHBvcnRlZCArIDE7DQorICAgIH0NCisgIGVsc2UNCisg ICAgew0KKyAgICAgIG1pbl9vcmRpbmFsID0gMTsNCisgICAgICBtYXhfb3Jk aW5hbCA9IGNvdW50X2V4cG9ydGVkOw0KKyAgICB9DQorDQorICBleHBvcnRf dGFibGVfc2l6ZSA9IG1heF9vcmRpbmFsIC0gbWluX29yZGluYWwgKyAxOw0K KyAgZXhwb3J0ZWRfc3ltYm9scyA9IHhtYWxsb2MgKGV4cG9ydF90YWJsZV9z aXplICogc2l6ZW9mIChpbnQpKTsNCisgIGZvciAoaSA9IDA7IGkgPCBleHBv cnRfdGFibGVfc2l6ZTsgaSsrKQ0KKyAgICBleHBvcnRlZF9zeW1ib2xzW2ld ID0gLTE7DQorDQorICAvKiBOb3cgd2UgbmVlZCB0byBhc3NpZ24gb3JkaW5h bHMgdG8gdGhvc2UgdGhhdCBkb24ndCBoYXZlIHRoZW0uICAqLw0KKyAgZm9y IChpID0gMDsgaSA8IE5FOyBpKyspDQorICAgIHsNCisgICAgICBpZiAoZXhw b3J0ZWRfc3ltYm9sX3NlY3Rpb25zW2ldIHx8DQorICAgICAgICAgIHBlcF9k ZWZfZmlsZS0+ZXhwb3J0c1tpXS5mbGFnX2ZvcndhcmQpDQorCXsNCisJICBp ZiAocGVwX2RlZl9maWxlLT5leHBvcnRzW2ldLm9yZGluYWwgIT0gLTEpDQor CSAgICB7DQorCSAgICAgIGludCBlaSA9IHBlcF9kZWZfZmlsZS0+ZXhwb3J0 c1tpXS5vcmRpbmFsIC0gbWluX29yZGluYWw7DQorCSAgICAgIGludCBwaSA9 IGV4cG9ydGVkX3N5bWJvbHNbZWldOw0KKw0KKwkgICAgICBpZiAocGkgIT0g LTEpDQorCQl7DQorCQkgIC8qIHhnZXR0ZXh0OmMtZm9ybWF0ICovDQorCQkg IGVpbmZvIChfKCIlWEVycm9yLCBvcmRpbmFsIHVzZWQgdHdpY2U6ICVkICgl cyB2cyAlcylcbiIpLA0KKwkJCSBwZXBfZGVmX2ZpbGUtPmV4cG9ydHNbaV0u b3JkaW5hbCwNCisJCQkgcGVwX2RlZl9maWxlLT5leHBvcnRzW2ldLm5hbWUs DQorCQkJIHBlcF9kZWZfZmlsZS0+ZXhwb3J0c1twaV0ubmFtZSk7DQorCQl9 DQorCSAgICAgIGV4cG9ydGVkX3N5bWJvbHNbZWldID0gaTsNCisJICAgIH0N CisJICBuYW1lX3RhYmxlX3NpemUgKz0gc3RybGVuIChwZXBfZGVmX2ZpbGUt PmV4cG9ydHNbaV0ubmFtZSkgKyAxOw0KKwl9DQorDQorICAgICAgLyogUmVz ZXJ2ZSBzcGFjZSBmb3IgdGhlIGZvcndhcmQgbmFtZS4gKi8NCisgICAgICBp ZiAocGVwX2RlZl9maWxlLT5leHBvcnRzW2ldLmZsYWdfZm9yd2FyZCkNCisJ ew0KKwkgIG5hbWVfdGFibGVfc2l6ZSArPSBzdHJsZW4gKHBlcF9kZWZfZmls ZS0+ZXhwb3J0c1tpXS5pbnRlcm5hbF9uYW1lKSArIDE7DQorCX0NCisgICAg fQ0KKw0KKyAgbmV4dF9vcmRpbmFsID0gbWluX29yZGluYWw7DQorICBmb3Ig KGkgPSAwOyBpIDwgTkU7IGkrKykNCisgICAgaWYgKChleHBvcnRlZF9zeW1i b2xfc2VjdGlvbnNbaV0gfHwNCisgICAgICAgICBwZXBfZGVmX2ZpbGUtPmV4 cG9ydHNbaV0uZmxhZ19mb3J3YXJkKSAmJg0KKyAgICAgICAgcGVwX2RlZl9m aWxlLT5leHBvcnRzW2ldLm9yZGluYWwgPT0gLTEpDQorICAgICAgew0KKwl3 aGlsZSAoZXhwb3J0ZWRfc3ltYm9sc1tuZXh0X29yZGluYWwgLSBtaW5fb3Jk aW5hbF0gIT0gLTEpDQorCSAgbmV4dF9vcmRpbmFsKys7DQorDQorCWV4cG9y dGVkX3N5bWJvbHNbbmV4dF9vcmRpbmFsIC0gbWluX29yZGluYWxdID0gaTsN CisJcGVwX2RlZl9maWxlLT5leHBvcnRzW2ldLm9yZGluYWwgPSBuZXh0X29y ZGluYWw7DQorICAgICAgfQ0KKw0KKyAgLyogT0ssIG5vdyB3ZSBjYW4gYWxs b2NhdGUgc29tZSBtZW1vcnkuICAqLw0KKyAgZWRhdGFfc3ogPSAoNDAJCQkJ LyogZGlyZWN0b3J5ICovDQorCSAgICAgICsgNCAqIGV4cG9ydF90YWJsZV9z aXplCQkvKiBhZGRyZXNzZXMgKi8NCisJICAgICAgKyA0ICogY291bnRfZXhw b3J0ZWRfYnluYW1lCS8qIG5hbWUgcHRycyAqLw0KKwkgICAgICArIDIgKiBj b3VudF9leHBvcnRlZF9ieW5hbWUJLyogb3JkaW5hbHMgKi8NCisJICAgICAg KyBuYW1lX3RhYmxlX3NpemUgKyBzdHJsZW4gKGRsbF9uYW1lKSArIDEpOw0K K30NCisNCisvKiBGaWxsIHRoZSBleHBvcnRlZCBzeW1ib2wgb2Zmc2V0cy4g VGhlIHByZWxpbWluYXJ5IHdvcmsgaGFzIGFscmVhZHkNCisgICBiZWVuIGRv bmUgaW4gcHJvY2Vzc19kZWZfZmlsZSgpLiAgKi8NCisNCitzdGF0aWMgdm9p ZA0KK2ZpbGxfZXhwb3J0ZWRfb2Zmc2V0cyAoYmZkICphYmZkIEFUVFJJQlVU RV9VTlVTRUQsIHN0cnVjdCBiZmRfbGlua19pbmZvICppbmZvKQ0KK3sNCisg IGludCBpOw0KKyAgc3RydWN0IGJmZF9saW5rX2hhc2hfZW50cnkgKmJsaGU7 DQorDQorICBmb3IgKGkgPSAwOyBpIDwgcGVwX2RlZl9maWxlLT5udW1fZXhw b3J0czsgaSsrKQ0KKyAgICB7DQorICAgICAgY2hhciAqbmFtZTsNCisNCisg ICAgICBuYW1lID0geG1hbGxvYyAoc3RybGVuIChwZXBfZGVmX2ZpbGUtPmV4 cG9ydHNbaV0uaW50ZXJuYWxfbmFtZSkgKyAyKTsNCisgICAgICBpZiAocGVw X2RldGFpbHMtPnVuZGVyc2NvcmVkDQorIAkgICYmICpwZXBfZGVmX2ZpbGUt PmV4cG9ydHNbaV0uaW50ZXJuYWxfbmFtZSAhPSAnQCcpDQorCXsNCisJICAq bmFtZSA9ICdfJzsNCisJICBzdHJjcHkgKG5hbWUgKyAxLCBwZXBfZGVmX2Zp bGUtPmV4cG9ydHNbaV0uaW50ZXJuYWxfbmFtZSk7DQorCX0NCisgICAgICBl bHNlDQorCXN0cmNweSAobmFtZSwgcGVwX2RlZl9maWxlLT5leHBvcnRzW2ld LmludGVybmFsX25hbWUpOw0KKw0KKyAgICAgIGJsaGUgPSBiZmRfbGlua19o YXNoX2xvb2t1cCAoaW5mby0+aGFzaCwNCisJCQkJICAgbmFtZSwNCisJCQkJ ICAgRkFMU0UsIEZBTFNFLCBUUlVFKTsNCisNCisgICAgICBpZiAoYmxoZSAm JiBibGhlLT50eXBlID09IGJmZF9saW5rX2hhc2hfZGVmaW5lZCkNCisJZXhw b3J0ZWRfc3ltYm9sX29mZnNldHNbaV0gPSBibGhlLT51LmRlZi52YWx1ZTsN CisNCisgICAgICBmcmVlIChuYW1lKTsNCisgICAgfQ0KK30NCisNCitzdGF0 aWMgdm9pZA0KK2ZpbGxfZWRhdGEgKGJmZCAqYWJmZCwgc3RydWN0IGJmZF9s aW5rX2luZm8gKmluZm8gQVRUUklCVVRFX1VOVVNFRCkNCit7DQorICBpbnQg cywgaGludDsNCisgIHVuc2lnbmVkIGNoYXIgKmVkaXJlY3Rvcnk7DQorICB1 bnNpZ25lZCBjaGFyICplYWRkcmVzc2VzOw0KKyAgdW5zaWduZWQgY2hhciAq ZW5hbWVwdHJzOw0KKyAgdW5zaWduZWQgY2hhciAqZW9yZGluYWxzOw0KKyAg Y2hhciAqZW5hbWVzdHI7DQorICB0aW1lX3Qgbm93Ow0KKw0KKyAgdGltZSAo Jm5vdyk7DQorDQorICBlZGF0YV9kID0geG1hbGxvYyAoZWRhdGFfc3opOw0K Kw0KKyAgLyogTm90ZSB1c2Ugb2YgYXJyYXkgcG9pbnRlciBtYXRoIGhlcmUu ICAqLw0KKyAgZWRpcmVjdG9yeSA9IGVkYXRhX2Q7DQorICBlYWRkcmVzc2Vz ID0gZWRhdGFfZCArIDQwOw0KKyAgZW5hbWVwdHJzID0gZWFkZHJlc3NlcyAr IDQgKiBleHBvcnRfdGFibGVfc2l6ZTsNCisgIGVvcmRpbmFscyA9IGVuYW1l cHRycyArIDQgKiBjb3VudF9leHBvcnRlZF9ieW5hbWU7DQorICBlbmFtZXN0 ciA9IChjaGFyICopIGVvcmRpbmFscyArIDIgKiBjb3VudF9leHBvcnRlZF9i eW5hbWU7DQorDQorI2RlZmluZSBFUlZBKHB0cikgKCgodW5zaWduZWQgY2hh ciAqKShwdHIpIC0gZWRhdGFfZCkgXA0KKwkJICAgKyBlZGF0YV9zLT5vdXRw dXRfc2VjdGlvbi0+dm1hIC0gaW1hZ2VfYmFzZSkNCisNCisgIG1lbXNldCAo ZWRhdGFfZCwgMCwgZWRhdGFfc3opOw0KKyAgYmZkX3B1dF8zMiAoYWJmZCwg bm93LCBlZGF0YV9kICsgNCk7DQorICBpZiAocGVwX2RlZl9maWxlLT52ZXJz aW9uX21ham9yICE9IC0xKQ0KKyAgICB7DQorICAgICAgYmZkX3B1dF8xNiAo YWJmZCwgcGVwX2RlZl9maWxlLT52ZXJzaW9uX21ham9yLCBlZGF0YV9kICsg OCk7DQorICAgICAgYmZkX3B1dF8xNiAoYWJmZCwgcGVwX2RlZl9maWxlLT52 ZXJzaW9uX21pbm9yLCBlZGF0YV9kICsgMTApOw0KKyAgICB9DQorDQorICBi ZmRfcHV0XzMyIChhYmZkLCBFUlZBIChlbmFtZXN0ciksIGVkYXRhX2QgKyAx Mik7DQorICBzdHJjcHkgKGVuYW1lc3RyLCBkbGxfbmFtZSk7DQorICBlbmFt ZXN0ciArPSBzdHJsZW4gKGVuYW1lc3RyKSArIDE7DQorICBiZmRfcHV0XzMy IChhYmZkLCBtaW5fb3JkaW5hbCwgZWRhdGFfZCArIDE2KTsNCisgIGJmZF9w dXRfMzIgKGFiZmQsIGV4cG9ydF90YWJsZV9zaXplLCBlZGF0YV9kICsgMjAp Ow0KKyAgYmZkX3B1dF8zMiAoYWJmZCwgY291bnRfZXhwb3J0ZWRfYnluYW1l LCBlZGF0YV9kICsgMjQpOw0KKyAgYmZkX3B1dF8zMiAoYWJmZCwgRVJWQSAo ZWFkZHJlc3NlcyksIGVkYXRhX2QgKyAyOCk7DQorICBiZmRfcHV0XzMyIChh YmZkLCBFUlZBIChlbmFtZXB0cnMpLCBlZGF0YV9kICsgMzIpOw0KKyAgYmZk X3B1dF8zMiAoYWJmZCwgRVJWQSAoZW9yZGluYWxzKSwgZWRhdGFfZCArIDM2 KTsNCisNCisgIGZpbGxfZXhwb3J0ZWRfb2Zmc2V0cyAoYWJmZCwgaW5mbyk7 DQorDQorICAvKiBPaywgbm93IGZvciB0aGUgZmlsbGluZyBpbiBwYXJ0Lg0K KyAgICAgU2NhbiBhbHBoYWJldGljYWxseSAtIGllIHRoZSBvcmRlcmluZyBp biB0aGUgZXhwb3J0c1tdIHRhYmxlLA0KKyAgICAgcmF0aGVyIHRoYW4gYnkg b3JkaW5hbCAtIHRoZSBvcmRlcmluZyBpbiB0aGUgZXhwb3J0ZWRfc3ltYm9s W10NCisgICAgIHRhYmxlLiAgU2VlIGRsbHRvb2wuYyBhbmQ6DQorICAgICAg ICBodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL21sL2JpbnV0aWxzLzIwMDMt MDQvbXNnMDAzNzkuaHRtbA0KKyAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24u ICAqLw0KKyAgaGludCA9IDA7DQorICBmb3IgKHMgPSAwOyBzIDwgTkU7IHMr KykNCisgICAgew0KKyAgICAgIHN0cnVjdCBiZmRfc2VjdGlvbiAqc3NlYyA9 IGV4cG9ydGVkX3N5bWJvbF9zZWN0aW9uc1tzXTsNCisgICAgICBpZiAocGVw X2RlZl9maWxlLT5leHBvcnRzW3NdLm9yZGluYWwgIT0gLTEgJiYNCisgICAg ICAgICAgKHBlcF9kZWZfZmlsZS0+ZXhwb3J0c1tzXS5mbGFnX2ZvcndhcmQg fHwgc3NlYyAhPSBOVUxMKSkNCisJew0KKwkgIGludCBvcmQgPSBwZXBfZGVm X2ZpbGUtPmV4cG9ydHNbc10ub3JkaW5hbDsNCisNCisJICBpZiAocGVwX2Rl Zl9maWxlLT5leHBvcnRzW3NdLmZsYWdfZm9yd2FyZCkNCisJICAgIHsNCisJ ICAgICAgYmZkX3B1dF8zMiAoYWJmZCwgRVJWQSAoZW5hbWVzdHIpLA0KKwkJ ICAgICAgICAgIGVhZGRyZXNzZXMgKyA0ICogKG9yZCAtIG1pbl9vcmRpbmFs KSk7DQorDQorCSAgICAgIHN0cmNweSAoZW5hbWVzdHIsIHBlcF9kZWZfZmls ZS0+ZXhwb3J0c1tzXS5pbnRlcm5hbF9uYW1lKTsNCisJICAgICAgZW5hbWVz dHIgKz0gc3RybGVuIChwZXBfZGVmX2ZpbGUtPmV4cG9ydHNbc10uaW50ZXJu YWxfbmFtZSkgKyAxOw0KKwkgICAgfQ0KKwkgIGVsc2UNCisJICAgIHsNCisJ ICAgICAgdW5zaWduZWQgbG9uZyBzcnZhID0gKGV4cG9ydGVkX3N5bWJvbF9v ZmZzZXRzW3NdDQorCQkJCSAgICArIHNzZWMtPm91dHB1dF9zZWN0aW9uLT52 bWENCisJCQkJICAgICsgc3NlYy0+b3V0cHV0X29mZnNldCk7DQorDQorCSAg ICAgIGJmZF9wdXRfMzIgKGFiZmQsIHNydmEgLSBpbWFnZV9iYXNlLA0KKwkJ ICAgICAgICAgIGVhZGRyZXNzZXMgKyA0ICogKG9yZCAtIG1pbl9vcmRpbmFs KSk7DQorCSAgICB9DQorDQorCSAgaWYgKCFwZXBfZGVmX2ZpbGUtPmV4cG9y dHNbc10uZmxhZ19ub25hbWUpDQorCSAgICB7DQorCSAgICAgIGNoYXIgKmVu YW1lID0gcGVwX2RlZl9maWxlLT5leHBvcnRzW3NdLm5hbWU7DQorDQorCSAg ICAgIGJmZF9wdXRfMzIgKGFiZmQsIEVSVkEgKGVuYW1lc3RyKSwgZW5hbWVw dHJzKTsNCisJICAgICAgZW5hbWVwdHJzICs9IDQ7DQorCSAgICAgIHN0cmNw eSAoZW5hbWVzdHIsIGVuYW1lKTsNCisJICAgICAgZW5hbWVzdHIgKz0gc3Ry bGVuIChlbmFtZXN0cikgKyAxOw0KKwkgICAgICBiZmRfcHV0XzE2IChhYmZk LCBvcmQgLSBtaW5fb3JkaW5hbCwgZW9yZGluYWxzKTsNCisJICAgICAgZW9y ZGluYWxzICs9IDI7DQorCSAgICAgIHBlcF9kZWZfZmlsZS0+ZXhwb3J0c1tz XS5oaW50ID0gaGludCsrOw0KKwkgICAgfQ0KKwl9DQorICAgIH0NCit9DQor DQorDQorc3RhdGljIHN0cnVjdCBiZmRfc2VjdGlvbiAqY3VycmVudF9zZWM7 DQorDQordm9pZA0KK3BlcF93YWxrX3JlbG9jc19vZl9zeW1ib2wgKHN0cnVj dCBiZmRfbGlua19pbmZvICppbmZvLA0KKwkJCSAgY29uc3QgY2hhciAqbmFt ZSwNCisJCQkgIGludCAoKmNiKSAoYXJlbGVudCAqLCBhc2VjdGlvbiAqKSkN Cit7DQorICBiZmQgKmI7DQorICBhc2VjdGlvbiAqczsNCisNCisgIGZvciAo YiA9IGluZm8tPmlucHV0X2JmZHM7IGI7IGIgPSBiLT5saW5rX25leHQpDQor ICAgIHsNCisgICAgICBhc3ltYm9sICoqc3ltYm9sczsNCisgICAgICBpbnQg bnN5bXMsIHN5bXNpemU7DQorDQorICAgICAgc3ltc2l6ZSA9IGJmZF9nZXRf c3ltdGFiX3VwcGVyX2JvdW5kIChiKTsNCisgICAgICBzeW1ib2xzID0geG1h bGxvYyAoc3ltc2l6ZSk7DQorICAgICAgbnN5bXMgICA9IGJmZF9jYW5vbmlj YWxpemVfc3ltdGFiIChiLCBzeW1ib2xzKTsNCisNCisgICAgICBmb3IgKHMg PSBiLT5zZWN0aW9uczsgczsgcyA9IHMtPm5leHQpDQorCXsNCisJICBhcmVs ZW50ICoqcmVsb2NzOw0KKwkgIGludCByZWxzaXplLCBucmVsb2NzLCBpOw0K KwkgIGludCBmbGFncyA9IGJmZF9nZXRfc2VjdGlvbl9mbGFncyAoYiwgcyk7 DQorDQorCSAgLyogU2tpcCBkaXNjYXJkZWQgbGlua29uY2Ugc2VjdGlvbnMu ICAqLw0KKwkgIGlmIChmbGFncyAmIFNFQ19MSU5LX09OQ0UNCisJICAgICAg JiYgcy0+b3V0cHV0X3NlY3Rpb24gPT0gYmZkX2Fic19zZWN0aW9uX3B0cikN CisJICAgIGNvbnRpbnVlOw0KKw0KKwkgIGN1cnJlbnRfc2VjID0gczsNCisN CisJICByZWxzaXplID0gYmZkX2dldF9yZWxvY191cHBlcl9ib3VuZCAoYiwg cyk7DQorCSAgcmVsb2NzID0geG1hbGxvYyAocmVsc2l6ZSk7DQorCSAgbnJl bG9jcyA9IGJmZF9jYW5vbmljYWxpemVfcmVsb2MgKGIsIHMsIHJlbG9jcywg c3ltYm9scyk7DQorDQorCSAgZm9yIChpID0gMDsgaSA8IG5yZWxvY3M7IGkr KykNCisJICAgIHsNCisJICAgICAgc3RydWN0IGJmZF9zeW1ib2wgKnN5bSA9 ICpyZWxvY3NbaV0tPnN5bV9wdHJfcHRyOw0KKw0KKwkgICAgICBpZiAoIXN0 cmNtcCAobmFtZSwgc3ltLT5uYW1lKSkNCisJCWNiIChyZWxvY3NbaV0sIHMp Ow0KKwkgICAgfQ0KKw0KKwkgIGZyZWUgKHJlbG9jcyk7DQorDQorCSAgLyog V2FybmluZzogdGhlIGFsbG9jYXRlZCBzeW1ib2xzIGFyZSByZW1lbWJlcmVk IGluIEJGRCBhbmQgcmV1c2VkDQorCSAgICAgbGF0ZXIsIHNvIGRvbid0IGZy ZWUgdGhlbSEgKi8NCisJICAvKiBmcmVlIChzeW1ib2xzKTsgKi8NCisJfQ0K KyAgICB9DQorfQ0KKw0KKy8qIEdhdGhlciBhbGwgdGhlIHJlbG9jYXRpb25z IGFuZCBidWlsZCB0aGUgLnJlbG9jIHNlY3Rpb24uICAqLw0KKw0KK3N0YXRp YyB2b2lkDQorZ2VuZXJhdGVfcmVsb2MgKGJmZCAqYWJmZCwgc3RydWN0IGJm ZF9saW5rX2luZm8gKmluZm8pDQorew0KKw0KKyAgLyogRm9yIC5yZWxvYyBz dHVmZi4gICovDQorICByZWxvY19kYXRhX3R5cGUgKnJlbG9jX2RhdGE7DQor ICBpbnQgdG90YWxfcmVsb2NzID0gMDsNCisgIGludCBpOw0KKyAgdW5zaWdu ZWQgbG9uZyBzZWNfcGFnZSA9ICh1bnNpZ25lZCBsb25nKSAtMTsNCisgIHVu c2lnbmVkIGxvbmcgcGFnZV9wdHIsIHBhZ2VfY291bnQ7DQorICBpbnQgYmk7 DQorICBiZmQgKmI7DQorICBzdHJ1Y3QgYmZkX3NlY3Rpb24gKnM7DQorDQor ICB0b3RhbF9yZWxvY3MgPSAwOw0KKyAgZm9yIChiID0gaW5mby0+aW5wdXRf YmZkczsgYjsgYiA9IGItPmxpbmtfbmV4dCkNCisgICAgZm9yIChzID0gYi0+ c2VjdGlvbnM7IHM7IHMgPSBzLT5uZXh0KQ0KKyAgICAgIHRvdGFsX3JlbG9j cyArPSBzLT5yZWxvY19jb3VudDsNCisNCisgIHJlbG9jX2RhdGEgPSB4bWFs bG9jICh0b3RhbF9yZWxvY3MgKiBzaXplb2YgKHJlbG9jX2RhdGFfdHlwZSkp Ow0KKw0KKyAgdG90YWxfcmVsb2NzID0gMDsNCisgIGJpID0gMDsNCisgIGZv ciAoYmkgPSAwLCBiID0gaW5mby0+aW5wdXRfYmZkczsgYjsgYmkrKywgYiA9 IGItPmxpbmtfbmV4dCkNCisgICAgew0KKyAgICAgIGFyZWxlbnQgKipyZWxv Y3M7DQorICAgICAgaW50IHJlbHNpemUsIG5yZWxvY3MsIGk7DQorDQorICAg ICAgZm9yIChzID0gYi0+c2VjdGlvbnM7IHM7IHMgPSBzLT5uZXh0KQ0KKwl7 DQorCSAgdW5zaWduZWQgbG9uZyBzZWNfdm1hID0gcy0+b3V0cHV0X3NlY3Rp b24tPnZtYSArIHMtPm91dHB1dF9vZmZzZXQ7DQorCSAgYXN5bWJvbCAqKnN5 bWJvbHM7DQorCSAgaW50IG5zeW1zLCBzeW1zaXplOw0KKw0KKwkgIC8qIElm IGl0J3Mgbm90IGxvYWRlZCwgd2UgZG9uJ3QgbmVlZCB0byByZWxvY2F0ZSBp dCB0aGlzIHdheS4gICovDQorCSAgaWYgKCEocy0+b3V0cHV0X3NlY3Rpb24t PmZsYWdzICYgU0VDX0xPQUQpKQ0KKwkgICAgY29udGludWU7DQorDQorCSAg LyogSSBkb24ndCBrbm93IHdoeSB0aGVyZSB3b3VsZCBiZSBhIHJlbG9jIGZv ciB0aGVzZSwgYnV0IEkndmUNCisJICAgICBzZWVuIGl0IGhhcHBlbiAtIERK ICAqLw0KKwkgIGlmIChzLT5vdXRwdXRfc2VjdGlvbiA9PSAmYmZkX2Fic19z ZWN0aW9uKQ0KKwkgICAgY29udGludWU7DQorDQorCSAgaWYgKHMtPm91dHB1 dF9zZWN0aW9uLT52bWEgPT0gMCkNCisJICAgIHsNCisJICAgICAgLyogSHVo PyAgU2hvdWxkbid0IGhhcHBlbiwgYnV0IHB1bnQgaWYgaXQgZG9lcy4gICov DQorCSAgICAgIGVpbmZvICgiREo6IHplcm8gdm1hIHNlY3Rpb24gcmVsb2Mg ZGV0ZWN0ZWQ6IGAlcycgIyVkIGY9JWRcbiIsDQorCQkgICAgIHMtPm91dHB1 dF9zZWN0aW9uLT5uYW1lLCBzLT5vdXRwdXRfc2VjdGlvbi0+aW5kZXgsDQor CQkgICAgIHMtPm91dHB1dF9zZWN0aW9uLT5mbGFncyk7DQorCSAgICAgIGNv bnRpbnVlOw0KKwkgICAgfQ0KKw0KKwkgIHN5bXNpemUgPSBiZmRfZ2V0X3N5 bXRhYl91cHBlcl9ib3VuZCAoYik7DQorCSAgc3ltYm9scyA9IHhtYWxsb2Mg KHN5bXNpemUpOw0KKwkgIG5zeW1zID0gYmZkX2Nhbm9uaWNhbGl6ZV9zeW10 YWIgKGIsIHN5bWJvbHMpOw0KKw0KKwkgIHJlbHNpemUgPSBiZmRfZ2V0X3Jl bG9jX3VwcGVyX2JvdW5kIChiLCBzKTsNCisJICByZWxvY3MgPSB4bWFsbG9j IChyZWxzaXplKTsNCisJICBucmVsb2NzID0gYmZkX2Nhbm9uaWNhbGl6ZV9y ZWxvYyAoYiwgcywgcmVsb2NzLCBzeW1ib2xzKTsNCisNCisJICBmb3IgKGkg PSAwOyBpIDwgbnJlbG9jczsgaSsrKQ0KKwkgICAgew0KKwkgICAgICBpZiAo cGVwX2RsbF9leHRyYV9wZV9kZWJ1ZykNCisJCXsNCisJCSAgc3RydWN0IGJm ZF9zeW1ib2wgKnN5bSA9ICpyZWxvY3NbaV0tPnN5bV9wdHJfcHRyOw0KKwkJ ICBwcmludGYgKCJyZWw6ICVzXG4iLCBzeW0tPm5hbWUpOw0KKwkJfQ0KKwkg ICAgICBpZiAoIXJlbG9jc1tpXS0+aG93dG8tPnBjX3JlbGF0aXZlDQorCQkg ICYmIHJlbG9jc1tpXS0+aG93dG8tPnR5cGUgIT0gcGVwX2RldGFpbHMtPmlt YWdlYmFzZV9yZWxvYykNCisJCXsNCisJCSAgYmZkX3ZtYSBzeW1fdm1hOw0K KwkJICBzdHJ1Y3QgYmZkX3N5bWJvbCAqc3ltID0gKnJlbG9jc1tpXS0+c3lt X3B0cl9wdHI7DQorDQorCQkgIHN5bV92bWEgPSAocmVsb2NzW2ldLT5hZGRl bmQNCisJCQkgICAgICsgc3ltLT52YWx1ZQ0KKwkJCSAgICAgKyBzeW0tPnNl Y3Rpb24tPnZtYQ0KKwkJCSAgICAgKyBzeW0tPnNlY3Rpb24tPm91dHB1dF9v ZmZzZXQNCisJCQkgICAgICsgc3ltLT5zZWN0aW9uLT5vdXRwdXRfc2VjdGlv bi0+dm1hKTsNCisJCSAgcmVsb2NfZGF0YVt0b3RhbF9yZWxvY3NdLnZtYSA9 IHNlY192bWEgKyByZWxvY3NbaV0tPmFkZHJlc3M7DQorDQorI2RlZmluZSBC SVRTX0FORF9TSElGVChiaXRzLCBzaGlmdCkgKGJpdHMgKiAxMDAwIHwgc2hp ZnQpDQorDQorCQkgIHN3aXRjaCBCSVRTX0FORF9TSElGVCAocmVsb2NzW2ld LT5ob3d0by0+Yml0c2l6ZSwNCisJCQkJCSByZWxvY3NbaV0tPmhvd3RvLT5y aWdodHNoaWZ0KQ0KKwkJICAgIHsNCisJCSAgICBjYXNlIEJJVFNfQU5EX1NI SUZUICgzMiwgMCk6DQorCQkgICAgICByZWxvY19kYXRhW3RvdGFsX3JlbG9j c10udHlwZSA9IDM7DQorCQkgICAgICB0b3RhbF9yZWxvY3MrKzsNCisJCSAg ICAgIGJyZWFrOw0KKwkJICAgIGNhc2UgQklUU19BTkRfU0hJRlQgKDE2LCAw KToNCisJCSAgICAgIHJlbG9jX2RhdGFbdG90YWxfcmVsb2NzXS50eXBlID0g MjsNCisJCSAgICAgIHRvdGFsX3JlbG9jcysrOw0KKwkJICAgICAgYnJlYWs7 DQorCQkgICAgY2FzZSBCSVRTX0FORF9TSElGVCAoMTYsIDE2KToNCisJCSAg ICAgIHJlbG9jX2RhdGFbdG90YWxfcmVsb2NzXS50eXBlID0gNDsNCisJCSAg ICAgIC8qIEZJWE1FOiB3ZSBjYW4ndCBrbm93IHRoZSBzeW1ib2wncyByaWdo dCB2YWx1ZQ0KKwkJCSB5ZXQsIGJ1dCB3ZSBwcm9iYWJseSBjYW4gc2FmZWx5 IGFzc3VtZSB0aGF0DQorCQkJIENFIHdpbGwgcmVsb2NhdGUgdXMgaW4gNjRr IGJsb2Nrcywgc28gbGVhdmluZw0KKwkJCSBpdCB6ZXJvIGlzIHNhZmUuICAq Lw0KKwkJICAgICAgcmVsb2NfZGF0YVt0b3RhbF9yZWxvY3NdLmV4dHJhID0g MDsNCisJCSAgICAgIHRvdGFsX3JlbG9jcysrOw0KKwkJICAgICAgYnJlYWs7 DQorCQkgICAgY2FzZSBCSVRTX0FORF9TSElGVCAoMjYsIDIpOg0KKwkJICAg ICAgcmVsb2NfZGF0YVt0b3RhbF9yZWxvY3NdLnR5cGUgPSA1Ow0KKwkJICAg ICAgdG90YWxfcmVsb2NzKys7DQorCQkgICAgICBicmVhazsNCisJCSAgICBj YXNlIEJJVFNfQU5EX1NISUZUICgyNCwgMik6DQorCQkgICAgICAvKiBGSVhN RTogMCBpcyBBUk1fMjZELCBpdCBpcyBkZWZpbmVkIGluIGJmZC9jb2ZmLWFy bS5jDQorCQkJIFRob3NlIEFSTV94eHggZGVmaW5pdGlvbnMgc2hvdWxkIGdv IGluIHByb3Blcg0KKwkJCSBoZWFkZXIgc29tZWRheS4gICovDQorCQkgICAg ICBpZiAocmVsb2NzW2ldLT5ob3d0by0+dHlwZSA9PSAwDQorCQkJICAvKiBP bGRlciBHTlUgbGlua2VycyB1c2VkIDUgaW5zdGVhZCBvZiAwIGZvciB0aGlz IHJlbG9jLiAgKi8NCisJCQkgIHx8IHJlbG9jc1tpXS0+aG93dG8tPnR5cGUg PT0gNSkNCisJCQkvKiBUaGlzIGlzIGFuIEFSTV8yNkQgcmVsb2MsIHdoaWNo IGlzIGFuIEFSTV8yNiByZWxvYw0KKwkJCSAgIHRoYXQgaGFzIGFscmVhZHkg YmVlbiBmdWxseSBwcm9jZXNzZWQgZHVyaW5nIGENCisJCQkgICBwcmV2aW91 cyBsaW5rIHN0YWdlLCBzbyBpZ25vcmUgaXQgaGVyZS4gICovDQorCQkJYnJl YWs7DQorCQkgICAgICAvKiBGYWxsIHRocm91Z2guICAqLw0KKwkJICAgIGRl ZmF1bHQ6DQorCQkgICAgICAvKiB4Z2V0dGV4dDpjLWZvcm1hdCAqLw0KKwkJ ICAgICAgZWluZm8gKF8oIiVYRXJyb3I6ICVkLWJpdCByZWxvYyBpbiBkbGxc biIpLA0KKwkJCSAgICAgcmVsb2NzW2ldLT5ob3d0by0+Yml0c2l6ZSk7DQor CQkgICAgICBicmVhazsNCisJCSAgICB9DQorCQl9DQorCSAgICB9DQorCSAg ZnJlZSAocmVsb2NzKTsNCisJICAvKiBXYXJuaW5nOiB0aGUgYWxsb2NhdGVk IHN5bWJvbHMgYXJlIHJlbWVtYmVyZWQgaW4gQkZEIGFuZA0KKwkgICAgIHJl dXNlZCBsYXRlciwgc28gZG9uJ3QgZnJlZSB0aGVtISAgKi8NCisJfQ0KKyAg ICB9DQorDQorICAvKiBBdCB0aGlzIHBvaW50LCB3ZSBoYXZlIHRvdGFsX3Jl bG9jcyByZWxvY2F0aW9uIGFkZHJlc3NlcyBpbg0KKyAgICAgcmVsb2NfYWRk cmVzc2VzLCB3aGljaCBhcmUgYWxsIHN1aXRhYmxlIGZvciB0aGUgLnJlbG9j IHNlY3Rpb24uDQorICAgICBXZSBtdXN0IG5vdyBjcmVhdGUgdGhlIG5ldyBz ZWN0aW9ucy4gICovDQorICBxc29ydCAocmVsb2NfZGF0YSwgdG90YWxfcmVs b2NzLCBzaXplb2YgKCpyZWxvY19kYXRhKSwgcmVsb2Nfc29ydCk7DQorDQor ICBmb3IgKGkgPSAwOyBpIDwgdG90YWxfcmVsb2NzOyBpKyspDQorICAgIHsN CisgICAgICB1bnNpZ25lZCBsb25nIHRoaXNfcGFnZSA9IChyZWxvY19kYXRh W2ldLnZtYSA+PiAxMik7DQorDQorICAgICAgaWYgKHRoaXNfcGFnZSAhPSBz ZWNfcGFnZSkNCisJew0KKwkgIHJlbG9jX3N6ID0gKHJlbG9jX3N6ICsgMykg JiB+MzsJLyogNC1ieXRlIGFsaWduLiAgKi8NCisJICByZWxvY19zeiArPSA4 Ow0KKwkgIHNlY19wYWdlID0gdGhpc19wYWdlOw0KKwl9DQorDQorICAgICAg cmVsb2Nfc3ogKz0gMjsNCisNCisgICAgICBpZiAocmVsb2NfZGF0YVtpXS50 eXBlID09IDQpDQorCXJlbG9jX3N6ICs9IDI7DQorICAgIH0NCisNCisgIHJl bG9jX3N6ID0gKHJlbG9jX3N6ICsgMykgJiB+MzsJLyogNC1ieXRlIGFsaWdu LiAgKi8NCisgIHJlbG9jX2QgPSB4bWFsbG9jIChyZWxvY19zeik7DQorICBz ZWNfcGFnZSA9ICh1bnNpZ25lZCBsb25nKSAtMTsNCisgIHJlbG9jX3N6ID0g MDsNCisgIHBhZ2VfcHRyID0gKHVuc2lnbmVkIGxvbmcpIC0xOw0KKyAgcGFn ZV9jb3VudCA9IDA7DQorDQorICBmb3IgKGkgPSAwOyBpIDwgdG90YWxfcmVs b2NzOyBpKyspDQorICAgIHsNCisgICAgICB1bnNpZ25lZCBsb25nIHJ2YSA9 IHJlbG9jX2RhdGFbaV0udm1hIC0gaW1hZ2VfYmFzZTsNCisgICAgICB1bnNp Z25lZCBsb25nIHRoaXNfcGFnZSA9IChydmEgJiB+MHhmZmYpOw0KKw0KKyAg ICAgIGlmICh0aGlzX3BhZ2UgIT0gc2VjX3BhZ2UpDQorCXsNCisJICB3aGls ZSAocmVsb2Nfc3ogJiAzKQ0KKwkgICAgcmVsb2NfZFtyZWxvY19zeisrXSA9 IDA7DQorDQorCSAgaWYgKHBhZ2VfcHRyICE9ICh1bnNpZ25lZCBsb25nKSAt MSkNCisJICAgIGJmZF9wdXRfMzIgKGFiZmQsIHJlbG9jX3N6IC0gcGFnZV9w dHIsIHJlbG9jX2QgKyBwYWdlX3B0ciArIDQpOw0KKw0KKwkgIGJmZF9wdXRf MzIgKGFiZmQsIHRoaXNfcGFnZSwgcmVsb2NfZCArIHJlbG9jX3N6KTsNCisJ ICBwYWdlX3B0ciA9IHJlbG9jX3N6Ow0KKwkgIHJlbG9jX3N6ICs9IDg7DQor CSAgc2VjX3BhZ2UgPSB0aGlzX3BhZ2U7DQorCSAgcGFnZV9jb3VudCA9IDA7 DQorCX0NCisNCisgICAgICBiZmRfcHV0XzE2IChhYmZkLCAocnZhICYgMHhm ZmYpICsgKHJlbG9jX2RhdGFbaV0udHlwZSA8PCAxMiksDQorCQkgIHJlbG9j X2QgKyByZWxvY19zeik7DQorICAgICAgcmVsb2Nfc3ogKz0gMjsNCisNCisg ICAgICBpZiAocmVsb2NfZGF0YVtpXS50eXBlID09IDQpDQorCXsNCisJICBi ZmRfcHV0XzE2IChhYmZkLCByZWxvY19kYXRhW2ldLmV4dHJhLCByZWxvY19k ICsgcmVsb2Nfc3opOw0KKwkgIHJlbG9jX3N6ICs9IDI7DQorCX0NCisNCisg ICAgICBwYWdlX2NvdW50Kys7DQorICAgIH0NCisNCisgIHdoaWxlIChyZWxv Y19zeiAmIDMpDQorICAgIHJlbG9jX2RbcmVsb2Nfc3orK10gPSAwOw0KKw0K KyAgaWYgKHBhZ2VfcHRyICE9ICh1bnNpZ25lZCBsb25nKSAtMSkNCisgICAg YmZkX3B1dF8zMiAoYWJmZCwgcmVsb2Nfc3ogLSBwYWdlX3B0ciwgcmVsb2Nf ZCArIHBhZ2VfcHRyICsgNCk7DQorDQorICB3aGlsZSAocmVsb2Nfc3ogPCBy ZWxvY19zLT5zaXplKQ0KKyAgICByZWxvY19kW3JlbG9jX3N6KytdID0gMDsN Cit9DQorDQorLyogR2l2ZW4gdGhlIGV4aXRpbmcgZGVmX2ZpbGUgc3RydWN0 dXJlLCBwcmludCBvdXQgYSAuREVGIGZpbGUgdGhhdA0KKyAgIGNvcnJlc3Bv bmRzIHRvIGl0LiAgKi8NCisNCitzdGF0aWMgdm9pZA0KK3F1b3RlcHV0IChj aGFyICpzLCBGSUxFICpmLCBpbnQgbmVlZHNfcXVvdGVzKQ0KK3sNCisgIGNo YXIgKmNwOw0KKw0KKyAgZm9yIChjcCA9IHM7ICpjcDsgY3ArKykNCisgICAg aWYgKCpjcCA9PSAnXCcnDQorCXx8ICpjcCA9PSAnIicNCisJfHwgKmNwID09 ICdcXCcNCisJfHwgSVNTUEFDRSAoKmNwKQ0KKwl8fCAqY3AgPT0gJywnDQor CXx8ICpjcCA9PSAnOycpDQorICAgICAgbmVlZHNfcXVvdGVzID0gMTsNCisN CisgIGlmIChuZWVkc19xdW90ZXMpDQorICAgIHsNCisgICAgICBwdXRjICgn IicsIGYpOw0KKw0KKyAgICAgIHdoaWxlICgqcykNCisJew0KKwkgIGlmICgq cyA9PSAnIicgfHwgKnMgPT0gJ1xcJykNCisJICAgIHB1dGMgKCdcXCcsIGYp Ow0KKw0KKwkgIHB1dGMgKCpzLCBmKTsNCisJICBzKys7DQorCX0NCisNCisg ICAgICBwdXRjICgnIicsIGYpOw0KKyAgICB9DQorICBlbHNlDQorICAgIGZw dXRzIChzLCBmKTsNCit9DQorDQordm9pZA0KK3BlcF9kbGxfZ2VuZXJhdGVf ZGVmX2ZpbGUgKGNvbnN0IGNoYXIgKnBlcF9vdXRfZGVmX2ZpbGVuYW1lKQ0K K3sNCisgIGludCBpOw0KKyAgRklMRSAqb3V0ID0gZm9wZW4gKHBlcF9vdXRf ZGVmX2ZpbGVuYW1lLCAidyIpOw0KKw0KKyAgaWYgKG91dCA9PSBOVUxMKQ0K KyAgICAvKiB4Z2V0dGV4dDpjLWZvcm1hdCAqLw0KKyAgICBlaW5mbyAoXygi JXM6IENhbid0IG9wZW4gb3V0cHV0IGRlZiBmaWxlICVzXG4iKSwNCisJICAg cHJvZ3JhbV9uYW1lLCBwZXBfb3V0X2RlZl9maWxlbmFtZSk7DQorDQorICBp ZiAocGVwX2RlZl9maWxlKQ0KKyAgICB7DQorICAgICAgaWYgKHBlcF9kZWZf ZmlsZS0+bmFtZSkNCisJew0KKwkgIGlmIChwZXBfZGVmX2ZpbGUtPmlzX2Rs bCkNCisJICAgIGZwcmludGYgKG91dCwgIkxJQlJBUlkgIik7DQorCSAgZWxz ZQ0KKwkgICAgZnByaW50ZiAob3V0LCAiTkFNRSAiKTsNCisNCisJICBxdW90 ZXB1dCAocGVwX2RlZl9maWxlLT5uYW1lLCBvdXQsIDEpOw0KKw0KKwkgIGlm IChwZV9kYXRhIChvdXRwdXRfYmZkKS0+cGVfb3B0aGRyLkltYWdlQmFzZSkN CisJICAgIGZwcmludGYgKG91dCwgIiBCQVNFPTB4JWx4IiwNCisJCSAgICAg KHVuc2lnbmVkIGxvbmcpIHBlX2RhdGEgKG91dHB1dF9iZmQpLT5wZV9vcHRo ZHIuSW1hZ2VCYXNlKTsNCisJICBmcHJpbnRmIChvdXQsICJcbiIpOw0KKwl9 DQorDQorICAgICAgaWYgKHBlcF9kZWZfZmlsZS0+ZGVzY3JpcHRpb24pDQor CXsNCisJICBmcHJpbnRmIChvdXQsICJERVNDUklQVElPTiAiKTsNCisJICBx dW90ZXB1dCAocGVwX2RlZl9maWxlLT5kZXNjcmlwdGlvbiwgb3V0LCAxKTsN CisJICBmcHJpbnRmIChvdXQsICJcbiIpOw0KKwl9DQorDQorICAgICAgaWYg KHBlcF9kZWZfZmlsZS0+dmVyc2lvbl9taW5vciAhPSAtMSkNCisJZnByaW50 ZiAob3V0LCAiVkVSU0lPTiAlZC4lZFxuIiwgcGVwX2RlZl9maWxlLT52ZXJz aW9uX21ham9yLA0KKwkJIHBlcF9kZWZfZmlsZS0+dmVyc2lvbl9taW5vcik7 DQorICAgICAgZWxzZSBpZiAocGVwX2RlZl9maWxlLT52ZXJzaW9uX21ham9y ICE9IC0xKQ0KKwlmcHJpbnRmIChvdXQsICJWRVJTSU9OICVkXG4iLCBwZXBf ZGVmX2ZpbGUtPnZlcnNpb25fbWFqb3IpOw0KKw0KKyAgICAgIGlmIChwZXBf ZGVmX2ZpbGUtPnN0YWNrX3Jlc2VydmUgIT0gLTEgfHwgcGVwX2RlZl9maWxl LT5oZWFwX3Jlc2VydmUgIT0gLTEpDQorCWZwcmludGYgKG91dCwgIlxuIik7 DQorDQorICAgICAgaWYgKHBlcF9kZWZfZmlsZS0+c3RhY2tfY29tbWl0ICE9 IC0xKQ0KKwlmcHJpbnRmIChvdXQsICJTVEFDS1NJWkUgMHgleCwweCV4XG4i LA0KKwkJIHBlcF9kZWZfZmlsZS0+c3RhY2tfcmVzZXJ2ZSwgcGVwX2RlZl9m aWxlLT5zdGFja19jb21taXQpOw0KKyAgICAgIGVsc2UgaWYgKHBlcF9kZWZf ZmlsZS0+c3RhY2tfcmVzZXJ2ZSAhPSAtMSkNCisJZnByaW50ZiAob3V0LCAi U1RBQ0tTSVpFIDB4JXhcbiIsIHBlcF9kZWZfZmlsZS0+c3RhY2tfcmVzZXJ2 ZSk7DQorDQorICAgICAgaWYgKHBlcF9kZWZfZmlsZS0+aGVhcF9jb21taXQg IT0gLTEpDQorCWZwcmludGYgKG91dCwgIkhFQVBTSVpFIDB4JXgsMHgleFxu IiwNCisJCSBwZXBfZGVmX2ZpbGUtPmhlYXBfcmVzZXJ2ZSwgcGVwX2RlZl9m aWxlLT5oZWFwX2NvbW1pdCk7DQorICAgICAgZWxzZSBpZiAocGVwX2RlZl9m aWxlLT5oZWFwX3Jlc2VydmUgIT0gLTEpDQorCWZwcmludGYgKG91dCwgIkhF QVBTSVpFIDB4JXhcbiIsIHBlcF9kZWZfZmlsZS0+aGVhcF9yZXNlcnZlKTsN CisNCisgICAgICBpZiAocGVwX2RlZl9maWxlLT5udW1fc2VjdGlvbl9kZWZz ID4gMCkNCisJew0KKwkgIGZwcmludGYgKG91dCwgIlxuU0VDVElPTlNcblxu Iik7DQorDQorCSAgZm9yIChpID0gMDsgaSA8IHBlcF9kZWZfZmlsZS0+bnVt X3NlY3Rpb25fZGVmczsgaSsrKQ0KKwkgICAgew0KKwkgICAgICBmcHJpbnRm IChvdXQsICIgICAgIik7DQorCSAgICAgIHF1b3RlcHV0IChwZXBfZGVmX2Zp bGUtPnNlY3Rpb25fZGVmc1tpXS5uYW1lLCBvdXQsIDApOw0KKw0KKwkgICAg ICBpZiAocGVwX2RlZl9maWxlLT5zZWN0aW9uX2RlZnNbaV0uY2xhc3MpDQor CQl7DQorCQkgIGZwcmludGYgKG91dCwgIiBDTEFTUyAiKTsNCisJCSAgcXVv dGVwdXQgKHBlcF9kZWZfZmlsZS0+c2VjdGlvbl9kZWZzW2ldLmNsYXNzLCBv dXQsIDApOw0KKwkJfQ0KKw0KKwkgICAgICBpZiAocGVwX2RlZl9maWxlLT5z ZWN0aW9uX2RlZnNbaV0uZmxhZ19yZWFkKQ0KKwkJZnByaW50ZiAob3V0LCAi IFJFQUQiKTsNCisNCisJICAgICAgaWYgKHBlcF9kZWZfZmlsZS0+c2VjdGlv bl9kZWZzW2ldLmZsYWdfd3JpdGUpDQorCQlmcHJpbnRmIChvdXQsICIgV1JJ VEUiKTsNCisNCisJICAgICAgaWYgKHBlcF9kZWZfZmlsZS0+c2VjdGlvbl9k ZWZzW2ldLmZsYWdfZXhlY3V0ZSkNCisJCWZwcmludGYgKG91dCwgIiBFWEVD VVRFIik7DQorDQorCSAgICAgIGlmIChwZXBfZGVmX2ZpbGUtPnNlY3Rpb25f ZGVmc1tpXS5mbGFnX3NoYXJlZCkNCisJCWZwcmludGYgKG91dCwgIiBTSEFS RUQiKTsNCisNCisJICAgICAgZnByaW50ZiAob3V0LCAiXG4iKTsNCisJICAg IH0NCisJfQ0KKw0KKyAgICAgIGlmIChwZXBfZGVmX2ZpbGUtPm51bV9leHBv cnRzID4gMCkNCisJew0KKwkgIGZwcmludGYgKG91dCwgIkVYUE9SVFNcbiIp Ow0KKw0KKwkgIGZvciAoaSA9IDA7IGkgPCBwZXBfZGVmX2ZpbGUtPm51bV9l eHBvcnRzOyBpKyspDQorCSAgICB7DQorCSAgICAgIGRlZl9maWxlX2V4cG9y dCAqZSA9IHBlcF9kZWZfZmlsZS0+ZXhwb3J0cyArIGk7DQorCSAgICAgIGZw cmludGYgKG91dCwgIiAgICAiKTsNCisJICAgICAgcXVvdGVwdXQgKGUtPm5h bWUsIG91dCwgMCk7DQorDQorCSAgICAgIGlmIChlLT5pbnRlcm5hbF9uYW1l ICYmIHN0cmNtcCAoZS0+aW50ZXJuYWxfbmFtZSwgZS0+bmFtZSkpDQorCQl7 DQorCQkgIGZwcmludGYgKG91dCwgIiA9ICIpOw0KKwkJICBxdW90ZXB1dCAo ZS0+aW50ZXJuYWxfbmFtZSwgb3V0LCAwKTsNCisJCX0NCisNCisJICAgICAg aWYgKGUtPm9yZGluYWwgIT0gLTEpDQorCQlmcHJpbnRmIChvdXQsICIgQCVk IiwgZS0+b3JkaW5hbCk7DQorDQorCSAgICAgIGlmIChlLT5mbGFnX3ByaXZh dGUpDQorCQlmcHJpbnRmIChvdXQsICIgUFJJVkFURSIpOw0KKw0KKwkgICAg ICBpZiAoZS0+ZmxhZ19jb25zdGFudCkNCisJCWZwcmludGYgKG91dCwgIiBD T05TVEFOVCIpOw0KKw0KKwkgICAgICBpZiAoZS0+ZmxhZ19ub25hbWUpDQor CQlmcHJpbnRmIChvdXQsICIgTk9OQU1FIik7DQorDQorCSAgICAgIGlmIChl LT5mbGFnX2RhdGEpDQorCQlmcHJpbnRmIChvdXQsICIgREFUQSIpOw0KKw0K KwkgICAgICBmcHJpbnRmIChvdXQsICJcbiIpOw0KKwkgICAgfQ0KKwl9DQor DQorICAgICAgaWYgKHBlcF9kZWZfZmlsZS0+bnVtX2ltcG9ydHMgPiAwKQ0K Kwl7DQorCSAgZnByaW50ZiAob3V0LCAiXG5JTVBPUlRTXG5cbiIpOw0KKw0K KwkgIGZvciAoaSA9IDA7IGkgPCBwZXBfZGVmX2ZpbGUtPm51bV9pbXBvcnRz OyBpKyspDQorCSAgICB7DQorCSAgICAgIGRlZl9maWxlX2ltcG9ydCAqaW0g PSBwZXBfZGVmX2ZpbGUtPmltcG9ydHMgKyBpOw0KKwkgICAgICBmcHJpbnRm IChvdXQsICIgICAgIik7DQorDQorCSAgICAgIGlmIChpbS0+aW50ZXJuYWxf bmFtZQ0KKwkJICAmJiAoIWltLT5uYW1lIHx8IHN0cmNtcCAoaW0tPmludGVy bmFsX25hbWUsIGltLT5uYW1lKSkpDQorCQl7DQorCQkgIHF1b3RlcHV0IChp bS0+aW50ZXJuYWxfbmFtZSwgb3V0LCAwKTsNCisJCSAgZnByaW50ZiAob3V0 LCAiID0gIik7DQorCQl9DQorDQorCSAgICAgIHF1b3RlcHV0IChpbS0+bW9k dWxlLT5uYW1lLCBvdXQsIDApOw0KKwkgICAgICBmcHJpbnRmIChvdXQsICIu Iik7DQorDQorCSAgICAgIGlmIChpbS0+bmFtZSkNCisJCXF1b3RlcHV0IChp bS0+bmFtZSwgb3V0LCAwKTsNCisJICAgICAgZWxzZQ0KKwkJZnByaW50ZiAo b3V0LCAiJWQiLCBpbS0+b3JkaW5hbCk7DQorDQorCSAgICAgIGZwcmludGYg KG91dCwgIlxuIik7DQorCSAgICB9DQorCX0NCisgICAgfQ0KKyAgZWxzZQ0K KyAgICBmcHJpbnRmIChvdXQsIF8oIjsgbm8gY29udGVudHMgYXZhaWxhYmxl XG4iKSk7DQorDQorICBpZiAoZmNsb3NlIChvdXQpID09IEVPRikNCisgICAg LyogeGdldHRleHQ6Yy1mb3JtYXQgKi8NCisgICAgZWluZm8gKF8oIiVQOiBF cnJvciBjbG9zaW5nIGZpbGUgYCVzJ1xuIiksIHBlcF9vdXRfZGVmX2ZpbGVu YW1lKTsNCit9DQorDQorLyogR2VuZXJhdGUgdGhlIGltcG9ydCBsaWJyYXJ5 LiAgKi8NCisNCitzdGF0aWMgYXN5bWJvbCAqKnN5bXRhYjsNCitzdGF0aWMg aW50IHN5bXB0cjsNCitzdGF0aWMgaW50IHRtcF9zZXE7DQorc3RhdGljIGNv bnN0IGNoYXIgKmRsbF9maWxlbmFtZTsNCitzdGF0aWMgY2hhciAqZGxsX3N5 bW5hbWU7DQorDQorI2RlZmluZSBVTkRTRUMgKGFzZWN0aW9uICopICZiZmRf dW5kX3NlY3Rpb24NCisNCitzdGF0aWMgYXNlY3Rpb24gKg0KK3F1aWNrX3Nl Y3Rpb24gKGJmZCAqYWJmZCwgY29uc3QgY2hhciAqbmFtZSwgaW50IGZsYWdz LCBpbnQgYWxpZ24pDQorew0KKyAgYXNlY3Rpb24gKnNlYzsNCisgIGFzeW1i b2wgKnN5bTsNCisNCisgIHNlYyA9IGJmZF9tYWtlX3NlY3Rpb25fb2xkX3dh eSAoYWJmZCwgbmFtZSk7DQorICBiZmRfc2V0X3NlY3Rpb25fZmxhZ3MgKGFi ZmQsIHNlYywgZmxhZ3MgfCBTRUNfQUxMT0MgfCBTRUNfTE9BRCB8IFNFQ19L RUVQKTsNCisgIGJmZF9zZXRfc2VjdGlvbl9hbGlnbm1lbnQgKGFiZmQsIHNl YywgYWxpZ24pOw0KKyAgLyogUmVtZW1iZXIgdG8gdW5kbyB0aGlzIGJlZm9y ZSB0cnlpbmcgdG8gbGluayBpbnRlcm5hbGx5ISAgKi8NCisgIHNlYy0+b3V0 cHV0X3NlY3Rpb24gPSBzZWM7DQorDQorICBzeW0gPSBiZmRfbWFrZV9lbXB0 eV9zeW1ib2wgKGFiZmQpOw0KKyAgc3ltdGFiW3N5bXB0cisrXSA9IHN5bTsN CisgIHN5bS0+bmFtZSA9IHNlYy0+bmFtZTsNCisgIHN5bS0+c2VjdGlvbiA9 IHNlYzsNCisgIHN5bS0+ZmxhZ3MgPSBCU0ZfTE9DQUw7DQorICBzeW0tPnZh bHVlID0gMDsNCisNCisgIHJldHVybiBzZWM7DQorfQ0KKw0KK3N0YXRpYyB2 b2lkDQorcXVpY2tfc3ltYm9sIChiZmQgKmFiZmQsDQorCSAgICAgIGNvbnN0 IGNoYXIgKm4xLA0KKwkgICAgICBjb25zdCBjaGFyICpuMiwNCisJICAgICAg Y29uc3QgY2hhciAqbjMsDQorCSAgICAgIGFzZWN0aW9uICpzZWMsDQorCSAg ICAgIGludCBmbGFncywNCisJICAgICAgaW50IGFkZHIpDQorew0KKyAgYXN5 bWJvbCAqc3ltOw0KKyAgY2hhciAqbmFtZSA9IHhtYWxsb2MgKHN0cmxlbiAo bjEpICsgc3RybGVuIChuMikgKyBzdHJsZW4gKG4zKSArIDEpOw0KKw0KKyAg c3RyY3B5IChuYW1lLCBuMSk7DQorICBzdHJjYXQgKG5hbWUsIG4yKTsNCisg IHN0cmNhdCAobmFtZSwgbjMpOw0KKyAgcHJpbnRmKCIqKiogUXVpY2sgU3lt OiVzIHNlYzolcCBhZGRyOiVkXG4iLG5hbWUsc2VjLGFkZHIpOw0KKyAgc3lt ID0gYmZkX21ha2VfZW1wdHlfc3ltYm9sIChhYmZkKTsNCisgIHN5bS0+bmFt ZSA9IG5hbWU7DQorICBzeW0tPnNlY3Rpb24gPSBzZWM7DQorICBzeW0tPmZs YWdzID0gZmxhZ3M7DQorICBzeW0tPnZhbHVlID0gYWRkcjsNCisgIHN5bXRh YltzeW1wdHIrK10gPSBzeW07DQorfQ0KKw0KK3N0YXRpYyBhcmVsZW50ICpy ZWx0YWIgPSAwOw0KK3N0YXRpYyBpbnQgcmVsY291bnQgPSAwLCByZWxzaXpl ID0gMDsNCisNCitzdGF0aWMgdm9pZA0KK3F1aWNrX3JlbG9jIChiZmQgKmFi ZmQsIGludCBhZGRyZXNzLCBpbnQgd2hpY2hfaG93dG8sIGludCBzeW1pZHgp DQorew0KKyAgaWYgKHJlbGNvdW50ID49IHJlbHNpemUgLSAxKQ0KKyAgICB7 DQorICAgICAgcmVsc2l6ZSArPSAxMDsNCisgICAgICBpZiAocmVsdGFiKQ0K KwlyZWx0YWIgPSB4cmVhbGxvYyAocmVsdGFiLCByZWxzaXplICogc2l6ZW9m IChhcmVsZW50KSk7DQorICAgICAgZWxzZQ0KKwlyZWx0YWIgPSB4bWFsbG9j IChyZWxzaXplICogc2l6ZW9mIChhcmVsZW50KSk7DQorICAgIH0NCisgIHJl bHRhYltyZWxjb3VudF0uYWRkcmVzcyA9IGFkZHJlc3M7DQorICByZWx0YWJb cmVsY291bnRdLmFkZGVuZCA9IDA7DQorICByZWx0YWJbcmVsY291bnRdLmhv d3RvID0gYmZkX3JlbG9jX3R5cGVfbG9va3VwIChhYmZkLCB3aGljaF9ob3d0 byk7DQorICByZWx0YWJbcmVsY291bnRdLnN5bV9wdHJfcHRyID0gc3ltdGFi ICsgc3ltaWR4Ow0KKyAgcmVsY291bnQrKzsNCit9DQorDQorc3RhdGljIHZv aWQNCitzYXZlX3JlbG9jcyAoYXNlY3Rpb24gKnNlYykNCit7DQorICBpbnQg aTsNCisNCisgIHNlYy0+cmVsb2NhdGlvbiA9IHJlbHRhYjsNCisgIHNlYy0+ cmVsb2NfY291bnQgPSByZWxjb3VudDsNCisgIHNlYy0+b3JlbG9jYXRpb24g PSB4bWFsbG9jICgocmVsY291bnQgKyAxKSAqIHNpemVvZiAoYXJlbGVudCAq KSk7DQorICBmb3IgKGkgPSAwOyBpIDwgcmVsY291bnQ7IGkrKykNCisgICAg c2VjLT5vcmVsb2NhdGlvbltpXSA9IHNlYy0+cmVsb2NhdGlvbiArIGk7DQor ICBzZWMtPm9yZWxvY2F0aW9uW3JlbGNvdW50XSA9IDA7DQorICBzZWMtPmZs YWdzIHw9IFNFQ19SRUxPQzsNCisgIHJlbHRhYiA9IDA7DQorICByZWxjb3Vu dCA9IHJlbHNpemUgPSAwOw0KK30NCisNCisvKgkuc2VjdGlvbgkuaWRhdGEk Mg0KKyAJLmdsb2JhbAkJX19oZWFkX215X2RsbA0KKyAgIF9faGVhZF9teV9k bGw6DQorIAkucnZhCQlobmFtZQ0KKyAJLmxvbmcJCTANCisgCS5sb25nCQkw DQorIAkucnZhCQlfX215X2RsbF9pbmFtZQ0KKyAJLnJ2YQkJZnRodW5rDQor DQorIAkuc2VjdGlvbgkuaWRhdGEkNQ0KKyAJLmxvbmcJCTANCisgCS5sb25n CQkwDQorICAgZnRodW5rOg0KKw0KKyAJLnNlY3Rpb24JLmlkYXRhJDQNCisg CS5sb25nCQkwDQorIAkubG9uZwkJMA0KKyAgIGhuYW1lOiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICovDQorDQorc3RhdGljIGJmZCAqDQorbWFr ZV9oZWFkIChiZmQgKnBhcmVudCkNCit7DQorICBhc2VjdGlvbiAqaWQyLCAq aWQ1LCAqaWQ0Ow0KKyAgdW5zaWduZWQgY2hhciAqZDIsICpkNSwgKmQ0Ow0K KyAgY2hhciAqb25hbWU7DQorICBiZmQgKmFiZmQ7DQorDQorICBvbmFtZSA9 IHhtYWxsb2MgKDIwKTsNCisgIHNwcmludGYgKG9uYW1lLCAiZCUwNmQubyIs IHRtcF9zZXEpOw0KKyAgdG1wX3NlcSsrOw0KKw0KKyAgYWJmZCA9IGJmZF9j cmVhdGUgKG9uYW1lLCBwYXJlbnQpOw0KKyAgYmZkX2ZpbmRfdGFyZ2V0IChw ZXBfZGV0YWlscy0+b2JqZWN0X3RhcmdldCwgYWJmZCk7DQorICBiZmRfbWFr ZV93cml0YWJsZSAoYWJmZCk7DQorDQorICBiZmRfc2V0X2Zvcm1hdCAoYWJm ZCwgYmZkX29iamVjdCk7DQorICBiZmRfc2V0X2FyY2hfbWFjaCAoYWJmZCwg cGVwX2RldGFpbHMtPmJmZF9hcmNoLCAwKTsNCisNCisgIHN5bXB0ciA9IDA7 DQorICBzeW10YWIgPSB4bWFsbG9jICg2ICogc2l6ZW9mIChhc3ltYm9sICop KTsNCisgIGlkMiA9IHF1aWNrX3NlY3Rpb24gKGFiZmQsICIuaWRhdGEkMiIs IFNFQ19IQVNfQ09OVEVOVFMsIDIpOw0KKyAgaWQ1ID0gcXVpY2tfc2VjdGlv biAoYWJmZCwgIi5pZGF0YSQ1IiwgU0VDX0hBU19DT05URU5UUywgMik7DQor ICBpZDQgPSBxdWlja19zZWN0aW9uIChhYmZkLCAiLmlkYXRhJDQiLCBTRUNf SEFTX0NPTlRFTlRTLCAyKTsNCisgIHF1aWNrX3N5bWJvbCAoYWJmZCwgVSAo Il9oZWFkXyIpLCBkbGxfc3ltbmFtZSwgIiIsIGlkMiwgQlNGX0dMT0JBTCwg MCk7DQorICBxdWlja19zeW1ib2wgKGFiZmQsIFUgKCIiKSwgZGxsX3N5bW5h bWUsICJfaW5hbWUiLCBVTkRTRUMsIEJTRl9HTE9CQUwsIDApOw0KKw0KKyAg LyogT0ssIHBheSBhdHRlbnRpb24gaGVyZS4gIEkgZ290IGNvbmZ1c2VkIG15 c2VsZiBsb29raW5nIGJhY2sgYXQNCisgICAgIGl0LiAgV2UgY3JlYXRlIGEg Zm91ci1ieXRlIHNlY3Rpb24gdG8gbWFyayB0aGUgYmVnaW5uaW5nIG9mIHRo ZQ0KKyAgICAgbGlzdCwgYW5kIHdlIGluY2x1ZGUgYW4gb2Zmc2V0IG9mIDQg aW4gdGhlIHNlY3Rpb24sIHNvIHRoYXQgdGhlDQorICAgICBwb2ludGVyIHRv IHRoZSBsaXN0IHBvaW50cyB0byB0aGUgKmVuZCogb2YgdGhpcyBzZWN0aW9u LCB3aGljaCBpcw0KKyAgICAgdGhlIHN0YXJ0IG9mIHRoZSBsaXN0IG9mIHNl Y3Rpb25zIGZyb20gb3RoZXIgb2JqZWN0cy4gICovDQorDQorICBiZmRfc2V0 X3NlY3Rpb25fc2l6ZSAoYWJmZCwgaWQyLCAyMCk7DQorICBkMiA9IHhtYWxs b2MgKDIwKTsNCisgIGlkMi0+Y29udGVudHMgPSBkMjsNCisgIG1lbXNldCAo ZDIsIDAsIDIwKTsNCisgIGQyWzBdID0gZDJbMTZdID0gNDsgLyogUmVsb2Mg YWRkZW5kLiAgKi8NCisgIHF1aWNrX3JlbG9jIChhYmZkLCAgMCwgQkZEX1JF TE9DX1JWQSwgMik7DQorICBxdWlja19yZWxvYyAoYWJmZCwgMTIsIEJGRF9S RUxPQ19SVkEsIDQpOw0KKyAgcXVpY2tfcmVsb2MgKGFiZmQsIDE2LCBCRkRf UkVMT0NfUlZBLCAxKTsNCisgIHNhdmVfcmVsb2NzIChpZDIpOw0KKw0KKyAg YmZkX3NldF9zZWN0aW9uX3NpemUgKGFiZmQsIGlkNSwgOCk7DQorICBkNSA9 IHhtYWxsb2MgKDgpOw0KKyAgaWQ1LT5jb250ZW50cyA9IGQ1Ow0KKyAgbWVt c2V0IChkNSwgMCwgOCk7DQorDQorICBiZmRfc2V0X3NlY3Rpb25fc2l6ZSAo YWJmZCwgaWQ0LCA4KTsNCisgIGQ0ID0geG1hbGxvYyAoOCk7DQorICBpZDQt PmNvbnRlbnRzID0gZDQ7DQorICBtZW1zZXQgKGQ0LCAwLCA4KTsNCisNCisg IGJmZF9zZXRfc3ltdGFiIChhYmZkLCBzeW10YWIsIHN5bXB0cik7DQorDQor ICBiZmRfc2V0X3NlY3Rpb25fY29udGVudHMgKGFiZmQsIGlkMiwgZDIsIDAs IDIwKTsNCisgIGJmZF9zZXRfc2VjdGlvbl9jb250ZW50cyAoYWJmZCwgaWQ1 LCBkNSwgMCwgOCk7DQorICBiZmRfc2V0X3NlY3Rpb25fY29udGVudHMgKGFi ZmQsIGlkNCwgZDQsIDAsIDgpOw0KKw0KKyAgYmZkX21ha2VfcmVhZGFibGUg KGFiZmQpOw0KKyAgcmV0dXJuIGFiZmQ7DQorfQ0KKw0KKy8qCS5zZWN0aW9u CS5pZGF0YSQ0DQorIAkubG9uZwkJMA0KKyAgCS5sb25nCQkwDQorCS5zZWN0 aW9uCS5pZGF0YSQ1DQorIAkubG9uZwkJMA0KKyAJLmxvbmcJCTANCisgCS5z ZWN0aW9uCWlkYXRhJDcNCisgCS5nbG9iYWwJCV9fbXlfZGxsX2luYW1lDQor ICBfX215X2RsbF9pbmFtZToNCisgCS5hc2NpegkJIm15LmRsbCIgICAgICAg Ki8NCisNCitzdGF0aWMgYmZkICoNCittYWtlX3RhaWwgKGJmZCAqcGFyZW50 KQ0KK3sNCisgIGFzZWN0aW9uICppZDQsICppZDUsICppZDc7DQorICB1bnNp Z25lZCBjaGFyICpkNCwgKmQ1LCAqZDc7DQorICBpbnQgbGVuOw0KKyAgY2hh ciAqb25hbWU7DQorICBiZmQgKmFiZmQ7DQorDQorICBvbmFtZSA9IHhtYWxs b2MgKDIwKTsNCisgIHNwcmludGYgKG9uYW1lLCAiZCUwNmQubyIsIHRtcF9z ZXEpOw0KKyAgdG1wX3NlcSsrOw0KKw0KKyAgYWJmZCA9IGJmZF9jcmVhdGUg KG9uYW1lLCBwYXJlbnQpOw0KKyAgYmZkX2ZpbmRfdGFyZ2V0IChwZXBfZGV0 YWlscy0+b2JqZWN0X3RhcmdldCwgYWJmZCk7DQorICBiZmRfbWFrZV93cml0 YWJsZSAoYWJmZCk7DQorDQorICBiZmRfc2V0X2Zvcm1hdCAoYWJmZCwgYmZk X29iamVjdCk7DQorICBiZmRfc2V0X2FyY2hfbWFjaCAoYWJmZCwgcGVwX2Rl dGFpbHMtPmJmZF9hcmNoLCAwKTsNCisNCisgIHN5bXB0ciA9IDA7DQorICBz eW10YWIgPSB4bWFsbG9jICg1ICogc2l6ZW9mIChhc3ltYm9sICopKTsNCisg IGlkNCA9IHF1aWNrX3NlY3Rpb24gKGFiZmQsICIuaWRhdGEkNCIsIFNFQ19I QVNfQ09OVEVOVFMsIDIpOw0KKyAgaWQ1ID0gcXVpY2tfc2VjdGlvbiAoYWJm ZCwgIi5pZGF0YSQ1IiwgU0VDX0hBU19DT05URU5UUywgMik7DQorICBpZDcg PSBxdWlja19zZWN0aW9uIChhYmZkLCAiLmlkYXRhJDciLCBTRUNfSEFTX0NP TlRFTlRTLCAyKTsNCisgIHF1aWNrX3N5bWJvbCAoYWJmZCwgVSAoIiIpLCBk bGxfc3ltbmFtZSwgIl9pbmFtZSIsIGlkNywgQlNGX0dMT0JBTCwgMCk7DQor DQorICBiZmRfc2V0X3NlY3Rpb25fc2l6ZSAoYWJmZCwgaWQ0LCA4KTsNCisg IGQ0ID0geG1hbGxvYyAoOCk7DQorICBpZDQtPmNvbnRlbnRzID0gZDQ7DQor ICBtZW1zZXQgKGQ0LCAwLCA4KTsNCisNCisgIGJmZF9zZXRfc2VjdGlvbl9z aXplIChhYmZkLCBpZDUsIDgpOw0KKyAgZDUgPSB4bWFsbG9jICg4KTsNCisg IGlkNS0+Y29udGVudHMgPSBkNTsNCisgIG1lbXNldCAoZDUsIDAsIDgpOw0K Kw0KKyAgbGVuID0gc3RybGVuIChkbGxfZmlsZW5hbWUpICsgMTsNCisgIGlm IChsZW4gJiAxKQ0KKyAgICBsZW4rKzsNCisgIGJmZF9zZXRfc2VjdGlvbl9z aXplIChhYmZkLCBpZDcsIGxlbik7DQorICBkNyA9IHhtYWxsb2MgKGxlbik7 DQorICBpZDctPmNvbnRlbnRzID0gZDc7DQorICBzdHJjcHkgKChjaGFyICop IGQ3LCBkbGxfZmlsZW5hbWUpOw0KKw0KKyAgYmZkX3NldF9zeW10YWIgKGFi ZmQsIHN5bXRhYiwgc3ltcHRyKTsNCisNCisgIGJmZF9zZXRfc2VjdGlvbl9j b250ZW50cyAoYWJmZCwgaWQ0LCBkNCwgMCwgOCk7DQorICBiZmRfc2V0X3Nl Y3Rpb25fY29udGVudHMgKGFiZmQsIGlkNSwgZDUsIDAsIDgpOw0KKyAgYmZk X3NldF9zZWN0aW9uX2NvbnRlbnRzIChhYmZkLCBpZDcsIGQ3LCAwLCBsZW4p Ow0KKw0KKyAgYmZkX21ha2VfcmVhZGFibGUgKGFiZmQpOw0KKyAgcmV0dXJu IGFiZmQ7DQorfQ0KKw0KKy8qCS50ZXh0DQorIAkuZ2xvYmFsCQlfZnVuY3Rp b24NCisgCS5nbG9iYWwJCV9fX2ltcF9mdW5jdGlvbg0KKyAJLmdsb2JhbAkJ X19pbXBfX2Z1bmN0aW9uDQorICBfZnVuY3Rpb246DQorIAlqbXAJCSpfX2lt cF9fZnVuY3Rpb246DQorDQorIAkuc2VjdGlvbglpZGF0YSQ3DQorIAkubG9u ZwkJX19oZWFkX215X2RsbA0KKw0KKyAJLnNlY3Rpb24JLmlkYXRhJDUNCisg IF9fX2ltcF9mdW5jdGlvbjoNCisgIF9faW1wX19mdW5jdGlvbjoNCisgIGlh dD8NCisgIAkuc2VjdGlvbgkuaWRhdGEkNA0KKyAgaWF0Pw0KKyAJLnNlY3Rp b24JLmlkYXRhJDYNCisgIElEPG9yZGluYWw+Og0KKyAJLnNob3J0CQk8aGlu dD4NCisgCS5hc2NpegkJImZ1bmN0aW9uIiB4bGF0ZT8gKGFkZCB1bmRlcnNj b3JlLCBraWxsIGF0KSAgKi8NCisNCitzdGF0aWMgdW5zaWduZWQgY2hhciBq bXBfaXg4Nl9ieXRlc1tdID0NCit7DQorICAweGZmLCAweDI1LCAweDAwLCAw eDAwLCAweDAwLCAweDAwLCAweDkwLCAweDkwDQorfTsNCisNCitzdGF0aWMg YmZkICoNCittYWtlX29uZSAoZGVmX2ZpbGVfZXhwb3J0ICpleHAsIGJmZCAq cGFyZW50KQ0KK3sNCisgIGFzZWN0aW9uICp0eCwgKmlkNywgKmlkNSwgKmlk NCwgKmlkNjsNCisgIHVuc2lnbmVkIGNoYXIgKnRkID0gTlVMTCwgKmQ3LCAq ZDUsICpkNCwgKmQ2ID0gTlVMTDsNCisgIGludCBsZW47DQorICBjaGFyICpv bmFtZTsNCisgIGJmZCAqYWJmZDsNCisgIHVuc2lnbmVkIGNoYXIgKmptcF9i eXRlcyA9IE5VTEw7DQorICBpbnQgam1wX2J5dGVfY291bnQgPSAwOw0KKw0K KyAgc3dpdGNoIChwZXBfZGV0YWlscy0+cGVwX2FyY2gpDQorICAgIHsNCisg ICAgY2FzZSBQRV9BUkNIX2kzODY6DQorICAgICAgam1wX2J5dGVzID0gam1w X2l4ODZfYnl0ZXM7DQorICAgICAgam1wX2J5dGVfY291bnQgPSBzaXplb2Yg KGptcF9peDg2X2J5dGVzKTsNCisgICAgICBicmVhazsNCisgICAgZGVmYXVs dDoNCisgICAgICBhYm9ydCAoKTsNCisgICAgfQ0KKw0KKyAgb25hbWUgPSB4 bWFsbG9jICgyMCk7DQorICBzcHJpbnRmIChvbmFtZSwgImQlMDZkLm8iLCB0 bXBfc2VxKTsNCisgIHRtcF9zZXErKzsNCisNCisgIGFiZmQgPSBiZmRfY3Jl YXRlIChvbmFtZSwgcGFyZW50KTsNCisgIGJmZF9maW5kX3RhcmdldCAocGVw X2RldGFpbHMtPm9iamVjdF90YXJnZXQsIGFiZmQpOw0KKyAgYmZkX21ha2Vf d3JpdGFibGUgKGFiZmQpOw0KKw0KKyAgYmZkX3NldF9mb3JtYXQgKGFiZmQs IGJmZF9vYmplY3QpOw0KKyAgYmZkX3NldF9hcmNoX21hY2ggKGFiZmQsIHBl cF9kZXRhaWxzLT5iZmRfYXJjaCwgMCk7DQorDQorICBzeW1wdHIgPSAwOw0K KyAgc3ltdGFiID0geG1hbGxvYyAoMTEgKiBzaXplb2YgKGFzeW1ib2wgKikp Ow0KKyAgdHggID0gcXVpY2tfc2VjdGlvbiAoYWJmZCwgIi50ZXh0IiwgICAg U0VDX0NPREV8U0VDX0hBU19DT05URU5UUywgMik7DQorICBpZDcgPSBxdWlj a19zZWN0aW9uIChhYmZkLCAiLmlkYXRhJDciLCBTRUNfSEFTX0NPTlRFTlRT LCAyKTsNCisgIGlkNSA9IHF1aWNrX3NlY3Rpb24gKGFiZmQsICIuaWRhdGEk NSIsIFNFQ19IQVNfQ09OVEVOVFMsIDIpOw0KKyAgaWQ0ID0gcXVpY2tfc2Vj dGlvbiAoYWJmZCwgIi5pZGF0YSQ0IiwgU0VDX0hBU19DT05URU5UUywgMik7 DQorICBpZDYgPSBxdWlja19zZWN0aW9uIChhYmZkLCAiLmlkYXRhJDYiLCBT RUNfSEFTX0NPTlRFTlRTLCAyKTsNCisNCisgIGlmICAoKmV4cC0+aW50ZXJu YWxfbmFtZSA9PSAnQCcpDQorICAgIHsNCisgICAgICBxdWlja19zeW1ib2wg KGFiZmQsIFUgKCJfaGVhZF8iKSwgZGxsX3N5bW5hbWUsICIiLCBVTkRTRUMs DQorCQkgICAgQlNGX0dMT0JBTCwgMCk7DQorICAgICAgaWYgKCEgZXhwLT5m bGFnX2RhdGEpDQorCXF1aWNrX3N5bWJvbCAoYWJmZCwgIiIsIGV4cC0+aW50 ZXJuYWxfbmFtZSwgIiIsIHR4LCBCU0ZfR0xPQkFMLCAwKTsNCisgICAgICBx dWlja19zeW1ib2wgKGFiZmQsIFUgKCJfaW1wXyIpLCBleHAtPmludGVybmFs X25hbWUsICIiLCBpZDUsDQorCQkgICAgQlNGX0dMT0JBTCwgMCk7DQorICAg ICAgLyogRmFzdGNhbGwgYXBwbGllcyBvbmx5IHRvIGZ1bmN0aW9ucywNCisJ IHNvIG5vIG5lZWQgZm9yIGF1dG8taW1wb3J0IHN5bWJvbC4gICovDQorICAg IH0NCisgIGVsc2UNCisgICAgew0KKyAgICAgIHF1aWNrX3N5bWJvbCAoYWJm ZCwgVSAoIl9oZWFkXyIpLCBkbGxfc3ltbmFtZSwgIiIsIFVORFNFQywNCisJ CSAgICBCU0ZfR0xPQkFMLCAwKTsNCisgICAgICBpZiAoISBleHAtPmZsYWdf ZGF0YSkNCisJcXVpY2tfc3ltYm9sIChhYmZkLCBVICgiIiksIGV4cC0+aW50 ZXJuYWxfbmFtZSwgIiIsIHR4LA0KKwkJICAgICAgQlNGX0dMT0JBTCwgMCk7 DQorICAgICAgcXVpY2tfc3ltYm9sIChhYmZkLCBVICgiX2ltcF9fIiksIGV4 cC0+aW50ZXJuYWxfbmFtZSwgIiIsIGlkNSwNCisJCSAgICBCU0ZfR0xPQkFM LCAwKTsNCisgICAgICAvKiBTeW1ib2wgdG8gcmVmZXJlbmNlIG9yZC9uYW1l IG9mIGltcG9ydGVkDQorCSBkYXRhIHN5bWJvbCwgdXNlZCB0byBpbXBsZW1l bnQgYXV0by1pbXBvcnQuICAqLw0KKyAgICAgIGlmIChleHAtPmZsYWdfZGF0 YSkNCisJcXVpY2tfc3ltYm9sIChhYmZkLCBVKCJfbm1fXyIpLCBleHAtPmlu dGVybmFsX25hbWUsICIiLCBpZDYsDQorCQkgICAgICBCU0ZfR0xPQkFMLDAp Ow0KKyAgICB9DQorICBpZiAocGVwX2RsbF9jb21wYXRfaW1wbGliKQ0KKyAg ICBxdWlja19zeW1ib2wgKGFiZmQsIFUgKCJfX2ltcF8iKSwgZXhwLT5pbnRl cm5hbF9uYW1lLCAiIiwgaWQ1LA0KKwkJICBCU0ZfR0xPQkFMLCAwKTsNCisg ICAgLy9xdWlja19zeW1ib2wgKGFiZmQsIFUgKCJfaW1wIiksIGV4cC0+aW50 ZXJuYWxfbmFtZSwgIiIsIGlkNSwNCisJLy8JICBCU0ZfR0xPQkFMLCAwKTsg JCQkJA0KKw0KKyAgaWYgKCEgZXhwLT5mbGFnX2RhdGEpDQorICAgIHsNCisg ICAgICBiZmRfc2V0X3NlY3Rpb25fc2l6ZSAoYWJmZCwgdHgsIGptcF9ieXRl X2NvdW50KTsNCisgICAgICB0ZCA9IHhtYWxsb2MgKGptcF9ieXRlX2NvdW50 KTsNCisgICAgICB0eC0+Y29udGVudHMgPSB0ZDsNCisgICAgICBtZW1jcHkg KHRkLCBqbXBfYnl0ZXMsIGptcF9ieXRlX2NvdW50KTsNCisNCisgICAgICBz d2l0Y2ggKHBlcF9kZXRhaWxzLT5wZXBfYXJjaCkNCisJew0KKwljYXNlIFBF X0FSQ0hfaTM4NjoNCisJICBxdWlja19yZWxvYyAoYWJmZCwgMiwgQkZEX1JF TE9DXzMyLCAyKTsNCisJICBicmVhazsNCisJY2FzZSBQRV9BUkNIX3NoOg0K KwkgIHF1aWNrX3JlbG9jIChhYmZkLCA4LCBCRkRfUkVMT0NfMzIsIDIpOw0K KwkgIGJyZWFrOw0KKwljYXNlIFBFX0FSQ0hfbWlwczoNCisJICBxdWlja19y ZWxvYyAoYWJmZCwgMCwgQkZEX1JFTE9DX0hJMTZfUywgMik7DQorCSAgcXVp Y2tfcmVsb2MgKGFiZmQsIDAsIEJGRF9SRUxPQ19MTzE2LCAwKTsgLyogTUlQ U19SX1BBSVIgKi8NCisJICBxdWlja19yZWxvYyAoYWJmZCwgNCwgQkZEX1JF TE9DX0xPMTYsIDIpOw0KKwkgIGJyZWFrOw0KKwlkZWZhdWx0Og0KKwkgIGFi b3J0ICgpOw0KKwl9DQorICAgICAgc2F2ZV9yZWxvY3MgKHR4KTsNCisgICAg fQ0KKw0KKyAgYmZkX3NldF9zZWN0aW9uX3NpemUgKGFiZmQsIGlkNywgNCk7 DQorICBkNyA9IHhtYWxsb2MgKDQpOw0KKyAgaWQ3LT5jb250ZW50cyA9IGQ3 Ow0KKyAgbWVtc2V0IChkNywgMCwgNCk7DQorICBxdWlja19yZWxvYyAoYWJm ZCwgMCwgQkZEX1JFTE9DX1JWQSwgNSk7DQorICBzYXZlX3JlbG9jcyAoaWQ3 KTsNCisNCisgIGJmZF9zZXRfc2VjdGlvbl9zaXplIChhYmZkLCBpZDUsIDgp Ow0KKyAgZDUgPSB4bWFsbG9jICg4KTsNCisgIGlkNS0+Y29udGVudHMgPSBk NTsNCisgIG1lbXNldCAoZDUsIDAsIDgpOw0KKw0KKyAgaWYgKGV4cC0+Zmxh Z19ub25hbWUpDQorICAgIHsNCisgICAgICBkNVswXSA9IGV4cC0+b3JkaW5h bDsNCisgICAgICBkNVsxXSA9IGV4cC0+b3JkaW5hbCA+PiA4Ow0KKyAgICAg IGQ1WzddID0gMHg4MDsNCisgICAgfQ0KKyAgZWxzZQ0KKyAgICB7DQorICAg ICAgcXVpY2tfcmVsb2MgKGFiZmQsIDAsIEJGRF9SRUxPQ19SVkEsIDQpOw0K KyAgICAgIHNhdmVfcmVsb2NzIChpZDUpOw0KKyAgICB9DQorDQorICBiZmRf c2V0X3NlY3Rpb25fc2l6ZSAoYWJmZCwgaWQ0LCA4KTsNCisgIGQ0ID0geG1h bGxvYyAoOCk7DQorICBpZDQtPmNvbnRlbnRzID0gZDQ7DQorICBtZW1zZXQg KGQ0LCAwLCA4KTsNCisNCisgIGlmIChleHAtPmZsYWdfbm9uYW1lKQ0KKyAg ICB7DQorICAgICAgZDRbMF0gPSBleHAtPm9yZGluYWw7DQorICAgICAgZDRb MV0gPSBleHAtPm9yZGluYWwgPj4gODsNCisgICAgICBkNFs3XSA9IDB4ODA7 DQorICAgIH0NCisgIGVsc2UNCisgICAgew0KKyAgICAgIHF1aWNrX3JlbG9j IChhYmZkLCAwLCBCRkRfUkVMT0NfUlZBLCA0KTsNCisgICAgICBzYXZlX3Jl bG9jcyAoaWQ0KTsNCisgICAgfQ0KKw0KKyAgaWYgKGV4cC0+ZmxhZ19ub25h bWUpDQorICAgIHsNCisgICAgICBsZW4gPSAwOw0KKyAgICAgIGJmZF9zZXRf c2VjdGlvbl9zaXplIChhYmZkLCBpZDYsIDApOw0KKyAgICB9DQorICBlbHNl DQorICAgIHsNCisgICAgICBsZW4gPSBzdHJsZW4gKGV4cC0+bmFtZSkgKyAz Ow0KKyAgICAgIGlmIChsZW4gJiAxKQ0KKwlsZW4rKzsNCisgICAgICBiZmRf c2V0X3NlY3Rpb25fc2l6ZSAoYWJmZCwgaWQ2LCBsZW4pOw0KKyAgICAgIGQ2 ID0geG1hbGxvYyAobGVuKTsNCisgICAgICBpZDYtPmNvbnRlbnRzID0gZDY7 DQorICAgICAgbWVtc2V0IChkNiwgMCwgbGVuKTsNCisgICAgICBkNlswXSA9 IGV4cC0+aGludCAmIDB4ZmY7DQorICAgICAgZDZbMV0gPSBleHAtPmhpbnQg Pj4gODsNCisgICAgICBzdHJjcHkgKChjaGFyICopIGQ2ICsgMiwgZXhwLT5u YW1lKTsNCisgICAgfQ0KKw0KKyAgYmZkX3NldF9zeW10YWIgKGFiZmQsIHN5 bXRhYiwgc3ltcHRyKTsNCisNCisgIGJmZF9zZXRfc2VjdGlvbl9jb250ZW50 cyAoYWJmZCwgdHgsIHRkLCAwLCBqbXBfYnl0ZV9jb3VudCk7DQorICBiZmRf c2V0X3NlY3Rpb25fY29udGVudHMgKGFiZmQsIGlkNywgZDcsIDAsIDQpOw0K KyAgYmZkX3NldF9zZWN0aW9uX2NvbnRlbnRzIChhYmZkLCBpZDUsIGQ1LCAw LCA4KTsNCisgIGJmZF9zZXRfc2VjdGlvbl9jb250ZW50cyAoYWJmZCwgaWQ0 LCBkNCwgMCwgOCk7DQorICBpZiAoIWV4cC0+ZmxhZ19ub25hbWUpDQorICAg IGJmZF9zZXRfc2VjdGlvbl9jb250ZW50cyAoYWJmZCwgaWQ2LCBkNiwgMCwg bGVuKTsNCisNCisgIGJmZF9tYWtlX3JlYWRhYmxlIChhYmZkKTsNCisgIHJl dHVybiBhYmZkOw0KK30NCisNCitzdGF0aWMgYmZkICoNCittYWtlX3Npbmds ZXRvbl9uYW1lX3RodW5rIChjb25zdCBjaGFyICppbXBvcnQsIGJmZCAqcGFy ZW50KQ0KK3sNCisgIC8qIE5hbWUgdGh1bmtzIGdvIHRvIGlkYXRhJDQuICAq Lw0KKyAgYXNlY3Rpb24gKmlkNDsNCisgIHVuc2lnbmVkIGNoYXIgKmQ0Ow0K KyAgY2hhciAqb25hbWU7DQorICBiZmQgKmFiZmQ7DQorDQorICBvbmFtZSA9 IHhtYWxsb2MgKDIwKTsNCisgIHNwcmludGYgKG9uYW1lLCAibm10aCUwNmQu byIsIHRtcF9zZXEpOw0KKyAgdG1wX3NlcSsrOw0KKw0KKyAgYWJmZCA9IGJm ZF9jcmVhdGUgKG9uYW1lLCBwYXJlbnQpOw0KKyAgYmZkX2ZpbmRfdGFyZ2V0 IChwZXBfZGV0YWlscy0+b2JqZWN0X3RhcmdldCwgYWJmZCk7DQorICBiZmRf bWFrZV93cml0YWJsZSAoYWJmZCk7DQorDQorICBiZmRfc2V0X2Zvcm1hdCAo YWJmZCwgYmZkX29iamVjdCk7DQorICBiZmRfc2V0X2FyY2hfbWFjaCAoYWJm ZCwgcGVwX2RldGFpbHMtPmJmZF9hcmNoLCAwKTsNCisNCisgIHN5bXB0ciA9 IDA7DQorICBzeW10YWIgPSB4bWFsbG9jICgzICogc2l6ZW9mIChhc3ltYm9s ICopKTsNCisgIGlkNCA9IHF1aWNrX3NlY3Rpb24gKGFiZmQsICIuaWRhdGEk NCIsIFNFQ19IQVNfQ09OVEVOVFMsIDIpOw0KKyAgcXVpY2tfc3ltYm9sIChh YmZkLCBVICgiX25tX3RobmtfIiksIGltcG9ydCwgIiIsIGlkNCwgQlNGX0dM T0JBTCwgMCk7DQorICBxdWlja19zeW1ib2wgKGFiZmQsIFUgKCJfbm1fIiks IGltcG9ydCwgIiIsIFVORFNFQywgQlNGX0dMT0JBTCwgMCk7DQorDQorICBi ZmRfc2V0X3NlY3Rpb25fc2l6ZSAoYWJmZCwgaWQ0LCA4KTsNCisgIGQ0ID0g eG1hbGxvYyAoOCk7DQorICBpZDQtPmNvbnRlbnRzID0gZDQ7DQorICBtZW1z ZXQgKGQ0LCAwLCA4KTsNCisgIHF1aWNrX3JlbG9jIChhYmZkLCAwLCBCRkRf UkVMT0NfUlZBLCAyKTsNCisgIHNhdmVfcmVsb2NzIChpZDQpOw0KKw0KKyAg YmZkX3NldF9zeW10YWIgKGFiZmQsIHN5bXRhYiwgc3ltcHRyKTsNCisNCisg IGJmZF9zZXRfc2VjdGlvbl9jb250ZW50cyAoYWJmZCwgaWQ0LCBkNCwgMCwg OCk7DQorDQorICBiZmRfbWFrZV9yZWFkYWJsZSAoYWJmZCk7DQorICByZXR1 cm4gYWJmZDsNCit9DQorDQorc3RhdGljIGNoYXIgKg0KK21ha2VfaW1wb3J0 X2ZpeHVwX21hcmsgKGFyZWxlbnQgKnJlbCkNCit7DQorICAvKiBXZSBjb252 ZXJ0IHJlbG9jIHRvIHN5bWJvbCwgZm9yIGxhdGVyIHJlZmVyZW5jZS4gICov DQorICBzdGF0aWMgaW50IGNvdW50ZXI7DQorICBzdGF0aWMgY2hhciAqZml4 dXBfbmFtZSA9IE5VTEw7DQorICBzdGF0aWMgc2l6ZV90IGJ1ZmZlcl9sZW4g PSAwOw0KKw0KKyAgc3RydWN0IGJmZF9zeW1ib2wgKnN5bSA9ICpyZWwtPnN5 bV9wdHJfcHRyOw0KKw0KKyAgYmZkICphYmZkID0gYmZkX2FzeW1ib2xfYmZk IChzeW0pOw0KKyAgc3RydWN0IGJmZF9saW5rX2hhc2hfZW50cnkgKmJoOw0K Kw0KKyAgaWYgKCFmaXh1cF9uYW1lKQ0KKyAgICB7DQorICAgICAgZml4dXBf bmFtZSA9IHhtYWxsb2MgKDM4NCk7DQorICAgICAgYnVmZmVyX2xlbiA9IDM4 NDsNCisgICAgfQ0KKw0KKyAgaWYgKHN0cmxlbiAoc3ltLT5uYW1lKSArIDI1 ID4gYnVmZmVyX2xlbikNCisgIC8qIEFzc3VtZSAyNSBjaGFycyBmb3IgIl9f ZnUiICsgY291bnRlciArICJfIi4gIElmIGNvdW50ZXIgaXMNCisgICAgIGJp Z2dlciB0aGFuIDIwIGRpZ2l0cyBsb25nLCB3ZSd2ZSBnb3Qgd29yc2UgcHJv YmxlbXMgdGhhbg0KKyAgICAgb3ZlcmZsb3dpbmcgdGhpcyBidWZmZXIuLi4g ICovDQorICAgIHsNCisgICAgICBmcmVlIChmaXh1cF9uYW1lKTsNCisgICAg ICAvKiBOZXcgYnVmZmVyIHNpemUgaXMgbGVuZ3RoIG9mIHN5bWJvbCwgcGx1 cyAyNSwgYnV0DQorCSB0aGVuIHJvdW5kZWQgdXAgdG8gdGhlIG5lYXJlc3Qg bXVsdGlwbGUgb2YgMTI4LiAgKi8NCisgICAgICBidWZmZXJfbGVuID0gKChz dHJsZW4gKHN5bS0+bmFtZSkgKyAyNSkgKyAxMjcpICYgfjEyNzsNCisgICAg ICBmaXh1cF9uYW1lID0geG1hbGxvYyAoYnVmZmVyX2xlbik7DQorICAgIH0N CisNCisgIHNwcmludGYgKGZpeHVwX25hbWUsICJfX2Z1JWRfJXMiLCBjb3Vu dGVyKyssIHN5bS0+bmFtZSk7DQorDQorICBiaCA9IE5VTEw7DQorICBiZmRf Y29mZl9saW5rX2FkZF9vbmVfc3ltYm9sICgmbGlua19pbmZvLCBhYmZkLCBm aXh1cF9uYW1lLCBCU0ZfR0xPQkFMLA0KKwkJCQljdXJyZW50X3NlYywgLyog c3ltLT5zZWN0aW9uLCAqLw0KKwkJCQlyZWwtPmFkZHJlc3MsIE5VTEwsIFRS VUUsIEZBTFNFLCAmYmgpOw0KKw0KKyAgaWYgKDApDQorICAgIHsNCisgICAg ICBzdHJ1Y3QgY29mZl9saW5rX2hhc2hfZW50cnkgKm15aDsNCisNCisgICAg ICBteWggPSAoc3RydWN0IGNvZmZfbGlua19oYXNoX2VudHJ5ICopIGJoOw0K KyAgICAgIHByaW50ZiAoInR5cGU6JWRcbiIsIG15aC0+dHlwZSk7DQorICAg ICAgcHJpbnRmICgiJXNcbiIsIG15aC0+cm9vdC51LmRlZi5zZWN0aW9uLT5u YW1lKTsNCisgICAgfQ0KKw0KKyAgcmV0dXJuIGZpeHVwX25hbWU7DQorfQ0K Kw0KKy8qCS5zZWN0aW9uCS5pZGF0YSQzDQorICAJLnJ2YQkJX19ubV90aG5r X1NZTSAoc2luZ2xldG9uIHRodW5rIHdpdGggbmFtZSBvZiBmdW5jKQ0KKyAJ LmxvbmcJCTANCisgCS5sb25nCQkwDQorIAkucnZhCQlfX215X2RsbF9pbmFt ZSAobmFtZSBvZiBkbGwpDQorIAkucnZhCQlfX2Z1Tk5fU1lNIChwb2ludGVy IHRvIHJlZmVyZW5jZSAoYWRkcmVzcykgaW4gdGV4dCkgICovDQorDQorc3Rh dGljIGJmZCAqDQorbWFrZV9pbXBvcnRfZml4dXBfZW50cnkgKGNvbnN0IGNo YXIgKm5hbWUsDQorCQkJIGNvbnN0IGNoYXIgKmZpeHVwX25hbWUsDQorCQkJ IGNvbnN0IGNoYXIgKmRsbF9zeW1uYW1lLA0KKwkJCSBiZmQgKnBhcmVudCkN Cit7DQorICBhc2VjdGlvbiAqaWQzOw0KKyAgdW5zaWduZWQgY2hhciAqZDM7 DQorICBjaGFyICpvbmFtZTsNCisgIGJmZCAqYWJmZDsNCisNCisgIG9uYW1l ID0geG1hbGxvYyAoMjApOw0KKyAgc3ByaW50ZiAob25hbWUsICJmdSUwNmQu byIsIHRtcF9zZXEpOw0KKyAgdG1wX3NlcSsrOw0KKw0KKyAgYWJmZCA9IGJm ZF9jcmVhdGUgKG9uYW1lLCBwYXJlbnQpOw0KKyAgYmZkX2ZpbmRfdGFyZ2V0 IChwZXBfZGV0YWlscy0+b2JqZWN0X3RhcmdldCwgYWJmZCk7DQorICBiZmRf bWFrZV93cml0YWJsZSAoYWJmZCk7DQorDQorICBiZmRfc2V0X2Zvcm1hdCAo YWJmZCwgYmZkX29iamVjdCk7DQorICBiZmRfc2V0X2FyY2hfbWFjaCAoYWJm ZCwgcGVwX2RldGFpbHMtPmJmZF9hcmNoLCAwKTsNCisNCisgIHN5bXB0ciA9 IDA7DQorICBzeW10YWIgPSB4bWFsbG9jICg2ICogc2l6ZW9mIChhc3ltYm9s ICopKTsNCisgIGlkMyA9IHF1aWNrX3NlY3Rpb24gKGFiZmQsICIuaWRhdGEk MyIsIFNFQ19IQVNfQ09OVEVOVFMsIDIpOw0KKw0KKyAgcXVpY2tfc3ltYm9s IChhYmZkLCBVICgiX25tX3RobmtfIiksIG5hbWUsICIiLCBVTkRTRUMsIEJT Rl9HTE9CQUwsIDApOw0KKyAgcXVpY2tfc3ltYm9sIChhYmZkLCBVICgiIiks IGRsbF9zeW1uYW1lLCAiX2luYW1lIiwgVU5EU0VDLCBCU0ZfR0xPQkFMLCAw KTsNCisgIHF1aWNrX3N5bWJvbCAoYWJmZCwgIiIsIGZpeHVwX25hbWUsICIi LCBVTkRTRUMsIEJTRl9HTE9CQUwsIDApOw0KKw0KKyAgYmZkX3NldF9zZWN0 aW9uX3NpemUgKGFiZmQsIGlkMywgMjApOw0KKyAgZDMgPSB4bWFsbG9jICgy MCk7DQorICBpZDMtPmNvbnRlbnRzID0gZDM7DQorICBtZW1zZXQgKGQzLCAw LCAyMCk7DQorDQorICBxdWlja19yZWxvYyAoYWJmZCwgMCwgQkZEX1JFTE9D X1JWQSwgMSk7DQorICBxdWlja19yZWxvYyAoYWJmZCwgMTIsIEJGRF9SRUxP Q19SVkEsIDIpOw0KKyAgcXVpY2tfcmVsb2MgKGFiZmQsIDE2LCBCRkRfUkVM T0NfUlZBLCAzKTsNCisgIHNhdmVfcmVsb2NzIChpZDMpOw0KKw0KKyAgYmZk X3NldF9zeW10YWIgKGFiZmQsIHN5bXRhYiwgc3ltcHRyKTsNCisNCisgIGJm ZF9zZXRfc2VjdGlvbl9jb250ZW50cyAoYWJmZCwgaWQzLCBkMywgMCwgMjAp Ow0KKw0KKyAgYmZkX21ha2VfcmVhZGFibGUgKGFiZmQpOw0KKyAgcmV0dXJu IGFiZmQ7DQorfQ0KKw0KKy8qCS5zZWN0aW9uCS5yZGF0YV9ydW50aW1lX3Bz ZXVkb19yZWxvYw0KKyAJLmxvbmcJCWFkZGVuZA0KKyAJLnJ2YQkJX19mdU5O X1NZTSAocG9pbnRlciB0byByZWZlcmVuY2UgKGFkZHJlc3MpIGluIHRleHQp ICAqLw0KKw0KK3N0YXRpYyBiZmQgKg0KK21ha2VfcnVudGltZV9wc2V1ZG9f cmVsb2MgKGNvbnN0IGNoYXIgKm5hbWUgQVRUUklCVVRFX1VOVVNFRCwNCisJ CQkgICBjb25zdCBjaGFyICpmaXh1cF9uYW1lLA0KKwkJCSAgIGludCBhZGRl bmQsDQorCQkJICAgYmZkICpwYXJlbnQpDQorew0KKyAgYXNlY3Rpb24gKnJ0 X3JlbDsNCisgIHVuc2lnbmVkIGNoYXIgKnJ0X3JlbF9kOw0KKyAgY2hhciAq b25hbWU7DQorICBiZmQgKmFiZmQ7DQorDQorICBvbmFtZSA9IHhtYWxsb2Mg KDIwKTsNCisgIHNwcmludGYgKG9uYW1lLCAicnRyJTA2ZC5vIiwgdG1wX3Nl cSk7DQorICB0bXBfc2VxKys7DQorDQorICBhYmZkID0gYmZkX2NyZWF0ZSAo b25hbWUsIHBhcmVudCk7DQorICBiZmRfZmluZF90YXJnZXQgKHBlcF9kZXRh aWxzLT5vYmplY3RfdGFyZ2V0LCBhYmZkKTsNCisgIGJmZF9tYWtlX3dyaXRh YmxlIChhYmZkKTsNCisNCisgIGJmZF9zZXRfZm9ybWF0IChhYmZkLCBiZmRf b2JqZWN0KTsNCisgIGJmZF9zZXRfYXJjaF9tYWNoIChhYmZkLCBwZXBfZGV0 YWlscy0+YmZkX2FyY2gsIDApOw0KKw0KKyAgc3ltcHRyID0gMDsNCisgIHN5 bXRhYiA9IHhtYWxsb2MgKDIgKiBzaXplb2YgKGFzeW1ib2wgKikpOw0KKyAg cnRfcmVsID0gcXVpY2tfc2VjdGlvbiAoYWJmZCwgIi5yZGF0YV9ydW50aW1l X3BzZXVkb19yZWxvYyIsDQorCQkJICBTRUNfSEFTX0NPTlRFTlRTLCAyKTsN CisNCisgIHF1aWNrX3N5bWJvbCAoYWJmZCwgIiIsIGZpeHVwX25hbWUsICIi LCBVTkRTRUMsIEJTRl9HTE9CQUwsIDApOw0KKw0KKyAgYmZkX3NldF9zZWN0 aW9uX3NpemUgKGFiZmQsIHJ0X3JlbCwgOCk7DQorICBydF9yZWxfZCA9IHht YWxsb2MgKDgpOw0KKyAgcnRfcmVsLT5jb250ZW50cyA9IHJ0X3JlbF9kOw0K KyAgbWVtc2V0IChydF9yZWxfZCwgMCwgOCk7DQorICBiZmRfcHV0XzMyIChh YmZkLCBhZGRlbmQsIHJ0X3JlbF9kKTsNCisNCisgIHF1aWNrX3JlbG9jIChh YmZkLCA0LCBCRkRfUkVMT0NfUlZBLCAxKTsNCisgIHNhdmVfcmVsb2NzIChy dF9yZWwpOw0KKw0KKyAgYmZkX3NldF9zeW10YWIgKGFiZmQsIHN5bXRhYiwg c3ltcHRyKTsNCisNCisgIGJmZF9zZXRfc2VjdGlvbl9jb250ZW50cyAoYWJm ZCwgcnRfcmVsLCBydF9yZWxfZCwgMCwgOCk7DQorDQorICBiZmRfbWFrZV9y ZWFkYWJsZSAoYWJmZCk7DQorICByZXR1cm4gYWJmZDsNCit9DQorDQorLyoJ LnNlY3Rpb24JLnJkYXRhDQorIAkucnZhCQlfX3BlaTM4Nl9ydW50aW1lX3Jl bG9jYXRvciAgKi8NCisNCitzdGF0aWMgYmZkICoNCitwZXBfY3JlYXRlX3J1 bnRpbWVfcmVsb2NhdG9yX3JlZmVyZW5jZSAoYmZkICpwYXJlbnQpDQorew0K KyAgYXNlY3Rpb24gKmV4dGVybl9ydF9yZWw7DQorICB1bnNpZ25lZCBjaGFy ICpleHRlcm5fcnRfcmVsX2Q7DQorICBjaGFyICpvbmFtZTsNCisgIGJmZCAq YWJmZDsNCisNCisgIG9uYW1lID0geG1hbGxvYyAoMjApOw0KKyAgc3ByaW50 ZiAob25hbWUsICJlcnRyJTA2ZC5vIiwgdG1wX3NlcSk7DQorICB0bXBfc2Vx Kys7DQorDQorICBhYmZkID0gYmZkX2NyZWF0ZSAob25hbWUsIHBhcmVudCk7 DQorICBiZmRfZmluZF90YXJnZXQgKHBlcF9kZXRhaWxzLT5vYmplY3RfdGFy Z2V0LCBhYmZkKTsNCisgIGJmZF9tYWtlX3dyaXRhYmxlIChhYmZkKTsNCisN CisgIGJmZF9zZXRfZm9ybWF0IChhYmZkLCBiZmRfb2JqZWN0KTsNCisgIGJm ZF9zZXRfYXJjaF9tYWNoIChhYmZkLCBwZXBfZGV0YWlscy0+YmZkX2FyY2gs IDApOw0KKw0KKyAgc3ltcHRyID0gMDsNCisgIHN5bXRhYiA9IHhtYWxsb2Mg KDIgKiBzaXplb2YgKGFzeW1ib2wgKikpOw0KKyAgZXh0ZXJuX3J0X3JlbCA9 IHF1aWNrX3NlY3Rpb24gKGFiZmQsICIucmRhdGEiLCBTRUNfSEFTX0NPTlRF TlRTLCAyKTsNCisNCisgIHF1aWNrX3N5bWJvbCAoYWJmZCwgIiIsICJfX3Bl aTM4Nl9ydW50aW1lX3JlbG9jYXRvciIsICIiLCBVTkRTRUMsDQorCQlCU0Zf Tk9fRkxBR1MsIDApOw0KKw0KKyAgYmZkX3NldF9zZWN0aW9uX3NpemUgKGFi ZmQsIGV4dGVybl9ydF9yZWwsIDQpOw0KKyAgZXh0ZXJuX3J0X3JlbF9kID0g eG1hbGxvYyAoNCk7DQorICBleHRlcm5fcnRfcmVsLT5jb250ZW50cyA9IGV4 dGVybl9ydF9yZWxfZDsNCisNCisgIHF1aWNrX3JlbG9jIChhYmZkLCAwLCBC RkRfUkVMT0NfUlZBLCAxKTsNCisgIHNhdmVfcmVsb2NzIChleHRlcm5fcnRf cmVsKTsNCisNCisgIGJmZF9zZXRfc3ltdGFiIChhYmZkLCBzeW10YWIsIHN5 bXB0cik7DQorDQorICBiZmRfc2V0X3NlY3Rpb25fY29udGVudHMgKGFiZmQs IGV4dGVybl9ydF9yZWwsIGV4dGVybl9ydF9yZWxfZCwgMCwgNCk7DQorDQor ICBiZmRfbWFrZV9yZWFkYWJsZSAoYWJmZCk7DQorICByZXR1cm4gYWJmZDsN Cit9DQorDQordm9pZA0KK3BlcF9jcmVhdGVfaW1wb3J0X2ZpeHVwIChhcmVs ZW50ICpyZWwsIGFzZWN0aW9uICpzLCBpbnQgYWRkZW5kKQ0KK3sNCisgIGNo YXIgYnVmWzMwMF07DQorICBzdHJ1Y3QgYmZkX3N5bWJvbCAqc3ltID0gKnJl bC0+c3ltX3B0cl9wdHI7DQorICBzdHJ1Y3QgYmZkX2xpbmtfaGFzaF9lbnRy eSAqbmFtZV90aHVua19zeW07DQorICBjb25zdCBjaGFyICpuYW1lID0gc3lt LT5uYW1lOw0KKyAgY2hhciAqZml4dXBfbmFtZSA9IG1ha2VfaW1wb3J0X2Zp eHVwX21hcmsgKHJlbCk7DQorICBiZmQgKmI7DQorDQorICBzcHJpbnRmIChi dWYsIFUgKCJfbm1fdGhua18lcyIpLCBuYW1lKTsNCisNCisgIG5hbWVfdGh1 bmtfc3ltID0gYmZkX2xpbmtfaGFzaF9sb29rdXAgKGxpbmtfaW5mby5oYXNo LCBidWYsIDAsIDAsIDEpOw0KKw0KKyAgaWYgKCFuYW1lX3RodW5rX3N5bSB8 fCBuYW1lX3RodW5rX3N5bS0+dHlwZSAhPSBiZmRfbGlua19oYXNoX2RlZmlu ZWQpDQorICAgIHsNCisgICAgICBiZmQgKmIgPSBtYWtlX3NpbmdsZXRvbl9u YW1lX3RodW5rIChuYW1lLCBvdXRwdXRfYmZkKTsNCisgICAgICBhZGRfYmZk X3RvX2xpbmsgKGIsIGItPmZpbGVuYW1lLCAmbGlua19pbmZvKTsNCisNCisg ICAgICAvKiBJZiB3ZSBldmVyIHVzZSBhdXRvaW1wb3J0LCB3ZSBoYXZlIHRv IGNhc3QgdGV4dCBzZWN0aW9uIHdyaXRhYmxlLiAgKi8NCisgICAgICBjb25m aWcudGV4dF9yZWFkX29ubHkgPSBGQUxTRTsNCisgICAgICBvdXRwdXRfYmZk LT5mbGFncyAmPSB+V1BfVEVYVDsgICANCisgICAgfQ0KKw0KKyAgaWYgKGFk ZGVuZCA9PSAwIHx8IGxpbmtfaW5mby5wZWkzODZfcnVudGltZV9wc2V1ZG9f cmVsb2MpDQorICAgIHsNCisgICAgICBleHRlcm4gY2hhciAqIHBlcF9kYXRh X2ltcG9ydF9kbGw7DQorICAgICAgY2hhciAqIGRsbF9zeW1uYW1lID0gcGVw X2RhdGFfaW1wb3J0X2RsbCA/IHBlcF9kYXRhX2ltcG9ydF9kbGwgOiAidW5r bm93biI7DQorDQorICAgICAgYiA9IG1ha2VfaW1wb3J0X2ZpeHVwX2VudHJ5 IChuYW1lLCBmaXh1cF9uYW1lLCBkbGxfc3ltbmFtZSwgb3V0cHV0X2JmZCk7 DQorICAgICAgYWRkX2JmZF90b19saW5rIChiLCBiLT5maWxlbmFtZSwgJmxp bmtfaW5mbyk7DQorICAgIH0NCisNCisgIGlmIChhZGRlbmQgIT0gMCkNCisg ICAgew0KKyAgICAgIGlmIChsaW5rX2luZm8ucGVpMzg2X3J1bnRpbWVfcHNl dWRvX3JlbG9jKQ0KKwl7DQorCSAgaWYgKHBlcF9kbGxfZXh0cmFfcGVfZGVi dWcpDQorCSAgICBwcmludGYgKCJjcmVhdGluZyBydW50aW1lIHBzZXVkby1y ZWxvYyBlbnRyeSBmb3IgJXMgKGFkZGVuZD0lZClcbiIsDQorCQkgICBmaXh1 cF9uYW1lLCBhZGRlbmQpOw0KKwkgIGIgPSBtYWtlX3J1bnRpbWVfcHNldWRv X3JlbG9jIChuYW1lLCBmaXh1cF9uYW1lLCBhZGRlbmQsIG91dHB1dF9iZmQp Ow0KKwkgIGFkZF9iZmRfdG9fbGluayAoYiwgYi0+ZmlsZW5hbWUsICZsaW5r X2luZm8pOw0KKw0KKwkgIGlmIChydW50aW1lX3BzZXVkb19yZWxvY3NfY3Jl YXRlZCA9PSAwKQ0KKwkgICAgew0KKwkgICAgICBiID0gcGVwX2NyZWF0ZV9y dW50aW1lX3JlbG9jYXRvcl9yZWZlcmVuY2UgKG91dHB1dF9iZmQpOw0KKwkg ICAgICBhZGRfYmZkX3RvX2xpbmsgKGIsIGItPmZpbGVuYW1lLCAmbGlua19p bmZvKTsNCisJICAgIH0NCisJICBydW50aW1lX3BzZXVkb19yZWxvY3NfY3Jl YXRlZCsrOw0KKwl9DQorICAgICAgZWxzZQ0KKwl7DQorCSAgZWluZm8gKF8o IiVDOiB2YXJpYWJsZSAnJVQnIGNhbid0IGJlIGF1dG8taW1wb3J0ZWQuIFBs ZWFzZSByZWFkIHRoZSBkb2N1bWVudGF0aW9uIGZvciBsZCdzIC0tZW5hYmxl LWF1dG8taW1wb3J0IGZvciBkZXRhaWxzLlxuIiksDQorCQkgcy0+b3duZXIs IHMsIHJlbC0+YWRkcmVzcywgc3ltLT5uYW1lKTsNCisJICBlaW5mbyAoIiVY Iik7DQorCX0NCisgICAgfQ0KK30NCisNCisNCit2b2lkDQorcGVwX2RsbF9n ZW5lcmF0ZV9pbXBsaWIgKGRlZl9maWxlICpkZWYsIGNvbnN0IGNoYXIgKmlt cGZpbGVuYW1lKQ0KK3sNCisgIGludCBpOw0KKyAgYmZkICphcl9oZWFkOw0K KyAgYmZkICphcl90YWlsOw0KKyAgYmZkICpvdXRhcmNoOw0KKyAgYmZkICpo ZWFkID0gMDsNCisNCisgIGRsbF9maWxlbmFtZSA9IChkZWYtPm5hbWUpID8g ZGVmLT5uYW1lIDogZGxsX25hbWU7DQorICBkbGxfc3ltbmFtZSA9IHhzdHJk dXAgKGRsbF9maWxlbmFtZSk7DQorICBmb3IgKGkgPSAwOyBkbGxfc3ltbmFt ZVtpXTsgaSsrKQ0KKyAgICBpZiAoIUlTQUxOVU0gKGRsbF9zeW1uYW1lW2ld KSkNCisgICAgICBkbGxfc3ltbmFtZVtpXSA9ICdfJzsNCisNCisgIHVubGlu a19pZl9vcmRpbmFyeSAoaW1wZmlsZW5hbWUpOw0KKw0KKyAgb3V0YXJjaCA9 IGJmZF9vcGVudyAoaW1wZmlsZW5hbWUsIDApOw0KKw0KKyAgaWYgKCFvdXRh cmNoKQ0KKyAgICB7DQorICAgICAgLyogeGdldHRleHQ6Yy1mb3JtYXQgKi8N CisgICAgICBlaW5mbyAoXygiJVhDYW4ndCBvcGVuIC5saWIgZmlsZTogJXNc biIpLCBpbXBmaWxlbmFtZSk7DQorICAgICAgcmV0dXJuOw0KKyAgICB9DQor DQorICAvKiB4Z2V0dGV4dDpjLWZvcm1hdCAqLw0KKyAgaW5mb19tc2cgKF8o IkNyZWF0aW5nIGxpYnJhcnkgZmlsZTogJXNcbiIpLCBpbXBmaWxlbmFtZSk7 DQorIA0KKyAgYmZkX3NldF9mb3JtYXQgKG91dGFyY2gsIGJmZF9hcmNoaXZl KTsNCisgIG91dGFyY2gtPmhhc19hcm1hcCA9IDE7DQorDQorICAvKiBXb3Jr IG91dCBhIHJlYXNvbmFibGUgc2l6ZSBvZiB0aGluZ3MgdG8gcHV0IG9udG8g b25lIGxpbmUuICAqLw0KKyAgYXJfaGVhZCA9IG1ha2VfaGVhZCAob3V0YXJj aCk7DQorDQorICBmb3IgKGkgPSAwOyBpIDwgZGVmLT5udW1fZXhwb3J0czsg aSsrKQ0KKyAgICB7DQorICAgICAgLyogVGhlIGltcG9ydCBsaWJyYXJ5IGRv ZXNuJ3Qga25vdyBhYm91dCB0aGUgaW50ZXJuYWwgbmFtZS4gICovDQorICAg ICAgY2hhciAqaW50ZXJuYWwgPSBkZWYtPmV4cG9ydHNbaV0uaW50ZXJuYWxf bmFtZTsNCisgICAgICBiZmQgKm47DQorDQorICAgICAgLyogRG9uJ3QgYWRk IFBSSVZBVEUgZW50cmllcyB0byBpbXBvcnQgbGliLiAgKi8gCQ0KKyAgICAg IGlmIChwZXBfZGVmX2ZpbGUtPmV4cG9ydHNbaV0uZmxhZ19wcml2YXRlKQ0K Kwljb250aW51ZTsNCisgICAgICBkZWYtPmV4cG9ydHNbaV0uaW50ZXJuYWxf bmFtZSA9IGRlZi0+ZXhwb3J0c1tpXS5uYW1lOw0KKyAgICAgIG4gPSBtYWtl X29uZSAoZGVmLT5leHBvcnRzICsgaSwgb3V0YXJjaCk7DQorICAgICAgbi0+ bmV4dCA9IGhlYWQ7DQorICAgICAgaGVhZCA9IG47DQorICAgICAgZGVmLT5l eHBvcnRzW2ldLmludGVybmFsX25hbWUgPSBpbnRlcm5hbDsNCisgICAgfQ0K Kw0KKyAgYXJfdGFpbCA9IG1ha2VfdGFpbCAob3V0YXJjaCk7DQorDQorICBp ZiAoYXJfaGVhZCA9PSBOVUxMIHx8IGFyX3RhaWwgPT0gTlVMTCkNCisgICAg cmV0dXJuOw0KKw0KKyAgLyogTm93IHN0aWNrIHRoZW0gYWxsIGludG8gdGhl IGFyY2hpdmUuICAqLw0KKyAgYXJfaGVhZC0+bmV4dCA9IGhlYWQ7DQorICBh cl90YWlsLT5uZXh0ID0gYXJfaGVhZDsNCisgIGhlYWQgPSBhcl90YWlsOw0K Kw0KKyAgaWYgKCEgYmZkX3NldF9hcmNoaXZlX2hlYWQgKG91dGFyY2gsIGhl YWQpKQ0KKyAgICBlaW5mbyAoIiVYYmZkX3NldF9hcmNoaXZlX2hlYWQ6ICVF XG4iKTsNCisNCisgIGlmICghIGJmZF9jbG9zZSAob3V0YXJjaCkpDQorICAg IGVpbmZvICgiJVhiZmRfY2xvc2UgJXM6ICVFXG4iLCBpbXBmaWxlbmFtZSk7 DQorDQorICB3aGlsZSAoaGVhZCAhPSBOVUxMKQ0KKyAgICB7DQorICAgICAg YmZkICpuID0gaGVhZC0+bmV4dDsNCisgICAgICBiZmRfY2xvc2UgKGhlYWQp Ow0KKyAgICAgIGhlYWQgPSBuOw0KKyAgICB9DQorfQ0KKw0KK3N0YXRpYyB2 b2lkDQorYWRkX2JmZF90b19saW5rIChiZmQgKmFiZmQsIGNvbnN0IGNoYXIg Km5hbWUsIHN0cnVjdCBiZmRfbGlua19pbmZvICpsaW5rX2luZm8pDQorew0K KyAgbGFuZ19pbnB1dF9zdGF0ZW1lbnRfdHlwZSAqZmFrZV9maWxlOw0KKw0K KyAgZmFrZV9maWxlID0gbGFuZ19hZGRfaW5wdXRfZmlsZSAobmFtZSwNCisJ CQkJICAgbGFuZ19pbnB1dF9maWxlX2lzX2Zha2VfZW51bSwNCisJCQkJICAg TlVMTCk7DQorICBmYWtlX2ZpbGUtPnRoZV9iZmQgPSBhYmZkOw0KKyAgbGRs YW5nX2FkZF9maWxlIChmYWtlX2ZpbGUpOw0KKw0KKyAgaWYgKCFiZmRfbGlu a19hZGRfc3ltYm9scyAoYWJmZCwgbGlua19pbmZvKSkNCisgICAgZWluZm8g KCIlWGFkZHN5bSAlczogJUVcbiIsIG5hbWUpOw0KK30NCisNCit2b2lkDQor cGVwX3Byb2Nlc3NfaW1wb3J0X2RlZnMgKGJmZCAqb3V0cHV0X2JmZCwgc3Ry dWN0IGJmZF9saW5rX2luZm8gKmxpbmtfaW5mbykNCit7DQorICBkZWZfZmls ZV9tb2R1bGUgKm1vZHVsZTsNCisNCisgIHBlcF9kbGxfaWRfdGFyZ2V0IChi ZmRfZ2V0X3RhcmdldCAob3V0cHV0X2JmZCkpOw0KKw0KKyAgaWYgKCFwZXBf ZGVmX2ZpbGUpDQorICAgIHJldHVybjsNCisNCisgIGZvciAobW9kdWxlID0g cGVwX2RlZl9maWxlLT5tb2R1bGVzOyBtb2R1bGU7IG1vZHVsZSA9IG1vZHVs ZS0+bmV4dCkNCisgICAgew0KKyAgICAgIGludCBpLCBkb190aGlzX2RsbDsN CisNCisgICAgICBkbGxfZmlsZW5hbWUgPSBtb2R1bGUtPm5hbWU7DQorICAg ICAgZGxsX3N5bW5hbWUgPSB4c3RyZHVwIChtb2R1bGUtPm5hbWUpOw0KKyAg ICAgIGZvciAoaSA9IDA7IGRsbF9zeW1uYW1lW2ldOyBpKyspDQorCWlmICgh SVNBTE5VTSAoZGxsX3N5bW5hbWVbaV0pKQ0KKwkgIGRsbF9zeW1uYW1lW2ld ID0gJ18nOw0KKw0KKyAgICAgIGRvX3RoaXNfZGxsID0gMDsNCisNCisgICAg ICBmb3IgKGkgPSAwOyBpIDwgcGVwX2RlZl9maWxlLT5udW1faW1wb3J0czsg aSsrKQ0KKwlpZiAocGVwX2RlZl9maWxlLT5pbXBvcnRzW2ldLm1vZHVsZSA9 PSBtb2R1bGUpDQorCSAgew0KKwkgICAgZGVmX2ZpbGVfZXhwb3J0IGV4cDsN CisJICAgIHN0cnVjdCBiZmRfbGlua19oYXNoX2VudHJ5ICpibGhlOw0KKwkg ICAgaW50IGxlYWRfYXQgPSAoKnBlcF9kZWZfZmlsZS0+aW1wb3J0c1tpXS5p bnRlcm5hbF9uYW1lID09ICdAJyk7DQorCSAgICAvKiBTZWUgaWYgd2UgbmVl ZCB0aGlzIGltcG9ydC4gICovDQorCSAgICBzaXplX3QgbGVuID0gc3RybGVu IChwZXBfZGVmX2ZpbGUtPmltcG9ydHNbaV0uaW50ZXJuYWxfbmFtZSk7DQor CSAgICBjaGFyICpuYW1lID0geG1hbGxvYyAobGVuICsgMiArIDYpOw0KKw0K KyAJICAgIGlmIChsZWFkX2F0KQ0KKwkgICAgICBzcHJpbnRmIChuYW1lLCAi JXMlcyIsICIiLA0KKwkJICAgICAgIHBlcF9kZWZfZmlsZS0+aW1wb3J0c1tp XS5pbnRlcm5hbF9uYW1lKTsNCisJICAgIGVsc2UNCisJICAgICAgc3ByaW50 ZiAobmFtZSwgIiVzJXMiLFUgKCIiKSwNCisJCSAgICAgICBwZXBfZGVmX2Zp bGUtPmltcG9ydHNbaV0uaW50ZXJuYWxfbmFtZSk7DQorDQorCSAgICBibGhl ID0gYmZkX2xpbmtfaGFzaF9sb29rdXAgKGxpbmtfaW5mby0+aGFzaCwgbmFt ZSwNCisJCQkJCSBGQUxTRSwgRkFMU0UsIEZBTFNFKTsNCisNCisJICAgIGlm ICghYmxoZSB8fCAoYmxoZSAmJiBibGhlLT50eXBlICE9IGJmZF9saW5rX2hh c2hfdW5kZWZpbmVkKSkNCisJICAgICAgew0KKwkJaWYgKGxlYWRfYXQpDQor CQkgIHNwcmludGYgKG5hbWUsICIlcyVzIiwgVSAoIl9pbXBfIiksDQorCQkJ ICAgcGVwX2RlZl9maWxlLT5pbXBvcnRzW2ldLmludGVybmFsX25hbWUpOw0K KwkJZWxzZQ0KKwkJICBzcHJpbnRmIChuYW1lLCAiJXMlcyIsIFUgKCJfaW1w X18iKSwNCisJCQkgICBwZXBfZGVmX2ZpbGUtPmltcG9ydHNbaV0uaW50ZXJu YWxfbmFtZSk7DQorDQorCQlibGhlID0gYmZkX2xpbmtfaGFzaF9sb29rdXAg KGxpbmtfaW5mby0+aGFzaCwgbmFtZSwNCisJCQkJCSAgICAgRkFMU0UsIEZB TFNFLCBGQUxTRSk7DQorCSAgICAgIH0NCisJICAgIGZyZWUgKG5hbWUpOw0K Kw0KKwkgICAgaWYgKGJsaGUgJiYgYmxoZS0+dHlwZSA9PSBiZmRfbGlua19o YXNoX3VuZGVmaW5lZCkNCisJICAgICAgew0KKwkJYmZkICpvbmU7DQorCQkv KiBXZSBkby4gICovDQorCQlpZiAoIWRvX3RoaXNfZGxsKQ0KKwkJICB7DQor CQkgICAgYmZkICphcl9oZWFkID0gbWFrZV9oZWFkIChvdXRwdXRfYmZkKTsN CisJCSAgICBhZGRfYmZkX3RvX2xpbmsgKGFyX2hlYWQsIGFyX2hlYWQtPmZp bGVuYW1lLCBsaW5rX2luZm8pOw0KKwkJICAgIGRvX3RoaXNfZGxsID0gMTsN CisJCSAgfQ0KKwkJZXhwLmludGVybmFsX25hbWUgPSBwZXBfZGVmX2ZpbGUt PmltcG9ydHNbaV0uaW50ZXJuYWxfbmFtZTsNCisJCWV4cC5uYW1lID0gcGVw X2RlZl9maWxlLT5pbXBvcnRzW2ldLm5hbWU7DQorCQlleHAub3JkaW5hbCA9 IHBlcF9kZWZfZmlsZS0+aW1wb3J0c1tpXS5vcmRpbmFsOw0KKwkJZXhwLmhp bnQgPSBleHAub3JkaW5hbCA+PSAwID8gZXhwLm9yZGluYWwgOiAwOw0KKwkJ ZXhwLmZsYWdfcHJpdmF0ZSA9IDA7DQorCQlleHAuZmxhZ19jb25zdGFudCA9 IDA7DQorCQlleHAuZmxhZ19kYXRhID0gcGVwX2RlZl9maWxlLT5pbXBvcnRz W2ldLmRhdGE7DQorCQlleHAuZmxhZ19ub25hbWUgPSBleHAubmFtZSA/IDAg OiAxOw0KKwkJb25lID0gbWFrZV9vbmUgKCZleHAsIG91dHB1dF9iZmQpOw0K KwkJYWRkX2JmZF90b19saW5rIChvbmUsIG9uZS0+ZmlsZW5hbWUsIGxpbmtf aW5mbyk7DQorCSAgICAgIH0NCisJICB9DQorICAgICAgaWYgKGRvX3RoaXNf ZGxsKQ0KKwl7DQorCSAgYmZkICphcl90YWlsID0gbWFrZV90YWlsIChvdXRw dXRfYmZkKTsNCisJICBhZGRfYmZkX3RvX2xpbmsgKGFyX3RhaWwsIGFyX3Rh aWwtPmZpbGVuYW1lLCBsaW5rX2luZm8pOw0KKwl9DQorDQorICAgICAgZnJl ZSAoZGxsX3N5bW5hbWUpOw0KKyAgICB9DQorfQ0KKw0KKy8qIFdlIHdlcmUg aGFuZGVkIGEgKi5ETEwgZmlsZS4gIFBhcnNlIGl0IGFuZCB0dXJuIGl0IGlu dG8gYSBzZXQgb2YNCisgICBJTVBPUlRTIGRpcmVjdGl2ZXMgaW4gdGhlIGRl ZiBmaWxlLiAgUmV0dXJuIFRSVUUgaWYgdGhlIGZpbGUgd2FzDQorICAgaGFu ZGxlZCwgRkFMU0UgaWYgbm90LiAgKi8NCisNCitzdGF0aWMgdW5zaWduZWQg aW50DQorcGVwX2dldDE2IChiZmQgKmFiZmQsIGludCB3aGVyZSkNCit7DQor ICB1bnNpZ25lZCBjaGFyIGJbMl07DQorDQorICBiZmRfc2VlayAoYWJmZCwg KGZpbGVfcHRyKSB3aGVyZSwgU0VFS19TRVQpOw0KKyAgYmZkX2JyZWFkIChi LCAoYmZkX3NpemVfdHlwZSkgMiwgYWJmZCk7DQorICByZXR1cm4gYlswXSAr IChiWzFdIDw8IDgpOw0KK30NCisNCitzdGF0aWMgdW5zaWduZWQgaW50DQor cGVwX2dldDMyIChiZmQgKmFiZmQsIGludCB3aGVyZSkNCit7DQorICB1bnNp Z25lZCBjaGFyIGJbNF07DQorDQorICBiZmRfc2VlayAoYWJmZCwgKGZpbGVf cHRyKSB3aGVyZSwgU0VFS19TRVQpOw0KKyAgYmZkX2JyZWFkIChiLCAoYmZk X3NpemVfdHlwZSkgNCwgYWJmZCk7DQorICByZXR1cm4gYlswXSArIChiWzFd IDw8IDgpICsgKGJbMl0gPDwgMTYpICsgKGJbM10gPDwgMjQpOw0KK30NCisN CitzdGF0aWMgdW5zaWduZWQgaW50DQorcGVwX2FzMzIgKHZvaWQgKnB0cikN Cit7DQorICB1bnNpZ25lZCBjaGFyICpiID0gcHRyOw0KKw0KKyAgcmV0dXJu IGJbMF0gKyAoYlsxXSA8PCA4KSArIChiWzJdIDw8IDE2KSArIChiWzNdIDw8 IDI0KTsNCit9DQorDQorYmZkX2Jvb2xlYW4NCitwZXBfaW1wbGllZF9pbXBv cnRfZGxsIChjb25zdCBjaGFyICpmaWxlbmFtZSkNCit7DQorICBiZmQgKmRs bDsNCisgIHVuc2lnbmVkIGxvbmcgcGVwX2hlYWRlcl9vZmZzZXQsIG9wdGhk cl9vZnMsIG51bV9lbnRyaWVzLCBpOw0KKyAgdW5zaWduZWQgbG9uZyBleHBv cnRfcnZhLCBleHBvcnRfc2l6ZSwgbnNlY3Rpb25zLCBzZWNwdHIsIGV4cHB0 cjsNCisgIHVuc2lnbmVkIGxvbmcgZXhwX2Z1bmNiYXNlOw0KKyAgdW5zaWdu ZWQgY2hhciAqZXhwZGF0YTsNCisgIGNoYXIgKmVydmE7DQorICB1bnNpZ25l ZCBsb25nIG5hbWVfcnZhcywgb3JkaW5hbHMsIG5leHAsIG9yZGJhc2U7DQor ICBjb25zdCBjaGFyICpkbGxfbmFtZTsNCisgIC8qIEluaXRpYWxpemF0aW9u IHdpdGggc3RhcnQgPiBlbmQgZ3VhcmFudGVlcyB0aGF0IGlzX2RhdGENCisg ICAgIHdpbGwgbm90IGJlIHNldCBieSBtaXN0YWtlLCBhbmQgYXZvaWRzIGNv bXBpbGVyIHdhcm5pbmcuICAqLw0KKyAgdW5zaWduZWQgbG9uZyBkYXRhX3N0 YXJ0ID0gMTsNCisgIHVuc2lnbmVkIGxvbmcgZGF0YV9lbmQgPSAwOw0KKyAg dW5zaWduZWQgbG9uZyByZGF0YV9zdGFydCA9IDE7DQorICB1bnNpZ25lZCBs b25nIHJkYXRhX2VuZCA9IDA7DQorICB1bnNpZ25lZCBsb25nIGJzc19zdGFy dCA9IDE7DQorICB1bnNpZ25lZCBsb25nIGJzc19lbmQgPSAwOw0KKw0KKyAg LyogTm8sIEkgY2FuJ3QgdXNlIGJmZCBoZXJlLiAga2VybmVsMzIuZGxsIHB1 dHMgaXRzIGV4cG9ydCB0YWJsZSBpbg0KKyAgICAgdGhlIG1pZGRsZSBvZiB0 aGUgLnJkYXRhIHNlY3Rpb24uICAqLw0KKyAgZGxsID0gYmZkX29wZW5yIChm aWxlbmFtZSwgcGVwX2RldGFpbHMtPnRhcmdldF9uYW1lKTsNCisgIGlmICgh ZGxsKQ0KKyAgICB7DQorICAgICAgZWluZm8gKCIlWG9wZW4gJXM6ICVFXG4i LCBmaWxlbmFtZSk7DQorICAgICAgcmV0dXJuIEZBTFNFOw0KKyAgICB9DQor DQorICAvKiBQRUkgZGxscyBzZWVtIHRvIGJlIGJmZF9vYmplY3RzLiAgKi8N CisgIGlmICghYmZkX2NoZWNrX2Zvcm1hdCAoZGxsLCBiZmRfb2JqZWN0KSkN CisgICAgew0KKyAgICAgIGVpbmZvICgiJVglczogdGhpcyBkb2Vzbid0IGFw cGVhciB0byBiZSBhIERMTFxuIiwgZmlsZW5hbWUpOw0KKyAgICAgIHJldHVy biBGQUxTRTsNCisgICAgfQ0KKw0KKyAgLyogR2V0IHBlX2hlYWRlciwgb3B0 aW9uYWwgaGVhZGVyIGFuZCBudW1iZXJzIG9mIGV4cG9ydCBlbnRyaWVzLiAg Ki8NCisgIHBlcF9oZWFkZXJfb2Zmc2V0ID0gcGVwX2dldDMyIChkbGwsIDB4 M2MpOw0KKyAgb3B0aGRyX29mcyA9IHBlcF9oZWFkZXJfb2Zmc2V0ICsgNCAr IDIwOyAvLyBNYWdpYyBvZiBvcHQgaGVhZGVyDQorICBudW1fZW50cmllcyA9 IHBlcF9nZXQzMiAoZGxsLCBvcHRoZHJfb2ZzICsgOTIgKzQqNCk7IC8vICAm TnVtYmVyT2ZSdmFBbmRTaXplcw0KKw0KKyAgaWYgKHBlcF9kbGxfZXh0cmFf cGVfZGVidWcpDQorCSAgcHJpbnRmICgiJXM6IEV4cG9ydCBudW1fZW50cmll cyAlbGRcbiIsIF9fRlVOQ1RJT05fXyxudW1fZW50cmllcyk7DQorDQorICBp ZiAobnVtX2VudHJpZXMgPCAxKSAvKiBObyBleHBvcnRzLiAgKi8NCisgICAg cmV0dXJuIEZBTFNFOw0KKw0KKyAgZXhwb3J0X3J2YSA9IHBlcF9nZXQzMiAo ZGxsLCBvcHRoZHJfb2ZzICsgOTYrNCo0KTsNCisgIGV4cG9ydF9zaXplID0g cGVwX2dldDMyIChkbGwsIG9wdGhkcl9vZnMgKyAxMDArNCo0KTsNCisgIG5z ZWN0aW9ucyA9IHBlcF9nZXQxNiAoZGxsLCBwZXBfaGVhZGVyX29mZnNldCAr IDQgKyAyKTsNCisgIHNlY3B0ciA9IChwZXBfaGVhZGVyX29mZnNldCArIDQg KyAyMCArDQorCSAgICBwZXBfZ2V0MTYgKGRsbCwgcGVwX2hlYWRlcl9vZmZz ZXQgKyA0ICsgMTYpKTsNCisgIGV4cHB0ciA9IDA7DQorDQorICAvKiBHZXQg dGhlIHJ2YSBhbmQgc2l6ZSBvZiB0aGUgZXhwb3J0IHNlY3Rpb24uICAqLw0K KyAgZm9yIChpID0gMDsgaSA8IG5zZWN0aW9uczsgaSsrKQ0KKyAgICB7DQor ICAgICAgY2hhciBzbmFtZVs4XTsNCisgICAgICB1bnNpZ25lZCBsb25nIHNl Y3B0cjEgPSBzZWNwdHIgKyA0MCAqIGk7DQorICAgICAgdW5zaWduZWQgbG9u ZyB2YWRkciA9IHBlcF9nZXQzMiAoZGxsLCBzZWNwdHIxICsgMTIpOw0KKyAg ICAgIHVuc2lnbmVkIGxvbmcgdnNpemUgPSBwZXBfZ2V0MzIgKGRsbCwgc2Vj cHRyMSArIDE2KTsNCisgICAgICB1bnNpZ25lZCBsb25nIGZwdHIgPSBwZXBf Z2V0MzIgKGRsbCwgc2VjcHRyMSArIDIwKTsNCisNCisgICAgICBiZmRfc2Vl ayAoZGxsLCAoZmlsZV9wdHIpIHNlY3B0cjEsIFNFRUtfU0VUKTsNCisgICAg ICBiZmRfYnJlYWQgKHNuYW1lLCAoYmZkX3NpemVfdHlwZSkgOCwgZGxsKTsN CisNCisgICAgICBpZiAodmFkZHIgPD0gZXhwb3J0X3J2YSAmJiB2YWRkciAr IHZzaXplID4gZXhwb3J0X3J2YSkNCisJew0KKwkgIGV4cHB0ciA9IGZwdHIg KyAoZXhwb3J0X3J2YSAtIHZhZGRyKTsNCisJICBpZiAoZXhwb3J0X3J2YSAr IGV4cG9ydF9zaXplID4gdmFkZHIgKyB2c2l6ZSkNCisJICAgIGV4cG9ydF9z aXplID0gdnNpemUgLSAoZXhwb3J0X3J2YSAtIHZhZGRyKTsNCisJICBicmVh azsNCisJfQ0KKyAgICB9DQorDQorICAvKiBTY2FuIHNlY3Rpb25zIGFuZCBz dG9yZSB0aGUgYmFzZSBhbmQgc2l6ZSBvZiB0aGUNCisgICAgIGRhdGEgYW5k IGJzcyBzZWdtZW50cyBpbiBkYXRhL2Jhc2Vfc3RhcnQvZW5kLiAgKi8NCisg IGZvciAoaSA9IDA7IGkgPCBuc2VjdGlvbnM7IGkrKykNCisgICAgew0KKyAg ICAgIHVuc2lnbmVkIGxvbmcgc2VjcHRyMSA9IHNlY3B0ciArIDQwICogaTsN CisgICAgICB1bnNpZ25lZCBsb25nIHZzaXplID0gcGVwX2dldDMyIChkbGws IHNlY3B0cjEgKyA4KTsNCisgICAgICB1bnNpZ25lZCBsb25nIHZhZGRyID0g cGVwX2dldDMyIChkbGwsIHNlY3B0cjEgKyAxMik7DQorICAgICAgdW5zaWdu ZWQgbG9uZyBmbGFncyA9IHBlcF9nZXQzMiAoZGxsLCBzZWNwdHIxICsgMzYp Ow0KKyAgICAgIGNoYXIgc2VjX25hbWVbOV07DQorDQorICAgICAgc2VjX25h bWVbOF0gPSAnXDAnOw0KKyAgICAgIGJmZF9zZWVrIChkbGwsIChmaWxlX3B0 cikgc2VjcHRyMSArIDAsIFNFRUtfU0VUKTsNCisgICAgICBiZmRfYnJlYWQg KHNlY19uYW1lLCAoYmZkX3NpemVfdHlwZSkgOCwgZGxsKTsNCisNCisgICAg ICBpZiAoc3RyY21wKHNlY19uYW1lLCIuZGF0YSIpID09IDApDQorCXsNCisJ ICBkYXRhX3N0YXJ0ID0gdmFkZHI7DQorCSAgZGF0YV9lbmQgPSB2YWRkciAr IHZzaXplOw0KKw0KKwkgIGlmIChwZXBfZGxsX2V4dHJhX3BlX2RlYnVnKQ0K KwkgICAgcHJpbnRmICgiJXMgJXM6IDB4JTA4bHgtMHglMDhseCAoMHglMDhs eClcbiIsDQorCQkgICAgX19GVU5DVElPTl9fLCBzZWNfbmFtZSwgdmFkZHIs IHZhZGRyICsgdnNpemUsIGZsYWdzKTsNCisJfQ0KKyAgICAgIGVsc2UgaWYg KHN0cmNtcChzZWNfbmFtZSwiLnJkYXRhIikgPT0gMCkNCisJew0KKwkgIHJk YXRhX3N0YXJ0ID0gdmFkZHI7DQorCSAgcmRhdGFfZW5kID0gdmFkZHIgKyB2 c2l6ZTsNCisNCisJICBpZiAocGVwX2RsbF9leHRyYV9wZV9kZWJ1ZykNCisJ ICAgIHByaW50ZiAoIiVzICVzOiAweCUwOGx4LTB4JTA4bHggKDB4JTA4bHgp XG4iLA0KKwkJICAgIF9fRlVOQ1RJT05fXywgc2VjX25hbWUsIHZhZGRyLCB2 YWRkciArIHZzaXplLCBmbGFncyk7DQorCX0NCisgICAgICBlbHNlIGlmIChz dHJjbXAgKHNlY19uYW1lLCIuYnNzIikgPT0gMCkNCisJew0KKwkgIGJzc19z dGFydCA9IHZhZGRyOw0KKwkgIGJzc19lbmQgPSB2YWRkciArIHZzaXplOw0K Kw0KKwkgIGlmIChwZXBfZGxsX2V4dHJhX3BlX2RlYnVnKQ0KKwkgICAgcHJp bnRmICgiJXMgJXM6IDB4JTA4bHgtMHglMDhseCAoMHglMDhseClcbiIsDQor CQkgICAgX19GVU5DVElPTl9fLCBzZWNfbmFtZSwgdmFkZHIsIHZhZGRyICsg dnNpemUsIGZsYWdzKTsNCisJfQ0KKyAgICB9DQorDQorICBpZiAocGVwX2Rs bF9leHRyYV9wZV9kZWJ1ZykNCisJICBwcmludGYgKCIlczogRXhwb3J0IHNp emU6JWx1IG9mZnNldDoweCVseFxuIiwNCisJCV9fRlVOQ1RJT05fXyxleHBv cnRfc2l6ZSwoZmlsZV9wdHIpZXhwcHRyKTsNCisgIGV4cGRhdGEgPSB4bWFs bG9jIChleHBvcnRfc2l6ZSk7DQorICBiZmRfc2VlayAoZGxsLCAoZmlsZV9w dHIpIGV4cHB0ciwgU0VFS19TRVQpOw0KKyAgYmZkX2JyZWFkIChleHBkYXRh LCAoYmZkX3NpemVfdHlwZSkgZXhwb3J0X3NpemUsIGRsbCk7DQorICBlcnZh ID0gKGNoYXIgKikgZXhwZGF0YSAtIGV4cG9ydF9ydmE7DQorDQorICBpZiAo cGVwX2RlZl9maWxlID09IDApDQorICAgIHBlcF9kZWZfZmlsZSA9IGRlZl9m aWxlX2VtcHR5ICgpOw0KKw0KKyAgbmV4cCA9IHBlcF9hczMyIChleHBkYXRh ICsgMjQpOw0KKyAgbmFtZV9ydmFzID0gcGVwX2FzMzIgKGV4cGRhdGEgKyAz Mik7DQorICBvcmRpbmFscyA9IHBlcF9hczMyIChleHBkYXRhICsgMzYpOw0K KyAgb3JkYmFzZSA9IHBlcF9hczMyIChleHBkYXRhICsgMTYpOw0KKyAgZXhw X2Z1bmNiYXNlID0gcGVwX2FzMzIgKGV4cGRhdGEgKyAyOCk7DQorICBpZiAo cGVwX2RsbF9leHRyYV9wZV9kZWJ1ZykNCisJICBwcmludGYgKCIlczogbmV4 cDolbHUgbmFtZXJ2YToweCVseCBvcmQ6JWx1IG9yZGJhc2U6JWx1IGZiPTB4 JWx4XG4iLA0KKwkgICAgX19GVU5DVElPTl9fLG5leHAsbmFtZV9ydmFzLG9y ZGluYWxzLG9yZGJhc2UsZXhwX2Z1bmNiYXNlKTsNCisNCisgIC8qIFVzZSBp bnRlcm5hbCBkbGwgbmFtZSBpbnN0ZWFkIG9mIGZpbGVuYW1lDQorICAgICB0 byBlbmFibGUgc3ltYm9saWMgZGxsIGxpbmtpbmcuICAqLw0KKyAgZGxsX25h bWUgPSBlcnZhICsgcGVwX2FzMzIgKGV4cGRhdGEgKyAxMik7DQorDQorICAv KiBDaGVjayB0byBzZWUgaWYgdGhlIGRsbCBoYXMgYWxyZWFkeSBiZWVuIGFk ZGVkIHRvDQorICAgICB0aGUgZGVmaW5pdGlvbiBsaXN0IGFuZCBpZiBzbyBy ZXR1cm4gd2l0aG91dCBlcnJvci4NCisgICAgIFRoaXMgYXZvaWRzIG11bHRp cGxlIHN5bWJvbCBkZWZpbml0aW9ucy4gICovDQorICBpZiAoZGVmX2dldF9t b2R1bGUgKHBlcF9kZWZfZmlsZSwgZGxsX25hbWUpKQ0KKyAgICB7DQorICAg ICAgaWYgKHBlcF9kbGxfZXh0cmFfcGVfZGVidWcpDQorCXByaW50ZiAoIiVz IGlzIGFscmVhZHkgbG9hZGVkXG4iLCBkbGxfbmFtZSk7DQorICAgICAgcmV0 dXJuIFRSVUU7DQorICAgIH0NCisNCisgIC8qIEl0ZXJhdGUgdGhyb3VnaCB0 aGUgbGlzdCBvZiBzeW1ib2xzLiAgKi8NCisgIGZvciAoaSA9IDA7IGkgPCBu ZXhwOyBpKyspDQorICAgIHsNCisgICAgICAvKiBQb2ludGVyIHRvIHRoZSBu YW1lcyB2ZWN0b3IuICAqLw0KKyAgICAgIHVuc2lnbmVkIGxvbmcgbmFtZV9y dmEgPSBwZXBfYXMzMiAoZXJ2YSArIG5hbWVfcnZhcyArIGkgKiA0KTsNCisg ICAgICBkZWZfZmlsZV9pbXBvcnQgKmltcDsNCisgICAgICAvKiBQb2ludGVy IHRvIHRoZSBmdW5jdGlvbiBhZGRyZXNzIHZlY3Rvci4gICovDQorICAgICAg dW5zaWduZWQgbG9uZyBmdW5jX3J2YSA9IHBlcF9hczMyIChlcnZhICsgZXhw X2Z1bmNiYXNlICsgaSAqIDQpOw0KKyAgICAgIGludCBpc19kYXRhID0gMDsN CisNCisgICAgICAvKiBTa2lwIHVud2FudGVkIHN5bWJvbHMsIHdoaWNoIGFy ZQ0KKwkgZXhwb3J0ZWQgaW4gYnVnZ3kgYXV0by1pbXBvcnQgcmVsZWFzZXMu ICAqLw0KKyAgICAgIGlmIChzdHJuY21wIChlcnZhICsgbmFtZV9ydmEsICJf bm1fIiwgNCkgIT0gMCkNCisgCXsNCisgCSAgLyogaXNfZGF0YSBpcyB0cnVl IGlmIHRoZSBhZGRyZXNzIGlzIGluIHRoZSBkYXRhLCByZGF0YSBvciBic3MN CisJICAgICBzZWdtZW50LiAgKi8NCisgCSAgaXNfZGF0YSA9DQorCSAgICAo ZnVuY19ydmEgPj0gZGF0YV9zdGFydCAmJiBmdW5jX3J2YSA8IGRhdGFfZW5k KQ0KKwkgICAgfHwgKGZ1bmNfcnZhID49IHJkYXRhX3N0YXJ0ICYmIGZ1bmNf cnZhIDwgcmRhdGFfZW5kKQ0KKwkgICAgfHwgKGZ1bmNfcnZhID49IGJzc19z dGFydCAmJiBmdW5jX3J2YSA8IGJzc19lbmQpOw0KKw0KKwkgIGltcCA9IGRl Zl9maWxlX2FkZF9pbXBvcnQgKHBlcF9kZWZfZmlsZSwgZXJ2YSArIG5hbWVf cnZhLA0KKwkJCQkgICAgIGRsbF9uYW1lLCBpLCAwKTsNCisgCSAgLyogTWFy ayBzeW1ib2wgdHlwZS4gICovDQorIAkgIGltcC0+ZGF0YSA9IGlzX2RhdGE7 DQorDQorIAkgIGlmIChwZXBfZGxsX2V4dHJhX3BlX2RlYnVnKQ0KKwkgICAg cHJpbnRmICgiJXMgZGxsLW5hbWU6ICVzIHN5bTogJXMgYWRkcjogMHglbHgg JXNcbiIsDQorCQkgICAgX19GVU5DVElPTl9fLCBkbGxfbmFtZSwgZXJ2YSAr IG5hbWVfcnZhLA0KKwkJICAgIGZ1bmNfcnZhLCBpc19kYXRhID8gIihkYXRh KSIgOiAiIik7DQorIAl9DQorICAgIH0NCisNCisgIHJldHVybiBUUlVFOw0K K30NCisNCisvKiBUaGVzZSBhcmUgdGhlIG1haW4gZnVuY3Rpb25zLCBjYWxs ZWQgZnJvbSB0aGUgZW11bGF0aW9uLiAgVGhlIGZpcnN0DQorICAgaXMgY2Fs bGVkIGFmdGVyIHRoZSBiZmRzIGFyZSByZWFkLCBzbyB3ZSBjYW4gZ3Vlc3Mg YXQgaG93IG11Y2ggc3BhY2UNCisgICB3ZSBuZWVkLiAgVGhlIHNlY29uZCBp cyBjYWxsZWQgYWZ0ZXIgZXZlcnl0aGluZyBpcyBwbGFjZWQsIHNvIHdlDQor ICAgY2FuIHB1dCB0aGUgcmlnaHQgdmFsdWVzIGluIHBsYWNlLiAgKi8NCisN Cit2b2lkDQorcGVwX2RsbF9idWlsZF9zZWN0aW9ucyAoYmZkICphYmZkLCBz dHJ1Y3QgYmZkX2xpbmtfaW5mbyAqaW5mbykNCit7DQorICBwZXBfZGxsX2lk X3RhcmdldCAoYmZkX2dldF90YXJnZXQgKGFiZmQpKTsNCisgIHByb2Nlc3Nf ZGVmX2ZpbGUgKGFiZmQsIGluZm8pOw0KKw0KKyAgaWYgKHBlcF9kZWZfZmls ZS0+bnVtX2V4cG9ydHMgPT0gMCAmJiAhaW5mby0+c2hhcmVkKQ0KKyAgICBy ZXR1cm47DQorDQorICBnZW5lcmF0ZV9lZGF0YSAoYWJmZCwgaW5mbyk7DQor ICBidWlsZF9maWxsZXJfYmZkICgxKTsNCit9DQorDQordm9pZA0KK3BlcF9l eGVfYnVpbGRfc2VjdGlvbnMgKGJmZCAqYWJmZCwgc3RydWN0IGJmZF9saW5r X2luZm8gKmluZm8gQVRUUklCVVRFX1VOVVNFRCkNCit7DQorICBwZXBfZGxs X2lkX3RhcmdldCAoYmZkX2dldF90YXJnZXQgKGFiZmQpKTsNCisgIGJ1aWxk X2ZpbGxlcl9iZmQgKDApOw0KK30NCisNCit2b2lkDQorcGVwX2RsbF9maWxs X3NlY3Rpb25zIChiZmQgKmFiZmQsIHN0cnVjdCBiZmRfbGlua19pbmZvICpp bmZvKQ0KK3sNCisgIHBlcF9kbGxfaWRfdGFyZ2V0IChiZmRfZ2V0X3Rhcmdl dCAoYWJmZCkpOw0KKyAgaW1hZ2VfYmFzZSA9IHBlX2RhdGEgKGFiZmQpLT5w ZV9vcHRoZHIuSW1hZ2VCYXNlOw0KKw0KKyAgZ2VuZXJhdGVfcmVsb2MgKGFi ZmQsIGluZm8pOw0KKyAgaWYgKHJlbG9jX3N6ID4gMCkNCisgICAgew0KKyAg ICAgIGJmZF9zZXRfc2VjdGlvbl9zaXplIChmaWxsZXJfYmZkLCByZWxvY19z LCByZWxvY19zeik7DQorDQorICAgICAgLyogUmVzaXplIHRoZSBzZWN0aW9u cy4gICovDQorICAgICAgbGFuZ19yZXNldF9tZW1vcnlfcmVnaW9ucyAoKTsN CisgICAgICBsYW5nX3NpemVfc2VjdGlvbnMgKE5VTEwsIFRSVUUpOw0KKw0K KyAgICAgIC8qIFJlZG8gc3BlY2lhbCBzdHVmZi4gICovDQorICAgICAgbGRl bXVsX2FmdGVyX2FsbG9jYXRpb24gKCk7DQorDQorICAgICAgLyogRG8gdGhl IGFzc2lnbm1lbnRzIGFnYWluLiAgKi8NCisgICAgICBsYW5nX2RvX2Fzc2ln bm1lbnRzICgpOw0KKyAgICB9DQorDQorICBmaWxsX2VkYXRhIChhYmZkLCBp bmZvKTsNCisNCisgIGlmIChpbmZvLT5zaGFyZWQgJiYgIWluZm8tPnBpZSkN CisgICAgcGVfZGF0YSAoYWJmZCktPmRsbCA9IDE7DQorDQorICBlZGF0YV9z LT5jb250ZW50cyA9IGVkYXRhX2Q7DQorICByZWxvY19zLT5jb250ZW50cyA9 IHJlbG9jX2Q7DQorfQ0KKw0KK3ZvaWQNCitwZXBfZXhlX2ZpbGxfc2VjdGlv bnMgKGJmZCAqYWJmZCwgc3RydWN0IGJmZF9saW5rX2luZm8gKmluZm8pDQor ew0KKyAgcGVwX2RsbF9pZF90YXJnZXQgKGJmZF9nZXRfdGFyZ2V0IChhYmZk KSk7DQorICBpbWFnZV9iYXNlID0gcGVfZGF0YSAoYWJmZCktPnBlX29wdGhk ci5JbWFnZUJhc2U7DQorDQorICBnZW5lcmF0ZV9yZWxvYyAoYWJmZCwgaW5m byk7DQorICBpZiAocmVsb2Nfc3ogPiAwKQ0KKyAgICB7DQorICAgICAgYmZk X3NldF9zZWN0aW9uX3NpemUgKGZpbGxlcl9iZmQsIHJlbG9jX3MsIHJlbG9j X3N6KTsNCisNCisgICAgICAvKiBSZXNpemUgdGhlIHNlY3Rpb25zLiAgKi8N CisgICAgICBsYW5nX3Jlc2V0X21lbW9yeV9yZWdpb25zICgpOw0KKyAgICAg IGxhbmdfc2l6ZV9zZWN0aW9ucyAoTlVMTCwgVFJVRSk7DQorDQorICAgICAg LyogUmVkbyBzcGVjaWFsIHN0dWZmLiAgKi8NCisgICAgICBsZGVtdWxfYWZ0 ZXJfYWxsb2NhdGlvbiAoKTsNCisNCisgICAgICAvKiBEbyB0aGUgYXNzaWdu bWVudHMgYWdhaW4uICAqLw0KKyAgICAgIGxhbmdfZG9fYXNzaWdubWVudHMg KCk7DQorICAgIH0NCisgIHJlbG9jX3MtPmNvbnRlbnRzID0gcmVsb2NfZDsN Cit9DQpkaWZmIC1yTmJ1IGJpbnV0aWxzLTIuMTdfb3JnL2xkL3BlcC1kbGwu aCBiaW51dGlscy0yLjE3L2xkL3BlcC1kbGwuaAotLS0gYmludXRpbHMtMi4x N19vcmcvbGQvcGVwLWRsbC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAw MDAwICswMTAwCisrKyBiaW51dGlscy0yLjE3L2xkL3BlcC1kbGwuaAkyMDA2 LTA4LTE3IDA5OjEzOjM1LjAwMDAwMDAwMCArMDIwMApAQCAtMCwwICsxLDY0 IEBACisvKiBwZXAtZGxsLmg6IEhlYWRlciBmaWxlIGZvciByb3V0aW5lcyB1 c2VkIHRvIGJ1aWxkIFdpbmRvd3MgRExMcy4KKyAgIENvcHlyaWdodCAxOTk1 LCAxOTk2LCAxOTk5LCAyMDAxLCAyMDAyLCAyMDA0IEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBC RkQsIHRoZSBCaW5hcnkgRmlsZSBEZXNjcmlwdG9yIGxpYnJhcnkuCisKKyAg IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9u ZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl ZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g U3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg VVNBLgorICAgCisgICBXcml0dGVuIGJ5IEthaSBUaWV0eiwgT25lVmlzaW9u IFNvZnR3YXJlIEdtYkgmQ29LZy4KKyovCisKKyNpZm5kZWYgUEVQX0RMTF9I CisjZGVmaW5lIFBFUF9ETExfSAorCisjaW5jbHVkZSAiYmZkLmgiCisjaW5j bHVkZSAic3lzZGVwLmgiCisjaW5jbHVkZSAiYmZkbGluay5oIgorI2luY2x1 ZGUgImRlZmZpbGUuaCIKKworZXh0ZXJuIGRlZl9maWxlICpwZXBfZGVmX2Zp bGU7CitleHRlcm4gaW50IHBlcF9kbGxfZXhwb3J0X2V2ZXJ5dGhpbmc7Citl eHRlcm4gaW50IHBlcF9kbGxfZG9fZGVmYXVsdF9leGNsdWRlczsKK2V4dGVy biBpbnQgcGVwX2RsbF9raWxsX2F0czsKK2V4dGVybiBpbnQgcGVwX2RsbF9z dGRjYWxsX2FsaWFzZXM7CitleHRlcm4gaW50IHBlcF9kbGxfd2Fybl9kdXBf ZXhwb3J0czsKK2V4dGVybiBpbnQgcGVwX2RsbF9jb21wYXRfaW1wbGliOwor ZXh0ZXJuIGludCBwZXBfZGxsX2V4dHJhX3BlX2RlYnVnOworCitleHRlcm4g dm9pZCBwZXBfZGxsX2lkX3RhcmdldAorICAoY29uc3QgY2hhciAqKTsKK2V4 dGVybiB2b2lkIHBlcF9kbGxfYWRkX2V4Y2x1ZGVzCisgIChjb25zdCBjaGFy ICosIGNvbnN0IGludCk7CitleHRlcm4gdm9pZCBwZXBfZGxsX2dlbmVyYXRl X2RlZl9maWxlCisgIChjb25zdCBjaGFyICopOworZXh0ZXJuIHZvaWQgcGVw X2RsbF9nZW5lcmF0ZV9pbXBsaWIKKyAgKGRlZl9maWxlICosIGNvbnN0IGNo YXIgKik7CitleHRlcm4gdm9pZCBwZXBfcHJvY2Vzc19pbXBvcnRfZGVmcwor ICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICopOworZXh0ZXJuIGJm ZF9ib29sZWFuIHBlcF9pbXBsaWVkX2ltcG9ydF9kbGwKKyAgKGNvbnN0IGNo YXIgKik7CitleHRlcm4gdm9pZCBwZXBfZGxsX2J1aWxkX3NlY3Rpb25zCisg IChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKik7CitleHRlcm4gdm9p ZCBwZXBfZXhlX2J1aWxkX3NlY3Rpb25zCisgIChiZmQgKiwgc3RydWN0IGJm ZF9saW5rX2luZm8gKik7CitleHRlcm4gdm9pZCBwZXBfZGxsX2ZpbGxfc2Vj dGlvbnMKKyAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKK2V4 dGVybiB2b2lkIHBlcF9leGVfZmlsbF9zZWN0aW9ucworICAoYmZkICosIHN0 cnVjdCBiZmRfbGlua19pbmZvICopOworZXh0ZXJuIHZvaWQgcGVwX3dhbGtf cmVsb2NzX29mX3N5bWJvbAorICAoc3RydWN0IGJmZF9saW5rX2luZm8gKiwg Y29uc3QgY2hhciAqLCBpbnQgKCopIChhcmVsZW50ICosIGFzZWN0aW9uICop KTsKK2V4dGVybiB2b2lkIHBlcF9jcmVhdGVfaW1wb3J0X2ZpeHVwCisgIChh cmVsZW50ICogcmVsLCBhc2VjdGlvbiAqLCBpbnQpOworI2VuZGlmIC8qIFBF X0RMTF9IICovCmRpZmYgLXJOYnUgYmludXRpbHMtMi4xN19vcmcvbGQvcG8v UE9URklMRVMuaW4gYmludXRpbHMtMi4xNy9sZC9wby9QT1RGSUxFUy5pbgot LS0gYmludXRpbHMtMi4xN19vcmcvbGQvcG8vUE9URklMRVMuaW4JMjAwNi0w NC0xNiAyMDoyMTo1MS4wMDAwMDAwMDAgKzAyMDAKKysrIGJpbnV0aWxzLTIu MTcvbGQvcG8vUE9URklMRVMuaW4JMjAwNi0wOC0wMiAxMzo0NDo0Ny4wMDAw MDAwMDAgKzAyMDAKQEAgLTI4LDMgKzI4LDUgQEAKIG1yaS5oCiBwZS1kbGwu YwogcGUtZGxsLmgKK3BlcC1kbGwuYworcGVwLWRsbC5oCmRpZmYgLXJOYnUg YmludXRpbHMtMi4xN19vcmcvbGQvc2NyaXB0dGVtcGwvcGVwLnNjIGJpbnV0 aWxzLTIuMTcvbGQvc2NyaXB0dGVtcGwvcGVwLnNjCi0tLSBiaW51dGlscy0y LjE3X29yZy9sZC9zY3JpcHR0ZW1wbC9wZXAuc2MJMTk3MC0wMS0wMSAwMTow MDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIGJpbnV0aWxzLTIuMTcvbGQvc2Ny aXB0dGVtcGwvcGVwLnNjCTIwMDYtMDctMjggMTQ6MTI6MjIuMDAwMDAwMDAw ICswMjAwCkBAIC0wLDAgKzEsMjcyIEBACisjIExpbmtlciBzY3JpcHQgZm9y IFBFLgorCitpZiB0ZXN0IC16ICIke1JFTE9DQVRFQUJMRV9PVVRQVVRfRk9S TUFUfSI7IHRoZW4KKyAgUkVMT0NBVEVBQkxFX09VVFBVVF9GT1JNQVQ9JHtP VVRQVVRfRk9STUFUfQorZmkKKworIyBXZSBjYW4ndCBlYXNpbHkgYW5kIHBv cnRhYmx5IGdldCBhbiB1bnF1b3RlZCAkIGluIGEgc2hlbGwKKyMgc3Vic3Rp dHV0aW9uLCBzbyB3ZSBkbyB0aGlzIGluc3RlYWQuCisjIFNvcnRpbmcgb2Yg dGhlIC5mb28kKiBzZWN0aW9ucyBpcyByZXF1aXJlZCBieSB0aGUgZGVmaW5p dGlvbiBvZgorIyBncm91cGVkIHNlY3Rpb25zIGluIFBFLgorIyBTb3J0aW5n IG9mIHRoZSBmaWxlIG5hbWVzIGluIFJfSURBVEEgaXMgcmVxdWlyZWQgYnkg dGhlCisjIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgZGxsdG9vbCAodGhp cyBjb3VsZCBwcm9iYWJseSBiZSBjaGFuZ2VkIHRvCisjIHVzZSBncm91cGVk IHNlY3Rpb25zIGluc3RlYWQpLgoraWYgdGVzdCAiJHtSRUxPQ0FUSU5HfSI7 IHRoZW4KKyAgUl9URVhUPScqKFNPUlQoLnRleHQkKikpJworICBSX0RBVEE9 JyooU09SVCguZGF0YSQqKSknCisgIFJfUkRBVEE9JyooU09SVCgucmRhdGEk KikpJworICBSX0lEQVRBPScKKyAgICBTT1JUKCopKC5pZGF0YSQyKQorICAg IFNPUlQoKikoLmlkYXRhJDMpCisgICAgLyogVGhlc2UgemVyb2VzIG1hcmsg dGhlIGVuZCBvZiB0aGUgaW1wb3J0IGxpc3QuICAqLworICAgIExPTkcgKDAp OyBMT05HICgwKTsgTE9ORyAoMCk7IExPTkcgKDApOyBMT05HICgwKTsKKyAg ICBTT1JUKCopKC5pZGF0YSQ0KQorICAgIFNPUlQoKikoLmlkYXRhJDUpCisg ICAgU09SVCgqKSguaWRhdGEkNikKKyAgICBTT1JUKCopKC5pZGF0YSQ3KScK KyAgUl9DUlRfWEM9JyooU09SVCguQ1JUJFhDKikpICAvKiBDIGluaXRpYWxp emF0aW9uICovJworICBSX0NSVF9YST0nKihTT1JUKC5DUlQkWEkqKSkgIC8q IEMrKyBpbml0aWFsaXphdGlvbiAqLycKKyAgUl9DUlRfWEw9JyooU09SVCgu Q1JUJFhMKikpICAvKiBUTFMgY2FsbGJhY2tzICovJworICBSX0NSVF9YUD0n KihTT1JUKC5DUlQkWFAqKSkgIC8qIFByZS10ZXJtaW5hdGlvbiAqLycKKyAg Ul9DUlRfWFQ9JyooU09SVCguQ1JUJFhUKikpICAvKiBUZXJtaW5hdGlvbiAq LycKKyAgUl9UTFM9JworICAgICooLnRscykKKyAgICAqKC50bHMkKQorICAg ICooU09SVCgudGxzJCopKScKKyAgUl9SU1JDPScqKFNPUlQoLnJzcmMkKikp JworZWxzZQorICBSX1RFWFQ9CisgIFJfREFUQT0KKyAgUl9SREFUQT0KKyAg Ul9JREFUQT0KKyAgUl9DUlQ9CisgIFJfUlNSQz0KK2ZpCisKK2NhdCA8PEVP RgorJHtSRUxPQ0FUSU5HK09VVFBVVF9GT1JNQVQoJHtPVVRQVVRfRk9STUFU fSl9Ciske1JFTE9DQVRJTkctT1VUUFVUX0ZPUk1BVCgke1JFTE9DQVRFQUJM RV9PVVRQVVRfRk9STUFUfSl9Ciske09VVFBVVF9BUkNIK09VVFBVVF9BUkNI KCR7T1VUUFVUX0FSQ0h9KX0KKworJHtMSUJfU0VBUkNIX0RJUlN9CisKK1NF Q1RJT05TCit7CisgICR7UkVMT0NBVElORysvKiBNYWtlIHRoZSB2aXJ0dWFs IGFkZHJlc3MgYW5kIGZpbGUgb2Zmc2V0IHN5bmNlZCBpZiB0aGUgYWxpZ25t ZW50IGlzfQorICAke1JFTE9DQVRJTkcrICAgbG93ZXIgdGhhbiB0aGUgdGFy Z2V0IHBhZ2Ugc2l6ZS4gKi99CisgICR7UkVMT0NBVElORysuID0gU0laRU9G X0hFQURFUlM7fQorICAke1JFTE9DQVRJTkcrLiA9IEFMSUdOKF9fc2VjdGlv bl9hbGlnbm1lbnRfXyk7fQorICAudGV4dCAke1JFTE9DQVRJTkcrIF9faW1h Z2VfYmFzZV9fICsgKCBfX3NlY3Rpb25fYWxpZ25tZW50X18gPCAke1RBUkdF VF9QQUdFX1NJWkV9ID8gLiA6IF9fc2VjdGlvbl9hbGlnbm1lbnRfXyApfSA6 IAorICB7CisgICAgJHtSRUxPQ0FUSU5HKyAqKC5pbml0KX0KKyAgICAqKC50 ZXh0KQorICAgICR7Ul9URVhUfQorICAgICooLmdsdWVfN3QpCisgICAgKigu Z2x1ZV83KQorICAgICR7Q09OU1RSVUNUSU5HKyBfX19DVE9SX0xJU1RfXyA9 IC47IF9fQ1RPUl9MSVNUX18gPSAuIDsgCisJCQlMT05HICgtMSk7KiguY3Rv cnMpOyAqKC5jdG9yKTsgKihTT1JUKC5jdG9ycy4qKSk7ICBMT05HICgwKTsg fQorICAgICR7Q09OU1RSVUNUSU5HKyBfX19EVE9SX0xJU1RfXyA9IC47IF9f RFRPUl9MSVNUX18gPSAuIDsgCisJCQlMT05HICgtMSk7ICooLmR0b3JzKTsg KiguZHRvcik7ICooU09SVCguZHRvcnMuKikpOyAgTE9ORyAoMCk7IH0KKyAg ICAke1JFTE9DQVRJTkcrICooLmZpbmkpfQorICAgIC8qID8/PyBXaHkgaXMg LmdjY19leGMgaGVyZT8gICovCisgICAgJHtSRUxPQ0FUSU5HKyAqKC5nY2Nf ZXhjKX0KKyAgICAke1JFTE9DQVRJTkcrUFJPVklERSAoZXRleHQgPSAuKTt9 CisgICAgKiguZ2NjX2V4Y2VwdF90YWJsZSkKKyAgfQorCisgIC8qIFRoZSBD eWd3aW4zMiBsaWJyYXJ5IHVzZXMgYSBzZWN0aW9uIHRvIGF2b2lkIGNvcHlp bmcgY2VydGFpbiBkYXRhCisgICAgIG9uIGZvcmsuICBUaGlzIHVzZWQgdG8g YmUgbmFtZWQgIi5kYXRhJG5vY29weSIuICBUaGUgbGlua2VyIHVzZWQKKyAg ICAgdG8gaW5jbHVkZSB0aGlzIGJldHdlZW4gX19kYXRhX3N0YXJ0X18gYW5k IF9fZGF0YV9lbmRfXywgYnV0IHRoYXQKKyAgICAgYnJlYWtzIGJ1aWxkaW5n IHRoZSBjeWd3aW4zMiBkbGwuICBJbnN0ZWFkLCB3ZSBuYW1lIHRoZSBzZWN0 aW9uCisgICAgICIuZGF0YV9jeWd3aW5fbm9jb3B5IiBhbmQgZXhwbGljdGx5 IGluY2x1ZGUgaXQgYWZ0ZXIgX19kYXRhX2VuZF9fLiAqLworCisgIC5kYXRh ICR7UkVMT0NBVElORytCTE9DSyhfX3NlY3Rpb25fYWxpZ25tZW50X18pfSA6 IAorICB7CisgICAgJHtSRUxPQ0FUSU5HK19fZGF0YV9zdGFydF9fID0gLiA7 fQorICAgICooLmRhdGEpCisgICAgKiguZGF0YTIpCisgICAgJHtSX0RBVEF9 CisgICAgKiguamNyKQorICAgICR7UkVMT0NBVElORytfX2RhdGFfZW5kX18g PSAuIDt9CisgICAgJHtSRUxPQ0FUSU5HKyooLmRhdGFfY3lnd2luX25vY29w eSl9CisgIH0KKworICAucmRhdGEgJHtSRUxPQ0FUSU5HK0JMT0NLKF9fc2Vj dGlvbl9hbGlnbm1lbnRfXyl9IDoKKyAgeworICAgICooLnJkYXRhKQorICAg ICR7Ul9SREFUQX0KKyAgICAqKC5laF9mcmFtZSkKKyAgICAke1JFTE9DQVRJ TkcrX19fUlVOVElNRV9QU0VVRE9fUkVMT0NfTElTVF9fID0gLjt9CisgICAg JHtSRUxPQ0FUSU5HK19fUlVOVElNRV9QU0VVRE9fUkVMT0NfTElTVF9fID0g Ljt9CisgICAgKigucmRhdGFfcnVudGltZV9wc2V1ZG9fcmVsb2MpCisgICAg JHtSRUxPQ0FUSU5HK19fX1JVTlRJTUVfUFNFVURPX1JFTE9DX0xJU1RfRU5E X18gPSAuO30KKyAgICAke1JFTE9DQVRJTkcrX19SVU5USU1FX1BTRVVET19S RUxPQ19MSVNUX0VORF9fID0gLjt9CisgIH0KKworICAucGRhdGEgJHtSRUxP Q0FUSU5HK0JMT0NLKF9fc2VjdGlvbl9hbGlnbm1lbnRfXyl9IDoKKyAgewor ICAgICooLnBkYXRhKQorICB9CisKKyAgLmJzcyAke1JFTE9DQVRJTkcrQkxP Q0soX19zZWN0aW9uX2FsaWdubWVudF9fKX0gOgorICB7CisgICAgJHtSRUxP Q0FUSU5HK19fYnNzX3N0YXJ0X18gPSAuIDt9CisgICAgKiguYnNzKQorICAg ICooQ09NTU9OKQorICAgICR7UkVMT0NBVElORytfX2Jzc19lbmRfXyA9IC4g O30KKyAgfQorCisgIC5lZGF0YSAke1JFTE9DQVRJTkcrQkxPQ0soX19zZWN0 aW9uX2FsaWdubWVudF9fKX0gOgorICB7CisgICAgKiguZWRhdGEpCisgIH0K KworICAvRElTQ0FSRC8gOgorICB7CisgICAgKiguZGVidWdcJFMpCisgICAg KiguZGVidWdcJFQpCisgICAgKiguZGVidWdcJEYpCisgICAgKiguZHJlY3R2 ZSkKKyAgfQorCisgIC5pZGF0YSAke1JFTE9DQVRJTkcrQkxPQ0soX19zZWN0 aW9uX2FsaWdubWVudF9fKX0gOgorICB7CisgICAgLyogVGhpcyBjYW5ub3Qg Y3VycmVudGx5IGJlIGhhbmRsZWQgd2l0aCBncm91cGVkIHNlY3Rpb25zLgor CVNlZSBwZXAuZW06c29ydF9zZWN0aW9ucy4gICovCisgICAgJHtSX0lEQVRB fQorICB9CisgIC5DUlQgJHtSRUxPQ0FUSU5HK0JMT0NLKF9fc2VjdGlvbl9h bGlnbm1lbnRfXyl9IDoKKyAgeyAJCQkJCQorICAgICR7UkVMT0NBVElORytf X19jcnRfeGNfc3RhcnRfXyA9IC4gO30KKyAgICAke1JfQ1JUX1hDfQorICAg ICR7UkVMT0NBVElORytfX19jcnRfeGNfZW5kX18gPSAuIDt9CisgICAgJHtS RUxPQ0FUSU5HK19fX2NydF94aV9zdGFydF9fID0gLiA7fQorICAgICR7Ul9D UlRfWEl9CisgICAgJHtSRUxPQ0FUSU5HK19fX2NydF94aV9lbmRfXyA9IC4g O30KKyAgICAke1JFTE9DQVRJTkcrX19fY3J0X3hsX3N0YXJ0X18gPSAuIDt9 CisgICAgJHtSX0NSVF9YTH0KKyAgICAvKiBfX19jcnRfeGxfZW5kX18gaXMg ZGVmaW5lZCBpbiB0aGUgVExTIERpcmVjdG9yeSBzdXBwb3J0IGNvZGUgKi8K KyAgICAke1JFTE9DQVRJTkcrX19fY3J0X3hwX3N0YXJ0X18gPSAuIDt9Cisg ICAgJHtSX0NSVF9YUH0KKyAgICAke1JFTE9DQVRJTkcrX19fY3J0X3hwX2Vu ZF9fID0gLiA7fQorICAgICR7UkVMT0NBVElORytfX19jcnRfeHRfc3RhcnRf XyA9IC4gO30KKyAgICAke1JfQ1JUX1hUfQorICAgICR7UkVMT0NBVElORytf X19jcnRfeHRfZW5kX18gPSAuIDt9CisgIH0KKworICAudGxzICR7UkVMT0NB VElORytCTE9DSyhfX3NlY3Rpb25fYWxpZ25tZW50X18pfSA6CisgIHsgCQkJ CQkKKyAgICAke1JFTE9DQVRJTkcrX19fdGxzX3N0YXJ0X18gPSAuIDt9Cisg ICAgJHtSX1RMU30KKyAgICAke1JFTE9DQVRJTkcrX19fdGxzX2VuZF9fID0g LiA7fQorICB9CisKKyAgLmVuZGp1bmsgJHtSRUxPQ0FUSU5HK0JMT0NLKF9f c2VjdGlvbl9hbGlnbm1lbnRfXyl9IDoKKyAgeworICAgIC8qIGVuZCBpcyBk ZXByZWNhdGVkLCBkb24ndCB1c2UgaXQgKi8KKyAgICAke1JFTE9DQVRJTkcr UFJPVklERSAoZW5kID0gLik7fQorICAgICR7UkVMT0NBVElORytQUk9WSURF ICggX2VuZCA9IC4pO30KKyAgICAke1JFTE9DQVRJTkcrIF9fZW5kX18gPSAu O30KKyAgfQorCisgIC5yc3JjICR7UkVMT0NBVElORytCTE9DSyhfX3NlY3Rp b25fYWxpZ25tZW50X18pfSA6CisgIHsgCQkJCQkKKyAgICAqKC5yc3JjKQor ICAgICR7Ul9SU1JDfQorICB9CisKKyAgLnJlbG9jICR7UkVMT0NBVElORytC TE9DSyhfX3NlY3Rpb25fYWxpZ25tZW50X18pfSA6CisgIHsgCQkJCQkKKyAg ICAqKC5yZWxvYykKKyAgfQorCisgIC5zdGFiICR7UkVMT0NBVElORytCTE9D SyhfX3NlY3Rpb25fYWxpZ25tZW50X18pfSAke1JFTE9DQVRJTkcrKE5PTE9B RCl9IDoKKyAgeworICAgICooLnN0YWIpCisgIH0KKworICAuc3RhYnN0ciAk e1JFTE9DQVRJTkcrQkxPQ0soX19zZWN0aW9uX2FsaWdubWVudF9fKX0gJHtS RUxPQ0FUSU5HKyhOT0xPQUQpfSA6CisgIHsKKyAgICAqKC5zdGFic3RyKQor ICB9CisKKyAgLyogRFdBUkYgZGVidWcgc2VjdGlvbnMuCisgICAgIFN5bWJv bHMgaW4gdGhlIERXQVJGIGRlYnVnZ2luZyBzZWN0aW9ucyBhcmUgcmVsYXRp dmUgdG8gdGhlIGJlZ2lubmluZworICAgICBvZiB0aGUgc2VjdGlvbi4gIFVu bGlrZSBvdGhlciB0YXJnZXRzIHRoYXQgZmFrZSB0aGlzIGJ5IHB1dHRpbmcg dGhlCisgICAgIHNlY3Rpb24gVk1BIGF0IDAsIHRoZSBQRSBmb3JtYXQgd2ls bCBub3QgYWxsb3cgaXQuICAqLworICAgICAKKyAgLyogRFdBUkYgMS4xIGFu ZCBEV0FSRiAyLiAgKi8KKyAgLmRlYnVnX2FyYW5nZXMgJHtSRUxPQ0FUSU5H K0JMT0NLKF9fc2VjdGlvbl9hbGlnbm1lbnRfXyl9ICR7UkVMT0NBVElORyso Tk9MT0FEKX0gOgorICB7CisgICAgKiguZGVidWdfYXJhbmdlcykKKyAgfQor CisgIC5kZWJ1Z19wdWJuYW1lcyAke1JFTE9DQVRJTkcrQkxPQ0soX19zZWN0 aW9uX2FsaWdubWVudF9fKX0gJHtSRUxPQ0FUSU5HKyhOT0xPQUQpfSA6Cisg IHsKKyAgICAqKC5kZWJ1Z19wdWJuYW1lcykKKyAgfQorCisgIC8qIERXQVJG IDIuICAqLworICAuZGVidWdfaW5mbyAke1JFTE9DQVRJTkcrQkxPQ0soX19z ZWN0aW9uX2FsaWdubWVudF9fKX0gJHtSRUxPQ0FUSU5HKyhOT0xPQUQpfSA6 CisgIHsKKyAgICAqKC5kZWJ1Z19pbmZvKSAqKC5nbnUubGlua29uY2Uud2ku KikKKyAgfQorCisgIC5kZWJ1Z19hYmJyZXYgJHtSRUxPQ0FUSU5HK0JMT0NL KF9fc2VjdGlvbl9hbGlnbm1lbnRfXyl9ICR7UkVMT0NBVElORysoTk9MT0FE KX0gOgorICB7CisgICAgKiguZGVidWdfYWJicmV2KQorICB9CisKKyAgLmRl YnVnX2xpbmUgJHtSRUxPQ0FUSU5HK0JMT0NLKF9fc2VjdGlvbl9hbGlnbm1l bnRfXyl9ICR7UkVMT0NBVElORysoTk9MT0FEKX0gOgorICB7CisgICAgKigu ZGVidWdfbGluZSkKKyAgfQorCisgIC5kZWJ1Z19mcmFtZSAke1JFTE9DQVRJ TkcrQkxPQ0soX19zZWN0aW9uX2FsaWdubWVudF9fKX0gJHtSRUxPQ0FUSU5H KyhOT0xPQUQpfSA6CisgIHsKKyAgICAqKC5kZWJ1Z19mcmFtZSkKKyAgfQor CisgIC5kZWJ1Z19zdHIgJHtSRUxPQ0FUSU5HK0JMT0NLKF9fc2VjdGlvbl9h bGlnbm1lbnRfXyl9ICR7UkVMT0NBVElORysoTk9MT0FEKX0gOgorICB7Cisg ICAgKiguZGVidWdfc3RyKQorICB9CisKKyAgLmRlYnVnX2xvYyAke1JFTE9D QVRJTkcrQkxPQ0soX19zZWN0aW9uX2FsaWdubWVudF9fKX0gJHtSRUxPQ0FU SU5HKyhOT0xPQUQpfSA6CisgIHsKKyAgICAqKC5kZWJ1Z19sb2MpCisgIH0K KworICAuZGVidWdfbWFjaW5mbyAke1JFTE9DQVRJTkcrQkxPQ0soX19zZWN0 aW9uX2FsaWdubWVudF9fKX0gJHtSRUxPQ0FUSU5HKyhOT0xPQUQpfSA6Cisg IHsKKyAgICAqKC5kZWJ1Z19tYWNpbmZvKQorICB9CisKKyAgLyogU0dJL01J UFMgRFdBUkYgMiBleHRlbnNpb25zLiAgKi8KKyAgLmRlYnVnX3dlYWtuYW1l cyAke1JFTE9DQVRJTkcrQkxPQ0soX19zZWN0aW9uX2FsaWdubWVudF9fKX0g JHtSRUxPQ0FUSU5HKyhOT0xPQUQpfSA6CisgIHsKKyAgICAqKC5kZWJ1Z193 ZWFrbmFtZXMpCisgIH0KKworICAuZGVidWdfZnVuY25hbWVzICR7UkVMT0NB VElORytCTE9DSyhfX3NlY3Rpb25fYWxpZ25tZW50X18pfSAke1JFTE9DQVRJ TkcrKE5PTE9BRCl9IDoKKyAgeworICAgICooLmRlYnVnX2Z1bmNuYW1lcykK KyAgfQorCisgIC5kZWJ1Z190eXBlbmFtZXMgJHtSRUxPQ0FUSU5HK0JMT0NL KF9fc2VjdGlvbl9hbGlnbm1lbnRfXyl9ICR7UkVMT0NBVElORysoTk9MT0FE KX0gOgorICB7CisgICAgKiguZGVidWdfdHlwZW5hbWVzKQorICB9CisKKyAg LmRlYnVnX3Zhcm5hbWVzICR7UkVMT0NBVElORytCTE9DSyhfX3NlY3Rpb25f YWxpZ25tZW50X18pfSAke1JFTE9DQVRJTkcrKE5PTE9BRCl9IDoKKyAgewor ICAgICooLmRlYnVnX3Zhcm5hbWVzKQorICB9CisKKyAgLyogRFdBUkYgMy4g ICovCisgIC5kZWJ1Z19yYW5nZXMgJHtSRUxPQ0FUSU5HK0JMT0NLKF9fc2Vj dGlvbl9hbGlnbm1lbnRfXyl9ICR7UkVMT0NBVElORysoTk9MT0FEKX0gOgor ICB7CisgICAgKiguZGVidWdfcmFuZ2VzKQorICB9Cit9CitFT0YK --=_mixed 003527DBC12571CD_=--