From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 2948 invoked by alias); 30 Nov 2011 09:23:12 -0000 Received: (qmail 2935 invoked by uid 22791); 30 Nov 2011 09:23:09 -0000 X-SWARE-Spam-Status: No, hits=-1.5 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_LOW X-Spam-Check-By: sourceware.org Received: from ch1ehsobe006.messaging.microsoft.com (HELO ch1outboundpool.messaging.microsoft.com) (216.32.181.186) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 30 Nov 2011 09:22:48 +0000 Received: from mail174-ch1-R.bigfish.com (10.43.68.245) by CH1EHSOBE014.bigfish.com (10.43.70.64) with Microsoft SMTP Server id 14.1.225.22; Wed, 30 Nov 2011 09:22:45 +0000 Received: from mail174-ch1 (localhost [127.0.0.1]) by mail174-ch1-R.bigfish.com (Postfix) with ESMTP id 69ECC6A00E6; Wed, 30 Nov 2011 09:22:45 +0000 (UTC) X-SpamScore: 0 X-BigFish: VPS0(zzc85fhzz1202hzzz2dh2a8h668h839h8e2h8e3h34h) X-Forefront-Antispam-Report: CIP:59.163.77.45;KIP:(null);UIP:(null);IPV:NLI;H:Outbound.kpitcummins.com;RD:59.163.77.45.static.vsnl.net.in;EFVD:NLI X-FB-SS: 13, Received: from mail174-ch1 (localhost.localdomain [127.0.0.1]) by mail174-ch1 (MessageSwitch) id 1322644965190621_15628; Wed, 30 Nov 2011 09:22:45 +0000 (UTC) Received: from CH1EHSMHS015.bigfish.com (snatpool1.int.messaging.microsoft.com [10.43.68.250]) by mail174-ch1.bigfish.com (Postfix) with ESMTP id 278B12C0042; Wed, 30 Nov 2011 09:22:45 +0000 (UTC) Received: from Outbound.kpitcummins.com (59.163.77.45) by CH1EHSMHS015.bigfish.com (10.43.70.15) with Microsoft SMTP Server (TLS) id 14.1.225.22; Wed, 30 Nov 2011 09:22:41 +0000 Received: from KCHJEXMB02.kpit.com ([169.254.2.119]) by KCHJEXHC01.kpit.com ([172.10.15.73]) with mapi id 14.01.0255.000; Wed, 30 Nov 2011 14:52:38 +0530 From: "Jayant R. Sonar" To: Rainer Orth CC: Joseph Myers , "gcc-patches@gcc.gnu.org" , "rth@redhat.com" Subject: Re: [Ping] RE: CR16 Port addition Date: Wed, 30 Nov 2011 10:50:00 -0000 Message-ID: References: In-Reply-To: Content-Type: multipart/mixed; boundary="_002_C013F7BFDC93F047B111833D343777BD17A5AAE5KCHJEXMB02kpitc_" MIME-Version: 1.0 X-OriginatorOrg: kpitcummins.com Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2011-11/txt/msg02631.txt.bz2 --_002_C013F7BFDC93F047B111833D343777BD17A5AAE5KCHJEXMB02kpitc_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Content-length: 1745 Hello Rainer, Thank you for quickly reviewing the patch. I have modified the patch as per your suggestions. Please find the modified patch attached with this mail. >>* LIB1ASMSRC is relative to libgcc/config, and the file is called >> lib1funcs.S. Please change the patch accordingly. This has been fixed now. >>* gcc/config.gcc uses cr16-*-elf as target, while libgcc/config.host has >> cr16-*-*. Please use the former in libgcc, too, and add to >> extra_parts which already has crtbegin.o crtend.o for all *-*-elf >> targets. This has been fixed now. >>* It seems highly unfortunate that cr16 has its own copy of the >> unwinder, apparently even containing some references to ia64 which are >> certainly inapproprate here.=20=20 I have removed the code related to IA64 from the unwind-cr16.c file. >> Given the amount of copy&paste >> programming within the gcc tree, is there any way to make cr16 >> specific changes to the generic versions of this code? I saw only one target specific conditional code present in generic=20 unwind-dw2.c file (ia64) and other targets having their own modified copy o= f=20 this file in target specific folders. Therefore, I followed the same=20 technique. I took the generic file and added CR16 specific changes under th= e=20 conditional statements "#if defined( __CR16C__ )" and placed it in target=20 folder. The CR16's programming memory is 2-byte aligned and the least significant=20 bit of PC is always zero. The Return Address (RA) register always saves the= =20 value of PC right shifted by 1(PC >> 1). This conversion seems broken at=20 some places during unwinding which results in terminate() function being=20 called. Thanks and Regards, Jayant Sonar [KPIT Cummins, Pune] --_002_C013F7BFDC93F047B111833D343777BD17A5AAE5KCHJEXMB02kpitc_ Content-Type: application/octet-stream; name="cr16-gcc.patch" Content-Description: cr16-gcc.patch Content-Disposition: attachment; filename="cr16-gcc.patch"; size=213714; creation-date="Wed, 30 Nov 2011 09:22:26 GMT"; modification-date="Wed, 30 Nov 2011 07:34:34 GMT" Content-Transfer-Encoding: base64 Content-length: 289702 LS0tIGNvbmZpZ3VyZS5hYwkyMDExLTExLTE4IDE2OjIyOjMyLjAwMDAwMDAw MCArMDUzMAorKysgY29uZmlndXJlLmFjCTIwMTEtMTEtMjggMTI6NDk6MDcu MDAwMDAwMDAwICswNTMwCkBAIC04NzMsOSArODczLDYgQEAgY2FzZSAiJHt0 YXJnZXR9IiBpbgogICB0aWM1NHgtKi0qKQogICAgIG5vY29uZmlnZGlycz0i JG5vY29uZmlnZGlycyB0YXJnZXQtbGliZ2xvc3MgZ2RiIgogICAgIDs7Ci0g IGNyMTYtKi0qKQotICAgIG5vY29uZmlnZGlycz0iJG5vY29uZmlnZGlycyBn ZGIiCi0gICAgOzsKICAgZDEwdi0qLSopCiAgICAgbm9jb25maWdkaXJzPSIk bm9jb25maWdkaXJzIHRhcmdldC1saWJnbG9zcyIKICAgICA7OwotLS0gZ2Nj L2NvbW1vbi9jb25maWcvY3IxNi9jcjE2LWNvbW1vbi5jCTE5NzAtMDEtMDEg MDU6MzA6MDAuMDAwMDAwMDAwICswNTMwCisrKyBnY2MvY29tbW9uL2NvbmZp Zy9jcjE2L2NyMTYtY29tbW9uLmMJMjAxMS0xMS0yOCAxMjo0Njo0MC4wMDAw MDAwMDAgKzA1MzAKQEAgLTAsMCArMSwzOCBAQAorLyogQ29tbW9uIGhvb2tz IGZvciBDUjE2LgorICAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1 LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExCisgICBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBh cnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl ciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKK2FueSBsYXRlciB2 ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcg d2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUK KzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpbmNs dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJzeXN0ZW0uaCIKKyNpbmNsdWRl ICJjb3JldHlwZXMuaCIKKyNpbmNsdWRlICJ0bS5oIgorI2luY2x1ZGUgImNv bW1vbi9jb21tb24tdGFyZ2V0LmgiCisjaW5jbHVkZSAiY29tbW9uL2NvbW1v bi10YXJnZXQtZGVmLmgiCisKKy8qIEltcGxlbWVudCBUQVJHRVRfT1BUSU9O X09QVElNSVpBVElPTl9UQUJMRS4gICovCitzdGF0aWMgY29uc3Qgc3RydWN0 IGRlZmF1bHRfb3B0aW9ucyBjcjE2X29wdGlvbl9vcHRpbWl6YXRpb25fdGFi bGVbXSA9CisgIHsKKyAgICB7IE9QVF9MRVZFTFNfMV9QTFVTLCBPUFRfZm9t aXRfZnJhbWVfcG9pbnRlciwgTlVMTCwgMSB9LAorICAgIHsgT1BUX0xFVkVM U19OT05FLCAwLCBOVUxMLCAwIH0KKyAgfTsKKworI3VuZGVmICBUQVJHRVRf T1BUSU9OX09QVElNSVpBVElPTl9UQUJMRQorI2RlZmluZSBUQVJHRVRfT1BU SU9OX09QVElNSVpBVElPTl9UQUJMRSBjcjE2X29wdGlvbl9vcHRpbWl6YXRp b25fdGFibGUKKworc3RydWN0IGdjY190YXJnZXRtX2NvbW1vbiB0YXJnZXRt X2NvbW1vbiA9IFRBUkdFVE1fQ09NTU9OX0lOSVRJQUxJWkVSOwotLS0gZ2Nj L2NvbmZpZy9jcjE2L2NvbnN0cmFpbnRzLm1kCTE5NzAtMDEtMDEgMDU6MzA6 MDAuMDAwMDAwMDAwICswNTMwCisrKyBnY2MvY29uZmlnL2NyMTYvY29uc3Ry YWludHMubWQJMjAxMS0xMS0yOCAxMjo0Njo0MC4wMDAwMDAwMDAgKzA1MzAK QEAgLTAsMCArMSw4MSBAQAorOzsgUHJlZGljYXRlcyBvZiBtYWNoaW5lIGRl c2NyaXB0aW9uIGZvciBDUjE2LgorOzsgQ29weXJpZ2h0IChDKSAyMDExIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorOzsgQ29udHJpYnV0ZWQg YnkgS1BJVCBDdW1taW5zIEluZm9zeXN0ZW1zIExpbWl0ZWQuCis7OworOzsg VGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorOzsKKzs7IEdDQyBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5IGl0Cis7OyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorOzsgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0 IHlvdXIKKzs7IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCis7OworOzsg R0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCis7OyBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJ VFkKKzs7IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKzs7IExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKzs7Cis7OyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorOzsg YWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5v dCBzZWUKKzs7IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gIAor Cis7OyBDb25zdHJhaW50cworOzsgUmVnaXN0ZXIgY29uc3RyYWludHMKKyhk ZWZpbmVfcmVnaXN0ZXJfY29uc3RyYWludCAiYiIgIk5PU1BfUkVHUyIKKyAg IkBubyBzcCByZWdpc3RlcnMiKQorCisoZGVmaW5lX3JlZ2lzdGVyX2NvbnN0 cmFpbnQgImMiICJTSE9SVF9SRUdTIgorICAiQHNob3J0IHJlZ2lzdGVycyIp CisKKyhkZWZpbmVfcmVnaXN0ZXJfY29uc3RyYWludCAiZCIgIkxPTkdfUkVH UyIKKyAgIkBsb25nIHJlZ2lzdGVycyIpCisKKzs7IEludGVnZXIgY29uc3Ry YWludHMuCisoZGVmaW5lX2NvbnN0cmFpbnQgIkkiCisgICJBIHNpZ25lZCA0 LWJpdCBpbW1lZGlhdGUuIgorICAoYW5kIChtYXRjaF9jb2RlICJjb25zdF9p bnQiKQorICAgICAgIChtYXRjaF90ZXN0ICJTSUdORURfSU5UX0ZJVFNfTl9C SVRTIChpdmFsLCA0KSIpKSkKKworKGRlZmluZV9jb25zdHJhaW50ICJKIgor ICAiQSBzaWduZWQgNS1iaXQgaW1tZWRpYXRlLiIKKyAgKGFuZCAobWF0Y2hf Y29kZSAiY29uc3RfaW50IikKKyAgICAgICAobWF0Y2hfdGVzdCAiU0lHTkVE X0lOVF9GSVRTX05fQklUUyAoaXZhbCwgNSkiKSkpCisKKyhkZWZpbmVfY29u c3RyYWludCAiSyIKKyAgIkEgc2lnbmVkIDYtYml0IGltbWVkaWF0ZS4iCisg IChhbmQgKG1hdGNoX2NvZGUgImNvbnN0X2ludCIpCisgICAgICAgKG1hdGNo X3Rlc3QgIlNJR05FRF9JTlRfRklUU19OX0JJVFMgKGl2YWwsIDYpIikpKQor CisoZGVmaW5lX2NvbnN0cmFpbnQgIkwiCisgICJBIHVuc2lnbmVkIDQtYml0 IGltbWVkaWF0ZS4iCisgIChhbmQgKG1hdGNoX2NvZGUgImNvbnN0X2ludCIp CisgICAgICAgKG1hdGNoX3Rlc3QgIlVOU0lHTkVEX0lOVF9GSVRTX05fQklU UyAoaXZhbCwgNCkiKSkpCisKKyhkZWZpbmVfY29uc3RyYWludCAiTSIKKyAg IkEgdW5zaWduZWQgYW5kIGN1c3RvbWl6ZWQgIDQtYml0IGltbWVkaWF0ZS4i CisgIChhbmQgKG1hdGNoX2NvZGUgImNvbnN0X2ludCIpCisgICAgICAgKG1h dGNoX3Rlc3QgIihJTl9SQU5HRV9QIChpdmFsLCAwLCAxNSkgJiYgKChpdmFs ICE9IDkpICYmIChpdmFsICE9IDExKSkpIikpKQorCisoZGVmaW5lX2NvbnN0 cmFpbnQgIk4iCisgICJBIHNpZ25lZCAxNi1iaXQgaW1tZWRpYXRlLiIKKyAg KGFuZCAobWF0Y2hfY29kZSAiY29uc3RfaW50IikKKyAgICAgICAobWF0Y2hf dGVzdCAiSU5fUkFOR0VfUCAoaXZhbCwgLTMyNzY4LCAzMjc2NykiKSkpCisK KyhkZWZpbmVfY29uc3RyYWludCAiTyIKKyAgIkEgdW5zaWduZWQgMjAtYml0 IGltbWVkaWF0ZS4iCisgIChhbmQgKG1hdGNoX2NvZGUgImNvbnN0X2ludCIp CisgICAgICAgKG1hdGNoX3Rlc3QgIklOX1JBTkdFX1AgKGl2YWwsIDAsIDEw NDg1NzUpIikpKQorCisoZGVmaW5lX2NvbnN0cmFpbnQgIlEiCisgICJBIHNo aWZ0IFFJIGltbWVkaWF0ZS4iCisgIChhbmQgKG1hdGNoX2NvZGUgImNvbnN0 X2ludCIpCisgICAgICAgKG1hdGNoX3Rlc3QgIklOX1JBTkdFX1AgKGl2YWws IDAsIDcpIikpKQorCisoZGVmaW5lX2NvbnN0cmFpbnQgIlIiCisgICJBIHNo aWZ0IEhJIGltbWVkaWF0ZS4iCisgIChhbmQgKG1hdGNoX2NvZGUgImNvbnN0 X2ludCIpCisgICAgICAgKG1hdGNoX3Rlc3QgIklOX1JBTkdFX1AgKGl2YWws IDAsIDE1KSIpKSkKKworKGRlZmluZV9jb25zdHJhaW50ICJTIgorICAiQSBz aGlmdCBTSSBpbW1lZGlhdGUuIgorICAoYW5kIChtYXRjaF9jb2RlICJjb25z dF9pbnQiKQorICAgICAgIChtYXRjaF90ZXN0ICJJTl9SQU5HRV9QIChpdmFs LCAwLCAzMSkiKSkpCi0tLSBnY2MvY29uZmlnL2NyMTYvY3IxNi5jCTE5NzAt MDEtMDEgMDU6MzA6MDAuMDAwMDAwMDAwICswNTMwCisrKyBnY2MvY29uZmln L2NyMTYvY3IxNi5jCTIwMTEtMTEtMjggMTI6NDY6NDAuMDAwMDAwMDAwICsw NTMwCkBAIC0wLDAgKzEsMjE4MiBAQAorLyogT3V0cHV0IHJvdXRpbmVzIGZv ciBDUjE2IHByb2Nlc3Nvci4KKyAgIENvcHlyaWdodCAoQykgMjAxMSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvbnRyaWJ1dGVkIGJ5 IEtQSVQgQ3VtbWlucyBJbmZvc3lzdGVtcyBMaW1pdGVkLgorICAKKyAgIFRo aXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworICAgR0NDIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkg aXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgICBieSB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91 cgorICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyAgIEdDQyBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLCBidXQgV0lUSE9VVAorICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisg ICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUgR05VIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3 aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQor ICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lu Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInN5c3RlbS5oIgorI2luY2x1 ZGUgImNvcmV0eXBlcy5oIgorI2luY2x1ZGUgInRtLmgiCisjaW5jbHVkZSAi cnRsLmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgInRtX3AuaCIK KyNpbmNsdWRlICJyZWdzLmgiCisjaW5jbHVkZSAiaGFyZC1yZWctc2V0Lmgi CisjaW5jbHVkZSAiaW5zbi1jb25maWcuaCIKKyNpbmNsdWRlICJjb25kaXRp b25zLmgiCisjaW5jbHVkZSAib3V0cHV0LmgiCisjaW5jbHVkZSAiaW5zbi1j b2Rlcy5oIgorI2luY2x1ZGUgImluc24tYXR0ci5oIgorI2luY2x1ZGUgImZs YWdzLmgiCisjaW5jbHVkZSAiZXhjZXB0LmgiCisjaW5jbHVkZSAiZnVuY3Rp b24uaCIKKyNpbmNsdWRlICJyZWNvZy5oIgorI2luY2x1ZGUgImV4cHIuaCIK KyNpbmNsdWRlICJvcHRhYnMuaCIKKyNpbmNsdWRlICJkaWFnbm9zdGljLWNv cmUuaCIKKyNpbmNsdWRlICJiYXNpYy1ibG9jay5oIgorI2luY2x1ZGUgInRh cmdldC5oIgorI2luY2x1ZGUgInRhcmdldC1kZWYuaCIKKyNpbmNsdWRlICJk Zi5oIgorCisvKiBEZWZpbml0aW9ucy4gICovCisKKy8qIE1heGltdW0gbnVt YmVyIG9mIHJlZ2lzdGVyIHVzZWQgZm9yIHBhc3NpbmcgcGFyYW1ldGVycy4g ICovCisjZGVmaW5lIE1BWF9SRUdfRk9SX1BBU1NJTkdfQVJHUyAgNgorCisv KiBNaW5pbXVtIG51bWJlciByZWdpc3RlciB1c2VkIGZvciBwYXNzaW5nIHBh cmFtZXRlcnMuICAqLworI2RlZmluZSBNSU5fUkVHX0ZPUl9QQVNTSU5HX0FS R1MgIDIKKworLyogVGhlIG1heGltdW0gY291bnQgb2Ygd29yZHMgc3VwcG9y dGVkIGluIHRoZSBhc3NlbWJseSBvZiB0aGUgYXJjaGl0ZWN0dXJlIGluCisg ICBhIHB1c2gvcG9wIGluc3RydWN0aW9uLiAgKi8KKyNkZWZpbmUgTUFYX0NP VU5UICA4CisKKy8qIFByZWRpY2F0ZSBpcyB0cnVlIGlmIHRoZSBjdXJyZW50 IGZ1bmN0aW9uIGlzIGEgJ25vcmV0dXJuJyBmdW5jdGlvbiwgCisgICBpLmUu IGl0IGlzIHF1YWxpZmllZCBhcyB2b2xhdGlsZS4gICovCisjZGVmaW5lIEZV TkNfSVNfTk9SRVRVUk5fUChkZWNsKSAoVFJFRV9USElTX1ZPTEFUSUxFIChk ZWNsKSkKKworLyogUHJlZGljYXRlIHRoYXQgaG9sZHMgd2hlbiB3ZSBuZWVk IHRvIHNhdmUgcmVnaXN0ZXJzIGV2ZW4gZm9yICdub3JldHVybicKKyAgIGZ1 bmN0aW9ucywgdG8gYWNjb21vZGF0ZSBmb3IgdW53aW5kaW5nLiAgKi8KKyNk ZWZpbmUgTVVTVF9TQVZFX1JFR1NfUCgpIFwKKyAgKGZsYWdfdW53aW5kX3Rh YmxlcyB8fCAoZmxhZ19leGNlcHRpb25zICYmICFVSV9TSkxKKSkKKworLyog Tm9uemVybyBpZiB0aGUgcnR4IFggaXMgYSBzaWduZWQgY29uc3QgaW50IG9m IG4gYml0cy4gICovCisjZGVmaW5lIFJUWF9TSUdORURfSU5UX0ZJVFNfTl9C SVRTKFgsIG4pICAgICAgICAgICAgICAgIFwKKyAgKChHRVRfQ09ERSAoWCkg PT0gQ09OU1RfSU5UICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAm JiBTSUdORURfSU5UX0ZJVFNfTl9CSVRTIChJTlRWQUwgKFgpLCBuKSkgPyAx IDogMCkKKworLyogTm9uemVybyBpZiB0aGUgcnR4IFggaXMgYW4gdW5zaWdu ZWQgY29uc3QgaW50IG9mIG4gYml0cy4gICovCisjZGVmaW5lIFJUWF9VTlNJ R05FRF9JTlRfRklUU19OX0JJVFMoWCwgbikgICAgICAgICAgICAgICBcCisg ICgoR0VUX0NPREUgKFgpID09IENPTlNUX0lOVCAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisgICAmJiBVTlNJR05FRF9JTlRfRklUU19OX0JJVFMg KElOVFZBTCAoWCksIG4pKSA/IDEgOiAwKQorCisvKiBTdHJ1Y3R1cmUgZm9y IHN0YWNrIGNvbXB1dGF0aW9ucy4gICovCisKKy8qIHZhcmlhYmxlIGRlZmlu aXRpb25zIGluIHRoZSBzdHJ1dHVyZQorICAgYXJnc19zaXplICAgICAgICAg ICAgIE51bWJlciBvZiBieXRlcyBzYXZlZCBvbiB0aGUgc3RhY2sgZm9yIGxv Y2FsIAorCQkJIHZhcmlhYmxlcworCisgICByZWdfc2l6ZQkJIE51bWJlciBv ZiBieXRlcyBzYXZlZCBvbiB0aGUgc3RhY2sgZm9yIAorCQkJIG5vbi1zY3Jh dGNoIHJlZ2lzdGVycworCisgICB0b3RhbF9zaXplIAkJIFRoZSBzdW0gb2Yg MiBzaXplczogbG9jYWxzIHZhcnMgYW5kIHBhZGRpbmcgYnl0ZSAKKwkJCSBm b3Igc2F2aW5nIHRoZSByZWdpc3RlcnMuIFVzZWQgaW4gZXhwYW5kX3Byb2xv Z3VlKCkgCisJCQkgYW5kIGV4cGFuZF9lcGlsb2d1ZSgpCisKKyAgIGxhc3Rf cmVnX3RvX3NhdmUgICAgICBXaWxsIGhvbGQgdGhlIG51bWJlciBvZiB0aGUg bGFzdCByZWdpc3RlciB0aGUgCisJCQkgcHJvbG9ndWUgc2F2ZXMsIC0xIGlm IG5vIHJlZ2lzdGVyIGlzIHNhdmVkCisKKyAgIHNhdmVfcmVnc1sxNl0JIEVh Y2ggb2JqZWN0IGluIHRoZSBhcnJheSBpcyBhIHJlZ2lzdGVyIG51bWJlci4g CisJCQkgTWFyayAxIGZvciByZWdpc3RlcnMgdGhhdCBuZWVkIHRvIGJlIHNh dmVkCisKKyAgIG51bV9yZWdzCQkgTnVtYmVyIG9mIHJlZ2lzdGVycyBzYXZl ZAorCisgICBpbml0aWFsaXplZAkJIE5vbi16ZXJvIGlmIGZyYW1lIHNpemUg YWxyZWFkeSBjYWxjdWxhdGVkLCBub3QgCisJCQkgdXNlZCB5ZXQKKworICAg ZnVuY3Rpb25fbWFrZXNfY2FsbHMgIERvZXMgdGhlIGZ1bmN0aW9uIG1ha2Ug Y2FsbHMgPyBub3QgdXNlZCB5ZXQuICAqLworCitzdHJ1Y3QgY3IxNl9mcmFt ZV9pbmZvCit7CisgIHVuc2lnbmVkIGxvbmcgdmFyX3NpemU7CisgIHVuc2ln bmVkIGxvbmcgYXJnc19zaXplOworICB1bnNpZ25lZCBpbnQgIHJlZ19zaXpl OworICB1bnNpZ25lZCBsb25nIHRvdGFsX3NpemU7CisgIGxvbmcgICAgICAg ICAgbGFzdF9yZWdfdG9fc2F2ZTsKKyAgbG9uZyAgICAgICAgICBzYXZlX3Jl Z3NbRklSU1RfUFNFVURPX1JFR0lTVEVSXTsKKyAgaW50ICAgICAgICAgICBu dW1fcmVnczsKKyAgaW50ICAgICAgICAgICBpbml0aWFsaXplZDsKKyAgaW50 ICAgICAgICAgICBmdW5jdGlvbl9tYWtlc19jYWxsczsKK307CisKKy8qIEN1 cnJlbnQgZnJhbWUgaW5mb3JtYXRpb24gY2FsY3VsYXRlZCBieSBjcjE2X2Nv bXB1dGVfZnJhbWVfc2l6ZS4gICovCitzdGF0aWMgc3RydWN0IGNyMTZfZnJh bWVfaW5mbyBjdXJyZW50X2ZyYW1lX2luZm87CisKKy8qIFN0YXRpYyBWYXJp YWJsZXMuICAqLworCisvKiBEYXRhIG1vZGVsIHRoYXQgd2FzIHN1cHBsaWVk IGJ5IHVzZXIgdmlhIGNvbW1hbmQgbGluZSBvcHRpb24KKyAgIFRoaXMgd2ls bCBiZSBvdmVycmlkZGVuIGluIGNhc2Ugb2YgaW52YWxpZCBjb21iaW5hdGlv bgorICAgb2YgY29yZSBhbmQgZGF0YSBtb2RlbCBvcHRpb25zIGFyZSBzdXBw bGllZC4gICovCitzdGF0aWMgZW51bSBkYXRhX21vZGVsX3R5cGUgZGF0YV9t b2RlbCA9IERNX0RFRkFVTFQ7CisKKy8qIFRBUkdFVE0gRnVuY3Rpb24gUHJv dG90eXBlcyBhbmQgZm9yd2FyZCBkZWNsYXJhdGlvbnMgICovCitzdGF0aWMg dm9pZCBjcjE2X3ByaW50X29wZXJhbmQgKEZJTEUgKiwgcnR4LCBpbnQpOwor c3RhdGljIHZvaWQgY3IxNl9wcmludF9vcGVyYW5kX2FkZHJlc3MgKEZJTEUg KiwgcnR4KTsKKworLyogU3RhY2sgbGF5b3V0IGFuZCBjYWxsaW5nIGNvbnZl bnRpb25zLiAgKi8KKyN1bmRlZiAgVEFSR0VUX1NUUlVDVF9WQUxVRV9SVFgK KyNkZWZpbmUgVEFSR0VUX1NUUlVDVF9WQUxVRV9SVFgJCWNyMTZfc3RydWN0 X3ZhbHVlX3J0eAorI3VuZGVmICBUQVJHRVRfUkVUVVJOX0lOX01FTU9SWQor I2RlZmluZSBUQVJHRVRfUkVUVVJOX0lOX01FTU9SWQkJY3IxNl9yZXR1cm5f aW5fbWVtb3J5CisKKy8qIFRhcmdldC1zcGVjaWZpYyB1c2VzIG9mICdfX2F0 dHJpYnV0ZV9fJy4gICovCisjdW5kZWYgIFRBUkdFVF9BVFRSSUJVVEVfVEFC TEUKKyNkZWZpbmUgVEFSR0VUX0FUVFJJQlVURV9UQUJMRSAJCWNyMTZfYXR0 cmlidXRlX3RhYmxlCisjdW5kZWYgVEFSR0VUX05BUlJPV19WT0xBVElMRV9C SVRGSUVMRAorI2RlZmluZSBUQVJHRVRfTkFSUk9XX1ZPTEFUSUxFX0JJVEZJ RUxEIGhvb2tfYm9vbF92b2lkX2ZhbHNlCisKKy8qIEVIIHJlbGF0ZWQuICAq LworI3VuZGVmIFRBUkdFVF9VTldJTkRfV09SRF9NT0RFCisjZGVmaW5lIFRB UkdFVF9VTldJTkRfV09SRF9NT0RFCQljcjE2X3Vud2luZF93b3JkX21vZGUK KworLyogT3ZlcnJpZGUgT3B0aW9ucy4gICovCisjdW5kZWYgVEFSR0VUX09Q VElPTl9PVkVSUklERQorI2RlZmluZSBUQVJHRVRfT1BUSU9OX09WRVJSSURF ICAJY3IxNl9vdmVycmlkZV9vcHRpb25zIAorCisvKiBDb25kaXRpb25hbCBy ZWdpc3RlciB1c3VhZ2UuICAqLworI3VuZGVmIFRBUkdFVF9DT05ESVRJT05B TF9SRUdJU1RFUl9VU0FHRSAKKyNkZWZpbmUgVEFSR0VUX0NPTkRJVElPTkFM X1JFR0lTVEVSX1VTQUdFIGNyMTZfY29uZGl0aW9uYWxfcmVnaXN0ZXJfdXNh Z2UKKworLyogQ29udHJvbGxpbmcgcmVnaXN0ZXIgc3BpbGxzLiAgKi8KKyN1 bmRlZiBUQVJHRVRfQ0xBU1NfTElLRUxZX1NQSUxMRURfUAorI2RlZmluZSBU QVJHRVRfQ0xBU1NfTElLRUxZX1NQSUxMRURfUAljcjE2X2NsYXNzX2xpa2Vs eV9zcGlsbGVkX3AKKworLyogUGFzc2luZyBmdW5jdGlvbiBhcmd1bWVudHMu ICAqLworI3VuZGVmIFRBUkdFVF9GVU5DVElPTl9BUkcKKyNkZWZpbmUgVEFS R0VUX0ZVTkNUSU9OX0FSRyAJCWNyMTZfZnVuY3Rpb25fYXJnCisjdW5kZWYg VEFSR0VUX0ZVTkNUSU9OX0FSR19BRFZBTkNFCisjZGVmaW5lIFRBUkdFVF9G VU5DVElPTl9BUkdfQURWQU5DRSAJY3IxNl9mdW5jdGlvbl9hcmdfYWR2YW5j ZQorI3VuZGVmIFRBUkdFVF9SRVRVUk5fUE9QU19BUkdTCisjZGVmaW5lIFRB UkdFVF9SRVRVUk5fUE9QU19BUkdTIAljcjE2X3JldHVybl9wb3BzX2FyZ3MK KworLyogSW5pdGlhbGl6ZSB0aGUgR0NDIHRhcmdldCBzdHJ1Y3R1cmUuICAq LworI3VuZGVmIFRBUkdFVF9GUkFNRV9QT0lOVEVSX1JFUVVJUkVECisjZGVm aW5lIFRBUkdFVF9GUkFNRV9QT0lOVEVSX1JFUVVJUkVECWNyMTZfZnJhbWVf cG9pbnRlcl9yZXF1aXJlZAorI3VuZGVmIFRBUkdFVF9DQU5fRUxJTUlOQVRF CisjZGVmaW5lIFRBUkdFVF9DQU5fRUxJTUlOQVRFIAkJY3IxNl9jYW5fZWxp bWluYXRlCisjdW5kZWYgVEFSR0VUX0xFR0lUSU1JWkVfQUREUkVTUworI2Rl ZmluZSBUQVJHRVRfTEVHSVRJTUlaRV9BRERSRVNTIAljcjE2X2xlZ2l0aW1p emVfYWRkcmVzcworI3VuZGVmIFRBUkdFVF9MRUdJVElNQVRFX0NPTlNUQU5U X1AKKyNkZWZpbmUgVEFSR0VUX0xFR0lUSU1BVEVfQ09OU1RBTlRfUCAgICBj cjE2X2xlZ2l0aW1hdGVfY29uc3RhbnRfcAorI3VuZGVmIFRBUkdFVF9MRUdJ VElNQVRFX0FERFJFU1NfUAorI2RlZmluZSBUQVJHRVRfTEVHSVRJTUFURV9B RERSRVNTX1AgICAgIGNyMTZfbGVnaXRpbWF0ZV9hZGRyZXNzX3AKKworLyog UmV0dXJuaW5nIGZ1bmN0aW9uIHZhbHVlLiAgKi8KKyN1bmRlZiBUQVJHRVRf RlVOQ1RJT05fVkFMVUUKKyNkZWZpbmUgVEFSR0VUX0ZVTkNUSU9OX1ZBTFVF IAkJY3IxNl9mdW5jdGlvbl92YWx1ZQorI3VuZGVmIFRBUkdFVF9MSUJDQUxM X1ZBTFVFCisjZGVmaW5lIFRBUkdFVF9MSUJDQUxMX1ZBTFVFIAkJY3IxNl9s aWJjYWxsX3ZhbHVlCisjdW5kZWYgVEFSR0VUX0ZVTkNUSU9OX1ZBTFVFX1JF R05PX1AKKyNkZWZpbmUgVEFSR0VUX0ZVTkNUSU9OX1ZBTFVFX1JFR05PX1Ag CWNyMTZfZnVuY3Rpb25fdmFsdWVfcmVnbm9fcAorCisvKiBwcmludGluZyB0 aGUgdmFsdWVzLiAgKi8KKyN1bmRlZiBUQVJHRVRfUFJJTlRfT1BFUkFORAor I2RlZmluZSBUQVJHRVRfUFJJTlRfT1BFUkFORCAJCWNyMTZfcHJpbnRfb3Bl cmFuZAorI3VuZGVmIFRBUkdFVF9QUklOVF9PUEVSQU5EX0FERFJFU1MKKyNk ZWZpbmUgVEFSR0VUX1BSSU5UX09QRVJBTkRfQUREUkVTUyAJY3IxNl9wcmlu dF9vcGVyYW5kX2FkZHJlc3MKKworLyogUmVsYXRpdmUgY29zdHMgb2Ygb3Bl cmF0aW9ucy4gICovCisjdW5kZWYgIFRBUkdFVF9BRERSRVNTX0NPU1QKKyNk ZWZpbmUgVEFSR0VUX0FERFJFU1NfQ09TVCAJCWNyMTZfYWRkcmVzc19jb3N0 CisjdW5kZWYgVEFSR0VUX1JFR0lTVEVSX01PVkVfQ09TVAorI2RlZmluZSBU QVJHRVRfUkVHSVNURVJfTU9WRV9DT1NUIAljcjE2X3JlZ2lzdGVyX21vdmVf Y29zdAorI3VuZGVmIFRBUkdFVF9NRU1PUllfTU9WRV9DT1NUCisjZGVmaW5l IFRBUkdFVF9NRU1PUllfTU9WRV9DT1NUIAljcjE2X21lbW9yeV9tb3ZlX2Nv c3QKKworLyogVGFibGUgb2YgbWFjaGluZSBhdHRyaWJ1dGVzLiAgKi8KK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX3NwZWMgY3IxNl9hdHRyaWJ1 dGVfdGFibGVbXSA9IHsKKyAgLyogSVNScyBoYXZlIHNwZWNpYWwgcHJvbG9n dWUgYW5kIGVwaWxvZ3VlIHJlcXVpcmVtZW50cy4gICovCisgIC8qIHsgbmFt ZSwgbWluX2xlbiwgbWF4X2xlbiwgZGVjbF9yZXEsIHR5cGVfcmVxLCBmbl90 eXBlX3JlcSwgaGFuZGxlciwKKyAgICAgICBhZmZlY3RzX3R5cGVfaWRlbnRp dHkgfS4gICovCisgIHsiaW50ZXJydXB0IiwgMCwgMCwgZmFsc2UsIHRydWUs IHRydWUsIE5VTEwsIGZhbHNlfSwKKyAge05VTEwsIDAsIDAsIGZhbHNlLCBm YWxzZSwgZmFsc2UsIE5VTEwsIGZhbHNlfQorfTsKKworLyogVEFSR0VUX0FT TV9VTkFMSUdORURfeHhfT1AgZ2VuZXJhdGVzIC4/Ynl0ZSBkaXJlY3RpdmUK KyAgIC4/Ynl0ZSBkaXJlY3RpdmUgYWxvbmcgd2l0aCBAYyBpcyBub3QgdW5k ZXJzdG9vZCBieSBhc3NlbWJsZXIuCisgICBUaGVyZWZvcmUsIG1ha2UgYWxs IFRBUkdFVF9BU01fVU5BTElHTkVEX3h4X09QIHNhbWUKKyAgIGFzIFRBUkdF VF9BU01fQUxJR05FRF94eF9PUC4gICovCisjdW5kZWYgVEFSR0VUX0FTTV9V TkFMSUdORURfSElfT1AKKyNkZWZpbmUgVEFSR0VUX0FTTV9VTkFMSUdORURf SElfT1AgCVRBUkdFVF9BU01fQUxJR05FRF9ISV9PUAorI3VuZGVmIFRBUkdF VF9BU01fVU5BTElHTkVEX1NJX09QCisjZGVmaW5lIFRBUkdFVF9BU01fVU5B TElHTkVEX1NJX09QIAlUQVJHRVRfQVNNX0FMSUdORURfU0lfT1AKKyN1bmRl ZiBUQVJHRVRfQVNNX1VOQUxJR05FRF9ESV9PUAorI2RlZmluZSBUQVJHRVRf QVNNX1VOQUxJR05FRF9ESV9PUCAJVEFSR0VUX0FTTV9BTElHTkVEX0RJX09Q CisKKy8qIFRhcmdldCBob29rIGltcGxlbWVudGF0aW9ucy4gICovCisKKy8q IEltcGxlbWVudHMgaG9vayBUQVJHRVRfUkVUVVJOX0lOX01FTU9SWS4gICov CitzdGF0aWMgYm9vbAorY3IxNl9yZXR1cm5faW5fbWVtb3J5IChjb25zdF90 cmVlIHR5cGUsIGNvbnN0X3RyZWUgZm50eXBlIEFUVFJJQlVURV9VTlVTRUQp Cit7CisgIGNvbnN0IEhPU1RfV0lERV9JTlQgc2l6ZSA9IGludF9zaXplX2lu X2J5dGVzICh0eXBlKTsKKyAgcmV0dXJuICgoc2l6ZSA9PSAtMSkgfHwgKHNp emUgPiA4KSk7Cit9CisKKy8qIEltcGxlbWVudCBUQVJHRVRfQ0xBU1NfTElL RUxZX1NQSUxMRURfUC4gICovCitzdGF0aWMgYm9vbAorY3IxNl9jbGFzc19s aWtlbHlfc3BpbGxlZF9wIChyZWdfY2xhc3NfdCByY2xhc3MpCit7CisgIGlm ICgocmNsYXNzKSA9PSBTSE9SVF9SRUdTIHx8IChyY2xhc3MpID09IERPVUJM RV9CQVNFX1JFR1MgCisgICAgICAgfHwgKHJjbGFzcykgPT0gTE9OR19SRUdT IHx8IChyY2xhc3MpID09IEdFTkVSQUxfUkVHUykKKyAgICByZXR1cm4gdHJ1 ZTsKKworICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbnQKK2NyMTZf cmV0dXJuX3BvcHNfYXJncyAodHJlZSBmdW5kZWNsIEFUVFJJQlVURV9VTlVT RUQsCisgICAgICAgICAgICAgICAgICAgICAgIHRyZWUgZnVudHlwZSBBVFRS SUJVVEVfVU5VU0VELCAKKwkJICAgICAgIGludCBzaXplIEFUVFJJQlVURV9V TlVTRUQpCit7CisgIHJldHVybiAwOworfQorCisvKiBSZXR1cm5zIHRydWUg aWYgZGF0YSBtb2RlbCBzZWxlY3RlZCB2aWEgY29tbWFuZCBsaW5lIG9wdGlv bgorICAgaXMgc2FtZSBhcyBmdW5jdGlvbiBhcmd1bWVudC4gICovCitib29s CitjcjE2X2lzX2RhdGFfbW9kZWwgKGVudW0gZGF0YV9tb2RlbF90eXBlIG1v ZGVsKQoreworICByZXR1cm4gKG1vZGVsID09IGRhdGFfbW9kZWwpOworfQor CisvKiBQYXJzZSByZWxldmFudCBvcHRpb25zIGFuZCBvdmVycmlkZS4gICov CitzdGF0aWMgdm9pZAorY3IxNl9vdmVycmlkZV9vcHRpb25zICh2b2lkKQor eworICAvKiBEaXNhYmxlIC1mZGVsZXRlLW51bGwtcG9pbnRlci1jaGVja3Mg b3B0aW9uIGZvciBDUjE2IHRhcmdldC4KKyAgICAgUHJvZ3JhbXMgd2hpY2gg cmVseSBvbiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIF9ub3RfIGhhbHRp bmcgdGhlIAorICAgICBwcm9ncmFtIG1heSBub3Qgd29yayBwcm9wZXJseSB3 aXRoIHRoaXMgb3B0aW9uLiBTbyBkaXNhYmxlIHRoaXMgCisgICAgIG9wdGlv bi4gICovCisgIGZsYWdfZGVsZXRlX251bGxfcG9pbnRlcl9jaGVja3MgPSAw OworCisgIC8qIElmIC1mcGljIG9wdGlvbiwgZGF0YV9tb2RlbCA9PSBETV9G QVIuICAqLworICBpZiAoZmxhZ19waWMgPT0gTkVBUl9QSUMpCisgICAgewor ICAgICAgZGF0YV9tb2RlbCA9IERNX0ZBUjsKKyAgICB9CisKKyAgLyogVGhl IG9ubHkgb3B0aW9uIHdlIHdhbnQgdG8gZXhhbWluZSBpcyBkYXRhIG1vZGVs IG9wdGlvbi4gICovCisgIGlmIChjcjE2X2RhdGFfbW9kZWwpCisgICAgewor ICAgICAgaWYgKHN0cmNtcCAoY3IxNl9kYXRhX21vZGVsLCAibWVkaXVtIikg PT0gMCkKKwlkYXRhX21vZGVsID0gRE1fREVGQVVMVDsKKyAgICAgIGVsc2Ug aWYgKHN0cmNtcCAoY3IxNl9kYXRhX21vZGVsLCAibmVhciIpID09IDApCisJ ZGF0YV9tb2RlbCA9IERNX05FQVI7CisgICAgICBlbHNlIGlmIChzdHJjbXAg KGNyMTZfZGF0YV9tb2RlbCwgImZhciIpID09IDApCisJeworCSAgaWYgKFRB UkdFVF9DUjE2Q1ApCisJICAgIGRhdGFfbW9kZWwgPSBETV9GQVI7CisJICBl bHNlCisJICAgIGVycm9yICgiZGF0YS1tb2RlbD1mYXIgbm90IHZhbGlkIGZv ciBjcjE2YyBhcmNoaXRlY3R1cmUiKTsKKwl9CisgICAgICBlbHNlCisJZXJy b3IgKCJpbnZhbGlkIGRhdGEgbW9kZWwgb3B0aW9uIC1tZGF0YS1tb2RlbD0l cyIsIGNyMTZfZGF0YV9tb2RlbCk7CisgICAgfQorICBlbHNlCisgICAgZGF0 YV9tb2RlbCA9IERNX0RFRkFVTFQ7Cit9CisKKy8qIEltcGxlbWVudHMgdGhl IG1hY3JvICBUQVJHRVRfQ09ORElUSU9OQUxfUkVHSVNURVJfVVNBR0UuICAq Lworc3RhdGljIHZvaWQKK2NyMTZfY29uZGl0aW9uYWxfcmVnaXN0ZXJfdXNh Z2UgKHZvaWQpCit7CisgIGlmIChmbGFnX3BpYykKKyAgICB7CisgICAgICBm aXhlZF9yZWdzWzEyXSA9IGNhbGxfdXNlZF9yZWdzWzEyXSA9IDE7CisgICAg fQorfQorCisvKiBTdGFjayBsYXlvdXQgYW5kIGNhbGxpbmcgY29udmVudGlv bnMgcm91dGluZXMuICAqLworCisvKiBSZXR1cm4gbm9uemVybyBpZiB0aGUg Y3VycmVudCBmdW5jdGlvbiBiZWluZyBjb21waWxlZCBpcyBhbiBpbnRlcnJ1 cHQKKyAgIGZ1bmN0aW9uIGFzIHNwZWNpZmllZCBieSB0aGUgImludGVycnVw dCIgYXR0cmlidXRlLiAgKi8KK2ludAorY3IxNl9pbnRlcnJ1cHRfZnVuY3Rp b25fcCAodm9pZCkKK3sKKyAgdHJlZSBhdHRyaWJ1dGVzOworCisgIGF0dHJp YnV0ZXMgPSBUWVBFX0FUVFJJQlVURVMgKFRSRUVfVFlQRSAoY3VycmVudF9m dW5jdGlvbl9kZWNsKSk7CisgIHJldHVybiAobG9va3VwX2F0dHJpYnV0ZSAo ImludGVycnVwdCIsIGF0dHJpYnV0ZXMpICE9IE5VTExfVFJFRSk7Cit9CisK Ky8qIENvbXB1dGUgdmFsdWVzIGZvciB0aGUgYXJyYXkgY3VycmVudF9mcmFt ZV9pbmZvLnNhdmVfcmVncyBhbmQgdGhlIHZhcmlhYmxlIAorICAgY3VycmVu dF9mcmFtZV9pbmZvLnJlZ19zaXplLiBUaGUgaW5kZXggb2YgY3VycmVudF9m cmFtZV9pbmZvLnNhdmVfcmVncyAKKyAgIGlzIG51bWJlcnMgb2YgcmVnaXN0 ZXIsIGVhY2ggd2lsbCBnZXQgMSBpZiB3ZSBuZWVkIHRvIHNhdmUgaXQgaW4g dGhlIAorICAgY3VycmVudCBmdW5jdGlvbiwgMCBpZiBub3QuIGN1cnJlbnRf ZnJhbWVfaW5mby5yZWdfc2l6ZSBpcyB0aGUgdG90YWwgc3VtIAorICAgb2Yg dGhlIHJlZ2lzdGVycyBiZWluZyBzYXZlZC4gICovCitzdGF0aWMgdm9pZAor Y3IxNl9jb21wdXRlX3NhdmVfcmVncyAodm9pZCkKK3sKKyAgdW5zaWduZWQg aW50IHJlZ25vOworCisgIC8qIEluaXRpYWxpemUgaGVyZSBzbyBpbiBjYXNl IHRoZSBmdW5jdGlvbiBpcyBuby1yZXR1cm4gaXQgd2lsbCBiZSAtMS4gICov CisgIGN1cnJlbnRfZnJhbWVfaW5mby5sYXN0X3JlZ190b19zYXZlID0gLTE7 CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGJl IHNhdmVkLiAqLworICBjdXJyZW50X2ZyYW1lX2luZm8ucmVnX3NpemUgPSAw OworCisgIC8qIE5vIG5lZWQgdG8gc2F2ZSBhbnkgcmVnaXN0ZXJzIGlmIHRo ZSBmdW5jdGlvbiBuZXZlciByZXR1cm5zLiAgKi8KKyAgaWYgKEZVTkNfSVNf Tk9SRVRVUk5fUCAoY3VycmVudF9mdW5jdGlvbl9kZWNsKSAmJiAhTVVTVF9T QVZFX1JFR1NfUCAoKSkKKyAgICByZXR1cm47CisKKyAgZm9yIChyZWdubyA9 IDA7IHJlZ25vIDwgRklSU1RfUFNFVURPX1JFR0lTVEVSOyByZWdubysrKQor ICAgIHsKKyAgICAgIGlmIChmaXhlZF9yZWdzW3JlZ25vXSkKKwl7CisJICBj dXJyZW50X2ZyYW1lX2luZm8uc2F2ZV9yZWdzW3JlZ25vXSA9IDA7CisJICBj b250aW51ZTsKKwl9CisKKyAgICAgIC8qIElmIHRoaXMgcmVnIGlzIHVzZWQg YW5kIG5vdCBjYWxsLXVzZWQgKGV4Y2VwdCBSQSksIHNhdmUgaXQuICAqLwor ICAgICAgaWYgKGNyMTZfaW50ZXJydXB0X2Z1bmN0aW9uX3AgKCkpCisJewor CSAgaWYgKCFjdXJyZW50X2Z1bmN0aW9uX2lzX2xlYWYgJiYgY2FsbF91c2Vk X3JlZ3NbcmVnbm9dKQorCSAgICAvKiBUaGlzIGlzIGEgdm9sYXRpbGUgcmVn IGluIGEgbm9uLWxlYWYgaW50ZXJydXB0IHJvdXRpbmUgLSBzYXZlIAorCSAg ICAgICBpdCBmb3IgdGhlIHNha2Ugb2YgaXRzIHNvbnMuICAqLworCSAgICBj dXJyZW50X2ZyYW1lX2luZm8uc2F2ZV9yZWdzW3JlZ25vXSA9IDE7CisJICBl bHNlIGlmIChkZl9yZWdzX2V2ZXJfbGl2ZV9wIChyZWdubykpCisJICAgIC8q IFRoaXMgcmVnIGlzIHVzZWQgLSBzYXZlIGl0LiAgKi8KKwkgICAgY3VycmVu dF9mcmFtZV9pbmZvLnNhdmVfcmVnc1tyZWdub10gPSAxOworCSAgZWxzZQor CSAgICAvKiBUaGlzIHJlZyBpcyBub3QgdXNlZCwgYW5kIGlzIG5vdCBhIHZv bGF0aWxlIC0gZG9uJ3Qgc2F2ZS4gICovCisJICAgIGN1cnJlbnRfZnJhbWVf aW5mby5zYXZlX3JlZ3NbcmVnbm9dID0gMDsKKwl9CisgICAgICBlbHNlCisJ eworCSAgLyogSWYgdGhpcyByZWcgaXMgdXNlZCBhbmQgbm90IGNhbGwtdXNl ZCAoZXhjZXB0IFJBKSwgc2F2ZSBpdC4gICovCisJICBpZiAoZGZfcmVnc19l dmVyX2xpdmVfcCAocmVnbm8pCisJICAgICAgJiYgKCFjYWxsX3VzZWRfcmVn c1tyZWdub10gfHwgcmVnbm8gPT0gUkVUVVJOX0FERFJFU1NfUkVHTlVNKSkK KwkgICAgY3VycmVudF9mcmFtZV9pbmZvLnNhdmVfcmVnc1tyZWdub10gPSAx OworCSAgZWxzZQorCSAgICBjdXJyZW50X2ZyYW1lX2luZm8uc2F2ZV9yZWdz W3JlZ25vXSA9IDA7CisJfQorICAgIH0KKworICAvKiBTYXZlIHJlZ2lzdGVy cyBzbyB0aGUgZXhjZXB0aW9uIGhhbmRsZXIgY2FuIG1vZGlmeSB0aGVtLiAg Ki8KKyAgaWYgKGNydGwtPmNhbGxzX2VoX3JldHVybikKKyAgICB7CisgICAg ICB1bnNpZ25lZCBpbnQgaTsKKworICAgICAgZm9yIChpID0gMDs7ICsraSkK Kwl7CisJICByZWdubyA9IEVIX1JFVFVSTl9EQVRBX1JFR05PIChpKTsKKwkg IGlmIChJTlZBTElEX1JFR05VTSA9PSByZWdubykKKwkgICAgYnJlYWs7CisJ ICBjdXJyZW50X2ZyYW1lX2luZm8uc2F2ZV9yZWdzW3JlZ25vXSA9IDE7CisJ fQorICAgIH0KKworICBmb3IgKHJlZ25vID0gMDsgcmVnbm8gPCBGSVJTVF9Q U0VVRE9fUkVHSVNURVI7IHJlZ25vKyspCisgICAgaWYgKGN1cnJlbnRfZnJh bWVfaW5mby5zYXZlX3JlZ3NbcmVnbm9dID09IDEpCisgICAgICB7CisJY3Vy cmVudF9mcmFtZV9pbmZvLmxhc3RfcmVnX3RvX3NhdmUgPSByZWdubzsKKwlp ZiAocmVnbm8gPj0gQ1IxNl9GSVJTVF9EV09SRF9SRUdJU1RFUikKKwkgIGN1 cnJlbnRfZnJhbWVfaW5mby5yZWdfc2l6ZSArPSBDUjE2X1VOSVRTX1BFUl9E V09SRDsKKwllbHNlCisJICBjdXJyZW50X2ZyYW1lX2luZm8ucmVnX3NpemUg Kz0gVU5JVFNfUEVSX1dPUkQ7CisgICAgICB9Cit9CisKKy8qIENvbXB1dGUg dGhlIHNpemUgb2YgdGhlIGxvY2FsIGFyZWEgYW5kIHRoZSBzaXplIHRvIGJl IGFkanVzdGVkIGJ5IHRoZQorICAgcHJvbG9ndWUgYW5kIGVwaWxvZ3VlLiAg Ki8KK3N0YXRpYyB2b2lkCitjcjE2X2NvbXB1dGVfZnJhbWUgKHZvaWQpCit7 CisgIC8qIEZvciBhbGlnbmluZyB0aGUgbG9jYWwgdmFyaWFibGVzLiAgKi8K KyAgaW50IHN0YWNrX2FsaWdubWVudCA9IFNUQUNLX0JPVU5EQVJZIC8gQklU U19QRVJfVU5JVDsKKyAgaW50IHBhZGRpbmdfbG9jYWxzOworCisgIC8qIFBh ZGRpbmcgbmVlZGVkIGZvciBlYWNoIGVsZW1lbnQgb2YgdGhlIGZyYW1lLiAg Ki8KKyAgY3VycmVudF9mcmFtZV9pbmZvLnZhcl9zaXplID0gZ2V0X2ZyYW1l X3NpemUgKCk7CisKKyAgLyogQWxpZ24gdG8gdGhlIHN0YWNrIGFsaWdubWVu dC4gICovCisgIHBhZGRpbmdfbG9jYWxzID0gY3VycmVudF9mcmFtZV9pbmZv LnZhcl9zaXplICUgc3RhY2tfYWxpZ25tZW50OworICBpZiAocGFkZGluZ19s b2NhbHMpCisgICAgcGFkZGluZ19sb2NhbHMgPSBzdGFja19hbGlnbm1lbnQg LSBwYWRkaW5nX2xvY2FsczsKKworICBjdXJyZW50X2ZyYW1lX2luZm8udmFy X3NpemUgKz0gcGFkZGluZ19sb2NhbHM7CisgIGN1cnJlbnRfZnJhbWVfaW5m by50b3RhbF9zaXplID0gY3VycmVudF9mcmFtZV9pbmZvLnZhcl9zaXplIAor CQkJICAgICAgICAgICsgKEFDQ1VNVUxBVEVfT1VUR09JTkdfQVJHUworCQkJ ICAgICAgICAgICAgID8gY3J0bC0+b3V0Z29pbmdfYXJnc19zaXplIDogMCk7 Cit9CisKKy8qIEltcGxlbWVudHMgdGhlIG1hY3JvIElOSVRJQUxfRUxJTUlO QVRJT05fT0ZGU0VULCByZXR1cm4gdGhlIE9GRlNFVC4gICovCitpbnQKK2Ny MTZfaW5pdGlhbF9lbGltaW5hdGlvbl9vZmZzZXQgKGludCBmcm9tLCBpbnQg dG8pCit7CisgIC8qIENvbXB1dGUgdGhpcyBzaW5jZSB3ZSBuZWVkIHRvIHVz ZSBjdXJyZW50X2ZyYW1lX2luZm8ucmVnX3NpemUuICAqLworICBjcjE2X2Nv bXB1dGVfc2F2ZV9yZWdzICgpOworCisgIC8qIENvbXB1dGUgdGhpcyBzaW5j ZSB3ZSBuZWVkIHRvIHVzZSBjdXJyZW50X2ZyYW1lX2luZm8udmFyX3NpemUu ICAqLworICBjcjE2X2NvbXB1dGVfZnJhbWUgKCk7CisKKyAgaWYgKCgoZnJv bSkgPT0gRlJBTUVfUE9JTlRFUl9SRUdOVU0pICYmICgodG8pID09IFNUQUNL X1BPSU5URVJfUkVHTlVNKSkKKyAgICByZXR1cm4gKEFDQ1VNVUxBVEVfT1VU R09JTkdfQVJHUyA/IGNydGwtPm91dGdvaW5nX2FyZ3Nfc2l6ZSA6IDApOwor ICBlbHNlIGlmICgoKGZyb20pID09IEFSR19QT0lOVEVSX1JFR05VTSkgJiYg KCh0bykgPT0gRlJBTUVfUE9JTlRFUl9SRUdOVU0pKQorICAgIHJldHVybiAo Y3VycmVudF9mcmFtZV9pbmZvLnJlZ19zaXplICsgY3VycmVudF9mcmFtZV9p bmZvLnZhcl9zaXplKTsKKyAgZWxzZSBpZiAoKChmcm9tKSA9PSBBUkdfUE9J TlRFUl9SRUdOVU0pICYmICgodG8pID09IFNUQUNLX1BPSU5URVJfUkVHTlVN KSkKKyAgICByZXR1cm4gKGN1cnJlbnRfZnJhbWVfaW5mby5yZWdfc2l6ZSAr IGN1cnJlbnRfZnJhbWVfaW5mby52YXJfc2l6ZSAKKwkgICAgKyAoQUNDVU1V TEFURV9PVVRHT0lOR19BUkdTID8gY3J0bC0+b3V0Z29pbmdfYXJnc19zaXpl IDogMCkpOworICBlbHNlCisgICAgZ2NjX3VucmVhY2hhYmxlICgpOworfQor CisvKiBSZWdpc3RlciBVc2FnZS4gICovCisKKy8qIFJldHVybiB0aGUgY2xh c3MgbnVtYmVyIG9mIHRoZSBzbWFsbGVzdCBjbGFzcyBjb250YWluaW5nIHJl ZyBudW1iZXIgUkVHTk8uCisgICBUaGlzIGNvdWxkIGJlIGEgY29uZGl0aW9u YWwgZXhwcmVzc2lvbiBvciBjb3VsZCBpbmRleCBhbiBhcnJheS4gICovCitl bnVtIHJlZ19jbGFzcworY3IxNl9yZWdub19yZWdfY2xhc3MgKGludCByZWdu bykKK3sKKyAgaWYgKChyZWdubyA+PSAwKSAmJiAocmVnbm8gPCBDUjE2X0ZJ UlNUX0RXT1JEX1JFR0lTVEVSKSkKKyAgICByZXR1cm4gU0hPUlRfUkVHUzsK KworICBpZiAoKHJlZ25vID49IENSMTZfRklSU1RfRFdPUkRfUkVHSVNURVIp ICYmIChyZWdubyA8IEZJUlNUX1BTRVVET19SRUdJU1RFUikpCisgICAgcmV0 dXJuIExPTkdfUkVHUzsKKworICByZXR1cm4gTk9fUkVHUzsKK30KKworLyog UmV0dXJuIDEgaWYgaGFyZCByZWdpc3RlciBSRUdOTyBjYW4gaG9sZCBhIHZh bHVlIG9mIG1hY2hpbmUtbW9kZSBNT0RFLiAgKi8KK2ludAorY3IxNl9oYXJk X3JlZ25vX21vZGVfb2sgKGludCByZWdubywgZW51bSBtYWNoaW5lX21vZGUg bW9kZSkKK3sKKyAgaWYgKChHRVRfTU9ERV9TSVpFIChtb2RlKSA+PSA0KSAm JiAocmVnbm8gPT0gMTEpKQorICAgIHJldHVybiAwOworIAorICBpZiAobW9k ZSA9PSBESW1vZGUgfHwgbW9kZSA9PSBERm1vZGUpCisgICAgeworICAgICAg aWYgKChyZWdubyA+IDgpIHx8IChyZWdubyAmIDEpKQorCXJldHVybiAwOwor ICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgIGlmICgoVEFSR0VUX0lOVDMy KQorICAgICAgICYmICgocmVnbm8gPj0gMTIpICYmIChHRVRfTU9ERV9TSVpF IChtb2RlKSA8IDQgKSkpCisgICAgIHJldHVybiAwOworCisgIC8qIENDIGNh biBvbmx5IGhvbGQgQ0Ntb2RlIHZhbHVlcy4gICovCisgIGlmIChHRVRfTU9E RV9DTEFTUyAobW9kZSkgPT0gTU9ERV9DQykKKyAgICByZXR1cm4gMDsKKyAg cmV0dXJuIDE7Cit9CisKKy8qIFJldHVybnMgcmVnaXN0ZXIgbnVtYmVyIGZv ciBmdW5jdGlvbiByZXR1cm4gdmFsdWUuKi8KK3N0YXRpYyBpbmxpbmUgdW5z aWduZWQgaW50CitjcjE2X3JldF9yZWdpc3RlciAodm9pZCkKK3sKKyAgcmV0 dXJuIDA7Cit9CisKKy8qIEltcGxlbWVudHMgaG9vayBUQVJHRVRfU1RSVUNU X1ZBTFVFX1JUWC4gICovCitzdGF0aWMgcnR4CitjcjE2X3N0cnVjdF92YWx1 ZV9ydHggKHRyZWUgZm50eXBlIEFUVFJJQlVURV9VTlVTRUQsCisgICAgICAg ICAgICAgICAgICAgICAgIGludCBpbmNvbWluZyBBVFRSSUJVVEVfVU5VU0VE KQoreworICByZXR1cm4gZ2VuX3J0eF9SRUcgKFBtb2RlLCBjcjE2X3JldF9y ZWdpc3RlciAoKSk7Cit9CisKKy8qIFJldHVybmluZyBmdW5jdGlvbiB2YWx1 ZS4gICovCisKKy8qIFdvcmtlciBmdW5jdGlvbiBmb3IgVEFSR0VUX0ZVTkNU SU9OX1ZBTFVFX1JFR05PX1AuICAqLworc3RhdGljIGJvb2wKK2NyMTZfZnVu Y3Rpb25fdmFsdWVfcmVnbm9fcCAoY29uc3QgdW5zaWduZWQgaW50IHJlZ25v KQoreworICByZXR1cm4gKHJlZ25vID09IGNyMTZfcmV0X3JlZ2lzdGVyICgp KTsKK30KKworLyogQ3JlYXRlIGFuIFJUWCByZXByZXNlbnRpbmcgdGhlIHBs YWNlIHdoZXJlIGEKKyAgIGxpYnJhcnkgZnVuY3Rpb24gcmV0dXJucyBhIHZh bHVlIG9mIG1vZGUgTU9ERS4gICovCitzdGF0aWMgcnR4CitjcjE2X2xpYmNh bGxfdmFsdWUgKGVudW0gbWFjaGluZV9tb2RlIG1vZGUsCisJCSAgICBjb25z dF9ydHggZnVuYyBBVFRSSUJVVEVfVU5VU0VEKQoreworICByZXR1cm4gZ2Vu X3J0eF9SRUcgKG1vZGUsIGNyMTZfcmV0X3JlZ2lzdGVyICgpKTsKK30KKwor LyogQ3JlYXRlIGFuIFJUWCByZXByZXNlbnRpbmcgdGhlIHBsYWNlIHdoZXJl IGEKKyAgIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSBvZiBkYXRhIHR5cGUg VkFMVFlQRS4gICovCitzdGF0aWMgcnR4CitjcjE2X2Z1bmN0aW9uX3ZhbHVl IChjb25zdF90cmVlIHR5cGUsCisJCSAgICAgY29uc3RfdHJlZSBmbl9kZWNs X29yX3R5cGUgQVRUUklCVVRFX1VOVVNFRCwKKwkJICAgICBib29sIG91dGdv aW5nIEFUVFJJQlVURV9VTlVTRUQpCit7CisgIHJldHVybiBnZW5fcnR4X1JF RyAoVFlQRV9NT0RFICh0eXBlKSwgY3IxNl9yZXRfcmVnaXN0ZXIgKCkpOwor fQorCisvKiBQYXNzaW5nIGZ1bmN0aW9uIGFyZ3VtZW50cy4gICovCisKKy8q IElmIGVub3VnaCBwYXJhbSByZWdzIGFyZSBhdmFpbGFibGUgZm9yIHBhc3Np bmcgdGhlIHBhcmFtIG9mIHR5cGUgVFlQRSByZXR1cm4KKyAgIHRoZSBudW1i ZXIgb2YgcmVnaXN0ZXJzIG5lZWRlZCBlbHNlIDAuICAqLworc3RhdGljIGlu dAorZW5vdWdoX3JlZ3NfZm9yX3BhcmFtIChDVU1VTEFUSVZFX0FSR1MgKiBj dW0sIGNvbnN0X3RyZWUgdHlwZSwKKwkJICAgICAgIGVudW0gbWFjaGluZV9t b2RlIG1vZGUpCit7CisgIGludCB0eXBlX3NpemU7CisgIGludCByZW1haW5p bmdfc2l6ZTsKKworICBpZiAobW9kZSAhPSBCTEttb2RlKQorICAgIHR5cGVf c2l6ZSA9IEdFVF9NT0RFX0JJVFNJWkUgKG1vZGUpOworICBlbHNlCisgICAg dHlwZV9zaXplID0gaW50X3NpemVfaW5fYnl0ZXMgKHR5cGUpICogQklUU19Q RVJfVU5JVDsKKworICByZW1haW5pbmdfc2l6ZSA9IEJJVFNfUEVSX1dPUkQg KiAoTUFYX1JFR19GT1JfUEFTU0lOR19BUkdTCisJCQkJICAgIC0gKE1JTl9S RUdfRk9SX1BBU1NJTkdfQVJHUyArIGN1bS0+aW50cykgKworCQkJCSAgICAx KTsKKworICAvKiBBbnkgdmFyaWFibGUgd2hpY2ggaXMgdG9vIGJpZyB0byBw YXNzIGluIHR3byByZWdpc3RlcnMsIHdpbGwgcGFzcyBvbgorICAgICBzdGFj ay4gICovCisgIGlmICgocmVtYWluaW5nX3NpemUgPj0gdHlwZV9zaXplKSAm JiAodHlwZV9zaXplIDw9IDIgKiBCSVRTX1BFUl9XT1JEKSkKKyAgICByZXR1 cm4gKHR5cGVfc2l6ZSArIEJJVFNfUEVSX1dPUkQgLSAxKSAvIEJJVFNfUEVS X1dPUkQ7CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qIEltcGxlbWVudHMgdGhl IG1hY3JvIEZVTkNUSU9OX0FSRyBkZWZpbmVkIGluIGNyMTYuaC4gICovCitz dGF0aWMgcnR4CitjcjE2X2Z1bmN0aW9uX2FyZyAoY3VtdWxhdGl2ZV9hcmdz X3QgY3VtX3YsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsCisJCSAgIGNvbnN0 X3RyZWUgdHlwZSwgYm9vbCBuYW1lZCBBVFRSSUJVVEVfVU5VU0VEKQorewor ICBDVU1VTEFUSVZFX0FSR1MgKmN1bSA9IGdldF9jdW11bGF0aXZlX2FyZ3Mg KGN1bV92KTsKKyAgY3VtLT5sYXN0X3Bhcm1faW5fcmVnID0gMDsKKworICAv KiBmdW5jdGlvbl9hcmcgKCkgaXMgY2FsbGVkIHdpdGggdGhpcyB0eXBlIGp1 c3QgYWZ0ZXIgYWxsIHRoZSBhcmdzIGhhdmUgCisgICAgIGhhZCB0aGVpciBy ZWdpc3RlcnMgYXNzaWduZWQuIFRoZSBydHggdGhhdCBmdW5jdGlvbl9hcmcg cmV0dXJucyBmcm9tIAorICAgICB0aGlzIHR5cGUgaXMgc3VwcG9zZWQgdG8g cGFzcyB0byAnZ2VuX2NhbGwnIGJ1dCBjdXJyZW50bHkgaXQgaXMgbm90IAor ICAgICBpbXBsZW1lbnRlZCAoc2VlIG1hY3JvIEdFTl9DQUxMKS4gICovCisg IGlmICh0eXBlID09IHZvaWRfdHlwZV9ub2RlKQorICAgIHJldHVybiBOVUxM X1JUWDsKKworICBpZiAodGFyZ2V0bS5jYWxscy5tdXN0X3Bhc3NfaW5fc3Rh Y2sgKG1vZGUsIHR5cGUpIHx8IChjdW0tPmludHMgPCAwKSkKKyAgICByZXR1 cm4gTlVMTF9SVFg7CisKKyAgaWYgKG1vZGUgPT0gQkxLbW9kZSkKKyAgICB7 CisgICAgICAvKiBFbmFibGUgc3RydWN0dXJlcyB0aGF0IG5lZWQgcGFkZGlu ZyBieXRlcyBhdCB0aGUgZW5kIHRvIHBhc3MgdG8gYQorICAgICAgICAgZnVu Y3Rpb24gaW4gcmVnaXN0ZXJzLiAgKi8KKyAgICAgIGlmIChlbm91Z2hfcmVn c19mb3JfcGFyYW0gKGN1bSwgdHlwZSwgbW9kZSkgIT0gMCkKKwl7CisJICBj dW0tPmxhc3RfcGFybV9pbl9yZWcgPSAxOworCSAgcmV0dXJuIGdlbl9ydHhf UkVHIChtb2RlLCBNSU5fUkVHX0ZPUl9QQVNTSU5HX0FSR1MgKyBjdW0tPmlu dHMpOworCX0KKyAgICB9CisKKyAgaWYgKChNSU5fUkVHX0ZPUl9QQVNTSU5H X0FSR1MgKyBjdW0tPmludHMpID4gTUFYX1JFR19GT1JfUEFTU0lOR19BUkdT KQorICAgIHJldHVybiBOVUxMX1JUWDsKKyAgZWxzZQorICAgIHsKKyAgICAg IGlmIChlbm91Z2hfcmVnc19mb3JfcGFyYW0gKGN1bSwgdHlwZSwgbW9kZSkg IT0gMCkKKwl7CisJICBjdW0tPmxhc3RfcGFybV9pbl9yZWcgPSAxOworCSAg cmV0dXJuIGdlbl9ydHhfUkVHIChtb2RlLCBNSU5fUkVHX0ZPUl9QQVNTSU5H X0FSR1MgKyBjdW0tPmludHMpOworCX0KKyAgICB9CisKKyAgcmV0dXJuIE5V TExfUlRYOworfQorCisvKiBJbXBsZW1lbnRzIHRoZSBtYWNybyBJTklUX0NV TVVMQVRJVkVfQVJHUyBkZWZpbmVkIGluIGNyMTYuaC4gICovCit2b2lkCitj cjE2X2luaXRfY3VtdWxhdGl2ZV9hcmdzIChDVU1VTEFUSVZFX0FSR1MgKiBj dW0sIHRyZWUgZm50eXBlLAorCQkJICAgcnR4IGxpYmZ1bmMgQVRUUklCVVRF X1VOVVNFRCkKK3sKKyAgdHJlZSBwYXJhbSwgbmV4dF9wYXJhbTsKKworICBj dW0tPmludHMgPSAwOworCisgIC8qIERldGVybWluZSBpZiB0aGlzIGZ1bmN0 aW9uIGhhcyB2YXJpYWJsZSBhcmd1bWVudHMuICBUaGlzIGlzIGluZGljYXRl ZCBieQorICAgICB0aGUgbGFzdCBhcmd1bWVudCBiZWluZyAndm9pZF90eXBl X21vZGUnIGlmIHRoZXJlIGFyZSBubyB2YXJpYWJsZQorICAgICBhcmd1bWVu dHMuICBDaGFuZ2UgaGVyZSBmb3IgYSBkaWZmZXJlbnQgdmFyYXJnLiAgKi8K KyAgZm9yIChwYXJhbSA9IChmbnR5cGUpID8gVFlQRV9BUkdfVFlQRVMgKGZu dHlwZSkgOiAwOworICAgICAgIHBhcmFtICE9IE5VTExfVFJFRTsgcGFyYW0g PSBuZXh0X3BhcmFtKQorICAgIHsKKyAgICAgIG5leHRfcGFyYW0gPSBUUkVF X0NIQUlOIChwYXJhbSk7CisgICAgICBpZiAoKG5leHRfcGFyYW0gPT0gTlVM TF9UUkVFKSAmJiAoVFJFRV9WQUxVRSAocGFyYW0pICE9IHZvaWRfdHlwZV9u b2RlKSkKKwl7CisJICBjdW0tPmludHMgPSAtMTsKKwkgIHJldHVybjsKKwl9 CisgICAgfQorfQorCisvKiBJbXBsZW1lbnRzIHRoZSBtYWNybyBGVU5DVElP Tl9BUkdfQURWQU5DRSBkZWZpbmVkIGluIGNyMTYuaC4gICovCitzdGF0aWMg dm9pZAorY3IxNl9mdW5jdGlvbl9hcmdfYWR2YW5jZSAoY3VtdWxhdGl2ZV9h cmdzX3QgY3VtX3YsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsCisJCQkgICBj b25zdF90cmVlIHR5cGUsIGJvb2wgbmFtZWQgQVRUUklCVVRFX1VOVVNFRCkK K3sKKyAgQ1VNVUxBVElWRV9BUkdTICogY3VtID0gZ2V0X2N1bXVsYXRpdmVf YXJncyAoY3VtX3YpOworCisgIC8qIGwgaG9sZHMgdGhlIG51bWJlciBvZiBy ZWdpc3RlcnMgcmVxdWlyZWQuICAqLworICBpbnQgbCA9IEdFVF9NT0RFX0JJ VFNJWkUgKG1vZGUpIC8gQklUU19QRVJfV09SRDsKKworICAvKiBJZiB0aGUg cGFyYW1ldGVyIGlzbid0IHBhc3NlZCBvbiBhIHJlZ2lzdGVyIGRvbid0IGFk dmFuY2UgY3VtLiAgKi8KKyAgaWYgKCFjdW0tPmxhc3RfcGFybV9pbl9yZWcp CisgICAgcmV0dXJuOworCisgIGlmICh0YXJnZXRtLmNhbGxzLm11c3RfcGFz c19pbl9zdGFjayAobW9kZSwgdHlwZSkgfHwgKGN1bS0+aW50cyA8IDApKQor ICAgIHJldHVybjsKKworICBpZiAoKG1vZGUgPT0gU0ltb2RlKSB8fCAobW9k ZSA9PSBISW1vZGUpCisgICAgICB8fCAobW9kZSA9PSBRSW1vZGUpIHx8ICht b2RlID09IERJbW9kZSkpCisgICAgeworICAgICAgaWYgKGwgPD0gMSkKKwlj dW0tPmludHMgKz0gMTsKKyAgICAgIGVsc2UKKwljdW0tPmludHMgKz0gbDsK KyAgICB9CisgIGVsc2UgaWYgKChtb2RlID09IFNGbW9kZSkgfHwgKG1vZGUg PT0gREZtb2RlKSkKKyAgICBjdW0tPmludHMgKz0gbDsKKyAgZWxzZSBpZiAo KG1vZGUpID09IEJMS21vZGUpCisgICAgeworICAgICAgaWYgKChsID0gZW5v dWdoX3JlZ3NfZm9yX3BhcmFtIChjdW0sIHR5cGUsIG1vZGUpKSAhPSAwKQor CWN1bS0+aW50cyArPSBsOworICAgIH0KKyAgcmV0dXJuOworfQorCisvKiBJ bXBsZW1lbnRzIHRoZSBtYWNybyBGVU5DVElPTl9BUkdfUkVHTk9fUCBkZWZp bmVkIGluIGNyMTYuaC4KKyAgIFJldHVybiBub256ZXJvIGlmIE4gaXMgYSBy ZWdpc3RlciB1c2VkIGZvciBwYXNzaW5nIHBhcmFtZXRlcnMuICAqLworaW50 CitjcjE2X2Z1bmN0aW9uX2FyZ19yZWdub19wIChpbnQgbikKK3sKKyAgcmV0 dXJuICgobiA8PSBNQVhfUkVHX0ZPUl9QQVNTSU5HX0FSR1MpICYmIChuID49 IE1JTl9SRUdfRk9SX1BBU1NJTkdfQVJHUykpOworfQorCisvKiBBZGRyZXNz aW5nIG1vZGVzLiAKKyAgIEZvbGxvd2luZyBzZXQgb2YgZnVuY3Rpb24gaW1w bGVtZW50IHRoZSBtYWNybyBHT19JRl9MRUdJVElNQVRFX0FERFJFU1MKKyAg IGRlZmluZWQgaW4gY3IxNi5oLiAgKi8KKworLyogSGVscGVyIGZ1bmN0aW9u IHRvIGNoZWNrIGlmIGlzIGEgdmFsaWQgYmFzZSByZWdpc3RlciB0aGF0IGNh bgorICAgaG9sZCBhZGRyZXNzLiAgKi8KK3N0YXRpYyBpbnQKK2NyMTZfYWRk cl9yZWdfcCAocnR4IGFkZHJfcmVnKQoreworICBydHggcmVnOworCisgIGlm IChSRUdfUCAoYWRkcl9yZWcpKQorICAgIHJlZyA9IGFkZHJfcmVnOworICBl bHNlIGlmICgoR0VUX0NPREUgKGFkZHJfcmVnKSA9PSBTVUJSRUcpCisJICAg JiYgUkVHX1AgKFNVQlJFR19SRUcgKGFkZHJfcmVnKSkKKwkgICAmJiAoR0VU X01PREVfU0laRSAoR0VUX01PREUgKFNVQlJFR19SRUcgKGFkZHJfcmVnKSkp CisJICAgICAgIDw9IFVOSVRTX1BFUl9XT1JEKSkKKyAgICByZWcgPSBTVUJS RUdfUkVHIChhZGRyX3JlZyk7CisgIGVsc2UKKyAgICByZXR1cm4gRkFMU0U7 CisKKyAgaWYgKEdFVF9NT0RFIChyZWcpICE9IFBtb2RlKQorICAgIHJldHVy biBGQUxTRTsKKworICByZXR1cm4gVFJVRTsKK30KKworLyogSGVscGVyIGZ1 bmN0aW9uczogQ3JlYXRlZCBzcGVjaWZpY2FsbHkgZm9yIGRlY29tcG9zaW5n IG9wZXJhbmQgb2YgQ09OU1QKKyAgIFJlY3Vyc2l2ZWx5IGxvb2sgaW50byBl eHByZXNzaW9uIHggZm9yIGNvZGUgb3IgZGF0YSBzeW1ib2wuCisgICBUaGUg ZnVuY3Rpb24gZXhwZWN0cyB0aGUgZXhwcmVzc2lvbiB0byBjb250YWluIGNv bWJpbmF0aW9uIG9mIAorICAgU1lNQk9MX1JFRiwgQ09OU1RfSU5ULCAoUExV UyBvciBNSU5VUykKKyAgIExBQkVMX1JFRiwgQ09OU1RfSU5ULCAoUExVUyBv ciBNSU5VUykKKyAgIFNZTUJPTF9SRUYKKyAgIExBQkVMX1JFRgorICAgQWxs IG90aGVyIGNvbWJpbmF0aW9ucyB3aWxsIHJlc3VsdCBpbiBjb2RlID0gLTEg YW5kIGRhdGEgPSBJTExFR0FMX0RNCisgICBjb2RlIGRhdGEKKyAgIC0xICAg SUxMRUdBTF9ETSAgIFRoZSBleHByZXNzaW9uIGRpZCBub3QgY29udGFpbiBT WU1CT0xfUkVGIG9yIExBQkVMX1JFRgorICAgIDAgICBETV9GQVIgICAgICAg U1lNQk9MX1JFRiB3YXMgZm91bmQgYW5kIGl0IHdhcyBmYXIgZGF0YSByZWZl cmVuY2UuIAorICAgIDAgICBETV9ERUZBVUxUICAgU1lNQk9MX1JFRiB3YXMg Zm91bmQgYW5kIGl0IHdhcyBtZWRpdW0gZGF0YSByZWZlcmVuY2UuIAorICAg IDEgICBJTExFR0FMX0RNICAgTEFCRUxfUkVGIHdhcyBmb3VuZC4gCisgICAg MiAgIElMTEVHQUxfRE0gICBTWU1CT0xfUkVGIHdhcyBmb3VuZCBhbmQgaXQg d2FzIGZ1bmN0aW9uIHJlZmVyZW5jZS4gICovCit2b2lkCitjcjE2X2RlY29t cG9zZV9jb25zdCAocnR4IHgsIGludCAqY29kZSwgZW51bSBkYXRhX21vZGVs X3R5cGUgKmRhdGEsCisJCSAgICAgIGJvb2wgdHJlYXRfYXNfY29uc3QpCit7 CisgICpjb2RlID0gLTE7CisgICpkYXRhID0gSUxMRUdBTF9ETTsKKyAgc3dp dGNoIChHRVRfQ09ERSAoeCkpCisgICAgeworICAgIGNhc2UgU1lNQk9MX1JF RjoKKyAgICAgICpjb2RlID0gU1lNQk9MX1JFRl9GVU5DVElPTl9QICh4KSA/ IDIgOiAwOworICAgICAgLyogMiBpbmRpY2F0ZXMgZnVuYyBzeW0uICAqLwor ICAgICAgaWYgKCpjb2RlID09IDApCisJeworCSAgaWYgKENSMTZfVEFSR0VU X0RBVEFfTkVBUikKKwkgICAgKmRhdGEgPSBETV9ERUZBVUxUOworCSAgZWxz ZSBpZiAoQ1IxNl9UQVJHRVRfREFUQV9NRURJVU0pCisJICAgICpkYXRhID0g RE1fRkFSOworCSAgZWxzZSBpZiAoQ1IxNl9UQVJHRVRfREFUQV9GQVIpCisJ ICAgIHsKKwkgICAgICBpZiAodHJlYXRfYXNfY29uc3QpCisJCS8qIFRoaXMg d2lsbCBiZSB1c2VkIG9ubHkgZm9yIHByaW50aW5nIAorCQkgICB0aGUgcXVh bGlmaWVyLiBUaGlzIGNhbGwgaXMgKG1heSBiZSkKKwkJICAgbWFkZSBieSBj cjE2X3ByaW50X29wZXJhbmRfYWRkcmVzcy4gICovCisJCSpkYXRhID0gRE1f RkFSOworCSAgICAgIGVsc2UKKwkJLyogVGhpcyBjYWxsIGlzIChtYXkgYmUp IG1hZGUgYnkgCisJCSAgIGNyMTZfbGVnaXRpbWF0ZV9hZGRyZXNzX3AuICAq LworCQkqZGF0YSA9IElMTEVHQUxfRE07CisJICAgIH0KKwl9CisgICAgICBy ZXR1cm47CisKKyAgICBjYXNlIExBQkVMX1JFRjoKKyAgICAgIC8qIDEgLSBp bmRpY2F0ZXMgbm9uLWZ1bmN0aW9uIHN5bWJvbC4gICovCisgICAgICAqY29k ZSA9IDE7CisgICAgICByZXR1cm47CisKKyAgICBjYXNlIFBMVVM6CisgICAg Y2FzZSBNSU5VUzoKKyAgICAgIC8qIExvb2sgaW50byB0aGUgdHJlZSBub2Rl cy4gICovCisgICAgICBpZiAoR0VUX0NPREUgKFhFWFAgKHgsIDApKSA9PSBD T05TVF9JTlQpCisJY3IxNl9kZWNvbXBvc2VfY29uc3QgKFhFWFAgKHgsIDEp LCBjb2RlLCBkYXRhLCB0cmVhdF9hc19jb25zdCk7CisgICAgICBlbHNlIGlm IChHRVRfQ09ERSAoWEVYUCAoeCwgMSkpID09IENPTlNUX0lOVCkKKwljcjE2 X2RlY29tcG9zZV9jb25zdCAoWEVYUCAoeCwgMCksIGNvZGUsIGRhdGEsIHRy ZWF0X2FzX2NvbnN0KTsKKyAgICAgIHJldHVybjsKKyAgICBkZWZhdWx0Ogor ICAgICAgcmV0dXJuOworICAgIH0KK30KKworLyogRGVjb21wb3NlIEFkZHJl c3MKKyAgIFRoaXMgZnVuY3Rpb24gZGVjb21wb3NlcyB0aGUgYWRkcmVzcyBy ZXR1cm5zIHRoZSB0eXBlIG9mIGFkZHJlc3MKKyAgIGFzIGRlZmluZWQgaW4g ZW51bSBjcjE2X2FkZHJ0eXBlLiAgSXQgYWxzbyBmaWxscyB0aGUgcGFyYW1l dGVyICpvdXQuCisgICBUaGUgZGVjb21wb3NlZCBhZGRyZXNzIGNhbiBiZSB1 c2VkIGZvciB0d28gcHVycG9zZXMuICBPbmUgdG8gCisgICBjaGVjayBpZiB0 aGUgYWRkcmVzcyBpcyB2YWxpZCBhbmQgc2Vjb25kIHRvIHByaW50IHRoZSBh ZGRyZXNzCisgICBvcGVyYW5kLgorCisgICBGb2xsb3dpbmcgdGFibGVzIGxp c3QgdmFsaWQgYWRkcmVzcyBzdXBwb3J0ZWQgaW4gQ1IxNkMvQysgYXJjaGl0 ZWN0dXJlcy4KKyAgIExlZ2VuZDogCisgICBhTiA6IEFic291bHRlIGFkZHJl c3MgTi1iaXQgYWRkcmVzcworICAgUiAgOiBPbmUgMTYtYml0IHJlZ2lzdGVy CisgICBSUCA6IENvbnNlY3V0aXZlIHR3byAxNi1iaXQgcmVnaXN0ZXJzIG9y IG9uZSAzMi1iaXQgcmVnaXN0ZXIKKyAgIEkgIDogT25lIDMyLWJpdCByZWdp c3RlcgorICAgZGlzcE4gOiBTaWduZWQgZGlzcGxhY2VtZW50IG9mIE4tYml0 cworCisgICAtLS0tQ29kZSBhZGRyZXNzZXMtLS0tCisgICBCcmFuY2ggb3Bl cmFuZHM6CisgICBkaXNwOSAgICAgICAgOiBDUjE2X0FCU09MVVRFICAgICAg IChkaXNwKQorICAgZGlzcDE3ICAgICAgIDogQ1IxNl9BQlNPTFVURSAgICAg ICAoZGlzcCkKKyAgIGRpc3AyNSAgICAgICA6IENSMTZfQUJTT0xVVEUgICAg ICAgKGRpc3ApCisgICBSUCArIGRpc3AyNSAgOiBDUjE2X1JFR1BfUkVMICAg ICAgIChiYXNlLCBkaXNwKQorCisgICBKdW1wIG9wZXJhbmRzOgorICAgUlAg ICAgICAgICAgIDogQ1IxNl9SRUdQX1JFTCAgICAgICAoYmFzZSwgZGlzcD0w KQorICAgYTI0ICAgICAgICAgIDogQ1IxNl9BQlNPTFVURSAgICAgICAoZGlz cCkKKworICAgLS0tLURhdGEgYWRkcmVzc2VzLS0tLQorICAgYTIwICAgICAg ICAgIDogQ1IxNl9BQlNPTFVURSAgICAgICAoZGlzcCkgICAgICAgICAgICAg ICAgbmVhciAoMU0pCisgICBhMjQgICAgICAgICAgOiBDUjE2X0FCU09MVVRF ICAgICAgIChkaXNwKSAgICAgICAgICAgICAgICBtZWRpdW0gICgxNk0pCisg ICBSICArIGQyMCAgICAgOiBDUjE2X1JFR19SRUwgICAgICAgIChiYXNlLCAg ZGlzcCkgICAgICAgICBuZWFyICgxTSs2NEspCisgICBSUCArIGQ0ICAgICAg OiBDUjE2X1JFR1BfUkVMICAgICAgIChiYXNlLCAgZGlzcCkgICAgICAgICBm YXIgICg0RykKKyAgIFJQICsgZDE2ICAgICA6IENSMTZfUkVHUF9SRUwgICAg ICAgKGJhc2UsICBkaXNwKSAgICAgICAgIGZhciAgKDRHKQorICAgUlAgKyBk MjAgICAgIDogQ1IxNl9SRUdQX1JFTCAgICAgICAoYmFzZSwgIGRpc3ApICAg ICAgICAgZmFyICAoNEcpCisgICBJICAgICAgICAgICAgOiAqKiogVmFsaWQg YnV0IHBvcnQgZG9lcyBub3Qgc3VwcG9ydCB0aGlzCisgICBJICArIGEyMCAg ICAgOiAqKiogVmFsaWQgYnV0IHBvcnQgZG9lcyBub3Qgc3VwcG9ydCB0aGlz CisgICBJICArIFJQICsgZDE0OiBDUjE2X0lOREVYX1JFR1BfUkVMIChiYXNl LCAgaW5kZXgsIGRpc3ApICBmYXIgICg0RykKKyAgIEkgICsgUlAgKyBkMjA6 IENSMTZfSU5ERVhfUkVHUF9SRUwgKGJhc2UsICBpbmRleCwgZGlzcCkgIGZh ciAgKDRHKQorCisgICBEZWNvbXBvc2luZyBEYXRhIG1vZGVsIGluIGNhc2Ug b2YgYWJzb2x1dGUgYWRkcmVzcy4KKworICAgVGFyZ2V0IE9wdGlvbiAgICAg ICAgICAgICBBZGRyZXNzIHR5cGUgUmVzdWx0YW50IERhdGEgcmVmIHR5cGUK KyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgLS0tLS0tLS0tLS0tIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBDUjE2X1RBUkdFVF9NT0RFTF9O RUFSICAgIEFCUzIwICAgICAgICBETV9ERUZBVUxUCisgICBDUjE2X1RBUkdF VF9NT0RFTF9ORUFSICAgIElNTTIwICAgICAgICBETV9ERUZBVUxUCisgICBD UjE2X1RBUkdFVF9NT0RFTF9ORUFSICAgIEFCUzI0ICAgICAgICBJbnZhbGlk CisgICBDUjE2X1RBUkdFVF9NT0RFTF9ORUFSICAgIElNTTMyICAgICAgICBJ bnZhbGlkCisKKyAgIENSMTZfVEFSR0VUX01PREVMX01FRElVTSAgQUJTMjAg ICAgICAgIERNX0RFRkFVTFQKKyAgIENSMTZfVEFSR0VUX01PREVMX01FRElV TSAgSU1NMjAgICAgICAgIERNX0RFRkFVTFQKKyAgIENSMTZfVEFSR0VUX01P REVMX01FRElVTSAgQUJTMjQgICAgICAgIERNX0ZBUgorICAgQ1IxNl9UQVJH RVRfTU9ERUxfTUVESVVNICBJTU0zMiAgICAgICAgSW52YWxpZAorCisgICBD UjE2X1RBUkdFVF9NT0RFTF9GQVIgICAgIEFCUzIwICAgICAgICBETV9ERUZB VUxUCisgICBDUjE2X1RBUkdFVF9NT0RFTF9GQVIgICAgIElNTTIwICAgICAg ICBETV9ERUZBVUxUCisgICBDUjE2X1RBUkdFVF9NT0RFTF9GQVIgICAgIEFC UzI0ICAgICAgICBETV9GQVIKKyAgIENSMTZfVEFSR0VUX01PREVMX0ZBUiAg ICAgSU1NMzIgICAgICAgIERNX0ZBUi4gICovCitlbnVtIGNyMTZfYWRkcnR5 cGUKK2NyMTZfZGVjb21wb3NlX2FkZHJlc3MgKHJ0eCBhZGRyLCBzdHJ1Y3Qg Y3IxNl9hZGRyZXNzICpvdXQsCisJCQlib29sIGRlYnVnX3ByaW50LCBib29s IHRyZWF0X2FzX2NvbnN0KQoreworICBydHggYmFzZSA9IE5VTExfUlRYLCBk aXNwID0gTlVMTF9SVFgsIGluZGV4ID0gTlVMTF9SVFg7CisgIGVudW0gZGF0 YV9tb2RlbF90eXBlIGRhdGEgPSBJTExFR0FMX0RNOworICBpbnQgY29kZSA9 IC0xOworICBlbnVtIGNyMTZfYWRkcnR5cGUgcmV0dmFsID0gQ1IxNl9JTlZB TElEOworCisgIHN3aXRjaCAoR0VUX0NPREUgKGFkZHIpKQorICAgIHsKKyAg ICBjYXNlIENPTlNUX0lOVDoKKyAgICAgIC8qIEFic29sdXRlIGFkZHJlc3Mg KGtub3duIGF0IGNvbXBpbGUgdGltZSkuICAqLworICAgICAgY29kZSA9IDA7 CisgICAgICBpZiAoZGVidWdfcHJpbnQpCisJZnByaW50ZiAoc3RkZXJyLCAi XG5jb2RlOiVkIiwgY29kZSk7CisgICAgICBkaXNwID0gYWRkcjsKKworICAg ICAgaWYgKGRlYnVnX3ByaW50KQorCXsKKwkgIGZwcmludGYgKHN0ZGVyciwg IlxuZGlzcDoiKTsKKwkgIGRlYnVnX3J0eCAoZGlzcCk7CisJfQorCisgICAg ICBpZiAoVU5TSUdORURfSU5UX0ZJVFNfTl9CSVRTIChJTlRWQUwgKGRpc3Ap LCAyMCkpCisJeworCSAgZGF0YSA9IERNX0RFRkFVTFQ7CisJICBpZiAoZGVi dWdfcHJpbnQpCisJICAgIGZwcmludGYgKHN0ZGVyciwgIlxuZGF0YTolZCIs IGRhdGEpOworCSAgcmV0dmFsID0gQ1IxNl9BQlNPTFVURTsKKwl9CisgICAg ICBlbHNlIGlmIChVTlNJR05FRF9JTlRfRklUU19OX0JJVFMgKElOVFZBTCAo ZGlzcCksIDI0KSkKKwl7CisJICBpZiAoIUNSMTZfVEFSR0VUX0RBVEFfTkVB UikKKwkgICAgeworCSAgICAgIGRhdGEgPSBETV9GQVI7CisJICAgICAgaWYg KGRlYnVnX3ByaW50KQorCQlmcHJpbnRmIChzdGRlcnIsICJcbmRhdGE6JWQi LCBkYXRhKTsKKwkgICAgICByZXR2YWwgPSBDUjE2X0FCU09MVVRFOworCSAg ICB9CisJICBlbHNlCisJICAgIHJldHVybiBDUjE2X0lOVkFMSUQ7CS8qIEFC UzI0IGlzIG5vdCBzdXBwb3J0IGluIE5FQVIgbW9kZWwuICAqLworCX0KKyAg ICAgIGVsc2UKKwlyZXR1cm4gQ1IxNl9JTlZBTElEOworICAgICAgYnJlYWs7 CisKKyAgICBjYXNlIENPTlNUOgorICAgICAgLyogQSBDT05TVCBpcyBhbiBl eHByZXNzaW9uIG9mIFBMVVMgb3IgTUlOVVMgd2l0aCAKKwkgQ09OU1RfSU5U LCBTWU1CT0xfUkVGIG9yIExBQkVMX1JFRi4gVGhpcyBpcyB0aGUKKwkgcmVz dWx0IG9mIGFzc2VtYmx5LXRpbWUgYXJpdGhtZXRpYyBjb21wdXRhdGlvbi4g ICovCisgICAgICByZXR2YWwgPSBDUjE2X0FCU09MVVRFOworICAgICAgZGlz cCA9IGFkZHI7CisgICAgICAvKiBDYWxsIHRoZSBoZWxwZXIgZnVuY3Rpb24g dG8gY2hlY2sgdGhlIHZhbGlkaXR5LiAgKi8KKyAgICAgIGNyMTZfZGVjb21w b3NlX2NvbnN0IChYRVhQIChhZGRyLCAwKSwgJmNvZGUsICZkYXRhLCB0cmVh dF9hc19jb25zdCk7CisgICAgICBpZiAoKGNvZGUgPT0gMCkgJiYgKGRhdGEg PT0gSUxMRUdBTF9ETSkpCisJLyogQ09OU1QgaXMgbm90IHZhbGlkIGNvZGUg b3IgZGF0YSBhZGRyZXNzLiAgKi8KKwlyZXR1cm4gQ1IxNl9JTlZBTElEOwor ICAgICAgaWYgKGRlYnVnX3ByaW50KQorCXsKKwkgIGZwcmludGYgKHN0ZGVy ciwgIlxuZGlzcDoiKTsKKwkgIGRlYnVnX3J0eCAoZGlzcCk7CisJICBmcHJp bnRmIChzdGRlcnIsICJcbmNvZGU6JWQiLCBjb2RlKTsKKwkgIGZwcmludGYg KHN0ZGVyciwgIlxuZGF0YTolZCIsIGRhdGEpOworCX0KKyAgICAgIGJyZWFr OworCisgICAgY2FzZSBMQUJFTF9SRUY6CisgICAgICByZXR2YWwgPSBDUjE2 X0FCU09MVVRFOworICAgICAgZGlzcCA9IGFkZHI7CisgICAgICAvKiAxIC0g aW5kaWNhdGVzIG5vbi1mdW5jdGlvbiBzeW1ib2wuICAqLworICAgICAgY29k ZSA9IDE7CisgICAgICBpZiAoZGVidWdfcHJpbnQpCisJeworCSAgZnByaW50 ZiAoc3RkZXJyLCAiXG5kaXNwOiIpOworCSAgZGVidWdfcnR4IChkaXNwKTsK KwkgIGZwcmludGYgKHN0ZGVyciwgIlxuY29kZTolZCIsIGNvZGUpOworCX0K KyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTWU1CT0xfUkVGOgorICAgICAg LyogQWJzb2x1dGUgYWRkcmVzcyAoa25vd24gYXQgbGluayB0aW1lKS4gICov CisgICAgICByZXR2YWwgPSBDUjE2X0FCU09MVVRFOworICAgICAgZGlzcCA9 IGFkZHI7CisgICAgICAvKiBUaGlzIGlzIGEgY29kZSBhZGRyZXNzIGlmIHN5 bWJvbF9yZWYgaXMgYSBmdW5jdGlvbi4gICovCisgICAgICAvKiAyIGluZGlj YXRlcyBmdW5jIHN5bS4gICovCisgICAgICBjb2RlID0gU1lNQk9MX1JFRl9G VU5DVElPTl9QIChhZGRyKSA/IDIgOiAwOworICAgICAgaWYgKGRlYnVnX3By aW50KQorCXsKKwkgIGZwcmludGYgKHN0ZGVyciwgIlxuZGlzcDoiKTsKKwkg IGRlYnVnX3J0eCAoZGlzcCk7CisJICBmcHJpbnRmIChzdGRlcnIsICJcbmNv ZGU6JWQiLCBjb2RlKTsKKwl9CisgICAgICAvKiBJZiBub3QgZnVuY3Rpb24g cmVmIHRoZW4gY2hlY2sgaWYgdmFsaWQgZGF0YSByZWYuICAqLworICAgICAg aWYgKGNvZGUgPT0gMCkKKwl7CisJICBpZiAoQ1IxNl9UQVJHRVRfREFUQV9O RUFSKQorCSAgICBkYXRhID0gRE1fREVGQVVMVDsKKwkgIGVsc2UgaWYgKENS MTZfVEFSR0VUX0RBVEFfTUVESVVNKQorCSAgICBkYXRhID0gRE1fRkFSOwor CSAgZWxzZSBpZiAoQ1IxNl9UQVJHRVRfREFUQV9GQVIpCisJICAgIHsKKwkg ICAgICBpZiAodHJlYXRfYXNfY29uc3QpCisJCS8qIFRoaXMgd2lsbCBiZSB1 c2VkIG9ubHkgZm9yIHByaW50aW5nIHRoZSAKKwkJICAgcXVhbGlmaWVyLiBU aGlzIGNhbGwgaXMgKG1heSBiZSkgbWFkZQorCQkgICBieSBjcjE2X3ByaW50 X29wZXJhbmRfYWRkcmVzcy4gICovCisJCWRhdGEgPSBETV9GQVI7CisJICAg ICAgZWxzZQorCQkvKiBUaGlzIGNhbGwgaXMgKG1heSBiZSkgbWFkZSBieSAK KwkJICAgY3IxNl9sZWdpdGltYXRlX2FkZHJlc3NfcC4gICovCisJCXJldHVy biBDUjE2X0lOVkFMSUQ7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgZGF0YSA9 IERNX0RFRkFVTFQ7CisJfQorICAgICAgaWYgKGRlYnVnX3ByaW50KQorCWZw cmludGYgKHN0ZGVyciwgIlxuZGF0YTolZCIsIGRhdGEpOworICAgICAgYnJl YWs7CisKKyAgICBjYXNlIFJFRzoKKyAgICBjYXNlIFNVQlJFRzoKKyAgICAg IC8qIFJlZ2lzdGVyIHJlbGF0aXZlIGFkZHJlc3MuICAqLworICAgICAgLyog QXNzdW1lIFJFRyBmaXRzIGluIGEgc2luZ2xlIHJlZ2lzdGVyLiAgKi8KKyAg ICAgIHJldHZhbCA9IENSMTZfUkVHX1JFTDsKKyAgICAgIGlmIChHRVRfTU9E RV9CSVRTSVpFIChHRVRfTU9ERSAoYWRkcikpID4gQklUU19QRVJfV09SRCkK KwlpZiAoIUxPTkdfUkVHX1AgKFJFR05PIChhZGRyKSkpCisJICAvKiBSRUcg d2lsbCByZXN1bHQgaW4gcmVnIHBhaXIuICAqLworCSAgcmV0dmFsID0gQ1Ix Nl9SRUdQX1JFTDsKKyAgICAgIGJhc2UgPSBhZGRyOworICAgICAgaWYgKGRl YnVnX3ByaW50KQorCXsKKwkgIGZwcmludGYgKHN0ZGVyciwgIlxuYmFzZToi KTsKKwkgIGRlYnVnX3J0eCAoYmFzZSk7CisJfQorICAgICAgYnJlYWs7CisK KyAgICBjYXNlIFBMVVM6CisgICAgICBzd2l0Y2ggKEdFVF9DT0RFIChYRVhQ IChhZGRyLCAwKSkpCisJeworCWNhc2UgUkVHOgorCWNhc2UgU1VCUkVHOgor CSAgLyogUkVHICsgRElTUDIwLiAgKi8KKwkgIC8qIEFsbCBSZWcgcmVsYXRp dmUgYWRkcmVzc2VzIGhhdmluZyBhIGRpc3BsYWNlbWVudCBuZWVkcyAKKwkg ICAgIHRvIGZpdCBpbiAyMC1iaXRzLiAgKi8KKwkgIGRpc3AgPSBYRVhQIChh ZGRyLCAxKTsKKwkgIGlmIChkZWJ1Z19wcmludCkKKwkgICAgeworCSAgICAg IGZwcmludGYgKHN0ZGVyciwgIlxuZGlzcDoiKTsKKwkgICAgICBkZWJ1Z19y dHggKGRpc3ApOworCSAgICB9CisJICBzd2l0Y2ggKEdFVF9DT0RFIChYRVhQ IChhZGRyLCAxKSkpCisJICAgIHsKKwkgICAgY2FzZSBDT05TVF9JTlQ6CisJ ICAgICAgLyogU2hhbGwgZml0IGluIDIwLWJpdHMuICAqLworCSAgICAgIGlm ICghVU5TSUdORURfSU5UX0ZJVFNfTl9CSVRTIChJTlRWQUwgKGRpc3ApLCAy MCkpCisJCXJldHVybiBDUjE2X0lOVkFMSUQ7CisJICAgICAgY29kZSA9IDA7 CisJICAgICAgaWYgKGRlYnVnX3ByaW50KQorCQlmcHJpbnRmIChzdGRlcnIs ICJcbmNvZGU6JWQiLCBjb2RlKTsKKwkgICAgICBicmVhazsKKworCSAgICBj YXNlIFVOU1BFQzoKKwkgICAgICBzd2l0Y2ggKFhJTlQgKFhFWFAgKGFkZHIs IDEpLCAxKSkKKwkJeworCQljYXNlIFVOU1BFQ19MSUJSQVJZX09GRlNFVDoK KwkJZGVmYXVsdDoKKwkJICBnY2NfdW5yZWFjaGFibGUgKCk7CisJCX0KKwkg ICAgICBicmVhazsKKworCSAgICBjYXNlIExBQkVMX1JFRjoKKwkgICAgY2Fz ZSBTWU1CT0xfUkVGOgorCSAgICBjYXNlIENPTlNUOgorCSAgICAgIC8qIFRo aXMgaXMgYWxzbyBhIHZhbGlkIGV4cHJlc3Npb24gZm9yIGFkZHJlc3MuCisJ ICAgICAgICAgSG93ZXZlciwgd2UgY2Fubm90IGFzY2VydGFpbiBpZiB0aGUg cmVzdWx0YW50CisJICAgICAgICAgZGlzcGxhY2VtZW50IHdpbGwgYmUgdmFs aWQgMjAtYml0IHZhbHVlLiAgVGhlcmVmb3JlLCAKKwkgICAgICAgICBsZXRz IG5vdCBhbGxvdyBzdWNoIGFuIGV4cHJlc3Npb24gZm9yIG5vdy4gIFRoaXMg d2lsbCAKKwkgICAgICAgICBiZSB1cGRhdGVkIHdoZW4gIHdlIGZpbmQgYSB3 YXkgdG8gdmFsaWRhdGUgdGhpcyAKKwkgICAgICAgICBleHByZXNzaW9uIGFz IGxlZ2l0aW1hdGUgYWRkcmVzcy4gCisJICAgICAgICAgVGlsbCB0aGVuIGZh bGwgdGhyb3VnaCBDUjE2X0lOVkFMSUQuICAqLworCSAgICBkZWZhdWx0Ogor CSAgICAgIHJldHVybiBDUjE2X0lOVkFMSUQ7CisJICAgIH0KKworCSAgLyog Tm93IGNoZWNrIGlmIFJFRyBjYW4gZml0IGludG8gc2luZ2xlIG9yIHBhaXIg cmVncy4gICovCisJICByZXR2YWwgPSBDUjE2X1JFR19SRUw7CisJICBiYXNl ID0gWEVYUCAoYWRkciwgMCk7CisJICBpZiAoZGVidWdfcHJpbnQpCisJICAg IHsKKwkgICAgICBmcHJpbnRmIChzdGRlcnIsICJcbmJhc2U6Iik7CisJICAg ICAgZGVidWdfcnR4IChiYXNlKTsKKwkgICAgfQorCSAgaWYgKEdFVF9NT0RF X0JJVFNJWkUgKEdFVF9NT0RFICgoWEVYUCAoYWRkciwgMCkpKSkgPiBCSVRT X1BFUl9XT1JEKQorCSAgICB7CisJICAgICAgaWYgKCFMT05HX1JFR19QIChS RUdOTyAoKFhFWFAgKGFkZHIsIDApKSkpKQorCQkvKiBSRUcgd2lsbCByZXN1 bHQgaW4gcmVnIHBhaXIuICAqLworCQlyZXR2YWwgPSBDUjE2X1JFR1BfUkVM OworCSAgICB9CisJICBicmVhazsKKworCWNhc2UgUExVUzoKKwkgIC8qIFZh bGlkIGV4cHI6IAorCSAgICAgcGx1cworCSAgICAgIC9cCisJICAgICAvICBc CisJICAgICBwbHVzIGlkeAorCSAgICAgIC9cCisJICAgICAvICBcCisJICAg ICByZWcgIGNvbnN0X2ludAorCisJICAgICBDaGVjayBpZiB0aGUgb3BlcmFu ZCAxIGlzIHZhbGlkIGluZGV4IHJlZ2lzdGVyLiAgKi8KKwkgIGRhdGEgPSBJ TExFR0FMX0RNOworCSAgaWYgKGRlYnVnX3ByaW50KQorCSAgICBmcHJpbnRm IChzdGRlcnIsICJcbmRhdGE6JWQiLCBkYXRhKTsKKwkgIHN3aXRjaCAoR0VU X0NPREUgKFhFWFAgKGFkZHIsIDEpKSkKKwkgICAgeworCSAgICBjYXNlIFJF RzoKKwkgICAgY2FzZSBTVUJSRUc6CisJICAgICAgaWYgKCFSRUdfT0tfRk9S X0lOREVYX1AgKFhFWFAgKGFkZHIsIDEpKSkKKwkJcmV0dXJuIENSMTZfSU5W QUxJRDsKKwkgICAgICAvKiBPSy4gUkVHIGlzIGEgdmFsaWQgaW5kZXggcmVn aXN0ZXIuICAqLworCSAgICAgIGluZGV4ID0gWEVYUCAoYWRkciwgMSk7CisJ ICAgICAgaWYgKGRlYnVnX3ByaW50KQorCQl7CisJCSAgZnByaW50ZiAoc3Rk ZXJyLCAiXG5pbmRleDoiKTsKKwkJICBkZWJ1Z19ydHggKGluZGV4KTsKKwkJ fQorCSAgICAgIGJyZWFrOworCSAgICBkZWZhdWx0OgorCSAgICAgIHJldHVy biBDUjE2X0lOVkFMSUQ7CisJICAgIH0KKwkgIC8qIENoZWNrIGlmIG9wZXJh bmQgMCBvZiBvcGVyYW5kIDAgaXMgUkVHUC4gICovCisJICBzd2l0Y2ggKEdF VF9DT0RFIChYRVhQIChYRVhQIChhZGRyLCAwKSwgMCkpKQorCSAgICB7CisJ ICAgIGNhc2UgUkVHOgorCSAgICBjYXNlIFNVQlJFRzoKKwkgICAgICAvKiBO b3cgY2hlY2sgaWYgUkVHIGlzIGEgUkVHUCBhbmQgbm90IGluIExPTkcgcmVn cy4gICovCisJICAgICAgaWYgKEdFVF9NT0RFX0JJVFNJWkUgKEdFVF9NT0RF IChYRVhQIChYRVhQIChhZGRyLCAwKSwgMCkpKQorCQkgID4gQklUU19QRVJf V09SRCkKKwkJeworCQkgIGlmIChSRUdOTyAoWEVYUCAoWEVYUCAoYWRkciwg MCksIDApKQorCQkgICAgICA+PSBDUjE2X0ZJUlNUX0RXT1JEX1JFR0lTVEVS KQorCQkgICAgcmV0dXJuIENSMTZfSU5WQUxJRDsKKwkJICBiYXNlID0gWEVY UCAoWEVYUCAoYWRkciwgMCksIDApOworCQkgIGlmIChkZWJ1Z19wcmludCkK KwkJICAgIHsKKwkJICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG5iYXNlOiIp OworCQkgICAgICBkZWJ1Z19ydHggKGJhc2UpOworCQkgICAgfQorCQl9CisJ ICAgICAgZWxzZQorCQlyZXR1cm4gQ1IxNl9JTlZBTElEOworCSAgICAgIGJy ZWFrOworCSAgICBkZWZhdWx0OgorCSAgICAgIHJldHVybiBDUjE2X0lOVkFM SUQ7CisJICAgIH0KKwkgIC8qIE5vdyBjaGVjayBpZiB0aGUgb3BlcmFuZCAx IG9mIG9wZXJhbmQgMCBpcyBjb25zdF9pbnQuICAqLworCSAgaWYgKEdFVF9D T0RFIChYRVhQIChYRVhQIChhZGRyLCAwKSwgMSkpID09IENPTlNUX0lOVCkK KwkgICAgeworCSAgICAgIGRpc3AgPSBYRVhQIChYRVhQIChhZGRyLCAwKSwg MSk7CisJICAgICAgaWYgKGRlYnVnX3ByaW50KQorCQl7CisJCSAgZnByaW50 ZiAoc3RkZXJyLCAiXG5kaXNwOiIpOworCQkgIGRlYnVnX3J0eCAoZGlzcCk7 CisJCX0KKwkgICAgICBpZiAoIVVOU0lHTkVEX0lOVF9GSVRTX05fQklUUyAo SU5UVkFMIChkaXNwKSwgMjApKQorCQlyZXR1cm4gQ1IxNl9JTlZBTElEOwor CSAgICB9CisJICBlbHNlCisJICAgIHJldHVybiBDUjE2X0lOVkFMSUQ7CisJ ICByZXR2YWwgPSBDUjE2X0lOREVYX1JFR1BfUkVMOworCSAgYnJlYWs7CisJ ZGVmYXVsdDoKKwkgIHJldHVybiBDUjE2X0lOVkFMSUQ7CisJfQorICAgICAg YnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIENSMTZfSU5W QUxJRDsKKyAgICB9CisKKyAgLyogQ2hlY2sgaWYgdGhlIGJhc2UgYW5kIGlu ZGV4IHJlZ2lzdGVycyBhcmUgdmFsaWQuICAqLworICBpZiAoYmFzZSAmJiAh KGNyMTZfYWRkcl9yZWdfcCAoYmFzZSkpKQorICAgIHJldHVybiBDUjE2X0lO VkFMSUQ7CisgIGlmIChiYXNlICYmICEoQ1IxNl9SRUdfT0tfRk9SX0JBU0Vf UCAoYmFzZSkpKQorICAgIHJldHVybiBDUjE2X0lOVkFMSUQ7CisgIGlmIChp bmRleCAmJiAhKFJFR19PS19GT1JfSU5ERVhfUCAoaW5kZXgpKSkKKyAgICBy ZXR1cm4gQ1IxNl9JTlZBTElEOworCisgIC8qIFdyaXRlIHRoZSBkZWNvbXBv c2l0aW9uIHRvIG91dCBwYXJhbWV0ZXIuICAqLworICBvdXQtPmJhc2UgPSBi YXNlOworICBvdXQtPmRpc3AgPSBkaXNwOworICBvdXQtPmluZGV4ID0gaW5k ZXg7CisgIG91dC0+ZGF0YSA9IGRhdGE7CisgIG91dC0+Y29kZSA9IGNvZGU7 CisKKyAgcmV0dXJuIHJldHZhbDsKK30KKworLyogUmV0dXJuIG5vbi16ZXJv IHZhbHVlIGlmICd4JyBpcyBsZWdpdGltYXRlIFBJQyBvcGVyYW5kCisgICB3 aGVuIGdlbmVyYXRpbmcgUElDIGNvZGUuICAqLworaW50CitsZWdpdGltYXRl X3BpY19vcGVyYW5kX3AgKHJ0eCB4KQoreworICBzd2l0Y2ggKEdFVF9DT0RF ICh4KSkKKyAgICB7CisgICAgY2FzZSBTWU1CT0xfUkVGOgorICAgICAgcmV0 dXJuIDA7CisgICAgICBicmVhazsKKyAgICBjYXNlIExBQkVMX1JFRjoKKyAg ICAgIHJldHVybiAwOworICAgICAgYnJlYWs7CisgICAgY2FzZSBDT05TVDoK KyAgICAgIC8qIFJFVklTSVQ6IFVzZSBzb21ldGhpbmcgbGlrZSBzeW1ib2xf cmVmZXJlbmNlZF9wLiAgKi8KKyAgICAgIGlmIChHRVRfQ09ERSAoWEVYUCAo eCwgMCkpID09IFBMVVMKKwkgICYmIChHRVRfQ09ERSAoWEVYUCAoWEVYUCAo eCwgMCksIDApKSA9PSBTWU1CT0xfUkVGCisJICAgICAgfHwgR0VUX0NPREUg KFhFWFAgKFhFWFAgKHgsIDApLCAwKSkgPT0gTEFCRUxfUkVGKQorCSAgJiYg KEdFVF9DT0RFIChYRVhQIChYRVhQICh4LCAwKSwgMSkpID09IENPTlNUX0lO VCkpCisJcmV0dXJuIDA7CisgICAgICBicmVhazsKKyAgICBjYXNlIE1FTToK KyAgICAgIHJldHVybiBsZWdpdGltYXRlX3BpY19vcGVyYW5kX3AgKFhFWFAg KHgsIDApKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBi cmVhazsKKyAgICB9CisgIHJldHVybiAxOworfQorCisvKiBDb252ZXJ0IGEg bm9uLVBJQyBhZGRyZXNzIGluIGBvcmlnJyB0byBhIFBJQyBhZGRyZXNzIGlu IGByZWcnLgorCisgICAgIElucHV0ICAgICAgICAgICAgT3V0cHV0ICgtZiBw aWMpICAgICAgICBPdXRwdXQgKC1mIFBJQykKKyAgICAgb3JpZyAgICAgICAg ICAgICByZWcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CisgICAgIEMxICAgc3ltYm9sICAgICAgICAgICBzeW1ib2xAQlJPIChyMTIp ICAgICAgICBzeW1ib2xAR09UIChyMTIpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorICAgICBDMiAgIHN5bWJvbCArIG9mZnNldCAg c3ltYm9sK29mZnNldEBCUk8gKHIxMikgc3ltYm9sK29mZnNldEBHT1QgKHIx MikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAg IE5PVEU6IEBCUk8gaXMgYWRkZWQgdXNpbmcgdW5zcGVjOkJSTworICAgICBO T1RFOiBAR09UIGlzIGFkZGVkIHVzaW5nIHVuc3BlYzpHT1QuICAqLworcnR4 CitsZWdpdGltaXplX3BpY19hZGRyZXNzIChydHggb3JpZywgZW51bSBtYWNo aW5lX21vZGUgbW9kZSBBVFRSSUJVVEVfVU5VU0VELAorCQkJcnR4IHJlZykK K3sKKyAgLyogRmlyc3QgaGFuZGxlIGEgc2ltcGxlIFNZTUJPTF9SRUYgb3Ig TEFCRUxfUkVGLiAgKi8KKyAgaWYgKEdFVF9DT0RFIChvcmlnKSA9PSBTWU1C T0xfUkVGIHx8IEdFVF9DT0RFIChvcmlnKSA9PSBMQUJFTF9SRUYpCisgICAg eworICAgICAgaWYgKHJlZyA9PSAwKQorCXJlZyA9IGdlbl9yZWdfcnR4IChQ bW9kZSk7CisKKyAgICAgIGlmIChmbGFnX3BpYyA9PSBORUFSX1BJQykKKwl7 CisJICAvKiBVbnNwZWMgdG8gaGFuZGxlIC1mcGljIG9wdGlvbi4gICovCisJ ICBlbWl0X2luc24gKGdlbl91bnNwZWNfYnJvX2FkZHIgKHJlZywgb3JpZykp OworCSAgZW1pdF9pbnNuIChnZW5fYWRkc2kzIChyZWcsIHJlZywgcGljX29m ZnNldF90YWJsZV9ydHgpKTsKKwl9CisgICAgICBlbHNlIGlmIChmbGFnX3Bp YyA9PSBGQVJfUElDKQorCXsKKwkgIC8qIFVuc3BlYyB0byBoYW5kbGUgLWZQ SUMgb3B0aW9uLiAgKi8KKwkgIGVtaXRfaW5zbiAoZ2VuX3Vuc3BlY19nb3Rf YWRkciAocmVnLCBvcmlnKSk7CisJfQorICAgICAgcmV0dXJuIHJlZzsKKyAg ICB9CisgIGVsc2UgaWYgKEdFVF9DT0RFIChvcmlnKSA9PSBDT05TVCkKKyAg ICB7CisgICAgICAvKiBUbyBoYW5kbGUgKHN5bWJvbCArIG9mZnNldCkuICAq LworICAgICAgcnR4IGJhc2UsIG9mZnNldDsKKworICAgICAgaWYgKEdFVF9D T0RFIChYRVhQIChvcmlnLCAwKSkgPT0gUExVUworCSAgJiYgWEVYUCAoWEVY UCAob3JpZywgMCksIDApID09IHBpY19vZmZzZXRfdGFibGVfcnR4KQorCXJl dHVybiBvcmlnOworCisgICAgICBpZiAocmVnID09IDApCisJeworCSAgZ2Nj X2Fzc2VydCAoY2FuX2NyZWF0ZV9wc2V1ZG9fcCAoKSk7CisJICByZWcgPSBn ZW5fcmVnX3J0eCAoUG1vZGUpOworCX0KKworICAgICAgZ2NjX2Fzc2VydCAo R0VUX0NPREUgKFhFWFAgKG9yaWcsIDApKSA9PSBQTFVTKTsKKworICAgICAg YmFzZSA9IGxlZ2l0aW1pemVfcGljX2FkZHJlc3MgKFhFWFAgKFhFWFAgKG9y aWcsIDApLCAwKSwgUG1vZGUsIHJlZyk7CisgICAgICBvZmZzZXQgPSBsZWdp dGltaXplX3BpY19hZGRyZXNzIChYRVhQIChYRVhQIChvcmlnLCAwKSwgMSks IFBtb2RlLAorCQkJCSAgICAgICBiYXNlID09IHJlZyA/IDAgOiByZWcpOwor CisgICAgICAvKiBSRVZJU0lUOiBPcHRpbWl6ZSBmb3IgY29uc3Qtb2Zmc2V0 cy4gICovCisgICAgICBlbWl0X2luc24gKGdlbl9hZGRzaTMgKHJlZywgYmFz ZSwgb2Zmc2V0KSk7CisKKyAgICAgIHJldHVybiByZWc7CisgICAgfQorICBy ZXR1cm4gb3JpZzsKK30KKworLyogSW1wbGVtZW50YXRpb24gb2YgVEFSR0VU X0xFR0lUSU1BVEVfQUREUkVTU19QLiAgKi8KK3N0YXRpYyBib29sCitjcjE2 X2xlZ2l0aW1hdGVfYWRkcmVzc19wIChlbnVtIG1hY2hpbmVfbW9kZSBtb2Rl IEFUVFJJQlVURV9VTlVTRUQsCisJCQkgICBydHggYWRkciwgYm9vbCBzdHJp Y3QpCit7CisgIGVudW0gY3IxNl9hZGRydHlwZSBhZGRydHlwZTsKKyAgc3Ry dWN0IGNyMTZfYWRkcmVzcyBhZGRyZXNzOworCisgIGlmIChUQVJHRVRfREVC VUdfQUREUikKKyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsCisJICAg ICAgICJcbj09PT09PVxuVEFSR0VUX0xFR0lUSU1BVEVfQUREUkVTU19QLCBt b2RlID0gJXMsIHN0cmljdCA9ICVkIiwKKwkgICAgICAgR0VUX01PREVfTkFN RSAobW9kZSksIHN0cmljdCk7CisgICAgICBkZWJ1Z19ydHggKGFkZHIpOwor ICAgIH0KKyAgYWRkcnR5cGUgPSBjcjE2X2RlY29tcG9zZV9hZGRyZXNzIChh ZGRyLCAmYWRkcmVzcywKKwkJCQkgICAgIChUQVJHRVRfREVCVUdfQUREUiA/ IDEgOiAwKSwgRkFMU0UpOworCisgIGlmIChUQVJHRVRfREVCVUdfQUREUikK KyAgICB7CisgICAgICBjb25zdCBjaGFyICp0eXBlc3RyOworCisgICAgICBz d2l0Y2ggKGFkZHJ0eXBlKQorCXsKKwljYXNlIENSMTZfSU5WQUxJRDoKKwkg IHR5cGVzdHIgPSAiaW52YWxpZCI7CisJICBicmVhazsKKwljYXNlIENSMTZf QUJTT0xVVEU6CisJICB0eXBlc3RyID0gImFic29sdXRlIjsKKwkgIGJyZWFr OworCWNhc2UgQ1IxNl9SRUdfUkVMOgorCSAgdHlwZXN0ciA9ICJyZWdpc3Rl ciByZWxhdGl2ZSI7CisJICBicmVhazsKKwljYXNlIENSMTZfUkVHUF9SRUw6 CisJICB0eXBlc3RyID0gInJlZ2lzdGVyIHBhaXIgcmVsYXRpdmUiOworCSAg YnJlYWs7CisJY2FzZSBDUjE2X0lOREVYX1JFR1BfUkVMOgorCSAgdHlwZXN0 ciA9ICJpbmRleCArIHJlZ2lzdGVyIHBhaXIgcmVsYXRpdmUiOworCSAgYnJl YWs7CisJZGVmYXVsdDoKKwkgIGdjY191bnJlYWNoYWJsZSAoKTsKKwl9Cisg ICAgICBmcHJpbnRmIChzdGRlcnIsICJcbmNyMTYgYWRkcmVzcyB0eXBlOiAl c1xuIiwgdHlwZXN0cik7CisgICAgfQorCisgIGlmIChhZGRydHlwZSA9PSBD UjE2X0lOVkFMSUQpCisgICAgcmV0dXJuIEZBTFNFOworCisgIGlmIChzdHJp Y3QpCisgICAgeworICAgICAgaWYgKGFkZHJlc3MuYmFzZQorCSAgJiYgIVJF R05PX01PREVfT0tfRk9SX0JBU0VfUCAoUkVHTk8gKGFkZHJlc3MuYmFzZSks IG1vZGUpKQorCXsKKwkgIGlmIChUQVJHRVRfREVCVUdfQUREUikKKwkgICAg ZnByaW50ZiAoc3RkZXJyLCAiYmFzZSByZWdpc3RlciBub3Qgc3RyaWN0XG4i KTsKKwkgIHJldHVybiBGQUxTRTsKKwl9CisgICAgICBpZiAoYWRkcmVzcy5p bmRleCAmJiAhUkVHTk9fT0tfRk9SX0lOREVYX1AgKFJFR05PIChhZGRyZXNz LmluZGV4KSkpCisJeworCSAgaWYgKFRBUkdFVF9ERUJVR19BRERSKQorCSAg ICBmcHJpbnRmIChzdGRlcnIsICJpbmRleCByZWdpc3RlciBub3Qgc3RyaWN0 XG4iKTsKKwkgIHJldHVybiBGQUxTRTsKKwl9CisgICAgfQorCisgIC8qIFJl dHVybiB0cnVlIGlmIGFkZHJlc3NpbmcgbW9kZSBpcyByZWdpc3RlciByZWxh dGl2ZS4gICovCisgIGlmIChmbGFnX3BpYykKKyAgICB7CisgICAgICBpZiAo YWRkcnR5cGUgPT0gQ1IxNl9SRUdfUkVMIHx8IGFkZHJ0eXBlID09IENSMTZf UkVHUF9SRUwpCisJcmV0dXJuIFRSVUU7CisgICAgICBlbHNlCisJcmV0dXJu IEZBTFNFOworICAgIH0KKworICByZXR1cm4gVFJVRTsKK30KKworLyogUm91 dGluZXMgdG8gY29tcHV0ZSBjb3N0cy4gICovCisKKy8qIFJldHVybiBjb3N0 IG9mIHRoZSBtZW1vcnkgYWRkcmVzcyB4LiAgKi8KK3N0YXRpYyBpbnQKK2Ny MTZfYWRkcmVzc19jb3N0IChydHggYWRkciwgYm9vbCBzcGVlZCBBVFRSSUJV VEVfVU5VU0VEKQoreworICBlbnVtIGNyMTZfYWRkcnR5cGUgYWRkcnR5cGU7 CisgIHN0cnVjdCBjcjE2X2FkZHJlc3MgYWRkcmVzczsKKyAgaW50IGNvc3Qg PSAyOworCisgIGFkZHJ0eXBlID0gY3IxNl9kZWNvbXBvc2VfYWRkcmVzcyAo YWRkciwgJmFkZHJlc3MsIDAsIEZBTFNFKTsKKworICBnY2NfYXNzZXJ0IChh ZGRydHlwZSAhPSBDUjE2X0lOVkFMSUQpOworCisgIC8qIENSMTZfQUJTT0xV VEUgICAgICAgICAgICA6IDMKKyAgICAgQ1IxNl9SRUdfUkVMICAoZGlzcCAh PTApIDogNAorICAgICBDUjE2X1JFR19SRUwgIChkaXNwID09MCkgOiA1Cisg ICAgIENSMTZfUkVHUF9SRUwgKGRpc3AgIT0wKSA6IDYKKyAgICAgQ1IxNl9S RUdQX1JFTCAoZGlzcCA9PTApIDogNworICAgICBDUjE2X0lOREVYX1JFR1Bf UkVMIChkaXNwICE9MCkgOiA4CisgICAgIENSMTZfSU5ERVhfUkVHUF9SRUwg KGRpc3AgPT0wKSA6IDkuICAqLworICBzd2l0Y2ggKGFkZHJ0eXBlKQorICAg IHsKKyAgICBjYXNlIENSMTZfQUJTT0xVVEU6CisgICAgICBjb3N0ICs9IDE7 CisgICAgICBicmVhazsKKyAgICBjYXNlIENSMTZfUkVHUF9SRUw6CisgICAg ICBjb3N0ICs9IDI7CisgICAgICAvKiBGYWxsIHRocm91Z2guICAqLworICAg IGNhc2UgQ1IxNl9SRUdfUkVMOgorICAgICAgY29zdCArPSAzOworICAgICAg aWYgKGFkZHJlc3MuZGlzcCkKKwljb3N0IC09IDE7CisgICAgICBicmVhazsK KyAgICBjYXNlIENSMTZfSU5ERVhfUkVHUF9SRUw6CisgICAgICBjb3N0ICs9 IDc7CisgICAgICBpZiAoYWRkcmVzcy5kaXNwKQorCWNvc3QgLT0gMTsKKyAg ICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgICAgfQorCisgIGlmIChUQVJH RVRfREVCVUdfQUREUikKKyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIs ICJcbj09PT09PVxubWFjcm8gVEFSR0VUX0FERFJFU1NfQ09TVCA9ICVkXG4i LCBjb3N0KTsKKyAgICAgIGRlYnVnX3J0eCAoYWRkcik7CisgICAgfQorCisg IHJldHVybiBjb3N0OworfQorCisKKy8qIEltcGxlbWVudCBgVEFSR0VUX1JF R0lTVEVSX01PVkVfQ09TVCcuICAqLworc3RhdGljIGludAorY3IxNl9yZWdp c3Rlcl9tb3ZlX2Nvc3QgKGVudW0gbWFjaGluZV9tb2RlIG1vZGUgQVRUUklC VVRFX1VOVVNFRCwKKwkJCSByZWdfY2xhc3NfdCBmcm9tIEFUVFJJQlVURV9V TlVTRUQsIHJlZ19jbGFzc190IHRvKQoreworICByZXR1cm4gKHRvICE9IEdF TkVSQUxfUkVHUyA/IDggOiAyKTsKK30KKworLyogSW1wbGVtZW50IGBUQVJH RVRfTUVNT1JZX01PVkVfQ09TVCcuICAqLworCisvKiBSZXR1cm4gdGhlIGNv c3Qgb2YgbW92aW5nIGRhdGEgb2YgbW9kZSBNT0RFIGJldHdlZW4gYSByZWdp c3RlciBvZiBjbGFzcworICAgQ0xBU1MgYW5kIG1lbW9yeTsgSU4gaXMgemVy byBpZiB0aGUgdmFsdWUgaXMgdG8gYmUgd3JpdHRlbiB0byBtZW1vcnksCisg ICBub256ZXJvIGlmIGl0IGlzIHRvIGJlIHJlYWQgaW4uIFRoaXMgY29zdCBp cyByZWxhdGl2ZSB0byB0aG9zZSBpbgorICAgUkVHSVNURVJfTU9WRV9DT1NU LiAgKi8KK3N0YXRpYyBpbnQKK2NyMTZfbWVtb3J5X21vdmVfY29zdCAoZW51 bSBtYWNoaW5lX21vZGUgbW9kZSwKKwkJICAgICAgIHJlZ19jbGFzc190IHJj bGFzcyBBVFRSSUJVVEVfVU5VU0VELAorCQkgICAgICAgYm9vbCBpbiBBVFRS SUJVVEVfVU5VU0VEKQoreworICAvKiBPbmUgTEQgb3IgU1QgdGFrZXMgdHdp Y2UgdGhlIHRpbWUgb2YgYSBzaW1wbGUgcmVnLXJlZyBtb3ZlLiAgKi8KKyAg aWYgKHJlZ19jbGFzc2VzX2ludGVyc2VjdF9wIChyY2xhc3MsIEdFTkVSQUxf UkVHUykpCisgICAgcmV0dXJuICg0ICogSEFSRF9SRUdOT19OUkVHUyAoMCwg bW9kZSkpOworICBlbHNlCisgICAgcmV0dXJuICgxMDApOworfQorCisvKiBJ bnN0cnVjdGlvbiBvdXRwdXQuICAqLworCisvKiBDaGVjayBpZiBhIGNvbnN0 X2RvdWJsZSBpcyBvayBmb3IgY3IxNiBzdG9yZS1pbW1lZGlhdGUgaW5zdHJ1 Y3Rpb25zLiAgKi8KK2ludAorY3IxNl9jb25zdF9kb3VibGVfb2sgKHJ0eCBv cCkKK3sKKyAgaWYgKEdFVF9NT0RFIChvcCkgPT0gU0Ztb2RlKQorICAgIHsK KyAgICAgIFJFQUxfVkFMVUVfVFlQRSByOworICAgICAgbG9uZyBsOworICAg ICAgUkVBTF9WQUxVRV9GUk9NX0NPTlNUX0RPVUJMRSAociwgb3ApOworICAg ICAgUkVBTF9WQUxVRV9UT19UQVJHRVRfU0lOR0xFIChyLCBsKTsKKyAgICAg IHJldHVybiBVTlNJR05FRF9JTlRfRklUU19OX0JJVFMgKGwsIDQpID8gMSA6 IDA7CisgICAgfQorCisgIHJldHVybiAoKFVOU0lHTkVEX0lOVF9GSVRTX05f QklUUyAoQ09OU1RfRE9VQkxFX0xPVyAob3ApLCA0KSkgJiYKKwkgIChVTlNJ R05FRF9JTlRfRklUU19OX0JJVFMgKENPTlNUX0RPVUJMRV9ISUdIIChvcCks IDQpKSkgPyAxIDogMDsKK30KKworLyogUmV0dXJucyBiaXQgcG9zaXRpb24g b2YgZmlyc3QgMCBvciAxIGJpdC4KKyAgIEl0IGlzIHNhZmUgdG8gYXNzdW1l IHZhbCBhcyAxNi1iaXQgd2lkZS4gICovCitpbnQKK2NyMTZfb3BlcmFuZF9i aXRfcG9zIChpbnQgdmFsLCBpbnQgYml0dmFsKQoreworICBpbnQgaTsKKyAg aWYgKGJpdHZhbCA9PSAwKQorICAgIHZhbCA9IH52YWw7CisKKyAgZm9yIChp ID0gMDsgaSA8IDE2OyBpKyspCisgICAgaWYgKHZhbCAmICgxIDw8IGkpKQor ICAgICAgYnJlYWs7CisgIHJldHVybiBpOworfQorCisvKiBJbXBsZW1lbnRz IHRoZSBtYWNybyBQUklOVF9PUEVSQU5EIGRlZmluZWQgaW4gY3IxNi5oLiAg Ki8KK3N0YXRpYyB2b2lkCitjcjE2X3ByaW50X29wZXJhbmQgKEZJTEUgKiBm aWxlLCBydHggeCwgaW50IGNvZGUpCit7CisgIGludCBwdHJfZGVyZWZlcmVu Y2UgPSAwOworCisgIHN3aXRjaCAoY29kZSkKKyAgICB7CisgICAgY2FzZSAn ZCc6CisgICAgICB7CisJY29uc3QgY2hhciAqY3IxNl9jbXBfc3RyOworCXN3 aXRjaCAoR0VUX0NPREUgKHgpKQorCSAgeworCSAgICAvKiBNRDogY29tcGFy ZSAocmVnLCByZWcgb3IgaW1tKSBidXQgQ1IxNjogY21wIChyZWcgb3IgaW1t LCByZWcpCisJICAgICAgIC0+IHN3YXAgYWxsIG5vbiBzeW1tZXRyaWMgb3Bz LiAgKi8KKwkgIGNhc2UgRVE6CisJICAgIGNyMTZfY21wX3N0ciA9ICJlcSI7 CisJICAgIGJyZWFrOworCSAgY2FzZSBORToKKwkgICAgY3IxNl9jbXBfc3Ry ID0gIm5lIjsKKwkgICAgYnJlYWs7CisJICBjYXNlIEdUOgorCSAgICBjcjE2 X2NtcF9zdHIgPSAibHQiOworCSAgICBicmVhazsKKwkgIGNhc2UgR1RVOgor CSAgICBjcjE2X2NtcF9zdHIgPSAibG8iOworCSAgICBicmVhazsKKwkgIGNh c2UgTFQ6CisJICAgIGNyMTZfY21wX3N0ciA9ICJndCI7CisJICAgIGJyZWFr OworCSAgY2FzZSBMVFU6CisJICAgIGNyMTZfY21wX3N0ciA9ICJoaSI7CisJ ICAgIGJyZWFrOworCSAgY2FzZSBHRToKKwkgICAgY3IxNl9jbXBfc3RyID0g ImxlIjsKKwkgICAgYnJlYWs7CisJICBjYXNlIEdFVToKKwkgICAgY3IxNl9j bXBfc3RyID0gImxzIjsKKwkgICAgYnJlYWs7CisJICBjYXNlIExFOgorCSAg ICBjcjE2X2NtcF9zdHIgPSAiZ2UiOworCSAgICBicmVhazsKKwkgIGNhc2Ug TEVVOgorCSAgICBjcjE2X2NtcF9zdHIgPSAiaHMiOworCSAgICBicmVhazsK KwkgIGRlZmF1bHQ6CisJICAgIGdjY191bnJlYWNoYWJsZSAoKTsKKwkgIH0K KwlmcHJpbnRmIChmaWxlLCAiJXMiLCBjcjE2X2NtcF9zdHIpOworCXJldHVy bjsKKyAgICAgIH0KKyAgICBjYXNlICckJzoKKyAgICAgIHB1dGMgKCckJywg ZmlsZSk7CisgICAgICByZXR1cm47CisKKyAgICBjYXNlICdwJzoKKyAgICAg IGlmIChHRVRfQ09ERSAoeCkgPT0gUkVHKQorCXsKKwkgIC8qIEZvciBQdXNo IGluc3RydWN0aW9ucywgd2Ugc2hvdWxkIG5vdCBwcmludCByZWdpc3RlciBw YWlycy4gICovCisJICBmcHJpbnRmIChmaWxlLCAiJXMiLCByZWdfbmFtZXNb UkVHTk8gKHgpXSk7CisJICByZXR1cm47CisJfQorICAgICAgYnJlYWs7CisK KyAgICBjYXNlICdiJzoKKyAgICAgIC8qIFByaW50IHRoZSBpbW1lZGlhdGUg YWRkcmVzcyBmb3IgYmFsIAorICAgICAgICAgJ2InIGlzIHVzZWQgaW5zdGVh ZCBvZiAnYScgdG8gYXZvaWQgY29tcGlsZXIgY2FsbGluZworICAgICAgICAg dGhlIEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyB3aGljaCBjYW5ub3QKKyAg ICAgICAgIHBlcmZvcm0gY2hlY2tzIG9uIGNvbnN0X2ludCBjb2RlIGFkZHJl c3NlcyBhcyBpdAorICAgICAgICAgYXNzdW1lcyBhbGwgY29uc3RfaW50IGFy ZSBkYXRhIGFkZHJlc3Nlcy4gICovCisgICAgICBmcHJpbnRmIChmaWxlLCAi MHglbHgiLCBJTlRWQUwgKHgpKTsKKyAgICAgIHJldHVybjsKKworICAgIGNh c2UgJ3InOgorICAgICAgLyogUHJpbnQgYml0IHBvc2l0aW9uIG9mIGZpcnN0 IDAuICAqLworICAgICAgZnByaW50ZiAoZmlsZSwgIiVkIiwgY3IxNl9vcGVy YW5kX2JpdF9wb3MgKElOVFZBTCAoeCksIDApKTsKKyAgICAgIHJldHVybjsK KworICAgIGNhc2UgJ3MnOgorICAgICAgLyogUHJpbnQgYml0IHBvc2l0aW9u IG9mIGZpcnN0IDEuICAqLworICAgICAgZnByaW50ZiAoZmlsZSwgIiVkIiwg Y3IxNl9vcGVyYW5kX2JpdF9wb3MgKElOVFZBTCAoeCksIDEpKTsKKyAgICAg IHJldHVybjsKKyAgICBjYXNlICdnJzoKKyAgICAgIC8qICdnJyBpcyB1c2Vk IGZvciBpbXBsaWNpdCBtZW06IGRlcmVmZXJlbmNlLiAgKi8KKyAgICAgIHB0 cl9kZXJlZmVyZW5jZSA9IDE7CisgICAgY2FzZSAnZic6CisgICAgY2FzZSAw OgorICAgICAgLyogZGVmYXVsdC4gICovCisgICAgICBzd2l0Y2ggKEdFVF9D T0RFICh4KSkKKwl7CisJY2FzZSBSRUc6CisJICBpZiAoR0VUX01PREVfQklU U0laRSAoR0VUX01PREUgKHgpKSA+IEJJVFNfUEVSX1dPUkQpCisJICAgIHsK KwkgICAgICBpZiAoTE9OR19SRUdfUCAoUkVHTk8gKHgpKSkKKwkJZnByaW50 ZiAoZmlsZSwgIiglcykiLCByZWdfbmFtZXNbUkVHTk8gKHgpXSk7CisJICAg ICAgZWxzZQorCQlmcHJpbnRmIChmaWxlLCAiKCVzLCVzKSIsIHJlZ19uYW1l c1tSRUdOTyAoeCkgKyAxXSwKKwkJCSByZWdfbmFtZXNbUkVHTk8gKHgpXSk7 CisJICAgIH0KKwkgIGVsc2UKKwkgICAgZnByaW50ZiAoZmlsZSwgIiVzIiwg cmVnX25hbWVzW1JFR05PICh4KV0pOworCSAgcmV0dXJuOworCisJY2FzZSBN RU06CisJICBvdXRwdXRfYWRkcmVzcyAoWEVYUCAoeCwgMCkpOworCSAgcmV0 dXJuOworCisJY2FzZSBDT05TVF9ET1VCTEU6CisJICB7CisJICAgIFJFQUxf VkFMVUVfVFlQRSByOworCSAgICBsb25nIGw7CisKKwkgICAgUkVBTF9WQUxV RV9GUk9NX0NPTlNUX0RPVUJMRSAociwgeCk7CisJICAgIFJFQUxfVkFMVUVf VE9fVEFSR0VUX1NJTkdMRSAociwgbCk7CisKKwkgICAgZnByaW50ZiAoZmls ZSwgIiQweCVseCIsIGwpOworCSAgICByZXR1cm47CisJICB9CisJY2FzZSBD T05TVF9JTlQ6CisJICB7CisJICAgIGZwcmludGYgKGZpbGUsICIkJWxkIiwg SU5UVkFMICh4KSk7CisJICAgIHJldHVybjsKKwkgIH0KKwljYXNlIFVOU1BF QzoKKwkgIHN3aXRjaCAoWElOVCAoeCwgMSkpCisJICAgIHsKKwkgICAgZGVm YXVsdDoKKwkgICAgICBnY2NfdW5yZWFjaGFibGUgKCk7CisJICAgIH0KKwkg IGJyZWFrOworCisJZGVmYXVsdDoKKwkgIGlmICghcHRyX2RlcmVmZXJlbmNl KQorCSAgICB7CisJICAgICAgcHV0YyAoJyQnLCBmaWxlKTsKKwkgICAgfQor CSAgY3IxNl9wcmludF9vcGVyYW5kX2FkZHJlc3MgKGZpbGUsIHgpOworCSAg cmV0dXJuOworCX0KKyAgICBkZWZhdWx0OgorICAgICAgb3V0cHV0X29wZXJh bmRfbG9zc2FnZSAoImludmFsaWQgJSV4biBjb2RlIik7CisgICAgfQorCisg IGdjY191bnJlYWNoYWJsZSAoKTsKK30KKworLyogSW1wbGVtZW50cyB0aGUg bWFjcm8gUFJJTlRfT1BFUkFORF9BRERSRVNTIGRlZmluZWQgaW4gY3IxNi5o LiAgKi8KKworc3RhdGljIHZvaWQKK2NyMTZfcHJpbnRfb3BlcmFuZF9hZGRy ZXNzIChGSUxFICogZmlsZSwgcnR4IGFkZHIpCit7CisgIGVudW0gY3IxNl9h ZGRydHlwZSBhZGRydHlwZTsKKyAgc3RydWN0IGNyMTZfYWRkcmVzcyBhZGRy ZXNzOworCisgIC8qIERlY29tcG9zZSB0aGUgYWRkcmVzcy4gQWxzbyBhc2sg aXQgdG8gdHJlYXQgYWRkcmVzcyBhcyBjb25zdGFudC4gICovCisgIGFkZHJ0 eXBlID0gY3IxNl9kZWNvbXBvc2VfYWRkcmVzcyAoYWRkciwgJmFkZHJlc3Ms IDAsIFRSVUUpOworCisgIGlmIChhZGRyZXNzLmRpc3AgJiYgR0VUX0NPREUg KGFkZHJlc3MuZGlzcCkgPT0gVU5TUEVDKQorICAgIHsKKyAgICAgIGRlYnVn X3J0eCAoYWRkcik7CisgICAgfQorCisgIHN3aXRjaCAoYWRkcnR5cGUpCisg ICAgeworICAgIGNhc2UgQ1IxNl9SRUdfUkVMOgorICAgICAgaWYgKGFkZHJl c3MuZGlzcCkKKwl7CisJICBpZiAoR0VUX0NPREUgKGFkZHJlc3MuZGlzcCkg PT0gVU5TUEVDKQorCSAgICBjcjE2X3ByaW50X29wZXJhbmQgKGZpbGUsIGFk ZHJlc3MuZGlzcCwgMCk7CisJICBlbHNlCisJICAgIG91dHB1dF9hZGRyX2Nv bnN0IChmaWxlLCBhZGRyZXNzLmRpc3ApOworCX0KKyAgICAgIGVsc2UKKwlm cHJpbnRmIChmaWxlLCAiMCIpOworICAgICAgZnByaW50ZiAoZmlsZSwgIigl cykiLCByZWdfbmFtZXNbUkVHTk8gKGFkZHJlc3MuYmFzZSldKTsKKyAgICAg IGJyZWFrOworCisgICAgY2FzZSBDUjE2X0FCU09MVVRFOgorICAgICAgaWYg KGFkZHJlc3MuZGlzcCkKKwlvdXRwdXRfYWRkcl9jb25zdCAoZmlsZSwgYWRk cmVzcy5kaXNwKTsKKyAgICAgIGVsc2UKKwlmcHJpbnRmIChmaWxlLCAiMCIp OworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENSMTZfSU5ERVhfUkVHUF9S RUw6CisgICAgICBmcHJpbnRmIChmaWxlLCAiWyVzXSIsIHJlZ19uYW1lc1tS RUdOTyAoYWRkcmVzcy5pbmRleCldKTsKKyAgICAgIC8qIEZhbGwgdGhyb3Vn aC4gICovCisgICAgY2FzZSBDUjE2X1JFR1BfUkVMOgorICAgICAgaWYgKGFk ZHJlc3MuZGlzcCkKKwl7CisJICBpZiAoR0VUX0NPREUgKGFkZHJlc3MuZGlz cCkgPT0gVU5TUEVDKQorCSAgICBjcjE2X3ByaW50X29wZXJhbmQgKGZpbGUs IGFkZHJlc3MuZGlzcCwgMCk7CisJICBlbHNlCisJICAgIG91dHB1dF9hZGRy X2NvbnN0IChmaWxlLCBhZGRyZXNzLmRpc3ApOworCX0KKyAgICAgIGVsc2UK KwlmcHJpbnRmIChmaWxlLCAiMCIpOworICAgICAgZnByaW50ZiAoZmlsZSwg IiglcywlcykiLCByZWdfbmFtZXNbUkVHTk8gKGFkZHJlc3MuYmFzZSkgKyAx XSwKKwkgICAgICAgcmVnX25hbWVzW1JFR05PIChhZGRyZXNzLmJhc2UpXSk7 CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgZGVidWdfcnR4 IChhZGRyKTsKKyAgICAgIGdjY191bnJlYWNoYWJsZSAoKTsKKyAgICB9Cisg IC8qIEFkZCBxdWFsaWZpZXJzIHRvIHRoZSBhZGRyZXNzIGV4cHJlc3Npb24g dGhhdCB3YXMganVzdCBwcmludGVkLiAgKi8KKyAgaWYgKGZsYWdfcGljIDwg TkVBUl9QSUMgJiYgYWRkcmVzcy5jb2RlID09IDApCisgICAgeworICAgICAg aWYgKGFkZHJlc3MuZGF0YSA9PSBETV9GQVIpCisJLyogQWRkciBjb250YWlu cyBTWU1CT0xfUkVGICYgZmFyIGRhdGEgcHRyLiAgKi8KKwlmcHJpbnRmIChm aWxlLCAiQGwiKTsKKyAgICAgIGVsc2UgaWYgKGFkZHJlc3MuZGF0YSA9PSBE TV9ERUZBVUxUKQorCS8qIEFkZHIgY29udGFpbnMgU1lNQk9MX1JFRiAmIG1l ZGl1bSBkYXRhIHB0ci4gICovCisJZnByaW50ZiAoZmlsZSwgIkBtIik7Cisg ICAgICAvKiBBZGRyIGNvbnRhaW5zIFNZTUJPTF9SRUYgJiBtZWRpdW0gZGF0 YSBwdHIuICAqLworICAgICAgZWxzZSBpZiAoYWRkcmVzcy5kYXRhID09IERN X05FQVIpCisJLyogQWRkciBjb250YWlucyBTWU1CT0xfUkVGICYgbmVhciBk YXRhIHB0ci4gICovCisJZnByaW50ZiAoZmlsZSwgIkBzIik7CisgICAgfQor ICBlbHNlIGlmIChmbGFnX3BpYyA9PSBORUFSX1BJQworCSAgICYmIChhZGRy ZXNzLmNvZGUgPT0gMCkgJiYgKGFkZHJlc3MuZGF0YSA9PSBETV9GQVIKKwkJ CQkgICAgICB8fCBhZGRyZXNzLmRhdGEgPT0gRE1fREVGQVVMVAorCQkJCSAg ICAgIHx8IGFkZHJlc3MuZGF0YSA9PSBETV9ORUFSKSkKKyAgICB7CisgICAg ICBmcHJpbnRmIChmaWxlLCAiQGwiKTsKKyAgICB9CisgIGVsc2UgaWYgKGZs YWdfcGljID09IE5FQVJfUElDICYmIGFkZHJlc3MuY29kZSA9PSAyKQorICAg IHsKKyAgICAgIGZwcmludGYgKGZpbGUsICJwaWMiKTsKKyAgICB9CisgIGVs c2UgaWYgKGZsYWdfcGljID09IE5FQVJfUElDICYmIGFkZHJlc3MuY29kZSA9 PSAxKQorICAgIHsKKyAgICAgIGZwcmludGYgKGZpbGUsICJAY3BpYyIpOwor ICAgIH0KKworICBlbHNlIGlmIChmbGFnX3BpYyA9PSBGQVJfUElDICYmIGFk ZHJlc3MuY29kZSA9PSAyKQorICAgIHsKKyAgICAgIC8qIFJFVklTSVQ6IGNy MTYgcmVnaXN0ZXIgaW5kaXJlY3QganVtcCBleHBlY3RzIGEgMS1iaXQgcmln aHQgc2hpZnRlZAorICAgICAgICAgYWRkcmVzcyAhIEdPVGMgdGVsbHMgYXNz ZW1ibGVyIHRoaXMgc3ltYm9sIGlzIGEgdGV4dC1hZGRyZXNzIAorICAgICAg ICAgVGhpcyBuZWVkcyB0byBiZSBmaXhlZCBpbiBzdWNoIGEgd2F5IHRoYXQg dGhpcyBvZmZzZXQgaXMgZG9uZSAKKyAgICAgICAgIG9ubHkgaW4gdGhlIGNh c2Ugd2hlcmUgYW4gYWRkcmVzcyBpcyBiZWluZyB1c2VkIGZvciBpbmRpcmVj dCBqdW1wCisgICAgICAgICBvciBjYWxsLiBEZXRlcm1pbmluZyB0aGUgcG90 ZW50aWFsIHVzYWdlIG9mIGxvYWRkIGlzIG9mIGNvdXJzZSBub3QKKyAgICAg ICAgIHBvc3NpYmxlIGFsd2F5cy4gRXZlbnR1YWxseSwgdGhpcyBoYXMgdG8g YmUgZml4ZWQgaW4gdGhlIAorICAgICAgICAgcHJvY2Vzc29yLiAgKi8KKyAg ICAgIGZwcmludGYgKGZpbGUsICJHT1QgKCVzKSIsIHJlZ19uYW1lc1tQSUNf T0ZGU0VUX1RBQkxFX1JFR05VTV0pOworICAgIH0KKyAgZWxzZSBpZiAoZmxh Z19waWMgPT0gRkFSX1BJQyAmJiBhZGRyZXNzLmNvZGUgPT0gMSkKKyAgICB7 CisgICAgICBmcHJpbnRmIChmaWxlLCAiQGNHT1QgKCVzKSIsIHJlZ19uYW1l c1tQSUNfT0ZGU0VUX1RBQkxFX1JFR05VTV0pOworICAgIH0KKworICBlbHNl IGlmIChmbGFnX3BpYyA9PSBGQVJfUElDICYmCisJICAgKGFkZHJlc3MuZGF0 YSA9PSBETV9GQVIgfHwgYWRkcmVzcy5kYXRhID09IERNX0RFRkFVTFQKKwkg ICAgfHwgYWRkcmVzcy5kYXRhID09IERNX05FQVIpKQorICAgIHsKKyAgICAg IGZwcmludGYgKGZpbGUsICJAR09UICglcykiLCByZWdfbmFtZXNbUElDX09G RlNFVF9UQUJMRV9SRUdOVU1dKTsKKyAgICB9Cit9CisKKy8qIE1hY2hpbmUg ZGVzY3JpcHRpb24gaGVscGVyIGZ1bmN0aW9ucy4gICovCisKKy8qIENhbGxl ZCBmcm9tIGNyMTYubWQuIFRoZSByZXR1cm4gdmFsdWUgZGVwZW5kcyBvbiB0 aGUgcGFyYW1ldGVyIHB1c2hfb3JfcG9wOgorICAgV2hlbiBwdXNoX29yX3Bv cCBpcyB6ZXJvIC0+IHN0cmluZyBmb3IgcHVzaCBpbnN0cnVjdGlvbnMgb2Yg cHJvbG9ndWUuCisgICBXaGVuIHB1c2hfb3JfcG9wIGlzIG5vbnplcm8gLT4g c3RyaW5nIGZvciBwb3AvcG9wcmV0L3JldHggaW4gZXBpbG9ndWUuCisgICBS ZWxpZXMgb24gdGhlIGFzc3VtcHRpb25zOgorICAgMS4gUkEgaXMgdGhlIGxh c3QgcmVnaXN0ZXIgdG8gYmUgc2F2ZWQuCisgICAyLiBUaGUgbWF4aW1hbCB2 YWx1ZSBvZiB0aGUgY291bnRlciBpcyBNQVhfQ09VTlQuICAqLworY2hhciAq CitjcjE2X3ByZXBhcmVfcHVzaF9wb3Bfc3RyaW5nIChpbnQgcHVzaF9vcl9w b3ApCit7CisgIC8qIGogaXMgdGhlIG51bWJlciBvZiByZWdpc3RlcnMgYmVp bmcgc2F2ZWQsIHRha2VzIGNhcmUgdGhhdCB0aGVyZSB3b24ndCBiZQorICAg ICBtb3JlIHRoYW4gOCBpbiBvbmUgcHVzaC9wb3AgaW5zdHJ1Y3Rpb24uICAq LworCisgIC8qIEZvciB0aGUgcmVnaXN0ZXIgbWFzayBzdHJpbmcuICAqLwor ICBzdGF0aWMgY2hhciBvbmVfaW5zdF9zdHJbNTBdOworCisgIC8qIGkgaXMg dGhlIGluZGV4IG9mIGN1cnJlbnRfZnJhbWVfaW5mby5zYXZlX3JlZ3NbXSwg Z29pbmcgZnJvbSAwIHVudGlsIAorICAgICBjdXJyZW50X2ZyYW1lX2luZm8u bGFzdF9yZWdfdG9fc2F2ZS4gICovCisgIGludCBpLCBzdGFydF9yZWc7Cisg IGludCB3b3JkX2NudDsKKyAgaW50IHByaW50X3JhOworICBjaGFyICpyZXR1 cm5fc3RyOworCisgIC8qIEZvciByZXZlcnNpbmcgb24gdGhlIHB1c2ggaW5z dHJ1Y3Rpb25zIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lLiAgKi8KKyAg Y2hhciAqdGVtcF9zdHI7CisKKyAgcmV0dXJuX3N0ciA9IChjaGFyICopIHht YWxsb2MgKDE2MCk7CisgIHRlbXBfc3RyID0gKGNoYXIgKikgeG1hbGxvYyAo MTYwKTsKKworICAvKiBJbml0aWFsaXplLiAgKi8KKyAgbWVtc2V0IChyZXR1 cm5fc3RyLCAwLCAzKTsKKworICBpID0gMDsKKyAgd2hpbGUgKGkgPD0gY3Vy cmVudF9mcmFtZV9pbmZvLmxhc3RfcmVnX3RvX3NhdmUpCisgICAgeworICAg ICAgLyogUHJlcGFyZSBtYXNrIGZvciBvbmUgaW5zdHJ1Y3Rpb24uICAqLwor ICAgICAgb25lX2luc3Rfc3RyWzBdID0gMDsKKworICAgICAgLyogVG8gY291 bnQgbnVtYmVyIG9mIHdvcmRzIGluIG9uZSBpbnN0cnVjdGlvbi4gICovCisg ICAgICB3b3JkX2NudCA9IDA7CisgICAgICBzdGFydF9yZWcgPSBpOworICAg ICAgcHJpbnRfcmEgPSAwOworICAgICAgd2hpbGUgKCh3b3JkX2NudCA8IE1B WF9DT1VOVCkgCisJICAgICAmJiAoaSA8PSBjdXJyZW50X2ZyYW1lX2luZm8u bGFzdF9yZWdfdG9fc2F2ZSkpCisJeworCSAgLyogRm9yIGVhY2ggbm9uIGNv bnNlY3V0aXZlIHNhdmUgcmVnaXN0ZXIsIAorCSAgICAgYSBuZXcgaW5zdHJ1 Y3Rpb24gc2hhbGwgYmUgZ2VuZXJhdGVkLiAgKi8KKwkgIGlmICghY3VycmVu dF9mcmFtZV9pbmZvLnNhdmVfcmVnc1tpXSkKKwkgICAgeworCSAgICAgIC8q IE1vdmUgdG8gbmV4dCByZWcgYW5kIGJyZWFrLiAgKi8KKwkgICAgICArK2k7 CisJICAgICAgYnJlYWs7CisJICAgIH0KKworCSAgaWYgKGkgPT0gUkVUVVJO X0FERFJFU1NfUkVHTlVNKQorCSAgICBwcmludF9yYSA9IDE7CisJICBlbHNl CisJICAgIHsKKwkgICAgICAvKiBDaGVjayBlc3BlY2lhbGx5IGlmIGFkZGlu ZyAyIGRvZXMgbm90IGNyb3NzIHRoZSBNQVhfQ09VTlQuICAqLworCSAgICAg IGlmICgod29yZF9jbnQgKyAoKGkgPCBDUjE2X0ZJUlNUX0RXT1JEX1JFR0lT VEVSKSA/IDEgOiAyKSkKKwkJICA+PSBNQVhfQ09VTlQpCisJCWJyZWFrOwor CSAgICAgIC8qIEluY3JlYXNlIHdvcmQgY291bnQgYnkgMiBmb3IgbG9uZyBy ZWdpc3RlcnMgZXhjZXB0IFJBLiAgICovCisJICAgICAgd29yZF9jbnQgKz0g KChpIDwgQ1IxNl9GSVJTVF9EV09SRF9SRUdJU1RFUikgPyAxIDogMik7CisJ ICAgIH0KKwkgICsraTsKKwl9CisKKyAgICAgIC8qIE5vIG5lZWQgdG8gZ2Vu ZXJhdGUgYW55IGluc3RydWN0aW9uIGFzCisgICAgICAgICBubyByZWdpc3Rl ciBvciBSQSBuZWVkcyB0byBiZSBzYXZlZC4gICovCisgICAgICBpZiAoKHdv cmRfY250ID09IDApICYmIChwcmludF9yYSA9PSAwKSkKKwljb250aW51ZTsK KworICAgICAgLyogTm93IHByZXBhcmUgdGhlIGluc3RydWN0aW9uIG9wZXJh bmRzLiAgKi8KKyAgICAgIGlmICh3b3JkX2NudCA+IDApCisJeworCSAgc3By aW50ZiAob25lX2luc3Rfc3RyLCAiJCVkLCAlcyIsIHdvcmRfY250LCByZWdf bmFtZXNbc3RhcnRfcmVnXSk7CisJICBpZiAocHJpbnRfcmEpCisJICAgIHN0 cmNhdCAob25lX2luc3Rfc3RyLCAiLCByYSIpOworCX0KKyAgICAgIGVsc2UK KwlzdHJjYXQgKG9uZV9pbnN0X3N0ciwgInJhIik7CisKKyAgICAgIGlmIChw dXNoX29yX3BvcCA9PSAxKQorCXsKKwkgIC8qIFBvcCBpbnN0cnVjdGlvbi4g ICovCisJICBpZiAocHJpbnRfcmEgJiYgIWNyMTZfaW50ZXJydXB0X2Z1bmN0 aW9uX3AgKCkKKwkgICAgICAmJiAhY3J0bC0+Y2FsbHNfZWhfcmV0dXJuKQor CSAgICAvKiBQcmludCBwb3ByZXQgaWYgUkEgaXMgc2F2ZWQgYW5kIGl0cyBu b3QgYSBpbnRlcnJ1cHQgCisJICAgICAgIGZ1bmN0aW9uLiAgKi8KKwkgICAg c3RyY3B5ICh0ZW1wX3N0ciwgIlxuXHRwb3ByZXRcdCIpOworCSAgZWxzZQor CSAgICBzdHJjcHkgKHRlbXBfc3RyLCAiXG5cdHBvcFx0Iik7CisKKwkgIHN0 cmNhdCAodGVtcF9zdHIsIG9uZV9pbnN0X3N0cik7CisKKwkgIC8qIEFkZCB0 aGUgcG9wIGluc3RydWN0aW9uIGxpc3QuICAqLworCSAgc3RyY2F0IChyZXR1 cm5fc3RyLCB0ZW1wX3N0cik7CisJfQorICAgICAgZWxzZQorCXsKKwkgIC8q IFB1c2ggaW5zdHJ1Y3Rpb24uICAqLworCSAgc3RyY3B5ICh0ZW1wX3N0ciwg IlxuXHRwdXNoXHQiKTsKKwkgIHN0cmNhdCAodGVtcF9zdHIsIG9uZV9pbnN0 X3N0cik7CisKKwkgIC8qIFdlIG5lZWQgdG8gcmV2ZXJzZSB0aGUgb3JkZXIg b2YgdGhlIGluc3RydWN0aW9ucyBpZiB0aGVyZQorCSAgICAgYXJlIG1vcmUg dGhhbiBvbmUuIChzaW5jZSB0aGUgcG9wIHdpbGwgbm90IGJlIHJldmVyc2Vk IGluIAorCSAgICAgdGhlIGVwaWxvZ3VlLiAgKi8KKwkgIHN0cmNhdCAodGVt cF9zdHIsIHJldHVybl9zdHIpOworCSAgc3RyY3B5IChyZXR1cm5fc3RyLCB0 ZW1wX3N0cik7CisJfQorICAgIH0KKworICBpZiAocHVzaF9vcl9wb3AgPT0g MSkKKyAgICB7CisgICAgICAvKiBQT1AuICAqLworICAgICAgaWYgKGNyMTZf aW50ZXJydXB0X2Z1bmN0aW9uX3AgKCkpCisJc3RyY2F0IChyZXR1cm5fc3Ry LCAiXG5cdHJldHhcbiIpOworICAgICAgZWxzZSBpZiAoY3J0bC0+Y2FsbHNf ZWhfcmV0dXJuKQorCXsKKwkgIC8qIEFkZCBzdGFjayBhZGp1c3RtZW50IGJl Zm9yZSByZXR1cm5pbmcgdG8gZXhjZXB0aW9uIGhhbmRsZXIKKwkgICAgIE5P VEU6IEVIX1JFVFVSTl9TVEFDS0FESl9SVFggbXVzdCByZWZlciB0byAocjUs IHI0KS4gICovCisJICBzdHJjYXQgKHJldHVybl9zdHIsICJcblx0YWRkZFx0 IChyNSwgcjQpLCAoc3ApXHRcbiIpOworCSAgc3RyY2F0IChyZXR1cm5fc3Ry LCAiXG5cdGp1bXBcdCAocmEpXG4iKTsKKworCSAgLyogQnV0IGJlZm9yZSBh bnl0aGluZyBlbHNlLCB1bmRvIHRoZSBhZGp1c3RtZW50IGFkZGl0aW9uIGRv bmUgaW4KKwkgICAgIGNyMTZfZXhwYW5kX2VwaWxvZ3VlICgpLiAgKi8KKwkg IHN0cmNweSAodGVtcF9zdHIsICJcblx0c3ViZFx0IChyNSwgcjQpLCAoc3Ap XHRcbiIpOworCSAgc3RyY2F0ICh0ZW1wX3N0ciwgcmV0dXJuX3N0cik7CisJ ICBzdHJjcHkgKHJldHVybl9zdHIsIHRlbXBfc3RyKTsKKwl9CisgICAgICBl bHNlIGlmICghRlVOQ19JU19OT1JFVFVSTl9QIChjdXJyZW50X2Z1bmN0aW9u X2RlY2wpCisJICAgICAgICYmICEoY3VycmVudF9mcmFtZV9pbmZvLnNhdmVf cmVnc1tSRVRVUk5fQUREUkVTU19SRUdOVU1dKSkKKwlzdHJjYXQgKHJldHVy bl9zdHIsICJcblx0anVtcFx0IChyYSlcbiIpOworICAgIH0KKworICAvKiBT a2lwIHRoZSBuZXdsaW5lIGFuZCB0aGUgdGFiIGluIHRoZSBzdGFydCBvZiBy ZXR1cm5fc3RyLiAgKi8KKyAgcmV0dXJuX3N0ciArPSAyOworICByZXR1cm4g cmV0dXJuX3N0cjsKK30KKworCisvKiBHZW5lcmF0ZSBEV0FSRjIgYW5ub3Rh dGlvbiBmb3IgbXVsdGktcHVzaCBpbnN0cnVjdGlvbi4gICovCitzdGF0aWMg dm9pZAorY3IxNl9jcmVhdGVfZHdhcmZfZm9yX211bHRpX3B1c2ggKHJ0eCBp bnNuKQoreworICBydHggZHdhcmYsIHJlZywgdG1wOworICBpbnQgaSwgaiwg ZnJvbSwgdG8sIHdvcmRfY250LCBkd2FyZl9wYXJfaW5kZXgsIGluYzsKKyAg ZW51bSBtYWNoaW5lX21vZGUgbW9kZTsKKyAgaW50IG51bV9yZWdzID0gMCwg b2Zmc2V0ID0gMCwgc3BsaXRfaGVyZSA9IDAsIHRvdGFsX3B1c2hfYnl0ZXMg PSAwOworCisgIGZvciAoaSA9IDA7IGkgPD0gY3VycmVudF9mcmFtZV9pbmZv Lmxhc3RfcmVnX3RvX3NhdmU7ICsraSkKKyAgICB7CisgICAgICBpZiAoY3Vy cmVudF9mcmFtZV9pbmZvLnNhdmVfcmVnc1tpXSkKKwl7CisJICArK251bV9y ZWdzOworCSAgaWYgKGkgPCBDUjE2X0ZJUlNUX0RXT1JEX1JFR0lTVEVSKQor CSAgICB0b3RhbF9wdXNoX2J5dGVzICs9IDI7CisJICBlbHNlCisJICAgIHRv dGFsX3B1c2hfYnl0ZXMgKz0gNDsKKwl9CisgICAgfQorCisgIGlmICghbnVt X3JlZ3MpCisgICAgcmV0dXJuOworCisgIGR3YXJmID0gZ2VuX3J0eF9TRVFV RU5DRSAoVk9JRG1vZGUsIHJ0dmVjX2FsbG9jIChudW1fcmVncyArIDEpKTsK KyAgZHdhcmZfcGFyX2luZGV4ID0gbnVtX3JlZ3M7CisKKyAgZnJvbSA9IGN1 cnJlbnRfZnJhbWVfaW5mby5sYXN0X3JlZ190b19zYXZlICsgMTsKKyAgdG8g PSBjdXJyZW50X2ZyYW1lX2luZm8ubGFzdF9yZWdfdG9fc2F2ZTsKKyAgd29y ZF9jbnQgPSAwOworCisgIGZvciAoaSA9IGN1cnJlbnRfZnJhbWVfaW5mby5s YXN0X3JlZ190b19zYXZlOyBpID49IDA7KQorICAgIHsKKyAgICAgIGlmICgh Y3VycmVudF9mcmFtZV9pbmZvLnNhdmVfcmVnc1tpXSB8fCAwID09IGkgfHwg c3BsaXRfaGVyZSkKKwl7CisJICAvKiBUaGlzIGJsb2NrIG9mIHJlZ3MgaXMg cHVzaGVkIGluIG9uZSBpbnN0cnVjdGlvbi4gICovCisJICBpZiAoMCA9PSBp ICYmIGN1cnJlbnRfZnJhbWVfaW5mby5zYXZlX3JlZ3NbaV0pCisJICAgIGZy b20gPSAwOworCisJICBmb3IgKGogPSB0bzsgaiA+PSBmcm9tOyAtLWopCisJ ICAgIHsKKwkgICAgICBpZiAoaiA8IENSMTZfRklSU1RfRFdPUkRfUkVHSVNU RVIpCisJCXsKKwkJICBtb2RlID0gSEltb2RlOworCQkgIGluYyA9IDE7CisJ CX0KKwkgICAgICBlbHNlCisJCXsKKwkJICBtb2RlID0gU0ltb2RlOworCQkg IGluYyA9IDI7CisJCX0KKwkgICAgICByZWcgPSBnZW5fcnR4X1JFRyAobW9k ZSwgaik7CisJICAgICAgb2Zmc2V0ICs9IDIgKiBpbmM7CisJICAgICAgdG1w ID0gZ2VuX3J0eF9TRVQgKFZPSURtb2RlLAorCQkJCSBnZW5fZnJhbWVfbWVt IChtb2RlLAorCQkJCQkJcGx1c19jb25zdGFudAorCQkJCQkJKHN0YWNrX3Bv aW50ZXJfcnR4LAorCQkJCQkJIHRvdGFsX3B1c2hfYnl0ZXMgLSBvZmZzZXQp KSwKKwkJCQkgcmVnKTsKKwkgICAgICBSVFhfRlJBTUVfUkVMQVRFRF9QICh0 bXApID0gMTsKKwkgICAgICBYVkVDRVhQIChkd2FyZiwgMCwgZHdhcmZfcGFy X2luZGV4LS0pID0gdG1wOworCSAgICB9CisJICBmcm9tID0gaTsKKwkgIHRv ID0gLS1pOworCSAgc3BsaXRfaGVyZSA9IDA7CisJICB3b3JkX2NudCA9IDA7 CisJICBjb250aW51ZTsKKwl9CisKKyAgICAgIGlmIChpICE9IFJFVFVSTl9B RERSRVNTX1JFR05VTSkKKwl7CisJICBpbmMgPSAoaSA8IENSMTZfRklSU1Rf RFdPUkRfUkVHSVNURVIpID8gMSA6IDI7CisJICBpZiAod29yZF9jbnQgKyBp bmMgPj0gTUFYX0NPVU5UIHx8IEZSQU1FX1BPSU5URVJfUkVHTlVNID09IGkp CisJICAgIHsKKwkgICAgICBzcGxpdF9oZXJlID0gMTsKKwkgICAgICBmcm9t ID0gaTsKKwkgICAgICBjb250aW51ZTsKKwkgICAgfQorCSAgd29yZF9jbnQg Kz0gaW5jOworCX0KKworICAgICAgZnJvbSA9IGktLTsKKyAgICB9CisKKyAg dG1wID0gZ2VuX3J0eF9TRVQgKFNJbW9kZSwgc3RhY2tfcG9pbnRlcl9ydHgs CisJCSAgICAgZ2VuX3J0eF9QTFVTIChTSW1vZGUsIHN0YWNrX3BvaW50ZXJf cnR4LAorCQkJCSAgIEdFTl9JTlQgKC1vZmZzZXQpKSk7CisgIFJUWF9GUkFN RV9SRUxBVEVEX1AgKHRtcCkgPSAxOworICBYVkVDRVhQIChkd2FyZiwgMCwg MCkgPSB0bXA7CisKKyAgYWRkX3JlZ19ub3RlIChpbnNuLCBSRUdfRlJBTUVf UkVMQVRFRF9FWFBSLCBkd2FyZik7Cit9CisKKy8qCitDb21wYWN0UklTQyBD UjE2IEFyY2hpdGVjdHVyZSBzdGFjayBsYXlvdXQ6CisKKyAgICAgMCArLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgICAgfAorICAgIC4KKyAgICAuCisgICAg fAorICAgICs9PT09PT09PT09PT09PT09PT09PSBTcCAoeCkgPSBBcCAoeCsx KQorICAgICAgQSB8IEFyZ3MgZm9yIGZ1bmN0aW9ucworICAgICAgfCB8IGNh bGxlZCBieSBYIGFuZCAgICAgIER5bmFtaWNhbGx5CisgICAgICB8IHwgRHlu YW1pYyBhbGxvY2F0aW9ucyAgYWxsb2NhdGVkIGFuZAorICAgICAgfCB8IChh bGxvY2EsIHZhcmlhYmxlICAgIGRlYWxsb2NhdGVkCisgIFN0YWNrIHwgbGVu Z3RoIGFycmF5cykuCisgIGdyb3dzICstLS0tLS0tLS0tLS0tLS0tLS0tLSBG cCAoeCkKKyAgZG93bnwgfCBMb2NhbCB2YXJpYWJsZXMgb2YgWAorICB3YXJk fCArLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgIHwgfCBSZWdzIHNhdmVk IGZvciBYLTEKKyAgICAgIHwgKz09PT09PT09PT09PT09PT09PT09IFNwICh4 LTEpID0gQXAgKHgpCisgICAgfCBBcmdzIGZvciBmdW5jIFgKKyAgICB8IHB1 c2hlZCBieSBYLTEKKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnAgKHgt MSkKKyAgICB8CisgICAgfAorICAgIFYKKyovCit2b2lkCitjcjE2X2V4cGFu ZF9wcm9sb2d1ZSAodm9pZCkKK3sKKyAgcnR4IGluc247CisKKyAgY3IxNl9j b21wdXRlX2ZyYW1lICgpOworICBjcjE2X2NvbXB1dGVfc2F2ZV9yZWdzICgp OworCisgIC8qIElmIHRoZXJlIGlzIG5vIG5lZWQgaW4gcHVzaCBhbmQgYWRq dXN0bWVudCB0byBzcCwgcmV0dXJuLiAgKi8KKyAgaWYgKChjdXJyZW50X2Zy YW1lX2luZm8udG90YWxfc2l6ZSArIGN1cnJlbnRfZnJhbWVfaW5mby5yZWdf c2l6ZSkgPT0gMCkKKyAgICByZXR1cm47CisKKyAgaWYgKGN1cnJlbnRfZnJh bWVfaW5mby5sYXN0X3JlZ190b19zYXZlICE9IC0xKQorICAgIHsKKyAgICAg IC8qIElmIHRoZXJlIGFyZSByZWdpc3RlcnMgdG8gcHVzaC4gICovCisgICAg ICBpbnNuID0gZW1pdF9pbnNuIChnZW5fcHVzaF9mb3JfcHJvbG9ndWUKKwkJ CShHRU5fSU5UIChjdXJyZW50X2ZyYW1lX2luZm8ucmVnX3NpemUpKSk7Cisg ICAgICBjcjE2X2NyZWF0ZV9kd2FyZl9mb3JfbXVsdGlfcHVzaCAoaW5zbik7 CisgICAgICBSVFhfRlJBTUVfUkVMQVRFRF9QIChpbnNuKSA9IDE7CisgICAg fQorCisKKyAgaWYgKGN1cnJlbnRfZnJhbWVfaW5mby50b3RhbF9zaXplID4g MCkKKyAgICB7CisgICAgICBpbnNuID0gZW1pdF9pbnNuIChnZW5fYWRkc2kz IChzdGFja19wb2ludGVyX3J0eCwgc3RhY2tfcG9pbnRlcl9ydHgsCisJCQkJ ICAgIEdFTl9JTlQgKC1jdXJyZW50X2ZyYW1lX2luZm8udG90YWxfc2l6ZSkp KTsKKyAgICAgIFJUWF9GUkFNRV9SRUxBVEVEX1AgKGluc24pID0gMTsKKyAg ICB9CisKKyAgaWYgKGZyYW1lX3BvaW50ZXJfbmVlZGVkKQorICAgIHsKKyAg ICAgIC8qIEluaXRpYWxpemUgdGhlIGZyYW1lIHBvaW50ZXIgd2l0aCB0aGUg dmFsdWUgb2YgdGhlIHN0YWNrIHBvaW50ZXIKKyAgICAgICAgIHBvaW50aW5n IG5vdyB0byB0aGUgbG9jYWxzLiAgKi8KKyAgICAgIGluc24gPSBlbWl0X21v dmVfaW5zbiAoZnJhbWVfcG9pbnRlcl9ydHgsIHN0YWNrX3BvaW50ZXJfcnR4 KTsKKyAgICB9Cit9CisKKy8qIEdlbmVyYXRlIGluc24gdGhhdCB1cGRhdGVz IHRoZSBzdGFjayBmb3IgbG9jYWwgdmFyaWFibGVzIGFuZCBwYWRkaW5nIAor ICAgZm9yIHJlZ2lzdGVycyB3ZSBzYXZlLiAgIC0gR2VuZXJhdGUgdGhlIGFw cHJvcHJpYXRlIHJldHVybiBpbnNuLiAgKi8KK3ZvaWQKK2NyMTZfZXhwYW5k X2VwaWxvZ3VlICh2b2lkKQoreworICBydHggaW5zbjsKKworICAvKiBOb256 ZXJvIGlmIHdlIG5lZWQgdG8gcmV0dXJuIGFuZCBwb3Agb25seSBSQS4gVGhp cyB3aWxsIGdlbmVyYXRlIGEKKyAgICAgZGlmZmVyZW50IGluc24uIFRoaXMg ZGlmZmVyZW50aWF0ZSBpcyBmb3IgdGhlIHBlZXBob2xlcyBmb3IgY2FsbCBh cyAKKyAgICAgbGFzdCBzdGF0ZW1lbnQgaW4gZnVuY3Rpb24uICAqLworICBp bnQgb25seV9wb3ByZXRfUkEgPSAoY3VycmVudF9mcmFtZV9pbmZvLnNhdmVf cmVnc1tSRVRVUk5fQUREUkVTU19SRUdOVU1dCisJCQkmJiAoY3VycmVudF9m cmFtZV9pbmZvLnJlZ19zaXplIAorCQkJICAgID09IENSMTZfVU5JVFNfUEVS X0RXT1JEKSk7CisgIAorICBpZiAoZnJhbWVfcG9pbnRlcl9uZWVkZWQpCisg ICAgeworICAgICAgLyogUmVzdG9yZSB0aGUgc3RhY2sgcG9pbnRlciB3aXRo IHRoZSBmcmFtZSBwb2ludGVycyB2YWx1ZS4gICovCisgICAgICBpbnNuID0g ZW1pdF9tb3ZlX2luc24gKHN0YWNrX3BvaW50ZXJfcnR4LCBmcmFtZV9wb2lu dGVyX3J0eCk7CisgICAgfQorCisgIGlmIChjdXJyZW50X2ZyYW1lX2luZm8u dG90YWxfc2l6ZSA+IDApCisgICAgeworICAgICAgaW5zbiA9IGVtaXRfaW5z biAoZ2VuX2FkZHNpMyAoc3RhY2tfcG9pbnRlcl9ydHgsIHN0YWNrX3BvaW50 ZXJfcnR4LAorCQkJCSAgICBHRU5fSU5UIChjdXJyZW50X2ZyYW1lX2luZm8u dG90YWxfc2l6ZSkpKTsKKyAgICAgIFJUWF9GUkFNRV9SRUxBVEVEX1AgKGlu c24pID0gMTsKKyAgICB9CisKKyAgaWYgKGNydGwtPmNhbGxzX2VoX3JldHVy bikKKyAgICB7CisgICAgICAvKiBBZGQgdGhpcyBoZXJlIHNvIHRoYXQgKHI1 LCByNCkgaXMgYWN0dWFsbHkgbG9hZGVkIHdpdGggdGhlIGFkanVzdG1lbnQK KyAgICAgICAgIHZhbHVlOyBvdGhlcndpc2UsIHRoZSBsb2FkIG1pZ2h0IGJl IG9wdGltaXplZCBhd2F5Li4uCisgICAgICAgICBOT1RFOiByZW1lbWJlciB0 byBzdWJ0cmFjdCB0aGUgYWRqdXN0bWVudCBiZWZvcmUgcG9wcGluZyB0aGUg cmVncworICAgICAgICAgYW5kIGFkZCBpdCBiYWNrIGJlZm9yZSByZXR1cm5p bmcuICAqLworICAgICAgaW5zbiA9IGVtaXRfaW5zbiAoZ2VuX2FkZHNpMyAo c3RhY2tfcG9pbnRlcl9ydHgsIHN0YWNrX3BvaW50ZXJfcnR4LAorCQkJCSAg ICBFSF9SRVRVUk5fU1RBQ0tBREpfUlRYKSk7CisgICAgfQorCisgIGlmIChj cjE2X2ludGVycnVwdF9mdW5jdGlvbl9wICgpKQorICAgIHsKKyAgICAgIGlu c24gPSBlbWl0X2p1bXBfaW5zbiAoZ2VuX2ludGVycnVwdF9yZXR1cm4gKCkp OworICAgICAgUlRYX0ZSQU1FX1JFTEFURURfUCAoaW5zbikgPSAxOworICAg IH0KKyAgZWxzZSBpZiAoY3J0bC0+Y2FsbHNfZWhfcmV0dXJuKQorICAgIHsK KyAgICAgIC8qIFNwZWNpYWwgY2FzZSwgcG9wIHdoYXQncyBuZWNlc3Nhcnks IGFkanVzdCBTUCBhbmQganVtcCB0byAoUkEpLiAgKi8KKyAgICAgIGluc24g PSBlbWl0X2p1bXBfaW5zbiAoZ2VuX3BvcF9hbmRfcG9wcmV0X3JldHVybiAK KwkJCSAgICAgKEdFTl9JTlQgKGN1cnJlbnRfZnJhbWVfaW5mby5yZWdfc2l6 ZSkpKTsKKyAgICAgIFJUWF9GUkFNRV9SRUxBVEVEX1AgKGluc24pID0gMTsK KyAgICB9CisgIGVsc2UgaWYgKGN1cnJlbnRfZnJhbWVfaW5mby5sYXN0X3Jl Z190b19zYXZlID09IC0xKQorICAgIC8qIE5vdGhpbmcgdG8gcG9wLiAgKi8K KyAgICAvKiBEb24ndCBvdXRwdXQganVtcCBmb3IgaW50ZXJydXB0IHJvdXRp bmUsIG9ubHkgcmV0eC4gICovCisgICAgZW1pdF9qdW1wX2luc24gKGdlbl9q dW1wX3JldHVybiAoKSk7CisgIGVsc2UgaWYgKG9ubHlfcG9wcmV0X1JBKQor ICAgIHsKKyAgICAgIGluc24gPSBlbWl0X2p1bXBfaW5zbiAoZ2VuX3BvcHJl dF9SQV9yZXR1cm4gKCkpOworICAgICAgUlRYX0ZSQU1FX1JFTEFURURfUCAo aW5zbikgPSAxOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGluc24g PSBlbWl0X2p1bXBfaW5zbiAoZ2VuX3BvcF9hbmRfcG9wcmV0X3JldHVybiAK KwkJCSAgICAgKEdFTl9JTlQgKGN1cnJlbnRfZnJhbWVfaW5mby5yZWdfc2l6 ZSkpKTsKKyAgICAgIFJUWF9GUkFNRV9SRUxBVEVEX1AgKGluc24pID0gMTsK KyAgICB9Cit9CisKKy8qIEltcGxlbWVudHMgRlJBTUVfUE9JTlRFUl9SRVFV SVJFRC4gICovCitzdGF0aWMgYm9vbAorY3IxNl9mcmFtZV9wb2ludGVyX3Jl cXVpcmVkICh2b2lkKQoreworICByZXR1cm4gKGNmdW4tPmNhbGxzX2FsbG9j YSB8fCBjcnRsLT5jYWxsc19laF9yZXR1cm4KKwkgIHx8IGNmdW4tPmhhc19u b25sb2NhbF9sYWJlbCB8fCBjcnRsLT5jYWxsc19laF9yZXR1cm4pOworfQor CitzdGF0aWMgYm9vbAorY3IxNl9jYW5fZWxpbWluYXRlIChjb25zdCBpbnQg ZnJvbSBBVFRSSUJVVEVfVU5VU0VELCBjb25zdCBpbnQgdG8pCit7CisgIHJl dHVybiAodG8gPT0gU1RBQ0tfUE9JTlRFUl9SRUdOVU0gPyAhZnJhbWVfcG9p bnRlcl9uZWVkZWQgOiB0cnVlKTsKK30KKworCisvKiBBIEMgY29tcG91bmQg c3RhdGVtZW50IHRoYXQgYXR0ZW1wdHMgdG8gcmVwbGFjZSBYIHdpdGgKKyAg IGEgdmFsaWQgbWVtb3J5IGFkZHJlc3MgZm9yIGFuIG9wZXJhbmQgb2YgbW9k ZSBNT0RFLiBXSU4KKyAgIHdpbGwgYmUgYSBDIHN0YXRlbWVudCBsYWJlbCBl bHNld2hlcmUgaW4gdGhlIGNvZGUuCisgICBYIHdpbGwgYWx3YXlzIGJlIHRo ZSByZXN1bHQgb2YgYSBjYWxsIHRvIGJyZWFrX291dF9tZW1vcnlfcmVmcyAo KSwKKyAgIGFuZCBPTERYIHdpbGwgYmUgdGhlIG9wZXJhbmQgdGhhdCB3YXMg Z2l2ZW4gdG8gdGhhdCBmdW5jdGlvbiB0bworICAgcHJvZHVjZSBYLgorICAg VGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoaXMgbWFjcm8gc2hvdWxkIG5vdCBh bHRlciB0aGUKKyAgIHN1YnN0cnVjdHVyZSBvZiBYLiAgSWYgaXQgdHJhbnNm b3JtcyBYIGludG8gYSBtb3JlIGxlZ2l0aW1hdGUgZm9ybSwgCisgICBpdCBz aG91bGQgYXNzaWduIFggKHdoaWNoIHdpbGwgYWx3YXlzIGJlIGEgQyB2YXJp YWJsZSkgYSBuZXcgdmFsdWUuICAqLworc3RhdGljIHJ0eAorY3IxNl9sZWdp dGltaXplX2FkZHJlc3MgKHJ0eCB4LCBydHggb3JpZ194IEFUVFJJQlVURV9V TlVTRUQsCisJCQkgZW51bSBtYWNoaW5lX21vZGUgbW9kZSBBVFRSSUJVVEVf VU5VU0VEKQoreworICBpZiAoZmxhZ19waWMpCisgICAgcmV0dXJuIGxlZ2l0 aW1pemVfcGljX2FkZHJlc3MgKG9yaWdfeCwgbW9kZSwgTlVMTF9SVFgpOwor ICBlbHNlCisgICAgcmV0dXJuIHg7Cit9CisKKy8qIEltcGxlbWVudCBUQVJH RVRfTEVHSVRJTUFURV9DT05TVEFOVF9QCisgICBOb256ZXJvIGlmIFggaXMg YSBsZWdpdGltYXRlIGNvbnN0YW50IGZvciBhbiBpbW1lZGlhdGUKKyAgIG9w ZXJhbmQgb24gdGhlIHRhcmdldCBtYWNoaW5lLiAgWW91IGNhbiBhc3N1bWUg dGhhdCBYCisgICBzYXRpc2ZpZXMgQ09OU1RBTlRfUC4gSW4gY3IxNmMgdHJl YXQgbGVnaXRpbWl6ZSBmbG9hdCAKKyAgIGNvbnN0YW50IGFzIGFuIGltbWVk aWF0ZSBvcGVyYW5kLiAgKi8KK3N0YXRpYyBib29sCitjcjE2X2xlZ2l0aW1h dGVfY29uc3RhbnRfcCAoZW51bSBtYWNoaW5lX21vZGUgbW9kZSBBVFRSSUJV VEVfVU5VU0VELAorCQkJICAgIHJ0eCB4IEFUVFJJQlVURV9VTlVTRUQpCit7 CisgIHJldHVybiAxOworfQorCit2b2lkCitub3RpY2VfdXBkYXRlX2NjIChy dHggZXhwKQoreworICBpZiAoR0VUX0NPREUgKGV4cCkgPT0gU0VUKQorICAg IHsKKyAgICAgIC8qIEp1bXBzIGRvIG5vdCBhbHRlciB0aGUgY2Mncy4gICov CisgICAgICBpZiAoU0VUX0RFU1QgKGV4cCkgPT0gcGNfcnR4KQorCXJldHVy bjsKKworICAgICAgLyogTW92aW5nIHJlZ2lzdGVyIG9yIG1lbW9yeSBpbnRv IGEgcmVnaXN0ZXI6CisgICAgICAgICBpdCBkb2Vzbid0IGFsdGVyIHRoZSBj YydzLCBidXQgaXQgbWlnaHQgaW52YWxpZGF0ZQorICAgICAgICAgdGhlIFJU WCdzIHdoaWNoIHdlIHJlbWVtYmVyIHRoZSBjYydzIGNhbWUgZnJvbS4KKyAg ICAgICAgIChOb3RlIHRoYXQgbW92aW5nIGEgY29uc3RhbnQgMCBvciAxIE1B WSBzZXQgdGhlIGNjJ3MpLiAgKi8KKyAgICAgIGlmIChSRUdfUCAoU0VUX0RF U1QgKGV4cCkpCisJICAmJiAoUkVHX1AgKFNFVF9TUkMgKGV4cCkpIHx8IEdF VF9DT0RFIChTRVRfU1JDIChleHApKSA9PSBNRU0pKQorCXsKKwkgIHJldHVy bjsKKwl9CisKKyAgICAgIC8qIE1vdmluZyByZWdpc3RlciBpbnRvIG1lbW9y eSBkb2Vzbid0IGFsdGVyIHRoZSBjYydzLgorICAgICAgICAgSXQgbWF5IGlu dmFsaWRhdGUgdGhlIFJUWCdzIHdoaWNoIHdlIHJlbWVtYmVyIHRoZSBjYydz IGNhbWUgZnJvbS4gICovCisgICAgICBpZiAoR0VUX0NPREUgKFNFVF9ERVNU IChleHApKSA9PSBNRU0gJiYgUkVHX1AgKFNFVF9TUkMgKGV4cCkpKQorCXsK KwkgIHJldHVybjsKKwl9CisgICAgfQorCisgIENDX1NUQVRVU19JTklUOwor ICByZXR1cm47Cit9CisKK3N0YXRpYyBlbnVtIG1hY2hpbmVfbW9kZQorY3Ix Nl91bndpbmRfd29yZF9tb2RlICh2b2lkKQoreworICByZXR1cm4gU0ltb2Rl OworfQorCisvKiBIZWxwZXIgZnVuY3Rpb24gZm9yIG1kIGZpbGUuIFRoaXMg ZnVuY3Rpb24gaXMgdXNlZCB0byBlbWl0IGFyaXRobWV0aWMgCisgICBESSBp bnN0cnVjdGlvbnMuIFRoZSBhcmd1bWVudCAibnVtIiBkZWNpZGVzIHdoaWNo IGluc3RydWN0aW9uIHRvIGJlCisgICBwcmludGVkLiAgKi8KK2NvbnN0IGNo YXIgKgorY3IxNl9lbWl0X2FkZF9zdWJfZGkgKHJ0eCAqb3BlcmFuZHMsIGVu dW0gcnR4X2NvZGUgY29kZSkKK3sKKyAgcnR4IGxvX29wWzJdIDsKKyAgcnR4 IGhpMF9vcFsyXSA7CisgIHJ0eCBoaTFfb3BbMl0gOworCisgIGxvX29wWzBd ID0gZ2VuX2xvd3BhcnQgKFNJbW9kZSwgb3BlcmFuZHNbMF0pOworICBoaTBf b3BbMF0gPSBzaW1wbGlmeV9nZW5fc3VicmVnIChISW1vZGUsIG9wZXJhbmRz WzBdLCBESW1vZGUsIDQpOworICBoaTFfb3BbMF0gPSBzaW1wbGlmeV9nZW5f c3VicmVnIChISW1vZGUsIG9wZXJhbmRzWzBdLCBESW1vZGUsIDYpOworCisg IGxvX29wWzFdID0gZ2VuX2xvd3BhcnQgKFNJbW9kZSwgb3BlcmFuZHNbMl0p OworICBoaTBfb3BbMV0gPSBzaW1wbGlmeV9nZW5fc3VicmVnIChISW1vZGUs IG9wZXJhbmRzWzJdLCBESW1vZGUsIDQpOworICBoaTFfb3BbMV0gPSBzaW1w bGlmeV9nZW5fc3VicmVnIChISW1vZGUsIG9wZXJhbmRzWzJdLCBESW1vZGUs IDYpOworCisgIHN3aXRjaCAoY29kZSkKKyAgeworICAgIGNhc2UgUExVUzoK KyAgICAgIHsKKwlvdXRwdXRfYXNtX2luc24gKCJhZGRkXHQlMSwgJTAiLCBs b19vcCkgOworCW91dHB1dF9hc21faW5zbiAoImFkZGN3XHQlMSwgJTAiLCBo aTBfb3ApIDsKKwlvdXRwdXRfYXNtX2luc24gKCJhZGRjd1x0JTEsICUwIiwg aGkxX29wKSA7CisJYnJlYWs7CisgICAgICB9CisgICAgY2FzZSBNSU5VUzoK KyAgICAgIHsKKwlvdXRwdXRfYXNtX2luc24gKCJzdWJkXHQlMSwgJTAiLCBs b19vcCkgOworCW91dHB1dF9hc21faW5zbiAoInN1YmN3XHQlMSwgJTAiLCBo aTBfb3ApIDsKKwlvdXRwdXRfYXNtX2luc24gKCJzdWJjd1x0JTEsICUwIiwg aGkxX29wKSA7CisJYnJlYWs7CisgICAgICB9CisgICBkZWZhdWx0OgorICAg ICBicmVhazsKKyAgfQorCisgIHJldHVybiAiIjsKK30KKworCisvKiBIZWxw ZXIgZnVuY3Rpb24gZm9yIG1kIGZpbGUuIFRoaXMgZnVuY3Rpb24gaXMgdXNl ZCB0byBlbWl0IGxvZ2ljYWwgCisgICBESSBpbnN0cnVjdGlvbnMuIFRoZSBh cmd1bWVudCAibnVtIiBkZWNpZGVzIHdoaWNoIGluc3RydWN0aW9uIHRvIGJl CisgICBwcmludGVkLiAgKi8KK2NvbnN0IGNoYXIgKgorY3IxNl9lbWl0X2xv Z2ljYWxfZGkgKHJ0eCAqb3BlcmFuZHMsIGVudW0gcnR4X2NvZGUgY29kZSkK K3sKKyAgcnR4IGxvX29wWzJdIDsKKyAgcnR4IGhpX29wWzJdIDsKKworICBs b19vcFswXSA9IGdlbl9sb3dwYXJ0IChTSW1vZGUsIG9wZXJhbmRzWzBdKTsK KyAgaGlfb3BbMF0gPSBzaW1wbGlmeV9nZW5fc3VicmVnIChTSW1vZGUsIG9w ZXJhbmRzWzBdLCBESW1vZGUsIDQpOworCisgIGxvX29wWzFdID0gZ2VuX2xv d3BhcnQgKFNJbW9kZSwgb3BlcmFuZHNbMl0pOworICBoaV9vcFsxXSA9IHNp bXBsaWZ5X2dlbl9zdWJyZWcgKFNJbW9kZSwgb3BlcmFuZHNbMl0sIERJbW9k ZSwgNCk7CisKKyAgc3dpdGNoIChjb2RlKQorICB7CisgICAgY2FzZSBBTkQ6 CisgICAgICB7CisJb3V0cHV0X2FzbV9pbnNuICgiYW5kZFx0JTEsICUwIiwg bG9fb3ApIDsKKwlvdXRwdXRfYXNtX2luc24gKCJhbmRkXHQlMSwgJTAiLCBo aV9vcCkgOworCXJldHVybiAiIjsKKyAgICAgIH0KKyAgICBjYXNlIElPUjoK KyAgICAgIHsKKwlvdXRwdXRfYXNtX2luc24gKCJvcmRcdCUxLCAlMCIsIGxv X29wKSA7CisJb3V0cHV0X2FzbV9pbnNuICgib3JkXHQlMSwgJTAiLCBoaV9v cCkgOworCXJldHVybiAiIjsKKyAgICAgIH0KKyAgICBjYXNlIFhPUjoKKyAg ICAgIHsKKwlvdXRwdXRfYXNtX2luc24gKCJ4b3JkXHQlMSwgJTAiLCBsb19v cCkgOworCW91dHB1dF9hc21faW5zbiAoInhvcmRcdCUxLCAlMCIsIGhpX29w KSA7CisJcmV0dXJuICIiOworICAgICAgfQorICAgIGRlZmF1bHQ6CisgICAg ICBicmVhazsKKyAgfQorCisgIHJldHVybiAiIjsKK30KKworLyogSW5pdGlh bGl6ZSAndGFyZ2V0bScgdmFyaWFibGUgd2hpY2ggY29udGFpbnMgcG9pbnRl cnMgdG8gZnVuY3Rpb25zIAorICAgYW5kIGRhdGEgcmVsYXRpbmcgdG8gdGhl IHRhcmdldCBtYWNoaW5lLiAgKi8KKworc3RydWN0IGdjY190YXJnZXQgdGFy Z2V0bSA9IFRBUkdFVF9JTklUSUFMSVpFUjsKLS0tIGdjYy9jb25maWcvY3Ix Ni9jcjE2LmgJMTk3MC0wMS0wMSAwNTozMDowMC4wMDAwMDAwMDAgKzA1MzAK KysrIGdjYy9jb25maWcvY3IxNi9jcjE2LmgJMjAxMS0xMS0yOCAxMjo0Njo0 MC4wMDAwMDAwMDAgKzA1MzAKQEAgLTAsMCArMSw1OTAgQEAKKy8qIERlZmlu aXRpb25zIG9mIHRhcmdldCBtYWNoaW5lIGZvciBHTlUgY29tcGlsZXIsIGZv ciBDUjE2LgorICAgQ29weXJpZ2h0IChDKSAyMDExIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgS1BJVCBDdW1t aW5zIEluZm9zeXN0ZW1zIExpbWl0ZWQuCisKKyAgIFRoaXMgZmlsZSBpcyBw YXJ0IG9mIEdDQy4KKworICAgR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug YXMgcHVibGlzaGVkCisgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91cgorICAgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgR0NDIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRI T1VUCisgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMKKyAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAg WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggR0NDOyBzZWUg dGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisgICA8aHR0cDovL3d3 dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworICAgCisjaWZuZGVmIEdDQ19D UjE2X0gKKyNkZWZpbmUgR0NDX0NSMTZfSAorCisjZGVmaW5lIE9CSkVDVF9G T1JNQVRfRUxGCisKKy8qIENvbnRyb2xsaW5nIHRoZSBkcml2ZXIuICAqLwor CisvKiBUaGUgR05VIEMrKyBzdGFuZGFyZCBsaWJyYXJ5IHJlcXVpcmVzIHRo YXQgdGhlc2UgbWFjcm9zIGJlIGRlZmluZWQuICAqLworI3VuZGVmIENQTFVT UExVU19DUFBfU1BFQworI2RlZmluZSBDUExVU1BMVVNfQ1BQX1NQRUMgIi1E X0dOVV9TT1VSQ0UgJShjcHApIgorCisjdW5kZWYgIFNUQVJURklMRV9TUEVD CisjZGVmaW5lIFNUQVJURklMRV9TUEVDICJjcnQxLm8lcyBjcnRpLm8lcyBj cnRiZWdpbi5vJXMgY3J0bGliaWQubyVzIgorCisjdW5kZWYgIEVOREZJTEVf U1BFQworI2RlZmluZSBFTkRGSUxFX1NQRUMgImNydGVuZC5vJXMgY3J0bi5v JXMiCisKKyN1bmRlZiAgTUFUSF9MSUJSQVJZCisjZGVmaW5lIE1BVEhfTElC UkFSWSAiIgorCisjdW5kZWYgIExJQl9TUEVDCisjZGVmaW5lIExJQl9TUEVD ICItKCAtbGMgJXttc2ltKjotbHNpbX0leyFtc2ltKjotbG5vc3lzfSAtKSBc Cisle21zaW0qOiV7IVQqOi1Uc2ltLmxkfX0gXAorJXshVCo6JXshbXNpbSo6 ICV7LVRlbGYzMmNyMTYueH19fSIKKworLyogUnVuLXRpbWUgdGFyZ2V0IHNw ZWNpZmljYXRpb24uICAqLworI2lmbmRlZiBUQVJHRVRfQ1BVX0NQUF9CVUlM VElOUworI2RlZmluZSBUQVJHRVRfQ1BVX0NQUF9CVUlMVElOUygpICAgICAg ICAgIFwKK2RvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorICAgIGJ1aWx0aW5fZGVmaW5lICgiX19DUl9fIik7ICAgICAg ICAgICAgIFwKKyAgICBidWlsdGluX2RlZmluZSAoIl9fQ1IxNl9fIik7ICAg ICAgICAgICBcCisgICAgYnVpbHRpbl9kZWZpbmUgKCJfX0NSMTZDX18iKTsg ICAgICAgICAgXAorICAgIGlmIChUQVJHRVRfQ1IxNkNQKSAgICAgICAgICAg ICAgICAgICAgIFwKKyAgICAgIGJ1aWx0aW5fZGVmaW5lICgiX19DUjE2Q1Bf XyIpOyAgICAgICBcCisgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorICAgICAgYnVpbHRpbl9kZWZpbmUgKCJfX0NSMTZD U1REX18iKTsgICAgIFwKKyAgICBpZiAoQ1IxNl9UQVJHRVRfREFUQV9ORUFS KSAgICAgICAgICAgICBcCisgICAgICBidWlsdGluX2RlZmluZSAoIl9fREFU QV9ORUFSX18iKTsgICAgXAorICAgIGlmIChDUjE2X1RBUkdFVF9EQVRBX01F RElVTSkgICAgICAgICAgIFwKKyAgICAgIGJ1aWx0aW5fZGVmaW5lICgiX19E QVRBX01FRElVTV9fIik7ICBcCisgICAgaWYgKENSMTZfVEFSR0VUX0RBVEFf RkFSKSAgICAgICAgICAgICAgXAorICAgICAgYnVpbHRpbl9kZWZpbmUgKCJf X0RBVEFfRkFSX18iKTsgICAgIFwKKyAgICBpZiAoVEFSR0VUX0lOVDMyKSAg ICAgICAgICAgICAgICAgICAgICBcCisgICAgICBidWlsdGluX2RlZmluZSAo Il9fSU5UMzJfXyIpOyAgICAgICAgXAorICB9ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKK3doaWxlICgwKQorI2VuZGlmCisK Ky8qIEZvcmNlIHRoZSBnZW5lcmF0aW9uIG9mIGR3YXJmIC5kZWJ1Z19mcmFt ZSBzZWN0aW9ucyBldmVuIGlmIG5vdAorICAgY29tcGlsaW5nIC1nLiAgVGhp cyBndWFyYW50ZWVzIHRoYXQgd2UgY2FuIHVud2luZCB0aGUgc3RhY2suICAq LworI2RlZmluZSBEV0FSRjJfRlJBTUVfSU5GTyAxCisKKyNkZWZpbmUgUFJF RkVSUkVEX0RFQlVHR0lOR19UWVBFIERXQVJGMl9ERUJVRworCisvKiBHZW5l cmF0ZSAuZmlsZS8ubG9jIGRpcmVjdGl2ZXMsIHNvIHRoYXQgdGhlIGFzc2Vt YmxlciBnZW5lcmF0ZXMgdGhlCisgICBsaW5lIHRhYmxlLiAgKi8KKyNkZWZp bmUgRFdBUkYyX0FTTV9MSU5FX0RFQlVHX0lORk8gMQorCisjZGVmaW5lIENS MTZfVEFSR0VUX0RBVEFfTkVBUiAgIGNyMTZfaXNfZGF0YV9tb2RlbCAoRE1f TkVBUikKKyNkZWZpbmUgQ1IxNl9UQVJHRVRfREFUQV9NRURJVU0gY3IxNl9p c19kYXRhX21vZGVsIChETV9ERUZBVUxUKQorI2RlZmluZSBDUjE2X1RBUkdF VF9EQVRBX0ZBUiAgICBjcjE2X2lzX2RhdGFfbW9kZWwgKERNX0ZBUikKKwor LyogU3RvcmFnZSBsYXlvdXQuICAqLworI2RlZmluZSBCSVRTX0JJR19FTkRJ QU4gICAgIDAKKworI2RlZmluZSBCWVRFU19CSUdfRU5ESUFOICAgIDAKKwor I2RlZmluZSBXT1JEU19CSUdfRU5ESUFOICAgIDAKKworI2RlZmluZSBVTklU U19QRVJfV09SRCAgICAgIDIKKworLyogVW5pdHMgcGVyIDMyLWJpdCAoRFdP UkQpLiAgKi8KKyNkZWZpbmUgQ1IxNl9VTklUU19QRVJfRFdPUkQgNAorCisj ZGVmaW5lIFBPSU5URVJfU0laRSAgICAgICAgMzIKKworI2RlZmluZSBQQVJN X0JPVU5EQVJZICAgICAgIDE2CisKKyNkZWZpbmUgU1RBQ0tfQk9VTkRBUlkg ICAgICAoTUFYIChCSUdHRVNUX0FMSUdOTUVOVCwgUEFSTV9CT1VOREFSWSkp CisKKyNkZWZpbmUgRlVOQ1RJT05fQk9VTkRBUlkgICBCSUdHRVNUX0FMSUdO TUVOVAorCisvKiBCaWdnZXN0IGFsaWdubWVudCBvbiBDUjE2QysgaXMgMzIt Yml0IGFzIGludGVybmFsIGJ1cyBpcyBBTUJBIGJhc2VkIAorICAgd2hlcmUg YXMgQ1IxNkMgaXMgcHJvcHJpZXRhcnkgaW50ZXJuYWwgYnVzIGFyY2hpdGVj dHVyZS4gICovCisjZGVmaW5lIEJJR0dFU1RfQUxJR05NRU5UICAgKChUQVJH RVRfQ1IxNkNQKSA/IDMyIDogMTYpCisKKyNkZWZpbmUgTUFYX0ZJWEVEX01P REVfU0laRSA2NAorCisvKiBJbiBDUjE2IGFycmF5cyBvZiBjaGFycyBhcmUg d29yZC1hbGlnbmVkLCBzbyBzdHJjcHkgKCkgd2lsbCBiZSBmYXN0ZXIuICAq LworI2RlZmluZSBEQVRBX0FMSUdOTUVOVChUWVBFLCBBTElHTikgICAgICAg ICAgICAgIFwKKyAgKCgoVFJFRV9DT0RFIChUWVBFKSA9PSBBUlJBWV9UWVBF KSAgICAgICAgICAgICBcCisgICAgICYmIChUWVBFX01PREUgKFRSRUVfVFlQ RSAoVFlQRSkpID09IFFJbW9kZSkgXAorICAgICAmJiAoKEFMSUdOKSA8IEJJ VFNfUEVSX1dPUkQpKSAgICAgICAgICAgICAgIFwKKyAgICAgPyAoQklUU19Q RVJfV09SRCkgOiAoQUxJR04pKQorCisvKiBJbiBDUjE2IHN0cmluZ3MgYXJl IHdvcmQtYWxpZ25lOyBzdHJjcHkgZnJvbSBjb25zdGFudHMgd2lsbCBiZSBm YXN0ZXIuICAqLworI2RlZmluZSBDT05TVEFOVF9BTElHTk1FTlQoQ09OU1RB TlQsIEFMSUdOKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICgo KFRSRUVfQ09ERSAoQ09OU1RBTlQpID09IFNUUklOR19DU1QpICYmICgoQUxJ R04pIDwgQklUU19QRVJfV09SRCkpIFwKKyAgICAgPyAoQklUU19QRVJfV09S RCkgOiAoQUxJR04pKQorCisjZGVmaW5lIFNUUklDVF9BTElHTk1FTlQgMAor CisjZGVmaW5lIFBDQ19CSVRGSUVMRF9UWVBFX01BVFRFUlMgMQorCisvKiBM YXlvdXQgb2Ygc291cmNlIGxhbmd1YWdlIGRhdGEgdHlwZXMuICAqLworI2Rl ZmluZSBJTlRfVFlQRV9TSVpFICAgICAgIChUQVJHRVRfSU5UMzIgPyAzMiA6 IDE2KQorCisjZGVmaW5lIFNIT1JUX1RZUEVfU0laRSAgICAgMTYKKworI2Rl ZmluZSBMT05HX1RZUEVfU0laRSAgICAgIDMyCisKKyNkZWZpbmUgTE9OR19M T05HX1RZUEVfU0laRSA2NAorCisjZGVmaW5lIEZMT0FUX1RZUEVfU0laRSAg ICAgMzIKKworI2RlZmluZSBET1VCTEVfVFlQRV9TSVpFICAgIDY0CisKKyNk ZWZpbmUgTE9OR19ET1VCTEVfVFlQRV9TSVpFIDY0CisKKyNkZWZpbmUgREVG QVVMVF9TSUdORURfQ0hBUiAxCisKKyNkZWZpbmUgU0laRV9UWVBFICAgICAg ICAgICAibG9uZyB1bnNpZ25lZCBpbnQiCisKKyNkZWZpbmUgUFRSRElGRl9U WVBFICAgICAgICAibG9uZyBpbnQiCisKKyNkZWZpbmUgV0NIQVJfVFlQRSAg ICAgICAgICAic2hvcnQgdW5zaWduZWQgaW50IgorCisjZGVmaW5lIFdDSEFS X1RZUEVfU0laRSAgICAgMTYKKworLyogQnkgZGVmYXVsdCwgdGhlIEMrKyBj b21waWxlciB3aWxsIHVzZSB0aGUgbG93ZXN0IGJpdCBvZiB0aGUgcG9pbnRl cgorICAgdG8gZnVuY3Rpb24gdG8gaW5kaWNhdGUgYSBwb2ludGVyLXRvLW1l bWJlci1mdW5jdGlvbiBwb2ludHMgdG8gYQorICAgdmlydHVhbCBtZW1iZXIg ZnVuY3Rpb24uICBIb3dldmVyLCBpbiBDUiBhcmNoaXRlY3R1cmUgRlVOQ1RJ T05fQk9VTkRBUlkKKyAgIGluZGljYXRlcyBmdW5jdGlvbiBhZGRyZXNzZXMg YXJlIGFsd2F5cyBldmVuLCBidXQgZnVuY3Rpb24gcG9pbnRlcnMgY2FuIGJl CisgICBvZGQgKGFmdGVyIHJpZ2h0LXNoaWZ0aW5nIHRoZW0gd2hlbiBsb2Fk aW5nIHRoZW0gaW50byBhIHJlZ2lzdGVyKSwgYW5kIHRoZQorICAgZGVmYXVs dCBkb2Vzbid0IHdvcmsuICBJbiB0aGF0IGNhc2UsIHRoZSBsb3dlc3QgYml0 IG9mIHRoZSBkZWx0YQorICAgZmllbGQgd2lsbCBiZSB1c2VkICh0aGUgcmVt YWluZGVyIG9mIHRoZSBmaWVsZCBpcyBzaGlmdGVkIHRvIHRoZSBsZWZ0KS4g ICovCisjZGVmaW5lIFRBUkdFVF9QVFJNRU1GVU5DX1ZCSVRfTE9DQVRJT04g ICAgIHB0cm1lbWZ1bmNfdmJpdF9pbl9kZWx0YQorCisvKiBEZWZpbmUgREVG QVVMVF9QQ0NfU1RSVUNUX1JFVFVSTiB0byAxIGlmIGFsbCBzdHJ1Y3R1cmUg YW5kIHVuaW9uIHJldHVybgorICAgdmFsdWVzIG11c3QgYmUgaW4gbWVtb3J5 LiAgKi8KKyNkZWZpbmUgREVGQVVMVF9QQ0NfU1RSVUNUX1JFVFVSTiAwCisK Ky8qIFJlZ2lzdGVyIHVzYWdlLiAgKi8KKworLyogRmlyc3QgMzItYml0IHJl Z2lzdGVyIGlzIFIxMi4gICovCisjZGVmaW5lIENSMTZfRklSU1RfRFdPUkRf UkVHSVNURVIgICAxMgorCisjZGVmaW5lIEZJUlNUX1BTRVVET19SRUdJU1RF UiAgICAgICAxNgorCisvKiAxIGZvciByZWdpc3RlcnMgdGhhdCBoYXZlIHBl cnZhc2l2ZSBzdGFuZGFyZCB1c2VzCisgICBhbmQgYXJlIG5vdCBhdmFpbGFi bGUgZm9yIHRoZSByZWdpc3RlciBhbGxvY2F0b3IuCisgICBPbiB0aGUgQ1Ix Niwgb25seSB0aGUgc3RhY2sgcG9pbnRlciAocjE1KSBpcyBzdWNoLiAgKi8K KyNkZWZpbmUgRklYRURfUkVHSVNURVJTICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgLyogcjAgIHIxICByMiAgcjMg IHI0ICByNSAgcjYgIHI3ICByOCAgcjkgIHIxMC4gICovIFwKKyAgICAwLCAg MCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgICAgICAg IFwKKyAgLyogcjExIHIxMiByMTMgcmEgIHNwLiAgKi8gICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyAgICAwLCAgMCwgIDAsICAwLCAgMSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSAgICAgIAorCisvKiAx IGZvciByZWdpc3RlcnMgbm90IGF2YWlsYWJsZSBhY3Jvc3MgZnVuY3Rpb24g Y2FsbHMuCisgICBUaGVzZSBtdXN0IGluY2x1ZGUgdGhlIEZJWEVEX1JFR0lT VEVSUyBhbmQgYWxzbyBhbnkKKyAgIHJlZ2lzdGVycyB0aGF0IGNhbiBiZSB1 c2VkIHdpdGhvdXQgYmVpbmcgc2F2ZWQuCisgICBUaGUgbGF0dGVyIG11c3Qg aW5jbHVkZSB0aGUgcmVnaXN0ZXJzIHdoZXJlIHZhbHVlcyBhcmUgcmV0dXJu ZWQKKyAgIGFuZCB0aGUgcmVnaXN0ZXIgd2hlcmUgc3RydWN0dXJlLXZhbHVl IGFkZHJlc3NlcyBhcmUgcGFzc2VkLgorIAorICAgT24gdGhlIENSMTYsIGNh bGxzIGNsb2JiZXJzIHIwLXI2IChzY3JhdGNoIHJlZ2lzdGVycyksIAorICAg cmEgKHRoZSByZXR1cm4gYWRkcmVzcykgYW5kIHNwICh0aGUgc3RhY2sgcG9p bnRlcikuICAqLworI2RlZmluZSBDQUxMX1VTRURfUkVHSVNURVJTICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorICB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAvKiByMCAg cjEgIHIyICByMyAgcjQgIHI1ICByNiAgcjcgIHI4ICByOSAgcjEwLiAgKi8g XAorICAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAs ICAwLCAgICAgICAgXAorICAvKiByMTEgcjEyIHIxMyByYSAgc3AuICAqLyAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIDAsICAwLCAgMCwgIDEs ICAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9CisK Ky8qIFJldHVybnMgMSBpZiB0aGUgcmVnaXN0ZXIgaXMgbG9uZ2VyIHRoYW4g d29yZCBzaXplLCAwIG90aGVyd2lzZS4gICovCisjZGVmaW5lIExPTkdfUkVH X1AoUkVHTk8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKyAgKEhBUkRfUkVHTk9fTlJFR1MgKFJFR05P LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorCQkgICAgIEdFVF9NT0RFX1dJREVSX01PREUgKHNtYWxsZXN0 X21vZGVfZm9yX3NpemUJICAgICBcCisJCQkJCSAoQklUU19QRVJfV09SRCwg TU9ERV9JTlQpKSkgPT0gMSkKKworI2RlZmluZSBIQVJEX1JFR05PX05SRUdT KFJFR05PLCBNT0RFKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICgoUkVHTk8gPj0gQ1IxNl9GSVJTVF9EV09SRF9SRUdJ U1RFUikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorICA/ICgoR0VUX01PREVfU0laRSAoTU9ERSkgKyBDUjE2X1VOSVRTX1BF Ul9EV09SRCAtIDEpIC8gQ1IxNl9VTklUU19QRVJfRFdPUkQpXAorICA6ICgo R0VUX01PREVfU0laRSAoTU9ERSkgKyBVTklUU19QRVJfV09SRCAgICAgICAt IDEpIC8gVU5JVFNfUEVSX1dPUkQpKQorCisvKiBOb256ZXJvIGlmIGl0IGlz IHBlcm1pc3NpYmxlIHRvIHN0b3JlIGEgdmFsdWUgb2YgbW9kZSBAdmFye21v ZGV9IGluIGhhcmQKKyAgIHJlZ2lzdGVyIG51bWJlciBAdmFye3JlZ25vfSAo b3IgaW4gc2V2ZXJhbCByZWdpc3RlcnMgc3RhcnRpbmcgd2l0aCB0aGF0Cisg ICBvbmUpLiAgT24gdGhlIENSMTYgYXJjaGl0ZWN0dXJlLCBhbGwgcmVnaXN0 ZXJzIGNhbiBob2xkIGFsbCBtb2RlcywKKyAgIGV4Y2VwdCB0aGF0IGRvdWJs ZSBwcmVjaXNpb24gZmxvYXRzIChhbmQgZG91YmxlIGludHMpIG11c3QgZmFs bCBvbgorICAgZXZlbi1yZWdpc3RlciBib3VuZGFyaWVzLiAgKi8gCisjZGVm aW5lIEhBUkRfUkVHTk9fTU9ERV9PSyhSRUdOTywgTU9ERSkgY3IxNl9oYXJk X3JlZ25vX21vZGVfb2sgKFJFR05PLCBNT0RFKQorCisjZGVmaW5lIE5PVElD RV9VUERBVEVfQ0MoRVhQLCBJTlNOKSBcCisgICBub3RpY2VfdXBkYXRlX2Nj ICgoRVhQKSkKKworLyogSW50ZXJydXB0IGZ1bmN0aW9ucyBjYW4gb25seSB1 c2UgcmVnaXN0ZXJzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gCisgICBzYXZl ZCBieSB0aGUgcHJvbG9ndWUsIGV2ZW4gaWYgdGhleSB3b3VsZCBub3JtYWxs eSBiZSBjYWxsLWNsb2JiZXJlZCAKKyAgIENoZWNrIGlmIHNpemVzIGFyZSBz YW1lIGFuZCB0aGVuIGNoZWNrIGlmIGl0IGlzIHBvc3NpYmxlIHRvIHJlbmFt ZS4gICovCisjZGVmaW5lIEhBUkRfUkVHTk9fUkVOQU1FX09LKFNSQywgREVT VCkgICAgICAgICAgICAgICAgIFwKKyAgKCFjcjE2X2ludGVycnVwdF9mdW5j dGlvbl9wICgpIHx8IChkZl9yZWdzX2V2ZXJfbGl2ZV9wIChERVNUKSkpCisK Ky8qIEV4Y2VwdGlvbiBoYW5kbGluZyBzdHVmZi4gICovCisKKy8qVG8gZW5z dXJlIGNvcnJlY3QgZHdhcmYgdW53aW5kaW5nLiAgKi8KKyNkZWZpbmUgTElC R0NDMl9VTldJTkRfQVRUUklCVVRFIF9fYXR0cmlidXRlX18oKG9wdGltaXpl ICgibm8tZ2NzZSIsIm5vLWRzZSIpKSkKKworI2RlZmluZSBnZW5fcnR4X1JB CWdlbl9ydHhfUkVHIChQbW9kZSwgUkVUVVJOX0FERFJFU1NfUkVHTlVNKQor CisvKiBVc2UgKHI4LHI3KSBhbmQgKHIxMCxyOSkgdG8gcGFzcyBleGNlcHRp b24gaGFuZGxpbmcgaW5mb3JtYXRpb24uICAqLworI2RlZmluZSBFSF9SRVRV Uk5fREFUQV9SRUdOTyhOKSAoKChOKSA8IDIpID8gKE4qMiArIDcpIDogSU5W QUxJRF9SRUdOVU0pCisKKyNkZWZpbmUgRFdBUkYyX1VOV0lORF9JTkZPIDEK KworLyogKHI1LHI0KSBob2xkcyBhIHN0YWNrIGFkanVzdG1lbnQgZm9yIHJl dHVybmluZyB0byBhIGhhbmRsZXIuICAqLworI2RlZmluZSBFSF9SRVRVUk5f U1RBQ0tBREpfUlRYIAkJZ2VuX3J0eF9SRUcgKFBtb2RlLCA0KQorCisjZGVm aW5lIEVIX1JFVFVSTl9IQU5ETEVSX1JUWCBcCisgIGdlbl9ydHhfTUVNIChQ bW9kZSwgcGx1c19jb25zdGFudCAoYXJnX3BvaW50ZXJfcnR4LCAtNCkpCisK KyNkZWZpbmUgSU5DT01JTkdfUkVUVVJOX0FERFJfUlRYCWdlbl9ydHhfUkEK KworI2RlZmluZSBEV0FSRl9GUkFNRV9SRVRVUk5fQ09MVU1OCVwKKyAgRFdB UkZfRlJBTUVfUkVHTlVNIChSRVRVUk5fQUREUkVTU19SRUdOVU0pCisKKyNk ZWZpbmUgSU5DT01JTkdfRlJBTUVfU1BfT0ZGU0VUCQkwCQorI2RlZmluZSBG UkFNRV9QT0lOVEVSX0NGQV9PRkZTRVQoRk5ERUNMKQkwCQorCisvKiBBIEMg ZXhwcmVzc2lvbiB3aG9zZSB2YWx1ZSBpcyBSVEwgcmVwcmVzZW50aW5nIHRo ZSB2YWx1ZSBvZiB0aGUgcmV0dXJuCisgICBhZGRyZXNzIGZvciB0aGUgZnJh bWUgQ09VTlQgc3RlcHMgdXAgZnJvbSB0aGUgY3VycmVudCBmcmFtZS4gICov CisjZGVmaW5lIFJFVFVSTl9BRERSX1JUWChDT1VOVCwgRlJBTUUpIAkJCSAg CQlcCisgICgwID09IENPVU5UKQk/ICBnZW5fcnR4X1BMVVMgKFBtb2RlLCBn ZW5fcnR4X1JBLCBnZW5fcnR4X1JBKQkJXAorCQk6ICBjb25zdDBfcnR4CisK KyNkZWZpbmUgTU9ERVNfVElFQUJMRV9QKE1PREUxLCBNT0RFMikgIFwKKyAg KEdFVF9NT0RFX0NMQVNTIChNT0RFMSkgPT0gR0VUX01PREVfQ0xBU1MgKE1P REUyKSkKKworZW51bSByZWdfY2xhc3MKK3sKKyAgTk9fUkVHUywKKyAgU0hP UlRfUkVHUywKKyAgTE9OR19SRUdTLAorICBOT1NQX1JFR1MsCisgIERPVUJM RV9CQVNFX1JFR1MsCisgIEdFTkVSQUxfUkVHUywKKyAgQUxMX1JFR1MsCisg IExJTV9SRUdfQ0xBU1NFUworfTsKKworI2RlZmluZSBOX1JFR19DTEFTU0VT IChpbnQpIExJTV9SRUdfQ0xBU1NFUworCisjZGVmaW5lIFJFR19DTEFTU19O QU1FUwlcCisgIHsJCQlcCisgICAgIk5PX1JFR1MiLAkJXAorICAgICJTSE9S VF9SRUdTIiwJXAorICAgICJMT05HX1JFR1MiLAlcCisgICAgIk5PU1BfUkVH UyIsCVwKKyAgICAiRE9VQkxFX0JBU0VfUkVHUyIsCVwKKyAgICAiR0VORVJB TF9SRUdTIiwJXAorICAgICJBTExfUkVHUyIJCVwKKyAgfQorCisjZGVmaW5l IFJFR19DTEFTU19DT05URU5UUwkJCSAgICAgCQlcCisgIHsJCQkJCQkgICAg IAkJXAorICAgIHsweDAwMDAwMDAwfSwgLyogTk9fUkVHUwkJICAgICAgICAg ICAgICovICAJXAorICAgIHsweDAwMDAwRkZGfSwgLyogU0hPUlRfUkVHUyAJ OiAwIC0gMTEgICAgICovICAgCVwKKyAgICB7MHgwMDAwRjAwMH0sIC8qIExP TkdfUkVHUyAJCTogMTIgLSAxNSAgICAqLyAgCVwKKyAgICB7MHgwMDAwN0ZG Rn0sIC8qIE5PU1BfUkVHUyAJCTogMCAtIDE0ICAgICAqLyAgIAlcCisgICAg ezB4MDAwMEY1NTV9LCAvKiBET1VCTEVfQkFTRV9SRUdTICAgOiAyLDQsNiw4 LDEwICovICAJXAorICAgIHsweDAwMDBGRkZGfSwgLyogR0VORVJBTF9SRUdT CTogMCAtIDE1ICAgICAqLyAgCVwKKyAgICB7MHgwMDAwRkZGRn0gIC8qIEFM TF9SRUdTIAkJOiAwIC0gMTUgICAgICovICAJXAorICB9CisKKyNkZWZpbmUg VEFSR0VUX1NNQUxMX1JFR0lTVEVSX0NMQVNTRVNfRk9SX01PREVfUCAgaG9v a19ib29sX21vZGVfdHJ1ZSAKKworI2RlZmluZSBSRUdOT19SRUdfQ0xBU1Mo UkVHTk8pICBjcjE2X3JlZ25vX3JlZ19jbGFzcyAoUkVHTk8pCisKKyNkZWZp bmUgQkFTRV9SRUdfQ0xBU1MgICAgICBHRU5FUkFMX1JFR1MKKworI2RlZmlu ZSBNT0RFX0JBU0VfUkVHX0NMQVNTKE1PREUpIFwKKyAgKEdFVF9NT0RFX1NJ WkUgKE1PREUpIDw9IDQgPyAgKEJBU0VfUkVHX0NMQVNTKSA6ICAoRE9VQkxF X0JBU0VfUkVHUykpCisKKyNkZWZpbmUgSU5ERVhfUkVHX0NMQVNTICAgICAg TE9OR19SRUdTCisKKyNkZWZpbmUgQ1IxNl9SRUdOT19PS19GT1JfQkFTRV9Q KFJFR05PKSAgICAgICAgICAgICAgICAgIFwKKyAgKCgoUkVHTk8pIDwgRklS U1RfUFNFVURPX1JFR0lTVEVSKSAgICAgICAgICAgICAgICAgICAgIFwKKyAg ICAgfHwgKHJlZ19yZW51bWJlciAmJiAoKHVuc2lnbmVkKSByZWdfcmVudW1i ZXJbUkVHTk9dIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIDwgRklSU1Rf UFNFVURPX1JFR0lTVEVSKSkpCisKKy8qIFVzZSBldmVuLW51bWJlcmVkIHJl ZyBmb3IgNjQtYml0IGFjY2Vzc2VzLiAgKi8KKyNkZWZpbmUgUkVHTk9fTU9E RV9PS19GT1JfQkFTRV9QKFJFR05PLCBNT0RFKQkgIFwKKwkoQ1IxNl9SRUdO T19PS19GT1JfQkFTRV9QKFJFR05PKSAgJiYJICBcCisJICAoKEdFVF9NT0RF X1NJWkUgKE1PREUpID4gNCAgJiYgIAkgIFwKKwkgICAgIChSRUdOTykgPCBD UjE2X0ZJUlNUX0RXT1JEX1JFR0lTVEVSKSBcCisJICAgICA/ICgwID09ICgo UkVHTk8pICYgMSkpIAkJICBcCisJICAgICA6IDEpKQorCisvKiBUT0RPOiBG b3Igbm93IGxldHMgbm90IHN1cHBvcnQgaW5kZXggYWRkcmVzc2luZyBtb2Rl LiAgKi8KKyNkZWZpbmUgUkVHTk9fT0tfRk9SX0lOREVYX1AoUkVHTk8pICAg ICAgICBcCisgICgoKFJFR05PID49IENSMTZfRklSU1RfRFdPUkRfUkVHSVNU RVIpICAgXAorICAgICAmJiAoKFJFR05PKSA8IEZJUlNUX1BTRVVET19SRUdJ U1RFUikpIFwKKyAgIHx8IChyZWdfcmVudW1iZXIgICAgICAgICAgICAgICAg ICAgICAgICBcCisgICAgICAgJiYgKCgodW5zaWduZWQpIHJlZ19yZW51bWJl cltSRUdOT10gPj0gQ1IxNl9GSVJTVF9EV09SRF9SRUdJU1RFUikgIFwKKyAg ICAgICAgICAgICYmICgodW5zaWduZWQpIHJlZ19yZW51bWJlcltSRUdOT10g PCBGSVJTVF9QU0VVRE9fUkVHSVNURVIpKSkgXAorICApCisKKyNkZWZpbmUg UFJFRkVSUkVEX1JFTE9BRF9DTEFTUyhYLCBDTEFTUykgQ0xBU1MKKworLyog VGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHJlZ2lzdGVycyBv ZiBjbGFzcyBDTEFTUyBuZWVkZWQgdG8KKyAgIGhvbGQgYSB2YWx1ZSBvZiBt b2RlIE1PREUuCisgICBPbiB0aGUgQ29tcGFjdFJJU0MgYXJjaGl0ZWN0dXJl LCB0aGUgc2l6ZSBvZiBNT0RFIGluIHdvcmRzLgorICAgVGhlIHNpemUgb2Yg TU9ERSBpbiBkb3VibGUgd29yZHMgZm9yIHRoZSBjbGFzcyBMT05HX1JFR1Mu CisKKyAgIFRoZSBmb2xsb3dpbmcgY2hlY2sgYXNzdW1lcyBpZiB0aGUgY2xh c3MgaXMgbm90IExPTkdfUkVHUywgdGhlbgorICAgYWxsIChOT19SRUdTLCBT SE9SVF9SRUdTLCBOT1NQX1JFR1MgYW5kIEdFTkVSQUxfUkVHUykgb3RoZXIg Y2xhc3NlcyBhcmUgCisgICBzaG9ydC4gIFdlIG1heSBoYXZlIHRvIGNoZWNr IGlmIHRoaXMgY2FuIGNhdXNlIGFueSBkZWdyYWRhdGlvbiBpbiAKKyAgIHBl cmZvcm1hbmNlLiAgKi8KKyNkZWZpbmUgQ0xBU1NfTUFYX05SRUdTKENMQVNT LCBNT0RFKSBcCisgIChDTEFTUyA9PSBMT05HX1JFR1MgXAorICAgPyAoR0VU X01PREVfU0laRSAoTU9ERSkgKyBDUjE2X1VOSVRTX1BFUl9EV09SRCAtIDEp IC8gQ1IxNl9VTklUU19QRVJfRFdPUkRcCisgICA6IChHRVRfTU9ERV9TSVpF IChNT0RFKSArIFVOSVRTX1BFUl9XT1JEIC0gMSkgLyBVTklUU19QRVJfV09S RCkKKworLyogTWFjcm9zIHRvIGNoZWNrIHRoZSByYW5nZSBvZiBpbnRlZ2Vy cyAuIFRoZXNlIG1hY3JvcyB3ZXJlIHVzZWQgYWNyb3NzCisgICB0aGUgcG9y dCwgbWFqb3JseSBpbiBjb25zdHJhaW50cy5tZCwgcHJlZGljYXRlcy5tZCBm aWxlcy4gKi8KKyNkZWZpbmUgU0lHTkVEX0lOVF9GSVRTX05fQklUUyhpbW0s IE4pICAgICAgICAgICBcCisgICgoKChpbW0pIDwgKChIT1NUX1dJREVfSU5U KSAxIDw8ICgoTikgLSAxKSkpICAgICAgIFwKKyAgICAgICYmICgoaW1tKSA+ PSAtKChIT1NUX1dJREVfSU5UKSAxIDw8ICgoTikgLSAxKSkpKSA/IDEgOiAw KQorCisjZGVmaW5lIFVOU0lHTkVEX0lOVF9GSVRTX05fQklUUyhpbW0sIE4p IFwKKyAgKCgoaW1tKSA8ICgoSE9TVF9XSURFX0lOVCkgMSA8PCAoTikpICYm IChpbW0pID49IChIT1NUX1dJREVfSU5UKSAwKSA/IDEgOiAwKQorCisjZGVm aW5lIElOX1JBTkdFX1AoVkFMVUUsIExPVywgSElHSCkgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorICAoKCgoSE9TVF9XSURFX0lOVCkoVkFMVUUp KSA+PSAoSE9TVF9XSURFX0lOVCkoTE9XKSkgICAgICAgICAgIFwKKyAgICYm ICgoKEhPU1RfV0lERV9JTlQpKFZBTFVFKSkgPD0gKChIT1NUX1dJREVfSU5U KShISUdIKSkpKQorCisjZGVmaW5lIElOX1JBTihWQUxVRSwgTE9XLCBISUdI KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoKCgoKEhPU1Rf V0lERV9JTlQpKFZBTFVFKSkgPj0gKEhPU1RfV0lERV9JTlQpKExPVykpICAg ICAgIFwKKyAgICYmICgoKEhPU1RfV0lERV9JTlQpKFZBTFVFKSkgPD0gKChI T1NUX1dJREVfSU5UKShISUdIKSkpKSA/IDEgOiAwKQorCisvKiBUaGlzIGNo ZWNrIGlzIGZvciBzYml0L2NiaXQgaW5zdHJ1Y3Rpb24uICAqLworI2RlZmlu ZSBPS19GT1JfWihPUCkgXAorICAoKEdFVF9DT0RFIChPUCkgPT0gTUVNICYm IEdFVF9DT0RFIChYRVhQIChPUCwgMCkpID09IENPTlNUX0lOVCkgXAorICAg fHwgKEdFVF9DT0RFIChPUCkgPT0gTUVNICYmIEdFVF9DT0RFIChYRVhQIChP UCwgMCkpID09IFJFRykgXAorICAgfHwgKEdFVF9DT0RFIChPUCkgPT0gTUVN ICYmIEdFVF9DT0RFIChYRVhQIChPUCwgMCkpID09IFBMVVMgXAorICAgICAg ICYmIEdFVF9DT0RFIChYRVhQICgoWEVYUCAoT1AsIDApKSwgMCkpID09IFJF RyBcCisgICAgICAgJiYgR0VUX0NPREUgKFhFWFAgKChYRVhQIChPUCwgMCkp LCAxKSkgPT0gQ09OU1RfSU5UKSkKKworLyogU3RhY2sgbGF5b3V0IGFuZCBj YWxsaW5nIGNvbnZlbnRpb25zLiAgKi8KKyNkZWZpbmUgU1RBQ0tfR1JPV1Nf RE9XTldBUkQKKworI2RlZmluZSBTVEFSVElOR19GUkFNRV9PRkZTRVQgICAw CisKKyNkZWZpbmUgU1RBQ0tfUE9JTlRFUl9SRUdOVU0gICAgMTUKKworI2Rl ZmluZSBGUkFNRV9QT0lOVEVSX1JFR05VTSAgICAxMworCisjZGVmaW5lIEFS R19QT0lOVEVSX1JFR05VTSAgICAgIDEyCisKKyNkZWZpbmUgU1RBVElDX0NI QUlOX1JFR05VTSAgICAgMQorCisjZGVmaW5lIFJFVFVSTl9BRERSRVNTX1JF R05VTSAgIDE0CisKKyNkZWZpbmUgRklSU1RfUEFSTV9PRkZTRVQoRk5ERUNM KSAwCisKKyNkZWZpbmUgRUxJTUlOQUJMRV9SRUdTICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7IEFSR19QT0lOVEVSX1JF R05VTSwgICBTVEFDS19QT0lOVEVSX1JFR05VTX0sIFwKKyAgICB7IEFSR19Q T0lOVEVSX1JFR05VTSwgICBGUkFNRV9QT0lOVEVSX1JFR05VTX0sIFwKKyAg ICB7IEZSQU1FX1BPSU5URVJfUkVHTlVNLCBTVEFDS19QT0lOVEVSX1JFR05V TX0gIFwKKyAgfQorCisjZGVmaW5lIElOSVRJQUxfRUxJTUlOQVRJT05fT0ZG U0VUKEZST00sIFRPLCBPRkZTRVQpICAgICAgICAgICAgICBcCisgIGRvICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg ICAoT0ZGU0VUKSA9IGNyMTZfaW5pdGlhbF9lbGltaW5hdGlvbl9vZmZzZXQg KChGUk9NKSwgKFRPKSk7ICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg IHdoaWxlICgwKQorCisvKiBQYXNzaW5nIGZ1bmN0aW9uIGFyZ3VtZW50cy4g ICovCisKKyNkZWZpbmUgQUNDVU1VTEFURV9PVVRHT0lOR19BUkdTIDAKKwor I2RlZmluZSBQVVNIX0FSR1MgMQorCisjZGVmaW5lIFBVU0hfUk9VTkRJTkco QllURVMpICgoKEJZVEVTKSArIDEpICYgfjEpCisKKyNpZm5kZWYgQ1VNVUxB VElWRV9BUkdTCitzdHJ1Y3QgY3VtdWxhdGl2ZV9hcmdzCit7CisgIGludCBp bnRzOworICBpbnQgbGFzdF9wYXJtX2luX3JlZzsKK307CisKKyNkZWZpbmUg Q1VNVUxBVElWRV9BUkdTIHN0cnVjdCBjdW11bGF0aXZlX2FyZ3MKKyNlbmRp ZgorCisvKiBPbiB0aGUgQ1IxNiBhcmNoaXRlY3R1cmUsIFZhcmFyZ3Mgcm91 dGluZXMgc2hvdWxkIHJlY2VpdmUgdGhlaXIgcGFyYW1ldGVycyAKKyAgIG9u IHRoZSBzdGFjay4gICovCisKKyNkZWZpbmUgSU5JVF9DVU1VTEFUSVZFX0FS R1MoQ1VNLCBGTlRZUEUsIExJQk5BTUUsIEZOREVDTCwgTl9OQU1FRF9BUkdT KSBcCisgIGNyMTZfaW5pdF9jdW11bGF0aXZlX2FyZ3MgKCYoQ1VNKSwgKEZO VFlQRSksIChMSUJOQU1FKSkKKworI2RlZmluZSBGVU5DVElPTl9BUkdfUkVH Tk9fUChSRUdOTykgIGNyMTZfZnVuY3Rpb25fYXJnX3JlZ25vX3AgKFJFR05P KQorCisvKiBHZW5lcmF0aW5nIGNvZGUgZm9yIHByb2ZpbGluZyAtIE5PVCBJ TVBMRU1FTlRFRC4gICovCisjdW5kZWYgIEZVTkNUSU9OX1BST0ZJTEVSCisj ZGVmaW5lIEZVTkNUSU9OX1BST0ZJTEVSKFNUUkVBTSwgTEFCRUxOTykgICAg ICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisgIHNvcnJ5ICgicHJvZmlsZXIgc3VwcG9ydCBmb3IgQ1Ix NiIpOyAgICAgICAgICBcCit9CisKKy8qIFRyYW1wb2xpbmVzIGZvciBuZXN0 ZWQgZnVuY3Rpb25zIC0gTk9UIFNVUFBPUlRFRC4gICovCisjZGVmaW5lIFRS QU1QT0xJTkVfU0laRSAgICAxNgorCisvKiBBRERSRVNTSU5HIE1PREVTLiAg Ki8KKworI2RlZmluZSBDT05TVEFOVF9BRERSRVNTX1AoWCkgICAgICAgXAor ICAoR0VUX0NPREUgKFgpID09IExBQkVMX1JFRiAgICAgICAgXAorICAgfHwg R0VUX0NPREUgKFgpID09IFNZTUJPTF9SRUYgICAgXAorICAgfHwgR0VUX0NP REUgKFgpID09IENPTlNUICAgICAgICAgXAorICAgfHwgR0VUX0NPREUgKFgp ID09IENPTlNUX0lOVCkKKworI2RlZmluZSBNQVhfUkVHU19QRVJfQUREUkVT UyAgICAyCisKKyNkZWZpbmUgSEFWRV9QT1NUX0lOQ1JFTUVOVCAgICAgMAor I2RlZmluZSBIQVZFX1BPU1RfREVDUkVNRU5UICAgICAwCisjZGVmaW5lIEhB VkVfUE9TVF9NT0RJRllfRElTUCAgIDAKKyNkZWZpbmUgSEFWRV9QT1NUX01P RElGWV9SRUcgICAgMAorCisjaWZkZWYgUkVHX09LX1NUUklDVAorI2RlZmlu ZSBDUjE2X1JFR19PS19GT1JfQkFTRV9QKFgpCUNSMTZfUkVHTk9fT0tfRk9S X0JBU0VfUCAoUkVHTk8gKFgpKQorI2RlZmluZSBSRUdfTU9ERV9PS19GT1Jf QkFTRV9QKFgsIE1PREUpCVwKKyAgUkVHTk9fTU9ERV9PS19GT1JfQkFTRV9Q IChSRUdOTyhYKSwgTU9ERSkKKyNkZWZpbmUgUkVHX09LX0ZPUl9JTkRFWF9Q KFgpICAgUkVHTk9fT0tfRk9SX0lOREVYX1AgKFJFR05PIChYKSkKKyNlbHNl IC8qIG5vdCBSRUdfT0tfU1RSSUNULiAgKi8KKyNkZWZpbmUgQ1IxNl9SRUdf T0tfRk9SX0JBU0VfUChYKQkxCisjZGVmaW5lIFJFR19NT0RFX09LX0ZPUl9C QVNFX1AoWCwgTU9ERSkJMQorI2RlZmluZSBSRUdfT0tfRk9SX0lOREVYX1Ao WCkgICAxCisjZW5kaWYgLyogbm90IFJFR19PS19TVFJJQ1QuICAqLworCisv KiBHbyB0byBMQUJFTCBpZiBBRERSIChhIGxlZ2l0aW1hdGUgYWRkcmVzcyBl eHByZXNzaW9uKSBoYXMgCisgICBhbiBlZmZlY3QgdGhhdCBkZXBlbmRzIG9u IHRoZSBtYWNoaW5lIG1vZGUgaXQgaXMgdXNlZCBmb3IuICAqLworI2RlZmlu ZSBHT19JRl9NT0RFX0RFUEVOREVOVF9BRERSRVNTKEFERFIsIExBQkVMKQor CisvKiBBc3N1bWUgYmVzdCBjYXNlIChicmFuY2ggcHJlZGljdGVkKS4gICov CisjZGVmaW5lIEJSQU5DSF9DT1NUKHNwZWVkX3AsIHByZWRpY3RhYmxlX3Ap ICAgICAgIDIKKworI2RlZmluZSBTTE9XX0JZVEVfQUNDRVNTICAxCisKKy8q IEl0IGlzIGFzIGdvb2Qgb3IgYmV0dGVyIHRvIGNhbGwgYSBjb25zdGFudCBm dW5jdGlvbiBhZGRyZXNzIHRoYW4gdG8KKyAgIGNhbGwgYW4gYWRkcmVzcyBr ZXB0IGluIGEgcmVnaXN0ZXIuICAqLworI2RlZmluZSBOT19GVU5DVElPTl9D U0UKKworLyogRGl2aWRpbmcgdGhlIG91dHB1dCBpbnRvIHNlY3Rpb25zLiAg Ki8KKworI2RlZmluZSBURVhUX1NFQ1RJT05fQVNNX09QICJcdC5zZWN0aW9u XHQudGV4dCIKKworI2RlZmluZSBEQVRBX1NFQ1RJT05fQVNNX09QICJcdC5z ZWN0aW9uXHQuZGF0YSIKKworI2RlZmluZSBCU1NfU0VDVElPTl9BU01fT1Ag ICJcdC5zZWN0aW9uXHQuYnNzIgorCisvKiBQb3NpdGlvbiBpbmRlcGVuZGVu dCBjb2RlIChQSUMpLiAgKi8KKy8qIE5FQVJfUElDIGZvciAtZnBpYyBvcHRp b24uICAqLworCisjZGVmaW5lIE5FQVJfUElDIDEKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCisvKiBGQVJfUElDIGZvciAtZlBJ QyBvcHRpb24uICAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorCisjZGVmaW5lIEZBUl9QSUMgIDIKKworI2RlZmluZSBQ SUNfT0ZGU0VUX1RBQkxFX1JFR05VTSAgMTIKKworI2RlZmluZSBMRUdJVElN QVRFX1BJQ19PUEVSQU5EX1AoWCkgbGVnaXRpbWF0ZV9waWNfb3BlcmFuZF9w IChYKSAgICAgICAKKworLyogQXNzZW1ibGVyIGZvcm1hdC4gICovCisKKy8q IENoYXJhY3RlciB0byBzdGFydCBhIGNvbW1lbnQuICAqLworI2RlZmluZSBB U01fQ09NTUVOVF9TVEFSVCAiIyIKKworI2RlZmluZSBHTE9CQUxfQVNNX09Q ICJcdC5nbG9ibFx0IgorCisjdW5kZWYgVVNFUl9MQUJFTF9QUkVGSVgKKyNk ZWZpbmUgVVNFUl9MQUJFTF9QUkVGSVggIl8iCisKKyN1bmRlZiBBU01fT1VU UFVUX0xBQkVMUkVGCisjZGVmaW5lIEFTTV9PVVRQVVRfTEFCRUxSRUYoU1RS RUFNLCBOQU1FKSBcCisgIGFzbV9mcHJpbnRmIChTVFJFQU0sICIlVSVzIiwg KCp0YXJnZXRtLnN0cmlwX25hbWVfZW5jb2RpbmcpIChOQU1FKSk7CisKKyNk ZWZpbmUgQVNNX09VVFBVVF9TWU1CT0xfUkVGKFNUUkVBTSwgU1lNQk9MKSAg IFwKKyAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyAgICAgIGNvbnN0IGNoYXIgKnJuID0gWFNUUiAo U1lNQk9MLCAwKTsgICAgICAgIFwKKyAgICAgIGFzc2VtYmxlX25hbWUgKFNU UkVBTSwgcm4pOyAgICAgICAgICAgICAgIFwKKyAgICAgIGlmIChTWU1CT0xf UkVGX0ZVTkNUSU9OX1AgKFNZTUJPTCkpICAgICAgIFwKKyAgICAgIHsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg ICAgZnByaW50ZiAoKFNUUkVBTSksICJAYyIpOyAgICAgICAgICAgICAgIFwK KyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKyAgd2hpbGUgKDApCisKKyN1bmRlZiBBU01fQVBQX09O CisjZGVmaW5lIEFTTV9BUFBfT04gICAiI0FQUFxuIgorCisjdW5kZWYgQVNN X0FQUF9PRkYKKyNkZWZpbmUgQVNNX0FQUF9PRkYgICIjTk9fQVBQXG4iCisK Ky8qIFN3aXRjaCBpbnRvIGEgZ2VuZXJpYyBzZWN0aW9uLiAgKi8KKyNkZWZp bmUgVEFSR0VUX0FTTV9OQU1FRF9TRUNUSU9OCWRlZmF1bHRfZWxmX2FzbV9u YW1lZF9zZWN0aW9uCisKKyN1bmRlZiBJTklUX1NFQ1RJT05fQVNNX09QCisj ZGVmaW5lIElOSVRfU0VDVElPTl9BU01fT1AJCSJcdC5zZWN0aW9uXHQuaW5p dCIKKworI3VuZGVmIEZJTklfU0VDVElPTl9BU01fT1AKKyNkZWZpbmUgRklO SV9TRUNUSU9OX0FTTV9PUAkJIlx0LnNlY3Rpb25cdC5maW5pIgorCisvKiBJ bnN0cnVjdGlvbiBvdXRwdXQuICAqLworCisjZGVmaW5lIFJFR0lTVEVSX05B TUVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorICAgICJyMCIsICAicjEiLCAgInIyIiwgICJyMyIs ICAicjQiLCAgInI1IiwgICJyNiIsICAicjciLCBcCisgICAgInI4IiwgICJy OSIsICAicjEwIiwgInIxMSIsICJyMTIiLCAicjEzIiwgInJhIiwgICJzcCIg IFwKKyAgfQorCisvKiBPdXRwdXQgb2YgZGlzcGF0Y2ggdGFibGVzLiAgKi8K KworLyogUmV2aXNpdC4gTm8gUEMgcmVsYXRpdmUgY2FzZSBhcyBsYWJlbCBl eHByZXNzaW9ucyBhcmUgbm90IAorICAgcHJvcGVybHkgc3VwcG9ydGVkIGlu IGJpbnV0aWxzIGVsc2Ugd2UgY291bGQgaGF2ZSBkb25lIHRoaXM6CisgICAj ZGVmaW5lIENBU0VfVkVDVE9SX1BDX1JFTEFUSVZFIChvcHRpbWl6ZV9zaXpl ID8gMSA6IDApLiAgKi8KKyNkZWZpbmUgQ0FTRV9WRUNUT1JfUENfUkVMQVRJ VkUgMAorCisjZGVmaW5lIEFTTV9PVVRQVVRfQUREUl9ESUZGX0VMVChGSUxF LCBCT0RZLCBWQUxVRSwgUkVMKSAgICBcCisgICgoR0VUX01PREUgKEJPRFkp ID09IFFJbW9kZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg ICA/IGZwcmludGYgKChGSUxFKSwgIlx0LmJ5dGUgKC5MJWQtLkwlZCkgPj4g MVxuIiwgICAgICAgICBcCisgICAgICAgICAgICAgIFZBTFVFLCBSRUwpICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICA6IGZwcmlu dGYgKChGSUxFKSwgIlx0LndvcmQgKC5MJWQtLkwlZCkgPj4gMVxuIiwgICAg ICAgICBcCisgICAgICAgICAgICAgIFZBTFVFLCBSRUwpKQorCisjZGVmaW5l IEFTTV9PVVRQVVRfQUREUl9WRUNfRUxUKFNUUkVBTSwgVkFMVUUpIFwKKyAg YXNtX2ZwcmludGYgKChTVFJFQU0pLCAiXHQubG9uZ1x0LkwlZEBjXG4iLCAo VkFMVUUpKQorCisvKiBBbGlnbm1lbnQgaW4gYXNzZW1ibGVyIGZpbGUuICAq LworCisjZGVmaW5lIEFTTV9PVVRQVVRfQUxJR04oU1RSRUFNLCBQT1dFUikg XAorICBhc21fZnByaW50ZiAoKFNUUkVBTSksICJcdC5hbGlnblx0JWRcbiIs IDEgPDwgKFBPV0VSKSkKKworLyogTWlzY2VsbGFuZW91cyBwYXJhbWV0ZXJz LiAgKi8KKworI2RlZmluZSBDQVNFX1ZFQ1RPUl9NT0RFICBQbW9kZQorCisj ZGVmaW5lIE1PVkVfTUFYIDQKKworI2RlZmluZSBUUlVMWV9OT09QX1RSVU5D QVRJT04oT1VUUFJFQywgSU5QUkVDKSAgMQorCisjZGVmaW5lIFNUT1JFX0ZM QUdfVkFMVUUgIDEKKworI2RlZmluZSBQbW9kZSBTSW1vZGUKKworI2RlZmlu ZSBGVU5DVElPTl9NT0RFIFFJbW9kZQorCisvKiBEZWZpbmUgdGhpcyBib29s ZWFuIG1hY3JvKHMpIHRvIGluZGljYXRlIHdoZXRoZXIgb3Igbm90IHlvdXIg YXJjaGl0ZWN0dXJlCisgICBoYXMgKHVuKWNvbmRpdGlvbmFsIGJyYW5jaGVz IHRoYXQgY2FuIHNwYW4gYWxsIG9mIG1lbW9yeS4gIEl0IGlzIHVzZWQgaW4K KyAgIGNvbmp1bmN0aW9uIHdpdGggYW4gb3B0aW1pemF0aW9uIHRoYXQgcGFy dGl0aW9ucyBob3QgYW5kIGNvbGQgYmFzaWMgYmxvY2tzCisgICBpbnRvIHNl cGFyYXRlIHNlY3Rpb25zIG9mIHRoZSBleGVjdXRhYmxlLgorICAgQ1IxNiBj b250YWlucyBicmFuY2ggaW5zdHJ1Y3Rpb25zIHRoYXQgc3BhbiB3aG9sZSBh ZGRyZXNzIHNwYWNlLiAgKi8KKyNkZWZpbmUgSEFTX0xPTkdfQ09ORF9CUkFO Q0ggICAgMQorI2RlZmluZSBIQVNfTE9OR19VTkNPTkRfQlJBTkNIICAxCisK KyNlbmRpZiAvKiBFbmQgb2YgR0NDX0NSMTZfSC4gICovCi0tLSBnY2MvY29u ZmlnL2NyMTYvY3IxNi5tZAkxOTcwLTAxLTAxIDA1OjMwOjAwLjAwMDAwMDAw MCArMDUzMAorKysgZ2NjL2NvbmZpZy9jcjE2L2NyMTYubWQJMjAxMS0xMS0y OCAxMjo0Njo0MC4wMDAwMDAwMDAgKzA1MzAKQEAgLTAsMCArMSwxMDg0IEBA Cis7OyBHQ0MgbWFjaGluZSBkZXNjcmlwdGlvbiBmb3IgQ1IxNi4KKzs7IENv cHlyaWdodCAoQykgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu Yy4KKzs7IENvbnRyaWJ1dGVkIGJ5IEtQSVQgQ3VtbWlucyBJbmZvc3lzdGVt cyBMaW1pdGVkLgorCis7OyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisK Kzs7IEdDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Cis7OyB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eQorOzsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZl cnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorOzsgYW55IGxhdGVyIHZl cnNpb24uCisKKzs7IEdDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorOzsgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Yg TUVSQ0hBTlRBQklMSVRZCis7OyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljCis7OyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKzs7IFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlCis7OyBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJ TkczLiAgSWYgbm90IHNlZQorOzsgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNl bnNlcy8+LiAKKworOzsgIFJlZ2lzdGVyIG51bWJlcnMKKyhkZWZpbmVfY29u c3RhbnRzCisgIFsoU1BfUkVHTlVNIDE1KTsgU3RhY2sgcG9pbnRlcgorICAg KFJBX1JFR05VTSAxNCk7IFJldHVybiBhZGRyZXNzCisgIF0KKykKKworOzsg UHJlZGljYXRlcyAmIENvbnN0cmFpbnRzCisoaW5jbHVkZSAicHJlZGljYXRl cy5tZCIpCisoaW5jbHVkZSAiY29uc3RyYWludHMubWQiKQorCis7OyBVTlNQ RUMgdXNhZ2UKKyhkZWZpbmVfY29uc3RhbnRzCisgIFsoVU5TUEVDX1BJQ19B RERSICAgICAgICAgICAgIDApCisgICAoVU5TUEVDX1BJQ19MT0FEX0FERFIg ICAgICAgIDEpCisgICAoVU5TUEVDX0xJQlJBUllfT0ZGU0VUICAgICAgIDIp CisgICAoVU5TUEVDX1NIX0xJQl9QVVNIX1IxMiAgICAgIDMpCisgICAoVU5T UEVDX1NIX0xJQl9QT1BfUjEyICAgICAgIDQpCisgICAoVU5TUEVDX1JFVFVS Tl9BRERSICAgICAgICAgIDUpCisgIF0KKykKKworOzsgQXR0cmlidXRlcwor KGRlZmluZV9hdHRyICJsZW5ndGgiICIiIChjb25zdF9pbnQgMikpCisKKyhk ZWZpbmVfYXNtX2F0dHJpYnV0ZXMKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAi MiIpXQorKQorCis7OyAgTW9kZSBNYWNybyBEZWZpbml0aW9ucworKGRlZmlu ZV9tb2RlX2l0ZXJhdG9yIENSMTZJTSBbUUkgSEkgU0ldKQorKGRlZmluZV9t b2RlX2l0ZXJhdG9yIExPTkcgICBbU0kgU0ZdKQorKGRlZmluZV9tb2RlX2l0 ZXJhdG9yIEFMTE1URCBbUUkgSEkgU0kgU0YgREkgREZdKQorKGRlZmluZV9t b2RlX2l0ZXJhdG9yIERPVUJMRSBbREkgREZdKQorKGRlZmluZV9tb2RlX2l0 ZXJhdG9yIFNIT1JUICBbUUkgSEldKQorKGRlZmluZV9tb2RlX2F0dHIgdElz YSAgICAgICBbKFFJICJiIikgKEhJICJ3IikgKFNJICJkIikgKFNGICJkIild KQorKGRlZmluZV9tb2RlX2F0dHIgbEltbUFyaXRoICBbKFFJICI0IikgKEhJ ICI0IikgKFNJICI2IikgKFNGICI2IildKQorKGRlZmluZV9tb2RlX2F0dHIg bEltbUFyaXRoRCBbKFFJICI0IikgKEhJICI0IikgKFNJICI2IikgKFNGICI2 IikgKERJICIxMiIpIChERiAiMTIiKV0pCisoZGVmaW5lX21vZGVfYXR0ciBp RiAgICAgICAgIFsoUUkgImkiKSAoSEkgImkiKSAoU0kgImkiKSAoU0YgIkYi KV0pCisoZGVmaW5lX21vZGVfYXR0ciBpRkQgICAgICAgIFsoREkgImkiKSAo REYgIkYiKV0pCisoZGVmaW5lX21vZGVfYXR0ciBMTCAgICAgICAgIFsoUUkg IkwiKSAoSEkgIkwiKV0pCisoZGVmaW5lX21vZGVfYXR0ciBzaEltbUJpdHMg IFsoUUkgIjMiKSAoSEkgIjQiKSAoU0kgIjUiKV0pCisKKzsgSW4gUUkgbW9k ZSB3ZSBwdXNoIDIgYnl0ZXMgaW5zdGVhZCBvZiAxIGJ5dGUuCisoZGVmaW5l X21vZGVfYXR0ciBwdXNoQ25zdHIgWyhRSSAiWCIpIChISSAiPCIpIChTSSAi PCIpIChTRiAiPCIpIChESSAiPCIpIChERiAiPCIpXSkKKworOyB0cHVzaCB3 aWxsIGJlIHVzZWQgdG8gZ2VuZXJhdGUgdGhlICdudW1iZXIgb2YgcmVnaXN0 ZXJzIHRvIHB1c2gnIGluIHRoZSAKKzsgcHVzaCBpbnN0cnVjdGlvbi4KKyhk ZWZpbmVfbW9kZV9hdHRyIHRwdXNoIFsoUUkgIjEiKSAoSEkgIjEiKSAoU0kg IjIiKSAoU0YgIjIiKSAoREkgIjQiKSAoREYgIjQiKV0pCisKKzs7ICBDb2Rl IE1hY3JvIERlZmluaXRpb25zCisoZGVmaW5lX2NvZGVfYXR0ciAgc0lzYSAg ICBbKHNpZ25fZXh0ZW5kICIiKSAgKHplcm9fZXh0ZW5kICJ1IildKQorKGRl ZmluZV9jb2RlX2F0dHIgIHNQYXQgICAgWyhzaWduX2V4dGVuZCAicyIpICh6 ZXJvX2V4dGVuZCAidSIpXSkKKyhkZWZpbmVfY29kZV9hdHRyICBzelBhdCAg IFsoc2lnbl9leHRlbmQgIiIpICAoemVyb19leHRlbmQgInplcm9fIildKQor KGRlZmluZV9jb2RlX2F0dHIgIHN6SXNhICAgWyhzaWduX2V4dGVuZCAieCIp ICh6ZXJvX2V4dGVuZCAieiIpXSkKKworKGRlZmluZV9jb2RlX2l0ZXJhdG9y IHN6X3h0bmQgICAgWyBzaWduX2V4dGVuZCAgICAgICB6ZXJvX2V4dGVuZF0p CisoZGVmaW5lX2NvZGVfaXRlcmF0b3IgYW55X2NvbmQgICBbZXEgbmUgZ3Qg Z3R1IGx0IGx0dSBnZSBnZXUgbGUgbGV1XSkKKyhkZWZpbmVfY29kZV9pdGVy YXRvciBwbHVzbWludXMgIFtwbHVzIG1pbnVzXSkKKworKGRlZmluZV9jb2Rl X2F0dHIgcGx1c21pbnVzX2luc24gWyhwbHVzICJhZGQiKSAobWludXMgInN1 YiIpXSkKKyhkZWZpbmVfY29kZV9hdHRyIHBsdXNtaW51c19mbGFnIFsocGx1 cyAiUExVUyIpIChtaW51cyAiTUlOVVMiKV0pCisoZGVmaW5lX2NvZGVfYXR0 ciBjb21tIAkJIFsocGx1cyAiJSIpIChtaW51cyAiIildKQorCisoZGVmaW5l X2NvZGVfaXRlcmF0b3IgYW55X2xvZ2ljICBbYW5kIGlvciB4b3JdKQorKGRl ZmluZV9jb2RlX2F0dHIgbG9naWMgCSBbKGFuZCAiYW5kIikgKGlvciAib3Ii KSAoeG9yICJ4b3IiKV0pCisoZGVmaW5lX2NvZGVfYXR0ciBhbnlfbG9naWNf aW5zbiBbKGFuZCAiYW5kIikgKGlvciAiaW9yIikgKHhvciAieG9yIildKQor KGRlZmluZV9jb2RlX2F0dHIgYW55X2xvZ2ljX2ZsYWcgWyhhbmQgIkFORCIp IChpb3IgIklPUiIpICh4b3IgIlhPUiIpXSkKKworKGRlZmluZV9tb2RlX2l0 ZXJhdG9yIFFIIAkgW1FJIEhJXSkKKyhkZWZpbmVfbW9kZV9hdHRyIHFoIAkJ IFsoUUkgInFpIikgKEhJICJoaSIpXSkKKyhkZWZpbmVfbW9kZV9hdHRyIFFI c3ogCQkgWyhRSSAiMiwyLDIiKSAoSEkgIjIsMiw0IildKQorKGRlZmluZV9t b2RlX2F0dHIgUUhzdWZmaXggCSBbKFFJICJiIikgKEhJICJ3IildKQorCisK Kzs7ICBGdW5jdGlvbiBQcm9sb2d1ZSBhbmQgRXBpbG9ndWUKKyhkZWZpbmVf ZXhwYW5kICJwcm9sb2d1ZSIKKyAgWyhjb25zdF9pbnQgMCldCisgICIiCisg IHsKKyAgICBjcjE2X2V4cGFuZF9wcm9sb2d1ZSAoKTsKKyAgICBET05FOwor ICB9CispCisKKyhkZWZpbmVfaW5zbiAicHVzaF9mb3JfcHJvbG9ndWUiCisg IFsoc2V0IChyZWc6U0kgU1BfUkVHTlVNKQorCShtaW51czpTSSAocmVnOlNJ IFNQX1JFR05VTSkKKwkJICAobWF0Y2hfb3BlcmFuZDpTSSAwICJpbW1lZGlh dGVfb3BlcmFuZCIgImkiKSkpXQorICAicmVsb2FkX2NvbXBsZXRlZCIKKyAg eworICAgIHJldHVybiBjcjE2X3ByZXBhcmVfcHVzaF9wb3Bfc3RyaW5nICgw KTsKKyAgfQorICBbKHNldF9hdHRyICJsZW5ndGgiICI0IildCispCisKKyhk ZWZpbmVfZXhwYW5kICJlcGlsb2d1ZSIKKyAgWyhyZXR1cm4pXQorICAiIgor ICB7CisgICAgY3IxNl9leHBhbmRfZXBpbG9ndWUgKCk7CisgICAgRE9ORTsK KyAgfQorKQorCisoZGVmaW5lX2luc24gInBvcF9hbmRfcG9wcmV0X3JldHVy biIKKyAgWyhzZXQgKHJlZzpTSSBTUF9SRUdOVU0pCisJKHBsdXM6U0kgKHJl ZzpTSSBTUF9SRUdOVU0pCisJCSAobWF0Y2hfb3BlcmFuZDpTSSAwICJpbW1l ZGlhdGVfb3BlcmFuZCIgImkiKSkpCisgICAodXNlIChyZWc6U0kgUkFfUkVH TlVNKSkKKyAgIChyZXR1cm4pXQorICAicmVsb2FkX2NvbXBsZXRlZCIKKyAg eworICAgIHJldHVybiBjcjE2X3ByZXBhcmVfcHVzaF9wb3Bfc3RyaW5nICgx KTsKKyAgfQorICBbKHNldF9hdHRyICJsZW5ndGgiICI0IildCispCisKKyhk ZWZpbmVfaW5zbiAicG9wcmV0X1JBX3JldHVybiIKKyAgWyh1c2UgKHJlZzpT SSBSQV9SRUdOVU0pKQorICAgKHJldHVybildCisgICJyZWxvYWRfY29tcGxl dGVkIgorICAicG9wcmV0XHRyYSIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAi MiIpXQorKQorCis7OyBBcml0aG1ldGljIEluc3R1Y3Rpb24gIFBhdHRlcm5z CisKKzs7IEFkZGl0aW9uLVN1YnRyYWN0aW9uICJhZGRkaTMvc3ViZGkzIiBp bnNucy4KKyhkZWZpbmVfaW5zbiAiPHBsdXNtaW51c19pbnNuPmRpMyIKKyAg WyhzZXQgKG1hdGNoX29wZXJhbmQ6REkgMCAicmVnaXN0ZXJfb3BlcmFuZCIg Ij1yIikKKwkocGx1c21pbnVzOkRJIChtYXRjaF9vcGVyYW5kOkRJIDEgInJl Z2lzdGVyX29wZXJhbmQiICI8Y29tbT4wIikKKwkJICAgICAgKG1hdGNoX29w ZXJhbmQ6REkgMiAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkpXQorICAiIgor ICB7CisgICAgcmV0dXJuIGNyMTZfZW1pdF9hZGRfc3ViX2RpIChvcGVyYW5k cywgPHBsdXNtaW51c19mbGFnPik7CisgIH0pCisKKyhkZWZpbmVfaW5zbiAi YWRkc2kzIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rl cl9vcGVyYW5kIiAiPXIscixyLHIsciIpCisJKHBsdXM6U0kgKG1hdGNoX29w ZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiUwLDAsMCwwLDAiKQor CQkgKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnX3NpX2ludF9vcGVyYW5kIiAi cixNLE4sTyxpIikpKV0KKyAgIiIKKyAgImFkZGRcdCUyLCAlMCIKKyAgWyhz ZXRfYXR0ciAibGVuZ3RoIiAiMiwyLDQsNCw2IildCispCisKKzs7IEFkZGl0 aW9uLVN1YnRyYWN0aW9uICJhZGRoaTMvc3ViaGkzIiBpbnNucy4KKyhkZWZp bmVfaW5zbiAiPHBsdXNtaW51c19pbnNuPmhpMyIKKyAgWyhzZXQgKG1hdGNo X29wZXJhbmQ6SEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1jLGMsYyIpCisJ KHBsdXNtaW51czpISSAobWF0Y2hfb3BlcmFuZDpISSAxICJyZWdpc3Rlcl9v cGVyYW5kIiAiPGNvbW0+MCwwLDAiKQorCQkgICAgICAobWF0Y2hfb3BlcmFu ZDpISSAyICJyZWdfaGlfaW50X29wZXJhbmQiICJjLE0sTiIpKSldCisgICIi CisgICI8cGx1c21pbnVzX2luc24+d1x0JTIsICUwIgorICBbKHNldF9hdHRy ICJsZW5ndGgiICIyLDIsNCIpXQorKQorCis7OyBBZGRpdGlvbi1TdWJ0cmFj dGlvbiAiYWRkcWkzL3N1YnFpMyIgaW5zbnMuCisoZGVmaW5lX2luc24gIjxw bHVzbWludXNfaW5zbj5xaTMiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlFJ IDAgInJlZ2lzdGVyX29wZXJhbmQiICI9YyxjIikKKwkocGx1c21pbnVzOlFJ IChtYXRjaF9vcGVyYW5kOlFJIDEgInJlZ2lzdGVyX29wZXJhbmQiICI8Y29t bT4wLDAiKQorCQkgICAgICAobWF0Y2hfb3BlcmFuZDpRSSAyICJyZWdfcWlf aW50X29wZXJhbmQiICJjLE0iKSkpXQorICAiIgorICAiPHBsdXNtaW51c19p bnNuPmJcdCUyLCAlMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiwyIild CispCisKKzs7ICBTdWJ0cmFjdCBJbnN0cnVjdGlvbgorKGRlZmluZV9pbnNu ICJzdWJzaTMiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lz dGVyX29wZXJhbmQiICI9cixyIikKKwkobWludXM6U0kgKG1hdGNoX29wZXJh bmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIjAsMCIpCisJCSAgKG1hdGNo X29wZXJhbmQ6U0kgMiAicmVnX3NpX2ludF9vcGVyYW5kIiAicixpIikpKV0K KyAgIiIKKyAgInN1YmRcdCUyLCAlMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3Ro IiAiNCw2IildCispCisKKzs7ICBNdWx0aXBseSBhbmQgQWNjdW11bGF0ZSBJ bnN0cnVjdGlvbnMgInNtYWNoaXNpMy91bWFjaGlzaTMiCisoZGVmaW5lX2lu c24gIjxzUGF0Pm1hZGRoaXNpNCIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6 U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKwkocGx1czpTSQorCSht dWx0OlNJIChzel94dG5kOlNJIChtYXRjaF9vcGVyYW5kOkhJIDEgInJlZ2lz dGVyX29wZXJhbmQiICJyIikpCisJCSAoc3pfeHRuZDpTSSAobWF0Y2hfb3Bl cmFuZDpISSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKSkKKwkobWF0Y2hf b3BlcmFuZDpTSSAzICJyZWdpc3Rlcl9vcGVyYW5kIiAiMCIpKSldCisgICJU QVJHRVRfTUFDIgorICAibWFjPHNQYXQ+d1x0JTEsICUyLCAlMCIKKyAgWyhz ZXRfYXR0ciAibGVuZ3RoIiAiMiIpXQorKQorCis7OyAgTXVsdGlwbHkgSW5z dHJ1Y3Rpb25zCisoZGVmaW5lX2luc24gIm11bGhpMyIKKyAgWyhzZXQgKG1h dGNoX29wZXJhbmQ6SEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1jLGMsYyIp CisJKG11bHQ6SEkgKG1hdGNoX29wZXJhbmQ6SEkgMSAicmVnaXN0ZXJfb3Bl cmFuZCIgIiUwLDAsMCIpCisJCSAobWF0Y2hfb3BlcmFuZDpISSAyICJyZWdf b3JfaW50X29wZXJhbmQiICJjLE0sTiIpKSldCisgICIiCisgICJtdWx3XHQl MiwgJTAiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIsMiw0IildCispCisK KyhkZWZpbmVfaW5zbiAibXVscWloaTMiCisgIFsoc2V0IChtYXRjaF9vcGVy YW5kOkhJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9YyIpCisJKG11bHQ6SEkg KHNpZ25fZXh0ZW5kOkhJIChtYXRjaF9vcGVyYW5kOlFJIDEgInJlZ2lzdGVy X29wZXJhbmQiICIlMCIpKQorCQkgKHNpZ25fZXh0ZW5kOkhJIChtYXRjaF9v cGVyYW5kOlFJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJjIikpKSldCisgICIi CisgICJtdWxzYlx0JTIsICUwIgorICBbKHNldF9hdHRyICJsZW5ndGgiICIy IildCispCisKKzs7ICBCaXQgU2V0L0NsZWFyIEluc3RydWN0aW9ucworKGRl ZmluZV9leHBhbmQgImluc3YiCisgIFsoc2V0ICh6ZXJvX2V4dHJhY3QgKG1h dGNoX29wZXJhbmQgMCAibWVtb3J5X29wZXJhbmQiICIiKQorCQkgICAgICAo bWF0Y2hfb3BlcmFuZCAxICJpbW1lZGlhdGVfb3BlcmFuZCIgIiIpCisJCSAg ICAgIChtYXRjaF9vcGVyYW5kIDIgImltbWVkaWF0ZV9vcGVyYW5kIiAiIikp CisJKG1hdGNoX29wZXJhbmQgMyAiaW1tZWRpYXRlX29wZXJhbmQiICIiKSld CisgICJUQVJHRVRfQklUX09QUyIKKyAgeworICAgIGlmIChJTlRWQUwgKG9w ZXJhbmRzWzFdKSAhPSAxKQorICAgICAgRkFJTDsKKyAgICBpZiAoSU5UVkFM IChvcGVyYW5kc1syXSkgPCAwIHx8IElOVFZBTCAob3BlcmFuZHNbMl0pID4g MTUpCisgICAgICBGQUlMOworICAgIGlmIChJTlRWQUwgKG9wZXJhbmRzWzNd KSA9PSAxKQorICAgICAgeworCWlmIChHRVRfTU9ERSAob3BlcmFuZHNbMF0p ID09IFFJbW9kZSkKKwkgIHsKKwkgICAgZW1pdF9pbnNuIChnZW5fc2V0X2Jp dHFpIChvcGVyYW5kc1swXSwgb3BlcmFuZHNbMl0pKTsKKwkgICAgRE9ORTsK KwkgIH0KKwllbHNlIGlmIChHRVRfTU9ERSAob3BlcmFuZHNbMF0pID09IEhJ bW9kZSkKKwkgIHsKKwkgICAgZW1pdF9pbnNuIChnZW5fc2V0X2JpdGhpIChv cGVyYW5kc1swXSwgb3BlcmFuZHNbMl0pKTsKKwkgICAgRE9ORTsKKwkgIH0K KyAgICAgIH0KKyAgICBpZiAoSU5UVkFMIChvcGVyYW5kc1szXSkgPT0gMCkK KyAgICAgIHsKKwlpZiAoR0VUX01PREUgKG9wZXJhbmRzWzBdKSA9PSBRSW1v ZGUpCisJICB7CisJICAgIGVtaXRfaW5zbiAoZ2VuX2Nscl9iaXRxaSAob3Bl cmFuZHNbMF0sIG9wZXJhbmRzWzJdKSk7CisJICAgIERPTkU7CisJICB9CisJ ZWxzZSBpZiAoR0VUX01PREUgKG9wZXJhbmRzWzBdKSA9PSBISW1vZGUpCisJ ICB7CisJICAgIGVtaXRfaW5zbiAoZ2VuX2Nscl9iaXRoaSAob3BlcmFuZHNb MF0sIG9wZXJhbmRzWzJdKSk7CisJICAgIERPTkU7CisJICB9CisgICAgICB9 CisgIH0KKykKKworKGRlZmluZV9pbnNuICJzZXRfYml0PG1vZGU+IgorICBb KHNldCAoemVyb19leHRyYWN0OlNIT1JUIChtYXRjaF9vcGVyYW5kOlNIT1JU IDAgIm1lbW9yeV9vcGVyYW5kIiAiK20iKQorCQkJICAgIChjb25zdF9pbnQg MSkKKwkJCSAgICAobWF0Y2hfb3BlcmFuZCAxICJpbW1lZGlhdGVfb3BlcmFu ZCIgImkiKSkKKwkoY29uc3RfaW50IDEpKV0KKyAgIlRBUkdFVF9CSVRfT1BT IgorICAic2JpdDx0SXNhPlx0JTEsJTAiCisgIFsoc2V0X2F0dHIgImxlbmd0 aCIgIjIiKV0KKykKKworKGRlZmluZV9pbnNuICJjbHJfYml0PG1vZGU+Igor ICBbKHNldCAoemVyb19leHRyYWN0OlNIT1JUIChtYXRjaF9vcGVyYW5kOlNI T1JUIDAgIm1lbW9yeV9vcGVyYW5kIiAiK20iKQorCQkJICAgIChjb25zdF9p bnQgMSkKKwkJCSAgICAobWF0Y2hfb3BlcmFuZCAxICJpbW1lZGlhdGVfb3Bl cmFuZCIgImkiKSkKKwkoY29uc3RfaW50IDApKV0KKyAgIlRBUkdFVF9CSVRf T1BTIgorICAiY2JpdDx0SXNhPlx0JTEsJTAiCisgIFsoc2V0X2F0dHIgImxl bmd0aCIgIjIiKV0KKykKKworKGRlZmluZV9pbnNuICJzZXRfYml0PG1vZGU+ X21lbSIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0hPUlQgMCAiYml0X29w ZXJhbmQiICI9bSIpCisJKGlvcjpTSE9SVCAobWF0Y2hfZHVwIDApCisJCSAg IChtYXRjaF9vcGVyYW5kOlNIT1JUIDEgIm9uZV9iaXRfb3BlcmFuZCIgImki KSkKKyAgKV0KKyAgIlRBUkdFVF9CSVRfT1BTIgorICAic2JpdDx0SXNhPlx0 JCVzMSwlMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiIpXQorKQorCiso ZGVmaW5lX2luc24gImNsZWFyX2JpdDxtb2RlPl9tZW0iCisgIFsoc2V0ICht YXRjaF9vcGVyYW5kOlNIT1JUIDAgImJpdF9vcGVyYW5kIiAiPW0iKQorCShh bmQ6U0hPUlQgKG1hdGNoX2R1cCAwKQorCQkgICAobWF0Y2hfb3BlcmFuZDpT SE9SVCAxICJyZXZfb25lX2JpdF9vcGVyYW5kIiAiaSIpKQorICApXQorICAi VEFSR0VUX0JJVF9PUFMiCisgICJjYml0PHRJc2E+XHQkJXIxLCUwIgorICBb KHNldF9hdHRyICJsZW5ndGgiICIyIildCispCisKKzs7ICBMb2dpY2FsIElu c3RydWN0aW9ucyAtIGFuZC9pb3IveG9yICJhbmRkaTMvaW9yZGkzL3hvcmRp MyIKKyhkZWZpbmVfaW5zbiAiPGFueV9sb2dpY19pbnNuPmRpMyIKKyAgWyhz ZXQgKG1hdGNoX29wZXJhbmQ6REkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1y IikKKwkoYW55X2xvZ2ljOkRJIChtYXRjaF9vcGVyYW5kOkRJIDEgInJlZ2lz dGVyX29wZXJhbmQiICIlMCIpCisJCSAgICAgIChtYXRjaF9vcGVyYW5kOkRJ IDIgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpKV0KKyAgIiIKKyAgeworICAg IHJldHVybiBjcjE2X2VtaXRfbG9naWNhbF9kaSAob3BlcmFuZHMsIDxhbnlf bG9naWNfZmxhZz4pOworICB9KQorCis7IExvZ2ljYWwgYW5kL2lvci94b3Ig ImFuZHNpMy9pb3JzaTMveG9yc2kzIgorKGRlZmluZV9pbnNuICI8YW55X2xv Z2ljX2luc24+c2kzIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJy ZWdpc3Rlcl9vcGVyYW5kIiAiPXIscixyLHIiKQorCShhbnlfbG9naWM6U0kg KG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiUwLDAs MCwwIikKKwkJICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnX3NpX2lu dF9vcGVyYW5kIiAicixNLE4saSIpKSldCisgICIiCisgICI8bG9naWM+ZFx0 JTIsICUwIgorICBbKHNldF9hdHRyICJsZW5ndGgiICIyLDIsNCw2IildCisp CisKKzsgTG9naWNhbCBhbmQvaW9yL3hvciBpbiBISW1vZGUgImFuZGhpMy9p b3JoaTMveG9yaGkzIgorOyBMb2dpY2FsIGFuZC9pb3IveG9yIGluIFFJbW9k ZSAiYW5kcWkzL2lvcnFpMy94b3JxaTMiCisoZGVmaW5lX2luc24gIjxhbnlf bG9naWNfaW5zbj48cWg+MyIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6UUgg MCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1jLGMsYyIpCisJKGFueV9sb2dpYzpR SCAobWF0Y2hfb3BlcmFuZDpRSCAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiJTAs MCwwIikKKwkJICAgICAgKG1hdGNoX29wZXJhbmQ6UUggMiAicmVnX2hpX2lu dF9vcGVyYW5kIiAiYyxNLE4iKSkpXQorICAiIgorICAiPGxvZ2ljPjxRSHN1 ZmZpeD5cdCUyLCAlMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiPFFIc3o+ IildCispCisKKzs7ICBTaWduIGFuZCBaZXJvIEV4dGVuZCBJbnN0cnVjdGlv bnMKKyhkZWZpbmVfaW5zbiAiPHN6UGF0PmV4dGVuZGhpc2kyIgorICBbKHNl dCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIi KQorCShzel94dG5kOlNJIChtYXRjaF9vcGVyYW5kOkhJIDEgInJlZ2lzdGVy X29wZXJhbmQiICJyIikpKV0KKyAgIiIKKyAgIm1vdjxzeklzYT53XHQlMSwg JTAiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjQiKV0KKykKKworKGRlZmlu ZV9pbnNuICI8c3pQYXQ+ZXh0ZW5kcWloaTIiCisgIFsoc2V0IChtYXRjaF9v cGVyYW5kOkhJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisJKHN6X3h0 bmQ6SEkgKG1hdGNoX29wZXJhbmQ6UUkgMSAicmVnaXN0ZXJfb3BlcmFuZCIg InIiKSkpXQorICAiIgorICAibW92PHN6SXNhPmJcdCUxLCAlMCIKKyAgWyhz ZXRfYXR0ciAibGVuZ3RoIiAiNCIpXQorKQorCis7OyAgT25lJ3MgQ29tcGxl bWVudAorKGRlZmluZV9pbnNuICJvbmVfY21wbGRpMiIKKyAgWyhzZXQgKG1h dGNoX29wZXJhbmQ6REkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKwko bm90OkRJIChtYXRjaF9vcGVyYW5kOkRJIDEgInJlZ2lzdGVyX29wZXJhbmQi ICIwIikpKV0KKyAgIiIKKyAgeworICAgIHJ0eCB4b3BlcmFuZCA7CisgICAg aW50IHJlZzAgPSBSRUdOTyAob3BlcmFuZHNbMF0pOworCisgICAgeG9wZXJh bmQgPSBnZW5fcnR4X1JFRyAoU0ltb2RlLCByZWcwICsgMik7CisgICAgb3V0 cHV0X2FzbV9pbnNuICgieG9yZFx0JC0xLCAlMCIsIG9wZXJhbmRzKTsKKyAg ICBvdXRwdXRfYXNtX2luc24gKCJ4b3JkXHQkLTEsICUwIiwgJnhvcGVyYW5k KTsKKyAgICByZXR1cm4gIiIgOworICB9CisgIFsoc2V0X2F0dHIgImxlbmd0 aCIgIjEyIildCispCisKKyhkZWZpbmVfaW5zbiAib25lX2NtcGw8bW9kZT4y IgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpDUjE2SU0gMCAicmVnaXN0ZXJf b3BlcmFuZCIgIj1yIikKKwkobm90OkNSMTZJTSAobWF0Y2hfb3BlcmFuZDpD UjE2SU0gMSAicmVnaXN0ZXJfb3BlcmFuZCIgIjAiKSkpXQorICAiIgorICAi eG9yPHRJc2E+XHQkLTEsICUwIgorICBbKHNldF9hdHRyICJsZW5ndGgiICIy IildCispCisKKzs7ICBBcml0aG1ldGljIExlZnQgYW5kIFJpZ2h0IFNoaWZ0 IEluc3RydWN0aW9ucworKGRlZmluZV9pbnNuICJhc2hscWkzIgorICBbKHNl dCAobWF0Y2hfb3BlcmFuZDpRSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPWMs YyIpCisJKGFzaGlmdDpRSSAobWF0Y2hfb3BlcmFuZDpRSSAxICJyZWdpc3Rl cl9vcGVyYW5kIiAiMCwwIikKKwkJICAgKG1hdGNoX29wZXJhbmQ6UUkgMiAi bm9ubWVtb3J5X29wZXJhbmQiICJjLEkiKSkpXQorICAiIgorICAiYXNodWJc dCUyLCAlMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiwyIildCispCisK KyhkZWZpbmVfaW5zbiAiYXNobGhpMyIKKyAgWyhzZXQgKG1hdGNoX29wZXJh bmQ6SEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1jLGMiKQorCShhc2hpZnQ6 SEkgKG1hdGNoX29wZXJhbmQ6SEkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIjAs MCIpCisJCSAgIChtYXRjaF9vcGVyYW5kOlFJIDIgIm5vbm1lbW9yeV9vcGVy YW5kIiAiYyxKIikpKV0KKyAgIiIKKyAgImFzaHV3XHQlMiwgJTAiCisgIFso c2V0X2F0dHIgImxlbmd0aCIgIjIsMiIpXQorKQorCisoZGVmaW5lX2luc24g ImFzaGxzaTMiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lz dGVyX29wZXJhbmQiICI9cixyIikKKwkoYXNoaWZ0OlNJIChtYXRjaF9vcGVy YW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIwLDAiKQorCQkgICAobWF0 Y2hfb3BlcmFuZDpRSSAyICJub25tZW1vcnlfb3BlcmFuZCIgInIsSyIpKSld CisgICIiCisgICJhc2h1ZFx0JTIsICUwIgorICBbKHNldF9hdHRyICJsZW5n dGgiICIyLDIiKV0KKykKKworKGRlZmluZV9leHBhbmQgImFzaHI8bW9kZT4z IgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpDUjE2SU0gMCAicmVnaXN0ZXJf b3BlcmFuZCIgIiIpCisJKGFzaGlmdHJ0OkNSMTZJTSAobWF0Y2hfb3BlcmFu ZDpDUjE2SU0gMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisJCQkgKG1hdGNo X29wZXJhbmQ6UUkgMiAibm9ubWVtb3J5X29wZXJhbmQiICIiKSkpXQorICAi IgorICB7CisgICAgaWYgKEdFVF9DT0RFIChvcGVyYW5kc1syXSkgPT0gQ09O U1RfSU5UKQorICAgICAgeworCS8qIElmIHRoZSBjb25zdGFudCBpcyBub3Qg aW4gcmFuZ2UsIHRyeSBwbGFjaW5nIGl0IGluIGEgcmVnICovCisJaWYgKCFV TlNJR05FRF9JTlRfRklUU19OX0JJVFMoSU5UVkFMIChvcGVyYW5kc1syXSks PHNoSW1tQml0cz4pKQorCW9wZXJhbmRzWzJdID0gY29weV90b19tb2RlX3Jl ZyhRSW1vZGUsIG9wZXJhbmRzWzJdKTsKKyAgICAgIH0KKworICAgIGlmIChH RVRfQ09ERSAob3BlcmFuZHNbMl0pICE9IENPTlNUX0lOVCkKKyAgICAgIG9w ZXJhbmRzWzJdID0gZ2VuX3J0eF9ORUcgKFFJbW9kZSwgbmVnYXRlX3J0eCAo UUltb2RlLCBvcGVyYW5kc1syXSkpOworICB9CispCisKKyhkZWZpbmVfaW5z biAiYXNocnFpM19pbW1faW5zbiIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6 UUkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1jIikKKwkoYXNoaWZ0cnQ6UUkg KG1hdGNoX29wZXJhbmQ6UUkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIjAiKQor CQkgICAgIChtYXRjaF9vcGVyYW5kOlFJIDIgInNoaWZ0X3FpX2ltbV9vcGVy YW5kIiAiaSIpKSldCisgICIiCisgICJhc2h1Ylx0JCVuMiwgJTAiCisgIFso c2V0X2F0dHIgImxlbmd0aCIgIjIiKV0KKykKKworKGRlZmluZV9pbnNuICJh c2hyaGkzX2ltbV9pbnNuIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpISSAw ICJyZWdpc3Rlcl9vcGVyYW5kIiAiPWMiKQorCShhc2hpZnRydDpISSAobWF0 Y2hfb3BlcmFuZDpISSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiMCIpCisJCSAg ICAgKG1hdGNoX29wZXJhbmQ6UUkgMiAic2hpZnRfaGlfaW1tX29wZXJhbmQi ICJpIikpKV0KKyAgIiIKKyAgImFzaHV3XHQkJW4yLCAlMCIKKyAgWyhzZXRf YXR0ciAibGVuZ3RoIiAiMiIpXQorKQorCisoZGVmaW5lX2luc24gImFzaHJz aTNfaW1tX2luc24iCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJl Z2lzdGVyX29wZXJhbmQiICI9ciIpCisJKGFzaGlmdHJ0OlNJIChtYXRjaF9v cGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIwIikKKwkJICAgICAo bWF0Y2hfb3BlcmFuZDpRSSAyICJzaGlmdF9zaV9pbW1fb3BlcmFuZCIgImki KSkpXQorICAiIgorICAiYXNodWRcdCQlbjIsICUwIgorICBbKHNldF9hdHRy ICJsZW5ndGgiICIyIildCispCisKKyhkZWZpbmVfaW5zbiAiYXNocnFpM19u ZWdfaW5zbiIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6UUkgMCAicmVnaXN0 ZXJfb3BlcmFuZCIgIj1jIikKKwkoYXNoaWZ0cnQ6UUkgKG1hdGNoX29wZXJh bmQ6UUkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIjAiKQorCQkgICAgIChuZWc6 UUkgKG1hdGNoX29wZXJhbmQ6UUkgMiAicmVnaXN0ZXJfb3BlcmFuZCIgImMi KSkpKV0KKyAgIiIKKyAgImFzaHViXHQlMiwlMCIKKyAgWyhzZXRfYXR0ciAi bGVuZ3RoIiAiMiIpXQorKQorCisoZGVmaW5lX2luc24gImFzaHJoaTNfbmVn X2luc24iCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkhJIDAgInJlZ2lzdGVy X29wZXJhbmQiICI9YyIpCisJKGFzaGlmdHJ0OkhJIChtYXRjaF9vcGVyYW5k OkhJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIwIikKKwkJICAgICAobmVnOlFJ IChtYXRjaF9vcGVyYW5kOlFJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJjIikp KSldCisgICIiCisgICJhc2h1d1x0JTIsJTAiCisgIFsoc2V0X2F0dHIgImxl bmd0aCIgIjIiKV0KKykKKworKGRlZmluZV9pbnNuICJhc2hyZGkzX25lZ19p bnNuIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9v cGVyYW5kIiAiPXIiKQorCShhc2hpZnRydDpTSSAobWF0Y2hfb3BlcmFuZDpT SSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiMCIpCisJCSAgICAgKG5lZzpRSSAo bWF0Y2hfb3BlcmFuZDpRSSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKSkp XQorICAiIgorICAiYXNodWRcdCUyLCUwIgorICBbKHNldF9hdHRyICJsZW5n dGgiICIyIildCispCisKKyhkZWZpbmVfZXhwYW5kICJsc2hyPG1vZGU+MyIK KyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6Q1IxNklNIDAgInJlZ2lzdGVyX29w ZXJhbmQiICIiKQorCShsc2hpZnRydDpDUjE2SU0gKG1hdGNoX29wZXJhbmQ6 Q1IxNklNIDEgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorCQkJIChtYXRjaF9v cGVyYW5kOlFJIDIgInJlZ19vcl9pbnRfb3BlcmFuZCIgIiIpKSldCisgICIi CisgIHsKKyAgICBpZiAoR0VUX0NPREUgKG9wZXJhbmRzWzJdKSA9PSBDT05T VF9JTlQpCisgICAgICB7CisJLyogSWYgdGhlIGNvbnN0YW50IGlzIG5vdCBp biByYW5nZSwgdHJ5IHBsYWNpbmcgaXQgaW4gYSByZWcgKi8KKwlpZiAoIVVO U0lHTkVEX0lOVF9GSVRTX05fQklUUyhJTlRWQUwgKG9wZXJhbmRzWzJdKSw8 c2hJbW1CaXRzPikpCisJb3BlcmFuZHNbMl0gPSBjb3B5X3RvX21vZGVfcmVn KFFJbW9kZSwgb3BlcmFuZHNbMl0pOworICAgICAgfQorCisJaWYgKEdFVF9D T0RFIChvcGVyYW5kc1syXSkgIT0gQ09OU1RfSU5UKQorCW9wZXJhbmRzWzJd ID0gZ2VuX3J0eF9ORUcgKFFJbW9kZSwgbmVnYXRlX3J0eCAoUUltb2RlLCBv cGVyYW5kc1syXSkpOworICAgfQorKQorCisoZGVmaW5lX2luc24gImxzaHJx aTNfaW1tX2luc24iCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlFJIDAgInJl Z2lzdGVyX29wZXJhbmQiICI9YyIpCisJKGxzaGlmdHJ0OlFJIChtYXRjaF9v cGVyYW5kOlFJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIwIikKKwkJICAgICAo bWF0Y2hfb3BlcmFuZDpRSSAyICJzaGlmdF9xaV9vcGVyYW5kIiAiUSIpKSld CisgICIiCisgICJsc2hiXHQkJW4yLCAlMCIKKyAgWyhzZXRfYXR0ciAibGVu Z3RoIiAiMiIpXQorKQorCisoZGVmaW5lX2luc24gImxzaHJoaTNfaW1tX2lu c24iCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkhJIDAgInJlZ2lzdGVyX29w ZXJhbmQiICI9YyIpCisJKGxzaGlmdHJ0OkhJIChtYXRjaF9vcGVyYW5kOkhJ IDEgInJlZ2lzdGVyX29wZXJhbmQiICIwIikKKwkJICAgICAobWF0Y2hfb3Bl cmFuZDpRSSAyICJzaGlmdF9oaV9vcGVyYW5kIiAiUiIpKSldCisgICIiCisg ICJsc2h3XHQkJW4yLCAlMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiIp XQorKQorCisoZGVmaW5lX2luc24gImxzaHJzaTNfaW1tX2luc24iCisgIFso c2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9 ciIpCisJKGxzaGlmdHJ0OlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lz dGVyX29wZXJhbmQiICIwIikKKwkJICAgICAobWF0Y2hfb3BlcmFuZDpRSSAy ICJzaGlmdF9zaV9vcGVyYW5kIiAiUyIpKSldCisgICIiCisgICJsc2hkXHQk JW4yLCAlMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiIpXQorKQorCiso ZGVmaW5lX2luc24gImxzaHJxaTNfbmVnX2luc24iCisgIFsoc2V0IChtYXRj aF9vcGVyYW5kOlFJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9YyIpCisJKGxz aGlmdHJ0OlFJIChtYXRjaF9vcGVyYW5kOlFJIDEgInJlZ2lzdGVyX29wZXJh bmQiICIwIikKKwkJICAgICAobmVnOlFJIChtYXRjaF9vcGVyYW5kOlFJIDIg InJlZ2lzdGVyX29wZXJhbmQiICJjIikpKSldCisgICIiCisgICJsc2hiXHQl MiwlMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiIpXQorKQorCisoZGVm aW5lX2luc24gImxzaHJoaTNfbmVnX2luc24iCisgIFsoc2V0IChtYXRjaF9v cGVyYW5kOkhJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9YyIpCisJKGxzaGlm dHJ0OkhJIChtYXRjaF9vcGVyYW5kOkhJIDEgInJlZ2lzdGVyX29wZXJhbmQi ICIwIikKKwkJICAgICAobmVnOlFJIChtYXRjaF9vcGVyYW5kOlFJIDIgInJl Z2lzdGVyX29wZXJhbmQiICJjIikpKSldCisgICIiCisgICJsc2h3XHQlMiwl MCIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiIpXQorKQorCisoZGVmaW5l X2luc24gImxzaHJzaTNfbmVnX2luc24iCisgIFsoc2V0IChtYXRjaF9vcGVy YW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisJKGxzaGlmdHJ0 OlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIw IikKKwkJICAgICAobmVnOlFJIChtYXRjaF9vcGVyYW5kOlFJIDIgInJlZ2lz dGVyX29wZXJhbmQiICJyIikpKSldCisgICIiCisgICJsc2hkXHQlMiwlMCIK KyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiIpXQorKQorCis7OyAgTW92ZSBJ bnN0cnVjdGlvbnMKKworOzsgTW92ZSBhbnkgbm9uLWltbWVkaWF0ZSBvcGVy YW5kIDAgdG8gYSBnZW5lcmFsIG9wZXJhbmQgMS4KKzs7IFRoaXMgYXBwbGll cyBvbmx5IGJlZm9yZSBzdGFydGluZyB0aGUgcmVsb2FkIHByb2Nlc3MKKzs7 IE9wZXJhbmQgMCBpcyBub3QgYSByZWdpc3RlciBvcGVyYW5kIG9mIHR5cGUg bW9kZSBNT0RFCis7OyBJZiBPcGVyYW5kIDAgaXMgYSBwdXNoIG9wZXJhbmQg b2YgdHlwZSBtb2RlIE1PREUKKzs7IHRoZW4sIGlmIE9wZXJhbmQgMSBpcyBh IG5vbi1TUCByZWdpc3RlcgorOzsgdGhlbiwgT3BlcmFuZCAxID0gY29weV90 b19tb2RlX3JlZyAoPE1PREU+bW9kZSwgT3BlcmFuZCAxKQorOzsgZW5kaWYK Kzs7IGVsc2UKKzs7IGlmIE9wZXJhbmQgMSBpcyBlaXRoZXIgcmVnaXN0ZXIg b3IgNC1iaXQgaW1tZWRpYXRlIGNvbnN0YW50Cis7OyB0aGVuLCBPcGVyYW5k IDEgPSBjb3B5X3RvX21vZGVfcmVnICg8TU9ERT5tb2RlLCBPcGVyYW5kIDEp Cis7OyBlbmRpZgorOzsgZW5kaWYKKzs7Cis7OyBXaGF0IGRvZXMgY29weV90 b19tb2RlX3JlZyAobW9kZSwgcnR4IHZhbCkgZG8/Cis7OyBDb3B5IHRoZSB2 YWx1ZSBpbnRvIG5ldyB0ZW1wIHJlZyBhbmQgcmV0dXJuIHRoZSByZWcgd2hl cmUgdGhlCis7OyBtb2RlIG9mIHRoZSBuZXcgcmVnIGlzIGFsd2F5cyBtb2Rl IE1PREUgd2hlbiB2YWx1ZSBpcyBjb25zdGFudAorOzsKKzs7IFdoeSBzaG91 bGQgY29weV90b19tb2RlX3JlZyBiZSBjYWxsZWQ/Cis7OyBBbGwgc29ydHMg b2YgbW92ZSBhcmUgbm9yIHN1cHBvcnRlZCBieSBDUjE2LiBUaGVyZWZvcmUs IAorOzsgd2hlbiB1bnN1cHBvcnRlZCBtb3ZlIGlzIGVuY291bnRlcmVkLCB0 aGUgYWRkaXRpb25hbCBpbnN0cnVjdGlvbnMgCis7OyB3aWxsIGJlIGludHJv ZHVjZWQgZm9yIHRoZSBwdXJwb3NlLgorOzsKKzs7IEEgbmV3IG1vdmUgaW5z biBpcyBpbnNlcnRlZCBmb3IgT3AgMSB3aGVuIG9uZSBvZiB0aGUgZm9sbG93 aW5nCis7OyBjb25kaXRpb25zIGlzIG1ldC4KKzs7IENhc2UgMTogIE9wIDAg aXMgcHVzaF9vcGVyYW5kCis7OyAgICAgICAgICBPcCAxIGlzIFNQIHJlZ2lz dGVyCis7OworOzsgQ2FzZSAyOiAgT3AgMCBpcyBub3QgcHVzaF9vcGVyYW5k Cis7OyAgICAgICAgICBPcCAxIGlzIG5laXRoZXIgcmVnaXN0ZXIgbm9yIHVu c2lnbmVkIDQtYml0IGltbWVkaWF0ZQorCisoZGVmaW5lX2V4cGFuZCAibW92 PG1vZGU+IgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpBTExNVEQgMCAibm9u aW1tZWRpYXRlX29wZXJhbmQiICIiKQorCShtYXRjaF9vcGVyYW5kOkFMTE1U RCAxICJnZW5lcmFsX29wZXJhbmQiICIiKSldCisgICIiCisgIHsKKyAgICBp ZiAoIShyZWxvYWRfaW5fcHJvZ3Jlc3MgfHwgcmVsb2FkX2NvbXBsZXRlZCkp CisgICAgICB7CisJLyogT25seSBpZiBPcDAgaXMgYSByZWdpc3RlciBvcGVy YW5kLiAgKi8KKwlpZiAoIXJlZ2lzdGVyX29wZXJhbmQgKG9wZXJhbmRzWzBd LCA8TU9ERT5tb2RlKSkKKwkgIHsKKwkgICAgaWYgKHB1c2hfb3BlcmFuZCAo b3BlcmFuZHNbMF0sIDxNT0RFPm1vZGUpKSAKKwkgICAgICB7CisJCS8qIFVz ZSBjb3B5X3RvX21vZGVfcmVnIG9ubHkgaWYgdGhlIHJlZ2lzdGVyIG5lZWRz IAorCQl0byBiZSBwdXNoZWQgaXMgU1AgYXMgQ1IxNiBkb2VzIG5vdCBzdXBw b3J0IHB1c2hpbmcgU1AuICAqLworCQlpZiAoIW5vc3BfcmVnX29wZXJhbmQg KG9wZXJhbmRzWzFdLCA8TU9ERT5tb2RlKSkKKwkJICBvcGVyYW5kc1sxXSA9 IGNvcHlfdG9fbW9kZV9yZWcgKDxNT0RFPm1vZGUsIG9wZXJhbmRzWzFdKTsK KwkgICAgICB9CisJICAgIGVsc2UKKwkgICAgICB7CisJCS8qIFVzZSBjb3B5 X3RvX21vZGVfcmVnIGlmIG9wMSBpcyBub3QgcmVnaXN0ZXIgb3BlcmFuZAor CQkgICBzdWJqZWN0IHRvIGNvbmRpdGlvbnMgaW5zaWRlLiAgKi8KKwkJaWYg KCFyZWdpc3Rlcl9vcGVyYW5kIChvcGVyYW5kc1sxXSwgPE1PREU+bW9kZSkp CisJCSAgeworCQkgICAgLyogQ1IxNiBkb2VzIG5vdCBzdXBwb3J0IG1vdmlu ZyBpbW1lZGlhdGUgdG8gU0kgb3IgU0YgCisJCSAgICAgICB0eXBlIG1lbW9y eS4gICovCisJCSAgICBpZiAoPE1PREU+bW9kZSA9PSBTSW1vZGUgfHwgPE1P REU+bW9kZSA9PSBTRm1vZGUgfHwKKwkJCTxNT0RFPm1vZGUgPT0gREltb2Rl IHx8IDxNT0RFPm1vZGUgPT0gREZtb2RlKQorCQkgICAgICBvcGVyYW5kc1sx XSA9IGNvcHlfdG9fbW9kZV9yZWcgKDxNT0RFPm1vZGUsIG9wZXJhbmRzWzFd KTsKKwkJICAgIGVsc2UKKwkJICAgICAgLyogbW92aW5nIGltbTQgaXMgc3Vw cG9ydGVkIGJ5IENSMTYgaW5zdHJ1Y3Rpb24uICAqLworCQkgICAgICBpZiAo IXU0Yml0c19vcGVyYW5kIChvcGVyYW5kc1sxXSwgPE1PREU+bW9kZSkpCisJ CQlvcGVyYW5kc1sxXSA9IGNvcHlfdG9fbW9kZV9yZWcgKDxNT0RFPm1vZGUs IG9wZXJhbmRzWzFdKTsKKwkJICB9CisJICAgICAgIH0KKwkgIH0KKworCSAg LyogSWYgb3BlcmFuZC0xIGlzIGEgc3ltYm9sLCBjb252ZXJ0IGl0IGludG8g YSBCUk8gb3IgR09UIEZvcm1hdC4gICovCisJICBpZiAoZmxhZ19waWMgJiYg ISBsZWdpdGltYXRlX3BpY19vcGVyYW5kX3AgKG9wZXJhbmRzWzFdKSkKKwkg ICAgeworCSAgICAgIG9wZXJhbmRzWzFdID0gbGVnaXRpbWl6ZV9waWNfYWRk cmVzcyAob3BlcmFuZHNbMV0sIDxNT0RFPm1vZGUsIDApOworCSAgICB9Cisg ICAgICB9CisgIH0KKykKKworOyBBTExNVCAgICAgOiBRSSxISSxTSSxTRgor OyBwdXNoQ25zdHIgOiBQdXNoIGNvbnN0cmFpbnRzIAorOyAgICAgICAgICAg ICAgICBRSSA6IFgKKzsgICAgICAgICAgICAgSEksU0ksU0YsREksREYgOiA8 Cis7IGIgICAgICAgICA6IEFsbCBub24tc3AgcmVnaXN0ZXJzCis7IHRwdXNo ICAgICA6IFB1c2ggY291bnQKKzsgICAgICAgICAgICAgICAgUUksSEkgOiAx Cis7ICAgICAgICAgICAgICAgIFNJLFNGIDogMgorOyAgICAgICAgICAgICAg ICBESSxERiA6IDQKKyhkZWZpbmVfaW5zbiAicHVzaDxtb2RlPl9pbnRlcm5h bCIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6QUxMTVREIDAgInB1c2hfb3Bl cmFuZCIgIj08cHVzaENuc3RyPiIpCisJKG1hdGNoX29wZXJhbmQ6QUxMTVRE IDEgIm5vc3BfcmVnX29wZXJhbmQiICJiIikpXQorICAiIgorICAicHVzaFx0 JDx0cHVzaD4sJXAxIgorICBbKHNldF9hdHRyICJsZW5ndGgiICIyIildCisp CisKKzsgKERJLCBERikgbW92ZQorKGRlZmluZV9pbnNuICIqbW92PG1vZGU+ X2RvdWJsZSIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6RE9VQkxFIDAgIm5v bmltbWVkaWF0ZV9vcGVyYW5kIiAiPXIsIHIsIHIsIG0iKQorCShtYXRjaF9v cGVyYW5kOkRPVUJMRSAxICJnZW5lcmFsX29wZXJhbmQiICJyLCA8aUZEPiwg bSwgciIpKV0KKyAgInJlZ2lzdGVyX29wZXJhbmQgKG9wZXJhbmRzWzBdLCBE SW1vZGUpIAorICAgfHwgcmVnaXN0ZXJfb3BlcmFuZCAob3BlcmFuZHNbMF0s IERGbW9kZSkKKyAgIHx8IHJlZ2lzdGVyX29wZXJhbmQgKG9wZXJhbmRzWzFd LCBESW1vZGUpCisgICB8fCByZWdpc3Rlcl9vcGVyYW5kIChvcGVyYW5kc1sx XSwgREZtb2RlKSIKKyAgeworICAgIGlmICgwID09IHdoaWNoX2FsdGVybmF0 aXZlKSB7CisgICAgICBydHggeG9wZXJhbmRzWzJdIDsKKyAgICAgIGludCBy ZWcwID0gUkVHTk8gKG9wZXJhbmRzWzBdKTsKKyAgICAgIGludCByZWcxID0g UkVHTk8gKG9wZXJhbmRzWzFdKTsKKworICAgICAgeG9wZXJhbmRzWzBdID0g Z2VuX3J0eF9SRUcgKFNJbW9kZSwgcmVnMCArIDIpOworICAgICAgeG9wZXJh bmRzWzFdID0gZ2VuX3J0eF9SRUcgKFNJbW9kZSwgcmVnMSArIDIpOworICAg ICAgaWYgKChyZWcxICsgMikgIT0gcmVnMCkKKwl7CisJICBvdXRwdXRfYXNt X2luc24gKCJtb3ZkXHQlMSwgJTAiLCBvcGVyYW5kcyk7CisJICBvdXRwdXRf YXNtX2luc24gKCJtb3ZkXHQlMSwgJTAiLCB4b3BlcmFuZHMpOworCX0KKyAg ICAgIGVsc2UKKwl7CisJICBvdXRwdXRfYXNtX2luc24gKCJtb3ZkXHQlMSwg JTAiLCB4b3BlcmFuZHMpOworCSAgb3V0cHV0X2FzbV9pbnNuICgibW92ZFx0 JTEsICUwIiwgb3BlcmFuZHMpOworCX19CisKKyAgICBlbHNlIGlmICgxID09 IHdoaWNoX2FsdGVybmF0aXZlKSB7CisgICAgICBydHggbG9fb3BlcmFuZHNb Ml0gOworICAgICAgcnR4IGhpX29wZXJhbmRzWzJdIDsKKworICAgICAgbG9f b3BlcmFuZHNbMF0gPSBnZW5fcnR4X1JFRyAoU0ltb2RlLCBSRUdOTyAob3Bl cmFuZHNbMF0pKTsKKyAgICAgIGhpX29wZXJhbmRzWzBdID0gZ2VuX3J0eF9S RUcgKFNJbW9kZSwgUkVHTk8gKG9wZXJhbmRzWzBdKSArIDIpOworICAgICAg bG9fb3BlcmFuZHNbMV0gPSBzaW1wbGlmeV9nZW5fc3VicmVnIChTSW1vZGUs IG9wZXJhbmRzWzFdLAorCQkgICAgICAgVk9JRG1vZGUgPT0gR0VUX01PREUg KG9wZXJhbmRzWzFdKQorCQkgICAgICAgPyBESW1vZGUgIDogR0VUX01PREUg KG9wZXJhbmRzWzFdKSwgMCk7CisgICAgICBoaV9vcGVyYW5kc1sxXSA9IHNp bXBsaWZ5X2dlbl9zdWJyZWcgKFNJbW9kZSwgb3BlcmFuZHNbMV0sCisJCSAg ICAgICBWT0lEbW9kZSA9PSBHRVRfTU9ERSAob3BlcmFuZHNbMV0pCisJCSAg ICAgICA/IERJbW9kZSAgOiBHRVRfTU9ERSAob3BlcmFuZHNbMV0pLCA0KTsK KyAgICAgIG91dHB1dF9hc21faW5zbiAoIm1vdmRcdCUxLCAlMCIsIGxvX29w ZXJhbmRzKTsKKyAgICAgIG91dHB1dF9hc21faW5zbiAoIm1vdmRcdCUxLCAl MCIsIGhpX29wZXJhbmRzKTt9CisKKyAgICBlbHNlIGlmICgyID09IHdoaWNo X2FsdGVybmF0aXZlKSB7CisgICAgICBydHggeG9wZXJhbmRzWzJdIDsKKyAg ICAgIGludCByZWcwID0gUkVHTk8gKG9wZXJhbmRzWzBdKSwgcmVnMSA9IC0y IDsKKyAgICAgIHJ0eCBhZGRyIDsKKworCWlmIChNRU1fUCAob3BlcmFuZHNb MV0pKQorCSAgYWRkciA9IFhFWFAgKG9wZXJhbmRzWzFdLCAwKTsKKwllbHNl CisJICBhZGRyID0gTlVMTF9SVFggOworCXN3aXRjaCAoR0VUX0NPREUgKGFk ZHIpKQorCSAgeworCSAgICBjYXNlIFJFRzoKKwkgICAgY2FzZSBTVUJSRUc6 CisJICAgICAgcmVnMSA9IFJFR05PIChhZGRyKTsKKwkgICAgICBicmVhayA7 CisJICAgIGNhc2UgUExVUzoKKwkgICAgICBzd2l0Y2ggKEdFVF9DT0RFIChY RVhQIChhZGRyLCAwKSkpIHsKKwkJY2FzZSBSRUc6CisJCWNhc2UgU1VCUkVH OgorCQkgIHJlZzEgPSBSRUdOTyAoWEVYUCAoYWRkciwgMCkpOworCQkgIGJy ZWFrIDsKKwkJY2FzZSBQTFVTOgorCQkgIHJlZzEgPSBSRUdOTyAoWEVYUCAo WEVYUCAoYWRkciwgMCksIDApKTsKKwkJICBicmVhayA7CisJCWRlZmF1bHQ6 CisJCSAgaW5mb3JtIChERUNMX1NPVVJDRV9MT0NBVElPTiAoY2Z1bi0+ZGVj bCksICJ1bmV4cGVjdGVkIGV4cHJlc3Npb247IGFkZHI6Iik7CisJCSAgZGVi dWdfcnR4IChhZGRyKTsKKwkJICBpbmZvcm0gKERFQ0xfU09VUkNFX0xPQ0FU SU9OIChjZnVuLT5kZWNsKSwgIm9wZXJhbmRzWzFdOiIpOworCQkgIGRlYnVn X3J0eCAob3BlcmFuZHNbMV0pOworCQkgIGluZm9ybSAoREVDTF9TT1VSQ0Vf TE9DQVRJT04gKGNmdW4tPmRlY2wpLCAiZ2VuZXJhdGVkIGNvZGUgbWlnaHQg bm93IHdvcmtcbiIpOworCQkgIGJyZWFrIDt9CisJICAgICAgYnJlYWsgOwor CSAgICBkZWZhdWx0OgorCSAgICAgIGJyZWFrIDsKKwkgIH0KKworCXhvcGVy YW5kc1swXSA9IGdlbl9ydHhfUkVHIChTSW1vZGUsIHJlZzAgKyAyKTsKKwl4 b3BlcmFuZHNbMV0gPSBvZmZzZXRfYWRkcmVzcyAob3BlcmFuZHNbMV0sIEdF Tl9JTlQgKDQpLCAyKTsKKwlnY2NfYXNzZXJ0ICgocmVnMCArIDEpICE9IHJl ZzEpOworCWlmIChyZWcwICE9IHJlZzEgICYmICAocmVnMSArIDEpICE9IHJl ZzApCisJICB7CisJICAgIG91dHB1dF9hc21faW5zbiAoImxvYWRkXHQlMSwg JTAiLCBvcGVyYW5kcyk7CisJICAgIG91dHB1dF9hc21faW5zbiAoImxvYWRk XHQlMSwgJTAiLCB4b3BlcmFuZHMpOworCSAgfQorCWVsc2UKKwkgIHsKKwkg ICAgb3V0cHV0X2FzbV9pbnNuICgibG9hZGRcdCUxLCAlMCIsIHhvcGVyYW5k cyk7CisJICAgIG91dHB1dF9hc21faW5zbiAoImxvYWRkXHQlMSwgJTAiLCBv cGVyYW5kcyk7CisJICB9fQorICAgIGVsc2UKKyAgICAgIHsKKwlydHggeG9w ZXJhbmRzWzJdIDsKKwl4b3BlcmFuZHNbMF0gPSBvZmZzZXRfYWRkcmVzcyAo b3BlcmFuZHNbMF0sIEdFTl9JTlQgKDQpLCAyKTsKKwl4b3BlcmFuZHNbMV0g PSBnZW5fcnR4X1JFRyAoU0ltb2RlLCBSRUdOTyAob3BlcmFuZHNbMV0pICsg Mik7CisJb3V0cHV0X2FzbV9pbnNuICgic3RvcmRcdCUxLCAlMCIsIG9wZXJh bmRzKTsKKyAgIAlvdXRwdXRfYXNtX2luc24gKCJzdG9yZFx0JTEsICUwIiwg eG9wZXJhbmRzKTsKKyAgICAgIH0KKyAgICByZXR1cm4gIiIgOworICB9Cisg IFsoc2V0X2F0dHIgImxlbmd0aCIgIjQsIDxsSW1tQXJpdGhEPiwgPGxJbW1B cml0aEQ+LCA8bEltbUFyaXRoRD4iKV0KKykKKworOyBBbGwgbG9uZyAoU0ks IFNGKSByZWdpc3RlciBtb3ZlLCBsb2FkIGFuZCBzdG9yZSBvcGVyYXRpb25z Cis7IFRoZSBwcmludF9vcGVyYW5kIHdpbGwgdGFrZSBjYXJlIG9mIHByaW50 aW5nIHRoZSByZWdpc3RlciBwYWlyIAorOyB3aGVuIG1vZGUgaXMgU0kvU0Yg YW5kIHJlZ2lzdGVyIGlzIGluIFNIT1JUX1JFR1MKKyhkZWZpbmVfaW5zbiAi Km1vdjxtb2RlPl9sb25nIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpMT05H IDAgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIiAiPXIsIHIsIHIsIG0iKQorCSht YXRjaF9vcGVyYW5kOkxPTkcgMSAiZ2VuZXJhbF9vcGVyYW5kIiAiciwgPGlG PiwgbSwgciIpKV0KKyAgInJlZ2lzdGVyX29wZXJhbmQgKG9wZXJhbmRzWzBd LCA8TU9ERT5tb2RlKQorICAgfHwgcmVnaXN0ZXJfb3BlcmFuZCAob3BlcmFu ZHNbMV0sIDxNT0RFPm1vZGUpIgorICAiQAorICBtb3Y8dElzYT5cdCUxLCAl MAorICBtb3Y8dElzYT5cdCUxLCAlMAorICBsb2FkPHRJc2E+XHQlMSwgJTAK KyAgc3Rvcjx0SXNhPlx0JTEsICUwIgorICBbKHNldF9hdHRyICJsZW5ndGgi ICIyLDxsSW1tQXJpdGg+LDxsSW1tQXJpdGg+LDxsSW1tQXJpdGg+IildCisp CisKKzs7IEFsbCBzaG9ydCAoUUksIEhJKSByZWdpc3RlciBtb3ZlLCBsb2Fk IGFuZCBzdG9yZSBvcGVyYXRpb25zCisoZGVmaW5lX2luc24gIiptb3Y8bW9k ZT5fc2hvcnQiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNIT1JUIDAgIm5v bmltbWVkaWF0ZV9vcGVyYW5kIiAiPXIsIHIsIHIsIG0sIG0iKQorCShtYXRj aF9vcGVyYW5kOlNIT1JUIDEgImdlbmVyYWxfb3BlcmFuZCIgInIsIDxpRj4s IG0sIHIsIDxMTD4iKSldCisgICIocmVnaXN0ZXJfb3BlcmFuZCAob3BlcmFu ZHNbMF0sIDxNT0RFPm1vZGUpKQorICAgIHx8IChzdG9yZV9vcGVyYW5kIChv cGVyYW5kc1swXSwgPE1PREU+bW9kZSkKKwkmJiAocmVnaXN0ZXJfb3BlcmFu ZCAob3BlcmFuZHNbMV0sIDxNT0RFPm1vZGUpCisJICAgIHx8IHU0Yml0c19v cGVyYW5kIChvcGVyYW5kc1sxXSwgPE1PREU+bW9kZSkpKSIKKyAgIkAKKyAg bW92PHRJc2E+XHQlMSwgJTAKKyAgbW92PHRJc2E+XHQlMSwgJTAKKyAgbG9h ZDx0SXNhPlx0JTEsICUwCisgIHN0b3I8dElzYT5cdCUxLCAlMAorICBzdG9y PHRJc2E+XHQlMSwgJTAiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIsPGxJ bW1Bcml0aD4sPGxJbW1Bcml0aD4sPGxJbW1Bcml0aD4sPGxJbW1Bcml0aD4i KV0KKykKKworOzsgIENvbXBhcmUgSW5zdHJ1Y3Rpb25zCis7IEluc3RydWN0 aW9uIGdlbmVyYXRlZCBjb21wYXJlcyB0aGUgb3BlcmFuZHMgaW4gcmV2ZXJz ZSBvcmRlcgorOyBUaGVyZWZvcmUsIHdoaWxlIHByaW50aW5nIHRoZSBhc20s IHRoZSByZXZlcnNlIG9mIHRoZQorOyBjb21wYXJlIGNvbmRpdGlvbiBzaGFs bCBiZSBwcmludGVkLgorKGRlZmluZV9pbnNuICJjYnJhbmNoPG1vZGU+NCIK KyAgWyhzZXQgKHBjKQorCShpZl90aGVuX2Vsc2UgKG1hdGNoX29wZXJhdG9y IDAgIm9yZGVyZWRfY29tcGFyaXNvbl9vcGVyYXRvciIKKwkJICAgICAgWyht YXRjaF9vcGVyYW5kOkNSMTZJTSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAicixy IikKKwkJICAgICAgIChtYXRjaF9vcGVyYW5kOkNSMTZJTSAyICJub25tZW1v cnlfb3BlcmFuZCIgInIsbiIpXSkKKwkJICAgICAgIChsYWJlbF9yZWYgKG1h dGNoX29wZXJhbmQgMyAiIiAiIikpCisgICAgICAgICAgICAgICAgICAgICAg KHBjKSkpCisgICAoY2xvYmJlciAoY2MwKSldCisgICIiCisgICJjbXA8dElz YT5cdCUyLCAlMVw7YiVkMFx0JWwzIgorICBbKHNldF9hdHRyICJsZW5ndGgi ICI2LDYiKV0KKykKKworKGRlZmluZV9leHBhbmQgImNtcDxtb2RlPiIKKyAg WyhwYXJhbGxlbCBbKHNldCAoY2MwKQorICAgIChjb21wYXJlIChtYXRjaF9v cGVyYW5kOkNSMTZJTSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKwkgICAg IChtYXRjaF9vcGVyYW5kOkNSMTZJTSAxICJub25tZW1vcnlfb3BlcmFuZCIg IiIpKSkKKyAgICAoY2xvYmJlciAobWF0Y2hfc2NyYXRjaDpISSAyICI9ciIp KV0gKSBdCisgICIiCisgICIiKQorCis7OyAgU2NvbmQgSW5zdHJ1Y3Rpb25z CisoZGVmaW5lX2V4cGFuZCAiY3N0b3JlPG1vZGU+NCIKKyAgWyhzZXQgKGNj MCkKKwkoY29tcGFyZSAobWF0Y2hfb3BlcmFuZDpDUjE2SU0gMiAicmVnaXN0 ZXJfb3BlcmFuZCIgIiIpCisJCSAobWF0Y2hfb3BlcmFuZDpDUjE2SU0gMyAi bm9ubWVtb3J5X29wZXJhbmQiICIiKSkpCisgICAoc2V0IChtYXRjaF9vcGVy YW5kOkhJIDAgInJlZ2lzdGVyX29wZXJhbmQiKQorCShtYXRjaF9vcGVyYXRv cjpISSAxICJvcmRlcmVkX2NvbXBhcmlzb25fb3BlcmF0b3IiCisJWyhjYzAp IChjb25zdF9pbnQgMCldKSldCisgICIiCisgICIiCispCisKKyhkZWZpbmVf aW5zbiAiKmNtcDxtb2RlPl9pbnNuIgorICBbKHNldCAoY2MwKQorCShjb21w YXJlIChtYXRjaF9vcGVyYW5kOkNSMTZJTSAwICJyZWdpc3Rlcl9vcGVyYW5k IiAicixyIikKKwkJIChtYXRjaF9vcGVyYW5kOkNSMTZJTSAxICJub25tZW1v cnlfb3BlcmFuZCIgInIsbiIpKSldCisgICIiCisgICJjbXA8dElzYT5cdCUx LCAlMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiw0IildCispCisKKyhk ZWZpbmVfaW5zbiAic0NPTkRfaW50ZXJuYWwiCisgIFsoc2V0IChtYXRjaF9v cGVyYW5kOkhJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisJKG1hdGNo X29wZXJhdG9yOkhJIDEgIm9yZGVyZWRfY29tcGFyaXNvbl9vcGVyYXRvciIK KwlbKGNjMCkgKGNvbnN0X2ludCAwKV0pKV0KKyAgIiIKKyAgInMlZDFcdCUw IgorICBbKHNldF9hdHRyICJsZW5ndGgiICIyIildCispCisKKzs7ICBKdW1w cyBhbmQgQnJhbmNoZXMKKyhkZWZpbmVfaW5zbiAiaW5kaXJlY3RfanVtcF9y ZXR1cm4iCisgIFsoc2V0IChwYykKKwkgIChyZWc6U0kgUkFfUkVHTlVNKSkK KyAgIChyZXR1cm4pXQorICAicmVsb2FkX2NvbXBsZXRlZCIKKyAgImp1bXBc dCAocmEpIgorICBbKHNldF9hdHRyICJsZW5ndGgiICIyIildCispCisKKyhk ZWZpbmVfaW5zbiAianVtcF9yZXR1cm4iCisgIFsodW5zcGVjOlNJIFsoY29u c3RfaW50IDApXSBVTlNQRUNfUkVUVVJOX0FERFIpCisgICAocmV0dXJuKV0K KyAgInJlbG9hZF9jb21wbGV0ZWQiCisgICJqdW1wXHQocmEpIgorICBbKHNl dF9hdHRyICJsZW5ndGgiICIyIildCispCisKKyhkZWZpbmVfaW5zbiAiaW5k aXJlY3RfanVtcCIKKyAgWyhzZXQgKHBjKQorCShtYXRjaF9vcGVyYW5kOlNJ IDAgInJlZ19vcl9zeW1fb3BlcmFuZCIgInIsaSIpKV0KKyAgIiIKKyAgIkAK KyAganVtcFx0JTAKKyAgYnJcdCVhMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3Ro IiAiMiw2IildCispCisKKyhkZWZpbmVfaW5zbiAiaW50ZXJydXB0X3JldHVy biIKKyAgWyh1bnNwZWNfdm9sYXRpbGUgWyhjb25zdF9pbnQgMCldIDApCisg ICAocmV0dXJuKV0KKyAgIiIKKyAgeworICAgIHJldHVybiBjcjE2X3ByZXBh cmVfcHVzaF9wb3Bfc3RyaW5nICgxKTsKKyAgfQorICBbKHNldF9hdHRyICJs ZW5ndGgiICIxNCIpXQorKQorCisoZGVmaW5lX2luc24gImp1bXBfdG9faW1t IgorICBbKHNldCAocGMpCisJKG1hdGNoX29wZXJhbmQgMCAianVtcF9pbW1f b3BlcmFuZCIgImkiKSldCisgICIiCisgICJiclx0JWMwIgorICBbKHNldF9h dHRyICJsZW5ndGgiICI2IildCispCisKKyhkZWZpbmVfaW5zbiAianVtcCIK KyAgWyhzZXQgKHBjKQorCShsYWJlbF9yZWYgKG1hdGNoX29wZXJhbmQgMCAi IiAiIikpKV0KKyAgIiIKKyAgImJyXHQlbDAiCisgIFsoc2V0X2F0dHIgImxl bmd0aCIgIjYiKV0KKykKKworOzsgIFRhYmxlIEp1bXAKKyhkZWZpbmVfaW5z biAidGFibGVqdW1wIgorICBbKHNldCAocGMpCisJKG1hdGNoX29wZXJhbmQ6 U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkKKyAgICh1c2UgKGxhYmVs X3JlZjpTSSAobWF0Y2hfb3BlcmFuZCAxICIiICIiKSkpXQorICAiIWZsYWdf cGljIgorICAianVtcFx0JTAiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIi KV0KKykKKworOzsgIENhbGwgSW5zdHJ1Y3Rpb25zCisoZGVmaW5lX2V4cGFu ZCAiY2FsbCIKKyAgWyhjYWxsIChtYXRjaF9vcGVyYW5kOlFJIDAgIm1lbW9y eV9vcGVyYW5kIiAiIikKKwkgKG1hdGNoX29wZXJhbmQgMSAiIiAiIikpXQor ICAiIgorICB7CisgICAgaWYgKGZsYWdfcGljICYmICEgbGVnaXRpbWF0ZV9w aWNfb3BlcmFuZF9wIChvcGVyYW5kc1swXSkpCisgICAgICB7CisJb3BlcmFu ZHNbMF0gPSBnZW5fY29uc3RfbWVtIChRSW1vZGUsCisJbGVnaXRpbWl6ZV9w aWNfYWRkcmVzcyAoWEVYUCAob3BlcmFuZHNbMF0sIDApLCBQbW9kZSwgMCkp OworCWVtaXRfY2FsbF9pbnNuIChnZW5fY3IxNl9jYWxsIChvcGVyYW5kc1sw XSwgb3BlcmFuZHNbMV0pKTsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICBl bWl0X2NhbGxfaW5zbiAoZ2VuX2NyMTZfY2FsbCAob3BlcmFuZHNbMF0sIG9w ZXJhbmRzWzFdKSk7CisgICAgICBET05FOworICB9CispCisKKyhkZWZpbmVf ZXhwYW5kICJjcjE2X2NhbGwiCisgIFsocGFyYWxsZWwKKyAgICBbKGNhbGwg KG1hdGNoX29wZXJhbmQ6UUkgMCAibWVtb3J5X29wZXJhbmQiICIiKQorCSAg IChtYXRjaF9vcGVyYW5kIDEgIiIgIiIpKQorICAgKGNsb2JiZXIgKHJlZzpT SSBSQV9SRUdOVU0pKV0pXQorICAiIgorICAiIgorKQorCisoZGVmaW5lX2lu c24gImNyMTZfY2FsbF9pbnNuX2JyYW5jaF9waWMiCisgIFsoY2FsbCAobWVt OlFJIChtYXRjaF9vcGVyYW5kOlNJIDAgImNhbGxfaW1tX29wZXJhbmQiICJp IikpCisJIChtYXRjaF9vcGVyYW5kIDEgIiIgIiIpKQorICAgKGNsb2JiZXIg KG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgIityIikp XQorICAiZmxhZ19waWMgPT0gRkFSX1BJQyIKKyAgeworICAgIGlmIChHRVRf Q09ERSAob3BlcmFuZHNbMF0pICE9IENPTlNUX0lOVCkKKyAgICAgIHJldHVy biAibG9hZGRcdCVnMCwgJTIgXG5cdGphbCAlMiI7CisgICAgZWxzZQorICAg ICAgcmV0dXJuICJqYWwgJTIiOworICB9CisgIFsoc2V0X2F0dHIgImxlbmd0 aCIgIjgiKV0KKykKKworKGRlZmluZV9pbnNuICJjcjE2X2NhbGxfaW5zbl9i cmFuY2giCisgIFsoY2FsbCAobWVtOlFJIChtYXRjaF9vcGVyYW5kOlNJIDAg ImNhbGxfaW1tX29wZXJhbmQiICJpIikpCisJIChtYXRjaF9vcGVyYW5kIDEg IiIgIiIpKQorICAgKGNsb2JiZXIgKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVn aXN0ZXJfb3BlcmFuZCIgIityIikpXQorICAiZmxhZ19waWMgPT0gMCB8fCBm bGFnX3BpYyA9PSBORUFSX1BJQyIKKyAgeworICAgIC8qIFByaW50IHRoZSBp bW1lZGlhdGUgYWRkcmVzcyBmb3IgYmFsIAorICAgICAgICdiJyBpcyB1c2Vk IGluc3RlYWQgb2YgJ2EnIHRvIGF2b2lkIGNvbXBpbGVyIGNhbGxpbmcKKyAg ICAgICB0aGUgR09fSUZfTEVHSVRJTUFURV9BRERSRVNTIHdoaWNoIGNhbm5v dAorICAgICAgIHBlcmZvcm0gY2hlY2tzIG9uIGNvbnN0X2ludCBjb2RlIGFk ZHJlc3NlcyBhcyBpdAorICAgICAgIGFzc3VtZXMgYWxsIGNvbnN0X2ludCBh cmUgZGF0YSBhZGRyZXNzZXMuCisgICAgKi8KKyAgICBpZiAoR0VUX0NPREUg KG9wZXJhbmRzWzBdKSAhPSBDT05TVF9JTlQpCisgICAgICByZXR1cm4gImJh bCAocmEpLCAlYTAiOworICAgIGVsc2UKKyAgICAgIG9wZXJhbmRzWzRdID0g R0VOX0lOVCAoKElOVFZBTCAob3BlcmFuZHNbMF0pKT4+MSk7CisgICAgICBy ZXR1cm4gIm1vdmRcdCVnNCxcdChyMSxyMClcblx0amFsXHQocjEscjApIjsJ CisgIH0KKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiNiIpXQorKQorCisoZGVm aW5lX2luc24gImNyMTZfY2FsbF9pbnNuX2p1bXAiCisgIFsoY2FsbCAobWVt OlFJIChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICJy IikpCisJIChtYXRjaF9vcGVyYW5kIDEgIiIgIiIpKQorICAgKGNsb2JiZXIg KG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgIityIikp XQorICAiIgorICAiamFsXHQlMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAi MiIpXQorKQorCis7OyAgQ2FsbCBWYWx1ZSBJbnN0cnVjdGlvbnMKKworKGRl ZmluZV9leHBhbmQgImNhbGxfdmFsdWUiCisgIFsoc2V0IChtYXRjaF9vcGVy YW5kIDAgImdlbmVyYWxfb3BlcmFuZCIgIiIpCisJKGNhbGwgKG1hdGNoX29w ZXJhbmQ6UUkgMSAibWVtb3J5X29wZXJhbmQiICIiKQorCSAgICAgIChtYXRj aF9vcGVyYW5kIDIgIiIgIiIpKSldCisgICIiCisgIHsKKyAgICBpZiAoZmxh Z19waWMgJiYgIWxlZ2l0aW1hdGVfcGljX29wZXJhbmRfcCAob3BlcmFuZHNb MV0pKQorICAgICAgeworCW9wZXJhbmRzWzFdID0gZ2VuX2NvbnN0X21lbSAo UUltb2RlLAorCWxlZ2l0aW1pemVfcGljX2FkZHJlc3MgKFhFWFAgKG9wZXJh bmRzWzFdLCAwKSwgUG1vZGUsIDApKTsKKwllbWl0X2NhbGxfaW5zbiAoZ2Vu X2NyMTZfY2FsbF92YWx1ZSAob3BlcmFuZHNbMF0sIG9wZXJhbmRzWzFdLCBv cGVyYW5kc1syXSkpOworICAgICAgfQorICAgIGVsc2UKKwllbWl0X2NhbGxf aW5zbiAoZ2VuX2NyMTZfY2FsbF92YWx1ZSAob3BlcmFuZHNbMF0sIG9wZXJh bmRzWzFdLCBvcGVyYW5kc1syXSkpOworICAgIERPTkU7CisgIH0KKykKKwor KGRlZmluZV9leHBhbmQgImNyMTZfY2FsbF92YWx1ZSIKKyAgWyhwYXJhbGxl bAorICAgIFsoc2V0IChtYXRjaF9vcGVyYW5kIDAgImdlbmVyYWxfb3BlcmFu ZCIgIiIpCisJICAoY2FsbCAobWF0Y2hfb3BlcmFuZCAxICJtZW1vcnlfb3Bl cmFuZCIgIiIpCisJCShtYXRjaF9vcGVyYW5kIDIgIiIgIiIpKSkKKyAgICAg KGNsb2JiZXIgKHJlZzpTSSBSQV9SRUdOVU0pKV0pXQorICAiIgorICAiIgor KQorCisoZGVmaW5lX2luc24gImNyMTZfY2FsbF92YWx1ZV9pbnNuX2JyYW5j aF9waWMiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kIDAgIiIgIj1nIikKKwko Y2FsbCAobWVtOlFJIChtYXRjaF9vcGVyYW5kOlNJIDEgImNhbGxfaW1tX29w ZXJhbmQiICJpIikpCisJICAgICAgKG1hdGNoX29wZXJhbmQgMiAiIiAiIikp KQorICAgKGNsb2JiZXIgKG1hdGNoX29wZXJhbmQ6U0kgMyAicmVnaXN0ZXJf b3BlcmFuZCIgIityIikpXQorICAiZmxhZ19waWMgPT0gRkFSX1BJQyIKKyAg eworICAgIGlmIChHRVRfQ09ERSAob3BlcmFuZHNbMV0pICE9IENPTlNUX0lO VCkKKyAgICAgIHJldHVybiAibG9hZGRcdCVnMSwgJTMgXG5cdGphbCAlMyI7 CisgICAgZWxzZQorICAgICAgcmV0dXJuICJqYWwgJTMiOworICB9CisgIFso c2V0X2F0dHIgImxlbmd0aCIgIjgiKV0KKykKKworKGRlZmluZV9pbnNuICJj cjE2X2NhbGxfdmFsdWVfaW5zbl9icmFuY2giCisgIFsoc2V0IChtYXRjaF9v cGVyYW5kIDAgIiIgIj1nIikKKwkoY2FsbCAobWVtOlFJIChtYXRjaF9vcGVy YW5kOlNJIDEgImNhbGxfaW1tX29wZXJhbmQiICJpIikpCisJICAgICAgKG1h dGNoX29wZXJhbmQgMiAiIiAiIikpKQorICAgKGNsb2JiZXIgKG1hdGNoX29w ZXJhbmQ6U0kgMyAicmVnaXN0ZXJfb3BlcmFuZCIgIityIikpXQorICAiZmxh Z19waWMgPT0gMCB8fCBmbGFnX3BpYyA9PSBORUFSX1BJQyIKKyAgeworICAg IC8qIFByaW50IHRoZSBpbW1lZGlhdGUgYWRkcmVzcyBmb3IgYmFsIAorICAg ICAgICdiJyBpcyB1c2VkIGluc3RlYWQgb2YgJ2EnIHRvIGF2b2lkIGNvbXBp bGVyIGNhbGxpbmcKKyAgICAgICB0aGUgR09fSUZfTEVHSVRJTUFURV9BRERS RVNTIHdoaWNoIGNhbm5vdAorICAgICAgIHBlcmZvcm0gY2hlY2tzIG9uIGNv bnN0X2ludCBjb2RlIGFkZHJlc3NlcyBhcyBpdAorICAgICAgIGFzc3VtZXMg YWxsIGNvbnN0X2ludCBhcmUgZGF0YSBhZGRyZXNzZXMuCisgICAgKi8KKyAg ICBpZiAoR0VUX0NPREUgKG9wZXJhbmRzWzFdKSAhPSBDT05TVF9JTlQpIAor ICAgICAgcmV0dXJuICJiYWwgKHJhKSwgJWExIjsKKyAgICBlbHNlCisgICAg ICB7CisJb3BlcmFuZHNbNF0gPSBHRU5fSU5UICgoSU5UVkFMIChvcGVyYW5k c1sxXSkpPj4xKTsKKyAgICAgICAgcmV0dXJuICJtb3ZkXHQlZzQsXHQocjEs cjApXG5cdGphbFx0KHIxLHIwKSI7CQorICAgICAgfQorICB9CisgIFsoc2V0 X2F0dHIgImxlbmd0aCIgIjYiKV0KKykKKworCisoZGVmaW5lX2luc24gImNy MTZfY2FsbF92YWx1ZV9pbnNuX2p1bXAiCisgIFsoc2V0IChtYXRjaF9vcGVy YW5kIDAgIiIgIj1nIikKKwkoY2FsbCAobWVtOlFJIChtYXRjaF9vcGVyYW5k OlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpCisJICAgICAgKG1hdGNo X29wZXJhbmQgMiAiIiAiIikpKQorICAgKGNsb2JiZXIgKG1hdGNoX29wZXJh bmQ6U0kgMyAicmVnaXN0ZXJfb3BlcmFuZCIgIityIikpXQorICAiIgorICAi amFsXHQlMSIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiIpXQorKQorCisK Kzs7ICBOb3AKKyhkZWZpbmVfaW5zbiAibm9wIgorICBbKGNvbnN0X2ludCAw KV0KKyAgIiIKKyAgIm5vcFx0IgorKQorCis7OyBQSUMKKy8qIFdoZW4gZ2Vu ZXJhdGluZyBwaWMsIHdlIG5lZWQgdG8gbG9hZCB0aGUgc3ltYm9sIG9mZnNl dCBpbnRvIGEgcmVnaXN0ZXIuCisgICBTbyB0aGF0IHRoZSBvcHRpbWl6ZXIg ZG9lcyBub3QgY29uZnVzZSB0aGlzIHdpdGggYSBub3JtYWwgc3ltYm9sIGxv YWQKKyAgIHdlIHVzZSBhbiB1bnNwZWMuICBUaGUgb2Zmc2V0IHdpbGwgYmUg bG9hZGVkIGZyb20gYSBjb25zdGFudCBwb29sIGVudHJ5LAorICAgc2luY2Ug dGhhdCBpcyB0aGUgb25seSB0eXBlIG9mIHJlbG9jYXRpb24gd2UgY2FuIHVz ZS4gICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiso ZGVmaW5lX2luc24gInVuc3BlY19icm9fYWRkciIKKyAgWyhzZXQgKG1hdGNo X29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKwkodW5z cGVjOlNJIFsobWF0Y2hfb3BlcmFuZCAxICIiICIiKV0gVU5TUEVDX1BJQ19B RERSKSldCisgICIiCisgICJtb3ZkIFx0JWYxLCAlMCIKKyAgWyhzZXRfYXR0 ciAibGVuZ3RoIiAiNCIpXQorKQorCisoZGVmaW5lX2luc24gInVuc3BlY19n b3RfYWRkciIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0 ZXJfb3BlcmFuZCIgIj1yIikKKwkodW5zcGVjOlNJIFsobWF0Y2hfb3BlcmFu ZCAxICIiICIiKV0gVU5TUEVDX1BJQ19MT0FEX0FERFIpKV0KKyAgIiIKKyAg ImxvYWRkIFx0JWcxLCAlMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiNiIp XQorKQotLS0gZ2NjL2NvbmZpZy9jcjE2L2NyMTYub3B0CTE5NzAtMDEtMDEg MDU6MzA6MDAuMDAwMDAwMDAwICswNTMwCisrKyBnY2MvY29uZmlnL2NyMTYv Y3IxNi5vcHQJMjAxMS0xMS0yOCAxMjo0Njo0MC4wMDAwMDAwMDAgKzA1MzAK QEAgLTAsMCArMSw1MSBAQAorOyBPcHRpb25zIGZvciB0aGUgTmF0aW9uYWwg U2VtaWNvbmR1Y3RvciBDUjE2IHBvcnQgb2YgdGhlIGNvbXBpbGVyLgorOyBD b3B5cmlnaHQgKEMpIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ bmMuCis7IENvbnRyaWJ1dGVkIGJ5IEtQSVQgQ3VtbWlucyBJbmZvc3lzdGVt cyBMaW1pdGVkLgorOworOyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCis7 Cis7IEdDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Cis7IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCis7 IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz aW9uIDMsIG9yIChhdCB5b3VyCis7IG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCis7Cis7IEdDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorOyBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJD SEFOVEFCSUxJVFkKKzsgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworOyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCis7Cis7IFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl Cis7IGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJ ZiBub3Qgc2VlCis7IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4K KworbXNpbQorVGFyZ2V0CistbXNpbSAgIFVzZSBzaW11bGF0b3IgcnVudGlt ZQorCittYml0LW9wcworVGFyZ2V0IFJlcG9ydCBNYXNrKEJJVF9PUFMpCitH ZW5lcmF0ZSBTQklULCBDQklUIGluc3RydWN0aW9ucworCittbWFjCitUYXJn ZXQgUmVwb3J0IE1hc2soTUFDKQorU3VwcG9ydCBtdWx0aXBseSBhY2N1bXVs YXRlIGluc3RydWN0aW9ucworCittZGVidWctYWRkcgorVGFyZ2V0IFJlamVj dE5lZ2F0aXZlIFZhcihUQVJHRVRfREVCVUdfQUREUikgVW5kb2N1bWVudGVk CisKK21kYXRhLW1vZGVsPQorVGFyZ2V0IFJlamVjdE5lZ2F0aXZlIEpvaW5l ZE9yTWlzc2luZyBWYXIoY3IxNl9kYXRhX21vZGVsKQorVHJlYXQgZGF0YSBy ZWZlcmVuY2VzIGFzIG5lYXIsIGZhciBvciBtZWRpdW0uIG1lZGl1bSBpcyBk ZWZhdWx0CisKK21jcjE2YworVGFyZ2V0IFJlamVjdE5lZ2F0aXZlIE1hc2so Q1IxNkMpCitHZW5lcmF0ZSBjb2RlIGZvciBDUjE2QyBhcmNoaXRlY3R1cmUK KworbWNyMTZjcGx1cworVGFyZ2V0IFJlamVjdE5lZ2F0aXZlIEludmVyc2VN YXNrKENSMTZDLENSMTZDUCkKK0dlbmVyYXRlIGNvZGUgZm9yIENSMTZDKyBh cmNoaXRlY3R1cmUgKERlZmF1bHQpCisKK21pbnQzMgorVGFyZ2V0IFJlamVj dE5lZ2F0aXZlIE1hc2soSU5UMzIpCitUcmVhdCBpbnRlZ2VycyBhcyAzMi1i aXQuCisKLS0tIGdjYy9jb25maWcvY3IxNi9jcjE2LXByb3Rvcy5oCTE5NzAt MDEtMDEgMDU6MzA6MDAuMDAwMDAwMDAwICswNTMwCisrKyBnY2MvY29uZmln L2NyMTYvY3IxNi1wcm90b3MuaAkyMDExLTExLTI4IDEyOjQ2OjQwLjAwMDAw MDAwMCArMDUzMApAQCAtMCwwICsxLDEwMSBAQAorLyogUHJvdG90eXBlcyBm b3IgZXhwb3J0ZWQgZnVuY3Rpb25zIGRlZmluZWQgaW4gY3IxNi5jCisgICBD b3B5cmlnaHQgKEMpIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ bmMuCisgICBDb250cmlidXRlZCBieSBLUElUIEN1bW1pbnMgSW5mb3N5c3Rl bXMgTGltaXRlZC4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgor CisgICBHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQK KyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2 ZXJzaW9uIDMsIG9yIChhdCB5b3VyCisgICBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgorCisgICBHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m IE1FUkNIQU5UQUJJTElUWQorICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZQorICAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZ SU5HMy4gIElmIG5vdCBzZWUKKyAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGlj ZW5zZXMvPi4gICovCisKKyNpZm5kZWYgR0NDX0NSMTZfUFJPVE9TX0gKKyNk ZWZpbmUgR0NDX0NSMTZfUFJPVE9TX0gKKworI2luY2x1ZGUgInRhcmdldC5o IgorCisvKiBSZWdpc3RlciB1c2FnZS4gICovCitleHRlcm4gZW51bSByZWdf Y2xhc3MgY3IxNl9yZWdub19yZWdfY2xhc3MgKGludCk7CitleHRlcm4gaW50 IGNyMTZfaGFyZF9yZWdub19tb2RlX29rIChpbnQgcmVnbm8sIGVudW0gbWFj aGluZV9tb2RlKTsKKworLyogUGFzc2luZyBmdW5jdGlvbiBhcmd1bWVudHMu ICAqLworZXh0ZXJuIGludCBjcjE2X2Z1bmN0aW9uX2FyZ19yZWdub19wIChp bnQpOworCisjaWZkZWYgVFJFRV9DT0RFCisjaWZkZWYgUlRYX0NPREUKKwor ZXh0ZXJuIHZvaWQgY3IxNl9pbml0X2N1bXVsYXRpdmVfYXJncyAoQ1VNVUxB VElWRV9BUkdTICosIHRyZWUsIHJ0eCk7CisKKyNlbmRpZiAvKiBSVFhfQ09E RS4gICovCisjZW5kaWYgLyogVFJFRV9DT0RFLiAgKi8KKworLyogRW51bWVy YXRpb24gZ2l2aW5nIHRoZSB2YXJpb3VzIGRhdGEgbW9kZWxzIHdlIHN1cHBv cnQuICAqLworZW51bSBkYXRhX21vZGVsX3R5cGUKK3sKKyAgRE1fREVGQVVM VCwJCS8qIERlZmF1bHQgZGF0YSBtb2RlbCAoaW4gQ1IxNkMvQysgLSB1cCB0 byAxNk0pLiAgKi8KKyAgRE1fTkVBUiwJCS8qIE5lYXIgZGF0YSBtb2RlbCAg ICAoaW4gQ1IxNkMvQysgLSB1cCB0byAxTSkuICAqLworICBETV9GQVIsCQkv KiBGYXIgZGF0YSBtb2RlbCAgICAgKGluIENSMTZDKyAgIC0gdXAgdG8gNEcp CisJCQkgICAoaW4gQ1IxNkMgICAgLSB1cCB0byAxNk0pLiAgKi8KKyAgSUxM RUdBTF9ETQkJLyogSWxsZWdhbCBkYXRhIG1vZGVsLiAgKi8KK307CisKKyNp ZmRlZiBSVFhfQ09ERQorCisvKiBBZGRyZXNzaW5nIE1vZGVzLiAgKi8KK3N0 cnVjdCBjcjE2X2FkZHJlc3MKK3sKKyAgcnR4IGJhc2U7CSAJLyogQmFzZSBy ZWdpc3RlcjogQW55IHJlZ2lzdGVyIG9yIHJlZ2lzdGVyIHBhaXIuICAqLwor ICBydHggaW5kZXg7CQkvKiBJbmRleCByZWdpc3RlcjogSWYgb25lIGlzIHBy ZXNlbnQuICAqLworICBydHggZGlzcDsJCS8qIERpc3BsYWNlbWVudCBvciBB YnNvbHV0ZSBhZGRyZXNzLiAgKi8KKyAgZW51bSBkYXRhX21vZGVsX3R5cGUg ZGF0YTsJLyogZGF0YSByZWYgdHlwZS4gICovCisgIGludCBjb2RlOwkJLyog V2hldGhlciB0aGUgYWRkcmVzcyBpcyBjb2RlIGFkZHJlc3MuIAorCQkJICAg MCAtIGRhdGEsIDEgLSBjb2RlIGxhYmVsLCAyIC0gZnVuY3Rpb24gbGFiZWwu ICAqLworfTsKKworZW51bSBjcjE2X2FkZHJ0eXBlCit7CisgIENSMTZfSU5W QUxJRCwKKyAgQ1IxNl9SRUdfUkVMLAorICBDUjE2X1JFR1BfUkVMLAorICBD UjE2X0lOREVYX1JFR1BfUkVMLAorICBDUjE2X0FCU09MVVRFCit9OworCitl eHRlcm4gdm9pZCBub3RpY2VfdXBkYXRlX2NjIFBBUkFNUyAoKHJ0eCkpOwor ZXh0ZXJuIGludCBjcjE2X29wZXJhbmRfYml0X3BvcyAoaW50IHZhbCwgaW50 IGJpdHZhbCk7CitleHRlcm4gdm9pZCBjcjE2X2RlY29tcG9zZV9jb25zdCAo cnR4IHgsIGludCAqY29kZSwKKwkJCQkgIGVudW0gZGF0YV9tb2RlbF90eXBl ICpkYXRhLAorCQkJCSAgYm9vbCB0cmVhdF9hc19jb25zdCk7CitleHRlcm4g ZW51bSBjcjE2X2FkZHJ0eXBlIGNyMTZfZGVjb21wb3NlX2FkZHJlc3MgKHJ0 eCBhZGRyLAorCQkJCQkJICBzdHJ1Y3QgY3IxNl9hZGRyZXNzICpvdXQsCisJ CQkJCQkgIGJvb2wgZGVidWdfcHJpbnQsCisJCQkJCQkgIGJvb2wgdHJlYXRf YXNfY29uc3QpOworZXh0ZXJuIGludCBjcjE2X2NvbnN0X2RvdWJsZV9vayAo cnR4IG9wKTsKK2V4dGVybiBpbnQgbGVnaXRpbWF0ZV9waWNfb3BlcmFuZF9w IChydHgpOworZXh0ZXJuIHJ0eCBsZWdpdGltaXplX3BpY19hZGRyZXNzIChy dHgsIGVudW0gbWFjaGluZV9tb2RlLCBydHgpOworCisjZW5kaWYgLyogUlRY X0NPREUuICAqLworCisKKy8qIFByb2xvZ3VlL0VwaWxvZ3VlIGZ1bmN0aW9u cy4gICovCitleHRlcm4gaW50IGNyMTZfaW5pdGlhbF9lbGltaW5hdGlvbl9v ZmZzZXQgKGludCwgaW50KTsKK2V4dGVybiBjaGFyICpjcjE2X3ByZXBhcmVf cHVzaF9wb3Bfc3RyaW5nIChpbnQpOworZXh0ZXJuIHZvaWQgY3IxNl9leHBh bmRfcHJvbG9ndWUgKHZvaWQpOworZXh0ZXJuIHZvaWQgY3IxNl9leHBhbmRf ZXBpbG9ndWUgKHZvaWQpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmNyMTZfZW1p dF9hZGRfc3ViX2RpIChydHggKiwgZW51bSBydHhfY29kZSk7CitleHRlcm4g Y29uc3QgY2hhciAqY3IxNl9lbWl0X2xvZ2ljYWxfZGkgKHJ0eCAqLCBlbnVt IHJ0eF9jb2RlKTsKKworLyogSGFuZGxpbmcgdGhlICJpbnRlcnJ1cHQiIGF0 dHJpYnV0ZS4gICovCitleHRlcm4gaW50IGNyMTZfaW50ZXJydXB0X2Z1bmN0 aW9uX3AgKHZvaWQpOworZXh0ZXJuIGJvb2wgY3IxNl9pc19kYXRhX21vZGVs IChlbnVtIGRhdGFfbW9kZWxfdHlwZSk7CisKKyNlbmRpZiAvKiBOb3QgR0ND X0NSMTZfUFJPVE9TX0guICAqLyAKLS0tIGdjYy9jb25maWcvY3IxNi9wcmVk aWNhdGVzLm1kCTE5NzAtMDEtMDEgMDU6MzA6MDAuMDAwMDAwMDAwICswNTMw CisrKyBnY2MvY29uZmlnL2NyMTYvcHJlZGljYXRlcy5tZAkyMDExLTExLTI4 IDEyOjQ2OjQwLjAwMDAwMDAwMCArMDUzMApAQCAtMCwwICsxLDIyNSBAQAor OzsgUHJlZGljYXRlcyBvZiBtYWNoaW5lIGRlc2NyaXB0aW9uIGZvciBDUjE2 LgorOzsgQ29weXJpZ2h0IChDKSAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbiwgSW5jLgorOzsgQ29udHJpYnV0ZWQgYnkgS1BJVCBDdW1taW5zIElu Zm9zeXN0ZW1zIExpbWl0ZWQuCis7OworOzsgVGhpcyBmaWxlIGlzIHBhcnQg b2YgR0NDLgorOzsKKzs7IEdDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Cis7OyB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz IHB1Ymxpc2hlZAorOzsgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIKKzs7IG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCis7OworOzsgR0NDIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRI T1VUCis7OyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKzs7IG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMKKzs7IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKzs7Cis7 OyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorOzsgYWxvbmcgd2l0aCBHQ0M7IHNl ZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzs7IDxodHRwOi8v d3d3LmdudS5vcmcvbGljZW5zZXMvPi4gIAorCis7OyAgUHJlZGljYXRlcwor Cis7OyBQcmVkaWNhdGVzIGZvciBzYml0L2NiaXQgaW5zdHJ1Y3Rpb25zCis7 OyBiaXQgb3BlcmFuZCB1c2VkIGZvciB0aGUgZ2VuZXJhdGlvbiBvZiBiaXQg aW5zbiBnZW5lcmF0aW9uCisoZGVmaW5lX3ByZWRpY2F0ZSAiYml0X29wZXJh bmQiCisgIChtYXRjaF9jb2RlICJtZW0iKQoreworICByZXR1cm4gKChHRVRf Q09ERSAob3ApID09IE1FTSAmJiBPS19GT1JfWiAob3ApKSk7Cit9KQorCis7 OyBVbnNpZ25lZCA0LWJpdHMgY29uc3RhbnQgaW50IG9yIGRvdWJsZSB2YWx1 ZS4KKyhkZWZpbmVfcHJlZGljYXRlICJ1NGJpdHNfb3BlcmFuZCIKKyAgKG1h dGNoX2NvZGUgImNvbnN0X2ludCxjb25zdF9kb3VibGUiKQoreworICBpZiAo R0VUX0NPREUgKG9wKSA9PSBDT05TVF9ET1VCTEUpCisgICAgcmV0dXJuIGNy MTZfY29uc3RfZG91YmxlX29rIChvcCk7CisgICAgcmV0dXJuIChVTlNJR05F RF9JTlRfRklUU19OX0JJVFMoSU5UVkFMIChvcCksIDQpKSA/IDEgOiAwOwor fSkKKworOzsgT3BlcmFuZCBpcyBhIGNvbnN0YW50IGludGVnZXIgd2hlcmUK Kzs7IG9ubHkgb25lIGJpdCBpcyBzZXQgdG8gMS4KKyhkZWZpbmVfcHJlZGlj YXRlICJvbmVfYml0X29wZXJhbmQiCisgIChtYXRjaF9jb2RlICJjb25zdF9p bnQiKQoreworICB1bnNpZ25lZCBpbnQgdmFsOworCisgIHZhbCA9IElOVFZB TCAob3ApOworICBpZiAobW9kZSA9PSBRSW1vZGUpIAorICAgIHZhbCAmPSAw eGZmOworICBlbHNlIGlmIChtb2RlID09IEhJbW9kZSkKKyAgICB2YWwgJj0g MHhmZmZmOworICBlbHNlCisgICAgZ2NjX3VucmVhY2hhYmxlKCk7CisKKyAg aWYgKHZhbCAhPSAwKQorICAgIHJldHVybiAodmFsICYgKHZhbCAtIDEpKSA9 PSAwOyAvKiB0cnVlIGlmIG9ubHkgb25lIGJpdCBpcyBzZXQuICAqLworICBl bHNlCisgICAgcmV0dXJuIDA7Cit9KQorCis7OyBPcGVyYW5kIGlzIGEgY29u c3RhbnQgaW50ZWdlciB3aGVyZQorOzsgb25seSBvbmUgYml0IGlzIHNldCB0 byAwLgorKGRlZmluZV9wcmVkaWNhdGUgInJldl9vbmVfYml0X29wZXJhbmQi CisgIChtYXRjaF9jb2RlICJjb25zdF9pbnQiKQoreworICB1bnNpZ25lZCBp bnQgdmFsOworCisgIHZhbCA9IH5JTlRWQUwgKG9wKTsgLyogSW52ZXJ0IGFu ZCB1c2UuICAqLworICBpZiAobW9kZSA9PSBRSW1vZGUpIAorICAgIHZhbCAm PSAweGZmOworICBlbHNlIGlmIChtb2RlID09IEhJbW9kZSkKKyAgICB2YWwg Jj0gMHhmZmZmOworICBlbHNlCisgICAgZ2NjX3VucmVhY2hhYmxlKCk7CisK KyAgaWYgKHZhbCAhPSAwKQorICAgIHJldHVybiAodmFsICYgKHZhbCAtIDEp KSA9PSAwOyAvKiB0cnVlIGlmIG9ubHkgb25lIGJpdCBpcyBzZXQuICAqLwor ICBlbHNlCisgICAgcmV0dXJuIDA7Cit9KQorCis7OyBQcmVkaWNhdGVzIGZv ciBzaGlmdCBpbnN0cnVjdGlvbnMKKzs7IEltbWVkaWF0ZSBvcGVyYW5kIHBy ZWRpY2F0ZSBmb3IgY291bnQgaW4gc2hpZnQgb3BlcmF0aW9ucy4KKzs7IElt bWVkaWF0ZSBzaGFsbCBiZSAzLWJpdHMgaW4gY2FzZSBvcGVyYW5kIHRvIGJl IG9wZXJhdGVkIG9uCis7OyBpcyBhIHFpIG1vZGUgb3BlcmFuZC4KKyhkZWZp bmVfcHJlZGljYXRlICJzaGlmdF9xaV9pbW1fb3BlcmFuZCIKKyAgKG1hdGNo X2NvZGUgImNvbnN0X2ludCIpCit7CisgIHJldHVybiAoVU5TSUdORURfSU5U X0ZJVFNfTl9CSVRTKElOVFZBTCAob3ApLCAzKSkgPyAxIDogMDsKK30pCisK Kzs7IEltbWVkaWF0ZSBzaGFsbCBiZSA0LWJpdHMgaW4gY2FzZSBvcGVyYW5k IHRvIGJlIG9wZXJhdGVkIG9uCis7OyBpcyBhIGhpIG1vZGUgb3BlcmFuZC4K KyhkZWZpbmVfcHJlZGljYXRlICJzaGlmdF9oaV9pbW1fb3BlcmFuZCIKKyAg KG1hdGNoX2NvZGUgImNvbnN0X2ludCIpCit7CisgIHJldHVybiAoVU5TSUdO RURfSU5UX0ZJVFNfTl9CSVRTKElOVFZBTCAob3ApLCA0KSkgPyAxIDogMDsK K30pCisKKzs7IEltbWVkaWF0ZSBzaGFsbCBiZSAzLWJpdHMgaW4gY2FzZSBv cGVyYW5kIHRvIGJlIG9wZXJhdGVkIG9uCis7OyBpcyBhIHNpIG1vZGUgb3Bl cmFuZC4KKyhkZWZpbmVfcHJlZGljYXRlICJzaGlmdF9zaV9pbW1fb3BlcmFu ZCIKKyAgKG1hdGNoX2NvZGUgImNvbnN0X2ludCIpCit7CisgIHJldHVybiAo VU5TSUdORURfSU5UX0ZJVFNfTl9CSVRTKElOVFZBTCAob3ApLCA1KSkgPyAx IDogMDsKK30pCisKKzs7IFByZWRpY2F0ZXMgZm9yIGp1bXAvY2FsbCBpbnN0 cnVjdGlvbnMKKzs7IEp1bXAgaW1tZWRpYXRlIGNhbm5vdCBiZSBtb3JlIHRo YW4gMjQtYml0cworKGRlZmluZV9wcmVkaWNhdGUgImp1bXBfaW1tX29wZXJh bmQiCisgIChtYXRjaF9jb2RlICJjb25zdF9pbnQiKQoreworICByZXR1cm4g KFVOU0lHTkVEX0lOVF9GSVRTX05fQklUUyhJTlRWQUwgKG9wKSwgMjQpKSA/ IDEgOiAwOworfSkKKworOzsgQ2FsbCBpbW1lZGlhdGUgY2Fubm90IGJlIG1v cmUgdGhhbiAyNC1iaXRzCisoZGVmaW5lX3ByZWRpY2F0ZSAiY2FsbF9pbW1f b3BlcmFuZCIKKyAgKG1hdGNoX29wZXJhbmQgMCAiaW1tZWRpYXRlX29wZXJh bmQiKQoreworICBpZiAoR0VUX0NPREUgKG9wKSAhPSBDT05TVF9JTlQpIHJl dHVybiAxOworICAgIHJldHVybiAoVU5TSUdORURfSU5UX0ZJVFNfTl9CSVRT KElOVFZBTCAob3ApLCAyNCkpID8gMSA6IDA7Cit9KQorCis7OyBPcGVyYW5k IGlzIHJlZ2lzdGVyIG9yIDQtYml0IGltbWVkaWF0ZSBvcGVyYW5kCisoZGVm aW5lX3ByZWRpY2F0ZSAicmVnX29yX3U0Yml0c19vcGVyYW5kIgorICAoaW9y IChtYXRjaF9vcGVyYW5kIDAgInU0Yml0c19vcGVyYW5kIikKKyAgICAgICAo bWF0Y2hfb3BlcmFuZCAwICJyZWdpc3Rlcl9vcGVyYW5kIikpKQorCis7OyBP cGVyYW5kIGlzIGEgcmVnaXN0ZXIgb3Igc3ltYm9sIHJlZmVyZW5jZQorKGRl ZmluZV9wcmVkaWNhdGUgInJlZ19vcl9zeW1fb3BlcmFuZCIKKyAgKGlvciAo bWF0Y2hfY29kZSAic3ltYm9sX3JlZiIpCisgICAgICAgKG1hdGNoX29wZXJh bmQgMCAicmVnaXN0ZXJfb3BlcmFuZCIpKSkKKworOzsgT3BlcmFuZCBpcyBh IG5vbiBzdGFjayBwb2ludGVyIHJlZ2lzdGVyCisoZGVmaW5lX3ByZWRpY2F0 ZSAibm9zcF9yZWdfb3BlcmFuZCIKKyAgKGFuZCAobWF0Y2hfb3BlcmFuZCAw ICJyZWdpc3Rlcl9vcGVyYW5kIikKKyAgICAgICAobWF0Y2hfdGVzdCAiUkVH Tk8gKG9wKSAhPSBTUF9SRUdOVU0iKSkpCisKKyhkZWZpbmVfcHJlZGljYXRl ICJoYXJkX3JlZ19vcGVyYW5kIgorICAoYW5kIChtYXRjaF9vcGVyYW5kIDAg InJlZ2lzdGVyX29wZXJhbmQiKQorICAgICAgIChtYXRjaF90ZXN0ICJSRUdO TyAob3ApIDw9IDE1IikpKQorCis7OyBPcGVyYW5kIGlzIGEgbWVtb3J5IHJl ZmVyZW5jZSBhbmQKKzs7IG5vdCBhIHB1c2ggb3BlcmFuZC4KKyhkZWZpbmVf cHJlZGljYXRlICJzdG9yZV9vcGVyYW5kIgorICAoYW5kIChtYXRjaF9vcGVy YW5kIDAgIm1lbW9yeV9vcGVyYW5kIikKKyAgICAgICAobm90IChtYXRjaF9v cGVyYW5kIDAgInB1c2hfb3BlcmFuZCIpKSkpCisKKzs7IEhlbHBlciBwcmVk aWNhdGUgCisoZGVmaW5lX3ByZWRpY2F0ZSAicmVnX29yX2ludF9vcGVyYW5k IgorICAoaW9yIChtYXRjaF9jb2RlICJjb25zdF9pbnQiKQorICAgICAgICht YXRjaF9vcGVyYW5kIDAgInJlZ2lzdGVyX29wZXJhbmQiKSkpCisKKzs7Cis7 OworOzsgQXRpdGhtZXRpYy9sb2dpY2FsIHByZWRpY2F0ZXMKKworOzsgUUkg SGVscGVyCisoZGVmaW5lX3ByZWRpY2F0ZSAiYXJpdGhfcWlfb3BlcmFuZCIK KyAgIChtYXRjaF9jb2RlICJjb25zdF9pbnQiKQoreworICAgICAgICByZXR1 cm4gKElOX1JBTihJTlRWQUwgKG9wKSwgMCwgMTUpICYmICgoSU5UVkFMIChv cCkgIT0gOSkgCisgICAgICAgICAgICAgICAgfHwgKElOVFZBTCAob3ApICE9 IDExKSkpID8gMSA6IDAgOyAKK30pCisKKzs7UUkgUmVnLCBzdWJyZWcocmVn KSBvciBjb25zdF9pbnQuCisoZGVmaW5lX3ByZWRpY2F0ZSAicmVnX3FpX2lu dF9vcGVyYW5kIgorICAoaW9yIChtYXRjaF9vcGVyYW5kIDAgImFyaXRoX3Fp X29wZXJhbmQiKQorICAgICAgIChtYXRjaF9vcGVyYW5kIDAgInJlZ2lzdGVy X29wZXJhbmQiKSkpCisKKzs7IEhJIEhlbHBlcgorKGRlZmluZV9wcmVkaWNh dGUgImFyaXRoX2hpX29wZXJhbmQiCisgICAobWF0Y2hfY29kZSAiY29uc3Rf aW50IikKK3sKKyAgICAgICAgcmV0dXJuIChJTl9SQU4oSU5UVkFMIChvcCks IC0zMjc2OCwgMzI3NjgpICkgPyAxIDogMCA7IAorfSkKKworOztISSBSZWcs IHN1YnJlZyhyZWcpIG9yIGNvbnN0X2ludC4KKyhkZWZpbmVfcHJlZGljYXRl ICJyZWdfaGlfaW50X29wZXJhbmQiCisgIChpb3IgKG1hdGNoX29wZXJhbmQg MCAiYXJpdGhfaGlfb3BlcmFuZCIpCisgICAgICAgKG1hdGNoX29wZXJhbmQg MCAicmVnaXN0ZXJfb3BlcmFuZCIpKSkKKworOztTSSBSZWcsIHN1YnJlZyhy ZWcpIG9yIGNvbnN0X2ludC4KKyhkZWZpbmVfcHJlZGljYXRlICJyZWdfc2lf aW50X29wZXJhbmQiCisgIChpb3IgKG1hdGNoX29wZXJhbmQgMCAiY29uc3Rf aW50X29wZXJhbmQiKQorICAgICAgIChtYXRjaF9vcGVyYW5kIDAgInJlZ2lz dGVyX29wZXJhbmQiKSkpCisKKzs7Cis7OyBTaGlmdCBwcmVkaWNhdGVzCisK Kzs7IFFJIEhlbHBlcgorKGRlZmluZV9wcmVkaWNhdGUgInNoaWZ0X3FpX29w ZXJhbmQiCisgICAobWF0Y2hfY29kZSAiY29uc3RfaW50IikKK3sKKyAgICAg ICAgcmV0dXJuIChJTl9SQU4oSU5UVkFMIChvcCksIDAsIDcpICkgPyAxIDog MDsgCit9KQorCis7O1FJIFJlZywgc3VicmVnKHJlZykgb3IgY29uc3RfaW50 LgorKGRlZmluZV9wcmVkaWNhdGUgInNoaWZ0X3JlZ19xaV9pbnRfb3BlcmFu ZCIKKyAgKGlvciAobWF0Y2hfb3BlcmFuZCAwICJzaGlmdF9xaV9vcGVyYW5k IikKKyAgICAgICAobWF0Y2hfb3BlcmFuZCAwICJyZWdpc3Rlcl9vcGVyYW5k IikpKQorCis7OyBISSBIZWxwZXIKKyhkZWZpbmVfcHJlZGljYXRlICJzaGlm dF9oaV9vcGVyYW5kIgorICAgKG1hdGNoX2NvZGUgImNvbnN0X2ludCIpCit7 CisgICAgICAgIHJldHVybiAoSU5fUkFOKElOVFZBTCAob3ApLCAwLCAxNSkg KSA/IDEgOiAwIDsgCit9KQorCis7O0hJIFJlZywgc3VicmVnKHJlZykgb3Ig Y29uc3RfaW50LgorKGRlZmluZV9wcmVkaWNhdGUgInNoaWZ0X3JlZ19oaV9p bnRfb3BlcmFuZCIKKyAgKGlvciAobWF0Y2hfb3BlcmFuZCAwICJzaGlmdF9o aV9vcGVyYW5kIikKKyAgICAgICAobWF0Y2hfb3BlcmFuZCAwICJyZWdpc3Rl cl9vcGVyYW5kIikpKQorCis7OyBTSSBIZWxwZXIKKyhkZWZpbmVfcHJlZGlj YXRlICJzaGlmdF9zaV9vcGVyYW5kIgorICAgKG1hdGNoX2NvZGUgImNvbnN0 X2ludCIpCit7CisgICAgICAgIHJldHVybiAoSU5fUkFOKElOVFZBTCAob3Ap LCAwLCAzMSkgKSA/IDEgOiAwOyAKK30pCisKKzs7U0kgUmVnLCBzdWJyZWco cmVnKSBvciBjb25zdF9pbnQuCisoZGVmaW5lX3ByZWRpY2F0ZSAic2hpZnRf cmVnX3NpX2ludF9vcGVyYW5kIgorICAoaW9yIChtYXRjaF9vcGVyYW5kIDAg InNoaWZ0X3NpX29wZXJhbmQiKQorICAgICAgIChtYXRjaF9vcGVyYW5kIDAg InJlZ2lzdGVyX29wZXJhbmQiKSkpCi0tLSBnY2MvY29uZmlnL2NyMTYvdC1j cjE2CTE5NzAtMDEtMDEgMDU6MzA6MDAuMDAwMDAwMDAwICswNTMwCisrKyBn Y2MvY29uZmlnL2NyMTYvdC1jcjE2CTIwMTEtMTEtMjkgMTE6Mzg6MzguMDAw MDAwMDAwICswNTMwCkBAIC0wLDAgKzEsMjUgQEAKKyMgQ1IxNiBUYXJnZXQg TWFrZWZpbGUKKyMgQ29weXJpZ2h0IChDKSAyMDExIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgSW5jLgorIyBDb250cmlidXRlZCBieSBLUElUIEN1bW1p bnMgSW5mb3N5c3RlbXMgTGltaXRlZC4KKyMKKyMgVGhpcyBmaWxlIGlzIHBh cnQgb2YgR0NDLgorIworIyBHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz IHB1Ymxpc2hlZAorIyBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91cgorIyBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLgorIworIyBHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQK KyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMKKyMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxl IENPUFlJTkczLiAgSWYgbm90IHNlZQorIyA8aHR0cDovL3d3dy5nbnUub3Jn L2xpY2Vuc2VzLz4uICAgICAKKworTVVMVElMSUJfT1BUSU9OUyAgICAgPSBm UElDIG1pbnQzMiAKK01VTFRJTElCX0RJUk5BTUVTICAgID0gZmFyLXBpYyBp bnQzMiAKK01VTFRJTElCX01BVENIRVMgICAgID0KK01VTFRJTElCX0VYVFJB X09QVFMgID0gbWNyMTZjcGx1cyBtZGF0YS1tb2RlbD1mYXIKKwotLS0gZ2Nj L2NvbmZpZy5nY2MJMjAxMS0xMS0wNyAxNTo0Nzo0NC4wMDAwMDAwMDAgKzA1 MzAKKysrIGdjYy9jb25maWcuZ2NjCTIwMTEtMTEtMjggMTI6NTA6MzAuMDAw MDAwMDAwICswNTMwCkBAIC05NDQsNiArOTQ0LDExIEBAIGJmaW4qLSopCiAJ dXNlX2NvbGxlY3QyPW5vCiAJdXNlX2djY19zdGRpbnQ9d3JhcAogCTs7Citj cjE2LSotZWxmKQorICAgICAgICB0bV9maWxlPSJlbGZvcy5oICR7dG1fZmls ZX0iCisgICAgICAgIHRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZX0gY3IxNi90 LWNyMTYgIgorICAgICAgICB1c2VfY29sbGVjdDI9bm8KKyAgICAgICAgOzsK IGNyaXN2MzItKi1lbGYgfCBjcmlzdjMyLSotbm9uZSkKIAl0bV9maWxlPSJk YnhlbGYuaCBlbGZvcy5oIG5ld2xpYi1zdGRpbnQuaCAke3RtX2ZpbGV9Igog CXRtYWtlX2ZpbGU9ImNyaXMvdC1jcmlzIgotLS0gZ2NjL2RvYy9leHRlbmQu dGV4aQkyMDExLTExLTE5IDAwOjMyOjQ1LjAwMDAwMDAwMCArMDUzMAorKysg Z2NjL2RvYy9leHRlbmQudGV4aQkyMDExLTExLTI4IDEyOjQ4OjQxLjAwMDAw MDAwMCArMDUzMApAQCAtMjU1Miw3ICsyNTUyLDcgQEAgVGhpcyBhdHRyaWJ1 dGUgaXMgaWdub3JlZCBmb3IgUjhDIHRhcmdldAogCiBAaXRlbSBpbnRlcnJ1 cHQKIEBjaW5kZXggaW50ZXJydXB0IGhhbmRsZXIgZnVuY3Rpb25zCi1Vc2Ug dGhpcyBhdHRyaWJ1dGUgb24gdGhlIEFSTSwgQVZSLCBFcGlwaGFueSwgTTMy QywgTTMyUi9ELCBtNjhrLCBNZVAsIE1JUFMsCitVc2UgdGhpcyBhdHRyaWJ1 dGUgb24gdGhlIEFSTSwgQVZSLCBDUjE2LCBFcGlwaGFueSwgTTMyQywgTTMy Ui9ELCBtNjhrLCBNZVAsIE1JUFMsCiBSWCBhbmQgWHN0b3JteTE2IHBvcnRz IHRvIGluZGljYXRlIHRoYXQgdGhlIHNwZWNpZmllZCBmdW5jdGlvbiBpcyBh bgogaW50ZXJydXB0IGhhbmRsZXIuICBUaGUgY29tcGlsZXIgd2lsbCBnZW5l cmF0ZSBmdW5jdGlvbiBlbnRyeSBhbmQgZXhpdAogc2VxdWVuY2VzIHN1aXRh YmxlIGZvciB1c2UgaW4gYW4gaW50ZXJydXB0IGhhbmRsZXIgd2hlbiB0aGlz IGF0dHJpYnV0ZQotLS0gZ2NjL2RvYy9pbnN0YWxsLnRleGkJMjAxMS0xMS0y MiAyMjo1NTo1MS4wMDAwMDAwMDAgKzA1MzAKKysrIGdjYy9kb2MvaW5zdGFs bC50ZXhpCTIwMTEtMTEtMjggMTI6NDY6NDAuMDAwMDAwMDAwICswNTMwCkBA IC0zMjcyLDYgKzMyNzIsMjkgQEAgaXMgYXZhaWxhYmxlIGF0IEB1cmVme2h0 dHA6Ly9ibGFja2Zpbi51YwogQGh0bWwKIDxociAvPgogQGVuZCBodG1sCitA aGVhZGluZyBAYW5jaG9ye2NyMTZ9Q1IxNgorCitUaGUgQ1IxNiBDb21wYWN0 UklTQyBhcmNoaXRlY3R1cmUgaXMgYSAxNi1iaXQgYXJjaGl0ZWN0dXJlLiBU aGlzIGFyY2hpdGVjdHVyZSBpcyAKK3VzZWQgaW4gZW1iZWRkZWQgYXBwbGlj YXRpb25zLgorCitAaWZub3RodG1sCitAeHJlZntDUjE2IE9wdGlvbnMsLCBD UjE2IE9wdGlvbnMsIGdjYywgVXNpbmcgYW5kIFBvcnRpbmcgdGhlIEdOVSBD b21waWxlcgorQ29sbGVjdGlvbiAoR0NDKX0sCitAZW5kIGlmbm90aHRtbAor CitAaWZodG1sCitTZWUgYGBDUjE2IE9wdGlvbnMnJyBpbiB0aGUgbWFpbiBt YW51YWwgZm9yIGEgbGlzdCBvZiBDUjE2LXNwZWNpZmljIG9wdGlvbnMuCitA ZW5kIGlmaHRtbAorCitVc2UgQHNhbXB7Y29uZmlndXJlIC0tdGFyZ2V0PWNy MTYtZWxmIC0tZW5hYmxlLWxhbmd1YWdlcz1jLGMrK30gdG8gY29uZmlndXJl CitHQ0NAIGZvciBidWlsZGluZyBhIENSMTYgZWxmIGNyb3NzLWNvbXBpbGVy LgorCitVc2UgQHNhbXB7Y29uZmlndXJlIC0tdGFyZ2V0PWNyMTYtdWNsaW51 eCAtLWVuYWJsZS1sYW5ndWFnZXM9YyxjKyt9IHRvIGNvbmZpZ3VyZQorR0ND QCBmb3IgYnVpbGRpbmcgYSBDUjE2IHVjbGludXggY3Jvc3MtY29tcGlsZXIu CisKK0BodG1sCis8aHIgLz4KK0BlbmQgaHRtbAogQGhlYWRpbmcgQGFuY2hv cntjcmlzfUNSSVMKIAogQ1JJUyBpcyB0aGUgQ1BVIGFyY2hpdGVjdHVyZSBp biBBeGlzIENvbW11bmljYXRpb25zIEVUUkFYIHN5c3RlbS1vbi1hLWNoaXAK LS0tIGdjYy9kb2MvaW52b2tlLnRleGkJMjAxMS0xMS0yNCAwMDoyMToxNy4w MDAwMDAwMDAgKzA1MzAKKysrIGdjYy9kb2MvaW52b2tlLnRleGkJMjAxMS0x MS0yOCAxMjo0Njo0MC4wMDAwMDAwMDAgKzA1MzAKQEAgLTUyMSw2ICs1MjEs MTIgQEAgT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS1DKysgRGlhbGVjdHN9 LgogLW1lbGYgIC1tYW91dCAgLW1lbGludXggIC1tbGludXggIC1zaW0gIC1z aW0yIEBnb2wKIC1tbXVsLWJ1Zy13b3JrYXJvdW5kICAtbW5vLW11bC1idWct d29ya2Fyb3VuZH0KIAorQGVtcGh7Q1IxNiBPcHRpb25zfQorQGdjY29wdGxp c3R7LW1tYWMgQGdvbAorLW1jcjE2Y3BsdXMgLW1jcjE2YyBAZ29sCistbXNp bSAtbWludDMyIC1tYml0LW9wcworLW1kYXRhLW1vZGVsPUB2YXJ7bW9kZWx9 fQorCiBAZW1waHtEYXJ3aW4gT3B0aW9uc30KIEBnY2NvcHRsaXN0ey1hbGxf bG9hZCAgLWFsbG93YWJsZV9jbGllbnQgIC1hcmNoICAtYXJjaF9lcnJvcnNf ZmF0YWwgQGdvbAogLWFyY2hfb25seSAgLWJpbmRfYXRfbG9hZCAgLWJ1bmRs ZSAgLWJ1bmRsZV9sb2FkZXIgQGdvbApAQCAtMTAyNzgsNiArMTAyODQsNyBA QCBwbGF0Zm9ybS4KICogQmxhY2tmaW4gT3B0aW9uczo6CiAqIEM2WCBPcHRp b25zOjoKICogQ1JJUyBPcHRpb25zOjoKKyogQ1IxNiBPcHRpb25zOjoKICog RGFyd2luIE9wdGlvbnM6OgogKiBERUMgQWxwaGEgT3B0aW9uczo6CiAqIERF QyBBbHBoYS9WTVMgT3B0aW9uczo6CkBAIC0xMTQyNyw2ICsxMTQzNCw0NiBA QCBMaWtlIEBvcHRpb257LXNpbX0sIGJ1dCBwYXNzIGxpbmtlciBvcHRpCiAw eDQwMDAwMDAwIGFuZCB6ZXJvLWluaXRpYWxpemVkIGRhdGEgYXQgMHg4MDAw MDAwMC4KIEBlbmQgdGFibGUKIAorQG5vZGUgQ1IxNiBPcHRpb25zCitAc3Vi c2VjdGlvbiBDUjE2IE9wdGlvbnMKK0BjaW5kZXggQ1IxNiBPcHRpb25zCisK K1RoZXNlIG9wdGlvbnMgYXJlIGRlZmluZWQgc3BlY2lmaWNhbGx5IGZvciB0 aGUgQ1IxNiBwb3J0cy4KKworQHRhYmxlIEBnY2N0YWJvcHQKKworQGl0ZW0g LW1tYWMKK0BvcGluZGV4IG1tYWMKK0VuYWJsZSB0aGUgdXNlIG9mIG11bHRp cGx5LWFjY3VtdWxhdGUgaW5zdHJ1Y3Rpb25zLiBEaXNhYmxlZCBieSBkZWZh dWx0LgorCitAaXRlbSAtbWNyMTZjcGx1cworQGl0ZW14IC1tY3IxNmMKK0Bv cGluZGV4IG1jcjE2Y3BsdXMKK0BvcGluZGV4IG1jcjE2YworR2VuZXJhdGUg Y29kZSBmb3IgQ1IxNkMgb3IgQ1IxNkMrIGFyY2hpdGVjdHVyZS4gQ1IxNkMr IGFyY2hpdGVjdHVyZSAKK2lzIGRlZmF1bHQuCisKK0BpdGVtIC1tc2ltCitA b3BpbmRleCBtc2ltCitMaW5rcyB0aGUgbGlicmFyeSBsaWJzaW0uYSB3aGlj aCBpcyBpbiBjb21wYXRpYmxlIHdpdGggc2ltdWxhdG9yLiBBcHBsaWNhYmxl Cit0byBlbGYgY29tcGlsZXIgb25seS4KKworQGl0ZW0gLW1pbnQzMgorQG9w aW5kZXggbWludDMyCitDaG9vc2UgaW50ZWdlciB0eXBlIGFzIDMyLWJpdCB3 aWRlLgorCitAaXRlbSAtbWJpdC1vcHMKK0BvcGluZGV4IG1iaXQtb3BzCitH ZW5lcmF0ZXMgc2JpdC9jYml0IGluc3RydWN0aW9ucyBmb3IgYml0IG1hbmlw dWxhdGlvbnMuCisKK0BpdGVtIC1tZGF0YS1tb2RlbD1AdmFye21vZGVsfQor QG9waW5kZXggbWRhdGEtbW9kZWwKK0Nob29zZSBhIGRhdGEgbW9kZWwuIFRo ZSBjaG9pY2VzIGZvciBAdmFye21vZGVsfSBhcmUgQHNhbXB7bmVhcn0sCitA c2FtcHtmYXJ9IG9yIEBzYW1we21lZGl1bX0uIEBzYW1we21lZGl1bX0gaXMg ZGVmYXVsdC4KK0hvd2V2ZXIsIEBzYW1we2Zhcn0gaXMgbm90IHZhbGlkIHdo ZW4gLW1jcjE2YyBvcHRpb24gaXMgY2hvc2VuIGFzCitDUjE2QyBhcmNoaXRl Y3R1cmUgZG9lcyBub3Qgc3VwcG9ydCBmYXIgZGF0YSBtb2RlbC4KK0BlbmQg dGFibGUKKwogQG5vZGUgRGFyd2luIE9wdGlvbnMKIEBzdWJzZWN0aW9uIERh cndpbiBPcHRpb25zCiBAY2luZGV4IERhcndpbiBvcHRpb25zCi0tLSBnY2Mv ZG9jL21kLnRleGkJMjAxMS0xMS0wOCAwNDo0MTo1NS4wMDAwMDAwMDAgKzA1 MzAKKysrIGdjYy9kb2MvbWQudGV4aQkyMDExLTExLTI4IDEyOjQ2OjQwLjAw MDAwMDAwMCArMDUzMApAQCAtMTg0OSw2ICsxODQ5LDQwIEBAIE1hdGNoZXMg Y29udHJvbCByZWdpc3RlciB2YWx1ZXMgdG8gc3dpdGMKIEBjb2Rle1VOU1BF Q19GUF9NT0RFfS4KIEBlbmQgdGFibGUKIAorQGl0ZW0gQ1IxNiBBcmNoaXRl Y3R1cmUtLS1AZmlsZXtjb25maWcvY3IxNi9jcjE2Lmh9CitAdGFibGUgQGNv ZGUKKworQGl0ZW0gYgorUmVnaXN0ZXJzIGZyb20gcjAgdG8gcjE0IChyZWdp c3RlcnMgd2l0aG91dCBzdGFjayBwb2ludGVyKQorCitAaXRlbSB0CitSZWdp c3RlciBmcm9tIHIwIHRvIHIxMSAoYWxsIDE2LWJpdCByZWdpc3RlcnMpCisK K0BpdGVtIHAKK1JlZ2lzdGVyIGZyb20gcjEyIHRvIHIxNSAoYWxsIDMyLWJp dCByZWdpc3RlcnMpCisKK0BpdGVtIEkKK1NpZ25lZCBjb25zdGFudCB0aGF0 IGZpdHMgaW4gNCBiaXRzCisKK0BpdGVtIEoKK1NpZ25lZCBjb25zdGFudCB0 aGF0IGZpdHMgaW4gNSBiaXRzCisKK0BpdGVtIEsKK1NpZ25lZCBjb25zdGFu dCB0aGF0IGZpdHMgaW4gNiBiaXRzCisKK0BpdGVtIEwKK1Vuc2lnbmVkIGNv bnN0YW50IHRoYXQgZml0cyBpbiA0IGJpdHMKKworQGl0ZW0gTQorU2lnbmVk IGNvbnN0YW50IHRoYXQgZml0cyBpbiAzMiBiaXRzCisKK0BpdGVtIE4KK0No ZWNrIGZvciA2NCBiaXRzIHdpZGUgY29uc3RhbnRzIGZvciBhZGQvc3ViIGlu c3RydWN0aW9ucworCitAaXRlbSBHCitGbG9hdGluZyBwb2ludCBjb25zdGFu dCB0aGF0IGlzIGxlZ2FsIGZvciBzdG9yZSBpbW1lZGlhdGUKK0BlbmQgdGFi bGUKKwogQGl0ZW0gSGV3bGV0dC1QYWNrYXJkIFBBLVJJU0MtLS1AZmlsZXtj b25maWcvcGEvcGEuaH0KIEB0YWJsZSBAY29kZQogQGl0ZW0gYQotLS0gbGli Z2NjL2NvbmZpZy9jcjE2L2NydGkuUwkxOTcwLTAxLTAxIDA1OjMwOjAwLjAw MDAwMDAwMCArMDUzMAorKysgbGliZ2NjL2NvbmZpZy9jcjE2L2NydGkuUwky MDExLTExLTI4IDEyOjQ2OjQwLjAwMDAwMDAwMCArMDUzMApAQCAtMCwwICsx LDU0IEBACisjIFNwZWNpYWxpemVkIGNvZGUgbmVlZGVkIHRvIHN1cHBvcnQg Y29uc3RydWN0aW9uIGFuZCBkZXN0cnVjdGlvbiBvZgorIyBmaWxlLXNjb3Bl IG9iamVjdHMgaW4gQysrIGFuZCBKYXZhIGNvZGUsIGFuZCB0byBzdXBwb3J0 IGV4Y2VwdGlvbiBoYW5kbGluZy4KKyMgQ29weXJpZ2h0IChDKSAyMDEwIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb250cmlidXRlZCBi eSBLUElUIEN1bW1pbnMgSW5mb3N5c3RlbXMgTGltaXRlZC4KKworIyBUaGlz IGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0 aGUKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv biAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9u LgorIworIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK KyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBVbmRlciBTZWN0aW9uIDcg b2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwK KyMgcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBM aWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorIyAzLjEsIGFzIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhbmQKKyMgYSBjb3B5IG9mIHRoZSBHQ0MgUnVu dGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3Jh bTsKKyMgc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5U SU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisjIDxodHRwOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvPi4KKworCisvKiBUaGlzIGZpbGUganVzdCBz dXBwbGllcyBmdW5jdGlvbiBwcm9sb2d1ZXMgZm9yIHRoZSAuaW5pdCBhbmQg LmZpbmkKKyAgIHNlY3Rpb25zLiAgSXQgaXMgbGlua2VkIGluIGJlZm9yZSBj cnRiZWdpbi5vLiAgKi8KKworCS5pZGVudCAgIkdOVSBDIGNydGkubyIKKwor CS5zZWN0aW9uIC5pbml0CisJLmdsb2JsICBfX2luaXQKKwkudHlwZSAgIF9f aW5pdCxAZnVuY3Rpb24KK19faW5pdDoKKyNpZiBkZWZpbmVkIChfX0lEX1NI QVJFRF9MSUJfXykKKwlwdXNoCSQyLCByMTIsIHJhCisJbW92ZCAgICAkX19j dXJyZW50X3NoYXJlZF9saWJyYXJ5X3IxMl9vZmZzZXRfLCAocjEscjApCisJ bG9hZGQgICBbcjEyXTAocjEscjApLCAocjEyKQorI2Vsc2UKKyAgICAgICAg cHVzaAlyYQorI2VuZGlmCisKKwkuc2VjdGlvbiAuZmluaQorCS5nbG9ibCAg X19maW5pCisJLnR5cGUgICBfX2ZpbmksQGZ1bmN0aW9uCitfX2Zpbmk6Cisj aWYgZGVmaW5lZCAoX19JRF9TSEFSRURfTElCX18pCisJcHVzaAkkMiwgcjEy LCByYQorCW1vdmQgICAgJF9fY3VycmVudF9zaGFyZWRfbGlicmFyeV9yMTJf b2Zmc2V0XywgKHIxLHIwKQorCWxvYWRkICAgW3IxMl0wKHIxLHIwKSwgKHIx MikKKyNlbHNlCisgICAgICAgIHB1c2gJcmEKKyNlbmRpZgorCQotLS0gbGli Z2NjL2NvbmZpZy9jcjE2L2NydGxpYmlkLlMJMTk3MC0wMS0wMSAwNTozMDow MC4wMDAwMDAwMDAgKzA1MzAKKysrIGxpYmdjYy9jb25maWcvY3IxNi9jcnRs aWJpZC5TCTIwMTEtMTEtMjggMTI6NDY6NDAuMDAwMDAwMDAwICswNTMwCkBA IC0wLDAgKzEsMjggQEAKKyMgUHJvdmlkZSBhIHdlYWsgZGVmaW5pdGlvbiBv ZiB0aGUgbGlicmFyeSBJRCwgZm9yIHRoZSBiZW5lZml0IG9mIGNlcnRhaW4K KyMgY29uZmlndXJlIHNjcmlwdHMuCSAKKyMgQ29weXJpZ2h0IChDKSAyMDEw IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb250cmlidXRl ZCBieSBLUElUIEN1bW1pbnMgSW5mb3N5c3RlbXMgTGltaXRlZC4KKworIyBU aGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eSB0aGUKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy c2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJz aW9uLgorIworIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBVbmRlciBTZWN0aW9u IDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9u YWwKKyMgcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGlt ZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorIyAzLjEsIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKyMgYSBjb3B5IG9mIHRoZSBHQ0Mg UnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJv Z3JhbTsKKyMgc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5S VU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisjIDxodHRwOi8v d3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworCS5pZGVudCAgIkdOVSBDIGNy dGxpYmlkLm8iCisKKy53ZWFrIF9fY3VycmVudF9zaGFyZWRfbGlicmFyeV9y MTJfb2Zmc2V0XworLnNldCBfX2N1cnJlbnRfc2hhcmVkX2xpYnJhcnlfcjEy X29mZnNldF8sIDAKLS0tIGxpYmdjYy9jb25maWcvY3IxNi9jcnRuLlMJMTk3 MC0wMS0wMSAwNTozMDowMC4wMDAwMDAwMDAgKzA1MzAKKysrIGxpYmdjYy9j b25maWcvY3IxNi9jcnRuLlMJMjAxMS0xMS0yOCAxMjo0Njo0MC4wMDAwMDAw MDAgKzA1MzAKQEAgLTAsMCArMSw0NCBAQAorIyBTcGVjaWFsaXplZCBjb2Rl IG5lZWRlZCB0byBzdXBwb3J0IGNvbnN0cnVjdGlvbiBhbmQgZGVzdHJ1Y3Rp b24gb2YKKyMgZmlsZS1zY29wZSBvYmplY3RzIGluIEMrKyBhbmQgSmF2YSBj b2RlLCBhbmQgdG8gc3VwcG9ydCBleGNlcHRpb24gaGFuZGxpbmcuCisjIENv cHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu Yy4KKyMgQ29udHJpYnV0ZWQgYnkgS1BJVCBDdW1taW5zIEluZm9zeXN0ZW1z IExpbWl0ZWQuCisKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisjIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBh bnkKKyMgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBmaWxlIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1 dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisj IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMK KyMgVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUg Z3JhbnRlZCBhZGRpdGlvbmFsCisjIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBp biB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24K KyMgMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbi4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisjIGEg Y29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxv bmcgd2l0aCB0aGlzIHByb2dyYW07CisjIHNlZSB0aGUgZmlsZXMgQ09QWUlO RzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3Qs IHNlZQorIyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKwor LyogVGhpcyBmaWxlIHN1cHBsaWVzIGZ1bmN0aW9uIGVwaWxvZ3VlcyBmb3Ig dGhlIC5pbml0IGFuZCAuZmluaSBzZWN0aW9ucy4KKyAgSXQgaXMgbGlua2Vk IGluIGFmdGVyIGFsbCBvdGhlciBmaWxlcy4gICovCisKKwkuaWRlbnQgICJH TlUgQyBjcnRuLm8iCisKKwkuc2VjdGlvbiAuaW5pdAorI2lmIGRlZmluZWQg KF9fSURfU0hBUkVEX0xJQl9fKQorCXBvcHJldAkkMiwgcjEyLCByYQorI2Vs c2UKKwlwb3ByZXQJcmEKKyNlbmRpZgorCisJLnNlY3Rpb24gLmZpbmkKKyNp ZiBkZWZpbmVkIChfX0lEX1NIQVJFRF9MSUJfXykKKwlwb3ByZXQJJDIsIHIx MiwgcmEKKyNlbHNlCisJcG9wcmV0CXJhCisjZW5kaWYKKwotLS0gbGliZ2Nj L2NvbmZpZy9jcjE2L2Rpdm1vZGhpMy5jCTE5NzAtMDEtMDEgMDU6MzA6MDAu MDAwMDAwMDAwICswNTMwCisrKyBsaWJnY2MvY29uZmlnL2NyMTYvZGl2bW9k aGkzLmMJMjAxMS0xMS0yOSAxMTo0NjoxNy4wMDAwMDAwMDAgKzA1MzAKQEAg LTAsMCArMSwxMTUgQEAKKy8qIExpYmdjYyBUYXJnZXQgc3BlY2lmaWMgaW1w bGVtZW50YXRpb24gLSBFbXVsYXRpbmcgZGl2IGFuZCBtb2QuCisgICBDb3B5 cmlnaHQgKEMpIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu CisgICBDb250cmlidXRlZCBieSBLUElUIEN1bW1pbnMgSW5mb3N5c3RlbXMg TGltaXRlZC4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCisg ICBHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkK KyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz aW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJz aW9uLgorCisgICBHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1F UkNIQU5UQUJJTElUWQorICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBVbmRlciBTZWN0aW9uIDcg b2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwK KyAgIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUg TGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKyAgIDMuMSwgYXMgcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorICAgYSBjb3B5IG9mIHRoZSBHQ0Mg UnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJv Z3JhbTsKKyAgIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcu UlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorICAgPGh0dHA6 Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKwkgCisKKy8qIEVtdWxh dGUgdGhlIGRpdmlzaW9uIGFuZCBtb2R1bHVzIG9wZXJhdGlvbi4gICovCisK K3Vuc2lnbmVkIHNob3J0Cit1ZGl2bW9kaGk0ICh1bnNpZ25lZCBzaG9ydCBu dW0sIHVuc2lnbmVkIHNob3J0IGRlbiwgc2hvcnQgbW9kd2FudGVkKQorewor ICB1bnNpZ25lZCBzaG9ydCBiaXQgPSAxOworICB1bnNpZ25lZCBzaG9ydCBy ZXMgPSAwOworCisgIHdoaWxlIChkZW4gPCBudW0gJiYgYml0ICYmICEoZGVu ICYgKDEgPDwgMTUpKSkKKyAgICB7CisgICAgICBkZW4gPDw9IDE7CisgICAg ICBiaXQgPDw9IDE7CisgICAgfQorICB3aGlsZSAoYml0KQorICAgIHsKKyAg ICAgIGlmIChudW0gPj0gZGVuKQorCXsKKwkgIG51bSAtPSBkZW47CisJICBy ZXMgfD0gYml0OworCX0KKyAgICAgIGJpdCA+Pj0gMTsKKyAgICAgIGRlbiA+ Pj0gMTsKKyAgICB9CisKKyAgaWYgKG1vZHdhbnRlZCkKKyAgICByZXR1cm4g bnVtOworICByZXR1cm4gcmVzOworfQorCitzaG9ydAorX19kaXZoaTMgKHNo b3J0IGEsIHNob3J0IGIpCit7CisgIHNob3J0IG5lZyA9IDA7CisgIHNob3J0 IHJlczsKKworICBpZiAoYSA8IDApCisgICAgeworICAgICAgYSA9IC1hOwor ICAgICAgbmVnID0gIW5lZzsKKyAgICB9CisKKyAgaWYgKGIgPCAwKQorICAg IHsKKyAgICAgIGIgPSAtYjsKKyAgICAgIG5lZyA9ICFuZWc7CisgICAgfQor CisgIHJlcyA9IHVkaXZtb2RoaTQgKGEsIGIsIDApOworCisgIGlmIChuZWcp CisgICAgcmVzID0gLXJlczsKKworICByZXR1cm4gcmVzOworfQorCitzaG9y dAorX19tb2RoaTMgKHNob3J0IGEsIHNob3J0IGIpCit7CisgIHNob3J0IG5l ZyA9IDA7CisgIHNob3J0IHJlczsKKworICBpZiAoYSA8IDApCisgICAgewor ICAgICAgYSA9IC1hOworICAgICAgbmVnID0gMTsKKyAgICB9CisKKyAgaWYg KGIgPCAwKQorICAgIGIgPSAtYjsKKworICByZXMgPSB1ZGl2bW9kaGk0IChh LCBiLCAxKTsKKworICBpZiAobmVnKQorICAgIHJlcyA9IC1yZXM7CisKKyAg cmV0dXJuIHJlczsKK30KKworc2hvcnQKK19fdWRpdmhpMyAoc2hvcnQgYSwg c2hvcnQgYikKK3sKKyAgcmV0dXJuIHVkaXZtb2RoaTQgKGEsIGIsIDApOwor fQorCitzaG9ydAorX191bW9kaGkzIChzaG9ydCBhLCBzaG9ydCBiKQorewor ICByZXR1cm4gdWRpdm1vZGhpNCAoYSwgYiwgMSk7Cit9Ci0tLSBsaWJnY2Mv Y29uZmlnL2NyMTYvbGliMWZ1bmNzLlMJMTk3MC0wMS0wMSAwNTozMDowMC4w MDAwMDAwMDAgKzA1MzAKKysrIGxpYmdjYy9jb25maWcvY3IxNi9saWIxZnVu Y3MuUwkyMDExLTExLTI4IDEyOjQ2OjQwLjAwMDAwMDAwMCArMDUzMApAQCAt MCwwICsxLDU2MyBAQAorLyogTGliZ2NjIFRhcmdldCBzcGVjaWZpYyBpbXBs ZW1lbnRhdGlvbi4KKyAgIENvcHlyaWdodCAoQykgMjAxMSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvbnRyaWJ1dGVkIGJ5IEtQSVQg Q3VtbWlucyBJbmZvc3lzdGVtcyBMaW1pdGVkLgorCisgICBUaGlzIGZpbGUg aXMgcGFydCBvZiBHQ0MuCisKKyAgIEdDQyBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVy CisgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIKKyAgIHZlcnNpb24uCisKKyAgIEdDQyBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQg V0lUSE9VVCBBTlkKKyAgIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgICBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGZvciBtb3JlIGRldGFpbHMuCisK KyAgIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJl IGdyYW50ZWQgYWRkaXRpb25hbAorICAgcGVybWlzc2lvbnMgZGVzY3JpYmVk IGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lv bgorICAgMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbi4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisg ICBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9u IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworICAgc2VlIHRoZSBmaWxlcyBD T1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElm IG5vdCwgc2VlCisgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4u ICAqLworCisjaWZkZWYgIExfbXVsc2kzCisJLnRleHQKKwkuYWxpZ24gIDQK KwkuZ2xvYmwgIF9fX211bHNpMworX19fbXVsc2kzOgorCW1vdncgICAgcjQs cjAKKwltb3Z3ICAgIHIyLHIxCisJLyogRXh0ZW5kZWQgbXVsdGlwbGljYXRp b24gYmV0d2VlbiB0aGUgMiBsb3dlciB3b3JkcyAqLworCW11bHV3ICAgcjEs KHIxLHIwKQorCisJLyogTXVsdGlwbHkgdGhlIGxvd2VyIHdvcmQgb2YgZWFj aCBwYXJhbWV0ZXIgICovICAKKwltdWx3ICAgIHIyLHI1ICAgCisgICAgCisJ LyogV2l0aCB0aGUgaGlnaGVyIHdvcmQgb2YgdGhlIG90aGVyICAqLworCW11 bHcgICAgcjMscjQgICAgIAorICAKKwkvKiBBZGQgcHJvZHVjdHMgdG8gdGhl IGhpZ2hlciBwYXJ0IG9mIHRoZSBmaW5hbCByZXN1bHQgICovCisJYWRkdyAg ICByNCxyMSAgICAgICAKKwlhZGR3ICAgIHI1LHIxCisJanVtcCAgICAocmEp CisjZW5kaWYKKworI2lmZGVmIExfZGl2ZGkzCisJLnRleHQKKwkuYWxpZ24g NAorCS5nbG9ibCBfX19kaXZkaTMKKworX19fZGl2ZGkzOgorCXB1c2gJJDQs IHI3LCByYQorCisJLyogUGFyYW0gIzEgTG9uZyBMb25nIGxvdyBiaXQgZmly c3QgKi8KKwlsb2FkZCAgIDEyKHNwKSwgKHIxLCByMCkKKwlsb2FkZCAgIDE2 KHNwKSwgKHIzLCByMikKKworCS8qIFBhcmFtICMyIExvbmcgTG9uZyBsb3cg Yml0IGZpcnN0ICovCisJbG9hZGQgICAyMChzcCksIChyNSwgcjQpCisJbG9h ZGQgICAyNChzcCksIChyNywgcjYpCisJCisJLyogU2V0IG5lZyB0byAwICov CisJbW92dyAkMCwgcjEwCisJCisJc3ViZCAkMTYsIChzcCkKKworCS8qIENv bXBhcmUgaWYgcGFyYW0xIGlzIGdyZWF0ZXIgdGhhbiAwICovCQorCWNtcHcg JDAsIHIzCisJYmxlIEw0CisKKwkvKiBJbnZlcnQgcGFyYW0xIGFuZCBuZWcg Ki8KKwltb3ZkICQtMSwgKHI5LCByOCkgCS8qIFRlbXAgc2V0IHRvIEZGRkZG RkZGICovCisJeG9yZCAocjksIHI4KSwgKHIxLCByMCkJLyogWG9yIGxvdyBi aXRzIG9mIHBhcmFtIDEgd2l0aCB0ZW1wICovCisJeG9yZCAocjksIHI4KSwg KHIzLCByMikJLyogWG9yIGhpZ2ggYml0cyBvZiBwYXJhbSAxIHdpdGggdGVt cCAqLworCWFkZGQgJDEsIChyMSwgcjApCS8qIEFkZCAxIHRvIGxvdyBiaXRz IG9mIHBhcmFtIDEgKi8KKwl4b3J3ICQxLCByMTAJCS8qIEludmVydCBuZWcg Ki8KKwliY2MgTDQJCQkvKiBJZiBubyBjYXJyeSBvY2N1cnJlZCBnbyB0byBM NCAqLworCWFkZGQgJDEsIChyMywgcjIpCS8qIEFkZCAxIHRvIGhpZ2ggYml0 cyBvZiBwYXJhbSAxICovCisKK0w0OglzdG9yZCAocjEsIHIwKSwgMChzcCkK KwlzdG9yZCAocjMsIHIyKSwgNChzcCkKKwkKKwkvKiBDb21wYXJlIGlmIHBh cmFtMiBpcyBncmVhdGVyIHRoYW4gMCAqLwkKKwljbXB3ICQwLCByNworCWJs ZSBMNQorCisJLyogSW52ZXJ0IHBhcmFtMiBhbmQgbmVnICovCisJbW92ZCAk LTEsIChyOSwgcjgpCS8qIFRlbXAgc2V0IHRvIEZGRkZGRkZGICovCisJeG9y ZCAocjksIHI4KSwgKHI1LCByNCkJLyogWG9yIGxvdyBiaXRzIG9mIHBhcmFt IDIgd2l0aCB0ZW1wICovCisJeG9yZCAocjksIHI4KSwgKHI3LCByNikJLyog WG9yIGhpZ2ggYml0cyBvZiBwYXJhbSAyIHdpdGggdGVtcCAqLworCWFkZGQg JDEsIChyNSwgcjQpCS8qIEFkZCAxIHRvIGxvdyBiaXRzIG9mIHBhcmFtIDIg Ki8KKwl4b3J3ICQxLCByMTAJCS8qIEludmVydCBuZWcgKi8KKwliY2MgTDUJ CQkvKiBJZiBubyBjYXJyeSBvY2N1cnJlZCBnbyB0byBMNSAqLworCWFkZGQg JDEsIChyNywgcjYpCS8qIEFkZCAxIHRvIGhpZ2ggYml0cyBvZiBwYXJhbSAy ICovCisKK0w1OglzdG9yZCAocjUsIHI0KSwgOChzcCkKKwlzdG9yZCAocjcs IHI2KSwgMTIoc3ApCisJbW92dyAkMCwgcjIKKworCS8qIENhbGwgdWRpdm1v ZGRpMyAqLworI2lmZGVmIF9fUElDX18KKwlsb2FkZAlfX191ZGl2bW9kZGkz QGNHT1QocjEyKSwgKHIxLHIwKQorCWphbAkocjEscjApCisjZWxzZQorCWJh bCAocmEpLCBfX191ZGl2bW9kZGkzCisjZW5kaWYKKworCS8qIElmIChuZWcp ICovCisJYWRkZAkkMTYsIChzcCkKKwljbXB3ICQwLCByMTAJCS8qIENvbXBh cmUgMCB3aXRoIG5lZyAqLworCWJlcSBMZXhpdF9fCisJCisJLyogTmVnID0g LU5lZyAqLworCXhvcmQgKHI5LCByOCksIChyMSwgcjApCS8qIFhvciBsb3cg Yml0cyBvZiB1cmVzIHdpdGggdGVtcCAqLworCXhvcmQgKHI5LCByOCksIChy MywgcjIpCS8qIFhvciBoaWdoIGJpdHMgb2YgdXJlcyB3aXRoIHRlbXAgKi8K KwlhZGRkICQxLCAocjEsIHIwKQkvKiBBZGQgMSB0byBsb3cgYml0cyBvZiB1 cmVzICovCisJYmNjIExleGl0X18KKwlhZGRkICQxLCAocjMsIHIyKQkvKiBB ZGQgMSB0byBoaWdoIGJpdCBvZiB1cmVzICovCisKK0xleGl0X186CisjICBp ZmRlZiBfX0lEX1NIQVJFRF9MSUJfXworCXBvcAkkMiwgcjEyCisjICBlbmRp ZgorCXBvcHJldCAkNCwgcjcsIHJhCisjZW5kaWYKKworI2lmZGVmIExfbHNo cmRpMworCS50ZXh0CisJLmFsaWduIDQKKwkuZ2xvYmwgX19fbHNocmRpMwor CitfX19sc2hyZGkzOgorCXB1c2gJJDMsIHI3CisKKwkvKiBMb2FkIHBhcmFt ZXRlcnMgZnJvbSBzdGFjayBpbiB0aGlzIG9yZGVyICovCisJbW92dyByMiwg cjYJCS8qIE51bWJlciBvZiBzaGlmdHMgKi8KKwlsb2FkZAk2KHNwKSwgKHIx LCByMCkJLyogTG93IGJpdHMgKi8KKwlsb2FkZAkxMChzcCksIChyMywgcjIp LyogSGlnaCBiaXRzICovCisKKwl4b3J3ICQtMSwgcjYJCS8qIEludmVydCBu dW1iZXIgb2Ygc2hpZnRzICovCisJYWRkdyAkMSwgcjYJCS8qIEFkZCAxIGJ5 IG51bWJlciBvZiBzaGlmdHMgKi8KKworCW1vdncgcjYsIHI3CQkvKiBDb3B5 IG51bWJlciBvZiBzaGlmdHMgKi8KKworCXRiaXQgJDE1LCByNgkJLyogVGVz dCBpZiBudW1iZXIgaXMgbmVnYXRpdmUgKi8KKwliZnMgTDIJCQkvKiBJZiBu ZWdhdGl2ZSBqdW1wIHRvIEwyICovCisKKwltb3ZkIChyMSwgcjApLCAocjks IHI4KQkvKiBDb3B5IGxvdyBiaXRzICovCisKKwlzdWJ3ICQzMiwgcjcJCS8q IENhbGMgaG93IG1hbnkgYml0cyB3aWxsIG92ZXJmbG93ICovCisJLyogU2hp ZnQgdGhlIHRlbXAgbG93IGJpdCB0byB0aGUgcmlnaHQgdG8gc2VlIHRoZSBv dmVyZmxvd2luZyBiaXRzICAqLworCWxzaGQgcjcsIChyOSwgcjgpCQorCisJ Y21wdyAkMzIsIHI2CQkvKiBJZiBudW1iZXIgb2Ygc2hpZnRzIGlzIGhpZ2hl ciB0aGFuIDMxICovCisJYmx0IEwxCQkJLyogU2hpZnQgYnkgbW92aW5nICov CisKKwlsc2hkIHI2LCAocjMsIHIyKQkvKiBTaGlmdCBoaWdoIGJpdHMgKi8K Kwlsc2hkIHI2LCAocjEsIHIwKQkvKiBTaGlmdCBsb3cgYml0cyAqLworCWFk ZGQgKHI5LCByOCksIChyMywgcjIpCS8qIEFkZCBvdmVyZmxvdyB0byB0aGUg aGlnaCBiaXRzICovCisJcG9wcmV0CSQzLCByNwkJLyogUmV0dXJuICovCisK K0wxOgltb3ZkICQwLCAocjEsIHIwKQkvKiBSZXNldCBsb3cgYml0ICovCisJ bW92ZCAocjksIHI4KSwgKHIzLCByMikJLyogQWRkIHRoZSBvdmVyZmxvdyBm cm9tIHRoZSBsb3cgYml0ICovCisJcG9wcmV0CSQzLCByNwkJLyogUmV0dXJu ICovCisKK0wyOgltb3ZkIChyMywgcjIpLCAocjksIHI4KQkvKiBDb3B5IGhp Z2ggYml0cyAqLworCisJYWRkdyAkMzIsIHI3CQkvKiBDYWxjIGhvdyBtYW55 IGJpdHMgd2lsbCBvdmVyZmxvdyAqLworCS8qIFNoaWZ0IHRoZSB0ZW1wIGxv dyBiaXQgdG8gdGhlIGxlZnQgdG8gc2VlIHRoZSBvdmVyZmxvd2luZyBiaXRz ICAqLworCWxzaGQgcjcsIChyOSwgcjgpCQorCisJY21wdyAkLTMyLCByNgkJ LyogSWYgbnVtYmVyIG9mIHNoaWZ0cyBpcyBsb3dlciB0aGFuIC0zMSAqLwor CWJndCBMMwkJCS8qIFNoaWZ0IGJ5IG1vdmluZyAqLworCisJbHNoZCByNiwg KHIxLCByMCkJLyogU2hpZnQgbG93IGJpdHMgKi8KKwlsc2hkIHI2LCAocjMs IHIyKQkvKiBTaGlmdCBoaWdoIGJpdHMgKi8KKwlhZGRkIChyOSwgcjgpLCAo cjEsIHIwKQkvKiBBZGQgb3ZlcmZsb3cgdG8gdGhlIGxvdyBiaXRzICovCisJ cG9wcmV0CSQzLCByNwkJLyogUmV0dXJuICovCisJCitMMzoJbW92ZCAkMCwg KHIzLCByMikJLyogUmVzZXQgdGhlIGhpZ2ggYml0ICovCisJbW92ZCAocjks IHI4KSwgKHIxLCByMCkJLyogQWRkIHRoZSBvdmVyZmxvdyBmcm9tIHRoZSBo aWdoIGJpdCAqLworCXBvcHJldAkkMywgcjcJCS8qIFJldHVybiAqLworI2Vu ZGlmCisKKyNpZmRlZiBMX21vZGRpMworCS50ZXh0CisJLmFsaWduIDQKKwku Z2xvYmwgX19fbW9kZGkzCisKK19fX21vZGRpMzoKKwlwdXNoCSQ0LCByNywg cmEKKworCS8qIFBhcmFtICMxIExvbmcgTG9uZyBsb3cgYml0IGZpcnN0ICov CisJbG9hZGQJMTIoc3ApLCAocjEsIHIwKQorCWxvYWRkCTE2KHNwKSwgKHIz LCByMikKKworCS8qIFBhcmFtICMyIExvbmcgTG9uZyBsb3cgYml0IGZpcnN0 ICovCisJbG9hZGQJMjAoc3ApLCAocjUsIHI0KQorCWxvYWRkCTI0KHNwKSwg KHI3LCByNikKKwkKKwlzdWJkCSQxOCwgKHNwKQorCisJLyogU2V0IG5lZyB0 byAwICovCisJc3RvcncgJDAsIDE2KHNwKQorCQorCW1vdmQJJC0xLCAocjks IHI4KSAJLyogVGVtcCBzZXQgdG8gRkZGRkZGRkYgKi8KKworCS8qIENvbXBh cmUgaWYgcGFyYW0xIGlzIGdyZWF0ZXIgdGhhbiAwICovCQorCWNtcHcgJDAs IHIzCisJYmxlIEw0CisKKwkvKiBJbnZlcnQgcGFyYW0xIGFuZCBuZWcgKi8K Kwl4b3JkIChyOSwgcjgpLCAocjEsIHIwKQkvKiBYb3IgbG93IGJpdHMgb2Yg cGFyYW0gMSB3aXRoIHRlbXAgKi8KKwl4b3JkIChyOSwgcjgpLCAocjMsIHIy KQkvKiBYb3IgaGlnaCBiaXRzIG9mIHBhcmFtIDEgd2l0aCB0ZW1wICovCisJ YWRkZCAkMSwgKHIxLCByMCkJLyogQWRkIDEgdG8gbG93IGJpdHMgb2YgcGFy YW0gMSAqLworCXN0b3J3ICQxLCAxNihzcCkKKwliY2MgTDQJCQkvKiBJZiBu byBjYXJyeSBvY2N1cnJlZCBnbyB0byBMNCAqLworCWFkZGQgJDEsIChyMywg cjIpCS8qIEFkZCAxIHRvIGhpZ2ggYml0cyBvZiBwYXJhbSAxICovCisKK0w0 OglzdG9yZCAocjEsIHIwKSwgMChzcCkKKwlzdG9yZCAocjMsIHIyKSwgNChz cCkKKwkKKwkvKiBDb21wYXJlIGlmIHBhcmFtMiBpcyBncmVhdGVyIHRoYW4g MCAqLwkKKwljbXB3ICQwLCByNworCWJsZSBMNQorCisJLyogSW52ZXJ0IHBh cmFtMiBhbmQgbmVnICovCisJeG9yZCAocjksIHI4KSwgKHI1LCByNCkJLyog WG9yIGxvdyBiaXRzIG9mIHBhcmFtIDIgd2l0aCB0ZW1wICovCisJeG9yZCAo cjksIHI4KSwgKHI3LCByNikJLyogWG9yIGhpZ2ggYml0cyBvZiBwYXJhbSAy IHdpdGggdGVtcCAqLworCWFkZGQgJDEsIChyNSwgcjQpCS8qIEFkZCAxIHRv IGxvdyBiaXRzIG9mIHBhcmFtIDIgKi8KKwliY2MgTDUJCQkvKiBJZiBubyBj YXJyeSBvY2N1cnJlZCBnbyB0byBMNSAqLworCWFkZGQgJDEsIChyNywgcjYp CS8qIEFkZCAxIHRvIGhpZ2ggYml0cyBvZiBwYXJhbSAyICovCisKK0w1Oglz dG9yZCAocjUsIHI0KSwgOChzcCkKKwlzdG9yZCAocjcsIHI2KSwgMTIoc3Ap CisJbW92dyAkMSwgcjIKKworCS8qIENhbGwgdWRpdm1vZGRpMyAqLworI2lm ZGVmIF9fUElDX18KKwlsb2FkZAlfX191ZGl2bW9kZGkzQGNHT1QocjEyKSwg KHIxLHIwKQorCWphbAkocjEscjApCisjZWxzZQorCWJhbCAocmEpLCBfX191 ZGl2bW9kZGkzCisjZW5kaWYKKworCS8qIElmIChuZWcpICovCisJbG9hZHcg MTYoc3ApLCByMTAJLyogTG9hZCBuZWcgZnJvbSBzdGFjayAqLworCWFkZGQJ JDE4LCAoc3ApCisJY21wdyAkMCwgcjEwCQkvKiBDb21wYXJlIDAgd2l0aCBu ZWcgKi8KKwliZXEJTGV4aXRfXworCQorCS8qIE5lZyA9IC1OZWcgKi8KKwl4 b3JkIChyOSwgcjgpLCAocjEsIHIwKQkvKiBYb3IgbG93IGJpdHMgb2YgdXJl cyB3aXRoIHRlbXAgKi8KKwl4b3JkIChyOSwgcjgpLCAocjMsIHIyKQkvKiBY b3IgaGlnaCBiaXRzIG9mIHVyZXMgd2l0aCB0ZW1wICovCisJYWRkZCAkMSwg KHIxLCByMCkJLyogQWRkIDEgdG8gbG93IGJpdHMgb2YgdXJlcyAqLworCWJj YwlMZXhpdF9fCisJYWRkZCAkMSwgKHIzLCByMikJLyogQWRkIDEgdG8gaGln aCBiaXQgb2YgdXJlcyAqLworTGV4aXRfXzoKKyMgIGlmZGVmIF9fSURfU0hB UkVEX0xJQl9fCisJcG9wCSQyLCByMTIKKyMgIGVuZGlmCisJcG9wcmV0CSQ0 LCByNywgcmEKKyNlbmRpZgorCisjaWZkZWYgTF9tdWxkaTMKKwkudGV4dAor CS5hbGlnbiA0CisJLmdsb2JsIF9fX211bGRpMworCitfX19tdWxkaTM6CisJ cHVzaAkkMiwgcjEzCisJcHVzaAkkNywgcjcKKworCS8qIFBhcmFtICMxIExv bmcgTG9uZyBsb3cgYml0IGZpcnN0ICovCisJbG9hZGQgICAxOChzcCksIChy MSwgcjApCisJbG9hZGQgICAyMihzcCksIChyMywgcjIpCisKKwkvKiBQYXJh bSAjMiBMb25nIExvbmcgbG93IGJpdCBmaXJzdCAqLworCWxvYWRkICAgMjYo c3ApLCAocjUsIHI0KQorCWxvYWRkICAgMzAoc3ApLCAocjcsIHI2KQorCisJ LyogQ2xlYXIgcjEzLCByMTIgKi8JCisJbW92ZCAkMCwgKHIxMikJCisJbW92 ZCAkMCwgKHIxMykKKworCS8qIFNldCBuZWcgKi8KKwltb3Z3ICQwLCByMTAK KworCS8qIENvbXBhcmUgaWYgcGFyYW0xIGlzIGdyZWF0ZXIgdGhhbiAwICov CQorCWNtcHcgJDAsIHIzCisJYmxlIEwxCisKKwkvKiBJbnZlcnQgcGFyYW0x IGFuZCBuZWcgKi8KKwltb3ZkICQtMSwgKHI5LCByOCkgCS8qIFRlbXAgc2V0 IHRvIEZGRkZGRkZGICovCisJeG9yZCAocjksIHI4KSwgKHIxLCByMCkJLyog WG9yIGxvdyBiaXRzIG9mIHBhcmFtIDEgd2l0aCB0ZW1wICovCisJeG9yZCAo cjksIHI4KSwgKHIzLCByMikJLyogWG9yIGhpZ2ggYml0cyBvZiBwYXJhbSAx IHdpdGggdGVtcCAqLworCWFkZGQgJDEsIChyMSwgcjApCS8qIEFkZCAxIHRv IGxvdyBiaXRzIG9mIHBhcmFtIDEgKi8KKwl4b3J3ICQxLCByMTAJCS8qIElu dmVydCBuZWcgKi8KKwliY2MgTDEJCQkvKiBJZiBubyBjYXJyeSBvY2N1cnJl ZCBnbyB0byBMMSAqLworCWFkZGQgJDEsIChyMywgcjIpCS8qIEFkZCAxIHRv IGhpZ2ggYml0cyBvZiBwYXJhbSAxICovCisKK0wxOgkvKiBDb21wYXJlIGlm IHBhcmFtMiBpcyBncmVhdGVyIHRoYW4gMCAqLwkKKwljbXB3ICQwLCByNwor CWJsZSBMMgkKKwkKKwkvKiBJbnZlcnQgcGFyYW0yIGFuZCBuZWcgKi8KKwlt b3ZkICQtMSwgKHI5LCByOCkJLyogVGVtcCBzZXQgdG8gRkZGRkZGRkYgKi8K Kwl4b3JkIChyOSwgcjgpLCAocjUsIHI0KQkvKiBYb3IgbG93IGJpdHMgb2Yg cGFyYW0gMiB3aXRoIHRlbXAgKi8KKwl4b3JkIChyOSwgcjgpLCAocjcsIHI2 KQkvKiBYb3IgaGlnaCBiaXRzIG9mIHBhcmFtIDIgd2l0aCB0ZW1wICovCisJ YWRkZCAkMSwgKHI1LCByNCkJLyogQWRkIDEgdG8gbG93IGJpdHMgb2YgcGFy YW0gMiAqLworCXhvcncgJDEsIHIxMAkJLyogSW52ZXJ0IG5lZyAqLworCWJj YyBMMgkJCS8qIElmIG5vIGNhcnJ5IG9jY3VycmVkIGdvIHRvIEwyICovCisJ YWRkZCAkMSwgKHI3LCByNikJLyogQWRkIDEgdG8gaGlnaCBiaXRzIG9mIHBh cmFtIDIgKi8KKwkKK0wyOglzdG9ydyByMTAsIDE4KHNwKQkvKiBTdG9yZSBu ZWcgdG8gc3RhY2sgc28gd2UgY2FuIHVzZSByMTAgKi8KKworCS8qIEIqRCAq LworCS8qIEJsKkRsICovCisJbWFjdXcgcjAsIHI0LCAocjEyKQkvKiBNdWx0 aXBseSByMCBhbmQgcjQgYW5kIGFkZCB0byByMTIgKi8KKwkJCisJLyogQmgq RGwgKi8KKwltb3ZkICQwLCAocjksIHI4KQkvKiBDbGVhciByOSwgcjggKi8K KwltYWN1dyByMSwgcjQsIChyOSwgcjgpCS8qIE11bHRpcGx5IEJoKkRsIGFu ZCBhZGQgcmVzdWx0IHRvIChyOSwgcjgpICovCisJbW92dyByOSwgIHIxMAkJ LyogU2hpZnQgbGVmdDogcjkgdG8gcjEwICovCisJbHNoZCAkMTYsIChyOSwg cjgpCS8qIFNoaWZ0IGxlZnQ6IHI4IHRvIHI5ICovCisJbW92dyAkMCwgcjEx CQkvKiBDbGVhciByMTEgKi8KKwlhZGRkIChyOSwgcjgpLCAocjEyKQkvKiBB ZGQgKHI5LCByOCkgdG8gcjEyICovCisJYmNjIEwzCQkJLyogSWYgbm8gY2Fy cnkgb2NjdXJyZWQgZ28gdG8gTDMgKi8KKwlhZGRkICQxLCAocjEzKQkJLyog SWYgY2Fycnkgb2NjdXJyZWQgYWRkIDEgdG8gcjEzICovCisKK0wzOglhZGRk IChyMTEsIHIxMCksIChyMTMpCS8qIEFkZCAocjExLCByMTApIHRvIHIxMyAq LworCQkKKwkvKiBCbCpEaCAqLworCW1vdmQgJDAsIChyOSwgcjgpCS8qIENs ZWFyIChyOSwgcjgpICovCisJbWFjdXcgcjAsIHI1LCAocjksIHI4KQkvKiBN dWx0aXBseSByMCBhbmQgcjUgYW5kIHN0b3IgaW4gKHI5LCByOCkgKi8KKwlt b3Z3IHI5LCByMTAJCS8qIFNoaWZ0IGxlZnQ6IHI5IHRvIHIxMCAqLworCWxz aGQgJDE2LCAocjksIHI4KQkvKiBTaGlmdCBsZWZ0OiByOCB0byByOSAqLwor CWFkZGQgKHI5LCByOCksIChyMTIpCS8qIEFkZCAocjksIHI4KSB0byByMTIg Ki8KKwliY2MgTDQJCQkvKiBJZiBubyBjYXJyeSBvY2N1cnJlZCBnbyB0byBM NCAqLyAKKwlhZGRkICQxLCAocjEzKQkJLyogSWYgY2Fycnkgb2NjdXJyZWQg YWRkIDEgdG8gcjEzICovCisKK0w0OglhZGRkIChyMTEsIHIxMCksIChyMTMp CS8qIEFkZCAocjExLCByMTApIHRvIHIxMyAqLworCisJLyogQmgqRGggKi8K Kwltb3ZkICQwLCAocjksIHI4KQkvKiBDbGVhciAocjksIHI4KSAqLworCW1h Y3V3IHIxLCByNSwgKHI5LCByOCkJLyogTXVsdGlwbHkgcjEgYW5kIHI1IGFu ZCBhZGQgdG8gcjEzICovCisJYWRkZCAocjksIHI4KSwgKHIxMykJLyogQWRk IChyOSwgcjgpIHRvIHJlc3VsdCAqLworCisJLyogQSpEICovCisJLyogQWwq RGwgKi8KKwltb3ZkICQwLCAocjExLCByMTApCS8qIENsZWFyIChyMTEsIHIx MCkgKi8KKwltYWN1dyByMiwgcjQsIChyMTEsIHIxMCkvKiBNdWx0aXBseSBy MiBhbmQgcjQgYW5kIGFkZCB0byAocjExLCByMTApICovCisJCisJYWRkZCAo cjEzKSwgKHIxMSwgcjEwKQkvKiBDb3B5IHIxMyB0byAocjExLCByMTApICov CisKKwkvKiBBbCpEaCAqLworCW1vdmQgJDAsIChyOSwgcjgpCS8qIENsZWFy IChyOSwgcjgpICovCisJbWFjdXcgcjIsIHI1LCAocjksIHI4KQkvKiBNdWx0 aXBseSByMiBhbmQgcjUgYW5kIGFkZCB0byAocjksIHI4KSAqLworCWFkZHcg cjgsIHIxMQkJLyogQWRkIHI4IHRvIHIxMSAqLworCQorCS8qIEFoKkRsICov CisJbXVsdXcgcjMsIChyNSwgcjQpCS8qIE11bHRpcGx5IHIzIGFuZCByNCBh bmQgc3RvciBpbiAocjUsIHI0KSAqLworCWFkZHcgcjQsIHIxMQkJLyogQWRk IHI0IHRvIHIxMSAqLworCisJLyogQipDICovCisJLyogQmwqQ2wgKi8KKwlt b3ZkICQwLCAocjksIHI4KQkvKiBDbGVhciAocjksIHI4KSAqLworCW1hY3V3 IHIwLCByNiwgKHI5LCByOCkJLyogTXVsdGlwbHkgcjAgYW5kIHI2IGFuZCBh ZGQgdG8gKHI5LCByOCkgKi8KKwlhZGRkIChyOSwgcjgpLCAocjExLCByMTAp LyogQWRkIChyOSwgcjgpIHRvIHJlc3VsdCAqLworCisJLyogQmwqQ2ggKi8K Kwltb3ZkICQwLCAocjksIHI4KQkvKiBDbGVhciAocjksIHI4KSAqLworCW1h Y3V3IHIwLCByNywgKHI5LCByOCkJLyogTXVsdGlwbHkgcjAgYW5kIHI3IGFu ZCBhZGQgdG8gKHI5LCByOCkgKi8KKwlhZGR3IHI4LCByMTEJCS8qIEFkZCBy OCB0byByMTEgKi8KKworCWxvYWR3IDE4KHNwKSwgcjgJLyogTG9hZCBuZWcg ZnJvbSBzdGFjayAqLworCisJLyogQmgqQ2wgKi8KKwltdWx1dyByMSwgKHI3 LCByNikJLyogTXVsdGlwbHkgcjEgYW5kIHI2IGFuZCBzdG9yIGluIChyNywg cjYpICovCisJYWRkdyByNiwgcjExCQkvKiBBZGQgcjYgdG8gcjExICovCisK K0UxOgltb3ZkIChyMTEsIHIxMCksIChyMywgcjIpCisJbW92ZCAocjEyKSwg KHIxLCByMCkJCisKKwkvKiBJZiAobmVnKSAqLworCWNtcHcgJDAsIHI4CQkv KiBDb21wYXJlIDAgd2l0aCBuZWcgKi8KKwliZXEJTGV4aXRfXworCQorCS8q IE5lZyA9IC1OZWcgKi8KKwltb3ZkICQtMSwgKHI5LCByOCkgCS8qIFRlbXAg c2V0IHRvIEZGRkZGRkZGICovCisJeG9yZCAocjksIHI4KSwgKHIxLCByMCkJ LyogWG9yIGxvdyBiaXRzIG9mIHJlc3VsdCB3aXRoIHRlbXAgKi8KKwl4b3Jk IChyOSwgcjgpLCAocjMsIHIyKSAvKiBYb3IgaGlnaCBiaXRzIG9mIHJlc3Vs dCB3aXRoIHRlbXAgKi8KKwlhZGRkICQxLCAocjEsIHIwKQkvKiBBZGQgMSB0 byBsb3cgYml0cyBvZiByZXN1bHQgKi8KKwliY2MJTGV4aXRfXworCWFkZGQg JDEsIChyMywgcjIpCS8qIEFkZCAxIHRvIGhpZ2ggYml0IG9mIHJlc3VsdCAq LworTGV4aXRfXzoKKwlwb3AJJDcsIHI3CisJcG9wcmV0CSQyLCByMTMKKyNl bmRpZgorCisjaWZkZWYgTF9uZWdkaTIKKwkudGV4dAorCS5hbGlnbiA0CisJ Lmdsb2JsIF9fX25lZ2RpMgorCitfX19uZWdkaTI6CisJLyogTG9hZCBwYXJh bWV0ZXIgZnJvbSB0aGUgcmVnaXN0ZXJzIGluIHRoaXMgb3JkZXIgKi8KKwls b2FkZCAwKHNwKSwgKHIxLCByMCkKKwlsb2FkZCA0KHNwKSwgKHIzLCByMikK KwkKKwltb3ZkICQtMSwgKHI2LCByNSkJLyogU2V0IHRlbXAgdG8gRkZGRkZG RkYgKi8KKwl4b3JkIChyNiwgcjUpLCAocjEsIHIwKQkvKiBYb3IgbG93IGJp dHMgd2l0aCB0ZW1wICovCisJeG9yZCAocjYsIHI1KSwgKHIzLCByMikJLyog WG9yIGhpZ2ggYml0cyB3aXRoIHRlbXAgKi8KKwlhZGRkICQxLCAocjEsIHIw KQkvKiBBZGQgb25lICovCisJamNjIChyYSkKKwlhZGRkICQxLCAocjMsIHIy KQkvKiBBZGQgdGhlIGNhcnJ5IHRvIHRoZSBoaWdoIGJpdHMgKi8KKwlqdW1w IChyYSkKKyNlbmRpZgorCisjaWZkZWYgTF91ZGl2ZGkzCisJLnRleHQKKwku YWxpZ24gNAorCS5nbG9ibCBfX191ZGl2ZGkzCisKK19fX3VkaXZkaTM6CisJ bW92dyAkMCwgcjIKKwliciBfX191ZGl2bW9kZGkzCisjZW5kaWYKKworI2lm ZGVmIExfdWRpdm1vZGRpMworCS50ZXh0CisJLmFsaWduIDQKKwkuZ2xvYmwg X19fdWRpdm1vZGRpMworCitfX191ZGl2bW9kZGkzOgorCXB1c2gJJDIsIHIx MworCXB1c2gJJDcsIHI3CisKKwkvKiBQYXJhbSAjMSBMb25nIExvbmcgbG93 IGJpdCBmaXJzdCAqLworCWxvYWRkCTE4KHNwKSwgKHIxLCByMCkKKwlzdG9y dwlyMiwgMTgoc3ApCS8qIFN0b3JlIG1vZHVsbyBvbiBzdGFjayAqLworCWxv YWRkCTIyKHNwKSwgKHIzLCByMikKKworCS8qIFBhcmFtICMyIExvbmcgTG9u ZyBsb3cgYml0IGZpcnN0ICovCisJbG9hZGQJMjYoc3ApLCAocjUsIHI0KQor CWxvYWRkCTMwKHNwKSwgKHI3LCByNikKKworCS8qIFNldCB1cmVzIHRvIDAg Ki8KKwltb3ZkICQwLCAocjEzKQorCW1vdmQgJDAsIChyMTIpCisJCisJY21w ZCAocjEyKSwgKHI1LCByNCkKKwliZXEgTEUKKworTDU6CW1vdmQgJDEsIChy OSwgcjgpCS8qIFN0b3JlIDEgaW4gbG93IGJpdHMgZnJvbSBiaXQgKi8KKwlt b3ZkICQwLCAocjExLCByMTApCS8qIFN0b3JlIDAgaW4gaGlnaCBiaXRzIGZy b20gYml0ICovCisJCitMNjoJLyogV2hpbGUgKGRlbiA8IG51bSAmJiAoIWRl biAmICgxTEw8PDYzKSkpICovCisJLyogQ29tcGFyZSBoaWdoIGJpdHMgZnJv bSBwYXJhbSAxIGFuZCBwYXJhbSAyICovCisJY21wZCAocjcsIHI2KSwgKHIz LCByMikJCisJYmhpIEwxMAkJCS8qIElmIHBhcmFtIDIgaXMgZ3JlYXRlciBn byB0byBMMTAgKi8KKwlibmUgTDgJCQkvKiBJZiBwYXJhbSAxIGlzIGdyZWF0 ZXIgZ28gdG8gTDggKi8KKwljbXBkIChyNSwgcjQpLCAocjEsIHIwKQkvKiBD b21wYXJlIGxvdyBiaXRzIGZyb20gcGFyYW0gMSBhbmQgcGFyYW0gMiAqLwor CS8qICBJZiBwYXJhbSAyIGlzIGdyZWF0ZXIgb3IgdGhlIHNhbWUgZ28gdG8g TDEgKi8KKwliaHMgTDEwCQkJIAorCitMODoJLyogQ2hlY2sgaWYgbW9zdCBz aWduaWZpY2FudCBiaXQgb2YgcGFyYW0gMiBpcyBzZXQgKi8KKwl0Yml0ICQx NSwgcjcJCQorCWJmcyBMMTAJCQkvKiBJZiBQU1IgaXMgc2V0IGdvIHRvIEwx MCAqLworCisJLyogU2hpZnQgYml0ICovCisJbHNoZCAkMSwgKHIxMSwgcjEw KQkvKiBTaGlmdCBsZWZ0OiBoaWdoIGJpdHMgb2YgYml0ICovIAorCS8qIENo ZWNrIGlmIG1vc3Qgc2lnbmlmaWNhbnQgYml0IG9mIGJpdCBpcyBzZXQgKi8K Kwl0Yml0ICQxNSwgcjkJCQorCWxzaGQgJDEsIChyOSwgcjgpCS8qIFNoaWZ0 IGxlZnQ6IGxvdyBiaXRzIG9mIGJpdCAqLworCWJmcyBMMjgJCQkvKiBJZiBQ U1IgaXMgc2V0IGdvIHRvIEwyOCAqLworCitMOToJLyogU2hpZnQgYiAqLwor CWxzaGQgJDEsIChyNywgcjYpCS8qIFNoaWZ0IGxlZnQ6IGhpZ2ggYml0cyBv ZiBwYXJhbSAyICovCisJLyogQ2hlY2sgaWYgbW9zdCBzaWduaWZpY2FudCBi aXQgb2YgcGFyYW0gMiBpcyBzZXQgKi8KKwl0Yml0ICQxNSwgcjUJCQorCWxz aGQgJDEsIChyNSwgcjQpCS8qIFNoaWZ0IGxlZnQ6IGxvdyBiaXRzIG9mIHBh cmFtIDIgKi8KKwliZmMgTDYJCQkvKiBJZiBQU1IgaXMgc2V0IGdvIHRvIEw2 ICovCisJYWRkdyAkMSwgcjYJCS8qIEFkZCAxIHRvIHRoZSBoaWdoZXN0IGJp dHMgb2YgYiAqLworCWJyIEw2CQkJLyogR28gdG8gTDYgKi8KKwkKK0wxMDoJ LyogV2hpbGUgKGJpdCkgKi8KKwljbXBkICQwLCAocjExLCByMTApCQorCWJu ZSBMMTEKKwljbXBkICQwLCAocjksIHI4KQorCWJlcSBFMQorCitMMTE6CS8q IElmIChudW0gPj0gZGVuKSAqLworCWNtcGQgKHIzLCByMiksIChyNywgcjYp CS8qIENvbXBhcmUgaGlnaCBiaXRzIG9mIHBhcmFtIDEgYW5kIHBhcmFtIDIg Ki8KKwlibG8gTDE1CQkJLyogSWYgcGFyYW0gMSBsb3dlciB0aGFuIHBhcmFt IDIgZ28gdG8gTDE1ICovCisJYm5lIEwxMgkJCS8qIElmIG5vdCBlcXVhbCBn byB0byBMMTIgKi8JCisJY21wZCAocjEsIHIwKSwgKHI1LCByNCkJLyogQ29t cGFyZSBsb3cgYml0cyBvZiBwYXJhbSAxIGFuZCBwYXJhbSAyICovCisJYmxv IEwxNQkJCS8qIElmIHBhcmFtIDEgbG93ZXIgdGhhbiBwYXJhbSAyIGdvIHRv IEwxNSAqLworCitMMTI6CS8qIFVyZXMgfD0gYml0ICovCisJb3JkIChyMTEs IHIxMCksIChyMTMpCisJb3JkIChyOSwgcjgpLCAocjEyKQkKKworCS8qIE51 bSAtPSBkZW4gKi8KKwlzdWJkIChyNywgcjYpLCAocjMsIHIyKSAvKiBTdWJ0 cmFjdCBoaWdoZXN0IDMyIGJpdHMgZnJvbSBlYWNoIG90aGVyICovCisJc3Vi ZCAocjUsIHI0KSwgKHIxLCByMCkJLyogU3VidHJhY3QgbG93ZXN0IDMyIGJp dHMgZnJvbSBlYWNoIG90aGVyICovCisJYmNjIEwxNQkJCS8qIElmIG5vIGNh cnJ5IG9jY3VycmVkIGdvIHRvIEwxNSAqLworCXN1YmQgJDEsIChyMywgcjIp CS8qIFN1YnRyYWN0IHRoZSBjYXJyeSAqLworCQorTDE1OgkvKiBTaGlmdCBi aXQgdG8gdGhlIHJpZ2h0ICovCisJbHNoZCAkLTEsIChyOSwgcjgpCS8qIFNo aWZ0IHJpZ2h0OiBsb3cgYml0cyBvZiBiaXQgKi8KKwkvKiBDaGVjayBpZiBs ZWFzdCBzaWduaWZpY2FudCBiaXQgb2YgaGlnaCBiaXRzIGlzIHNldCAqLwor CXRiaXQgJDAsIHIxMAkJCisJbHNoZCAkLTEsIChyMTEsIHIxMCkJLyogU2hp ZnQgcmlnaHQ6IGhpZ2ggYml0cyBvZiBiaXQgKi8KKwliZnMgTDE4CQkJLyog SWYgUFNSIGlzIHNldCBnbyB0byBMMTggKi8KKworTDE3OgkvKiBTaGlmdCBw YXJhbSMyIHRvIHRoZSByaWdodCAqLworCWxzaGQgJC0xLCAocjUsIHI0KQkv KiBTaGlmdCByaWdodDogbG93IGJpdHMgb2YgcGFyYW0gMiAqLworCS8qIENo ZWNrIGlmIGxlYXN0IHNpZ25pZmljYW50IGJpdCBvZiBoaWdoIGJpdHMgaXMg c2V0ICovCisJdGJpdCAkMCwgcjYJCQorCWxzaGQgJC0xLCAocjcsIHI2KQkv KiBTaGlmdCByaWdodDogaGlnaCBiaXRzIG9mIHBhcmFtIDIgKi8KKwliZmMg TDEwCQkJLyogSWYgUFNSIGlzIG5vdCBzZXQgZ28gdG8gTDEwICovCisJLyog T3Igd2l0aCAweDgwMDAgdG8gc2V0IG1vc3Qgc2lnbmlmaWNhbnQgYml0ICov CisJb3J3ICQzMjc2OCwgcjUJCQorCWJyIEwxMAkJCS8qIEdvIHRvIEwxMCAq LworCitMMTg6CS8qIE9yIHdpdGggMHg4MDAwIHRvIHNldCBtb3N0IHNpZ25p ZmljYW50IGJpdCAqLworCW9ydyAkMzI3NjgsIHI5CQkKKwliciBMMTcKKwor TDI4OiAJLyogTGVmdCBzaGlmdCBiaXQgKi8KKwlhZGR3ICQxLCByMTAJCS8q IEFkZCAxIHRvIGhpZ2hlc3QgYml0cyBvZiBiaXQgKi8KKwliciBMOQkJCS8q IEdvIHRvIEw5ICovCisKK0xFOgljbXBkIChyMTIpLCAocjcsIHI2KQorCWJu ZSBMNQorCWV4Y3AgZHZ6CisJYnIJTGV4aXRfXworCitFMToJbG9hZHcJMTgo c3ApLCByNAorCWNtcHcgJDAsIHI0CisJYm5lCUxleGl0X18KKworCS8qIFJl dHVybiByZXN1bHQgKi8KKwltb3ZkIChyMTIpLCAocjEsIHIwKQorCW1vdmQg KHIxMyksIChyMywgcjIpCitMZXhpdF9fOgorCXBvcAkkNywgcjcKKwlwb3By ZXQJJDIsIHIxMworI2VuZGlmCisKKyNpZmRlZiBMX3Vtb2RkaTMKKwkudGV4 dAorCS5hbGlnbiA0CisJLmdsb2JsIF9fX3Vtb2RkaTMKKworX19fdW1vZGRp MzoKKwltb3Z3ICQxLCByMgorCWJyIF9fX3VkaXZtb2RkaTMKKyNlbmRpZgor Ci0tLSBsaWJnY2MvY29uZmlnL2NyMTYvdC1jcjE2CTE5NzAtMDEtMDEgMDU6 MzA6MDAuMDAwMDAwMDAwICswNTMwCisrKyBsaWJnY2MvY29uZmlnL2NyMTYv dC1jcjE2CTIwMTEtMTEtMzAgMTI6MTI6MTAuMDAwMDAwMDAwICswNTMwCkBA IC0wLDAgKzEsMTAgQEAKK0xJQjFBU01TUkMgPSBjcjE2L2xpYjFmdW5jcy5T CitMSUIxQVNNRlVOQ1MgPSAgX211bHNpMyBfbHNocmRpMyBfbXVsZGkzIF9k aXZkaTMgX3VkaXZkaTMgX3VkaXZtb2RkaTMgXAorICAgICAgICAgICAgICAg IF91bW9kZGkzIF9tb2RkaTMKKworTElCMkFERCA9ICQoc3JjZGlyKS9jb25m aWcvY3IxNi9kaXZtb2RoaTMuYyAgXAorCSAgJChzcmNkaXIpL3VkaXZtb2Rz aTQuYyBcCisJICAkKHNyY2RpcikvdWRpdm1vZC5jICAgXAorCSAgJChzcmNk aXIpL2Rpdm1vZC5jCisKK0xJQjJBRERFSCA9ICQoc3JjZGlyKS9jb25maWcv Y3IxNi91bndpbmQtY3IxNi5jIAotLS0gbGliZ2NjL2NvbmZpZy9jcjE2L3Vu d2luZC1jcjE2LmMJMTk3MC0wMS0wMSAwNTozMDowMC4wMDAwMDAwMDAgKzA1 MzAKKysrIGxpYmdjYy9jb25maWcvY3IxNi91bndpbmQtY3IxNi5jCTIwMTEt MTEtMzAgMTA6NDQ6MDAuMDAwMDAwMDAwICswNTMwCkBAIC0wLDAgKzEsMTY4 MyBAQAorLyogRFdBUkYyIGV4Y2VwdGlvbiBoYW5kbGluZyBhbmQgZnJhbWUg dW53aW5kIHJ1bnRpbWUgaW50ZXJmYWNlIHJvdXRpbmVzLgorICAgQ29weXJp Z2h0IChDKSAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAy MDAzLCAyMDA0LCAyMDA1LCAyMDA2LAorICAgMjAwOCwgMjAwOSwgMjAxMCwg MjAxMSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRo aXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworICAgR0NDIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkg aXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91 ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgR0NDIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsIGJ1dCBXSVRIT1VUCisgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAg IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKworICAgVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMs IHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisgICBwZXJtaXNzaW9ucyBk ZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9u LCB2ZXJzaW9uCisgICAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhbmQKKyAgIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBF eGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisgICBzZWUgdGhl IGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2 ZWx5LiAgSWYgbm90LCBzZWUKKyAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGlj ZW5zZXMvPi4gICovCisKKyNpbmNsdWRlICJ0Y29uZmlnLmgiCisjaW5jbHVk ZSAidHN5c3RlbS5oIgorI2luY2x1ZGUgImNvcmV0eXBlcy5oIgorI2luY2x1 ZGUgInRtLmgiCisjaW5jbHVkZSAiZHdhcmYyLmgiCisjaW5jbHVkZSAidW53 aW5kLmgiCisjaWZkZWYgX19VU0lOR19TSkxKX0VYQ0VQVElPTlNfXworIyBk ZWZpbmUgTk9fU0laRV9PRl9FTkNPREVEX1ZBTFVFCisjZW5kaWYKKyNpbmNs dWRlICJ1bndpbmQtcGUuaCIKKyNpbmNsdWRlICJ1bndpbmQtZHcyLWZkZS5o IgorI2luY2x1ZGUgImd0aHIuaCIKKyNpbmNsdWRlICJ1bndpbmQtZHcyLmgi CisKKyNpZmRlZiBIQVZFX1NZU19TRFRfSAorI2luY2x1ZGUgPHN5cy9zZHQu aD4KKyNlbmRpZgorCisjaWZuZGVmIF9fVVNJTkdfU0pMSl9FWENFUFRJT05T X18KKworI2lmbmRlZiBTVEFDS19HUk9XU19ET1dOV0FSRAorI2RlZmluZSBT VEFDS19HUk9XU19ET1dOV0FSRCAwCisjZWxzZQorI3VuZGVmIFNUQUNLX0dS T1dTX0RPV05XQVJECisjZGVmaW5lIFNUQUNLX0dST1dTX0RPV05XQVJEIDEK KyNlbmRpZgorCisvKiBEd2FyZiBmcmFtZSByZWdpc3RlcnMgdXNlZCBmb3Ig cHJlIGdjYyAzLjAgY29tcGlsZWQgZ2xpYmMuICAqLworI2lmbmRlZiBQUkVf R0NDM19EV0FSRl9GUkFNRV9SRUdJU1RFUlMKKyNkZWZpbmUgUFJFX0dDQzNf RFdBUkZfRlJBTUVfUkVHSVNURVJTIERXQVJGX0ZSQU1FX1JFR0lTVEVSUwor I2VuZGlmCisKKyNpZm5kZWYgRFdBUkZfUkVHX1RPX1VOV0lORF9DT0xVTU4K KyNkZWZpbmUgRFdBUkZfUkVHX1RPX1VOV0lORF9DT0xVTU4oUkVHTk8pIChS RUdOTykKKyNlbmRpZgorCisjaWZkZWYgUkVHX1ZBTFVFX0lOX1VOV0lORF9D T05URVhUCit0eXBlZGVmIF9VbndpbmRfV29yZCBfVW53aW5kX0NvbnRleHRf UmVnX1ZhbDsKKworI2lmbmRlZiBBU1NVTUVfRVhURU5ERURfVU5XSU5EX0NP TlRFWFQKKyNkZWZpbmUgQVNTVU1FX0VYVEVOREVEX1VOV0lORF9DT05URVhU IDEKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIF9VbndpbmRfV29yZAorX1Vu d2luZF9HZXRfVW53aW5kX1dvcmQgKF9VbndpbmRfQ29udGV4dF9SZWdfVmFs IHZhbCkKK3sKKyAgcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGlubGluZSBf VW53aW5kX0NvbnRleHRfUmVnX1ZhbAorX1Vud2luZF9HZXRfVW53aW5kX0Nv bnRleHRfUmVnX1ZhbCAoX1Vud2luZF9Xb3JkIHZhbCkKK3sKKyAgcmV0dXJu IHZhbDsKK30KKyNlbHNlCit0eXBlZGVmIHZvaWQgKl9VbndpbmRfQ29udGV4 dF9SZWdfVmFsOworCitzdGF0aWMgaW5saW5lIF9VbndpbmRfV29yZAorX1Vu d2luZF9HZXRfVW53aW5kX1dvcmQgKF9VbndpbmRfQ29udGV4dF9SZWdfVmFs IHZhbCkKK3sKKyAgcmV0dXJuIChfVW53aW5kX1dvcmQpIChfVW53aW5kX0lu dGVybmFsX1B0cikgdmFsOworfQorCitzdGF0aWMgaW5saW5lIF9VbndpbmRf Q29udGV4dF9SZWdfVmFsCitfVW53aW5kX0dldF9VbndpbmRfQ29udGV4dF9S ZWdfVmFsIChfVW53aW5kX1dvcmQgdmFsKQoreworICByZXR1cm4gKF9Vbndp bmRfQ29udGV4dF9SZWdfVmFsKSAoX1Vud2luZF9JbnRlcm5hbF9QdHIpIHZh bDsKK30KKyNlbmRpZgorCisjaWZuZGVmIEFTU1VNRV9FWFRFTkRFRF9VTldJ TkRfQ09OVEVYVAorI2RlZmluZSBBU1NVTUVfRVhURU5ERURfVU5XSU5EX0NP TlRFWFQgMAorI2VuZGlmCisKKy8qIFRoaXMgaXMgdGhlIHJlZ2lzdGVyIGFu ZCB1bndpbmQgc3RhdGUgZm9yIGEgcGFydGljdWxhciBmcmFtZS4gIFRoaXMK KyAgIHByb3ZpZGVzIHRoZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgdG8gdW53 aW5kIHVwIHBhc3QgYSBmcmFtZSBhbmQgcmV0dXJuCisgICB0byBpdHMgY2Fs bGVyLiAgKi8KK3N0cnVjdCBfVW53aW5kX0NvbnRleHQKK3sKKyAgX1Vud2lu ZF9Db250ZXh0X1JlZ19WYWwgcmVnW0RXQVJGX0ZSQU1FX1JFR0lTVEVSUysx XTsKKyAgdm9pZCAqY2ZhOworICB2b2lkICpyYTsKKyAgdm9pZCAqbHNkYTsK KyAgc3RydWN0IGR3YXJmX2VoX2Jhc2VzIGJhc2VzOworICAvKiBTaWduYWwg ZnJhbWUgY29udGV4dC4gICovCisjZGVmaW5lIFNJR05BTF9GUkFNRV9CSVQg KCh+KF9VbndpbmRfV29yZCkgMCA+PiAxKSArIDEpCisgIC8qIENvbnRleHQg d2hpY2ggaGFzIHZlcnNpb24vYXJnc19zaXplL2J5X3ZhbHVlIGZpZWxkcy4g ICovCisjZGVmaW5lIEVYVEVOREVEX0NPTlRFWFRfQklUICgofihfVW53aW5k X1dvcmQpIDAgPj4gMikgKyAxKQorICBfVW53aW5kX1dvcmQgZmxhZ3M7Cisg IC8qIDAgZm9yIG5vdywgY2FuIGJlIGluY3JlYXNlZCB3aGVuIGZ1cnRoZXIg ZmllbGRzIGFyZSBhZGRlZCB0bworICAgICBzdHJ1Y3QgX1Vud2luZF9Db250 ZXh0LiAgKi8KKyAgX1Vud2luZF9Xb3JkIHZlcnNpb247CisgIF9VbndpbmRf V29yZCBhcmdzX3NpemU7CisgIGNoYXIgYnlfdmFsdWVbRFdBUkZfRlJBTUVf UkVHSVNURVJTKzFdOworfTsKKworLyogQnl0ZSBzaXplIG9mIGV2ZXJ5IHJl Z2lzdGVyIG1hbmFnZWQgYnkgdGhlc2Ugcm91dGluZXMuICAqLworc3RhdGlj IHVuc2lnbmVkIGNoYXIgZHdhcmZfcmVnX3NpemVfdGFibGVbRFdBUkZfRlJB TUVfUkVHSVNURVJTKzFdOworCisMCisvKiBSZWFkIHVuYWxpZ25lZCBkYXRh IGZyb20gdGhlIGluc3RydWN0aW9uIGJ1ZmZlci4gICovCisKK3VuaW9uIHVu YWxpZ25lZAoreworICB2b2lkICpwOworICB1bnNpZ25lZCB1MiBfX2F0dHJp YnV0ZV9fICgobW9kZSAoSEkpKSk7CisgIHVuc2lnbmVkIHU0IF9fYXR0cmli dXRlX18gKChtb2RlIChTSSkpKTsKKyAgdW5zaWduZWQgdTggX19hdHRyaWJ1 dGVfXyAoKG1vZGUgKERJKSkpOworICBzaWduZWQgczIgX19hdHRyaWJ1dGVf XyAoKG1vZGUgKEhJKSkpOworICBzaWduZWQgczQgX19hdHRyaWJ1dGVfXyAo KG1vZGUgKFNJKSkpOworICBzaWduZWQgczggX19hdHRyaWJ1dGVfXyAoKG1v ZGUgKERJKSkpOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0 YXRpYyB2b2lkIHV3X3VwZGF0ZV9jb250ZXh0IChzdHJ1Y3QgX1Vud2luZF9D b250ZXh0ICosIF9VbndpbmRfRnJhbWVTdGF0ZSAqKTsKK3N0YXRpYyBfVW53 aW5kX1JlYXNvbl9Db2RlIHV3X2ZyYW1lX3N0YXRlX2ZvciAoc3RydWN0IF9V bndpbmRfQ29udGV4dCAqLAorCQkJCQkgICAgICAgX1Vud2luZF9GcmFtZVN0 YXRlICopOworCitzdGF0aWMgaW5saW5lIHZvaWQgKgorcmVhZF9wb2ludGVy IChjb25zdCB2b2lkICpwKSB7IGNvbnN0IHVuaW9uIHVuYWxpZ25lZCAqdXAg PSBwOyByZXR1cm4gdXAtPnA7IH0KKworc3RhdGljIGlubGluZSBpbnQKK3Jl YWRfMXUgKGNvbnN0IHZvaWQgKnApIHsgcmV0dXJuICooY29uc3QgdW5zaWdu ZWQgY2hhciAqKSBwOyB9CisKK3N0YXRpYyBpbmxpbmUgaW50CityZWFkXzFz IChjb25zdCB2b2lkICpwKSB7IHJldHVybiAqKGNvbnN0IHNpZ25lZCBjaGFy ICopIHA7IH0KKworc3RhdGljIGlubGluZSBpbnQKK3JlYWRfMnUgKGNvbnN0 IHZvaWQgKnApIHsgY29uc3QgdW5pb24gdW5hbGlnbmVkICp1cCA9IHA7IHJl dHVybiB1cC0+dTI7IH0KKworc3RhdGljIGlubGluZSBpbnQKK3JlYWRfMnMg KGNvbnN0IHZvaWQgKnApIHsgY29uc3QgdW5pb24gdW5hbGlnbmVkICp1cCA9 IHA7IHJldHVybiB1cC0+czI7IH0KKworc3RhdGljIGlubGluZSB1bnNpZ25l ZCBpbnQKK3JlYWRfNHUgKGNvbnN0IHZvaWQgKnApIHsgY29uc3QgdW5pb24g dW5hbGlnbmVkICp1cCA9IHA7IHJldHVybiB1cC0+dTQ7IH0KKworc3RhdGlj IGlubGluZSBpbnQKK3JlYWRfNHMgKGNvbnN0IHZvaWQgKnApIHsgY29uc3Qg dW5pb24gdW5hbGlnbmVkICp1cCA9IHA7IHJldHVybiB1cC0+czQ7IH0KKwor c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCityZWFkXzh1IChjb25zdCB2 b2lkICpwKSB7IGNvbnN0IHVuaW9uIHVuYWxpZ25lZCAqdXAgPSBwOyByZXR1 cm4gdXAtPnU4OyB9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwor cmVhZF84cyAoY29uc3Qgdm9pZCAqcCkgeyBjb25zdCB1bmlvbiB1bmFsaWdu ZWQgKnVwID0gcDsgcmV0dXJuIHVwLT5zODsgfQorDAorc3RhdGljIGlubGlu ZSBfVW53aW5kX1dvcmQKK19VbndpbmRfSXNTaWduYWxGcmFtZSAoc3RydWN0 IF9VbndpbmRfQ29udGV4dCAqY29udGV4dCkKK3sKKyAgcmV0dXJuIChjb250 ZXh0LT5mbGFncyAmIFNJR05BTF9GUkFNRV9CSVQpID8gMSA6IDA7Cit9CisK K3N0YXRpYyBpbmxpbmUgdm9pZAorX1Vud2luZF9TZXRTaWduYWxGcmFtZSAo c3RydWN0IF9VbndpbmRfQ29udGV4dCAqY29udGV4dCwgaW50IHZhbCkKK3sK KyAgaWYgKHZhbCkKKyAgICBjb250ZXh0LT5mbGFncyB8PSBTSUdOQUxfRlJB TUVfQklUOworICBlbHNlCisgICAgY29udGV4dC0+ZmxhZ3MgJj0gflNJR05B TF9GUkFNRV9CSVQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgX1Vud2luZF9Xb3Jk CitfVW53aW5kX0lzRXh0ZW5kZWRDb250ZXh0IChzdHJ1Y3QgX1Vud2luZF9D b250ZXh0ICpjb250ZXh0KQoreworICByZXR1cm4gKEFTU1VNRV9FWFRFTkRF RF9VTldJTkRfQ09OVEVYVAorCSAgfHwgKGNvbnRleHQtPmZsYWdzICYgRVhU RU5ERURfQ09OVEVYVF9CSVQpKTsKK30KKwwKKy8qIEdldCB0aGUgdmFsdWUg b2YgcmVnaXN0ZXIgSU5ERVggYXMgc2F2ZWQgaW4gQ09OVEVYVC4gICovCisK K2lubGluZSBfVW53aW5kX1dvcmQKK19VbndpbmRfR2V0R1IgKHN0cnVjdCBf VW53aW5kX0NvbnRleHQgKmNvbnRleHQsIGludCBpbmRleCkKK3sKKyAgaW50 IHNpemU7CisgIF9VbndpbmRfQ29udGV4dF9SZWdfVmFsIHZhbDsKKworI2lm ZGVmIERXQVJGX1pFUk9fUkVHCisgIGlmIChpbmRleCA9PSBEV0FSRl9aRVJP X1JFRykKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorCisgIGluZGV4ID0gRFdB UkZfUkVHX1RPX1VOV0lORF9DT0xVTU4gKGluZGV4KTsKKyAgZ2NjX2Fzc2Vy dCAoaW5kZXggPCAoaW50KSBzaXplb2YoZHdhcmZfcmVnX3NpemVfdGFibGUp KTsKKyAgc2l6ZSA9IGR3YXJmX3JlZ19zaXplX3RhYmxlW2luZGV4XTsKKyAg dmFsID0gY29udGV4dC0+cmVnW2luZGV4XTsKKworICBpZiAoX1Vud2luZF9J c0V4dGVuZGVkQ29udGV4dCAoY29udGV4dCkgJiYgY29udGV4dC0+YnlfdmFs dWVbaW5kZXhdKQorICAgIHJldHVybiBfVW53aW5kX0dldF9VbndpbmRfV29y ZCAodmFsKTsKKworICAvKiBUaGlzIHdpbGwgc2VnZmF1bHQgaWYgdGhlIHJl Z2lzdGVyIGhhc24ndCBiZWVuIHNhdmVkLiAgKi8KKyAgaWYgKHNpemUgPT0g c2l6ZW9mKF9VbndpbmRfUHRyKSkKKyAgICByZXR1cm4gKiAoX1Vud2luZF9Q dHIgKikgKF9VbndpbmRfSW50ZXJuYWxfUHRyKSB2YWw7CisgIGVsc2UKKyAg ICB7CisgICAgICBnY2NfYXNzZXJ0IChzaXplID09IHNpemVvZihfVW53aW5k X1dvcmQpKTsKKyAgICAgIHJldHVybiAqIChfVW53aW5kX1dvcmQgKikgKF9V bndpbmRfSW50ZXJuYWxfUHRyKSB2YWw7CisgICAgfQorfQorCitzdGF0aWMg aW5saW5lIHZvaWQgKgorX1Vud2luZF9HZXRQdHIgKHN0cnVjdCBfVW53aW5k X0NvbnRleHQgKmNvbnRleHQsIGludCBpbmRleCkKK3sKKyAgcmV0dXJuICh2 b2lkICopKF9VbndpbmRfUHRyKSBfVW53aW5kX0dldEdSIChjb250ZXh0LCBp bmRleCk7Cit9CisKKy8qIEdldCB0aGUgdmFsdWUgb2YgdGhlIENGQSBhcyBz YXZlZCBpbiBDT05URVhULiAgKi8KKworX1Vud2luZF9Xb3JkCitfVW53aW5k X0dldENGQSAoc3RydWN0IF9VbndpbmRfQ29udGV4dCAqY29udGV4dCkKK3sK KyAgcmV0dXJuIChfVW53aW5kX1B0cikgY29udGV4dC0+Y2ZhOworfQorCisv KiBPdmVyd3JpdGUgdGhlIHNhdmVkIHZhbHVlIGZvciByZWdpc3RlciBJTkRF WCBpbiBDT05URVhUIHdpdGggVkFMLiAgKi8KKworaW5saW5lIHZvaWQKK19V bndpbmRfU2V0R1IgKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKmNvbnRleHQs IGludCBpbmRleCwgX1Vud2luZF9Xb3JkIHZhbCkKK3sKKyAgaW50IHNpemU7 CisgIHZvaWQgKnB0cjsKKworICBpbmRleCA9IERXQVJGX1JFR19UT19VTldJ TkRfQ09MVU1OIChpbmRleCk7CisgIGdjY19hc3NlcnQgKGluZGV4IDwgKGlu dCkgc2l6ZW9mKGR3YXJmX3JlZ19zaXplX3RhYmxlKSk7CisgIHNpemUgPSBk d2FyZl9yZWdfc2l6ZV90YWJsZVtpbmRleF07CisKKyAgaWYgKF9VbndpbmRf SXNFeHRlbmRlZENvbnRleHQgKGNvbnRleHQpICYmIGNvbnRleHQtPmJ5X3Zh bHVlW2luZGV4XSkKKyAgICB7CisgICAgICBjb250ZXh0LT5yZWdbaW5kZXhd ID0gX1Vud2luZF9HZXRfVW53aW5kX0NvbnRleHRfUmVnX1ZhbCAodmFsKTsK KyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgcHRyID0gKHZvaWQgKikgKF9V bndpbmRfSW50ZXJuYWxfUHRyKSBjb250ZXh0LT5yZWdbaW5kZXhdOworCisg IGlmIChzaXplID09IHNpemVvZihfVW53aW5kX1B0cikpCisgICAgKiAoX1Vu d2luZF9QdHIgKikgcHRyID0gdmFsOworICBlbHNlCisgICAgeworI2lmIGRl ZmluZWQoIF9fQ1IxNkNfXyApCisgICAgICBpZiAoc2l6ZSA9PSBzaXplb2Yo X1Vud2luZF9Xb3JkKSkKKyAgICAgICogKF9VbndpbmRfV29yZCAqKSBwdHIg PSB2YWw7CisgICAgICBlbHNlCisJeworCSAgdHlwZWRlZiB1bnNpZ25lZCBf Q1IxNl9VbndpbmRfV29yZCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX3dv cmRfXykpKTsKKwkgIGdjY19hc3NlcnQgKGluZGV4ICsgMSAgPCAgKGludCkg c2l6ZW9mKGR3YXJmX3JlZ19zaXplX3RhYmxlKSk7CisJICAqIChfQ1IxNl9V bndpbmRfV29yZCAqKSBwdHIgPSB2YWwgJiAweGZmZmYgOyAgLyogbG93IDE2 LWJpdCAqLworCSAgcHRyID0gY29udGV4dC0+cmVnW2luZGV4ICsgMV07CisJ ICAqIChfQ1IxNl9VbndpbmRfV29yZCAqKSBwdHIgPSB2YWwgPj4gMTYgOyAg LyogaGlnaCAxNi1iaXQgKi8KKwl9CisjZWxzZQorICAgICAgZ2NjX2Fzc2Vy dCAoc2l6ZSA9PSBzaXplb2YoX1Vud2luZF9Xb3JkKSk7CisgICAgICAqIChf VW53aW5kX1dvcmQgKikgcHRyID0gdmFsOworI2VuZGlmCQorICAgIH0KK30K KworLyogR2V0IHRoZSBwb2ludGVyIHRvIGEgcmVnaXN0ZXIgSU5ERVggYXMg c2F2ZWQgaW4gQ09OVEVYVC4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCAq CitfVW53aW5kX0dldEdSUHRyIChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICpj b250ZXh0LCBpbnQgaW5kZXgpCit7CisgIGluZGV4ID0gRFdBUkZfUkVHX1RP X1VOV0lORF9DT0xVTU4gKGluZGV4KTsKKyAgaWYgKF9VbndpbmRfSXNFeHRl bmRlZENvbnRleHQgKGNvbnRleHQpICYmIGNvbnRleHQtPmJ5X3ZhbHVlW2lu ZGV4XSkKKyAgICByZXR1cm4gJmNvbnRleHQtPnJlZ1tpbmRleF07CisgIHJl dHVybiAodm9pZCAqKSAoX1Vud2luZF9JbnRlcm5hbF9QdHIpIGNvbnRleHQt PnJlZ1tpbmRleF07Cit9CisKKy8qIFNldCB0aGUgcG9pbnRlciB0byBhIHJl Z2lzdGVyIElOREVYIGFzIHNhdmVkIGluIENPTlRFWFQuICAqLworCitzdGF0 aWMgaW5saW5lIHZvaWQKK19VbndpbmRfU2V0R1JQdHIgKHN0cnVjdCBfVW53 aW5kX0NvbnRleHQgKmNvbnRleHQsIGludCBpbmRleCwgdm9pZCAqcCkKK3sK KyAgaW5kZXggPSBEV0FSRl9SRUdfVE9fVU5XSU5EX0NPTFVNTiAoaW5kZXgp OworICBpZiAoX1Vud2luZF9Jc0V4dGVuZGVkQ29udGV4dCAoY29udGV4dCkp CisgICAgY29udGV4dC0+YnlfdmFsdWVbaW5kZXhdID0gMDsKKyAgY29udGV4 dC0+cmVnW2luZGV4XSA9IChfVW53aW5kX0NvbnRleHRfUmVnX1ZhbCkgKF9V bndpbmRfSW50ZXJuYWxfUHRyKSBwOworfQorCisvKiBPdmVyd3JpdGUgdGhl IHNhdmVkIHZhbHVlIGZvciByZWdpc3RlciBJTkRFWCBpbiBDT05URVhUIHdp dGggVkFMLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitfVW53aW5kX1Nl dEdSVmFsdWUgKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKmNvbnRleHQsIGlu dCBpbmRleCwKKwkJICAgIF9VbndpbmRfV29yZCB2YWwpCit7CisgIGluZGV4 ID0gRFdBUkZfUkVHX1RPX1VOV0lORF9DT0xVTU4gKGluZGV4KTsKKyAgZ2Nj X2Fzc2VydCAoaW5kZXggPCAoaW50KSBzaXplb2YoZHdhcmZfcmVnX3NpemVf dGFibGUpKTsKKyAgZ2NjX2Fzc2VydCAoZHdhcmZfcmVnX3NpemVfdGFibGVb aW5kZXhdID09IHNpemVvZiAoX1Vud2luZF9Db250ZXh0X1JlZ19WYWwpKTsK KworICBjb250ZXh0LT5ieV92YWx1ZVtpbmRleF0gPSAxOworICBjb250ZXh0 LT5yZWdbaW5kZXhdID0gX1Vud2luZF9HZXRfVW53aW5kX0NvbnRleHRfUmVn X1ZhbCAodmFsKTsKK30KKworLyogUmV0dXJuIG5vbnplcm8gaWYgcmVnaXN0 ZXIgSU5ERVggaXMgc3RvcmVkIGJ5IHZhbHVlIHJhdGhlciB0aGFuCisgICBi eSByZWZlcmVuY2UuICAqLworCitzdGF0aWMgaW5saW5lIGludAorX1Vud2lu ZF9HUkJ5VmFsdWUgKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKmNvbnRleHQs IGludCBpbmRleCkKK3sKKyAgaW5kZXggPSBEV0FSRl9SRUdfVE9fVU5XSU5E X0NPTFVNTiAoaW5kZXgpOworICByZXR1cm4gY29udGV4dC0+YnlfdmFsdWVb aW5kZXhdOworfQorCisvKiBSZXRyaWV2ZSB0aGUgcmV0dXJuIGFkZHJlc3Mg Zm9yIENPTlRFWFQuICAqLworCitpbmxpbmUgX1Vud2luZF9QdHIKK19Vbndp bmRfR2V0SVAgKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKmNvbnRleHQpCit7 CisgIHJldHVybiAoX1Vud2luZF9QdHIpIGNvbnRleHQtPnJhOworfQorCisv KiBSZXRyaWV2ZSB0aGUgcmV0dXJuIGFkZHJlc3MgYW5kIGZsYWcgd2hldGhl ciB0aGF0IElQIGlzIGJlZm9yZQorICAgb3IgYWZ0ZXIgZmlyc3Qgbm90IHll dCBmdWxseSBleGVjdXRlZCBpbnN0cnVjdGlvbi4gICovCisKK2lubGluZSBf VW53aW5kX1B0cgorX1Vud2luZF9HZXRJUEluZm8gKHN0cnVjdCBfVW53aW5k X0NvbnRleHQgKmNvbnRleHQsIGludCAqaXBfYmVmb3JlX2luc24pCit7Cisg ICppcF9iZWZvcmVfaW5zbiA9IF9VbndpbmRfSXNTaWduYWxGcmFtZSAoY29u dGV4dCk7CisgIHJldHVybiAoX1Vud2luZF9QdHIpIGNvbnRleHQtPnJhOwor fQorCisvKiBPdmVyd3JpdGUgdGhlIHJldHVybiBhZGRyZXNzIGZvciBDT05U RVhUIHdpdGggVkFMLiAgKi8KKworaW5saW5lIHZvaWQKK19VbndpbmRfU2V0 SVAgKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKmNvbnRleHQsIF9VbndpbmRf UHRyIHZhbCkKK3sKKyAgY29udGV4dC0+cmEgPSAodm9pZCAqKSB2YWw7Cit9 CisKK3ZvaWQgKgorX1Vud2luZF9HZXRMYW5ndWFnZVNwZWNpZmljRGF0YSAo c3RydWN0IF9VbndpbmRfQ29udGV4dCAqY29udGV4dCkKK3sKKyAgcmV0dXJu IGNvbnRleHQtPmxzZGE7Cit9CisKK19VbndpbmRfUHRyCitfVW53aW5kX0dl dFJlZ2lvblN0YXJ0IChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICpjb250ZXh0 KQoreworICByZXR1cm4gKF9VbndpbmRfUHRyKSBjb250ZXh0LT5iYXNlcy5m dW5jOworfQorCit2b2lkICoKK19VbndpbmRfRmluZEVuY2xvc2luZ0Z1bmN0 aW9uICh2b2lkICpwYykKK3sKKyAgc3RydWN0IGR3YXJmX2VoX2Jhc2VzIGJh c2VzOworICBjb25zdCBzdHJ1Y3QgZHdhcmZfZmRlICpmZGUgPSBfVW53aW5k X0ZpbmRfRkRFIChwYy0xLCAmYmFzZXMpOworICBpZiAoZmRlKQorICAgIHJl dHVybiBiYXNlcy5mdW5jOworICBlbHNlCisgICAgcmV0dXJuIE5VTEw7Cit9 CisKK19VbndpbmRfUHRyCitfVW53aW5kX0dldERhdGFSZWxCYXNlIChzdHJ1 Y3QgX1Vud2luZF9Db250ZXh0ICpjb250ZXh0KQoreworICByZXR1cm4gKF9V bndpbmRfUHRyKSBjb250ZXh0LT5iYXNlcy5kYmFzZTsKK30KKworX1Vud2lu ZF9QdHIKK19VbndpbmRfR2V0VGV4dFJlbEJhc2UgKHN0cnVjdCBfVW53aW5k X0NvbnRleHQgKmNvbnRleHQpCit7CisgIHJldHVybiAoX1Vud2luZF9QdHIp IGNvbnRleHQtPmJhc2VzLnRiYXNlOworfQorCisjaW5jbHVkZSAibWQtdW53 aW5kLXN1cHBvcnQuaCIKKwwKKy8qIEV4dHJhY3QgYW55IGludGVyZXN0aW5n IGluZm9ybWF0aW9uIGZyb20gdGhlIENJRSBmb3IgdGhlIHRyYW5zbGF0aW9u CisgICB1bml0IEYgYmVsb25ncyB0by4gIFJldHVybiBhIHBvaW50ZXIgdG8g dGhlIGJ5dGUgYWZ0ZXIgdGhlIGF1Z21lbnRhdGlvbiwKKyAgIG9yIE5VTEwg aWYgd2UgZW5jb3VudGVyZWQgYW4gdW5kZWNpcGhlcmFibGUgYXVnbWVudGF0 aW9uLiAgKi8KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgKgorZXh0 cmFjdF9jaWVfaW5mbyAoY29uc3Qgc3RydWN0IGR3YXJmX2NpZSAqY2llLCBz dHJ1Y3QgX1Vud2luZF9Db250ZXh0ICpjb250ZXh0LAorCQkgIF9VbndpbmRf RnJhbWVTdGF0ZSAqZnMpCit7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmF1 ZyA9IGNpZS0+YXVnbWVudGF0aW9uOworICBjb25zdCB1bnNpZ25lZCBjaGFy ICpwID0gYXVnICsgc3RybGVuICgoY29uc3QgY2hhciAqKWF1ZykgKyAxOwor ICBjb25zdCB1bnNpZ25lZCBjaGFyICpyZXQgPSBOVUxMOworICBfdWxlYjEy OF90IHV0bXA7CisgIF9zbGViMTI4X3Qgc3RtcDsKKworICAvKiBnKysgdjIg ImVoIiBoYXMgcG9pbnRlciBpbW1lZGlhdGVseSBmb2xsb3dpbmcgYXVnbWVu dGF0aW9uIHN0cmluZywKKyAgICAgc28gaXQgbXVzdCBiZSBoYW5kbGVkIGZp cnN0LiAgKi8KKyAgaWYgKGF1Z1swXSA9PSAnZScgJiYgYXVnWzFdID09ICdo JykKKyAgICB7CisgICAgICBmcy0+ZWhfcHRyID0gcmVhZF9wb2ludGVyIChw KTsKKyAgICAgIHAgKz0gc2l6ZW9mICh2b2lkICopOworICAgICAgYXVnICs9 IDI7CisgICAgfQorCisgIC8qIEFmdGVyIHRoZSBhdWdtZW50YXRpb24gcmVz cC4gcG9pbnRlciBmb3IgImVoIiBhdWdtZW50YXRpb24KKyAgICAgZm9sbG93 cyBmb3IgQ0lFIHZlcnNpb24gPj0gNCBhZGRyZXNzIHNpemUgYnl0ZSBhbmQK KyAgICAgc2VnbWVudCBzaXplIGJ5dGUuICAqLworICBpZiAoX19idWlsdGlu X2V4cGVjdCAoY2llLT52ZXJzaW9uID49IDQsIDApKQorICAgIHsKKyAgICAg IGlmIChwWzBdICE9IHNpemVvZiAodm9pZCAqKSB8fCBwWzFdICE9IDApCisJ cmV0dXJuIE5VTEw7CisgICAgICBwICs9IDI7CisgICAgfQorICAvKiBJbW1l ZGlhdGVseSBmb2xsb3dpbmcgdGhpcyBhcmUgdGhlIGNvZGUgYW5kCisgICAg IGRhdGEgYWxpZ25tZW50IGFuZCByZXR1cm4gYWRkcmVzcyBjb2x1bW4uICAq LworICBwID0gcmVhZF91bGViMTI4IChwLCAmdXRtcCk7CisgIGZzLT5jb2Rl X2FsaWduID0gKF9VbndpbmRfV29yZCl1dG1wOworICBwID0gcmVhZF9zbGVi MTI4IChwLCAmc3RtcCk7CisgIGZzLT5kYXRhX2FsaWduID0gKF9VbndpbmRf U3dvcmQpc3RtcDsKKyAgaWYgKGNpZS0+dmVyc2lvbiA9PSAxKQorICAgIGZz LT5yZXRhZGRyX2NvbHVtbiA9ICpwKys7CisgIGVsc2UKKyAgICB7CisgICAg ICBwID0gcmVhZF91bGViMTI4IChwLCAmdXRtcCk7CisgICAgICBmcy0+cmV0 YWRkcl9jb2x1bW4gPSAoX1Vud2luZF9Xb3JkKXV0bXA7CisgICAgfQorICBm cy0+bHNkYV9lbmNvZGluZyA9IERXX0VIX1BFX29taXQ7CisKKyAgLyogSWYg dGhlIGF1Z21lbnRhdGlvbiBzdGFydHMgd2l0aCAneicsIHRoZW4gYSB1bGVi MTI4IGltbWVkaWF0ZWx5CisgICAgIGZvbGxvd3MgY29udGFpbmluZyB0aGUg bGVuZ3RoIG9mIHRoZSBhdWdtZW50YXRpb24gZmllbGQgZm9sbG93aW5nCisg ICAgIHRoZSBzaXplLiAgKi8KKyAgaWYgKCphdWcgPT0gJ3onKQorICAgIHsK KyAgICAgIHAgPSByZWFkX3VsZWIxMjggKHAsICZ1dG1wKTsKKyAgICAgIHJl dCA9IHAgKyB1dG1wOworCisgICAgICBmcy0+c2F3X3ogPSAxOworICAgICAg KythdWc7CisgICAgfQorCisgIC8qIEl0ZXJhdGUgb3ZlciByZWNvZ25pemVk IGF1Z21lbnRhdGlvbiBzdWJzZXF1ZW5jZXMuICAqLworICB3aGlsZSAoKmF1 ZyAhPSAnXDAnKQorICAgIHsKKyAgICAgIC8qICJMIiBpbmRpY2F0ZXMgYSBi eXRlIHNob3dpbmcgaG93IHRoZSBMU0RBIHBvaW50ZXIgaXMgZW5jb2RlZC4g ICovCisgICAgICBpZiAoYXVnWzBdID09ICdMJykKKwl7CisJICBmcy0+bHNk YV9lbmNvZGluZyA9ICpwKys7CisJICBhdWcgKz0gMTsKKwl9CisKKyAgICAg IC8qICJSIiBpbmRpY2F0ZXMgYSBieXRlIGluZGljYXRpbmcgaG93IEZERSBh ZGRyZXNzZXMgYXJlIGVuY29kZWQuICAqLworICAgICAgZWxzZSBpZiAoYXVn WzBdID09ICdSJykKKwl7CisJICBmcy0+ZmRlX2VuY29kaW5nID0gKnArKzsK KwkgIGF1ZyArPSAxOworCX0KKworICAgICAgLyogIlAiIGluZGljYXRlcyBh IHBlcnNvbmFsaXR5IHJvdXRpbmUgaW4gdGhlIENJRSBhdWdtZW50YXRpb24u ICAqLworICAgICAgZWxzZSBpZiAoYXVnWzBdID09ICdQJykKKwl7CisJICBf VW53aW5kX1B0ciBwZXJzb25hbGl0eTsKKworCSAgcCA9IHJlYWRfZW5jb2Rl ZF92YWx1ZSAoY29udGV4dCwgKnAsIHAgKyAxLCAmcGVyc29uYWxpdHkpOwor CSAgZnMtPnBlcnNvbmFsaXR5ID0gKF9VbndpbmRfUGVyc29uYWxpdHlfRm4p IHBlcnNvbmFsaXR5OworCSAgYXVnICs9IDE7CisJfQorCisgICAgICAvKiAi UyIgaW5kaWNhdGVzIGEgc2lnbmFsIGZyYW1lLiAgKi8KKyAgICAgIGVsc2Ug aWYgKGF1Z1swXSA9PSAnUycpCisJeworCSAgZnMtPnNpZ25hbF9mcmFtZSA9 IDE7CisJICBhdWcgKz0gMTsKKwl9CisKKyAgICAgIC8qIE90aGVyd2lzZSB3 ZSBoYXZlIGFuIHVua25vd24gYXVnbWVudGF0aW9uIHN0cmluZy4KKwkgQmFp bCB1bmxlc3Mgd2Ugc2F3IGEgJ3onIHByZWZpeC4gICovCisgICAgICBlbHNl CisJcmV0dXJuIHJldDsKKyAgICB9CisKKyAgcmV0dXJuIHJldCA/IHJldCA6 IHA7Cit9CisKKworLyogRGVjb2RlIGEgRFdfT1Agc3RhY2sgcHJvZ3JhbS4g IFJldHVybiB0aGUgdG9wIG9mIHN0YWNrLiAgUHVzaCBJTklUSUFMCisgICBv bnRvIHRoZSBzdGFjayB0byBzdGFydC4gICovCisKK3N0YXRpYyBfVW53aW5k X1dvcmQKK2V4ZWN1dGVfc3RhY2tfb3AgKGNvbnN0IHVuc2lnbmVkIGNoYXIg Km9wX3B0ciwgY29uc3QgdW5zaWduZWQgY2hhciAqb3BfZW5kLAorCQkgIHN0 cnVjdCBfVW53aW5kX0NvbnRleHQgKmNvbnRleHQsIF9VbndpbmRfV29yZCBp bml0aWFsKQoreworICBfVW53aW5kX1dvcmQgc3RhY2tbNjRdOwkvKiA/Pz8g QXNzdW1lIHRoaXMgaXMgZW5vdWdoLiAgKi8KKyAgaW50IHN0YWNrX2VsdDsK KworICBzdGFja1swXSA9IGluaXRpYWw7CisgIHN0YWNrX2VsdCA9IDE7CisK KyAgd2hpbGUgKG9wX3B0ciA8IG9wX2VuZCkKKyAgICB7CisgICAgICBlbnVt IGR3YXJmX2xvY2F0aW9uX2F0b20gb3AgPSAqb3BfcHRyKys7CisgICAgICBf VW53aW5kX1dvcmQgcmVzdWx0OworICAgICAgX3VsZWIxMjhfdCByZWcsIHV0 bXA7CisgICAgICBfc2xlYjEyOF90IG9mZnNldCwgc3RtcDsKKworICAgICAg c3dpdGNoIChvcCkKKwl7CisJY2FzZSBEV19PUF9saXQwOgorCWNhc2UgRFdf T1BfbGl0MToKKwljYXNlIERXX09QX2xpdDI6CisJY2FzZSBEV19PUF9saXQz OgorCWNhc2UgRFdfT1BfbGl0NDoKKwljYXNlIERXX09QX2xpdDU6CisJY2Fz ZSBEV19PUF9saXQ2OgorCWNhc2UgRFdfT1BfbGl0NzoKKwljYXNlIERXX09Q X2xpdDg6CisJY2FzZSBEV19PUF9saXQ5OgorCWNhc2UgRFdfT1BfbGl0MTA6 CisJY2FzZSBEV19PUF9saXQxMToKKwljYXNlIERXX09QX2xpdDEyOgorCWNh c2UgRFdfT1BfbGl0MTM6CisJY2FzZSBEV19PUF9saXQxNDoKKwljYXNlIERX X09QX2xpdDE1OgorCWNhc2UgRFdfT1BfbGl0MTY6CisJY2FzZSBEV19PUF9s aXQxNzoKKwljYXNlIERXX09QX2xpdDE4OgorCWNhc2UgRFdfT1BfbGl0MTk6 CisJY2FzZSBEV19PUF9saXQyMDoKKwljYXNlIERXX09QX2xpdDIxOgorCWNh c2UgRFdfT1BfbGl0MjI6CisJY2FzZSBEV19PUF9saXQyMzoKKwljYXNlIERX X09QX2xpdDI0OgorCWNhc2UgRFdfT1BfbGl0MjU6CisJY2FzZSBEV19PUF9s aXQyNjoKKwljYXNlIERXX09QX2xpdDI3OgorCWNhc2UgRFdfT1BfbGl0Mjg6 CisJY2FzZSBEV19PUF9saXQyOToKKwljYXNlIERXX09QX2xpdDMwOgorCWNh c2UgRFdfT1BfbGl0MzE6CisJICByZXN1bHQgPSBvcCAtIERXX09QX2xpdDA7 CisJICBicmVhazsKKworCWNhc2UgRFdfT1BfYWRkcjoKKwkgIHJlc3VsdCA9 IChfVW53aW5kX1dvcmQpIChfVW53aW5kX1B0cikgcmVhZF9wb2ludGVyIChv cF9wdHIpOworCSAgb3BfcHRyICs9IHNpemVvZiAodm9pZCAqKTsKKwkgIGJy ZWFrOworCisJY2FzZSBEV19PUF9HTlVfZW5jb2RlZF9hZGRyOgorCSAgewor CSAgICBfVW53aW5kX1B0ciBwcmVzdWx0OworCSAgICBvcF9wdHIgPSByZWFk X2VuY29kZWRfdmFsdWUgKGNvbnRleHQsICpvcF9wdHIsIG9wX3B0cisxLCAm cHJlc3VsdCk7CisJICAgIHJlc3VsdCA9IHByZXN1bHQ7CisJICB9CisJICBi cmVhazsKKworCWNhc2UgRFdfT1BfY29uc3QxdToKKwkgIHJlc3VsdCA9IHJl YWRfMXUgKG9wX3B0cik7CisJICBvcF9wdHIgKz0gMTsKKwkgIGJyZWFrOwor CWNhc2UgRFdfT1BfY29uc3QxczoKKwkgIHJlc3VsdCA9IHJlYWRfMXMgKG9w X3B0cik7CisJICBvcF9wdHIgKz0gMTsKKwkgIGJyZWFrOworCWNhc2UgRFdf T1BfY29uc3QydToKKwkgIHJlc3VsdCA9IHJlYWRfMnUgKG9wX3B0cik7CisJ ICBvcF9wdHIgKz0gMjsKKwkgIGJyZWFrOworCWNhc2UgRFdfT1BfY29uc3Qy czoKKwkgIHJlc3VsdCA9IHJlYWRfMnMgKG9wX3B0cik7CisJICBvcF9wdHIg Kz0gMjsKKwkgIGJyZWFrOworCWNhc2UgRFdfT1BfY29uc3Q0dToKKwkgIHJl c3VsdCA9IHJlYWRfNHUgKG9wX3B0cik7CisJICBvcF9wdHIgKz0gNDsKKwkg IGJyZWFrOworCWNhc2UgRFdfT1BfY29uc3Q0czoKKwkgIHJlc3VsdCA9IHJl YWRfNHMgKG9wX3B0cik7CisJICBvcF9wdHIgKz0gNDsKKwkgIGJyZWFrOwor CWNhc2UgRFdfT1BfY29uc3Q4dToKKwkgIHJlc3VsdCA9IHJlYWRfOHUgKG9w X3B0cik7CisJICBvcF9wdHIgKz0gODsKKwkgIGJyZWFrOworCWNhc2UgRFdf T1BfY29uc3Q4czoKKwkgIHJlc3VsdCA9IHJlYWRfOHMgKG9wX3B0cik7CisJ ICBvcF9wdHIgKz0gODsKKwkgIGJyZWFrOworCWNhc2UgRFdfT1BfY29uc3R1 OgorCSAgb3BfcHRyID0gcmVhZF91bGViMTI4IChvcF9wdHIsICZ1dG1wKTsK KwkgIHJlc3VsdCA9IChfVW53aW5kX1dvcmQpdXRtcDsKKwkgIGJyZWFrOwor CWNhc2UgRFdfT1BfY29uc3RzOgorCSAgb3BfcHRyID0gcmVhZF9zbGViMTI4 IChvcF9wdHIsICZzdG1wKTsKKwkgIHJlc3VsdCA9IChfVW53aW5kX1N3b3Jk KXN0bXA7CisJICBicmVhazsKKworCWNhc2UgRFdfT1BfcmVnMDoKKwljYXNl IERXX09QX3JlZzE6CisJY2FzZSBEV19PUF9yZWcyOgorCWNhc2UgRFdfT1Bf cmVnMzoKKwljYXNlIERXX09QX3JlZzQ6CisJY2FzZSBEV19PUF9yZWc1Ogor CWNhc2UgRFdfT1BfcmVnNjoKKwljYXNlIERXX09QX3JlZzc6CisJY2FzZSBE V19PUF9yZWc4OgorCWNhc2UgRFdfT1BfcmVnOToKKwljYXNlIERXX09QX3Jl ZzEwOgorCWNhc2UgRFdfT1BfcmVnMTE6CisJY2FzZSBEV19PUF9yZWcxMjoK KwljYXNlIERXX09QX3JlZzEzOgorCWNhc2UgRFdfT1BfcmVnMTQ6CisJY2Fz ZSBEV19PUF9yZWcxNToKKwljYXNlIERXX09QX3JlZzE2OgorCWNhc2UgRFdf T1BfcmVnMTc6CisJY2FzZSBEV19PUF9yZWcxODoKKwljYXNlIERXX09QX3Jl ZzE5OgorCWNhc2UgRFdfT1BfcmVnMjA6CisJY2FzZSBEV19PUF9yZWcyMToK KwljYXNlIERXX09QX3JlZzIyOgorCWNhc2UgRFdfT1BfcmVnMjM6CisJY2Fz ZSBEV19PUF9yZWcyNDoKKwljYXNlIERXX09QX3JlZzI1OgorCWNhc2UgRFdf T1BfcmVnMjY6CisJY2FzZSBEV19PUF9yZWcyNzoKKwljYXNlIERXX09QX3Jl ZzI4OgorCWNhc2UgRFdfT1BfcmVnMjk6CisJY2FzZSBEV19PUF9yZWczMDoK KwljYXNlIERXX09QX3JlZzMxOgorCSAgcmVzdWx0ID0gX1Vud2luZF9HZXRH UiAoY29udGV4dCwgb3AgLSBEV19PUF9yZWcwKTsKKwkgIGJyZWFrOworCWNh c2UgRFdfT1BfcmVneDoKKwkgIG9wX3B0ciA9IHJlYWRfdWxlYjEyOCAob3Bf cHRyLCAmcmVnKTsKKwkgIHJlc3VsdCA9IF9VbndpbmRfR2V0R1IgKGNvbnRl eHQsIHJlZyk7CisJICBicmVhazsKKworCWNhc2UgRFdfT1BfYnJlZzA6CisJ Y2FzZSBEV19PUF9icmVnMToKKwljYXNlIERXX09QX2JyZWcyOgorCWNhc2Ug RFdfT1BfYnJlZzM6CisJY2FzZSBEV19PUF9icmVnNDoKKwljYXNlIERXX09Q X2JyZWc1OgorCWNhc2UgRFdfT1BfYnJlZzY6CisJY2FzZSBEV19PUF9icmVn NzoKKwljYXNlIERXX09QX2JyZWc4OgorCWNhc2UgRFdfT1BfYnJlZzk6CisJ Y2FzZSBEV19PUF9icmVnMTA6CisJY2FzZSBEV19PUF9icmVnMTE6CisJY2Fz ZSBEV19PUF9icmVnMTI6CisJY2FzZSBEV19PUF9icmVnMTM6CisJY2FzZSBE V19PUF9icmVnMTQ6CisJY2FzZSBEV19PUF9icmVnMTU6CisJY2FzZSBEV19P UF9icmVnMTY6CisJY2FzZSBEV19PUF9icmVnMTc6CisJY2FzZSBEV19PUF9i cmVnMTg6CisJY2FzZSBEV19PUF9icmVnMTk6CisJY2FzZSBEV19PUF9icmVn MjA6CisJY2FzZSBEV19PUF9icmVnMjE6CisJY2FzZSBEV19PUF9icmVnMjI6 CisJY2FzZSBEV19PUF9icmVnMjM6CisJY2FzZSBEV19PUF9icmVnMjQ6CisJ Y2FzZSBEV19PUF9icmVnMjU6CisJY2FzZSBEV19PUF9icmVnMjY6CisJY2Fz ZSBEV19PUF9icmVnMjc6CisJY2FzZSBEV19PUF9icmVnMjg6CisJY2FzZSBE V19PUF9icmVnMjk6CisJY2FzZSBEV19PUF9icmVnMzA6CisJY2FzZSBEV19P UF9icmVnMzE6CisJICBvcF9wdHIgPSByZWFkX3NsZWIxMjggKG9wX3B0ciwg Jm9mZnNldCk7CisJICByZXN1bHQgPSBfVW53aW5kX0dldEdSIChjb250ZXh0 LCBvcCAtIERXX09QX2JyZWcwKSArIG9mZnNldDsKKwkgIGJyZWFrOworCWNh c2UgRFdfT1BfYnJlZ3g6CisJICBvcF9wdHIgPSByZWFkX3VsZWIxMjggKG9w X3B0ciwgJnJlZyk7CisJICBvcF9wdHIgPSByZWFkX3NsZWIxMjggKG9wX3B0 ciwgJm9mZnNldCk7CisJICByZXN1bHQgPSBfVW53aW5kX0dldEdSIChjb250 ZXh0LCByZWcpICsgKF9VbndpbmRfV29yZClvZmZzZXQ7CisJICBicmVhazsK KworCWNhc2UgRFdfT1BfZHVwOgorCSAgZ2NjX2Fzc2VydCAoc3RhY2tfZWx0 KTsKKwkgIHJlc3VsdCA9IHN0YWNrW3N0YWNrX2VsdCAtIDFdOworCSAgYnJl YWs7CisKKwljYXNlIERXX09QX2Ryb3A6CisJICBnY2NfYXNzZXJ0IChzdGFj a19lbHQpOworCSAgc3RhY2tfZWx0IC09IDE7CisJICBnb3RvIG5vX3B1c2g7 CisKKwljYXNlIERXX09QX3BpY2s6CisJICBvZmZzZXQgPSAqb3BfcHRyKys7 CisJICBnY2NfYXNzZXJ0IChvZmZzZXQgPCBzdGFja19lbHQgLSAxKTsKKwkg IHJlc3VsdCA9IHN0YWNrW3N0YWNrX2VsdCAtIDEgLSBvZmZzZXRdOworCSAg YnJlYWs7CisKKwljYXNlIERXX09QX292ZXI6CisJICBnY2NfYXNzZXJ0IChz dGFja19lbHQgPj0gMik7CisJICByZXN1bHQgPSBzdGFja1tzdGFja19lbHQg LSAyXTsKKwkgIGJyZWFrOworCisJY2FzZSBEV19PUF9zd2FwOgorCSAgewor CSAgICBfVW53aW5kX1dvcmQgdDsKKwkgICAgZ2NjX2Fzc2VydCAoc3RhY2tf ZWx0ID49IDIpOworCSAgICB0ID0gc3RhY2tbc3RhY2tfZWx0IC0gMV07CisJ ICAgIHN0YWNrW3N0YWNrX2VsdCAtIDFdID0gc3RhY2tbc3RhY2tfZWx0IC0g Ml07CisJICAgIHN0YWNrW3N0YWNrX2VsdCAtIDJdID0gdDsKKwkgICAgZ290 byBub19wdXNoOworCSAgfQorCisJY2FzZSBEV19PUF9yb3Q6CisJICB7CisJ ICAgIF9VbndpbmRfV29yZCB0MSwgdDIsIHQzOworCisJICAgIGdjY19hc3Nl cnQgKHN0YWNrX2VsdCA+PSAzKTsKKwkgICAgdDEgPSBzdGFja1tzdGFja19l bHQgLSAxXTsKKwkgICAgdDIgPSBzdGFja1tzdGFja19lbHQgLSAyXTsKKwkg ICAgdDMgPSBzdGFja1tzdGFja19lbHQgLSAzXTsKKwkgICAgc3RhY2tbc3Rh Y2tfZWx0IC0gMV0gPSB0MjsKKwkgICAgc3RhY2tbc3RhY2tfZWx0IC0gMl0g PSB0MzsKKwkgICAgc3RhY2tbc3RhY2tfZWx0IC0gM10gPSB0MTsKKwkgICAg Z290byBub19wdXNoOworCSAgfQorCisJY2FzZSBEV19PUF9kZXJlZjoKKwlj YXNlIERXX09QX2RlcmVmX3NpemU6CisJY2FzZSBEV19PUF9hYnM6CisJY2Fz ZSBEV19PUF9uZWc6CisJY2FzZSBEV19PUF9ub3Q6CisJY2FzZSBEV19PUF9w bHVzX3Vjb25zdDoKKwkgIC8qIFVuYXJ5IG9wZXJhdGlvbnMuICAqLworCSAg Z2NjX2Fzc2VydCAoc3RhY2tfZWx0KTsKKwkgIHN0YWNrX2VsdCAtPSAxOwor CisJICByZXN1bHQgPSBzdGFja1tzdGFja19lbHRdOworCisJICBzd2l0Y2gg KG9wKQorCSAgICB7CisJICAgIGNhc2UgRFdfT1BfZGVyZWY6CisJICAgICAg eworCQl2b2lkICpwdHIgPSAodm9pZCAqKSAoX1Vud2luZF9QdHIpIHJlc3Vs dDsKKwkJcmVzdWx0ID0gKF9VbndpbmRfUHRyKSByZWFkX3BvaW50ZXIgKHB0 cik7CisJICAgICAgfQorCSAgICAgIGJyZWFrOworCisJICAgIGNhc2UgRFdf T1BfZGVyZWZfc2l6ZToKKwkgICAgICB7CisJCXZvaWQgKnB0ciA9ICh2b2lk ICopIChfVW53aW5kX1B0cikgcmVzdWx0OworCQlzd2l0Y2ggKCpvcF9wdHIr KykKKwkJICB7CisJCSAgY2FzZSAxOgorCQkgICAgcmVzdWx0ID0gcmVhZF8x dSAocHRyKTsKKwkJICAgIGJyZWFrOworCQkgIGNhc2UgMjoKKwkJICAgIHJl c3VsdCA9IHJlYWRfMnUgKHB0cik7CisJCSAgICBicmVhazsKKwkJICBjYXNl IDQ6CisJCSAgICByZXN1bHQgPSByZWFkXzR1IChwdHIpOworCQkgICAgYnJl YWs7CisJCSAgY2FzZSA4OgorCQkgICAgcmVzdWx0ID0gcmVhZF84dSAocHRy KTsKKwkJICAgIGJyZWFrOworCQkgIGRlZmF1bHQ6CisJCSAgICBnY2NfdW5y ZWFjaGFibGUgKCk7CisJCSAgfQorCSAgICAgIH0KKwkgICAgICBicmVhazsK KworCSAgICBjYXNlIERXX09QX2FiczoKKwkgICAgICBpZiAoKF9VbndpbmRf U3dvcmQpIHJlc3VsdCA8IDApCisJCXJlc3VsdCA9IC1yZXN1bHQ7CisJICAg ICAgYnJlYWs7CisJICAgIGNhc2UgRFdfT1BfbmVnOgorCSAgICAgIHJlc3Vs dCA9IC1yZXN1bHQ7CisJICAgICAgYnJlYWs7CisJICAgIGNhc2UgRFdfT1Bf bm90OgorCSAgICAgIHJlc3VsdCA9IH5yZXN1bHQ7CisJICAgICAgYnJlYWs7 CisJICAgIGNhc2UgRFdfT1BfcGx1c191Y29uc3Q6CisJICAgICAgb3BfcHRy ID0gcmVhZF91bGViMTI4IChvcF9wdHIsICZ1dG1wKTsKKwkgICAgICByZXN1 bHQgKz0gKF9VbndpbmRfV29yZCl1dG1wOworCSAgICAgIGJyZWFrOworCisJ ICAgIGRlZmF1bHQ6CisJICAgICAgZ2NjX3VucmVhY2hhYmxlICgpOworCSAg ICB9CisJICBicmVhazsKKworCWNhc2UgRFdfT1BfYW5kOgorCWNhc2UgRFdf T1BfZGl2OgorCWNhc2UgRFdfT1BfbWludXM6CisJY2FzZSBEV19PUF9tb2Q6 CisJY2FzZSBEV19PUF9tdWw6CisJY2FzZSBEV19PUF9vcjoKKwljYXNlIERX X09QX3BsdXM6CisJY2FzZSBEV19PUF9zaGw6CisJY2FzZSBEV19PUF9zaHI6 CisJY2FzZSBEV19PUF9zaHJhOgorCWNhc2UgRFdfT1BfeG9yOgorCWNhc2Ug RFdfT1BfbGU6CisJY2FzZSBEV19PUF9nZToKKwljYXNlIERXX09QX2VxOgor CWNhc2UgRFdfT1BfbHQ6CisJY2FzZSBEV19PUF9ndDoKKwljYXNlIERXX09Q X25lOgorCSAgeworCSAgICAvKiBCaW5hcnkgb3BlcmF0aW9ucy4gICovCisJ ICAgIF9VbndpbmRfV29yZCBmaXJzdCwgc2Vjb25kOworCSAgICBnY2NfYXNz ZXJ0IChzdGFja19lbHQgPj0gMik7CisJICAgIHN0YWNrX2VsdCAtPSAyOwor CisJICAgIHNlY29uZCA9IHN0YWNrW3N0YWNrX2VsdF07CisJICAgIGZpcnN0 ID0gc3RhY2tbc3RhY2tfZWx0ICsgMV07CisKKwkgICAgc3dpdGNoIChvcCkK KwkgICAgICB7CisJICAgICAgY2FzZSBEV19PUF9hbmQ6CisJCXJlc3VsdCA9 IHNlY29uZCAmIGZpcnN0OworCQlicmVhazsKKwkgICAgICBjYXNlIERXX09Q X2RpdjoKKwkJcmVzdWx0ID0gKF9VbndpbmRfU3dvcmQpIHNlY29uZCAvIChf VW53aW5kX1N3b3JkKSBmaXJzdDsKKwkJYnJlYWs7CisJICAgICAgY2FzZSBE V19PUF9taW51czoKKwkJcmVzdWx0ID0gc2Vjb25kIC0gZmlyc3Q7CisJCWJy ZWFrOworCSAgICAgIGNhc2UgRFdfT1BfbW9kOgorCQlyZXN1bHQgPSBzZWNv bmQgJSBmaXJzdDsKKwkJYnJlYWs7CisJICAgICAgY2FzZSBEV19PUF9tdWw6 CisJCXJlc3VsdCA9IHNlY29uZCAqIGZpcnN0OworCQlicmVhazsKKwkgICAg ICBjYXNlIERXX09QX29yOgorCQlyZXN1bHQgPSBzZWNvbmQgfCBmaXJzdDsK KwkJYnJlYWs7CisJICAgICAgY2FzZSBEV19PUF9wbHVzOgorCQlyZXN1bHQg PSBzZWNvbmQgKyBmaXJzdDsKKwkJYnJlYWs7CisJICAgICAgY2FzZSBEV19P UF9zaGw6CisJCXJlc3VsdCA9IHNlY29uZCA8PCBmaXJzdDsKKwkJYnJlYWs7 CisJICAgICAgY2FzZSBEV19PUF9zaHI6CisJCXJlc3VsdCA9IHNlY29uZCA+ PiBmaXJzdDsKKwkJYnJlYWs7CisJICAgICAgY2FzZSBEV19PUF9zaHJhOgor CQlyZXN1bHQgPSAoX1Vud2luZF9Td29yZCkgc2Vjb25kID4+IGZpcnN0Owor CQlicmVhazsKKwkgICAgICBjYXNlIERXX09QX3hvcjoKKwkJcmVzdWx0ID0g c2Vjb25kIF4gZmlyc3Q7CisJCWJyZWFrOworCSAgICAgIGNhc2UgRFdfT1Bf bGU6CisJCXJlc3VsdCA9IChfVW53aW5kX1N3b3JkKSBzZWNvbmQgPD0gKF9V bndpbmRfU3dvcmQpIGZpcnN0OworCQlicmVhazsKKwkgICAgICBjYXNlIERX X09QX2dlOgorCQlyZXN1bHQgPSAoX1Vud2luZF9Td29yZCkgc2Vjb25kID49 IChfVW53aW5kX1N3b3JkKSBmaXJzdDsKKwkJYnJlYWs7CisJICAgICAgY2Fz ZSBEV19PUF9lcToKKwkJcmVzdWx0ID0gKF9VbndpbmRfU3dvcmQpIHNlY29u ZCA9PSAoX1Vud2luZF9Td29yZCkgZmlyc3Q7CisJCWJyZWFrOworCSAgICAg IGNhc2UgRFdfT1BfbHQ6CisJCXJlc3VsdCA9IChfVW53aW5kX1N3b3JkKSBz ZWNvbmQgPCAoX1Vud2luZF9Td29yZCkgZmlyc3Q7CisJCWJyZWFrOworCSAg ICAgIGNhc2UgRFdfT1BfZ3Q6CisJCXJlc3VsdCA9IChfVW53aW5kX1N3b3Jk KSBzZWNvbmQgPiAoX1Vud2luZF9Td29yZCkgZmlyc3Q7CisJCWJyZWFrOwor CSAgICAgIGNhc2UgRFdfT1BfbmU6CisJCXJlc3VsdCA9IChfVW53aW5kX1N3 b3JkKSBzZWNvbmQgIT0gKF9VbndpbmRfU3dvcmQpIGZpcnN0OworCQlicmVh azsKKworCSAgICAgIGRlZmF1bHQ6CisJCWdjY191bnJlYWNoYWJsZSAoKTsK KwkgICAgICB9CisJICB9CisJICBicmVhazsKKworCWNhc2UgRFdfT1Bfc2tp cDoKKwkgIG9mZnNldCA9IHJlYWRfMnMgKG9wX3B0cik7CisJICBvcF9wdHIg Kz0gMjsKKwkgIG9wX3B0ciArPSBvZmZzZXQ7CisJICBnb3RvIG5vX3B1c2g7 CisKKwljYXNlIERXX09QX2JyYToKKwkgIGdjY19hc3NlcnQgKHN0YWNrX2Vs dCk7CisJICBzdGFja19lbHQgLT0gMTsKKworCSAgb2Zmc2V0ID0gcmVhZF8y cyAob3BfcHRyKTsKKwkgIG9wX3B0ciArPSAyOworCSAgaWYgKHN0YWNrW3N0 YWNrX2VsdF0gIT0gMCkKKwkgICAgb3BfcHRyICs9IG9mZnNldDsKKwkgIGdv dG8gbm9fcHVzaDsKKworCWNhc2UgRFdfT1Bfbm9wOgorCSAgZ290byBub19w dXNoOworCisJZGVmYXVsdDoKKwkgIGdjY191bnJlYWNoYWJsZSAoKTsKKwl9 CisKKyAgICAgIC8qIE1vc3QgdGhpbmdzIHB1c2ggYSByZXN1bHQgdmFsdWUu ICAqLworICAgICAgZ2NjX2Fzc2VydCAoKHNpemVfdCkgc3RhY2tfZWx0IDwg c2l6ZW9mKHN0YWNrKS9zaXplb2YoKnN0YWNrKSk7CisgICAgICBzdGFja1tz dGFja19lbHQrK10gPSByZXN1bHQ7CisgICAgbm9fcHVzaDo7CisgICAgfQor CisgIC8qIFdlIHdlcmUgZXhlY3V0aW5nIHRoaXMgcHJvZ3JhbSB0byBnZXQg YSB2YWx1ZS4gIEl0IHNob3VsZCBiZQorICAgICBhdCB0b3Agb2Ygc3RhY2su ICAqLworICBnY2NfYXNzZXJ0IChzdGFja19lbHQpOworICBzdGFja19lbHQg LT0gMTsKKyAgcmV0dXJuIHN0YWNrW3N0YWNrX2VsdF07Cit9CisKKworLyog RGVjb2RlIERXQVJGIDIgY2FsbCBmcmFtZSBpbmZvcm1hdGlvbi4gVGFrZXMg cG9pbnRlcnMgdGhlCisgICBpbnN0cnVjdGlvbiBzZXF1ZW5jZSB0byBkZWNv ZGUsIGN1cnJlbnQgcmVnaXN0ZXIgaW5mb3JtYXRpb24gYW5kCisgICBDSUUg aW5mbywgYW5kIHRoZSBQQyByYW5nZSB0byBldmFsdWF0ZS4gICovCisKK3N0 YXRpYyB2b2lkCitleGVjdXRlX2NmYV9wcm9ncmFtIChjb25zdCB1bnNpZ25l ZCBjaGFyICppbnNuX3B0ciwKKwkJICAgICBjb25zdCB1bnNpZ25lZCBjaGFy ICppbnNuX2VuZCwKKwkJICAgICBzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICpj b250ZXh0LAorCQkgICAgIF9VbndpbmRfRnJhbWVTdGF0ZSAqZnMpCit7Cisg IHN0cnVjdCBmcmFtZV9zdGF0ZV9yZWdfaW5mbyAqdW51c2VkX3JzID0gTlVM TDsKKworICAvKiBEb24ndCBhbGxvdyByZW1lbWJlci9yZXN0b3JlIGJldHdl ZW4gQ0lFIGFuZCBGREUgcHJvZ3JhbXMuICAqLworICBmcy0+cmVncy5wcmV2 ID0gTlVMTDsKKworICAvKiBUaGUgY29tcGFyaXNvbiB3aXRoIHRoZSByZXR1 cm4gYWRkcmVzcyB1c2VzIDwgcmF0aGVyIHRoYW4gPD0gYmVjYXVzZQorICAg ICB3ZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIHRoZSBlZmZlY3RzIG9mIGNv ZGUgYmVmb3JlIHRoZSBjYWxsOyBmb3IgYQorICAgICBub3JldHVybiBmdW5j dGlvbiwgdGhlIHJldHVybiBhZGRyZXNzIG1heSBwb2ludCB0byB1bnJlbGF0 ZWQgY29kZSB3aXRoCisgICAgIGEgZGlmZmVyZW50IHN0YWNrIGNvbmZpZ3Vy YXRpb24gdGhhdCB3ZSBhcmUgbm90IGludGVyZXN0ZWQgaW4uICBXZQorICAg ICBhc3N1bWUgdGhhdCB0aGUgY2FsbCBpdHNlbGYgaXMgdW53aW5kIGluZm8t bmV1dHJhbDsgaWYgbm90LCBvciBpZgorICAgICB0aGVyZSBhcmUgZGVsYXkg aW5zdHJ1Y3Rpb25zIHRoYXQgYWRqdXN0IHRoZSBzdGFjaywgdGhlc2UgbXVz dCBiZQorICAgICByZWZsZWN0ZWQgYXQgdGhlIHBvaW50IGltbWVkaWF0ZWx5 IGJlZm9yZSB0aGUgY2FsbCBpbnNuLgorICAgICBJbiBzaWduYWwgZnJhbWVz LCByZXR1cm4gYWRkcmVzcyBpcyBhZnRlciBsYXN0IGNvbXBsZXRlZCBpbnN0 cnVjdGlvbiwKKyAgICAgc28gd2UgYWRkIDEgdG8gcmV0dXJuIGFkZHJlc3Mg dG8gbWFrZSB0aGUgY29tcGFyaXNvbiA8PS4gICovCisgIHdoaWxlIChpbnNu X3B0ciA8IGluc25fZW5kCisJICYmIGZzLT5wYyA8IGNvbnRleHQtPnJhICsg X1Vud2luZF9Jc1NpZ25hbEZyYW1lIChjb250ZXh0KSkKKyAgICB7CisgICAg ICB1bnNpZ25lZCBjaGFyIGluc24gPSAqaW5zbl9wdHIrKzsKKyAgICAgIF91 bGViMTI4X3QgcmVnLCB1dG1wOworICAgICAgX3NsZWIxMjhfdCBvZmZzZXQs IHN0bXA7CisKKyAgICAgIGlmICgoaW5zbiAmIDB4YzApID09IERXX0NGQV9h ZHZhbmNlX2xvYykKKwlmcy0+cGMgKz0gKGluc24gJiAweDNmKSAqIGZzLT5j b2RlX2FsaWduOworICAgICAgZWxzZSBpZiAoKGluc24gJiAweGMwKSA9PSBE V19DRkFfb2Zmc2V0KQorCXsKKwkgIHJlZyA9IGluc24gJiAweDNmOworCSAg aW5zbl9wdHIgPSByZWFkX3VsZWIxMjggKGluc25fcHRyLCAmdXRtcCk7CisJ ICBvZmZzZXQgPSAoX1Vud2luZF9Td29yZCkgdXRtcCAqIGZzLT5kYXRhX2Fs aWduOworCSAgZnMtPnJlZ3MucmVnW0RXQVJGX1JFR19UT19VTldJTkRfQ09M VU1OIChyZWcpXS5ob3cKKwkgICAgPSBSRUdfU0FWRURfT0ZGU0VUOworCSAg ZnMtPnJlZ3MucmVnW0RXQVJGX1JFR19UT19VTldJTkRfQ09MVU1OIChyZWcp XS5sb2Mub2Zmc2V0ID0gb2Zmc2V0OworCX0KKyAgICAgIGVsc2UgaWYgKChp bnNuICYgMHhjMCkgPT0gRFdfQ0ZBX3Jlc3RvcmUpCisJeworCSAgcmVnID0g aW5zbiAmIDB4M2Y7CisJICBmcy0+cmVncy5yZWdbRFdBUkZfUkVHX1RPX1VO V0lORF9DT0xVTU4gKHJlZyldLmhvdyA9IFJFR19VTlNBVkVEOworCX0KKyAg ICAgIGVsc2Ugc3dpdGNoIChpbnNuKQorCXsKKwljYXNlIERXX0NGQV9zZXRf bG9jOgorCSAgeworCSAgICBfVW53aW5kX1B0ciBwYzsKKworCSAgICBpbnNu X3B0ciA9IHJlYWRfZW5jb2RlZF92YWx1ZSAoY29udGV4dCwgZnMtPmZkZV9l bmNvZGluZywKKwkJCQkJICAgaW5zbl9wdHIsICZwYyk7CisJICAgIGZzLT5w YyA9ICh2b2lkICopIHBjOworCSAgfQorCSAgYnJlYWs7CisKKwljYXNlIERX X0NGQV9hZHZhbmNlX2xvYzE6CisJICBmcy0+cGMgKz0gcmVhZF8xdSAoaW5z bl9wdHIpICogZnMtPmNvZGVfYWxpZ247CisJICBpbnNuX3B0ciArPSAxOwor CSAgYnJlYWs7CisJY2FzZSBEV19DRkFfYWR2YW5jZV9sb2MyOgorCSAgZnMt PnBjICs9IHJlYWRfMnUgKGluc25fcHRyKSAqIGZzLT5jb2RlX2FsaWduOwor CSAgaW5zbl9wdHIgKz0gMjsKKwkgIGJyZWFrOworCWNhc2UgRFdfQ0ZBX2Fk dmFuY2VfbG9jNDoKKwkgIGZzLT5wYyArPSByZWFkXzR1IChpbnNuX3B0cikg KiBmcy0+Y29kZV9hbGlnbjsKKwkgIGluc25fcHRyICs9IDQ7CisJICBicmVh azsKKworCWNhc2UgRFdfQ0ZBX29mZnNldF9leHRlbmRlZDoKKwkgIGluc25f cHRyID0gcmVhZF91bGViMTI4IChpbnNuX3B0ciwgJnJlZyk7CisJICBpbnNu X3B0ciA9IHJlYWRfdWxlYjEyOCAoaW5zbl9wdHIsICZ1dG1wKTsKKwkgIG9m ZnNldCA9IChfVW53aW5kX1N3b3JkKSB1dG1wICogZnMtPmRhdGFfYWxpZ247 CisJICBmcy0+cmVncy5yZWdbRFdBUkZfUkVHX1RPX1VOV0lORF9DT0xVTU4g KHJlZyldLmhvdworCSAgICA9IFJFR19TQVZFRF9PRkZTRVQ7CisJICBmcy0+ cmVncy5yZWdbRFdBUkZfUkVHX1RPX1VOV0lORF9DT0xVTU4gKHJlZyldLmxv Yy5vZmZzZXQgPSBvZmZzZXQ7CisJICBicmVhazsKKworCWNhc2UgRFdfQ0ZB X3Jlc3RvcmVfZXh0ZW5kZWQ6CisJICBpbnNuX3B0ciA9IHJlYWRfdWxlYjEy OCAoaW5zbl9wdHIsICZyZWcpOworCSAgLyogRklYTUUsIHRoaXMgaXMgd3Jv bmc7IHRoZSBDSUUgbWlnaHQgaGF2ZSBzYWlkIHRoYXQgdGhlCisJICAgICBy ZWdpc3RlciB3YXMgc2F2ZWQgc29tZXdoZXJlLiAgKi8KKwkgIGZzLT5yZWdz LnJlZ1tEV0FSRl9SRUdfVE9fVU5XSU5EX0NPTFVNTihyZWcpXS5ob3cgPSBS RUdfVU5TQVZFRDsKKwkgIGJyZWFrOworCisJY2FzZSBEV19DRkFfc2FtZV92 YWx1ZToKKwkgIGluc25fcHRyID0gcmVhZF91bGViMTI4IChpbnNuX3B0ciwg JnJlZyk7CisJICBmcy0+cmVncy5yZWdbRFdBUkZfUkVHX1RPX1VOV0lORF9D T0xVTU4ocmVnKV0uaG93ID0gUkVHX1VOU0FWRUQ7CisJICBicmVhazsKKwor CWNhc2UgRFdfQ0ZBX3VuZGVmaW5lZDoKKwkgIGluc25fcHRyID0gcmVhZF91 bGViMTI4IChpbnNuX3B0ciwgJnJlZyk7CisJICBmcy0+cmVncy5yZWdbRFdB UkZfUkVHX1RPX1VOV0lORF9DT0xVTU4ocmVnKV0uaG93ID0gUkVHX1VOREVG SU5FRDsKKwkgIGJyZWFrOworCisJY2FzZSBEV19DRkFfbm9wOgorCSAgYnJl YWs7CisKKwljYXNlIERXX0NGQV9yZWdpc3RlcjoKKwkgIHsKKwkgICAgX3Vs ZWIxMjhfdCByZWcyOworCSAgICBpbnNuX3B0ciA9IHJlYWRfdWxlYjEyOCAo aW5zbl9wdHIsICZyZWcpOworCSAgICBpbnNuX3B0ciA9IHJlYWRfdWxlYjEy OCAoaW5zbl9wdHIsICZyZWcyKTsKKwkgICAgZnMtPnJlZ3MucmVnW0RXQVJG X1JFR19UT19VTldJTkRfQ09MVU1OIChyZWcpXS5ob3cgPSBSRUdfU0FWRURf UkVHOworCSAgICBmcy0+cmVncy5yZWdbRFdBUkZfUkVHX1RPX1VOV0lORF9D T0xVTU4gKHJlZyldLmxvYy5yZWcgPQorCSAgICAgIChfVW53aW5kX1dvcmQp cmVnMjsKKwkgIH0KKwkgIGJyZWFrOworCisJY2FzZSBEV19DRkFfcmVtZW1i ZXJfc3RhdGU6CisJICB7CisJICAgIHN0cnVjdCBmcmFtZV9zdGF0ZV9yZWdf aW5mbyAqbmV3X3JzOworCSAgICBpZiAodW51c2VkX3JzKQorCSAgICAgIHsK KwkJbmV3X3JzID0gdW51c2VkX3JzOworCQl1bnVzZWRfcnMgPSB1bnVzZWRf cnMtPnByZXY7CisJICAgICAgfQorCSAgICBlbHNlCisJICAgICAgbmV3X3Jz ID0gYWxsb2NhIChzaXplb2YgKHN0cnVjdCBmcmFtZV9zdGF0ZV9yZWdfaW5m bykpOworCisJICAgICpuZXdfcnMgPSBmcy0+cmVnczsKKwkgICAgZnMtPnJl Z3MucHJldiA9IG5ld19yczsKKwkgIH0KKwkgIGJyZWFrOworCisJY2FzZSBE V19DRkFfcmVzdG9yZV9zdGF0ZToKKwkgIHsKKwkgICAgc3RydWN0IGZyYW1l X3N0YXRlX3JlZ19pbmZvICpvbGRfcnMgPSBmcy0+cmVncy5wcmV2OworCSAg ICBmcy0+cmVncyA9ICpvbGRfcnM7CisJICAgIG9sZF9ycy0+cHJldiA9IHVu dXNlZF9yczsKKwkgICAgdW51c2VkX3JzID0gb2xkX3JzOworCSAgfQorCSAg YnJlYWs7CisKKwljYXNlIERXX0NGQV9kZWZfY2ZhOgorCSAgaW5zbl9wdHIg PSByZWFkX3VsZWIxMjggKGluc25fcHRyLCAmdXRtcCk7CisJICBmcy0+cmVn cy5jZmFfcmVnID0gKF9VbndpbmRfV29yZCl1dG1wOworCSAgaW5zbl9wdHIg PSByZWFkX3VsZWIxMjggKGluc25fcHRyLCAmdXRtcCk7CisJICBmcy0+cmVn cy5jZmFfb2Zmc2V0ID0gKF9VbndpbmRfV29yZCl1dG1wOworCSAgZnMtPnJl Z3MuY2ZhX2hvdyA9IENGQV9SRUdfT0ZGU0VUOworCSAgYnJlYWs7CisKKwlj YXNlIERXX0NGQV9kZWZfY2ZhX3JlZ2lzdGVyOgorCSAgaW5zbl9wdHIgPSBy ZWFkX3VsZWIxMjggKGluc25fcHRyLCAmdXRtcCk7CisJICBmcy0+cmVncy5j ZmFfcmVnID0gKF9VbndpbmRfV29yZCl1dG1wOworCSAgZnMtPnJlZ3MuY2Zh X2hvdyA9IENGQV9SRUdfT0ZGU0VUOworCSAgYnJlYWs7CisKKwljYXNlIERX X0NGQV9kZWZfY2ZhX29mZnNldDoKKwkgIGluc25fcHRyID0gcmVhZF91bGVi MTI4IChpbnNuX3B0ciwgJnV0bXApOworCSAgZnMtPnJlZ3MuY2ZhX29mZnNl dCA9IHV0bXA7CisJICAvKiBjZmFfaG93IGRlbGliZXJhdGVseSBub3Qgc2V0 LiAgKi8KKwkgIGJyZWFrOworCisJY2FzZSBEV19DRkFfZGVmX2NmYV9leHBy ZXNzaW9uOgorCSAgZnMtPnJlZ3MuY2ZhX2V4cCA9IGluc25fcHRyOworCSAg ZnMtPnJlZ3MuY2ZhX2hvdyA9IENGQV9FWFA7CisJICBpbnNuX3B0ciA9IHJl YWRfdWxlYjEyOCAoaW5zbl9wdHIsICZ1dG1wKTsKKwkgIGluc25fcHRyICs9 IHV0bXA7CisJICBicmVhazsKKworCWNhc2UgRFdfQ0ZBX2V4cHJlc3Npb246 CisJICBpbnNuX3B0ciA9IHJlYWRfdWxlYjEyOCAoaW5zbl9wdHIsICZyZWcp OworCSAgZnMtPnJlZ3MucmVnW0RXQVJGX1JFR19UT19VTldJTkRfQ09MVU1O IChyZWcpXS5ob3cgPSBSRUdfU0FWRURfRVhQOworCSAgZnMtPnJlZ3MucmVn W0RXQVJGX1JFR19UT19VTldJTkRfQ09MVU1OIChyZWcpXS5sb2MuZXhwID0g aW5zbl9wdHI7CisJICBpbnNuX3B0ciA9IHJlYWRfdWxlYjEyOCAoaW5zbl9w dHIsICZ1dG1wKTsKKwkgIGluc25fcHRyICs9IHV0bXA7CisJICBicmVhazsK KworCSAgLyogRHdhcmYzLiAgKi8KKwljYXNlIERXX0NGQV9vZmZzZXRfZXh0 ZW5kZWRfc2Y6CisJICBpbnNuX3B0ciA9IHJlYWRfdWxlYjEyOCAoaW5zbl9w dHIsICZyZWcpOworCSAgaW5zbl9wdHIgPSByZWFkX3NsZWIxMjggKGluc25f cHRyLCAmc3RtcCk7CisJICBvZmZzZXQgPSBzdG1wICogZnMtPmRhdGFfYWxp Z247CisJICBmcy0+cmVncy5yZWdbRFdBUkZfUkVHX1RPX1VOV0lORF9DT0xV TU4gKHJlZyldLmhvdworCSAgICA9IFJFR19TQVZFRF9PRkZTRVQ7CisJICBm cy0+cmVncy5yZWdbRFdBUkZfUkVHX1RPX1VOV0lORF9DT0xVTU4gKHJlZyld LmxvYy5vZmZzZXQgPSBvZmZzZXQ7CisJICBicmVhazsKKworCWNhc2UgRFdf Q0ZBX2RlZl9jZmFfc2Y6CisJICBpbnNuX3B0ciA9IHJlYWRfdWxlYjEyOCAo aW5zbl9wdHIsICZ1dG1wKTsKKwkgIGZzLT5yZWdzLmNmYV9yZWcgPSAoX1Vu d2luZF9Xb3JkKXV0bXA7CisJICBpbnNuX3B0ciA9IHJlYWRfc2xlYjEyOCAo aW5zbl9wdHIsICZzdG1wKTsKKwkgIGZzLT5yZWdzLmNmYV9vZmZzZXQgPSAo X1Vud2luZF9Td29yZClzdG1wOworCSAgZnMtPnJlZ3MuY2ZhX2hvdyA9IENG QV9SRUdfT0ZGU0VUOworCSAgZnMtPnJlZ3MuY2ZhX29mZnNldCAqPSBmcy0+ ZGF0YV9hbGlnbjsKKwkgIGJyZWFrOworCisJY2FzZSBEV19DRkFfZGVmX2Nm YV9vZmZzZXRfc2Y6CisJICBpbnNuX3B0ciA9IHJlYWRfc2xlYjEyOCAoaW5z bl9wdHIsICZzdG1wKTsKKwkgIGZzLT5yZWdzLmNmYV9vZmZzZXQgPSAoX1Vu d2luZF9Td29yZClzdG1wOworCSAgZnMtPnJlZ3MuY2ZhX29mZnNldCAqPSBm cy0+ZGF0YV9hbGlnbjsKKwkgIC8qIGNmYV9ob3cgZGVsaWJlcmF0ZWx5IG5v dCBzZXQuICAqLworCSAgYnJlYWs7CisKKwljYXNlIERXX0NGQV92YWxfb2Zm c2V0OgorCSAgaW5zbl9wdHIgPSByZWFkX3VsZWIxMjggKGluc25fcHRyLCAm cmVnKTsKKwkgIGluc25fcHRyID0gcmVhZF91bGViMTI4IChpbnNuX3B0ciwg JnV0bXApOworCSAgb2Zmc2V0ID0gKF9VbndpbmRfU3dvcmQpIHV0bXAgKiBm cy0+ZGF0YV9hbGlnbjsKKwkgIGZzLT5yZWdzLnJlZ1tEV0FSRl9SRUdfVE9f VU5XSU5EX0NPTFVNTiAocmVnKV0uaG93CisJICAgID0gUkVHX1NBVkVEX1ZB TF9PRkZTRVQ7CisJICBmcy0+cmVncy5yZWdbRFdBUkZfUkVHX1RPX1VOV0lO RF9DT0xVTU4gKHJlZyldLmxvYy5vZmZzZXQgPSBvZmZzZXQ7CisJICBicmVh azsKKworCWNhc2UgRFdfQ0ZBX3ZhbF9vZmZzZXRfc2Y6CisJICBpbnNuX3B0 ciA9IHJlYWRfdWxlYjEyOCAoaW5zbl9wdHIsICZyZWcpOworCSAgaW5zbl9w dHIgPSByZWFkX3NsZWIxMjggKGluc25fcHRyLCAmc3RtcCk7CisJICBvZmZz ZXQgPSBzdG1wICogZnMtPmRhdGFfYWxpZ247CisJICBmcy0+cmVncy5yZWdb RFdBUkZfUkVHX1RPX1VOV0lORF9DT0xVTU4gKHJlZyldLmhvdworCSAgICA9 IFJFR19TQVZFRF9WQUxfT0ZGU0VUOworCSAgZnMtPnJlZ3MucmVnW0RXQVJG X1JFR19UT19VTldJTkRfQ09MVU1OIChyZWcpXS5sb2Mub2Zmc2V0ID0gb2Zm c2V0OworCSAgYnJlYWs7CisKKwljYXNlIERXX0NGQV92YWxfZXhwcmVzc2lv bjoKKwkgIGluc25fcHRyID0gcmVhZF91bGViMTI4IChpbnNuX3B0ciwgJnJl Zyk7CisJICBmcy0+cmVncy5yZWdbRFdBUkZfUkVHX1RPX1VOV0lORF9DT0xV TU4gKHJlZyldLmhvdworCSAgICA9IFJFR19TQVZFRF9WQUxfRVhQOworCSAg ZnMtPnJlZ3MucmVnW0RXQVJGX1JFR19UT19VTldJTkRfQ09MVU1OIChyZWcp XS5sb2MuZXhwID0gaW5zbl9wdHI7CisJICBpbnNuX3B0ciA9IHJlYWRfdWxl YjEyOCAoaW5zbl9wdHIsICZ1dG1wKTsKKwkgIGluc25fcHRyICs9IHV0bXA7 CisJICBicmVhazsKKworCWNhc2UgRFdfQ0ZBX0dOVV93aW5kb3dfc2F2ZToK KwkgIC8qID8/PyBIYXJkY29kZWQgZm9yIFNQQVJDIHJlZ2lzdGVyIHdpbmRv dyBjb25maWd1cmF0aW9uLiAgKi8KKwkgIGZvciAocmVnID0gMTY7IHJlZyA8 IDMyOyArK3JlZykKKwkgICAgeworCSAgICAgIGZzLT5yZWdzLnJlZ1tyZWdd LmhvdyA9IFJFR19TQVZFRF9PRkZTRVQ7CisJICAgICAgZnMtPnJlZ3MucmVn W3JlZ10ubG9jLm9mZnNldCA9IChyZWcgLSAxNikgKiBzaXplb2YgKHZvaWQg Kik7CisJICAgIH0KKwkgIGJyZWFrOworCisJY2FzZSBEV19DRkFfR05VX2Fy Z3Nfc2l6ZToKKwkgIGluc25fcHRyID0gcmVhZF91bGViMTI4IChpbnNuX3B0 ciwgJnV0bXApOworCSAgY29udGV4dC0+YXJnc19zaXplID0gKF9VbndpbmRf V29yZCl1dG1wOworCSAgYnJlYWs7CisKKwljYXNlIERXX0NGQV9HTlVfbmVn YXRpdmVfb2Zmc2V0X2V4dGVuZGVkOgorCSAgLyogT2Jzb2xldGVkIGJ5IERX X0NGQV9vZmZzZXRfZXh0ZW5kZWRfc2YsIGJ1dCB1c2VkIGJ5CisJICAgICBv bGRlciBQb3dlclBDIGNvZGUuICAqLworCSAgaW5zbl9wdHIgPSByZWFkX3Vs ZWIxMjggKGluc25fcHRyLCAmcmVnKTsKKwkgIGluc25fcHRyID0gcmVhZF91 bGViMTI4IChpbnNuX3B0ciwgJnV0bXApOworCSAgb2Zmc2V0ID0gKF9Vbndp bmRfV29yZCkgdXRtcCAqIGZzLT5kYXRhX2FsaWduOworCSAgZnMtPnJlZ3Mu cmVnW0RXQVJGX1JFR19UT19VTldJTkRfQ09MVU1OIChyZWcpXS5ob3cKKwkg ICAgPSBSRUdfU0FWRURfT0ZGU0VUOworCSAgZnMtPnJlZ3MucmVnW0RXQVJG X1JFR19UT19VTldJTkRfQ09MVU1OIChyZWcpXS5sb2Mub2Zmc2V0ID0gLW9m ZnNldDsKKwkgIGJyZWFrOworCisJZGVmYXVsdDoKKwkgIGdjY191bnJlYWNo YWJsZSAoKTsKKwl9CisgICAgfQorfQorDAorLyogR2l2ZW4gdGhlIF9Vbndp bmRfQ29udGV4dCBDT05URVhUIGZvciBhIHN0YWNrIGZyYW1lLCBsb29rIHVw IHRoZSBGREUgZm9yCisgICBpdHMgY2FsbGVyIGFuZCBkZWNvZGUgaXQgaW50 byBGUy4gIFRoaXMgZnVuY3Rpb24gYWxzbyBzZXRzIHRoZQorICAgYXJnc19z aXplIGFuZCBsc2RhIG1lbWJlcnMgb2YgQ09OVEVYVCwgYXMgdGhleSBhcmUg cmVhbGx5IGluZm9ybWF0aW9uCisgICBhYm91dCB0aGUgY2FsbGVyJ3MgZnJh bWUuICAqLworCitzdGF0aWMgX1Vud2luZF9SZWFzb25fQ29kZQordXdfZnJh bWVfc3RhdGVfZm9yIChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICpjb250ZXh0 LCBfVW53aW5kX0ZyYW1lU3RhdGUgKmZzKQoreworICBjb25zdCBzdHJ1Y3Qg ZHdhcmZfZmRlICpmZGU7CisgIGNvbnN0IHN0cnVjdCBkd2FyZl9jaWUgKmNp ZTsKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqYXVnLCAqaW5zbiwgKmVuZDsK KworICBtZW1zZXQgKGZzLCAwLCBzaXplb2YgKCpmcykpOworICBjb250ZXh0 LT5hcmdzX3NpemUgPSAwOworICBjb250ZXh0LT5sc2RhID0gMDsKKworICBp ZiAoY29udGV4dC0+cmEgPT0gMCkKKyAgICByZXR1cm4gX1VSQ19FTkRfT0Zf U1RBQ0s7CisKKyAgZmRlID0gX1Vud2luZF9GaW5kX0ZERSAoY29udGV4dC0+ cmEgKyBfVW53aW5kX0lzU2lnbmFsRnJhbWUgKGNvbnRleHQpIC0gMSwKKwkJ CSAgJmNvbnRleHQtPmJhc2VzKTsKKyAgaWYgKGZkZSA9PSBOVUxMKQorICAg IHsKKyNpZmRlZiBNRF9GQUxMQkFDS19GUkFNRV9TVEFURV9GT1IKKyAgICAg IC8qIENvdWxkbid0IGZpbmQgZnJhbWUgdW53aW5kIGluZm8gZm9yIHRoaXMg ZnVuY3Rpb24uICBUcnkgYQorCSB0YXJnZXQtc3BlY2lmaWMgZmFsbGJhY2sg bWVjaGFuaXNtLiAgVGhpcyB3aWxsIG5lY2Vzc2FyaWx5CisJIG5vdCBwcm92 aWRlIGEgcGVyc29uYWxpdHkgcm91dGluZSBvciBMU0RBLiAgKi8KKyAgICAg IHJldHVybiBNRF9GQUxMQkFDS19GUkFNRV9TVEFURV9GT1IgKGNvbnRleHQs IGZzKTsKKyNlbHNlCisgICAgICByZXR1cm4gX1VSQ19FTkRfT0ZfU1RBQ0s7 CisjZW5kaWYKKyAgICB9CisKKyAgZnMtPnBjID0gY29udGV4dC0+YmFzZXMu ZnVuYzsKKworICBjaWUgPSBnZXRfY2llIChmZGUpOworICBpbnNuID0gZXh0 cmFjdF9jaWVfaW5mbyAoY2llLCBjb250ZXh0LCBmcyk7CisgIGlmIChpbnNu ID09IE5VTEwpCisgICAgLyogQ0lFIGNvbnRhaW5lZCB1bmtub3duIGF1Z21l bnRhdGlvbi4gICovCisgICAgcmV0dXJuIF9VUkNfRkFUQUxfUEhBU0UxX0VS Uk9SOworCisgIC8qIEZpcnN0IGRlY29kZSBhbGwgdGhlIGluc25zIGluIHRo ZSBDSUUuICAqLworICBlbmQgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBu ZXh0X2ZkZSAoKGNvbnN0IHN0cnVjdCBkd2FyZl9mZGUgKikgY2llKTsKKyAg ZXhlY3V0ZV9jZmFfcHJvZ3JhbSAoaW5zbiwgZW5kLCBjb250ZXh0LCBmcyk7 CisKKyAgLyogTG9jYXRlIGF1Z21lbnRhdGlvbiBmb3IgdGhlIGZkZS4gICov CisgIGF1ZyA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIGZkZSArIHNpemVv ZiAoKmZkZSk7CisgIGF1ZyArPSAyICogc2l6ZV9vZl9lbmNvZGVkX3ZhbHVl IChmcy0+ZmRlX2VuY29kaW5nKTsKKyAgaW5zbiA9IE5VTEw7CisgIGlmIChm cy0+c2F3X3opCisgICAgeworICAgICAgX3VsZWIxMjhfdCBpOworICAgICAg YXVnID0gcmVhZF91bGViMTI4IChhdWcsICZpKTsKKyAgICAgIGluc24gPSBh dWcgKyBpOworICAgIH0KKyAgaWYgKGZzLT5sc2RhX2VuY29kaW5nICE9IERX X0VIX1BFX29taXQpCisgICAgeworICAgICAgX1Vud2luZF9QdHIgbHNkYTsK KworICAgICAgYXVnID0gcmVhZF9lbmNvZGVkX3ZhbHVlIChjb250ZXh0LCBm cy0+bHNkYV9lbmNvZGluZywgYXVnLCAmbHNkYSk7CisgICAgICBjb250ZXh0 LT5sc2RhID0gKHZvaWQgKikgbHNkYTsKKyAgICB9CisKKyAgLyogVGhlbiB0 aGUgaW5zbnMgaW4gdGhlIEZERSB1cCB0byBvdXIgdGFyZ2V0IFBDLiAgKi8K KyAgaWYgKGluc24gPT0gTlVMTCkKKyAgICBpbnNuID0gYXVnOworICBlbmQg PSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBuZXh0X2ZkZSAoZmRlKTsKKyAg ZXhlY3V0ZV9jZmFfcHJvZ3JhbSAoaW5zbiwgZW5kLCBjb250ZXh0LCBmcyk7 CisKKyAgcmV0dXJuIF9VUkNfTk9fUkVBU09OOworfQorDAordHlwZWRlZiBz dHJ1Y3QgZnJhbWVfc3RhdGUKK3sKKyAgdm9pZCAqY2ZhOworICB2b2lkICpl aF9wdHI7CisgIGxvbmcgY2ZhX29mZnNldDsKKyAgbG9uZyBhcmdzX3NpemU7 CisgIGxvbmcgcmVnX29yX29mZnNldFtQUkVfR0NDM19EV0FSRl9GUkFNRV9S RUdJU1RFUlMrMV07CisgIHVuc2lnbmVkIHNob3J0IGNmYV9yZWc7CisgIHVu c2lnbmVkIHNob3J0IHJldGFkZHJfY29sdW1uOworICBjaGFyIHNhdmVkW1BS RV9HQ0MzX0RXQVJGX0ZSQU1FX1JFR0lTVEVSUysxXTsKK30gZnJhbWVfc3Rh dGU7CisKK3N0cnVjdCBmcmFtZV9zdGF0ZSAqIF9fZnJhbWVfc3RhdGVfZm9y ICh2b2lkICosIHN0cnVjdCBmcmFtZV9zdGF0ZSAqKTsKKworLyogQ2FsbGVk IGZyb20gcHJlLUcrKyAzLjAgX190aHJvdyB0byBmaW5kIHRoZSByZWdpc3Rl cnMgdG8gcmVzdG9yZSBmb3IKKyAgIGEgZ2l2ZW4gUENfVEFSR0VULiAgVGhl IGNhbGxlciBzaG91bGQgYWxsb2NhdGUgYSBsb2NhbCB2YXJpYWJsZSBvZgor ICAgYHN0cnVjdCBmcmFtZV9zdGF0ZScgYW5kIHBhc3MgaXRzIGFkZHJlc3Mg dG8gU1RBVEVfSU4uICAqLworCitzdHJ1Y3QgZnJhbWVfc3RhdGUgKgorX19m cmFtZV9zdGF0ZV9mb3IgKHZvaWQgKnBjX3RhcmdldCwgc3RydWN0IGZyYW1l X3N0YXRlICpzdGF0ZV9pbikKK3sKKyAgc3RydWN0IF9VbndpbmRfQ29udGV4 dCBjb250ZXh0OworICBfVW53aW5kX0ZyYW1lU3RhdGUgZnM7CisgIGludCBy ZWc7CisKKyAgbWVtc2V0ICgmY29udGV4dCwgMCwgc2l6ZW9mIChzdHJ1Y3Qg X1Vud2luZF9Db250ZXh0KSk7CisgIGlmICghQVNTVU1FX0VYVEVOREVEX1VO V0lORF9DT05URVhUKQorICAgIGNvbnRleHQuZmxhZ3MgPSBFWFRFTkRFRF9D T05URVhUX0JJVDsKKyAgY29udGV4dC5yYSA9IHBjX3RhcmdldCArIDE7CisK KyAgaWYgKHV3X2ZyYW1lX3N0YXRlX2ZvciAoJmNvbnRleHQsICZmcykgIT0g X1VSQ19OT19SRUFTT04pCisgICAgcmV0dXJuIDA7CisKKyAgLyogV2UgaGF2 ZSBubyB3YXkgdG8gcGFzcyBhIGxvY2F0aW9uIGV4cHJlc3Npb24gZm9yIHRo ZSBDRkEgdG8gb3VyCisgICAgIGNhbGxlci4gIEl0IHdvdWxkbid0IHVuZGVy c3RhbmQgaXQgYW55d2F5LiAgKi8KKyAgaWYgKGZzLnJlZ3MuY2ZhX2hvdyA9 PSBDRkFfRVhQKQorICAgIHJldHVybiAwOworCisgIGZvciAocmVnID0gMDsg cmVnIDwgUFJFX0dDQzNfRFdBUkZfRlJBTUVfUkVHSVNURVJTICsgMTsgcmVn KyspCisgICAgeworICAgICAgc3RhdGVfaW4tPnNhdmVkW3JlZ10gPSBmcy5y ZWdzLnJlZ1tyZWddLmhvdzsKKyAgICAgIHN3aXRjaCAoc3RhdGVfaW4tPnNh dmVkW3JlZ10pCisJeworCWNhc2UgUkVHX1NBVkVEX1JFRzoKKwkgIHN0YXRl X2luLT5yZWdfb3Jfb2Zmc2V0W3JlZ10gPSBmcy5yZWdzLnJlZ1tyZWddLmxv Yy5yZWc7CisJICBicmVhazsKKwljYXNlIFJFR19TQVZFRF9PRkZTRVQ6CisJ ICBzdGF0ZV9pbi0+cmVnX29yX29mZnNldFtyZWddID0gZnMucmVncy5yZWdb cmVnXS5sb2Mub2Zmc2V0OworCSAgYnJlYWs7CisJZGVmYXVsdDoKKwkgIHN0 YXRlX2luLT5yZWdfb3Jfb2Zmc2V0W3JlZ10gPSAwOworCSAgYnJlYWs7CisJ fQorICAgIH0KKworICBzdGF0ZV9pbi0+Y2ZhX29mZnNldCA9IGZzLnJlZ3Mu Y2ZhX29mZnNldDsKKyAgc3RhdGVfaW4tPmNmYV9yZWcgPSBmcy5yZWdzLmNm YV9yZWc7CisgIHN0YXRlX2luLT5yZXRhZGRyX2NvbHVtbiA9IGZzLnJldGFk ZHJfY29sdW1uOworICBzdGF0ZV9pbi0+YXJnc19zaXplID0gY29udGV4dC5h cmdzX3NpemU7CisgIHN0YXRlX2luLT5laF9wdHIgPSBmcy5laF9wdHI7CisK KyAgcmV0dXJuIHN0YXRlX2luOworfQorDAordHlwZWRlZiB1bmlvbiB7IF9V bndpbmRfUHRyIHB0cjsgX1Vud2luZF9Xb3JkIHdvcmQ7IH0gX1Vud2luZF9T cFRtcDsKKworc3RhdGljIGlubGluZSB2b2lkCitfVW53aW5kX1NldFNwQ29s dW1uIChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICpjb250ZXh0LCB2b2lkICpj ZmEsCisJCSAgICAgX1Vud2luZF9TcFRtcCAqdG1wX3NwKQoreworICBpbnQg c2l6ZSA9IGR3YXJmX3JlZ19zaXplX3RhYmxlW19fYnVpbHRpbl9kd2FyZl9z cF9jb2x1bW4gKCldOworCisgIGlmIChzaXplID09IHNpemVvZihfVW53aW5k X1B0cikpCisgICAgdG1wX3NwLT5wdHIgPSAoX1Vud2luZF9QdHIpIGNmYTsK KyAgZWxzZQorICAgIHsKKyAgICAgIGdjY19hc3NlcnQgKHNpemUgPT0gc2l6 ZW9mKF9VbndpbmRfV29yZCkpOworICAgICAgdG1wX3NwLT53b3JkID0gKF9V bndpbmRfUHRyKSBjZmE7CisgICAgfQorICBfVW53aW5kX1NldEdSUHRyIChj b250ZXh0LCBfX2J1aWx0aW5fZHdhcmZfc3BfY29sdW1uICgpLCB0bXBfc3Ap OworfQorCitzdGF0aWMgdm9pZAordXdfdXBkYXRlX2NvbnRleHRfMSAoc3Ry dWN0IF9VbndpbmRfQ29udGV4dCAqY29udGV4dCwgX1Vud2luZF9GcmFtZVN0 YXRlICpmcykKK3sKKyAgc3RydWN0IF9VbndpbmRfQ29udGV4dCBvcmlnX2Nv bnRleHQgPSAqY29udGV4dDsKKyAgdm9pZCAqY2ZhOworICBsb25nIGk7CisK KyNpZmRlZiBFSF9SRVRVUk5fU1RBQ0tBREpfUlRYCisgIC8qIFNwZWNpYWwg aGFuZGxpbmcgaGVyZTogTWFueSBtYWNoaW5lcyBkbyBub3QgdXNlIGEgZnJh bWUgcG9pbnRlciwKKyAgICAgYW5kIHRyYWNrIHRoZSBDRkEgb25seSB0aHJv dWdoIG9mZnNldHMgZnJvbSB0aGUgc3RhY2sgcG9pbnRlciBmcm9tCisgICAg IG9uZSBmcmFtZSB0byB0aGUgbmV4dC4gIEluIHRoaXMgY2FzZSwgdGhlIHN0 YWNrIHBvaW50ZXIgaXMgbmV2ZXIKKyAgICAgc3RvcmVkLCBzbyBpdCBoYXMg bm8gc2F2ZWQgYWRkcmVzcyBpbiB0aGUgY29udGV4dC4gIFdoYXQgd2UgZG8K KyAgICAgaGF2ZSBpcyB0aGUgQ0ZBIGZyb20gdGhlIHByZXZpb3VzIHN0YWNr IGZyYW1lLgorCisgICAgIEluIHZlcnkgc3BlY2lhbCBzaXR1YXRpb25zIChz dWNoIGFzIHVud2luZCBpbmZvIGZvciBzaWduYWwgcmV0dXJuKSwKKyAgICAg dGhlcmUgbWF5IGJlIGxvY2F0aW9uIGV4cHJlc3Npb25zIHRoYXQgdXNlIHRo ZSBzdGFjayBwb2ludGVyIGFzIHdlbGwuCisKKyAgICAgRG8gdGhpcyBjb25k aXRpb25hbGx5IGZvciBvbmUgZnJhbWUuICBUaGlzIGFsbG93cyB0aGUgdW53 aW5kIGluZm8KKyAgICAgZm9yIG9uZSBmcmFtZSB0byBzYXZlIGEgY29weSBv ZiB0aGUgc3RhY2sgcG9pbnRlciBmcm9tIHRoZSBwcmV2aW91cworICAgICBm cmFtZSwgYW5kIGJlIGFibGUgdG8gdXNlIG11Y2ggZWFzaWVyIENGQSBtZWNo YW5pc21zIHRvIGRvIGl0LgorICAgICBBbHdheXMgemFwIHRoZSBzYXZlZCBz dGFjayBwb2ludGVyIHZhbHVlIGZvciB0aGUgbmV4dCBmcmFtZTsgY2Fycnlp bmcKKyAgICAgdGhlIHZhbHVlIG92ZXIgZnJvbSBvbmUgZnJhbWUgdG8gYW5v dGhlciBkb2Vzbid0IG1ha2Ugc2Vuc2UuICAqLworCisgIF9VbndpbmRfU3BU bXAgdG1wX3NwOworCisgIGlmICghX1Vud2luZF9HZXRHUlB0ciAoJm9yaWdf Y29udGV4dCwgX19idWlsdGluX2R3YXJmX3NwX2NvbHVtbiAoKSkpCisgICAg X1Vud2luZF9TZXRTcENvbHVtbiAoJm9yaWdfY29udGV4dCwgY29udGV4dC0+ Y2ZhLCAmdG1wX3NwKTsKKyAgX1Vud2luZF9TZXRHUlB0ciAoY29udGV4dCwg X19idWlsdGluX2R3YXJmX3NwX2NvbHVtbiAoKSwgTlVMTCk7CisjZW5kaWYK KworICAvKiBDb21wdXRlIHRoaXMgZnJhbWUncyBDRkEuICAqLworICBzd2l0 Y2ggKGZzLT5yZWdzLmNmYV9ob3cpCisgICAgeworICAgIGNhc2UgQ0ZBX1JF R19PRkZTRVQ6CisgICAgICBjZmEgPSBfVW53aW5kX0dldFB0ciAoJm9yaWdf Y29udGV4dCwgZnMtPnJlZ3MuY2ZhX3JlZyk7CisgICAgICBjZmEgKz0gZnMt PnJlZ3MuY2ZhX29mZnNldDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBD RkFfRVhQOgorICAgICAgeworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmV4cCA9 IGZzLT5yZWdzLmNmYV9leHA7CisJX3VsZWIxMjhfdCBsZW47CisKKwlleHAg PSByZWFkX3VsZWIxMjggKGV4cCwgJmxlbik7CisJY2ZhID0gKHZvaWQgKikg KF9VbndpbmRfUHRyKQorCSAgZXhlY3V0ZV9zdGFja19vcCAoZXhwLCBleHAg KyBsZW4sICZvcmlnX2NvbnRleHQsIDApOworCWJyZWFrOworICAgICAgfQor CisgICAgZGVmYXVsdDoKKyAgICAgIGdjY191bnJlYWNoYWJsZSAoKTsKKyAg ICB9CisgIGNvbnRleHQtPmNmYSA9IGNmYTsKKworICAvKiBDb21wdXRlIHRo ZSBhZGRyZXNzZXMgb2YgYWxsIHJlZ2lzdGVycyBzYXZlZCBpbiB0aGlzIGZy YW1lLiAgKi8KKyAgZm9yIChpID0gMDsgaSA8IERXQVJGX0ZSQU1FX1JFR0lT VEVSUyArIDE7ICsraSkKKyAgICBzd2l0Y2ggKGZzLT5yZWdzLnJlZ1tpXS5o b3cpCisgICAgICB7CisgICAgICBjYXNlIFJFR19VTlNBVkVEOgorICAgICAg Y2FzZSBSRUdfVU5ERUZJTkVEOgorCWJyZWFrOworCisgICAgICBjYXNlIFJF R19TQVZFRF9PRkZTRVQ6CisJX1Vud2luZF9TZXRHUlB0ciAoY29udGV4dCwg aSwKKwkJCSAgKHZvaWQgKikgKGNmYSArIGZzLT5yZWdzLnJlZ1tpXS5sb2Mu b2Zmc2V0KSk7CisJYnJlYWs7CisKKyAgICAgIGNhc2UgUkVHX1NBVkVEX1JF RzoKKwlpZiAoX1Vud2luZF9HUkJ5VmFsdWUgKCZvcmlnX2NvbnRleHQsIGZz LT5yZWdzLnJlZ1tpXS5sb2MucmVnKSkKKwkgIF9VbndpbmRfU2V0R1JWYWx1 ZSAoY29udGV4dCwgaSwKKwkJCSAgICAgIF9VbndpbmRfR2V0R1IgKCZvcmln X2NvbnRleHQsCisJCQkJCSAgICAgZnMtPnJlZ3MucmVnW2ldLmxvYy5yZWcp KTsKKwllbHNlCisJICBfVW53aW5kX1NldEdSUHRyIChjb250ZXh0LCBpLAor CQkJICAgIF9VbndpbmRfR2V0R1JQdHIgKCZvcmlnX2NvbnRleHQsCisJCQkJ CSAgICAgIGZzLT5yZWdzLnJlZ1tpXS5sb2MucmVnKSk7CisJYnJlYWs7CisK KyAgICAgIGNhc2UgUkVHX1NBVkVEX0VYUDoKKwl7CisJICBjb25zdCB1bnNp Z25lZCBjaGFyICpleHAgPSBmcy0+cmVncy5yZWdbaV0ubG9jLmV4cDsKKwkg IF91bGViMTI4X3QgbGVuOworCSAgX1Vud2luZF9QdHIgdmFsOworCisJICBl eHAgPSByZWFkX3VsZWIxMjggKGV4cCwgJmxlbik7CisJICB2YWwgPSBleGVj dXRlX3N0YWNrX29wIChleHAsIGV4cCArIGxlbiwgJm9yaWdfY29udGV4dCwK KwkJCQkgIChfVW53aW5kX1B0cikgY2ZhKTsKKwkgIF9VbndpbmRfU2V0R1JQ dHIgKGNvbnRleHQsIGksICh2b2lkICopIHZhbCk7CisJfQorCWJyZWFrOwor CisgICAgICBjYXNlIFJFR19TQVZFRF9WQUxfT0ZGU0VUOgorCV9VbndpbmRf U2V0R1JWYWx1ZSAoY29udGV4dCwgaSwKKwkJCSAgICAoX1Vud2luZF9JbnRl cm5hbF9QdHIpCisJCQkgICAgKGNmYSArIGZzLT5yZWdzLnJlZ1tpXS5sb2Mu b2Zmc2V0KSk7CisJYnJlYWs7CisKKyAgICAgIGNhc2UgUkVHX1NBVkVEX1ZB TF9FWFA6CisJeworCSAgY29uc3QgdW5zaWduZWQgY2hhciAqZXhwID0gZnMt PnJlZ3MucmVnW2ldLmxvYy5leHA7CisJICBfdWxlYjEyOF90IGxlbjsKKwkg IF9VbndpbmRfUHRyIHZhbDsKKworCSAgZXhwID0gcmVhZF91bGViMTI4IChl eHAsICZsZW4pOworCSAgdmFsID0gZXhlY3V0ZV9zdGFja19vcCAoZXhwLCBl eHAgKyBsZW4sICZvcmlnX2NvbnRleHQsCisJCQkJICAoX1Vud2luZF9QdHIp IGNmYSk7CisJICBfVW53aW5kX1NldEdSVmFsdWUgKGNvbnRleHQsIGksIHZh bCk7CisJfQorCWJyZWFrOworICAgICAgfQorCisgIF9VbndpbmRfU2V0U2ln bmFsRnJhbWUgKGNvbnRleHQsIGZzLT5zaWduYWxfZnJhbWUpOworCisjaWZk ZWYgTURfRlJPQl9VUERBVEVfQ09OVEVYVAorICBNRF9GUk9CX1VQREFURV9D T05URVhUIChjb250ZXh0LCBmcyk7CisjZW5kaWYKK30KKworLyogQ09OVEVY VCBkZXNjcmliZXMgdGhlIHVud2luZCBzdGF0ZSBmb3IgYSBmcmFtZSwgYW5k IEZTIGRlc2NyaWJlcyB0aGUgRkRFCisgICBvZiBpdHMgY2FsbGVyLiAgVXBk YXRlIENPTlRFWFQgdG8gcmVmZXIgdG8gdGhlIGNhbGxlciBhcyB3ZWxsLiAg Tm90ZQorICAgdGhhdCB0aGUgYXJnc19zaXplIGFuZCBsc2RhIG1lbWJlcnMg YXJlIG5vdCB1cGRhdGVkIGhlcmUsIGJ1dCBsYXRlciBpbgorICAgdXdfZnJh bWVfc3RhdGVfZm9yLiAgKi8KKworc3RhdGljIHZvaWQKK3V3X3VwZGF0ZV9j b250ZXh0IChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICpjb250ZXh0LCBfVW53 aW5kX0ZyYW1lU3RhdGUgKmZzKQoreworICB1d191cGRhdGVfY29udGV4dF8x IChjb250ZXh0LCBmcyk7CisKKyAgLyogSW4gZ2VuZXJhbCB0aGlzIHVud2lu ZGVyIGRvZXNuJ3QgbWFrZSBhbnkgZGlzdGluY3Rpb24gYmV0d2VlbgorICAg ICB1bmRlZmluZWQgYW5kIHNhbWVfdmFsdWUgcnVsZS4gIENhbGwtc2F2ZWQg cmVnaXN0ZXJzIGFyZSBhc3N1bWVkCisgICAgIHRvIGhhdmUgc2FtZV92YWx1 ZSBydWxlIGJ5IGRlZmF1bHQgYW5kIGV4cGxpY2l0IHVuZGVmaW5lZAorICAg ICBydWxlIGlzIGhhbmRsZWQgbGlrZSBzYW1lX3ZhbHVlLiAgVGhlIG9ubHkg ZXhjZXB0aW9uIGlzCisgICAgIERXX0NGQV91bmRlZmluZWQgb24gcmV0YWRk cl9jb2x1bW4gd2hpY2ggaXMgc3VwcG9zZWQgdG8KKyAgICAgbWFyayBvdXRl cm1vc3QgZnJhbWUgaW4gRFdBUkYgMy4gICovCisgIGlmIChmcy0+cmVncy5y ZWdbRFdBUkZfUkVHX1RPX1VOV0lORF9DT0xVTU4gKGZzLT5yZXRhZGRyX2Nv bHVtbildLmhvdworICAgICAgPT0gUkVHX1VOREVGSU5FRCkKKyAgICAvKiB1 d19mcmFtZV9zdGF0ZV9mb3IgdXNlcyBjb250ZXh0LT5yYSA9PSAwIGNoZWNr IHRvIGZpbmQgb3V0ZXJtb3N0CisgICAgICAgc3RhY2sgZnJhbWUuICAqLwor ICAgIGNvbnRleHQtPnJhID0gMDsKKyAgZWxzZQorICAgIC8qIENvbXB1dGUg dGhlIHJldHVybiBhZGRyZXNzIG5vdywgc2luY2UgdGhlIHJldHVybiBhZGRy ZXNzIGNvbHVtbgorICAgICAgIGNhbiBjaGFuZ2UgZnJvbSBmcmFtZSB0byBm cmFtZS4gICovCisgICAgY29udGV4dC0+cmEgPSBfX2J1aWx0aW5fZXh0cmFj dF9yZXR1cm5fYWRkcgorICAgICAgKF9VbndpbmRfR2V0UHRyIChjb250ZXh0 LCBmcy0+cmV0YWRkcl9jb2x1bW4pKTsKKyNpZiBkZWZpbmVkKCBfX0NSMTZD X18gKQorICBjb250ZXh0LT5yYSA9ICh2b2lkKikoICggKHVuc2lnbmVkKWNv bnRleHQtPnJhICkgPDwgMSApIDsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9p ZAordXdfYWR2YW5jZV9jb250ZXh0IChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0 ICpjb250ZXh0LCBfVW53aW5kX0ZyYW1lU3RhdGUgKmZzKQoreworICB1d191 cGRhdGVfY29udGV4dCAoY29udGV4dCwgZnMpOworfQorDAorLyogRmlsbCBp biBDT05URVhUIGZvciB0b3Atb2Ytc3RhY2suICBUaGUgb25seSB2YWxpZCBy ZWdpc3RlcnMgYXQgdGhpcworICAgbGV2ZWwgd2lsbCBiZSB0aGUgcmV0dXJu IGFkZHJlc3MgYW5kIHRoZSBDRkEuICAqLworCisjZGVmaW5lIHV3X2luaXRf Y29udGV4dChDT05URVhUKQkJCQkJICAgXAorICBkbwkJCQkJCQkJCSAgIFwK KyAgICB7CQkJCQkJCQkJICAgXAorICAgICAgLyogRG8gYW55IG5lY2Vzc2Fy eSBpbml0aWFsaXphdGlvbiB0byBhY2Nlc3MgYXJiaXRyYXJ5IHN0YWNrIGZy YW1lcy4gXAorCSBPbiB0aGUgU1BBUkMsIHRoaXMgbWVhbnMgZmx1c2hpbmcg dGhlIHJlZ2lzdGVyIHdpbmRvd3MuICAqLwkgICBcCisgICAgICBfX2J1aWx0 aW5fdW53aW5kX2luaXQgKCk7CQkJCQkJICAgXAorICAgICAgdXdfaW5pdF9j b250ZXh0XzEgKENPTlRFWFQsIF9fYnVpbHRpbl9kd2FyZl9jZmEgKCksCQkg ICBcCisJCQkgX19idWlsdGluX3JldHVybl9hZGRyZXNzICgwKSk7CQkJICAg XAorICAgIH0JCQkJCQkJCQkgICBcCisgIHdoaWxlICgwKQorCitzdGF0aWMg aW5saW5lIHZvaWQKK2luaXRfZHdhcmZfcmVnX3NpemVfdGFibGUgKHZvaWQp Cit7CisgIF9fYnVpbHRpbl9pbml0X2R3YXJmX3JlZ19zaXplX3RhYmxlIChk d2FyZl9yZWdfc2l6ZV90YWJsZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fYXR0 cmlidXRlX18oKG5vaW5saW5lKSkKK3V3X2luaXRfY29udGV4dF8xIChzdHJ1 Y3QgX1Vud2luZF9Db250ZXh0ICpjb250ZXh0LAorCQkgICB2b2lkICpvdXRl cl9jZmEsIHZvaWQgKm91dGVyX3JhKQoreworICB2b2lkICpyYSA9IF9fYnVp bHRpbl9leHRyYWN0X3JldHVybl9hZGRyIChfX2J1aWx0aW5fcmV0dXJuX2Fk ZHJlc3MgKDApKTsKKyAgX1Vud2luZF9GcmFtZVN0YXRlIGZzOworICBfVW53 aW5kX1NwVG1wIHNwX3Nsb3Q7CisgIF9VbndpbmRfUmVhc29uX0NvZGUgY29k ZTsKKworICBtZW1zZXQgKGNvbnRleHQsIDAsIHNpemVvZiAoc3RydWN0IF9V bndpbmRfQ29udGV4dCkpOworICBjb250ZXh0LT5yYSA9IHJhOworICBpZiAo IUFTU1VNRV9FWFRFTkRFRF9VTldJTkRfQ09OVEVYVCkKKyAgICBjb250ZXh0 LT5mbGFncyA9IEVYVEVOREVEX0NPTlRFWFRfQklUOworCisgIGNvZGUgPSB1 d19mcmFtZV9zdGF0ZV9mb3IgKGNvbnRleHQsICZmcyk7CisgIGdjY19hc3Nl cnQgKGNvZGUgPT0gX1VSQ19OT19SRUFTT04pOworCisjaWYgX19HVEhSRUFE UworICB7CisgICAgc3RhdGljIF9fZ3RocmVhZF9vbmNlX3Qgb25jZV9yZWdz aXplcyA9IF9fR1RIUkVBRF9PTkNFX0lOSVQ7CisgICAgaWYgKF9fZ3RocmVh ZF9vbmNlICgmb25jZV9yZWdzaXplcywgaW5pdF9kd2FyZl9yZWdfc2l6ZV90 YWJsZSkgIT0gMAorCSYmIGR3YXJmX3JlZ19zaXplX3RhYmxlWzBdID09IDAp CisgICAgICBpbml0X2R3YXJmX3JlZ19zaXplX3RhYmxlICgpOworICB9Cisj ZWxzZQorICBpZiAoZHdhcmZfcmVnX3NpemVfdGFibGVbMF0gPT0gMCkKKyAg ICBpbml0X2R3YXJmX3JlZ19zaXplX3RhYmxlICgpOworI2VuZGlmCisKKyAg LyogRm9yY2UgdGhlIGZyYW1lIHN0YXRlIHRvIHVzZSB0aGUga25vd24gY2Zh IHZhbHVlLiAgKi8KKyAgX1Vud2luZF9TZXRTcENvbHVtbiAoY29udGV4dCwg b3V0ZXJfY2ZhLCAmc3Bfc2xvdCk7CisgIGZzLnJlZ3MuY2ZhX2hvdyA9IENG QV9SRUdfT0ZGU0VUOworICBmcy5yZWdzLmNmYV9yZWcgPSBfX2J1aWx0aW5f ZHdhcmZfc3BfY29sdW1uICgpOworI2lmICFkZWZpbmVkKCBfX0NSMTZDX18g KQorICBmcy5yZWdzLmNmYV9vZmZzZXQgPSAwOworI2Vsc2UKKyAgZnMucmVn cy5jZmFfb2Zmc2V0IC09IGNvbnRleHQtPmFyZ3Nfc2l6ZSA7CisjZW5kaWYK KworICB1d191cGRhdGVfY29udGV4dF8xIChjb250ZXh0LCAmZnMpOworCisg IC8qIElmIHRoZSByZXR1cm4gYWRkcmVzcyBjb2x1bW4gd2FzIHNhdmVkIGlu IGEgcmVnaXN0ZXIgaW4gdGhlCisgICAgIGluaXRpYWxpemF0aW9uIGNvbnRl eHQsIHRoZW4gd2UgY2FuJ3Qgc2VlIGl0IGluIHRoZSBnaXZlbgorICAgICBj YWxsIGZyYW1lIGRhdGEuICBTbyBoYXZlIHRoZSBpbml0aWFsaXphdGlvbiBj b250ZXh0IHRlbGwgdXMuICAqLworICBjb250ZXh0LT5yYSA9IF9fYnVpbHRp bl9leHRyYWN0X3JldHVybl9hZGRyIChvdXRlcl9yYSk7Cit9CisKK3N0YXRp YyB2b2lkIF9VbndpbmRfRGVidWdIb29rICh2b2lkICosIHZvaWQgKikKKyAg X19hdHRyaWJ1dGVfXyAoKF9fbm9pbmxpbmVfXywgX191c2VkX18sIF9fbm9j bG9uZV9fKSk7CisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGR1cmlu ZyB1bndpbmRpbmcuICBJdCBpcyBpbnRlbmRlZCBhcyBhIGhvb2sKKyAgIGZv ciBhIGRlYnVnZ2VyIHRvIGludGVyY2VwdCBleGNlcHRpb25zLiAgQ0ZBIGlz IHRoZSBDRkEgb2YgdGhlCisgICB0YXJnZXQgZnJhbWUuICBIQU5ETEVSIGlz IHRoZSBQQyB0byB3aGljaCBjb250cm9sIHdpbGwgYmUKKyAgIHRyYW5zZmVy cmVkLiAgKi8KK3N0YXRpYyB2b2lkCitfVW53aW5kX0RlYnVnSG9vayAodm9p ZCAqY2ZhIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSksCisJCSAgIHZv aWQgKmhhbmRsZXIgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKSkKK3sK KyAgLyogV2Ugb25seSB3YW50IHRvIHVzZSBzdGFwIHByb2JlcyBzdGFydGlu ZyB3aXRoIHYzLiAgRWFybGllcgorICAgICB2ZXJzaW9ucyBhZGRlZCB0b28g bXVjaCBzdGFydHVwIGNvc3QuICAqLworI2lmIGRlZmluZWQgKEhBVkVfU1lT X1NEVF9IKSAmJiBkZWZpbmVkIChTVEFQX1BST0JFMikgJiYgX1NEVF9OT1RF X1RZUEUgPj0gMworICBTVEFQX1BST0JFMiAobGliZ2NjLCB1bndpbmQsIGNm YSwgaGFuZGxlcik7CisjZWxzZQorICBhc20gKCIiKTsKKyNlbmRpZgorfQor CisvKiBJbnN0YWxsIFRBUkdFVCBpbnRvIENVUlJFTlQgc28gdGhhdCB3ZSBj YW4gcmV0dXJuIHRvIGl0LiAgVGhpcyBpcyBhCisgICBtYWNybyBiZWNhdXNl IF9fYnVpbHRpbl9laF9yZXR1cm4gbXVzdCBiZSBpbnZva2VkIGluIHRoZSBj b250ZXh0IG9mCisgICBvdXIgY2FsbGVyLiAgKi8KKyNpZiBkZWZpbmVkKCBf X0NSMTZDX18gKQorCisjZGVmaW5lIHV3X2luc3RhbGxfY29udGV4dChDVVJS RU5ULCBUQVJHRVQpCQkJCVwKKyAgZG8JCQkJCQkJCQlcCisgICAgewkJCQkJ CQkJCVwKKyAgICAgIGxvbmcgb2Zmc2V0ID0gdXdfaW5zdGFsbF9jb250ZXh0 XzEgKChDVVJSRU5UKSwgKFRBUkdFVCkpOwkJXAorICAgICAgdm9pZCAqaGFu ZGxlciA9IF9fYnVpbHRpbl9mcm9iX3JldHVybl9hZGRyICgoVEFSR0VUKS0+ cmEpOwlcCisgICAgICBoYW5kbGVyID0gKHZvaWQqKSggKCAodW5zaWduZWQp aGFuZGxlciApID4+IDEgKSA7ICAgICAgICAgICAgICAgICBcCisgICAgICBf VW53aW5kX0RlYnVnSG9vayAoKFRBUkdFVCktPmNmYSwgaGFuZGxlcik7CQkJ XAorICAgICAgX19idWlsdGluX2VoX3JldHVybiAob2Zmc2V0LCBoYW5kbGVy KTsJCQkJXAorICAgIH0JCQkJCQkJCQlcCisgIHdoaWxlICgwKQorI2Vsc2UK KyNkZWZpbmUgdXdfaW5zdGFsbF9jb250ZXh0KENVUlJFTlQsIFRBUkdFVCkg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZG8gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KyAgICAgIGxvbmcgb2Zmc2V0ID0gdXdfaW5zdGFsbF9jb250ZXh0XzEgKChD VVJSRU5UKSwgKFRBUkdFVCkpOyAgICAgICAgIFwKKyAgICAgIHZvaWQgKmhh bmRsZXIgPSBfX2J1aWx0aW5fZnJvYl9yZXR1cm5fYWRkciAoKFRBUkdFVCkt PnJhKTsgICAgICAgIFwKKyAgICAgIF9VbndpbmRfRGVidWdIb29rICgoVEFS R0VUKS0+Y2ZhLCBoYW5kbGVyKTsgICAgICAgICAgICAgICAgICAgICAgIFwK KyAgICAgIF9fYnVpbHRpbl9laF9yZXR1cm4gKG9mZnNldCwgaGFuZGxlcik7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyAgd2hpbGUgKDApCisjZW5kaWYgIC8qIF9fQ1Ix NkNfXyAqLworCitzdGF0aWMgbG9uZwordXdfaW5zdGFsbF9jb250ZXh0XzEg KHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKmN1cnJlbnQsCisJCSAgICAgIHN0 cnVjdCBfVW53aW5kX0NvbnRleHQgKnRhcmdldCkKK3sKKyAgbG9uZyBpOwor ICBfVW53aW5kX1NwVG1wIHNwX3Nsb3Q7CisKKyAgLyogSWYgdGhlIHRhcmdl dCBmcmFtZSBkb2VzIG5vdCBoYXZlIGEgc2F2ZWQgc3RhY2sgcG9pbnRlciwK KyAgICAgdGhlbiBzZXQgdXAgdGhlIHRhcmdldCdzIENGQS4gICovCisgIGlm ICghX1Vud2luZF9HZXRHUlB0ciAodGFyZ2V0LCBfX2J1aWx0aW5fZHdhcmZf c3BfY29sdW1uICgpKSkKKyAgICBfVW53aW5kX1NldFNwQ29sdW1uICh0YXJn ZXQsIHRhcmdldC0+Y2ZhLCAmc3Bfc2xvdCk7CisKKyAgZm9yIChpID0gMDsg aSA8IERXQVJGX0ZSQU1FX1JFR0lTVEVSUzsgKytpKQorICAgIHsKKyAgICAg IHZvaWQgKmMgPSAodm9pZCAqKSAoX1Vud2luZF9JbnRlcm5hbF9QdHIpIGN1 cnJlbnQtPnJlZ1tpXTsKKyAgICAgIHZvaWQgKnQgPSAodm9pZCAqKSAoX1Vu d2luZF9JbnRlcm5hbF9QdHIpdGFyZ2V0LT5yZWdbaV07CisKKyAgICAgIGdj Y19hc3NlcnQgKGN1cnJlbnQtPmJ5X3ZhbHVlW2ldID09IDApOworICAgICAg aWYgKHRhcmdldC0+YnlfdmFsdWVbaV0gJiYgYykKKwl7CisJICBfVW53aW5k X1dvcmQgdzsKKwkgIF9VbndpbmRfUHRyIHA7CisJICBpZiAoZHdhcmZfcmVn X3NpemVfdGFibGVbaV0gPT0gc2l6ZW9mIChfVW53aW5kX1dvcmQpKQorCSAg ICB7CisJICAgICAgdyA9IChfVW53aW5kX0ludGVybmFsX1B0cikgdDsKKwkg ICAgICBtZW1jcHkgKGMsICZ3LCBzaXplb2YgKF9VbndpbmRfV29yZCkpOwor CSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBnY2NfYXNzZXJ0IChk d2FyZl9yZWdfc2l6ZV90YWJsZVtpXSA9PSBzaXplb2YgKF9VbndpbmRfUHRy KSk7CisJICAgICAgcCA9IChfVW53aW5kX0ludGVybmFsX1B0cikgdDsKKwkg ICAgICBtZW1jcHkgKGMsICZwLCBzaXplb2YgKF9VbndpbmRfUHRyKSk7CisJ ICAgIH0KKwl9CisgICAgICBlbHNlIGlmICh0ICYmIGMgJiYgdCAhPSBjKQor CW1lbWNweSAoYywgdCwgZHdhcmZfcmVnX3NpemVfdGFibGVbaV0pOworICAg IH0KKworICAvKiBJZiB0aGUgY3VycmVudCBmcmFtZSBkb2Vzbid0IGhhdmUg YSBzYXZlZCBzdGFjayBwb2ludGVyLCB0aGVuIHdlCisgICAgIG5lZWQgdG8g cmVseSBvbiBFSF9SRVRVUk5fU1RBQ0tBREpfUlRYIHRvIGdldCBvdXIgdGFy Z2V0IHN0YWNrCisgICAgIHBvaW50ZXIgdmFsdWUgcmVsb2FkZWQuICAqLwor ICBpZiAoIV9VbndpbmRfR2V0R1JQdHIgKGN1cnJlbnQsIF9fYnVpbHRpbl9k d2FyZl9zcF9jb2x1bW4gKCkpKQorICAgIHsKKyAgICAgIHZvaWQgKnRhcmdl dF9jZmE7CisKKyAgICAgIHRhcmdldF9jZmEgPSBfVW53aW5kX0dldFB0ciAo dGFyZ2V0LCBfX2J1aWx0aW5fZHdhcmZfc3BfY29sdW1uICgpKTsKKworICAg ICAgLyogV2UgYWRqdXN0IFNQIGJ5IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4g Q1VSUkVOVCBhbmQgVEFSR0VUJ3MgQ0ZBLiAgKi8KKyAgICAgIGlmIChTVEFD S19HUk9XU19ET1dOV0FSRCkKKwlyZXR1cm4gdGFyZ2V0X2NmYSAtIGN1cnJl bnQtPmNmYSArIHRhcmdldC0+YXJnc19zaXplOworICAgICAgZWxzZQorCXJl dHVybiBjdXJyZW50LT5jZmEgLSB0YXJnZXRfY2ZhIC0gdGFyZ2V0LT5hcmdz X3NpemU7CisgICAgfQorICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGlu ZSBfVW53aW5kX1B0cgordXdfaWRlbnRpZnlfY29udGV4dCAoc3RydWN0IF9V bndpbmRfQ29udGV4dCAqY29udGV4dCkKK3sKKyAgLyogVGhlIENGQSBpcyBu b3Qgc3VmZmljaWVudCB0byBkaXNhbWJpZ3VhdGUgdGhlIGNvbnRleHQgb2Yg YSBmdW5jdGlvbgorICAgICBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbCBiZWZv cmUgZXN0YWJsaXNoaW5nIGl0cyBmcmFtZSBhbmQgdGhlIGNvbnRleHQKKyAg ICAgb2YgdGhlIHNpZ25hbCBpdHNlbGYuICAqLworICBpZiAoU1RBQ0tfR1JP V1NfRE9XTldBUkQpCisgICAgcmV0dXJuIF9VbndpbmRfR2V0Q0ZBIChjb250 ZXh0KSAtIF9VbndpbmRfSXNTaWduYWxGcmFtZSAoY29udGV4dCk7CisgIGVs c2UKKyAgICByZXR1cm4gX1Vud2luZF9HZXRDRkEgKGNvbnRleHQpICsgX1Vu d2luZF9Jc1NpZ25hbEZyYW1lIChjb250ZXh0KTsKK30KKworCisjaW5jbHVk ZSAidW53aW5kLmluYyIKKworI2lmIGRlZmluZWQgKFVTRV9HQVNfU1lNVkVS KSAmJiBkZWZpbmVkIChTSEFSRUQpICYmIGRlZmluZWQgKFVTRV9MSUJVTldJ TkRfRVhDRVBUSU9OUykKK2FsaWFzIChfVW53aW5kX0JhY2t0cmFjZSk7Cith bGlhcyAoX1Vud2luZF9EZWxldGVFeGNlcHRpb24pOworYWxpYXMgKF9Vbndp bmRfRmluZEVuY2xvc2luZ0Z1bmN0aW9uKTsKK2FsaWFzIChfVW53aW5kX0Zv cmNlZFVud2luZCk7CithbGlhcyAoX1Vud2luZF9HZXREYXRhUmVsQmFzZSk7 CithbGlhcyAoX1Vud2luZF9HZXRUZXh0UmVsQmFzZSk7CithbGlhcyAoX1Vu d2luZF9HZXRDRkEpOworYWxpYXMgKF9VbndpbmRfR2V0R1IpOworYWxpYXMg KF9VbndpbmRfR2V0SVApOworYWxpYXMgKF9VbndpbmRfR2V0TGFuZ3VhZ2VT cGVjaWZpY0RhdGEpOworYWxpYXMgKF9VbndpbmRfR2V0UmVnaW9uU3RhcnQp OworYWxpYXMgKF9VbndpbmRfUmFpc2VFeGNlcHRpb24pOworYWxpYXMgKF9V bndpbmRfUmVzdW1lKTsKK2FsaWFzIChfVW53aW5kX1Jlc3VtZV9vcl9SZXRo cm93KTsKK2FsaWFzIChfVW53aW5kX1NldEdSKTsKK2FsaWFzIChfVW53aW5k X1NldElQKTsKKyNlbmRpZgorCisjZW5kaWYgLyogIVVTSU5HX1NKTEpfRVhD RVBUSU9OUyAqLwotLS0gbGliZ2NjL2NvbmZpZy9jcjE2L3Vud2luZC1kdzIu aAkxOTcwLTAxLTAxIDA1OjMwOjAwLjAwMDAwMDAwMCArMDUzMAorKysgbGli Z2NjL2NvbmZpZy9jcjE2L3Vud2luZC1kdzIuaAkyMDExLTExLTI4IDEyOjQ2 OjQwLjAwMDAwMDAwMCArMDUzMApAQCAtMCwwICsxLDg3IEBACisvKiBEV0FS RjIgZnJhbWUgdW53aW5kIGRhdGEgc3RydWN0dXJlLgorICAgQ29weXJpZ2h0 IChDKSAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAz LCAyMDA5CisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKwor ICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCisgICBHQ0MgaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChh dCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBH Q0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElU WQorICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgorCisgICBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNp b24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKyAgIHBlcm1pc3Np b25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNl cHRpb24sIHZlcnNpb24KKyAgIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFuZAorICAgYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJy YXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKyAgIHNl ZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNw ZWN0aXZlbHkuICBJZiBub3QsIHNlZQorICAgPGh0dHA6Ly93d3cuZ251Lm9y Zy9saWNlbnNlcy8+LiAgKi8KKworLyogQSB0YXJnZXQgY2FuIG92ZXJyaWRl IChwZXJoYXBzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KSBob3cKKyAg IG1hbnkgZHdhcmYyIGNvbHVtbnMgYXJlIHVud291bmQuICAqLworI2lmbmRl ZiBEV0FSRl9GUkFNRV9SRUdJU1RFUlMKKyNkZWZpbmUgRFdBUkZfRlJBTUVf UkVHSVNURVJTIEZJUlNUX1BTRVVET19SRUdJU1RFUgorI2VuZGlmCisKKy8q IFRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBmcmFtZSB1bndpbmQg aW5mbyBmb3IgYSBmcmFtZS4KKyAgIFRoaXMgaXMgYWxsIHN5bWJvbGljIGF0 IHRoaXMgcG9pbnQsIGFzIG5vbmUgb2YgdGhlIHZhbHVlcyBjYW4KKyAgIGJl IHJlc29sdmVkIHVudGlsIHRoZSB0YXJnZXQgcGMgaXMgbG9jYXRlZC4gICov Cit0eXBlZGVmIHN0cnVjdAoreworICAvKiBFYWNoIHJlZ2lzdGVyIHNhdmUg c3RhdGUgY2FuIGJlIGRlc2NyaWJlZCBpbiB0ZXJtcyBvZiBhIENGQSBzbG90 LAorICAgICBhbm90aGVyIHJlZ2lzdGVyLCBvciBhIGxvY2F0aW9uIGV4cHJl c3Npb24uICAqLworICBzdHJ1Y3QgZnJhbWVfc3RhdGVfcmVnX2luZm8KKyAg eworICAgIHN0cnVjdCB7CisgICAgICB1bmlvbiB7CisJX1Vud2luZF9Xb3Jk IHJlZzsKKwlfVW53aW5kX1N3b3JkIG9mZnNldDsKKwljb25zdCB1bnNpZ25l ZCBjaGFyICpleHA7CisgICAgICB9IGxvYzsKKyAgICAgIGVudW0geworCVJF R19VTlNBVkVELAorCVJFR19TQVZFRF9PRkZTRVQsCisJUkVHX1NBVkVEX1JF RywKKwlSRUdfU0FWRURfRVhQLAorCVJFR19TQVZFRF9WQUxfT0ZGU0VULAor CVJFR19TQVZFRF9WQUxfRVhQLAorCVJFR19VTkRFRklORUQKKyAgICAgIH0g aG93OworICAgIH0gcmVnW0RXQVJGX0ZSQU1FX1JFR0lTVEVSUysxXTsKKwor ICAgIC8qIFVzZWQgdG8gaW1wbGVtZW50IERXX0NGQV9yZW1lbWJlcl9zdGF0 ZS4gICovCisgICAgc3RydWN0IGZyYW1lX3N0YXRlX3JlZ19pbmZvICpwcmV2 OworCisgICAgLyogVGhlIENGQSBjYW4gYmUgZGVzY3JpYmVkIGluIHRlcm1z IG9mIGEgcmVnK29mZnNldCBvciBhCisgICAgICAgbG9jYXRpb24gZXhwcmVz c2lvbi4gICovCisgICAgX1Vud2luZF9Td29yZCBjZmFfb2Zmc2V0OworICAg IF9VbndpbmRfV29yZCBjZmFfcmVnOworICAgIGNvbnN0IHVuc2lnbmVkIGNo YXIgKmNmYV9leHA7CisgICAgZW51bSB7CisgICAgICBDRkFfVU5TRVQsCisg ICAgICBDRkFfUkVHX09GRlNFVCwKKyAgICAgIENGQV9FWFAKKyAgICB9IGNm YV9ob3c7CisgIH0gcmVnczsKKworICAvKiBUaGUgUEMgZGVzY3JpYmVkIGJ5 IHRoZSBjdXJyZW50IGZyYW1lIHN0YXRlLiAgKi8KKyAgdm9pZCAqcGM7CisK KyAgLyogVGhlIGluZm9ybWF0aW9uIHdlIGNhcmUgYWJvdXQgZnJvbSB0aGUg Q0lFL0ZERS4gICovCisgIF9VbndpbmRfUGVyc29uYWxpdHlfRm4gcGVyc29u YWxpdHk7CisgIF9VbndpbmRfU3dvcmQgZGF0YV9hbGlnbjsKKyAgX1Vud2lu ZF9Xb3JkIGNvZGVfYWxpZ247CisgIF9VbndpbmRfV29yZCByZXRhZGRyX2Nv bHVtbjsKKyAgdW5zaWduZWQgY2hhciBmZGVfZW5jb2Rpbmc7CisgIHVuc2ln bmVkIGNoYXIgbHNkYV9lbmNvZGluZzsKKyAgdW5zaWduZWQgY2hhciBzYXdf ejsKKyAgdW5zaWduZWQgY2hhciBzaWduYWxfZnJhbWU7CisgIHZvaWQgKmVo X3B0cjsKK30gX1Vud2luZF9GcmFtZVN0YXRlOworCi0tLSBsaWJnY2MvY29u ZmlnLmhvc3QJMjAxMS0xMS0yMiAxOToyMTowNy4wMDAwMDAwMDAgKzA1MzAK KysrIGxpYmdjYy9jb25maWcuaG9zdAkyMDExLTExLTMwIDEwOjQ2OjM5LjAw MDAwMDAwMCArMDUzMApAQCAtOTgsNiArOTgsOCBAQCBhdnItKi0qKQogYmZp biotKikKIAljcHVfdHlwZT1iZmluCiAJOzsKK2NyMTYtKi0qKQorCTs7CiBm aWRvLSotKikKIAljcHVfdHlwZT1tNjhrCiAJOzsKQEAgLTQxNSw2ICs0MTcs MTAgQEAgYmZpbiotKikKIAl0bWFrZV9maWxlPSIkdG1ha2VfZmlsZSBiZmlu L3QtYmZpbiB0LWZkcGJpdCIKIAlleHRyYV9wYXJ0cz0iY3J0YmVnaW4ubyBj cnRlbmQubyBjcnRpLm8gY3J0bi5vIgogICAgICAgICA7OworY3IxNi0qLWVs ZikKKwl0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGV9IGNyMTYvdC1jcjE2IHQt ZmRwYml0IgorCWV4dHJhX3BhcnRzPSIkZXh0cmFfcGFydHMgY3J0aS5vIGNy dG4ubyBjcnRsaWJpZC5vIgorICAgICAgICA7OwogY3Jpc3YzMi0qLWVsZikK IAl0bWFrZV9maWxlPSIkdG1ha2VfZmlsZSBjcmlzL3QtY3JpcyB0LWZkcGJp dCIKICAJOzsK --_002_C013F7BFDC93F047B111833D343777BD17A5AAE5KCHJEXMB02kpitc_--