From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by spool.mail.gandi.net (Postfix) with ESMTPS id DC214D80A07 for ; Wed, 24 Jan 2024 17:40:05 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=oxcBCbIH7D20p9ONqmvUsfXFNu4q67oZGpt9NEWD9/A=; c=relaxed/simple; d=groups.io; h=ARC-Seal:ARC-Message-Signature:ARC-Authentication-Results:From:To:CC:Subject:Thread-Topic:Thread-Index:Date:Message-ID:References:In-Reply-To:Accept-Language:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Language:Content-Type:Content-Transfer-Encoding; s=20140610; t=1706118004; v=1; b=qMffKh4uJL1DeUekSLqT7GKPtzCJjFfHzf9bqaKxVTais8tZrS09KHQKd/U+5IhbrdzbHJ+O 693bJv5U1opuD6NHOAo/LyHsidP+ZMddczVmb2WLO/A1Sk7ubo+vOjEB0ls0DvUEuqqUSS5b9Kv LOZ5FQf4ul3qdvZeclO0yj7o= X-Received: by 127.0.0.2 with SMTP id jk4MYY7687511xeOKO6V6OKp; Wed, 24 Jan 2024 09:40:04 -0800 X-Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.12]) by mx.groups.io with SMTP id smtpd.web10.29403.1706118002898638519 for ; Wed, 24 Jan 2024 09:40:03 -0800 X-IronPort-AV: E=McAfee;i="6600,9927,10962"; a="9286069" X-IronPort-AV: E=Sophos;i="6.05,216,1701158400"; d="scan'208";a="9286069" X-Received: from fmviesa001.fm.intel.com ([10.60.135.141]) by orvoesa104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Jan 2024 09:40:02 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.05,216,1701158400"; d="scan'208";a="28466714" X-Received: from fmsmsx603.amr.corp.intel.com ([10.18.126.83]) by fmviesa001.fm.intel.com with ESMTP/TLS/AES256-GCM-SHA384; 24 Jan 2024 09:40:02 -0800 X-Received: from fmsmsx610.amr.corp.intel.com (10.18.126.90) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Wed, 24 Jan 2024 09:40:01 -0800 X-Received: from FMSEDG603.ED.cps.intel.com (10.1.192.133) by fmsmsx610.amr.corp.intel.com (10.18.126.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35 via Frontend Transport; Wed, 24 Jan 2024 09:40:01 -0800 X-Received: from NAM12-DM6-obe.outbound.protection.outlook.com (104.47.59.169) by edgegateway.intel.com (192.55.55.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.35; Wed, 24 Jan 2024 09:40:01 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LUPNahqeBSrbdEW7BVsXJVi4bX6P4rYj8i8sSTQaFY/4WFPiMi36RP6DjdFHkmb1z9Gjp1nPvjW8mtHH13d+dVrEzXeXJE9HrEAEUOQbjliQspCfykoz+2VFQDwNN2WbdT2NnWYidl/IaqWHuApXN3i8uUfmIsurCnVRmpopmCe4bK3xKcpr7AhdJFnFcm3UscoBsyGu9lI+Iui/N1oJJLWnOlx268G4fIFkbxMfmwEH4pgtq+gAH6Aic3JZMC3T+UQVuuKEGKRSH6gWLhTFFkm9FZKaPvN8ob5b6EA5S0e5D4D0ba9AJgchrMdqGULJ+b0fQkcWWIMiQyjcVWuu2g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=fVZ/VJN5lG+Dm2jF6Oxq0yjGL8f/HYtAJCxHmn25nIc=; b=HiwAhcIGvLiXrcTqQRyH+Im3XPCksEQ9dmP9zXluFHAj4OFC+VwOtxNDO3o+geniEIWlYVq6LNZE9Mg/c//tc3+US9JDJBofD36nNuBkRq3CczHUGWZPmIrkHfexQBx48I0i+snsZ6CPFOn5RAZt0AKvI2LKoPqS1UpZRJFALBNoi49FC+Ubt/vDJvQx9TPn4aSC5ZscYMO3G3fSJXggEKppNsclSeuTNkvwxd1/M/KQFtIFvoAs8Gh7FczuuD7UfSoIY21dZ2NeFgovdaTJYbijkbKGWA3PS3rnr+QEvycMmGhdhaiyd2I3oQwXVEsiiB0Xjzo9cKO8ihOoPG4ftA== 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 X-Received: from CO1PR11MB4929.namprd11.prod.outlook.com (2603:10b6:303:6d::19) by DM4PR11MB6119.namprd11.prod.outlook.com (2603:10b6:8:b0::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7202.37; Wed, 24 Jan 2024 17:39:58 +0000 X-Received: from CO1PR11MB4929.namprd11.prod.outlook.com ([fe80::7e42:1633:d0a6:9c00]) by CO1PR11MB4929.namprd11.prod.outlook.com ([fe80::7e42:1633:d0a6:9c00%6]) with mapi id 15.20.7202.035; Wed, 24 Jan 2024 17:39:58 +0000 From: "Michael D Kinney" To: Laszlo Ersek , "devel@edk2.groups.io" CC: Liming Gao , "Li, Aaron" , "Liu, Yun Y" , Andrew Fish , "Kinney, Michael D" Subject: Re: [edk2-devel] [Patch v2 1/1] MdeModulePkg/Core/Dxe: Set MemoryTypeInfo bin range from HOB Thread-Topic: [edk2-devel] [Patch v2 1/1] MdeModulePkg/Core/Dxe: Set MemoryTypeInfo bin range from HOB Thread-Index: AQHaTjqgmCHwbMdNk0WY7JSyI6lswLDpA5YAgAA0O+A= Date: Wed, 24 Jan 2024 17:39:58 +0000 Message-ID: References: <20240123202424.1960-1-michael.d.kinney@intel.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CO1PR11MB4929:EE_|DM4PR11MB6119:EE_ x-ms-office365-filtering-correlation-id: ec458d2d-2dc0-47b3-95ab-08dc1d037bef x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam-message-info: 16PCml+D2m7zwvfat6cFcbzTWoTrpQpME3WAhxp/zKQwLsArlGH9Vxx1m0GRlFXLxU41UM4qAuhNyCz4pJqp7KreZ8DUp1AukQ5vdFRgxuehvfOLKtwF2ANEtJLIsXlAxLVCP3ggs21wVaZDGahqRY3a+UncjY3i9wquyfLviw5zdoaK/Yfe8gyAIuhniHknG8E5vayLMLV99vRUYRKDvBM9F1XViL26hijb9CzeotlveQDnEmZtoWGjOp8aeaMDI0EdSJD/lyjuwJ761gFbW1jiZGDNzEnK23oJyLtc57jT2fHIBRaFzFxUB+B7dTCjCO6V6c4w2EZiwkAsCXwwLlp5uFvyJZXGcTVCdYFSvBy6bO18b/vBNZZX9C5n/IH92M5yj4DGOMK2xn4D0AC5hFogQQ61XjrKsGUCU397Kgj3B5aesu/vcTXfS5V1J79cTcYgv0UIa4JnB6EgyxqvQq4/aT1yo3R4A6UrkeGYsSaRhofK7r6IHn40hNVY8aE+yhMc/WJuoUZBsfKNOgtLG8XdlLtgG60KLfga617xt/YmNx0E8Gn6u4XV6yBL74IwocnQK6+yBwYQUT8BL9uE93yZeUZauZVzbglIQ82gsLl9PhOFnNFWyulCtYfJpubH x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?cDZrUXFZRnJHU2l4c1ZwZHMzQnBVdlJaVWxGc3FCVkt5a0RmS0VaL0dEd3Bl?= =?utf-8?B?RlZKdVQ3dXpZaUJRN085Q3pJSUw2dUxPcmovZ2paakx3R3o3R0xjOE42Y3lS?= =?utf-8?B?V3BVZ2pmNjJrQ2lNVmE1NVNHRTdkbTAzMFNweGN3Y29BMUlzclhxZ2dmS1p6?= =?utf-8?B?eGlaVnhtM1pjQWhobmJLOUg3QXJwWG1nRWcwZUgxdklJQ2hJbmdqbFVRUW1y?= =?utf-8?B?eVozQzJvNHZYcVlSOWRhdGlqdXZsalJ0NW5xZG5kVllYdTRXMTRrNmVEL01S?= =?utf-8?B?eUdBeTNVblo3RVRMVktGNlIvMEEyK3RUNnhTV1gzTUpYaGIrSWcveCs4VUk5?= =?utf-8?B?UG5WUUxMWXpUTmJQWHBRY0RBblhyVTZKZ2ZrWDR2aVp1Lzk4S0xBWjZsZi9u?= =?utf-8?B?OGZrc1czb3JDdVpvNllMUXBFTmQ0S09HL1RpSk9FVUc2MUc3SVJNa25xa2xa?= =?utf-8?B?aVdpemVoQ2JyeHk0Sk1Ib3dPZEZGUjc5RVpnajZwSzVnKzBuK1BBUXZzbU50?= =?utf-8?B?K0psdml0SnBXcHRYbk92QnluQStuRlNWUTZVako5aVFYZmI0YnJFZTVMR25N?= =?utf-8?B?Z3M0ZlBvQmRjL3dPdmVFdThRazhyNjhHWEx2M2NXSm1pUklSK3Uxa1liWUtJ?= =?utf-8?B?aHQrUDJiMktvdzNOQUxjNXkzWGNCNXE5b0FMcEhGU0JlN1Zwcy9rNnBKRnhI?= =?utf-8?B?SlBiSzMrREFGUFEvRURxM0FPZWY0V05FSzUxanh2bjlIdVlPTkJzL3I5MW9E?= =?utf-8?B?KzNmbEoyMWVlMklnSkl6ZktVbm4vVWVIMkMwMDVLYUxLbm93aW1rLzJ2Um5T?= =?utf-8?B?QjJGMndmV0RIYkE1MUxGK3RhN0R5T0d0d3l2am12R2U1VGRQbm1RVzhaTGdM?= =?utf-8?B?VkRXUHptbzFGV1lKUkhaTDVaZ01YM0xiNkt2d2pDbWZpa2tWZVFPTm5ZbjFy?= =?utf-8?B?WDJTUzBCbG4yOVhaSWVYSEw5Y1dpQU8xZW1jQ0tGU2ZQam5vVkY1SktXdWp3?= =?utf-8?B?eXM1ODhQb09aYWRwcHdycmdUUzJFSnV2OHBLWXl2NWwwcWFtVzZ3NXJWay9J?= =?utf-8?B?RWxCNlJGNGtCbW5FaDZuQThkWkovaFZldjBXSjd4MEw4ZXRzcnR3aS9HdEc1?= =?utf-8?B?NGlVdExwMUtOaFRmT1F0cFhmWkpxZVUxamhPV25DNWNYV3Zod3F5ZFprNC9u?= =?utf-8?B?c1NQVFc5RnFCM21Zbi9zbEVkV09LMWtXODIvMGVYbHcxTUY4WTBtRXRsUDI2?= =?utf-8?B?eXJaZnRRM2FiV2xIeVprYVFwNkZjN0k3TVpiY1RvaVNYeTdCQk1uK2NqcER0?= =?utf-8?B?VE1qS2p0WDhOc3FQQ0o3d0l3eUZZWllJOFg3WWV6dUFpVkg0QlJvZjZDLyt4?= =?utf-8?B?bjIrSkgxcmRoaExKRHZKZzVPb3M5NGhzYnBRKzZoaDZXODRSaHpjTWkzbm1q?= =?utf-8?B?MHA0Qjk5elRHS0kxYWpQWEJ6OU1sM25Vd1JOSWQzVUpUMUpRTnRkYWw2UjJP?= =?utf-8?B?d2tGNFJWSGlWYjdxVk5lTFpoTW9md3BpWENQQVM1djQ1TnBkcEcrRUZxUjRM?= =?utf-8?B?cGQwTHRyMmxOaWwzT3Znc2NIZW1QRjgyNmdoUEJ5NGJsdHFOcUcrVkM2Z0lw?= =?utf-8?B?bEdreFJLYzFKa2hhY25LT0VjVXd2T2I3ZjFVNk90Z21LVWdKL1BWbEJqUXlP?= =?utf-8?B?S21kekNFZW1nVHpXcFBtSnNGUEdKczYrYk45OFMvbFhlMTVtR1V3SHlFOFlK?= =?utf-8?B?cWZLdXYyTC9XVmxJMnJsTDcvY0dhaVlnUHVUYi9vTU1XV0dEQ2w1d0xid0oy?= =?utf-8?B?ditXb1NhemRGam81UEx3aUtCYmtFNVp0bE13MHNEcDRIdjBOcHEyN3pWR0ts?= =?utf-8?B?WmtVRXFsTWRpTU9kZ2xJUHZjR0ZJT1RzOEJodnMwa09aUjNaNGxoWUxYemhQ?= =?utf-8?B?RHVOVGE4WjYzdUR3UTJiYWRMTm1aaU5aVnVpZFF2R1lLT3QyTzRPdWZmRDR2?= =?utf-8?B?V1phcUp0VjI3eS9laURrMU5DTlhBSmQ2Q25Qcm9jQnRaNTQ0UFZuendWMFZ6?= =?utf-8?B?VnNYdlRCMGpsWlN6UG9YeTZjK2d0THZrd3FJVlpMa0lwUktYUXVXdy9Hd0k2?= =?utf-8?B?RGhGdlg5M3BlNmNaSkpEZnBXS202K0prWlVha3Y4T2grWitFdk8zTWJwVC9F?= =?utf-8?B?TkE9PQ==?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CO1PR11MB4929.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: ec458d2d-2dc0-47b3-95ab-08dc1d037bef X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Jan 2024 17:39:58.0731 (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: h/Vz4cjmBTR5UQzjUtPdlgdbPicH035UgSXUnUI0mubroxpkClKSnL1Np0xHE3nVWUU/LyfauZb6bxpLcJHEH4tTWxTmwO118jGZ6UqDZVQ= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR11MB6119 X-OriginatorOrg: intel.com Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,michael.d.kinney@intel.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: icLNZn231ENtW3iirMJ8NYQPx7686176AA= Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20140610 header.b=qMffKh4u; spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce@groups.io; dmarc=fail reason="SPF not aligned (relaxed), DKIM not aligned (relaxed)" header.from=intel.com (policy=none); arc=reject ("signature check failed: fail, {[1] = sig:microsoft.com:reject}") SGkgTGFzemxvLA0KDQpSZXNwb25zZXMgYmVsb3cuDQoNCk1pa2UNCg0KPiAtLS0tLU9yaWdpbmFs IE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBMYXN6bG8gRXJzZWsgPGxlcnNla0ByZWRoYXQuY29tPg0K PiBTZW50OiBXZWRuZXNkYXksIEphbnVhcnkgMjQsIDIwMjQgNjoxNyBBTQ0KPiBUbzogZGV2ZWxA ZWRrMi5ncm91cHMuaW87IEtpbm5leSwgTWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVs LmNvbT4NCj4gQ2M6IExpbWluZyBHYW8gPGdhb2xpbWluZ0BieW9zb2Z0LmNvbS5jbj47IExpLCBB YXJvbg0KPiA8YWFyb24ubGlAaW50ZWwuY29tPjsgTGl1LCBZdW4gWSA8eXVuLnkubGl1QGludGVs LmNvbT47IEFuZHJldyBGaXNoDQo+IDxhZmlzaEBhcHBsZS5jb20+DQo+IFN1YmplY3Q6IFJlOiBb ZWRrMi1kZXZlbF0gW1BhdGNoIHYyIDEvMV0gTWRlTW9kdWxlUGtnL0NvcmUvRHhlOiBTZXQNCj4g TWVtb3J5VHlwZUluZm8gYmluIHJhbmdlIGZyb20gSE9CDQo+IA0KPiBPbiAxLzIzLzI0IDIxOjI0 LCBNaWNoYWVsIEQgS2lubmV5IHdyb3RlOg0KPiA+IFByb3ZpZGUgYW4gb3B0aW9uYWwgbWV0aG9k IGZvciBQRUkgdG8gZGVjbGFyZSBhIHNwZWNpZmljIGFkZHJlc3MNCj4gPiByYW5nZSB0byB1c2Ug Zm9yIHRoZSBNZW1vcnkgVHlwZSBJbmZvcm1hdGlvbiBiaW5zLiBUaGUgY3VycmVudA0KPiA+IGFs Z29yaXRobSB1c2VzIGhldXJpc3RpY3MgdGhhdCB0ZW5kcyB0byBwbGFjZSB0aGUgTWVtb3J5IFR5 cGUNCj4gPiBJbmZvcm1hdGlvbiBiaW5zIGluIHRoZSBzYW1lIGxvY2F0aW9uLCBidXQgbWVtb3J5 IGNvbmZpZ3VyYXRpb24NCj4gPiBjaGFuZ2VzIGFjcm9zcyBib290cyBvciBhbGdvcml0aG0gY2hh bmdlcyBhY3Jvc3MgYSBmaXJtd2FyZQ0KPiA+IHVwZGF0ZXMgY291bGQgcG90ZW50aWFsbHkgY2hh bmdlIHRoZSBNZW1vcnkgVHlwZSBJbmZvcm1hdGlvbiBiaW4NCj4gPiBsb2NhdGlvbi4NCj4gPg0K PiA+IElmIHRoZSBIT0IgTGlzdCBjb250YWlucyBhIFJlc291cmNlIERlc2NyaXB0b3IgSE9CIHRo YXQNCj4gPiBkZXNjcmliZXMgdGVzdGVkIHN5c3RlbSBtZW1vcnkgYW5kIGhhcyBhbiBPd25lciBH VUlEIG9mDQo+ID4gZ0VmaU1lbW9yeVR5cGVJbmZvcm1hdGlvbkd1aWQsIHRoZW4gdXNlIHRoZSBh ZGRyZXNzIHJhbmdlDQo+ID4gZGVzY3JpYmVkIGJ5IHRoZSBSZXNvdXJjZSBEZXNjcmlwdG9yIEhP QiBhcyB0aGUgcHJlZmVycmVkDQo+ID4gbG9jYXRpb24gb2YgdGhlIE1lbW9yeSBUeXBlIEluZm9y bWF0aW9uIGJpbnMuIElmIHRoaXMgSE9CIGlzDQo+ID4gbm90IGRldGVjdGVkLCB0aGVuIHRoZSBj dXJyZW50IGJlaGF2aW9yIGlzIHByZXNlcnZlZC4NCj4gPg0KPiA+IFRoZSBIT0Igd2l0aCBhbiBP d25lciBHVUlEIG9mIGdFZmlNZW1vcnlUeXBlSW5mb3JtYXRpb25HdWlkDQo+ID4gaXMgaWdub3Jl ZCBmb3IgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOg0KPiA+ICogVGhlIEhPQiB3aXRoIGFuIE93 bmVyIEdVSUQgb2YgZ0VmaU1lbW9yeVR5cGVJbmZvcm1hdGlvbkd1aWQNCj4gPiAgIGlzIHNtYWxs ZXIgdGhhbiB0aGUgTWVtb3J5IFR5cGUgSW5mb3JtYXRpb24gYmlucy4NCj4gPiAqIFRoZSBIT0Ig bGlzdCBjb250YWlucyBtb3JlIHRoYW4gb25lIFJlc291cmNlIERlc2NyaXB0b3IgSE9CDQo+ID4g ICB3aXRoIGFuIG93bmVyIEdVSUQgb2YgZ0VmaU1lbW9yeVR5cGVJbmZvcm1hdGlvbkd1aWQuDQo+ ID4gKiBUaGUgUmVzb3VyY2UgRGVzY3JpcHRvciBIT0Igd2l0aCBhbiBPd25lciBHVUlEIG9mDQo+ ID4gICBnRWZpTWVtb3J5VHlwZUluZm9ybWF0aW9uR3VpZCBpcyB0aGUgc2FtZSBSZXNvdXJjZSBE ZXNjcmlwdG9yDQo+ID4gICBIT0IgdGhhdCB0aGF0IGRlc2NyaWJlcyB0aGUgUEhJVCBtZW1vcnkg cmFuZ2UuDQo+IA0KPiBJIGZlZWwgdGhhdCwgd2hpbGUgdGhpcyBHVUlEIHVzYWdlIG1ha2VzIHNl bnNlLCBpdCBvdmVybG9hZHMgdGhlIGFscmVhZHkNCj4gZXhpc3RpbmcgbWVhbmluZ3Mgb2YgZ0Vm aU1lbW9yeVR5cGVJbmZvcm1hdGlvbkd1aWQuDQo+IA0KPiBXZSBhbHJlYWR5IHVzZSB0aGlzIEdV SUQgZm9yIHR3byB0aGluZ3M6DQo+IA0KPiAoc2VlICJNZGVNb2R1bGVQa2cvSW5jbHVkZS9HdWlk L01lbW9yeVR5cGVJbmZvcm1hdGlvbi5oIik6DQo+IA0KPiAtIFVFRkkgdmFyaWFibGUgbmFtZSBz cGFjZSBHVUlEIGZvciB0aGUgIk1lbW9yeVR5cGVJbmZvcm1hdGlvbiIgdmFyaWFibGUNCj4gDQo+ IC0gSE9CIG9mIHR5cGUgRUZJX0hPQl9UWVBFX0dVSURfRVhURU5TSU9OLCBjb250cm9sbGluZyB0 aGUgcGFnZSBjb3VudHMNCj4gaW4gdGhlIHZhcmlvdXMgbWVtb3J5IHR5cGUgYmlucy4NCj4gDQo+ IE5vdyB0aGlzIG5ldyB1c2Ugd291bGQgaW50cm9kdWNlIGEgSE9CIG9mIHR5cGUNCj4gRUZJX0hP Ql9UWVBFX1JFU09VUkNFX0RFU0NSSVBUT1IsIHdoZXJlIHRoZSBPd25lciBmaWVsZCBpcw0KPiBn RWZpTWVtb3J5VHlwZUluZm9ybWF0aW9uR3VpZCwgYW5kIHRoZSByYW5nZSBkZXNjcmliZWQgYnkg dGhlDQo+IFBoeXNpY2FsU3RhcnQgYW5kIFJlc291cmNlTGVuZ3RoIGZpZWxkcyB3b3VsZCBhY2Nv bW1vZGF0ZSB0aGUgYWN0dWFsDQo+IGJpbnMuIE9uIG9uZSBoYW5kIHRoaXMgbmV3IEhPQiBpcyBj ZXJ0YWlubHkgcmVsYXRlZCB0byB0aGUgcHJpb3IgdHdvDQo+IHVzZXMsIGJ1dCBvbiB0aGUgb3Ro ZXIgaGFuZCwgd2UnZCBub3cgaGF2ZSB0byBIT0JzIHRoYXQgdXNlZCB0aGUgInNhbWUNCj4gR1VJ RCIgZm9yIGRpZmZlcmVudCBwdXJwb3Nlcy4gV2hhdCBkaXN0aW5ndWlzaGVzIHRoZW0gaXMNCj4g RUZJX0hPQl9UWVBFX0dVSURfRVhURU5TSU9OIHZzLiBFRklfSE9CX1RZUEVfUkVTT1VSQ0VfREVT Q1JJUFRPUiAtLQ0KPiB3aGljaCBJIGZpbmQgYSBiaXQgdG9vIG9ic2N1cmUuDQo+IA0KPiAoMSkg U28gSSdkIGVpdGhlciBzdWdnZXN0IGdlbmVyYXRpbmcgYSBicmFuZCBuZXcgR1VJRCwgKm9yKiBl eHRlbmRpbmcNCj4gdGhlDQo+IGNvbW1lbnRzIGluICJNZGVNb2R1bGVQa2cvSW5jbHVkZS9HdWlk L01lbW9yeVR5cGVJbmZvcm1hdGlvbi5oIiB3aXRoIHRoZQ0KPiBuZXcgdXNhZ2U6DQoNCkkgd2ls bCBleHRlbmQgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBHVUlEIGluIE1lbW9yeVR5cGVJbmZvcm1h dGlvbi5oDQoNCj4gDQo+ID4gLyoqIEBmaWxlDQo+ID4gICBUaGlzIGZpbGUgZGVmaW5lczoNCj4g PiAgICogTWVtb3J5IFR5cGUgSW5mb3JtYXRpb24gR1VJRCBmb3IgSE9CIGFuZCBWYXJpYWJsZS4N Cj4gPiAgICogTWVtb3J5IFR5cGUgSW5mb3JtYXRpb24gVmFyaWFibGUgTmFtZS4NCj4gPiAgICog TWVtb3J5IFR5cGUgSW5mb3JtYXRpb24gR1VJRCBIT0IgZGF0YSBzdHJ1Y3R1cmUuDQo+ID4NCj4g PiAgIFRoZSBtZW1vcnkgdHlwZSBpbmZvcm1hdGlvbiBIT0IgYW5kIHZhcmlhYmxlIGNhbg0KPiA+ ICAgYmUgdXNlZCB0byBzdG9yZSB0aGUgaW5mb3JtYXRpb24gZm9yIGVhY2ggbWVtb3J5IHR5cGUg aW4gVmFyaWFibGUgb3INCj4gSE9CLg0KPiA+DQo+ID4gQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAx OCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiA+IFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4NCj4gPiAqKi8NCj4g DQo+IEJhY2sgdG8gdGhlIHBhdGNoOg0KPiANCj4gT24gMS8yMy8yNCAyMToyNCwgTWljaGFlbCBE IEtpbm5leSB3cm90ZToNCj4gPiBVcGRhdGUgdGhlIER4ZU1haW4gaW5pdGlhbGl6YXRpb24gb3Jk ZXIgdG8gaW5pdGlhbGl6ZSBHQ0QNCj4gPiBzZXJ2aWNlcyBiZWZvcmUgYW55IHJ1bnRpbWUgYWxs b2NhdGlvbnMgYXJlIHBlcmZvcm1lZC4gIFRoaXMNCj4gPiBpcyByZXF1aXJlZCB0byBwcmV2ZW50 IHJ1bnRpbWUgZGF0YSBmcmFnbWVudGF0aW9uIHdoZW4gdGhlDQo+ID4gVUVGSSBTeXN0ZW0gVGFi bGUgYW5kIFVFRkkgUnVudGltZSBTZXJ2aWNlIFRhYmxlIGlzIGFsbG9jYXRlZC4NCj4gDQo+ICgy KSBTaG91bGQgdGhpcyBiZSBhIHNlcGFyYXRlIHBhdGNoPyAoRmlyc3QgcGF0Y2ggaW4gdGhlIHNl cmllcz8pIFRoaXMNCj4gc2VlbXMNCj4gdG8gZWZmZWN0IGJlaGF2aW9yIGV2ZW4gaWYgdGhlIG5l dyBIT0IgaXMgbm90IHByZXNlbnQuDQoNCkkgZGlkIGNvbnNpZGVyIGRvaW5nIHRoaXMgYXMgYSBz ZXBhcmF0ZSBwYXRjaCBiZWNhdXNlIHRoZSBjaGFuZ2UgaW4gdGhlDQpvcmRlciBvZiBpbml0IGlu IER4ZU1haW4gY2FuIGJlIGRvbmUgaW5kZXBlbmRlbnQgb2YgdGhpcyBuZXcgb3B0aW9uYWwNCmZl YXR1cmUuICBJIHdpbGwgYnJlYWsgaXQgb3V0IHRvIG1ha2UgdGhhdCBjbGVhciBhbmQgc2ltcGxl ciB0byByZXZpZXcuDQpUaGUgbmV3IGZlYXR1cmUgZG9lcyBkZXBlbmQgb24gdGhpcyBuZXcgb3Jk ZXIgc28gaXQgaGFzIHRvIGJlIHRoZSBmaXJzdA0KcGF0Y2guDQoNCj4gDQo+ID4NCj4gPiBDYzog TGltaW5nIEdhbyA8Z2FvbGltaW5nQGJ5b3NvZnQuY29tLmNuPg0KPiA+IENjOiBBYXJvbiBMaSA8 YWFyb24ubGlAaW50ZWwuY29tPg0KPiA+IENjOiBMaXUgWXVuIDx5dW4ueS5saXVAaW50ZWwuY29t Pg0KPiA+IENjOiBBbmRyZXcgRmlzaCA8YWZpc2hAYXBwbGUuY29tPg0KPiA+IFNpZ25lZC1vZmYt Ynk6IE1pY2hhZWwgRCBLaW5uZXkgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPg0KPiA+IC0t LQ0KPiA+ICBNZGVNb2R1bGVQa2cvQ29yZS9EeGUvRHhlTWFpbi5oICAgICAgICAgfCAgIDYgKysN Cj4gPiAgTWRlTW9kdWxlUGtnL0NvcmUvRHhlL0R4ZU1haW4vRHhlTWFpbi5jIHwgIDIzICsrKy0t LQ0KPiA+ICBNZGVNb2R1bGVQa2cvQ29yZS9EeGUvR2NkL0djZC5jICAgICAgICAgfCAgNzIgKysr KysrKysrKysrKysrKy0NCj4gPiAgTWRlTW9kdWxlUGtnL0NvcmUvRHhlL01lbS9QYWdlLmMgICAg ICAgIHwgMTAxDQo+ICsrKysrKysrKysrKysrKysrKysrKysrKw0KPiA+ICA0IGZpbGVzIGNoYW5n ZWQsIDE5MCBpbnNlcnRpb25zKCspLCAxMiBkZWxldGlvbnMoLSkNCj4gPg0KPiA+IGRpZmYgLS1n aXQgYS9NZGVNb2R1bGVQa2cvQ29yZS9EeGUvRHhlTWFpbi5oDQo+IGIvTWRlTW9kdWxlUGtnL0Nv cmUvRHhlL0R4ZU1haW4uaA0KPiA+IGluZGV4IDg2YTdiZTJmNTE4OC4uNTNlMjY3MDNmOGM3IDEw MDY0NA0KPiA+IC0tLSBhL01kZU1vZHVsZVBrZy9Db3JlL0R4ZS9EeGVNYWluLmgNCj4gPiArKysg Yi9NZGVNb2R1bGVQa2cvQ29yZS9EeGUvRHhlTWFpbi5oDQo+ID4gQEAgLTI3Nyw2ICsyNzcsMTIg QEAgQ29yZUluaXRpYWxpemVQb29sICgNCj4gPiAgICBWT0lEDQo+ID4gICAgKTsNCj4gPg0KPiA+ ICtWT0lEDQo+ID4gK0NvcmVTZXRNZW1vcnlUeXBlSW5mb3JtYXRpb25SYW5nZSAoDQo+ID4gKyAg SU4gRUZJX1BIWVNJQ0FMX0FERFJFU1MgIFN0YXJ0LA0KPiA+ICsgIElOIFVJTlQ2NCAgICAgICAg ICAgICAgICBMZW5ndGgNCj4gPiArICApOw0KPiA+ICsNCj4gPiAgLyoqDQo+ID4gICAgQ2FsbGVk IHRvIGluaXRpYWxpemUgdGhlIG1lbW9yeSBtYXAgYW5kIGFkZCBkZXNjcmlwdG9ycyB0bw0KPiA+ ICAgIHRoZSBjdXJyZW50IGRlc2NyaXB0b3IgbGlzdC4NCj4gPiBkaWZmIC0tZ2l0IGEvTWRlTW9k dWxlUGtnL0NvcmUvRHhlL0R4ZU1haW4vRHhlTWFpbi5jDQo+IGIvTWRlTW9kdWxlUGtnL0NvcmUv RHhlL0R4ZU1haW4vRHhlTWFpbi5jDQo+ID4gaW5kZXggMGUwZjk3NjliOTlkLi4xN2Q1MTBhMjg3 ZTUgMTAwNjQ0DQo+ID4gLS0tIGEvTWRlTW9kdWxlUGtnL0NvcmUvRHhlL0R4ZU1haW4vRHhlTWFp bi5jDQo+ID4gKysrIGIvTWRlTW9kdWxlUGtnL0NvcmUvRHhlL0R4ZU1haW4vRHhlTWFpbi5jDQo+ ID4gQEAgLTI3Niw2ICsyNzYsMTggQEAgRHhlTWFpbiAoDQo+ID4NCj4gPiAgICBNZW1vcnlQcm9m aWxlSW5pdCAoSG9iU3RhcnQpOw0KPiA+DQo+ID4gKyAgLy8NCj4gPiArICAvLyBTdGFydCB0aGUg SW1hZ2UgU2VydmljZXMuDQo+ID4gKyAgLy8NCj4gPiArICBTdGF0dXMgPSBDb3JlSW5pdGlhbGl6 ZUltYWdlU2VydmljZXMgKEhvYlN0YXJ0KTsNCj4gPiArICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0 dXMpOw0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIEluaXRpYWxpemUgdGhlIEdsb2JhbCBD b2hlcmVuY3kgRG9tYWluIFNlcnZpY2VzDQo+ID4gKyAgLy8NCj4gPiArICBTdGF0dXMgPSBDb3Jl SW5pdGlhbGl6ZUdjZFNlcnZpY2VzICgmSG9iU3RhcnQsIE1lbW9yeUJhc2VBZGRyZXNzLA0KPiBN ZW1vcnlMZW5ndGgpOw0KPiA+ICsgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+ID4gKw0K PiA+ICAgIC8vDQo+ID4gICAgLy8gQWxsb2NhdGUgdGhlIEVGSSBTeXN0ZW0gVGFibGUgYW5kIEVG SSBSdW50aW1lIFNlcnZpY2UgVGFibGUgZnJvbQ0KPiBFZmlSdW50aW1lU2VydmljZXNEYXRhDQo+ ID4gICAgLy8gVXNlIHRoZSB0ZW1wbGF0ZXMgdG8gaW5pdGlhbGl6ZSB0aGUgY29udGVudHMgb2Yg dGhlIEVGSSBTeXN0ZW0NCj4gVGFibGUgYW5kIEVGSSBSdW50aW1lIFNlcnZpY2VzIFRhYmxlDQo+ ID4gQEAgLTI4OSwxNiArMzAxLDkgQEAgRHhlTWFpbiAoDQo+ID4gICAgZ0R4ZUNvcmVTVC0+UnVu dGltZVNlcnZpY2VzID0gZ0R4ZUNvcmVSVDsNCj4gPg0KPiA+ICAgIC8vDQo+ID4gLSAgLy8gU3Rh cnQgdGhlIEltYWdlIFNlcnZpY2VzLg0KPiA+ICsgIC8vIFVwZGF0ZSBEWEUgQ29yZSBMb2FkZWQg SW1hZ2UgUHJvdG9jb2wgd2l0aCBhbGxvY2F0ZWQgVUVGSSBTeXN0ZW0NCj4gVGFibGUNCj4gPiAg ICAvLw0KPiA+IC0gIFN0YXR1cyA9IENvcmVJbml0aWFsaXplSW1hZ2VTZXJ2aWNlcyAoSG9iU3Rh cnQpOw0KPiA+IC0gIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+ID4gLQ0KPiA+IC0gIC8v DQo+ID4gLSAgLy8gSW5pdGlhbGl6ZSB0aGUgR2xvYmFsIENvaGVyZW5jeSBEb21haW4gU2Vydmlj ZXMNCj4gPiAtICAvLw0KPiA+IC0gIFN0YXR1cyA9IENvcmVJbml0aWFsaXplR2NkU2VydmljZXMg KCZIb2JTdGFydCwgTWVtb3J5QmFzZUFkZHJlc3MsDQo+IE1lbW9yeUxlbmd0aCk7DQo+ID4gLSAg QVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4gPiArICBnRHhlQ29yZUxvYWRlZEltYWdlLT5T eXN0ZW1UYWJsZSA9IGdEeGVDb3JlU1Q7DQo+ID4NCj4gPiAgICAvLw0KPiA+ICAgIC8vIENhbGwg Y29uc3RydWN0b3IgZm9yIGFsbCBsaWJyYXJpZXMNCj4gDQo+ICgzKSBUaGUgc2VwYXJhdGUgYXNz aWdubWVudCB0byAiZ0R4ZUNvcmVMb2FkZWRJbWFnZS0+U3lzdGVtVGFibGUiDQo+IGJlY29tZXMg bmVjZXNzYXJ5IGJlY2F1c2UgQ29yZUluaXRpYWxpemVJbWFnZVNlcnZpY2VzKCkgaXMgaG9pc3Rl ZCBhYm92ZQ0KPiANCj4gICBnRHhlQ29yZVNUID0gQWxsb2NhdGVSdW50aW1lQ29weVBvb2wgKHNp emVvZiAoRUZJX1NZU1RFTV9UQUJMRSksDQo+ICZtRWZpU3lzdGVtVGFibGVUZW1wbGF0ZSk7DQo+ IA0KPiBhbmQgdGhlcmVmb3JlIHRoZSBhc3NpZ25tZW50DQo+IA0KPiAgIEltYWdlLT5JbmZvLlN5 c3RlbVRhYmxlID0gZ0R4ZUNvcmVTVDsNCj4gDQo+IGluIENvcmVJbml0aWFsaXplSW1hZ2VTZXJ2 aWNlcygpIGJlY29tZXMgaW5lZmZlY3RpdmUgLS0gYXQgdGhhdCB0aW1lLA0KPiBnRHhlQ29yZVNU IGlzIE5VTEwsIHBvc3QtcGF0Y2guDQo+IA0KPiBUaGlzIGRvdWJsZS13cml0ZSAob3ZlcndyaXRl KSB0byB0aGUgU3lzdGVtVGFibGUgZmllbGQgaXMgY29uZnVzaW5nLiBJDQo+IHByb3Bvc2UgKGFn YWluLCBpbiBzYWlkIHNlcGFyYXRlLCBmaXJzdCBwYXRjaCkgdGhlIHJlbW92YWwgb2YgdGhlDQo+ IG5vdy1pbmVmZmVjdGl2ZSBhc3NpZ25tZW50IGZyb20gQ29yZUluaXRpYWxpemVJbWFnZVNlcnZp Y2VzKCkuDQoNCg0KQWdyZWVkLiAgSSB3aWxsIHJlbW92ZSB0aGF0IGluZWZmZWN0aXZlIGFzc2ln bm1lbnQgYW5kIGRvIHRoYXQgaW4gdGhlDQpmaXJzdCBwYXRjaC4NCg0KPiANCj4gDQo+ID4gZGlm ZiAtLWdpdCBhL01kZU1vZHVsZVBrZy9Db3JlL0R4ZS9HY2QvR2NkLmMNCj4gYi9NZGVNb2R1bGVQ a2cvQ29yZS9EeGUvR2NkL0djZC5jDQo+ID4gaW5kZXggNzkyY2QyZTBhZjIzLi5jNDUwZDFiZjI1 MzEgMTAwNjQ0DQo+ID4gLS0tIGEvTWRlTW9kdWxlUGtnL0NvcmUvRHhlL0djZC9HY2QuYw0KPiA+ ICsrKyBiL01kZU1vZHVsZVBrZy9Db3JlL0R4ZS9HY2QvR2NkLmMNCj4gPiBAQCAtMjIzOCw2ICsy MjM4LDggQEAgQ29yZUluaXRpYWxpemVNZW1vcnlTZXJ2aWNlcyAoDQo+ID4gICAgRUZJX0hPQl9I QU5ET0ZGX0lORk9fVEFCTEUgICAqUGhpdEhvYjsNCj4gPiAgICBFRklfSE9CX1JFU09VUkNFX0RF U0NSSVBUT1IgICpSZXNvdXJjZUhvYjsNCj4gPiAgICBFRklfSE9CX1JFU09VUkNFX0RFU0NSSVBU T1IgICpQaGl0UmVzb3VyY2VIb2I7DQo+ID4gKyAgRUZJX0hPQl9SRVNPVVJDRV9ERVNDUklQVE9S ICAqTWVtb3J5VHlwZUluZm9ybWF0aW9uUmVzb3VyY2VIb2I7DQo+ID4gKyAgVUlOVE4gICAgICAg ICAgICAgICAgICAgICAgICBDb3VudDsNCj4gPiAgICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAg ICAgIEJhc2VBZGRyZXNzOw0KPiA+ICAgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgTGVu Z3RoOw0KPiA+ICAgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlczsNCj4g PiBAQCAtMjI4OSwxMiArMjI5MSw0NyBAQCBDb3JlSW5pdGlhbGl6ZU1lbW9yeVNlcnZpY2VzICgN Cj4gPiAgICAvLw0KPiA+ICAgIC8vIFNlZSBpZiBhIE1lbW9yeSBUeXBlIEluZm9ybWF0aW9uIEhP QiBpcyBhdmFpbGFibGUNCj4gPiAgICAvLw0KPiA+IC0gIEd1aWRIb2IgPSBHZXRGaXJzdEd1aWRI b2IgKCZnRWZpTWVtb3J5VHlwZUluZm9ybWF0aW9uR3VpZCk7DQo+ID4gKyAgTWVtb3J5VHlwZUlu Zm9ybWF0aW9uUmVzb3VyY2VIb2IgPSBOVUxMOw0KPiA+ICsgIEd1aWRIb2IgICAgICAgICAgICAg ICAgICAgICAgICAgID0gR2V0Rmlyc3RHdWlkSG9iDQo+ICgmZ0VmaU1lbW9yeVR5cGVJbmZvcm1h dGlvbkd1aWQpOw0KPiA+ICAgIGlmIChHdWlkSG9iICE9IE5VTEwpIHsNCj4gPiAgICAgIEVmaU1l bW9yeVR5cGVJbmZvcm1hdGlvbiA9IEdFVF9HVUlEX0hPQl9EQVRBIChHdWlkSG9iKTsNCj4gPiAg ICAgIERhdGFTaXplICAgICAgICAgICAgICAgICA9IEdFVF9HVUlEX0hPQl9EQVRBX1NJWkUgKEd1 aWRIb2IpOw0KPiA+ICAgICAgaWYgKChFZmlNZW1vcnlUeXBlSW5mb3JtYXRpb24gIT0gTlVMTCkg JiYgKERhdGFTaXplID4gMCkgJiYNCj4gKERhdGFTaXplIDw9IChFZmlNYXhNZW1vcnlUeXBlICsg MSkgKiBzaXplb2YNCj4gKEVGSV9NRU1PUllfVFlQRV9JTkZPUk1BVElPTikpKSB7DQo+ID4gICAg ICAgIENvcHlNZW0gKCZnTWVtb3J5VHlwZUluZm9ybWF0aW9uLCBFZmlNZW1vcnlUeXBlSW5mb3Jt YXRpb24sDQo+IERhdGFTaXplKTsNCj4gPiArDQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIC8v IExvb2sgZm9yIFJlc291cmNlIERlc2NyaXB0b3IgSE9CIHdpdGggYSBSZXNvdXJjZVR5cGUgb2YN Cj4gU3lzdGVtIE1lbW9yeQ0KPiA+ICsgICAgICAvLyBhbmQgYW4gT3duZXIgR1VJRCBvZiBnRWZp TWVtb3J5VHlwZUluZm9ybWF0aW9uR3VpZC4gSWYgbW9yZQ0KPiB0aGFuIDEgaXMNCj4gPiArICAg ICAgLy8gZm91bmQsIHRoZW4gc2V0IE1lbW9yeVR5cGVJbmZvcm1hdGlvblJlc291cmNlSG9iIHRv IE5VTEwuDQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIENvdW50ID0gMDsNCj4gPiArICAgICAg Zm9yIChIb2IuUmF3ID0gKkhvYlN0YXJ0OyAhRU5EX09GX0hPQl9MSVNUIChIb2IpOyBIb2IuUmF3 ID0NCj4gR0VUX05FWFRfSE9CIChIb2IpKSB7DQo+ID4gKyAgICAgICAgaWYgKEdFVF9IT0JfVFlQ RSAoSG9iKSAhPSBFRklfSE9CX1RZUEVfUkVTT1VSQ0VfREVTQ1JJUFRPUikgew0KPiA+ICsgICAg ICAgICAgY29udGludWU7DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgICBSZXNv dXJjZUhvYiA9IEhvYi5SZXNvdXJjZURlc2NyaXB0b3I7DQo+ID4gKyAgICAgICAgaWYgKCFDb21w YXJlR3VpZCAoJlJlc291cmNlSG9iLT5Pd25lciwNCj4gJmdFZmlNZW1vcnlUeXBlSW5mb3JtYXRp b25HdWlkKSkgew0KPiA+ICsgICAgICAgICAgY29udGludWU7DQo+ID4gKyAgICAgICAgfQ0KPiA+ ICsNCj4gPiArICAgICAgICBDb3VudCsrOw0KPiA+ICsgICAgICAgIGlmIChSZXNvdXJjZUhvYi0+ UmVzb3VyY2VUeXBlICE9IEVGSV9SRVNPVVJDRV9TWVNURU1fTUVNT1JZKQ0KPiB7DQo+ID4gKyAg ICAgICAgICBjb250aW51ZTsNCj4gPiArICAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgIGlm ICgoUmVzb3VyY2VIb2ItPlJlc291cmNlQXR0cmlidXRlICYgTUVNT1JZX0FUVFJJQlVURV9NQVNL KQ0KPiAhPSBURVNURURfTUVNT1JZX0FUVFJJQlVURVMpIHsNCj4gPiArICAgICAgICAgIGNvbnRp bnVlOw0KPiA+ICsgICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAgaWYgKFJlc291cmNlSG9i LT5SZXNvdXJjZUxlbmd0aCA+PQ0KPiBDYWxjdWxhdGVUb3RhbE1lbW9yeUJpblNpemVOZWVkZWQg KCkpIHsNCj4gPiArICAgICAgICAgIE1lbW9yeVR5cGVJbmZvcm1hdGlvblJlc291cmNlSG9iID0g UmVzb3VyY2VIb2I7DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsgICAgICB9DQo+ID4gKw0KPiA+ICsg ICAgICBpZiAoQ291bnQgPiAxKSB7DQo+ID4gKyAgICAgICAgTWVtb3J5VHlwZUluZm9ybWF0aW9u UmVzb3VyY2VIb2IgPSBOVUxMOw0KPiA+ICsgICAgICB9DQo+ID4gICAgICB9DQo+ID4gICAgfQ0K PiA+DQo+ID4gQEAgLTIzNDQsNiArMjM4MSwxNSBAQCBDb3JlSW5pdGlhbGl6ZU1lbW9yeVNlcnZp Y2VzICgNCj4gPiAgICAgIFBoaXRSZXNvdXJjZUhvYiA9IFJlc291cmNlSG9iOw0KPiA+ICAgICAg Rm91bmQgICAgICAgICAgID0gVFJVRTsNCj4gPg0KPiA+ICsgICAgLy8NCj4gPiArICAgIC8vIElm IGEgTWVtb3J5IFR5cGUgSW5mb3JtYXRpb24gUmVzb3VyY2UgSE9CIHdhcyBmb3VuZCBhbmQgaXMg dGhlDQo+IHNhbWUNCj4gPiArICAgIC8vIFJlc291cmNlIEhPQiB0aGF0IGRlc2NyaWJlcyB0aGUg UEhJVCBIT0IsIHRoZW4gaWdub3JlIHRoZQ0KPiBNZW1vcnkgVHlwZQ0KPiA+ICsgICAgLy8gSW5m b3JtYXRpb24gUmVzb3VyY2UgSE9CLg0KPiA+ICsgICAgLy8NCj4gPiArICAgIGlmIChNZW1vcnlU eXBlSW5mb3JtYXRpb25SZXNvdXJjZUhvYiA9PSBQaGl0UmVzb3VyY2VIb2IpIHsNCj4gPiArICAg ICAgTWVtb3J5VHlwZUluZm9ybWF0aW9uUmVzb3VyY2VIb2IgPSBOVUxMOw0KPiA+ICsgICAgfQ0K PiA+ICsNCj4gPiAgICAgIC8vDQo+ID4gICAgICAvLyBDb21wdXRlIHJhbmdlIGJldHdlZW4gUEhJ VCBFZmlNZW1vcnlUb3AgYW5kIHRoZSBlbmQgb2YgdGhlDQo+IFJlc291cmNlIERlc2NyaXB0b3Ig SE9CDQo+ID4gICAgICAvLw0KPiA+IEBAIC0yMzg3LDggKzI0MzMsOSBAQCBDb3JlSW5pdGlhbGl6 ZU1lbW9yeVNlcnZpY2VzICgNCj4gPiAgICBpZiAoTGVuZ3RoIDwgTWluaW1hbE1lbW9yeVNpemVO ZWVkZWQpIHsNCj4gPiAgICAgIC8vDQo+ID4gICAgICAvLyBTZWFyY2ggYWxsIHRoZSByZXNvdXJj ZSBkZXNjcmlwdG9yIEhPQnMgZnJvbSB0aGUgaGlnaGVzdA0KPiBwb3NzaWJsZSBhZGRyZXNzZXMg ZG93biBmb3IgYSBtZW1vcnkNCj4gPiAtICAgIC8vIHJlZ2lvbiB0aGF0IGlzIGJpZyBlbm91Z2gg dG8gaW5pdGlhbGl6ZSB0aGUgRFhFIGNvcmUuICBBbHdheXMNCj4gc2tpcCB0aGUgUEhJVCBSZXNv dXJjZSBIT0IuDQo+ID4gLSAgICAvLyBUaGUgbWF4IGFkZHJlc3MgbXVzdCBiZSB3aXRoaW4gdGhl IHBoeXNpY2FsbHkgYWRkcmVzc2libGUNCj4gcmFuZ2UgZm9yIHRoZSBwcm9jZXNzb3IuDQo+ID4g KyAgICAvLyByZWdpb24gdGhhdCBpcyBiaWcgZW5vdWdoIHRvIGluaXRpYWxpemUgdGhlIERYRSBj b3JlLiAgQWx3YXlzDQo+IHNraXAgdGhlIFBISVQgUmVzb3VyY2UgSE9CDQo+ID4gKyAgICAvLyBh bmQgdGhlIE1lbW9yeSBUeXBlIEluZm9ybWF0aW9uIFJlc291cmNlIEhPQi4gVGhlIG1heCBhZGRy ZXNzDQo+IG11c3QgYmUgd2l0aGluIHRoZSBwaHlzaWNhbGx5DQo+ID4gKyAgICAvLyBhZGRyZXNz YWJsZSByYW5nZSBmb3IgdGhlIHByb2Nlc3Nvci4NCj4gPiAgICAgIC8vDQo+ID4gICAgICBIaWdo QWRkcmVzcyA9IE1BWF9BTExPQ19BRERSRVNTOw0KPiA+ICAgICAgZm9yIChIb2IuUmF3ID0gKkhv YlN0YXJ0OyAhRU5EX09GX0hPQl9MSVNUIChIb2IpOyBIb2IuUmF3ID0NCj4gR0VUX05FWFRfSE9C IChIb2IpKSB7DQo+ID4gQEAgLTIzOTksNiArMjQ0NiwxMyBAQCBDb3JlSW5pdGlhbGl6ZU1lbW9y eVNlcnZpY2VzICgNCj4gPiAgICAgICAgICBjb250aW51ZTsNCj4gPiAgICAgICAgfQ0KPiA+DQo+ ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIC8vIFNraXAgdGhlIFJlc291cmNlIERlc2NyaXB0b3Ig SE9CIHRoYXQgY29udGFpbnMgTWVtb3J5IFR5cGUNCj4gSW5mb3JtYXRpb24gYmlucw0KPiA+ICsg ICAgICAvLw0KPiA+ICsgICAgICBpZiAoSG9iLlJlc291cmNlRGVzY3JpcHRvciA9PSBNZW1vcnlU eXBlSW5mb3JtYXRpb25SZXNvdXJjZUhvYikNCj4gew0KPiA+ICsgICAgICAgIGNvbnRpbnVlOw0K PiA+ICsgICAgICB9DQo+ID4gKw0KPiA+ICAgICAgICAvLw0KPiA+ICAgICAgICAvLyBTa2lwIGFs bCBIT0JzIGV4Y2VwdCBSZXNvdXJjZSBEZXNjcmlwdG9yIEhPQnMNCj4gPiAgICAgICAgLy8NCj4g PiBAQCAtMjQ2Niw2ICsyNTIwLDE4IEBAIENvcmVJbml0aWFsaXplTWVtb3J5U2VydmljZXMgKA0K PiA+ICAgICAgQ2FwYWJpbGl0aWVzID0NCj4gQ29yZUNvbnZlcnRSZXNvdXJjZURlc2NyaXB0b3JI b2JBdHRyaWJ1dGVzVG9DYXBhYmlsaXRpZXMNCj4gKEVmaUdjZE1lbW9yeVR5cGVTeXN0ZW1NZW1v cnksIEF0dHJpYnV0ZXMpOw0KPiA+ICAgIH0NCj4gPg0KPiA+ICsgIGlmIChNZW1vcnlUeXBlSW5m b3JtYXRpb25SZXNvdXJjZUhvYiAhPSBOVUxMKSB7DQo+ID4gKyAgICAvLw0KPiA+ICsgICAgLy8g SWYgYSBNZW1vcnkgVHlwZSBJbmZvcm1hdGlvbiBSZXNvdXJjZSBIT0Igd2FzIGZvdW5kLCB0aGVu IHVzZQ0KPiB0aGUgYWRkcmVzcw0KPiA+ICsgICAgLy8gcmFuZ2Ugb2YgdGhlICBNZW1vcnkgVHlw ZSBJbmZvcm1hdGlvbiBSZXNvdXJjZSBIT0IgYXMgdGhlDQo+IHByZWZlcnJlZA0KPiA+ICsgICAg Ly8gYWRkcmVzcyByYW5nZSBmb3IgdGhlIE1lbW9yeSBUeXBlIEluZm9ybWF0aW9uIGJpbnMuDQo+ ID4gKyAgICAvLw0KPiA+ICsgICAgQ29yZVNldE1lbW9yeVR5cGVJbmZvcm1hdGlvblJhbmdlICgN Cj4gPiArICAgICAgTWVtb3J5VHlwZUluZm9ybWF0aW9uUmVzb3VyY2VIb2ItPlBoeXNpY2FsU3Rh cnQsDQo+ID4gKyAgICAgIE1lbW9yeVR5cGVJbmZvcm1hdGlvblJlc291cmNlSG9iLT5SZXNvdXJj ZUxlbmd0aA0KPiA+ICsgICAgICApOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gICAgLy8NCj4gPiAg ICAvLyBEZWNsYXJlIHRoZSB2ZXJ5IGZpcnN0IG1lbW9yeSByZWdpb24sIHNvIHRoZSBFRkkgTWVt b3J5IFNlcnZpY2VzDQo+IGFyZSBhdmFpbGFibGUuDQo+ID4gICAgLy8NCj4gDQo+IEhtbSwgSSB0 aGluayBJIGhhdmUgYSBjb2Fyc2UgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29udHJvbCBmbG93IGhl cmUuIElmDQo+IHdlIGNhbGwgQ29yZVNldE1lbW9yeVR5cGVJbmZvcm1hdGlvblJhbmdlKCkgaGVy ZSAtLSBkdWUgdG8gdGhlIG5ldyBIT0INCj4gYmVpbmcgYXZhaWxhYmxlIC0tLCB0aGVuICJtTWVt b3J5VHlwZUluZm9ybWF0aW9uSW5pdGlhbGl6ZWQiIHdpbGwgYmUgc2V0DQo+IHRvIFRSVUUuIFRo ZW4sIHRoZSB2ZXJ5IGZpcnN0IGNhbGwgdG8gQ29yZUFkZE1lbW9yeURlc2NyaXB0b3IoKSwganVz dA0KPiBiZWxvdyB0aGUgY29udGV4dCBxdW90ZWQgYWJvdmUsIHdpbGwgc2VlDQo+ICJtTWVtb3J5 VHlwZUluZm9ybWF0aW9uSW5pdGlhbGl6ZWQiIGFzIFRSVUUsIGFuZCBhdm9pZCBpdGVyYXRpbmcg dGhyb3VnaA0KPiB0aGUgbWVtb3J5IHR5cGUgaW5mb3JtYXRpb24gYXJyYXkuIE9LLg0KPiANCj4g PiBkaWZmIC0tZ2l0IGEvTWRlTW9kdWxlUGtnL0NvcmUvRHhlL01lbS9QYWdlLmMNCj4gYi9NZGVN b2R1bGVQa2cvQ29yZS9EeGUvTWVtL1BhZ2UuYw0KPiA+IGluZGV4IDY0OTdhZjU3MzM1My4uNDU4 YzYyMDkwMjY1IDEwMDY0NA0KPiA+IC0tLSBhL01kZU1vZHVsZVBrZy9Db3JlL0R4ZS9NZW0vUGFn ZS5jDQo+ID4gKysrIGIvTWRlTW9kdWxlUGtnL0NvcmUvRHhlL01lbS9QYWdlLmMNCj4gPiBAQCAt NTMyLDYgKzUzMiwxMDcgQEAgQ29yZUxvYWRpbmdGaXhlZEFkZHJlc3NIb29rICgNCj4gPiAgICBy ZXR1cm47DQo+ID4gIH0NCj4gPg0KPiA+ICsvKioNCj4gPiArICBTZXRzIHRoZSBwcmVmZXJyZWQg bWVtb3J5IHJhbmdlIHRvIHVzZSBmb3IgdGhlIE1lbW9yeSBUeXBlDQo+IEluZm9ybWF0aW9uIGJp bnMuDQo+ID4gKyAgVGhpcyBzZXJ2aWNlIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBmaXN0IGNhbGwg dG8NCj4gQ29yZUFkZE1lbW9yeURlc2NyaXB0b3IoKS4NCj4gPiArDQo+ID4gKyAgSWYgdGhlIGxv Y2F0aW9uIG9mIHRoZSBNZW1vcnkgVHlwZSBJbmZvcm1hdGlvbiBiaW5zIGhhcyBhbHJlYWR5DQo+ IGJlZW4NCj4gPiArICBlc3RhYmxpc2hlZCBvciB0aGUgc2l6ZSBvZiB0aGUgcmFuZ2UgcHJvdmlk ZXMgaXMgc21hbGxlciB0aGFuIGFsbA0KPiB0aGUNCj4gPiArICBNZW1vcnkgVHlwZSBJbmZvcm1h dGlvbiBiaW5zLCB0aGVuIHRoZSByYW5nZSBwcm92aWRlcyBpcyBub3QgdXNlZC4NCj4gPiArDQo+ ID4gKyAgQHBhcmFtICBTdGFydCAgIFRoZSBzdGFydCBhZGRyZXNzIG9mIHRoZSBNZW1vcnkgVHlw ZSBJbmZvcm1hdGlvbg0KPiByYW5nZS4NCj4gPiArICBAcGFyYW0gIExlbmd0aCAgVGhlIHNpemUs IGluIGJ5dGVzLCBvZiB0aGUgTWVtb3J5IFR5cGUgSW5mb3JtYXRpb24NCj4gcmFuZ2UuDQo+ID4g KyoqLw0KPiA+ICtWT0lEDQo+ID4gK0NvcmVTZXRNZW1vcnlUeXBlSW5mb3JtYXRpb25SYW5nZSAo DQo+ID4gKyAgSU4gRUZJX1BIWVNJQ0FMX0FERFJFU1MgIFN0YXJ0LA0KPiA+ICsgIElOIFVJTlQ2 NCAgICAgICAgICAgICAgICBMZW5ndGgNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfUEhZ U0lDQUxfQUREUkVTUyAgVG9wOw0KPiA+ICsgIEVGSV9NRU1PUllfVFlQRSAgICAgICBUeXBlOw0K PiA+ICsgIFVJTlROICAgICAgICAgICAgICAgICBJbmRleDsNCj4gPiArICBVSU5UTiAgICAgICAg ICAgICAgICAgU2l6ZTsNCj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyBSZXR1cm4gaWYgTWVt b3J5IFR5cGUgSW5mb3JtYXRpb24gYmluIGxvY2F0aW9ucyBoYXZlIGFscmVhZHkNCj4gYmVlbiBz ZXQNCj4gPiArICAvLw0KPiA+ICsgIGlmIChtTWVtb3J5VHlwZUluZm9ybWF0aW9uSW5pdGlhbGl6 ZWQpIHsNCj4gPiArICAgIHJldHVybjsNCj4gPiArICB9DQo+IA0KPiAoNCkgVW5kZXIgd2hhdCBj aXJjdW1zdGFuY2VzIGNhbiB0aGlzIGNvbmRpdGlvbiBldmFsdWF0ZSB0byBUUlVFPw0KPiANCj4g U2hvdWxkIHdlIHBlcmhhcHMNCj4gDQo+ICAgQVNTRVJUICghbU1lbW9yeVR5cGVJbmZvcm1hdGlv bkluaXRpYWxpemVkKTsNCj4gDQo+IGluc3RlYWQ/DQoNCkkgYW0ganVzdCBiZWluZyBkZWZlbnNp dmUgaW4gY2FzZSBjb2RlIGluIHRoZSBmdXR1cmUgYXR0ZW1wdHMgdG8gY2FsbCB0aGlzDQpzZXJ2 aWNlIG1vcmUgdGhhbiBvbmUgdGltZS4gIFRoaXMgc2VydmljZSBzaG91bGQgb25seSBiZSBjYWxs ZWQgb25lIHRpbWUNCmFuZCBhbnkgYXR0ZW1wdCB0byBjYWxsIGFnYWluIGFyZSBpZ25vcmVkLiAg VGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBleGlzdGluZw0KYmVoYXZpb3Igd2hlcmUgdGhlIGZpcnN0 IGNhbGwgdG8gQ29yZUFkZE1lbW9yeURlc2NyaXB0b3IoKSBkZXRlcm1pbmVzDQp0aGUgbG9jYXRp b24gb2YgdGhlIGJpbnMgYW5kIGFkZGl0aW9uYWwgY2FsbHMgdG8gQ29yZUFkZE1lbW9yeURlc2Ny aXB0b3IoKQ0Kc2tpcCB0aGUgYmluIGFsbG9jYXRpb24gbG9naWMuDQoNCkkgYW0gYWxzbyB0cnlp bmcgdG8gYXZvaWQgdXNlIG9mIEFTU0VSVCgpIHdoZW4gcG9zc2libGUgZHVlIHRvIG92ZXJ1c2Uu DQoNCkl0IG1heSBiZSBiZXR0ZXIgdG8gaGF2ZSBhIERFQlVHX0VSUk9SIG1lc3NhZ2UgZm9yIHRo aXMgY29uZGl0aW9uLCBzbyB0aGUNCmxvZyBzaG93cyB0aGF0IGFuIGF0dGVtcHQgdG8gc2V0IHRo ZSBtZW1vcnkgdHlwZSBpbmZvcm1hdGlvbiBsb2NhdGlvbiANCmFnYWluIHdhcyBpZ25vcmVkLg0K DQo+IA0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIFJldHVybiBpZiBzaXplIG9mIHRoZSBN ZW1vcnkgVHlwZSBJbmZvcm1hdGlvbiBiaW5zIGlzIGdyZWF0ZXINCj4gdGhhbiBMZW5ndGgNCj4g PiArICAvLw0KPiA+ICsgIFNpemUgPSAwOw0KPiA+ICsgIGZvciAoSW5kZXggPSAwOyBnTWVtb3J5 VHlwZUluZm9ybWF0aW9uW0luZGV4XS5UeXBlICE9DQo+IEVmaU1heE1lbW9yeVR5cGU7IEluZGV4 KyspIHsNCj4gPiArICAgIC8vDQo+ID4gKyAgICAvLyBNYWtlIHN1cmUgdGhlIG1lbW9yeSB0eXBl IGluIHRoZSBnTWVtb3J5VHlwZUluZm9ybWF0aW9uW10NCj4gYXJyYXkgaXMgdmFsaWQNCj4gPiAr ICAgIC8vDQo+ID4gKyAgICBUeXBlID0gKEVGSV9NRU1PUllfVFlQRSkoZ01lbW9yeVR5cGVJbmZv cm1hdGlvbltJbmRleF0uVHlwZSk7DQo+ID4gKyAgICBpZiAoKFVJTlQzMilUeXBlID4gRWZpTWF4 TWVtb3J5VHlwZSkgew0KPiA+ICsgICAgICBjb250aW51ZTsNCj4gPiArICAgIH0NCj4gPiArDQo+ ID4gKyAgICBTaXplICs9IEVGSV9QQUdFU19UT19TSVpFDQo+IChnTWVtb3J5VHlwZUluZm9ybWF0 aW9uW0luZGV4XS5OdW1iZXJPZlBhZ2VzKTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmIChT aXplID4gTGVuZ3RoKSB7DQo+ID4gKyAgICByZXR1cm47DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiAr ICAvLw0KPiA+ICsgIC8vIExvb3AgdGhyb3VnaCBlYWNoIG1lbW9yeSB0eXBlIGluIHRoZSBvcmRl ciBzcGVjaWZpZWQgYnkgdGhlDQo+ID4gKyAgLy8gZ01lbW9yeVR5cGVJbmZvcm1hdGlvbltdIGFy cmF5DQo+ID4gKyAgLy8NCj4gPiArICBUb3AgPSBTdGFydCArIExlbmd0aDsNCj4gPiArICBmb3Ig KEluZGV4ID0gMDsgZ01lbW9yeVR5cGVJbmZvcm1hdGlvbltJbmRleF0uVHlwZSAhPQ0KPiBFZmlN YXhNZW1vcnlUeXBlOyBJbmRleCsrKSB7DQo+ID4gKyAgICAvLw0KPiA+ICsgICAgLy8gTWFrZSBz dXJlIHRoZSBtZW1vcnkgdHlwZSBpbiB0aGUgZ01lbW9yeVR5cGVJbmZvcm1hdGlvbltdDQo+IGFy cmF5IGlzIHZhbGlkDQo+ID4gKyAgICAvLw0KPiA+ICsgICAgVHlwZSA9IChFRklfTUVNT1JZX1RZ UEUpKGdNZW1vcnlUeXBlSW5mb3JtYXRpb25bSW5kZXhdLlR5cGUpOw0KPiA+ICsgICAgaWYgKChV SU5UMzIpVHlwZSA+IEVmaU1heE1lbW9yeVR5cGUpIHsNCj4gPiArICAgICAgY29udGludWU7DQo+ ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgaWYgKGdNZW1vcnlUeXBlSW5mb3JtYXRpb25bSW5k ZXhdLk51bWJlck9mUGFnZXMgIT0gMCkgew0KPiA+ICsgICAgICBtTWVtb3J5VHlwZVN0YXRpc3Rp Y3NbVHlwZV0uTWF4aW11bUFkZHJlc3MgPSBUb3AgLSAxOw0KPiA+ICsgICAgICBUb3AgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPSBFRklfUEFHRVNfVE9fU0laRQ0KPiAo Z01lbW9yeVR5cGVJbmZvcm1hdGlvbltJbmRleF0uTnVtYmVyT2ZQYWdlcyk7DQo+ID4gKyAgICAg IG1NZW1vcnlUeXBlU3RhdGlzdGljc1tUeXBlXS5CYXNlQWRkcmVzcyAgICA9IFRvcDsNCj4gPiAr DQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIC8vIElmIHRoZSBjdXJyZW50IGJhc2UgYWRkcmVz cyBpcyB0aGUgbG93ZXN0IGFkZHJlc3Mgc28gZmFyLA0KPiB0aGVuIHVwZGF0ZQ0KPiA+ICsgICAg ICAvLyB0aGUgZGVmYXVsdCBtYXhpbXVtIGFkZHJlc3MNCj4gPiArICAgICAgLy8NCj4gPiArICAg ICAgaWYgKG1NZW1vcnlUeXBlU3RhdGlzdGljc1tUeXBlXS5CYXNlQWRkcmVzcyA8DQo+IG1EZWZh dWx0TWF4aW11bUFkZHJlc3MpIHsNCj4gPiArICAgICAgICBtRGVmYXVsdE1heGltdW1BZGRyZXNz ID0NCj4gbU1lbW9yeVR5cGVTdGF0aXN0aWNzW1R5cGVdLkJhc2VBZGRyZXNzIC0gMTsNCj4gPiAr ICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgbU1lbW9yeVR5cGVTdGF0aXN0aWNzW1R5cGVdLk51 bWJlck9mUGFnZXMgICA9DQo+IGdNZW1vcnlUeXBlSW5mb3JtYXRpb25bSW5kZXhdLk51bWJlck9m UGFnZXM7DQo+ID4gKyAgICAgIGdNZW1vcnlUeXBlSW5mb3JtYXRpb25bSW5kZXhdLk51bWJlck9m UGFnZXMgPSAwOw0KPiA+ICsgICAgfQ0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgLy8NCj4gPiAr ICAvLyBJZiB0aGUgbnVtYmVyIG9mIHBhZ2VzIHJlc2VydmVkIGZvciBhIG1lbW9yeSB0eXBlIGlz IDAsIHRoZW4gYWxsDQo+ID4gKyAgLy8gYWxsb2NhdGlvbnMgZm9yIHRoYXQgdHlwZSBzaG91bGQg YmUgaW4gdGhlIGRlZmF1bHQgcmFuZ2UuDQo+ID4gKyAgLy8NCj4gPiArICBmb3IgKFR5cGUgPSAo RUZJX01FTU9SWV9UWVBFKTA7IFR5cGUgPCBFZmlNYXhNZW1vcnlUeXBlOyBUeXBlKyspIHsNCj4g PiArICAgIGZvciAoSW5kZXggPSAwOyBnTWVtb3J5VHlwZUluZm9ybWF0aW9uW0luZGV4XS5UeXBl ICE9DQo+IEVmaU1heE1lbW9yeVR5cGU7IEluZGV4KyspIHsNCj4gPiArICAgICAgaWYgKFR5cGUg PT0NCj4gKEVGSV9NRU1PUllfVFlQRSlnTWVtb3J5VHlwZUluZm9ybWF0aW9uW0luZGV4XS5UeXBl KSB7DQo+ID4gKyAgICAgICAgbU1lbW9yeVR5cGVTdGF0aXN0aWNzW1R5cGVdLkluZm9ybWF0aW9u SW5kZXggPSBJbmRleDsNCj4gPiArICAgICAgfQ0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAg IG1NZW1vcnlUeXBlU3RhdGlzdGljc1tUeXBlXS5DdXJyZW50TnVtYmVyT2ZQYWdlcyA9IDA7DQo+ ID4gKyAgICBpZiAobU1lbW9yeVR5cGVTdGF0aXN0aWNzW1R5cGVdLk1heGltdW1BZGRyZXNzID09 DQo+IE1BWF9BTExPQ19BRERSRVNTKSB7DQo+ID4gKyAgICAgIG1NZW1vcnlUeXBlU3RhdGlzdGlj c1tUeXBlXS5NYXhpbXVtQWRkcmVzcyA9DQo+IG1EZWZhdWx0TWF4aW11bUFkZHJlc3M7DQo+ID4g KyAgICB9DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBtTWVtb3J5VHlwZUluZm9ybWF0aW9uSW5p dGlhbGl6ZWQgPSBUUlVFOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICAvKioNCj4gPiAgICBDYWxsZWQg dG8gaW5pdGlhbGl6ZSB0aGUgbWVtb3J5IG1hcCBhbmQgYWRkIGRlc2NyaXB0b3JzIHRvDQo+ID4g ICAgdGhlIGN1cnJlbnQgZGVzY3JpcHRvciBsaXN0Lg0KPiANCj4gVGhpcyBwYXJ0IHJlc2VtYmxl cyAoYW5kIHNlZW1zIHRvIHN1YnN0aXR1dGUgZm9yKSB0aGUgdGFpbCBvZiBzYWlkIHZlcnkNCj4g Zmlyc3QgQ29yZUFkZE1lbW9yeURlc2NyaXB0b3IoKSBleGVjdXRpb24uIFRoZXJlIGFyZSBzb21l IGRpZmZlcmVuY2VzOw0KPiBoZXJlIHdlIGRvbid0IHJlbHkgb24gQ29yZUFsbG9jYXRlUGFnZXMo KS4gSSBkb24ndCB1bmRlcnN0YW5kIGVpdGhlcg0KPiBwaWVjZSBvZiBjb2RlIGVub3VnaCBmb3Ig bWFraW5nIGEgbWVhbmluZ2Z1bCBjb21wYXJpc29uLiBUaGUgZ2VuZXJhbA0KPiBjb250cm9sIGZs b3cgc2VwYXJhdGlvbiBzZWVtcyBzYW5lLCBtb2R1bG8gbXkgcXVlc3Rpb24gKDQpIGFib3ZlLg0K DQpJIGFncmVlIHRoZXkgYXJlIHNpbWlsYXIuICBJIGRpZCBjb25zaWRlciB0cnlpbmcgdG8gY29u c29saWRhdGUgdGhlIA0KY29tbW9uIGxvZ2ljIHRvIGEgc2luZ2xlIHN0YXRpYyBoZWxwZXIgZnVu Y3Rpb24uICBCdXQgdGhlcmUgYXJlIGRpZmZlcmVuY2VzDQppbiB0aGUgaW5wdXQgY29uZGl0aW9u cy4gIEN1cnJlbnQgbG9naWMgdXNlcyBBbGxvY2F0ZVBhZ2VzKCkgdG8gYXR0ZW1wdA0KdG8gYWxs b2NhdGUgZWFjaCBiaW4uICBBbmQgdGhlc2UgYWxsb2NhdGlvbnMgYXJlIG5vdCByZXF1aXJlZCB0 byBiZQ0KY29udGlndW91cyBpbiBtZW1vcnkuICBUaGV5IGNhbiBiZSBwaWVjZW1lYWwgZXh0ZW5k ZWQgYXMgbW9yZSBtZW1vcnkgaXMNCnJlZ2lzdGVyZWQgdW50aWwgYWxsIHRoZSBiaW5zIGFyZSBh bGxvY2F0ZWQuICBUaGUgbWVtb3J5IHR5cGUgaW5mb3JtYXRpb24NCmxvY2F0aW9uIGZyb20gSE9C IGlzIHNpbXBsZXIgYmVjYXVzZSBpdCBpcyBndWFyYW50ZWVkIHRvIGJlIGEgc2luZ2xlDQpjb250 aWd1b3VzIG1lbW9yeSByYW5nZS4gIFRoaXMgZGlmZmVyZW5jZSBtYXkgYSBjb21tb24gaGVscGVy IGZ1bmN0aW9uDQptdWNoIG1vcmUgY2hhbGxlbmdpbmcuDQoNCkkgd2FzIGFsc28gY29uY2VybmVk IGFib3V0IGluYWR2ZXJ0ZW50bHkgaW50cm9kdWNpbmcgYSBiZWhhdmlvciBjaGFuZ2UNCndoZW4g dGhlIG1lbW9yeSB0eXBlIGluZm9ybWF0aW9uIGxvY2F0aW9uIGZlYXR1cmUgaXMgbm90IGVuYWJs ZWQuDQpLZWVwaW5nIHRoZSBjdXJyZW50IGNvZGUgdW5tb2RpZmllZCBtYWtlcyBpdCBlYXN5IGZy b20gYSByZXZpZXcgcGVyc3BlY3RpdmUNCnRvIGtub3cgY3VycmVudCBiZWhhdmlvciBpcyBwcmVz ZXJ2ZWQgYW5kIGFsbG93cyBhIGZvY3VzIG9uIHJldmlld2luZw0KdGhlIG5ldyBsb2dpYyBhc3Nv Y2lhdGVkIHdpdGggdGhlIG5ldyBmZWF0dXJlLg0KDQo+IA0KPiBUaGFua3MsDQo+IExhc3psbw0K DQoNCgotPS09LT0tPS09LT0tPS09LT0tPS09LQpHcm91cHMuaW8gTGlua3M6IFlvdSByZWNlaXZl IGFsbCBtZXNzYWdlcyBzZW50IHRvIHRoaXMgZ3JvdXAuClZpZXcvUmVwbHkgT25saW5lICgjMTE0 MzQ1KTogaHR0cHM6Ly9lZGsyLmdyb3Vwcy5pby9nL2RldmVsL21lc3NhZ2UvMTE0MzQ1Ck11dGUg VGhpcyBUb3BpYzogaHR0cHM6Ly9ncm91cHMuaW8vbXQvMTAzOTE4NDY0Lzc2ODYxNzYKR3JvdXAg T3duZXI6IGRldmVsK293bmVyQGVkazIuZ3JvdXBzLmlvClVuc3Vic2NyaWJlOiBodHRwczovL2Vk azIuZ3JvdXBzLmlvL2cvZGV2ZWwvbGVhdmUvMTIzNjcxMTEvNzY4NjE3Ni8xOTEzNDU2MjEyL3h5 enp5IFtyZWJlY2NhQG9wZW5mdy5pb10KLT0tPS09LT0tPS09LT0tPS09LT0tPS0KCg0K