From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by mx.groups.io with SMTP id smtpd.web08.18619.1605666793956334757 for ; Tue, 17 Nov 2020 18:33:14 -0800 Authentication-Results: mx.groups.io; dkim=fail reason="body hash did not verify" header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=EV/Ay0rb; spf=pass (domain: intel.com, ip: 192.55.52.151, mailfrom: w.sheng@intel.com) IronPort-SDR: XHLvYxOdcUuoCV5g8JMc/KAcVZGF1RKXzHX2KwsqcLaasoGDqrCZ7EZzNjIJJIJ/m05y7e94w+ 6Wj8x2NA8F7g== X-IronPort-AV: E=McAfee;i="6000,8403,9808"; a="150900431" X-IronPort-AV: E=Sophos;i="5.77,486,1596524400"; d="scan'208,223";a="150900431" X-Amp-Result: UNKNOWN X-Amp-Original-Verdict: FILE UNKNOWN X-Amp-File-Uploaded: False Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Nov 2020 18:33:13 -0800 IronPort-SDR: CrW3SVdH4+9xqPsoR+Bhd/7xhWRYpKElwPN6IM2zZrPuT3qWzDc3e47L9W7Ymg6TYOGpT+tcB9 GyhcstKPzBbg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.77,486,1596524400"; d="scan'208,223";a="359143384" Received: from orsmsx602.amr.corp.intel.com ([10.22.229.15]) by fmsmga004.fm.intel.com with ESMTP; 17 Nov 2020 18:33:12 -0800 Received: from orsmsx604.amr.corp.intel.com (10.22.229.17) by ORSMSX602.amr.corp.intel.com (10.22.229.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 17 Nov 2020 18:33:12 -0800 Received: from ORSEDG602.ED.cps.intel.com (10.7.248.7) by orsmsx604.amr.corp.intel.com (10.22.229.17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5 via Frontend Transport; Tue, 17 Nov 2020 18:33:12 -0800 Received: from NAM02-BL2-obe.outbound.protection.outlook.com (104.47.38.50) by edgegateway.intel.com (134.134.137.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.1713.5; Tue, 17 Nov 2020 18:33:10 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Xg9erkUrJAsZ6EcJpDjO4bEGLUOddZnKHdblXiBFKocheHc7Pnnvsi+SXCgEzd7MhCxPLiF5rimTpXmpNX5BYDppanTqPVmJZggBzIc0LXfo85RNZwfcLv3iWTAO3mabxedpLgNuIPMAZypitCdOEstMoVPgPER4Gf9eu7+ow/J6M1hdtXdfIhQMa0EDmsR32m1Ea92L+Eu9HCjsgwNm2PuqfJqfbu0aAo3ulSRi5HXlwREmOqBmOTef0FzqyNk2ESujRLwpNg8i9/OOs1vm3VYWzVF37Krx6/XqJduS99XpRffH4MuO5WpfgruIMmYuEoWvL2QuCX6f8VU4032tnA== 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-SenderADCheck; bh=1+lAeLzNfADpNv5KWKP5kXkMvPjSDiZfh+bFHPw0L5w=; b=ErxuvAOxRE+nwjnCXc4xINvGE4Gmkmaqu0gnleYiA0V9XVR0OzLmQPg3Pv3ff5wulzAlGLh/VLcIunMyzZXx91ocGJSfmF5dJWJbYElhwBIrF76XciwhckW5tkcwiITHgeBPNcMyWQLYp45Tce1dYVPsOtO/6g/ougbw595Jg3d+DpbAj1EvLJBQ0kxwYhp/FGbt2A/QkXIur1EojWZOniaJs+FsQsU6GTUItacYqtY5KBlDW1UIiciQzibIyYqtuhUzEaSWEfalmGOJaC5KSBLpCvxt8u7IScHaIO28Hg+p8RmdmVXSZ1nXKDibflpYqZMzulADXujEYlLJ8c4oEg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1+lAeLzNfADpNv5KWKP5kXkMvPjSDiZfh+bFHPw0L5w=; b=EV/Ay0rbaKkqLbtdNS8vLYY954lWApabT15FxCScGamEY3939CfEwhmasiyvD7+Eq3ujvkaH7fsN6R9piDZJwr423jAbn4LO8+H3zOuUs/dnuvmJNbS29w+vHm6uUrVoIwSJZK+PmsIlGIx1rpA9ynYOoXBOebcYp6D1dQucpqQ= Received: from CY4PR11MB1928.namprd11.prod.outlook.com (2603:10b6:903:11e::18) by CY4PR11MB1749.namprd11.prod.outlook.com (2603:10b6:903:11f::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3564.25; Wed, 18 Nov 2020 02:33:08 +0000 Received: from CY4PR11MB1928.namprd11.prod.outlook.com ([fe80::d922:f6a:d769:b5]) by CY4PR11MB1928.namprd11.prod.outlook.com ([fe80::d922:f6a:d769:b5%12]) with mapi id 15.20.3564.028; Wed, 18 Nov 2020 02:33:08 +0000 From: "Sheng Wei" To: "Yao, Jiewen" , "devel@edk2.groups.io" CC: "Ni, Ray" , "Chaganty, Rangasai V" , "Huang, Jenny" Subject: Re: [PATCH v3] IntelSiliconPkg/VTd: Add iommu 5 level paging support Thread-Topic: [PATCH v3] IntelSiliconPkg/VTd: Add iommu 5 level paging support Thread-Index: AQHWvUiqP8rAhooazkGUHtUeC8kg4anNGfxAgAAPRdA= Date: Wed, 18 Nov 2020 02:33:08 +0000 Message-ID: References: <20201118011755.13732-1-w.sheng@intel.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.5.1.3 authentication-results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=intel.com; x-originating-ip: [192.102.204.37] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: ac2742da-b4aa-4f07-46ce-08d88b6a496c x-ms-traffictypediagnostic: CY4PR11MB1749: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: UXDo7010RAwCVwt02RcBkf04MKAJ17rocjzlxsSoqIpt/O8AcbyLfPfbnsyw8S5elepq5fACd1i5qHzlF6YzBNWe6J+hSMtQBTz807vuUdii49ohpuG+3WHoA2vqZ26SyBK0g0XnqbM+1HxYDeDchcUbBck2fkCIV94FffDURAa4lccM5BZVCuKzuztl+g1VA+0uYhpzLEu4wNpg/glZmEOzxNSO5VqynmcdtWTz9loUC+WMjp4DRw29CRwywC9PA91EVCQ+WzftWqDtZnmRbZ1gfunJ2+nESsN+igvMlJ0klpVeqHukLsAjFmL28bpom2uIPkQtBffHSRB9TYobi1B+FBKxJ6OywBYe+CTUsc++m1erAANWyEkPq8+DyyZos27+25Ai7bzpVO6puPxF9w== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CY4PR11MB1928.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(376002)(366004)(346002)(136003)(39850400004)(396003)(99936003)(5660300002)(54906003)(478600001)(66946007)(55016002)(66616009)(30864003)(2906002)(64756008)(26005)(9686003)(7696005)(66556008)(66446008)(186003)(76116006)(66476007)(86362001)(8676002)(53546011)(8936002)(6506007)(52536014)(966005)(107886003)(71200400001)(33656002)(83380400001)(110136005)(4326008)(316002)(579004)(559001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: ODp7C7rrmebkdNgB3oLJjUcEy2kwL0ahsbmyBaECMv/Gury6+g5/Dd/bZH5iA+0aL/uC4mMnsvWHcQHfcFSC7LVjEu4TyplfIryLC6Q7PlNnGAdNH6hdrmoDQTxcO+gg0FXxqN8DWPbYLB3E/T4vMpMKGVDqGr3eaTk6I+6P8DHkCMg0yyBnrPjehoOjUOtdQ5JmEIh+dfx7MKhWLvb9ovFwLPQ0udaxSBHPpjxZZYTnDfqOfPmNgZ7J5N7F7F64NlmAw5uKVQHjJwQmihOwOdgmpmwqJliH7NYnsGIMz9YQ+NoBcCZfUNvHL1NQ2qe30d8xX20rhYl5k0zAj/ARKMhXV/oDmAMqfpj4V8486UQPQeClixXveBbMJV2JqwTzoCov7/7vNLXoMfEwFDbYesmrtu7lZACXffJ7VFgB01b7d0yuOdfI4vEIOpLzcwg/+oDNkPc5QxkVF9CD/Aqm+wShihs7Na0vS2UOL4P659eZX/DbqzBOB71hq2zEYRIr/RUB7Kl6tTUIY0Mdvm0CoIId/ygG4cqbJRt975GVUcaRXrozgH/oJAE1i3XAfGfxlE4cxdjGGxbeEtgBCKlajtrTpmCKr0rl/4tRfsbCx4vY844xWMwHh8tNWLQl9Rk+zqexjCHbyFr5+iYYMLYepP6+SaycLxZdkMMYqltmqq1D1PfklackYDaKPlIZ6Yo6Lsq47IgldGjvS+5pSnkvyNAbDICducC4IJsVNVFdhsy+lNMdl12eNXwTpCG7YONB06MiRWfjiCI3uERi0sZx18kvU8VSP9mMUlHBvB8blWjgZ6hQJX9P076bks7U4VktbAodGJYP6zQShDWvjy7iErDXCOgDeJ9A5ZIdAwJ3jibTlt2joQerPkvrdUDwRxe4mnxXUojg31+UkO9Z8tYDKA== MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CY4PR11MB1928.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: ac2742da-b4aa-4f07-46ce-08d88b6a496c X-MS-Exchange-CrossTenant-originalarrivaltime: 18 Nov 2020 02:33:08.5643 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 9h90YA9G+mW63FxQQKf/t1LUzN3LAkPWxG1tkDDSGkgper1ck8VIofvfuDuCrWA2S5KMxAMWnuyBUPBhGgh+GA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR11MB1749 Return-Path: w.sheng@intel.com X-OriginatorOrg: intel.com X-Groupsio-MsgNum: 67664 Content-Language: en-US Content-Type: multipart/mixed; boundary="_002_CY4PR11MB1928B26C479E7858A79D6144E1E10CY4PR11MB1928namp_" --_002_CY4PR11MB1928B26C479E7858A79D6144E1E10CY4PR11MB1928namp_ Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 SGkgSmVpd2VuLA0KRm9yIGNvbW1lbnQgMToNClRoZSBjb2RlIGFib3V0IChTQUdBVyAmIEJJVDIp IGlzIGp1c3QgYmVoYW5kIChTQUdBVyAmIEJJVDMpDQoNCj4gPiArICAgICAgICAgIERFQlVHKChE RUJVR19FUlJPUiwgIlVzaW5nIDQtbGV2ZWwgcGFnZS10YWJsZSBvbiBWVEQgJWRcbiIsDQo+ID4g VnRkSW5kZXgpKTsNCj4gPiArICAgICAgICAgIEV4dENvbnRleHRFbnRyeS0+Qml0cy5BZGRyZXNz V2lkdGggPSAweDI7DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsgICAgICB9DQo+ID4gKyAgICB9IGVs c2UgaWYgKChtVnRkVW5pdEluZm9ybWF0aW9uW1Z0ZEluZGV4XS5DYXBSZWcuQml0cy5TQUdBVyAm DQo+ID4gKyBCSVQyKSAhPQ0KPiA+IDApIHsNCj4gPiArICAgICAgREVCVUcoKERFQlVHX0VSUk9S LCAiVXNpbmcgNC1sZXZlbCBwYWdlLXRhYmxlIG9uIFZURCAlZFxuIiwNCj4gPiBWdGRJbmRleCkp Ow0KPiA+ICsgICAgICBFeHRDb250ZXh0RW50cnktPkJpdHMuQWRkcmVzc1dpZHRoID0gMHgyOw0K PiA+ICsgICAgfSBlbHNlIHsNCj4gPiArICAgICAgREVCVUcoKERFQlVHX0VSUk9SLCAiISEhISBQ YWdlLXRhYmxlIHR5cGUgaXMgbm90IHN1cHBvcnRlZCBvbg0KPiA+IFZURCAlZCAhISEhXG4iLCBW dGRJbmRleCkpOw0KPiA+ICAgICAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiA+ICAgICAg fQ0KPiA+IC0gICAgRXh0Q29udGV4dEVudHJ5LT5CaXRzLkFkZHJlc3NXaWR0aCA9IDB4MjsNCj4g PiAgICB9DQoNCkZvciBjb21tZW50IDI6DQo+ICAgIyAgQklUMzogRm9yY2UgdG8gdXNlIDQgbGV2 ZWwgcGFnaW5nLg0KPiAgICMgIEJJVDQ6IElmIGlvbW11IHN1cHBvcnQgNSBsZXZlbCBwYWdpbmcs IGZvcmNlIHRvIHVzZSA1IGxldmVsIHBhZ2luZy4NCj4gICAjICAgIChJZiBib3RoIEJJVDMgYW5k IEJJVDQgYXJlIHNldCwgZm9yY2UgdG8gdXNlIDQgbGV2ZWwgcGFnaW5nLikNCk1vc3RseSwgdGhl c2UgMiBiaXRzIGFyZSBmb3IgZGVidWcvdGVzdCBwdXJwb3NlLCBpdCBjb3VsZCBiZSB1c2VkIHRv IGZvcmNlIHRoZSBwYWdlIHRhYmxlIGRlcHRoLg0KRG8geW91IHRoaW5rIGl0IGlzIG5vIG5lY2Vz c2FyeT8gT3Igd2UgY291bGQgZmluZCBhbm90aGVyIHNvbHV0aW9uID8NCg0KVGhhbmsgeW91DQpC Ug0KU2hlbmcgV2VpDQoNCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBZ YW8sIEppZXdlbiA8amlld2VuLnlhb0BpbnRlbC5jb20+DQo+IFNlbnQ6IDIwMjDE6jEx1MIxOMjV IDk6MzkNCj4gVG86IFNoZW5nLCBXIDx3LnNoZW5nQGludGVsLmNvbT47IGRldmVsQGVkazIuZ3Jv dXBzLmlvDQo+IENjOiBOaSwgUmF5IDxyYXkubmlAaW50ZWwuY29tPjsgQ2hhZ2FudHksIFJhbmdh c2FpIFYNCj4gPHJhbmdhc2FpLnYuY2hhZ2FudHlAaW50ZWwuY29tPjsgSHVhbmcsIEplbm55IDxq ZW5ueS5odWFuZ0BpbnRlbC5jb20+DQo+IFN1YmplY3Q6IFJFOiBbUEFUQ0ggdjNdIEludGVsU2ls aWNvblBrZy9WVGQ6IEFkZCBpb21tdSA1IGxldmVsIHBhZ2luZyBzdXBwb3J0DQo+IA0KPiBIaQ0K PiBJIGhhdmUgMiBjb21tZW50czoNCj4gDQo+IDEpIGJlbG93IGNhcGFiaWxpdHkgY2hlY2sgc2Vl bXMgbm90IGNvcnJlY3QuDQo+IA0KPiAoU0FHQVcgJiBCSVQzKSBpcyBmb3IgNSBsZXZlbCBvbmx5 Lg0KPiBXZSBuZWVkIGNoZWNrIChTQUdBVyAmIEJJVDIpIGZvciA0IGxldmVsLiBCdXQgSSBkbyBu b3Qgc2VlIHRoZSBjb2RlLiBEbyBJIG1pc3MNCj4gc29tZXRoaW5nPw0KPiANCj4gICAgIGlmICgo bVZ0ZFVuaXRJbmZvcm1hdGlvbltWdGRJbmRleF0uQ2FwUmVnLkJpdHMuU0FHQVcgJiBCSVQzKSAh PSAwKSB7DQo+ICAgICAgIGlmICgoUGNkR2V0OChQY2RWVGRQb2xpY3lQcm9wZXJ0eU1hc2spICYg QklUMykgIT0gMCkgew0KPiAgICAgICAgIERFQlVHKChERUJVR19FUlJPUiwgIkZvcmNlIHRvIHVz ZSA0LWxldmVsIHBhZ2UtdGFibGUgb24gVlREICVkXG4iLA0KPiBWdGRJbmRleCkpOw0KPiAgICAg ICAgIENvbnRleHRFbnRyeS0+Qml0cy5BZGRyZXNzV2lkdGggPSAweDI7DQo+ICAgICAgIH0gaWYg KChQY2RHZXQ4KFBjZFZUZFBvbGljeVByb3BlcnR5TWFzaykgJiBCSVQ0KSAhPSAwKSB7DQo+ICAg ICAgICAgREVCVUcoKERFQlVHX0VSUk9SLCAiRm9yY2UgdG8gdXNlIDUtbGV2ZWwgcGFnZS10YWJs ZSBvbiBWVEQgJWRcbiIsDQo+IFZ0ZEluZGV4KSk7DQo+ICAgICAgICAgQ29udGV4dEVudHJ5LT5C aXRzLkFkZHJlc3NXaWR0aCA9IDB4MzsNCj4gICAgICAgICBtVnRkVW5pdEluZm9ybWF0aW9uW1Z0 ZEluZGV4XS5JczVMZXZlbFBhZ2luZyA9IFRSVUU7DQo+ICAgICAgIH0gZWxzZSB7DQo+ICAgICAg ICAgaWYgKG1BY3BpRG1hclRhYmxlLT5Ib3N0QWRkcmVzc1dpZHRoID4gNDgpIHsNCj4gICAgICAg ICAgIERFQlVHKChERUJVR19FUlJPUiwgIlVzaW5nIDUtbGV2ZWwgcGFnZS10YWJsZSBvbiBWVEQg JWRcbiIsDQo+IFZ0ZEluZGV4KSk7DQo+ICAgICAgICAgICBDb250ZXh0RW50cnktPkJpdHMuQWRk cmVzc1dpZHRoID0gMHgzOw0KPiAgICAgICAgICAgbVZ0ZFVuaXRJbmZvcm1hdGlvbltWdGRJbmRl eF0uSXM1TGV2ZWxQYWdpbmcgPSBUUlVFOw0KPiAgICAgICAgIH0gZWxzZSB7DQo+ICAgICAgICAg ICBERUJVRygoREVCVUdfRVJST1IsICJVc2luZyA0LWxldmVsIHBhZ2UtdGFibGUgb24gVlREICVk XG4iLA0KPiBWdGRJbmRleCkpOw0KPiAgICAgICAgICAgQ29udGV4dEVudHJ5LT5CaXRzLkFkZHJl c3NXaWR0aCA9IDB4MjsNCj4gICAgICAgICB9DQo+ICAgICAgIH0NCj4gDQo+IDIpIEkgYW0gd29u ZGVyaW5nLCBkbyB3ZSByZWFsbHkgbmVlZCAyIGJpdCBmb3IgbGV2ZWwgc2VsZWN0aW9uID8NCj4g V2hhdCBpZiBmb3JjZSA0IGxldmVsLCBidXQgdGhlIHBsYXRmb3JtIGRvZXMgbm90IHN1cHBvcnQ/ DQo+IFdoYXQgaWYgZm9yY2UgNSBsZXZlbCwgYnV0IHRoZSBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBw b3J0Pw0KPiANCj4gICAjICBCSVQzOiBGb3JjZSB0byB1c2UgNCBsZXZlbCBwYWdpbmcuDQo+ICAg IyAgQklUNDogSWYgaW9tbXUgc3VwcG9ydCA1IGxldmVsIHBhZ2luZywgZm9yY2UgdG8gdXNlIDUg bGV2ZWwgcGFnaW5nLg0KPiAgICMgICAgKElmIGJvdGggQklUMyBhbmQgQklUNCBhcmUgc2V0LCBm b3JjZSB0byB1c2UgNCBsZXZlbCBwYWdpbmcuKQ0KPiANCj4gZ0ludGVsU2lsaWNvblBrZ1Rva2Vu U3BhY2VHdWlkLlBjZFZUZFBvbGljeVByb3BlcnR5TWFza3wxfFVJTlQ4fDB4MDAwMDANCj4gMDAy DQo+IA0KPiBDYW4gd2UgYWxpZ24gdGhlIHNvbHV0aW9uIGluIERYRS9TTU0gcGFnaW5nIHNvbHV0 aW9uPw0KPiANCj4gDQo+IA0KPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gRnJv bTogU2hlbmcsIFcgPHcuc2hlbmdAaW50ZWwuY29tPg0KPiA+IFNlbnQ6IFdlZG5lc2RheSwgTm92 ZW1iZXIgMTgsIDIwMjAgOToxOCBBTQ0KPiA+IFRvOiBkZXZlbEBlZGsyLmdyb3Vwcy5pbw0KPiA+ IENjOiBOaSwgUmF5IDxyYXkubmlAaW50ZWwuY29tPjsgQ2hhZ2FudHksIFJhbmdhc2FpIFYNCj4g PiA8cmFuZ2FzYWkudi5jaGFnYW50eUBpbnRlbC5jb20+OyBZYW8sIEppZXdlbiA8amlld2VuLnlh b0BpbnRlbC5jb20+Ow0KPiA+IEh1YW5nLCBKZW5ueSA8amVubnkuaHVhbmdAaW50ZWwuY29tPg0K PiA+IFN1YmplY3Q6IFtQQVRDSCB2M10gSW50ZWxTaWxpY29uUGtnL1ZUZDogQWRkIGlvbW11IDUg bGV2ZWwgcGFnaW5nDQo+ID4gc3VwcG9ydA0KPiA+DQo+ID4gU3VwcG9ydCBpb21tdSA1IGxldmVs IHBhZ2luZyBmb3IgdHJhbnNsYXRpb24gdGFibGUuDQo+ID4NCj4gPiBSRUY6IGh0dHBzOi8vYnVn emlsbGEudGlhbm9jb3JlLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzA2Nw0KPiA+DQo+ID4gU2lnbmVk LW9mZi1ieTogU2hlbmcgV2VpIDx3LnNoZW5nQGludGVsLmNvbT4NCj4gPiBDYzogUmF5IE5pIDxy YXkubmlAaW50ZWwuY29tPg0KPiA+IENjOiBSYW5nYXNhaSBWIENoYWdhbnR5IDxyYW5nYXNhaS52 LmNoYWdhbnR5QGludGVsLmNvbT4NCj4gPiBDYzogSmlld2VuIFlhbyA8amlld2VuLnlhb0BpbnRl bC5jb20+DQo+ID4gQ2M6IEplbm55IEh1YW5nIDxqZW5ueS5odWFuZ0BpbnRlbC5jb20+DQo+ID4g LS0tDQo+ID4gIC4uLi9GZWF0dXJlL1ZUZC9JbnRlbFZUZER4ZS9EbWFQcm90ZWN0aW9uLmMgICAg ICAgIHwgICA0ICstDQo+ID4gIC4uLi9GZWF0dXJlL1ZUZC9JbnRlbFZUZER4ZS9EbWFQcm90ZWN0 aW9uLmggICAgICAgIHwgIDE5ICstDQo+ID4gIC4uLi9GZWF0dXJlL1ZUZC9JbnRlbFZUZER4ZS9U cmFuc2xhdGlvblRhYmxlLmMgICAgIHwgMjg3ICsrKysrKysrKysrKysrKy0tDQo+ID4gLS0tLQ0K PiA+ICAuLi4vRmVhdHVyZS9WVGQvSW50ZWxWVGREeGUvVHJhbnNsYXRpb25UYWJsZUV4LmMgICB8 ICAzNSArKy0NCj4gPiAgLi4uL0ZlYXR1cmUvVlRkL0ludGVsVlRkRHhlL1Z0ZFJlZy5jICAgICAg ICAgICAgICAgfCAgMTAgKy0NCj4gPiAgU2lsaWNvbi9JbnRlbC9JbnRlbFNpbGljb25Qa2cvSW50 ZWxTaWxpY29uUGtnLmRlYyAgfCAgIDMgKw0KPiA+ICA2IGZpbGVzIGNoYW5nZWQsIDI1OCBpbnNl cnRpb25zKCspLCAxMDAgZGVsZXRpb25zKC0pDQo+ID4NCj4gPiBkaWZmIC0tZ2l0DQo+ID4gYS9T aWxpY29uL0ludGVsL0ludGVsU2lsaWNvblBrZy9GZWF0dXJlL1ZUZC9JbnRlbFZUZER4ZS9EbWFQ cm90ZWN0aW9uLg0KPiA+IGMNCj4gPiBiL1NpbGljb24vSW50ZWwvSW50ZWxTaWxpY29uUGtnL0Zl YXR1cmUvVlRkL0ludGVsVlRkRHhlL0RtYVByb3RlY3Rpb24uDQo+ID4gYw0KPiA+IGluZGV4IDli NjEzNWVmLi42Mjg1NjVlZSAxMDA2NDQNCj4gPiAtLS0NCj4gPiBhL1NpbGljb24vSW50ZWwvSW50 ZWxTaWxpY29uUGtnL0ZlYXR1cmUvVlRkL0ludGVsVlRkRHhlL0RtYVByb3RlY3Rpb24uDQo+ID4g Yw0KPiA+ICsrKw0KPiA+IGIvU2lsaWNvbi9JbnRlbC9JbnRlbFNpbGljb25Qa2cvRmVhdHVyZS9W VGQvSW50ZWxWVGREeGUvRG1hUHJvdGVjdGlvbi4NCj4gPiBjDQo+ID4gQEAgLTUyMywxMCArNTIz LDEwIEBAIFNldHVwVnRkICgNCj4gPiAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBtVnRkVW5p dE51bWJlcjsgSW5kZXgrKykgew0KPiA+ICAgICAgREVCVUcgKChERUJVR19JTkZPLCJWVEQgVW5p dCAlZCAoU2VnbWVudDogJTA0eClcbiIsIEluZGV4LA0KPiA+IG1WdGRVbml0SW5mb3JtYXRpb25b SW5kZXhdLlNlZ21lbnQpKTsNCj4gPiAgICAgIGlmIChtVnRkVW5pdEluZm9ybWF0aW9uW0luZGV4 XS5FeHRSb290RW50cnlUYWJsZSAhPSBOVUxMKSB7DQo+ID4gLSAgICAgIER1bXBEbWFyRXh0Q29u dGV4dEVudHJ5VGFibGUNCj4gPiAobVZ0ZFVuaXRJbmZvcm1hdGlvbltJbmRleF0uRXh0Um9vdEVu dHJ5VGFibGUpOw0KPiA+ICsgICAgICBEdW1wRG1hckV4dENvbnRleHRFbnRyeVRhYmxlDQo+ID4g KG1WdGRVbml0SW5mb3JtYXRpb25bSW5kZXhdLkV4dFJvb3RFbnRyeVRhYmxlLA0KPiA+IG1WdGRV bml0SW5mb3JtYXRpb25bSW5kZXhdLklzNUxldmVsUGFnaW5nKTsNCj4gPiAgICAgIH0NCj4gPiAg ICAgIGlmIChtVnRkVW5pdEluZm9ybWF0aW9uW0luZGV4XS5Sb290RW50cnlUYWJsZSAhPSBOVUxM KSB7DQo+ID4gLSAgICAgIER1bXBEbWFyQ29udGV4dEVudHJ5VGFibGUNCj4gPiAobVZ0ZFVuaXRJ bmZvcm1hdGlvbltJbmRleF0uUm9vdEVudHJ5VGFibGUpOw0KPiA+ICsgICAgICBEdW1wRG1hckNv bnRleHRFbnRyeVRhYmxlDQo+ID4gKG1WdGRVbml0SW5mb3JtYXRpb25bSW5kZXhdLlJvb3RFbnRy eVRhYmxlLA0KPiA+IG1WdGRVbml0SW5mb3JtYXRpb25bSW5kZXhdLklzNUxldmVsUGFnaW5nKTsN Cj4gPiAgICAgIH0NCj4gPiAgICB9DQo+ID4NCj4gPiBkaWZmIC0tZ2l0DQo+ID4gYS9TaWxpY29u L0ludGVsL0ludGVsU2lsaWNvblBrZy9GZWF0dXJlL1ZUZC9JbnRlbFZUZER4ZS9EbWFQcm90ZWN0 aW9uLg0KPiA+IGgNCj4gPiBiL1NpbGljb24vSW50ZWwvSW50ZWxTaWxpY29uUGtnL0ZlYXR1cmUv VlRkL0ludGVsVlRkRHhlL0RtYVByb3RlY3Rpb24uDQo+ID4gaA0KPiA+IGluZGV4IGEzMzMxZGI4 Li5mNjQxY2VhMCAxMDA2NDQNCj4gPiAtLS0NCj4gPiBhL1NpbGljb24vSW50ZWwvSW50ZWxTaWxp Y29uUGtnL0ZlYXR1cmUvVlRkL0ludGVsVlRkRHhlL0RtYVByb3RlY3Rpb24uDQo+ID4gaA0KPiA+ ICsrKw0KPiA+IGIvU2lsaWNvbi9JbnRlbC9JbnRlbFNpbGljb25Qa2cvRmVhdHVyZS9WVGQvSW50 ZWxWVGREeGUvRG1hUHJvdGVjdGlvbi4NCj4gPiBoDQo+ID4gQEAgLTc3LDYgKzc3LDcgQEAgdHlw ZWRlZiBzdHJ1Y3Qgew0KPiA+ICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgIEhh c0RpcnR5Q29udGV4dDsNCj4gPiAgICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgICBI YXNEaXJ0eVBhZ2VzOw0KPiA+ICAgIFBDSV9ERVZJQ0VfSU5GT1JNQVRJT04gICAgICAgICAgIFBj aURldmljZUluZm87DQo+ID4gKyAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAgSXM1 TGV2ZWxQYWdpbmc7DQo+ID4gIH0gVlREX1VOSVRfSU5GT1JNQVRJT047DQo+ID4NCj4gPiAgLy8N Cj4gPiBAQCAtMzc1LDMxICszNzYsMzcgQEAgUGFyc2VEbWFyQWNwaVRhYmxlUm1yciAoDQo+ID4g IC8qKg0KPiA+ICAgIER1bXAgRE1BUiBjb250ZXh0IGVudHJ5IHRhYmxlLg0KPiA+DQo+ID4gLSAg QHBhcmFtW2luXSAgUm9vdEVudHJ5IERNQVIgcm9vdCBlbnRyeS4NCj4gPiArICBAcGFyYW1baW5d ICBSb290RW50cnkgICAgICAgRE1BUiByb290IGVudHJ5Lg0KPiA+ICsgIEBwYXJhbVtpbl0gIElz NUxldmVsUGFnaW5nICBJZiBpdCBpcyB0aGUgNSBsZXZlbCBwYWdpbmcuDQo+ID4gICoqLw0KPiA+ ICBWT0lEDQo+ID4gIER1bXBEbWFyQ29udGV4dEVudHJ5VGFibGUgKA0KPiA+IC0gIElOIFZURF9S T09UX0VOVFJZICpSb290RW50cnkNCj4gPiArICBJTiBWVERfUk9PVF9FTlRSWSAqUm9vdEVudHJ5 LA0KPiA+ICsgIElOIEJPT0xFQU4gSXM1TGV2ZWxQYWdpbmcNCj4gPiAgICApOw0KPiA+DQo+ID4g IC8qKg0KPiA+ICAgIER1bXAgRE1BUiBleHRlbmRlZCBjb250ZXh0IGVudHJ5IHRhYmxlLg0KPiA+ DQo+ID4gLSAgQHBhcmFtW2luXSAgRXh0Um9vdEVudHJ5IERNQVIgZXh0ZW5kZWQgcm9vdCBlbnRy eS4NCj4gPiArICBAcGFyYW1baW5dICBFeHRSb290RW50cnkgICAgRE1BUiBleHRlbmRlZCByb290 IGVudHJ5Lg0KPiA+ICsgIEBwYXJhbVtpbl0gIElzNUxldmVsUGFnaW5nICBJZiBpdCBpcyB0aGUg NSBsZXZlbCBwYWdpbmcuDQo+ID4gICoqLw0KPiA+ICBWT0lEDQo+ID4gIER1bXBEbWFyRXh0Q29u dGV4dEVudHJ5VGFibGUgKA0KPiA+IC0gIElOIFZURF9FWFRfUk9PVF9FTlRSWSAqRXh0Um9vdEVu dHJ5DQo+ID4gKyAgSU4gVlREX0VYVF9ST09UX0VOVFJZICpFeHRSb290RW50cnksICBJTiBCT09M RUFOIElzNUxldmVsUGFnaW5nDQo+ID4gICAgKTsNCj4gPg0KPiA+ICAvKioNCj4gPiAgICBEdW1w IERNQVIgc2Vjb25kIGxldmVsIHBhZ2luZyBlbnRyeS4NCj4gPg0KPiA+IC0gIEBwYXJhbVtpbl0g IFNlY29uZExldmVsUGFnaW5nRW50cnkgVGhlIHNlY29uZCBsZXZlbCBwYWdpbmcgZW50cnkuDQo+ ID4gKyAgQHBhcmFtW2luXSAgU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSAgVGhlIHNlY29uZCBsZXZl bCBwYWdpbmcgZW50cnkuDQo+ID4gKyAgQHBhcmFtW2luXSAgSXM1TGV2ZWxQYWdpbmcgICAgICAg ICAgSWYgaXQgaXMgdGhlIDUgbGV2ZWwgcGFnaW5nLg0KPiA+ICAqKi8NCj4gPiAgVk9JRA0KPiA+ ICBEdW1wU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSAoDQo+ID4gLSAgSU4gVk9JRCAqU2Vjb25kTGV2 ZWxQYWdpbmdFbnRyeQ0KPiA+ICsgIElOIFZPSUQgKlNlY29uZExldmVsUGFnaW5nRW50cnksDQo+ ID4gKyAgSU4gQk9PTEVBTiBJczVMZXZlbFBhZ2luZw0KPiA+ICAgICk7DQo+ID4NCj4gPiAgLyoq DQo+ID4gZGlmZiAtLWdpdA0KPiA+IGEvU2lsaWNvbi9JbnRlbC9JbnRlbFNpbGljb25Qa2cvRmVh dHVyZS9WVGQvSW50ZWxWVGREeGUvVHJhbnNsYXRpb25UYWINCj4gPiBsZS5jDQo+ID4gYi9TaWxp Y29uL0ludGVsL0ludGVsU2lsaWNvblBrZy9GZWF0dXJlL1ZUZC9JbnRlbFZUZER4ZS9UcmFuc2xh dGlvblRhYg0KPiA+IGxlLmMNCj4gPiBpbmRleCAyMDFkNjYzZC4uY2I1OTg2MGEgMTAwNjQ0DQo+ ID4gLS0tDQo+ID4gYS9TaWxpY29uL0ludGVsL0ludGVsU2lsaWNvblBrZy9GZWF0dXJlL1ZUZC9J bnRlbFZUZER4ZS9UcmFuc2xhdGlvblRhYg0KPiA+IGxlLmMNCj4gPiArKysNCj4gPiBiL1NpbGlj b24vSW50ZWwvSW50ZWxTaWxpY29uUGtnL0ZlYXR1cmUvVlRkL0ludGVsVlRkRHhlL1RyYW5zbGF0 aW9uVGFiDQo+ID4gbGUuYyBAQCAtMTI4LDExICsxMjgsMzIgQEAgQ3JlYXRlQ29udGV4dEVudHJ5 ICgNCj4gPg0KPiA+ICAgICAgREVCVUcgKChERUJVR19JTkZPLCJTb3VyY2U6IFMlMDR4IEIlMDJ4 IEQlMDJ4IEYlMDJ4XG4iLA0KPiA+IG1WdGRVbml0SW5mb3JtYXRpb25bVnRkSW5kZXhdLlNlZ21l bnQsIFNvdXJjZUlkLkJpdHMuQnVzLA0KPiA+IFNvdXJjZUlkLkJpdHMuRGV2aWNlLCBTb3VyY2VJ ZC5CaXRzLkZ1bmN0aW9uKSk7DQo+ID4NCj4gPiAtICAgIGlmICgobVZ0ZFVuaXRJbmZvcm1hdGlv bltWdGRJbmRleF0uQ2FwUmVnLkJpdHMuU0FHQVcgJiBCSVQyKSA9PSAwKSB7DQo+ID4gLSAgICAg IERFQlVHKChERUJVR19FUlJPUiwgIiEhISEgNC1sZXZlbCBwYWdlLXRhYmxlIGlzIG5vdCBzdXBw b3J0ZWQgb24NCj4gPiBWVEQgJWQgISEhIVxuIiwgVnRkSW5kZXgpKTsNCj4gPiArICAgIG1WdGRV bml0SW5mb3JtYXRpb25bVnRkSW5kZXhdLklzNUxldmVsUGFnaW5nID0gRkFMU0U7DQo+ID4gKyAg ICBpZiAoKG1WdGRVbml0SW5mb3JtYXRpb25bVnRkSW5kZXhdLkNhcFJlZy5CaXRzLlNBR0FXICYg QklUMykgIT0gMCkgew0KPiA+ICsgICAgICBpZiAoKFBjZEdldDgoUGNkVlRkUG9saWN5UHJvcGVy dHlNYXNrKSAmIEJJVDMpICE9IDApIHsNCj4gPiArICAgICAgICBERUJVRygoREVCVUdfRVJST1Is ICJGb3JjZSB0byB1c2UgNC1sZXZlbCBwYWdlLXRhYmxlIG9uIFZURA0KPiA+ICsgJWRcbiIsDQo+ ID4gVnRkSW5kZXgpKTsNCj4gPiArICAgICAgICBDb250ZXh0RW50cnktPkJpdHMuQWRkcmVzc1dp ZHRoID0gMHgyOw0KPiA+ICsgICAgICB9IGlmICgoUGNkR2V0OChQY2RWVGRQb2xpY3lQcm9wZXJ0 eU1hc2spICYgQklUNCkgIT0gMCkgew0KPiA+ICsgICAgICAgIERFQlVHKChERUJVR19FUlJPUiwg IkZvcmNlIHRvIHVzZSA1LWxldmVsIHBhZ2UtdGFibGUgb24gVlREDQo+ID4gKyAlZFxuIiwNCj4g PiBWdGRJbmRleCkpOw0KPiA+ICsgICAgICAgIENvbnRleHRFbnRyeS0+Qml0cy5BZGRyZXNzV2lk dGggPSAweDM7DQo+ID4gKyAgICAgICAgbVZ0ZFVuaXRJbmZvcm1hdGlvbltWdGRJbmRleF0uSXM1 TGV2ZWxQYWdpbmcgPSBUUlVFOw0KPiA+ICsgICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgIGlm IChtQWNwaURtYXJUYWJsZS0+SG9zdEFkZHJlc3NXaWR0aCA+IDQ4KSB7DQo+ID4gKyAgICAgICAg ICBERUJVRygoREVCVUdfRVJST1IsICJVc2luZyA1LWxldmVsIHBhZ2UtdGFibGUgb24gVlREICVk XG4iLA0KPiA+IFZ0ZEluZGV4KSk7DQo+ID4gKyAgICAgICAgICBDb250ZXh0RW50cnktPkJpdHMu QWRkcmVzc1dpZHRoID0gMHgzOw0KPiA+ICsgICAgICAgICAgbVZ0ZFVuaXRJbmZvcm1hdGlvbltW dGRJbmRleF0uSXM1TGV2ZWxQYWdpbmcgPSBUUlVFOw0KPiA+ICsgICAgICAgIH0gZWxzZSB7DQo+ ID4gKyAgICAgICAgICBERUJVRygoREVCVUdfRVJST1IsICJVc2luZyA0LWxldmVsIHBhZ2UtdGFi bGUgb24gVlREICVkXG4iLA0KPiA+IFZ0ZEluZGV4KSk7DQo+ID4gKyAgICAgICAgICBDb250ZXh0 RW50cnktPkJpdHMuQWRkcmVzc1dpZHRoID0gMHgyOw0KPiA+ICsgICAgICAgIH0NCj4gPiArICAg ICAgfQ0KPiA+ICsgICAgfSBlbHNlIGlmICgobVZ0ZFVuaXRJbmZvcm1hdGlvbltWdGRJbmRleF0u Q2FwUmVnLkJpdHMuU0FHQVcgJg0KPiA+ICsgQklUMikgIT0NCj4gPiAwKSB7DQo+ID4gKyAgICAg IERFQlVHKChERUJVR19FUlJPUiwgIlVzaW5nIDQtbGV2ZWwgcGFnZS10YWJsZSBvbiBWVEQgJWRc biIsDQo+ID4gVnRkSW5kZXgpKTsNCj4gPiArICAgICAgQ29udGV4dEVudHJ5LT5CaXRzLkFkZHJl c3NXaWR0aCA9IDB4MjsNCj4gPiArICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgIERFQlVHKChERUJV R19FUlJPUiwgIiEhISEgUGFnZS10YWJsZSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQgb24NCj4gPiBW VEQgJWQgISEhIVxuIiwgVnRkSW5kZXgpKTsNCj4gPiAgICAgICAgcmV0dXJuIEVGSV9VTlNVUFBP UlRFRDsNCj4gPiAgICAgIH0NCj4gPiAtICAgIENvbnRleHRFbnRyeS0+Qml0cy5BZGRyZXNzV2lk dGggPSAweDI7DQo+ID4gICAgfQ0KPiA+DQo+ID4gICAgRmx1c2hQYWdlVGFibGVNZW1vcnkgKFZ0 ZEluZGV4LA0KPiA+IChVSU5UTiltVnRkVW5pdEluZm9ybWF0aW9uW1Z0ZEluZGV4XS5Sb290RW50 cnlUYWJsZSwNCj4gPiBFRklfUEFHRVNfVE9fU0laRShFbnRyeVRhYmxlUGFnZXMpKTsNCj4gPiBA QCAtMTQ4LDYgKzE2OSw3IEBAIENyZWF0ZUNvbnRleHRFbnRyeSAoDQo+ID4gICAgQHBhcmFtW2lu XSAgTWVtb3J5QmFzZSAgICAgICAgICAgICAgICAgIFRoZSBiYXNlIG9mIHRoZSBtZW1vcnkuDQo+ ID4gICAgQHBhcmFtW2luXSAgTWVtb3J5TGltaXQgICAgICAgICAgICAgICAgIFRoZSBsaW1pdCBv ZiB0aGUgbWVtb3J5Lg0KPiA+ICAgIEBwYXJhbVtpbl0gIElvTW11QWNjZXNzICAgICAgICAgICAg ICAgICBUaGUgSU9NTVUgYWNjZXNzLg0KPiA+ICsgIEBwYXJhbVtpbl0gIElzNUxldmVsUGFnaW5n ICAgICAgICAgICAgICBJZiBpdCBpcyB0aGUgNSBsZXZlbCBwYWdpbmcuDQo+ID4NCj4gPiAgICBA cmV0dXJuIFRoZSBzZWNvbmQgbGV2ZWwgcGFnaW5nIGVudHJ5Lg0KPiA+ICAqKi8NCj4gPiBAQCAt MTU3LDE2ICsxNzksMjMgQEAgQ3JlYXRlU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeVRhYmxlICgNCj4g PiAgICBJTiBWVERfU0VDT05EX0xFVkVMX1BBR0lOR19FTlRSWSAqU2Vjb25kTGV2ZWxQYWdpbmdF bnRyeSwNCj4gPiAgICBJTiBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgICBNZW1vcnlCYXNl LA0KPiA+ICAgIElOIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgIE1lbW9yeUxpbWl0LA0K PiA+IC0gIElOIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgIElvTW11QWNjZXNzDQo+ID4g KyAgSU4gVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgICAgSW9NbXVBY2Nlc3MsDQo+ID4gKyAg SU4gQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgSXM1TGV2ZWxQYWdpbmcNCj4gPiAgICAp DQo+ID4gIHsNCj4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg1Ow0K PiA+ICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleDQ7DQo+ID4gICAgVUlO VE4gICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4MzsNCj4gPiAgICBVSU5UTiAgICAgICAg ICAgICAgICAgICAgICAgICAgSW5kZXgyOw0KPiA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAg ICAgICAgICBMdmw1U3RhcnQ7DQo+ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAg IEx2bDVFbmQ7DQo+ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgIEx2bDRQYWdl c1N0YXJ0Ow0KPiA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICBMdmw0UGFnZXNF bmQ7DQo+ID4gICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgIEx2bDRTdGFydDsNCj4g PiAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgTHZsNEVuZDsNCj4gPiAgICBVSU5U TiAgICAgICAgICAgICAgICAgICAgICAgICAgTHZsM1N0YXJ0Ow0KPiA+ICAgIFVJTlROICAgICAg ICAgICAgICAgICAgICAgICAgICBMdmwzRW5kOw0KPiA+ICsgIFZURF9TRUNPTkRfTEVWRUxfUEFH SU5HX0VOVFJZICAqTHZsNVB0RW50cnk7DQo+ID4gICAgVlREX1NFQ09ORF9MRVZFTF9QQUdJTkdf RU5UUlkgICpMdmw0UHRFbnRyeTsNCj4gPiAgICBWVERfU0VDT05EX0xFVkVMX1BBR0lOR19FTlRS WSAgKkx2bDNQdEVudHJ5Ow0KPiA+ICAgIFZURF9TRUNPTkRfTEVWRUxfUEFHSU5HX0VOVFJZICAq THZsMlB0RW50cnk7IEBAIC0xODQsNyArMjEzLDcNCj4gQEANCj4gPiBDcmVhdGVTZWNvbmRMZXZl bFBhZ2luZ0VudHJ5VGFibGUgKA0KPiA+ICAgIGlmIChTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5ID09 IE5VTEwpIHsNCj4gPiAgICAgIFNlY29uZExldmVsUGFnaW5nRW50cnkgPSBBbGxvY2F0ZVplcm9Q YWdlcyAoMSk7DQo+ID4gICAgICBpZiAoU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSA9PSBOVUxMKSB7 DQo+ID4gLSAgICAgIERFQlVHICgoREVCVUdfRVJST1IsIkNvdWxkIG5vdCBBbGxvYyBMVkw0IFBU LiBcbiIpKTsNCj4gPiArICAgICAgREVCVUcgKChERUJVR19FUlJPUiwiQ291bGQgbm90IEFsbG9j IExWTDQgb3IgTFZMNSBQVC4gXG4iKSk7DQo+ID4gICAgICAgIHJldHVybiBOVUxMOw0KPiA+ICAg ICAgfQ0KPiA+ICAgICAgRmx1c2hQYWdlVGFibGVNZW1vcnkgKFZ0ZEluZGV4LCAoVUlOVE4pU2Vj b25kTGV2ZWxQYWdpbmdFbnRyeSwNCj4gPiBFRklfUEFHRVNfVE9fU0laRSgxKSk7IEBAIC0xOTcs NjYgKzIyNiwxMDkgQEANCj4gPiBDcmVhdGVTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5VGFibGUgKA0K PiA+ICAgICAgcmV0dXJuIFNlY29uZExldmVsUGFnaW5nRW50cnk7DQo+ID4gICAgfQ0KPiA+DQo+ ID4gLSAgTHZsNFN0YXJ0ID0gUlNoaWZ0VTY0IChCYXNlQWRkcmVzcywgMzkpICYgMHgxRkY7DQo+ ID4gLSAgTHZsNEVuZCA9IFJTaGlmdFU2NCAoRW5kQWRkcmVzcyAtIDEsIDM5KSAmIDB4MUZGOw0K PiA+ICsgIGlmIChJczVMZXZlbFBhZ2luZykgew0KPiA+ICsgICAgTHZsNVN0YXJ0ID0gUlNoaWZ0 VTY0IChCYXNlQWRkcmVzcywgNDgpICYgMHgxRkY7DQo+ID4gKyAgICBMdmw1RW5kID0gUlNoaWZ0 VTY0IChFbmRBZGRyZXNzIC0gMSwgNDgpICYgMHgxRkY7DQo+ID4gKyAgICBERUJVRyAoKERFQlVH X0lORk8sIiAgTHZsNVN0YXJ0IC0gMHgleCwgTHZsNUVuZCAtIDB4JXhcbiIsDQo+ID4gKyBMdmw1 U3RhcnQsDQo+ID4gTHZsNUVuZCkpOw0KPiA+DQo+ID4gLSAgREVCVUcgKChERUJVR19JTkZPLCIg IEx2bDRTdGFydCAtIDB4JXgsIEx2bDRFbmQgLSAweCV4XG4iLA0KPiA+IEx2bDRTdGFydCwgTHZs NEVuZCkpOw0KPiA+ICsgICAgTHZsNFN0YXJ0ID0gUlNoaWZ0VTY0IChCYXNlQWRkcmVzcywgMzkp ICYgMHgxRkY7DQo+ID4gKyAgICBMdmw0RW5kID0gUlNoaWZ0VTY0IChFbmRBZGRyZXNzIC0gMSwg MzkpICYgMHgxRkY7DQo+ID4NCj4gPiAtICBMdmw0UHRFbnRyeSA9IChWVERfU0VDT05EX0xFVkVM X1BBR0lOR19FTlRSWQ0KPiA+ICopU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeTsNCj4gPiAtICBmb3Ig KEluZGV4NCA9IEx2bDRTdGFydDsgSW5kZXg0IDw9IEx2bDRFbmQ7IEluZGV4NCsrKSB7DQo+ID4g LSAgICBpZiAoTHZsNFB0RW50cnlbSW5kZXg0XS5VaW50NjQgPT0gMCkgew0KPiA+IC0gICAgICBM dmw0UHRFbnRyeVtJbmRleDRdLlVpbnQ2NCA9IChVSU5UNjQpKFVJTlROKUFsbG9jYXRlWmVyb1Bh Z2VzICgxKTsNCj4gPiAtICAgICAgaWYgKEx2bDRQdEVudHJ5W0luZGV4NF0uVWludDY0ID09IDAp IHsNCj4gPiAtICAgICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCIhISEhISEgQUxMT0NBVEUgTFZM NCBQQUdFIEZBSUwNCj4gPiAoMHgleCkhISEhISFcbiIsIEluZGV4NCkpOw0KPiA+IC0gICAgICAg IEFTU0VSVChGQUxTRSk7DQo+ID4gLSAgICAgICAgcmV0dXJuIE5VTEw7DQo+ID4gLSAgICAgIH0N Cj4gPiAtICAgICAgRmx1c2hQYWdlVGFibGVNZW1vcnkgKFZ0ZEluZGV4LCAoVUlOVE4pTHZsNFB0 RW50cnlbSW5kZXg0XS5VaW50NjQsDQo+ID4gU0laRV80S0IpOw0KPiA+IC0gICAgICBTZXRTZWNv bmRMZXZlbFBhZ2luZ0VudHJ5QXR0cmlidXRlICgmTHZsNFB0RW50cnlbSW5kZXg0XSwNCj4gPiBF REtJSV9JT01NVV9BQ0NFU1NfUkVBRCB8IEVES0lJX0lPTU1VX0FDQ0VTU19XUklURSk7DQo+ID4g LSAgICB9DQo+ID4gKyAgICBMdmw0UGFnZXNTdGFydCA9IChMdmw1U3RhcnQ8PDkpIHwgTHZsNFN0 YXJ0Ow0KPiA+ICsgICAgTHZsNFBhZ2VzRW5kID0gKEx2bDVFbmQ8PDkpIHwgTHZsNEVuZDsNCj4g PiArICAgIERFQlVHICgoREVCVUdfSU5GTywiICBMdmw0UGFnZXNTdGFydCAtIDB4JXgsIEx2bDRQ YWdlc0VuZCAtDQo+ID4gKyAweCV4XG4iLA0KPiA+IEx2bDRQYWdlc1N0YXJ0LCBMdmw0UGFnZXNF bmQpKTsNCj4gPg0KPiA+IC0gICAgTHZsM1N0YXJ0ID0gUlNoaWZ0VTY0IChCYXNlQWRkcmVzcywg MzApICYgMHgxRkY7DQo+ID4gLSAgICBpZiAoQUxJR05fVkFMVUVfTE9XKEJhc2VBZGRyZXNzICsg U0laRV8xR0IsIFNJWkVfMUdCKSA8PQ0KPiA+IEVuZEFkZHJlc3MpIHsNCj4gPiAtICAgICAgTHZs M0VuZCA9IFNJWkVfNEtCL3NpemVvZihWVERfU0VDT05EX0xFVkVMX1BBR0lOR19FTlRSWSkgLSAx Ow0KPiA+IC0gICAgfSBlbHNlIHsNCj4gPiAtICAgICAgTHZsM0VuZCA9IFJTaGlmdFU2NCAoRW5k QWRkcmVzcyAtIDEsIDMwKSAmIDB4MUZGOw0KPiA+ICsgICAgTHZsNVB0RW50cnkgPSAoVlREX1NF Q09ORF9MRVZFTF9QQUdJTkdfRU5UUlkNCj4gPiAqKVNlY29uZExldmVsUGFnaW5nRW50cnk7DQo+ ID4gKyAgfSBlbHNlIHsNCj4gPiArICAgIEx2bDVTdGFydCA9IFJTaGlmdFU2NCAoQmFzZUFkZHJl c3MsIDQ4KSAmIDB4MUZGOw0KPiA+ICsgICAgTHZsNUVuZCA9IEx2bDVTdGFydDsNCj4gPiArDQo+ ID4gKyAgICBMdmw0U3RhcnQgPSBSU2hpZnRVNjQgKEJhc2VBZGRyZXNzLCAzOSkgJiAweDFGRjsN Cj4gPiArICAgIEx2bDRFbmQgPSBSU2hpZnRVNjQgKEVuZEFkZHJlc3MgLSAxLCAzOSkgJiAweDFG RjsNCj4gPiArICAgIERFQlVHICgoREVCVUdfSU5GTywiICBMdmw0U3RhcnQgLSAweCV4LCBMdmw0 RW5kIC0gMHgleFxuIiwNCj4gPiArIEx2bDRTdGFydCwNCj4gPiBMdmw0RW5kKSk7DQo+ID4gKw0K PiA+ICsgICAgTHZsNFB0RW50cnkgPSAoVlREX1NFQ09ORF9MRVZFTF9QQUdJTkdfRU5UUlkNCj4g PiAqKVNlY29uZExldmVsUGFnaW5nRW50cnk7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBmb3Ig KEluZGV4NSA9IEx2bDVTdGFydDsgSW5kZXg1IDw9IEx2bDVFbmQ7IEluZGV4NSsrKSB7DQo+ID4g KyAgICBpZiAoSXM1TGV2ZWxQYWdpbmcpIHsNCj4gPiArICAgICAgaWYgKEx2bDVQdEVudHJ5W0lu ZGV4NV0uVWludDY0ID09IDApIHsNCj4gPiArICAgICAgICBMdmw1UHRFbnRyeVtJbmRleDVdLlVp bnQ2NCA9IChVSU5UNjQpKFVJTlROKUFsbG9jYXRlWmVyb1BhZ2VzICgxKTsNCj4gPiArICAgICAg ICBpZiAoTHZsNVB0RW50cnlbSW5kZXg1XS5VaW50NjQgPT0gMCkgew0KPiA+ICsgICAgICAgICAg REVCVUcgKChERUJVR19FUlJPUiwiISEhISEhIEFMTE9DQVRFIExWTDQgUEFHRSBGQUlMDQo+ID4g KDB4JXgpISEhISEhXG4iLCBJbmRleDUpKTsNCj4gPiArICAgICAgICAgIEFTU0VSVChGQUxTRSk7 DQo+ID4gKyAgICAgICAgICByZXR1cm4gTlVMTDsNCj4gPiArICAgICAgICB9DQo+ID4gKyAgICAg ICAgRmx1c2hQYWdlVGFibGVNZW1vcnkgKFZ0ZEluZGV4LA0KPiA+ICsgKFVJTlROKUx2bDVQdEVu dHJ5W0luZGV4NV0uVWludDY0LA0KPiA+IFNJWkVfNEtCKTsNCj4gPiArICAgICAgICBTZXRTZWNv bmRMZXZlbFBhZ2luZ0VudHJ5QXR0cmlidXRlICgmTHZsNVB0RW50cnlbSW5kZXg1XSwNCj4gPiBF REtJSV9JT01NVV9BQ0NFU1NfUkVBRCB8IEVES0lJX0lPTU1VX0FDQ0VTU19XUklURSk7DQo+ID4g KyAgICAgIH0NCj4gPiArICAgICAgTHZsNFN0YXJ0ID0gTHZsNFBhZ2VzU3RhcnQgJiAweDFGRjsN Cj4gPiArICAgICAgaWYgKCgoSW5kZXg1KzEpPDw5KSA+IEx2bDRQYWdlc0VuZCkgew0KPiA+ICsg ICAgICAgIEx2bDRFbmQgPSBTSVpFXzRLQi9zaXplb2YoVlREX1NFQ09ORF9MRVZFTF9QQUdJTkdf RU5UUlkpIC0gMTs7DQo+ID4gKyAgICAgICAgTHZsNFBhZ2VzU3RhcnQgPSAoSW5kZXg1KzEpPDw5 Ow0KPiA+ICsgICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgIEx2bDRFbmQgPSBMdmw0UGFnZXNF bmQgJiAweDFGRjsNCj4gPiArICAgICAgfQ0KPiA+ICsgICAgICBERUJVRyAoKERFQlVHX0lORk8s IiAgTHZsNSgweCV4KTogTHZsNFN0YXJ0IC0gMHgleCwgTHZsNEVuZCAtDQo+ID4gKyAweCV4XG4i LA0KPiA+IEluZGV4NSwgTHZsNFN0YXJ0LCBMdmw0RW5kKSk7DQo+ID4gKyAgICAgIEx2bDRQdEVu dHJ5ID0gKFZURF9TRUNPTkRfTEVWRUxfUEFHSU5HX0VOVFJZDQo+ID4gKikoVUlOVE4pVlREXzY0 QklUU19BRERSRVNTKEx2bDVQdEVudHJ5W0luZGV4NV0uQml0cy5BZGRyZXNzTG8sDQo+ID4gTHZs NVB0RW50cnlbSW5kZXg1XS5CaXRzLkFkZHJlc3NIaSk7DQo+ID4gICAgICB9DQo+ID4gLSAgICBE RUJVRyAoKERFQlVHX0lORk8sIiAgTHZsNCgweCV4KTogTHZsM1N0YXJ0IC0gMHgleCwgTHZsM0Vu ZCAtIDB4JXhcbiIsDQo+ID4gSW5kZXg0LCBMdmwzU3RhcnQsIEx2bDNFbmQpKTsNCj4gPg0KPiA+ IC0gICAgTHZsM1B0RW50cnkgPSAoVlREX1NFQ09ORF9MRVZFTF9QQUdJTkdfRU5UUlkNCj4gPiAq KShVSU5UTilWVERfNjRCSVRTX0FERFJFU1MoTHZsNFB0RW50cnlbSW5kZXg0XS5CaXRzLkFkZHJl c3NMbywNCj4gPiBMdmw0UHRFbnRyeVtJbmRleDRdLkJpdHMuQWRkcmVzc0hpKTsNCj4gPiAtICAg IGZvciAoSW5kZXgzID0gTHZsM1N0YXJ0OyBJbmRleDMgPD0gTHZsM0VuZDsgSW5kZXgzKyspIHsN Cj4gPiAtICAgICAgaWYgKEx2bDNQdEVudHJ5W0luZGV4M10uVWludDY0ID09IDApIHsNCj4gPiAt ICAgICAgICBMdmwzUHRFbnRyeVtJbmRleDNdLlVpbnQ2NCA9IChVSU5UNjQpKFVJTlROKUFsbG9j YXRlWmVyb1BhZ2VzICgxKTsNCj4gPiAtICAgICAgICBpZiAoTHZsM1B0RW50cnlbSW5kZXgzXS5V aW50NjQgPT0gMCkgew0KPiA+IC0gICAgICAgICAgREVCVUcgKChERUJVR19FUlJPUiwiISEhISEh IEFMTE9DQVRFIExWTDMgUEFHRSBGQUlMICgweCV4LA0KPiA+IDB4JXgpISEhISEhXG4iLCBJbmRl eDQsIEluZGV4MykpOw0KPiA+ICsgICAgZm9yIChJbmRleDQgPSBMdmw0U3RhcnQ7IEluZGV4NCA8 PSBMdmw0RW5kOyBJbmRleDQrKykgew0KPiA+ICsgICAgICBpZiAoTHZsNFB0RW50cnlbSW5kZXg0 XS5VaW50NjQgPT0gMCkgew0KPiA+ICsgICAgICAgIEx2bDRQdEVudHJ5W0luZGV4NF0uVWludDY0 ID0gKFVJTlQ2NCkoVUlOVE4pQWxsb2NhdGVaZXJvUGFnZXMgKDEpOw0KPiA+ICsgICAgICAgIGlm IChMdmw0UHRFbnRyeVtJbmRleDRdLlVpbnQ2NCA9PSAwKSB7DQo+ID4gKyAgICAgICAgICBERUJV RyAoKERFQlVHX0VSUk9SLCIhISEhISEgQUxMT0NBVEUgTFZMNCBQQUdFIEZBSUwNCj4gPiAoMHgl eCkhISEhISFcbiIsIEluZGV4NCkpOw0KPiA+ICAgICAgICAgICAgQVNTRVJUKEZBTFNFKTsNCj4g PiAgICAgICAgICAgIHJldHVybiBOVUxMOw0KPiA+ICAgICAgICAgIH0NCj4gPiAtICAgICAgICBG bHVzaFBhZ2VUYWJsZU1lbW9yeSAoVnRkSW5kZXgsIChVSU5UTilMdmwzUHRFbnRyeVtJbmRleDNd LlVpbnQ2NCwNCj4gPiBTSVpFXzRLQik7DQo+ID4gLSAgICAgICAgU2V0U2Vjb25kTGV2ZWxQYWdp bmdFbnRyeUF0dHJpYnV0ZSAoJkx2bDNQdEVudHJ5W0luZGV4M10sDQo+ID4gRURLSUlfSU9NTVVf QUNDRVNTX1JFQUQgfCBFREtJSV9JT01NVV9BQ0NFU1NfV1JJVEUpOw0KPiA+ICsgICAgICAgIEZs dXNoUGFnZVRhYmxlTWVtb3J5IChWdGRJbmRleCwNCj4gPiArIChVSU5UTilMdmw0UHRFbnRyeVtJ bmRleDRdLlVpbnQ2NCwNCj4gPiBTSVpFXzRLQik7DQo+ID4gKyAgICAgICAgU2V0U2Vjb25kTGV2 ZWxQYWdpbmdFbnRyeUF0dHJpYnV0ZSAoJkx2bDRQdEVudHJ5W0luZGV4NF0sDQo+ID4gRURLSUlf SU9NTVVfQUNDRVNTX1JFQUQgfCBFREtJSV9JT01NVV9BQ0NFU1NfV1JJVEUpOw0KPiA+ICAgICAg ICB9DQo+ID4NCj4gPiAtICAgICAgTHZsMlB0RW50cnkgPSAoVlREX1NFQ09ORF9MRVZFTF9QQUdJ TkdfRU5UUlkNCj4gPiAqKShVSU5UTilWVERfNjRCSVRTX0FERFJFU1MoTHZsM1B0RW50cnlbSW5k ZXgzXS5CaXRzLkFkZHJlc3NMbywNCj4gPiBMdmwzUHRFbnRyeVtJbmRleDNdLkJpdHMuQWRkcmVz c0hpKTsNCj4gPiAtICAgICAgZm9yIChJbmRleDIgPSAwOyBJbmRleDIgPA0KPiA+IFNJWkVfNEtC L3NpemVvZihWVERfU0VDT05EX0xFVkVMX1BBR0lOR19FTlRSWSk7IEluZGV4MisrKSB7DQo+ID4g LSAgICAgICAgTHZsMlB0RW50cnlbSW5kZXgyXS5VaW50NjQgPSBCYXNlQWRkcmVzczsNCj4gPiAt ICAgICAgICBTZXRTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5QXR0cmlidXRlICgmTHZsMlB0RW50cnlb SW5kZXgyXSwNCj4gPiBJb01tdUFjY2Vzcyk7DQo+ID4gLSAgICAgICAgTHZsMlB0RW50cnlbSW5k ZXgyXS5CaXRzLlBhZ2VTaXplID0gMTsNCj4gPiAtICAgICAgICBCYXNlQWRkcmVzcyArPSBTSVpF XzJNQjsNCj4gPiArICAgICAgTHZsM1N0YXJ0ID0gUlNoaWZ0VTY0IChCYXNlQWRkcmVzcywgMzAp ICYgMHgxRkY7DQo+ID4gKyAgICAgIGlmIChBTElHTl9WQUxVRV9MT1coQmFzZUFkZHJlc3MgKyBT SVpFXzFHQiwgU0laRV8xR0IpIDw9DQo+ID4gRW5kQWRkcmVzcykgew0KPiA+ICsgICAgICAgIEx2 bDNFbmQgPSBTSVpFXzRLQi9zaXplb2YoVlREX1NFQ09ORF9MRVZFTF9QQUdJTkdfRU5UUlkpIC0g MTsNCj4gPiArICAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICBMdmwzRW5kID0gUlNoaWZ0VTY0 IChFbmRBZGRyZXNzIC0gMSwgMzApICYgMHgxRkY7DQo+ID4gKyAgICAgIH0NCj4gPiArICAgICAg REVCVUcgKChERUJVR19JTkZPLCIgIEx2bDQoMHgleCk6IEx2bDNTdGFydCAtIDB4JXgsIEx2bDNF bmQgLQ0KPiA+ICsgMHgleFxuIiwNCj4gPiBJbmRleDQsIEx2bDNTdGFydCwgTHZsM0VuZCkpOw0K PiA+ICsNCj4gPiArICAgICAgTHZsM1B0RW50cnkgPSAoVlREX1NFQ09ORF9MRVZFTF9QQUdJTkdf RU5UUlkNCj4gPiAqKShVSU5UTilWVERfNjRCSVRTX0FERFJFU1MoTHZsNFB0RW50cnlbSW5kZXg0 XS5CaXRzLkFkZHJlc3NMbywNCj4gPiBMdmw0UHRFbnRyeVtJbmRleDRdLkJpdHMuQWRkcmVzc0hp KTsNCj4gPiArICAgICAgZm9yIChJbmRleDMgPSBMdmwzU3RhcnQ7IEluZGV4MyA8PSBMdmwzRW5k OyBJbmRleDMrKykgew0KPiA+ICsgICAgICAgIGlmIChMdmwzUHRFbnRyeVtJbmRleDNdLlVpbnQ2 NCA9PSAwKSB7DQo+ID4gKyAgICAgICAgICBMdmwzUHRFbnRyeVtJbmRleDNdLlVpbnQ2NCA9IChV SU5UNjQpKFVJTlROKUFsbG9jYXRlWmVyb1BhZ2VzICgxKTsNCj4gPiArICAgICAgICAgIGlmIChM dmwzUHRFbnRyeVtJbmRleDNdLlVpbnQ2NCA9PSAwKSB7DQo+ID4gKyAgICAgICAgICAgIERFQlVH ICgoREVCVUdfRVJST1IsIiEhISEhISBBTExPQ0FURSBMVkwzIFBBR0UgRkFJTA0KPiA+ICsgKDB4 JXgsDQo+ID4gMHgleCkhISEhISFcbiIsIEluZGV4NCwgSW5kZXgzKSk7DQo+ID4gKyAgICAgICAg ICAgIEFTU0VSVChGQUxTRSk7DQo+ID4gKyAgICAgICAgICAgIHJldHVybiBOVUxMOw0KPiA+ICsg ICAgICAgICAgfQ0KPiA+ICsgICAgICAgICAgRmx1c2hQYWdlVGFibGVNZW1vcnkgKFZ0ZEluZGV4 LA0KPiA+ICsgKFVJTlROKUx2bDNQdEVudHJ5W0luZGV4M10uVWludDY0LA0KPiA+IFNJWkVfNEtC KTsNCj4gPiArICAgICAgICAgIFNldFNlY29uZExldmVsUGFnaW5nRW50cnlBdHRyaWJ1dGUgKCZM dmwzUHRFbnRyeVtJbmRleDNdLA0KPiA+IEVES0lJX0lPTU1VX0FDQ0VTU19SRUFEIHwgRURLSUlf SU9NTVVfQUNDRVNTX1dSSVRFKTsNCj4gPiArICAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAg IEx2bDJQdEVudHJ5ID0gKFZURF9TRUNPTkRfTEVWRUxfUEFHSU5HX0VOVFJZDQo+ID4gKikoVUlO VE4pVlREXzY0QklUU19BRERSRVNTKEx2bDNQdEVudHJ5W0luZGV4M10uQml0cy5BZGRyZXNzTG8s DQo+ID4gTHZsM1B0RW50cnlbSW5kZXgzXS5CaXRzLkFkZHJlc3NIaSk7DQo+ID4gKyAgICAgICAg Zm9yIChJbmRleDIgPSAwOyBJbmRleDIgPA0KPiA+IFNJWkVfNEtCL3NpemVvZihWVERfU0VDT05E X0xFVkVMX1BBR0lOR19FTlRSWSk7IEluZGV4MisrKSB7DQo+ID4gKyAgICAgICAgICBMdmwyUHRF bnRyeVtJbmRleDJdLlVpbnQ2NCA9IEJhc2VBZGRyZXNzOw0KPiA+ICsgICAgICAgICAgU2V0U2Vj b25kTGV2ZWxQYWdpbmdFbnRyeUF0dHJpYnV0ZSAoJkx2bDJQdEVudHJ5W0luZGV4Ml0sDQo+ID4g SW9NbXVBY2Nlc3MpOw0KPiA+ICsgICAgICAgICAgTHZsMlB0RW50cnlbSW5kZXgyXS5CaXRzLlBh Z2VTaXplID0gMTsNCj4gPiArICAgICAgICAgIEJhc2VBZGRyZXNzICs9IFNJWkVfMk1COw0KPiA+ ICsgICAgICAgICAgaWYgKEJhc2VBZGRyZXNzID49IE1lbW9yeUxpbWl0KSB7DQo+ID4gKyAgICAg ICAgICAgIGJyZWFrOw0KPiA+ICsgICAgICAgICAgfQ0KPiA+ICsgICAgICAgIH0NCj4gPiArICAg ICAgICBGbHVzaFBhZ2VUYWJsZU1lbW9yeSAoVnRkSW5kZXgsIChVSU5UTilMdmwyUHRFbnRyeSwN Cj4gPiArIFNJWkVfNEtCKTsNCj4gPiAgICAgICAgICBpZiAoQmFzZUFkZHJlc3MgPj0gTWVtb3J5 TGltaXQpIHsNCj4gPiAgICAgICAgICAgIGJyZWFrOw0KPiA+ICAgICAgICAgIH0NCj4gPiAgICAg ICAgfQ0KPiA+IC0gICAgICBGbHVzaFBhZ2VUYWJsZU1lbW9yeSAoVnRkSW5kZXgsIChVSU5UTilM dmwyUHRFbnRyeSwgU0laRV80S0IpOw0KPiA+ICsgICAgICBGbHVzaFBhZ2VUYWJsZU1lbW9yeSAo VnRkSW5kZXgsIChVSU5UTikmTHZsM1B0RW50cnlbTHZsM1N0YXJ0XSwNCj4gPiAoVUlOVE4pJkx2 bDNQdEVudHJ5W0x2bDNFbmQgKyAxXSAtIChVSU5UTikmTHZsM1B0RW50cnlbTHZsM1N0YXJ0XSk7 DQo+ID4gICAgICAgIGlmIChCYXNlQWRkcmVzcyA+PSBNZW1vcnlMaW1pdCkgew0KPiA+ICAgICAg ICAgIGJyZWFrOw0KPiA+ICAgICAgICB9DQo+ID4gICAgICB9DQo+ID4gLSAgICBGbHVzaFBhZ2VU YWJsZU1lbW9yeSAoVnRkSW5kZXgsIChVSU5UTikmTHZsM1B0RW50cnlbTHZsM1N0YXJ0XSwNCj4g PiAoVUlOVE4pJkx2bDNQdEVudHJ5W0x2bDNFbmQgKyAxXSAtIChVSU5UTikmTHZsM1B0RW50cnlb THZsM1N0YXJ0XSk7DQo+ID4gLSAgICBpZiAoQmFzZUFkZHJlc3MgPj0gTWVtb3J5TGltaXQpIHsN Cj4gPiAtICAgICAgYnJlYWs7DQo+ID4gLSAgICB9DQo+ID4gKyAgICBGbHVzaFBhZ2VUYWJsZU1l bW9yeSAoVnRkSW5kZXgsIChVSU5UTikmTHZsNFB0RW50cnlbTHZsNFN0YXJ0XSwNCj4gPiAoVUlO VE4pJkx2bDRQdEVudHJ5W0x2bDRFbmQgKyAxXSAtIChVSU5UTikmTHZsNFB0RW50cnlbTHZsNFN0 YXJ0XSk7DQo+ID4gICAgfQ0KPiA+IC0gIEZsdXNoUGFnZVRhYmxlTWVtb3J5IChWdGRJbmRleCwg KFVJTlROKSZMdmw0UHRFbnRyeVtMdmw0U3RhcnRdLA0KPiA+IChVSU5UTikmTHZsNFB0RW50cnlb THZsNEVuZCArIDFdIC0gKFVJTlROKSZMdmw0UHRFbnRyeVtMdmw0U3RhcnRdKTsNCj4gPiArICBG bHVzaFBhZ2VUYWJsZU1lbW9yeSAoVnRkSW5kZXgsIChVSU5UTikmTHZsNVB0RW50cnlbTHZsNVN0 YXJ0XSwNCj4gPiAoVUlOVE4pJkx2bDVQdEVudHJ5W0x2bDVFbmQgKyAxXSAtIChVSU5UTikmTHZs NVB0RW50cnlbTHZsNVN0YXJ0XSk7DQo+ID4NCj4gPiAgICByZXR1cm4gU2Vjb25kTGV2ZWxQYWdp bmdFbnRyeTsNCj4gPiAgfQ0KPiA+IEBAIC0yNjYsMjYgKzMzOCwyOCBAQCBDcmVhdGVTZWNvbmRM ZXZlbFBhZ2luZ0VudHJ5VGFibGUgKA0KPiA+DQo+ID4gICAgQHBhcmFtW2luXSAgVnRkSW5kZXgg ICAgICAgICAgICAgICAgICAgIFRoZSBpbmRleCBvZiB0aGUgVlRkIGVuZ2luZS4NCj4gPiAgICBA cGFyYW1baW5dICBJb01tdUFjY2VzcyAgICAgICAgICAgICAgICAgVGhlIElPTU1VIGFjY2Vzcy4N Cj4gPiArICBAcGFyYW1baW5dICBJczVMZXZlbFBhZ2luZyAgICAgICAgICAgICAgSWYgaXQgaXMg dGhlIDUgbGV2ZWwgcGFnaW5nLg0KPiA+DQo+ID4gICAgQHJldHVybiBUaGUgc2Vjb25kIGxldmVs IHBhZ2luZyBlbnRyeS4NCj4gPiAgKiovDQo+ID4gIFZURF9TRUNPTkRfTEVWRUxfUEFHSU5HX0VO VFJZICoNCj4gPiAgQ3JlYXRlU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSAoDQo+ID4gICAgSU4gVUlO VE4gICBWdGRJbmRleCwNCj4gPiAtICBJTiBVSU5UNjQgIElvTW11QWNjZXNzDQo+ID4gKyAgSU4g VUlOVDY0ICBJb01tdUFjY2VzcywNCj4gPiArICBJTiBCT09MRUFOIElzNUxldmVsUGFnaW5nDQo+ ID4gICAgKQ0KPiA+ICB7DQo+ID4gICAgVlREX1NFQ09ORF9MRVZFTF9QQUdJTkdfRU5UUlkgKlNl Y29uZExldmVsUGFnaW5nRW50cnk7DQo+ID4NCj4gPiAgICBTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5 ID0gTlVMTDsNCj4gPiAtICBTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5ID0gQ3JlYXRlU2Vjb25kTGV2 ZWxQYWdpbmdFbnRyeVRhYmxlDQo+ID4gKFZ0ZEluZGV4LCBTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5 LCAwLCBtQmVsb3c0R01lbW9yeUxpbWl0LA0KPiA+IElvTW11QWNjZXNzKTsNCj4gPiArICBTZWNv bmRMZXZlbFBhZ2luZ0VudHJ5ID0gQ3JlYXRlU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeVRhYmxlDQo+ ID4gKyAoVnRkSW5kZXgsDQo+ID4gU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSwgMCwgbUJlbG93NEdN ZW1vcnlMaW1pdCwgSW9NbXVBY2Nlc3MsDQo+ID4gSXM1TGV2ZWxQYWdpbmcpOw0KPiA+ICAgIGlm IChTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5ID09IE5VTEwpIHsNCj4gPiAgICAgIHJldHVybiBOVUxM Ow0KPiA+ICAgIH0NCj4gPg0KPiA+ICAgIGlmIChtQWJvdmU0R01lbW9yeUxpbWl0ICE9IDApIHsN Cj4gPiAgICAgIEFTU0VSVCAobUFib3ZlNEdNZW1vcnlMaW1pdCA+IEJBU0VfNEdCKTsNCj4gPiAt ICAgIFNlY29uZExldmVsUGFnaW5nRW50cnkgPSBDcmVhdGVTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5 VGFibGUgKFZ0ZEluZGV4LA0KPiA+IFNlY29uZExldmVsUGFnaW5nRW50cnksIFNJWkVfNEdCLCBt QWJvdmU0R01lbW9yeUxpbWl0LCBJb01tdUFjY2Vzcyk7DQo+ID4gKyAgICBTZWNvbmRMZXZlbFBh Z2luZ0VudHJ5ID0gQ3JlYXRlU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeVRhYmxlDQo+ID4gKyAoVnRk SW5kZXgsDQo+ID4gU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSwgU0laRV80R0IsIG1BYm92ZTRHTWVt b3J5TGltaXQsIElvTW11QWNjZXNzLA0KPiA+IElzNUxldmVsUGFnaW5nKTsNCj4gPiAgICAgIGlm IChTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5ID09IE5VTEwpIHsNCj4gPiAgICAgICAgcmV0dXJuIE5V TEw7DQo+ID4gICAgICB9DQo+ID4gQEAgLTMyNiwxMSArNDAwLDEzIEBAIFNldHVwVHJhbnNsYXRp b25UYWJsZSAoDQo+ID4gIC8qKg0KPiA+ICAgIER1bXAgRE1BUiBjb250ZXh0IGVudHJ5IHRhYmxl Lg0KPiA+DQo+ID4gLSAgQHBhcmFtW2luXSAgUm9vdEVudHJ5IERNQVIgcm9vdCBlbnRyeS4NCj4g PiArICBAcGFyYW1baW5dICBSb290RW50cnkgICAgICAgRE1BUiByb290IGVudHJ5Lg0KPiA+ICsg IEBwYXJhbVtpbl0gIElzNUxldmVsUGFnaW5nICBJZiBpdCBpcyB0aGUgNSBsZXZlbCBwYWdpbmcu DQo+ID4gICoqLw0KPiA+ICBWT0lEDQo+ID4gIER1bXBEbWFyQ29udGV4dEVudHJ5VGFibGUgKA0K PiA+IC0gIElOIFZURF9ST09UX0VOVFJZICpSb290RW50cnkNCj4gPiArICBJTiBWVERfUk9PVF9F TlRSWSAqUm9vdEVudHJ5LA0KPiA+ICsgIElOIEJPT0xFQU4gSXM1TGV2ZWxQYWdpbmcNCj4gPiAg ICApDQo+ID4gIHsNCj4gPiAgICBVSU5UTiAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ID4gQEAg LTM1OSw3ICs0MzUsNyBAQCBEdW1wRG1hckNvbnRleHRFbnRyeVRhYmxlICgNCj4gPiAgICAgICAg aWYgKENvbnRleHRFbnRyeVtJbmRleDJdLkJpdHMuUHJlc2VudCA9PSAwKSB7DQo+ID4gICAgICAg ICAgY29udGludWU7DQo+ID4gICAgICAgIH0NCj4gPiAtICAgICAgRHVtcFNlY29uZExldmVsUGFn aW5nRW50cnkgKChWT0lEDQo+ID4gKikoVUlOVE4pVlREXzY0QklUU19BRERSRVNTKENvbnRleHRF bnRyeVtJbmRleDJdLkJpdHMuU2Vjb25kTGV2ZWxQYWdlDQo+ID4gVHJhbnNsYXRpb25Qb2ludGVy TG8sDQo+ID4gQ29udGV4dEVudHJ5W0luZGV4Ml0uQml0cy5TZWNvbmRMZXZlbFBhZ2VUcmFuc2xh dGlvblBvaW50ZXJIaSkpOw0KPiA+ICsgICAgICBEdW1wU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSAo KFZPSUQNCj4gPiAqKShVSU5UTilWVERfNjRCSVRTX0FERFJFU1MoQ29udGV4dEVudHJ5W0luZGV4 Ml0uQml0cy5TZWNvbmRMZXZlbFBhZ2UNCj4gPiBUcmFuc2xhdGlvblBvaW50ZXJMbywNCj4gPiBD b250ZXh0RW50cnlbSW5kZXgyXS5CaXRzLlNlY29uZExldmVsUGFnZVRyYW5zbGF0aW9uUG9pbnRl ckhpKSwNCj4gPiBJczVMZXZlbFBhZ2luZyk7DQo+ID4gICAgICB9DQo+ID4gICAgfQ0KPiA+ICAg IERFQlVHICgoREVCVUdfSU5GTywiPT09PT09PT09PT09PT09PT09PT09PT09PVxuIikpOw0KPiA+ IEBAIC0zNjgsMTcgKzQ0NCwyMiBAQCBEdW1wRG1hckNvbnRleHRFbnRyeVRhYmxlICgNCj4gPiAg LyoqDQo+ID4gICAgRHVtcCBETUFSIHNlY29uZCBsZXZlbCBwYWdpbmcgZW50cnkuDQo+ID4NCj4g PiAtICBAcGFyYW1baW5dICBTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5IFRoZSBzZWNvbmQgbGV2ZWwg cGFnaW5nIGVudHJ5Lg0KPiA+ICsgIEBwYXJhbVtpbl0gIFNlY29uZExldmVsUGFnaW5nRW50cnkg IFRoZSBzZWNvbmQgbGV2ZWwgcGFnaW5nIGVudHJ5Lg0KPiA+ICsgIEBwYXJhbVtpbl0gIElzNUxl dmVsUGFnaW5nICAgICAgICAgIElmIGl0IGlzIHRoZSA1IGxldmVsIHBhZ2luZy4NCj4gPiAgKiov DQo+ID4gIFZPSUQNCj4gPiAgRHVtcFNlY29uZExldmVsUGFnaW5nRW50cnkgKA0KPiA+IC0gIElO IFZPSUQgKlNlY29uZExldmVsUGFnaW5nRW50cnkNCj4gPiArICBJTiBWT0lEICpTZWNvbmRMZXZl bFBhZ2luZ0VudHJ5LA0KPiA+ICsgIElOIEJPT0xFQU4gSXM1TGV2ZWxQYWdpbmcNCj4gPiAgICAp DQo+ID4gIHsNCj4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg1Ow0K PiA+ICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleDQ7DQo+ID4gICAgVUlO VE4gICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4MzsNCj4gPiAgICBVSU5UTiAgICAgICAg ICAgICAgICAgICAgICAgICAgSW5kZXgyOw0KPiA+ICAgIFVJTlROICAgICAgICAgICAgICAgICAg ICAgICAgICBJbmRleDE7DQo+ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgIEx2 bDVJbmRleEVuZDsNCj4gPiArICBWVERfU0VDT05EX0xFVkVMX1BBR0lOR19FTlRSWSAgKkx2bDVQ dEVudHJ5Ow0KPiA+ICAgIFZURF9TRUNPTkRfTEVWRUxfUEFHSU5HX0VOVFJZICAqTHZsNFB0RW50 cnk7DQo+ID4gICAgVlREX1NFQ09ORF9MRVZFTF9QQUdJTkdfRU5UUlkgICpMdmwzUHRFbnRyeTsN Cj4gPiAgICBWVERfU0VDT05EX0xFVkVMX1BBR0lOR19FTlRSWSAgKkx2bDJQdEVudHJ5OyBAQCAt Mzg2LDM4ICs0NjcsNTMNCj4gQEANCj4gPiBEdW1wU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSAoDQo+ ID4NCj4gPiAgICBERUJVRyAoKERFQlVHX1ZFUkJPU0UsIj09PT09PT09PT09PT09PT1cbiIpKTsN Cj4gPiAgICBERUJVRyAoKERFQlVHX1ZFUkJPU0UsIkRNQVIgU2Vjb25kIExldmVsIFBhZ2UgVGFi bGU6XG4iKSk7DQo+ID4gKyAgREVCVUcgKChERUJVR19WRVJCT1NFLCJTZWNvbmRMZXZlbFBhZ2lu Z0VudHJ5IEJhc2UgLSAweCV4LA0KPiA+IElzNUxldmVsUGFnaW5nIC0gJWRcbiIsIFNlY29uZExl dmVsUGFnaW5nRW50cnksIElzNUxldmVsUGFnaW5nKSk7DQo+ID4NCj4gPiAtICBERUJVRyAoKERF QlVHX1ZFUkJPU0UsIlNlY29uZExldmVsUGFnaW5nRW50cnkgQmFzZSAtIDB4JXhcbiIsDQo+ID4g U2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSkpOw0KPiA+ICsgIEx2bDVJbmRleEVuZCA9IElzNUxldmVs UGFnaW5nID8NCj4gPiBTSVpFXzRLQi9zaXplb2YoVlREX1NFQ09ORF9MRVZFTF9QQUdJTkdfRU5U UlkpIDogMTsNCj4gPiAgICBMdmw0UHRFbnRyeSA9IChWVERfU0VDT05EX0xFVkVMX1BBR0lOR19F TlRSWQ0KPiA+ICopU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeTsNCj4gPiAtICBmb3IgKEluZGV4NCA9 IDA7IEluZGV4NCA8DQo+ID4gU0laRV80S0Ivc2l6ZW9mKFZURF9TRUNPTkRfTEVWRUxfUEFHSU5H X0VOVFJZKTsgSW5kZXg0KyspIHsNCj4gPiAtICAgIGlmIChMdmw0UHRFbnRyeVtJbmRleDRdLlVp bnQ2NCAhPSAwKSB7DQo+ID4gLSAgICAgIERFQlVHICgoREVCVUdfVkVSQk9TRSwiICBMdmw0UHQg RW50cnkoMHglMDN4KSAtIDB4JTAxNmx4XG4iLCBJbmRleDQsDQo+ID4gTHZsNFB0RW50cnlbSW5k ZXg0XS5VaW50NjQpKTsNCj4gPiAtICAgIH0NCj4gPiAtICAgIGlmIChMdmw0UHRFbnRyeVtJbmRl eDRdLlVpbnQ2NCA9PSAwKSB7DQo+ID4gLSAgICAgIGNvbnRpbnVlOw0KPiA+IC0gICAgfQ0KPiA+ IC0gICAgTHZsM1B0RW50cnkgPSAoVlREX1NFQ09ORF9MRVZFTF9QQUdJTkdfRU5UUlkNCj4gPiAq KShVSU5UTilWVERfNjRCSVRTX0FERFJFU1MoTHZsNFB0RW50cnlbSW5kZXg0XS5CaXRzLkFkZHJl c3NMbywNCj4gPiBMdmw0UHRFbnRyeVtJbmRleDRdLkJpdHMuQWRkcmVzc0hpKTsNCj4gPiAtICAg IGZvciAoSW5kZXgzID0gMDsgSW5kZXgzIDwNCj4gPiBTSVpFXzRLQi9zaXplb2YoVlREX1NFQ09O RF9MRVZFTF9QQUdJTkdfRU5UUlkpOyBJbmRleDMrKykgew0KPiA+IC0gICAgICBpZiAoTHZsM1B0 RW50cnlbSW5kZXgzXS5VaW50NjQgIT0gMCkgew0KPiA+IC0gICAgICAgIERFQlVHICgoREVCVUdf VkVSQk9TRSwiICAgIEx2bDNQdCBFbnRyeSgweCUwM3gpIC0gMHglMDE2bHhcbiIsDQo+ID4gSW5k ZXgzLCBMdmwzUHRFbnRyeVtJbmRleDNdLlVpbnQ2NCkpOw0KPiA+ICsgIEx2bDVQdEVudHJ5ID0g KFZURF9TRUNPTkRfTEVWRUxfUEFHSU5HX0VOVFJZDQo+ID4gKilTZWNvbmRMZXZlbFBhZ2luZ0Vu dHJ5Ow0KPiA+ICsNCj4gPiArICBmb3IgKEluZGV4NSA9IDA7IEluZGV4NSA8IEx2bDVJbmRleEVu ZDsgSW5kZXg1KyspIHsNCj4gPiArICAgIGlmIChJczVMZXZlbFBhZ2luZykgew0KPiA+ICsgICAg ICBpZiAoTHZsNVB0RW50cnlbSW5kZXg1XS5VaW50NjQgIT0gMCkgew0KPiA+ICsgICAgICAgIERF QlVHICgoREVCVUdfVkVSQk9TRSwiICBMdmw1UHQgRW50cnkoMHglMDN4KSAtIDB4JTAxNmx4XG4i LA0KPiA+IEluZGV4NSwgTHZsNVB0RW50cnlbSW5kZXg1XS5VaW50NjQpKTsNCj4gPiAgICAgICAg fQ0KPiA+IC0gICAgICBpZiAoTHZsM1B0RW50cnlbSW5kZXgzXS5VaW50NjQgPT0gMCkgew0KPiA+ ICsgICAgICBpZiAoTHZsNVB0RW50cnlbSW5kZXg1XS5VaW50NjQgPT0gMCkgew0KPiA+ICAgICAg ICAgIGNvbnRpbnVlOw0KPiA+ICAgICAgICB9DQo+ID4gKyAgICAgIEx2bDRQdEVudHJ5ID0gKFZU RF9TRUNPTkRfTEVWRUxfUEFHSU5HX0VOVFJZDQo+ID4gKikoVUlOVE4pVlREXzY0QklUU19BRERS RVNTKEx2bDVQdEVudHJ5W0luZGV4NV0uQml0cy5BZGRyZXNzTG8sDQo+ID4gTHZsNVB0RW50cnlb SW5kZXg1XS5CaXRzLkFkZHJlc3NIaSk7DQo+ID4gKyAgICB9DQo+ID4NCj4gPiAtICAgICAgTHZs MlB0RW50cnkgPSAoVlREX1NFQ09ORF9MRVZFTF9QQUdJTkdfRU5UUlkNCj4gPiAqKShVSU5UTilW VERfNjRCSVRTX0FERFJFU1MoTHZsM1B0RW50cnlbSW5kZXgzXS5CaXRzLkFkZHJlc3NMbywNCj4g PiBMdmwzUHRFbnRyeVtJbmRleDNdLkJpdHMuQWRkcmVzc0hpKTsNCj4gPiAtICAgICAgZm9yIChJ bmRleDIgPSAwOyBJbmRleDIgPA0KPiA+IFNJWkVfNEtCL3NpemVvZihWVERfU0VDT05EX0xFVkVM X1BBR0lOR19FTlRSWSk7IEluZGV4MisrKSB7DQo+ID4gLSAgICAgICAgaWYgKEx2bDJQdEVudHJ5 W0luZGV4Ml0uVWludDY0ICE9IDApIHsNCj4gPiAtICAgICAgICAgIERFQlVHICgoREVCVUdfVkVS Qk9TRSwiICAgICAgTHZsMlB0IEVudHJ5KDB4JTAzeCkgLSAweCUwMTZseFxuIiwNCj4gPiBJbmRl eDIsIEx2bDJQdEVudHJ5W0luZGV4Ml0uVWludDY0KSk7DQo+ID4gKyAgICBmb3IgKEluZGV4NCA9 IDA7IEluZGV4NCA8DQo+ID4gU0laRV80S0Ivc2l6ZW9mKFZURF9TRUNPTkRfTEVWRUxfUEFHSU5H X0VOVFJZKTsgSW5kZXg0KyspIHsNCj4gPiArICAgICAgaWYgKEx2bDRQdEVudHJ5W0luZGV4NF0u VWludDY0ICE9IDApIHsNCj4gPiArICAgICAgICBERUJVRyAoKERFQlVHX1ZFUkJPU0UsIiAgTHZs NFB0IEVudHJ5KDB4JTAzeCkgLSAweCUwMTZseFxuIiwNCj4gPiBJbmRleDQsIEx2bDRQdEVudHJ5 W0luZGV4NF0uVWludDY0KSk7DQo+ID4gKyAgICAgIH0NCj4gPiArICAgICAgaWYgKEx2bDRQdEVu dHJ5W0luZGV4NF0uVWludDY0ID09IDApIHsNCj4gPiArICAgICAgICBjb250aW51ZTsNCj4gPiAr ICAgICAgfQ0KPiA+ICsgICAgICBMdmwzUHRFbnRyeSA9IChWVERfU0VDT05EX0xFVkVMX1BBR0lO R19FTlRSWQ0KPiA+ICopKFVJTlROKVZURF82NEJJVFNfQUREUkVTUyhMdmw0UHRFbnRyeVtJbmRl eDRdLkJpdHMuQWRkcmVzc0xvLA0KPiA+IEx2bDRQdEVudHJ5W0luZGV4NF0uQml0cy5BZGRyZXNz SGkpOw0KPiA+ICsgICAgICBmb3IgKEluZGV4MyA9IDA7IEluZGV4MyA8DQo+ID4gU0laRV80S0Iv c2l6ZW9mKFZURF9TRUNPTkRfTEVWRUxfUEFHSU5HX0VOVFJZKTsgSW5kZXgzKyspIHsNCj4gPiAr ICAgICAgICBpZiAoTHZsM1B0RW50cnlbSW5kZXgzXS5VaW50NjQgIT0gMCkgew0KPiA+ICsgICAg ICAgICAgREVCVUcgKChERUJVR19WRVJCT1NFLCIgICBMdmwzUHQgRW50cnkoMHglMDN4KSAtIDB4 JTAxNmx4XG4iLA0KPiA+IEluZGV4MywgTHZsM1B0RW50cnlbSW5kZXgzXS5VaW50NjQpKTsNCj4g PiAgICAgICAgICB9DQo+ID4gLSAgICAgICAgaWYgKEx2bDJQdEVudHJ5W0luZGV4Ml0uVWludDY0 ID09IDApIHsNCj4gPiArICAgICAgICBpZiAoTHZsM1B0RW50cnlbSW5kZXgzXS5VaW50NjQgPT0g MCkgew0KPiA+ICAgICAgICAgICAgY29udGludWU7DQo+ID4gICAgICAgICAgfQ0KPiA+IC0gICAg ICAgIGlmIChMdmwyUHRFbnRyeVtJbmRleDJdLkJpdHMuUGFnZVNpemUgPT0gMCkgew0KPiA+IC0g ICAgICAgICAgTHZsMVB0RW50cnkgPSAoVlREX1NFQ09ORF9MRVZFTF9QQUdJTkdfRU5UUlkNCj4g PiAqKShVSU5UTilWVERfNjRCSVRTX0FERFJFU1MoTHZsMlB0RW50cnlbSW5kZXgyXS5CaXRzLkFk ZHJlc3NMbywNCj4gPiBMdmwyUHRFbnRyeVtJbmRleDJdLkJpdHMuQWRkcmVzc0hpKTsNCj4gPiAt ICAgICAgICAgIGZvciAoSW5kZXgxID0gMDsgSW5kZXgxIDwNCj4gPiBTSVpFXzRLQi9zaXplb2Yo VlREX1NFQ09ORF9MRVZFTF9QQUdJTkdfRU5UUlkpOyBJbmRleDErKykgew0KPiA+IC0gICAgICAg ICAgICBpZiAoTHZsMVB0RW50cnlbSW5kZXgxXS5VaW50NjQgIT0gMCkgew0KPiA+IC0gICAgICAg ICAgICAgIERFQlVHICgoREVCVUdfVkVSQk9TRSwiICAgICAgICBMdmwxUHQgRW50cnkoMHglMDN4 KSAtDQo+IDB4JTAxNmx4XG4iLA0KPiA+IEluZGV4MSwgTHZsMVB0RW50cnlbSW5kZXgxXS5VaW50 NjQpKTsNCj4gPiArDQo+ID4gKyAgICAgICAgTHZsMlB0RW50cnkgPSAoVlREX1NFQ09ORF9MRVZF TF9QQUdJTkdfRU5UUlkNCj4gPiAqKShVSU5UTilWVERfNjRCSVRTX0FERFJFU1MoTHZsM1B0RW50 cnlbSW5kZXgzXS5CaXRzLkFkZHJlc3NMbywNCj4gPiBMdmwzUHRFbnRyeVtJbmRleDNdLkJpdHMu QWRkcmVzc0hpKTsNCj4gPiArICAgICAgICBmb3IgKEluZGV4MiA9IDA7IEluZGV4MiA8DQo+ID4g U0laRV80S0Ivc2l6ZW9mKFZURF9TRUNPTkRfTEVWRUxfUEFHSU5HX0VOVFJZKTsgSW5kZXgyKysp IHsNCj4gPiArICAgICAgICAgIGlmIChMdmwyUHRFbnRyeVtJbmRleDJdLlVpbnQ2NCAhPSAwKSB7 DQo+ID4gKyAgICAgICAgICAgIERFQlVHICgoREVCVUdfVkVSQk9TRSwiICAgIEx2bDJQdCBFbnRy eSgweCUwM3gpIC0gMHglMDE2bHhcbiIsDQo+ID4gSW5kZXgyLCBMdmwyUHRFbnRyeVtJbmRleDJd LlVpbnQ2NCkpOw0KPiA+ICsgICAgICAgICAgfQ0KPiA+ICsgICAgICAgICAgaWYgKEx2bDJQdEVu dHJ5W0luZGV4Ml0uVWludDY0ID09IDApIHsNCj4gPiArICAgICAgICAgICAgY29udGludWU7DQo+ ID4gKyAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICBpZiAoTHZsMlB0RW50cnlbSW5kZXgyXS5C aXRzLlBhZ2VTaXplID09IDApIHsNCj4gPiArICAgICAgICAgICAgTHZsMVB0RW50cnkgPSAoVlRE X1NFQ09ORF9MRVZFTF9QQUdJTkdfRU5UUlkNCj4gPiAqKShVSU5UTilWVERfNjRCSVRTX0FERFJF U1MoTHZsMlB0RW50cnlbSW5kZXgyXS5CaXRzLkFkZHJlc3NMbywNCj4gPiBMdmwyUHRFbnRyeVtJ bmRleDJdLkJpdHMuQWRkcmVzc0hpKTsNCj4gPiArICAgICAgICAgICAgZm9yIChJbmRleDEgPSAw OyBJbmRleDEgPA0KPiA+IFNJWkVfNEtCL3NpemVvZihWVERfU0VDT05EX0xFVkVMX1BBR0lOR19F TlRSWSk7IEluZGV4MSsrKSB7DQo+ID4gKyAgICAgICAgICAgICAgaWYgKEx2bDFQdEVudHJ5W0lu ZGV4MV0uVWludDY0ICE9IDApIHsNCj4gPiArICAgICAgICAgICAgICAgIERFQlVHICgoREVCVUdf VkVSQk9TRSwiICAgICAgTHZsMVB0IEVudHJ5KDB4JTAzeCkgLQ0KPiAweCUwMTZseFxuIiwNCj4g PiBJbmRleDEsIEx2bDFQdEVudHJ5W0luZGV4MV0uVWludDY0KSk7DQo+ID4gKyAgICAgICAgICAg ICAgfQ0KPiA+ICAgICAgICAgICAgICB9DQo+ID4gICAgICAgICAgICB9DQo+ID4gICAgICAgICAg fQ0KPiA+IEBAIC01MTAsNiArNjA2LDcgQEAgUGFnZUF0dHJpYnV0ZVRvTGVuZ3RoICgNCj4gPiAg ICBAcGFyYW1baW5dICAgVnRkSW5kZXggICAgICAgICAgICAgICAgIFRoZSBpbmRleCB1c2VkIHRv IGlkZW50aWZ5IGEgVlRkIGVuZ2luZS4NCj4gPiAgICBAcGFyYW1baW5dICAgU2Vjb25kTGV2ZWxQ YWdpbmdFbnRyeSAgIFRoZSBzZWNvbmQgbGV2ZWwgcGFnaW5nIGVudHJ5IGluDQo+ID4gVlRkIHRh YmxlIGZvciB0aGUgZGV2aWNlLg0KPiA+ICAgIEBwYXJhbVtpbl0gICBBZGRyZXNzICAgICAgICAg ICAgICAgICAgVGhlIGFkZHJlc3MgdG8gYmUgY2hlY2tlZC4NCj4gPiArICBAcGFyYW1baW5dICAg SXM1TGV2ZWxQYWdpbmcgICAgICAgICAgIElmIGl0IGlzIHRoZSA1IGxldmVsIHBhZ2luZy4NCj4g PiAgICBAcGFyYW1bb3V0XSAgUGFnZUF0dHJpYnV0ZXMgICAgICAgICAgIFRoZSBwYWdlIGF0dHJp YnV0ZSBvZiB0aGUgcGFnZSBlbnRyeS4NCj4gPg0KPiA+ICAgIEByZXR1cm4gVGhlIHBhZ2UgZW50 cnkuDQo+ID4gQEAgLTUxOSw2ICs2MTYsNyBAQCBHZXRTZWNvbmRMZXZlbFBhZ2VUYWJsZUVudHJ5 ICgNCj4gPiAgICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgVnRkSW5kZXgsDQo+ ID4gICAgSU4gIFZURF9TRUNPTkRfTEVWRUxfUEFHSU5HX0VOVFJZICpTZWNvbmRMZXZlbFBhZ2lu Z0VudHJ5LA0KPiA+ICAgIElOICBQSFlTSUNBTF9BRERSRVNTICAgICAgICAgICAgICBBZGRyZXNz LA0KPiA+ICsgIElOICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICBJczVMZXZlbFBhZ2lu ZywNCj4gPiAgICBPVVQgUEFHRV9BVFRSSUJVVEUgICAgICAgICAgICAgICAgKlBhZ2VBdHRyaWJ1 dGUNCj4gPiAgICApDQo+ID4gIHsNCj4gPiBAQCAtNTI2LDE3ICs2MjQsMzggQEAgR2V0U2Vjb25k TGV2ZWxQYWdlVGFibGVFbnRyeSAoDQo+ID4gICAgVUlOVE4gICAgICAgICAgICAgICAgIEluZGV4 MjsNCj4gPiAgICBVSU5UTiAgICAgICAgICAgICAgICAgSW5kZXgzOw0KPiA+ICAgIFVJTlROICAg ICAgICAgICAgICAgICBJbmRleDQ7DQo+ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgIEluZGV4 NTsNCj4gPiAgICBVSU5UNjQgICAgICAgICAgICAgICAgKkwxUGFnZVRhYmxlOw0KPiA+ICAgIFVJ TlQ2NCAgICAgICAgICAgICAgICAqTDJQYWdlVGFibGU7DQo+ID4gICAgVUlOVDY0ICAgICAgICAg ICAgICAgICpMM1BhZ2VUYWJsZTsNCj4gPiAgICBVSU5UNjQgICAgICAgICAgICAgICAgKkw0UGFn ZVRhYmxlOw0KPiA+ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAqTDVQYWdlVGFibGU7DQo+ID4N Cj4gPiArICBJbmRleDUgPSAoKFVJTlROKVJTaGlmdFU2NCAoQWRkcmVzcywgNDgpKSAmIFBBR0lO R19WVERfSU5ERVhfTUFTSzsNCj4gPiAgICBJbmRleDQgPSAoKFVJTlROKVJTaGlmdFU2NCAoQWRk cmVzcywgMzkpKSAmIFBBR0lOR19WVERfSU5ERVhfTUFTSzsNCj4gPiAgICBJbmRleDMgPSAoKFVJ TlROKUFkZHJlc3MgPj4gMzApICYgUEFHSU5HX1ZURF9JTkRFWF9NQVNLOw0KPiA+ICAgIEluZGV4 MiA9ICgoVUlOVE4pQWRkcmVzcyA+PiAyMSkgJiBQQUdJTkdfVlREX0lOREVYX01BU0s7DQo+ID4g ICAgSW5kZXgxID0gKChVSU5UTilBZGRyZXNzID4+IDEyKSAmIFBBR0lOR19WVERfSU5ERVhfTUFT SzsNCj4gPg0KPiA+IC0gIEw0UGFnZVRhYmxlID0gKFVJTlQ2NCAqKVNlY29uZExldmVsUGFnaW5n RW50cnk7DQo+ID4gKyAgaWYgKElzNUxldmVsUGFnaW5nKSB7DQo+ID4gKyAgICBMNVBhZ2VUYWJs ZSA9IChVSU5UNjQgKilTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5Ow0KPiA+ICsgICAgaWYgKEw1UGFn ZVRhYmxlW0luZGV4NV0gPT0gMCkgew0KPiA+ICsgICAgICBMNVBhZ2VUYWJsZVtJbmRleDVdID0g KFVJTlQ2NCkoVUlOVE4pQWxsb2NhdGVaZXJvUGFnZXMgKDEpOw0KPiA+ICsgICAgICBpZiAoTDVQ YWdlVGFibGVbSW5kZXg1XSA9PSAwKSB7DQo+ID4gKyAgICAgICAgREVCVUcgKChERUJVR19FUlJP UiwiISEhISEhIEFMTE9DQVRFIExWTDUgUEFHRSBGQUlMDQo+ID4gKDB4JXgpISEhISEhXG4iLCBJ bmRleDQpKTsNCj4gPiArICAgICAgICBBU1NFUlQoRkFMU0UpOw0KPiA+ICsgICAgICAgICpQYWdl QXR0cmlidXRlID0gUGFnZU5vbmU7DQo+ID4gKyAgICAgICAgcmV0dXJuIE5VTEw7DQo+ID4gKyAg ICAgIH0NCj4gPiArICAgICAgRmx1c2hQYWdlVGFibGVNZW1vcnkgKFZ0ZEluZGV4LCAoVUlOVE4p TDVQYWdlVGFibGVbSW5kZXg1XSwNCj4gPiBTSVpFXzRLQik7DQo+ID4gKyAgICAgIFNldFNlY29u ZExldmVsUGFnaW5nRW50cnlBdHRyaWJ1dGUNCj4gPiAoKFZURF9TRUNPTkRfTEVWRUxfUEFHSU5H X0VOVFJZICopJkw1UGFnZVRhYmxlW0luZGV4NV0sDQo+ID4gRURLSUlfSU9NTVVfQUNDRVNTX1JF QUQgfCBFREtJSV9JT01NVV9BQ0NFU1NfV1JJVEUpOw0KPiA+ICsgICAgICBGbHVzaFBhZ2VUYWJs ZU1lbW9yeSAoVnRkSW5kZXgsIChVSU5UTikmTDVQYWdlVGFibGVbSW5kZXg1XSwNCj4gPiBzaXpl b2YoTDVQYWdlVGFibGVbSW5kZXg1XSkpOw0KPiA+ICsgICAgfQ0KPiA+ICsgICAgTDRQYWdlVGFi bGUgPSAoVUlOVDY0ICopKFVJTlROKShMNVBhZ2VUYWJsZVtJbmRleDVdICYNCj4gPiBQQUdJTkdf NEtfQUREUkVTU19NQVNLXzY0KTsNCj4gPiArICB9IGVsc2Ugew0KPiA+ICsgICAgTDRQYWdlVGFi bGUgPSAoVUlOVDY0ICopU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeTsgIH0NCj4gPiArDQo+ID4gICAg aWYgKEw0UGFnZVRhYmxlW0luZGV4NF0gPT0gMCkgew0KPiA+ICAgICAgTDRQYWdlVGFibGVbSW5k ZXg0XSA9IChVSU5UNjQpKFVJTlROKUFsbG9jYXRlWmVyb1BhZ2VzICgxKTsNCj4gPiAgICAgIGlm IChMNFBhZ2VUYWJsZVtJbmRleDRdID09IDApIHsNCj4gPiBAQCAtNzg1LDcgKzkwNCw3IEBAIFNl dFNlY29uZExldmVsUGFnaW5nQXR0cmlidXRlICgNCj4gPiAgICB9DQo+ID4NCj4gPiAgICB3aGls ZSAoTGVuZ3RoICE9IDApIHsNCj4gPiAtICAgIFBhZ2VFbnRyeSA9IEdldFNlY29uZExldmVsUGFn ZVRhYmxlRW50cnkgKFZ0ZEluZGV4LA0KPiA+IFNlY29uZExldmVsUGFnaW5nRW50cnksIEJhc2VB ZGRyZXNzLCAmUGFnZUF0dHJpYnV0ZSk7DQo+ID4gKyAgICBQYWdlRW50cnkgPSBHZXRTZWNvbmRM ZXZlbFBhZ2VUYWJsZUVudHJ5IChWdGRJbmRleCwNCj4gPiBTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5 LCBCYXNlQWRkcmVzcywNCj4gPiBtVnRkVW5pdEluZm9ybWF0aW9uW1Z0ZEluZGV4XS5JczVMZXZl bFBhZ2luZywgJlBhZ2VBdHRyaWJ1dGUpOw0KPiA+ICAgICAgaWYgKFBhZ2VFbnRyeSA9PSBOVUxM KSB7DQo+ID4gICAgICAgIERFQlVHICgoREVCVUdfRVJST1IsICJQYWdlRW50cnkgLSBOVUxMXG4i KSk7DQo+ID4gICAgICAgIHJldHVybiBSRVRVUk5fVU5TVVBQT1JURUQ7DQo+ID4gQEAgLTkxMyw3 ICsxMDMyLDcgQEAgU2V0QWNjZXNzQXR0cmlidXRlICgNCj4gPg0KPiA+ICAgIGlmIChFeHRDb250 ZXh0RW50cnkgIT0gTlVMTCkgew0KPiA+ICAgICAgaWYgKEV4dENvbnRleHRFbnRyeS0+Qml0cy5Q cmVzZW50ID09IDApIHsNCj4gPiAtICAgICAgU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSA9IENyZWF0 ZVNlY29uZExldmVsUGFnaW5nRW50cnkgKFZ0ZEluZGV4LCAwKTsNCj4gPiArICAgICAgU2Vjb25k TGV2ZWxQYWdpbmdFbnRyeSA9IENyZWF0ZVNlY29uZExldmVsUGFnaW5nRW50cnkNCj4gPiArIChW dGRJbmRleCwgMCwNCj4gPiBtVnRkVW5pdEluZm9ybWF0aW9uW1Z0ZEluZGV4XS5JczVMZXZlbFBh Z2luZyk7DQo+ID4gICAgICAgIERFQlVHICgoREVCVUdfVkVSQk9TRSwiU2Vjb25kTGV2ZWxQYWdp bmdFbnRyeSAtIDB4JXggKFMlMDR4DQo+ID4gQiUwMnggRCUwMnggRiUwMngpIE5ld1xuIiwgU2Vj b25kTGV2ZWxQYWdpbmdFbnRyeSwgU2VnbWVudCwNCj4gPiBTb3VyY2VJZC5CaXRzLkJ1cywgU291 cmNlSWQuQml0cy5EZXZpY2UsIFNvdXJjZUlkLkJpdHMuRnVuY3Rpb24pKTsNCj4gPiAgICAgICAg UHQgPSAoVUlOVDY0KVJTaGlmdFU2NCAoKFVJTlQ2NCkoVUlOVE4pU2Vjb25kTGV2ZWxQYWdpbmdF bnRyeSwNCj4gPiAxMik7DQo+ID4NCj4gPiBAQCAtOTIyLDcgKzEwNDEsNyBAQCBTZXRBY2Nlc3NB dHRyaWJ1dGUgKA0KPiA+ICAgICAgICBFeHRDb250ZXh0RW50cnktPkJpdHMuRG9tYWluSWRlbnRp ZmllciA9IERvbWFpbklkZW50aWZpZXI7DQo+ID4gICAgICAgIEV4dENvbnRleHRFbnRyeS0+Qml0 cy5QcmVzZW50ID0gMTsNCj4gPiAgICAgICAgRmx1c2hQYWdlVGFibGVNZW1vcnkgKFZ0ZEluZGV4 LCAoVUlOVE4pRXh0Q29udGV4dEVudHJ5LA0KPiA+IHNpemVvZigqRXh0Q29udGV4dEVudHJ5KSk7 DQo+ID4gLSAgICAgIER1bXBEbWFyRXh0Q29udGV4dEVudHJ5VGFibGUNCj4gPiAobVZ0ZFVuaXRJ bmZvcm1hdGlvbltWdGRJbmRleF0uRXh0Um9vdEVudHJ5VGFibGUpOw0KPiA+ICsgICAgICBEdW1w RG1hckV4dENvbnRleHRFbnRyeVRhYmxlDQo+ID4gKG1WdGRVbml0SW5mb3JtYXRpb25bVnRkSW5k ZXhdLkV4dFJvb3RFbnRyeVRhYmxlLA0KPiA+IG1WdGRVbml0SW5mb3JtYXRpb25bVnRkSW5kZXhd LklzNUxldmVsUGFnaW5nKTsNCj4gPiAgICAgICAgbVZ0ZFVuaXRJbmZvcm1hdGlvbltWdGRJbmRl eF0uSGFzRGlydHlDb250ZXh0ID0gVFJVRTsNCj4gPiAgICAgIH0gZWxzZSB7DQo+ID4gICAgICAg IFNlY29uZExldmVsUGFnaW5nRW50cnkgPSAoVk9JRA0KPiA+ICopKFVJTlROKVZURF82NEJJVFNf QUREUkVTUyhFeHRDb250ZXh0RW50cnktDQo+ID4gPkJpdHMuU2Vjb25kTGV2ZWxQYWdlVHJhbnNs YXRpb25Qb2ludGVyTG8sIEV4dENvbnRleHRFbnRyeS0NCj4gPiA+Qml0cy5TZWNvbmRMZXZlbFBh Z2VUcmFuc2xhdGlvblBvaW50ZXJIaSk7DQo+ID4gQEAgLTkzMCw3ICsxMDQ5LDcgQEAgU2V0QWNj ZXNzQXR0cmlidXRlICgNCj4gPiAgICAgIH0NCj4gPiAgICB9IGVsc2UgaWYgKENvbnRleHRFbnRy eSAhPSBOVUxMKSB7DQo+ID4gICAgICBpZiAoQ29udGV4dEVudHJ5LT5CaXRzLlByZXNlbnQgPT0g MCkgew0KPiA+IC0gICAgICBTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5ID0gQ3JlYXRlU2Vjb25kTGV2 ZWxQYWdpbmdFbnRyeSAoVnRkSW5kZXgsIDApOw0KPiA+ICsgICAgICBTZWNvbmRMZXZlbFBhZ2lu Z0VudHJ5ID0gQ3JlYXRlU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeQ0KPiA+ICsgKFZ0ZEluZGV4LCAw LA0KPiA+IG1WdGRVbml0SW5mb3JtYXRpb25bVnRkSW5kZXhdLklzNUxldmVsUGFnaW5nKTsNCj4g PiAgICAgICAgREVCVUcgKChERUJVR19WRVJCT1NFLCJTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5IC0g MHgleCAoUyUwNHgNCj4gPiBCJTAyeCBEJTAyeCBGJTAyeCkgTmV3XG4iLCBTZWNvbmRMZXZlbFBh Z2luZ0VudHJ5LCBTZWdtZW50LA0KPiA+IFNvdXJjZUlkLkJpdHMuQnVzLCBTb3VyY2VJZC5CaXRz LkRldmljZSwgU291cmNlSWQuQml0cy5GdW5jdGlvbikpOw0KPiA+ICAgICAgICBQdCA9IChVSU5U NjQpUlNoaWZ0VTY0ICgoVUlOVDY0KShVSU5UTilTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5LA0KPiA+ IDEyKTsNCj4gPg0KPiA+IEBAIC05MzksNyArMTA1OCw3IEBAIFNldEFjY2Vzc0F0dHJpYnV0ZSAo DQo+ID4gICAgICAgIENvbnRleHRFbnRyeS0+Qml0cy5Eb21haW5JZGVudGlmaWVyID0gRG9tYWlu SWRlbnRpZmllcjsNCj4gPiAgICAgICAgQ29udGV4dEVudHJ5LT5CaXRzLlByZXNlbnQgPSAxOw0K PiA+ICAgICAgICBGbHVzaFBhZ2VUYWJsZU1lbW9yeSAoVnRkSW5kZXgsIChVSU5UTilDb250ZXh0 RW50cnksDQo+ID4gc2l6ZW9mKCpDb250ZXh0RW50cnkpKTsNCj4gPiAtICAgICAgRHVtcERtYXJD b250ZXh0RW50cnlUYWJsZQ0KPiA+IChtVnRkVW5pdEluZm9ybWF0aW9uW1Z0ZEluZGV4XS5Sb290 RW50cnlUYWJsZSk7DQo+ID4gKyAgICAgIER1bXBEbWFyQ29udGV4dEVudHJ5VGFibGUNCj4gPiAo bVZ0ZFVuaXRJbmZvcm1hdGlvbltWdGRJbmRleF0uUm9vdEVudHJ5VGFibGUsDQo+ID4gbVZ0ZFVu aXRJbmZvcm1hdGlvbltWdGRJbmRleF0uSXM1TGV2ZWxQYWdpbmcpOw0KPiA+ICAgICAgICBtVnRk VW5pdEluZm9ybWF0aW9uW1Z0ZEluZGV4XS5IYXNEaXJ0eUNvbnRleHQgPSBUUlVFOw0KPiA+ICAg ICAgfSBlbHNlIHsNCj4gPiAgICAgICAgU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSA9IChWT0lEDQo+ ID4gKikoVUlOVE4pVlREXzY0QklUU19BRERSRVNTKENvbnRleHRFbnRyeS0NCj4gPiA+Qml0cy5T ZWNvbmRMZXZlbFBhZ2VUcmFuc2xhdGlvblBvaW50ZXJMbywgQ29udGV4dEVudHJ5LQ0KPiA+ID5C aXRzLlNlY29uZExldmVsUGFnZVRyYW5zbGF0aW9uUG9pbnRlckhpKTsNCj4gPiBAQCAtMTAwMCw3 ICsxMTE5LDcgQEAgQWx3YXlzRW5hYmxlUGFnZUF0dHJpYnV0ZSAoDQo+ID4NCj4gPiAgICBpZiAo bVZ0ZFVuaXRJbmZvcm1hdGlvbltWdGRJbmRleF0uRml4ZWRTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5 ID09IDApIHsNCj4gPiAgICAgIERFQlVHKChERUJVR19JTkZPLCAiQ3JlYXRlU2Vjb25kTGV2ZWxQ YWdpbmdFbnRyeSAtICVkXG4iLA0KPiA+IFZ0ZEluZGV4KSk7DQo+ID4gLSAgICBtVnRkVW5pdElu Zm9ybWF0aW9uW1Z0ZEluZGV4XS5GaXhlZFNlY29uZExldmVsUGFnaW5nRW50cnkgPQ0KPiA+IENy ZWF0ZVNlY29uZExldmVsUGFnaW5nRW50cnkgKFZ0ZEluZGV4LCBFREtJSV9JT01NVV9BQ0NFU1Nf UkVBRCB8DQo+ID4gRURLSUlfSU9NTVVfQUNDRVNTX1dSSVRFKTsNCj4gPiArICAgIG1WdGRVbml0 SW5mb3JtYXRpb25bVnRkSW5kZXhdLkZpeGVkU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSA9DQo+ID4g Q3JlYXRlU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSAoVnRkSW5kZXgsIEVES0lJX0lPTU1VX0FDQ0VT U19SRUFEIHwNCj4gPiBFREtJSV9JT01NVV9BQ0NFU1NfV1JJVEUsDQo+ID4gbVZ0ZFVuaXRJbmZv cm1hdGlvbltWdGRJbmRleF0uSXM1TGV2ZWxQYWdpbmcpOw0KPiA+ICAgIH0NCj4gPg0KPiA+ICAg IFNlY29uZExldmVsUGFnaW5nRW50cnkgPQ0KPiA+IG1WdGRVbml0SW5mb3JtYXRpb25bVnRkSW5k ZXhdLkZpeGVkU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeTsNCj4gPiBkaWZmIC0tZ2l0DQo+ID4gYS9T aWxpY29uL0ludGVsL0ludGVsU2lsaWNvblBrZy9GZWF0dXJlL1ZUZC9JbnRlbFZUZER4ZS9UcmFu c2xhdGlvblRhYmxlRXguDQo+ID4gYw0KPiA+IGIvU2lsaWNvbi9JbnRlbC9JbnRlbFNpbGljb25Q a2cvRmVhdHVyZS9WVGQvSW50ZWxWVGREeGUvVHJhbnNsYXRpb25UYWJsZUV4Lg0KPiA+IGMNCj4g PiBpbmRleCAwZWQ5ZTNjYS4uMzkxOGVlZWUgMTAwNjQ0DQo+ID4gLS0tDQo+ID4gYS9TaWxpY29u L0ludGVsL0ludGVsU2lsaWNvblBrZy9GZWF0dXJlL1ZUZC9JbnRlbFZUZER4ZS9UcmFuc2xhdGlv blRhYmxlRXguDQo+ID4gYw0KPiA+ICsrKw0KPiA+IGIvU2lsaWNvbi9JbnRlbC9JbnRlbFNpbGlj b25Qa2cvRmVhdHVyZS9WVGQvSW50ZWxWVGREeGUvVHJhbnNsYXRpb25UYWJsZUV4Lg0KPiA+IGMN Cj4gPiBAQCAtNzgsMTEgKzc4LDMyIEBAIENyZWF0ZUV4dENvbnRleHRFbnRyeSAoDQo+ID4NCj4g PiAgICAgIERFQlVHICgoREVCVUdfSU5GTywiRE9NQUlOOiBTJTA0eCwgQiUwMnggRCUwMnggRiUw MnhcbiIsDQo+ID4gbVZ0ZFVuaXRJbmZvcm1hdGlvbltWdGRJbmRleF0uU2VnbWVudCwgU291cmNl SWQuQml0cy5CdXMsDQo+ID4gU291cmNlSWQuQml0cy5EZXZpY2UsIFNvdXJjZUlkLkJpdHMuRnVu Y3Rpb24pKTsNCj4gPg0KPiA+IC0gICAgaWYgKChtVnRkVW5pdEluZm9ybWF0aW9uW1Z0ZEluZGV4 XS5DYXBSZWcuQml0cy5TQUdBVyAmIEJJVDIpID09IDApIHsNCj4gPiAtICAgICAgREVCVUcoKERF QlVHX0VSUk9SLCAiISEhISA0LWxldmVsIHBhZ2UtdGFibGUgaXMgbm90IHN1cHBvcnRlZCBvbg0K PiA+IFZURCAlZCAhISEhXG4iLCBWdGRJbmRleCkpOw0KPiA+ICsgICAgbVZ0ZFVuaXRJbmZvcm1h dGlvbltWdGRJbmRleF0uSXM1TGV2ZWxQYWdpbmcgPSBGQUxTRTsNCj4gPiArICAgIGlmICgobVZ0 ZFVuaXRJbmZvcm1hdGlvbltWdGRJbmRleF0uQ2FwUmVnLkJpdHMuU0FHQVcgJiBCSVQzKSAhPSAw KSB7DQo+ID4gKyAgICAgIGlmICgoUGNkR2V0OChQY2RWVGRQb2xpY3lQcm9wZXJ0eU1hc2spICYg QklUMykgIT0gMCkgew0KPiA+ICsgICAgICAgIERFQlVHKChERUJVR19FUlJPUiwgIkZvcmNlIHRv IHVzZSA0LWxldmVsIHBhZ2UtdGFibGUgb24gVlREDQo+ID4gKyAlZFxuIiwNCj4gPiBWdGRJbmRl eCkpOw0KPiA+ICsgICAgICAgIEV4dENvbnRleHRFbnRyeS0+Qml0cy5BZGRyZXNzV2lkdGggPSAw eDI7DQo+ID4gKyAgICAgIH0gaWYgKChQY2RHZXQ4KFBjZFZUZFBvbGljeVByb3BlcnR5TWFzaykg JiBCSVQ0KSAhPSAwKSB7DQo+ID4gKyAgICAgICAgREVCVUcoKERFQlVHX0VSUk9SLCAiRm9yY2Ug dG8gdXNlIDUtbGV2ZWwgcGFnZS10YWJsZSBvbiBWVEQNCj4gPiArICVkXG4iLA0KPiA+IFZ0ZElu ZGV4KSk7DQo+ID4gKyAgICAgICAgRXh0Q29udGV4dEVudHJ5LT5CaXRzLkFkZHJlc3NXaWR0aCA9 IDB4MzsNCj4gPiArICAgICAgICBtVnRkVW5pdEluZm9ybWF0aW9uW1Z0ZEluZGV4XS5JczVMZXZl bFBhZ2luZyA9IFRSVUU7DQo+ID4gKyAgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgaWYgKG1B Y3BpRG1hclRhYmxlLT5Ib3N0QWRkcmVzc1dpZHRoID4gNDgpIHsNCj4gPiArICAgICAgICAgIERF QlVHKChERUJVR19FUlJPUiwgIlVzaW5nIDUtbGV2ZWwgcGFnZS10YWJsZSBvbiBWVEQgJWRcbiIs DQo+ID4gVnRkSW5kZXgpKTsNCj4gPiArICAgICAgICAgIEV4dENvbnRleHRFbnRyeS0+Qml0cy5B ZGRyZXNzV2lkdGggPSAweDM7DQo+ID4gKyAgICAgICAgICBtVnRkVW5pdEluZm9ybWF0aW9uW1Z0 ZEluZGV4XS5JczVMZXZlbFBhZ2luZyA9IFRSVUU7DQo+ID4gKyAgICAgICAgfSBlbHNlIHsNCj4g PiArICAgICAgICAgIERFQlVHKChERUJVR19FUlJPUiwgIlVzaW5nIDQtbGV2ZWwgcGFnZS10YWJs ZSBvbiBWVEQgJWRcbiIsDQo+ID4gVnRkSW5kZXgpKTsNCj4gPiArICAgICAgICAgIEV4dENvbnRl eHRFbnRyeS0+Qml0cy5BZGRyZXNzV2lkdGggPSAweDI7DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsg ICAgICB9DQo+ID4gKyAgICB9IGVsc2UgaWYgKChtVnRkVW5pdEluZm9ybWF0aW9uW1Z0ZEluZGV4 XS5DYXBSZWcuQml0cy5TQUdBVyAmDQo+ID4gKyBCSVQyKSAhPQ0KPiA+IDApIHsNCj4gPiArICAg ICAgREVCVUcoKERFQlVHX0VSUk9SLCAiVXNpbmcgNC1sZXZlbCBwYWdlLXRhYmxlIG9uIFZURCAl ZFxuIiwNCj4gPiBWdGRJbmRleCkpOw0KPiA+ICsgICAgICBFeHRDb250ZXh0RW50cnktPkJpdHMu QWRkcmVzc1dpZHRoID0gMHgyOw0KPiA+ICsgICAgfSBlbHNlIHsNCj4gPiArICAgICAgREVCVUco KERFQlVHX0VSUk9SLCAiISEhISBQYWdlLXRhYmxlIHR5cGUgaXMgbm90IHN1cHBvcnRlZCBvbg0K PiA+IFZURCAlZCAhISEhXG4iLCBWdGRJbmRleCkpOw0KPiA+ICAgICAgICByZXR1cm4gRUZJX1VO U1VQUE9SVEVEOw0KPiA+ICAgICAgfQ0KPiA+IC0gICAgRXh0Q29udGV4dEVudHJ5LT5CaXRzLkFk ZHJlc3NXaWR0aCA9IDB4MjsNCj4gPiAgICB9DQo+ID4NCj4gPiAgICBGbHVzaFBhZ2VUYWJsZU1l bW9yeSAoVnRkSW5kZXgsDQo+ID4gKFVJTlROKW1WdGRVbml0SW5mb3JtYXRpb25bVnRkSW5kZXhd LkV4dFJvb3RFbnRyeVRhYmxlLA0KPiA+IEVGSV9QQUdFU19UT19TSVpFKEVudHJ5VGFibGVQYWdl cykpOw0KPiA+IEBAIC05MywxMSArMTE0LDEzIEBAIENyZWF0ZUV4dENvbnRleHRFbnRyeSAoDQo+ ID4gIC8qKg0KPiA+ICAgIER1bXAgRE1BUiBleHRlbmRlZCBjb250ZXh0IGVudHJ5IHRhYmxlLg0K PiA+DQo+ID4gLSAgQHBhcmFtW2luXSAgRXh0Um9vdEVudHJ5IERNQVIgZXh0ZW5kZWQgcm9vdCBl bnRyeS4NCj4gPiArICBAcGFyYW1baW5dICBFeHRSb290RW50cnkgICAgRE1BUiBleHRlbmRlZCBy b290IGVudHJ5Lg0KPiA+ICsgIEBwYXJhbVtpbl0gIElzNUxldmVsUGFnaW5nICBJZiBpdCBpcyB0 aGUgNSBsZXZlbCBwYWdpbmcuDQo+ID4gICoqLw0KPiA+ICBWT0lEDQo+ID4gIER1bXBEbWFyRXh0 Q29udGV4dEVudHJ5VGFibGUgKA0KPiA+IC0gIElOIFZURF9FWFRfUk9PVF9FTlRSWSAqRXh0Um9v dEVudHJ5DQo+ID4gKyAgSU4gVlREX0VYVF9ST09UX0VOVFJZICpFeHRSb290RW50cnksICBJTiBC T09MRUFOIElzNUxldmVsUGFnaW5nDQo+ID4gICAgKQ0KPiA+ICB7DQo+ID4gICAgVUlOVE4gICAg ICAgICAgICAgICAgIEluZGV4Ow0KPiA+IEBAIC0xMjcsNyArMTUwLDcgQEAgRHVtcERtYXJFeHRD b250ZXh0RW50cnlUYWJsZSAoDQo+ID4gICAgICAgIGlmIChFeHRDb250ZXh0RW50cnlbSW5kZXgy XS5CaXRzLlByZXNlbnQgPT0gMCkgew0KPiA+ICAgICAgICAgIGNvbnRpbnVlOw0KPiA+ICAgICAg ICB9DQo+ID4gLSAgICAgIER1bXBTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5ICgoVk9JRA0KPiA+ICop KFVJTlROKVZURF82NEJJVFNfQUREUkVTUyhFeHRDb250ZXh0RW50cnlbSW5kZXgyXS5CaXRzLlNl Y29uZExldmVsUGENCj4gPiBnZVRyYW5zbGF0aW9uUG9pbnRlckxvLA0KPiA+IEV4dENvbnRleHRF bnRyeVtJbmRleDJdLkJpdHMuU2Vjb25kTGV2ZWxQYWdlVHJhbnNsYXRpb25Qb2ludGVySGkpKTsN Cj4gPiArICAgICAgRHVtcFNlY29uZExldmVsUGFnaW5nRW50cnkgKChWT0lEDQo+ID4gKikoVUlO VE4pVlREXzY0QklUU19BRERSRVNTKEV4dENvbnRleHRFbnRyeVtJbmRleDJdLkJpdHMuU2Vjb25k TGV2ZWxQYQ0KPiA+IGdlVHJhbnNsYXRpb25Qb2ludGVyTG8sDQo+ID4gRXh0Q29udGV4dEVudHJ5 W0luZGV4Ml0uQml0cy5TZWNvbmRMZXZlbFBhZ2VUcmFuc2xhdGlvblBvaW50ZXJIaSksDQo+ID4g SXM1TGV2ZWxQYWdpbmcpOw0KPiA+ICAgICAgfQ0KPiA+DQo+ID4gICAgICBpZiAoRXh0Um9vdEVu dHJ5W0luZGV4XS5CaXRzLlVwcGVyUHJlc2VudCA9PSAwKSB7IGRpZmYgLS1naXQNCj4gPiBhL1Np bGljb24vSW50ZWwvSW50ZWxTaWxpY29uUGtnL0ZlYXR1cmUvVlRkL0ludGVsVlRkRHhlL1Z0ZFJl Zy5jDQo+ID4gYi9TaWxpY29uL0ludGVsL0ludGVsU2lsaWNvblBrZy9GZWF0dXJlL1ZUZC9JbnRl bFZUZER4ZS9WdGRSZWcuYw0KPiA+IGluZGV4IDY5OTYzOWJhLi42ODZkMjM1ZiAxMDA2NDQNCj4g PiAtLS0gYS9TaWxpY29uL0ludGVsL0ludGVsU2lsaWNvblBrZy9GZWF0dXJlL1ZUZC9JbnRlbFZU ZER4ZS9WdGRSZWcuYw0KPiA+ICsrKyBiL1NpbGljb24vSW50ZWwvSW50ZWxTaWxpY29uUGtnL0Zl YXR1cmUvVlRkL0ludGVsVlRkRHhlL1Z0ZFJlZy5jDQo+ID4gQEAgLTE3NCw4ICsxNzQsMTQgQEAg UHJlcGFyZVZ0ZENvbmZpZyAoDQo+ID4gICAgICBpZiAoKG1WdGRVbml0SW5mb3JtYXRpb25bSW5k ZXhdLkNhcFJlZy5CaXRzLlNMTFBTICYgQklUMCkgPT0gMCkgew0KPiA+ICAgICAgICBERUJVRygo REVCVUdfV0FSTiwgIiEhISEgMk1CIHN1cGVyIHBhZ2UgaXMgbm90IHN1cHBvcnRlZCBvbiBWVEQN Cj4gPiAlZCAhISEhXG4iLCBJbmRleCkpOw0KPiA+ICAgICAgfQ0KPiA+IC0gICAgaWYgKChtVnRk VW5pdEluZm9ybWF0aW9uW0luZGV4XS5DYXBSZWcuQml0cy5TQUdBVyAmIEJJVDIpID09IDApIHsN Cj4gPiAtICAgICAgREVCVUcoKERFQlVHX0VSUk9SLCAiISEhISA0LWxldmVsIHBhZ2UtdGFibGUg aXMgbm90IHN1cHBvcnRlZCBvbg0KPiA+IFZURCAlZCAhISEhXG4iLCBJbmRleCkpOw0KPiA+ICsg ICAgaWYgKChtVnRkVW5pdEluZm9ybWF0aW9uW0luZGV4XS5DYXBSZWcuQml0cy5TQUdBVyAmIEJJ VDMpICE9IDApIHsNCj4gPiArICAgICAgREVCVUcoKERFQlVHX0lORk8sICJTdXBwb3J0IDUtbGV2 ZWwgcGFnZS10YWJsZSBvbiBWVEQgJWRcbiIsDQo+ID4gSW5kZXgpKTsNCj4gPiArICAgIH0NCj4g PiArICAgIGlmICgobVZ0ZFVuaXRJbmZvcm1hdGlvbltJbmRleF0uQ2FwUmVnLkJpdHMuU0FHQVcg JiBCSVQyKSAhPSAwKSB7DQo+ID4gKyAgICAgIERFQlVHKChERUJVR19JTkZPLCAiU3VwcG9ydCA0 LWxldmVsIHBhZ2UtdGFibGUgb24gVlREICVkXG4iLA0KPiA+IEluZGV4KSk7DQo+ID4gKyAgICB9 DQo+ID4gKyAgICBpZiAoKG1WdGRVbml0SW5mb3JtYXRpb25bSW5kZXhdLkNhcFJlZy5CaXRzLlNB R0FXICYgKEJJVDMgfA0KPiA+ICsgQklUMikpID09IDApDQo+ID4gew0KPiA+ICsgICAgICBERUJV RygoREVCVUdfRVJST1IsICIhISEhIFBhZ2UtdGFibGUgdHlwZSAweCVYIGlzIG5vdCBzdXBwb3J0 ZWQNCj4gPiArIG9uDQo+ID4gVlREICVkICEhISFcbiIsIEluZGV4LCBtVnRkVW5pdEluZm9ybWF0 aW9uW0luZGV4XS5DYXBSZWcuQml0cy5TQUdBVykpOw0KPiA+ICAgICAgICByZXR1cm4gOw0KPiA+ ICAgICAgfQ0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL1NpbGljb24vSW50ZWwvSW50ZWxTaWxpY29u UGtnL0ludGVsU2lsaWNvblBrZy5kZWMNCj4gPiBiL1NpbGljb24vSW50ZWwvSW50ZWxTaWxpY29u UGtnL0ludGVsU2lsaWNvblBrZy5kZWMNCj4gPiBpbmRleCAyODQ4MjBhZi4uOGYxZWRmZTIgMTAw NjQ0DQo+ID4gLS0tIGEvU2lsaWNvbi9JbnRlbC9JbnRlbFNpbGljb25Qa2cvSW50ZWxTaWxpY29u UGtnLmRlYw0KPiA+ICsrKyBiL1NpbGljb24vSW50ZWwvSW50ZWxTaWxpY29uUGtnL0ludGVsU2ls aWNvblBrZy5kZWMNCj4gPiBAQCAtOTUsNiArOTUsOSBAQA0KPiA+ICAgICMgIEJJVDA6IEVuYWJs ZSBJT01NVSBkdXJpbmcgYm9vdCAoSWYgRE1BUiB0YWJsZSBpcyBpbnN0YWxsZWQgaW4NCj4gPiBE WEUuIElmIFZURF9JTkZPX1BQSSBpcyBpbnN0YWxsZWQgaW4gUEVJLikNCj4gPiAgICAjICBCSVQx OiBFbmFibGUgSU9NTVUgd2hlbiB0cmFuc2ZlciBjb250cm9sIHRvIE9TIChFeGl0Qm9vdFNlcnZp Y2UNCj4gPiBpbiBub3JtYWwgYm9vdC4gRW5kT2ZQRUkgaW4gUzMpDQo+ID4gICAgIyAgQklUMjog Rm9yY2Ugbm8gSU9NTVUgYWNjZXNzIGF0dHJpYnV0ZSByZXF1ZXN0IHJlY29yZGluZyBiZWZvcmUN Cj4gPiBETUFSIHRhYmxlIGlzIGluc3RhbGxlZC4NCj4gPiArICAjICBCSVQzOiBGb3JjZSB0byB1 c2UgNCBsZXZlbCBwYWdpbmcuDQo+ID4gKyAgIyAgQklUNDogSWYgaW9tbXUgc3VwcG9ydCA1IGxl dmVsIHBhZ2luZywgZm9yY2UgdG8gdXNlIDUgbGV2ZWwgcGFnaW5nLg0KPiA+ICsgICMgICAgKElm IGJvdGggQklUMyBhbmQgQklUNCBhcmUgc2V0LCBmb3JjZSB0byB1c2UgNCBsZXZlbCBwYWdpbmcu KQ0KPiA+ICAgICMgQFByb21wdCBUaGUgcG9saWN5IGZvciBWVGQgZHJpdmVyIGJlaGF2aW9yLg0K PiA+DQo+ID4gZ0ludGVsU2lsaWNvblBrZ1Rva2VuU3BhY2VHdWlkLlBjZFZUZFBvbGljeVByb3Bl cnR5TWFza3wxfFVJTlQ4fDB4MDAwDQo+ID4gMDAwMDINCj4gPg0KPiA+IC0tDQo+ID4gMi4xNi4y LndpbmRvd3MuMQ0KDQo= --_002_CY4PR11MB1928B26C479E7858A79D6144E1E10CY4PR11MB1928namp_ Content-Type: application/octet-stream; name="0001-IntelSiliconPkg-VTd-Add-iommu-5-level-paging-support.patch" Content-Description: 0001-IntelSiliconPkg-VTd-Add-iommu-5-level-paging-support.patch Content-Disposition: attachment; filename="0001-IntelSiliconPkg-VTd-Add-iommu-5-level-paging-support.patch"; size=36592; creation-date="Wed, 18 Nov 2020 02:24:00 GMT"; modification-date="Wed, 18 Nov 2020 02:24:00 GMT" Content-Transfer-Encoding: base64 RnJvbSAyYmM5MTdiOWY1ZWIwZjMyMWQ4MjQyODY5Mjc1MzViN2EzMTdiYzJmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTaGVuZyBXZWkgPHcuc2hlbmdAaW50ZWwuY29tPgpEYXRlOiBU aHUsIDIyIE9jdCAyMDIwIDA5OjUyOjI5ICswODAwClN1YmplY3Q6IFtQQVRDSCB2M10gSW50ZWxT aWxpY29uUGtnL1ZUZDogQWRkIGlvbW11IDUgbGV2ZWwgcGFnaW5nIHN1cHBvcnQKClN1cHBvcnQg aW9tbXUgNSBsZXZlbCBwYWdpbmcgZm9yIHRyYW5zbGF0aW9uIHRhYmxlLgoKUkVGOiBodHRwczov L2J1Z3ppbGxhLnRpYW5vY29yZS5vcmcvc2hvd19idWcuY2dpP2lkPTMwNjcKClNpZ25lZC1vZmYt Ynk6IFNoZW5nIFdlaSA8dy5zaGVuZ0BpbnRlbC5jb20+CkNjOiBSYXkgTmkgPHJheS5uaUBpbnRl bC5jb20+CkNjOiBSYW5nYXNhaSBWIENoYWdhbnR5IDxyYW5nYXNhaS52LmNoYWdhbnR5QGludGVs LmNvbT4KQ2M6IEppZXdlbiBZYW8gPGppZXdlbi55YW9AaW50ZWwuY29tPgpDYzogSmVubnkgSHVh bmcgPGplbm55Lmh1YW5nQGludGVsLmNvbT4KLS0tCiAuLi4vRmVhdHVyZS9WVGQvSW50ZWxWVGRE eGUvRG1hUHJvdGVjdGlvbi5jICAgICAgICB8ICAgNCArLQogLi4uL0ZlYXR1cmUvVlRkL0ludGVs VlRkRHhlL0RtYVByb3RlY3Rpb24uaCAgICAgICAgfCAgMTkgKy0KIC4uLi9GZWF0dXJlL1ZUZC9J bnRlbFZUZER4ZS9UcmFuc2xhdGlvblRhYmxlLmMgICAgIHwgMjg3ICsrKysrKysrKysrKysrKy0t LS0tLQogLi4uL0ZlYXR1cmUvVlRkL0ludGVsVlRkRHhlL1RyYW5zbGF0aW9uVGFibGVFeC5jICAg fCAgMzUgKystCiAuLi4vRmVhdHVyZS9WVGQvSW50ZWxWVGREeGUvVnRkUmVnLmMgICAgICAgICAg ICAgICB8ICAxMCArLQogU2lsaWNvbi9JbnRlbC9JbnRlbFNpbGljb25Qa2cvSW50ZWxTaWxpY29u UGtnLmRlYyAgfCAgIDMgKwogNiBmaWxlcyBjaGFuZ2VkLCAyNTggaW5zZXJ0aW9ucygrKSwgMTAw IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1NpbGljb24vSW50ZWwvSW50ZWxTaWxpY29uUGtn L0ZlYXR1cmUvVlRkL0ludGVsVlRkRHhlL0RtYVByb3RlY3Rpb24uYyBiL1NpbGljb24vSW50ZWwv SW50ZWxTaWxpY29uUGtnL0ZlYXR1cmUvVlRkL0ludGVsVlRkRHhlL0RtYVByb3RlY3Rpb24uYwpp bmRleCA5YjYxMzVlZi4uNjI4NTY1ZWUgMTAwNjQ0Ci0tLSBhL1NpbGljb24vSW50ZWwvSW50ZWxT aWxpY29uUGtnL0ZlYXR1cmUvVlRkL0ludGVsVlRkRHhlL0RtYVByb3RlY3Rpb24uYworKysgYi9T aWxpY29uL0ludGVsL0ludGVsU2lsaWNvblBrZy9GZWF0dXJlL1ZUZC9JbnRlbFZUZER4ZS9EbWFQ cm90ZWN0aW9uLmMKQEAgLTUyMywxMCArNTIzLDEwIEBAIFNldHVwVnRkICgKICAgZm9yIChJbmRl eCA9IDA7IEluZGV4IDwgbVZ0ZFVuaXROdW1iZXI7IEluZGV4KyspIHsNCiAgICAgREVCVUcgKChE RUJVR19JTkZPLCJWVEQgVW5pdCAlZCAoU2VnbWVudDogJTA0eClcbiIsIEluZGV4LCBtVnRkVW5p dEluZm9ybWF0aW9uW0luZGV4XS5TZWdtZW50KSk7DQogICAgIGlmIChtVnRkVW5pdEluZm9ybWF0 aW9uW0luZGV4XS5FeHRSb290RW50cnlUYWJsZSAhPSBOVUxMKSB7DQotICAgICAgRHVtcERtYXJF eHRDb250ZXh0RW50cnlUYWJsZSAobVZ0ZFVuaXRJbmZvcm1hdGlvbltJbmRleF0uRXh0Um9vdEVu dHJ5VGFibGUpOw0KKyAgICAgIER1bXBEbWFyRXh0Q29udGV4dEVudHJ5VGFibGUgKG1WdGRVbml0 SW5mb3JtYXRpb25bSW5kZXhdLkV4dFJvb3RFbnRyeVRhYmxlLCBtVnRkVW5pdEluZm9ybWF0aW9u W0luZGV4XS5JczVMZXZlbFBhZ2luZyk7DQogICAgIH0NCiAgICAgaWYgKG1WdGRVbml0SW5mb3Jt YXRpb25bSW5kZXhdLlJvb3RFbnRyeVRhYmxlICE9IE5VTEwpIHsNCi0gICAgICBEdW1wRG1hckNv bnRleHRFbnRyeVRhYmxlIChtVnRkVW5pdEluZm9ybWF0aW9uW0luZGV4XS5Sb290RW50cnlUYWJs ZSk7DQorICAgICAgRHVtcERtYXJDb250ZXh0RW50cnlUYWJsZSAobVZ0ZFVuaXRJbmZvcm1hdGlv bltJbmRleF0uUm9vdEVudHJ5VGFibGUsIG1WdGRVbml0SW5mb3JtYXRpb25bSW5kZXhdLklzNUxl dmVsUGFnaW5nKTsNCiAgICAgfQ0KICAgfQ0KIA0KZGlmZiAtLWdpdCBhL1NpbGljb24vSW50ZWwv SW50ZWxTaWxpY29uUGtnL0ZlYXR1cmUvVlRkL0ludGVsVlRkRHhlL0RtYVByb3RlY3Rpb24uaCBi L1NpbGljb24vSW50ZWwvSW50ZWxTaWxpY29uUGtnL0ZlYXR1cmUvVlRkL0ludGVsVlRkRHhlL0Rt YVByb3RlY3Rpb24uaAppbmRleCBhMzMzMWRiOC4uZjY0MWNlYTAgMTAwNjQ0Ci0tLSBhL1NpbGlj b24vSW50ZWwvSW50ZWxTaWxpY29uUGtnL0ZlYXR1cmUvVlRkL0ludGVsVlRkRHhlL0RtYVByb3Rl Y3Rpb24uaAorKysgYi9TaWxpY29uL0ludGVsL0ludGVsU2lsaWNvblBrZy9GZWF0dXJlL1ZUZC9J bnRlbFZUZER4ZS9EbWFQcm90ZWN0aW9uLmgKQEAgLTc3LDYgKzc3LDcgQEAgdHlwZWRlZiBzdHJ1 Y3QgewogICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNEaXJ0eUNvbnRleHQ7 DQogICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNEaXJ0eVBhZ2VzOw0KICAg UENJX0RFVklDRV9JTkZPUk1BVElPTiAgICAgICAgICAgUGNpRGV2aWNlSW5mbzsNCisgIEJPT0xF QU4gICAgICAgICAgICAgICAgICAgICAgICAgIElzNUxldmVsUGFnaW5nOw0KIH0gVlREX1VOSVRf SU5GT1JNQVRJT047DQogDQogLy8NCkBAIC0zNzUsMzEgKzM3NiwzNyBAQCBQYXJzZURtYXJBY3Bp VGFibGVSbXJyICgKIC8qKg0KICAgRHVtcCBETUFSIGNvbnRleHQgZW50cnkgdGFibGUuDQogDQot ICBAcGFyYW1baW5dICBSb290RW50cnkgRE1BUiByb290IGVudHJ5Lg0KKyAgQHBhcmFtW2luXSAg Um9vdEVudHJ5ICAgICAgIERNQVIgcm9vdCBlbnRyeS4NCisgIEBwYXJhbVtpbl0gIElzNUxldmVs UGFnaW5nICBJZiBpdCBpcyB0aGUgNSBsZXZlbCBwYWdpbmcuDQogKiovDQogVk9JRA0KIER1bXBE bWFyQ29udGV4dEVudHJ5VGFibGUgKA0KLSAgSU4gVlREX1JPT1RfRU5UUlkgKlJvb3RFbnRyeQ0K KyAgSU4gVlREX1JPT1RfRU5UUlkgKlJvb3RFbnRyeSwNCisgIElOIEJPT0xFQU4gSXM1TGV2ZWxQ YWdpbmcNCiAgICk7DQogDQogLyoqDQogICBEdW1wIERNQVIgZXh0ZW5kZWQgY29udGV4dCBlbnRy eSB0YWJsZS4NCiANCi0gIEBwYXJhbVtpbl0gIEV4dFJvb3RFbnRyeSBETUFSIGV4dGVuZGVkIHJv b3QgZW50cnkuDQorICBAcGFyYW1baW5dICBFeHRSb290RW50cnkgICAgRE1BUiBleHRlbmRlZCBy b290IGVudHJ5Lg0KKyAgQHBhcmFtW2luXSAgSXM1TGV2ZWxQYWdpbmcgIElmIGl0IGlzIHRoZSA1 IGxldmVsIHBhZ2luZy4NCiAqKi8NCiBWT0lEDQogRHVtcERtYXJFeHRDb250ZXh0RW50cnlUYWJs ZSAoDQotICBJTiBWVERfRVhUX1JPT1RfRU5UUlkgKkV4dFJvb3RFbnRyeQ0KKyAgSU4gVlREX0VY VF9ST09UX0VOVFJZICpFeHRSb290RW50cnksDQorICBJTiBCT09MRUFOIElzNUxldmVsUGFnaW5n DQogICApOw0KIA0KIC8qKg0KICAgRHVtcCBETUFSIHNlY29uZCBsZXZlbCBwYWdpbmcgZW50cnku DQogDQotICBAcGFyYW1baW5dICBTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5IFRoZSBzZWNvbmQgbGV2 ZWwgcGFnaW5nIGVudHJ5Lg0KKyAgQHBhcmFtW2luXSAgU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSAg VGhlIHNlY29uZCBsZXZlbCBwYWdpbmcgZW50cnkuDQorICBAcGFyYW1baW5dICBJczVMZXZlbFBh Z2luZyAgICAgICAgICBJZiBpdCBpcyB0aGUgNSBsZXZlbCBwYWdpbmcuDQogKiovDQogVk9JRA0K IER1bXBTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5ICgNCi0gIElOIFZPSUQgKlNlY29uZExldmVsUGFn aW5nRW50cnkNCisgIElOIFZPSUQgKlNlY29uZExldmVsUGFnaW5nRW50cnksDQorICBJTiBCT09M RUFOIElzNUxldmVsUGFnaW5nDQogICApOw0KIA0KIC8qKg0KZGlmZiAtLWdpdCBhL1NpbGljb24v SW50ZWwvSW50ZWxTaWxpY29uUGtnL0ZlYXR1cmUvVlRkL0ludGVsVlRkRHhlL1RyYW5zbGF0aW9u VGFibGUuYyBiL1NpbGljb24vSW50ZWwvSW50ZWxTaWxpY29uUGtnL0ZlYXR1cmUvVlRkL0ludGVs VlRkRHhlL1RyYW5zbGF0aW9uVGFibGUuYwppbmRleCAyMDFkNjYzZC4uY2I1OTg2MGEgMTAwNjQ0 Ci0tLSBhL1NpbGljb24vSW50ZWwvSW50ZWxTaWxpY29uUGtnL0ZlYXR1cmUvVlRkL0ludGVsVlRk RHhlL1RyYW5zbGF0aW9uVGFibGUuYworKysgYi9TaWxpY29uL0ludGVsL0ludGVsU2lsaWNvblBr Zy9GZWF0dXJlL1ZUZC9JbnRlbFZUZER4ZS9UcmFuc2xhdGlvblRhYmxlLmMKQEAgLTEyOCwxMSAr MTI4LDMyIEBAIENyZWF0ZUNvbnRleHRFbnRyeSAoCiANCiAgICAgREVCVUcgKChERUJVR19JTkZP LCJTb3VyY2U6IFMlMDR4IEIlMDJ4IEQlMDJ4IEYlMDJ4XG4iLCBtVnRkVW5pdEluZm9ybWF0aW9u W1Z0ZEluZGV4XS5TZWdtZW50LCBTb3VyY2VJZC5CaXRzLkJ1cywgU291cmNlSWQuQml0cy5EZXZp Y2UsIFNvdXJjZUlkLkJpdHMuRnVuY3Rpb24pKTsNCiANCi0gICAgaWYgKChtVnRkVW5pdEluZm9y bWF0aW9uW1Z0ZEluZGV4XS5DYXBSZWcuQml0cy5TQUdBVyAmIEJJVDIpID09IDApIHsNCi0gICAg ICBERUJVRygoREVCVUdfRVJST1IsICIhISEhIDQtbGV2ZWwgcGFnZS10YWJsZSBpcyBub3Qgc3Vw cG9ydGVkIG9uIFZURCAlZCAhISEhXG4iLCBWdGRJbmRleCkpOw0KKyAgICBtVnRkVW5pdEluZm9y bWF0aW9uW1Z0ZEluZGV4XS5JczVMZXZlbFBhZ2luZyA9IEZBTFNFOw0KKyAgICBpZiAoKG1WdGRV bml0SW5mb3JtYXRpb25bVnRkSW5kZXhdLkNhcFJlZy5CaXRzLlNBR0FXICYgQklUMykgIT0gMCkg ew0KKyAgICAgIGlmICgoUGNkR2V0OChQY2RWVGRQb2xpY3lQcm9wZXJ0eU1hc2spICYgQklUMykg IT0gMCkgew0KKyAgICAgICAgREVCVUcoKERFQlVHX0VSUk9SLCAiRm9yY2UgdG8gdXNlIDQtbGV2 ZWwgcGFnZS10YWJsZSBvbiBWVEQgJWRcbiIsIFZ0ZEluZGV4KSk7DQorICAgICAgICBDb250ZXh0 RW50cnktPkJpdHMuQWRkcmVzc1dpZHRoID0gMHgyOw0KKyAgICAgIH0gaWYgKChQY2RHZXQ4KFBj ZFZUZFBvbGljeVByb3BlcnR5TWFzaykgJiBCSVQ0KSAhPSAwKSB7DQorICAgICAgICBERUJVRygo REVCVUdfRVJST1IsICJGb3JjZSB0byB1c2UgNS1sZXZlbCBwYWdlLXRhYmxlIG9uIFZURCAlZFxu IiwgVnRkSW5kZXgpKTsNCisgICAgICAgIENvbnRleHRFbnRyeS0+Qml0cy5BZGRyZXNzV2lkdGgg PSAweDM7DQorICAgICAgICBtVnRkVW5pdEluZm9ybWF0aW9uW1Z0ZEluZGV4XS5JczVMZXZlbFBh Z2luZyA9IFRSVUU7DQorICAgICAgfSBlbHNlIHsNCisgICAgICAgIGlmIChtQWNwaURtYXJUYWJs ZS0+SG9zdEFkZHJlc3NXaWR0aCA+IDQ4KSB7DQorICAgICAgICAgIERFQlVHKChERUJVR19FUlJP UiwgIlVzaW5nIDUtbGV2ZWwgcGFnZS10YWJsZSBvbiBWVEQgJWRcbiIsIFZ0ZEluZGV4KSk7DQor ICAgICAgICAgIENvbnRleHRFbnRyeS0+Qml0cy5BZGRyZXNzV2lkdGggPSAweDM7DQorICAgICAg ICAgIG1WdGRVbml0SW5mb3JtYXRpb25bVnRkSW5kZXhdLklzNUxldmVsUGFnaW5nID0gVFJVRTsN CisgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgIERFQlVHKChERUJVR19FUlJPUiwgIlVzaW5n IDQtbGV2ZWwgcGFnZS10YWJsZSBvbiBWVEQgJWRcbiIsIFZ0ZEluZGV4KSk7DQorICAgICAgICAg IENvbnRleHRFbnRyeS0+Qml0cy5BZGRyZXNzV2lkdGggPSAweDI7DQorICAgICAgICB9DQorICAg ICAgfQ0KKyAgICB9IGVsc2UgaWYgKChtVnRkVW5pdEluZm9ybWF0aW9uW1Z0ZEluZGV4XS5DYXBS ZWcuQml0cy5TQUdBVyAmIEJJVDIpICE9IDApIHsNCisgICAgICBERUJVRygoREVCVUdfRVJST1Is ICJVc2luZyA0LWxldmVsIHBhZ2UtdGFibGUgb24gVlREICVkXG4iLCBWdGRJbmRleCkpOw0KKyAg ICAgIENvbnRleHRFbnRyeS0+Qml0cy5BZGRyZXNzV2lkdGggPSAweDI7DQorICAgIH0gZWxzZSB7 DQorICAgICAgREVCVUcoKERFQlVHX0VSUk9SLCAiISEhISBQYWdlLXRhYmxlIHR5cGUgaXMgbm90 IHN1cHBvcnRlZCBvbiBWVEQgJWQgISEhIVxuIiwgVnRkSW5kZXgpKTsNCiAgICAgICByZXR1cm4g RUZJX1VOU1VQUE9SVEVEOw0KICAgICB9DQotICAgIENvbnRleHRFbnRyeS0+Qml0cy5BZGRyZXNz V2lkdGggPSAweDI7DQogICB9DQogDQogICBGbHVzaFBhZ2VUYWJsZU1lbW9yeSAoVnRkSW5kZXgs IChVSU5UTiltVnRkVW5pdEluZm9ybWF0aW9uW1Z0ZEluZGV4XS5Sb290RW50cnlUYWJsZSwgRUZJ X1BBR0VTX1RPX1NJWkUoRW50cnlUYWJsZVBhZ2VzKSk7DQpAQCAtMTQ4LDYgKzE2OSw3IEBAIENy ZWF0ZUNvbnRleHRFbnRyeSAoCiAgIEBwYXJhbVtpbl0gIE1lbW9yeUJhc2UgICAgICAgICAgICAg ICAgICBUaGUgYmFzZSBvZiB0aGUgbWVtb3J5Lg0KICAgQHBhcmFtW2luXSAgTWVtb3J5TGltaXQg ICAgICAgICAgICAgICAgIFRoZSBsaW1pdCBvZiB0aGUgbWVtb3J5Lg0KICAgQHBhcmFtW2luXSAg SW9NbXVBY2Nlc3MgICAgICAgICAgICAgICAgIFRoZSBJT01NVSBhY2Nlc3MuDQorICBAcGFyYW1b aW5dICBJczVMZXZlbFBhZ2luZyAgICAgICAgICAgICAgSWYgaXQgaXMgdGhlIDUgbGV2ZWwgcGFn aW5nLg0KIA0KICAgQHJldHVybiBUaGUgc2Vjb25kIGxldmVsIHBhZ2luZyBlbnRyeS4NCiAqKi8N CkBAIC0xNTcsMTYgKzE3OSwyMyBAQCBDcmVhdGVTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5VGFibGUg KAogICBJTiBWVERfU0VDT05EX0xFVkVMX1BBR0lOR19FTlRSWSAqU2Vjb25kTGV2ZWxQYWdpbmdF bnRyeSwNCiAgIElOIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgIE1lbW9yeUJhc2UsDQog ICBJTiBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgICBNZW1vcnlMaW1pdCwNCi0gIElOIFVJ TlQ2NCAgICAgICAgICAgICAgICAgICAgICAgIElvTW11QWNjZXNzDQorICBJTiBVSU5UNjQgICAg ICAgICAgICAgICAgICAgICAgICBJb01tdUFjY2VzcywNCisgIElOIEJPT0xFQU4gICAgICAgICAg ICAgICAgICAgICAgIElzNUxldmVsUGFnaW5nDQogICApDQogew0KKyAgVUlOVE4gICAgICAgICAg ICAgICAgICAgICAgICAgIEluZGV4NTsNCiAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAg ICBJbmRleDQ7DQogICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXgzOw0KICAg VUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4MjsNCisgIFVJTlROICAgICAgICAg ICAgICAgICAgICAgICAgICBMdmw1U3RhcnQ7DQorICBVSU5UTiAgICAgICAgICAgICAgICAgICAg ICAgICAgTHZsNUVuZDsNCisgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICBMdmw0UGFn ZXNTdGFydDsNCisgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICBMdmw0UGFnZXNFbmQ7 DQogICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgTHZsNFN0YXJ0Ow0KICAgVUlOVE4g ICAgICAgICAgICAgICAgICAgICAgICAgIEx2bDRFbmQ7DQogICBVSU5UTiAgICAgICAgICAgICAg ICAgICAgICAgICAgTHZsM1N0YXJ0Ow0KICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAg IEx2bDNFbmQ7DQorICBWVERfU0VDT05EX0xFVkVMX1BBR0lOR19FTlRSWSAgKkx2bDVQdEVudHJ5 Ow0KICAgVlREX1NFQ09ORF9MRVZFTF9QQUdJTkdfRU5UUlkgICpMdmw0UHRFbnRyeTsNCiAgIFZU RF9TRUNPTkRfTEVWRUxfUEFHSU5HX0VOVFJZICAqTHZsM1B0RW50cnk7DQogICBWVERfU0VDT05E X0xFVkVMX1BBR0lOR19FTlRSWSAgKkx2bDJQdEVudHJ5Ow0KQEAgLTE4NCw3ICsyMTMsNyBAQCBD cmVhdGVTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5VGFibGUgKAogICBpZiAoU2Vjb25kTGV2ZWxQYWdp bmdFbnRyeSA9PSBOVUxMKSB7DQogICAgIFNlY29uZExldmVsUGFnaW5nRW50cnkgPSBBbGxvY2F0 ZVplcm9QYWdlcyAoMSk7DQogICAgIGlmIChTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5ID09IE5VTEwp IHsNCi0gICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCJDb3VsZCBub3QgQWxsb2MgTFZMNCBQVC4g XG4iKSk7DQorICAgICAgREVCVUcgKChERUJVR19FUlJPUiwiQ291bGQgbm90IEFsbG9jIExWTDQg b3IgTFZMNSBQVC4gXG4iKSk7DQogICAgICAgcmV0dXJuIE5VTEw7DQogICAgIH0NCiAgICAgRmx1 c2hQYWdlVGFibGVNZW1vcnkgKFZ0ZEluZGV4LCAoVUlOVE4pU2Vjb25kTGV2ZWxQYWdpbmdFbnRy eSwgRUZJX1BBR0VTX1RPX1NJWkUoMSkpOw0KQEAgLTE5Nyw2NiArMjI2LDEwOSBAQCBDcmVhdGVT ZWNvbmRMZXZlbFBhZ2luZ0VudHJ5VGFibGUgKAogICAgIHJldHVybiBTZWNvbmRMZXZlbFBhZ2lu Z0VudHJ5Ow0KICAgfQ0KIA0KLSAgTHZsNFN0YXJ0ID0gUlNoaWZ0VTY0IChCYXNlQWRkcmVzcywg MzkpICYgMHgxRkY7DQotICBMdmw0RW5kID0gUlNoaWZ0VTY0IChFbmRBZGRyZXNzIC0gMSwgMzkp ICYgMHgxRkY7DQorICBpZiAoSXM1TGV2ZWxQYWdpbmcpIHsNCisgICAgTHZsNVN0YXJ0ID0gUlNo aWZ0VTY0IChCYXNlQWRkcmVzcywgNDgpICYgMHgxRkY7DQorICAgIEx2bDVFbmQgPSBSU2hpZnRV NjQgKEVuZEFkZHJlc3MgLSAxLCA0OCkgJiAweDFGRjsNCisgICAgREVCVUcgKChERUJVR19JTkZP LCIgIEx2bDVTdGFydCAtIDB4JXgsIEx2bDVFbmQgLSAweCV4XG4iLCBMdmw1U3RhcnQsIEx2bDVF bmQpKTsNCiANCi0gIERFQlVHICgoREVCVUdfSU5GTywiICBMdmw0U3RhcnQgLSAweCV4LCBMdmw0 RW5kIC0gMHgleFxuIiwgTHZsNFN0YXJ0LCBMdmw0RW5kKSk7DQorICAgIEx2bDRTdGFydCA9IFJT aGlmdFU2NCAoQmFzZUFkZHJlc3MsIDM5KSAmIDB4MUZGOw0KKyAgICBMdmw0RW5kID0gUlNoaWZ0 VTY0IChFbmRBZGRyZXNzIC0gMSwgMzkpICYgMHgxRkY7DQogDQotICBMdmw0UHRFbnRyeSA9IChW VERfU0VDT05EX0xFVkVMX1BBR0lOR19FTlRSWSAqKVNlY29uZExldmVsUGFnaW5nRW50cnk7DQot ICBmb3IgKEluZGV4NCA9IEx2bDRTdGFydDsgSW5kZXg0IDw9IEx2bDRFbmQ7IEluZGV4NCsrKSB7 DQotICAgIGlmIChMdmw0UHRFbnRyeVtJbmRleDRdLlVpbnQ2NCA9PSAwKSB7DQotICAgICAgTHZs NFB0RW50cnlbSW5kZXg0XS5VaW50NjQgPSAoVUlOVDY0KShVSU5UTilBbGxvY2F0ZVplcm9QYWdl cyAoMSk7DQotICAgICAgaWYgKEx2bDRQdEVudHJ5W0luZGV4NF0uVWludDY0ID09IDApIHsNCi0g ICAgICAgIERFQlVHICgoREVCVUdfRVJST1IsIiEhISEhISBBTExPQ0FURSBMVkw0IFBBR0UgRkFJ TCAoMHgleCkhISEhISFcbiIsIEluZGV4NCkpOw0KLSAgICAgICAgQVNTRVJUKEZBTFNFKTsNCi0g ICAgICAgIHJldHVybiBOVUxMOw0KLSAgICAgIH0NCi0gICAgICBGbHVzaFBhZ2VUYWJsZU1lbW9y eSAoVnRkSW5kZXgsIChVSU5UTilMdmw0UHRFbnRyeVtJbmRleDRdLlVpbnQ2NCwgU0laRV80S0Ip Ow0KLSAgICAgIFNldFNlY29uZExldmVsUGFnaW5nRW50cnlBdHRyaWJ1dGUgKCZMdmw0UHRFbnRy eVtJbmRleDRdLCBFREtJSV9JT01NVV9BQ0NFU1NfUkVBRCB8IEVES0lJX0lPTU1VX0FDQ0VTU19X UklURSk7DQotICAgIH0NCisgICAgTHZsNFBhZ2VzU3RhcnQgPSAoTHZsNVN0YXJ0PDw5KSB8IEx2 bDRTdGFydDsNCisgICAgTHZsNFBhZ2VzRW5kID0gKEx2bDVFbmQ8PDkpIHwgTHZsNEVuZDsNCisg ICAgREVCVUcgKChERUJVR19JTkZPLCIgIEx2bDRQYWdlc1N0YXJ0IC0gMHgleCwgTHZsNFBhZ2Vz RW5kIC0gMHgleFxuIiwgTHZsNFBhZ2VzU3RhcnQsIEx2bDRQYWdlc0VuZCkpOw0KIA0KLSAgICBM dmwzU3RhcnQgPSBSU2hpZnRVNjQgKEJhc2VBZGRyZXNzLCAzMCkgJiAweDFGRjsNCi0gICAgaWYg KEFMSUdOX1ZBTFVFX0xPVyhCYXNlQWRkcmVzcyArIFNJWkVfMUdCLCBTSVpFXzFHQikgPD0gRW5k QWRkcmVzcykgew0KLSAgICAgIEx2bDNFbmQgPSBTSVpFXzRLQi9zaXplb2YoVlREX1NFQ09ORF9M RVZFTF9QQUdJTkdfRU5UUlkpIC0gMTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICBMdmwzRW5kID0g UlNoaWZ0VTY0IChFbmRBZGRyZXNzIC0gMSwgMzApICYgMHgxRkY7DQorICAgIEx2bDVQdEVudHJ5 ID0gKFZURF9TRUNPTkRfTEVWRUxfUEFHSU5HX0VOVFJZICopU2Vjb25kTGV2ZWxQYWdpbmdFbnRy eTsNCisgIH0gZWxzZSB7DQorICAgIEx2bDVTdGFydCA9IFJTaGlmdFU2NCAoQmFzZUFkZHJlc3Ms IDQ4KSAmIDB4MUZGOw0KKyAgICBMdmw1RW5kID0gTHZsNVN0YXJ0Ow0KKw0KKyAgICBMdmw0U3Rh cnQgPSBSU2hpZnRVNjQgKEJhc2VBZGRyZXNzLCAzOSkgJiAweDFGRjsNCisgICAgTHZsNEVuZCA9 IFJTaGlmdFU2NCAoRW5kQWRkcmVzcyAtIDEsIDM5KSAmIDB4MUZGOw0KKyAgICBERUJVRyAoKERF QlVHX0lORk8sIiAgTHZsNFN0YXJ0IC0gMHgleCwgTHZsNEVuZCAtIDB4JXhcbiIsIEx2bDRTdGFy dCwgTHZsNEVuZCkpOw0KKw0KKyAgICBMdmw0UHRFbnRyeSA9IChWVERfU0VDT05EX0xFVkVMX1BB R0lOR19FTlRSWSAqKVNlY29uZExldmVsUGFnaW5nRW50cnk7DQorICB9DQorDQorICBmb3IgKElu ZGV4NSA9IEx2bDVTdGFydDsgSW5kZXg1IDw9IEx2bDVFbmQ7IEluZGV4NSsrKSB7DQorICAgIGlm IChJczVMZXZlbFBhZ2luZykgew0KKyAgICAgIGlmIChMdmw1UHRFbnRyeVtJbmRleDVdLlVpbnQ2 NCA9PSAwKSB7DQorICAgICAgICBMdmw1UHRFbnRyeVtJbmRleDVdLlVpbnQ2NCA9IChVSU5UNjQp KFVJTlROKUFsbG9jYXRlWmVyb1BhZ2VzICgxKTsNCisgICAgICAgIGlmIChMdmw1UHRFbnRyeVtJ bmRleDVdLlVpbnQ2NCA9PSAwKSB7DQorICAgICAgICAgIERFQlVHICgoREVCVUdfRVJST1IsIiEh ISEhISBBTExPQ0FURSBMVkw0IFBBR0UgRkFJTCAoMHgleCkhISEhISFcbiIsIEluZGV4NSkpOw0K KyAgICAgICAgICBBU1NFUlQoRkFMU0UpOw0KKyAgICAgICAgICByZXR1cm4gTlVMTDsNCisgICAg ICAgIH0NCisgICAgICAgIEZsdXNoUGFnZVRhYmxlTWVtb3J5IChWdGRJbmRleCwgKFVJTlROKUx2 bDVQdEVudHJ5W0luZGV4NV0uVWludDY0LCBTSVpFXzRLQik7DQorICAgICAgICBTZXRTZWNvbmRM ZXZlbFBhZ2luZ0VudHJ5QXR0cmlidXRlICgmTHZsNVB0RW50cnlbSW5kZXg1XSwgRURLSUlfSU9N TVVfQUNDRVNTX1JFQUQgfCBFREtJSV9JT01NVV9BQ0NFU1NfV1JJVEUpOw0KKyAgICAgIH0NCisg ICAgICBMdmw0U3RhcnQgPSBMdmw0UGFnZXNTdGFydCAmIDB4MUZGOw0KKyAgICAgIGlmICgoKElu ZGV4NSsxKTw8OSkgPiBMdmw0UGFnZXNFbmQpIHsNCisgICAgICAgIEx2bDRFbmQgPSBTSVpFXzRL Qi9zaXplb2YoVlREX1NFQ09ORF9MRVZFTF9QQUdJTkdfRU5UUlkpIC0gMTs7DQorICAgICAgICBM dmw0UGFnZXNTdGFydCA9IChJbmRleDUrMSk8PDk7DQorICAgICAgfSBlbHNlIHsNCisgICAgICAg IEx2bDRFbmQgPSBMdmw0UGFnZXNFbmQgJiAweDFGRjsNCisgICAgICB9DQorICAgICAgREVCVUcg KChERUJVR19JTkZPLCIgIEx2bDUoMHgleCk6IEx2bDRTdGFydCAtIDB4JXgsIEx2bDRFbmQgLSAw eCV4XG4iLCBJbmRleDUsIEx2bDRTdGFydCwgTHZsNEVuZCkpOw0KKyAgICAgIEx2bDRQdEVudHJ5 ID0gKFZURF9TRUNPTkRfTEVWRUxfUEFHSU5HX0VOVFJZICopKFVJTlROKVZURF82NEJJVFNfQURE UkVTUyhMdmw1UHRFbnRyeVtJbmRleDVdLkJpdHMuQWRkcmVzc0xvLCBMdmw1UHRFbnRyeVtJbmRl eDVdLkJpdHMuQWRkcmVzc0hpKTsNCiAgICAgfQ0KLSAgICBERUJVRyAoKERFQlVHX0lORk8sIiAg THZsNCgweCV4KTogTHZsM1N0YXJ0IC0gMHgleCwgTHZsM0VuZCAtIDB4JXhcbiIsIEluZGV4NCwg THZsM1N0YXJ0LCBMdmwzRW5kKSk7DQogDQotICAgIEx2bDNQdEVudHJ5ID0gKFZURF9TRUNPTkRf TEVWRUxfUEFHSU5HX0VOVFJZICopKFVJTlROKVZURF82NEJJVFNfQUREUkVTUyhMdmw0UHRFbnRy eVtJbmRleDRdLkJpdHMuQWRkcmVzc0xvLCBMdmw0UHRFbnRyeVtJbmRleDRdLkJpdHMuQWRkcmVz c0hpKTsNCi0gICAgZm9yIChJbmRleDMgPSBMdmwzU3RhcnQ7IEluZGV4MyA8PSBMdmwzRW5kOyBJ bmRleDMrKykgew0KLSAgICAgIGlmIChMdmwzUHRFbnRyeVtJbmRleDNdLlVpbnQ2NCA9PSAwKSB7 DQotICAgICAgICBMdmwzUHRFbnRyeVtJbmRleDNdLlVpbnQ2NCA9IChVSU5UNjQpKFVJTlROKUFs bG9jYXRlWmVyb1BhZ2VzICgxKTsNCi0gICAgICAgIGlmIChMdmwzUHRFbnRyeVtJbmRleDNdLlVp bnQ2NCA9PSAwKSB7DQotICAgICAgICAgIERFQlVHICgoREVCVUdfRVJST1IsIiEhISEhISBBTExP Q0FURSBMVkwzIFBBR0UgRkFJTCAoMHgleCwgMHgleCkhISEhISFcbiIsIEluZGV4NCwgSW5kZXgz KSk7DQorICAgIGZvciAoSW5kZXg0ID0gTHZsNFN0YXJ0OyBJbmRleDQgPD0gTHZsNEVuZDsgSW5k ZXg0KyspIHsNCisgICAgICBpZiAoTHZsNFB0RW50cnlbSW5kZXg0XS5VaW50NjQgPT0gMCkgew0K KyAgICAgICAgTHZsNFB0RW50cnlbSW5kZXg0XS5VaW50NjQgPSAoVUlOVDY0KShVSU5UTilBbGxv Y2F0ZVplcm9QYWdlcyAoMSk7DQorICAgICAgICBpZiAoTHZsNFB0RW50cnlbSW5kZXg0XS5VaW50 NjQgPT0gMCkgew0KKyAgICAgICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCIhISEhISEgQUxMT0NB VEUgTFZMNCBQQUdFIEZBSUwgKDB4JXgpISEhISEhXG4iLCBJbmRleDQpKTsNCiAgICAgICAgICAg QVNTRVJUKEZBTFNFKTsNCiAgICAgICAgICAgcmV0dXJuIE5VTEw7DQogICAgICAgICB9DQotICAg ICAgICBGbHVzaFBhZ2VUYWJsZU1lbW9yeSAoVnRkSW5kZXgsIChVSU5UTilMdmwzUHRFbnRyeVtJ bmRleDNdLlVpbnQ2NCwgU0laRV80S0IpOw0KLSAgICAgICAgU2V0U2Vjb25kTGV2ZWxQYWdpbmdF bnRyeUF0dHJpYnV0ZSAoJkx2bDNQdEVudHJ5W0luZGV4M10sIEVES0lJX0lPTU1VX0FDQ0VTU19S RUFEIHwgRURLSUlfSU9NTVVfQUNDRVNTX1dSSVRFKTsNCisgICAgICAgIEZsdXNoUGFnZVRhYmxl TWVtb3J5IChWdGRJbmRleCwgKFVJTlROKUx2bDRQdEVudHJ5W0luZGV4NF0uVWludDY0LCBTSVpF XzRLQik7DQorICAgICAgICBTZXRTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5QXR0cmlidXRlICgmTHZs NFB0RW50cnlbSW5kZXg0XSwgRURLSUlfSU9NTVVfQUNDRVNTX1JFQUQgfCBFREtJSV9JT01NVV9B Q0NFU1NfV1JJVEUpOw0KICAgICAgIH0NCiANCi0gICAgICBMdmwyUHRFbnRyeSA9IChWVERfU0VD T05EX0xFVkVMX1BBR0lOR19FTlRSWSAqKShVSU5UTilWVERfNjRCSVRTX0FERFJFU1MoTHZsM1B0 RW50cnlbSW5kZXgzXS5CaXRzLkFkZHJlc3NMbywgTHZsM1B0RW50cnlbSW5kZXgzXS5CaXRzLkFk ZHJlc3NIaSk7DQotICAgICAgZm9yIChJbmRleDIgPSAwOyBJbmRleDIgPCBTSVpFXzRLQi9zaXpl b2YoVlREX1NFQ09ORF9MRVZFTF9QQUdJTkdfRU5UUlkpOyBJbmRleDIrKykgew0KLSAgICAgICAg THZsMlB0RW50cnlbSW5kZXgyXS5VaW50NjQgPSBCYXNlQWRkcmVzczsNCi0gICAgICAgIFNldFNl Y29uZExldmVsUGFnaW5nRW50cnlBdHRyaWJ1dGUgKCZMdmwyUHRFbnRyeVtJbmRleDJdLCBJb01t dUFjY2Vzcyk7DQotICAgICAgICBMdmwyUHRFbnRyeVtJbmRleDJdLkJpdHMuUGFnZVNpemUgPSAx Ow0KLSAgICAgICAgQmFzZUFkZHJlc3MgKz0gU0laRV8yTUI7DQorICAgICAgTHZsM1N0YXJ0ID0g UlNoaWZ0VTY0IChCYXNlQWRkcmVzcywgMzApICYgMHgxRkY7DQorICAgICAgaWYgKEFMSUdOX1ZB TFVFX0xPVyhCYXNlQWRkcmVzcyArIFNJWkVfMUdCLCBTSVpFXzFHQikgPD0gRW5kQWRkcmVzcykg ew0KKyAgICAgICAgTHZsM0VuZCA9IFNJWkVfNEtCL3NpemVvZihWVERfU0VDT05EX0xFVkVMX1BB R0lOR19FTlRSWSkgLSAxOw0KKyAgICAgIH0gZWxzZSB7DQorICAgICAgICBMdmwzRW5kID0gUlNo aWZ0VTY0IChFbmRBZGRyZXNzIC0gMSwgMzApICYgMHgxRkY7DQorICAgICAgfQ0KKyAgICAgIERF QlVHICgoREVCVUdfSU5GTywiICBMdmw0KDB4JXgpOiBMdmwzU3RhcnQgLSAweCV4LCBMdmwzRW5k IC0gMHgleFxuIiwgSW5kZXg0LCBMdmwzU3RhcnQsIEx2bDNFbmQpKTsNCisNCisgICAgICBMdmwz UHRFbnRyeSA9IChWVERfU0VDT05EX0xFVkVMX1BBR0lOR19FTlRSWSAqKShVSU5UTilWVERfNjRC SVRTX0FERFJFU1MoTHZsNFB0RW50cnlbSW5kZXg0XS5CaXRzLkFkZHJlc3NMbywgTHZsNFB0RW50 cnlbSW5kZXg0XS5CaXRzLkFkZHJlc3NIaSk7DQorICAgICAgZm9yIChJbmRleDMgPSBMdmwzU3Rh cnQ7IEluZGV4MyA8PSBMdmwzRW5kOyBJbmRleDMrKykgew0KKyAgICAgICAgaWYgKEx2bDNQdEVu dHJ5W0luZGV4M10uVWludDY0ID09IDApIHsNCisgICAgICAgICAgTHZsM1B0RW50cnlbSW5kZXgz XS5VaW50NjQgPSAoVUlOVDY0KShVSU5UTilBbGxvY2F0ZVplcm9QYWdlcyAoMSk7DQorICAgICAg ICAgIGlmIChMdmwzUHRFbnRyeVtJbmRleDNdLlVpbnQ2NCA9PSAwKSB7DQorICAgICAgICAgICAg REVCVUcgKChERUJVR19FUlJPUiwiISEhISEhIEFMTE9DQVRFIExWTDMgUEFHRSBGQUlMICgweCV4 LCAweCV4KSEhISEhIVxuIiwgSW5kZXg0LCBJbmRleDMpKTsNCisgICAgICAgICAgICBBU1NFUlQo RkFMU0UpOw0KKyAgICAgICAgICAgIHJldHVybiBOVUxMOw0KKyAgICAgICAgICB9DQorICAgICAg ICAgIEZsdXNoUGFnZVRhYmxlTWVtb3J5IChWdGRJbmRleCwgKFVJTlROKUx2bDNQdEVudHJ5W0lu ZGV4M10uVWludDY0LCBTSVpFXzRLQik7DQorICAgICAgICAgIFNldFNlY29uZExldmVsUGFnaW5n RW50cnlBdHRyaWJ1dGUgKCZMdmwzUHRFbnRyeVtJbmRleDNdLCBFREtJSV9JT01NVV9BQ0NFU1Nf UkVBRCB8IEVES0lJX0lPTU1VX0FDQ0VTU19XUklURSk7DQorICAgICAgICB9DQorDQorICAgICAg ICBMdmwyUHRFbnRyeSA9IChWVERfU0VDT05EX0xFVkVMX1BBR0lOR19FTlRSWSAqKShVSU5UTilW VERfNjRCSVRTX0FERFJFU1MoTHZsM1B0RW50cnlbSW5kZXgzXS5CaXRzLkFkZHJlc3NMbywgTHZs M1B0RW50cnlbSW5kZXgzXS5CaXRzLkFkZHJlc3NIaSk7DQorICAgICAgICBmb3IgKEluZGV4MiA9 IDA7IEluZGV4MiA8IFNJWkVfNEtCL3NpemVvZihWVERfU0VDT05EX0xFVkVMX1BBR0lOR19FTlRS WSk7IEluZGV4MisrKSB7DQorICAgICAgICAgIEx2bDJQdEVudHJ5W0luZGV4Ml0uVWludDY0ID0g QmFzZUFkZHJlc3M7DQorICAgICAgICAgIFNldFNlY29uZExldmVsUGFnaW5nRW50cnlBdHRyaWJ1 dGUgKCZMdmwyUHRFbnRyeVtJbmRleDJdLCBJb01tdUFjY2Vzcyk7DQorICAgICAgICAgIEx2bDJQ dEVudHJ5W0luZGV4Ml0uQml0cy5QYWdlU2l6ZSA9IDE7DQorICAgICAgICAgIEJhc2VBZGRyZXNz ICs9IFNJWkVfMk1COw0KKyAgICAgICAgICBpZiAoQmFzZUFkZHJlc3MgPj0gTWVtb3J5TGltaXQp IHsNCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAg ICAgRmx1c2hQYWdlVGFibGVNZW1vcnkgKFZ0ZEluZGV4LCAoVUlOVE4pTHZsMlB0RW50cnksIFNJ WkVfNEtCKTsNCiAgICAgICAgIGlmIChCYXNlQWRkcmVzcyA+PSBNZW1vcnlMaW1pdCkgew0KICAg ICAgICAgICBicmVhazsNCiAgICAgICAgIH0NCiAgICAgICB9DQotICAgICAgRmx1c2hQYWdlVGFi bGVNZW1vcnkgKFZ0ZEluZGV4LCAoVUlOVE4pTHZsMlB0RW50cnksIFNJWkVfNEtCKTsNCisgICAg ICBGbHVzaFBhZ2VUYWJsZU1lbW9yeSAoVnRkSW5kZXgsIChVSU5UTikmTHZsM1B0RW50cnlbTHZs M1N0YXJ0XSwgKFVJTlROKSZMdmwzUHRFbnRyeVtMdmwzRW5kICsgMV0gLSAoVUlOVE4pJkx2bDNQ dEVudHJ5W0x2bDNTdGFydF0pOw0KICAgICAgIGlmIChCYXNlQWRkcmVzcyA+PSBNZW1vcnlMaW1p dCkgew0KICAgICAgICAgYnJlYWs7DQogICAgICAgfQ0KICAgICB9DQotICAgIEZsdXNoUGFnZVRh YmxlTWVtb3J5IChWdGRJbmRleCwgKFVJTlROKSZMdmwzUHRFbnRyeVtMdmwzU3RhcnRdLCAoVUlO VE4pJkx2bDNQdEVudHJ5W0x2bDNFbmQgKyAxXSAtIChVSU5UTikmTHZsM1B0RW50cnlbTHZsM1N0 YXJ0XSk7DQotICAgIGlmIChCYXNlQWRkcmVzcyA+PSBNZW1vcnlMaW1pdCkgew0KLSAgICAgIGJy ZWFrOw0KLSAgICB9DQorICAgIEZsdXNoUGFnZVRhYmxlTWVtb3J5IChWdGRJbmRleCwgKFVJTlRO KSZMdmw0UHRFbnRyeVtMdmw0U3RhcnRdLCAoVUlOVE4pJkx2bDRQdEVudHJ5W0x2bDRFbmQgKyAx XSAtIChVSU5UTikmTHZsNFB0RW50cnlbTHZsNFN0YXJ0XSk7DQogICB9DQotICBGbHVzaFBhZ2VU YWJsZU1lbW9yeSAoVnRkSW5kZXgsIChVSU5UTikmTHZsNFB0RW50cnlbTHZsNFN0YXJ0XSwgKFVJ TlROKSZMdmw0UHRFbnRyeVtMdmw0RW5kICsgMV0gLSAoVUlOVE4pJkx2bDRQdEVudHJ5W0x2bDRT dGFydF0pOw0KKyAgRmx1c2hQYWdlVGFibGVNZW1vcnkgKFZ0ZEluZGV4LCAoVUlOVE4pJkx2bDVQ dEVudHJ5W0x2bDVTdGFydF0sIChVSU5UTikmTHZsNVB0RW50cnlbTHZsNUVuZCArIDFdIC0gKFVJ TlROKSZMdmw1UHRFbnRyeVtMdmw1U3RhcnRdKTsNCiANCiAgIHJldHVybiBTZWNvbmRMZXZlbFBh Z2luZ0VudHJ5Ow0KIH0NCkBAIC0yNjYsMjYgKzMzOCwyOCBAQCBDcmVhdGVTZWNvbmRMZXZlbFBh Z2luZ0VudHJ5VGFibGUgKAogDQogICBAcGFyYW1baW5dICBWdGRJbmRleCAgICAgICAgICAgICAg ICAgICAgVGhlIGluZGV4IG9mIHRoZSBWVGQgZW5naW5lLg0KICAgQHBhcmFtW2luXSAgSW9NbXVB Y2Nlc3MgICAgICAgICAgICAgICAgIFRoZSBJT01NVSBhY2Nlc3MuDQorICBAcGFyYW1baW5dICBJ czVMZXZlbFBhZ2luZyAgICAgICAgICAgICAgSWYgaXQgaXMgdGhlIDUgbGV2ZWwgcGFnaW5nLg0K IA0KICAgQHJldHVybiBUaGUgc2Vjb25kIGxldmVsIHBhZ2luZyBlbnRyeS4NCiAqKi8NCiBWVERf U0VDT05EX0xFVkVMX1BBR0lOR19FTlRSWSAqDQogQ3JlYXRlU2Vjb25kTGV2ZWxQYWdpbmdFbnRy eSAoDQogICBJTiBVSU5UTiAgIFZ0ZEluZGV4LA0KLSAgSU4gVUlOVDY0ICBJb01tdUFjY2Vzcw0K KyAgSU4gVUlOVDY0ICBJb01tdUFjY2VzcywNCisgIElOIEJPT0xFQU4gSXM1TGV2ZWxQYWdpbmcN CiAgICkNCiB7DQogICBWVERfU0VDT05EX0xFVkVMX1BBR0lOR19FTlRSWSAqU2Vjb25kTGV2ZWxQ YWdpbmdFbnRyeTsNCiANCiAgIFNlY29uZExldmVsUGFnaW5nRW50cnkgPSBOVUxMOw0KLSAgU2Vj b25kTGV2ZWxQYWdpbmdFbnRyeSA9IENyZWF0ZVNlY29uZExldmVsUGFnaW5nRW50cnlUYWJsZSAo VnRkSW5kZXgsIFNlY29uZExldmVsUGFnaW5nRW50cnksIDAsIG1CZWxvdzRHTWVtb3J5TGltaXQs IElvTW11QWNjZXNzKTsNCisgIFNlY29uZExldmVsUGFnaW5nRW50cnkgPSBDcmVhdGVTZWNvbmRM ZXZlbFBhZ2luZ0VudHJ5VGFibGUgKFZ0ZEluZGV4LCBTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5LCAw LCBtQmVsb3c0R01lbW9yeUxpbWl0LCBJb01tdUFjY2VzcywgSXM1TGV2ZWxQYWdpbmcpOw0KICAg aWYgKFNlY29uZExldmVsUGFnaW5nRW50cnkgPT0gTlVMTCkgew0KICAgICByZXR1cm4gTlVMTDsN CiAgIH0NCiANCiAgIGlmIChtQWJvdmU0R01lbW9yeUxpbWl0ICE9IDApIHsNCiAgICAgQVNTRVJU IChtQWJvdmU0R01lbW9yeUxpbWl0ID4gQkFTRV80R0IpOw0KLSAgICBTZWNvbmRMZXZlbFBhZ2lu Z0VudHJ5ID0gQ3JlYXRlU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeVRhYmxlIChWdGRJbmRleCwgU2Vj b25kTGV2ZWxQYWdpbmdFbnRyeSwgU0laRV80R0IsIG1BYm92ZTRHTWVtb3J5TGltaXQsIElvTW11 QWNjZXNzKTsNCisgICAgU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSA9IENyZWF0ZVNlY29uZExldmVs UGFnaW5nRW50cnlUYWJsZSAoVnRkSW5kZXgsIFNlY29uZExldmVsUGFnaW5nRW50cnksIFNJWkVf NEdCLCBtQWJvdmU0R01lbW9yeUxpbWl0LCBJb01tdUFjY2VzcywgSXM1TGV2ZWxQYWdpbmcpOw0K ICAgICBpZiAoU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSA9PSBOVUxMKSB7DQogICAgICAgcmV0dXJu IE5VTEw7DQogICAgIH0NCkBAIC0zMjYsMTEgKzQwMCwxMyBAQCBTZXR1cFRyYW5zbGF0aW9uVGFi bGUgKAogLyoqDQogICBEdW1wIERNQVIgY29udGV4dCBlbnRyeSB0YWJsZS4NCiANCi0gIEBwYXJh bVtpbl0gIFJvb3RFbnRyeSBETUFSIHJvb3QgZW50cnkuDQorICBAcGFyYW1baW5dICBSb290RW50 cnkgICAgICAgRE1BUiByb290IGVudHJ5Lg0KKyAgQHBhcmFtW2luXSAgSXM1TGV2ZWxQYWdpbmcg IElmIGl0IGlzIHRoZSA1IGxldmVsIHBhZ2luZy4NCiAqKi8NCiBWT0lEDQogRHVtcERtYXJDb250 ZXh0RW50cnlUYWJsZSAoDQotICBJTiBWVERfUk9PVF9FTlRSWSAqUm9vdEVudHJ5DQorICBJTiBW VERfUk9PVF9FTlRSWSAqUm9vdEVudHJ5LA0KKyAgSU4gQk9PTEVBTiBJczVMZXZlbFBhZ2luZw0K ICAgKQ0KIHsNCiAgIFVJTlROICAgICAgICAgICAgICAgICBJbmRleDsNCkBAIC0zNTksNyArNDM1 LDcgQEAgRHVtcERtYXJDb250ZXh0RW50cnlUYWJsZSAoCiAgICAgICBpZiAoQ29udGV4dEVudHJ5 W0luZGV4Ml0uQml0cy5QcmVzZW50ID09IDApIHsNCiAgICAgICAgIGNvbnRpbnVlOw0KICAgICAg IH0NCi0gICAgICBEdW1wU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSAoKFZPSUQgKikoVUlOVE4pVlRE XzY0QklUU19BRERSRVNTKENvbnRleHRFbnRyeVtJbmRleDJdLkJpdHMuU2Vjb25kTGV2ZWxQYWdl VHJhbnNsYXRpb25Qb2ludGVyTG8sIENvbnRleHRFbnRyeVtJbmRleDJdLkJpdHMuU2Vjb25kTGV2 ZWxQYWdlVHJhbnNsYXRpb25Qb2ludGVySGkpKTsNCisgICAgICBEdW1wU2Vjb25kTGV2ZWxQYWdp bmdFbnRyeSAoKFZPSUQgKikoVUlOVE4pVlREXzY0QklUU19BRERSRVNTKENvbnRleHRFbnRyeVtJ bmRleDJdLkJpdHMuU2Vjb25kTGV2ZWxQYWdlVHJhbnNsYXRpb25Qb2ludGVyTG8sIENvbnRleHRF bnRyeVtJbmRleDJdLkJpdHMuU2Vjb25kTGV2ZWxQYWdlVHJhbnNsYXRpb25Qb2ludGVySGkpLCBJ czVMZXZlbFBhZ2luZyk7DQogICAgIH0NCiAgIH0NCiAgIERFQlVHICgoREVCVUdfSU5GTywiPT09 PT09PT09PT09PT09PT09PT09PT09PVxuIikpOw0KQEAgLTM2OCwxNyArNDQ0LDIyIEBAIER1bXBE bWFyQ29udGV4dEVudHJ5VGFibGUgKAogLyoqDQogICBEdW1wIERNQVIgc2Vjb25kIGxldmVsIHBh Z2luZyBlbnRyeS4NCiANCi0gIEBwYXJhbVtpbl0gIFNlY29uZExldmVsUGFnaW5nRW50cnkgVGhl IHNlY29uZCBsZXZlbCBwYWdpbmcgZW50cnkuDQorICBAcGFyYW1baW5dICBTZWNvbmRMZXZlbFBh Z2luZ0VudHJ5ICBUaGUgc2Vjb25kIGxldmVsIHBhZ2luZyBlbnRyeS4NCisgIEBwYXJhbVtpbl0g IElzNUxldmVsUGFnaW5nICAgICAgICAgIElmIGl0IGlzIHRoZSA1IGxldmVsIHBhZ2luZy4NCiAq Ki8NCiBWT0lEDQogRHVtcFNlY29uZExldmVsUGFnaW5nRW50cnkgKA0KLSAgSU4gVk9JRCAqU2Vj b25kTGV2ZWxQYWdpbmdFbnRyeQ0KKyAgSU4gVk9JRCAqU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSwN CisgIElOIEJPT0xFQU4gSXM1TGV2ZWxQYWdpbmcNCiAgICkNCiB7DQorICBVSU5UTiAgICAgICAg ICAgICAgICAgICAgICAgICAgSW5kZXg1Ow0KICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAg ICAgIEluZGV4NDsNCiAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleDM7DQog ICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXgyOw0KICAgVUlOVE4gICAgICAg ICAgICAgICAgICAgICAgICAgIEluZGV4MTsNCisgIFVJTlROICAgICAgICAgICAgICAgICAgICAg ICAgICBMdmw1SW5kZXhFbmQ7DQorICBWVERfU0VDT05EX0xFVkVMX1BBR0lOR19FTlRSWSAgKkx2 bDVQdEVudHJ5Ow0KICAgVlREX1NFQ09ORF9MRVZFTF9QQUdJTkdfRU5UUlkgICpMdmw0UHRFbnRy eTsNCiAgIFZURF9TRUNPTkRfTEVWRUxfUEFHSU5HX0VOVFJZICAqTHZsM1B0RW50cnk7DQogICBW VERfU0VDT05EX0xFVkVMX1BBR0lOR19FTlRSWSAgKkx2bDJQdEVudHJ5Ow0KQEAgLTM4NiwzOCAr NDY3LDUzIEBAIER1bXBTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5ICgKIA0KICAgREVCVUcgKChERUJV R19WRVJCT1NFLCI9PT09PT09PT09PT09PT09XG4iKSk7DQogICBERUJVRyAoKERFQlVHX1ZFUkJP U0UsIkRNQVIgU2Vjb25kIExldmVsIFBhZ2UgVGFibGU6XG4iKSk7DQorICBERUJVRyAoKERFQlVH X1ZFUkJPU0UsIlNlY29uZExldmVsUGFnaW5nRW50cnkgQmFzZSAtIDB4JXgsIElzNUxldmVsUGFn aW5nIC0gJWRcbiIsIFNlY29uZExldmVsUGFnaW5nRW50cnksIElzNUxldmVsUGFnaW5nKSk7DQog DQotICBERUJVRyAoKERFQlVHX1ZFUkJPU0UsIlNlY29uZExldmVsUGFnaW5nRW50cnkgQmFzZSAt IDB4JXhcbiIsIFNlY29uZExldmVsUGFnaW5nRW50cnkpKTsNCisgIEx2bDVJbmRleEVuZCA9IElz NUxldmVsUGFnaW5nID8gU0laRV80S0Ivc2l6ZW9mKFZURF9TRUNPTkRfTEVWRUxfUEFHSU5HX0VO VFJZKSA6IDE7DQogICBMdmw0UHRFbnRyeSA9IChWVERfU0VDT05EX0xFVkVMX1BBR0lOR19FTlRS WSAqKVNlY29uZExldmVsUGFnaW5nRW50cnk7DQotICBmb3IgKEluZGV4NCA9IDA7IEluZGV4NCA8 IFNJWkVfNEtCL3NpemVvZihWVERfU0VDT05EX0xFVkVMX1BBR0lOR19FTlRSWSk7IEluZGV4NCsr KSB7DQotICAgIGlmIChMdmw0UHRFbnRyeVtJbmRleDRdLlVpbnQ2NCAhPSAwKSB7DQotICAgICAg REVCVUcgKChERUJVR19WRVJCT1NFLCIgIEx2bDRQdCBFbnRyeSgweCUwM3gpIC0gMHglMDE2bHhc biIsIEluZGV4NCwgTHZsNFB0RW50cnlbSW5kZXg0XS5VaW50NjQpKTsNCi0gICAgfQ0KLSAgICBp ZiAoTHZsNFB0RW50cnlbSW5kZXg0XS5VaW50NjQgPT0gMCkgew0KLSAgICAgIGNvbnRpbnVlOw0K LSAgICB9DQotICAgIEx2bDNQdEVudHJ5ID0gKFZURF9TRUNPTkRfTEVWRUxfUEFHSU5HX0VOVFJZ ICopKFVJTlROKVZURF82NEJJVFNfQUREUkVTUyhMdmw0UHRFbnRyeVtJbmRleDRdLkJpdHMuQWRk cmVzc0xvLCBMdmw0UHRFbnRyeVtJbmRleDRdLkJpdHMuQWRkcmVzc0hpKTsNCi0gICAgZm9yIChJ bmRleDMgPSAwOyBJbmRleDMgPCBTSVpFXzRLQi9zaXplb2YoVlREX1NFQ09ORF9MRVZFTF9QQUdJ TkdfRU5UUlkpOyBJbmRleDMrKykgew0KLSAgICAgIGlmIChMdmwzUHRFbnRyeVtJbmRleDNdLlVp bnQ2NCAhPSAwKSB7DQotICAgICAgICBERUJVRyAoKERFQlVHX1ZFUkJPU0UsIiAgICBMdmwzUHQg RW50cnkoMHglMDN4KSAtIDB4JTAxNmx4XG4iLCBJbmRleDMsIEx2bDNQdEVudHJ5W0luZGV4M10u VWludDY0KSk7DQorICBMdmw1UHRFbnRyeSA9IChWVERfU0VDT05EX0xFVkVMX1BBR0lOR19FTlRS WSAqKVNlY29uZExldmVsUGFnaW5nRW50cnk7DQorDQorICBmb3IgKEluZGV4NSA9IDA7IEluZGV4 NSA8IEx2bDVJbmRleEVuZDsgSW5kZXg1KyspIHsNCisgICAgaWYgKElzNUxldmVsUGFnaW5nKSB7 DQorICAgICAgaWYgKEx2bDVQdEVudHJ5W0luZGV4NV0uVWludDY0ICE9IDApIHsNCisgICAgICAg IERFQlVHICgoREVCVUdfVkVSQk9TRSwiICBMdmw1UHQgRW50cnkoMHglMDN4KSAtIDB4JTAxNmx4 XG4iLCBJbmRleDUsIEx2bDVQdEVudHJ5W0luZGV4NV0uVWludDY0KSk7DQogICAgICAgfQ0KLSAg ICAgIGlmIChMdmwzUHRFbnRyeVtJbmRleDNdLlVpbnQ2NCA9PSAwKSB7DQorICAgICAgaWYgKEx2 bDVQdEVudHJ5W0luZGV4NV0uVWludDY0ID09IDApIHsNCiAgICAgICAgIGNvbnRpbnVlOw0KICAg ICAgIH0NCisgICAgICBMdmw0UHRFbnRyeSA9IChWVERfU0VDT05EX0xFVkVMX1BBR0lOR19FTlRS WSAqKShVSU5UTilWVERfNjRCSVRTX0FERFJFU1MoTHZsNVB0RW50cnlbSW5kZXg1XS5CaXRzLkFk ZHJlc3NMbywgTHZsNVB0RW50cnlbSW5kZXg1XS5CaXRzLkFkZHJlc3NIaSk7DQorICAgIH0NCiAN Ci0gICAgICBMdmwyUHRFbnRyeSA9IChWVERfU0VDT05EX0xFVkVMX1BBR0lOR19FTlRSWSAqKShV SU5UTilWVERfNjRCSVRTX0FERFJFU1MoTHZsM1B0RW50cnlbSW5kZXgzXS5CaXRzLkFkZHJlc3NM bywgTHZsM1B0RW50cnlbSW5kZXgzXS5CaXRzLkFkZHJlc3NIaSk7DQotICAgICAgZm9yIChJbmRl eDIgPSAwOyBJbmRleDIgPCBTSVpFXzRLQi9zaXplb2YoVlREX1NFQ09ORF9MRVZFTF9QQUdJTkdf RU5UUlkpOyBJbmRleDIrKykgew0KLSAgICAgICAgaWYgKEx2bDJQdEVudHJ5W0luZGV4Ml0uVWlu dDY0ICE9IDApIHsNCi0gICAgICAgICAgREVCVUcgKChERUJVR19WRVJCT1NFLCIgICAgICBMdmwy UHQgRW50cnkoMHglMDN4KSAtIDB4JTAxNmx4XG4iLCBJbmRleDIsIEx2bDJQdEVudHJ5W0luZGV4 Ml0uVWludDY0KSk7DQorICAgIGZvciAoSW5kZXg0ID0gMDsgSW5kZXg0IDwgU0laRV80S0Ivc2l6 ZW9mKFZURF9TRUNPTkRfTEVWRUxfUEFHSU5HX0VOVFJZKTsgSW5kZXg0KyspIHsNCisgICAgICBp ZiAoTHZsNFB0RW50cnlbSW5kZXg0XS5VaW50NjQgIT0gMCkgew0KKyAgICAgICAgREVCVUcgKChE RUJVR19WRVJCT1NFLCIgIEx2bDRQdCBFbnRyeSgweCUwM3gpIC0gMHglMDE2bHhcbiIsIEluZGV4 NCwgTHZsNFB0RW50cnlbSW5kZXg0XS5VaW50NjQpKTsNCisgICAgICB9DQorICAgICAgaWYgKEx2 bDRQdEVudHJ5W0luZGV4NF0uVWludDY0ID09IDApIHsNCisgICAgICAgIGNvbnRpbnVlOw0KKyAg ICAgIH0NCisgICAgICBMdmwzUHRFbnRyeSA9IChWVERfU0VDT05EX0xFVkVMX1BBR0lOR19FTlRS WSAqKShVSU5UTilWVERfNjRCSVRTX0FERFJFU1MoTHZsNFB0RW50cnlbSW5kZXg0XS5CaXRzLkFk ZHJlc3NMbywgTHZsNFB0RW50cnlbSW5kZXg0XS5CaXRzLkFkZHJlc3NIaSk7DQorICAgICAgZm9y IChJbmRleDMgPSAwOyBJbmRleDMgPCBTSVpFXzRLQi9zaXplb2YoVlREX1NFQ09ORF9MRVZFTF9Q QUdJTkdfRU5UUlkpOyBJbmRleDMrKykgew0KKyAgICAgICAgaWYgKEx2bDNQdEVudHJ5W0luZGV4 M10uVWludDY0ICE9IDApIHsNCisgICAgICAgICAgREVCVUcgKChERUJVR19WRVJCT1NFLCIgICBM dmwzUHQgRW50cnkoMHglMDN4KSAtIDB4JTAxNmx4XG4iLCBJbmRleDMsIEx2bDNQdEVudHJ5W0lu ZGV4M10uVWludDY0KSk7DQogICAgICAgICB9DQotICAgICAgICBpZiAoTHZsMlB0RW50cnlbSW5k ZXgyXS5VaW50NjQgPT0gMCkgew0KKyAgICAgICAgaWYgKEx2bDNQdEVudHJ5W0luZGV4M10uVWlu dDY0ID09IDApIHsNCiAgICAgICAgICAgY29udGludWU7DQogICAgICAgICB9DQotICAgICAgICBp ZiAoTHZsMlB0RW50cnlbSW5kZXgyXS5CaXRzLlBhZ2VTaXplID09IDApIHsNCi0gICAgICAgICAg THZsMVB0RW50cnkgPSAoVlREX1NFQ09ORF9MRVZFTF9QQUdJTkdfRU5UUlkgKikoVUlOVE4pVlRE XzY0QklUU19BRERSRVNTKEx2bDJQdEVudHJ5W0luZGV4Ml0uQml0cy5BZGRyZXNzTG8sIEx2bDJQ dEVudHJ5W0luZGV4Ml0uQml0cy5BZGRyZXNzSGkpOw0KLSAgICAgICAgICBmb3IgKEluZGV4MSA9 IDA7IEluZGV4MSA8IFNJWkVfNEtCL3NpemVvZihWVERfU0VDT05EX0xFVkVMX1BBR0lOR19FTlRS WSk7IEluZGV4MSsrKSB7DQotICAgICAgICAgICAgaWYgKEx2bDFQdEVudHJ5W0luZGV4MV0uVWlu dDY0ICE9IDApIHsNCi0gICAgICAgICAgICAgIERFQlVHICgoREVCVUdfVkVSQk9TRSwiICAgICAg ICBMdmwxUHQgRW50cnkoMHglMDN4KSAtIDB4JTAxNmx4XG4iLCBJbmRleDEsIEx2bDFQdEVudHJ5 W0luZGV4MV0uVWludDY0KSk7DQorDQorICAgICAgICBMdmwyUHRFbnRyeSA9IChWVERfU0VDT05E X0xFVkVMX1BBR0lOR19FTlRSWSAqKShVSU5UTilWVERfNjRCSVRTX0FERFJFU1MoTHZsM1B0RW50 cnlbSW5kZXgzXS5CaXRzLkFkZHJlc3NMbywgTHZsM1B0RW50cnlbSW5kZXgzXS5CaXRzLkFkZHJl c3NIaSk7DQorICAgICAgICBmb3IgKEluZGV4MiA9IDA7IEluZGV4MiA8IFNJWkVfNEtCL3NpemVv ZihWVERfU0VDT05EX0xFVkVMX1BBR0lOR19FTlRSWSk7IEluZGV4MisrKSB7DQorICAgICAgICAg IGlmIChMdmwyUHRFbnRyeVtJbmRleDJdLlVpbnQ2NCAhPSAwKSB7DQorICAgICAgICAgICAgREVC VUcgKChERUJVR19WRVJCT1NFLCIgICAgTHZsMlB0IEVudHJ5KDB4JTAzeCkgLSAweCUwMTZseFxu IiwgSW5kZXgyLCBMdmwyUHRFbnRyeVtJbmRleDJdLlVpbnQ2NCkpOw0KKyAgICAgICAgICB9DQor ICAgICAgICAgIGlmIChMdmwyUHRFbnRyeVtJbmRleDJdLlVpbnQ2NCA9PSAwKSB7DQorICAgICAg ICAgICAgY29udGludWU7DQorICAgICAgICAgIH0NCisgICAgICAgICAgaWYgKEx2bDJQdEVudHJ5 W0luZGV4Ml0uQml0cy5QYWdlU2l6ZSA9PSAwKSB7DQorICAgICAgICAgICAgTHZsMVB0RW50cnkg PSAoVlREX1NFQ09ORF9MRVZFTF9QQUdJTkdfRU5UUlkgKikoVUlOVE4pVlREXzY0QklUU19BRERS RVNTKEx2bDJQdEVudHJ5W0luZGV4Ml0uQml0cy5BZGRyZXNzTG8sIEx2bDJQdEVudHJ5W0luZGV4 Ml0uQml0cy5BZGRyZXNzSGkpOw0KKyAgICAgICAgICAgIGZvciAoSW5kZXgxID0gMDsgSW5kZXgx IDwgU0laRV80S0Ivc2l6ZW9mKFZURF9TRUNPTkRfTEVWRUxfUEFHSU5HX0VOVFJZKTsgSW5kZXgx KyspIHsNCisgICAgICAgICAgICAgIGlmIChMdmwxUHRFbnRyeVtJbmRleDFdLlVpbnQ2NCAhPSAw KSB7DQorICAgICAgICAgICAgICAgIERFQlVHICgoREVCVUdfVkVSQk9TRSwiICAgICAgTHZsMVB0 IEVudHJ5KDB4JTAzeCkgLSAweCUwMTZseFxuIiwgSW5kZXgxLCBMdmwxUHRFbnRyeVtJbmRleDFd LlVpbnQ2NCkpOw0KKyAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIH0NCiAgICAgICAgICAg fQ0KICAgICAgICAgfQ0KQEAgLTUxMCw2ICs2MDYsNyBAQCBQYWdlQXR0cmlidXRlVG9MZW5ndGgg KAogICBAcGFyYW1baW5dICAgVnRkSW5kZXggICAgICAgICAgICAgICAgIFRoZSBpbmRleCB1c2Vk IHRvIGlkZW50aWZ5IGEgVlRkIGVuZ2luZS4NCiAgIEBwYXJhbVtpbl0gICBTZWNvbmRMZXZlbFBh Z2luZ0VudHJ5ICAgVGhlIHNlY29uZCBsZXZlbCBwYWdpbmcgZW50cnkgaW4gVlRkIHRhYmxlIGZv ciB0aGUgZGV2aWNlLg0KICAgQHBhcmFtW2luXSAgIEFkZHJlc3MgICAgICAgICAgICAgICAgICBU aGUgYWRkcmVzcyB0byBiZSBjaGVja2VkLg0KKyAgQHBhcmFtW2luXSAgIElzNUxldmVsUGFnaW5n ICAgICAgICAgICBJZiBpdCBpcyB0aGUgNSBsZXZlbCBwYWdpbmcuDQogICBAcGFyYW1bb3V0XSAg UGFnZUF0dHJpYnV0ZXMgICAgICAgICAgIFRoZSBwYWdlIGF0dHJpYnV0ZSBvZiB0aGUgcGFnZSBl bnRyeS4NCiANCiAgIEByZXR1cm4gVGhlIHBhZ2UgZW50cnkuDQpAQCAtNTE5LDYgKzYxNiw3IEBA IEdldFNlY29uZExldmVsUGFnZVRhYmxlRW50cnkgKAogICBJTiAgVUlOVE4gICAgICAgICAgICAg ICAgICAgICAgICAgVnRkSW5kZXgsDQogICBJTiAgVlREX1NFQ09ORF9MRVZFTF9QQUdJTkdfRU5U UlkgKlNlY29uZExldmVsUGFnaW5nRW50cnksDQogICBJTiAgUEhZU0lDQUxfQUREUkVTUyAgICAg ICAgICAgICAgQWRkcmVzcywNCisgIElOICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICBJ czVMZXZlbFBhZ2luZywNCiAgIE9VVCBQQUdFX0FUVFJJQlVURSAgICAgICAgICAgICAgICAqUGFn ZUF0dHJpYnV0ZQ0KICAgKQ0KIHsNCkBAIC01MjYsMTcgKzYyNCwzOCBAQCBHZXRTZWNvbmRMZXZl bFBhZ2VUYWJsZUVudHJ5ICgKICAgVUlOVE4gICAgICAgICAgICAgICAgIEluZGV4MjsNCiAgIFVJ TlROICAgICAgICAgICAgICAgICBJbmRleDM7DQogICBVSU5UTiAgICAgICAgICAgICAgICAgSW5k ZXg0Ow0KKyAgVUlOVE4gICAgICAgICAgICAgICAgIEluZGV4NTsNCiAgIFVJTlQ2NCAgICAgICAg ICAgICAgICAqTDFQYWdlVGFibGU7DQogICBVSU5UNjQgICAgICAgICAgICAgICAgKkwyUGFnZVRh YmxlOw0KICAgVUlOVDY0ICAgICAgICAgICAgICAgICpMM1BhZ2VUYWJsZTsNCiAgIFVJTlQ2NCAg ICAgICAgICAgICAgICAqTDRQYWdlVGFibGU7DQorICBVSU5UNjQgICAgICAgICAgICAgICAgKkw1 UGFnZVRhYmxlOw0KIA0KKyAgSW5kZXg1ID0gKChVSU5UTilSU2hpZnRVNjQgKEFkZHJlc3MsIDQ4 KSkgJiBQQUdJTkdfVlREX0lOREVYX01BU0s7DQogICBJbmRleDQgPSAoKFVJTlROKVJTaGlmdFU2 NCAoQWRkcmVzcywgMzkpKSAmIFBBR0lOR19WVERfSU5ERVhfTUFTSzsNCiAgIEluZGV4MyA9ICgo VUlOVE4pQWRkcmVzcyA+PiAzMCkgJiBQQUdJTkdfVlREX0lOREVYX01BU0s7DQogICBJbmRleDIg PSAoKFVJTlROKUFkZHJlc3MgPj4gMjEpICYgUEFHSU5HX1ZURF9JTkRFWF9NQVNLOw0KICAgSW5k ZXgxID0gKChVSU5UTilBZGRyZXNzID4+IDEyKSAmIFBBR0lOR19WVERfSU5ERVhfTUFTSzsNCiAN Ci0gIEw0UGFnZVRhYmxlID0gKFVJTlQ2NCAqKVNlY29uZExldmVsUGFnaW5nRW50cnk7DQorICBp ZiAoSXM1TGV2ZWxQYWdpbmcpIHsNCisgICAgTDVQYWdlVGFibGUgPSAoVUlOVDY0ICopU2Vjb25k TGV2ZWxQYWdpbmdFbnRyeTsNCisgICAgaWYgKEw1UGFnZVRhYmxlW0luZGV4NV0gPT0gMCkgew0K KyAgICAgIEw1UGFnZVRhYmxlW0luZGV4NV0gPSAoVUlOVDY0KShVSU5UTilBbGxvY2F0ZVplcm9Q YWdlcyAoMSk7DQorICAgICAgaWYgKEw1UGFnZVRhYmxlW0luZGV4NV0gPT0gMCkgew0KKyAgICAg ICAgREVCVUcgKChERUJVR19FUlJPUiwiISEhISEhIEFMTE9DQVRFIExWTDUgUEFHRSBGQUlMICgw eCV4KSEhISEhIVxuIiwgSW5kZXg0KSk7DQorICAgICAgICBBU1NFUlQoRkFMU0UpOw0KKyAgICAg ICAgKlBhZ2VBdHRyaWJ1dGUgPSBQYWdlTm9uZTsNCisgICAgICAgIHJldHVybiBOVUxMOw0KKyAg ICAgIH0NCisgICAgICBGbHVzaFBhZ2VUYWJsZU1lbW9yeSAoVnRkSW5kZXgsIChVSU5UTilMNVBh Z2VUYWJsZVtJbmRleDVdLCBTSVpFXzRLQik7DQorICAgICAgU2V0U2Vjb25kTGV2ZWxQYWdpbmdF bnRyeUF0dHJpYnV0ZSAoKFZURF9TRUNPTkRfTEVWRUxfUEFHSU5HX0VOVFJZICopJkw1UGFnZVRh YmxlW0luZGV4NV0sIEVES0lJX0lPTU1VX0FDQ0VTU19SRUFEIHwgRURLSUlfSU9NTVVfQUNDRVNT X1dSSVRFKTsNCisgICAgICBGbHVzaFBhZ2VUYWJsZU1lbW9yeSAoVnRkSW5kZXgsIChVSU5UTikm TDVQYWdlVGFibGVbSW5kZXg1XSwgc2l6ZW9mKEw1UGFnZVRhYmxlW0luZGV4NV0pKTsNCisgICAg fQ0KKyAgICBMNFBhZ2VUYWJsZSA9IChVSU5UNjQgKikoVUlOVE4pKEw1UGFnZVRhYmxlW0luZGV4 NV0gJiBQQUdJTkdfNEtfQUREUkVTU19NQVNLXzY0KTsNCisgIH0gZWxzZSB7DQorICAgIEw0UGFn ZVRhYmxlID0gKFVJTlQ2NCAqKVNlY29uZExldmVsUGFnaW5nRW50cnk7DQorICB9DQorDQogICBp ZiAoTDRQYWdlVGFibGVbSW5kZXg0XSA9PSAwKSB7DQogICAgIEw0UGFnZVRhYmxlW0luZGV4NF0g PSAoVUlOVDY0KShVSU5UTilBbGxvY2F0ZVplcm9QYWdlcyAoMSk7DQogICAgIGlmIChMNFBhZ2VU YWJsZVtJbmRleDRdID09IDApIHsNCkBAIC03ODUsNyArOTA0LDcgQEAgU2V0U2Vjb25kTGV2ZWxQ YWdpbmdBdHRyaWJ1dGUgKAogICB9DQogDQogICB3aGlsZSAoTGVuZ3RoICE9IDApIHsNCi0gICAg UGFnZUVudHJ5ID0gR2V0U2Vjb25kTGV2ZWxQYWdlVGFibGVFbnRyeSAoVnRkSW5kZXgsIFNlY29u ZExldmVsUGFnaW5nRW50cnksIEJhc2VBZGRyZXNzLCAmUGFnZUF0dHJpYnV0ZSk7DQorICAgIFBh Z2VFbnRyeSA9IEdldFNlY29uZExldmVsUGFnZVRhYmxlRW50cnkgKFZ0ZEluZGV4LCBTZWNvbmRM ZXZlbFBhZ2luZ0VudHJ5LCBCYXNlQWRkcmVzcywgbVZ0ZFVuaXRJbmZvcm1hdGlvbltWdGRJbmRl eF0uSXM1TGV2ZWxQYWdpbmcsICZQYWdlQXR0cmlidXRlKTsNCiAgICAgaWYgKFBhZ2VFbnRyeSA9 PSBOVUxMKSB7DQogICAgICAgREVCVUcgKChERUJVR19FUlJPUiwgIlBhZ2VFbnRyeSAtIE5VTExc biIpKTsNCiAgICAgICByZXR1cm4gUkVUVVJOX1VOU1VQUE9SVEVEOw0KQEAgLTkxMyw3ICsxMDMy LDcgQEAgU2V0QWNjZXNzQXR0cmlidXRlICgKIA0KICAgaWYgKEV4dENvbnRleHRFbnRyeSAhPSBO VUxMKSB7DQogICAgIGlmIChFeHRDb250ZXh0RW50cnktPkJpdHMuUHJlc2VudCA9PSAwKSB7DQot ICAgICAgU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSA9IENyZWF0ZVNlY29uZExldmVsUGFnaW5nRW50 cnkgKFZ0ZEluZGV4LCAwKTsNCisgICAgICBTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5ID0gQ3JlYXRl U2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSAoVnRkSW5kZXgsIDAsIG1WdGRVbml0SW5mb3JtYXRpb25b VnRkSW5kZXhdLklzNUxldmVsUGFnaW5nKTsNCiAgICAgICBERUJVRyAoKERFQlVHX1ZFUkJPU0Us IlNlY29uZExldmVsUGFnaW5nRW50cnkgLSAweCV4IChTJTA0eCBCJTAyeCBEJTAyeCBGJTAyeCkg TmV3XG4iLCBTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5LCBTZWdtZW50LCBTb3VyY2VJZC5CaXRzLkJ1 cywgU291cmNlSWQuQml0cy5EZXZpY2UsIFNvdXJjZUlkLkJpdHMuRnVuY3Rpb24pKTsNCiAgICAg ICBQdCA9IChVSU5UNjQpUlNoaWZ0VTY0ICgoVUlOVDY0KShVSU5UTilTZWNvbmRMZXZlbFBhZ2lu Z0VudHJ5LCAxMik7DQogDQpAQCAtOTIyLDcgKzEwNDEsNyBAQCBTZXRBY2Nlc3NBdHRyaWJ1dGUg KAogICAgICAgRXh0Q29udGV4dEVudHJ5LT5CaXRzLkRvbWFpbklkZW50aWZpZXIgPSBEb21haW5J ZGVudGlmaWVyOw0KICAgICAgIEV4dENvbnRleHRFbnRyeS0+Qml0cy5QcmVzZW50ID0gMTsNCiAg ICAgICBGbHVzaFBhZ2VUYWJsZU1lbW9yeSAoVnRkSW5kZXgsIChVSU5UTilFeHRDb250ZXh0RW50 cnksIHNpemVvZigqRXh0Q29udGV4dEVudHJ5KSk7DQotICAgICAgRHVtcERtYXJFeHRDb250ZXh0 RW50cnlUYWJsZSAobVZ0ZFVuaXRJbmZvcm1hdGlvbltWdGRJbmRleF0uRXh0Um9vdEVudHJ5VGFi bGUpOw0KKyAgICAgIER1bXBEbWFyRXh0Q29udGV4dEVudHJ5VGFibGUgKG1WdGRVbml0SW5mb3Jt YXRpb25bVnRkSW5kZXhdLkV4dFJvb3RFbnRyeVRhYmxlLCBtVnRkVW5pdEluZm9ybWF0aW9uW1Z0 ZEluZGV4XS5JczVMZXZlbFBhZ2luZyk7DQogICAgICAgbVZ0ZFVuaXRJbmZvcm1hdGlvbltWdGRJ bmRleF0uSGFzRGlydHlDb250ZXh0ID0gVFJVRTsNCiAgICAgfSBlbHNlIHsNCiAgICAgICBTZWNv bmRMZXZlbFBhZ2luZ0VudHJ5ID0gKFZPSUQgKikoVUlOVE4pVlREXzY0QklUU19BRERSRVNTKEV4 dENvbnRleHRFbnRyeS0+Qml0cy5TZWNvbmRMZXZlbFBhZ2VUcmFuc2xhdGlvblBvaW50ZXJMbywg RXh0Q29udGV4dEVudHJ5LT5CaXRzLlNlY29uZExldmVsUGFnZVRyYW5zbGF0aW9uUG9pbnRlckhp KTsNCkBAIC05MzAsNyArMTA0OSw3IEBAIFNldEFjY2Vzc0F0dHJpYnV0ZSAoCiAgICAgfQ0KICAg fSBlbHNlIGlmIChDb250ZXh0RW50cnkgIT0gTlVMTCkgew0KICAgICBpZiAoQ29udGV4dEVudHJ5 LT5CaXRzLlByZXNlbnQgPT0gMCkgew0KLSAgICAgIFNlY29uZExldmVsUGFnaW5nRW50cnkgPSBD cmVhdGVTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5IChWdGRJbmRleCwgMCk7DQorICAgICAgU2Vjb25k TGV2ZWxQYWdpbmdFbnRyeSA9IENyZWF0ZVNlY29uZExldmVsUGFnaW5nRW50cnkgKFZ0ZEluZGV4 LCAwLCBtVnRkVW5pdEluZm9ybWF0aW9uW1Z0ZEluZGV4XS5JczVMZXZlbFBhZ2luZyk7DQogICAg ICAgREVCVUcgKChERUJVR19WRVJCT1NFLCJTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5IC0gMHgleCAo UyUwNHggQiUwMnggRCUwMnggRiUwMngpIE5ld1xuIiwgU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSwg U2VnbWVudCwgU291cmNlSWQuQml0cy5CdXMsIFNvdXJjZUlkLkJpdHMuRGV2aWNlLCBTb3VyY2VJ ZC5CaXRzLkZ1bmN0aW9uKSk7DQogICAgICAgUHQgPSAoVUlOVDY0KVJTaGlmdFU2NCAoKFVJTlQ2 NCkoVUlOVE4pU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSwgMTIpOw0KIA0KQEAgLTkzOSw3ICsxMDU4 LDcgQEAgU2V0QWNjZXNzQXR0cmlidXRlICgKICAgICAgIENvbnRleHRFbnRyeS0+Qml0cy5Eb21h aW5JZGVudGlmaWVyID0gRG9tYWluSWRlbnRpZmllcjsNCiAgICAgICBDb250ZXh0RW50cnktPkJp dHMuUHJlc2VudCA9IDE7DQogICAgICAgRmx1c2hQYWdlVGFibGVNZW1vcnkgKFZ0ZEluZGV4LCAo VUlOVE4pQ29udGV4dEVudHJ5LCBzaXplb2YoKkNvbnRleHRFbnRyeSkpOw0KLSAgICAgIER1bXBE bWFyQ29udGV4dEVudHJ5VGFibGUgKG1WdGRVbml0SW5mb3JtYXRpb25bVnRkSW5kZXhdLlJvb3RF bnRyeVRhYmxlKTsNCisgICAgICBEdW1wRG1hckNvbnRleHRFbnRyeVRhYmxlIChtVnRkVW5pdElu Zm9ybWF0aW9uW1Z0ZEluZGV4XS5Sb290RW50cnlUYWJsZSwgbVZ0ZFVuaXRJbmZvcm1hdGlvbltW dGRJbmRleF0uSXM1TGV2ZWxQYWdpbmcpOw0KICAgICAgIG1WdGRVbml0SW5mb3JtYXRpb25bVnRk SW5kZXhdLkhhc0RpcnR5Q29udGV4dCA9IFRSVUU7DQogICAgIH0gZWxzZSB7DQogICAgICAgU2Vj b25kTGV2ZWxQYWdpbmdFbnRyeSA9IChWT0lEICopKFVJTlROKVZURF82NEJJVFNfQUREUkVTUyhD b250ZXh0RW50cnktPkJpdHMuU2Vjb25kTGV2ZWxQYWdlVHJhbnNsYXRpb25Qb2ludGVyTG8sIENv bnRleHRFbnRyeS0+Qml0cy5TZWNvbmRMZXZlbFBhZ2VUcmFuc2xhdGlvblBvaW50ZXJIaSk7DQpA QCAtMTAwMCw3ICsxMTE5LDcgQEAgQWx3YXlzRW5hYmxlUGFnZUF0dHJpYnV0ZSAoCiANCiAgIGlm IChtVnRkVW5pdEluZm9ybWF0aW9uW1Z0ZEluZGV4XS5GaXhlZFNlY29uZExldmVsUGFnaW5nRW50 cnkgPT0gMCkgew0KICAgICBERUJVRygoREVCVUdfSU5GTywgIkNyZWF0ZVNlY29uZExldmVsUGFn aW5nRW50cnkgLSAlZFxuIiwgVnRkSW5kZXgpKTsNCi0gICAgbVZ0ZFVuaXRJbmZvcm1hdGlvbltW dGRJbmRleF0uRml4ZWRTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5ID0gQ3JlYXRlU2Vjb25kTGV2ZWxQ YWdpbmdFbnRyeSAoVnRkSW5kZXgsIEVES0lJX0lPTU1VX0FDQ0VTU19SRUFEIHwgRURLSUlfSU9N TVVfQUNDRVNTX1dSSVRFKTsNCisgICAgbVZ0ZFVuaXRJbmZvcm1hdGlvbltWdGRJbmRleF0uRml4 ZWRTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5ID0gQ3JlYXRlU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSAo VnRkSW5kZXgsIEVES0lJX0lPTU1VX0FDQ0VTU19SRUFEIHwgRURLSUlfSU9NTVVfQUNDRVNTX1dS SVRFLCBtVnRkVW5pdEluZm9ybWF0aW9uW1Z0ZEluZGV4XS5JczVMZXZlbFBhZ2luZyk7DQogICB9 DQogDQogICBTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5ID0gbVZ0ZFVuaXRJbmZvcm1hdGlvbltWdGRJ bmRleF0uRml4ZWRTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5Ow0KZGlmZiAtLWdpdCBhL1NpbGljb24v SW50ZWwvSW50ZWxTaWxpY29uUGtnL0ZlYXR1cmUvVlRkL0ludGVsVlRkRHhlL1RyYW5zbGF0aW9u VGFibGVFeC5jIGIvU2lsaWNvbi9JbnRlbC9JbnRlbFNpbGljb25Qa2cvRmVhdHVyZS9WVGQvSW50 ZWxWVGREeGUvVHJhbnNsYXRpb25UYWJsZUV4LmMKaW5kZXggMGVkOWUzY2EuLjM5MThlZWVlIDEw MDY0NAotLS0gYS9TaWxpY29uL0ludGVsL0ludGVsU2lsaWNvblBrZy9GZWF0dXJlL1ZUZC9JbnRl bFZUZER4ZS9UcmFuc2xhdGlvblRhYmxlRXguYworKysgYi9TaWxpY29uL0ludGVsL0ludGVsU2ls aWNvblBrZy9GZWF0dXJlL1ZUZC9JbnRlbFZUZER4ZS9UcmFuc2xhdGlvblRhYmxlRXguYwpAQCAt NzgsMTEgKzc4LDMyIEBAIENyZWF0ZUV4dENvbnRleHRFbnRyeSAoCiANCiAgICAgREVCVUcgKChE RUJVR19JTkZPLCJET01BSU46IFMlMDR4LCBCJTAyeCBEJTAyeCBGJTAyeFxuIiwgbVZ0ZFVuaXRJ bmZvcm1hdGlvbltWdGRJbmRleF0uU2VnbWVudCwgU291cmNlSWQuQml0cy5CdXMsIFNvdXJjZUlk LkJpdHMuRGV2aWNlLCBTb3VyY2VJZC5CaXRzLkZ1bmN0aW9uKSk7DQogDQotICAgIGlmICgobVZ0 ZFVuaXRJbmZvcm1hdGlvbltWdGRJbmRleF0uQ2FwUmVnLkJpdHMuU0FHQVcgJiBCSVQyKSA9PSAw KSB7DQotICAgICAgREVCVUcoKERFQlVHX0VSUk9SLCAiISEhISA0LWxldmVsIHBhZ2UtdGFibGUg aXMgbm90IHN1cHBvcnRlZCBvbiBWVEQgJWQgISEhIVxuIiwgVnRkSW5kZXgpKTsNCisgICAgbVZ0 ZFVuaXRJbmZvcm1hdGlvbltWdGRJbmRleF0uSXM1TGV2ZWxQYWdpbmcgPSBGQUxTRTsNCisgICAg aWYgKChtVnRkVW5pdEluZm9ybWF0aW9uW1Z0ZEluZGV4XS5DYXBSZWcuQml0cy5TQUdBVyAmIEJJ VDMpICE9IDApIHsNCisgICAgICBpZiAoKFBjZEdldDgoUGNkVlRkUG9saWN5UHJvcGVydHlNYXNr KSAmIEJJVDMpICE9IDApIHsNCisgICAgICAgIERFQlVHKChERUJVR19FUlJPUiwgIkZvcmNlIHRv IHVzZSA0LWxldmVsIHBhZ2UtdGFibGUgb24gVlREICVkXG4iLCBWdGRJbmRleCkpOw0KKyAgICAg ICAgRXh0Q29udGV4dEVudHJ5LT5CaXRzLkFkZHJlc3NXaWR0aCA9IDB4MjsNCisgICAgICB9IGlm ICgoUGNkR2V0OChQY2RWVGRQb2xpY3lQcm9wZXJ0eU1hc2spICYgQklUNCkgIT0gMCkgew0KKyAg ICAgICAgREVCVUcoKERFQlVHX0VSUk9SLCAiRm9yY2UgdG8gdXNlIDUtbGV2ZWwgcGFnZS10YWJs ZSBvbiBWVEQgJWRcbiIsIFZ0ZEluZGV4KSk7DQorICAgICAgICBFeHRDb250ZXh0RW50cnktPkJp dHMuQWRkcmVzc1dpZHRoID0gMHgzOw0KKyAgICAgICAgbVZ0ZFVuaXRJbmZvcm1hdGlvbltWdGRJ bmRleF0uSXM1TGV2ZWxQYWdpbmcgPSBUUlVFOw0KKyAgICAgIH0gZWxzZSB7DQorICAgICAgICBp ZiAobUFjcGlEbWFyVGFibGUtPkhvc3RBZGRyZXNzV2lkdGggPiA0OCkgew0KKyAgICAgICAgICBE RUJVRygoREVCVUdfRVJST1IsICJVc2luZyA1LWxldmVsIHBhZ2UtdGFibGUgb24gVlREICVkXG4i LCBWdGRJbmRleCkpOw0KKyAgICAgICAgICBFeHRDb250ZXh0RW50cnktPkJpdHMuQWRkcmVzc1dp ZHRoID0gMHgzOw0KKyAgICAgICAgICBtVnRkVW5pdEluZm9ybWF0aW9uW1Z0ZEluZGV4XS5JczVM ZXZlbFBhZ2luZyA9IFRSVUU7DQorICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICBERUJVRygo REVCVUdfRVJST1IsICJVc2luZyA0LWxldmVsIHBhZ2UtdGFibGUgb24gVlREICVkXG4iLCBWdGRJ bmRleCkpOw0KKyAgICAgICAgICBFeHRDb250ZXh0RW50cnktPkJpdHMuQWRkcmVzc1dpZHRoID0g MHgyOw0KKyAgICAgICAgfQ0KKyAgICAgIH0NCisgICAgfSBlbHNlIGlmICgobVZ0ZFVuaXRJbmZv cm1hdGlvbltWdGRJbmRleF0uQ2FwUmVnLkJpdHMuU0FHQVcgJiBCSVQyKSAhPSAwKSB7DQorICAg ICAgREVCVUcoKERFQlVHX0VSUk9SLCAiVXNpbmcgNC1sZXZlbCBwYWdlLXRhYmxlIG9uIFZURCAl ZFxuIiwgVnRkSW5kZXgpKTsNCisgICAgICBFeHRDb250ZXh0RW50cnktPkJpdHMuQWRkcmVzc1dp ZHRoID0gMHgyOw0KKyAgICB9IGVsc2Ugew0KKyAgICAgIERFQlVHKChERUJVR19FUlJPUiwgIiEh ISEgUGFnZS10YWJsZSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQgb24gVlREICVkICEhISFcbiIsIFZ0 ZEluZGV4KSk7DQogICAgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCiAgICAgfQ0KLSAgICBF eHRDb250ZXh0RW50cnktPkJpdHMuQWRkcmVzc1dpZHRoID0gMHgyOw0KICAgfQ0KIA0KICAgRmx1 c2hQYWdlVGFibGVNZW1vcnkgKFZ0ZEluZGV4LCAoVUlOVE4pbVZ0ZFVuaXRJbmZvcm1hdGlvbltW dGRJbmRleF0uRXh0Um9vdEVudHJ5VGFibGUsIEVGSV9QQUdFU19UT19TSVpFKEVudHJ5VGFibGVQ YWdlcykpOw0KQEAgLTkzLDExICsxMTQsMTMgQEAgQ3JlYXRlRXh0Q29udGV4dEVudHJ5ICgKIC8q Kg0KICAgRHVtcCBETUFSIGV4dGVuZGVkIGNvbnRleHQgZW50cnkgdGFibGUuDQogDQotICBAcGFy YW1baW5dICBFeHRSb290RW50cnkgRE1BUiBleHRlbmRlZCByb290IGVudHJ5Lg0KKyAgQHBhcmFt W2luXSAgRXh0Um9vdEVudHJ5ICAgIERNQVIgZXh0ZW5kZWQgcm9vdCBlbnRyeS4NCisgIEBwYXJh bVtpbl0gIElzNUxldmVsUGFnaW5nICBJZiBpdCBpcyB0aGUgNSBsZXZlbCBwYWdpbmcuDQogKiov DQogVk9JRA0KIER1bXBEbWFyRXh0Q29udGV4dEVudHJ5VGFibGUgKA0KLSAgSU4gVlREX0VYVF9S T09UX0VOVFJZICpFeHRSb290RW50cnkNCisgIElOIFZURF9FWFRfUk9PVF9FTlRSWSAqRXh0Um9v dEVudHJ5LA0KKyAgSU4gQk9PTEVBTiBJczVMZXZlbFBhZ2luZw0KICAgKQ0KIHsNCiAgIFVJTlRO ICAgICAgICAgICAgICAgICBJbmRleDsNCkBAIC0xMjcsNyArMTUwLDcgQEAgRHVtcERtYXJFeHRD b250ZXh0RW50cnlUYWJsZSAoCiAgICAgICBpZiAoRXh0Q29udGV4dEVudHJ5W0luZGV4Ml0uQml0 cy5QcmVzZW50ID09IDApIHsNCiAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgIH0NCi0gICAgICBE dW1wU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSAoKFZPSUQgKikoVUlOVE4pVlREXzY0QklUU19BRERS RVNTKEV4dENvbnRleHRFbnRyeVtJbmRleDJdLkJpdHMuU2Vjb25kTGV2ZWxQYWdlVHJhbnNsYXRp b25Qb2ludGVyTG8sIEV4dENvbnRleHRFbnRyeVtJbmRleDJdLkJpdHMuU2Vjb25kTGV2ZWxQYWdl VHJhbnNsYXRpb25Qb2ludGVySGkpKTsNCisgICAgICBEdW1wU2Vjb25kTGV2ZWxQYWdpbmdFbnRy eSAoKFZPSUQgKikoVUlOVE4pVlREXzY0QklUU19BRERSRVNTKEV4dENvbnRleHRFbnRyeVtJbmRl eDJdLkJpdHMuU2Vjb25kTGV2ZWxQYWdlVHJhbnNsYXRpb25Qb2ludGVyTG8sIEV4dENvbnRleHRF bnRyeVtJbmRleDJdLkJpdHMuU2Vjb25kTGV2ZWxQYWdlVHJhbnNsYXRpb25Qb2ludGVySGkpLCBJ czVMZXZlbFBhZ2luZyk7DQogICAgIH0NCiANCiAgICAgaWYgKEV4dFJvb3RFbnRyeVtJbmRleF0u Qml0cy5VcHBlclByZXNlbnQgPT0gMCkgew0KZGlmZiAtLWdpdCBhL1NpbGljb24vSW50ZWwvSW50 ZWxTaWxpY29uUGtnL0ZlYXR1cmUvVlRkL0ludGVsVlRkRHhlL1Z0ZFJlZy5jIGIvU2lsaWNvbi9J bnRlbC9JbnRlbFNpbGljb25Qa2cvRmVhdHVyZS9WVGQvSW50ZWxWVGREeGUvVnRkUmVnLmMKaW5k ZXggNjk5NjM5YmEuLjY4NmQyMzVmIDEwMDY0NAotLS0gYS9TaWxpY29uL0ludGVsL0ludGVsU2ls aWNvblBrZy9GZWF0dXJlL1ZUZC9JbnRlbFZUZER4ZS9WdGRSZWcuYworKysgYi9TaWxpY29uL0lu dGVsL0ludGVsU2lsaWNvblBrZy9GZWF0dXJlL1ZUZC9JbnRlbFZUZER4ZS9WdGRSZWcuYwpAQCAt MTc0LDggKzE3NCwxNCBAQCBQcmVwYXJlVnRkQ29uZmlnICgKICAgICBpZiAoKG1WdGRVbml0SW5m b3JtYXRpb25bSW5kZXhdLkNhcFJlZy5CaXRzLlNMTFBTICYgQklUMCkgPT0gMCkgew0KICAgICAg IERFQlVHKChERUJVR19XQVJOLCAiISEhISAyTUIgc3VwZXIgcGFnZSBpcyBub3Qgc3VwcG9ydGVk IG9uIFZURCAlZCAhISEhXG4iLCBJbmRleCkpOw0KICAgICB9DQotICAgIGlmICgobVZ0ZFVuaXRJ bmZvcm1hdGlvbltJbmRleF0uQ2FwUmVnLkJpdHMuU0FHQVcgJiBCSVQyKSA9PSAwKSB7DQotICAg ICAgREVCVUcoKERFQlVHX0VSUk9SLCAiISEhISA0LWxldmVsIHBhZ2UtdGFibGUgaXMgbm90IHN1 cHBvcnRlZCBvbiBWVEQgJWQgISEhIVxuIiwgSW5kZXgpKTsNCisgICAgaWYgKChtVnRkVW5pdElu Zm9ybWF0aW9uW0luZGV4XS5DYXBSZWcuQml0cy5TQUdBVyAmIEJJVDMpICE9IDApIHsNCisgICAg ICBERUJVRygoREVCVUdfSU5GTywgIlN1cHBvcnQgNS1sZXZlbCBwYWdlLXRhYmxlIG9uIFZURCAl ZFxuIiwgSW5kZXgpKTsNCisgICAgfQ0KKyAgICBpZiAoKG1WdGRVbml0SW5mb3JtYXRpb25bSW5k ZXhdLkNhcFJlZy5CaXRzLlNBR0FXICYgQklUMikgIT0gMCkgew0KKyAgICAgIERFQlVHKChERUJV R19JTkZPLCAiU3VwcG9ydCA0LWxldmVsIHBhZ2UtdGFibGUgb24gVlREICVkXG4iLCBJbmRleCkp Ow0KKyAgICB9DQorICAgIGlmICgobVZ0ZFVuaXRJbmZvcm1hdGlvbltJbmRleF0uQ2FwUmVnLkJp dHMuU0FHQVcgJiAoQklUMyB8IEJJVDIpKSA9PSAwKSB7DQorICAgICAgREVCVUcoKERFQlVHX0VS Uk9SLCAiISEhISBQYWdlLXRhYmxlIHR5cGUgMHglWCBpcyBub3Qgc3VwcG9ydGVkIG9uIFZURCAl ZCAhISEhXG4iLCBJbmRleCwgbVZ0ZFVuaXRJbmZvcm1hdGlvbltJbmRleF0uQ2FwUmVnLkJpdHMu U0FHQVcpKTsNCiAgICAgICByZXR1cm4gOw0KICAgICB9DQogDQpkaWZmIC0tZ2l0IGEvU2lsaWNv bi9JbnRlbC9JbnRlbFNpbGljb25Qa2cvSW50ZWxTaWxpY29uUGtnLmRlYyBiL1NpbGljb24vSW50 ZWwvSW50ZWxTaWxpY29uUGtnL0ludGVsU2lsaWNvblBrZy5kZWMKaW5kZXggMjg0ODIwYWYuLjhm MWVkZmUyIDEwMDY0NAotLS0gYS9TaWxpY29uL0ludGVsL0ludGVsU2lsaWNvblBrZy9JbnRlbFNp bGljb25Qa2cuZGVjCisrKyBiL1NpbGljb24vSW50ZWwvSW50ZWxTaWxpY29uUGtnL0ludGVsU2ls aWNvblBrZy5kZWMKQEAgLTk1LDYgKzk1LDkgQEAKICAgIyAgQklUMDogRW5hYmxlIElPTU1VIGR1 cmluZyBib290IChJZiBETUFSIHRhYmxlIGlzIGluc3RhbGxlZCBpbiBEWEUuIElmIFZURF9JTkZP X1BQSSBpcyBpbnN0YWxsZWQgaW4gUEVJLikNCiAgICMgIEJJVDE6IEVuYWJsZSBJT01NVSB3aGVu IHRyYW5zZmVyIGNvbnRyb2wgdG8gT1MgKEV4aXRCb290U2VydmljZSBpbiBub3JtYWwgYm9vdC4g RW5kT2ZQRUkgaW4gUzMpDQogICAjICBCSVQyOiBGb3JjZSBubyBJT01NVSBhY2Nlc3MgYXR0cmli dXRlIHJlcXVlc3QgcmVjb3JkaW5nIGJlZm9yZSBETUFSIHRhYmxlIGlzIGluc3RhbGxlZC4NCisg ICMgIEJJVDM6IEZvcmNlIHRvIHVzZSA0IGxldmVsIHBhZ2luZy4NCisgICMgIEJJVDQ6IElmIGlv bW11IHN1cHBvcnQgNSBsZXZlbCBwYWdpbmcsIGZvcmNlIHRvIHVzZSA1IGxldmVsIHBhZ2luZy4N CisgICMgICAgKElmIGJvdGggQklUMyBhbmQgQklUNCBhcmUgc2V0LCBmb3JjZSB0byB1c2UgNCBs ZXZlbCBwYWdpbmcuKQ0KICAgIyBAUHJvbXB0IFRoZSBwb2xpY3kgZm9yIFZUZCBkcml2ZXIgYmVo YXZpb3IuDQogICBnSW50ZWxTaWxpY29uUGtnVG9rZW5TcGFjZUd1aWQuUGNkVlRkUG9saWN5UHJv cGVydHlNYXNrfDF8VUlOVDh8MHgwMDAwMDAwMg0KIA0KLS0gCjIuMTYuMi53aW5kb3dzLjEKCg== --_002_CY4PR11MB1928B26C479E7858A79D6144E1E10CY4PR11MB1928namp_--