From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by mx.groups.io with SMTP id smtpd.web10.47900.1606196632262550191 for ; Mon, 23 Nov 2020 21:43:52 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=bvMKeaiR; spf=pass (domain: intel.com, ip: 192.55.52.93, mailfrom: w.sheng@intel.com) IronPort-SDR: gET5DToBawFaMLhbYIzV3WVXKkFMANE0KdSArF+2LJDlK22oifU2hE6zm5iAL3Xgp0ihFCYmYL vL4rO6xv0ZuA== X-IronPort-AV: E=McAfee;i="6000,8403,9814"; a="168384524" X-IronPort-AV: E=Sophos;i="5.78,365,1599548400"; d="scan'208";a="168384524" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Nov 2020 21:43:51 -0800 IronPort-SDR: 8GdyZblw6k84WzpDgHFOzI8dxgu63LOzvO1upNY0uFfonbPeV/9ey4rh126V803Q6yTHpatg2L oIoAGQLcWOog== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.78,365,1599548400"; d="scan'208";a="478385793" Received: from fmsmsx604.amr.corp.intel.com ([10.18.126.84]) by orsmga004.jf.intel.com with ESMTP; 23 Nov 2020 21:43:50 -0800 Received: from fmsmsx611.amr.corp.intel.com (10.18.126.91) by fmsmsx604.amr.corp.intel.com (10.18.126.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 23 Nov 2020 21:43:50 -0800 Received: from fmsmsx601.amr.corp.intel.com (10.18.126.81) by fmsmsx611.amr.corp.intel.com (10.18.126.91) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 23 Nov 2020 21:43:49 -0800 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) by fmsmsx601.amr.corp.intel.com (10.18.126.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5 via Frontend Transport; Mon, 23 Nov 2020 21:43:49 -0800 Received: from NAM02-SN1-obe.outbound.protection.outlook.com (104.47.36.55) by edgegateway.intel.com (192.55.55.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.1713.5; Mon, 23 Nov 2020 21:43:49 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Xi3W/H+LTQ6usfqfPVr9JPYJ7k43LePRPPWa8yk0XX1IVV0AqLSqw+V0TkHerlxs/6hc0ql2IkyLlvgTvE6SLSevEx5zaZE+hjywhANBA+iQPDbb+V9tbM0SC8MtV8AL4AelFD5QPozR24/s7YAp+UgtUGL3DfqgIc9cdU1J8UHSxC1+reJu0yzPbm5Om2ThhB+QeW5mUtDwYEvHy1fKu0YcFIvUHMPE/e0DXJdM8ro7D+zJbwlrkR1lRug0wigayQ15N0BQDyjFmZfhYowupfYlP58hMX+hix3ClegFukg1GN39mWDpvU6Or1nGq5RHP5FpxpqaroH+3xDxuwZEjg== 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=QlJf1WkP9EKi/wmHZ+x62VGiqxzbK7ilNIzZRfHKUoQ=; b=iDQsG/PN80NdYqjSSQ7LaVSoQPermHJbc77WXI+BwPLDOnmGwXfHuXBMHNXlC7NJJsc10I7bzxBRjjWQhWl0eVmkwX+AlvyKHyPyf8H+8CDXFz5cgCfU5uv3AMJHv6B3rDlamB6kLnyV/WufvRXBxJZg5cUFdUwJbU+loQosLV2thIK/b1rnBduTukLWNAhWMrrD5jFqlrQFJL0kkE4v/opUeJJPRYpBYH9RBiEgal0blxfogn0ihlOJpuR6S4HktF/fUg2zmo2u+mS6fBDHRIgFGyXfdHmo8TOVB47bkQxhXjJmDM6VT2I/SBjWQWL9E/I+MP8AfL7H5BXpD20S5A== 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=QlJf1WkP9EKi/wmHZ+x62VGiqxzbK7ilNIzZRfHKUoQ=; b=bvMKeaiRAdRmVDg7W1SCvTIm15wjZE3Lc5zqGN4HMmJmri3AE3GovUEW6exdcrL45FGbjnjc157mYG3UmjJ3OmkkJA/TXTh3G2jjipacaW6ru6yXphazN328Dgq8t3BhfumPG58qX0n+vIjIWM1bIpnsXz6X9TZIzV/03xCtE5w= Received: from CY4PR11MB1928.namprd11.prod.outlook.com (2603:10b6:903:11e::18) by CY4PR11MB1413.namprd11.prod.outlook.com (2603:10b6:903:2f::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.30; Tue, 24 Nov 2020 05:43:47 +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.3589.025; Tue, 24 Nov 2020 05:43:47 +0000 From: "Sheng Wei" To: "Yao, Jiewen" , "devel@edk2.groups.io" CC: "Ni, Ray" , "Chaganty, Rangasai V" , "Huang, Jenny" Subject: Re: [PATCH v4] IntelSiliconPkg/VTd: Add iommu 5 level paging support Thread-Topic: [PATCH v4] IntelSiliconPkg/VTd: Add iommu 5 level paging support Thread-Index: AQHWwXTAEmKUArbu602ak0ZRkN8TP6nWxY5w Date: Tue, 24 Nov 2020 05:43:47 +0000 Message-ID: References: <20201123080345.21772-1-w.sheng@intel.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: 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.55.46.39] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 6313078d-e314-4211-d71a-08d8903bea18 x-ms-traffictypediagnostic: CY4PR11MB1413: 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: egmdppb05FDppupRkSLUnJEoF9trvOdwfdeUnBSN2PLZ+axBTFHFZHeLXOApJwJ1djHEsJqoiyMkGRV0GebIgznWbYAzLoe9D1U7IJGj8XRl0DBjAdJKdbTuTTS/e9zX13kSFEyd4oiCJn0fQTFnyLoc9UC9GMj+pM1jEMQ0j/mV/4nChGoK3/5imefz5QtKTDM+95zU0/kSDNN1X+CPbjpO8EawSvWo5ha6cG9tHq1KUEz/tNoiq49BNmXA/p/UxQfZeYtg5IMCz4gD0cwKwa77RAm/0XvtkxC0fYzW2g1v0mcMG2Cl+P+E9SCwqxv6TDu4hW259ftfcCoefLlcqaL9rM43GO/vFx0clppEewYLAHukPE1Qf6ex1b6xiN6F/sOj/dJbpAHTnFI3V1/zZA== 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)(39860400002)(366004)(376002)(136003)(346002)(396003)(107886003)(186003)(26005)(9686003)(52536014)(8676002)(966005)(83380400001)(110136005)(55016002)(316002)(5660300002)(54906003)(6506007)(86362001)(478600001)(2906002)(8936002)(53546011)(66446008)(66946007)(66476007)(33656002)(7696005)(71200400001)(66556008)(64756008)(30864003)(4326008)(76116006)(559001)(579004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: =?gb2312?B?NzFFR0FmMWtwam9zZXM3THVBL3NhQTNHNG1JNDA4ak4xWk0rNm93d0t0c2Fy?= =?gb2312?B?bFpxcUI0OVQ2QnZXRHdQVUxjUGRmYnVZV0lRbmF6NEc4OXJkM1hLNUQ5WFJv?= =?gb2312?B?b0hPcFhWMXoycHNDK0JuS3hPeEpPUkxNVk5VQW9OaXU5QVkvQXNmYkE2S3Rq?= =?gb2312?B?cmNBL1JPUnZjOHZPUFRrMzl4dFArTUEvV2dqQ2dEU1RpR1k1R2FSZGpoSis4?= =?gb2312?B?UG5FcVpyV2tYZUdBbWJuL0RLR2ovTCtmN3NKWTZDODJQaXdtNExCVGhzYUJE?= =?gb2312?B?NXZ5RVVWMjZPMm5pbjlsY1J1WGpWNzRXd21NTDJVMk1Zb2wyRFBtbEh2SnNw?= =?gb2312?B?eVhWcy9OMHRKdkRnQXNrTU0xMEVnMmdQRUtlcVV3MExyei9vNVJ5UTZJZ0VQ?= =?gb2312?B?T0hwRUZwOFVJcGFyZVNGSExVcEpVOFdBaUUrN29wVmtkQ1QxSTFhTGdNbUp4?= =?gb2312?B?dnNjSHlKNjBOU2xrT05xdGxkd21ac0lyYnhPZk1aQ3A1YUJROVdFUEVmcDlp?= =?gb2312?B?YzF0VEQrRFhlTWxuSkdNMGNJYnBpQSs4Skphd3g4YUZKWk5RbmNrNWsvQ2dx?= =?gb2312?B?NkRKSS9RVXVCdDdIeW1XUXJldnMrTkxFTHRzRU9YNUkwTHZPbFlseDFUck15?= =?gb2312?B?eVpXcVpZM1NGMmtBTnAya0t2eklVTEYrWTdaVTBZTjRoaE1waDNUSnBxV0FG?= =?gb2312?B?NGlicXZFNXBUWlZCYjI2dVhPbU1Cb2VBbUdXYXdUdVRIYUl5MEJaS3Fubmhj?= =?gb2312?B?OXhlMFR1R2txMitJVHB4aTRiYlUzWTlReDU4ZzZjOGJmVDFRUGpUOU1MR3FG?= =?gb2312?B?SGpLV0ZYN2NBbHU0aUNKdm10bkhzSmNvbG5wOEIxUFVicHBqZ0MySk0yZ0ZZ?= =?gb2312?B?REJ3TkZxeXJNaHZJSjREZWMvZUZ3U2tCT2RBQjVGbTV2bzZpMVBOajA1bmE3?= =?gb2312?B?SnJjMkV1cHQwdEVPTjlKcG16U1lOM2tKeVFoUUl5Z0V1TFR2dmIrRGJhRnY3?= =?gb2312?B?NFVkaTIrSURJY1JyTUplbiszTGxDazF2ZzFrZFk2eUN0MVV2VU1XckR3Uzdi?= =?gb2312?B?bTlDMExLMVRoQkZITGl6UHhuaHJkRVQ4OXBZekp0VmthVjc5SWovMGwyRUJI?= =?gb2312?B?RDdxVDhiSjBteVc0NzAwNVN5aHVQKzRjSEJ2dm9zNkJ3a01keitDMkRIQjM4?= =?gb2312?B?ZlFRUVNCZVFZMmo0NjY3K1RKd1hwNUtiNkFaRjNVVEdvQjIyVExMZUxVdk9r?= =?gb2312?B?M3ZEY0JXL0I4TWZ6UHJRcDdFVGF3T2pWUjhGRS9EZS84S0Z6NHNiRFI1WkZB?= =?gb2312?Q?3oRuu50breK4c=3D?= 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: 6313078d-e314-4211-d71a-08d8903bea18 X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Nov 2020 05:43:47.6642 (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: WBUoP9AS3osuG9XTKm0C/i0+GTZ1vB7lThxnSFUrBV63M6hnQYiXfV7YdO8hJdiUaIIeOJy7gm0TpefgZwMgIw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR11MB1413 Return-Path: w.sheng@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 SGkgSmlld2VuLCBBbGwsDQpUaGFuayB5b3UgZm9yIHRoZSByZXZpZXcuIEkganVzdCBjaGVjayBh bmQgdXBkYXRlIHRoZSBwYXRjaC4NCmh0dHBzOi8vZWRrMi5ncm91cHMuaW8vZy9kZXZlbC9tZXNz YWdlLzY3ODY1P3A9LCwsMjAsMCwwLDA6OnJlbGV2YW5jZSwscG9zdGVyaWQlM0EyNTU4NTU4LDIw LDIsMCw3ODQ3MTg3NA0KQ291bGQgd2UgY29udGludWUgdGhlIHBhdGNoIHJldmlldyA/DQpCUg0K U2hlbmcgV2VpDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogWWFvLCBK aWV3ZW4gPGppZXdlbi55YW9AaW50ZWwuY29tPg0KPiBTZW50OiAyMDIwxOoxMdTCMjPI1SAxNjo0 NA0KPiBUbzogU2hlbmcsIFcgPHcuc2hlbmdAaW50ZWwuY29tPjsgZGV2ZWxAZWRrMi5ncm91cHMu aW8NCj4gQ2M6IE5pLCBSYXkgPHJheS5uaUBpbnRlbC5jb20+OyBDaGFnYW50eSwgUmFuZ2FzYWkg Vg0KPiA8cmFuZ2FzYWkudi5jaGFnYW50eUBpbnRlbC5jb20+OyBIdWFuZywgSmVubnkgPGplbm55 Lmh1YW5nQGludGVsLmNvbT4NCj4gU3ViamVjdDogUkU6IFtQQVRDSCB2NF0gSW50ZWxTaWxpY29u UGtnL1ZUZDogQWRkIGlvbW11IDUgbGV2ZWwgcGFnaW5nIHN1cHBvcnQNCj4gDQo+IFRoYW5rcy4N Cj4gDQo+IEkgb25seSByZXZpZXdlZCB0aGUgcG9saWN5IHBhcnQuIENvbW1lbnQgYmVsb3c6DQo+ IA0KPiAxKSBJIHJlY29tbWVuZCB5b3UgY2FuIG1lcmdlIGJlbG93IDIgaWYgaW50byBvbmUgLSBp ZiAoKG1BY3BpRG1hclRhYmxlLQ0KPiA+SG9zdEFkZHJlc3NXaWR0aCA8PSA0OCkgJiYNCj4gKG1W dGRVbml0SW5mb3JtYXRpb25bVnRkSW5kZXhdLkNhcFJlZy5CaXRzLlNBR0FXICYgQklUMikgIT0g MCkpIHsgWW91IGNhbg0KPiB1c2UgMiBsaW5lcywgYnV0IHRoZXJlIGlzIG5vIG5lZWQgdG8gdXNl IDIgaWYuDQo+IA0KPiArICAgICAgaWYgKG1BY3BpRG1hclRhYmxlLT5Ib3N0QWRkcmVzc1dpZHRo IDw9IDQ4KSB7DQo+ICsgICAgICAgIGlmICgobVZ0ZFVuaXRJbmZvcm1hdGlvbltWdGRJbmRleF0u Q2FwUmVnLkJpdHMuU0FHQVcgJiBCSVQyKSAhPSAwKSB7DQo+ICsgICAgICAgICAgbVZ0ZFVuaXRJ bmZvcm1hdGlvbltWdGRJbmRleF0uSXM1TGV2ZWxQYWdpbmcgPSBGQUxTRTsNCj4gKyAgICAgICAg fQ0KPiArICAgICAgfQ0KPiANCj4gMikgSSB0aGluayBiZWxvdyBjb2RlIGhhcyB0eXBvLg0KPiBU aGUgREVCVUcgbWVzc2FnZSBhYm91dCA0LWxldmVsIGFuZCA1LWxldmVsIHNob3VsZCBiZSByZXZl cnNlZC4NCj4gQWxzbyB3ZSBzaG91bGQgdXNlIERFQlVHX0lORk8gaW5zdGVhZCBvZiBERUJVR19F UlJPUi4NCj4gDQo+ICsgICAgaWYgKG1WdGRVbml0SW5mb3JtYXRpb25bVnRkSW5kZXhdLklzNUxl dmVsUGFnaW5nKSB7DQo+ICsgICAgICBDb250ZXh0RW50cnktPkJpdHMuQWRkcmVzc1dpZHRoID0g MHgzOw0KPiArICAgICAgREVCVUcoKERFQlVHX0VSUk9SLCAiVXNpbmcgNC1sZXZlbCBwYWdlLXRh YmxlIG9uIFZURCAlZFxuIiwNCj4gVnRkSW5kZXgpKTsNCj4gKyAgICB9IGVsc2Ugew0KPiArICAg ICAgQ29udGV4dEVudHJ5LT5CaXRzLkFkZHJlc3NXaWR0aCA9IDB4MjsNCj4gKyAgICAgIERFQlVH KChERUJVR19FUlJPUiwgIlVzaW5nIDUtbGV2ZWwgcGFnZS10YWJsZSBvbiBWVEQgJWRcbiIsDQo+ IFZ0ZEluZGV4KSk7DQo+ICsgICAgfQ0KPiANCj4gDQo+IA0KPiANCj4gPiAtLS0tLU9yaWdpbmFs IE1lc3NhZ2UtLS0tLQ0KPiA+IEZyb206IFNoZW5nLCBXIDx3LnNoZW5nQGludGVsLmNvbT4NCj4g PiBTZW50OiBNb25kYXksIE5vdmVtYmVyIDIzLCAyMDIwIDQ6MDQgUE0NCj4gPiBUbzogZGV2ZWxA ZWRrMi5ncm91cHMuaW8NCj4gPiBDYzogTmksIFJheSA8cmF5Lm5pQGludGVsLmNvbT47IENoYWdh bnR5LCBSYW5nYXNhaSBWDQo+ID4gPHJhbmdhc2FpLnYuY2hhZ2FudHlAaW50ZWwuY29tPjsgWWFv LCBKaWV3ZW4gPGppZXdlbi55YW9AaW50ZWwuY29tPjsNCj4gPiBIdWFuZywgSmVubnkgPGplbm55 Lmh1YW5nQGludGVsLmNvbT4NCj4gPiBTdWJqZWN0OiBbUEFUQ0ggdjRdIEludGVsU2lsaWNvblBr Zy9WVGQ6IEFkZCBpb21tdSA1IGxldmVsIHBhZ2luZw0KPiA+IHN1cHBvcnQNCj4gPg0KPiA+IFN1 cHBvcnQgaW9tbXUgNSBsZXZlbCBwYWdpbmcgZm9yIHRyYW5zbGF0aW9uIHRhYmxlLg0KPiA+DQo+ ID4gUkVGOiBodHRwczovL2J1Z3ppbGxhLnRpYW5vY29yZS5vcmcvc2hvd19idWcuY2dpP2lkPTMw NjcNCj4gPg0KPiA+IFNpZ25lZC1vZmYtYnk6IFNoZW5nIFdlaSA8dy5zaGVuZ0BpbnRlbC5jb20+ DQo+ID4gQ2M6IFJheSBOaSA8cmF5Lm5pQGludGVsLmNvbT4NCj4gPiBDYzogUmFuZ2FzYWkgViBD aGFnYW50eSA8cmFuZ2FzYWkudi5jaGFnYW50eUBpbnRlbC5jb20+DQo+ID4gQ2M6IEppZXdlbiBZ YW8gPGppZXdlbi55YW9AaW50ZWwuY29tPg0KPiA+IENjOiBKZW5ueSBIdWFuZyA8amVubnkuaHVh bmdAaW50ZWwuY29tPg0KPiA+IC0tLQ0KPiA+ICAuLi4vRmVhdHVyZS9WVGQvSW50ZWxWVGREeGUv RG1hUHJvdGVjdGlvbi5jICAgICAgICB8ICAgNCArLQ0KPiA+ICAuLi4vRmVhdHVyZS9WVGQvSW50 ZWxWVGREeGUvRG1hUHJvdGVjdGlvbi5oICAgICAgICB8ICAxOSArLQ0KPiA+ICAuLi4vRmVhdHVy ZS9WVGQvSW50ZWxWVGREeGUvVHJhbnNsYXRpb25UYWJsZS5jICAgICB8IDI4MSArKysrKysrKysr KysrKystLQ0KPiA+IC0tLS0NCj4gPiAgLi4uL0ZlYXR1cmUvVlRkL0ludGVsVlRkRHhlL1RyYW5z bGF0aW9uVGFibGVFeC5jICAgfCAgMzEgKystDQo+ID4gIC4uLi9GZWF0dXJlL1ZUZC9JbnRlbFZU ZER4ZS9WdGRSZWcuYyAgICAgICAgICAgICAgIHwgIDEwICstDQo+ID4gIDUgZmlsZXMgY2hhbmdl ZCwgMjQ1IGluc2VydGlvbnMoKyksIDEwMCBkZWxldGlvbnMoLSkNCj4gPg0KPiA+IGRpZmYgLS1n aXQNCj4gPiBhL1NpbGljb24vSW50ZWwvSW50ZWxTaWxpY29uUGtnL0ZlYXR1cmUvVlRkL0ludGVs VlRkRHhlL0RtYVByb3RlY3Rpb24uDQo+ID4gYw0KPiA+IGIvU2lsaWNvbi9JbnRlbC9JbnRlbFNp bGljb25Qa2cvRmVhdHVyZS9WVGQvSW50ZWxWVGREeGUvRG1hUHJvdGVjdGlvbi4NCj4gPiBjDQo+ ID4gaW5kZXggOWI2MTM1ZWYuLjYyODU2NWVlIDEwMDY0NA0KPiA+IC0tLQ0KPiA+IGEvU2lsaWNv bi9JbnRlbC9JbnRlbFNpbGljb25Qa2cvRmVhdHVyZS9WVGQvSW50ZWxWVGREeGUvRG1hUHJvdGVj dGlvbi4NCj4gPiBjDQo+ID4gKysrDQo+ID4gYi9TaWxpY29uL0ludGVsL0ludGVsU2lsaWNvblBr Zy9GZWF0dXJlL1ZUZC9JbnRlbFZUZER4ZS9EbWFQcm90ZWN0aW9uLg0KPiA+IGMNCj4gPiBAQCAt NTIzLDEwICs1MjMsMTAgQEAgU2V0dXBWdGQgKA0KPiA+ICAgIGZvciAoSW5kZXggPSAwOyBJbmRl eCA8IG1WdGRVbml0TnVtYmVyOyBJbmRleCsrKSB7DQo+ID4gICAgICBERUJVRyAoKERFQlVHX0lO Rk8sIlZURCBVbml0ICVkIChTZWdtZW50OiAlMDR4KVxuIiwgSW5kZXgsDQo+ID4gbVZ0ZFVuaXRJ bmZvcm1hdGlvbltJbmRleF0uU2VnbWVudCkpOw0KPiA+ICAgICAgaWYgKG1WdGRVbml0SW5mb3Jt YXRpb25bSW5kZXhdLkV4dFJvb3RFbnRyeVRhYmxlICE9IE5VTEwpIHsNCj4gPiAtICAgICAgRHVt cERtYXJFeHRDb250ZXh0RW50cnlUYWJsZQ0KPiA+IChtVnRkVW5pdEluZm9ybWF0aW9uW0luZGV4 XS5FeHRSb290RW50cnlUYWJsZSk7DQo+ID4gKyAgICAgIER1bXBEbWFyRXh0Q29udGV4dEVudHJ5 VGFibGUNCj4gPiAobVZ0ZFVuaXRJbmZvcm1hdGlvbltJbmRleF0uRXh0Um9vdEVudHJ5VGFibGUs DQo+ID4gbVZ0ZFVuaXRJbmZvcm1hdGlvbltJbmRleF0uSXM1TGV2ZWxQYWdpbmcpOw0KPiA+ICAg ICAgfQ0KPiA+ICAgICAgaWYgKG1WdGRVbml0SW5mb3JtYXRpb25bSW5kZXhdLlJvb3RFbnRyeVRh YmxlICE9IE5VTEwpIHsNCj4gPiAtICAgICAgRHVtcERtYXJDb250ZXh0RW50cnlUYWJsZQ0KPiA+ IChtVnRkVW5pdEluZm9ybWF0aW9uW0luZGV4XS5Sb290RW50cnlUYWJsZSk7DQo+ID4gKyAgICAg IER1bXBEbWFyQ29udGV4dEVudHJ5VGFibGUNCj4gPiAobVZ0ZFVuaXRJbmZvcm1hdGlvbltJbmRl eF0uUm9vdEVudHJ5VGFibGUsDQo+ID4gbVZ0ZFVuaXRJbmZvcm1hdGlvbltJbmRleF0uSXM1TGV2 ZWxQYWdpbmcpOw0KPiA+ICAgICAgfQ0KPiA+ICAgIH0NCj4gPg0KPiA+IGRpZmYgLS1naXQNCj4g PiBhL1NpbGljb24vSW50ZWwvSW50ZWxTaWxpY29uUGtnL0ZlYXR1cmUvVlRkL0ludGVsVlRkRHhl L0RtYVByb3RlY3Rpb24uDQo+ID4gaA0KPiA+IGIvU2lsaWNvbi9JbnRlbC9JbnRlbFNpbGljb25Q a2cvRmVhdHVyZS9WVGQvSW50ZWxWVGREeGUvRG1hUHJvdGVjdGlvbi4NCj4gPiBoDQo+ID4gaW5k ZXggYTMzMzFkYjguLmY2NDFjZWEwIDEwMDY0NA0KPiA+IC0tLQ0KPiA+IGEvU2lsaWNvbi9JbnRl bC9JbnRlbFNpbGljb25Qa2cvRmVhdHVyZS9WVGQvSW50ZWxWVGREeGUvRG1hUHJvdGVjdGlvbi4N Cj4gPiBoDQo+ID4gKysrDQo+ID4gYi9TaWxpY29uL0ludGVsL0ludGVsU2lsaWNvblBrZy9GZWF0 dXJlL1ZUZC9JbnRlbFZUZER4ZS9EbWFQcm90ZWN0aW9uLg0KPiA+IGgNCj4gPiBAQCAtNzcsNiAr NzcsNyBAQCB0eXBlZGVmIHN0cnVjdCB7DQo+ID4gICAgQk9PTEVBTiAgICAgICAgICAgICAgICAg ICAgICAgICAgSGFzRGlydHlDb250ZXh0Ow0KPiA+ICAgIEJPT0xFQU4gICAgICAgICAgICAgICAg ICAgICAgICAgIEhhc0RpcnR5UGFnZXM7DQo+ID4gICAgUENJX0RFVklDRV9JTkZPUk1BVElPTiAg ICAgICAgICAgUGNpRGV2aWNlSW5mbzsNCj4gPiArICBCT09MRUFOICAgICAgICAgICAgICAgICAg ICAgICAgICBJczVMZXZlbFBhZ2luZzsNCj4gPiAgfSBWVERfVU5JVF9JTkZPUk1BVElPTjsNCj4g Pg0KPiA+ICAvLw0KPiA+IEBAIC0zNzUsMzEgKzM3NiwzNyBAQCBQYXJzZURtYXJBY3BpVGFibGVS bXJyICgNCj4gPiAgLyoqDQo+ID4gICAgRHVtcCBETUFSIGNvbnRleHQgZW50cnkgdGFibGUuDQo+ ID4NCj4gPiAtICBAcGFyYW1baW5dICBSb290RW50cnkgRE1BUiByb290IGVudHJ5Lg0KPiA+ICsg IEBwYXJhbVtpbl0gIFJvb3RFbnRyeSAgICAgICBETUFSIHJvb3QgZW50cnkuDQo+ID4gKyAgQHBh cmFtW2luXSAgSXM1TGV2ZWxQYWdpbmcgIElmIGl0IGlzIHRoZSA1IGxldmVsIHBhZ2luZy4NCj4g PiAgKiovDQo+ID4gIFZPSUQNCj4gPiAgRHVtcERtYXJDb250ZXh0RW50cnlUYWJsZSAoDQo+ID4g LSAgSU4gVlREX1JPT1RfRU5UUlkgKlJvb3RFbnRyeQ0KPiA+ICsgIElOIFZURF9ST09UX0VOVFJZ ICpSb290RW50cnksDQo+ID4gKyAgSU4gQk9PTEVBTiBJczVMZXZlbFBhZ2luZw0KPiA+ICAgICk7 DQo+ID4NCj4gPiAgLyoqDQo+ID4gICAgRHVtcCBETUFSIGV4dGVuZGVkIGNvbnRleHQgZW50cnkg dGFibGUuDQo+ID4NCj4gPiAtICBAcGFyYW1baW5dICBFeHRSb290RW50cnkgRE1BUiBleHRlbmRl ZCByb290IGVudHJ5Lg0KPiA+ICsgIEBwYXJhbVtpbl0gIEV4dFJvb3RFbnRyeSAgICBETUFSIGV4 dGVuZGVkIHJvb3QgZW50cnkuDQo+ID4gKyAgQHBhcmFtW2luXSAgSXM1TGV2ZWxQYWdpbmcgIElm IGl0IGlzIHRoZSA1IGxldmVsIHBhZ2luZy4NCj4gPiAgKiovDQo+ID4gIFZPSUQNCj4gPiAgRHVt cERtYXJFeHRDb250ZXh0RW50cnlUYWJsZSAoDQo+ID4gLSAgSU4gVlREX0VYVF9ST09UX0VOVFJZ ICpFeHRSb290RW50cnkNCj4gPiArICBJTiBWVERfRVhUX1JPT1RfRU5UUlkgKkV4dFJvb3RFbnRy eSwgIElOIEJPT0xFQU4gSXM1TGV2ZWxQYWdpbmcNCj4gPiAgICApOw0KPiA+DQo+ID4gIC8qKg0K PiA+ICAgIER1bXAgRE1BUiBzZWNvbmQgbGV2ZWwgcGFnaW5nIGVudHJ5Lg0KPiA+DQo+ID4gLSAg QHBhcmFtW2luXSAgU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSBUaGUgc2Vjb25kIGxldmVsIHBhZ2lu ZyBlbnRyeS4NCj4gPiArICBAcGFyYW1baW5dICBTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5ICBUaGUg c2Vjb25kIGxldmVsIHBhZ2luZyBlbnRyeS4NCj4gPiArICBAcGFyYW1baW5dICBJczVMZXZlbFBh Z2luZyAgICAgICAgICBJZiBpdCBpcyB0aGUgNSBsZXZlbCBwYWdpbmcuDQo+ID4gICoqLw0KPiA+ ICBWT0lEDQo+ID4gIER1bXBTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5ICgNCj4gPiAtICBJTiBWT0lE ICpTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5DQo+ID4gKyAgSU4gVk9JRCAqU2Vjb25kTGV2ZWxQYWdp bmdFbnRyeSwNCj4gPiArICBJTiBCT09MRUFOIElzNUxldmVsUGFnaW5nDQo+ID4gICAgKTsNCj4g Pg0KPiA+ICAvKioNCj4gPiBkaWZmIC0tZ2l0DQo+ID4gYS9TaWxpY29uL0ludGVsL0ludGVsU2ls aWNvblBrZy9GZWF0dXJlL1ZUZC9JbnRlbFZUZER4ZS9UcmFuc2xhdGlvblRhYg0KPiA+IGxlLmMN Cj4gPiBiL1NpbGljb24vSW50ZWwvSW50ZWxTaWxpY29uUGtnL0ZlYXR1cmUvVlRkL0ludGVsVlRk RHhlL1RyYW5zbGF0aW9uVGFiDQo+ID4gbGUuYw0KPiA+IGluZGV4IDIwMWQ2NjNkLi42Yzc4NmI0 MCAxMDA2NDQNCj4gPiAtLS0NCj4gPiBhL1NpbGljb24vSW50ZWwvSW50ZWxTaWxpY29uUGtnL0Zl YXR1cmUvVlRkL0ludGVsVlRkRHhlL1RyYW5zbGF0aW9uVGFiDQo+ID4gbGUuYw0KPiA+ICsrKw0K PiA+IGIvU2lsaWNvbi9JbnRlbC9JbnRlbFNpbGljb25Qa2cvRmVhdHVyZS9WVGQvSW50ZWxWVGRE eGUvVHJhbnNsYXRpb25UYWINCj4gPiBsZS5jIEBAIC0xMjgsMTEgKzEyOCwyNiBAQCBDcmVhdGVD b250ZXh0RW50cnkgKA0KPiA+DQo+ID4gICAgICBERUJVRyAoKERFQlVHX0lORk8sIlNvdXJjZTog UyUwNHggQiUwMnggRCUwMnggRiUwMnhcbiIsDQo+ID4gbVZ0ZFVuaXRJbmZvcm1hdGlvbltWdGRJ bmRleF0uU2VnbWVudCwgU291cmNlSWQuQml0cy5CdXMsDQo+ID4gU291cmNlSWQuQml0cy5EZXZp Y2UsIFNvdXJjZUlkLkJpdHMuRnVuY3Rpb24pKTsNCj4gPg0KPiA+IC0gICAgaWYgKChtVnRkVW5p dEluZm9ybWF0aW9uW1Z0ZEluZGV4XS5DYXBSZWcuQml0cy5TQUdBVyAmIEJJVDIpID09IDApIHsN Cj4gPiAtICAgICAgREVCVUcoKERFQlVHX0VSUk9SLCAiISEhISA0LWxldmVsIHBhZ2UtdGFibGUg aXMgbm90IHN1cHBvcnRlZCBvbg0KPiA+IFZURCAlZCAhISEhXG4iLCBWdGRJbmRleCkpOw0KPiA+ ICsgICAgbVZ0ZFVuaXRJbmZvcm1hdGlvbltWdGRJbmRleF0uSXM1TGV2ZWxQYWdpbmcgPSBGQUxT RTsNCj4gPiArICAgIGlmICgobVZ0ZFVuaXRJbmZvcm1hdGlvbltWdGRJbmRleF0uQ2FwUmVnLkJp dHMuU0FHQVcgJiBCSVQzKSAhPSAwKSB7DQo+ID4gKyAgICAgIG1WdGRVbml0SW5mb3JtYXRpb25b VnRkSW5kZXhdLklzNUxldmVsUGFnaW5nID0gVFJVRTsNCj4gPiArICAgICAgaWYgKG1BY3BpRG1h clRhYmxlLT5Ib3N0QWRkcmVzc1dpZHRoIDw9IDQ4KSB7DQo+ID4gKyAgICAgICAgaWYgKChtVnRk VW5pdEluZm9ybWF0aW9uW1Z0ZEluZGV4XS5DYXBSZWcuQml0cy5TQUdBVyAmIEJJVDIpICE9IDAp IHsNCj4gPiArICAgICAgICAgIG1WdGRVbml0SW5mb3JtYXRpb25bVnRkSW5kZXhdLklzNUxldmVs UGFnaW5nID0gRkFMU0U7DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsgICAgICB9DQo+ID4gKyAgICB9 IGVsc2UgaWYgKChtVnRkVW5pdEluZm9ybWF0aW9uW1Z0ZEluZGV4XS5DYXBSZWcuQml0cy5TQUdB VyAmDQo+ID4gKyBCSVQyKSA9PQ0KPiA+IDApIHsNCj4gPiArICAgICAgREVCVUcoKERFQlVHX0VS Uk9SLCAiISEhISBQYWdlLXRhYmxlIHR5cGUgaXMgbm90IHN1cHBvcnRlZCBvbg0KPiA+IFZURCAl ZCAhISEhXG4iLCBWdGRJbmRleCkpOw0KPiA+ICAgICAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVE Ow0KPiA+ICAgICAgfQ0KPiA+IC0gICAgQ29udGV4dEVudHJ5LT5CaXRzLkFkZHJlc3NXaWR0aCA9 IDB4MjsNCj4gPiArDQo+ID4gKyAgICBpZiAobVZ0ZFVuaXRJbmZvcm1hdGlvbltWdGRJbmRleF0u SXM1TGV2ZWxQYWdpbmcpIHsNCj4gPiArICAgICAgQ29udGV4dEVudHJ5LT5CaXRzLkFkZHJlc3NX aWR0aCA9IDB4MzsNCj4gPiArICAgICAgREVCVUcoKERFQlVHX0VSUk9SLCAiVXNpbmcgNC1sZXZl bCBwYWdlLXRhYmxlIG9uIFZURCAlZFxuIiwNCj4gPiBWdGRJbmRleCkpOw0KPiA+ICsgICAgfSBl bHNlIHsNCj4gPiArICAgICAgQ29udGV4dEVudHJ5LT5CaXRzLkFkZHJlc3NXaWR0aCA9IDB4MjsN Cj4gPiArICAgICAgREVCVUcoKERFQlVHX0VSUk9SLCAiVXNpbmcgNS1sZXZlbCBwYWdlLXRhYmxl IG9uIFZURCAlZFxuIiwNCj4gPiBWdGRJbmRleCkpOw0KPiA+ICsgICAgfQ0KPiA+ICAgIH0NCj4g Pg0KPiA+ICAgIEZsdXNoUGFnZVRhYmxlTWVtb3J5IChWdGRJbmRleCwNCj4gPiAoVUlOVE4pbVZ0 ZFVuaXRJbmZvcm1hdGlvbltWdGRJbmRleF0uUm9vdEVudHJ5VGFibGUsDQo+ID4gRUZJX1BBR0VT X1RPX1NJWkUoRW50cnlUYWJsZVBhZ2VzKSk7DQo+ID4gQEAgLTE0OCw2ICsxNjMsNyBAQCBDcmVh dGVDb250ZXh0RW50cnkgKA0KPiA+ICAgIEBwYXJhbVtpbl0gIE1lbW9yeUJhc2UgICAgICAgICAg ICAgICAgICBUaGUgYmFzZSBvZiB0aGUgbWVtb3J5Lg0KPiA+ICAgIEBwYXJhbVtpbl0gIE1lbW9y eUxpbWl0ICAgICAgICAgICAgICAgICBUaGUgbGltaXQgb2YgdGhlIG1lbW9yeS4NCj4gPiAgICBA cGFyYW1baW5dICBJb01tdUFjY2VzcyAgICAgICAgICAgICAgICAgVGhlIElPTU1VIGFjY2Vzcy4N Cj4gPiArICBAcGFyYW1baW5dICBJczVMZXZlbFBhZ2luZyAgICAgICAgICAgICAgSWYgaXQgaXMg dGhlIDUgbGV2ZWwgcGFnaW5nLg0KPiA+DQo+ID4gICAgQHJldHVybiBUaGUgc2Vjb25kIGxldmVs IHBhZ2luZyBlbnRyeS4NCj4gPiAgKiovDQo+ID4gQEAgLTE1NywxNiArMTczLDIzIEBAIENyZWF0 ZVNlY29uZExldmVsUGFnaW5nRW50cnlUYWJsZSAoDQo+ID4gICAgSU4gVlREX1NFQ09ORF9MRVZF TF9QQUdJTkdfRU5UUlkgKlNlY29uZExldmVsUGFnaW5nRW50cnksDQo+ID4gICAgSU4gVUlOVDY0 ICAgICAgICAgICAgICAgICAgICAgICAgTWVtb3J5QmFzZSwNCj4gPiAgICBJTiBVSU5UNjQgICAg ICAgICAgICAgICAgICAgICAgICBNZW1vcnlMaW1pdCwNCj4gPiAtICBJTiBVSU5UNjQgICAgICAg ICAgICAgICAgICAgICAgICBJb01tdUFjY2Vzcw0KPiA+ICsgIElOIFVJTlQ2NCAgICAgICAgICAg ICAgICAgICAgICAgIElvTW11QWNjZXNzLA0KPiA+ICsgIElOIEJPT0xFQU4gICAgICAgICAgICAg ICAgICAgICAgIElzNUxldmVsUGFnaW5nDQo+ID4gICAgKQ0KPiA+ICB7DQo+ID4gKyAgVUlOVE4g ICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4NTsNCj4gPiAgICBVSU5UTiAgICAgICAgICAg ICAgICAgICAgICAgICAgSW5kZXg0Ow0KPiA+ICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAg ICAgICBJbmRleDM7DQo+ID4gICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4 MjsNCj4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgTHZsNVN0YXJ0Ow0KPiA+ ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICBMdmw1RW5kOw0KPiA+ICsgIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgICAgICBMdmw0UGFnZXNTdGFydDsNCj4gPiArICBVSU5UTiAg ICAgICAgICAgICAgICAgICAgICAgICAgTHZsNFBhZ2VzRW5kOw0KPiA+ICAgIFVJTlROICAgICAg ICAgICAgICAgICAgICAgICAgICBMdmw0U3RhcnQ7DQo+ID4gICAgVUlOVE4gICAgICAgICAgICAg ICAgICAgICAgICAgIEx2bDRFbmQ7DQo+ID4gICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAg ICAgIEx2bDNTdGFydDsNCj4gPiAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgTHZs M0VuZDsNCj4gPiArICBWVERfU0VDT05EX0xFVkVMX1BBR0lOR19FTlRSWSAgKkx2bDVQdEVudHJ5 Ow0KPiA+ICAgIFZURF9TRUNPTkRfTEVWRUxfUEFHSU5HX0VOVFJZICAqTHZsNFB0RW50cnk7DQo+ ID4gICAgVlREX1NFQ09ORF9MRVZFTF9QQUdJTkdfRU5UUlkgICpMdmwzUHRFbnRyeTsNCj4gPiAg ICBWVERfU0VDT05EX0xFVkVMX1BBR0lOR19FTlRSWSAgKkx2bDJQdEVudHJ5OyBAQCAtMTg0LDcg KzIwNyw3DQo+IEBADQo+ID4gQ3JlYXRlU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeVRhYmxlICgNCj4g PiAgICBpZiAoU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSA9PSBOVUxMKSB7DQo+ID4gICAgICBTZWNv bmRMZXZlbFBhZ2luZ0VudHJ5ID0gQWxsb2NhdGVaZXJvUGFnZXMgKDEpOw0KPiA+ICAgICAgaWYg KFNlY29uZExldmVsUGFnaW5nRW50cnkgPT0gTlVMTCkgew0KPiA+IC0gICAgICBERUJVRyAoKERF QlVHX0VSUk9SLCJDb3VsZCBub3QgQWxsb2MgTFZMNCBQVC4gXG4iKSk7DQo+ID4gKyAgICAgIERF QlVHICgoREVCVUdfRVJST1IsIkNvdWxkIG5vdCBBbGxvYyBMVkw0IG9yIExWTDUgUFQuIFxuIikp Ow0KPiA+ICAgICAgICByZXR1cm4gTlVMTDsNCj4gPiAgICAgIH0NCj4gPiAgICAgIEZsdXNoUGFn ZVRhYmxlTWVtb3J5IChWdGRJbmRleCwgKFVJTlROKVNlY29uZExldmVsUGFnaW5nRW50cnksDQo+ ID4gRUZJX1BBR0VTX1RPX1NJWkUoMSkpOyBAQCAtMTk3LDY2ICsyMjAsMTA5IEBADQo+ID4gQ3Jl YXRlU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeVRhYmxlICgNCj4gPiAgICAgIHJldHVybiBTZWNvbmRM ZXZlbFBhZ2luZ0VudHJ5Ow0KPiA+ICAgIH0NCj4gPg0KPiA+IC0gIEx2bDRTdGFydCA9IFJTaGlm dFU2NCAoQmFzZUFkZHJlc3MsIDM5KSAmIDB4MUZGOw0KPiA+IC0gIEx2bDRFbmQgPSBSU2hpZnRV NjQgKEVuZEFkZHJlc3MgLSAxLCAzOSkgJiAweDFGRjsNCj4gPiArICBpZiAoSXM1TGV2ZWxQYWdp bmcpIHsNCj4gPiArICAgIEx2bDVTdGFydCA9IFJTaGlmdFU2NCAoQmFzZUFkZHJlc3MsIDQ4KSAm IDB4MUZGOw0KPiA+ICsgICAgTHZsNUVuZCA9IFJTaGlmdFU2NCAoRW5kQWRkcmVzcyAtIDEsIDQ4 KSAmIDB4MUZGOw0KPiA+ICsgICAgREVCVUcgKChERUJVR19JTkZPLCIgIEx2bDVTdGFydCAtIDB4 JXgsIEx2bDVFbmQgLSAweCV4XG4iLA0KPiA+ICsgTHZsNVN0YXJ0LA0KPiA+IEx2bDVFbmQpKTsN Cj4gPg0KPiA+IC0gIERFQlVHICgoREVCVUdfSU5GTywiICBMdmw0U3RhcnQgLSAweCV4LCBMdmw0 RW5kIC0gMHgleFxuIiwNCj4gPiBMdmw0U3RhcnQsIEx2bDRFbmQpKTsNCj4gPiArICAgIEx2bDRT dGFydCA9IFJTaGlmdFU2NCAoQmFzZUFkZHJlc3MsIDM5KSAmIDB4MUZGOw0KPiA+ICsgICAgTHZs NEVuZCA9IFJTaGlmdFU2NCAoRW5kQWRkcmVzcyAtIDEsIDM5KSAmIDB4MUZGOw0KPiA+DQo+ID4g LSAgTHZsNFB0RW50cnkgPSAoVlREX1NFQ09ORF9MRVZFTF9QQUdJTkdfRU5UUlkNCj4gPiAqKVNl Y29uZExldmVsUGFnaW5nRW50cnk7DQo+ID4gLSAgZm9yIChJbmRleDQgPSBMdmw0U3RhcnQ7IElu ZGV4NCA8PSBMdmw0RW5kOyBJbmRleDQrKykgew0KPiA+IC0gICAgaWYgKEx2bDRQdEVudHJ5W0lu ZGV4NF0uVWludDY0ID09IDApIHsNCj4gPiAtICAgICAgTHZsNFB0RW50cnlbSW5kZXg0XS5VaW50 NjQgPSAoVUlOVDY0KShVSU5UTilBbGxvY2F0ZVplcm9QYWdlcyAoMSk7DQo+ID4gLSAgICAgIGlm IChMdmw0UHRFbnRyeVtJbmRleDRdLlVpbnQ2NCA9PSAwKSB7DQo+ID4gLSAgICAgICAgREVCVUcg KChERUJVR19FUlJPUiwiISEhISEhIEFMTE9DQVRFIExWTDQgUEFHRSBGQUlMDQo+ID4gKDB4JXgp ISEhISEhXG4iLCBJbmRleDQpKTsNCj4gPiAtICAgICAgICBBU1NFUlQoRkFMU0UpOw0KPiA+IC0g ICAgICAgIHJldHVybiBOVUxMOw0KPiA+IC0gICAgICB9DQo+ID4gLSAgICAgIEZsdXNoUGFnZVRh YmxlTWVtb3J5IChWdGRJbmRleCwgKFVJTlROKUx2bDRQdEVudHJ5W0luZGV4NF0uVWludDY0LA0K PiA+IFNJWkVfNEtCKTsNCj4gPiAtICAgICAgU2V0U2Vjb25kTGV2ZWxQYWdpbmdFbnRyeUF0dHJp YnV0ZSAoJkx2bDRQdEVudHJ5W0luZGV4NF0sDQo+ID4gRURLSUlfSU9NTVVfQUNDRVNTX1JFQUQg fCBFREtJSV9JT01NVV9BQ0NFU1NfV1JJVEUpOw0KPiA+IC0gICAgfQ0KPiA+ICsgICAgTHZsNFBh Z2VzU3RhcnQgPSAoTHZsNVN0YXJ0PDw5KSB8IEx2bDRTdGFydDsNCj4gPiArICAgIEx2bDRQYWdl c0VuZCA9IChMdmw1RW5kPDw5KSB8IEx2bDRFbmQ7DQo+ID4gKyAgICBERUJVRyAoKERFQlVHX0lO Rk8sIiAgTHZsNFBhZ2VzU3RhcnQgLSAweCV4LCBMdmw0UGFnZXNFbmQgLQ0KPiA+ICsgMHgleFxu IiwNCj4gPiBMdmw0UGFnZXNTdGFydCwgTHZsNFBhZ2VzRW5kKSk7DQo+ID4NCj4gPiAtICAgIEx2 bDNTdGFydCA9IFJTaGlmdFU2NCAoQmFzZUFkZHJlc3MsIDMwKSAmIDB4MUZGOw0KPiA+IC0gICAg aWYgKEFMSUdOX1ZBTFVFX0xPVyhCYXNlQWRkcmVzcyArIFNJWkVfMUdCLCBTSVpFXzFHQikgPD0N Cj4gPiBFbmRBZGRyZXNzKSB7DQo+ID4gLSAgICAgIEx2bDNFbmQgPSBTSVpFXzRLQi9zaXplb2Yo VlREX1NFQ09ORF9MRVZFTF9QQUdJTkdfRU5UUlkpIC0gMTsNCj4gPiAtICAgIH0gZWxzZSB7DQo+ ID4gLSAgICAgIEx2bDNFbmQgPSBSU2hpZnRVNjQgKEVuZEFkZHJlc3MgLSAxLCAzMCkgJiAweDFG RjsNCj4gPiArICAgIEx2bDVQdEVudHJ5ID0gKFZURF9TRUNPTkRfTEVWRUxfUEFHSU5HX0VOVFJZ DQo+ID4gKilTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5Ow0KPiA+ICsgIH0gZWxzZSB7DQo+ID4gKyAg ICBMdmw1U3RhcnQgPSBSU2hpZnRVNjQgKEJhc2VBZGRyZXNzLCA0OCkgJiAweDFGRjsNCj4gPiAr ICAgIEx2bDVFbmQgPSBMdmw1U3RhcnQ7DQo+ID4gKw0KPiA+ICsgICAgTHZsNFN0YXJ0ID0gUlNo aWZ0VTY0IChCYXNlQWRkcmVzcywgMzkpICYgMHgxRkY7DQo+ID4gKyAgICBMdmw0RW5kID0gUlNo aWZ0VTY0IChFbmRBZGRyZXNzIC0gMSwgMzkpICYgMHgxRkY7DQo+ID4gKyAgICBERUJVRyAoKERF QlVHX0lORk8sIiAgTHZsNFN0YXJ0IC0gMHgleCwgTHZsNEVuZCAtIDB4JXhcbiIsDQo+ID4gKyBM dmw0U3RhcnQsDQo+ID4gTHZsNEVuZCkpOw0KPiA+ICsNCj4gPiArICAgIEx2bDRQdEVudHJ5ID0g KFZURF9TRUNPTkRfTEVWRUxfUEFHSU5HX0VOVFJZDQo+ID4gKilTZWNvbmRMZXZlbFBhZ2luZ0Vu dHJ5Ow0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgZm9yIChJbmRleDUgPSBMdmw1U3RhcnQ7IElu ZGV4NSA8PSBMdmw1RW5kOyBJbmRleDUrKykgew0KPiA+ICsgICAgaWYgKElzNUxldmVsUGFnaW5n KSB7DQo+ID4gKyAgICAgIGlmIChMdmw1UHRFbnRyeVtJbmRleDVdLlVpbnQ2NCA9PSAwKSB7DQo+ ID4gKyAgICAgICAgTHZsNVB0RW50cnlbSW5kZXg1XS5VaW50NjQgPSAoVUlOVDY0KShVSU5UTilB bGxvY2F0ZVplcm9QYWdlcyAoMSk7DQo+ID4gKyAgICAgICAgaWYgKEx2bDVQdEVudHJ5W0luZGV4 NV0uVWludDY0ID09IDApIHsNCj4gPiArICAgICAgICAgIERFQlVHICgoREVCVUdfRVJST1IsIiEh ISEhISBBTExPQ0FURSBMVkw0IFBBR0UgRkFJTA0KPiA+ICgweCV4KSEhISEhIVxuIiwgSW5kZXg1 KSk7DQo+ID4gKyAgICAgICAgICBBU1NFUlQoRkFMU0UpOw0KPiA+ICsgICAgICAgICAgcmV0dXJu IE5VTEw7DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsgICAgICAgIEZsdXNoUGFnZVRhYmxlTWVtb3J5 IChWdGRJbmRleCwNCj4gPiArIChVSU5UTilMdmw1UHRFbnRyeVtJbmRleDVdLlVpbnQ2NCwNCj4g PiBTSVpFXzRLQik7DQo+ID4gKyAgICAgICAgU2V0U2Vjb25kTGV2ZWxQYWdpbmdFbnRyeUF0dHJp YnV0ZSAoJkx2bDVQdEVudHJ5W0luZGV4NV0sDQo+ID4gRURLSUlfSU9NTVVfQUNDRVNTX1JFQUQg fCBFREtJSV9JT01NVV9BQ0NFU1NfV1JJVEUpOw0KPiA+ICsgICAgICB9DQo+ID4gKyAgICAgIEx2 bDRTdGFydCA9IEx2bDRQYWdlc1N0YXJ0ICYgMHgxRkY7DQo+ID4gKyAgICAgIGlmICgoKEluZGV4 NSsxKTw8OSkgPiBMdmw0UGFnZXNFbmQpIHsNCj4gPiArICAgICAgICBMdmw0RW5kID0gU0laRV80 S0Ivc2l6ZW9mKFZURF9TRUNPTkRfTEVWRUxfUEFHSU5HX0VOVFJZKSAtIDE7Ow0KPiA+ICsgICAg ICAgIEx2bDRQYWdlc1N0YXJ0ID0gKEluZGV4NSsxKTw8OTsNCj4gPiArICAgICAgfSBlbHNlIHsN Cj4gPiArICAgICAgICBMdmw0RW5kID0gTHZsNFBhZ2VzRW5kICYgMHgxRkY7DQo+ID4gKyAgICAg IH0NCj4gPiArICAgICAgREVCVUcgKChERUJVR19JTkZPLCIgIEx2bDUoMHgleCk6IEx2bDRTdGFy dCAtIDB4JXgsIEx2bDRFbmQgLQ0KPiA+ICsgMHgleFxuIiwNCj4gPiBJbmRleDUsIEx2bDRTdGFy dCwgTHZsNEVuZCkpOw0KPiA+ICsgICAgICBMdmw0UHRFbnRyeSA9IChWVERfU0VDT05EX0xFVkVM X1BBR0lOR19FTlRSWQ0KPiA+ICopKFVJTlROKVZURF82NEJJVFNfQUREUkVTUyhMdmw1UHRFbnRy eVtJbmRleDVdLkJpdHMuQWRkcmVzc0xvLA0KPiA+IEx2bDVQdEVudHJ5W0luZGV4NV0uQml0cy5B ZGRyZXNzSGkpOw0KPiA+ICAgICAgfQ0KPiA+IC0gICAgREVCVUcgKChERUJVR19JTkZPLCIgIEx2 bDQoMHgleCk6IEx2bDNTdGFydCAtIDB4JXgsIEx2bDNFbmQgLSAweCV4XG4iLA0KPiA+IEluZGV4 NCwgTHZsM1N0YXJ0LCBMdmwzRW5kKSk7DQo+ID4NCj4gPiAtICAgIEx2bDNQdEVudHJ5ID0gKFZU RF9TRUNPTkRfTEVWRUxfUEFHSU5HX0VOVFJZDQo+ID4gKikoVUlOVE4pVlREXzY0QklUU19BRERS RVNTKEx2bDRQdEVudHJ5W0luZGV4NF0uQml0cy5BZGRyZXNzTG8sDQo+ID4gTHZsNFB0RW50cnlb SW5kZXg0XS5CaXRzLkFkZHJlc3NIaSk7DQo+ID4gLSAgICBmb3IgKEluZGV4MyA9IEx2bDNTdGFy dDsgSW5kZXgzIDw9IEx2bDNFbmQ7IEluZGV4MysrKSB7DQo+ID4gLSAgICAgIGlmIChMdmwzUHRF bnRyeVtJbmRleDNdLlVpbnQ2NCA9PSAwKSB7DQo+ID4gLSAgICAgICAgTHZsM1B0RW50cnlbSW5k ZXgzXS5VaW50NjQgPSAoVUlOVDY0KShVSU5UTilBbGxvY2F0ZVplcm9QYWdlcyAoMSk7DQo+ID4g LSAgICAgICAgaWYgKEx2bDNQdEVudHJ5W0luZGV4M10uVWludDY0ID09IDApIHsNCj4gPiAtICAg ICAgICAgIERFQlVHICgoREVCVUdfRVJST1IsIiEhISEhISBBTExPQ0FURSBMVkwzIFBBR0UgRkFJ TCAoMHgleCwNCj4gPiAweCV4KSEhISEhIVxuIiwgSW5kZXg0LCBJbmRleDMpKTsNCj4gPiArICAg IGZvciAoSW5kZXg0ID0gTHZsNFN0YXJ0OyBJbmRleDQgPD0gTHZsNEVuZDsgSW5kZXg0KyspIHsN Cj4gPiArICAgICAgaWYgKEx2bDRQdEVudHJ5W0luZGV4NF0uVWludDY0ID09IDApIHsNCj4gPiAr ICAgICAgICBMdmw0UHRFbnRyeVtJbmRleDRdLlVpbnQ2NCA9IChVSU5UNjQpKFVJTlROKUFsbG9j YXRlWmVyb1BhZ2VzICgxKTsNCj4gPiArICAgICAgICBpZiAoTHZsNFB0RW50cnlbSW5kZXg0XS5V aW50NjQgPT0gMCkgew0KPiA+ICsgICAgICAgICAgREVCVUcgKChERUJVR19FUlJPUiwiISEhISEh IEFMTE9DQVRFIExWTDQgUEFHRSBGQUlMDQo+ID4gKDB4JXgpISEhISEhXG4iLCBJbmRleDQpKTsN Cj4gPiAgICAgICAgICAgIEFTU0VSVChGQUxTRSk7DQo+ID4gICAgICAgICAgICByZXR1cm4gTlVM TDsNCj4gPiAgICAgICAgICB9DQo+ID4gLSAgICAgICAgRmx1c2hQYWdlVGFibGVNZW1vcnkgKFZ0 ZEluZGV4LCAoVUlOVE4pTHZsM1B0RW50cnlbSW5kZXgzXS5VaW50NjQsDQo+ID4gU0laRV80S0Ip Ow0KPiA+IC0gICAgICAgIFNldFNlY29uZExldmVsUGFnaW5nRW50cnlBdHRyaWJ1dGUgKCZMdmwz UHRFbnRyeVtJbmRleDNdLA0KPiA+IEVES0lJX0lPTU1VX0FDQ0VTU19SRUFEIHwgRURLSUlfSU9N TVVfQUNDRVNTX1dSSVRFKTsNCj4gPiArICAgICAgICBGbHVzaFBhZ2VUYWJsZU1lbW9yeSAoVnRk SW5kZXgsDQo+ID4gKyAoVUlOVE4pTHZsNFB0RW50cnlbSW5kZXg0XS5VaW50NjQsDQo+ID4gU0la RV80S0IpOw0KPiA+ICsgICAgICAgIFNldFNlY29uZExldmVsUGFnaW5nRW50cnlBdHRyaWJ1dGUg KCZMdmw0UHRFbnRyeVtJbmRleDRdLA0KPiA+IEVES0lJX0lPTU1VX0FDQ0VTU19SRUFEIHwgRURL SUlfSU9NTVVfQUNDRVNTX1dSSVRFKTsNCj4gPiArICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAg THZsM1N0YXJ0ID0gUlNoaWZ0VTY0IChCYXNlQWRkcmVzcywgMzApICYgMHgxRkY7DQo+ID4gKyAg ICAgIGlmIChBTElHTl9WQUxVRV9MT1coQmFzZUFkZHJlc3MgKyBTSVpFXzFHQiwgU0laRV8xR0Ip IDw9DQo+ID4gRW5kQWRkcmVzcykgew0KPiA+ICsgICAgICAgIEx2bDNFbmQgPSBTSVpFXzRLQi9z aXplb2YoVlREX1NFQ09ORF9MRVZFTF9QQUdJTkdfRU5UUlkpIC0gMTsNCj4gPiArICAgICAgfSBl bHNlIHsNCj4gPiArICAgICAgICBMdmwzRW5kID0gUlNoaWZ0VTY0IChFbmRBZGRyZXNzIC0gMSwg MzApICYgMHgxRkY7DQo+ID4gICAgICAgIH0NCj4gPiArICAgICAgREVCVUcgKChERUJVR19JTkZP LCIgIEx2bDQoMHgleCk6IEx2bDNTdGFydCAtIDB4JXgsIEx2bDNFbmQgLQ0KPiA+ICsgMHgleFxu IiwNCj4gPiBJbmRleDQsIEx2bDNTdGFydCwgTHZsM0VuZCkpOw0KPiA+DQo+ID4gLSAgICAgIEx2 bDJQdEVudHJ5ID0gKFZURF9TRUNPTkRfTEVWRUxfUEFHSU5HX0VOVFJZDQo+ID4gKikoVUlOVE4p VlREXzY0QklUU19BRERSRVNTKEx2bDNQdEVudHJ5W0luZGV4M10uQml0cy5BZGRyZXNzTG8sDQo+ ID4gTHZsM1B0RW50cnlbSW5kZXgzXS5CaXRzLkFkZHJlc3NIaSk7DQo+ID4gLSAgICAgIGZvciAo SW5kZXgyID0gMDsgSW5kZXgyIDwNCj4gPiBTSVpFXzRLQi9zaXplb2YoVlREX1NFQ09ORF9MRVZF TF9QQUdJTkdfRU5UUlkpOyBJbmRleDIrKykgew0KPiA+IC0gICAgICAgIEx2bDJQdEVudHJ5W0lu ZGV4Ml0uVWludDY0ID0gQmFzZUFkZHJlc3M7DQo+ID4gLSAgICAgICAgU2V0U2Vjb25kTGV2ZWxQ YWdpbmdFbnRyeUF0dHJpYnV0ZSAoJkx2bDJQdEVudHJ5W0luZGV4Ml0sDQo+ID4gSW9NbXVBY2Nl c3MpOw0KPiA+IC0gICAgICAgIEx2bDJQdEVudHJ5W0luZGV4Ml0uQml0cy5QYWdlU2l6ZSA9IDE7 DQo+ID4gLSAgICAgICAgQmFzZUFkZHJlc3MgKz0gU0laRV8yTUI7DQo+ID4gKyAgICAgIEx2bDNQ dEVudHJ5ID0gKFZURF9TRUNPTkRfTEVWRUxfUEFHSU5HX0VOVFJZDQo+ID4gKikoVUlOVE4pVlRE XzY0QklUU19BRERSRVNTKEx2bDRQdEVudHJ5W0luZGV4NF0uQml0cy5BZGRyZXNzTG8sDQo+ID4g THZsNFB0RW50cnlbSW5kZXg0XS5CaXRzLkFkZHJlc3NIaSk7DQo+ID4gKyAgICAgIGZvciAoSW5k ZXgzID0gTHZsM1N0YXJ0OyBJbmRleDMgPD0gTHZsM0VuZDsgSW5kZXgzKyspIHsNCj4gPiArICAg ICAgICBpZiAoTHZsM1B0RW50cnlbSW5kZXgzXS5VaW50NjQgPT0gMCkgew0KPiA+ICsgICAgICAg ICAgTHZsM1B0RW50cnlbSW5kZXgzXS5VaW50NjQgPSAoVUlOVDY0KShVSU5UTilBbGxvY2F0ZVpl cm9QYWdlcyAoMSk7DQo+ID4gKyAgICAgICAgICBpZiAoTHZsM1B0RW50cnlbSW5kZXgzXS5VaW50 NjQgPT0gMCkgew0KPiA+ICsgICAgICAgICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCIhISEhISEg QUxMT0NBVEUgTFZMMyBQQUdFIEZBSUwNCj4gPiArICgweCV4LA0KPiA+IDB4JXgpISEhISEhXG4i LCBJbmRleDQsIEluZGV4MykpOw0KPiA+ICsgICAgICAgICAgICBBU1NFUlQoRkFMU0UpOw0KPiA+ ICsgICAgICAgICAgICByZXR1cm4gTlVMTDsNCj4gPiArICAgICAgICAgIH0NCj4gPiArICAgICAg ICAgIEZsdXNoUGFnZVRhYmxlTWVtb3J5IChWdGRJbmRleCwNCj4gPiArIChVSU5UTilMdmwzUHRF bnRyeVtJbmRleDNdLlVpbnQ2NCwNCj4gPiBTSVpFXzRLQik7DQo+ID4gKyAgICAgICAgICBTZXRT ZWNvbmRMZXZlbFBhZ2luZ0VudHJ5QXR0cmlidXRlICgmTHZsM1B0RW50cnlbSW5kZXgzXSwNCj4g PiBFREtJSV9JT01NVV9BQ0NFU1NfUkVBRCB8IEVES0lJX0lPTU1VX0FDQ0VTU19XUklURSk7DQo+ ID4gKyAgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgICBMdmwyUHRFbnRyeSA9IChWVERfU0VD T05EX0xFVkVMX1BBR0lOR19FTlRSWQ0KPiA+ICopKFVJTlROKVZURF82NEJJVFNfQUREUkVTUyhM dmwzUHRFbnRyeVtJbmRleDNdLkJpdHMuQWRkcmVzc0xvLA0KPiA+IEx2bDNQdEVudHJ5W0luZGV4 M10uQml0cy5BZGRyZXNzSGkpOw0KPiA+ICsgICAgICAgIGZvciAoSW5kZXgyID0gMDsgSW5kZXgy IDwNCj4gPiBTSVpFXzRLQi9zaXplb2YoVlREX1NFQ09ORF9MRVZFTF9QQUdJTkdfRU5UUlkpOyBJ bmRleDIrKykgew0KPiA+ICsgICAgICAgICAgTHZsMlB0RW50cnlbSW5kZXgyXS5VaW50NjQgPSBC YXNlQWRkcmVzczsNCj4gPiArICAgICAgICAgIFNldFNlY29uZExldmVsUGFnaW5nRW50cnlBdHRy aWJ1dGUgKCZMdmwyUHRFbnRyeVtJbmRleDJdLA0KPiA+IElvTW11QWNjZXNzKTsNCj4gPiArICAg ICAgICAgIEx2bDJQdEVudHJ5W0luZGV4Ml0uQml0cy5QYWdlU2l6ZSA9IDE7DQo+ID4gKyAgICAg ICAgICBCYXNlQWRkcmVzcyArPSBTSVpFXzJNQjsNCj4gPiArICAgICAgICAgIGlmIChCYXNlQWRk cmVzcyA+PSBNZW1vcnlMaW1pdCkgew0KPiA+ICsgICAgICAgICAgICBicmVhazsNCj4gPiArICAg ICAgICAgIH0NCj4gPiArICAgICAgICB9DQo+ID4gKyAgICAgICAgRmx1c2hQYWdlVGFibGVNZW1v cnkgKFZ0ZEluZGV4LCAoVUlOVE4pTHZsMlB0RW50cnksDQo+ID4gKyBTSVpFXzRLQik7DQo+ID4g ICAgICAgICAgaWYgKEJhc2VBZGRyZXNzID49IE1lbW9yeUxpbWl0KSB7DQo+ID4gICAgICAgICAg ICBicmVhazsNCj4gPiAgICAgICAgICB9DQo+ID4gICAgICAgIH0NCj4gPiAtICAgICAgRmx1c2hQ YWdlVGFibGVNZW1vcnkgKFZ0ZEluZGV4LCAoVUlOVE4pTHZsMlB0RW50cnksIFNJWkVfNEtCKTsN Cj4gPiArICAgICAgRmx1c2hQYWdlVGFibGVNZW1vcnkgKFZ0ZEluZGV4LCAoVUlOVE4pJkx2bDNQ dEVudHJ5W0x2bDNTdGFydF0sDQo+ID4gKFVJTlROKSZMdmwzUHRFbnRyeVtMdmwzRW5kICsgMV0g LSAoVUlOVE4pJkx2bDNQdEVudHJ5W0x2bDNTdGFydF0pOw0KPiA+ICAgICAgICBpZiAoQmFzZUFk ZHJlc3MgPj0gTWVtb3J5TGltaXQpIHsNCj4gPiAgICAgICAgICBicmVhazsNCj4gPiAgICAgICAg fQ0KPiA+ICAgICAgfQ0KPiA+IC0gICAgRmx1c2hQYWdlVGFibGVNZW1vcnkgKFZ0ZEluZGV4LCAo VUlOVE4pJkx2bDNQdEVudHJ5W0x2bDNTdGFydF0sDQo+ID4gKFVJTlROKSZMdmwzUHRFbnRyeVtM dmwzRW5kICsgMV0gLSAoVUlOVE4pJkx2bDNQdEVudHJ5W0x2bDNTdGFydF0pOw0KPiA+IC0gICAg aWYgKEJhc2VBZGRyZXNzID49IE1lbW9yeUxpbWl0KSB7DQo+ID4gLSAgICAgIGJyZWFrOw0KPiA+ IC0gICAgfQ0KPiA+ICsgICAgRmx1c2hQYWdlVGFibGVNZW1vcnkgKFZ0ZEluZGV4LCAoVUlOVE4p Jkx2bDRQdEVudHJ5W0x2bDRTdGFydF0sDQo+ID4gKFVJTlROKSZMdmw0UHRFbnRyeVtMdmw0RW5k ICsgMV0gLSAoVUlOVE4pJkx2bDRQdEVudHJ5W0x2bDRTdGFydF0pOw0KPiA+ICAgIH0NCj4gPiAt ICBGbHVzaFBhZ2VUYWJsZU1lbW9yeSAoVnRkSW5kZXgsIChVSU5UTikmTHZsNFB0RW50cnlbTHZs NFN0YXJ0XSwNCj4gPiAoVUlOVE4pJkx2bDRQdEVudHJ5W0x2bDRFbmQgKyAxXSAtIChVSU5UTikm THZsNFB0RW50cnlbTHZsNFN0YXJ0XSk7DQo+ID4gKyAgRmx1c2hQYWdlVGFibGVNZW1vcnkgKFZ0 ZEluZGV4LCAoVUlOVE4pJkx2bDVQdEVudHJ5W0x2bDVTdGFydF0sDQo+ID4gKFVJTlROKSZMdmw1 UHRFbnRyeVtMdmw1RW5kICsgMV0gLSAoVUlOVE4pJkx2bDVQdEVudHJ5W0x2bDVTdGFydF0pOw0K PiA+DQo+ID4gICAgcmV0dXJuIFNlY29uZExldmVsUGFnaW5nRW50cnk7DQo+ID4gIH0NCj4gPiBA QCAtMjY2LDI2ICszMzIsMjggQEAgQ3JlYXRlU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeVRhYmxlICgN Cj4gPg0KPiA+ICAgIEBwYXJhbVtpbl0gIFZ0ZEluZGV4ICAgICAgICAgICAgICAgICAgICBUaGUg aW5kZXggb2YgdGhlIFZUZCBlbmdpbmUuDQo+ID4gICAgQHBhcmFtW2luXSAgSW9NbXVBY2Nlc3Mg ICAgICAgICAgICAgICAgIFRoZSBJT01NVSBhY2Nlc3MuDQo+ID4gKyAgQHBhcmFtW2luXSAgSXM1 TGV2ZWxQYWdpbmcgICAgICAgICAgICAgIElmIGl0IGlzIHRoZSA1IGxldmVsIHBhZ2luZy4NCj4g Pg0KPiA+ICAgIEByZXR1cm4gVGhlIHNlY29uZCBsZXZlbCBwYWdpbmcgZW50cnkuDQo+ID4gICoq Lw0KPiA+ICBWVERfU0VDT05EX0xFVkVMX1BBR0lOR19FTlRSWSAqDQo+ID4gIENyZWF0ZVNlY29u ZExldmVsUGFnaW5nRW50cnkgKA0KPiA+ICAgIElOIFVJTlROICAgVnRkSW5kZXgsDQo+ID4gLSAg SU4gVUlOVDY0ICBJb01tdUFjY2Vzcw0KPiA+ICsgIElOIFVJTlQ2NCAgSW9NbXVBY2Nlc3MsDQo+ ID4gKyAgSU4gQk9PTEVBTiBJczVMZXZlbFBhZ2luZw0KPiA+ICAgICkNCj4gPiAgew0KPiA+ICAg IFZURF9TRUNPTkRfTEVWRUxfUEFHSU5HX0VOVFJZICpTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5Ow0K PiA+DQo+ID4gICAgU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSA9IE5VTEw7DQo+ID4gLSAgU2Vjb25k TGV2ZWxQYWdpbmdFbnRyeSA9IENyZWF0ZVNlY29uZExldmVsUGFnaW5nRW50cnlUYWJsZQ0KPiA+ IChWdGRJbmRleCwgU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSwgMCwgbUJlbG93NEdNZW1vcnlMaW1p dCwNCj4gPiBJb01tdUFjY2Vzcyk7DQo+ID4gKyAgU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSA9IENy ZWF0ZVNlY29uZExldmVsUGFnaW5nRW50cnlUYWJsZQ0KPiA+ICsgKFZ0ZEluZGV4LA0KPiA+IFNl Y29uZExldmVsUGFnaW5nRW50cnksIDAsIG1CZWxvdzRHTWVtb3J5TGltaXQsIElvTW11QWNjZXNz LA0KPiA+IElzNUxldmVsUGFnaW5nKTsNCj4gPiAgICBpZiAoU2Vjb25kTGV2ZWxQYWdpbmdFbnRy eSA9PSBOVUxMKSB7DQo+ID4gICAgICByZXR1cm4gTlVMTDsNCj4gPiAgICB9DQo+ID4NCj4gPiAg ICBpZiAobUFib3ZlNEdNZW1vcnlMaW1pdCAhPSAwKSB7DQo+ID4gICAgICBBU1NFUlQgKG1BYm92 ZTRHTWVtb3J5TGltaXQgPiBCQVNFXzRHQik7DQo+ID4gLSAgICBTZWNvbmRMZXZlbFBhZ2luZ0Vu dHJ5ID0gQ3JlYXRlU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeVRhYmxlIChWdGRJbmRleCwNCj4gPiBT ZWNvbmRMZXZlbFBhZ2luZ0VudHJ5LCBTSVpFXzRHQiwgbUFib3ZlNEdNZW1vcnlMaW1pdCwgSW9N bXVBY2Nlc3MpOw0KPiA+ICsgICAgU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSA9IENyZWF0ZVNlY29u ZExldmVsUGFnaW5nRW50cnlUYWJsZQ0KPiA+ICsgKFZ0ZEluZGV4LA0KPiA+IFNlY29uZExldmVs UGFnaW5nRW50cnksIFNJWkVfNEdCLCBtQWJvdmU0R01lbW9yeUxpbWl0LCBJb01tdUFjY2VzcywN Cj4gPiBJczVMZXZlbFBhZ2luZyk7DQo+ID4gICAgICBpZiAoU2Vjb25kTGV2ZWxQYWdpbmdFbnRy eSA9PSBOVUxMKSB7DQo+ID4gICAgICAgIHJldHVybiBOVUxMOw0KPiA+ICAgICAgfQ0KPiA+IEBA IC0zMjYsMTEgKzM5NCwxMyBAQCBTZXR1cFRyYW5zbGF0aW9uVGFibGUgKA0KPiA+ICAvKioNCj4g PiAgICBEdW1wIERNQVIgY29udGV4dCBlbnRyeSB0YWJsZS4NCj4gPg0KPiA+IC0gIEBwYXJhbVtp bl0gIFJvb3RFbnRyeSBETUFSIHJvb3QgZW50cnkuDQo+ID4gKyAgQHBhcmFtW2luXSAgUm9vdEVu dHJ5ICAgICAgIERNQVIgcm9vdCBlbnRyeS4NCj4gPiArICBAcGFyYW1baW5dICBJczVMZXZlbFBh Z2luZyAgSWYgaXQgaXMgdGhlIDUgbGV2ZWwgcGFnaW5nLg0KPiA+ICAqKi8NCj4gPiAgVk9JRA0K PiA+ICBEdW1wRG1hckNvbnRleHRFbnRyeVRhYmxlICgNCj4gPiAtICBJTiBWVERfUk9PVF9FTlRS WSAqUm9vdEVudHJ5DQo+ID4gKyAgSU4gVlREX1JPT1RfRU5UUlkgKlJvb3RFbnRyeSwNCj4gPiAr ICBJTiBCT09MRUFOIElzNUxldmVsUGFnaW5nDQo+ID4gICAgKQ0KPiA+ICB7DQo+ID4gICAgVUlO VE4gICAgICAgICAgICAgICAgIEluZGV4Ow0KPiA+IEBAIC0zNTksNyArNDI5LDcgQEAgRHVtcERt YXJDb250ZXh0RW50cnlUYWJsZSAoDQo+ID4gICAgICAgIGlmIChDb250ZXh0RW50cnlbSW5kZXgy XS5CaXRzLlByZXNlbnQgPT0gMCkgew0KPiA+ICAgICAgICAgIGNvbnRpbnVlOw0KPiA+ICAgICAg ICB9DQo+ID4gLSAgICAgIER1bXBTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5ICgoVk9JRA0KPiA+ICop KFVJTlROKVZURF82NEJJVFNfQUREUkVTUyhDb250ZXh0RW50cnlbSW5kZXgyXS5CaXRzLlNlY29u ZExldmVsUGFnZQ0KPiA+IFRyYW5zbGF0aW9uUG9pbnRlckxvLA0KPiA+IENvbnRleHRFbnRyeVtJ bmRleDJdLkJpdHMuU2Vjb25kTGV2ZWxQYWdlVHJhbnNsYXRpb25Qb2ludGVySGkpKTsNCj4gPiAr ICAgICAgRHVtcFNlY29uZExldmVsUGFnaW5nRW50cnkgKChWT0lEDQo+ID4gKikoVUlOVE4pVlRE XzY0QklUU19BRERSRVNTKENvbnRleHRFbnRyeVtJbmRleDJdLkJpdHMuU2Vjb25kTGV2ZWxQYWdl DQo+ID4gVHJhbnNsYXRpb25Qb2ludGVyTG8sDQo+ID4gQ29udGV4dEVudHJ5W0luZGV4Ml0uQml0 cy5TZWNvbmRMZXZlbFBhZ2VUcmFuc2xhdGlvblBvaW50ZXJIaSksDQo+ID4gSXM1TGV2ZWxQYWdp bmcpOw0KPiA+ICAgICAgfQ0KPiA+ICAgIH0NCj4gPiAgICBERUJVRyAoKERFQlVHX0lORk8sIj09 PT09PT09PT09PT09PT09PT09PT09PT1cbiIpKTsNCj4gPiBAQCAtMzY4LDE3ICs0MzgsMjIgQEAg RHVtcERtYXJDb250ZXh0RW50cnlUYWJsZSAoDQo+ID4gIC8qKg0KPiA+ICAgIER1bXAgRE1BUiBz ZWNvbmQgbGV2ZWwgcGFnaW5nIGVudHJ5Lg0KPiA+DQo+ID4gLSAgQHBhcmFtW2luXSAgU2Vjb25k TGV2ZWxQYWdpbmdFbnRyeSBUaGUgc2Vjb25kIGxldmVsIHBhZ2luZyBlbnRyeS4NCj4gPiArICBA cGFyYW1baW5dICBTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5ICBUaGUgc2Vjb25kIGxldmVsIHBhZ2lu ZyBlbnRyeS4NCj4gPiArICBAcGFyYW1baW5dICBJczVMZXZlbFBhZ2luZyAgICAgICAgICBJZiBp dCBpcyB0aGUgNSBsZXZlbCBwYWdpbmcuDQo+ID4gICoqLw0KPiA+ICBWT0lEDQo+ID4gIER1bXBT ZWNvbmRMZXZlbFBhZ2luZ0VudHJ5ICgNCj4gPiAtICBJTiBWT0lEICpTZWNvbmRMZXZlbFBhZ2lu Z0VudHJ5DQo+ID4gKyAgSU4gVk9JRCAqU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSwNCj4gPiArICBJ TiBCT09MRUFOIElzNUxldmVsUGFnaW5nDQo+ID4gICAgKQ0KPiA+ICB7DQo+ID4gKyAgVUlOVE4g ICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4NTsNCj4gPiAgICBVSU5UTiAgICAgICAgICAg ICAgICAgICAgICAgICAgSW5kZXg0Ow0KPiA+ICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAg ICAgICBJbmRleDM7DQo+ID4gICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4 MjsNCj4gPiAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXgxOw0KPiA+ICsg IFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICBMdmw1SW5kZXhFbmQ7DQo+ID4gKyAgVlRE X1NFQ09ORF9MRVZFTF9QQUdJTkdfRU5UUlkgICpMdmw1UHRFbnRyeTsNCj4gPiAgICBWVERfU0VD T05EX0xFVkVMX1BBR0lOR19FTlRSWSAgKkx2bDRQdEVudHJ5Ow0KPiA+ICAgIFZURF9TRUNPTkRf TEVWRUxfUEFHSU5HX0VOVFJZICAqTHZsM1B0RW50cnk7DQo+ID4gICAgVlREX1NFQ09ORF9MRVZF TF9QQUdJTkdfRU5UUlkgICpMdmwyUHRFbnRyeTsgQEAgLTM4NiwzOCArNDYxLDUzDQo+IEBADQo+ ID4gRHVtcFNlY29uZExldmVsUGFnaW5nRW50cnkgKA0KPiA+DQo+ID4gICAgREVCVUcgKChERUJV R19WRVJCT1NFLCI9PT09PT09PT09PT09PT09XG4iKSk7DQo+ID4gICAgREVCVUcgKChERUJVR19W RVJCT1NFLCJETUFSIFNlY29uZCBMZXZlbCBQYWdlIFRhYmxlOlxuIikpOw0KPiA+ICsgIERFQlVH ICgoREVCVUdfVkVSQk9TRSwiU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSBCYXNlIC0gMHgleCwNCj4g PiBJczVMZXZlbFBhZ2luZyAtICVkXG4iLCBTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5LCBJczVMZXZl bFBhZ2luZykpOw0KPiA+DQo+ID4gLSAgREVCVUcgKChERUJVR19WRVJCT1NFLCJTZWNvbmRMZXZl bFBhZ2luZ0VudHJ5IEJhc2UgLSAweCV4XG4iLA0KPiA+IFNlY29uZExldmVsUGFnaW5nRW50cnkp KTsNCj4gPiArICBMdmw1SW5kZXhFbmQgPSBJczVMZXZlbFBhZ2luZyA/DQo+ID4gU0laRV80S0Iv c2l6ZW9mKFZURF9TRUNPTkRfTEVWRUxfUEFHSU5HX0VOVFJZKSA6IDE7DQo+ID4gICAgTHZsNFB0 RW50cnkgPSAoVlREX1NFQ09ORF9MRVZFTF9QQUdJTkdfRU5UUlkNCj4gPiAqKVNlY29uZExldmVs UGFnaW5nRW50cnk7DQo+ID4gLSAgZm9yIChJbmRleDQgPSAwOyBJbmRleDQgPA0KPiA+IFNJWkVf NEtCL3NpemVvZihWVERfU0VDT05EX0xFVkVMX1BBR0lOR19FTlRSWSk7IEluZGV4NCsrKSB7DQo+ ID4gLSAgICBpZiAoTHZsNFB0RW50cnlbSW5kZXg0XS5VaW50NjQgIT0gMCkgew0KPiA+IC0gICAg ICBERUJVRyAoKERFQlVHX1ZFUkJPU0UsIiAgTHZsNFB0IEVudHJ5KDB4JTAzeCkgLSAweCUwMTZs eFxuIiwgSW5kZXg0LA0KPiA+IEx2bDRQdEVudHJ5W0luZGV4NF0uVWludDY0KSk7DQo+ID4gLSAg ICB9DQo+ID4gLSAgICBpZiAoTHZsNFB0RW50cnlbSW5kZXg0XS5VaW50NjQgPT0gMCkgew0KPiA+ IC0gICAgICBjb250aW51ZTsNCj4gPiAtICAgIH0NCj4gPiAtICAgIEx2bDNQdEVudHJ5ID0gKFZU RF9TRUNPTkRfTEVWRUxfUEFHSU5HX0VOVFJZDQo+ID4gKikoVUlOVE4pVlREXzY0QklUU19BRERS RVNTKEx2bDRQdEVudHJ5W0luZGV4NF0uQml0cy5BZGRyZXNzTG8sDQo+ID4gTHZsNFB0RW50cnlb SW5kZXg0XS5CaXRzLkFkZHJlc3NIaSk7DQo+ID4gLSAgICBmb3IgKEluZGV4MyA9IDA7IEluZGV4 MyA8DQo+ID4gU0laRV80S0Ivc2l6ZW9mKFZURF9TRUNPTkRfTEVWRUxfUEFHSU5HX0VOVFJZKTsg SW5kZXgzKyspIHsNCj4gPiAtICAgICAgaWYgKEx2bDNQdEVudHJ5W0luZGV4M10uVWludDY0ICE9 IDApIHsNCj4gPiAtICAgICAgICBERUJVRyAoKERFQlVHX1ZFUkJPU0UsIiAgICBMdmwzUHQgRW50 cnkoMHglMDN4KSAtIDB4JTAxNmx4XG4iLA0KPiA+IEluZGV4MywgTHZsM1B0RW50cnlbSW5kZXgz XS5VaW50NjQpKTsNCj4gPiArICBMdmw1UHRFbnRyeSA9IChWVERfU0VDT05EX0xFVkVMX1BBR0lO R19FTlRSWQ0KPiA+ICopU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeTsNCj4gPiArDQo+ID4gKyAgZm9y IChJbmRleDUgPSAwOyBJbmRleDUgPCBMdmw1SW5kZXhFbmQ7IEluZGV4NSsrKSB7DQo+ID4gKyAg ICBpZiAoSXM1TGV2ZWxQYWdpbmcpIHsNCj4gPiArICAgICAgaWYgKEx2bDVQdEVudHJ5W0luZGV4 NV0uVWludDY0ICE9IDApIHsNCj4gPiArICAgICAgICBERUJVRyAoKERFQlVHX1ZFUkJPU0UsIiAg THZsNVB0IEVudHJ5KDB4JTAzeCkgLSAweCUwMTZseFxuIiwNCj4gPiBJbmRleDUsIEx2bDVQdEVu dHJ5W0luZGV4NV0uVWludDY0KSk7DQo+ID4gICAgICAgIH0NCj4gPiAtICAgICAgaWYgKEx2bDNQ dEVudHJ5W0luZGV4M10uVWludDY0ID09IDApIHsNCj4gPiArICAgICAgaWYgKEx2bDVQdEVudHJ5 W0luZGV4NV0uVWludDY0ID09IDApIHsNCj4gPiAgICAgICAgICBjb250aW51ZTsNCj4gPiAgICAg ICAgfQ0KPiA+ICsgICAgICBMdmw0UHRFbnRyeSA9IChWVERfU0VDT05EX0xFVkVMX1BBR0lOR19F TlRSWQ0KPiA+ICopKFVJTlROKVZURF82NEJJVFNfQUREUkVTUyhMdmw1UHRFbnRyeVtJbmRleDVd LkJpdHMuQWRkcmVzc0xvLA0KPiA+IEx2bDVQdEVudHJ5W0luZGV4NV0uQml0cy5BZGRyZXNzSGkp Ow0KPiA+ICsgICAgfQ0KPiA+DQo+ID4gLSAgICAgIEx2bDJQdEVudHJ5ID0gKFZURF9TRUNPTkRf TEVWRUxfUEFHSU5HX0VOVFJZDQo+ID4gKikoVUlOVE4pVlREXzY0QklUU19BRERSRVNTKEx2bDNQ dEVudHJ5W0luZGV4M10uQml0cy5BZGRyZXNzTG8sDQo+ID4gTHZsM1B0RW50cnlbSW5kZXgzXS5C aXRzLkFkZHJlc3NIaSk7DQo+ID4gLSAgICAgIGZvciAoSW5kZXgyID0gMDsgSW5kZXgyIDwNCj4g PiBTSVpFXzRLQi9zaXplb2YoVlREX1NFQ09ORF9MRVZFTF9QQUdJTkdfRU5UUlkpOyBJbmRleDIr Kykgew0KPiA+IC0gICAgICAgIGlmIChMdmwyUHRFbnRyeVtJbmRleDJdLlVpbnQ2NCAhPSAwKSB7 DQo+ID4gLSAgICAgICAgICBERUJVRyAoKERFQlVHX1ZFUkJPU0UsIiAgICAgIEx2bDJQdCBFbnRy eSgweCUwM3gpIC0gMHglMDE2bHhcbiIsDQo+ID4gSW5kZXgyLCBMdmwyUHRFbnRyeVtJbmRleDJd LlVpbnQ2NCkpOw0KPiA+ICsgICAgZm9yIChJbmRleDQgPSAwOyBJbmRleDQgPA0KPiA+IFNJWkVf NEtCL3NpemVvZihWVERfU0VDT05EX0xFVkVMX1BBR0lOR19FTlRSWSk7IEluZGV4NCsrKSB7DQo+ ID4gKyAgICAgIGlmIChMdmw0UHRFbnRyeVtJbmRleDRdLlVpbnQ2NCAhPSAwKSB7DQo+ID4gKyAg ICAgICAgREVCVUcgKChERUJVR19WRVJCT1NFLCIgIEx2bDRQdCBFbnRyeSgweCUwM3gpIC0gMHgl MDE2bHhcbiIsDQo+ID4gSW5kZXg0LCBMdmw0UHRFbnRyeVtJbmRleDRdLlVpbnQ2NCkpOw0KPiA+ ICsgICAgICB9DQo+ID4gKyAgICAgIGlmIChMdmw0UHRFbnRyeVtJbmRleDRdLlVpbnQ2NCA9PSAw KSB7DQo+ID4gKyAgICAgICAgY29udGludWU7DQo+ID4gKyAgICAgIH0NCj4gPiArICAgICAgTHZs M1B0RW50cnkgPSAoVlREX1NFQ09ORF9MRVZFTF9QQUdJTkdfRU5UUlkNCj4gPiAqKShVSU5UTilW VERfNjRCSVRTX0FERFJFU1MoTHZsNFB0RW50cnlbSW5kZXg0XS5CaXRzLkFkZHJlc3NMbywNCj4g PiBMdmw0UHRFbnRyeVtJbmRleDRdLkJpdHMuQWRkcmVzc0hpKTsNCj4gPiArICAgICAgZm9yIChJ bmRleDMgPSAwOyBJbmRleDMgPA0KPiA+IFNJWkVfNEtCL3NpemVvZihWVERfU0VDT05EX0xFVkVM X1BBR0lOR19FTlRSWSk7IEluZGV4MysrKSB7DQo+ID4gKyAgICAgICAgaWYgKEx2bDNQdEVudHJ5 W0luZGV4M10uVWludDY0ICE9IDApIHsNCj4gPiArICAgICAgICAgIERFQlVHICgoREVCVUdfVkVS Qk9TRSwiICAgTHZsM1B0IEVudHJ5KDB4JTAzeCkgLSAweCUwMTZseFxuIiwNCj4gPiBJbmRleDMs IEx2bDNQdEVudHJ5W0luZGV4M10uVWludDY0KSk7DQo+ID4gICAgICAgICAgfQ0KPiA+IC0gICAg ICAgIGlmIChMdmwyUHRFbnRyeVtJbmRleDJdLlVpbnQ2NCA9PSAwKSB7DQo+ID4gKyAgICAgICAg aWYgKEx2bDNQdEVudHJ5W0luZGV4M10uVWludDY0ID09IDApIHsNCj4gPiAgICAgICAgICAgIGNv bnRpbnVlOw0KPiA+ICAgICAgICAgIH0NCj4gPiAtICAgICAgICBpZiAoTHZsMlB0RW50cnlbSW5k ZXgyXS5CaXRzLlBhZ2VTaXplID09IDApIHsNCj4gPiAtICAgICAgICAgIEx2bDFQdEVudHJ5ID0g KFZURF9TRUNPTkRfTEVWRUxfUEFHSU5HX0VOVFJZDQo+ID4gKikoVUlOVE4pVlREXzY0QklUU19B RERSRVNTKEx2bDJQdEVudHJ5W0luZGV4Ml0uQml0cy5BZGRyZXNzTG8sDQo+ID4gTHZsMlB0RW50 cnlbSW5kZXgyXS5CaXRzLkFkZHJlc3NIaSk7DQo+ID4gLSAgICAgICAgICBmb3IgKEluZGV4MSA9 IDA7IEluZGV4MSA8DQo+ID4gU0laRV80S0Ivc2l6ZW9mKFZURF9TRUNPTkRfTEVWRUxfUEFHSU5H X0VOVFJZKTsgSW5kZXgxKyspIHsNCj4gPiAtICAgICAgICAgICAgaWYgKEx2bDFQdEVudHJ5W0lu ZGV4MV0uVWludDY0ICE9IDApIHsNCj4gPiAtICAgICAgICAgICAgICBERUJVRyAoKERFQlVHX1ZF UkJPU0UsIiAgICAgICAgTHZsMVB0IEVudHJ5KDB4JTAzeCkgLQ0KPiAweCUwMTZseFxuIiwNCj4g PiBJbmRleDEsIEx2bDFQdEVudHJ5W0luZGV4MV0uVWludDY0KSk7DQo+ID4gKw0KPiA+ICsgICAg ICAgIEx2bDJQdEVudHJ5ID0gKFZURF9TRUNPTkRfTEVWRUxfUEFHSU5HX0VOVFJZDQo+ID4gKiko VUlOVE4pVlREXzY0QklUU19BRERSRVNTKEx2bDNQdEVudHJ5W0luZGV4M10uQml0cy5BZGRyZXNz TG8sDQo+ID4gTHZsM1B0RW50cnlbSW5kZXgzXS5CaXRzLkFkZHJlc3NIaSk7DQo+ID4gKyAgICAg ICAgZm9yIChJbmRleDIgPSAwOyBJbmRleDIgPA0KPiA+IFNJWkVfNEtCL3NpemVvZihWVERfU0VD T05EX0xFVkVMX1BBR0lOR19FTlRSWSk7IEluZGV4MisrKSB7DQo+ID4gKyAgICAgICAgICBpZiAo THZsMlB0RW50cnlbSW5kZXgyXS5VaW50NjQgIT0gMCkgew0KPiA+ICsgICAgICAgICAgICBERUJV RyAoKERFQlVHX1ZFUkJPU0UsIiAgICBMdmwyUHQgRW50cnkoMHglMDN4KSAtIDB4JTAxNmx4XG4i LA0KPiA+IEluZGV4MiwgTHZsMlB0RW50cnlbSW5kZXgyXS5VaW50NjQpKTsNCj4gPiArICAgICAg ICAgIH0NCj4gPiArICAgICAgICAgIGlmIChMdmwyUHRFbnRyeVtJbmRleDJdLlVpbnQ2NCA9PSAw KSB7DQo+ID4gKyAgICAgICAgICAgIGNvbnRpbnVlOw0KPiA+ICsgICAgICAgICAgfQ0KPiA+ICsg ICAgICAgICAgaWYgKEx2bDJQdEVudHJ5W0luZGV4Ml0uQml0cy5QYWdlU2l6ZSA9PSAwKSB7DQo+ ID4gKyAgICAgICAgICAgIEx2bDFQdEVudHJ5ID0gKFZURF9TRUNPTkRfTEVWRUxfUEFHSU5HX0VO VFJZDQo+ID4gKikoVUlOVE4pVlREXzY0QklUU19BRERSRVNTKEx2bDJQdEVudHJ5W0luZGV4Ml0u Qml0cy5BZGRyZXNzTG8sDQo+ID4gTHZsMlB0RW50cnlbSW5kZXgyXS5CaXRzLkFkZHJlc3NIaSk7 DQo+ID4gKyAgICAgICAgICAgIGZvciAoSW5kZXgxID0gMDsgSW5kZXgxIDwNCj4gPiBTSVpFXzRL Qi9zaXplb2YoVlREX1NFQ09ORF9MRVZFTF9QQUdJTkdfRU5UUlkpOyBJbmRleDErKykgew0KPiA+ ICsgICAgICAgICAgICAgIGlmIChMdmwxUHRFbnRyeVtJbmRleDFdLlVpbnQ2NCAhPSAwKSB7DQo+ ID4gKyAgICAgICAgICAgICAgICBERUJVRyAoKERFQlVHX1ZFUkJPU0UsIiAgICAgIEx2bDFQdCBF bnRyeSgweCUwM3gpIC0NCj4gMHglMDE2bHhcbiIsDQo+ID4gSW5kZXgxLCBMdmwxUHRFbnRyeVtJ bmRleDFdLlVpbnQ2NCkpOw0KPiA+ICsgICAgICAgICAgICAgIH0NCj4gPiAgICAgICAgICAgICAg fQ0KPiA+ICAgICAgICAgICAgfQ0KPiA+ICAgICAgICAgIH0NCj4gPiBAQCAtNTEwLDYgKzYwMCw3 IEBAIFBhZ2VBdHRyaWJ1dGVUb0xlbmd0aCAoDQo+ID4gICAgQHBhcmFtW2luXSAgIFZ0ZEluZGV4 ICAgICAgICAgICAgICAgICBUaGUgaW5kZXggdXNlZCB0byBpZGVudGlmeSBhIFZUZCBlbmdpbmUu DQo+ID4gICAgQHBhcmFtW2luXSAgIFNlY29uZExldmVsUGFnaW5nRW50cnkgICBUaGUgc2Vjb25k IGxldmVsIHBhZ2luZyBlbnRyeSBpbg0KPiA+IFZUZCB0YWJsZSBmb3IgdGhlIGRldmljZS4NCj4g PiAgICBAcGFyYW1baW5dICAgQWRkcmVzcyAgICAgICAgICAgICAgICAgIFRoZSBhZGRyZXNzIHRv IGJlIGNoZWNrZWQuDQo+ID4gKyAgQHBhcmFtW2luXSAgIElzNUxldmVsUGFnaW5nICAgICAgICAg ICBJZiBpdCBpcyB0aGUgNSBsZXZlbCBwYWdpbmcuDQo+ID4gICAgQHBhcmFtW291dF0gIFBhZ2VB dHRyaWJ1dGVzICAgICAgICAgICBUaGUgcGFnZSBhdHRyaWJ1dGUgb2YgdGhlIHBhZ2UgZW50cnku DQo+ID4NCj4gPiAgICBAcmV0dXJuIFRoZSBwYWdlIGVudHJ5Lg0KPiA+IEBAIC01MTksNiArNjEw LDcgQEAgR2V0U2Vjb25kTGV2ZWxQYWdlVGFibGVFbnRyeSAoDQo+ID4gICAgSU4gIFVJTlROICAg ICAgICAgICAgICAgICAgICAgICAgIFZ0ZEluZGV4LA0KPiA+ICAgIElOICBWVERfU0VDT05EX0xF VkVMX1BBR0lOR19FTlRSWSAqU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSwNCj4gPiAgICBJTiAgUEhZ U0lDQUxfQUREUkVTUyAgICAgICAgICAgICAgQWRkcmVzcywNCj4gPiArICBJTiAgQk9PTEVBTiAg ICAgICAgICAgICAgICAgICAgICAgSXM1TGV2ZWxQYWdpbmcsDQo+ID4gICAgT1VUIFBBR0VfQVRU UklCVVRFICAgICAgICAgICAgICAgICpQYWdlQXR0cmlidXRlDQo+ID4gICAgKQ0KPiA+ICB7DQo+ ID4gQEAgLTUyNiwxNyArNjE4LDM4IEBAIEdldFNlY29uZExldmVsUGFnZVRhYmxlRW50cnkgKA0K PiA+ICAgIFVJTlROICAgICAgICAgICAgICAgICBJbmRleDI7DQo+ID4gICAgVUlOVE4gICAgICAg ICAgICAgICAgIEluZGV4MzsNCj4gPiAgICBVSU5UTiAgICAgICAgICAgICAgICAgSW5kZXg0Ow0K PiA+ICsgIFVJTlROICAgICAgICAgICAgICAgICBJbmRleDU7DQo+ID4gICAgVUlOVDY0ICAgICAg ICAgICAgICAgICpMMVBhZ2VUYWJsZTsNCj4gPiAgICBVSU5UNjQgICAgICAgICAgICAgICAgKkwy UGFnZVRhYmxlOw0KPiA+ICAgIFVJTlQ2NCAgICAgICAgICAgICAgICAqTDNQYWdlVGFibGU7DQo+ ID4gICAgVUlOVDY0ICAgICAgICAgICAgICAgICpMNFBhZ2VUYWJsZTsNCj4gPiArICBVSU5UNjQg ICAgICAgICAgICAgICAgKkw1UGFnZVRhYmxlOw0KPiA+DQo+ID4gKyAgSW5kZXg1ID0gKChVSU5U TilSU2hpZnRVNjQgKEFkZHJlc3MsIDQ4KSkgJiBQQUdJTkdfVlREX0lOREVYX01BU0s7DQo+ID4g ICAgSW5kZXg0ID0gKChVSU5UTilSU2hpZnRVNjQgKEFkZHJlc3MsIDM5KSkgJiBQQUdJTkdfVlRE X0lOREVYX01BU0s7DQo+ID4gICAgSW5kZXgzID0gKChVSU5UTilBZGRyZXNzID4+IDMwKSAmIFBB R0lOR19WVERfSU5ERVhfTUFTSzsNCj4gPiAgICBJbmRleDIgPSAoKFVJTlROKUFkZHJlc3MgPj4g MjEpICYgUEFHSU5HX1ZURF9JTkRFWF9NQVNLOw0KPiA+ICAgIEluZGV4MSA9ICgoVUlOVE4pQWRk cmVzcyA+PiAxMikgJiBQQUdJTkdfVlREX0lOREVYX01BU0s7DQo+ID4NCj4gPiAtICBMNFBhZ2VU YWJsZSA9IChVSU5UNjQgKilTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5Ow0KPiA+ICsgIGlmIChJczVM ZXZlbFBhZ2luZykgew0KPiA+ICsgICAgTDVQYWdlVGFibGUgPSAoVUlOVDY0ICopU2Vjb25kTGV2 ZWxQYWdpbmdFbnRyeTsNCj4gPiArICAgIGlmIChMNVBhZ2VUYWJsZVtJbmRleDVdID09IDApIHsN Cj4gPiArICAgICAgTDVQYWdlVGFibGVbSW5kZXg1XSA9IChVSU5UNjQpKFVJTlROKUFsbG9jYXRl WmVyb1BhZ2VzICgxKTsNCj4gPiArICAgICAgaWYgKEw1UGFnZVRhYmxlW0luZGV4NV0gPT0gMCkg ew0KPiA+ICsgICAgICAgIERFQlVHICgoREVCVUdfRVJST1IsIiEhISEhISBBTExPQ0FURSBMVkw1 IFBBR0UgRkFJTA0KPiA+ICgweCV4KSEhISEhIVxuIiwgSW5kZXg0KSk7DQo+ID4gKyAgICAgICAg QVNTRVJUKEZBTFNFKTsNCj4gPiArICAgICAgICAqUGFnZUF0dHJpYnV0ZSA9IFBhZ2VOb25lOw0K PiA+ICsgICAgICAgIHJldHVybiBOVUxMOw0KPiA+ICsgICAgICB9DQo+ID4gKyAgICAgIEZsdXNo UGFnZVRhYmxlTWVtb3J5IChWdGRJbmRleCwgKFVJTlROKUw1UGFnZVRhYmxlW0luZGV4NV0sDQo+ ID4gU0laRV80S0IpOw0KPiA+ICsgICAgICBTZXRTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5QXR0cmli dXRlDQo+ID4gKChWVERfU0VDT05EX0xFVkVMX1BBR0lOR19FTlRSWSAqKSZMNVBhZ2VUYWJsZVtJ bmRleDVdLA0KPiA+IEVES0lJX0lPTU1VX0FDQ0VTU19SRUFEIHwgRURLSUlfSU9NTVVfQUNDRVNT X1dSSVRFKTsNCj4gPiArICAgICAgRmx1c2hQYWdlVGFibGVNZW1vcnkgKFZ0ZEluZGV4LCAoVUlO VE4pJkw1UGFnZVRhYmxlW0luZGV4NV0sDQo+ID4gc2l6ZW9mKEw1UGFnZVRhYmxlW0luZGV4NV0p KTsNCj4gPiArICAgIH0NCj4gPiArICAgIEw0UGFnZVRhYmxlID0gKFVJTlQ2NCAqKShVSU5UTiko TDVQYWdlVGFibGVbSW5kZXg1XSAmDQo+ID4gUEFHSU5HXzRLX0FERFJFU1NfTUFTS182NCk7DQo+ ID4gKyAgfSBlbHNlIHsNCj4gPiArICAgIEw0UGFnZVRhYmxlID0gKFVJTlQ2NCAqKVNlY29uZExl dmVsUGFnaW5nRW50cnk7ICB9DQo+ID4gKw0KPiA+ICAgIGlmIChMNFBhZ2VUYWJsZVtJbmRleDRd ID09IDApIHsNCj4gPiAgICAgIEw0UGFnZVRhYmxlW0luZGV4NF0gPSAoVUlOVDY0KShVSU5UTilB bGxvY2F0ZVplcm9QYWdlcyAoMSk7DQo+ID4gICAgICBpZiAoTDRQYWdlVGFibGVbSW5kZXg0XSA9 PSAwKSB7DQo+ID4gQEAgLTc4NSw3ICs4OTgsNyBAQCBTZXRTZWNvbmRMZXZlbFBhZ2luZ0F0dHJp YnV0ZSAoDQo+ID4gICAgfQ0KPiA+DQo+ID4gICAgd2hpbGUgKExlbmd0aCAhPSAwKSB7DQo+ID4g LSAgICBQYWdlRW50cnkgPSBHZXRTZWNvbmRMZXZlbFBhZ2VUYWJsZUVudHJ5IChWdGRJbmRleCwN Cj4gPiBTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5LCBCYXNlQWRkcmVzcywgJlBhZ2VBdHRyaWJ1dGUp Ow0KPiA+ICsgICAgUGFnZUVudHJ5ID0gR2V0U2Vjb25kTGV2ZWxQYWdlVGFibGVFbnRyeSAoVnRk SW5kZXgsDQo+ID4gU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSwgQmFzZUFkZHJlc3MsDQo+ID4gbVZ0 ZFVuaXRJbmZvcm1hdGlvbltWdGRJbmRleF0uSXM1TGV2ZWxQYWdpbmcsICZQYWdlQXR0cmlidXRl KTsNCj4gPiAgICAgIGlmIChQYWdlRW50cnkgPT0gTlVMTCkgew0KPiA+ICAgICAgICBERUJVRyAo KERFQlVHX0VSUk9SLCAiUGFnZUVudHJ5IC0gTlVMTFxuIikpOw0KPiA+ICAgICAgICByZXR1cm4g UkVUVVJOX1VOU1VQUE9SVEVEOw0KPiA+IEBAIC05MTMsNyArMTAyNiw3IEBAIFNldEFjY2Vzc0F0 dHJpYnV0ZSAoDQo+ID4NCj4gPiAgICBpZiAoRXh0Q29udGV4dEVudHJ5ICE9IE5VTEwpIHsNCj4g PiAgICAgIGlmIChFeHRDb250ZXh0RW50cnktPkJpdHMuUHJlc2VudCA9PSAwKSB7DQo+ID4gLSAg ICAgIFNlY29uZExldmVsUGFnaW5nRW50cnkgPSBDcmVhdGVTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5 IChWdGRJbmRleCwgMCk7DQo+ID4gKyAgICAgIFNlY29uZExldmVsUGFnaW5nRW50cnkgPSBDcmVh dGVTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5DQo+ID4gKyAoVnRkSW5kZXgsIDAsDQo+ID4gbVZ0ZFVu aXRJbmZvcm1hdGlvbltWdGRJbmRleF0uSXM1TGV2ZWxQYWdpbmcpOw0KPiA+ICAgICAgICBERUJV RyAoKERFQlVHX1ZFUkJPU0UsIlNlY29uZExldmVsUGFnaW5nRW50cnkgLSAweCV4IChTJTA0eA0K PiA+IEIlMDJ4IEQlMDJ4IEYlMDJ4KSBOZXdcbiIsIFNlY29uZExldmVsUGFnaW5nRW50cnksIFNl Z21lbnQsDQo+ID4gU291cmNlSWQuQml0cy5CdXMsIFNvdXJjZUlkLkJpdHMuRGV2aWNlLCBTb3Vy Y2VJZC5CaXRzLkZ1bmN0aW9uKSk7DQo+ID4gICAgICAgIFB0ID0gKFVJTlQ2NClSU2hpZnRVNjQg KChVSU5UNjQpKFVJTlROKVNlY29uZExldmVsUGFnaW5nRW50cnksDQo+ID4gMTIpOw0KPiA+DQo+ ID4gQEAgLTkyMiw3ICsxMDM1LDcgQEAgU2V0QWNjZXNzQXR0cmlidXRlICgNCj4gPiAgICAgICAg RXh0Q29udGV4dEVudHJ5LT5CaXRzLkRvbWFpbklkZW50aWZpZXIgPSBEb21haW5JZGVudGlmaWVy Ow0KPiA+ICAgICAgICBFeHRDb250ZXh0RW50cnktPkJpdHMuUHJlc2VudCA9IDE7DQo+ID4gICAg ICAgIEZsdXNoUGFnZVRhYmxlTWVtb3J5IChWdGRJbmRleCwgKFVJTlROKUV4dENvbnRleHRFbnRy eSwNCj4gPiBzaXplb2YoKkV4dENvbnRleHRFbnRyeSkpOw0KPiA+IC0gICAgICBEdW1wRG1hckV4 dENvbnRleHRFbnRyeVRhYmxlDQo+ID4gKG1WdGRVbml0SW5mb3JtYXRpb25bVnRkSW5kZXhdLkV4 dFJvb3RFbnRyeVRhYmxlKTsNCj4gPiArICAgICAgRHVtcERtYXJFeHRDb250ZXh0RW50cnlUYWJs ZQ0KPiA+IChtVnRkVW5pdEluZm9ybWF0aW9uW1Z0ZEluZGV4XS5FeHRSb290RW50cnlUYWJsZSwN Cj4gPiBtVnRkVW5pdEluZm9ybWF0aW9uW1Z0ZEluZGV4XS5JczVMZXZlbFBhZ2luZyk7DQo+ID4g ICAgICAgIG1WdGRVbml0SW5mb3JtYXRpb25bVnRkSW5kZXhdLkhhc0RpcnR5Q29udGV4dCA9IFRS VUU7DQo+ID4gICAgICB9IGVsc2Ugew0KPiA+ICAgICAgICBTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5 ID0gKFZPSUQNCj4gPiAqKShVSU5UTilWVERfNjRCSVRTX0FERFJFU1MoRXh0Q29udGV4dEVudHJ5 LQ0KPiA+ID5CaXRzLlNlY29uZExldmVsUGFnZVRyYW5zbGF0aW9uUG9pbnRlckxvLCBFeHRDb250 ZXh0RW50cnktDQo+ID4gPkJpdHMuU2Vjb25kTGV2ZWxQYWdlVHJhbnNsYXRpb25Qb2ludGVySGkp Ow0KPiA+IEBAIC05MzAsNyArMTA0Myw3IEBAIFNldEFjY2Vzc0F0dHJpYnV0ZSAoDQo+ID4gICAg ICB9DQo+ID4gICAgfSBlbHNlIGlmIChDb250ZXh0RW50cnkgIT0gTlVMTCkgew0KPiA+ICAgICAg aWYgKENvbnRleHRFbnRyeS0+Qml0cy5QcmVzZW50ID09IDApIHsNCj4gPiAtICAgICAgU2Vjb25k TGV2ZWxQYWdpbmdFbnRyeSA9IENyZWF0ZVNlY29uZExldmVsUGFnaW5nRW50cnkgKFZ0ZEluZGV4 LCAwKTsNCj4gPiArICAgICAgU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSA9IENyZWF0ZVNlY29uZExl dmVsUGFnaW5nRW50cnkNCj4gPiArIChWdGRJbmRleCwgMCwNCj4gPiBtVnRkVW5pdEluZm9ybWF0 aW9uW1Z0ZEluZGV4XS5JczVMZXZlbFBhZ2luZyk7DQo+ID4gICAgICAgIERFQlVHICgoREVCVUdf VkVSQk9TRSwiU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSAtIDB4JXggKFMlMDR4DQo+ID4gQiUwMngg RCUwMnggRiUwMngpIE5ld1xuIiwgU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSwgU2VnbWVudCwNCj4g PiBTb3VyY2VJZC5CaXRzLkJ1cywgU291cmNlSWQuQml0cy5EZXZpY2UsIFNvdXJjZUlkLkJpdHMu RnVuY3Rpb24pKTsNCj4gPiAgICAgICAgUHQgPSAoVUlOVDY0KVJTaGlmdFU2NCAoKFVJTlQ2NCko VUlOVE4pU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSwNCj4gPiAxMik7DQo+ID4NCj4gPiBAQCAtOTM5 LDcgKzEwNTIsNyBAQCBTZXRBY2Nlc3NBdHRyaWJ1dGUgKA0KPiA+ICAgICAgICBDb250ZXh0RW50 cnktPkJpdHMuRG9tYWluSWRlbnRpZmllciA9IERvbWFpbklkZW50aWZpZXI7DQo+ID4gICAgICAg IENvbnRleHRFbnRyeS0+Qml0cy5QcmVzZW50ID0gMTsNCj4gPiAgICAgICAgRmx1c2hQYWdlVGFi bGVNZW1vcnkgKFZ0ZEluZGV4LCAoVUlOVE4pQ29udGV4dEVudHJ5LA0KPiA+IHNpemVvZigqQ29u dGV4dEVudHJ5KSk7DQo+ID4gLSAgICAgIER1bXBEbWFyQ29udGV4dEVudHJ5VGFibGUNCj4gPiAo bVZ0ZFVuaXRJbmZvcm1hdGlvbltWdGRJbmRleF0uUm9vdEVudHJ5VGFibGUpOw0KPiA+ICsgICAg ICBEdW1wRG1hckNvbnRleHRFbnRyeVRhYmxlDQo+ID4gKG1WdGRVbml0SW5mb3JtYXRpb25bVnRk SW5kZXhdLlJvb3RFbnRyeVRhYmxlLA0KPiA+IG1WdGRVbml0SW5mb3JtYXRpb25bVnRkSW5kZXhd LklzNUxldmVsUGFnaW5nKTsNCj4gPiAgICAgICAgbVZ0ZFVuaXRJbmZvcm1hdGlvbltWdGRJbmRl eF0uSGFzRGlydHlDb250ZXh0ID0gVFJVRTsNCj4gPiAgICAgIH0gZWxzZSB7DQo+ID4gICAgICAg IFNlY29uZExldmVsUGFnaW5nRW50cnkgPSAoVk9JRA0KPiA+ICopKFVJTlROKVZURF82NEJJVFNf QUREUkVTUyhDb250ZXh0RW50cnktDQo+ID4gPkJpdHMuU2Vjb25kTGV2ZWxQYWdlVHJhbnNsYXRp b25Qb2ludGVyTG8sIENvbnRleHRFbnRyeS0NCj4gPiA+Qml0cy5TZWNvbmRMZXZlbFBhZ2VUcmFu c2xhdGlvblBvaW50ZXJIaSk7DQo+ID4gQEAgLTEwMDAsNyArMTExMyw3IEBAIEFsd2F5c0VuYWJs ZVBhZ2VBdHRyaWJ1dGUgKA0KPiA+DQo+ID4gICAgaWYgKG1WdGRVbml0SW5mb3JtYXRpb25bVnRk SW5kZXhdLkZpeGVkU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSA9PSAwKSB7DQo+ID4gICAgICBERUJV RygoREVCVUdfSU5GTywgIkNyZWF0ZVNlY29uZExldmVsUGFnaW5nRW50cnkgLSAlZFxuIiwNCj4g PiBWdGRJbmRleCkpOw0KPiA+IC0gICAgbVZ0ZFVuaXRJbmZvcm1hdGlvbltWdGRJbmRleF0uRml4 ZWRTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5ID0NCj4gPiBDcmVhdGVTZWNvbmRMZXZlbFBhZ2luZ0Vu dHJ5IChWdGRJbmRleCwgRURLSUlfSU9NTVVfQUNDRVNTX1JFQUQgfA0KPiA+IEVES0lJX0lPTU1V X0FDQ0VTU19XUklURSk7DQo+ID4gKyAgICBtVnRkVW5pdEluZm9ybWF0aW9uW1Z0ZEluZGV4XS5G aXhlZFNlY29uZExldmVsUGFnaW5nRW50cnkgPQ0KPiA+IENyZWF0ZVNlY29uZExldmVsUGFnaW5n RW50cnkgKFZ0ZEluZGV4LCBFREtJSV9JT01NVV9BQ0NFU1NfUkVBRCB8DQo+ID4gRURLSUlfSU9N TVVfQUNDRVNTX1dSSVRFLA0KPiA+IG1WdGRVbml0SW5mb3JtYXRpb25bVnRkSW5kZXhdLklzNUxl dmVsUGFnaW5nKTsNCj4gPiAgICB9DQo+ID4NCj4gPiAgICBTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5 ID0NCj4gPiBtVnRkVW5pdEluZm9ybWF0aW9uW1Z0ZEluZGV4XS5GaXhlZFNlY29uZExldmVsUGFn aW5nRW50cnk7DQo+ID4gZGlmZiAtLWdpdA0KPiA+IGEvU2lsaWNvbi9JbnRlbC9JbnRlbFNpbGlj b25Qa2cvRmVhdHVyZS9WVGQvSW50ZWxWVGREeGUvVHJhbnNsYXRpb25UYWJsZUV4Lg0KPiA+IGMN Cj4gPiBiL1NpbGljb24vSW50ZWwvSW50ZWxTaWxpY29uUGtnL0ZlYXR1cmUvVlRkL0ludGVsVlRk RHhlL1RyYW5zbGF0aW9uVGFibGVFeC4NCj4gPiBjDQo+ID4gaW5kZXggMGVkOWUzY2EuLmE0NDY2 ODkxIDEwMDY0NA0KPiA+IC0tLQ0KPiA+IGEvU2lsaWNvbi9JbnRlbC9JbnRlbFNpbGljb25Qa2cv RmVhdHVyZS9WVGQvSW50ZWxWVGREeGUvVHJhbnNsYXRpb25UYWJsZUV4Lg0KPiA+IGMNCj4gPiAr KysNCj4gPiBiL1NpbGljb24vSW50ZWwvSW50ZWxTaWxpY29uUGtnL0ZlYXR1cmUvVlRkL0ludGVs VlRkRHhlL1RyYW5zbGF0aW9uVGFibGVFeC4NCj4gPiBjDQo+ID4gQEAgLTc4LDExICs3OCwyOCBA QCBDcmVhdGVFeHRDb250ZXh0RW50cnkgKA0KPiA+DQo+ID4gICAgICBERUJVRyAoKERFQlVHX0lO Rk8sIkRPTUFJTjogUyUwNHgsIEIlMDJ4IEQlMDJ4IEYlMDJ4XG4iLA0KPiA+IG1WdGRVbml0SW5m b3JtYXRpb25bVnRkSW5kZXhdLlNlZ21lbnQsIFNvdXJjZUlkLkJpdHMuQnVzLA0KPiA+IFNvdXJj ZUlkLkJpdHMuRGV2aWNlLCBTb3VyY2VJZC5CaXRzLkZ1bmN0aW9uKSk7DQo+ID4NCj4gPiAtICAg IGlmICgobVZ0ZFVuaXRJbmZvcm1hdGlvbltWdGRJbmRleF0uQ2FwUmVnLkJpdHMuU0FHQVcgJiBC SVQyKSA9PSAwKSB7DQo+ID4gLSAgICAgIERFQlVHKChERUJVR19FUlJPUiwgIiEhISEgNC1sZXZl bCBwYWdlLXRhYmxlIGlzIG5vdCBzdXBwb3J0ZWQgb24NCj4gPiBWVEQgJWQgISEhIVxuIiwgVnRk SW5kZXgpKTsNCj4gPiArICAgIG1WdGRVbml0SW5mb3JtYXRpb25bVnRkSW5kZXhdLklzNUxldmVs UGFnaW5nID0gRkFMU0U7DQo+ID4gKyAgICBpZiAoKG1WdGRVbml0SW5mb3JtYXRpb25bVnRkSW5k ZXhdLkNhcFJlZy5CaXRzLlNBR0FXICYgQklUMykgIT0gMCkgew0KPiA+ICsgICAgICBtVnRkVW5p dEluZm9ybWF0aW9uW1Z0ZEluZGV4XS5JczVMZXZlbFBhZ2luZyA9IFRSVUU7DQo+ID4gKyAgICAg IGlmIChtQWNwaURtYXJUYWJsZS0+SG9zdEFkZHJlc3NXaWR0aCA8PSA0OCkgew0KPiA+ICsgICAg ICAgIGlmICgobVZ0ZFVuaXRJbmZvcm1hdGlvbltWdGRJbmRleF0uQ2FwUmVnLkJpdHMuU0FHQVcg JiBCSVQyKSAhPSAwKSB7DQo+ID4gKyAgICAgICAgICBtVnRkVW5pdEluZm9ybWF0aW9uW1Z0ZElu ZGV4XS5JczVMZXZlbFBhZ2luZyA9IEZBTFNFOw0KPiA+ICsgICAgICAgIH0NCj4gPiArICAgICAg fQ0KPiA+ICsgICAgfSBlbHNlIGlmICgobVZ0ZFVuaXRJbmZvcm1hdGlvbltWdGRJbmRleF0uQ2Fw UmVnLkJpdHMuU0FHQVcgJg0KPiA+ICsgQklUMikgPT0NCj4gPiAwKSB7DQo+ID4gKyAgICAgIERF QlVHKChERUJVR19FUlJPUiwgIiEhISEgUGFnZS10YWJsZSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQg b24NCj4gPiBWVEQgJWQgISEhIVxuIiwgVnRkSW5kZXgpKTsNCj4gPiAgICAgICAgcmV0dXJuIEVG SV9VTlNVUFBPUlRFRDsNCj4gPiAgICAgIH0NCj4gPiAtICAgIEV4dENvbnRleHRFbnRyeS0+Qml0 cy5BZGRyZXNzV2lkdGggPSAweDI7DQo+ID4gKw0KPiA+ICsgICAgaWYgKG1WdGRVbml0SW5mb3Jt YXRpb25bVnRkSW5kZXhdLklzNUxldmVsUGFnaW5nKSB7DQo+ID4gKyAgICAgIEV4dENvbnRleHRF bnRyeS0+Qml0cy5BZGRyZXNzV2lkdGggPSAweDM7DQo+ID4gKyAgICAgIERFQlVHKChERUJVR19F UlJPUiwgIlVzaW5nIDQtbGV2ZWwgcGFnZS10YWJsZSBvbiBWVEQgJWRcbiIsDQo+ID4gVnRkSW5k ZXgpKTsNCj4gPiArICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgIEV4dENvbnRleHRFbnRyeS0+Qml0 cy5BZGRyZXNzV2lkdGggPSAweDI7DQo+ID4gKyAgICAgIERFQlVHKChERUJVR19FUlJPUiwgIlVz aW5nIDUtbGV2ZWwgcGFnZS10YWJsZSBvbiBWVEQgJWRcbiIsDQo+ID4gVnRkSW5kZXgpKTsNCj4g PiArICAgIH0NCj4gPiArDQo+ID4gKw0KPiA+ICAgIH0NCj4gPg0KPiA+ICAgIEZsdXNoUGFnZVRh YmxlTWVtb3J5IChWdGRJbmRleCwNCj4gPiAoVUlOVE4pbVZ0ZFVuaXRJbmZvcm1hdGlvbltWdGRJ bmRleF0uRXh0Um9vdEVudHJ5VGFibGUsDQo+ID4gRUZJX1BBR0VTX1RPX1NJWkUoRW50cnlUYWJs ZVBhZ2VzKSk7DQo+ID4gQEAgLTkzLDExICsxMTAsMTMgQEAgQ3JlYXRlRXh0Q29udGV4dEVudHJ5 ICgNCj4gPiAgLyoqDQo+ID4gICAgRHVtcCBETUFSIGV4dGVuZGVkIGNvbnRleHQgZW50cnkgdGFi bGUuDQo+ID4NCj4gPiAtICBAcGFyYW1baW5dICBFeHRSb290RW50cnkgRE1BUiBleHRlbmRlZCBy b290IGVudHJ5Lg0KPiA+ICsgIEBwYXJhbVtpbl0gIEV4dFJvb3RFbnRyeSAgICBETUFSIGV4dGVu ZGVkIHJvb3QgZW50cnkuDQo+ID4gKyAgQHBhcmFtW2luXSAgSXM1TGV2ZWxQYWdpbmcgIElmIGl0 IGlzIHRoZSA1IGxldmVsIHBhZ2luZy4NCj4gPiAgKiovDQo+ID4gIFZPSUQNCj4gPiAgRHVtcERt YXJFeHRDb250ZXh0RW50cnlUYWJsZSAoDQo+ID4gLSAgSU4gVlREX0VYVF9ST09UX0VOVFJZICpF eHRSb290RW50cnkNCj4gPiArICBJTiBWVERfRVhUX1JPT1RfRU5UUlkgKkV4dFJvb3RFbnRyeSwg IElOIEJPT0xFQU4gSXM1TGV2ZWxQYWdpbmcNCj4gPiAgICApDQo+ID4gIHsNCj4gPiAgICBVSU5U TiAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ID4gQEAgLTEyNyw3ICsxNDYsNyBAQCBEdW1wRG1h ckV4dENvbnRleHRFbnRyeVRhYmxlICgNCj4gPiAgICAgICAgaWYgKEV4dENvbnRleHRFbnRyeVtJ bmRleDJdLkJpdHMuUHJlc2VudCA9PSAwKSB7DQo+ID4gICAgICAgICAgY29udGludWU7DQo+ID4g ICAgICAgIH0NCj4gPiAtICAgICAgRHVtcFNlY29uZExldmVsUGFnaW5nRW50cnkgKChWT0lEDQo+ ID4gKikoVUlOVE4pVlREXzY0QklUU19BRERSRVNTKEV4dENvbnRleHRFbnRyeVtJbmRleDJdLkJp dHMuU2Vjb25kTGV2ZWxQYQ0KPiA+IGdlVHJhbnNsYXRpb25Qb2ludGVyTG8sDQo+ID4gRXh0Q29u dGV4dEVudHJ5W0luZGV4Ml0uQml0cy5TZWNvbmRMZXZlbFBhZ2VUcmFuc2xhdGlvblBvaW50ZXJI aSkpOw0KPiA+ICsgICAgICBEdW1wU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSAoKFZPSUQNCj4gPiAq KShVSU5UTilWVERfNjRCSVRTX0FERFJFU1MoRXh0Q29udGV4dEVudHJ5W0luZGV4Ml0uQml0cy5T ZWNvbmRMZXZlbFBhDQo+ID4gZ2VUcmFuc2xhdGlvblBvaW50ZXJMbywNCj4gPiBFeHRDb250ZXh0 RW50cnlbSW5kZXgyXS5CaXRzLlNlY29uZExldmVsUGFnZVRyYW5zbGF0aW9uUG9pbnRlckhpKSwN Cj4gPiBJczVMZXZlbFBhZ2luZyk7DQo+ID4gICAgICB9DQo+ID4NCj4gPiAgICAgIGlmIChFeHRS b290RW50cnlbSW5kZXhdLkJpdHMuVXBwZXJQcmVzZW50ID09IDApIHsgZGlmZiAtLWdpdA0KPiA+ IGEvU2lsaWNvbi9JbnRlbC9JbnRlbFNpbGljb25Qa2cvRmVhdHVyZS9WVGQvSW50ZWxWVGREeGUv VnRkUmVnLmMNCj4gPiBiL1NpbGljb24vSW50ZWwvSW50ZWxTaWxpY29uUGtnL0ZlYXR1cmUvVlRk L0ludGVsVlRkRHhlL1Z0ZFJlZy5jDQo+ID4gaW5kZXggNjk5NjM5YmEuLjY4NmQyMzVmIDEwMDY0 NA0KPiA+IC0tLSBhL1NpbGljb24vSW50ZWwvSW50ZWxTaWxpY29uUGtnL0ZlYXR1cmUvVlRkL0lu dGVsVlRkRHhlL1Z0ZFJlZy5jDQo+ID4gKysrIGIvU2lsaWNvbi9JbnRlbC9JbnRlbFNpbGljb25Q a2cvRmVhdHVyZS9WVGQvSW50ZWxWVGREeGUvVnRkUmVnLmMNCj4gPiBAQCAtMTc0LDggKzE3NCwx NCBAQCBQcmVwYXJlVnRkQ29uZmlnICgNCj4gPiAgICAgIGlmICgobVZ0ZFVuaXRJbmZvcm1hdGlv bltJbmRleF0uQ2FwUmVnLkJpdHMuU0xMUFMgJiBCSVQwKSA9PSAwKSB7DQo+ID4gICAgICAgIERF QlVHKChERUJVR19XQVJOLCAiISEhISAyTUIgc3VwZXIgcGFnZSBpcyBub3Qgc3VwcG9ydGVkIG9u IFZURA0KPiA+ICVkICEhISFcbiIsIEluZGV4KSk7DQo+ID4gICAgICB9DQo+ID4gLSAgICBpZiAo KG1WdGRVbml0SW5mb3JtYXRpb25bSW5kZXhdLkNhcFJlZy5CaXRzLlNBR0FXICYgQklUMikgPT0g MCkgew0KPiA+IC0gICAgICBERUJVRygoREVCVUdfRVJST1IsICIhISEhIDQtbGV2ZWwgcGFnZS10 YWJsZSBpcyBub3Qgc3VwcG9ydGVkIG9uDQo+ID4gVlREICVkICEhISFcbiIsIEluZGV4KSk7DQo+ ID4gKyAgICBpZiAoKG1WdGRVbml0SW5mb3JtYXRpb25bSW5kZXhdLkNhcFJlZy5CaXRzLlNBR0FX ICYgQklUMykgIT0gMCkgew0KPiA+ICsgICAgICBERUJVRygoREVCVUdfSU5GTywgIlN1cHBvcnQg NS1sZXZlbCBwYWdlLXRhYmxlIG9uIFZURCAlZFxuIiwNCj4gPiBJbmRleCkpOw0KPiA+ICsgICAg fQ0KPiA+ICsgICAgaWYgKChtVnRkVW5pdEluZm9ybWF0aW9uW0luZGV4XS5DYXBSZWcuQml0cy5T QUdBVyAmIEJJVDIpICE9IDApIHsNCj4gPiArICAgICAgREVCVUcoKERFQlVHX0lORk8sICJTdXBw b3J0IDQtbGV2ZWwgcGFnZS10YWJsZSBvbiBWVEQgJWRcbiIsDQo+ID4gSW5kZXgpKTsNCj4gPiAr ICAgIH0NCj4gPiArICAgIGlmICgobVZ0ZFVuaXRJbmZvcm1hdGlvbltJbmRleF0uQ2FwUmVnLkJp dHMuU0FHQVcgJiAoQklUMyB8DQo+ID4gKyBCSVQyKSkgPT0gMCkNCj4gPiB7DQo+ID4gKyAgICAg IERFQlVHKChERUJVR19FUlJPUiwgIiEhISEgUGFnZS10YWJsZSB0eXBlIDB4JVggaXMgbm90IHN1 cHBvcnRlZA0KPiA+ICsgb24NCj4gPiBWVEQgJWQgISEhIVxuIiwgSW5kZXgsIG1WdGRVbml0SW5m b3JtYXRpb25bSW5kZXhdLkNhcFJlZy5CaXRzLlNBR0FXKSk7DQo+ID4gICAgICAgIHJldHVybiA7 DQo+ID4gICAgICB9DQo+ID4NCj4gPiAtLQ0KPiA+IDIuMTYuMi53aW5kb3dzLjENCg0K