From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by mx.groups.io with SMTP id smtpd.web10.21527.1670260904186807048 for ; Mon, 05 Dec 2022 09:21:44 -0800 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=mAa4+uc0; spf=pass (domain: intel.com, ip: 134.134.136.24, mailfrom: jiewen.yao@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1670260904; x=1701796904; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=ePzW7jJOvsSX6rrAqXSTLcjbcaaXZ09/kop4c/hb0k8=; b=mAa4+uc0xY50j2xXih4zgNE+SsnwzkLzRYHiYMZgV00z9CBQ6dRTgurZ 0xQ2V9fm1yR8uRjL2kVlnW8wQB0UItBX7DlQp/HZmhMd4zdvbwgoHgK9e +mQbZOGF0GEWNCTNUjJ/6f54CLINhafXKxvXbv895DUYppCjGq56e3GT1 QmlU8kE5u0G5hlt+PM1mqnvm6wJEe/TF3XYY+vmrIwnBWNxHgUe1mCFU9 LGEXBpV/w7HF86X1u2fTvbEzBeEzZPa4MBxo/d5V2F2trQNrv2LzxSVmu X9UBp8ouCDXhqVZrJE6uxFwYVz6encPtfpedqtbkecRJ4Nbxd8h3Qsbld g==; X-IronPort-AV: E=McAfee;i="6500,9779,10552"; a="317551942" X-IronPort-AV: E=Sophos;i="5.96,220,1665471600"; d="scan'208";a="317551942" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 Dec 2022 09:21:26 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10552"; a="709330067" X-IronPort-AV: E=Sophos;i="5.96,220,1665471600"; d="scan'208";a="709330067" Received: from orsmsx603.amr.corp.intel.com ([10.22.229.16]) by fmsmga008.fm.intel.com with ESMTP; 05 Dec 2022 09:21:25 -0800 Received: from orsmsx602.amr.corp.intel.com (10.22.229.15) by ORSMSX603.amr.corp.intel.com (10.22.229.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.16; Mon, 5 Dec 2022 09:21:24 -0800 Received: from orsedg603.ED.cps.intel.com (10.7.248.4) by orsmsx602.amr.corp.intel.com (10.22.229.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.16 via Frontend Transport; Mon, 5 Dec 2022 09:21:24 -0800 Received: from NAM02-SN1-obe.outbound.protection.outlook.com (104.47.57.44) by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.16; Mon, 5 Dec 2022 09:21:24 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jRKWp0bjtlLlrcW1mF17Y+wWrhhgLPOIHsE8P80eAq+hRdFtsbzSFjP2h61jhi8hauGH8Mmb02RLZ2RsiTqtRM9H1MXbcBKKa3Z1ZxmLhRGsvwqYjGP5soolNCgCMcWOpW9Ad6JXomePc3MfWGD/QnJ3voxm0zhhFaiAxXIDzdDsyeA+9grr6wnhnVFxtbxCDvycTLKV7YMy2z4q+cuf22ulH9WoPfB4X8t9fWW/j1QruUF4DABc1/3zB57xiGkXcPHWEQHPjdP/PUWRmEjeFULP1ZQAy1AaM42vnvl7KdsBtlKc6dZlFeJrJ/hcOJVDL2HRpM18jt4BSUPIFtXk3w== 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=ePzW7jJOvsSX6rrAqXSTLcjbcaaXZ09/kop4c/hb0k8=; b=gF3UGb0b9jAegCP+7+lMDtJFpH8rDEFhX1bgQXKfdIKiT2vvpaNdg5DEPX5uYYJSWzqHxwJ7SnGpdQUD68pTNgF1EIsLWxaC4JernD36Tfxv1opeajBjJuJTwNfUp70zM0lavPV/absFtes831ugqV9UAz+AtsQGDC3R7ElgBfj7xm+M30togsDrAb7fSg6JdVM5XmYfdSmrZXLTLsBugxRaWio6gQOmyRZjx6XViZZPujBL1kSgbBFM1ivTZNE4OvK6oYukp1E7R7r1EuUUZAEQayjU2npULqqVK1Vz7h+lHTknaZSS0gXTXlcQnvwQu9t8WgUvCyLcVDt0LVIJxw== 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 Received: from MW4PR11MB5872.namprd11.prod.outlook.com (2603:10b6:303:169::14) by PH7PR11MB6546.namprd11.prod.outlook.com (2603:10b6:510:212::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5880.13; Mon, 5 Dec 2022 17:21:19 +0000 Received: from MW4PR11MB5872.namprd11.prod.outlook.com ([fe80::5f56:1bdc:2eae:c041]) by MW4PR11MB5872.namprd11.prod.outlook.com ([fe80::5f56:1bdc:2eae:c041%7]) with mapi id 15.20.5880.014; Mon, 5 Dec 2022 17:21:19 +0000 From: "Yao, Jiewen" To: Tom Lendacky , "Xu, Min M" , "devel@edk2.groups.io" CC: "Aktas, Erdem" , James Bottomley , Gerd Hoffmann Subject: Re: [PATCH V1 1/3] OvmfPkg/IoMmuDxe: Reserve shared memory region for DMA operation Thread-Topic: [PATCH V1 1/3] OvmfPkg/IoMmuDxe: Reserve shared memory region for DMA operation Thread-Index: AQHZCIDf2gVi/pcOe0izt+QAW1NpB65fgcUAgAAI85A= Date: Mon, 5 Dec 2022 17:21:19 +0000 Message-ID: References: <20221205080853.356-1-min.m.xu@intel.com> <20221205080853.356-2-min.m.xu@intel.com> <73a15a50-7657-479f-0cf8-6b8ef44db0cb@amd.com> In-Reply-To: <73a15a50-7657-479f-0cf8-6b8ef44db0cb@amd.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MW4PR11MB5872:EE_|PH7PR11MB6546:EE_ x-ms-office365-filtering-correlation-id: a8edcf26-69d3-4cac-d5d2-08dad6e51ff3 x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: B2WZYxPQVq+8RKA3ND9O7Jh1sgs/jxIRB8QlaVvsJbs3Tqp0ot8GlBts9T63TxVd2WVMWBpPHQo3JgzFwtRA1i3PeajeH7cZhjqTzZy/vclycleuHoWiyGesrJ6xAiA4Z3cPyfwXELvmfvQnQJof+1+mhVSB3i4SAcLNq+o8D8CYuczBg+n7zanWYsluEDItqNyUBRniTaJhofzrPvCRx86XyJGDeSqz42z2bcETgzm/8yUscKFyoyl/+at0g2bCkfxuUyEtWxsPI9CxY+RvMhujasecB04WVQxfYkoQyW82qrzmeB5LvULhbjS5UgC0Bs4eez6tfHNtJw5VhTO8aFxBz+d/LVjhGZSRxR+4G7XW3Sn9JbtvrFfZUp9VgLYYYT+j5Ksrngj4ma8CpNCOMmX7u/RVYTUOuli6Neids3w0NknQ2q/h0Abd6bQvq9dcynozeJoKx9ZbF3ZBlPzO8Fg8uJ6A6KtAg5LlpV9JRsV3W30C7BTfwXJbYxOt09VowJS2TukwI5TBuAdVLL0qUwnIBU4myHnc6mxlfRbzZ973XI3C+kyyKI4r3ohTysbfWwZg3ZabwmhY7N3TLNlzNTTFS83/e1jCXW8vwcWORfY37GYZLpRcE/ryLNx9VAJaAOVscVpvCGwOWpIh+9tP9CMmZpR1Sr5NCS9HqLbSZH7CDuw6IoqGrz67U4Av6o9h3NYLfn+qaAQR7CepH99aGf1vjd5rY4IQBwOyaSpvYSY= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW4PR11MB5872.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(6029001)(376002)(39860400002)(346002)(396003)(136003)(366004)(451199015)(52536014)(110136005)(30864003)(41300700001)(4326008)(66946007)(8676002)(2906002)(76116006)(66476007)(66556008)(64756008)(66446008)(54906003)(316002)(9686003)(186003)(53546011)(478600001)(38070700005)(55016003)(966005)(6506007)(26005)(71200400001)(7696005)(83380400001)(82960400001)(122000001)(5660300002)(8936002)(33656002)(86362001)(38100700002)(579004)(559001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?TjBZUkt0V3FtQTJWNFVEQ2xqRjJwcVVoOHQ1cUxWVk9MVTM1ck0yemNvak4x?= =?utf-8?B?SnFLeE54K3ZkSkFsd1l1UDZBcXdMWWlsTnZlMCtHQjBOR1NzSFMwK0hyQmJJ?= =?utf-8?B?MWRLelZERHVwbjJVMFNKYXd6ck9ZcG4xSCs1NDY1aHpoeGk2TUxEMm5EZ1hw?= =?utf-8?B?dmgzcHhsSUswUWYrRVhxVEUvbXdIcnZkekJnSEhDVFVHdzFKWWprdEU4V3Fo?= =?utf-8?B?UGp5R1JCN0dGZVVqc0oveEovWFdWdk5oRWVmRTlJL3FCN1ZKNzIyZmROaHQ5?= =?utf-8?B?RDZyR2JYcUlxOHBWbXAzKzNjNzNyZkpMd2hjVUYvdHVERm1uOHBTSXgwR2pE?= =?utf-8?B?QVprV1FnYjBmREZublU0SnM0S3pBZ0QwRXlaZ1RqVjlJaU1YZzlORmhoVVBI?= =?utf-8?B?V1FHc29HNXVVZXVzUUM5WTlLT210OEFrVUFFUHVjdFN4VXNRaC9hL0Evcit0?= =?utf-8?B?SlBrVFo4MUkzNEd4MnBMdHZsY09COXFxT3VWRnB2NTY0b2RaQ2FRZ1d3dllx?= =?utf-8?B?dHl3bHRDMUJFb2pnYTd2cUY3R2txY000N1dTU2tnbVhhVzVvN0phQzNDdmky?= =?utf-8?B?dkh2eDQ1cWJ3OEN0TEpMRjkzWU9RUEVqbGlUQTc0TjlMT0Z6ZG9obmp2NTBK?= =?utf-8?B?eHo4dmtZU2VHU2pIcWVnMzRrdVhjRmN6QWE0MnFiREZDbk02U3FHWFFHZXVa?= =?utf-8?B?cm11ckhWR2RZZ016M2JsektXaG5uMW15bGRSSWkyOHY4Vi96dkprdHF4UE1W?= =?utf-8?B?dTRzb0UrbTd4TXAvVVB4dGk5UHB5V3R4MlJ1RGZIVndsSXJaQmZTZjczTkpl?= =?utf-8?B?emhFelhaeWJoSlQrRmNqV01NbG9vVVBkNVIrOVBKK1hjMWI0OFFzZ0ZmVHlG?= =?utf-8?B?djhmdi8wZlNTbHA4aXdndFZMbnlJcWRBUlI4SktNYldRVWNneTMvczNTZTRC?= =?utf-8?B?R3RYK0xGVFRqWEs2a2hGckNqTFFEL1hEU0NZOVFkK1FHZkNLNzYxRlZiVjF3?= =?utf-8?B?dW1SZG00c3ZJMXp1TXQxUXZkTEpXWk9MK3d6WmlaZllhT2JFNWJncFgvQ1lB?= =?utf-8?B?RzIyY1FHRUNmei9vM3lLV3gxeFlrWWpXTk9la1NjUVhUMEhld2daRjRXaHQr?= =?utf-8?B?dFR0K3Y1bnNEQVQ4aHprNlVpZ1h5QzJmRTFneCt4Zk9ZcFd4eUx6eUFFcEg4?= =?utf-8?B?V2R0a1Mwa0pDNmRGclFrZXUvZjNjMUFJQnB1Uy83WVYvZkVEdW1DSFZjRUF6?= =?utf-8?B?UlV4RFV0YURQUUE1TmNRTE45VXd0SWtWaU83STRLczdGaE9OSmd3c3FIa09D?= =?utf-8?B?dXNndWFpc1lwTmdNSXRXU1JjalY2UFh1aU50OGtmR3hESzZSY3lnMlV6SlE3?= =?utf-8?B?RVQ0Lzk1dXRxYkRWbmR3OXFka0pocjNldTRmODZiSXk5bFcyYXZ6R1JCUTlX?= =?utf-8?B?M2V0M3JZYjUzWXRyZFNVdTdDdGhIMUhQak00RS82ekZFZll2SCtPODZyNCty?= =?utf-8?B?N0I4OVJjcFR5RWVQekRJQUVZRzMwU1lLb1MwOWRtUThkVkNYMmg0OVZKRk9S?= =?utf-8?B?ZUxxbUQ4NWU1N3FTTktDanR1Vm5sVTFYcHo0V1ZQL3YvVFhOSmx2aUtOVFJV?= =?utf-8?B?bVRQaE1PbSt0ZG1FZlFzVGlJR0owUUZ4Z2V1RXJldkMwK215RkRFMjROeWVC?= =?utf-8?B?NXoyQTRreXVLYXM5UlBBZUFRVXl5NzhadnZUTVRZek5yYytKdzdBdTk0NGlY?= =?utf-8?B?RCtwODIwVlAwUlNBeitDRzU2Y0RHbWI4Z1hMbDdvNis5M1pVdXhxNFZRSmFi?= =?utf-8?B?T0NWcnBGR0JyZmNxdkREbnZ4MnZwUnlVaXI2aWxadWZMY2Eya1dDMnBiSVNR?= =?utf-8?B?enRQRmdmaHFtalV4cVlCL05XaVB6VVJwSnNScVBIL2xWMHRQYW5lYWhoWEpN?= =?utf-8?B?Ymt0TzZHeEF4WjhhREJ4Ymo2VGl3SnRQUmpreFlxSElQek1pZnhxZFRlUWd3?= =?utf-8?B?dG9QTklUbTNOcHJnckp1SC9xdGduMWNOQVpveW5FeWF3ZDljQU5mYU1OV1hB?= =?utf-8?B?aE1mN0l4bUNCNVVTeHRYMG03WlFkNlJrUWI0ZXhGaFZWYnFkQ3YzbU1NcmhR?= =?utf-8?Q?TieHtNNCoCjSXZP+ClwLqdrrL?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MW4PR11MB5872.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a8edcf26-69d3-4cac-d5d2-08dad6e51ff3 X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Dec 2022 17:21:19.7649 (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: /Fto0xqwtnGIPViisguhvFwxR3v2+HcNgJZNNrASpvtbJ6MtQe4NxfwUNc5Bai7EWo9VQX4YwB4LuFRa3nTrpA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR11MB6546 Return-Path: jiewen.yao@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SSBzdWdnZXN0IGl0IGJlIGluIHNhbWUgUFIsIGFuZCBkaWZmZXJlbnQgcGF0Y2guIChFLmcuIHRo ZSBsYXN0IG9uZSBmb3IgU0VWKQ0KDQoNCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0K PiBGcm9tOiBUb20gTGVuZGFja3kgPHRob21hcy5sZW5kYWNreUBhbWQuY29tPg0KPiBTZW50OiBU dWVzZGF5LCBEZWNlbWJlciA2LCAyMDIyIDEyOjQ4IEFNDQo+IFRvOiBYdSwgTWluIE0gPG1pbi5t Lnh1QGludGVsLmNvbT47IGRldmVsQGVkazIuZ3JvdXBzLmlvDQo+IENjOiBBa3RhcywgRXJkZW0g PGVyZGVtYWt0YXNAZ29vZ2xlLmNvbT47IEphbWVzIEJvdHRvbWxleQ0KPiA8amVqYkBsaW51eC5p Ym0uY29tPjsgWWFvLCBKaWV3ZW4gPGppZXdlbi55YW9AaW50ZWwuY29tPjsgR2VyZA0KPiBIb2Zm bWFubiA8a3JheGVsQHJlZGhhdC5jb20+DQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggVjEgMS8zXSBP dm1mUGtnL0lvTW11RHhlOiBSZXNlcnZlIHNoYXJlZCBtZW1vcnkNCj4gcmVnaW9uIGZvciBETUEg b3BlcmF0aW9uDQo+IA0KPiBPbiAxMi81LzIyIDAyOjA4LCBNaW4gWHUgd3JvdGU6DQo+ID4gRnJv bTogTWluIE0gWHUgPG1pbi5tLnh1QGludGVsLmNvbT4NCj4gPg0KPiA+IEJaOiBodHRwczovL2J1 Z3ppbGxhLnRpYW5vY29yZS5vcmcvc2hvd19idWcuY2dpP2lkPTQxNzENCj4gPg0KPiA+IEEgdHlw aWNhbCBRRU1VIGZ3X2NmZyByZWFkIGJ5dGVzIHdpdGggSU9NTVUgZm9yIHRkIGd1ZXN0IGlzIHRo YXQ6DQo+ID4gKFFlbXVGd0NmZ1JlYWRCeXRlc0BRZW11RndDZmdMaWIuYyBpcyB0aGUgZXhhbXBs ZSkNCj4gPiAxKSBBbGxvY2F0ZSBETUEgQWNjZXNzIGJ1ZmZlcg0KPiA+IDIpIE1hcCBhY3R1YWwg ZGF0YSBidWZmZXINCj4gPiAzKSBzdGFydCB0aGUgdHJhbnNmZXIgYW5kIHdhaXQgZm9yIHRoZSB0 cmFuc2ZlciB0byBjb21wbGV0ZQ0KPiA+IDQpIEZyZWUgRE1BIEFjY2VzcyBidWZmZXINCj4gPiA1 KSBVbi1tYXAgYWN0dWFsIGRhdGEgYnVmZmVyDQo+ID4NCj4gPiBJbiBzdGVwIDEvMiwgUHJpdmF0 ZSBtZW1vcmllcyBhcmUgYWxsb2NhdGVkLCBjb252ZXJ0ZWQgdG8gc2hhcmVkDQo+IG1lbW9yaWVz Lg0KPiA+IEluIFN0ZXAgNC81IHRoZSBzaGFyZWQgbWVtb3JpZXMgYXJlIGNvbnZlcnRlZCB0byBw cml2YXRlIG1lbW9yaWVzIGFuZA0KPiA+IGFjY2VwdGVkIGFnYWluLiBUaGUgZmluYWwgc3RlcCBp cyB0byBmcmVlIHRoZSBwYWdlcy4NCj4gPg0KPiA+IFRoaXMgaXMgdGltZS1jb25zdW1pbmcgYW5k IGltcGFjdHMgdGQgZ3Vlc3QncyBib290IHBlcmYgKGJvdGggZGlyZWN0IGJvb3QNCj4gPiBhbmQg Z3J1YiBib290KSBiYWRseS4NCj4gPg0KPiA+IEluIGEgdHlwaWNhbCBncnViIGJvb3QsIHRoZXJl IGFyZSBhYm91dCA1MDAwIGNhbGxzIG9mIHBhZ2UgYWxsb2NhdGlvbiBhbmQNCj4gPiBwcml2YXRl L3NoYXJlIGNvbnZlcnNpb24uIE1vc3Qgb2YgcGFnZSBzaXplIGlzIGxlc3MgdGhhbiAzMktCLg0K PiA+DQo+ID4gVGhpcyBwYXRjaCBhbGxvY2F0ZXMgYSBtZW1vcnkgcmVnaW9uIGFuZCBpbml0aWFs aXplcyBpdCBpbnRvIHBpZWNlcyBvZg0KPiA+IG1lbW9yeSB3aXRoIGRpZmZlcmVudCBzaXplcy4g QSBwaWVjZSBvZiBzdWNoIG1lbW9yeSBjb25zaXN0cyBvZiAyIHBhcnRzOg0KPiA+IHRoZSBmaXJz dCBwYWdlIGlzIG9mIHByaXZhdGUgbWVtb3J5LCBhbmQgdGhlIG90aGVyIHBhZ2VzIGFyZSBzaGFy ZWQNCj4gPiBtZW1vcnkuIFRoaXMgaXMgdG8gbWVldCB0aGUgbGF5b3V0IG9mIGNvbW1vbiBidWZm ZXIuDQo+ID4NCj4gPiBXaGVuIGFsbG9jYXRpbmcgYm91bmNlIGJ1ZmZlciBpbiBJb01tdU1hcCgp LA0KPiBJb01tdUFsbG9jYXRlQm91bmNlQnVmZmVyKCkNCj4gPiBpcyBjYWxsZWQgdG8gYWxsb2Nh dGUgdGhlIGJ1ZmZlci4gQWNjb3JkaW5nbHkgd2hlbiBmcmVlaW5nIGJvdW5jZSBidWZmZXINCj4g PiBpbiBJb01tdVVubWFwV29ya2VyKCksIElvTW11RnJlZUJvdW5jZUJ1ZmZlcigpIGlzIGNhbGxl ZCB0byBmcmVlIHRoZQ0KPiA+IGJvdW5jZSBidWZmZXIuIENvbW1vbkJ1ZmZlciBpcyBhbGxvY2F0 ZWQgYnkNCj4gSW9NbXVBbGxvY2F0ZUNvbW1vbkJ1ZmZlcg0KPiA+IGFuZCBhY2NvcmRpbmdseSBm cmVlZCBieSBJb01tdUZyZWVDb21tb25CdWZmZXIuDQo+ID4NCj4gPiBUaGlzIGZlYXR1cmUgaXMg dGVzdGVkIGluIEludGVsIFREWCBwcmUtcHJvZHVjdGlvbiBwbGF0Zm9ybS4gSXQgc2F2ZXMgdXAN Cj4gPiB0byBodW5kcmVkcyBvZiBtcyBpbiBhIGdydWIgYm9vdC4NCj4gDQo+IFRoaXMgY3Jhc2hl cyBTRVYgZ3Vlc3RzLiBJIHByZXN1bWUgYmVjYXVzZSB0aGUgY2FsbCB0bw0KPiBJb01tdVJlbGVh c2VSZXNlcnZlZFNoYXJlZE1lbSgpIGlzIG5vdCBicmFja2V0ZWQgYnkgYSBjaGVjayBmb3IgVERY Lg0KPiANCj4gSSBwbGFuIHRvIGFkZCBzdXBwb3J0IGZvciBTRVYsIHdoaWNoIHdvdWxkIGF2b2lk IHRoZSBjcmFzaCwgbm90IHN1cmUgaWYNCj4geW91IHdhbnQgdG8gaW50ZWdyYXRlIGl0IGludG8g YSBzaW5nbGUgc2VyaWVzIG9yIG5vdC4gSGVyZSdzIHRoZSBwYXRjaCBJDQo+IHdhcyBsb29raW5n IHRvIGFkZCB0aGF0IHNob3VsZCBiZSBwcmV0dHkgZWFzeSB0byBpbnRlZ3JhdGUuIExldCBtZSBr bm93IGlmDQo+IHlvdSB3b3VsZCBsaWtlIHRvIGludGVncmF0ZSBpdCBpbiB5b3VyIHNlcmllcyBv ciBqdXN0IGhhdmUgbWUgc3VibWl0IGl0IGFzDQo+IGEgcmVwbHkgdG8geW91ciBzZXJpZXM6DQo+ IA0KPiANCj4gT3ZtZlBrZy9Jb01tdUR4ZTogQWRkIFNFViBzdXBwb3J0IGZvciByZXNlcnZlZCBz aGFyZWQgbWVtb3J5DQo+IA0KPiBGcm9tOiBUb20gTGVuZGFja3kgPHRob21hcy5sZW5kYWNreUBh bWQuY29tPg0KPiANCj4gQWRkIHN1cHBvcnQgdG8gdXNlIHRoZSByZXNlcnZlZCBzaGFyZWQgbWVt b3J5IHdpdGhpbiB0aGUgSW9NbXUgbGlicmFyeS4NCj4gVGhpcyBpbXByb3ZlcyBib290IHRpbWVz IGZvciBhbGwgU0VWIGd1ZXN0cywgd2l0aCBTRVYtU05QIGJlbmVmaXRpbmcgdGhlDQo+IG1vc3Qg YXMgaXQgYXZvaWRzIHRoZSBwYWdlIHN0YXRlIGNoYW5nZSBjYWxsIHRvIHRoZSBoeXBlcnZpc29y Lg0KPiANCj4gU2lnbmVkLW9mZi1ieTogVG9tIExlbmRhY2t5IDx0aG9tYXMubGVuZGFja3lAYW1k LmNvbT4NCj4gLS0tDQo+ICAgT3ZtZlBrZy9Jb01tdUR4ZS9DY0lvTW11LmMgICAgIHwgICA4MiAr KysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLQ0KPiAtLS0tLS0tLS0tLQ0KPiAgIE92bWZQa2cv SW9NbXVEeGUvSW9NbXVCdWZmZXIuYyB8ICAgNTQgKysrKysrKysrKysrKysrKysrKystLS0tLS0N Cj4gICAyIGZpbGVzIGNoYW5nZWQsIDgzIGluc2VydGlvbnMoKyksIDUzIGRlbGV0aW9ucygtKQ0K PiANCj4gZGlmZiAtLWdpdCBhL092bWZQa2cvSW9NbXVEeGUvQ2NJb01tdS5jDQo+IGIvT3ZtZlBr Zy9Jb01tdUR4ZS9DY0lvTW11LmMNCj4gaW5kZXggMTQ3OWFmNDY5ODgxLi43YzI4NDNjZDIzOGEg MTAwNjQ0DQo+IC0tLSBhL092bWZQa2cvSW9NbXVEeGUvQ2NJb01tdS5jDQo+ICsrKyBiL092bWZQ a2cvSW9NbXVEeGUvQ2NJb01tdS5jDQo+IEBAIC0yMjMsMzAgKzIyMywzMiBAQCBJb01tdU1hcCAo DQo+ICAgICAgICAgZ290byBGcmVlTWFwSW5mbzsNCj4gICAgIH0NCj4gDQo+IC0gIGlmIChDQ19H VUVTVF9JU19TRVYgKFBjZEdldDY0IChQY2RDb25maWRlbnRpYWxDb21wdXRpbmdHdWVzdEF0dHIp KSkgew0KPiArICBpZiAoTWFwSW5mby0+UmVzZXJ2ZWRNZW1CaXRtYXAgPT0gMCkgew0KPiAgICAg ICAvLw0KPiAtICAgIC8vIENsZWFyIHRoZSBtZW1vcnkgZW5jcnlwdGlvbiBtYXNrIG9uIHRoZSBw bGFpbnRleHQgYnVmZmVyLg0KPiAtICAgIC8vDQo+IC0gICAgU3RhdHVzID0gTWVtRW5jcnlwdFNl dkNsZWFyUGFnZUVuY01hc2sgKA0KPiAtICAgICAgICAgICAgICAgMCwNCj4gLSAgICAgICAgICAg ICAgIE1hcEluZm8tPlBsYWluVGV4dEFkZHJlc3MsDQo+IC0gICAgICAgICAgICAgICBNYXBJbmZv LT5OdW1iZXJPZlBhZ2VzDQo+IC0gICAgICAgICAgICAgICApOw0KPiAtICB9IGVsc2UgaWYgKEND X0dVRVNUX0lTX1REWCAoUGNkR2V0NjQNCj4gKFBjZENvbmZpZGVudGlhbENvbXB1dGluZ0d1ZXN0 QXR0cikpKSB7DQo+IC0gICAgLy8NCj4gLSAgICAvLyBTZXQgdGhlIG1lbW9yeSBzaGFyZWQgYml0 Lg0KPiAgICAgICAvLyBJZiBNYXBJbmZvLT5SZXNlcnZlZE1lbUJpdG1hcCBpcyAwLCBpdCBtZWFu cyB0aGUgYm91bmNlIGJ1ZmZlciBpcw0KPiBub3QgYWxsb2NhdGVkDQo+ICAgICAgIC8vIGZyb20g dGhlIHByZS1hbGxvY2F0ZWQgc2hhcmVkIG1lbW9yeSwgc28gaXQgbXVzdCBiZSBjb252ZXJ0ZWQg dG8NCj4gc2hhcmVkIG1lbW9yeSBoZXJlLg0KPiAgICAgICAvLw0KPiAtICAgIGlmIChNYXBJbmZv LT5SZXNlcnZlZE1lbUJpdG1hcCA9PSAwKSB7DQo+ICsgICAgaWYgKENDX0dVRVNUX0lTX1NFViAo UGNkR2V0NjQgKFBjZENvbmZpZGVudGlhbENvbXB1dGluZ0d1ZXN0QXR0cikpKQ0KPiB7DQo+ICsg ICAgICAvLw0KPiArICAgICAgLy8gQ2xlYXIgdGhlIG1lbW9yeSBlbmNyeXB0aW9uIG1hc2sgb24g dGhlIHBsYWludGV4dCBidWZmZXIuDQo+ICsgICAgICAvLw0KPiArICAgICAgU3RhdHVzID0gTWVt RW5jcnlwdFNldkNsZWFyUGFnZUVuY01hc2sgKA0KPiArICAgICAgICAgICAgICAgICAwLA0KPiAr ICAgICAgICAgICAgICAgICBNYXBJbmZvLT5QbGFpblRleHRBZGRyZXNzLA0KPiArICAgICAgICAg ICAgICAgICBNYXBJbmZvLT5OdW1iZXJPZlBhZ2VzDQo+ICsgICAgICAgICAgICAgICAgICk7DQo+ ICsgICAgfSBlbHNlIGlmIChDQ19HVUVTVF9JU19URFggKFBjZEdldDY0DQo+IChQY2RDb25maWRl bnRpYWxDb21wdXRpbmdHdWVzdEF0dHIpKSkgew0KPiArICAgICAgLy8NCj4gKyAgICAgIC8vIFNl dCB0aGUgbWVtb3J5IHNoYXJlZCBiaXQuDQo+ICsgICAgICAvLw0KPiAgICAgICAgIFN0YXR1cyA9 IE1lbUVuY3J5cHRUZHhTZXRQYWdlU2hhcmVkQml0ICgNCj4gICAgICAgICAgICAgICAgICAgIDAs DQo+ICAgICAgICAgICAgICAgICAgICBNYXBJbmZvLT5QbGFpblRleHRBZGRyZXNzLA0KPiAgICAg ICAgICAgICAgICAgICAgTWFwSW5mby0+TnVtYmVyT2ZQYWdlcw0KPiAgICAgICAgICAgICAgICAg ICAgKTsNCj4gKyAgICB9IGVsc2Ugew0KPiArICAgICAgQVNTRVJUIChGQUxTRSk7DQo+ICAgICAg IH0NCj4gLSAgfSBlbHNlIHsNCj4gLSAgICBBU1NFUlQgKEZBTFNFKTsNCj4gICAgIH0NCj4gDQo+ ICAgICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiBAQCAtMzk2LDMwICszOTgsMzAgQEAg SW9NbXVVbm1hcFdvcmtlciAoDQo+ICAgICAgICAgYnJlYWs7DQo+ICAgICB9DQo+IA0KPiAtICBp ZiAoQ0NfR1VFU1RfSVNfU0VWIChQY2RHZXQ2NCAoUGNkQ29uZmlkZW50aWFsQ29tcHV0aW5nR3Vl c3RBdHRyKSkpIHsNCj4gLSAgICAvLw0KPiAtICAgIC8vIFJlc3RvcmUgdGhlIG1lbW9yeSBlbmNy eXB0aW9uIG1hc2sgb24gdGhlIGFyZWEgd2UgdXNlZCB0byBob2xkIHRoZQ0KPiAtICAgIC8vIHBs YWludGV4dC4NCj4gLSAgICAvLw0KPiAtICAgIFN0YXR1cyA9IE1lbUVuY3J5cHRTZXZTZXRQYWdl RW5jTWFzayAoDQo+IC0gICAgICAgICAgICAgICAwLA0KPiAtICAgICAgICAgICAgICAgTWFwSW5m by0+UGxhaW5UZXh0QWRkcmVzcywNCj4gLSAgICAgICAgICAgICAgIE1hcEluZm8tPk51bWJlck9m UGFnZXMNCj4gLSAgICAgICAgICAgICAgICk7DQo+IC0gIH0gZWxzZSBpZiAoQ0NfR1VFU1RfSVNf VERYIChQY2RHZXQ2NA0KPiAoUGNkQ29uZmlkZW50aWFsQ29tcHV0aW5nR3Vlc3RBdHRyKSkpIHsN Cj4gLSAgICAvLw0KPiAtICAgIC8vIFJlc3RvcmUgdGhlIG1lbW9yeSBzaGFyZWQgYml0IG1hc2sg b24gdGhlIGFyZWEgd2UgdXNlZCB0byBob2xkIHRoZQ0KPiAtICAgIC8vIHBsYWludGV4dC4NCj4g LSAgICAvLw0KPiAtICAgIGlmIChNYXBJbmZvLT5SZXNlcnZlZE1lbUJpdG1hcCA9PSAwKSB7DQo+ ICsgIGlmIChNYXBJbmZvLT5SZXNlcnZlZE1lbUJpdG1hcCA9PSAwKSB7DQo+ICsgICAgaWYgKEND X0dVRVNUX0lTX1NFViAoUGNkR2V0NjQgKFBjZENvbmZpZGVudGlhbENvbXB1dGluZ0d1ZXN0QXR0 cikpKQ0KPiB7DQo+ICsgICAgICAvLw0KPiArICAgICAgLy8gUmVzdG9yZSB0aGUgbWVtb3J5IGVu Y3J5cHRpb24gbWFzayBvbiB0aGUgYXJlYSB3ZSB1c2VkIHRvIGhvbGQNCj4gdGhlDQo+ICsgICAg ICAvLyBwbGFpbnRleHQuDQo+ICsgICAgICAvLw0KPiArICAgICAgU3RhdHVzID0gTWVtRW5jcnlw dFNldlNldFBhZ2VFbmNNYXNrICgNCj4gKyAgICAgICAgICAgICAgICAgMCwNCj4gKyAgICAgICAg ICAgICAgICAgTWFwSW5mby0+UGxhaW5UZXh0QWRkcmVzcywNCj4gKyAgICAgICAgICAgICAgICAg TWFwSW5mby0+TnVtYmVyT2ZQYWdlcw0KPiArICAgICAgICAgICAgICAgICApOw0KPiArICAgIH0g ZWxzZSBpZiAoQ0NfR1VFU1RfSVNfVERYIChQY2RHZXQ2NA0KPiAoUGNkQ29uZmlkZW50aWFsQ29t cHV0aW5nR3Vlc3RBdHRyKSkpIHsNCj4gKyAgICAgIC8vDQo+ICsgICAgICAvLyBSZXN0b3JlIHRo ZSBtZW1vcnkgc2hhcmVkIGJpdCBtYXNrIG9uIHRoZSBhcmVhIHdlIHVzZWQgdG8gaG9sZA0KPiB0 aGUNCj4gKyAgICAgIC8vIHBsYWludGV4dC4NCj4gKyAgICAgIC8vDQo+ICAgICAgICAgU3RhdHVz ID0gTWVtRW5jcnlwdFRkeENsZWFyUGFnZVNoYXJlZEJpdCAoDQo+ICAgICAgICAgICAgICAgICAg ICAwLA0KPiAgICAgICAgICAgICAgICAgICAgTWFwSW5mby0+UGxhaW5UZXh0QWRkcmVzcywNCj4g ICAgICAgICAgICAgICAgICAgIE1hcEluZm8tPk51bWJlck9mUGFnZXMNCj4gICAgICAgICAgICAg ICAgICAgICk7DQo+ICsgICAgfSBlbHNlIHsNCj4gKyAgICAgIEFTU0VSVCAoRkFMU0UpOw0KPiAg ICAgICB9DQo+IC0gIH0gZWxzZSB7DQo+IC0gICAgQVNTRVJUIChGQUxTRSk7DQo+ICAgICB9DQo+ IA0KPiAgICAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4gQEAgLTkyNCwxNiArOTI2LDE0 IEBAIEluc3RhbGxJb01tdVByb3RvY29sICgNCj4gICAgIH0NCj4gDQo+ICAgICAvLw0KPiAtICAv LyBDdXJyZW50bHkgb25seSBUZHggZ3Vlc3Qgc3VwcG9ydCBSZXNlcnZlZCBzaGFyZWQgbWVtb3J5 IGZvciBETUENCj4gb3BlcmF0aW9uLg0KPiArICAvLyBGb3IgQ0MgZ3Vlc3RzLCB1c2UgcmVzZXJ2 ZWQgc2hhcmVkIG1lbW9yeSBmb3IgRE1BIG9wZXJhdGlvbi4NCj4gICAgIC8vDQo+IC0gIGlmIChD Q19HVUVTVF9JU19URFggKFBjZEdldDY0IChQY2RDb25maWRlbnRpYWxDb21wdXRpbmdHdWVzdEF0 dHIpKSkgew0KPiAtICAgIG1SZXNlcnZlZFNoYXJlZE1lbVN1cHBvcnRlZCA9IFRSVUU7DQo+IC0g ICAgU3RhdHVzICAgICAgICAgICAgICAgICAgICAgID0gSW9NbXVJbml0UmVzZXJ2ZWRTaGFyZWRN ZW0gKCk7DQo+IC0gICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiAtICAgICAgbVJlc2Vy dmVkU2hhcmVkTWVtU3VwcG9ydGVkID0gRkFMU0U7DQo+IC0gICAgfSBlbHNlIHsNCj4gLSAgICAg IERFQlVHICgoREVCVUdfSU5GTywgIiVhOiBGZWF0dXJlIG9mIHJlc2VydmVkIG1lbW9yeSBmb3Ig RE1BIGlzDQo+IHN1cHBvcnRlZC5cbiIsIF9fRlVOQ1RJT05fXykpOw0KPiAtICAgIH0NCj4gKyAg bVJlc2VydmVkU2hhcmVkTWVtU3VwcG9ydGVkID0gVFJVRTsNCj4gKyAgU3RhdHVzICAgICAgICAg ICAgICAgICAgICAgID0gSW9NbXVJbml0UmVzZXJ2ZWRTaGFyZWRNZW0gKCk7DQo+ICsgIGlmIChF RklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBtUmVzZXJ2ZWRTaGFyZWRNZW1TdXBwb3J0ZWQg PSBGQUxTRTsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBERUJVRyAoKERFQlVHX0lORk8sICIlYTog RmVhdHVyZSBvZiByZXNlcnZlZCBtZW1vcnkgZm9yIERNQSBpcw0KPiBzdXBwb3J0ZWQuXG4iLCBf X0ZVTkNUSU9OX18pKTsNCj4gICAgIH0NCj4gDQo+ICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ IGRpZmYgLS1naXQgYS9Pdm1mUGtnL0lvTW11RHhlL0lvTW11QnVmZmVyLmMNCj4gYi9Pdm1mUGtn L0lvTW11RHhlL0lvTW11QnVmZmVyLmMNCj4gaW5kZXggNWFkYThlOWQ1N2JkLi5kNjk5NjliNmI3 NjMgMTAwNjQ0DQo+IC0tLSBhL092bWZQa2cvSW9NbXVEeGUvSW9NbXVCdWZmZXIuYw0KPiArKysg Yi9Pdm1mUGtnL0lvTW11RHhlL0lvTW11QnVmZmVyLmMNCj4gQEAgLTksNyArOSw5IEBADQo+ICAg I2luY2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPg0KPiAgICNpbmNsdWRlIDxMaWJyYXJ5 L0RlYnVnTGliLmg+DQo+ICAgI2luY2x1ZGUgPExpYnJhcnkvTWVtb3J5QWxsb2NhdGlvbkxpYi5o Pg0KPiArI2luY2x1ZGUgPExpYnJhcnkvTWVtRW5jcnlwdFNldkxpYi5oPg0KPiAgICNpbmNsdWRl IDxMaWJyYXJ5L01lbUVuY3J5cHRUZHhMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1BjZExp Yi5oPg0KPiAgICNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlCb290U2VydmljZXNUYWJsZUxpYi5oPg0K PiAgICNpbmNsdWRlICJJb01tdUludGVybmFsLmgiDQo+IA0KPiBAQCAtMTA1LDYgKzEwNyw3IEBA IElvTW11SW5pdFJlc2VydmVkU2hhcmVkTWVtICgNCj4gICAgIFVJTlROICAgICAgICAgICAgICAg ICAgICAgVG90YWxQYWdlczsNCj4gICAgIElPTU1VX1JFU0VSVkVEX01FTV9SQU5HRSAgKk1lbVJh bmdlOw0KPiAgICAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgICBQaHlzaWNhbEFkZHJlc3M7DQo+ ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgU2hhcmVkQWRkcmVzczsNCj4gDQo+ICAgICBp ZiAoIW1SZXNlcnZlZFNoYXJlZE1lbVN1cHBvcnRlZCkgew0KPiAgICAgICByZXR1cm4gRUZJX1VO U1VQUE9SVEVEOw0KPiBAQCAtMTI5LDEyICsxMzIsMjUgQEAgSW9NbXVJbml0UmVzZXJ2ZWRTaGFy ZWRNZW0gKA0KPiAgICAgICBNZW1SYW5nZS0+U3RhcnRBZGRyZXNzT2ZNZW1SYW5nZSA9IFBoeXNp Y2FsQWRkcmVzczsNCj4gDQo+ICAgICAgIGZvciAoSW5kZXgyID0gMDsgSW5kZXgyIDwgTWVtUmFu Z2UtPlNsb3RzOyBJbmRleDIrKykgew0KPiAtICAgICAgU3RhdHVzID0gTWVtRW5jcnlwdFRkeFNl dFBhZ2VTaGFyZWRCaXQgKA0KPiAtICAgICAgICAgICAgICAgICAwLA0KPiAtICAgICAgICAgICAg ICAgICAoVUlOVDY0KShVSU5UTikoTWVtUmFuZ2UtPlN0YXJ0QWRkcmVzc09mTWVtUmFuZ2UgKw0K PiBJbmRleDIgKiBTSVpFX09GX01FTV9SQU5HRSAoTWVtUmFuZ2UpICsgTWVtUmFuZ2UtPkhlYWRl clNpemUpLA0KPiAtICAgICAgICAgICAgICAgICBFRklfU0laRV9UT19QQUdFUyAoTWVtUmFuZ2Ut PkRhdGFTaXplKQ0KPiAtICAgICAgICAgICAgICAgICApOw0KPiAtICAgICAgQVNTRVJUICghRUZJ X0VSUk9SIChTdGF0dXMpKTsNCj4gKyAgICAgIFNoYXJlZEFkZHJlc3MgPSAoVUlOVDY0KShVSU5U TikoTWVtUmFuZ2UtDQo+ID5TdGFydEFkZHJlc3NPZk1lbVJhbmdlICsgSW5kZXgyICogU0laRV9P Rl9NRU1fUkFOR0UgKE1lbVJhbmdlKQ0KPiArIE1lbVJhbmdlLT5IZWFkZXJTaXplKTsNCj4gKw0K PiArICAgICAgaWYgKENDX0dVRVNUX0lTX1NFViAoUGNkR2V0NjQNCj4gKFBjZENvbmZpZGVudGlh bENvbXB1dGluZ0d1ZXN0QXR0cikpKSB7DQo+ICsgICAgICAgIFN0YXR1cyA9IE1lbUVuY3J5cHRT ZXZDbGVhclBhZ2VFbmNNYXNrICgNCj4gKyAgICAgICAgICAgICAgICAgICAwLA0KPiArICAgICAg ICAgICAgICAgICAgIFNoYXJlZEFkZHJlc3MsDQo+ICsgICAgICAgICAgICAgICAgICAgRUZJX1NJ WkVfVE9fUEFHRVMgKE1lbVJhbmdlLT5EYXRhU2l6ZSkNCj4gKyAgICAgICAgICAgICAgICAgICAp Ow0KPiArICAgICAgICBBU1NFUlQgKCFFRklfRVJST1IgKFN0YXR1cykpOw0KPiArICAgICAgfSBl bHNlIGlmIChDQ19HVUVTVF9JU19URFggKFBjZEdldDY0DQo+IChQY2RDb25maWRlbnRpYWxDb21w dXRpbmdHdWVzdEF0dHIpKSkgew0KPiArICAgICAgICBTdGF0dXMgPSBNZW1FbmNyeXB0VGR4U2V0 UGFnZVNoYXJlZEJpdCAoDQo+ICsgICAgICAgICAgICAgICAgICAgMCwNCj4gKyAgICAgICAgICAg ICAgICAgICBTaGFyZWRBZGRyZXNzLA0KPiArICAgICAgICAgICAgICAgICAgIEVGSV9TSVpFX1RP X1BBR0VTIChNZW1SYW5nZS0+RGF0YVNpemUpDQo+ICsgICAgICAgICAgICAgICAgICAgKTsNCj4g KyAgICAgICAgQVNTRVJUICghRUZJX0VSUk9SIChTdGF0dXMpKTsNCj4gKyAgICAgIH0gZWxzZSB7 DQo+ICsgICAgICAgIEFTU0VSVCAoRkFMU0UpOw0KPiArICAgICAgfQ0KPiAgICAgICB9DQo+IA0K PiAgICAgICBQaHlzaWNhbEFkZHJlc3MgKz0gKE1lbVJhbmdlLT5TbG90cyAqIFNJWkVfT0ZfTUVN X1JBTkdFDQo+IChNZW1SYW5nZSkpOw0KPiBAQCAtMTU2LDE2ICsxNzIsMzAgQEAgSW9NbXVSZWxl YXNlUmVzZXJ2ZWRTaGFyZWRNZW0gKA0KPiAgICAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICBT dGF0dXM7DQo+ICAgICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIEluZGV4MSwgSW5kZXgyOw0K PiAgICAgSU9NTVVfUkVTRVJWRURfTUVNX1JBTkdFICAqTWVtUmFuZ2U7DQo+ICsgIFVJTlQ2NCAg ICAgICAgICAgICAgICAgICAgU2hhcmVkQWRkcmVzczsNCj4gDQo+ICAgICBmb3IgKEluZGV4MSA9 IDA7IEluZGV4MSA8IEFSUkFZX1NJWkUgKG1SZXNlcnZlZE1lbVJhbmdlcyk7IEluZGV4MSsrKQ0K PiB7DQo+ICAgICAgIE1lbVJhbmdlID0gJm1SZXNlcnZlZE1lbVJhbmdlc1tJbmRleDFdOw0KPiAg ICAgICBmb3IgKEluZGV4MiA9IDA7IEluZGV4MiA8IE1lbVJhbmdlLT5TbG90czsgSW5kZXgyKysp IHsNCj4gLSAgICAgIFN0YXR1cyA9IE1lbUVuY3J5cHRUZHhDbGVhclBhZ2VTaGFyZWRCaXQgKA0K PiAtICAgICAgICAgICAgICAgICAwLA0KPiAtICAgICAgICAgICAgICAgICAoVUlOVDY0KShVSU5U TikoTWVtUmFuZ2UtPlN0YXJ0QWRkcmVzc09mTWVtUmFuZ2UgKw0KPiBJbmRleDIgKiBTSVpFX09G X01FTV9SQU5HRSAoTWVtUmFuZ2UpICsgTWVtUmFuZ2UtPkhlYWRlclNpemUpLA0KPiAtICAgICAg ICAgICAgICAgICBFRklfU0laRV9UT19QQUdFUyAoTWVtUmFuZ2UtPkRhdGFTaXplKQ0KPiAtICAg ICAgICAgICAgICAgICApOw0KPiAtICAgICAgQVNTRVJUICghRUZJX0VSUk9SIChTdGF0dXMpKTsN Cj4gKyAgICAgIFNoYXJlZEFkZHJlc3MgPSAoVUlOVDY0KShVSU5UTikoTWVtUmFuZ2UtDQo+ID5T dGFydEFkZHJlc3NPZk1lbVJhbmdlICsgSW5kZXgyICogU0laRV9PRl9NRU1fUkFOR0UgKE1lbVJh bmdlKQ0KPiArIE1lbVJhbmdlLT5IZWFkZXJTaXplKTsNCj4gKw0KPiArICAgICAgaWYgKENDX0dV RVNUX0lTX1NFViAoUGNkR2V0NjQNCj4gKFBjZENvbmZpZGVudGlhbENvbXB1dGluZ0d1ZXN0QXR0 cikpKSB7DQo+ICsgICAgICAgIFN0YXR1cyA9IE1lbUVuY3J5cHRTZXZTZXRQYWdlRW5jTWFzayAo DQo+ICsgICAgICAgICAgICAgICAgICAgMCwNCj4gKyAgICAgICAgICAgICAgICAgICBTaGFyZWRB ZGRyZXNzLA0KPiArICAgICAgICAgICAgICAgICAgIEVGSV9TSVpFX1RPX1BBR0VTIChNZW1SYW5n ZS0+RGF0YVNpemUpDQo+ICsgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICAgICAgQVNTRVJU ICghRUZJX0VSUk9SIChTdGF0dXMpKTsNCj4gKyAgICAgIH0gZWxzZSBpZiAoQ0NfR1VFU1RfSVNf VERYIChQY2RHZXQ2NA0KPiAoUGNkQ29uZmlkZW50aWFsQ29tcHV0aW5nR3Vlc3RBdHRyKSkpIHsN Cj4gKyAgICAgICAgU3RhdHVzID0gTWVtRW5jcnlwdFRkeENsZWFyUGFnZVNoYXJlZEJpdCAoDQo+ ICsgICAgICAgICAgICAgICAgICAgMCwNCj4gKyAgICAgICAgICAgICAgICAgICBTaGFyZWRBZGRy ZXNzLA0KPiArICAgICAgICAgICAgICAgICAgIEVGSV9TSVpFX1RPX1BBR0VTIChNZW1SYW5nZS0+ RGF0YVNpemUpDQo+ICsgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICAgICAgQVNTRVJUICgh RUZJX0VSUk9SIChTdGF0dXMpKTsNCj4gKyAgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgIEFTU0VS VCAoRkFMU0UpOw0KPiArICAgICAgfQ0KPiAgICAgICB9DQo+ICAgICB9DQo+IA0KPiANCj4gPg0K PiA+IENjOiBFcmRlbSBBa3RhcyA8ZXJkZW1ha3Rhc0Bnb29nbGUuY29tPg0KPiA+IENjOiBKYW1l cyBCb3R0b21sZXkgPGplamJAbGludXguaWJtLmNvbT4NCj4gPiBDYzogSmlld2VuIFlhbyA8amll d2VuLnlhb0BpbnRlbC5jb20+DQo+ID4gQ2M6IFRvbSBMZW5kYWNreSA8dGhvbWFzLmxlbmRhY2t5 QGFtZC5jb20+DQo+ID4gQ2M6IEdlcmQgSG9mZm1hbm4gPGtyYXhlbEByZWRoYXQuY29tPg0KPiA+ IFNpZ25lZC1vZmYtYnk6IE1pbiBYdSA8bWluLm0ueHVAaW50ZWwuY29tPg0KPiA+IC0tLQ0KPiA+ ICAgT3ZtZlBrZy9Jb01tdUR4ZS9BbWRTZXZJb01tdS5jICAgfCAxNDIgKysrKystLS0tLS0NCj4g PiAgIE92bWZQa2cvSW9NbXVEeGUvSW9NbXVCdWZmZXIuYyAgIHwgNDI1DQo+ICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysNCj4gPiAgIE92bWZQa2cvSW9NbXVEeGUvSW9NbXVEeGUuaW5m ICAgIHwgICAxICsNCj4gPiAgIE92bWZQa2cvSW9NbXVEeGUvSW9NbXVJbnRlcm5hbC5oIHwgMTc5 ICsrKysrKysrKysrKysNCj4gPiAgIDQgZmlsZXMgY2hhbmdlZCwgNjc2IGluc2VydGlvbnMoKyks IDcxIGRlbGV0aW9ucygtKQ0KPiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IE92bWZQa2cvSW9NbXVE eGUvSW9NbXVCdWZmZXIuYw0KPiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IE92bWZQa2cvSW9NbXVE eGUvSW9NbXVJbnRlcm5hbC5oDQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvT3ZtZlBrZy9Jb01tdUR4 ZS9BbWRTZXZJb01tdS5jDQo+IGIvT3ZtZlBrZy9Jb01tdUR4ZS9BbWRTZXZJb01tdS5jDQo+ID4g aW5kZXggNmI2NTg5N2YwMzJhLi43N2U0NmJiZjRhNjAgMTAwNjQ0DQo+ID4gLS0tIGEvT3ZtZlBr Zy9Jb01tdUR4ZS9BbWRTZXZJb01tdS5jDQo+ID4gKysrIGIvT3ZtZlBrZy9Jb01tdUR4ZS9BbWRT ZXZJb01tdS5jDQo+ID4gQEAgLTE1LDE4ICsxNSw3IEBADQo+ID4gICAjaW5jbHVkZSA8TGlicmFy eS9QY2RMaWIuaD4NCj4gPiAgICNpbmNsdWRlIDxDb25maWRlbnRpYWxDb21wdXRpbmdHdWVzdEF0 dHIuaD4NCj4gPiAgICNpbmNsdWRlICJBbWRTZXZJb01tdS5oIg0KPiA+IC0NCj4gPiAtI2RlZmlu ZSBNQVBfSU5GT19TSUcgIFNJR05BVFVSRV82NCAoJ00nLCAnQScsICdQJywgJ18nLCAnSScsICdO JywgJ0YnLCAnTycpDQo+ID4gLQ0KPiA+IC10eXBlZGVmIHN0cnVjdCB7DQo+ID4gLSAgVUlOVDY0 ICAgICAgICAgICAgICAgICAgIFNpZ25hdHVyZTsNCj4gPiAtICBMSVNUX0VOVFJZICAgICAgICAg ICAgICAgTGluazsNCj4gPiAtICBFREtJSV9JT01NVV9PUEVSQVRJT04gICAgT3BlcmF0aW9uOw0K PiA+IC0gIFVJTlROICAgICAgICAgICAgICAgICAgICBOdW1iZXJPZkJ5dGVzOw0KPiA+IC0gIFVJ TlROICAgICAgICAgICAgICAgICAgICBOdW1iZXJPZlBhZ2VzOw0KPiA+IC0gIEVGSV9QSFlTSUNB TF9BRERSRVNTICAgICBDcnlwdGVkQWRkcmVzczsNCj4gPiAtICBFRklfUEhZU0lDQUxfQUREUkVT UyAgICAgUGxhaW5UZXh0QWRkcmVzczsNCj4gPiAtfSBNQVBfSU5GTzsNCj4gPiArI2luY2x1ZGUg IklvTW11SW50ZXJuYWwuaCINCj4gPg0KPiA+ICAgLy8NCj4gPiAgIC8vIExpc3Qgb2YgdGhlIE1B UF9JTkZPIHN0cnVjdHVyZXMgdGhhdCBoYXZlIGJlZW4gc2V0IHVwIGJ5DQo+IElvTW11TWFwKCkg YW5kIG5vdA0KPiA+IEBAIC0zNSw3ICsyNCwxMCBAQCB0eXBlZGVmIHN0cnVjdCB7DQo+ID4gICAv Lw0KPiA+ICAgU1RBVElDIExJU1RfRU5UUlkgIG1NYXBJbmZvcyA9IElOSVRJQUxJWkVfTElTVF9I RUFEX1ZBUklBQkxFDQo+IChtTWFwSW5mb3MpOw0KPiA+DQo+ID4gLSNkZWZpbmUgQ09NTU9OX0JV RkZFUl9TSUcgIFNJR05BVFVSRV82NCAoJ0MnLCAnTScsICdOJywgJ0InLCAnVScsICdGJywNCj4g J0YnLCAnUicpDQo+ID4gKy8vDQo+ID4gKy8vIEluZGljYXRlIGlmIHRoZSBmZWF0dXJlIG9mIHJl c2VydmVkIG1lbW9yeSBpcyBzdXBwb3J0ZWQgaW4gRE1BDQo+IG9wZXJhdGlvbi4NCj4gPiArLy8N Cj4gPiArQk9PTEVBTiAgbVJlc2VydmVkU2hhcmVkTWVtU3VwcG9ydGVkID0gRkFMU0U7DQo+ID4N Cj4gPiAgIC8vDQo+ID4gICAvLyBBU0NJSSBuYW1lcyBmb3IgRURLSUlfSU9NTVVfT1BFUkFUSU9O IGNvbnN0YW50cywgZm9yIGRlYnVnDQo+IGxvZ2dpbmcuDQo+ID4gQEAgLTUwLDMwICs0Miw2IEBA DQo+IG1CdXNNYXN0ZXJPcGVyYXRpb25OYW1lW0Vka2lpSW9NbXVPcGVyYXRpb25NYXhpbXVtXSA9 IHsNCj4gPiAgICAgIkNvbW1vbkJ1ZmZlcjY0Ig0KPiA+ICAgfTsNCj4gPg0KPiA+IC0vLw0KPiA+ IC0vLyBUaGUgZm9sbG93aW5nIHN0cnVjdHVyZSBlbmFibGVzIE1hcCgpIGFuZCBVbm1hcCgpIHRv IHBlcmZvcm0gaW4tDQo+IHBsYWNlDQo+ID4gLS8vIGRlY3J5cHRpb24gYW5kIGVuY3J5cHRpb24s IHJlc3BlY3RpdmVseSwgZm9yDQo+IEJ1c01hc3RlckNvbW1vbkJ1ZmZlcls2NF0NCj4gPiAtLy8g b3BlcmF0aW9ucywgd2l0aG91dCBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uIG9yIHJlbGVhc2Uu DQo+ID4gLS8vDQo+ID4gLS8vIEJvdGggQ09NTU9OX0JVRkZFUl9IRUFERVIgYW5kDQo+IENPTU1P Tl9CVUZGRVJfSEVBREVSLlN0YXNoQnVmZmVyIGFyZSBhbGxvY2F0ZWQNCj4gPiAtLy8gYnkgQWxs b2NhdGVCdWZmZXIoKSBhbmQgcmVsZWFzZWQgYnkgRnJlZUJ1ZmZlcigpLg0KPiA+IC0vLw0KPiA+ IC0jcHJhZ21hIHBhY2sgKDEpDQo+ID4gLXR5cGVkZWYgc3RydWN0IHsNCj4gPiAtICBVSU5UNjQg ICAgU2lnbmF0dXJlOw0KPiA+IC0NCj4gPiAtICAvLw0KPiA+IC0gIC8vIEFsd2F5cyBhbGxvY2F0 ZWQgZnJvbSBFZmlCb290U2VydmljZXNEYXRhIHR5cGUgbWVtb3J5LCBhbmQgYWx3YXlzDQo+ID4g LSAgLy8gZW5jcnlwdGVkLg0KPiA+IC0gIC8vDQo+ID4gLSAgVk9JRCAgICAgICpTdGFzaEJ1ZmZl cjsNCj4gPiAtDQo+ID4gLSAgLy8NCj4gPiAtICAvLyBGb2xsb3dlZCBieSB0aGUgYWN0dWFsIGNv bW1vbiBidWZmZXIsIHN0YXJ0aW5nIGF0IHRoZSBuZXh0IHBhZ2UuDQo+ID4gLSAgLy8NCj4gPiAt fSBDT01NT05fQlVGRkVSX0hFQURFUjsNCj4gPiAtI3ByYWdtYSBwYWNrICgpDQo+ID4gLQ0KPiA+ ICAgLyoqDQo+ID4gICAgIFByb3ZpZGVzIHRoZSBjb250cm9sbGVyLXNwZWNpZmljIGFkZHJlc3Nl cyByZXF1aXJlZCB0byBhY2Nlc3Mgc3lzdGVtDQo+IG1lbW9yeQ0KPiA+ICAgICBmcm9tIGEgRE1B IGJ1cyBtYXN0ZXIuIE9uIFNFVi9URFggZ3Vlc3QsIHRoZSBETUEgb3BlcmF0aW9ucyBtdXN0DQo+ IGJlIHBlcmZvcm1lZCBvbg0KPiA+IEBAIC0xMzksNiArMTA3LDggQEAgSW9NbXVNYXAgKA0KPiA+ ICAgICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gICAgIH0NCj4gPg0KPiA+ ICsgIFN0YXR1cyA9IEVGSV9TVUNDRVNTOw0KPiA+ICsNCj4gPiAgICAgLy8NCj4gPiAgICAgLy8g QWxsb2NhdGUgYSBNQVBfSU5GTyBzdHJ1Y3R1cmUgdG8gcmVtZW1iZXIgdGhlIG1hcHBpbmcgd2hl bg0KPiBVbm1hcCgpIGlzDQo+ID4gICAgIC8vIGNhbGxlZCBsYXRlci4NCj4gPiBAQCAtMTUzLDEx ICsxMjMsMTIgQEAgSW9NbXVNYXAgKA0KPiA+ICAgICAvLyBJbml0aWFsaXplIHRoZSBNQVBfSU5G TyBzdHJ1Y3R1cmUsIGV4Y2VwdCB0aGUgUGxhaW5UZXh0QWRkcmVzcyBmaWVsZA0KPiA+ICAgICAv Lw0KPiA+ICAgICBaZXJvTWVtICgmTWFwSW5mby0+TGluaywgc2l6ZW9mIE1hcEluZm8tPkxpbmsp Ow0KPiA+IC0gIE1hcEluZm8tPlNpZ25hdHVyZSAgICAgID0gTUFQX0lORk9fU0lHOw0KPiA+IC0g IE1hcEluZm8tPk9wZXJhdGlvbiAgICAgID0gT3BlcmF0aW9uOw0KPiA+IC0gIE1hcEluZm8tPk51 bWJlck9mQnl0ZXMgID0gKk51bWJlck9mQnl0ZXM7DQo+ID4gLSAgTWFwSW5mby0+TnVtYmVyT2ZQ YWdlcyAgPSBFRklfU0laRV9UT19QQUdFUyAoTWFwSW5mby0NCj4gPk51bWJlck9mQnl0ZXMpOw0K PiA+IC0gIE1hcEluZm8tPkNyeXB0ZWRBZGRyZXNzID0gKFVJTlROKUhvc3RBZGRyZXNzOw0KPiA+ ICsgIE1hcEluZm8tPlNpZ25hdHVyZSAgICAgICAgID0gTUFQX0lORk9fU0lHOw0KPiA+ICsgIE1h cEluZm8tPk9wZXJhdGlvbiAgICAgICAgID0gT3BlcmF0aW9uOw0KPiA+ICsgIE1hcEluZm8tPk51 bWJlck9mQnl0ZXMgICAgID0gKk51bWJlck9mQnl0ZXM7DQo+ID4gKyAgTWFwSW5mby0+TnVtYmVy T2ZQYWdlcyAgICAgPSBFRklfU0laRV9UT19QQUdFUyAoTWFwSW5mby0NCj4gPk51bWJlck9mQnl0 ZXMpOw0KPiA+ICsgIE1hcEluZm8tPkNyeXB0ZWRBZGRyZXNzICAgID0gKFVJTlROKUhvc3RBZGRy ZXNzOw0KPiA+ICsgIE1hcEluZm8tPlJlc2VydmVkTWVtQml0bWFwID0gMDsNCj4gPg0KPiA+ICAg ICAvLw0KPiA+ICAgICAvLyBJbiB0aGUgc3dpdGNoIHN0YXRlbWVudCBiZWxvdywgd2UgcG9pbnQg Ik1hcEluZm8tDQo+ID5QbGFpblRleHRBZGRyZXNzIiB0byB0aGUNCj4gPiBAQCAtMTg1LDEyICsx NTYsMTEgQEAgSW9NbXVNYXAgKA0KPiA+ICAgICAgICAgLy8NCj4gPiAgICAgICAgIC8vIEFsbG9j YXRlIHRoZSBpbXBsaWNpdCBwbGFpbnRleHQgYm91bmNlIGJ1ZmZlci4NCj4gPiAgICAgICAgIC8v DQo+ID4gLSAgICAgIFN0YXR1cyA9IGdCUy0+QWxsb2NhdGVQYWdlcyAoDQo+ID4gLSAgICAgICAg ICAgICAgICAgICAgICBBbGxvY2F0ZVR5cGUsDQo+ID4gLSAgICAgICAgICAgICAgICAgICAgICBF ZmlCb290U2VydmljZXNEYXRhLA0KPiA+IC0gICAgICAgICAgICAgICAgICAgICAgTWFwSW5mby0+ TnVtYmVyT2ZQYWdlcywNCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICZNYXBJbmZvLT5QbGFp blRleHRBZGRyZXNzDQo+ID4gLSAgICAgICAgICAgICAgICAgICAgICApOw0KPiA+ICsgICAgICBT dGF0dXMgPSBJb01tdUFsbG9jYXRlQm91bmNlQnVmZmVyICgNCj4gPiArICAgICAgICAgICAgICAg ICBBbGxvY2F0ZVR5cGUsDQo+ID4gKyAgICAgICAgICAgICAgICAgRWZpQm9vdFNlcnZpY2VzRGF0 YSwNCj4gPiArICAgICAgICAgICAgICAgICBNYXBJbmZvDQo+ID4gKyAgICAgICAgICAgICAgICAg KTsNCj4gPiAgICAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAgICAgICAgICAg Z290byBGcmVlTWFwSW5mbzsNCj4gPiAgICAgICAgIH0NCj4gPiBAQCAtMjQxLDcgKzIxMSw4IEBA IElvTW11TWFwICgNCj4gPiAgICAgICAgIC8vIFBvaW50ICJEZWNyeXB0aW9uU291cmNlIiB0byB0 aGUgc3Rhc2ggYnVmZmVyIHNvIHRoYXQgd2UgZGVjcnlwdA0KPiA+ICAgICAgICAgLy8gaXQgdG8g dGhlIG9yaWdpbmFsIGxvY2F0aW9uLCBhZnRlciB0aGUgc3dpdGNoIHN0YXRlbWVudC4NCj4gPiAg ICAgICAgIC8vDQo+ID4gLSAgICAgIERlY3J5cHRpb25Tb3VyY2UgPSBDb21tb25CdWZmZXJIZWFk ZXItPlN0YXNoQnVmZmVyOw0KPiA+ICsgICAgICBEZWNyeXB0aW9uU291cmNlICAgICAgICAgICA9 IENvbW1vbkJ1ZmZlckhlYWRlci0+U3Rhc2hCdWZmZXI7DQo+ID4gKyAgICAgIE1hcEluZm8tPlJl c2VydmVkTWVtQml0bWFwID0gQ29tbW9uQnVmZmVySGVhZGVyLQ0KPiA+UmVzZXJ2ZWRNZW1CaXRt YXA7DQo+ID4gICAgICAgICBicmVhazsNCj4gPg0KPiA+ICAgICAgIGRlZmF1bHQ6DQo+ID4gQEAg LTI2NCwxMiArMjM1LDE2IEBAIElvTW11TWFwICgNCj4gPiAgICAgfSBlbHNlIGlmIChDQ19HVUVT VF9JU19URFggKFBjZEdldDY0DQo+IChQY2RDb25maWRlbnRpYWxDb21wdXRpbmdHdWVzdEF0dHIp KSkgew0KPiA+ICAgICAgIC8vDQo+ID4gICAgICAgLy8gU2V0IHRoZSBtZW1vcnkgc2hhcmVkIGJp dC4NCj4gPiArICAgIC8vIElmIE1hcEluZm8tPlJlc2VydmVkTWVtQml0bWFwIGlzIDAsIGl0IG1l YW5zIHRoZSBib3VuY2UgYnVmZmVyDQo+IGlzIG5vdCBhbGxvY2F0ZWQNCj4gPiArICAgIC8vIGZy b20gdGhlIHByZS1hbGxvY2F0ZWQgc2hhcmVkIG1lbW9yeSwgc28gaXQgbXVzdCBiZSBjb252ZXJ0 ZWQgdG8NCj4gc2hhcmVkIG1lbW9yeSBoZXJlLg0KPiA+ICAgICAgIC8vDQo+ID4gLSAgICBTdGF0 dXMgPSBNZW1FbmNyeXB0VGR4U2V0UGFnZVNoYXJlZEJpdCAoDQo+ID4gLSAgICAgICAgICAgICAg IDAsDQo+ID4gLSAgICAgICAgICAgICAgIE1hcEluZm8tPlBsYWluVGV4dEFkZHJlc3MsDQo+ID4g LSAgICAgICAgICAgICAgIE1hcEluZm8tPk51bWJlck9mUGFnZXMNCj4gPiAtICAgICAgICAgICAg ICAgKTsNCj4gPiArICAgIGlmIChNYXBJbmZvLT5SZXNlcnZlZE1lbUJpdG1hcCA9PSAwKSB7DQo+ ID4gKyAgICAgIFN0YXR1cyA9IE1lbUVuY3J5cHRUZHhTZXRQYWdlU2hhcmVkQml0ICgNCj4gPiAr ICAgICAgICAgICAgICAgICAwLA0KPiA+ICsgICAgICAgICAgICAgICAgIE1hcEluZm8tPlBsYWlu VGV4dEFkZHJlc3MsDQo+ID4gKyAgICAgICAgICAgICAgICAgTWFwSW5mby0+TnVtYmVyT2ZQYWdl cw0KPiA+ICsgICAgICAgICAgICAgICAgICk7DQo+ID4gKyAgICB9DQo+ID4gICAgIH0gZWxzZSB7 DQo+ID4gICAgICAgQVNTRVJUIChGQUxTRSk7DQo+ID4gICAgIH0NCj4gPiBAQCAtMzExLDEyICsy ODYsMTMgQEAgSW9NbXVNYXAgKA0KPiA+DQo+ID4gICAgIERFQlVHICgoDQo+ID4gICAgICAgREVC VUdfVkVSQk9TRSwNCj4gPiAtICAgICIlYTogTWFwcGluZz0weCVwIERldmljZShQbGFpblRleHQp PTB4JUx4IENyeXB0ZWQ9MHglTHgNCj4gUGFnZXM9MHglTHhcbiIsDQo+ID4gKyAgICAiJWE6IE1h cHBpbmc9MHglcCBEZXZpY2UoUGxhaW5UZXh0KT0weCVMeCBDcnlwdGVkPTB4JUx4DQo+IFBhZ2Vz PTB4JUx4LCBSZXNlcnZlZE1lbUJpdG1hcD0weCVMeFxuIiwNCj4gPiAgICAgICBfX0ZVTkNUSU9O X18sDQo+ID4gICAgICAgTWFwSW5mbywNCj4gPiAgICAgICBNYXBJbmZvLT5QbGFpblRleHRBZGRy ZXNzLA0KPiA+ICAgICAgIE1hcEluZm8tPkNyeXB0ZWRBZGRyZXNzLA0KPiA+IC0gICAgKFVJTlQ2 NClNYXBJbmZvLT5OdW1iZXJPZlBhZ2VzDQo+ID4gKyAgICAoVUlOVDY0KU1hcEluZm8tPk51bWJl ck9mUGFnZXMsDQo+ID4gKyAgICBNYXBJbmZvLT5SZXNlcnZlZE1lbUJpdG1hcA0KPiA+ICAgICAg ICkpOw0KPiA+DQo+ID4gICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiBAQCAtNDM1LDExICs0 MTEsMTMgQEAgSW9NbXVVbm1hcFdvcmtlciAoDQo+ID4gICAgICAgLy8gUmVzdG9yZSB0aGUgbWVt b3J5IHNoYXJlZCBiaXQgbWFzayBvbiB0aGUgYXJlYSB3ZSB1c2VkIHRvIGhvbGQNCj4gdGhlDQo+ ID4gICAgICAgLy8gcGxhaW50ZXh0Lg0KPiA+ICAgICAgIC8vDQo+ID4gLSAgICBTdGF0dXMgPSBN ZW1FbmNyeXB0VGR4Q2xlYXJQYWdlU2hhcmVkQml0ICgNCj4gPiAtICAgICAgICAgICAgICAgMCwN Cj4gPiAtICAgICAgICAgICAgICAgTWFwSW5mby0+UGxhaW5UZXh0QWRkcmVzcywNCj4gPiAtICAg ICAgICAgICAgICAgTWFwSW5mby0+TnVtYmVyT2ZQYWdlcw0KPiA+IC0gICAgICAgICAgICAgICAp Ow0KPiA+ICsgICAgaWYgKE1hcEluZm8tPlJlc2VydmVkTWVtQml0bWFwID09IDApIHsNCj4gPiAr ICAgICAgU3RhdHVzID0gTWVtRW5jcnlwdFRkeENsZWFyUGFnZVNoYXJlZEJpdCAoDQo+ID4gKyAg ICAgICAgICAgICAgICAgMCwNCj4gPiArICAgICAgICAgICAgICAgICBNYXBJbmZvLT5QbGFpblRl eHRBZGRyZXNzLA0KPiA+ICsgICAgICAgICAgICAgICAgIE1hcEluZm8tPk51bWJlck9mUGFnZXMN Cj4gPiArICAgICAgICAgICAgICAgICApOw0KPiA+ICsgICAgfQ0KPiA+ICAgICB9IGVsc2Ugew0K PiA+ICAgICAgIEFTU0VSVCAoRkFMU0UpOw0KPiA+ICAgICB9DQo+ID4gQEAgLTQ3MCw4ICs0NDgs OSBAQCBJb01tdVVubWFwV29ya2VyICgNCj4gPiAgICAgICAgIChWT0lEICopKFVJTlROKU1hcElu Zm8tPlBsYWluVGV4dEFkZHJlc3MsDQo+ID4gICAgICAgICBFRklfUEFHRVNfVE9fU0laRSAoTWFw SW5mby0+TnVtYmVyT2ZQYWdlcykNCj4gPiAgICAgICAgICk7DQo+ID4gKw0KPiA+ICAgICAgIGlm ICghTWVtb3J5TWFwTG9ja2VkKSB7DQo+ID4gLSAgICAgIGdCUy0+RnJlZVBhZ2VzIChNYXBJbmZv LT5QbGFpblRleHRBZGRyZXNzLCBNYXBJbmZvLQ0KPiA+TnVtYmVyT2ZQYWdlcyk7DQo+ID4gKyAg ICAgIElvTW11RnJlZUJvdW5jZUJ1ZmZlciAoTWFwSW5mbyk7DQo+ID4gICAgICAgfQ0KPiA+ICAg ICB9DQo+ID4NCj4gPiBAQCAtNTUxLDYgKzUzMCw3IEBAIElvTW11QWxsb2NhdGVCdWZmZXIgKA0K PiA+ICAgICBWT0lEICAgICAgICAgICAgICAgICAgKlN0YXNoQnVmZmVyOw0KPiA+ICAgICBVSU5U TiAgICAgICAgICAgICAgICAgQ29tbW9uQnVmZmVyUGFnZXM7DQo+ID4gICAgIENPTU1PTl9CVUZG RVJfSEVBREVSICAqQ29tbW9uQnVmZmVySGVhZGVyOw0KPiA+ICsgIFVJTlQzMiAgICAgICAgICAg ICAgICBSZXNlcnZlZE1lbUJpdG1hcDsNCj4gPg0KPiA+ICAgICBERUJVRyAoKA0KPiA+ICAgICAg IERFQlVHX1ZFUkJPU0UsDQo+ID4gQEAgLTYyMCwxMiArNjAwLDEzIEBAIElvTW11QWxsb2NhdGVC dWZmZXIgKA0KPiA+ICAgICAgIFBoeXNpY2FsQWRkcmVzcyA9IFNJWkVfNEdCIC0gMTsNCj4gPiAg ICAgfQ0KPiA+DQo+ID4gLSAgU3RhdHVzID0gZ0JTLT5BbGxvY2F0ZVBhZ2VzICgNCj4gPiAtICAg ICAgICAgICAgICAgICAgQWxsb2NhdGVNYXhBZGRyZXNzLA0KPiA+IC0gICAgICAgICAgICAgICAg ICBNZW1vcnlUeXBlLA0KPiA+IC0gICAgICAgICAgICAgICAgICBDb21tb25CdWZmZXJQYWdlcywN Cj4gPiAtICAgICAgICAgICAgICAgICAgJlBoeXNpY2FsQWRkcmVzcw0KPiA+IC0gICAgICAgICAg ICAgICAgICApOw0KPiA+ICsgIFN0YXR1cyA9IElvTW11QWxsb2NhdGVDb21tb25CdWZmZXIgKA0K PiA+ICsgICAgICAgICAgICAgTWVtb3J5VHlwZSwNCj4gPiArICAgICAgICAgICAgIENvbW1vbkJ1 ZmZlclBhZ2VzLA0KPiA+ICsgICAgICAgICAgICAgJlBoeXNpY2FsQWRkcmVzcywNCj4gPiArICAg ICAgICAgICAgICZSZXNlcnZlZE1lbUJpdG1hcA0KPiA+ICsgICAgICAgICAgICAgKTsNCj4gPiAr DQo+ID4gICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAgICAgICBnb3RvIEZyZWVT dGFzaEJ1ZmZlcjsNCj4gPiAgICAgfQ0KPiA+IEBAIC02MzMsOCArNjE0LDkgQEAgSW9NbXVBbGxv Y2F0ZUJ1ZmZlciAoDQo+ID4gICAgIENvbW1vbkJ1ZmZlckhlYWRlciA9IChWT0lEICopKFVJTlRO KVBoeXNpY2FsQWRkcmVzczsNCj4gPiAgICAgUGh5c2ljYWxBZGRyZXNzICAgKz0gRUZJX1BBR0Vf U0laRTsNCj4gPg0KPiA+IC0gIENvbW1vbkJ1ZmZlckhlYWRlci0+U2lnbmF0dXJlICAgPSBDT01N T05fQlVGRkVSX1NJRzsNCj4gPiAtICBDb21tb25CdWZmZXJIZWFkZXItPlN0YXNoQnVmZmVyID0g U3Rhc2hCdWZmZXI7DQo+ID4gKyAgQ29tbW9uQnVmZmVySGVhZGVyLT5TaWduYXR1cmUgICAgICAg ICA9IENPTU1PTl9CVUZGRVJfU0lHOw0KPiA+ICsgIENvbW1vbkJ1ZmZlckhlYWRlci0+U3Rhc2hC dWZmZXIgICAgICAgPSBTdGFzaEJ1ZmZlcjsNCj4gPiArICBDb21tb25CdWZmZXJIZWFkZXItPlJl c2VydmVkTWVtQml0bWFwID0gUmVzZXJ2ZWRNZW1CaXRtYXA7DQo+ID4NCj4gPiAgICAgKkhvc3RB ZGRyZXNzID0gKFZPSUQgKikoVUlOVE4pUGh5c2ljYWxBZGRyZXNzOw0KPiA+DQo+ID4gQEAgLTcw Nyw3ICs2ODksNyBAQCBJb01tdUZyZWVCdWZmZXIgKA0KPiA+ICAgICAvLyBSZWxlYXNlIHRoZSBj b21tb24gYnVmZmVyIGl0c2VsZi4gVW5tYXAoKSBoYXMgcmUtZW5jcnlwdGVkIGl0IGluLQ0KPiBw bGFjZSwgc28NCj4gPiAgICAgLy8gbm8gbmVlZCB0byB6ZXJvIGl0Lg0KPiA+ICAgICAvLw0KPiA+ IC0gIHJldHVybiBnQlMtPkZyZWVQYWdlcyAoKFVJTlROKUNvbW1vbkJ1ZmZlckhlYWRlciwNCj4g Q29tbW9uQnVmZmVyUGFnZXMpOw0KPiA+ICsgIHJldHVybiBJb01tdUZyZWVDb21tb25CdWZmZXIg KENvbW1vbkJ1ZmZlckhlYWRlciwNCj4gQ29tbW9uQnVmZmVyUGFnZXMpOw0KPiA+ICAgfQ0KPiA+ DQo+ID4gICAvKioNCj4gPiBAQCAtODc4LDYgKzg2MCwxMSBAQCBJb01tdVVubWFwQWxsTWFwcGlu Z3MgKA0KPiA+ICAgICAgICAgVFJVRSAgICAgIC8vIE1lbW9yeU1hcExvY2tlZA0KPiA+ICAgICAg ICAgKTsNCj4gPiAgICAgfQ0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIFJlbGVhc2UgdGhl IHJlc2VydmVkIHNoYXJlZCBtZW1vcnkgYXMgd2VsbC4NCj4gPiArICAvLw0KPiA+ICsgIElvTW11 UmVsZWFzZVJlc2VydmVkU2hhcmVkTWVtIChUUlVFKTsNCj4gPiAgIH0NCj4gPg0KPiA+ICAgLyoq DQo+ID4gQEAgLTkzNiw2ICs5MjMsMTkgQEAgSW5zdGFsbElvTW11UHJvdG9jb2wgKA0KPiA+ICAg ICAgIGdvdG8gQ2xvc2VFeGl0Qm9vdEV2ZW50Ow0KPiA+ICAgICB9DQo+ID4NCj4gPiArICAvLw0K PiA+ICsgIC8vIEN1cnJlbnRseSBvbmx5IFRkeCBndWVzdCBzdXBwb3J0IFJlc2VydmVkIHNoYXJl ZCBtZW1vcnkgZm9yIERNQQ0KPiBvcGVyYXRpb24uDQo+ID4gKyAgLy8NCj4gPiArICBpZiAoQ0Nf R1VFU1RfSVNfVERYIChQY2RHZXQ2NCAoUGNkQ29uZmlkZW50aWFsQ29tcHV0aW5nR3Vlc3RBdHRy KSkpDQo+IHsNCj4gPiArICAgIG1SZXNlcnZlZFNoYXJlZE1lbVN1cHBvcnRlZCA9IFRSVUU7DQo+ ID4gKyAgICBTdGF0dXMgICAgICAgICAgICAgICAgICAgICAgPSBJb01tdUluaXRSZXNlcnZlZFNo YXJlZE1lbSAoKTsNCj4gPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAg ICAgbVJlc2VydmVkU2hhcmVkTWVtU3VwcG9ydGVkID0gRkFMU0U7DQo+ID4gKyAgICB9IGVsc2Ug ew0KPiA+ICsgICAgICBERUJVRyAoKERFQlVHX0lORk8sICIlYTogRmVhdHVyZSBvZiByZXNlcnZl ZCBtZW1vcnkgZm9yIERNQSBpcw0KPiBzdXBwb3J0ZWQuXG4iLCBfX0ZVTkNUSU9OX18pKTsNCj4g PiArICAgIH0NCj4gPiArICB9DQo+ID4gKw0KPiA+ICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ ID4NCj4gPiAgIENsb3NlRXhpdEJvb3RFdmVudDoNCj4gPiBkaWZmIC0tZ2l0IGEvT3ZtZlBrZy9J b01tdUR4ZS9Jb01tdUJ1ZmZlci5jDQo+IGIvT3ZtZlBrZy9Jb01tdUR4ZS9Jb01tdUJ1ZmZlci5j DQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjVhZGE4 ZTlkNTdiZA0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9Pdm1mUGtnL0lvTW11RHhlL0lv TW11QnVmZmVyLmMNCj4gPiBAQCAtMCwwICsxLDQyNSBAQA0KPiA+ICsvKiogQGZpbGUNCj4gPiAr DQo+ID4gKyAgQ29weXJpZ2h0IChjKSAyMDIyLCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0 cyByZXNlcnZlZC48QlI+DQo+ID4gKw0KPiA+ICsgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBC U0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArI2luY2x1ZGUgPExpYnJh cnkvQmFzZUxpYi5oPg0KPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9CYXNlTWVtb3J5TGliLmg+DQo+ ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+DQo+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5 L01lbW9yeUFsbG9jYXRpb25MaWIuaD4NCj4gPiArI2luY2x1ZGUgPExpYnJhcnkvTWVtRW5jcnlw dFRkeExpYi5oPg0KPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpQm9vdFNlcnZpY2VzVGFibGVM aWIuaD4NCj4gPiArI2luY2x1ZGUgIklvTW11SW50ZXJuYWwuaCINCj4gPiArDQo+ID4gK2V4dGVy biBCT09MRUFOICBtUmVzZXJ2ZWRTaGFyZWRNZW1TdXBwb3J0ZWQ7DQo+ID4gKw0KPiA+ICsjZGVm aW5lIFNJWkVfT0ZfTUVNX1JBTkdFKE1lbVJhbmdlKSAgKE1lbVJhbmdlLT5IZWFkZXJTaXplICsN Cj4gTWVtUmFuZ2UtPkRhdGFTaXplKQ0KPiA+ICsNCj4gPiArI2RlZmluZSBSRVNFUlZFRF9NRU1f QklUTUFQXzRLX01BU0sgICAgMHhmDQo+ID4gKyNkZWZpbmUgUkVTRVJWRURfTUVNX0JJVE1BUF8z MktfTUFTSyAgIDB4ZmYwDQo+ID4gKyNkZWZpbmUgUkVTRVJWRURfTUVNX0JJVE1BUF8xMjhLX01B U0sgIDB4MzAwMA0KPiA+ICsjZGVmaW5lIFJFU0VSVkVEX01FTV9CSVRNQVBfMU1fTUFTSyAgICAw eDQwMDAwDQo+ID4gKyNkZWZpbmUgUkVTRVJWRURfTUVNX0JJVE1BUF8yTV9NQVNLICAgIDB4MTgw MDAwDQo+ID4gKyNkZWZpbmUgUkVTRVJWRURfTUVNX0JJVE1BUF9NQVNLICAgICAgIDB4MWZmZmZm DQo+ID4gKw0KPiA+ICtTVEFUSUMgSU9NTVVfUkVTRVJWRURfTUVNX1JBTkdFICBtUmVzZXJ2ZWRN ZW1SYW5nZXNbXSA9IHsNCj4gPiArICB7IFJFU0VSVkVEX01FTV9CSVRNQVBfNEtfTUFTSywgICAw LCAgNCwgU0laRV80S0IsICAgU0laRV80S0IsIDAgfSwNCj4gPiArICB7IFJFU0VSVkVEX01FTV9C SVRNQVBfMzJLX01BU0ssICA0LCAgOCwgU0laRV8zMktCLCAgU0laRV80S0IsDQo+IDAgfSwNCj4g PiArICB7IFJFU0VSVkVEX01FTV9CSVRNQVBfMTI4S19NQVNLLCAxMiwgMiwgU0laRV8xMjhLQiwg U0laRV80S0IsDQo+IDAgfSwNCj4gPiArICB7IFJFU0VSVkVEX01FTV9CSVRNQVBfMU1fTUFTSywg ICAxNCwgMSwgU0laRV8xTUIsICAgU0laRV80S0IsDQo+IDAgfSwNCj4gPiArICB7IFJFU0VSVkVE X01FTV9CSVRNQVBfMk1fTUFTSywgICAxNSwgMiwgU0laRV8yTUIsICAgU0laRV80S0IsDQo+IDAg fSwNCj4gPiArfTsNCj4gPiArDQo+ID4gKy8vDQo+ID4gKy8vIEJpdG1hcCBvZiB0aGUgYWxsb2Nh dGlvbiBvZiByZXNlcnZlZCBtZW1vcnkuDQo+ID4gKy8vDQo+ID4gK1NUQVRJQyBVSU5UMzIgIG1S ZXNlcnZlZE1lbUJpdG1hcCA9IDA7DQo+ID4gKw0KPiA+ICsvLw0KPiA+ICsvLyBTdGFydCBhZGRy ZXNzIG9mIHRoZSByZXNlcnZlZCBtZW1vcnkgcmVnaW9uLg0KPiA+ICsvLw0KPiA+ICtTVEFUSUMg RUZJX1BIWVNJQ0FMX0FERFJFU1MgIG1SZXNlcnZlZFNoYXJlZE1lbUFkZHJlc3MgPSAwOw0KPiA+ ICsNCj4gPiArLy8NCj4gPiArLy8gVG90YWwgc2l6ZSBvZiB0aGUgcmVzZXJ2ZWQgbWVtb3J5IHJl Z2lvbi4NCj4gPiArLy8NCj4gPiArU1RBVElDIFVJTlQzMiAgbVJlc2VydmVkU2hhcmVkTWVtU2l6 ZSA9IDA7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogQ2FsY3VsYXRlIHRoZSBzaXplIG9mIHJl c2VydmVkIG1lbW9yeS4NCj4gPiArICoNCj4gPiArICogQHJldHZhbCBVSU5UMzIgICBTaXplIG9m IHRoZSByZXNlcnZlZCBtZW1vcnkNCj4gPiArICovDQo+ID4gK1NUQVRJQw0KPiA+ICtVSU5UMzIN Cj4gPiArQ2FsY3VhdGVSZXNlcnZlZE1lbVNpemUgKA0KPiA+ICsgIFZPSUQNCj4gPiArICApDQo+ ID4gK3sNCj4gPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiA+ICsgIElP TU1VX1JFU0VSVkVEX01FTV9SQU5HRSAgKk1lbVJhbmdlOw0KPiA+ICsNCj4gPiArICBpZiAobVJl c2VydmVkU2hhcmVkTWVtU2l6ZSAhPSAwKSB7DQo+ID4gKyAgICByZXR1cm4gbVJlc2VydmVkU2hh cmVkTWVtU2l6ZTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRl eCA8IEFSUkFZX1NJWkUgKG1SZXNlcnZlZE1lbVJhbmdlcyk7IEluZGV4KyspIHsNCj4gPiArICAg IE1lbVJhbmdlICAgICAgICAgICAgICAgID0gJm1SZXNlcnZlZE1lbVJhbmdlc1tJbmRleF07DQo+ ID4gKyAgICBtUmVzZXJ2ZWRTaGFyZWRNZW1TaXplICs9IChTSVpFX09GX01FTV9SQU5HRSAoTWVt UmFuZ2UpICoNCj4gTWVtUmFuZ2UtPlNsb3RzKTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIHJl dHVybiBtUmVzZXJ2ZWRTaGFyZWRNZW1TaXplOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4g PiArICogQWxsb2NhdGUgYSBtZW1vcnkgcmVnaW9uIGFuZCBjb252ZXJ0IGl0IHRvIGJlIHNoYXJl ZC4gVGhpcyBtZW1vcnkNCj4gcmVnaW9uIHdpbGwgYmUNCj4gPiArICogdXNlZCBpbiB0aGUgRE1B IG9wZXJhdGlvbi4NCj4gPiArICoNCj4gPiArICogVGhlIHByZS1hbGxvYyBtZW1vcnkgY29udGFp bnMgcGllY2VzIG9mIG1lbW9yeSByZWdpb25zIHdpdGgNCj4gZGlmZmVyZW50IHNpemUuIFRoZQ0K PiA+ICsgKiBhbGxvY2F0aW9uIG9mIHRoZSBzaGFyZWQgbWVtb3J5IHJlZ2lvbnMgYXJlIGluZGlj YXRlZCBieSBhIDMyLWJpdA0KPiBiaXRtYXAgKG1SZXNlcnZlZE1lbUJpdG1hcCkuDQo+ID4gKyAq DQo+ID4gKyAqIFRoZSBtZW1vcnkgcmVnaW9ucyBhcmUgY29uc3VtZWQgYnkgSW9NbXVBbGxvY2F0 ZUJ1ZmZlciAoaW4gd2hpY2gNCj4gQ29tbW9uQnVmZmVyIGlzIGFsbG9jYXRlZCkgYW5kDQo+ID4g KyAqIElvTW11TWFwIChpbiB3aGljaCBib3VuY2UgYnVmZmVyIGlzIGFsbG9jYXRlZCkuDQo+ID4g KyAqDQo+ID4gKyAqIFRoZSBDb21tb25CdWZmZXIgY29udGFpbnMgMiBwYXJ0cywgb25lIHBhZ2Ug Zm9yDQo+IENvbW1vbkJ1ZmZlckhlYWRlciB3aGljaCBpcyBwcml2YXRlIG1lbW9yeSwNCj4gPiAr ICogdGhlIG90aGVyIHBhcnQgaXMgc2hhcmVkIG1lbW9yeS4gU28gdGhlIGxheW91dCBvZiBhIHBp ZWNlIG9mIG1lbW9yeQ0KPiByZWdpb24gYWZ0ZXIgaW5pdGlhbGl6YXRpb24NCj4gPiArICogbG9v a3MgbGlrZToNCj4gPiArICoNCj4gPiArICogICAgIHwtLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLXwNCj4gPiArICogICAgIHwgSGVhZGVyICAgICB8ICAgIERhdGEgICAg ICAgICAgICAgICAgICAgIHwgIDwtLSBhIHBpZWNlIG9mIHByZS1hbGxvYyBtZW1vcnkNCj4gcmVn aW9uDQo+ID4gKyAqICAgICB8IDRrLCBwcml2YXRlfCA0ay8zMmsvMTI4ay9ldGMsIHNoYXJlZCAg ICB8DQo+ID4gKyAqICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS18DQo+ID4gKyAqDQo+ID4gKyAqIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICBTdWNjZXNzZnVs bHkgaW5pdGlhbGl6ZSB0aGUgcmVzZXJ2ZWQgbWVtb3J5Lg0KPiA+ICsgKiBAcmV0dmFsIEVGSV9V TlNVUFBPUlRFRCAgVGhpcyBmZWF0dXJlIGlzIG5vdCBzdXBwb3J0ZWQuDQo+ID4gKyAqLw0KPiA+ ICtFRklfU1RBVFVTDQo+ID4gK0lvTW11SW5pdFJlc2VydmVkU2hhcmVkTWVtICgNCj4gPiArICBW T0lEDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICBT dGF0dXM7DQo+ID4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBJbmRleDEsIEluZGV4MjsN Cj4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIFRvdGFsUGFnZXM7DQo+ID4gKyAgSU9N TVVfUkVTRVJWRURfTUVNX1JBTkdFICAqTWVtUmFuZ2U7DQo+ID4gKyAgRUZJX1BIWVNJQ0FMX0FE RFJFU1MgICAgICBQaHlzaWNhbEFkZHJlc3M7DQo+ID4gKw0KPiA+ICsgIGlmICghbVJlc2VydmVk U2hhcmVkTWVtU3VwcG9ydGVkKSB7DQo+ID4gKyAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0K PiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgVG90YWxQYWdlcyA9IEVGSV9TSVpFX1RPX1BBR0VTIChD YWxjdWF0ZVJlc2VydmVkTWVtU2l6ZSAoKSk7DQo+ID4gKw0KPiA+ICsgIFBoeXNpY2FsQWRkcmVz cyA9IChFRklfUEhZU0lDQUxfQUREUkVTUykoVUlOVE4pQWxsb2NhdGVQYWdlcw0KPiAoVG90YWxQ YWdlcyk7DQo+ID4gKyAgREVCVUcgKCgNCj4gPiArICAgIERFQlVHX1ZFUkJPU0UsDQo+ID4gKyAg ICAiJWE6IFJlc2VydmVkTWVtICglZCBwYWdlcykgYWRkcmVzcyA9IDB4JWxseFxuIiwNCj4gPiAr ICAgIF9fRlVOQ1RJT05fXywNCj4gPiArICAgIFRvdGFsUGFnZXMsDQo+ID4gKyAgICBQaHlzaWNh bEFkZHJlc3MNCj4gPiArICAgICkpOw0KPiA+ICsNCj4gPiArICBtUmVzZXJ2ZWRNZW1CaXRtYXAg ICAgICAgID0gMDsNCj4gPiArICBtUmVzZXJ2ZWRTaGFyZWRNZW1BZGRyZXNzID0gUGh5c2ljYWxB ZGRyZXNzOw0KPiA+ICsNCj4gPiArICBmb3IgKEluZGV4MSA9IDA7IEluZGV4MSA8IEFSUkFZX1NJ WkUgKG1SZXNlcnZlZE1lbVJhbmdlcyk7DQo+IEluZGV4MSsrKSB7DQo+ID4gKyAgICBNZW1SYW5n ZSAgICAgICAgICAgICAgICAgICAgICAgICA9ICZtUmVzZXJ2ZWRNZW1SYW5nZXNbSW5kZXgxXTsN Cj4gPiArICAgIE1lbVJhbmdlLT5TdGFydEFkZHJlc3NPZk1lbVJhbmdlID0gUGh5c2ljYWxBZGRy ZXNzOw0KPiA+ICsNCj4gPiArICAgIGZvciAoSW5kZXgyID0gMDsgSW5kZXgyIDwgTWVtUmFuZ2Ut PlNsb3RzOyBJbmRleDIrKykgew0KPiA+ICsgICAgICBTdGF0dXMgPSBNZW1FbmNyeXB0VGR4U2V0 UGFnZVNoYXJlZEJpdCAoDQo+ID4gKyAgICAgICAgICAgICAgICAgMCwNCj4gPiArICAgICAgICAg ICAgICAgICAoVUlOVDY0KShVSU5UTikoTWVtUmFuZ2UtPlN0YXJ0QWRkcmVzc09mTWVtUmFuZ2Ug Kw0KPiBJbmRleDIgKiBTSVpFX09GX01FTV9SQU5HRSAoTWVtUmFuZ2UpICsgTWVtUmFuZ2UtPkhl YWRlclNpemUpLA0KPiA+ICsgICAgICAgICAgICAgICAgIEVGSV9TSVpFX1RPX1BBR0VTIChNZW1S YW5nZS0+RGF0YVNpemUpDQo+ID4gKyAgICAgICAgICAgICAgICAgKTsNCj4gPiArICAgICAgQVNT RVJUICghRUZJX0VSUk9SIChTdGF0dXMpKTsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBQ aHlzaWNhbEFkZHJlc3MgKz0gKE1lbVJhbmdlLT5TbG90cyAqIFNJWkVfT0ZfTUVNX1JBTkdFDQo+ IChNZW1SYW5nZSkpOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNT Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogUmVsZWFzZSB0aGUgcHJlLWFsbG9j IHNoYXJlZCBtZW1vcnkuDQo+ID4gKyAqDQo+ID4gKyAqIEByZXR2YWwgRUZJX1NVQ0NFU1MgIFN1 Y2Nlc3NmdWxseSByZWxlYXNlIHRoZSBzaGFyZWQgbWVtb3J5DQo+ID4gKyAqLw0KPiA+ICtFRklf U1RBVFVTDQo+ID4gK0lvTW11UmVsZWFzZVJlc2VydmVkU2hhcmVkTWVtICgNCj4gPiArICBCT09M RUFOICBNZW1vcnlNYXBMb2NrZWQNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfU1RBVFVT ICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAg IEluZGV4MSwgSW5kZXgyOw0KPiA+ICsgIElPTU1VX1JFU0VSVkVEX01FTV9SQU5HRSAgKk1lbVJh bmdlOw0KPiA+ICsNCj4gPiArICBmb3IgKEluZGV4MSA9IDA7IEluZGV4MSA8IEFSUkFZX1NJWkUg KG1SZXNlcnZlZE1lbVJhbmdlcyk7DQo+IEluZGV4MSsrKSB7DQo+ID4gKyAgICBNZW1SYW5nZSA9 ICZtUmVzZXJ2ZWRNZW1SYW5nZXNbSW5kZXgxXTsNCj4gPiArICAgIGZvciAoSW5kZXgyID0gMDsg SW5kZXgyIDwgTWVtUmFuZ2UtPlNsb3RzOyBJbmRleDIrKykgew0KPiA+ICsgICAgICBTdGF0dXMg PSBNZW1FbmNyeXB0VGR4Q2xlYXJQYWdlU2hhcmVkQml0ICgNCj4gPiArICAgICAgICAgICAgICAg ICAwLA0KPiA+ICsgICAgICAgICAgICAgICAgIChVSU5UNjQpKFVJTlROKShNZW1SYW5nZS0+U3Rh cnRBZGRyZXNzT2ZNZW1SYW5nZSArDQo+IEluZGV4MiAqIFNJWkVfT0ZfTUVNX1JBTkdFIChNZW1S YW5nZSkgKyBNZW1SYW5nZS0+SGVhZGVyU2l6ZSksDQo+ID4gKyAgICAgICAgICAgICAgICAgRUZJ X1NJWkVfVE9fUEFHRVMgKE1lbVJhbmdlLT5EYXRhU2l6ZSkNCj4gPiArICAgICAgICAgICAgICAg ICApOw0KPiA+ICsgICAgICBBU1NFUlQgKCFFRklfRVJST1IgKFN0YXR1cykpOw0KPiA+ICsgICAg fQ0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgaWYgKCFNZW1vcnlNYXBMb2NrZWQpIHsNCj4gPiAr ICAgIEZyZWVQYWdlcyAoKFZPSUQgKikoVUlOVE4pbVJlc2VydmVkU2hhcmVkTWVtQWRkcmVzcywN Cj4gRUZJX1NJWkVfVE9fUEFHRVMgKENhbGN1YXRlUmVzZXJ2ZWRNZW1TaXplICgpKSk7DQo+ID4g KyAgICBtUmVzZXJ2ZWRTaGFyZWRNZW1BZGRyZXNzID0gMDsNCj4gPiArICAgIG1SZXNlcnZlZE1l bUJpdG1hcCAgICAgICAgPSAwOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgcmV0dXJuIEVGSV9T VUNDRVNTOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogQWxsb2NhdGUgZnJvbSB0 aGUgcmVzZXJ2ZWQgbWVtb3J5IHBvb2wuDQo+ID4gKyAqIElmIHRoZSByZXNlcnZlZCBzaGFyZWQg bWVtb3J5IGlzIGV4YXVzdGVkIG9yIHRoZXJlIGlzIG5vIHN1aXRhbGJlIHNpemUsDQo+IGl0IHR1 cm5zDQo+ID4gKyAqIHRvIHRoZSBMZWdhY3lBbGxvY2F0ZUJ1ZmZlci4NCj4gPiArICoNCj4gPiAr ICogQHBhcmFtIFR5cGUgICAgICAgICAgICAgICAgQWxsb2NhdGUgdHlwZQ0KPiA+ICsgKiBAcGFy YW0gTWVtb3J5VHlwZSAgICAgICAgICBUaGUgbWVtb3J5IHR5cGUgdG8gYmUgYWxsb2NhdGVkDQo+ ID4gKyAqIEBwYXJhbSBQYWdlcyAgICAgICAgICAgICAgIFBhZ2VzIHRvIGJlIGFsbG9jYXRlZC4N Cj4gPiArICogQHBhcmFtIFJlc2VydmVkTWVtQml0bWFwICAgQml0bWFwIG9mIHRoZSBhbGxvY2F0 ZWQgbWVtb3J5DQo+IHJlZ2lvbg0KPiA+ICsgKiBAcGFyYW0gUGh5c2ljYWxBZGRyZXNzICAgICBQ b2ludGVyIHRvIHRoZSBkYXRhIHBhcnQgb2YgYWxsb2NhdGVkDQo+IG1lbW9yeSByZWdpb24NCj4g PiArICoNCj4gPiArICogQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgU3VjY2Vzc2Z1bGx5IGFs bG9jYXRlIHRoZSBidWZmZXINCj4gPiArICogQHJldHZhbCBPdGhlciAgICAgICAgICAgICAgQXMg dGhlIGVycm9yIGNvZGUgaW5kaWNhdGVzDQo+ID4gKyAqLw0KPiA+ICtTVEFUSUMNCj4gPiArRUZJ X1NUQVRVUw0KPiA+ICtJbnRlcm5hbEFsbG9jYXRlQnVmZmVyICgNCj4gPiArICBJTiAgRUZJX0FM TE9DQVRFX1RZUEUgICAgICAgIFR5cGUsDQo+ID4gKyAgSU4gIEVGSV9NRU1PUllfVFlQRSAgICAg ICAgICBNZW1vcnlUeXBlLA0KPiA+ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgUGFn ZXMsDQo+ID4gKyAgSU4gT1VUIFVJTlQzMiAgICAgICAgICAgICAgICAqUmVzZXJ2ZWRNZW1CaXRt YXAsDQo+ID4gKyAgSU4gT1VUIEVGSV9QSFlTSUNBTF9BRERSRVNTICAqUGh5c2ljYWxBZGRyZXNz DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBNZW1C aXRtYXA7DQo+ID4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gPiArICBJ T01NVV9SRVNFUlZFRF9NRU1fUkFOR0UgICpNZW1SYW5nZTsNCj4gPiArICBVSU5UTiAgICAgICAg ICAgICAgICAgICAgIFBhZ2VzT2ZMYXN0TWVtUmFuZ2U7DQo+ID4gKw0KPiA+ICsgICpSZXNlcnZl ZE1lbUJpdG1hcCA9IDA7DQo+ID4gKw0KPiA+ICsgIGlmIChQYWdlcyA9PSAwKSB7DQo+ID4gKyAg ICBBU1NFUlQgKEZBTFNFKTsNCj4gPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7 DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoIW1SZXNlcnZlZFNoYXJlZE1lbVN1cHBvcnRl ZCkgew0KPiA+ICsgICAgZ290byBMZWdhY3lBbGxvY2F0ZUJ1ZmZlcjsNCj4gPiArICB9DQo+ID4g Kw0KPiA+ICsgIGlmIChtUmVzZXJ2ZWRTaGFyZWRNZW1BZGRyZXNzID09IDApIHsNCj4gPiArICAg IGdvdG8gTGVnYWN5QWxsb2NhdGVCdWZmZXI7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBQYWdl c09mTGFzdE1lbVJhbmdlID0gMDsNCj4gPiArDQo+ID4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4 IDwgQVJSQVlfU0laRSAobVJlc2VydmVkTWVtUmFuZ2VzKTsgSW5kZXgrKykgew0KPiA+ICsgICAg aWYgKChQYWdlcyA+IFBhZ2VzT2ZMYXN0TWVtUmFuZ2UpICYmIChQYWdlcyA8PSBFRklfU0laRV9U T19QQUdFUw0KPiAobVJlc2VydmVkTWVtUmFuZ2VzW0luZGV4XS5EYXRhU2l6ZSkpKSB7DQo+ID4g KyAgICAgIGJyZWFrOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIFBhZ2VzT2ZMYXN0TWVt UmFuZ2UgPSBFRklfU0laRV9UT19QQUdFUw0KPiAobVJlc2VydmVkTWVtUmFuZ2VzW0luZGV4XS5E YXRhU2l6ZSk7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoSW5kZXggPT0gQVJSQVlfU0la RSAobVJlc2VydmVkTWVtUmFuZ2VzKSkgew0KPiA+ICsgICAgLy8gVGhlcmUgaXMgbm8gc3VpdGFi bGUgc2l6ZSBvZiByZXNlcnZlZCBtZW1vcnkuIFR1cm4gdG8gbGVnYWN5DQo+IGFsbG9jYXRlLg0K PiA+ICsgICAgZ290byBMZWdhY3lBbGxvY2F0ZUJ1ZmZlcjsNCj4gPiArICB9DQo+ID4gKw0KPiA+ ICsgIE1lbVJhbmdlID0gJm1SZXNlcnZlZE1lbVJhbmdlc1tJbmRleF07DQo+ID4gKw0KPiA+ICsg IGlmICgobVJlc2VydmVkTWVtQml0bWFwICYgTWVtUmFuZ2UtPkJpdG1hcE1hc2spID09DQo+IE1l bVJhbmdlLT5CaXRtYXBNYXNrKSB7DQo+ID4gKyAgICAvLyBUaGUgcmVzZXJ2ZWQgbWVtb3J5IGlz IGV4YXVzdGVkLiBUdXJuIHRvIGxlZ2FjeSBhbGxvY2F0ZS4NCj4gPiArICAgIGdvdG8gTGVnYWN5 QWxsb2NhdGVCdWZmZXI7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBNZW1CaXRtYXAgPSAobVJl c2VydmVkTWVtQml0bWFwICYgTWVtUmFuZ2UtPkJpdG1hcE1hc2spID4+DQo+IE1lbVJhbmdlLT5T aGlmdDsNCj4gPiArDQo+ID4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgTWVtUmFuZ2UtPlNs b3RzOyBJbmRleCsrKSB7DQo+ID4gKyAgICBpZiAoKE1lbUJpdG1hcCAmIChVSU5UOCkoMTw8SW5k ZXgpKSA9PSAwKSB7DQo+ID4gKyAgICAgIGJyZWFrOw0KPiA+ICsgICAgfQ0KPiA+ICsgIH0NCj4g PiArDQo+ID4gKyAgQVNTRVJUIChJbmRleCAhPSBNZW1SYW5nZS0+U2xvdHMpOw0KPiA+ICsNCj4g PiArICAqUGh5c2ljYWxBZGRyZXNzICAgPSBNZW1SYW5nZS0+U3RhcnRBZGRyZXNzT2ZNZW1SYW5n ZSArIEluZGV4ICoNCj4gU0laRV9PRl9NRU1fUkFOR0UgKE1lbVJhbmdlKSArIE1lbVJhbmdlLT5I ZWFkZXJTaXplOw0KPiA+ICsgICpSZXNlcnZlZE1lbUJpdG1hcCA9IChVSU5UMzIpKDEgPDwgKElu ZGV4ICsgTWVtUmFuZ2UtPlNoaWZ0KSk7DQo+ID4gKw0KPiA+ICsgIERFQlVHICgoDQo+ID4gKyAg ICBERUJVR19WRVJCT1NFLA0KPiA+ICsgICAgIiVhOiByYW5nZS1zaXplOiAlbHgsIHN0YXJ0LWFk ZHJlc3M9MHglbGx4LCBwYWdlcz0weCVsbHgsIGJpdHM9MHglbHgsDQo+IGJpdG1hcDogJWx4ID0+ ICVseFxuIiwNCj4gPiArICAgIF9fRlVOQ1RJT05fXywNCj4gPiArICAgIE1lbVJhbmdlLT5EYXRh U2l6ZSwNCj4gPiArICAgICpQaHlzaWNhbEFkZHJlc3MsDQo+ID4gKyAgICBQYWdlcywNCj4gPiAr ICAgICpSZXNlcnZlZE1lbUJpdG1hcCwNCj4gPiArICAgIG1SZXNlcnZlZE1lbUJpdG1hcCwNCj4g PiArICAgIG1SZXNlcnZlZE1lbUJpdG1hcCB8ICpSZXNlcnZlZE1lbUJpdG1hcA0KPiA+ICsgICAg KSk7DQo+ID4gKw0KPiA+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiArDQo+ID4gK0xlZ2Fj eUFsbG9jYXRlQnVmZmVyOg0KPiA+ICsNCj4gPiArICAqUmVzZXJ2ZWRNZW1CaXRtYXAgPSAwOw0K PiA+ICsgIHJldHVybiBnQlMtPkFsbG9jYXRlUGFnZXMgKFR5cGUsIE1lbW9yeVR5cGUsIFBhZ2Vz LCBQaHlzaWNhbEFkZHJlc3MpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogQWxs b2NhdGUgcmVzZXJ2ZWQgc2hhcmVkIG1lbW9yeSBmb3IgYm91bmNlIGJ1ZmZlci4NCj4gPiArICoN Cj4gPiArICogQHBhcmFtIFR5cGUgICAgICAgIEFsbG9jYXRlIHR5cGUNCj4gPiArICogQHBhcmFt IE1lbW9yeVR5cGUgIFRoZSBtZW1vcnkgdHlwZSB0byBiZSBhbGxvY2F0ZWQNCj4gPiArICogQHBh cmFtIE1hcEluZm8gICAgIFBvaW50ZXIgdG8gdGhlIE1BUF9JTkZPDQo+ID4gKyAqDQo+ID4gKyAq IEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgIFN1Y2Nlc3NmdWxseSBhbGxvY2F0ZSB0aGUgYm91 bmNlIGJ1ZmZlcg0KPiA+ICsgKiBAcmV0dmFsIE90aGVyICAgICAgICAgICAgICBBcyB0aGUgZXJy b3IgY29kZSBpbmRpY2F0ZXMNCj4gPiArDQo+ID4gKyAqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4g K0lvTW11QWxsb2NhdGVCb3VuY2VCdWZmZXIgKA0KPiA+ICsgIElOICAgICBFRklfQUxMT0NBVEVf VFlQRSAgVHlwZSwNCj4gPiArICBJTiAgICAgRUZJX01FTU9SWV9UWVBFICAgIE1lbW9yeVR5cGUs DQo+ID4gKyAgSU4gT1VUIE1BUF9JTkZPICAgICAgICAgICAqTWFwSW5mbw0KPiA+ICsgICkNCj4g PiArew0KPiA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPiArICBVSU5UMzIgICAgICBSZXNl cnZlZE1lbUJpdG1hcDsNCj4gPiArDQo+ID4gKyAgUmVzZXJ2ZWRNZW1CaXRtYXAgPSAwOw0KPiA+ ICsgIFN0YXR1cyAgICAgICAgICAgID0gSW50ZXJuYWxBbGxvY2F0ZUJ1ZmZlciAoDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgIFR5cGUsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg IE1lbW9yeVR5cGUsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIE1hcEluZm8tPk51bWJl ck9mUGFnZXMsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICZSZXNlcnZlZE1lbUJpdG1h cCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgJk1hcEluZm8tPlBsYWluVGV4dEFkZHJl c3MNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gPiArICBNYXBJbmZvLT5SZXNl cnZlZE1lbUJpdG1hcCA9IFJlc2VydmVkTWVtQml0bWFwOw0KPiA+ICsgIG1SZXNlcnZlZE1lbUJp dG1hcCAgICAgICAgfD0gUmVzZXJ2ZWRNZW1CaXRtYXA7DQo+ID4gKw0KPiA+ICsgIEFTU0VSVCAo U3RhdHVzID09IEVGSV9TVUNDRVNTKTsNCj4gPiArDQo+ID4gKyAgcmV0dXJuIFN0YXR1czsNCj4g PiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIEZyZWUgdGhlIGJvdW5jZSBidWZmZXIgYWxs b2NhdGVkIGluIElvTW11QWxsb2NhdGVCb3VuY2VCdWZmZXIuDQo+ID4gKyAqDQo+ID4gKyAqIEBw YXJhbSBNYXBJbmZvICAgICAgIFBvaW50ZXIgdG8gdGhlIE1BUF9JTkZPDQo+ID4gKyAqIEByZXR1 cm4gRUZJX1NVQ0NFU1MgIFN1Y2Nlc3NmdWxseSBmcmVlIHRoZSBib3VuY2UgYnVmZmVyLg0KPiA+ ICsgKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtJb01tdUZyZWVCb3VuY2VCdWZmZXIgKA0KPiA+ ICsgIElOIE9VVCAgICAgTUFQX0lORk8gICpNYXBJbmZvDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4g KyAgaWYgKE1hcEluZm8tPlJlc2VydmVkTWVtQml0bWFwID09IDApIHsNCj4gPiArICAgIGdCUy0+ RnJlZVBhZ2VzIChNYXBJbmZvLT5QbGFpblRleHRBZGRyZXNzLCBNYXBJbmZvLQ0KPiA+TnVtYmVy T2ZQYWdlcyk7DQo+ID4gKyAgfSBlbHNlIHsNCj4gPiArICAgIERFQlVHICgoDQo+ID4gKyAgICAg IERFQlVHX1ZFUkJPU0UsDQo+ID4gKyAgICAgICIlYTogUGxhaW5UZXh0QWRkcmVzcz0weCVMeCwg Yml0cz0weCVMeCwgYml0bWFwOiAlTHggPT4gJUx4XG4iLA0KPiA+ICsgICAgICBfX0ZVTkNUSU9O X18sDQo+ID4gKyAgICAgIE1hcEluZm8tPlBsYWluVGV4dEFkZHJlc3MsDQo+ID4gKyAgICAgIE1h cEluZm8tPlJlc2VydmVkTWVtQml0bWFwLA0KPiA+ICsgICAgICBtUmVzZXJ2ZWRNZW1CaXRtYXAs DQo+ID4gKyAgICAgIG1SZXNlcnZlZE1lbUJpdG1hcCAmICgoVUlOVDMyKSh+TWFwSW5mby0NCj4g PlJlc2VydmVkTWVtQml0bWFwKSkNCj4gPiArICAgICAgKSk7DQo+ID4gKyAgICBNYXBJbmZvLT5Q bGFpblRleHRBZGRyZXNzICA9IDA7DQo+ID4gKyAgICBtUmVzZXJ2ZWRNZW1CaXRtYXAgICAgICAg ICY9IChVSU5UMzIpKH5NYXBJbmZvLQ0KPiA+UmVzZXJ2ZWRNZW1CaXRtYXApOw0KPiA+ICsgICAg TWFwSW5mby0+UmVzZXJ2ZWRNZW1CaXRtYXAgPSAwOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAg cmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogQWxs b2NhdGUgQ29tbW9uQnVmZmVyIGZyb20gcHJlLWFsbG9jYXRlZCBzaGFyZWQgbWVtb3J5Lg0KPiA+ ICsgKg0KPiA+ICsgKiBAcGFyYW0gTWVtb3J5VHlwZSAgICAgICAgICBNZW1vcnkgdHlwZQ0KPiA+ ICsgKiBAcGFyYW0gQ29tbW9uQnVmZmVyUGFnZXMgICBQYWdlcyBvZiBDb21tb25CdWZmZXINCj4g PiArICogQHBhcmFtIFBoeXNpY2FsQWRkcmVzcyAgICAgQWxsb2NhdGVkIHBoeXNpY2FsIGFkZHJl c3MNCj4gPiArICogQHBhcmFtIFJlc2VydmVkTWVtQml0bWFwICAgQml0bWFwIHdoaWNoIGluZGlj YXRlcyB0aGUgYWxsb2NhdGlvbg0KPiBvZiByZXNlcnZlZCBtZW1vcnkNCj4gPiArICoNCj4gPiAr ICogQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgU3VjY2Vzc2Z1bGx5IGFsbG9jYXRlIHRoZSBj b21tb24gYnVmZmVyDQo+ID4gKyAqIEByZXR2YWwgT3RoZXIgICAgICAgICAgICAgIEFzIHRoZSBl cnJvciBjb2RlIGluZGljYXRlcw0KPiA+ICsgKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtJb01t dUFsbG9jYXRlQ29tbW9uQnVmZmVyICgNCj4gPiArICBJTiBFRklfTUVNT1JZX1RZUEUgICAgICAg IE1lbW9yeVR5cGUsDQo+ID4gKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICBDb21tb25CdWZm ZXJQYWdlcywNCj4gPiArICBPVVQgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICpQaHlzaWNhbEFkZHJl c3MsDQo+ID4gKyAgT1VUIFVJTlQzMiAgICAgICAgICAgICAgICAqUmVzZXJ2ZWRNZW1CaXRtYXAN Cj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ID4gKw0KPiA+ ICsgIFN0YXR1cyA9IEludGVybmFsQWxsb2NhdGVCdWZmZXIgKA0KPiA+ICsgICAgICAgICAgICAg QWxsb2NhdGVNYXhBZGRyZXNzLA0KPiA+ICsgICAgICAgICAgICAgTWVtb3J5VHlwZSwNCj4gPiAr ICAgICAgICAgICAgIENvbW1vbkJ1ZmZlclBhZ2VzLA0KPiA+ICsgICAgICAgICAgICAgUmVzZXJ2 ZWRNZW1CaXRtYXAsDQo+ID4gKyAgICAgICAgICAgICBQaHlzaWNhbEFkZHJlc3MNCj4gPiArICAg ICAgICAgICAgICk7DQo+ID4gKyAgQVNTRVJUIChTdGF0dXMgPT0gRUZJX1NVQ0NFU1MpOw0KPiA+ ICsNCj4gPiArICBtUmVzZXJ2ZWRNZW1CaXRtYXAgfD0gKlJlc2VydmVkTWVtQml0bWFwOw0KPiA+ ICsNCj4gPiArICBpZiAoKlJlc2VydmVkTWVtQml0bWFwICE9IDApIHsNCj4gPiArICAgICpQaHlz aWNhbEFkZHJlc3MgLT0gU0laRV80S0I7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICByZXR1cm4g U3RhdHVzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogRnJlZSBDb21tb25CdWZm ZXIgd2hpY2ggaXMgYWxsb2NhdGVkIGJ5DQo+IElvTW11QWxsb2NhdGVDb21tb25CdWZmZXIoKS4N Cj4gPiArICoNCj4gPiArICogQHBhcmFtIENvbW1vbkJ1ZmZlckhlYWRlciAgUG9pbnRlciB0byB0 aGUgQ29tbW9uQnVmZmVySGVhZGVyDQo+ID4gKyAqIEBwYXJhbSBDb21tb25CdWZmZXJQYWdlcyAg IFBhZ2VzIG9mIENvbW1vbkJ1ZmZlcg0KPiA+ICsgKg0KPiA+ICsgKiBAcmV0dmFsIEVGSV9TVUND RVNTICAgICAgICBTdWNjZXNzZnVsbHkgZnJlZSB0aGUgY29tbW9uIGJ1ZmZlcg0KPiA+ICsgKiBA cmV0dmFsIE90aGVyICAgICAgICAgICAgICBBcyB0aGUgZXJyb3IgY29kZSBpbmRpY2F0ZXMNCj4g PiArICovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArSW9NbXVGcmVlQ29tbW9uQnVmZmVyICgNCj4g PiArICBJTiBDT01NT05fQlVGRkVSX0hFQURFUiAgKkNvbW1vbkJ1ZmZlckhlYWRlciwNCj4gPiAr ICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgQ29tbW9uQnVmZmVyUGFnZXMNCj4gPiArICApDQo+ ID4gK3sNCj4gPiArICBpZiAoIW1SZXNlcnZlZFNoYXJlZE1lbVN1cHBvcnRlZCkgew0KPiA+ICsg ICAgZ290byBMZWdhY3lGcmVlQ29tbW9uQnVmZmVyOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAg aWYgKENvbW1vbkJ1ZmZlckhlYWRlci0+UmVzZXJ2ZWRNZW1CaXRtYXAgPT0gMCkgew0KPiA+ICsg ICAgZ290byBMZWdhY3lGcmVlQ29tbW9uQnVmZmVyOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAg REVCVUcgKCgNCj4gPiArICAgIERFQlVHX1ZFUkJPU0UsDQo+ID4gKyAgICAiJWE6IENvbW1vbkJ1 ZmZlcj0weCVMeCwgYml0cz0weCVMeCwgYml0bWFwOiAlTHggPT4gJUx4XG4iLA0KPiA+ICsgICAg X19GVU5DVElPTl9fLA0KPiA+ICsgICAgKFVJTlQ2NCkoVUlOVE4pQ29tbW9uQnVmZmVySGVhZGVy ICsgU0laRV80S0IsDQo+ID4gKyAgICBDb21tb25CdWZmZXJIZWFkZXItPlJlc2VydmVkTWVtQml0 bWFwLA0KPiA+ICsgICAgbVJlc2VydmVkTWVtQml0bWFwLA0KPiA+ICsgICAgbVJlc2VydmVkTWVt Qml0bWFwICYgKChVSU5UMzIpKH5Db21tb25CdWZmZXJIZWFkZXItDQo+ID5SZXNlcnZlZE1lbUJp dG1hcCkpDQo+ID4gKyAgICApKTsNCj4gPiArDQo+ID4gKyAgbVJlc2VydmVkTWVtQml0bWFwICY9 IChVSU5UMzIpKH5Db21tb25CdWZmZXJIZWFkZXItDQo+ID5SZXNlcnZlZE1lbUJpdG1hcCk7DQo+ ID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ICsNCj4gPiArTGVnYWN5RnJlZUNvbW1vbkJ1 ZmZlcjoNCj4gPiArICByZXR1cm4gZ0JTLT5GcmVlUGFnZXMgKChVSU5UTilDb21tb25CdWZmZXJI ZWFkZXIsDQo+IENvbW1vbkJ1ZmZlclBhZ2VzKTsNCj4gPiArfQ0KPiA+IGRpZmYgLS1naXQgYS9P dm1mUGtnL0lvTW11RHhlL0lvTW11RHhlLmluZg0KPiBiL092bWZQa2cvSW9NbXVEeGUvSW9NbXVE eGUuaW5mDQo+ID4gaW5kZXggZTEwYmUxZGNmZjQ5Li4yMTkyMTQ1ZWE2NjEgMTAwNjQ0DQo+ID4g LS0tIGEvT3ZtZlBrZy9Jb01tdUR4ZS9Jb01tdUR4ZS5pbmYNCj4gPiArKysgYi9Pdm1mUGtnL0lv TW11RHhlL0lvTW11RHhlLmluZg0KPiA+IEBAIC0yMSw2ICsyMSw3IEBADQo+ID4gICAgIEFtZFNl dklvTW11LmMNCj4gPiAgICAgQW1kU2V2SW9NbXUuaA0KPiA+ICAgICBJb01tdUR4ZS5jDQo+ID4g KyAgSW9NbXVCdWZmZXIuYw0KPiA+DQo+ID4gICBbUGFja2FnZXNdDQo+ID4gICAgIE1kZVBrZy9N ZGVQa2cuZGVjDQo+ID4gZGlmZiAtLWdpdCBhL092bWZQa2cvSW9NbXVEeGUvSW9NbXVJbnRlcm5h bC5oDQo+IGIvT3ZtZlBrZy9Jb01tdUR4ZS9Jb01tdUludGVybmFsLmgNCj4gPiBuZXcgZmlsZSBt b2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uOTM2YzM1YWE1MzZjDQo+ID4gLS0t IC9kZXYvbnVsbA0KPiA+ICsrKyBiL092bWZQa2cvSW9NbXVEeGUvSW9NbXVJbnRlcm5hbC5oDQo+ ID4gQEAgLTAsMCArMSwxNzkgQEANCj4gPiArLyoqIEBmaWxlDQo+ID4gKw0KPiA+ICsgIENvcHly aWdodCAoYykgMjAyMiwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJS Pg0KPiA+ICsNCj4gPiArICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBh dGVudA0KPiA+ICsNCj4gPiArKiovDQo+ID4gKw0KPiA+ICsjaWZuZGVmIElPTU1VX0lOVEVSTkFM X0hfDQo+ID4gKyNkZWZpbmUgSU9NTVVfSU5URVJOQUxfSF8NCj4gPiArDQo+ID4gKyNpbmNsdWRl IDxCYXNlLmg+DQo+ID4gKyNpbmNsdWRlIDxQcm90b2NvbC9Jb01tdS5oPg0KPiA+ICsjaW5jbHVk ZSA8VWVmaS9VZWZpQmFzZVR5cGUuaD4NCj4gPiArI2luY2x1ZGUgPFVlZmkvVWVmaVNwZWMuaD4N Cj4gPiArDQo+ID4gKyNkZWZpbmUgTUFQX0lORk9fU0lHICBTSUdOQVRVUkVfNjQgKCdNJywgJ0En LCAnUCcsICdfJywgJ0knLCAnTicsICdGJywgJ08nKQ0KPiA+ICsNCj4gPiArdHlwZWRlZiBzdHJ1 Y3Qgew0KPiA+ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICBTaWduYXR1cmU7DQo+ID4gKyAg TElTVF9FTlRSWSAgICAgICAgICAgICAgIExpbms7DQo+ID4gKyAgRURLSUlfSU9NTVVfT1BFUkFU SU9OICAgIE9wZXJhdGlvbjsNCj4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgTnVtYmVy T2ZCeXRlczsNCj4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgTnVtYmVyT2ZQYWdlczsN Cj4gPiArICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAgQ3J5cHRlZEFkZHJlc3M7DQo+ID4gKyAg RUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgIFBsYWluVGV4dEFkZHJlc3M7DQo+ID4gKyAgVUlOVDMy ICAgICAgICAgICAgICAgICAgIFJlc2VydmVkTWVtQml0bWFwOw0KPiA+ICt9IE1BUF9JTkZPOw0K PiA+ICsNCj4gPiArI2RlZmluZSBDT01NT05fQlVGRkVSX1NJRyAgU0lHTkFUVVJFXzY0ICgnQycs ICdNJywgJ04nLCAnQicsICdVJywgJ0YnLA0KPiAnRicsICdSJykNCj4gPiArDQo+ID4gKyNwcmFn bWEgcGFjayAoMSkNCj4gPiArLy8NCj4gPiArLy8gVGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgZW5h YmxlcyBNYXAoKSBhbmQgVW5tYXAoKSB0byBwZXJmb3JtIGluLQ0KPiBwbGFjZQ0KPiA+ICsvLyBk ZWNyeXB0aW9uIGFuZCBlbmNyeXB0aW9uLCByZXNwZWN0aXZlbHksIGZvcg0KPiBCdXNNYXN0ZXJD b21tb25CdWZmZXJbNjRdDQo+ID4gKy8vIG9wZXJhdGlvbnMsIHdpdGhvdXQgZHluYW1pYyBtZW1v cnkgYWxsb2NhdGlvbiBvciByZWxlYXNlLg0KPiA+ICsvLw0KPiA+ICsvLyBCb3RoIENPTU1PTl9C VUZGRVJfSEVBREVSIGFuZA0KPiBDT01NT05fQlVGRkVSX0hFQURFUi5TdGFzaEJ1ZmZlciBhcmUg YWxsb2NhdGVkDQo+ID4gKy8vIGJ5IEFsbG9jYXRlQnVmZmVyKCkgYW5kIHJlbGVhc2VkIGJ5IEZy ZWVCdWZmZXIoKS4NCj4gPiArLy8NCj4gPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ICsgIFVJTlQ2 NCAgICBTaWduYXR1cmU7DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gQWx3YXlzIGFsbG9j YXRlZCBmcm9tIEVmaUJvb3RTZXJ2aWNlc0RhdGEgdHlwZSBtZW1vcnksIGFuZCBhbHdheXMNCj4g PiArICAvLyBlbmNyeXB0ZWQuDQo+ID4gKyAgLy8NCj4gPiArICBWT0lEICAgICAgKlN0YXNoQnVm ZmVyOw0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIEJpdG1hcCBvZiByZXNlcnZlZCBtZW1v cnkNCj4gPiArICAvLw0KPiA+ICsgIFVJTlQzMiAgICBSZXNlcnZlZE1lbUJpdG1hcDsNCj4gPiAr DQo+ID4gKyAgLy8NCj4gPiArICAvLyBGb2xsb3dlZCBieSB0aGUgYWN0dWFsIGNvbW1vbiBidWZm ZXIsIHN0YXJ0aW5nIGF0IHRoZSBuZXh0IHBhZ2UuDQo+ID4gKyAgLy8NCj4gPiArfSBDT01NT05f QlVGRkVSX0hFQURFUjsNCj4gPiArDQo+ID4gKy8vDQo+ID4gKy8vIFRoaXMgZGF0YSBzdHJ1Y3R1 cmUgZGVmaW5lcyBhIG1lbW9yeSByYW5nZSBpbiB0aGUgcmVzZXJ2ZWQgbWVtb3J5DQo+IHJlZ2lv bi4NCj4gPiArLy8gUGxlYXNlIHJlZmVyIHRvIElvTW11SW5pdFJlc2VydmVkU2hhcmVkTWVtKCkg Zm9yIGRldGFpbGVkDQo+IGluZm9ybWF0aW9uLg0KPiA+ICsvLw0KPiA+ICsvLyBUaGUgbWVtb3J5 IHJlZ2lvbiBsb29rcyBsaWtlOg0KPiA+ICsvLyAgICAgfC0tLS0tLS0tLS0tLXwtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tfA0KPiA+ICsvLyAgICAgfCBIZWFkZXIgICAgIHwgICAgRGF0YSAg ICAgICAgICAgICAgICAgICAgfA0KPiA+ICsvLyAgICAgfCA0aywgcHJpdmF0ZXwgNGsvMzJrLzEy OGsvZXRjLCBzaGFyZWQgICAgfA0KPiA+ICsvLyAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tfA0KPiA+ICsvLw0KPiA+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ID4g KyAgVUlOVDMyICAgICAgICAgICAgICAgICAgQml0bWFwTWFzazsNCj4gPiArICBVSU5UMzIgICAg ICAgICAgICAgICAgICBTaGlmdDsNCj4gPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICBTbG90 czsNCj4gPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICBEYXRhU2l6ZTsNCj4gPiArICBVSU5U MzIgICAgICAgICAgICAgICAgICBIZWFkZXJTaXplOw0KPiA+ICsgIEVGSV9QSFlTSUNBTF9BRERS RVNTICAgIFN0YXJ0QWRkcmVzc09mTWVtUmFuZ2U7DQo+ID4gK30gSU9NTVVfUkVTRVJWRURfTUVN X1JBTkdFOw0KPiA+ICsjcHJhZ21hIHBhY2soKQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIEFs bG9jYXRlIGEgbWVtb3J5IHJlZ2lvbiBhbmQgY29udmVydCBpdCB0byBiZSBzaGFyZWQuIFRoaXMg bWVtb3J5DQo+IHJlZ2lvbiB3aWxsIGJlDQo+ID4gKyAqIHVzZWQgaW4gdGhlIERNQSBvcGVyYXRp b24uDQo+ID4gKyAqDQo+ID4gKyAqIFRoZSBwcmUtYWxsb2MgbWVtb3J5IGNvbnRhaW5zIHBpZWNl cyBvZiBtZW1vcnkgcmVnaW9ucyB3aXRoDQo+IGRpZmZlcmVudCBzaXplLiBUaGUNCj4gPiArICog YWxsb2NhdGlvbiBvZiB0aGUgc2hhcmVkIG1lbW9yeSByZWdpb25zIGFyZSBpbmRpY2F0ZWQgYnkg YSAzMi1iaXQNCj4gYml0bWFwIChtUmVzZXJ2ZWRNZW1CaXRtYXApLg0KPiA+ICsgKg0KPiA+ICsg KiBUaGUgbWVtb3J5IHJlZ2lvbnMgYXJlIGNvbnN1bWVkIGJ5IElvTW11QWxsb2NhdGVCdWZmZXIg KGluIHdoaWNoDQo+IENvbW1vbkJ1ZmZlciBpcyBhbGxvY2F0ZWQpIGFuZA0KPiA+ICsgKiBJb01t dU1hcCAoaW4gd2hpY2ggYm91bmNlIGJ1ZmZlciBpcyBhbGxvY2F0ZWQpLg0KPiA+ICsgKg0KPiA+ ICsgKiBUaGUgQ29tbW9uQnVmZmVyIGNvbnRhaW5zIDIgcGFydHMsIG9uZSBwYWdlIGZvcg0KPiBD b21tb25CdWZmZXJIZWFkZXIgd2hpY2ggaXMgcHJpdmF0ZSBtZW1vcnksDQo+ID4gKyAqIHRoZSBv dGhlciBwYXJ0IGlzIHNoYXJlZCBtZW1vcnkuIFNvIHRoZSBsYXlvdXQgb2YgYSBwaWVjZSBvZiBt ZW1vcnkNCj4gcmVnaW9uIGFmdGVyIGluaXRpYWxpemF0aW9uDQo+ID4gKyAqIGxvb2tzIGxpa2U6 DQo+ID4gKyAqDQo+ID4gKyAqICAgICB8LS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS18DQo+ID4gKyAqICAgICB8IEhlYWRlciAgICAgfCAgICBEYXRhICAgICAgICAgICAg ICAgICAgICB8ICA8LS0gYSBwaWVjZSBvZiBwcmUtYWxsb2MgbWVtb3J5DQo+IHJlZ2lvbg0KPiA+ ICsgKiAgICAgfCA0aywgcHJpdmF0ZXwgNGsvMzJrLzEyOGsvZXRjLCBzaGFyZWQgICAgfA0KPiA+ ICsgKiAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KPiA+ ICsgKg0KPiA+ICsgKiBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgU3VjY2Vzc2Z1bGx5IGluaXRp YWxpemUgdGhlIHJlc2VydmVkIG1lbW9yeS4NCj4gPiArICogQHJldHZhbCBFRklfVU5TVVBQT1JU RUQgIFRoaXMgZmVhdHVyZSBpcyBub3Qgc3VwcG9ydGVkLg0KPiA+ICsgKi8NCj4gPiArRUZJX1NU QVRVUw0KPiA+ICtJb01tdUluaXRSZXNlcnZlZFNoYXJlZE1lbSAoDQo+ID4gKyAgVk9JRA0KPiA+ ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogUmVsZWFzZSB0aGUgcHJlLWFsbG9jIHNo YXJlZCBtZW1vcnkuDQo+ID4gKyAqDQo+ID4gKyAqIEByZXR2YWwgRUZJX1NVQ0NFU1MgIFN1Y2Nl c3NmdWxseSByZWxlYXNlIHRoZSBzaGFyZWQgbWVtb3J5DQo+ID4gKyAqLw0KPiA+ICtFRklfU1RB VFVTDQo+ID4gK0lvTW11UmVsZWFzZVJlc2VydmVkU2hhcmVkTWVtICgNCj4gPiArICBCT09MRUFO ICBNZW1vcnlNYXBMb2NrZWQNCj4gPiArICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIEFs bG9jYXRlIHJlc2VydmVkIHNoYXJlZCBtZW1vcnkgZm9yIGJvdW5jZSBidWZmZXIuDQo+ID4gKyAq DQo+ID4gKyAqIEBwYXJhbSBUeXBlICAgICAgICBBbGxvY2F0ZSB0eXBlDQo+ID4gKyAqIEBwYXJh bSBNZW1vcnlUeXBlICBUaGUgbWVtb3J5IHR5cGUgdG8gYmUgYWxsb2NhdGVkDQo+ID4gKyAqIEBw YXJhbSBNYXBJbmZvICAgICBQb2ludGVyIHRvIHRoZSBNQVBfSU5GTw0KPiA+ICsgKg0KPiA+ICsg KiBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICBTdWNjZXNzZnVsbHkgYWxsb2NhdGUgdGhlIGJv dW5jZSBidWZmZXINCj4gPiArICogQHJldHZhbCBPdGhlciAgICAgICAgICAgICAgQXMgdGhlIGVy cm9yIGNvZGUgaW5kaWNhdGVzDQo+ID4gKyAqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0lvTW11 QWxsb2NhdGVCb3VuY2VCdWZmZXIgKA0KPiA+ICsgIElOICAgICBFRklfQUxMT0NBVEVfVFlQRSAg VHlwZSwNCj4gPiArICBJTiAgICAgRUZJX01FTU9SWV9UWVBFICAgIE1lbW9yeVR5cGUsDQo+ID4g KyAgSU4gT1VUIE1BUF9JTkZPICAgICAgICAgICAqTWFwSW5mbw0KPiA+ICsgICk7DQo+ID4gKw0K PiA+ICsvKioNCj4gPiArICogRnJlZSB0aGUgYm91bmNlIGJ1ZmZlciBhbGxvY2F0ZWQgaW4gSW9N bXVBbGxvY2F0ZUJvdW5jZUJ1ZmZlci4NCj4gPiArICoNCj4gPiArICogQHBhcmFtIE1hcEluZm8g ICAgICAgUG9pbnRlciB0byB0aGUgTUFQX0lORk8NCj4gPiArICogQHJldHVybiBFRklfU1VDQ0VT UyAgU3VjY2Vzc2Z1bGx5IGZyZWUgdGhlIGJvdW5jZSBidWZmZXIuDQo+ID4gKyAqLw0KPiA+ICtF RklfU1RBVFVTDQo+ID4gK0lvTW11RnJlZUJvdW5jZUJ1ZmZlciAoDQo+ID4gKyAgSU4gT1VUICAg ICBNQVBfSU5GTyAgKk1hcEluZm8NCj4gPiArICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAq IEFsbG9jYXRlIENvbW1vbkJ1ZmZlciBmcm9tIHByZS1hbGxvY2F0ZWQgc2hhcmVkIG1lbW9yeS4N Cj4gPiArICoNCj4gPiArICogQHBhcmFtIE1lbW9yeVR5cGUgICAgICAgICAgTWVtb3J5IHR5cGUN Cj4gPiArICogQHBhcmFtIENvbW1vbkJ1ZmZlclBhZ2VzICAgUGFnZXMgb2YgQ29tbW9uQnVmZmVy DQo+ID4gKyAqIEBwYXJhbSBQaHlzaWNhbEFkZHJlc3MgICAgIEFsbG9jYXRlZCBwaHlzaWNhbCBh ZGRyZXNzDQo+ID4gKyAqIEBwYXJhbSBSZXNlcnZlZE1lbUJpdG1hcCAgIEJpdG1hcCB3aGljaCBp bmRpY2F0ZXMgdGhlIGFsbG9jYXRpb24NCj4gb2YgcmVzZXJ2ZWQgbWVtb3J5DQo+ID4gKyAqDQo+ ID4gKyAqIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgIFN1Y2Nlc3NmdWxseSBhbGxvY2F0ZSB0 aGUgY29tbW9uIGJ1ZmZlcg0KPiA+ICsgKiBAcmV0dmFsIE90aGVyICAgICAgICAgICAgICBBcyB0 aGUgZXJyb3IgY29kZSBpbmRpY2F0ZXMNCj4gPiArICovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiAr SW9NbXVBbGxvY2F0ZUNvbW1vbkJ1ZmZlciAoDQo+ID4gKyAgSU4gRUZJX01FTU9SWV9UWVBFICAg ICAgICBNZW1vcnlUeXBlLA0KPiA+ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICAgQ29tbW9u QnVmZmVyUGFnZXMsDQo+ID4gKyAgT1VUIEVGSV9QSFlTSUNBTF9BRERSRVNTICAqUGh5c2ljYWxB ZGRyZXNzLA0KPiA+ICsgIE9VVCBVSU5UMzIgICAgICAgICAgICAgICAgKlJlc2VydmVkTWVtQml0 bWFwDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBGcmVlIENvbW1vbkJ1ZmZl ciB3aGljaCBpcyBhbGxvY2F0ZWQgYnkNCj4gSW9NbXVBbGxvY2F0ZUNvbW1vbkJ1ZmZlcigpLg0K PiA+ICsgKg0KPiA+ICsgKiBAcGFyYW0gQ29tbW9uQnVmZmVySGVhZGVyICBQb2ludGVyIHRvIHRo ZSBDb21tb25CdWZmZXJIZWFkZXINCj4gPiArICogQHBhcmFtIENvbW1vbkJ1ZmZlclBhZ2VzICAg UGFnZXMgb2YgQ29tbW9uQnVmZmVyDQo+ID4gKyAqDQo+ID4gKyAqIEByZXR2YWwgRUZJX1NVQ0NF U1MgICAgICAgIFN1Y2Nlc3NmdWxseSBmcmVlIHRoZSBjb21tb24gYnVmZmVyDQo+ID4gKyAqIEBy ZXR2YWwgT3RoZXIgICAgICAgICAgICAgIEFzIHRoZSBlcnJvciBjb2RlIGluZGljYXRlcw0KPiA+ ICsgKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtJb01tdUZyZWVDb21tb25CdWZmZXIgKA0KPiA+ ICsgIElOIENPTU1PTl9CVUZGRVJfSEVBREVSICAqQ29tbW9uQnVmZmVySGVhZGVyLA0KPiA+ICsg IElOIFVJTlROICAgICAgICAgICAgICAgICBDb21tb25CdWZmZXJQYWdlcw0KPiA+ICsgICk7DQo+ ID4gKw0KPiA+ICsjZW5kaWYNCg==