From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (NAM12-MW2-obe.outbound.protection.outlook.com [40.107.244.40]) by mx.groups.io with SMTP id smtpd.web10.176283.1680835759979514476 for ; Thu, 06 Apr 2023 19:49:20 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@ami.com header.s=selector1 header.b=BMHR9I3S; spf=pass (domain: ami.com, ip: 40.107.244.40, mailfrom: richardho@ami.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UtC1+SO+OQN+GDXC+7mUvnNpfNZQWckbB+2B3XL51LINuTvxG90ijPtdwbGQ5OTI/dAHzM2agWnNEsVdriQYF5eT8fjLOq5rOeyc5Tm65MqogNOa4/tPce0eiDp/aU2OeaiTUvD28oxmIUdNVyd9Uk18bHjNdg/Ep4tksqKLVig6/Dg/W1tipAoPnyXYSwxX2jLkjMqQu5CfPJAqsWYqVL5Bk/3LtrJEgimIXC3QDuWUbdH3iognRsxUIFIpXyGZY3iXG3m+nohZZfhe9TSyM+zItr7dA6vPifbilaviDbOVaXjKJ3knZ3XRjMy2va5cWy4BgS2gfYppdZLkvjza1Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=b6HaArJK8pdpalCSAcX6I8GLzM+nUPYXhwNKKpXqbiI=; b=C+nok1/M1eYntToABQqeGvv5FH7/z/2EL53zko/jzNlZNuVPkweC6jYtVTH97eJ9zLYjMmqct8hb9RBTtVTXEWVY2a2RAv9WUpOTMo13jfNxg58ZRo5FGTnpud2SZbeMo/r2B0XyMwJvADHewqzQabsr16a2k8Ld8NGiYpwIgZM4BsFcfZahv9CF3IR6hI+B4DUq07UTbcBQZlqr38ljedKH8vRgCoyTxJkHy5pupMbBZL+6Zgy8achcCBvrrKvTno7Q0UKxu7ALoPHm/mdo6gk5siSD1HbYwbHK/emCWN9aDHtt7nN6LQA78J/ueC22d9UUogXR5R0gKWoQ+MnAyA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=ami.com; dmarc=pass action=none header.from=ami.com; dkim=pass header.d=ami.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ami.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=b6HaArJK8pdpalCSAcX6I8GLzM+nUPYXhwNKKpXqbiI=; b=BMHR9I3SRgo3iRgeFds/TWQnu216LFPTPTSGLuA/kn6zA4RlxAEArvBp2g38vNwwDAJXC4E3Si8DIwJhCdNVX98NVgtool0JR/VOBBKN+JT/qlVLT4jPvfds99Nt7FisdEWIHwz7pbaaCHoA32KhdMTBN8ZHxIHH7hE/eh2KXpo= Received: from CY8PR10MB6441.namprd10.prod.outlook.com (2603:10b6:930:63::16) by MW5PR10MB5668.namprd10.prod.outlook.com (2603:10b6:303:1a3::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6277.33; Fri, 7 Apr 2023 02:49:08 +0000 Received: from CY8PR10MB6441.namprd10.prod.outlook.com ([fe80::b965:7721:e4d7:5409]) by CY8PR10MB6441.namprd10.prod.outlook.com ([fe80::b965:7721:e4d7:5409%6]) with mapi id 15.20.6277.031; Fri, 7 Apr 2023 02:49:08 +0000 From: =?UTF-8?B?UmljaGFyZEhvIFvkvZXmmI7lv6Bd?= To: Rebecca Cran , "devel@edk2.groups.io" CC: Andrew Fish , Leif Lindholm , Michael D Kinney , Michael Kubacki , Zhiguang Liu , Liming Gao , Tinh Nguyen , =?utf-8?B?VG9ueSBMbyAo576F6YeR5p2+KQ==?= Subject: Re: [PATCH v6 1/3] UsbNetworkPkg/UsbRndis: Add USB RNDIS devices support Thread-Topic: [EXTERNAL] Re: [PATCH v6 1/3] UsbNetworkPkg/UsbRndis: Add USB RNDIS devices support Thread-Index: AQHZUlwAZ3rtm0OXKUWsSW3zQ13cEa8fQ9YAgAALyWA= Date: Fri, 7 Apr 2023 02:49:07 +0000 Message-ID: References: <20230309075134.864-1-richardho@ami.com> In-Reply-To: Accept-Language: zh-TW, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=ami.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CY8PR10MB6441:EE_|MW5PR10MB5668:EE_ x-ms-office365-filtering-correlation-id: 6d8f762f-fb71-4183-4970-08db3712a877 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: CR0UNRnOScf2hPCEpl2VZ/PF8WlS2F9mbjpIk4Oo70pE4yOxpOg8As9GmYA87l+bFFlE2hES+el60XrA9KE83klD8TMj4r7mAG0JjLp2i1mFepjzm5eT1Ocb6t0CJRgCfZnk0E5TmYjnZRLrVNthKYMPOeLLUhZNBkDnR4oy0SppI80rdmqgA8Zxo+xH47/jUglA9M2IhiA+w/gC9URC/NhdsM9bs9ibTQlvbuV7Mq7n7MabGtURR59tnbTVu0w9U8oYidwxVnEf/mWOJKosmTcfpv9WB0NSm2KufUcCV1pqgFa3PZH1Y+G7Q+QtMWHWg75iK7YXnJhUMQ2YsJBYa7gf+Jyfdh/1yGIwNnqKJ0xU4AKkDnf6AZW9Qu8lExdik9cxrfJZFiMW27pfZadfBJEmHQJpLHim8i6dMWklnl7s4ANEabH/UE6WPsz7Jxxb3I2xkSbJUUYtXCkFBKgyWzEI0sCqlxBFtjYeKRv4Z8XCLYTM0NL8r5f46Y0kKHdzQnMAl3sVa7YVsFCrvR5a8rUVxir0QTkacWtTVRCiAr8uxY/xgWxB8K8jo+QpMAkbhBxV9IU8m2k9y27Q5XQmN6FCE34nYi6Le2XKLwgmZ2iWLWk0H3uEIisGD54kpQfV x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CY8PR10MB6441.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(4636009)(366004)(136003)(346002)(39850400004)(376002)(396003)(451199021)(54906003)(4326008)(76116006)(66556008)(66476007)(66446008)(64756008)(8676002)(66946007)(19627235002)(110136005)(316002)(71200400001)(41300700001)(8936002)(966005)(52536014)(5660300002)(7696005)(30864003)(2906002)(53546011)(83380400001)(9686003)(26005)(186003)(6506007)(478600001)(122000001)(38100700002)(38070700005)(85182001)(33656002)(40140700001)(86362001)(55016003)(579004)(559001)(44824005);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?ZlpuTnA0Y3FtcEZTMFhkbjg2bGdYaGxsWlVVUUp1UFlBTDhoY3k1RVVrcHFC?= =?utf-8?B?alNDdU5samlQd0t1TFpYRFNpTGNNY3YwbHlvRzc1WitadExDNlFGYUpLUFNm?= =?utf-8?B?cUEwSGk0Y3BoM3k1YlRWK1JhbVcyb25XbHptekxnR0Jndm91eU5PSzRrVnFu?= =?utf-8?B?OTRjTDQ1RTEzWDdwanB6dXNYQUtodVJDOU03U3hDb2tYbzQvakZDWmlYek80?= =?utf-8?B?ZVV0aHJha3JNVVlZZXAybmV1NUk0alU0ZkFCanlGVnA3dmxISzE5OXh3TFF6?= =?utf-8?B?Y1I3Yi9yK2ZhZng5K0NhMWhSQTZPd2w1anlrU29kSXRTNXE0Kzd5R3BQeXdD?= =?utf-8?B?T0d0UzEwK1BjQTErdDR1WmFKajYvZzR2U2F3eVd3TXhibFlFei96UEhEOGJw?= =?utf-8?B?TUVVM1BoWkl3SnBnUng2YUxjWXZPNWU2dEZ6Y0pqQ1Qrb2Q1bW9kR095c1lL?= =?utf-8?B?ZVRMcnJ6a2hhQ3hKa1hrQ2Zyc29aVFdYQkhQMC9mdFhJUnU4bXMybEQwZlBD?= =?utf-8?B?SlFCZnF6NzZUZ2NkU3VyZDdobWducjdJOVVodWhWMVJMS3IyRXB0bWtDMFRJ?= =?utf-8?B?dU54d3ZNRVJNRHdvMk9wVU4zN2NuZlE2Sjd3RWRzS29vcDBWM0dUblhIZVhU?= =?utf-8?B?YmVpOFNlVURWTVV3QU5xZjN4NFg4V1oxQS9PQ243TFRiNWorOGEyc05PTGxs?= =?utf-8?B?UThqTStsT0l3eTZMWldObG5YZ0sxb1JlOHZHWUx1MHNvR2FGWWtHMlBGZW1S?= =?utf-8?B?c25BYnRhOEtzRjJ3TFRjSitIRjROdUgyL0hCdnhGeG1rbXU4RzdIZGxXV0Ri?= =?utf-8?B?S2xSN054dHEwZGJUVkE1TUdCMGkwMmc0VHhYNmtZNlFWWGp6TTBpS1d0VXAv?= =?utf-8?B?YWFGV3FKdXVFSXFqVWw2d2FoYUdBVmptSWprSkJLWngyWS84S0FGV1JYRVhJ?= =?utf-8?B?d3FhbDZyODQzekh0WVRsOU9rR1ZPODdQZmpsY1BQZzZzbU91WEdKS2taU2lY?= =?utf-8?B?WE9GY25ubjdoTmkrVEY4ay9WclVDbWtSYzFaUmdWeEw3a1RHV3BUT2NIZXV3?= =?utf-8?B?eVRpTUVrY3BOVjhKRW5RUVY1NjB6czNWc3NhUXorTEhtZUl0NzNmY20rN0d6?= =?utf-8?B?ZGR0blFLcm5JY0EzSVBwMnhoTG9uTDZWdmNzZExGa0tXY0RXdWhIc3pRVldI?= =?utf-8?B?RFQyanByZXBwWENEUDVYT3FiOENNRWZiQ3NTZ0Zrak42OHgvVFJMOHhxYTRl?= =?utf-8?B?WVJGR3ZZSHdCSW8xaktDOGV0YTh3UE1VbE4wWDBJN0xTSGJxdlR2cmR6a1A0?= =?utf-8?B?WVlFK0FvbWt0ME01K21pSkFOQ1psdUpKMXJTb2U5VUtqZDVsY2hOMlc1N3Vz?= =?utf-8?B?MEo0QUg2MUszNU5JTUNaYzFMcGRKbkZQNUc5NmZtRWlXL0xBdVp6QzBUWlpQ?= =?utf-8?B?VjZXMDBmTnljNUR6NlYvSVpqOGRnUjlRMk03WkdPUWNCRnBEaENwcW5OcDZx?= =?utf-8?B?b0NTdFlkcExoUFR4VnNySnZha3ZVbzVGMy9CUkEwZy9LcDFBcERqSnMycmpv?= =?utf-8?B?TnBBeWRYOTJlVDJUZVJrU1BjZ2dDcWkyWDJMc3pxZHdMV0w5SFFkeS9TYldE?= =?utf-8?B?TTEzT0dxdFZ3VjhlcXExTG5DajZOb2VIY0dkUVFRUkwydmRPR2Q3UnpQQld2?= =?utf-8?B?NXpuSTR2UlF5RXBXU013MDh2THhseGZ4LzNPTzZtYTZ6YjBnK3VjZFNqYTQz?= =?utf-8?B?dnJQb2dWQlFGVmN3OVE4MVRCcmdXU2w3L0tTeEd1VElyY0o4eVJOaFZBS0x2?= =?utf-8?B?blhRZWcrSEZCUUt2T3FtZ3VGeUFjMEI5YkdPSURkeW45M0lhWEdPQlpZc1k2?= =?utf-8?B?SFZySFVFS05La3Z3SzJrU3JiV2s0S0F5M1M0WklMRXJsTjdQQVBNbnBGem16?= =?utf-8?B?dGpiVFh3QUZFcEVueWhlNmY0YnFVZjR1eWxRQVZibG10c0lJVVZJYnB6aXJw?= =?utf-8?B?TldZNjJwazJiamtPN1lYaW44dVdqQjRzd3ZTRGxWa08xaTNsNlhvbzgxOHBP?= =?utf-8?B?OWNsYVk5RVF0ZlpOSkZ2eW5VdDhCcHR2ZGRIRDdJV0JLRU43cVdReUtRRnA4?= =?utf-8?Q?3TS0=3D?= MIME-Version: 1.0 X-OriginatorOrg: ami.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CY8PR10MB6441.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6d8f762f-fb71-4183-4970-08db3712a877 X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Apr 2023 02:49:07.7806 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 27e97857-e15f-486c-b58e-86c2b3040f93 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: q03jdfNbNyv4u4Us81vQXHZro+vf+pGL9A1GyMEULPI4KVyJNN+Wxhm2CRddFMoBpXcMICukJaxjmfGnF+FFBQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW5PR10MB5668 Content-Language: zh-TW Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgUmViZWNjYSwNCg0KSSBoYXZlIGFscmVhZHkgcnVuIHRoZSBTZXR1cEdpdC5weSBiZWZvcmUg c2VuZCB0aGUgbWFpbC4NCihVc2UgZ2l0IHNlbmQtZW1haWwgLS10cmFuc2Zlci1lbmNvZGluZz04 Yml0IC0tYW5ub3RhdGUgLS1zdXBwcmVzcy1mcm9tIC0tdG8gZGV2ZWxAZWRrMi5ncm91cHMuaW8g Ki5wYXRjaCB0byBzZW5kIG1haWwpDQoNCkJlbG93IGlzIG15IC5naXQvY29uZmlnDQoNCltjb3Jl XQ0KICAgICAgICByZXBvc2l0b3J5Zm9ybWF0dmVyc2lvbiA9IDANCiAgICAgICAgZmlsZW1vZGUg PSBmYWxzZQ0KICAgICAgICBiYXJlID0gZmFsc2UNCiAgICAgICAgbG9nYWxscmVmdXBkYXRlcyA9 IHRydWUNCiAgICAgICAgc3ltbGlua3MgPSBmYWxzZQ0KICAgICAgICBpZ25vcmVjYXNlID0gdHJ1 ZQ0KICAgICAgICBhYmJyZXYgPSAxMg0KICAgICAgICBhdHRyaWJ1dGVzRmlsZSA9IEQ6L0VES0lJ LVVwc3RyZWFtL2VkazIvQmFzZVRvb2xzL0NvbmYvZ2l0YXR0cmlidXRlcw0KICAgICAgICB3aGl0 ZXNwYWNlID0gY3ItYXQtZW9sDQpbcmVtb3RlICJvcmlnaW4iXQ0KICAgICAgICB1cmwgPSBodHRw czovL2dpdGh1Yi5jb20vdGlhbm9jb3JlL2VkazIuZ2l0DQogICAgICAgIGZldGNoID0gK3JlZnMv aGVhZHMvKjpyZWZzL3JlbW90ZXMvb3JpZ2luLyoNClticmFuY2ggIm1hc3RlciJdDQogICAgICAg IHJlbW90ZSA9IG9yaWdpbg0KICAgICAgICBtZXJnZSA9IHJlZnMvaGVhZHMvbWFzdGVyDQpbYW1d DQogICAgICAgIGtlZXBjciA9IFRydWUNCiAgICAgICAgc2lnbm9mZiA9IFRydWUNCltjaGVycnkt cGlja10NCiAgICAgICAgc2lnbm9mZiA9IFRydWUNCltjb2xvcl0NCiAgICAgICAgZGlmZiA9IFRy dWUNCiAgICAgICAgZ3JlcCA9IGF1dG8NCltjb21taXRdDQogICAgICAgIHNpZ25vZmYgPSBUcnVl DQpbZGlmZl0NCiAgICAgICAgYWxnb3JpdGhtID0gcGF0aWVuY2UNCiAgICAgICAgb3JkZXJGaWxl ID0gRDovRURLSUktVXBzdHJlYW0vZWRrMi9CYXNlVG9vbHMvQ29uZi9kaWZmLm9yZGVyDQogICAg ICAgIHJlbmFtZXMgPSBjb3BpZXMNCiAgICAgICAgc3RhdEdyYXBoV2lkdGggPSAyMA0KW2RpZmYg ImluaSJdDQogICAgICAgIHhmdW5jbmFtZSA9IF5cXFtbQS1aYS16MC05Xy4sIF0rXQ0KW2Zvcm1h dF0NCiAgICAgICAgY292ZXJMZXR0ZXIgPSBUcnVlDQogICAgICAgIG51bWJlcmVkID0gVHJ1ZQ0K ICAgICAgICBzaWdub2ZmID0gRmFsc2UNCltsb2ddDQogICAgICAgIG1haWxtYXAgPSBUcnVlDQpb bm90ZXNdDQogICAgICAgIHJld3JpdGVSZWYgPSByZWZzL25vdGVzL2NvbW1pdHMNCltzZW5kZW1h aWxdDQogICAgICAgIGNoYWlucmVwbHl0byA9IEZhbHNlDQogICAgICAgIHRocmVhZCA9IFRydWUN CiAgICAgICAgdHJhbnNmZXJFbmNvZGluZyA9IDhiaXQNCiAgICAgICAgdG8gPSBkZXZlbEBlZGsy Lmdyb3Vwcy5pbw0KDQpUaGFua3MsDQpSaWNoYXJkDQoNCi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0t LS0tDQpGcm9tOiBSZWJlY2NhIENyYW4gPHJlYmVjY2FAYnNkaW8uY29tPg0KU2VudDogMjAyM+W5 tDTmnIg35pelIDk6NTcgQU0NClRvOiBSaWNoYXJkIEhvICjkvZXmmI7lv6ApIDxSaWNoYXJkSG9A YW1pLmNvbT47IGRldmVsQGVkazIuZ3JvdXBzLmlvDQpDYzogQW5kcmV3IEZpc2ggPGFmaXNoQGFw cGxlLmNvbT47IExlaWYgTGluZGhvbG0gPHF1aWNfbGxpbmRob2xAcXVpY2luYy5jb20+OyBNaWNo YWVsIEQgS2lubmV5IDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT47IE1pY2hhZWwgS3ViYWNr aSA8bWlrdWJhY2tAbGludXgubWljcm9zb2Z0LmNvbT47IFpoaWd1YW5nIExpdSA8emhpZ3Vhbmcu bGl1QGludGVsLmNvbT47IExpbWluZyBHYW8gPGdhb2xpbWluZ0BieW9zb2Z0LmNvbS5jbj47IFRp bmggTmd1eWVuIDx0aW5obmd1eWVuQG9zLmFtcGVyZWNvbXB1dGluZy5jb20+OyBUb255IExvICjn voXph5Hmnb4pIDxUb255TG9AYW1pLmNvbT4NClN1YmplY3Q6IFtFWFRFUk5BTF0gUmU6IFtQQVRD SCB2NiAxLzNdIFVzYk5ldHdvcmtQa2cvVXNiUm5kaXM6IEFkZCBVU0IgUk5ESVMgZGV2aWNlcyBz dXBwb3J0DQoNCg0KKipDQVVUSU9OOiBUaGUgZS1tYWlsIGJlbG93IGlzIGZyb20gYW4gZXh0ZXJu YWwgc291cmNlLiBQbGVhc2UgZXhlcmNpc2UgY2F1dGlvbiBiZWZvcmUgb3BlbmluZyBhdHRhY2ht ZW50cywgY2xpY2tpbmcgbGlua3MsIG9yIGZvbGxvd2luZyBndWlkYW5jZS4qKg0KDQpZb3VyIHBh dGNoZXMgYXJlIHN0aWxsIGNvbWluZyB0aHJvdWdoIHJhdGhlciBtYW5nbGVkLCB1bmZvcnR1bmF0 ZWx5Lg0KDQpZb3Ugc2hvdWxkIGJlIHNlbmRpbmcgdGhlbSBhcyA4Yml0LCBub3QgcXVvdGVkLXBy aW50YWJsZSAtIHRoZQ0KQmFzZVRvb2xzL1NjcmlwdHMvU2V0dXBHaXQucHkgc2NyaXB0IHdpbGwg Y29uZmlndXJlIHRoZSBzZXR0aW5ncyBmb3IgeW91Lg0KDQpBbHNvLCB0aGVyZSBzaG91bGQgYmUg YSBjb3ZlciBsZXR0ZXIgd2l0aCB0aGUgcGF0Y2ggc2VyaWVzOiB0aGF0IHNjcmlwdA0KY29uZmln dXJlcyAiZ2l0IGZvcm1hdC1wYXRjaCIgdG8gZ2VuZXJhdGUgb25lLg0KDQoNCklmIHlvdSd2ZSBh bHJlYWR5IHJ1biBTZXR1cEdpdC5weSwgY291bGQgeW91IHRlbGwgbWUgd2hhdCAuZ2l0L2NvbmZp ZyBpbg0KeW91ciBlZGsyIGNsb25lIGNvbnRhaW5zLCBwbGVhc2U/DQoNCg0KLS0NClJlYmVjY2Eg Q3Jhbg0KDQoNCk9uIDMvOS8yMyAxMjo1MSBBTSwgUmljaGFyZCBIbyAo5L2V5piO5b+gKSB3cm90 ZToNCj4gVGhpcyBkcml2ZXIgcHJvdmlkZXMgVUVGSSBkcml2ZXIgZm9yIFVTQiBSTkRJUyBkZXZp Y2UNCj4NCj4gU2lnbmVkLW9mZi1ieTogUmljaGFyZCBIbyA8cmljaGFyZGhvQGFtaS5jb20+DQo+ IENjOiBBbmRyZXcgRmlzaCA8YWZpc2hAYXBwbGUuY29tPg0KPiBDYzogTGVpZiBMaW5kaG9sbSA8 cXVpY19sbGluZGhvbEBxdWljaW5jLmNvbT4NCj4gQ2M6IE1pY2hhZWwgRCBLaW5uZXkgPG1pY2hh ZWwuZC5raW5uZXlAaW50ZWwuY29tPg0KPiBDYzogTWljaGFlbCBLdWJhY2tpIDxtaWt1YmFja0Bs aW51eC5taWNyb3NvZnQuY29tPg0KPiBDYzogWmhpZ3VhbmcgTGl1IDx6aGlndWFuZy5saXVAaW50 ZWwuY29tPg0KPiBDYzogTGltaW5nIEdhbyA8Z2FvbGltaW5nQGJ5b3NvZnQuY29tLmNuPg0KPiBD YzogUmViZWNjYSBDcmFuIDxyZWJlY2NhQGJzZGlvLmNvbT4NCj4gVGVzdGVkLWJ5OiBUaW5oIE5n dXllbiA8dGluaG5ndXllbkBvcy5hbXBlcmVjb21wdXRpbmcuY29tPg0KPiBSZXZpZXdlZC1ieTog VG9ueSBMbyA8dG9ueWxvQGFtaS5jb20+DQo+IC0tLQ0KPiAgIFVzYk5ldHdvcmtQa2cvVXNiTmV0 d29ya1BrZy5kZWMgICAgICAgICAgICAgICB8ICAgNDYgKw0KPiAgIFVzYk5ldHdvcmtQa2cvQ29u ZmlnL1VzYk5ldHdvcmtQa2cuaW5jLmRzYyAgICB8ICAgIDkgKw0KPiAgIC4uLi9Db25maWcvVXNi TmV0d29ya1BrZ0NvbXBvbmVudHNEeGUuaW5jLmRzYyB8ICAgMjAgKw0KPiAgIC4uLi9Db25maWcv VXNiTmV0d29ya1BrZ0RlZmluZXMuaW5jLmRzYyAgICAgICB8ICAgMjMgKw0KPiAgIC4uLi9Db25m aWcvVXNiTmV0d29ya1BrZ0NvbXBvbmVudHNEeGUuaW5jLmZkZiB8ICAgMjAgKw0KPiAgIFVzYk5l dHdvcmtQa2cvTmV0d29ya0NvbW1vbi9OZXR3b3JrQ29tbW9uLmluZiB8ICAgNDkgKw0KPiAgIFVz Yk5ldHdvcmtQa2cvVXNiUm5kaXMvVXNiUm5kaXMuaW5mICAgICAgICAgICB8ICAgNDIgKw0KPiAg IC4uLi9Qcm90b2NvbC9FZGtJSVVzYkV0aGVybmV0UHJvdG9jb2wuaCAgICAgICB8ICA4NzggKysr KysrKysNCj4gICBVc2JOZXR3b3JrUGtnL05ldHdvcmtDb21tb24vRHJpdmVyQmluZGluZy5oICAg fCAgMjY2ICsrKw0KPiAgIFVzYk5ldHdvcmtQa2cvVXNiUm5kaXMvVXNiUm5kaXMuaCAgICAgICAg ICAgICB8ICA1ODYgKysrKysrDQo+ICAgVXNiTmV0d29ya1BrZy9OZXR3b3JrQ29tbW9uL0NvbXBv bmVudE5hbWUuYyAgIHwgIDI2MyArKysNCj4gICBVc2JOZXR3b3JrUGtnL05ldHdvcmtDb21tb24v RHJpdmVyQmluZGluZy5jICAgfCAgNTk1ICsrKysrKw0KPiAgIFVzYk5ldHdvcmtQa2cvTmV0d29y a0NvbW1vbi9QeGVGdW5jdGlvbi5jICAgICB8IDE4MDMgKysrKysrKysrKysrKysrKysNCj4gICBV c2JOZXR3b3JrUGtnL1VzYlJuZGlzL0NvbXBvbmVudE5hbWUuYyAgICAgICAgfCAgMTcyICsrDQo+ ICAgVXNiTmV0d29ya1BrZy9Vc2JSbmRpcy9Vc2JSbmRpcy5jICAgICAgICAgICAgIHwgIDg4NiAr KysrKysrKw0KPiAgIFVzYk5ldHdvcmtQa2cvVXNiUm5kaXMvVXNiUm5kaXNGdW5jdGlvbi5jICAg ICB8IDE3MTggKysrKysrKysrKysrKysrKw0KPiAgIFVzYk5ldHdvcmtQa2cvUmVhZE1lLm1kICAg ICAgICAgICAgICAgICAgICAgICB8ICAgNjUgKw0KPiAgIFVzYk5ldHdvcmtQa2cvUmVsZWFzZU5v dGVzLm1kICAgICAgICAgICAgICAgICB8ICAgMTEgKw0KPiAgIDE4IGZpbGVzIGNoYW5nZWQsIDc0 NTIgaW5zZXJ0aW9ucygrKQ0KPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBVc2JOZXR3b3JrUGtnL1Vz Yk5ldHdvcmtQa2cuZGVjDQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IFVzYk5ldHdvcmtQa2cvQ29u ZmlnL1VzYk5ldHdvcmtQa2cuaW5jLmRzYw0KPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBVc2JOZXR3 b3JrUGtnL0NvbmZpZy9Vc2JOZXR3b3JrUGtnQ29tcG9uZW50c0R4ZS5pbmMuZHNjDQo+ICAgY3Jl YXRlIG1vZGUgMTAwNjQ0IFVzYk5ldHdvcmtQa2cvQ29uZmlnL1VzYk5ldHdvcmtQa2dEZWZpbmVz LmluYy5kc2MNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgVXNiTmV0d29ya1BrZy9Db25maWcvVXNi TmV0d29ya1BrZ0NvbXBvbmVudHNEeGUuaW5jLmZkZg0KPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBV c2JOZXR3b3JrUGtnL05ldHdvcmtDb21tb24vTmV0d29ya0NvbW1vbi5pbmYNCj4gICBjcmVhdGUg bW9kZSAxMDA2NDQgVXNiTmV0d29ya1BrZy9Vc2JSbmRpcy9Vc2JSbmRpcy5pbmYNCj4gICBjcmVh dGUgbW9kZSAxMDA2NDQgVXNiTmV0d29ya1BrZy9JbmNsdWRlL1Byb3RvY29sL0Vka0lJVXNiRXRo ZXJuZXRQcm90b2NvbC5oDQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IFVzYk5ldHdvcmtQa2cvTmV0 d29ya0NvbW1vbi9Ecml2ZXJCaW5kaW5nLmgNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgVXNiTmV0 d29ya1BrZy9Vc2JSbmRpcy9Vc2JSbmRpcy5oDQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IFVzYk5l dHdvcmtQa2cvTmV0d29ya0NvbW1vbi9Db21wb25lbnROYW1lLmMNCj4gICBjcmVhdGUgbW9kZSAx MDA2NDQgVXNiTmV0d29ya1BrZy9OZXR3b3JrQ29tbW9uL0RyaXZlckJpbmRpbmcuYw0KPiAgIGNy ZWF0ZSBtb2RlIDEwMDY0NCBVc2JOZXR3b3JrUGtnL05ldHdvcmtDb21tb24vUHhlRnVuY3Rpb24u Yw0KPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBVc2JOZXR3b3JrUGtnL1VzYlJuZGlzL0NvbXBvbmVu dE5hbWUuYw0KPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBVc2JOZXR3b3JrUGtnL1VzYlJuZGlzL1Vz YlJuZGlzLmMNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgVXNiTmV0d29ya1BrZy9Vc2JSbmRpcy9V c2JSbmRpc0Z1bmN0aW9uLmMNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgVXNiTmV0d29ya1BrZy9S ZWFkTWUubWQNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgVXNiTmV0d29ya1BrZy9SZWxlYXNlTm90 ZXMubWQNCj4NCj4gZGlmZiAtLWdpdCBhL1VzYk5ldHdvcmtQa2cvVXNiTmV0d29ya1BrZy5kZWMg Yi9Vc2JOZXR3b3JrUGtnL1VzYk5ldHdvcmtQa2cuZGVjDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uMzBlNGU0YzhhYWM3DQo+IC0tLSAvZGV2L251bGwNCj4g KysrIGIvVXNiTmV0d29ya1BrZy9Vc2JOZXR3b3JrUGtnLmRlYw0KPiBAQCAtMCwwICsxLDQ2IEBA DQo+ICsjIyBAZmlsZQ0KPiArIyAgVGhpcyBwYWNrYWdlIGRlZmluZXMgVXNiIG5ldHdvcmsgc3Bl Y2lmaWMgaW50ZXJmYWNlcyBhbmQgbGlicmFyeSBjbGFzc2VzDQo+ICsjICBhcyB3ZWxsIGFzIGNv bmZpZ3VyYXRpb24gZm9yIHN0YW5kYXJkIGVkazIgcGFja2FnZXMuDQo+ICsjDQo+ICsjIENvcHly aWdodCAoYykgMjAyMywgQW1lcmljYW4gTWVnYXRyZW5kcyBJbnRlcm5hdGlvbmFsIExMQy4gQWxs IHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0Qt Mi1DbGF1c2UtUGF0ZW50DQo+ICsjIw0KPiArDQo+ICtbRGVmaW5lc10NCj4gKyAgREVDX1NQRUNJ RklDQVRJT04gICAgICAgICAgICAgID0gMHgwMDAxMDAwNQ0KPiArICBQQUNLQUdFX05BTUUgICAg ICAgICAgICAgICAgICAgPSBVc2JOZXR3b3JrUGtnDQo+ICsgIFBBQ0tBR0VfR1VJRCAgICAgICAg ICAgICAgICAgICA9IGFiZmFiOTFlLTM3ZWEtNGNiNC04MGE2LTU2M2RiYjBiY2VjNg0KPiArICBQ QUNLQUdFX1ZFUlNJT04gICAgICAgICAgICAgICAgPSAwLjENCj4gKw0KPiArW0luY2x1ZGVzXQ0K PiArICBJbmNsdWRlDQo+ICsNCj4gK1tQcm90b2NvbHNdDQo+ICsgICMjIEluY2x1ZGUvUHJvdG9j b2wvRWRrSUlVc2JFdGhlcm5ldC5oDQo+ICsgIGdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCA9IHsg MHg4ZDg5NjljYywgMHhmZWIwLCAweDQzMDMsIHsgMHhiMiwgMHgxYSwgMHgxZiwgMHgxMSwgMHg2 ZiwgMHgzOCwgMHg1NiwgMHg0MyB9IH0NCj4gKw0KPiArW0d1aWRzXQ0KPiArICAjIyBVc2IgTmV0 d29yayBwYWNrYWdlIHRva2VuIHNwYWNlIEdVSUQNCj4gKyAgZ1VzYk5ldHdvcmtQa2dUb2tlblNw YWNlR3VpZCAgPSB7IDB4QTEyMzFFODIsIDB4MjFCOCwgMHg0MjA0LCB7IDB4OTIsIDB4QkIsIDB4 MzcsIDB4M0EsIDB4RkIsIDB4MDEsIDB4QzYsIDB4QTEgfSB9DQo+ICsNCj4gK1tQY2RzRmVhdHVy ZUZsYWddDQo+ICsNCj4gKyAgIyMgU2V0IHRoZSBQQ0QgJ1VzYkNkY0VjbVN1cHBvcnQnIHRvICdU UlVFJyBpZiAnVXNiIENkYyBFY20gZGV2aWNlJyBuZWVkIHRvIGJlIGVuYWJsZWQuDQo+ICsgIGdV c2JOZXR3b3JrUGtnVG9rZW5TcGFjZUd1aWQuVXNiQ2RjRWNtU3VwcG9ydHxGQUxTRXxCT09MRUFO fDB4MDAwMDAwMDENCj4gKw0KPiArICAjIyBTZXQgdGhlIFBDRCAnVXNiQ2RjTmNtU3VwcG9ydCcg dG8gJ1RSVUUnIGlmICdVc2IgQ2RjIE5jbSBkZXZpY2UnIG5lZWQgdG8gYmUgZW5hYmxlZC4NCj4g KyAgZ1VzYk5ldHdvcmtQa2dUb2tlblNwYWNlR3VpZC5Vc2JDZGNOY21TdXBwb3J0fEZBTFNFfEJP T0xFQU58MHgwMDAwMDAwMg0KPiArDQo+ICsgICMjIFNldCB0aGUgUENEICdVc2JSbmRpc1N1cHBv cnQnIHRvICdUUlVFJyBpZiAnVXNiIFJuZGlzIGRldmljZScgbmVlZCB0byBiZSBlbmFibGVkLg0K PiArICBnVXNiTmV0d29ya1BrZ1Rva2VuU3BhY2VHdWlkLlVzYlJuZGlzU3VwcG9ydHxUUlVFfEJP T0xFQU58MHgwMDAwMDAwMw0KPiArDQo+ICtbUGNkc0ZpeGVkQXRCdWlsZCwgUGNkc1BhdGNoYWJs ZUluTW9kdWxlXQ0KPiArICAjIyBTdXBwb3J0IHJhdGUgbGltaXRpbmcNCj4gKyAgZ1VzYk5ldHdv cmtQa2dUb2tlblNwYWNlR3VpZC5FbmFibGVSYXRlTGltaXRpbmd8RkFMU0V8Qk9PTEVBTnwweDAw MDEwMDAxDQo+ICsNCj4gKyAgIyMgVGhlIHJhdGUgbGltaXRpbmcgQ3JlZGl0IHZhbHVlIGlzIGNo ZWNrIGluIHJhdGUgbGltaXRlciBldmVudC4NCj4gKyAgIyAgSXQgaXMgdG8gY29udHJvbCB0aGUg UmF0ZUxpbWl0aW5nQ3JlZGl0Q291bnQgbWF4IHZhbHVlLg0KPiArICBnVXNiTmV0d29ya1BrZ1Rv a2VuU3BhY2VHdWlkLlJhdGVMaW1pdGluZ0NyZWRpdHwxMHxVSU5UMzJ8MHgwMDAxMDAwMg0KPiAr DQo+ICsgICMjIFRoZSB2YWx1ZSBvZiByYXRlIGxpbWl0ZXIgZXZlbnQgZm9yIHRpbWVvdXQgY2hl Y2suIERlZmF1bHQgdmFsdWUgaXMgMTAwKHVuaXQgMW1zKS4NCj4gKyAgZ1VzYk5ldHdvcmtQa2dU b2tlblNwYWNlR3VpZC5SYXRlTGltaXRpbmdGYWN0b3J8MTAwfFVJTlQzMnwweDAwMDEwMDAzDQo+ IGRpZmYgLS1naXQgYS9Vc2JOZXR3b3JrUGtnL0NvbmZpZy9Vc2JOZXR3b3JrUGtnLmluYy5kc2Mg Yi9Vc2JOZXR3b3JrUGtnL0NvbmZpZy9Vc2JOZXR3b3JrUGtnLmluYy5kc2MNCj4gbmV3IGZpbGUg bW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi5hMzMxNmIxZDRhODkNCj4gLS0tIC9k ZXYvbnVsbA0KPiArKysgYi9Vc2JOZXR3b3JrUGtnL0NvbmZpZy9Vc2JOZXR3b3JrUGtnLmluYy5k c2MNCj4gQEAgLTAsMCArMSw5IEBADQo+ICsjIyBAZmlsZQ0KPiArIyBHbG9iYWwgRFNDIGRlZmlu aXRpb25zIHRvIGJlIGluY2x1ZGVkIGludG8gcHJvamVjdCBEU0MgZmlsZS4NCj4gKyMNCj4gKyMg Q29weXJpZ2h0IChjKSAyMDIzLCBBbWVyaWNhbiBNZWdhdHJlbmRzIEludGVybmF0aW9uYWwgTExD LiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gKyMjDQo+ICsNCj4gK1tDb21wb25lbnRzLlg2NF0NCj4g KyFpbmNsdWRlIFVzYk5ldHdvcmtQa2cvQ29uZmlnL1VzYk5ldHdvcmtQa2dDb21wb25lbnRzRHhl LmluYy5kc2MNCj4gZGlmZiAtLWdpdCBhL1VzYk5ldHdvcmtQa2cvQ29uZmlnL1VzYk5ldHdvcmtQ a2dDb21wb25lbnRzRHhlLmluYy5kc2MgYi9Vc2JOZXR3b3JrUGtnL0NvbmZpZy9Vc2JOZXR3b3Jr UGtnQ29tcG9uZW50c0R4ZS5pbmMuZHNjDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4 IDAwMDAwMDAwMDAwMC4uNTQ0ZGY4NDA0YzY0DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvVXNi TmV0d29ya1BrZy9Db25maWcvVXNiTmV0d29ya1BrZ0NvbXBvbmVudHNEeGUuaW5jLmRzYw0KPiBA QCAtMCwwICsxLDIwIEBADQo+ICsjIyBAZmlsZQ0KPiArIyBMaXN0IG9mIENvcmUgQ29tcG9uZW50 cy4NCj4gKyMNCj4gKyMgQ29weXJpZ2h0IChjKSAyMDIzLCBBbWVyaWNhbiBNZWdhdHJlbmRzIElu dGVybmF0aW9uYWwgTExDLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gKyMgU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gKyMjDQo+ICsNCj4gKyAgVXNi TmV0d29ya1BrZy9OZXR3b3JrQ29tbW9uL05ldHdvcmtDb21tb24uaW5mDQo+ICsNCj4gKyFpZiBn VXNiTmV0d29ya1BrZ1Rva2VuU3BhY2VHdWlkLlVzYkNkY0VjbVN1cHBvcnQNCj4gKyAgVXNiTmV0 d29ya1BrZy9Vc2JDZGNFY20vVXNiQ2RjRWNtLmluZg0KPiArIWVuZGlmDQo+ICsNCj4gKyFpZiBn VXNiTmV0d29ya1BrZ1Rva2VuU3BhY2VHdWlkLlVzYkNkY05jbVN1cHBvcnQNCj4gKyAgVXNiTmV0 d29ya1BrZy9Vc2JDZGNOY20vVXNiQ2RjTmNtLmluZg0KPiArIWVuZGlmDQo+ICsNCj4gKyFpZiBn VXNiTmV0d29ya1BrZ1Rva2VuU3BhY2VHdWlkLlVzYlJuZGlzU3VwcG9ydA0KPiArICBVc2JOZXR3 b3JrUGtnL1VzYlJuZGlzL1VzYlJuZGlzLmluZg0KPiArIWVuZGlmDQo+IGRpZmYgLS1naXQgYS9V c2JOZXR3b3JrUGtnL0NvbmZpZy9Vc2JOZXR3b3JrUGtnRGVmaW5lcy5pbmMuZHNjIGIvVXNiTmV0 d29ya1BrZy9Db25maWcvVXNiTmV0d29ya1BrZ0RlZmluZXMuaW5jLmRzYw0KPiBuZXcgZmlsZSBt b2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAuLjg1YTMwOWJjZjU2Nw0KPiAtLS0gL2Rl di9udWxsDQo+ICsrKyBiL1VzYk5ldHdvcmtQa2cvQ29uZmlnL1VzYk5ldHdvcmtQa2dEZWZpbmVz LmluYy5kc2MNCj4gQEAgLTAsMCArMSwyMyBAQA0KPiArIyMgQGZpbGUNCj4gKyMgR2xvYmFsIHN3 aXRjaGVzIGVuYWJsZS9kaXNhYmxlIHByb2plY3QgZmVhdHVyZXMuDQo+ICsjDQo+ICsjIENvcHly aWdodCAoYykgMjAyMywgQW1lcmljYW4gTWVnYXRyZW5kcyBJbnRlcm5hdGlvbmFsIExMQy4gQWxs IHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0Qt Mi1DbGF1c2UtUGF0ZW50DQo+ICsjIw0KPiArDQo+ICtbRGVmaW5lc10NCj4gKyFpZiAiSUEzMiIg aW4gJChBUkNIKSAmJiAiWDY0IiBpbiAkKEFSQ0gpDQo+ICsgIERFRklORSBQRUk9SUEzMg0KPiAr ICBERUZJTkUgRFhFPVg2NA0KPiArIWVsc2UNCj4gKyAgREVGSU5FIFBFST1DT01NT04NCj4gKyAg REVGSU5FIERYRT1DT01NT04NCj4gKyFlbmRpZg0KPiArDQo+ICtbUGFja2FnZXNdDQo+ICsgIFVz Yk5ldHdvcmtQa2cvVXNiTmV0d29ya1BrZy5kZWMNCj4gKw0KPiArW1BjZHNGZWF0dXJlRmxhZ10N Cj4gKyAgZ1VzYk5ldHdvcmtQa2dUb2tlblNwYWNlR3VpZC5Vc2JDZGNFY21TdXBwb3J0fEZBTFNF DQo+ICsgIGdVc2JOZXR3b3JrUGtnVG9rZW5TcGFjZUd1aWQuVXNiQ2RjTmNtU3VwcG9ydHxGQUxT RQ0KPiArICBnVXNiTmV0d29ya1BrZ1Rva2VuU3BhY2VHdWlkLlVzYlJuZGlzU3VwcG9ydHxUUlVF DQo+IGRpZmYgLS1naXQgYS9Vc2JOZXR3b3JrUGtnL0NvbmZpZy9Vc2JOZXR3b3JrUGtnQ29tcG9u ZW50c0R4ZS5pbmMuZmRmIGIvVXNiTmV0d29ya1BrZy9Db25maWcvVXNiTmV0d29ya1BrZ0NvbXBv bmVudHNEeGUuaW5jLmZkZg0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAw MDAwMDAuLjEwNjE2ZDk3ZWRiNA0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL1VzYk5ldHdvcmtQ a2cvQ29uZmlnL1VzYk5ldHdvcmtQa2dDb21wb25lbnRzRHhlLmluYy5mZGYNCj4gQEAgLTAsMCAr MSwyMCBAQA0KPiArIyMgQGZpbGUNCj4gKyMgTGlzdCBvZiBDb3JlIENvbXBvbmVudHMuDQo+ICsj DQo+ICsjIENvcHlyaWdodCAoYykgMjAyMywgQW1lcmljYW4gTWVnYXRyZW5kcyBJbnRlcm5hdGlv bmFsIExMQy4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICsjIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ICsjIw0KPiArDQo+ICsgIElORiBVc2JOZXR3 b3JrUGtnL05ldHdvcmtDb21tb24vTmV0d29ya0NvbW1vbi5pbmYNCj4gKw0KPiArIWlmIGdVc2JO ZXR3b3JrUGtnVG9rZW5TcGFjZUd1aWQuVXNiQ2RjRWNtU3VwcG9ydA0KPiArICBJTkYgVXNiTmV0 d29ya1BrZy9Vc2JDZGNFY20vVXNiQ2RjRWNtLmluZg0KPiArIWVuZGlmDQo+ICsNCj4gKyFpZiBn VXNiTmV0d29ya1BrZ1Rva2VuU3BhY2VHdWlkLlVzYkNkY05jbVN1cHBvcnQNCj4gKyAgSU5GIFVz Yk5ldHdvcmtQa2cvVXNiQ2RjTmNtL1VzYkNkY05jbS5pbmYNCj4gKyFlbmRpZg0KPiArDQo+ICsh aWYgZ1VzYk5ldHdvcmtQa2dUb2tlblNwYWNlR3VpZC5Vc2JSbmRpc1N1cHBvcnQNCj4gKyAgSU5G IFVzYk5ldHdvcmtQa2cvVXNiUm5kaXMvVXNiUm5kaXMuaW5mDQo+ICshZW5kaWYNCj4gZGlmZiAt LWdpdCBhL1VzYk5ldHdvcmtQa2cvTmV0d29ya0NvbW1vbi9OZXR3b3JrQ29tbW9uLmluZiBiL1Vz Yk5ldHdvcmtQa2cvTmV0d29ya0NvbW1vbi9OZXR3b3JrQ29tbW9uLmluZg0KPiBuZXcgZmlsZSBt b2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAuLjg5MjMxMDJiYzM1MA0KPiAtLS0gL2Rl di9udWxsDQo+ICsrKyBiL1VzYk5ldHdvcmtQa2cvTmV0d29ya0NvbW1vbi9OZXR3b3JrQ29tbW9u LmluZg0KPiBAQCAtMCwwICsxLDQ5IEBADQo+ICsjIyBAZmlsZQ0KPiArIyAgIFRoaXMgaXMgVXNi IE5ldHdvcmsgQ29tbW9uIGRyaXZlciBmb3IgRFhFIHBoYXNlLg0KPiArIw0KPiArIyBDb3B5cmln aHQgKGMpIDIwMjMsIEFtZXJpY2FuIE1lZ2F0cmVuZHMgSW50ZXJuYXRpb25hbCBMTEMuIEFsbCBy aWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTIt Q2xhdXNlLVBhdGVudA0KPiArIyMNCj4gKw0KPiArW0RlZmluZXNdDQo+ICsgIElORl9WRVJTSU9O ICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMTAwMDUNCj4gKyAgQkFTRV9OQU1FICAgICAgICAg ICAgICAgICAgICAgID0gTmV0d29ya0NvbW1vbg0KPiArICBGSUxFX0dVSUQgICAgICAgICAgICAg ICAgICAgICAgPSBjYTZlYjRmNC1mMWQ2LTQzNzUtOTdkNi0xODg1Njg3MWUxYmYNCj4gKyAgTU9E VUxFX1RZUEUgICAgICAgICAgICAgICAgICAgID0gRFhFX0RSSVZFUg0KPiArICBWRVJTSU9OX1NU UklORyAgICAgICAgICAgICAgICAgPSAxLjANCj4gKyAgRU5UUllfUE9JTlQgICAgICAgICAgICAg ICAgICAgID0gTmV0d29ya0NvbW1vbkVudHJ5DQo+ICsNCj4gK1tTb3VyY2VzXQ0KPiArICBEcml2 ZXJCaW5kaW5nLmMNCj4gKyAgRHJpdmVyQmluZGluZy5oDQo+ICsgIENvbXBvbmVudE5hbWUuYw0K PiArICBQeGVGdW5jdGlvbi5jDQo+ICsNCj4gK1tQYWNrYWdlc10NCj4gKyAgTWRlUGtnL01kZVBr Zy5kZWMNCj4gKyAgTWRlTW9kdWxlUGtnL01kZU1vZHVsZVBrZy5kZWMNCj4gKyAgVXNiTmV0d29y a1BrZy9Vc2JOZXR3b3JrUGtnLmRlYw0KPiArDQo+ICtbTGlicmFyeUNsYXNzZXNdDQo+ICsgIFVl ZmlEcml2ZXJFbnRyeVBvaW50DQo+ICsgIFVlZmlCb290U2VydmljZXNUYWJsZUxpYg0KPiArICBV ZWZpTGliDQo+ICsgIERlYnVnTGliDQo+ICsgIFVlZmlVc2JMaWINCj4gKyAgTWVtb3J5QWxsb2Nh dGlvbkxpYg0KPiArICBCYXNlTWVtb3J5TGliDQo+ICsNCj4gK1tQcm90b2NvbHNdDQo+ICsgIGdF ZmlOZXR3b3JrSW50ZXJmYWNlSWRlbnRpZmllclByb3RvY29sR3VpZF8zMQ0KPiArICBnRWZpVXNi SW9Qcm90b2NvbEd1aWQNCj4gKyAgZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQNCj4gKyAgZ0Vm aURyaXZlckJpbmRpbmdQcm90b2NvbEd1aWQNCj4gKyAgZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlk DQo+ICsNCj4gK1tQY2RdDQo+ICsgIGdVc2JOZXR3b3JrUGtnVG9rZW5TcGFjZUd1aWQuRW5hYmxl UmF0ZUxpbWl0aW5nDQo+ICsgIGdVc2JOZXR3b3JrUGtnVG9rZW5TcGFjZUd1aWQuUmF0ZUxpbWl0 aW5nQ3JlZGl0DQo+ICsgIGdVc2JOZXR3b3JrUGtnVG9rZW5TcGFjZUd1aWQuUmF0ZUxpbWl0aW5n RmFjdG9yDQo+ICsNCj4gK1tEZXBleF0NCj4gKyAgVFJVRQ0KPiBkaWZmIC0tZ2l0IGEvVXNiTmV0 d29ya1BrZy9Vc2JSbmRpcy9Vc2JSbmRpcy5pbmYgYi9Vc2JOZXR3b3JrUGtnL1VzYlJuZGlzL1Vz YlJuZGlzLmluZg0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAu LjY0MjA1ZTQyNzc0NQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL1VzYk5ldHdvcmtQa2cvVXNi Um5kaXMvVXNiUm5kaXMuaW5mDQo+IEBAIC0wLDAgKzEsNDIgQEANCj4gKyMjIEBmaWxlDQo+ICsj ICAgVGhpcyBpcyBVc2IgUm5kaXMgZHJpdmVyIGZvciBEWEUgcGhhc2UuDQo+ICsjDQo+ICsjIENv cHlyaWdodCAoYykgMjAyMywgQW1lcmljYW4gTWVnYXRyZW5kcyBJbnRlcm5hdGlvbmFsIExMQy4g QWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBC U0QtMi1DbGF1c2UtUGF0ZW50DQo+ICsjIw0KPiArDQo+ICtbRGVmaW5lc10NCj4gKyAgSU5GX1ZF UlNJT04gICAgICAgICAgICAgICAgICAgID0gMHgwMDAxMDAwNQ0KPiArICBCQVNFX05BTUUgICAg ICAgICAgICAgICAgICAgICAgPSBVc2JSbmRpcw0KPiArICBGSUxFX0dVSUQgICAgICAgICAgICAg ICAgICAgICAgPSAxMUUzMkMzNC02MEI1LTQ5OTEtOERFQS02M0QzRThDODc2REUNCj4gKyAgTU9E VUxFX1RZUEUgICAgICAgICAgICAgICAgICAgID0gRFhFX0RSSVZFUg0KPiArICBWRVJTSU9OX1NU UklORyAgICAgICAgICAgICAgICAgPSAxLjANCj4gKyAgRU5UUllfUE9JTlQgICAgICAgICAgICAg ICAgICAgID0gVXNiUm5kaXNFbnRyeQ0KPiArDQo+ICtbU291cmNlc10NCj4gKyAgVXNiUm5kaXMu Yw0KPiArICBVc2JSbmRpcy5oDQo+ICsgIFVzYlJuZGlzRnVuY3Rpb24uYw0KPiArICBDb21wb25l bnROYW1lLmMNCj4gKw0KPiArW1BhY2thZ2VzXQ0KPiArICBNZGVQa2cvTWRlUGtnLmRlYw0KPiAr ICBVc2JOZXR3b3JrUGtnL1VzYk5ldHdvcmtQa2cuZGVjDQo+ICsNCj4gK1tMaWJyYXJ5Q2xhc3Nl c10NCj4gKyAgVWVmaURyaXZlckVudHJ5UG9pbnQNCj4gKyAgVWVmaUJvb3RTZXJ2aWNlc1RhYmxl TGliDQo+ICsgIFVlZmlMaWINCj4gKyAgRGVidWdMaWINCj4gKyAgVWVmaVVzYkxpYg0KPiArICBN ZW1vcnlBbGxvY2F0aW9uTGliDQo+ICsgIEJhc2VNZW1vcnlMaWINCj4gKw0KPiArW1Byb3RvY29s c10NCj4gKyAgZ0VmaVVzYklvUHJvdG9jb2xHdWlkDQo+ICsgIGdFZmlEZXZpY2VQYXRoUHJvdG9j b2xHdWlkDQo+ICsgIGdFZmlEcml2ZXJCaW5kaW5nUHJvdG9jb2xHdWlkDQo+ICsgIGdFZGtJSVVz YkV0aFByb3RvY29sR3VpZA0KPiArDQo+ICtbRGVwZXhdDQo+ICsgIFRSVUUNCj4gZGlmZiAtLWdp dCBhL1VzYk5ldHdvcmtQa2cvSW5jbHVkZS9Qcm90b2NvbC9FZGtJSVVzYkV0aGVybmV0UHJvdG9j b2wuaCBiL1VzYk5ldHdvcmtQa2cvSW5jbHVkZS9Qcm90b2NvbC9FZGtJSVVzYkV0aGVybmV0UHJv dG9jb2wuaA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAuLmY1 NDk0NmM3YWE2OQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL1VzYk5ldHdvcmtQa2cvSW5jbHVk ZS9Qcm90b2NvbC9FZGtJSVVzYkV0aGVybmV0UHJvdG9jb2wuaA0KPiBAQCAtMCwwICsxLDg3OCBA QA0KPiArLyoqIEBmaWxlDQo+ICsgIEhlYWRlciBmaWxlIGNvbnRhaW5zIGNvZGUgZm9yIFVTQiBF dGhlcm5ldCBQcm90b2NvbA0KPiArICBkZWZpbml0aW9ucw0KPiArDQo+ICsgIENvcHlyaWdodCAo YykgMjAyMywgQW1lcmljYW4gTWVnYXRyZW5kcyBJbnRlcm5hdGlvbmFsIExMQy4gQWxsIHJpZ2h0 cyByZXNlcnZlZC48QlI+DQo+ICsgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1 c2UtUGF0ZW50DQo+ICsqKi8NCj4gKw0KPiArI2lmbmRlZiBFREtJSV9VU0JfRVRIRVJORVRfUFJP VE9DT0xfSF8NCj4gKyNkZWZpbmUgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MX0hfDQo+ICsN Cj4gKyNkZWZpbmUgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MX0dVSUQgXA0KPiArICAgIHsw eDhkODk2OWNjLCAweGZlYjAsIDB4NDMwMywgezB4YjIsIDB4MWEsIDB4MWYsIDB4MTEsIDB4NmYs IDB4MzgsIDB4NTYsIDB4NDN9fQ0KPiArDQo+ICt0eXBlZGVmIHN0cnVjdCBfRURLSUlfVVNCX0VU SEVSTkVUX1BST1RPQ09MIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTDsNCj4gKw0KPiArI2Rl ZmluZSBVU0JfQ0RDX0NMQVNTICAgICAgICAgIDB4MDINCj4gKyNkZWZpbmUgVVNCX0NEQ19BQ01f U1VCQ0xBU1MgICAweDAyDQo+ICsjZGVmaW5lIFVTQl9DRENfRUNNX1NVQkNMQVNTICAgMHgwNg0K PiArI2RlZmluZSBVU0JfQ0RDX05DTV9TVUJDTEFTUyAgIDB4MEQNCj4gKyNkZWZpbmUgVVNCX0NE Q19EQVRBX0NMQVNTICAgICAweDBBDQo+ICsjZGVmaW5lIFVTQl9DRENfREFUQV9TVUJDTEFTUyAg MHgwMA0KPiArI2RlZmluZSBVU0JfTk9fQ0xBU1NfUFJPVE9DT0wgIDB4MDANCj4gKyNkZWZpbmUg VVNCX05DTV9OVEJfUFJPVE9DT0wgICAweDAxDQo+ICsjZGVmaW5lIFVTQl9WRU5ET1JfUFJPVE9D T0wgICAgMHhGRg0KPiArDQo+ICsvLyBUeXBlIFZhbHVlcyBmb3IgdGhlIERlc2NyaXB0b3JUeXBl IEZpZWxkDQo+ICsjZGVmaW5lIENTX0lOVEVSRkFDRSAgMHgyNA0KPiArI2RlZmluZSBDU19FTkRQ T0lOVCAgIDB4MjUNCj4gKw0KPiArLy8gRGVzY3JpcHRvciBTdWJUeXBlIGluIEZ1bmN0aW9uYWwg RGVzY3JpcHRvcnMNCj4gKyNkZWZpbmUgSEVBREVSX0ZVTl9ERVNDUklQVE9SICAgIDB4MDANCj4g KyNkZWZpbmUgVU5JT05fRlVOX0RFU0NSSVBUT1IgICAgIDB4MDYNCj4gKyNkZWZpbmUgRVRIRVJO RVRfRlVOX0RFU0NSSVBUT1IgIDB4MEYNCj4gKw0KPiArI2RlZmluZSBNQVhfTEFOX0lOVEVSRkFD RSAgMHgxMA0KPiArDQo+ICsvLyBUYWJsZSAyMDogQ2xhc3MtU3BlY2lmaWMgTm90aWZpY2F0aW9u IENvZGVzDQo+ICsjZGVmaW5lIFVTQl9DRENfTkVUV09SS19DT05ORUNUSU9OICAweDAwDQo+ICsN Cj4gKy8vIDYuMy4xIE5ldHdvcmtDb25uZWN0aW9uDQo+ICsjZGVmaW5lIE5FVFdPUktfQ09OTkVD VEVEICAgMHgwMQ0KPiArI2RlZmluZSBORVRXT1JLX0RJU0NPTk5FQ1QgIDB4MDANCj4gKw0KPiAr Ly8gVVNCIEhlYWRlciBmdW5jdGlvbmFsIERlc2NyaXB0b3INCj4gK3R5cGVkZWYgc3RydWN0IHsN Cj4gKyAgVUlOVDggICAgIEZ1bmN0aW9uTGVuZ3RoOw0KPiArICBVSU5UOCAgICAgRGVzY3JpcHRv clR5cGU7DQo+ICsgIFVJTlQ4ICAgICBEZXNjcmlwdG9yU3VidHlwZTsNCj4gKyAgVUlOVDE2ICAg IEJjZENkYzsNCj4gK30gVVNCX0hFQURFUl9GVU5fREVTQ1JJUFRPUjsNCj4gKw0KPiArLy8gVVNC IFVuaW9uIEZ1bmN0aW9uYWwgRGVzY3JpcHRvcg0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBV SU5UOCAgICBGdW5jdGlvbkxlbmd0aDsNCj4gKyAgVUlOVDggICAgRGVzY3JpcHRvclR5cGU7DQo+ ICsgIFVJTlQ4ICAgIERlc2NyaXB0b3JTdWJ0eXBlOw0KPiArICBVSU5UOCAgICBNYXN0ZXJJbnRl cmZhY2U7DQo+ICsgIFVJTlQ4ICAgIFNsYXZlSW50ZXJmYWNlOw0KPiArfSBVU0JfVU5JT05fRlVO X0RFU0NSSVBUT1I7DQo+ICsNCj4gKy8vIFVTQiBFdGhlcm5ldCBGdW5jdGlvbmFsIERlc2NyaXB0 b3INCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgVUlOVDggICAgIEZ1bmN0aW9uTGVuZ3RoOw0K PiArICBVSU5UOCAgICAgRGVzY3JpcHRvclR5cGU7DQo+ICsgIFVJTlQ4ICAgICBEZXNjcmlwdG9y U3VidHlwZTsNCj4gKyAgVUlOVDggICAgIE1hY0FkZHJlc3M7DQo+ICsgIFVJTlQzMiAgICBFdGhl cm5ldFN0YXRpc3RpY3M7DQo+ICsgIFVJTlQxNiAgICBNYXhTZWdtZW50U2l6ZTsNCj4gKyAgVUlO VDE2ICAgIE51bWJlck1jRmlsdGVyczsNCj4gKyAgVUlOVDggICAgIE51bWJlclBvd2VyRmlsdGVy czsNCj4gK30gVVNCX0VUSEVSTkVUX0ZVTl9ERVNDUklQVE9SOw0KPiArDQo+ICt0eXBlZGVmIHN0 cnVjdCB7DQo+ICsgIFVJTlQzMiAgICBVc0JpdFJhdGU7DQo+ICsgIFVJTlQzMiAgICBEc0JpdFJh dGU7DQo+ICt9IFVTQl9DT05ORUNUX1NQRUVEX0NIQU5HRTsNCj4gKw0KPiArLy8gUmVxdWVzdCBU eXBlIENvZGVzIGZvciBVU0IgRXRoZXJuZXQNCj4gKyNkZWZpbmUgVVNCX0VUSEVSTkVUX0dFVF9S RVFfVFlQRSAgMHhBMQ0KPiArI2RlZmluZSBVU0JfRVRIRVJORVRfU0VUX1JFUV9UWVBFICAweDIx DQo+ICsNCj4gKy8vIENsYXNzLVNwZWNpZmljIFJlcXVlc3QgQ29kZXMgZm9yIEV0aGVybmV0IHN1 YmNsYXNzDQo+ICsvLyBVU0IgRUNNIDEuMiBzcGVjaWZpY2F0aW9uLCBTZWN0aW9uIDYuMg0KPiAr I2RlZmluZSBTRVRfRVRIX01VTFRJQ0FTVF9GSUxURVJTX1JFUSAgICAgICAgICAgICAgICAweDQw DQo+ICsjZGVmaW5lIFNFVF9FVEhfUE9XRVJfTUFOQUdFTUVOVF9QQVRURVJOX0ZJTFRFUl9SRVEg IDB4NDENCj4gKyNkZWZpbmUgR0VUX0VUSF9QT1dFUl9NQU5BR0VNRU5UX1BBVFRFUk5fRklMVEVS X1JFUSAgMHg0Mg0KPiArI2RlZmluZSBTRVRfRVRIX1BBQ0tFVF9GSUxURVJfUkVRICAgICAgICAg ICAgICAgICAgICAweDQzDQo+ICsjZGVmaW5lIEdFVF9FVEhfU1RBVElTVElDX1JFUSAgICAgICAg ICAgICAgICAgICAgICAgIDB4NDQNCj4gKw0KPiArLy8gVVNCIEVDTSBjb21tYW5kIHJlcXVlc3Qg bGVuZ3RoDQo+ICsjZGVmaW5lIFVTQl9FVEhfUE9XRVJfRklMVEVSX0xFTkdUSCAgIDIgLy8gU2Vj dGlvbiA2LjIuMw0KPiArI2RlZmluZSBVU0JfRVRIX1BBQ0tFVF9GSUxURVJfTEVOR1RIICAwIC8v IFNlY3Rpb24gNi4yLjQNCj4gKyNkZWZpbmUgVVNCX0VUSF9TVEFUSVNUSUMgICAgICAgICAgICAg NCAvLyBTZWN0aW9uIDYuMi41DQo+ICsNCj4gKy8vIFVTQiBFdGhlcm5ldCBQYWNrZXQgRmlsdGVy IEJpdG1hcA0KPiArLy8gVVNCIEVDTSAxLjIgc3BlY2lmaWNhdGlvbiwgU2VjdGlvbiA2LjIuNA0K PiArI2RlZmluZSBVU0JfRVRIX1BBQ0tFVF9UWVBFX1BST01JU0NVT1VTICAgIEJJVDANCj4gKyNk ZWZpbmUgVVNCX0VUSF9QQUNLRVRfVFlQRV9BTExfTVVMVElDQVNUICBCSVQxDQo+ICsjZGVmaW5l IFVTQl9FVEhfUEFDS0VUX1RZUEVfRElSRUNURUQgICAgICAgQklUMg0KPiArI2RlZmluZSBVU0Jf RVRIX1BBQ0tFVF9UWVBFX0JST0FEQ0FTVCAgICAgIEJJVDMNCj4gKyNkZWZpbmUgVVNCX0VUSF9Q QUNLRVRfVFlQRV9NVUxUSUNBU1QgICAgICBCSVQ0DQo+ICsNCj4gKy8vIFVTQiBFdGhlcm5ldCBT dGF0aXN0aWNzIEZlYXR1cmUgU2VsZWN0b3IgQ29kZXMNCj4gKy8vIFVTQiBFQ00gMS4yIHNwZWNp ZmljYXRpb24sIFNlY3Rpb24gNi4yLjUNCj4gKyNkZWZpbmUgVVNCX0VUSF9YTUlUX09LICAgICAg ICAgICAgICAgICAweDAxDQo+ICsjZGVmaW5lIFVTQl9FVEhfUkNWX09LICAgICAgICAgICAgICAg ICAgMHgwMg0KPiArI2RlZmluZSBVU0JfRVRIX1hNSVRfRVJST1IgICAgICAgICAgICAgIDB4MDMN Cj4gKyNkZWZpbmUgVVNCX0VUSF9SQ1ZfRVJST1IgICAgICAgICAgICAgICAweDA0DQo+ICsjZGVm aW5lIFVTQl9FVEhfUkNWX05PX0JVRkZFUiAgICAgICAgICAgMHgwNQ0KPiArI2RlZmluZSBVU0Jf RVRIX0RJUkVDVEVEX0JZVEVTX1hNSVQgICAgIDB4MDYNCj4gKyNkZWZpbmUgVVNCX0VUSF9ESVJF Q1RFRF9GUkFNRVNfWE1JVCAgICAweDA3DQo+ICsjZGVmaW5lIFVTQl9FVEhfTVVMVElDQVNUX0JZ VEVTX1hNSVQgICAgMHgwOA0KPiArI2RlZmluZSBVU0JfRVRIX01VTFRJQ0FTVF9GUkFNRVNfWE1J VCAgIDB4MDkNCj4gKyNkZWZpbmUgVVNCX0VUSF9CUk9BRENBU1RfQllURVNfWE1JVCAgICAweDBB DQo+ICsjZGVmaW5lIFVTQl9FVEhfQlJPQURDQVNUX0ZSQU1FU19YTUlUICAgMHgwQg0KPiArI2Rl ZmluZSBVU0JfRVRIX0RJUkVDVEVEX0JZVEVTX1JDViAgICAgIDB4MEMNCj4gKyNkZWZpbmUgVVNC X0VUSF9ESVJFQ1RFRF9GUkFNRVNfUkNWICAgICAweDBEDQo+ICsjZGVmaW5lIFVTQl9FVEhfTVVM VElDQVNUX0JZVEVTX1JDViAgICAgMHgwRQ0KPiArI2RlZmluZSBVU0JfRVRIX01VTFRJQ0FTVF9G UkFNRVNfUkNWICAgIDB4MEYNCj4gKyNkZWZpbmUgVVNCX0VUSF9CUk9BRENBU1RfQllURVNfUkNW ICAgICAweDEwDQo+ICsjZGVmaW5lIFVTQl9FVEhfQlJPQURDQVNUX0ZSQU1FU19SQ1YgICAgMHgx MQ0KPiArI2RlZmluZSBVU0JfRVRIX1JDVl9DUkNfRVJST1IgICAgICAgICAgIDB4MTINCj4gKyNk ZWZpbmUgVVNCX0VUSF9UUkFOU01JVF9RVUVVRV9MRU5HVEggICAweDEzDQo+ICsjZGVmaW5lIFVT Ql9FVEhfUkNWX0VSUk9SX0FMSUdOTUVOVCAgICAgMHgxNA0KPiArI2RlZmluZSBVU0JfRVRIX1hN SVRfT05FX0NPTExJU0lPTiAgICAgIDB4MTUNCj4gKyNkZWZpbmUgVVNCX0VUSF9YTUlUX01PUkVf Q09MTElTSU9OUyAgICAweDE2DQo+ICsjZGVmaW5lIFVTQl9FVEhfWE1JVF9ERUZFUlJFRCAgICAg ICAgICAgMHgxNw0KPiArI2RlZmluZSBVU0JfRVRIX1hNSVRfTUFYX0NPTExJU0lPTlMgICAgIDB4 MTgNCj4gKyNkZWZpbmUgVVNCX0VUSF9SQ1ZfT1ZFUlJVTiAgICAgICAgICAgICAweDE5DQo+ICsj ZGVmaW5lIFVTQl9FVEhfWE1JVF9VTkRFUlJVTiAgICAgICAgICAgMHgxQQ0KPiArI2RlZmluZSBV U0JfRVRIX1hNSVRfSEVBUlRCRUFUX0ZBSUxVUkUgIDB4MUINCj4gKyNkZWZpbmUgVVNCX0VUSF9Y TUlUX1RJTUVTX0NSU19MT1NUICAgICAweDFDDQo+ICsjZGVmaW5lIFVTQl9FVEhfWE1JVF9MQVRF X0NPTExJU0lPTlMgICAgMHgxRA0KPiArDQo+ICsvLyBOSUMgSW5mb3JtYXRpb24NCj4gK3R5cGVk ZWYgc3RydWN0IHsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgIFNpZ25hdHVy ZTsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAgICpVc2JFdGg7DQo+ICsgIFVJ TlQxNiAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcnJ1cE9wRmxhZzsNCj4gKyAgVUlOVDY0 ICAgICAgICAgICAgICAgICAgICAgICAgIE1hcHBlZEFkZHI7DQo+ICsgIFBYRV9NQUNfQUREUiAg ICAgICAgICAgICAgICAgICBNY2FzdExpc3RbTUFYX01DQVNUX0FERFJFU1NfQ05UXTsNCj4gKyAg VUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgIE1jYXN0Q291bnQ7DQo+ICsgIFVJTlQ2NCAg ICAgICAgICAgICAgICAgICAgICAgICBNZWRpYUhlYWRlcltNQVhfWE1JVF9CVUZGRVJTXTsNCj4g KyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgIFR4QnVmZmVyQ291bnQ7DQo+ICsgIFVJ TlQxNiAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZTsNCj4gKyAgQk9PTEVBTiAgICAgICAg ICAgICAgICAgICAgICAgIENhblRyYW5zbWl0Ow0KPiArICBVSU5UMTYgICAgICAgICAgICAgICAg ICAgICAgICAgUmVjZWl2ZVN0YXR1czsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAg ICAgIFJ4RmlsdGVyOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgUnhGcmFt ZTsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgIFR4RnJhbWU7DQo+ICsgIFVJ TlQxNiAgICAgICAgICAgICAgICAgICAgICAgICBOZXR3b3JrQ29ubmVjdDsNCj4gKyAgVUlOVDgg ICAgICAgICAgICAgICAgICAgICAgICAgIENhYmxlRGV0ZWN0Ow0KPiArICBVSU5UMTYgICAgICAg ICAgICAgICAgICAgICAgICAgTWF4U2VnbWVudFNpemU7DQo+ICsgIEVGSV9NQUNfQUREUkVTUyAg ICAgICAgICAgICAgICBNYWNBZGRyOw0KPiArICBQWEVfQ1BCX1NUQVJUXzMxICAgICAgICAgICAg ICAgUHhlU3RhcnQ7DQo+ICsgIFBYRV9DUEJfSU5JVElBTElaRSAgICAgICAgICAgICBQeGVJbml0 Ow0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgUGVybU5vZGVBZGRyZXNzW1BY RV9NQUNfTEVOR1RIXTsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJl bnROb2RlQWRkcmVzc1tQWEVfTUFDX0xFTkdUSF07DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAg ICAgICAgICAgICBCcm9hZGNhc3ROb2RlQWRkcmVzc1tQWEVfTUFDX0xFTkdUSF07DQo+ICsgIEVG SV9VU0JfREVWSUNFX1JFUVVFU1QgICAgICAgICBSZXF1ZXN0Ow0KPiArICBFRklfRVZFTlQgICAg ICAgICAgICAgICAgICAgICAgUmF0ZUxpbWl0ZXI7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAg ICAgICAgICAgICBSYXRlTGltaXRpbmdDcmVkaXQ7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAg ICAgICAgICAgICBSYXRlTGltaXRpbmdDcmVkaXRDb3VudDsNCj4gKyAgVUlOVDMyICAgICAgICAg ICAgICAgICAgICAgICAgIFJhdGVMaW1pdGluZ1BvbGxUaW1lcjsNCj4gKyAgQk9PTEVBTiAgICAg ICAgICAgICAgICAgICAgICAgIFJhdGVMaW1pdGluZ0VuYWJsZTsNCj4gK30gTklDX0RBVEE7DQo+ ICsNCj4gKyNkZWZpbmUgTklDX0RBVEFfU0lHTkFUVVJFICBTSUdOQVRVUkVfMzIoJ24nLCAnaScs ICdjJywgJ2QnKQ0KPiArI2RlZmluZSBOSUNfREFUQV9GUk9NX0VES0lJX1VTQl9FVEhFUk5FVF9Q Uk9UT0NPTChhKSAgQ1IgKGEsIE5JQ19EQVRBLCBVc2JFdGgsIE5JQ19EQVRBX1NJR05BVFVSRSkN Cj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUg b3BlcmF0aW9uYWwgc3RhdGUgb2YgdGhlIFVOREkuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2Ri ICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFt W2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIg ZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVz dCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAg ICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsgIEByZXR2 YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZp Y2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0aGUg cGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZCB2YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQ T1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NU QVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX1VORElfR0VUX1NUQVRFKSgNCj4g KyAgSU4gIFBYRV9DREIgICAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgICAqTmljDQo+ICsg ICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBjaGFuZ2UgdGhl IFVOREkgb3BlcmF0aW9uYWwgc3RhdGUgZnJvbSBzdG9wcGVkIHRvIHN0YXJ0ZWQuDQo+ICsNCj4g KyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBi bG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50 ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwg RUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJl cXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZh aWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFS QU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZCB2YWx1ZS4NCj4gKyAg QHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKyoqLw0KPiAr dHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX1VO RElfU1RBUlQpKA0KPiArICBJTiAgUFhFX0NEQiAgICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRB ICAgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCBpcyB1c2Vk IHRvIGNoYW5nZSB0aGUgVU5ESSBvcGVyYXRpb25hbCBzdGF0ZSBmcm9tIHN0YXJ0ZWQgdG8gc3Rv cHBlZC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFu ZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0 aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4N Cj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4 ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAg VGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBF RklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlk IHZhbHVlLg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVk Lg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9V U0JfRVRIRVJORVRfVU5ESV9TVE9QKSgNCj4gKyAgSU4gIFBYRV9DREIgICAgICpDZGIsDQo+ICsg IElOICBOSUNfREFUQSAgICAqTmljDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNv bW1hbmQgaXMgdXNlZCB0byByZXRyaWV2ZSBpbml0aWFsaXphdGlvbiBpbmZvcm1hdGlvbiB0aGF0 IGlzDQo+ICsgIG5lZWRlZCBieSBkcml2ZXJzIGFuZCBhcHBsaWNhdGlvbnMgdG8gaW5pdGlhbGl6 ZWQgVU5ESS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29t bWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0 byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2 YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxs eS4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVk IGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAg ICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZh bCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZh bGlkIHZhbHVlLg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9y dGVkLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJ SV9VU0JfRVRIRVJORVRfVU5ESV9HRVRfSU5JVF9JTkZPKSgNCj4gKyAgSU4gIFBYRV9DREIgICAg ICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgICAqTmljDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0K PiArICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byByZXRyaWV2ZSBjb25maWd1cmF0aW9uIGluZm9y bWF0aW9uIGFib3V0DQo+ICsgIHRoZSBOSUMgYmVpbmcgY29udHJvbGxlZCBieSB0aGUgVU5ESS4N Cj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNj cmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0 d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NV Q0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAg QHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGlu ZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJl cXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5W QUxJRF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkIHZhbHVl Lg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiAr KiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRI RVJORVRfVU5ESV9HRVRfQ09ORklHX0lORk8pKA0KPiArICBJTiAgUFhFX0NEQiAgICAgKkNkYiwN Cj4gKyAgSU4gIE5JQ19EQVRBICAgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRo aXMgY29tbWFuZCByZXNldHMgdGhlIG5ldHdvcmsgYWRhcHRlciBhbmQgaW5pdGlhbGl6ZXMgVU5E SSB1c2luZw0KPiArICB0aGUgcGFyYW1ldGVycyBzdXBwbGllZCBpbiB0aGUgQ1BCLg0KPiArDQo+ ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3Ig YmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGlu dGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFs IEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSBy ZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBm YWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BB UkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQgdmFsdWUuDQo+ICsg IEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4g K3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9V TkRJX0lOSVRJQUxJWkUpKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNf REFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIHJlc2V0 cyB0aGUgbmV0d29yayBhZGFwdGVyIGFuZCByZWluaXRpYWxpemVzIHRoZSBVTkRJDQo+ICsgIHdp dGggdGhlIHNhbWUgcGFyYW1ldGVycyBwcm92aWRlZCBpbiB0aGUgSW5pdGlhbGl6ZSBjb21tYW5k Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRl c2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBO ZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklf U1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiAr ICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0 aW5nIHRoZSByZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUg cmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9J TlZBTElEX1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQgdmFs dWUuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9F VEhFUk5FVF9VTkRJX1JFU0VUKSgNCj4gKyAgSU4gIFBYRV9DREIgICAgICpDZGIsDQo+ICsgIElO ICBOSUNfREFUQSAgICAqTmljDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGUgU2h1dGRv d24gY29tbWFuZCByZXNldHMgdGhlIG5ldHdvcmsgYWRhcHRlciBhbmQgbGVhdmVzIGl0IGluIGEN Cj4gKyAgc2FmZSBzdGF0ZSBmb3IgYW5vdGhlciBkcml2ZXIgdG8gaW5pdGlhbGl6ZS4NCj4gKw0K PiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9y IGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBp bnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1Mg ICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZh bCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUg cmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3Qg ZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9Q QVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkIHZhbHVlLg0KPiAr ICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRf VU5ESV9TSFVURE9XTikoDQo+ICsgIElOICBQWEVfQ0RCICAgICAqQ2RiLA0KPiArICBJTiAgTklD X0RBVEEgICAgKk5pYw0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgVGhlIEludGVycnVwdCBF bmFibGVzIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gcmVhZCBhbmQvb3IgY2hhbmdlDQo+ICsgIHRo ZSBjdXJyZW50IGV4dGVybmFsIGludGVycnVwdCBlbmFibGUgc2V0dGluZ3MuDQo+ICsNCj4gKyAg QHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9j ay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJm YWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAg ICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJ X1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVl c3QuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxl ZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1F VEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZCB2YWx1ZS4NCj4gKyAgQHJl dHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKyoqLw0KPiArdHlw ZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX1VORElf SU5URVJSVVBUX0VOQUJMRSkoDQo+ICsgIElOICBQWEVfQ0RCICAgICAqQ2RiLA0KPiArICBJTiAg TklDX0RBVEEgICAgKk5pYw0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5k IGlzIHVzZWQgdG8gcmVhZCBhbmQgY2hhbmdlIHJlY2VpdmUgZmlsdGVycyBhbmQsDQo+ICsgIGlm IHN1cHBvcnRlZCwgcmVhZCBhbmQgY2hhbmdlIHRoZSBtdWx0aWNhc3QgTUFDIGFkZHJlc3MgZmls dGVyIGxpc3QuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNv bW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIg dG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVs bHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJl ZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAg ICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2 YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52 YWxpZCB2YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBv cnRlZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURL SUlfVVNCX0VUSEVSTkVUX1VORElfUkVDRUlWRV9GSUxURVIpKA0KPiArICBJTiAgUFhFX0NEQiAg ICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArLyoq DQo+ICsgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIGdldCBjdXJyZW50IHN0YXRpb24gYW5kIGJy b2FkY2FzdCBNQUMgYWRkcmVzc2VzDQo+ICsgIGFuZCwgaWYgc3VwcG9ydGVkLCB0byBjaGFuZ2Ug dGhlIGN1cnJlbnQgc3RhdGlvbiBNQUMgYWRkcmVzcy4NCj4gKw0KPiArICBAcGFyYW1baW5dICBD ZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFy YW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxl ciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1 ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAg ICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJl dHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRl dmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9mIHRo ZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkIHZhbHVlLg0KPiArICBAcmV0dmFsIEVGSV9VTlNV UFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklf U1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9TVEFUSU9OX0FERFJF U1MpKA0KPiArICBJTiAgUFhFX0NEQiAgICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAgICpO aWMNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIHJl YWQgYW5kIGNsZWFyIHRoZSBOSUMgdHJhZmZpYyBzdGF0aXN0aWNzLg0KPiArDQo+ICsgIEBwYXJh bVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBj b250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAg VGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1F T1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0K PiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVl IHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBP bmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQgdmFsdWUuDQo+ICsgIEByZXR2YWwg RUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5cGVkZWYN Cj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX1NUQVRJ U1RJQ1MpKA0KPiArICBJTiAgUFhFX0NEQiAgICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAg ICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRyYW5zbGF0ZSBhIG11bHRpY2FzdCBJ UHY0IG9yIElQdjYgYWRkcmVzcyB0byBhIG11bHRpY2FzdCBNQUMgYWRkcmVzcy4NCj4gKw0KPiAr ICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJs b2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRl cmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAg ICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBF RklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVx dWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFp bGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJB TUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkIHZhbHVlLg0KPiArICBA cmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ICt0 eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfVU5E SV9NQ0FTVF9JUFRPTUFDKSgNCj4gKyAgSU4gIFBYRV9DREIgICAgICpDZGIsDQo+ICsgIElOICBO SUNfREFUQSAgICAqTmljDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1hbmQg aXMgdXNlZCB0byByZWFkIGFuZCB3cml0ZSAoaWYgc3VwcG9ydGVkIGJ5IE5JQyBIL1cpDQo+ICsg IG5vbnZvbGF0aWxlIHN0b3JhZ2Ugb24gdGhlIE5JQy4NCj4gKw0KPiArICBAcGFyYW1baW5dICBD ZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFy YW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxl ciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1 ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAg ICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJl dHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRl dmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9mIHRo ZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkIHZhbHVlLg0KPiArICBAcmV0dmFsIEVGSV9VTlNV UFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklf U1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9OVl9EQVRBKSgNCj4g KyAgSU4gIFBYRV9DREIgICAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgICAqTmljDQo+ICsg ICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1hbmQgcmV0dXJucyB0aGUgY3VycmVudCBp bnRlcnJ1cHQgc3RhdHVzIGFuZC9vciB0aGUNCj4gKyAgdHJhbnNtaXR0ZWQgYnVmZmVyIGFkZHJl c3NlcyBhbmQgdGhlIGN1cnJlbnQgbWVkaWEgc3RhdHVzLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0g IENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBw YXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9s bGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJl cXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAg ICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiArICBA cmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEg ZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2Yg dGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQgdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJX1VO U1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VG SV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX0dFVF9TVEFUVVMp KA0KPiArICBJTiAgUFhFX0NEQiAgICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAgICpOaWMN Cj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIGZpbGwg dGhlIG1lZGlhIGhlYWRlcihzKSBpbiB0cmFuc21pdCBwYWNrZXQocykuDQo+ICsNCj4gKyAgQHBh cmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4N Cj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNl IGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAg ICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJ TUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3Qu DQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBk dWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVS IE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZCB2YWx1ZS4NCj4gKyAgQHJldHZh bCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKyoqLw0KPiArdHlwZWRl Zg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX1VORElfRklM TF9IRUFERVIpKA0KPiArICBJTiAgUFhFX0NEQiAgICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRB ICAgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoZSBUcmFuc21pdCBjb21tYW5k IGlzIHVzZWQgdG8gcGxhY2UgYSBwYWNrZXQgaW50byB0aGUgdHJhbnNtaXQgcXVldWUuDQo+ICsN Cj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRv ciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsg aW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNT ICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2 YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhl IHJlcXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0 IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURf UEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZCB2YWx1ZS4NCj4g KyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKyoqLw0K PiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVU X1VORElfVFJBTlNNSVQpKA0KPiArICBJTiAgUFhFX0NEQiAgICAgKkNkYiwNCj4gKyAgSU4gIE5J Q19EQVRBICAgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFdoZW4gdGhlIG5ldHdv cmsgYWRhcHRlciBoYXMgcmVjZWl2ZWQgYSBmcmFtZSwgdGhpcyBjb21tYW5kIGlzIHVzZWQNCj4g KyAgdG8gY29weSB0aGUgZnJhbWUgaW50byBkcml2ZXIvYXBwbGljYXRpb24gc3RvcmFnZS4NCj4g Kw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlw dG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29y ayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NF U1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJl dHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0 aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVl c3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJ RF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkIHZhbHVlLg0K PiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArKiov DQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJO RVRfVU5ESV9SRUNFSVZFKSgNCj4gKyAgSU4gIFBYRV9DREIgICAgICpDZGIsDQo+ICsgIElOICBO SUNfREFUQSAgICAqTmljDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1hbmQg cmVzZXRzIHRoZSBuZXR3b3JrIGFkYXB0ZXIgYW5kIGluaXRpYWxpemVzIFVOREkgdXNpbmcNCj4g KyAgdGhlIHBhcmFtZXRlcnMgc3VwcGxpZWQgaW4gdGhlIENQQi4NCj4gKw0KPiArICBAcGFyYW1b aW5dICAgICAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4N Cj4gKyAgQHBhcmFtW2luLCBvdXRdIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVy ZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAg ICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVG SV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1 ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWls ZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFN RVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQgdmFsdWUuDQo+ICsgIEBy ZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5 cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9JTklU SUFMSVpFKSgNCj4gKyAgSU4gICAgICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gT1VUICBOSUNf REFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIGlzIHVz ZWQgdG8gcmVhZCBhbmQgY2xlYXIgdGhlIE5JQyB0cmFmZmljIHN0YXRpc3RpY3MuDQo+ICsNCj4g KyAgQHBhcmFtW2luXSAgTmljICAgICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNl IGNvbnRyb2xsZXIgZGF0YS4NCj4gKyAgQHBhcmFtW2luXSAgRGJBZGRyICBEYXRhIEJsb2NrIEFk ZHJlc3MuDQo+ICsgIEBwYXJhbVtpbl0gIERiU2l6ZSAgRGF0YSBCbG9jayBTaXplLg0KPiArDQo+ ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1 Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0 IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNF X0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4g KyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhh cyBhbiBpbnZhbGlkIHZhbHVlLg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBO b3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJ QVBJICpFREtJSV9VU0JfRVRIRVJORVRfU1RBVElTVElDUykoDQo+ICsgIElOICBOSUNfREFUQSAg ICAqTmljLA0KPiArICBJTiAgVUlOVDY0ICAgICAgRGJBZGRyLA0KPiArICBJTiAgVUlOVDE2ICAg ICAgRGJTaXplDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGZ1bmN0aW9uIGlzIHVz ZWQgdG8gbWFuYWdlIGEgVVNCIGRldmljZSB3aXRoIHRoZSBidWxrIHRyYW5zZmVyIHBpcGUuIFRo ZSBlbmRwb2ludCBpcyBCdWxrIGluLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICAgICBDZGIgICAg ICAgICAgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBA cGFyYW1baW5dICAgICAgVGhpcyAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJX1VTQl9F VEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luLCBvdXRdIFBhY2tldCAg ICAgICAgQSBwb2ludGVyIHRvIHRoZSBidWZmZXIgb2YgZGF0YSB0aGF0IHdpbGwgYmUgdHJhbnNt aXR0ZWQgdG8gVVNCDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZSBv ciByZWNlaXZlZCBmcm9tIFVTQiBkZXZpY2UuDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSBQYWNrZXRM ZW5ndGggIEEgcG9pbnRlciB0byB0aGUgUGFja2V0TGVuZ3RoLg0KPiArDQo+ICsgIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBidWxrIHRyYW5zZmVyIGhhcyBiZWVuIHN1Y2Nlc3Nm dWxseSBleGVjdXRlZC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHRy YW5zZmVyIGZhaWxlZC4gVGhlIHRyYW5zZmVyIHN0YXR1cyBpcyByZXR1cm5lZCBpbiBzdGF0dXMu DQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvciBtb3JlIHBhcmFtZXRl cnMgYXJlIGludmFsaWQuDQo+ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgIFRoZSBy ZXF1ZXN0IGNvdWxkIG5vdCBiZSBzdWJtaXR0ZWQgZHVlIHRvIGEgbGFjayBvZiByZXNvdXJjZXMu DQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIFRoZSBjb250cm9sIHRyYW5zZmVy IGZhaWxzIGR1ZSB0byB0aW1lb3V0Lg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVT DQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfUkVDRUlWRSkoDQo+ICsgIElOICAgICBQ WEVfQ0RCICAgICAgICAgICAgICAgKkNkYiwNCj4gKyAgSU4gICAgIEVES0lJX1VTQl9FVEhFUk5F VF9QUk9UT0NPTCAqVGhpcywNCj4gKyAgSU4gT1VUIFZPSUQgICAgICAgICAgICAgICAgICAqUGFj a2V0LA0KPiArICBJTiBPVVQgVUlOVE4gICAgICAgICAgICAgICAgICpQYWNrZXRMZW5ndGgNCj4g KyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBtYW5hZ2Ug YSBVU0IgZGV2aWNlIHdpdGggdGhlIGJ1bGsgdHJhbnNmZXIgcGlwZS4gVGhlIGVuZHBvaW50IGlz IEJ1bGsgb3V0Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICAgICBDZGIgICAgICAgICAgIEEgcG9p bnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICAg ICAgVGhpcyAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9U T0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luLCBvdXRdIFBhY2tldCAgICAgICAgQSBwb2lu dGVyIHRvIHRoZSBidWZmZXIgb2YgZGF0YSB0aGF0IHdpbGwgYmUgdHJhbnNtaXR0ZWQgdG8gVVNC DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZSBvciByZWNlaXZlZCBm cm9tIFVTQiBkZXZpY2UuDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSBQYWNrZXRMZW5ndGggIEEgcG9p bnRlciB0byB0aGUgUGFja2V0TGVuZ3RoLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1Mg ICAgICAgICAgIFRoZSBidWxrIHRyYW5zZmVyIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRl ZC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHRyYW5zZmVyIGZhaWxl ZC4gVGhlIHRyYW5zZmVyIHN0YXR1cyBpcyByZXR1cm5lZCBpbiBzdGF0dXMuDQo+ICsgIEByZXR2 YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvciBtb3JlIHBhcmFtZXRlcnMgYXJlIGludmFs aWQuDQo+ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgIFRoZSByZXF1ZXN0IGNvdWxk IG5vdCBiZSBzdWJtaXR0ZWQgZHVlIHRvIGEgbGFjayBvZiByZXNvdXJjZXMuDQo+ICsgIEByZXR2 YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIFRoZSBjb250cm9sIHRyYW5zZmVyIGZhaWxzIGR1ZSB0 byB0aW1lb3V0Lg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJ ICpFREtJSV9VU0JfRVRIRVJORVRfVFJBTlNNSVQpKA0KPiArICBJTiAgICAgUFhFX0NEQiAgICAg ICAgICAgICAgICpDZGIsDQo+ICsgIElOICAgICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wg KlRoaXMsDQo+ICsgIElOIE9VVCBWT0lEICAgICAgICAgICAgICAgICAgKlBhY2tldCwNCj4gKyAg SU4gT1VUIFVJTlROICAgICAgICAgICAgICAgICAqUGFja2V0TGVuZ3RoDQo+ICsgICk7DQo+ICsN Cj4gKy8qKg0KPiArICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gbWFuYWdlIGEgVVNCIGRldmlj ZSB3aXRoIGFuIGludGVycnVwdCB0cmFuc2ZlciBwaXBlLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0g IFRoaXMgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BS T1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dICBJc05ld1RyYW5zZmVyICAgICBJZiBU UlVFLCBhIG5ldyB0cmFuc2ZlciB3aWxsIGJlIHN1Ym1pdHRlZCB0byBVU0IgY29udHJvbGxlci4g SWYNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UsIHRoZSBpbnRlcnJ1 cHQgdHJhbnNmZXIgaXMgZGVsZXRlZCBmcm9tIHRoZSBkZXZpY2UncyBpbnRlcnJ1cHQNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmZXIgcXVldWUuDQo+ICsgIEBwYXJh bVtpbl0gIFBvbGxpbmdJbnRlcnZhbCAgIEluZGljYXRlcyB0aGUgcGVyaW9kaWMgcmF0ZSwgaW4g bWlsbGlzZWNvbmRzLCB0aGF0IHRoZSB0cmFuc2ZlciBpcyB0byBiZQ0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBleGVjdXRlZC5UaGlzIHBhcmFtZXRlciBpcyByZXF1aXJlZCB3 aGVuIElzTmV3VHJhbnNmZXIgaXMgVFJVRS4gVGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHZhbHVlIG11c3QgYmUgYmV0d2VlbiAxIHRvIDI1NSwgb3RoZXJ3aXNlIEVGSV9J TlZBTElEX1BBUkFNRVRFUiBpcyByZXR1cm5lZC4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVGhlIHVuaXRzIGFyZSBpbiBtaWxsaXNlY29uZHMuDQo+ICsgIEBwYXJhbVtpbl0g IFJlcXVlc3QgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRUZJX1VTQl9ERVZJQ0VfUkVRVUVT VCBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBhc3lu Y2hyb25vdXMgVVNCIHRyYW5zZmVyIHJlcXVlc3QgdHJhbnNmZXIgaGFzIGJlZW4gc3VjY2Vzc2Z1 bGx5IGV4ZWN1dGVkLg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgYXN5 bmNocm9ub3VzIFVTQiB0cmFuc2ZlciByZXF1ZXN0IGZhaWxlZC4NCj4gKw0KPiArKiovDQo+ICt0 eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfSU5U RVJSVVBUKSgNCj4gKyAgSU4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAgKlRoaXMsDQo+ ICsgIElOIEJPT0xFQU4gICAgICAgICAgICAgICAgIElzTmV3VHJhbnNmZXIsDQo+ICsgIElOIFVJ TlROICAgICAgICAgICAgICAgICAgIFBvbGxpbmdJbnRlcnZhbCwNCj4gKyAgSU4gRUZJX1VTQl9E RVZJQ0VfUkVRVUVTVCAgKlJlcXVlc3QNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFJldHJp ZXZlcyB0aGUgVVNCIEV0aGVybmV0IE1hYyBBZGRyZXNzLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0g IFRoaXMgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9D T0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtvdXRdIE1hY0FkZHJlc3MgICAgQSBwb2ludGVyIHRv IHRoZSBjYWxsZXIgYWxsb2NhdGVkIFVTQiBFdGhlcm5ldCBNYWMgQWRkcmVzcy4NCj4gKw0KPiAr ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgVVNCIEhlYWRlciBGdW5jdGlvbmFs IGRlc2NyaXB0b3Igd2FzIHJldHJpZXZlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJ X0lOVkFMSURfUEFSQU1FVEVSIFVzYkhlYWRlckZ1bkRlc2NyaXB0b3IgaXMgTlVMTC4NCj4gKyAg QHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgVGhlIFVTQiBIZWFkZXIgRnVuY3Rpb25hbCBk ZXNjcmlwdG9yIHdhcyBub3QgZm91bmQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFU VVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9HRVRfRVRIX01BQ19BRERSRVNTKSgNCj4gKyAgSU4g IEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAqVGhpcywNCj4gKyAgT1VUIEVGSV9NQUNfQURE UkVTUyAgICAgICAqTWFjQWRkcmVzcw0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgUmV0cmll dmVzIHRoZSBVU0IgRXRoZXJuZXQgQnVsayB0cmFuc2ZlciBkYXRhIHNpemUuDQo+ICsNCj4gKyAg QHBhcmFtW2luXSAgVGhpcyAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhF Uk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW291dF0gQnVsa1NpemUgICAgICBB IHBvaW50ZXIgdG8gdGhlIEJ1bGsgdHJhbnNmZXIgZGF0YSBzaXplLg0KPiArDQo+ICsgIEByZXR2 YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBVU0IgSGVhZGVyIEZ1bmN0aW9uYWwgZGVzY3Jp cHRvciB3YXMgcmV0cmlldmVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJ RF9QQVJBTUVURVIgVXNiSGVhZGVyRnVuRGVzY3JpcHRvciBpcyBOVUxMLg0KPiArICBAcmV0dmFs IEVGSV9OT1RfRk9VTkQgICAgICAgICBUaGUgVVNCIEhlYWRlciBGdW5jdGlvbmFsIGRlc2NyaXB0 b3Igd2FzIG5vdCBmb3VuZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiAr KEVGSUFQSSAqRURLSUlfVVNCX0VUSF9NQVhfQlVMS19TSVpFKSgNCj4gKyAgSU4gIEVES0lJX1VT Ql9FVEhFUk5FVF9QUk9UT0NPTCAqVGhpcywNCj4gKyAgT1VUIFVJTlROICAgICAgICAgICAgICAg ICAqQnVsa1NpemUNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFJldHJpZXZlcyB0aGUgVVNC IEhlYWRlciBmdW5jdGlvbmFsIERlc2NyaXB0b3IuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhp cyAgICAgICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhFUk5FVF9Q Uk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW291dF0gVXNiSGVhZGVyRnVuRGVzY3JpcHRv ciBBIHBvaW50ZXIgdG8gdGhlIGNhbGxlciBhbGxvY2F0ZWQgVVNCIEhlYWRlciBGdW5jdGlvbmFs IERlc2NyaXB0b3IuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhl IFVTQiBIZWFkZXIgRnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcyByZXRyaWV2ZWQgc3VjY2Vzc2Z1 bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBVc2JIZWFkZXJGdW5EZXNj cmlwdG9yIGlzIE5VTEwuDQo+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgIFRoZSBV U0IgSGVhZGVyIEZ1bmN0aW9uYWwgZGVzY3JpcHRvciB3YXMgbm90IGZvdW5kLg0KPiArKiovDQo+ ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfSEVBREVSX0ZV TkNUSU9OQUxfREVTQ1JJUFRPUikoDQo+ICsgIElOIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NP TCAgICAgICpUaGlzLA0KPiArICBPVVQgVVNCX0hFQURFUl9GVU5fREVTQ1JJUFRPUiAqVXNiSGVh ZGVyRnVuRGVzY3JpcHRvcg0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgUmV0cmlldmVzIHRo ZSBVU0IgVW5pb24gZnVuY3Rpb25hbCBEZXNjcmlwdG9yLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0g IFRoaXMgICAgICAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFREtJSV9VU0JfRVRIRVJO RVRfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtvdXRdIFVzYlVuaW9uRnVuRGVzY3Jp cHRvciAgQSBwb2ludGVyIHRvIHRoZSBjYWxsZXIgYWxsb2NhdGVkIFVTQiBVbmlvbiBGdW5jdGlv bmFsIERlc2NyaXB0b3IuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAg VGhlIFVTQiBVbmlvbiBGdW5jdGlvbmFsIGRlc2NyaXB0b3Igd2FzIHJldHJpZXZlZCBzdWNjZXNz ZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIFVzYlVuaW9uRnVuRGVz Y3JpcHRvciBpcyBOVUxMLg0KPiArICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICBUaGUg VVNCIFVuaW9uIEZ1bmN0aW9uYWwgZGVzY3JpcHRvciB3YXMgbm90IGZvdW5kLg0KPiArKiovDQo+ ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfVU5JT05fRlVO Q1RJT05BTF9ERVNDUklQVE9SKSgNCj4gKyAgSU4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09M ICAgICAqVGhpcywNCj4gKyAgT1VUIFVTQl9VTklPTl9GVU5fREVTQ1JJUFRPUiAqVXNiVW5pb25G dW5EZXNjcmlwdG9yDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBSZXRyaWV2ZXMgdGhlIFVT QiBFdGhlcm5ldCBmdW5jdGlvbmFsIERlc2NyaXB0b3IuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAg VGhpcyAgICAgICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhFUk5F VF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW291dF0gVXNiRXRoRnVuRGVzY3JpcHRv ciAgICBBIHBvaW50ZXIgdG8gdGhlIGNhbGxlciBhbGxvY2F0ZWQgVVNCIEV0aGVybmV0IEZ1bmN0 aW9uYWwgRGVzY3JpcHRvci4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAg ICBUaGUgVVNCIEV0aGVybmV0IEZ1bmN0aW9uYWwgZGVzY3JpcHRvciB3YXMgcmV0cmlldmVkIHN1 Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgVXNiRXRoRnVu RGVzY3JpcHRvciBpcyBOVUxMLg0KPiArICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICBU aGUgVVNCIEV0aGVybmV0IEZ1bmN0aW9uYWwgZGVzY3JpcHRvciB3YXMgbm90IGZvdW5kLg0KPiAr KiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRI RVJORVRfRlVOQ1RJT05BTF9ERVNDUklQVE9SKSgNCj4gKyAgSU4gRURLSUlfVVNCX0VUSEVSTkVU X1BST1RPQ09MICAgICAgICAqVGhpcywNCj4gKyAgT1VUIFVTQl9FVEhFUk5FVF9GVU5fREVTQ1JJ UFRPUiAqVXNiRXRoRnVuRGVzY3JpcHRvcg0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgVGhp cyByZXF1ZXN0IHNldHMgdGhlIEV0aGVybmV0IGRldmljZSBtdWx0aWNhc3QgZmlsdGVycyBhcyBz cGVjaWZpZWQgaW4gdGhlDQo+ICsgIHNlcXVlbnRpYWwgbGlzdCBvZiA0OCBiaXQgRXRoZXJuZXQg bXVsdGljYXN0IGFkZHJlc3Nlcy4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAg ICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGlu c3RhbmNlLg0KPiArICBAcGFyYW1baW5dICBWYWx1ZSAgICAgICAgICAgICAgICAgIE51bWJlciBv ZiBmaWx0ZXJzLg0KPiArICBAcGFyYW1baW5dICBNY2FzdEFkZHIgICAgICAgICAgICAgIEEgcG9p bnRlciB0byB0aGUgdmFsdWUgb2YgdGhlIG11bHRpY2FzdCBhZGRyZXNzZXMuDQo+ICsNCj4gKyAg QHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vz c2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2Nj dXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJS T1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBA cmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFu IGludmFsaWQgdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBz dXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkg KkVES0lJX1VTQl9FVEhFUk5FVF9TRVRfRVRIX01VTFRJQ0FTVF9GSUxURVJTKSgNCj4gKyAgSU4g RURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICpUaGlzLA0KPiArICBJTiBVSU5UMTYgICAgICAg ICAgICAgICAgVmFsdWUsDQo+ICsgIElOIFZPSUQgICAgICAgICAgICAgICAgICAqTWNhc3RBZGRy DQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIHJlcXVlc3Qgc2V0cyB1cCB0aGUgc3Bl Y2lmaWVkIEV0aGVybmV0IHBvd2VyIG1hbmFnZW1lbnQgcGF0dGVybiBmaWx0ZXIgYXMNCj4gKyAg ZGVzY3JpYmVkIGluIHRoZSBkYXRhIHN0cnVjdHVyZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBU aGlzICAgICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRURLSUlfVVNCX0VUSEVSTkVU X1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dICBWYWx1ZSAgICAgICAgICAgICAg ICAgIE51bWJlciBvZiBmaWx0ZXJzLg0KPiArICBAcGFyYW1baW5dICBMZW5ndGggICAgICAgICAg ICAgICAgIFNpemUgb2YgdGhlIHBvd2VyIG1hbmFnZW1lbnQgcGF0dGVybiBmaWx0ZXIgZGF0YS4N Cj4gKyAgQHBhcmFtW2luXSAgUGF0dGVybkZpbHRlciAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhl IHBvd2VyIG1hbmFnZW1lbnQgcGF0dGVybiBmaWx0ZXIgc3RydWN0dXJlLg0KPiArDQo+ICsgIEBy ZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3Nm dWxseS4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3Vy cmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9S ICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJl dHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBp bnZhbGlkIHZhbHVlLg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3Vw cG9ydGVkLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpF REtJSV9VU0JfRVRIRVJORVRfU0VUX0VUSF9QT1dFUl9NQU5BR0VfUEFUVEVSTl9GSUxURVIpKA0K PiArICBJTiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgKlRoaXMsDQo+ICsgIElOIFVJTlQx NiAgICAgICAgICAgICAgICBWYWx1ZSwNCj4gKyAgSU4gVUlOVDE2ICAgICAgICAgICAgICAgIExl bmd0aCwNCj4gKyAgSU4gVk9JRCAgICAgICAgICAgICAgICAgICpQYXR0ZXJuRmlsdGVyDQo+ICsg ICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIHJlcXVlc3QgcmV0cmlldmVzIHRoZSBzdGF0dXMg b2YgdGhlIHNwZWNpZmllZCBFdGhlcm5ldCBwb3dlciBtYW5hZ2VtZW50DQo+ICsgIHBhdHRlcm4g ZmlsdGVyIGZyb20gdGhlIGRldmljZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAg ICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09M IGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dICBWYWx1ZSAgICAgICAgICAgICAgICAgIFRoZSBm aWx0ZXIgbnVtYmVyLg0KPiArICBAcGFyYW1bb3V0XSBQYXR0ZXJuQWN0aXZlICAgICAgICAgIEEg cG9pbnRlciB0byB0aGUgcGF0dGVybiBhY3RpdmUgYm9vbGVhbi4NCj4gKw0KPiArICBAcmV0dmFs IEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHku DQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBl eGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAg IFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwg RUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxp ZCB2YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRl ZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlf VVNCX0VUSEVSTkVUX0dFVF9FVEhfUE9XRVJfTUFOQUdFX1BBVFRFUk5fRklMVEVSKSgNCj4gKyAg SU4gICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgKlRoaXMsDQo+ICsgIElOICAgVUlOVDE2 ICAgICAgICAgICAgICAgIFZhbHVlLA0KPiArICBPVVQgIEJPT0xFQU4gICAgICAgICAgICAgICAq UGF0dGVybkFjdGl2ZQ0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyByZXF1ZXN0IGlz IHVzZWQgdG8gY29uZmlndXJlIGRldmljZSBFdGhlcm5ldCBwYWNrZXQgZmlsdGVyIHNldHRpbmdz Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0 aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5d ICBWYWx1ZSAgICAgICAgICAgICBQYWNrZXQgRmlsdGVyIEJpdG1hcC4NCj4gKw0KPiArICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVs bHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJl ZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAg ICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2 YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52 YWxpZCB2YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBv cnRlZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURL SUlfVVNCX0VUSEVSTkVUX1NFVF9FVEhfUEFDS0VUX0ZJTFRFUikoDQo+ICsgIElOIEVES0lJX1VT Ql9FVEhFUk5FVF9QUk9UT0NPTCAqVGhpcywNCj4gKyAgSU4gVUlOVDE2ICAgICAgICAgICAgICAg IFZhbHVlDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIHJlcXVlc3QgaXMgdXNlZCB0 byByZXRyaWV2ZSBhIHN0YXRpc3RpYyBiYXNlZCBvbiB0aGUgZmVhdHVyZSBzZWxlY3Rvci4NCj4g Kw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRo ZSBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0g IEZlYXR1cmVTZWxlY3RvciAgICAgICBWYWx1ZSBvZiB0aGUgZmVhdHVyZSBzZWxlY3Rvci4NCj4g KyAgQHBhcmFtW291dF0gU3RhdGlzdGljICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgMzIg Yml0IHVuc2lnbmVkIGludGVnZXIuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAg ICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVG SV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1 ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWls ZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFN RVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQgdmFsdWUuDQo+ICsgIEBy ZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5 cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9HRVRf RVRIX1NUQVRJU1RJQykoDQo+ICsgIElOICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpU aGlzLA0KPiArICBJTiAgVUlOVDE2ICAgICAgICAgICAgICAgICBGZWF0dXJlU2VsZWN0b3IsDQo+ ICsgIE9VVCBWT0lEICAgICAgICAgICAgICAgICAgICpTdGF0aXN0aWMNCj4gKyAgKTsNCj4gKw0K PiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9HRVRfU1RB VEUgICAgICAgICAgIFVzYkV0aFVuZGlHZXRTdGF0ZTsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVU X1VORElfU1RBUlQgICAgICAgICAgICAgICBVc2JFdGhVbmRpU3RhcnQ7DQo+ICsgIEVES0lJX1VT Ql9FVEhFUk5FVF9VTkRJX1NUT1AgICAgICAgICAgICAgICAgVXNiRXRoVW5kaVN0b3A7DQo+ICsg IEVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX0dFVF9JTklUX0lORk8gICAgICAgVXNiRXRoVW5kaUdl dEluaXRJbmZvOw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9HRVRfQ09ORklHX0lORk8g ICAgIFVzYkV0aFVuZGlHZXRDb25maWdJbmZvOw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfVU5E SV9JTklUSUFMSVpFICAgICAgICAgIFVzYkV0aFVuZGlJbml0aWFsaXplOw0KPiArICBFREtJSV9V U0JfRVRIRVJORVRfVU5ESV9SRVNFVCAgICAgICAgICAgICAgIFVzYkV0aFVuZGlSZXNldDsNCj4g KyAgRURLSUlfVVNCX0VUSEVSTkVUX1VORElfU0hVVERPV04gICAgICAgICAgICBVc2JFdGhVbmRp U2h1dGRvd247DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX0lOVEVSUlVQVF9FTkFCTEUg ICAgVXNiRXRoVW5kaUludGVycnVwdEVuYWJsZTsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1VO RElfUkVDRUlWRV9GSUxURVIgICAgICBVc2JFdGhVbmRpUmVjZWl2ZUZpbHRlcjsNCj4gKyAgRURL SUlfVVNCX0VUSEVSTkVUX1VORElfU1RBVElPTl9BRERSRVNTICAgICBVc2JFdGhVbmRpU3RhdGlv bkFkZHJlc3M7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX1NUQVRJU1RJQ1MgICAgICAg ICAgVXNiRXRoVW5kaVN0YXRpc3RpY3M7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX01D QVNUX0lQVE9NQUMgICAgICAgVXNiRXRoVW5kaU1jYXN0SXAyTWFjOw0KPiArICBFREtJSV9VU0Jf RVRIRVJORVRfVU5ESV9OVl9EQVRBICAgICAgICAgICAgIFVzYkV0aFVuZGlOdkRhdGE7DQo+ICsg IEVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX0dFVF9TVEFUVVMgICAgICAgICAgVXNiRXRoVW5kaUdl dFN0YXR1czsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1VORElfRklMTF9IRUFERVIgICAgICAg ICBVc2JFdGhVbmRpRmlsbEhlYWRlcjsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1VORElfVFJB TlNNSVQgICAgICAgICAgICBVc2JFdGhVbmRpVHJhbnNtaXQ7DQo+ICsgIEVES0lJX1VTQl9FVEhF Uk5FVF9VTkRJX1JFQ0VJVkUgICAgICAgICAgICAgVXNiRXRoVW5kaVJlY2VpdmU7DQo+ICt9IEVE S0lJX1VTQl9FVEhFUk5FVF9VTkRJOw0KPiArDQo+ICsvLyBUaGUgRURLSUlfVVNCX0VUSEVSTkVU X1BST1RPQ09MIHByb3ZpZGVzIHNvbWUgYmFzaWMgVVNCIEV0aGVybmV0IGRldmljZSByZWxldmFu dA0KPiArLy8gZGVzY3JpcHRvciBhbmQgc3BlY2lmaWMgcmVxdWVzdHMuDQo+ICtzdHJ1Y3QgX0VE S0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCB7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9VTkRJ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2JFdGhVbmRpOw0KPiArICAvLyBm b3IgY2FsbGluZyB0aGUgVU5ESSBjaGlsZCBmdW5jdGlvbnMNCj4gKyAgRURLSUlfVVNCX0VUSEVS TkVUX0lOSVRJQUxJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzYkV0aEluaXRpYWxp emU7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9TVEFUSVNUSUNTICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBVc2JFdGhTdGF0aXN0aWNzOw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfUkVD RUlWRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNiRXRoUmVjZWl2ZTsNCj4gKyAg RURLSUlfVVNCX0VUSEVSTkVUX1RSQU5TTUlUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFVzYkV0aFRyYW5zbWl0Ow0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfSU5URVJSVVBUICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgVXNiRXRoSW50ZXJydXB0Ow0KPiArICBFREtJSV9VU0Jf R0VUX0VUSF9NQUNfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNiRXRoTWFj QWRkcmVzczsNCj4gKyAgRURLSUlfVVNCX0VUSF9NQVhfQlVMS19TSVpFICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFVzYkV0aE1heEJ1bGtTaXplOw0KPiArICBFREtJSV9VU0JfSEVBREVS X0ZVTkNUSU9OQUxfREVTQ1JJUFRPUiAgICAgICAgICAgICAgICAgICAgVXNiSGVhZGVyRnVuRGVz Y3JpcHRvcjsNCj4gKyAgRURLSUlfVVNCX1VOSU9OX0ZVTkNUSU9OQUxfREVTQ1JJUFRPUiAgICAg ICAgICAgICAgICAgICAgIFVzYlVuaW9uRnVuRGVzY3JpcHRvcjsNCj4gKyAgRURLSUlfVVNCX0VU SEVSTkVUX0ZVTkNUSU9OQUxfREVTQ1JJUFRPUiAgICAgICAgICAgICAgICAgIFVzYkV0aEZ1bkRl c2NyaXB0b3I7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9TRVRfRVRIX01VTFRJQ0FTVF9GSUxU RVJTICAgICAgICAgICAgICBTZXRVc2JFdGhNY2FzdEZpbHRlcjsNCj4gKyAgRURLSUlfVVNCX0VU SEVSTkVUX1NFVF9FVEhfUE9XRVJfTUFOQUdFX1BBVFRFUk5fRklMVEVSICAgIFNldFVzYkV0aFBv d2VyUGF0dGVybkZpbHRlcjsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX0dFVF9FVEhfUE9XRVJf TUFOQUdFX1BBVFRFUk5fRklMVEVSICAgIEdldFVzYkV0aFBvd2VyUGF0dGVybkZpbHRlcjsNCj4g KyAgRURLSUlfVVNCX0VUSEVSTkVUX1NFVF9FVEhfUEFDS0VUX0ZJTFRFUiAgICAgICAgICAgICAg ICAgIFNldFVzYkV0aFBhY2tldEZpbHRlcjsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX0dFVF9F VEhfU1RBVElTVElDICAgICAgICAgICAgICAgICAgICAgIEdldFVzYkV0aFN0YXRpc3RpYzsNCj4g K307DQo+ICsNCj4gK2V4dGVybiBFRklfR1VJRCAgZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlkOw0K PiArDQo+ICsjZW5kaWYNCj4gZGlmZiAtLWdpdCBhL1VzYk5ldHdvcmtQa2cvTmV0d29ya0NvbW1v bi9Ecml2ZXJCaW5kaW5nLmggYi9Vc2JOZXR3b3JrUGtnL05ldHdvcmtDb21tb24vRHJpdmVyQmlu ZGluZy5oDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uMDQx NmNlMTMyMzAyDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvVXNiTmV0d29ya1BrZy9OZXR3b3Jr Q29tbW9uL0RyaXZlckJpbmRpbmcuaA0KPiBAQCAtMCwwICsxLDI2NiBAQA0KPiArLyoqIEBmaWxl DQo+ICsgIEhlYWRlciBmaWxlIGZvciBmb3IgVVNCIG5ldHdvcmsgY29tbW9uIGRyaXZlcg0KPiAr DQo+ICsgIENvcHlyaWdodCAoYykgMjAyMywgQW1lcmljYW4gTWVnYXRyZW5kcyBJbnRlcm5hdGlv bmFsIExMQy4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICsgIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ICsqKi8NCj4gKw0KPiArI2lmbmRlZiBfRFJJ VkVSX0JJTkRJTkdfSF8NCj4gKyNkZWZpbmUgX0RSSVZFUl9CSU5ESU5HX0hfDQo+ICsNCj4gKyNp bmNsdWRlIDxMaWJyYXJ5L1VlZmlEcml2ZXJFbnRyeVBvaW50Lmg+DQo+ICsjaW5jbHVkZSA8TGli cmFyeS9VZWZpQm9vdFNlcnZpY2VzVGFibGVMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1Vl ZmlMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0RldmljZVBhdGhMaWIuaD4NCj4gKyNpbmNs dWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9NZW1vcnlBbGxv Y2F0aW9uTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9QY2RMaWIuaD4NCj4gKyNpbmNsdWRl IDxMaWJyYXJ5L0Jhc2VNZW1vcnlMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlVc2JM aWIuaD4NCj4gKyNpbmNsdWRlIDxQcm90b2NvbC9Vc2JJby5oPg0KPiArI2luY2x1ZGUgPFByb3Rv Y29sL05ldHdvcmtJbnRlcmZhY2VJZGVudGlmaWVyLmg+DQo+ICsjaW5jbHVkZSA8UHJvdG9jb2wv RWRrSUlVc2JFdGhlcm5ldFByb3RvY29sLmg+DQo+ICsNCj4gKyNkZWZpbmUgTkVUV09SS19DT01N T05fRFJJVkVSX1ZFUlNJT04gICAgMQ0KPiArI2RlZmluZSBORVRXT1JLX0NPTU1PTl9QT0xMSU5H X0lOVEVSVkFMICAweDEwDQo+ICsjZGVmaW5lIFJYX0JVRkZFUl9DT1VOVCAgICAgICAgICAgICAg ICAgIDMyDQo+ICsjZGVmaW5lIFRYX0JVRkZFUl9DT1VOVCAgICAgICAgICAgICAgICAgIDMyDQo+ ICsjZGVmaW5lIE1FTU9SWV9SRVFVSVJFICAgICAgICAgICAgICAgICAgIDANCj4gKw0KPiArI2Rl ZmluZSBVTkRJX0RFVl9TSUdOQVRVUkUgIFNJR05BVFVSRV8zMigndScsJ24nLCdkJywnaScpDQo+ ICsjZGVmaW5lIFVORElfREVWX0ZST01fVEhJUyhhKSAgQ1IoYSwgTklDX0RFVklDRSwgTmlpUHJv dG9jb2wsIFVORElfREVWX1NJR05BVFVSRSkNCj4gKyNkZWZpbmUgVU5ESV9ERVZfRlJPTV9OSUMo YSkgICBDUihhLCBOSUNfREVWSUNFLCBOaWNJbmZvLCBVTkRJX0RFVl9TSUdOQVRVUkUpDQo+ICsN Cj4gKyNwcmFnbWEgcGFjaygxKQ0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UOCAgICAg RGVzdEFkZHJbUFhFX0hXQUREUl9MRU5fRVRIRVJdOw0KPiArICBVSU5UOCAgICAgU3JjQWRkcltQ WEVfSFdBRERSX0xFTl9FVEhFUl07DQo+ICsgIFVJTlQxNiAgICBQcm90b2NvbDsNCj4gK30gRXRo ZXJuZXRIZWFkZXI7DQo+ICsjcHJhZ21hIHBhY2soKQ0KPiArDQo+ICt0eXBlZGVmIHN0cnVjdCB7 DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpZ25h dHVyZTsNCj4gKyAgRUZJX05FVFdPUktfSU5URVJGQUNFX0lERU5USUZJRVJfUFJPVE9DT0wgICAg TmlpUHJvdG9jb2w7DQo+ICsgIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIERldmljZUhhbmRsZTsNCj4gKyAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAg ICAgICAgICAgICAgICAgKkJhc2VEZXZQYXRoOw0KPiArICBFRklfREVWSUNFX1BBVEhfUFJPVE9D T0wgICAgICAgICAgICAgICAgICAgICAqRGV2UGF0aDsNCj4gKyAgTklDX0RBVEEgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTmljSW5mbzsNCj4gKyAgVk9JRCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlJlY2VpdmVCdWZmZXI7DQo+ICt9IE5JQ19E RVZJQ0U7DQo+ICsNCj4gK3R5cGVkZWYgVk9JRCAoKkFQSV9GVU5DKSgNCj4gKyAgUFhFX0NEQiAq LA0KPiArICBOSUNfREFUQSAqDQo+ICsgICk7DQo+ICsNCj4gK2V4dGVybiBQWEVfU1dfVU5ESSAg ICAgICAgICAgICAgICAgICAqZ1B4ZTsNCj4gK2V4dGVybiBOSUNfREVWSUNFICAgICAgICAgICAg ICAgICAgICAqZ0xhbkRldmljZUxpc3RbTUFYX0xBTl9JTlRFUkZBQ0VdOw0KPiArZXh0ZXJuIEVG SV9DT01QT05FTlRfTkFNRTJfUFJPVE9DT0wgIGdOZXR3b3JrQ29tbW9uQ29tcG9uZW50TmFtZTI7 DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArTmV0d29ya0NvbW1vblN1cHBvcnRl ZCAoDQo+ICsgIElOIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElO IEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgSU4g RUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAqUmVtYWluaW5nRGV2aWNlUGF0aA0KPiArICAp Ow0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK05ldHdvcmtDb21tb25Ecml2ZXJT dGFydCAoDQo+ICsgIElOIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgKlRoaXMsDQo+ICsg IElOIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAg SU4gRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAqUmVtYWluaW5nRGV2aWNlUGF0aA0KPiAr ICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK05ldHdvcmtDb21tb25Ecml2 ZXJTdG9wICgNCj4gKyAgSU4gIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgKlRoaXMsDQo+ ICsgIElOICBFRklfSEFORExFICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlck9mQ2hpbGRyZW4sDQo+ ICsgIElOICBFRklfSEFORExFICAgICAgICAgICAgICAgICAgICpDaGlsZEhhbmRsZUJ1ZmZlcg0K PiArICApOw0KPiArDQo+ICtWT0lEDQo+ICtQeGVTdHJ1Y3RJbml0ICgNCj4gKyAgT1VUIFBYRV9T V19VTkRJICAqUHhlU3cNCj4gKyAgKTsNCj4gKw0KPiArVk9JRA0KPiArVXBkYXRlTmljTnVtICgN Cj4gKyAgSU4gICAgICBOSUNfREFUQSAgICAgKk5pYywNCj4gKyAgSU4gT1VUICBQWEVfU1dfVU5E SSAgKlB4ZVN3DQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArVW5k aUFwaUVudHJ5ICgNCj4gKyAgSU4gIFVJTlQ2NCAgQ2RiDQo+ICsgICk7DQo+ICsNCj4gK1VJTlRO DQo+ICtNYXBJdCAoDQo+ICsgIElOIE5JQ19EQVRBICAqTmljLA0KPiArICBJTiBVSU5UNjQgICAg TWVtQWRkciwNCj4gKyAgSU4gVUlOVDMyICAgIFNpemUsDQo+ICsgIElOIFVJTlQzMiAgICBEaXJl Y3Rpb24sDQo+ICsgIE9VVCBVSU5UNjQgICBNYXBwZWRBZGRyDQo+ICsgICk7DQo+ICsNCj4gK1ZP SUQNCj4gK1VuTWFwSXQgKA0KPiArICBJTiBOSUNfREFUQSAgKk5pYywNCj4gKyAgSU4gVUlOVDY0 ICAgIE1lbUFkZHIsDQo+ICsgIElOIFVJTlQzMiAgICBTaXplLA0KPiArICBJTiBVSU5UMzIgICAg RGlyZWN0aW9uLA0KPiArICBJTiBVSU5UNjQgICAgTWFwcGVkQWRkcg0KPiArICApOw0KPiArDQo+ ICtWT0lEDQo+ICtVbmRpR2V0U3RhdGUgKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsg IElOICBOSUNfREFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtWT0lEDQo+ICtVbmRpU3RhcnQg KA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiAr ICApOw0KPiArDQo+ICtWT0lEDQo+ICtVbmRpU3RvcCAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNk YiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4gK1ZPSUQNCj4gK1Vu ZGlHZXRJbml0SW5mbyAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19E QVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4gK1ZPSUQNCj4gK1VuZGlHZXRDb25maWdJbmZvICgN Cj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAg KTsNCj4gKw0KPiArVk9JRA0KPiArVW5kaUluaXRpYWxpemUgKA0KPiArICBJTiAgICAgIFBYRV9D REIgICAqQ2RiLA0KPiArICBJTiBPVVQgIE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4g K1ZPSUQNCj4gK1VuZGlSZXNldCAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4g IE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4gK1ZPSUQNCj4gK1VuZGlTaHV0ZG93biAo DQo+ICsgIElOICAgICAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOIE9VVCAgTklDX0RBVEEgICpO aWMNCj4gKyAgKTsNCj4gKw0KPiArVk9JRA0KPiArVW5kaUludGVycnVwdEVuYWJsZSAoDQo+ICsg IElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ ICsNCj4gK1ZPSUQNCj4gK1VuZGlSZWNlaXZlRmlsdGVyICgNCj4gKyAgSU4gIFBYRV9DREIgICAq Q2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArVk9JRA0KPiAr VW5kaVN0YXRpb25BZGRyZXNzICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAg TklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArVk9JRA0KPiArVW5kaVN0YXRpc3RpY3Mg KA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiAr ICApOw0KPiArDQo+ICtWT0lEDQo+ICtVbmRpTWNhc3RJcDJNYWMgKA0KPiArICBJTiBPVVQgIFBY RV9DREIgICAqQ2RiLA0KPiArICBJTiAgICAgIE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ICsN Cj4gK1ZPSUQNCj4gK1VuZGlOdkRhdGEgKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsg IElOICBOSUNfREFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtWT0lEDQo+ICtVbmRpR2V0U3Rh dHVzICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMN Cj4gKyAgKTsNCj4gKw0KPiArVk9JRA0KPiArVW5kaUZpbGxIZWFkZXIgKA0KPiArICBJTiAgUFhF X0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtW T0lEDQo+ICtVbmRpVHJhbnNtaXQgKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElO ICBOSUNfREFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtWT0lEDQo+ICtVbmRpUmVjZWl2ZSAo DQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsg ICk7DQo+ICsNCj4gK1VJTlQxNg0KPiArSW5pdGlhbGl6ZSAoDQo+ICsgIElOICAgICAgUFhFX0NE QiAgICpDZGIsDQo+ICsgIElOIE9VVCAgTklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiAr VUlOVDE2DQo+ICtUcmFuc21pdCAoDQo+ICsgIElOICAgICAgUFhFX0NEQiAgICpDZGIsDQo+ICsg IElOIE9VVCAgTklDX0RBVEEgICpOaWMsDQo+ICsgIElOICAgICAgVUlOVDY0ICAgIENwYkFkZHIs DQo+ICsgIElOICAgICAgVUlOVDE2ICAgIE9wRmxhZ3MNCj4gKyAgKTsNCj4gKw0KPiArVUlOVDE2 DQo+ICtSZWNlaXZlICgNCj4gKyAgSU4gUFhFX0NEQiAgICAgICAqQ2RiLA0KPiArICBJTiBPVVQg TklDX0RBVEEgICpOaWMsDQo+ICsgIElOIFVJTlQ2NCAgICAgICAgQ3BiQWRkciwNCj4gKyAgSU4g T1VUIFVJTlQ2NCAgICBEYkFkZHINCj4gKyAgKTsNCj4gKw0KPiArVUlOVDE2DQo+ICtTZXRGaWx0 ZXIgKA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMsDQo+ICsgIElOICBVSU5UMTYgICAgU2V0Rmls dGVyLA0KPiArICBJTiAgVUlOVDY0ICAgIENwYkFkZHIsDQo+ICsgIElOICBVSU5UMzIgICAgQ3Bi U2l6ZQ0KPiArICApOw0KPiArDQo+ICtVSU5UMTYNCj4gK1N0YXRpc3RpY3MgKA0KPiArICBJTiBO SUNfREFUQSAgKk5pYywNCj4gKyAgSU4gVUlOVDY0ICAgIERiQWRkciwNCj4gKyAgSU4gVUlOVDE2 ICAgIERiU2l6ZQ0KPiArICApOw0KPiArDQo+ICsjZW5kaWYNCj4gZGlmZiAtLWdpdCBhL1VzYk5l dHdvcmtQa2cvVXNiUm5kaXMvVXNiUm5kaXMuaCBiL1VzYk5ldHdvcmtQa2cvVXNiUm5kaXMvVXNi Um5kaXMuaA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAuLjc3 NTgwNzA0MjQ2MA0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL1VzYk5ldHdvcmtQa2cvVXNiUm5k aXMvVXNiUm5kaXMuaA0KPiBAQCAtMCwwICsxLDU4NiBAQA0KPiArLyoqIEBmaWxlDQo+ICsgIEhl YWRlciBmaWxlIGZvciBmb3IgVVNCIFJuZGlzIGRyaXZlcg0KPiArDQo+ICsgIENvcHlyaWdodCAo YykgMjAyMywgQW1lcmljYW4gTWVnYXRyZW5kcyBJbnRlcm5hdGlvbmFsIExMQy4gQWxsIHJpZ2h0 cyByZXNlcnZlZC48QlI+DQo+ICsgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1 c2UtUGF0ZW50DQo+ICsqKi8NCj4gKw0KPiArI2lmbmRlZiBfVVNCX1JORElTX0hfDQo+ICsjZGVm aW5lIF9VU0JfUk5ESVNfSF8NCj4gKw0KPiArI2luY2x1ZGUgPExpYnJhcnkvVWVmaURyaXZlckVu dHJ5UG9pbnQuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlCb290U2VydmljZXNUYWJsZUxp Yi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvVWVmaUxpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJh cnkvRGV2aWNlUGF0aExpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCj4g KyNpbmNsdWRlIDxMaWJyYXJ5L01lbW9yeUFsbG9jYXRpb25MaWIuaD4NCj4gKyNpbmNsdWRlIDxM aWJyYXJ5L0Jhc2VNZW1vcnlMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlVc2JMaWIu aD4NCj4gKyNpbmNsdWRlIDxQcm90b2NvbC9Vc2JJby5oPg0KPiArI2luY2x1ZGUgPFByb3RvY29s L0Vka0lJVXNiRXRoZXJuZXRQcm90b2NvbC5oPg0KPiArDQo+ICt0eXBlZGVmIHN0cnVjdCBfUkVN T1RFX05ESVNfTVNHX0hFQURFUiBSRU1PVEVfTkRJU19NU0dfSEVBREVSOw0KPiArDQo+ICt0eXBl ZGVmIHN0cnVjdCB7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICBTaWduYXR1 cmU7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgICBVc2JFdGg7DQo+ICsgIEVG SV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICBVc2JDZGNEYXRhSGFuZGxlOw0KPiArICBFRklf SEFORExFICAgICAgICAgICAgICAgICAgICAgVXNiUm5kaXNIYW5kbGU7DQo+ICsgIEVGSV9VU0Jf SU9fUFJPVE9DT0wgICAgICAgICAgICAqVXNiSW87DQo+ICsgIEVGSV9VU0JfSU9fUFJPVE9DT0wg ICAgICAgICAgICAqVXNiSW9DZGNEYXRhOw0KPiArICBFRklfVVNCX0NPTkZJR19ERVNDUklQVE9S ICAgICAgKkNvbmZpZzsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgIE51bU9m SW50ZXJmYWNlOw0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgQnVsa0luRW5k cG9pbnQ7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICBCdWxrT3V0RW5kcG9p bnQ7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcnJ1cEVuZHBvaW50 Ow0KPiArICBFRklfTUFDX0FERFJFU1MgICAgICAgICAgICAgICAgTWFjQWRkcmVzczsNCj4gKyAg VUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgIFJlcXVlc3RJZDsNCj4gKyAgVUlOVDMyICAg ICAgICAgICAgICAgICAgICAgICAgIE1lZGl1bTsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAg ICAgICAgICAgIE1heFBhY2tldHNQZXJUcmFuc2ZlcjsNCj4gKyAgVUlOVDMyICAgICAgICAgICAg ICAgICAgICAgICAgIE1heFRyYW5zZmVyU2l6ZTsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAg ICAgICAgICAgIFBhY2tldEFsaWdubWVudEZhY3RvcjsNCj4gKyAgTElTVF9FTlRSWSAgICAgICAg ICAgICAgICAgICAgIFJlY2VpdmVQYWNrZXRMaXN0Ow0KPiArfSBVU0JfUk5ESVNfREVWSUNFOw0K PiArDQo+ICsjZGVmaW5lIFVTQl9STkRJU19EUklWRVJfVkVSU0lPTiAgICAgICAxDQo+ICsjZGVm aW5lIFVTQl9UWF9FVEhFUk5FVF9CVUxLX1RJTUVPVVQgICAzMDAwDQo+ICsjZGVmaW5lIFVTQl9S WF9FVEhFUk5FVF9CVUxLX1RJTUVPVVQgICAzDQo+ICsjZGVmaW5lIFVTQl9FVEhFUk5FVF9UUkFO U0ZFUl9USU1FT1VUICAyMDANCj4gKw0KPiArI2RlZmluZSBMQU5fQlVMS0lOX0NNRF9DT05UUk9M ICAgICAgMQ0KPiArI2RlZmluZSBNQVhJTVVNX1NUT1BCVUxLSU5fQ05UICAgICAgMzAwICAgICAg ICAvLyBJbmRpY2F0aW5nIG1heGltdW0gY291bnRzIGZvciB3YWl0aW5nIGJ1bGsgaW4gY29tbWFu ZA0KPiArI2RlZmluZSBNSU5JTVVNX1NUT1BCVUxLSU5fQ05UICAgICAgMyAgICAgICAgICAvLyBJ bmRpY2F0aW5nIG1pbmltdW0gY291bnRzIGZvciB3YWl0aW5nIGJ1bGsgaW4gY29tbWFuZA0KPiAr I2RlZmluZSBCVUxLSU5fQ01EX1BPTExJTkdfQ05UICAgICAgMzAwICAgICAgICAvLyBJbmRpY2F0 aW5nIHRoZSB3YWl0aW5nIGNvdW50cyBmb3Igc2VuZCBidWxrIGluIGNvbW1hbmQgd2hlbiBzeXN0 ZW0gcGVuZGluZw0KPiArI2RlZmluZSBSTkRJU19SRVNFUlZFRF9CWVRFX0xFTkdUSCAgOA0KPiAr DQo+ICsjZGVmaW5lIFVTQl9STkRJU19TSUdOQVRVUkUgIFNJR05BVFVSRV8zMigncicsICduJywg J2QnLCAncycpDQo+ICsjZGVmaW5lIFVTQl9STkRJU19ERVZJQ0VfRlJPTV9USElTKGEpICBDUiAo YSwgVVNCX1JORElTX0RFVklDRSwgVXNiRXRoLCBVU0JfUk5ESVNfU0lHTkFUVVJFKQ0KPiArDQo+ ICtleHRlcm4gRUZJX0NPTVBPTkVOVF9OQU1FMl9QUk9UT0NPTCAgZ1VzYlJuZGlzQ29tcG9uZW50 TmFtZTI7DQo+ICsNCj4gK3N0cnVjdCBCSVRfTUFQIHsNCj4gKyAgdW5zaWduZWQgaW50ICAgIFNy YzsNCj4gKyAgdW5zaWduZWQgaW50ICAgIERzdDsNCj4gK307DQo+ICsNCj4gK0VGSV9TVEFUVVMN Cj4gK0VGSUFQSQ0KPiArVXNiUm5kaXNEcml2ZXJTdXBwb3J0ZWQgKA0KPiArICBJTiBFRklfRFJJ VkVSX0JJTkRJTkdfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiBFRklfSEFORExFICAgICAgICAg ICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgIElOIEVGSV9ERVZJQ0VfUEFUSF9QUk9U T0NPTCAgICAgKlJlbWFpbmluZ0RldmljZVBhdGgNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRV Uw0KPiArRUZJQVBJDQo+ICtVc2JSbmRpc0RyaXZlclN0YXJ0ICgNCj4gKyAgSU4gRUZJX0RSSVZF Ul9CSU5ESU5HX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAg ICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICBJTiBFRklfREVWSUNFX1BBVEhfUFJPVE9D T0wgICAgICpSZW1haW5pbmdEZXZpY2VQYXRoDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMN Cj4gK0VGSUFQSQ0KPiArVXNiUm5kaXNEcml2ZXJTdG9wICgNCj4gKyAgSU4gIEVGSV9EUklWRVJf QklORElOR19QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOICBFRklfSEFORExFICAgICAgICAgICAg ICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAg ICAgICAgIE51bWJlck9mQ2hpbGRyZW4sDQo+ICsgIElOICBFRklfSEFORExFICAgICAgICAgICAg ICAgICAgICpDaGlsZEhhbmRsZUJ1ZmZlcg0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ ICtMb2FkQWxsRGVzY3JpcHRvciAoDQo+ICsgIElOICBFRklfVVNCX0lPX1BST1RPQ09MICAgICAg ICAqVXNiSW8sDQo+ICsgIE9VVCBFRklfVVNCX0NPTkZJR19ERVNDUklQVE9SICAqKkNvbmZpZ0Rl c2MNCj4gKyAgKTsNCj4gKw0KPiArQk9PTEVBTg0KPiArTmV4dERlc2NyaXB0b3IgKA0KPiArICBJ TiBFRklfVVNCX0NPTkZJR19ERVNDUklQVE9SICAqRGVzYywNCj4gKyAgSU4gT1VUIFVJTlROICAg ICAgICAgICAgICAgICAgKk9mZnNldA0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtH ZXRGdW5jdGlvbmFsRGVzY3JpcHRvciAoDQo+ICsgIElOICBFRklfVVNCX0NPTkZJR19ERVNDUklQ VE9SICAqQ29uZmlnLA0KPiArICBJTiAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgRnVuRGVz Y3JpcHRvclR5cGUsDQo+ICsgIE9VVCBWT0lEICAgICAgICAgICAgICAgICAgICAgICAqRGF0YUJ1 ZmZlcg0KPiArICApOw0KPiArDQo+ICtWT0lEDQo+ICtHZXRFbmRwb2ludCAoDQo+ICsgIElOICAg ICAgRUZJX1VTQl9JT19QUk9UT0NPTCAgKlVzYklvLA0KPiArICBJTiBPVVQgIFVTQl9STkRJU19E RVZJQ0UgICAgICpVc2JSbmRpc0RldmljZQ0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ ICtFRklBUEkNCj4gK1VzYlJuZGlzSW50ZXJydXB0ICgNCj4gKyAgSU4gRURLSUlfVVNCX0VUSEVS TkVUX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gQk9PTEVBTiAgICAgICAgICAgICAgICAgICAg ICBJc05ld1RyYW5zZmVyLA0KPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgIFBv bGxpbmdJbnRlcnZhbCwNCj4gKyAgSU4gRUZJX1VTQl9ERVZJQ0VfUkVRVUVTVCAgICAgICAqUmVx dXN0DQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArSW50ZXJydXB0 Q2FsbGJhY2sgKA0KPiArICBJTiAgVk9JRCAgICAqRGF0YSwNCj4gKyAgSU4gIFVJTlROICAgRGF0 YUxlbmd0aCwNCj4gKyAgSU4gIFZPSUQgICAgKkNvbnRleHQsDQo+ICsgIElOICBVSU5UMzIgIFN0 YXR1cw0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0dldFVzYkV0 aE1hY0FkZHJlc3MgKA0KPiArICBJTiAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhp cywNCj4gKyAgT1VUIEVGSV9NQUNfQUREUkVTUyAgICAgICAgICAgICAgKk1hY0FkZHJlc3MNCj4g KyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtVc2JFdGhCdWxrU2l6ZSAo DQo+ICsgIElOICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBPVVQg VUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAqQnVsa1NpemUNCj4gKyAgKTsNCj4gKw0KPiAr RUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtSbmRpc0R1bW15UmV0dXJuICgNCj4gKyAgSU4gIFBY RV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiAr RUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtSbmRpc1VuZGlTdGFydCAoDQo+ICsgIElOIFBYRV9D REIgICAqQ2RiLA0KPiArICBJTiBOSUNfREFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtFRklf U1RBVFVTDQo+ICtFRklBUEkNCj4gK1JuZGlzVW5kaVN0b3AgKA0KPiArICBJTiBQWEVfQ0RCICAg KkNkYiwNCj4gKyAgSU4gTklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRV Uw0KPiArRUZJQVBJDQo+ICtSbmRpc1VuZGlHZXRJbml0SW5mbyAoDQo+ICsgIElOIFBYRV9DREIg ICAqQ2RiLA0KPiArICBJTiBOSUNfREFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtFRklfU1RB VFVTDQo+ICtFRklBUEkNCj4gK1JuZGlzVW5kaUdldENvbmZpZ0luZm8gKA0KPiArICBJTiBQWEVf Q0RCICAgKkNkYiwNCj4gKyAgSU4gTklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArRUZJ X1NUQVRVUw0KPiArRUZJQVBJDQo+ICtSbmRpc1VuZGlJbml0aWFsaXplICgNCj4gKyAgSU4gUFhF X0NEQiAgICpDZGIsDQo+ICsgIElOIE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4gK0VG SV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArUm5kaXNVbmRpVHJhbnNtaXQgKA0KPiArICBJTiAgICAg IFBYRV9DREIgICAgICAgICAgICAgICAgICAgICAgKkNkYiwNCj4gKyAgSU4gICAgICBFREtJSV9V U0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiAgICAgIFZPSUQgICAgICAgICAg ICAgICAgICAgICAgICAgKkJ1bGtPdXREYXRhLA0KPiArICBJTiBPVVQgIFVJTlROICAgICAgICAg ICAgICAgICAgICAgICAgKkRhdGFMZW5ndGgNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0K PiArRUZJQVBJDQo+ICtSbmRpc1VuZGlSZWNlaXZlICgNCj4gKyAgSU4gICAgIFBYRV9DREIgICAg ICAgICAgICAgICAgICAgICAgKkNkYiwNCj4gKyAgSU4gICAgIEVES0lJX1VTQl9FVEhFUk5FVF9Q Uk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOIE9VVCBWT0lEICAgICAgICAgICAgICAgICAgICAgICAg ICpCdWxrSW5EYXRhLA0KPiArICBJTiBPVVQgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAq RGF0YUxlbmd0aA0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1Ju ZGlzVW5kaVJlc2V0ICgNCj4gKyAgSU4gUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOIE5JQ19EQVRB ICAqTmljDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArUm5kaXNV bmRpU2h1dGRvd24gKA0KPiArICBJTiBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gTklDX0RBVEEg ICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtSbmRpc1Vu ZGlSZWNlaXZlRmlsdGVyICgNCj4gKyAgSU4gUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOIE5JQ19E QVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArUm5k aXNVbmRpR2V0U3RhdHVzICgNCj4gKyAgSU4gUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOIE5JQ19E QVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArR2V0 VXNiSGVhZGVyRnVuRGVzY3JpcHRvciAoDQo+ICsgIElOICBFREtJSV9VU0JfRVRIRVJORVRfUFJP VE9DT0wgICpUaGlzLA0KPiArICBPVVQgVVNCX0hFQURFUl9GVU5fREVTQ1JJUFRPUiAgICAqVXNi SGVhZGVyRnVuRGVzY3JpcHRvcg0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklB UEkNCj4gK0dldFVzYlVuaW9uRnVuRGVzY3JpcHRvciAoDQo+ICsgIElOICBFREtJSV9VU0JfRVRI RVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBPVVQgVVNCX1VOSU9OX0ZVTl9ERVNDUklQVE9S ICAgICAqVXNiVW5pb25GdW5EZXNjcmlwdG9yDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMN Cj4gK0VGSUFQSQ0KPiArR2V0VXNiUm5kaXNGdW5EZXNjcmlwdG9yICgNCj4gKyAgSU4gIEVES0lJ X1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIE9VVCBVU0JfRVRIRVJORVRfRlVO X0RFU0NSSVBUT1IgICpVc2JFdGhGdW5EZXNjcmlwdG9yDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9T VEFUVVMNCj4gK0VGSUFQSQ0KPiArU2V0VXNiUm5kaXNNY2FzdEZpbHRlciAoDQo+ICsgIElOIEVE S0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOIFVJTlQxNiAgICAgICAg ICAgICAgICAgICAgICAgVmFsdWUsDQo+ICsgIElOIFZPSUQgICAgICAgICAgICAgICAgICAgICAg ICAgKk1jYXN0QWRkcg0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4g K1NldFVzYlJuZGlzUG93ZXJGaWx0ZXIgKA0KPiArICBJTiBFREtJSV9VU0JfRVRIRVJORVRfUFJP VE9DT0wgICpUaGlzLA0KPiArICBJTiBVSU5UMTYgICAgICAgICAgICAgICAgICAgICAgIFZhbHVl LA0KPiArICBJTiBVSU5UMTYgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCwNCj4gKyAgSU4g Vk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAqUGF0dGVybkZpbHRlcg0KPiArICApOw0KPiAr DQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0dldFVzYlJuZGlzUG93ZXJGaWx0ZXIgKA0K PiArICBJTiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiBVSU5U MTYgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlLA0KPiArICBJTiBCT09MRUFOICAgICAgICAg ICAgICAgICAgICAgICpQYXR0ZXJuQWN0aXZlDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMN Cj4gK0VGSUFQSQ0KPiArU2V0VXNiUm5kaXNQYWNrZXRGaWx0ZXIgKA0KPiArICBJTiBFREtJSV9V U0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiBVSU5UMTYgICAgICAgICAgICAg ICAgICAgICAgIFZhbHVlDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0K PiArR2V0Um5kaXNTdGF0aXN0aWMgKA0KPiArICBJTiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9D T0wgICpUaGlzLA0KPiArICBJTiBVSU5UMTYgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlLA0K PiArICBJTiBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICpTdGF0aXN0aWMNCj4gKyAgKTsN Cj4gKw0KPiArRUZJX1NUQVRVUw0KPiArUm5kaXNDb250cm9sTXNnICgNCj4gKyAgSU4gIFVTQl9S TkRJU19ERVZJQ0UgICAgICAgICpVc2JSbmRpc0RldmljZSwNCj4gKyAgSU4gIFJFTU9URV9ORElT X01TR19IRUFERVIgICpSbmRpc01zZywNCj4gKyAgT1VUIFJFTU9URV9ORElTX01TR19IRUFERVIg ICpSbmRpc01zZ1Jlc3BvbnNlDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK1JuZGlz VHJhbnNtaXREYXRhTXNnICgNCj4gKyAgSU4gIFVTQl9STkRJU19ERVZJQ0UgICAgICAgICpVc2JS bmRpc0RldmljZSwNCj4gKyAgSU4gIFJFTU9URV9ORElTX01TR19IRUFERVIgICpSbmRpc01zZywN Cj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICpUcmFuc2Zlckxlbmd0aA0KPiArICAp Ow0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtSbmRpc1JlY2VpdmVEYXRhTXNnICgNCj4gKyAgSU4g IFVTQl9STkRJU19ERVZJQ0UgICAgICAgICpVc2JSbmRpc0RldmljZSwNCj4gKyAgSU4gIFJFTU9U RV9ORElTX01TR19IRUFERVIgICpSbmRpc01zZywNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAg ICAgICAgICpUcmFuc2Zlckxlbmd0aA0KPiArICApOw0KPiArDQo+ICtWT0lEDQo+ICtQcmludFJu ZGlzTXNnICgNCj4gKyAgSU4gIFJFTU9URV9ORElTX01TR19IRUFERVIgICpSbmRpc01zZw0KPiAr ICApOw0KPiArDQo+ICsjZGVmaW5lIFJORElTX01BSk9SX1ZFUlNJT04gICAgICAweDAwMDAwMDAx DQo+ICsjZGVmaW5lIFJORElTX01JTk9SX1ZFUlNJT04gICAgICAweDAwMDAwMDAwDQo+ICsjZGVm aW5lIFJORElTX01BWF9UUkFOU0ZFUl9TSVpFICAweDQwMDANCj4gKw0KPiArI2RlZmluZSBSTkRJ U19QQUNLRVRfTVNHICAgICAgICAgICAweDAwMDAwMDAxDQo+ICsjZGVmaW5lIFJORElTX0lOSVRJ QUxJWkVfTVNHICAgICAgIDB4MDAwMDAwMDINCj4gKyNkZWZpbmUgUk5ESVNfSU5JVElBTElaRV9D TVBMVCAgICAgMHg4MDAwMDAwMg0KPiArI2RlZmluZSBSTkRJU19ITFRfTVNHICAgICAgICAgICAg ICAweDAwMDAwMDAzDQo+ICsjZGVmaW5lIFJORElTX1FVRVJZX01TRyAgICAgICAgICAgIDB4MDAw MDAwMDQNCj4gKyNkZWZpbmUgUk5ESVNfUVVFUllfQ01QTFQgICAgICAgICAgMHg4MDAwMDAwNA0K PiArI2RlZmluZSBSTkRJU19TRVRfTVNHICAgICAgICAgICAgICAweDAwMDAwMDA1DQo+ICsjZGVm aW5lIFJORElTX1NFVF9DTVBMVCAgICAgICAgICAgIDB4ODAwMDAwMDUNCj4gKyNkZWZpbmUgUk5E SVNfUkVTRVRfTVNHICAgICAgICAgICAgMHgwMDAwMDAwNg0KPiArI2RlZmluZSBSTkRJU19SRVNF VF9DTVBMVCAgICAgICAgICAweDgwMDAwMDA2DQo+ICsjZGVmaW5lIFJORElTX0lORElDQVRFX1NU QVRVU19NU0cgIDB4MDAwMDAwMDcNCj4gKyNkZWZpbmUgUk5ESVNfS0VFUEFMSVZFX01TRyAgICAg ICAgMHgwMDAwMDAwOA0KPiArI2RlZmluZSBSTkRJU19LRUVQQUxJVkVfQ01QTFQgICAgICAweDgw MDAwMDA4DQo+ICsNCj4gKyNkZWZpbmUgUk5ESVNfU1RBVFVTX1NVQ0NFU1MgICAgICAgICAgIDB4 MDAwMDAwMDANCj4gKyNkZWZpbmUgUk5ESVNfU1RBVFVTX0ZBSUxVUkUgICAgICAgICAgIDB4QzAw MDAwMDENCj4gKyNkZWZpbmUgUk5ESVNfU1RBVFVTX0lOVkFMSURfREFUQSAgICAgIDB4QzAwMTAw MTUNCj4gKyNkZWZpbmUgUk5ESVNfU1RBVFVTX05PVF9TVVBQT1JURUQgICAgIDB4QzAwMDAwQkIN Cj4gKyNkZWZpbmUgUk5ESVNfU1RBVFVTX01FRElBX0NPTk5FQ1QgICAgIDB4NDAwMTAwMEINCj4g KyNkZWZpbmUgUk5ESVNfU1RBVFVTX01FRElBX0RJU0NPTk5FQ1QgIDB4NDAwMTAwMEMNCj4gKw0K PiArI2RlZmluZSBSTkRJU19DT05UUk9MX1RJTUVPVVQgICAgMTAwMDAgICAgICAgICAgICAvLyAx MHNlYw0KPiArI2RlZmluZSBSTkRJU19LRUVQQUxJVkVfVElNRU9VVCAgNTAwMCAgICAgICAgICAg ICAvLyA1c2VjDQo+ICsNCj4gKyNkZWZpbmUgU0VORF9FTkNBUFNVTEFURURfQ09NTUFORCAgMHgw MDAwMDAwMA0KPiArI2RlZmluZSBHRVRfRU5DQVBTVUxBVEVEX1JFU1BPTlNFICAweDAwMDAwMDAx DQo+ICsNCj4gKy8vDQo+ICsvLyBHZW5lcmFsIE9iamVjdHMNCj4gKy8vDQo+ICsvLyBUYWtlbiBm cm9tIE5URERORElTLkgNCj4gKyNkZWZpbmUgT0lEX0dFTl9TVVBQT1JURURfTElTVCAgICAgICAg IDB4MDAwMTAxMDENCj4gKyNkZWZpbmUgT0lEX0dFTl9IQVJEV0FSRV9TVEFUVVMgICAgICAgIDB4 MDAwMTAxMDINCj4gKyNkZWZpbmUgT0lEX0dFTl9NRURJQV9TVVBQT1JURUQgICAgICAgIDB4MDAw MTAxMDMNCj4gKyNkZWZpbmUgT0lEX0dFTl9NRURJQV9JTl9VU0UgICAgICAgICAgIDB4MDAwMTAx MDQNCj4gKyNkZWZpbmUgT0lEX0dFTl9NQVhJTVVNX0xPT0tBSEVBRCAgICAgIDB4MDAwMTAxMDUN Cj4gKyNkZWZpbmUgT0lEX0dFTl9NQVhJTVVNX0ZSQU1FX1NJWkUgICAgIDB4MDAwMTAxMDYNCj4g KyNkZWZpbmUgT0lEX0dFTl9MSU5LX1NQRUVEICAgICAgICAgICAgIDB4MDAwMTAxMDcNCj4gKyNk ZWZpbmUgT0lEX0dFTl9UUkFOU01JVF9CVUZGRVJfU1BBQ0UgIDB4MDAwMTAxMDgNCj4gKyNkZWZp bmUgT0lEX0dFTl9SRUNFSVZFX0JVRkZFUl9TUEFDRSAgIDB4MDAwMTAxMDkNCj4gKyNkZWZpbmUg T0lEX0dFTl9UUkFOU01JVF9CTE9DS19TSVpFICAgIDB4MDAwMTAxMEENCj4gKyNkZWZpbmUgT0lE X0dFTl9SRUNFSVZFX0JMT0NLX1NJWkUgICAgIDB4MDAwMTAxMEINCj4gKyNkZWZpbmUgT0lEX0dF Tl9WRU5ET1JfSUQgICAgICAgICAgICAgIDB4MDAwMTAxMEMNCj4gKyNkZWZpbmUgT0lEX0dFTl9W RU5ET1JfREVTQ1JJUFRJT04gICAgIDB4MDAwMTAxMEQNCj4gKyNkZWZpbmUgT0lEX0dFTl9DVVJS RU5UX1BBQ0tFVF9GSUxURVIgIDB4MDAwMTAxMEUNCj4gKyNkZWZpbmUgT0lEX0dFTl9DVVJSRU5U X0xPT0tBSEVBRCAgICAgIDB4MDAwMTAxMEYNCj4gKyNkZWZpbmUgT0lEX0dFTl9EUklWRVJfVkVS U0lPTiAgICAgICAgIDB4MDAwMTAxMTANCj4gKyNkZWZpbmUgT0lEX0dFTl9NQVhJTVVNX1RPVEFM X1NJWkUgICAgIDB4MDAwMTAxMTENCj4gKyNkZWZpbmUgT0lEX0dFTl9QUk9UT0NPTF9PUFRJT05T ICAgICAgIDB4MDAwMTAxMTINCj4gKyNkZWZpbmUgT0lEX0dFTl9NQUNfT1BUSU9OUyAgICAgICAg ICAgIDB4MDAwMTAxMTMNCj4gKyNkZWZpbmUgT0lEX0dFTl9NRURJQV9DT05ORUNUX1NUQVRVUyAg IDB4MDAwMTAxMTQNCj4gKyNkZWZpbmUgT0lEX0dFTl9NQVhJTVVNX1NFTkRfUEFDS0VUUyAgIDB4 MDAwMTAxMTUNCj4gKyNkZWZpbmUgT0lEX0dFTl9WRU5ET1JfRFJJVkVSX1ZFUlNJT04gIDB4MDAw MTAxMTYNCj4gKw0KPiArI2RlZmluZSBPSURfR0VOX1hNSVRfT0sgICAgICAgIDB4MDAwMjAxMDEN Cj4gKyNkZWZpbmUgT0lEX0dFTl9SQ1ZfT0sgICAgICAgICAweDAwMDIwMTAyDQo+ICsjZGVmaW5l IE9JRF9HRU5fWE1JVF9FUlJPUiAgICAgMHgwMDAyMDEwMw0KPiArI2RlZmluZSBPSURfR0VOX1JD Vl9FUlJPUiAgICAgIDB4MDAwMjAxMDQNCj4gKyNkZWZpbmUgT0lEX0dFTl9SQ1ZfTk9fQlVGRkVS ICAweDAwMDIwMTA1DQo+ICsNCj4gKyNkZWZpbmUgT0lEX0dFTl9ESVJFQ1RFRF9CWVRFU19YTUlU ICAgIDB4MDAwMjAyMDENCj4gKyNkZWZpbmUgT0lEX0dFTl9ESVJFQ1RFRF9GUkFNRVNfWE1JVCAg IDB4MDAwMjAyMDINCj4gKyNkZWZpbmUgT0lEX0dFTl9NVUxUSUNBU1RfQllURVNfWE1JVCAgIDB4 MDAwMjAyMDMNCj4gKyNkZWZpbmUgT0lEX0dFTl9NVUxUSUNBU1RfRlJBTUVTX1hNSVQgIDB4MDAw MjAyMDQNCj4gKyNkZWZpbmUgT0lEX0dFTl9CUk9BRENBU1RfQllURVNfWE1JVCAgIDB4MDAwMjAy MDUNCj4gKyNkZWZpbmUgT0lEX0dFTl9CUk9BRENBU1RfRlJBTUVTX1hNSVQgIDB4MDAwMjAyMDYN Cj4gKyNkZWZpbmUgT0lEX0dFTl9ESVJFQ1RFRF9CWVRFU19SQ1YgICAgIDB4MDAwMjAyMDcNCj4g KyNkZWZpbmUgT0lEX0dFTl9ESVJFQ1RFRF9GUkFNRVNfUkNWICAgIDB4MDAwMjAyMDgNCj4gKyNk ZWZpbmUgT0lEX0dFTl9NVUxUSUNBU1RfQllURVNfUkNWICAgIDB4MDAwMjAyMDkNCj4gKyNkZWZp bmUgT0lEX0dFTl9NVUxUSUNBU1RfRlJBTUVTX1JDViAgIDB4MDAwMjAyMEENCj4gKyNkZWZpbmUg T0lEX0dFTl9CUk9BRENBU1RfQllURVNfUkNWICAgIDB4MDAwMjAyMEINCj4gKyNkZWZpbmUgT0lE X0dFTl9CUk9BRENBU1RfRlJBTUVTX1JDViAgIDB4MDAwMjAyMEMNCj4gKyNkZWZpbmUgT0lEX0dF Tl9SQ1ZfQ1JDX0VSUk9SICAgICAgICAgIDB4MDAwMjAyMEQNCj4gKyNkZWZpbmUgT0lEX0dFTl9U UkFOU01JVF9RVUVVRV9MRU5HVEggIDB4MDAwMjAyMEUNCj4gKw0KPiArI2RlZmluZSBPSURfODAy XzNfQ1VSUkVOVF9BRERSRVNTICAweDAxMDEwMTAyDQo+ICsvLw0KPiArLy8gTmRpcyBQYWNrZXQg RmlsdGVyIEJpdHMgKE9JRF9HRU5fQ1VSUkVOVF9QQUNLRVRfRklMVEVSKS4NCj4gKy8vDQo+ICsj ZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfRElSRUNURUQgICAgICAgIDB4MDAwMQ0KPiArI2RlZmlu ZSBORElTX1BBQ0tFVF9UWVBFX01VTFRJQ0FTVCAgICAgICAweDAwMDINCj4gKyNkZWZpbmUgTkRJ U19QQUNLRVRfVFlQRV9BTExfTVVMVElDQVNUICAgMHgwMDA0DQo+ICsjZGVmaW5lIE5ESVNfUEFD S0VUX1RZUEVfQlJPQURDQVNUICAgICAgIDB4MDAwOA0KPiArI2RlZmluZSBORElTX1BBQ0tFVF9U WVBFX1NPVVJDRV9ST1VUSU5HICAweDAwMTANCj4gKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9Q Uk9NSVNDVU9VUyAgICAgMHgwMDIwDQo+ICsjZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfU01UICAg ICAgICAgICAgIDB4MDA0MA0KPiArI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX0FMTF9MT0NBTCAg ICAgICAweDAwODANCj4gKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9NQUNfRlJBTUUgICAgICAg MHg4MDAwDQo+ICsjZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfRlVOQ1RJT05BTCAgICAgIDB4NDAw MA0KPiArI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX0FMTF9GVU5DVElPTkFMICAweDIwMDANCj4g KyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9HUk9VUCAgICAgICAgICAgMHgxMDAwDQo+ICsNCj4g KyNwcmFnbWEgcGFjaygxKQ0KPiArDQo+ICt0eXBlZGVmIHN0cnVjdCBfUkVNT1RFX05ESVNfTVNH X0hFQURFUiB7DQo+ICsgIFVJTlQzMiAgICBNZXNzYWdlVHlwZTsNCj4gKyAgVUlOVDMyICAgIE1l c3NhZ2VMZW5ndGg7DQo+ICt9IFJFTU9URV9ORElTX01TR19IRUFERVI7DQo+ICsNCj4gK3R5cGVk ZWYgc3RydWN0IHsNCj4gKyAgVUlOVDMyICAgIE1lc3NhZ2VUeXBlOw0KPiArICBVSU5UMzIgICAg TWVzc2FnZUxlbmd0aDsNCj4gKyAgVUlOVDMyICAgIFJlcXVlc3RJRDsNCj4gKyAgVUlOVDMyICAg IE1ham9yVmVyc2lvbjsNCj4gKyAgVUlOVDMyICAgIE1pbm9yVmVyc2lvbjsNCj4gKyAgVUlOVDMy ICAgIE1heFRyYW5zZmVyU2l6ZTsNCj4gK30gUkVNT1RFX05ESVNfSU5JVElBTElaRV9NU0c7DQo+ ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgVUlOVDMyICAgIE1lc3NhZ2VUeXBlOw0KPiAr ICBVSU5UMzIgICAgTWVzc2FnZUxlbmd0aDsNCj4gKyAgVUlOVDMyICAgIFJlcXVlc3RJRDsNCj4g K30gUkVNT1RFX05ESVNfSEFMVF9NU0c7DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAg VUlOVDMyICAgIE1lc3NhZ2VUeXBlOw0KPiArICBVSU5UMzIgICAgTWVzc2FnZUxlbmd0aDsNCj4g KyAgVUlOVDMyICAgIFJlcXVlc3RJRDsNCj4gKyAgVUlOVDMyICAgIE9pZDsNCj4gKyAgVUlOVDMy ICAgIEluZm9ybWF0aW9uQnVmZmVyTGVuZ3RoOw0KPiArICBVSU5UMzIgICAgSW5mb3JtYXRpb25C dWZmZXJPZmZzZXQ7DQo+ICsgIFVJTlQzMiAgICBSZXNlcnZlZDsNCj4gK30gUkVNT1RFX05ESVNf UVVFUllfTVNHOw0KPiArDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsgIFJFTU9URV9ORElTX1FV RVJZX01TRyAgICBRdWVyeU1zZzsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgIEFkZHJb Nl07DQo+ICt9IFJFTU9URV9ORElTX1FVRVJZX01BQ19NU0c7DQo+ICsNCj4gK3R5cGVkZWYgc3Ry dWN0IHsNCj4gKyAgUkVNT1RFX05ESVNfUVVFUllfTVNHICAgIFF1ZXJ5TXNnOw0KPiArICBVSU5U MzIgICAgICAgICAgICAgICAgICAgTWF4VG90YWxTaXplOw0KPiArfSBSRU1PVEVfTkRJU19RVUVS WV9NQVhfVE9UQUxfU0laRV9NU0c7DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgVUlO VDMyICAgIE1lc3NhZ2VUeXBlOw0KPiArICBVSU5UMzIgICAgTWVzc2FnZUxlbmd0aDsNCj4gKyAg VUlOVDMyICAgIFJlcXVlc3RJRDsNCj4gKyAgVUlOVDMyICAgIE9pZDsNCj4gKyAgVUlOVDMyICAg IEluZm9ybWF0aW9uQnVmZmVyTGVuZ3RoOw0KPiArICBVSU5UMzIgICAgSW5mb3JtYXRpb25CdWZm ZXJPZmZzZXQ7DQo+ICsgIFVJTlQzMiAgICBSZXNlcnZlZDsNCj4gK30gUkVNT1RFX05ESVNfU0VU X01TRzsNCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UMzIgICAgTWVzc2FnZVR5 cGU7DQo+ICsgIFVJTlQzMiAgICBNZXNzYWdlTGVuZ3RoOw0KPiArICBVSU5UMzIgICAgUmVzZXJ2 ZWQ7DQo+ICt9IFJFTU9URV9ORElTX1JFU0VUX01TRzsNCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3Qg ew0KPiArICBVSU5UMzIgICAgTWVzc2FnZVR5cGU7DQo+ICsgIFVJTlQzMiAgICBNZXNzYWdlTGVu Z3RoOw0KPiArICBVSU5UMzIgICAgU3RhdHVzOw0KPiArICBVSU5UMzIgICAgU3RhdHVzQnVmZmVy TGVuZ3RoOw0KPiArICBVSU5UMzIgICAgU3RhdHVzQnVmZmVyT2Zmc2V0Ow0KPiArfSBSRU1PVEVf TkRJU19JTkRJQ0FURV9TVEFUVVNfTVNHOw0KPiArDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsg IFVJTlQzMiAgICBEaWFnU3RhdHVzOw0KPiArICBVSU5UMzIgICAgRXJyb3JPZmZzZXQ7DQo+ICt9 IFJORElTX0RJQUdOT1NUSUNfSU5GTzsNCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBV SU5UMzIgICAgTWVzc2FnZVR5cGU7DQo+ICsgIFVJTlQzMiAgICBNZXNzYWdlTGVuZ3RoOw0KPiAr ICBVSU5UMzIgICAgUmVxdWVzdElEOw0KPiArfSBSRU1PVEVfTkRJU19LRUVQQUxJVkVfTVNHOw0K PiArDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsgIFVJTlQzMiAgICBNZXNzYWdlVHlwZTsNCj4g KyAgVUlOVDMyICAgIE1lc3NhZ2VMZW5ndGg7DQo+ICsgIFVJTlQzMiAgICBSZXF1ZXN0SUQ7DQo+ ICsgIFVJTlQzMiAgICBTdGF0dXM7DQo+ICsgIFVJTlQzMiAgICBNYWpvclZlcnNpb247DQo+ICsg IFVJTlQzMiAgICBNaW5vclZlcnNpb247DQo+ICsgIFVJTlQzMiAgICBEZXZpY2VGbGFnczsNCj4g KyAgVUlOVDMyICAgIE1lZGl1bTsNCj4gKyAgVUlOVDMyICAgIE1heFBhY2tldHNQZXJUcmFuc2Zl cjsNCj4gKyAgVUlOVDMyICAgIE1heFRyYW5zZmVyU2l6ZTsNCj4gKyAgVUlOVDMyICAgIFBhY2tl dEFsaWdubWVudEZhY3RvcjsNCj4gKyAgVUlOVDY0ICAgIFJlc2VydmVkOw0KPiArfSBSRU1PVEVf TkRJU19JTklUSUFMSVpFX0NNUExUOw0KPiArDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsgIFVJ TlQzMiAgICBNZXNzYWdlVHlwZTsNCj4gKyAgVUlOVDMyICAgIE1lc3NhZ2VMZW5ndGg7DQo+ICsg IFVJTlQzMiAgICBSZXF1ZXN0SUQ7DQo+ICsgIFVJTlQzMiAgICBTdGF0dXM7DQo+ICsgIFVJTlQz MiAgICBJbmZvcm1hdGlvbkJ1ZmZlckxlbmd0aDsNCj4gKyAgVUlOVDMyICAgIEluZm9ybWF0aW9u QnVmZmVyT2Zmc2V0Ow0KPiArfSBSRU1PVEVfTkRJU19RVUVSWV9DTVBMVDsNCj4gKw0KPiArdHlw ZWRlZiBzdHJ1Y3Qgew0KPiArICBSRU1PVEVfTkRJU19RVUVSWV9DTVBMVCAgICBRdWVyeUNtcGx0 Ow0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICBBZGRyWzZdOw0KPiArfSBSRU1PVEVf TkRJU19RVUVSWV9NQUNfQ01QTFQ7DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgUkVN T1RFX05ESVNfUVVFUllfQ01QTFQgICAgUXVlcnlDbXBsdDsNCj4gKyAgVUlOVDMyICAgICAgICAg ICAgICAgICAgICAgTWF4VG90YWxTaXplOw0KPiArfSBSRU1PVEVfTkRJU19RVUVSWV9NQVhfVE9U QUxfU0laRV9DTVBMVDsNCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UMzIgICAg TWVzc2FnZVR5cGU7DQo+ICsgIFVJTlQzMiAgICBNZXNzYWdlTGVuZ3RoOw0KPiArICBVSU5UMzIg ICAgUmVxdWVzdElEOw0KPiArICBVSU5UMzIgICAgU3RhdHVzOw0KPiArfSBSRU1PVEVfTkRJU19T RVRfQ01QTFQ7DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgVUlOVDMyICAgIE1lc3Nh Z2VUeXBlOw0KPiArICBVSU5UMzIgICAgTWVzc2FnZUxlbmd0aDsNCj4gKyAgVUlOVDMyICAgIFN0 YXR1czsNCj4gKyAgVUlOVDMyICAgIEFkZHJlc3NpbmdSZXNldDsNCj4gK30gUkVNT1RFX05ESVNf UkVTRVRfQ01QTFQ7DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgVUlOVDMyICAgIE1l c3NhZ2VUeXBlOw0KPiArICBVSU5UMzIgICAgTWVzc2FnZUxlbmd0aDsNCj4gKyAgVUlOVDMyICAg IFJlcXVlc3RJRDsNCj4gKyAgVUlOVDMyICAgIFN0YXR1czsNCj4gK30gUkVNT1RFX05ESVNfS0VF UEFMSVZFX0NNUExUOw0KPiArDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsgIFVJTlQzMiAgICBN ZXNzYWdlVHlwZTsNCj4gKyAgVUlOVDMyICAgIE1lc3NhZ2VMZW5ndGg7DQo+ICsgIFVJTlQzMiAg ICBEYXRhT2Zmc2V0Ow0KPiArICBVSU5UMzIgICAgRGF0YUxlbmd0aDsNCj4gKyAgVUlOVDMyICAg IE91dE9mQmFuZERhdGFPZmZzZXQ7DQo+ICsgIFVJTlQzMiAgICBPdXRPZkJhbmREYXRhTGVuZ3Ro Ow0KPiArICBVSU5UMzIgICAgTnVtT3V0T2ZCYW5kRGF0YUVsZW1lbnRzOw0KPiArICBVSU5UMzIg ICAgUGVyUGFja2V0SW5mb09mZnNldDsNCj4gKyAgVUlOVDMyICAgIFBlclBhY2tldEluZm9MZW5n dGg7DQo+ICsgIFVJTlQzMiAgICBSZXNlcnZlZDE7DQo+ICsgIFVJTlQzMiAgICBSZXNlcnZlZDI7 DQo+ICt9IFJFTU9URV9ORElTX1BBQ0tFVF9NU0c7DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsN Cj4gKyAgVUlOVDMyICAgIFNpemU7DQo+ICsgIFVJTlQzMiAgICBUeXBlOw0KPiArICBVSU5UMzIg ICAgQ2xhc3NJbmZvcm1hdGlvbk9mZnNldDsNCj4gK30gT1VUX09GX0JBTkRfREFUQV9SRUNPUkQ7 DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgVUlOVDMyICAgIFNpemU7DQo+ICsgIFVJ TlQzMiAgICBUeXBlOw0KPiArICBVSU5UMzIgICAgQ2xhc3NJbmZvcm1hdGlvbk9mZnNldDsNCj4g K30gUEVSX1BBQ0tFVF9JTkZPX0RBVEFfUkVDT1JEOw0KPiArDQo+ICt0eXBlZGVmIHN0cnVjdCB7 DQo+ICsgIExJU1RfRU5UUlkgICAgUGFja2V0TGlzdDsNCj4gKyAgVUlOVDggICAgICAgICAqT3Jn QnVmZmVyOw0KPiArICBVSU5UTiAgICAgICAgIFJlbWFpbmluZ0xlbmd0aDsNCj4gKyAgVUlOVDgg ICAgICAgICAqUGFja2V0U3RhcnRCdWZmZXI7ICAgIC8vIFZhcmlhYmxlIHNpemUgZGF0YSB0byBm b2xsb3cNCj4gK30gUEFDS0VUX0xJU1Q7DQo+ICsNCj4gKyNwcmFnbWEgcGFjaygpDQo+ICsNCj4g KyNlbmRpZg0KPiBkaWZmIC0tZ2l0IGEvVXNiTmV0d29ya1BrZy9OZXR3b3JrQ29tbW9uL0NvbXBv bmVudE5hbWUuYyBiL1VzYk5ldHdvcmtQa2cvTmV0d29ya0NvbW1vbi9Db21wb25lbnROYW1lLmMN Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi5lODM0NjllMTMw NzkNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9Vc2JOZXR3b3JrUGtnL05ldHdvcmtDb21tb24v Q29tcG9uZW50TmFtZS5jDQo+IEBAIC0wLDAgKzEsMjYzIEBADQo+ICsvKiogQGZpbGUNCj4gKyAg VGhpcyBmaWxlIGNvbnRhaW5zIGNvZGUgZm9yIFVTQiBuZXR3b3JrIGNvbW1vbiBkcml2ZXINCj4g KyAgY29tcG9uZW50IG5hbWUgZGVmaW5pdGlvbnMNCj4gKw0KPiArICBDb3B5cmlnaHQgKGMpIDIw MjMsIEFtZXJpY2FuIE1lZ2F0cmVuZHMgSW50ZXJuYXRpb25hbCBMTEMuIEFsbCByaWdodHMgcmVz ZXJ2ZWQuPEJSPg0KPiArICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBh dGVudA0KPiArKiovDQo+ICsNCj4gKyNpbmNsdWRlICJEcml2ZXJCaW5kaW5nLmgiDQo+ICsNCj4g K2V4dGVybiBFRklfRFJJVkVSX0JJTkRJTkdfUFJPVE9DT0wgIGdOZXR3b3JrQ29tbW9uRHJpdmVy QmluZGluZzsNCj4gKw0KPiArR0xPQkFMX1JFTU9WRV9JRl9VTlJFRkVSRU5DRUQgRUZJX1VOSUNP REVfU1RSSU5HX1RBQkxFICBnTmV0d29ya0NvbW1vbkRyaXZlck5hbWVUYWJsZVtdID0gew0KPiAr ICB7DQo+ICsgICAgImVuZztlbiIsDQo+ICsgICAgTCJOZXR3b3JrIENvbW1vbiBEcml2ZXIiDQo+ ICsgIH0sDQo+ICsgIHsNCj4gKyAgICBOVUxMLA0KPiArICAgIE5VTEwNCj4gKyAgfQ0KPiArfTsN Cj4gK0dMT0JBTF9SRU1PVkVfSUZfVU5SRUZFUkVOQ0VEIEVGSV9VTklDT0RFX1NUUklOR19UQUJM RSAgKmdOZXR3b3JrQ29tbW9uQ29udHJvbGxlck5hbWVUYWJsZSA9IE5VTEw7DQo+ICsNCj4gK0VG SV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArTmV0d29ya0NvbW1vbkNvbXBvbmVudE5hbWVHZXREcml2 ZXJOYW1lICgNCj4gKyAgSU4gIEVGSV9DT01QT05FTlRfTkFNRV9QUk9UT0NPTCAgKlRoaXMsDQo+ ICsgIElOICBDSEFSOCAgICAgICAgICAgICAgICAgICAgICAgICpMYW5ndWFnZSwNCj4gKyAgT1VU IENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgKipEcml2ZXJOYW1lDQo+ICsgICk7DQo+ICsN Cj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArTmV0d29ya0NvbW1vbkNvbXBvbmVudE5hbWVH ZXRDb250cm9sbGVyTmFtZSAoDQo+ICsgIElOIEVGSV9DT01QT05FTlRfTkFNRV9QUk9UT0NPTCAg KlRoaXMsDQo+ICsgIElOIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlciwN Cj4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICBDaGlsZEhhbmRsZSAgICAgICAg T1BUSU9OQUwsDQo+ICsgIElOIENIQVI4ICAgICAgICAgICAgICAgICAgICAgICAgKkxhbmd1YWdl LA0KPiArICBPVVQgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICoqQ29udHJvbGxlck5hbWUN Cj4gKyAgKTsNCj4gKw0KPiArR0xPQkFMX1JFTU9WRV9JRl9VTlJFRkVSRU5DRUQgRUZJX0NPTVBP TkVOVF9OQU1FX1BST1RPQ09MICBnTmV0d29ya0NvbW1vbkNvbXBvbmVudE5hbWUgPSB7DQo+ICsg IE5ldHdvcmtDb21tb25Db21wb25lbnROYW1lR2V0RHJpdmVyTmFtZSwNCj4gKyAgTmV0d29ya0Nv bW1vbkNvbXBvbmVudE5hbWVHZXRDb250cm9sbGVyTmFtZSwNCj4gKyAgImVuZyINCj4gK307DQo+ ICsNCj4gK0dMT0JBTF9SRU1PVkVfSUZfVU5SRUZFUkVOQ0VEIEVGSV9DT01QT05FTlRfTkFNRTJf UFJPVE9DT0wgIGdOZXR3b3JrQ29tbW9uQ29tcG9uZW50TmFtZTIgPSB7DQo+ICsgIChFRklfQ09N UE9ORU5UX05BTUUyX0dFVF9EUklWRVJfTkFNRSlOZXR3b3JrQ29tbW9uQ29tcG9uZW50TmFtZUdl dERyaXZlck5hbWUsDQo+ICsgIChFRklfQ09NUE9ORU5UX05BTUUyX0dFVF9DT05UUk9MTEVSX05B TUUpTmV0d29ya0NvbW1vbkNvbXBvbmVudE5hbWVHZXRDb250cm9sbGVyTmFtZSwNCj4gKyAgImVu Ig0KPiArfTsNCj4gKw0KPiArLyoqDQo+ICsgIFJldHJpZXZlcyBhIFVuaWNvZGUgc3RyaW5nIHRo YXQgaXMgdGhlIHVzZXIgcmVhZGFibGUgbmFtZSBvZiB0aGUgZHJpdmVyLg0KPiArDQo+ICsgIFRo aXMgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSB1c2VyIHJlYWRhYmxlIG5hbWUgb2YgYSBkcml2ZXIg aW4gdGhlIGZvcm0gb2YgYQ0KPiArICBVbmljb2RlIHN0cmluZy4gSWYgdGhlIGRyaXZlciBzcGVj aWZpZWQgYnkgVGhpcyBoYXMgYSB1c2VyIHJlYWRhYmxlIG5hbWUgaW4NCj4gKyAgdGhlIGxhbmd1 YWdlIHNwZWNpZmllZCBieSBMYW5ndWFnZSwgdGhlbiBhIHBvaW50ZXIgdG8gdGhlIGRyaXZlciBu YW1lIGlzDQo+ICsgIHJldHVybmVkIGluIERyaXZlck5hbWUsIGFuZCBFRklfU1VDQ0VTUyBpcyBy ZXR1cm5lZC4gSWYgdGhlIGRyaXZlciBzcGVjaWZpZWQNCj4gKyAgYnkgVGhpcyBkb2VzIG5vdCBz dXBwb3J0IHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkgTGFuZ3VhZ2UsDQo+ICsgIHRoZW4gRUZJ X1VOU1VQUE9SVEVEIGlzIHJldHVybmVkLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAg ICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRUZJX0NPTVBPTkVOVF9OQU1FMl9QUk9UT0NPTCBv cg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFRklfQ09NUE9ORU5UX05BTUVf UFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gIExhbmd1YWdlICAgICAgICAgIEEg cG9pbnRlciB0byBhIE51bGwtdGVybWluYXRlZCBBU0NJSSBzdHJpbmcNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYXJyYXkgaW5kaWNhdGluZyB0aGUgbGFuZ3VhZ2UuIFRoaXMg aXMgdGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlIG9mIHRo ZSBkcml2ZXIgbmFtZSB0aGF0IHRoZSBjYWxsZXIgaXMNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmVxdWVzdGluZywgYW5kIGl0IG11c3QgbWF0Y2ggb25lIG9mIHRoZQ0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZXMgc3BlY2lmaWVkIGluIFN1 cHBvcnRlZExhbmd1YWdlcy4gVGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG51bWJlciBvZiBsYW5ndWFnZXMgc3VwcG9ydGVkIGJ5IGEgZHJpdmVyIGlzIHVwDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBkcml2ZXIgd3JpdGVyLiBMYW5ndWFn ZSBpcyBzcGVjaWZpZWQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gUkZD IDQ2NDYgb3IgSVNPIDYzOS0yIGxhbmd1YWdlIGNvZGUgZm9ybWF0Lg0KPiArICBAcGFyYW1bb3V0 XSBEcml2ZXJOYW1lICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIFVuaWNvZGUgc3RyaW5nIHRvIHJl dHVybi4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBVbmljb2RlIHN0 cmluZyBpcyB0aGUgbmFtZSBvZiB0aGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGluIHRoZSBsYW5ndWFnZQ0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgYnkgTGFuZ3VhZ2UuDQo+ICsNCj4gKyAg QHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIFVuaWNvZGUgc3RyaW5nIGZvciB0aGUg RHJpdmVyIHNwZWNpZmllZCBieQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU aGlzIGFuZCB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5IExhbmd1YWdlIHdhcw0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5lZCBpbiBEcml2ZXJOYW1lLg0KPiArICBA cmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBMYW5ndWFnZSBpcyBOVUxMLg0KPiArICBAcmV0 dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBEcml2ZXJOYW1lIGlzIE5VTEwuDQo+ICsgIEByZXR2 YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIFRoZSBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMgZG9l cyBub3Qgc3VwcG9ydA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGFu Z3VhZ2Ugc3BlY2lmaWVkIGJ5IExhbmd1YWdlLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMN Cj4gK0VGSUFQSQ0KPiArTmV0d29ya0NvbW1vbkNvbXBvbmVudE5hbWVHZXREcml2ZXJOYW1lICgN Cj4gKyAgSU4gIEVGSV9DT01QT05FTlRfTkFNRV9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOICBD SEFSOCAgICAgICAgICAgICAgICAgICAgICAgICpMYW5ndWFnZSwNCj4gKyAgT1VUIENIQVIxNiAg ICAgICAgICAgICAgICAgICAgICAgKipEcml2ZXJOYW1lDQo+ICsgICkNCj4gK3sNCj4gKyAgcmV0 dXJuIExvb2t1cFVuaWNvZGVTdHJpbmcyICgNCj4gKyAgICAgICAgICAgTGFuZ3VhZ2UsDQo+ICsg ICAgICAgICAgIFRoaXMtPlN1cHBvcnRlZExhbmd1YWdlcywNCj4gKyAgICAgICAgICAgZ05ldHdv cmtDb21tb25Ecml2ZXJOYW1lVGFibGUsDQo+ICsgICAgICAgICAgIERyaXZlck5hbWUsDQo+ICsg ICAgICAgICAgIChCT09MRUFOKShUaGlzID09ICZnTmV0d29ya0NvbW1vbkNvbXBvbmVudE5hbWUp DQo+ICsgICAgICAgICAgICk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBSZXRyaWV2ZXMgYSBV bmljb2RlIHN0cmluZyB0aGF0IGlzIHRoZSB1c2VyIHJlYWRhYmxlIG5hbWUgb2YgdGhlIGNvbnRy b2xsZXINCj4gKyAgdGhhdCBpcyBiZWluZyBtYW5hZ2VkIGJ5IGEgZHJpdmVyLg0KPiArDQo+ICsg IFRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSB1c2VyIHJlYWRhYmxlIG5hbWUgb2YgdGhlIGNv bnRyb2xsZXIgc3BlY2lmaWVkIGJ5DQo+ICsgIENvbnRyb2xsZXJIYW5kbGUgYW5kIENoaWxkSGFu ZGxlIGluIHRoZSBmb3JtIG9mIGEgVW5pY29kZSBzdHJpbmcuIElmIHRoZQ0KPiArICBkcml2ZXIg c3BlY2lmaWVkIGJ5IFRoaXMgaGFzIGEgdXNlciByZWFkYWJsZSBuYW1lIGluIHRoZSBsYW5ndWFn ZSBzcGVjaWZpZWQgYnkNCj4gKyAgTGFuZ3VhZ2UsIHRoZW4gYSBwb2ludGVyIHRvIHRoZSBjb250 cm9sbGVyIG5hbWUgaXMgcmV0dXJuZWQgaW4gQ29udHJvbGxlck5hbWUsDQo+ICsgIGFuZCBFRklf U1VDQ0VTUyBpcyByZXR1cm5lZC4gIElmIHRoZSBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMgaXMg bm90IGN1cnJlbnRseQ0KPiArICBtYW5hZ2luZyB0aGUgY29udHJvbGxlciBzcGVjaWZpZWQgYnkg Q29udHJvbGxlckhhbmRsZSBhbmQgQ2hpbGRIYW5kbGUsDQo+ICsgIHRoZW4gRUZJX1VOU1VQUE9S VEVEIGlzIHJldHVybmVkLiAgSWYgdGhlIGRyaXZlciBzcGVjaWZpZWQgYnkgVGhpcyBkb2VzIG5v dA0KPiArICBzdXBwb3J0IHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkgTGFuZ3VhZ2UsIHRoZW4g RUZJX1VOU1VQUE9SVEVEIGlzIHJldHVybmVkLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMg ICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRUZJX0NPTVBPTkVOVF9OQU1FMl9QUk9UT0NP TCBvcg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFRklfQ09NUE9ORU5UX05B TUVfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gIENvbnRyb2xsZXIgICAgICAg IFRoZSBoYW5kbGUgb2YgYSBjb250cm9sbGVyIHRoYXQgdGhlIGRyaXZlcg0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgYnkgVGhpcyBpcyBtYW5hZ2luZy4gIFRo aXMgaGFuZGxlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcyB0 aGUgY29udHJvbGxlciB3aG9zZSBuYW1lIGlzIHRvIGJlDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJldHVybmVkLg0KPiArICBAcGFyYW1baW5dICBDaGlsZEhhbmRsZSAgICAg ICBUaGUgaGFuZGxlIG9mIHRoZSBjaGlsZCBjb250cm9sbGVyIHRvIHJldHJpZXZlDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBuYW1lIG9mLiAgVGhpcyBpcyBhbiBvcHRp b25hbCBwYXJhbWV0ZXIgdGhhdA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt YXkgYmUgTlVMTC4gIEl0IHdpbGwgYmUgTlVMTCBmb3IgZGV2aWNlDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRyaXZlcnMuICBJdCB3aWxsIGFsc28gYmUgTlVMTCBmb3IgYSBi dXMgZHJpdmVycw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHdpc2gg dG8gcmV0cmlldmUgdGhlIG5hbWUgb2YgdGhlIGJ1cw0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb250cm9sbGVyLiAgSXQgd2lsbCBub3QgYmUgTlVMTCBmb3IgYSBidXMNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVyIHRoYXQgd2lzaGVzIHRvIHJl dHJpZXZlIHRoZSBuYW1lIG9mIGENCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2hpbGQgY29udHJvbGxlci4NCj4gKyAgQHBhcmFtW2luXSAgTGFuZ3VhZ2UgICAgICAgICAgQSBw b2ludGVyIHRvIGEgTnVsbC10ZXJtaW5hdGVkIEFTQ0lJIHN0cmluZw0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBhcnJheSBpbmRpY2F0aW5nIHRoZSBsYW5ndWFnZS4gIFRoaXMg aXMgdGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlIG9mIHRo ZSBkcml2ZXIgbmFtZSB0aGF0IHRoZSBjYWxsZXIgaXMNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmVxdWVzdGluZywgYW5kIGl0IG11c3QgbWF0Y2ggb25lIG9mIHRoZQ0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZXMgc3BlY2lmaWVkIGluIFN1 cHBvcnRlZExhbmd1YWdlcy4gVGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG51bWJlciBvZiBsYW5ndWFnZXMgc3VwcG9ydGVkIGJ5IGEgZHJpdmVyIGlzIHVwDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBkcml2ZXIgd3JpdGVyLiBMYW5ndWFn ZSBpcyBzcGVjaWZpZWQgaW4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkZD IDQ2NDYgb3IgSVNPIDYzOS0yIGxhbmd1YWdlIGNvZGUgZm9ybWF0Lg0KPiArICBAcGFyYW1bb3V0 XSBDb250cm9sbGVyTmFtZSAgICBBIHBvaW50ZXIgdG8gdGhlIFVuaWNvZGUgc3RyaW5nIHRvIHJl dHVybi4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBVbmljb2RlIHN0 cmluZyBpcyB0aGUgbmFtZSBvZiB0aGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29udHJvbGxlciBzcGVjaWZpZWQgYnkgQ29udHJvbGxlckhhbmRsZSBhbmQNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hpbGRIYW5kbGUgaW4gdGhlIGxhbmd1YWdlIHNw ZWNpZmllZCBieQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYW5ndWFnZSBm cm9tIHRoZSBwb2ludCBvZiB2aWV3IG9mIHRoZSBkcml2ZXINCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3BlY2lmaWVkIGJ5IFRoaXMuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklf U1VDQ0VTUyAgICAgICAgICAgVGhlIFVuaWNvZGUgc3RyaW5nIGZvciB0aGUgdXNlciByZWFkYWJs ZSBuYW1lIGluDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsYW5ndWFn ZSBzcGVjaWZpZWQgYnkgTGFuZ3VhZ2UgZm9yIHRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMgd2FzIHJldHVybmVkIGluDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERyaXZlck5hbWUuDQo+ICsgIEByZXR2YWwg RUZJX0lOVkFMSURfUEFSQU1FVEVSIENvbnRyb2xsZXJIYW5kbGUgaXMgbm90IGEgdmFsaWQgRUZJ X0hBTkRMRS4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgQ2hpbGRIYW5kbGUg aXMgbm90IE5VTEwgYW5kIGl0IGlzIG5vdCBhIHZhbGlkDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEVGSV9IQU5ETEUuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1F VEVSIExhbmd1YWdlIGlzIE5VTEwuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVS IENvbnRyb2xsZXJOYW1lIGlzIE5VTEwuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAg ICAgIFRoZSBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMgaXMgbm90IGN1cnJlbnRseQ0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYW5hZ2luZyB0aGUgY29udHJvbGxlciBzcGVj aWZpZWQgYnkNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhh bmRsZSBhbmQgQ2hpbGRIYW5kbGUuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAg IFRoZSBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMgZG9lcyBub3Qgc3VwcG9ydA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5IExhbmd1 YWdlLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArTmV0d29ya0Nv bW1vbkNvbXBvbmVudE5hbWVHZXRDb250cm9sbGVyTmFtZSAoDQo+ICsgIElOICBFRklfQ09NUE9O RU5UX05BTUVfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiAgRUZJX0hBTkRMRSAgICAgICAgICAg ICAgICAgICBDb250cm9sbGVyLA0KPiArICBJTiAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAg ICBDaGlsZEhhbmRsZSAgICAgICAgT1BUSU9OQUwsDQo+ICsgIElOICBDSEFSOCAgICAgICAgICAg ICAgICAgICAgICAgICpMYW5ndWFnZSwNCj4gKyAgT1VUIENIQVIxNiAgICAgICAgICAgICAgICAg ICAgICAgKipDb250cm9sbGVyTmFtZQ0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAg ICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgKkhh bmRsZU5hbWU7DQo+ICsgIEVGSV9VU0JfSU9fUFJPVE9DT0wgICAgICAgICpVc2JJbzsNCj4gKyAg RUZJX1VTQl9ERVZJQ0VfREVTQ1JJUFRPUiAgRGV2RGVzYzsNCj4gKw0KPiArICBpZiAoIUxhbmd1 YWdlIHx8ICFDb250cm9sbGVyTmFtZSkgew0KPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJB TUVURVI7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoQ2hpbGRIYW5kbGUgPT0gTlVMTCkgew0KPiAr ICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAv LyBNYWtlIHN1cmUgdGhpcyBkcml2ZXIgaXMgY3VycmVudGx5IG1hbmFnaW5nIENvbnRyb2xsZXJI YW5kbGUNCj4gKyAgLy8NCj4gKyAgU3RhdHVzID0gRWZpVGVzdE1hbmFnZWREZXZpY2UgKA0KPiAr ICAgICAgICAgICAgIENvbnRyb2xsZXIsDQo+ICsgICAgICAgICAgICAgZ05ldHdvcmtDb21tb25E cml2ZXJCaW5kaW5nLkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgICAgJmdFZGtJ SVVzYkV0aFByb3RvY29sR3VpZA0KPiArICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAg Ly8NCj4gKyAgLy8gTWFrZSBzdXJlIHRoaXMgZHJpdmVyIHByb2R1Y2VkIENoaWxkSGFuZGxlDQo+ ICsgIC8vDQo+ICsgIFN0YXR1cyA9IEVmaVRlc3RDaGlsZEhhbmRsZSAoDQo+ICsgICAgICAgICAg ICAgQ29udHJvbGxlciwNCj4gKyAgICAgICAgICAgICBDaGlsZEhhbmRsZSwNCj4gKyAgICAgICAg ICAgICAmZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlkDQo+ICsgICAgICAgICAgICAgKTsNCj4gKyAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0N Cj4gKw0KPiArICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sIChDb250cm9sbGVyLCAmZ0Vm aVVzYklvUHJvdG9jb2xHdWlkLCAoVk9JRCAqKikmVXNiSW8pOw0KPiArDQo+ICsgIGlmICghRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgU3RhdHVzID0gVXNiSW8tPlVzYkdldERldmljZURl c2NyaXB0b3IgKFVzYklvLCAmRGV2RGVzYyk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPiArICAgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBTdGF0 dXMgPSBVc2JJby0+VXNiR2V0U3RyaW5nRGVzY3JpcHRvciAoVXNiSW8sIDB4NDA5LCBEZXZEZXNj LlN0ck1hbnVmYWN0dXJlciwgJkhhbmRsZU5hbWUpOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0 YXR1cykpIHsNCj4gKyAgICAgIHJldHVybiBTdGF0dXM7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAg KkNvbnRyb2xsZXJOYW1lID0gSGFuZGxlTmFtZTsNCj4gKw0KPiArICAgIGlmIChnTmV0d29ya0Nv bW1vbkNvbnRyb2xsZXJOYW1lVGFibGUgIT0gTlVMTCkgew0KPiArICAgICAgRnJlZVVuaWNvZGVT dHJpbmdUYWJsZSAoZ05ldHdvcmtDb21tb25Db250cm9sbGVyTmFtZVRhYmxlKTsNCj4gKyAgICAg IGdOZXR3b3JrQ29tbW9uQ29udHJvbGxlck5hbWVUYWJsZSA9IE5VTEw7DQo+ICsgICAgfQ0KPiAr DQo+ICsgICAgU3RhdHVzID0gQWRkVW5pY29kZVN0cmluZzIgKA0KPiArICAgICAgICAgICAgICAg ImVuZyIsDQo+ICsgICAgICAgICAgICAgICBnTmV0d29ya0NvbW1vbkNvbXBvbmVudE5hbWUuU3Vw cG9ydGVkTGFuZ3VhZ2VzLA0KPiArICAgICAgICAgICAgICAgJmdOZXR3b3JrQ29tbW9uQ29udHJv bGxlck5hbWVUYWJsZSwNCj4gKyAgICAgICAgICAgICAgIEhhbmRsZU5hbWUsDQo+ICsgICAgICAg ICAgICAgICBUUlVFDQo+ICsgICAgICAgICAgICAgICApOw0KPiArICAgIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4gKyAgICAgIHJldHVybiBTdGF0dXM7DQo+ICsgICAgfQ0KPiArDQo+ICsg ICAgU3RhdHVzID0gQWRkVW5pY29kZVN0cmluZzIgKA0KPiArICAgICAgICAgICAgICAgImVuIiwN Cj4gKyAgICAgICAgICAgICAgIGdOZXR3b3JrQ29tbW9uQ29tcG9uZW50TmFtZTIuU3VwcG9ydGVk TGFuZ3VhZ2VzLA0KPiArICAgICAgICAgICAgICAgJmdOZXR3b3JrQ29tbW9uQ29udHJvbGxlck5h bWVUYWJsZSwNCj4gKyAgICAgICAgICAgICAgIEhhbmRsZU5hbWUsDQo+ICsgICAgICAgICAgICAg ICBGQUxTRQ0KPiArICAgICAgICAgICAgICAgKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQo+ICsgICAgICByZXR1cm4gU3RhdHVzOw0KPiArICAgIH0NCj4gKw0KPiArICAgIHJl dHVybiBMb29rdXBVbmljb2RlU3RyaW5nMiAoDQo+ICsgICAgICAgICAgICAgTGFuZ3VhZ2UsDQo+ ICsgICAgICAgICAgICAgVGhpcy0+U3VwcG9ydGVkTGFuZ3VhZ2VzLA0KPiArICAgICAgICAgICAg IGdOZXR3b3JrQ29tbW9uQ29udHJvbGxlck5hbWVUYWJsZSwNCj4gKyAgICAgICAgICAgICBDb250 cm9sbGVyTmFtZSwNCj4gKyAgICAgICAgICAgICAoQk9PTEVBTikoVGhpcyA9PSAmZ05ldHdvcmtD b21tb25Db21wb25lbnROYW1lKQ0KPiArICAgICAgICAgICAgICk7DQo+ICsgIH0NCj4gKw0KPiAr ICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiArfQ0KPiBkaWZmIC0tZ2l0IGEvVXNiTmV0d29y a1BrZy9OZXR3b3JrQ29tbW9uL0RyaXZlckJpbmRpbmcuYyBiL1VzYk5ldHdvcmtQa2cvTmV0d29y a0NvbW1vbi9Ecml2ZXJCaW5kaW5nLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXgg MDAwMDAwMDAwMDAwLi4yM2I3OTEzNjIwOTENCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9Vc2JO ZXR3b3JrUGtnL05ldHdvcmtDb21tb24vRHJpdmVyQmluZGluZy5jDQo+IEBAIC0wLDAgKzEsNTk1 IEBADQo+ICsvKiogQGZpbGUNCj4gKyAgVGhpcyBmaWxlIGNvbnRhaW5zIGNvZGUgZm9yIFVTQiBu ZXR3b3JrIGJpbmRpbmcgZHJpdmVyDQo+ICsNCj4gKyAgQ29weXJpZ2h0IChjKSAyMDIzLCBBbWVy aWNhbiBNZWdhdHJlbmRzIEludGVybmF0aW9uYWwgTExDLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxC Uj4NCj4gKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4g KyoqLw0KPiArDQo+ICsjaW5jbHVkZSAiRHJpdmVyQmluZGluZy5oIg0KPiArDQo+ICtQWEVfU1df VU5ESSAgKmdQeGUgPSBOVUxMOw0KPiArTklDX0RFVklDRSAgICpnTGFuRGV2aWNlTGlzdFtNQVhf TEFOX0lOVEVSRkFDRV07DQo+ICtVSU5UMzIgICAgICAgZ1JhdGVMaW1pdGluZ0NyZWRpdDsNCj4g K1VJTlQzMiAgICAgICBnUmF0ZUxpbWl0aW5nUG9sbFRpbWVyOw0KPiArQk9PTEVBTiAgICAgIGdS YXRlTGltaXRpbmdFbmFibGU7DQo+ICsNCj4gK0VGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAg Z05ldHdvcmtDb21tb25Ecml2ZXJCaW5kaW5nID0gew0KPiArICBOZXR3b3JrQ29tbW9uU3VwcG9y dGVkLA0KPiArICBOZXR3b3JrQ29tbW9uRHJpdmVyU3RhcnQsDQo+ICsgIE5ldHdvcmtDb21tb25E cml2ZXJTdG9wLA0KPiArICBORVRXT1JLX0NPTU1PTl9EUklWRVJfVkVSU0lPTiwNCj4gKyAgTlVM TCwNCj4gKyAgTlVMTA0KPiArfTsNCj4gKw0KPiArLyoqDQo+ICsgIENyZWF0ZSBNQUMgRGV2aWNl IFBhdGgNCj4gKw0KPiArICBAcGFyYW1baW4sIG91dF0gRGV2ICAgICAgICAgICAgIEEgcG9pbnRl ciB0byB0aGUgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1b aW5dICAgICAgQmFzZURldiAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRUZJX0RFVklDRV9QQVRI X1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dICAgICAgTmljICAgICAgICAgICAg IEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiAr DQo+ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgICAgVGhlIGRldmljZSBwYXRoIGNv dWxkIG5vdCBiZSBjcmVhdGVkIHN1Y2Nlc3NmdWxseSBkdWUgdG8gYSBsYWNrIG9mIHJlc291cmNl cy4NCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICBNQUMgZGV2aWNlIHBhdGgg Y3JlYXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArQ3Jl YXRlTWFjRGV2aWNlUGF0aCAoDQo+ICsgIElOIE9VVCAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09M ICAqKkRldiwNCj4gKyAgSU4gICAgICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICpCYXNlRGV2 LA0KPiArICBJTiAgICAgIE5JQ19EQVRBICAgICAgICAgICAgICAgICAgKk5pYw0KPiArICApDQo+ ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBNQUNfQURE Ul9ERVZJQ0VfUEFUSCAgICAgIE1hY0FkZHJOb2RlOw0KPiArICBFRklfREVWSUNFX1BBVEhfUFJP VE9DT0wgICpFbmROb2RlOw0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICpEZXZpY2VQ YXRoOw0KPiArICBVSU5UMTYgICAgICAgICAgICAgICAgICAgIFRvdGFsTGVuZ3RoOw0KPiArICBV SU5UMTYgICAgICAgICAgICAgICAgICAgIEJhc2VMZW5ndGg7DQo+ICsNCj4gKyAgWmVyb01lbSAo Jk1hY0FkZHJOb2RlLCBzaXplb2YgKE1BQ19BRERSX0RFVklDRV9QQVRIKSk7DQo+ICsgIENvcHlN ZW0gKCZNYWNBZGRyTm9kZS5NYWNBZGRyZXNzLCAmTmljLT5NYWNBZGRyLCBzaXplb2YgKEVGSV9N QUNfQUREUkVTUykpOw0KPiArDQo+ICsgIE1hY0FkZHJOb2RlLkhlYWRlci5UeXBlICAgICAgPSBN RVNTQUdJTkdfREVWSUNFX1BBVEg7DQo+ICsgIE1hY0FkZHJOb2RlLkhlYWRlci5TdWJUeXBlICAg PSBNU0dfTUFDX0FERFJfRFA7DQo+ICsgIE1hY0FkZHJOb2RlLkhlYWRlci5MZW5ndGhbMF0gPSAo VUlOVDgpc2l6ZW9mIChNYWNBZGRyTm9kZSk7DQo+ICsgIE1hY0FkZHJOb2RlLkhlYWRlci5MZW5n dGhbMV0gPSAwOw0KPiArDQo+ICsgIEVuZE5vZGUgPSBCYXNlRGV2Ow0KPiArDQo+ICsgIHdoaWxl ICghSXNEZXZpY2VQYXRoRW5kIChFbmROb2RlKSkgew0KPiArICAgIEVuZE5vZGUgPSBOZXh0RGV2 aWNlUGF0aE5vZGUgKEVuZE5vZGUpOw0KPiArICB9DQo+ICsNCj4gKyAgQmFzZUxlbmd0aCAgPSAo VUlOVDE2KSgoVUlOVE4pKEVuZE5vZGUpIC0gKFVJTlROKShCYXNlRGV2KSk7DQo+ICsgIFRvdGFs TGVuZ3RoID0gKFVJTlQxNikoQmFzZUxlbmd0aCArIHNpemVvZiAoTWFjQWRkck5vZGUpICsgc2l6 ZW9mIChFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wpKTsNCj4gKw0KPiArICBTdGF0dXMgPSBnQlMt PkFsbG9jYXRlUG9vbCAoRWZpQm9vdFNlcnZpY2VzRGF0YSwgVG90YWxMZW5ndGgsIChWT0lEICoq KSZEZXZpY2VQYXRoKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJl dHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICAqRGV2ID0gKEVGSV9ERVZJQ0VfUEFUSF9Q Uk9UT0NPTCAqKURldmljZVBhdGg7DQo+ICsgIENvcHlNZW0gKERldmljZVBhdGgsIChDSEFSOCAq KUJhc2VEZXYsIEJhc2VMZW5ndGgpOw0KPiArICBEZXZpY2VQYXRoICs9IEJhc2VMZW5ndGg7DQo+ ICsgIENvcHlNZW0gKERldmljZVBhdGgsIChDSEFSOCAqKSZNYWNBZGRyTm9kZSwgc2l6ZW9mIChN YWNBZGRyTm9kZSkpOw0KPiArICBEZXZpY2VQYXRoICs9IHNpemVvZiAoTWFjQWRkck5vZGUpOw0K PiArICBDb3B5TWVtIChEZXZpY2VQYXRoLCAoQ0hBUjggKilFbmROb2RlLCBzaXplb2YgKEVGSV9E RVZJQ0VfUEFUSF9QUk9UT0NPTCkpOw0KPiArDQo+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4g K30NCj4gKw0KPiArLyoqDQo+ICsgIE5ldHdvcmsgQ29tbW9uIERyaXZlciBCaW5kaW5nIFN1cHBv cnQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgICAgICAgUHJvdG9j b2wgaW5zdGFuY2UgcG9pbnRlci4NCj4gKyAgQHBhcmFtW2luXSAgQ29udHJvbGxlckhhbmRsZSAg ICAgICAgSGFuZGxlIG9mIGRldmljZSB0byB0ZXN0Lg0KPiArICBAcGFyYW1baW5dICBSZW1haW5p bmdEZXZpY2VQYXRoICAgICBPcHRpb25hbCBwYXJhbWV0ZXIgdXNlIHRvIHBpY2sgYSBzcGVjaWZp YyBjaGlsZA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2Ug dG8gc3RhcnQuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgICAg VGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhpcyBkZXZpY2UuDQo+ICsgIEByZXR2YWwgRUZJX0FMUkVB RFlfU1RBUlRFRCAgICAgICAgIFRoaXMgZHJpdmVyIGlzIGFscmVhZHkgcnVubmluZyBvbiB0aGlz IGRldmljZS4NCj4gKyAgQHJldHZhbCBvdGhlciAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBk cml2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGRldmljZS4NCj4gKw0KPiArKiovDQo+ICtFRklf U1RBVFVTDQo+ICtFRklBUEkNCj4gK05ldHdvcmtDb21tb25TdXBwb3J0ZWQgKA0KPiArICBJTiBF RklfRFJJVkVSX0JJTkRJTkdfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiBFRklfSEFORExFICAg ICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgIElOIEVGSV9ERVZJQ0VfUEFU SF9QUk9UT0NPTCAgICAgKlJlbWFpbmluZ0RldmljZVBhdGgNCj4gKyAgKQ0KPiArew0KPiArICBF RklfU1RBVFVTICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgRURLSUlfVVNCX0VUSEVS TkVUX1BST1RPQ09MICAqVXNiRXRoOw0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+T3BlblByb3Rv Y29sICgNCj4gKyAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAg ICAgICAgICAgICAmZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAg ICAgKFZPSUQgKiopJlVzYkV0aCwNCj4gKyAgICAgICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJp bmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiAr ICAgICAgICAgICAgICAgICAgRUZJX09QRU5fUFJPVE9DT0xfQllfRFJJVkVSDQo+ICsgICAgICAg ICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0 dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsg ICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3Rv Y29sR3VpZCwNCj4gKyAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAg ICAgICBDb250cm9sbGVySGFuZGxlDQo+ICsgICAgICAgICApOw0KPiArICByZXR1cm4gU3RhdHVz Ow0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgTmV0d29yayBDb21tb24gRHJpdmVyIEJpbmRpbmcg U3RhcnQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgICAgICAgUHJv dG9jb2wgaW5zdGFuY2UgcG9pbnRlci4NCj4gKyAgQHBhcmFtW2luXSAgQ29udHJvbGxlckhhbmRs ZSAgICAgICAgSGFuZGxlIG9mIGRldmljZSB0byBiaW5kIGRyaXZlciB0by4NCj4gKyAgQHBhcmFt W2luXSAgUmVtYWluaW5nRGV2aWNlUGF0aCAgICAgT3B0aW9uYWwgcGFyYW1ldGVyIHVzZSB0byBw aWNrIGEgc3BlY2lmaWMgY2hpbGQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZGV2aWNlIHRvIHN0YXJ0Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAg ICAgICAgICAgICAgIFRoaXMgZHJpdmVyIGlzIGFkZGVkIHRvIENvbnRyb2xsZXJIYW5kbGUNCj4g KyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgICAgICAgVGhpcyBkcml2ZXIgY291bGQg bm90IGJlIHN0YXJ0ZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yDQo+ICsgIEByZXR2YWwgRUZJX09V VF9PRl9SRVNPVVJDRVMgICAgICAgIFRoZSBkcml2ZXIgY291bGQgbm90IGluc3RhbGwgc3VjY2Vz c2Z1bGx5IGR1ZSB0byBhIGxhY2sgb2YgcmVzb3VyY2VzLg0KPiArICBAcmV0dmFsIG90aGVyICAg ICAgICAgICAgICAgICAgICAgICBUaGlzIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZGV2 aWNlDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtOZXR3b3JrQ29t bW9uRHJpdmVyU3RhcnQgKA0KPiArICBJTiBFRklfRFJJVkVSX0JJTkRJTkdfUFJPVE9DT0wgICpU aGlzLA0KPiArICBJTiBFRklfSEFORExFICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5k bGUsDQo+ICsgIElOIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgKlJlbWFpbmluZ0Rldmlj ZVBhdGgNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgIFN0 YXR1czsNCj4gKyAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAqVXNiRXRoUGF0aDsNCj4g KyAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVXNiRXRoOw0KPiArICBFRklfTUFDX0FE RFJFU1MgICAgICAgICAgICAgIE1hY0FkZHJlc3M7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAg ICAgICAgICAgQnVsa0RhdGFTaXplOw0KPiArICBOSUNfREVWSUNFICAgICAgICAgICAgICAgICAg ICpOaWNEZXZpY2U7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgKlRtcFB4ZVBv aW50ZXI7DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wgKA0KPiArICAgICAg ICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICZnRWRr SUlVc2JFdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmVXNi RXRoLA0KPiArICAgICAgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4g KyAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAg ICBFRklfT1BFTl9QUk9UT0NPTF9CWV9EUklWRVINCj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiAr ICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wgKA0KPiArICAgICAgICAg ICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICZnRWZpRGV2 aWNlUGF0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgIChWT0lEICoqKSZVc2JF dGhQYXRoLA0KPiArICAgICAgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwN Cj4gKyAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAg ICAgICBFRklfT1BFTl9QUk9UT0NPTF9CWV9EUklWRVINCj4gKyAgICAgICAgICAgICAgICAgICk7 DQo+ICsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIGdCUy0+Q2xvc2VQ cm90b2NvbCAoDQo+ICsgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAg ICZnRWRrSUlVc2JFdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgIFRoaXMtPkRyaXZlckJp bmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgICAgICAg ICAgKTsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgWmVyb01lbSAo Jk1hY0FkZHJlc3MsIHNpemVvZiAoRUZJX01BQ19BRERSRVNTKSk7DQo+ICsNCj4gKyAgU3RhdHVz ID0gVXNiRXRoLT5Vc2JFdGhNYWNBZGRyZXNzIChVc2JFdGgsICZNYWNBZGRyZXNzKTsNCj4gKyAg QVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4gKyAgU3RhdHVzID0gVXNiRXRoLT5Vc2JFdGhN YXhCdWxrU2l6ZSAoVXNiRXRoLCAmQnVsa0RhdGFTaXplKTsNCj4gKw0KPiArICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+ICsgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAgICAg ICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9j b2xHdWlkLA0KPiArICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAg ICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ICsgICAgICAgICAgICk7DQo+ICsgICAgZ0JTLT5D bG9zZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAg ICAgICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgVGhpcy0+RHJp dmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAg ICAgICAgICApOw0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBOaWNE ZXZpY2UgPSBBbGxvY2F0ZVplcm9Qb29sIChzaXplb2YgKE5JQ19ERVZJQ0UpICsgQnVsa0RhdGFT aXplICsgNDA5Nik7DQo+ICsgIGlmICghTmljRGV2aWNlKSB7DQo+ICsgICAgZ0JTLT5DbG9zZVBy b3RvY29sICgNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAg JmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICBUaGlzLT5Ecml2ZXJC aW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ICsgICAgICAg ICAgICk7DQo+ICsgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgQ29udHJv bGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCwNCj4g KyAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgQ29u dHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAgICApOw0KPiArICAgIHJldHVybiBFRklfT1VUX09G X1JFU09VUkNFUzsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vIGZvciBhbGlnbm1lbnQgYWRqdXN0bWVu dA0KPiArICBpZiAoZ1B4ZSA9PSBOVUxMKSB7DQo+ICsgICAgVG1wUHhlUG9pbnRlciA9IE5VTEw7 DQo+ICsgICAgVG1wUHhlUG9pbnRlciA9IEFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZiAoUFhFX1NX X1VOREkpICsgMTYpOw0KPiArICAgIGlmICghVG1wUHhlUG9pbnRlcikgew0KPiArICAgICAgaWYg KE5pY0RldmljZSAhPSBOVUxMKSB7DQo+ICsgICAgICAgIEZyZWVQb29sIChOaWNEZXZpY2UpOw0K PiArICAgICAgfQ0KPiArDQo+ICsgICAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAg ICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRo UHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUs DQo+ICsgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAgICAgICk7DQo+ ICsgICAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgIENvbnRyb2xsZXJI YW5kbGUsDQo+ICsgICAgICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCwNCj4gKyAg ICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICAgIENv bnRyb2xsZXJIYW5kbGUNCj4gKyAgICAgICAgICAgICApOw0KPiArDQo+ICsgICAgICByZXR1cm4g RUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ICsgICAgfSBlbHNlIHsNCj4gKyAgICAgIC8vIGNoZWNr IGZvciBwYXJhZ3JhcGggYWxpZ25tZW50IGhlcmUNCj4gKyAgICAgIGlmICgoKFVJTlROKVRtcFB4 ZVBvaW50ZXIgJiAweDBGKSAhPSAwKSB7DQo+ICsgICAgICAgIGdQeGUgPSAoUFhFX1NXX1VOREkg KikoVG1wUHhlUG9pbnRlciArIDgpOw0KPiArICAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgZ1B4 ZSA9IChQWEVfU1dfVU5ESSAqKVRtcFB4ZVBvaW50ZXI7DQo+ICsgICAgICB9DQo+ICsNCj4gKyAg ICAgIGlmICghZ1B4ZSkgew0KPiArICAgICAgICBpZiAoTmljRGV2aWNlICE9IE5VTEwpIHsNCj4g KyAgICAgICAgICBGcmVlUG9vbCAoTmljRGV2aWNlKTsNCj4gKyAgICAgICAgfQ0KPiArDQo+ICsg ICAgICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgICBDb250cm9sbGVy SGFuZGxlLA0KPiArICAgICAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0K PiArICAgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAg ICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgICAgICAgICAgICAgICk7DQo+ICsgICAgICAg IGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxl LA0KPiArICAgICAgICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCwNCj4gKyAgICAg ICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICBD b250cm9sbGVySGFuZGxlDQo+ICsgICAgICAgICAgICAgICApOw0KPiArICAgICAgICByZXR1cm4g RUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIFB4ZVN0cnVj dEluaXQgKGdQeGUpOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIE5pY0RldmljZS0+Tmlp UHJvdG9jb2wuSWQgICAgPSAoVUlOVDY0KShVSU5UTikoZ1B4ZSk7DQo+ICsgIE5pY0RldmljZS0+ TmlpUHJvdG9jb2wuSWZOdW0gPSBnUHhlLT5JRmNudCB8IGdQeGUtPklGY250RXh0IDw8IDg7DQo+ ICsNCj4gKyAgVXBkYXRlTmljTnVtICgmTmljRGV2aWNlLT5OaWNJbmZvLCBnUHhlKTsNCj4gKw0K PiArICBOaWNEZXZpY2UtPk5pY0luZm8uU2lnbmF0dXJlID0gTklDX0RBVEFfU0lHTkFUVVJFOw0K PiArDQo+ICsgIE5pY0RldmljZS0+TmljSW5mby5Vc2JFdGggICAgICAgICA9IFVzYkV0aDsNCj4g KyAgTmljRGV2aWNlLT5OaWNJbmZvLk1heFNlZ21lbnRTaXplID0gKFVJTlQxNilCdWxrRGF0YVNp emU7DQo+ICsgIE5pY0RldmljZS0+TmljSW5mby5DYWJsZURldGVjdCAgICA9IDA7DQo+ICsgIE5p Y0RldmljZS0+UmVjZWl2ZUJ1ZmZlciAgICAgICAgICA9IEFMSUdOX1BPSU5URVIgKChWT0lEICop TmljRGV2aWNlLCA0MDk2KTsNCj4gKw0KPiArICBDb3B5TWVtICgoQ0hBUjggKikmKE5pY0Rldmlj ZS0+TmljSW5mby5NYWNBZGRyKSwgKENIQVI4ICopJk1hY0FkZHJlc3MsIHNpemVvZiAoTWFjQWRk cmVzcykpOw0KPiArDQo+ICsgIE5pY0RldmljZS0+TmljSW5mby5UeEJ1ZmZlckNvdW50ID0gMDsN Cj4gKw0KPiArICBpZiAoTmljRGV2aWNlLT5OaWlQcm90b2NvbC5JZk51bSA8IE1BWF9MQU5fSU5U RVJGQUNFKSB7DQo+ICsgICAgZ0xhbkRldmljZUxpc3RbTmljRGV2aWNlLT5OaWlQcm90b2NvbC5J Zk51bV0gPSBOaWNEZXZpY2U7DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgZ0JTLT5DbG9zZVByb3Rv Y29sICgNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgJmdF ZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5k aW5nSGFuZGxlLA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ICsgICAgICAgICAg ICk7DQo+ICsgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgQ29udHJvbGxl ckhhbmRsZSwNCj4gKyAgICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCwNCj4gKyAg ICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgQ29udHJv bGxlckhhbmRsZQ0KPiArICAgICAgICAgICApOw0KPiArDQo+ICsgICAgaWYgKFRtcFB4ZVBvaW50 ZXIgIT0gTlVMTCkgew0KPiArICAgICAgRnJlZVBvb2wgKFRtcFB4ZVBvaW50ZXIpOw0KPiArICAg IH0NCj4gKw0KPiArICAgIGlmIChOaWNEZXZpY2UgIT0gTlVMTCkgew0KPiArICAgICAgRnJlZVBv b2wgKE5pY0RldmljZSk7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgcmV0dXJuIEVGSV9ERVZJQ0Vf RVJST1I7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBDcmVhdGVNYWNEZXZpY2VQYXRoICgN Cj4gKyAgICAgICAgICAgICAmTmljRGV2aWNlLT5EZXZQYXRoLA0KPiArICAgICAgICAgICAgIFVz YkV0aFBhdGgsDQo+ICsgICAgICAgICAgICAgJk5pY0RldmljZS0+TmljSW5mbw0KPiArICAgICAg ICAgICAgICk7DQo+ICsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIFVw ZGF0ZU5pY051bSAoTlVMTCwgZ1B4ZSk7DQo+ICsgICAgaWYgKFRtcFB4ZVBvaW50ZXIgIT0gTlVM TCkgew0KPiArICAgICAgRnJlZVBvb2wgKFRtcFB4ZVBvaW50ZXIpOw0KPiArICAgIH0NCj4gKyAg fQ0KPiArDQo+ICsgIE5pY0RldmljZS0+U2lnbmF0dXJlICAgICAgICAgICAgICAgICA9IFVORElf REVWX1NJR05BVFVSRTsNCj4gKyAgTmljRGV2aWNlLT5OaWlQcm90b2NvbC5SZXZpc2lvbiAgICAg ID0gRUZJX05FVFdPUktfSU5URVJGQUNFX0lERU5USUZJRVJfUFJPVE9DT0xfUkVWSVNJT047DQo+ ICsgIE5pY0RldmljZS0+TmlpUHJvdG9jb2wuVHlwZSAgICAgICAgICA9IEVmaU5ldHdvcmtJbnRl cmZhY2VVbmRpOw0KPiArICBOaWNEZXZpY2UtPk5paVByb3RvY29sLk1ham9yVmVyICAgICAgPSBQ WEVfUk9NSURfTUFKT1JWRVI7DQo+ICsgIE5pY0RldmljZS0+TmlpUHJvdG9jb2wuTWlub3JWZXIg ICAgICA9IFBYRV9ST01JRF9NSU5PUlZFUjsNCj4gKyAgTmljRGV2aWNlLT5OaWlQcm90b2NvbC5J bWFnZVNpemUgICAgID0gMDsNCj4gKyAgTmljRGV2aWNlLT5OaWlQcm90b2NvbC5JbWFnZUFkZHIg ICAgID0gMDsNCj4gKyAgTmljRGV2aWNlLT5OaWlQcm90b2NvbC5JcHY2U3VwcG9ydGVkID0gVFJV RTsNCj4gKw0KPiArICBOaWNEZXZpY2UtPk5paVByb3RvY29sLlN0cmluZ0lkWzBdID0gJ1UnOw0K PiArICBOaWNEZXZpY2UtPk5paVByb3RvY29sLlN0cmluZ0lkWzFdID0gJ04nOw0KPiArICBOaWNE ZXZpY2UtPk5paVByb3RvY29sLlN0cmluZ0lkWzJdID0gJ0QnOw0KPiArICBOaWNEZXZpY2UtPk5p aVByb3RvY29sLlN0cmluZ0lkWzNdID0gJ0knOw0KPiArICBOaWNEZXZpY2UtPkRldmljZUhhbmRs ZSAgICAgICAgICAgID0gTlVMTDsNCj4gKw0KPiArICBOaWNEZXZpY2UtPk5pY0luZm8uUmF0ZUxp bWl0aW5nRW5hYmxlICAgICAgPSBnUmF0ZUxpbWl0aW5nRW5hYmxlOw0KPiArICBOaWNEZXZpY2Ut Pk5pY0luZm8uUmF0ZUxpbWl0aW5nQ3JlZGl0Q291bnQgPSAwOw0KPiArICBOaWNEZXZpY2UtPk5p Y0luZm8uUmF0ZUxpbWl0aW5nQ3JlZGl0ICAgICAgPSBnUmF0ZUxpbWl0aW5nQ3JlZGl0Ow0KPiAr ICBOaWNEZXZpY2UtPk5pY0luZm8uUmF0ZUxpbWl0aW5nUG9sbFRpbWVyICAgPSBnUmF0ZUxpbWl0 aW5nUG9sbFRpbWVyOw0KPiArICBOaWNEZXZpY2UtPk5pY0luZm8uUmF0ZUxpbWl0ZXIgICAgICAg ICAgICAgPSBOVUxMOw0KPiArDQo+ICsgIFplcm9NZW0gKCZOaWNEZXZpY2UtPk5pY0luZm8uUmVx dWVzdCwgc2l6ZW9mIChFRklfVVNCX0RFVklDRV9SRVFVRVNUKSk7DQo+ICsNCj4gKyAgU3RhdHVz ID0gVXNiRXRoLT5Vc2JFdGhJbnRlcnJ1cHQgKFVzYkV0aCwgVFJVRSwgTkVUV09SS19DT01NT05f UE9MTElOR19JTlRFUlZBTCwgJk5pY0RldmljZS0+TmljSW5mby5SZXF1ZXN0KTsNCj4gKyAgQVNT RVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4gKw0KPiArICBTdGF0dXMgPSBnQlMtPkluc3RhbGxN dWx0aXBsZVByb3RvY29sSW50ZXJmYWNlcyAoDQo+ICsgICAgICAgICAgICAgICAgICAmTmljRGV2 aWNlLT5EZXZpY2VIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAmZ0VmaU5ldHdvcmtJbnRl cmZhY2VJZGVudGlmaWVyUHJvdG9jb2xHdWlkXzMxLA0KPiArICAgICAgICAgICAgICAgICAgJk5p Y0RldmljZS0+TmlpUHJvdG9jb2wsDQo+ICsgICAgICAgICAgICAgICAgICAmZ0VmaURldmljZVBh dGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICBOaWNEZXZpY2UtPkRldlBhdGgs DQo+ICsgICAgICAgICAgICAgICAgICBOVUxMDQo+ICsgICAgICAgICAgICAgICAgICApOw0KPiAr DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBpZiAoTmljRGV2aWNlLT5O aWlQcm90b2NvbC5JZk51bSA8IE1BWF9MQU5fSU5URVJGQUNFKSB7DQo+ICsgICAgICBnTGFuRGV2 aWNlTGlzdFtOaWNEZXZpY2UtPk5paVByb3RvY29sLklmTnVtXSA9IE5VTEw7DQo+ICsgICAgfQ0K PiArDQo+ICsgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgQ29udHJvbGxl ckhhbmRsZSwNCj4gKyAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPiAr ICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICBDb250 cm9sbGVySGFuZGxlDQo+ICsgICAgICAgICAgICk7DQo+ICsgICAgZ0JTLT5DbG9zZVByb3RvY29s ICgNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgJmdFZGtJ SVVzYkV0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hh bmRsZSwNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAgICApOw0K PiArDQo+ICsgICAgaWYgKFRtcFB4ZVBvaW50ZXIgIT0gTlVMTCkgew0KPiArICAgICAgRnJlZVBv b2wgKFRtcFB4ZVBvaW50ZXIpOw0KPiArICAgIH0NCj4gKw0KPiArICAgIGlmIChOaWNEZXZpY2Ut PkRldlBhdGggIT0gTlVMTCkgew0KPiArICAgICAgRnJlZVBvb2wgKE5pY0RldmljZS0+RGV2UGF0 aCk7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgaWYgKE5pY0RldmljZSAhPSBOVUxMKSB7DQo+ICsg ICAgICBGcmVlUG9vbCAoTmljRGV2aWNlKTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICByZXR1cm4g RUZJX0RFVklDRV9FUlJPUjsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+T3BlblBy b3RvY29sICgNCj4gKyAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAg ICAgICAgICAgICAgICAmZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAg ICAgICAgKFZPSUQgKiopJlVzYkV0aCwNCj4gKyAgICAgICAgICAgICAgICAgIFRoaXMtPkRyaXZl ckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICBOaWNEZXZpY2UtPkRldmljZUhh bmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09MX0JZX0NISUxEX0NP TlRST0xMRVINCj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXR1 czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIE5ldHdvcmsgQ29tbW9uIERyaXZlciBCaW5kaW5n IFN0b3AuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgICAgIFByb3Rv Y29sIGluc3RhbmNlIHBvaW50ZXIuDQo+ICsgIEBwYXJhbVtpbl0gIENvbnRyb2xsZXJIYW5kbGUg ICAgICBIYW5kbGUgb2YgZGV2aWNlIHRvIHN0b3AgZHJpdmVyIG9uDQo+ICsgIEBwYXJhbVtpbl0g IE51bWJlck9mQ2hpbGRyZW4gICAgICBOdW1iZXIgb2YgSGFuZGxlcyBpbiBDaGlsZEhhbmRsZUJ1 ZmZlci4gSWYgbnVtYmVyIG9mDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjaGlsZHJlbiBpcyB6ZXJvIHN0b3AgdGhlIGVudGlyZSBidXMgZHJpdmVyLg0KPiArICBAcGFy YW1baW5dICBDaGlsZEhhbmRsZUJ1ZmZlciAgICAgTGlzdCBvZiBDaGlsZCBIYW5kbGVzIHRvIFN0 b3AuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgIFRoaXMgZHJp dmVyIGlzIHJlbW92ZWQgQ29udHJvbGxlckhhbmRsZQ0KPiArICBAcmV0dmFsIG90aGVyICAgICAg ICAgICAgICAgICAgICAgVGhpcyBkcml2ZXIgd2FzIG5vdCByZW1vdmVkIGZyb20gdGhpcyBkZXZp Y2UNCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK05ldHdvcmtDb21t b25Ecml2ZXJTdG9wICgNCj4gKyAgSU4gIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgKlRo aXMsDQo+ICsgIElOICBFRklfSEFORExFICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5k bGUsDQo+ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlck9mQ2hpbGRy ZW4sDQo+ICsgIElOICBFRklfSEFORExFICAgICAgICAgICAgICAgICAgICpDaGlsZEhhbmRsZUJ1 ZmZlcg0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBTdGF0dXM7DQo+ICsgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBBbGxDaGlsZHJlblN0b3BwZWQ7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1BS T1RPQ09MICAgICAgICAgICAgICAgICpVc2JFdGg7DQo+ICsgIE5JQ19ERVZJQ0UgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqTmljRGV2aWNlOw0KPiArICBFRklfTkVUV09SS19JTlRF UkZBQ0VfSURFTlRJRklFUl9QUk9UT0NPTCAgKk5paVByb3RvY29sOw0KPiArDQo+ICsgIGlmIChO dW1iZXJPZkNoaWxkcmVuID09IDApIHsNCj4gKyAgICBTdGF0dXMgPSBnQlMtPk9wZW5Qcm90b2Nv bCAoDQo+ICsgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAg ICAgICAgICAgICAgICZnRWZpTmV0d29ya0ludGVyZmFjZUlkZW50aWZpZXJQcm90b2NvbEd1aWRf MzEsDQo+ICsgICAgICAgICAgICAgICAgICAgIChWT0lEICoqKSZOaWlQcm90b2NvbCwNCj4gKyAg ICAgICAgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAg ICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgRUZJ X09QRU5fUFJPVE9DT0xfR0VUX1BST1RPQ09MDQo+ICsgICAgICAgICAgICAgICAgICAgICk7DQo+ ICsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBnQlMtPkNsb3Nl UHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAg ICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgIFRoaXMt PkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0K PiArICAgICAgICAgICAgICk7DQo+ICsgICAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAg ICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgJmdFZGtJSVVzYkV0 aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxl LA0KPiArICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgICAgICAgICAgICApOw0K PiArICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArICAgIH0NCj4gKw0KPiArICAgIE5pY0Rl dmljZSA9IFVORElfREVWX0ZST01fVEhJUyAoTmlpUHJvdG9jb2wpOw0KPiArICAgIFN0YXR1cyAg ICA9IGdCUy0+VW5pbnN0YWxsTXVsdGlwbGVQcm90b2NvbEludGVyZmFjZXMgKA0KPiArICAgICAg ICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAmZ0VmaU5ldHdvcmtJbnRlcmZhY2VJZGVudGlmaWVyUHJvdG9jb2xHdWlkXzMxLA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAmTmljRGV2aWNlLT5OaWlQcm90b2NvbCwNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAg ICAgICAgICAgICAgICAgICBOaWNEZXZpY2UtPkRldlBhdGgsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgIE5VTEwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICByZXR1cm4gU3RhdHVzOw0KPiArICAgIH0NCj4g Kw0KPiArICAgIEZyZWVQb29sIChOaWNEZXZpY2UtPkRldlBhdGgpOw0KPiArICAgIEZyZWVQb29s IChOaWNEZXZpY2UpOw0KPiArDQo+ICsgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAg ICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJv dG9jb2xHdWlkLA0KPiArICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiAr ICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ICsgICAgICAgICAgICk7DQo+ICsgICAgZ0JT LT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAg ICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgVGhpcy0+ RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiAr ICAgICAgICAgICApOw0KPiArICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gKyAgfQ0KPiArDQo+ ICsgIEFsbENoaWxkcmVuU3RvcHBlZCA9IFRSVUU7DQo+ICsNCj4gKyAgZm9yIChJbmRleCA9IDA7 IEluZGV4IDwgTnVtYmVyT2ZDaGlsZHJlbjsgSW5kZXgrKykgew0KPiArICAgIFN0YXR1cyA9IGdC Uy0+T3BlblByb3RvY29sICgNCj4gKyAgICAgICAgICAgICAgICAgICAgQ2hpbGRIYW5kbGVCdWZm ZXJbSW5kZXhdLA0KPiArICAgICAgICAgICAgICAgICAgICAmZ0VmaU5ldHdvcmtJbnRlcmZhY2VJ ZGVudGlmaWVyUHJvdG9jb2xHdWlkXzMxLA0KPiArICAgICAgICAgICAgICAgICAgICAoVk9JRCAq KikmTmlpUHJvdG9jb2wsDQo+ICsgICAgICAgICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRp bmdIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsg ICAgICAgICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09MX0dFVF9QUk9UT0NPTA0KPiArICAg ICAgICAgICAgICAgICAgICApOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4g KyAgICAgIEFsbENoaWxkcmVuU3RvcHBlZCA9IEZBTFNFOw0KPiArICAgICAgY29udGludWU7DQo+ ICsgICAgfQ0KPiArDQo+ICsgICAgTmljRGV2aWNlID0gVU5ESV9ERVZfRlJPTV9USElTIChOaWlQ cm90b2NvbCk7DQo+ICsNCj4gKyAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAg ICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAmZ0Vka0lJVXNiRXRoUHJvdG9jb2xH dWlkLA0KPiArICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAg ICAgICBDaGlsZEhhbmRsZUJ1ZmZlcltJbmRleF0NCj4gKyAgICAgICAgICAgKTsNCj4gKw0KPiAr ICAgIFN0YXR1cyA9IGdCUy0+VW5pbnN0YWxsTXVsdGlwbGVQcm90b2NvbEludGVyZmFjZXMgKA0K PiArICAgICAgICAgICAgICAgICAgICBDaGlsZEhhbmRsZUJ1ZmZlcltJbmRleF0sDQo+ICsgICAg ICAgICAgICAgICAgICAgICZnRWZpTmV0d29ya0ludGVyZmFjZUlkZW50aWZpZXJQcm90b2NvbEd1 aWRfMzEsDQo+ICsgICAgICAgICAgICAgICAgICAgICZOaWNEZXZpY2UtPk5paVByb3RvY29sLA0K PiArICAgICAgICAgICAgICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQsDQo+ICsg ICAgICAgICAgICAgICAgICAgIE5pY0RldmljZS0+RGV2UGF0aCwNCj4gKyAgICAgICAgICAgICAg ICAgICAgTlVMTA0KPiArICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIFN0YXR1cyA9IGdCUy0+T3BlblByb3RvY29sICgNCj4g KyAgICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAg ICAgICAgICAgICZnRWRrSUlVc2JFdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgKFZPSUQgKiopJlVzYkV0aCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICBUaGlzLT5E cml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgICAgIENoaWxkSGFuZGxl QnVmZmVyW0luZGV4XSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICBFRklfT1BFTl9QUk9UT0NP TF9CWV9DSElMRF9DT05UUk9MTEVSDQo+ICsgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAg ICB9IGVsc2Ugew0KPiArICAgICAgRnJlZVBvb2wgKE5pY0RldmljZS0+RGV2UGF0aCk7DQo+ICsg ICAgICBGcmVlUG9vbCAoTmljRGV2aWNlKTsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICBp ZiAoIUFsbENoaWxkcmVuU3RvcHBlZCkgew0KPiArICAgIHJldHVybiBFRklfREVWSUNFX0VSUk9S Ow0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ ICsgIEVudHJ5cG9pbnQgb2YgTmV0d29yayBDb21tb24gRHJpdmVyLg0KPiArDQo+ICsgIFRoaXMg ZnVuY3Rpb24gaXMgdGhlIGVudHJ5cG9pbnQgb2YgTmV0d29yayBDb21tb24gRHJpdmVyLiBJdCBp bnN0YWxscyBEcml2ZXIgQmluZGluZw0KPiArICBQcm90b2NvbHMgdG9nZXRoZXIgd2l0aCBDb21w b25lbnQgTmFtZSBQcm90b2NvbHMuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgSW1hZ2VIYW5kbGUg ICAgICAgVGhlIGZpcm13YXJlIGFsbG9jYXRlZCBoYW5kbGUgZm9yIHRoZSBFRkkgaW1hZ2UuDQo+ ICsgIEBwYXJhbVtpbl0gIFN5c3RlbVRhYmxlICAgICAgIEEgcG9pbnRlciB0byB0aGUgRUZJIFN5 c3RlbSBUYWJsZS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUg ZW50cnkgcG9pbnQgaXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArDQo+ICsqKi8NCj4gK0VG SV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArTmV0d29ya0NvbW1vbkVudHJ5ICgNCj4gKyAgSU4gRUZJ X0hBTkRMRSAgICAgICAgSW1hZ2VIYW5kbGUsDQo+ICsgIElOIEVGSV9TWVNURU1fVEFCTEUgICpT eXN0ZW1UYWJsZQ0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gKw0K PiArICBnTmV0d29ya0NvbW1vbkRyaXZlckJpbmRpbmcuRHJpdmVyQmluZGluZ0hhbmRsZSA9IElt YWdlSGFuZGxlOw0KPiArICBnTmV0d29ya0NvbW1vbkRyaXZlckJpbmRpbmcuSW1hZ2VIYW5kbGUg ICAgICAgICA9IEltYWdlSGFuZGxlOw0KPiArICBnUmF0ZUxpbWl0aW5nRW5hYmxlICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA9IFBjZEdldEJvb2wgKEVuYWJsZVJhdGVMaW1pdGluZyk7DQo+ ICsgIGdSYXRlTGltaXRpbmdDcmVkaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gUGNk R2V0MzIgKFJhdGVMaW1pdGluZ0NyZWRpdCk7DQo+ICsgIGdSYXRlTGltaXRpbmdQb2xsVGltZXIg ICAgICAgICAgICAgICAgICAgICAgICAgID0gUGNkR2V0MzIgKFJhdGVMaW1pdGluZ0ZhY3Rvcik7 DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5JbnN0YWxsTXVsdGlwbGVQcm90b2NvbEludGVyZmFj ZXMgKA0KPiArICAgICAgICAgICAgICAgICAgJmdOZXR3b3JrQ29tbW9uRHJpdmVyQmluZGluZy5E cml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgJmdFZmlEcml2ZXJCaW5k aW5nUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgJmdOZXR3b3JrQ29tbW9uRHJp dmVyQmluZGluZywNCj4gKyAgICAgICAgICAgICAgICAgICZnRWZpQ29tcG9uZW50TmFtZTJQcm90 b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAmZ05ldHdvcmtDb21tb25Db21wb25lbnRO YW1lMiwNCj4gKyAgICAgICAgICAgICAgICAgIE5VTEwNCj4gKyAgICAgICAgICAgICAgICAgICk7 DQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+IGRpZmYgLS1naXQgYS9Vc2JOZXR3b3JrUGtn L05ldHdvcmtDb21tb24vUHhlRnVuY3Rpb24uYyBiL1VzYk5ldHdvcmtQa2cvTmV0d29ya0NvbW1v bi9QeGVGdW5jdGlvbi5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAw MDAwMC4uNjg3Y2FiY2E0Y2UzDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvVXNiTmV0d29ya1Br Zy9OZXR3b3JrQ29tbW9uL1B4ZUZ1bmN0aW9uLmMNCj4gQEAgLTAsMCArMSwxODAzIEBADQo+ICsv KiogQGZpbGUNCj4gKyAgVGhpcyBmaWxlIGNvbnRhaW5zIGNvZGUgZm9yIFVOREkgY29tbWFuZCBi YXNlZCBvbiBVRUZJIHNwZWNpZmljYXRpb24uDQo+ICsNCj4gKyAgQ29weXJpZ2h0IChjKSAyMDIz LCBBbWVyaWNhbiBNZWdhdHJlbmRzIEludGVybmF0aW9uYWwgTExDLiBBbGwgcmlnaHRzIHJlc2Vy dmVkLjxCUj4NCj4gKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRl bnQNCj4gKyoqLw0KPiArDQo+ICsjaW5jbHVkZSAiRHJpdmVyQmluZGluZy5oIg0KPiArDQo+ICsv LyBBUEkgdGFibGUsIGRlZmluZWQgaW4gVUVGSSBzcGVjaWZpY2F0aW9uDQo+ICtBUElfRlVOQyAg Z1VuZGlBcGlUYWJsZVtdID0gew0KPiArICBVbmRpR2V0U3RhdGUsDQo+ICsgIFVuZGlTdGFydCwN Cj4gKyAgVW5kaVN0b3AsDQo+ICsgIFVuZGlHZXRJbml0SW5mbywNCj4gKyAgVW5kaUdldENvbmZp Z0luZm8sDQo+ICsgIFVuZGlJbml0aWFsaXplLA0KPiArICBVbmRpUmVzZXQsDQo+ICsgIFVuZGlT aHV0ZG93biwNCj4gKyAgVW5kaUludGVycnVwdEVuYWJsZSwNCj4gKyAgVW5kaVJlY2VpdmVGaWx0 ZXIsDQo+ICsgIFVuZGlTdGF0aW9uQWRkcmVzcywNCj4gKyAgVW5kaVN0YXRpc3RpY3MsDQo+ICsg IFVuZGlNY2FzdElwMk1hYywNCj4gKyAgVW5kaU52RGF0YSwNCj4gKyAgVW5kaUdldFN0YXR1cywN Cj4gKyAgVW5kaUZpbGxIZWFkZXIsDQo+ICsgIFVuZGlUcmFuc21pdCwNCj4gKyAgVW5kaVJlY2Vp dmUNCj4gK307DQo+ICsNCj4gKy8qKg0KPiArICAgQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVuYWJs ZSBSYXRlIExpbWl0ZXINCj4gKw0KPiArICAgQHBhcmFtW2luXSBFdmVudCAgICAgICAgICAgRXZl bnQgd2hvc2Ugbm90aWZpY2F0aW9uIGZ1bmN0aW9uIGlzIGJlaW5nIGludm9rZWQNCj4gKyAgIEBw YXJhbVtpbl0gQ29udGV4dCAgICAgICAgIFBvaW50ZXIgdG8gdGhlIG5vdGlmaWNhdGlvbiBmdW5j dGlvbidzIGNvbnRleHQNCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtFRklBUEkNCj4gK1VuZGlS YXRlTGltaXRlckNhbGxiYWNrICgNCj4gKyAgSU4gIEVGSV9FVkVOVCAgRXZlbnQsDQo+ICsgIElO ICBWT0lEICAgICAgICpDb250ZXh0DQo+ICsgICkNCj4gK3sNCj4gKyAgTklDX0RBVEEgICpOaWMg PSBDb250ZXh0Ow0KPiArDQo+ICsgIGlmIChOaWMtPlJhdGVMaW1pdGluZ0NyZWRpdENvdW50IDwg TmljLT5SYXRlTGltaXRpbmdDcmVkaXQpIHsNCj4gKyAgICBOaWMtPlJhdGVMaW1pdGluZ0NyZWRp dENvdW50Kys7DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCBp cyB1c2VkIHRvIGRldGVybWluZSB0aGUgb3BlcmF0aW9uYWwgc3RhdGUgb2YgdGhlIFVOREkuDQo+ ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3Jp cHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdv cmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtV bmRpR2V0U3RhdGUgKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFU QSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gKw0KPiAr ICBpZiAoKENkYi0+T3BDb2RlICE9IFBYRV9PUENPREVfR0VUX1NUQVRFKSB8fA0KPiArICAgICAg KENkYi0+U3RhdENvZGUgIT0gUFhFX1NUQVRDT0RFX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAo Q2RiLT5TdGF0RmxhZ3MgIT0gUFhFX1NUQVRGTEFHU19JTklUSUFMSVpFKSB8fA0KPiArICAgICAg KENkYi0+SUZudW0gPj0gKGdQeGUtPklGY250IHwgZ1B4ZS0+SUZjbnRFeHQgPDwgOCkpIHx8DQo+ ICsgICAgICAoQ2RiLT5DUEJzaXplICE9IFBYRV9DUEJTSVpFX05PVF9VU0VEKSB8fA0KPiArICAg ICAgKENkYi0+Q1BCYWRkciAhPSBQWEVfQ1BCQUREUl9OT1RfVVNFRCkgfHwNCj4gKyAgICAgIChD ZGItPkRCc2l6ZSAhPSBQWEVfREJTSVpFX05PVF9VU0VEKSB8fA0KPiArICAgICAgKENkYi0+REJh ZGRyICE9IFBYRV9EQkFERFJfTk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5PcEZsYWdzICE9 IFBYRV9PUEZMQUdTX05PVF9VU0VEKSkNCj4gKyAgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0g UFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBY RV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0gZWxzZSB7DQo+ ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfQ09NUExFVEU7DQo+ ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfU1VDQ0VTUzsNCj4gKyAgfQ0KPiAr DQo+ICsgIENkYi0+U3RhdEZsYWdzID0gQ2RiLT5TdGF0RmxhZ3MgfCBOaWMtPlN0YXRlOw0KPiAr DQo+ICsgIGlmIChOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpR2V0U3RhdGUgIT0g TlVMTCkgew0KPiArICAgIFN0YXR1cyA9IE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVu ZGlHZXRTdGF0ZSAoQ2RiLCBOaWMpOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsN Cj4gKyAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsN Cj4gKyAgICB9DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCBp cyB1c2VkIHRvIGNoYW5nZSB0aGUgVU5ESSBvcGVyYXRpb25hbCBzdGF0ZSBmcm9tIHN0b3BwZWQg dG8gc3RhcnRlZC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUg Y29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRl ciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsqKi8N Cj4gK1ZPSUQNCj4gK1VuZGlTdGFydCAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAg SU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgUFhFX0NQQl9TVEFSVF8zMSAg KkNwYjsNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgU3RhdHVzOw0KPiArICBCT09MRUFOICAgICAg ICAgICBFdmVudEVycm9yOw0KPiArDQo+ICsgIGlmICgoQ2RiLT5PcENvZGUgIT0gUFhFX09QQ09E RV9TVEFSVCkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRDb2RlICE9IFBYRV9TVEFUQ09ERV9JTklU SUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+U3RhdEZsYWdzICE9IFBYRV9TVEFURkxBR1NfSU5J VElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPklGbnVtID49IChnUHhlLT5JRmNudCB8IGdQeGUt PklGY250RXh0IDw8IDgpKSB8fA0KPiArICAgICAgKENkYi0+Q1BCc2l6ZSAhPSBzaXplb2YgKFBY RV9DUEJfU1RBUlRfMzEpKSB8fA0KPiArICAgICAgKENkYi0+REJzaXplICE9IFBYRV9EQlNJWkVf Tk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5EQmFkZHIgIT0gUFhFX0RCQUREUl9OT1RfVVNF RCkgfHwNCj4gKyAgICAgIChDZGItPk9wRmxhZ3MgIT0gUFhFX09QRkxBR1NfTk9UX1VTRUQpKQ0K PiArICB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJ TEVEOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0K PiArICAgIHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChOaWMtPlN0YXRlICE9IFBYRV9T VEFURkxBR1NfR0VUX1NUQVRFX1NUT1BQRUQpIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBY RV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVf U1RBVENPREVfQUxSRUFEWV9TVEFSVEVEOw0KPiArICAgIHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ ICsgIENwYiA9IChQWEVfQ1BCX1NUQVJUXzMxICopKFVJTlROKUNkYi0+Q1BCYWRkcjsNCj4gKw0K PiArICBOaWMtPlB4ZVN0YXJ0LkRlbGF5ICAgICA9IENwYi0+RGVsYXk7DQo+ICsgIE5pYy0+UHhl U3RhcnQuVmlydDJQaHlzID0gQ3BiLT5WaXJ0MlBoeXM7DQo+ICsgIE5pYy0+UHhlU3RhcnQuQmxv Y2sgICAgID0gQ3BiLT5CbG9jazsNCj4gKyAgTmljLT5QeGVTdGFydC5NYXBfTWVtICAgPSAwOw0K PiArICBOaWMtPlB4ZVN0YXJ0LlVuTWFwX01lbSA9IDA7DQo+ICsgIE5pYy0+UHhlU3RhcnQuU3lu Y19NZW0gID0gQ3BiLT5TeW5jX01lbTsNCj4gKyAgTmljLT5QeGVTdGFydC5VbmlxdWVfSUQgPSBD cGItPlVuaXF1ZV9JRDsNCj4gKyAgRXZlbnRFcnJvciAgICAgICAgICAgICAgPSBGQUxTRTsNCj4g KyAgU3RhdHVzICAgICAgICAgICAgICAgICAgPSBFRklfU1VDQ0VTUzsNCj4gKyAgaWYgKE5pYy0+ UmF0ZUxpbWl0aW5nRW5hYmxlID09IFRSVUUpIHsNCj4gKyAgICBTdGF0dXMgPSBnQlMtPkNyZWF0 ZUV2ZW50ICgNCj4gKyAgICAgICAgICAgICAgICAgICAgRVZUX1RJTUVSIHwgRVZUX05PVElGWV9T SUdOQUwsDQo+ICsgICAgICAgICAgICAgICAgICAgIFRQTF9OT1RJRlksDQo+ICsgICAgICAgICAg ICAgICAgICAgIFVuZGlSYXRlTGltaXRlckNhbGxiYWNrLA0KPiArICAgICAgICAgICAgICAgICAg ICBOaWMsDQo+ICsgICAgICAgICAgICAgICAgICAgICZOaWMtPlJhdGVMaW1pdGVyDQo+ICsgICAg ICAgICAgICAgICAgICAgICk7DQo+ICsgICAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4g KyAgICAgIFN0YXR1cyA9IGdCUy0+U2V0VGltZXIgKA0KPiArICAgICAgICAgICAgICAgICAgICAg IE5pYy0+UmF0ZUxpbWl0ZXIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgVGltZXJQZXJpb2Rp YywNCj4gKyAgICAgICAgICAgICAgICAgICAgICBOaWMtPlJhdGVMaW1pdGluZ1BvbGxUaW1lciAq IDEwMDAwDQo+ICsgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICAgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gKyAgICAgICAgRXZlbnRFcnJvciA9IFRSVUU7DQo+ICsgICAgICB9 DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgaWYgKChOaWMtPlVzYkV0aC0+VXNiRXRoVW5k aS5Vc2JFdGhVbmRpU3RhcnQgIT0gTlVMTCkgJiYgKEV2ZW50RXJyb3IgPT0gRkFMU0UpKSB7DQo+ ICsgICAgU3RhdHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaVN0YXJ0IChD ZGIsIE5pYyk7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0K PiArICAgIC8vIEluaXRpYWwgdGhlIHN0YXRlIGZvciBVTkRJIHN0YXJ0Lg0KPiArICAgIE5pYy0+ U3RhdGUgICAgID0gUFhFX1NUQVRGTEFHU19HRVRfU1RBVEVfU1RBUlRFRDsNCj4gKyAgICBDZGIt PlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9DT01QTEVURTsNCj4gKyAgICBDZGIt PlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0KPiArICB9IGVsc2Ugew0KPiArICAg IGlmIChOaWMtPlJhdGVMaW1pdGluZ0VuYWJsZSA9PSBUUlVFKSB7DQo+ICsgICAgICBpZiAoIUV2 ZW50RXJyb3IpIHsNCj4gKyAgICAgICAgZ0JTLT5TZXRUaW1lciAoJk5pYy0+UmF0ZUxpbWl0ZXIs IFRpbWVyQ2FuY2VsLCAwKTsNCj4gKyAgICAgIH0NCj4gKw0KPiArICAgICAgaWYgKE5pYy0+UmF0 ZUxpbWl0ZXIpIHsNCj4gKyAgICAgICAgZ0JTLT5DbG9zZUV2ZW50ICgmTmljLT5SYXRlTGltaXRl cik7DQo+ICsgICAgICAgIE5pYy0+UmF0ZUxpbWl0ZXIgPSAwOw0KPiArICAgICAgfQ0KPiArICAg IH0NCj4gKw0KPiArICAgIC8vIEluaXRpYWwgdGhlIHN0YXRlIHdoZW4gVU5ESSBzdGFydCBpcyBm YWlsDQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVE Ow0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0RFVklDRV9GQUlMVVJFOw0K PiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBj aGFuZ2UgdGhlIFVOREkgb3BlcmF0aW9uYWwgc3RhdGUgZnJvbSBzdGFydGVkIHRvIHN0b3BwZWQu DQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVz Y3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5l dHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ ICtVbmRpU3RvcCAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRB ICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiArDQo+ICsg IGlmICgoQ2RiLT5PcENvZGUgIT0gUFhFX09QQ09ERV9TVE9QKSB8fA0KPiArICAgICAgKENkYi0+ U3RhdENvZGUgIT0gUFhFX1NUQVRDT0RFX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5T dGF0RmxhZ3MgIT0gUFhFX1NUQVRGTEFHU19JTklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+ SUZudW0gPj0gKGdQeGUtPklGY250IHwgZ1B4ZS0+SUZjbnRFeHQgPDwgOCkpIHx8DQo+ICsgICAg ICAoQ2RiLT5DUEJzaXplICE9IFBYRV9DUEJTSVpFX05PVF9VU0VEKSB8fA0KPiArICAgICAgKENk Yi0+Q1BCYWRkciAhPSBQWEVfQ1BCQUREUl9OT1RfVVNFRCkgfHwNCj4gKyAgICAgIChDZGItPkRC c2l6ZSAhPSBQWEVfREJTSVpFX05PVF9VU0VEKSB8fA0KPiArICAgICAgKENkYi0+REJhZGRyICE9 IFBYRV9EQkFERFJfTk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5PcEZsYWdzICE9IFBYRV9P UEZMQUdTX05PVF9VU0VEKSkNCj4gKyAgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NU QVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFU Q09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAg Q2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfQ09NUExFVEU7DQo+ICsgICAg Q2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfU1VDQ0VTUzsNCj4gKyAgfQ0KPiArDQo+ICsg IGlmIChOaWMtPlN0YXRlID09IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRFX1NUT1BQRUQpIHsNCj4g KyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsg ICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfTk9UX1NUQVJURUQ7DQo+ICsgICAgcmV0 dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+U3RhdGUgPT0gUFhFX1NUQVRGTEFHU19H RVRfU1RBVEVfSU5JVElBTElaRUQpIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFU RkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENP REVfTk9UX1NIVVRET1dOOw0KPiArICAgIHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ICsgIE5pYy0+ UHhlU3RhcnQuRGVsYXkgICAgID0gMDsNCj4gKyAgTmljLT5QeGVTdGFydC5WaXJ0MlBoeXMgPSAw Ow0KPiArICBOaWMtPlB4ZVN0YXJ0LkJsb2NrICAgICA9IDA7DQo+ICsgIE5pYy0+UHhlU3RhcnQu TWFwX01lbSAgID0gMDsNCj4gKyAgTmljLT5QeGVTdGFydC5Vbk1hcF9NZW0gPSAwOw0KPiArICBO aWMtPlB4ZVN0YXJ0LlN5bmNfTWVtICA9IDA7DQo+ICsgIE5pYy0+U3RhdGUgICAgICAgICAgICAg ID0gUFhFX1NUQVRGTEFHU19HRVRfU1RBVEVfU1RPUFBFRDsNCj4gKw0KPiArICBpZiAoTmljLT5S YXRlTGltaXRpbmdFbmFibGUgPT0gVFJVRSkgew0KPiArICAgIGdCUy0+U2V0VGltZXIgKCZOaWMt PlJhdGVMaW1pdGVyLCBUaW1lckNhbmNlbCwgMCk7DQo+ICsgICAgZ0JTLT5DbG9zZUV2ZW50ICgm TmljLT5SYXRlTGltaXRlcik7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5Vc2JFdGgtPlVz YkV0aFVuZGkuVXNiRXRoVW5kaVN0b3AgIT0gTlVMTCkgew0KPiArICAgIFN0YXR1cyA9IE5pYy0+ VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlTdG9wIChDZGIsIE5pYyk7DQo+ICsgICAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RB VEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArfQ0KPiArDQo+ICsv KioNCj4gKyAgVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gcmV0cmlldmUgaW5pdGlhbGl6YXRpb24g aW5mb3JtYXRpb24gdGhhdCBpcw0KPiArICBuZWVkZWQgYnkgZHJpdmVycyBhbmQgYXBwbGljYXRp b25zIHRvIGluaXRpYWxpemVkIFVOREkuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBv aW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAg TmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4N Cj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtVbmRpR2V0SW5pdEluZm8gKA0KPiArICBJTiAgUFhF X0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsg IFBYRV9EQl9HRVRfSU5JVF9JTkZPICAqRGI7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICBT dGF0dXM7DQo+ICsNCj4gKyAgaWYgKChDZGItPk9wQ29kZSAhPSBQWEVfT1BDT0RFX0dFVF9JTklU X0lORk8pIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0Q29kZSAhPSBQWEVfU1RBVENPREVfSU5JVElB TElaRSkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRGbGFncyAhPSBQWEVfU1RBVEZMQUdTX0lOSVRJ QUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5JRm51bSA+PSAoZ1B4ZS0+SUZjbnQgfCBnUHhlLT5J RmNudEV4dCA8PCA4KSkgfHwNCj4gKyAgICAgIChDZGItPkNQQnNpemUgIT0gUFhFX0NQQlNJWkVf Tk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5DUEJhZGRyICE9IFBYRV9DUEJBRERSX05PVF9V U0VEKSB8fA0KPiArICAgICAgKENkYi0+REJzaXplICE9IHNpemVvZiAoUFhFX0RCX0dFVF9JTklU X0lORk8pKSB8fA0KPiArICAgICAgKENkYi0+T3BGbGFncyAhPSBQWEVfT1BGTEFHU19OT1RfVVNF RCkpDQo+ICsgIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFO RF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9D REI7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9IGVsc2Ugew0KPiArICAgIENkYi0+U3RhdEZsYWdz ID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0NPTVBMRVRFOw0KPiArICAgIENkYi0+U3RhdENvZGUg ID0gUFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5TdGF0 ZSA9PSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9TVE9QUEVEKSB7DQo+ICsgICAgQ2RiLT5TdGF0 RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3RhdENv ZGUgID0gUFhFX1NUQVRDT0RFX05PVF9TVEFSVEVEOw0KPiArICAgIHJldHVybjsNCj4gKyAgfQ0K PiArDQo+ICsgIERiID0gKFBYRV9EQl9HRVRfSU5JVF9JTkZPICopKFVJTlROKUNkYi0+REJhZGRy Ow0KPiArDQo+ICsgIERiLT5NZW1vcnlSZXF1aXJlZCAgICAgICAgID0gTUVNT1JZX1JFUVVJUkU7 DQo+ICsgIERiLT5GcmFtZURhdGFMZW4gICAgICAgICAgID0gUFhFX01BWF9UWFJYX1VOSVRfRVRI RVI7DQo+ICsgIERiLT5MaW5rU3BlZWRzWzBdICAgICAgICAgID0gMTA7DQo+ICsgIERiLT5MaW5r U3BlZWRzWzFdICAgICAgICAgID0gMTAwOw0KPiArICBEYi0+TGlua1NwZWVkc1syXSAgICAgICAg ICA9IDEwMDA7DQo+ICsgIERiLT5MaW5rU3BlZWRzWzNdICAgICAgICAgID0gMDsNCj4gKyAgRGIt Pk1lZGlhSGVhZGVyTGVuICAgICAgICAgPSBQWEVfTUFDX0hFQURFUl9MRU5fRVRIRVI7DQo+ICsg IERiLT5IV2FkZHJMZW4gICAgICAgICAgICAgID0gUFhFX0hXQUREUl9MRU5fRVRIRVI7DQo+ICsg IERiLT5NQ2FzdEZpbHRlckNudCAgICAgICAgID0gTUFYX01DQVNUX0FERFJFU1NfQ05UOw0KPiAr ICBEYi0+VHhCdWZDbnQgICAgICAgICAgICAgICA9IE5pYy0+UHhlSW5pdC5UeEJ1ZkNudDsNCj4g KyAgRGItPlR4QnVmU2l6ZSAgICAgICAgICAgICAgPSBOaWMtPlB4ZUluaXQuVHhCdWZTaXplOw0K PiArICBEYi0+UnhCdWZDbnQgICAgICAgICAgICAgICA9IE5pYy0+UHhlSW5pdC5SeEJ1ZkNudDsN Cj4gKyAgRGItPlJ4QnVmU2l6ZSAgICAgICAgICAgICAgPSBOaWMtPlB4ZUluaXQuUnhCdWZTaXpl Ow0KPiArICBEYi0+SUZ0eXBlICAgICAgICAgICAgICAgICA9IFBYRV9JRlRZUEVfRVRIRVJORVQ7 DQo+ICsgIERiLT5TdXBwb3J0ZWREdXBsZXhNb2RlcyAgID0gUFhFX0RVUExFWF9ERUZBVUxUOw0K PiArICBEYi0+U3VwcG9ydGVkTG9vcEJhY2tNb2RlcyA9IExPT1BCQUNLX05PUk1BTDsNCj4gKw0K PiArICBDZGItPlN0YXRGbGFncyB8PSAoUFhFX1NUQVRGTEFHU19DQUJMRV9ERVRFQ1RfU1VQUE9S VEVEIHwNCj4gKyAgICAgICAgICAgICAgICAgICAgIFBYRV9TVEFURkxBR1NfR0VUX1NUQVRVU19O T19NRURJQV9TVVBQT1JURUQpOw0KPiArDQo+ICsgIGlmIChOaWMtPlVzYkV0aC0+VXNiRXRoVW5k aS5Vc2JFdGhVbmRpR2V0SW5pdEluZm8gIT0gTlVMTCkgew0KPiArICAgIFN0YXR1cyA9IE5pYy0+ VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlHZXRJbml0SW5mbyAoQ2RiLCBOaWMpOw0KPiAr ICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIENkYi0+U3RhdEZsYWdzID0g UFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICB9DQo+ICsgIH0NCj4gK30NCj4g Kw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIHJldHJpZXZlIGNvbmZpZ3Vy YXRpb24gaW5mb3JtYXRpb24gYWJvdXQNCj4gKyAgdGhlIE5JQyBiZWluZyBjb250cm9sbGVkIGJ5 IHRoZSBVTkRJLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBj b21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVy IHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyoqLw0K PiArVk9JRA0KPiArVW5kaUdldENvbmZpZ0luZm8gKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIs DQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsgIFBYRV9EQl9HRVRf Q09ORklHX0lORk8gICpEYjsNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgU3RhdHVzOw0K PiArDQo+ICsgIGlmICgoQ2RiLT5PcENvZGUgIT0gUFhFX09QQ09ERV9HRVRfQ09ORklHX0lORk8p IHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0Q29kZSAhPSBQWEVfU1RBVENPREVfSU5JVElBTElaRSkg fHwNCj4gKyAgICAgIChDZGItPlN0YXRGbGFncyAhPSBQWEVfU1RBVEZMQUdTX0lOSVRJQUxJWkUp IHx8DQo+ICsgICAgICAoQ2RiLT5JRm51bSA+PSAoZ1B4ZS0+SUZjbnQgfCBnUHhlLT5JRmNudEV4 dCA8PCA4KSkgfHwNCj4gKyAgICAgIChDZGItPkNQQnNpemUgIT0gUFhFX0NQQlNJWkVfTk9UX1VT RUQpIHx8DQo+ICsgICAgICAoQ2RiLT5DUEJhZGRyICE9IFBYRV9DUEJBRERSX05PVF9VU0VEKSB8 fA0KPiArICAgICAgKENkYi0+REJzaXplICE9IHNpemVvZiAoUFhFX0RCX0dFVF9DT05GSUdfSU5G TykpIHx8DQo+ICsgICAgICAoQ2RiLT5PcEZsYWdzICE9IFBYRV9PUEZMQUdTX05PVF9VU0VEKSkN Cj4gKyAgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZB SUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsN Cj4gKyAgICByZXR1cm47DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQ WEVfU1RBVEZMQUdTX0NPTU1BTkRfQ09NUExFVEU7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQ WEVfU1RBVENPREVfU1VDQ0VTUzsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChOaWMtPlN0YXRlID09 IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRFX1NUT1BQRUQpIHsNCj4gKyAgICBDZGItPlN0YXRGbGFn cyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAg PSBQWEVfU1RBVENPREVfTk9UX1NUQVJURUQ7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsN Cj4gKyAgRGIgPSAoUFhFX0RCX0dFVF9DT05GSUdfSU5GTyAqKShVSU5UTilDZGItPkRCYWRkcjsN Cj4gKw0KPiArICBEYi0+cGNpLkJ1c1R5cGUgPSBQWEVfQlVTVFlQRV9VU0I7DQo+ICsNCj4gKyAg aWYgKE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlHZXRDb25maWdJbmZvICE9IE5V TEwpIHsNCj4gKyAgICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRp R2V0Q29uZmlnSW5mbyAoQ2RiLCBOaWMpOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gKyAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxF RDsNCj4gKyAgICB9DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFu ZCByZXNldHMgdGhlIG5ldHdvcmsgYWRhcHRlciBhbmQgaW5pdGlhbGl6ZXMgVU5ESSB1c2luZw0K PiArICB0aGUgcGFyYW1ldGVycyBzdXBwbGllZCBpbiB0aGUgQ1BCLg0KPiArDQo+ICsgIEBwYXJh bVtpbl0gICAgICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2Nr Lg0KPiArICBAcGFyYW1baW4sIG91dF0gTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50 ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtVbmRpSW5p dGlhbGl6ZSAoDQo+ICsgIElOICAgICAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOIE9VVCAgTklD X0RBVEEgICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBQWEVfQ1BCX0lOSVRJQUxJWkUgICpDcGI7 DQo+ICsgIFBYRV9EQl9JTklUSUFMSVpFICAgKkRiOw0KPiArICBFRklfU1RBVFVTICAgICAgICAg IFN0YXR1czsNCj4gKw0KPiArICBpZiAoKENkYi0+T3BDb2RlICE9IFBYRV9PUENPREVfSU5JVElB TElaRSkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRDb2RlICE9IFBYRV9TVEFUQ09ERV9JTklUSUFM SVpFKSB8fA0KPiArICAgICAgKENkYi0+U3RhdEZsYWdzICE9IFBYRV9TVEFURkxBR1NfSU5JVElB TElaRSkgfHwNCj4gKyAgICAgIChDZGItPklGbnVtID49IChnUHhlLT5JRmNudCB8IGdQeGUtPklG Y250RXh0IDw8IDgpKSB8fA0KPiArICAgICAgKENkYi0+Q1BCc2l6ZSAhPSBzaXplb2YgKFBYRV9D UEJfSU5JVElBTElaRSkpKQ0KPiArICB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RB VEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRD T0RFX0lOVkFMSURfQ0RCOw0KPiArICAgIHJldHVybjsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBD ZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9DT01QTEVURTsNCj4gKyAgfQ0K PiArDQo+ICsgIGlmIChOaWMtPlN0YXRlID09IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRFX1NUT1BQ RUQpIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlM RUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfTk9UX1NUQVJURUQ7DQo+ ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKChDZGItPk9wRmxhZ3MgIT0gUFhF X09QRkxBR1NfSU5JVElBTElaRV9ERVRFQ1RfQ0FCTEUpICYmDQo+ICsgICAgICAoQ2RiLT5PcEZs YWdzICE9IFBYRV9PUEZMQUdTX0lOSVRJQUxJWkVfRE9fTk9UX0RFVEVDVF9DQUJMRSkpDQo+ICsg IHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7 DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ICsg ICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+U3RhdGUgPT0gUFhFX1NUQVRG TEFHU19HRVRfU1RBVEVfSU5JVElBTElaRUQpIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBY RV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVf U1RBVENPREVfQUxSRUFEWV9JTklUSUFMSVpFRDsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4g Kw0KPiArICBDcGIgPSAoUFhFX0NQQl9JTklUSUFMSVpFICopKFVJTlROKUNkYi0+Q1BCYWRkcjsN Cj4gKyAgRGIgID0gKFBYRV9EQl9JTklUSUFMSVpFICopKFVJTlROKUNkYi0+REJhZGRyOw0KPiAr DQo+ICsgIE5pYy0+UHhlSW5pdC5MaW5rU3BlZWQgICAgPSBDcGItPkxpbmtTcGVlZDsNCj4gKyAg TmljLT5QeGVJbml0LkR1cGxleE1vZGUgICA9IENwYi0+RHVwbGV4TW9kZTsNCj4gKyAgTmljLT5Q eGVJbml0Lkxvb3BCYWNrTW9kZSA9IENwYi0+TG9vcEJhY2tNb2RlOw0KPiArICBOaWMtPlB4ZUlu aXQuTWVtb3J5QWRkciAgID0gQ3BiLT5NZW1vcnlBZGRyOw0KPiArICBOaWMtPlB4ZUluaXQuTWVt b3J5TGVuZ3RoID0gQ3BiLT5NZW1vcnlMZW5ndGg7DQo+ICsgIE5pYy0+UHhlSW5pdC5UeEJ1ZkNu dCAgICAgPSBUWF9CVUZGRVJfQ09VTlQ7DQo+ICsgIE5pYy0+UHhlSW5pdC5UeEJ1ZlNpemUgICAg PSBOaWMtPk1heFNlZ21lbnRTaXplOw0KPiArICBOaWMtPlB4ZUluaXQuUnhCdWZDbnQgICAgID0g UlhfQlVGRkVSX0NPVU5UOw0KPiArICBOaWMtPlB4ZUluaXQuUnhCdWZTaXplICAgID0gTmljLT5N YXhTZWdtZW50U2l6ZTsNCj4gKw0KPiArICBDZGItPlN0YXRDb2RlID0gSW5pdGlhbGl6ZSAoQ2Ri LCBOaWMpOw0KPiArDQo+ICsgIERiLT5NZW1vcnlVc2VkID0gTUVNT1JZX1JFUVVJUkU7DQo+ICsg IERiLT5UeEJ1ZkNudCAgID0gTmljLT5QeGVJbml0LlR4QnVmQ250Ow0KPiArICBEYi0+VHhCdWZT aXplICA9IE5pYy0+UHhlSW5pdC5UeEJ1ZlNpemU7DQo+ICsgIERiLT5SeEJ1ZkNudCAgID0gTmlj LT5QeGVJbml0LlJ4QnVmQ250Ow0KPiArICBEYi0+UnhCdWZTaXplICA9IE5pYy0+UHhlSW5pdC5S eEJ1ZlNpemU7DQo+ICsNCj4gKyAgTmljLT5SeEZpbHRlciAgICA9IFBYRV9PUEZMQUdTX1JFQ0VJ VkVfRklMVEVSX0JST0FEQ0FTVDsNCj4gKyAgTmljLT5DYW5UcmFuc21pdCA9IEZBTFNFOw0KPiAr DQo+ICsgIGlmIChDZGItPk9wRmxhZ3MgPT0gUFhFX09QRkxBR1NfSU5JVElBTElaRV9ERVRFQ1Rf Q0FCTEUpIHsNCj4gKyAgICBpZiAoKE5pYy0+UmVxdWVzdC5SZXF1ZXN0ID09IFVTQl9DRENfTkVU V09SS19DT05ORUNUSU9OKSAmJiAoTmljLT5SZXF1ZXN0LlZhbHVlID09IE5FVFdPUktfRElTQ09O TkVDVCkpIHsNCj4gKyAgICAgIE5pYy0+Q2FibGVEZXRlY3QgPSAwOw0KPiArICAgIH0gZWxzZSBp ZiAoKE5pYy0+UmVxdWVzdC5SZXF1ZXN0ID09IFVTQl9DRENfTkVUV09SS19DT05ORUNUSU9OKSAm JiAoTmljLT5SZXF1ZXN0LlZhbHVlID09IE5FVFdPUktfQ09OTkVDVEVEKSkgew0KPiArICAgICAg TmljLT5DYWJsZURldGVjdCA9IDE7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgaWYgKE5pYy0+Q2Fi bGVEZXRlY3QgPT0gMCkgew0KPiArICAgICAgQ2RiLT5TdGF0RmxhZ3MgfD0gUFhFX1NUQVRGTEFH U19JTklUSUFMSVpFRF9OT19NRURJQTsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICBpZiAo Q2RiLT5TdGF0Q29kZSAhPSBQWEVfU1RBVENPREVfU1VDQ0VTUykgew0KPiArICAgIENkYi0+U3Rh dEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgfSBlbHNlIHsNCj4g KyAgICBOaWMtPlN0YXRlID0gUFhFX1NUQVRGTEFHU19HRVRfU1RBVEVfSU5JVElBTElaRUQ7DQo+ ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaUlu aXRpYWxpemUgIT0gTlVMTCkgew0KPiArICAgIFN0YXR1cyA9IE5pYy0+VXNiRXRoLT5Vc2JFdGhV bmRpLlVzYkV0aFVuZGlJbml0aWFsaXplIChDZGIsIE5pYyk7DQo+ICsgICAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPiArICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NP TU1BTkRfRkFJTEVEOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAg SW5pdGlhbGl6ZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAg QHBhcmFtW2luXSAgICAgIENkYiAgICAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0 b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSBOaWMgICAgIEEgcG9pbnRlciB0byB0aGUg TmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgU3Rh dHVzICBBIHZhbHVlIG9mIFB4ZSBzdGF0Y29kZS4NCj4gKw0KPiArKiovDQo+ICtVSU5UMTYNCj4g K0luaXRpYWxpemUgKA0KPiArICBJTiAgICAgIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiBPVVQg IE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgVUlOVE4gICAgICAgU3RhdHVzOw0K PiArICBVSU5UMzIgICAgICBJbmRleDsNCj4gKyAgRUZJX1NUQVRVUyAgRWZpU3RhdHVzOw0KPiAr DQo+ICsgIFN0YXR1cyA9IE1hcEl0ICgNCj4gKyAgICAgICAgICAgICBOaWMsDQo+ICsgICAgICAg ICAgICAgTmljLT5QeGVJbml0Lk1lbW9yeUFkZHIsDQo+ICsgICAgICAgICAgICAgTmljLT5QeGVJ bml0Lk1lbW9yeUxlbmd0aCwNCj4gKyAgICAgICAgICAgICBUT19BTkRfRlJPTV9ERVZJQ0UsDQo+ ICsgICAgICAgICAgICAgKFVJTlQ2NCkoVUlOVE4pJk5pYy0+TWFwcGVkQWRkcg0KPiArICAgICAg ICAgICAgICk7DQo+ICsNCj4gKyAgaWYgKFN0YXR1cyAhPSAwKSB7DQo+ICsgICAgcmV0dXJuIChV SU5UMTYpU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwg UFhFX0hXQUREUl9MRU5fRVRIRVI7IEluZGV4KyspIHsNCj4gKyAgICBOaWMtPlBlcm1Ob2RlQWRk cmVzc1tJbmRleF0gPSBOaWMtPk1hY0FkZHIuQWRkcltJbmRleF07DQo+ICsgIH0NCj4gKw0KPiAr ICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBQWEVfSFdBRERSX0xFTl9FVEhFUjsgSW5kZXgrKykg ew0KPiArICAgIE5pYy0+Q3VycmVudE5vZGVBZGRyZXNzW0luZGV4XSA9IE5pYy0+UGVybU5vZGVB ZGRyZXNzW0luZGV4XTsNCj4gKyAgfQ0KPiArDQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8 IFBYRV9IV0FERFJfTEVOX0VUSEVSOyBJbmRleCsrKSB7DQo+ICsgICAgTmljLT5Ccm9hZGNhc3RO b2RlQWRkcmVzc1tJbmRleF0gPSAweEZGOw0KPiArICB9DQo+ICsNCj4gKyAgZm9yIChJbmRleCA9 IFBYRV9IV0FERFJfTEVOX0VUSEVSOyBJbmRleCA8IFBYRV9NQUNfTEVOR1RIOyBJbmRleCsrKSB7 DQo+ICsgICAgTmljLT5DdXJyZW50Tm9kZUFkZHJlc3NbSW5kZXhdICAgPSAwOw0KPiArICAgIE5p Yy0+UGVybU5vZGVBZGRyZXNzW0luZGV4XSAgICAgID0gMDsNCj4gKyAgICBOaWMtPkJyb2FkY2Fz dE5vZGVBZGRyZXNzW0luZGV4XSA9IDA7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5Vc2JF dGgtPlVzYkV0aEluaXRpYWxpemUgIT0gTlVMTCkgew0KPiArICAgIEVmaVN0YXR1cyA9IE5pYy0+ VXNiRXRoLT5Vc2JFdGhJbml0aWFsaXplIChDZGIsIE5pYyk7DQo+ICsgICAgaWYgKEVGSV9FUlJP UiAoRWZpU3RhdHVzKSkgew0KPiArICAgICAgcmV0dXJuIFBYRV9TVEFURkxBR1NfQ09NTUFORF9G QUlMRUQ7DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIChVSU5UMTYpU3RhdHVz Ow0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIHJlc2V0cyB0aGUgbmV0d29y ayBhZGFwdGVyIGFuZCByZWluaXRpYWxpemVzIHRoZSBVTkRJDQo+ICsgIHdpdGggdGhlIHNhbWUg cGFyYW1ldGVycyBwcm92aWRlZCBpbiB0aGUgSW5pdGlhbGl6ZSBjb21tYW5kLg0KPiArDQo+ICsg IEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxv Y2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVy ZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyoqLw0KPiArVk9JRA0KPiArVW5kaVJlc2V0 ICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4g KyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ICsNCj4gKyAgaWYgKChDZGIt Pk9wQ29kZSAhPSBQWEVfT1BDT0RFX1JFU0VUKSB8fA0KPiArICAgICAgKENkYi0+U3RhdENvZGUg IT0gUFhFX1NUQVRDT0RFX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0RmxhZ3Mg IT0gUFhFX1NUQVRGTEFHU19JTklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+SUZudW0gPj0g KGdQeGUtPklGY250IHwgZ1B4ZS0+SUZjbnRFeHQgPDwgOCkpIHx8DQo+ICsgICAgICAoQ2RiLT5D UEJzaXplICE9IFBYRV9DUEJTSVpFX05PVF9VU0VEKSB8fA0KPiArICAgICAgKENkYi0+Q1BCYWRk ciAhPSBQWEVfQ1BCQUREUl9OT1RfVVNFRCkgfHwNCj4gKyAgICAgIChDZGItPkRCc2l6ZSAhPSBQ WEVfREJTSVpFX05PVF9VU0VEKSB8fA0KPiArICAgICAgKENkYi0+REJhZGRyICE9IFBYRV9EQkFE RFJfTk9UX1VTRUQpKQ0KPiArICB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZM QUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RF X0lOVkFMSURfQ0RCOw0KPiArICAgIHJldHVybjsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBDZGIt PlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9DT01QTEVURTsNCj4gKyAgICBDZGIt PlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0KPiArICB9DQo+ICsNCj4gKyAgaWYg KE5pYy0+U3RhdGUgIT0gUFhFX1NUQVRGTEFHU19HRVRfU1RBVEVfSU5JVElBTElaRUQpIHsNCj4g KyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9OT1RfSU5JVElBTElaRUQ7DQo+ICsg ICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAg IHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmICgoQ2RiLT5PcEZsYWdzICE9IFBYRV9PUEZM QUdTX05PVF9VU0VEKSAmJg0KPiArICAgICAgKENkYi0+T3BGbGFncyAhPSBQWEVfT1BGTEFHU19S RVNFVF9ESVNBQkxFX0lOVEVSUlVQVFMpICYmDQo+ICsgICAgICAoQ2RiLT5PcEZsYWdzICE9IFBY RV9PUEZMQUdTX1JFU0VUX0RJU0FCTEVfRklMVEVSUykpDQo+ICsgIHsNCj4gKyAgICBDZGItPlN0 YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0 Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9 DQo+ICsNCj4gKyAgaWYgKChDZGItPk9wRmxhZ3MgJiBQWEVfT1BGTEFHU19SRVNFVF9ESVNBQkxF X0ZJTFRFUlMpID09IDApIHsNCj4gKyAgICBOaWMtPlJ4RmlsdGVyID0gUFhFX09QRkxBR1NfUkVD RUlWRV9GSUxURVJfQlJPQURDQVNUOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKChDZGItPk9wRmxh Z3MgJiBQWEVfT1BGTEFHU19SRVNFVF9ESVNBQkxFX0lOVEVSUlVQVFMpICE9IDApIHsNCj4gKyAg ICBOaWMtPkludGVycnVwT3BGbGFnID0gMDsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChOaWMtPlVz YkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpUmVzZXQgIT0gTlVMTCkgew0KPiArICAgIFN0YXR1 cyA9IE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlSZXNldCAoQ2RiLCBOaWMpOw0K PiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIENkYi0+U3RhdEZsYWdz ID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICB9DQo+ICsgIH0NCj4gK30N Cj4gKw0KPiArLyoqDQo+ICsgIFRoZSBTaHV0ZG93biBjb21tYW5kIHJlc2V0cyB0aGUgbmV0d29y ayBhZGFwdGVyIGFuZCBsZWF2ZXMgaXQgaW4gYQ0KPiArICBzYWZlIHN0YXRlIGZvciBhbm90aGVy IGRyaXZlciB0byBpbml0aWFsaXplLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICAgICBDZGIgIEEg cG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW4s IG91dF0gTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIg ZGF0YS4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtVbmRpU2h1dGRvd24gKA0KPiArICBJTiAg ICAgIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiBPVVQgIE5JQ19EQVRBICAqTmljDQo+ICsgICkN Cj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiArDQo+ICsgIGlmICgoQ2RiLT5PcENv ZGUgIT0gUFhFX09QQ09ERV9TSFVURE9XTikgfHwNCj4gKyAgICAgIChDZGItPlN0YXRDb2RlICE9 IFBYRV9TVEFUQ09ERV9JTklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+U3RhdEZsYWdzICE9 IFBYRV9TVEFURkxBR1NfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPklGbnVtID49IChn UHhlLT5JRmNudCB8IGdQeGUtPklGY250RXh0IDw8IDgpKSB8fA0KPiArICAgICAgKENkYi0+Q1BC c2l6ZSAhPSBQWEVfQ1BCU0laRV9OT1RfVVNFRCkgfHwNCj4gKyAgICAgIChDZGItPkNQQmFkZHIg IT0gUFhFX0NQQkFERFJfTk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5EQnNpemUgIT0gUFhF X0RCU0laRV9OT1RfVVNFRCkgfHwNCj4gKyAgICAgIChDZGItPkRCYWRkciAhPSBQWEVfREJBRERS X05PVF9VU0VEKSB8fA0KPiArICAgICAgKENkYi0+T3BGbGFncyAhPSBQWEVfT1BGTEFHU19OT1Rf VVNFRCkpDQo+ICsgIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09N TUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJ RF9DREI7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9IGVsc2Ugew0KPiArICAgIENkYi0+U3RhdEZs YWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0NPTVBMRVRFOw0KPiArICAgIENkYi0+U3RhdENv ZGUgID0gUFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5T dGF0ZSAhPSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9JTklUSUFMSVpFRCkgew0KPiArICAgIENk Yi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX05PVF9JTklUSUFMSVpFRDsNCj4gKyAgICBDZGIt PlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgcmV0dXJu Ow0KPiArICB9DQo+ICsNCj4gKyAgTmljLT5DYW5UcmFuc21pdCA9IEZBTFNFOw0KPiArDQo+ICsg IE5pYy0+U3RhdGUgPSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9TVEFSVEVEOw0KPiArDQo+ICsg IGlmIChOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpU2h1dGRvd24gIT0gTlVMTCkg ew0KPiArICAgIFN0YXR1cyA9IE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlTaHV0 ZG93biAoQ2RiLCBOaWMpOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAg ICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX05PVF9JTklUSUFMSVpFRDsNCj4gKyAg ICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAg ICB9DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoZSBJbnRlcnJ1cHQgRW5hYmxl cyBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIHJlYWQgYW5kL29yIGNoYW5nZQ0KPiArICB0aGUgY3Vy cmVudCBleHRlcm5hbCBpbnRlcnJ1cHQgZW5hYmxlIHNldHRpbmdzLg0KPiArDQo+ICsgIEBwYXJh bVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBj b250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyoqLw0KPiArVk9JRA0KPiArVW5kaUludGVycnVwdEVu YWJsZSAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmlj DQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiArDQo+ICsgIENkYi0+ U3RhdENvZGUgPSBQWEVfU1RBVENPREVfVU5TVVBQT1JURUQ7DQo+ICsgIGlmIChOaWMtPlVzYkV0 aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpSW50ZXJydXB0RW5hYmxlICE9IE5VTEwpIHsNCj4gKyAg ICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpSW50ZXJydXB0RW5h YmxlIChDZGIsIE5pYyk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAg ICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAg IH0gZWxzZSB7DQo+ICsgICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFO RF9DT01QTEVURTsNCj4gKyAgICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX1NVQ0NF U1M7DQo+ICsgICAgfQ0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1h bmQgaXMgdXNlZCB0byByZWFkIGFuZCBjaGFuZ2UgcmVjZWl2ZSBmaWx0ZXJzIGFuZCwNCj4gKyAg aWYgc3VwcG9ydGVkLCByZWFkIGFuZCBjaGFuZ2UgdGhlIG11bHRpY2FzdCBNQUMgYWRkcmVzcyBm aWx0ZXIgbGlzdC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUg Y29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRl ciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsqKi8N Cj4gK1ZPSUQNCj4gK1VuZGlSZWNlaXZlRmlsdGVyICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2Ri LA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBVSU5UMTYgICAg ICAgICAgICAgICAgICBOZXdGaWx0ZXI7DQo+ICsgIFBYRV9EQl9SRUNFSVZFX0ZJTFRFUlMgICpE YjsNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgU3RhdHVzOw0KPiArDQo+ICsgIGlmICgo Q2RiLT5PcENvZGUgIT0gUFhFX09QQ09ERV9SRUNFSVZFX0ZJTFRFUlMpIHx8DQo+ICsgICAgICAo Q2RiLT5TdGF0Q29kZSAhPSBQWEVfU1RBVENPREVfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChD ZGItPlN0YXRGbGFncyAhPSBQWEVfU1RBVEZMQUdTX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAo Q2RiLT5JRm51bSA+PSAoZ1B4ZS0+SUZjbnQgfCBnUHhlLT5JRmNudEV4dCA8PCA4KSkpDQo+ICsg IHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7 DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ICsg ICAgcmV0dXJuOw0KPiArICB9IGVsc2Ugew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NU QVRGTEFHU19DT01NQU5EX0NPTVBMRVRFOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NU QVRDT0RFX1NVQ0NFU1M7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5TdGF0ZSAhPSBQWEVf U1RBVEZMQUdTX0dFVF9TVEFURV9JTklUSUFMSVpFRCkgew0KPiArICAgIENkYi0+U3RhdENvZGUg ID0gUFhFX1NUQVRDT0RFX05PVF9JTklUSUFMSVpFRDsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9 IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ ICsNCj4gKyAgTmV3RmlsdGVyID0gKFVJTlQxNikoQ2RiLT5PcEZsYWdzICYgMHgxRik7DQo+ICsN Cj4gKyAgc3dpdGNoIChDZGItPk9wRmxhZ3MgJiBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9P UE1BU0spIHsNCj4gKyAgICBjYXNlIFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX1JFQUQ6DQo+ ICsgICAgICBpZiAoQ2RiLT5DUEJzaXplICE9IFBYRV9DUEJTSVpFX05PVF9VU0VEKSB7DQo+ICsg ICAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4g KyAgICAgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ICsg ICAgICB9DQo+ICsNCj4gKyAgICAgIGlmICgoTmV3RmlsdGVyICYgUFhFX09QRkxBR1NfUkVDRUlW RV9GSUxURVJfUkVTRVRfTUNBU1RfTElTVCkgPT0gMCkgew0KPiArICAgICAgICBpZiAoKENkYi0+ REJzaXplICE9IDApKSB7DQo+ICsgICAgICAgICAgRGIgPSAoUFhFX0RCX1JFQ0VJVkVfRklMVEVS UyAqKShVSU5UTilDZGItPkRCYWRkcjsNCj4gKyAgICAgICAgICBDb3B5TWVtIChEYiwgJk5pYy0+ TWNhc3RMaXN0LCBOaWMtPk1jYXN0Q291bnQpOw0KPiArICAgICAgICB9DQo+ICsgICAgICB9DQo+ ICsNCj4gKyAgICAgIGJyZWFrOw0KPiArDQo+ICsgICAgY2FzZSBQWEVfT1BGTEFHU19SRUNFSVZF X0ZJTFRFUl9FTkFCTEU6DQo+ICsgICAgICBpZiAoTmV3RmlsdGVyID09IDApIHsNCj4gKyAgICAg ICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAg ICAgfQ0KPiArDQo+ICsgICAgICBpZiAoQ2RiLT5DUEJzaXplICE9IDApIHsNCj4gKyAgICAgICAg aWYgKCgoTmV3RmlsdGVyICYgUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfRklMVEVSRURfTVVM VElDQVNUKSA9PSAwKSB8fA0KPiArICAgICAgICAgICAgKChOZXdGaWx0ZXIgJiBQWEVfT1BGTEFH U19SRUNFSVZFX0ZJTFRFUl9SRVNFVF9NQ0FTVF9MSVNUKSAhPSAwKSB8fA0KPiArICAgICAgICAg ICAgKChOZXdGaWx0ZXIgJiBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9BTExfTVVMVElDQVNU KSAhPSAwKSB8fA0KPiArICAgICAgICAgICAgKChDZGItPkNQQnNpemUgJSBzaXplb2YgKFBYRV9N QUNfQUREUikpICE9IDApKQ0KPiArICAgICAgICB7DQo+ICsgICAgICAgICAgQ2RiLT5TdGF0Rmxh Z3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgICAgICB9DQo+ICsgICAg ICB9DQo+ICsNCj4gKyAgICAgIGlmICgoQ2RiLT5PcEZsYWdzICYgUFhFX09QRkxBR1NfUkVDRUlW RV9GSUxURVJfRklMVEVSRURfTVVMVElDQVNUKSAhPSAwKSB7DQo+ICsgICAgICAgIGlmICgoKENk Yi0+T3BGbGFncyAmIFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX1JFU0VUX01DQVNUX0xJU1Qp ICE9IDApIHx8DQo+ICsgICAgICAgICAgICAoKENkYi0+T3BGbGFncyAmIFBYRV9PUEZMQUdTX1JF Q0VJVkVfRklMVEVSX0FMTF9NVUxUSUNBU1QpICE9IDApKQ0KPiArICAgICAgICB7DQo+ICsgICAg ICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiAr ICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAgaWYgKChDZGItPkNQQnNpemUgPT0gMCkpIHsNCj4g KyAgICAgICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7 DQo+ICsgICAgICAgIH0NCj4gKyAgICAgIH0NCj4gKw0KPiArICAgICAgQ2RiLT5TdGF0Q29kZSA9 IFNldEZpbHRlciAoTmljLCBOZXdGaWx0ZXIsIENkYi0+Q1BCYWRkciwgQ2RiLT5DUEJzaXplKTsN Cj4gKyAgICAgIGJyZWFrOw0KPiArDQo+ICsgICAgY2FzZSBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJ TFRFUl9ESVNBQkxFOg0KPiArICAgICAgaWYgKENkYi0+Q1BCc2l6ZSAhPSBQWEVfQ1BCU0laRV9O T1RfVVNFRCkgew0KPiArICAgICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09N TUFORF9GQUlMRUQ7DQo+ICsgICAgICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0lO VkFMSURfQ0RCOw0KPiArICAgICAgfQ0KPiArDQo+ICsgICAgICBicmVhazsNCj4gKw0KPiArICAg IGRlZmF1bHQ6DQo+ICsgICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFO RF9GQUlMRUQ7DQo+ICsgICAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElE X0NEQjsNCj4gKyAgfQ0KPiArDQo+ICsgIENkYi0+U3RhdEZsYWdzID0gKFBYRV9TVEFURkxBR1Mp KENkYi0+U3RhdEZsYWdzIHwgTmljLT5SeEZpbHRlcik7DQo+ICsNCj4gKyAgaWYgKE5pYy0+VXNi RXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlSZWNlaXZlRmlsdGVyICE9IE5VTEwpIHsNCj4gKyAg ICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpUmVjZWl2ZUZpbHRl ciAoQ2RiLCBOaWMpOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAg IENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICB9 DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFNldCBQWEUgcmVjZWl2ZSBmaWx0ZXIu DQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgTmljICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBOZXR3 b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsgIEBwYXJhbVtpbl0gIFNldEZpbHRl ciAgIFBYRSByZWNlaXZlIGZpbHRlcg0KPiArICBAcGFyYW1baW5dICBDcGJBZGRyICAgICBDb21t YW5kIFBhcmFtZXRlciBCbG9jayBBZGRyZXNzDQo+ICsgIEBwYXJhbVtpbl0gIENwYlNpemUgICAg IENvbW1hbmQgUGFyYW1ldGVyIEJsb2NrIFNpemUNCj4gKw0KPiArKiovDQo+ICtVSU5UMTYNCj4g K1NldEZpbHRlciAoDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYywNCj4gKyAgSU4gIFVJTlQxNiAg ICBTZXRGaWx0ZXIsDQo+ICsgIElOICBVSU5UNjQgICAgQ3BiQWRkciwNCj4gKyAgSU4gIFVJTlQz MiAgICBDcGJTaXplDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAg ICAgICBTdGF0dXM7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgKk1jYXN0TGlz dDsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICBDb3VudDsNCj4gKyAgVUlOVDgg ICAgICAgICAgICAgICAgICAgICAgICBJbmRleDE7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAg ICAgICAgICAgSW5kZXgyOw0KPiArICBQWEVfQ1BCX1JFQ0VJVkVfRklMVEVSUyAgICAgICpDcGI7 DQo+ICsgIFVTQl9FVEhFUk5FVF9GVU5fREVTQ1JJUFRPUiAgVXNiRXRoRnVuRGVzY3JpcHRvcjsN Cj4gKw0KPiArICBDb3VudCA9IDA7DQo+ICsgIENwYiAgID0gKFBYRV9DUEJfUkVDRUlWRV9GSUxU RVJTICopKFVJTlROKUNwYkFkZHI7DQo+ICsNCj4gKyAgLy8gVGhlIENwYiBjb3VsZCBiZSBOVUxM LihyZWY6UFhFX0NQQkFERFJfTk9UX1VTRUQpDQo+ICsgIE5pYy0+UnhGaWx0ZXIgPSAoVUlOVDgp U2V0RmlsdGVyOw0KPiArDQo+ICsgIGlmICgoKFNldEZpbHRlciAmIFBYRV9PUEZMQUdTX1JFQ0VJ VkVfRklMVEVSX0ZJTFRFUkVEX01VTFRJQ0FTVCkgIT0gMCkgfHwgKENwYiAhPSBOVUxMKSkgew0K PiArICAgIGlmIChDcGIgIT0gTlVMTCkgew0KPiArICAgICAgTmljLT5NY2FzdENvdW50ID0gKFVJ TlQ4KShDcGJTaXplIC8gUFhFX01BQ19MRU5HVEgpOw0KPiArICAgICAgQ29weU1lbSAoJk5pYy0+ TWNhc3RMaXN0LCBDcGIsIE5pYy0+TWNhc3RDb3VudCk7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAg TmljLT5Vc2JFdGgtPlVzYkV0aEZ1bkRlc2NyaXB0b3IgKE5pYy0+VXNiRXRoLCAmVXNiRXRoRnVu RGVzY3JpcHRvcik7DQo+ICsgICAgaWYgKChVc2JFdGhGdW5EZXNjcmlwdG9yLk51bWJlck1jRmls dGVycyA8PCAxKSA9PSAwKSB7DQo+ICsgICAgICBOaWMtPlJ4RmlsdGVyIHw9IFBYRV9PUEZMQUdT X1JFQ0VJVkVfRklMVEVSX0FMTF9NVUxUSUNBU1Q7DQo+ICsgICAgICBOaWMtPlVzYkV0aC0+U2V0 VXNiRXRoUGFja2V0RmlsdGVyIChOaWMtPlVzYkV0aCwgTmljLT5SeEZpbHRlcik7DQo+ICsgICAg fSBlbHNlIHsNCj4gKyAgICAgIFN0YXR1cyA9IGdCUy0+QWxsb2NhdGVQb29sIChFZmlCb290U2Vy dmljZXNEYXRhLCBOaWMtPk1jYXN0Q291bnQgKiA2LCAoVk9JRCAqKikmTWNhc3RMaXN0KTsNCj4g KyAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgICAgcmV0dXJuIFBYRV9T VEFUQ09ERV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgICAgIH0NCj4gKw0KPiArICAgICAgaWYg KENwYiAhPSBOVUxMKSB7DQo+ICsgICAgICAgIGZvciAoSW5kZXgxID0gMDsgSW5kZXgxIDwgTmlj LT5NY2FzdENvdW50OyBJbmRleDErKykgew0KPiArICAgICAgICAgIGZvciAoSW5kZXgyID0gMDsg SW5kZXgyIDwgNjsgSW5kZXgyKyspIHsNCj4gKyAgICAgICAgICAgIE1jYXN0TGlzdFtDb3VudCsr XSA9IENwYi0+TUNhc3RMaXN0W0luZGV4MV1bSW5kZXgyXTsNCj4gKyAgICAgICAgICB9DQo+ICsg ICAgICAgIH0NCj4gKyAgICAgIH0NCj4gKw0KPiArICAgICAgTmljLT5SeEZpbHRlciB8PSBQWEVf T1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9GSUxURVJFRF9NVUxUSUNBU1Q7DQo+ICsgICAgICBpZiAo Q3BiICE9IE5VTEwpIHsNCj4gKyAgICAgICAgTmljLT5Vc2JFdGgtPlNldFVzYkV0aE1jYXN0Rmls dGVyIChOaWMtPlVzYkV0aCwgTmljLT5NY2FzdENvdW50LCBNY2FzdExpc3QpOw0KPiArICAgICAg fQ0KPiArDQo+ICsgICAgICBOaWMtPlVzYkV0aC0+U2V0VXNiRXRoUGFja2V0RmlsdGVyIChOaWMt PlVzYkV0aCwgTmljLT5SeEZpbHRlcik7DQo+ICsgICAgICBGcmVlUG9vbCAoTWNhc3RMaXN0KTsN Cj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gUFhFX1NUQVRDT0RFX1NVQ0NFU1M7 DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBnZXQgY3Vy cmVudCBzdGF0aW9uIGFuZCBicm9hZGNhc3QgTUFDIGFkZHJlc3Nlcw0KPiArICBhbmQsIGlmIHN1 cHBvcnRlZCwgdG8gY2hhbmdlIHRoZSBjdXJyZW50IHN0YXRpb24gTUFDIGFkZHJlc3MuDQo+ICsN Cj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRv ciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsg aW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtVbmRp U3RhdGlvbkFkZHJlc3MgKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNf REFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsgIFBYRV9DUEJfU1RBVElPTl9BRERSRVNTICAq Q3BiOw0KPiArICBQWEVfREJfU1RBVElPTl9BRERSRVNTICAgKkRiOw0KPiArICBVSU5UMTYgICAg ICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICBTdGF0 dXM7DQo+ICsNCj4gKyAgaWYgKChDZGItPk9wQ29kZSAhPSBQWEVfT1BDT0RFX1NUQVRJT05fQURE UkVTUykgfHwNCj4gKyAgICAgIChDZGItPlN0YXRDb2RlICE9IFBYRV9TVEFUQ09ERV9JTklUSUFM SVpFKSB8fA0KPiArICAgICAgKENkYi0+U3RhdEZsYWdzICE9IFBYRV9TVEFURkxBR1NfSU5JVElB TElaRSkgfHwNCj4gKyAgICAgIChDZGItPklGbnVtID49IChnUHhlLT5JRmNudCB8IGdQeGUtPklG Y250RXh0IDw8IDgpKSB8fA0KPiArICAgICAgKENkYi0+REJzaXplICE9IHNpemVvZiAoUFhFX0RC X1NUQVRJT05fQUREUkVTUykpKQ0KPiArICB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVf U1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NU QVRDT0RFX0lOVkFMSURfQ0RCOw0KPiArICAgIHJldHVybjsNCj4gKyAgfSBlbHNlIHsNCj4gKyAg ICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9DT01QTEVURTsNCj4gKyAg ICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0KPiArICB9DQo+ICsNCj4g KyAgaWYgKE5pYy0+U3RhdGUgIT0gUFhFX1NUQVRGTEFHU19HRVRfU1RBVEVfSU5JVElBTElaRUQp IHsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9OT1RfSU5JVElBTElaRUQ7 DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0K PiArICAgIHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChDZGItPk9wRmxhZ3MgPT0gUFhF X09QRkxBR1NfU1RBVElPTl9BRERSRVNTX1JFU0VUKSB7DQo+ICsgICAgaWYgKENvbXBhcmVNZW0g KCZOaWMtPkN1cnJlbnROb2RlQWRkcmVzc1swXSwgJk5pYy0+UGVybU5vZGVBZGRyZXNzWzBdLCBQ WEVfTUFDX0xFTkdUSCkgIT0gMCkgew0KPiArICAgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwg UFhFX01BQ19MRU5HVEg7IEluZGV4KyspIHsNCj4gKyAgICAgICAgTmljLT5DdXJyZW50Tm9kZUFk ZHJlc3NbSW5kZXhdID0gTmljLT5QZXJtTm9kZUFkZHJlc3NbSW5kZXhdOw0KPiArICAgICAgfQ0K PiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChDZGItPkNQQmFkZHIgIT0gMCkgew0KPiAr ICAgIENwYiA9IChQWEVfQ1BCX1NUQVRJT05fQUREUkVTUyAqKShVSU5UTilDZGItPkNQQmFkZHI7 DQo+ICsgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgUFhFX01BQ19MRU5HVEg7IEluZGV4Kysp IHsNCj4gKyAgICAgIE5pYy0+Q3VycmVudE5vZGVBZGRyZXNzW0luZGV4XSA9IENwYi0+U3RhdGlv bkFkZHJbSW5kZXhdOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChDZGItPkRCYWRk ciAhPSAwKSB7DQo+ICsgICAgRGIgPSAoUFhFX0RCX1NUQVRJT05fQUREUkVTUyAqKShVSU5UTilD ZGItPkRCYWRkcjsNCj4gKyAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBQWEVfTUFDX0xFTkdU SDsgSW5kZXgrKykgew0KPiArICAgICAgRGItPlN0YXRpb25BZGRyW0luZGV4XSAgID0gTmljLT5D dXJyZW50Tm9kZUFkZHJlc3NbSW5kZXhdOw0KPiArICAgICAgRGItPkJyb2FkY2FzdEFkZHJbSW5k ZXhdID0gTmljLT5Ccm9hZGNhc3ROb2RlQWRkcmVzc1tJbmRleF07DQo+ICsgICAgICBEYi0+UGVy bWFuZW50QWRkcltJbmRleF0gPSBOaWMtPlBlcm1Ob2RlQWRkcmVzc1tJbmRleF07DQo+ICsgICAg fQ0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVu ZGlTdGF0aW9uQWRkcmVzcyAhPSBOVUxMKSB7DQo+ICsgICAgU3RhdHVzID0gTmljLT5Vc2JFdGgt PlVzYkV0aFVuZGkuVXNiRXRoVW5kaVN0YXRpb25BZGRyZXNzIChDZGIsIE5pYyk7DQo+ICsgICAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVf U1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArfQ0KPiArDQo+ ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gcmVhZCBhbmQgY2xlYXIgdGhlIE5J QyB0cmFmZmljIHN0YXRpc3RpY3MuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50 ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmlj ICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4g Kw0KPiArKiovDQo+ICtWT0lEDQo+ICtVbmRpU3RhdGlzdGljcyAoDQo+ICsgIElOICBQWEVfQ0RC ICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJ X1NUQVRVUyAgU3RhdHVzOw0KPiArDQo+ICsgIGlmICgoQ2RiLT5PcENvZGUgIT0gUFhFX09QQ09E RV9TVEFUSVNUSUNTKSB8fA0KPiArICAgICAgKENkYi0+U3RhdENvZGUgIT0gUFhFX1NUQVRDT0RF X0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0RmxhZ3MgIT0gUFhFX1NUQVRGTEFH U19JTklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+SUZudW0gPj0gKGdQeGUtPklGY250IHwg Z1B4ZS0+SUZjbnRFeHQgPDwgOCkpIHx8DQo+ICsgICAgICAoQ2RiLT5DUEJzaXplICE9IFBYRV9D UEJTSVpFX05PVF9VU0VEKSB8fA0KPiArICAgICAgKENkYi0+Q1BCYWRkciAhPSBQWEVfQ1BCQURE Ul9OT1RfVVNFRCkpDQo+ICsgIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxB R1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVf SU5WQUxJRF9DREI7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9IGVsc2Ugew0KPiArICAgIENkYi0+ U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0NPTVBMRVRFOw0KPiArICB9DQo+ICsN Cj4gKyAgaWYgKE5pYy0+U3RhdGUgIT0gUFhFX1NUQVRGTEFHU19HRVRfU1RBVEVfSU5JVElBTEla RUQpIHsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9OT1RfSU5JVElBTEla RUQ7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVE Ow0KPiArICAgIHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmICgoQ2RiLT5PcEZsYWdzICE9 IFBYRV9PUEZMQUdTX1NUQVRJU1RJQ1NfUkVTRVQpICYmDQo+ICsgICAgICAoQ2RiLT5PcEZsYWdz ICE9IFBYRV9PUEZMQUdTX1NUQVRJU1RJQ1NfUkVBRCkpDQo+ICsgIHsNCj4gKyAgICBDZGItPlN0 YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0 Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9 DQo+ICsNCj4gKyAgQ2RiLT5TdGF0Q29kZSA9IFN0YXRpc3RpY3MgKE5pYywgQ2RiLT5EQmFkZHIs IENkYi0+REJzaXplKTsNCj4gKw0KPiArICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNi RXRoVW5kaVN0YXRpc3RpY3MgIT0gTlVMTCkgew0KPiArICAgIFN0YXR1cyA9IE5pYy0+VXNiRXRo LT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlTdGF0aXN0aWNzIChDZGIsIE5pYyk7DQo+ICsgICAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RB VEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArfQ0KPiArDQo+ICsv KioNCj4gKyAgUmV0dXJuIGRhdGEgZm9yIERCIGRhdGEuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAg TmljICAgICAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRh dGEuDQo+ICsgIEBwYXJhbVtpbl0gIERiQWRkciAgIERhdGEgQmxvY2sgQWRkcmVzcy4NCj4gKyAg QHBhcmFtW2luXSAgRGJTaXplICAgRGF0YSBCbG9jayBTaXplLg0KPiArDQo+ICsqKi8NCj4gK1VJ TlQxNg0KPiArU3RhdGlzdGljcyAoDQo+ICsgIElOIE5JQ19EQVRBICAqTmljLA0KPiArICBJTiBV SU5UNjQgICAgRGJBZGRyLA0KPiArICBJTiBVSU5UMTYgICAgRGJTaXplDQo+ICsgICkNCj4gK3sN Cj4gKyAgUFhFX0RCX1NUQVRJU1RJQ1MgICpEYlN0YXRpc3RpYzsNCj4gKyAgRUZJX1NUQVRVUyAg ICAgICAgIFN0YXR1czsNCj4gKw0KPiArICBEYlN0YXRpc3RpYyA9IChQWEVfREJfU1RBVElTVElD UyAqKShVSU5UTilEYkFkZHI7DQo+ICsNCj4gKyAgaWYgKERiU2l6ZSA9PSAwKSB7DQo+ICsgICAg cmV0dXJuIFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0KPiArICB9DQo+ICsNCj4gKyAgRGJTdGF0aXN0 aWMtPlN1cHBvcnRlZCAgPSAweDgwMjsNCj4gKyAgRGJTdGF0aXN0aWMtPkRhdGFbMHgwMV0gPSBO aWMtPlJ4RnJhbWU7DQo+ICsgIERiU3RhdGlzdGljLT5EYXRhWzB4MEJdID0gTmljLT5UeEZyYW1l Ow0KPiArDQo+ICsgIGlmIChOaWMtPlVzYkV0aC0+VXNiRXRoU3RhdGlzdGljcyAhPSBOVUxMKSB7 DQo+ICsgICAgU3RhdHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0aFN0YXRpc3RpY3MgKE5pYywgRGJB ZGRyLCBEYlNpemUpOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAg IHJldHVybiBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIH0NCj4gKyAgfQ0K PiArDQo+ICsgIHJldHVybiBQWEVfU1RBVENPREVfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArLyoq DQo+ICsgIFRyYW5zbGF0ZSBhIG11bHRpY2FzdCBJUHY0IG9yIElQdjYgYWRkcmVzcyB0byBhIG11 bHRpY2FzdCBNQUMgYWRkcmVzcy4NCj4gKw0KPiArICBAcGFyYW1baW4sIG91dF0gQ2RiICBBIHBv aW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAg ICAgIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRh dGEuDQo+ICsNCj4gKyoqLw0KPiArVk9JRA0KPiArVW5kaU1jYXN0SXAyTWFjICgNCj4gKyAgSU4g T1VUICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gICAgICBOSUNfREFUQSAgKk5pYw0KPiArICAp DQo+ICt7DQo+ICsgIFBYRV9DUEJfTUNBU1RfSVBfVE9fTUFDICAqQ3BiOw0KPiArICBQWEVfREJf TUNBU1RfSVBfVE9fTUFDICAgKkRiOw0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgKlRt cDsNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKw0KPiArICBpZiAo KENkYi0+T3BDb2RlICE9IFBYRV9PUENPREVfTUNBU1RfSVBfVE9fTUFDKSB8fA0KPiArICAgICAg KENkYi0+U3RhdENvZGUgIT0gUFhFX1NUQVRDT0RFX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAo Q2RiLT5TdGF0RmxhZ3MgIT0gUFhFX1NUQVRGTEFHU19JTklUSUFMSVpFKSB8fA0KPiArICAgICAg KENkYi0+SUZudW0gPj0gKGdQeGUtPklGY250IHwgZ1B4ZS0+SUZjbnRFeHQgPDwgOCkpIHx8DQo+ ICsgICAgICAoQ2RiLT5DUEJzaXplICE9IHNpemVvZiAoUFhFX0NQQl9NQ0FTVF9JUF9UT19NQUMp KSB8fA0KPiArICAgICAgKENkYi0+REJzaXplICE9IHNpemVvZiAoUFhFX0RCX01DQVNUX0lQX1RP X01BQykpKQ0KPiArICB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NP TU1BTkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFM SURfQ0RCOw0KPiArICAgIHJldHVybjsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBDZGItPlN0YXRG bGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9DT01QTEVURTsNCj4gKyAgICBDZGItPlN0YXRD b2RlICA9IFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+ U3RhdGUgIT0gUFhFX1NUQVRGTEFHU19HRVRfU1RBVEVfSU5JVElBTElaRUQpIHsNCj4gKyAgICBD ZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9OT1RfSU5JVElBTElaRUQ7DQo+ICsgICAgQ2Ri LT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIHJldHVy bjsNCj4gKyAgfQ0KPiArDQo+ICsgIENwYiA9IChQWEVfQ1BCX01DQVNUX0lQX1RPX01BQyAqKShV SU5UTilDZGItPkNQQmFkZHI7DQo+ICsgIERiICA9IChQWEVfREJfTUNBU1RfSVBfVE9fTUFDICop KFVJTlROKUNkYi0+REJhZGRyOw0KPiArDQo+ICsgIGlmICgoQ2RiLT5PcEZsYWdzICYgUFhFX09Q RkxBR1NfTUNBU1RfSVBWNl9UT19NQUMpICE9IDApIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9 IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQ WEVfU1RBVENPREVfVU5TVVBQT1JURUQ7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4g KyAgVG1wID0gKFVJTlQ4ICopKCZDcGItPklQLklQdjQpOw0KPiArDQo+ICsgIGlmICgoVG1wWzBd ICYgMHhGMCkgIT0gMHhFMCkgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFH U19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9J TlZBTElEX0NQQjsNCj4gKyAgfQ0KPiArDQo+ICsgIERiLT5NQUNbMF0gPSAweDAxOw0KPiArICBE Yi0+TUFDWzFdID0gMHgwMDsNCj4gKyAgRGItPk1BQ1syXSA9IDB4NUU7DQo+ICsgIERiLT5NQUNb M10gPSBUbXBbMV0gJiAweDdGOw0KPiArICBEYi0+TUFDWzRdID0gVG1wWzJdOw0KPiArICBEYi0+ TUFDWzVdID0gVG1wWzNdOw0KPiArDQo+ICsgIGlmIChOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5V c2JFdGhVbmRpTWNhc3RJcDJNYWMgIT0gTlVMTCkgew0KPiArICAgIFN0YXR1cyA9IE5pYy0+VXNi RXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlNY2FzdElwMk1hYyAoQ2RiLCBOaWMpOw0KPiArICAg IGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhF X1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICB9DQo+ICsgIH0NCj4gK30NCj4gKw0K PiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIHJlYWQgYW5kIHdyaXRlIChpZiBz dXBwb3J0ZWQgYnkgTklDIEgvVykNCj4gKyAgbm9udm9sYXRpbGUgc3RvcmFnZSBvbiB0aGUgTklD Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRl c2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBO ZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyoqLw0KPiArVk9JRA0K PiArVW5kaU52RGF0YSAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19E QVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiArDQo+ ICsgIENkYi0+U3RhdENvZGUgPSBQWEVfU1RBVENPREVfVU5TVVBQT1JURUQ7DQo+ICsgIGlmIChO aWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpTnZEYXRhICE9IE5VTEwpIHsNCj4gKyAg ICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpTnZEYXRhIChDZGIs IE5pYyk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgQ2RiLT5T dGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIH0gZWxzZSB7 DQo+ICsgICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9DT01QTEVU RTsNCj4gKyAgICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQo+ICsg ICAgfQ0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1hbmQgcmV0dXJu cyB0aGUgY3VycmVudCBpbnRlcnJ1cHQgc3RhdHVzIGFuZC9vciB0aGUNCj4gKyAgdHJhbnNtaXR0 ZWQgYnVmZmVyIGFkZHJlc3NlcyBhbmQgdGhlIGN1cnJlbnQgbWVkaWEgc3RhdHVzLg0KPiArDQo+ ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3Ig YmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGlu dGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyoqLw0KPiArVk9JRA0KPiArVW5kaUdl dFN0YXR1cyAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAq TmljDQo+ICsgICkNCj4gK3sNCj4gKyAgUFhFX0RCX0dFVF9TVEFUVVMgICpEYjsNCj4gKyAgUFhF X0RCX0dFVF9TVEFUVVMgIFRtcEdldFN0YXR1czsNCj4gKyAgVUlOVDE2ICAgICAgICAgICAgIE51 bUVudHJpZXM7DQo+ICsgIFVJTlROICAgICAgICAgICAgICBJbmRleDsNCj4gKyAgRUZJX1NUQVRV UyAgICAgICAgIFN0YXR1czsNCj4gKw0KPiArICBpZiAoKENkYi0+T3BDb2RlICE9IFBYRV9PUENP REVfR0VUX1NUQVRVUykgfHwNCj4gKyAgICAgIChDZGItPlN0YXRDb2RlICE9IFBYRV9TVEFUQ09E RV9JTklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+U3RhdEZsYWdzICE9IFBYRV9TVEFURkxB R1NfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPklGbnVtID49IChnUHhlLT5JRmNudCB8 IGdQeGUtPklGY250RXh0IDw8IDgpKSB8fA0KPiArICAgICAgKENkYi0+Q1BCc2l6ZSAhPSBQWEVf Q1BCU0laRV9OT1RfVVNFRCkgfHwNCj4gKyAgICAgIChDZGItPkNQQmFkZHIgIT0gUFhFX0NQQkFE RFJfTk9UX1VTRUQpKQ0KPiArICB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZM QUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RF X0lOVkFMSURfQ0RCOw0KPiArICAgIHJldHVybjsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBDZGIt PlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9DT01QTEVURTsNCj4gKyAgICBDZGIt PlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0KPiArICB9DQo+ICsNCj4gKyAgaWYg KE5pYy0+U3RhdGUgIT0gUFhFX1NUQVRGTEFHU19HRVRfU1RBVEVfSU5JVElBTElaRUQpIHsNCj4g KyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9OT1RfSU5JVElBTElaRUQ7DQo+ICsg ICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAg IHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ICsgIFRtcEdldFN0YXR1cy5SeEZyYW1lTGVuID0gMDsN Cj4gKyAgVG1wR2V0U3RhdHVzLnJlc2VydmVkICAgPSAwOw0KPiArICBEYiAgICAgICAgICAgICAg ICAgICAgICA9IChQWEVfREJfR0VUX1NUQVRVUyAqKShVSU5UTilDZGItPkRCYWRkcjsNCj4gKw0K PiArICBpZiAoKENkYi0+REJzaXplID4gMCkgJiYgKENkYi0+REJzaXplIDwgc2l6ZW9mIChVSU5U MzIpICogMikpIHsNCj4gKyAgICBDb3B5TWVtIChEYiwgJlRtcEdldFN0YXR1cywgQ2RiLT5EQnNp emUpOw0KPiArICB9IGVsc2Ugew0KPiArICAgIENvcHlNZW0gKERiLCAmVG1wR2V0U3RhdHVzLCBz aXplb2YgKFVJTlQzMikgKiAyKTsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmICgoQ2RiLT5PcEZsYWdz ICYgUFhFX09QRkxBR1NfR0VUX1RSQU5TTUlUVEVEX0JVRkZFUlMpICE9IDApIHsNCj4gKyAgICBp ZiAoQ2RiLT5EQnNpemUgPT0gMCkgew0KPiArICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RB VEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RB VENPREVfSU5WQUxJRF9DREI7DQo+ICsgICAgICByZXR1cm47DQo+ICsgICAgfQ0KPiArDQo+ICsg ICAgTnVtRW50cmllcyAgPSBDZGItPkRCc2l6ZSAtIHNpemVvZiAoVUlOVDY0KTsNCj4gKyAgICBD ZGItPkRCc2l6ZSA9IHNpemVvZiAoVUlOVDMyKSAqIDI7DQo+ICsNCj4gKyAgICBmb3IgKEluZGV4 ID0gMDsgTnVtRW50cmllcyA+PSBzaXplb2YgKFVJTlQ2NCk7IEluZGV4KyssIE51bUVudHJpZXMg LT0gc2l6ZW9mIChVSU5UNjQpKSB7DQo+ICsgICAgICBpZiAoTmljLT5UeEJ1ZmZlckNvdW50ID4g MCkgew0KPiArICAgICAgICBOaWMtPlR4QnVmZmVyQ291bnQtLTsNCj4gKyAgICAgICAgRGItPlR4 QnVmZmVyW0luZGV4XSA9IE5pYy0+TWVkaWFIZWFkZXJbTmljLT5UeEJ1ZmZlckNvdW50XTsNCj4g KyAgICAgIH0NCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoKENkYi0+T3BGbGFncyAm IFBYRV9PUEZMQUdTX0dFVF9JTlRFUlJVUFRfU1RBVFVTKSAhPSAwKSB7DQo+ICsgICAgaWYgKE5p Yy0+UmVjZWl2ZVN0YXR1cyAhPSAwKSB7DQo+ICsgICAgICBDZGItPlN0YXRGbGFncyB8PSBQWEVf U1RBVEZMQUdTX0dFVF9TVEFUVVNfUkVDRUlWRTsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiAr ICBpZiAoKE5pYy0+UmVxdWVzdC5SZXF1ZXN0ID09IFVTQl9DRENfTkVUV09SS19DT05ORUNUSU9O KSAmJiAoTmljLT5SZXF1ZXN0LlZhbHVlID09IE5FVFdPUktfRElTQ09OTkVDVCkpIHsNCj4gKyAg ICBOaWMtPkNhYmxlRGV0ZWN0ID0gMDsNCj4gKyAgfSBlbHNlIGlmICgoTmljLT5SZXF1ZXN0LlJl cXVlc3QgPT0gVVNCX0NEQ19ORVRXT1JLX0NPTk5FQ1RJT04pICYmIChOaWMtPlJlcXVlc3QuVmFs dWUgPT0gTkVUV09SS19DT05ORUNURUQpKSB7DQo+ICsgICAgTmljLT5DYWJsZURldGVjdCA9IDE7 DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoKENkYi0+T3BGbGFncyAmIFBYRV9PUEZMQUdTX0dFVF9N RURJQV9TVEFUVVMpICE9IDApIHsNCj4gKyAgICBpZiAoTmljLT5DYWJsZURldGVjdCA9PSAwKSB7 DQo+ICsgICAgICBDZGItPlN0YXRGbGFncyB8PSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFUVVNfTk9f TUVESUE7DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+VXNiRXRoLT5Vc2JF dGhVbmRpLlVzYkV0aFVuZGlHZXRTdGF0dXMgIT0gTlVMTCkgew0KPiArICAgIFN0YXR1cyA9IE5p Yy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlHZXRTdGF0dXMgKENkYiwgTmljKTsNCj4g KyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBDZGItPlN0YXRGbGFncyA9 IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgfQ0KPiArICB9DQo+ICt9DQo+ ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBmaWxsIHRoZSBtZWRpYSBo ZWFkZXIocykgaW4gdHJhbnNtaXQgcGFja2V0KHMpLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENk YiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJh bVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVy IGRhdGEuDQo+ICsNCj4gKyoqLw0KPiArVk9JRA0KPiArVW5kaUZpbGxIZWFkZXIgKA0KPiArICBJ TiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7 DQo+ICsgIFBYRV9DUEJfRklMTF9IRUFERVIgICAgICAgICAgICAgKkNwYkZpbGxIZWFkZXI7DQo+ ICsgIFBYRV9DUEJfRklMTF9IRUFERVJfRlJBR01FTlRFRCAgKkNwYkZpbGw7DQo+ICsgIEV0aGVy bmV0SGVhZGVyICAgICAgICAgICAgICAgICAgKk1hY0hlYWRlcjsNCj4gKyAgVUlOVE4gICAgICAg ICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAg ICAgICAgICBTdGF0dXM7DQo+ICsNCj4gKyAgaWYgKChDZGItPk9wQ29kZSAhPSBQWEVfT1BDT0RF X0ZJTExfSEVBREVSKSB8fA0KPiArICAgICAgKENkYi0+U3RhdENvZGUgIT0gUFhFX1NUQVRDT0RF X0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0RmxhZ3MgIT0gUFhFX1NUQVRGTEFH U19JTklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+SUZudW0gPj0gKGdQeGUtPklGY250IHwg Z1B4ZS0+SUZjbnRFeHQgPDwgOCkpIHx8DQo+ICsgICAgICAoQ2RiLT5DUEJzaXplICE9IHNpemVv ZiAoUFhFX0NQQl9GSUxMX0hFQURFUl9GUkFHTUVOVEVEKSkgfHwNCj4gKyAgICAgIChDZGItPkRC c2l6ZSAhPSBQWEVfREJTSVpFX05PVF9VU0VEKSB8fA0KPiArICAgICAgKENkYi0+REJhZGRyICE9 IFBYRV9EQkFERFJfTk9UX1VTRUQpKQ0KPiArICB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQ WEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhF X1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KPiArICAgIHJldHVybjsNCj4gKyAgfSBlbHNlIHsNCj4g KyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9DT01QTEVURTsNCj4g KyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0KPiArICB9DQo+ICsN Cj4gKyAgaWYgKE5pYy0+U3RhdGUgIT0gUFhFX1NUQVRGTEFHU19HRVRfU1RBVEVfSU5JVElBTEla RUQpIHsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9OT1RfSU5JVElBTEla RUQ7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVE Ow0KPiArICAgIHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChDZGItPkNQQnNpemUgPT0g UFhFX0NQQlNJWkVfTk9UX1VTRUQpIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFU RkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENP REVfSU5WQUxJRF9DREI7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKChD ZGItPk9wRmxhZ3MgJiBQWEVfT1BGTEFHU19GSUxMX0hFQURFUl9GUkFHTUVOVEVEKSAhPSAwKSB7 DQo+ICsgICAgQ3BiRmlsbCA9IChQWEVfQ1BCX0ZJTExfSEVBREVSX0ZSQUdNRU5URUQgKikoVUlO VE4pQ2RiLT5DUEJhZGRyOw0KPiArDQo+ICsgICAgaWYgKChDcGJGaWxsLT5GcmFnQ250ID09IDAp IHx8IChDcGJGaWxsLT5GcmFnRGVzY1swXS5GcmFnTGVuIDwgUFhFX01BQ19IRUFERVJfTEVOX0VU SEVSKSkgew0KPiArICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRf RkFJTEVEOw0KPiArICAgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9D REI7DQo+ICsgICAgICByZXR1cm47DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgTWFjSGVhZGVyICAg ICAgICAgICA9IChFdGhlcm5ldEhlYWRlciAqKShVSU5UTilDcGJGaWxsLT5GcmFnRGVzY1swXS5G cmFnQWRkcjsNCj4gKyAgICBNYWNIZWFkZXItPlByb3RvY29sID0gQ3BiRmlsbC0+UHJvdG9jb2w7 DQo+ICsNCj4gKyAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBQWEVfSFdBRERSX0xFTl9FVEhF UjsgSW5kZXgrKykgew0KPiArICAgICAgTWFjSGVhZGVyLT5EZXN0QWRkcltJbmRleF0gPSBDcGJG aWxsLT5EZXN0QWRkcltJbmRleF07DQo+ICsgICAgICBNYWNIZWFkZXItPlNyY0FkZHJbSW5kZXhd ICA9IENwYkZpbGwtPlNyY0FkZHJbSW5kZXhdOw0KPiArICAgIH0NCj4gKyAgfSBlbHNlIHsNCj4g KyAgICBDcGJGaWxsSGVhZGVyID0gKFBYRV9DUEJfRklMTF9IRUFERVIgKikoVUlOVE4pQ2RiLT5D UEJhZGRyOw0KPiArDQo+ICsgICAgTWFjSGVhZGVyICAgICAgICAgICA9IChFdGhlcm5ldEhlYWRl ciAqKShVSU5UTilDcGJGaWxsSGVhZGVyLT5NZWRpYUhlYWRlcjsNCj4gKyAgICBNYWNIZWFkZXIt PlByb3RvY29sID0gQ3BiRmlsbEhlYWRlci0+UHJvdG9jb2w7DQo+ICsNCj4gKyAgICBmb3IgKElu ZGV4ID0gMDsgSW5kZXggPCBQWEVfSFdBRERSX0xFTl9FVEhFUjsgSW5kZXgrKykgew0KPiArICAg ICAgTWFjSGVhZGVyLT5EZXN0QWRkcltJbmRleF0gPSBDcGJGaWxsSGVhZGVyLT5EZXN0QWRkcltJ bmRleF07DQo+ICsgICAgICBNYWNIZWFkZXItPlNyY0FkZHJbSW5kZXhdICA9IENwYkZpbGxIZWFk ZXItPlNyY0FkZHJbSW5kZXhdOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChOaWMt PlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpRmlsbEhlYWRlciAhPSBOVUxMKSB7DQo+ICsg ICAgU3RhdHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaUZpbGxIZWFkZXIg KENkYiwgTmljKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBD ZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgfQ0K PiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGUgVHJhbnNtaXQgY29tbWFuZCBpcyB1 c2VkIHRvIHBsYWNlIGEgcGFja2V0IGludG8gdGhlIHRyYW5zbWl0IHF1ZXVlLg0KPiArDQo+ICsg IEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxv Y2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVy ZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyoqLw0KPiArVk9JRA0KPiArVW5kaVRyYW5z bWl0ICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMN Cj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ICsNCj4gKyAgaWYgKChD ZGItPk9wQ29kZSAhPSBQWEVfT1BDT0RFX1RSQU5TTUlUKSB8fA0KPiArICAgICAgKENkYi0+U3Rh dENvZGUgIT0gUFhFX1NUQVRDT0RFX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0 RmxhZ3MgIT0gUFhFX1NUQVRGTEFHU19JTklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+SUZu dW0gPj0gKGdQeGUtPklGY250IHwgZ1B4ZS0+SUZjbnRFeHQgPDwgOCkpIHx8DQo+ICsgICAgICAo Q2RiLT5DUEJzaXplICE9IHNpemVvZiAoUFhFX0NQQl9UUkFOU01JVCkpIHx8DQo+ICsgICAgICAo Q2RiLT5EQnNpemUgIT0gUFhFX0RCU0laRV9OT1RfVVNFRCkgfHwNCj4gKyAgICAgIChDZGItPkRC YWRkciAhPSBQWEVfREJBRERSX05PVF9VU0VEKSkNCj4gKyAgew0KPiArICAgIENkYi0+U3RhdEZs YWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2Rl ICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0gZWxz ZSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfQ09NUExF VEU7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfU1VDQ0VTUzsNCj4gKyAg fQ0KPiArDQo+ICsgIGlmIChOaWMtPlN0YXRlICE9IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRFX0lO SVRJQUxJWkVEKSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1B TkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX05PVF9JTklU SUFMSVpFRDsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoQ2RiLT5DUEJz aXplID09IFBYRV9DUEJTSVpFX05PVF9VU0VEKSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQ WEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhF X1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KPiArICAgIHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ICsg IGlmIChOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpVHJhbnNtaXQgIT0gTlVMTCkg ew0KPiArICAgIFN0YXR1cyA9IE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlUcmFu c21pdCAoQ2RiLCBOaWMpOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAg ICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAg ICB9DQo+ICsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBDZGItPlN0YXRDb2Rl ID0gVHJhbnNtaXQgKENkYiwgTmljLCBDZGItPkNQQmFkZHIsIENkYi0+T3BGbGFncyk7DQo+ICsN Cj4gKyAgaWYgKENkYi0+U3RhdENvZGUgIT0gUFhFX1NUQVRDT0RFX1NVQ0NFU1MpIHsNCj4gKyAg ICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgIH0N Cj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFVzZSBVU0IgRXRoZXJuZXQgUHJvdG9jb2wgQnVsayBv dXQgY29tbWFuZCB0byB0cmFuc21pdCBkYXRhLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICAgICBD ZGIgICAgICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAg QHBhcmFtW2luLCBvdXRdIE5pYyAgICAgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZh Y2UgY29udHJvbGxlciBkYXRhLg0KPiArICBAcGFyYW1baW5dICAgICAgQ3BiQWRkciAgQ29tbWFu ZCBQYXJhbWV0ZXIgQmxvY2sgQWRkcmVzcy4NCj4gKyAgQHBhcmFtW2luXSAgICAgIE9wRmxhZ3Mg IE9wZXJhdGlvbiBGbGFncy4NCj4gKw0KPiArKiovDQo+ICtVSU5UMTYNCj4gK1RyYW5zbWl0ICgN Cj4gKyAgSU4gICAgICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gT1VUICBOSUNfREFUQSAgKk5p YywNCj4gKyAgSU4gICAgICBVSU5UNjQgICAgQ3BiQWRkciwNCj4gKyAgSU4gICAgICBVSU5UMTYg ICAgT3BGbGFncw0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgIFN0YXR1czsN Cj4gKyAgUFhFX0NQQl9UUkFOU01JVCAgKkNwYjsNCj4gKyAgVUlOVDY0ICAgICAgICAgICAgQnVs a091dERhdGE7DQo+ICsgIFVJTlROICAgICAgICAgICAgIERhdGFMZW5ndGg7DQo+ICsgIFVJTlRO ICAgICAgICAgICAgIFRyYW5zbWl0TGVuZ3RoOw0KPiArICBVSU5UTiAgICAgICAgICAgICBNYXA7 DQo+ICsgIFVJTlQzMiAgICAgICAgICAgIENvdW50ZXI7DQo+ICsgIFVJTlQxNiAgICAgICAgICAg IFN0YXRDb2RlOw0KPiArDQo+ICsgIEJ1bGtPdXREYXRhID0gMDsNCj4gKyAgQ291bnRlciAgICAg PSAwOw0KPiArICBDcGIgICAgICAgICA9IChQWEVfQ1BCX1RSQU5TTUlUICopKFVJTlROKUNwYkFk ZHI7DQo+ICsNCj4gKyAgaWYgKE5pYy0+Q2FuVHJhbnNtaXQpIHsNCj4gKyAgICByZXR1cm4gUFhF X1NUQVRDT0RFX0JVU1k7DQo+ICsgIH0NCj4gKw0KPiArICBOaWMtPkNhblRyYW5zbWl0ID0gVFJV RTsNCj4gKw0KPiArICBpZiAoKE9wRmxhZ3MgJiBQWEVfT1BGTEFHU19UUkFOU01JVF9GUkFHTUVO VEVEKSAhPSAwKSB7DQo+ICsgICAgcmV0dXJuIFBYRV9TVEFUQ09ERV9JTlZBTElEX1BBUkFNRVRF UjsNCj4gKyAgfQ0KPiArDQo+ICsgIE1hcCA9IE1hcEl0ICgNCj4gKyAgICAgICAgICBOaWMsDQo+ ICsgICAgICAgICAgQ3BiLT5GcmFtZUFkZHIsDQo+ICsgICAgICAgICAgQ3BiLT5EYXRhTGVuICsg KFVJTlQzMilDcGItPk1lZGlhaGVhZGVyTGVuLA0KPiArICAgICAgICAgIFRPX0RFVklDRSwNCj4g KyAgICAgICAgICAoVUlOVDY0KShVSU5UTikmQnVsa091dERhdGENCj4gKyAgICAgICAgICApOw0K PiArDQo+ICsgIGlmIChNYXAgIT0gMCkgew0KPiArICAgIE5pYy0+Q2FuVHJhbnNtaXQgPSBGQUxT RTsNCj4gKyAgICByZXR1cm4gUFhFX1NUQVRDT0RFX0lOVkFMSURfUEFSQU1FVEVSOw0KPiArICB9 DQo+ICsNCj4gKyAgaWYgKE5pYy0+VHhCdWZmZXJDb3VudCA8IE1BWF9YTUlUX0JVRkZFUlMpIHsN Cj4gKyAgICBOaWMtPk1lZGlhSGVhZGVyW05pYy0+VHhCdWZmZXJDb3VudF0gPSBDcGItPkZyYW1l QWRkcjsNCj4gKyAgICBOaWMtPlR4QnVmZmVyQ291bnQrKzsNCj4gKyAgfQ0KPiArDQo+ICsgIERh dGFMZW5ndGggPSAoVUlOVE4pKENwYi0+RGF0YUxlbiArIChVSU5UMzIpQ3BiLT5NZWRpYWhlYWRl ckxlbik7DQo+ICsNCj4gKyAgd2hpbGUgKDEpIHsNCj4gKyAgICBpZiAoQ291bnRlciA+PSAzKSB7 DQo+ICsgICAgICBTdGF0Q29kZSA9IFBYRV9TVEFUQ09ERV9CVVNZOw0KPiArICAgICAgYnJlYWs7 DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgVHJhbnNtaXRMZW5ndGggPSBEYXRhTGVuZ3RoOw0KPiAr DQo+ICsgICAgU3RhdHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0aFRyYW5zbWl0IChDZGIsIE5pYy0+ VXNiRXRoLCAoVk9JRCAqKShVSU5UTilCdWxrT3V0RGF0YSwgJlRyYW5zbWl0TGVuZ3RoKTsNCj4g KyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBTdGF0Q29kZSA9ICBQWEVf U1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIH0NCj4gKw0KPiArICAgIGlmIChTdGF0 dXMgPT0gRUZJX0lOVkFMSURfUEFSQU1FVEVSKSB7DQo+ICsgICAgICBTdGF0Q29kZSA9IFBYRV9T VEFUQ09ERV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIH0NCj4g Kw0KPiArICAgIGlmIChTdGF0dXMgPT0gRUZJX0RFVklDRV9FUlJPUikgew0KPiArICAgICAgU3Rh dENvZGUgPSBQWEVfU1RBVENPREVfREVWSUNFX0ZBSUxVUkU7DQo+ICsgICAgICBicmVhazsNCj4g KyAgICB9DQo+ICsNCj4gKyAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAg TmljLT5UeEZyYW1lKys7DQo+ICsgICAgICBTdGF0Q29kZSA9IFBYRV9TVEFUQ09ERV9TVUNDRVNT Ow0KPiArICAgICAgYnJlYWs7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgQ291bnRlcisrOw0KPiAr ICB9DQo+ICsNCj4gKyAgVW5NYXBJdCAoDQo+ICsgICAgTmljLA0KPiArICAgIENwYi0+RnJhbWVB ZGRyLA0KPiArICAgIENwYi0+RGF0YUxlbiArIChVSU5UMzIpQ3BiLT5NZWRpYWhlYWRlckxlbiwN Cj4gKyAgICBUT19ERVZJQ0UsDQo+ICsgICAgQnVsa091dERhdGENCj4gKyAgICApOw0KPiArDQo+ ICsgIE5pYy0+Q2FuVHJhbnNtaXQgPSBGQUxTRTsNCj4gKw0KPiArICByZXR1cm4gU3RhdENvZGU7 DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBXaGVuIHRoZSBuZXR3b3JrIGFkYXB0ZXIgaGFzIHJl Y2VpdmVkIGEgZnJhbWUsIHRoaXMgY29tbWFuZCBpcyB1c2VkDQo+ICsgIHRvIGNvcHkgdGhlIGZy YW1lIGludG8gZHJpdmVyL2FwcGxpY2F0aW9uIHN0b3JhZ2UuDQo+ICsNCj4gKyAgQHBhcmFtW2lu XSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAg QHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRy b2xsZXIgZGF0YS4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtVbmRpUmVjZWl2ZSAoDQo+ICsg IElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4g K3sNCj4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiArDQo+ICsgIGlmICgoQ2RiLT5PcENvZGUg IT0gUFhFX09QQ09ERV9SRUNFSVZFKSB8fA0KPiArICAgICAgKENkYi0+U3RhdENvZGUgIT0gUFhF X1NUQVRDT0RFX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0RmxhZ3MgIT0gUFhF X1NUQVRGTEFHU19JTklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+SUZudW0gPj0gKGdQeGUt PklGY250IHwgZ1B4ZS0+SUZjbnRFeHQgPDwgOCkpIHx8DQo+ICsgICAgICAoQ2RiLT5DUEJzaXpl ICE9IHNpemVvZiAoUFhFX0NQQl9SRUNFSVZFKSkgfHwNCj4gKyAgICAgIChDZGItPkRCc2l6ZSAh PSBzaXplb2YgKFBYRV9EQl9SRUNFSVZFKSkgfHwNCj4gKyAgICAgIChDZGItPk9wRmxhZ3MgIT0g UFhFX09QRkxBR1NfTk9UX1VTRUQpKQ0KPiArICB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQ WEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhF X1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KPiArICAgIHJldHVybjsNCj4gKyAgfSBlbHNlIHsNCj4g KyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9DT01QTEVURTsNCj4g KyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0KPiArICB9DQo+ICsN Cj4gKyAgaWYgKE5pYy0+U3RhdGUgIT0gUFhFX1NUQVRGTEFHU19HRVRfU1RBVEVfSU5JVElBTEla RUQpIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlM RUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfTk9UX0lOSVRJQUxJWkVE Ow0KPiArICAgIHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChOaWMtPlVzYkV0aC0+VXNi RXRoVW5kaS5Vc2JFdGhVbmRpUmVjZWl2ZSAhPSBOVUxMKSB7DQo+ICsgICAgU3RhdHVzID0gTmlj LT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaVJlY2VpdmUgKENkYiwgTmljKTsNCj4gKyAg ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBDZGItPlN0YXRGbGFncyA9IFBY RV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgcmV0dXJu Ow0KPiArICB9DQo+ICsNCj4gKyAgQ2RiLT5TdGF0Q29kZSA9IFJlY2VpdmUgKENkYiwgTmljLCBD ZGItPkNQQmFkZHIsIENkYi0+REJhZGRyKTsNCj4gKw0KPiArICBpZiAoQ2RiLT5TdGF0Q29kZSAh PSBQWEVfU1RBVENPREVfU1VDQ0VTUykgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NU QVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgfQ0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAg VXNlIFVTQiBFdGhlcm5ldCBQcm90b2NvbCBCdWxrIGluIGNvbW1hbmQgdG8gcmVjZWl2ZSBkYXRh Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICAgICBDZGIgICAgICBBIHBvaW50ZXIgdG8gdGhlIGNv bW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luLCBvdXRdIE5pYyAgICAgIEEg cG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArICBA cGFyYW1baW5dICAgICAgQ3BiQWRkciAgQ29tbWFuZCBQYXJhbWV0ZXIgQmxvY2sgQWRkcmVzcy4N Cj4gKyAgQHBhcmFtW2luLCBvdXRdIERiQWRkciAgIERhdGEgQmxvY2sgQWRkcmVzcy4NCj4gKw0K PiArKiovDQo+ICtVSU5UMTYNCj4gK1JlY2VpdmUgKA0KPiArICBJTiBQWEVfQ0RCICAgICAgICpD ZGIsDQo+ICsgIElOIE9VVCBOSUNfREFUQSAgKk5pYywNCj4gKyAgSU4gVUlOVDY0ICAgICAgICBD cGJBZGRyLA0KPiArICBJTiBPVVQgVUlOVDY0ICAgIERiQWRkcg0KPiArICApDQo+ICt7DQo+ICsg IEVGSV9TVEFUVVMgICAgICAgU3RhdHVzOw0KPiArICBVSU5UTiAgICAgICAgICAgIEluZGV4Ow0K PiArICBQWEVfRlJBTUVfVFlQRSAgIEZyYW1lVHlwZTsNCj4gKyAgUFhFX0NQQl9SRUNFSVZFICAq Q3BiOw0KPiArICBQWEVfREJfUkVDRUlWRSAgICpEYjsNCj4gKyAgTklDX0RFVklDRSAgICAgICAq TmljRGV2aWNlOw0KPiArICBVSU5UOCAgICAgICAgICAgICpCdWxrSW5EYXRhOw0KPiArICBVSU5U TiAgICAgICAgICAgIERhdGFMZW5ndGg7DQo+ICsgIEV0aGVybmV0SGVhZGVyICAgKkhlYWRlcjsN Cj4gKyAgRUZJX1RQTCAgICAgICAgICBPcmlnaW5hbFRwbDsNCj4gKw0KPiArICBGcmFtZVR5cGUg ID0gUFhFX0ZSQU1FX1RZUEVfTk9ORTsNCj4gKyAgTmljRGV2aWNlICA9IFVORElfREVWX0ZST01f TklDIChOaWMpOw0KPiArICBCdWxrSW5EYXRhID0gTmljRGV2aWNlLT5SZWNlaXZlQnVmZmVyOw0K PiArICBEYXRhTGVuZ3RoID0gKFVJTlROKU5pYy0+TWF4U2VnbWVudFNpemU7DQo+ICsgIENwYiAg ICAgICAgPSAoUFhFX0NQQl9SRUNFSVZFICopKFVJTlROKUNwYkFkZHI7DQo+ICsgIERiICAgICAg ICAgPSAoUFhFX0RCX1JFQ0VJVkUgKikoVUlOVE4pRGJBZGRyOw0KPiArDQo+ICsgIGlmICghQnVs a0luRGF0YSkgew0KPiArICAgIHJldHVybiBQWEVfU1RBVENPREVfSU5WQUxJRF9QQVJBTUVURVI7 DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoKE5pYy0+UmF0ZUxpbWl0aW5nQ3JlZGl0Q291bnQgPT0g MCkgJiYgKE5pYy0+UmF0ZUxpbWl0aW5nRW5hYmxlID09IFRSVUUpKSB7DQo+ICsgICAgcmV0dXJu IFBYRV9TVEFUQ09ERV9OT19EQVRBOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gTmljLT5V c2JFdGgtPlVzYkV0aFJlY2VpdmUgKENkYiwgTmljLT5Vc2JFdGgsIChWT0lEICopQnVsa0luRGF0 YSwgJkRhdGFMZW5ndGgpOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAg TmljLT5SZWNlaXZlU3RhdHVzID0gMDsNCj4gKyAgICBpZiAoTmljLT5SYXRlTGltaXRpbmdFbmFi bGUgPT0gVFJVRSkgew0KPiArICAgICAgT3JpZ2luYWxUcGwgPSBnQlMtPlJhaXNlVFBMIChUUExf Tk9USUZZKTsNCj4gKyAgICAgIGlmIChOaWMtPlJhdGVMaW1pdGluZ0NyZWRpdENvdW50ICE9IDAp IHsNCj4gKyAgICAgICAgTmljLT5SYXRlTGltaXRpbmdDcmVkaXRDb3VudC0tOw0KPiArICAgICAg fQ0KPiArDQo+ICsgICAgICBnQlMtPlJlc3RvcmVUUEwgKE9yaWdpbmFsVHBsKTsNCj4gKyAgICB9 DQo+ICsNCj4gKyAgICByZXR1cm4gUFhFX1NUQVRDT0RFX05PX0RBVEE7DQo+ICsgIH0NCj4gKw0K PiArICBOaWMtPlJ4RnJhbWUrKzsNCj4gKw0KPiArICBpZiAoRGF0YUxlbmd0aCAhPSAwKSB7DQo+ ICsgICAgaWYgKERhdGFMZW5ndGggPiBDcGItPkJ1ZmZlckxlbikgew0KPiArICAgICAgRGF0YUxl bmd0aCA9IChVSU5UTilDcGItPkJ1ZmZlckxlbjsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBDb3B5 TWVtICgoVUlOVDggKikoVUlOVE4pQ3BiLT5CdWZmZXJBZGRyLCAoVUlOVDggKilCdWxrSW5EYXRh LCBEYXRhTGVuZ3RoKTsNCj4gKw0KPiArICAgIEhlYWRlciA9IChFdGhlcm5ldEhlYWRlciAqKUJ1 bGtJbkRhdGE7DQo+ICsNCj4gKyAgICBEYi0+RnJhbWVMZW4gICAgICAgPSAoVUlOVDMyKURhdGFM ZW5ndGg7DQo+ICsgICAgRGItPk1lZGlhSGVhZGVyTGVuID0gUFhFX01BQ19IRUFERVJfTEVOX0VU SEVSOw0KPiArDQo+ICsgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgUFhFX0hXQUREUl9MRU5f RVRIRVI7IEluZGV4KyspIHsNCj4gKyAgICAgIGlmIChIZWFkZXItPkRlc3RBZGRyW0luZGV4XSAh PSBOaWMtPkN1cnJlbnROb2RlQWRkcmVzc1tJbmRleF0pIHsNCj4gKyAgICAgICAgYnJlYWs7DQo+ ICsgICAgICB9DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgaWYgKEluZGV4ID49IFBYRV9IV0FERFJf TEVOX0VUSEVSKSB7DQo+ICsgICAgICBGcmFtZVR5cGUgPSBQWEVfRlJBTUVfVFlQRV9VTklDQVNU Ow0KPiArICAgIH0gZWxzZSB7DQo+ICsgICAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBQWEVf SFdBRERSX0xFTl9FVEhFUjsgSW5kZXgrKykgew0KPiArICAgICAgICBpZiAoSGVhZGVyLT5EZXN0 QWRkcltJbmRleF0gIT0gTmljLT5Ccm9hZGNhc3ROb2RlQWRkcmVzc1tJbmRleF0pIHsNCj4gKyAg ICAgICAgICBicmVhazsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgfQ0KPiArDQo+ICsgICAgICBp ZiAoSW5kZXggPj0gUFhFX0hXQUREUl9MRU5fRVRIRVIpIHsNCj4gKyAgICAgICAgRnJhbWVUeXBl ID0gUFhFX0ZSQU1FX1RZUEVfQlJPQURDQVNUOw0KPiArICAgICAgfSBlbHNlIHsNCj4gKyAgICAg ICAgaWYgKChIZWFkZXItPkRlc3RBZGRyWzBdICYgMSkgPT0gMSkgew0KPiArICAgICAgICAgIEZy YW1lVHlwZSA9IFBYRV9GUkFNRV9UWVBFX0ZJTFRFUkVEX01VTFRJQ0FTVDsNCj4gKyAgICAgICAg fSBlbHNlIHsNCj4gKyAgICAgICAgICBGcmFtZVR5cGUgPSBQWEVfRlJBTUVfVFlQRV9QUk9NSVND VU9VUzsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgfQ0KPiArICAgIH0NCj4gKw0KPiArICAgIERi LT5UeXBlICAgICA9IEZyYW1lVHlwZTsNCj4gKyAgICBEYi0+UHJvdG9jb2wgPSBIZWFkZXItPlBy b3RvY29sOw0KPiArDQo+ICsgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgUFhFX0hXQUREUl9M RU5fRVRIRVI7IEluZGV4KyspIHsNCj4gKyAgICAgIERiLT5TcmNBZGRyW0luZGV4XSAgPSBIZWFk ZXItPlNyY0FkZHJbSW5kZXhdOw0KPiArICAgICAgRGItPkRlc3RBZGRyW0luZGV4XSA9IEhlYWRl ci0+RGVzdEFkZHJbSW5kZXhdOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChGcmFt ZVR5cGUgPT0gUFhFX0ZSQU1FX1RZUEVfTk9ORSkgew0KPiArICAgIE5pYy0+UmVjZWl2ZVN0YXR1 cyA9IDA7DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgTmljLT5SZWNlaXZlU3RhdHVzID0gMTsNCj4g KyAgfQ0KPiArDQo+ICsgIHJldHVybiBQWEVfU1RBVENPREVfU1VDQ0VTUzsNCj4gK30NCj4gKw0K PiArLyoqDQo+ICsgIEZpbGwgb3V0IFBYRSBTVyBVTkRJIHN0cnVjdHVyZS4NCj4gKw0KPiArICBA cGFyYW1bb3V0XSAgUHhlU3cgICAgICBBIHBvaW50ZXIgdG8gdGhlIFBYRSBTVyBVTkRJIHN0cnVj dHVyZS4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtQeGVTdHJ1Y3RJbml0ICgNCj4gKyAgT1VU IFBYRV9TV19VTkRJICAqUHhlU3cNCj4gKyAgKQ0KPiArew0KPiArICBQeGVTdy0+U2lnbmF0dXJl ID0gUFhFX1JPTUlEX1NJR05BVFVSRTsNCj4gKyAgUHhlU3ctPkxlbiAgICAgICA9IChVSU5UOClz aXplb2YgKFBYRV9TV19VTkRJKTsNCj4gKyAgUHhlU3ctPkZ1ZGdlICAgICA9IDA7DQo+ICsgIFB4 ZVN3LT5JRmNudCAgICAgPSAwOw0KPiArICBQeGVTdy0+SUZjbnRFeHQgID0gMDsNCj4gKyAgUHhl U3ctPlJldiAgICAgICA9IFBYRV9ST01JRF9SRVY7DQo+ICsgIFB4ZVN3LT5NYWpvclZlciAgPSBQ WEVfUk9NSURfTUFKT1JWRVI7DQo+ICsgIFB4ZVN3LT5NaW5vclZlciAgPSBQWEVfUk9NSURfTUlO T1JWRVI7DQo+ICsgIFB4ZVN3LT5yZXNlcnZlZDEgPSAwOw0KPiArDQo+ICsgIFB4ZVN3LT5JbXBs ZW1lbnRhdGlvbiA9IFBYRV9ST01JRF9JTVBfU1dfVklSVF9BRERSIHwNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgUFhFX1JPTUlEX0lNUF9GUkFHX1NVUFBPUlRFRCB8DQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgIFBYRV9ST01JRF9JTVBfQ01EX0xJTktfU1VQUE9SVEVEIHwNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgUFhFX1JPTUlEX0lNUF9TVEFUSU9OX0FERFJfU0VU VEFCTEUgfA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICBQWEVfUk9NSURfSU1QX1BST01J U0NVT1VTX01VTFRJQ0FTVF9SWF9TVVBQT1JURUQgfA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICBQWEVfUk9NSURfSU1QX1BST01JU0NVT1VTX1JYX1NVUFBPUlRFRCB8DQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgIFBYRV9ST01JRF9JTVBfQlJPQURDQVNUX1JYX1NVUFBPUlRFRCB8 DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIFBYRV9ST01JRF9JTVBfRklMVEVSRURfTVVM VElDQVNUX1JYX1NVUFBPUlRFRDsNCj4gKw0KPiArICBQeGVTdy0+RW50cnlQb2ludCAgID0gKFVJ TlQ2NCkoVUlOVE4pVW5kaUFwaUVudHJ5Ow0KPiArICBQeGVTdy0+cmVzZXJ2ZWQyWzBdID0gMDsN Cj4gKyAgUHhlU3ctPnJlc2VydmVkMlsxXSA9IDA7DQo+ICsgIFB4ZVN3LT5yZXNlcnZlZDJbMl0g PSAwOw0KPiArICBQeGVTdy0+QnVzQ250ICAgICAgID0gMTsNCj4gKyAgUHhlU3ctPkJ1c1R5cGVb MF0gICA9IFBYRV9CVVNUWVBFX1VTQjsNCj4gKyAgUHhlU3ctPkZ1ZGdlICAgICAgICA9IFB4ZVN3 LT5GdWRnZSAtIENhbGN1bGF0ZVN1bTggKChWT0lEICopUHhlU3csIFB4ZVN3LT5MZW4pOw0KPiAr fQ0KPiArDQo+ICsvKioNCj4gKyAgVXBkYXRlIE5JQyBudW1iZXIuDQo+ICsNCj4gKyAgQHBhcmFt W2luXSAgICAgIE5pYyAgICAgICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNv bnRyb2xsZXIgZGF0YS4NCj4gKyAgQHBhcmFtW2luLCBvdXRdIFB4ZVN3ICAgICBBIHBvaW50ZXIg dG8gdGhlIFBYRSBTVyBVTkRJIHN0cnVjdHVyZS4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtV cGRhdGVOaWNOdW0gKA0KPiArICBJTiAgICAgIE5JQ19EQVRBICAgICAqTmljLA0KPiArICBJTiBP VVQgIFBYRV9TV19VTkRJICAqUHhlU3cNCj4gKyAgKQ0KPiArew0KPiArICBVSU5UMTYgIE5pY051 bTsNCj4gKw0KPiArICBOaWNOdW0gPSAoUHhlU3ctPklGY250IHwgUHhlU3ctPklGY250RXh0IDw8 IDgpOw0KPiArDQo+ICsgIGlmIChOaWMgPT0gTlVMTCkgew0KPiArICAgIGlmIChOaWNOdW0gPiAw KSB7DQo+ICsgICAgICBOaWNOdW0tLTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBQeGVTdy0+SUZj bnQgICAgPSAoVUlOVDgpKE5pY051bSAmIDB4RkYpOyAgICAgICAgICAvLyBHZXQgbG93ZXIgYnl0 ZQ0KPiArICAgIFB4ZVN3LT5JRmNudEV4dCA9IChVSU5UOCkoKE5pY051bSAmIDB4RkYwMCkgPj4g OCk7IC8vIEdldCB1cHBlciBieXRlDQo+ICsgICAgUHhlU3ctPkZ1ZGdlICAgID0gKFVJTlQ4KShQ eGVTdy0+RnVkZ2UgLSBDYWxjdWxhdGVTdW04ICgoVk9JRCAqKVB4ZVN3LCBQeGVTdy0+TGVuKSk7 DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgTmljTnVtKys7DQo+ICsNCj4gKyAg UHhlU3ctPklGY250ICAgID0gKFVJTlQ4KShOaWNOdW0gJiAweEZGKTsgICAgICAgICAgLy8gR2V0 IGxvd2VyIGJ5dGUNCj4gKyAgUHhlU3ctPklGY250RXh0ID0gKFVJTlQ4KSgoTmljTnVtICYgMHhG RjAwKSA+PiA4KTsgLy8gR2V0IHVwcGVyIGJ5dGUNCj4gKyAgUHhlU3ctPkZ1ZGdlICAgID0gKFVJ TlQ4KShQeGVTdy0+RnVkZ2UgLSBDYWxjdWxhdGVTdW04ICgoVk9JRCAqKVB4ZVN3LCBQeGVTdy0+ TGVuKSk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBVTkRJIEFQSSB0YWJsZSBlbnRyeS4NCj4g Kw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlw dG9yIGJsb2NrLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArVW5k aUFwaUVudHJ5ICgNCj4gKyAgSU4gIFVJTlQ2NCAgQ2RiDQo+ICsgICkNCj4gK3sNCj4gKyAgUFhF X0NEQiAgICpDZGJQdHI7DQo+ICsgIE5JQ19EQVRBICAqTmljOw0KPiArDQo+ICsgIGlmIChDZGIg PT0gMCkgew0KPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgIH0NCj4g Kw0KPiArICBDZGJQdHIgPSAoUFhFX0NEQiAqKShVSU5UTilDZGI7DQo+ICsgIE5pYyAgICA9ICYo Z0xhbkRldmljZUxpc3RbQ2RiUHRyLT5JRm51bV0tPk5pY0luZm8pOw0KPiArICBnVW5kaUFwaVRh YmxlW0NkYlB0ci0+T3BDb2RlXShDZGJQdHIsIE5pYyk7DQo+ICsgIHJldHVybiBFRklfU1VDQ0VT UzsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIE1hcCB2aXJ0dWFsIG1lbW9yeSBhZGRyZXNzIGZv ciBETUEuIFRoaXMgZmllbGQgY2FuIGJlIHNldCB0bw0KPiArICB6ZXJvIGlmIHRoZXJlIGlzIG5v IG1hcHBpbmcgc2VydmljZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBOaWMgICAgICAgICAgIEEg cG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArICBA cGFyYW1baW5dICBNZW1BZGRyICAgICAgIFZpcnR1YWwgYWRkcmVzcyB0byBiZSBtYXBwZWQuDQo+ ICsgIEBwYXJhbVtpbl0gIFNpemUgICAgICAgICAgU2l6ZSBvZiBtZW1vcnkgdG8gYmUgbWFwcGVk Lg0KPiArICBAcGFyYW1baW5dICBEaXJlY3Rpb24gICAgIERpcmVjdGlvbiBvZiBkYXRhIGZsb3cg Zm9yIHRoaXMgbWVtb3J5J3MgdXNhZ2U6DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y3B1LT5kZXZpY2UsIGRldmljZS0+Y3B1IG9yIGJvdGggd2F5cy4NCj4gKyAgQHBhcmFtW291dF0g TWFwcGVkQWRkciAgICBQb2ludGVyIHRvIHJldHVybiB0aGUgbWFwcGVkIGRldmljZSBhZGRyZXNz Lg0KPiArDQo+ICsqKi8NCj4gK1VJTlRODQo+ICtNYXBJdCAoDQo+ICsgIElOIE5JQ19EQVRBICAq TmljLA0KPiArICBJTiBVSU5UNjQgICAgTWVtQWRkciwNCj4gKyAgSU4gVUlOVDMyICAgIFNpemUs DQo+ICsgIElOIFVJTlQzMiAgICBEaXJlY3Rpb24sDQo+ICsgIE9VVCBVSU5UNjQgICBNYXBwZWRB ZGRyDQo+ICsgICkNCj4gK3sNCj4gKyAgVUlOVDY0ICAqUGh5QWRkcjsNCj4gKw0KPiArICBQaHlB ZGRyID0gKFVJTlQ2NCAqKShVSU5UTilNYXBwZWRBZGRyOw0KPiArDQo+ICsgIGlmIChOaWMtPlB4 ZVN0YXJ0Lk1hcF9NZW0gPT0gMCkgew0KPiArICAgICpQaHlBZGRyID0gTWVtQWRkcjsNCj4gKyAg fSBlbHNlIHsNCj4gKyAgICAoKHZvaWQgKCopKFVJTlQ2NCwgVUlOVDY0LCBVSU5UMzIsIFVJTlQz MiwgVUlOVDY0KSkoVUlOVE4pIE5pYy0+UHhlU3RhcnQuTWFwX01lbSkoDQo+ICsgIE5pYy0+UHhl U3RhcnQuVW5pcXVlX0lELA0KPiArICBNZW1BZGRyLA0KPiArICBTaXplLA0KPiArICBEaXJlY3Rp b24sDQo+ICsgIE1hcHBlZEFkZHINCj4gKyAgKTsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBQ WEVfU1RBVENPREVfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFVuLW1hcCBwcmV2 aW91c2x5IG1hcHBlZCB2aXJ0dWFsIG1lbW9yeSBhZGRyZXNzLiBUaGlzIGZpZWxkIGNhbiBiZSBz ZXQNCj4gKyAgdG8gemVybyBvbmx5IGlmIHRoZSBNYXBfTWVtKCkgc2VydmljZSBpcyBhbHNvIHNl dCB0byB6ZXJvLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgICAgICAgICAgQSBwb2ludGVy IHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsgIEBwYXJhbVtp bl0gIE1lbUFkZHIgICAgICAgVmlydHVhbCBhZGRyZXNzIHRvIGJlIG1hcHBlZC4NCj4gKyAgQHBh cmFtW2luXSAgU2l6ZSAgICAgICAgICBTaXplIG9mIG1lbW9yeSB0byBiZSBtYXBwZWQuDQo+ICsg IEBwYXJhbVtpbl0gIERpcmVjdGlvbiAgICAgRGlyZWN0aW9uIG9mIGRhdGEgZmxvdyBmb3IgdGhp cyBtZW1vcnkncyB1c2FnZToNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHUtPmRl dmljZSwgZGV2aWNlLT5jcHUgb3IgYm90aCB3YXlzLg0KPiArICBAcGFyYW1baW5dICBNYXBwZWRB ZGRyICAgIFBvaW50ZXIgdG8gcmV0dXJuIHRoZSBtYXBwZWQgZGV2aWNlIGFkZHJlc3MuDQo+ICsN Cj4gKyoqLw0KPiArVk9JRA0KPiArVW5NYXBJdCAoDQo+ICsgIElOIE5JQ19EQVRBICAqTmljLA0K PiArICBJTiBVSU5UNjQgICAgTWVtQWRkciwNCj4gKyAgSU4gVUlOVDMyICAgIFNpemUsDQo+ICsg IElOIFVJTlQzMiAgICBEaXJlY3Rpb24sDQo+ICsgIElOIFVJTlQ2NCAgICBNYXBwZWRBZGRyDQo+ ICsgICkNCj4gK3sNCj4gKyAgaWYgKE5pYy0+UHhlU3RhcnQuVW5NYXBfTWVtICE9IDApIHsNCj4g KyAgICAoKHZvaWQgKCopKFVJTlQ2NCwgVUlOVDY0LCBVSU5UMzIsIFVJTlQzMiwgVUlOVDY0KSko VUlOVE4pIE5pYy0+UHhlU3RhcnQuVW5NYXBfTWVtKSgNCj4gKyAgTmljLT5QeGVTdGFydC5Vbmlx dWVfSUQsDQo+ICsgIE1lbUFkZHIsDQo+ICsgIFNpemUsDQo+ICsgIERpcmVjdGlvbiwNCj4gKyAg TWFwcGVkQWRkcg0KPiArICApOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuOw0KPiArfQ0KPiBk aWZmIC0tZ2l0IGEvVXNiTmV0d29ya1BrZy9Vc2JSbmRpcy9Db21wb25lbnROYW1lLmMgYi9Vc2JO ZXR3b3JrUGtnL1VzYlJuZGlzL0NvbXBvbmVudE5hbWUuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAuLmI5YmExNzBjMTM1Yg0KPiAtLS0gL2Rldi9udWxsDQo+ ICsrKyBiL1VzYk5ldHdvcmtQa2cvVXNiUm5kaXMvQ29tcG9uZW50TmFtZS5jDQo+IEBAIC0wLDAg KzEsMTcyIEBADQo+ICsvKiogQGZpbGUNCj4gKyAgVGhpcyBmaWxlIGNvbnRhaW5zIGNvZGUgZm9y IFVTQiBSTkRJUyBEcml2ZXIgQ29tcG9uZW50DQo+ICsgIE5hbWUgZGVmaW5pdGlvbnMNCj4gKw0K PiArICBDb3B5cmlnaHQgKGMpIDIwMjMsIEFtZXJpY2FuIE1lZ2F0cmVuZHMgSW50ZXJuYXRpb25h bCBMTEMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiArICBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiArKiovDQo+ICsNCj4gKyNpbmNsdWRlICJVc2JS bmRpcy5oIg0KPiArDQo+ICtHTE9CQUxfUkVNT1ZFX0lGX1VOUkVGRVJFTkNFRCBFRklfVU5JQ09E RV9TVFJJTkdfVEFCTEUgIGdVc2JSbmRpc0RyaXZlck5hbWVUYWJsZVtdID0gew0KPiArICB7DQo+ ICsgICAgImVuZztlbiIsDQo+ICsgICAgTCJVU0IgUk5ESVMgRHJpdmVyIg0KPiArICB9LA0KPiAr ICB7DQo+ICsgICAgTlVMTCwNCj4gKyAgICBOVUxMDQo+ICsgIH0NCj4gK307DQo+ICsNCj4gK0VG SV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArVXNiUm5kaXNDb21wb25lbnROYW1lR2V0RHJpdmVyTmFt ZSAoDQo+ICsgIElOICBFRklfQ09NUE9ORU5UX05BTUVfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJ TiAgQ0hBUjggICAgICAgICAgICAgICAgICAgICAgICAqTGFuZ3VhZ2UsDQo+ICsgIE9VVCBDSEFS MTYgICAgICAgICAgICAgICAgICAgICAgICoqRHJpdmVyTmFtZQ0KPiArICApOw0KPiArDQo+ICtF RklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1VzYlJuZGlzQ29tcG9uZW50TmFtZUdldENvbnRyb2xs ZXJOYW1lICgNCj4gKyAgSU4gRUZJX0NPTVBPTkVOVF9OQU1FX1BST1RPQ09MICAqVGhpcywNCj4g KyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICBDb250cm9sbGVyLA0KPiArICBJTiBF RklfSEFORExFICAgICAgICAgICAgICAgICAgIENoaWxkSGFuZGxlICAgICAgICBPUFRJT05BTCwN Cj4gKyAgSU4gQ0hBUjggICAgICAgICAgICAgICAgICAgICAgICAqTGFuZ3VhZ2UsDQo+ICsgIE9V VCBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgKipDb250cm9sbGVyTmFtZQ0KPiArICApOw0K PiArDQo+ICtHTE9CQUxfUkVNT1ZFX0lGX1VOUkVGRVJFTkNFRCBFRklfQ09NUE9ORU5UX05BTUVf UFJPVE9DT0wgIGdVc2JSbmRpc0NvbXBvbmVudE5hbWUgPSB7DQo+ICsgIFVzYlJuZGlzQ29tcG9u ZW50TmFtZUdldERyaXZlck5hbWUsDQo+ICsgIFVzYlJuZGlzQ29tcG9uZW50TmFtZUdldENvbnRy b2xsZXJOYW1lLA0KPiArICAiZW5nIg0KPiArfTsNCj4gKw0KPiArR0xPQkFMX1JFTU9WRV9JRl9V TlJFRkVSRU5DRUQgRUZJX0NPTVBPTkVOVF9OQU1FMl9QUk9UT0NPTCAgZ1VzYlJuZGlzQ29tcG9u ZW50TmFtZTIgPSB7DQo+ICsgIChFRklfQ09NUE9ORU5UX05BTUUyX0dFVF9EUklWRVJfTkFNRSlV c2JSbmRpc0NvbXBvbmVudE5hbWVHZXREcml2ZXJOYW1lLA0KPiArICAoRUZJX0NPTVBPTkVOVF9O QU1FMl9HRVRfQ09OVFJPTExFUl9OQU1FKVVzYlJuZGlzQ29tcG9uZW50TmFtZUdldENvbnRyb2xs ZXJOYW1lLA0KPiArICAiZW4iDQo+ICt9Ow0KPiArDQo+ICsvKioNCj4gKyAgUmV0cmlldmVzIGEg VW5pY29kZSBzdHJpbmcgdGhhdCBpcyB0aGUgdXNlciByZWFkYWJsZSBuYW1lIG9mIHRoZSBkcml2 ZXIuDQo+ICsNCj4gKyAgVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIHVzZXIgcmVhZGFibGUg bmFtZSBvZiBhIGRyaXZlciBpbiB0aGUgZm9ybSBvZiBhDQo+ICsgIFVuaWNvZGUgc3RyaW5nLiBJ ZiB0aGUgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGhhcyBhIHVzZXIgcmVhZGFibGUgbmFtZSBp bg0KPiArICB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5IExhbmd1YWdlLCB0aGVuIGEgcG9pbnRl ciB0byB0aGUgZHJpdmVyIG5hbWUgaXMNCj4gKyAgcmV0dXJuZWQgaW4gRHJpdmVyTmFtZSwgYW5k IEVGSV9TVUNDRVNTIGlzIHJldHVybmVkLiBJZiB0aGUgZHJpdmVyIHNwZWNpZmllZA0KPiArICBi eSBUaGlzIGRvZXMgbm90IHN1cHBvcnQgdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFn ZSwNCj4gKyAgdGhlbiBFRklfVU5TVVBQT1JURUQgaXMgcmV0dXJuZWQuDQo+ICsNCj4gKyAgQHBh cmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRklfQ09NUE9ORU5U X05BTUUyX1BST1RPQ09MIG9yDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVG SV9DT01QT05FTlRfTkFNRV9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAgTGFu Z3VhZ2UgICAgICAgICAgQSBwb2ludGVyIHRvIGEgTnVsbC10ZXJtaW5hdGVkIEFTQ0lJIHN0cmlu Zw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSBpbmRpY2F0aW5nIHRo ZSBsYW5ndWFnZS4gVGhpcyBpcyB0aGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbGFuZ3VhZ2Ugb2YgdGhlIGRyaXZlciBuYW1lIHRoYXQgdGhlIGNhbGxlciBpcw0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0aW5nLCBhbmQgaXQgbXVzdCBtYXRj aCBvbmUgb2YgdGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdl cyBzcGVjaWZpZWQgaW4gU3VwcG9ydGVkTGFuZ3VhZ2VzLiBUaGUNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIGxhbmd1YWdlcyBzdXBwb3J0ZWQgYnkgYSBkcml2 ZXIgaXMgdXANCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGRyaXZl ciB3cml0ZXIuIExhbmd1YWdlIGlzIHNwZWNpZmllZA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbiBSRkMgNDY0NiBvciBJU08gNjM5LTIgbGFuZ3VhZ2UgY29kZSBmb3JtYXQu DQo+ICsgIEBwYXJhbVtvdXRdIERyaXZlck5hbWUgICAgICAgIEEgcG9pbnRlciB0byB0aGUgVW5p Y29kZSBzdHJpbmcgdG8gcmV0dXJuLg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBUaGlzIFVuaWNvZGUgc3RyaW5nIGlzIHRoZSBuYW1lIG9mIHRoZQ0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMgaW4gdGhlIGxhbmd1 YWdlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBieSBMYW5n dWFnZS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgVW5pY29k ZSBzdHJpbmcgZm9yIHRoZSBEcml2ZXIgc3BlY2lmaWVkIGJ5DQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFRoaXMgYW5kIHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkgTGFuZ3Vh Z2Ugd2FzDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmVkIGluIERy aXZlck5hbWUuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIExhbmd1YWdlIGlz IE5VTEwuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIERyaXZlck5hbWUgaXMg TlVMTC4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgVGhlIGRyaXZlciBzcGVj aWZpZWQgYnkgVGhpcyBkb2VzIG5vdCBzdXBwb3J0DQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkgTGFuZ3VhZ2UuDQo+ICsNCj4gKyoq Lw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtVc2JSbmRpc0NvbXBvbmVudE5hbWVHZXRE cml2ZXJOYW1lICgNCj4gKyAgSU4gIEVGSV9DT01QT05FTlRfTkFNRV9QUk9UT0NPTCAgKlRoaXMs DQo+ICsgIElOICBDSEFSOCAgICAgICAgICAgICAgICAgICAgICAgICpMYW5ndWFnZSwNCj4gKyAg T1VUIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgKipEcml2ZXJOYW1lDQo+ICsgICkNCj4g K3sNCj4gKyAgcmV0dXJuIExvb2t1cFVuaWNvZGVTdHJpbmcyICgNCj4gKyAgICAgICAgICAgTGFu Z3VhZ2UsDQo+ICsgICAgICAgICAgIFRoaXMtPlN1cHBvcnRlZExhbmd1YWdlcywNCj4gKyAgICAg ICAgICAgZ1VzYlJuZGlzRHJpdmVyTmFtZVRhYmxlLA0KPiArICAgICAgICAgICBEcml2ZXJOYW1l LA0KPiArICAgICAgICAgICAoQk9PTEVBTikoVGhpcyA9PSAmZ1VzYlJuZGlzQ29tcG9uZW50TmFt ZSkNCj4gKyAgICAgICAgICAgKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFJldHJpZXZlcyBh IFVuaWNvZGUgc3RyaW5nIHRoYXQgaXMgdGhlIHVzZXIgcmVhZGFibGUgbmFtZSBvZiB0aGUgY29u dHJvbGxlcg0KPiArICB0aGF0IGlzIGJlaW5nIG1hbmFnZWQgYnkgYSBkcml2ZXIuDQo+ICsNCj4g KyAgVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIHVzZXIgcmVhZGFibGUgbmFtZSBvZiB0aGUg Y29udHJvbGxlciBzcGVjaWZpZWQgYnkNCj4gKyAgQ29udHJvbGxlckhhbmRsZSBhbmQgQ2hpbGRI YW5kbGUgaW4gdGhlIGZvcm0gb2YgYSBVbmljb2RlIHN0cmluZy4gSWYgdGhlDQo+ICsgIGRyaXZl ciBzcGVjaWZpZWQgYnkgVGhpcyBoYXMgYSB1c2VyIHJlYWRhYmxlIG5hbWUgaW4gdGhlIGxhbmd1 YWdlIHNwZWNpZmllZCBieQ0KPiArICBMYW5ndWFnZSwgdGhlbiBhIHBvaW50ZXIgdG8gdGhlIGNv bnRyb2xsZXIgbmFtZSBpcyByZXR1cm5lZCBpbiBDb250cm9sbGVyTmFtZSwNCj4gKyAgYW5kIEVG SV9TVUNDRVNTIGlzIHJldHVybmVkLiAgSWYgdGhlIGRyaXZlciBzcGVjaWZpZWQgYnkgVGhpcyBp cyBub3QgY3VycmVudGx5DQo+ICsgIG1hbmFnaW5nIHRoZSBjb250cm9sbGVyIHNwZWNpZmllZCBi eSBDb250cm9sbGVySGFuZGxlIGFuZCBDaGlsZEhhbmRsZSwNCj4gKyAgdGhlbiBFRklfVU5TVVBQ T1JURUQgaXMgcmV0dXJuZWQuICBJZiB0aGUgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGRvZXMg bm90DQo+ICsgIHN1cHBvcnQgdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFnZSwgdGhl biBFRklfVU5TVVBQT1JURUQgaXMgcmV0dXJuZWQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhp cyAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRklfQ09NUE9ORU5UX05BTUUyX1BST1RP Q09MIG9yDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9DT01QT05FTlRf TkFNRV9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAgQ29udHJvbGxlciAgICAg ICAgVGhlIGhhbmRsZSBvZiBhIGNvbnRyb2xsZXIgdGhhdCB0aGUgZHJpdmVyDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBieSBUaGlzIGlzIG1hbmFnaW5nLiAg VGhpcyBoYW5kbGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVz IHRoZSBjb250cm9sbGVyIHdob3NlIG5hbWUgaXMgdG8gYmUNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuZWQuDQo+ICsgIEBwYXJhbVtpbl0gIENoaWxkSGFuZGxlICAg ICAgIFRoZSBoYW5kbGUgb2YgdGhlIGNoaWxkIGNvbnRyb2xsZXIgdG8gcmV0cmlldmUNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG5hbWUgb2YuICBUaGlzIGlzIGFuIG9w dGlvbmFsIHBhcmFtZXRlciB0aGF0DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG1heSBiZSBOVUxMLiAgSXQgd2lsbCBiZSBOVUxMIGZvciBkZXZpY2UNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZHJpdmVycy4gIEl0IHdpbGwgYWxzbyBiZSBOVUxMIGZvciBh IGJ1cyBkcml2ZXJzDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgd2lz aCB0byByZXRyaWV2ZSB0aGUgbmFtZSBvZiB0aGUgYnVzDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnRyb2xsZXIuICBJdCB3aWxsIG5vdCBiZSBOVUxMIGZvciBhIGJ1cw0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXIgdGhhdCB3aXNoZXMgdG8g cmV0cmlldmUgdGhlIG5hbWUgb2YgYQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjaGlsZCBjb250cm9sbGVyLg0KPiArICBAcGFyYW1baW5dICBMYW5ndWFnZSAgICAgICAgICBB IHBvaW50ZXIgdG8gYSBOdWxsLXRlcm1pbmF0ZWQgQVNDSUkgc3RyaW5nDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGFycmF5IGluZGljYXRpbmcgdGhlIGxhbmd1YWdlLiAgVGhp cyBpcyB0aGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2Ugb2Yg dGhlIGRyaXZlciBuYW1lIHRoYXQgdGhlIGNhbGxlciBpcw0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICByZXF1ZXN0aW5nLCBhbmQgaXQgbXVzdCBtYXRjaCBvbmUgb2YgdGhlDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlcyBzcGVjaWZpZWQgaW4g U3VwcG9ydGVkTGFuZ3VhZ2VzLiBUaGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbnVtYmVyIG9mIGxhbmd1YWdlcyBzdXBwb3J0ZWQgYnkgYSBkcml2ZXIgaXMgdXANCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGRyaXZlciB3cml0ZXIuIExhbmd1 YWdlIGlzIHNwZWNpZmllZCBpbg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS RkMgNDY0NiBvciBJU08gNjM5LTIgbGFuZ3VhZ2UgY29kZSBmb3JtYXQuDQo+ICsgIEBwYXJhbVtv dXRdIENvbnRyb2xsZXJOYW1lICAgIEEgcG9pbnRlciB0byB0aGUgVW5pY29kZSBzdHJpbmcgdG8g cmV0dXJuLg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIFVuaWNvZGUg c3RyaW5nIGlzIHRoZSBuYW1lIG9mIHRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb250cm9sbGVyIHNwZWNpZmllZCBieSBDb250cm9sbGVySGFuZGxlIGFuZA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGlsZEhhbmRsZSBpbiB0aGUgbGFuZ3VhZ2Ug c3BlY2lmaWVkIGJ5DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhbmd1YWdl IGZyb20gdGhlIHBvaW50IG9mIHZpZXcgb2YgdGhlIGRyaXZlcg0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgYnkgVGhpcy4NCj4gKw0KPiArICBAcmV0dmFsIEVG SV9TVUNDRVNTICAgICAgICAgICBUaGUgVW5pY29kZSBzdHJpbmcgZm9yIHRoZSB1c2VyIHJlYWRh YmxlIG5hbWUgaW4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGxhbmd1 YWdlIHNwZWNpZmllZCBieSBMYW5ndWFnZSBmb3IgdGhlDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRyaXZlciBzcGVjaWZpZWQgYnkgVGhpcyB3YXMgcmV0dXJuZWQgaW4NCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHJpdmVyTmFtZS4NCj4gKyAgQHJldHZh bCBFRklfSU5WQUxJRF9QQVJBTUVURVIgQ29udHJvbGxlckhhbmRsZSBpcyBub3QgYSB2YWxpZCBF RklfSEFORExFLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBDaGlsZEhhbmRs ZSBpcyBub3QgTlVMTCBhbmQgaXQgaXMgbm90IGEgdmFsaWQNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRUZJX0hBTkRMRS4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJB TUVURVIgTGFuZ3VhZ2UgaXMgTlVMTC4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVU RVIgQ29udHJvbGxlck5hbWUgaXMgTlVMTC4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQg ICAgICAgVGhlIGRyaXZlciBzcGVjaWZpZWQgYnkgVGhpcyBpcyBub3QgY3VycmVudGx5DQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbmFnaW5nIHRoZSBjb250cm9sbGVyIHNw ZWNpZmllZCBieQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVy SGFuZGxlIGFuZCBDaGlsZEhhbmRsZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAg ICAgVGhlIGRyaXZlciBzcGVjaWZpZWQgYnkgVGhpcyBkb2VzIG5vdCBzdXBwb3J0DQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkgTGFu Z3VhZ2UuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtVc2JSbmRp c0NvbXBvbmVudE5hbWVHZXRDb250cm9sbGVyTmFtZSAoDQo+ICsgIElOIEVGSV9DT01QT05FTlRf TkFNRV9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAg ICAgQ29udHJvbGxlciwNCj4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICBDaGls ZEhhbmRsZSAgICAgICAgT1BUSU9OQUwsDQo+ICsgIElOIENIQVI4ICAgICAgICAgICAgICAgICAg ICAgICAgKkxhbmd1YWdlLA0KPiArICBPVVQgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICoq Q29udHJvbGxlck5hbWUNCj4gKyAgKQ0KPiArew0KPiArICByZXR1cm4gRUZJX1VOU1VQUE9SVEVE Ow0KPiArfQ0KPiBkaWZmIC0tZ2l0IGEvVXNiTmV0d29ya1BrZy9Vc2JSbmRpcy9Vc2JSbmRpcy5j IGIvVXNiTmV0d29ya1BrZy9Vc2JSbmRpcy9Vc2JSbmRpcy5jDQo+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uOTI4MzA3NzFlNDA4DQo+IC0tLSAvZGV2L251bGwN Cj4gKysrIGIvVXNiTmV0d29ya1BrZy9Vc2JSbmRpcy9Vc2JSbmRpcy5jDQo+IEBAIC0wLDAgKzEs ODg2IEBADQo+ICsvKiogQGZpbGUNCj4gKyAgVGhpcyBmaWxlIGNvbnRhaW5zIGNvZGUgZm9yIFVT QiBSZW1vdGUgTmV0d29yayBEcml2ZXINCj4gKyAgSW50ZXJmYWNlIFNwZWMuIERyaXZlciBCaW5k aW5nDQo+ICsNCj4gKyAgQ29weXJpZ2h0IChjKSAyMDIzLCBBbWVyaWNhbiBNZWdhdHJlbmRzIElu dGVybmF0aW9uYWwgTExDLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gKyAgU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gKyoqLw0KPiArDQo+ICsjaW5j bHVkZSAiVXNiUm5kaXMuaCINCj4gKw0KPiArRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICBn VXNiUm5kaXNEcml2ZXJCaW5kaW5nID0gew0KPiArICBVc2JSbmRpc0RyaXZlclN1cHBvcnRlZCwN Cj4gKyAgVXNiUm5kaXNEcml2ZXJTdGFydCwNCj4gKyAgVXNiUm5kaXNEcml2ZXJTdG9wLA0KPiAr ICBVU0JfUk5ESVNfRFJJVkVSX1ZFUlNJT04sDQo+ICsgIE5VTEwsDQo+ICsgIE5VTEwNCj4gK307 DQo+ICsNCj4gKy8qKg0KPiArICBDaGVjayBpZiB0aGlzIGludGVyZmFjZSBpcyBVU0IgUm5kaXMg U3ViVHlwZQ0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFVzYklvICBBIHBvaW50ZXIgdG8gdGhlIEVG SV9VU0JfSU9fUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsNCj4gKyAgQHJldHZhbCBUUlVFICAgVVNC IFJuZGlzIFN1YlR5cGUuDQo+ICsgIEByZXR2YWwgRkFMU0UgIE5vdCBVU0IgUm5kaXMgU3ViVHlw ZS4NCj4gKw0KPiArKiovDQo+ICtCT09MRUFODQo+ICtJc1N1cHBvcnRlZERldmljZSAoDQo+ICsg IElOIEVGSV9VU0JfSU9fUFJPVE9DT0wgICpVc2JJbw0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9T VEFUVVMgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgRUZJX1VTQl9JTlRFUkZBQ0Vf REVTQ1JJUFRPUiAgSW50ZXJmYWNlRGVzY3JpcHRvcjsNCj4gKw0KPiArICBTdGF0dXMgPSBVc2JJ by0+VXNiR2V0SW50ZXJmYWNlRGVzY3JpcHRvciAoVXNiSW8sICZJbnRlcmZhY2VEZXNjcmlwdG9y KTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBGQUxTRTsN Cj4gKyAgfQ0KPiArDQo+ICsgIC8vIENoZWNrIHNwZWNpZmljIGRldmljZS9STkRJUyBhbmQgQ0RD LURBVEENCj4gKyAgaWYgKCgoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VDbGFzcyA9PSAw eDIpICYmDQo+ICsgICAgICAgKEludGVyZmFjZURlc2NyaXB0b3IuSW50ZXJmYWNlU3ViQ2xhc3Mg PT0gMHgyKSAmJg0KPiArICAgICAgIChJbnRlcmZhY2VEZXNjcmlwdG9yLkludGVyZmFjZVByb3Rv Y29sID09IDB4RkYpKSB8fCBcDQo+ICsgICAgICAoKEludGVyZmFjZURlc2NyaXB0b3IuSW50ZXJm YWNlQ2xhc3MgPT0gMHhFRikgJiYNCj4gKyAgICAgICAoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRl cmZhY2VTdWJDbGFzcyA9PSAweDQpICYmDQo+ICsgICAgICAgKEludGVyZmFjZURlc2NyaXB0b3Iu SW50ZXJmYWNlUHJvdG9jb2wgPT0gMHgxKSkgfHwgXA0KPiArICAgICAgKChJbnRlcmZhY2VEZXNj cmlwdG9yLkludGVyZmFjZUNsYXNzID09IDB4QSkgJiYNCj4gKyAgICAgICAoSW50ZXJmYWNlRGVz Y3JpcHRvci5JbnRlcmZhY2VTdWJDbGFzcyA9PSAweDApICYmDQo+ICsgICAgICAgKEludGVyZmFj ZURlc2NyaXB0b3IuSW50ZXJmYWNlUHJvdG9jb2wgPT0gMHgwMCkpDQo+ICsgICAgICApDQo+ICsg IHsNCj4gKyAgICByZXR1cm4gVFJVRTsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBGQUxTRTsN Cj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIENoZWNrIGlmIHRoaXMgaW50ZXJmYWNlIGlzIFVTQiBS bmRpcyBTdWJUeXBlIGJ1dCBub3QgQ0RDIERhdGEgaW50ZXJmYWNlDQo+ICsNCj4gKyAgQHBhcmFt W2luXSAgVXNiSW8gIEEgcG9pbnRlciB0byB0aGUgRUZJX1VTQl9JT19QUk9UT0NPTCBpbnN0YW5j ZS4NCj4gKw0KPiArICBAcmV0dmFsIFRSVUUgICBVU0IgUm5kaXMgU3ViVHlwZS4NCj4gKyAgQHJl dHZhbCBGQUxTRSAgTm90IFVTQiBSbmRpcyBTdWJUeXBlLg0KPiArKiovDQo+ICtCT09MRUFODQo+ ICtJc1JuZGlzSW50ZXJmYWNlICgNCj4gKyAgSU4gRUZJX1VTQl9JT19QUk9UT0NPTCAgKlVzYklv DQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgU3RhdHVz Ow0KPiArICBFRklfVVNCX0lOVEVSRkFDRV9ERVNDUklQVE9SICBJbnRlcmZhY2VEZXNjcmlwdG9y Ow0KPiArDQo+ICsgIFN0YXR1cyA9IFVzYklvLT5Vc2JHZXRJbnRlcmZhY2VEZXNjcmlwdG9yIChV c2JJbywgJkludGVyZmFjZURlc2NyaXB0b3IpOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiArICB9DQo+ICsNCj4gKyAgLy8gQ2hlY2sgZm9y IHNwZWNpZmljIGRldmljZS9STkRJUyBhbmQgQ0RDLURBVEENCj4gKyAgaWYgKCgoSW50ZXJmYWNl RGVzY3JpcHRvci5JbnRlcmZhY2VDbGFzcyA9PSAweDIpICYmDQo+ICsgICAgICAgKEludGVyZmFj ZURlc2NyaXB0b3IuSW50ZXJmYWNlU3ViQ2xhc3MgPT0gMHgyKSAmJg0KPiArICAgICAgIChJbnRl cmZhY2VEZXNjcmlwdG9yLkludGVyZmFjZVByb3RvY29sID09IDB4RkYpKSB8fCBcDQo+ICsgICAg ICAoKEludGVyZmFjZURlc2NyaXB0b3IuSW50ZXJmYWNlQ2xhc3MgPT0gMHhFRikgJiYNCj4gKyAg ICAgICAoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VTdWJDbGFzcyA9PSAweDQpICYmDQo+ ICsgICAgICAgKEludGVyZmFjZURlc2NyaXB0b3IuSW50ZXJmYWNlUHJvdG9jb2wgPT0gMHgxKSkN Cj4gKyAgICAgICkNCj4gKyAgew0KPiArICAgIHJldHVybiBUUlVFOw0KPiArICB9DQo+ICsNCj4g KyAgcmV0dXJuIEZBTFNFOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgQ2hlY2sgaWYgdGhlIFVT QiBSTkRJUyBhbmQgVVNCIENEQyBEYXRhIGludGVyZmFjZXMgYXJlIGZyb20gdGhlIHNhbWUgZGV2 aWNlLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFVzYlJuZGlzRGF0YVBhdGggIEEgcG9pbnRlciB0 byB0aGUgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5d ICBVc2JDZGNEYXRhUGF0aCAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9ERVZJQ0VfUEFUSF9QUk9U T0NPTCBpbnN0YW5jZS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBJ cyB0aGUgc2FtZSBkZXZpY2UuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIElz IG5vdCB0aGUgc2FtZSBkZXZpY2UuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArSXNT YW1lRGV2aWNlICgNCj4gKyAgSU4gIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgKlVzYlJuZGlz RGF0YVBhdGgsDQo+ICsgIElOICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICpVc2JDZGNEYXRh UGF0aA0KPiArICApDQo+ICt7DQo+ICsgIERFQlVHICgoREVCVUdfVkVSQk9TRSwgIklzU2FtZURl dmljZSBFbnRyeSBcbiIpKTsNCj4gKyAgd2hpbGUgKDEpIHsNCj4gKyAgICBpZiAoSXNEZXZpY2VQ YXRoRW5kIChOZXh0RGV2aWNlUGF0aE5vZGUgKFVzYlJuZGlzRGF0YVBhdGgpKSkgew0KPiArICAg ICAgaWYgKCgoVVNCX0RFVklDRV9QQVRIICopVXNiUm5kaXNEYXRhUGF0aCktPlBhcmVudFBvcnRO dW1iZXIgPT0NCj4gKyAgICAgICAgICAoKFVTQl9ERVZJQ0VfUEFUSCAqKVVzYkNkY0RhdGFQYXRo KS0+UGFyZW50UG9ydE51bWJlcikNCj4gKyAgICAgIHsNCj4gKyAgICAgICAgcmV0dXJuIEVGSV9T VUNDRVNTOw0KPiArICAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgcmV0dXJuIEVGSV9VTlNVUFBP UlRFRDsNCj4gKyAgICAgIH0NCj4gKyAgICB9IGVsc2Ugew0KPiArICAgICAgaWYgKENvbXBhcmVN ZW0gKFVzYkNkY0RhdGFQYXRoLCBVc2JSbmRpc0RhdGFQYXRoLCBzaXplb2YgKEVGSV9ERVZJQ0Vf UEFUSF9QUk9UT0NPTCkpICE9IDApIHsNCj4gKyAgICAgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRF RDsNCj4gKyAgICAgIH0NCj4gKw0KPiArICAgICAgVXNiUm5kaXNEYXRhUGF0aCA9IE5leHREZXZp Y2VQYXRoTm9kZSAoVXNiUm5kaXNEYXRhUGF0aCk7DQo+ICsgICAgICBVc2JDZGNEYXRhUGF0aCAg ID0gTmV4dERldmljZVBhdGhOb2RlIChVc2JDZGNEYXRhUGF0aCk7DQo+ICsgICAgfQ0KPiArICB9 DQo+ICsNCj4gKyAgREVCVUcgKChERUJVR19WRVJCT1NFLCAiSXNTYW1lRGV2aWNlIEV4aXQgXG4i KSk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBDaGVjayBpZiB0aGUgVVNCIENEQyBEYXRhKFVz YklvKSBpbnN0YWxsZWQgYW5kIHJldHVybiBVU0IgQ0RDIERhdGEgSGFuZGxlLg0KPiArDQo+ICsg IEBwYXJhbVtpbl0gIFVzYklvICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9VU0JfSU9fUFJPVE9DT0wg aW5zdGFuY2UuDQo+ICsNCj4gKyAgQHJldHZhbCBUUlVFICAgICAgICAgICAgICBVU0IgQ0RDIERh dGEoVXNiSW8pIGluc3RhbGxlZC4NCj4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgICAgICBVU0Ig Q0RDIERhdGEoVXNiSW8pIGRpZCBub3QgaW5zdGFsbGVkLg0KPiArDQo+ICsqKi8NCj4gK0JPT0xF QU4NCj4gK0lzVXNiQ2RjRGF0YSAoDQo+ICsgIElOIEVGSV9VU0JfSU9fUFJPVE9DT0wgICpVc2JJ bw0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgIFN0YXR1 czsNCj4gKyAgRUZJX1VTQl9JTlRFUkZBQ0VfREVTQ1JJUFRPUiAgSW50ZXJmYWNlRGVzY3JpcHRv cjsNCj4gKw0KPiArICBTdGF0dXMgPSBVc2JJby0+VXNiR2V0SW50ZXJmYWNlRGVzY3JpcHRvciAo VXNiSW8sICZJbnRlcmZhY2VEZXNjcmlwdG9yKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPiArICAgIHJldHVybiBGQUxTRTsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vIENoZWNrIGZv ciBDREMtREFUQQ0KPiArICBpZiAoKEludGVyZmFjZURlc2NyaXB0b3IuSW50ZXJmYWNlQ2xhc3Mg PT0gMHhBKSAmJg0KPiArICAgICAgKEludGVyZmFjZURlc2NyaXB0b3IuSW50ZXJmYWNlU3ViQ2xh c3MgPT0gMHgwKSAmJg0KPiArICAgICAgKEludGVyZmFjZURlc2NyaXB0b3IuSW50ZXJmYWNlUHJv dG9jb2wgPT0gMHgwKSkNCj4gKyAgew0KPiArICAgIHJldHVybiBUUlVFOw0KPiArICB9DQo+ICsN Cj4gKyAgcmV0dXJuIEZBTFNFOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgQ2hlY2sgaWYgdGhl IFVTQiBSbmRpcyhVc2JJbykgaW5zdGFsbGVkDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVXNiSW8g ICAgICAgIEEgcG9pbnRlciB0byB0aGUgRUZJX1VTQl9JT19QUk9UT0NPTCBpbnN0YW5jZS4NCj4g Kw0KPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgICAgIFVTQiBSbmRpcyhVc2JJbykgaW5zdGFs bGVkLg0KPiArICBAcmV0dmFsIEZBTFNFICAgICAgICAgICAgIFVTQiBSbmRpcyhVc2JJbykgZGlk IG5vdCBpbnN0YWxsZWQuDQo+ICsNCj4gKyoqLw0KPiArQk9PTEVBTg0KPiArSXNVc2JSbmRpcyAo DQo+ICsgIElOIEVGSV9VU0JfSU9fUFJPVE9DT0wgICpVc2JJbw0KPiArICApDQo+ICt7DQo+ICsg IEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgRUZJX1VTQl9JTlRF UkZBQ0VfREVTQ1JJUFRPUiAgSW50ZXJmYWNlRGVzY3JpcHRvcjsNCj4gKw0KPiArICBTdGF0dXMg PSBVc2JJby0+VXNiR2V0SW50ZXJmYWNlRGVzY3JpcHRvciAoVXNiSW8sICZJbnRlcmZhY2VEZXNj cmlwdG9yKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBG QUxTRTsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vIENoZWNrIGZvciBSbmRpcw0KPiArICBpZiAoKElu dGVyZmFjZURlc2NyaXB0b3IuSW50ZXJmYWNlQ2xhc3MgPT0gMHgyKSAmJg0KPiArICAgICAgKElu dGVyZmFjZURlc2NyaXB0b3IuSW50ZXJmYWNlU3ViQ2xhc3MgPT0gMHgyKSAmJg0KPiArICAgICAg KEludGVyZmFjZURlc2NyaXB0b3IuSW50ZXJmYWNlUHJvdG9jb2wgPT0gMHhGRikpDQo+ICsgIHsN Cj4gKyAgICByZXR1cm4gVFJVRTsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBGQUxTRTsNCj4g K30NCj4gKw0KPiArLyoqDQo+ICsgIENvbnRyb2wgY29tZXMgaGVyZSB3aGVuIGEgQ0RDIGRldmlj ZSBpcyBmb3VuZC5DaGVjayBpZiBhIFJORElTIGludGVyZmFjZSBpcyBhbHJlYWR5IGZvdW5kIGZv ciB0aGlzIGRldmljZSBvciBub3QuDQo+ICsgIEZvciBvbmUgZGV2aWNlIHR3byBVU0JJTyB3aWxs IGJlIGluc3RhbGxlZCBlYWNoIGZvciBDREMgYW5kIFJORElTIGludGVyZmFjZS4NCj4gKw0KPiAr ICBAcGFyYW1baW5dICBVc2JFdGhQYXRoICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9ERVZJ Q0VfUEFUSF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW291dF0gVXNiUm5kaXNEZXZp Y2UgICAgQSBwb2ludGVyIHRvIHRoZSBVU0JfUk5ESVNfREVWSUNFIERhdGEuDQo+ICsNCj4gKyAg QHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICBUaGUgVVNCX1JORElTX0RFVklDRSBtYXRj aGluZyB0aGlzIENEQyBEYXRhIGlzIGZvdW5kLg0KPiArICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQg ICAgICAgICAgIFRoZSBVU0JfUk5ESVNfREVWSUNFIG1hdGNoaW5nIHRoaXMgQ0RDIERhdGEgaXMg bm90IGZvdW5kLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK1VwZGF0ZVJuZGlzRGV2 aWNlICgNCj4gKyAgSU4gIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgKlVzYkNkY0RhdGFQYXRo LA0KPiArICBPVVQgVVNCX1JORElTX0RFVklDRSAgICAgICAgICAqKlVzYlJuZGlzRGV2aWNlDQo+ ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsgIFVJTlROICAgICAg ICAgICAgICAgICAgICAgICAgSGFuZGxlQ291bnQ7DQo+ICsgIEVGSV9IQU5ETEUgICAgICAgICAg ICAgICAgICAgKkhhbmRsZUJ1ZmZlcjsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09M ICAqVXNiRXRoRGV2aWNlOw0KPiArICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICAgICpVc2JS bmRpc0RhdGFQYXRoOw0KPiArICBFRklfVVNCX0lPX1BST1RPQ09MICAgICAgICAgICpVc2JJbzsN Cj4gKyAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICBJc1JuZGlzSW50ZXJmYWNlRmxhZzsN Cj4gKw0KPiArICBJc1JuZGlzSW50ZXJmYWNlRmxhZyA9IEZBTFNFOw0KPiArDQo+ICsgIFN0YXR1 cyA9IGdCUy0+TG9jYXRlSGFuZGxlQnVmZmVyICgNCj4gKyAgICAgICAgICAgICAgICAgIEJ5UHJv dG9jb2wsDQo+ICsgICAgICAgICAgICAgICAgICAmZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlkLA0K PiArICAgICAgICAgICAgICAgICAgTlVMTCwNCj4gKyAgICAgICAgICAgICAgICAgICZIYW5kbGVD b3VudCwNCj4gKyAgICAgICAgICAgICAgICAgICZIYW5kbGVCdWZmZXINCj4gKyAgICAgICAgICAg ICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4g U3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgSGFuZGxl Q291bnQ7IEluZGV4KyspIHsNCj4gKyAgICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sICgN Cj4gKyAgICAgICAgICAgICAgICAgICAgSGFuZGxlQnVmZmVyW0luZGV4XSwNCj4gKyAgICAgICAg ICAgICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAg ICAgICAgKFZPSUQgKiopJlVzYkV0aERldmljZQ0KPiArICAgICAgICAgICAgICAgICAgICApOw0K PiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIGNvbnRpbnVlOw0KPiAr ICAgIH0NCj4gKw0KPiArICAgIFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9jb2wgKA0KPiArICAg ICAgICAgICAgICAgICAgICBIYW5kbGVCdWZmZXJbSW5kZXhdLA0KPiArICAgICAgICAgICAgICAg ICAgICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgICAoVk9J RCAqKikmVXNiSW8NCj4gKyAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBjb250aW51ZTsNCj4gKyAgICB9DQo+ICsNCj4gKyAg ICBJc1JuZGlzSW50ZXJmYWNlRmxhZyA9IElzUm5kaXNJbnRlcmZhY2UgKFVzYklvKTsNCj4gKyAg ICBpZiAoSXNSbmRpc0ludGVyZmFjZUZsYWcgPT0gRkFMU0UpIHsNCj4gKyAgICAgIGNvbnRpbnVl Ow0KPiArICAgIH0NCj4gKw0KPiArICAgIFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9jb2wgKA0K PiArICAgICAgICAgICAgICAgICAgICBIYW5kbGVCdWZmZXJbSW5kZXhdLA0KPiArICAgICAgICAg ICAgICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAg ICAgICAgIChWT0lEICoqKSZVc2JSbmRpc0RhdGFQYXRoDQo+ICsgICAgICAgICAgICAgICAgICAg ICk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgY29udGludWU7 DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgU3RhdHVzID0gSXNTYW1lRGV2aWNlIChVc2JSbmRpc0Rh dGFQYXRoLCBVc2JDZGNEYXRhUGF0aCk7DQo+ICsNCj4gKyAgICBERUJVRyAoKERFQlVHX1ZFUkJP U0UsICJSbmRpcyBJc1NhbWVEZXZpY2UgJXJcbiIsIFN0YXR1cykpOw0KPiArDQo+ICsgICAgaWYg KCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgICpVc2JSbmRpc0RldmljZSA9IFVTQl9S TkRJU19ERVZJQ0VfRlJPTV9USElTIChVc2JFdGhEZXZpY2UpOw0KPiArICAgICAgRnJlZVBvb2wg KEhhbmRsZUJ1ZmZlcik7DQo+ICsgICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICsgICAgfQ0K PiArICB9ICAgLy8gRW5kIG9mIEZvciBsb29wDQo+ICsNCj4gKyAgRnJlZVBvb2wgKEhhbmRsZUJ1 ZmZlcik7DQo+ICsgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPiArfQ0KPiArDQo+ICsvKioNCj4g Kw0KPiArICBGb3IgdGhlIGdpdmVuIFJuZGlzIERldmljZSwgZmluZCBhIG1hdGNoaW5nIENEQyBk ZXZpY2UgYWxyZWFkeSBleGlzdHMgb3Igbm90LiBJZiBmb3VuZCB1cGRhdGUgdGhlIGhhbmRsZQ0K PiArICBhbmQgVXNiSU8gcHJvdG9jb2wuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVXNiUm5kaXNE ZXZpY2UgICAgICAgIEEgcG9pbnRlciB0byB0aGUgVVNCX1JORElTX0RFVklDRSBkYXRhLg0KPiAr DQo+ICsqKi8NCj4gK1ZPSUQNCj4gK0ZpbmRNYXRjaGluZ0NkY0RhdGEgKA0KPiArICBJTiBVU0Jf Uk5ESVNfREVWSUNFICAqVXNiUm5kaXNEZXZpY2UNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RB VFVTICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAg ICBJbmRleDsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBIYW5kbGVDb3VudDsNCj4g KyAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAqSGFuZGxlQnVmZmVyOw0KPiArICBFRklfVVNC X0lPX1BST1RPQ09MICAgICAgICpVc2JJbzsNCj4gKyAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09M ICAqVXNiUm5kaXNEYXRhUGF0aDsNCj4gKyAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAqVXNi Q2RjRGF0YVBhdGg7DQo+ICsNCj4gKyAgLy8gRmluZCB0aGUgcGFyZW50IFJORElTIGFuZCB1cGRh dGUgdGhlIFVzYklvIGZvciB0aGUgQ0RDIGRldmljZQ0KPiArICBTdGF0dXMgPSBnQlMtPkhhbmRs ZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5Vc2JSbmRp c0hhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3Vp ZCwNCj4gKyAgICAgICAgICAgICAgICAgIChWT0lEICoqKSZVc2JSbmRpc0RhdGFQYXRoDQo+ICsg ICAgICAgICAgICAgICAgICApOw0KPiArDQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsN Cj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBnQlMtPkxvY2F0ZUhh bmRsZUJ1ZmZlciAoDQo+ICsgICAgICAgICAgICAgICAgICBCeVByb3RvY29sLA0KPiArICAgICAg ICAgICAgICAgICAgJmdFZmlVc2JJb1Byb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAg IE5VTEwsDQo+ICsgICAgICAgICAgICAgICAgICAmSGFuZGxlQ291bnQsDQo+ICsgICAgICAgICAg ICAgICAgICAmSGFuZGxlQnVmZmVyDQo+ICsgICAgICAgICAgICAgICAgICApOw0KPiArICBpZiAo RUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAg Zm9yIChJbmRleCA9IDA7IEluZGV4IDwgSGFuZGxlQ291bnQ7IEluZGV4KyspIHsNCj4gKyAgICBT dGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgICAgICAgICAgSGFu ZGxlQnVmZmVyW0luZGV4XSwNCj4gKyAgICAgICAgICAgICAgICAgICAgJmdFZmlVc2JJb1Byb3Rv Y29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgKFZPSUQgKiopJlVzYklvDQo+ICsgICAg ICAgICAgICAgICAgICAgICk7DQo+ICsgICAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4g Kw0KPiArICAgIGlmIChJc1VzYkNkY0RhdGEgKFVzYklvKSkgew0KPiArICAgICAgREVCVUcgKChE RUJVR19WRVJCT1NFLCAiUm5kaXMgRmluZE1hdGNoaW5nQ2RjRGF0YSBDRENEYXRhIGludGVyZmFj ZSBmb3VuZFxuIikpOw0KPiArDQo+ICsgICAgICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29s ICgNCj4gKyAgICAgICAgICAgICAgICAgICAgICBIYW5kbGVCdWZmZXJbSW5kZXhdLA0KPiArICAg ICAgICAgICAgICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAoVk9JRCAqKikmVXNiQ2RjRGF0YVBhdGgNCj4gKyAgICAgICAgICAg ICAgICAgICAgICApOw0KPiArICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAg ICAgICBERUJVRyAoKERFQlVHX1ZFUkJPU0UsICJSbmRpcyBDRENEYXRhIERldmljZVBhdGggbm90 IGZvdW5kXG4iKSk7DQo+ICsgICAgICAgIEZyZWVQb29sIChIYW5kbGVCdWZmZXIpOw0KPiArICAg ICAgICByZXR1cm47DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIFN0YXR1cyA9IElzU2FtZURl dmljZSAoVXNiUm5kaXNEYXRhUGF0aCwgVXNiQ2RjRGF0YVBhdGgpOw0KPiArICAgICAgREVCVUcg KChERUJVR19WRVJCT1NFLCAiUm5kaXMgSXNTYW1lRGV2aWNlICVyXG4iLCBTdGF0dXMpKTsNCj4g KyAgICAgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICAgIFVzYlJuZGlzRGV2 aWNlLT5Vc2JDZGNEYXRhSGFuZGxlID0gSGFuZGxlQnVmZmVyW0luZGV4XTsNCj4gKyAgICAgICAg VXNiUm5kaXNEZXZpY2UtPlVzYklvQ2RjRGF0YSAgICAgPSBVc2JJbzsNCj4gKyAgICAgICAgR2V0 RW5kcG9pbnQgKFVzYlJuZGlzRGV2aWNlLT5Vc2JJb0NkY0RhdGEsIFVzYlJuZGlzRGV2aWNlKTsN Cj4gKyAgICAgICAgRnJlZVBvb2wgKEhhbmRsZUJ1ZmZlcik7DQo+ICsgICAgICAgIHJldHVybjsN Cj4gKyAgICAgIH0NCj4gKyAgICB9DQo+ICsgIH0gICAvLyBFbmQgb2YgRm9yIGxvb3ANCj4gKw0K PiArICBGcmVlUG9vbCAoSGFuZGxlQnVmZmVyKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsNCj4g KyAgRm9yIHRoZSBnaXZlbiBVc2JJbyBDZGNEYXRhLCBmaW5kIGEgbWF0Y2hpbmcgUk5ESVMgZGV2 aWNlIGFscmVhZHkgZXhpc3RzIG9yIG5vdC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGNIYW5k bGUgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRklfSEFORExFIGZvciBVU0IgQ0RDIERhdGEuDQo+ ICsgIEBwYXJhbVtvdXRdIENkY1VzYklvICAgICAgICBBIHBvaW50ZXIgZm9yIHJldHJpZXZlIHRo ZSBFRklfVVNCX0lPX1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1bb3V0XSBSbmRpc0hh bmRsZSAgICAgQSBwb2ludGVyIGZvciByZXRyaWV2ZSB0aGUgaGFuZGxlIG9mIFJORElTIGRldmlj ZS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgIFRoZSBVU0JfUk5E SVNfREVWSUNFIG1hdGNoaW5nIHRoaXMgQ0RDIERhdGEgaXMgZm91bmQuDQo+ICsgIEByZXR2YWwg RUZJX05PVF9GT1VORCAgICAgICAgICAgVGhlIFVTQl9STkRJU19ERVZJQ0UgbWF0Y2hpbmcgdGhp cyBDREMgRGF0YSBpcyBub3QgZm91bmQuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiAr RUZJQVBJDQo+ICtGaW5kTWF0Y2hpbmdSbmRpc0RldiAoDQo+ICsgIElOICBFRklfSEFORExFICAg ICAgICAgICBDZGNIYW5kbGUsDQo+ICsgIE9VVCBFRklfVVNCX0lPX1BST1RPQ09MICAqKkNkY1Vz YklvLA0KPiArICBPVVQgRUZJX0hBTkRMRSAgICAgICAgICAgKlJuZGlzSGFuZGxlDQo+ICsgICkN Cj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAg ICAgSGFuZGxlQ291bnQ7DQo+ICsgIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgKkhhbmRsZUJ1 ZmZlcjsNCj4gKyAgRUZJX1VTQl9JT19QUk9UT0NPTCAgICAgICAqVXNiSW87DQo+ICsgIEVGSV9E RVZJQ0VfUEFUSF9QUk9UT0NPTCAgKlVzYlJuZGlzRGF0YVBhdGg7DQo+ICsgIEVGSV9ERVZJQ0Vf UEFUSF9QUk9UT0NPTCAgKlVzYkNkY0RhdGFQYXRoOw0KPiArDQo+ICsgIC8vIEZpbmQgdGhlIHBh cmVudCBSTkRJUyBhbmQgdXBkYXRlIHRoZSBVc2JJbyBmb3IgdGhlIENEQyBkZXZpY2UNCj4gKyAg U3RhdHVzID0gZ0JTLT5IYW5kbGVQcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgICAgICBDZGNI YW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQs DQo+ICsgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmVXNiQ2RjRGF0YVBhdGgNCj4gKyAgICAg ICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiAr ICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBnQlMtPkxvY2F0 ZUhhbmRsZUJ1ZmZlciAoDQo+ICsgICAgICAgICAgICAgICAgICBCeVByb3RvY29sLA0KPiArICAg ICAgICAgICAgICAgICAgJmdFZmlVc2JJb1Byb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAg ICAgIE5VTEwsDQo+ICsgICAgICAgICAgICAgICAgICAmSGFuZGxlQ291bnQsDQo+ICsgICAgICAg ICAgICAgICAgICAmSGFuZGxlQnVmZmVyDQo+ICsgICAgICAgICAgICAgICAgICApOw0KPiArICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0K PiArDQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IEhhbmRsZUNvdW50OyBJbmRleCsrKSB7 DQo+ICsgICAgU3RhdHVzID0gZ0JTLT5IYW5kbGVQcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAg ICAgICAgIEhhbmRsZUJ1ZmZlcltJbmRleF0sDQo+ICsgICAgICAgICAgICAgICAgICAgICZnRWZp VXNiSW9Qcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAgIChWT0lEICoqKSZVc2JJ bw0KPiArICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4gKyAgICAgIHJldHVybiBTdGF0dXM7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgaWYg KElzVXNiUm5kaXMgKFVzYklvKSkgew0KPiArICAgICAgU3RhdHVzID0gZ0JTLT5IYW5kbGVQcm90 b2NvbCAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgSGFuZGxlQnVmZmVyW0luZGV4XSwNCj4g KyAgICAgICAgICAgICAgICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQsDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgKFZPSUQgKiopJlVzYlJuZGlzRGF0YVBhdGgNCj4gKyAgICAg ICAgICAgICAgICAgICAgICApOw0KPiArICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K PiArICAgICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiVXNiIFJuZGlzIERldmljZVBhdGggbm90 IGZvdW5kXG4iKSk7DQo+ICsgICAgICAgIGJyZWFrOw0KPiArICAgICAgfQ0KPiArDQo+ICsgICAg ICBTdGF0dXMgPSBJc1NhbWVEZXZpY2UgKFVzYlJuZGlzRGF0YVBhdGgsIFVzYkNkY0RhdGFQYXRo KTsNCj4gKw0KPiArICAgICAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgICAg KlJuZGlzSGFuZGxlID0gSGFuZGxlQnVmZmVyW0luZGV4XTsNCj4gKyAgICAgICAgKkNkY1VzYklv ICAgID0gVXNiSW87DQo+ICsgICAgICAgIEZyZWVQb29sIChIYW5kbGVCdWZmZXIpOw0KPiArICAg ICAgICByZXR1cm4gU3RhdHVzOw0KPiArICAgICAgfQ0KPiArICAgIH0NCj4gKyAgfSAgIC8vIEVu ZCBvZiBGb3IgbG9vcA0KPiArDQo+ICsgIEZyZWVQb29sIChIYW5kbGVCdWZmZXIpOw0KPiArDQo+ ICsgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVVNCIFJu ZGlzIERyaXZlciBCaW5kaW5nIFN1cHBvcnQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAg ICAgICAgICAgICAgICAgICAgUHJvdG9jb2wgaW5zdGFuY2UgcG9pbnRlci4NCj4gKyAgQHBhcmFt W2luXSAgQ29udHJvbGxlckhhbmRsZSAgICAgICAgSGFuZGxlIG9mIGRldmljZSB0byB0ZXN0Lg0K PiArICBAcGFyYW1baW5dICBSZW1haW5pbmdEZXZpY2VQYXRoICAgICBPcHRpb25hbCBwYXJhbWV0 ZXIgdXNlIHRvIHBpY2sgYSBzcGVjaWZpYyBjaGlsZA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkZXZpY2UgdG8gc3RhcnQuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklf U1VDQ0VTUyAgICAgICAgICAgICAgICAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhpcyBkZXZpY2Uu DQo+ICsgIEByZXR2YWwgRUZJX0FMUkVBRFlfU1RBUlRFRCAgICAgICAgIFRoaXMgZHJpdmVyIGlz IGFscmVhZHkgcnVubmluZyBvbiB0aGlzIGRldmljZS4NCj4gKyAgQHJldHZhbCBvdGhlciAgICAg ICAgICAgICAgICAgICAgICAgVGhpcyBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGRldmlj ZS4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1VzYlJuZGlzRHJp dmVyU3VwcG9ydGVkICgNCj4gKyAgSU4gRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICAqVGhp cywNCj4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxl LA0KPiArICBJTiBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICAgICpSZW1haW5pbmdEZXZpY2VQ YXRoDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgU3RhdHVzOw0KPiAr ICBFRklfVVNCX0lPX1BST1RPQ09MICAqVXNiSW87DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5P cGVuUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4g KyAgICAgICAgICAgICAgICAgICZnRWZpVXNiSW9Qcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAg ICAgICAgICAoVk9JRCAqKikmVXNiSW8sDQo+ICsgICAgICAgICAgICAgICAgICBUaGlzLT5Ecml2 ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwN Cj4gKyAgICAgICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09MX0JZX0RSSVZFUg0KPiArICAg ICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAg IHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBJc1N1cHBvcnRlZERl dmljZSAoVXNiSW8pID8gRUZJX1NVQ0NFU1MgOiBFRklfVU5TVVBQT1JURUQ7DQo+ICsNCj4gKyAg Z0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsg ICAgICAgICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgVGhpcy0+RHJpdmVy QmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgICAgICAg ICk7DQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBVU0IgUk5E SVMgRHJpdmVyIEJpbmRpbmcgU3RhcnQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAg ICAgICAgICAgICAgICAgUHJvdG9jb2wgaW5zdGFuY2UgcG9pbnRlci4NCj4gKyAgQHBhcmFtW2lu XSAgQ29udHJvbGxlckhhbmRsZSAgICAgICAgSGFuZGxlIG9mIGRldmljZSB0byBiaW5kIGRyaXZl ciB0by4NCj4gKyAgQHBhcmFtW2luXSAgUmVtYWluaW5nRGV2aWNlUGF0aCAgICAgT3B0aW9uYWwg cGFyYW1ldGVyIHVzZSB0byBwaWNrIGEgc3BlY2lmaWMgY2hpbGQNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIHRvIHN0YXJ0Lg0KPiArDQo+ICsgIEByZXR2 YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgICAgIFRoaXMgZHJpdmVyIGlzIGFkZGVkIHRvIENv bnRyb2xsZXJIYW5kbGUNCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgICAgICAg VGhpcyBkcml2ZXIgY291bGQgbm90IGJlIHN0YXJ0ZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yDQo+ ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgICAgICAgIFRoZSBkcml2ZXIgY291bGQg bm90IGluc3RhbGwgc3VjY2Vzc2Z1bGx5IGR1ZSB0byBhIGxhY2sgb2YgcmVzb3VyY2VzLg0KPiAr ICBAcmV0dmFsIG90aGVyICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGRyaXZlciBkb2VzIG5v dCBzdXBwb3J0IHRoaXMgZGV2aWNlDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJ QVBJDQo+ICtVc2JSbmRpc0RyaXZlclN0YXJ0ICgNCj4gKyAgSU4gRUZJX0RSSVZFUl9CSU5ESU5H X1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICBD b250cm9sbGVySGFuZGxlLA0KPiArICBJTiBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICAgICpS ZW1haW5pbmdEZXZpY2VQYXRoDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAg ICAgICAgICAgICAgU3RhdHVzOw0KPiArICBVU0JfUk5ESVNfREVWSUNFICAgICAgICAgICAgICAq VXNiUm5kaXNEZXZpY2U7DQo+ICsgIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgICpVc2JF dGhQYXRoOw0KPiArICBFRklfVVNCX0lPX1BST1RPQ09MICAgICAgICAgICAqVXNiSW87DQo+ICsg IEVGSV9VU0JfSU5URVJGQUNFX0RFU0NSSVBUT1IgIEludGVyZmFjZTsNCj4gKyAgRUZJX0hBTkRM RSAgICAgICAgICAgICAgICAgICAgUm5kaXNIYW5kbGU7DQo+ICsNCj4gKyAgUm5kaXNIYW5kbGUg PSBDb250cm9sbGVySGFuZGxlOw0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+T3BlblByb3RvY29s ICgNCj4gKyAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAg ICAgICAgICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgKFZP SUQgKiopJlVzYklvLA0KPiArICAgICAgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hh bmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAg ICAgICAgICAgICBFRklfT1BFTl9QUk9UT0NPTF9CWV9EUklWRVINCj4gKyAgICAgICAgICAgICAg ICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4gU3Rh dHVzOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wgKA0KPiAr ICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAg ICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgIChWT0lE ICoqKSZVc2JFdGhQYXRoLA0KPiArICAgICAgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGlu Z0hhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAg ICAgICAgICAgICAgICBFRklfT1BFTl9QUk9UT0NPTF9CWV9EUklWRVINCj4gKyAgICAgICAgICAg ICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBnQlMtPkNs b3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAg ICAgICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICBUaGlzLT5Ecml2ZXJC aW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ICsgICAgICAg ICAgICk7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIGdCUy0+Q2xv c2VQcm90b2NvbCAoDQo+ICsgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAg JmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgVGhpcy0+RHJpdmVyQmlu ZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgICAgICAgICk7 DQo+ICsNCj4gKyAgLy8gQ29udHJvbHMgY29tZSBoZXJlIGZvciBSTkRJUyBhbmQgQ0RDLiBJZiBp dCBpcyBDREMsIGNoZWNrIHdoZXRoZXIgUk5ESVMgaXMgcHJlc2VudCBvbiB0aGUgc2FtZSBjb250 cm9sbGVyIG9yIG5vdC4NCj4gKyAgaWYgKElzVXNiQ2RjRGF0YSAoVXNiSW8pKSB7DQo+ICsgICAg REVCVUcgKChERUJVR19JTkZPLCAiUm5kaXMgQ0RDRGF0YSBpbnRlcmZhY2UgZm91bmRcbiIpKTsN Cj4gKw0KPiArICAgIC8vIEZpbmQgdGhlIHBhcmVudCBSTkRJUyBhbmQgdXBkYXRlIHRoZSBVc2JJ byBmb3IgdGhlIENEQyBkZXZpY2UNCj4gKyAgICBTdGF0dXMgPSBVcGRhdGVSbmRpc0RldmljZSAo DQo+ICsgICAgICAgICAgICAgICBVc2JFdGhQYXRoLA0KPiArICAgICAgICAgICAgICAgJlVzYlJu ZGlzRGV2aWNlDQo+ICsgICAgICAgICAgICAgICApOw0KPiArDQo+ICsgICAgaWYgKCFFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIlJuZGlzIE1hdGNo aW5nIGludGVyZmFjZSBmb3VuZFxuIikpOw0KPiArICAgICAgVXNiUm5kaXNEZXZpY2UtPlVzYkNk Y0RhdGFIYW5kbGUgPSBDb250cm9sbGVySGFuZGxlOw0KPiArICAgICAgVXNiUm5kaXNEZXZpY2Ut PlVzYklvQ2RjRGF0YSAgICAgPSBVc2JJbzsNCj4gKyAgICAgIEdldEVuZHBvaW50IChVc2JSbmRp c0RldmljZS0+VXNiSW9DZGNEYXRhLCBVc2JSbmRpc0RldmljZSk7DQo+ICsgICAgICByZXR1cm4g U3RhdHVzOw0KPiArICAgIH0gZWxzZSB7DQo+ICsgICAgICAvLyBDaGVjayBpZiBSbkRpcyBleGlz dA0KPiArICAgICAgU3RhdHVzID0gRmluZE1hdGNoaW5nUm5kaXNEZXYgKA0KPiArICAgICAgICAg ICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAmVXNiSW8sDQo+ ICsgICAgICAgICAgICAgICAgICZSbmRpc0hhbmRsZQ0KPiArICAgICAgICAgICAgICAgICApOw0K PiArDQo+ICsgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICAgIGdCUy0+ Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiAr ICAgICAgICAgICAgICAgJmdFZmlVc2JJb1Byb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAg IFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICBDb250cm9sbGVy SGFuZGxlDQo+ICsgICAgICAgICAgICAgICApOw0KPiArICAgICAgICByZXR1cm4gU3RhdHVzOw0K PiArICAgICAgfQ0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIFVzYlJuZGlzRGV2aWNlID0g QWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChVU0JfUk5ESVNfREVWSUNFKSk7DQo+ICsNCj4gKyAg aWYgKCFVc2JSbmRpc0RldmljZSkgew0KPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICJBbGxv Y2F0ZVplcm9Qb29sIEZhaWxcbiIpKTsNCj4gKw0KPiArICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAo DQo+ICsgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICZnRWZpVXNi SW9Qcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUs DQo+ICsgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgICAgICAgICAgKTsNCj4gKyAg ICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMg PSBMb2FkQWxsRGVzY3JpcHRvciAoDQo+ICsgICAgICAgICAgICAgVXNiSW8sDQo+ICsgICAgICAg ICAgICAgJlVzYlJuZGlzRGV2aWNlLT5Db25maWcNCj4gKyAgICAgICAgICAgICApOw0KPiArICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVh OkxvYWRBbGxEZXNjcmlwdG9yIHN0YXR1cyA9ICVyXG4iLCBfX0ZVTkNUSU9OX18sIFN0YXR1cykp Ow0KPiArICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAgICAgIENvbnRyb2xsZXJI YW5kbGUsDQo+ICsgICAgICAgICAgICZnRWZpVXNiSW9Qcm90b2NvbEd1aWQsDQo+ICsgICAgICAg ICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgIENvbnRyb2xsZXJI YW5kbGUNCj4gKyAgICAgICAgICAgKTsNCj4gKyAgICBGcmVlUG9vbCAoVXNiUm5kaXNEZXZpY2Up Ow0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBVc2JJ by0+VXNiR2V0SW50ZXJmYWNlRGVzY3JpcHRvciAoDQo+ICsgICAgICAgICAgICAgICAgICAgIFVz YklvLA0KPiArICAgICAgICAgICAgICAgICAgICAmSW50ZXJmYWNlDQo+ICsgICAgICAgICAgICAg ICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBERUJVRyAo KERFQlVHX0VSUk9SLCAiJWE6VXNiR2V0SW50ZXJmYWNlRGVzY3JpcHRvciBzdGF0dXMgPSAlclxu IiwgX19GVU5DVElPTl9fLCBTdGF0dXMpKTsNCj4gKyAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0K PiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAmZ0VmaVVzYklv UHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0K PiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ICsgICAgICAgICAgICk7DQo+ICsgICAg RnJlZVBvb2wgKFVzYlJuZGlzRGV2aWNlLT5Db25maWcpOw0KPiArICAgIEZyZWVQb29sIChVc2JS bmRpc0RldmljZSk7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIFVz YlJuZGlzRGV2aWNlLT5TaWduYXR1cmUgICAgICAgICAgICAgICAgICAgICAgICAgID0gVVNCX1JO RElTX1NJR05BVFVSRTsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPk51bU9mSW50ZXJmYWNlICAgICAg ICAgICAgICAgICAgICAgPSBJbnRlcmZhY2UuSW50ZXJmYWNlTnVtYmVyOw0KPiArICBVc2JSbmRp c0RldmljZS0+VXNiUm5kaXNIYW5kbGUgICAgICAgICAgICAgICAgICAgICA9IFJuZGlzSGFuZGxl Ow0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiQ2RjRGF0YUhhbmRsZSAgICAgICAgICAgICAgICAg ICA9IDA7DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JJbyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgID0gVXNiSW87DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoUmVjZWl2 ZSAgICAgICAgICAgICAgID0gUm5kaXNVbmRpUmVjZWl2ZTsNCj4gKyAgVXNiUm5kaXNEZXZpY2Ut PlVzYkV0aC5Vc2JFdGhUcmFuc21pdCAgICAgICAgICAgICAgPSBSbmRpc1VuZGlUcmFuc21pdDsN Cj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhJbnRlcnJ1cHQgICAgICAgICAgICAg PSBVc2JSbmRpc0ludGVycnVwdDsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhN YWNBZGRyZXNzICAgICAgICAgICAgPSBHZXRVc2JFdGhNYWNBZGRyZXNzOw0KPiArICBVc2JSbmRp c0RldmljZS0+VXNiRXRoLlVzYkV0aE1heEJ1bGtTaXplICAgICAgICAgICA9IFVzYkV0aEJ1bGtT aXplOw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkhlYWRlckZ1bkRlc2NyaXB0b3Ig ICAgICA9IEdldFVzYkhlYWRlckZ1bkRlc2NyaXB0b3I7DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5V c2JFdGguVXNiVW5pb25GdW5EZXNjcmlwdG9yICAgICAgID0gR2V0VXNiVW5pb25GdW5EZXNjcmlw dG9yOw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aEZ1bkRlc2NyaXB0b3IgICAg ICAgICA9IEdldFVzYlJuZGlzRnVuRGVzY3JpcHRvcjsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVz YkV0aC5TZXRVc2JFdGhNY2FzdEZpbHRlciAgICAgICAgPSBTZXRVc2JSbmRpc01jYXN0RmlsdGVy Ow0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlNldFVzYkV0aFBvd2VyUGF0dGVybkZpbHRl ciA9IFNldFVzYlJuZGlzUG93ZXJGaWx0ZXI7DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGgu R2V0VXNiRXRoUG93ZXJQYXR0ZXJuRmlsdGVyID0gR2V0VXNiUm5kaXNQb3dlckZpbHRlcjsNCj4g KyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5TZXRVc2JFdGhQYWNrZXRGaWx0ZXIgICAgICAgPSBT ZXRVc2JSbmRpc1BhY2tldEZpbHRlcjsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5HZXRV c2JFdGhTdGF0aXN0aWMgICAgICAgICAgPSBHZXRSbmRpc1N0YXRpc3RpYzsNCj4gKw0KPiArICBV c2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5kaUdldFN0YXRlICAgICAg ICA9IFJuZGlzRHVtbXlSZXR1cm47DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRo VW5kaS5Vc2JFdGhVbmRpU3RhcnQgICAgICAgICAgID0gUm5kaXNVbmRpU3RhcnQ7DQo+ICsgIFVz YlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpU3RvcCAgICAgICAgICAg ID0gUm5kaXNVbmRpU3RvcDsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhVbmRp LlVzYkV0aFVuZGlHZXRJbml0SW5mbyAgICAgPSBSbmRpc1VuZGlHZXRJbml0SW5mbzsNCj4gKyAg VXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlHZXRDb25maWdJbmZv ICAgPSBSbmRpc1VuZGlHZXRDb25maWdJbmZvOw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRo LlVzYkV0aFVuZGkuVXNiRXRoVW5kaUluaXRpYWxpemUgICAgICA9IFJuZGlzVW5kaUluaXRpYWxp emU7DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpUmVz ZXQgICAgICAgICAgID0gUm5kaXNVbmRpUmVzZXQ7DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JF dGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpU2h1dGRvd24gICAgICAgID0gUm5kaXNVbmRpU2h1dGRv d247DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpSW50 ZXJydXB0RW5hYmxlID0gUm5kaXNEdW1teVJldHVybjsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVz YkV0aC5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlSZWNlaXZlRmlsdGVyICAgPSBSbmRpc1VuZGlSZWNl aXZlRmlsdGVyOw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRo VW5kaVN0YXRpb25BZGRyZXNzICA9IFJuZGlzRHVtbXlSZXR1cm47DQo+ICsgIFVzYlJuZGlzRGV2 aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpU3RhdGlzdGljcyAgICAgID0gTlVMTDsN Cj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlNY2FzdElw Mk1hYyAgICAgPSBSbmRpc0R1bW15UmV0dXJuOw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRo LlVzYkV0aFVuZGkuVXNiRXRoVW5kaU52RGF0YSAgICAgICAgICA9IFJuZGlzRHVtbXlSZXR1cm47 DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpR2V0U3Rh dHVzICAgICAgID0gUm5kaXNVbmRpR2V0U3RhdHVzOw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNi RXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5kaUZpbGxIZWFkZXIgICAgICA9IFJuZGlzRHVtbXlSZXR1 cm47DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpVHJh bnNtaXQgICAgICAgID0gTlVMTDsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhV bmRpLlVzYkV0aFVuZGlSZWNlaXZlICAgICAgICAgPSBOVUxMOw0KPiArDQo+ICsgIFVzYlJuZGlz RGV2aWNlLT5NYXhUcmFuc2ZlclNpemUgICAgICAgPSBSTkRJU19NQVhfVFJBTlNGRVJfU0laRTsN Cj4gKyAgVXNiUm5kaXNEZXZpY2UtPk1heFBhY2tldHNQZXJUcmFuc2ZlciA9IDE7DQo+ICsgIFVz YlJuZGlzRGV2aWNlLT5QYWNrZXRBbGlnbm1lbnRGYWN0b3IgPSAwOw0KPiArDQo+ICsgIEluaXRp YWxpemVMaXN0SGVhZCAoJlVzYlJuZGlzRGV2aWNlLT5SZWNlaXZlUGFja2V0TGlzdCk7DQo+ICsN Cj4gKyAgLy8gVGhpcyBpcyBhIFJORElTIGludGVyZmFjZS4gU2VlIHdoZXRoZXIgQ0RDLURBVEEg aW50ZXJmYWNlIGhhcyBhbHJlYWR5IGJlZW4gY29ubmVjdGVkIG9yIG5vdA0KPiArICBGaW5kTWF0 Y2hpbmdDZGNEYXRhIChVc2JSbmRpc0RldmljZSk7DQo+ICsNCj4gKyAgaWYgKFVzYlJuZGlzRGV2 aWNlLT5Vc2JJb0NkY0RhdGEpIHsNCj4gKyAgICBTdGF0dXMgPSBnQlMtPkluc3RhbGxQcm90b2Nv bEludGVyZmFjZSAoDQo+ICsgICAgICAgICAgICAgICAgICAgICZDb250cm9sbGVySGFuZGxlLA0K PiArICAgICAgICAgICAgICAgICAgICAmZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlkLA0KPiArICAg ICAgICAgICAgICAgICAgICBFRklfTkFUSVZFX0lOVEVSRkFDRSwNCj4gKyAgICAgICAgICAgICAg ICAgICAgJihVc2JSbmRpc0RldmljZS0+VXNiRXRoKQ0KPiArICAgICAgICAgICAgICAgICAgICAp Ow0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIGdCUy0+Q2xvc2VQ cm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAg ICAgICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgIFRoaXMtPkRyaXZl ckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAg ICAgICAgICAgICk7DQo+ICsNCj4gKyAgICAgIEZyZWVQb29sIChVc2JSbmRpc0RldmljZS0+Q29u ZmlnKTsNCj4gKyAgICAgIEZyZWVQb29sIChVc2JSbmRpc0RldmljZSk7DQo+ICsgICAgICByZXR1 cm4gU3RhdHVzOw0KPiArICAgIH0NCj4gKw0KPiArICAgIEdldEVuZHBvaW50IChVc2JSbmRpc0Rl dmljZS0+VXNiSW8sIFVzYlJuZGlzRGV2aWNlKTsNCj4gKw0KPiArICAgIERFQlVHICgoREVCVUdf SU5GTywgIlJuZGlzIERldmljZUhhbmRsZSAlclxuIiwgVXNiUm5kaXNEZXZpY2UtPlVzYlJuZGlz SGFuZGxlKSk7DQo+ICsgICAgREVCVUcgKChERUJVR19JTkZPLCAiQ0RDIERldmljZUhhbmRsZSAl clxuIiwgVXNiUm5kaXNEZXZpY2UtPlVzYkNkY0RhdGFIYW5kbGUpKTsNCj4gKyAgICByZXR1cm4g RUZJX1NVQ0NFU1M7DQo+ICsgIH0NCj4gKw0KPiArICBGcmVlUG9vbCAoVXNiUm5kaXNEZXZpY2Ut PkNvbmZpZyk7DQo+ICsgIEZyZWVQb29sIChVc2JSbmRpc0RldmljZSk7DQo+ICsNCj4gKyAgcmV0 dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgQ2hlY2thbmRTdG9wUm5k aXNEZXZpY2UNCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICAgICBQcm90 b2NvbCBpbnN0YW5jZSBwb2ludGVyLg0KPiArICBAcGFyYW1baW5dICBDb250cm9sbGVySGFuZGxl ICAgICBIYW5kbGUgb2YgZGV2aWNlIHRvIGJpbmQgZHJpdmVyIHRvLg0KPiArDQo+ICsgIEByZXR2 YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgVGhpcyBkcml2ZXIgaXMgYWRkZWQgdG8gQ29udHJvbGxl ckhhbmRsZQ0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgIFRoaXMgZHJpdmVyIGNv dWxkIG5vdCBiZSBzdGFydGVkIGR1ZSB0byBhIGRldmljZSBlcnJvcg0KPiArICBAcmV0dmFsIG90 aGVyICAgICAgICAgICAgICAgIFRoaXMgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBkZXZp Y2UNCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0NoZWNrYW5kU3Rv cFJuZGlzRGV2aWNlICgNCj4gKyAgSU4gIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgKlRo aXMsDQo+ICsgIElOICBFRklfSEFORExFICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5k bGUNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICBTdGF0dXM7DQo+ICsg IEVGSV9VU0JfSU9fUFJPVE9DT0wgICpVc2JJbzsNCj4gKw0KPiArICBTdGF0dXMgPSBnQlMtPk9w ZW5Qcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiAr ICAgICAgICAgICAgICAgICAgJmdFZmlVc2JJb1Byb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAg ICAgICAgIChWT0lEICoqKSZVc2JJbywNCj4gKyAgICAgICAgICAgICAgICAgIFRoaXMtPkRyaXZl ckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0K PiArICAgICAgICAgICAgICAgICAgRUZJX09QRU5fUFJPVE9DT0xfR0VUX1BST1RPQ09MDQo+ICsg ICAgICAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsg ICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChJc1VzYlJuZGlzIChVc2JJ bykpIHsNCj4gKyAgICBTdGF0dXMgPSBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAg ICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgICAmZ0Vm aVVzYklvUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJC aW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ ICsgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIlJu ZGlzIENvbnRyb2xsZXJIYW5kbGUgU3RvcCAlclxuIiwgU3RhdHVzKSk7DQo+ICsgICAgcmV0dXJu IFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+ICt9 DQo+ICsNCj4gKy8qKg0KPiArICBVU0IgUm5kaXMgRHJpdmVyIEJpbmRpbmcgU3RvcC4NCj4gKw0K PiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICAgICAgUHJvdG9jb2wgaW5zdGFuY2Ug cG9pbnRlci4NCj4gKyAgQHBhcmFtW2luXSAgQ29udHJvbGxlckhhbmRsZSAgICAgIEhhbmRsZSBv ZiBkZXZpY2UgdG8gc3RvcCBkcml2ZXIgb24NCj4gKyAgQHBhcmFtW2luXSAgTnVtYmVyT2ZDaGls ZHJlbiAgICAgIE51bWJlciBvZiBIYW5kbGVzIGluIENoaWxkSGFuZGxlQnVmZmVyLiBJZiBudW1i ZXIgb2YNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuIGlz IHplcm8gc3RvcCB0aGUgZW50aXJlIGJ1cyBkcml2ZXIuDQo+ICsgIEBwYXJhbVtpbl0gIENoaWxk SGFuZGxlQnVmZmVyICAgICBMaXN0IG9mIENoaWxkIEhhbmRsZXMgdG8gU3RvcC4NCj4gKw0KPiAr ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICAgVGhpcyBkcml2ZXIgaXMgcmVtb3Zl ZCBDb250cm9sbGVySGFuZGxlDQo+ICsgIEByZXR2YWwgb3RoZXIgICAgICAgICAgICAgICAgICAg ICBUaGlzIGRyaXZlciB3YXMgbm90IHJlbW92ZWQgZnJvbSB0aGlzIGRldmljZQ0KPiArDQo+ICsq Ki8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArVXNiUm5kaXNEcml2ZXJTdG9wICgNCj4g KyAgSU4gIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOICBFRklf SEFORExFICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgIElOICBVSU5U TiAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlck9mQ2hpbGRyZW4sDQo+ICsgIElOICBFRklf SEFORExFICAgICAgICAgICAgICAgICAgICpDaGlsZEhhbmRsZUJ1ZmZlcg0KPiArICApDQo+ICt7 DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBFREtJSV9V U0JfRVRIRVJORVRfUFJPVE9DT0wgICpVc2JFdGhQcm90b2NvbDsNCj4gKyAgVVNCX1JORElTX0RF VklDRSAgICAgICAgICAgICAqVXNiUm5kaXNEZXZpY2U7DQo+ICsNCj4gKyAgREVCVUcgKChERUJV R19JTkZPLCAiVXNiUm5kaXNEcml2ZXJTdG9wIENvbnRyb2xsZXJIYW5kbGUgJWx4XG4iLCBDb250 cm9sbGVySGFuZGxlKSk7DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wgKA0K PiArICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAg ICAgICZnRWRrSUlVc2JFdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAoVk9J RCAqKikmVXNiRXRoUHJvdG9jb2wsDQo+ICsgICAgICAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJC aW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4g KyAgICAgICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09MX0dFVF9QUk9UT0NPTA0KPiArICAg ICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAg IFN0YXR1cyA9IENoZWNrYW5kU3RvcFJuZGlzRGV2aWNlIChUaGlzLCBDb250cm9sbGVySGFuZGxl KTsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgVXNiUm5kaXNEZXZp Y2UgPSBVU0JfUk5ESVNfREVWSUNFX0ZST01fVEhJUyAoVXNiRXRoUHJvdG9jb2wpOw0KPiArDQo+ ICsgIFN0YXR1cyA9IGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgICAgICBV c2JSbmRpc0RldmljZS0+VXNiQ2RjRGF0YUhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICZn RWZpVXNiSW9Qcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJC aW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPlVzYkNk Y0RhdGFIYW5kbGUNCj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6Q2xvc2VQcm90b2Nv bCBzdGF0dXMgPSAlclxuIiwgX19GVU5DVElPTl9fLCBTdGF0dXMpKTsNCj4gKyAgfQ0KPiArDQo+ ICsgIFN0YXR1cyA9IGdCUy0+VW5pbnN0YWxsUHJvdG9jb2xJbnRlcmZhY2UgKA0KPiArICAgICAg ICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICZnRWRr SUlVc2JFdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICBVc2JFdGhQcm90b2Nv bA0KPiArICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBnQlMt PkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwN Cj4gKyAgICAgICAgICAgICAgICAgICZnRWZpVXNiSW9Qcm90b2NvbEd1aWQsDQo+ICsgICAgICAg ICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICAgICAg ICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAgICAgICAgICAgKTsNCj4gKw0KPiArICBG cmVlUG9vbCAoVXNiUm5kaXNEZXZpY2UtPkNvbmZpZyk7DQo+ICsgIEZyZWVQb29sIChVc2JSbmRp c0RldmljZSk7DQo+ICsNCj4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiVXNiUm5kaXNEcml2ZXJT dG9wICVyXG4iLCBTdGF0dXMpKTsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiAr LyoqDQo+ICsgIEVudHJ5cG9pbnQgb2YgUk5ESVMgRHJpdmVyLg0KPiArDQo+ICsgIFRoaXMgZnVu Y3Rpb24gaXMgdGhlIGVudHJ5cG9pbnQgb2YgUk5ESVMgRHJpdmVyLiBJdCBpbnN0YWxscyBEcml2 ZXIgQmluZGluZw0KPiArICBQcm90b2NvbHMgdG9nZXRoZXIgd2l0aCBDb21wb25lbnQgTmFtZSBQ cm90b2NvbHMuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgSW1hZ2VIYW5kbGUgICAgICAgVGhlIGZp cm13YXJlIGFsbG9jYXRlZCBoYW5kbGUgZm9yIHRoZSBFRkkgaW1hZ2UuDQo+ICsgIEBwYXJhbVtp bl0gIFN5c3RlbVRhYmxlICAgICAgIEEgcG9pbnRlciB0byB0aGUgRUZJIFN5c3RlbSBUYWJsZS4N Cj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgZW50cnkgcG9pbnQg aXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4g K0VGSUFQSQ0KPiArVXNiUm5kaXNFbnRyeSAoDQo+ICsgIElOIEVGSV9IQU5ETEUgICAgICAgIElt YWdlSGFuZGxlLA0KPiArICBJTiBFRklfU1lTVEVNX1RBQkxFICAqU3lzdGVtVGFibGUNCj4gKyAg KQ0KPiArew0KPiArICBnVXNiUm5kaXNEcml2ZXJCaW5kaW5nLkRyaXZlckJpbmRpbmdIYW5kbGUg PSBJbWFnZUhhbmRsZTsNCj4gKyAgZ1VzYlJuZGlzRHJpdmVyQmluZGluZy5JbWFnZUhhbmRsZSAg ICAgICAgID0gSW1hZ2VIYW5kbGU7DQo+ICsNCj4gKyAgcmV0dXJuIGdCUy0+SW5zdGFsbE11bHRp cGxlUHJvdG9jb2xJbnRlcmZhY2VzICgNCj4gKyAgICAgICAgICAgICAgICAmZ1VzYlJuZGlzRHJp dmVyQmluZGluZy5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICZnRWZp RHJpdmVyQmluZGluZ1Byb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAmZ1VzYlJuZGlz RHJpdmVyQmluZGluZywNCj4gKyAgICAgICAgICAgICAgICAmZ0VmaUNvbXBvbmVudE5hbWUyUHJv dG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICZnVXNiUm5kaXNDb21wb25lbnROYW1lMiwN Cj4gKyAgICAgICAgICAgICAgICBOVUxMDQo+ICsgICAgICAgICAgICAgICAgKTsNCj4gK30NCj4g ZGlmZiAtLWdpdCBhL1VzYk5ldHdvcmtQa2cvVXNiUm5kaXMvVXNiUm5kaXNGdW5jdGlvbi5jIGIv VXNiTmV0d29ya1BrZy9Vc2JSbmRpcy9Vc2JSbmRpc0Z1bmN0aW9uLmMNCj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi5lM2ZlNzM3Y2RlZjENCj4gLS0tIC9kZXYv bnVsbA0KPiArKysgYi9Vc2JOZXR3b3JrUGtnL1VzYlJuZGlzL1VzYlJuZGlzRnVuY3Rpb24uYw0K PiBAQCAtMCwwICsxLDE3MTggQEANCj4gKy8qKiBAZmlsZQ0KPiArICBUaGlzIGZpbGUgY29udGFp bnMgY29kZSBmb3IgVVNCIEV0aGVybmV0IGRlc2NyaXB0b3INCj4gKyAgYW5kIHNwZWNpZmljIHJl cXVlc3RzIGltcGxlbWVudC4NCj4gKw0KPiArICBDb3B5cmlnaHQgKGMpIDIwMjMsIEFtZXJpY2Fu IE1lZ2F0cmVuZHMgSW50ZXJuYXRpb25hbCBMTEMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0K PiArICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiArKiov DQo+ICsNCj4gKyNpbmNsdWRlICJVc2JSbmRpcy5oIg0KPiArDQo+ICtVSU5UMTYgIGdTdG9wQnVs a0luQ250ICA9IDA7DQo+ICtVSU5UMTYgIGdCbG9ja0J1bGtJbkNudCA9IDA7DQo+ICsNCj4gKy8q Kg0KPiArICBMb2FkIEFsbCBvZiBkZXZpY2UgZGVzY3JpcHRvci4NCj4gKw0KPiArICBAcGFyYW1b aW5dICBVc2JJbyAgICAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRklfVVNCX0lPX1BS T1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1bb3V0XSBDb25maWdEZXNjICAgICAgICAgICAg QSBwb2ludGVyIHRvIHRoZSBjb25maWd1cmF0aW9uIGRlc2NyaXB0b3IuDQo+ICsNCj4gKyAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1 bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICBUaGUgcmVxdWVzdCBjb3Vs ZCBub3QgYmUgY29tcGxldGVkIGJlY2F1c2UgdGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJ1ZmZlciBzcGVjaWZpZWQgYnkgRGVzY3JpcHRvckxlbmd0aCBhbmQgRGVzY3Jp cHRvcg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBub3QgbGFyZ2UgZW5v dWdoIHRvIGhvbGQgdGhlIHJlc3VsdCBvZiB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklf VElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVz dC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVk IGR1ZSB0byBhIGRldmljZSBlcnJvci4gVGhlIHRyYW5zZmVyDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN0YXR1cyBpcyByZXR1cm5lZCBpbiBTdGF0dXMuDQo+ICsqKi8NCj4g K0VGSV9TVEFUVVMNCj4gK0xvYWRBbGxEZXNjcmlwdG9yICgNCj4gKyAgSU4gIEVGSV9VU0JfSU9f UFJPVE9DT0wgICAgICAgICpVc2JJbywNCj4gKyAgT1VUIEVGSV9VU0JfQ09ORklHX0RFU0NSSVBU T1IgICoqQ29uZmlnRGVzYw0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAg ICAgICAgIFN0YXR1czsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgVHJhbnNTdGF0 dXM7DQo+ICsgIEVGSV9VU0JfQ09ORklHX0RFU0NSSVBUT1IgIFRtcDsNCj4gKw0KPiArICBTdGF0 dXMgPSBVc2JJby0+VXNiR2V0Q29uZmlnRGVzY3JpcHRvciAoVXNiSW8sICZUbXApOw0KPiArICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVh OlVzYkdldENvbmZpZ0Rlc2NyaXB0b3Igc3RhdHVzID0gJXJcbiIsIF9fRlVOQ1RJT05fXywgU3Rh dHVzKSk7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9 IGdCUy0+QWxsb2NhdGVQb29sICgNCj4gKyAgICAgICAgICAgICAgICAgIEVmaUJvb3RTZXJ2aWNl c0RhdGEsDQo+ICsgICAgICAgICAgICAgICAgICBUbXAuVG90YWxMZW5ndGgsDQo+ICsgICAgICAg ICAgICAgICAgICAoVk9JRCAqKilDb25maWdEZXNjDQo+ICsgICAgICAgICAgICAgICAgICApOw0K PiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgREVCVUcgKChERUJVR19FUlJP UiwgIiVhOiBBbGxvY2F0ZVBvb2wgc3RhdHVzID0gJXJcbiIsIF9fRlVOQ1RJT05fXywgU3RhdHVz KSk7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IFVz YkdldERlc2NyaXB0b3IgKA0KPiArICAgICAgICAgICAgIFVzYklvLA0KPiArICAgICAgICAgICAg IFVTQl9ERVNDX1RZUEVfQ09ORklHIDw8IDggfCAoVG1wLkNvbmZpZ3VyYXRpb25WYWx1ZSAtIDEp LCAgICAgICAgICAgICAgICAgLy8gemVybyBiYXNlZA0KPiArICAgICAgICAgICAgIDAsDQo+ICsg ICAgICAgICAgICAgVG1wLlRvdGFsTGVuZ3RoLA0KPiArICAgICAgICAgICAgICpDb25maWdEZXNj LA0KPiArICAgICAgICAgICAgICZUcmFuc1N0YXR1cw0KPiArICAgICAgICAgICAgICk7DQo+ICsg IHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBSZXR1cm5zIHBvaW50ZXIg dG8gdGhlIG5leHQgZGVzY3JpcHRvciBmb3IgdGhlIHBhY2sgb2YgVVNCIGRlc2NyaXB0b3JzDQo+ ICsgIGxvY2F0ZWQgaW4gY29udGludWVzIG1lbW9yeSBzZWdtZW50DQo+ICsNCj4gKyAgQHBhcmFt W2luXSAgICAgIERlc2MgICBBIHBvaW50ZXIgdG8gdGhlIENPTkZJR19ERVNDUklQVE9SIGluc3Rh bmNlLg0KPiArICBAcGFyYW1baW4sIG91dF0gT2Zmc2V0IEEgcG9pbnRlciB0byB0aGUgc3VtIG9m IGRlc2NyaXB0b3IgbGVuZ3RoLg0KPiArDQo+ICsgIEByZXR2YWwgVFJVRSAgIFRoZSByZXF1ZXN0 IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBGQUxTRSAgTm8gbmV4dCBkZXNj cmlwdG9yLg0KPiArDQo+ICsqKi8NCj4gK0JPT0xFQU4NCj4gK05leHREZXNjcmlwdG9yICgNCj4g KyAgSU4gICAgICBFRklfVVNCX0NPTkZJR19ERVNDUklQVE9SICAqRGVzYywNCj4gKyAgSU4gT1VU ICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAqT2Zmc2V0DQo+ICsgICkNCj4gK3sNCj4gKyAg aWYgKChEZXNjID09IE5VTEwpIHx8ICgqT2Zmc2V0ID49IERlc2MtPlRvdGFsTGVuZ3RoKSkgew0K PiArICAgIHJldHVybiBGQUxTRTsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmICgoKEVGSV9VU0JfQ09O RklHX0RFU0NSSVBUT1IgKikoKGNoYXIgKilEZXNjKypPZmZzZXQpKS0+TGVuZ3RoID09IDApIHsN Cj4gKyAgICByZXR1cm4gRkFMU0U7DQo+ICsgIH0NCj4gKw0KPiArICAqT2Zmc2V0ICs9ICgoRUZJ X1VTQl9DT05GSUdfREVTQ1JJUFRPUiAqKSgoY2hhciAqKURlc2MrKk9mZnNldCkpLT5MZW5ndGg7 DQo+ICsgIGlmICggKk9mZnNldCA+PSBEZXNjLT5Ub3RhbExlbmd0aCApIHsNCj4gKyAgICByZXR1 cm4gRkFMU0U7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gVFJVRTsNCj4gK30NCj4gKw0KPiAr LyoqDQo+ICsgIFJlYWQgRnVuY3Rpb24gZGVzY3JpcHRvcg0KPiArDQo+ICsgIEBwYXJhbVtpbl0g IENvbmZpZyAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYWxsIG9mIGNvbmZpZ3VyYXRpb24uDQo+ ICsgIEBwYXJhbVtpbl0gIEZ1bkRlc2NyaXB0b3JUeXBlICBVU0IgQ0RDIGNsYXNzIGRlc2NyaXB0 b3IgU3ViVHlwZS4NCj4gKyAgQHBhcmFtW291dF0gRGF0YUJ1ZmZlciAgICAgICAgIEEgcG9pbnRl ciB0byB0aGUgRGF0YSBvZiBjb3JyZXNwb25kaW5nIHRvIGRldmljZSBjYXBhYmlsaXR5Lg0KPiAr DQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgIFRoZSBkZXZpY2UgY2FwYWJpbGl0eSBk ZXNjcmlwdG9yIHdhcyByZXRyaWV2ZWQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICBObyBzdXBwb3J0 ZWQuDQo+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgIFRoZSBkZXZpY2UgY2FwYWJpbGl0 eSBkZXNjcmlwdG9yIHdhcyBub3QgZm91bmQuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0K PiArR2V0RnVuY3Rpb25hbERlc2NyaXB0b3IgKA0KPiArICBJTiAgRUZJX1VTQl9DT05GSUdfREVT Q1JJUFRPUiAgKkNvbmZpZywNCj4gKyAgSU4gIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgIEZ1 bkRlc2NyaXB0b3JUeXBlLA0KPiArICBPVVQgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgKkRh dGFCdWZmZXINCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAg ICBTdGF0dXM7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIE9mZnNldDsNCj4g KyAgRUZJX1VTQl9JTlRFUkZBQ0VfREVTQ1JJUFRPUiAgKkludGVyZmFjZTsNCj4gKw0KPiArICBT dGF0dXMgPSBFRklfTk9UX0ZPVU5EOw0KPiArDQo+ICsgIGZvciAoT2Zmc2V0ID0gMDsgTmV4dERl c2NyaXB0b3IgKENvbmZpZywgJk9mZnNldCk7KSB7DQo+ICsgICAgSW50ZXJmYWNlID0gKEVGSV9V U0JfSU5URVJGQUNFX0RFU0NSSVBUT1IgKikoKFVJTlQ4ICopQ29uZmlnICsgT2Zmc2V0KTsNCj4g KyAgICBpZiAoSW50ZXJmYWNlLT5EZXNjcmlwdG9yVHlwZSA9PSBDU19JTlRFUkZBQ0UpIHsNCj4g KyAgICAgIGlmICgoKFVTQl9IRUFERVJfRlVOX0RFU0NSSVBUT1IgKilJbnRlcmZhY2UpLT5EZXNj cmlwdG9yU3VidHlwZSA9PSBGdW5EZXNjcmlwdG9yVHlwZSkgew0KPiArICAgICAgICBzd2l0Y2gg KEZ1bkRlc2NyaXB0b3JUeXBlKSB7DQo+ICsgICAgICAgICAgY2FzZSBIRUFERVJfRlVOX0RFU0NS SVBUT1I6DQo+ICsgICAgICAgICAgICBDb3B5TWVtICgNCj4gKyAgICAgICAgICAgICAgRGF0YUJ1 ZmZlciwNCj4gKyAgICAgICAgICAgICAgKFVTQl9IRUFERVJfRlVOX0RFU0NSSVBUT1IgKilJbnRl cmZhY2UsDQo+ICsgICAgICAgICAgICAgIHNpemVvZiAoVVNCX0hFQURFUl9GVU5fREVTQ1JJUFRP UikNCj4gKyAgICAgICAgICAgICAgKTsNCj4gKyAgICAgICAgICAgIHJldHVybiBFRklfU1VDQ0VT UzsNCj4gKyAgICAgICAgICBjYXNlIFVOSU9OX0ZVTl9ERVNDUklQVE9SOg0KPiArICAgICAgICAg ICAgQ29weU1lbSAoDQo+ICsgICAgICAgICAgICAgIERhdGFCdWZmZXIsDQo+ICsgICAgICAgICAg ICAgIChVU0JfVU5JT05fRlVOX0RFU0NSSVBUT1IgKilJbnRlcmZhY2UsDQo+ICsgICAgICAgICAg ICAgICgoVVNCX1VOSU9OX0ZVTl9ERVNDUklQVE9SICopSW50ZXJmYWNlKS0+RnVuY3Rpb25MZW5n dGgNCj4gKyAgICAgICAgICAgICAgKTsNCj4gKyAgICAgICAgICAgIHJldHVybiBFRklfU1VDQ0VT UzsNCj4gKyAgICAgICAgICBjYXNlIEVUSEVSTkVUX0ZVTl9ERVNDUklQVE9SOg0KPiArICAgICAg ICAgICAgQ29weU1lbSAoDQo+ICsgICAgICAgICAgICAgIERhdGFCdWZmZXIsDQo+ICsgICAgICAg ICAgICAgIChVU0JfRVRIRVJORVRfRlVOX0RFU0NSSVBUT1IgKilJbnRlcmZhY2UsDQo+ICsgICAg ICAgICAgICAgIHNpemVvZiAoVVNCX0VUSEVSTkVUX0ZVTl9ERVNDUklQVE9SKQ0KPiArICAgICAg ICAgICAgICApOw0KPiArICAgICAgICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArICAgICAg ICAgIGRlZmF1bHQ6DQo+ICsgICAgICAgICAgICBTdGF0dXMgPSBFRklfVU5TVVBQT1JURUQ7DQo+ ICsgICAgICAgICAgICBicmVhazsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgfQ0KPiArICAgIH0N Cj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiAr ICBHZXQgVVNCIEV0aGVybmV0IElPIGVuZHBvaW50IGFuZCBVU0IgQ0RDIGRhdGEgSU8gZW5kcG9p bnQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgICAgIFVzYklvICAgICAgICAgICBBIHBvaW50ZXIg dG8gdGhlIEVGSV9VU0JfSU9fUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbiwgb3V0 XSBVc2JSbmRpc0RldmljZSAgQSBwb2ludGVyIHRvIHRoZSBVU0JfUk5ESVNfREVWSUNFIGluc3Rh bmNlLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK0dldEVuZHBvaW50ICgNCj4gKyAgSU4gICAg ICBFRklfVVNCX0lPX1BST1RPQ09MICAqVXNiSW8sDQo+ICsgIElOIE9VVCAgVVNCX1JORElTX0RF VklDRSAgICAgKlVzYlJuZGlzRGV2aWNlDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAg ICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAg ICAgICBJbmRleDsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgUmVzdWx0Ow0K PiArICBFRklfVVNCX0lOVEVSRkFDRV9ERVNDUklQVE9SICBJbnRlcmZhY2U7DQo+ICsgIEVGSV9V U0JfRU5EUE9JTlRfREVTQ1JJUFRPUiAgIEVuZHBvaW50Ow0KPiArDQo+ICsgIFN0YXR1cyA9IFVz YklvLT5Vc2JHZXRJbnRlcmZhY2VEZXNjcmlwdG9yIChVc2JJbywgJkludGVyZmFjZSk7DQo+ICsg IGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAi JWE6VXNiR2V0SW50ZXJmYWNlRGVzY3JpcHRvciBzdGF0dXMgPSAlclxuIiwgX19GVU5DVElPTl9f LCBTdGF0dXMpKTsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoSW50ZXJm YWNlLk51bUVuZHBvaW50cyA9PSAwICkgew0KPiArICAgIFN0YXR1cyA9IFVzYlNldEludGVyZmFj ZSAoVXNiSW8sIDEsIDAsICZSZXN1bHQpOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gKyAgICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTpVc2JTZXRJbnRlcmZhY2Ugc3Rh dHVzID0gJXJcbiIsIF9fRlVOQ1RJT05fXywgU3RhdHVzKSk7DQo+ICsgICAgICByZXR1cm47DQo+ ICsgICAgfQ0KPiArDQo+ICsgICAgU3RhdHVzID0gVXNiSW8tPlVzYkdldEludGVyZmFjZURlc2Ny aXB0b3IgKFVzYklvLCAmSW50ZXJmYWNlKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+ICsgICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6VXNiR2V0SW50ZXJmYWNlRGVz Y3JpcHRvciBzdGF0dXMgPSAlclxuIiwgX19GVU5DVElPTl9fLCBTdGF0dXMpKTsNCj4gKyAgICAg IHJldHVybjsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5k ZXggPCBJbnRlcmZhY2UuTnVtRW5kcG9pbnRzOyBJbmRleCsrKSB7DQo+ICsgICAgU3RhdHVzID0g VXNiSW8tPlVzYkdldEVuZHBvaW50RGVzY3JpcHRvciAoVXNiSW8sIEluZGV4LCAmRW5kcG9pbnQp Ow0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIERFQlVHICgoREVC VUdfRVJST1IsICIlYTpVc2JHZXRFbmRwb2ludERlc2NyaXB0b3Igc3RhdHVzID0gJXJcbiIsIF9f RlVOQ1RJT05fXywgU3RhdHVzKSk7DQo+ICsgICAgICByZXR1cm47DQo+ICsgICAgfQ0KPiArDQo+ ICsgICAgc3dpdGNoICgoRW5kcG9pbnQuQXR0cmlidXRlcyAmIChCSVQwIHwgQklUMSkpKSB7DQo+ ICsgICAgICBjYXNlIFVTQl9FTkRQT0lOVF9CVUxLOg0KPiArICAgICAgICBpZiAoRW5kcG9pbnQu RW5kcG9pbnRBZGRyZXNzICYgQklUNykgew0KPiArICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5C dWxrSW5FbmRwb2ludCA9IEVuZHBvaW50LkVuZHBvaW50QWRkcmVzczsNCj4gKyAgICAgICAgfSBl bHNlIHsNCj4gKyAgICAgICAgICBVc2JSbmRpc0RldmljZS0+QnVsa091dEVuZHBvaW50ID0gRW5k cG9pbnQuRW5kcG9pbnRBZGRyZXNzOw0KPiArICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAgYnJl YWs7DQo+ICsgICAgICBjYXNlIFVTQl9FTkRQT0lOVF9JTlRFUlJVUFQ6DQo+ICsgICAgICAgIFVz YlJuZGlzRGV2aWNlLT5JbnRlcnJ1cEVuZHBvaW50ID0gRW5kcG9pbnQuRW5kcG9pbnRBZGRyZXNz Ow0KPiArICAgICAgICBicmVhazsNCj4gKyAgICB9DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoq DQo+ICsgIEFzeW5jIFVTQiB0cmFuc2ZlciBjYWxsYmFjayByb3V0aW5lLg0KPiArDQo+ICsgIEBw YXJhbVtpbl0gIERhdGEgICAgICAgICAgICBEYXRhIHJlY2VpdmVkIG9yIHNlbnQgdmlhIHRoZSBV U0IgQXN5bmNocm9ub3VzIFRyYW5zZmVyLCBpZiB0aGUNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRyYW5zZmVyIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEBwYXJhbVtp bl0gIERhdGFMZW5ndGggICAgICBUaGUgbGVuZ3RoIG9mIERhdGEgcmVjZWl2ZWQgb3Igc2VudCB2 aWEgdGhlIEFzeW5jaHJvbm91cw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJh bnNmZXIsIGlmIHRyYW5zZmVyIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZXMuDQo+ICsgIEBwYXJhbVtp bl0gIENvbnRleHQgICAgICAgICBEYXRhIHBhc3NlZCBmcm9tIFVzYkFzeW5jSW50ZXJydXB0VHJh bnNmZXIoKSByZXF1ZXN0Lg0KPiArICBAcGFyYW1baW5dICBTdGF0dXMgICAgICAgICAgSW5kaWNh dGVzIHRoZSByZXN1bHQgb2YgdGhlIGFzeW5jaHJvbm91cyB0cmFuc2Zlci4NCj4gKw0KPiArICBA cmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgYXN5bmNocm9ub3VzIFVTQiB0cmFuc2Zl ciByZXF1ZXN0IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC4NCj4gKyAgQHJldHZhbCBF RklfREVWSUNFX0VSUk9SICAgICAgVGhlIGFzeW5jaHJvbm91cyBVU0IgdHJhbnNmZXIgcmVxdWVz dCBmYWlsZWQuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtJbnRl cnJ1cHRDYWxsYmFjayAoDQo+ICsgIElOICBWT0lEICAgICpEYXRhLA0KPiArICBJTiAgVUlOVE4g ICBEYXRhTGVuZ3RoLA0KPiArICBJTiAgVk9JRCAgICAqQ29udGV4dCwNCj4gKyAgSU4gIFVJTlQz MiAgU3RhdHVzDQo+ICsgICkNCj4gK3sNCj4gKyAgaWYgKChEYXRhID09IE5VTEwpIHx8IChDb250 ZXh0ID09IE5VTEwpKSB7DQo+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4g KyAgfQ0KPiArDQo+ICsgIGlmICgoKEVGSV9VU0JfREVWSUNFX1JFUVVFU1QgKilEYXRhKS0+UmVx dWVzdCA9PSAwKSB7DQo+ICsgICAgQ29weU1lbSAoDQo+ICsgICAgICAoRUZJX1VTQl9ERVZJQ0Vf UkVRVUVTVCAqKUNvbnRleHQsDQo+ICsgICAgICAoRUZJX1VTQl9ERVZJQ0VfUkVRVUVTVCAqKURh dGEsDQo+ICsgICAgICBzaXplb2YgKEVGSV9VU0JfREVWSUNFX1JFUVVFU1QpDQo+ICsgICAgICAp Ow0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsv KioNCj4gKyAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIG1hbmFnZSBhIFVTQiBkZXZpY2Ugd2l0 aCBhbiBpbnRlcnJ1cHQgdHJhbnNmZXIgcGlwZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlz ICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NP TCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAgSXNOZXdUcmFuc2ZlciAgICAgSWYgVFJVRSwg YSBuZXcgdHJhbnNmZXIgd2lsbCBiZSBzdWJtaXR0ZWQgdG8gVVNCIGNvbnRyb2xsZXIuIElmDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLCB0aGUgaW50ZXJydXB0IHRy YW5zZmVyIGlzIGRlbGV0ZWQgZnJvbSB0aGUgZGV2aWNlJ3MgaW50ZXJydXB0DQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZmVyIHF1ZXVlLg0KPiArICBAcGFyYW1baW5d ICBQb2xsaW5nSW50ZXJ2YWwgICBJbmRpY2F0ZXMgdGhlIHBlcmlvZGljIHJhdGUsIGluIG1pbGxp c2Vjb25kcywgdGhhdCB0aGUgdHJhbnNmZXIgaXMgdG8gYmUNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZXhlY3V0ZWQuVGhpcyBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQgd2hlbiBJ c05ld1RyYW5zZmVyIGlzIFRSVUUuIFRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB2YWx1ZSBtdXN0IGJlIGJldHdlZW4gMSB0byAyNTUsIG90aGVyd2lzZSBFRklfSU5WQUxJ RF9QQVJBTUVURVIgaXMgcmV0dXJuZWQuDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFRoZSB1bml0cyBhcmUgaW4gbWlsbGlzZWNvbmRzLg0KPiArICBAcGFyYW1baW5dICBSZXF1 ZXN0ICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9VU0JfREVWSUNFX1JFUVVFU1QgZGF0 YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgYXN5bmNocm9u b3VzIFVTQiB0cmFuc2ZlciByZXF1ZXN0IHRyYW5zZmVyIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBl eGVjdXRlZC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIGFzeW5jaHJv bm91cyBVU0IgdHJhbnNmZXIgcmVxdWVzdCBmYWlsZWQuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NU QVRVUw0KPiArRUZJQVBJDQo+ICtVc2JSbmRpc0ludGVycnVwdCAoDQo+ICsgIElOIEVES0lJX1VT Ql9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOIEJPT0xFQU4gICAgICAgICAgICAg ICAgICAgICAgSXNOZXdUcmFuc2ZlciwNCj4gKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICAg ICAgICBQb2xsaW5nSW50ZXJ2YWwsDQo+ICsgIElOIEVGSV9VU0JfREVWSUNFX1JFUVVFU1QgICAg ICAgKlJlcXVzdA0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgIFN0YXR1czsN Cj4gKyAgVVNCX1JORElTX0RFVklDRSAgKlVzYlJuZGlzRGV2aWNlOw0KPiArICBVSU5UTiAgICAg ICAgICAgICBEYXRhTGVuZ3RoOw0KPiArDQo+ICsgIFVzYlJuZGlzRGV2aWNlID0gVVNCX1JORElT X0RFVklDRV9GUk9NX1RISVMgKFRoaXMpOw0KPiArICBEYXRhTGVuZ3RoICAgICA9IDA7DQo+ICsN Cj4gKyAgaWYgKElzTmV3VHJhbnNmZXIgPT0gVFJVRSkgew0KPiArICAgIERhdGFMZW5ndGggPSBz aXplb2YgKEVGSV9VU0JfREVWSUNFX1JFUVVFU1QpICsgc2l6ZW9mIChVU0JfQ09OTkVDVF9TUEVF RF9DSEFOR0UpOw0KPiArICAgIFN0YXR1cyAgICAgPSBVc2JSbmRpc0RldmljZS0+VXNiSW8tPlVz YkFzeW5jSW50ZXJydXB0VHJhbnNmZXIgKA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPlVzYklvLA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPkludGVycnVwRW5kcG9p bnQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJc05ld1Ry YW5zZmVyLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9s bGluZ0ludGVydmFsLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRGF0YUxlbmd0aCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEludGVycnVwdENhbGxiYWNrLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUmVxdXN0DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOw0KPiArDQo+ICsgICAgaWYgKFN0YXR1cyA9PSBFRklfSU5WQUxJRF9QQVJBTUVU RVIpIHsNCj4gKyAgICAgIC8vIEJlY2F1c2Ugb2YgU3RhY2tlZCBBc3luY0ludGVycnVwdCByZXF1 ZXN0IGFyZSBub3Qgc3VwcG9ydGVkDQo+ICsgICAgICBTdGF0dXMgPSBVc2JSbmRpc0RldmljZS0+ VXNiSW8tPlVzYkFzeW5jSW50ZXJydXB0VHJhbnNmZXIgKA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5Vc2JJbywNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2JSbmRpc0RldmljZS0+SW50ZXJydXBF bmRwb2ludCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE5VTEwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOw0KPiArICAgIH0NCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBTdGF0dXMgPSBVc2JS bmRpc0RldmljZS0+VXNiSW8tPlVzYkFzeW5jSW50ZXJydXB0VHJhbnNmZXIgKA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2JSbmRpc0RldmljZS0+VXNiSW8sDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5J bnRlcnJ1cEVuZHBvaW50LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBJc05ld1RyYW5zZmVyLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAwLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiAr fQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJlYWQgVVNCIGlu dGVycnVwdCB0cmFuc2ZlciBiZWZvcmUgdGhlIHJlc3BvbnNlIFJORElTIG1lc3NhZ2UuDQo+ICsN Cj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBVU0Jf Uk5ESVNfREVWSUNFIGluc3RhbmNlLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAg ICAgICAgIFRoZSBVU0IgaW50ZXJydXB0IHRyYW5zZmVyIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBl eGVjdXRlZC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIFVTQiBpbnRl cnJ1cHQgdHJhbnNmZXIgZmFpbGVkLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VG SUFQSQ0KPiArUmVhZFJuZGlzUmVzcG9uc2VJbnRlcnJ1cHQgKA0KPiArICBJTiBVU0JfUk5ESVNf REVWSUNFICAqVXNiUm5kaXNEZXZpY2UNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICBT dGF0dXM7DQo+ICsgIFVJTlQzMiAgICAgIERhdGFbMl07DQo+ICsgIFVJTlQzMiAgICAgIFVzYlN0 YXR1czsNCj4gKyAgVUlOVE4gICAgICAgRGF0YUxlbmd0aDsNCj4gKw0KPiArICBEYXRhTGVuZ3Ro ID0gODsNCj4gKw0KPiArICBaZXJvTWVtIChEYXRhLCBzaXplb2YgKERhdGEpKTsNCj4gKw0KPiAr ICBTdGF0dXMgPSBVc2JSbmRpc0RldmljZS0+VXNiSW8tPlVzYlN5bmNJbnRlcnJ1cHRUcmFuc2Zl ciAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2JSbmRpc0Rldmlj ZS0+VXNiSW8sDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2JSbmRp c0RldmljZS0+SW50ZXJydXBFbmRwb2ludCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZEYXRhLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JkRhdGFMZW5ndGgsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIw LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlVzYlN0YXR1cw0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKw0KPiArICByZXR1cm4g U3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgUmV0cmlldmVzIHRoZSBVU0IgRXRoZXJu ZXQgTWFjIEFkZHJlc3MuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICBBIHBv aW50ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAg QHBhcmFtW291dF0gTWFjQWRkcmVzcyAgICBBIHBvaW50ZXIgdG8gdGhlIGNhbGxlciBhbGxvY2F0 ZWQgVVNCIEV0aGVybmV0IE1hYyBBZGRyZXNzLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NF U1MgICAgICAgICAgIFRoZSBVU0IgSGVhZGVyIEZ1bmN0aW9uYWwgZGVzY3JpcHRvciB3YXMgcmV0 cmlldmVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIg VXNiSGVhZGVyRnVuRGVzY3JpcHRvciBpcyBOVUxMLg0KPiArICBAcmV0dmFsIEVGSV9OT1RfRk9V TkQgICAgICAgICBUaGUgVVNCIEhlYWRlciBGdW5jdGlvbmFsIGRlc2NyaXB0b3Igd2FzIG5vdCBm b3VuZC4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0dldFVzYkV0 aE1hY0FkZHJlc3MgKA0KPiArICBJTiAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhp cywNCj4gKyAgT1VUIEVGSV9NQUNfQUREUkVTUyAgICAgICAgICAgICAgKk1hY0FkZHJlc3MNCj4g KyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4g KyAgVVNCX1JORElTX0RFVklDRSAgICAgICAgICAgICAqVXNiUm5kaXNEZXZpY2U7DQo+ICsgIFVT Ql9FVEhFUk5FVF9GVU5fREVTQ1JJUFRPUiAgVXNiRXRoRGVzY3JpcHRvcjsNCj4gKyAgQ0hBUjE2 ICAgICAgICAgICAgICAgICAgICAgICAqRGF0YTsNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAg ICAgICAgICAqRGF0YVB0cjsNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICBUbXBT dHJbMV07DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsgIFVJ TlQ4ICAgICAgICAgICAgICAgICAgICAgICAgSGk7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAg ICAgICAgICAgTG93Ow0KPiArDQo+ICsgIFJFTU9URV9ORElTX1FVRVJZX01BQ19NU0cgICAgUm5k aXNRdWVyeU1zZzsNCj4gKyAgUkVNT1RFX05ESVNfUVVFUllfTUFDX0NNUExUICBSbmRpc1F1ZXJ5 TXNnQ21wbHQ7DQo+ICsNCj4gKyAgVXNiUm5kaXNEZXZpY2UgPSBVU0JfUk5ESVNfREVWSUNFX0ZS T01fVEhJUyAoVGhpcyk7DQo+ICsNCj4gKyAgWmVyb01lbSAoJlJuZGlzUXVlcnlNc2csIHNpemVv ZiAoUkVNT1RFX05ESVNfUVVFUllfTUFDX01TRykpOw0KPiArICBaZXJvTWVtICgmUm5kaXNRdWVy eU1zZ0NtcGx0LCBzaXplb2YgKFJFTU9URV9ORElTX1FVRVJZX01BQ19DTVBMVCkpOw0KPiArDQo+ ICsgIFJuZGlzUXVlcnlNc2cuUXVlcnlNc2cuTWVzc2FnZVR5cGUgICA9IFJORElTX1FVRVJZX01T RzsNCj4gKyAgUm5kaXNRdWVyeU1zZy5RdWVyeU1zZy5NZXNzYWdlTGVuZ3RoID0gc2l6ZW9mIChS RU1PVEVfTkRJU19RVUVSWV9NQUNfTVNHKTsNCj4gKyAgUm5kaXNRdWVyeU1zZy5RdWVyeU1zZy5S ZXF1ZXN0SUQgICAgID0gVXNiUm5kaXNEZXZpY2UtPlJlcXVlc3RJZDsNCj4gKyAgUm5kaXNRdWVy eU1zZy5RdWVyeU1zZy5PaWQgICAgICAgICAgID0gT0lEXzgwMl8zX0NVUlJFTlRfQUREUkVTUzsN Cj4gKw0KPiArICBSbmRpc1F1ZXJ5TXNnQ21wbHQuUXVlcnlDbXBsdC5NZXNzYWdlVHlwZSAgID0g Uk5ESVNfUVVFUllfQ01QTFQ7DQo+ICsgIFJuZGlzUXVlcnlNc2dDbXBsdC5RdWVyeUNtcGx0Lk1l c3NhZ2VMZW5ndGggPSBzaXplb2YgKFJFTU9URV9ORElTX1FVRVJZX01BQ19DTVBMVCk7DQo+ICsN Cj4gKyAgU3RhdHVzID0gUm5kaXNDb250cm9sTXNnICgNCj4gKyAgICAgICAgICAgICBVc2JSbmRp c0RldmljZSwNCj4gKyAgICAgICAgICAgICAoUkVNT1RFX05ESVNfTVNHX0hFQURFUiAqKSZSbmRp c1F1ZXJ5TXNnLA0KPiArICAgICAgICAgICAgIChSRU1PVEVfTkRJU19NU0dfSEVBREVSICopJlJu ZGlzUXVlcnlNc2dDbXBsdA0KPiArICAgICAgICAgICAgICk7DQo+ICsgIGlmICghRUZJX0VSUk9S IChTdGF0dXMpKSB7DQo+ICsgICAgREVCVUcgKChERUJVR19JTkZPLCAiU3VjY2VzcyB0byBnZXQg TWFjIGFkZHJlc3MgZnJvbSBSTkRJUyBtZXNzYWdlLlxuIikpOw0KPiArICAgIGZvciAoSW5kZXgg PSAwOyBJbmRleCA8IFBYRV9IV0FERFJfTEVOX0VUSEVSOyBJbmRleCsrKSB7DQo+ICsgICAgICBN YWNBZGRyZXNzLT5BZGRyW0luZGV4XSA9IFJuZGlzUXVlcnlNc2dDbXBsdC5BZGRyW0luZGV4XTsN Cj4gKyAgICB9DQo+ICsNCj4gKyAgICBVc2JSbmRpc0RldmljZS0+UmVxdWVzdElkKys7DQo+ICsg ICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vIElmIGl0IGlzIG5vdCBzdXBw b3J0IHRoZSBPSURfODAyXzNfQ1VSUkVOVF9BRERSRVNTLg0KPiArICAvLyBUbyBjaGVjayBVU0Ig RXRoZXJuZXQgZnVuY3Rpb25hbCBEZXNjcmlwdG9yDQo+ICsgIFN0YXR1cyA9IFRoaXMtPlVzYkV0 aEZ1bkRlc2NyaXB0b3IgKFRoaXMsICZVc2JFdGhEZXNjcmlwdG9yKTsNCj4gKyAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTpVc2JFdGhG dW5EZXNjcmlwdG9yIHN0YXR1cyA9ICVyXG4iLCBfX0ZVTkNUSU9OX18sIFN0YXR1cykpOw0KPiAr ICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBVc2JSbmRpc0Rl dmljZS0+VXNiSW8tPlVzYkdldFN0cmluZ0Rlc2NyaXB0b3IgKA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPlVzYklvLA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDksICAgICAgICAgICAgICAgICAgICAgICAv LyBFbmdsaXNoLVVTIExhbmd1YWdlIElEDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBVc2JFdGhEZXNjcmlwdG9yLk1hY0FkZHJlc3MsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmRGF0YQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIERFQlVH ICgoREVCVUdfRVJST1IsICIlYTpVc2JHZXRTdHJpbmdEZXNjcmlwdG9yIHN0YXR1cyA9ICVyXG4i LCBfX0ZVTkNUSU9OX18sIFN0YXR1cykpOw0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0N Cj4gKw0KPiArICBEYXRhUHRyID0gRGF0YTsNCj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwg UFhFX0hXQUREUl9MRU5fRVRIRVI7IEluZGV4KyspIHsNCj4gKyAgICBDb3B5TWVtIChUbXBTdHIs IERhdGFQdHIsIHNpemVvZiAoQ0hBUjE2KSk7DQo+ICsgICAgRGF0YVB0cisrOw0KPiArICAgIEhp ID0gKFVJTlQ4KVN0ckhleFRvVWludG4gKFRtcFN0cik7DQo+ICsgICAgQ29weU1lbSAoVG1wU3Ry LCBEYXRhUHRyLCBzaXplb2YgKENIQVIxNikpOw0KPiArICAgIERhdGFQdHIrKzsNCj4gKyAgICBM b3cgICAgICAgICAgICAgICAgICAgICA9IChVSU5UOClTdHJIZXhUb1VpbnRuIChUbXBTdHIpOw0K PiArICAgIE1hY0FkZHJlc3MtPkFkZHJbSW5kZXhdID0gKEhpIDw8IDQpIHwgTG93Ow0KPiArICB9 DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFJldHJp ZXZlcyB0aGUgVVNCIEV0aGVybmV0IEJ1bGsgdHJhbnNmZXIgZGF0YSBzaXplLg0KPiArDQo+ICsg IEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFREtJSV9VU0JfRVRI RVJORVRfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtvdXRdIEJ1bGtTaXplICAgICAg QSBwb2ludGVyIHRvIHRoZSBCdWxrIHRyYW5zZmVyIGRhdGEgc2l6ZS4NCj4gKw0KPiArICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICAgIFRoZSBidWxrIHRyYW5zZmVyIGRhdGEgc2l6ZSB3YXMgcmV0 cmlldmVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBvdGhlciAgICAgICAgICAgICBGYWls ZWQgdG8gcmV0cmlldmUgdGhlIGJ1bGsgdHJhbnNmZXIgZGF0YSBzaXplLg0KPiArDQo+ICsqKi8N Cj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArVXNiRXRoQnVsa1NpemUgKA0KPiArICBJTiAg RURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywNCj4gKyAgT1VUIFVJTlROICAgICAg ICAgICAgICAgICAgICAgICAgKkJ1bGtTaXplDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRV UyAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIFVTQl9FVEhFUk5FVF9GVU5fREVTQ1JJ UFRPUiAgVXNiRXRoRnVuRGVzY3JpcHRvcjsNCj4gKyAgVVNCX1JORElTX0RFVklDRSAgICAgICAg ICAgICAqVXNiUm5kaXNEZXZpY2U7DQo+ICsNCj4gKyAgUkVNT1RFX05ESVNfUVVFUllfTUFYX1RP VEFMX1NJWkVfTVNHICAgIFJuZGlzUXVlcnlNc2c7DQo+ICsgIFJFTU9URV9ORElTX1FVRVJZX01B WF9UT1RBTF9TSVpFX0NNUExUICBSbmRpc1F1ZXJ5TXNnQ21wbHQ7DQo+ICsNCj4gKyAgVXNiUm5k aXNEZXZpY2UgPSBVU0JfUk5ESVNfREVWSUNFX0ZST01fVEhJUyAoVGhpcyk7DQo+ICsNCj4gKyAg WmVyb01lbSAoJlJuZGlzUXVlcnlNc2csIHNpemVvZiAoUkVNT1RFX05ESVNfUVVFUllfTUFYX1RP VEFMX1NJWkVfTVNHKSk7DQo+ICsgIFplcm9NZW0gKCZSbmRpc1F1ZXJ5TXNnQ21wbHQsIHNpemVv ZiAoUkVNT1RFX05ESVNfUVVFUllfTUFYX1RPVEFMX1NJWkVfQ01QTFQpKTsNCj4gKw0KPiArICBS bmRpc1F1ZXJ5TXNnLlF1ZXJ5TXNnLk1lc3NhZ2VUeXBlICAgPSBSTkRJU19RVUVSWV9NU0c7DQo+ ICsgIFJuZGlzUXVlcnlNc2cuUXVlcnlNc2cuTWVzc2FnZUxlbmd0aCA9IHNpemVvZiAoUkVNT1RF X05ESVNfUVVFUllfTUFYX1RPVEFMX1NJWkVfTVNHKTsNCj4gKyAgUm5kaXNRdWVyeU1zZy5RdWVy eU1zZy5SZXF1ZXN0SUQgICAgID0gVXNiUm5kaXNEZXZpY2UtPlJlcXVlc3RJZDsNCj4gKyAgUm5k aXNRdWVyeU1zZy5RdWVyeU1zZy5PaWQgICAgICAgICAgID0gT0lEX0dFTl9NQVhJTVVNX1RPVEFM X1NJWkU7DQo+ICsNCj4gKyAgUm5kaXNRdWVyeU1zZ0NtcGx0LlF1ZXJ5Q21wbHQuTWVzc2FnZVR5 cGUgICA9IFJORElTX1FVRVJZX0NNUExUOw0KPiArICBSbmRpc1F1ZXJ5TXNnQ21wbHQuUXVlcnlD bXBsdC5NZXNzYWdlTGVuZ3RoID0gc2l6ZW9mIChSRU1PVEVfTkRJU19RVUVSWV9NQVhfVE9UQUxf U0laRV9DTVBMVCk7DQo+ICsNCj4gKyAgU3RhdHVzID0gUm5kaXNDb250cm9sTXNnICgNCj4gKyAg ICAgICAgICAgICBVc2JSbmRpc0RldmljZSwNCj4gKyAgICAgICAgICAgICAoUkVNT1RFX05ESVNf TVNHX0hFQURFUiAqKSZSbmRpc1F1ZXJ5TXNnLA0KPiArICAgICAgICAgICAgIChSRU1PVEVfTkRJ U19NU0dfSEVBREVSICopJlJuZGlzUXVlcnlNc2dDbXBsdA0KPiArICAgICAgICAgICAgICk7DQo+ ICsgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgREVCVUcgKChERUJVR19JTkZP LCAiU3VjY2VzcyB0byBnZXQgTWF4IFRvdGFsIHNpemUgOiAlWCAgXG4iLCBSbmRpc1F1ZXJ5TXNn Q21wbHQuTWF4VG90YWxTaXplKSk7DQo+ICsgICAgKkJ1bGtTaXplID0gUm5kaXNRdWVyeU1zZ0Nt cGx0Lk1heFRvdGFsU2l6ZTsNCj4gKyAgICBVc2JSbmRpc0RldmljZS0+UmVxdWVzdElkKys7DQo+ ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IFRoaXMtPlVz YkV0aEZ1bkRlc2NyaXB0b3IgKFRoaXMsICZVc2JFdGhGdW5EZXNjcmlwdG9yKTsNCj4gKyAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4g Kw0KPiArICAqQnVsa1NpemUgPSAoVUlOVE4pVXNiRXRoRnVuRGVzY3JpcHRvci5NYXhTZWdtZW50 U2l6ZTsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFJldHJp ZXZlcyB0aGUgVVNCIEhlYWRlciBmdW5jdGlvbmFsIERlc2NyaXB0b3IuDQo+ICsNCj4gKyAgQHBh cmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJX1VT Ql9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW291dF0gVXNiSGVhZGVy RnVuRGVzY3JpcHRvciBBIHBvaW50ZXIgdG8gdGhlIGNhbGxlciBhbGxvY2F0ZWQgVVNCIEhlYWRl ciBGdW5jdGlvbmFsIERlc2NyaXB0b3IuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgICAgICAgVGhlIFVTQiBIZWFkZXIgRnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcyByZXRyaWV2 ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBVc2JI ZWFkZXJGdW5EZXNjcmlwdG9yIGlzIE5VTEwuDQo+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAg ICAgICAgIFRoZSBVU0IgSGVhZGVyIEZ1bmN0aW9uYWwgZGVzY3JpcHRvciB3YXMgbm90IGZvdW5k Lg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArR2V0VXNiSGVhZGVy RnVuRGVzY3JpcHRvciAoDQo+ICsgIElOICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpU aGlzLA0KPiArICBPVVQgVVNCX0hFQURFUl9GVU5fREVTQ1JJUFRPUiAgICAqVXNiSGVhZGVyRnVu RGVzY3JpcHRvcg0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgIFN0YXR1czsN Cj4gKyAgVVNCX1JORElTX0RFVklDRSAgKlVzYlJuZGlzRGV2aWNlOw0KPiArDQo+ICsgIFVzYlJu ZGlzRGV2aWNlID0gVVNCX1JORElTX0RFVklDRV9GUk9NX1RISVMgKFRoaXMpOw0KPiArDQo+ICsg IGlmIChVc2JIZWFkZXJGdW5EZXNjcmlwdG9yID09IE5VTEwpIHsNCj4gKyAgICByZXR1cm4gRUZJ X0lOVkFMSURfUEFSQU1FVEVSOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gR2V0RnVuY3Rp b25hbERlc2NyaXB0b3IgKA0KPiArICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5Db25maWcs DQo+ICsgICAgICAgICAgICAgSEVBREVSX0ZVTl9ERVNDUklQVE9SLA0KPiArICAgICAgICAgICAg IFVzYkhlYWRlckZ1bkRlc2NyaXB0b3INCj4gKyAgICAgICAgICAgICApOw0KPiArICByZXR1cm4g U3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgUmV0cmlldmVzIHRoZSBVU0IgVW5pb24g ZnVuY3Rpb25hbCBEZXNjcmlwdG9yLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAg ICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wg aW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtvdXRdIFVzYlVuaW9uRnVuRGVzY3JpcHRvciAgQSBwb2lu dGVyIHRvIHRoZSBjYWxsZXIgYWxsb2NhdGVkIFVTQiBVbmlvbiBGdW5jdGlvbmFsIERlc2NyaXB0 b3IuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBVU0IgVW5p b24gRnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcyByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiAr ICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgVXNiVW5pb25GdW5EZXNjcmlwdG9yIGlz IE5VTEwuDQo+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICBUaGUgVVNCIFVuaW9u IEZ1bmN0aW9uYWwgZGVzY3JpcHRvciB3YXMgbm90IGZvdW5kLg0KPiArDQo+ICsqKi8NCj4gK0VG SV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArR2V0VXNiVW5pb25GdW5EZXNjcmlwdG9yICgNCj4gKyAg SU4gIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIE9VVCBVU0JfVU5J T05fRlVOX0RFU0NSSVBUT1IgICAgICpVc2JVbmlvbkZ1bkRlc2NyaXB0b3INCj4gKyAgKQ0KPiAr ew0KPiArICBFRklfU1RBVFVTICAgICAgICBTdGF0dXM7DQo+ICsgIFVTQl9STkRJU19ERVZJQ0Ug ICpVc2JSbmRpc0RldmljZTsNCj4gKw0KPiArICBVc2JSbmRpc0RldmljZSA9IFVTQl9STkRJU19E RVZJQ0VfRlJPTV9USElTIChUaGlzKTsNCj4gKw0KPiArICBpZiAoVXNiVW5pb25GdW5EZXNjcmlw dG9yID09IE5VTEwpIHsNCj4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiAr ICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gR2V0RnVuY3Rpb25hbERlc2NyaXB0b3IgKA0KPiArICAg ICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5Db25maWcsDQo+ICsgICAgICAgICAgICAgVU5JT05f RlVOX0RFU0NSSVBUT1IsDQo+ICsgICAgICAgICAgICAgVXNiVW5pb25GdW5EZXNjcmlwdG9yDQo+ ICsgICAgICAgICAgICAgKTsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoq DQo+ICsgIFJldHJpZXZlcyB0aGUgVVNCIEV0aGVybmV0IGZ1bmN0aW9uYWwgRGVzY3JpcHRvci4N Cj4gKw0KPiArICBUaGlzIGZ1bmN0aW9uIGdldCB0aGUgTWFjIEFkZHJlc3MsIEV0aGVybmV0IHN0 YXRpc3RpY3MsIG1heGltdW0gc2VnbWVudCBzaXplLA0KPiArICBudW1iZXIgb2YgbXVsdGljYXN0 IGZpbHRlcnMsIGFuZCBudW1iZXIgb2YgcGF0dGVybiBmaWx0ZXJzIGZyb20gRXRoZXJuZXQNCj4g KyAgZnVuY3Rpb25hbCBEZXNjcmlwdG9yLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAg ICAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9D T0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtvdXRdIFVzYkV0aEZ1bkRlc2NyaXB0b3IgICAgQSBw b2ludGVyIHRvIHRoZSBjYWxsZXIgYWxsb2NhdGVkIFVTQiBFdGhlcm5ldCBGdW5jdGlvbmFsIERl c2NyaXB0b3IuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBV U0IgRXRoZXJuZXQgRnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcyByZXRyaWV2ZWQgc3VjY2Vzc2Z1 bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgVXNiRXRoRnVuRGVzY3Jp cHRvciBpcyBOVUxMLg0KPiArICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICAgVGhlIFVT QiBFdGhlcm5ldCBGdW5jdGlvbmFsIGRlc2NyaXB0b3Igd2FzIG5vdCBmb3VuZC4NCj4gKw0KPiAr KiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0dldFVzYlJuZGlzRnVuRGVzY3JpcHRv ciAoDQo+ICsgIElOICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBP VVQgVVNCX0VUSEVSTkVUX0ZVTl9ERVNDUklQVE9SICAqVXNiRXRoRnVuRGVzY3JpcHRvcg0KPiAr ICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgIFN0YXR1czsNCj4gKyAgVVNCX1JORElT X0RFVklDRSAgKlVzYlJuZGlzRGV2aWNlOw0KPiArDQo+ICsgIFVzYlJuZGlzRGV2aWNlID0gVVNC X1JORElTX0RFVklDRV9GUk9NX1RISVMgKFRoaXMpOw0KPiArDQo+ICsgIGlmIChVc2JFdGhGdW5E ZXNjcmlwdG9yID09IE5VTEwpIHsNCj4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVS Ow0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gR2V0RnVuY3Rpb25hbERlc2NyaXB0b3IgKA0K PiArICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5Db25maWcsDQo+ICsgICAgICAgICAgICAg RVRIRVJORVRfRlVOX0RFU0NSSVBUT1IsDQo+ICsgICAgICAgICAgICAgVXNiRXRoRnVuRGVzY3Jp cHRvcg0KPiArICAgICAgICAgICAgICk7DQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsN Cj4gKy8qKg0KPiArICBUaGlzIHJlcXVlc3Qgc2V0cyB0aGUgRXRoZXJuZXQgZGV2aWNlIG11bHRp Y2FzdCBmaWx0ZXJzIGFzIHNwZWNpZmllZCBpbiB0aGUNCj4gKyAgc2VxdWVudGlhbCBsaXN0IG9m IDQ4IGJpdCBFdGhlcm5ldCBtdWx0aWNhc3QgYWRkcmVzc2VzLg0KPiArDQo+ICsgIEBwYXJhbVtp bl0gIFRoaXMgICAgICAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFREtJSV9VU0JfRVRI RVJORVRfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gIFZhbHVlICAgICAgICAg ICAgICAgICAgTnVtYmVyIG9mIGZpbHRlcnMuDQo+ICsgIEBwYXJhbVtpbl0gIE1jYXN0QWRkciAg ICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSB2YWx1ZSBvZiB0aGUgbXVsdGljYXN0IGFkZHJl c3Nlcy4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIHJlcXVl c3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAg ICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJl dHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBk ZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBPbmUgb2Yg dGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQgdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJX1VO U1VQUE9SVEVEICAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFU VVMNCj4gK0VGSUFQSQ0KPiArU2V0VXNiUm5kaXNNY2FzdEZpbHRlciAoDQo+ICsgIElOIEVES0lJ X1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOIFVJTlQxNiAgICAgICAgICAg ICAgICAgICAgICAgVmFsdWUsDQo+ICsgIElOIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAg Kk1jYXN0QWRkcg0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAg ICAgU3RhdHVzOw0KPiArICBFRklfVVNCX0RFVklDRV9SRVFVRVNUICAgICAgIFJlcXVlc3Q7DQo+ ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNTdGF0dXM7DQo+ICsgIFVTQl9F VEhFUk5FVF9GVU5fREVTQ1JJUFRPUiAgVXNiRXRoRnVuRGVzY3JpcHRvcjsNCj4gKyAgVVNCX1JO RElTX0RFVklDRSAgICAgICAgICAgICAqVXNiUm5kaXNEZXZpY2U7DQo+ICsNCj4gKyAgVXNiUm5k aXNEZXZpY2UgPSBVU0JfUk5ESVNfREVWSUNFX0ZST01fVEhJUyAoVGhpcyk7DQo+ICsNCj4gKyAg U3RhdHVzID0gVGhpcy0+VXNiRXRoRnVuRGVzY3JpcHRvciAoVGhpcywgJlVzYkV0aEZ1bkRlc2Ny aXB0b3IpOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0 YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmICgoVXNiRXRoRnVuRGVzY3JpcHRvci5OdW1iZXJN Y0ZpbHRlcnMgPDwgMSkgPT0gMCkgew0KPiArICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+ ICsgIH0NCj4gKw0KPiArICBSZXF1ZXN0LlJlcXVlc3RUeXBlID0gVVNCX0VUSEVSTkVUX1NFVF9S RVFfVFlQRTsNCj4gKyAgUmVxdWVzdC5SZXF1ZXN0ICAgICA9IFNFVF9FVEhfTVVMVElDQVNUX0ZJ TFRFUlNfUkVROw0KPiArICBSZXF1ZXN0LlZhbHVlICAgICAgID0gVmFsdWU7DQo+ICsgIFJlcXVl c3QuSW5kZXggICAgICAgPSBVc2JSbmRpc0RldmljZS0+TnVtT2ZJbnRlcmZhY2U7DQo+ICsgIFJl cXVlc3QuTGVuZ3RoICAgICAgPSBWYWx1ZSAqIDY7DQo+ICsNCj4gKyAgcmV0dXJuIFVzYlJuZGlz RGV2aWNlLT5Vc2JJby0+VXNiQ29udHJvbFRyYW5zZmVyICgNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBVc2JSbmRpc0RldmljZS0+VXNiSW8sDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJlJlcXVlc3QsDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRWZpVXNiRGF0YU91dCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBVU0JfRVRIRVJORVRfVFJBTlNGRVJfVElNRU9VVCwNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBNY2FzdEFkZHIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUmVxdWVzdC5MZW5ndGgsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJlRyYW5zU3RhdHVzDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgcmVxdWVzdCBzZXRzIHVwIHRoZSBz cGVjaWZpZWQgRXRoZXJuZXQgcG93ZXIgbWFuYWdlbWVudCBwYXR0ZXJuIGZpbHRlciBhcw0KPiAr ICBkZXNjcmliZWQgaW4gdGhlIGRhdGEgc3RydWN0dXJlLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0g IFRoaXMgICAgICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhFUk5F VF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAgVmFsdWUgICAgICAgICAgICAg ICAgIE51bWJlciBvZiBmaWx0ZXJzLg0KPiArICBAcGFyYW1baW5dICBMZW5ndGggICAgICAgICAg ICAgICAgU2l6ZSBvZiB0aGUgcG93ZXIgbWFuYWdlbWVudCBwYXR0ZXJuIGZpbHRlciBkYXRhLg0K PiArICBAcGFyYW1baW5dICBQYXR0ZXJuRmlsdGVyICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBw b3dlciBtYW5hZ2VtZW50IHBhdHRlcm4gZmlsdGVyIHN0cnVjdHVyZS4NCj4gKw0KPiArICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1 bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICAgQSB0aW1lb3V0IG9jY3Vy cmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9S ICAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEBy ZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFu IGludmFsaWQgdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgICBOb3Qg c3VwcG9ydGVkLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArU2V0 VXNiUm5kaXNQb3dlckZpbHRlciAoDQo+ICsgIElOIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NP TCAgKlRoaXMsDQo+ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUsDQo+ ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoLA0KPiArICBJTiBWT0lE ICAgICAgICAgICAgICAgICAgICAgICAgICpQYXR0ZXJuRmlsdGVyDQo+ICsgICkNCj4gK3sNCj4g KyAgRUZJX1VTQl9ERVZJQ0VfUkVRVUVTVCAgUmVxdWVzdDsNCj4gKyAgVUlOVDMyICAgICAgICAg ICAgICAgICAgVHJhbnNTdGF0dXM7DQo+ICsgIFVTQl9STkRJU19ERVZJQ0UgICAgICAgICpVc2JS bmRpc0RldmljZTsNCj4gKw0KPiArICBVc2JSbmRpc0RldmljZSA9IFVTQl9STkRJU19ERVZJQ0Vf RlJPTV9USElTIChUaGlzKTsNCj4gKw0KPiArICBSZXF1ZXN0LlJlcXVlc3RUeXBlID0gVVNCX0VU SEVSTkVUX1NFVF9SRVFfVFlQRTsNCj4gKyAgUmVxdWVzdC5SZXF1ZXN0ICAgICA9IFNFVF9FVEhf UE9XRVJfTUFOQUdFTUVOVF9QQVRURVJOX0ZJTFRFUl9SRVE7DQo+ICsgIFJlcXVlc3QuVmFsdWUg ICAgICAgPSBWYWx1ZTsNCj4gKyAgUmVxdWVzdC5JbmRleCAgICAgICA9IFVzYlJuZGlzRGV2aWNl LT5OdW1PZkludGVyZmFjZTsNCj4gKyAgUmVxdWVzdC5MZW5ndGggICAgICA9IExlbmd0aDsNCj4g Kw0KPiArICByZXR1cm4gVXNiUm5kaXNEZXZpY2UtPlVzYklvLT5Vc2JDb250cm9sVHJhbnNmZXIg KA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5V c2JJbywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUmVxdWVzdCwNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZmlVc2JEYXRhT3V0LA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9FVEhFUk5FVF9UUkFOU0ZFUl9USU1F T1VULA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhdHRlcm5GaWx0ZXIs DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoLA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZUcmFuc1N0YXR1cw0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIHJl cXVlc3QgcmV0cmlldmVzIHRoZSBzdGF0dXMgb2YgdGhlIHNwZWNpZmllZCBFdGhlcm5ldCBwb3dl ciBtYW5hZ2VtZW50DQo+ICsgIHBhdHRlcm4gZmlsdGVyIGZyb20gdGhlIGRldmljZS4NCj4gKw0K PiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUg RURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dICBW YWx1ZSAgICAgICAgICAgICAgICAgIFRoZSBmaWx0ZXIgbnVtYmVyLg0KPiArICBAcGFyYW1bb3V0 XSBQYXR0ZXJuQWN0aXZlICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgcGF0dGVybiBhY3RpdmUg Ym9vbGVhbi4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIHJl cXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAg ICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAg QHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8g YSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBPbmUg b2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQgdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJ X1VOU1VQUE9SVEVEICAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9T VEFUVVMNCj4gK0VGSUFQSQ0KPiArR2V0VXNiUm5kaXNQb3dlckZpbHRlciAoDQo+ICsgIElOICBF REtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiAgVUlOVDE2ICAgICAg ICAgICAgICAgICAgICAgICBWYWx1ZSwNCj4gKyAgT1VUIEJPT0xFQU4gICAgICAgICAgICAgICAg ICAgICAgKlBhdHRlcm5BY3RpdmUNCj4gKyAgKQ0KPiArew0KPiArICBFRklfVVNCX0RFVklDRV9S RVFVRVNUICBSZXF1ZXN0Ow0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICBUcmFuc1N0YXR1 czsNCj4gKyAgVVNCX1JORElTX0RFVklDRSAgICAgICAgKlVzYlJuZGlzRGV2aWNlOw0KPiArDQo+ ICsgIFVzYlJuZGlzRGV2aWNlID0gVVNCX1JORElTX0RFVklDRV9GUk9NX1RISVMgKFRoaXMpOw0K PiArDQo+ICsgIFJlcXVlc3QuUmVxdWVzdFR5cGUgPSBVU0JfRVRIRVJORVRfR0VUX1JFUV9UWVBF Ow0KPiArICBSZXF1ZXN0LlJlcXVlc3QgICAgID0gR0VUX0VUSF9QT1dFUl9NQU5BR0VNRU5UX1BB VFRFUk5fRklMVEVSX1JFUTsNCj4gKyAgUmVxdWVzdC5WYWx1ZSAgICAgICA9IFZhbHVlOw0KPiAr ICBSZXF1ZXN0LkluZGV4ICAgICAgID0gVXNiUm5kaXNEZXZpY2UtPk51bU9mSW50ZXJmYWNlOw0K PiArICBSZXF1ZXN0Lkxlbmd0aCAgICAgID0gVVNCX0VUSF9QT1dFUl9GSUxURVJfTEVOR1RIOw0K PiArDQo+ICsgIHJldHVybiBVc2JSbmRpc0RldmljZS0+VXNiSW8tPlVzYkNvbnRyb2xUcmFuc2Zl ciAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2Ut PlVzYklvLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZSZXF1ZXN0LA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVmaVVzYkRhdGFJbiwNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0JfRVRIRVJORVRfVFJBTlNGRVJfVElN RU9VVCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXR0ZXJuQWN0aXZl LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9FVEhfUE9XRVJfRklM VEVSX0xFTkdUSCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmVHJhbnNT dGF0dXMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiArfQ0KPiAr DQo+ICsvKioNCj4gKw0KPiArICBDb252ZXJ0cyBQWEUgZmlsdGVyIHNldHRpbmdzIHRvIFJORElT IHZhbHVlcw0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFZhbHVlICAgICAgUFhFIGZpbHRlciBkYXRh Lg0KPiArICBAcGFyYW1bb3V0XSBDZGNGaWx0ZXIgIEEgcG9pbnRlciB0byB0aGUgRXRoZXJuZXQg UGFja2V0IEZpbHRlciBCaXRtYXAgdmFsdWUgY29udmVydGVkIGJ5IFBYRV9PUEZMQUdTLg0KPiAr DQo+ICsqKi8NCj4gK1ZPSUQNCj4gK0NvbnZlcnRGaWx0ZXIgKA0KPiArICBJTiAgVUlOVDE2ICBW YWx1ZSwNCj4gKyAgT1VUIFVJTlQxNiAgKkNkY0ZpbHRlcg0KPiArICApDQo+ICt7DQo+ICsgIFVJ TlQzMiAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAg Q291bnQ7DQo+ICsgIHN0YXRpYyBzdHJ1Y3QgQklUX01BUCAgVGFibGVbXSA9IHsNCj4gKyAgICB7 IFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX1VOSUNBU1QsICAgICAgICAgICAgTkRJU19QQUNL RVRfVFlQRV9ESVJFQ1RFRCAgICAgIH0sDQo+ICsgICAgeyBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJ TFRFUl9CUk9BRENBU1QsICAgICAgICAgIE5ESVNfUEFDS0VUX1RZUEVfQlJPQURDQVNUICAgICB9 LA0KPiArICAgIHsgUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfRklMVEVSRURfTVVMVElDQVNU LCBORElTX1BBQ0tFVF9UWVBFX01VTFRJQ0FTVCAgICAgfSwNCj4gKyAgICB7IFBYRV9PUEZMQUdT X1JFQ0VJVkVfRklMVEVSX1BST01JU0NVT1VTLCAgICAgICAgTkRJU19QQUNLRVRfVFlQRV9QUk9N SVNDVU9VUyAgIH0sDQo+ICsgICAgeyBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9BTExfTVVM VElDQVNULCAgICAgIE5ESVNfUEFDS0VUX1RZUEVfQUxMX01VTFRJQ0FTVCB9LA0KPiArICB9Ow0K PiArDQo+ICsgIENvdW50ID0gc2l6ZW9mIChUYWJsZSkvc2l6ZW9mIChUYWJsZVswXSk7DQo+ICsN Cj4gKyAgZm9yIChJbmRleCA9IDA7IChUYWJsZVtJbmRleF0uU3JjICE9IDApICYmIChJbmRleCA8 IENvdW50KTsgSW5kZXgrKykgew0KPiArICAgIGlmIChUYWJsZVtJbmRleF0uU3JjICYgVmFsdWUp IHsNCj4gKyAgICAgICpDZGNGaWx0ZXIgfD0gVGFibGVbSW5kZXhdLkRzdDsNCj4gKyAgICB9DQo+ ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsNCj4gKyAgVXBkYXRlcyBGaWx0ZXIgc2V0dGlu Z3Mgb24gdGhlIGRldmljZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0 byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEg cG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ ICsgIEByZXR2YWwgRUZJX1NUQVRVUw0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VG SUFQSQ0KPiArUm5kaXNVbmRpUmVjZWl2ZUZpbHRlciAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNk YiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRV UyAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAg ICAgICAgKk1jYXN0TGlzdDsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICBDb3Vu dDsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICBJbmRleDE7DQo+ICsgIFVJTlQ4 ICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXgyOw0KPiArICBVSU5UNjQgICAgICAgICAgICAg ICAgICAgICAgIENwYkFkZHI7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgQ3Bi U2l6ZTsNCj4gKyAgVUlOVDE2ICAgICAgICAgICAgICAgICAgICAgICBTZXRGaWx0ZXI7DQo+ICsg IFBYRV9DUEJfUkVDRUlWRV9GSUxURVJTICAgICAgKkNwYjsNCj4gKyAgVVNCX0VUSEVSTkVUX0ZV Tl9ERVNDUklQVE9SICBVc2JFdGhGdW5EZXNjcmlwdG9yOw0KPiArDQo+ICsgIENvdW50ICAgICA9 IDA7DQo+ICsgIENwYkFkZHIgICA9IENkYi0+Q1BCYWRkcjsNCj4gKyAgQ3BiU2l6ZSAgID0gQ2Ri LT5DUEJzaXplOw0KPiArICBTZXRGaWx0ZXIgPSAoVUlOVDE2KShDZGItPk9wRmxhZ3MgJiAweDFG KTsNCj4gKyAgQ3BiICAgICAgID0gKFBYRV9DUEJfUkVDRUlWRV9GSUxURVJTICopKFVJTlROKUNw YkFkZHI7DQo+ICsNCj4gKyAgLy8gVGhlIENwYiBjb3VsZCBiZSBOVUxMLihyZWY6UFhFX0NQQkFE RFJfTk9UX1VTRUQpDQo+ICsgIE5pYy0+UnhGaWx0ZXIgPSAoVUlOVDgpU2V0RmlsdGVyOw0KPiAr DQo+ICsgIGlmICgoKFNldEZpbHRlciAmIFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX0ZJTFRF UkVEX01VTFRJQ0FTVCkgIT0gMCkgfHwgKENwYiAhPSBOVUxMKSkgew0KPiArICAgIGlmIChDcGIg IT0gTlVMTCkgew0KPiArICAgICAgTmljLT5NY2FzdENvdW50ID0gKFVJTlQ4KShDcGJTaXplIC8g UFhFX01BQ19MRU5HVEgpOw0KPiArICAgICAgQ29weU1lbSAoJk5pYy0+TWNhc3RMaXN0LCBDcGIs IE5pYy0+TWNhc3RDb3VudCk7DQo+ICsgICAgfSBlbHNlIHsNCj4gKyAgICAgIE5pYy0+TWNhc3RD b3VudCA9IDA7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgTmljLT5Vc2JFdGgtPlVzYkV0aEZ1bkRl c2NyaXB0b3IgKE5pYy0+VXNiRXRoLCAmVXNiRXRoRnVuRGVzY3JpcHRvcik7DQo+ICsgICAgaWYg KChVc2JFdGhGdW5EZXNjcmlwdG9yLk51bWJlck1jRmlsdGVycyA8PCAxKSA9PSAwKSB7DQo+ICsg ICAgICBOaWMtPlJ4RmlsdGVyIHw9IFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX0FMTF9NVUxU SUNBU1Q7DQo+ICsgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJTZXRVc2JFdGhQYWNrZXRGaWx0 ZXIgTmljICVseCBOaWMtPlVzYkV0aCAlbHggIiwgTmljLCBOaWMtPlVzYkV0aCkpOw0KPiArICAg ICAgTmljLT5Vc2JFdGgtPlNldFVzYkV0aFBhY2tldEZpbHRlciAoTmljLT5Vc2JFdGgsIE5pYy0+ UnhGaWx0ZXIpOw0KPiArICAgIH0gZWxzZSB7DQo+ICsgICAgICBTdGF0dXMgPSBnQlMtPkFsbG9j YXRlUG9vbCAoRWZpQm9vdFNlcnZpY2VzRGF0YSwgTmljLT5NY2FzdENvdW50ICogNiwgKFZPSUQg KiopJk1jYXN0TGlzdCk7DQo+ICsgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsg ICAgICAgIHJldHVybiBQWEVfU1RBVENPREVfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgICAgICB9 DQo+ICsNCj4gKyAgICAgIGlmIChDcGIgIT0gTlVMTCkgew0KPiArICAgICAgICBmb3IgKEluZGV4 MSA9IDA7IEluZGV4MSA8IE5pYy0+TWNhc3RDb3VudDsgSW5kZXgxKyspIHsNCj4gKyAgICAgICAg ICBmb3IgKEluZGV4MiA9IDA7IEluZGV4MiA8IDY7IEluZGV4MisrKSB7DQo+ICsgICAgICAgICAg ICBNY2FzdExpc3RbQ291bnQrK10gPSBDcGItPk1DYXN0TGlzdFtJbmRleDFdW0luZGV4Ml07DQo+ ICsgICAgICAgICAgfQ0KPiArICAgICAgICB9DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIE5p Yy0+UnhGaWx0ZXIgfD0gUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfRklMVEVSRURfTVVMVElD QVNUOw0KPiArICAgICAgaWYgKENwYiAhPSBOVUxMKSB7DQo+ICsgICAgICAgIE5pYy0+VXNiRXRo LT5TZXRVc2JFdGhNY2FzdEZpbHRlciAoTmljLT5Vc2JFdGgsIE5pYy0+TWNhc3RDb3VudCwgTWNh c3RMaXN0KTsNCj4gKyAgICAgIH0NCj4gKw0KPiArICAgICAgTmljLT5Vc2JFdGgtPlNldFVzYkV0 aFBhY2tldEZpbHRlciAoTmljLT5Vc2JFdGgsIE5pYy0+UnhGaWx0ZXIpOw0KPiArICAgICAgRnJl ZVBvb2wgKE1jYXN0TGlzdCk7DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIEVG SV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyByZXF1ZXN0IGlzIHVzZWQg dG8gY29uZmlndXJlIGRldmljZSBFdGhlcm5ldCBwYWNrZXQgZmlsdGVyIHNldHRpbmdzLg0KPiAr DQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRURL SUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dICBWYWx1 ZSAgICAgICAgICAgICBQYWNrZXQgRmlsdGVyIEJpdG1hcC4NCj4gKw0KPiArICBAcmV0dmFsIEVG SV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVj dXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRo ZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJ X0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZCB2 YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4N Cj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1NldFVzYlJuZGlzUGFj a2V0RmlsdGVyICgNCj4gKyAgSU4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywN Cj4gKyAgSU4gVUlOVDE2ICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZQ0KPiArICApDQo+ICt7 DQo+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMg cmVxdWVzdCBpcyB1c2VkIHRvIHJldHJpZXZlIGEgc3RhdGlzdGljIGJhc2VkIG9uIHRoZSBmZWF0 dXJlIHNlbGVjdG9yLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICAg ICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4N Cj4gKyAgQHBhcmFtW2luXSAgRmVhdHVyZVNlbGVjdG9yICAgICAgIFZhbHVlIG9mIHRoZSBmZWF0 dXJlIHNlbGVjdG9yLg0KPiArICBAcGFyYW1bb3V0XSBTdGF0aXN0aWMgICAgICAgICAgICAgQSBw b2ludGVyIHRvIHRoZSAzMiBiaXQgdW5zaWduZWQgaW50ZWdlci4NCj4gKw0KPiArICBAcmV0dmFs IEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHku DQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBl eGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAg IFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwg RUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxp ZCB2YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRl ZC4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0dldFJuZGlzU3Rh dGlzdGljICgNCj4gKyAgSU4gIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ ICsgIElOICBVSU5UMTYgICAgICAgICAgICAgICAgICAgICAgIEZlYXR1cmVTZWxlY3RvciwNCj4g KyAgT1VUIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgKlN0YXRpc3RpYw0KPiArICApDQo+ ICt7DQo+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRo aXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gVW5kaVN0YXJ0IGlzIGludm9rZWQuDQo+ICsNCj4g KyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBi bG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50 ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsNCj4gKyoqLw0KPiArRUZJ X1NUQVRVUw0KPiArRUZJQVBJDQo+ICtSbmRpc1VuZGlTdGFydCAoDQo+ICsgIElOICBQWEVfQ0RC ICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJ X1NUQVRVUyAgU3RhdHVzOw0KPiArDQo+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIlJuZGlzVW5k aVN0YXJ0IE5pYyAlbHggQ2RiICVseCBOaWMgU3RhdGUgJXhcbiIsIE5pYywgQ2RiLCBOaWMtPlN0 YXRlKSk7DQo+ICsNCj4gKyAgLy8gSXNzdWUgUm5kaXMgUmVzZXQgYW5kIGJyaW5nIHRoZSBkZXZp Y2UgdG8gUk5ESVNfQlVTX0lOSVRJQUxJWkVEIHN0YXRlDQo+ICsgIFN0YXR1cyA9IFJuZGlzVW5k aVJlc2V0IChDZGIsIE5pYyk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAg ICBSbmRpc1VuZGlSZXNldCAoQ2RiLCBOaWMpOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0g Um5kaXNVbmRpSW5pdGlhbGl6ZSAoQ2RiLCBOaWMpOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQo+ICsgICAgUm5kaXNVbmRpSW5pdGlhbGl6ZSAoQ2RiLCBOaWMpOw0KPiArICB9DQo+ ICsNCj4gKyAgUm5kaXNVbmRpU2h1dGRvd24gKENkYiwgTmljKTsNCj4gKw0KPiArICByZXR1cm4g RUZJX1NVQ0NFU1M7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGZ1bmN0aW9uIGlzIGNh bGxlZCB3aGVuIFVuZGlzdG9wIGlzIGludm9rZWQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2Ri ICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFt W2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIg ZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICBUaGUgcmVxdWVzdCBleGVj dXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiAr Um5kaXNVbmRpU3RvcCAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19E QVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiUm5kaXNV bmRpU3RvcCBTdGF0ZSAleFxuIiwgTmljLT5TdGF0ZSkpOw0KPiArICByZXR1cm4gRUZJX1NVQ0NF U1M7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVu IFVuZGlHZXRJbml0SW5mbyBpcyBpbnZva2VkLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAg QSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtp bl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRh dGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgVGhlIHJlcXVlc3QgZXhlY3V0 ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0K PiArUm5kaXNVbmRpR2V0SW5pdEluZm8gKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsg IElOICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5F VF9QUk9UT0NPTCAgKlVzYkV0aERldmljZTsNCj4gKyAgVVNCX1JORElTX0RFVklDRSAgICAgICAg ICAgICAqVXNiUm5kaXNEZXZpY2U7DQo+ICsgIFBYRV9EQl9HRVRfSU5JVF9JTkZPICAgICAgICAg KkRiOw0KPiArDQo+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIlJuZGlzVW5kaUdldEluaXRJbmZv XG4iKSk7DQo+ICsNCj4gKyAgVXNiRXRoRGV2aWNlICAgPSBOaWMtPlVzYkV0aDsNCj4gKyAgVXNi Um5kaXNEZXZpY2UgPSBVU0JfUk5ESVNfREVWSUNFX0ZST01fVEhJUyAoVXNiRXRoRGV2aWNlKTsN Cj4gKw0KPiArICBEYiA9IChQWEVfREJfR0VUX0lOSVRfSU5GTyAqKShVSU5UTilDZGItPkRCYWRk cjsNCj4gKw0KPiArICBEYi0+RnJhbWVEYXRhTGVuID0gVXNiUm5kaXNEZXZpY2UtPk1heFRyYW5z ZmVyU2l6ZSAtIHNpemVvZiAoUkVNT1RFX05ESVNfUEFDS0VUX01TRykgLSBQWEVfTUFDX0hFQURF Ul9MRU5fRVRIRVI7DQo+ICsgIC8vIExpbWl0IE1heCBNVFUgc2l6ZSB0byAxNTAwIGJ5dGVzIGFz IFJORElTIHNwZWMuDQo+ICsgIGlmIChEYi0+RnJhbWVEYXRhTGVuID4gUFhFX01BWF9UWFJYX1VO SVRfRVRIRVIpIHsNCj4gKyAgICBEYi0+RnJhbWVEYXRhTGVuID0gUFhFX01BWF9UWFJYX1VOSVRf RVRIRVI7DQo+ICsgIH0NCj4gKw0KPiArICBERUJVRyAoKERFQlVHX0lORk8sICJEYi0+RnJhbWVE YXRhTGVuICV4XG4iLCBEYi0+RnJhbWVEYXRhTGVuKSk7DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9T VUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQg d2hlbiBSbmRpc1VuZGlHZXRDb25maWdJbmZvIGlzIGludm9rZWQuDQo+ICsNCj4gKyAgQHBhcmFt W2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4g KyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNv bnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICBUaGUgcmVx dWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0K PiArRUZJQVBJDQo+ICtSbmRpc1VuZGlHZXRDb25maWdJbmZvICgNCj4gKyAgSU4gIFBYRV9DREIg ICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBERUJV RyAoKERFQlVHX0lORk8sICJSbmRpc1VuZGlHZXRDb25maWdJbmZvXG4iKSk7DQo+ICsgIHJldHVy biBFRklfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgZnVuY3Rpb24gaXMg Y2FsbGVkIHdoZW4gVW5kaUluaXRpYWxpemUgaXMgaW52b2tlZC4NCj4gKw0KPiArICBAcGFyYW1b aW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiAr ICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29u dHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRo ZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQ T1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ ICtFRklBUEkNCj4gK1JuZGlzVW5kaUluaXRpYWxpemUgKA0KPiArICBJTiAgUFhFX0NEQiAgICpD ZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsgIEVES0lJX1VT Ql9FVEhFUk5FVF9QUk9UT0NPTCAgICpVc2JFdGhEcml2ZXI7DQo+ICsgIFVTQl9STkRJU19ERVZJ Q0UgICAgICAgICAgICAgICpVc2JSbmRpc0RldmljZTsNCj4gKyAgUkVNT1RFX05ESVNfSU5JVElB TElaRV9NU0cgICAgUm5kaXNJbml0TXNnOw0KPiArICBSRU1PVEVfTkRJU19JTklUSUFMSVpFX0NN UExUICBSbmRpc0luaXRNc2dDbXBsdDsNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAg ICAgU3RhdHVzOw0KPiArDQo+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIlJuZGlzVW5kaUluaXRp YWxpemVcbiIpKTsNCj4gKw0KPiArICBVc2JFdGhEcml2ZXIgICA9IE5pYy0+VXNiRXRoOw0KPiAr ICBVc2JSbmRpc0RldmljZSA9IFVTQl9STkRJU19ERVZJQ0VfRlJPTV9USElTIChVc2JFdGhEcml2 ZXIpOw0KPiArDQo+ICsgIFplcm9NZW0gKCZSbmRpc0luaXRNc2csIHNpemVvZiAoUkVNT1RFX05E SVNfSU5JVElBTElaRV9NU0cpKTsNCj4gKyAgWmVyb01lbSAoJlJuZGlzSW5pdE1zZ0NtcGx0LCBz aXplb2YgKFJFTU9URV9ORElTX0lOSVRJQUxJWkVfQ01QTFQpKTsNCj4gKw0KPiArICBSbmRpc0lu aXRNc2cuTWVzc2FnZVR5cGUgICAgID0gUk5ESVNfSU5JVElBTElaRV9NU0c7DQo+ICsgIFJuZGlz SW5pdE1zZy5NZXNzYWdlTGVuZ3RoICAgPSBzaXplb2YgKFJFTU9URV9ORElTX0lOSVRJQUxJWkVf TVNHKTsNCj4gKyAgUm5kaXNJbml0TXNnLlJlcXVlc3RJRCAgICAgICA9IFVzYlJuZGlzRGV2aWNl LT5SZXF1ZXN0SWQ7DQo+ICsgIFJuZGlzSW5pdE1zZy5NYWpvclZlcnNpb24gICAgPSBSTkRJU19N QUpPUl9WRVJTSU9OOw0KPiArICBSbmRpc0luaXRNc2cuTWlub3JWZXJzaW9uICAgID0gUk5ESVNf TUlOT1JfVkVSU0lPTjsNCj4gKyAgUm5kaXNJbml0TXNnLk1heFRyYW5zZmVyU2l6ZSA9IFJORElT X01BWF9UUkFOU0ZFUl9TSVpFOw0KPiArDQo+ICsgIFJuZGlzSW5pdE1zZ0NtcGx0Lk1lc3NhZ2VU eXBlICAgPSBSTkRJU19JTklUSUFMSVpFX0NNUExUOw0KPiArICBSbmRpc0luaXRNc2dDbXBsdC5N ZXNzYWdlTGVuZ3RoID0gc2l6ZW9mIChSRU1PVEVfTkRJU19JTklUSUFMSVpFX0NNUExUKTsNCj4g Kw0KPiArICBTdGF0dXMgPSBSbmRpc0NvbnRyb2xNc2cgKFVzYlJuZGlzRGV2aWNlLCAoUkVNT1RF X05ESVNfTVNHX0hFQURFUiAqKSZSbmRpc0luaXRNc2csIChSRU1PVEVfTkRJU19NU0dfSEVBREVS ICopJlJuZGlzSW5pdE1zZ0NtcGx0KTsNCj4gKw0KPiArICBVc2JSbmRpc0RldmljZS0+UmVxdWVz dElkKys7DQo+ICsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSB8fCAoUm5kaXNJbml0TXNn Q21wbHQuU3RhdHVzICYgMHg4MDAwMDAwMCkpIHsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiAr ICB9DQo+ICsNCj4gKyAgLy8gT25seSBXaXJlZCBNZWRpdW0gaXMgc3VwcG9ydGVkDQo+ICsgIGlm IChSbmRpc0luaXRNc2dDbXBsdC5NZWRpdW0pIHsNCj4gKyAgICByZXR1cm4gRUZJX1VOU1VQUE9S VEVEOw0KPiArICB9DQo+ICsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPk1lZGl1bSAgICAgICAgICAg ICAgICA9IFJuZGlzSW5pdE1zZ0NtcGx0Lk1lZGl1bTsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPk1h eFBhY2tldHNQZXJUcmFuc2ZlciA9IFJuZGlzSW5pdE1zZ0NtcGx0Lk1heFBhY2tldHNQZXJUcmFu c2ZlcjsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPk1heFRyYW5zZmVyU2l6ZSAgICAgICA9IFJuZGlz SW5pdE1zZ0NtcGx0Lk1heFRyYW5zZmVyU2l6ZTsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlBhY2tl dEFsaWdubWVudEZhY3RvciA9IFJuZGlzSW5pdE1zZ0NtcGx0LlBhY2tldEFsaWdubWVudEZhY3Rv cjsNCj4gKw0KPiArICBERUJVRyAoKERFQlVHX0lORk8sICJNZWRpdW0gOiAleCBcbiIsIFJuZGlz SW5pdE1zZ0NtcGx0Lk1lZGl1bSkpOw0KPiArICBERUJVRyAoKERFQlVHX0lORk8sICJNYXhQYWNr ZXRzUGVyVHJhbnNmZXIgOiAleCBcbiIsIFJuZGlzSW5pdE1zZ0NtcGx0Lk1heFBhY2tldHNQZXJU cmFuc2ZlcikpOw0KPiArICBERUJVRyAoKERFQlVHX0lORk8sICJNYXhUcmFuc2ZlclNpemUgOiAl eFxuIiwgUm5kaXNJbml0TXNnQ21wbHQuTWF4VHJhbnNmZXJTaXplKSk7DQo+ICsgIERFQlVHICgo REVCVUdfSU5GTywgIlBhY2tldEFsaWdubWVudEZhY3RvciA6ICV4XG4iLCBSbmRpc0luaXRNc2dD bXBsdC5QYWNrZXRBbGlnbm1lbnRGYWN0b3IpKTsNCj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0K PiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBVbmRp UmVzZXQgaXMgaW52b2tlZC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0 byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEg cG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1 Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVl c3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RB VFVTDQo+ICtFRklBUEkNCj4gK1JuZGlzVW5kaVJlc2V0ICgNCj4gKyAgSU4gIFBYRV9DREIgICAq Q2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBFREtJSV9V U0JfRVRIRVJORVRfUFJPVE9DT0wgICpVc2JFdGhEcml2ZXI7DQo+ICsgIFVTQl9STkRJU19ERVZJ Q0UgICAgICAgICAgICAgKlVzYlJuZGlzRGV2aWNlOw0KPiArICBSRU1PVEVfTkRJU19SRVNFVF9N U0cgICAgICAgIFJuZGlzUmVzZXRNc2c7DQo+ICsgIFJFTU9URV9ORElTX1JFU0VUX0NNUExUICAg ICAgUm5kaXNSZXNldENtcGx0Ow0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgIFN0 YXR1czsNCj4gKw0KPiArICBERUJVRyAoKERFQlVHX0lORk8sICJSbmRpc1VuZGlSZXNldFxuIikp Ow0KPiArDQo+ICsgIFVzYkV0aERyaXZlciAgID0gTmljLT5Vc2JFdGg7DQo+ICsgIFVzYlJuZGlz RGV2aWNlID0gVVNCX1JORElTX0RFVklDRV9GUk9NX1RISVMgKFVzYkV0aERyaXZlcik7DQo+ICsN Cj4gKyAgWmVyb01lbSAoJlJuZGlzUmVzZXRNc2csIHNpemVvZiAoUkVNT1RFX05ESVNfUkVTRVRf TVNHKSk7DQo+ICsgIFplcm9NZW0gKCZSbmRpc1Jlc2V0Q21wbHQsIHNpemVvZiAoUkVNT1RFX05E SVNfUkVTRVRfQ01QTFQpKTsNCj4gKw0KPiArICBSbmRpc1Jlc2V0TXNnLk1lc3NhZ2VUeXBlICAg PSBSTkRJU19SRVNFVF9NU0c7DQo+ICsgIFJuZGlzUmVzZXRNc2cuTWVzc2FnZUxlbmd0aCA9IHNp emVvZiAoUkVNT1RFX05ESVNfUkVTRVRfTVNHKTsNCj4gKw0KPiArICBSbmRpc1Jlc2V0Q21wbHQu TWVzc2FnZVR5cGUgICA9IFJORElTX1JFU0VUX0NNUExUOw0KPiArICBSbmRpc1Jlc2V0Q21wbHQu TWVzc2FnZUxlbmd0aCA9IHNpemVvZiAoUkVNT1RFX05ESVNfUkVTRVRfQ01QTFQpOw0KPiArDQo+ ICsgIFN0YXR1cyA9IFJuZGlzQ29udHJvbE1zZyAoVXNiUm5kaXNEZXZpY2UsIChSRU1PVEVfTkRJ U19NU0dfSEVBREVSICopJlJuZGlzUmVzZXRNc2csIChSRU1PVEVfTkRJU19NU0dfSEVBREVSICop JlJuZGlzUmVzZXRDbXBsdCk7DQo+ICsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlJlcXVlc3RJZCA9 IDE7ICAgICAgICAgIC8vIExldCdzIHN0YXJ0IHdpdGggMQ0KPiArDQo+ICsgIGlmIChFRklfRVJS T1IgKFN0YXR1cykgfHwgKFJuZGlzUmVzZXRDbXBsdC5TdGF0dXMgJiAweDgwMDAwMDAwKSkgew0K PiArICAgIHJldHVybiBFRklfREVWSUNFX0VSUk9SOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJu IEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBmdW5jdGlvbiBpcyBj YWxsZWQgd2hlbiBVbmRpU2h1dGRvd24gaXMgaW52b2tlZC4NCj4gKw0KPiArICBAcGFyYW1baW5d ICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBA cGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJv bGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgIFRoZSByZXF1ZXN0 IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtF RklBUEkNCj4gK1JuZGlzVW5kaVNodXRkb3duICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0K PiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBFREtJSV9VU0JfRVRI RVJORVRfUFJPVE9DT0wgICpVc2JFdGhEcml2ZXI7DQo+ICsgIFVTQl9STkRJU19ERVZJQ0UgICAg ICAgICAgICAgKlVzYlJuZGlzRGV2aWNlOw0KPiArICBSRU1PVEVfTkRJU19IQUxUX01TRyAgICAg ICAgIFJuZGlzSGx0TXNnOw0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgIFN0YXR1 czsNCj4gKw0KPiArICBERUJVRyAoKERFQlVHX0lORk8sICJSbmRpc1VuZGlTaHV0ZG93blxuIikp Ow0KPiArDQo+ICsgIFVzYkV0aERyaXZlciAgID0gTmljLT5Vc2JFdGg7DQo+ICsgIFVzYlJuZGlz RGV2aWNlID0gVVNCX1JORElTX0RFVklDRV9GUk9NX1RISVMgKFVzYkV0aERyaXZlcik7DQo+ICsN Cj4gKyAgWmVyb01lbSAoJlJuZGlzSGx0TXNnLCBzaXplb2YgKFJFTU9URV9ORElTX0hBTFRfTVNH KSk7DQo+ICsNCj4gKyAgUm5kaXNIbHRNc2cuTWVzc2FnZVR5cGUgICA9IFJORElTX0hMVF9NU0c7 DQo+ICsgIFJuZGlzSGx0TXNnLk1lc3NhZ2VMZW5ndGggPSBzaXplb2YgKFJFTU9URV9ORElTX0hB TFRfTVNHKTsNCj4gKw0KPiArICBTdGF0dXMgPSBSbmRpc0NvbnRyb2xNc2cgKFVzYlJuZGlzRGV2 aWNlLCAoUkVNT1RFX05ESVNfTVNHX0hFQURFUiAqKSZSbmRpc0hsdE1zZywgTlVMTCk7DQo+ICsN Cj4gKyAgaWYgKFN0YXR1cyA9PSBFRklfREVWSUNFX0VSUk9SKSB7DQo+ICsgICAgU3RhdHVzID0g RUZJX1NVQ0NFU1M7DQo+ICsgIH0NCj4gKw0KPiArICBVc2JSbmRpc0RldmljZS0+UmVxdWVzdElk ID0gMTsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFVwZGF0 ZSB0aGUgTWVkaWEgY29ubmVjdGlvbi4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9p bnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBO aWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0K PiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1 Y2Nlc3NmdWxseS4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1Ju ZGlzVW5kaUdldFN0YXR1cyAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5J Q19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgQ2RiLT5TdGF0RmxhZ3MgJj0gfihQWEVf U1RBVEZMQUdTX0dFVF9TVEFUVVNfTk9fTUVESUEpOw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7 DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUcmFuc21pdCB0aGUgZGF0YSBhZnRlciBhcHBlbmRp bmcgUk5ESVMgaGVhZGVyLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICAgICBDZGIgICAgICAgICAg IEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1b aW5dICAgICAgVGhpcyAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhFUk5F VF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAgICAgIEJ1bGtPdXREYXRhICAg QSBwb2ludGVyIHRvIHRoZSBidWZmZXIgb2YgZGF0YSB0aGF0IHdpbGwgYmUgdHJhbnNtaXR0ZWQg dG8gVVNCDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZSBvciByZWNl aXZlZCBmcm9tIFVTQiBkZXZpY2UuDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSBEYXRhTGVuZ3RoICAg IEEgcG9pbnRlciB0byB0aGUgUGFja2V0TGVuZ3RoLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NV Q0NFU1MgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKw0KPiArKiov DQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1JuZGlzVW5kaVRyYW5zbWl0ICgNCj4gKyAg SU4gICAgICBQWEVfQ0RCICAgICAgICAgICAgICAgICAgICAgICpDZGIsDQo+ICsgIElOICAgICAg RURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gICAgICBWT0lEICAg ICAgICAgICAgICAgICAgICAgICAgICpCdWxrT3V0RGF0YSwNCj4gKyAgSU4gT1VUICBVSU5UTiAg ICAgICAgICAgICAgICAgICAgICAgICpEYXRhTGVuZ3RoDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJ X1NUQVRVUyAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBVU0JfUk5ESVNfREVWSUNFICAgICAg ICAqVXNiUm5kaXNEZXZpY2U7DQo+ICsgIFJFTU9URV9ORElTX1BBQ0tFVF9NU0cgICpSbmRpc1Bh Y2tldE1zZzsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgVHJhbnNmZXJMZW5ndGg7DQo+ ICsNCj4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiUm5kaXNVbmRpVHJhbnNtaXQgRGF0YUxlbmd0 aCA6ICV4XG4iLCAqRGF0YUxlbmd0aCkpOw0KPiArDQo+ICsgIFVzYlJuZGlzRGV2aWNlID0gVVNC X1JORElTX0RFVklDRV9GUk9NX1RISVMgKFRoaXMpOw0KPiArDQo+ICsgIFJuZGlzUGFja2V0TXNn ID0gQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChSRU1PVEVfTkRJU19QQUNLRVRfTVNHKSArICpE YXRhTGVuZ3RoKTsNCj4gKyAgaWYgKFJuZGlzUGFja2V0TXNnID09IE5VTEwpIHsNCj4gKyAgICBy ZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ICsgIH0NCj4gKw0KPiArICBSbmRpc1BhY2tl dE1zZy0+TWVzc2FnZVR5cGUgICA9IFJORElTX1BBQ0tFVF9NU0c7DQo+ICsgIFJuZGlzUGFja2V0 TXNnLT5NZXNzYWdlTGVuZ3RoID0gc2l6ZW9mIChSRU1PVEVfTkRJU19QQUNLRVRfTVNHKSArIChV SU5UMzIpKkRhdGFMZW5ndGg7DQo+ICsgIFJuZGlzUGFja2V0TXNnLT5EYXRhT2Zmc2V0ICAgID0g c2l6ZW9mIChSRU1PVEVfTkRJU19QQUNLRVRfTVNHKSAtIDg7DQo+ICsgIFJuZGlzUGFja2V0TXNn LT5EYXRhTGVuZ3RoICAgID0gKFVJTlQzMikqRGF0YUxlbmd0aDsNCj4gKw0KPiArICBDb3B5TWVt ICgNCj4gKyAgICAoKFVJTlQ4ICopUm5kaXNQYWNrZXRNc2cpICsgc2l6ZW9mIChSRU1PVEVfTkRJ U19QQUNLRVRfTVNHKSwNCj4gKyAgICBCdWxrT3V0RGF0YSwNCj4gKyAgICAqRGF0YUxlbmd0aA0K PiArICAgICk7DQo+ICsNCj4gKyAgVHJhbnNmZXJMZW5ndGggPSBSbmRpc1BhY2tldE1zZy0+TWVz c2FnZUxlbmd0aDsNCj4gKw0KPiArICBTdGF0dXMgPSBSbmRpc1RyYW5zbWl0RGF0YU1zZyAoDQo+ ICsgICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2UsDQo+ICsgICAgICAgICAgICAgKFJFTU9URV9O RElTX01TR19IRUFERVIgKilSbmRpc1BhY2tldE1zZywNCj4gKyAgICAgICAgICAgICAmVHJhbnNm ZXJMZW5ndGgNCj4gKyAgICAgICAgICAgICApOw0KPiArDQo+ICsgIERFQlVHICgoREVCVUdfSU5G TywgIlxuUm5kaXNVbmRpVHJhbnNtaXQgVHJhbnNmZXJMZW5ndGggJWx4XG4iLCBUcmFuc2Zlckxl bmd0aCkpOw0KPiArDQo+ICsgIEZyZWVQb29sIChSbmRpc1BhY2tldE1zZyk7DQo+ICsNCj4gKyAg cmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFJlY2VpdmVzIGFuZCByZW1v dmVzIFJORElTIGhlYWRlciBhbmQgcmV0dXJucyB0aGUgcmF3IGRhdGEuDQo+ICsNCj4gKyAgQHBh cmFtW2luXSAgICAgIENkYiAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2Ny aXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gICAgICBUaGlzICAgICAgICAgIEEgcG9pbnRl ciB0byB0aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFy YW1baW4sIG91dF0gQnVsa0luRGF0YSAgICBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBvZiBkYXRh IHRoYXQgd2lsbCBiZSB0cmFuc21pdHRlZCB0byBVU0INCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZGV2aWNlIG9yIHJlY2VpdmVkIGZyb20gVVNCIGRldmljZS4NCj4gKyAgQHBh cmFtW2luLCBvdXRdIERhdGFMZW5ndGggICAgQSBwb2ludGVyIHRvIHRoZSBQYWNrZXRMZW5ndGgu DQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhl Y3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9CVUZGRVJfVE9PX1NNQUxMICBU aGUgdXNlciBwcm92aWRlZCBidWZmZXIgaXMgdG9vIHNtYWxsDQo+ICsgIEByZXR2YWwgRUZJX05P VF9GT1VORCAgICAgICAgIE5vIGJ1ZmZlciB3YXMgZm91bmQgaW4gdGhlIGxpc3QuDQo+ICsNCj4g KyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtSbmRpc1VuZGlSZWNlaXZlICgNCj4g KyAgSU4gICAgIFBYRV9DREIgICAgICAgICAgICAgICAgICAgICAgKkNkYiwNCj4gKyAgSU4gICAg IEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOIE9VVCBWT0lEICAg ICAgICAgICAgICAgICAgICAgICAgICpCdWxrSW5EYXRhLA0KPiArICBJTiBPVVQgVUlOVE4gICAg ICAgICAgICAgICAgICAgICAgICAqRGF0YUxlbmd0aA0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9T VEFUVVMgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgVVNCX1JORElTX0RFVklDRSAgICAgICAg KlVzYlJuZGlzRGV2aWNlOw0KPiArICBSRU1PVEVfTkRJU19QQUNLRVRfTVNHICAqUm5kaXNQYWNr ZXRNc2c7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgIFRyYW5zZmVyTGVuZ3RoOw0KPiAr ICBWT0lEICAgICAgICAgICAgICAgICAgICAqQnVmZmVyOw0KPiArICBQQUNLRVRfTElTVCAgICAg ICAgICAgICAqSGVhZFBhY2tldDsNCj4gKyAgUEFDS0VUX0xJU1QgICAgICAgICAgICAgKlBhY2tl dExpc3Q7DQo+ICsNCj4gKyAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgYW55IG91dHN0YW5kaW5nIHBh Y2tldCB0byByZWNlaXZlDQo+ICsgIC8vIFRoZSBidWZmZXIgYWxsb2NhdGVkIGhhcyBhIGxpbmtl ZCBMaXN0IGZvbGxvd2VkIGJ5IHRoZSBwYWNrZXQuDQo+ICsNCj4gKyAgVXNiUm5kaXNEZXZpY2Ug PSBVU0JfUk5ESVNfREVWSUNFX0ZST01fVEhJUyAoVGhpcyk7DQo+ICsgIEJ1ZmZlciAgICAgICAg ID0gTlVMTDsNCj4gKyAgSGVhZFBhY2tldCAgICAgPSBOVUxMOw0KPiArDQo+ICsgIHdoaWxlICgx KSB7DQo+ICsgICAgQnVmZmVyID0gQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChQQUNLRVRfTElT VCkgKyBzaXplb2YgKFJFTU9URV9ORElTX1BBQ0tFVF9NU0cpICsgVXNiUm5kaXNEZXZpY2UtPk1h eFRyYW5zZmVyU2l6ZSk7DQo+ICsgICAgaWYgKEJ1ZmZlciA9PSBOVUxMKSB7DQo+ICsgICAgICBy ZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgUm5kaXNQ YWNrZXRNc2cgICAgICAgICAgICAgICAgPSAoUkVNT1RFX05ESVNfUEFDS0VUX01TRyAqKShzaXpl b2YgKFBBQ0tFVF9MSVNUKSArIChVSU5UOCAqKUJ1ZmZlcik7DQo+ICsgICAgUGFja2V0TGlzdCAg ICAgICAgICAgICAgICAgICAgPSAoUEFDS0VUX0xJU1QgKilCdWZmZXI7DQo+ICsgICAgUGFja2V0 TGlzdC0+UGFja2V0U3RhcnRCdWZmZXIgPSAoVUlOVDggKilCdWZmZXIgKyBzaXplb2YgKFBBQ0tF VF9MSVNUKTsNCj4gKyAgICAvLyBTYXZlIHRoZSBvcmlnaW5hbCBhZGRyZXNzIGZvciBmcmVlaW5n IGl0IHVwDQo+ICsgICAgUGFja2V0TGlzdC0+T3JnQnVmZmVyID0gKFVJTlQ4ICopQnVmZmVyOw0K PiArICAgIFRyYW5zZmVyTGVuZ3RoICAgICAgICA9IFVzYlJuZGlzRGV2aWNlLT5NYXhUcmFuc2Zl clNpemU7DQo+ICsNCj4gKyAgICBTdGF0dXMgPSBSbmRpc1JlY2VpdmVEYXRhTXNnICgNCj4gKyAg ICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLA0KPiArICAgICAgICAgICAgICAgKFJFTU9URV9O RElTX01TR19IRUFERVIgKilSbmRpc1BhY2tldE1zZywNCj4gKyAgICAgICAgICAgICAgICZUcmFu c2Zlckxlbmd0aA0KPiArICAgICAgICAgICAgICAgKTsNCj4gKw0KPiArICAgIGlmIChFRklfRVJS T1IgKFN0YXR1cykgfHwgKFRyYW5zZmVyTGVuZ3RoID09IDApKSB7DQo+ICsgICAgICBGcmVlUG9v bCAoQnVmZmVyKTsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIH0NCj4gKw0KPiArICAgIC8vIENv bGxlY3QgYWxsIHRoZSBSTkRJUyBwYWNrZXQgaW4gTGlua2VkIGxpc3QuDQo+ICsgICAgaWYgKChS bmRpc1BhY2tldE1zZy0+TWVzc2FnZVR5cGUgPT0gUk5ESVNfUEFDS0VUX01TRykgJiYNCj4gKyAg ICAgICAgKFJuZGlzUGFja2V0TXNnLT5EYXRhT2Zmc2V0ID09IHNpemVvZiAoUkVNT1RFX05ESVNf UEFDS0VUX01TRykgLSBSTkRJU19SRVNFUlZFRF9CWVRFX0xFTkdUSCkgJiYNCj4gKyAgICAgICAg KFRyYW5zZmVyTGVuZ3RoID49IFJuZGlzUGFja2V0TXNnLT5NZXNzYWdlTGVuZ3RoKSkNCj4gKyAg ICB7DQo+ICsgICAgICAvLyBJbnNlcnQgUGFja2V0DQo+ICsgICAgICBQYWNrZXRMaXN0LT5SZW1h aW5pbmdMZW5ndGggPSBUcmFuc2Zlckxlbmd0aDsNCj4gKyAgICAgIEluc2VydFRhaWxMaXN0ICgm VXNiUm5kaXNEZXZpY2UtPlJlY2VpdmVQYWNrZXRMaXN0LCBCdWZmZXIpOw0KPiArICAgIH0gZWxz ZSB7DQo+ICsgICAgICBGcmVlUG9vbCAoQnVmZmVyKTsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0K PiArICB3aGlsZSAoIUlzTGlzdEVtcHR5ICgmVXNiUm5kaXNEZXZpY2UtPlJlY2VpdmVQYWNrZXRM aXN0KSkgew0KPiArICAgIEhlYWRQYWNrZXQgPSAoUEFDS0VUX0xJU1QgKilHZXRGaXJzdE5vZGUg KCZVc2JSbmRpc0RldmljZS0+UmVjZWl2ZVBhY2tldExpc3QpOw0KPiArDQo+ICsgICAgUm5kaXNQ YWNrZXRNc2cgPSAoUkVNT1RFX05ESVNfUEFDS0VUX01TRyAqKShVSU5UOCAqKUhlYWRQYWNrZXQt PlBhY2tldFN0YXJ0QnVmZmVyOw0KPiArDQo+ICsgICAgUHJpbnRSbmRpc01zZyAoKFJFTU9URV9O RElTX01TR19IRUFERVIgKilSbmRpc1BhY2tldE1zZyk7DQo+ICsNCj4gKyAgICAvLyBDaGVjayB3 aGV0aGVyIHRoZSBwYWNrZXQgaXMgdmFsaWQgUk5ESVMgcGFja2V0Lg0KPiArICAgIGlmICgoSGVh ZFBhY2tldC0+UmVtYWluaW5nTGVuZ3RoID4gc2l6ZW9mIChSRU1PVEVfTkRJU19QQUNLRVRfTVNH KSkgJiYgKFJuZGlzUGFja2V0TXNnLT5NZXNzYWdlVHlwZSA9PSBSTkRJU19QQUNLRVRfTVNHKSAm Jg0KPiArICAgICAgICAoUm5kaXNQYWNrZXRNc2ctPkRhdGFPZmZzZXQgPT0gKHNpemVvZiAoUkVN T1RFX05ESVNfUEFDS0VUX01TRykgLSBSTkRJU19SRVNFUlZFRF9CWVRFX0xFTkdUSCkpICYmDQo+ ICsgICAgICAgIChIZWFkUGFja2V0LT5SZW1haW5pbmdMZW5ndGggPj0gUm5kaXNQYWNrZXRNc2ct Pk1lc3NhZ2VMZW5ndGgpKQ0KPiArICAgIHsNCj4gKyAgICAgIGlmICgqRGF0YUxlbmd0aCA+PSBS bmRpc1BhY2tldE1zZy0+RGF0YUxlbmd0aCkgew0KPiArICAgICAgICBDb3B5TWVtICgNCj4gKyAg ICAgICAgICBCdWxrSW5EYXRhLA0KPiArICAgICAgICAgIChVSU5UOCAqKVJuZGlzUGFja2V0TXNn ICsgKFJuZGlzUGFja2V0TXNnLT5EYXRhT2Zmc2V0ICsgUk5ESVNfUkVTRVJWRURfQllURV9MRU5H VEgpLA0KPiArICAgICAgICAgIFJuZGlzUGFja2V0TXNnLT5EYXRhTGVuZ3RoDQo+ICsgICAgICAg ICAgKTsNCj4gKw0KPiArICAgICAgICAqRGF0YUxlbmd0aCA9ICBSbmRpc1BhY2tldE1zZy0+RGF0 YUxlbmd0aDsNCj4gKw0KPiArICAgICAgICBIZWFkUGFja2V0LT5SZW1haW5pbmdMZW5ndGggICA9 IEhlYWRQYWNrZXQtPlJlbWFpbmluZ0xlbmd0aCAtIFJuZGlzUGFja2V0TXNnLT5NZXNzYWdlTGVu Z3RoOw0KPiArICAgICAgICBIZWFkUGFja2V0LT5QYWNrZXRTdGFydEJ1ZmZlciA9IChVSU5UOCAq KVJuZGlzUGFja2V0TXNnICsgUm5kaXNQYWNrZXRNc2ctPk1lc3NhZ2VMZW5ndGg7DQo+ICsNCj4g KyAgICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArICAgICAgfSBlbHNlIHsNCj4gKyAgICAg ICAgKkRhdGFMZW5ndGggPSBSbmRpc1BhY2tldE1zZy0+RGF0YUxlbmd0aDsNCj4gKyAgICAgICAg cmV0dXJuIEVGSV9CVUZGRVJfVE9PX1NNQUxMOw0KPiArICAgICAgfQ0KPiArICAgIH0NCj4gKw0K PiArICAgIFJlbW92ZUVudHJ5TGlzdCAoJkhlYWRQYWNrZXQtPlBhY2tldExpc3QpOw0KPiArICAg IEZyZWVQb29sICgoUEFDS0VUX0xJU1QgKilIZWFkUGFja2V0LT5PcmdCdWZmZXIpOw0KPiArICB9 DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiAr ICBUaGlzIGlzIGEgZHVtbXkgZnVuY3Rpb24gd2hpY2gganVzdCByZXR1cm5zLiBVbmltcGxlbWVu dGVkIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBmdW5jdGlvbnMNCj4gKyAgcG9pbnQgdG8g dGhpcyBmdW5jdGlvbi4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0 aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9p bnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsg IEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxs eS4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1JuZGlzRHVtbXlS ZXR1cm4gKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5p Yw0KPiArICApDQo+ICt7DQo+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIlJuZGlzRHVtbXlSZXR1 cm4gY2FsbGVkXG4iKSk7DQo+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiAr LyoqDQo+ICsgIFRoaXMgZnVuY3Rpb24gc2VuZCB0aGUgUk5ESVMgY29tbWFuZCB0aHJvdWdoIHRo ZSBkZXZpY2UncyBjb250cm9sIGVuZHBvaW50DQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVXNiUm5k aXNEZXZpY2UgICAgQSBwb2ludGVyIHRvIHRoZSBVU0JfUk5ESVNfREVWSUNFIGluc3RhbmNlLg0K PiArICBAcGFyYW1baW5dICBSbmRpc01zZyAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIFJFTU9U RV9ORElTX01TR19IRUFERVIgZGF0YS4NCj4gKyAgQHBhcmFtW291dF0gUm5kaXNNc2dSZXNwb25z ZSAgQSBwb2ludGVyIHRvIHRoZSBSRU1PVEVfTkRJU19NU0dfSEVBREVSIGRhdGEgZm9yIGdldHRp bmcgcmVzcG9uc2VzLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRo ZSBidWxrIHRyYW5zZmVyIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC4NCj4gKw0KPiAr KiovDQo+ICtFRklfU1RBVFVTDQo+ICtSbmRpc0NvbnRyb2xNc2cgKA0KPiArICBJTiAgVVNCX1JO RElTX0RFVklDRSAgICAgICAgKlVzYlJuZGlzRGV2aWNlLA0KPiArICBJTiAgUkVNT1RFX05ESVNf TVNHX0hFQURFUiAgKlJuZGlzTXNnLA0KPiArICBPVVQgUkVNT1RFX05ESVNfTVNHX0hFQURFUiAg KlJuZGlzTXNnUmVzcG9uc2UNCj4gKyAgKQ0KPiArew0KPiArICBFRklfVVNCX0lPX1BST1RPQ09M ICAgICAgICAgICAqVXNiSW8gPSBVc2JSbmRpc0RldmljZS0+VXNiSW87DQo+ICsgIEVGSV9VU0Jf REVWSUNFX1JFUVVFU1QgICAgICAgIERldlJlcTsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAg ICAgICAgICAgVXNiU3RhdHVzOw0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICBT dGF0dXM7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgIFNhdmVSZXNwb25zZVR5 cGU7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgIFNhdmVSZXNwb25zZUxlbmd0 aDsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsgIFJFTU9U RV9ORElTX0lOSVRJQUxJWkVfQ01QTFQgICpSbmRpc0luaXRDbXBsdDsNCj4gKw0KPiArICBTYXZl UmVzcG9uc2VUeXBlICAgPSAwOw0KPiArICBTYXZlUmVzcG9uc2VMZW5ndGggPSAwOw0KPiArICBS bmRpc0luaXRDbXBsdCAgICAgPSAoUkVNT1RFX05ESVNfSU5JVElBTElaRV9DTVBMVCAqKVJuZGlz TXNnUmVzcG9uc2U7DQo+ICsNCj4gKyAgaWYgKFJuZGlzTXNnUmVzcG9uc2UpIHsNCj4gKyAgICBT YXZlUmVzcG9uc2VUeXBlICAgPSBSbmRpc01zZ1Jlc3BvbnNlLT5NZXNzYWdlVHlwZTsNCj4gKyAg ICBTYXZlUmVzcG9uc2VMZW5ndGggPSBSbmRpc01zZ1Jlc3BvbnNlLT5NZXNzYWdlTGVuZ3RoOw0K PiArICB9DQo+ICsNCj4gKyAgWmVyb01lbSAoJkRldlJlcSwgc2l6ZW9mIChFRklfVVNCX0RFVklD RV9SRVFVRVNUKSk7DQo+ICsNCj4gKyAgRGV2UmVxLlJlcXVlc3RUeXBlID0gVVNCX1JFUV9UWVBF X0NMQVNTIHwgVVNCX1RBUkdFVF9JTlRFUkZBQ0U7DQo+ICsgIERldlJlcS5SZXF1ZXN0ICAgICA9 IFNFTkRfRU5DQVBTVUxBVEVEX0NPTU1BTkQ7DQo+ICsgIERldlJlcS5WYWx1ZSAgICAgICA9IDA7 DQo+ICsgIERldlJlcS5JbmRleCAgICAgICA9IDA7DQo+ICsgIERldlJlcS5MZW5ndGggICAgICA9 IChVSU5UMTYpUm5kaXNNc2ctPk1lc3NhZ2VMZW5ndGg7DQo+ICsNCj4gKyAgUHJpbnRSbmRpc01z ZyAoUm5kaXNNc2cpOw0KPiArDQo+ICsgIFN0YXR1cyA9IFVzYklvLT5Vc2JDb250cm9sVHJhbnNm ZXIgKA0KPiArICAgICAgICAgICAgICAgICAgICBVc2JJbywNCj4gKyAgICAgICAgICAgICAgICAg ICAgJkRldlJlcSwNCj4gKyAgICAgICAgICAgICAgICAgICAgRWZpVXNiRGF0YU91dCwNCj4gKyAg ICAgICAgICAgICAgICAgICAgVVNCX0VUSEVSTkVUX1RSQU5TRkVSX1RJTUVPVVQsDQo+ICsgICAg ICAgICAgICAgICAgICAgIFJuZGlzTXNnLA0KPiArICAgICAgICAgICAgICAgICAgICBSbmRpc01z Zy0+TWVzc2FnZUxlbmd0aCwNCj4gKyAgICAgICAgICAgICAgICAgICAgJlVzYlN0YXR1cw0KPiAr ICAgICAgICAgICAgICAgICAgICApOw0KPiArDQo+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIlJu ZGlzQ29udHJvbE1zZzogVXNiU3RhdHVzIDogJXggU3RhdHVzIDogJXIgUm5kaXNNc2dSZXNwb25z ZSA6ICVseFxuIiwgVXNiU3RhdHVzLCBTdGF0dXMsIFJuZGlzTXNnUmVzcG9uc2UpKTsNCj4gKw0K PiArICAvLyBFcnJvciBvciBubyByZXNwb25zZSBleHBlY3RlZA0KPiArICBpZiAoKEVGSV9FUlJP UiAoU3RhdHVzKSkgfHwgKFJuZGlzTXNnUmVzcG9uc2UgPT0gTlVMTCkpIHsNCj4gKyAgICBERUJV RyAoKERFQlVHX0lORk8sICJSbmRpc0NvbnRyb2xNc2c6IFVzYlN0YXR1cyA6ICV4IFN0YXR1cyA6 ICVyXG4iLCBVc2JTdGF0dXMsIFN0YXR1cykpOw0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsg IH0NCj4gKw0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCAoUk5ESVNfQ09OVFJPTF9USU1F T1VULzEwMCk7IEluZGV4KyspIHsNCj4gKyAgICBSZWFkUm5kaXNSZXNwb25zZUludGVycnVwdCAo VXNiUm5kaXNEZXZpY2UpOw0KPiArICAgIFplcm9NZW0gKCZEZXZSZXEsIHNpemVvZiAoRUZJX1VT Ql9ERVZJQ0VfUkVRVUVTVCkpOw0KPiArDQo+ICsgICAgRGV2UmVxLlJlcXVlc3RUeXBlID0gVVNC X0VORFBPSU5UX0RJUl9JTiB8IFVTQl9SRVFfVFlQRV9DTEFTUyB8IFVTQl9UQVJHRVRfSU5URVJG QUNFOw0KPiArICAgIERldlJlcS5SZXF1ZXN0ICAgICA9IEdFVF9FTkNBUFNVTEFURURfUkVTUE9O U0U7DQo+ICsgICAgRGV2UmVxLlZhbHVlICAgICAgID0gMDsNCj4gKyAgICBEZXZSZXEuSW5kZXgg ICAgICAgPSAwOw0KPiArICAgIERldlJlcS5MZW5ndGggICAgICA9IChVSU5UMTYpUm5kaXNNc2dS ZXNwb25zZS0+TWVzc2FnZUxlbmd0aDsNCj4gKw0KPiArICAgIFN0YXR1cyA9IFVzYklvLT5Vc2JD b250cm9sVHJhbnNmZXIgKA0KPiArICAgICAgICAgICAgICAgICAgICAgIFVzYklvLA0KPiArICAg ICAgICAgICAgICAgICAgICAgICZEZXZSZXEsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgRWZp VXNiRGF0YUluLA0KPiArICAgICAgICAgICAgICAgICAgICAgIFVTQl9FVEhFUk5FVF9UUkFOU0ZF Ul9USU1FT1VULA0KPiArICAgICAgICAgICAgICAgICAgICAgIFJuZGlzTXNnUmVzcG9uc2UsDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgUm5kaXNNc2dSZXNwb25zZS0+TWVzc2FnZUxlbmd0aCwN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAmVXNiU3RhdHVzDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgKTsNCj4gKw0KPiArICAgIERFQlVHICgoREVCVUdfSU5GTywgIlJuZGlzQ29udHJvbE1z ZyBSZXNwb25zZTogVXNiU3RhdHVzIDogJXggU3RhdHVzIDogJXIgXG4iLCBVc2JTdGF0dXMsIFN0 YXR1cykpOw0KPiArDQo+ICsgICAgUHJpbnRSbmRpc01zZyAoUm5kaXNNc2dSZXNwb25zZSk7DQo+ ICsNCj4gKyAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgaWYgKChSbmRp c0luaXRDbXBsdC0+UmVxdWVzdElEICE9ICgoUkVNT1RFX05ESVNfSU5JVElBTElaRV9DTVBMVCAq KVJuZGlzTXNnKS0+UmVxdWVzdElEKSB8fCAoUm5kaXNJbml0Q21wbHQtPk1lc3NhZ2VUeXBlICE9 IFNhdmVSZXNwb25zZVR5cGUpKSB7DQo+ICsgICAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIlJl dHJ5IHRoZSByZXNwb25zZVxuIikpOw0KPiArDQo+ICsgICAgICAgIFJuZGlzTXNnUmVzcG9uc2Ut Pk1lc3NhZ2VUeXBlICAgPSBTYXZlUmVzcG9uc2VUeXBlOw0KPiArICAgICAgICBSbmRpc01zZ1Jl c3BvbnNlLT5NZXNzYWdlTGVuZ3RoID0gU2F2ZVJlc3BvbnNlTGVuZ3RoOw0KPiArICAgICAgICBj b250aW51ZTsNCj4gKyAgICAgIH0NCj4gKyAgICB9DQo+ICsNCj4gKyAgICByZXR1cm4gU3RhdHVz Ow0KPiArICB9DQo+ICsNCj4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiUm5kaXNDb250cm9sTXNn OiBUaW1lT3V0XG4iKSk7DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9USU1FT1VUOw0KPiArfQ0KPiAr DQo+ICsvKioNCj4gKyAgVGhpcyBmdW5jdGlvbiBzZW5kIHRoZSBSTkRJUyBjb21tYW5kIHRocm91 Z2ggdGhlIGRldmljZSdzIERhdGEgZW5kcG9pbnQNCj4gKw0KPiArICBAcGFyYW1baW5dICAgICAg VXNiUm5kaXNEZXZpY2UgIEEgcG9pbnRlciB0byB0aGUgVVNCX1JORElTX0RFVklDRSBpbnN0YW5j ZS4NCj4gKyAgQHBhcmFtW2luXSAgICAgIFJuZGlzTXNnICAgICAgICBBIHBvaW50ZXIgdG8gdGhl IFJFTU9URV9ORElTX01TR19IRUFERVIgdG8gc2VuZCBvdXQuDQo+ICsgIEBwYXJhbVtpbiwgb3V0 XSBUcmFuc2Zlckxlbmd0aCAgVGhlIGxlbmd0aCBvZiB0aGUgUm5kaXNNc2cgZGF0YSB0byB0cmFu c2Zlci4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICBUaGUgcmVxdWVzdCBleGVj dXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArUm5kaXNU cmFuc21pdERhdGFNc2cgKA0KPiArICBJTiAgICAgIFVTQl9STkRJU19ERVZJQ0UgICAgICAgICpV c2JSbmRpc0RldmljZSwNCj4gKyAgSU4gICAgICBSRU1PVEVfTkRJU19NU0dfSEVBREVSICAqUm5k aXNNc2csDQo+ICsgIElOIE9VVCAgVUlOVE4gICAgICAgICAgICAgICAgICAgKlRyYW5zZmVyTGVu Z3RoDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiArICBVSU5UMzIg ICAgICBVc2JTdGF0dXM7DQo+ICsNCj4gKyAgaWYgKFVzYlJuZGlzRGV2aWNlLT5CdWxrSW5FbmRw b2ludCA9PSAwKSB7DQo+ICsgICAgR2V0RW5kcG9pbnQgKFVzYlJuZGlzRGV2aWNlLT5Vc2JJb0Nk Y0RhdGEsIFVzYlJuZGlzRGV2aWNlKTsNCj4gKyAgfQ0KPiArDQo+ICsgIFByaW50Um5kaXNNc2cg KFJuZGlzTXNnKTsNCj4gKw0KPiArICBTdGF0dXMgPSBVc2JSbmRpc0RldmljZS0+VXNiSW9DZGNE YXRhLT5Vc2JCdWxrVHJhbnNmZXIgKA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5Vc2JJb0NkY0RhdGEsDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPkJ1bGtPdXRF bmRwb2ludCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS bmRpc01zZywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU cmFuc2Zlckxlbmd0aCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBVU0JfVFhfRVRIRVJORVRfQlVMS19USU1FT1VULA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZVc2JTdGF0dXMNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiArDQo+ICsgIGlmIChTdGF0dXMgPT0gRUZJ X1NVQ0NFU1MpIHsNCj4gKyAgICBnU3RvcEJ1bGtJbkNudCA9IE1BWElNVU1fU1RPUEJVTEtJTl9D TlQ7ICAgICAvLyBBZnRlciBzZW5kaW5nIGNtZCAsd2Ugd2lsbCBwb2xsaW5nIHJlY2VpdmUgcGFj a2FnZSBmb3IgTUFYSU1VTV9TVE9QQlVMS0lOX0NOVCB0aW1lcw0KPiArICB9DQo+ICsNCj4gKyAg cmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgZnVuY3Rpb24gc2Vu ZCB0aGUgUk5ESVMgY29tbWFuZCB0aHJvdWdoIHRoZSBkZXZpY2UncyBEYXRhIGVuZHBvaW50DQo+ ICsNCj4gKyAgQHBhcmFtW2luXSAgICAgIFVzYlJuZGlzRGV2aWNlICAgIEEgcG9pbnRlciB0byB0 aGUgVVNCX1JORElTX0RFVklDRSBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luLCBvdXRdIFJuZGlz TXNnICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgUkVNT1RFX05ESVNfTVNHX0hFQURFUiB0byBz ZW5kIG91dC4NCj4gKyAgQHBhcmFtW2luLCBvdXRdIFRyYW5zZmVyTGVuZ3RoICAgIFRoZSBsZW5n dGggb2YgdGhlIFJuZGlzTXNnIGRhdGEgdG8gdHJhbnNmZXIuDQo+ICsNCj4gKyAgQHJldHZhbCBF RklfU1VDQ0VTUyAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArDQo+ ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK1JuZGlzUmVjZWl2ZURhdGFNc2cgKA0KPiArICBJTiAg ICAgIFVTQl9STkRJU19ERVZJQ0UgICAgICAgICpVc2JSbmRpc0RldmljZSwNCj4gKyAgSU4gT1VU ICBSRU1PVEVfTkRJU19NU0dfSEVBREVSICAqUm5kaXNNc2csDQo+ICsgIElOIE9VVCAgVUlOVE4g ICAgICAgICAgICAgICAgICAgKlRyYW5zZmVyTGVuZ3RoDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJ X1NUQVRVUyAgU3RhdHVzOw0KPiArICBVSU5UMzIgICAgICBVc2JTdGF0dXM7DQo+ICsNCj4gKyAg VXNiU3RhdHVzID0gMDsNCj4gKw0KPiArICBpZiAoVXNiUm5kaXNEZXZpY2UtPkJ1bGtJbkVuZHBv aW50ID09IDApIHsNCj4gKyAgICBHZXRFbmRwb2ludCAoVXNiUm5kaXNEZXZpY2UtPlVzYklvQ2Rj RGF0YSwgVXNiUm5kaXNEZXZpY2UpOw0KPiArICB9DQo+ICsNCj4gKyAgLy8gVXNlIGdTdG9wQnVs a0luQ250IHRvIHN0b3AgQnVsa0luIGNvbW1hbmQNCj4gKyAgaWYgKGdTdG9wQnVsa0luQ250IHx8 IExBTl9CVUxLSU5fQ01EX0NPTlRST0wpIHsNCj4gKyAgICBTdGF0dXMgPSBVc2JSbmRpc0Rldmlj ZS0+VXNiSW9DZGNEYXRhLT5Vc2JCdWxrVHJhbnNmZXIgKA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPlVzYklvQ2RjRGF0YSwN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzYlJuZGlz RGV2aWNlLT5CdWxrSW5FbmRwb2ludCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFJuZGlzTXNnLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVHJhbnNmZXJMZW5ndGgsDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBVU0JfUlhfRVRIRVJORVRfQlVMS19USU1FT1VULA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlVzYlN0YXR1 cw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4g Kw0KPiArICAgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBnU3RvcEJ1bGtJ bkNudCA9IE1JTklNVU1fU1RPUEJVTEtJTl9DTlQ7DQo+ICsgICAgfSBlbHNlIHsNCj4gKyAgICAg IGdTdG9wQnVsa0luQ250LS07DQo+ICsgICAgfQ0KPiArICB9IGVsc2Ugew0KPiArICAgIFN0YXR1 cyAgICAgICAgICA9IEVGSV9USU1FT1VUOw0KPiArICAgICpUcmFuc2Zlckxlbmd0aCA9IDA7DQo+ ICsgICAgZ0Jsb2NrQnVsa0luQ250Kys7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoZ0Jsb2NrQnVs a0luQ250ID4gQlVMS0lOX0NNRF9QT0xMSU5HX0NOVCkgew0KPiArICAgIGdTdG9wQnVsa0luQ250 ICA9IE1JTklNVU1fU1RPUEJVTEtJTl9DTlQ7DQo+ICsgICAgZ0Jsb2NrQnVsa0luQ250ID0gMDsN Cj4gKyAgfQ0KPiArDQo+ICsgIFByaW50Um5kaXNNc2cgKFJuZGlzTXNnKTsNCj4gKw0KPiArICBy ZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgUHJpbnRzIFJORElTIEhlYWRl ciBhbmQgRGF0YQ0KPiArDQo+ICsgIEBwYXJhbVtpbl0gUm5kaXNNc2cgICAgQSBwb2ludGVyIHRv IHRoZSBSRU1PVEVfTkRJU19NU0dfSEVBREVSIGRhdGEuDQo+ICsNCj4gKyoqLw0KPiArVk9JRA0K PiArUHJpbnRSbmRpc01zZyAoDQo+ICsgIElOICBSRU1PVEVfTkRJU19NU0dfSEVBREVSICAqUm5k aXNNc2cNCj4gKyAgKQ0KPiArew0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgTGVuZ3Ro Ow0KPiArICBSRU1PVEVfTkRJU19RVUVSWV9DTVBMVCAgKlJuZGlzUXVlcnlDbXBsdDsNCj4gKw0K PiArICBMZW5ndGggPSAwOw0KPiArDQo+ICsgIHN3aXRjaCAoUm5kaXNNc2ctPk1lc3NhZ2VUeXBl KSB7DQo+ICsgICAgY2FzZSBSTkRJU19QQUNLRVRfTVNHOg0KPiArICAgICAgREVCVUcgKChERUJV R19JTkZPLCAiUk5ESVNfUEFDS0VUX01TRzpcbiIpKTsNCj4gKyAgICAgIExlbmd0aCA9IHNpemVv ZiAoUkVNT1RFX05ESVNfUEFDS0VUX01TRykgKyAweDE0Ow0KPiArICAgICAgYnJlYWs7DQo+ICsg ICAgY2FzZSBSTkRJU19JTklUSUFMSVpFX01TRzoNCj4gKyAgICAgIERFQlVHICgoREVCVUdfSU5G TywgIlJORElTX0lOSVRJQUxJWkVfTVNHOlxuIikpOw0KPiArICAgICAgTGVuZ3RoID0gc2l6ZW9m IChSRU1PVEVfTkRJU19JTklUSUFMSVpFX01TRyk7DQo+ICsgICAgICBicmVhazsNCj4gKyAgICBj YXNlIFJORElTX0lOSVRJQUxJWkVfQ01QTFQ6DQo+ICsgICAgICBERUJVRyAoKERFQlVHX0lORk8s ICJSTkRJU19JTklUSUFMSVpFX0NNUExUOlxuIikpOw0KPiArICAgICAgTGVuZ3RoID0gc2l6ZW9m IChSRU1PVEVfTkRJU19JTklUSUFMSVpFX0NNUExUKTsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAg IGNhc2UgUk5ESVNfSExUX01TRzoNCj4gKyAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIlJORElT X0hMVF9NU0c6XG4iKSk7DQo+ICsgICAgICBMZW5ndGggPSBzaXplb2YgKFJFTU9URV9ORElTX0hB TFRfTVNHKTsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIGNhc2UgUk5ESVNfUVVFUllfTVNHOg0K PiArICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiUk5ESVNfUVVFUllfTVNHOlxuIikpOw0KPiAr ICAgICAgTGVuZ3RoID0gc2l6ZW9mIChSRU1PVEVfTkRJU19RVUVSWV9NU0cpOw0KPiArICAgICAg YnJlYWs7DQo+ICsgICAgY2FzZSBSTkRJU19RVUVSWV9DTVBMVDoNCj4gKyAgICAgIERFQlVHICgo REVCVUdfSU5GTywgIlJORElTX1FVRVJZX0NNUExUOlxuIikpOw0KPiArICAgICAgUm5kaXNRdWVy eUNtcGx0ID0gKFJFTU9URV9ORElTX1FVRVJZX0NNUExUICopUm5kaXNNc2c7DQo+ICsgICAgICBM ZW5ndGggICAgICAgICAgPSBzaXplb2YgKFJFTU9URV9ORElTX1FVRVJZX0NNUExUKSArIFJuZGlz UXVlcnlDbXBsdC0+SW5mb3JtYXRpb25CdWZmZXJMZW5ndGg7DQo+ICsgICAgICBicmVhazsNCj4g KyAgICBjYXNlIFJORElTX1NFVF9NU0c6DQo+ICsgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJS TkRJU19TRVRfTVNHOlxuIikpOw0KPiArICAgICAgTGVuZ3RoID0gc2l6ZW9mIChSRU1PVEVfTkRJ U19TRVRfTVNHKTsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIGNhc2UgUk5ESVNfU0VUX0NNUExU Og0KPiArICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiUk5ESVNfU0VUX0NNUExUOlxuIikpOw0K PiArICAgICAgTGVuZ3RoID0gc2l6ZW9mIChSRU1PVEVfTkRJU19TRVRfQ01QTFQpOw0KPiArICAg ICAgYnJlYWs7DQo+ICsgICAgY2FzZSBSTkRJU19SRVNFVF9NU0c6DQo+ICsgICAgICBERUJVRyAo KERFQlVHX0lORk8sICJSTkRJU19SRVNFVF9NU0c6XG4iKSk7DQo+ICsgICAgICBMZW5ndGggPSBz aXplb2YgKFJFTU9URV9ORElTX1JFU0VUX01TRyk7DQo+ICsgICAgICBicmVhazsNCj4gKyAgICBj YXNlIFJORElTX1JFU0VUX0NNUExUOg0KPiArICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiUk5E SVNfUkVTRVRfQ01QTFQ6XG4iKSk7DQo+ICsgICAgICBMZW5ndGggPSBzaXplb2YgKFJFTU9URV9O RElTX1JFU0VUX0NNUExUKTsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIGNhc2UgUk5ESVNfSU5E SUNBVEVfU1RBVFVTX01TRzoNCj4gKyAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIlJORElTX0lO RElDQVRFX1NUQVRVU19NU0c6XG4iKSk7DQo+ICsgICAgICBMZW5ndGggPSBzaXplb2YgKFJFTU9U RV9ORElTX0lORElDQVRFX1NUQVRVU19NU0cpOw0KPiArICAgICAgYnJlYWs7DQo+ICsgICAgY2Fz ZSBSTkRJU19LRUVQQUxJVkVfTVNHOg0KPiArICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiUk5E SVNfS0VFUEFMSVZFX01TRzpcbiIpKTsNCj4gKyAgICAgIExlbmd0aCA9IHNpemVvZiAoUkVNT1RF X05ESVNfS0VFUEFMSVZFX01TRyk7DQo+ICsgICAgICBicmVhazsNCj4gKyAgICBjYXNlIFJORElT X0tFRVBBTElWRV9DTVBMVDoNCj4gKyAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIlJORElTX0tF RVBBTElWRV9DTVBMVDpcbiIpKTsNCj4gKyAgICAgIExlbmd0aCA9IHNpemVvZiAoUkVNT1RFX05E SVNfS0VFUEFMSVZFX0NNUExUKTsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChMZW5ndGgpIHsNCj4g KyAgICBVSU5UTiAgSW5kZXggPSAwOw0KPiArICAgIGZvciAoIDsgTGVuZ3RoOyBMZW5ndGggLT0g NCwgSW5kZXgrKykgew0KPiArICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiJThYXHQiLCAqKChV SU5UMzIgKilSbmRpc01zZyArIEluZGV4KSkpOw0KPiArICAgICAgaWYgKCgoSW5kZXggJSA0KSA9 PSAzKSAmJiAoSW5kZXggIT0gMCkpIHsNCj4gKyAgICAgICAgREVCVUcgKChERUJVR19JTkZPLCAi XG4iKSk7DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIGlmICgoTGVuZ3RoIDwgOCkgJiYgKExl bmd0aCA+IDQpKSB7DQo+ICsgICAgICAgIFVJTlQzMiAgRGF0YTMyOw0KPiArICAgICAgICBJbmRl eCsrOw0KPiArICAgICAgICBEYXRhMzIgPSAqKChVSU5UMzIgKilSbmRpc01zZyArIEluZGV4KTsN Cj4gKyAgICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiJThYXHQiLCBEYXRhMzIpKTsNCj4gKyAg ICAgICAgYnJlYWs7DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgaWYgKEluZGV4 ICUgNCkgew0KPiArICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiXG4iKSk7DQo+ICsgICAgfQ0K PiArICB9DQo+ICt9DQo+IGRpZmYgLS1naXQgYS9Vc2JOZXR3b3JrUGtnL1JlYWRNZS5tZCBiL1Vz Yk5ldHdvcmtQa2cvUmVhZE1lLm1kDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAw MDAwMDAwMDAwMC4uY2I3MDY4NGYwYmYxDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvVXNiTmV0 d29ya1BrZy9SZWFkTWUubWQNCj4gQEAgLTAsMCArMSw2NSBAQA0KPiArIyBVc2JOZXR3b3JrUGtn DQo+ICsNCj4gK1RoaXMgZG9jdW1lbnQgaXMgaW50ZW5kIHRvIHByb3ZpZGUgcGFja2FnZSBpbmZv cm1hdGlvbiwgaW5jbHVkZSB0aGUgaW50ZXJmYWNlIGRldGFpbHMuDQo+ICsNCj4gKyMgSU5ERVgN Cj4gKyAgKiBbSW50cm9kdWN0aW9uXSgjaW50cm9kdWN0aW9uKQ0KPiArICAqIFtDb21wb25lbnRz XSgjY29tcG9uZW50cykNCj4gKyAgICAqIFtbTmV0d29ya0NvbW1vbl1dKCNuZXR3b3JrY29tbW9u KQ0KPiArICAgICogW1tVc2JDZGNFY21dXSgjdXNiY2RjZWNtKQ0KPiArICAgICogW1tVc2JDZGNO Y21dXSgjdXNiY2RjbmNtKQ0KPiArICAgICogW1tVc2JSbmRpc11dKCN1c2JybmRpcykNCj4gKw0K PiArIyAgSW50cm9kdWN0aW9uDQo+ICtVc2JOZXR3b3JrUGtnIHByb3ZpZGVzIG5ldHdvcmsgZnVu Y3Rpb25zIGZvciBVU0IgTEFOIGRldmljZXMuDQo+ICsNCj4gKyMgQ29tcG9uZW50cw0KPiArQmVs b3cgbW9kdWxlIGlzIGluY2x1ZGVkIGluIHRoaXMgcGFja2FnZTo8YnI+DQo+ICstIE5ldHdvcmtD b21tb24NCj4gKy0gVXNiQ2RjRWNtDQo+ICstIFVzYkNkY05jbQ0KPiArLSBVc2JSbmRpcw0KPiAr DQo+ICsjIyBbTmV0d29ya0NvbW1vbl0NCj4gK1Byb3ZpZGVzIGEgTEFOIGRyaXZlciBiYXNlZCBv biBVRUZJIHNwZWNpZmljYXRpb24oVU5ESSkuIEl0IHN1cHBvcnRzIFVTQiBjb21tdW5pY2F0aW9u IGNsYXNzIHN1YmNsYXNzIGRldmljZXMgYW5kIFVTQiBSbmRpcyBkZXZpY2VzLCBkZXBlbmRpbmcg b24gdGhlIFVzYkV0aGVybmV0UHJvdG9jb2wuDQo+ICsNCj4gKyMjIFJlcXVpcmVkIENvbXBvbmVu dHMNCj4gKy0gTmV0d29ya1BrZw0KPiArDQo+ICsjIyBbVXNiQ2RjRWNtXQ0KPiArVGhpcyBkcml2 ZXIgcHJvdmlkZXMgYSBjb21tdW5pY2F0aW9uIGludGVyZmFjZSBmb3IgVVNCIEV0aGVybmV0IGRl dmljZXMgdGhhdCBmb2xsb3dzIHRoZSBFQ00gcHJvdG9jb2wuIFRoZSBkcml2ZXIgaW5zdGFsbHMg VXNiRXRoZXJuZXRQcm90b2NvbCB3aXRoIEVDTSBmdW5jdGlvbnMgd2hpY2ggYXJlIGNvbnN1bWVk IGJ5IHRoZSBOZXR3b3JrQ29tbW9uIGRyaXZlci4NCj4gKw0KPiArVGhlIGRyaXZlciBpcyBjb21w YXRpYmxlIHdpdGggdGhlIGZvbGxvd2luZyBVU0IgY2xhc3MgY29kZXM6DQo+ICt8Q2xhc3MgQ29k ZXxTdWJDbGFzcyBDb2RlfFByb3RvY29sIENvZGV8DQo+ICt8Oi0tLS0tLS0tOnw6LS0tLS0tLS0t LS06fDotLS0tLS0tLS0tLTp8DQo+ICt8MHgwMnwweDA2fDB4MDB8DQo+ICsNCj4gKyMjIFJlcXVp cmVkIENvbXBvbmVudHMNCj4gKy0gTmV0d29ya0NvbW1vbg0KPiArLSBNZGVNb2R1bGVQa2coVVNC IGJ1cyBkcml2ZXIpDQo+ICsNCj4gKyMjIFtVc2JDZGNOY21dDQo+ICtUaGlzIGRyaXZlciBwcm92 aWRlcyBhIGNvbW11bmljYXRpb24gaW50ZXJmYWNlIGZvciBVU0IgRXRoZXJuZXQgZGV2aWNlcyB0 aGF0IGZvbGxvd3MgdGhlIE5DTSBwcm90b2NvbC4gVGhlIGRyaXZlciBpbnN0YWxscyBVc2JFdGhl cm5ldFByb3RvY29sIHdpdGggTkNNIGZ1bmN0aW9ucyB3aGljaCBhcmUgY29uc3VtZWQgYnkgdGhl IE5ldHdvcmtDb21tb24gZHJpdmVyLg0KPiArDQo+ICtUaGUgZHJpdmVyIGlzIGNvbXBhdGlibGUg d2l0aCB0aGUgZm9sbG93aW5nIFVTQiBjbGFzcyBjb2RlczoNCj4gK3xDbGFzcyBDb2RlfFN1YkNs YXNzIENvZGV8UHJvdG9jb2wgQ29kZXwNCj4gK3w6LS0tLS0tLS06fDotLS0tLS0tLS0tLTp8Oi0t LS0tLS0tLS0tOnwNCj4gK3wweDAyfDB4MER8MHgwMHwNCj4gKw0KPiArIyMgUmVxdWlyZWQgQ29t cG9uZW50cw0KPiArLSBOZXR3b3JrQ29tbW9uDQo+ICstIE1kZU1vZHVsZVBrZyhVU0IgYnVzIGRy aXZlcikNCj4gKw0KPiArIyMgW1VzYlJuZGlzXQ0KPiArVGhpcyBkcml2ZXIgcHJvdmlkZXMgYSBj b21tdW5pY2F0aW9uIGludGVyZmFjZSBmb3IgVVNCIEV0aGVybmV0IGRldmljZXMgdGhhdCBmb2xs b3dzIHRoZSBSTkRJUyBwcm90b2NvbC4gVGhlIGRyaXZlciBpbnN0YWxscyBVc2JFdGhlcm5ldFBy b3RvY29sIHdpdGggUk5ESVMgZnVuY3Rpb25zIHdoaWNoIGFyZSBjb25zdW1lZCBieSB0aGUgTmV0 d29ya0NvbW1vbiBkcml2ZXIuDQo+ICsNCj4gK1RoZSBkcml2ZXIgaXMgY29tcGF0aWJsZSB3aXRo IHRoZSBmb2xsb3dpbmcgVVNCIGNsYXNzIGNvZGVzOg0KPiArfENsYXNzIENvZGV8U3ViQ2xhc3Mg Q29kZXxQcm90b2NvbCBDb2RlfA0KPiArfDotLS0tLS0tLTp8Oi0tLS0tLS0tLS0tOnw6LS0tLS0t LS0tLS06fA0KPiArfDB4MDJ8MHgwMnwweEZGfA0KPiArfDB4RUZ8MHgwNHwweDAxfA0KPiArDQo+ ICsjIyBSZXF1aXJlZCBDb21wb25lbnRzDQo+ICstIE5ldHdvcmtDb21tb24NCj4gKy0gTWRlTW9k dWxlUGtnKFVTQiBidXMgZHJpdmVyKQ0KPiArDQo+IGRpZmYgLS1naXQgYS9Vc2JOZXR3b3JrUGtn L1JlbGVhc2VOb3Rlcy5tZCBiL1VzYk5ldHdvcmtQa2cvUmVsZWFzZU5vdGVzLm1kDQo+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uZjhjY2NjZGIwODMwDQo+IC0t LSAvZGV2L251bGwNCj4gKysrIGIvVXNiTmV0d29ya1BrZy9SZWxlYXNlTm90ZXMubWQNCj4gQEAg LTAsMCArMSwxMSBAQA0KPiArIyBVc2JOZXR3b3JrUGtnIFJlbGVhc2UgTm90ZXM8IS0tIG9taXQg aW4gdG9jIC0tPg0KPiArDQo+ICsjIFJlbGVhc2UgSGlzdG9yeTwhLS0gb21pdCBpbiB0b2MgLS0+ DQo+ICstIFsxLjAwXSgjMTAwKQ0KPiArDQo+ICsjIyAxLjAwDQo+ICsNCj4gKyoqUmVsZWFzZSBE YXRlOioqIE1hciAxMCwgMjAyMg0KPiArDQo+ICsqKk5ldyBGZWF0dXJlcyoqDQo+ICstIFVzYk5l dHdvcmtQa2cgZmlyc3QgcmVsZWFzZS4NCj4gLS0NCj4gMi4zNS4xLndpbmRvd3MuMg0KPiAtVGhl IGluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbiB0aGlzIG1lc3NhZ2UgbWF5IGJlIGNvbmZpZGVudGlh bCBhbmQgcHJvcHJpZXRhcnkgdG8gQW1lcmljYW4gTWVnYXRyZW5kcyAoQU1JKS4gVGhpcyBjb21t dW5pY2F0aW9uIGlzIGludGVuZGVkIHRvIGJlIHJlYWQgb25seSBieSB0aGUgaW5kaXZpZHVhbCBv ciBlbnRpdHkgdG8gd2hvbSBpdCBpcyBhZGRyZXNzZWQgb3IgYnkgdGhlaXIgZGVzaWduZWUuIElm IHRoZSByZWFkZXIgb2YgdGhpcyBtZXNzYWdlIGlzIG5vdCB0aGUgaW50ZW5kZWQgcmVjaXBpZW50 LCB5b3UgYXJlIG9uIG5vdGljZSB0aGF0IGFueSBkaXN0cmlidXRpb24gb2YgdGhpcyBtZXNzYWdl LCBpbiBhbnkgZm9ybSwgaXMgc3RyaWN0bHkgcHJvaGliaXRlZC4gUGxlYXNlIHByb21wdGx5IG5v dGlmeSB0aGUgc2VuZGVyIGJ5IHJlcGx5IGUtbWFpbCBvciBieSB0ZWxlcGhvbmUgYXQgNzcwLTI0 Ni04NjAwLCBhbmQgdGhlbiBkZWxldGUgb3IgZGVzdHJveSBhbGwgY29waWVzIG9mIHRoZSB0cmFu c21pc3Npb24uDQotVGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbiB0aGlzIG1lc3NhZ2UgbWF5 IGJlIGNvbmZpZGVudGlhbCBhbmQgcHJvcHJpZXRhcnkgdG8gQW1lcmljYW4gTWVnYXRyZW5kcyAo QU1JKS4gVGhpcyBjb21tdW5pY2F0aW9uIGlzIGludGVuZGVkIHRvIGJlIHJlYWQgb25seSBieSB0 aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdG8gd2hvbSBpdCBpcyBhZGRyZXNzZWQgb3IgYnkgdGhl aXIgZGVzaWduZWUuIElmIHRoZSByZWFkZXIgb2YgdGhpcyBtZXNzYWdlIGlzIG5vdCB0aGUgaW50 ZW5kZWQgcmVjaXBpZW50LCB5b3UgYXJlIG9uIG5vdGljZSB0aGF0IGFueSBkaXN0cmlidXRpb24g b2YgdGhpcyBtZXNzYWdlLCBpbiBhbnkgZm9ybSwgaXMgc3RyaWN0bHkgcHJvaGliaXRlZC4gUGxl YXNlIHByb21wdGx5IG5vdGlmeSB0aGUgc2VuZGVyIGJ5IHJlcGx5IGUtbWFpbCBvciBieSB0ZWxl cGhvbmUgYXQgNzcwLTI0Ni04NjAwLCBhbmQgdGhlbiBkZWxldGUgb3IgZGVzdHJveSBhbGwgY29w aWVzIG9mIHRoZSB0cmFuc21pc3Npb24uDQo=