From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751335AbVIHO5c (ORCPT ); Thu, 8 Sep 2005 10:57:32 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1751381AbVIHO5c (ORCPT ); Thu, 8 Sep 2005 10:57:32 -0400 Received: from public.id2-vpn.continvity.gns.novell.com ([195.33.99.129]:8288 "EHLO emea1-mh.id2.novell.com") by vger.kernel.org with ESMTP id S1751335AbVIHO5b (ORCPT ); Thu, 8 Sep 2005 10:57:31 -0400 Message-Id: <43206DBB0200007800024447@emea1-mh.id2.novell.com> X-Mailer: Novell GroupWise Internet Agent 7.0 Date: Thu, 08 Sep 2005 16:58:35 +0200 From: "Jan Beulich" To: Subject: [PATCH] new kallsyms approach Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=__PartD1F3BF8B.0__=" Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org This is a MIME message. If you are reading this text, you may want to consider changing to a mail reader or gateway that understands how to properly handle MIME multipart messages. --=__PartD1F3BF8B.0__= Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Content-Disposition: inline (Note: Patch only attached due to size restrictions.) This patch provides al alternative to the pre-exisiting kallsyms code. That code, from a kernel debugger perspective at least, suffers from incomplete information, making it impossible to (a) disambiguate multiple static functions of the same name (in different source files), (b) determine a complete set of attributes for a symbol (namely, the symbol's size, but also its type, which gets converted to an nm-like one- character representation), and (c) retain full section information This new approach basically makes handling core kernel and module symbols the same, by retrieving the kernel's section, symbol, and string tables rather than parsing the system map. At once it adds the functionality to strip unneeded symbols from modules, which results in non-neglectable space savings for typical distributions (which large amounts of modules). Signed-off-by: Jan Beulich --=__PartD1F3BF8B.0__= Content-Type: application/octet-stream; name="linux-2.6.13-kallsyms.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="linux-2.6.13-kallsyms.patch" KE5vdGU6IFBhdGNoIG9ubHkgYXR0YWNoZWQgZHVlIHRvIHNpemUgcmVzdHJpY3Rpb25zLikKClRo aXMgcGF0Y2ggcHJvdmlkZXMgYWwgYWx0ZXJuYXRpdmUgdG8gdGhlIHByZS1leGlzaXRpbmcga2Fs bHN5bXMgY29kZS4KVGhhdCBjb2RlLCBmcm9tIGEga2VybmVsIGRlYnVnZ2VyIHBlcnNwZWN0aXZl IGF0IGxlYXN0LCBzdWZmZXJzIGZyb20KaW5jb21wbGV0ZSBpbmZvcm1hdGlvbiwgbWFraW5nIGl0 IGltcG9zc2libGUgdG8KKGEpIGRpc2FtYmlndWF0ZSBtdWx0aXBsZSBzdGF0aWMgZnVuY3Rpb25z IG9mIHRoZSBzYW1lIG5hbWUgKGluIGRpZmZlcmVudApzb3VyY2UgZmlsZXMpLAooYikgZGV0ZXJt aW5lIGEgY29tcGxldGUgc2V0IG9mIGF0dHJpYnV0ZXMgZm9yIGEgc3ltYm9sIChuYW1lbHksIHRo ZQpzeW1ib2wncyBzaXplLCBidXQgYWxzbyBpdHMgdHlwZSwgd2hpY2ggZ2V0cyBjb252ZXJ0ZWQg dG8gYW4gbm0tbGlrZSBvbmUtCmNoYXJhY3RlciByZXByZXNlbnRhdGlvbiksIGFuZAooYykgcmV0 YWluIGZ1bGwgc2VjdGlvbiBpbmZvcm1hdGlvbgoKVGhpcyBuZXcgYXBwcm9hY2ggYmFzaWNhbGx5 IG1ha2VzIGhhbmRsaW5nIGNvcmUga2VybmVsIGFuZCBtb2R1bGUgc3ltYm9scwp0aGUgc2FtZSwg YnkgcmV0cmlldmluZyB0aGUga2VybmVsJ3Mgc2VjdGlvbiwgc3ltYm9sLCBhbmQgc3RyaW5nIHRh YmxlcwpyYXRoZXIgdGhhbiBwYXJzaW5nIHRoZSBzeXN0ZW0gbWFwLgoKQXQgb25jZSBpdCBhZGRz IHRoZSBmdW5jdGlvbmFsaXR5IHRvIHN0cmlwIHVubmVlZGVkIHN5bWJvbHMgZnJvbSBtb2R1bGVz LAp3aGljaCByZXN1bHRzIGluIG5vbi1uZWdsZWN0YWJsZSBzcGFjZSBzYXZpbmdzIGZvciB0eXBp Y2FsIGRpc3RyaWJ1dGlvbnMKKHdoaWNoIGxhcmdlIGFtb3VudHMgb2YgbW9kdWxlcykuCgpTaWdu ZWQtb2ZmLWJ5OiBKYW4gQmV1bGljaCA8amJldWxpY2hAbm92ZWxsLmNvbT4KCmRpZmYgLU5wcnUg Mi42LjEzL2FyY2gvYWxwaGEvZGVmY29uZmlnIDIuNi4xMy1rYWxsc3ltcy9hcmNoL2FscGhhL2Rl ZmNvbmZpZwotLS0gMi42LjEzL2FyY2gvYWxwaGEvZGVmY29uZmlnCTIwMDUtMDgtMjkgMDE6NDE6 MDEuMDAwMDAwMDAwICswMjAwCisrKyAyLjYuMTMta2FsbHN5bXMvYXJjaC9hbHBoYS9kZWZjb25m aWcJMjAwNS0wOS0wNyAxMjozNjowMi4wMDAwMDAwMDAgKzAyMDAKQEAgLTMyLDYgKzMyLDcgQEAg Q09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKICMg Q09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKIENPTkZJR19LQUxMU1lNUz15CitDT05GSUdfS0FM TFNZTVNfVFJBRElUSU9OQUw9eQogQ09ORklHX0tBTExTWU1TX0FMTD15CiAjIENPTkZJR19LQUxM U1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKIENPTkZJR19GVVRFWD15CmRpZmYgLU5wcnUgMi42 LjEzL2FyY2gvZnJ2L2RlZmNvbmZpZyAyLjYuMTMta2FsbHN5bXMvYXJjaC9mcnYvZGVmY29uZmln Ci0tLSAyLjYuMTMvYXJjaC9mcnYvZGVmY29uZmlnCTIwMDUtMDgtMjkgMDE6NDE6MDEuMDAwMDAw MDAwICswMjAwCisrKyAyLjYuMTMta2FsbHN5bXMvYXJjaC9mcnYvZGVmY29uZmlnCTIwMDUtMDkt MDcgMTI6MzQ6MDkuMDAwMDAwMDAwICswMjAwCkBAIC0zMyw2ICszMyw3IEBAIENPTkZJR19TWVND VEw9eQogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKIENP TkZJR19LQUxMU1lNUz15CitDT05GSUdfS0FMTFNZTVNfVFJBRElUSU9OQUw9eQogIyBDT05GSUdf S0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMg bm90IHNldAogQ09ORklHX1BSSU5USz15CmRpZmYgLU5wcnUgMi42LjEzL2FyY2gvaTM4Ni9kZWZj b25maWcgMi42LjEzLWthbGxzeW1zL2FyY2gvaTM4Ni9kZWZjb25maWcKLS0tIDIuNi4xMy9hcmNo L2kzODYvZGVmY29uZmlnCTIwMDUtMDgtMjkgMDE6NDE6MDEuMDAwMDAwMDAwICswMjAwCisrKyAy LjYuMTMta2FsbHN5bXMvYXJjaC9pMzg2L2RlZmNvbmZpZwkyMDA1LTA5LTA3IDEyOjMyOjE0LjAw MDAwMDAwMCArMDIwMApAQCAtMjgsNiArMjgsOCBAQCBDT05GSUdfSE9UUExVRz15CiAjIENPTkZJ R19JS0NPTkZJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CiBDT05G SUdfS0FMTFNZTVM9eQorQ09ORklHX0tBTExTWU1TX1RSQURJVElPTkFMPXkKKyMgQ09ORklHX0tB TExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9M TD15CiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKZGlmZiAtTnBydSAyLjYuMTMvYXJjaC9pMzg2L2tl cm5lbC9lbnRyeS5TIDIuNi4xMy1rYWxsc3ltcy9hcmNoL2kzODYva2VybmVsL2VudHJ5LlMKLS0t IDIuNi4xMy9hcmNoL2kzODYva2VybmVsL2VudHJ5LlMJMjAwNS0wOC0yOSAwMTo0MTowMS4wMDAw MDAwMDAgKzAyMDAKKysrIDIuNi4xMy1rYWxsc3ltcy9hcmNoL2kzODYva2VybmVsL2VudHJ5LlMJ MjAwNS0wOS0wNyAxNjoyMjoxOS4wMDAwMDAwMDAgKzAyMDAKQEAgLTEyOSw2ICsxMjksNyBAQCBF TlRSWShyZXRfZnJvbV9mb3JrKQogCUdFVF9USFJFQURfSU5GTyglZWJwKQogCXBvcGwgJWVheAog CWptcCBzeXNjYWxsX2V4aXQKK0VORChyZXRfZnJvbV9mb3JrKQogCiAvKgogICogUmV0dXJuIHRv IHVzZXIgbW9kZSBpcyBub3QgYXMgY29tcGxleCBhcyBhbGwgdGhpcyBsb29rcywKQEAgLTE1Niw2 ICsxNTcsNyBAQCBFTlRSWShyZXN1bWVfdXNlcnNwYWNlKQogCQkJCQkjIGludC9leGNlcHRpb24g cmV0dXJuPwogCWpuZSB3b3JrX3BlbmRpbmcKIAlqbXAgcmVzdG9yZV9hbGwKK0VORChyZXRfZnJv bV9leGNlcHRpb24pCiAKICNpZmRlZiBDT05GSUdfUFJFRU1QVAogRU5UUlkocmVzdW1lX2tlcm5l bCkKQEAgLTE3MCw2ICsxNzIsNyBAQCBuZWVkX3Jlc2NoZWQ6CiAJanogcmVzdG9yZV9hbGwKIAlj YWxsIHByZWVtcHRfc2NoZWR1bGVfaXJxCiAJam1wIG5lZWRfcmVzY2hlZAorRU5EKHJlc3VtZV9r ZXJuZWwpCiAjZW5kaWYKIAogLyogU1lTRU5URVJfUkVUVVJOIHBvaW50cyB0byBhZnRlciB0aGUg InN5c2VudGVyIiBpbnN0cnVjdGlvbiBpbgpAQCAtMjE5LDYgKzIyMiw3IEBAIHN5c2VudGVyX3Bh c3RfZXNwOgogCXhvcmwgJWVicCwlZWJwCiAJc3RpCiAJc3lzZXhpdAorRU5EUFJPQyhzeXNlbnRl cl9lbnRyeSkKIAogCiAJIyBzeXN0ZW0gY2FsbCBoYW5kbGVyIHN0dWIKQEAgLTI5Myw2ICsyOTcs NyBAQCBsZHRfc3M6CiAJLmFsaWduIDQKIAkubG9uZyAxYixpcmV0X2V4YwogLnByZXZpb3VzCitF TkRQUk9DKHN5c3RlbV9jYWxsKQogCiAJIyBwZXJmb3JtIHdvcmsgdGhhdCBuZWVkcyB0byBiZSBk b25lIGltbWVkaWF0ZWx5IGJlZm9yZSByZXN1bXB0aW9uCiAJQUxJR04KQEAgLTMzMCw2ICszMzUs NyBAQCB3b3JrX25vdGlmeXNpZ192ODY6CiAJeG9ybCAlZWR4LCAlZWR4CiAJY2FsbCBkb19ub3Rp ZnlfcmVzdW1lCiAJam1wIHJlc3RvcmVfYWxsCitFTkQod29ya19wZW5kaW5nKQogCiAJIyBwZXJm b3JtIHN5c2NhbGwgZXhpdCB0cmFjaW5nCiAJQUxJR04KQEAgLTM0Miw2ICszNDgsNyBAQCBzeXNj YWxsX3RyYWNlX2VudHJ5OgogCWNtcGwgJChucl9zeXNjYWxscyksICVlYXgKIAlqbmFlIHN5c2Nh bGxfY2FsbAogCWptcCBzeXNjYWxsX2V4aXQKK0VORChzeXNjYWxsX3RyYWNlX2VudHJ5KQogCiAJ IyBwZXJmb3JtIHN5c2NhbGwgZXhpdCB0cmFjaW5nCiAJQUxJR04KQEAgLTM1NCw2ICszNjEsNyBA QCBzeXNjYWxsX2V4aXRfd29yazoKIAltb3ZsICQxLCAlZWR4CiAJY2FsbCBkb19zeXNjYWxsX3Ry YWNlCiAJam1wIHJlc3VtZV91c2Vyc3BhY2UKK0VORChzeXNjYWxsX2V4aXRfd29yaykKIAogCUFM SUdOCiBzeXNjYWxsX2ZhdWx0OgpAQCAtMzYyLDExICszNzAsMTMgQEAgc3lzY2FsbF9mYXVsdDoK IAlHRVRfVEhSRUFEX0lORk8oJWVicCkKIAltb3ZsICQtRUZBVUxULEVBWCglZXNwKQogCWptcCBy ZXN1bWVfdXNlcnNwYWNlCitFTkQoc3lzY2FsbF9mYXVsdCkKIAogCUFMSUdOCiBzeXNjYWxsX2Jh ZHN5czoKIAltb3ZsICQtRU5PU1lTLEVBWCglZXNwKQogCWptcCByZXN1bWVfdXNlcnNwYWNlCitF TkQoc3lzY2FsbF9iYWRzeXMpCiAKICNkZWZpbmUgRklYVVBfRVNQRklYX1NUQUNLIFwKIAltb3Zs ICVlc3AsICVlYXg7IFwKQEAgLTM5NSwxOSArNDA1LDI0IEBAIHN5c2NhbGxfYmFkc3lzOgogICov CiAuZGF0YQogRU5UUlkoaW50ZXJydXB0KQotLnRleHQKKy5wcmV2aW91cwogCi12ZWN0b3I9MAog RU5UUlkoaXJxX2VudHJpZXNfc3RhcnQpCit2ZWN0b3I9MAogLnJlcHQgTlJfSVJRUwogCUFMSUdO CiAxOglwdXNobCAkdmVjdG9yLTI1NgogCWptcCBjb21tb25faW50ZXJydXB0Ci0uZGF0YQorIC5k YXRhCiAJLmxvbmcgMWIKLS50ZXh0Ci12ZWN0b3I9dmVjdG9yKzEKKyAucHJldmlvdXMKKyB2ZWN0 b3I9dmVjdG9yKzEKIC5lbmRyCitFTkQoaXJxX2VudHJpZXNfc3RhcnQpCisKKy5kYXRhCitFTkQo aW50ZXJydXB0KQorLnByZXZpb3VzCiAKIAlBTElHTgogY29tbW9uX2ludGVycnVwdDoKQEAgLTQx NSw2ICs0MzAsNyBAQCBjb21tb25faW50ZXJydXB0OgogCW1vdmwgJWVzcCwlZWF4CiAJY2FsbCBk b19JUlEKIAlqbXAgcmV0X2Zyb21faW50cgorRU5EUFJPQyhjb21tb25faW50ZXJydXB0KQogCiAj ZGVmaW5lIEJVSUxEX0lOVEVSUlVQVChuYW1lLCBucikJXAogRU5UUlkobmFtZSkJCQkJXApAQCAt NDIyLDcgKzQzOCw4IEBAIEVOVFJZKG5hbWUpCQkJCVwKIAlTQVZFX0FMTAkJCVwKIAltb3ZsICVl c3AsJWVheDsJCQlcCiAJY2FsbCBzbXBfLyoqL25hbWU7CQlcCi0Jam1wIHJldF9mcm9tX2ludHI7 CisJam1wIHJldF9mcm9tX2ludHI7CVwKK0VORFBST0MobmFtZSkKIAogLyogVGhlIGluY2x1ZGUg aXMgd2hlcmUgYWxsIG9mIHRoZSBTTVAgZXRjLiBpbnRlcnJ1cHRzIGNvbWUgZnJvbSAqLwogI2lu Y2x1ZGUgImVudHJ5X2FyY2guaCIKQEAgLTQzMCw2ICs0NDcsNyBAQCBFTlRSWShuYW1lKQkJCQlc CiBFTlRSWShkaXZpZGVfZXJyb3IpCiAJcHVzaGwgJDAJCQkjIG5vIGVycm9yIGNvZGUKIAlwdXNo bCAkZG9fZGl2aWRlX2Vycm9yCitFTkQoZGl2aWRlX2Vycm9yKQogCUFMSUdOCiBlcnJvcl9jb2Rl OgogCXB1c2hsICVkcwpAQCAtNDU2LDE2ICs0NzQsMTkgQEAgZXJyb3JfY29kZToKIAltb3ZsICVl c3AsJWVheAkJCSMgcHRfcmVncyBwb2ludGVyCiAJY2FsbCAqJWVkaQogCWptcCByZXRfZnJvbV9l eGNlcHRpb24KK0VORFBST0MoZXJyb3JfY29kZSkKIAogRU5UUlkoY29wcm9jZXNzb3JfZXJyb3Ip CiAJcHVzaGwgJDAKIAlwdXNobCAkZG9fY29wcm9jZXNzb3JfZXJyb3IKIAlqbXAgZXJyb3JfY29k ZQorRU5EKGNvcHJvY2Vzc29yX2Vycm9yKQogCiBFTlRSWShzaW1kX2NvcHJvY2Vzc29yX2Vycm9y KQogCXB1c2hsICQwCiAJcHVzaGwgJGRvX3NpbWRfY29wcm9jZXNzb3JfZXJyb3IKIAlqbXAgZXJy b3JfY29kZQorRU5EKHNpbWRfY29wcm9jZXNzb3JfZXJyb3IpCiAKIEVOVFJZKGRldmljZV9ub3Rf YXZhaWxhYmxlKQogCXB1c2hsICQtMQkJCSMgbWFyayB0aGlzIGFzIGFuIGludApAQCAtNDgxLDYg KzUwMiw3IEBAIGRldmljZV9ub3RfYXZhaWxhYmxlX2VtdWxhdGU6CiAJY2FsbCBtYXRoX2VtdWxh dGUKIAlhZGRsICQ0LCAlZXNwCiAJam1wIHJldF9mcm9tX2V4Y2VwdGlvbgorRU5EKGRldmljZV9u b3RfYXZhaWxhYmxlKQogCiAvKgogICogRGVidWcgdHJhcHMgYW5kIE5NSSBjYW4gaGFwcGVuIGF0 IHRoZSBvbmUgU1lTRU5URVIgaW5zdHJ1Y3Rpb24KQEAgLTUxNSw2ICs1MzcsNyBAQCBkZWJ1Z19z dGFja19jb3JyZWN0OgogCW1vdmwgJWVzcCwlZWF4CQkJIyBwdF9yZWdzIHBvaW50ZXIKIAljYWxs IGRvX2RlYnVnCiAJam1wIHJldF9mcm9tX2V4Y2VwdGlvbgorRU5EKGRlYnVnKQogCiAvKgogICog Tk1JIGlzIGRvdWJseSBuYXN0eS4gSXQgY2FuIGhhcHBlbiBfd2hpbGVfIHdlJ3JlIGhhbmRsaW5n CkBAIC01ODcsNiArNjEwLDcgQEAgbm1pXzE2Yml0X3N0YWNrOgogCS5hbGlnbiA0CiAJLmxvbmcg MWIsaXJldF9leGMKIC5wcmV2aW91cworRU5EUFJPQyhubWkpCiAKIEVOVFJZKGludDMpCiAJcHVz aGwgJC0xCQkJIyBtYXJrIHRoaXMgYXMgYW4gaW50CkBAIC01OTUsNjIgKzYxOSw3NSBAQCBFTlRS WShpbnQzKQogCW1vdmwgJWVzcCwlZWF4CQkjIHB0X3JlZ3MgcG9pbnRlcgogCWNhbGwgZG9faW50 MwogCWptcCByZXRfZnJvbV9leGNlcHRpb24KK0VORChpbnQzKQogCiBFTlRSWShvdmVyZmxvdykK IAlwdXNobCAkMAogCXB1c2hsICRkb19vdmVyZmxvdwogCWptcCBlcnJvcl9jb2RlCitFTkQob3Zl cmZsb3cpCiAKIEVOVFJZKGJvdW5kcykKIAlwdXNobCAkMAogCXB1c2hsICRkb19ib3VuZHMKIAlq bXAgZXJyb3JfY29kZQorRU5EKGJvdW5kcykKIAogRU5UUlkoaW52YWxpZF9vcCkKIAlwdXNobCAk MAogCXB1c2hsICRkb19pbnZhbGlkX29wCiAJam1wIGVycm9yX2NvZGUKK0VORChpbnZhbGlkX29w KQogCiBFTlRSWShjb3Byb2Nlc3Nvcl9zZWdtZW50X292ZXJydW4pCiAJcHVzaGwgJDAKIAlwdXNo bCAkZG9fY29wcm9jZXNzb3Jfc2VnbWVudF9vdmVycnVuCiAJam1wIGVycm9yX2NvZGUKK0VORChj b3Byb2Nlc3Nvcl9zZWdtZW50X292ZXJydW4pCiAKIEVOVFJZKGludmFsaWRfVFNTKQogCXB1c2hs ICRkb19pbnZhbGlkX1RTUwogCWptcCBlcnJvcl9jb2RlCitFTkQoaW52YWxpZF9UU1MpCiAKIEVO VFJZKHNlZ21lbnRfbm90X3ByZXNlbnQpCiAJcHVzaGwgJGRvX3NlZ21lbnRfbm90X3ByZXNlbnQK IAlqbXAgZXJyb3JfY29kZQorRU5EKHNlZ21lbnRfbm90X3ByZXNlbnQpCiAKIEVOVFJZKHN0YWNr X3NlZ21lbnQpCiAJcHVzaGwgJGRvX3N0YWNrX3NlZ21lbnQKIAlqbXAgZXJyb3JfY29kZQorRU5E KHN0YWNrX3NlZ21lbnQpCiAKIEVOVFJZKGdlbmVyYWxfcHJvdGVjdGlvbikKIAlwdXNobCAkZG9f Z2VuZXJhbF9wcm90ZWN0aW9uCiAJam1wIGVycm9yX2NvZGUKK0VORChnZW5lcmFsX3Byb3RlY3Rp b24pCiAKIEVOVFJZKGFsaWdubWVudF9jaGVjaykKIAlwdXNobCAkZG9fYWxpZ25tZW50X2NoZWNr CiAJam1wIGVycm9yX2NvZGUKK0VORChhbGlnbm1lbnRfY2hlY2spCiAKIEVOVFJZKHBhZ2VfZmF1 bHQpCiAJcHVzaGwgJGRvX3BhZ2VfZmF1bHQKIAlqbXAgZXJyb3JfY29kZQorRU5EKHBhZ2VfZmF1 bHQpCiAKICNpZmRlZiBDT05GSUdfWDg2X01DRQogRU5UUlkobWFjaGluZV9jaGVjaykKIAlwdXNo bCAkMAogCXB1c2hsIG1hY2hpbmVfY2hlY2tfdmVjdG9yCiAJam1wIGVycm9yX2NvZGUKK0VORCht YWNoaW5lX2NoZWNrKQogI2VuZGlmCiAKIEVOVFJZKHNwdXJpb3VzX2ludGVycnVwdF9idWcpCiAJ cHVzaGwgJDAKIAlwdXNobCAkZG9fc3B1cmlvdXNfaW50ZXJydXB0X2J1ZwogCWptcCBlcnJvcl9j b2RlCitFTkQoc3B1cmlvdXNfaW50ZXJydXB0X2J1ZykKIAogI2luY2x1ZGUgInN5c2NhbGxfdGFi bGUuUyIKIApkaWZmIC1OcHJ1IDIuNi4xMy9hcmNoL2lhNjQvZGVmY29uZmlnIDIuNi4xMy1rYWxs c3ltcy9hcmNoL2lhNjQvZGVmY29uZmlnCi0tLSAyLjYuMTMvYXJjaC9pYTY0L2RlZmNvbmZpZwky MDA1LTA4LTI5IDAxOjQxOjAxLjAwMDAwMDAwMCArMDIwMAorKysgMi42LjEzLWthbGxzeW1zL2Fy Y2gvaWE2NC9kZWZjb25maWcJMjAwNS0wOS0wNyAxMjozNDoyNy4wMDAwMDAwMDAgKzAyMDAKQEAg LTI5LDYgKzI5LDcgQEAgQ09ORklHX0lLQ09ORklHX1BST0M9eQogIyBDT05GSUdfQ1BVU0VUUyBp cyBub3Qgc2V0CiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CiBDT05GSUdfS0FMTFNZTVM9 eQorQ09ORklHX0tBTExTWU1TX1RSQURJVElPTkFMPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQog IyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CiBDT05GSUdfUFJJTlRLPXkK ZGlmZiAtTnBydSAyLjYuMTMvYXJjaC9pYTY0L01ha2VmaWxlIDIuNi4xMy1rYWxsc3ltcy9hcmNo L2lhNjQvTWFrZWZpbGUKLS0tIDIuNi4xMy9hcmNoL2lhNjQvTWFrZWZpbGUJMjAwNS0wOC0yOSAw MTo0MTowMS4wMDAwMDAwMDAgKzAyMDAKKysrIDIuNi4xMy1rYWxsc3ltcy9hcmNoL2lhNjQvTWFr ZWZpbGUJMjAwNS0wOS0wNyAxMTo1MjoyOC4wMDAwMDAwMDAgKzAyMDAKQEAgLTksNyArOSw2IEBA CiAjCiAKIE5NIDo9ICQoQ1JPU1NfQ09NUElMRSlubSAtQgotUkVBREVMRiA6PSAkKENST1NTX0NP TVBJTEUpcmVhZGVsZgogCiBleHBvcnQgQVdLCiAKZGlmZiAtTnBydSAyLjYuMTMvYXJjaC9tNjhr L2RlZmNvbmZpZyAyLjYuMTMta2FsbHN5bXMvYXJjaC9tNjhrL2RlZmNvbmZpZwotLS0gMi42LjEz L2FyY2gvbTY4ay9kZWZjb25maWcJMjAwNS0wOC0yOSAwMTo0MTowMS4wMDAwMDAwMDAgKzAyMDAK KysrIDIuNi4xMy1rYWxsc3ltcy9hcmNoL202OGsvZGVmY29uZmlnCTIwMDUtMDktMDcgMTI6MzQ6 NTYuMDAwMDAwMDAwICswMjAwCkBAIC0zMiw2ICszMiw3IEBAIENPTkZJR19LT0JKRUNUX1VFVkVO VD15CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19FTUJFRERFRCBpcyBu b3Qgc2V0CiBDT05GSUdfS0FMTFNZTVM9eQorQ09ORklHX0tBTExTWU1TX1RSQURJVElPTkFMPXkK ICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAogQ09ORklHX1BSSU5USz15 CiBDT05GSUdfQlVHPXkKZGlmZiAtTnBydSAyLjYuMTMvYXJjaC9taXBzL2RlZmNvbmZpZyAyLjYu MTMta2FsbHN5bXMvYXJjaC9taXBzL2RlZmNvbmZpZwotLS0gMi42LjEzL2FyY2gvbWlwcy9kZWZj b25maWcJMjAwNS0wOC0yOSAwMTo0MTowMS4wMDAwMDAwMDAgKzAyMDAKKysrIDIuNi4xMy1rYWxs c3ltcy9hcmNoL21pcHMvZGVmY29uZmlnCTIwMDUtMDktMDcgMTI6MzU6MjIuMDAwMDAwMDAwICsw MjAwCkBAIC0zMiw2ICszMiw3IEBAIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdf UFJPQz15CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX0tBTExTWU1TPXkKK0NPTkZJR19LQUxM U1lNU19UUkFESVRJT05BTD15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBz ZXQKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQpkaWZmIC1OcHJ1IDIuNi4xMy9hcmNo L3BwYzY0L2RlZmNvbmZpZyAyLjYuMTMta2FsbHN5bXMvYXJjaC9wcGM2NC9kZWZjb25maWcKLS0t IDIuNi4xMy9hcmNoL3BwYzY0L2RlZmNvbmZpZwkyMDA1LTA4LTI5IDAxOjQxOjAxLjAwMDAwMDAw MCArMDIwMAorKysgMi42LjEzLWthbGxzeW1zL2FyY2gvcHBjNjQvZGVmY29uZmlnCTIwMDUtMDkt MDcgMTI6MzY6NTcuMDAwMDAwMDAwICswMjAwCkBAIC0zOSw2ICszOSw3IEBAIENPTkZJR19JS0NP TkZJR19QUk9DPXkKIENPTkZJR19DUFVTRVRTPXkKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBz ZXQKIENPTkZJR19LQUxMU1lNUz15CitDT05GSUdfS0FMTFNZTVNfVFJBRElUSU9OQUw9eQogIyBD T05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BB U1MgaXMgbm90IHNldAogQ09ORklHX1BSSU5USz15CmRpZmYgLU5wcnUgMi42LjEzL2FyY2gvczM5 MC9kZWZjb25maWcgMi42LjEzLWthbGxzeW1zL2FyY2gvczM5MC9kZWZjb25maWcKLS0tIDIuNi4x My9hcmNoL3MzOTAvZGVmY29uZmlnCTIwMDUtMDgtMjkgMDE6NDE6MDEuMDAwMDAwMDAwICswMjAw CisrKyAyLjYuMTMta2FsbHN5bXMvYXJjaC9zMzkwL2RlZmNvbmZpZwkyMDA1LTA5LTA3IDEyOjM1 OjQ2LjAwMDAwMDAwMCArMDIwMApAQCAtMzUsNiArMzUsNyBAQCBDT05GSUdfSUtDT05GSUdfUFJP Qz15CiAjIENPTkZJR19DUFVTRVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VNQkVEREVEIGlzIG5v dCBzZXQKIENPTkZJR19LQUxMU1lNUz15CitDT05GSUdfS0FMTFNZTVNfVFJBRElUSU9OQUw9eQog IyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TX0VYVFJB X1BBU1MgaXMgbm90IHNldAogQ09ORklHX1BSSU5USz15CmRpZmYgLU5wcnUgMi42LjEzL2FyY2gv c3BhcmMvZGVmY29uZmlnIDIuNi4xMy1rYWxsc3ltcy9hcmNoL3NwYXJjL2RlZmNvbmZpZwotLS0g Mi42LjEzL2FyY2gvc3BhcmMvZGVmY29uZmlnCTIwMDUtMDgtMjkgMDE6NDE6MDEuMDAwMDAwMDAw ICswMjAwCisrKyAyLjYuMTMta2FsbHN5bXMvYXJjaC9zcGFyYy9kZWZjb25maWcJMjAwNS0wOS0w NyAxMjozNzoyNy4wMDAwMDAwMDAgKzAyMDAKQEAgLTI4LDcgKzI4LDkgQEAgQ09ORklHX0xPR19C VUZfU0hJRlQ9MTQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKICMgQ09ORklHX0VNQkVE REVEIGlzIG5vdCBzZXQKIENPTkZJR19LQUxMU1lNUz15CitDT05GSUdfS0FMTFNZTVNfVFJBRElU SU9OQUw9eQogIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExT WU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15 CiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKZGlmZiAtTnBydSAyLjYuMTMvYXJjaC9zcGFyYzY0L2Rl ZmNvbmZpZyAyLjYuMTMta2FsbHN5bXMvYXJjaC9zcGFyYzY0L2RlZmNvbmZpZwotLS0gMi42LjEz L2FyY2gvc3BhcmM2NC9kZWZjb25maWcJMjAwNS0wOC0yOSAwMTo0MTowMS4wMDAwMDAwMDAgKzAy MDAKKysrIDIuNi4xMy1rYWxsc3ltcy9hcmNoL3NwYXJjNjQvZGVmY29uZmlnCTIwMDUtMDktMDcg MTI6Mzc6NDguMDAwMDAwMDAwICswMjAwCkBAIC0zMCw2ICszMCw3IEBAIENPTkZJR19LT0JKRUNU X1VFVkVOVD15CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19FTUJFRERF RCBpcyBub3Qgc2V0CiBDT05GSUdfS0FMTFNZTVM9eQorQ09ORklHX0tBTExTWU1TX1RSQURJVElP TkFMPXkKICMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lN U19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKIENPTkZJR19GVVRFWD15CmRpZmYgLU5wcnUgMi42LjEz L2FyY2gvdW0vZGVmY29uZmlnIDIuNi4xMy1rYWxsc3ltcy9hcmNoL3VtL2RlZmNvbmZpZwotLS0g Mi42LjEzL2FyY2gvdW0vZGVmY29uZmlnCTIwMDUtMDgtMjkgMDE6NDE6MDEuMDAwMDAwMDAwICsw MjAwCisrKyAyLjYuMTMta2FsbHN5bXMvYXJjaC91bS9kZWZjb25maWcJMjAwNS0wOS0wNyAxMjoz Mzo1MS4wMDAwMDAwMDAgKzAyMDAKQEAgLTcwLDYgKzcwLDcgQEAgQ09ORklHX0lLQ09ORklHPXkK IENPTkZJR19JS0NPTkZJR19QUk9DPXkKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKIENP TkZJR19LQUxMU1lNUz15CitDT05GSUdfS0FMTFNZTVNfVFJBRElUSU9OQUw9eQogIyBDT05GSUdf S0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKIENP TkZJR19QUklOVEs9eQpkaWZmIC1OcHJ1IDIuNi4xMy9hcmNoL3g4Nl82NC9kZWZjb25maWcgMi42 LjEzLWthbGxzeW1zL2FyY2gveDg2XzY0L2RlZmNvbmZpZwotLS0gMi42LjEzL2FyY2gveDg2XzY0 L2RlZmNvbmZpZwkyMDA1LTA4LTI5IDAxOjQxOjAxLjAwMDAwMDAwMCArMDIwMAorKysgMi42LjEz LWthbGxzeW1zL2FyY2gveDg2XzY0L2RlZmNvbmZpZwkyMDA1LTA5LTA3IDEyOjM4OjAwLjAwMDAw MDAwMCArMDIwMApAQCAtMzksNiArMzksNyBAQCBDT05GSUdfSUtDT05GSUdfUFJPQz15CiAjIENP TkZJR19DUFVTRVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKIENP TkZJR19LQUxMU1lNUz15CitDT05GSUdfS0FMTFNZTVNfVFJBRElUSU9OQUw9eQogQ09ORklHX0tB TExTWU1TX0FMTD15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKIENP TkZJR19QUklOVEs9eQpkaWZmIC1OcHJ1IDIuNi4xMy9hcmNoL3g4Nl82NC9rZXJuZWwvZW50cnku UyAyLjYuMTMta2FsbHN5bXMvYXJjaC94ODZfNjQva2VybmVsL2VudHJ5LlMKLS0tIDIuNi4xMy9h cmNoL3g4Nl82NC9rZXJuZWwvZW50cnkuUwkyMDA1LTA4LTI5IDAxOjQxOjAxLjAwMDAwMDAwMCAr MDIwMAorKysgMi42LjEzLWthbGxzeW1zL2FyY2gveDg2XzY0L2tlcm5lbC9lbnRyeS5TCTIwMDUt MDktMDUgMTQ6NTY6MTEuMDAwMDAwMDAwICswMjAwCkBAIC0xNDMsNiArMTQzLDcgQEAgcmZmX3Ry YWNlOgogCUdFVF9USFJFQURfSU5GTyglcmN4KQkKIAlqbXAgcmZmX2FjdGlvbgogCUNGSV9FTkRQ Uk9DCitFTkQocmV0X2Zyb21fZm9yaykKIAogLyoKICAqIFN5c3RlbSBjYWxsIGVudHJ5LiBVcHRv IDYgYXJndW1lbnRzIGluIHJlZ2lzdGVycyBhcmUgc3VwcG9ydGVkLgpAQCAtMjU0LDYgKzI1NSw3 IEBAIHRyYWNlc3lzOgkJCSAKIAlSRVNUT1JFX1RPUF9PRl9TVEFDSyAlcmJ4CiAJUkVTVE9SRV9S RVNUCiAJam1wIHJldF9mcm9tX3N5c19jYWxsCitFTkQoc3lzdGVtX2NhbGwpCiAJCQogYmFkc3lz OgogCW1vdnEgJC1FTk9TWVMsUkFYLUFSR09GRlNFVCglcnNwKQkKQEAgLTMxNiw2ICszMTgsNyBA QCBpbnRfcmVzdG9yZV9yZXN0OgogCWNsaQogCWptcCBpbnRfd2l0aF9jaGVjawogCUNGSV9FTkRQ Uk9DCitFTkQoaW50X3JldF9mcm9tX3N5c19jYWxsKQogCQkKIC8qIAogICogQ2VydGFpbiBzcGVj aWFsIHN5c3RlbSBjYWxscyB0aGF0IG5lZWQgdG8gc2F2ZSBhIGNvbXBsZXRlIGZ1bGwgc3RhY2sg ZnJhbWUuCkBAIC0zMjcsNiArMzMwLDcgQEAgaW50X3Jlc3RvcmVfcmVzdDoKIAlsZWFxCVxmdW5j KCVyaXApLCVyYXgKIAlsZWFxICAgIC1BUkdPRkZTRVQrOCglcnNwKSxcYXJnIC8qIDggZm9yIHJl dHVybiBhZGRyZXNzICovCiAJam1wCXB0cmVnc2NhbGxfY29tbW9uCitFTkQoXGxhYmVsKQogCS5l bmRtCiAKIAlQVFJFR1NDQUxMIHN0dWJfY2xvbmUsIHN5c19jbG9uZSwgJXI4CkBAIC0zNTEsNiAr MzU1LDcgQEAgRU5UUlkocHRyZWdzY2FsbF9jb21tb24pCiAJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VU CTgKIAlyZXQKIAlDRklfRU5EUFJPQworRU5EKHB0cmVnc2NhbGxfY29tbW9uKQogCQogRU5UUlko c3R1Yl9leGVjdmUpCiAJQ0ZJX1NUQVJUUFJPQwpAQCAtMzc1LDYgKzM4MCw3IEBAIGV4ZWNfMzJi aXQ6CiAJUkVTVE9SRV9SRVNUCiAJam1wIGludF9yZXRfZnJvbV9zeXNfY2FsbAogCUNGSV9FTkRQ Uk9DCitFTkQoc3R1Yl9leGVjdmUpCiAJCiAvKgogICogc2lncmV0dXJuIGlzIHNwZWNpYWwgYmVj YXVzZSBpdCBuZWVkcyB0byByZXN0b3JlIGFsbCByZWdpc3RlcnMgb24gcmV0dXJuLgpAQCAtMzkx LDYgKzM5Nyw3IEBAIEVOVFJZKHN0dWJfcnRfc2lncmV0dXJuKQogCVJFU1RPUkVfUkVTVAogCWpt cCBpbnRfcmV0X2Zyb21fc3lzX2NhbGwKIAlDRklfRU5EUFJPQworRU5EKHN0dWJfcnRfc2lncmV0 dXJuKQogCiAvKiAKICAqIEludGVycnVwdCBlbnRyeS9leGl0LgpAQCAtNTE2LDggKzUyMywxMCBA QCByZXRpbnRfa2VybmVsOgkKIAlqbmMgIHJldGludF9yZXN0b3JlX2FyZ3MKIAljYWxsIHByZWVt cHRfc2NoZWR1bGVfaXJxCiAJam1wIGV4aXRfaW50cgotI2VuZGlmCQorI2VuZGlmCisKIAlDRklf RU5EUFJPQworRU5EKGNvbW1vbl9pbnRlcnJ1cHQpCiAJCiAvKgogICogQVBJQyBpbnRlcnJ1cHRz LgpAQCAtNTMxLDYgKzU0MCw3IEBAIHJldGludF9rZXJuZWw6CQogCiBFTlRSWSh0aGVybWFsX2lu dGVycnVwdCkKIAlhcGljaW50ZXJydXB0IFRIRVJNQUxfQVBJQ19WRUNUT1Isc21wX3RoZXJtYWxf aW50ZXJydXB0CitFTkQodGhlcm1hbF9pbnRlcnJ1cHQpCiAKICNpZmRlZiBDT05GSUdfU01QCQog RU5UUlkocmVzY2hlZHVsZV9pbnRlcnJ1cHQpCkBAIC01MzgsMjAgKzU0OCwyNSBAQCBFTlRSWShy ZXNjaGVkdWxlX2ludGVycnVwdCkKIAogRU5UUlkoaW52YWxpZGF0ZV9pbnRlcnJ1cHQpCiAJYXBp Y2ludGVycnVwdCBJTlZBTElEQVRFX1RMQl9WRUNUT1Isc21wX2ludmFsaWRhdGVfaW50ZXJydXB0 CitFTkQoaW52YWxpZGF0ZV9pbnRlcnJ1cHQpCiAKIEVOVFJZKGNhbGxfZnVuY3Rpb25faW50ZXJy dXB0KQogCWFwaWNpbnRlcnJ1cHQgQ0FMTF9GVU5DVElPTl9WRUNUT1Isc21wX2NhbGxfZnVuY3Rp b25faW50ZXJydXB0CitFTkQoY2FsbF9mdW5jdGlvbl9pbnRlcnJ1cHQpCiAjZW5kaWYKIAogI2lm ZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwkKIEVOVFJZKGFwaWNfdGltZXJfaW50ZXJydXB0KQog CWFwaWNpbnRlcnJ1cHQgTE9DQUxfVElNRVJfVkVDVE9SLHNtcF9hcGljX3RpbWVyX2ludGVycnVw dAorRU5EKGFwaWNfdGltZXJfaW50ZXJydXB0KQogCiBFTlRSWShlcnJvcl9pbnRlcnJ1cHQpCiAJ YXBpY2ludGVycnVwdCBFUlJPUl9BUElDX1ZFQ1RPUixzbXBfZXJyb3JfaW50ZXJydXB0CitFTkQo ZXJyb3JfaW50ZXJydXB0KQogCiBFTlRSWShzcHVyaW91c19pbnRlcnJ1cHQpCiAJYXBpY2ludGVy cnVwdCBTUFVSSU9VU19BUElDX1ZFQ1RPUixzbXBfc3B1cmlvdXNfaW50ZXJydXB0CitFTkQoc3B1 cmlvdXNfaW50ZXJydXB0KQogI2VuZGlmCiAJCQkJCiAvKgpAQCAtNjc1LDYgKzY5MCw3IEBAIGVy cm9yX2tlcm5lbHNwYWNlOgogCWNtcHEgJGdzX2NoYW5nZSxSSVAoJXJzcCkKICAgICAgICAgamUg ICBlcnJvcl9zd2FwZ3MKIAlqbXAgIGVycm9yX3N0aQorRU5EKGVycm9yX2VudHJ5KQogCQogICAg ICAgIC8qIFJlbG9hZCBncyBzZWxlY3RvciB3aXRoIGV4Y2VwdGlvbiBoYW5kbGluZyAqLwogICAg ICAgIC8qIGVkaTogIG5ldyBzZWxlY3RvciAqLyAKQEAgLTY4OCw2ICs3MDQsNyBAQCBnc19jaGFu Z2U6ICAgICAKIAlzd2FwZ3MKICAgICAgICAgcG9wZgogICAgICAgICByZXQKK0VORFBST0MobG9h ZF9nc19pbmRleCkKICAgICAgICAKICAgICAgICAgLnNlY3Rpb24gX19leF90YWJsZSwiYSIKICAg ICAgICAgLmFsaWduIDgKQEAgLTc0MSw2ICs3NTgsNyBAQCBFTlRSWShrZXJuZWxfdGhyZWFkKQog CVVORkFLRV9TVEFDS19GUkFNRQogCXJldAogCUNGSV9FTkRQUk9DCitFTkRQUk9DKGtlcm5lbF90 aHJlYWQpCiAKIAkKIGNoaWxkX3JpcDoKQEAgLTc1NCw2ICs3NzIsNyBAQCBjaGlsZF9yaXA6CiAJ IyBleGl0CiAJeG9ybCAlZWRpLCAlZWRpCiAJY2FsbCBkb19leGl0CitFTkRQUk9DKGNoaWxkX3Jp cCkKIAogLyoKICAqIGV4ZWN2ZSgpLiBUaGlzIGZ1bmN0aW9uIG5lZWRzIHRvIHVzZSBJUkVULCBu b3QgU1lTUkVULCB0byBzZXQgdXAgYWxsIHN0YXRlIHByb3Blcmx5LgpAQCAtNzgzLDE4ICs4MDIs MjMgQEAgRU5UUlkoZXhlY3ZlKQogCVVORkFLRV9TVEFDS19GUkFNRQogCXJldAogCUNGSV9FTkRQ Uk9DCitFTkRQUk9DKGV4ZWN2ZSkKIAogRU5UUlkocGFnZV9mYXVsdCkKIAllcnJvcmVudHJ5IGRv X3BhZ2VfZmF1bHQKK0VORChwYWdlX2ZhdWx0KQogCiBFTlRSWShjb3Byb2Nlc3Nvcl9lcnJvcikK IAl6ZXJvZW50cnkgZG9fY29wcm9jZXNzb3JfZXJyb3IKK0VORChjb3Byb2Nlc3Nvcl9lcnJvcikK IAogRU5UUlkoc2ltZF9jb3Byb2Nlc3Nvcl9lcnJvcikKIAl6ZXJvZW50cnkgZG9fc2ltZF9jb3By b2Nlc3Nvcl9lcnJvcgkKK0VORChzaW1kX2NvcHJvY2Vzc29yX2Vycm9yKQogCiBFTlRSWShkZXZp Y2Vfbm90X2F2YWlsYWJsZSkKIAl6ZXJvZW50cnkgbWF0aF9zdGF0ZV9yZXN0b3JlCitFTkQoZGV2 aWNlX25vdF9hdmFpbGFibGUpCiAKIAkvKiBydW5zIG9uIGV4Y2VwdGlvbiBzdGFjayAqLwogRU5U UlkoZGVidWcpCkBAIC04MDQsNiArODI4LDcgQEAgRU5UUlkoZGVidWcpCiAJcGFyYW5vaWRlbnRy eSBkb19kZWJ1ZwogCWptcCBwYXJhbm9pZF9leGl0CiAJQ0ZJX0VORFBST0MKK0VORChkZWJ1ZykK IAogCS8qIHJ1bnMgb24gZXhjZXB0aW9uIHN0YWNrICovCQogRU5UUlkobm1pKQpAQCAtODUzLDI0 ICs4NzgsMjcgQEAgcGFyYW5vaWRfc2NoZWR1bGU6CiAJY2xpCiAJam1wIHBhcmFub2lkX3VzZXJz cGFjZQogCUNGSV9FTkRQUk9DCitFTkQobm1pKQogCiBFTlRSWShpbnQzKQogCXplcm9lbnRyeSBk b19pbnQzCQorRU5EKGludDMpCiAKIEVOVFJZKG92ZXJmbG93KQogCXplcm9lbnRyeSBkb19vdmVy ZmxvdworRU5EKG92ZXJmbG93KQogCiBFTlRSWShib3VuZHMpCiAJemVyb2VudHJ5IGRvX2JvdW5k cworRU5EKGJvdW5kcykKIAogRU5UUlkoaW52YWxpZF9vcCkKIAl6ZXJvZW50cnkgZG9faW52YWxp ZF9vcAkKK0VORChpbnZhbGlkX29wKQogCiBFTlRSWShjb3Byb2Nlc3Nvcl9zZWdtZW50X292ZXJy dW4pCiAJemVyb2VudHJ5IGRvX2NvcHJvY2Vzc29yX3NlZ21lbnRfb3ZlcnJ1bgotCi1FTlRSWShy ZXNlcnZlZCkKLQl6ZXJvZW50cnkgZG9fcmVzZXJ2ZWQKK0VORChjb3Byb2Nlc3Nvcl9zZWdtZW50 X292ZXJydW4pCiAKIAkvKiBydW5zIG9uIGV4Y2VwdGlvbiBzdGFjayAqLwogRU5UUlkoZG91Ymxl X2ZhdWx0KQpAQCAtODc4LDEyICs5MDYsMTUgQEAgRU5UUlkoZG91YmxlX2ZhdWx0KQogCXBhcmFu b2lkZW50cnkgZG9fZG91YmxlX2ZhdWx0CiAJam1wIHBhcmFub2lkX2V4aXQKIAlDRklfRU5EUFJP QworRU5EKGRvdWJsZV9mYXVsdCkKIAogRU5UUlkoaW52YWxpZF9UU1MpCiAJZXJyb3JlbnRyeSBk b19pbnZhbGlkX1RTUworRU5EKGludmFsaWRfVFNTKQogCiBFTlRSWShzZWdtZW50X25vdF9wcmVz ZW50KQogCWVycm9yZW50cnkgZG9fc2VnbWVudF9ub3RfcHJlc2VudAorRU5EKHNlZ21lbnRfbm90 X3ByZXNlbnQpCiAKIAkvKiBydW5zIG9uIGV4Y2VwdGlvbiBzdGFjayAqLwogRU5UUlkoc3RhY2tf c2VnbWVudCkKQEAgLTg5MSwxOCArOTIyLDIzIEBAIEVOVFJZKHN0YWNrX3NlZ21lbnQpCiAJcGFy YW5vaWRlbnRyeSBkb19zdGFja19zZWdtZW50CiAJam1wIHBhcmFub2lkX2V4aXQKIAlDRklfRU5E UFJPQworRU5EKHN0YWNrX3NlZ21lbnQpCiAKIEVOVFJZKGdlbmVyYWxfcHJvdGVjdGlvbikKIAll cnJvcmVudHJ5IGRvX2dlbmVyYWxfcHJvdGVjdGlvbgorRU5EKGdlbmVyYWxfcHJvdGVjdGlvbikK IAogRU5UUlkoYWxpZ25tZW50X2NoZWNrKQogCWVycm9yZW50cnkgZG9fYWxpZ25tZW50X2NoZWNr CitFTkQoYWxpZ25tZW50X2NoZWNrKQogCiBFTlRSWShkaXZpZGVfZXJyb3IpCiAJemVyb2VudHJ5 IGRvX2RpdmlkZV9lcnJvcgorRU5EKGRpdmlkZV9lcnJvcikKIAogRU5UUlkoc3B1cmlvdXNfaW50 ZXJydXB0X2J1ZykKIAl6ZXJvZW50cnkgZG9fc3B1cmlvdXNfaW50ZXJydXB0X2J1ZworRU5EKHNw dXJpb3VzX2ludGVycnVwdF9idWcpCiAKICNpZmRlZiBDT05GSUdfWDg2X01DRQogCS8qIHJ1bnMg b24gZXhjZXB0aW9uIHN0YWNrICovCkBAIC05MTMsMTAgKzk0OSwxMiBAQCBFTlRSWShtYWNoaW5l X2NoZWNrKQogCXBhcmFub2lkZW50cnkgZG9fbWFjaGluZV9jaGVjawogCWptcCBwYXJhbm9pZF9l eGl0CiAJQ0ZJX0VORFBST0MKK0VORChtYWNoaW5lX2NoZWNrKQogI2VuZGlmCiAKIEVOVFJZKGNh bGxfZGVidWcpCiAgICAgICAgemVyb2VudHJ5IGRvX2NhbGxfZGVidWcKK0VORChjYWxsX2RlYnVn KQogCiBFTlRSWShjYWxsX3NvZnRpcnEpCiAJbW92cSAlZ3M6cGRhX2lycXN0YWNrcHRyLCVyYXgK QEAgLTkyOSw0ICs5NjcsNCBAQCBFTlRSWShjYWxsX3NvZnRpcnEpCiAJZGVjbCAlZ3M6cGRhX2ly cWNvdW50CiAJcG9wcSAlcjE1CiAJcmV0Ci0KK0VORFBST0MoY2FsbF9zb2Z0aXJxKQpkaWZmIC1O cHJ1IDIuNi4xMy9pbmNsdWRlL2xpbnV4L2thbGxzeW1zLmggMi42LjEzLWthbGxzeW1zL2luY2x1 ZGUvbGludXgva2FsbHN5bXMuaAotLS0gMi42LjEzL2luY2x1ZGUvbGludXgva2FsbHN5bXMuaAky MDA1LTA4LTI5IDAxOjQxOjAxLjAwMDAwMDAwMCArMDIwMAorKysgMi42LjEzLWthbGxzeW1zL2lu Y2x1ZGUvbGludXgva2FsbHN5bXMuaAkyMDA1LTAzLTE2IDEyOjI0OjQyLjAwMDAwMDAwMCArMDEw MApAQCAtMTksNiArMTksMjUgQEAgY29uc3QgY2hhciAqa2FsbHN5bXNfbG9va3VwKHVuc2lnbmVk IGxvbgogCQkJICAgIHVuc2lnbmVkIGxvbmcgKm9mZnNldCwKIAkJCSAgICBjaGFyICoqbW9kbmFt ZSwgY2hhciAqbmFtZWJ1Zik7CiAKKyNpZmRlZiBDT05GSUdfTU9EVUxFUworCisjaWYgZGVmaW5l ZChFbGZfU2hkcikgJiYgZGVmaW5lZChFbGZfU3ltKQorY2hhciBrYWxsc3ltc19lbGZfdHlwZShj b25zdCBFbGZfU3ltICpzeW0sCisJCSAgICAgICBjb25zdCBFbGZfU2hkciAqc2VjaGRycywKKwkJ ICAgICAgIGNvbnN0IGNoYXIgKnNlY3N0cmluZ3MpOworI2VuZGlmCisKK3N0cnVjdCBtb2R1bGU7 Cit2b2lkIG1vZHVsZV9pbml0X2RvbmUoc3RydWN0IG1vZHVsZSAqKTsKKwordW5zaWduZWQgbG9u ZyBrYWxsc3ltc19maW5kX3N5bW5hbWUoc3RydWN0IG1vZHVsZSAqLCBjb25zdCBjaGFyICopOwor Citjb25zdCBjaGFyICprYWxsc3ltc19nZXRfa3N5bWJvbChzdHJ1Y3QgbW9kdWxlICosCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpzaXplLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb2Zmc2V0KTsKKyNlbmRpZgor CiAvKiBSZXBsYWNlICIlcyIgaW4gZm9ybWF0IHdpdGggYWRkcmVzcywgaWYgZm91bmQgKi8KIGV4 dGVybiB2b2lkIF9fcHJpbnRfc3ltYm9sKGNvbnN0IGNoYXIgKmZtdCwgdW5zaWduZWQgbG9uZyBh ZGRyZXNzKTsKIApAQCAtNjQsNCArODMsMTIgQEAgZG8gewkJCQkJCVwKIAlfX3ByaW50X3N5bWJv bChmbXQsIGFkZHIpOwkJXAogfSB3aGlsZSgwKQogCisjaWYgZGVmaW5lZChDT05GSUdfS0FMTFNZ TVMpICYmICFkZWZpbmVkKENPTkZJR19LQUxMU1lNU19UUkFESVRJT05BTCkKK3ZvaWQga2FsbHN5 bXNfZWFybHlfaW5pdCh2b2lkKTsKK3ZvaWQga2FsbHN5bXNfaW5pdF9kb25lKHZvaWQpOworI2Vs c2UKKyNkZWZpbmUga2FsbHN5bXNfZWFybHlfaW5pdCgpICgodm9pZCkwKQorI2RlZmluZSBrYWxs c3ltc19pbml0X2RvbmUoKSAoKHZvaWQpMCkKKyNlbmRpZgorCiAjZW5kaWYgLypfTElOVVhfS0FM TFNZTVNfSCovCmRpZmYgLU5wcnUgMi42LjEzL2luY2x1ZGUvbGludXgvbGlua2FnZS5oIDIuNi4x My1rYWxsc3ltcy9pbmNsdWRlL2xpbnV4L2xpbmthZ2UuaAotLS0gMi42LjEzL2luY2x1ZGUvbGlu dXgvbGlua2FnZS5oCTIwMDUtMDgtMjkgMDE6NDE6MDEuMDAwMDAwMDAwICswMjAwCisrKyAyLjYu MTMta2FsbHN5bXMvaW5jbHVkZS9saW51eC9saW5rYWdlLmgJMjAwNS0wMy0xNiAxMjoyNDo0Mi4w MDAwMDAwMDAgKzAxMDAKQEAgLTMzLDYgKzMzLDE3IEBACiAgIEFMSUdOOyBcCiAgIG5hbWU6CiAK KyNpZmRlZiBDT05GSUdfS0FMTFNZTVMKKyNkZWZpbmUgRU5EUFJPQyhuYW1lKSBcCisgIC50eXBl IG5hbWUsIEBmdW5jdGlvbjsgXAorICBFTkQobmFtZSkKKyNkZWZpbmUgRU5EKG5hbWUpIFwKKyAg LnNpemUgbmFtZSwgLi1uYW1lCisjZWxzZQorI2RlZmluZSBFTkRQUk9DKG5hbWUpCisjZGVmaW5l IEVORChuYW1lKQorI2VuZGlmCisKICNlbmRpZgogCiAjZGVmaW5lIE5PUkVUX1RZUEUgICAgLyoq LwpkaWZmIC1OcHJ1IDIuNi4xMy9pbmNsdWRlL2xpbnV4L21vZHVsZS5oIDIuNi4xMy1rYWxsc3lt cy9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCi0tLSAyLjYuMTMvaW5jbHVkZS9saW51eC9tb2R1bGUu aAkyMDA1LTA4LTI5IDAxOjQxOjAxLjAwMDAwMDAwMCArMDIwMAorKysgMi42LjEzLWthbGxzeW1z L2luY2x1ZGUvbGludXgvbW9kdWxlLmgJMjAwNS0wOS0wMSAxMTozMjoxMi4wMDAwMDAwMDAgKzAy MDAKQEAgLTMwMSw3ICszMDEsMTQgQEAgc3RydWN0IG1vZHVsZQogCS8qIFdlIGtlZXAgdGhlIHN5 bWJvbCBhbmQgc3RyaW5nIHRhYmxlcyBmb3Iga2FsbHN5bXMuICovCiAJRWxmX1N5bSAqc3ltdGFi OwogCXVuc2lnbmVkIGxvbmcgbnVtX3N5bXRhYjsKLQljaGFyICpzdHJ0YWI7CisJY29uc3QgY2hh ciAqc3RydGFiOworCisjIGlmbmRlZiBDT05GSUdfS0FMTFNZTVNfVFJBRElUSU9OQUwKKwkvKiBB bmQgYWxzbyB0aGUgc2VjdGlvbnMgYW5kIHRoZWlyIHN0cmluZyB0YWJsZS4gKi8KKwlFbGZfU2hk ciAqc2VjdGlvbnM7CisJdW5zaWduZWQgbG9uZyBudW1fc2VjdGlvbnM7CisJY29uc3QgY2hhciAq c2hzdHJ0YWI7CisjIGVuZGlmCiAKIAkvKiBTZWN0aW9uIGF0dHJpYnV0ZXMgKi8KIAlzdHJ1Y3Qg bW9kdWxlX3NlY3RfYXR0cnMgKnNlY3RfYXR0cnM7CmRpZmYgLU5wcnUgMi42LjEzL2luaXQvS2Nv bmZpZyAyLjYuMTMta2FsbHN5bXMvaW5pdC9LY29uZmlnCi0tLSAyLjYuMTMvaW5pdC9LY29uZmln CTIwMDUtMDgtMjkgMDE6NDE6MDEuMDAwMDAwMDAwICswMjAwCisrKyAyLjYuMTMta2FsbHN5bXMv aW5pdC9LY29uZmlnCTIwMDUtMDktMDIgMTA6Mjg6NTkuMDAwMDAwMDAwICswMjAwCkBAIC0yNDcs MjMgKzI0Nyw0MCBAQCBtZW51Y29uZmlnIEVNQkVEREVECiAgICAgICAgICAgT25seSB1c2UgdGhp cyBpZiB5b3UgcmVhbGx5IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLgogCiBjb25maWcgS0FMTFNZ TVMKLQkgYm9vbCAiTG9hZCBhbGwgc3ltYm9scyBmb3IgZGVidWdnaW5nL2trc3ltb29wcyIgaWYg RU1CRURERUQKLQkgZGVmYXVsdCB5Ci0JIGhlbHAKLQkgICBTYXkgWSBoZXJlIHRvIGxldCB0aGUg a2VybmVsIHByaW50IG91dCBzeW1ib2xpYyBjcmFzaCBpbmZvcm1hdGlvbiBhbmQKLQkgICBzeW1i b2xpYyBzdGFjayBiYWNrdHJhY2VzLiBUaGlzIGluY3JlYXNlcyB0aGUgc2l6ZSBvZiB0aGUga2Vy bmVsCi0JICAgc29tZXdoYXQsIGFzIGFsbCBzeW1ib2xzIGhhdmUgdG8gYmUgbG9hZGVkIGludG8g dGhlIGtlcm5lbCBpbWFnZS4KKwlib29sICJMb2FkIGFsbCBzeW1ib2xzIGZvciBkZWJ1Z2dpbmcv a2tzeW1vb3BzIiBpZiBFTUJFRERFRAorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFNheSBZIGhlcmUg dG8gbGV0IHRoZSBrZXJuZWwgcHJpbnQgb3V0IHN5bWJvbGljIGNyYXNoIGluZm9ybWF0aW9uIGFu ZAorCSAgc3ltYm9saWMgc3RhY2sgYmFja3RyYWNlcy4gVGhpcyBpbmNyZWFzZXMgdGhlIHNpemUg b2YgdGhlIGtlcm5lbAorCSAgc29tZXdoYXQsIGFzIGFsbCBzeW1ib2xzIGhhdmUgdG8gYmUgbG9h ZGVkIGludG8gdGhlIGtlcm5lbCBpbWFnZS4KKworY29uZmlnIEtBTExTWU1TX1RSQURJVElPTkFM CisJYm9vbCAiVHJhZGl0aW9uYWwga2FsbHN5bXMgc3ltYm9sIHRhYmxlIGZvcm1hdCIKKwlkZXBl bmRzIG9uIEtBTExTWU1TCisJZGVmYXVsdCAhTU9EVUxFUworCWhlbHAKKwkgIFNheSBOIGhlcmUg aWYgeW91IHdhbnQgdGhlIGtlcm5lbCBzeW1ib2wgdGFibGUgdG8gYmUgY29uc2lzdGVudCB3aXRo CisJICB0aGF0IGxvYWRhYmxlIG1vZHVsZXMgdXNlIChpLmUuIHRoZSBFTEYgc3ltYm9sIHRhYmxl IGV4dHJhY3RlZCBmcm9tCisJICB0aGUga2VybmVsIGJpbmFyeSkuCiAKIGNvbmZpZyBLQUxMU1lN U19BTEwKIAlib29sICJJbmNsdWRlIGFsbCBzeW1ib2xzIGluIGthbGxzeW1zIgogCWRlcGVuZHMg b24gREVCVUdfS0VSTkVMICYmIEtBTExTWU1TCisJZGVmYXVsdCBERUJVR19LRVJORUwKIAloZWxw Ci0JICAgTm9ybWFsbHkga2FsbHN5bXMgb25seSBjb250YWlucyB0aGUgc3ltYm9scyBvZiBmdW5j dGlvbnMsIGZvciBuaWNlcgotCSAgIE9PUFMgbWVzc2FnZXMuICBTb21lIGRlYnVnZ2VycyBjYW4g dXNlIGthbGxzeW1zIGZvciBvdGhlcgotCSAgIHN5bWJvbHMgdG9vOiBzYXkgWSBoZXJlIHRvIGlu Y2x1ZGUgYWxsIHN5bWJvbHMsIGFuZCB5b3UKLQkgICBkb24ndCBjYXJlIGFib3V0IGFkZGluZyAz MDBrIHRvIHRoZSBzaXplIG9mIHlvdXIga2VybmVsLgotCi0JICAgU2F5IE4uCisJICBOb3JtYWxs eSBrYWxsc3ltcyBvbmx5IGNvbnRhaW5zIHRoZSBzeW1ib2xzIG9mIGZ1bmN0aW9ucywgZm9yIG5p Y2VyCisJICBPT1BTIG1lc3NhZ2VzLiAgU29tZSBkZWJ1Z2dlcnMgY2FuIHVzZSBrYWxsc3ltcyBm b3Igb3RoZXIKKwkgIHN5bWJvbHMgdG9vOiBzYXkgWSBoZXJlIHRvIGluY2x1ZGUgYWxsIHN5bWJv bHMsIGFuZCB5b3UKKwkgIGRvbid0IGNhcmUgYWJvdXQgYWRkaW5nIDMwMGsgdG8gdGhlIHNpemUg b2YgeW91ciBrZXJuZWwuCisKKwkgIFNheSBOLgorCitjb25maWcgS0FMTFNZTVNfU1RSSVBfR0VO RVJBVEVECisJYm9vbCAiU3RyaXAgbWFjaGluZSBnZW5lcmF0ZWQgc3ltYm9scyBmcm9tIGthbGxz eW1zIiBpZiBLQUxMU1lNU19BTEwKKwlkZXBlbmRzIG9uIEtBTExTWU1TICYmICFLQUxMU1lNU19U UkFESVRJT05BTAorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFNheSBOIGlmIHlvdSB3YW50IGthbGxz eW1zIHRvIHJldGFpbiBldmVuIG1hY2hpbmUgZ2VuZXJhdGVkIHN5bWJvbHMuCiAKIGNvbmZpZyBL QUxMU1lNU19FWFRSQV9QQVNTCiAJYm9vbCAiRG8gYW4gZXh0cmEga2FsbHN5bXMgcGFzcyIKZGlm ZiAtTnBydSAyLjYuMTMvaW5pdC9tYWluLmMgMi42LjEzLWthbGxzeW1zL2luaXQvbWFpbi5jCi0t LSAyLjYuMTMvaW5pdC9tYWluLmMJMjAwNS0wOC0yOSAwMTo0MTowMS4wMDAwMDAwMDAgKzAyMDAK KysrIDIuNi4xMy1rYWxsc3ltcy9pbml0L21haW4uYwkyMDA1LTA5LTAxIDExOjMyOjEyLjAwMDAw MDAwMCArMDIwMApAQCAtNDY4LDYgKzQ2OCw3IEBAIGFzbWxpbmthZ2Ugdm9pZCBfX2luaXQgc3Rh cnRfa2VybmVsKHZvaWQKIAkJICAgJnVua25vd25fYm9vdG9wdGlvbik7CiAJc29ydF9tYWluX2V4 dGFibGUoKTsKIAl0cmFwX2luaXQoKTsKKwlrYWxsc3ltc19lYXJseV9pbml0KCk7CiAJcmN1X2lu aXQoKTsKIAlpbml0X0lSUSgpOwogCXBpZGhhc2hfaW5pdCgpOwpAQCAtNjkwLDYgKzY5MSw3IEBA IHN0YXRpYyBpbnQgaW5pdCh2b2lkICogdW51c2VkKQogCSAqIHdlJ3JlIGVzc2VudGlhbGx5IHVw IGFuZCBydW5uaW5nLiBHZXQgcmlkIG9mIHRoZQogCSAqIGluaXRtZW0gc2VnbWVudHMgYW5kIHN0 YXJ0IHRoZSB1c2VyLW1vZGUgc3R1ZmYuLgogCSAqLworCWthbGxzeW1zX2luaXRfZG9uZSgpOwog CWZyZWVfaW5pdG1lbSgpOwogCXVubG9ja19rZXJuZWwoKTsKIAlzeXN0ZW1fc3RhdGUgPSBTWVNU RU1fUlVOTklORzsKZGlmZiAtTnBydSAyLjYuMTMva2VybmVsL2thbGxzeW1zLmMgMi42LjEzLWth bGxzeW1zL2tlcm5lbC9rYWxsc3ltcy5jCi0tLSAyLjYuMTMva2VybmVsL2thbGxzeW1zLmMJMjAw NS0wOC0yOSAwMTo0MTowMS4wMDAwMDAwMDAgKzAyMDAKKysrIDIuNi4xMy1rYWxsc3ltcy9rZXJu ZWwva2FsbHN5bXMuYwkyMDA1LTA5LTA3IDE2OjM3OjUyLjAwMDAwMDAwMCArMDIwMApAQCAtMTEs MTQgKzExLDE1IEBACiAgKiAgICAgIENoYW5nZWQgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCBmcm9t IHN0ZW0gY29tcHJlc3Npb24gdG8gInRhYmxlIGxvb2t1cCIKICAqICAgICAgY29tcHJlc3Npb24g KHNlZSBzY3JpcHRzL2thbGxzeW1zLmMgZm9yIGEgbW9yZSBjb21wbGV0ZSBkZXNjcmlwdGlvbikK ICAqLwotI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxl Lmg+CisjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+ CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2lu Y2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRl IDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogCiAjaW5jbHVkZSA8YXNt L3NlY3Rpb25zLmg+CiAKQEAgLTI4LDE1ICsyOSw0MiBAQAogI2RlZmluZSBhbGxfdmFyIDAKICNl bmRpZgogCi0vKiBUaGVzZSB3aWxsIGJlIHJlLWxpbmtlZCBhZ2FpbnN0IHRoZWlyIHJlYWwgdmFs dWVzIGR1cmluZyB0aGUgc2Vjb25kIGxpbmsgc3RhZ2UgKi8KLWV4dGVybiB1bnNpZ25lZCBsb25n IGthbGxzeW1zX2FkZHJlc3Nlc1tdIF9fYXR0cmlidXRlX18oKHdlYWspKTsKLWV4dGVybiB1bnNp Z25lZCBsb25nIGthbGxzeW1zX251bV9zeW1zIF9fYXR0cmlidXRlX18oKHdlYWssc2VjdGlvbigi ZGF0YSIpKSk7Ci1leHRlcm4gdTgga2FsbHN5bXNfbmFtZXNbXSBfX2F0dHJpYnV0ZV9fKCh3ZWFr KSk7CisjaWZkZWYgQ09ORklHX0tBTExTWU1TX1RSQURJVElPTkFMCitleHRlcm4gY29uc3QgdW5z aWduZWQgbG9uZyBrYWxsc3ltc19hZGRyZXNzZXNbXTsKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBs b25nIGthbGxzeW1zX251bV9zeW1zIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oImRhdGEiKSkpOwor ZXh0ZXJuIGNvbnN0IHU4IGthbGxzeW1zX25hbWVzW107CiAKLWV4dGVybiB1OCBrYWxsc3ltc190 b2tlbl90YWJsZVtdIF9fYXR0cmlidXRlX18oKHdlYWspKTsKLWV4dGVybiB1MTYga2FsbHN5bXNf dG9rZW5faW5kZXhbXSBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSk7CitleHRlcm4gY29uc3QgdTgga2Fs bHN5bXNfdG9rZW5fdGFibGVbXTsKK2V4dGVybiBjb25zdCB1MTYga2FsbHN5bXNfdG9rZW5faW5k ZXhbXTsKKworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGxvbmcga2FsbHN5bXNfbWFya2Vyc1tdOwor I2Vsc2UKK2V4dGVybiBFbGZfU2hkciBrYWxsc3ltc19zZWN0aW9uc1tdOworZXh0ZXJuIEVsZl9T eW0ga2FsbHN5bXNfc3ltdGFiW107CitleHRlcm4gY29uc3QgY2hhciBrYWxsc3ltc19zaHN0cnRh YltdLCBrYWxsc3ltc19zdHJ0YWJbXTsKKyMgaWZkZWYgQ09ORklHX01PRFVMRVMKK3N0cnVjdCBt b2R1bGUga2FsbHN5bXNfa2VybmVsX21vZHVsZSA9IHsKKwkubW9kdWxlX2NvcmUgPSBfdGV4dCwK KwkubW9kdWxlX2luaXQgPSBfX2luaXRfYmVnaW4sCisJLnN5bXRhYiA9IGthbGxzeW1zX3N5bXRh YiwKKwkuc3RydGFiID0ga2FsbHN5bXNfc3RydGFiLAorCS5zZWN0aW9ucyA9IGthbGxzeW1zX3Nl Y3Rpb25zLAorCS5zaHN0cnRhYiA9IGthbGxzeW1zX3Noc3RydGFiCit9OworIyBlbHNlCitjb25z dCB2b2lkKmNvbnN0IGthbGxzeW1zX21vZHVsZV9jb3JlID0gX3RleHQ7Citjb25zdCB2b2lkKmNv bnN0IGthbGxzeW1zX21vZHVsZV9pbml0ID0gX19pbml0X2JlZ2luOworc2l6ZV90IGthbGxzeW1z X2NvcmVfc2l6ZSA9IDAsIGthbGxzeW1zX2luaXRfc2l6ZSA9IDA7CitzdGF0aWMgc2l6ZV90IGth bGxzeW1zX2NvcmVfdGV4dF9zaXplLCBrYWxsc3ltc19pbml0X3RleHRfc2l6ZTsKK3NpemVfdCBr YWxsc3ltc19udW1fc2VjdGlvbnMgPSAwLCBrYWxsc3ltc19udW1fc3ltdGFiID0gMDsKKyMgIGRl ZmluZSBLQUxMU1lNU19WQVIobW9kLCB2YXIpIGthbGxzeW1zXyMjdmFyCisjIGVuZGlmCisjIGRl ZmluZSBrYWxsc3ltc19udW1fc3ltcyBLQUxMU1lNU19WQVIoJmthbGxzeW1zX2tlcm5lbF9tb2R1 bGUsIG51bV9zeW10YWIpCisjZW5kaWYKIAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcga2FsbHN5bXNf bWFya2Vyc1tdIF9fYXR0cmlidXRlX18oKHdlYWspKTsKKyNpZmRlZiBDT05GSUdfTU9EVUxFUwor IyBkZWZpbmUgS0FMTFNZTVNfVkFSKG1vZCwgdmFyKSAobW9kKS0+dmFyCisjZW5kaWYKIAogc3Rh dGljIGlubGluZSBpbnQgaXNfa2VybmVsX2luaXR0ZXh0KHVuc2lnbmVkIGxvbmcgYWRkcikKIHsK QEAgLTY4LDEyICs5NiwzNiBAQCBzdGF0aWMgaW5saW5lIGludCBpc19rZXJuZWwodW5zaWduZWQg bG9uCiAJcmV0dXJuIGluX2dhdGVfYXJlYV9ub190YXNrKGFkZHIpOwogfQogCitzdGF0aWMgaW5s aW5lIGludCB3aXRoaW4odW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICpzdGFydCwgdW5z aWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiAoKHZvaWQgKilhZGRyID49IHN0YXJ0ICYmICh2 b2lkICopYWRkciA8IHN0YXJ0ICsgc2l6ZSk7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19NT0RV TEVTKSB8fCAhZGVmaW5lZChDT05GSUdfS0FMTFNZTVNfVFJBRElUSU9OQUwpCisjIGlmbmRlZiBD T05GSUdfTU9EVUxFUworc3RhdGljIGlubGluZQorIyAgZGVmaW5lIGthbGxzeW1zX2ZpbmRfc3lt bmFtZShtLCBuKSBrYWxsc3ltc19maW5kX3N5bW5hbWUobikKKyMgZW5kaWYKK3Vuc2lnbmVkIGxv bmcga2FsbHN5bXNfZmluZF9zeW1uYW1lKAorCXN0cnVjdCBtb2R1bGUgKm1vZCwKKwljb25zdCBj aGFyICpuYW1lKQoreworCXVuc2lnbmVkIGxvbmcgaTsKKworCWZvciAoaSA9IDA7IGkgPCBLQUxM U1lNU19WQVIobW9kLCBudW1fc3ltdGFiKTsgaSsrKQorCQlpZiAoc3RyY21wKG5hbWUsIEtBTExT WU1TX1ZBUihtb2QsIHN0cnRhYikgKyBLQUxMU1lNU19WQVIobW9kLCBzeW10YWIpW2ldLnN0X25h bWUpID09IDApCisJCQlyZXR1cm4gS0FMTFNZTVNfVkFSKG1vZCwgc3ltdGFiKVtpXS5zdF92YWx1 ZTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0tBTExTWU1TX1RSQURJ VElPTkFMCiAvKiBleHBhbmQgYSBjb21wcmVzc2VkIHN5bWJvbCBkYXRhIGludG8gdGhlIHJlc3Vs dGluZyB1bmNvbXByZXNzZWQgc3RyaW5nLAogICAgZ2l2ZW4gdGhlIG9mZnNldCB0byB3aGVyZSB0 aGUgc3ltYm9sIGlzIGluIHRoZSBjb21wcmVzc2VkIHN0cmVhbSAqLwogc3RhdGljIHVuc2lnbmVk IGludCBrYWxsc3ltc19leHBhbmRfc3ltYm9sKHVuc2lnbmVkIGludCBvZmYsIGNoYXIgKnJlc3Vs dCkKIHsKIAlpbnQgbGVuLCBza2lwcGVkX2ZpcnN0ID0gMDsKLQl1OCAqdHB0ciwgKmRhdGE7CisJ Y29uc3QgdTggKnRwdHIsICpkYXRhOwogCiAJLyogZ2V0IHRoZSBjb21wcmVzc2VkIHN5bWJvbCBs ZW5ndGggZnJvbSB0aGUgZmlyc3Qgc3ltYm9sIGJ5dGUgKi8KIAlkYXRhID0gJmthbGxzeW1zX25h bWVzW29mZl07CkBAIC0xMjEsNyArMTczLDcgQEAgc3RhdGljIGNoYXIga2FsbHN5bXNfZ2V0X3N5 bWJvbF90eXBlKHVucwogICoga2FsbHN5bXMgYXJyYXkgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQg Z2V0X3N5bWJvbF9vZmZzZXQodW5zaWduZWQgbG9uZyBwb3MpCiB7Ci0JdTggKm5hbWU7CisJY29u c3QgdTggKm5hbWU7CiAJaW50IGk7CiAKIAkvKiB1c2UgdGhlIGNsb3Nlc3QgbWFya2VyIHdlIGhh dmUuIFdlIGhhdmUgbWFya2VycyBldmVyeSAyNTYgcG9zaXRpb25zLApAQCAtMTM3LDEwICsxODks MTIgQEAgc3RhdGljIHVuc2lnbmVkIGludCBnZXRfc3ltYm9sX29mZnNldCh1bgogCiAJcmV0dXJu IG5hbWUgLSBrYWxsc3ltc19uYW1lczsKIH0KKyNlbmRpZgogCiAvKiBMb29rdXAgdGhlIGFkZHJl c3MgZm9yIHRoaXMgc3ltYm9sLiBSZXR1cm5zIDAgaWYgbm90IGZvdW5kLiAqLwogdW5zaWduZWQg bG9uZyBrYWxsc3ltc19sb29rdXBfbmFtZShjb25zdCBjaGFyICpuYW1lKQogeworI2lmZGVmIENP TkZJR19LQUxMU1lNU19UUkFESVRJT05BTAogCWNoYXIgbmFtZWJ1ZltLU1lNX05BTUVfTEVOKzFd OwogCXVuc2lnbmVkIGxvbmcgaTsKIAl1bnNpZ25lZCBpbnQgb2ZmOwpAQCAtMTUxLDEwICsyMDUs NzggQEAgdW5zaWduZWQgbG9uZyBrYWxsc3ltc19sb29rdXBfbmFtZShjb25zdAogCQlpZiAoc3Ry Y21wKG5hbWVidWYsIG5hbWUpID09IDApCiAJCQlyZXR1cm4ga2FsbHN5bXNfYWRkcmVzc2VzW2ld OwogCX0KKyNlbHNlCisJdW5zaWduZWQgbG9uZyBrYWRkciA9IGthbGxzeW1zX2ZpbmRfc3ltbmFt ZSgma2FsbHN5bXNfa2VybmVsX21vZHVsZSwgbmFtZSk7CisKKwlpZiAoa2FkZHIpCisJCXJldHVy biBrYWRkcjsKKyNlbmRpZgogCXJldHVybiBtb2R1bGVfa2FsbHN5bXNfbG9va3VwX25hbWUobmFt ZSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrYWxsc3ltc19sb29rdXBfbmFtZSk7CiAKKyNpZiBk ZWZpbmVkKENPTkZJR19NT0RVTEVTKSB8fCAhZGVmaW5lZChDT05GSUdfS0FMTFNZTVNfVFJBRElU SU9OQUwpCisvKgorICogVGhpcyBpZ25vcmVzIHRoZSBpbnRlbnNlbHkgYW5ub3lpbmcgIm1hcHBp bmcgc3ltYm9scyIgZm91bmQKKyAqIGluIEFSTSBFTEYgZmlsZXM6ICRhLCAkdCBhbmQgJGQuCisg Ki8KK3N0YXRpYyBpbmxpbmUgaW50IGlzX2FybV9tYXBwaW5nX3N5bWJvbChjb25zdCBjaGFyICpz dHIpCit7CisjaWZkZWYgQ09ORklHX0FSTQorCXJldHVybiBzdHJbMF0gPT0gJyQnICYmIHN0cmNo cigiYXRkIiwgc3RyWzFdKQorCSAgICAgICAmJiAoc3RyWzJdID09ICdcMCcgfHwgc3RyWzJdID09 ICcuJyk7CisjZWxzZQorCXJldHVybiAwOworI2VuZGlmCit9CisKKyMgaWZuZGVmIENPTkZJR19N T0RVTEVTCitzdGF0aWMgaW5saW5lCisjICBkZWZpbmUga2FsbHN5bXNfZ2V0X2tzeW1ib2wobSwg YSwgcywgbykga2FsbHN5bXNfZ2V0X2tzeW1ib2woYSwgcywgbykKKyMgZW5kaWYKK2NvbnN0IGNo YXIgKmthbGxzeW1zX2dldF9rc3ltYm9sKHN0cnVjdCBtb2R1bGUgKm1vZCwKKwkJCSAgICAgICB1 bnNpZ25lZCBsb25nIGFkZHIsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyAqc2l6ZSwKKwkJCSAg ICAgICB1bnNpZ25lZCBsb25nICpvZmZzZXQpCit7CisJdW5zaWduZWQgbG9uZyBpLCBiZXN0ID0g MDsKKwl1bnNpZ25lZCBsb25nIG5leHR2YWw7CisKKwkvKiBBdCB3b3JzZSwgbmV4dCB2YWx1ZSBp cyBhdCBlbmQgb2YgbW9kdWxlICovCisJaWYgKHdpdGhpbihhZGRyLCBLQUxMU1lNU19WQVIobW9k LCBtb2R1bGVfaW5pdCksIEtBTExTWU1TX1ZBUihtb2QsIGluaXRfc2l6ZSkpKQorCQluZXh0dmFs ID0gKHVuc2lnbmVkIGxvbmcpS0FMTFNZTVNfVkFSKG1vZCwgbW9kdWxlX2luaXQpICsgS0FMTFNZ TVNfVkFSKG1vZCwgaW5pdF90ZXh0X3NpemUpOworCWVsc2UKKwkJbmV4dHZhbCA9ICh1bnNpZ25l ZCBsb25nKUtBTExTWU1TX1ZBUihtb2QsIG1vZHVsZV9jb3JlKSArIEtBTExTWU1TX1ZBUihtb2Qs IGNvcmVfdGV4dF9zaXplKTsKKworCS8qIFNjYW4gZm9yIGNsb3Nlc3QgcHJlY2VlZGluZyBzeW1i b2wsIGFuZCBuZXh0IHN5bWJvbC4gKEVMRgorICAgICAgICAgICBzdGFydHMgcmVhbCBzeW1ib2xz IGF0IDEpLiAqLworCWZvciAoaSA9IDE7IGkgPCBLQUxMU1lNU19WQVIobW9kLCBudW1fc3ltdGFi KTsgaSsrKSB7CisJCWlmIChLQUxMU1lNU19WQVIobW9kLCBzeW10YWIpW2ldLnN0X3NobmR4ID09 IFNITl9VTkRFRikKKwkJCWNvbnRpbnVlOworCisJCS8qIFdlIGlnbm9yZSB1bm5hbWVkIHN5bWJv bHM6IHRoZXkncmUgdW5pbmZvcm1hdGl2ZQorCQkgKiBhbmQgaW5zZXJ0ZWQgYXQgYSB3aGltLiAq LworCQlpZiAoS0FMTFNZTVNfVkFSKG1vZCwgc3ltdGFiKVtpXS5zdF92YWx1ZSA8PSBhZGRyCisJ CSAgICAmJiBLQUxMU1lNU19WQVIobW9kLCBzeW10YWIpW2ldLnN0X3ZhbHVlID4gS0FMTFNZTVNf VkFSKG1vZCwgc3ltdGFiKVtiZXN0XS5zdF92YWx1ZQorCQkgICAgJiYgKihLQUxMU1lNU19WQVIo bW9kLCBzdHJ0YWIpICsgS0FMTFNZTVNfVkFSKG1vZCwgc3ltdGFiKVtpXS5zdF9uYW1lKSAhPSAn XDAnCisJCSAgICAmJiAhaXNfYXJtX21hcHBpbmdfc3ltYm9sKEtBTExTWU1TX1ZBUihtb2QsIHN0 cnRhYikgKyBLQUxMU1lNU19WQVIobW9kLCBzeW10YWIpW2ldLnN0X25hbWUpKQorCQkJYmVzdCA9 IGk7CisJCWlmIChLQUxMU1lNU19WQVIobW9kLCBzeW10YWIpW2ldLnN0X3ZhbHVlID4gYWRkcgor CQkgICAgJiYgS0FMTFNZTVNfVkFSKG1vZCwgc3ltdGFiKVtpXS5zdF92YWx1ZSA8IG5leHR2YWwK KwkJICAgICYmICooS0FMTFNZTVNfVkFSKG1vZCwgc3RydGFiKSArIEtBTExTWU1TX1ZBUihtb2Qs IHN5bXRhYilbaV0uc3RfbmFtZSkgIT0gJ1wwJworCQkgICAgJiYgIWlzX2FybV9tYXBwaW5nX3N5 bWJvbChLQUxMU1lNU19WQVIobW9kLCBzdHJ0YWIpICsgS0FMTFNZTVNfVkFSKG1vZCwgc3ltdGFi KVtpXS5zdF9uYW1lKSkKKwkJCW5leHR2YWwgPSBLQUxMU1lNU19WQVIobW9kLCBzeW10YWIpW2ld LnN0X3ZhbHVlOworCX0KKworCWlmICghYmVzdCkKKwkJcmV0dXJuIE5VTEw7CisKKwkqc2l6ZSA9 IG5leHR2YWwgLSBLQUxMU1lNU19WQVIobW9kLCBzeW10YWIpW2Jlc3RdLnN0X3ZhbHVlOworCSpv ZmZzZXQgPSBhZGRyIC0gS0FMTFNZTVNfVkFSKG1vZCwgc3ltdGFiKVtiZXN0XS5zdF92YWx1ZTsK KwlyZXR1cm4gS0FMTFNZTVNfVkFSKG1vZCwgc3RydGFiKSArIEtBTExTWU1TX1ZBUihtb2QsIHN5 bXRhYilbYmVzdF0uc3RfbmFtZTsKK30KKyNlbmRpZgorCiAvKgogICogTG9va3VwIGFuIGFkZHJl c3MKICAqIC0gbW9kbmFtZSBpcyBzZXQgdG8gTlVMTCBpZiBpdCdzIGluIHRoZSBrZXJuZWwKQEAg LTE2NywxOCArMjg5LDE4IEBAIGNvbnN0IGNoYXIgKmthbGxzeW1zX2xvb2t1cCh1bnNpZ25lZCBs b24KIAkJCSAgICB1bnNpZ25lZCBsb25nICpvZmZzZXQsCiAJCQkgICAgY2hhciAqKm1vZG5hbWUs IGNoYXIgKm5hbWVidWYpCiB7Ci0JdW5zaWduZWQgbG9uZyBpLCBsb3csIGhpZ2gsIG1pZDsKIAlj b25zdCBjaGFyICptc3ltOwogCi0JLyogVGhpcyBrZXJuZWwgc2hvdWxkIG5ldmVyIGhhZCBiZWVu IGJvb3RlZC4gKi8KLQlCVUdfT04oIWthbGxzeW1zX2FkZHJlc3Nlcyk7Ci0KIAluYW1lYnVmW0tT WU1fTkFNRV9MRU5dID0gMDsKIAluYW1lYnVmWzBdID0gMDsKIAotCWlmICgoYWxsX3ZhciAmJiBp c19rZXJuZWwoYWRkcikpIHx8Ci0JICAgICghYWxsX3ZhciAmJiAoaXNfa2VybmVsX3RleHQoYWRk cikgfHwgaXNfa2VybmVsX2luaXR0ZXh0KGFkZHIpIHx8Ci0JCQkJaXNfa2VybmVsX2V4dHJhdGV4 dChhZGRyKSkpKSB7CisJaWYgKGFsbF92YXIKKwkgICAgPyBpc19rZXJuZWwoYWRkcikKKwkgICAg OiBpc19rZXJuZWxfdGV4dChhZGRyKQorCSAgICAgIHx8IGlzX2tlcm5lbF9pbml0dGV4dChhZGRy KQorCSAgICAgIHx8IGlzX2tlcm5lbF9leHRyYXRleHQoYWRkcikpIHsKKyNpZmRlZiBDT05GSUdf S0FMTFNZTVNfVFJBRElUSU9OQUwKKwkJdW5zaWduZWQgbG9uZyBpLCBsb3csIGhpZ2gsIG1pZDsK IAkJdW5zaWduZWQgbG9uZyBzeW1ib2xfZW5kID0gMDsKIAogCQkvKiBkbyBhIGJpbmFyeSBzZWFy Y2ggb24gdGhlIHNvcnRlZCBrYWxsc3ltc19hZGRyZXNzZXMgYXJyYXkgKi8KQEAgLTIxOSw2ICsz NDEsMTAgQEAgY29uc3QgY2hhciAqa2FsbHN5bXNfbG9va3VwKHVuc2lnbmVkIGxvbgogCQkqbW9k bmFtZSA9IE5VTEw7CiAJCSpvZmZzZXQgPSBhZGRyIC0ga2FsbHN5bXNfYWRkcmVzc2VzW2xvd107 CiAJCXJldHVybiBuYW1lYnVmOworI2Vsc2UKKwkJKm1vZG5hbWUgPSBOVUxMOworCQlyZXR1cm4g a2FsbHN5bXNfZ2V0X2tzeW1ib2woJmthbGxzeW1zX2tlcm5lbF9tb2R1bGUsIGFkZHIsIHN5bWJv bHNpemUsIG9mZnNldCk7CisjZW5kaWYKIAl9CiAKIAkvKiBzZWUgaWYgaXQncyBpbiBhIG1vZHVs ZSAqLwpAQCAtMjM2LDMwICszNjIsNDYgQEAgdm9pZCBfX3ByaW50X3N5bWJvbChjb25zdCBjaGFy ICpmbXQsIHVucwogCWNvbnN0IGNoYXIgKm5hbWU7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNp emU7CiAJY2hhciBuYW1lYnVmW0tTWU1fTkFNRV9MRU4rMV07Ci0JY2hhciBidWZmZXJbc2l6ZW9m KCIlcyslI2x4LyUjbHggWyVzXSIpICsgS1NZTV9OQU1FX0xFTiArCi0JCSAgICAyKihCSVRTX1BF Ul9MT05HKjMvMTApICsgTU9EVUxFX05BTUVfTEVOICsgMV07CiAKIAluYW1lID0ga2FsbHN5bXNf bG9va3VwKGFkZHJlc3MsICZzaXplLCAmb2Zmc2V0LCAmbW9kbmFtZSwgbmFtZWJ1Zik7CiAKLQlp ZiAoIW5hbWUpCi0JCXNwcmludGYoYnVmZmVyLCAiMHglbHgiLCBhZGRyZXNzKTsKLQllbHNlIHsK LQkJaWYgKG1vZG5hbWUpCi0JCQlzcHJpbnRmKGJ1ZmZlciwgIiVzKyUjbHgvJSNseCBbJXNdIiwg bmFtZSwgb2Zmc2V0LAotCQkJCXNpemUsIG1vZG5hbWUpOwotCQllbHNlCi0JCQlzcHJpbnRmKGJ1 ZmZlciwgIiVzKyUjbHgvJSNseCIsIG5hbWUsIG9mZnNldCwgc2l6ZSk7CisJaWYgKCFuYW1lKSB7 CisJCWNoYXIgYWRkcnN0cltzaXplb2YoIjB4JWx4IikgKyAoQklUU19QRVJfTE9ORyozLzEwKV07 CisKKwkJc3ByaW50ZihhZGRyc3RyLCAiMHglbHgiLCBhZGRyZXNzKTsKKwkJcHJpbnRrKGZtdCwg YWRkcnN0cik7CisJCXJldHVybjsKKwl9CisKKwlpZiAobW9kbmFtZSkgeworCQkvKiBUaGlzIGlz IHByZXR0eSBzbWFsbC4gKi8KKwkJY2hhciBidWZmZXJbc2l6ZW9mKCIlcyslI2x4LyUjbHggWyVz XSIpCisJCQkgICArIHN0cmxlbihuYW1lKSArIDIqKEJJVFNfUEVSX0xPTkcqMy8xMCkKKwkJCSAg ICsgc3RybGVuKG1vZG5hbWUpXTsKKworCQlzcHJpbnRmKGJ1ZmZlciwgIiVzKyUjbHgvJSNseCBb JXNdIiwKKwkJCW5hbWUsIG9mZnNldCwgc2l6ZSwgbW9kbmFtZSk7CisJCXByaW50ayhmbXQsIGJ1 ZmZlcik7CisJfSBlbHNlIHsKKwkJY2hhciBidWZmZXJbc2l6ZW9mKCIlcyslI2x4LyUjbHgiKQor CQkJICAgKyBzdHJsZW4obmFtZSkgKyAyKihCSVRTX1BFUl9MT05HKjMvMTApXTsKKworCQlzcHJp bnRmKGJ1ZmZlciwgIiVzKyUjbHgvJSNseCIsIG5hbWUsIG9mZnNldCwgc2l6ZSk7CisJCXByaW50 ayhmbXQsIGJ1ZmZlcik7CiAJfQotCXByaW50ayhmbXQsIGJ1ZmZlcik7CiB9CiAKIC8qIFRvIGF2 b2lkIHVzaW5nIGdldF9zeW1ib2xfb2Zmc2V0IGZvciBldmVyeSBzeW1ib2wsIHdlIGNhcnJ5IHBy ZWZpeCBhbG9uZy4gKi8KIHN0cnVjdCBrYWxsc3ltX2l0ZXIKIHsKKyNpZmRlZiBDT05GSUdfS0FM TFNZTVNfVFJBRElUSU9OQUwKIAlsb2ZmX3QgcG9zOworI2VuZGlmCiAJc3RydWN0IG1vZHVsZSAq b3duZXI7CiAJdW5zaWduZWQgbG9uZyB2YWx1ZTsKKyNpZmRlZiBDT05GSUdfS0FMTFNZTVNfVFJB RElUSU9OQUwKIAl1bnNpZ25lZCBpbnQgbmFtZW9mZjsgLyogSWYgaXRlcmF0aW5nIGluIGNvcmUg a2VybmVsIHN5bWJvbHMgKi8KKyNlbmRpZgogCWNoYXIgdHlwZTsKIAljaGFyIG5hbWVbS1NZTV9O QU1FX0xFTisxXTsKIH07CkBAIC0yNzEsOSArNDEzLDkgQEAgc3RhdGljIHZvaWQgdXBjYXNlX2lm X2dsb2JhbChzdHJ1Y3Qga2FsbAogCQlpdGVyLT50eXBlICs9ICdBJyAtICdhJzsKIH0KIAotc3Rh dGljIGludCBnZXRfa3N5bWJvbF9tb2Qoc3RydWN0IGthbGxzeW1faXRlciAqaXRlcikKK3N0YXRp YyBpbnQgZ2V0X2tzeW1ib2xfbW9kKHN0cnVjdCBrYWxsc3ltX2l0ZXIgKml0ZXIsIGxvZmZfdCBw b3MpCiB7Ci0JaXRlci0+b3duZXIgPSBtb2R1bGVfZ2V0X2thbGxzeW0oaXRlci0+cG9zIC0ga2Fs bHN5bXNfbnVtX3N5bXMsCisJaXRlci0+b3duZXIgPSBtb2R1bGVfZ2V0X2thbGxzeW0ocG9zLAog CQkJCQkgJml0ZXItPnZhbHVlLAogCQkJCQkgJml0ZXItPnR5cGUsIGl0ZXItPm5hbWUpOwogCWlm IChpdGVyLT5vd25lciA9PSBOVUxMKQpAQCAtMjgzLDYgKzQyNSw3IEBAIHN0YXRpYyBpbnQgZ2V0 X2tzeW1ib2xfbW9kKHN0cnVjdCBrYWxsc3kKIAlyZXR1cm4gMTsKIH0KIAorI2lmZGVmIENPTkZJ R19LQUxMU1lNU19UUkFESVRJT05BTAogLyogUmV0dXJucyBzcGFjZSB0byBuZXh0IG5hbWUuICov CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfa3N5bWJvbF9jb3JlKHN0cnVjdCBrYWxsc3ltX2l0 ZXIgKml0ZXIpCiB7CkBAIC0zMDQsMjYgKzQ0Nyw4NyBAQCBzdGF0aWMgdm9pZCByZXNldF9pdGVy KHN0cnVjdCBrYWxsc3ltX2l0CiAJaXRlci0+bmFtZW9mZiA9IGdldF9zeW1ib2xfb2Zmc2V0KG5l d19wb3MpOwogCWl0ZXItPnBvcyA9IG5ld19wb3M7CiB9CisjZWxzZQorIyBkZWZpbmUgcmVzZXRf aXRlcihpdGVyLCBuZXdfcG9zKSAoKHZvaWQpKChpdGVyKS0+bmFtZVswXSA9ICdcMCcpKQorI2Vu ZGlmCiAKIC8qIFJldHVybnMgZmFsc2UgaWYgcG9zIGF0IG9yIHBhc3QgZW5kIG9mIGZpbGUuICov CiBzdGF0aWMgaW50IHVwZGF0ZV9pdGVyKHN0cnVjdCBrYWxsc3ltX2l0ZXIgKml0ZXIsIGxvZmZf dCBwb3MpCiB7CiAJLyogTW9kdWxlIHN5bWJvbHMgY2FuIGJlIGFjY2Vzc2VkIHJhbmRvbWx5LiAq LwotCWlmIChwb3MgPj0ga2FsbHN5bXNfbnVtX3N5bXMpIHsKLQkJaXRlci0+cG9zID0gcG9zOwot CQlyZXR1cm4gZ2V0X2tzeW1ib2xfbW9kKGl0ZXIpOwotCX0KKwlpZiAocG9zID49IGthbGxzeW1z X251bV9zeW1zKQorCQlyZXR1cm4gZ2V0X2tzeW1ib2xfbW9kKGl0ZXIsIHBvcyAtIGthbGxzeW1z X251bV9zeW1zKTsKIAkKKyNpZmRlZiBDT05GSUdfS0FMTFNZTVNfVFJBRElUSU9OQUwKIAkvKiBJ ZiB3ZSdyZSBub3Qgb24gdGhlIGRlc2lyZWQgcG9zaXRpb24sIHJlc2V0IHRvIG5ldyBwb3NpdGlv bi4gKi8KIAlpZiAocG9zICE9IGl0ZXItPnBvcykKIAkJcmVzZXRfaXRlcihpdGVyLCBwb3MpOwog CiAJaXRlci0+bmFtZW9mZiArPSBnZXRfa3N5bWJvbF9jb3JlKGl0ZXIpOwogCWl0ZXItPnBvcysr OworI2Vsc2UKKwlpdGVyLT5vd25lciA9IE5VTEw7CisJaXRlci0+dmFsdWUgPSBLQUxMU1lNU19W QVIoJmthbGxzeW1zX2tlcm5lbF9tb2R1bGUsIHN5bXRhYilbcG9zXS5zdF92YWx1ZTsKKwlpdGVy LT50eXBlID0gS0FMTFNZTVNfVkFSKCZrYWxsc3ltc19rZXJuZWxfbW9kdWxlLCBzeW10YWIpW3Bv c10uc3Rfb3RoZXI7CisJc3RybmNweShpdGVyLT5uYW1lLAorCQlLQUxMU1lNU19WQVIoJmthbGxz eW1zX2tlcm5lbF9tb2R1bGUsIHN0cnRhYikgKyBLQUxMU1lNU19WQVIoJmthbGxzeW1zX2tlcm5l bF9tb2R1bGUsIHN5bXRhYilbcG9zXS5zdF9uYW1lLAorCQkxMjcpOworCXVwY2FzZV9pZl9nbG9i YWwoaXRlcik7CisjZW5kaWYKIAogCXJldHVybiAxOwogfQogCisjaWYgZGVmaW5lZChDT05GSUdf TU9EVUxFUykgfHwgIWRlZmluZWQoQ09ORklHX0tBTExTWU1TX1RSQURJVElPTkFMKQorIyBpZm5k ZWYgQVJDSF9TSEZfU01BTEwKKyMgIGRlZmluZSBBUkNIX1NIRl9TTUFMTCAwCisjIGVuZGlmCisv KiBBcyBwZXIgbm0gKi8KKyMgaWZuZGVmIENPTkZJR19NT0RVTEVTCitzdGF0aWMgaW5saW5lIF9f aW5pdAorIyBlbmRpZgorY2hhciBrYWxsc3ltc19lbGZfdHlwZShjb25zdCBFbGZfU3ltICpzeW0s CisJCSAgICAgY29uc3QgRWxmX1NoZHIgKnNlY2hkcnMsCisJCSAgICAgY29uc3QgY2hhciAqc2Vj c3RyaW5ncykKK3sKKwlpZiAoRUxGX1NUX0JJTkQoc3ltLT5zdF9pbmZvKSA9PSBTVEJfV0VBSykg eworCQlpZiAoRUxGX1NUX1RZUEUoc3ltLT5zdF9pbmZvKSA9PSBTVFRfT0JKRUNUKQorCQkJcmV0 dXJuICd2JzsKKwkJZWxzZQorCQkJcmV0dXJuICd3JzsKKwl9CisJaWYgKHN5bS0+c3Rfc2huZHgg PT0gU0hOX1VOREVGKQorCQlyZXR1cm4gJ1UnOworCWlmIChzeW0tPnN0X3NobmR4ID09IFNITl9B QlMpCisJCXJldHVybiAnYSc7CisJaWYgKHN5bS0+c3Rfc2huZHggPj0gU0hOX0xPUkVTRVJWRSkK KwkJcmV0dXJuICc/JzsKKwlpZiAoc2VjaGRycykgeworCQlpZiAoc2VjaGRyc1tzeW0tPnN0X3No bmR4XS5zaF9mbGFncyAmIFNIRl9FWEVDSU5TVFIpCisJCQlyZXR1cm4gJ3QnOworCQlpZiAoc2Vj aGRyc1tzeW0tPnN0X3NobmR4XS5zaF9mbGFncyAmIFNIRl9BTExPQworCQkgICAgJiYgc2VjaGRy c1tzeW0tPnN0X3NobmR4XS5zaF90eXBlICE9IFNIVF9OT0JJVFMpIHsKKwkJCWlmICghKHNlY2hk cnNbc3ltLT5zdF9zaG5keF0uc2hfZmxhZ3MgJiBTSEZfV1JJVEUpKQorCQkJCXJldHVybiAncic7 CisJCQllbHNlIGlmIChzZWNoZHJzW3N5bS0+c3Rfc2huZHhdLnNoX2ZsYWdzICYgQVJDSF9TSEZf U01BTEwpCisJCQkJcmV0dXJuICdnJzsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gJ2QnOworCQl9CisJ CWlmIChzZWNoZHJzW3N5bS0+c3Rfc2huZHhdLnNoX3R5cGUgPT0gU0hUX05PQklUUykgeworCQkJ aWYgKHNlY2hkcnNbc3ltLT5zdF9zaG5keF0uc2hfZmxhZ3MgJiBBUkNIX1NIRl9TTUFMTCkKKwkJ CQlyZXR1cm4gJ3MnOworCQkJZWxzZQorCQkJCXJldHVybiAnYic7CisJCX0KKwkJaWYgKHN0cm5j bXAoc2Vjc3RyaW5ncyArIHNlY2hkcnNbc3ltLT5zdF9zaG5keF0uc2hfbmFtZSwKKwkJCSAgICAi LmRlYnVnIiwgc3RybGVuKCIuZGVidWciKSkgPT0gMCkKKwkJCXJldHVybiAnbic7CisJfQorCXJl dHVybiAnPyc7Cit9CisjZW5kaWYKKwogc3RhdGljIHZvaWQgKnNfbmV4dChzdHJ1Y3Qgc2VxX2Zp bGUgKm0sIHZvaWQgKnAsIGxvZmZfdCAqcG9zKQogewogCSgqcG9zKSsrOwpAQCAtNDE3LDQgKzYy MSw3MiBAQCBzdGF0aWMgaW50IF9faW5pdCBrYWxsc3ltc19pbml0KHZvaWQpCiB9CiBfX2luaXRj YWxsKGthbGxzeW1zX2luaXQpOwogCisjaWZuZGVmIENPTkZJR19LQUxMU1lNU19UUkFESVRJT05B TAorCitleHRlcm4gY29uc3Qgc2l6ZV90IGthbGxzeW1zX3NpemVfc2VjdGlvbnMsIGthbGxzeW1z X3NpemVfc3ltdGFiOworZXh0ZXJuIGNvbnN0IHNpemVfdCBrYWxsc3ltc19zaXplX3Noc3RydGFi LCBrYWxsc3ltc19zaXplX3N0cnRhYjsKKwordm9pZCBfX2luaXQga2FsbHN5bXNfZWFybHlfaW5p dCgpIHsKKwlFbGZfU2hkcipzZWN0aW9uOworCUVsZl9TeW0qc3ltYm9sOworCisJS0FMTFNZTVNf VkFSKCZrYWxsc3ltc19rZXJuZWxfbW9kdWxlLCBjb3JlX3NpemUpID0gX2VuZCAtIF90ZXh0Owor CUtBTExTWU1TX1ZBUigma2FsbHN5bXNfa2VybmVsX21vZHVsZSwgY29yZV90ZXh0X3NpemUpID0g X2V0ZXh0IC0gX3N0ZXh0OworCUtBTExTWU1TX1ZBUigma2FsbHN5bXNfa2VybmVsX21vZHVsZSwg aW5pdF9zaXplKSA9IF9faW5pdF9lbmQgLSBfX2luaXRfYmVnaW47CisJS0FMTFNZTVNfVkFSKCZr YWxsc3ltc19rZXJuZWxfbW9kdWxlLCBpbml0X3RleHRfc2l6ZSkgPSBfZWluaXR0ZXh0IC0gX3Np bml0dGV4dDsKKworCUJVR19PTihrYWxsc3ltc19zaXplX3NlY3Rpb25zIDw9IHNpemVvZigqa2Fs bHN5bXNfc2VjdGlvbnMpKTsKKwlCVUdfT04oa2FsbHN5bXNfc2l6ZV9zZWN0aW9ucyAlIHNpemVv Zigqa2FsbHN5bXNfc2VjdGlvbnMpKTsKKwlCVUdfT04oa2FsbHN5bXNfc2l6ZV9zaHN0cnRhYiA8 PSAwKTsKKwlCVUdfT04oKmthbGxzeW1zX3Noc3RydGFiKTsKKwlCVUdfT04oa2FsbHN5bXNfc2hz dHJ0YWJba2FsbHN5bXNfc2l6ZV9zaHN0cnRhYiAtIDFdKTsKKwlmb3Ioc2VjdGlvbiA9IGthbGxz eW1zX3NlY3Rpb25zICsgMTsgKHVuc2lnbmVkIGxvbmcpc2VjdGlvbiA8ICh1bnNpZ25lZCBsb25n KWthbGxzeW1zX3NlY3Rpb25zICsga2FsbHN5bXNfc2l6ZV9zZWN0aW9uczsgKytzZWN0aW9uKQor CQlpZihzZWN0aW9uLT5zaF9uYW1lID49IGthbGxzeW1zX3NpemVfc2hzdHJ0YWIpCisJCQlzZWN0 aW9uLT5zaF9uYW1lID0gMDsKKwlLQUxMU1lNU19WQVIoJmthbGxzeW1zX2tlcm5lbF9tb2R1bGUs IG51bV9zZWN0aW9ucykgPSBrYWxsc3ltc19zaXplX3NlY3Rpb25zIC8gc2l6ZW9mKCprYWxsc3lt c19zZWN0aW9ucyk7CisKKwlCVUdfT04oa2FsbHN5bXNfc2l6ZV9zeW10YWIgPD0gc2l6ZW9mKCpr YWxsc3ltc19zeW10YWIpKTsKKwlCVUdfT04oa2FsbHN5bXNfc2l6ZV9zeW10YWIgJSBzaXplb2Yo KmthbGxzeW1zX3N5bXRhYikpOworCUJVR19PTihrYWxsc3ltc19zaXplX3N0cnRhYiA8PSAwKTsK KwlCVUdfT04oKmthbGxzeW1zX3N0cnRhYik7CisJQlVHX09OKGthbGxzeW1zX3N0cnRhYltrYWxs c3ltc19zaXplX3N0cnRhYiAtIDFdKTsKKwlmb3Ioc3ltYm9sID0ga2FsbHN5bXNfc3ltdGFiICsg MTsgKHVuc2lnbmVkIGxvbmcpc3ltYm9sIDwgKHVuc2lnbmVkIGxvbmcpa2FsbHN5bXNfc3ltdGFi ICsga2FsbHN5bXNfc2l6ZV9zeW10YWI7ICsrc3ltYm9sKSB7CisJCWlmKHN5bWJvbC0+c3RfbmFt ZSA+PSBrYWxsc3ltc19zaXplX3N0cnRhYikKKwkJCXN5bWJvbC0+c3RfbmFtZSA9IDA7CisJCXN5 bWJvbC0+c3Rfb3RoZXIgPSBrYWxsc3ltc19lbGZfdHlwZShzeW1ib2wsIGthbGxzeW1zX3NlY3Rp b25zLCBrYWxsc3ltc19zaHN0cnRhYik7CisJfQorCUtBTExTWU1TX1ZBUigma2FsbHN5bXNfa2Vy bmVsX21vZHVsZSwgbnVtX3N5bXRhYikgPSBrYWxsc3ltc19zaXplX3N5bXRhYiAvIHNpemVvZigq a2FsbHN5bXNfc3ltdGFiKTsKK30KKworCit2b2lkIF9faW5pdCBrYWxsc3ltc19pbml0X2RvbmUo KSB7CisjIGlmZGVmIENPTkZJR19NT0RVTEVTCisJbW9kdWxlX2luaXRfZG9uZSgma2FsbHN5bXNf a2VybmVsX21vZHVsZSk7CisjIGVsc2UKKwlFbGZfU2hkcipzZWN0aW9uOworCWNvbnN0IEVsZl9T eW0qc3JjOworCUVsZl9TeW0qZHN0OworCisJZm9yKHNlY3Rpb24gPSBrYWxsc3ltc19zZWN0aW9u cyArIDE7ICh1bnNpZ25lZCBsb25nKXNlY3Rpb24gPCAodW5zaWduZWQgbG9uZylrYWxsc3ltc19z ZWN0aW9ucyArIGthbGxzeW1zX3NpemVfc2VjdGlvbnM7ICsrc2VjdGlvbikKKwkJaWYoc2VjdGlv bi0+c2hfYWRkciA+PSAodW5zaWduZWQgbG9uZylfX2luaXRfYmVnaW4KKwkJICAgJiYgKHNlY3Rp b24tPnNoX3NpemUKKwkJICAgICAgID8gc2VjdGlvbi0+c2hfYWRkciArIHNlY3Rpb24tPnNoX3Np emUgLSAxCisJCSAgICAgICA6IHNlY3Rpb24tPnNoX2FkZHIpIDwgKHVuc2lnbmVkIGxvbmcpX19p bml0X2VuZCkKKwkJCXNlY3Rpb24tPnNoX2FkZHIgPSAwOworCWZvcihzcmMgPSBkc3QgPSBrYWxs c3ltc19zeW10YWIgKyAxOyAodW5zaWduZWQgbG9uZylzcmMgPCAodW5zaWduZWQgbG9uZylrYWxs c3ltc19zeW10YWIgKyBrYWxsc3ltc19zaXplX3N5bXRhYjsgKytzcmMpIHsKKwkJaWYoIXNyYy0+ c3Rfc2huZHggfHwgIXNyYy0+c3RfbmFtZSkKKwkJCWNvbnRpbnVlOworCQlpZihzcmMtPnN0X3No bmR4IDwga2FsbHN5bXNfbnVtX3NlY3Rpb25zCisJCSAgICYmICFrYWxsc3ltc19zZWN0aW9uc1tz cmMtPnN0X3NobmR4XS5zaF9hZGRyKQorCQkJY29udGludWU7CisJCWlmKHNyYyAhPSBkc3QpCisJ CQkqZHN0ID0gKnNyYzsKKwkJKytkc3Q7CisJfQorCWthbGxzeW1zX251bV9zeW10YWIgPSBkc3Qg LSBrYWxsc3ltc19zeW10YWI7CisjIGVuZGlmCit9CisKKyNlbmRpZiAvKiBDT05GSUdfS0FMTFNZ TVNfVFJBRElUSU9OQUwgKi8KKwogRVhQT1JUX1NZTUJPTChfX3ByaW50X3N5bWJvbCk7CmRpZmYg LU5wcnUgMi42LjEzL2tlcm5lbC9tb2R1bGUuYyAyLjYuMTMta2FsbHN5bXMva2VybmVsL21vZHVs ZS5jCi0tLSAyLjYuMTMva2VybmVsL21vZHVsZS5jCTIwMDUtMDgtMjkgMDE6NDE6MDEuMDAwMDAw MDAwICswMjAwCisrKyAyLjYuMTMta2FsbHN5bXMva2VybmVsL21vZHVsZS5jCTIwMDUtMDktMDgg MTM6NDY6NTMuMDAwMDAwMDAwICswMjAwCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8bGlu dXgvc3RvcF9tYWNoaW5lLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8 bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KICNpbmNsdWRlIDxh c20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxhc20v Y2FjaGVmbHVzaC5oPgpAQCAtMTE2Miw2ICsxMTYzLDggQEAgc3RhdGljIGludCBfX3VubGlua19t b2R1bGUodm9pZCAqX21vZCkKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgY2xlYW51cF9r YWxsc3ltcyhzdHJ1Y3QgbW9kdWxlICopOworCiAvKiBGcmVlIGEgbW9kdWxlLCByZW1vdmUgZnJv bSBsaXN0cywgZXRjIChtdXN0IGhvbGQgbW9kdWxlIG11dGV4KS4gKi8KIHN0YXRpYyB2b2lkIGZy ZWVfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKQEAgLTExNzYsNiArMTE3OSw4IEBAIHN0 YXRpYyB2b2lkIGZyZWVfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm0KIAkvKiBNb2R1bGUgdW5sb2Fk IHN0dWZmICovCiAJbW9kdWxlX3VubG9hZF9mcmVlKG1vZCk7CiAKKwljbGVhbnVwX2thbGxzeW1z KG1vZCk7CisKIAkvKiBUaGlzIG1heSBiZSBOVUxMLCBidXQgdGhhdCdzIE9LICovCiAJbW9kdWxl X2ZyZWUobW9kLCBtb2QtPm1vZHVsZV9pbml0KTsKIAlrZnJlZShtb2QtPmFyZ3MpOwpAQCAtMTQy NCw0OSArMTQyOSw5IEBAIGludCBpc19leHBvcnRlZChjb25zdCBjaGFyICpuYW1lLCBjb25zdCAK IAlyZXR1cm4gMDsKIH0KIAotLyogQXMgcGVyIG5tICovCi1zdGF0aWMgY2hhciBlbGZfdHlwZShj b25zdCBFbGZfU3ltICpzeW0sCi0JCSAgICAgRWxmX1NoZHIgKnNlY2hkcnMsCi0JCSAgICAgY29u c3QgY2hhciAqc2Vjc3RyaW5ncywKLQkJICAgICBzdHJ1Y3QgbW9kdWxlICptb2QpCi17Ci0JaWYg KEVMRl9TVF9CSU5EKHN5bS0+c3RfaW5mbykgPT0gU1RCX1dFQUspIHsKLQkJaWYgKEVMRl9TVF9U WVBFKHN5bS0+c3RfaW5mbykgPT0gU1RUX09CSkVDVCkKLQkJCXJldHVybiAndic7Ci0JCWVsc2UK LQkJCXJldHVybiAndyc7Ci0JfQotCWlmIChzeW0tPnN0X3NobmR4ID09IFNITl9VTkRFRikKLQkJ cmV0dXJuICdVJzsKLQlpZiAoc3ltLT5zdF9zaG5keCA9PSBTSE5fQUJTKQotCQlyZXR1cm4gJ2En OwotCWlmIChzeW0tPnN0X3NobmR4ID49IFNITl9MT1JFU0VSVkUpCi0JCXJldHVybiAnPyc7Ci0J aWYgKHNlY2hkcnNbc3ltLT5zdF9zaG5keF0uc2hfZmxhZ3MgJiBTSEZfRVhFQ0lOU1RSKQotCQly ZXR1cm4gJ3QnOwotCWlmIChzZWNoZHJzW3N5bS0+c3Rfc2huZHhdLnNoX2ZsYWdzICYgU0hGX0FM TE9DCi0JICAgICYmIHNlY2hkcnNbc3ltLT5zdF9zaG5keF0uc2hfdHlwZSAhPSBTSFRfTk9CSVRT KSB7Ci0JCWlmICghKHNlY2hkcnNbc3ltLT5zdF9zaG5keF0uc2hfZmxhZ3MgJiBTSEZfV1JJVEUp KQotCQkJcmV0dXJuICdyJzsKLQkJZWxzZSBpZiAoc2VjaGRyc1tzeW0tPnN0X3NobmR4XS5zaF9m bGFncyAmIEFSQ0hfU0hGX1NNQUxMKQotCQkJcmV0dXJuICdnJzsKLQkJZWxzZQotCQkJcmV0dXJu ICdkJzsKLQl9Ci0JaWYgKHNlY2hkcnNbc3ltLT5zdF9zaG5keF0uc2hfdHlwZSA9PSBTSFRfTk9C SVRTKSB7Ci0JCWlmIChzZWNoZHJzW3N5bS0+c3Rfc2huZHhdLnNoX2ZsYWdzICYgQVJDSF9TSEZf U01BTEwpCi0JCQlyZXR1cm4gJ3MnOwotCQllbHNlCi0JCQlyZXR1cm4gJ2InOwotCX0KLQlpZiAo c3RybmNtcChzZWNzdHJpbmdzICsgc2VjaGRyc1tzeW0tPnN0X3NobmR4XS5zaF9uYW1lLAotCQkg ICAgIi5kZWJ1ZyIsIHN0cmxlbigiLmRlYnVnIikpID09IDApCi0JCXJldHVybiAnbic7Ci0JcmV0 dXJuICc/JzsKLX0KLQogc3RhdGljIHZvaWQgYWRkX2thbGxzeW1zKHN0cnVjdCBtb2R1bGUgKm1v ZCwKLQkJCSBFbGZfU2hkciAqc2VjaGRycywKKwkJCSBjb25zdCBFbGZfRWhkciAqaGRyLAorCQkJ IGNvbnN0IEVsZl9TaGRyICpzZWNoZHJzLAogCQkJIHVuc2lnbmVkIGludCBzeW1pbmRleCwKIAkJ CSB1bnNpZ25lZCBpbnQgc3RyaW5kZXgsCiAJCQkgY29uc3QgY2hhciAqc2Vjc3RyaW5ncykKQEAg LTE0NzUsMjMgKzE0NDAsMTI1IEBAIHN0YXRpYyB2b2lkIGFkZF9rYWxsc3ltcyhzdHJ1Y3QgbW9k dWxlICoKIAogCW1vZC0+c3ltdGFiID0gKHZvaWQgKilzZWNoZHJzW3N5bWluZGV4XS5zaF9hZGRy OwogCW1vZC0+bnVtX3N5bXRhYiA9IHNlY2hkcnNbc3ltaW5kZXhdLnNoX3NpemUgLyBzaXplb2Yo RWxmX1N5bSk7Ci0JbW9kLT5zdHJ0YWIgPSAodm9pZCAqKXNlY2hkcnNbc3RyaW5kZXhdLnNoX2Fk ZHI7CisJbW9kLT5zdHJ0YWIgPSAoY29uc3Qgdm9pZCAqKXNlY2hkcnNbc3RyaW5kZXhdLnNoX2Fk ZHI7CisKKwlpZiAobW9kLT5udW1fc3ltdGFiID4gMQorCSAgICAmJiBzZWNoZHJzW3N0cmluZGV4 XS5zaF9zaXplID4gMAorCSAgICAmJiAhKm1vZC0+c3RydGFiCisJICAgICYmICFtb2QtPnN0cnRh YltzZWNoZHJzW3N0cmluZGV4XS5zaF9zaXplIC0gMV0pIHsKKwkJLyogU2V0IHR5cGVzIHVwIHdo aWxlIHdlIHN0aWxsIGhhdmUgYWNjZXNzIHRvIHNlY3Rpb25zLiAqLworCQlmb3IgKGkgPSAxOyBp IDwgbW9kLT5udW1fc3ltdGFiOyBpKyspIHsKKwkJCWlmIChtb2QtPnN5bXRhYltpXS5zdF9uYW1l ID49IHNlY2hkcnNbc3RyaW5kZXhdLnNoX3NpemUpCisJCQkJbW9kLT5zeW10YWJbaV0uc3RfbmFt ZSA9IDA7CisJCQltb2QtPnN5bXRhYltpXS5zdF9vdGhlcgorCQkJCT0ga2FsbHN5bXNfZWxmX3R5 cGUoJm1vZC0+c3ltdGFiW2ldLCBzZWNoZHJzLCBzZWNzdHJpbmdzKTsKKwkJfQorCX0KKwllbHNl IHsKKwkJbW9kLT5zeW10YWIgPSBOVUxMOworCQltb2QtPm51bV9zeW10YWIgPSAwOworCQltb2Qt PnN0cnRhYiA9IE5VTEw7CisJfQogCi0JLyogU2V0IHR5cGVzIHVwIHdoaWxlIHdlIHN0aWxsIGhh dmUgYWNjZXNzIHRvIHNlY3Rpb25zLiAqLwotCWZvciAoaSA9IDA7IGkgPCBtb2QtPm51bV9zeW10 YWI7IGkrKykKLQkJbW9kLT5zeW10YWJbaV0uc3RfaW5mbwotCQkJPSBlbGZfdHlwZSgmbW9kLT5z eW10YWJbaV0sIHNlY2hkcnMsIHNlY3N0cmluZ3MsIG1vZCk7CisjIGlmbmRlZiBDT05GSUdfS0FM TFNZTVNfVFJBRElUSU9OQUwKKwlpZiAoaGRyLT5lX3NobnVtID4gMQorCSAgICAmJiBzZWNoZHJz W2hkci0+ZV9zaHN0cm5keF0uc2hfc2l6ZSA+IDAKKwkgICAgJiYgISpzZWNzdHJpbmdzCisJICAg ICYmICFzZWNzdHJpbmdzW3NlY2hkcnNbaGRyLT5lX3Noc3RybmR4XS5zaF9zaXplIC0gMV0pIHsK KwkJaWYgKGhkci0+ZV9zaG51bSA8IFBBR0VfU0laRSAvIHNpemVvZigqc2VjaGRycykpCisJCQlt b2QtPnNlY3Rpb25zID0ga21hbGxvYyhoZHItPmVfc2hudW0gKiBzaXplb2YoKnNlY2hkcnMpLCBH RlBfS0VSTkVMKTsKKwkJZWxzZQorCQkJbW9kLT5zZWN0aW9ucyA9IHZtYWxsb2MoaGRyLT5lX3No bnVtICogc2l6ZW9mKCpzZWNoZHJzKSk7CisJfQorCWVsc2UKKwkJbW9kLT5zZWN0aW9ucyA9IE5V TEw7CisJaWYgKG1vZC0+c2VjdGlvbnMpIHsKKwkJbW9kLT5udW1fc2VjdGlvbnMgPSBoZHItPmVf c2hudW07CisJCW1lbXNldChtb2QtPnNlY3Rpb25zLCAwLCBzaXplb2YoKm1vZC0+c2VjdGlvbnMp KTsKKwkJbW9kLT5zaHN0cnRhYiA9IChjb25zdCB2b2lkICopc2VjaGRyc1toZHItPmVfc2hzdHJu ZHhdLnNoX2FkZHI7CisJCWZvciAoaSA9IDE7IGkgPCBtb2QtPm51bV9zZWN0aW9uczsgKytpKSB7 CisJCQltb2QtPnNlY3Rpb25zW2ldID0gc2VjaGRyc1tpXTsKKwkJCWlmIChtb2QtPnNlY3Rpb25z W2ldLnNoX25hbWUgPj0gc2VjaGRyc1toZHItPmVfc2hzdHJuZHhdLnNoX3NpemUpCisJCQkJbW9k LT5zZWN0aW9uc1tpXS5zaF9uYW1lID0gMDsKKwkJCWlmICghKG1vZC0+c2VjdGlvbnNbaV0uc2hf ZmxhZ3MgJiBTSEZfQUxMT0MpKQorCQkJCW1vZC0+c2VjdGlvbnNbaV0uc2hfYWRkciA9IDA7CisJ CX0KKwl9CisJZWxzZSB7CisJCW1vZC0+bnVtX3NlY3Rpb25zID0gMDsKKwkJbW9kLT5zaHN0cnRh YiA9IE5VTEw7CisJfQorI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIGNsZWFudXBfa2FsbHN5bXMo c3RydWN0IG1vZHVsZSAqbW9kKQoreworIyBpZm5kZWYgQ09ORklHX0tBTExTWU1TX1RSQURJVElP TkFMCisJaWYgKG1vZC0+bnVtX3NlY3Rpb25zKSB7CisJCWlmIChtb2QtPm51bV9zZWN0aW9ucyA8 IFBBR0VfU0laRSAvIHNpemVvZigqbW9kLT5zZWN0aW9ucykpCisJCQlrZnJlZShtb2QtPnNlY3Rp b25zKTsKKwkJZWxzZQorCQkJdmZyZWUobW9kLT5zZWN0aW9ucyk7CisJCW1vZC0+bnVtX3NlY3Rp b25zID0gMDsKKwl9CisjIGVuZGlmCisJbW9kLT5udW1fc3ltdGFiID0gMDsKIH0KICNlbHNlCiBz dGF0aWMgaW5saW5lIHZvaWQgYWRkX2thbGxzeW1zKHN0cnVjdCBtb2R1bGUgKm1vZCwKLQkJCQlF bGZfU2hkciAqc2VjaGRycywKKwkJCQljb25zdCBFbGZfRWhkciAqaGRyLAorCQkJCWNvbnN0IEVs Zl9TaGRyICpzZWNoZHJzLAogCQkJCXVuc2lnbmVkIGludCBzeW1pbmRleCwKIAkJCQl1bnNpZ25l ZCBpbnQgc3RyaW5kZXgsCiAJCQkJY29uc3QgY2hhciAqc2Vjc3RyaW5ncykKIHsKIH0KKworc3Rh dGljIGlubGluZSB2b2lkIGNsZWFudXBfa2FsbHN5bXMoc3RydWN0IG1vZHVsZSAqbW9kKQorewor fQogI2VuZGlmIC8qIENPTkZJR19LQUxMU1lNUyAqLwogCisjaWZuZGVmIENPTkZJR19LQUxMU1lN Uworc3RhdGljIGlubGluZQorI2VuZGlmCit2b2lkIG1vZHVsZV9pbml0X2RvbmUoc3RydWN0IG1v ZHVsZSAqbW9kKQoreworI2lmZGVmIENPTkZJR19LQUxMU1lNUworCWlmIChtb2QtPmluaXRfc2l6 ZSkgeworCQljb25zdCBFbGZfU3ltKnNyYzsKKwkJRWxmX1N5bSpkc3Q7CisjIGlmbmRlZiBDT05G SUdfS0FMTFNZTVNfVFJBRElUSU9OQUwKKwkJRWxmX1NoZHIqc2VjdGlvbjsKKworCQlmb3Ioc2Vj dGlvbiA9IG1vZC0+c2VjdGlvbnMgKyAxOyBzZWN0aW9uIDwgbW9kLT5zZWN0aW9ucyArIG1vZC0+ bnVtX3NlY3Rpb25zOyArK3NlY3Rpb24pCisJCQlpZihzZWN0aW9uLT5zaF9lbnRzaXplICYgSU5J VF9PRkZTRVRfTUFTSykKKwkJCQlzZWN0aW9uLT5zaF9hZGRyID0gMDsKKyMgZW5kaWYKKwkJZm9y KHNyYyA9IGRzdCA9IG1vZC0+c3ltdGFiICsgMTsgc3JjIDwgbW9kLT5zeW10YWIgKyBtb2QtPm51 bV9zeW10YWI7ICsrc3JjKSB7CisJCQlpZighc3JjLT5zdF9zaG5keCB8fCAhc3JjLT5zdF9uYW1l KQorCQkJCWNvbnRpbnVlOworIyBpZm5kZWYgQ09ORklHX0tBTExTWU1TX1RSQURJVElPTkFMCisJ CQlpZihzcmMtPnN0X3NobmR4IDwgbW9kLT5udW1fc2VjdGlvbnMKKwkJCSAgICYmICFtb2QtPnNl Y3Rpb25zW3NyYy0+c3Rfc2huZHhdLnNoX2FkZHIpCisJCQkJY29udGludWU7CisjIGVsc2UKKwkJ CWlmKHNyYy0+c3RfdmFsdWUgPj0gKHVuc2lnbmVkIGxvbmcpbW9kLT5tb2R1bGVfaW5pdAorCQkJ ICAgJiYgc3JjLT5zdF92YWx1ZSA8ICh1bnNpZ25lZCBsb25nKW1vZC0+bW9kdWxlX2luaXQgKyBt b2QtPmluaXRfc2l6ZSkKKwkJCQljb250aW51ZTsKKyMgZW5kaWYKKwkJCWlmKHNyYyAhPSBkc3Qp CisJCQkJKmRzdCA9ICpzcmM7CisJCQkrK2RzdDsKKwkJfQorCQltb2QtPm51bV9zeW10YWIgPSBk c3QgLSBtb2QtPnN5bXRhYjsKKwl9CisjZW5kaWYKKwltb2QtPm1vZHVsZV9pbml0ID0gTlVMTDsK Kwltb2QtPmluaXRfc2l6ZSA9IDA7CisJbW9kLT5pbml0X3RleHRfc2l6ZSA9IDA7Cit9CisKIC8q IEFsbG9jYXRlIGFuZCBsb2FkIHRoZSBtb2R1bGU6IG5vdGUgdGhhdCBzaXplIG9mIHNlY3Rpb24g MCBpcyBhbHdheXMKICAgIHplcm8sIGFuZCB3ZSByZWx5IG9uIHRoaXMgZm9yIG9wdGlvbmFsIHNl Y3Rpb25zLiAqLwogc3RhdGljIHN0cnVjdCBtb2R1bGUgKmxvYWRfbW9kdWxlKHZvaWQgX191c2Vy ICp1bW9kLApAQCAtMTUyOSw3ICsxNTk2LDggQEAgc3RhdGljIHN0cnVjdCBtb2R1bGUgKmxvYWRf bW9kdWxlKHZvaWQgXwogCWlmIChtZW1jbXAoaGRyLT5lX2lkZW50LCBFTEZNQUcsIDQpICE9IDAK IAkgICAgfHwgaGRyLT5lX3R5cGUgIT0gRVRfUkVMCiAJICAgIHx8ICFlbGZfY2hlY2tfYXJjaCho ZHIpCi0JICAgIHx8IGhkci0+ZV9zaGVudHNpemUgIT0gc2l6ZW9mKCpzZWNoZHJzKSkgeworCSAg ICB8fCBoZHItPmVfc2hlbnRzaXplICE9IHNpemVvZigqc2VjaGRycykKKwkgICAgfHwgIWhkci0+ ZV9zaHN0cm5keCkgewogCQllcnIgPSAtRU5PRVhFQzsKIAkJZ290byBmcmVlX2hkcjsKIAl9CkBA IC0xNTUzLDYgKzE2MjEsMTAgQEAgc3RhdGljIHN0cnVjdCBtb2R1bGUgKmxvYWRfbW9kdWxlKHZv aWQgXwogCiAJCS8qIEludGVybmFsIHN5bWJvbHMgYW5kIHN0cmluZ3MuICovCiAJCWlmIChzZWNo ZHJzW2ldLnNoX3R5cGUgPT0gU0hUX1NZTVRBQikgeworCQkJaWYgKHN5bWluZGV4KSB7CisJCQkJ ZXJyID0gLUVOT0VYRUM7CisJCQkJZ290byBmcmVlX2hkcjsKKwkJCX0KIAkJCXN5bWluZGV4ID0g aTsKIAkJCXN0cmluZGV4ID0gc2VjaGRyc1tpXS5zaF9saW5rOwogCQkJc3RydGFiID0gKGNoYXIg KiloZHIgKyBzZWNoZHJzW3N0cmluZGV4XS5zaF9vZmZzZXQ7CkBAIC0xNTY0LDYgKzE2MzYsMTEg QEAgc3RhdGljIHN0cnVjdCBtb2R1bGUgKmxvYWRfbW9kdWxlKHZvaWQgXwogI2VuZGlmCiAJfQog CisJaWYgKCFzeW1pbmRleCB8fCAhc3RyaW5kZXgpIHsKKwkJZXJyID0gLUVOT0VYRUM7CisJCWdv dG8gZnJlZV9oZHI7CisJfQorCiAJbW9kaW5kZXggPSBmaW5kX3NlYyhoZHIsIHNlY2hkcnMsIHNl Y3N0cmluZ3MsCiAJCQkgICAgIi5nbnUubGlua29uY2UudGhpc19tb2R1bGUiKTsKIAlpZiAoIW1v ZGluZGV4KSB7CkBAIC0xNTk1LDkgKzE2NzIsMTQgQEAgc3RhdGljIHN0cnVjdCBtb2R1bGUgKmxv YWRfbW9kdWxlKHZvaWQgXwogCS8qIERvbid0IGtlZXAgbW9kaW5mbyBzZWN0aW9uICovCiAJc2Vj aGRyc1tpbmZvaW5kZXhdLnNoX2ZsYWdzICY9IH4odW5zaWduZWQgbG9uZylTSEZfQUxMT0M7CiAj aWZkZWYgQ09ORklHX0tBTExTWU1TCisJbW9kLT5udW1fc3ltdGFiID0gMDsKIAkvKiBLZWVwIHN5 bWJvbCBhbmQgc3RyaW5nIHRhYmxlcyBmb3IgZGVjb2RpbmcgbGF0ZXIuICovCiAJc2VjaGRyc1tz eW1pbmRleF0uc2hfZmxhZ3MgfD0gU0hGX0FMTE9DOwogCXNlY2hkcnNbc3RyaW5kZXhdLnNoX2Zs YWdzIHw9IFNIRl9BTExPQzsKKyMgaWZuZGVmIENPTkZJR19LQUxMU1lNU19UUkFESVRJT05BTAor CW1vZC0+bnVtX3NlY3Rpb25zID0gMDsKKwlzZWNoZHJzW2hkci0+ZV9zaHN0cm5keF0uc2hfZmxh Z3MgfD0gU0hGX0FMTE9DOworIyBlbmRpZgogI2VuZGlmCiAKIAkvKiBDaGVjayBtb2R1bGUgc3Ry dWN0IHZlcnNpb24gbm93LCBiZWZvcmUgd2UgdHJ5IHRvIHVzZSBtb2R1bGUuICovCkBAIC0xNzcz LDcgKzE4NTUsNyBAQCBzdGF0aWMgc3RydWN0IG1vZHVsZSAqbG9hZF9tb2R1bGUodm9pZCBfCiAJ cGVyY3B1X21vZGNvcHkobW9kLT5wZXJjcHUsICh2b2lkICopc2VjaGRyc1twY3B1aW5kZXhdLnNo X2FkZHIsCiAJCSAgICAgICBzZWNoZHJzW3BjcHVpbmRleF0uc2hfc2l6ZSk7CiAKLQlhZGRfa2Fs bHN5bXMobW9kLCBzZWNoZHJzLCBzeW1pbmRleCwgc3RyaW5kZXgsIHNlY3N0cmluZ3MpOworCWFk ZF9rYWxsc3ltcyhtb2QsIGhkciwgc2VjaGRycywgc3ltaW5kZXgsIHN0cmluZGV4LCBzZWNzdHJp bmdzKTsKIAogCWVyciA9IG1vZHVsZV9maW5hbGl6ZShoZHIsIHNlY2hkcnMsIG1vZCk7CiAJaWYg KGVyciA8IDApCkBAIC0xODIzLDYgKzE5MDUsNyBAQCBzdGF0aWMgc3RydWN0IG1vZHVsZSAqbG9h ZF9tb2R1bGUodm9pZCBfCiAJbW9kdWxlX2FyY2hfY2xlYW51cChtb2QpOwogIGNsZWFudXA6CiAJ bW9kdWxlX3VubG9hZF9mcmVlKG1vZCk7CisJY2xlYW51cF9rYWxsc3ltcyhtb2QpOwogCW1vZHVs ZV9mcmVlKG1vZCwgbW9kLT5tb2R1bGVfaW5pdCk7CiAgZnJlZV9jb3JlOgogCW1vZHVsZV9mcmVl KG1vZCwgbW9kLT5tb2R1bGVfY29yZSk7CkBAIC0xOTI4LDkgKzIwMTEsNyBAQCBzeXNfaW5pdF9t b2R1bGUodm9pZCBfX3VzZXIgKnVtb2QsCiAJLyogRHJvcCBpbml0aWFsIHJlZmVyZW5jZS4gKi8K IAltb2R1bGVfcHV0KG1vZCk7CiAJbW9kdWxlX2ZyZWUobW9kLCBtb2QtPm1vZHVsZV9pbml0KTsK LQltb2QtPm1vZHVsZV9pbml0ID0gTlVMTDsKLQltb2QtPmluaXRfc2l6ZSA9IDA7Ci0JbW9kLT5p bml0X3RleHRfc2l6ZSA9IDA7CisJbW9kdWxlX2luaXRfZG9uZShtb2QpOwogCXVwKCZtb2R1bGVf bXV0ZXgpOwogCiAJcmV0dXJuIDA7CkBAIC0xOTQyLDU4ICsyMDIzLDYgQEAgc3RhdGljIGlubGlu ZSBpbnQgd2l0aGluKHVuc2lnbmVkIGxvbmcgYQogfQogCiAjaWZkZWYgQ09ORklHX0tBTExTWU1T Ci0vKgotICogVGhpcyBpZ25vcmVzIHRoZSBpbnRlbnNlbHkgYW5ub3lpbmcgIm1hcHBpbmcgc3lt Ym9scyIgZm91bmQKLSAqIGluIEFSTSBFTEYgZmlsZXM6ICRhLCAkdCBhbmQgJGQuCi0gKi8KLXN0 YXRpYyBpbmxpbmUgaW50IGlzX2FybV9tYXBwaW5nX3N5bWJvbChjb25zdCBjaGFyICpzdHIpCi17 Ci0JcmV0dXJuIHN0clswXSA9PSAnJCcgJiYgc3RyY2hyKCJhdGQiLCBzdHJbMV0pIAotCSAgICAg ICAmJiAoc3RyWzJdID09ICdcMCcgfHwgc3RyWzJdID09ICcuJyk7Ci19Ci0KLXN0YXRpYyBjb25z dCBjaGFyICpnZXRfa3N5bWJvbChzdHJ1Y3QgbW9kdWxlICptb2QsCi0JCQkgICAgICAgdW5zaWdu ZWQgbG9uZyBhZGRyLAotCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgKnNpemUsCi0JCQkgICAgICAg dW5zaWduZWQgbG9uZyAqb2Zmc2V0KQotewotCXVuc2lnbmVkIGludCBpLCBiZXN0ID0gMDsKLQl1 bnNpZ25lZCBsb25nIG5leHR2YWw7Ci0KLQkvKiBBdCB3b3JzZSwgbmV4dCB2YWx1ZSBpcyBhdCBl bmQgb2YgbW9kdWxlICovCi0JaWYgKHdpdGhpbihhZGRyLCBtb2QtPm1vZHVsZV9pbml0LCBtb2Qt PmluaXRfc2l6ZSkpCi0JCW5leHR2YWwgPSAodW5zaWduZWQgbG9uZyltb2QtPm1vZHVsZV9pbml0 K21vZC0+aW5pdF90ZXh0X3NpemU7Ci0JZWxzZSAKLQkJbmV4dHZhbCA9ICh1bnNpZ25lZCBsb25n KW1vZC0+bW9kdWxlX2NvcmUrbW9kLT5jb3JlX3RleHRfc2l6ZTsKLQotCS8qIFNjYW4gZm9yIGNs b3Nlc3QgcHJlY2VlZGluZyBzeW1ib2wsIGFuZCBuZXh0IHN5bWJvbC4gKEVMRgotICAgICAgICAg ICBzdGFydHMgcmVhbCBzeW1ib2xzIGF0IDEpLiAqLwotCWZvciAoaSA9IDE7IGkgPCBtb2QtPm51 bV9zeW10YWI7IGkrKykgewotCQlpZiAobW9kLT5zeW10YWJbaV0uc3Rfc2huZHggPT0gU0hOX1VO REVGKQotCQkJY29udGludWU7Ci0KLQkJLyogV2UgaWdub3JlIHVubmFtZWQgc3ltYm9sczogdGhl eSdyZSB1bmluZm9ybWF0aXZlCi0JCSAqIGFuZCBpbnNlcnRlZCBhdCBhIHdoaW0uICovCi0JCWlm IChtb2QtPnN5bXRhYltpXS5zdF92YWx1ZSA8PSBhZGRyCi0JCSAgICAmJiBtb2QtPnN5bXRhYltp XS5zdF92YWx1ZSA+IG1vZC0+c3ltdGFiW2Jlc3RdLnN0X3ZhbHVlCi0JCSAgICAmJiAqKG1vZC0+ c3RydGFiICsgbW9kLT5zeW10YWJbaV0uc3RfbmFtZSkgIT0gJ1wwJwotCQkgICAgJiYgIWlzX2Fy bV9tYXBwaW5nX3N5bWJvbChtb2QtPnN0cnRhYiArIG1vZC0+c3ltdGFiW2ldLnN0X25hbWUpKQot CQkJYmVzdCA9IGk7Ci0JCWlmIChtb2QtPnN5bXRhYltpXS5zdF92YWx1ZSA+IGFkZHIKLQkJICAg ICYmIG1vZC0+c3ltdGFiW2ldLnN0X3ZhbHVlIDwgbmV4dHZhbAotCQkgICAgJiYgKihtb2QtPnN0 cnRhYiArIG1vZC0+c3ltdGFiW2ldLnN0X25hbWUpICE9ICdcMCcKLQkJICAgICYmICFpc19hcm1f bWFwcGluZ19zeW1ib2wobW9kLT5zdHJ0YWIgKyBtb2QtPnN5bXRhYltpXS5zdF9uYW1lKSkKLQkJ CW5leHR2YWwgPSBtb2QtPnN5bXRhYltpXS5zdF92YWx1ZTsKLQl9Ci0KLQlpZiAoIWJlc3QpCi0J CXJldHVybiBOVUxMOwotCi0JKnNpemUgPSBuZXh0dmFsIC0gbW9kLT5zeW10YWJbYmVzdF0uc3Rf dmFsdWU7Ci0JKm9mZnNldCA9IGFkZHIgLSBtb2QtPnN5bXRhYltiZXN0XS5zdF92YWx1ZTsKLQly ZXR1cm4gbW9kLT5zdHJ0YWIgKyBtb2QtPnN5bXRhYltiZXN0XS5zdF9uYW1lOwotfQotCiAvKiBG b3Iga2FsbHN5bXMgdG8gYXNrIGZvciBhZGRyZXNzIHJlc29sdXRpb24uICBOVUxMIG1lYW5zIG5v dCBmb3VuZC4KICAgIFdlIGRvbid0IGxvY2ssIGFzIHRoaXMgaXMgdXNlZCBmb3Igb29wcyByZXNv bHV0aW9uIGFuZCByYWNlcyBhcmUgYQogICAgbGVzc2VyIGNvbmNlcm4uICovCkBAIC0yMDA4LDcg KzIwMzcsNyBAQCBjb25zdCBjaGFyICptb2R1bGVfYWRkcmVzc19sb29rdXAodW5zaWduCiAJCWlm ICh3aXRoaW4oYWRkciwgbW9kLT5tb2R1bGVfaW5pdCwgbW9kLT5pbml0X3NpemUpCiAJCSAgICB8 fCB3aXRoaW4oYWRkciwgbW9kLT5tb2R1bGVfY29yZSwgbW9kLT5jb3JlX3NpemUpKSB7CiAJCQkq bW9kbmFtZSA9IG1vZC0+bmFtZTsKLQkJCXJldHVybiBnZXRfa3N5bWJvbChtb2QsIGFkZHIsIHNp emUsIG9mZnNldCk7CisJCQlyZXR1cm4ga2FsbHN5bXNfZ2V0X2tzeW1ib2wobW9kLCBhZGRyLCBz aXplLCBvZmZzZXQpOwogCQl9CiAJfQogCXJldHVybiBOVUxMOwpAQCAtMjAyNSw3ICsyMDU0LDcg QEAgc3RydWN0IG1vZHVsZSAqbW9kdWxlX2dldF9rYWxsc3ltKHVuc2lnbgogCWxpc3RfZm9yX2Vh Y2hfZW50cnkobW9kLCAmbW9kdWxlcywgbGlzdCkgewogCQlpZiAoc3ltbnVtIDwgbW9kLT5udW1f c3ltdGFiKSB7CiAJCQkqdmFsdWUgPSBtb2QtPnN5bXRhYltzeW1udW1dLnN0X3ZhbHVlOwotCQkJ KnR5cGUgPSBtb2QtPnN5bXRhYltzeW1udW1dLnN0X2luZm87CisJCQkqdHlwZSA9IG1vZC0+c3lt dGFiW3N5bW51bV0uc3Rfb3RoZXI7CiAJCQlzdHJuY3B5KG5hbWVidWYsCiAJCQkJbW9kLT5zdHJ0 YWIgKyBtb2QtPnN5bXRhYltzeW1udW1dLnN0X25hbWUsCiAJCQkJMTI3KTsKQEAgLTIwMzgsMTYg KzIwNjcsNiBAQCBzdHJ1Y3QgbW9kdWxlICptb2R1bGVfZ2V0X2thbGxzeW0odW5zaWduCiAJcmV0 dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIG1vZF9maW5kX3N5bW5hbWUoc3Ry dWN0IG1vZHVsZSAqbW9kLCBjb25zdCBjaGFyICpuYW1lKQotewotCXVuc2lnbmVkIGludCBpOwot Ci0JZm9yIChpID0gMDsgaSA8IG1vZC0+bnVtX3N5bXRhYjsgaSsrKQotCQlpZiAoc3RyY21wKG5h bWUsIG1vZC0+c3RydGFiK21vZC0+c3ltdGFiW2ldLnN0X25hbWUpID09IDApCi0JCQlyZXR1cm4g bW9kLT5zeW10YWJbaV0uc3RfdmFsdWU7Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qIExvb2sgZm9yIHRo aXMgbmFtZTogY2FuIGJlIG9mIGZvcm0gbW9kdWxlOm5hbWUuICovCiB1bnNpZ25lZCBsb25nIG1v ZHVsZV9rYWxsc3ltc19sb29rdXBfbmFtZShjb25zdCBjaGFyICpuYW1lKQogewpAQCAtMjA1OSwx MSArMjA3OCwxMSBAQCB1bnNpZ25lZCBsb25nIG1vZHVsZV9rYWxsc3ltc19sb29rdXBfbmFtCiAJ aWYgKChjb2xvbiA9IHN0cmNocihuYW1lLCAnOicpKSAhPSBOVUxMKSB7CiAJCSpjb2xvbiA9ICdc MCc7CiAJCWlmICgobW9kID0gZmluZF9tb2R1bGUobmFtZSkpICE9IE5VTEwpCi0JCQlyZXQgPSBt b2RfZmluZF9zeW1uYW1lKG1vZCwgY29sb24rMSk7CisJCQlyZXQgPSBrYWxsc3ltc19maW5kX3N5 bW5hbWUobW9kLCBjb2xvbisxKTsKIAkJKmNvbG9uID0gJzonOwogCX0gZWxzZSB7CiAJCWxpc3Rf Zm9yX2VhY2hfZW50cnkobW9kLCAmbW9kdWxlcywgbGlzdCkKLQkJCWlmICgocmV0ID0gbW9kX2Zp bmRfc3ltbmFtZShtb2QsIG5hbWUpKSAhPSAwKQorCQkJaWYgKChyZXQgPSBrYWxsc3ltc19maW5k X3N5bW5hbWUobW9kLCBuYW1lKSkgIT0gMCkKIAkJCQlicmVhazsKIAl9CiAJcmV0dXJuIHJldDsK ZGlmZiAtTnBydSAyLjYuMTMvTWFrZWZpbGUgMi42LjEzLWthbGxzeW1zL01ha2VmaWxlCi0tLSAy LjYuMTMvTWFrZWZpbGUJMjAwNS0wOC0yOSAwMTo0MTowMS4wMDAwMDAwMDAgKzAyMDAKKysrIDIu Ni4xMy1rYWxsc3ltcy9NYWtlZmlsZQkyMDA1LTA5LTA4IDE1OjM1OjMyLjAwMDAwMDAwMCArMDIw MApAQCAtMTYxLDE1ICsxNjEsMTkgQEAgTE9DQUxWRVJTSU9OID0gJChzdWJzdCAkKHNwYWNlKSws IFwKIAogS0VSTkVMUkVMRUFTRT0kKFZFUlNJT04pLiQoUEFUQ0hMRVZFTCkuJChTVUJMRVZFTCkk KEVYVFJBVkVSU0lPTikkKExPQ0FMVkVSU0lPTikKIAorSE9TVEFSQ0ggOj0gJChzaGVsbCB1bmFt ZSAtbSB8IHNlZCAtZSBzL2kuODYvaTM4Ni8gLWUgcy9zdW40dS9zcGFyYzY0LyBcCisJCQkJICAg LWUgcy9hcm0uKi9hcm0vIC1lIHMvc2ExMTAvYXJtLyBcCisJCQkJICAgLWUgcy9zMzkweC9zMzkw LyAtZSBzL3BhcmlzYzY0L3BhcmlzYy8gKQorCiAjIFNVQkFSQ0ggdGVsbHMgdGhlIHVzZXJtb2Rl IGJ1aWxkIHdoYXQgdGhlIHVuZGVybHlpbmcgYXJjaCBpcy4gIFRoYXQgaXMgc2V0CiAjIGZpcnN0 LCBhbmQgaWYgYSB1c2VybW9kZSBidWlsZCBpcyBoYXBwZW5pbmcsIHRoZSAiQVJDSD11bSIgb24g dGhlIGNvbW1hbmQKICMgbGluZSBvdmVycmlkZXMgdGhlIHNldHRpbmcgb2YgQVJDSCBiZWxvdy4g IElmIGEgbmF0aXZlIGJ1aWxkIGlzIGhhcHBlbmluZywKICMgdGhlbiBBUkNIIGlzIGFzc2lnbmVk LCBnZXR0aW5nIHdoYXRldmVyIHZhbHVlIGl0IGdldHMgbm9ybWFsbHksIGFuZCAKICMgU1VCQVJD SCBpcyBzdWJzZXF1ZW50bHkgaWdub3JlZC4KIAotU1VCQVJDSCA6PSAkKHNoZWxsIHVuYW1lIC1t IHwgc2VkIC1lIHMvaS44Ni9pMzg2LyAtZSBzL3N1bjR1L3NwYXJjNjQvIFwKLQkJCQkgIC1lIHMv YXJtLiovYXJtLyAtZSBzL3NhMTEwL2FybS8gXAotCQkJCSAgLWUgcy9zMzkweC9zMzkwLyAtZSBz L3BhcmlzYzY0L3BhcmlzYy8gKQoraWZlcSAoJChTVUJBUkNIKSwpCitTVUJBUkNIICAgICAgICAg Oj0gJChpZiAkKGZpbHRlci1vdXQgdW0sJChBUkNIKSksJChBUkNIKSwkKEhPU1RBUkNIKSkKK2Vu ZGlmCiAKICMgQ3Jvc3MgY29tcGlsaW5nIGFuZCBzZWxlY3RpbmcgZGlmZmVyZW50IHNldCBvZiBn Y2MvYmluLXV0aWxzCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTkxLDcgKzE5NSw3IEBAIFNV QkFSQ0ggOj0gJChzaGVsbCB1bmFtZSAtbSB8IHNlZCAtZSBzL2kKICMgTm90ZTogU29tZSBhcmNo aXRlY3R1cmVzIGFzc2lnbiBDUk9TU19DT01QSUxFIGluIHRoZWlyIGFyY2gvKi9NYWtlZmlsZQog CiBBUkNICQk/PSAkKFNVQkFSQ0gpCi1DUk9TU19DT01QSUxFCT89CitDUk9TU19DT01QSUxFCT89 ICQoaWYgJChmaWx0ZXItb3V0ICQoQVJDSCkgJChTVUJBUkNIKSwkKEhPU1RBUkNIKSksJChTVUJB UkNIKS1saW51eC0pCiAKICMgQXJjaGl0ZWN0dXJlIGFzIHByZXNlbnQgaW4gY29tcGlsZS5oCiBV VFNfTUFDSElORSA6PSAkKEFSQ0gpCkBAIC0zMjUsNiArMzI5LDcgQEAgTk0JCT0gJChDUk9TU19D T01QSUxFKW5tCiBTVFJJUAkJPSAkKENST1NTX0NPTVBJTEUpc3RyaXAKIE9CSkNPUFkJCT0gJChD Uk9TU19DT01QSUxFKW9iamNvcHkKIE9CSkRVTVAJCT0gJChDUk9TU19DT01QSUxFKW9iamR1bXAK K1JFQURFTEYJCT0gJChDUk9TU19DT01QSUxFKXJlYWRlbGYKIEFXSwkJPSBhd2sKIEdFTktTWU1T CT0gc2NyaXB0cy9nZW5rc3ltcy9nZW5rc3ltcwogREVQTU9ECQk9IC9zYmluL2RlcG1vZApAQCAt NzAwLDI0ICs3MDUsMTA5IEBAIGVuZGVmCiAKICMgR2VuZXJhdGUgLlMgZmlsZSB3aXRoIGFsbCBr ZXJuZWwgc3ltYm9scwogcXVpZXRfY21kX2thbGxzeW1zID0gS1NZTSAgICAkQAotICAgICAgY21k X2thbGxzeW1zID0gJChOTSkgLW4gJDwgfCAkKEtBTExTWU1TKSBcCi0gICAgICAgICAgICAgICAg ICAgICAkKGlmICQoQ09ORklHX0tBTExTWU1TX0FMTCksLS1hbGwtc3ltYm9scykgPiAkQAogCi0u dG1wX2thbGxzeW1zMS5vIC50bXBfa2FsbHN5bXMyLm8gLnRtcF9rYWxsc3ltczMubzogJS5vOiAl LlMgc2NyaXB0cyBGT1JDRQoraWZkZWYgQ09ORklHX0tBTExTWU1TX1RSQURJVElPTkFMCisKK2Nt ZF9rYWxsc3ltcyA9IHsgdGVzdCAkKiAtZXEgMCB8fCAkKE5NKSAtbiAkPDsgfSB8ICQoS0FMTFNZ TVMpICQoaWYgJChDT05GSUdfS0FMTFNZTVNfQUxMKSwtLWFsbC1zeW1ib2xzKSA+JEAKKwora2Fs bHN5bXMtc3RyaXAtZXh0IDo9CisKK2Vsc2UKKworY21kX2thbGxzeW1zID0geyB0ZXN0ICQqIC1l cSAwIHx8ICQoTk0pIC1uICQ8OyB9IHwgJChLQUxMU1lNUykgLSQkKGV4cHIgJCogKyAxKSA+JEAK Kwora2FsbHN5bXMtc3RyaXAtc3JjIDo9ICQoaWYgJChDT05GSUdfS0FMTFNZTVNfU1RSSVBfR0VO RVJBVEVEKSwkKHNyY3RyZWUpLyQoS0FMTFNZTVMpKQora2FsbHN5bXMtc3RyaXAtc3JjICs9ICQo aWYgJChDT05GSUdfS0FMTFNZTVNfU1RSSVBfR0VORVJBVEVEKSwkKHdpbGRjYXJkICQoc3JjdHJl ZSkvYXJjaC8kKEFSQ0gpL2thbGxzeW1zKSkKK2thbGxzeW1zLXN0cmlwLXNyYyArPSAkKGlmICQo Q09ORklHX0tBTExTWU1TX0FMTCksLGRhdGEpCitrYWxsc3ltcy1zdHJpcC1zcmMgOj0gJChzdHJp cCAkKGthbGxzeW1zLXN0cmlwLXNyYykpCitrYWxsc3ltcy1zdHJpcC1leHQgOj0gJChpZiAkKGth bGxzeW1zLXN0cmlwLXNyYyksLnN0cmlwcGVkKQorCitxdWlldF9jbWRfa3RhYiA9IEtUQUIgICAg JEAKK2RlZmluZSBjbWRfa3RhYgorCWlmIFsgJCogLWVxIDAgXTsgdGhlbiBcCisJCWVjaG8gInBs YWNlaG9sZGVyIiA+JEA7IFwKKwllbHNlIFwKKwkJcm0gLWYgJEA7IFwKKwkJJChSRUFERUxGKSAt U1cgJDwgfCB3aGlsZSByZWFkIGlkeCBuYW1lIHR5cGUgYWRkciBvZmZzIHNpemUgbW9yZTsgZG8g XAorCQkJaWYgWyAiJChzdWZmaXggJEApIiA9ICIkJG5hbWUiIF07IHRoZW4gXAorCQkJCXRhaWwg LWMgKyQkKCgweCQkb2ZmcysxKSkgPCQ8IHwgaGVhZCAtYyAkJCgoMHgkJHNpemUpKSA+JEA7IFwK KwkJCQlicmVhazsgXAorCQkJZmk7IFwKKwkJZG9uZTsgXAorCQl0ZXN0IC1zICRAOyBcCisJZmkK K2VuZGVmCisKK3F1aWV0X2NtZF9rc2hkciA9IEtTSERSICAgJEAKK2RlZmluZSBjbWRfa3NoZHIK KwlpZiBbICQqIC1lcSAwIF07IHRoZW4gXAorCQllY2hvICJwbGFjZWhvbGRlciIgPiRAOyBcCisJ ZWxzZSBcCisJCW5zZWN0PSA7OiBncmFiIHRoaXMgZnJvbSB0aGUgZmlyc3QgZGVjaW1hbCBudW1i ZXI7IFwKKwkJb3NlY3Q9IDs6IGdyYWIgdGhpcyBmcm9tIHRoZSBmaXJzdCBoZXhhZGVjaW1hbCBu dW1iZXI7IFwKKwkJZm9yIGkgaW4gJCQoJChSRUFERUxGKSAtUyAkPCB8IGVncmVwICdeW15dXFso KV0qJCQnKTsgXAorCQlkbyBcCisJCQl0ZXN0IC16ICIkJG5zZWN0IiAmJiBuc2VjdD0kJChlY2hv ICQke2klOip9IHwgZWdyZXAgJ15bWzpkaWdpdDpdXSskJCcpOyBcCisJCQl0ZXN0IC16ICIkJG9z ZWN0IiAmJiBvc2VjdD0kJChlY2hvICQke2klOip9IHwgZWdyZXAgJ14wW3hYXVtbOnhkaWdpdDpd XSskJCcpOyBcCisJCWRvbmU7IFwKKwkJenNlY3Q9IDs6IGdyYWIgdGhpcyBmcm9tIHRoZSBsYXN0 IG51bWJlciB0aGF0IGlzIGZvbGxvd2VkIGJ5IGEgdW5pdCBzcGVjaWZpY2F0aW9uOyBcCisJCWZv ciBpIGluICQkKCQoUkVBREVMRikgLWggJDwgfCBlZ3JlcCAnOltbOnNwYWNlOl1dK1tbOmRpZ2l0 Ol1dK1tbOnNwYWNlOl1dK1woLipcKScpOyBcCisJCWRvIFwKKwkJCXZhbD0kJChlY2hvICQkaSB8 IGVncmVwICdeKFtbOmRpZ2l0Ol1dK3wwW3hYXVtbOnhkaWdpdDpdXSspJCQnKTsgXAorCQkJdGVz dCAtbiAiJCR2YWwiICYmIHpzZWN0PSQkdmFsOyBcCisJCWRvbmU7IFwKKwkJdGFpbCAtYyArJCQo KG9zZWN0KzEpKSA8JDwgfCBoZWFkIC1jICQkKChuc2VjdCp6c2VjdCkpID4kQDsgXAorCWZpCitl bmRlZgorCitxdWlldF9jbWRfa3N0cmlwID0gU1RSSVAgICAkPAorY21kX2tzdHJpcCA9ICQoT0JK Q09QWSkgJChhZGRwcmVmaXggLS1zdHJpcC1zeW1ib2xzICwkKGZpbHRlciAlLnN0cmlwLCReKSkg LXcgJDwgJEAKKworLnRtcF9rYWxsc3ltcyUuc3ltdGFiOiAudG1wX3ZtbGludXglJChrYWxsc3lt cy1zdHJpcC1leHQpCisJJChjYWxsIGNtZCxrdGFiKQorCisudG1wX2thbGxzeW1zJS5zdHJ0YWI6 IC50bXBfdm1saW51eCUkKGthbGxzeW1zLXN0cmlwLWV4dCkKKwkkKGNhbGwgY21kLGt0YWIpCisK Ky50bXBfa2FsbHN5bXMlLnNlY3Rpb25zOiAudG1wX3ZtbGludXglJChrYWxsc3ltcy1zdHJpcC1l eHQpCisJJChjYWxsIGNtZCxrc2hkcikKKworLnRtcF9rYWxsc3ltcyUuc2hzdHJ0YWI6IC50bXBf dm1saW51eCUkKGthbGxzeW1zLXN0cmlwLWV4dCkKKwkkKGNhbGwgY21kLGt0YWIpCisKKy50bXBf dm1saW51eCUuc3RyaXBwZWQ6IC50bXBfdm1saW51eCUgJChhZGRzdWZmaXggLnN0cmlwLCQoa2Fs bHN5bXMtc3RyaXAtc3JjKSkgLmNvbmZpZworCSQoY2FsbCBjbWQsa3N0cmlwKQorCitjbG9zZSA6 PSApCitkYXRhLnN0cmlwOiAudG1wX3ZtbGludXgxIC5jb25maWcKKwkkKFEpJChOTSkgJDwgfCBz ZWQgLW4gJ3MsW1s6eGRpZ2l0Ol1dXCtbWzpzcGFjZTpdXVwrW150VF1bWzpzcGFjZTpdXVwrXCgu KlwpLFwxLHAnIFwKKwkJfCB3aGlsZSByZWFkIGk7IGRvIGNhc2UgJCRpIGluIFwKKwkJCSQoYWRk c3VmZml4ICQoY2xvc2UpOzssIFwKKwkJCQkkKHNoZWxsIGNhdCAkKGFkZHN1ZmZpeCAuc3RyaXAs JChmaWx0ZXIgJChzcmN0cmVlKS8lLCQoa2FsbHN5bXMtc3RyaXAtc3JjKSkpIC9kZXYvbnVsbCBc CisJCQkJICAgICAgICB8IHNlZCAncyxcKFs7fCY8PigpJCRcXF1cKSxcXFwxLGcnKSkgXAorCQkJ KikgZWNobyAkJGk7OyBcCisJCWVzYWM7IGRvbmUgPiRACisKK2VuZGlmICMgQ09ORklHX0tBTExT WU1TX1RSQURJVElPTkFMCisKKyQoZm9yZWFjaCBuLDAgMSAyIDMsLnRtcF9rYWxsc3ltcyQobiku byk6IEFGTEFHUys9LVdhLC0tc3RyaXAtbG9jYWwtYWJzb2x1dGUKKyQoZm9yZWFjaCBuLDAgMSAy IDMsLnRtcF9rYWxsc3ltcyQobikubyk6ICUubzogJS5TICQoaWYgJChDT05GSUdfS0FMTFNZTVNf VFJBRElUSU9OQUwpLCwlLnN5bXRhYiAlLnN0cnRhYiAlLnNlY3Rpb25zICUuc2hzdHJ0YWIpIHNj cmlwdHMgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZF9kZXAsYXNfb19TKQogCi0udG1wX2thbGxz eW1zJS5TOiAudG1wX3ZtbGludXglICQoS0FMTFNZTVMpCisudG1wX2thbGxzeW1zJS5TOiAudG1w X3ZtbGludXglJChrYWxsc3ltcy1zdHJpcC1leHQpICQoS0FMTFNZTVMpIC5jb25maWcKIAkkKGNh bGwgY21kLGthbGxzeW1zKQogCi0jIC50bXBfdm1saW51eDEgbXVzdCBiZSBjb21wbGV0ZSBleGNl cHQga2FsbHN5bXMsIHNvIHVwZGF0ZSB2bWxpbnV4IHZlcnNpb24KLS50bXBfdm1saW51eDE6ICQo dm1saW51eC1sZHMpICQodm1saW51eC1hbGwpIEZPUkNFCi0JJChjYWxsIGlmX2NoYW5nZWRfcnVs ZSxrc3ltX2xkKQorLnRtcF92bWxpbnV4MCQoa2FsbHN5bXMtc3RyaXAtZXh0KToKKwkkKFEpZWNo byAicGxhY2Vob2xkZXIiID4kQAogCi0udG1wX3ZtbGludXgyOiAkKHZtbGludXgtbGRzKSAkKHZt bGludXgtYWxsKSAudG1wX2thbGxzeW1zMS5vIEZPUkNFCi0JJChjYWxsIGlmX2NoYW5nZWQsdm1s aW51eF9fKQorLnRtcF92bWxpbnV4MTogLnRtcF9rYWxsc3ltczAubworLnRtcF92bWxpbnV4Mjog LnRtcF9rYWxsc3ltczEubworLnRtcF92bWxpbnV4MzogLnRtcF9rYWxsc3ltczIubwogCi0udG1w X3ZtbGludXgzOiAkKHZtbGludXgtbGRzKSAkKHZtbGludXgtYWxsKSAudG1wX2thbGxzeW1zMi5v IEZPUkNFCi0JJChjYWxsIGlmX2NoYW5nZWQsdm1saW51eF9fKQorLnRtcF92bWxpbnV4JTogTERG TEFHU192bWxpbnV4ICs9IC1TCisjIC50bXBfdm1saW51eDEgbXVzdCBiZSBjb21wbGV0ZSBleGNl cHQga2FsbHN5bXMsIHNvIHVwZGF0ZSB2bWxpbnV4IHZlcnNpb24KKy50bXBfdm1saW51eCU6ICQo dm1saW51eC1sZHMpICQodm1saW51eC1hbGwpIEZPUkNFCisJJChpZiAkKGZpbHRlciAxLCQqKSwk KGNhbGwgaWZfY2hhbmdlZF9ydWxlLGtzeW1fbGQpLCQoY2FsbCBpZl9jaGFuZ2VkLHZtbGludXhf XykpCiAKICMgTmVlZHMgdG8gdmlzaXQgc2NyaXB0cy8gYmVmb3JlICQoS0FMTFNZTVMpIGNhbiBi ZSB1c2VkLgogJChLQUxMU1lNUyk6IHNjcmlwdHMgOwpkaWZmIC1OcHJ1IDIuNi4xMy9zY3JpcHRz L2dlbmtzeW1zL2dlbmtzeW1zLmMgMi42LjEzLWthbGxzeW1zL3NjcmlwdHMvZ2Vua3N5bXMvZ2Vu a3N5bXMuYwotLS0gMi42LjEzL3NjcmlwdHMvZ2Vua3N5bXMvZ2Vua3N5bXMuYwkyMDA1LTA4LTI5 IDAxOjQxOjAxLjAwMDAwMDAwMCArMDIwMAorKysgMi42LjEzLWthbGxzeW1zL3NjcmlwdHMvZ2Vu a3N5bXMvZ2Vua3N5bXMuYwkyMDA1LTAzLTE4IDE3OjU0OjEyLjAwMDAwMDAwMCArMDEwMApAQCAt NDMsNyArNDMsNyBAQCBGSUxFICpkZWJ1Z2ZpbGU7CiBpbnQgY3VyX2xpbmUgPSAxOwogY2hhciAq Y3VyX2ZpbGVuYW1lLCAqb3V0cHV0X2RpcmVjdG9yeTsKIAotaW50IGZsYWdfZGVidWcsIGZsYWdf ZHVtcF9kZWZzLCBmbGFnX3dhcm5pbmdzOworaW50IGZsYWdfZGVidWcsIGZsYWdfZHVtcF9kZWZz LCBmbGFnX3dhcm5pbmdzLCBmbGFnX2lubGluZV9hc207CiAKIHN0YXRpYyBpbnQgZXJyb3JzOwog c3RhdGljIGludCBuc3ltczsKQEAgLTQ1Nyw4ICs0NTcsMTYgQEAgZXhwb3J0X3N5bWJvbChjb25z dCBjaGFyICpuYW1lKQogICAgICAgaWYgKGZsYWdfZHVtcF9kZWZzKQogCWZwdXRzKCI+XG4iLCBk ZWJ1Z2ZpbGUpOwogCi0gICAgICAvKiBVc2VkIGFzIGEgbGlua2VyIHNjcmlwdC4gKi8KLSAgICAg IHByaW50ZigiX19jcmNfJXMgPSAweCUwOGx4IDtcbiIsIG5hbWUsIGNyYyk7CisgICAgICBpZiAo IWZsYWdfaW5saW5lX2FzbSkKKwl7CisJICAvKiBVc2VkIGFzIGEgbGlua2VyIHNjcmlwdC4gKi8K KwkgIHByaW50ZigiX19jcmNfJXMgPSAweCUwOGx4IDtcbiIsIG5hbWUsIGNyYyk7CisJfQorICAg ICAgZWxzZQorCXsKKwkgIC8qIFVzZWQgYXMgaW5saW5lIGFzc2VtYmx5LiAqLworCSAgcHJpbnRm KCJfX2FzbV9fKFwiLmVxdWl2IF9fY3JjXyVzLCAweCUwOGx4XCIpO1xuIiwgbmFtZSwgY3JjKTsK Kwl9CiAgICAgfQogfQogCkBAIC01MjksNiArNTM3LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpCiAKICNpZmRlZiBfX0dOVV9MSUJSQVJZX18KICAgc3RydWN0IG9wdGlvbiBsb25nX29w dHNbXSA9IHsKKyAgICB7ImFzbSIsIDAsIDAsICdhJ30sCiAgICAgeyJkZWJ1ZyIsIDAsIDAsICdk J30sCiAgICAgeyJ3YXJuaW5ncyIsIDAsIDAsICd3J30sCiAgICAgeyJxdWlldCIsIDAsIDAsICdx J30sCkBAIC01MzgsMTMgKzU0NywxNiBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKICAg ICB7MCwgMCwgMCwgMH0KICAgfTsKIAotICB3aGlsZSAoKG8gPSBnZXRvcHRfbG9uZyhhcmdjLCBh cmd2LCAiZHdxVkRrOnA6IiwKKyAgd2hpbGUgKChvID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwg ImFkd3FWRGs6cDoiLAogCQkJICAmbG9uZ19vcHRzWzBdLCBOVUxMKSkgIT0gRU9GKQogI2Vsc2Ug IC8qIF9fR05VX0xJQlJBUllfXyAqLwotICB3aGlsZSAoKG8gPSBnZXRvcHQoYXJnYywgYXJndiwg ImR3cVZEazpwOiIpKSAhPSBFT0YpCisgIHdoaWxlICgobyA9IGdldG9wdChhcmdjLCBhcmd2LCAi YWR3cVZEazpwOiIpKSAhPSBFT0YpCiAjZW5kaWYgLyogX19HTlVfTElCUkFSWV9fICovCiAgICAg c3dpdGNoIChvKQogICAgICAgeworICAgICAgY2FzZSAnYSc6CisJZmxhZ19pbmxpbmVfYXNtID0g MTsKKwlicmVhazsKICAgICAgIGNhc2UgJ2QnOgogCWZsYWdfZGVidWcrKzsKIAlicmVhazsKZGlm ZiAtTnBydSAyLjYuMTMvc2NyaXB0cy9rYWxsc3ltcy5jIDIuNi4xMy1rYWxsc3ltcy9zY3JpcHRz L2thbGxzeW1zLmMKLS0tIDIuNi4xMy9zY3JpcHRzL2thbGxzeW1zLmMJMjAwNS0wOC0yOSAwMTo0 MTowMS4wMDAwMDAwMDAgKzAyMDAKKysrIDIuNi4xMy1rYWxsc3ltcy9zY3JpcHRzL2thbGxzeW1z LmMJMjAwNS0wOS0wNyAxNTo1NzoxNi4wMDAwMDAwMDAgKzAyMDAKQEAgLTI4LDYgKzI4LDcgQEAK ICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxjdHlw ZS5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgogCiAvKiBtYXhpbXVtIHRva2VuIGxlbmd0aCB1c2Vk LiBJdCBkb2Vzbid0IHBheSB0byBpbmNyZWFzZSBpdCBhIGxvdCwgYmVjYXVzZQogICogdmVyeSBs b25nIHN1YnN0cmluZ3MgcHJvYmFibHkgZG9uJ3QgcmVwZWF0IHRoZW1zZWx2ZXMgdG9vIG9mdGVu LiAqLwpAQCAtNjcsNiArNjgsNyBAQCBzdHJ1Y3Qgc3ltX2VudHJ5IHsKIAogc3RhdGljIHN0cnVj dCBzeW1fZW50cnkgKnRhYmxlOwogc3RhdGljIGludCBzaXplLCBjbnQ7CitzdGF0aWMgbG9uZyBz dGFnZTsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgX3N0ZXh0LCBfZXRleHQsIF9zaW5pdHRl eHQsIF9laW5pdHRleHQsIF9zZXh0cmF0ZXh0LCBfZWV4dHJhdGV4dDsKIHN0YXRpYyBpbnQgYWxs X3N5bWJvbHMgPSAwOwogc3RhdGljIGNoYXIgc3ltYm9sX3ByZWZpeF9jaGFyID0gJ1wwJzsKQEAg LTk0LDcgKzk2LDcgQEAgdW5zaWduZWQgY2hhciBiZXN0X3RhYmxlX2xlblsyNTZdOwogc3RhdGlj IHZvaWQKIHVzYWdlKHZvaWQpCiB7Ci0JZnByaW50ZihzdGRlcnIsICJVc2FnZToga2FsbHN5bXMg Wy0tYWxsLXN5bWJvbHNdIFstLXN5bWJvbC1wcmVmaXg9PHByZWZpeCBjaGFyPl0gPCBpbi5tYXAg PiBvdXQuU1xuIik7CisJZnByaW50ZihzdGRlcnIsICJVc2FnZToga2FsbHN5bXMgW3N0YWdlXSBb LS1hbGwtc3ltYm9sc10gWy0tc3ltYm9sLXByZWZpeD08cHJlZml4IGNoYXI+XSA8IGluLm1hcCA+ IG91dC5TXG4iKTsKIAlleGl0KDEpOwogfQogCkBAIC0xMDUsOCArMTA3LDEyIEBAIHVzYWdlKHZv aWQpCiBzdGF0aWMgaW5saW5lIGludAogaXNfYXJtX21hcHBpbmdfc3ltYm9sKGNvbnN0IGNoYXIg KnN0cikKIHsKKyNpZiBkZWZpbmVkKEFSQ0hfYXJtKSB8fCBkZWZpbmVkKEFSQ0hfYXJtMjYpCiAJ cmV0dXJuIHN0clswXSA9PSAnJCcgJiYgc3RyY2hyKCJhdGQiLCBzdHJbMV0pCiAJICAgICAgICYm IChzdHJbMl0gPT0gJ1wwJyB8fCBzdHJbMl0gPT0gJy4nKTsKKyNlbHNlCisJcmV0dXJuIDA7Cisj ZW5kaWYKIH0KIAogc3RhdGljIGludApAQCAtMTc2LDEzICsxODIsNiBAQCBzeW1ib2xfdmFsaWQo c3RydWN0IHN5bV9lbnRyeSAqcykKIAkgKiBzcGVjaWZpZWQgc28gZXhjbHVkZSB0aGVtIHRvIGdl dCBhIHN0YWJsZSBzeW1ib2wgbGlzdC4KIAkgKi8KIAlzdGF0aWMgY2hhciAqc3BlY2lhbF9zeW1i b2xzW10gPSB7Ci0JCSJrYWxsc3ltc19hZGRyZXNzZXMiLAotCQkia2FsbHN5bXNfbnVtX3N5bXMi LAotCQkia2FsbHN5bXNfbmFtZXMiLAotCQkia2FsbHN5bXNfbWFya2VycyIsCi0JCSJrYWxsc3lt c190b2tlbl90YWJsZSIsCi0JCSJrYWxsc3ltc190b2tlbl9pbmRleCIsCi0KIAkvKiBFeGNsdWRl IGxpbmtlciBnZW5lcmF0ZWQgc3ltYm9scyB3aGljaCB2YXJ5IGJldHdlZW4gcGFzc2VzICovCiAJ CSJfU0RBX0JBU0VfIiwJCS8qIHBwYyAqLwogCQkiX1NEQTJfQkFTRV8iLAkJLyogcHBjICovCkBA IC0yMTQsNyArMjEzLDggQEAgc3ltYm9sX3ZhbGlkKHN0cnVjdCBzeW1fZW50cnkgKnMpCiAJfQog CiAJLyogRXhjbHVkZSBzeW1ib2xzIHdoaWNoIHZhcnkgYmV0d2VlbiBwYXNzZXMuICovCi0JaWYg KHN0cnN0cihzLT5zeW0gKyBvZmZzZXQsICJfY29tcGlsZWQuIikpCisJaWYgKHN0cnN0cihzLT5z eW0gKyBvZmZzZXQsICJfY29tcGlsZWQuIikgfHwKKwkgICAgc3RybmNtcChzLT5zeW0gKyBvZmZz ZXQsICJfX2NvbXBvdW5kX2xpdGVyYWwuIiwgMTkpID09IDApCiAJCXJldHVybiAwOwogCiAJZm9y IChpID0gMDsgc3BlY2lhbF9zeW1ib2xzW2ldOyBpKyspCkBAIC0yOTgsNyArMjk4LDQyIEBAIHdy aXRlX3NyYyh2b2lkKQogCXByaW50ZigiI2RlZmluZSBBTEdOIC5hbGlnbiA0XG4iKTsKIAlwcmlu dGYoIiNlbmRpZlxuIik7CiAKLQlwcmludGYoIi5kYXRhXG4iKTsKKwlwcmludGYoIi5zZWN0aW9u IC5yb2RhdGEsIFwiYVwiXG4iKTsKKworCWlmIChzdGFnZSkgeworCQlzdGF0aWMgc3RydWN0IHsK KwkJCWNvbnN0IGNoYXIqbmFtZTsKKwkJCXVuc2lnbmVkIHdyaXRlYWJsZToxOworCQkJdW5zaWdu ZWQgYWxpZ25lZDoxOworCQl9IGNvbnN0IHdoYXRbXSA9IHsKKwkJCXsic2VjdGlvbnMiLCAxLCAx fSwKKwkJCXsic3ltdGFiIiwgICAxLCAxfSwKKwkJCXsic3RydGFiIiwgICAwLCAwfSwKKwkJCXsi c2hzdHJ0YWIiLCAwLCAwfQorCQl9OworCisJCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yod2hhdCkv c2l6ZW9mKCp3aGF0KTsgKytpKSB7CisJCQlpZiAod2hhdFtpXS53cml0ZWFibGUpCisJCQkJcHJp bnRmKCIuZGF0YVxuIik7CisJCQlwcmludGYoIi5nbG9ibCBrYWxsc3ltc18lcywga2FsbHN5bXNf c2l6ZV8lc1xuIiwgd2hhdFtpXS5uYW1lLCB3aGF0W2ldLm5hbWUpOworCQkJaWYgKHdoYXRbaV0u YWxpZ25lZCkKKwkJCQlwcmludGYoIlx0QUxHTlxuIik7CisJCQlwcmludGYoImthbGxzeW1zXyVz OlxuIiwgd2hhdFtpXS5uYW1lKTsKKwkJCXByaW50ZigiLmluY2JpbiBcIi50bXBfa2FsbHN5bXMl bGQuJXNcIlxuIiwgbGFicyhzdGFnZSkgLSAxLCB3aGF0W2ldLm5hbWUpOworCQkJcHJpbnRmKCIu ZXF1IF9fa2FsbHN5bXNfc2l6ZV8lcywgLiAtIGthbGxzeW1zXyVzXG4iLCB3aGF0W2ldLm5hbWUs IHdoYXRbaV0ubmFtZSk7CisJCQlpZiAod2hhdFtpXS53cml0ZWFibGUpCisJCQkJcHJpbnRmKCIu cHJldmlvdXNcbiIpOworCQkJcHJpbnRmKCJcbiIpOworCQl9CisJCXByaW50ZigiXHRBTEdOXG4i KTsKKwkJZm9yIChpID0gMDsgaSA8IHNpemVvZih3aGF0KS9zaXplb2YoKndoYXQpOyArK2kpIHsK KwkJCXByaW50Zigia2FsbHN5bXNfc2l6ZV8lczpcbiIsIHdoYXRbaV0ubmFtZSk7CisJCQlwcmlu dGYoIlx0UFRSXHRfX2thbGxzeW1zX3NpemVfJXNcbiIsIHdoYXRbaV0ubmFtZSk7CisJCX0KKwkJ cHJpbnRmKCJcbiIpOworCX0KKwlpZiAoc3RhZ2UgPCAwKQorCQlyZXR1cm47CiAKIAlvdXRwdXRf bGFiZWwoImthbGxzeW1zX2FkZHJlc3NlcyIpOwogCXZhbGlkID0gMDsKQEAgLTcwMywyNSArNzM4 LDI4IEBAIHN0YXRpYyB2b2lkIG9wdGltaXplX3Rva2VuX3RhYmxlKHZvaWQpCiBpbnQKIG1haW4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewotCWlmIChhcmdjID49IDIpIHsKLQkJaW50IGk7Ci0J CWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKLQkJCWlmKHN0cmNtcChhcmd2W2ldLCAiLS1h bGwtc3ltYm9scyIpID09IDApCi0JCQkJYWxsX3N5bWJvbHMgPSAxOwotCQkJZWxzZSBpZiAoc3Ry bmNtcChhcmd2W2ldLCAiLS1zeW1ib2wtcHJlZml4PSIsIDE2KSA9PSAwKSB7Ci0JCQkJY2hhciAq cCA9ICZhcmd2W2ldWzE2XTsKLQkJCQkvKiBza2lwIHF1b3RlICovCi0JCQkJaWYgKCgqcCA9PSAn IicgJiYgKihwKzIpID09ICciJykgfHwgKCpwID09ICdcJycgJiYgKihwKzIpID09ICdcJycpKQot CQkJCQlwKys7Ci0JCQkJc3ltYm9sX3ByZWZpeF9jaGFyID0gKnA7Ci0JCQl9IGVsc2UKLQkJCQl1 c2FnZSgpOwotCQl9Ci0JfSBlbHNlIGlmIChhcmdjICE9IDEpCi0JCXVzYWdlKCk7CisJaW50IGk7 CisKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCWlmKHN0cmNtcChhcmd2W2ldLCAi LS1hbGwtc3ltYm9scyIpID09IDApCisJCQlhbGxfc3ltYm9scyA9IDE7CisJCWVsc2UgaWYgKHN0 cm5jbXAoYXJndltpXSwgIi0tc3ltYm9sLXByZWZpeD0iLCAxNikgPT0gMCkgeworCQkJY2hhciAq cCA9ICZhcmd2W2ldWzE2XTsKKworCQkJLyogc2tpcCBxdW90ZSAqLworCQkJaWYgKCgqcCA9PSAn IicgfHwgKnAgPT0gJ1wnJykgJiYgcFsyXSA9PSAqcCkKKwkJCQlwKys7CisJCQlzeW1ib2xfcHJl Zml4X2NoYXIgPSAqcDsKKwkJfSBlbHNlIGlmICgoc3RhZ2UgPSBzdHJ0b2woYXJndltpXSwgYXJn diArIGksIDApKSA9PSAwCisJCSAgICAgICAgICAgfHwgc3RhZ2UgPj0gTE9OR19NQVgKKwkJICAg ICAgICAgICB8fCBzdGFnZSA8PSBMT05HX01JTgorCQkgICAgICAgICAgIHx8ICphcmd2W2ldKQor CQkJdXNhZ2UoKTsKKwl9CiAKIAlyZWFkX21hcChzdGRpbik7Ci0Jb3B0aW1pemVfdG9rZW5fdGFi bGUoKTsKKwlpZiAoc3RhZ2UgPj0gMCAmJiBjbnQpCisJCW9wdGltaXplX3Rva2VuX3RhYmxlKCk7 CiAJd3JpdGVfc3JjKCk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtTnBydSAyLjYuMTMvc2NyaXB0cy9r YWxsc3ltcy5zdHJpcCAyLjYuMTMta2FsbHN5bXMvc2NyaXB0cy9rYWxsc3ltcy5zdHJpcAotLS0g Mi42LjEzL3NjcmlwdHMva2FsbHN5bXMuc3RyaXAJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAw MDAgKzAxMDAKKysrIDIuNi4xMy1rYWxsc3ltcy9zY3JpcHRzL2thbGxzeW1zLnN0cmlwCTIwMDUt MDMtMjEgMTY6MzQ6MDkuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsMTggQEAKKzwqPgorX19j b21wb3VuZF9saXRlcmFsWyQuXVswLTldKgorX19jcmNfW2EtekEtWl9dKgorX19leGl0Y2FsbF9b YS16QS1aX10qCitfX2Z1bmNfX1skLl1bMC05XSoKK19fRlVOQ1RJT05fX1skLl1bMC05XSoKK2dj Y1swLTldX2NvbXBpbGVkWyQuXQorX19pbml0Y2FsbF9bYS16QS1aX10qCitfX2tjcmN0YWJfW2Et ekEtWl9dKgorX19rc3RydGFiX1thLXpBLVpfXSoKK19fa3N5bXRhYl9bYS16QS1aX10qCitfX21v ZF9bYS16QS1aX10qWzAtOV0KK19fbW9kdWxlX2RlcGVuZHMKK19fcGFyYW1fW2EtekEtWl9dKgor X19wY2lfZml4dXBfW0EtWl0qCitfX1BSRVRUWV9GVU5DVElPTl9fWyQuXVswLTldKgorX19zZXR1 cF9bYS16QS1aXzAtOV0qCitfX19fdmVyc2lvbnMKZGlmZiAtTnBydSAyLjYuMTMvc2NyaXB0cy9N YWtlZmlsZSAyLjYuMTMta2FsbHN5bXMvc2NyaXB0cy9NYWtlZmlsZQotLS0gMi42LjEzL3Njcmlw dHMvTWFrZWZpbGUJMjAwNS0wOC0yOSAwMTo0MTowMS4wMDAwMDAwMDAgKzAyMDAKKysrIDIuNi4x My1rYWxsc3ltcy9zY3JpcHRzL01ha2VmaWxlCTIwMDUtMDMtMjEgMTA6NTA6MjEuMDAwMDAwMDAw ICswMTAwCkBAIC04LDYgKzgsNyBAQAogIyBjb25tYWtlaGFzaDoJIENyZWF0ZSBhcnJheXMgZm9y IGluaXRpYWxpemluZyB0aGUga2VybmVsIGNvbnNvbGUgdGFibGVzCiAKIGhvc3Rwcm9ncy0kKENP TkZJR19LQUxMU1lNUykgICAgICs9IGthbGxzeW1zCitIT1NUQ0ZMQUdTX2thbGxzeW1zLm8gOj0g LUQgQVJDSF8kKFNVQkFSQ0gpCiBob3N0cHJvZ3MtJChDT05GSUdfTE9HTykgICAgICAgICArPSBw bm10b2xvZ28KIGhvc3Rwcm9ncy0kKENPTkZJR19WVCkgICAgICAgICAgICs9IGNvbm1ha2VoYXNo CiBob3N0cHJvZ3MtJChDT05GSUdfUFJPTV9DT05TT0xFKSArPSBjb25tYWtlaGFzaApkaWZmIC1O cHJ1IDIuNi4xMy9zY3JpcHRzL01ha2VmaWxlLmJ1aWxkIDIuNi4xMy1rYWxsc3ltcy9zY3JpcHRz L01ha2VmaWxlLmJ1aWxkCi0tLSAyLjYuMTMvc2NyaXB0cy9NYWtlZmlsZS5idWlsZAkyMDA1LTA4 LTI5IDAxOjQxOjAxLjAwMDAwMDAwMCArMDIwMAorKysgMi42LjEzLWthbGxzeW1zL3NjcmlwdHMv TWFrZWZpbGUuYnVpbGQJMjAwNS0wOS0wNyAxNToxOToxOC4wMDAwMDAwMDAgKzAyMDAKQEAgLTE1 MywyMyArMTUzLDI2IEBAIGVsc2UKICMgICBhcmUgZG9uZS4KICMgbyBvdGhlcndpc2UsIHdlIGNh bGN1bGF0ZSBzeW1ib2wgdmVyc2lvbnMgdXNpbmcgdGhlIGdvb2Qgb2xkCiAjICAgZ2Vua3N5bXMg b24gdGhlIHByZXByb2Nlc3NlZCBzb3VyY2UgYW5kIHBvc3Rwcm9jZXNzIHRoZW0gaW4gYSB3YXkK LSMgICB0aGF0IHRoZXkgYXJlIHVzYWJsZSBhcyBhIGxpbmtlciBzY3JpcHQKLSMgbyBnZW5lcmF0 ZSA8ZmlsZT4ubyBmcm9tIC50bXBfPGZpbGU+Lm8gdXNpbmcgdGhlIGxpbmtlciB0bwotIyAgIHJl cGxhY2UgdGhlIHVucmVzb2x2ZWQgc3ltYm9scyBfX2NyY19leHBvcnRlZF9zeW1ib2wgd2l0aAot IyAgIHRoZSBhY3R1YWwgdmFsdWUgb2YgdGhlIGNoZWNrc3VtIGdlbmVyYXRlZCBieSBnZW5rc3lt cworIyAgIHRoYXQgdGhleSBhcmUgdXNhYmxlIGFzIGFzc2VtYmx5IHNvdXJjZQorIyBvIHJlY29t cGlsZSA8ZmlsZT4ubyBmcm9tIDxmaWxlPi5jIGZvcmNpbmcgaW5jbHVzaW9uIG9mIGFzc2VtYmxl cgorIyAgIGRpcmVjdGl2ZXMgZGVmaW5pbmcgdGhlIGFjdHVhbCB2YWx1ZXMgb2YgX19jcmNfKiwg Zm9sbG93ZWQgYnkKKyMgICBvYmpjb3B5LWluZyB0aGVtIHRvIGZvcmNlIHRoZXNlIHN5bWJvbHMg dG8gYmUgbG9jYWwgdG8gcGVybWl0CisjICAgc3RyaXBwaW5nIHRoZW0gZHVyaW5nIHRoZSBmaW5h bCBtb2R1bGUgbGlua2luZyBzdGFnZS4KIAogY21kX2NjX29fYyA9ICQoQ0MpICQoY19mbGFncykg LWMgLW8gJChARCkvLnRtcF8kKEBGKSAkPAogY21kX21vZHZlcnNpb25zID0JCQkJCQkJXAogCWlm ICQoT0JKRFVNUCkgLWggJChARCkvLnRtcF8kKEBGKSB8IGdyZXAgLXEgX19rc3ltdGFiOyB0aGVu CVwKLQkJJChDUFApIC1EX19HRU5LU1lNU19fICQoY19mbGFncykgJDwJCQlcCi0JCXwgJChHRU5L U1lNUykJCQkJCQlcCi0JCT4gJChARCkvLnRtcF8kKEBGOi5vPS52ZXIpOwkJCQlcCi0JCQkJCQkJ CQlcCi0JCSQoTEQpICQoTERGTEFHUykgLXIgLW8gJEAgJChARCkvLnRtcF8kKEBGKSAJCVwKLQkJ CS1UICQoQEQpLy50bXBfJChARjoubz0udmVyKTsJCQlcCi0JCXJtIC1mICQoQEQpLy50bXBfJChA RikgJChARCkvLnRtcF8kKEBGOi5vPS52ZXIpOwlcCisJCWlmICQoQ1BQKSAtRF9fR0VOS1NZTVNf XyAkKGNfZmxhZ3MpICQ8CQkJXAorCQkgICB8ICQoR0VOS1NZTVMpIC1hID4gJChARCkvLnRtcF8k KEBGOi5vPS52ZXIpCQlcCisJCSAgICYmICQoQ0MpICQoY19mbGFncykgLWMgLXcgLWluY2x1ZGUg JChARCkvLnRtcF8kKEBGOi5vPS52ZXIpIC1vICRAICQ8IFwKKwkJICAgJiYgJChPQkpDT1BZKSAt TCAnX19jcmNfKicgLXcgJEA7IHRoZW4JCVwKKwkJCXJtIC1mICQoQEQpLy50bXBfJChARik7CQkJ CVwKKwkJZWxzZQkJCQkJCQlcCisJCQlybSAtZiAkQDsgZXhpdCAxOwkJCQlcCisJCWZpOwkJCQkJ CQlcCiAJZWxzZQkJCQkJCQkJXAogCQltdiAkKEBEKS8udG1wXyQoQEYpICRAOwkJCQkJXAorCQly bSAtZiAkKEBEKS8udG1wXyQoQEY6Lm89LnZlcik7CQkJCVwKIAlmaTsKIGVuZGlmCiAKQEAgLTE4 MCw2ICsxODMsMTIgQEAgZGVmaW5lIHJ1bGVfY2Nfb19jCiAJJChjbWRfY2Nfb19jKTsJCQkJCQkJ ICBcCiAJJChjbWRfbW9kdmVyc2lvbnMpCQkJCQkJICBcCiAJc2NyaXB0cy9iYXNpYy9maXhkZXAg JChkZXBmaWxlKSAkQCAnJChzdWJzdCAnLCdcJycsJChjbWRfY2Nfb19jKSknID4gJChARCkvLiQo QEYpLnRtcDsgIFwKKwlpZiBbIC1yICQoQEQpLy50bXBfJChARjoubz0udmVyKSBdOyB0aGVuCQkJ ICBcCisJCWVjaG8gPj4gJChARCkvLiQoQEYpLnRtcDsJCQkJICBcCisJCWVjaG8gJyRAOiAkKEdF TktTWU1TKScgPj4gJChARCkvLiQoQEYpLnRtcDsJCSAgXAorCQllY2hvICckKEdFTktTWU1TKTo6 IDsnID4+ICQoQEQpLy4kKEBGKS50bXA7CQkgIFwKKwkJcm0gJChARCkvLnRtcF8kKEBGOi5vPS52 ZXIpOwkJCQkgIFwKKwlmaTsJCQkJCQkJCSAgXAogCXJtIC1mICQoZGVwZmlsZSk7CQkJCQkJICBc CiAJbXYgLWYgJChARCkvLiQoQEYpLnRtcCAkKEBEKS8uJChARikuY21kCiBlbmRlZgpkaWZmIC1O cHJ1IDIuNi4xMy9zY3JpcHRzL01ha2VmaWxlLmxpYiAyLjYuMTMta2FsbHN5bXMvc2NyaXB0cy9N YWtlZmlsZS5saWIKLS0tIDIuNi4xMy9zY3JpcHRzL01ha2VmaWxlLmxpYgkyMDA1LTA4LTI5IDAx OjQxOjAxLjAwMDAwMDAwMCArMDIwMAorKysgMi42LjEzLWthbGxzeW1zL3NjcmlwdHMvTWFrZWZp bGUubGliCTIwMDUtMDktMDEgMTE6MzI6MTMuMDAwMDAwMDAwICswMjAwCkBAIC03LDYgKzcsOCBA QAogY29tbWEgICA6PSAsCiBlbXB0eSAgIDo9CiBzcGFjZSAgIDo9ICQoZW1wdHkpICQoZW1wdHkp CitvcGVuICAgIDo9ICgKK2Nsb3NlICAgOj0gKQogCiAjIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkg LSB0byBiZSByZW1vdmVkLi4uCiBleHRyYS15CSs9ICQoRVhUUkFfVEFSR0VUUykKZGlmZiAtTnBy dSAyLjYuMTMvc2NyaXB0cy9NYWtlZmlsZS5tb2RpbnN0IDIuNi4xMy1rYWxsc3ltcy9zY3JpcHRz L01ha2VmaWxlLm1vZGluc3QKLS0tIDIuNi4xMy9zY3JpcHRzL01ha2VmaWxlLm1vZGluc3QJMjAw NS0wOC0yOSAwMTo0MTowMS4wMDAwMDAwMDAgKzAyMDAKKysrIDIuNi4xMy1rYWxsc3ltcy9zY3Jp cHRzL01ha2VmaWxlLm1vZGluc3QJMjAwNS0wOS0wMSAxMTozMjoxMy4wMDAwMDAwMDAgKzAyMDAK QEAgLTE3LDcgKzE3LDggQEAgX19tb2RpbnN0OiAkKG1vZHVsZXMpCiAJQDoKIAogcXVpZXRfY21k X21vZHVsZXNfaW5zdGFsbCA9IElOU1RBTEwgJEAKLSAgICAgIGNtZF9tb2R1bGVzX2luc3RhbGwg PSBta2RpciAtcCAkKDIpOyBjcCAkQCAkKDIpCisgICAgICBjbWRfbW9kdWxlc19pbnN0YWxsID0g bWtkaXIgLXAgJCgyKTsgXAorCQkJICAgIGNwICQoZmlyc3R3b3JkICQod2lsZGNhcmQgJEBzKSAk QCkgJCgyKS8kKGJhc2VuYW1lICQoQEYpKS5rbwogCiAjIE1vZHVsZXMgYnVpbHQgb3V0c2lkZSB0 aGUga2VybmVsIHNvdXJjZSB0cmVlIGdvIGludG8gZXh0cmEgYnkgZGVmYXVsdAogSU5TVEFMTF9N T0RfRElSID89IGV4dHJhCmRpZmYgLU5wcnUgMi42LjEzL3NjcmlwdHMvTWFrZWZpbGUubW9kcG9z dCAyLjYuMTMta2FsbHN5bXMvc2NyaXB0cy9NYWtlZmlsZS5tb2Rwb3N0Ci0tLSAyLjYuMTMvc2Ny aXB0cy9NYWtlZmlsZS5tb2Rwb3N0CTIwMDUtMDgtMjkgMDE6NDE6MDEuMDAwMDAwMDAwICswMjAw CisrKyAyLjYuMTMta2FsbHN5bXMvc2NyaXB0cy9NYWtlZmlsZS5tb2Rwb3N0CTIwMDUtMDktMDcg MTc6NDU6MjcuMDAwMDAwMDAwICswMjAwCkBAIC00MCw5ICs0MCwzMyBAQCBpbmNsdWRlIHNjcmlw dHMvTWFrZWZpbGUubGliCiAKIHN5bXZlcmZpbGUgOj0gJChvYmp0cmVlKS9Nb2R1bGUuc3ltdmVy cwogCitpZmRlZiBDT05GSUdfS0FMTFNZTVMKKworaWZkZWYgQ09ORklHX0tBTExTWU1TX1RSQURJ VElPTkFMCisKK2thbGxzeW1zLXN0cmlwLXNyYyA6PQorCitlbHNlCisKK2thbGxzeW1zLXN0cmlw LXNyYyA6PSAkKGlmICQoQ09ORklHX0tBTExTWU1TX1NUUklQX0dFTkVSQVRFRCksJChzcmN0cmVl KS9zY3JpcHRzL2thbGxzeW1zLnN0cmlwKQora2FsbHN5bXMtc3RyaXAtc3JjICs9ICQoaWYgJChD T05GSUdfS0FMTFNZTVNfU1RSSVBfR0VORVJBVEVEKSwkKHdpbGRjYXJkICQoc3JjdHJlZSkvYXJj aC8kKEFSQ0gpL2thbGxzeW1zLnN0cmlwKSkKKyMgYmludXRpbHMgdXAgdG8gYXQgbGVhc3QgMi4x NSBkbyBub3QgcGVybWl0IHN0cmlwcGluZyBzeW1ib2xzIGJ5IG5hbWUgd2hpbGUKKyMgcmV0YWlu aW5nIHRob3NlIHRoYXQgYXJlIG5lZWRlZCBieSByZWxvY2F0aW9ucy4uLgorIyBrYWxsc3ltcy1z dHJpcC1zcmMgKz0gJChpZiAkKENPTkZJR19LQUxMU1lNU19BTEwpLCxkYXRhKQorCitlbmRpZgor CitrbyA6PSAkKGlmICQoc3RyaXAgJChrYWxsc3ltcy1zdHJpcC1zcmMpKSwua29zLC5rbykKKwor ZWxzZQorCitrbyA6PSAua29zCisKK2VuZGlmCisKICMgU3RlcCAxKSwgZmluZCBhbGwgbW9kdWxl cyBsaXN0ZWQgaW4gJChNT0RWRVJESVIpLwogX19tb2R1bGVzIDo9ICQoc29ydCAkKHNoZWxsIGdy ZXAgLWggJ1wua28nIC9kZXYvbnVsbCAkKHdpbGRjYXJkICQoTU9EVkVSRElSKS8qLm1vZCkpKQot bW9kdWxlcyAgIDo9ICQocGF0c3Vic3QgJS5vLCUua28sICQod2lsZGNhcmQgJChfX21vZHVsZXM6 LmtvPS5vKSkpCittb2R1bGVzICAgOj0gJChwYXRzdWJzdCAlLm8sJSQoa28pLCAkKHdpbGRjYXJk ICQoX19tb2R1bGVzOi5rbz0ubykpKQogCiBfbW9kcG9zdDogJChtb2R1bGVzKQogCkBAIC01Nywx MiArODEsMTIgQEAgcXVpZXRfY21kX21vZHBvc3QgPSBNT0RQT1NUCiAJJChmaWx0ZXItb3V0IEZP UkNFLCReKQogCiAuUEhPTlk6IF9fbW9kcG9zdAotX19tb2Rwb3N0OiAkKHdpbGRjYXJkIHZtbGlu dXgpICQobW9kdWxlczoua289Lm8pIEZPUkNFCitfX21vZHBvc3Q6ICQod2lsZGNhcmQgdm1saW51 eCkgJChtb2R1bGVzOiQoa28pPS5vKSBGT1JDRQogCSQoY2FsbCBjbWQsbW9kcG9zdCkKIAogIyBE ZWNsYXJlIGdlbmVyYXRlZCBmaWxlcyBhcyB0YXJnZXRzIGZvciBtb2Rwb3N0CiAkKHN5bXZlcmZp bGUpOiAgICAgICAgIF9fbW9kcG9zdCA7Ci0kKG1vZHVsZXM6LmtvPS5tb2QuYyk6IF9fbW9kcG9z dCA7CiskKG1vZHVsZXM6JChrbyk9Lm1vZC5jKTogX19tb2Rwb3N0IDsKIAogCiAjIFN0ZXAgNSks IGNvbXBpbGUgYWxsICoubW9kLmMgZmlsZXMKQEAgLTc0LDE5ICs5OCw1MSBAQCBxdWlldF9jbWRf Y2Nfb19jID0gQ0MgICAgICAkQAogICAgICAgY21kX2NjX29fYyA9ICQoQ0MpICQoY19mbGFncykg JChDRkxBR1NfTU9EVUxFKQlcCiAJCSAgIC1jIC1vICRAICQ8CiAKLSQobW9kdWxlczoua289Lm1v ZC5vKTogJS5tb2QubzogJS5tb2QuYyBGT1JDRQorJChtb2R1bGVzOiQoa28pPS5tb2Qubyk6ICUu bW9kLm86ICUubW9kLmMgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZF9kZXAsY2Nfb19jKQogCi10 YXJnZXRzICs9ICQobW9kdWxlczoua289Lm1vZC5vKQordGFyZ2V0cyArPSAkKG1vZHVsZXM6JChr byk9Lm1vZC5vKQogCiAjIFN0ZXAgNiksIGZpbmFsIGxpbmsgb2YgdGhlIG1vZHVsZXMKIHF1aWV0 X2NtZF9sZF9rb19vID0gTEQgW01dICAkQAogICAgICAgY21kX2xkX2tvX28gPSAkKExEKSAkKExE RkxBR1MpICQoTERGTEFHU19NT0RVTEUpIC1vICRAIAkJXAogCQkJICAkKGZpbHRlci1vdXQgRk9S Q0UsJF4pCiAKLSQobW9kdWxlcyk6ICUua28gOiUubyAlLm1vZC5vIEZPUkNFCitpZmVxICgkKGtv KSwua28pCisKKyQobW9kdWxlcyk6ICUua286ICUubyAlLm1vZC5vIEZPUkNFCisJJChRKXJtIC1m ICRAcworCSQoY2FsbCBpZl9jaGFuZ2VkLGxkX2tvX28pCisKK2Vsc2UKKworJChwYXRzdWJzdCAl JChrbyksJS5rbywkKG1vZHVsZXMpKTogJS5rbzogJS5vICUubW9kLm8gRk9SQ0UKIAkkKGNhbGwg aWZfY2hhbmdlZCxsZF9rb19vKQogCisjIFN0ZXAgNyksIHN0cmlwIGFzIG1hbnkgc3ltYm9scyBm cm9tIHRoZSBtb2R1bGVzIGFzIGZlYXNpYmxlCitxdWlldF9jbWRfc3RyaXBfa29zX2tvID0gU1RS SVAgICAkPAoraWZkZWYgQ09ORklHX0tBTExTWU1TCitjbWRfc3RyaXBfa29zX2tvID0gJChPQkpD T1BZKSAtLXN0cmlwLWRlYnVnICQoYWRkcHJlZml4IC0tc3RyaXAtc3ltYm9scyAsJChmaWx0ZXIg JS5zdHJpcCwkXikpIC13ICQ8ICRACitlbHNlCitjbWRfc3RyaXBfa29zX2tvID0gJChPQkpDT1BZ KSAtLXN0cmlwLWRlYnVnIC0tc3RyaXAtdW5uZWVkZWQgJDwgJEAKK2VuZGlmCisKKyUkKGtvKTog JS5rbyAkKGZpbHRlciAlLnN0cmlwLCQoa2FsbHN5bXMtc3RyaXAtc3JjKSkgJChpZiAkKGZpbHRl ciBkYXRhLCQoa2FsbHN5bXMtc3RyaXAtc3JjKSksLmRhdGFfJS5zdHJpcCkgRk9SQ0UKKwkkKGNh bGwgaWZfY2hhbmdlZCxzdHJpcF9rb3Nfa28pCisKKy5QUkVDSU9VUzogLmRhdGFfJS5zdHJpcAor LmRhdGFfJS5zdHJpcDogJS5rbyAuY29uZmlnCisJJChRKSQoTk0pICQ8IHwgc2VkIC1uICdzLFtb OnhkaWdpdDpdXVwrW1s6c3BhY2U6XV1cK1tedFRdW1s6c3BhY2U6XV1cK1woLipcKSxcMSxwJyBc CisJCXwgd2hpbGUgcmVhZCBpOyBkbyBjYXNlICQkaSBpbiBcCisJCQkkKGFkZHN1ZmZpeCAkKGNs b3NlKTs7LCQoc2hlbGwgY2F0ICQoZmlsdGVyICQoc3JjdHJlZSkvJSwkKGthbGxzeW1zLXN0cmlw LXNyYykpIFwKKwkJCQl8IHNlZCAncyxcKFs7fCY8PigpJCRcXF1cKSxcXFwxLGcnKSkgXAorCQkJ KikgZWNobyAkJGk7OyBcCisJCWVzYWM7IGRvbmUgPiRACisKK3RhcmdldHMgKz0gJChwYXRzdWJz dCAlJChrbyksJS5rbywkKG1vZHVsZXMpKQorCitlbmRpZgorCiB0YXJnZXRzICs9ICQobW9kdWxl cykKIAogCg== --=__PartD1F3BF8B.0__=--