From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (NAM10-DM6-obe.outbound.protection.outlook.com [40.107.93.53]) by mx.groups.io with SMTP id smtpd.web10.14744.1680055926381978833 for ; Tue, 28 Mar 2023 19:12:07 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@ami.com header.s=selector1 header.b=E6DpbpTF; spf=pass (domain: ami.com, ip: 40.107.93.53, mailfrom: richardho@ami.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=mzskKhGe+33AdVO1cZSIMX8nDjbIT/1Ff0vnv2j7KfHNPti2s76iFkBtJzGR20V8YIr5dXFd36jXWLZoxhRLW7by2FI9IzRRwQahMeL0QGhGcjXToa/+hDcP4UgF5NQ7cd5MjzKyB6uEpuOLn093kkdi20e8X2I4S2b5PFcuj1n7iSW/tX3sTxi7/JTH9ZmMaKjLYsSMFDtJAZBSUdaDcIDBdOUSPWRRJJgwunOk22E7rlssxBtRtV/sEcaRmGkErk+a4Htx/TTz8sYhRbiPaO3iVCVAsDFLe8txFSWmNkZwnxfEoCIyUL8yfF3jJ5vnV2NveTm+ZYRKl4TD4Yaj0Q== 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=Zaet1ayxKbgIGUANOAmElvxdEfb+ikmaUtNdHzrIVWs=; b=h3e/HyYxp0ijamm58hjif48QsmdrRJz4u/dxDXc6tdggBxJIWTfcu4ipxdu7fg8/XtGtSoGiB+k2ICLCkqwI7fk5oJQ/+qBAO+GSVAgFGOjEFHXfbaCVQGh9yKDEEFrHWYtFAxd54LNxmZyuGgPL0JbjF4LCMrCnu/o/wLj1vaa5DzDQX8QoOasctFyR4PXQVJTjgJw8nJX3zBdQBS/fePxSXDOjDzK3YqVkCGiQEQz6ddOeBaC4lLgEwBbyjYQP3eY6agWKms8n5UjzORHMKjZ4BnoEGSlyJNpDYNcNQZ5I3zNGbfN7WWGJvDGbmRsuYHtJIX9NN32iFUtQAHyD7Q== 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=Zaet1ayxKbgIGUANOAmElvxdEfb+ikmaUtNdHzrIVWs=; b=E6DpbpTFnRqNMzn9yAleJ7pKncPv7oUmwADaythSA/wxylcHgToQ6dqSFT8rPN20czy54DoAxQSKvz9VIEey8GvnHjzIzfQmO1aem1ubHPanITXIXDKrsFvWS5Lb4JvMfNAhFEQMrTmGSt1/8VilBf38TlN2oq3ufIJE30rhzFo= Received: from CY8PR10MB6441.namprd10.prod.outlook.com (2603:10b6:930:63::16) by CO6PR10MB5601.namprd10.prod.outlook.com (2603:10b6:303:148::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6222.33; Wed, 29 Mar 2023 02:11:56 +0000 Received: from CY8PR10MB6441.namprd10.prod.outlook.com ([fe80::b965:7721:e4d7:5409]) by CY8PR10MB6441.namprd10.prod.outlook.com ([fe80::b965:7721:e4d7:5409%7]) with mapi id 15.20.6222.033; Wed, 29 Mar 2023 02:11:56 +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: AQHZUlwAZ3rtm0OXKUWsSW3zQ13cEa8QL4EAgADxYEA= Date: Wed, 29 Mar 2023 02:11:56 +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_|CO6PR10MB5601:EE_ x-ms-office365-filtering-correlation-id: d1954dc9-2e2c-4816-654d-08db2ffaf8cc x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: vh6VdnY3hT6sL5Ot00RYxb4A60/5Ss2KStXwwkELtTMwpogmHEllYKE6FH3sf/yb0n+dLF47licODk2/SJ16B8N30Pcla+WLL0RCkN3dPjOLvizOFvdPjaxgYcurxtFDp7aPTe6tfh40QXUHvlMDJXE1p9zsqPDu8UmDNaZftkN347xhEwxU6qtW2v1vuvcVzHqHGY6UbK9zhhnD/XvnzRzfKg9M6QS9OGQAY3WF1epAQzkYBvJYRFnuDj+wHu/8jzsLK8RlGdhaxGZNXoyNyubjz8tZ8NHprnCQupoOOW6pYtvGk8RU8P4kMfRjeEZN7FwvMxd8z1IQSos0+0C6oxQc5JYRkQyMP5mcsEtb0E8qq9TelWQ0ZTGbdmEg+WWmSVDsTNmz1TYKHGxrAaAmxJ3TZk8HSHe2d4/+Uvlgwt151E9RCsze4LxyxmiCD+Jfra7+ly9WQ4Nj2oOv9FIDweRr0lhlmkruSmYALhIix+VOVwHwS455npLLXOlxggGCGcfUi8cMWMDtaihp2G1aIQcPIuRbjQELgFBbTZzx2/SWRh+mLyB0Fgdc56I+m+IHAWC2VjGRXQJ9vIVxACl6DrmQklywGdeFygMzHNiUGsQ7KWYFgUb41xZbXfcyQH70ctU+oHGSZFtXdWe1wh1X/M3f54+ZhMZEoLk8rE/QluzWUNU+6mT44+q7HPo3Od8e 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)(136003)(396003)(366004)(39850400004)(376002)(346002)(451199021)(86362001)(40140700001)(38070700005)(33656002)(71200400001)(6506007)(26005)(83380400001)(9686003)(53546011)(5660300002)(85182001)(186003)(2906002)(30864003)(8936002)(52536014)(7696005)(41300700001)(478600001)(66946007)(64756008)(55016003)(76116006)(66446008)(66476007)(66556008)(54906003)(110136005)(316002)(19627235002)(122000001)(38100700002)(8676002)(4326008)(559001)(579004)(44824005);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?ZkVMQW1lS2FBTm9GR255RFlpUGduRjNtc0hvQ2EyTU9TT0lUdndKcVZXMWUx?= =?utf-8?B?eFJNTC8vUjRLMWc3VFprYUQwdk5MRm1wT0tVVUtxa1BmL1gxMmRRa2orejQv?= =?utf-8?B?aFVUbVpMaGo0WlNSeHVzR3F1K3BpT1gvcHJkdDZuSzNSN3B3UWlrVktkSkU0?= =?utf-8?B?Z3ZoSWhCOUdPelV6cWl6WkpoMTdOZ2g5RkM4V05DcTRDZ0xjVE43MW90TWNm?= =?utf-8?B?d3ovTWw2MnZxc21OZU91bnVTV0NKOXhDMXJ2VFVtd3oxemlzZ0JoUWZmUkp6?= =?utf-8?B?bnFFTkVsek9QSW9Xdm1lMVdlL2tKL0lxM0c1NWpiQ2VFeUhvMlNTekxuVVF6?= =?utf-8?B?VFRXMHZEQU9WVnBwZFU3aTJQVy93TnZEVlY4T2E1VEJ6VDEzOHViZklxdGNS?= =?utf-8?B?N3JEQmUxMjdwMTlpY1hTNVd1K3dERlNkWGFyWUlLYkp5UE1lSm12UnhxOG8z?= =?utf-8?B?T1k4ZWxTM2pMNlh6R3ZWUXUzVlRoSDhWVEtrWmJ2MWx4SkZyVkloN0l3YnJp?= =?utf-8?B?RW1zZEM1VXRheExCR3ZGOXhXNHdyMTNKSnJYQnprSkx4aHhIby96aTVJa3dn?= =?utf-8?B?amhrUTZ1WjNJWUtqejRtNFUzTm9SS0NnTDZwWUFIckE4WnNqci9JdXNhZVVu?= =?utf-8?B?UDBYZjhZSmNMSkYyWEUxWUsrSzRUOEJaZ0EvZE9CR1hPUXZGQkpoYzF0WmdN?= =?utf-8?B?VkhBNDJDV1VoQ0NrRzg4SG85M0EzUkphd3NEWm85bStWeE9vZkN6SmZMUzUx?= =?utf-8?B?NzBYMFBkTkxSeTVkQWE2cnM1ektNMlBEWXpZQVZpTkllbXIvN2pDMi9GUWgx?= =?utf-8?B?SkFLQXFTa2tLMm1CUkpSemhmNWtpQ1Q3TmRFWlN2eUNBSEl4N2hUSFdTQ0ZR?= =?utf-8?B?SDZGU2lYN2FDeTI5UDYxK2RnMzcvSk1FdkJ6YmZUU3BOL0NVT1BaOExCOXY5?= =?utf-8?B?SThranpkd2NIbDlGR1l2K2lqZWFweDZ3dUlIS2tDcm5LTEFnU3RwU1ZwcVNv?= =?utf-8?B?bzhGMFdQZVJYNnRCUmxpdDFXZXI0MnVFcFB6R1FhV1JPUG9IVTdwaWNUTVpV?= =?utf-8?B?Nzh4S0xhZkxDR3pDSUgvQk1RWXZXVEFLRjJaZG1PdUlpNDVJOGF0QnkrUVdX?= =?utf-8?B?REpDajdVZ0Q3OWVuZlJwRjhvaUJPMndnV2JScmtjcGtMZzFucitBOFh2YXVS?= =?utf-8?B?NTdWUXlSRURpbTUzREJOMmN5SUtOOUd0K1Z2TTdicXlTR2d5ZG9EL1VCTUp1?= =?utf-8?B?cHVaeFRXMUc5V0Y0Nmt6OW1CVWhjU093TkRBZ2Vpc1VwZk0wcU1qSUo3VmdJ?= =?utf-8?B?dm9obEJtTzdMdFo4anJJVnNBc0VYcFZFWkJHZGp5azdvNVpiUHNCcml6Wkt2?= =?utf-8?B?bWRONEpqc01OZHJ5dDI4Qk9EcklnZHdEdktNSWtoTWV5aGFieDl4YXhYVzNn?= =?utf-8?B?a09ZcEYwa1VmcCtBRmxLckdVQldINzFOUTY0MkludWttMldVTGF5aWw0aEVv?= =?utf-8?B?Ri9JRG8yUG9LWWZ5ekxhenB6TkJ2cG5BcTBMVFl6TEJReVVUWlBFUTgrL21B?= =?utf-8?B?bkJHNUd1Rk04bkh0QXN6TEhTVnl6eVcrK3IwZHFxVDRaeWZiQWhQZWZlSktG?= =?utf-8?B?bXJnT1RvWmRoVnVIR1ByOUUxVWUzQjNFUWNyTDkyQ3NvWnNId2w4RFJ3Rzk0?= =?utf-8?B?NlV1NHhpd0IxL1J0QUJqeXRvblVVbklxeUo2VEZ6eklxc2pYS0JUZFg0Ri9Y?= =?utf-8?B?Z3V6N3RtaCtQRndERThpZVlsR0U2eDA4SjR0OFpsZkhUUFhiQ3laZC95dCtU?= =?utf-8?B?VTA1MVFieGhNVDdvVDdxME1SRnhkVzEyWVcyai9ldEZNSlRYZHEvbkwzZTdt?= =?utf-8?B?MEJNb01IclR3Z0tCbi82NEFSN24xVzg3alZGQkhhdXRtOVV6dTRrOUpMcnZw?= =?utf-8?B?TzlpT0tpOVY4WGtKQytKNWd3YldRbG1pTmxidWxnMlNmY2NBYWlHUWFmVFlB?= =?utf-8?B?YkpCamJBc0wvcmNMTUpXQmRTZVEvV0wwMnFoSjJ6Y055TTF4QUpxSHpWczBT?= =?utf-8?B?MDJ4amIzeFlaT0NTY1QvbmY5eTNBTmpKVkZKZEp4ODdhSVdzOVpoZnlhR2F5?= =?utf-8?Q?FIaQ=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: d1954dc9-2e2c-4816-654d-08db2ffaf8cc X-MS-Exchange-CrossTenant-originalarrivaltime: 29 Mar 2023 02:11:56.4964 (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: goIzuQSH6E/uG6+4wSsuJSyaGuwFZbFv5gq8hHxq3XpXMXvPoyU28QkNrLBZDwsUFCK9oJl6NZS2sO5ZxsWbSQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO6PR10MB5601 Content-Language: zh-TW Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgUmViZWNjYSwNCg0KSSB3aWxsIGNoYW5nZSB0aGUgZmlsZXMgdG8gIi5kc2MuaW5jIiBhbmQg Ii5mZGYuaW5jIiBuZXh0Lg0KDQpJbiBEU0MgZmlsZSA6DQohaW5jbHVkZSBVc2JOZXR3b3JrUGtn L0NvbmZpZy9Vc2JOZXR3b3JrUGtnRGVmaW5lcy5pbmMuZHNjDQohaW5jbHVkZSBVc2JOZXR3b3Jr UGtnL0NvbmZpZy9Vc2JOZXR3b3JrUGtnLmluYy5kc2MNCg0KSW4gRkRGIGZpbGU6DQohaW5jbHVk ZSBVc2JOZXR3b3JrUGtnL0NvbmZpZy9Vc2JOZXR3b3JrUGtnQ29tcG9uZW50c0R4ZS5pbmMuZmRm DQoNClRoYW5rcywNClJpY2hhcmQNCg0KDQotLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KRnJv bTogUmViZWNjYSBDcmFuIDxyZWJlY2NhQGJzZGlvLmNvbT4NClNlbnQ6IDIwMjPlubQz5pyIMjjm l6UgNzo0MSBQTQ0KVG86IFJpY2hhcmQgSG8gKOS9leaYjuW/oCkgPFJpY2hhcmRIb0BhbWkuY29t PjsgZGV2ZWxAZWRrMi5ncm91cHMuaW8NCkNjOiBBbmRyZXcgRmlzaCA8YWZpc2hAYXBwbGUuY29t PjsgTGVpZiBMaW5kaG9sbSA8cXVpY19sbGluZGhvbEBxdWljaW5jLmNvbT47IE1pY2hhZWwgRCBL aW5uZXkgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPjsgTWljaGFlbCBLdWJhY2tpIDxtaWt1 YmFja0BsaW51eC5taWNyb3NvZnQuY29tPjsgWmhpZ3VhbmcgTGl1IDx6aGlndWFuZy5saXVAaW50 ZWwuY29tPjsgTGltaW5nIEdhbyA8Z2FvbGltaW5nQGJ5b3NvZnQuY29tLmNuPjsgVGluaCBOZ3V5 ZW4gPHRpbmhuZ3V5ZW5Ab3MuYW1wZXJlY29tcHV0aW5nLmNvbT47IFRvbnkgTG8gKOe+hemHkead vikgPFRvbnlMb0BhbWkuY29tPg0KU3ViamVjdDogW0VYVEVSTkFMXSBSZTogW1BBVENIIHY2IDEv M10gVXNiTmV0d29ya1BrZy9Vc2JSbmRpczogQWRkIFVTQiBSTkRJUyBkZXZpY2VzIHN1cHBvcnQN Cg0KDQoqKkNBVVRJT046IFRoZSBlLW1haWwgYmVsb3cgaXMgZnJvbSBhbiBleHRlcm5hbCBzb3Vy Y2UuIFBsZWFzZSBleGVyY2lzZSBjYXV0aW9uIGJlZm9yZSBvcGVuaW5nIGF0dGFjaG1lbnRzLCBj bGlja2luZyBsaW5rcywgb3IgZm9sbG93aW5nIGd1aWRhbmNlLioqDQoNClRoZSBpbmNsdWRlIGZp bGVzIHNob3VsZCBoYXZlIHRoZSBzdWZmaXggIi5kc2MuaW5jIiBvciAiLmZkZi5pbmMiLCBub3QN CiIuaW5jLmRzYyIgYW5kICIuaW5jLmZkZiIuDQoNCkhvdyBhcmUgdGhlIGluY2x1ZGUgZmlsZXMg ZXhwZWN0ZWQgdG8gYmUgdXNlZD8NCg0KSSd2ZSB0cmllZCBpbmNsdWRpbmcgdGhlbSBpbiBPdm1m UGtnL092bWZQa2dYNjQuZHNjIGFuZA0KT3ZtZlBrZy9Pdm1mUGtnWDY0LmZkZiBidXQgYW0gaGF2 aW5nIHRyb3VibGUgZmlndXJpbmcgb3V0IHdoZXJlIGluIHRob3NlDQpmaWxlcyB0aGUgdmFyaW91 cyBsaW5lcyBzaG91bGQgYmUgbG9jYXRlZC4NCg0KDQotLQ0KUmViZWNjYSBDcmFuDQoNCg0KT24g My85LzIzIDEyOjUxIEFNLCBSaWNoYXJkIEhvICjkvZXmmI7lv6ApIHdyb3RlOg0KPiBUaGlzIGRy aXZlciBwcm92aWRlcyBVRUZJIGRyaXZlciBmb3IgVVNCIFJORElTIGRldmljZQ0KPg0KPiBTaWdu ZWQtb2ZmLWJ5OiBSaWNoYXJkIEhvIDxyaWNoYXJkaG9AYW1pLmNvbT4NCj4gQ2M6IEFuZHJldyBG aXNoIDxhZmlzaEBhcHBsZS5jb20+DQo+IENjOiBMZWlmIExpbmRob2xtIDxxdWljX2xsaW5kaG9s QHF1aWNpbmMuY29tPg0KPiBDYzogTWljaGFlbCBEIEtpbm5leSA8bWljaGFlbC5kLmtpbm5leUBp bnRlbC5jb20+DQo+IENjOiBNaWNoYWVsIEt1YmFja2kgPG1pa3ViYWNrQGxpbnV4Lm1pY3Jvc29m dC5jb20+DQo+IENjOiBaaGlndWFuZyBMaXUgPHpoaWd1YW5nLmxpdUBpbnRlbC5jb20+DQo+IENj OiBMaW1pbmcgR2FvIDxnYW9saW1pbmdAYnlvc29mdC5jb20uY24+DQo+IENjOiBSZWJlY2NhIENy YW4gPHJlYmVjY2FAYnNkaW8uY29tPg0KPiBUZXN0ZWQtYnk6IFRpbmggTmd1eWVuIDx0aW5obmd1 eWVuQG9zLmFtcGVyZWNvbXB1dGluZy5jb20+DQo+IFJldmlld2VkLWJ5OiBUb255IExvIDx0b255 bG9AYW1pLmNvbT4NCj4gLS0tDQo+ICAgVXNiTmV0d29ya1BrZy9Vc2JOZXR3b3JrUGtnLmRlYyAg ICAgICAgICAgICAgIHwgICA0NiArDQo+ICAgVXNiTmV0d29ya1BrZy9Db25maWcvVXNiTmV0d29y a1BrZy5pbmMuZHNjICAgIHwgICAgOSArDQo+ICAgLi4uL0NvbmZpZy9Vc2JOZXR3b3JrUGtnQ29t cG9uZW50c0R4ZS5pbmMuZHNjIHwgICAyMCArDQo+ICAgLi4uL0NvbmZpZy9Vc2JOZXR3b3JrUGtn RGVmaW5lcy5pbmMuZHNjICAgICAgIHwgICAyMyArDQo+ICAgLi4uL0NvbmZpZy9Vc2JOZXR3b3Jr UGtnQ29tcG9uZW50c0R4ZS5pbmMuZmRmIHwgICAyMCArDQo+ICAgVXNiTmV0d29ya1BrZy9OZXR3 b3JrQ29tbW9uL05ldHdvcmtDb21tb24uaW5mIHwgICA0OSArDQo+ICAgVXNiTmV0d29ya1BrZy9V c2JSbmRpcy9Vc2JSbmRpcy5pbmYgICAgICAgICAgIHwgICA0MiArDQo+ICAgLi4uL1Byb3RvY29s L0Vka0lJVXNiRXRoZXJuZXRQcm90b2NvbC5oICAgICAgIHwgIDg3OCArKysrKysrKw0KPiAgIFVz Yk5ldHdvcmtQa2cvTmV0d29ya0NvbW1vbi9Ecml2ZXJCaW5kaW5nLmggICB8ICAyNjYgKysrDQo+ ICAgVXNiTmV0d29ya1BrZy9Vc2JSbmRpcy9Vc2JSbmRpcy5oICAgICAgICAgICAgIHwgIDU4NiAr KysrKysNCj4gICBVc2JOZXR3b3JrUGtnL05ldHdvcmtDb21tb24vQ29tcG9uZW50TmFtZS5jICAg fCAgMjYzICsrKw0KPiAgIFVzYk5ldHdvcmtQa2cvTmV0d29ya0NvbW1vbi9Ecml2ZXJCaW5kaW5n LmMgICB8ICA1OTUgKysrKysrDQo+ICAgVXNiTmV0d29ya1BrZy9OZXR3b3JrQ29tbW9uL1B4ZUZ1 bmN0aW9uLmMgICAgIHwgMTgwMyArKysrKysrKysrKysrKysrKw0KPiAgIFVzYk5ldHdvcmtQa2cv VXNiUm5kaXMvQ29tcG9uZW50TmFtZS5jICAgICAgICB8ICAxNzIgKysNCj4gICBVc2JOZXR3b3Jr UGtnL1VzYlJuZGlzL1VzYlJuZGlzLmMgICAgICAgICAgICAgfCAgODg2ICsrKysrKysrDQo+ICAg VXNiTmV0d29ya1BrZy9Vc2JSbmRpcy9Vc2JSbmRpc0Z1bmN0aW9uLmMgICAgIHwgMTcxOCArKysr KysrKysrKysrKysrDQo+ICAgVXNiTmV0d29ya1BrZy9SZWFkTWUubWQgICAgICAgICAgICAgICAg ICAgICAgIHwgICA2NSArDQo+ICAgVXNiTmV0d29ya1BrZy9SZWxlYXNlTm90ZXMubWQgICAgICAg ICAgICAgICAgIHwgICAxMSArDQo+ICAgMTggZmlsZXMgY2hhbmdlZCwgNzQ1MiBpbnNlcnRpb25z KCspDQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IFVzYk5ldHdvcmtQa2cvVXNiTmV0d29ya1BrZy5k ZWMNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgVXNiTmV0d29ya1BrZy9Db25maWcvVXNiTmV0d29y a1BrZy5pbmMuZHNjDQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IFVzYk5ldHdvcmtQa2cvQ29uZmln L1VzYk5ldHdvcmtQa2dDb21wb25lbnRzRHhlLmluYy5kc2MNCj4gICBjcmVhdGUgbW9kZSAxMDA2 NDQgVXNiTmV0d29ya1BrZy9Db25maWcvVXNiTmV0d29ya1BrZ0RlZmluZXMuaW5jLmRzYw0KPiAg IGNyZWF0ZSBtb2RlIDEwMDY0NCBVc2JOZXR3b3JrUGtnL0NvbmZpZy9Vc2JOZXR3b3JrUGtnQ29t cG9uZW50c0R4ZS5pbmMuZmRmDQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IFVzYk5ldHdvcmtQa2cv TmV0d29ya0NvbW1vbi9OZXR3b3JrQ29tbW9uLmluZg0KPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBV c2JOZXR3b3JrUGtnL1VzYlJuZGlzL1VzYlJuZGlzLmluZg0KPiAgIGNyZWF0ZSBtb2RlIDEwMDY0 NCBVc2JOZXR3b3JrUGtnL0luY2x1ZGUvUHJvdG9jb2wvRWRrSUlVc2JFdGhlcm5ldFByb3RvY29s LmgNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgVXNiTmV0d29ya1BrZy9OZXR3b3JrQ29tbW9uL0Ry aXZlckJpbmRpbmcuaA0KPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBVc2JOZXR3b3JrUGtnL1VzYlJu ZGlzL1VzYlJuZGlzLmgNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgVXNiTmV0d29ya1BrZy9OZXR3 b3JrQ29tbW9uL0NvbXBvbmVudE5hbWUuYw0KPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBVc2JOZXR3 b3JrUGtnL05ldHdvcmtDb21tb24vRHJpdmVyQmluZGluZy5jDQo+ICAgY3JlYXRlIG1vZGUgMTAw NjQ0IFVzYk5ldHdvcmtQa2cvTmV0d29ya0NvbW1vbi9QeGVGdW5jdGlvbi5jDQo+ICAgY3JlYXRl IG1vZGUgMTAwNjQ0IFVzYk5ldHdvcmtQa2cvVXNiUm5kaXMvQ29tcG9uZW50TmFtZS5jDQo+ICAg Y3JlYXRlIG1vZGUgMTAwNjQ0IFVzYk5ldHdvcmtQa2cvVXNiUm5kaXMvVXNiUm5kaXMuYw0KPiAg IGNyZWF0ZSBtb2RlIDEwMDY0NCBVc2JOZXR3b3JrUGtnL1VzYlJuZGlzL1VzYlJuZGlzRnVuY3Rp b24uYw0KPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBVc2JOZXR3b3JrUGtnL1JlYWRNZS5tZA0KPiAg IGNyZWF0ZSBtb2RlIDEwMDY0NCBVc2JOZXR3b3JrUGtnL1JlbGVhc2VOb3Rlcy5tZA0KPg0KPiBk aWZmIC0tZ2l0IGEvVXNiTmV0d29ya1BrZy9Vc2JOZXR3b3JrUGtnLmRlYyBiL1VzYk5ldHdvcmtQ a2cvVXNiTmV0d29ya1BrZy5kZWMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAw MDAwMDAwMDAwLi4zMGU0ZTRjOGFhYzcNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9Vc2JOZXR3 b3JrUGtnL1VzYk5ldHdvcmtQa2cuZGVjDQo+IEBAIC0wLDAgKzEsNDYgQEANCj4gKyMjIEBmaWxl DQo+ICsjICBUaGlzIHBhY2thZ2UgZGVmaW5lcyBVc2IgbmV0d29yayBzcGVjaWZpYyBpbnRlcmZh Y2VzIGFuZCBsaWJyYXJ5IGNsYXNzZXMNCj4gKyMgIGFzIHdlbGwgYXMgY29uZmlndXJhdGlvbiBm b3Igc3RhbmRhcmQgZWRrMiBwYWNrYWdlcy4NCj4gKyMNCj4gKyMgQ29weXJpZ2h0IChjKSAyMDIz LCBBbWVyaWNhbiBNZWdhdHJlbmRzIEludGVybmF0aW9uYWwgTExDLiBBbGwgcmlnaHRzIHJlc2Vy dmVkLjxCUj4NCj4gKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRl bnQNCj4gKyMjDQo+ICsNCj4gK1tEZWZpbmVzXQ0KPiArICBERUNfU1BFQ0lGSUNBVElPTiAgICAg ICAgICAgICAgPSAweDAwMDEwMDA1DQo+ICsgIFBBQ0tBR0VfTkFNRSAgICAgICAgICAgICAgICAg ICA9IFVzYk5ldHdvcmtQa2cNCj4gKyAgUEFDS0FHRV9HVUlEICAgICAgICAgICAgICAgICAgID0g YWJmYWI5MWUtMzdlYS00Y2I0LTgwYTYtNTYzZGJiMGJjZWM2DQo+ICsgIFBBQ0tBR0VfVkVSU0lP TiAgICAgICAgICAgICAgICA9IDAuMQ0KPiArDQo+ICtbSW5jbHVkZXNdDQo+ICsgIEluY2x1ZGUN Cj4gKw0KPiArW1Byb3RvY29sc10NCj4gKyAgIyMgSW5jbHVkZS9Qcm90b2NvbC9FZGtJSVVzYkV0 aGVybmV0LmgNCj4gKyAgZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlkID0geyAweDhkODk2OWNjLCAw eGZlYjAsIDB4NDMwMywgeyAweGIyLCAweDFhLCAweDFmLCAweDExLCAweDZmLCAweDM4LCAweDU2 LCAweDQzIH0gfQ0KPiArDQo+ICtbR3VpZHNdDQo+ICsgICMjIFVzYiBOZXR3b3JrIHBhY2thZ2Ug dG9rZW4gc3BhY2UgR1VJRA0KPiArICBnVXNiTmV0d29ya1BrZ1Rva2VuU3BhY2VHdWlkICA9IHsg MHhBMTIzMUU4MiwgMHgyMUI4LCAweDQyMDQsIHsgMHg5MiwgMHhCQiwgMHgzNywgMHgzQSwgMHhG QiwgMHgwMSwgMHhDNiwgMHhBMSB9IH0NCj4gKw0KPiArW1BjZHNGZWF0dXJlRmxhZ10NCj4gKw0K PiArICAjIyBTZXQgdGhlIFBDRCAnVXNiQ2RjRWNtU3VwcG9ydCcgdG8gJ1RSVUUnIGlmICdVc2Ig Q2RjIEVjbSBkZXZpY2UnIG5lZWQgdG8gYmUgZW5hYmxlZC4NCj4gKyAgZ1VzYk5ldHdvcmtQa2dU b2tlblNwYWNlR3VpZC5Vc2JDZGNFY21TdXBwb3J0fEZBTFNFfEJPT0xFQU58MHgwMDAwMDAwMQ0K PiArDQo+ICsgICMjIFNldCB0aGUgUENEICdVc2JDZGNOY21TdXBwb3J0JyB0byAnVFJVRScgaWYg J1VzYiBDZGMgTmNtIGRldmljZScgbmVlZCB0byBiZSBlbmFibGVkLg0KPiArICBnVXNiTmV0d29y a1BrZ1Rva2VuU3BhY2VHdWlkLlVzYkNkY05jbVN1cHBvcnR8RkFMU0V8Qk9PTEVBTnwweDAwMDAw MDAyDQo+ICsNCj4gKyAgIyMgU2V0IHRoZSBQQ0QgJ1VzYlJuZGlzU3VwcG9ydCcgdG8gJ1RSVUUn IGlmICdVc2IgUm5kaXMgZGV2aWNlJyBuZWVkIHRvIGJlIGVuYWJsZWQuDQo+ICsgIGdVc2JOZXR3 b3JrUGtnVG9rZW5TcGFjZUd1aWQuVXNiUm5kaXNTdXBwb3J0fFRSVUV8Qk9PTEVBTnwweDAwMDAw MDAzDQo+ICsNCj4gK1tQY2RzRml4ZWRBdEJ1aWxkLCBQY2RzUGF0Y2hhYmxlSW5Nb2R1bGVdDQo+ ICsgICMjIFN1cHBvcnQgcmF0ZSBsaW1pdGluZw0KPiArICBnVXNiTmV0d29ya1BrZ1Rva2VuU3Bh Y2VHdWlkLkVuYWJsZVJhdGVMaW1pdGluZ3xGQUxTRXxCT09MRUFOfDB4MDAwMTAwMDENCj4gKw0K PiArICAjIyBUaGUgcmF0ZSBsaW1pdGluZyBDcmVkaXQgdmFsdWUgaXMgY2hlY2sgaW4gcmF0ZSBs aW1pdGVyIGV2ZW50Lg0KPiArICAjICBJdCBpcyB0byBjb250cm9sIHRoZSBSYXRlTGltaXRpbmdD cmVkaXRDb3VudCBtYXggdmFsdWUuDQo+ICsgIGdVc2JOZXR3b3JrUGtnVG9rZW5TcGFjZUd1aWQu UmF0ZUxpbWl0aW5nQ3JlZGl0fDEwfFVJTlQzMnwweDAwMDEwMDAyDQo+ICsNCj4gKyAgIyMgVGhl IHZhbHVlIG9mIHJhdGUgbGltaXRlciBldmVudCBmb3IgdGltZW91dCBjaGVjay4gRGVmYXVsdCB2 YWx1ZSBpcyAxMDAodW5pdCAxbXMpLg0KPiArICBnVXNiTmV0d29ya1BrZ1Rva2VuU3BhY2VHdWlk LlJhdGVMaW1pdGluZ0ZhY3RvcnwxMDB8VUlOVDMyfDB4MDAwMTAwMDMNCj4gZGlmZiAtLWdpdCBh L1VzYk5ldHdvcmtQa2cvQ29uZmlnL1VzYk5ldHdvcmtQa2cuaW5jLmRzYyBiL1VzYk5ldHdvcmtQ a2cvQ29uZmlnL1VzYk5ldHdvcmtQa2cuaW5jLmRzYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0K PiBpbmRleCAwMDAwMDAwMDAwMDAuLmEzMzE2YjFkNGE4OQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsr KyBiL1VzYk5ldHdvcmtQa2cvQ29uZmlnL1VzYk5ldHdvcmtQa2cuaW5jLmRzYw0KPiBAQCAtMCww ICsxLDkgQEANCj4gKyMjIEBmaWxlDQo+ICsjIEdsb2JhbCBEU0MgZGVmaW5pdGlvbnMgdG8gYmUg aW5jbHVkZWQgaW50byBwcm9qZWN0IERTQyBmaWxlLg0KPiArIw0KPiArIyBDb3B5cmlnaHQgKGMp IDIwMjMsIEFtZXJpY2FuIE1lZ2F0cmVuZHMgSW50ZXJuYXRpb25hbCBMTEMuIEFsbCByaWdodHMg cmVzZXJ2ZWQuPEJSPg0KPiArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNl LVBhdGVudA0KPiArIyMNCj4gKw0KPiArW0NvbXBvbmVudHMuWDY0XQ0KPiArIWluY2x1ZGUgVXNi TmV0d29ya1BrZy9Db25maWcvVXNiTmV0d29ya1BrZ0NvbXBvbmVudHNEeGUuaW5jLmRzYw0KPiBk aWZmIC0tZ2l0IGEvVXNiTmV0d29ya1BrZy9Db25maWcvVXNiTmV0d29ya1BrZ0NvbXBvbmVudHNE eGUuaW5jLmRzYyBiL1VzYk5ldHdvcmtQa2cvQ29uZmlnL1VzYk5ldHdvcmtQa2dDb21wb25lbnRz RHhlLmluYy5kc2MNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAw Li41NDRkZjg0MDRjNjQNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9Vc2JOZXR3b3JrUGtnL0Nv bmZpZy9Vc2JOZXR3b3JrUGtnQ29tcG9uZW50c0R4ZS5pbmMuZHNjDQo+IEBAIC0wLDAgKzEsMjAg QEANCj4gKyMjIEBmaWxlDQo+ICsjIExpc3Qgb2YgQ29yZSBDb21wb25lbnRzLg0KPiArIw0KPiAr IyBDb3B5cmlnaHQgKGMpIDIwMjMsIEFtZXJpY2FuIE1lZ2F0cmVuZHMgSW50ZXJuYXRpb25hbCBM TEMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiArIyMNCj4gKw0KPiArICBVc2JOZXR3b3JrUGtnL05l dHdvcmtDb21tb24vTmV0d29ya0NvbW1vbi5pbmYNCj4gKw0KPiArIWlmIGdVc2JOZXR3b3JrUGtn VG9rZW5TcGFjZUd1aWQuVXNiQ2RjRWNtU3VwcG9ydA0KPiArICBVc2JOZXR3b3JrUGtnL1VzYkNk Y0VjbS9Vc2JDZGNFY20uaW5mDQo+ICshZW5kaWYNCj4gKw0KPiArIWlmIGdVc2JOZXR3b3JrUGtn VG9rZW5TcGFjZUd1aWQuVXNiQ2RjTmNtU3VwcG9ydA0KPiArICBVc2JOZXR3b3JrUGtnL1VzYkNk Y05jbS9Vc2JDZGNOY20uaW5mDQo+ICshZW5kaWYNCj4gKw0KPiArIWlmIGdVc2JOZXR3b3JrUGtn VG9rZW5TcGFjZUd1aWQuVXNiUm5kaXNTdXBwb3J0DQo+ICsgIFVzYk5ldHdvcmtQa2cvVXNiUm5k aXMvVXNiUm5kaXMuaW5mDQo+ICshZW5kaWYNCj4gZGlmZiAtLWdpdCBhL1VzYk5ldHdvcmtQa2cv Q29uZmlnL1VzYk5ldHdvcmtQa2dEZWZpbmVzLmluYy5kc2MgYi9Vc2JOZXR3b3JrUGtnL0NvbmZp Zy9Vc2JOZXR3b3JrUGtnRGVmaW5lcy5pbmMuZHNjDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ IGluZGV4IDAwMDAwMDAwMDAwMC4uODVhMzA5YmNmNTY3DQo+IC0tLSAvZGV2L251bGwNCj4gKysr IGIvVXNiTmV0d29ya1BrZy9Db25maWcvVXNiTmV0d29ya1BrZ0RlZmluZXMuaW5jLmRzYw0KPiBA QCAtMCwwICsxLDIzIEBADQo+ICsjIyBAZmlsZQ0KPiArIyBHbG9iYWwgc3dpdGNoZXMgZW5hYmxl L2Rpc2FibGUgcHJvamVjdCBmZWF0dXJlcy4NCj4gKyMNCj4gKyMgQ29weXJpZ2h0IChjKSAyMDIz LCBBbWVyaWNhbiBNZWdhdHJlbmRzIEludGVybmF0aW9uYWwgTExDLiBBbGwgcmlnaHRzIHJlc2Vy dmVkLjxCUj4NCj4gKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRl bnQNCj4gKyMjDQo+ICsNCj4gK1tEZWZpbmVzXQ0KPiArIWlmICJJQTMyIiBpbiAkKEFSQ0gpICYm ICJYNjQiIGluICQoQVJDSCkNCj4gKyAgREVGSU5FIFBFST1JQTMyDQo+ICsgIERFRklORSBEWEU9 WDY0DQo+ICshZWxzZQ0KPiArICBERUZJTkUgUEVJPUNPTU1PTg0KPiArICBERUZJTkUgRFhFPUNP TU1PTg0KPiArIWVuZGlmDQo+ICsNCj4gK1tQYWNrYWdlc10NCj4gKyAgVXNiTmV0d29ya1BrZy9V c2JOZXR3b3JrUGtnLmRlYw0KPiArDQo+ICtbUGNkc0ZlYXR1cmVGbGFnXQ0KPiArICBnVXNiTmV0 d29ya1BrZ1Rva2VuU3BhY2VHdWlkLlVzYkNkY0VjbVN1cHBvcnR8RkFMU0UNCj4gKyAgZ1VzYk5l dHdvcmtQa2dUb2tlblNwYWNlR3VpZC5Vc2JDZGNOY21TdXBwb3J0fEZBTFNFDQo+ICsgIGdVc2JO ZXR3b3JrUGtnVG9rZW5TcGFjZUd1aWQuVXNiUm5kaXNTdXBwb3J0fFRSVUUNCj4gZGlmZiAtLWdp dCBhL1VzYk5ldHdvcmtQa2cvQ29uZmlnL1VzYk5ldHdvcmtQa2dDb21wb25lbnRzRHhlLmluYy5m ZGYgYi9Vc2JOZXR3b3JrUGtnL0NvbmZpZy9Vc2JOZXR3b3JrUGtnQ29tcG9uZW50c0R4ZS5pbmMu ZmRmDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uMTA2MTZk OTdlZGI0DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvVXNiTmV0d29ya1BrZy9Db25maWcvVXNi TmV0d29ya1BrZ0NvbXBvbmVudHNEeGUuaW5jLmZkZg0KPiBAQCAtMCwwICsxLDIwIEBADQo+ICsj IyBAZmlsZQ0KPiArIyBMaXN0IG9mIENvcmUgQ29tcG9uZW50cy4NCj4gKyMNCj4gKyMgQ29weXJp Z2h0IChjKSAyMDIzLCBBbWVyaWNhbiBNZWdhdHJlbmRzIEludGVybmF0aW9uYWwgTExDLiBBbGwg cmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0y LUNsYXVzZS1QYXRlbnQNCj4gKyMjDQo+ICsNCj4gKyAgSU5GIFVzYk5ldHdvcmtQa2cvTmV0d29y a0NvbW1vbi9OZXR3b3JrQ29tbW9uLmluZg0KPiArDQo+ICshaWYgZ1VzYk5ldHdvcmtQa2dUb2tl blNwYWNlR3VpZC5Vc2JDZGNFY21TdXBwb3J0DQo+ICsgIElORiBVc2JOZXR3b3JrUGtnL1VzYkNk Y0VjbS9Vc2JDZGNFY20uaW5mDQo+ICshZW5kaWYNCj4gKw0KPiArIWlmIGdVc2JOZXR3b3JrUGtn VG9rZW5TcGFjZUd1aWQuVXNiQ2RjTmNtU3VwcG9ydA0KPiArICBJTkYgVXNiTmV0d29ya1BrZy9V c2JDZGNOY20vVXNiQ2RjTmNtLmluZg0KPiArIWVuZGlmDQo+ICsNCj4gKyFpZiBnVXNiTmV0d29y a1BrZ1Rva2VuU3BhY2VHdWlkLlVzYlJuZGlzU3VwcG9ydA0KPiArICBJTkYgVXNiTmV0d29ya1Br Zy9Vc2JSbmRpcy9Vc2JSbmRpcy5pbmYNCj4gKyFlbmRpZg0KPiBkaWZmIC0tZ2l0IGEvVXNiTmV0 d29ya1BrZy9OZXR3b3JrQ29tbW9uL05ldHdvcmtDb21tb24uaW5mIGIvVXNiTmV0d29ya1BrZy9O ZXR3b3JrQ29tbW9uL05ldHdvcmtDb21tb24uaW5mDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ IGluZGV4IDAwMDAwMDAwMDAwMC4uODkyMzEwMmJjMzUwDQo+IC0tLSAvZGV2L251bGwNCj4gKysr IGIvVXNiTmV0d29ya1BrZy9OZXR3b3JrQ29tbW9uL05ldHdvcmtDb21tb24uaW5mDQo+IEBAIC0w LDAgKzEsNDkgQEANCj4gKyMjIEBmaWxlDQo+ICsjICAgVGhpcyBpcyBVc2IgTmV0d29yayBDb21t b24gZHJpdmVyIGZvciBEWEUgcGhhc2UuDQo+ICsjDQo+ICsjIENvcHlyaWdodCAoYykgMjAyMywg QW1lcmljYW4gTWVnYXRyZW5kcyBJbnRlcm5hdGlvbmFsIExMQy4gQWxsIHJpZ2h0cyByZXNlcnZl ZC48QlI+DQo+ICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50 DQo+ICsjIw0KPiArDQo+ICtbRGVmaW5lc10NCj4gKyAgSU5GX1ZFUlNJT04gICAgICAgICAgICAg ICAgICAgID0gMHgwMDAxMDAwNQ0KPiArICBCQVNFX05BTUUgICAgICAgICAgICAgICAgICAgICAg PSBOZXR3b3JrQ29tbW9uDQo+ICsgIEZJTEVfR1VJRCAgICAgICAgICAgICAgICAgICAgICA9IGNh NmViNGY0LWYxZDYtNDM3NS05N2Q2LTE4ODU2ODcxZTFiZg0KPiArICBNT0RVTEVfVFlQRSAgICAg ICAgICAgICAgICAgICAgPSBEWEVfRFJJVkVSDQo+ICsgIFZFUlNJT05fU1RSSU5HICAgICAgICAg ICAgICAgICA9IDEuMA0KPiArICBFTlRSWV9QT0lOVCAgICAgICAgICAgICAgICAgICAgPSBOZXR3 b3JrQ29tbW9uRW50cnkNCj4gKw0KPiArW1NvdXJjZXNdDQo+ICsgIERyaXZlckJpbmRpbmcuYw0K PiArICBEcml2ZXJCaW5kaW5nLmgNCj4gKyAgQ29tcG9uZW50TmFtZS5jDQo+ICsgIFB4ZUZ1bmN0 aW9uLmMNCj4gKw0KPiArW1BhY2thZ2VzXQ0KPiArICBNZGVQa2cvTWRlUGtnLmRlYw0KPiArICBN ZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLmRlYw0KPiArICBVc2JOZXR3b3JrUGtnL1VzYk5ldHdv cmtQa2cuZGVjDQo+ICsNCj4gK1tMaWJyYXJ5Q2xhc3Nlc10NCj4gKyAgVWVmaURyaXZlckVudHJ5 UG9pbnQNCj4gKyAgVWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGliDQo+ICsgIFVlZmlMaWINCj4gKyAg RGVidWdMaWINCj4gKyAgVWVmaVVzYkxpYg0KPiArICBNZW1vcnlBbGxvY2F0aW9uTGliDQo+ICsg IEJhc2VNZW1vcnlMaWINCj4gKw0KPiArW1Byb3RvY29sc10NCj4gKyAgZ0VmaU5ldHdvcmtJbnRl cmZhY2VJZGVudGlmaWVyUHJvdG9jb2xHdWlkXzMxDQo+ICsgIGdFZmlVc2JJb1Byb3RvY29sR3Vp ZA0KPiArICBnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZA0KPiArICBnRWZpRHJpdmVyQmluZGlu Z1Byb3RvY29sR3VpZA0KPiArICBnRWRrSUlVc2JFdGhQcm90b2NvbEd1aWQNCj4gKw0KPiArW1Bj ZF0NCj4gKyAgZ1VzYk5ldHdvcmtQa2dUb2tlblNwYWNlR3VpZC5FbmFibGVSYXRlTGltaXRpbmcN Cj4gKyAgZ1VzYk5ldHdvcmtQa2dUb2tlblNwYWNlR3VpZC5SYXRlTGltaXRpbmdDcmVkaXQNCj4g KyAgZ1VzYk5ldHdvcmtQa2dUb2tlblNwYWNlR3VpZC5SYXRlTGltaXRpbmdGYWN0b3INCj4gKw0K PiArW0RlcGV4XQ0KPiArICBUUlVFDQo+IGRpZmYgLS1naXQgYS9Vc2JOZXR3b3JrUGtnL1VzYlJu ZGlzL1VzYlJuZGlzLmluZiBiL1VzYk5ldHdvcmtQa2cvVXNiUm5kaXMvVXNiUm5kaXMuaW5mDQo+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uNjQyMDVlNDI3NzQ1 DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvVXNiTmV0d29ya1BrZy9Vc2JSbmRpcy9Vc2JSbmRp cy5pbmYNCj4gQEAgLTAsMCArMSw0MiBAQA0KPiArIyMgQGZpbGUNCj4gKyMgICBUaGlzIGlzIFVz YiBSbmRpcyBkcml2ZXIgZm9yIERYRSBwaGFzZS4NCj4gKyMNCj4gKyMgQ29weXJpZ2h0IChjKSAy MDIzLCBBbWVyaWNhbiBNZWdhdHJlbmRzIEludGVybmF0aW9uYWwgTExDLiBBbGwgcmlnaHRzIHJl c2VydmVkLjxCUj4NCj4gKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1Q YXRlbnQNCj4gKyMjDQo+ICsNCj4gK1tEZWZpbmVzXQ0KPiArICBJTkZfVkVSU0lPTiAgICAgICAg ICAgICAgICAgICAgPSAweDAwMDEwMDA1DQo+ICsgIEJBU0VfTkFNRSAgICAgICAgICAgICAgICAg ICAgICA9IFVzYlJuZGlzDQo+ICsgIEZJTEVfR1VJRCAgICAgICAgICAgICAgICAgICAgICA9IDEx RTMyQzM0LTYwQjUtNDk5MS04REVBLTYzRDNFOEM4NzZERQ0KPiArICBNT0RVTEVfVFlQRSAgICAg ICAgICAgICAgICAgICAgPSBEWEVfRFJJVkVSDQo+ICsgIFZFUlNJT05fU1RSSU5HICAgICAgICAg ICAgICAgICA9IDEuMA0KPiArICBFTlRSWV9QT0lOVCAgICAgICAgICAgICAgICAgICAgPSBVc2JS bmRpc0VudHJ5DQo+ICsNCj4gK1tTb3VyY2VzXQ0KPiArICBVc2JSbmRpcy5jDQo+ICsgIFVzYlJu ZGlzLmgNCj4gKyAgVXNiUm5kaXNGdW5jdGlvbi5jDQo+ICsgIENvbXBvbmVudE5hbWUuYw0KPiAr DQo+ICtbUGFja2FnZXNdDQo+ICsgIE1kZVBrZy9NZGVQa2cuZGVjDQo+ICsgIFVzYk5ldHdvcmtQ a2cvVXNiTmV0d29ya1BrZy5kZWMNCj4gKw0KPiArW0xpYnJhcnlDbGFzc2VzXQ0KPiArICBVZWZp RHJpdmVyRW50cnlQb2ludA0KPiArICBVZWZpQm9vdFNlcnZpY2VzVGFibGVMaWINCj4gKyAgVWVm aUxpYg0KPiArICBEZWJ1Z0xpYg0KPiArICBVZWZpVXNiTGliDQo+ICsgIE1lbW9yeUFsbG9jYXRp b25MaWINCj4gKyAgQmFzZU1lbW9yeUxpYg0KPiArDQo+ICtbUHJvdG9jb2xzXQ0KPiArICBnRWZp VXNiSW9Qcm90b2NvbEd1aWQNCj4gKyAgZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQNCj4gKyAg Z0VmaURyaXZlckJpbmRpbmdQcm90b2NvbEd1aWQNCj4gKyAgZ0Vka0lJVXNiRXRoUHJvdG9jb2xH dWlkDQo+ICsNCj4gK1tEZXBleF0NCj4gKyAgVFJVRQ0KPiBkaWZmIC0tZ2l0IGEvVXNiTmV0d29y a1BrZy9JbmNsdWRlL1Byb3RvY29sL0Vka0lJVXNiRXRoZXJuZXRQcm90b2NvbC5oIGIvVXNiTmV0 d29ya1BrZy9JbmNsdWRlL1Byb3RvY29sL0Vka0lJVXNiRXRoZXJuZXRQcm90b2NvbC5oDQo+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uZjU0OTQ2YzdhYTY5DQo+ IC0tLSAvZGV2L251bGwNCj4gKysrIGIvVXNiTmV0d29ya1BrZy9JbmNsdWRlL1Byb3RvY29sL0Vk a0lJVXNiRXRoZXJuZXRQcm90b2NvbC5oDQo+IEBAIC0wLDAgKzEsODc4IEBADQo+ICsvKiogQGZp bGUNCj4gKyAgSGVhZGVyIGZpbGUgY29udGFpbnMgY29kZSBmb3IgVVNCIEV0aGVybmV0IFByb3Rv Y29sDQo+ICsgIGRlZmluaXRpb25zDQo+ICsNCj4gKyAgQ29weXJpZ2h0IChjKSAyMDIzLCBBbWVy aWNhbiBNZWdhdHJlbmRzIEludGVybmF0aW9uYWwgTExDLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxC Uj4NCj4gKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4g KyoqLw0KPiArDQo+ICsjaWZuZGVmIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTF9IXw0KPiAr I2RlZmluZSBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0xfSF8NCj4gKw0KPiArI2RlZmluZSBF REtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0xfR1VJRCBcDQo+ICsgICAgezB4OGQ4OTY5Y2MsIDB4 ZmViMCwgMHg0MzAzLCB7MHhiMiwgMHgxYSwgMHgxZiwgMHgxMSwgMHg2ZiwgMHgzOCwgMHg1Niwg MHg0M319DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IF9FREtJSV9VU0JfRVRIRVJORVRfUFJPVE9D T0wgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MOw0KPiArDQo+ICsjZGVmaW5lIFVTQl9DRENf Q0xBU1MgICAgICAgICAgMHgwMg0KPiArI2RlZmluZSBVU0JfQ0RDX0FDTV9TVUJDTEFTUyAgIDB4 MDINCj4gKyNkZWZpbmUgVVNCX0NEQ19FQ01fU1VCQ0xBU1MgICAweDA2DQo+ICsjZGVmaW5lIFVT Ql9DRENfTkNNX1NVQkNMQVNTICAgMHgwRA0KPiArI2RlZmluZSBVU0JfQ0RDX0RBVEFfQ0xBU1Mg ICAgIDB4MEENCj4gKyNkZWZpbmUgVVNCX0NEQ19EQVRBX1NVQkNMQVNTICAweDAwDQo+ICsjZGVm aW5lIFVTQl9OT19DTEFTU19QUk9UT0NPTCAgMHgwMA0KPiArI2RlZmluZSBVU0JfTkNNX05UQl9Q Uk9UT0NPTCAgIDB4MDENCj4gKyNkZWZpbmUgVVNCX1ZFTkRPUl9QUk9UT0NPTCAgICAweEZGDQo+ ICsNCj4gKy8vIFR5cGUgVmFsdWVzIGZvciB0aGUgRGVzY3JpcHRvclR5cGUgRmllbGQNCj4gKyNk ZWZpbmUgQ1NfSU5URVJGQUNFICAweDI0DQo+ICsjZGVmaW5lIENTX0VORFBPSU5UICAgMHgyNQ0K PiArDQo+ICsvLyBEZXNjcmlwdG9yIFN1YlR5cGUgaW4gRnVuY3Rpb25hbCBEZXNjcmlwdG9ycw0K PiArI2RlZmluZSBIRUFERVJfRlVOX0RFU0NSSVBUT1IgICAgMHgwMA0KPiArI2RlZmluZSBVTklP Tl9GVU5fREVTQ1JJUFRPUiAgICAgMHgwNg0KPiArI2RlZmluZSBFVEhFUk5FVF9GVU5fREVTQ1JJ UFRPUiAgMHgwRg0KPiArDQo+ICsjZGVmaW5lIE1BWF9MQU5fSU5URVJGQUNFICAweDEwDQo+ICsN Cj4gKy8vIFRhYmxlIDIwOiBDbGFzcy1TcGVjaWZpYyBOb3RpZmljYXRpb24gQ29kZXMNCj4gKyNk ZWZpbmUgVVNCX0NEQ19ORVRXT1JLX0NPTk5FQ1RJT04gIDB4MDANCj4gKw0KPiArLy8gNi4zLjEg TmV0d29ya0Nvbm5lY3Rpb24NCj4gKyNkZWZpbmUgTkVUV09SS19DT05ORUNURUQgICAweDAxDQo+ ICsjZGVmaW5lIE5FVFdPUktfRElTQ09OTkVDVCAgMHgwMA0KPiArDQo+ICsvLyBVU0IgSGVhZGVy IGZ1bmN0aW9uYWwgRGVzY3JpcHRvcg0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UOCAg ICAgRnVuY3Rpb25MZW5ndGg7DQo+ICsgIFVJTlQ4ICAgICBEZXNjcmlwdG9yVHlwZTsNCj4gKyAg VUlOVDggICAgIERlc2NyaXB0b3JTdWJ0eXBlOw0KPiArICBVSU5UMTYgICAgQmNkQ2RjOw0KPiAr fSBVU0JfSEVBREVSX0ZVTl9ERVNDUklQVE9SOw0KPiArDQo+ICsvLyBVU0IgVW5pb24gRnVuY3Rp b25hbCBEZXNjcmlwdG9yDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsgIFVJTlQ4ICAgIEZ1bmN0 aW9uTGVuZ3RoOw0KPiArICBVSU5UOCAgICBEZXNjcmlwdG9yVHlwZTsNCj4gKyAgVUlOVDggICAg RGVzY3JpcHRvclN1YnR5cGU7DQo+ICsgIFVJTlQ4ICAgIE1hc3RlckludGVyZmFjZTsNCj4gKyAg VUlOVDggICAgU2xhdmVJbnRlcmZhY2U7DQo+ICt9IFVTQl9VTklPTl9GVU5fREVTQ1JJUFRPUjsN Cj4gKw0KPiArLy8gVVNCIEV0aGVybmV0IEZ1bmN0aW9uYWwgRGVzY3JpcHRvcg0KPiArdHlwZWRl ZiBzdHJ1Y3Qgew0KPiArICBVSU5UOCAgICAgRnVuY3Rpb25MZW5ndGg7DQo+ICsgIFVJTlQ4ICAg ICBEZXNjcmlwdG9yVHlwZTsNCj4gKyAgVUlOVDggICAgIERlc2NyaXB0b3JTdWJ0eXBlOw0KPiAr ICBVSU5UOCAgICAgTWFjQWRkcmVzczsNCj4gKyAgVUlOVDMyICAgIEV0aGVybmV0U3RhdGlzdGlj czsNCj4gKyAgVUlOVDE2ICAgIE1heFNlZ21lbnRTaXplOw0KPiArICBVSU5UMTYgICAgTnVtYmVy TWNGaWx0ZXJzOw0KPiArICBVSU5UOCAgICAgTnVtYmVyUG93ZXJGaWx0ZXJzOw0KPiArfSBVU0Jf RVRIRVJORVRfRlVOX0RFU0NSSVBUT1I7DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAg VUlOVDMyICAgIFVzQml0UmF0ZTsNCj4gKyAgVUlOVDMyICAgIERzQml0UmF0ZTsNCj4gK30gVVNC X0NPTk5FQ1RfU1BFRURfQ0hBTkdFOw0KPiArDQo+ICsvLyBSZXF1ZXN0IFR5cGUgQ29kZXMgZm9y IFVTQiBFdGhlcm5ldA0KPiArI2RlZmluZSBVU0JfRVRIRVJORVRfR0VUX1JFUV9UWVBFICAweEEx DQo+ICsjZGVmaW5lIFVTQl9FVEhFUk5FVF9TRVRfUkVRX1RZUEUgIDB4MjENCj4gKw0KPiArLy8g Q2xhc3MtU3BlY2lmaWMgUmVxdWVzdCBDb2RlcyBmb3IgRXRoZXJuZXQgc3ViY2xhc3MNCj4gKy8v IFVTQiBFQ00gMS4yIHNwZWNpZmljYXRpb24sIFNlY3Rpb24gNi4yDQo+ICsjZGVmaW5lIFNFVF9F VEhfTVVMVElDQVNUX0ZJTFRFUlNfUkVRICAgICAgICAgICAgICAgIDB4NDANCj4gKyNkZWZpbmUg U0VUX0VUSF9QT1dFUl9NQU5BR0VNRU5UX1BBVFRFUk5fRklMVEVSX1JFUSAgMHg0MQ0KPiArI2Rl ZmluZSBHRVRfRVRIX1BPV0VSX01BTkFHRU1FTlRfUEFUVEVSTl9GSUxURVJfUkVRICAweDQyDQo+ ICsjZGVmaW5lIFNFVF9FVEhfUEFDS0VUX0ZJTFRFUl9SRVEgICAgICAgICAgICAgICAgICAgIDB4 NDMNCj4gKyNkZWZpbmUgR0VUX0VUSF9TVEFUSVNUSUNfUkVRICAgICAgICAgICAgICAgICAgICAg ICAgMHg0NA0KPiArDQo+ICsvLyBVU0IgRUNNIGNvbW1hbmQgcmVxdWVzdCBsZW5ndGgNCj4gKyNk ZWZpbmUgVVNCX0VUSF9QT1dFUl9GSUxURVJfTEVOR1RIICAgMiAvLyBTZWN0aW9uIDYuMi4zDQo+ ICsjZGVmaW5lIFVTQl9FVEhfUEFDS0VUX0ZJTFRFUl9MRU5HVEggIDAgLy8gU2VjdGlvbiA2LjIu NA0KPiArI2RlZmluZSBVU0JfRVRIX1NUQVRJU1RJQyAgICAgICAgICAgICA0IC8vIFNlY3Rpb24g Ni4yLjUNCj4gKw0KPiArLy8gVVNCIEV0aGVybmV0IFBhY2tldCBGaWx0ZXIgQml0bWFwDQo+ICsv LyBVU0IgRUNNIDEuMiBzcGVjaWZpY2F0aW9uLCBTZWN0aW9uIDYuMi40DQo+ICsjZGVmaW5lIFVT Ql9FVEhfUEFDS0VUX1RZUEVfUFJPTUlTQ1VPVVMgICAgQklUMA0KPiArI2RlZmluZSBVU0JfRVRI X1BBQ0tFVF9UWVBFX0FMTF9NVUxUSUNBU1QgIEJJVDENCj4gKyNkZWZpbmUgVVNCX0VUSF9QQUNL RVRfVFlQRV9ESVJFQ1RFRCAgICAgICBCSVQyDQo+ICsjZGVmaW5lIFVTQl9FVEhfUEFDS0VUX1RZ UEVfQlJPQURDQVNUICAgICAgQklUMw0KPiArI2RlZmluZSBVU0JfRVRIX1BBQ0tFVF9UWVBFX01V TFRJQ0FTVCAgICAgIEJJVDQNCj4gKw0KPiArLy8gVVNCIEV0aGVybmV0IFN0YXRpc3RpY3MgRmVh dHVyZSBTZWxlY3RvciBDb2Rlcw0KPiArLy8gVVNCIEVDTSAxLjIgc3BlY2lmaWNhdGlvbiwgU2Vj dGlvbiA2LjIuNQ0KPiArI2RlZmluZSBVU0JfRVRIX1hNSVRfT0sgICAgICAgICAgICAgICAgIDB4 MDENCj4gKyNkZWZpbmUgVVNCX0VUSF9SQ1ZfT0sgICAgICAgICAgICAgICAgICAweDAyDQo+ICsj ZGVmaW5lIFVTQl9FVEhfWE1JVF9FUlJPUiAgICAgICAgICAgICAgMHgwMw0KPiArI2RlZmluZSBV U0JfRVRIX1JDVl9FUlJPUiAgICAgICAgICAgICAgIDB4MDQNCj4gKyNkZWZpbmUgVVNCX0VUSF9S Q1ZfTk9fQlVGRkVSICAgICAgICAgICAweDA1DQo+ICsjZGVmaW5lIFVTQl9FVEhfRElSRUNURURf QllURVNfWE1JVCAgICAgMHgwNg0KPiArI2RlZmluZSBVU0JfRVRIX0RJUkVDVEVEX0ZSQU1FU19Y TUlUICAgIDB4MDcNCj4gKyNkZWZpbmUgVVNCX0VUSF9NVUxUSUNBU1RfQllURVNfWE1JVCAgICAw eDA4DQo+ICsjZGVmaW5lIFVTQl9FVEhfTVVMVElDQVNUX0ZSQU1FU19YTUlUICAgMHgwOQ0KPiAr I2RlZmluZSBVU0JfRVRIX0JST0FEQ0FTVF9CWVRFU19YTUlUICAgIDB4MEENCj4gKyNkZWZpbmUg VVNCX0VUSF9CUk9BRENBU1RfRlJBTUVTX1hNSVQgICAweDBCDQo+ICsjZGVmaW5lIFVTQl9FVEhf RElSRUNURURfQllURVNfUkNWICAgICAgMHgwQw0KPiArI2RlZmluZSBVU0JfRVRIX0RJUkVDVEVE X0ZSQU1FU19SQ1YgICAgIDB4MEQNCj4gKyNkZWZpbmUgVVNCX0VUSF9NVUxUSUNBU1RfQllURVNf UkNWICAgICAweDBFDQo+ICsjZGVmaW5lIFVTQl9FVEhfTVVMVElDQVNUX0ZSQU1FU19SQ1YgICAg MHgwRg0KPiArI2RlZmluZSBVU0JfRVRIX0JST0FEQ0FTVF9CWVRFU19SQ1YgICAgIDB4MTANCj4g KyNkZWZpbmUgVVNCX0VUSF9CUk9BRENBU1RfRlJBTUVTX1JDViAgICAweDExDQo+ICsjZGVmaW5l IFVTQl9FVEhfUkNWX0NSQ19FUlJPUiAgICAgICAgICAgMHgxMg0KPiArI2RlZmluZSBVU0JfRVRI X1RSQU5TTUlUX1FVRVVFX0xFTkdUSCAgIDB4MTMNCj4gKyNkZWZpbmUgVVNCX0VUSF9SQ1ZfRVJS T1JfQUxJR05NRU5UICAgICAweDE0DQo+ICsjZGVmaW5lIFVTQl9FVEhfWE1JVF9PTkVfQ09MTElT SU9OICAgICAgMHgxNQ0KPiArI2RlZmluZSBVU0JfRVRIX1hNSVRfTU9SRV9DT0xMSVNJT05TICAg IDB4MTYNCj4gKyNkZWZpbmUgVVNCX0VUSF9YTUlUX0RFRkVSUkVEICAgICAgICAgICAweDE3DQo+ ICsjZGVmaW5lIFVTQl9FVEhfWE1JVF9NQVhfQ09MTElTSU9OUyAgICAgMHgxOA0KPiArI2RlZmlu ZSBVU0JfRVRIX1JDVl9PVkVSUlVOICAgICAgICAgICAgIDB4MTkNCj4gKyNkZWZpbmUgVVNCX0VU SF9YTUlUX1VOREVSUlVOICAgICAgICAgICAweDFBDQo+ICsjZGVmaW5lIFVTQl9FVEhfWE1JVF9I RUFSVEJFQVRfRkFJTFVSRSAgMHgxQg0KPiArI2RlZmluZSBVU0JfRVRIX1hNSVRfVElNRVNfQ1JT X0xPU1QgICAgIDB4MUMNCj4gKyNkZWZpbmUgVVNCX0VUSF9YTUlUX0xBVEVfQ09MTElTSU9OUyAg ICAweDFEDQo+ICsNCj4gKy8vIE5JQyBJbmZvcm1hdGlvbg0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0K PiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgU2lnbmF0dXJlOw0KPiArICBFREtJ SV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICAgKlVzYkV0aDsNCj4gKyAgVUlOVDE2ICAgICAgICAg ICAgICAgICAgICAgICAgIEludGVycnVwT3BGbGFnOw0KPiArICBVSU5UNjQgICAgICAgICAgICAg ICAgICAgICAgICAgTWFwcGVkQWRkcjsNCj4gKyAgUFhFX01BQ19BRERSICAgICAgICAgICAgICAg ICAgIE1jYXN0TGlzdFtNQVhfTUNBU1RfQUREUkVTU19DTlRdOw0KPiArICBVSU5UOCAgICAgICAg ICAgICAgICAgICAgICAgICAgTWNhc3RDb3VudDsNCj4gKyAgVUlOVDY0ICAgICAgICAgICAgICAg ICAgICAgICAgIE1lZGlhSGVhZGVyW01BWF9YTUlUX0JVRkZFUlNdOw0KPiArICBVSU5UOCAgICAg ICAgICAgICAgICAgICAgICAgICAgVHhCdWZmZXJDb3VudDsNCj4gKyAgVUlOVDE2ICAgICAgICAg ICAgICAgICAgICAgICAgIFN0YXRlOw0KPiArICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAg ICAgQ2FuVHJhbnNtaXQ7DQo+ICsgIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgICBSZWNl aXZlU3RhdHVzOw0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgUnhGaWx0ZXI7 DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICBSeEZyYW1lOw0KPiArICBVSU5U MzIgICAgICAgICAgICAgICAgICAgICAgICAgVHhGcmFtZTsNCj4gKyAgVUlOVDE2ICAgICAgICAg ICAgICAgICAgICAgICAgIE5ldHdvcmtDb25uZWN0Ow0KPiArICBVSU5UOCAgICAgICAgICAgICAg ICAgICAgICAgICAgQ2FibGVEZXRlY3Q7DQo+ICsgIFVJTlQxNiAgICAgICAgICAgICAgICAgICAg ICAgICBNYXhTZWdtZW50U2l6ZTsNCj4gKyAgRUZJX01BQ19BRERSRVNTICAgICAgICAgICAgICAg IE1hY0FkZHI7DQo+ICsgIFBYRV9DUEJfU1RBUlRfMzEgICAgICAgICAgICAgICBQeGVTdGFydDsN Cj4gKyAgUFhFX0NQQl9JTklUSUFMSVpFICAgICAgICAgICAgIFB4ZUluaXQ7DQo+ICsgIFVJTlQ4 ICAgICAgICAgICAgICAgICAgICAgICAgICBQZXJtTm9kZUFkZHJlc3NbUFhFX01BQ19MRU5HVEhd Ow0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VycmVudE5vZGVBZGRyZXNz W1BYRV9NQUNfTEVOR1RIXTsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgIEJy b2FkY2FzdE5vZGVBZGRyZXNzW1BYRV9NQUNfTEVOR1RIXTsNCj4gKyAgRUZJX1VTQl9ERVZJQ0Vf UkVRVUVTVCAgICAgICAgIFJlcXVlc3Q7DQo+ICsgIEVGSV9FVkVOVCAgICAgICAgICAgICAgICAg ICAgICBSYXRlTGltaXRlcjsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgIFJh dGVMaW1pdGluZ0NyZWRpdDsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgIFJh dGVMaW1pdGluZ0NyZWRpdENvdW50Ow0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAg ICAgUmF0ZUxpbWl0aW5nUG9sbFRpbWVyOw0KPiArICBCT09MRUFOICAgICAgICAgICAgICAgICAg ICAgICAgUmF0ZUxpbWl0aW5nRW5hYmxlOw0KPiArfSBOSUNfREFUQTsNCj4gKw0KPiArI2RlZmlu ZSBOSUNfREFUQV9TSUdOQVRVUkUgIFNJR05BVFVSRV8zMignbicsICdpJywgJ2MnLCAnZCcpDQo+ ICsjZGVmaW5lIE5JQ19EQVRBX0ZST01fRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MKGEpICBD UiAoYSwgTklDX0RBVEEsIFVzYkV0aCwgTklDX0RBVEFfU0lHTkFUVVJFKQ0KPiArDQo+ICsvKioN Cj4gKyAgVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBvcGVyYXRpb25hbCBz dGF0ZSBvZiB0aGUgVU5ESS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0 byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEg cG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1 Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0 IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNF X0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4g KyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhh cyBhbiBpbnZhbGlkIHZhbHVlLg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBO b3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJ QVBJICpFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9HRVRfU1RBVEUpKA0KPiArICBJTiAgUFhFX0NE QiAgICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiAr LyoqDQo+ICsgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIGNoYW5nZSB0aGUgVU5ESSBvcGVyYXRp b25hbCBzdGF0ZSBmcm9tIHN0b3BwZWQgdG8gc3RhcnRlZC4NCj4gKw0KPiArICBAcGFyYW1baW5d ICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBA cGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJv bGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBy ZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAg ICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAg QHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBh IGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9m IHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkIHZhbHVlLg0KPiArICBAcmV0dmFsIEVGSV9V TlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtF RklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9TVEFSVCkoDQo+ ICsgIElOICBQWEVfQ0RCICAgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICAgKk5pYw0KPiAr ICApOw0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gY2hhbmdlIHRo ZSBVTkRJIG9wZXJhdGlvbmFsIHN0YXRlIGZyb20gc3RhcnRlZCB0byBzdG9wcGVkLg0KPiArDQo+ ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3Ig YmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGlu dGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFs IEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSBy ZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBm YWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BB UkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQgdmFsdWUuDQo+ICsg IEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4g K3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9V TkRJX1NUT1ApKA0KPiArICBJTiAgUFhFX0NEQiAgICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRB ICAgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCBpcyB1c2Vk IHRvIHJldHJpZXZlIGluaXRpYWxpemF0aW9uIGluZm9ybWF0aW9uIHRoYXQgaXMNCj4gKyAgbmVl ZGVkIGJ5IGRyaXZlcnMgYW5kIGFwcGxpY2F0aW9ucyB0byBpbml0aWFsaXplZCBVTkRJLg0KPiAr DQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0 b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3Jr IGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VT UyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0 dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRo ZSByZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVz dCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElE X1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQgdmFsdWUuDQo+ ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8N Cj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5F VF9VTkRJX0dFVF9JTklUX0lORk8pKA0KPiArICBJTiAgUFhFX0NEQiAgICAgKkNkYiwNCj4gKyAg SU4gIE5JQ19EQVRBICAgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29t bWFuZCBpcyB1c2VkIHRvIHJldHJpZXZlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYWJvdXQN Cj4gKyAgdGhlIE5JQyBiZWluZyBjb250cm9sbGVkIGJ5IHRoZSBVTkRJLg0KPiArDQo+ICsgIEBw YXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2su DQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFj ZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAg ICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9U SU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0 Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQg ZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRF UiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQgdmFsdWUuDQo+ICsgIEByZXR2 YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5cGVk ZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX0dF VF9DT05GSUdfSU5GTykoDQo+ICsgIElOICBQWEVfQ0RCICAgICAqQ2RiLA0KPiArICBJTiAgTklD X0RBVEEgICAgKk5pYw0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIHJl c2V0cyB0aGUgbmV0d29yayBhZGFwdGVyIGFuZCBpbml0aWFsaXplcyBVTkRJIHVzaW5nDQo+ICsg IHRoZSBwYXJhbWV0ZXJzIHN1cHBsaWVkIGluIHRoZSBDUEIuDQo+ICsNCj4gKyAgQHBhcmFtW2lu XSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAg QHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRy b2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUg cmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQg ICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsg IEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8g YSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBv ZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZCB2YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklf VU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiAr RUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX1VORElfSU5JVElBTEla RSkoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1hbmQgcmVzZXRzIHRoZSBuZXR3b3Jr IGFkYXB0ZXIgYW5kIHJlaW5pdGlhbGl6ZXMgdGhlIFVOREkNCj4gKyAgd2l0aCB0aGUgc2FtZSBw YXJhbWV0ZXJzIHByb3ZpZGVkIGluIHRoZSBJbml0aWFsaXplIGNvbW1hbmQuDQo+ICsNCj4gKyAg QHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9j ay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJm YWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAg ICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJ X1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVl c3QuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxl ZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1F VEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZCB2YWx1ZS4NCj4gKyAgQHJl dHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKyoqLw0KPiArdHlw ZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX1VORElf UkVTRVQpKA0KPiArICBJTiAgUFhFX0NEQiAgICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAg ICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoZSBTaHV0ZG93biBjb21tYW5kIHJl c2V0cyB0aGUgbmV0d29yayBhZGFwdGVyIGFuZCBsZWF2ZXMgaXQgaW4gYQ0KPiArICBzYWZlIHN0 YXRlIGZvciBhbm90aGVyIGRyaXZlciB0byBpbml0aWFsaXplLg0KPiArDQo+ICsgIEBwYXJhbVtp bl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsg IEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250 cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhl IHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VU ICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiAr ICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRv IGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUg b2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQgdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJ X1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4g K0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX1NIVVRET1dO KSgNCj4gKyAgSU4gIFBYRV9DREIgICAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgICAqTmlj DQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGUgSW50ZXJydXB0IEVuYWJsZXMgY29tbWFu ZCBjYW4gYmUgdXNlZCB0byByZWFkIGFuZC9vciBjaGFuZ2UNCj4gKyAgdGhlIGN1cnJlbnQgZXh0 ZXJuYWwgaW50ZXJydXB0IGVuYWJsZSBzZXR0aW5ncy4NCj4gKw0KPiArICBAcGFyYW1baW5dICBD ZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFy YW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxl ciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1 ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAg ICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJl dHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRl dmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9mIHRo ZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkIHZhbHVlLg0KPiArICBAcmV0dmFsIEVGSV9VTlNV UFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklf U1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9JTlRFUlJVUFRfRU5B QkxFKSgNCj4gKyAgSU4gIFBYRV9DREIgICAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgICAq TmljDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBy ZWFkIGFuZCBjaGFuZ2UgcmVjZWl2ZSBmaWx0ZXJzIGFuZCwNCj4gKyAgaWYgc3VwcG9ydGVkLCBy ZWFkIGFuZCBjaGFuZ2UgdGhlIG11bHRpY2FzdCBNQUMgYWRkcmVzcyBmaWx0ZXIgbGlzdC4NCj4g Kw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlw dG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29y ayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NF U1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJl dHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0 aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVl c3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJ RF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkIHZhbHVlLg0K PiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArKiov DQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJO RVRfVU5ESV9SRUNFSVZFX0ZJTFRFUikoDQo+ICsgIElOICBQWEVfQ0RCICAgICAqQ2RiLA0KPiAr ICBJTiAgTklDX0RBVEEgICAgKk5pYw0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBj b21tYW5kIGlzIHVzZWQgdG8gZ2V0IGN1cnJlbnQgc3RhdGlvbiBhbmQgYnJvYWRjYXN0IE1BQyBh ZGRyZXNzZXMNCj4gKyAgYW5kLCBpZiBzdXBwb3J0ZWQsIHRvIGNoYW5nZSB0aGUgY3VycmVudCBz dGF0aW9uIE1BQyBhZGRyZXNzLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVy IHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAg QSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsN Cj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQg c3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVv dXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJ Q0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0K PiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMg aGFzIGFuIGludmFsaWQgdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAg IE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhF RklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX1NUQVRJT05fQUREUkVTUykoDQo+ICsgIElO ICBQWEVfQ0RCICAgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICAgKk5pYw0KPiArICApOw0K PiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gcmVhZCBhbmQgY2xlYXIg dGhlIE5JQyB0cmFmZmljIHN0YXRpc3RpY3MuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBB IHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2lu XSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0 YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBl eGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAg IEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsgIEByZXR2YWwg RUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2Ug ZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFy YW1ldGVycyBoYXMgYW4gaW52YWxpZCB2YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JU RUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRV Uw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX1VORElfU1RBVElTVElDUykoDQo+ICsg IElOICBQWEVfQ0RCICAgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICAgKk5pYw0KPiArICAp Ow0KPiArDQo+ICsvKioNCj4gKyAgVHJhbnNsYXRlIGEgbXVsdGljYXN0IElQdjQgb3IgSVB2NiBh ZGRyZXNzIHRvIGEgbXVsdGljYXN0IE1BQyBhZGRyZXNzLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0g IENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBw YXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9s bGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJl cXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAg ICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiArICBA cmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEg ZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2Yg dGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQgdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJX1VO U1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VG SV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX01DQVNUX0lQVE9N QUMpKA0KPiArICBJTiAgUFhFX0NEQiAgICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAgICpO aWMNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIHJl YWQgYW5kIHdyaXRlIChpZiBzdXBwb3J0ZWQgYnkgTklDIEgvVykNCj4gKyAgbm9udm9sYXRpbGUg c3RvcmFnZSBvbiB0aGUgTklDLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVy IHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAg QSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsN Cj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQg c3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVv dXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJ Q0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0K PiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMg aGFzIGFuIGludmFsaWQgdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAg IE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhF RklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX05WX0RBVEEpKA0KPiArICBJTiAgUFhFX0NE QiAgICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiAr LyoqDQo+ICsgIFRoaXMgY29tbWFuZCByZXR1cm5zIHRoZSBjdXJyZW50IGludGVycnVwdCBzdGF0 dXMgYW5kL29yIHRoZQ0KPiArICB0cmFuc21pdHRlZCBidWZmZXIgYWRkcmVzc2VzIGFuZCB0aGUg Y3VycmVudCBtZWRpYSBzdGF0dXMuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50 ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmlj ICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4g Kw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRl ZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGlt ZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJX0RF VklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3Iu DQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVy cyBoYXMgYW4gaW52YWxpZCB2YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAg ICAgTm90IHN1cHBvcnRlZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiAr KEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX1VORElfR0VUX1NUQVRVUykoDQo+ICsgIElOICBQ WEVfQ0RCICAgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICAgKk5pYw0KPiArICApOw0KPiAr DQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gZmlsbCB0aGUgbWVkaWEgaGVh ZGVyKHMpIGluIHRyYW5zbWl0IHBhY2tldChzKS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIg IEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1b aW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBk YXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0 IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAg ICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZh bCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmlj ZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9mIHRoZSBw YXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkIHZhbHVlLg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBP UlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RB VFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9GSUxMX0hFQURFUikoDQo+ ICsgIElOICBQWEVfQ0RCICAgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICAgKk5pYw0KPiAr ICApOw0KPiArDQo+ICsvKioNCj4gKyAgVGhlIFRyYW5zbWl0IGNvbW1hbmQgaXMgdXNlZCB0byBw bGFjZSBhIHBhY2tldCBpbnRvIHRoZSB0cmFuc21pdCBxdWV1ZS4NCj4gKw0KPiArICBAcGFyYW1b aW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiAr ICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29u dHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRo ZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9V VCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4g KyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0 byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25l IG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkIHZhbHVlLg0KPiArICBAcmV0dmFsIEVG SV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9UUkFOU01J VCkoDQo+ICsgIElOICBQWEVfQ0RCICAgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICAgKk5p Yw0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgV2hlbiB0aGUgbmV0d29yayBhZGFwdGVyIGhh cyByZWNlaXZlZCBhIGZyYW1lLCB0aGlzIGNvbW1hbmQgaXMgdXNlZA0KPiArICB0byBjb3B5IHRo ZSBmcmFtZSBpbnRvIGRyaXZlci9hcHBsaWNhdGlvbiBzdG9yYWdlLg0KPiArDQo+ICsgIEBwYXJh bVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBj b250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAg VGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1F T1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0K PiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVl IHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBP bmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQgdmFsdWUuDQo+ICsgIEByZXR2YWwg RUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5cGVkZWYN Cj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX1JFQ0VJ VkUpKA0KPiArICBJTiAgUFhFX0NEQiAgICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAgICpO aWMNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCByZXNldHMgdGhlIG5l dHdvcmsgYWRhcHRlciBhbmQgaW5pdGlhbGl6ZXMgVU5ESSB1c2luZw0KPiArICB0aGUgcGFyYW1l dGVycyBzdXBwbGllZCBpbiB0aGUgQ1BCLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICAgICBDZGIg IEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1b aW4sIG91dF0gTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xs ZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVx dWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAg ICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsgIEBy ZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBk ZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0 aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZCB2YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklfVU5T VVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJ X1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX0lOSVRJQUxJWkUpKA0KPiAr ICBJTiAgICAgIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiBPVVQgIE5JQ19EQVRBICAqTmljDQo+ ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byByZWFkIGFu ZCBjbGVhciB0aGUgTklDIHRyYWZmaWMgc3RhdGlzdGljcy4NCj4gKw0KPiArICBAcGFyYW1baW5d ICBOaWMgICAgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBk YXRhLg0KPiArICBAcGFyYW1baW5dICBEYkFkZHIgIERhdGEgQmxvY2sgQWRkcmVzcy4NCj4gKyAg QHBhcmFtW2luXSAgRGJTaXplICBEYXRhIEJsb2NrIFNpemUuDQo+ICsNCj4gKyAgQHJldHZhbCBF RklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0K PiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhl Y3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBU aGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVG SV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQg dmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQu DQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VT Ql9FVEhFUk5FVF9TVEFUSVNUSUNTKSgNCj4gKyAgSU4gIE5JQ19EQVRBICAgICpOaWMsDQo+ICsg IElOICBVSU5UNjQgICAgICBEYkFkZHIsDQo+ICsgIElOICBVSU5UMTYgICAgICBEYlNpemUNCj4g KyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBtYW5hZ2Ug YSBVU0IgZGV2aWNlIHdpdGggdGhlIGJ1bGsgdHJhbnNmZXIgcGlwZS4gVGhlIGVuZHBvaW50IGlz IEJ1bGsgaW4uDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgICAgIENkYiAgICAgICAgICAgQSBwb2lu dGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gICAg ICBUaGlzICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RP Q09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW4sIG91dF0gUGFja2V0ICAgICAgICBBIHBvaW50 ZXIgdG8gdGhlIGJ1ZmZlciBvZiBkYXRhIHRoYXQgd2lsbCBiZSB0cmFuc21pdHRlZCB0byBVU0IN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIG9yIHJlY2VpdmVkIGZy b20gVVNCIGRldmljZS4NCj4gKyAgQHBhcmFtW2luLCBvdXRdIFBhY2tldExlbmd0aCAgQSBwb2lu dGVyIHRvIHRoZSBQYWNrZXRMZW5ndGguDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgICAgICAgVGhlIGJ1bGsgdHJhbnNmZXIgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVk Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgdHJhbnNmZXIgZmFpbGVk LiBUaGUgdHJhbnNmZXIgc3RhdHVzIGlzIHJldHVybmVkIGluIHN0YXR1cy4NCj4gKyAgQHJldHZh bCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9yIG1vcmUgcGFyYW1ldGVycyBhcmUgaW52YWxp ZC4NCj4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgVGhlIHJlcXVlc3QgY291bGQg bm90IGJlIHN1Ym1pdHRlZCBkdWUgdG8gYSBsYWNrIG9mIHJlc291cmNlcy4NCj4gKyAgQHJldHZh bCBFRklfVElNRU9VVCAgICAgICAgICAgVGhlIGNvbnRyb2wgdHJhbnNmZXIgZmFpbHMgZHVlIHRv IHRpbWVvdXQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkg KkVES0lJX1VTQl9FVEhFUk5FVF9SRUNFSVZFKSgNCj4gKyAgSU4gICAgIFBYRV9DREIgICAgICAg ICAgICAgICAqQ2RiLA0KPiArICBJTiAgICAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICpU aGlzLA0KPiArICBJTiBPVVQgVk9JRCAgICAgICAgICAgICAgICAgICpQYWNrZXQsDQo+ICsgIElO IE9VVCBVSU5UTiAgICAgICAgICAgICAgICAgKlBhY2tldExlbmd0aA0KPiArICApOw0KPiArDQo+ ICsvKioNCj4gKyAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIG1hbmFnZSBhIFVTQiBkZXZpY2Ug d2l0aCB0aGUgYnVsayB0cmFuc2ZlciBwaXBlLiBUaGUgZW5kcG9pbnQgaXMgQnVsayBvdXQuDQo+ ICsNCj4gKyAgQHBhcmFtW2luXSAgICAgIENkYiAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBj b21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gICAgICBUaGlzICAgICAg ICAgIEEgcG9pbnRlciB0byB0aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGluc3RhbmNl Lg0KPiArICBAcGFyYW1baW4sIG91dF0gUGFja2V0ICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIGJ1 ZmZlciBvZiBkYXRhIHRoYXQgd2lsbCBiZSB0cmFuc21pdHRlZCB0byBVU0INCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIG9yIHJlY2VpdmVkIGZyb20gVVNCIGRldmlj ZS4NCj4gKyAgQHBhcmFtW2luLCBvdXRdIFBhY2tldExlbmd0aCAgQSBwb2ludGVyIHRvIHRoZSBQ YWNrZXRMZW5ndGguDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhl IGJ1bGsgdHJhbnNmZXIgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLg0KPiArICBAcmV0 dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgdHJhbnNmZXIgZmFpbGVkLiBUaGUgdHJhbnNm ZXIgc3RhdHVzIGlzIHJldHVybmVkIGluIHN0YXR1cy4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJ RF9QQVJBTUVURVIgT25lIG9yIG1vcmUgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4NCj4gKyAgQHJl dHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgVGhlIHJlcXVlc3QgY291bGQgbm90IGJlIHN1Ym1p dHRlZCBkdWUgdG8gYSBsYWNrIG9mIHJlc291cmNlcy4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9V VCAgICAgICAgICAgVGhlIGNvbnRyb2wgdHJhbnNmZXIgZmFpbHMgZHVlIHRvIHRpbWVvdXQuDQo+ ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9F VEhFUk5FVF9UUkFOU01JVCkoDQo+ICsgIElOICAgICBQWEVfQ0RCICAgICAgICAgICAgICAgKkNk YiwNCj4gKyAgSU4gICAgIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAqVGhpcywNCj4gKyAg SU4gT1VUIFZPSUQgICAgICAgICAgICAgICAgICAqUGFja2V0LA0KPiArICBJTiBPVVQgVUlOVE4g ICAgICAgICAgICAgICAgICpQYWNrZXRMZW5ndGgNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsg IFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBtYW5hZ2UgYSBVU0IgZGV2aWNlIHdpdGggYW4gaW50 ZXJydXB0IHRyYW5zZmVyIHBpcGUuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAg ICAgICAgQSBwb2ludGVyIHRvIHRoZSBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgaW5zdGFu Y2UuDQo+ICsgIEBwYXJhbVtpbl0gIElzTmV3VHJhbnNmZXIgICAgIElmIFRSVUUsIGEgbmV3IHRy YW5zZmVyIHdpbGwgYmUgc3VibWl0dGVkIHRvIFVTQiBjb250cm9sbGVyLiBJZg0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwgdGhlIGludGVycnVwdCB0cmFuc2ZlciBp cyBkZWxldGVkIGZyb20gdGhlIGRldmljZSdzIGludGVycnVwdA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0cmFuc2ZlciBxdWV1ZS4NCj4gKyAgQHBhcmFtW2luXSAgUG9sbGlu Z0ludGVydmFsICAgSW5kaWNhdGVzIHRoZSBwZXJpb2RpYyByYXRlLCBpbiBtaWxsaXNlY29uZHMs IHRoYXQgdGhlIHRyYW5zZmVyIGlzIHRvIGJlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGV4ZWN1dGVkLlRoaXMgcGFyYW1ldGVyIGlzIHJlcXVpcmVkIHdoZW4gSXNOZXdUcmFu c2ZlciBpcyBUUlVFLiBUaGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFs dWUgbXVzdCBiZSBiZXR3ZWVuIDEgdG8gMjU1LCBvdGhlcndpc2UgRUZJX0lOVkFMSURfUEFSQU1F VEVSIGlzIHJldHVybmVkLg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUg dW5pdHMgYXJlIGluIG1pbGxpc2Vjb25kcy4NCj4gKyAgQHBhcmFtW2luXSAgUmVxdWVzdCAgICAg ICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRklfVVNCX0RFVklDRV9SRVFVRVNUIGRhdGEuDQo+ICsN Cj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIGFzeW5jaHJvbm91cyBVU0Ig dHJhbnNmZXIgcmVxdWVzdCB0cmFuc2ZlciBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQu DQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSBhc3luY2hyb25vdXMgVVNC IHRyYW5zZmVyIHJlcXVlc3QgZmFpbGVkLg0KPiArDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VG SV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9JTlRFUlJVUFQpKA0KPiAr ICBJTiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICAqVGhpcywNCj4gKyAgSU4gQk9PTEVB TiAgICAgICAgICAgICAgICAgSXNOZXdUcmFuc2ZlciwNCj4gKyAgSU4gVUlOVE4gICAgICAgICAg ICAgICAgICAgUG9sbGluZ0ludGVydmFsLA0KPiArICBJTiBFRklfVVNCX0RFVklDRV9SRVFVRVNU ICAqUmVxdWVzdA0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgUmV0cmlldmVzIHRoZSBVU0Ig RXRoZXJuZXQgTWFjIEFkZHJlc3MuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAg ICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4N Cj4gKyAgQHBhcmFtW291dF0gTWFjQWRkcmVzcyAgICBBIHBvaW50ZXIgdG8gdGhlIGNhbGxlciBh bGxvY2F0ZWQgVVNCIEV0aGVybmV0IE1hYyBBZGRyZXNzLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJ X1NVQ0NFU1MgICAgICAgICAgIFRoZSBVU0IgSGVhZGVyIEZ1bmN0aW9uYWwgZGVzY3JpcHRvciB3 YXMgcmV0cmlldmVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJB TUVURVIgVXNiSGVhZGVyRnVuRGVzY3JpcHRvciBpcyBOVUxMLg0KPiArICBAcmV0dmFsIEVGSV9O T1RfRk9VTkQgICAgICAgICBUaGUgVVNCIEhlYWRlciBGdW5jdGlvbmFsIGRlc2NyaXB0b3Igd2Fz IG5vdCBmb3VuZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQ SSAqRURLSUlfVVNCX0dFVF9FVEhfTUFDX0FERFJFU1MpKA0KPiArICBJTiAgRURLSUlfVVNCX0VU SEVSTkVUX1BST1RPQ09MICpUaGlzLA0KPiArICBPVVQgRUZJX01BQ19BRERSRVNTICAgICAgICpN YWNBZGRyZXNzDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBSZXRyaWV2ZXMgdGhlIFVTQiBF dGhlcm5ldCBCdWxrIHRyYW5zZmVyIGRhdGEgc2l6ZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBU aGlzICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09M IGluc3RhbmNlLg0KPiArICBAcGFyYW1bb3V0XSBCdWxrU2l6ZSAgICAgIEEgcG9pbnRlciB0byB0 aGUgQnVsayB0cmFuc2ZlciBkYXRhIHNpemUuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VT UyAgICAgICAgICAgVGhlIFVTQiBIZWFkZXIgRnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcyByZXRy aWV2ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBV c2JIZWFkZXJGdW5EZXNjcmlwdG9yIGlzIE5VTEwuDQo+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VO RCAgICAgICAgIFRoZSBVU0IgSGVhZGVyIEZ1bmN0aW9uYWwgZGVzY3JpcHRvciB3YXMgbm90IGZv dW5kLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJ SV9VU0JfRVRIX01BWF9CVUxLX1NJWkUpKA0KPiArICBJTiAgRURLSUlfVVNCX0VUSEVSTkVUX1BS T1RPQ09MICpUaGlzLA0KPiArICBPVVQgVUlOVE4gICAgICAgICAgICAgICAgICpCdWxrU2l6ZQ0K PiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgUmV0cmlldmVzIHRoZSBVU0IgSGVhZGVyIGZ1bmN0 aW9uYWwgRGVzY3JpcHRvci4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAg ICAgICAgIEEgcG9pbnRlciB0byB0aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGluc3Rh bmNlLg0KPiArICBAcGFyYW1bb3V0XSBVc2JIZWFkZXJGdW5EZXNjcmlwdG9yIEEgcG9pbnRlciB0 byB0aGUgY2FsbGVyIGFsbG9jYXRlZCBVU0IgSGVhZGVyIEZ1bmN0aW9uYWwgRGVzY3JpcHRvci4N Cj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgVVNCIEhlYWRlciBG dW5jdGlvbmFsIGRlc2NyaXB0b3Igd2FzIHJldHJpZXZlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEBy ZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIFVzYkhlYWRlckZ1bkRlc2NyaXB0b3IgaXMgTlVM TC4NCj4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgVGhlIFVTQiBIZWFkZXIgRnVu Y3Rpb25hbCBkZXNjcmlwdG9yIHdhcyBub3QgZm91bmQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4g K0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9IRUFERVJfRlVOQ1RJT05BTF9ERVND UklQVE9SKSgNCj4gKyAgSU4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAgICAgKlRoaXMs DQo+ICsgIE9VVCBVU0JfSEVBREVSX0ZVTl9ERVNDUklQVE9SICpVc2JIZWFkZXJGdW5EZXNjcmlw dG9yDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBSZXRyaWV2ZXMgdGhlIFVTQiBVbmlvbiBm dW5jdGlvbmFsIERlc2NyaXB0b3IuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAg ICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBp bnN0YW5jZS4NCj4gKyAgQHBhcmFtW291dF0gVXNiVW5pb25GdW5EZXNjcmlwdG9yICBBIHBvaW50 ZXIgdG8gdGhlIGNhbGxlciBhbGxvY2F0ZWQgVVNCIFVuaW9uIEZ1bmN0aW9uYWwgRGVzY3JpcHRv ci4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgVVNCIFVuaW9u IEZ1bmN0aW9uYWwgZGVzY3JpcHRvciB3YXMgcmV0cmlldmVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAg QHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgVXNiVW5pb25GdW5EZXNjcmlwdG9yIGlzIE5V TEwuDQo+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgIFRoZSBVU0IgVW5pb24gRnVu Y3Rpb25hbCBkZXNjcmlwdG9yIHdhcyBub3QgZm91bmQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4g K0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9VTklPTl9GVU5DVElPTkFMX0RFU0NS SVBUT1IpKA0KPiArICBJTiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICAgICpUaGlzLA0K PiArICBPVVQgVVNCX1VOSU9OX0ZVTl9ERVNDUklQVE9SICpVc2JVbmlvbkZ1bkRlc2NyaXB0b3IN Cj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFJldHJpZXZlcyB0aGUgVVNCIEV0aGVybmV0IGZ1 bmN0aW9uYWwgRGVzY3JpcHRvci4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAg ICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGlu c3RhbmNlLg0KPiArICBAcGFyYW1bb3V0XSBVc2JFdGhGdW5EZXNjcmlwdG9yICAgIEEgcG9pbnRl ciB0byB0aGUgY2FsbGVyIGFsbG9jYXRlZCBVU0IgRXRoZXJuZXQgRnVuY3Rpb25hbCBEZXNjcmlw dG9yLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBVU0IgRXRo ZXJuZXQgRnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcyByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5Lg0K PiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBVc2JFdGhGdW5EZXNjcmlwdG9yIGlz IE5VTEwuDQo+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgIFRoZSBVU0IgRXRoZXJu ZXQgRnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcyBub3QgZm91bmQuDQo+ICsqKi8NCj4gK3R5cGVk ZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9GVU5DVElP TkFMX0RFU0NSSVBUT1IpKA0KPiArICBJTiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICAg ICAgICpUaGlzLA0KPiArICBPVVQgVVNCX0VUSEVSTkVUX0ZVTl9ERVNDUklQVE9SICpVc2JFdGhG dW5EZXNjcmlwdG9yDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIHJlcXVlc3Qgc2V0 cyB0aGUgRXRoZXJuZXQgZGV2aWNlIG11bHRpY2FzdCBmaWx0ZXJzIGFzIHNwZWNpZmllZCBpbiB0 aGUNCj4gKyAgc2VxdWVudGlhbCBsaXN0IG9mIDQ4IGJpdCBFdGhlcm5ldCBtdWx0aWNhc3QgYWRk cmVzc2VzLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICAgICAgQSBw b2ludGVyIHRvIHRoZSBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsg IEBwYXJhbVtpbl0gIFZhbHVlICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIGZpbHRlcnMuDQo+ ICsgIEBwYXJhbVtpbl0gIE1jYXN0QWRkciAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSB2 YWx1ZSBvZiB0aGUgbXVsdGljYXN0IGFkZHJlc3Nlcy4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9T VUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsg IEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRp bmcgdGhlIHJlcXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSBy ZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lO VkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZCB2YWx1 ZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4g KyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0VU SEVSTkVUX1NFVF9FVEhfTVVMVElDQVNUX0ZJTFRFUlMpKA0KPiArICBJTiBFREtJSV9VU0JfRVRI RVJORVRfUFJPVE9DT0wgKlRoaXMsDQo+ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAgICBWYWx1 ZSwNCj4gKyAgSU4gVk9JRCAgICAgICAgICAgICAgICAgICpNY2FzdEFkZHINCj4gKyAgKTsNCj4g Kw0KPiArLyoqDQo+ICsgIFRoaXMgcmVxdWVzdCBzZXRzIHVwIHRoZSBzcGVjaWZpZWQgRXRoZXJu ZXQgcG93ZXIgbWFuYWdlbWVudCBwYXR0ZXJuIGZpbHRlciBhcw0KPiArICBkZXNjcmliZWQgaW4g dGhlIGRhdGEgc3RydWN0dXJlLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAg ICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgaW5z dGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gIFZhbHVlICAgICAgICAgICAgICAgICAgTnVtYmVyIG9m IGZpbHRlcnMuDQo+ICsgIEBwYXJhbVtpbl0gIExlbmd0aCAgICAgICAgICAgICAgICAgU2l6ZSBv ZiB0aGUgcG93ZXIgbWFuYWdlbWVudCBwYXR0ZXJuIGZpbHRlciBkYXRhLg0KPiArICBAcGFyYW1b aW5dICBQYXR0ZXJuRmlsdGVyICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgcG93ZXIgbWFuYWdl bWVudCBwYXR0ZXJuIGZpbHRlciBzdHJ1Y3R1cmUuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VD Q0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBA cmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5n IHRoZSByZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVx dWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZB TElEX1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQgdmFsdWUu DQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsq Ki8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhF Uk5FVF9TRVRfRVRIX1BPV0VSX01BTkFHRV9QQVRURVJOX0ZJTFRFUikoDQo+ICsgIElOIEVES0lJ X1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAqVGhpcywNCj4gKyAgSU4gVUlOVDE2ICAgICAgICAgICAg ICAgIFZhbHVlLA0KPiArICBJTiBVSU5UMTYgICAgICAgICAgICAgICAgTGVuZ3RoLA0KPiArICBJ TiBWT0lEICAgICAgICAgICAgICAgICAgKlBhdHRlcm5GaWx0ZXINCj4gKyAgKTsNCj4gKw0KPiAr LyoqDQo+ICsgIFRoaXMgcmVxdWVzdCByZXRyaWV2ZXMgdGhlIHN0YXR1cyBvZiB0aGUgc3BlY2lm aWVkIEV0aGVybmV0IHBvd2VyIG1hbmFnZW1lbnQNCj4gKyAgcGF0dGVybiBmaWx0ZXIgZnJvbSB0 aGUgZGV2aWNlLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICAgICAg QSBwb2ludGVyIHRvIHRoZSBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ ICsgIEBwYXJhbVtpbl0gIFZhbHVlICAgICAgICAgICAgICAgICAgVGhlIGZpbHRlciBudW1iZXIu DQo+ICsgIEBwYXJhbVtvdXRdIFBhdHRlcm5BY3RpdmUgICAgICAgICAgQSBwb2ludGVyIHRvIHRo ZSBwYXR0ZXJuIGFjdGl2ZSBib29sZWFuLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1Mg ICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZh bCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUg cmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3Qg ZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9Q QVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkIHZhbHVlLg0KPiAr ICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRf R0VUX0VUSF9QT1dFUl9NQU5BR0VfUEFUVEVSTl9GSUxURVIpKA0KPiArICBJTiAgIEVES0lJX1VT Ql9FVEhFUk5FVF9QUk9UT0NPTCAqVGhpcywNCj4gKyAgSU4gICBVSU5UMTYgICAgICAgICAgICAg ICAgVmFsdWUsDQo+ICsgIE9VVCAgQk9PTEVBTiAgICAgICAgICAgICAgICpQYXR0ZXJuQWN0aXZl DQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIHJlcXVlc3QgaXMgdXNlZCB0byBjb25m aWd1cmUgZGV2aWNlIEV0aGVybmV0IHBhY2tldCBmaWx0ZXIgc2V0dGluZ3MuDQo+ICsNCj4gKyAg QHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFREtJSV9VU0Jf RVRIRVJORVRfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gIFZhbHVlICAgICAg ICAgICAgIFBhY2tldCBGaWx0ZXIgQml0bWFwLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NF U1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJl dHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0 aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVl c3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJ RF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkIHZhbHVlLg0K PiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArKiov DQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJO RVRfU0VUX0VUSF9QQUNLRVRfRklMVEVSKSgNCj4gKyAgSU4gRURLSUlfVVNCX0VUSEVSTkVUX1BS T1RPQ09MICpUaGlzLA0KPiArICBJTiBVSU5UMTYgICAgICAgICAgICAgICAgVmFsdWUNCj4gKyAg KTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgcmVxdWVzdCBpcyB1c2VkIHRvIHJldHJpZXZlIGEg c3RhdGlzdGljIGJhc2VkIG9uIHRoZSBmZWF0dXJlIHNlbGVjdG9yLg0KPiArDQo+ICsgIEBwYXJh bVtpbl0gIFRoaXMgICAgICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJX1VTQl9F VEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAgRmVhdHVyZVNlbGVj dG9yICAgICAgIFZhbHVlIG9mIHRoZSBmZWF0dXJlIHNlbGVjdG9yLg0KPiArICBAcGFyYW1bb3V0 XSBTdGF0aXN0aWMgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSAzMiBiaXQgdW5zaWduZWQg aW50ZWdlci4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVx dWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAg ICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsgIEBy ZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBk ZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0 aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZCB2YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklfVU5T VVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJ X1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX0dFVF9FVEhfU1RBVElTVElD KSgNCj4gKyAgSU4gIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElO ICBVSU5UMTYgICAgICAgICAgICAgICAgIEZlYXR1cmVTZWxlY3RvciwNCj4gKyAgT1VUIFZPSUQg ICAgICAgICAgICAgICAgICAgKlN0YXRpc3RpYw0KPiArICApOw0KPiArDQo+ICt0eXBlZGVmIHN0 cnVjdCB7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX0dFVF9TVEFURSAgICAgICAgICAg VXNiRXRoVW5kaUdldFN0YXRlOw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9TVEFSVCAg ICAgICAgICAgICAgIFVzYkV0aFVuZGlTdGFydDsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1VO RElfU1RPUCAgICAgICAgICAgICAgICBVc2JFdGhVbmRpU3RvcDsNCj4gKyAgRURLSUlfVVNCX0VU SEVSTkVUX1VORElfR0VUX0lOSVRfSU5GTyAgICAgICBVc2JFdGhVbmRpR2V0SW5pdEluZm87DQo+ ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX0dFVF9DT05GSUdfSU5GTyAgICAgVXNiRXRoVW5k aUdldENvbmZpZ0luZm87DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX0lOSVRJQUxJWkUg ICAgICAgICAgVXNiRXRoVW5kaUluaXRpYWxpemU7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9V TkRJX1JFU0VUICAgICAgICAgICAgICAgVXNiRXRoVW5kaVJlc2V0Ow0KPiArICBFREtJSV9VU0Jf RVRIRVJORVRfVU5ESV9TSFVURE9XTiAgICAgICAgICAgIFVzYkV0aFVuZGlTaHV0ZG93bjsNCj4g KyAgRURLSUlfVVNCX0VUSEVSTkVUX1VORElfSU5URVJSVVBUX0VOQUJMRSAgICBVc2JFdGhVbmRp SW50ZXJydXB0RW5hYmxlOw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9SRUNFSVZFX0ZJ TFRFUiAgICAgIFVzYkV0aFVuZGlSZWNlaXZlRmlsdGVyOw0KPiArICBFREtJSV9VU0JfRVRIRVJO RVRfVU5ESV9TVEFUSU9OX0FERFJFU1MgICAgIFVzYkV0aFVuZGlTdGF0aW9uQWRkcmVzczsNCj4g KyAgRURLSUlfVVNCX0VUSEVSTkVUX1VORElfU1RBVElTVElDUyAgICAgICAgICBVc2JFdGhVbmRp U3RhdGlzdGljczsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1VORElfTUNBU1RfSVBUT01BQyAg ICAgICBVc2JFdGhVbmRpTWNhc3RJcDJNYWM7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9VTkRJ X05WX0RBVEEgICAgICAgICAgICAgVXNiRXRoVW5kaU52RGF0YTsNCj4gKyAgRURLSUlfVVNCX0VU SEVSTkVUX1VORElfR0VUX1NUQVRVUyAgICAgICAgICBVc2JFdGhVbmRpR2V0U3RhdHVzOw0KPiAr ICBFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9GSUxMX0hFQURFUiAgICAgICAgIFVzYkV0aFVuZGlG aWxsSGVhZGVyOw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9UUkFOU01JVCAgICAgICAg ICAgIFVzYkV0aFVuZGlUcmFuc21pdDsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1VORElfUkVD RUlWRSAgICAgICAgICAgICBVc2JFdGhVbmRpUmVjZWl2ZTsNCj4gK30gRURLSUlfVVNCX0VUSEVS TkVUX1VOREk7DQo+ICsNCj4gKy8vIFRoZSBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgcHJv dmlkZXMgc29tZSBiYXNpYyBVU0IgRXRoZXJuZXQgZGV2aWNlIHJlbGV2YW50DQo+ICsvLyBkZXNj cmlwdG9yIGFuZCBzcGVjaWZpYyByZXF1ZXN0cy4NCj4gK3N0cnVjdCBfRURLSUlfVVNCX0VUSEVS TkVUX1BST1RPQ09MIHsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1VOREkgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFVzYkV0aFVuZGk7DQo+ICsgIC8vIGZvciBjYWxsaW5nIHRo ZSBVTkRJIGNoaWxkIGZ1bmN0aW9ucw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfSU5JVElBTEla RSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNiRXRoSW5pdGlhbGl6ZTsNCj4gKyAgRURL SUlfVVNCX0VUSEVSTkVUX1NUQVRJU1RJQ1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVz YkV0aFN0YXRpc3RpY3M7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9SRUNFSVZFICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBVc2JFdGhSZWNlaXZlOw0KPiArICBFREtJSV9VU0JfRVRI RVJORVRfVFJBTlNNSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNiRXRoVHJhbnNt aXQ7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBVc2JFdGhJbnRlcnJ1cHQ7DQo+ICsgIEVES0lJX1VTQl9HRVRfRVRIX01BQ19B RERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2JFdGhNYWNBZGRyZXNzOw0KPiAr ICBFREtJSV9VU0JfRVRIX01BWF9CVUxLX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVXNiRXRoTWF4QnVsa1NpemU7DQo+ICsgIEVES0lJX1VTQl9IRUFERVJfRlVOQ1RJT05BTF9E RVNDUklQVE9SICAgICAgICAgICAgICAgICAgICBVc2JIZWFkZXJGdW5EZXNjcmlwdG9yOw0KPiAr ICBFREtJSV9VU0JfVU5JT05fRlVOQ1RJT05BTF9ERVNDUklQVE9SICAgICAgICAgICAgICAgICAg ICAgVXNiVW5pb25GdW5EZXNjcmlwdG9yOw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfRlVOQ1RJ T05BTF9ERVNDUklQVE9SICAgICAgICAgICAgICAgICAgVXNiRXRoRnVuRGVzY3JpcHRvcjsNCj4g KyAgRURLSUlfVVNCX0VUSEVSTkVUX1NFVF9FVEhfTVVMVElDQVNUX0ZJTFRFUlMgICAgICAgICAg ICAgIFNldFVzYkV0aE1jYXN0RmlsdGVyOw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfU0VUX0VU SF9QT1dFUl9NQU5BR0VfUEFUVEVSTl9GSUxURVIgICAgU2V0VXNiRXRoUG93ZXJQYXR0ZXJuRmls dGVyOw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfR0VUX0VUSF9QT1dFUl9NQU5BR0VfUEFUVEVS Tl9GSUxURVIgICAgR2V0VXNiRXRoUG93ZXJQYXR0ZXJuRmlsdGVyOw0KPiArICBFREtJSV9VU0Jf RVRIRVJORVRfU0VUX0VUSF9QQUNLRVRfRklMVEVSICAgICAgICAgICAgICAgICAgU2V0VXNiRXRo UGFja2V0RmlsdGVyOw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfR0VUX0VUSF9TVEFUSVNUSUMg ICAgICAgICAgICAgICAgICAgICAgR2V0VXNiRXRoU3RhdGlzdGljOw0KPiArfTsNCj4gKw0KPiAr ZXh0ZXJuIEVGSV9HVUlEICBnRWRrSUlVc2JFdGhQcm90b2NvbEd1aWQ7DQo+ICsNCj4gKyNlbmRp Zg0KPiBkaWZmIC0tZ2l0IGEvVXNiTmV0d29ya1BrZy9OZXR3b3JrQ29tbW9uL0RyaXZlckJpbmRp bmcuaCBiL1VzYk5ldHdvcmtQa2cvTmV0d29ya0NvbW1vbi9Ecml2ZXJCaW5kaW5nLmgNCj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi4wNDE2Y2UxMzIzMDINCj4g LS0tIC9kZXYvbnVsbA0KPiArKysgYi9Vc2JOZXR3b3JrUGtnL05ldHdvcmtDb21tb24vRHJpdmVy QmluZGluZy5oDQo+IEBAIC0wLDAgKzEsMjY2IEBADQo+ICsvKiogQGZpbGUNCj4gKyAgSGVhZGVy IGZpbGUgZm9yIGZvciBVU0IgbmV0d29yayBjb21tb24gZHJpdmVyDQo+ICsNCj4gKyAgQ29weXJp Z2h0IChjKSAyMDIzLCBBbWVyaWNhbiBNZWdhdHJlbmRzIEludGVybmF0aW9uYWwgTExDLiBBbGwg cmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0y LUNsYXVzZS1QYXRlbnQNCj4gKyoqLw0KPiArDQo+ICsjaWZuZGVmIF9EUklWRVJfQklORElOR19I Xw0KPiArI2RlZmluZSBfRFJJVkVSX0JJTkRJTkdfSF8NCj4gKw0KPiArI2luY2x1ZGUgPExpYnJh cnkvVWVmaURyaXZlckVudHJ5UG9pbnQuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlCb290 U2VydmljZXNUYWJsZUxpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvVWVmaUxpYi5oPg0KPiAr I2luY2x1ZGUgPExpYnJhcnkvRGV2aWNlUGF0aExpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkv RGVidWdMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L01lbW9yeUFsbG9jYXRpb25MaWIuaD4N Cj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1BjZExpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvQmFz ZU1lbW9yeUxpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvVWVmaVVzYkxpYi5oPg0KPiArI2lu Y2x1ZGUgPFByb3RvY29sL1VzYklvLmg+DQo+ICsjaW5jbHVkZSA8UHJvdG9jb2wvTmV0d29ya0lu dGVyZmFjZUlkZW50aWZpZXIuaD4NCj4gKyNpbmNsdWRlIDxQcm90b2NvbC9FZGtJSVVzYkV0aGVy bmV0UHJvdG9jb2wuaD4NCj4gKw0KPiArI2RlZmluZSBORVRXT1JLX0NPTU1PTl9EUklWRVJfVkVS U0lPTiAgICAxDQo+ICsjZGVmaW5lIE5FVFdPUktfQ09NTU9OX1BPTExJTkdfSU5URVJWQUwgIDB4 MTANCj4gKyNkZWZpbmUgUlhfQlVGRkVSX0NPVU5UICAgICAgICAgICAgICAgICAgMzINCj4gKyNk ZWZpbmUgVFhfQlVGRkVSX0NPVU5UICAgICAgICAgICAgICAgICAgMzINCj4gKyNkZWZpbmUgTUVN T1JZX1JFUVVJUkUgICAgICAgICAgICAgICAgICAgMA0KPiArDQo+ICsjZGVmaW5lIFVORElfREVW X1NJR05BVFVSRSAgU0lHTkFUVVJFXzMyKCd1JywnbicsJ2QnLCdpJykNCj4gKyNkZWZpbmUgVU5E SV9ERVZfRlJPTV9USElTKGEpICBDUihhLCBOSUNfREVWSUNFLCBOaWlQcm90b2NvbCwgVU5ESV9E RVZfU0lHTkFUVVJFKQ0KPiArI2RlZmluZSBVTkRJX0RFVl9GUk9NX05JQyhhKSAgIENSKGEsIE5J Q19ERVZJQ0UsIE5pY0luZm8sIFVORElfREVWX1NJR05BVFVSRSkNCj4gKw0KPiArI3ByYWdtYSBw YWNrKDEpDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsgIFVJTlQ4ICAgICBEZXN0QWRkcltQWEVf SFdBRERSX0xFTl9FVEhFUl07DQo+ICsgIFVJTlQ4ICAgICBTcmNBZGRyW1BYRV9IV0FERFJfTEVO X0VUSEVSXTsNCj4gKyAgVUlOVDE2ICAgIFByb3RvY29sOw0KPiArfSBFdGhlcm5ldEhlYWRlcjsN Cj4gKyNwcmFnbWEgcGFjaygpDQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgVUlOVE4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2lnbmF0dXJlOw0KPiArICBF RklfTkVUV09SS19JTlRFUkZBQ0VfSURFTlRJRklFUl9QUk9UT0NPTCAgICBOaWlQcm90b2NvbDsN Cj4gKyAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGV2aWNl SGFuZGxlOw0KPiArICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICAgICAgICAgICAgICAgICAg ICAqQmFzZURldlBhdGg7DQo+ICsgIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgICAgICAg ICAgICAgICAgICpEZXZQYXRoOw0KPiArICBOSUNfREFUQSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBOaWNJbmZvOw0KPiArICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqUmVjZWl2ZUJ1ZmZlcjsNCj4gK30gTklDX0RFVklDRTsNCj4gKw0K PiArdHlwZWRlZiBWT0lEICgqQVBJX0ZVTkMpKA0KPiArICBQWEVfQ0RCICosDQo+ICsgIE5JQ19E QVRBICoNCj4gKyAgKTsNCj4gKw0KPiArZXh0ZXJuIFBYRV9TV19VTkRJICAgICAgICAgICAgICAg ICAgICpnUHhlOw0KPiArZXh0ZXJuIE5JQ19ERVZJQ0UgICAgICAgICAgICAgICAgICAgICpnTGFu RGV2aWNlTGlzdFtNQVhfTEFOX0lOVEVSRkFDRV07DQo+ICtleHRlcm4gRUZJX0NPTVBPTkVOVF9O QU1FMl9QUk9UT0NPTCAgZ05ldHdvcmtDb21tb25Db21wb25lbnROYW1lMjsNCj4gKw0KPiArRUZJ X1NUQVRVUw0KPiArRUZJQVBJDQo+ICtOZXR3b3JrQ29tbW9uU3VwcG9ydGVkICgNCj4gKyAgSU4g RUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gRUZJX0hBTkRMRSAg ICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICBJTiBFRklfREVWSUNFX1BB VEhfUFJPVE9DT0wgICAgICpSZW1haW5pbmdEZXZpY2VQYXRoDQo+ICsgICk7DQo+ICsNCj4gK0VG SV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArTmV0d29ya0NvbW1vbkRyaXZlclN0YXJ0ICgNCj4gKyAg SU4gRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gRUZJX0hBTkRM RSAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICBJTiBFRklfREVWSUNF X1BBVEhfUFJPVE9DT0wgICAgICpSZW1haW5pbmdEZXZpY2VQYXRoDQo+ICsgICk7DQo+ICsNCj4g K0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArTmV0d29ya0NvbW1vbkRyaXZlclN0b3AgKA0KPiAr ICBJTiAgRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gIEVGSV9I QU5ETEUgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgSU4gIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyT2ZDaGlsZHJlbiwNCj4gKyAgSU4gIEVGSV9I QU5ETEUgICAgICAgICAgICAgICAgICAgKkNoaWxkSGFuZGxlQnVmZmVyDQo+ICsgICk7DQo+ICsN Cj4gK1ZPSUQNCj4gK1B4ZVN0cnVjdEluaXQgKA0KPiArICBPVVQgUFhFX1NXX1VOREkgICpQeGVT dw0KPiArICApOw0KPiArDQo+ICtWT0lEDQo+ICtVcGRhdGVOaWNOdW0gKA0KPiArICBJTiAgICAg IE5JQ19EQVRBICAgICAqTmljLA0KPiArICBJTiBPVVQgIFBYRV9TV19VTkRJICAqUHhlU3cNCj4g KyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtVbmRpQXBpRW50cnkgKA0K PiArICBJTiAgVUlOVDY0ICBDZGINCj4gKyAgKTsNCj4gKw0KPiArVUlOVE4NCj4gK01hcEl0ICgN Cj4gKyAgSU4gTklDX0RBVEEgICpOaWMsDQo+ICsgIElOIFVJTlQ2NCAgICBNZW1BZGRyLA0KPiAr ICBJTiBVSU5UMzIgICAgU2l6ZSwNCj4gKyAgSU4gVUlOVDMyICAgIERpcmVjdGlvbiwNCj4gKyAg T1VUIFVJTlQ2NCAgIE1hcHBlZEFkZHINCj4gKyAgKTsNCj4gKw0KPiArVk9JRA0KPiArVW5NYXBJ dCAoDQo+ICsgIElOIE5JQ19EQVRBICAqTmljLA0KPiArICBJTiBVSU5UNjQgICAgTWVtQWRkciwN Cj4gKyAgSU4gVUlOVDMyICAgIFNpemUsDQo+ICsgIElOIFVJTlQzMiAgICBEaXJlY3Rpb24sDQo+ ICsgIElOIFVJTlQ2NCAgICBNYXBwZWRBZGRyDQo+ICsgICk7DQo+ICsNCj4gK1ZPSUQNCj4gK1Vu ZGlHZXRTdGF0ZSAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRB ICAqTmljDQo+ICsgICk7DQo+ICsNCj4gK1ZPSUQNCj4gK1VuZGlTdGFydCAoDQo+ICsgIElOICBQ WEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4g K1ZPSUQNCj4gK1VuZGlTdG9wICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAg TklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArVk9JRA0KPiArVW5kaUdldEluaXRJbmZv ICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4g KyAgKTsNCj4gKw0KPiArVk9JRA0KPiArVW5kaUdldENvbmZpZ0luZm8gKA0KPiArICBJTiAgUFhF X0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtW T0lEDQo+ICtVbmRpSW5pdGlhbGl6ZSAoDQo+ICsgIElOICAgICAgUFhFX0NEQiAgICpDZGIsDQo+ ICsgIElOIE9VVCAgTklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArVk9JRA0KPiArVW5k aVJlc2V0ICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpO aWMNCj4gKyAgKTsNCj4gKw0KPiArVk9JRA0KPiArVW5kaVNodXRkb3duICgNCj4gKyAgSU4gICAg ICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gT1VUICBOSUNfREFUQSAgKk5pYw0KPiArICApOw0K PiArDQo+ICtWT0lEDQo+ICtVbmRpSW50ZXJydXB0RW5hYmxlICgNCj4gKyAgSU4gIFBYRV9DREIg ICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArVk9JRA0K PiArVW5kaVJlY2VpdmVGaWx0ZXIgKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElO ICBOSUNfREFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtWT0lEDQo+ICtVbmRpU3RhdGlvbkFk ZHJlc3MgKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5p Yw0KPiArICApOw0KPiArDQo+ICtWT0lEDQo+ICtVbmRpU3RhdGlzdGljcyAoDQo+ICsgIElOICBQ WEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4g K1ZPSUQNCj4gK1VuZGlNY2FzdElwMk1hYyAoDQo+ICsgIElOIE9VVCAgUFhFX0NEQiAgICpDZGIs DQo+ICsgIElOICAgICAgTklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArVk9JRA0KPiAr VW5kaU52RGF0YSAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRB ICAqTmljDQo+ICsgICk7DQo+ICsNCj4gK1ZPSUQNCj4gK1VuZGlHZXRTdGF0dXMgKA0KPiArICBJ TiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApOw0KPiAr DQo+ICtWT0lEDQo+ICtVbmRpRmlsbEhlYWRlciAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwN Cj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4gK1ZPSUQNCj4gK1VuZGlU cmFuc21pdCAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAq TmljDQo+ICsgICk7DQo+ICsNCj4gK1ZPSUQNCj4gK1VuZGlSZWNlaXZlICgNCj4gKyAgSU4gIFBY RV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiAr VUlOVDE2DQo+ICtJbml0aWFsaXplICgNCj4gKyAgSU4gICAgICBQWEVfQ0RCICAgKkNkYiwNCj4g KyAgSU4gT1VUICBOSUNfREFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtVSU5UMTYNCj4gK1Ry YW5zbWl0ICgNCj4gKyAgSU4gICAgICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gT1VUICBOSUNf REFUQSAgKk5pYywNCj4gKyAgSU4gICAgICBVSU5UNjQgICAgQ3BiQWRkciwNCj4gKyAgSU4gICAg ICBVSU5UMTYgICAgT3BGbGFncw0KPiArICApOw0KPiArDQo+ICtVSU5UMTYNCj4gK1JlY2VpdmUg KA0KPiArICBJTiBQWEVfQ0RCICAgICAgICpDZGIsDQo+ICsgIElOIE9VVCBOSUNfREFUQSAgKk5p YywNCj4gKyAgSU4gVUlOVDY0ICAgICAgICBDcGJBZGRyLA0KPiArICBJTiBPVVQgVUlOVDY0ICAg IERiQWRkcg0KPiArICApOw0KPiArDQo+ICtVSU5UMTYNCj4gK1NldEZpbHRlciAoDQo+ICsgIElO ICBOSUNfREFUQSAgKk5pYywNCj4gKyAgSU4gIFVJTlQxNiAgICBTZXRGaWx0ZXIsDQo+ICsgIElO ICBVSU5UNjQgICAgQ3BiQWRkciwNCj4gKyAgSU4gIFVJTlQzMiAgICBDcGJTaXplDQo+ICsgICk7 DQo+ICsNCj4gK1VJTlQxNg0KPiArU3RhdGlzdGljcyAoDQo+ICsgIElOIE5JQ19EQVRBICAqTmlj LA0KPiArICBJTiBVSU5UNjQgICAgRGJBZGRyLA0KPiArICBJTiBVSU5UMTYgICAgRGJTaXplDQo+ ICsgICk7DQo+ICsNCj4gKyNlbmRpZg0KPiBkaWZmIC0tZ2l0IGEvVXNiTmV0d29ya1BrZy9Vc2JS bmRpcy9Vc2JSbmRpcy5oIGIvVXNiTmV0d29ya1BrZy9Vc2JSbmRpcy9Vc2JSbmRpcy5oDQo+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uNzc1ODA3MDQyNDYwDQo+ IC0tLSAvZGV2L251bGwNCj4gKysrIGIvVXNiTmV0d29ya1BrZy9Vc2JSbmRpcy9Vc2JSbmRpcy5o DQo+IEBAIC0wLDAgKzEsNTg2IEBADQo+ICsvKiogQGZpbGUNCj4gKyAgSGVhZGVyIGZpbGUgZm9y IGZvciBVU0IgUm5kaXMgZHJpdmVyDQo+ICsNCj4gKyAgQ29weXJpZ2h0IChjKSAyMDIzLCBBbWVy aWNhbiBNZWdhdHJlbmRzIEludGVybmF0aW9uYWwgTExDLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxC Uj4NCj4gKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4g KyoqLw0KPiArDQo+ICsjaWZuZGVmIF9VU0JfUk5ESVNfSF8NCj4gKyNkZWZpbmUgX1VTQl9STkRJ U19IXw0KPiArDQo+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpRHJpdmVyRW50cnlQb2ludC5oPg0K PiArI2luY2x1ZGUgPExpYnJhcnkvVWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGliLmg+DQo+ICsjaW5j bHVkZSA8TGlicmFyeS9VZWZpTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9EZXZpY2VQYXRo TGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0KPiArI2luY2x1ZGUgPExp YnJhcnkvTWVtb3J5QWxsb2NhdGlvbkxpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvQmFzZU1l bW9yeUxpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvVWVmaVVzYkxpYi5oPg0KPiArI2luY2x1 ZGUgPFByb3RvY29sL1VzYklvLmg+DQo+ICsjaW5jbHVkZSA8UHJvdG9jb2wvRWRrSUlVc2JFdGhl cm5ldFByb3RvY29sLmg+DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IF9SRU1PVEVfTkRJU19NU0df SEVBREVSIFJFTU9URV9ORElTX01TR19IRUFERVI7DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsN Cj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgIFNpZ25hdHVyZTsNCj4gKyAgRURL SUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAgIFVzYkV0aDsNCj4gKyAgRUZJX0hBTkRMRSAgICAg ICAgICAgICAgICAgICAgIFVzYkNkY0RhdGFIYW5kbGU7DQo+ICsgIEVGSV9IQU5ETEUgICAgICAg ICAgICAgICAgICAgICBVc2JSbmRpc0hhbmRsZTsNCj4gKyAgRUZJX1VTQl9JT19QUk9UT0NPTCAg ICAgICAgICAgICpVc2JJbzsNCj4gKyAgRUZJX1VTQl9JT19QUk9UT0NPTCAgICAgICAgICAgICpV c2JJb0NkY0RhdGE7DQo+ICsgIEVGSV9VU0JfQ09ORklHX0RFU0NSSVBUT1IgICAgICAqQ29uZmln Ow0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtT2ZJbnRlcmZhY2U7DQo+ ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICBCdWxrSW5FbmRwb2ludDsNCj4gKyAg VUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgIEJ1bGtPdXRFbmRwb2ludDsNCj4gKyAgVUlO VDggICAgICAgICAgICAgICAgICAgICAgICAgIEludGVycnVwRW5kcG9pbnQ7DQo+ICsgIEVGSV9N QUNfQUREUkVTUyAgICAgICAgICAgICAgICBNYWNBZGRyZXNzOw0KPiArICBVSU5UMzIgICAgICAg ICAgICAgICAgICAgICAgICAgUmVxdWVzdElkOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAg ICAgICAgICAgTWVkaXVtOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgTWF4 UGFja2V0c1BlclRyYW5zZmVyOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAg TWF4VHJhbnNmZXJTaXplOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgUGFj a2V0QWxpZ25tZW50RmFjdG9yOw0KPiArICBMSVNUX0VOVFJZICAgICAgICAgICAgICAgICAgICAg UmVjZWl2ZVBhY2tldExpc3Q7DQo+ICt9IFVTQl9STkRJU19ERVZJQ0U7DQo+ICsNCj4gKyNkZWZp bmUgVVNCX1JORElTX0RSSVZFUl9WRVJTSU9OICAgICAgIDENCj4gKyNkZWZpbmUgVVNCX1RYX0VU SEVSTkVUX0JVTEtfVElNRU9VVCAgIDMwMDANCj4gKyNkZWZpbmUgVVNCX1JYX0VUSEVSTkVUX0JV TEtfVElNRU9VVCAgIDMNCj4gKyNkZWZpbmUgVVNCX0VUSEVSTkVUX1RSQU5TRkVSX1RJTUVPVVQg IDIwMA0KPiArDQo+ICsjZGVmaW5lIExBTl9CVUxLSU5fQ01EX0NPTlRST0wgICAgICAxDQo+ICsj ZGVmaW5lIE1BWElNVU1fU1RPUEJVTEtJTl9DTlQgICAgICAzMDAgICAgICAgIC8vIEluZGljYXRp bmcgbWF4aW11bSBjb3VudHMgZm9yIHdhaXRpbmcgYnVsayBpbiBjb21tYW5kDQo+ICsjZGVmaW5l IE1JTklNVU1fU1RPUEJVTEtJTl9DTlQgICAgICAzICAgICAgICAgIC8vIEluZGljYXRpbmcgbWlu aW11bSBjb3VudHMgZm9yIHdhaXRpbmcgYnVsayBpbiBjb21tYW5kDQo+ICsjZGVmaW5lIEJVTEtJ Tl9DTURfUE9MTElOR19DTlQgICAgICAzMDAgICAgICAgIC8vIEluZGljYXRpbmcgdGhlIHdhaXRp bmcgY291bnRzIGZvciBzZW5kIGJ1bGsgaW4gY29tbWFuZCB3aGVuIHN5c3RlbSBwZW5kaW5nDQo+ ICsjZGVmaW5lIFJORElTX1JFU0VSVkVEX0JZVEVfTEVOR1RIICA4DQo+ICsNCj4gKyNkZWZpbmUg VVNCX1JORElTX1NJR05BVFVSRSAgU0lHTkFUVVJFXzMyKCdyJywgJ24nLCAnZCcsICdzJykNCj4g KyNkZWZpbmUgVVNCX1JORElTX0RFVklDRV9GUk9NX1RISVMoYSkgIENSIChhLCBVU0JfUk5ESVNf REVWSUNFLCBVc2JFdGgsIFVTQl9STkRJU19TSUdOQVRVUkUpDQo+ICsNCj4gK2V4dGVybiBFRklf Q09NUE9ORU5UX05BTUUyX1BST1RPQ09MICBnVXNiUm5kaXNDb21wb25lbnROYW1lMjsNCj4gKw0K PiArc3RydWN0IEJJVF9NQVAgew0KPiArICB1bnNpZ25lZCBpbnQgICAgU3JjOw0KPiArICB1bnNp Z25lZCBpbnQgICAgRHN0Ow0KPiArfTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ ICtVc2JSbmRpc0RyaXZlclN1cHBvcnRlZCAoDQo+ICsgIElOIEVGSV9EUklWRVJfQklORElOR19Q Uk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgQ29u dHJvbGxlckhhbmRsZSwNCj4gKyAgSU4gRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAqUmVt YWluaW5nRGV2aWNlUGF0aA0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkN Cj4gK1VzYlJuZGlzRHJpdmVyU3RhcnQgKA0KPiArICBJTiBFRklfRFJJVkVSX0JJTkRJTkdfUFJP VE9DT0wgICpUaGlzLA0KPiArICBJTiBFRklfSEFORExFICAgICAgICAgICAgICAgICAgIENvbnRy b2xsZXJIYW5kbGUsDQo+ICsgIElOIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgKlJlbWFp bmluZ0RldmljZVBhdGgNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ ICtVc2JSbmRpc0RyaXZlclN0b3AgKA0KPiArICBJTiAgRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RP Q09MICAqVGhpcywNCj4gKyAgSU4gIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgQ29udHJv bGxlckhhbmRsZSwNCj4gKyAgSU4gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVy T2ZDaGlsZHJlbiwNCj4gKyAgSU4gIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgKkNoaWxk SGFuZGxlQnVmZmVyDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0xvYWRBbGxEZXNj cmlwdG9yICgNCj4gKyAgSU4gIEVGSV9VU0JfSU9fUFJPVE9DT0wgICAgICAgICpVc2JJbywNCj4g KyAgT1VUIEVGSV9VU0JfQ09ORklHX0RFU0NSSVBUT1IgICoqQ29uZmlnRGVzYw0KPiArICApOw0K PiArDQo+ICtCT09MRUFODQo+ICtOZXh0RGVzY3JpcHRvciAoDQo+ICsgIElOIEVGSV9VU0JfQ09O RklHX0RFU0NSSVBUT1IgICpEZXNjLA0KPiArICBJTiBPVVQgVUlOVE4gICAgICAgICAgICAgICAg ICAqT2Zmc2V0DQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0dldEZ1bmN0aW9uYWxE ZXNjcmlwdG9yICgNCj4gKyAgSU4gIEVGSV9VU0JfQ09ORklHX0RFU0NSSVBUT1IgICpDb25maWcs DQo+ICsgIElOICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICBGdW5EZXNjcmlwdG9yVHlwZSwN Cj4gKyAgT1VUIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICpEYXRhQnVmZmVyDQo+ICsgICk7 DQo+ICsNCj4gK1ZPSUQNCj4gK0dldEVuZHBvaW50ICgNCj4gKyAgSU4gICAgICBFRklfVVNCX0lP X1BST1RPQ09MICAqVXNiSW8sDQo+ICsgIElOIE9VVCAgVVNCX1JORElTX0RFVklDRSAgICAgKlVz YlJuZGlzRGV2aWNlDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiAr VXNiUm5kaXNJbnRlcnJ1cHQgKA0KPiArICBJTiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wg ICpUaGlzLA0KPiArICBJTiBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgIElzTmV3VHJhbnNm ZXIsDQo+ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgUG9sbGluZ0ludGVydmFs LA0KPiArICBJTiBFRklfVVNCX0RFVklDRV9SRVFVRVNUICAgICAgICpSZXF1c3QNCj4gKyAgKTsN Cj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtJbnRlcnJ1cHRDYWxsYmFjayAoDQo+ ICsgIElOICBWT0lEICAgICpEYXRhLA0KPiArICBJTiAgVUlOVE4gICBEYXRhTGVuZ3RoLA0KPiAr ICBJTiAgVk9JRCAgICAqQ29udGV4dCwNCj4gKyAgSU4gIFVJTlQzMiAgU3RhdHVzDQo+ICsgICk7 DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArR2V0VXNiRXRoTWFjQWRkcmVzcyAo DQo+ICsgIElOICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBPVVQg RUZJX01BQ19BRERSRVNTICAgICAgICAgICAgICAqTWFjQWRkcmVzcw0KPiArICApOw0KPiArDQo+ ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1VzYkV0aEJ1bGtTaXplICgNCj4gKyAgSU4gIEVE S0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIE9VVCBVSU5UTiAgICAgICAg ICAgICAgICAgICAgICAgICpCdWxrU2l6ZQ0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ ICtFRklBUEkNCj4gK1JuZGlzRHVtbXlSZXR1cm4gKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIs DQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ ICtFRklBUEkNCj4gK1JuZGlzVW5kaVN0YXJ0ICgNCj4gKyAgSU4gUFhFX0NEQiAgICpDZGIsDQo+ ICsgIElOIE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VG SUFQSQ0KPiArUm5kaXNVbmRpU3RvcCAoDQo+ICsgIElOIFBYRV9DREIgICAqQ2RiLA0KPiArICBJ TiBOSUNfREFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkN Cj4gK1JuZGlzVW5kaUdldEluaXRJbmZvICgNCj4gKyAgSU4gUFhFX0NEQiAgICpDZGIsDQo+ICsg IElOIE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQ SQ0KPiArUm5kaXNVbmRpR2V0Q29uZmlnSW5mbyAoDQo+ICsgIElOIFBYRV9DREIgICAqQ2RiLA0K PiArICBJTiBOSUNfREFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtF RklBUEkNCj4gK1JuZGlzVW5kaUluaXRpYWxpemUgKA0KPiArICBJTiBQWEVfQ0RCICAgKkNkYiwN Cj4gKyAgSU4gTklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiAr RUZJQVBJDQo+ICtSbmRpc1VuZGlUcmFuc21pdCAoDQo+ICsgIElOICAgICAgUFhFX0NEQiAgICAg ICAgICAgICAgICAgICAgICAqQ2RiLA0KPiArICBJTiAgICAgIEVES0lJX1VTQl9FVEhFUk5FVF9Q Uk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOICAgICAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAg ICAqQnVsa091dERhdGEsDQo+ICsgIElOIE9VVCAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAg ICAqRGF0YUxlbmd0aA0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4g K1JuZGlzVW5kaVJlY2VpdmUgKA0KPiArICBJTiAgICAgUFhFX0NEQiAgICAgICAgICAgICAgICAg ICAgICAqQ2RiLA0KPiArICBJTiAgICAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhp cywNCj4gKyAgSU4gT1VUIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgKkJ1bGtJbkRhdGEs DQo+ICsgIElOIE9VVCBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICpEYXRhTGVuZ3RoDQo+ ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArUm5kaXNVbmRpUmVzZXQg KA0KPiArICBJTiBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gTklDX0RBVEEgICpOaWMNCj4gKyAg KTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtSbmRpc1VuZGlTaHV0ZG93biAo DQo+ICsgIElOIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiBOSUNfREFUQSAgKk5pYw0KPiArICAp Ow0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1JuZGlzVW5kaVJlY2VpdmVGaWx0 ZXIgKA0KPiArICBJTiBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gTklDX0RBVEEgICpOaWMNCj4g KyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtSbmRpc1VuZGlHZXRTdGF0 dXMgKA0KPiArICBJTiBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gTklDX0RBVEEgICpOaWMNCj4g KyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtHZXRVc2JIZWFkZXJGdW5E ZXNjcmlwdG9yICgNCj4gKyAgSU4gIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMs DQo+ICsgIE9VVCBVU0JfSEVBREVSX0ZVTl9ERVNDUklQVE9SICAgICpVc2JIZWFkZXJGdW5EZXNj cmlwdG9yDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArR2V0VXNi VW5pb25GdW5EZXNjcmlwdG9yICgNCj4gKyAgSU4gIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NP TCAgKlRoaXMsDQo+ICsgIE9VVCBVU0JfVU5JT05fRlVOX0RFU0NSSVBUT1IgICAgICpVc2JVbmlv bkZ1bkRlc2NyaXB0b3INCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ ICtHZXRVc2JSbmRpc0Z1bkRlc2NyaXB0b3IgKA0KPiArICBJTiAgRURLSUlfVVNCX0VUSEVSTkVU X1BST1RPQ09MICAqVGhpcywNCj4gKyAgT1VUIFVTQl9FVEhFUk5FVF9GVU5fREVTQ1JJUFRPUiAg KlVzYkV0aEZ1bkRlc2NyaXB0b3INCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJ QVBJDQo+ICtTZXRVc2JSbmRpc01jYXN0RmlsdGVyICgNCj4gKyAgSU4gRURLSUlfVVNCX0VUSEVS TkVUX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gVUlOVDE2ICAgICAgICAgICAgICAgICAgICAg ICBWYWx1ZSwNCj4gKyAgSU4gVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAqTWNhc3RBZGRy DQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArU2V0VXNiUm5kaXNQ b3dlckZpbHRlciAoDQo+ICsgIElOIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMs DQo+ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUsDQo+ICsgIElOIFVJ TlQxNiAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoLA0KPiArICBJTiBWT0lEICAgICAgICAg ICAgICAgICAgICAgICAgICpQYXR0ZXJuRmlsdGVyDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFU VVMNCj4gK0VGSUFQSQ0KPiArR2V0VXNiUm5kaXNQb3dlckZpbHRlciAoDQo+ICsgIElOIEVES0lJ X1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOIFVJTlQxNiAgICAgICAgICAg ICAgICAgICAgICAgVmFsdWUsDQo+ICsgIElOIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAg KlBhdHRlcm5BY3RpdmUNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ ICtTZXRVc2JSbmRpc1BhY2tldEZpbHRlciAoDQo+ICsgIElOIEVES0lJX1VTQl9FVEhFUk5FVF9Q Uk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgVmFs dWUNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtHZXRSbmRpc1N0 YXRpc3RpYyAoDQo+ICsgIElOIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUsDQo+ICsgIElOIFZPSUQg ICAgICAgICAgICAgICAgICAgICAgICAgKlN0YXRpc3RpYw0KPiArICApOw0KPiArDQo+ICtFRklf U1RBVFVTDQo+ICtSbmRpc0NvbnRyb2xNc2cgKA0KPiArICBJTiAgVVNCX1JORElTX0RFVklDRSAg ICAgICAgKlVzYlJuZGlzRGV2aWNlLA0KPiArICBJTiAgUkVNT1RFX05ESVNfTVNHX0hFQURFUiAg KlJuZGlzTXNnLA0KPiArICBPVVQgUkVNT1RFX05ESVNfTVNHX0hFQURFUiAgKlJuZGlzTXNnUmVz cG9uc2UNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArUm5kaXNUcmFuc21pdERhdGFN c2cgKA0KPiArICBJTiAgVVNCX1JORElTX0RFVklDRSAgICAgICAgKlVzYlJuZGlzRGV2aWNlLA0K PiArICBJTiAgUkVNT1RFX05ESVNfTVNHX0hFQURFUiAgKlJuZGlzTXNnLA0KPiArICBVSU5UTiAg ICAgICAgICAgICAgICAgICAgICAgKlRyYW5zZmVyTGVuZ3RoDQo+ICsgICk7DQo+ICsNCj4gK0VG SV9TVEFUVVMNCj4gK1JuZGlzUmVjZWl2ZURhdGFNc2cgKA0KPiArICBJTiAgVVNCX1JORElTX0RF VklDRSAgICAgICAgKlVzYlJuZGlzRGV2aWNlLA0KPiArICBJTiAgUkVNT1RFX05ESVNfTVNHX0hF QURFUiAgKlJuZGlzTXNnLA0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgKlRyYW5z ZmVyTGVuZ3RoDQo+ICsgICk7DQo+ICsNCj4gK1ZPSUQNCj4gK1ByaW50Um5kaXNNc2cgKA0KPiAr ICBJTiAgUkVNT1RFX05ESVNfTVNHX0hFQURFUiAgKlJuZGlzTXNnDQo+ICsgICk7DQo+ICsNCj4g KyNkZWZpbmUgUk5ESVNfTUFKT1JfVkVSU0lPTiAgICAgIDB4MDAwMDAwMDENCj4gKyNkZWZpbmUg Uk5ESVNfTUlOT1JfVkVSU0lPTiAgICAgIDB4MDAwMDAwMDANCj4gKyNkZWZpbmUgUk5ESVNfTUFY X1RSQU5TRkVSX1NJWkUgIDB4NDAwMA0KPiArDQo+ICsjZGVmaW5lIFJORElTX1BBQ0tFVF9NU0cg ICAgICAgICAgIDB4MDAwMDAwMDENCj4gKyNkZWZpbmUgUk5ESVNfSU5JVElBTElaRV9NU0cgICAg ICAgMHgwMDAwMDAwMg0KPiArI2RlZmluZSBSTkRJU19JTklUSUFMSVpFX0NNUExUICAgICAweDgw MDAwMDAyDQo+ICsjZGVmaW5lIFJORElTX0hMVF9NU0cgICAgICAgICAgICAgIDB4MDAwMDAwMDMN Cj4gKyNkZWZpbmUgUk5ESVNfUVVFUllfTVNHICAgICAgICAgICAgMHgwMDAwMDAwNA0KPiArI2Rl ZmluZSBSTkRJU19RVUVSWV9DTVBMVCAgICAgICAgICAweDgwMDAwMDA0DQo+ICsjZGVmaW5lIFJO RElTX1NFVF9NU0cgICAgICAgICAgICAgIDB4MDAwMDAwMDUNCj4gKyNkZWZpbmUgUk5ESVNfU0VU X0NNUExUICAgICAgICAgICAgMHg4MDAwMDAwNQ0KPiArI2RlZmluZSBSTkRJU19SRVNFVF9NU0cg ICAgICAgICAgICAweDAwMDAwMDA2DQo+ICsjZGVmaW5lIFJORElTX1JFU0VUX0NNUExUICAgICAg ICAgIDB4ODAwMDAwMDYNCj4gKyNkZWZpbmUgUk5ESVNfSU5ESUNBVEVfU1RBVFVTX01TRyAgMHgw MDAwMDAwNw0KPiArI2RlZmluZSBSTkRJU19LRUVQQUxJVkVfTVNHICAgICAgICAweDAwMDAwMDA4 DQo+ICsjZGVmaW5lIFJORElTX0tFRVBBTElWRV9DTVBMVCAgICAgIDB4ODAwMDAwMDgNCj4gKw0K PiArI2RlZmluZSBSTkRJU19TVEFUVVNfU1VDQ0VTUyAgICAgICAgICAgMHgwMDAwMDAwMA0KPiAr I2RlZmluZSBSTkRJU19TVEFUVVNfRkFJTFVSRSAgICAgICAgICAgMHhDMDAwMDAwMQ0KPiArI2Rl ZmluZSBSTkRJU19TVEFUVVNfSU5WQUxJRF9EQVRBICAgICAgMHhDMDAxMDAxNQ0KPiArI2RlZmlu ZSBSTkRJU19TVEFUVVNfTk9UX1NVUFBPUlRFRCAgICAgMHhDMDAwMDBCQg0KPiArI2RlZmluZSBS TkRJU19TVEFUVVNfTUVESUFfQ09OTkVDVCAgICAgMHg0MDAxMDAwQg0KPiArI2RlZmluZSBSTkRJ U19TVEFUVVNfTUVESUFfRElTQ09OTkVDVCAgMHg0MDAxMDAwQw0KPiArDQo+ICsjZGVmaW5lIFJO RElTX0NPTlRST0xfVElNRU9VVCAgICAxMDAwMCAgICAgICAgICAgIC8vIDEwc2VjDQo+ICsjZGVm aW5lIFJORElTX0tFRVBBTElWRV9USU1FT1VUICA1MDAwICAgICAgICAgICAgIC8vIDVzZWMNCj4g Kw0KPiArI2RlZmluZSBTRU5EX0VOQ0FQU1VMQVRFRF9DT01NQU5EICAweDAwMDAwMDAwDQo+ICsj ZGVmaW5lIEdFVF9FTkNBUFNVTEFURURfUkVTUE9OU0UgIDB4MDAwMDAwMDENCj4gKw0KPiArLy8N Cj4gKy8vIEdlbmVyYWwgT2JqZWN0cw0KPiArLy8NCj4gKy8vIFRha2VuIGZyb20gTlRERE5ESVMu SA0KPiArI2RlZmluZSBPSURfR0VOX1NVUFBPUlRFRF9MSVNUICAgICAgICAgMHgwMDAxMDEwMQ0K PiArI2RlZmluZSBPSURfR0VOX0hBUkRXQVJFX1NUQVRVUyAgICAgICAgMHgwMDAxMDEwMg0KPiAr I2RlZmluZSBPSURfR0VOX01FRElBX1NVUFBPUlRFRCAgICAgICAgMHgwMDAxMDEwMw0KPiArI2Rl ZmluZSBPSURfR0VOX01FRElBX0lOX1VTRSAgICAgICAgICAgMHgwMDAxMDEwNA0KPiArI2RlZmlu ZSBPSURfR0VOX01BWElNVU1fTE9PS0FIRUFEICAgICAgMHgwMDAxMDEwNQ0KPiArI2RlZmluZSBP SURfR0VOX01BWElNVU1fRlJBTUVfU0laRSAgICAgMHgwMDAxMDEwNg0KPiArI2RlZmluZSBPSURf R0VOX0xJTktfU1BFRUQgICAgICAgICAgICAgMHgwMDAxMDEwNw0KPiArI2RlZmluZSBPSURfR0VO X1RSQU5TTUlUX0JVRkZFUl9TUEFDRSAgMHgwMDAxMDEwOA0KPiArI2RlZmluZSBPSURfR0VOX1JF Q0VJVkVfQlVGRkVSX1NQQUNFICAgMHgwMDAxMDEwOQ0KPiArI2RlZmluZSBPSURfR0VOX1RSQU5T TUlUX0JMT0NLX1NJWkUgICAgMHgwMDAxMDEwQQ0KPiArI2RlZmluZSBPSURfR0VOX1JFQ0VJVkVf QkxPQ0tfU0laRSAgICAgMHgwMDAxMDEwQg0KPiArI2RlZmluZSBPSURfR0VOX1ZFTkRPUl9JRCAg ICAgICAgICAgICAgMHgwMDAxMDEwQw0KPiArI2RlZmluZSBPSURfR0VOX1ZFTkRPUl9ERVNDUklQ VElPTiAgICAgMHgwMDAxMDEwRA0KPiArI2RlZmluZSBPSURfR0VOX0NVUlJFTlRfUEFDS0VUX0ZJ TFRFUiAgMHgwMDAxMDEwRQ0KPiArI2RlZmluZSBPSURfR0VOX0NVUlJFTlRfTE9PS0FIRUFEICAg ICAgMHgwMDAxMDEwRg0KPiArI2RlZmluZSBPSURfR0VOX0RSSVZFUl9WRVJTSU9OICAgICAgICAg MHgwMDAxMDExMA0KPiArI2RlZmluZSBPSURfR0VOX01BWElNVU1fVE9UQUxfU0laRSAgICAgMHgw MDAxMDExMQ0KPiArI2RlZmluZSBPSURfR0VOX1BST1RPQ09MX09QVElPTlMgICAgICAgMHgwMDAx MDExMg0KPiArI2RlZmluZSBPSURfR0VOX01BQ19PUFRJT05TICAgICAgICAgICAgMHgwMDAxMDEx Mw0KPiArI2RlZmluZSBPSURfR0VOX01FRElBX0NPTk5FQ1RfU1RBVFVTICAgMHgwMDAxMDExNA0K PiArI2RlZmluZSBPSURfR0VOX01BWElNVU1fU0VORF9QQUNLRVRTICAgMHgwMDAxMDExNQ0KPiAr I2RlZmluZSBPSURfR0VOX1ZFTkRPUl9EUklWRVJfVkVSU0lPTiAgMHgwMDAxMDExNg0KPiArDQo+ ICsjZGVmaW5lIE9JRF9HRU5fWE1JVF9PSyAgICAgICAgMHgwMDAyMDEwMQ0KPiArI2RlZmluZSBP SURfR0VOX1JDVl9PSyAgICAgICAgIDB4MDAwMjAxMDINCj4gKyNkZWZpbmUgT0lEX0dFTl9YTUlU X0VSUk9SICAgICAweDAwMDIwMTAzDQo+ICsjZGVmaW5lIE9JRF9HRU5fUkNWX0VSUk9SICAgICAg MHgwMDAyMDEwNA0KPiArI2RlZmluZSBPSURfR0VOX1JDVl9OT19CVUZGRVIgIDB4MDAwMjAxMDUN Cj4gKw0KPiArI2RlZmluZSBPSURfR0VOX0RJUkVDVEVEX0JZVEVTX1hNSVQgICAgMHgwMDAyMDIw MQ0KPiArI2RlZmluZSBPSURfR0VOX0RJUkVDVEVEX0ZSQU1FU19YTUlUICAgMHgwMDAyMDIwMg0K PiArI2RlZmluZSBPSURfR0VOX01VTFRJQ0FTVF9CWVRFU19YTUlUICAgMHgwMDAyMDIwMw0KPiAr I2RlZmluZSBPSURfR0VOX01VTFRJQ0FTVF9GUkFNRVNfWE1JVCAgMHgwMDAyMDIwNA0KPiArI2Rl ZmluZSBPSURfR0VOX0JST0FEQ0FTVF9CWVRFU19YTUlUICAgMHgwMDAyMDIwNQ0KPiArI2RlZmlu ZSBPSURfR0VOX0JST0FEQ0FTVF9GUkFNRVNfWE1JVCAgMHgwMDAyMDIwNg0KPiArI2RlZmluZSBP SURfR0VOX0RJUkVDVEVEX0JZVEVTX1JDViAgICAgMHgwMDAyMDIwNw0KPiArI2RlZmluZSBPSURf R0VOX0RJUkVDVEVEX0ZSQU1FU19SQ1YgICAgMHgwMDAyMDIwOA0KPiArI2RlZmluZSBPSURfR0VO X01VTFRJQ0FTVF9CWVRFU19SQ1YgICAgMHgwMDAyMDIwOQ0KPiArI2RlZmluZSBPSURfR0VOX01V TFRJQ0FTVF9GUkFNRVNfUkNWICAgMHgwMDAyMDIwQQ0KPiArI2RlZmluZSBPSURfR0VOX0JST0FE Q0FTVF9CWVRFU19SQ1YgICAgMHgwMDAyMDIwQg0KPiArI2RlZmluZSBPSURfR0VOX0JST0FEQ0FT VF9GUkFNRVNfUkNWICAgMHgwMDAyMDIwQw0KPiArI2RlZmluZSBPSURfR0VOX1JDVl9DUkNfRVJS T1IgICAgICAgICAgMHgwMDAyMDIwRA0KPiArI2RlZmluZSBPSURfR0VOX1RSQU5TTUlUX1FVRVVF X0xFTkdUSCAgMHgwMDAyMDIwRQ0KPiArDQo+ICsjZGVmaW5lIE9JRF84MDJfM19DVVJSRU5UX0FE RFJFU1MgIDB4MDEwMTAxMDINCj4gKy8vDQo+ICsvLyBOZGlzIFBhY2tldCBGaWx0ZXIgQml0cyAo T0lEX0dFTl9DVVJSRU5UX1BBQ0tFVF9GSUxURVIpLg0KPiArLy8NCj4gKyNkZWZpbmUgTkRJU19Q QUNLRVRfVFlQRV9ESVJFQ1RFRCAgICAgICAgMHgwMDAxDQo+ICsjZGVmaW5lIE5ESVNfUEFDS0VU X1RZUEVfTVVMVElDQVNUICAgICAgIDB4MDAwMg0KPiArI2RlZmluZSBORElTX1BBQ0tFVF9UWVBF X0FMTF9NVUxUSUNBU1QgICAweDAwMDQNCj4gKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9CUk9B RENBU1QgICAgICAgMHgwMDA4DQo+ICsjZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfU09VUkNFX1JP VVRJTkcgIDB4MDAxMA0KPiArI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX1BST01JU0NVT1VTICAg ICAweDAwMjANCj4gKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9TTVQgICAgICAgICAgICAgMHgw MDQwDQo+ICsjZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfQUxMX0xPQ0FMICAgICAgIDB4MDA4MA0K PiArI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX01BQ19GUkFNRSAgICAgICAweDgwMDANCj4gKyNk ZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9GVU5DVElPTkFMICAgICAgMHg0MDAwDQo+ICsjZGVmaW5l IE5ESVNfUEFDS0VUX1RZUEVfQUxMX0ZVTkNUSU9OQUwgIDB4MjAwMA0KPiArI2RlZmluZSBORElT X1BBQ0tFVF9UWVBFX0dST1VQICAgICAgICAgICAweDEwMDANCj4gKw0KPiArI3ByYWdtYSBwYWNr KDEpDQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IF9SRU1PVEVfTkRJU19NU0dfSEVBREVSIHsNCj4g KyAgVUlOVDMyICAgIE1lc3NhZ2VUeXBlOw0KPiArICBVSU5UMzIgICAgTWVzc2FnZUxlbmd0aDsN Cj4gK30gUkVNT1RFX05ESVNfTVNHX0hFQURFUjsNCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0K PiArICBVSU5UMzIgICAgTWVzc2FnZVR5cGU7DQo+ICsgIFVJTlQzMiAgICBNZXNzYWdlTGVuZ3Ro Ow0KPiArICBVSU5UMzIgICAgUmVxdWVzdElEOw0KPiArICBVSU5UMzIgICAgTWFqb3JWZXJzaW9u Ow0KPiArICBVSU5UMzIgICAgTWlub3JWZXJzaW9uOw0KPiArICBVSU5UMzIgICAgTWF4VHJhbnNm ZXJTaXplOw0KPiArfSBSRU1PVEVfTkRJU19JTklUSUFMSVpFX01TRzsNCj4gKw0KPiArdHlwZWRl ZiBzdHJ1Y3Qgew0KPiArICBVSU5UMzIgICAgTWVzc2FnZVR5cGU7DQo+ICsgIFVJTlQzMiAgICBN ZXNzYWdlTGVuZ3RoOw0KPiArICBVSU5UMzIgICAgUmVxdWVzdElEOw0KPiArfSBSRU1PVEVfTkRJ U19IQUxUX01TRzsNCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UMzIgICAgTWVz c2FnZVR5cGU7DQo+ICsgIFVJTlQzMiAgICBNZXNzYWdlTGVuZ3RoOw0KPiArICBVSU5UMzIgICAg UmVxdWVzdElEOw0KPiArICBVSU5UMzIgICAgT2lkOw0KPiArICBVSU5UMzIgICAgSW5mb3JtYXRp b25CdWZmZXJMZW5ndGg7DQo+ICsgIFVJTlQzMiAgICBJbmZvcm1hdGlvbkJ1ZmZlck9mZnNldDsN Cj4gKyAgVUlOVDMyICAgIFJlc2VydmVkOw0KPiArfSBSRU1PVEVfTkRJU19RVUVSWV9NU0c7DQo+ ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgUkVNT1RFX05ESVNfUVVFUllfTVNHICAgIFF1 ZXJ5TXNnOw0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgQWRkcls2XTsNCj4gK30gUkVN T1RFX05ESVNfUVVFUllfTUFDX01TRzsNCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBS RU1PVEVfTkRJU19RVUVSWV9NU0cgICAgUXVlcnlNc2c7DQo+ICsgIFVJTlQzMiAgICAgICAgICAg ICAgICAgICBNYXhUb3RhbFNpemU7DQo+ICt9IFJFTU9URV9ORElTX1FVRVJZX01BWF9UT1RBTF9T SVpFX01TRzsNCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UMzIgICAgTWVzc2Fn ZVR5cGU7DQo+ICsgIFVJTlQzMiAgICBNZXNzYWdlTGVuZ3RoOw0KPiArICBVSU5UMzIgICAgUmVx dWVzdElEOw0KPiArICBVSU5UMzIgICAgT2lkOw0KPiArICBVSU5UMzIgICAgSW5mb3JtYXRpb25C dWZmZXJMZW5ndGg7DQo+ICsgIFVJTlQzMiAgICBJbmZvcm1hdGlvbkJ1ZmZlck9mZnNldDsNCj4g KyAgVUlOVDMyICAgIFJlc2VydmVkOw0KPiArfSBSRU1PVEVfTkRJU19TRVRfTVNHOw0KPiArDQo+ ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsgIFVJTlQzMiAgICBNZXNzYWdlVHlwZTsNCj4gKyAgVUlO VDMyICAgIE1lc3NhZ2VMZW5ndGg7DQo+ICsgIFVJTlQzMiAgICBSZXNlcnZlZDsNCj4gK30gUkVN T1RFX05ESVNfUkVTRVRfTVNHOw0KPiArDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsgIFVJTlQz MiAgICBNZXNzYWdlVHlwZTsNCj4gKyAgVUlOVDMyICAgIE1lc3NhZ2VMZW5ndGg7DQo+ICsgIFVJ TlQzMiAgICBTdGF0dXM7DQo+ICsgIFVJTlQzMiAgICBTdGF0dXNCdWZmZXJMZW5ndGg7DQo+ICsg IFVJTlQzMiAgICBTdGF0dXNCdWZmZXJPZmZzZXQ7DQo+ICt9IFJFTU9URV9ORElTX0lORElDQVRF X1NUQVRVU19NU0c7DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgVUlOVDMyICAgIERp YWdTdGF0dXM7DQo+ICsgIFVJTlQzMiAgICBFcnJvck9mZnNldDsNCj4gK30gUk5ESVNfRElBR05P U1RJQ19JTkZPOw0KPiArDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsgIFVJTlQzMiAgICBNZXNz YWdlVHlwZTsNCj4gKyAgVUlOVDMyICAgIE1lc3NhZ2VMZW5ndGg7DQo+ICsgIFVJTlQzMiAgICBS ZXF1ZXN0SUQ7DQo+ICt9IFJFTU9URV9ORElTX0tFRVBBTElWRV9NU0c7DQo+ICsNCj4gK3R5cGVk ZWYgc3RydWN0IHsNCj4gKyAgVUlOVDMyICAgIE1lc3NhZ2VUeXBlOw0KPiArICBVSU5UMzIgICAg TWVzc2FnZUxlbmd0aDsNCj4gKyAgVUlOVDMyICAgIFJlcXVlc3RJRDsNCj4gKyAgVUlOVDMyICAg IFN0YXR1czsNCj4gKyAgVUlOVDMyICAgIE1ham9yVmVyc2lvbjsNCj4gKyAgVUlOVDMyICAgIE1p bm9yVmVyc2lvbjsNCj4gKyAgVUlOVDMyICAgIERldmljZUZsYWdzOw0KPiArICBVSU5UMzIgICAg TWVkaXVtOw0KPiArICBVSU5UMzIgICAgTWF4UGFja2V0c1BlclRyYW5zZmVyOw0KPiArICBVSU5U MzIgICAgTWF4VHJhbnNmZXJTaXplOw0KPiArICBVSU5UMzIgICAgUGFja2V0QWxpZ25tZW50RmFj dG9yOw0KPiArICBVSU5UNjQgICAgUmVzZXJ2ZWQ7DQo+ICt9IFJFTU9URV9ORElTX0lOSVRJQUxJ WkVfQ01QTFQ7DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgVUlOVDMyICAgIE1lc3Nh Z2VUeXBlOw0KPiArICBVSU5UMzIgICAgTWVzc2FnZUxlbmd0aDsNCj4gKyAgVUlOVDMyICAgIFJl cXVlc3RJRDsNCj4gKyAgVUlOVDMyICAgIFN0YXR1czsNCj4gKyAgVUlOVDMyICAgIEluZm9ybWF0 aW9uQnVmZmVyTGVuZ3RoOw0KPiArICBVSU5UMzIgICAgSW5mb3JtYXRpb25CdWZmZXJPZmZzZXQ7 DQo+ICt9IFJFTU9URV9ORElTX1FVRVJZX0NNUExUOw0KPiArDQo+ICt0eXBlZGVmIHN0cnVjdCB7 DQo+ICsgIFJFTU9URV9ORElTX1FVRVJZX0NNUExUICAgIFF1ZXJ5Q21wbHQ7DQo+ICsgIFVJTlQ4 ICAgICAgICAgICAgICAgICAgICAgIEFkZHJbNl07DQo+ICt9IFJFTU9URV9ORElTX1FVRVJZX01B Q19DTVBMVDsNCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBSRU1PVEVfTkRJU19RVUVS WV9DTVBMVCAgICBRdWVyeUNtcGx0Ow0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICBN YXhUb3RhbFNpemU7DQo+ICt9IFJFTU9URV9ORElTX1FVRVJZX01BWF9UT1RBTF9TSVpFX0NNUExU Ow0KPiArDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsgIFVJTlQzMiAgICBNZXNzYWdlVHlwZTsN Cj4gKyAgVUlOVDMyICAgIE1lc3NhZ2VMZW5ndGg7DQo+ICsgIFVJTlQzMiAgICBSZXF1ZXN0SUQ7 DQo+ICsgIFVJTlQzMiAgICBTdGF0dXM7DQo+ICt9IFJFTU9URV9ORElTX1NFVF9DTVBMVDsNCj4g Kw0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UMzIgICAgTWVzc2FnZVR5cGU7DQo+ICsg IFVJTlQzMiAgICBNZXNzYWdlTGVuZ3RoOw0KPiArICBVSU5UMzIgICAgU3RhdHVzOw0KPiArICBV SU5UMzIgICAgQWRkcmVzc2luZ1Jlc2V0Ow0KPiArfSBSRU1PVEVfTkRJU19SRVNFVF9DTVBMVDsN Cj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UMzIgICAgTWVzc2FnZVR5cGU7DQo+ ICsgIFVJTlQzMiAgICBNZXNzYWdlTGVuZ3RoOw0KPiArICBVSU5UMzIgICAgUmVxdWVzdElEOw0K PiArICBVSU5UMzIgICAgU3RhdHVzOw0KPiArfSBSRU1PVEVfTkRJU19LRUVQQUxJVkVfQ01QTFQ7 DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgVUlOVDMyICAgIE1lc3NhZ2VUeXBlOw0K PiArICBVSU5UMzIgICAgTWVzc2FnZUxlbmd0aDsNCj4gKyAgVUlOVDMyICAgIERhdGFPZmZzZXQ7 DQo+ICsgIFVJTlQzMiAgICBEYXRhTGVuZ3RoOw0KPiArICBVSU5UMzIgICAgT3V0T2ZCYW5kRGF0 YU9mZnNldDsNCj4gKyAgVUlOVDMyICAgIE91dE9mQmFuZERhdGFMZW5ndGg7DQo+ICsgIFVJTlQz MiAgICBOdW1PdXRPZkJhbmREYXRhRWxlbWVudHM7DQo+ICsgIFVJTlQzMiAgICBQZXJQYWNrZXRJ bmZvT2Zmc2V0Ow0KPiArICBVSU5UMzIgICAgUGVyUGFja2V0SW5mb0xlbmd0aDsNCj4gKyAgVUlO VDMyICAgIFJlc2VydmVkMTsNCj4gKyAgVUlOVDMyICAgIFJlc2VydmVkMjsNCj4gK30gUkVNT1RF X05ESVNfUEFDS0VUX01TRzsNCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UMzIg ICAgU2l6ZTsNCj4gKyAgVUlOVDMyICAgIFR5cGU7DQo+ICsgIFVJTlQzMiAgICBDbGFzc0luZm9y bWF0aW9uT2Zmc2V0Ow0KPiArfSBPVVRfT0ZfQkFORF9EQVRBX1JFQ09SRDsNCj4gKw0KPiArdHlw ZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UMzIgICAgU2l6ZTsNCj4gKyAgVUlOVDMyICAgIFR5cGU7 DQo+ICsgIFVJTlQzMiAgICBDbGFzc0luZm9ybWF0aW9uT2Zmc2V0Ow0KPiArfSBQRVJfUEFDS0VU X0lORk9fREFUQV9SRUNPUkQ7DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgTElTVF9F TlRSWSAgICBQYWNrZXRMaXN0Ow0KPiArICBVSU5UOCAgICAgICAgICpPcmdCdWZmZXI7DQo+ICsg IFVJTlROICAgICAgICAgUmVtYWluaW5nTGVuZ3RoOw0KPiArICBVSU5UOCAgICAgICAgICpQYWNr ZXRTdGFydEJ1ZmZlcjsgICAgLy8gVmFyaWFibGUgc2l6ZSBkYXRhIHRvIGZvbGxvdw0KPiArfSBQ QUNLRVRfTElTVDsNCj4gKw0KPiArI3ByYWdtYSBwYWNrKCkNCj4gKw0KPiArI2VuZGlmDQo+IGRp ZmYgLS1naXQgYS9Vc2JOZXR3b3JrUGtnL05ldHdvcmtDb21tb24vQ29tcG9uZW50TmFtZS5jIGIv VXNiTmV0d29ya1BrZy9OZXR3b3JrQ29tbW9uL0NvbXBvbmVudE5hbWUuYw0KPiBuZXcgZmlsZSBt b2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAuLmU4MzQ2OWUxMzA3OQ0KPiAtLS0gL2Rl di9udWxsDQo+ICsrKyBiL1VzYk5ldHdvcmtQa2cvTmV0d29ya0NvbW1vbi9Db21wb25lbnROYW1l LmMNCj4gQEAgLTAsMCArMSwyNjMgQEANCj4gKy8qKiBAZmlsZQ0KPiArICBUaGlzIGZpbGUgY29u dGFpbnMgY29kZSBmb3IgVVNCIG5ldHdvcmsgY29tbW9uIGRyaXZlcg0KPiArICBjb21wb25lbnQg bmFtZSBkZWZpbml0aW9ucw0KPiArDQo+ICsgIENvcHlyaWdodCAoYykgMjAyMywgQW1lcmljYW4g TWVnYXRyZW5kcyBJbnRlcm5hdGlvbmFsIExMQy4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ ICsgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ICsqKi8N Cj4gKw0KPiArI2luY2x1ZGUgIkRyaXZlckJpbmRpbmcuaCINCj4gKw0KPiArZXh0ZXJuIEVGSV9E UklWRVJfQklORElOR19QUk9UT0NPTCAgZ05ldHdvcmtDb21tb25Ecml2ZXJCaW5kaW5nOw0KPiAr DQo+ICtHTE9CQUxfUkVNT1ZFX0lGX1VOUkVGRVJFTkNFRCBFRklfVU5JQ09ERV9TVFJJTkdfVEFC TEUgIGdOZXR3b3JrQ29tbW9uRHJpdmVyTmFtZVRhYmxlW10gPSB7DQo+ICsgIHsNCj4gKyAgICAi ZW5nO2VuIiwNCj4gKyAgICBMIk5ldHdvcmsgQ29tbW9uIERyaXZlciINCj4gKyAgfSwNCj4gKyAg ew0KPiArICAgIE5VTEwsDQo+ICsgICAgTlVMTA0KPiArICB9DQo+ICt9Ow0KPiArR0xPQkFMX1JF TU9WRV9JRl9VTlJFRkVSRU5DRUQgRUZJX1VOSUNPREVfU1RSSU5HX1RBQkxFICAqZ05ldHdvcmtD b21tb25Db250cm9sbGVyTmFtZVRhYmxlID0gTlVMTDsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiAr RUZJQVBJDQo+ICtOZXR3b3JrQ29tbW9uQ29tcG9uZW50TmFtZUdldERyaXZlck5hbWUgKA0KPiAr ICBJTiAgRUZJX0NPTVBPTkVOVF9OQU1FX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gIENIQVI4 ICAgICAgICAgICAgICAgICAgICAgICAgKkxhbmd1YWdlLA0KPiArICBPVVQgQ0hBUjE2ICAgICAg ICAgICAgICAgICAgICAgICAqKkRyaXZlck5hbWUNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRV Uw0KPiArRUZJQVBJDQo+ICtOZXR3b3JrQ29tbW9uQ29tcG9uZW50TmFtZUdldENvbnRyb2xsZXJO YW1lICgNCj4gKyAgSU4gRUZJX0NPTVBPTkVOVF9OQU1FX1BST1RPQ09MICAqVGhpcywNCj4gKyAg SU4gRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICBDb250cm9sbGVyLA0KPiArICBJTiBFRklf SEFORExFICAgICAgICAgICAgICAgICAgIENoaWxkSGFuZGxlICAgICAgICBPUFRJT05BTCwNCj4g KyAgSU4gQ0hBUjggICAgICAgICAgICAgICAgICAgICAgICAqTGFuZ3VhZ2UsDQo+ICsgIE9VVCBD SEFSMTYgICAgICAgICAgICAgICAgICAgICAgKipDb250cm9sbGVyTmFtZQ0KPiArICApOw0KPiAr DQo+ICtHTE9CQUxfUkVNT1ZFX0lGX1VOUkVGRVJFTkNFRCBFRklfQ09NUE9ORU5UX05BTUVfUFJP VE9DT0wgIGdOZXR3b3JrQ29tbW9uQ29tcG9uZW50TmFtZSA9IHsNCj4gKyAgTmV0d29ya0NvbW1v bkNvbXBvbmVudE5hbWVHZXREcml2ZXJOYW1lLA0KPiArICBOZXR3b3JrQ29tbW9uQ29tcG9uZW50 TmFtZUdldENvbnRyb2xsZXJOYW1lLA0KPiArICAiZW5nIg0KPiArfTsNCj4gKw0KPiArR0xPQkFM X1JFTU9WRV9JRl9VTlJFRkVSRU5DRUQgRUZJX0NPTVBPTkVOVF9OQU1FMl9QUk9UT0NPTCAgZ05l dHdvcmtDb21tb25Db21wb25lbnROYW1lMiA9IHsNCj4gKyAgKEVGSV9DT01QT05FTlRfTkFNRTJf R0VUX0RSSVZFUl9OQU1FKU5ldHdvcmtDb21tb25Db21wb25lbnROYW1lR2V0RHJpdmVyTmFtZSwN Cj4gKyAgKEVGSV9DT01QT05FTlRfTkFNRTJfR0VUX0NPTlRST0xMRVJfTkFNRSlOZXR3b3JrQ29t bW9uQ29tcG9uZW50TmFtZUdldENvbnRyb2xsZXJOYW1lLA0KPiArICAiZW4iDQo+ICt9Ow0KPiAr DQo+ICsvKioNCj4gKyAgUmV0cmlldmVzIGEgVW5pY29kZSBzdHJpbmcgdGhhdCBpcyB0aGUgdXNl ciByZWFkYWJsZSBuYW1lIG9mIHRoZSBkcml2ZXIuDQo+ICsNCj4gKyAgVGhpcyBmdW5jdGlvbiBy ZXRyaWV2ZXMgdGhlIHVzZXIgcmVhZGFibGUgbmFtZSBvZiBhIGRyaXZlciBpbiB0aGUgZm9ybSBv ZiBhDQo+ICsgIFVuaWNvZGUgc3RyaW5nLiBJZiB0aGUgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlz IGhhcyBhIHVzZXIgcmVhZGFibGUgbmFtZSBpbg0KPiArICB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVk IGJ5IExhbmd1YWdlLCB0aGVuIGEgcG9pbnRlciB0byB0aGUgZHJpdmVyIG5hbWUgaXMNCj4gKyAg cmV0dXJuZWQgaW4gRHJpdmVyTmFtZSwgYW5kIEVGSV9TVUNDRVNTIGlzIHJldHVybmVkLiBJZiB0 aGUgZHJpdmVyIHNwZWNpZmllZA0KPiArICBieSBUaGlzIGRvZXMgbm90IHN1cHBvcnQgdGhlIGxh bmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFnZSwNCj4gKyAgdGhlbiBFRklfVU5TVVBQT1JURUQg aXMgcmV0dXJuZWQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgQSBw b2ludGVyIHRvIHRoZSBFRklfQ09NUE9ORU5UX05BTUUyX1BST1RPQ09MIG9yDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9DT01QT05FTlRfTkFNRV9QUk9UT0NPTCBpbnN0 YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAgTGFuZ3VhZ2UgICAgICAgICAgQSBwb2ludGVyIHRvIGEg TnVsbC10ZXJtaW5hdGVkIEFTQ0lJIHN0cmluZw0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBhcnJheSBpbmRpY2F0aW5nIHRoZSBsYW5ndWFnZS4gVGhpcyBpcyB0aGUNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2Ugb2YgdGhlIGRyaXZlciBuYW1l IHRoYXQgdGhlIGNhbGxlciBpcw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZXF1ZXN0aW5nLCBhbmQgaXQgbXVzdCBtYXRjaCBvbmUgb2YgdGhlDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlcyBzcGVjaWZpZWQgaW4gU3VwcG9ydGVkTGFuZ3Vh Z2VzLiBUaGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIGxh bmd1YWdlcyBzdXBwb3J0ZWQgYnkgYSBkcml2ZXIgaXMgdXANCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdG8gdGhlIGRyaXZlciB3cml0ZXIuIExhbmd1YWdlIGlzIHNwZWNpZmll ZA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBSRkMgNDY0NiBvciBJU08g NjM5LTIgbGFuZ3VhZ2UgY29kZSBmb3JtYXQuDQo+ICsgIEBwYXJhbVtvdXRdIERyaXZlck5hbWUg ICAgICAgIEEgcG9pbnRlciB0byB0aGUgVW5pY29kZSBzdHJpbmcgdG8gcmV0dXJuLg0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIFVuaWNvZGUgc3RyaW5nIGlzIHRoZSBu YW1lIG9mIHRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXIgc3Bl Y2lmaWVkIGJ5IFRoaXMgaW4gdGhlIGxhbmd1YWdlDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNwZWNpZmllZCBieSBMYW5ndWFnZS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9T VUNDRVNTICAgICAgICAgICBUaGUgVW5pY29kZSBzdHJpbmcgZm9yIHRoZSBEcml2ZXIgc3BlY2lm aWVkIGJ5DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgYW5kIHRoZSBs YW5ndWFnZSBzcGVjaWZpZWQgYnkgTGFuZ3VhZ2Ugd2FzDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJldHVybmVkIGluIERyaXZlck5hbWUuDQo+ICsgIEByZXR2YWwgRUZJX0lO VkFMSURfUEFSQU1FVEVSIExhbmd1YWdlIGlzIE5VTEwuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFM SURfUEFSQU1FVEVSIERyaXZlck5hbWUgaXMgTlVMTC4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQ T1JURUQgICAgICAgVGhlIGRyaXZlciBzcGVjaWZpZWQgYnkgVGhpcyBkb2VzIG5vdCBzdXBwb3J0 DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsYW5ndWFnZSBzcGVjaWZp ZWQgYnkgTGFuZ3VhZ2UuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ ICtOZXR3b3JrQ29tbW9uQ29tcG9uZW50TmFtZUdldERyaXZlck5hbWUgKA0KPiArICBJTiAgRUZJ X0NPTVBPTkVOVF9OQU1FX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gIENIQVI4ICAgICAgICAg ICAgICAgICAgICAgICAgKkxhbmd1YWdlLA0KPiArICBPVVQgQ0hBUjE2ICAgICAgICAgICAgICAg ICAgICAgICAqKkRyaXZlck5hbWUNCj4gKyAgKQ0KPiArew0KPiArICByZXR1cm4gTG9va3VwVW5p Y29kZVN0cmluZzIgKA0KPiArICAgICAgICAgICBMYW5ndWFnZSwNCj4gKyAgICAgICAgICAgVGhp cy0+U3VwcG9ydGVkTGFuZ3VhZ2VzLA0KPiArICAgICAgICAgICBnTmV0d29ya0NvbW1vbkRyaXZl ck5hbWVUYWJsZSwNCj4gKyAgICAgICAgICAgRHJpdmVyTmFtZSwNCj4gKyAgICAgICAgICAgKEJP T0xFQU4pKFRoaXMgPT0gJmdOZXR3b3JrQ29tbW9uQ29tcG9uZW50TmFtZSkNCj4gKyAgICAgICAg ICAgKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFJldHJpZXZlcyBhIFVuaWNvZGUgc3RyaW5n IHRoYXQgaXMgdGhlIHVzZXIgcmVhZGFibGUgbmFtZSBvZiB0aGUgY29udHJvbGxlcg0KPiArICB0 aGF0IGlzIGJlaW5nIG1hbmFnZWQgYnkgYSBkcml2ZXIuDQo+ICsNCj4gKyAgVGhpcyBmdW5jdGlv biByZXRyaWV2ZXMgdGhlIHVzZXIgcmVhZGFibGUgbmFtZSBvZiB0aGUgY29udHJvbGxlciBzcGVj aWZpZWQgYnkNCj4gKyAgQ29udHJvbGxlckhhbmRsZSBhbmQgQ2hpbGRIYW5kbGUgaW4gdGhlIGZv cm0gb2YgYSBVbmljb2RlIHN0cmluZy4gSWYgdGhlDQo+ICsgIGRyaXZlciBzcGVjaWZpZWQgYnkg VGhpcyBoYXMgYSB1c2VyIHJlYWRhYmxlIG5hbWUgaW4gdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBi eQ0KPiArICBMYW5ndWFnZSwgdGhlbiBhIHBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIgbmFtZSBp cyByZXR1cm5lZCBpbiBDb250cm9sbGVyTmFtZSwNCj4gKyAgYW5kIEVGSV9TVUNDRVNTIGlzIHJl dHVybmVkLiAgSWYgdGhlIGRyaXZlciBzcGVjaWZpZWQgYnkgVGhpcyBpcyBub3QgY3VycmVudGx5 DQo+ICsgIG1hbmFnaW5nIHRoZSBjb250cm9sbGVyIHNwZWNpZmllZCBieSBDb250cm9sbGVySGFu ZGxlIGFuZCBDaGlsZEhhbmRsZSwNCj4gKyAgdGhlbiBFRklfVU5TVVBQT1JURUQgaXMgcmV0dXJu ZWQuICBJZiB0aGUgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGRvZXMgbm90DQo+ICsgIHN1cHBv cnQgdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFnZSwgdGhlbiBFRklfVU5TVVBQT1JU RUQgaXMgcmV0dXJuZWQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAg QSBwb2ludGVyIHRvIHRoZSBFRklfQ09NUE9ORU5UX05BTUUyX1BST1RPQ09MIG9yDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9DT01QT05FTlRfTkFNRV9QUk9UT0NPTCBp bnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAgQ29udHJvbGxlciAgICAgICAgVGhlIGhhbmRsZSBv ZiBhIGNvbnRyb2xsZXIgdGhhdCB0aGUgZHJpdmVyDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNwZWNpZmllZCBieSBUaGlzIGlzIG1hbmFnaW5nLiAgVGhpcyBoYW5kbGUNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVzIHRoZSBjb250cm9sbGVy IHdob3NlIG5hbWUgaXMgdG8gYmUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuZWQuDQo+ICsgIEBwYXJhbVtpbl0gIENoaWxkSGFuZGxlICAgICAgIFRoZSBoYW5kbGUg b2YgdGhlIGNoaWxkIGNvbnRyb2xsZXIgdG8gcmV0cmlldmUNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGhlIG5hbWUgb2YuICBUaGlzIGlzIGFuIG9wdGlvbmFsIHBhcmFtZXRl ciB0aGF0DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heSBiZSBOVUxMLiAg SXQgd2lsbCBiZSBOVUxMIGZvciBkZXZpY2UNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZHJpdmVycy4gIEl0IHdpbGwgYWxzbyBiZSBOVUxMIGZvciBhIGJ1cyBkcml2ZXJzDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgd2lzaCB0byByZXRyaWV2ZSB0 aGUgbmFtZSBvZiB0aGUgYnVzDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnRyb2xsZXIuICBJdCB3aWxsIG5vdCBiZSBOVUxMIGZvciBhIGJ1cw0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkcml2ZXIgdGhhdCB3aXNoZXMgdG8gcmV0cmlldmUgdGhlIG5h bWUgb2YgYQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZCBjb250cm9s bGVyLg0KPiArICBAcGFyYW1baW5dICBMYW5ndWFnZSAgICAgICAgICBBIHBvaW50ZXIgdG8gYSBO dWxsLXRlcm1pbmF0ZWQgQVNDSUkgc3RyaW5nDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGFycmF5IGluZGljYXRpbmcgdGhlIGxhbmd1YWdlLiAgVGhpcyBpcyB0aGUNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2Ugb2YgdGhlIGRyaXZlciBuYW1l IHRoYXQgdGhlIGNhbGxlciBpcw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZXF1ZXN0aW5nLCBhbmQgaXQgbXVzdCBtYXRjaCBvbmUgb2YgdGhlDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlcyBzcGVjaWZpZWQgaW4gU3VwcG9ydGVkTGFuZ3Vh Z2VzLiBUaGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIGxh bmd1YWdlcyBzdXBwb3J0ZWQgYnkgYSBkcml2ZXIgaXMgdXANCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdG8gdGhlIGRyaXZlciB3cml0ZXIuIExhbmd1YWdlIGlzIHNwZWNpZmll ZCBpbg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRkMgNDY0NiBvciBJU08g NjM5LTIgbGFuZ3VhZ2UgY29kZSBmb3JtYXQuDQo+ICsgIEBwYXJhbVtvdXRdIENvbnRyb2xsZXJO YW1lICAgIEEgcG9pbnRlciB0byB0aGUgVW5pY29kZSBzdHJpbmcgdG8gcmV0dXJuLg0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIFVuaWNvZGUgc3RyaW5nIGlzIHRoZSBu YW1lIG9mIHRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVy IHNwZWNpZmllZCBieSBDb250cm9sbGVySGFuZGxlIGFuZA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBDaGlsZEhhbmRsZSBpbiB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5DQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhbmd1YWdlIGZyb20gdGhlIHBvaW50 IG9mIHZpZXcgb2YgdGhlIGRyaXZlcg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzcGVjaWZpZWQgYnkgVGhpcy4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAg ICAgICBUaGUgVW5pY29kZSBzdHJpbmcgZm9yIHRoZSB1c2VyIHJlYWRhYmxlIG5hbWUgaW4NCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBi eSBMYW5ndWFnZSBmb3IgdGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRy aXZlciBzcGVjaWZpZWQgYnkgVGhpcyB3YXMgcmV0dXJuZWQgaW4NCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRHJpdmVyTmFtZS4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9Q QVJBTUVURVIgQ29udHJvbGxlckhhbmRsZSBpcyBub3QgYSB2YWxpZCBFRklfSEFORExFLg0KPiAr ICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBDaGlsZEhhbmRsZSBpcyBub3QgTlVMTCBh bmQgaXQgaXMgbm90IGEgdmFsaWQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RUZJX0hBTkRMRS4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgTGFuZ3VhZ2Ug aXMgTlVMTC4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgQ29udHJvbGxlck5h bWUgaXMgTlVMTC4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgVGhlIGRyaXZl ciBzcGVjaWZpZWQgYnkgVGhpcyBpcyBub3QgY3VycmVudGx5DQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG1hbmFnaW5nIHRoZSBjb250cm9sbGVyIHNwZWNpZmllZCBieQ0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlIGFuZCBDaGls ZEhhbmRsZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgVGhlIGRyaXZlciBz cGVjaWZpZWQgYnkgVGhpcyBkb2VzIG5vdCBzdXBwb3J0DQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkgTGFuZ3VhZ2UuDQo+ICsNCj4g KyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtOZXR3b3JrQ29tbW9uQ29tcG9uZW50 TmFtZUdldENvbnRyb2xsZXJOYW1lICgNCj4gKyAgSU4gIEVGSV9DT01QT05FTlRfTkFNRV9QUk9U T0NPTCAgKlRoaXMsDQo+ICsgIElOICBFRklfSEFORExFICAgICAgICAgICAgICAgICAgIENvbnRy b2xsZXIsDQo+ICsgIElOICBFRklfSEFORExFICAgICAgICAgICAgICAgICAgIENoaWxkSGFuZGxl ICAgICAgICBPUFRJT05BTCwNCj4gKyAgSU4gIENIQVI4ICAgICAgICAgICAgICAgICAgICAgICAg Kkxhbmd1YWdlLA0KPiArICBPVVQgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAqKkNvbnRy b2xsZXJOYW1lDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAg U3RhdHVzOw0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAqSGFuZGxlTmFtZTsNCj4g KyAgRUZJX1VTQl9JT19QUk9UT0NPTCAgICAgICAgKlVzYklvOw0KPiArICBFRklfVVNCX0RFVklD RV9ERVNDUklQVE9SICBEZXZEZXNjOw0KPiArDQo+ICsgIGlmICghTGFuZ3VhZ2UgfHwgIUNvbnRy b2xsZXJOYW1lKSB7DQo+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAg fQ0KPiArDQo+ICsgIGlmIChDaGlsZEhhbmRsZSA9PSBOVUxMKSB7DQo+ICsgICAgcmV0dXJuIEVG SV9VTlNVUFBPUlRFRDsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIE1ha2Ugc3VyZSB0 aGlzIGRyaXZlciBpcyBjdXJyZW50bHkgbWFuYWdpbmcgQ29udHJvbGxlckhhbmRsZQ0KPiArICAv Lw0KPiArICBTdGF0dXMgPSBFZmlUZXN0TWFuYWdlZERldmljZSAoDQo+ICsgICAgICAgICAgICAg Q29udHJvbGxlciwNCj4gKyAgICAgICAgICAgICBnTmV0d29ya0NvbW1vbkRyaXZlckJpbmRpbmcu RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgICAmZ0Vka0lJVXNiRXRoUHJvdG9j b2xHdWlkDQo+ICsgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBN YWtlIHN1cmUgdGhpcyBkcml2ZXIgcHJvZHVjZWQgQ2hpbGRIYW5kbGUNCj4gKyAgLy8NCj4gKyAg U3RhdHVzID0gRWZpVGVzdENoaWxkSGFuZGxlICgNCj4gKyAgICAgICAgICAgICBDb250cm9sbGVy LA0KPiArICAgICAgICAgICAgIENoaWxkSGFuZGxlLA0KPiArICAgICAgICAgICAgICZnRWRrSUlV c2JFdGhQcm90b2NvbEd1aWQNCj4gKyAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9S IChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0 YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9jb2wgKENvbnRyb2xsZXIsICZnRWZpVXNiSW9Qcm90b2Nv bEd1aWQsIChWT0lEICoqKSZVc2JJbyk7DQo+ICsNCj4gKyAgaWYgKCFFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4gKyAgICBTdGF0dXMgPSBVc2JJby0+VXNiR2V0RGV2aWNlRGVzY3JpcHRvciAoVXNi SW8sICZEZXZEZXNjKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAg ICByZXR1cm4gU3RhdHVzOw0KPiArICAgIH0NCj4gKw0KPiArICAgIFN0YXR1cyA9IFVzYklvLT5V c2JHZXRTdHJpbmdEZXNjcmlwdG9yIChVc2JJbywgMHg0MDksIERldkRlc2MuU3RyTWFudWZhY3R1 cmVyLCAmSGFuZGxlTmFtZSk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiAr ICAgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICAqQ29udHJvbGxlck5h bWUgPSBIYW5kbGVOYW1lOw0KPiArDQo+ICsgICAgaWYgKGdOZXR3b3JrQ29tbW9uQ29udHJvbGxl ck5hbWVUYWJsZSAhPSBOVUxMKSB7DQo+ICsgICAgICBGcmVlVW5pY29kZVN0cmluZ1RhYmxlIChn TmV0d29ya0NvbW1vbkNvbnRyb2xsZXJOYW1lVGFibGUpOw0KPiArICAgICAgZ05ldHdvcmtDb21t b25Db250cm9sbGVyTmFtZVRhYmxlID0gTlVMTDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBTdGF0 dXMgPSBBZGRVbmljb2RlU3RyaW5nMiAoDQo+ICsgICAgICAgICAgICAgICAiZW5nIiwNCj4gKyAg ICAgICAgICAgICAgIGdOZXR3b3JrQ29tbW9uQ29tcG9uZW50TmFtZS5TdXBwb3J0ZWRMYW5ndWFn ZXMsDQo+ICsgICAgICAgICAgICAgICAmZ05ldHdvcmtDb21tb25Db250cm9sbGVyTmFtZVRhYmxl LA0KPiArICAgICAgICAgICAgICAgSGFuZGxlTmFtZSwNCj4gKyAgICAgICAgICAgICAgIFRSVUUN Cj4gKyAgICAgICAgICAgICAgICk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K PiArICAgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBTdGF0dXMgPSBB ZGRVbmljb2RlU3RyaW5nMiAoDQo+ICsgICAgICAgICAgICAgICAiZW4iLA0KPiArICAgICAgICAg ICAgICAgZ05ldHdvcmtDb21tb25Db21wb25lbnROYW1lMi5TdXBwb3J0ZWRMYW5ndWFnZXMsDQo+ ICsgICAgICAgICAgICAgICAmZ05ldHdvcmtDb21tb25Db250cm9sbGVyTmFtZVRhYmxlLA0KPiAr ICAgICAgICAgICAgICAgSGFuZGxlTmFtZSwNCj4gKyAgICAgICAgICAgICAgIEZBTFNFDQo+ICsg ICAgICAgICAgICAgICApOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAg ICAgIHJldHVybiBTdGF0dXM7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgcmV0dXJuIExvb2t1cFVu aWNvZGVTdHJpbmcyICgNCj4gKyAgICAgICAgICAgICBMYW5ndWFnZSwNCj4gKyAgICAgICAgICAg ICBUaGlzLT5TdXBwb3J0ZWRMYW5ndWFnZXMsDQo+ICsgICAgICAgICAgICAgZ05ldHdvcmtDb21t b25Db250cm9sbGVyTmFtZVRhYmxlLA0KPiArICAgICAgICAgICAgIENvbnRyb2xsZXJOYW1lLA0K PiArICAgICAgICAgICAgIChCT09MRUFOKShUaGlzID09ICZnTmV0d29ya0NvbW1vbkNvbXBvbmVu dE5hbWUpDQo+ICsgICAgICAgICAgICAgKTsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBFRklf VU5TVVBQT1JURUQ7DQo+ICt9DQo+IGRpZmYgLS1naXQgYS9Vc2JOZXR3b3JrUGtnL05ldHdvcmtD b21tb24vRHJpdmVyQmluZGluZy5jIGIvVXNiTmV0d29ya1BrZy9OZXR3b3JrQ29tbW9uL0RyaXZl ckJpbmRpbmcuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAu LjIzYjc5MTM2MjA5MQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL1VzYk5ldHdvcmtQa2cvTmV0 d29ya0NvbW1vbi9Ecml2ZXJCaW5kaW5nLmMNCj4gQEAgLTAsMCArMSw1OTUgQEANCj4gKy8qKiBA ZmlsZQ0KPiArICBUaGlzIGZpbGUgY29udGFpbnMgY29kZSBmb3IgVVNCIG5ldHdvcmsgYmluZGlu ZyBkcml2ZXINCj4gKw0KPiArICBDb3B5cmlnaHQgKGMpIDIwMjMsIEFtZXJpY2FuIE1lZ2F0cmVu ZHMgSW50ZXJuYXRpb25hbCBMTEMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiArICBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiArKiovDQo+ICsNCj4g KyNpbmNsdWRlICJEcml2ZXJCaW5kaW5nLmgiDQo+ICsNCj4gK1BYRV9TV19VTkRJICAqZ1B4ZSA9 IE5VTEw7DQo+ICtOSUNfREVWSUNFICAgKmdMYW5EZXZpY2VMaXN0W01BWF9MQU5fSU5URVJGQUNF XTsNCj4gK1VJTlQzMiAgICAgICBnUmF0ZUxpbWl0aW5nQ3JlZGl0Ow0KPiArVUlOVDMyICAgICAg IGdSYXRlTGltaXRpbmdQb2xsVGltZXI7DQo+ICtCT09MRUFOICAgICAgZ1JhdGVMaW1pdGluZ0Vu YWJsZTsNCj4gKw0KPiArRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICBnTmV0d29ya0NvbW1v bkRyaXZlckJpbmRpbmcgPSB7DQo+ICsgIE5ldHdvcmtDb21tb25TdXBwb3J0ZWQsDQo+ICsgIE5l dHdvcmtDb21tb25Ecml2ZXJTdGFydCwNCj4gKyAgTmV0d29ya0NvbW1vbkRyaXZlclN0b3AsDQo+ ICsgIE5FVFdPUktfQ09NTU9OX0RSSVZFUl9WRVJTSU9OLA0KPiArICBOVUxMLA0KPiArICBOVUxM DQo+ICt9Ow0KPiArDQo+ICsvKioNCj4gKyAgQ3JlYXRlIE1BQyBEZXZpY2UgUGF0aA0KPiArDQo+ ICsgIEBwYXJhbVtpbiwgb3V0XSBEZXYgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRklf REVWSUNFX1BBVEhfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gICAgICBCYXNl RGV2ICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgaW5z dGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gICAgICBOaWMgICAgICAgICAgICAgQSBwb2ludGVyIHRv IHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZh bCBFRklfT1VUX09GX1JFU09VUkNFUyAgICBUaGUgZGV2aWNlIHBhdGggY291bGQgbm90IGJlIGNy ZWF0ZWQgc3VjY2Vzc2Z1bGx5IGR1ZSB0byBhIGxhY2sgb2YgcmVzb3VyY2VzLg0KPiArICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgIE1BQyBkZXZpY2UgcGF0aCBjcmVhdGVkIHN1Y2Nl c3NmdWxseS4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtDcmVhdGVNYWNEZXZpY2VQ YXRoICgNCj4gKyAgSU4gT1VUICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICoqRGV2LA0KPiAr ICBJTiAgICAgIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgKkJhc2VEZXYsDQo+ICsgIElOICAg ICAgTklDX0RBVEEgICAgICAgICAgICAgICAgICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJ X1NUQVRVUyAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIE1BQ19BRERSX0RFVklDRV9QQVRI ICAgICAgTWFjQWRkck5vZGU7DQo+ICsgIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgKkVuZE5v ZGU7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgKkRldmljZVBhdGg7DQo+ICsgIFVJ TlQxNiAgICAgICAgICAgICAgICAgICAgVG90YWxMZW5ndGg7DQo+ICsgIFVJTlQxNiAgICAgICAg ICAgICAgICAgICAgQmFzZUxlbmd0aDsNCj4gKw0KPiArICBaZXJvTWVtICgmTWFjQWRkck5vZGUs IHNpemVvZiAoTUFDX0FERFJfREVWSUNFX1BBVEgpKTsNCj4gKyAgQ29weU1lbSAoJk1hY0FkZHJO b2RlLk1hY0FkZHJlc3MsICZOaWMtPk1hY0FkZHIsIHNpemVvZiAoRUZJX01BQ19BRERSRVNTKSk7 DQo+ICsNCj4gKyAgTWFjQWRkck5vZGUuSGVhZGVyLlR5cGUgICAgICA9IE1FU1NBR0lOR19ERVZJ Q0VfUEFUSDsNCj4gKyAgTWFjQWRkck5vZGUuSGVhZGVyLlN1YlR5cGUgICA9IE1TR19NQUNfQURE Ul9EUDsNCj4gKyAgTWFjQWRkck5vZGUuSGVhZGVyLkxlbmd0aFswXSA9IChVSU5UOClzaXplb2Yg KE1hY0FkZHJOb2RlKTsNCj4gKyAgTWFjQWRkck5vZGUuSGVhZGVyLkxlbmd0aFsxXSA9IDA7DQo+ ICsNCj4gKyAgRW5kTm9kZSA9IEJhc2VEZXY7DQo+ICsNCj4gKyAgd2hpbGUgKCFJc0RldmljZVBh dGhFbmQgKEVuZE5vZGUpKSB7DQo+ICsgICAgRW5kTm9kZSA9IE5leHREZXZpY2VQYXRoTm9kZSAo RW5kTm9kZSk7DQo+ICsgIH0NCj4gKw0KPiArICBCYXNlTGVuZ3RoICA9IChVSU5UMTYpKChVSU5U TikoRW5kTm9kZSkgLSAoVUlOVE4pKEJhc2VEZXYpKTsNCj4gKyAgVG90YWxMZW5ndGggPSAoVUlO VDE2KShCYXNlTGVuZ3RoICsgc2l6ZW9mIChNYWNBZGRyTm9kZSkgKyBzaXplb2YgKEVGSV9ERVZJ Q0VfUEFUSF9QUk9UT0NPTCkpOw0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+QWxsb2NhdGVQb29s IChFZmlCb290U2VydmljZXNEYXRhLCBUb3RhbExlbmd0aCwgKFZPSUQgKiopJkRldmljZVBhdGgp Ow0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsN Cj4gKyAgfQ0KPiArDQo+ICsgICpEZXYgPSAoRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICopRGV2 aWNlUGF0aDsNCj4gKyAgQ29weU1lbSAoRGV2aWNlUGF0aCwgKENIQVI4ICopQmFzZURldiwgQmFz ZUxlbmd0aCk7DQo+ICsgIERldmljZVBhdGggKz0gQmFzZUxlbmd0aDsNCj4gKyAgQ29weU1lbSAo RGV2aWNlUGF0aCwgKENIQVI4ICopJk1hY0FkZHJOb2RlLCBzaXplb2YgKE1hY0FkZHJOb2RlKSk7 DQo+ICsgIERldmljZVBhdGggKz0gc2l6ZW9mIChNYWNBZGRyTm9kZSk7DQo+ICsgIENvcHlNZW0g KERldmljZVBhdGgsIChDSEFSOCAqKUVuZE5vZGUsIHNpemVvZiAoRUZJX0RFVklDRV9QQVRIX1BS T1RPQ09MKSk7DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsv KioNCj4gKyAgTmV0d29yayBDb21tb24gRHJpdmVyIEJpbmRpbmcgU3VwcG9ydC4NCj4gKw0KPiAr ICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICAgICAgICBQcm90b2NvbCBpbnN0YW5jZSBw b2ludGVyLg0KPiArICBAcGFyYW1baW5dICBDb250cm9sbGVySGFuZGxlICAgICAgICBIYW5kbGUg b2YgZGV2aWNlIHRvIHRlc3QuDQo+ICsgIEBwYXJhbVtpbl0gIFJlbWFpbmluZ0RldmljZVBhdGgg ICAgIE9wdGlvbmFsIHBhcmFtZXRlciB1c2UgdG8gcGljayBhIHNwZWNpZmljIGNoaWxkDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZSB0byBzdGFydC4NCj4g Kw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICAgICBUaGlzIGRyaXZlciBz dXBwb3J0cyB0aGlzIGRldmljZS4NCj4gKyAgQHJldHZhbCBFRklfQUxSRUFEWV9TVEFSVEVEICAg ICAgICAgVGhpcyBkcml2ZXIgaXMgYWxyZWFkeSBydW5uaW5nIG9uIHRoaXMgZGV2aWNlLg0KPiAr ICBAcmV0dmFsIG90aGVyICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGRyaXZlciBkb2VzIG5v dCBzdXBwb3J0IHRoaXMgZGV2aWNlLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VG SUFQSQ0KPiArTmV0d29ya0NvbW1vblN1cHBvcnRlZCAoDQo+ICsgIElOIEVGSV9EUklWRVJfQklO RElOR19QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAg ICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgSU4gRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAg ICAqUmVtYWluaW5nRGV2aWNlUGF0aA0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAg ICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wg ICpVc2JFdGg7DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wgKA0KPiArICAg ICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICZn RWRrSUlVc2JFdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAoVk9JRCAqKikm VXNiRXRoLA0KPiArICAgICAgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwN Cj4gKyAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAg ICAgICBFRklfT1BFTl9QUk9UT0NPTF9CWV9EUklWRVINCj4gKyAgICAgICAgICAgICAgICAgICk7 DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0K PiArICB9DQo+ICsNCj4gKyAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAgICAgIENvbnRy b2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAmZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlkLA0KPiAr ICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgIENvbnRyb2xs ZXJIYW5kbGUNCj4gKyAgICAgICAgICk7DQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsN Cj4gKy8qKg0KPiArICBOZXR3b3JrIENvbW1vbiBEcml2ZXIgQmluZGluZyBTdGFydC4NCj4gKw0K PiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICAgICAgICBQcm90b2NvbCBpbnN0YW5j ZSBwb2ludGVyLg0KPiArICBAcGFyYW1baW5dICBDb250cm9sbGVySGFuZGxlICAgICAgICBIYW5k bGUgb2YgZGV2aWNlIHRvIGJpbmQgZHJpdmVyIHRvLg0KPiArICBAcGFyYW1baW5dICBSZW1haW5p bmdEZXZpY2VQYXRoICAgICBPcHRpb25hbCBwYXJhbWV0ZXIgdXNlIHRvIHBpY2sgYSBzcGVjaWZp YyBjaGlsZA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2Ug dG8gc3RhcnQuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgICAg VGhpcyBkcml2ZXIgaXMgYWRkZWQgdG8gQ29udHJvbGxlckhhbmRsZQ0KPiArICBAcmV0dmFsIEVG SV9ERVZJQ0VfRVJST1IgICAgICAgICAgICBUaGlzIGRyaXZlciBjb3VsZCBub3QgYmUgc3RhcnRl ZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3INCj4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNF UyAgICAgICAgVGhlIGRyaXZlciBjb3VsZCBub3QgaW5zdGFsbCBzdWNjZXNzZnVsbHkgZHVlIHRv IGEgbGFjayBvZiByZXNvdXJjZXMuDQo+ICsgIEByZXR2YWwgb3RoZXIgICAgICAgICAgICAgICAg ICAgICAgIFRoaXMgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBkZXZpY2UNCj4gKw0KPiAr KiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK05ldHdvcmtDb21tb25Ecml2ZXJTdGFy dCAoDQo+ICsgIElOIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElO IEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgSU4g RUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAqUmVtYWluaW5nRGV2aWNlUGF0aA0KPiArICAp DQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBF RklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICAgICpVc2JFdGhQYXRoOw0KPiArICBFREtJSV9VU0Jf RVRIRVJORVRfUFJPVE9DT0wgICpVc2JFdGg7DQo+ICsgIEVGSV9NQUNfQUREUkVTUyAgICAgICAg ICAgICAgTWFjQWRkcmVzczsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICBCdWxr RGF0YVNpemU7DQo+ICsgIE5JQ19ERVZJQ0UgICAgICAgICAgICAgICAgICAgKk5pY0RldmljZTsN Cj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAqVG1wUHhlUG9pbnRlcjsNCj4gKw0K PiArICBTdGF0dXMgPSBnQlMtPk9wZW5Qcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgICAgICBD b250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3Rv Y29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgIChWT0lEICoqKSZVc2JFdGgsDQo+ICsgICAg ICAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICAg ICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgIEVGSV9PUEVOX1BS T1RPQ09MX0JZX0RSSVZFUg0KPiArICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiAr ICBTdGF0dXMgPSBnQlMtPk9wZW5Qcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgICAgICBDb250 cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9j b2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgKFZPSUQgKiopJlVzYkV0aFBhdGgsDQo+ICsg ICAgICAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAg ICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgIEVGSV9PUEVO X1BST1RPQ09MX0JZX0RSSVZFUg0KPiArICAgICAgICAgICAgICAgICAgKTsNCj4gKw0KPiArICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4g KyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgJmdFZGtJSVVzYkV0 aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwN Cj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAgICApOw0KPiArICAg IHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBaZXJvTWVtICgmTWFjQWRkcmVzcywg c2l6ZW9mIChFRklfTUFDX0FERFJFU1MpKTsNCj4gKw0KPiArICBTdGF0dXMgPSBVc2JFdGgtPlVz YkV0aE1hY0FkZHJlc3MgKFVzYkV0aCwgJk1hY0FkZHJlc3MpOw0KPiArICBBU1NFUlRfRUZJX0VS Uk9SIChTdGF0dXMpOw0KPiArICBTdGF0dXMgPSBVc2JFdGgtPlVzYkV0aE1heEJ1bGtTaXplIChV c2JFdGgsICZCdWxrRGF0YVNpemUpOw0KPiArDQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gKyAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICBDb250cm9sbGVy SGFuZGxlLA0KPiArICAgICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQsDQo+ICsg ICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgIENvbnRy b2xsZXJIYW5kbGUNCj4gKyAgICAgICAgICAgKTsNCj4gKyAgICBnQlMtPkNsb3NlUHJvdG9jb2wg KA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAmZ0Vka0lJ VXNiRXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFu ZGxlLA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ICsgICAgICAgICAgICk7DQo+ ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIE5pY0RldmljZSA9IEFsbG9j YXRlWmVyb1Bvb2wgKHNpemVvZiAoTklDX0RFVklDRSkgKyBCdWxrRGF0YVNpemUgKyA0MDk2KTsN Cj4gKyAgaWYgKCFOaWNEZXZpY2UpIHsNCj4gKyAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiAr ICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAmZ0VmaURldmljZVBh dGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUs DQo+ICsgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgICAgICAgICAgKTsNCj4gKyAg ICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0K PiArICAgICAgICAgICAmZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICBU aGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxl DQo+ICsgICAgICAgICAgICk7DQo+ICsgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0K PiArICB9DQo+ICsNCj4gKyAgLy8gZm9yIGFsaWdubWVudCBhZGp1c3RtZW50DQo+ICsgIGlmIChn UHhlID09IE5VTEwpIHsNCj4gKyAgICBUbXBQeGVQb2ludGVyID0gTlVMTDsNCj4gKyAgICBUbXBQ eGVQb2ludGVyID0gQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChQWEVfU1dfVU5ESSkgKyAxNik7 DQo+ICsgICAgaWYgKCFUbXBQeGVQb2ludGVyKSB7DQo+ICsgICAgICBpZiAoTmljRGV2aWNlICE9 IE5VTEwpIHsNCj4gKyAgICAgICAgRnJlZVBvb2wgKE5pY0RldmljZSk7DQo+ICsgICAgICB9DQo+ ICsNCj4gKyAgICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgQ29udHJv bGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQs DQo+ICsgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAg ICAgICBDb250cm9sbGVySGFuZGxlDQo+ICsgICAgICAgICAgICAgKTsNCj4gKyAgICAgIGdCUy0+ Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAg ICAgICAgICAgICAmZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgIFRo aXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRs ZQ0KPiArICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgICAgIHJldHVybiBFRklfT1VUX09GX1JF U09VUkNFUzsNCj4gKyAgICB9IGVsc2Ugew0KPiArICAgICAgLy8gY2hlY2sgZm9yIHBhcmFncmFw aCBhbGlnbm1lbnQgaGVyZQ0KPiArICAgICAgaWYgKCgoVUlOVE4pVG1wUHhlUG9pbnRlciAmIDB4 MEYpICE9IDApIHsNCj4gKyAgICAgICAgZ1B4ZSA9IChQWEVfU1dfVU5ESSAqKShUbXBQeGVQb2lu dGVyICsgOCk7DQo+ICsgICAgICB9IGVsc2Ugew0KPiArICAgICAgICBnUHhlID0gKFBYRV9TV19V TkRJICopVG1wUHhlUG9pbnRlcjsNCj4gKyAgICAgIH0NCj4gKw0KPiArICAgICAgaWYgKCFnUHhl KSB7DQo+ICsgICAgICAgIGlmIChOaWNEZXZpY2UgIT0gTlVMTCkgew0KPiArICAgICAgICAgIEZy ZWVQb29sIChOaWNEZXZpY2UpOw0KPiArICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAgZ0JTLT5D bG9zZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsg ICAgICAgICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAg ICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgQ29udHJv bGxlckhhbmRsZQ0KPiArICAgICAgICAgICAgICAgKTsNCj4gKyAgICAgICAgZ0JTLT5DbG9zZVBy b3RvY29sICgNCj4gKyAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAg ICAgICAgICAmZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgVGhp cy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5k bGUNCj4gKyAgICAgICAgICAgICAgICk7DQo+ICsgICAgICAgIHJldHVybiBFRklfT1VUX09GX1JF U09VUkNFUzsNCj4gKyAgICAgIH0NCj4gKw0KPiArICAgICAgUHhlU3RydWN0SW5pdCAoZ1B4ZSk7 DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgTmljRGV2aWNlLT5OaWlQcm90b2NvbC5JZCAg ICA9IChVSU5UNjQpKFVJTlROKShnUHhlKTsNCj4gKyAgTmljRGV2aWNlLT5OaWlQcm90b2NvbC5J Zk51bSA9IGdQeGUtPklGY250IHwgZ1B4ZS0+SUZjbnRFeHQgPDwgODsNCj4gKw0KPiArICBVcGRh dGVOaWNOdW0gKCZOaWNEZXZpY2UtPk5pY0luZm8sIGdQeGUpOw0KPiArDQo+ICsgIE5pY0Rldmlj ZS0+TmljSW5mby5TaWduYXR1cmUgPSBOSUNfREFUQV9TSUdOQVRVUkU7DQo+ICsNCj4gKyAgTmlj RGV2aWNlLT5OaWNJbmZvLlVzYkV0aCAgICAgICAgID0gVXNiRXRoOw0KPiArICBOaWNEZXZpY2Ut Pk5pY0luZm8uTWF4U2VnbWVudFNpemUgPSAoVUlOVDE2KUJ1bGtEYXRhU2l6ZTsNCj4gKyAgTmlj RGV2aWNlLT5OaWNJbmZvLkNhYmxlRGV0ZWN0ICAgID0gMDsNCj4gKyAgTmljRGV2aWNlLT5SZWNl aXZlQnVmZmVyICAgICAgICAgID0gQUxJR05fUE9JTlRFUiAoKFZPSUQgKilOaWNEZXZpY2UsIDQw OTYpOw0KPiArDQo+ICsgIENvcHlNZW0gKChDSEFSOCAqKSYoTmljRGV2aWNlLT5OaWNJbmZvLk1h Y0FkZHIpLCAoQ0hBUjggKikmTWFjQWRkcmVzcywgc2l6ZW9mIChNYWNBZGRyZXNzKSk7DQo+ICsN Cj4gKyAgTmljRGV2aWNlLT5OaWNJbmZvLlR4QnVmZmVyQ291bnQgPSAwOw0KPiArDQo+ICsgIGlm IChOaWNEZXZpY2UtPk5paVByb3RvY29sLklmTnVtIDwgTUFYX0xBTl9JTlRFUkZBQ0UpIHsNCj4g KyAgICBnTGFuRGV2aWNlTGlzdFtOaWNEZXZpY2UtPk5paVByb3RvY29sLklmTnVtXSA9IE5pY0Rl dmljZTsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAg ICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAmZ0VmaURldmljZVBhdGhQ cm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ ICsgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgICAgICAgICAgKTsNCj4gKyAgICBn QlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiAr ICAgICAgICAgICAmZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICBUaGlz LT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ ICsgICAgICAgICAgICk7DQo+ICsNCj4gKyAgICBpZiAoVG1wUHhlUG9pbnRlciAhPSBOVUxMKSB7 DQo+ICsgICAgICBGcmVlUG9vbCAoVG1wUHhlUG9pbnRlcik7DQo+ICsgICAgfQ0KPiArDQo+ICsg ICAgaWYgKE5pY0RldmljZSAhPSBOVUxMKSB7DQo+ICsgICAgICBGcmVlUG9vbCAoTmljRGV2aWNl KTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICByZXR1cm4gRUZJX0RFVklDRV9FUlJPUjsNCj4gKyAg fQ0KPiArDQo+ICsgIFN0YXR1cyA9IENyZWF0ZU1hY0RldmljZVBhdGggKA0KPiArICAgICAgICAg ICAgICZOaWNEZXZpY2UtPkRldlBhdGgsDQo+ICsgICAgICAgICAgICAgVXNiRXRoUGF0aCwNCj4g KyAgICAgICAgICAgICAmTmljRGV2aWNlLT5OaWNJbmZvDQo+ICsgICAgICAgICAgICAgKTsNCj4g Kw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgVXBkYXRlTmljTnVtIChO VUxMLCBnUHhlKTsNCj4gKyAgICBpZiAoVG1wUHhlUG9pbnRlciAhPSBOVUxMKSB7DQo+ICsgICAg ICBGcmVlUG9vbCAoVG1wUHhlUG9pbnRlcik7DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAg TmljRGV2aWNlLT5TaWduYXR1cmUgICAgICAgICAgICAgICAgID0gVU5ESV9ERVZfU0lHTkFUVVJF Ow0KPiArICBOaWNEZXZpY2UtPk5paVByb3RvY29sLlJldmlzaW9uICAgICAgPSBFRklfTkVUV09S S19JTlRFUkZBQ0VfSURFTlRJRklFUl9QUk9UT0NPTF9SRVZJU0lPTjsNCj4gKyAgTmljRGV2aWNl LT5OaWlQcm90b2NvbC5UeXBlICAgICAgICAgID0gRWZpTmV0d29ya0ludGVyZmFjZVVuZGk7DQo+ ICsgIE5pY0RldmljZS0+TmlpUHJvdG9jb2wuTWFqb3JWZXIgICAgICA9IFBYRV9ST01JRF9NQUpP UlZFUjsNCj4gKyAgTmljRGV2aWNlLT5OaWlQcm90b2NvbC5NaW5vclZlciAgICAgID0gUFhFX1JP TUlEX01JTk9SVkVSOw0KPiArICBOaWNEZXZpY2UtPk5paVByb3RvY29sLkltYWdlU2l6ZSAgICAg PSAwOw0KPiArICBOaWNEZXZpY2UtPk5paVByb3RvY29sLkltYWdlQWRkciAgICAgPSAwOw0KPiAr ICBOaWNEZXZpY2UtPk5paVByb3RvY29sLklwdjZTdXBwb3J0ZWQgPSBUUlVFOw0KPiArDQo+ICsg IE5pY0RldmljZS0+TmlpUHJvdG9jb2wuU3RyaW5nSWRbMF0gPSAnVSc7DQo+ICsgIE5pY0Rldmlj ZS0+TmlpUHJvdG9jb2wuU3RyaW5nSWRbMV0gPSAnTic7DQo+ICsgIE5pY0RldmljZS0+TmlpUHJv dG9jb2wuU3RyaW5nSWRbMl0gPSAnRCc7DQo+ICsgIE5pY0RldmljZS0+TmlpUHJvdG9jb2wuU3Ry aW5nSWRbM10gPSAnSSc7DQo+ICsgIE5pY0RldmljZS0+RGV2aWNlSGFuZGxlICAgICAgICAgICAg PSBOVUxMOw0KPiArDQo+ICsgIE5pY0RldmljZS0+TmljSW5mby5SYXRlTGltaXRpbmdFbmFibGUg ICAgICA9IGdSYXRlTGltaXRpbmdFbmFibGU7DQo+ICsgIE5pY0RldmljZS0+TmljSW5mby5SYXRl TGltaXRpbmdDcmVkaXRDb3VudCA9IDA7DQo+ICsgIE5pY0RldmljZS0+TmljSW5mby5SYXRlTGlt aXRpbmdDcmVkaXQgICAgICA9IGdSYXRlTGltaXRpbmdDcmVkaXQ7DQo+ICsgIE5pY0RldmljZS0+ TmljSW5mby5SYXRlTGltaXRpbmdQb2xsVGltZXIgICA9IGdSYXRlTGltaXRpbmdQb2xsVGltZXI7 DQo+ICsgIE5pY0RldmljZS0+TmljSW5mby5SYXRlTGltaXRlciAgICAgICAgICAgICA9IE5VTEw7 DQo+ICsNCj4gKyAgWmVyb01lbSAoJk5pY0RldmljZS0+TmljSW5mby5SZXF1ZXN0LCBzaXplb2Yg KEVGSV9VU0JfREVWSUNFX1JFUVVFU1QpKTsNCj4gKw0KPiArICBTdGF0dXMgPSBVc2JFdGgtPlVz YkV0aEludGVycnVwdCAoVXNiRXRoLCBUUlVFLCBORVRXT1JLX0NPTU1PTl9QT0xMSU5HX0lOVEVS VkFMLCAmTmljRGV2aWNlLT5OaWNJbmZvLlJlcXVlc3QpOw0KPiArICBBU1NFUlRfRUZJX0VSUk9S IChTdGF0dXMpOw0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+SW5zdGFsbE11bHRpcGxlUHJvdG9j b2xJbnRlcmZhY2VzICgNCj4gKyAgICAgICAgICAgICAgICAgICZOaWNEZXZpY2UtPkRldmljZUhh bmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICZnRWZpTmV0d29ya0ludGVyZmFjZUlkZW50aWZp ZXJQcm90b2NvbEd1aWRfMzEsDQo+ICsgICAgICAgICAgICAgICAgICAmTmljRGV2aWNlLT5OaWlQ cm90b2NvbCwNCj4gKyAgICAgICAgICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3Vp ZCwNCj4gKyAgICAgICAgICAgICAgICAgIE5pY0RldmljZS0+RGV2UGF0aCwNCj4gKyAgICAgICAg ICAgICAgICAgIE5VTEwNCj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIGlmIChOaWNEZXZpY2UtPk5paVByb3RvY29sLklm TnVtIDwgTUFYX0xBTl9JTlRFUkZBQ0UpIHsNCj4gKyAgICAgIGdMYW5EZXZpY2VMaXN0W05pY0Rl dmljZS0+TmlpUHJvdG9jb2wuSWZOdW1dID0gTlVMTDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBn QlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiAr ICAgICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgIFRo aXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUN Cj4gKyAgICAgICAgICAgKTsNCj4gKyAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAg ICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAmZ0Vka0lJVXNiRXRoUHJvdG9j b2xHdWlkLA0KPiArICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAg ICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ICsgICAgICAgICAgICk7DQo+ICsNCj4gKyAgICBp ZiAoVG1wUHhlUG9pbnRlciAhPSBOVUxMKSB7DQo+ICsgICAgICBGcmVlUG9vbCAoVG1wUHhlUG9p bnRlcik7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgaWYgKE5pY0RldmljZS0+RGV2UGF0aCAhPSBO VUxMKSB7DQo+ICsgICAgICBGcmVlUG9vbCAoTmljRGV2aWNlLT5EZXZQYXRoKTsNCj4gKyAgICB9 DQo+ICsNCj4gKyAgICBpZiAoTmljRGV2aWNlICE9IE5VTEwpIHsNCj4gKyAgICAgIEZyZWVQb29s IChOaWNEZXZpY2UpOw0KPiArICAgIH0NCj4gKw0KPiArICAgIHJldHVybiBFRklfREVWSUNFX0VS Uk9SOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wgKA0KPiAr ICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAg ICZnRWRrSUlVc2JFdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAoVk9JRCAq KikmVXNiRXRoLA0KPiArICAgICAgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRs ZSwNCj4gKyAgICAgICAgICAgICAgICAgIE5pY0RldmljZS0+RGV2aWNlSGFuZGxlLA0KPiArICAg ICAgICAgICAgICAgICAgRUZJX09QRU5fUFJPVE9DT0xfQllfQ0hJTERfQ09OVFJPTExFUg0KPiAr ICAgICAgICAgICAgICAgICAgKTsNCj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiAr DQo+ICsvKioNCj4gKyAgTmV0d29yayBDb21tb24gRHJpdmVyIEJpbmRpbmcgU3RvcC4NCj4gKw0K PiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICAgICAgUHJvdG9jb2wgaW5zdGFuY2Ug cG9pbnRlci4NCj4gKyAgQHBhcmFtW2luXSAgQ29udHJvbGxlckhhbmRsZSAgICAgIEhhbmRsZSBv ZiBkZXZpY2UgdG8gc3RvcCBkcml2ZXIgb24NCj4gKyAgQHBhcmFtW2luXSAgTnVtYmVyT2ZDaGls ZHJlbiAgICAgIE51bWJlciBvZiBIYW5kbGVzIGluIENoaWxkSGFuZGxlQnVmZmVyLiBJZiBudW1i ZXIgb2YNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuIGlz IHplcm8gc3RvcCB0aGUgZW50aXJlIGJ1cyBkcml2ZXIuDQo+ICsgIEBwYXJhbVtpbl0gIENoaWxk SGFuZGxlQnVmZmVyICAgICBMaXN0IG9mIENoaWxkIEhhbmRsZXMgdG8gU3RvcC4NCj4gKw0KPiAr ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICAgVGhpcyBkcml2ZXIgaXMgcmVtb3Zl ZCBDb250cm9sbGVySGFuZGxlDQo+ICsgIEByZXR2YWwgb3RoZXIgICAgICAgICAgICAgICAgICAg ICBUaGlzIGRyaXZlciB3YXMgbm90IHJlbW92ZWQgZnJvbSB0aGlzIGRldmljZQ0KPiArDQo+ICsq Ki8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArTmV0d29ya0NvbW1vbkRyaXZlclN0b3Ag KA0KPiArICBJTiAgRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4g IEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgSU4g IFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyT2ZDaGlsZHJlbiwNCj4gKyAgSU4g IEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgKkNoaWxkSGFuZGxlQnVmZmVyDQo+ICsgICkN Cj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0 YXR1czsNCj4gKyAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFs bENoaWxkcmVuU3RvcHBlZDsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEluZGV4Ow0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICAgICAg ICAgICAgICAgKlVzYkV0aDsNCj4gKyAgTklDX0RFVklDRSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICpOaWNEZXZpY2U7DQo+ICsgIEVGSV9ORVRXT1JLX0lOVEVSRkFDRV9JREVOVElG SUVSX1BST1RPQ09MICAqTmlpUHJvdG9jb2w7DQo+ICsNCj4gKyAgaWYgKE51bWJlck9mQ2hpbGRy ZW4gPT0gMCkgew0KPiArICAgIFN0YXR1cyA9IGdCUy0+T3BlblByb3RvY29sICgNCj4gKyAgICAg ICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICAg JmdFZmlOZXR3b3JrSW50ZXJmYWNlSWRlbnRpZmllclByb3RvY29sR3VpZF8zMSwNCj4gKyAgICAg ICAgICAgICAgICAgICAgKFZPSUQgKiopJk5paVByb3RvY29sLA0KPiArICAgICAgICAgICAgICAg ICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgICBD b250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgICBFRklfT1BFTl9QUk9UT0NP TF9HRVRfUFJPVE9DT0wNCj4gKyAgICAgICAgICAgICAgICAgICAgKTsNCj4gKw0KPiArICAgIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ ICsgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAmZ0VmaURl dmljZVBhdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGlu Z0hhbmRsZSwNCj4gKyAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ICsgICAgICAgICAg ICAgKTsNCj4gKyAgICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgQ29u dHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAmZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlk LA0KPiArICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAg ICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAgICAgICk7DQo+ICsgICAgICByZXR1 cm4gRUZJX1NVQ0NFU1M7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgTmljRGV2aWNlID0gVU5ESV9E RVZfRlJPTV9USElTIChOaWlQcm90b2NvbCk7DQo+ICsgICAgU3RhdHVzICAgID0gZ0JTLT5Vbmlu c3RhbGxNdWx0aXBsZVByb3RvY29sSW50ZXJmYWNlcyAoDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICZnRWZpTmV0 d29ya0ludGVyZmFjZUlkZW50aWZpZXJQcm90b2NvbEd1aWRfMzEsDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICZOaWNEZXZpY2UtPk5paVByb3RvY29sLA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgIE5pY0RldmljZS0+RGV2UGF0aCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgTlVMTA0K PiArICAgICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4gKyAgICAgIHJldHVybiBTdGF0dXM7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgRnJl ZVBvb2wgKE5pY0RldmljZS0+RGV2UGF0aCk7DQo+ICsgICAgRnJlZVBvb2wgKE5pY0RldmljZSk7 DQo+ICsNCj4gKyAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICBDb250cm9s bGVySGFuZGxlLA0KPiArICAgICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQsDQo+ ICsgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgIENv bnRyb2xsZXJIYW5kbGUNCj4gKyAgICAgICAgICAgKTsNCj4gKyAgICBnQlMtPkNsb3NlUHJvdG9j b2wgKA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAmZ0Vk a0lJVXNiRXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5n SGFuZGxlLA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ICsgICAgICAgICAgICk7 DQo+ICsgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArICB9DQo+ICsNCj4gKyAgQWxsQ2hpbGRy ZW5TdG9wcGVkID0gVFJVRTsNCj4gKw0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBOdW1i ZXJPZkNoaWxkcmVuOyBJbmRleCsrKSB7DQo+ICsgICAgU3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9j b2wgKA0KPiArICAgICAgICAgICAgICAgICAgICBDaGlsZEhhbmRsZUJ1ZmZlcltJbmRleF0sDQo+ ICsgICAgICAgICAgICAgICAgICAgICZnRWZpTmV0d29ya0ludGVyZmFjZUlkZW50aWZpZXJQcm90 b2NvbEd1aWRfMzEsDQo+ICsgICAgICAgICAgICAgICAgICAgIChWT0lEICoqKSZOaWlQcm90b2Nv bCwNCj4gKyAgICAgICAgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4g KyAgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAg ICAgICAgRUZJX09QRU5fUFJPVE9DT0xfR0VUX1BST1RPQ09MDQo+ICsgICAgICAgICAgICAgICAg ICAgICk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgQWxsQ2hp bGRyZW5TdG9wcGVkID0gRkFMU0U7DQo+ICsgICAgICBjb250aW51ZTsNCj4gKyAgICB9DQo+ICsN Cj4gKyAgICBOaWNEZXZpY2UgPSBVTkRJX0RFVl9GUk9NX1RISVMgKE5paVByb3RvY29sKTsNCj4g Kw0KPiArICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAgICAgIENvbnRyb2xsZXJI YW5kbGUsDQo+ICsgICAgICAgICAgICZnRWRrSUlVc2JFdGhQcm90b2NvbEd1aWQsDQo+ICsgICAg ICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgIENoaWxkSGFu ZGxlQnVmZmVyW0luZGV4XQ0KPiArICAgICAgICAgICApOw0KPiArDQo+ICsgICAgU3RhdHVzID0g Z0JTLT5Vbmluc3RhbGxNdWx0aXBsZVByb3RvY29sSW50ZXJmYWNlcyAoDQo+ICsgICAgICAgICAg ICAgICAgICAgIENoaWxkSGFuZGxlQnVmZmVyW0luZGV4XSwNCj4gKyAgICAgICAgICAgICAgICAg ICAgJmdFZmlOZXR3b3JrSW50ZXJmYWNlSWRlbnRpZmllclByb3RvY29sR3VpZF8zMSwNCj4gKyAg ICAgICAgICAgICAgICAgICAgJk5pY0RldmljZS0+TmlpUHJvdG9jb2wsDQo+ICsgICAgICAgICAg ICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAg ICAgICAgTmljRGV2aWNlLT5EZXZQYXRoLA0KPiArICAgICAgICAgICAgICAgICAgICBOVUxMDQo+ ICsgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KPiArICAgICAgU3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAg ICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgJmdF ZGtJSVVzYkV0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAoVk9JRCAq KikmVXNiRXRoLA0KPiArICAgICAgICAgICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdI YW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgQ2hpbGRIYW5kbGVCdWZmZXJbSW5kZXhd LA0KPiArICAgICAgICAgICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09MX0JZX0NISUxEX0NP TlRST0xMRVINCj4gKyAgICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgIH0gZWxzZSB7DQo+ ICsgICAgICBGcmVlUG9vbCAoTmljRGV2aWNlLT5EZXZQYXRoKTsNCj4gKyAgICAgIEZyZWVQb29s IChOaWNEZXZpY2UpOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIGlmICghQWxsQ2hpbGRy ZW5TdG9wcGVkKSB7DQo+ICsgICAgcmV0dXJuIEVGSV9ERVZJQ0VfRVJST1I7DQo+ICsgIH0NCj4g Kw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgRW50cnlwb2lu dCBvZiBOZXR3b3JrIENvbW1vbiBEcml2ZXIuDQo+ICsNCj4gKyAgVGhpcyBmdW5jdGlvbiBpcyB0 aGUgZW50cnlwb2ludCBvZiBOZXR3b3JrIENvbW1vbiBEcml2ZXIuIEl0IGluc3RhbGxzIERyaXZl ciBCaW5kaW5nDQo+ICsgIFByb3RvY29scyB0b2dldGhlciB3aXRoIENvbXBvbmVudCBOYW1lIFBy b3RvY29scy4NCj4gKw0KPiArICBAcGFyYW1baW5dICBJbWFnZUhhbmRsZSAgICAgICBUaGUgZmly bXdhcmUgYWxsb2NhdGVkIGhhbmRsZSBmb3IgdGhlIEVGSSBpbWFnZS4NCj4gKyAgQHBhcmFtW2lu XSAgU3lzdGVtVGFibGUgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRkkgU3lzdGVtIFRhYmxlLg0K PiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBlbnRyeSBwb2ludCBp cyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiAr RUZJQVBJDQo+ICtOZXR3b3JrQ29tbW9uRW50cnkgKA0KPiArICBJTiBFRklfSEFORExFICAgICAg ICBJbWFnZUhhbmRsZSwNCj4gKyAgSU4gRUZJX1NZU1RFTV9UQUJMRSAgKlN5c3RlbVRhYmxlDQo+ ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiArDQo+ICsgIGdOZXR3b3Jr Q29tbW9uRHJpdmVyQmluZGluZy5Ecml2ZXJCaW5kaW5nSGFuZGxlID0gSW1hZ2VIYW5kbGU7DQo+ ICsgIGdOZXR3b3JrQ29tbW9uRHJpdmVyQmluZGluZy5JbWFnZUhhbmRsZSAgICAgICAgID0gSW1h Z2VIYW5kbGU7DQo+ICsgIGdSYXRlTGltaXRpbmdFbmFibGUgICAgICAgICAgICAgICAgICAgICAg ICAgICAgID0gUGNkR2V0Qm9vbCAoRW5hYmxlUmF0ZUxpbWl0aW5nKTsNCj4gKyAgZ1JhdGVMaW1p dGluZ0NyZWRpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBQY2RHZXQzMiAoUmF0ZUxp bWl0aW5nQ3JlZGl0KTsNCj4gKyAgZ1JhdGVMaW1pdGluZ1BvbGxUaW1lciAgICAgICAgICAgICAg ICAgICAgICAgICAgPSBQY2RHZXQzMiAoUmF0ZUxpbWl0aW5nRmFjdG9yKTsNCj4gKw0KPiArICBT dGF0dXMgPSBnQlMtPkluc3RhbGxNdWx0aXBsZVByb3RvY29sSW50ZXJmYWNlcyAoDQo+ICsgICAg ICAgICAgICAgICAgICAmZ05ldHdvcmtDb21tb25Ecml2ZXJCaW5kaW5nLkRyaXZlckJpbmRpbmdI YW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAmZ0VmaURyaXZlckJpbmRpbmdQcm90b2NvbEd1 aWQsDQo+ICsgICAgICAgICAgICAgICAgICAmZ05ldHdvcmtDb21tb25Ecml2ZXJCaW5kaW5nLA0K PiArICAgICAgICAgICAgICAgICAgJmdFZmlDb21wb25lbnROYW1lMlByb3RvY29sR3VpZCwNCj4g KyAgICAgICAgICAgICAgICAgICZnTmV0d29ya0NvbW1vbkNvbXBvbmVudE5hbWUyLA0KPiArICAg ICAgICAgICAgICAgICAgTlVMTA0KPiArICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgcmV0dXJu IFN0YXR1czsNCj4gK30NCj4gZGlmZiAtLWdpdCBhL1VzYk5ldHdvcmtQa2cvTmV0d29ya0NvbW1v bi9QeGVGdW5jdGlvbi5jIGIvVXNiTmV0d29ya1BrZy9OZXR3b3JrQ29tbW9uL1B4ZUZ1bmN0aW9u LmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi42ODdjYWJj YTRjZTMNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9Vc2JOZXR3b3JrUGtnL05ldHdvcmtDb21t b24vUHhlRnVuY3Rpb24uYw0KPiBAQCAtMCwwICsxLDE4MDMgQEANCj4gKy8qKiBAZmlsZQ0KPiAr ICBUaGlzIGZpbGUgY29udGFpbnMgY29kZSBmb3IgVU5ESSBjb21tYW5kIGJhc2VkIG9uIFVFRkkg c3BlY2lmaWNhdGlvbi4NCj4gKw0KPiArICBDb3B5cmlnaHQgKGMpIDIwMjMsIEFtZXJpY2FuIE1l Z2F0cmVuZHMgSW50ZXJuYXRpb25hbCBMTEMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiAr ICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiArKiovDQo+ ICsNCj4gKyNpbmNsdWRlICJEcml2ZXJCaW5kaW5nLmgiDQo+ICsNCj4gKy8vIEFQSSB0YWJsZSwg ZGVmaW5lZCBpbiBVRUZJIHNwZWNpZmljYXRpb24NCj4gK0FQSV9GVU5DICBnVW5kaUFwaVRhYmxl W10gPSB7DQo+ICsgIFVuZGlHZXRTdGF0ZSwNCj4gKyAgVW5kaVN0YXJ0LA0KPiArICBVbmRpU3Rv cCwNCj4gKyAgVW5kaUdldEluaXRJbmZvLA0KPiArICBVbmRpR2V0Q29uZmlnSW5mbywNCj4gKyAg VW5kaUluaXRpYWxpemUsDQo+ICsgIFVuZGlSZXNldCwNCj4gKyAgVW5kaVNodXRkb3duLA0KPiAr ICBVbmRpSW50ZXJydXB0RW5hYmxlLA0KPiArICBVbmRpUmVjZWl2ZUZpbHRlciwNCj4gKyAgVW5k aVN0YXRpb25BZGRyZXNzLA0KPiArICBVbmRpU3RhdGlzdGljcywNCj4gKyAgVW5kaU1jYXN0SXAy TWFjLA0KPiArICBVbmRpTnZEYXRhLA0KPiArICBVbmRpR2V0U3RhdHVzLA0KPiArICBVbmRpRmls bEhlYWRlciwNCj4gKyAgVW5kaVRyYW5zbWl0LA0KPiArICBVbmRpUmVjZWl2ZQ0KPiArfTsNCj4g Kw0KPiArLyoqDQo+ICsgICBDYWxsYmFjayBmdW5jdGlvbiBmb3IgZW5hYmxlIFJhdGUgTGltaXRl cg0KPiArDQo+ICsgICBAcGFyYW1baW5dIEV2ZW50ICAgICAgICAgICBFdmVudCB3aG9zZSBub3Rp ZmljYXRpb24gZnVuY3Rpb24gaXMgYmVpbmcgaW52b2tlZA0KPiArICAgQHBhcmFtW2luXSBDb250 ZXh0ICAgICAgICAgUG9pbnRlciB0byB0aGUgbm90aWZpY2F0aW9uIGZ1bmN0aW9uJ3MgY29udGV4 dA0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK0VGSUFQSQ0KPiArVW5kaVJhdGVMaW1pdGVyQ2Fs bGJhY2sgKA0KPiArICBJTiAgRUZJX0VWRU5UICBFdmVudCwNCj4gKyAgSU4gIFZPSUQgICAgICAg KkNvbnRleHQNCj4gKyAgKQ0KPiArew0KPiArICBOSUNfREFUQSAgKk5pYyA9IENvbnRleHQ7DQo+ ICsNCj4gKyAgaWYgKE5pYy0+UmF0ZUxpbWl0aW5nQ3JlZGl0Q291bnQgPCBOaWMtPlJhdGVMaW1p dGluZ0NyZWRpdCkgew0KPiArICAgIE5pYy0+UmF0ZUxpbWl0aW5nQ3JlZGl0Q291bnQrKzsNCj4g KyAgfQ0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gZGV0 ZXJtaW5lIHRoZSBvcGVyYXRpb25hbCBzdGF0ZSBvZiB0aGUgVU5ESS4NCj4gKw0KPiArICBAcGFy YW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0K PiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2Ug Y29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK1VuZGlHZXRTdGF0ZSAo DQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsg ICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiArDQo+ICsgIGlmICgoQ2RiLT5P cENvZGUgIT0gUFhFX09QQ09ERV9HRVRfU1RBVEUpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0Q29k ZSAhPSBQWEVfU1RBVENPREVfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRGbGFn cyAhPSBQWEVfU1RBVEZMQUdTX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5JRm51bSA+ PSAoZ1B4ZS0+SUZjbnQgfCBnUHhlLT5JRmNudEV4dCA8PCA4KSkgfHwNCj4gKyAgICAgIChDZGIt PkNQQnNpemUgIT0gUFhFX0NQQlNJWkVfTk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5DUEJh ZGRyICE9IFBYRV9DUEJBRERSX05PVF9VU0VEKSB8fA0KPiArICAgICAgKENkYi0+REJzaXplICE9 IFBYRV9EQlNJWkVfTk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5EQmFkZHIgIT0gUFhFX0RC QUREUl9OT1RfVVNFRCkgfHwNCj4gKyAgICAgIChDZGItPk9wRmxhZ3MgIT0gUFhFX09QRkxBR1Nf Tk9UX1VTRUQpKQ0KPiArICB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdT X0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0lO VkFMSURfQ0RCOw0KPiArICAgIHJldHVybjsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBDZGItPlN0 YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9DT01QTEVURTsNCj4gKyAgICBDZGItPlN0 YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0KPiArICB9DQo+ICsNCj4gKyAgQ2RiLT5T dGF0RmxhZ3MgPSBDZGItPlN0YXRGbGFncyB8IE5pYy0+U3RhdGU7DQo+ICsNCj4gKyAgaWYgKE5p Yy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlHZXRTdGF0ZSAhPSBOVUxMKSB7DQo+ICsg ICAgU3RhdHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaUdldFN0YXRlIChD ZGIsIE5pYyk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgQ2Ri LT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIH0NCj4g KyAgfQ0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gY2hh bmdlIHRoZSBVTkRJIG9wZXJhdGlvbmFsIHN0YXRlIGZyb20gc3RvcHBlZCB0byBzdGFydGVkLg0K PiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2Ny aXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3 b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyoqLw0KPiArVk9JRA0KPiAr VW5kaVN0YXJ0ICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEg ICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBQWEVfQ1BCX1NUQVJUXzMxICAqQ3BiOw0KPiArICBF RklfU1RBVFVTICAgICAgICBTdGF0dXM7DQo+ICsgIEJPT0xFQU4gICAgICAgICAgIEV2ZW50RXJy b3I7DQo+ICsNCj4gKyAgaWYgKChDZGItPk9wQ29kZSAhPSBQWEVfT1BDT0RFX1NUQVJUKSB8fA0K PiArICAgICAgKENkYi0+U3RhdENvZGUgIT0gUFhFX1NUQVRDT0RFX0lOSVRJQUxJWkUpIHx8DQo+ ICsgICAgICAoQ2RiLT5TdGF0RmxhZ3MgIT0gUFhFX1NUQVRGTEFHU19JTklUSUFMSVpFKSB8fA0K PiArICAgICAgKENkYi0+SUZudW0gPj0gKGdQeGUtPklGY250IHwgZ1B4ZS0+SUZjbnRFeHQgPDwg OCkpIHx8DQo+ICsgICAgICAoQ2RiLT5DUEJzaXplICE9IHNpemVvZiAoUFhFX0NQQl9TVEFSVF8z MSkpIHx8DQo+ICsgICAgICAoQ2RiLT5EQnNpemUgIT0gUFhFX0RCU0laRV9OT1RfVVNFRCkgfHwN Cj4gKyAgICAgIChDZGItPkRCYWRkciAhPSBQWEVfREJBRERSX05PVF9VU0VEKSB8fA0KPiArICAg ICAgKENkYi0+T3BGbGFncyAhPSBQWEVfT1BGTEFHU19OT1RfVVNFRCkpDQo+ICsgIHsNCj4gKyAg ICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAg Q2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ICsgICAgcmV0dXJu Ow0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+U3RhdGUgIT0gUFhFX1NUQVRGTEFHU19HRVRf U1RBVEVfU1RPUFBFRCkgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19D T01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9BTFJF QURZX1NUQVJURUQ7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgQ3BiID0gKFBY RV9DUEJfU1RBUlRfMzEgKikoVUlOVE4pQ2RiLT5DUEJhZGRyOw0KPiArDQo+ICsgIE5pYy0+UHhl U3RhcnQuRGVsYXkgICAgID0gQ3BiLT5EZWxheTsNCj4gKyAgTmljLT5QeGVTdGFydC5WaXJ0MlBo eXMgPSBDcGItPlZpcnQyUGh5czsNCj4gKyAgTmljLT5QeGVTdGFydC5CbG9jayAgICAgPSBDcGIt PkJsb2NrOw0KPiArICBOaWMtPlB4ZVN0YXJ0Lk1hcF9NZW0gICA9IDA7DQo+ICsgIE5pYy0+UHhl U3RhcnQuVW5NYXBfTWVtID0gMDsNCj4gKyAgTmljLT5QeGVTdGFydC5TeW5jX01lbSAgPSBDcGIt PlN5bmNfTWVtOw0KPiArICBOaWMtPlB4ZVN0YXJ0LlVuaXF1ZV9JRCA9IENwYi0+VW5pcXVlX0lE Ow0KPiArICBFdmVudEVycm9yICAgICAgICAgICAgICA9IEZBTFNFOw0KPiArICBTdGF0dXMgICAg ICAgICAgICAgICAgICA9IEVGSV9TVUNDRVNTOw0KPiArICBpZiAoTmljLT5SYXRlTGltaXRpbmdF bmFibGUgPT0gVFJVRSkgew0KPiArICAgIFN0YXR1cyA9IGdCUy0+Q3JlYXRlRXZlbnQgKA0KPiAr ICAgICAgICAgICAgICAgICAgICBFVlRfVElNRVIgfCBFVlRfTk9USUZZX1NJR05BTCwNCj4gKyAg ICAgICAgICAgICAgICAgICAgVFBMX05PVElGWSwNCj4gKyAgICAgICAgICAgICAgICAgICAgVW5k aVJhdGVMaW1pdGVyQ2FsbGJhY2ssDQo+ICsgICAgICAgICAgICAgICAgICAgIE5pYywNCj4gKyAg ICAgICAgICAgICAgICAgICAgJk5pYy0+UmF0ZUxpbWl0ZXINCj4gKyAgICAgICAgICAgICAgICAg ICAgKTsNCj4gKyAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgU3RhdHVz ID0gZ0JTLT5TZXRUaW1lciAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgTmljLT5SYXRlTGlt aXRlciwNCj4gKyAgICAgICAgICAgICAgICAgICAgICBUaW1lclBlcmlvZGljLA0KPiArICAgICAg ICAgICAgICAgICAgICAgIE5pYy0+UmF0ZUxpbWl0aW5nUG9sbFRpbWVyICogMTAwMDANCj4gKyAg ICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KPiArICAgICAgICBFdmVudEVycm9yID0gVFJVRTsNCj4gKyAgICAgIH0NCj4gKyAgICB9DQo+ ICsgIH0NCj4gKw0KPiArICBpZiAoKE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlT dGFydCAhPSBOVUxMKSAmJiAoRXZlbnRFcnJvciA9PSBGQUxTRSkpIHsNCj4gKyAgICBTdGF0dXMg PSBOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpU3RhcnQgKENkYiwgTmljKTsNCj4g KyAgfQ0KPiArDQo+ICsgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgLy8gSW5p dGlhbCB0aGUgc3RhdGUgZm9yIFVOREkgc3RhcnQuDQo+ICsgICAgTmljLT5TdGF0ZSAgICAgPSBQ WEVfU1RBVEZMQUdTX0dFVF9TVEFURV9TVEFSVEVEOw0KPiArICAgIENkYi0+U3RhdEZsYWdzID0g UFhFX1NUQVRGTEFHU19DT01NQU5EX0NPTVBMRVRFOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0g UFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgaWYgKE5pYy0+UmF0 ZUxpbWl0aW5nRW5hYmxlID09IFRSVUUpIHsNCj4gKyAgICAgIGlmICghRXZlbnRFcnJvcikgew0K PiArICAgICAgICBnQlMtPlNldFRpbWVyICgmTmljLT5SYXRlTGltaXRlciwgVGltZXJDYW5jZWws IDApOw0KPiArICAgICAgfQ0KPiArDQo+ICsgICAgICBpZiAoTmljLT5SYXRlTGltaXRlcikgew0K PiArICAgICAgICBnQlMtPkNsb3NlRXZlbnQgKCZOaWMtPlJhdGVMaW1pdGVyKTsNCj4gKyAgICAg ICAgTmljLT5SYXRlTGltaXRlciA9IDA7DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArDQo+ICsg ICAgLy8gSW5pdGlhbCB0aGUgc3RhdGUgd2hlbiBVTkRJIHN0YXJ0IGlzIGZhaWwNCj4gKyAgICBD ZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2Ri LT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfREVWSUNFX0ZBSUxVUkU7DQo+ICsgIH0NCj4gK30N Cj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIGNoYW5nZSB0aGUgVU5E SSBvcGVyYXRpb25hbCBzdGF0ZSBmcm9tIHN0YXJ0ZWQgdG8gc3RvcHBlZC4NCj4gKw0KPiArICBA cGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2Nr Lg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZh Y2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK1VuZGlTdG9wICgN Cj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAg KQ0KPiArew0KPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ICsNCj4gKyAgaWYgKChDZGItPk9w Q29kZSAhPSBQWEVfT1BDT0RFX1NUT1ApIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0Q29kZSAhPSBQ WEVfU1RBVENPREVfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRGbGFncyAhPSBQ WEVfU1RBVEZMQUdTX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5JRm51bSA+PSAoZ1B4 ZS0+SUZjbnQgfCBnUHhlLT5JRmNudEV4dCA8PCA4KSkgfHwNCj4gKyAgICAgIChDZGItPkNQQnNp emUgIT0gUFhFX0NQQlNJWkVfTk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5DUEJhZGRyICE9 IFBYRV9DUEJBRERSX05PVF9VU0VEKSB8fA0KPiArICAgICAgKENkYi0+REJzaXplICE9IFBYRV9E QlNJWkVfTk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5EQmFkZHIgIT0gUFhFX0RCQUREUl9O T1RfVVNFRCkgfHwNCj4gKyAgICAgIChDZGItPk9wRmxhZ3MgIT0gUFhFX09QRkxBR1NfTk9UX1VT RUQpKQ0KPiArICB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1B TkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURf Q0RCOw0KPiArICAgIHJldHVybjsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBDZGItPlN0YXRGbGFn cyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9DT01QTEVURTsNCj4gKyAgICBDZGItPlN0YXRDb2Rl ICA9IFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+U3Rh dGUgPT0gUFhFX1NUQVRGTEFHU19HRVRfU1RBVEVfU1RPUFBFRCkgew0KPiArICAgIENkYi0+U3Rh dEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRD b2RlICA9IFBYRV9TVEFUQ09ERV9OT1RfU1RBUlRFRDsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0N Cj4gKw0KPiArICBpZiAoTmljLT5TdGF0ZSA9PSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9JTklU SUFMSVpFRCkgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5E X0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9OT1RfU0hVVERP V047DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgTmljLT5QeGVTdGFydC5EZWxh eSAgICAgPSAwOw0KPiArICBOaWMtPlB4ZVN0YXJ0LlZpcnQyUGh5cyA9IDA7DQo+ICsgIE5pYy0+ UHhlU3RhcnQuQmxvY2sgICAgID0gMDsNCj4gKyAgTmljLT5QeGVTdGFydC5NYXBfTWVtICAgPSAw Ow0KPiArICBOaWMtPlB4ZVN0YXJ0LlVuTWFwX01lbSA9IDA7DQo+ICsgIE5pYy0+UHhlU3RhcnQu U3luY19NZW0gID0gMDsNCj4gKyAgTmljLT5TdGF0ZSAgICAgICAgICAgICAgPSBQWEVfU1RBVEZM QUdTX0dFVF9TVEFURV9TVE9QUEVEOw0KPiArDQo+ICsgIGlmIChOaWMtPlJhdGVMaW1pdGluZ0Vu YWJsZSA9PSBUUlVFKSB7DQo+ICsgICAgZ0JTLT5TZXRUaW1lciAoJk5pYy0+UmF0ZUxpbWl0ZXIs IFRpbWVyQ2FuY2VsLCAwKTsNCj4gKyAgICBnQlMtPkNsb3NlRXZlbnQgKCZOaWMtPlJhdGVMaW1p dGVyKTsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JF dGhVbmRpU3RvcCAhPSBOVUxMKSB7DQo+ICsgICAgU3RhdHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0 aFVuZGkuVXNiRXRoVW5kaVN0b3AgKENkYiwgTmljKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQo+ICsgICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFO RF9GQUlMRUQ7DQo+ICsgICAgfQ0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlz IGNvbW1hbmQgaXMgdXNlZCB0byByZXRyaWV2ZSBpbml0aWFsaXphdGlvbiBpbmZvcm1hdGlvbiB0 aGF0IGlzDQo+ICsgIG5lZWRlZCBieSBkcml2ZXJzIGFuZCBhcHBsaWNhdGlvbnMgdG8gaW5pdGlh bGl6ZWQgVU5ESS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUg Y29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRl ciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsqKi8N Cj4gK1ZPSUQNCj4gK1VuZGlHZXRJbml0SW5mbyAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwN Cj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgUFhFX0RCX0dFVF9J TklUX0lORk8gICpEYjsNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgIFN0YXR1czsNCj4gKw0K PiArICBpZiAoKENkYi0+T3BDb2RlICE9IFBYRV9PUENPREVfR0VUX0lOSVRfSU5GTykgfHwNCj4g KyAgICAgIChDZGItPlN0YXRDb2RlICE9IFBYRV9TVEFUQ09ERV9JTklUSUFMSVpFKSB8fA0KPiAr ICAgICAgKENkYi0+U3RhdEZsYWdzICE9IFBYRV9TVEFURkxBR1NfSU5JVElBTElaRSkgfHwNCj4g KyAgICAgIChDZGItPklGbnVtID49IChnUHhlLT5JRmNudCB8IGdQeGUtPklGY250RXh0IDw8IDgp KSB8fA0KPiArICAgICAgKENkYi0+Q1BCc2l6ZSAhPSBQWEVfQ1BCU0laRV9OT1RfVVNFRCkgfHwN Cj4gKyAgICAgIChDZGItPkNQQmFkZHIgIT0gUFhFX0NQQkFERFJfTk9UX1VTRUQpIHx8DQo+ICsg ICAgICAoQ2RiLT5EQnNpemUgIT0gc2l6ZW9mIChQWEVfREJfR0VUX0lOSVRfSU5GTykpIHx8DQo+ ICsgICAgICAoQ2RiLT5PcEZsYWdzICE9IFBYRV9PUEZMQUdTX05PVF9VU0VEKSkNCj4gKyAgew0K PiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4g KyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICBy ZXR1cm47DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZM QUdTX0NPTU1BTkRfQ09NUExFVEU7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENP REVfU1VDQ0VTUzsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChOaWMtPlN0YXRlID09IFBYRV9TVEFU RkxBR1NfR0VUX1NUQVRFX1NUT1BQRUQpIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9T VEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RB VENPREVfTk9UX1NUQVJURUQ7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgRGIg PSAoUFhFX0RCX0dFVF9JTklUX0lORk8gKikoVUlOVE4pQ2RiLT5EQmFkZHI7DQo+ICsNCj4gKyAg RGItPk1lbW9yeVJlcXVpcmVkICAgICAgICAgPSBNRU1PUllfUkVRVUlSRTsNCj4gKyAgRGItPkZy YW1lRGF0YUxlbiAgICAgICAgICAgPSBQWEVfTUFYX1RYUlhfVU5JVF9FVEhFUjsNCj4gKyAgRGIt PkxpbmtTcGVlZHNbMF0gICAgICAgICAgPSAxMDsNCj4gKyAgRGItPkxpbmtTcGVlZHNbMV0gICAg ICAgICAgPSAxMDA7DQo+ICsgIERiLT5MaW5rU3BlZWRzWzJdICAgICAgICAgID0gMTAwMDsNCj4g KyAgRGItPkxpbmtTcGVlZHNbM10gICAgICAgICAgPSAwOw0KPiArICBEYi0+TWVkaWFIZWFkZXJM ZW4gICAgICAgICA9IFBYRV9NQUNfSEVBREVSX0xFTl9FVEhFUjsNCj4gKyAgRGItPkhXYWRkckxl biAgICAgICAgICAgICAgPSBQWEVfSFdBRERSX0xFTl9FVEhFUjsNCj4gKyAgRGItPk1DYXN0Rmls dGVyQ250ICAgICAgICAgPSBNQVhfTUNBU1RfQUREUkVTU19DTlQ7DQo+ICsgIERiLT5UeEJ1ZkNu dCAgICAgICAgICAgICAgID0gTmljLT5QeGVJbml0LlR4QnVmQ250Ow0KPiArICBEYi0+VHhCdWZT aXplICAgICAgICAgICAgICA9IE5pYy0+UHhlSW5pdC5UeEJ1ZlNpemU7DQo+ICsgIERiLT5SeEJ1 ZkNudCAgICAgICAgICAgICAgID0gTmljLT5QeGVJbml0LlJ4QnVmQ250Ow0KPiArICBEYi0+UnhC dWZTaXplICAgICAgICAgICAgICA9IE5pYy0+UHhlSW5pdC5SeEJ1ZlNpemU7DQo+ICsgIERiLT5J RnR5cGUgICAgICAgICAgICAgICAgID0gUFhFX0lGVFlQRV9FVEhFUk5FVDsNCj4gKyAgRGItPlN1 cHBvcnRlZER1cGxleE1vZGVzICAgPSBQWEVfRFVQTEVYX0RFRkFVTFQ7DQo+ICsgIERiLT5TdXBw b3J0ZWRMb29wQmFja01vZGVzID0gTE9PUEJBQ0tfTk9STUFMOw0KPiArDQo+ICsgIENkYi0+U3Rh dEZsYWdzIHw9IChQWEVfU1RBVEZMQUdTX0NBQkxFX0RFVEVDVF9TVVBQT1JURUQgfA0KPiArICAg ICAgICAgICAgICAgICAgICAgUFhFX1NUQVRGTEFHU19HRVRfU1RBVFVTX05PX01FRElBX1NVUFBP UlRFRCk7DQo+ICsNCj4gKyAgaWYgKE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlH ZXRJbml0SW5mbyAhPSBOVUxMKSB7DQo+ICsgICAgU3RhdHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0 aFVuZGkuVXNiRXRoVW5kaUdldEluaXRJbmZvIChDZGIsIE5pYyk7DQo+ICsgICAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdT X0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArfQ0KPiArDQo+ICsvKioNCj4g KyAgVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gcmV0cmlldmUgY29uZmlndXJhdGlvbiBpbmZvcm1h dGlvbiBhYm91dA0KPiArICB0aGUgTklDIGJlaW5nIGNvbnRyb2xsZWQgYnkgdGhlIFVOREkuDQo+ ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3Jp cHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdv cmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtV bmRpR2V0Q29uZmlnSW5mbyAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5J Q19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgUFhFX0RCX0dFVF9DT05GSUdfSU5GTyAg KkRiOw0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsNCj4gKyAgaWYg KChDZGItPk9wQ29kZSAhPSBQWEVfT1BDT0RFX0dFVF9DT05GSUdfSU5GTykgfHwNCj4gKyAgICAg IChDZGItPlN0YXRDb2RlICE9IFBYRV9TVEFUQ09ERV9JTklUSUFMSVpFKSB8fA0KPiArICAgICAg KENkYi0+U3RhdEZsYWdzICE9IFBYRV9TVEFURkxBR1NfSU5JVElBTElaRSkgfHwNCj4gKyAgICAg IChDZGItPklGbnVtID49IChnUHhlLT5JRmNudCB8IGdQeGUtPklGY250RXh0IDw8IDgpKSB8fA0K PiArICAgICAgKENkYi0+Q1BCc2l6ZSAhPSBQWEVfQ1BCU0laRV9OT1RfVVNFRCkgfHwNCj4gKyAg ICAgIChDZGItPkNQQmFkZHIgIT0gUFhFX0NQQkFERFJfTk9UX1VTRUQpIHx8DQo+ICsgICAgICAo Q2RiLT5EQnNpemUgIT0gc2l6ZW9mIChQWEVfREJfR0VUX0NPTkZJR19JTkZPKSkgfHwNCj4gKyAg ICAgIChDZGItPk9wRmxhZ3MgIT0gUFhFX09QRkxBR1NfTk9UX1VTRUQpKQ0KPiArICB7DQo+ICsg ICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAg IENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KPiArICAgIHJldHVy bjsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1Nf Q09NTUFORF9DT01QTEVURTsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9T VUNDRVNTOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+U3RhdGUgPT0gUFhFX1NUQVRGTEFH U19HRVRfU1RBVEVfU1RPUFBFRCkgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRG TEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09E RV9OT1RfU1RBUlRFRDsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBEYiA9IChQ WEVfREJfR0VUX0NPTkZJR19JTkZPICopKFVJTlROKUNkYi0+REJhZGRyOw0KPiArDQo+ICsgIERi LT5wY2kuQnVzVHlwZSA9IFBYRV9CVVNUWVBFX1VTQjsNCj4gKw0KPiArICBpZiAoTmljLT5Vc2JF dGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaUdldENvbmZpZ0luZm8gIT0gTlVMTCkgew0KPiArICAg IFN0YXR1cyA9IE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlHZXRDb25maWdJbmZv IChDZGIsIE5pYyk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAg Q2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIH0N Cj4gKyAgfQ0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIHJlc2V0cyB0aGUg bmV0d29yayBhZGFwdGVyIGFuZCBpbml0aWFsaXplcyBVTkRJIHVzaW5nDQo+ICsgIHRoZSBwYXJh bWV0ZXJzIHN1cHBsaWVkIGluIHRoZSBDUEIuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgICAgIENk YiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJh bVtpbiwgb3V0XSBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJv bGxlciBkYXRhLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK1VuZGlJbml0aWFsaXplICgNCj4g KyAgSU4gICAgICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gT1VUICBOSUNfREFUQSAgKk5pYw0K PiArICApDQo+ICt7DQo+ICsgIFBYRV9DUEJfSU5JVElBTElaRSAgKkNwYjsNCj4gKyAgUFhFX0RC X0lOSVRJQUxJWkUgICAqRGI7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgU3RhdHVzOw0KPiAr DQo+ICsgIGlmICgoQ2RiLT5PcENvZGUgIT0gUFhFX09QQ09ERV9JTklUSUFMSVpFKSB8fA0KPiAr ICAgICAgKENkYi0+U3RhdENvZGUgIT0gUFhFX1NUQVRDT0RFX0lOSVRJQUxJWkUpIHx8DQo+ICsg ICAgICAoQ2RiLT5TdGF0RmxhZ3MgIT0gUFhFX1NUQVRGTEFHU19JTklUSUFMSVpFKSB8fA0KPiAr ICAgICAgKENkYi0+SUZudW0gPj0gKGdQeGUtPklGY250IHwgZ1B4ZS0+SUZjbnRFeHQgPDwgOCkp IHx8DQo+ICsgICAgICAoQ2RiLT5DUEJzaXplICE9IHNpemVvZiAoUFhFX0NQQl9JTklUSUFMSVpF KSkpDQo+ICsgIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFO RF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9D REI7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9IGVsc2Ugew0KPiArICAgIENkYi0+U3RhdEZsYWdz ID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0NPTVBMRVRFOw0KPiArICB9DQo+ICsNCj4gKyAgaWYg KE5pYy0+U3RhdGUgPT0gUFhFX1NUQVRGTEFHU19HRVRfU1RBVEVfU1RPUFBFRCkgew0KPiArICAg IENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBD ZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9OT1RfU1RBUlRFRDsNCj4gKyAgICByZXR1cm47 DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoKENkYi0+T3BGbGFncyAhPSBQWEVfT1BGTEFHU19JTklU SUFMSVpFX0RFVEVDVF9DQUJMRSkgJiYNCj4gKyAgICAgIChDZGItPk9wRmxhZ3MgIT0gUFhFX09Q RkxBR1NfSU5JVElBTElaRV9ET19OT1RfREVURUNUX0NBQkxFKSkNCj4gKyAgew0KPiArICAgIENk Yi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGIt PlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICByZXR1cm47DQo+ ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5TdGF0ZSA9PSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFU RV9JTklUSUFMSVpFRCkgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19D T01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9BTFJF QURZX0lOSVRJQUxJWkVEOw0KPiArICAgIHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ICsgIENwYiA9 IChQWEVfQ1BCX0lOSVRJQUxJWkUgKikoVUlOVE4pQ2RiLT5DUEJhZGRyOw0KPiArICBEYiAgPSAo UFhFX0RCX0lOSVRJQUxJWkUgKikoVUlOVE4pQ2RiLT5EQmFkZHI7DQo+ICsNCj4gKyAgTmljLT5Q eGVJbml0LkxpbmtTcGVlZCAgICA9IENwYi0+TGlua1NwZWVkOw0KPiArICBOaWMtPlB4ZUluaXQu RHVwbGV4TW9kZSAgID0gQ3BiLT5EdXBsZXhNb2RlOw0KPiArICBOaWMtPlB4ZUluaXQuTG9vcEJh Y2tNb2RlID0gQ3BiLT5Mb29wQmFja01vZGU7DQo+ICsgIE5pYy0+UHhlSW5pdC5NZW1vcnlBZGRy ICAgPSBDcGItPk1lbW9yeUFkZHI7DQo+ICsgIE5pYy0+UHhlSW5pdC5NZW1vcnlMZW5ndGggPSBD cGItPk1lbW9yeUxlbmd0aDsNCj4gKyAgTmljLT5QeGVJbml0LlR4QnVmQ250ICAgICA9IFRYX0JV RkZFUl9DT1VOVDsNCj4gKyAgTmljLT5QeGVJbml0LlR4QnVmU2l6ZSAgICA9IE5pYy0+TWF4U2Vn bWVudFNpemU7DQo+ICsgIE5pYy0+UHhlSW5pdC5SeEJ1ZkNudCAgICAgPSBSWF9CVUZGRVJfQ09V TlQ7DQo+ICsgIE5pYy0+UHhlSW5pdC5SeEJ1ZlNpemUgICAgPSBOaWMtPk1heFNlZ21lbnRTaXpl Ow0KPiArDQo+ICsgIENkYi0+U3RhdENvZGUgPSBJbml0aWFsaXplIChDZGIsIE5pYyk7DQo+ICsN Cj4gKyAgRGItPk1lbW9yeVVzZWQgPSBNRU1PUllfUkVRVUlSRTsNCj4gKyAgRGItPlR4QnVmQ250 ICAgPSBOaWMtPlB4ZUluaXQuVHhCdWZDbnQ7DQo+ICsgIERiLT5UeEJ1ZlNpemUgID0gTmljLT5Q eGVJbml0LlR4QnVmU2l6ZTsNCj4gKyAgRGItPlJ4QnVmQ250ICAgPSBOaWMtPlB4ZUluaXQuUnhC dWZDbnQ7DQo+ICsgIERiLT5SeEJ1ZlNpemUgID0gTmljLT5QeGVJbml0LlJ4QnVmU2l6ZTsNCj4g Kw0KPiArICBOaWMtPlJ4RmlsdGVyICAgID0gUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfQlJP QURDQVNUOw0KPiArICBOaWMtPkNhblRyYW5zbWl0ID0gRkFMU0U7DQo+ICsNCj4gKyAgaWYgKENk Yi0+T3BGbGFncyA9PSBQWEVfT1BGTEFHU19JTklUSUFMSVpFX0RFVEVDVF9DQUJMRSkgew0KPiAr ICAgIGlmICgoTmljLT5SZXF1ZXN0LlJlcXVlc3QgPT0gVVNCX0NEQ19ORVRXT1JLX0NPTk5FQ1RJ T04pICYmIChOaWMtPlJlcXVlc3QuVmFsdWUgPT0gTkVUV09SS19ESVNDT05ORUNUKSkgew0KPiAr ICAgICAgTmljLT5DYWJsZURldGVjdCA9IDA7DQo+ICsgICAgfSBlbHNlIGlmICgoTmljLT5SZXF1 ZXN0LlJlcXVlc3QgPT0gVVNCX0NEQ19ORVRXT1JLX0NPTk5FQ1RJT04pICYmIChOaWMtPlJlcXVl c3QuVmFsdWUgPT0gTkVUV09SS19DT05ORUNURUQpKSB7DQo+ICsgICAgICBOaWMtPkNhYmxlRGV0 ZWN0ID0gMTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBpZiAoTmljLT5DYWJsZURldGVjdCA9PSAw KSB7DQo+ICsgICAgICBDZGItPlN0YXRGbGFncyB8PSBQWEVfU1RBVEZMQUdTX0lOSVRJQUxJWkVE X05PX01FRElBOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChDZGItPlN0YXRDb2Rl ICE9IFBYRV9TVEFUQ09ERV9TVUNDRVNTKSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVf U1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICB9IGVsc2Ugew0KPiArICAgIE5pYy0+U3Rh dGUgPSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9JTklUSUFMSVpFRDsNCj4gKyAgfQ0KPiArDQo+ ICsgIGlmIChOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpSW5pdGlhbGl6ZSAhPSBO VUxMKSB7DQo+ICsgICAgU3RhdHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5k aUluaXRpYWxpemUgKENkYiwgTmljKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQo+ICsgICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7 DQo+ICsgICAgfQ0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBJbml0aWFsaXplIE5l dHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcGFyYW1baW5dICAg ICAgQ2RiICAgICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4g KyAgQHBhcmFtW2luLCBvdXRdIE5pYyAgICAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVy ZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBTdGF0dXMgIEEgdmFsdWUg b2YgUHhlIHN0YXRjb2RlLg0KPiArDQo+ICsqKi8NCj4gK1VJTlQxNg0KPiArSW5pdGlhbGl6ZSAo DQo+ICsgIElOICAgICAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOIE9VVCAgTklDX0RBVEEgICpO aWMNCj4gKyAgKQ0KPiArew0KPiArICBVSU5UTiAgICAgICBTdGF0dXM7DQo+ICsgIFVJTlQzMiAg ICAgIEluZGV4Ow0KPiArICBFRklfU1RBVFVTICBFZmlTdGF0dXM7DQo+ICsNCj4gKyAgU3RhdHVz ID0gTWFwSXQgKA0KPiArICAgICAgICAgICAgIE5pYywNCj4gKyAgICAgICAgICAgICBOaWMtPlB4 ZUluaXQuTWVtb3J5QWRkciwNCj4gKyAgICAgICAgICAgICBOaWMtPlB4ZUluaXQuTWVtb3J5TGVu Z3RoLA0KPiArICAgICAgICAgICAgIFRPX0FORF9GUk9NX0RFVklDRSwNCj4gKyAgICAgICAgICAg ICAoVUlOVDY0KShVSU5UTikmTmljLT5NYXBwZWRBZGRyDQo+ICsgICAgICAgICAgICAgKTsNCj4g Kw0KPiArICBpZiAoU3RhdHVzICE9IDApIHsNCj4gKyAgICByZXR1cm4gKFVJTlQxNilTdGF0dXM7 DQo+ICsgIH0NCj4gKw0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBQWEVfSFdBRERSX0xF Tl9FVEhFUjsgSW5kZXgrKykgew0KPiArICAgIE5pYy0+UGVybU5vZGVBZGRyZXNzW0luZGV4XSA9 IE5pYy0+TWFjQWRkci5BZGRyW0luZGV4XTsNCj4gKyAgfQ0KPiArDQo+ICsgIGZvciAoSW5kZXgg PSAwOyBJbmRleCA8IFBYRV9IV0FERFJfTEVOX0VUSEVSOyBJbmRleCsrKSB7DQo+ICsgICAgTmlj LT5DdXJyZW50Tm9kZUFkZHJlc3NbSW5kZXhdID0gTmljLT5QZXJtTm9kZUFkZHJlc3NbSW5kZXhd Ow0KPiArICB9DQo+ICsNCj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgUFhFX0hXQUREUl9M RU5fRVRIRVI7IEluZGV4KyspIHsNCj4gKyAgICBOaWMtPkJyb2FkY2FzdE5vZGVBZGRyZXNzW0lu ZGV4XSA9IDB4RkY7DQo+ICsgIH0NCj4gKw0KPiArICBmb3IgKEluZGV4ID0gUFhFX0hXQUREUl9M RU5fRVRIRVI7IEluZGV4IDwgUFhFX01BQ19MRU5HVEg7IEluZGV4KyspIHsNCj4gKyAgICBOaWMt PkN1cnJlbnROb2RlQWRkcmVzc1tJbmRleF0gICA9IDA7DQo+ICsgICAgTmljLT5QZXJtTm9kZUFk ZHJlc3NbSW5kZXhdICAgICAgPSAwOw0KPiArICAgIE5pYy0+QnJvYWRjYXN0Tm9kZUFkZHJlc3Nb SW5kZXhdID0gMDsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChOaWMtPlVzYkV0aC0+VXNiRXRoSW5p dGlhbGl6ZSAhPSBOVUxMKSB7DQo+ICsgICAgRWZpU3RhdHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0 aEluaXRpYWxpemUgKENkYiwgTmljKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChFZmlTdGF0dXMp KSB7DQo+ICsgICAgICByZXR1cm4gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAg ICB9DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gKFVJTlQxNilTdGF0dXM7DQo+ICt9DQo+ICsN Cj4gKy8qKg0KPiArICBUaGlzIGNvbW1hbmQgcmVzZXRzIHRoZSBuZXR3b3JrIGFkYXB0ZXIgYW5k IHJlaW5pdGlhbGl6ZXMgdGhlIFVOREkNCj4gKyAgd2l0aCB0aGUgc2FtZSBwYXJhbWV0ZXJzIHBy b3ZpZGVkIGluIHRoZSBJbml0aWFsaXplIGNvbW1hbmQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAg Q2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBh cmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xs ZXIgZGF0YS4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtVbmRpUmVzZXQgKA0KPiArICBJTiAg UFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gKw0KPiArICBpZiAoKENkYi0+T3BDb2RlICE9IFBY RV9PUENPREVfUkVTRVQpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0Q29kZSAhPSBQWEVfU1RBVENP REVfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRGbGFncyAhPSBQWEVfU1RBVEZM QUdTX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5JRm51bSA+PSAoZ1B4ZS0+SUZjbnQg fCBnUHhlLT5JRmNudEV4dCA8PCA4KSkgfHwNCj4gKyAgICAgIChDZGItPkNQQnNpemUgIT0gUFhF X0NQQlNJWkVfTk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5DUEJhZGRyICE9IFBYRV9DUEJB RERSX05PVF9VU0VEKSB8fA0KPiArICAgICAgKENkYi0+REJzaXplICE9IFBYRV9EQlNJWkVfTk9U X1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5EQmFkZHIgIT0gUFhFX0RCQUREUl9OT1RfVVNFRCkp DQo+ICsgIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9G QUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7 DQo+ICsgICAgcmV0dXJuOw0KPiArICB9IGVsc2Ugew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0g UFhFX1NUQVRGTEFHU19DT01NQU5EX0NPTVBMRVRFOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0g UFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5TdGF0ZSAh PSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9JTklUSUFMSVpFRCkgew0KPiArICAgIENkYi0+U3Rh dENvZGUgID0gUFhFX1NUQVRDT0RFX05PVF9JTklUSUFMSVpFRDsNCj4gKyAgICBDZGItPlN0YXRG bGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgcmV0dXJuOw0KPiAr ICB9DQo+ICsNCj4gKyAgaWYgKChDZGItPk9wRmxhZ3MgIT0gUFhFX09QRkxBR1NfTk9UX1VTRUQp ICYmDQo+ICsgICAgICAoQ2RiLT5PcEZsYWdzICE9IFBYRV9PUEZMQUdTX1JFU0VUX0RJU0FCTEVf SU5URVJSVVBUUykgJiYNCj4gKyAgICAgIChDZGItPk9wRmxhZ3MgIT0gUFhFX09QRkxBR1NfUkVT RVRfRElTQUJMRV9GSUxURVJTKSkNCj4gKyAgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhF X1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9T VEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBp ZiAoKENkYi0+T3BGbGFncyAmIFBYRV9PUEZMQUdTX1JFU0VUX0RJU0FCTEVfRklMVEVSUykgPT0g MCkgew0KPiArICAgIE5pYy0+UnhGaWx0ZXIgPSBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9C Uk9BRENBU1Q7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoKENkYi0+T3BGbGFncyAmIFBYRV9PUEZM QUdTX1JFU0VUX0RJU0FCTEVfSU5URVJSVVBUUykgIT0gMCkgew0KPiArICAgIE5pYy0+SW50ZXJy dXBPcEZsYWcgPSAwOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+VXNiRXRoLT5Vc2JFdGhV bmRpLlVzYkV0aFVuZGlSZXNldCAhPSBOVUxMKSB7DQo+ICsgICAgU3RhdHVzID0gTmljLT5Vc2JF dGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaVJlc2V0IChDZGIsIE5pYyk7DQo+ICsgICAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZM QUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArfQ0KPiArDQo+ICsvKioN Cj4gKyAgVGhlIFNodXRkb3duIGNvbW1hbmQgcmVzZXRzIHRoZSBuZXR3b3JrIGFkYXB0ZXIgYW5k IGxlYXZlcyBpdCBpbiBhDQo+ICsgIHNhZmUgc3RhdGUgZm9yIGFub3RoZXIgZHJpdmVyIHRvIGlu aXRpYWxpemUuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgICAgIENkYiAgQSBwb2ludGVyIHRvIHRo ZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSBOaWMgIEEg cG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ ICsqKi8NCj4gK1ZPSUQNCj4gK1VuZGlTaHV0ZG93biAoDQo+ICsgIElOICAgICAgUFhFX0NEQiAg ICpDZGIsDQo+ICsgIElOIE9VVCAgTklDX0RBVEEgICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBF RklfU1RBVFVTICBTdGF0dXM7DQo+ICsNCj4gKyAgaWYgKChDZGItPk9wQ29kZSAhPSBQWEVfT1BD T0RFX1NIVVRET1dOKSB8fA0KPiArICAgICAgKENkYi0+U3RhdENvZGUgIT0gUFhFX1NUQVRDT0RF X0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0RmxhZ3MgIT0gUFhFX1NUQVRGTEFH U19JTklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+SUZudW0gPj0gKGdQeGUtPklGY250IHwg Z1B4ZS0+SUZjbnRFeHQgPDwgOCkpIHx8DQo+ICsgICAgICAoQ2RiLT5DUEJzaXplICE9IFBYRV9D UEJTSVpFX05PVF9VU0VEKSB8fA0KPiArICAgICAgKENkYi0+Q1BCYWRkciAhPSBQWEVfQ1BCQURE Ul9OT1RfVVNFRCkgfHwNCj4gKyAgICAgIChDZGItPkRCc2l6ZSAhPSBQWEVfREJTSVpFX05PVF9V U0VEKSB8fA0KPiArICAgICAgKENkYi0+REJhZGRyICE9IFBYRV9EQkFERFJfTk9UX1VTRUQpIHx8 DQo+ICsgICAgICAoQ2RiLT5PcEZsYWdzICE9IFBYRV9PUEZMQUdTX05PVF9VU0VEKSkNCj4gKyAg ew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsN Cj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAg ICByZXR1cm47DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RB VEZMQUdTX0NPTU1BTkRfQ09NUExFVEU7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RB VENPREVfU1VDQ0VTUzsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChOaWMtPlN0YXRlICE9IFBYRV9T VEFURkxBR1NfR0VUX1NUQVRFX0lOSVRJQUxJWkVEKSB7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAg PSBQWEVfU1RBVENPREVfTk9UX0lOSVRJQUxJWkVEOw0KPiArICAgIENkYi0+U3RhdEZsYWdzID0g UFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4g Kw0KPiArICBOaWMtPkNhblRyYW5zbWl0ID0gRkFMU0U7DQo+ICsNCj4gKyAgTmljLT5TdGF0ZSA9 IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRFX1NUQVJURUQ7DQo+ICsNCj4gKyAgaWYgKE5pYy0+VXNi RXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlTaHV0ZG93biAhPSBOVUxMKSB7DQo+ICsgICAgU3Rh dHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaVNodXRkb3duIChDZGIsIE5p Yyk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgQ2RiLT5TdGF0 Q29kZSAgPSBQWEVfU1RBVENPREVfTk9UX0lOSVRJQUxJWkVEOw0KPiArICAgICAgQ2RiLT5TdGF0 RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIH0NCj4gKyAgfQ0K PiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhlIEludGVycnVwdCBFbmFibGVzIGNvbW1hbmQgY2Fu IGJlIHVzZWQgdG8gcmVhZCBhbmQvb3IgY2hhbmdlDQo+ICsgIHRoZSBjdXJyZW50IGV4dGVybmFs IGludGVycnVwdCBlbmFibGUgc2V0dGluZ3MuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBB IHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2lu XSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0 YS4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtVbmRpSW50ZXJydXB0RW5hYmxlICgNCj4gKyAg SU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKQ0KPiAr ew0KPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ICsNCj4gKyAgQ2RiLT5TdGF0Q29kZSA9IFBY RV9TVEFUQ09ERV9VTlNVUFBPUlRFRDsNCj4gKyAgaWYgKE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRp LlVzYkV0aFVuZGlJbnRlcnJ1cHRFbmFibGUgIT0gTlVMTCkgew0KPiArICAgIFN0YXR1cyA9IE5p Yy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlJbnRlcnJ1cHRFbmFibGUgKENkYiwgTmlj KTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBDZGItPlN0YXRG bGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgfSBlbHNlIHsNCj4g KyAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0NPTVBMRVRFOw0K PiArICAgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfU1VDQ0VTUzsNCj4gKyAgICB9 DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRv IHJlYWQgYW5kIGNoYW5nZSByZWNlaXZlIGZpbHRlcnMgYW5kLA0KPiArICBpZiBzdXBwb3J0ZWQs IHJlYWQgYW5kIGNoYW5nZSB0aGUgbXVsdGljYXN0IE1BQyBhZGRyZXNzIGZpbHRlciBsaXN0Lg0K PiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2Ny aXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3 b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyoqLw0KPiArVk9JRA0KPiAr VW5kaVJlY2VpdmVGaWx0ZXIgKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBO SUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsgIFVJTlQxNiAgICAgICAgICAgICAgICAg IE5ld0ZpbHRlcjsNCj4gKyAgUFhFX0RCX1JFQ0VJVkVfRklMVEVSUyAgKkRiOw0KPiArICBFRklf U1RBVFVTICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsNCj4gKyAgaWYgKChDZGItPk9wQ29kZSAh PSBQWEVfT1BDT0RFX1JFQ0VJVkVfRklMVEVSUykgfHwNCj4gKyAgICAgIChDZGItPlN0YXRDb2Rl ICE9IFBYRV9TVEFUQ09ERV9JTklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+U3RhdEZsYWdz ICE9IFBYRV9TVEFURkxBR1NfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPklGbnVtID49 IChnUHhlLT5JRmNudCB8IGdQeGUtPklGY250RXh0IDw8IDgpKSkNCj4gKyAgew0KPiArICAgIENk Yi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGIt PlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICByZXR1cm47DQo+ ICsgIH0gZWxzZSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1B TkRfQ09NUExFVEU7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfU1VDQ0VT UzsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChOaWMtPlN0YXRlICE9IFBYRV9TVEFURkxBR1NfR0VU X1NUQVRFX0lOSVRJQUxJWkVEKSB7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENP REVfTk9UX0lOSVRJQUxJWkVEOw0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFH U19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBOZXdG aWx0ZXIgPSAoVUlOVDE2KShDZGItPk9wRmxhZ3MgJiAweDFGKTsNCj4gKw0KPiArICBzd2l0Y2gg KENkYi0+T3BGbGFncyAmIFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX09QTUFTSykgew0KPiAr ICAgIGNhc2UgUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfUkVBRDoNCj4gKyAgICAgIGlmIChD ZGItPkNQQnNpemUgIT0gUFhFX0NQQlNJWkVfTk9UX1VTRUQpIHsNCj4gKyAgICAgICAgQ2RiLT5T dGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgICAgICBDZGIt PlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICAgIH0NCj4gKw0K PiArICAgICAgaWYgKChOZXdGaWx0ZXIgJiBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9SRVNF VF9NQ0FTVF9MSVNUKSA9PSAwKSB7DQo+ICsgICAgICAgIGlmICgoQ2RiLT5EQnNpemUgIT0gMCkp IHsNCj4gKyAgICAgICAgICBEYiA9IChQWEVfREJfUkVDRUlWRV9GSUxURVJTICopKFVJTlROKUNk Yi0+REJhZGRyOw0KPiArICAgICAgICAgIENvcHlNZW0gKERiLCAmTmljLT5NY2FzdExpc3QsIE5p Yy0+TWNhc3RDb3VudCk7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgIH0NCj4gKw0KPiArICAgICAg YnJlYWs7DQo+ICsNCj4gKyAgICBjYXNlIFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX0VOQUJM RToNCj4gKyAgICAgIGlmIChOZXdGaWx0ZXIgPT0gMCkgew0KPiArICAgICAgICBDZGItPlN0YXRG bGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgICB9DQo+ICsNCj4g KyAgICAgIGlmIChDZGItPkNQQnNpemUgIT0gMCkgew0KPiArICAgICAgICBpZiAoKChOZXdGaWx0 ZXIgJiBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9GSUxURVJFRF9NVUxUSUNBU1QpID09IDAp IHx8DQo+ICsgICAgICAgICAgICAoKE5ld0ZpbHRlciAmIFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklM VEVSX1JFU0VUX01DQVNUX0xJU1QpICE9IDApIHx8DQo+ICsgICAgICAgICAgICAoKE5ld0ZpbHRl ciAmIFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX0FMTF9NVUxUSUNBU1QpICE9IDApIHx8DQo+ ICsgICAgICAgICAgICAoKENkYi0+Q1BCc2l6ZSAlIHNpemVvZiAoUFhFX01BQ19BRERSKSkgIT0g MCkpDQo+ICsgICAgICAgIHsNCj4gKyAgICAgICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFU RkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgIH0NCj4gKw0KPiAr ICAgICAgaWYgKChDZGItPk9wRmxhZ3MgJiBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9GSUxU RVJFRF9NVUxUSUNBU1QpICE9IDApIHsNCj4gKyAgICAgICAgaWYgKCgoQ2RiLT5PcEZsYWdzICYg UFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfUkVTRVRfTUNBU1RfTElTVCkgIT0gMCkgfHwNCj4g KyAgICAgICAgICAgICgoQ2RiLT5PcEZsYWdzICYgUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJf QUxMX01VTFRJQ0FTVCkgIT0gMCkpDQo+ICsgICAgICAgIHsNCj4gKyAgICAgICAgICBDZGItPlN0 YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgICAgIH0NCj4g Kw0KPiArICAgICAgICBpZiAoKENkYi0+Q1BCc2l6ZSA9PSAwKSkgew0KPiArICAgICAgICAgIENk Yi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICAgICAg fQ0KPiArICAgICAgfQ0KPiArDQo+ICsgICAgICBDZGItPlN0YXRDb2RlID0gU2V0RmlsdGVyIChO aWMsIE5ld0ZpbHRlciwgQ2RiLT5DUEJhZGRyLCBDZGItPkNQQnNpemUpOw0KPiArICAgICAgYnJl YWs7DQo+ICsNCj4gKyAgICBjYXNlIFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX0RJU0FCTEU6 DQo+ICsgICAgICBpZiAoQ2RiLT5DUEJzaXplICE9IFBYRV9DUEJTSVpFX05PVF9VU0VEKSB7DQo+ ICsgICAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsN Cj4gKyAgICAgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIGJyZWFrOw0KPiArDQo+ICsgICAgZGVmYXVsdDoNCj4g KyAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4g KyAgICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KPiArICB9 DQo+ICsNCj4gKyAgQ2RiLT5TdGF0RmxhZ3MgPSAoUFhFX1NUQVRGTEFHUykoQ2RiLT5TdGF0Rmxh Z3MgfCBOaWMtPlJ4RmlsdGVyKTsNCj4gKw0KPiArICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0aFVu ZGkuVXNiRXRoVW5kaVJlY2VpdmVGaWx0ZXIgIT0gTlVMTCkgew0KPiArICAgIFN0YXR1cyA9IE5p Yy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlSZWNlaXZlRmlsdGVyIChDZGIsIE5pYyk7 DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgQ2RiLT5TdGF0Rmxh Z3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIH0NCj4gKyAgfQ0KPiAr fQ0KPiArDQo+ICsvKioNCj4gKyAgU2V0IFBYRSByZWNlaXZlIGZpbHRlci4NCj4gKw0KPiArICBA cGFyYW1baW5dICBOaWMgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNl IGNvbnRyb2xsZXIgZGF0YS4NCj4gKyAgQHBhcmFtW2luXSAgU2V0RmlsdGVyICAgUFhFIHJlY2Vp dmUgZmlsdGVyDQo+ICsgIEBwYXJhbVtpbl0gIENwYkFkZHIgICAgIENvbW1hbmQgUGFyYW1ldGVy IEJsb2NrIEFkZHJlc3MNCj4gKyAgQHBhcmFtW2luXSAgQ3BiU2l6ZSAgICAgQ29tbWFuZCBQYXJh bWV0ZXIgQmxvY2sgU2l6ZQ0KPiArDQo+ICsqKi8NCj4gK1VJTlQxNg0KPiArU2V0RmlsdGVyICgN Cj4gKyAgSU4gIE5JQ19EQVRBICAqTmljLA0KPiArICBJTiAgVUlOVDE2ICAgIFNldEZpbHRlciwN Cj4gKyAgSU4gIFVJTlQ2NCAgICBDcGJBZGRyLA0KPiArICBJTiAgVUlOVDMyICAgIENwYlNpemUN Cj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgIFN0YXR1czsN Cj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAqTWNhc3RMaXN0Ow0KPiArICBVSU5U OCAgICAgICAgICAgICAgICAgICAgICAgIENvdW50Ow0KPiArICBVSU5UOCAgICAgICAgICAgICAg ICAgICAgICAgIEluZGV4MTsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICBJbmRl eDI7DQo+ICsgIFBYRV9DUEJfUkVDRUlWRV9GSUxURVJTICAgICAgKkNwYjsNCj4gKyAgVVNCX0VU SEVSTkVUX0ZVTl9ERVNDUklQVE9SICBVc2JFdGhGdW5EZXNjcmlwdG9yOw0KPiArDQo+ICsgIENv dW50ID0gMDsNCj4gKyAgQ3BiICAgPSAoUFhFX0NQQl9SRUNFSVZFX0ZJTFRFUlMgKikoVUlOVE4p Q3BiQWRkcjsNCj4gKw0KPiArICAvLyBUaGUgQ3BiIGNvdWxkIGJlIE5VTEwuKHJlZjpQWEVfQ1BC QUREUl9OT1RfVVNFRCkNCj4gKyAgTmljLT5SeEZpbHRlciA9IChVSU5UOClTZXRGaWx0ZXI7DQo+ ICsNCj4gKyAgaWYgKCgoU2V0RmlsdGVyICYgUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfRklM VEVSRURfTVVMVElDQVNUKSAhPSAwKSB8fCAoQ3BiICE9IE5VTEwpKSB7DQo+ICsgICAgaWYgKENw YiAhPSBOVUxMKSB7DQo+ICsgICAgICBOaWMtPk1jYXN0Q291bnQgPSAoVUlOVDgpKENwYlNpemUg LyBQWEVfTUFDX0xFTkdUSCk7DQo+ICsgICAgICBDb3B5TWVtICgmTmljLT5NY2FzdExpc3QsIENw YiwgTmljLT5NY2FzdENvdW50KTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBOaWMtPlVzYkV0aC0+ VXNiRXRoRnVuRGVzY3JpcHRvciAoTmljLT5Vc2JFdGgsICZVc2JFdGhGdW5EZXNjcmlwdG9yKTsN Cj4gKyAgICBpZiAoKFVzYkV0aEZ1bkRlc2NyaXB0b3IuTnVtYmVyTWNGaWx0ZXJzIDw8IDEpID09 IDApIHsNCj4gKyAgICAgIE5pYy0+UnhGaWx0ZXIgfD0gUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxU RVJfQUxMX01VTFRJQ0FTVDsNCj4gKyAgICAgIE5pYy0+VXNiRXRoLT5TZXRVc2JFdGhQYWNrZXRG aWx0ZXIgKE5pYy0+VXNiRXRoLCBOaWMtPlJ4RmlsdGVyKTsNCj4gKyAgICB9IGVsc2Ugew0KPiAr ICAgICAgU3RhdHVzID0gZ0JTLT5BbGxvY2F0ZVBvb2wgKEVmaUJvb3RTZXJ2aWNlc0RhdGEsIE5p Yy0+TWNhc3RDb3VudCAqIDYsIChWT0lEICoqKSZNY2FzdExpc3QpOw0KPiArICAgICAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgICByZXR1cm4gUFhFX1NUQVRDT0RFX0lOVkFM SURfUEFSQU1FVEVSOw0KPiArICAgICAgfQ0KPiArDQo+ICsgICAgICBpZiAoQ3BiICE9IE5VTEwp IHsNCj4gKyAgICAgICAgZm9yIChJbmRleDEgPSAwOyBJbmRleDEgPCBOaWMtPk1jYXN0Q291bnQ7 IEluZGV4MSsrKSB7DQo+ICsgICAgICAgICAgZm9yIChJbmRleDIgPSAwOyBJbmRleDIgPCA2OyBJ bmRleDIrKykgew0KPiArICAgICAgICAgICAgTWNhc3RMaXN0W0NvdW50KytdID0gQ3BiLT5NQ2Fz dExpc3RbSW5kZXgxXVtJbmRleDJdOw0KPiArICAgICAgICAgIH0NCj4gKyAgICAgICAgfQ0KPiAr ICAgICAgfQ0KPiArDQo+ICsgICAgICBOaWMtPlJ4RmlsdGVyIHw9IFBYRV9PUEZMQUdTX1JFQ0VJ VkVfRklMVEVSX0ZJTFRFUkVEX01VTFRJQ0FTVDsNCj4gKyAgICAgIGlmIChDcGIgIT0gTlVMTCkg ew0KPiArICAgICAgICBOaWMtPlVzYkV0aC0+U2V0VXNiRXRoTWNhc3RGaWx0ZXIgKE5pYy0+VXNi RXRoLCBOaWMtPk1jYXN0Q291bnQsIE1jYXN0TGlzdCk7DQo+ICsgICAgICB9DQo+ICsNCj4gKyAg ICAgIE5pYy0+VXNiRXRoLT5TZXRVc2JFdGhQYWNrZXRGaWx0ZXIgKE5pYy0+VXNiRXRoLCBOaWMt PlJ4RmlsdGVyKTsNCj4gKyAgICAgIEZyZWVQb29sIChNY2FzdExpc3QpOw0KPiArICAgIH0NCj4g KyAgfQ0KPiArDQo+ICsgIHJldHVybiBQWEVfU1RBVENPREVfU1VDQ0VTUzsNCj4gK30NCj4gKw0K PiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIGdldCBjdXJyZW50IHN0YXRpb24g YW5kIGJyb2FkY2FzdCBNQUMgYWRkcmVzc2VzDQo+ICsgIGFuZCwgaWYgc3VwcG9ydGVkLCB0byBj aGFuZ2UgdGhlIGN1cnJlbnQgc3RhdGlvbiBNQUMgYWRkcmVzcy4NCj4gKw0KPiArICBAcGFyYW1b aW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiAr ICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29u dHJvbGxlciBkYXRhLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK1VuZGlTdGF0aW9uQWRkcmVz cyAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ ICsgICkNCj4gK3sNCj4gKyAgUFhFX0NQQl9TVEFUSU9OX0FERFJFU1MgICpDcGI7DQo+ICsgIFBY RV9EQl9TVEFUSU9OX0FERFJFU1MgICAqRGI7DQo+ICsgIFVJTlQxNiAgICAgICAgICAgICAgICAg ICBJbmRleDsNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKw0KPiAr ICBpZiAoKENkYi0+T3BDb2RlICE9IFBYRV9PUENPREVfU1RBVElPTl9BRERSRVNTKSB8fA0KPiAr ICAgICAgKENkYi0+U3RhdENvZGUgIT0gUFhFX1NUQVRDT0RFX0lOSVRJQUxJWkUpIHx8DQo+ICsg ICAgICAoQ2RiLT5TdGF0RmxhZ3MgIT0gUFhFX1NUQVRGTEFHU19JTklUSUFMSVpFKSB8fA0KPiAr ICAgICAgKENkYi0+SUZudW0gPj0gKGdQeGUtPklGY250IHwgZ1B4ZS0+SUZjbnRFeHQgPDwgOCkp IHx8DQo+ICsgICAgICAoQ2RiLT5EQnNpemUgIT0gc2l6ZW9mIChQWEVfREJfU1RBVElPTl9BRERS RVNTKSkpDQo+ICsgIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09N TUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJ RF9DREI7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9IGVsc2Ugew0KPiArICAgIENkYi0+U3RhdEZs YWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0NPTVBMRVRFOw0KPiArICAgIENkYi0+U3RhdENv ZGUgID0gUFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5T dGF0ZSAhPSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9JTklUSUFMSVpFRCkgew0KPiArICAgIENk Yi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX05PVF9JTklUSUFMSVpFRDsNCj4gKyAgICBDZGIt PlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgcmV0dXJu Ow0KPiArICB9DQo+ICsNCj4gKyAgaWYgKENkYi0+T3BGbGFncyA9PSBQWEVfT1BGTEFHU19TVEFU SU9OX0FERFJFU1NfUkVTRVQpIHsNCj4gKyAgICBpZiAoQ29tcGFyZU1lbSAoJk5pYy0+Q3VycmVu dE5vZGVBZGRyZXNzWzBdLCAmTmljLT5QZXJtTm9kZUFkZHJlc3NbMF0sIFBYRV9NQUNfTEVOR1RI KSAhPSAwKSB7DQo+ICsgICAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBQWEVfTUFDX0xFTkdU SDsgSW5kZXgrKykgew0KPiArICAgICAgICBOaWMtPkN1cnJlbnROb2RlQWRkcmVzc1tJbmRleF0g PSBOaWMtPlBlcm1Ob2RlQWRkcmVzc1tJbmRleF07DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiAr ICB9DQo+ICsNCj4gKyAgaWYgKENkYi0+Q1BCYWRkciAhPSAwKSB7DQo+ICsgICAgQ3BiID0gKFBY RV9DUEJfU1RBVElPTl9BRERSRVNTICopKFVJTlROKUNkYi0+Q1BCYWRkcjsNCj4gKyAgICBmb3Ig KEluZGV4ID0gMDsgSW5kZXggPCBQWEVfTUFDX0xFTkdUSDsgSW5kZXgrKykgew0KPiArICAgICAg TmljLT5DdXJyZW50Tm9kZUFkZHJlc3NbSW5kZXhdID0gQ3BiLT5TdGF0aW9uQWRkcltJbmRleF07 DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgaWYgKENkYi0+REJhZGRyICE9IDApIHsNCj4g KyAgICBEYiA9IChQWEVfREJfU1RBVElPTl9BRERSRVNTICopKFVJTlROKUNkYi0+REJhZGRyOw0K PiArICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFBYRV9NQUNfTEVOR1RIOyBJbmRleCsrKSB7 DQo+ICsgICAgICBEYi0+U3RhdGlvbkFkZHJbSW5kZXhdICAgPSBOaWMtPkN1cnJlbnROb2RlQWRk cmVzc1tJbmRleF07DQo+ICsgICAgICBEYi0+QnJvYWRjYXN0QWRkcltJbmRleF0gPSBOaWMtPkJy b2FkY2FzdE5vZGVBZGRyZXNzW0luZGV4XTsNCj4gKyAgICAgIERiLT5QZXJtYW5lbnRBZGRyW0lu ZGV4XSA9IE5pYy0+UGVybU5vZGVBZGRyZXNzW0luZGV4XTsNCj4gKyAgICB9DQo+ICsgIH0NCj4g Kw0KPiArICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaVN0YXRpb25BZGRy ZXNzICE9IE5VTEwpIHsNCj4gKyAgICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5V c2JFdGhVbmRpU3RhdGlvbkFkZHJlc3MgKENkYiwgTmljKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9S IChTdGF0dXMpKSB7DQo+ICsgICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09N TUFORF9GQUlMRUQ7DQo+ICsgICAgfQ0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBU aGlzIGNvbW1hbmQgaXMgdXNlZCB0byByZWFkIGFuZCBjbGVhciB0aGUgTklDIHRyYWZmaWMgc3Rh dGlzdGljcy4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29t bWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0 byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsqKi8NCj4g K1ZPSUQNCj4gK1VuZGlTdGF0aXN0aWNzICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiAr ICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICBTdGF0 dXM7DQo+ICsNCj4gKyAgaWYgKChDZGItPk9wQ29kZSAhPSBQWEVfT1BDT0RFX1NUQVRJU1RJQ1Mp IHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0Q29kZSAhPSBQWEVfU1RBVENPREVfSU5JVElBTElaRSkg fHwNCj4gKyAgICAgIChDZGItPlN0YXRGbGFncyAhPSBQWEVfU1RBVEZMQUdTX0lOSVRJQUxJWkUp IHx8DQo+ICsgICAgICAoQ2RiLT5JRm51bSA+PSAoZ1B4ZS0+SUZjbnQgfCBnUHhlLT5JRmNudEV4 dCA8PCA4KSkgfHwNCj4gKyAgICAgIChDZGItPkNQQnNpemUgIT0gUFhFX0NQQlNJWkVfTk9UX1VT RUQpIHx8DQo+ICsgICAgICAoQ2RiLT5DUEJhZGRyICE9IFBYRV9DUEJBRERSX05PVF9VU0VEKSkN Cj4gKyAgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZB SUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsN Cj4gKyAgICByZXR1cm47DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQ WEVfU1RBVEZMQUdTX0NPTU1BTkRfQ09NUExFVEU7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmlj LT5TdGF0ZSAhPSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9JTklUSUFMSVpFRCkgew0KPiArICAg IENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX05PVF9JTklUSUFMSVpFRDsNCj4gKyAgICBD ZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgcmV0 dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKChDZGItPk9wRmxhZ3MgIT0gUFhFX09QRkxBR1Nf U1RBVElTVElDU19SRVNFVCkgJiYNCj4gKyAgICAgIChDZGItPk9wRmxhZ3MgIT0gUFhFX09QRkxB R1NfU1RBVElTVElDU19SRUFEKSkNCj4gKyAgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhF X1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9T VEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBD ZGItPlN0YXRDb2RlID0gU3RhdGlzdGljcyAoTmljLCBDZGItPkRCYWRkciwgQ2RiLT5EQnNpemUp Ow0KPiArDQo+ICsgIGlmIChOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpU3RhdGlz dGljcyAhPSBOVUxMKSB7DQo+ICsgICAgU3RhdHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGku VXNiRXRoVW5kaVN0YXRpc3RpY3MgKENkYiwgTmljKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQo+ICsgICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFO RF9GQUlMRUQ7DQo+ICsgICAgfQ0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBSZXR1 cm4gZGF0YSBmb3IgREIgZGF0YS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBOaWMgICAgICBBIHBv aW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKyAgQHBh cmFtW2luXSAgRGJBZGRyICAgRGF0YSBCbG9jayBBZGRyZXNzLg0KPiArICBAcGFyYW1baW5dICBE YlNpemUgICBEYXRhIEJsb2NrIFNpemUuDQo+ICsNCj4gKyoqLw0KPiArVUlOVDE2DQo+ICtTdGF0 aXN0aWNzICgNCj4gKyAgSU4gTklDX0RBVEEgICpOaWMsDQo+ICsgIElOIFVJTlQ2NCAgICBEYkFk ZHIsDQo+ICsgIElOIFVJTlQxNiAgICBEYlNpemUNCj4gKyAgKQ0KPiArew0KPiArICBQWEVfREJf U1RBVElTVElDUyAgKkRiU3RhdGlzdGljOw0KPiArICBFRklfU1RBVFVTICAgICAgICAgU3RhdHVz Ow0KPiArDQo+ICsgIERiU3RhdGlzdGljID0gKFBYRV9EQl9TVEFUSVNUSUNTICopKFVJTlROKURi QWRkcjsNCj4gKw0KPiArICBpZiAoRGJTaXplID09IDApIHsNCj4gKyAgICByZXR1cm4gUFhFX1NU QVRDT0RFX1NVQ0NFU1M7DQo+ICsgIH0NCj4gKw0KPiArICBEYlN0YXRpc3RpYy0+U3VwcG9ydGVk ICA9IDB4ODAyOw0KPiArICBEYlN0YXRpc3RpYy0+RGF0YVsweDAxXSA9IE5pYy0+UnhGcmFtZTsN Cj4gKyAgRGJTdGF0aXN0aWMtPkRhdGFbMHgwQl0gPSBOaWMtPlR4RnJhbWU7DQo+ICsNCj4gKyAg aWYgKE5pYy0+VXNiRXRoLT5Vc2JFdGhTdGF0aXN0aWNzICE9IE5VTEwpIHsNCj4gKyAgICBTdGF0 dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRoU3RhdGlzdGljcyAoTmljLCBEYkFkZHIsIERiU2l6ZSk7 DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgcmV0dXJuIFBYRV9T VEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgcmV0 dXJuIFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVHJhbnNs YXRlIGEgbXVsdGljYXN0IElQdjQgb3IgSVB2NiBhZGRyZXNzIHRvIGEgbXVsdGljYXN0IE1BQyBh ZGRyZXNzLg0KPiArDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSBDZGIgIEEgcG9pbnRlciB0byB0aGUg Y29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICAgICAgTmljICBBIHBv aW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiAr KiovDQo+ICtWT0lEDQo+ICtVbmRpTWNhc3RJcDJNYWMgKA0KPiArICBJTiBPVVQgIFBYRV9DREIg ICAqQ2RiLA0KPiArICBJTiAgICAgIE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAg UFhFX0NQQl9NQ0FTVF9JUF9UT19NQUMgICpDcGI7DQo+ICsgIFBYRV9EQl9NQ0FTVF9JUF9UT19N QUMgICAqRGI7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAqVG1wOw0KPiArICBFRklf U1RBVFVTICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArDQo+ICsgIGlmICgoQ2RiLT5PcENvZGUg IT0gUFhFX09QQ09ERV9NQ0FTVF9JUF9UT19NQUMpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0Q29k ZSAhPSBQWEVfU1RBVENPREVfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRGbGFn cyAhPSBQWEVfU1RBVEZMQUdTX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5JRm51bSA+ PSAoZ1B4ZS0+SUZjbnQgfCBnUHhlLT5JRmNudEV4dCA8PCA4KSkgfHwNCj4gKyAgICAgIChDZGIt PkNQQnNpemUgIT0gc2l6ZW9mIChQWEVfQ1BCX01DQVNUX0lQX1RPX01BQykpIHx8DQo+ICsgICAg ICAoQ2RiLT5EQnNpemUgIT0gc2l6ZW9mIChQWEVfREJfTUNBU1RfSVBfVE9fTUFDKSkpDQo+ICsg IHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7 DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ICsg ICAgcmV0dXJuOw0KPiArICB9IGVsc2Ugew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NU QVRGTEFHU19DT01NQU5EX0NPTVBMRVRFOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NU QVRDT0RFX1NVQ0NFU1M7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5TdGF0ZSAhPSBQWEVf U1RBVEZMQUdTX0dFVF9TVEFURV9JTklUSUFMSVpFRCkgew0KPiArICAgIENkYi0+U3RhdENvZGUg ID0gUFhFX1NUQVRDT0RFX05PVF9JTklUSUFMSVpFRDsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9 IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ ICsNCj4gKyAgQ3BiID0gKFBYRV9DUEJfTUNBU1RfSVBfVE9fTUFDICopKFVJTlROKUNkYi0+Q1BC YWRkcjsNCj4gKyAgRGIgID0gKFBYRV9EQl9NQ0FTVF9JUF9UT19NQUMgKikoVUlOVE4pQ2RiLT5E QmFkZHI7DQo+ICsNCj4gKyAgaWYgKChDZGItPk9wRmxhZ3MgJiBQWEVfT1BGTEFHU19NQ0FTVF9J UFY2X1RPX01BQykgIT0gMCkgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFH U19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9V TlNVUFBPUlRFRDsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBUbXAgPSAoVUlO VDggKikoJkNwYi0+SVAuSVB2NCk7DQo+ICsNCj4gKyAgaWYgKChUbXBbMF0gJiAweEYwKSAhPSAw eEUwKSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJ TEVEOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ1BCOw0K PiArICB9DQo+ICsNCj4gKyAgRGItPk1BQ1swXSA9IDB4MDE7DQo+ICsgIERiLT5NQUNbMV0gPSAw eDAwOw0KPiArICBEYi0+TUFDWzJdID0gMHg1RTsNCj4gKyAgRGItPk1BQ1szXSA9IFRtcFsxXSAm IDB4N0Y7DQo+ICsgIERiLT5NQUNbNF0gPSBUbXBbMl07DQo+ICsgIERiLT5NQUNbNV0gPSBUbXBb M107DQo+ICsNCj4gKyAgaWYgKE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlNY2Fz dElwMk1hYyAhPSBOVUxMKSB7DQo+ICsgICAgU3RhdHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0aFVu ZGkuVXNiRXRoVW5kaU1jYXN0SXAyTWFjIChDZGIsIE5pYyk7DQo+ICsgICAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPiArICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NP TU1BTkRfRkFJTEVEOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAg VGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gcmVhZCBhbmQgd3JpdGUgKGlmIHN1cHBvcnRlZCBieSBO SUMgSC9XKQ0KPiArICBub252b2xhdGlsZSBzdG9yYWdlIG9uIHRoZSBOSUMuDQo+ICsNCj4gKyAg QHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9j ay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJm YWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtVbmRpTnZEYXRh ICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4g KyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ICsNCj4gKyAgQ2RiLT5TdGF0 Q29kZSA9IFBYRV9TVEFUQ09ERV9VTlNVUFBPUlRFRDsNCj4gKyAgaWYgKE5pYy0+VXNiRXRoLT5V c2JFdGhVbmRpLlVzYkV0aFVuZGlOdkRhdGEgIT0gTlVMTCkgew0KPiArICAgIFN0YXR1cyA9IE5p Yy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlOdkRhdGEgKENkYiwgTmljKTsNCj4gKyAg ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBDZGItPlN0YXRGbGFncyA9IFBY RV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgfSBlbHNlIHsNCj4gKyAgICAgIENk Yi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0NPTVBMRVRFOw0KPiArICAgICAg Q2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfU1VDQ0VTUzsNCj4gKyAgICB9DQo+ICsgIH0N Cj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCByZXR1cm5zIHRoZSBjdXJyZW50 IGludGVycnVwdCBzdGF0dXMgYW5kL29yIHRoZQ0KPiArICB0cmFuc21pdHRlZCBidWZmZXIgYWRk cmVzc2VzIGFuZCB0aGUgY3VycmVudCBtZWRpYSBzdGF0dXMuDQo+ICsNCj4gKyAgQHBhcmFtW2lu XSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAg QHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRy b2xsZXIgZGF0YS4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtVbmRpR2V0U3RhdHVzICgNCj4g KyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKQ0K PiArew0KPiArICBQWEVfREJfR0VUX1NUQVRVUyAgKkRiOw0KPiArICBQWEVfREJfR0VUX1NUQVRV UyAgVG1wR2V0U3RhdHVzOw0KPiArICBVSU5UMTYgICAgICAgICAgICAgTnVtRW50cmllczsNCj4g KyAgVUlOVE4gICAgICAgICAgICAgIEluZGV4Ow0KPiArICBFRklfU1RBVFVTICAgICAgICAgU3Rh dHVzOw0KPiArDQo+ICsgIGlmICgoQ2RiLT5PcENvZGUgIT0gUFhFX09QQ09ERV9HRVRfU1RBVFVT KSB8fA0KPiArICAgICAgKENkYi0+U3RhdENvZGUgIT0gUFhFX1NUQVRDT0RFX0lOSVRJQUxJWkUp IHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0RmxhZ3MgIT0gUFhFX1NUQVRGTEFHU19JTklUSUFMSVpF KSB8fA0KPiArICAgICAgKENkYi0+SUZudW0gPj0gKGdQeGUtPklGY250IHwgZ1B4ZS0+SUZjbnRF eHQgPDwgOCkpIHx8DQo+ICsgICAgICAoQ2RiLT5DUEJzaXplICE9IFBYRV9DUEJTSVpFX05PVF9V U0VEKSB8fA0KPiArICAgICAgKENkYi0+Q1BCYWRkciAhPSBQWEVfQ1BCQUREUl9OT1RfVVNFRCkp DQo+ICsgIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9G QUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7 DQo+ICsgICAgcmV0dXJuOw0KPiArICB9IGVsc2Ugew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0g UFhFX1NUQVRGTEFHU19DT01NQU5EX0NPTVBMRVRFOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0g UFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5TdGF0ZSAh PSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9JTklUSUFMSVpFRCkgew0KPiArICAgIENkYi0+U3Rh dENvZGUgID0gUFhFX1NUQVRDT0RFX05PVF9JTklUSUFMSVpFRDsNCj4gKyAgICBDZGItPlN0YXRG bGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgcmV0dXJuOw0KPiAr ICB9DQo+ICsNCj4gKyAgVG1wR2V0U3RhdHVzLlJ4RnJhbWVMZW4gPSAwOw0KPiArICBUbXBHZXRT dGF0dXMucmVzZXJ2ZWQgICA9IDA7DQo+ICsgIERiICAgICAgICAgICAgICAgICAgICAgID0gKFBY RV9EQl9HRVRfU1RBVFVTICopKFVJTlROKUNkYi0+REJhZGRyOw0KPiArDQo+ICsgIGlmICgoQ2Ri LT5EQnNpemUgPiAwKSAmJiAoQ2RiLT5EQnNpemUgPCBzaXplb2YgKFVJTlQzMikgKiAyKSkgew0K PiArICAgIENvcHlNZW0gKERiLCAmVG1wR2V0U3RhdHVzLCBDZGItPkRCc2l6ZSk7DQo+ICsgIH0g ZWxzZSB7DQo+ICsgICAgQ29weU1lbSAoRGIsICZUbXBHZXRTdGF0dXMsIHNpemVvZiAoVUlOVDMy KSAqIDIpOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKChDZGItPk9wRmxhZ3MgJiBQWEVfT1BGTEFH U19HRVRfVFJBTlNNSVRURURfQlVGRkVSUykgIT0gMCkgew0KPiArICAgIGlmIChDZGItPkRCc2l6 ZSA9PSAwKSB7DQo+ICsgICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFO RF9GQUlMRUQ7DQo+ICsgICAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElE X0NEQjsNCj4gKyAgICAgIHJldHVybjsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBOdW1FbnRyaWVz ICA9IENkYi0+REJzaXplIC0gc2l6ZW9mIChVSU5UNjQpOw0KPiArICAgIENkYi0+REJzaXplID0g c2l6ZW9mIChVSU5UMzIpICogMjsNCj4gKw0KPiArICAgIGZvciAoSW5kZXggPSAwOyBOdW1FbnRy aWVzID49IHNpemVvZiAoVUlOVDY0KTsgSW5kZXgrKywgTnVtRW50cmllcyAtPSBzaXplb2YgKFVJ TlQ2NCkpIHsNCj4gKyAgICAgIGlmIChOaWMtPlR4QnVmZmVyQ291bnQgPiAwKSB7DQo+ICsgICAg ICAgIE5pYy0+VHhCdWZmZXJDb3VudC0tOw0KPiArICAgICAgICBEYi0+VHhCdWZmZXJbSW5kZXhd ID0gTmljLT5NZWRpYUhlYWRlcltOaWMtPlR4QnVmZmVyQ291bnRdOw0KPiArICAgICAgfQ0KPiAr ICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIGlmICgoQ2RiLT5PcEZsYWdzICYgUFhFX09QRkxBR1Nf R0VUX0lOVEVSUlVQVF9TVEFUVVMpICE9IDApIHsNCj4gKyAgICBpZiAoTmljLT5SZWNlaXZlU3Rh dHVzICE9IDApIHsNCj4gKyAgICAgIENkYi0+U3RhdEZsYWdzIHw9IFBYRV9TVEFURkxBR1NfR0VU X1NUQVRVU19SRUNFSVZFOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIGlmICgoTmljLT5S ZXF1ZXN0LlJlcXVlc3QgPT0gVVNCX0NEQ19ORVRXT1JLX0NPTk5FQ1RJT04pICYmIChOaWMtPlJl cXVlc3QuVmFsdWUgPT0gTkVUV09SS19ESVNDT05ORUNUKSkgew0KPiArICAgIE5pYy0+Q2FibGVE ZXRlY3QgPSAwOw0KPiArICB9IGVsc2UgaWYgKChOaWMtPlJlcXVlc3QuUmVxdWVzdCA9PSBVU0Jf Q0RDX05FVFdPUktfQ09OTkVDVElPTikgJiYgKE5pYy0+UmVxdWVzdC5WYWx1ZSA9PSBORVRXT1JL X0NPTk5FQ1RFRCkpIHsNCj4gKyAgICBOaWMtPkNhYmxlRGV0ZWN0ID0gMTsNCj4gKyAgfQ0KPiAr DQo+ICsgIGlmICgoQ2RiLT5PcEZsYWdzICYgUFhFX09QRkxBR1NfR0VUX01FRElBX1NUQVRVUykg IT0gMCkgew0KPiArICAgIGlmIChOaWMtPkNhYmxlRGV0ZWN0ID09IDApIHsNCj4gKyAgICAgIENk Yi0+U3RhdEZsYWdzIHw9IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRVU19OT19NRURJQTsNCj4gKyAg ICB9DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRo VW5kaUdldFN0YXR1cyAhPSBOVUxMKSB7DQo+ICsgICAgU3RhdHVzID0gTmljLT5Vc2JFdGgtPlVz YkV0aFVuZGkuVXNiRXRoVW5kaUdldFN0YXR1cyAoQ2RiLCBOaWMpOw0KPiArICAgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFH U19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICB9DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ ICsgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIGZpbGwgdGhlIG1lZGlhIGhlYWRlcihzKSBpbiB0 cmFuc21pdCBwYWNrZXQocykuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIg dG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBB IHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0K PiArKiovDQo+ICtWT0lEDQo+ICtVbmRpRmlsbEhlYWRlciAoDQo+ICsgIElOICBQWEVfQ0RCICAg KkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgUFhFX0NQ Ql9GSUxMX0hFQURFUiAgICAgICAgICAgICAqQ3BiRmlsbEhlYWRlcjsNCj4gKyAgUFhFX0NQQl9G SUxMX0hFQURFUl9GUkFHTUVOVEVEICAqQ3BiRmlsbDsNCj4gKyAgRXRoZXJuZXRIZWFkZXIgICAg ICAgICAgICAgICAgICAqTWFjSGVhZGVyOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAg ICAgICAgIEluZGV4Ow0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgIFN0YXR1 czsNCj4gKw0KPiArICBpZiAoKENkYi0+T3BDb2RlICE9IFBYRV9PUENPREVfRklMTF9IRUFERVIp IHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0Q29kZSAhPSBQWEVfU1RBVENPREVfSU5JVElBTElaRSkg fHwNCj4gKyAgICAgIChDZGItPlN0YXRGbGFncyAhPSBQWEVfU1RBVEZMQUdTX0lOSVRJQUxJWkUp IHx8DQo+ICsgICAgICAoQ2RiLT5JRm51bSA+PSAoZ1B4ZS0+SUZjbnQgfCBnUHhlLT5JRmNudEV4 dCA8PCA4KSkgfHwNCj4gKyAgICAgIChDZGItPkNQQnNpemUgIT0gc2l6ZW9mIChQWEVfQ1BCX0ZJ TExfSEVBREVSX0ZSQUdNRU5URUQpKSB8fA0KPiArICAgICAgKENkYi0+REJzaXplICE9IFBYRV9E QlNJWkVfTk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5EQmFkZHIgIT0gUFhFX0RCQUREUl9O T1RfVVNFRCkpDQo+ICsgIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1Nf Q09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5W QUxJRF9DREI7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9IGVsc2Ugew0KPiArICAgIENkYi0+U3Rh dEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0NPTVBMRVRFOw0KPiArICAgIENkYi0+U3Rh dENvZGUgID0gUFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmlj LT5TdGF0ZSAhPSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9JTklUSUFMSVpFRCkgew0KPiArICAg IENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX05PVF9JTklUSUFMSVpFRDsNCj4gKyAgICBD ZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgcmV0 dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKENkYi0+Q1BCc2l6ZSA9PSBQWEVfQ1BCU0laRV9O T1RfVVNFRCkgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5E X0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NE QjsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoKENkYi0+T3BGbGFncyAm IFBYRV9PUEZMQUdTX0ZJTExfSEVBREVSX0ZSQUdNRU5URUQpICE9IDApIHsNCj4gKyAgICBDcGJG aWxsID0gKFBYRV9DUEJfRklMTF9IRUFERVJfRlJBR01FTlRFRCAqKShVSU5UTilDZGItPkNQQmFk ZHI7DQo+ICsNCj4gKyAgICBpZiAoKENwYkZpbGwtPkZyYWdDbnQgPT0gMCkgfHwgKENwYkZpbGwt PkZyYWdEZXNjWzBdLkZyYWdMZW4gPCBQWEVfTUFDX0hFQURFUl9MRU5fRVRIRVIpKSB7DQo+ICsg ICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsg ICAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICAg IHJldHVybjsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBNYWNIZWFkZXIgICAgICAgICAgID0gKEV0 aGVybmV0SGVhZGVyICopKFVJTlROKUNwYkZpbGwtPkZyYWdEZXNjWzBdLkZyYWdBZGRyOw0KPiAr ICAgIE1hY0hlYWRlci0+UHJvdG9jb2wgPSBDcGJGaWxsLT5Qcm90b2NvbDsNCj4gKw0KPiArICAg IGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFBYRV9IV0FERFJfTEVOX0VUSEVSOyBJbmRleCsrKSB7 DQo+ICsgICAgICBNYWNIZWFkZXItPkRlc3RBZGRyW0luZGV4XSA9IENwYkZpbGwtPkRlc3RBZGRy W0luZGV4XTsNCj4gKyAgICAgIE1hY0hlYWRlci0+U3JjQWRkcltJbmRleF0gID0gQ3BiRmlsbC0+ U3JjQWRkcltJbmRleF07DQo+ICsgICAgfQ0KPiArICB9IGVsc2Ugew0KPiArICAgIENwYkZpbGxI ZWFkZXIgPSAoUFhFX0NQQl9GSUxMX0hFQURFUiAqKShVSU5UTilDZGItPkNQQmFkZHI7DQo+ICsN Cj4gKyAgICBNYWNIZWFkZXIgICAgICAgICAgID0gKEV0aGVybmV0SGVhZGVyICopKFVJTlROKUNw YkZpbGxIZWFkZXItPk1lZGlhSGVhZGVyOw0KPiArICAgIE1hY0hlYWRlci0+UHJvdG9jb2wgPSBD cGJGaWxsSGVhZGVyLT5Qcm90b2NvbDsNCj4gKw0KPiArICAgIGZvciAoSW5kZXggPSAwOyBJbmRl eCA8IFBYRV9IV0FERFJfTEVOX0VUSEVSOyBJbmRleCsrKSB7DQo+ICsgICAgICBNYWNIZWFkZXIt PkRlc3RBZGRyW0luZGV4XSA9IENwYkZpbGxIZWFkZXItPkRlc3RBZGRyW0luZGV4XTsNCj4gKyAg ICAgIE1hY0hlYWRlci0+U3JjQWRkcltJbmRleF0gID0gQ3BiRmlsbEhlYWRlci0+U3JjQWRkcltJ bmRleF07DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+VXNiRXRoLT5Vc2JF dGhVbmRpLlVzYkV0aFVuZGlGaWxsSGVhZGVyICE9IE5VTEwpIHsNCj4gKyAgICBTdGF0dXMgPSBO aWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpRmlsbEhlYWRlciAoQ2RiLCBOaWMpOw0K PiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIENkYi0+U3RhdEZsYWdz ID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICB9DQo+ICsgIH0NCj4gK30N Cj4gKw0KPiArLyoqDQo+ICsgIFRoZSBUcmFuc21pdCBjb21tYW5kIGlzIHVzZWQgdG8gcGxhY2Ug YSBwYWNrZXQgaW50byB0aGUgdHJhbnNtaXQgcXVldWUuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAg Q2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBh cmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xs ZXIgZGF0YS4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtVbmRpVHJhbnNtaXQgKA0KPiArICBJ TiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7 DQo+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gKw0KPiArICBpZiAoKENkYi0+T3BDb2RlICE9 IFBYRV9PUENPREVfVFJBTlNNSVQpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0Q29kZSAhPSBQWEVf U1RBVENPREVfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRGbGFncyAhPSBQWEVf U1RBVEZMQUdTX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5JRm51bSA+PSAoZ1B4ZS0+ SUZjbnQgfCBnUHhlLT5JRmNudEV4dCA8PCA4KSkgfHwNCj4gKyAgICAgIChDZGItPkNQQnNpemUg IT0gc2l6ZW9mIChQWEVfQ1BCX1RSQU5TTUlUKSkgfHwNCj4gKyAgICAgIChDZGItPkRCc2l6ZSAh PSBQWEVfREJTSVpFX05PVF9VU0VEKSB8fA0KPiArICAgICAgKENkYi0+REJhZGRyICE9IFBYRV9E QkFERFJfTk9UX1VTRUQpKQ0KPiArICB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RB VEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRD T0RFX0lOVkFMSURfQ0RCOw0KPiArICAgIHJldHVybjsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBD ZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9DT01QTEVURTsNCj4gKyAgICBD ZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0KPiArICB9DQo+ICsNCj4gKyAg aWYgKE5pYy0+U3RhdGUgIT0gUFhFX1NUQVRGTEFHU19HRVRfU1RBVEVfSU5JVElBTElaRUQpIHsN Cj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfTk9UX0lOSVRJQUxJWkVEOw0KPiAr ICAgIHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChDZGItPkNQQnNpemUgPT0gUFhFX0NQ QlNJWkVfTk9UX1VTRUQpIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1Nf Q09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5W QUxJRF9DREI7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+VXNi RXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlUcmFuc21pdCAhPSBOVUxMKSB7DQo+ICsgICAgU3Rh dHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaVRyYW5zbWl0IChDZGIsIE5p Yyk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgQ2RiLT5TdGF0 RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIH0NCj4gKw0KPiAr ICAgIHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ICsgIENkYi0+U3RhdENvZGUgPSBUcmFuc21pdCAo Q2RiLCBOaWMsIENkYi0+Q1BCYWRkciwgQ2RiLT5PcEZsYWdzKTsNCj4gKw0KPiArICBpZiAoQ2Ri LT5TdGF0Q29kZSAhPSBQWEVfU1RBVENPREVfU1VDQ0VTUykgew0KPiArICAgIENkYi0+U3RhdEZs YWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgfQ0KPiArfQ0KPiArDQo+ ICsvKioNCj4gKyAgVXNlIFVTQiBFdGhlcm5ldCBQcm90b2NvbCBCdWxrIG91dCBjb21tYW5kIHRv IHRyYW5zbWl0IGRhdGEuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgICAgIENkYiAgICAgIEEgcG9p bnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW4sIG91 dF0gTmljICAgICAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVy IGRhdGEuDQo+ICsgIEBwYXJhbVtpbl0gICAgICBDcGJBZGRyICBDb21tYW5kIFBhcmFtZXRlciBC bG9jayBBZGRyZXNzLg0KPiArICBAcGFyYW1baW5dICAgICAgT3BGbGFncyAgT3BlcmF0aW9uIEZs YWdzLg0KPiArDQo+ICsqKi8NCj4gK1VJTlQxNg0KPiArVHJhbnNtaXQgKA0KPiArICBJTiAgICAg IFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiBPVVQgIE5JQ19EQVRBICAqTmljLA0KPiArICBJTiAg ICAgIFVJTlQ2NCAgICBDcGJBZGRyLA0KPiArICBJTiAgICAgIFVJTlQxNiAgICBPcEZsYWdzDQo+ ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgU3RhdHVzOw0KPiArICBQWEVfQ1BC X1RSQU5TTUlUICAqQ3BiOw0KPiArICBVSU5UNjQgICAgICAgICAgICBCdWxrT3V0RGF0YTsNCj4g KyAgVUlOVE4gICAgICAgICAgICAgRGF0YUxlbmd0aDsNCj4gKyAgVUlOVE4gICAgICAgICAgICAg VHJhbnNtaXRMZW5ndGg7DQo+ICsgIFVJTlROICAgICAgICAgICAgIE1hcDsNCj4gKyAgVUlOVDMy ICAgICAgICAgICAgQ291bnRlcjsNCj4gKyAgVUlOVDE2ICAgICAgICAgICAgU3RhdENvZGU7DQo+ ICsNCj4gKyAgQnVsa091dERhdGEgPSAwOw0KPiArICBDb3VudGVyICAgICA9IDA7DQo+ICsgIENw YiAgICAgICAgID0gKFBYRV9DUEJfVFJBTlNNSVQgKikoVUlOVE4pQ3BiQWRkcjsNCj4gKw0KPiAr ICBpZiAoTmljLT5DYW5UcmFuc21pdCkgew0KPiArICAgIHJldHVybiBQWEVfU1RBVENPREVfQlVT WTsNCj4gKyAgfQ0KPiArDQo+ICsgIE5pYy0+Q2FuVHJhbnNtaXQgPSBUUlVFOw0KPiArDQo+ICsg IGlmICgoT3BGbGFncyAmIFBYRV9PUEZMQUdTX1RSQU5TTUlUX0ZSQUdNRU5URUQpICE9IDApIHsN Cj4gKyAgICByZXR1cm4gUFhFX1NUQVRDT0RFX0lOVkFMSURfUEFSQU1FVEVSOw0KPiArICB9DQo+ ICsNCj4gKyAgTWFwID0gTWFwSXQgKA0KPiArICAgICAgICAgIE5pYywNCj4gKyAgICAgICAgICBD cGItPkZyYW1lQWRkciwNCj4gKyAgICAgICAgICBDcGItPkRhdGFMZW4gKyAoVUlOVDMyKUNwYi0+ TWVkaWFoZWFkZXJMZW4sDQo+ICsgICAgICAgICAgVE9fREVWSUNFLA0KPiArICAgICAgICAgIChV SU5UNjQpKFVJTlROKSZCdWxrT3V0RGF0YQ0KPiArICAgICAgICAgICk7DQo+ICsNCj4gKyAgaWYg KE1hcCAhPSAwKSB7DQo+ICsgICAgTmljLT5DYW5UcmFuc21pdCA9IEZBTFNFOw0KPiArICAgIHJl dHVybiBQWEVfU1RBVENPREVfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgIH0NCj4gKw0KPiArICBp ZiAoTmljLT5UeEJ1ZmZlckNvdW50IDwgTUFYX1hNSVRfQlVGRkVSUykgew0KPiArICAgIE5pYy0+ TWVkaWFIZWFkZXJbTmljLT5UeEJ1ZmZlckNvdW50XSA9IENwYi0+RnJhbWVBZGRyOw0KPiArICAg IE5pYy0+VHhCdWZmZXJDb3VudCsrOw0KPiArICB9DQo+ICsNCj4gKyAgRGF0YUxlbmd0aCA9IChV SU5UTikoQ3BiLT5EYXRhTGVuICsgKFVJTlQzMilDcGItPk1lZGlhaGVhZGVyTGVuKTsNCj4gKw0K PiArICB3aGlsZSAoMSkgew0KPiArICAgIGlmIChDb3VudGVyID49IDMpIHsNCj4gKyAgICAgIFN0 YXRDb2RlID0gUFhFX1NUQVRDT0RFX0JVU1k7DQo+ICsgICAgICBicmVhazsNCj4gKyAgICB9DQo+ ICsNCj4gKyAgICBUcmFuc21pdExlbmd0aCA9IERhdGFMZW5ndGg7DQo+ICsNCj4gKyAgICBTdGF0 dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRoVHJhbnNtaXQgKENkYiwgTmljLT5Vc2JFdGgsIChWT0lE ICopKFVJTlROKUJ1bGtPdXREYXRhLCAmVHJhbnNtaXRMZW5ndGgpOw0KPiArICAgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIFN0YXRDb2RlID0gIFBYRV9TVEFURkxBR1NfQ09N TUFORF9GQUlMRUQ7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgaWYgKFN0YXR1cyA9PSBFRklfSU5W QUxJRF9QQVJBTUVURVIpIHsNCj4gKyAgICAgIFN0YXRDb2RlID0gUFhFX1NUQVRDT0RFX0lOVkFM SURfUEFSQU1FVEVSOw0KPiArICAgICAgYnJlYWs7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgaWYg KFN0YXR1cyA9PSBFRklfREVWSUNFX0VSUk9SKSB7DQo+ICsgICAgICBTdGF0Q29kZSA9IFBYRV9T VEFUQ09ERV9ERVZJQ0VfRkFJTFVSRTsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIH0NCj4gKw0K PiArICAgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBOaWMtPlR4RnJhbWUr KzsNCj4gKyAgICAgIFN0YXRDb2RlID0gUFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQo+ICsgICAgICBi cmVhazsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBDb3VudGVyKys7DQo+ICsgIH0NCj4gKw0KPiAr ICBVbk1hcEl0ICgNCj4gKyAgICBOaWMsDQo+ICsgICAgQ3BiLT5GcmFtZUFkZHIsDQo+ICsgICAg Q3BiLT5EYXRhTGVuICsgKFVJTlQzMilDcGItPk1lZGlhaGVhZGVyTGVuLA0KPiArICAgIFRPX0RF VklDRSwNCj4gKyAgICBCdWxrT3V0RGF0YQ0KPiArICAgICk7DQo+ICsNCj4gKyAgTmljLT5DYW5U cmFuc21pdCA9IEZBTFNFOw0KPiArDQo+ICsgIHJldHVybiBTdGF0Q29kZTsNCj4gK30NCj4gKw0K PiArLyoqDQo+ICsgIFdoZW4gdGhlIG5ldHdvcmsgYWRhcHRlciBoYXMgcmVjZWl2ZWQgYSBmcmFt ZSwgdGhpcyBjb21tYW5kIGlzIHVzZWQNCj4gKyAgdG8gY29weSB0aGUgZnJhbWUgaW50byBkcml2 ZXIvYXBwbGljYXRpb24gc3RvcmFnZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9p bnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBO aWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0K PiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK1VuZGlSZWNlaXZlICgNCj4gKyAgSU4gIFBYRV9DREIg ICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBFRklf U1RBVFVTICBTdGF0dXM7DQo+ICsNCj4gKyAgaWYgKChDZGItPk9wQ29kZSAhPSBQWEVfT1BDT0RF X1JFQ0VJVkUpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0Q29kZSAhPSBQWEVfU1RBVENPREVfSU5J VElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRGbGFncyAhPSBQWEVfU1RBVEZMQUdTX0lO SVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5JRm51bSA+PSAoZ1B4ZS0+SUZjbnQgfCBnUHhl LT5JRmNudEV4dCA8PCA4KSkgfHwNCj4gKyAgICAgIChDZGItPkNQQnNpemUgIT0gc2l6ZW9mIChQ WEVfQ1BCX1JFQ0VJVkUpKSB8fA0KPiArICAgICAgKENkYi0+REJzaXplICE9IHNpemVvZiAoUFhF X0RCX1JFQ0VJVkUpKSB8fA0KPiArICAgICAgKENkYi0+T3BGbGFncyAhPSBQWEVfT1BGTEFHU19O T1RfVVNFRCkpDQo+ICsgIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1Nf Q09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5W QUxJRF9DREI7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9IGVsc2Ugew0KPiArICAgIENkYi0+U3Rh dEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0NPTVBMRVRFOw0KPiArICAgIENkYi0+U3Rh dENvZGUgID0gUFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmlj LT5TdGF0ZSAhPSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9JTklUSUFMSVpFRCkgew0KPiArICAg IENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBD ZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9OT1RfSU5JVElBTElaRUQ7DQo+ICsgICAgcmV0 dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0 aFVuZGlSZWNlaXZlICE9IE5VTEwpIHsNCj4gKyAgICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNi RXRoVW5kaS5Vc2JFdGhVbmRpUmVjZWl2ZSAoQ2RiLCBOaWMpOw0KPiArICAgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19D T01NQU5EX0ZBSUxFRDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4g Kw0KPiArICBDZGItPlN0YXRDb2RlID0gUmVjZWl2ZSAoQ2RiLCBOaWMsIENkYi0+Q1BCYWRkciwg Q2RiLT5EQmFkZHIpOw0KPiArDQo+ICsgIGlmIChDZGItPlN0YXRDb2RlICE9IFBYRV9TVEFUQ09E RV9TVUNDRVNTKSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1B TkRfRkFJTEVEOw0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBVc2UgVVNCIEV0aGVy bmV0IFByb3RvY29sIEJ1bGsgaW4gY29tbWFuZCB0byByZWNlaXZlIGRhdGEuDQo+ICsNCj4gKyAg QHBhcmFtW2luXSAgICAgIENkYiAgICAgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlw dG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW4sIG91dF0gTmljICAgICAgQSBwb2ludGVyIHRvIHRo ZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsgIEBwYXJhbVtpbl0gICAg ICBDcGJBZGRyICBDb21tYW5kIFBhcmFtZXRlciBCbG9jayBBZGRyZXNzLg0KPiArICBAcGFyYW1b aW4sIG91dF0gRGJBZGRyICAgRGF0YSBCbG9jayBBZGRyZXNzLg0KPiArDQo+ICsqKi8NCj4gK1VJ TlQxNg0KPiArUmVjZWl2ZSAoDQo+ICsgIElOIFBYRV9DREIgICAgICAgKkNkYiwNCj4gKyAgSU4g T1VUIE5JQ19EQVRBICAqTmljLA0KPiArICBJTiBVSU5UNjQgICAgICAgIENwYkFkZHIsDQo+ICsg IElOIE9VVCBVSU5UNjQgICAgRGJBZGRyDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAg ICAgICBTdGF0dXM7DQo+ICsgIFVJTlROICAgICAgICAgICAgSW5kZXg7DQo+ICsgIFBYRV9GUkFN RV9UWVBFICAgRnJhbWVUeXBlOw0KPiArICBQWEVfQ1BCX1JFQ0VJVkUgICpDcGI7DQo+ICsgIFBY RV9EQl9SRUNFSVZFICAgKkRiOw0KPiArICBOSUNfREVWSUNFICAgICAgICpOaWNEZXZpY2U7DQo+ ICsgIFVJTlQ4ICAgICAgICAgICAgKkJ1bGtJbkRhdGE7DQo+ICsgIFVJTlROICAgICAgICAgICAg RGF0YUxlbmd0aDsNCj4gKyAgRXRoZXJuZXRIZWFkZXIgICAqSGVhZGVyOw0KPiArICBFRklfVFBM ICAgICAgICAgIE9yaWdpbmFsVHBsOw0KPiArDQo+ICsgIEZyYW1lVHlwZSAgPSBQWEVfRlJBTUVf VFlQRV9OT05FOw0KPiArICBOaWNEZXZpY2UgID0gVU5ESV9ERVZfRlJPTV9OSUMgKE5pYyk7DQo+ ICsgIEJ1bGtJbkRhdGEgPSBOaWNEZXZpY2UtPlJlY2VpdmVCdWZmZXI7DQo+ICsgIERhdGFMZW5n dGggPSAoVUlOVE4pTmljLT5NYXhTZWdtZW50U2l6ZTsNCj4gKyAgQ3BiICAgICAgICA9IChQWEVf Q1BCX1JFQ0VJVkUgKikoVUlOVE4pQ3BiQWRkcjsNCj4gKyAgRGIgICAgICAgICA9IChQWEVfREJf UkVDRUlWRSAqKShVSU5UTilEYkFkZHI7DQo+ICsNCj4gKyAgaWYgKCFCdWxrSW5EYXRhKSB7DQo+ ICsgICAgcmV0dXJuIFBYRV9TVEFUQ09ERV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgfQ0KPiAr DQo+ICsgIGlmICgoTmljLT5SYXRlTGltaXRpbmdDcmVkaXRDb3VudCA9PSAwKSAmJiAoTmljLT5S YXRlTGltaXRpbmdFbmFibGUgPT0gVFJVRSkpIHsNCj4gKyAgICByZXR1cm4gUFhFX1NUQVRDT0RF X05PX0RBVEE7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRo UmVjZWl2ZSAoQ2RiLCBOaWMtPlVzYkV0aCwgKFZPSUQgKilCdWxrSW5EYXRhLCAmRGF0YUxlbmd0 aCk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBOaWMtPlJlY2VpdmVT dGF0dXMgPSAwOw0KPiArICAgIGlmIChOaWMtPlJhdGVMaW1pdGluZ0VuYWJsZSA9PSBUUlVFKSB7 DQo+ICsgICAgICBPcmlnaW5hbFRwbCA9IGdCUy0+UmFpc2VUUEwgKFRQTF9OT1RJRlkpOw0KPiAr ICAgICAgaWYgKE5pYy0+UmF0ZUxpbWl0aW5nQ3JlZGl0Q291bnQgIT0gMCkgew0KPiArICAgICAg ICBOaWMtPlJhdGVMaW1pdGluZ0NyZWRpdENvdW50LS07DQo+ICsgICAgICB9DQo+ICsNCj4gKyAg ICAgIGdCUy0+UmVzdG9yZVRQTCAoT3JpZ2luYWxUcGwpOw0KPiArICAgIH0NCj4gKw0KPiArICAg IHJldHVybiBQWEVfU1RBVENPREVfTk9fREFUQTsNCj4gKyAgfQ0KPiArDQo+ICsgIE5pYy0+UnhG cmFtZSsrOw0KPiArDQo+ICsgIGlmIChEYXRhTGVuZ3RoICE9IDApIHsNCj4gKyAgICBpZiAoRGF0 YUxlbmd0aCA+IENwYi0+QnVmZmVyTGVuKSB7DQo+ICsgICAgICBEYXRhTGVuZ3RoID0gKFVJTlRO KUNwYi0+QnVmZmVyTGVuOw0KPiArICAgIH0NCj4gKw0KPiArICAgIENvcHlNZW0gKChVSU5UOCAq KShVSU5UTilDcGItPkJ1ZmZlckFkZHIsIChVSU5UOCAqKUJ1bGtJbkRhdGEsIERhdGFMZW5ndGgp Ow0KPiArDQo+ICsgICAgSGVhZGVyID0gKEV0aGVybmV0SGVhZGVyICopQnVsa0luRGF0YTsNCj4g Kw0KPiArICAgIERiLT5GcmFtZUxlbiAgICAgICA9IChVSU5UMzIpRGF0YUxlbmd0aDsNCj4gKyAg ICBEYi0+TWVkaWFIZWFkZXJMZW4gPSBQWEVfTUFDX0hFQURFUl9MRU5fRVRIRVI7DQo+ICsNCj4g KyAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBQWEVfSFdBRERSX0xFTl9FVEhFUjsgSW5kZXgr Kykgew0KPiArICAgICAgaWYgKEhlYWRlci0+RGVzdEFkZHJbSW5kZXhdICE9IE5pYy0+Q3VycmVu dE5vZGVBZGRyZXNzW0luZGV4XSkgew0KPiArICAgICAgICBicmVhazsNCj4gKyAgICAgIH0NCj4g KyAgICB9DQo+ICsNCj4gKyAgICBpZiAoSW5kZXggPj0gUFhFX0hXQUREUl9MRU5fRVRIRVIpIHsN Cj4gKyAgICAgIEZyYW1lVHlwZSA9IFBYRV9GUkFNRV9UWVBFX1VOSUNBU1Q7DQo+ICsgICAgfSBl bHNlIHsNCj4gKyAgICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFBYRV9IV0FERFJfTEVOX0VU SEVSOyBJbmRleCsrKSB7DQo+ICsgICAgICAgIGlmIChIZWFkZXItPkRlc3RBZGRyW0luZGV4XSAh PSBOaWMtPkJyb2FkY2FzdE5vZGVBZGRyZXNzW0luZGV4XSkgew0KPiArICAgICAgICAgIGJyZWFr Ow0KPiArICAgICAgICB9DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIGlmIChJbmRleCA+PSBQ WEVfSFdBRERSX0xFTl9FVEhFUikgew0KPiArICAgICAgICBGcmFtZVR5cGUgPSBQWEVfRlJBTUVf VFlQRV9CUk9BRENBU1Q7DQo+ICsgICAgICB9IGVsc2Ugew0KPiArICAgICAgICBpZiAoKEhlYWRl ci0+RGVzdEFkZHJbMF0gJiAxKSA9PSAxKSB7DQo+ICsgICAgICAgICAgRnJhbWVUeXBlID0gUFhF X0ZSQU1FX1RZUEVfRklMVEVSRURfTVVMVElDQVNUOw0KPiArICAgICAgICB9IGVsc2Ugew0KPiAr ICAgICAgICAgIEZyYW1lVHlwZSA9IFBYRV9GUkFNRV9UWVBFX1BST01JU0NVT1VTOw0KPiArICAg ICAgICB9DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgRGItPlR5cGUgICAgID0g RnJhbWVUeXBlOw0KPiArICAgIERiLT5Qcm90b2NvbCA9IEhlYWRlci0+UHJvdG9jb2w7DQo+ICsN Cj4gKyAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBQWEVfSFdBRERSX0xFTl9FVEhFUjsgSW5k ZXgrKykgew0KPiArICAgICAgRGItPlNyY0FkZHJbSW5kZXhdICA9IEhlYWRlci0+U3JjQWRkcltJ bmRleF07DQo+ICsgICAgICBEYi0+RGVzdEFkZHJbSW5kZXhdID0gSGVhZGVyLT5EZXN0QWRkcltJ bmRleF07DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgaWYgKEZyYW1lVHlwZSA9PSBQWEVf RlJBTUVfVFlQRV9OT05FKSB7DQo+ICsgICAgTmljLT5SZWNlaXZlU3RhdHVzID0gMDsNCj4gKyAg fSBlbHNlIHsNCj4gKyAgICBOaWMtPlJlY2VpdmVTdGF0dXMgPSAxOw0KPiArICB9DQo+ICsNCj4g KyAgcmV0dXJuIFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAg RmlsbCBvdXQgUFhFIFNXIFVOREkgc3RydWN0dXJlLg0KPiArDQo+ICsgIEBwYXJhbVtvdXRdICBQ eGVTdyAgICAgIEEgcG9pbnRlciB0byB0aGUgUFhFIFNXIFVOREkgc3RydWN0dXJlLg0KPiArDQo+ ICsqKi8NCj4gK1ZPSUQNCj4gK1B4ZVN0cnVjdEluaXQgKA0KPiArICBPVVQgUFhFX1NXX1VOREkg ICpQeGVTdw0KPiArICApDQo+ICt7DQo+ICsgIFB4ZVN3LT5TaWduYXR1cmUgPSBQWEVfUk9NSURf U0lHTkFUVVJFOw0KPiArICBQeGVTdy0+TGVuICAgICAgID0gKFVJTlQ4KXNpemVvZiAoUFhFX1NX X1VOREkpOw0KPiArICBQeGVTdy0+RnVkZ2UgICAgID0gMDsNCj4gKyAgUHhlU3ctPklGY250ICAg ICA9IDA7DQo+ICsgIFB4ZVN3LT5JRmNudEV4dCAgPSAwOw0KPiArICBQeGVTdy0+UmV2ICAgICAg ID0gUFhFX1JPTUlEX1JFVjsNCj4gKyAgUHhlU3ctPk1ham9yVmVyICA9IFBYRV9ST01JRF9NQUpP UlZFUjsNCj4gKyAgUHhlU3ctPk1pbm9yVmVyICA9IFBYRV9ST01JRF9NSU5PUlZFUjsNCj4gKyAg UHhlU3ctPnJlc2VydmVkMSA9IDA7DQo+ICsNCj4gKyAgUHhlU3ctPkltcGxlbWVudGF0aW9uID0g UFhFX1JPTUlEX0lNUF9TV19WSVJUX0FERFIgfA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICBQWEVfUk9NSURfSU1QX0ZSQUdfU1VQUE9SVEVEIHwNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgUFhFX1JPTUlEX0lNUF9DTURfTElOS19TVVBQT1JURUQgfA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICBQWEVfUk9NSURfSU1QX1NUQVRJT05fQUREUl9TRVRUQUJMRSB8DQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgIFBYRV9ST01JRF9JTVBfUFJPTUlTQ1VPVVNfTVVMVElD QVNUX1JYX1NVUFBPUlRFRCB8DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIFBYRV9ST01J RF9JTVBfUFJPTUlTQ1VPVVNfUlhfU1VQUE9SVEVEIHwNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgUFhFX1JPTUlEX0lNUF9CUk9BRENBU1RfUlhfU1VQUE9SVEVEIHwNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgUFhFX1JPTUlEX0lNUF9GSUxURVJFRF9NVUxUSUNBU1RfUlhfU1VQ UE9SVEVEOw0KPiArDQo+ICsgIFB4ZVN3LT5FbnRyeVBvaW50ICAgPSAoVUlOVDY0KShVSU5UTilV bmRpQXBpRW50cnk7DQo+ICsgIFB4ZVN3LT5yZXNlcnZlZDJbMF0gPSAwOw0KPiArICBQeGVTdy0+ cmVzZXJ2ZWQyWzFdID0gMDsNCj4gKyAgUHhlU3ctPnJlc2VydmVkMlsyXSA9IDA7DQo+ICsgIFB4 ZVN3LT5CdXNDbnQgICAgICAgPSAxOw0KPiArICBQeGVTdy0+QnVzVHlwZVswXSAgID0gUFhFX0JV U1RZUEVfVVNCOw0KPiArICBQeGVTdy0+RnVkZ2UgICAgICAgID0gUHhlU3ctPkZ1ZGdlIC0gQ2Fs Y3VsYXRlU3VtOCAoKFZPSUQgKilQeGVTdywgUHhlU3ctPkxlbik7DQo+ICt9DQo+ICsNCj4gKy8q Kg0KPiArICBVcGRhdGUgTklDIG51bWJlci4NCj4gKw0KPiArICBAcGFyYW1baW5dICAgICAgTmlj ICAgICAgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRh Lg0KPiArICBAcGFyYW1baW4sIG91dF0gUHhlU3cgICAgIEEgcG9pbnRlciB0byB0aGUgUFhFIFNX IFVOREkgc3RydWN0dXJlLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK1VwZGF0ZU5pY051bSAo DQo+ICsgIElOICAgICAgTklDX0RBVEEgICAgICpOaWMsDQo+ICsgIElOIE9VVCAgUFhFX1NXX1VO REkgICpQeGVTdw0KPiArICApDQo+ICt7DQo+ICsgIFVJTlQxNiAgTmljTnVtOw0KPiArDQo+ICsg IE5pY051bSA9IChQeGVTdy0+SUZjbnQgfCBQeGVTdy0+SUZjbnRFeHQgPDwgOCk7DQo+ICsNCj4g KyAgaWYgKE5pYyA9PSBOVUxMKSB7DQo+ICsgICAgaWYgKE5pY051bSA+IDApIHsNCj4gKyAgICAg IE5pY051bS0tOw0KPiArICAgIH0NCj4gKw0KPiArICAgIFB4ZVN3LT5JRmNudCAgICA9IChVSU5U OCkoTmljTnVtICYgMHhGRik7ICAgICAgICAgIC8vIEdldCBsb3dlciBieXRlDQo+ICsgICAgUHhl U3ctPklGY250RXh0ID0gKFVJTlQ4KSgoTmljTnVtICYgMHhGRjAwKSA+PiA4KTsgLy8gR2V0IHVw cGVyIGJ5dGUNCj4gKyAgICBQeGVTdy0+RnVkZ2UgICAgPSAoVUlOVDgpKFB4ZVN3LT5GdWRnZSAt IENhbGN1bGF0ZVN1bTggKChWT0lEICopUHhlU3csIFB4ZVN3LT5MZW4pKTsNCj4gKyAgICByZXR1 cm47DQo+ICsgIH0NCj4gKw0KPiArICBOaWNOdW0rKzsNCj4gKw0KPiArICBQeGVTdy0+SUZjbnQg ICAgPSAoVUlOVDgpKE5pY051bSAmIDB4RkYpOyAgICAgICAgICAvLyBHZXQgbG93ZXIgYnl0ZQ0K PiArICBQeGVTdy0+SUZjbnRFeHQgPSAoVUlOVDgpKChOaWNOdW0gJiAweEZGMDApID4+IDgpOyAv LyBHZXQgdXBwZXIgYnl0ZQ0KPiArICBQeGVTdy0+RnVkZ2UgICAgPSAoVUlOVDgpKFB4ZVN3LT5G dWRnZSAtIENhbGN1bGF0ZVN1bTggKChWT0lEICopUHhlU3csIFB4ZVN3LT5MZW4pKTsNCj4gK30N Cj4gKw0KPiArLyoqDQo+ICsgIFVOREkgQVBJIHRhYmxlIGVudHJ5Lg0KPiArDQo+ICsgIEBwYXJh bVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtVbmRpQXBpRW50cnkgKA0K PiArICBJTiAgVUlOVDY0ICBDZGINCj4gKyAgKQ0KPiArew0KPiArICBQWEVfQ0RCICAgKkNkYlB0 cjsNCj4gKyAgTklDX0RBVEEgICpOaWM7DQo+ICsNCj4gKyAgaWYgKENkYiA9PSAwKSB7DQo+ICsg ICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgfQ0KPiArDQo+ICsgIENkYlB0 ciA9IChQWEVfQ0RCICopKFVJTlROKUNkYjsNCj4gKyAgTmljICAgID0gJihnTGFuRGV2aWNlTGlz dFtDZGJQdHItPklGbnVtXS0+TmljSW5mbyk7DQo+ICsgIGdVbmRpQXBpVGFibGVbQ2RiUHRyLT5P cENvZGVdKENkYlB0ciwgTmljKTsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiAr DQo+ICsvKioNCj4gKyAgTWFwIHZpcnR1YWwgbWVtb3J5IGFkZHJlc3MgZm9yIERNQS4gVGhpcyBm aWVsZCBjYW4gYmUgc2V0IHRvDQo+ICsgIHplcm8gaWYgdGhlcmUgaXMgbm8gbWFwcGluZyBzZXJ2 aWNlLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgICAgICAgICAgQSBwb2ludGVyIHRvIHRo ZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsgIEBwYXJhbVtpbl0gIE1l bUFkZHIgICAgICAgVmlydHVhbCBhZGRyZXNzIHRvIGJlIG1hcHBlZC4NCj4gKyAgQHBhcmFtW2lu XSAgU2l6ZSAgICAgICAgICBTaXplIG9mIG1lbW9yeSB0byBiZSBtYXBwZWQuDQo+ICsgIEBwYXJh bVtpbl0gIERpcmVjdGlvbiAgICAgRGlyZWN0aW9uIG9mIGRhdGEgZmxvdyBmb3IgdGhpcyBtZW1v cnkncyB1c2FnZToNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHUtPmRldmljZSwg ZGV2aWNlLT5jcHUgb3IgYm90aCB3YXlzLg0KPiArICBAcGFyYW1bb3V0XSBNYXBwZWRBZGRyICAg IFBvaW50ZXIgdG8gcmV0dXJuIHRoZSBtYXBwZWQgZGV2aWNlIGFkZHJlc3MuDQo+ICsNCj4gKyoq Lw0KPiArVUlOVE4NCj4gK01hcEl0ICgNCj4gKyAgSU4gTklDX0RBVEEgICpOaWMsDQo+ICsgIElO IFVJTlQ2NCAgICBNZW1BZGRyLA0KPiArICBJTiBVSU5UMzIgICAgU2l6ZSwNCj4gKyAgSU4gVUlO VDMyICAgIERpcmVjdGlvbiwNCj4gKyAgT1VUIFVJTlQ2NCAgIE1hcHBlZEFkZHINCj4gKyAgKQ0K PiArew0KPiArICBVSU5UNjQgICpQaHlBZGRyOw0KPiArDQo+ICsgIFBoeUFkZHIgPSAoVUlOVDY0 ICopKFVJTlROKU1hcHBlZEFkZHI7DQo+ICsNCj4gKyAgaWYgKE5pYy0+UHhlU3RhcnQuTWFwX01l bSA9PSAwKSB7DQo+ICsgICAgKlBoeUFkZHIgPSBNZW1BZGRyOw0KPiArICB9IGVsc2Ugew0KPiAr ICAgICgodm9pZCAoKikoVUlOVDY0LCBVSU5UNjQsIFVJTlQzMiwgVUlOVDMyLCBVSU5UNjQpKShV SU5UTikgTmljLT5QeGVTdGFydC5NYXBfTWVtKSgNCj4gKyAgTmljLT5QeGVTdGFydC5VbmlxdWVf SUQsDQo+ICsgIE1lbUFkZHIsDQo+ICsgIFNpemUsDQo+ICsgIERpcmVjdGlvbiwNCj4gKyAgTWFw cGVkQWRkcg0KPiArICApOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIFBYRV9TVEFUQ09ERV9T VUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVW4tbWFwIHByZXZpb3VzbHkgbWFwcGVk IHZpcnR1YWwgbWVtb3J5IGFkZHJlc3MuIFRoaXMgZmllbGQgY2FuIGJlIHNldA0KPiArICB0byB6 ZXJvIG9ubHkgaWYgdGhlIE1hcF9NZW0oKSBzZXJ2aWNlIGlzIGFsc28gc2V0IHRvIHplcm8uDQo+ ICsNCj4gKyAgQHBhcmFtW2luXSAgTmljICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdv cmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKyAgQHBhcmFtW2luXSAgTWVtQWRkciAg ICAgICBWaXJ0dWFsIGFkZHJlc3MgdG8gYmUgbWFwcGVkLg0KPiArICBAcGFyYW1baW5dICBTaXpl ICAgICAgICAgIFNpemUgb2YgbWVtb3J5IHRvIGJlIG1hcHBlZC4NCj4gKyAgQHBhcmFtW2luXSAg RGlyZWN0aW9uICAgICBEaXJlY3Rpb24gb2YgZGF0YSBmbG93IGZvciB0aGlzIG1lbW9yeSdzIHVz YWdlOg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwdS0+ZGV2aWNlLCBkZXZpY2Ut PmNwdSBvciBib3RoIHdheXMuDQo+ICsgIEBwYXJhbVtpbl0gIE1hcHBlZEFkZHIgICAgUG9pbnRl ciB0byByZXR1cm4gdGhlIG1hcHBlZCBkZXZpY2UgYWRkcmVzcy4NCj4gKw0KPiArKiovDQo+ICtW T0lEDQo+ICtVbk1hcEl0ICgNCj4gKyAgSU4gTklDX0RBVEEgICpOaWMsDQo+ICsgIElOIFVJTlQ2 NCAgICBNZW1BZGRyLA0KPiArICBJTiBVSU5UMzIgICAgU2l6ZSwNCj4gKyAgSU4gVUlOVDMyICAg IERpcmVjdGlvbiwNCj4gKyAgSU4gVUlOVDY0ICAgIE1hcHBlZEFkZHINCj4gKyAgKQ0KPiArew0K PiArICBpZiAoTmljLT5QeGVTdGFydC5Vbk1hcF9NZW0gIT0gMCkgew0KPiArICAgICgodm9pZCAo KikoVUlOVDY0LCBVSU5UNjQsIFVJTlQzMiwgVUlOVDMyLCBVSU5UNjQpKShVSU5UTikgTmljLT5Q eGVTdGFydC5Vbk1hcF9NZW0pKA0KPiArICBOaWMtPlB4ZVN0YXJ0LlVuaXF1ZV9JRCwNCj4gKyAg TWVtQWRkciwNCj4gKyAgU2l6ZSwNCj4gKyAgRGlyZWN0aW9uLA0KPiArICBNYXBwZWRBZGRyDQo+ ICsgICk7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm47DQo+ICt9DQo+IGRpZmYgLS1naXQgYS9V c2JOZXR3b3JrUGtnL1VzYlJuZGlzL0NvbXBvbmVudE5hbWUuYyBiL1VzYk5ldHdvcmtQa2cvVXNi Um5kaXMvQ29tcG9uZW50TmFtZS5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAw MDAwMDAwMDAwMC4uYjliYTE3MGMxMzViDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvVXNiTmV0 d29ya1BrZy9Vc2JSbmRpcy9Db21wb25lbnROYW1lLmMNCj4gQEAgLTAsMCArMSwxNzIgQEANCj4g Ky8qKiBAZmlsZQ0KPiArICBUaGlzIGZpbGUgY29udGFpbnMgY29kZSBmb3IgVVNCIFJORElTIERy aXZlciBDb21wb25lbnQNCj4gKyAgTmFtZSBkZWZpbml0aW9ucw0KPiArDQo+ICsgIENvcHlyaWdo dCAoYykgMjAyMywgQW1lcmljYW4gTWVnYXRyZW5kcyBJbnRlcm5hdGlvbmFsIExMQy4gQWxsIHJp Z2h0cyByZXNlcnZlZC48QlI+DQo+ICsgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1D bGF1c2UtUGF0ZW50DQo+ICsqKi8NCj4gKw0KPiArI2luY2x1ZGUgIlVzYlJuZGlzLmgiDQo+ICsN Cj4gK0dMT0JBTF9SRU1PVkVfSUZfVU5SRUZFUkVOQ0VEIEVGSV9VTklDT0RFX1NUUklOR19UQUJM RSAgZ1VzYlJuZGlzRHJpdmVyTmFtZVRhYmxlW10gPSB7DQo+ICsgIHsNCj4gKyAgICAiZW5nO2Vu IiwNCj4gKyAgICBMIlVTQiBSTkRJUyBEcml2ZXIiDQo+ICsgIH0sDQo+ICsgIHsNCj4gKyAgICBO VUxMLA0KPiArICAgIE5VTEwNCj4gKyAgfQ0KPiArfTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiAr RUZJQVBJDQo+ICtVc2JSbmRpc0NvbXBvbmVudE5hbWVHZXREcml2ZXJOYW1lICgNCj4gKyAgSU4g IEVGSV9DT01QT05FTlRfTkFNRV9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOICBDSEFSOCAgICAg ICAgICAgICAgICAgICAgICAgICpMYW5ndWFnZSwNCj4gKyAgT1VUIENIQVIxNiAgICAgICAgICAg ICAgICAgICAgICAgKipEcml2ZXJOYW1lDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4g K0VGSUFQSQ0KPiArVXNiUm5kaXNDb21wb25lbnROYW1lR2V0Q29udHJvbGxlck5hbWUgKA0KPiAr ICBJTiBFRklfQ09NUE9ORU5UX05BTUVfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiBFRklfSEFO RExFICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXIsDQo+ICsgIElOIEVGSV9IQU5ETEUgICAg ICAgICAgICAgICAgICAgQ2hpbGRIYW5kbGUgICAgICAgIE9QVElPTkFMLA0KPiArICBJTiBDSEFS OCAgICAgICAgICAgICAgICAgICAgICAgICpMYW5ndWFnZSwNCj4gKyAgT1VUIENIQVIxNiAgICAg ICAgICAgICAgICAgICAgICAqKkNvbnRyb2xsZXJOYW1lDQo+ICsgICk7DQo+ICsNCj4gK0dMT0JB TF9SRU1PVkVfSUZfVU5SRUZFUkVOQ0VEIEVGSV9DT01QT05FTlRfTkFNRV9QUk9UT0NPTCAgZ1Vz YlJuZGlzQ29tcG9uZW50TmFtZSA9IHsNCj4gKyAgVXNiUm5kaXNDb21wb25lbnROYW1lR2V0RHJp dmVyTmFtZSwNCj4gKyAgVXNiUm5kaXNDb21wb25lbnROYW1lR2V0Q29udHJvbGxlck5hbWUsDQo+ ICsgICJlbmciDQo+ICt9Ow0KPiArDQo+ICtHTE9CQUxfUkVNT1ZFX0lGX1VOUkVGRVJFTkNFRCBF RklfQ09NUE9ORU5UX05BTUUyX1BST1RPQ09MICBnVXNiUm5kaXNDb21wb25lbnROYW1lMiA9IHsN Cj4gKyAgKEVGSV9DT01QT05FTlRfTkFNRTJfR0VUX0RSSVZFUl9OQU1FKVVzYlJuZGlzQ29tcG9u ZW50TmFtZUdldERyaXZlck5hbWUsDQo+ICsgIChFRklfQ09NUE9ORU5UX05BTUUyX0dFVF9DT05U Uk9MTEVSX05BTUUpVXNiUm5kaXNDb21wb25lbnROYW1lR2V0Q29udHJvbGxlck5hbWUsDQo+ICsg ICJlbiINCj4gK307DQo+ICsNCj4gKy8qKg0KPiArICBSZXRyaWV2ZXMgYSBVbmljb2RlIHN0cmlu ZyB0aGF0IGlzIHRoZSB1c2VyIHJlYWRhYmxlIG5hbWUgb2YgdGhlIGRyaXZlci4NCj4gKw0KPiAr ICBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgdXNlciByZWFkYWJsZSBuYW1lIG9mIGEgZHJp dmVyIGluIHRoZSBmb3JtIG9mIGENCj4gKyAgVW5pY29kZSBzdHJpbmcuIElmIHRoZSBkcml2ZXIg c3BlY2lmaWVkIGJ5IFRoaXMgaGFzIGEgdXNlciByZWFkYWJsZSBuYW1lIGluDQo+ICsgIHRoZSBs YW5ndWFnZSBzcGVjaWZpZWQgYnkgTGFuZ3VhZ2UsIHRoZW4gYSBwb2ludGVyIHRvIHRoZSBkcml2 ZXIgbmFtZSBpcw0KPiArICByZXR1cm5lZCBpbiBEcml2ZXJOYW1lLCBhbmQgRUZJX1NVQ0NFU1Mg aXMgcmV0dXJuZWQuIElmIHRoZSBkcml2ZXIgc3BlY2lmaWVkDQo+ICsgIGJ5IFRoaXMgZG9lcyBu b3Qgc3VwcG9ydCB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5IExhbmd1YWdlLA0KPiArICB0aGVu IEVGSV9VTlNVUFBPUlRFRCBpcyByZXR1cm5lZC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlz ICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9DT01QT05FTlRfTkFNRTJfUFJPVE9D T0wgb3INCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX0NPTVBPTkVOVF9O QU1FX1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dICBMYW5ndWFnZSAgICAgICAg ICBBIHBvaW50ZXIgdG8gYSBOdWxsLXRlcm1pbmF0ZWQgQVNDSUkgc3RyaW5nDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5IGluZGljYXRpbmcgdGhlIGxhbmd1YWdlLiBU aGlzIGlzIHRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZSBv ZiB0aGUgZHJpdmVyIG5hbWUgdGhhdCB0aGUgY2FsbGVyIGlzDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJlcXVlc3RpbmcsIGFuZCBpdCBtdXN0IG1hdGNoIG9uZSBvZiB0aGUN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VzIHNwZWNpZmllZCBp biBTdXBwb3J0ZWRMYW5ndWFnZXMuIFRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBudW1iZXIgb2YgbGFuZ3VhZ2VzIHN1cHBvcnRlZCBieSBhIGRyaXZlciBpcyB1cA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgZHJpdmVyIHdyaXRlci4gTGFu Z3VhZ2UgaXMgc3BlY2lmaWVkDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu IFJGQyA0NjQ2IG9yIElTTyA2MzktMiBsYW5ndWFnZSBjb2RlIGZvcm1hdC4NCj4gKyAgQHBhcmFt W291dF0gRHJpdmVyTmFtZSAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBVbmljb2RlIHN0cmluZyB0 byByZXR1cm4uDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgVW5pY29k ZSBzdHJpbmcgaXMgdGhlIG5hbWUgb2YgdGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRyaXZlciBzcGVjaWZpZWQgYnkgVGhpcyBpbiB0aGUgbGFuZ3VhZ2UNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIGJ5IExhbmd1YWdlLg0KPiArDQo+ ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBVbmljb2RlIHN0cmluZyBmb3Ig dGhlIERyaXZlciBzcGVjaWZpZWQgYnkNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVGhpcyBhbmQgdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFnZSB3YXMNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuZWQgaW4gRHJpdmVyTmFtZS4NCj4g KyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgTGFuZ3VhZ2UgaXMgTlVMTC4NCj4gKyAg QHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgRHJpdmVyTmFtZSBpcyBOVUxMLg0KPiArICBA cmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBUaGUgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlz IGRvZXMgbm90IHN1cHBvcnQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhl IGxhbmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFnZS4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RB VFVTDQo+ICtFRklBUEkNCj4gK1VzYlJuZGlzQ29tcG9uZW50TmFtZUdldERyaXZlck5hbWUgKA0K PiArICBJTiAgRUZJX0NPTVBPTkVOVF9OQU1FX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gIENI QVI4ICAgICAgICAgICAgICAgICAgICAgICAgKkxhbmd1YWdlLA0KPiArICBPVVQgQ0hBUjE2ICAg ICAgICAgICAgICAgICAgICAgICAqKkRyaXZlck5hbWUNCj4gKyAgKQ0KPiArew0KPiArICByZXR1 cm4gTG9va3VwVW5pY29kZVN0cmluZzIgKA0KPiArICAgICAgICAgICBMYW5ndWFnZSwNCj4gKyAg ICAgICAgICAgVGhpcy0+U3VwcG9ydGVkTGFuZ3VhZ2VzLA0KPiArICAgICAgICAgICBnVXNiUm5k aXNEcml2ZXJOYW1lVGFibGUsDQo+ICsgICAgICAgICAgIERyaXZlck5hbWUsDQo+ICsgICAgICAg ICAgIChCT09MRUFOKShUaGlzID09ICZnVXNiUm5kaXNDb21wb25lbnROYW1lKQ0KPiArICAgICAg ICAgICApOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgUmV0cmlldmVzIGEgVW5pY29kZSBzdHJp bmcgdGhhdCBpcyB0aGUgdXNlciByZWFkYWJsZSBuYW1lIG9mIHRoZSBjb250cm9sbGVyDQo+ICsg IHRoYXQgaXMgYmVpbmcgbWFuYWdlZCBieSBhIGRyaXZlci4NCj4gKw0KPiArICBUaGlzIGZ1bmN0 aW9uIHJldHJpZXZlcyB0aGUgdXNlciByZWFkYWJsZSBuYW1lIG9mIHRoZSBjb250cm9sbGVyIHNw ZWNpZmllZCBieQ0KPiArICBDb250cm9sbGVySGFuZGxlIGFuZCBDaGlsZEhhbmRsZSBpbiB0aGUg Zm9ybSBvZiBhIFVuaWNvZGUgc3RyaW5nLiBJZiB0aGUNCj4gKyAgZHJpdmVyIHNwZWNpZmllZCBi eSBUaGlzIGhhcyBhIHVzZXIgcmVhZGFibGUgbmFtZSBpbiB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVk IGJ5DQo+ICsgIExhbmd1YWdlLCB0aGVuIGEgcG9pbnRlciB0byB0aGUgY29udHJvbGxlciBuYW1l IGlzIHJldHVybmVkIGluIENvbnRyb2xsZXJOYW1lLA0KPiArICBhbmQgRUZJX1NVQ0NFU1MgaXMg cmV0dXJuZWQuICBJZiB0aGUgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGlzIG5vdCBjdXJyZW50 bHkNCj4gKyAgbWFuYWdpbmcgdGhlIGNvbnRyb2xsZXIgc3BlY2lmaWVkIGJ5IENvbnRyb2xsZXJI YW5kbGUgYW5kIENoaWxkSGFuZGxlLA0KPiArICB0aGVuIEVGSV9VTlNVUFBPUlRFRCBpcyByZXR1 cm5lZC4gIElmIHRoZSBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMgZG9lcyBub3QNCj4gKyAgc3Vw cG9ydCB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5IExhbmd1YWdlLCB0aGVuIEVGSV9VTlNVUFBP UlRFRCBpcyByZXR1cm5lZC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAg ICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9DT01QT05FTlRfTkFNRTJfUFJPVE9DT0wgb3INCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX0NPTVBPTkVOVF9OQU1FX1BST1RPQ09M IGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dICBDb250cm9sbGVyICAgICAgICBUaGUgaGFuZGxl IG9mIGEgY29udHJvbGxlciB0aGF0IHRoZSBkcml2ZXINCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3BlY2lmaWVkIGJ5IFRoaXMgaXMgbWFuYWdpbmcuICBUaGlzIGhhbmRsZQ0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXMgdGhlIGNvbnRyb2xs ZXIgd2hvc2UgbmFtZSBpcyB0byBiZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm5lZC4NCj4gKyAgQHBhcmFtW2luXSAgQ2hpbGRIYW5kbGUgICAgICAgVGhlIGhhbmRs ZSBvZiB0aGUgY2hpbGQgY29udHJvbGxlciB0byByZXRyaWV2ZQ0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0aGUgbmFtZSBvZi4gIFRoaXMgaXMgYW4gb3B0aW9uYWwgcGFyYW1l dGVyIHRoYXQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF5IGJlIE5VTEwu ICBJdCB3aWxsIGJlIE5VTEwgZm9yIGRldmljZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkcml2ZXJzLiAgSXQgd2lsbCBhbHNvIGJlIE5VTEwgZm9yIGEgYnVzIGRyaXZlcnMN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCB3aXNoIHRvIHJldHJpZXZl IHRoZSBuYW1lIG9mIHRoZSBidXMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29udHJvbGxlci4gIEl0IHdpbGwgbm90IGJlIE5VTEwgZm9yIGEgYnVzDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGRyaXZlciB0aGF0IHdpc2hlcyB0byByZXRyaWV2ZSB0aGUg bmFtZSBvZiBhDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkIGNvbnRy b2xsZXIuDQo+ICsgIEBwYXJhbVtpbl0gIExhbmd1YWdlICAgICAgICAgIEEgcG9pbnRlciB0byBh IE51bGwtdGVybWluYXRlZCBBU0NJSSBzdHJpbmcNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYXJyYXkgaW5kaWNhdGluZyB0aGUgbGFuZ3VhZ2UuICBUaGlzIGlzIHRoZQ0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZSBvZiB0aGUgZHJpdmVyIG5h bWUgdGhhdCB0aGUgY2FsbGVyIGlzDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJlcXVlc3RpbmcsIGFuZCBpdCBtdXN0IG1hdGNoIG9uZSBvZiB0aGUNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VzIHNwZWNpZmllZCBpbiBTdXBwb3J0ZWRMYW5n dWFnZXMuIFRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2Yg bGFuZ3VhZ2VzIHN1cHBvcnRlZCBieSBhIGRyaXZlciBpcyB1cA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0byB0aGUgZHJpdmVyIHdyaXRlci4gTGFuZ3VhZ2UgaXMgc3BlY2lm aWVkIGluDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJGQyA0NjQ2IG9yIElT TyA2MzktMiBsYW5ndWFnZSBjb2RlIGZvcm1hdC4NCj4gKyAgQHBhcmFtW291dF0gQ29udHJvbGxl ck5hbWUgICAgQSBwb2ludGVyIHRvIHRoZSBVbmljb2RlIHN0cmluZyB0byByZXR1cm4uDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgVW5pY29kZSBzdHJpbmcgaXMgdGhl IG5hbWUgb2YgdGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xs ZXIgc3BlY2lmaWVkIGJ5IENvbnRyb2xsZXJIYW5kbGUgYW5kDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIENoaWxkSGFuZGxlIGluIHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFuZ3VhZ2UgZnJvbSB0aGUgcG9p bnQgb2YgdmlldyBvZiB0aGUgZHJpdmVyDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNwZWNpZmllZCBieSBUaGlzLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAg ICAgICAgIFRoZSBVbmljb2RlIHN0cmluZyBmb3IgdGhlIHVzZXIgcmVhZGFibGUgbmFtZSBpbg0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVk IGJ5IExhbmd1YWdlIGZvciB0aGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIHdhcyByZXR1cm5lZCBpbg0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBEcml2ZXJOYW1lLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElE X1BBUkFNRVRFUiBDb250cm9sbGVySGFuZGxlIGlzIG5vdCBhIHZhbGlkIEVGSV9IQU5ETEUuDQo+ ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIENoaWxkSGFuZGxlIGlzIG5vdCBOVUxM IGFuZCBpdCBpcyBub3QgYSB2YWxpZA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBFRklfSEFORExFLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBMYW5ndWFn ZSBpcyBOVUxMLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBDb250cm9sbGVy TmFtZSBpcyBOVUxMLg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBUaGUgZHJp dmVyIHNwZWNpZmllZCBieSBUaGlzIGlzIG5vdCBjdXJyZW50bHkNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbWFuYWdpbmcgdGhlIGNvbnRyb2xsZXIgc3BlY2lmaWVkIGJ5DQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUgYW5kIENo aWxkSGFuZGxlLg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBUaGUgZHJpdmVy IHNwZWNpZmllZCBieSBUaGlzIGRvZXMgbm90IHN1cHBvcnQNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFnZS4NCj4gKw0K PiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1VzYlJuZGlzQ29tcG9uZW50TmFt ZUdldENvbnRyb2xsZXJOYW1lICgNCj4gKyAgSU4gRUZJX0NPTVBPTkVOVF9OQU1FX1BST1RPQ09M ICAqVGhpcywNCj4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICBDb250cm9sbGVy LA0KPiArICBJTiBFRklfSEFORExFICAgICAgICAgICAgICAgICAgIENoaWxkSGFuZGxlICAgICAg ICBPUFRJT05BTCwNCj4gKyAgSU4gQ0hBUjggICAgICAgICAgICAgICAgICAgICAgICAqTGFuZ3Vh Z2UsDQo+ICsgIE9VVCBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgKipDb250cm9sbGVyTmFt ZQ0KPiArICApDQo+ICt7DQo+ICsgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+ICt9DQo+IGRp ZmYgLS1naXQgYS9Vc2JOZXR3b3JrUGtnL1VzYlJuZGlzL1VzYlJuZGlzLmMgYi9Vc2JOZXR3b3Jr UGtnL1VzYlJuZGlzL1VzYlJuZGlzLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXgg MDAwMDAwMDAwMDAwLi45MjgzMDc3MWU0MDgNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9Vc2JO ZXR3b3JrUGtnL1VzYlJuZGlzL1VzYlJuZGlzLmMNCj4gQEAgLTAsMCArMSw4ODYgQEANCj4gKy8q KiBAZmlsZQ0KPiArICBUaGlzIGZpbGUgY29udGFpbnMgY29kZSBmb3IgVVNCIFJlbW90ZSBOZXR3 b3JrIERyaXZlcg0KPiArICBJbnRlcmZhY2UgU3BlYy4gRHJpdmVyIEJpbmRpbmcNCj4gKw0KPiAr ICBDb3B5cmlnaHQgKGMpIDIwMjMsIEFtZXJpY2FuIE1lZ2F0cmVuZHMgSW50ZXJuYXRpb25hbCBM TEMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiArICBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiArKiovDQo+ICsNCj4gKyNpbmNsdWRlICJVc2JSbmRp cy5oIg0KPiArDQo+ICtFRklfRFJJVkVSX0JJTkRJTkdfUFJPVE9DT0wgIGdVc2JSbmRpc0RyaXZl ckJpbmRpbmcgPSB7DQo+ICsgIFVzYlJuZGlzRHJpdmVyU3VwcG9ydGVkLA0KPiArICBVc2JSbmRp c0RyaXZlclN0YXJ0LA0KPiArICBVc2JSbmRpc0RyaXZlclN0b3AsDQo+ICsgIFVTQl9STkRJU19E UklWRVJfVkVSU0lPTiwNCj4gKyAgTlVMTCwNCj4gKyAgTlVMTA0KPiArfTsNCj4gKw0KPiArLyoq DQo+ICsgIENoZWNrIGlmIHRoaXMgaW50ZXJmYWNlIGlzIFVTQiBSbmRpcyBTdWJUeXBlDQo+ICsN Cj4gKyAgQHBhcmFtW2luXSAgVXNiSW8gIEEgcG9pbnRlciB0byB0aGUgRUZJX1VTQl9JT19QUk9U T0NPTCBpbnN0YW5jZS4NCj4gKw0KPiArICBAcmV0dmFsIFRSVUUgICBVU0IgUm5kaXMgU3ViVHlw ZS4NCj4gKyAgQHJldHZhbCBGQUxTRSAgTm90IFVTQiBSbmRpcyBTdWJUeXBlLg0KPiArDQo+ICsq Ki8NCj4gK0JPT0xFQU4NCj4gK0lzU3VwcG9ydGVkRGV2aWNlICgNCj4gKyAgSU4gRUZJX1VTQl9J T19QUk9UT0NPTCAgKlVzYklvDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAg ICAgICAgICAgICAgU3RhdHVzOw0KPiArICBFRklfVVNCX0lOVEVSRkFDRV9ERVNDUklQVE9SICBJ bnRlcmZhY2VEZXNjcmlwdG9yOw0KPiArDQo+ICsgIFN0YXR1cyA9IFVzYklvLT5Vc2JHZXRJbnRl cmZhY2VEZXNjcmlwdG9yIChVc2JJbywgJkludGVyZmFjZURlc2NyaXB0b3IpOw0KPiArICBpZiAo RUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiArICB9DQo+ICsN Cj4gKyAgLy8gQ2hlY2sgc3BlY2lmaWMgZGV2aWNlL1JORElTIGFuZCBDREMtREFUQQ0KPiArICBp ZiAoKChJbnRlcmZhY2VEZXNjcmlwdG9yLkludGVyZmFjZUNsYXNzID09IDB4MikgJiYNCj4gKyAg ICAgICAoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VTdWJDbGFzcyA9PSAweDIpICYmDQo+ ICsgICAgICAgKEludGVyZmFjZURlc2NyaXB0b3IuSW50ZXJmYWNlUHJvdG9jb2wgPT0gMHhGRikp IHx8IFwNCj4gKyAgICAgICgoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VDbGFzcyA9PSAw eEVGKSAmJg0KPiArICAgICAgIChJbnRlcmZhY2VEZXNjcmlwdG9yLkludGVyZmFjZVN1YkNsYXNz ID09IDB4NCkgJiYNCj4gKyAgICAgICAoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VQcm90 b2NvbCA9PSAweDEpKSB8fCBcDQo+ICsgICAgICAoKEludGVyZmFjZURlc2NyaXB0b3IuSW50ZXJm YWNlQ2xhc3MgPT0gMHhBKSAmJg0KPiArICAgICAgIChJbnRlcmZhY2VEZXNjcmlwdG9yLkludGVy ZmFjZVN1YkNsYXNzID09IDB4MCkgJiYNCj4gKyAgICAgICAoSW50ZXJmYWNlRGVzY3JpcHRvci5J bnRlcmZhY2VQcm90b2NvbCA9PSAweDAwKSkNCj4gKyAgICAgICkNCj4gKyAgew0KPiArICAgIHJl dHVybiBUUlVFOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIEZBTFNFOw0KPiArfQ0KPiArDQo+ ICsvKioNCj4gKyAgQ2hlY2sgaWYgdGhpcyBpbnRlcmZhY2UgaXMgVVNCIFJuZGlzIFN1YlR5cGUg YnV0IG5vdCBDREMgRGF0YSBpbnRlcmZhY2UNCj4gKw0KPiArICBAcGFyYW1baW5dICBVc2JJbyAg QSBwb2ludGVyIHRvIHRoZSBFRklfVVNCX0lPX1BST1RPQ09MIGluc3RhbmNlLg0KPiArDQo+ICsg IEByZXR2YWwgVFJVRSAgIFVTQiBSbmRpcyBTdWJUeXBlLg0KPiArICBAcmV0dmFsIEZBTFNFICBO b3QgVVNCIFJuZGlzIFN1YlR5cGUuDQo+ICsqKi8NCj4gK0JPT0xFQU4NCj4gK0lzUm5kaXNJbnRl cmZhY2UgKA0KPiArICBJTiBFRklfVVNCX0lPX1BST1RPQ09MICAqVXNiSW8NCj4gKyAgKQ0KPiAr ew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIEVGSV9V U0JfSU5URVJGQUNFX0RFU0NSSVBUT1IgIEludGVyZmFjZURlc2NyaXB0b3I7DQo+ICsNCj4gKyAg U3RhdHVzID0gVXNiSW8tPlVzYkdldEludGVyZmFjZURlc2NyaXB0b3IgKFVzYklvLCAmSW50ZXJm YWNlRGVzY3JpcHRvcik7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBy ZXR1cm4gRkFMU0U7DQo+ICsgIH0NCj4gKw0KPiArICAvLyBDaGVjayBmb3Igc3BlY2lmaWMgZGV2 aWNlL1JORElTIGFuZCBDREMtREFUQQ0KPiArICBpZiAoKChJbnRlcmZhY2VEZXNjcmlwdG9yLklu dGVyZmFjZUNsYXNzID09IDB4MikgJiYNCj4gKyAgICAgICAoSW50ZXJmYWNlRGVzY3JpcHRvci5J bnRlcmZhY2VTdWJDbGFzcyA9PSAweDIpICYmDQo+ICsgICAgICAgKEludGVyZmFjZURlc2NyaXB0 b3IuSW50ZXJmYWNlUHJvdG9jb2wgPT0gMHhGRikpIHx8IFwNCj4gKyAgICAgICgoSW50ZXJmYWNl RGVzY3JpcHRvci5JbnRlcmZhY2VDbGFzcyA9PSAweEVGKSAmJg0KPiArICAgICAgIChJbnRlcmZh Y2VEZXNjcmlwdG9yLkludGVyZmFjZVN1YkNsYXNzID09IDB4NCkgJiYNCj4gKyAgICAgICAoSW50 ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VQcm90b2NvbCA9PSAweDEpKQ0KPiArICAgICAgKQ0K PiArICB7DQo+ICsgICAgcmV0dXJuIFRSVUU7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gRkFM U0U7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBDaGVjayBpZiB0aGUgVVNCIFJORElTIGFuZCBV U0IgQ0RDIERhdGEgaW50ZXJmYWNlcyBhcmUgZnJvbSB0aGUgc2FtZSBkZXZpY2UuDQo+ICsNCj4g KyAgQHBhcmFtW2luXSAgVXNiUm5kaXNEYXRhUGF0aCAgQSBwb2ludGVyIHRvIHRoZSBFRklfREVW SUNFX1BBVEhfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gIFVzYkNkY0RhdGFQ YXRoICAgIEEgcG9pbnRlciB0byB0aGUgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MIGluc3RhbmNl Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIElzIHRoZSBzYW1lIGRl dmljZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgSXMgbm90IHRoZSBzYW1l IGRldmljZS4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtJc1NhbWVEZXZpY2UgKA0K PiArICBJTiAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAqVXNiUm5kaXNEYXRhUGF0aCwNCj4g KyAgSU4gIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgKlVzYkNkY0RhdGFQYXRoDQo+ICsgICkN Cj4gK3sNCj4gKyAgREVCVUcgKChERUJVR19WRVJCT1NFLCAiSXNTYW1lRGV2aWNlIEVudHJ5IFxu IikpOw0KPiArICB3aGlsZSAoMSkgew0KPiArICAgIGlmIChJc0RldmljZVBhdGhFbmQgKE5leHRE ZXZpY2VQYXRoTm9kZSAoVXNiUm5kaXNEYXRhUGF0aCkpKSB7DQo+ICsgICAgICBpZiAoKChVU0Jf REVWSUNFX1BBVEggKilVc2JSbmRpc0RhdGFQYXRoKS0+UGFyZW50UG9ydE51bWJlciA9PQ0KPiAr ICAgICAgICAgICgoVVNCX0RFVklDRV9QQVRIICopVXNiQ2RjRGF0YVBhdGgpLT5QYXJlbnRQb3J0 TnVtYmVyKQ0KPiArICAgICAgew0KPiArICAgICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICsg ICAgICB9IGVsc2Ugew0KPiArICAgICAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiArICAg ICAgfQ0KPiArICAgIH0gZWxzZSB7DQo+ICsgICAgICBpZiAoQ29tcGFyZU1lbSAoVXNiQ2RjRGF0 YVBhdGgsIFVzYlJuZGlzRGF0YVBhdGgsIHNpemVvZiAoRUZJX0RFVklDRV9QQVRIX1BST1RPQ09M KSkgIT0gMCkgew0KPiArICAgICAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiArICAgICAg fQ0KPiArDQo+ICsgICAgICBVc2JSbmRpc0RhdGFQYXRoID0gTmV4dERldmljZVBhdGhOb2RlIChV c2JSbmRpc0RhdGFQYXRoKTsNCj4gKyAgICAgIFVzYkNkY0RhdGFQYXRoICAgPSBOZXh0RGV2aWNl UGF0aE5vZGUgKFVzYkNkY0RhdGFQYXRoKTsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICBE RUJVRyAoKERFQlVHX1ZFUkJPU0UsICJJc1NhbWVEZXZpY2UgRXhpdCBcbiIpKTsNCj4gK30NCj4g Kw0KPiArLyoqDQo+ICsgIENoZWNrIGlmIHRoZSBVU0IgQ0RDIERhdGEoVXNiSW8pIGluc3RhbGxl ZCBhbmQgcmV0dXJuIFVTQiBDREMgRGF0YSBIYW5kbGUuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAg VXNiSW8gIEEgcG9pbnRlciB0byB0aGUgRUZJX1VTQl9JT19QUk9UT0NPTCBpbnN0YW5jZS4NCj4g Kw0KPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgICAgIFVTQiBDREMgRGF0YShVc2JJbykgaW5z dGFsbGVkLg0KPiArICBAcmV0dmFsIEZBTFNFICAgICAgICAgICAgIFVTQiBDREMgRGF0YShVc2JJ bykgZGlkIG5vdCBpbnN0YWxsZWQuDQo+ICsNCj4gKyoqLw0KPiArQk9PTEVBTg0KPiArSXNVc2JD ZGNEYXRhICgNCj4gKyAgSU4gRUZJX1VTQl9JT19QUk9UT0NPTCAgKlVzYklvDQo+ICsgICkNCj4g K3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBFRklf VVNCX0lOVEVSRkFDRV9ERVNDUklQVE9SICBJbnRlcmZhY2VEZXNjcmlwdG9yOw0KPiArDQo+ICsg IFN0YXR1cyA9IFVzYklvLT5Vc2JHZXRJbnRlcmZhY2VEZXNjcmlwdG9yIChVc2JJbywgJkludGVy ZmFjZURlc2NyaXB0b3IpOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAg cmV0dXJuIEZBTFNFOw0KPiArICB9DQo+ICsNCj4gKyAgLy8gQ2hlY2sgZm9yIENEQy1EQVRBDQo+ ICsgIGlmICgoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VDbGFzcyA9PSAweEEpICYmDQo+ ICsgICAgICAoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VTdWJDbGFzcyA9PSAweDApICYm DQo+ICsgICAgICAoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VQcm90b2NvbCA9PSAweDAp KQ0KPiArICB7DQo+ICsgICAgcmV0dXJuIFRSVUU7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4g RkFMU0U7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBDaGVjayBpZiB0aGUgVVNCIFJuZGlzKFVz YklvKSBpbnN0YWxsZWQNCj4gKw0KPiArICBAcGFyYW1baW5dICBVc2JJbyAgICAgICAgQSBwb2lu dGVyIHRvIHRoZSBFRklfVVNCX0lPX1BST1RPQ09MIGluc3RhbmNlLg0KPiArDQo+ICsgIEByZXR2 YWwgVFJVRSAgICAgICAgICAgICAgVVNCIFJuZGlzKFVzYklvKSBpbnN0YWxsZWQuDQo+ICsgIEBy ZXR2YWwgRkFMU0UgICAgICAgICAgICAgVVNCIFJuZGlzKFVzYklvKSBkaWQgbm90IGluc3RhbGxl ZC4NCj4gKw0KPiArKiovDQo+ICtCT09MRUFODQo+ICtJc1VzYlJuZGlzICgNCj4gKyAgSU4gRUZJ X1VTQl9JT19QUk9UT0NPTCAgKlVzYklvDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAg ICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBFRklfVVNCX0lOVEVSRkFDRV9ERVNDUklQ VE9SICBJbnRlcmZhY2VEZXNjcmlwdG9yOw0KPiArDQo+ICsgIFN0YXR1cyA9IFVzYklvLT5Vc2JH ZXRJbnRlcmZhY2VEZXNjcmlwdG9yIChVc2JJbywgJkludGVyZmFjZURlc2NyaXB0b3IpOw0KPiAr ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiArICB9 DQo+ICsNCj4gKyAgLy8gQ2hlY2sgZm9yIFJuZGlzDQo+ICsgIGlmICgoSW50ZXJmYWNlRGVzY3Jp cHRvci5JbnRlcmZhY2VDbGFzcyA9PSAweDIpICYmDQo+ICsgICAgICAoSW50ZXJmYWNlRGVzY3Jp cHRvci5JbnRlcmZhY2VTdWJDbGFzcyA9PSAweDIpICYmDQo+ICsgICAgICAoSW50ZXJmYWNlRGVz Y3JpcHRvci5JbnRlcmZhY2VQcm90b2NvbCA9PSAweEZGKSkNCj4gKyAgew0KPiArICAgIHJldHVy biBUUlVFOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIEZBTFNFOw0KPiArfQ0KPiArDQo+ICsv KioNCj4gKyAgQ29udHJvbCBjb21lcyBoZXJlIHdoZW4gYSBDREMgZGV2aWNlIGlzIGZvdW5kLkNo ZWNrIGlmIGEgUk5ESVMgaW50ZXJmYWNlIGlzIGFscmVhZHkgZm91bmQgZm9yIHRoaXMgZGV2aWNl IG9yIG5vdC4NCj4gKyAgRm9yIG9uZSBkZXZpY2UgdHdvIFVTQklPIHdpbGwgYmUgaW5zdGFsbGVk IGVhY2ggZm9yIENEQyBhbmQgUk5ESVMgaW50ZXJmYWNlLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0g IFVzYkV0aFBhdGggICAgICAgIEEgcG9pbnRlciB0byB0aGUgRUZJX0RFVklDRV9QQVRIX1BST1RP Q09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1bb3V0XSBVc2JSbmRpc0RldmljZSAgICBBIHBvaW50 ZXIgdG8gdGhlIFVTQl9STkRJU19ERVZJQ0UgRGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9T VUNDRVNTICAgICAgICAgICAgIFRoZSBVU0JfUk5ESVNfREVWSUNFIG1hdGNoaW5nIHRoaXMgQ0RD IERhdGEgaXMgZm91bmQuDQo+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICAgVGhl IFVTQl9STkRJU19ERVZJQ0UgbWF0Y2hpbmcgdGhpcyBDREMgRGF0YSBpcyBub3QgZm91bmQuDQo+ ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArVXBkYXRlUm5kaXNEZXZpY2UgKA0KPiArICBJ TiAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAqVXNiQ2RjRGF0YVBhdGgsDQo+ICsgIE9VVCBV U0JfUk5ESVNfREVWSUNFICAgICAgICAgICoqVXNiUm5kaXNEZXZpY2UNCj4gKyAgKQ0KPiArew0K PiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgVUlOVE4gICAg ICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAg ICAgICBIYW5kbGVDb3VudDsNCj4gKyAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAqSGFu ZGxlQnVmZmVyOw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpVc2JFdGhEZXZp Y2U7DQo+ICsgIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgKlVzYlJuZGlzRGF0YVBhdGg7 DQo+ICsgIEVGSV9VU0JfSU9fUFJPVE9DT0wgICAgICAgICAgKlVzYklvOw0KPiArICBCT09MRUFO ICAgICAgICAgICAgICAgICAgICAgIElzUm5kaXNJbnRlcmZhY2VGbGFnOw0KPiArDQo+ICsgIElz Um5kaXNJbnRlcmZhY2VGbGFnID0gRkFMU0U7DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5Mb2Nh dGVIYW5kbGVCdWZmZXIgKA0KPiArICAgICAgICAgICAgICAgICAgQnlQcm90b2NvbCwNCj4gKyAg ICAgICAgICAgICAgICAgICZnRWRrSUlVc2JFdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAg ICAgICAgICBOVUxMLA0KPiArICAgICAgICAgICAgICAgICAgJkhhbmRsZUNvdW50LA0KPiArICAg ICAgICAgICAgICAgICAgJkhhbmRsZUJ1ZmZlcg0KPiArICAgICAgICAgICAgICAgICAgKTsNCj4g KyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsg IH0NCj4gKw0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBIYW5kbGVDb3VudDsgSW5kZXgr Kykgew0KPiArICAgIFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9jb2wgKA0KPiArICAgICAgICAg ICAgICAgICAgICBIYW5kbGVCdWZmZXJbSW5kZXhdLA0KPiArICAgICAgICAgICAgICAgICAgICAm Z0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgICAoVk9JRCAq KikmVXNiRXRoRGV2aWNlDQo+ICsgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgICAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgY29udGludWU7DQo+ICsgICAgfQ0KPiArDQo+ ICsgICAgU3RhdHVzID0gZ0JTLT5IYW5kbGVQcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgICAg ICAgIEhhbmRsZUJ1ZmZlcltJbmRleF0sDQo+ICsgICAgICAgICAgICAgICAgICAgICZnRWZpVXNi SW9Qcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAgIChWT0lEICoqKSZVc2JJbw0K PiArICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gKyAgICAgIGNvbnRpbnVlOw0KPiArICAgIH0NCj4gKw0KPiArICAgIElzUm5kaXNJbnRl cmZhY2VGbGFnID0gSXNSbmRpc0ludGVyZmFjZSAoVXNiSW8pOw0KPiArICAgIGlmIChJc1JuZGlz SW50ZXJmYWNlRmxhZyA9PSBGQUxTRSkgew0KPiArICAgICAgY29udGludWU7DQo+ICsgICAgfQ0K PiArDQo+ICsgICAgU3RhdHVzID0gZ0JTLT5IYW5kbGVQcm90b2NvbCAoDQo+ICsgICAgICAgICAg ICAgICAgICAgIEhhbmRsZUJ1ZmZlcltJbmRleF0sDQo+ICsgICAgICAgICAgICAgICAgICAgICZn RWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgKFZPSUQg KiopJlVzYlJuZGlzRGF0YVBhdGgNCj4gKyAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBjb250aW51ZTsNCj4gKyAgICB9DQo+ ICsNCj4gKyAgICBTdGF0dXMgPSBJc1NhbWVEZXZpY2UgKFVzYlJuZGlzRGF0YVBhdGgsIFVzYkNk Y0RhdGFQYXRoKTsNCj4gKw0KPiArICAgIERFQlVHICgoREVCVUdfVkVSQk9TRSwgIlJuZGlzIElz U2FtZURldmljZSAlclxuIiwgU3RhdHVzKSk7DQo+ICsNCj4gKyAgICBpZiAoIUVGSV9FUlJPUiAo U3RhdHVzKSkgew0KPiArICAgICAgKlVzYlJuZGlzRGV2aWNlID0gVVNCX1JORElTX0RFVklDRV9G Uk9NX1RISVMgKFVzYkV0aERldmljZSk7DQo+ICsgICAgICBGcmVlUG9vbCAoSGFuZGxlQnVmZmVy KTsNCj4gKyAgICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gKyAgICB9DQo+ICsgIH0gICAvLyBF bmQgb2YgRm9yIGxvb3ANCj4gKw0KPiArICBGcmVlUG9vbCAoSGFuZGxlQnVmZmVyKTsNCj4gKyAg cmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArDQo+ICsgIEZvciB0 aGUgZ2l2ZW4gUm5kaXMgRGV2aWNlLCBmaW5kIGEgbWF0Y2hpbmcgQ0RDIGRldmljZSBhbHJlYWR5 IGV4aXN0cyBvciBub3QuIElmIGZvdW5kIHVwZGF0ZSB0aGUgaGFuZGxlDQo+ICsgIGFuZCBVc2JJ TyBwcm90b2NvbC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBVc2JSbmRpc0RldmljZSAgICAgICAg QSBwb2ludGVyIHRvIHRoZSBVU0JfUk5ESVNfREVWSUNFIGRhdGEuDQo+ICsNCj4gKyoqLw0KPiAr Vk9JRA0KPiArRmluZE1hdGNoaW5nQ2RjRGF0YSAoDQo+ICsgIElOIFVTQl9STkRJU19ERVZJQ0Ug ICpVc2JSbmRpc0RldmljZQ0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAg ICAgICAgU3RhdHVzOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiAr ICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIEhhbmRsZUNvdW50Ow0KPiArICBFRklfSEFORExF ICAgICAgICAgICAgICAgICpIYW5kbGVCdWZmZXI7DQo+ICsgIEVGSV9VU0JfSU9fUFJPVE9DT0wg ICAgICAgKlVzYklvOw0KPiArICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICpVc2JSbmRpc0Rh dGFQYXRoOw0KPiArICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICpVc2JDZGNEYXRhUGF0aDsN Cj4gKw0KPiArICAvLyBGaW5kIHRoZSBwYXJlbnQgUk5ESVMgYW5kIHVwZGF0ZSB0aGUgVXNiSW8g Zm9yIHRoZSBDREMgZGV2aWNlDQo+ICsgIFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9jb2wgKA0K PiArICAgICAgICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPlVzYlJuZGlzSGFuZGxlLA0KPiAr ICAgICAgICAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAg ICAgICAgICAgICAgKFZPSUQgKiopJlVzYlJuZGlzRGF0YVBhdGgNCj4gKyAgICAgICAgICAgICAg ICAgICk7DQo+ICsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVy bjsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+TG9jYXRlSGFuZGxlQnVmZmVyICgN Cj4gKyAgICAgICAgICAgICAgICAgIEJ5UHJvdG9jb2wsDQo+ICsgICAgICAgICAgICAgICAgICAm Z0VmaVVzYklvUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgTlVMTCwNCj4gKyAg ICAgICAgICAgICAgICAgICZIYW5kbGVDb3VudCwNCj4gKyAgICAgICAgICAgICAgICAgICZIYW5k bGVCdWZmZXINCj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0 YXR1cykpIHsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBmb3IgKEluZGV4ID0g MDsgSW5kZXggPCBIYW5kbGVDb3VudDsgSW5kZXgrKykgew0KPiArICAgIFN0YXR1cyA9IGdCUy0+ SGFuZGxlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgICAgICAgICBIYW5kbGVCdWZmZXJbSW5k ZXhdLA0KPiArICAgICAgICAgICAgICAgICAgICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlkLA0KPiAr ICAgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmVXNiSW8NCj4gKyAgICAgICAgICAgICAgICAg ICAgKTsNCj4gKyAgICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiArDQo+ICsgICAgaWYg KElzVXNiQ2RjRGF0YSAoVXNiSW8pKSB7DQo+ICsgICAgICBERUJVRyAoKERFQlVHX1ZFUkJPU0Us ICJSbmRpcyBGaW5kTWF0Y2hpbmdDZGNEYXRhIENEQ0RhdGEgaW50ZXJmYWNlIGZvdW5kXG4iKSk7 DQo+ICsNCj4gKyAgICAgIFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9jb2wgKA0KPiArICAgICAg ICAgICAgICAgICAgICAgIEhhbmRsZUJ1ZmZlcltJbmRleF0sDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAg ICAgIChWT0lEICoqKSZVc2JDZGNEYXRhUGF0aA0KPiArICAgICAgICAgICAgICAgICAgICAgICk7 DQo+ICsgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICAgIERFQlVHICgo REVCVUdfVkVSQk9TRSwgIlJuZGlzIENEQ0RhdGEgRGV2aWNlUGF0aCBub3QgZm91bmRcbiIpKTsN Cj4gKyAgICAgICAgRnJlZVBvb2wgKEhhbmRsZUJ1ZmZlcik7DQo+ICsgICAgICAgIHJldHVybjsN Cj4gKyAgICAgIH0NCj4gKw0KPiArICAgICAgU3RhdHVzID0gSXNTYW1lRGV2aWNlIChVc2JSbmRp c0RhdGFQYXRoLCBVc2JDZGNEYXRhUGF0aCk7DQo+ICsgICAgICBERUJVRyAoKERFQlVHX1ZFUkJP U0UsICJSbmRpcyBJc1NhbWVEZXZpY2UgJXJcbiIsIFN0YXR1cykpOw0KPiArICAgICAgaWYgKCFF RklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgICAgVXNiUm5kaXNEZXZpY2UtPlVzYkNkY0Rh dGFIYW5kbGUgPSBIYW5kbGVCdWZmZXJbSW5kZXhdOw0KPiArICAgICAgICBVc2JSbmRpc0Rldmlj ZS0+VXNiSW9DZGNEYXRhICAgICA9IFVzYklvOw0KPiArICAgICAgICBHZXRFbmRwb2ludCAoVXNi Um5kaXNEZXZpY2UtPlVzYklvQ2RjRGF0YSwgVXNiUm5kaXNEZXZpY2UpOw0KPiArICAgICAgICBG cmVlUG9vbCAoSGFuZGxlQnVmZmVyKTsNCj4gKyAgICAgICAgcmV0dXJuOw0KPiArICAgICAgfQ0K PiArICAgIH0NCj4gKyAgfSAgIC8vIEVuZCBvZiBGb3IgbG9vcA0KPiArDQo+ICsgIEZyZWVQb29s IChIYW5kbGVCdWZmZXIpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKw0KPiArICBGb3IgdGhlIGdp dmVuIFVzYklvIENkY0RhdGEsIGZpbmQgYSBtYXRjaGluZyBSTkRJUyBkZXZpY2UgYWxyZWFkeSBl eGlzdHMgb3Igbm90Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkY0hhbmRsZSAgICAgICBBIHBv aW50ZXIgdG8gdGhlIEVGSV9IQU5ETEUgZm9yIFVTQiBDREMgRGF0YS4NCj4gKyAgQHBhcmFtW291 dF0gQ2RjVXNiSW8gICAgICAgIEEgcG9pbnRlciBmb3IgcmV0cmlldmUgdGhlIEVGSV9VU0JfSU9f UFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtvdXRdIFJuZGlzSGFuZGxlICAgICBBIHBv aW50ZXIgZm9yIHJldHJpZXZlIHRoZSBoYW5kbGUgb2YgUk5ESVMgZGV2aWNlLg0KPiArDQo+ICsg IEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgVGhlIFVTQl9STkRJU19ERVZJQ0UgbWF0 Y2hpbmcgdGhpcyBDREMgRGF0YSBpcyBmb3VuZC4NCj4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5E ICAgICAgICAgICBUaGUgVVNCX1JORElTX0RFVklDRSBtYXRjaGluZyB0aGlzIENEQyBEYXRhIGlz IG5vdCBmb3VuZC4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0Zp bmRNYXRjaGluZ1JuZGlzRGV2ICgNCj4gKyAgSU4gIEVGSV9IQU5ETEUgICAgICAgICAgIENkY0hh bmRsZSwNCj4gKyAgT1VUIEVGSV9VU0JfSU9fUFJPVE9DT0wgICoqQ2RjVXNiSW8sDQo+ICsgIE9V VCBFRklfSEFORExFICAgICAgICAgICAqUm5kaXNIYW5kbGUNCj4gKyAgKQ0KPiArew0KPiArICBF RklfU1RBVFVTICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgVUlOVE4gICAgICAgICAgICAg ICAgICAgICBJbmRleDsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBIYW5kbGVDb3Vu dDsNCj4gKyAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAqSGFuZGxlQnVmZmVyOw0KPiArICBF RklfVVNCX0lPX1BST1RPQ09MICAgICAgICpVc2JJbzsNCj4gKyAgRUZJX0RFVklDRV9QQVRIX1BS T1RPQ09MICAqVXNiUm5kaXNEYXRhUGF0aDsNCj4gKyAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09M ICAqVXNiQ2RjRGF0YVBhdGg7DQo+ICsNCj4gKyAgLy8gRmluZCB0aGUgcGFyZW50IFJORElTIGFu ZCB1cGRhdGUgdGhlIFVzYklvIGZvciB0aGUgQ0RDIGRldmljZQ0KPiArICBTdGF0dXMgPSBnQlMt PkhhbmRsZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgICAgICAgIENkY0hhbmRsZSwNCj4gKyAg ICAgICAgICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAg ICAgICAgICAgIChWT0lEICoqKSZVc2JDZGNEYXRhUGF0aA0KPiArICAgICAgICAgICAgICAgICAg KTsNCj4gKw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0 YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+TG9jYXRlSGFuZGxlQnVmZmVy ICgNCj4gKyAgICAgICAgICAgICAgICAgIEJ5UHJvdG9jb2wsDQo+ICsgICAgICAgICAgICAgICAg ICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgTlVMTCwNCj4g KyAgICAgICAgICAgICAgICAgICZIYW5kbGVDb3VudCwNCj4gKyAgICAgICAgICAgICAgICAgICZI YW5kbGVCdWZmZXINCj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgZm9y IChJbmRleCA9IDA7IEluZGV4IDwgSGFuZGxlQ291bnQ7IEluZGV4KyspIHsNCj4gKyAgICBTdGF0 dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgICAgICAgICAgSGFuZGxl QnVmZmVyW0luZGV4XSwNCj4gKyAgICAgICAgICAgICAgICAgICAgJmdFZmlVc2JJb1Byb3RvY29s R3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgKFZPSUQgKiopJlVzYklvDQo+ICsgICAgICAg ICAgICAgICAgICAgICk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAg ICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBpZiAoSXNVc2JSbmRpcyAo VXNiSW8pKSB7DQo+ICsgICAgICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sICgNCj4gKyAg ICAgICAgICAgICAgICAgICAgICBIYW5kbGVCdWZmZXJbSW5kZXhdLA0KPiArICAgICAgICAgICAg ICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAoVk9JRCAqKikmVXNiUm5kaXNEYXRhUGF0aA0KPiArICAgICAgICAgICAgICAgICAg ICAgICk7DQo+ICsgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICAgIERF QlVHICgoREVCVUdfRVJST1IsICJVc2IgUm5kaXMgRGV2aWNlUGF0aCBub3QgZm91bmRcbiIpKTsN Cj4gKyAgICAgICAgYnJlYWs7DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIFN0YXR1cyA9IElz U2FtZURldmljZSAoVXNiUm5kaXNEYXRhUGF0aCwgVXNiQ2RjRGF0YVBhdGgpOw0KPiArDQo+ICsg ICAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgICAqUm5kaXNIYW5kbGUg PSBIYW5kbGVCdWZmZXJbSW5kZXhdOw0KPiArICAgICAgICAqQ2RjVXNiSW8gICAgPSBVc2JJbzsN Cj4gKyAgICAgICAgRnJlZVBvb2wgKEhhbmRsZUJ1ZmZlcik7DQo+ICsgICAgICAgIHJldHVybiBT dGF0dXM7DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArICB9ICAgLy8gRW5kIG9mIEZvciBsb29w DQo+ICsNCj4gKyAgRnJlZVBvb2wgKEhhbmRsZUJ1ZmZlcik7DQo+ICsNCj4gKyAgcmV0dXJuIEVG SV9OT1RfRk9VTkQ7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBVU0IgUm5kaXMgRHJpdmVyIEJp bmRpbmcgU3VwcG9ydC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICAg ICAgICBQcm90b2NvbCBpbnN0YW5jZSBwb2ludGVyLg0KPiArICBAcGFyYW1baW5dICBDb250cm9s bGVySGFuZGxlICAgICAgICBIYW5kbGUgb2YgZGV2aWNlIHRvIHRlc3QuDQo+ICsgIEBwYXJhbVtp bl0gIFJlbWFpbmluZ0RldmljZVBhdGggICAgIE9wdGlvbmFsIHBhcmFtZXRlciB1c2UgdG8gcGlj ayBhIHNwZWNpZmljIGNoaWxkDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGRldmljZSB0byBzdGFydC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAg ICAgICAgICAgICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGlzIGRldmljZS4NCj4gKyAgQHJldHZh bCBFRklfQUxSRUFEWV9TVEFSVEVEICAgICAgICAgVGhpcyBkcml2ZXIgaXMgYWxyZWFkeSBydW5u aW5nIG9uIHRoaXMgZGV2aWNlLg0KPiArICBAcmV0dmFsIG90aGVyICAgICAgICAgICAgICAgICAg ICAgICBUaGlzIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZGV2aWNlLg0KPiArDQo+ICsq Ki8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArVXNiUm5kaXNEcml2ZXJTdXBwb3J0ZWQg KA0KPiArICBJTiBFRklfRFJJVkVSX0JJTkRJTkdfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiBF RklfSEFORExFICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgIElOIEVG SV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgKlJlbWFpbmluZ0RldmljZVBhdGgNCj4gKyAgKQ0K PiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICBTdGF0dXM7DQo+ICsgIEVGSV9VU0JfSU9f UFJPVE9DT0wgICpVc2JJbzsNCj4gKw0KPiArICBTdGF0dXMgPSBnQlMtPk9wZW5Qcm90b2NvbCAo DQo+ICsgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAg ICAgICAgJmdFZmlVc2JJb1Byb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgIChWT0lE ICoqKSZVc2JJbywNCj4gKyAgICAgICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5k bGUsDQo+ICsgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAg ICAgICAgICAgRUZJX09QRU5fUFJPVE9DT0xfQllfRFJJVkVSDQo+ICsgICAgICAgICAgICAgICAg ICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1 czsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IElzU3VwcG9ydGVkRGV2aWNlIChVc2JJbykg PyBFRklfU1VDQ0VTUyA6IEVGSV9VTlNVUFBPUlRFRDsNCj4gKw0KPiArICBnQlMtPkNsb3NlUHJv dG9jb2wgKA0KPiArICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICZnRWZp VXNiSW9Qcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxl LA0KPiArICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAgKTsNCj4gKyAgcmV0 dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFVTQiBSTkRJUyBEcml2ZXIgQmlu ZGluZyBTdGFydC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICAgICAg ICBQcm90b2NvbCBpbnN0YW5jZSBwb2ludGVyLg0KPiArICBAcGFyYW1baW5dICBDb250cm9sbGVy SGFuZGxlICAgICAgICBIYW5kbGUgb2YgZGV2aWNlIHRvIGJpbmQgZHJpdmVyIHRvLg0KPiArICBA cGFyYW1baW5dICBSZW1haW5pbmdEZXZpY2VQYXRoICAgICBPcHRpb25hbCBwYXJhbWV0ZXIgdXNl IHRvIHBpY2sgYSBzcGVjaWZpYyBjaGlsZA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBkZXZpY2UgdG8gc3RhcnQuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VT UyAgICAgICAgICAgICAgICAgVGhpcyBkcml2ZXIgaXMgYWRkZWQgdG8gQ29udHJvbGxlckhhbmRs ZQ0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICAgICAgICBUaGlzIGRyaXZlciBj b3VsZCBub3QgYmUgc3RhcnRlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3INCj4gKyAgQHJldHZhbCBF RklfT1VUX09GX1JFU09VUkNFUyAgICAgICAgVGhlIGRyaXZlciBjb3VsZCBub3QgaW5zdGFsbCBz dWNjZXNzZnVsbHkgZHVlIHRvIGEgbGFjayBvZiByZXNvdXJjZXMuDQo+ICsgIEByZXR2YWwgb3Ro ZXIgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgdGhp cyBkZXZpY2UNCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1VzYlJu ZGlzRHJpdmVyU3RhcnQgKA0KPiArICBJTiBFRklfRFJJVkVSX0JJTkRJTkdfUFJPVE9DT0wgICpU aGlzLA0KPiArICBJTiBFRklfSEFORExFICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5k bGUsDQo+ICsgIElOIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgKlJlbWFpbmluZ0Rldmlj ZVBhdGgNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICBT dGF0dXM7DQo+ICsgIFVTQl9STkRJU19ERVZJQ0UgICAgICAgICAgICAgICpVc2JSbmRpc0Rldmlj ZTsNCj4gKyAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAgKlVzYkV0aFBhdGg7DQo+ICsg IEVGSV9VU0JfSU9fUFJPVE9DT0wgICAgICAgICAgICpVc2JJbzsNCj4gKyAgRUZJX1VTQl9JTlRF UkZBQ0VfREVTQ1JJUFRPUiAgSW50ZXJmYWNlOw0KPiArICBFRklfSEFORExFICAgICAgICAgICAg ICAgICAgICBSbmRpc0hhbmRsZTsNCj4gKw0KPiArICBSbmRpc0hhbmRsZSA9IENvbnRyb2xsZXJI YW5kbGU7DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wgKA0KPiArICAgICAg ICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICZnRWZp VXNiSW9Qcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmVXNiSW8s DQo+ICsgICAgICAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAg ICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgIEVG SV9PUEVOX1BST1RPQ09MX0JZX0RSSVZFUg0KPiArICAgICAgICAgICAgICAgICAgKTsNCj4gKyAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0N Cj4gKw0KPiArICBTdGF0dXMgPSBnQlMtPk9wZW5Qcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAg ICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgJmdFZmlEZXZpY2VQ YXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgKFZPSUQgKiopJlVzYkV0aFBh dGgsDQo+ICsgICAgICAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiAr ICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAg IEVGSV9PUEVOX1BST1RPQ09MX0JZX0RSSVZFUg0KPiArICAgICAgICAgICAgICAgICAgKTsNCj4g KyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAo DQo+ICsgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICZnRWZpVXNi SW9Qcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUs DQo+ICsgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgICAgICAgICAgKTsNCj4gKyAg ICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgZ0JTLT5DbG9zZVByb3RvY29sICgN Cj4gKyAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAmZ0VmaURldmljZVBh dGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0K PiArICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAgKTsNCj4gKw0KPiArICAv LyBDb250cm9scyBjb21lIGhlcmUgZm9yIFJORElTIGFuZCBDREMuIElmIGl0IGlzIENEQywgY2hl Y2sgd2hldGhlciBSTkRJUyBpcyBwcmVzZW50IG9uIHRoZSBzYW1lIGNvbnRyb2xsZXIgb3Igbm90 Lg0KPiArICBpZiAoSXNVc2JDZGNEYXRhIChVc2JJbykpIHsNCj4gKyAgICBERUJVRyAoKERFQlVH X0lORk8sICJSbmRpcyBDRENEYXRhIGludGVyZmFjZSBmb3VuZFxuIikpOw0KPiArDQo+ICsgICAg Ly8gRmluZCB0aGUgcGFyZW50IFJORElTIGFuZCB1cGRhdGUgdGhlIFVzYklvIGZvciB0aGUgQ0RD IGRldmljZQ0KPiArICAgIFN0YXR1cyA9IFVwZGF0ZVJuZGlzRGV2aWNlICgNCj4gKyAgICAgICAg ICAgICAgIFVzYkV0aFBhdGgsDQo+ICsgICAgICAgICAgICAgICAmVXNiUm5kaXNEZXZpY2UNCj4g KyAgICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KPiArICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiUm5kaXMgTWF0Y2hpbmcgaW50ZXJmYWNl IGZvdW5kXG4iKSk7DQo+ICsgICAgICBVc2JSbmRpc0RldmljZS0+VXNiQ2RjRGF0YUhhbmRsZSA9 IENvbnRyb2xsZXJIYW5kbGU7DQo+ICsgICAgICBVc2JSbmRpc0RldmljZS0+VXNiSW9DZGNEYXRh ICAgICA9IFVzYklvOw0KPiArICAgICAgR2V0RW5kcG9pbnQgKFVzYlJuZGlzRGV2aWNlLT5Vc2JJ b0NkY0RhdGEsIFVzYlJuZGlzRGV2aWNlKTsNCj4gKyAgICAgIHJldHVybiBTdGF0dXM7DQo+ICsg ICAgfSBlbHNlIHsNCj4gKyAgICAgIC8vIENoZWNrIGlmIFJuRGlzIGV4aXN0DQo+ICsgICAgICBT dGF0dXMgPSBGaW5kTWF0Y2hpbmdSbmRpc0RldiAoDQo+ICsgICAgICAgICAgICAgICAgIENvbnRy b2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICZVc2JJbywNCj4gKyAgICAgICAgICAg ICAgICAgJlJuZGlzSGFuZGxlDQo+ICsgICAgICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgICAg IGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgICAgZ0JTLT5DbG9zZVByb3RvY29s ICgNCj4gKyAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAg ICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgVGhpcy0+RHJpdmVy QmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAg ICAgICAgICAgICAgICk7DQo+ICsgICAgICAgIHJldHVybiBTdGF0dXM7DQo+ICsgICAgICB9DQo+ ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgVXNiUm5kaXNEZXZpY2UgPSBBbGxvY2F0ZVplcm9Q b29sIChzaXplb2YgKFVTQl9STkRJU19ERVZJQ0UpKTsNCj4gKw0KPiArICBpZiAoIVVzYlJuZGlz RGV2aWNlKSB7DQo+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkFsbG9jYXRlWmVyb1Bvb2wg RmFpbFxuIikpOw0KPiArDQo+ICsgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAgICAg ICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgJmdFZmlVc2JJb1Byb3RvY29sR3Vp ZCwNCj4gKyAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAg ICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAgICApOw0KPiArICAgIHJldHVybiBFRklf T1VUX09GX1JFU09VUkNFUzsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IExvYWRBbGxEZXNj cmlwdG9yICgNCj4gKyAgICAgICAgICAgICBVc2JJbywNCj4gKyAgICAgICAgICAgICAmVXNiUm5k aXNEZXZpY2UtPkNvbmZpZw0KPiArICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6TG9hZEFsbERlc2Ny aXB0b3Igc3RhdHVzID0gJXJcbiIsIF9fRlVOQ1RJT05fXywgU3RhdHVzKSk7DQo+ICsgICAgZ0JT LT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAg ICAgICAgICAgJmdFZmlVc2JJb1Byb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgVGhpcy0+RHJp dmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAg ICAgICAgICApOw0KPiArICAgIEZyZWVQb29sIChVc2JSbmRpc0RldmljZSk7DQo+ICsgICAgcmV0 dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IFVzYklvLT5Vc2JHZXRJbnRl cmZhY2VEZXNjcmlwdG9yICgNCj4gKyAgICAgICAgICAgICAgICAgICAgVXNiSW8sDQo+ICsgICAg ICAgICAgICAgICAgICAgICZJbnRlcmZhY2UNCj4gKyAgICAgICAgICAgICAgICAgICAgKTsNCj4g KyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIERFQlVHICgoREVCVUdfRVJST1Is ICIlYTpVc2JHZXRJbnRlcmZhY2VEZXNjcmlwdG9yIHN0YXR1cyA9ICVyXG4iLCBfX0ZVTkNUSU9O X18sIFN0YXR1cykpOw0KPiArICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAgICAg IENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICZnRWZpVXNiSW9Qcm90b2NvbEd1aWQs DQo+ICsgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAg IENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgICAgICAgICAgKTsNCj4gKyAgICBGcmVlUG9vbCAoVXNi Um5kaXNEZXZpY2UtPkNvbmZpZyk7DQo+ICsgICAgRnJlZVBvb2wgKFVzYlJuZGlzRGV2aWNlKTsN Cj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgVXNiUm5kaXNEZXZpY2Ut PlNpZ25hdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgPSBVU0JfUk5ESVNfU0lHTkFUVVJF Ow0KPiArICBVc2JSbmRpc0RldmljZS0+TnVtT2ZJbnRlcmZhY2UgICAgICAgICAgICAgICAgICAg ICA9IEludGVyZmFjZS5JbnRlcmZhY2VOdW1iZXI7DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JS bmRpc0hhbmRsZSAgICAgICAgICAgICAgICAgICAgID0gUm5kaXNIYW5kbGU7DQo+ICsgIFVzYlJu ZGlzRGV2aWNlLT5Vc2JDZGNEYXRhSGFuZGxlICAgICAgICAgICAgICAgICAgID0gMDsNCj4gKyAg VXNiUm5kaXNEZXZpY2UtPlVzYklvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBVc2JJ bzsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhSZWNlaXZlICAgICAgICAgICAg ICAgPSBSbmRpc1VuZGlSZWNlaXZlOw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0 aFRyYW5zbWl0ICAgICAgICAgICAgICA9IFJuZGlzVW5kaVRyYW5zbWl0Ow0KPiArICBVc2JSbmRp c0RldmljZS0+VXNiRXRoLlVzYkV0aEludGVycnVwdCAgICAgICAgICAgICA9IFVzYlJuZGlzSW50 ZXJydXB0Ow0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aE1hY0FkZHJlc3MgICAg ICAgICAgICA9IEdldFVzYkV0aE1hY0FkZHJlc3M7DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JF dGguVXNiRXRoTWF4QnVsa1NpemUgICAgICAgICAgID0gVXNiRXRoQnVsa1NpemU7DQo+ICsgIFVz YlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiSGVhZGVyRnVuRGVzY3JpcHRvciAgICAgID0gR2V0VXNi SGVhZGVyRnVuRGVzY3JpcHRvcjsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JVbmlv bkZ1bkRlc2NyaXB0b3IgICAgICAgPSBHZXRVc2JVbmlvbkZ1bkRlc2NyaXB0b3I7DQo+ICsgIFVz YlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoRnVuRGVzY3JpcHRvciAgICAgICAgID0gR2V0VXNi Um5kaXNGdW5EZXNjcmlwdG9yOw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlNldFVzYkV0 aE1jYXN0RmlsdGVyICAgICAgICA9IFNldFVzYlJuZGlzTWNhc3RGaWx0ZXI7DQo+ICsgIFVzYlJu ZGlzRGV2aWNlLT5Vc2JFdGguU2V0VXNiRXRoUG93ZXJQYXR0ZXJuRmlsdGVyID0gU2V0VXNiUm5k aXNQb3dlckZpbHRlcjsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5HZXRVc2JFdGhQb3dl clBhdHRlcm5GaWx0ZXIgPSBHZXRVc2JSbmRpc1Bvd2VyRmlsdGVyOw0KPiArICBVc2JSbmRpc0Rl dmljZS0+VXNiRXRoLlNldFVzYkV0aFBhY2tldEZpbHRlciAgICAgICA9IFNldFVzYlJuZGlzUGFj a2V0RmlsdGVyOw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLkdldFVzYkV0aFN0YXRpc3Rp YyAgICAgICAgICA9IEdldFJuZGlzU3RhdGlzdGljOw0KPiArDQo+ICsgIFVzYlJuZGlzRGV2aWNl LT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpR2V0U3RhdGUgICAgICAgID0gUm5kaXNEdW1t eVJldHVybjsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhVbmRpLlVzYkV0aFVu ZGlTdGFydCAgICAgICAgICAgPSBSbmRpc1VuZGlTdGFydDsNCj4gKyAgVXNiUm5kaXNEZXZpY2Ut PlVzYkV0aC5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlTdG9wICAgICAgICAgICAgPSBSbmRpc1VuZGlT dG9wOw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5kaUdl dEluaXRJbmZvICAgICA9IFJuZGlzVW5kaUdldEluaXRJbmZvOw0KPiArICBVc2JSbmRpc0Rldmlj ZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5kaUdldENvbmZpZ0luZm8gICA9IFJuZGlzVW5k aUdldENvbmZpZ0luZm87DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5V c2JFdGhVbmRpSW5pdGlhbGl6ZSAgICAgID0gUm5kaXNVbmRpSW5pdGlhbGl6ZTsNCj4gKyAgVXNi Um5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlSZXNldCAgICAgICAgICAg PSBSbmRpc1VuZGlSZXNldDsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhVbmRp LlVzYkV0aFVuZGlTaHV0ZG93biAgICAgICAgPSBSbmRpc1VuZGlTaHV0ZG93bjsNCj4gKyAgVXNi Um5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlJbnRlcnJ1cHRFbmFibGUg PSBSbmRpc0R1bW15UmV0dXJuOw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aFVu ZGkuVXNiRXRoVW5kaVJlY2VpdmVGaWx0ZXIgICA9IFJuZGlzVW5kaVJlY2VpdmVGaWx0ZXI7DQo+ ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpU3RhdGlvbkFk ZHJlc3MgID0gUm5kaXNEdW1teVJldHVybjsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5V c2JFdGhVbmRpLlVzYkV0aFVuZGlTdGF0aXN0aWNzICAgICAgPSBOVUxMOw0KPiArICBVc2JSbmRp c0RldmljZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5kaU1jYXN0SXAyTWFjICAgICA9IFJu ZGlzRHVtbXlSZXR1cm47DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5V c2JFdGhVbmRpTnZEYXRhICAgICAgICAgID0gUm5kaXNEdW1teVJldHVybjsNCj4gKyAgVXNiUm5k aXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlHZXRTdGF0dXMgICAgICAgPSBS bmRpc1VuZGlHZXRTdGF0dXM7DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5k aS5Vc2JFdGhVbmRpRmlsbEhlYWRlciAgICAgID0gUm5kaXNEdW1teVJldHVybjsNCj4gKyAgVXNi Um5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlUcmFuc21pdCAgICAgICAg PSBOVUxMOw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5k aVJlY2VpdmUgICAgICAgICA9IE5VTEw7DQo+ICsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPk1heFRy YW5zZmVyU2l6ZSAgICAgICA9IFJORElTX01BWF9UUkFOU0ZFUl9TSVpFOw0KPiArICBVc2JSbmRp c0RldmljZS0+TWF4UGFja2V0c1BlclRyYW5zZmVyID0gMTsNCj4gKyAgVXNiUm5kaXNEZXZpY2Ut PlBhY2tldEFsaWdubWVudEZhY3RvciA9IDA7DQo+ICsNCj4gKyAgSW5pdGlhbGl6ZUxpc3RIZWFk ICgmVXNiUm5kaXNEZXZpY2UtPlJlY2VpdmVQYWNrZXRMaXN0KTsNCj4gKw0KPiArICAvLyBUaGlz IGlzIGEgUk5ESVMgaW50ZXJmYWNlLiBTZWUgd2hldGhlciBDREMtREFUQSBpbnRlcmZhY2UgaGFz IGFscmVhZHkgYmVlbiBjb25uZWN0ZWQgb3Igbm90DQo+ICsgIEZpbmRNYXRjaGluZ0NkY0RhdGEg KFVzYlJuZGlzRGV2aWNlKTsNCj4gKw0KPiArICBpZiAoVXNiUm5kaXNEZXZpY2UtPlVzYklvQ2Rj RGF0YSkgew0KPiArICAgIFN0YXR1cyA9IGdCUy0+SW5zdGFsbFByb3RvY29sSW50ZXJmYWNlICgN Cj4gKyAgICAgICAgICAgICAgICAgICAgJkNvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAg ICAgICAgICAgICZnRWRrSUlVc2JFdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAg ICAgIEVGSV9OQVRJVkVfSU5URVJGQUNFLA0KPiArICAgICAgICAgICAgICAgICAgICAmKFVzYlJu ZGlzRGV2aWNlLT5Vc2JFdGgpDQo+ICsgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgICAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4g KyAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICZnRWZpVXNi SW9Qcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRs ZSwNCj4gKyAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ICsgICAgICAgICAgICAgKTsN Cj4gKw0KPiArICAgICAgRnJlZVBvb2wgKFVzYlJuZGlzRGV2aWNlLT5Db25maWcpOw0KPiArICAg ICAgRnJlZVBvb2wgKFVzYlJuZGlzRGV2aWNlKTsNCj4gKyAgICAgIHJldHVybiBTdGF0dXM7DQo+ ICsgICAgfQ0KPiArDQo+ICsgICAgR2V0RW5kcG9pbnQgKFVzYlJuZGlzRGV2aWNlLT5Vc2JJbywg VXNiUm5kaXNEZXZpY2UpOw0KPiArDQo+ICsgICAgREVCVUcgKChERUJVR19JTkZPLCAiUm5kaXMg RGV2aWNlSGFuZGxlICVyXG4iLCBVc2JSbmRpc0RldmljZS0+VXNiUm5kaXNIYW5kbGUpKTsNCj4g KyAgICBERUJVRyAoKERFQlVHX0lORk8sICJDREMgRGV2aWNlSGFuZGxlICVyXG4iLCBVc2JSbmRp c0RldmljZS0+VXNiQ2RjRGF0YUhhbmRsZSkpOw0KPiArICAgIHJldHVybiBFRklfU1VDQ0VTUzsN Cj4gKyAgfQ0KPiArDQo+ICsgIEZyZWVQb29sIChVc2JSbmRpc0RldmljZS0+Q29uZmlnKTsNCj4g KyAgRnJlZVBvb2wgKFVzYlJuZGlzRGV2aWNlKTsNCj4gKw0KPiArICByZXR1cm4gRUZJX1NVQ0NF U1M7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBDaGVja2FuZFN0b3BSbmRpc0RldmljZQ0KPiAr DQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICAgIFByb3RvY29sIGluc3RhbmNl IHBvaW50ZXIuDQo+ICsgIEBwYXJhbVtpbl0gIENvbnRyb2xsZXJIYW5kbGUgICAgIEhhbmRsZSBv ZiBkZXZpY2UgdG8gYmluZCBkcml2ZXIgdG8uDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VT UyAgICAgICAgICBUaGlzIGRyaXZlciBpcyBhZGRlZCB0byBDb250cm9sbGVySGFuZGxlDQo+ICsg IEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgVGhpcyBkcml2ZXIgY291bGQgbm90IGJlIHN0 YXJ0ZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yDQo+ICsgIEByZXR2YWwgb3RoZXIgICAgICAgICAg ICAgICAgVGhpcyBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGRldmljZQ0KPiArDQo+ICsq Ki8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArQ2hlY2thbmRTdG9wUm5kaXNEZXZpY2Ug KA0KPiArICBJTiAgRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4g IEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICApDQo+ ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgIFN0YXR1czsNCj4gKyAgRUZJX1VTQl9JT19Q Uk9UT0NPTCAgKlVzYklvOw0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+T3BlblByb3RvY29sICgN Cj4gKyAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAg ICAgICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgKFZPSUQg KiopJlVzYklvLA0KPiArICAgICAgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRs ZSwNCj4gKyAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAg ICAgICAgICBFRklfT1BFTl9QUk9UT0NPTF9HRVRfUFJPVE9DT0wNCj4gKyAgICAgICAgICAgICAg ICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4gU3Rh dHVzOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKElzVXNiUm5kaXMgKFVzYklvKSkgew0KPiArICAg IFN0YXR1cyA9IGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgICAgICAgIENv bnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAgICZnRWZpVXNiSW9Qcm90b2Nv bEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUs DQo+ICsgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgICAgICAgICAg ICAgICAgICAgKTsNCj4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiUm5kaXMgQ29udHJvbGxl ckhhbmRsZSBTdG9wICVyXG4iLCBTdGF0dXMpKTsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiAr ICB9DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gK30NCj4gKw0KPiArLyoq DQo+ICsgIFVTQiBSbmRpcyBEcml2ZXIgQmluZGluZyBTdG9wLg0KPiArDQo+ICsgIEBwYXJhbVtp bl0gIFRoaXMgICAgICAgICAgICAgICAgICBQcm90b2NvbCBpbnN0YW5jZSBwb2ludGVyLg0KPiAr ICBAcGFyYW1baW5dICBDb250cm9sbGVySGFuZGxlICAgICAgSGFuZGxlIG9mIGRldmljZSB0byBz dG9wIGRyaXZlciBvbg0KPiArICBAcGFyYW1baW5dICBOdW1iZXJPZkNoaWxkcmVuICAgICAgTnVt YmVyIG9mIEhhbmRsZXMgaW4gQ2hpbGRIYW5kbGVCdWZmZXIuIElmIG51bWJlciBvZg0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4gaXMgemVybyBzdG9wIHRo ZSBlbnRpcmUgYnVzIGRyaXZlci4NCj4gKyAgQHBhcmFtW2luXSAgQ2hpbGRIYW5kbGVCdWZmZXIg ICAgIExpc3Qgb2YgQ2hpbGQgSGFuZGxlcyB0byBTdG9wLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJ X1NVQ0NFU1MgICAgICAgICAgICAgICBUaGlzIGRyaXZlciBpcyByZW1vdmVkIENvbnRyb2xsZXJI YW5kbGUNCj4gKyAgQHJldHZhbCBvdGhlciAgICAgICAgICAgICAgICAgICAgIFRoaXMgZHJpdmVy IHdhcyBub3QgcmVtb3ZlZCBmcm9tIHRoaXMgZGV2aWNlDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NU QVRVUw0KPiArRUZJQVBJDQo+ICtVc2JSbmRpc0RyaXZlclN0b3AgKA0KPiArICBJTiAgRUZJX0RS SVZFUl9CSU5ESU5HX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gIEVGSV9IQU5ETEUgICAgICAg ICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgSU4gIFVJTlROICAgICAgICAgICAg ICAgICAgICAgICAgTnVtYmVyT2ZDaGlsZHJlbiwNCj4gKyAgSU4gIEVGSV9IQU5ETEUgICAgICAg ICAgICAgICAgICAgKkNoaWxkSGFuZGxlQnVmZmVyDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NU QVRVUyAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9Q Uk9UT0NPTCAgKlVzYkV0aFByb3RvY29sOw0KPiArICBVU0JfUk5ESVNfREVWSUNFICAgICAgICAg ICAgICpVc2JSbmRpc0RldmljZTsNCj4gKw0KPiArICBERUJVRyAoKERFQlVHX0lORk8sICJVc2JS bmRpc0RyaXZlclN0b3AgQ29udHJvbGxlckhhbmRsZSAlbHhcbiIsIENvbnRyb2xsZXJIYW5kbGUp KTsNCj4gKw0KPiArICBTdGF0dXMgPSBnQlMtPk9wZW5Qcm90b2NvbCAoDQo+ICsgICAgICAgICAg ICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgJmdFZGtJSVVz YkV0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgIChWT0lEICoqKSZVc2JFdGhQ cm90b2NvbCwNCj4gKyAgICAgICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUs DQo+ICsgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAg ICAgICAgRUZJX09QRU5fUFJPVE9DT0xfR0VUX1BST1RPQ09MDQo+ICsgICAgICAgICAgICAgICAg ICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgU3RhdHVzID0gQ2hl Y2thbmRTdG9wUm5kaXNEZXZpY2UgKFRoaXMsIENvbnRyb2xsZXJIYW5kbGUpOw0KPiArICAgIHJl dHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBVc2JSbmRpc0RldmljZSA9IFVTQl9STkRJ U19ERVZJQ0VfRlJPTV9USElTIChVc2JFdGhQcm90b2NvbCk7DQo+ICsNCj4gKyAgU3RhdHVzID0g Z0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNl LT5Vc2JDZGNEYXRhSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgJmdFZmlVc2JJb1Byb3Rv Y29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUs DQo+ICsgICAgICAgICAgICAgICAgICBVc2JSbmRpc0RldmljZS0+VXNiQ2RjRGF0YUhhbmRsZQ0K PiArICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K PiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTpDbG9zZVByb3RvY29sIHN0YXR1cyA9ICVy XG4iLCBfX0ZVTkNUSU9OX18sIFN0YXR1cykpOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0g Z0JTLT5Vbmluc3RhbGxQcm90b2NvbEludGVyZmFjZSAoDQo+ICsgICAgICAgICAgICAgICAgICBD b250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3Rv Y29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgIFVzYkV0aFByb3RvY29sDQo+ICsgICAgICAg ICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0 dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+Q2xvc2VQcm90b2Nv bCAoDQo+ICsgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAg ICAgICAgICAgJmdFZmlVc2JJb1Byb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgIFRo aXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICBDb250cm9sbGVy SGFuZGxlDQo+ICsgICAgICAgICAgICAgICAgICApOw0KPiArDQo+ICsgIEZyZWVQb29sIChVc2JS bmRpc0RldmljZS0+Q29uZmlnKTsNCj4gKyAgRnJlZVBvb2wgKFVzYlJuZGlzRGV2aWNlKTsNCj4g Kw0KPiArICBERUJVRyAoKERFQlVHX0lORk8sICJVc2JSbmRpc0RyaXZlclN0b3AgJXJcbiIsIFN0 YXR1cykpOw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgRW50 cnlwb2ludCBvZiBSTkRJUyBEcml2ZXIuDQo+ICsNCj4gKyAgVGhpcyBmdW5jdGlvbiBpcyB0aGUg ZW50cnlwb2ludCBvZiBSTkRJUyBEcml2ZXIuIEl0IGluc3RhbGxzIERyaXZlciBCaW5kaW5nDQo+ ICsgIFByb3RvY29scyB0b2dldGhlciB3aXRoIENvbXBvbmVudCBOYW1lIFByb3RvY29scy4NCj4g Kw0KPiArICBAcGFyYW1baW5dICBJbWFnZUhhbmRsZSAgICAgICBUaGUgZmlybXdhcmUgYWxsb2Nh dGVkIGhhbmRsZSBmb3IgdGhlIEVGSSBpbWFnZS4NCj4gKyAgQHBhcmFtW2luXSAgU3lzdGVtVGFi bGUgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRkkgU3lzdGVtIFRhYmxlLg0KPiArDQo+ICsgIEBy ZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBlbnRyeSBwb2ludCBpcyBleGVjdXRlZCBz dWNjZXNzZnVsbHkuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtV c2JSbmRpc0VudHJ5ICgNCj4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgSW1hZ2VIYW5kbGUsDQo+ ICsgIElOIEVGSV9TWVNURU1fVEFCTEUgICpTeXN0ZW1UYWJsZQ0KPiArICApDQo+ICt7DQo+ICsg IGdVc2JSbmRpc0RyaXZlckJpbmRpbmcuRHJpdmVyQmluZGluZ0hhbmRsZSA9IEltYWdlSGFuZGxl Ow0KPiArICBnVXNiUm5kaXNEcml2ZXJCaW5kaW5nLkltYWdlSGFuZGxlICAgICAgICAgPSBJbWFn ZUhhbmRsZTsNCj4gKw0KPiArICByZXR1cm4gZ0JTLT5JbnN0YWxsTXVsdGlwbGVQcm90b2NvbElu dGVyZmFjZXMgKA0KPiArICAgICAgICAgICAgICAgICZnVXNiUm5kaXNEcml2ZXJCaW5kaW5nLkRy aXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgJmdFZmlEcml2ZXJCaW5kaW5n UHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICZnVXNiUm5kaXNEcml2ZXJCaW5kaW5n LA0KPiArICAgICAgICAgICAgICAgICZnRWZpQ29tcG9uZW50TmFtZTJQcm90b2NvbEd1aWQsDQo+ ICsgICAgICAgICAgICAgICAgJmdVc2JSbmRpc0NvbXBvbmVudE5hbWUyLA0KPiArICAgICAgICAg ICAgICAgIE5VTEwNCj4gKyAgICAgICAgICAgICAgICApOw0KPiArfQ0KPiBkaWZmIC0tZ2l0IGEv VXNiTmV0d29ya1BrZy9Vc2JSbmRpcy9Vc2JSbmRpc0Z1bmN0aW9uLmMgYi9Vc2JOZXR3b3JrUGtn L1VzYlJuZGlzL1VzYlJuZGlzRnVuY3Rpb24uYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBp bmRleCAwMDAwMDAwMDAwMDAuLmUzZmU3MzdjZGVmMQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBi L1VzYk5ldHdvcmtQa2cvVXNiUm5kaXMvVXNiUm5kaXNGdW5jdGlvbi5jDQo+IEBAIC0wLDAgKzEs MTcxOCBAQA0KPiArLyoqIEBmaWxlDQo+ICsgIFRoaXMgZmlsZSBjb250YWlucyBjb2RlIGZvciBV U0IgRXRoZXJuZXQgZGVzY3JpcHRvcg0KPiArICBhbmQgc3BlY2lmaWMgcmVxdWVzdHMgaW1wbGVt ZW50Lg0KPiArDQo+ICsgIENvcHlyaWdodCAoYykgMjAyMywgQW1lcmljYW4gTWVnYXRyZW5kcyBJ bnRlcm5hdGlvbmFsIExMQy4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICsgIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ICsqKi8NCj4gKw0KPiArI2lu Y2x1ZGUgIlVzYlJuZGlzLmgiDQo+ICsNCj4gK1VJTlQxNiAgZ1N0b3BCdWxrSW5DbnQgID0gMDsN Cj4gK1VJTlQxNiAgZ0Jsb2NrQnVsa0luQ250ID0gMDsNCj4gKw0KPiArLyoqDQo+ICsgIExvYWQg QWxsIG9mIGRldmljZSBkZXNjcmlwdG9yLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFVzYklvICAg ICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9VU0JfSU9fUFJPVE9DT0wgaW5zdGFu Y2UuDQo+ICsgIEBwYXJhbVtvdXRdIENvbmZpZ0Rlc2MgICAgICAgICAgICBBIHBvaW50ZXIgdG8g dGhlIGNvbmZpZ3VyYXRpb24gZGVzY3JpcHRvci4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUND RVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEBy ZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgIFRoZSByZXF1ZXN0IGNvdWxkIG5vdCBiZSBjb21w bGV0ZWQgYmVjYXVzZSB0aGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVm ZmVyIHNwZWNpZmllZCBieSBEZXNjcmlwdG9yTGVuZ3RoIGFuZCBEZXNjcmlwdG9yDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIG5vdCBsYXJnZSBlbm91Z2ggdG8gaG9sZCB0 aGUgcmVzdWx0IG9mIHRoZSByZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAg ICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiArICBAcmV0 dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2 aWNlIGVycm9yLiBUaGUgdHJhbnNmZXINCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RhdHVzIGlzIHJldHVybmVkIGluIFN0YXR1cy4NCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0K PiArTG9hZEFsbERlc2NyaXB0b3IgKA0KPiArICBJTiAgRUZJX1VTQl9JT19QUk9UT0NPTCAgICAg ICAgKlVzYklvLA0KPiArICBPVVQgRUZJX1VTQl9DT05GSUdfREVTQ1JJUFRPUiAgKipDb25maWdE ZXNjDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgU3RhdHVz Ow0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICBUcmFuc1N0YXR1czsNCj4gKyAgRUZJ X1VTQl9DT05GSUdfREVTQ1JJUFRPUiAgVG1wOw0KPiArDQo+ICsgIFN0YXR1cyA9IFVzYklvLT5V c2JHZXRDb25maWdEZXNjcmlwdG9yIChVc2JJbywgJlRtcCk7DQo+ICsgIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6VXNiR2V0Q29uZmln RGVzY3JpcHRvciBzdGF0dXMgPSAlclxuIiwgX19GVU5DVElPTl9fLCBTdGF0dXMpKTsNCj4gKyAg ICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5BbGxvY2F0 ZVBvb2wgKA0KPiArICAgICAgICAgICAgICAgICAgRWZpQm9vdFNlcnZpY2VzRGF0YSwNCj4gKyAg ICAgICAgICAgICAgICAgIFRtcC5Ub3RhbExlbmd0aCwNCj4gKyAgICAgICAgICAgICAgICAgIChW T0lEICoqKUNvbmZpZ0Rlc2MNCj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6IEFsbG9j YXRlUG9vbCBzdGF0dXMgPSAlclxuIiwgX19GVU5DVElPTl9fLCBTdGF0dXMpKTsNCj4gKyAgICBy ZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gVXNiR2V0RGVzY3JpcHRv ciAoDQo+ICsgICAgICAgICAgICAgVXNiSW8sDQo+ICsgICAgICAgICAgICAgVVNCX0RFU0NfVFlQ RV9DT05GSUcgPDwgOCB8IChUbXAuQ29uZmlndXJhdGlvblZhbHVlIC0gMSksICAgICAgICAgICAg ICAgICAvLyB6ZXJvIGJhc2VkDQo+ICsgICAgICAgICAgICAgMCwNCj4gKyAgICAgICAgICAgICBU bXAuVG90YWxMZW5ndGgsDQo+ICsgICAgICAgICAgICAgKkNvbmZpZ0Rlc2MsDQo+ICsgICAgICAg ICAgICAgJlRyYW5zU3RhdHVzDQo+ICsgICAgICAgICAgICAgKTsNCj4gKyAgcmV0dXJuIFN0YXR1 czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFJldHVybnMgcG9pbnRlciB0byB0aGUgbmV4dCBk ZXNjcmlwdG9yIGZvciB0aGUgcGFjayBvZiBVU0IgZGVzY3JpcHRvcnMNCj4gKyAgbG9jYXRlZCBp biBjb250aW51ZXMgbWVtb3J5IHNlZ21lbnQNCj4gKw0KPiArICBAcGFyYW1baW5dICAgICAgRGVz YyAgIEEgcG9pbnRlciB0byB0aGUgQ09ORklHX0RFU0NSSVBUT1IgaW5zdGFuY2UuDQo+ICsgIEBw YXJhbVtpbiwgb3V0XSBPZmZzZXQgQSBwb2ludGVyIHRvIHRoZSBzdW0gb2YgZGVzY3JpcHRvciBs ZW5ndGguDQo+ICsNCj4gKyAgQHJldHZhbCBUUlVFICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3Vj Y2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEZBTFNFICBObyBuZXh0IGRlc2NyaXB0b3IuDQo+ICsN Cj4gKyoqLw0KPiArQk9PTEVBTg0KPiArTmV4dERlc2NyaXB0b3IgKA0KPiArICBJTiAgICAgIEVG SV9VU0JfQ09ORklHX0RFU0NSSVBUT1IgICpEZXNjLA0KPiArICBJTiBPVVQgIFVJTlROICAgICAg ICAgICAgICAgICAgICAgICpPZmZzZXQNCj4gKyAgKQ0KPiArew0KPiArICBpZiAoKERlc2MgPT0g TlVMTCkgfHwgKCpPZmZzZXQgPj0gRGVzYy0+VG90YWxMZW5ndGgpKSB7DQo+ICsgICAgcmV0dXJu IEZBTFNFOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKCgoRUZJX1VTQl9DT05GSUdfREVTQ1JJUFRP UiAqKSgoY2hhciAqKURlc2MrKk9mZnNldCkpLT5MZW5ndGggPT0gMCkgew0KPiArICAgIHJldHVy biBGQUxTRTsNCj4gKyAgfQ0KPiArDQo+ICsgICpPZmZzZXQgKz0gKChFRklfVVNCX0NPTkZJR19E RVNDUklQVE9SICopKChjaGFyICopRGVzYysqT2Zmc2V0KSktPkxlbmd0aDsNCj4gKyAgaWYgKCAq T2Zmc2V0ID49IERlc2MtPlRvdGFsTGVuZ3RoICkgew0KPiArICAgIHJldHVybiBGQUxTRTsNCj4g KyAgfQ0KPiArDQo+ICsgIHJldHVybiBUUlVFOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgUmVh ZCBGdW5jdGlvbiBkZXNjcmlwdG9yDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ29uZmlnICAgICAg ICAgICAgIEEgcG9pbnRlciB0byBhbGwgb2YgY29uZmlndXJhdGlvbi4NCj4gKyAgQHBhcmFtW2lu XSAgRnVuRGVzY3JpcHRvclR5cGUgIFVTQiBDREMgY2xhc3MgZGVzY3JpcHRvciBTdWJUeXBlLg0K PiArICBAcGFyYW1bb3V0XSBEYXRhQnVmZmVyICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBEYXRh IG9mIGNvcnJlc3BvbmRpbmcgdG8gZGV2aWNlIGNhcGFiaWxpdHkuDQo+ICsNCj4gKyAgQHJldHZh bCBFRklfU1VDQ0VTUyAgICAgICAgVGhlIGRldmljZSBjYXBhYmlsaXR5IGRlc2NyaXB0b3Igd2Fz IHJldHJpZXZlZA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzZnVsbHku DQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgIE5vIHN1cHBvcnRlZC4NCj4gKyAgQHJl dHZhbCBFRklfTk9UX0ZPVU5EICAgICAgVGhlIGRldmljZSBjYXBhYmlsaXR5IGRlc2NyaXB0b3Ig d2FzIG5vdCBmb3VuZC4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtHZXRGdW5jdGlv bmFsRGVzY3JpcHRvciAoDQo+ICsgIElOICBFRklfVVNCX0NPTkZJR19ERVNDUklQVE9SICAqQ29u ZmlnLA0KPiArICBJTiAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgRnVuRGVzY3JpcHRvclR5 cGUsDQo+ICsgIE9VVCBWT0lEICAgICAgICAgICAgICAgICAgICAgICAqRGF0YUJ1ZmZlcg0KPiAr ICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4g KyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgT2Zmc2V0Ow0KPiArICBFRklfVVNCX0lO VEVSRkFDRV9ERVNDUklQVE9SICAqSW50ZXJmYWNlOw0KPiArDQo+ICsgIFN0YXR1cyA9IEVGSV9O T1RfRk9VTkQ7DQo+ICsNCj4gKyAgZm9yIChPZmZzZXQgPSAwOyBOZXh0RGVzY3JpcHRvciAoQ29u ZmlnLCAmT2Zmc2V0KTspIHsNCj4gKyAgICBJbnRlcmZhY2UgPSAoRUZJX1VTQl9JTlRFUkZBQ0Vf REVTQ1JJUFRPUiAqKSgoVUlOVDggKilDb25maWcgKyBPZmZzZXQpOw0KPiArICAgIGlmIChJbnRl cmZhY2UtPkRlc2NyaXB0b3JUeXBlID09IENTX0lOVEVSRkFDRSkgew0KPiArICAgICAgaWYgKCgo VVNCX0hFQURFUl9GVU5fREVTQ1JJUFRPUiAqKUludGVyZmFjZSktPkRlc2NyaXB0b3JTdWJ0eXBl ID09IEZ1bkRlc2NyaXB0b3JUeXBlKSB7DQo+ICsgICAgICAgIHN3aXRjaCAoRnVuRGVzY3JpcHRv clR5cGUpIHsNCj4gKyAgICAgICAgICBjYXNlIEhFQURFUl9GVU5fREVTQ1JJUFRPUjoNCj4gKyAg ICAgICAgICAgIENvcHlNZW0gKA0KPiArICAgICAgICAgICAgICBEYXRhQnVmZmVyLA0KPiArICAg ICAgICAgICAgICAoVVNCX0hFQURFUl9GVU5fREVTQ1JJUFRPUiAqKUludGVyZmFjZSwNCj4gKyAg ICAgICAgICAgICAgc2l6ZW9mIChVU0JfSEVBREVSX0ZVTl9ERVNDUklQVE9SKQ0KPiArICAgICAg ICAgICAgICApOw0KPiArICAgICAgICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArICAgICAg ICAgIGNhc2UgVU5JT05fRlVOX0RFU0NSSVBUT1I6DQo+ICsgICAgICAgICAgICBDb3B5TWVtICgN Cj4gKyAgICAgICAgICAgICAgRGF0YUJ1ZmZlciwNCj4gKyAgICAgICAgICAgICAgKFVTQl9VTklP Tl9GVU5fREVTQ1JJUFRPUiAqKUludGVyZmFjZSwNCj4gKyAgICAgICAgICAgICAgKChVU0JfVU5J T05fRlVOX0RFU0NSSVBUT1IgKilJbnRlcmZhY2UpLT5GdW5jdGlvbkxlbmd0aA0KPiArICAgICAg ICAgICAgICApOw0KPiArICAgICAgICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArICAgICAg ICAgIGNhc2UgRVRIRVJORVRfRlVOX0RFU0NSSVBUT1I6DQo+ICsgICAgICAgICAgICBDb3B5TWVt ICgNCj4gKyAgICAgICAgICAgICAgRGF0YUJ1ZmZlciwNCj4gKyAgICAgICAgICAgICAgKFVTQl9F VEhFUk5FVF9GVU5fREVTQ1JJUFRPUiAqKUludGVyZmFjZSwNCj4gKyAgICAgICAgICAgICAgc2l6 ZW9mIChVU0JfRVRIRVJORVRfRlVOX0RFU0NSSVBUT1IpDQo+ICsgICAgICAgICAgICAgICk7DQo+ ICsgICAgICAgICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICsgICAgICAgICAgZGVmYXVsdDoN Cj4gKyAgICAgICAgICAgIFN0YXR1cyA9IEVGSV9VTlNVUFBPUlRFRDsNCj4gKyAgICAgICAgICAg IGJyZWFrOw0KPiArICAgICAgICB9DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArICB9DQo+ICsN Cj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIEdldCBVU0IgRXRo ZXJuZXQgSU8gZW5kcG9pbnQgYW5kIFVTQiBDREMgZGF0YSBJTyBlbmRwb2ludC4NCj4gKw0KPiAr ICBAcGFyYW1baW5dICAgICAgVXNiSW8gICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRUZJX1VT Ql9JT19QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luLCBvdXRdIFVzYlJuZGlzRGV2 aWNlICBBIHBvaW50ZXIgdG8gdGhlIFVTQl9STkRJU19ERVZJQ0UgaW5zdGFuY2UuDQo+ICsNCj4g KyoqLw0KPiArVk9JRA0KPiArR2V0RW5kcG9pbnQgKA0KPiArICBJTiAgICAgIEVGSV9VU0JfSU9f UFJPVE9DT0wgICpVc2JJbywNCj4gKyAgSU4gT1VUICBVU0JfUk5ESVNfREVWSUNFICAgICAqVXNi Um5kaXNEZXZpY2UNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAg ICAgICBTdGF0dXM7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0K PiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICBSZXN1bHQ7DQo+ICsgIEVGSV9VU0Jf SU5URVJGQUNFX0RFU0NSSVBUT1IgIEludGVyZmFjZTsNCj4gKyAgRUZJX1VTQl9FTkRQT0lOVF9E RVNDUklQVE9SICAgRW5kcG9pbnQ7DQo+ICsNCj4gKyAgU3RhdHVzID0gVXNiSW8tPlVzYkdldElu dGVyZmFjZURlc2NyaXB0b3IgKFVzYklvLCAmSW50ZXJmYWNlKTsNCj4gKyAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTpVc2JHZXRJbnRl cmZhY2VEZXNjcmlwdG9yIHN0YXR1cyA9ICVyXG4iLCBfX0ZVTkNUSU9OX18sIFN0YXR1cykpOw0K PiArICAgIHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChJbnRlcmZhY2UuTnVtRW5kcG9p bnRzID09IDAgKSB7DQo+ICsgICAgU3RhdHVzID0gVXNiU2V0SW50ZXJmYWNlIChVc2JJbywgMSwg MCwgJlJlc3VsdCk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAg REVCVUcgKChERUJVR19FUlJPUiwgIiVhOlVzYlNldEludGVyZmFjZSBzdGF0dXMgPSAlclxuIiwg X19GVU5DVElPTl9fLCBTdGF0dXMpKTsNCj4gKyAgICAgIHJldHVybjsNCj4gKyAgICB9DQo+ICsN Cj4gKyAgICBTdGF0dXMgPSBVc2JJby0+VXNiR2V0SW50ZXJmYWNlRGVzY3JpcHRvciAoVXNiSW8s ICZJbnRlcmZhY2UpOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAg IERFQlVHICgoREVCVUdfRVJST1IsICIlYTpVc2JHZXRJbnRlcmZhY2VEZXNjcmlwdG9yIHN0YXR1 cyA9ICVyXG4iLCBfX0ZVTkNUSU9OX18sIFN0YXR1cykpOw0KPiArICAgICAgcmV0dXJuOw0KPiAr ICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IEludGVyZmFj ZS5OdW1FbmRwb2ludHM7IEluZGV4KyspIHsNCj4gKyAgICBTdGF0dXMgPSBVc2JJby0+VXNiR2V0 RW5kcG9pbnREZXNjcmlwdG9yIChVc2JJbywgSW5kZXgsICZFbmRwb2ludCk7DQo+ICsgICAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVh OlVzYkdldEVuZHBvaW50RGVzY3JpcHRvciBzdGF0dXMgPSAlclxuIiwgX19GVU5DVElPTl9fLCBT dGF0dXMpKTsNCj4gKyAgICAgIHJldHVybjsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBzd2l0Y2gg KChFbmRwb2ludC5BdHRyaWJ1dGVzICYgKEJJVDAgfCBCSVQxKSkpIHsNCj4gKyAgICAgIGNhc2Ug VVNCX0VORFBPSU5UX0JVTEs6DQo+ICsgICAgICAgIGlmIChFbmRwb2ludC5FbmRwb2ludEFkZHJl c3MgJiBCSVQ3KSB7DQo+ICsgICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPkJ1bGtJbkVuZHBvaW50 ID0gRW5kcG9pbnQuRW5kcG9pbnRBZGRyZXNzOw0KPiArICAgICAgICB9IGVsc2Ugew0KPiArICAg ICAgICAgIFVzYlJuZGlzRGV2aWNlLT5CdWxrT3V0RW5kcG9pbnQgPSBFbmRwb2ludC5FbmRwb2lu dEFkZHJlc3M7DQo+ICsgICAgICAgIH0NCj4gKw0KPiArICAgICAgICBicmVhazsNCj4gKyAgICAg IGNhc2UgVVNCX0VORFBPSU5UX0lOVEVSUlVQVDoNCj4gKyAgICAgICAgVXNiUm5kaXNEZXZpY2Ut PkludGVycnVwRW5kcG9pbnQgPSBFbmRwb2ludC5FbmRwb2ludEFkZHJlc3M7DQo+ICsgICAgICAg IGJyZWFrOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgQXN5bmMg VVNCIHRyYW5zZmVyIGNhbGxiYWNrIHJvdXRpbmUuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgRGF0 YSAgICAgICAgICAgIERhdGEgcmVjZWl2ZWQgb3Igc2VudCB2aWEgdGhlIFVTQiBBc3luY2hyb25v dXMgVHJhbnNmZXIsIGlmIHRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJh bnNmZXIgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHBhcmFtW2luXSAgRGF0YUxlbmd0 aCAgICAgIFRoZSBsZW5ndGggb2YgRGF0YSByZWNlaXZlZCBvciBzZW50IHZpYSB0aGUgQXN5bmNo cm9ub3VzDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2ZlciwgaWYgdHJh bnNmZXIgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlcy4NCj4gKyAgQHBhcmFtW2luXSAgQ29udGV4dCAg ICAgICAgIERhdGEgcGFzc2VkIGZyb20gVXNiQXN5bmNJbnRlcnJ1cHRUcmFuc2ZlcigpIHJlcXVl c3QuDQo+ICsgIEBwYXJhbVtpbl0gIFN0YXR1cyAgICAgICAgICBJbmRpY2F0ZXMgdGhlIHJlc3Vs dCBvZiB0aGUgYXN5bmNocm9ub3VzIHRyYW5zZmVyLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NV Q0NFU1MgICAgICAgICAgIFRoZSBhc3luY2hyb25vdXMgVVNCIHRyYW5zZmVyIHJlcXVlc3QgaGFz IGJlZW4gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJS T1IgICAgICBUaGUgYXN5bmNocm9ub3VzIFVTQiB0cmFuc2ZlciByZXF1ZXN0IGZhaWxlZC4NCj4g Kw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0ludGVycnVwdENhbGxiYWNr ICgNCj4gKyAgSU4gIFZPSUQgICAgKkRhdGEsDQo+ICsgIElOICBVSU5UTiAgIERhdGFMZW5ndGgs DQo+ICsgIElOICBWT0lEICAgICpDb250ZXh0LA0KPiArICBJTiAgVUlOVDMyICBTdGF0dXMNCj4g KyAgKQ0KPiArew0KPiArICBpZiAoKERhdGEgPT0gTlVMTCkgfHwgKENvbnRleHQgPT0gTlVMTCkp IHsNCj4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiArICB9DQo+ICsNCj4g KyAgaWYgKCgoRUZJX1VTQl9ERVZJQ0VfUkVRVUVTVCAqKURhdGEpLT5SZXF1ZXN0ID09IDApIHsN Cj4gKyAgICBDb3B5TWVtICgNCj4gKyAgICAgIChFRklfVVNCX0RFVklDRV9SRVFVRVNUICopQ29u dGV4dCwNCj4gKyAgICAgIChFRklfVVNCX0RFVklDRV9SRVFVRVNUICopRGF0YSwNCj4gKyAgICAg IHNpemVvZiAoRUZJX1VTQl9ERVZJQ0VfUkVRVUVTVCkNCj4gKyAgICAgICk7DQo+ICsgIH0NCj4g Kw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlz IGZ1bmN0aW9uIGlzIHVzZWQgdG8gbWFuYWdlIGEgVVNCIGRldmljZSB3aXRoIGFuIGludGVycnVw dCB0cmFuc2ZlciBwaXBlLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAg IEEgcG9pbnRlciB0byB0aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGluc3RhbmNlLg0K PiArICBAcGFyYW1baW5dICBJc05ld1RyYW5zZmVyICAgICBJZiBUUlVFLCBhIG5ldyB0cmFuc2Zl ciB3aWxsIGJlIHN1Ym1pdHRlZCB0byBVU0IgY29udHJvbGxlci4gSWYNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRkFMU0UsIHRoZSBpbnRlcnJ1cHQgdHJhbnNmZXIgaXMgZGVs ZXRlZCBmcm9tIHRoZSBkZXZpY2UncyBpbnRlcnJ1cHQNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdHJhbnNmZXIgcXVldWUuDQo+ICsgIEBwYXJhbVtpbl0gIFBvbGxpbmdJbnRl cnZhbCAgIEluZGljYXRlcyB0aGUgcGVyaW9kaWMgcmF0ZSwgaW4gbWlsbGlzZWNvbmRzLCB0aGF0 IHRoZSB0cmFuc2ZlciBpcyB0byBiZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBleGVjdXRlZC5UaGlzIHBhcmFtZXRlciBpcyByZXF1aXJlZCB3aGVuIElzTmV3VHJhbnNmZXIg aXMgVFJVRS4gVGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIG11 c3QgYmUgYmV0d2VlbiAxIHRvIDI1NSwgb3RoZXJ3aXNlIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBp cyByZXR1cm5lZC4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHVuaXRz IGFyZSBpbiBtaWxsaXNlY29uZHMuDQo+ICsgIEBwYXJhbVtpbl0gIFJlcXVlc3QgICAgICAgICAg IEEgcG9pbnRlciB0byB0aGUgRUZJX1VTQl9ERVZJQ0VfUkVRVUVTVCBkYXRhLg0KPiArDQo+ICsg IEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBhc3luY2hyb25vdXMgVVNCIHRyYW5z ZmVyIHJlcXVlc3QgdHJhbnNmZXIgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLg0KPiAr ICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgYXN5bmNocm9ub3VzIFVTQiB0cmFu c2ZlciByZXF1ZXN0IGZhaWxlZC4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklB UEkNCj4gK1VzYlJuZGlzSW50ZXJydXB0ICgNCj4gKyAgSU4gRURLSUlfVVNCX0VUSEVSTkVUX1BS T1RPQ09MICAqVGhpcywNCj4gKyAgSU4gQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICBJc05l d1RyYW5zZmVyLA0KPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgIFBvbGxpbmdJ bnRlcnZhbCwNCj4gKyAgSU4gRUZJX1VTQl9ERVZJQ0VfUkVRVUVTVCAgICAgICAqUmVxdXN0DQo+ ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgU3RhdHVzOw0KPiArICBVU0JfUk5E SVNfREVWSUNFICAqVXNiUm5kaXNEZXZpY2U7DQo+ICsgIFVJTlROICAgICAgICAgICAgIERhdGFM ZW5ndGg7DQo+ICsNCj4gKyAgVXNiUm5kaXNEZXZpY2UgPSBVU0JfUk5ESVNfREVWSUNFX0ZST01f VEhJUyAoVGhpcyk7DQo+ICsgIERhdGFMZW5ndGggICAgID0gMDsNCj4gKw0KPiArICBpZiAoSXNO ZXdUcmFuc2ZlciA9PSBUUlVFKSB7DQo+ICsgICAgRGF0YUxlbmd0aCA9IHNpemVvZiAoRUZJX1VT Ql9ERVZJQ0VfUkVRVUVTVCkgKyBzaXplb2YgKFVTQl9DT05ORUNUX1NQRUVEX0NIQU5HRSk7DQo+ ICsgICAgU3RhdHVzICAgICA9IFVzYlJuZGlzRGV2aWNlLT5Vc2JJby0+VXNiQXN5bmNJbnRlcnJ1 cHRUcmFuc2ZlciAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBVc2JSbmRpc0RldmljZS0+VXNiSW8sDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBVc2JSbmRpc0RldmljZS0+SW50ZXJydXBFbmRwb2ludCwNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElzTmV3VHJhbnNmZXIsDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb2xsaW5nSW50ZXJ2YWws DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhTGVuZ3Ro LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJydXB0 Q2FsbGJhY2ssDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS ZXF1c3QNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ ICsNCj4gKyAgICBpZiAoU3RhdHVzID09IEVGSV9JTlZBTElEX1BBUkFNRVRFUikgew0KPiArICAg ICAgLy8gQmVjYXVzZSBvZiBTdGFja2VkIEFzeW5jSW50ZXJydXB0IHJlcXVlc3QgYXJlIG5vdCBz dXBwb3J0ZWQNCj4gKyAgICAgIFN0YXR1cyA9IFVzYlJuZGlzRGV2aWNlLT5Vc2JJby0+VXNiQXN5 bmNJbnRlcnJ1cHRUcmFuc2ZlciAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPlVzYklvLA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5JbnRlcnJ1cEVuZHBvaW50LA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAwLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE5VTEwsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTlVMTA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ ICsgICAgfQ0KPiArICB9IGVsc2Ugew0KPiArICAgIFN0YXR1cyA9IFVzYlJuZGlzRGV2aWNlLT5V c2JJby0+VXNiQXN5bmNJbnRlcnJ1cHRUcmFuc2ZlciAoDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5Vc2JJbywNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPkludGVycnVwRW5kcG9p bnQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElzTmV3VHJhbnNm ZXIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE5VTEwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8q Kg0KPiArICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmVhZCBVU0IgaW50ZXJydXB0IHRyYW5z ZmVyIGJlZm9yZSB0aGUgcmVzcG9uc2UgUk5ESVMgbWVzc2FnZS4NCj4gKw0KPiArICBAcGFyYW1b aW5dICBUaGlzICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIFVTQl9STkRJU19ERVZJQ0Ug aW5zdGFuY2UuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIFVT QiBpbnRlcnJ1cHQgdHJhbnNmZXIgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLg0KPiAr ICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgVVNCIGludGVycnVwdCB0cmFuc2Zl ciBmYWlsZWQuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtSZWFk Um5kaXNSZXNwb25zZUludGVycnVwdCAoDQo+ICsgIElOIFVTQl9STkRJU19ERVZJQ0UgICpVc2JS bmRpc0RldmljZQ0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gKyAg VUlOVDMyICAgICAgRGF0YVsyXTsNCj4gKyAgVUlOVDMyICAgICAgVXNiU3RhdHVzOw0KPiArICBV SU5UTiAgICAgICBEYXRhTGVuZ3RoOw0KPiArDQo+ICsgIERhdGFMZW5ndGggPSA4Ow0KPiArDQo+ ICsgIFplcm9NZW0gKERhdGEsIHNpemVvZiAoRGF0YSkpOw0KPiArDQo+ICsgIFN0YXR1cyA9IFVz YlJuZGlzRGV2aWNlLT5Vc2JJby0+VXNiU3luY0ludGVycnVwdFRyYW5zZmVyICgNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5Vc2JJbywNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5JbnRl cnJ1cEVuZHBvaW50LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkRh dGEsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRGF0YUxlbmd0aCwN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAsDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmVXNiU3RhdHVzDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICApOw0KPiArDQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9 DQo+ICsNCj4gKy8qKg0KPiArICBSZXRyaWV2ZXMgdGhlIFVTQiBFdGhlcm5ldCBNYWMgQWRkcmVz cy4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUg RURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1bb3V0XSBN YWNBZGRyZXNzICAgIEEgcG9pbnRlciB0byB0aGUgY2FsbGVyIGFsbG9jYXRlZCBVU0IgRXRoZXJu ZXQgTWFjIEFkZHJlc3MuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAg VGhlIFVTQiBIZWFkZXIgRnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcyByZXRyaWV2ZWQgc3VjY2Vz c2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBVc2JIZWFkZXJGdW5E ZXNjcmlwdG9yIGlzIE5VTEwuDQo+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgIFRo ZSBVU0IgSGVhZGVyIEZ1bmN0aW9uYWwgZGVzY3JpcHRvciB3YXMgbm90IGZvdW5kLg0KPiArDQo+ ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArR2V0VXNiRXRoTWFjQWRkcmVzcyAo DQo+ICsgIElOICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBPVVQg RUZJX01BQ19BRERSRVNTICAgICAgICAgICAgICAqTWFjQWRkcmVzcw0KPiArICApDQo+ICt7DQo+ ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBVU0JfUk5ESVNf REVWSUNFICAgICAgICAgICAgICpVc2JSbmRpc0RldmljZTsNCj4gKyAgVVNCX0VUSEVSTkVUX0ZV Tl9ERVNDUklQVE9SICBVc2JFdGhEZXNjcmlwdG9yOw0KPiArICBDSEFSMTYgICAgICAgICAgICAg ICAgICAgICAgICpEYXRhOw0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICpEYXRh UHRyOw0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgIFRtcFN0clsxXTsNCj4gKyAg VUlOVDggICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gKyAgVUlOVDggICAgICAgICAg ICAgICAgICAgICAgICBIaTsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICBMb3c7 DQo+ICsNCj4gKyAgUkVNT1RFX05ESVNfUVVFUllfTUFDX01TRyAgICBSbmRpc1F1ZXJ5TXNnOw0K PiArICBSRU1PVEVfTkRJU19RVUVSWV9NQUNfQ01QTFQgIFJuZGlzUXVlcnlNc2dDbXBsdDsNCj4g Kw0KPiArICBVc2JSbmRpc0RldmljZSA9IFVTQl9STkRJU19ERVZJQ0VfRlJPTV9USElTIChUaGlz KTsNCj4gKw0KPiArICBaZXJvTWVtICgmUm5kaXNRdWVyeU1zZywgc2l6ZW9mIChSRU1PVEVfTkRJ U19RVUVSWV9NQUNfTVNHKSk7DQo+ICsgIFplcm9NZW0gKCZSbmRpc1F1ZXJ5TXNnQ21wbHQsIHNp emVvZiAoUkVNT1RFX05ESVNfUVVFUllfTUFDX0NNUExUKSk7DQo+ICsNCj4gKyAgUm5kaXNRdWVy eU1zZy5RdWVyeU1zZy5NZXNzYWdlVHlwZSAgID0gUk5ESVNfUVVFUllfTVNHOw0KPiArICBSbmRp c1F1ZXJ5TXNnLlF1ZXJ5TXNnLk1lc3NhZ2VMZW5ndGggPSBzaXplb2YgKFJFTU9URV9ORElTX1FV RVJZX01BQ19NU0cpOw0KPiArICBSbmRpc1F1ZXJ5TXNnLlF1ZXJ5TXNnLlJlcXVlc3RJRCAgICAg PSBVc2JSbmRpc0RldmljZS0+UmVxdWVzdElkOw0KPiArICBSbmRpc1F1ZXJ5TXNnLlF1ZXJ5TXNn Lk9pZCAgICAgICAgICAgPSBPSURfODAyXzNfQ1VSUkVOVF9BRERSRVNTOw0KPiArDQo+ICsgIFJu ZGlzUXVlcnlNc2dDbXBsdC5RdWVyeUNtcGx0Lk1lc3NhZ2VUeXBlICAgPSBSTkRJU19RVUVSWV9D TVBMVDsNCj4gKyAgUm5kaXNRdWVyeU1zZ0NtcGx0LlF1ZXJ5Q21wbHQuTWVzc2FnZUxlbmd0aCA9 IHNpemVvZiAoUkVNT1RFX05ESVNfUVVFUllfTUFDX0NNUExUKTsNCj4gKw0KPiArICBTdGF0dXMg PSBSbmRpc0NvbnRyb2xNc2cgKA0KPiArICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLA0KPiAr ICAgICAgICAgICAgIChSRU1PVEVfTkRJU19NU0dfSEVBREVSICopJlJuZGlzUXVlcnlNc2csDQo+ ICsgICAgICAgICAgICAgKFJFTU9URV9ORElTX01TR19IRUFERVIgKikmUm5kaXNRdWVyeU1zZ0Nt cGx0DQo+ICsgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsN Cj4gKyAgICBERUJVRyAoKERFQlVHX0lORk8sICJTdWNjZXNzIHRvIGdldCBNYWMgYWRkcmVzcyBm cm9tIFJORElTIG1lc3NhZ2UuXG4iKSk7DQo+ICsgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwg UFhFX0hXQUREUl9MRU5fRVRIRVI7IEluZGV4KyspIHsNCj4gKyAgICAgIE1hY0FkZHJlc3MtPkFk ZHJbSW5kZXhdID0gUm5kaXNRdWVyeU1zZ0NtcGx0LkFkZHJbSW5kZXhdOw0KPiArICAgIH0NCj4g Kw0KPiArICAgIFVzYlJuZGlzRGV2aWNlLT5SZXF1ZXN0SWQrKzsNCj4gKyAgICByZXR1cm4gU3Rh dHVzOw0KPiArICB9DQo+ICsNCj4gKyAgLy8gSWYgaXQgaXMgbm90IHN1cHBvcnQgdGhlIE9JRF84 MDJfM19DVVJSRU5UX0FERFJFU1MuDQo+ICsgIC8vIFRvIGNoZWNrIFVTQiBFdGhlcm5ldCBmdW5j dGlvbmFsIERlc2NyaXB0b3INCj4gKyAgU3RhdHVzID0gVGhpcy0+VXNiRXRoRnVuRGVzY3JpcHRv ciAoVGhpcywgJlVzYkV0aERlc2NyaXB0b3IpOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOlVzYkV0aEZ1bkRlc2NyaXB0b3Ig c3RhdHVzID0gJXJcbiIsIF9fRlVOQ1RJT05fXywgU3RhdHVzKSk7DQo+ICsgICAgcmV0dXJuIFN0 YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IFVzYlJuZGlzRGV2aWNlLT5Vc2JJby0+ VXNiR2V0U3RyaW5nRGVzY3JpcHRvciAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBVc2JSbmRpc0RldmljZS0+VXNiSW8sDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAweDQwOSwgICAgICAgICAgICAgICAgICAgICAgIC8vIEVuZ2xpc2gtVVMg TGFuZ3VhZ2UgSUQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzYkV0 aERlc2NyaXB0b3IuTWFjQWRkcmVzcywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZEYXRhDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0K PiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgREVCVUcgKChERUJVR19FUlJP UiwgIiVhOlVzYkdldFN0cmluZ0Rlc2NyaXB0b3Igc3RhdHVzID0gJXJcbiIsIF9fRlVOQ1RJT05f XywgU3RhdHVzKSk7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIERh dGFQdHIgPSBEYXRhOw0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBQWEVfSFdBRERSX0xF Tl9FVEhFUjsgSW5kZXgrKykgew0KPiArICAgIENvcHlNZW0gKFRtcFN0ciwgRGF0YVB0ciwgc2l6 ZW9mIChDSEFSMTYpKTsNCj4gKyAgICBEYXRhUHRyKys7DQo+ICsgICAgSGkgPSAoVUlOVDgpU3Ry SGV4VG9VaW50biAoVG1wU3RyKTsNCj4gKyAgICBDb3B5TWVtIChUbXBTdHIsIERhdGFQdHIsIHNp emVvZiAoQ0hBUjE2KSk7DQo+ICsgICAgRGF0YVB0cisrOw0KPiArICAgIExvdyAgICAgICAgICAg ICAgICAgICAgID0gKFVJTlQ4KVN0ckhleFRvVWludG4gKFRtcFN0cik7DQo+ICsgICAgTWFjQWRk cmVzcy0+QWRkcltJbmRleF0gPSAoSGkgPDwgNCkgfCBMb3c7DQo+ICsgIH0NCj4gKw0KPiArICBy ZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgUmV0cmlldmVzIHRoZSBVU0Ig RXRoZXJuZXQgQnVsayB0cmFuc2ZlciBkYXRhIHNpemUuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAg VGhpcyAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NP TCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW291dF0gQnVsa1NpemUgICAgICBBIHBvaW50ZXIgdG8g dGhlIEJ1bGsgdHJhbnNmZXIgZGF0YSBzaXplLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NF U1MgICAgICAgVGhlIGJ1bGsgdHJhbnNmZXIgZGF0YSBzaXplIHdhcyByZXRyaWV2ZWQgc3VjY2Vz c2Z1bGx5Lg0KPiArICBAcmV0dmFsIG90aGVyICAgICAgICAgICAgIEZhaWxlZCB0byByZXRyaWV2 ZSB0aGUgYnVsayB0cmFuc2ZlciBkYXRhIHNpemUuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRV Uw0KPiArRUZJQVBJDQo+ICtVc2JFdGhCdWxrU2l6ZSAoDQo+ICsgIElOICBFREtJSV9VU0JfRVRI RVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBPVVQgVUlOVE4gICAgICAgICAgICAgICAgICAg ICAgICAqQnVsa1NpemUNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAg ICAgICAgIFN0YXR1czsNCj4gKyAgVVNCX0VUSEVSTkVUX0ZVTl9ERVNDUklQVE9SICBVc2JFdGhG dW5EZXNjcmlwdG9yOw0KPiArICBVU0JfUk5ESVNfREVWSUNFICAgICAgICAgICAgICpVc2JSbmRp c0RldmljZTsNCj4gKw0KPiArICBSRU1PVEVfTkRJU19RVUVSWV9NQVhfVE9UQUxfU0laRV9NU0cg ICAgUm5kaXNRdWVyeU1zZzsNCj4gKyAgUkVNT1RFX05ESVNfUVVFUllfTUFYX1RPVEFMX1NJWkVf Q01QTFQgIFJuZGlzUXVlcnlNc2dDbXBsdDsNCj4gKw0KPiArICBVc2JSbmRpc0RldmljZSA9IFVT Ql9STkRJU19ERVZJQ0VfRlJPTV9USElTIChUaGlzKTsNCj4gKw0KPiArICBaZXJvTWVtICgmUm5k aXNRdWVyeU1zZywgc2l6ZW9mIChSRU1PVEVfTkRJU19RVUVSWV9NQVhfVE9UQUxfU0laRV9NU0cp KTsNCj4gKyAgWmVyb01lbSAoJlJuZGlzUXVlcnlNc2dDbXBsdCwgc2l6ZW9mIChSRU1PVEVfTkRJ U19RVUVSWV9NQVhfVE9UQUxfU0laRV9DTVBMVCkpOw0KPiArDQo+ICsgIFJuZGlzUXVlcnlNc2cu UXVlcnlNc2cuTWVzc2FnZVR5cGUgICA9IFJORElTX1FVRVJZX01TRzsNCj4gKyAgUm5kaXNRdWVy eU1zZy5RdWVyeU1zZy5NZXNzYWdlTGVuZ3RoID0gc2l6ZW9mIChSRU1PVEVfTkRJU19RVUVSWV9N QVhfVE9UQUxfU0laRV9NU0cpOw0KPiArICBSbmRpc1F1ZXJ5TXNnLlF1ZXJ5TXNnLlJlcXVlc3RJ RCAgICAgPSBVc2JSbmRpc0RldmljZS0+UmVxdWVzdElkOw0KPiArICBSbmRpc1F1ZXJ5TXNnLlF1 ZXJ5TXNnLk9pZCAgICAgICAgICAgPSBPSURfR0VOX01BWElNVU1fVE9UQUxfU0laRTsNCj4gKw0K PiArICBSbmRpc1F1ZXJ5TXNnQ21wbHQuUXVlcnlDbXBsdC5NZXNzYWdlVHlwZSAgID0gUk5ESVNf UVVFUllfQ01QTFQ7DQo+ICsgIFJuZGlzUXVlcnlNc2dDbXBsdC5RdWVyeUNtcGx0Lk1lc3NhZ2VM ZW5ndGggPSBzaXplb2YgKFJFTU9URV9ORElTX1FVRVJZX01BWF9UT1RBTF9TSVpFX0NNUExUKTsN Cj4gKw0KPiArICBTdGF0dXMgPSBSbmRpc0NvbnRyb2xNc2cgKA0KPiArICAgICAgICAgICAgIFVz YlJuZGlzRGV2aWNlLA0KPiArICAgICAgICAgICAgIChSRU1PVEVfTkRJU19NU0dfSEVBREVSICop JlJuZGlzUXVlcnlNc2csDQo+ICsgICAgICAgICAgICAgKFJFTU9URV9ORElTX01TR19IRUFERVIg KikmUm5kaXNRdWVyeU1zZ0NtcGx0DQo+ICsgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKCFFRklf RVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBERUJVRyAoKERFQlVHX0lORk8sICJTdWNjZXNzIHRv IGdldCBNYXggVG90YWwgc2l6ZSA6ICVYICBcbiIsIFJuZGlzUXVlcnlNc2dDbXBsdC5NYXhUb3Rh bFNpemUpKTsNCj4gKyAgICAqQnVsa1NpemUgPSBSbmRpc1F1ZXJ5TXNnQ21wbHQuTWF4VG90YWxT aXplOw0KPiArICAgIFVzYlJuZGlzRGV2aWNlLT5SZXF1ZXN0SWQrKzsNCj4gKyAgICByZXR1cm4g U3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gVGhpcy0+VXNiRXRoRnVuRGVzY3Jp cHRvciAoVGhpcywgJlVzYkV0aEZ1bkRlc2NyaXB0b3IpOw0KPiArICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgICpCdWxr U2l6ZSA9IChVSU5UTilVc2JFdGhGdW5EZXNjcmlwdG9yLk1heFNlZ21lbnRTaXplOw0KPiArICBy ZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgUmV0cmlldmVzIHRoZSBVU0Ig SGVhZGVyIGZ1bmN0aW9uYWwgRGVzY3JpcHRvci4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlz ICAgICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BS T1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1bb3V0XSBVc2JIZWFkZXJGdW5EZXNjcmlwdG9y IEEgcG9pbnRlciB0byB0aGUgY2FsbGVyIGFsbG9jYXRlZCBVU0IgSGVhZGVyIEZ1bmN0aW9uYWwg RGVzY3JpcHRvci4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUg VVNCIEhlYWRlciBGdW5jdGlvbmFsIGRlc2NyaXB0b3Igd2FzIHJldHJpZXZlZCBzdWNjZXNzZnVs bHkuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIFVzYkhlYWRlckZ1bkRlc2Ny aXB0b3IgaXMgTlVMTC4NCj4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgVGhlIFVT QiBIZWFkZXIgRnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcyBub3QgZm91bmQuDQo+ICsNCj4gKyoq Lw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtHZXRVc2JIZWFkZXJGdW5EZXNjcmlwdG9y ICgNCj4gKyAgSU4gIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIE9V VCBVU0JfSEVBREVSX0ZVTl9ERVNDUklQVE9SICAgICpVc2JIZWFkZXJGdW5EZXNjcmlwdG9yDQo+ ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgU3RhdHVzOw0KPiArICBVU0JfUk5E SVNfREVWSUNFICAqVXNiUm5kaXNEZXZpY2U7DQo+ICsNCj4gKyAgVXNiUm5kaXNEZXZpY2UgPSBV U0JfUk5ESVNfREVWSUNFX0ZST01fVEhJUyAoVGhpcyk7DQo+ICsNCj4gKyAgaWYgKFVzYkhlYWRl ckZ1bkRlc2NyaXB0b3IgPT0gTlVMTCkgew0KPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJB TUVURVI7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBHZXRGdW5jdGlvbmFsRGVzY3JpcHRv ciAoDQo+ICsgICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPkNvbmZpZywNCj4gKyAgICAgICAg ICAgICBIRUFERVJfRlVOX0RFU0NSSVBUT1IsDQo+ICsgICAgICAgICAgICAgVXNiSGVhZGVyRnVu RGVzY3JpcHRvcg0KPiArICAgICAgICAgICAgICk7DQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9 DQo+ICsNCj4gKy8qKg0KPiArICBSZXRyaWV2ZXMgdGhlIFVTQiBVbmlvbiBmdW5jdGlvbmFsIERl c2NyaXB0b3IuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgICAgICBB IHBvaW50ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4g KyAgQHBhcmFtW291dF0gVXNiVW5pb25GdW5EZXNjcmlwdG9yICBBIHBvaW50ZXIgdG8gdGhlIGNh bGxlciBhbGxvY2F0ZWQgVVNCIFVuaW9uIEZ1bmN0aW9uYWwgRGVzY3JpcHRvci4NCj4gKw0KPiAr ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIFVTQiBVbmlvbiBGdW5jdGlvbmFs IGRlc2NyaXB0b3Igd2FzIHJldHJpZXZlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJ X0lOVkFMSURfUEFSQU1FVEVSICBVc2JVbmlvbkZ1bkRlc2NyaXB0b3IgaXMgTlVMTC4NCj4gKyAg QHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgIFRoZSBVU0IgVW5pb24gRnVuY3Rpb25hbCBk ZXNjcmlwdG9yIHdhcyBub3QgZm91bmQuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiAr RUZJQVBJDQo+ICtHZXRVc2JVbmlvbkZ1bkRlc2NyaXB0b3IgKA0KPiArICBJTiAgRURLSUlfVVNC X0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywNCj4gKyAgT1VUIFVTQl9VTklPTl9GVU5fREVTQ1JJ UFRPUiAgICAgKlVzYlVuaW9uRnVuRGVzY3JpcHRvcg0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9T VEFUVVMgICAgICAgIFN0YXR1czsNCj4gKyAgVVNCX1JORElTX0RFVklDRSAgKlVzYlJuZGlzRGV2 aWNlOw0KPiArDQo+ICsgIFVzYlJuZGlzRGV2aWNlID0gVVNCX1JORElTX0RFVklDRV9GUk9NX1RI SVMgKFRoaXMpOw0KPiArDQo+ICsgIGlmIChVc2JVbmlvbkZ1bkRlc2NyaXB0b3IgPT0gTlVMTCkg ew0KPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgIH0NCj4gKw0KPiAr ICBTdGF0dXMgPSBHZXRGdW5jdGlvbmFsRGVzY3JpcHRvciAoDQo+ICsgICAgICAgICAgICAgVXNi Um5kaXNEZXZpY2UtPkNvbmZpZywNCj4gKyAgICAgICAgICAgICBVTklPTl9GVU5fREVTQ1JJUFRP UiwNCj4gKyAgICAgICAgICAgICBVc2JVbmlvbkZ1bkRlc2NyaXB0b3INCj4gKyAgICAgICAgICAg ICApOw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgUmV0cmll dmVzIHRoZSBVU0IgRXRoZXJuZXQgZnVuY3Rpb25hbCBEZXNjcmlwdG9yLg0KPiArDQo+ICsgIFRo aXMgZnVuY3Rpb24gZ2V0IHRoZSBNYWMgQWRkcmVzcywgRXRoZXJuZXQgc3RhdGlzdGljcywgbWF4 aW11bSBzZWdtZW50IHNpemUsDQo+ICsgIG51bWJlciBvZiBtdWx0aWNhc3QgZmlsdGVycywgYW5k IG51bWJlciBvZiBwYXR0ZXJuIGZpbHRlcnMgZnJvbSBFdGhlcm5ldA0KPiArICBmdW5jdGlvbmFs IERlc2NyaXB0b3IuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgICAg ICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4N Cj4gKyAgQHBhcmFtW291dF0gVXNiRXRoRnVuRGVzY3JpcHRvciAgICBBIHBvaW50ZXIgdG8gdGhl IGNhbGxlciBhbGxvY2F0ZWQgVVNCIEV0aGVybmV0IEZ1bmN0aW9uYWwgRGVzY3JpcHRvci4NCj4g Kw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIFVTQiBFdGhlcm5ldCBG dW5jdGlvbmFsIGRlc2NyaXB0b3Igd2FzIHJldHJpZXZlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEBy ZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBVc2JFdGhGdW5EZXNjcmlwdG9yIGlzIE5VTEwu DQo+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICBUaGUgVVNCIEV0aGVybmV0IEZ1 bmN0aW9uYWwgZGVzY3JpcHRvciB3YXMgbm90IGZvdW5kLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9T VEFUVVMNCj4gK0VGSUFQSQ0KPiArR2V0VXNiUm5kaXNGdW5EZXNjcmlwdG9yICgNCj4gKyAgSU4g IEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIE9VVCBVU0JfRVRIRVJO RVRfRlVOX0RFU0NSSVBUT1IgICpVc2JFdGhGdW5EZXNjcmlwdG9yDQo+ICsgICkNCj4gK3sNCj4g KyAgRUZJX1NUQVRVUyAgICAgICAgU3RhdHVzOw0KPiArICBVU0JfUk5ESVNfREVWSUNFICAqVXNi Um5kaXNEZXZpY2U7DQo+ICsNCj4gKyAgVXNiUm5kaXNEZXZpY2UgPSBVU0JfUk5ESVNfREVWSUNF X0ZST01fVEhJUyAoVGhpcyk7DQo+ICsNCj4gKyAgaWYgKFVzYkV0aEZ1bkRlc2NyaXB0b3IgPT0g TlVMTCkgew0KPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgIH0NCj4g Kw0KPiArICBTdGF0dXMgPSBHZXRGdW5jdGlvbmFsRGVzY3JpcHRvciAoDQo+ICsgICAgICAgICAg ICAgVXNiUm5kaXNEZXZpY2UtPkNvbmZpZywNCj4gKyAgICAgICAgICAgICBFVEhFUk5FVF9GVU5f REVTQ1JJUFRPUiwNCj4gKyAgICAgICAgICAgICBVc2JFdGhGdW5EZXNjcmlwdG9yDQo+ICsgICAg ICAgICAgICAgKTsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsg IFRoaXMgcmVxdWVzdCBzZXRzIHRoZSBFdGhlcm5ldCBkZXZpY2UgbXVsdGljYXN0IGZpbHRlcnMg YXMgc3BlY2lmaWVkIGluIHRoZQ0KPiArICBzZXF1ZW50aWFsIGxpc3Qgb2YgNDggYml0IEV0aGVy bmV0IG11bHRpY2FzdCBhZGRyZXNzZXMuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAg ICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NP TCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAgVmFsdWUgICAgICAgICAgICAgICAgICBOdW1i ZXIgb2YgZmlsdGVycy4NCj4gKyAgQHBhcmFtW2luXSAgTWNhc3RBZGRyICAgICAgICAgICAgICBB IHBvaW50ZXIgdG8gdGhlIHZhbHVlIG9mIHRoZSBtdWx0aWNhc3QgYWRkcmVzc2VzLg0KPiArDQo+ ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBz dWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAgICBBIHRpbWVv dXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJ Q0VfRVJST1IgICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4N Cj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIE9uZSBvZiB0aGUgcGFyYW1ldGVy cyBoYXMgYW4gaW52YWxpZCB2YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAg ICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJ DQo+ICtTZXRVc2JSbmRpc01jYXN0RmlsdGVyICgNCj4gKyAgSU4gRURLSUlfVVNCX0VUSEVSTkVU X1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gVUlOVDE2ICAgICAgICAgICAgICAgICAgICAgICBW YWx1ZSwNCj4gKyAgSU4gVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAqTWNhc3RBZGRyDQo+ ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ ICsgIEVGSV9VU0JfREVWSUNFX1JFUVVFU1QgICAgICAgUmVxdWVzdDsNCj4gKyAgVUlOVDMyICAg ICAgICAgICAgICAgICAgICAgICBUcmFuc1N0YXR1czsNCj4gKyAgVVNCX0VUSEVSTkVUX0ZVTl9E RVNDUklQVE9SICBVc2JFdGhGdW5EZXNjcmlwdG9yOw0KPiArICBVU0JfUk5ESVNfREVWSUNFICAg ICAgICAgICAgICpVc2JSbmRpc0RldmljZTsNCj4gKw0KPiArICBVc2JSbmRpc0RldmljZSA9IFVT Ql9STkRJU19ERVZJQ0VfRlJPTV9USElTIChUaGlzKTsNCj4gKw0KPiArICBTdGF0dXMgPSBUaGlz LT5Vc2JFdGhGdW5EZXNjcmlwdG9yIChUaGlzLCAmVXNiRXRoRnVuRGVzY3JpcHRvcik7DQo+ICsg IGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9 DQo+ICsNCj4gKyAgaWYgKChVc2JFdGhGdW5EZXNjcmlwdG9yLk51bWJlck1jRmlsdGVycyA8PCAx KSA9PSAwKSB7DQo+ICsgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gKyAgfQ0KPiArDQo+ ICsgIFJlcXVlc3QuUmVxdWVzdFR5cGUgPSBVU0JfRVRIRVJORVRfU0VUX1JFUV9UWVBFOw0KPiAr ICBSZXF1ZXN0LlJlcXVlc3QgICAgID0gU0VUX0VUSF9NVUxUSUNBU1RfRklMVEVSU19SRVE7DQo+ ICsgIFJlcXVlc3QuVmFsdWUgICAgICAgPSBWYWx1ZTsNCj4gKyAgUmVxdWVzdC5JbmRleCAgICAg ICA9IFVzYlJuZGlzRGV2aWNlLT5OdW1PZkludGVyZmFjZTsNCj4gKyAgUmVxdWVzdC5MZW5ndGgg ICAgICA9IFZhbHVlICogNjsNCj4gKw0KPiArICByZXR1cm4gVXNiUm5kaXNEZXZpY2UtPlVzYklv LT5Vc2JDb250cm9sVHJhbnNmZXIgKA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFVzYlJuZGlzRGV2aWNlLT5Vc2JJbywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmUmVxdWVzdCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBF ZmlVc2JEYXRhT3V0LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9F VEhFUk5FVF9UUkFOU0ZFUl9USU1FT1VULA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE1jYXN0QWRkciwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS ZXF1ZXN0Lkxlbmd0aCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmVHJh bnNTdGF0dXMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiArfQ0K PiArDQo+ICsvKioNCj4gKyAgVGhpcyByZXF1ZXN0IHNldHMgdXAgdGhlIHNwZWNpZmllZCBFdGhl cm5ldCBwb3dlciBtYW5hZ2VtZW50IHBhdHRlcm4gZmlsdGVyIGFzDQo+ICsgIGRlc2NyaWJlZCBp biB0aGUgZGF0YSBzdHJ1Y3R1cmUuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAg ICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGlu c3RhbmNlLg0KPiArICBAcGFyYW1baW5dICBWYWx1ZSAgICAgICAgICAgICAgICAgTnVtYmVyIG9m IGZpbHRlcnMuDQo+ICsgIEBwYXJhbVtpbl0gIExlbmd0aCAgICAgICAgICAgICAgICBTaXplIG9m IHRoZSBwb3dlciBtYW5hZ2VtZW50IHBhdHRlcm4gZmlsdGVyIGRhdGEuDQo+ICsgIEBwYXJhbVtp bl0gIFBhdHRlcm5GaWx0ZXIgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIHBvd2VyIG1hbmFnZW1l bnQgcGF0dGVybiBmaWx0ZXIgc3RydWN0dXJlLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NF U1MgICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEBy ZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5n IHRoZSByZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICAgVGhlIHJl cXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5W QUxJRF9QQVJBTUVURVIgIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZCB2YWx1 ZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtTZXRVc2JSbmRpc1Bvd2Vy RmlsdGVyICgNCj4gKyAgSU4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywNCj4g KyAgSU4gVUlOVDE2ICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSwNCj4gKyAgSU4gVUlOVDE2 ICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGgsDQo+ICsgIElOIFZPSUQgICAgICAgICAgICAg ICAgICAgICAgICAgKlBhdHRlcm5GaWx0ZXINCj4gKyAgKQ0KPiArew0KPiArICBFRklfVVNCX0RF VklDRV9SRVFVRVNUICBSZXF1ZXN0Ow0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICBUcmFu c1N0YXR1czsNCj4gKyAgVVNCX1JORElTX0RFVklDRSAgICAgICAgKlVzYlJuZGlzRGV2aWNlOw0K PiArDQo+ICsgIFVzYlJuZGlzRGV2aWNlID0gVVNCX1JORElTX0RFVklDRV9GUk9NX1RISVMgKFRo aXMpOw0KPiArDQo+ICsgIFJlcXVlc3QuUmVxdWVzdFR5cGUgPSBVU0JfRVRIRVJORVRfU0VUX1JF UV9UWVBFOw0KPiArICBSZXF1ZXN0LlJlcXVlc3QgICAgID0gU0VUX0VUSF9QT1dFUl9NQU5BR0VN RU5UX1BBVFRFUk5fRklMVEVSX1JFUTsNCj4gKyAgUmVxdWVzdC5WYWx1ZSAgICAgICA9IFZhbHVl Ow0KPiArICBSZXF1ZXN0LkluZGV4ICAgICAgID0gVXNiUm5kaXNEZXZpY2UtPk51bU9mSW50ZXJm YWNlOw0KPiArICBSZXF1ZXN0Lkxlbmd0aCAgICAgID0gTGVuZ3RoOw0KPiArDQo+ICsgIHJldHVy biBVc2JSbmRpc0RldmljZS0+VXNiSW8tPlVzYkNvbnRyb2xUcmFuc2ZlciAoDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPlVzYklvLA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZSZXF1ZXN0LA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEVmaVVzYkRhdGFPdXQsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVVNCX0VUSEVSTkVUX1RSQU5TRkVSX1RJTUVPVVQsDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGF0dGVybkZpbHRlciwNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGgsDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJlRyYW5zU3RhdHVzDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgcmVxdWVzdCByZXRyaWV2 ZXMgdGhlIHN0YXR1cyBvZiB0aGUgc3BlY2lmaWVkIEV0aGVybmV0IHBvd2VyIG1hbmFnZW1lbnQN Cj4gKyAgcGF0dGVybiBmaWx0ZXIgZnJvbSB0aGUgZGV2aWNlLg0KPiArDQo+ICsgIEBwYXJhbVtp bl0gIFRoaXMgICAgICAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFREtJSV9VU0JfRVRI RVJORVRfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gIFZhbHVlICAgICAgICAg ICAgICAgICAgVGhlIGZpbHRlciBudW1iZXIuDQo+ICsgIEBwYXJhbVtvdXRdIFBhdHRlcm5BY3Rp dmUgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBwYXR0ZXJuIGFjdGl2ZSBib29sZWFuLg0KPiAr DQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRl ZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAgICBBIHRp bWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9E RVZJQ0VfRVJST1IgICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJv ci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIE9uZSBvZiB0aGUgcGFyYW1l dGVycyBoYXMgYW4gaW52YWxpZCB2YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQg ICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJ QVBJDQo+ICtHZXRVc2JSbmRpc1Bvd2VyRmlsdGVyICgNCj4gKyAgSU4gIEVES0lJX1VTQl9FVEhF Uk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOICBVSU5UMTYgICAgICAgICAgICAgICAgICAg ICAgIFZhbHVlLA0KPiArICBPVVQgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAqUGF0dGVy bkFjdGl2ZQ0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9VU0JfREVWSUNFX1JFUVVFU1QgIFJlcXVl c3Q7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgIFRyYW5zU3RhdHVzOw0KPiArICBVU0Jf Uk5ESVNfREVWSUNFICAgICAgICAqVXNiUm5kaXNEZXZpY2U7DQo+ICsNCj4gKyAgVXNiUm5kaXNE ZXZpY2UgPSBVU0JfUk5ESVNfREVWSUNFX0ZST01fVEhJUyAoVGhpcyk7DQo+ICsNCj4gKyAgUmVx dWVzdC5SZXF1ZXN0VHlwZSA9IFVTQl9FVEhFUk5FVF9HRVRfUkVRX1RZUEU7DQo+ICsgIFJlcXVl c3QuUmVxdWVzdCAgICAgPSBHRVRfRVRIX1BPV0VSX01BTkFHRU1FTlRfUEFUVEVSTl9GSUxURVJf UkVROw0KPiArICBSZXF1ZXN0LlZhbHVlICAgICAgID0gVmFsdWU7DQo+ICsgIFJlcXVlc3QuSW5k ZXggICAgICAgPSBVc2JSbmRpc0RldmljZS0+TnVtT2ZJbnRlcmZhY2U7DQo+ICsgIFJlcXVlc3Qu TGVuZ3RoICAgICAgPSBVU0JfRVRIX1BPV0VSX0ZJTFRFUl9MRU5HVEg7DQo+ICsNCj4gKyAgcmV0 dXJuIFVzYlJuZGlzRGV2aWNlLT5Vc2JJby0+VXNiQ29udHJvbFRyYW5zZmVyICgNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2JSbmRpc0RldmljZS0+VXNiSW8sDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlJlcXVlc3QsDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRWZpVXNiRGF0YUluLA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFVTQl9FVEhFUk5FVF9UUkFOU0ZFUl9USU1FT1VULA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhdHRlcm5BY3RpdmUsDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNCX0VUSF9QT1dFUl9GSUxURVJfTEVOR1RILA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZUcmFuc1N0YXR1cw0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiAr DQo+ICsgIENvbnZlcnRzIFBYRSBmaWx0ZXIgc2V0dGluZ3MgdG8gUk5ESVMgdmFsdWVzDQo+ICsN Cj4gKyAgQHBhcmFtW2luXSAgVmFsdWUgICAgICBQWEUgZmlsdGVyIGRhdGEuDQo+ICsgIEBwYXJh bVtvdXRdIENkY0ZpbHRlciAgQSBwb2ludGVyIHRvIHRoZSBFdGhlcm5ldCBQYWNrZXQgRmlsdGVy IEJpdG1hcCB2YWx1ZSBjb252ZXJ0ZWQgYnkgUFhFX09QRkxBR1MuDQo+ICsNCj4gKyoqLw0KPiAr Vk9JRA0KPiArQ29udmVydEZpbHRlciAoDQo+ICsgIElOICBVSU5UMTYgIFZhbHVlLA0KPiArICBP VVQgVUlOVDE2ICAqQ2RjRmlsdGVyDQo+ICsgICkNCj4gK3sNCj4gKyAgVUlOVDMyICAgICAgICAg ICAgICAgICBJbmRleDsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICBDb3VudDsNCj4gKyAg c3RhdGljIHN0cnVjdCBCSVRfTUFQICBUYWJsZVtdID0gew0KPiArICAgIHsgUFhFX09QRkxBR1Nf UkVDRUlWRV9GSUxURVJfVU5JQ0FTVCwgICAgICAgICAgICBORElTX1BBQ0tFVF9UWVBFX0RJUkVD VEVEICAgICAgfSwNCj4gKyAgICB7IFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX0JST0FEQ0FT VCwgICAgICAgICAgTkRJU19QQUNLRVRfVFlQRV9CUk9BRENBU1QgICAgIH0sDQo+ICsgICAgeyBQ WEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9GSUxURVJFRF9NVUxUSUNBU1QsIE5ESVNfUEFDS0VU X1RZUEVfTVVMVElDQVNUICAgICB9LA0KPiArICAgIHsgUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxU RVJfUFJPTUlTQ1VPVVMsICAgICAgICBORElTX1BBQ0tFVF9UWVBFX1BST01JU0NVT1VTICAgfSwN Cj4gKyAgICB7IFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX0FMTF9NVUxUSUNBU1QsICAgICAg TkRJU19QQUNLRVRfVFlQRV9BTExfTVVMVElDQVNUIH0sDQo+ICsgIH07DQo+ICsNCj4gKyAgQ291 bnQgPSBzaXplb2YgKFRhYmxlKS9zaXplb2YgKFRhYmxlWzBdKTsNCj4gKw0KPiArICBmb3IgKElu ZGV4ID0gMDsgKFRhYmxlW0luZGV4XS5TcmMgIT0gMCkgJiYgKEluZGV4IDwgQ291bnQpOyBJbmRl eCsrKSB7DQo+ICsgICAgaWYgKFRhYmxlW0luZGV4XS5TcmMgJiBWYWx1ZSkgew0KPiArICAgICAg KkNkY0ZpbHRlciB8PSBUYWJsZVtJbmRleF0uRHN0Ow0KPiArICAgIH0NCj4gKyAgfQ0KPiArfQ0K PiArDQo+ICsvKioNCj4gKw0KPiArICBVcGRhdGVzIEZpbHRlciBzZXR0aW5ncyBvbiB0aGUgZGV2 aWNlLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5k IGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRo ZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBF RklfU1RBVFVTDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtSbmRp c1VuZGlSZWNlaXZlRmlsdGVyICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAg TklDX0RBVEEgICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAg ICAgICAgIFN0YXR1czsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAqTWNhc3RM aXN0Ow0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgIENvdW50Ow0KPiArICBVSU5U OCAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4MTsNCj4gKyAgVUlOVDggICAgICAgICAgICAg ICAgICAgICAgICBJbmRleDI7DQo+ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgQ3Bi QWRkcjsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICBDcGJTaXplOw0KPiArICBV SU5UMTYgICAgICAgICAgICAgICAgICAgICAgIFNldEZpbHRlcjsNCj4gKyAgUFhFX0NQQl9SRUNF SVZFX0ZJTFRFUlMgICAgICAqQ3BiOw0KPiArICBVU0JfRVRIRVJORVRfRlVOX0RFU0NSSVBUT1Ig IFVzYkV0aEZ1bkRlc2NyaXB0b3I7DQo+ICsNCj4gKyAgQ291bnQgICAgID0gMDsNCj4gKyAgQ3Bi QWRkciAgID0gQ2RiLT5DUEJhZGRyOw0KPiArICBDcGJTaXplICAgPSBDZGItPkNQQnNpemU7DQo+ ICsgIFNldEZpbHRlciA9IChVSU5UMTYpKENkYi0+T3BGbGFncyAmIDB4MUYpOw0KPiArICBDcGIg ICAgICAgPSAoUFhFX0NQQl9SRUNFSVZFX0ZJTFRFUlMgKikoVUlOVE4pQ3BiQWRkcjsNCj4gKw0K PiArICAvLyBUaGUgQ3BiIGNvdWxkIGJlIE5VTEwuKHJlZjpQWEVfQ1BCQUREUl9OT1RfVVNFRCkN Cj4gKyAgTmljLT5SeEZpbHRlciA9IChVSU5UOClTZXRGaWx0ZXI7DQo+ICsNCj4gKyAgaWYgKCgo U2V0RmlsdGVyICYgUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfRklMVEVSRURfTVVMVElDQVNU KSAhPSAwKSB8fCAoQ3BiICE9IE5VTEwpKSB7DQo+ICsgICAgaWYgKENwYiAhPSBOVUxMKSB7DQo+ ICsgICAgICBOaWMtPk1jYXN0Q291bnQgPSAoVUlOVDgpKENwYlNpemUgLyBQWEVfTUFDX0xFTkdU SCk7DQo+ICsgICAgICBDb3B5TWVtICgmTmljLT5NY2FzdExpc3QsIENwYiwgTmljLT5NY2FzdENv dW50KTsNCj4gKyAgICB9IGVsc2Ugew0KPiArICAgICAgTmljLT5NY2FzdENvdW50ID0gMDsNCj4g KyAgICB9DQo+ICsNCj4gKyAgICBOaWMtPlVzYkV0aC0+VXNiRXRoRnVuRGVzY3JpcHRvciAoTmlj LT5Vc2JFdGgsICZVc2JFdGhGdW5EZXNjcmlwdG9yKTsNCj4gKyAgICBpZiAoKFVzYkV0aEZ1bkRl c2NyaXB0b3IuTnVtYmVyTWNGaWx0ZXJzIDw8IDEpID09IDApIHsNCj4gKyAgICAgIE5pYy0+UnhG aWx0ZXIgfD0gUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfQUxMX01VTFRJQ0FTVDsNCj4gKyAg ICAgIERFQlVHICgoREVCVUdfSU5GTywgIlNldFVzYkV0aFBhY2tldEZpbHRlciBOaWMgJWx4IE5p Yy0+VXNiRXRoICVseCAiLCBOaWMsIE5pYy0+VXNiRXRoKSk7DQo+ICsgICAgICBOaWMtPlVzYkV0 aC0+U2V0VXNiRXRoUGFja2V0RmlsdGVyIChOaWMtPlVzYkV0aCwgTmljLT5SeEZpbHRlcik7DQo+ ICsgICAgfSBlbHNlIHsNCj4gKyAgICAgIFN0YXR1cyA9IGdCUy0+QWxsb2NhdGVQb29sIChFZmlC b290U2VydmljZXNEYXRhLCBOaWMtPk1jYXN0Q291bnQgKiA2LCAoVk9JRCAqKikmTWNhc3RMaXN0 KTsNCj4gKyAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgICAgcmV0dXJu IFBYRV9TVEFUQ09ERV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgICAgIH0NCj4gKw0KPiArICAg ICAgaWYgKENwYiAhPSBOVUxMKSB7DQo+ICsgICAgICAgIGZvciAoSW5kZXgxID0gMDsgSW5kZXgx IDwgTmljLT5NY2FzdENvdW50OyBJbmRleDErKykgew0KPiArICAgICAgICAgIGZvciAoSW5kZXgy ID0gMDsgSW5kZXgyIDwgNjsgSW5kZXgyKyspIHsNCj4gKyAgICAgICAgICAgIE1jYXN0TGlzdFtD b3VudCsrXSA9IENwYi0+TUNhc3RMaXN0W0luZGV4MV1bSW5kZXgyXTsNCj4gKyAgICAgICAgICB9 DQo+ICsgICAgICAgIH0NCj4gKyAgICAgIH0NCj4gKw0KPiArICAgICAgTmljLT5SeEZpbHRlciB8 PSBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9GSUxURVJFRF9NVUxUSUNBU1Q7DQo+ICsgICAg ICBpZiAoQ3BiICE9IE5VTEwpIHsNCj4gKyAgICAgICAgTmljLT5Vc2JFdGgtPlNldFVzYkV0aE1j YXN0RmlsdGVyIChOaWMtPlVzYkV0aCwgTmljLT5NY2FzdENvdW50LCBNY2FzdExpc3QpOw0KPiAr ICAgICAgfQ0KPiArDQo+ICsgICAgICBOaWMtPlVzYkV0aC0+U2V0VXNiRXRoUGFja2V0RmlsdGVy IChOaWMtPlVzYkV0aCwgTmljLT5SeEZpbHRlcik7DQo+ICsgICAgICBGcmVlUG9vbCAoTWNhc3RM aXN0KTsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIHJlcXVlc3QgaXMgdXNlZCB0byBjb25maWd1cmUg ZGV2aWNlIEV0aGVybmV0IHBhY2tldCBmaWx0ZXIgc2V0dGluZ3MuDQo+ICsNCj4gKyAgQHBhcmFt W2luXSAgVGhpcyAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFREtJSV9VU0JfRVRIRVJO RVRfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gIFZhbHVlICAgICAgICAgICAg IFBhY2tldCBGaWx0ZXIgQml0bWFwLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAg ICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBF RklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVx dWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFp bGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJB TUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkIHZhbHVlLg0KPiArICBA cmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArDQo+ICsqKi8N Cj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArU2V0VXNiUm5kaXNQYWNrZXRGaWx0ZXIgKA0K PiArICBJTiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiBVSU5U MTYgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlDQo+ICsgICkNCj4gK3sNCj4gKyAgcmV0dXJu IEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyByZXF1ZXN0IGlzIHVz ZWQgdG8gcmV0cmlldmUgYSBzdGF0aXN0aWMgYmFzZWQgb24gdGhlIGZlYXR1cmUgc2VsZWN0b3Iu DQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0 byB0aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1b aW5dICBGZWF0dXJlU2VsZWN0b3IgICAgICAgVmFsdWUgb2YgdGhlIGZlYXR1cmUgc2VsZWN0b3Iu DQo+ICsgIEBwYXJhbVtvdXRdIFN0YXRpc3RpYyAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhl IDMyIGJpdCB1bnNpZ25lZCBpbnRlZ2VyLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1Mg ICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZh bCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUg cmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3Qg ZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9Q QVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkIHZhbHVlLg0KPiAr ICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArDQo+ICsq Ki8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArR2V0Um5kaXNTdGF0aXN0aWMgKA0KPiAr ICBJTiAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gIFVJTlQx NiAgICAgICAgICAgICAgICAgICAgICAgRmVhdHVyZVNlbGVjdG9yLA0KPiArICBPVVQgVk9JRCAg ICAgICAgICAgICAgICAgICAgICAgICAqU3RhdGlzdGljDQo+ICsgICkNCj4gK3sNCj4gKyAgcmV0 dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBmdW5jdGlvbiBp cyBjYWxsZWQgd2hlbiBVbmRpU3RhcnQgaXMgaW52b2tlZC4NCj4gKw0KPiArICBAcGFyYW1baW5d ICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBA cGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJv bGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgIFRoZSByZXF1ZXN0 IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtF RklBUEkNCj4gK1JuZGlzVW5kaVN0YXJ0ICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiAr ICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICBTdGF0 dXM7DQo+ICsNCj4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiUm5kaXNVbmRpU3RhcnQgTmljICVs eCBDZGIgJWx4IE5pYyBTdGF0ZSAleFxuIiwgTmljLCBDZGIsIE5pYy0+U3RhdGUpKTsNCj4gKw0K PiArICAvLyBJc3N1ZSBSbmRpcyBSZXNldCBhbmQgYnJpbmcgdGhlIGRldmljZSB0byBSTkRJU19C VVNfSU5JVElBTElaRUQgc3RhdGUNCj4gKyAgU3RhdHVzID0gUm5kaXNVbmRpUmVzZXQgKENkYiwg TmljKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIFJuZGlzVW5kaVJl c2V0IChDZGIsIE5pYyk7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBSbmRpc1VuZGlJbml0 aWFsaXplIChDZGIsIE5pYyk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAg ICBSbmRpc1VuZGlJbml0aWFsaXplIChDZGIsIE5pYyk7DQo+ICsgIH0NCj4gKw0KPiArICBSbmRp c1VuZGlTaHV0ZG93biAoQ2RiLCBOaWMpOw0KPiArDQo+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsN Cj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gVW5k aXN0b3AgaXMgaW52b2tlZC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0 byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEg cG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3Nm dWxseS4NCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtSbmRpc1VuZGlTdG9w ICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4g KyAgKQ0KPiArew0KPiArICBERUJVRyAoKERFQlVHX0lORk8sICJSbmRpc1VuZGlTdG9wIFN0YXRl ICV4XG4iLCBOaWMtPlN0YXRlKSk7DQo+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gK30NCj4g Kw0KPiArLyoqDQo+ICsgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gVW5kaUdldEluaXRJ bmZvIGlzIGludm9rZWQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8g dGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBv aW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiAr ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVs bHkuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtSbmRpc1VuZGlH ZXRJbml0SW5mbyAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRB ICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAq VXNiRXRoRGV2aWNlOw0KPiArICBVU0JfUk5ESVNfREVWSUNFICAgICAgICAgICAgICpVc2JSbmRp c0RldmljZTsNCj4gKyAgUFhFX0RCX0dFVF9JTklUX0lORk8gICAgICAgICAqRGI7DQo+ICsNCj4g KyAgREVCVUcgKChERUJVR19JTkZPLCAiUm5kaXNVbmRpR2V0SW5pdEluZm9cbiIpKTsNCj4gKw0K PiArICBVc2JFdGhEZXZpY2UgICA9IE5pYy0+VXNiRXRoOw0KPiArICBVc2JSbmRpc0RldmljZSA9 IFVTQl9STkRJU19ERVZJQ0VfRlJPTV9USElTIChVc2JFdGhEZXZpY2UpOw0KPiArDQo+ICsgIERi ID0gKFBYRV9EQl9HRVRfSU5JVF9JTkZPICopKFVJTlROKUNkYi0+REJhZGRyOw0KPiArDQo+ICsg IERiLT5GcmFtZURhdGFMZW4gPSBVc2JSbmRpc0RldmljZS0+TWF4VHJhbnNmZXJTaXplIC0gc2l6 ZW9mIChSRU1PVEVfTkRJU19QQUNLRVRfTVNHKSAtIFBYRV9NQUNfSEVBREVSX0xFTl9FVEhFUjsN Cj4gKyAgLy8gTGltaXQgTWF4IE1UVSBzaXplIHRvIDE1MDAgYnl0ZXMgYXMgUk5ESVMgc3BlYy4N Cj4gKyAgaWYgKERiLT5GcmFtZURhdGFMZW4gPiBQWEVfTUFYX1RYUlhfVU5JVF9FVEhFUikgew0K PiArICAgIERiLT5GcmFtZURhdGFMZW4gPSBQWEVfTUFYX1RYUlhfVU5JVF9FVEhFUjsNCj4gKyAg fQ0KPiArDQo+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIkRiLT5GcmFtZURhdGFMZW4gJXhcbiIs IERiLT5GcmFtZURhdGFMZW4pKTsNCj4gKw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9 DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIFJuZGlzVW5k aUdldENvbmZpZ0luZm8gaXMgaW52b2tlZC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEg cG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5d ICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRh Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVk IHN1Y2Nlc3NmdWxseS4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4g K1JuZGlzVW5kaUdldENvbmZpZ0luZm8gKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsg IElOICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsgIERFQlVHICgoREVCVUdfSU5G TywgIlJuZGlzVW5kaUdldENvbmZpZ0luZm9cbiIpKTsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNT Ow0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBV bmRpSW5pdGlhbGl6ZSBpcyBpbnZva2VkLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBw b2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0g IE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEu DQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhl Y3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBO b3Qgc3VwcG9ydGVkLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiAr Um5kaXNVbmRpSW5pdGlhbGl6ZSAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4g IE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1BS T1RPQ09MICAgKlVzYkV0aERyaXZlcjsNCj4gKyAgVVNCX1JORElTX0RFVklDRSAgICAgICAgICAg ICAgKlVzYlJuZGlzRGV2aWNlOw0KPiArICBSRU1PVEVfTkRJU19JTklUSUFMSVpFX01TRyAgICBS bmRpc0luaXRNc2c7DQo+ICsgIFJFTU9URV9ORElTX0lOSVRJQUxJWkVfQ01QTFQgIFJuZGlzSW5p dE1zZ0NtcGx0Ow0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ ICsNCj4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiUm5kaXNVbmRpSW5pdGlhbGl6ZVxuIikpOw0K PiArDQo+ICsgIFVzYkV0aERyaXZlciAgID0gTmljLT5Vc2JFdGg7DQo+ICsgIFVzYlJuZGlzRGV2 aWNlID0gVVNCX1JORElTX0RFVklDRV9GUk9NX1RISVMgKFVzYkV0aERyaXZlcik7DQo+ICsNCj4g KyAgWmVyb01lbSAoJlJuZGlzSW5pdE1zZywgc2l6ZW9mIChSRU1PVEVfTkRJU19JTklUSUFMSVpF X01TRykpOw0KPiArICBaZXJvTWVtICgmUm5kaXNJbml0TXNnQ21wbHQsIHNpemVvZiAoUkVNT1RF X05ESVNfSU5JVElBTElaRV9DTVBMVCkpOw0KPiArDQo+ICsgIFJuZGlzSW5pdE1zZy5NZXNzYWdl VHlwZSAgICAgPSBSTkRJU19JTklUSUFMSVpFX01TRzsNCj4gKyAgUm5kaXNJbml0TXNnLk1lc3Nh Z2VMZW5ndGggICA9IHNpemVvZiAoUkVNT1RFX05ESVNfSU5JVElBTElaRV9NU0cpOw0KPiArICBS bmRpc0luaXRNc2cuUmVxdWVzdElEICAgICAgID0gVXNiUm5kaXNEZXZpY2UtPlJlcXVlc3RJZDsN Cj4gKyAgUm5kaXNJbml0TXNnLk1ham9yVmVyc2lvbiAgICA9IFJORElTX01BSk9SX1ZFUlNJT047 DQo+ICsgIFJuZGlzSW5pdE1zZy5NaW5vclZlcnNpb24gICAgPSBSTkRJU19NSU5PUl9WRVJTSU9O Ow0KPiArICBSbmRpc0luaXRNc2cuTWF4VHJhbnNmZXJTaXplID0gUk5ESVNfTUFYX1RSQU5TRkVS X1NJWkU7DQo+ICsNCj4gKyAgUm5kaXNJbml0TXNnQ21wbHQuTWVzc2FnZVR5cGUgICA9IFJORElT X0lOSVRJQUxJWkVfQ01QTFQ7DQo+ICsgIFJuZGlzSW5pdE1zZ0NtcGx0Lk1lc3NhZ2VMZW5ndGgg PSBzaXplb2YgKFJFTU9URV9ORElTX0lOSVRJQUxJWkVfQ01QTFQpOw0KPiArDQo+ICsgIFN0YXR1 cyA9IFJuZGlzQ29udHJvbE1zZyAoVXNiUm5kaXNEZXZpY2UsIChSRU1PVEVfTkRJU19NU0dfSEVB REVSICopJlJuZGlzSW5pdE1zZywgKFJFTU9URV9ORElTX01TR19IRUFERVIgKikmUm5kaXNJbml0 TXNnQ21wbHQpOw0KPiArDQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5SZXF1ZXN0SWQrKzsNCj4gKw0K PiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpIHx8IChSbmRpc0luaXRNc2dDbXBsdC5TdGF0dXMg JiAweDgwMDAwMDAwKSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiAr ICAvLyBPbmx5IFdpcmVkIE1lZGl1bSBpcyBzdXBwb3J0ZWQNCj4gKyAgaWYgKFJuZGlzSW5pdE1z Z0NtcGx0Lk1lZGl1bSkgew0KPiArICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+ICsgIH0N Cj4gKw0KPiArICBVc2JSbmRpc0RldmljZS0+TWVkaXVtICAgICAgICAgICAgICAgID0gUm5kaXNJ bml0TXNnQ21wbHQuTWVkaXVtOw0KPiArICBVc2JSbmRpc0RldmljZS0+TWF4UGFja2V0c1BlclRy YW5zZmVyID0gUm5kaXNJbml0TXNnQ21wbHQuTWF4UGFja2V0c1BlclRyYW5zZmVyOw0KPiArICBV c2JSbmRpc0RldmljZS0+TWF4VHJhbnNmZXJTaXplICAgICAgID0gUm5kaXNJbml0TXNnQ21wbHQu TWF4VHJhbnNmZXJTaXplOw0KPiArICBVc2JSbmRpc0RldmljZS0+UGFja2V0QWxpZ25tZW50RmFj dG9yID0gUm5kaXNJbml0TXNnQ21wbHQuUGFja2V0QWxpZ25tZW50RmFjdG9yOw0KPiArDQo+ICsg IERFQlVHICgoREVCVUdfSU5GTywgIk1lZGl1bSA6ICV4IFxuIiwgUm5kaXNJbml0TXNnQ21wbHQu TWVkaXVtKSk7DQo+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIk1heFBhY2tldHNQZXJUcmFuc2Zl ciA6ICV4IFxuIiwgUm5kaXNJbml0TXNnQ21wbHQuTWF4UGFja2V0c1BlclRyYW5zZmVyKSk7DQo+ ICsgIERFQlVHICgoREVCVUdfSU5GTywgIk1heFRyYW5zZmVyU2l6ZSA6ICV4XG4iLCBSbmRpc0lu aXRNc2dDbXBsdC5NYXhUcmFuc2ZlclNpemUpKTsNCj4gKyAgREVCVUcgKChERUJVR19JTkZPLCAi UGFja2V0QWxpZ25tZW50RmFjdG9yIDogJXhcbiIsIFJuZGlzSW5pdE1zZ0NtcGx0LlBhY2tldEFs aWdubWVudEZhY3RvcikpOw0KPiArDQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4g Ky8qKg0KPiArICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIFVuZGlSZXNldCBpcyBpbnZv a2VkLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5k IGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRo ZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBF RklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0K PiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVl IHRvIGEgZGV2aWNlIGVycm9yLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQ SQ0KPiArUm5kaXNVbmRpUmVzZXQgKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElO ICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9Q Uk9UT0NPTCAgKlVzYkV0aERyaXZlcjsNCj4gKyAgVVNCX1JORElTX0RFVklDRSAgICAgICAgICAg ICAqVXNiUm5kaXNEZXZpY2U7DQo+ICsgIFJFTU9URV9ORElTX1JFU0VUX01TRyAgICAgICAgUm5k aXNSZXNldE1zZzsNCj4gKyAgUkVNT1RFX05ESVNfUkVTRVRfQ01QTFQgICAgICBSbmRpc1Jlc2V0 Q21wbHQ7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArDQo+ ICsgIERFQlVHICgoREVCVUdfSU5GTywgIlJuZGlzVW5kaVJlc2V0XG4iKSk7DQo+ICsNCj4gKyAg VXNiRXRoRHJpdmVyICAgPSBOaWMtPlVzYkV0aDsNCj4gKyAgVXNiUm5kaXNEZXZpY2UgPSBVU0Jf Uk5ESVNfREVWSUNFX0ZST01fVEhJUyAoVXNiRXRoRHJpdmVyKTsNCj4gKw0KPiArICBaZXJvTWVt ICgmUm5kaXNSZXNldE1zZywgc2l6ZW9mIChSRU1PVEVfTkRJU19SRVNFVF9NU0cpKTsNCj4gKyAg WmVyb01lbSAoJlJuZGlzUmVzZXRDbXBsdCwgc2l6ZW9mIChSRU1PVEVfTkRJU19SRVNFVF9DTVBM VCkpOw0KPiArDQo+ICsgIFJuZGlzUmVzZXRNc2cuTWVzc2FnZVR5cGUgICA9IFJORElTX1JFU0VU X01TRzsNCj4gKyAgUm5kaXNSZXNldE1zZy5NZXNzYWdlTGVuZ3RoID0gc2l6ZW9mIChSRU1PVEVf TkRJU19SRVNFVF9NU0cpOw0KPiArDQo+ICsgIFJuZGlzUmVzZXRDbXBsdC5NZXNzYWdlVHlwZSAg ID0gUk5ESVNfUkVTRVRfQ01QTFQ7DQo+ICsgIFJuZGlzUmVzZXRDbXBsdC5NZXNzYWdlTGVuZ3Ro ID0gc2l6ZW9mIChSRU1PVEVfTkRJU19SRVNFVF9DTVBMVCk7DQo+ICsNCj4gKyAgU3RhdHVzID0g Um5kaXNDb250cm9sTXNnIChVc2JSbmRpc0RldmljZSwgKFJFTU9URV9ORElTX01TR19IRUFERVIg KikmUm5kaXNSZXNldE1zZywgKFJFTU9URV9ORElTX01TR19IRUFERVIgKikmUm5kaXNSZXNldENt cGx0KTsNCj4gKw0KPiArICBVc2JSbmRpc0RldmljZS0+UmVxdWVzdElkID0gMTsgICAgICAgICAg Ly8gTGV0J3Mgc3RhcnQgd2l0aCAxDQo+ICsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSB8 fCAoUm5kaXNSZXNldENtcGx0LlN0YXR1cyAmIDB4ODAwMDAwMDApKSB7DQo+ICsgICAgcmV0dXJu IEVGSV9ERVZJQ0VfRVJST1I7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7 DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIFVu ZGlTaHV0ZG93biBpcyBpbnZva2VkLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2lu dGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5p YyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3Vj Y2Vzc2Z1bGx5Lg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArUm5k aXNVbmRpU2h1dGRvd24gKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNf REFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NP TCAgKlVzYkV0aERyaXZlcjsNCj4gKyAgVVNCX1JORElTX0RFVklDRSAgICAgICAgICAgICAqVXNi Um5kaXNEZXZpY2U7DQo+ICsgIFJFTU9URV9ORElTX0hBTFRfTVNHICAgICAgICAgUm5kaXNIbHRN c2c7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArDQo+ICsg IERFQlVHICgoREVCVUdfSU5GTywgIlJuZGlzVW5kaVNodXRkb3duXG4iKSk7DQo+ICsNCj4gKyAg VXNiRXRoRHJpdmVyICAgPSBOaWMtPlVzYkV0aDsNCj4gKyAgVXNiUm5kaXNEZXZpY2UgPSBVU0Jf Uk5ESVNfREVWSUNFX0ZST01fVEhJUyAoVXNiRXRoRHJpdmVyKTsNCj4gKw0KPiArICBaZXJvTWVt ICgmUm5kaXNIbHRNc2csIHNpemVvZiAoUkVNT1RFX05ESVNfSEFMVF9NU0cpKTsNCj4gKw0KPiAr ICBSbmRpc0hsdE1zZy5NZXNzYWdlVHlwZSAgID0gUk5ESVNfSExUX01TRzsNCj4gKyAgUm5kaXNI bHRNc2cuTWVzc2FnZUxlbmd0aCA9IHNpemVvZiAoUkVNT1RFX05ESVNfSEFMVF9NU0cpOw0KPiAr DQo+ICsgIFN0YXR1cyA9IFJuZGlzQ29udHJvbE1zZyAoVXNiUm5kaXNEZXZpY2UsIChSRU1PVEVf TkRJU19NU0dfSEVBREVSICopJlJuZGlzSGx0TXNnLCBOVUxMKTsNCj4gKw0KPiArICBpZiAoU3Rh dHVzID09IEVGSV9ERVZJQ0VfRVJST1IpIHsNCj4gKyAgICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsN Cj4gKyAgfQ0KPiArDQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5SZXF1ZXN0SWQgPSAxOw0KPiArICBy ZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVXBkYXRlIHRoZSBNZWRpYSBj b25uZWN0aW9uLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBj b21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVy IHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0K PiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArUm5kaXNVbmRpR2V0U3Rh dHVzICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMN Cj4gKyAgKQ0KPiArew0KPiArICBDZGItPlN0YXRGbGFncyAmPSB+KFBYRV9TVEFURkxBR1NfR0VU X1NUQVRVU19OT19NRURJQSk7DQo+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gK30NCj4gKw0K PiArLyoqDQo+ICsgIFRyYW5zbWl0IHRoZSBkYXRhIGFmdGVyIGFwcGVuZGluZyBSTkRJUyBoZWFk ZXIuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgICAgIENkYiAgICAgICAgICAgQSBwb2ludGVyIHRv IHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gICAgICBUaGlz ICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGlu c3RhbmNlLg0KPiArICBAcGFyYW1baW5dICAgICAgQnVsa091dERhdGEgICBBIHBvaW50ZXIgdG8g dGhlIGJ1ZmZlciBvZiBkYXRhIHRoYXQgd2lsbCBiZSB0cmFuc21pdHRlZCB0byBVU0INCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIG9yIHJlY2VpdmVkIGZyb20gVVNC IGRldmljZS4NCj4gKyAgQHBhcmFtW2luLCBvdXRdIERhdGFMZW5ndGggICAgQSBwb2ludGVyIHRv IHRoZSBQYWNrZXRMZW5ndGguDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgVGhl IHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFU VVMNCj4gK0VGSUFQSQ0KPiArUm5kaXNVbmRpVHJhbnNtaXQgKA0KPiArICBJTiAgICAgIFBYRV9D REIgICAgICAgICAgICAgICAgICAgICAgKkNkYiwNCj4gKyAgSU4gICAgICBFREtJSV9VU0JfRVRI RVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiAgICAgIFZPSUQgICAgICAgICAgICAgICAg ICAgICAgICAgKkJ1bGtPdXREYXRhLA0KPiArICBJTiBPVVQgIFVJTlROICAgICAgICAgICAgICAg ICAgICAgICAgKkRhdGFMZW5ndGgNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAg ICAgICAgICBTdGF0dXM7DQo+ICsgIFVTQl9STkRJU19ERVZJQ0UgICAgICAgICpVc2JSbmRpc0Rl dmljZTsNCj4gKyAgUkVNT1RFX05ESVNfUEFDS0VUX01TRyAgKlJuZGlzUGFja2V0TXNnOw0KPiAr ICBVSU5UTiAgICAgICAgICAgICAgICAgICBUcmFuc2Zlckxlbmd0aDsNCj4gKw0KPiArICBERUJV RyAoKERFQlVHX0lORk8sICJSbmRpc1VuZGlUcmFuc21pdCBEYXRhTGVuZ3RoIDogJXhcbiIsICpE YXRhTGVuZ3RoKSk7DQo+ICsNCj4gKyAgVXNiUm5kaXNEZXZpY2UgPSBVU0JfUk5ESVNfREVWSUNF X0ZST01fVEhJUyAoVGhpcyk7DQo+ICsNCj4gKyAgUm5kaXNQYWNrZXRNc2cgPSBBbGxvY2F0ZVpl cm9Qb29sIChzaXplb2YgKFJFTU9URV9ORElTX1BBQ0tFVF9NU0cpICsgKkRhdGFMZW5ndGgpOw0K PiArICBpZiAoUm5kaXNQYWNrZXRNc2cgPT0gTlVMTCkgew0KPiArICAgIHJldHVybiBFRklfT1VU X09GX1JFU09VUkNFUzsNCj4gKyAgfQ0KPiArDQo+ICsgIFJuZGlzUGFja2V0TXNnLT5NZXNzYWdl VHlwZSAgID0gUk5ESVNfUEFDS0VUX01TRzsNCj4gKyAgUm5kaXNQYWNrZXRNc2ctPk1lc3NhZ2VM ZW5ndGggPSBzaXplb2YgKFJFTU9URV9ORElTX1BBQ0tFVF9NU0cpICsgKFVJTlQzMikqRGF0YUxl bmd0aDsNCj4gKyAgUm5kaXNQYWNrZXRNc2ctPkRhdGFPZmZzZXQgICAgPSBzaXplb2YgKFJFTU9U RV9ORElTX1BBQ0tFVF9NU0cpIC0gODsNCj4gKyAgUm5kaXNQYWNrZXRNc2ctPkRhdGFMZW5ndGgg ICAgPSAoVUlOVDMyKSpEYXRhTGVuZ3RoOw0KPiArDQo+ICsgIENvcHlNZW0gKA0KPiArICAgICgo VUlOVDggKilSbmRpc1BhY2tldE1zZykgKyBzaXplb2YgKFJFTU9URV9ORElTX1BBQ0tFVF9NU0cp LA0KPiArICAgIEJ1bGtPdXREYXRhLA0KPiArICAgICpEYXRhTGVuZ3RoDQo+ICsgICAgKTsNCj4g Kw0KPiArICBUcmFuc2Zlckxlbmd0aCA9IFJuZGlzUGFja2V0TXNnLT5NZXNzYWdlTGVuZ3RoOw0K PiArDQo+ICsgIFN0YXR1cyA9IFJuZGlzVHJhbnNtaXREYXRhTXNnICgNCj4gKyAgICAgICAgICAg ICBVc2JSbmRpc0RldmljZSwNCj4gKyAgICAgICAgICAgICAoUkVNT1RFX05ESVNfTVNHX0hFQURF UiAqKVJuZGlzUGFja2V0TXNnLA0KPiArICAgICAgICAgICAgICZUcmFuc2Zlckxlbmd0aA0KPiAr ICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiXG5SbmRpc1Vu ZGlUcmFuc21pdCBUcmFuc2Zlckxlbmd0aCAlbHhcbiIsIFRyYW5zZmVyTGVuZ3RoKSk7DQo+ICsN Cj4gKyAgRnJlZVBvb2wgKFJuZGlzUGFja2V0TXNnKTsNCj4gKw0KPiArICByZXR1cm4gU3RhdHVz Ow0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgUmVjZWl2ZXMgYW5kIHJlbW92ZXMgUk5ESVMgaGVh ZGVyIGFuZCByZXR1cm5zIHRoZSByYXcgZGF0YS4NCj4gKw0KPiArICBAcGFyYW1baW5dICAgICAg Q2RiICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4N Cj4gKyAgQHBhcmFtW2luXSAgICAgIFRoaXMgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFREtJ SV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSBC dWxrSW5EYXRhICAgIEEgcG9pbnRlciB0byB0aGUgYnVmZmVyIG9mIGRhdGEgdGhhdCB3aWxsIGJl IHRyYW5zbWl0dGVkIHRvIFVTQg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk ZXZpY2Ugb3IgcmVjZWl2ZWQgZnJvbSBVU0IgZGV2aWNlLg0KPiArICBAcGFyYW1baW4sIG91dF0g RGF0YUxlbmd0aCAgICBBIHBvaW50ZXIgdG8gdGhlIFBhY2tldExlbmd0aC4NCj4gKw0KPiArICBA cmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNz ZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX0JVRkZFUl9UT09fU01BTEwgIFRoZSB1c2VyIHByb3Zp ZGVkIGJ1ZmZlciBpcyB0b28gc21hbGwNCj4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAg ICAgTm8gYnVmZmVyIHdhcyBmb3VuZCBpbiB0aGUgbGlzdC4NCj4gKw0KPiArKiovDQo+ICtFRklf U1RBVFVTDQo+ICtFRklBUEkNCj4gK1JuZGlzVW5kaVJlY2VpdmUgKA0KPiArICBJTiAgICAgUFhF X0NEQiAgICAgICAgICAgICAgICAgICAgICAqQ2RiLA0KPiArICBJTiAgICAgRURLSUlfVVNCX0VU SEVSTkVUX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gT1VUIFZPSUQgICAgICAgICAgICAgICAg ICAgICAgICAgKkJ1bGtJbkRhdGEsDQo+ICsgIElOIE9VVCBVSU5UTiAgICAgICAgICAgICAgICAg ICAgICAgICpEYXRhTGVuZ3RoDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAg ICAgICAgU3RhdHVzOw0KPiArICBVU0JfUk5ESVNfREVWSUNFICAgICAgICAqVXNiUm5kaXNEZXZp Y2U7DQo+ICsgIFJFTU9URV9ORElTX1BBQ0tFVF9NU0cgICpSbmRpc1BhY2tldE1zZzsNCj4gKyAg VUlOVE4gICAgICAgICAgICAgICAgICAgVHJhbnNmZXJMZW5ndGg7DQo+ICsgIFZPSUQgICAgICAg ICAgICAgICAgICAgICpCdWZmZXI7DQo+ICsgIFBBQ0tFVF9MSVNUICAgICAgICAgICAgICpIZWFk UGFja2V0Ow0KPiArICBQQUNLRVRfTElTVCAgICAgICAgICAgICAqUGFja2V0TGlzdDsNCj4gKw0K PiArICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhbnkgb3V0c3RhbmRpbmcgcGFja2V0IHRvIHJlY2Vp dmUNCj4gKyAgLy8gVGhlIGJ1ZmZlciBhbGxvY2F0ZWQgaGFzIGEgbGlua2VkIExpc3QgZm9sbG93 ZWQgYnkgdGhlIHBhY2tldC4NCj4gKw0KPiArICBVc2JSbmRpc0RldmljZSA9IFVTQl9STkRJU19E RVZJQ0VfRlJPTV9USElTIChUaGlzKTsNCj4gKyAgQnVmZmVyICAgICAgICAgPSBOVUxMOw0KPiAr ICBIZWFkUGFja2V0ICAgICA9IE5VTEw7DQo+ICsNCj4gKyAgd2hpbGUgKDEpIHsNCj4gKyAgICBC dWZmZXIgPSBBbGxvY2F0ZVplcm9Qb29sIChzaXplb2YgKFBBQ0tFVF9MSVNUKSArIHNpemVvZiAo UkVNT1RFX05ESVNfUEFDS0VUX01TRykgKyBVc2JSbmRpc0RldmljZS0+TWF4VHJhbnNmZXJTaXpl KTsNCj4gKyAgICBpZiAoQnVmZmVyID09IE5VTEwpIHsNCj4gKyAgICAgIHJldHVybiBFRklfT1VU X09GX1JFU09VUkNFUzsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBSbmRpc1BhY2tldE1zZyAgICAg ICAgICAgICAgICA9IChSRU1PVEVfTkRJU19QQUNLRVRfTVNHICopKHNpemVvZiAoUEFDS0VUX0xJ U1QpICsgKFVJTlQ4ICopQnVmZmVyKTsNCj4gKyAgICBQYWNrZXRMaXN0ICAgICAgICAgICAgICAg ICAgICA9IChQQUNLRVRfTElTVCAqKUJ1ZmZlcjsNCj4gKyAgICBQYWNrZXRMaXN0LT5QYWNrZXRT dGFydEJ1ZmZlciA9IChVSU5UOCAqKUJ1ZmZlciArIHNpemVvZiAoUEFDS0VUX0xJU1QpOw0KPiAr ICAgIC8vIFNhdmUgdGhlIG9yaWdpbmFsIGFkZHJlc3MgZm9yIGZyZWVpbmcgaXQgdXANCj4gKyAg ICBQYWNrZXRMaXN0LT5PcmdCdWZmZXIgPSAoVUlOVDggKilCdWZmZXI7DQo+ICsgICAgVHJhbnNm ZXJMZW5ndGggICAgICAgID0gVXNiUm5kaXNEZXZpY2UtPk1heFRyYW5zZmVyU2l6ZTsNCj4gKw0K PiArICAgIFN0YXR1cyA9IFJuZGlzUmVjZWl2ZURhdGFNc2cgKA0KPiArICAgICAgICAgICAgICAg VXNiUm5kaXNEZXZpY2UsDQo+ICsgICAgICAgICAgICAgICAoUkVNT1RFX05ESVNfTVNHX0hFQURF UiAqKVJuZGlzUGFja2V0TXNnLA0KPiArICAgICAgICAgICAgICAgJlRyYW5zZmVyTGVuZ3RoDQo+ ICsgICAgICAgICAgICAgICApOw0KPiArDQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSB8 fCAoVHJhbnNmZXJMZW5ndGggPT0gMCkpIHsNCj4gKyAgICAgIEZyZWVQb29sIChCdWZmZXIpOw0K PiArICAgICAgYnJlYWs7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgLy8gQ29sbGVjdCBhbGwgdGhl IFJORElTIHBhY2tldCBpbiBMaW5rZWQgbGlzdC4NCj4gKyAgICBpZiAoKFJuZGlzUGFja2V0TXNn LT5NZXNzYWdlVHlwZSA9PSBSTkRJU19QQUNLRVRfTVNHKSAmJg0KPiArICAgICAgICAoUm5kaXNQ YWNrZXRNc2ctPkRhdGFPZmZzZXQgPT0gc2l6ZW9mIChSRU1PVEVfTkRJU19QQUNLRVRfTVNHKSAt IFJORElTX1JFU0VSVkVEX0JZVEVfTEVOR1RIKSAmJg0KPiArICAgICAgICAoVHJhbnNmZXJMZW5n dGggPj0gUm5kaXNQYWNrZXRNc2ctPk1lc3NhZ2VMZW5ndGgpKQ0KPiArICAgIHsNCj4gKyAgICAg IC8vIEluc2VydCBQYWNrZXQNCj4gKyAgICAgIFBhY2tldExpc3QtPlJlbWFpbmluZ0xlbmd0aCA9 IFRyYW5zZmVyTGVuZ3RoOw0KPiArICAgICAgSW5zZXJ0VGFpbExpc3QgKCZVc2JSbmRpc0Rldmlj ZS0+UmVjZWl2ZVBhY2tldExpc3QsIEJ1ZmZlcik7DQo+ICsgICAgfSBlbHNlIHsNCj4gKyAgICAg IEZyZWVQb29sIChCdWZmZXIpOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIHdoaWxlICgh SXNMaXN0RW1wdHkgKCZVc2JSbmRpc0RldmljZS0+UmVjZWl2ZVBhY2tldExpc3QpKSB7DQo+ICsg ICAgSGVhZFBhY2tldCA9IChQQUNLRVRfTElTVCAqKUdldEZpcnN0Tm9kZSAoJlVzYlJuZGlzRGV2 aWNlLT5SZWNlaXZlUGFja2V0TGlzdCk7DQo+ICsNCj4gKyAgICBSbmRpc1BhY2tldE1zZyA9IChS RU1PVEVfTkRJU19QQUNLRVRfTVNHICopKFVJTlQ4ICopSGVhZFBhY2tldC0+UGFja2V0U3RhcnRC dWZmZXI7DQo+ICsNCj4gKyAgICBQcmludFJuZGlzTXNnICgoUkVNT1RFX05ESVNfTVNHX0hFQURF UiAqKVJuZGlzUGFja2V0TXNnKTsNCj4gKw0KPiArICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIHBh Y2tldCBpcyB2YWxpZCBSTkRJUyBwYWNrZXQuDQo+ICsgICAgaWYgKChIZWFkUGFja2V0LT5SZW1h aW5pbmdMZW5ndGggPiBzaXplb2YgKFJFTU9URV9ORElTX1BBQ0tFVF9NU0cpKSAmJiAoUm5kaXNQ YWNrZXRNc2ctPk1lc3NhZ2VUeXBlID09IFJORElTX1BBQ0tFVF9NU0cpICYmDQo+ICsgICAgICAg IChSbmRpc1BhY2tldE1zZy0+RGF0YU9mZnNldCA9PSAoc2l6ZW9mIChSRU1PVEVfTkRJU19QQUNL RVRfTVNHKSAtIFJORElTX1JFU0VSVkVEX0JZVEVfTEVOR1RIKSkgJiYNCj4gKyAgICAgICAgKEhl YWRQYWNrZXQtPlJlbWFpbmluZ0xlbmd0aCA+PSBSbmRpc1BhY2tldE1zZy0+TWVzc2FnZUxlbmd0 aCkpDQo+ICsgICAgew0KPiArICAgICAgaWYgKCpEYXRhTGVuZ3RoID49IFJuZGlzUGFja2V0TXNn LT5EYXRhTGVuZ3RoKSB7DQo+ICsgICAgICAgIENvcHlNZW0gKA0KPiArICAgICAgICAgIEJ1bGtJ bkRhdGEsDQo+ICsgICAgICAgICAgKFVJTlQ4ICopUm5kaXNQYWNrZXRNc2cgKyAoUm5kaXNQYWNr ZXRNc2ctPkRhdGFPZmZzZXQgKyBSTkRJU19SRVNFUlZFRF9CWVRFX0xFTkdUSCksDQo+ICsgICAg ICAgICAgUm5kaXNQYWNrZXRNc2ctPkRhdGFMZW5ndGgNCj4gKyAgICAgICAgICApOw0KPiArDQo+ ICsgICAgICAgICpEYXRhTGVuZ3RoID0gIFJuZGlzUGFja2V0TXNnLT5EYXRhTGVuZ3RoOw0KPiAr DQo+ICsgICAgICAgIEhlYWRQYWNrZXQtPlJlbWFpbmluZ0xlbmd0aCAgID0gSGVhZFBhY2tldC0+ UmVtYWluaW5nTGVuZ3RoIC0gUm5kaXNQYWNrZXRNc2ctPk1lc3NhZ2VMZW5ndGg7DQo+ICsgICAg ICAgIEhlYWRQYWNrZXQtPlBhY2tldFN0YXJ0QnVmZmVyID0gKFVJTlQ4ICopUm5kaXNQYWNrZXRN c2cgKyBSbmRpc1BhY2tldE1zZy0+TWVzc2FnZUxlbmd0aDsNCj4gKw0KPiArICAgICAgICByZXR1 cm4gRUZJX1NVQ0NFU1M7DQo+ICsgICAgICB9IGVsc2Ugew0KPiArICAgICAgICAqRGF0YUxlbmd0 aCA9IFJuZGlzUGFja2V0TXNnLT5EYXRhTGVuZ3RoOw0KPiArICAgICAgICByZXR1cm4gRUZJX0JV RkZFUl9UT09fU01BTEw7DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgUmVtb3Zl RW50cnlMaXN0ICgmSGVhZFBhY2tldC0+UGFja2V0TGlzdCk7DQo+ICsgICAgRnJlZVBvb2wgKChQ QUNLRVRfTElTVCAqKUhlYWRQYWNrZXQtPk9yZ0J1ZmZlcik7DQo+ICsgIH0NCj4gKw0KPiArICBy ZXR1cm4gRUZJX05PVF9GT1VORDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgaXMgYSBk dW1teSBmdW5jdGlvbiB3aGljaCBqdXN0IHJldHVybnMuIFVuaW1wbGVtZW50ZWQgRURLSUlfVVNC X0VUSEVSTkVUX1BST1RPQ09MIGZ1bmN0aW9ucw0KPiArICBwb2ludCB0byB0aGlzIGZ1bmN0aW9u Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRl c2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBO ZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklf U1VDQ0VTUyAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArDQo+ICsq Ki8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArUm5kaXNEdW1teVJldHVybiAoDQo+ICsg IElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4g K3sNCj4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiUm5kaXNEdW1teVJldHVybiBjYWxsZWRcbiIp KTsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhp cyBmdW5jdGlvbiBzZW5kIHRoZSBSTkRJUyBjb21tYW5kIHRocm91Z2ggdGhlIGRldmljZSdzIGNv bnRyb2wgZW5kcG9pbnQNCj4gKw0KPiArICBAcGFyYW1baW5dICBVc2JSbmRpc0RldmljZSAgICBB IHBvaW50ZXIgdG8gdGhlIFVTQl9STkRJU19ERVZJQ0UgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtp bl0gIFJuZGlzTXNnICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgUkVNT1RFX05ESVNfTVNHX0hF QURFUiBkYXRhLg0KPiArICBAcGFyYW1bb3V0XSBSbmRpc01zZ1Jlc3BvbnNlICBBIHBvaW50ZXIg dG8gdGhlIFJFTU9URV9ORElTX01TR19IRUFERVIgZGF0YSBmb3IgZ2V0dGluZyByZXNwb25zZXMu DQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIGJ1bGsgdHJhbnNm ZXIgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9T VEFUVVMNCj4gK1JuZGlzQ29udHJvbE1zZyAoDQo+ICsgIElOICBVU0JfUk5ESVNfREVWSUNFICAg ICAgICAqVXNiUm5kaXNEZXZpY2UsDQo+ICsgIElOICBSRU1PVEVfTkRJU19NU0dfSEVBREVSICAq Um5kaXNNc2csDQo+ICsgIE9VVCBSRU1PVEVfTkRJU19NU0dfSEVBREVSICAqUm5kaXNNc2dSZXNw b25zZQ0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9VU0JfSU9fUFJPVE9DT0wgICAgICAgICAgICpV c2JJbyA9IFVzYlJuZGlzRGV2aWNlLT5Vc2JJbzsNCj4gKyAgRUZJX1VTQl9ERVZJQ0VfUkVRVUVT VCAgICAgICAgRGV2UmVxOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICBVc2JT dGF0dXM7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAg VUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgU2F2ZVJlc3BvbnNlVHlwZTsNCj4gKyAgVUlO VDMyICAgICAgICAgICAgICAgICAgICAgICAgU2F2ZVJlc3BvbnNlTGVuZ3RoOw0KPiArICBVSU5U MzIgICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gKyAgUkVNT1RFX05ESVNfSU5JVElB TElaRV9DTVBMVCAgKlJuZGlzSW5pdENtcGx0Ow0KPiArDQo+ICsgIFNhdmVSZXNwb25zZVR5cGUg ICA9IDA7DQo+ICsgIFNhdmVSZXNwb25zZUxlbmd0aCA9IDA7DQo+ICsgIFJuZGlzSW5pdENtcGx0 ICAgICA9IChSRU1PVEVfTkRJU19JTklUSUFMSVpFX0NNUExUICopUm5kaXNNc2dSZXNwb25zZTsN Cj4gKw0KPiArICBpZiAoUm5kaXNNc2dSZXNwb25zZSkgew0KPiArICAgIFNhdmVSZXNwb25zZVR5 cGUgICA9IFJuZGlzTXNnUmVzcG9uc2UtPk1lc3NhZ2VUeXBlOw0KPiArICAgIFNhdmVSZXNwb25z ZUxlbmd0aCA9IFJuZGlzTXNnUmVzcG9uc2UtPk1lc3NhZ2VMZW5ndGg7DQo+ICsgIH0NCj4gKw0K PiArICBaZXJvTWVtICgmRGV2UmVxLCBzaXplb2YgKEVGSV9VU0JfREVWSUNFX1JFUVVFU1QpKTsN Cj4gKw0KPiArICBEZXZSZXEuUmVxdWVzdFR5cGUgPSBVU0JfUkVRX1RZUEVfQ0xBU1MgfCBVU0Jf VEFSR0VUX0lOVEVSRkFDRTsNCj4gKyAgRGV2UmVxLlJlcXVlc3QgICAgID0gU0VORF9FTkNBUFNV TEFURURfQ09NTUFORDsNCj4gKyAgRGV2UmVxLlZhbHVlICAgICAgID0gMDsNCj4gKyAgRGV2UmVx LkluZGV4ICAgICAgID0gMDsNCj4gKyAgRGV2UmVxLkxlbmd0aCAgICAgID0gKFVJTlQxNilSbmRp c01zZy0+TWVzc2FnZUxlbmd0aDsNCj4gKw0KPiArICBQcmludFJuZGlzTXNnIChSbmRpc01zZyk7 DQo+ICsNCj4gKyAgU3RhdHVzID0gVXNiSW8tPlVzYkNvbnRyb2xUcmFuc2ZlciAoDQo+ICsgICAg ICAgICAgICAgICAgICAgIFVzYklvLA0KPiArICAgICAgICAgICAgICAgICAgICAmRGV2UmVxLA0K PiArICAgICAgICAgICAgICAgICAgICBFZmlVc2JEYXRhT3V0LA0KPiArICAgICAgICAgICAgICAg ICAgICBVU0JfRVRIRVJORVRfVFJBTlNGRVJfVElNRU9VVCwNCj4gKyAgICAgICAgICAgICAgICAg ICAgUm5kaXNNc2csDQo+ICsgICAgICAgICAgICAgICAgICAgIFJuZGlzTXNnLT5NZXNzYWdlTGVu Z3RoLA0KPiArICAgICAgICAgICAgICAgICAgICAmVXNiU3RhdHVzDQo+ICsgICAgICAgICAgICAg ICAgICAgICk7DQo+ICsNCj4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiUm5kaXNDb250cm9sTXNn OiBVc2JTdGF0dXMgOiAleCBTdGF0dXMgOiAlciBSbmRpc01zZ1Jlc3BvbnNlIDogJWx4XG4iLCBV c2JTdGF0dXMsIFN0YXR1cywgUm5kaXNNc2dSZXNwb25zZSkpOw0KPiArDQo+ICsgIC8vIEVycm9y IG9yIG5vIHJlc3BvbnNlIGV4cGVjdGVkDQo+ICsgIGlmICgoRUZJX0VSUk9SIChTdGF0dXMpKSB8 fCAoUm5kaXNNc2dSZXNwb25zZSA9PSBOVUxMKSkgew0KPiArICAgIERFQlVHICgoREVCVUdfSU5G TywgIlJuZGlzQ29udHJvbE1zZzogVXNiU3RhdHVzIDogJXggU3RhdHVzIDogJXJcbiIsIFVzYlN0 YXR1cywgU3RhdHVzKSk7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsg IGZvciAoSW5kZXggPSAwOyBJbmRleCA8IChSTkRJU19DT05UUk9MX1RJTUVPVVQvMTAwKTsgSW5k ZXgrKykgew0KPiArICAgIFJlYWRSbmRpc1Jlc3BvbnNlSW50ZXJydXB0IChVc2JSbmRpc0Rldmlj ZSk7DQo+ICsgICAgWmVyb01lbSAoJkRldlJlcSwgc2l6ZW9mIChFRklfVVNCX0RFVklDRV9SRVFV RVNUKSk7DQo+ICsNCj4gKyAgICBEZXZSZXEuUmVxdWVzdFR5cGUgPSBVU0JfRU5EUE9JTlRfRElS X0lOIHwgVVNCX1JFUV9UWVBFX0NMQVNTIHwgVVNCX1RBUkdFVF9JTlRFUkZBQ0U7DQo+ICsgICAg RGV2UmVxLlJlcXVlc3QgICAgID0gR0VUX0VOQ0FQU1VMQVRFRF9SRVNQT05TRTsNCj4gKyAgICBE ZXZSZXEuVmFsdWUgICAgICAgPSAwOw0KPiArICAgIERldlJlcS5JbmRleCAgICAgICA9IDA7DQo+ ICsgICAgRGV2UmVxLkxlbmd0aCAgICAgID0gKFVJTlQxNilSbmRpc01zZ1Jlc3BvbnNlLT5NZXNz YWdlTGVuZ3RoOw0KPiArDQo+ICsgICAgU3RhdHVzID0gVXNiSW8tPlVzYkNvbnRyb2xUcmFuc2Zl ciAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgVXNiSW8sDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgJkRldlJlcSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICBFZmlVc2JEYXRhSW4sDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgVVNCX0VUSEVSTkVUX1RSQU5TRkVSX1RJTUVPVVQsDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgUm5kaXNNc2dSZXNwb25zZSwNCj4gKyAgICAgICAgICAg ICAgICAgICAgICBSbmRpc01zZ1Jlc3BvbnNlLT5NZXNzYWdlTGVuZ3RoLA0KPiArICAgICAgICAg ICAgICAgICAgICAgICZVc2JTdGF0dXMNCj4gKyAgICAgICAgICAgICAgICAgICAgICApOw0KPiAr DQo+ICsgICAgREVCVUcgKChERUJVR19JTkZPLCAiUm5kaXNDb250cm9sTXNnIFJlc3BvbnNlOiBV c2JTdGF0dXMgOiAleCBTdGF0dXMgOiAlciBcbiIsIFVzYlN0YXR1cywgU3RhdHVzKSk7DQo+ICsN Cj4gKyAgICBQcmludFJuZGlzTXNnIChSbmRpc01zZ1Jlc3BvbnNlKTsNCj4gKw0KPiArICAgIGlm ICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBpZiAoKFJuZGlzSW5pdENtcGx0LT5S ZXF1ZXN0SUQgIT0gKChSRU1PVEVfTkRJU19JTklUSUFMSVpFX0NNUExUICopUm5kaXNNc2cpLT5S ZXF1ZXN0SUQpIHx8IChSbmRpc0luaXRDbXBsdC0+TWVzc2FnZVR5cGUgIT0gU2F2ZVJlc3BvbnNl VHlwZSkpIHsNCj4gKyAgICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiUmV0cnkgdGhlIHJlc3Bv bnNlXG4iKSk7DQo+ICsNCj4gKyAgICAgICAgUm5kaXNNc2dSZXNwb25zZS0+TWVzc2FnZVR5cGUg ICA9IFNhdmVSZXNwb25zZVR5cGU7DQo+ICsgICAgICAgIFJuZGlzTXNnUmVzcG9uc2UtPk1lc3Nh Z2VMZW5ndGggPSBTYXZlUmVzcG9uc2VMZW5ndGg7DQo+ICsgICAgICAgIGNvbnRpbnVlOw0KPiAr ICAgICAgfQ0KPiArICAgIH0NCj4gKw0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4g Kw0KPiArICBERUJVRyAoKERFQlVHX0lORk8sICJSbmRpc0NvbnRyb2xNc2c6IFRpbWVPdXRcbiIp KTsNCj4gKw0KPiArICByZXR1cm4gRUZJX1RJTUVPVVQ7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiAr ICBUaGlzIGZ1bmN0aW9uIHNlbmQgdGhlIFJORElTIGNvbW1hbmQgdGhyb3VnaCB0aGUgZGV2aWNl J3MgRGF0YSBlbmRwb2ludA0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICAgICBVc2JSbmRpc0Rldmlj ZSAgQSBwb2ludGVyIHRvIHRoZSBVU0JfUk5ESVNfREVWSUNFIGluc3RhbmNlLg0KPiArICBAcGFy YW1baW5dICAgICAgUm5kaXNNc2cgICAgICAgIEEgcG9pbnRlciB0byB0aGUgUkVNT1RFX05ESVNf TVNHX0hFQURFUiB0byBzZW5kIG91dC4NCj4gKyAgQHBhcmFtW2luLCBvdXRdIFRyYW5zZmVyTGVu Z3RoICBUaGUgbGVuZ3RoIG9mIHRoZSBSbmRpc01zZyBkYXRhIHRvIHRyYW5zZmVyLg0KPiArDQo+ ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3Nm dWxseS4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtSbmRpc1RyYW5zbWl0RGF0YU1z ZyAoDQo+ICsgIElOICAgICAgVVNCX1JORElTX0RFVklDRSAgICAgICAgKlVzYlJuZGlzRGV2aWNl LA0KPiArICBJTiAgICAgIFJFTU9URV9ORElTX01TR19IRUFERVIgICpSbmRpc01zZywNCj4gKyAg SU4gT1VUICBVSU5UTiAgICAgICAgICAgICAgICAgICAqVHJhbnNmZXJMZW5ndGgNCj4gKyAgKQ0K PiArew0KPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ICsgIFVJTlQzMiAgICAgIFVzYlN0YXR1 czsNCj4gKw0KPiArICBpZiAoVXNiUm5kaXNEZXZpY2UtPkJ1bGtJbkVuZHBvaW50ID09IDApIHsN Cj4gKyAgICBHZXRFbmRwb2ludCAoVXNiUm5kaXNEZXZpY2UtPlVzYklvQ2RjRGF0YSwgVXNiUm5k aXNEZXZpY2UpOw0KPiArICB9DQo+ICsNCj4gKyAgUHJpbnRSbmRpc01zZyAoUm5kaXNNc2cpOw0K PiArDQo+ICsgIFN0YXR1cyA9IFVzYlJuZGlzRGV2aWNlLT5Vc2JJb0NkY0RhdGEtPlVzYkJ1bGtU cmFuc2ZlciAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VXNiUm5kaXNEZXZpY2UtPlVzYklvQ2RjRGF0YSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBVc2JSbmRpc0RldmljZS0+QnVsa091dEVuZHBvaW50LA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJuZGlzTXNnLA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZmVyTGVuZ3Ro LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9UWF9F VEhFUk5FVF9CVUxLX1RJTUVPVVQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJlVzYlN0YXR1cw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgaWYgKFN0YXR1cyA9PSBFRklfU1VDQ0VTUykgew0K PiArICAgIGdTdG9wQnVsa0luQ250ID0gTUFYSU1VTV9TVE9QQlVMS0lOX0NOVDsgICAgIC8vIEFm dGVyIHNlbmRpbmcgY21kICx3ZSB3aWxsIHBvbGxpbmcgcmVjZWl2ZSBwYWNrYWdlIGZvciBNQVhJ TVVNX1NUT1BCVUxLSU5fQ05UIHRpbWVzDQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gU3RhdHVz Ow0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBmdW5jdGlvbiBzZW5kIHRoZSBSTkRJUyBj b21tYW5kIHRocm91Z2ggdGhlIGRldmljZSdzIERhdGEgZW5kcG9pbnQNCj4gKw0KPiArICBAcGFy YW1baW5dICAgICAgVXNiUm5kaXNEZXZpY2UgICAgQSBwb2ludGVyIHRvIHRoZSBVU0JfUk5ESVNf REVWSUNFIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW4sIG91dF0gUm5kaXNNc2cgICAgICAgICAg QSBwb2ludGVyIHRvIHRoZSBSRU1PVEVfTkRJU19NU0dfSEVBREVSIHRvIHNlbmQgb3V0Lg0KPiAr ICBAcGFyYW1baW4sIG91dF0gVHJhbnNmZXJMZW5ndGggICAgVGhlIGxlbmd0aCBvZiB0aGUgUm5k aXNNc2cgZGF0YSB0byB0cmFuc2Zlci4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsNCj4gKyoqLw0KPiArRUZJ X1NUQVRVUw0KPiArUm5kaXNSZWNlaXZlRGF0YU1zZyAoDQo+ICsgIElOICAgICAgVVNCX1JORElT X0RFVklDRSAgICAgICAgKlVzYlJuZGlzRGV2aWNlLA0KPiArICBJTiBPVVQgIFJFTU9URV9ORElT X01TR19IRUFERVIgICpSbmRpc01zZywNCj4gKyAgSU4gT1VUICBVSU5UTiAgICAgICAgICAgICAg ICAgICAqVHJhbnNmZXJMZW5ndGgNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICBTdGF0 dXM7DQo+ICsgIFVJTlQzMiAgICAgIFVzYlN0YXR1czsNCj4gKw0KPiArICBVc2JTdGF0dXMgPSAw Ow0KPiArDQo+ICsgIGlmIChVc2JSbmRpc0RldmljZS0+QnVsa0luRW5kcG9pbnQgPT0gMCkgew0K PiArICAgIEdldEVuZHBvaW50IChVc2JSbmRpc0RldmljZS0+VXNiSW9DZGNEYXRhLCBVc2JSbmRp c0RldmljZSk7DQo+ICsgIH0NCj4gKw0KPiArICAvLyBVc2UgZ1N0b3BCdWxrSW5DbnQgdG8gc3Rv cCBCdWxrSW4gY29tbWFuZA0KPiArICBpZiAoZ1N0b3BCdWxrSW5DbnQgfHwgTEFOX0JVTEtJTl9D TURfQ09OVFJPTCkgew0KPiArICAgIFN0YXR1cyA9IFVzYlJuZGlzRGV2aWNlLT5Vc2JJb0NkY0Rh dGEtPlVzYkJ1bGtUcmFuc2ZlciAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBVc2JSbmRpc0RldmljZS0+VXNiSW9DZGNEYXRhLA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPkJ1bGtJ bkVuZHBvaW50LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUm5kaXNNc2csDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBUcmFuc2Zlckxlbmd0aCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFVTQl9SWF9FVEhFUk5FVF9CVUxLX1RJTUVPVVQsDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmVXNiU3RhdHVzDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiArDQo+ICsgICAgaWYg KCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIGdTdG9wQnVsa0luQ250ID0gTUlOSU1V TV9TVE9QQlVMS0lOX0NOVDsNCj4gKyAgICB9IGVsc2Ugew0KPiArICAgICAgZ1N0b3BCdWxrSW5D bnQtLTsNCj4gKyAgICB9DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgU3RhdHVzICAgICAgICAgID0g RUZJX1RJTUVPVVQ7DQo+ICsgICAgKlRyYW5zZmVyTGVuZ3RoID0gMDsNCj4gKyAgICBnQmxvY2tC dWxrSW5DbnQrKzsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChnQmxvY2tCdWxrSW5DbnQgPiBCVUxL SU5fQ01EX1BPTExJTkdfQ05UKSB7DQo+ICsgICAgZ1N0b3BCdWxrSW5DbnQgID0gTUlOSU1VTV9T VE9QQlVMS0lOX0NOVDsNCj4gKyAgICBnQmxvY2tCdWxrSW5DbnQgPSAwOw0KPiArICB9DQo+ICsN Cj4gKyAgUHJpbnRSbmRpc01zZyAoUm5kaXNNc2cpOw0KPiArDQo+ICsgIHJldHVybiBTdGF0dXM7 DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBQcmludHMgUk5ESVMgSGVhZGVyIGFuZCBEYXRhDQo+ ICsNCj4gKyAgQHBhcmFtW2luXSBSbmRpc01zZyAgICBBIHBvaW50ZXIgdG8gdGhlIFJFTU9URV9O RElTX01TR19IRUFERVIgZGF0YS4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtQcmludFJuZGlz TXNnICgNCj4gKyAgSU4gIFJFTU9URV9ORElTX01TR19IRUFERVIgICpSbmRpc01zZw0KPiArICAp DQo+ICt7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICBMZW5ndGg7DQo+ICsgIFJFTU9U RV9ORElTX1FVRVJZX0NNUExUICAqUm5kaXNRdWVyeUNtcGx0Ow0KPiArDQo+ICsgIExlbmd0aCA9 IDA7DQo+ICsNCj4gKyAgc3dpdGNoIChSbmRpc01zZy0+TWVzc2FnZVR5cGUpIHsNCj4gKyAgICBj YXNlIFJORElTX1BBQ0tFVF9NU0c6DQo+ICsgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJSTkRJ U19QQUNLRVRfTVNHOlxuIikpOw0KPiArICAgICAgTGVuZ3RoID0gc2l6ZW9mIChSRU1PVEVfTkRJ U19QQUNLRVRfTVNHKSArIDB4MTQ7DQo+ICsgICAgICBicmVhazsNCj4gKyAgICBjYXNlIFJORElT X0lOSVRJQUxJWkVfTVNHOg0KPiArICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiUk5ESVNfSU5J VElBTElaRV9NU0c6XG4iKSk7DQo+ICsgICAgICBMZW5ndGggPSBzaXplb2YgKFJFTU9URV9ORElT X0lOSVRJQUxJWkVfTVNHKTsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIGNhc2UgUk5ESVNfSU5J VElBTElaRV9DTVBMVDoNCj4gKyAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIlJORElTX0lOSVRJ QUxJWkVfQ01QTFQ6XG4iKSk7DQo+ICsgICAgICBMZW5ndGggPSBzaXplb2YgKFJFTU9URV9ORElT X0lOSVRJQUxJWkVfQ01QTFQpOw0KPiArICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSBSTkRJU19I TFRfTVNHOg0KPiArICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiUk5ESVNfSExUX01TRzpcbiIp KTsNCj4gKyAgICAgIExlbmd0aCA9IHNpemVvZiAoUkVNT1RFX05ESVNfSEFMVF9NU0cpOw0KPiAr ICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSBSTkRJU19RVUVSWV9NU0c6DQo+ICsgICAgICBERUJV RyAoKERFQlVHX0lORk8sICJSTkRJU19RVUVSWV9NU0c6XG4iKSk7DQo+ICsgICAgICBMZW5ndGgg PSBzaXplb2YgKFJFTU9URV9ORElTX1FVRVJZX01TRyk7DQo+ICsgICAgICBicmVhazsNCj4gKyAg ICBjYXNlIFJORElTX1FVRVJZX0NNUExUOg0KPiArICAgICAgREVCVUcgKChERUJVR19JTkZPLCAi Uk5ESVNfUVVFUllfQ01QTFQ6XG4iKSk7DQo+ICsgICAgICBSbmRpc1F1ZXJ5Q21wbHQgPSAoUkVN T1RFX05ESVNfUVVFUllfQ01QTFQgKilSbmRpc01zZzsNCj4gKyAgICAgIExlbmd0aCAgICAgICAg ICA9IHNpemVvZiAoUkVNT1RFX05ESVNfUVVFUllfQ01QTFQpICsgUm5kaXNRdWVyeUNtcGx0LT5J bmZvcm1hdGlvbkJ1ZmZlckxlbmd0aDsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIGNhc2UgUk5E SVNfU0VUX01TRzoNCj4gKyAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIlJORElTX1NFVF9NU0c6 XG4iKSk7DQo+ICsgICAgICBMZW5ndGggPSBzaXplb2YgKFJFTU9URV9ORElTX1NFVF9NU0cpOw0K PiArICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSBSTkRJU19TRVRfQ01QTFQ6DQo+ICsgICAgICBE RUJVRyAoKERFQlVHX0lORk8sICJSTkRJU19TRVRfQ01QTFQ6XG4iKSk7DQo+ICsgICAgICBMZW5n dGggPSBzaXplb2YgKFJFTU9URV9ORElTX1NFVF9DTVBMVCk7DQo+ICsgICAgICBicmVhazsNCj4g KyAgICBjYXNlIFJORElTX1JFU0VUX01TRzoNCj4gKyAgICAgIERFQlVHICgoREVCVUdfSU5GTywg IlJORElTX1JFU0VUX01TRzpcbiIpKTsNCj4gKyAgICAgIExlbmd0aCA9IHNpemVvZiAoUkVNT1RF X05ESVNfUkVTRVRfTVNHKTsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIGNhc2UgUk5ESVNfUkVT RVRfQ01QTFQ6DQo+ICsgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJSTkRJU19SRVNFVF9DTVBM VDpcbiIpKTsNCj4gKyAgICAgIExlbmd0aCA9IHNpemVvZiAoUkVNT1RFX05ESVNfUkVTRVRfQ01Q TFQpOw0KPiArICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSBSTkRJU19JTkRJQ0FURV9TVEFUVVNf TVNHOg0KPiArICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiUk5ESVNfSU5ESUNBVEVfU1RBVFVT X01TRzpcbiIpKTsNCj4gKyAgICAgIExlbmd0aCA9IHNpemVvZiAoUkVNT1RFX05ESVNfSU5ESUNB VEVfU1RBVFVTX01TRyk7DQo+ICsgICAgICBicmVhazsNCj4gKyAgICBjYXNlIFJORElTX0tFRVBB TElWRV9NU0c6DQo+ICsgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJSTkRJU19LRUVQQUxJVkVf TVNHOlxuIikpOw0KPiArICAgICAgTGVuZ3RoID0gc2l6ZW9mIChSRU1PVEVfTkRJU19LRUVQQUxJ VkVfTVNHKTsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIGNhc2UgUk5ESVNfS0VFUEFMSVZFX0NN UExUOg0KPiArICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiUk5ESVNfS0VFUEFMSVZFX0NNUExU OlxuIikpOw0KPiArICAgICAgTGVuZ3RoID0gc2l6ZW9mIChSRU1PVEVfTkRJU19LRUVQQUxJVkVf Q01QTFQpOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKExlbmd0aCkgew0KPiArICAgIFVJTlROICBJ bmRleCA9IDA7DQo+ICsgICAgZm9yICggOyBMZW5ndGg7IExlbmd0aCAtPSA0LCBJbmRleCsrKSB7 DQo+ICsgICAgICBERUJVRyAoKERFQlVHX0lORk8sICIlOFhcdCIsICooKFVJTlQzMiAqKVJuZGlz TXNnICsgSW5kZXgpKSk7DQo+ICsgICAgICBpZiAoKChJbmRleCAlIDQpID09IDMpICYmIChJbmRl eCAhPSAwKSkgew0KPiArICAgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJcbiIpKTsNCj4gKyAg ICAgIH0NCj4gKw0KPiArICAgICAgaWYgKChMZW5ndGggPCA4KSAmJiAoTGVuZ3RoID4gNCkpIHsN Cj4gKyAgICAgICAgVUlOVDMyICBEYXRhMzI7DQo+ICsgICAgICAgIEluZGV4Kys7DQo+ICsgICAg ICAgIERhdGEzMiA9ICooKFVJTlQzMiAqKVJuZGlzTXNnICsgSW5kZXgpOw0KPiArICAgICAgICBE RUJVRyAoKERFQlVHX0lORk8sICIlOFhcdCIsIERhdGEzMikpOw0KPiArICAgICAgICBicmVhazsN Cj4gKyAgICAgIH0NCj4gKyAgICB9DQo+ICsNCj4gKyAgICBpZiAoSW5kZXggJSA0KSB7DQo+ICsg ICAgICBERUJVRyAoKERFQlVHX0lORk8sICJcbiIpKTsNCj4gKyAgICB9DQo+ICsgIH0NCj4gK30N Cj4gZGlmZiAtLWdpdCBhL1VzYk5ldHdvcmtQa2cvUmVhZE1lLm1kIGIvVXNiTmV0d29ya1BrZy9S ZWFkTWUubWQNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi5j YjcwNjg0ZjBiZjENCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9Vc2JOZXR3b3JrUGtnL1JlYWRN ZS5tZA0KPiBAQCAtMCwwICsxLDY1IEBADQo+ICsjIFVzYk5ldHdvcmtQa2cNCj4gKw0KPiArVGhp cyBkb2N1bWVudCBpcyBpbnRlbmQgdG8gcHJvdmlkZSBwYWNrYWdlIGluZm9ybWF0aW9uLCBpbmNs dWRlIHRoZSBpbnRlcmZhY2UgZGV0YWlscy4NCj4gKw0KPiArIyBJTkRFWA0KPiArICAqIFtJbnRy b2R1Y3Rpb25dKCNpbnRyb2R1Y3Rpb24pDQo+ICsgICogW0NvbXBvbmVudHNdKCNjb21wb25lbnRz KQ0KPiArICAgICogW1tOZXR3b3JrQ29tbW9uXV0oI25ldHdvcmtjb21tb24pDQo+ICsgICAgKiBb W1VzYkNkY0VjbV1dKCN1c2JjZGNlY20pDQo+ICsgICAgKiBbW1VzYkNkY05jbV1dKCN1c2JjZGNu Y20pDQo+ICsgICAgKiBbW1VzYlJuZGlzXV0oI3VzYnJuZGlzKQ0KPiArDQo+ICsjICBJbnRyb2R1 Y3Rpb24NCj4gK1VzYk5ldHdvcmtQa2cgcHJvdmlkZXMgbmV0d29yayBmdW5jdGlvbnMgZm9yIFVT QiBMQU4gZGV2aWNlcy4NCj4gKw0KPiArIyBDb21wb25lbnRzDQo+ICtCZWxvdyBtb2R1bGUgaXMg aW5jbHVkZWQgaW4gdGhpcyBwYWNrYWdlOjxicj4NCj4gKy0gTmV0d29ya0NvbW1vbg0KPiArLSBV c2JDZGNFY20NCj4gKy0gVXNiQ2RjTmNtDQo+ICstIFVzYlJuZGlzDQo+ICsNCj4gKyMjIFtOZXR3 b3JrQ29tbW9uXQ0KPiArUHJvdmlkZXMgYSBMQU4gZHJpdmVyIGJhc2VkIG9uIFVFRkkgc3BlY2lm aWNhdGlvbihVTkRJKS4gSXQgc3VwcG9ydHMgVVNCIGNvbW11bmljYXRpb24gY2xhc3Mgc3ViY2xh c3MgZGV2aWNlcyBhbmQgVVNCIFJuZGlzIGRldmljZXMsIGRlcGVuZGluZyBvbiB0aGUgVXNiRXRo ZXJuZXRQcm90b2NvbC4NCj4gKw0KPiArIyMgUmVxdWlyZWQgQ29tcG9uZW50cw0KPiArLSBOZXR3 b3JrUGtnDQo+ICsNCj4gKyMjIFtVc2JDZGNFY21dDQo+ICtUaGlzIGRyaXZlciBwcm92aWRlcyBh IGNvbW11bmljYXRpb24gaW50ZXJmYWNlIGZvciBVU0IgRXRoZXJuZXQgZGV2aWNlcyB0aGF0IGZv bGxvd3MgdGhlIEVDTSBwcm90b2NvbC4gVGhlIGRyaXZlciBpbnN0YWxscyBVc2JFdGhlcm5ldFBy b3RvY29sIHdpdGggRUNNIGZ1bmN0aW9ucyB3aGljaCBhcmUgY29uc3VtZWQgYnkgdGhlIE5ldHdv cmtDb21tb24gZHJpdmVyLg0KPiArDQo+ICtUaGUgZHJpdmVyIGlzIGNvbXBhdGlibGUgd2l0aCB0 aGUgZm9sbG93aW5nIFVTQiBjbGFzcyBjb2RlczoNCj4gK3xDbGFzcyBDb2RlfFN1YkNsYXNzIENv ZGV8UHJvdG9jb2wgQ29kZXwNCj4gK3w6LS0tLS0tLS06fDotLS0tLS0tLS0tLTp8Oi0tLS0tLS0t LS0tOnwNCj4gK3wweDAyfDB4MDZ8MHgwMHwNCj4gKw0KPiArIyMgUmVxdWlyZWQgQ29tcG9uZW50 cw0KPiArLSBOZXR3b3JrQ29tbW9uDQo+ICstIE1kZU1vZHVsZVBrZyhVU0IgYnVzIGRyaXZlcikN Cj4gKw0KPiArIyMgW1VzYkNkY05jbV0NCj4gK1RoaXMgZHJpdmVyIHByb3ZpZGVzIGEgY29tbXVu aWNhdGlvbiBpbnRlcmZhY2UgZm9yIFVTQiBFdGhlcm5ldCBkZXZpY2VzIHRoYXQgZm9sbG93cyB0 aGUgTkNNIHByb3RvY29sLiBUaGUgZHJpdmVyIGluc3RhbGxzIFVzYkV0aGVybmV0UHJvdG9jb2wg d2l0aCBOQ00gZnVuY3Rpb25zIHdoaWNoIGFyZSBjb25zdW1lZCBieSB0aGUgTmV0d29ya0NvbW1v biBkcml2ZXIuDQo+ICsNCj4gK1RoZSBkcml2ZXIgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBmb2xs b3dpbmcgVVNCIGNsYXNzIGNvZGVzOg0KPiArfENsYXNzIENvZGV8U3ViQ2xhc3MgQ29kZXxQcm90 b2NvbCBDb2RlfA0KPiArfDotLS0tLS0tLTp8Oi0tLS0tLS0tLS0tOnw6LS0tLS0tLS0tLS06fA0K PiArfDB4MDJ8MHgwRHwweDAwfA0KPiArDQo+ICsjIyBSZXF1aXJlZCBDb21wb25lbnRzDQo+ICst IE5ldHdvcmtDb21tb24NCj4gKy0gTWRlTW9kdWxlUGtnKFVTQiBidXMgZHJpdmVyKQ0KPiArDQo+ ICsjIyBbVXNiUm5kaXNdDQo+ICtUaGlzIGRyaXZlciBwcm92aWRlcyBhIGNvbW11bmljYXRpb24g aW50ZXJmYWNlIGZvciBVU0IgRXRoZXJuZXQgZGV2aWNlcyB0aGF0IGZvbGxvd3MgdGhlIFJORElT IHByb3RvY29sLiBUaGUgZHJpdmVyIGluc3RhbGxzIFVzYkV0aGVybmV0UHJvdG9jb2wgd2l0aCBS TkRJUyBmdW5jdGlvbnMgd2hpY2ggYXJlIGNvbnN1bWVkIGJ5IHRoZSBOZXR3b3JrQ29tbW9uIGRy aXZlci4NCj4gKw0KPiArVGhlIGRyaXZlciBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGZvbGxvd2lu ZyBVU0IgY2xhc3MgY29kZXM6DQo+ICt8Q2xhc3MgQ29kZXxTdWJDbGFzcyBDb2RlfFByb3RvY29s IENvZGV8DQo+ICt8Oi0tLS0tLS0tOnw6LS0tLS0tLS0tLS06fDotLS0tLS0tLS0tLTp8DQo+ICt8 MHgwMnwweDAyfDB4RkZ8DQo+ICt8MHhFRnwweDA0fDB4MDF8DQo+ICsNCj4gKyMjIFJlcXVpcmVk IENvbXBvbmVudHMNCj4gKy0gTmV0d29ya0NvbW1vbg0KPiArLSBNZGVNb2R1bGVQa2coVVNCIGJ1 cyBkcml2ZXIpDQo+ICsNCj4gZGlmZiAtLWdpdCBhL1VzYk5ldHdvcmtQa2cvUmVsZWFzZU5vdGVz Lm1kIGIvVXNiTmV0d29ya1BrZy9SZWxlYXNlTm90ZXMubWQNCj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi5mOGNjY2NkYjA4MzANCj4gLS0tIC9kZXYvbnVsbA0K PiArKysgYi9Vc2JOZXR3b3JrUGtnL1JlbGVhc2VOb3Rlcy5tZA0KPiBAQCAtMCwwICsxLDExIEBA DQo+ICsjIFVzYk5ldHdvcmtQa2cgUmVsZWFzZSBOb3RlczwhLS0gb21pdCBpbiB0b2MgLS0+DQo+ ICsNCj4gKyMgUmVsZWFzZSBIaXN0b3J5PCEtLSBvbWl0IGluIHRvYyAtLT4NCj4gKy0gWzEuMDBd KCMxMDApDQo+ICsNCj4gKyMjIDEuMDANCj4gKw0KPiArKipSZWxlYXNlIERhdGU6KiogTWFyIDEw LCAyMDIyDQo+ICsNCj4gKyoqTmV3IEZlYXR1cmVzKioNCj4gKy0gVXNiTmV0d29ya1BrZyBmaXJz dCByZWxlYXNlLg0KPiAtLQ0KPiAyLjM1LjEud2luZG93cy4yDQo+IC1UaGUgaW5mb3JtYXRpb24g Y29udGFpbmVkIGluIHRoaXMgbWVzc2FnZSBtYXkgYmUgY29uZmlkZW50aWFsIGFuZCBwcm9wcmll dGFyeSB0byBBbWVyaWNhbiBNZWdhdHJlbmRzIChBTUkpLiBUaGlzIGNvbW11bmljYXRpb24gaXMg aW50ZW5kZWQgdG8gYmUgcmVhZCBvbmx5IGJ5IHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0byB3 aG9tIGl0IGlzIGFkZHJlc3NlZCBvciBieSB0aGVpciBkZXNpZ25lZS4gSWYgdGhlIHJlYWRlciBv ZiB0aGlzIG1lc3NhZ2UgaXMgbm90IHRoZSBpbnRlbmRlZCByZWNpcGllbnQsIHlvdSBhcmUgb24g bm90aWNlIHRoYXQgYW55IGRpc3RyaWJ1dGlvbiBvZiB0aGlzIG1lc3NhZ2UsIGluIGFueSBmb3Jt LCBpcyBzdHJpY3RseSBwcm9oaWJpdGVkLiBQbGVhc2UgcHJvbXB0bHkgbm90aWZ5IHRoZSBzZW5k ZXIgYnkgcmVwbHkgZS1tYWlsIG9yIGJ5IHRlbGVwaG9uZSBhdCA3NzAtMjQ2LTg2MDAsIGFuZCB0 aGVuIGRlbGV0ZSBvciBkZXN0cm95IGFsbCBjb3BpZXMgb2YgdGhlIHRyYW5zbWlzc2lvbi4NCi1U aGUgaW5mb3JtYXRpb24gY29udGFpbmVkIGluIHRoaXMgbWVzc2FnZSBtYXkgYmUgY29uZmlkZW50 aWFsIGFuZCBwcm9wcmlldGFyeSB0byBBbWVyaWNhbiBNZWdhdHJlbmRzIChBTUkpLiBUaGlzIGNv bW11bmljYXRpb24gaXMgaW50ZW5kZWQgdG8gYmUgcmVhZCBvbmx5IGJ5IHRoZSBpbmRpdmlkdWFs IG9yIGVudGl0eSB0byB3aG9tIGl0IGlzIGFkZHJlc3NlZCBvciBieSB0aGVpciBkZXNpZ25lZS4g SWYgdGhlIHJlYWRlciBvZiB0aGlzIG1lc3NhZ2UgaXMgbm90IHRoZSBpbnRlbmRlZCByZWNpcGll bnQsIHlvdSBhcmUgb24gbm90aWNlIHRoYXQgYW55IGRpc3RyaWJ1dGlvbiBvZiB0aGlzIG1lc3Nh Z2UsIGluIGFueSBmb3JtLCBpcyBzdHJpY3RseSBwcm9oaWJpdGVkLiBQbGVhc2UgcHJvbXB0bHkg bm90aWZ5IHRoZSBzZW5kZXIgYnkgcmVwbHkgZS1tYWlsIG9yIGJ5IHRlbGVwaG9uZSBhdCA3NzAt MjQ2LTg2MDAsIGFuZCB0aGVuIGRlbGV0ZSBvciBkZXN0cm95IGFsbCBjb3BpZXMgb2YgdGhlIHRy YW5zbWlzc2lvbi4NCg==