From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by mx.groups.io with SMTP id smtpd.web10.2571.1670596113745280143 for ; Fri, 09 Dec 2022 06:28:34 -0800 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=BDGkY4kg; spf=pass (domain: intel.com, ip: 134.134.136.65, 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=1670596113; x=1702132113; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=UVhs97B6Lb76B6M+FyglJjTwbIXpIQrG/t1vALfyz80=; b=BDGkY4kgYEiclCDuEH+707Ptm0xIw2wXwbO1vufTXq6LhAWtwXAk7XNF 2BouLIc7aTdT60nBoaNVAr+FngVaxmRhrqRtrEppCASD4AlapvCzq7I+/ P2k8P/ZYgAz8IH6UjeN1oTU9+H7OuKhVrzBW8wkvZvV+9wocdUjjtnvHf 3v1dI5b2JSvRNfXjZqBkrFXHIX/zkc6ztzEzuhOFelbzh/B1AN1Kt7NcN H+sp6Og3qYoI8W4jyqmfx3u+RjvYdy79/0bRbY24vqYqEeAvDISpR7KOF xDwdzwpbl17H4z2JaelhOfTH/IkU0RHjtK4gTpnYy34SI6Mj5oKjt22NF g==; X-IronPort-AV: E=McAfee;i="6500,9779,10556"; a="319330166" X-IronPort-AV: E=Sophos;i="5.96,230,1665471600"; d="scan'208";a="319330166" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Dec 2022 06:28:32 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10556"; a="649569322" X-IronPort-AV: E=Sophos;i="5.96,230,1665471600"; d="scan'208";a="649569322" Received: from fmsmsx602.amr.corp.intel.com ([10.18.126.82]) by fmsmga007.fm.intel.com with ESMTP; 09 Dec 2022 06:28:32 -0800 Received: from fmsmsx612.amr.corp.intel.com (10.18.126.92) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.16; Fri, 9 Dec 2022 06:28:32 -0800 Received: from fmsmsx610.amr.corp.intel.com (10.18.126.90) by fmsmsx612.amr.corp.intel.com (10.18.126.92) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.16; Fri, 9 Dec 2022 06:28:31 -0800 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.16 via Frontend Transport; Fri, 9 Dec 2022 06:28:31 -0800 Received: from NAM02-SN1-obe.outbound.protection.outlook.com (104.47.57.44) 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.16; Fri, 9 Dec 2022 06:28:31 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TuGvL//wdEoXrVmMCLjX/KpHzEOdoWZXq2UwV6eQ66aBr6oahPfjO0DGrQwH6NjvL5Po+8Wz8WforpI4x+C5Dk/wX9ShWRV8L3fKQ3nRqME6ty0Uz2YSIhwTycOCxZQCOUWOzLqNaVkx9Q5YedIJim8g7ELpM3VTgds0KHGpp/MsBRNFyisxU/jNkbcpTfGscbWxRtLGvZDs4jvqZmiWGMiNKoPYt1mkKc7bcNvhuss+LB8OnzGGXqlklrdQXoEBCnjycnlNlS97GMlRgd1TK240WDJXDEtxNMbxhyoXmwqYXChlDGkTeUN0VVQHYRy51sel4FgyBYSKAGgUQw6USA== 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=UVhs97B6Lb76B6M+FyglJjTwbIXpIQrG/t1vALfyz80=; b=bCamMDrIYhJOj0rZPFTr6h9f4LGwO/TLckIDWxeiiAVbAIuZJ1q+C5osIaWCS80qi3zdxjEyG4XBi29yx/0T0pYx7ZTeki0c5aPr3klWpWr+Siz7/t7+vPOx5qtlZIH9Ran0z2mm6u0ZG5X5w8/vdv25DbiCPUo9yQjPO8OI7c2CAL3jeGXtpwxJGRA/8UM3AD4FGnxlBVQPBt0SqNhmqEiErRkPCBNpo07LfIenJZQJE8APO1OjcvQZrlp5gu6TRay8YDQXKIfiNJAey78KxPlM7NXxgKuawpqVRtRo8ZQ9+7BCnKdGEoW/lSVaDQlsZHv5Th4IXhi81jjXpUH8Lw== 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 CH3PR11MB7793.namprd11.prod.outlook.com (2603:10b6:610:129::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5880.16; Fri, 9 Dec 2022 14:28:28 +0000 Received: from MW4PR11MB5872.namprd11.prod.outlook.com ([fe80::5f56:1bdc:2eae:c041]) by MW4PR11MB5872.namprd11.prod.outlook.com ([fe80::5f56:1bdc:2eae:c041%9]) with mapi id 15.20.5880.018; Fri, 9 Dec 2022 14:28:28 +0000 From: "Yao, Jiewen" To: Tom Lendacky , "Xu, Min M" , "devel@edk2.groups.io" CC: "Aktas, Erdem" , James Bottomley , Gerd Hoffmann , "Yao, Jiewen" 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+QAW1NpB65fgcUAgAAI85CABhe28A== Date: Fri, 9 Dec 2022 14:28:28 +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: 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_|CH3PR11MB7793:EE_ x-ms-office365-filtering-correlation-id: 1fb8ea22-7263-4ebe-4fc4-08dad9f1a3bf 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: R8EzNwPzBUY8VMkLO0/bc17KR34f2NfipT7Hg+AGcDNsU8/urrlRGUbuhymZo81h+ipXBrd7LQNQetF+nfdhc9MYp6dslRDYpq3QNW/rxn6gpOVAYxZzzeCeXnyIn8HyDaifPnyqrRH5dpu92hVt0N+FDJxC1rUeHQY0uADZ/FEnu640jTaMyl8+mE25tDt4XNpyGZMF32d4yV61E5SSUSGib0O4BB7LrpFvKG9g1gmeFHPuOaNr1qEwNiZ/xuGujbeOuMpWkBtcuCx+jOCXmquFPG0W/PpRDYvkv9petQ2l0/6U8AWpRmTIJzmjrVLek/5Tr4c0iXgrlZbvOgbQmIaImye6dVRu0EVMGaJc+Ib2hcgv/9okQ4exdp+Qbx0xwzVoN4OWyrat6a7vf/9dbFC+0SGlctiS8YNnDwfie7EuaAr4/ZvjTpcY/t5U4p0B+1dgdO9mYXjrIRqXC6G9w3CkOlsPEYtK4YHBsqgZ2HY70S+3fmpETof0wntixAxP+kfmOoTx48dmV/L0xgToJjaMtcWc96LhYwftD/wnApwM/dQjmcmWJkiwTqW8Tg4R1y2JEv9I3h/QXvcQa45Xt5YcXkE5mKYWYLpfn5nmTg1huAOOs8E3HYCngxe7vq4Vs8SGZLYgKjMvZQHLHAZdsOm1bcYWaWjYfttP+mnzPNWMg/0JAWKqCvtdmC9frXcacChZSFmZBRsiVj6h87F/pWCTHqC6s4VsdLkT2IbCka4= 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)(39860400002)(376002)(396003)(136003)(346002)(366004)(451199015)(33656002)(83380400001)(86362001)(4326008)(2906002)(38070700005)(110136005)(7696005)(478600001)(54906003)(71200400001)(186003)(26005)(82960400001)(9686003)(966005)(53546011)(6506007)(107886003)(38100700002)(66476007)(122000001)(66556008)(30864003)(316002)(5660300002)(8936002)(52536014)(76116006)(8676002)(41300700001)(64756008)(66446008)(55016003)(66946007)(559001)(579004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?ak1mQTZFaW9kQ2dFK0piSUJvTTRUZ0h5VmVhT3Q3Wm5rTm9PV3pqZ2dod1Rs?= =?utf-8?B?N3FsU2Q1YTFkbmJnV0RUTndOS080U1JnVU9jUStrMkxPdnpWOVdIVU9YeUdB?= =?utf-8?B?QjN4cFZ0S3Z2VjQyRG1LY3owckV6Vkt3UzB6dnorME10YXk3eUM5RVZzcGFo?= =?utf-8?B?K3NVZzJra3RaMXNSWEpZVkIzV2gzcFJNMVhTV0NPYU9jNFkzZ3hLMHNjZXU2?= =?utf-8?B?UzZJNjk2anJ1a0xyL2h0TnNJSzJqMVBjd0RHbHBTakI2S01Rd0hSVERUTDBx?= =?utf-8?B?aUMrdXdtbmIrQnkrOG11N0dpbTJxY0lkZlREaytzdU5LWjVSVGljMGx5Wm9W?= =?utf-8?B?SFg3amtOeENRQjhMTUpFM2FldzRVcHZJTmk4dExWUVZNSVBVY2xQaEg3Tmpq?= =?utf-8?B?eE1ZbHYxNHBiUnZDa056MmJiQkF1ODdPeEcwSjg2Z2FIMlZ6ZVR1d1V2blRH?= =?utf-8?B?bXVuWlkxMmNxc2hzSmN5S0ZjRGRJZlBRRzZQQlQ1dFplamg1ejNjd0RCVVps?= =?utf-8?B?Nk5BQzhoakE5VGdNRWxSczJONWRDNnFzK2ZsTG4yM2pwSFBIRXFHeWZZS1VK?= =?utf-8?B?YVhKcmhoVzdGT0xPcE04L1ZxZ1ZESjR5b2x0OGtLTTVvU1hyNjVRc1V6VklO?= =?utf-8?B?SC9CdFErOXlRRERXbWNGTjkwcis4NTFHcDBmOEhCQzRhdlc2WmJ2NEZ1Uzdo?= =?utf-8?B?cWpWYmVmb0FzN251RG82VUdocy9udmp4NTN3dk5KTCtCYTZKZjhPaHN6SlVp?= =?utf-8?B?ajRqc1ArV3plRUNldWRoQTNYSTBLSDBGODc5MFhVWUVyRzZzVE1KWnl1a0NX?= =?utf-8?B?cGkreCs1TXlSYkxnWCtzeGRCMHg0K0lMZjdUbDlnRis4bytVeU04N0RZVnF4?= =?utf-8?B?V1RpS2hNMnl5dTJpWEJPNHFBeVl1TDM2TG5sS1FGdllFamFBNDBrYk4xb3VD?= =?utf-8?B?Mk9ISkxmSGtLZEVRMzNzNjhERzlBU1M3ZXJoZDY4eFZGU1UxVzM3WUFwbTBU?= =?utf-8?B?blVoUVJHSVVwaFc0bzYzOFVSRHh3dmpncU4ycHFlRVZGSDRmZXdSa3VRR1Rq?= =?utf-8?B?MXp3YnJqVjZjYlQrZVQ5SFpnRktoQzg1NHFmN0RFZG1zdkhCNUpwMVBXWjkw?= =?utf-8?B?RzQ5SHNOWmdRT1Qyd0pOT2w2REowR3NtRG81Z0FsQkNWZ09UVmpiaHVpeHRF?= =?utf-8?B?NWVBOGVGVjJ5SFdCQUp5UVVCZHhmeXVjSlkxNit0TGJnTVkzRlQrNmVVOGFT?= =?utf-8?B?cUNGQy85VS9rQmw0c2Y0ZDQzY0NKZVE3S1dEQVRYSXNPeExZeURxWTQ5N2pM?= =?utf-8?B?aHg4cDN3L29TNnVQallVMUpRKytiM21ZVTJPS0R6cXE2NkVnV25US0NGRlp4?= =?utf-8?B?dnZZZENMSXY0WHRERUliZ1FSYUxSZUZYcVh0ZGpoS0U3cnFTTDFyeEcxdm16?= =?utf-8?B?Ymw2THBhQ3BJWHRnUUdUMENQcWF5SGE2SGRlZmRCUmVnVkNkOUZWazJzTFhZ?= =?utf-8?B?NU5YVWozTGxuaWszV3hYUmJENyt2VzdvbmdvZmJtbkxNdnF1UjJBYVBNQStS?= =?utf-8?B?NWVOaUpWcnJLdGN6ZVZ6NVcxd09wbTF2bmx2eTFaUjErMzl1cXZ2eXM2SlZ1?= =?utf-8?B?YktLM2JkcnZ2WUp0dHpXRzQzWmpCenNKZGZycWNMMGgwSWx6clY4NXhYMHZI?= =?utf-8?B?TEI1cTRkcGlaamUvWXZYOXhKTUJOWk9LVGNvY2FxSUtuYS96KzhaQUY1UmxT?= =?utf-8?B?VHNZQzBtemhhV3d1RWE1eW5mZ0x0dTZQNWdXMWxJejJwN3F0VHJzYTh1Z0tM?= =?utf-8?B?MXcvWHhkZ3FUdUZRdUNlZ0IrcFJDV0RRR0JTM1kvb0RLS0N3WTk3YTdQMTYr?= =?utf-8?B?Um9RUVNaZzN4YXBtWHU0b05FL3FvTk5WaWVxVXEzMlpvNUx4TGJiZU9KSlRY?= =?utf-8?B?aHRCdjRlSGU3VkxBNzVXcmx1U2JuWVF3NnE2T1BlV1FoVEt5bkJnUCtLMmpH?= =?utf-8?B?bW5FUE9XcGVCOWJwVlFlMS9sTjJJZW9VR1I3NTloeDZaTld3YXVXTDdKWjVL?= =?utf-8?B?V2pweFJ0bWdneTY0MnNPa0t0bmhORTZvQnVWMkl3ZnVLQWdNL0tEUjRFS1kx?= =?utf-8?Q?uStRsjmwLhktje4g4VcjoDlso?= 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: 1fb8ea22-7263-4ebe-4fc4-08dad9f1a3bf X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Dec 2022 14:28:28.3760 (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: zFU8v4+t6FoPASuxfz2ypc0C/uZs8IDQJ3q0++2fhhyBab5oq/+FLueIVcQV2OA+O1+srfsvjSzBgpD22/Rpmg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR11MB7793 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 SGkgTWluDQpUaGFua3MgZm9yIHRoZSBjb250cmlidXRpb24uDQpJdCBpcyBnb29kIHBlcmZvcm1h bmNlIGltcHJvdmVtZW50Lg0KDQpXb3VsZCB5b3UgcGxlYXNlIGFkZCBtb3JlIGRlc2NyaXB0aW9u IGZvciBiZWxvdyBSZXNlcnZlZE1lbVJhbmdlcz8NCi0tLS0tLS0tLQ0KU1RBVElDIElPTU1VX1JF U0VSVkVEX01FTV9SQU5HRSAgbVJlc2VydmVkTWVtUmFuZ2VzW10gPSB7DQotLS0tLS0tLS0NClBs ZWFzZSBhZGQgY29tbWVudCB0byBkZXNjcmliZToNCjEpIEhvdyB0aGUgcHJlLWFsbG9jYXRlZCBt ZW1vcnkgaXMgbWFuYWdlZD8NCjIpIFdoYXQgaWYgdGhlIHByZS1hbGxvY2F0ZWQgbWVtb3J5IGlz IHVzZWQgdXA/DQoNCg0KDQpXaXRoIGNvbW1lbnQgY2hhbmdlLCBwYXRjaCAxfjMgZnJvbSBNaW4g WHU6IHJldmlld2VkLWJ5IEppZXdlbiBZYW8gPEppZXdlbi55YW9AaW50ZWwuY29tPg0KDQpTRVYg cGF0Y2ggKE92bWZQa2cvSW9NbXVEeGU6IEFkZCBTRVYgc3VwcG9ydCBmb3IgcmVzZXJ2ZWQgc2hh cmVkIG1lbW9yeSkgZnJvbSBUb20gTGVuZGFja3k6IGFja2VkLWJ5OiBKaWV3ZW4gWWFvIDxqaWV3 ZW4ueWFvQGludGVsLmNvbT4NCg0KVGhhbmsgeW91DQpZYW8sIEppZXdlbg0KDQoNCj4gLS0tLS1P cmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogWWFvLCBKaWV3ZW4NCj4gU2VudDogVHVlc2Rh eSwgRGVjZW1iZXIgNiwgMjAyMiAxOjIxIEFNDQo+IFRvOiBUb20gTGVuZGFja3kgPHRob21hcy5s ZW5kYWNreUBhbWQuY29tPjsgWHUsIE1pbiBNDQo+IDxtaW4ubS54dUBpbnRlbC5jb20+OyBkZXZl bEBlZGsyLmdyb3Vwcy5pbw0KPiBDYzogQWt0YXMsIEVyZGVtIDxlcmRlbWFrdGFzQGdvb2dsZS5j b20+OyBKYW1lcyBCb3R0b21sZXkNCj4gPGplamJAbGludXguaWJtLmNvbT47IEdlcmQgSG9mZm1h bm4gPGtyYXhlbEByZWRoYXQuY29tPg0KPiBTdWJqZWN0OiBSRTogW1BBVENIIFYxIDEvM10gT3Zt ZlBrZy9Jb01tdUR4ZTogUmVzZXJ2ZSBzaGFyZWQgbWVtb3J5DQo+IHJlZ2lvbiBmb3IgRE1BIG9w ZXJhdGlvbg0KPiANCj4gSSBzdWdnZXN0IGl0IGJlIGluIHNhbWUgUFIsIGFuZCBkaWZmZXJlbnQg cGF0Y2guIChFLmcuIHRoZSBsYXN0IG9uZSBmb3IgU0VWKQ0KPiANCj4gDQo+IA0KPiA+IC0tLS0t T3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gRnJvbTogVG9tIExlbmRhY2t5IDx0aG9tYXMubGVu ZGFja3lAYW1kLmNvbT4NCj4gPiBTZW50OiBUdWVzZGF5LCBEZWNlbWJlciA2LCAyMDIyIDEyOjQ4 IEFNDQo+ID4gVG86IFh1LCBNaW4gTSA8bWluLm0ueHVAaW50ZWwuY29tPjsgZGV2ZWxAZWRrMi5n cm91cHMuaW8NCj4gPiBDYzogQWt0YXMsIEVyZGVtIDxlcmRlbWFrdGFzQGdvb2dsZS5jb20+OyBK YW1lcyBCb3R0b21sZXkNCj4gPiA8amVqYkBsaW51eC5pYm0uY29tPjsgWWFvLCBKaWV3ZW4gPGpp ZXdlbi55YW9AaW50ZWwuY29tPjsgR2VyZA0KPiA+IEhvZmZtYW5uIDxrcmF4ZWxAcmVkaGF0LmNv bT4NCj4gPiBTdWJqZWN0OiBSZTogW1BBVENIIFYxIDEvM10gT3ZtZlBrZy9Jb01tdUR4ZTogUmVz ZXJ2ZSBzaGFyZWQNCj4gbWVtb3J5DQo+ID4gcmVnaW9uIGZvciBETUEgb3BlcmF0aW9uDQo+ID4N Cj4gPiBPbiAxMi81LzIyIDAyOjA4LCBNaW4gWHUgd3JvdGU6DQo+ID4gPiBGcm9tOiBNaW4gTSBY dSA8bWluLm0ueHVAaW50ZWwuY29tPg0KPiA+ID4NCj4gPiA+IEJaOiBodHRwczovL2J1Z3ppbGxh LnRpYW5vY29yZS5vcmcvc2hvd19idWcuY2dpP2lkPTQxNzENCj4gPiA+DQo+ID4gPiBBIHR5cGlj YWwgUUVNVSBmd19jZmcgcmVhZCBieXRlcyB3aXRoIElPTU1VIGZvciB0ZCBndWVzdCBpcyB0aGF0 Og0KPiA+ID4gKFFlbXVGd0NmZ1JlYWRCeXRlc0BRZW11RndDZmdMaWIuYyBpcyB0aGUgZXhhbXBs ZSkNCj4gPiA+IDEpIEFsbG9jYXRlIERNQSBBY2Nlc3MgYnVmZmVyDQo+ID4gPiAyKSBNYXAgYWN0 dWFsIGRhdGEgYnVmZmVyDQo+ID4gPiAzKSBzdGFydCB0aGUgdHJhbnNmZXIgYW5kIHdhaXQgZm9y IHRoZSB0cmFuc2ZlciB0byBjb21wbGV0ZQ0KPiA+ID4gNCkgRnJlZSBETUEgQWNjZXNzIGJ1ZmZl cg0KPiA+ID4gNSkgVW4tbWFwIGFjdHVhbCBkYXRhIGJ1ZmZlcg0KPiA+ID4NCj4gPiA+IEluIHN0 ZXAgMS8yLCBQcml2YXRlIG1lbW9yaWVzIGFyZSBhbGxvY2F0ZWQsIGNvbnZlcnRlZCB0byBzaGFy ZWQNCj4gPiBtZW1vcmllcy4NCj4gPiA+IEluIFN0ZXAgNC81IHRoZSBzaGFyZWQgbWVtb3JpZXMg YXJlIGNvbnZlcnRlZCB0byBwcml2YXRlIG1lbW9yaWVzDQo+IGFuZA0KPiA+ID4gYWNjZXB0ZWQg YWdhaW4uIFRoZSBmaW5hbCBzdGVwIGlzIHRvIGZyZWUgdGhlIHBhZ2VzLg0KPiA+ID4NCj4gPiA+ IFRoaXMgaXMgdGltZS1jb25zdW1pbmcgYW5kIGltcGFjdHMgdGQgZ3Vlc3QncyBib290IHBlcmYg KGJvdGggZGlyZWN0DQo+IGJvb3QNCj4gPiA+IGFuZCBncnViIGJvb3QpIGJhZGx5Lg0KPiA+ID4N Cj4gPiA+IEluIGEgdHlwaWNhbCBncnViIGJvb3QsIHRoZXJlIGFyZSBhYm91dCA1MDAwIGNhbGxz IG9mIHBhZ2UgYWxsb2NhdGlvbiBhbmQNCj4gPiA+IHByaXZhdGUvc2hhcmUgY29udmVyc2lvbi4g TW9zdCBvZiBwYWdlIHNpemUgaXMgbGVzcyB0aGFuIDMyS0IuDQo+ID4gPg0KPiA+ID4gVGhpcyBw YXRjaCBhbGxvY2F0ZXMgYSBtZW1vcnkgcmVnaW9uIGFuZCBpbml0aWFsaXplcyBpdCBpbnRvIHBp ZWNlcyBvZg0KPiA+ID4gbWVtb3J5IHdpdGggZGlmZmVyZW50IHNpemVzLiBBIHBpZWNlIG9mIHN1 Y2ggbWVtb3J5IGNvbnNpc3RzIG9mIDIgcGFydHM6DQo+ID4gPiB0aGUgZmlyc3QgcGFnZSBpcyBv ZiBwcml2YXRlIG1lbW9yeSwgYW5kIHRoZSBvdGhlciBwYWdlcyBhcmUgc2hhcmVkDQo+ID4gPiBt ZW1vcnkuIFRoaXMgaXMgdG8gbWVldCB0aGUgbGF5b3V0IG9mIGNvbW1vbiBidWZmZXIuDQo+ID4g Pg0KPiA+ID4gV2hlbiBhbGxvY2F0aW5nIGJvdW5jZSBidWZmZXIgaW4gSW9NbXVNYXAoKSwNCj4g PiBJb01tdUFsbG9jYXRlQm91bmNlQnVmZmVyKCkNCj4gPiA+IGlzIGNhbGxlZCB0byBhbGxvY2F0 ZSB0aGUgYnVmZmVyLiBBY2NvcmRpbmdseSB3aGVuIGZyZWVpbmcgYm91bmNlIGJ1ZmZlcg0KPiA+ ID4gaW4gSW9NbXVVbm1hcFdvcmtlcigpLCBJb01tdUZyZWVCb3VuY2VCdWZmZXIoKSBpcyBjYWxs ZWQgdG8gZnJlZQ0KPiB0aGUNCj4gPiA+IGJvdW5jZSBidWZmZXIuIENvbW1vbkJ1ZmZlciBpcyBh bGxvY2F0ZWQgYnkNCj4gPiBJb01tdUFsbG9jYXRlQ29tbW9uQnVmZmVyDQo+ID4gPiBhbmQgYWNj b3JkaW5nbHkgZnJlZWQgYnkgSW9NbXVGcmVlQ29tbW9uQnVmZmVyLg0KPiA+ID4NCj4gPiA+IFRo aXMgZmVhdHVyZSBpcyB0ZXN0ZWQgaW4gSW50ZWwgVERYIHByZS1wcm9kdWN0aW9uIHBsYXRmb3Jt LiBJdCBzYXZlcyB1cA0KPiA+ID4gdG8gaHVuZHJlZHMgb2YgbXMgaW4gYSBncnViIGJvb3QuDQo+ ID4NCj4gPiBUaGlzIGNyYXNoZXMgU0VWIGd1ZXN0cy4gSSBwcmVzdW1lIGJlY2F1c2UgdGhlIGNh bGwgdG8NCj4gPiBJb01tdVJlbGVhc2VSZXNlcnZlZFNoYXJlZE1lbSgpIGlzIG5vdCBicmFja2V0 ZWQgYnkgYSBjaGVjayBmb3IgVERYLg0KPiA+DQo+ID4gSSBwbGFuIHRvIGFkZCBzdXBwb3J0IGZv ciBTRVYsIHdoaWNoIHdvdWxkIGF2b2lkIHRoZSBjcmFzaCwgbm90IHN1cmUgaWYNCj4gPiB5b3Ug d2FudCB0byBpbnRlZ3JhdGUgaXQgaW50byBhIHNpbmdsZSBzZXJpZXMgb3Igbm90LiBIZXJlJ3Mg dGhlIHBhdGNoIEkNCj4gPiB3YXMgbG9va2luZyB0byBhZGQgdGhhdCBzaG91bGQgYmUgcHJldHR5 IGVhc3kgdG8gaW50ZWdyYXRlLiBMZXQgbWUga25vdyBpZg0KPiA+IHlvdSB3b3VsZCBsaWtlIHRv IGludGVncmF0ZSBpdCBpbiB5b3VyIHNlcmllcyBvciBqdXN0IGhhdmUgbWUgc3VibWl0IGl0IGFz DQo+ID4gYSByZXBseSB0byB5b3VyIHNlcmllczoNCj4gPg0KPiA+DQo+ID4gT3ZtZlBrZy9Jb01t dUR4ZTogQWRkIFNFViBzdXBwb3J0IGZvciByZXNlcnZlZCBzaGFyZWQgbWVtb3J5DQo+ID4NCj4g PiBGcm9tOiBUb20gTGVuZGFja3kgPHRob21hcy5sZW5kYWNreUBhbWQuY29tPg0KPiA+DQo+ID4g QWRkIHN1cHBvcnQgdG8gdXNlIHRoZSByZXNlcnZlZCBzaGFyZWQgbWVtb3J5IHdpdGhpbiB0aGUg SW9NbXUNCj4gbGlicmFyeS4NCj4gPiBUaGlzIGltcHJvdmVzIGJvb3QgdGltZXMgZm9yIGFsbCBT RVYgZ3Vlc3RzLCB3aXRoIFNFVi1TTlAgYmVuZWZpdGluZyB0aGUNCj4gPiBtb3N0IGFzIGl0IGF2 b2lkcyB0aGUgcGFnZSBzdGF0ZSBjaGFuZ2UgY2FsbCB0byB0aGUgaHlwZXJ2aXNvci4NCj4gPg0K PiA+IFNpZ25lZC1vZmYtYnk6IFRvbSBMZW5kYWNreSA8dGhvbWFzLmxlbmRhY2t5QGFtZC5jb20+ DQo+ID4gLS0tDQo+ID4gICBPdm1mUGtnL0lvTW11RHhlL0NjSW9NbXUuYyAgICAgfCAgIDgyICsr KysrKysrKysrKysrKysrKysrLS0tLS0tLQ0KPiAtLQ0KPiA+IC0tLS0tLS0tLS0tDQo+ID4gICBP dm1mUGtnL0lvTW11RHhlL0lvTW11QnVmZmVyLmMgfCAgIDU0ICsrKysrKysrKysrKysrKysrKysr LS0tLS0NCj4gLQ0KPiA+ICAgMiBmaWxlcyBjaGFuZ2VkLCA4MyBpbnNlcnRpb25zKCspLCA1MyBk ZWxldGlvbnMoLSkNCj4gPg0KPiA+IGRpZmYgLS1naXQgYS9Pdm1mUGtnL0lvTW11RHhlL0NjSW9N bXUuYw0KPiA+IGIvT3ZtZlBrZy9Jb01tdUR4ZS9DY0lvTW11LmMNCj4gPiBpbmRleCAxNDc5YWY0 Njk4ODEuLjdjMjg0M2NkMjM4YSAxMDA2NDQNCj4gPiAtLS0gYS9Pdm1mUGtnL0lvTW11RHhlL0Nj SW9NbXUuYw0KPiA+ICsrKyBiL092bWZQa2cvSW9NbXVEeGUvQ2NJb01tdS5jDQo+ID4gQEAgLTIy MywzMCArMjIzLDMyIEBAIElvTW11TWFwICgNCj4gPiAgICAgICAgIGdvdG8gRnJlZU1hcEluZm87 DQo+ID4gICAgIH0NCj4gPg0KPiA+IC0gIGlmIChDQ19HVUVTVF9JU19TRVYgKFBjZEdldDY0IChQ Y2RDb25maWRlbnRpYWxDb21wdXRpbmdHdWVzdEF0dHIpKSkNCj4gew0KPiA+ICsgIGlmIChNYXBJ bmZvLT5SZXNlcnZlZE1lbUJpdG1hcCA9PSAwKSB7DQo+ID4gICAgICAgLy8NCj4gPiAtICAgIC8v IENsZWFyIHRoZSBtZW1vcnkgZW5jcnlwdGlvbiBtYXNrIG9uIHRoZSBwbGFpbnRleHQgYnVmZmVy Lg0KPiA+IC0gICAgLy8NCj4gPiAtICAgIFN0YXR1cyA9IE1lbUVuY3J5cHRTZXZDbGVhclBhZ2VF bmNNYXNrICgNCj4gPiAtICAgICAgICAgICAgICAgMCwNCj4gPiAtICAgICAgICAgICAgICAgTWFw SW5mby0+UGxhaW5UZXh0QWRkcmVzcywNCj4gPiAtICAgICAgICAgICAgICAgTWFwSW5mby0+TnVt YmVyT2ZQYWdlcw0KPiA+IC0gICAgICAgICAgICAgICApOw0KPiA+IC0gIH0gZWxzZSBpZiAoQ0Nf R1VFU1RfSVNfVERYIChQY2RHZXQ2NA0KPiA+IChQY2RDb25maWRlbnRpYWxDb21wdXRpbmdHdWVz dEF0dHIpKSkgew0KPiA+IC0gICAgLy8NCj4gPiAtICAgIC8vIFNldCB0aGUgbWVtb3J5IHNoYXJl ZCBiaXQuDQo+ID4gICAgICAgLy8gSWYgTWFwSW5mby0+UmVzZXJ2ZWRNZW1CaXRtYXAgaXMgMCwg aXQgbWVhbnMgdGhlIGJvdW5jZSBidWZmZXINCj4gaXMNCj4gPiBub3QgYWxsb2NhdGVkDQo+ID4g ICAgICAgLy8gZnJvbSB0aGUgcHJlLWFsbG9jYXRlZCBzaGFyZWQgbWVtb3J5LCBzbyBpdCBtdXN0 IGJlIGNvbnZlcnRlZCB0bw0KPiA+IHNoYXJlZCBtZW1vcnkgaGVyZS4NCj4gPiAgICAgICAvLw0K PiA+IC0gICAgaWYgKE1hcEluZm8tPlJlc2VydmVkTWVtQml0bWFwID09IDApIHsNCj4gPiArICAg IGlmIChDQ19HVUVTVF9JU19TRVYgKFBjZEdldDY0DQo+IChQY2RDb25maWRlbnRpYWxDb21wdXRp bmdHdWVzdEF0dHIpKSkNCj4gPiB7DQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIC8vIENsZWFy IHRoZSBtZW1vcnkgZW5jcnlwdGlvbiBtYXNrIG9uIHRoZSBwbGFpbnRleHQgYnVmZmVyLg0KPiA+ ICsgICAgICAvLw0KPiA+ICsgICAgICBTdGF0dXMgPSBNZW1FbmNyeXB0U2V2Q2xlYXJQYWdlRW5j TWFzayAoDQo+ID4gKyAgICAgICAgICAgICAgICAgMCwNCj4gPiArICAgICAgICAgICAgICAgICBN YXBJbmZvLT5QbGFpblRleHRBZGRyZXNzLA0KPiA+ICsgICAgICAgICAgICAgICAgIE1hcEluZm8t Pk51bWJlck9mUGFnZXMNCj4gPiArICAgICAgICAgICAgICAgICApOw0KPiA+ICsgICAgfSBlbHNl IGlmIChDQ19HVUVTVF9JU19URFggKFBjZEdldDY0DQo+ID4gKFBjZENvbmZpZGVudGlhbENvbXB1 dGluZ0d1ZXN0QXR0cikpKSB7DQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIC8vIFNldCB0aGUg bWVtb3J5IHNoYXJlZCBiaXQuDQo+ID4gKyAgICAgIC8vDQo+ID4gICAgICAgICBTdGF0dXMgPSBN ZW1FbmNyeXB0VGR4U2V0UGFnZVNoYXJlZEJpdCAoDQo+ID4gICAgICAgICAgICAgICAgICAgIDAs DQo+ID4gICAgICAgICAgICAgICAgICAgIE1hcEluZm8tPlBsYWluVGV4dEFkZHJlc3MsDQo+ID4g ICAgICAgICAgICAgICAgICAgIE1hcEluZm8tPk51bWJlck9mUGFnZXMNCj4gPiAgICAgICAgICAg ICAgICAgICAgKTsNCj4gPiArICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgIEFTU0VSVCAoRkFMU0Up Ow0KPiA+ICAgICAgIH0NCj4gPiAtICB9IGVsc2Ugew0KPiA+IC0gICAgQVNTRVJUIChGQUxTRSk7 DQo+ID4gICAgIH0NCj4gPg0KPiA+ICAgICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiA+ IEBAIC0zOTYsMzAgKzM5OCwzMCBAQCBJb01tdVVubWFwV29ya2VyICgNCj4gPiAgICAgICAgIGJy ZWFrOw0KPiA+ICAgICB9DQo+ID4NCj4gPiAtICBpZiAoQ0NfR1VFU1RfSVNfU0VWIChQY2RHZXQ2 NCAoUGNkQ29uZmlkZW50aWFsQ29tcHV0aW5nR3Vlc3RBdHRyKSkpDQo+IHsNCj4gPiAtICAgIC8v DQo+ID4gLSAgICAvLyBSZXN0b3JlIHRoZSBtZW1vcnkgZW5jcnlwdGlvbiBtYXNrIG9uIHRoZSBh cmVhIHdlIHVzZWQgdG8gaG9sZA0KPiB0aGUNCj4gPiAtICAgIC8vIHBsYWludGV4dC4NCj4gPiAt ICAgIC8vDQo+ID4gLSAgICBTdGF0dXMgPSBNZW1FbmNyeXB0U2V2U2V0UGFnZUVuY01hc2sgKA0K PiA+IC0gICAgICAgICAgICAgICAwLA0KPiA+IC0gICAgICAgICAgICAgICBNYXBJbmZvLT5QbGFp blRleHRBZGRyZXNzLA0KPiA+IC0gICAgICAgICAgICAgICBNYXBJbmZvLT5OdW1iZXJPZlBhZ2Vz DQo+ID4gLSAgICAgICAgICAgICAgICk7DQo+ID4gLSAgfSBlbHNlIGlmIChDQ19HVUVTVF9JU19U RFggKFBjZEdldDY0DQo+ID4gKFBjZENvbmZpZGVudGlhbENvbXB1dGluZ0d1ZXN0QXR0cikpKSB7 DQo+ID4gLSAgICAvLw0KPiA+IC0gICAgLy8gUmVzdG9yZSB0aGUgbWVtb3J5IHNoYXJlZCBiaXQg bWFzayBvbiB0aGUgYXJlYSB3ZSB1c2VkIHRvIGhvbGQNCj4gdGhlDQo+ID4gLSAgICAvLyBwbGFp bnRleHQuDQo+ID4gLSAgICAvLw0KPiA+IC0gICAgaWYgKE1hcEluZm8tPlJlc2VydmVkTWVtQml0 bWFwID09IDApIHsNCj4gPiArICBpZiAoTWFwSW5mby0+UmVzZXJ2ZWRNZW1CaXRtYXAgPT0gMCkg ew0KPiA+ICsgICAgaWYgKENDX0dVRVNUX0lTX1NFViAoUGNkR2V0NjQNCj4gKFBjZENvbmZpZGVu dGlhbENvbXB1dGluZ0d1ZXN0QXR0cikpKQ0KPiA+IHsNCj4gPiArICAgICAgLy8NCj4gPiArICAg ICAgLy8gUmVzdG9yZSB0aGUgbWVtb3J5IGVuY3J5cHRpb24gbWFzayBvbiB0aGUgYXJlYSB3ZSB1 c2VkIHRvIGhvbGQNCj4gPiB0aGUNCj4gPiArICAgICAgLy8gcGxhaW50ZXh0Lg0KPiA+ICsgICAg ICAvLw0KPiA+ICsgICAgICBTdGF0dXMgPSBNZW1FbmNyeXB0U2V2U2V0UGFnZUVuY01hc2sgKA0K PiA+ICsgICAgICAgICAgICAgICAgIDAsDQo+ID4gKyAgICAgICAgICAgICAgICAgTWFwSW5mby0+ UGxhaW5UZXh0QWRkcmVzcywNCj4gPiArICAgICAgICAgICAgICAgICBNYXBJbmZvLT5OdW1iZXJP ZlBhZ2VzDQo+ID4gKyAgICAgICAgICAgICAgICAgKTsNCj4gPiArICAgIH0gZWxzZSBpZiAoQ0Nf R1VFU1RfSVNfVERYIChQY2RHZXQ2NA0KPiA+IChQY2RDb25maWRlbnRpYWxDb21wdXRpbmdHdWVz dEF0dHIpKSkgew0KPiA+ICsgICAgICAvLw0KPiA+ICsgICAgICAvLyBSZXN0b3JlIHRoZSBtZW1v cnkgc2hhcmVkIGJpdCBtYXNrIG9uIHRoZSBhcmVhIHdlIHVzZWQgdG8gaG9sZA0KPiA+IHRoZQ0K PiA+ICsgICAgICAvLyBwbGFpbnRleHQuDQo+ID4gKyAgICAgIC8vDQo+ID4gICAgICAgICBTdGF0 dXMgPSBNZW1FbmNyeXB0VGR4Q2xlYXJQYWdlU2hhcmVkQml0ICgNCj4gPiAgICAgICAgICAgICAg ICAgICAgMCwNCj4gPiAgICAgICAgICAgICAgICAgICAgTWFwSW5mby0+UGxhaW5UZXh0QWRkcmVz cywNCj4gPiAgICAgICAgICAgICAgICAgICAgTWFwSW5mby0+TnVtYmVyT2ZQYWdlcw0KPiA+ICAg ICAgICAgICAgICAgICAgICApOw0KPiA+ICsgICAgfSBlbHNlIHsNCj4gPiArICAgICAgQVNTRVJU IChGQUxTRSk7DQo+ID4gICAgICAgfQ0KPiA+IC0gIH0gZWxzZSB7DQo+ID4gLSAgICBBU1NFUlQg KEZBTFNFKTsNCj4gPiAgICAgfQ0KPiA+DQo+ID4gICAgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1 cyk7DQo+ID4gQEAgLTkyNCwxNiArOTI2LDE0IEBAIEluc3RhbGxJb01tdVByb3RvY29sICgNCj4g PiAgICAgfQ0KPiA+DQo+ID4gICAgIC8vDQo+ID4gLSAgLy8gQ3VycmVudGx5IG9ubHkgVGR4IGd1 ZXN0IHN1cHBvcnQgUmVzZXJ2ZWQgc2hhcmVkIG1lbW9yeSBmb3IgRE1BDQo+ID4gb3BlcmF0aW9u Lg0KPiA+ICsgIC8vIEZvciBDQyBndWVzdHMsIHVzZSByZXNlcnZlZCBzaGFyZWQgbWVtb3J5IGZv ciBETUEgb3BlcmF0aW9uLg0KPiA+ICAgICAvLw0KPiA+IC0gIGlmIChDQ19HVUVTVF9JU19URFgg KFBjZEdldDY0IChQY2RDb25maWRlbnRpYWxDb21wdXRpbmdHdWVzdEF0dHIpKSkNCj4gew0KPiA+ IC0gICAgbVJlc2VydmVkU2hhcmVkTWVtU3VwcG9ydGVkID0gVFJVRTsNCj4gPiAtICAgIFN0YXR1 cyAgICAgICAgICAgICAgICAgICAgICA9IElvTW11SW5pdFJlc2VydmVkU2hhcmVkTWVtICgpOw0K PiA+IC0gICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+IC0gICAgICBtUmVzZXJ2ZWRT aGFyZWRNZW1TdXBwb3J0ZWQgPSBGQUxTRTsNCj4gPiAtICAgIH0gZWxzZSB7DQo+ID4gLSAgICAg IERFQlVHICgoREVCVUdfSU5GTywgIiVhOiBGZWF0dXJlIG9mIHJlc2VydmVkIG1lbW9yeSBmb3Ig RE1BIGlzDQo+ID4gc3VwcG9ydGVkLlxuIiwgX19GVU5DVElPTl9fKSk7DQo+ID4gLSAgICB9DQo+ ID4gKyAgbVJlc2VydmVkU2hhcmVkTWVtU3VwcG9ydGVkID0gVFJVRTsNCj4gPiArICBTdGF0dXMg ICAgICAgICAgICAgICAgICAgICAgPSBJb01tdUluaXRSZXNlcnZlZFNoYXJlZE1lbSAoKTsNCj4g PiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICBtUmVzZXJ2ZWRTaGFyZWRN ZW1TdXBwb3J0ZWQgPSBGQUxTRTsNCj4gPiArICB9IGVsc2Ugew0KPiA+ICsgICAgREVCVUcgKChE RUJVR19JTkZPLCAiJWE6IEZlYXR1cmUgb2YgcmVzZXJ2ZWQgbWVtb3J5IGZvciBETUEgaXMNCj4g PiBzdXBwb3J0ZWQuXG4iLCBfX0ZVTkNUSU9OX18pKTsNCj4gPiAgICAgfQ0KPiA+DQo+ID4gICAg IHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiBkaWZmIC0tZ2l0IGEvT3ZtZlBrZy9Jb01tdUR4ZS9J b01tdUJ1ZmZlci5jDQo+ID4gYi9Pdm1mUGtnL0lvTW11RHhlL0lvTW11QnVmZmVyLmMNCj4gPiBp bmRleCA1YWRhOGU5ZDU3YmQuLmQ2OTk2OWI2Yjc2MyAxMDA2NDQNCj4gPiAtLS0gYS9Pdm1mUGtn L0lvTW11RHhlL0lvTW11QnVmZmVyLmMNCj4gPiArKysgYi9Pdm1mUGtnL0lvTW11RHhlL0lvTW11 QnVmZmVyLmMNCj4gPiBAQCAtOSw3ICs5LDkgQEANCj4gPiAgICNpbmNsdWRlIDxMaWJyYXJ5L0Jh c2VNZW1vcnlMaWIuaD4NCj4gPiAgICNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+DQo+ID4g ICAjaW5jbHVkZSA8TGlicmFyeS9NZW1vcnlBbGxvY2F0aW9uTGliLmg+DQo+ID4gKyNpbmNsdWRl IDxMaWJyYXJ5L01lbUVuY3J5cHRTZXZMaWIuaD4NCj4gPiAgICNpbmNsdWRlIDxMaWJyYXJ5L01l bUVuY3J5cHRUZHhMaWIuaD4NCj4gPiArI2luY2x1ZGUgPExpYnJhcnkvUGNkTGliLmg+DQo+ID4g ICAjaW5jbHVkZSA8TGlicmFyeS9VZWZpQm9vdFNlcnZpY2VzVGFibGVMaWIuaD4NCj4gPiAgICNp bmNsdWRlICJJb01tdUludGVybmFsLmgiDQo+ID4NCj4gPiBAQCAtMTA1LDYgKzEwNyw3IEBAIElv TW11SW5pdFJlc2VydmVkU2hhcmVkTWVtICgNCj4gPiAgICAgVUlOVE4gICAgICAgICAgICAgICAg ICAgICBUb3RhbFBhZ2VzOw0KPiA+ICAgICBJT01NVV9SRVNFUlZFRF9NRU1fUkFOR0UgICpNZW1S YW5nZTsNCj4gPiAgICAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgICBQaHlzaWNhbEFkZHJlc3M7 DQo+ID4gKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICBTaGFyZWRBZGRyZXNzOw0KPiA+DQo+ ID4gICAgIGlmICghbVJlc2VydmVkU2hhcmVkTWVtU3VwcG9ydGVkKSB7DQo+ID4gICAgICAgcmV0 dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gPiBAQCAtMTI5LDEyICsxMzIsMjUgQEAgSW9NbXVJbml0 UmVzZXJ2ZWRTaGFyZWRNZW0gKA0KPiA+ICAgICAgIE1lbVJhbmdlLT5TdGFydEFkZHJlc3NPZk1l bVJhbmdlID0gUGh5c2ljYWxBZGRyZXNzOw0KPiA+DQo+ID4gICAgICAgZm9yIChJbmRleDIgPSAw OyBJbmRleDIgPCBNZW1SYW5nZS0+U2xvdHM7IEluZGV4MisrKSB7DQo+ID4gLSAgICAgIFN0YXR1 cyA9IE1lbUVuY3J5cHRUZHhTZXRQYWdlU2hhcmVkQml0ICgNCj4gPiAtICAgICAgICAgICAgICAg ICAwLA0KPiA+IC0gICAgICAgICAgICAgICAgIChVSU5UNjQpKFVJTlROKShNZW1SYW5nZS0+U3Rh cnRBZGRyZXNzT2ZNZW1SYW5nZSArDQo+ID4gSW5kZXgyICogU0laRV9PRl9NRU1fUkFOR0UgKE1l bVJhbmdlKSArIE1lbVJhbmdlLT5IZWFkZXJTaXplKSwNCj4gPiAtICAgICAgICAgICAgICAgICBF RklfU0laRV9UT19QQUdFUyAoTWVtUmFuZ2UtPkRhdGFTaXplKQ0KPiA+IC0gICAgICAgICAgICAg ICAgICk7DQo+ID4gLSAgICAgIEFTU0VSVCAoIUVGSV9FUlJPUiAoU3RhdHVzKSk7DQo+ID4gKyAg ICAgIFNoYXJlZEFkZHJlc3MgPSAoVUlOVDY0KShVSU5UTikoTWVtUmFuZ2UtDQo+ID4gPlN0YXJ0 QWRkcmVzc09mTWVtUmFuZ2UgKyBJbmRleDIgKiBTSVpFX09GX01FTV9SQU5HRQ0KPiAoTWVtUmFu Z2UpDQo+ID4gKyBNZW1SYW5nZS0+SGVhZGVyU2l6ZSk7DQo+ID4gKw0KPiA+ICsgICAgICBpZiAo Q0NfR1VFU1RfSVNfU0VWIChQY2RHZXQ2NA0KPiA+IChQY2RDb25maWRlbnRpYWxDb21wdXRpbmdH dWVzdEF0dHIpKSkgew0KPiA+ICsgICAgICAgIFN0YXR1cyA9IE1lbUVuY3J5cHRTZXZDbGVhclBh Z2VFbmNNYXNrICgNCj4gPiArICAgICAgICAgICAgICAgICAgIDAsDQo+ID4gKyAgICAgICAgICAg ICAgICAgICBTaGFyZWRBZGRyZXNzLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgRUZJX1NJWkVf VE9fUEFHRVMgKE1lbVJhbmdlLT5EYXRhU2l6ZSkNCj4gPiArICAgICAgICAgICAgICAgICAgICk7 DQo+ID4gKyAgICAgICAgQVNTRVJUICghRUZJX0VSUk9SIChTdGF0dXMpKTsNCj4gPiArICAgICAg fSBlbHNlIGlmIChDQ19HVUVTVF9JU19URFggKFBjZEdldDY0DQo+ID4gKFBjZENvbmZpZGVudGlh bENvbXB1dGluZ0d1ZXN0QXR0cikpKSB7DQo+ID4gKyAgICAgICAgU3RhdHVzID0gTWVtRW5jcnlw dFRkeFNldFBhZ2VTaGFyZWRCaXQgKA0KPiA+ICsgICAgICAgICAgICAgICAgICAgMCwNCj4gPiAr ICAgICAgICAgICAgICAgICAgIFNoYXJlZEFkZHJlc3MsDQo+ID4gKyAgICAgICAgICAgICAgICAg ICBFRklfU0laRV9UT19QQUdFUyAoTWVtUmFuZ2UtPkRhdGFTaXplKQ0KPiA+ICsgICAgICAgICAg ICAgICAgICAgKTsNCj4gPiArICAgICAgICBBU1NFUlQgKCFFRklfRVJST1IgKFN0YXR1cykpOw0K PiA+ICsgICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgIEFTU0VSVCAoRkFMU0UpOw0KPiA+ICsg ICAgICB9DQo+ID4gICAgICAgfQ0KPiA+DQo+ID4gICAgICAgUGh5c2ljYWxBZGRyZXNzICs9IChN ZW1SYW5nZS0+U2xvdHMgKiBTSVpFX09GX01FTV9SQU5HRQ0KPiA+IChNZW1SYW5nZSkpOw0KPiA+ IEBAIC0xNTYsMTYgKzE3MiwzMCBAQCBJb01tdVJlbGVhc2VSZXNlcnZlZFNoYXJlZE1lbSAoDQo+ ID4gICAgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiA+ICAgICBVSU5UMzIg ICAgICAgICAgICAgICAgICAgIEluZGV4MSwgSW5kZXgyOw0KPiA+ICAgICBJT01NVV9SRVNFUlZF RF9NRU1fUkFOR0UgICpNZW1SYW5nZTsNCj4gPiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAg IFNoYXJlZEFkZHJlc3M7DQo+ID4NCj4gPiAgICAgZm9yIChJbmRleDEgPSAwOyBJbmRleDEgPCBB UlJBWV9TSVpFIChtUmVzZXJ2ZWRNZW1SYW5nZXMpOw0KPiBJbmRleDErKykNCj4gPiB7DQo+ID4g ICAgICAgTWVtUmFuZ2UgPSAmbVJlc2VydmVkTWVtUmFuZ2VzW0luZGV4MV07DQo+ID4gICAgICAg Zm9yIChJbmRleDIgPSAwOyBJbmRleDIgPCBNZW1SYW5nZS0+U2xvdHM7IEluZGV4MisrKSB7DQo+ ID4gLSAgICAgIFN0YXR1cyA9IE1lbUVuY3J5cHRUZHhDbGVhclBhZ2VTaGFyZWRCaXQgKA0KPiA+ IC0gICAgICAgICAgICAgICAgIDAsDQo+ID4gLSAgICAgICAgICAgICAgICAgKFVJTlQ2NCkoVUlO VE4pKE1lbVJhbmdlLT5TdGFydEFkZHJlc3NPZk1lbVJhbmdlICsNCj4gPiBJbmRleDIgKiBTSVpF X09GX01FTV9SQU5HRSAoTWVtUmFuZ2UpICsgTWVtUmFuZ2UtPkhlYWRlclNpemUpLA0KPiA+IC0g ICAgICAgICAgICAgICAgIEVGSV9TSVpFX1RPX1BBR0VTIChNZW1SYW5nZS0+RGF0YVNpemUpDQo+ ID4gLSAgICAgICAgICAgICAgICAgKTsNCj4gPiAtICAgICAgQVNTRVJUICghRUZJX0VSUk9SIChT dGF0dXMpKTsNCj4gPiArICAgICAgU2hhcmVkQWRkcmVzcyA9IChVSU5UNjQpKFVJTlROKShNZW1S YW5nZS0NCj4gPiA+U3RhcnRBZGRyZXNzT2ZNZW1SYW5nZSArIEluZGV4MiAqIFNJWkVfT0ZfTUVN X1JBTkdFDQo+IChNZW1SYW5nZSkNCj4gPiArIE1lbVJhbmdlLT5IZWFkZXJTaXplKTsNCj4gPiAr DQo+ID4gKyAgICAgIGlmIChDQ19HVUVTVF9JU19TRVYgKFBjZEdldDY0DQo+ID4gKFBjZENvbmZp ZGVudGlhbENvbXB1dGluZ0d1ZXN0QXR0cikpKSB7DQo+ID4gKyAgICAgICAgU3RhdHVzID0gTWVt RW5jcnlwdFNldlNldFBhZ2VFbmNNYXNrICgNCj4gPiArICAgICAgICAgICAgICAgICAgIDAsDQo+ ID4gKyAgICAgICAgICAgICAgICAgICBTaGFyZWRBZGRyZXNzLA0KPiA+ICsgICAgICAgICAgICAg ICAgICAgRUZJX1NJWkVfVE9fUEFHRVMgKE1lbVJhbmdlLT5EYXRhU2l6ZSkNCj4gPiArICAgICAg ICAgICAgICAgICAgICk7DQo+ID4gKyAgICAgICAgQVNTRVJUICghRUZJX0VSUk9SIChTdGF0dXMp KTsNCj4gPiArICAgICAgfSBlbHNlIGlmIChDQ19HVUVTVF9JU19URFggKFBjZEdldDY0DQo+ID4g KFBjZENvbmZpZGVudGlhbENvbXB1dGluZ0d1ZXN0QXR0cikpKSB7DQo+ID4gKyAgICAgICAgU3Rh dHVzID0gTWVtRW5jcnlwdFRkeENsZWFyUGFnZVNoYXJlZEJpdCAoDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAwLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgU2hhcmVkQWRkcmVzcywNCj4gPiAr ICAgICAgICAgICAgICAgICAgIEVGSV9TSVpFX1RPX1BBR0VTIChNZW1SYW5nZS0+RGF0YVNpemUp DQo+ID4gKyAgICAgICAgICAgICAgICAgICApOw0KPiA+ICsgICAgICAgIEFTU0VSVCAoIUVGSV9F UlJPUiAoU3RhdHVzKSk7DQo+ID4gKyAgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgQVNTRVJU IChGQUxTRSk7DQo+ID4gKyAgICAgIH0NCj4gPiAgICAgICB9DQo+ID4gICAgIH0NCj4gPg0KPiA+ DQo+ID4gPg0KPiA+ID4gQ2M6IEVyZGVtIEFrdGFzIDxlcmRlbWFrdGFzQGdvb2dsZS5jb20+DQo+ ID4gPiBDYzogSmFtZXMgQm90dG9tbGV5IDxqZWpiQGxpbnV4LmlibS5jb20+DQo+ID4gPiBDYzog Smlld2VuIFlhbyA8amlld2VuLnlhb0BpbnRlbC5jb20+DQo+ID4gPiBDYzogVG9tIExlbmRhY2t5 IDx0aG9tYXMubGVuZGFja3lAYW1kLmNvbT4NCj4gPiA+IENjOiBHZXJkIEhvZmZtYW5uIDxrcmF4 ZWxAcmVkaGF0LmNvbT4NCj4gPiA+IFNpZ25lZC1vZmYtYnk6IE1pbiBYdSA8bWluLm0ueHVAaW50 ZWwuY29tPg0KPiA+ID4gLS0tDQo+ID4gPiAgIE92bWZQa2cvSW9NbXVEeGUvQW1kU2V2SW9NbXUu YyAgIHwgMTQyICsrKysrLS0tLS0tDQo+ID4gPiAgIE92bWZQa2cvSW9NbXVEeGUvSW9NbXVCdWZm ZXIuYyAgIHwgNDI1DQo+ID4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiA+ID4g ICBPdm1mUGtnL0lvTW11RHhlL0lvTW11RHhlLmluZiAgICB8ICAgMSArDQo+ID4gPiAgIE92bWZQ a2cvSW9NbXVEeGUvSW9NbXVJbnRlcm5hbC5oIHwgMTc5ICsrKysrKysrKysrKysNCj4gPiA+ICAg NCBmaWxlcyBjaGFuZ2VkLCA2NzYgaW5zZXJ0aW9ucygrKSwgNzEgZGVsZXRpb25zKC0pDQo+ID4g PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBPdm1mUGtnL0lvTW11RHhlL0lvTW11QnVmZmVyLmMNCj4g PiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IE92bWZQa2cvSW9NbXVEeGUvSW9NbXVJbnRlcm5hbC5o DQo+ID4gPg0KPiA+ID4gZGlmZiAtLWdpdCBhL092bWZQa2cvSW9NbXVEeGUvQW1kU2V2SW9NbXUu Yw0KPiA+IGIvT3ZtZlBrZy9Jb01tdUR4ZS9BbWRTZXZJb01tdS5jDQo+ID4gPiBpbmRleCA2YjY1 ODk3ZjAzMmEuLjc3ZTQ2YmJmNGE2MCAxMDA2NDQNCj4gPiA+IC0tLSBhL092bWZQa2cvSW9NbXVE eGUvQW1kU2V2SW9NbXUuYw0KPiA+ID4gKysrIGIvT3ZtZlBrZy9Jb01tdUR4ZS9BbWRTZXZJb01t dS5jDQo+ID4gPiBAQCAtMTUsMTggKzE1LDcgQEANCj4gPiA+ICAgI2luY2x1ZGUgPExpYnJhcnkv UGNkTGliLmg+DQo+ID4gPiAgICNpbmNsdWRlIDxDb25maWRlbnRpYWxDb21wdXRpbmdHdWVzdEF0 dHIuaD4NCj4gPiA+ICAgI2luY2x1ZGUgIkFtZFNldklvTW11LmgiDQo+ID4gPiAtDQo+ID4gPiAt I2RlZmluZSBNQVBfSU5GT19TSUcgIFNJR05BVFVSRV82NCAoJ00nLCAnQScsICdQJywgJ18nLCAn SScsICdOJywgJ0YnLCAnTycpDQo+ID4gPiAtDQo+ID4gPiAtdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ ID4gLSAgVUlOVDY0ICAgICAgICAgICAgICAgICAgIFNpZ25hdHVyZTsNCj4gPiA+IC0gIExJU1Rf RU5UUlkgICAgICAgICAgICAgICBMaW5rOw0KPiA+ID4gLSAgRURLSUlfSU9NTVVfT1BFUkFUSU9O ICAgIE9wZXJhdGlvbjsNCj4gPiA+IC0gIFVJTlROICAgICAgICAgICAgICAgICAgICBOdW1iZXJP ZkJ5dGVzOw0KPiA+ID4gLSAgVUlOVE4gICAgICAgICAgICAgICAgICAgIE51bWJlck9mUGFnZXM7 DQo+ID4gPiAtICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAgQ3J5cHRlZEFkZHJlc3M7DQo+ID4g PiAtICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAgUGxhaW5UZXh0QWRkcmVzczsNCj4gPiA+IC19 IE1BUF9JTkZPOw0KPiA+ID4gKyNpbmNsdWRlICJJb01tdUludGVybmFsLmgiDQo+ID4gPg0KPiA+ ID4gICAvLw0KPiA+ID4gICAvLyBMaXN0IG9mIHRoZSBNQVBfSU5GTyBzdHJ1Y3R1cmVzIHRoYXQg aGF2ZSBiZWVuIHNldCB1cCBieQ0KPiA+IElvTW11TWFwKCkgYW5kIG5vdA0KPiA+ID4gQEAgLTM1 LDcgKzI0LDEwIEBAIHR5cGVkZWYgc3RydWN0IHsNCj4gPiA+ICAgLy8NCj4gPiA+ICAgU1RBVElD IExJU1RfRU5UUlkgIG1NYXBJbmZvcyA9IElOSVRJQUxJWkVfTElTVF9IRUFEX1ZBUklBQkxFDQo+ ID4gKG1NYXBJbmZvcyk7DQo+ID4gPg0KPiA+ID4gLSNkZWZpbmUgQ09NTU9OX0JVRkZFUl9TSUcg IFNJR05BVFVSRV82NCAoJ0MnLCAnTScsICdOJywgJ0InLCAnVScsICdGJywNCj4gPiAnRicsICdS JykNCj4gPiA+ICsvLw0KPiA+ID4gKy8vIEluZGljYXRlIGlmIHRoZSBmZWF0dXJlIG9mIHJlc2Vy dmVkIG1lbW9yeSBpcyBzdXBwb3J0ZWQgaW4gRE1BDQo+ID4gb3BlcmF0aW9uLg0KPiA+ID4gKy8v DQo+ID4gPiArQk9PTEVBTiAgbVJlc2VydmVkU2hhcmVkTWVtU3VwcG9ydGVkID0gRkFMU0U7DQo+ ID4gPg0KPiA+ID4gICAvLw0KPiA+ID4gICAvLyBBU0NJSSBuYW1lcyBmb3IgRURLSUlfSU9NTVVf T1BFUkFUSU9OIGNvbnN0YW50cywgZm9yIGRlYnVnDQo+ID4gbG9nZ2luZy4NCj4gPiA+IEBAIC01 MCwzMCArNDIsNiBAQA0KPiA+IG1CdXNNYXN0ZXJPcGVyYXRpb25OYW1lW0Vka2lpSW9NbXVPcGVy YXRpb25NYXhpbXVtXSA9IHsNCj4gPiA+ICAgICAiQ29tbW9uQnVmZmVyNjQiDQo+ID4gPiAgIH07 DQo+ID4gPg0KPiA+ID4gLS8vDQo+ID4gPiAtLy8gVGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgZW5h YmxlcyBNYXAoKSBhbmQgVW5tYXAoKSB0byBwZXJmb3JtIGluLQ0KPiA+IHBsYWNlDQo+ID4gPiAt Ly8gZGVjcnlwdGlvbiBhbmQgZW5jcnlwdGlvbiwgcmVzcGVjdGl2ZWx5LCBmb3INCj4gPiBCdXNN YXN0ZXJDb21tb25CdWZmZXJbNjRdDQo+ID4gPiAtLy8gb3BlcmF0aW9ucywgd2l0aG91dCBkeW5h bWljIG1lbW9yeSBhbGxvY2F0aW9uIG9yIHJlbGVhc2UuDQo+ID4gPiAtLy8NCj4gPiA+IC0vLyBC b3RoIENPTU1PTl9CVUZGRVJfSEVBREVSIGFuZA0KPiA+IENPTU1PTl9CVUZGRVJfSEVBREVSLlN0 YXNoQnVmZmVyIGFyZSBhbGxvY2F0ZWQNCj4gPiA+IC0vLyBieSBBbGxvY2F0ZUJ1ZmZlcigpIGFu ZCByZWxlYXNlZCBieSBGcmVlQnVmZmVyKCkuDQo+ID4gPiAtLy8NCj4gPiA+IC0jcHJhZ21hIHBh Y2sgKDEpDQo+ID4gPiAtdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ID4gLSAgVUlOVDY0ICAgIFNpZ25h dHVyZTsNCj4gPiA+IC0NCj4gPiA+IC0gIC8vDQo+ID4gPiAtICAvLyBBbHdheXMgYWxsb2NhdGVk IGZyb20gRWZpQm9vdFNlcnZpY2VzRGF0YSB0eXBlIG1lbW9yeSwgYW5kDQo+IGFsd2F5cw0KPiA+ ID4gLSAgLy8gZW5jcnlwdGVkLg0KPiA+ID4gLSAgLy8NCj4gPiA+IC0gIFZPSUQgICAgICAqU3Rh c2hCdWZmZXI7DQo+ID4gPiAtDQo+ID4gPiAtICAvLw0KPiA+ID4gLSAgLy8gRm9sbG93ZWQgYnkg dGhlIGFjdHVhbCBjb21tb24gYnVmZmVyLCBzdGFydGluZyBhdCB0aGUgbmV4dCBwYWdlLg0KPiA+ ID4gLSAgLy8NCj4gPiA+IC19IENPTU1PTl9CVUZGRVJfSEVBREVSOw0KPiA+ID4gLSNwcmFnbWEg cGFjayAoKQ0KPiA+ID4gLQ0KPiA+ID4gICAvKioNCj4gPiA+ICAgICBQcm92aWRlcyB0aGUgY29u dHJvbGxlci1zcGVjaWZpYyBhZGRyZXNzZXMgcmVxdWlyZWQgdG8gYWNjZXNzIHN5c3RlbQ0KPiA+ IG1lbW9yeQ0KPiA+ID4gICAgIGZyb20gYSBETUEgYnVzIG1hc3Rlci4gT24gU0VWL1REWCBndWVz dCwgdGhlIERNQSBvcGVyYXRpb25zDQo+IG11c3QNCj4gPiBiZSBwZXJmb3JtZWQgb24NCj4gPiA+ IEBAIC0xMzksNiArMTA3LDggQEAgSW9NbXVNYXAgKA0KPiA+ID4gICAgICAgcmV0dXJuIEVGSV9J TlZBTElEX1BBUkFNRVRFUjsNCj4gPiA+ICAgICB9DQo+ID4gPg0KPiA+ID4gKyAgU3RhdHVzID0g RUZJX1NVQ0NFU1M7DQo+ID4gPiArDQo+ID4gPiAgICAgLy8NCj4gPiA+ICAgICAvLyBBbGxvY2F0 ZSBhIE1BUF9JTkZPIHN0cnVjdHVyZSB0byByZW1lbWJlciB0aGUgbWFwcGluZyB3aGVuDQo+ID4g VW5tYXAoKSBpcw0KPiA+ID4gICAgIC8vIGNhbGxlZCBsYXRlci4NCj4gPiA+IEBAIC0xNTMsMTEg KzEyMywxMiBAQCBJb01tdU1hcCAoDQo+ID4gPiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgTUFQX0lO Rk8gc3RydWN0dXJlLCBleGNlcHQgdGhlIFBsYWluVGV4dEFkZHJlc3MNCj4gZmllbGQNCj4gPiA+ ICAgICAvLw0KPiA+ID4gICAgIFplcm9NZW0gKCZNYXBJbmZvLT5MaW5rLCBzaXplb2YgTWFwSW5m by0+TGluayk7DQo+ID4gPiAtICBNYXBJbmZvLT5TaWduYXR1cmUgICAgICA9IE1BUF9JTkZPX1NJ RzsNCj4gPiA+IC0gIE1hcEluZm8tPk9wZXJhdGlvbiAgICAgID0gT3BlcmF0aW9uOw0KPiA+ID4g LSAgTWFwSW5mby0+TnVtYmVyT2ZCeXRlcyAgPSAqTnVtYmVyT2ZCeXRlczsNCj4gPiA+IC0gIE1h cEluZm8tPk51bWJlck9mUGFnZXMgID0gRUZJX1NJWkVfVE9fUEFHRVMgKE1hcEluZm8tDQo+ID4g Pk51bWJlck9mQnl0ZXMpOw0KPiA+ID4gLSAgTWFwSW5mby0+Q3J5cHRlZEFkZHJlc3MgPSAoVUlO VE4pSG9zdEFkZHJlc3M7DQo+ID4gPiArICBNYXBJbmZvLT5TaWduYXR1cmUgICAgICAgICA9IE1B UF9JTkZPX1NJRzsNCj4gPiA+ICsgIE1hcEluZm8tPk9wZXJhdGlvbiAgICAgICAgID0gT3BlcmF0 aW9uOw0KPiA+ID4gKyAgTWFwSW5mby0+TnVtYmVyT2ZCeXRlcyAgICAgPSAqTnVtYmVyT2ZCeXRl czsNCj4gPiA+ICsgIE1hcEluZm8tPk51bWJlck9mUGFnZXMgICAgID0gRUZJX1NJWkVfVE9fUEFH RVMgKE1hcEluZm8tDQo+ID4gPk51bWJlck9mQnl0ZXMpOw0KPiA+ID4gKyAgTWFwSW5mby0+Q3J5 cHRlZEFkZHJlc3MgICAgPSAoVUlOVE4pSG9zdEFkZHJlc3M7DQo+ID4gPiArICBNYXBJbmZvLT5S ZXNlcnZlZE1lbUJpdG1hcCA9IDA7DQo+ID4gPg0KPiA+ID4gICAgIC8vDQo+ID4gPiAgICAgLy8g SW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQgYmVsb3csIHdlIHBvaW50ICJNYXBJbmZvLQ0KPiA+ID5Q bGFpblRleHRBZGRyZXNzIiB0byB0aGUNCj4gPiA+IEBAIC0xODUsMTIgKzE1NiwxMSBAQCBJb01t dU1hcCAoDQo+ID4gPiAgICAgICAgIC8vDQo+ID4gPiAgICAgICAgIC8vIEFsbG9jYXRlIHRoZSBp bXBsaWNpdCBwbGFpbnRleHQgYm91bmNlIGJ1ZmZlci4NCj4gPiA+ICAgICAgICAgLy8NCj4gPiA+ IC0gICAgICBTdGF0dXMgPSBnQlMtPkFsbG9jYXRlUGFnZXMgKA0KPiA+ID4gLSAgICAgICAgICAg ICAgICAgICAgICBBbGxvY2F0ZVR5cGUsDQo+ID4gPiAtICAgICAgICAgICAgICAgICAgICAgIEVm aUJvb3RTZXJ2aWNlc0RhdGEsDQo+ID4gPiAtICAgICAgICAgICAgICAgICAgICAgIE1hcEluZm8t Pk51bWJlck9mUGFnZXMsDQo+ID4gPiAtICAgICAgICAgICAgICAgICAgICAgICZNYXBJbmZvLT5Q bGFpblRleHRBZGRyZXNzDQo+ID4gPiAtICAgICAgICAgICAgICAgICAgICAgICk7DQo+ID4gPiAr ICAgICAgU3RhdHVzID0gSW9NbXVBbGxvY2F0ZUJvdW5jZUJ1ZmZlciAoDQo+ID4gPiArICAgICAg ICAgICAgICAgICBBbGxvY2F0ZVR5cGUsDQo+ID4gPiArICAgICAgICAgICAgICAgICBFZmlCb290 U2VydmljZXNEYXRhLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgTWFwSW5mbw0KPiA+ID4gKyAg ICAgICAgICAgICAgICAgKTsNCj4gPiA+ICAgICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KPiA+ID4gICAgICAgICAgIGdvdG8gRnJlZU1hcEluZm87DQo+ID4gPiAgICAgICAgIH0NCj4g PiA+IEBAIC0yNDEsNyArMjExLDggQEAgSW9NbXVNYXAgKA0KPiA+ID4gICAgICAgICAvLyBQb2lu dCAiRGVjcnlwdGlvblNvdXJjZSIgdG8gdGhlIHN0YXNoIGJ1ZmZlciBzbyB0aGF0IHdlIGRlY3J5 cHQNCj4gPiA+ICAgICAgICAgLy8gaXQgdG8gdGhlIG9yaWdpbmFsIGxvY2F0aW9uLCBhZnRlciB0 aGUgc3dpdGNoIHN0YXRlbWVudC4NCj4gPiA+ICAgICAgICAgLy8NCj4gPiA+IC0gICAgICBEZWNy eXB0aW9uU291cmNlID0gQ29tbW9uQnVmZmVySGVhZGVyLT5TdGFzaEJ1ZmZlcjsNCj4gPiA+ICsg ICAgICBEZWNyeXB0aW9uU291cmNlICAgICAgICAgICA9IENvbW1vbkJ1ZmZlckhlYWRlci0+U3Rh c2hCdWZmZXI7DQo+ID4gPiArICAgICAgTWFwSW5mby0+UmVzZXJ2ZWRNZW1CaXRtYXAgPSBDb21t b25CdWZmZXJIZWFkZXItDQo+ID4gPlJlc2VydmVkTWVtQml0bWFwOw0KPiA+ID4gICAgICAgICBi cmVhazsNCj4gPiA+DQo+ID4gPiAgICAgICBkZWZhdWx0Og0KPiA+ID4gQEAgLTI2NCwxMiArMjM1 LDE2IEBAIElvTW11TWFwICgNCj4gPiA+ICAgICB9IGVsc2UgaWYgKENDX0dVRVNUX0lTX1REWCAo UGNkR2V0NjQNCj4gPiAoUGNkQ29uZmlkZW50aWFsQ29tcHV0aW5nR3Vlc3RBdHRyKSkpIHsNCj4g PiA+ICAgICAgIC8vDQo+ID4gPiAgICAgICAvLyBTZXQgdGhlIG1lbW9yeSBzaGFyZWQgYml0Lg0K PiA+ID4gKyAgICAvLyBJZiBNYXBJbmZvLT5SZXNlcnZlZE1lbUJpdG1hcCBpcyAwLCBpdCBtZWFu cyB0aGUgYm91bmNlIGJ1ZmZlcg0KPiA+IGlzIG5vdCBhbGxvY2F0ZWQNCj4gPiA+ICsgICAgLy8g ZnJvbSB0aGUgcHJlLWFsbG9jYXRlZCBzaGFyZWQgbWVtb3J5LCBzbyBpdCBtdXN0IGJlIGNvbnZl cnRlZA0KPiB0bw0KPiA+IHNoYXJlZCBtZW1vcnkgaGVyZS4NCj4gPiA+ICAgICAgIC8vDQo+ID4g PiAtICAgIFN0YXR1cyA9IE1lbUVuY3J5cHRUZHhTZXRQYWdlU2hhcmVkQml0ICgNCj4gPiA+IC0g ICAgICAgICAgICAgICAwLA0KPiA+ID4gLSAgICAgICAgICAgICAgIE1hcEluZm8tPlBsYWluVGV4 dEFkZHJlc3MsDQo+ID4gPiAtICAgICAgICAgICAgICAgTWFwSW5mby0+TnVtYmVyT2ZQYWdlcw0K PiA+ID4gLSAgICAgICAgICAgICAgICk7DQo+ID4gPiArICAgIGlmIChNYXBJbmZvLT5SZXNlcnZl ZE1lbUJpdG1hcCA9PSAwKSB7DQo+ID4gPiArICAgICAgU3RhdHVzID0gTWVtRW5jcnlwdFRkeFNl dFBhZ2VTaGFyZWRCaXQgKA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgMCwNCj4gPiA+ICsgICAg ICAgICAgICAgICAgIE1hcEluZm8tPlBsYWluVGV4dEFkZHJlc3MsDQo+ID4gPiArICAgICAgICAg ICAgICAgICBNYXBJbmZvLT5OdW1iZXJPZlBhZ2VzDQo+ID4gPiArICAgICAgICAgICAgICAgICAp Ow0KPiA+ID4gKyAgICB9DQo+ID4gPiAgICAgfSBlbHNlIHsNCj4gPiA+ICAgICAgIEFTU0VSVCAo RkFMU0UpOw0KPiA+ID4gICAgIH0NCj4gPiA+IEBAIC0zMTEsMTIgKzI4NiwxMyBAQCBJb01tdU1h cCAoDQo+ID4gPg0KPiA+ID4gICAgIERFQlVHICgoDQo+ID4gPiAgICAgICBERUJVR19WRVJCT1NF LA0KPiA+ID4gLSAgICAiJWE6IE1hcHBpbmc9MHglcCBEZXZpY2UoUGxhaW5UZXh0KT0weCVMeCBD cnlwdGVkPTB4JUx4DQo+ID4gUGFnZXM9MHglTHhcbiIsDQo+ID4gPiArICAgICIlYTogTWFwcGlu Zz0weCVwIERldmljZShQbGFpblRleHQpPTB4JUx4IENyeXB0ZWQ9MHglTHgNCj4gPiBQYWdlcz0w eCVMeCwgUmVzZXJ2ZWRNZW1CaXRtYXA9MHglTHhcbiIsDQo+ID4gPiAgICAgICBfX0ZVTkNUSU9O X18sDQo+ID4gPiAgICAgICBNYXBJbmZvLA0KPiA+ID4gICAgICAgTWFwSW5mby0+UGxhaW5UZXh0 QWRkcmVzcywNCj4gPiA+ICAgICAgIE1hcEluZm8tPkNyeXB0ZWRBZGRyZXNzLA0KPiA+ID4gLSAg ICAoVUlOVDY0KU1hcEluZm8tPk51bWJlck9mUGFnZXMNCj4gPiA+ICsgICAgKFVJTlQ2NClNYXBJ bmZvLT5OdW1iZXJPZlBhZ2VzLA0KPiA+ID4gKyAgICBNYXBJbmZvLT5SZXNlcnZlZE1lbUJpdG1h cA0KPiA+ID4gICAgICAgKSk7DQo+ID4gPg0KPiA+ID4gICAgIHJldHVybiBFRklfU1VDQ0VTUzsN Cj4gPiA+IEBAIC00MzUsMTEgKzQxMSwxMyBAQCBJb01tdVVubWFwV29ya2VyICgNCj4gPiA+ICAg ICAgIC8vIFJlc3RvcmUgdGhlIG1lbW9yeSBzaGFyZWQgYml0IG1hc2sgb24gdGhlIGFyZWEgd2Ug dXNlZCB0byBob2xkDQo+ID4gdGhlDQo+ID4gPiAgICAgICAvLyBwbGFpbnRleHQuDQo+ID4gPiAg ICAgICAvLw0KPiA+ID4gLSAgICBTdGF0dXMgPSBNZW1FbmNyeXB0VGR4Q2xlYXJQYWdlU2hhcmVk Qml0ICgNCj4gPiA+IC0gICAgICAgICAgICAgICAwLA0KPiA+ID4gLSAgICAgICAgICAgICAgIE1h cEluZm8tPlBsYWluVGV4dEFkZHJlc3MsDQo+ID4gPiAtICAgICAgICAgICAgICAgTWFwSW5mby0+ TnVtYmVyT2ZQYWdlcw0KPiA+ID4gLSAgICAgICAgICAgICAgICk7DQo+ID4gPiArICAgIGlmIChN YXBJbmZvLT5SZXNlcnZlZE1lbUJpdG1hcCA9PSAwKSB7DQo+ID4gPiArICAgICAgU3RhdHVzID0g TWVtRW5jcnlwdFRkeENsZWFyUGFnZVNoYXJlZEJpdCAoDQo+ID4gPiArICAgICAgICAgICAgICAg ICAwLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgTWFwSW5mby0+UGxhaW5UZXh0QWRkcmVzcywN Cj4gPiA+ICsgICAgICAgICAgICAgICAgIE1hcEluZm8tPk51bWJlck9mUGFnZXMNCj4gPiA+ICsg ICAgICAgICAgICAgICAgICk7DQo+ID4gPiArICAgIH0NCj4gPiA+ICAgICB9IGVsc2Ugew0KPiA+ ID4gICAgICAgQVNTRVJUIChGQUxTRSk7DQo+ID4gPiAgICAgfQ0KPiA+ID4gQEAgLTQ3MCw4ICs0 NDgsOSBAQCBJb01tdVVubWFwV29ya2VyICgNCj4gPiA+ICAgICAgICAgKFZPSUQgKikoVUlOVE4p TWFwSW5mby0+UGxhaW5UZXh0QWRkcmVzcywNCj4gPiA+ICAgICAgICAgRUZJX1BBR0VTX1RPX1NJ WkUgKE1hcEluZm8tPk51bWJlck9mUGFnZXMpDQo+ID4gPiAgICAgICAgICk7DQo+ID4gPiArDQo+ ID4gPiAgICAgICBpZiAoIU1lbW9yeU1hcExvY2tlZCkgew0KPiA+ID4gLSAgICAgIGdCUy0+RnJl ZVBhZ2VzIChNYXBJbmZvLT5QbGFpblRleHRBZGRyZXNzLCBNYXBJbmZvLQ0KPiA+ID5OdW1iZXJP ZlBhZ2VzKTsNCj4gPiA+ICsgICAgICBJb01tdUZyZWVCb3VuY2VCdWZmZXIgKE1hcEluZm8pOw0K PiA+ID4gICAgICAgfQ0KPiA+ID4gICAgIH0NCj4gPiA+DQo+ID4gPiBAQCAtNTUxLDYgKzUzMCw3 IEBAIElvTW11QWxsb2NhdGVCdWZmZXIgKA0KPiA+ID4gICAgIFZPSUQgICAgICAgICAgICAgICAg ICAqU3Rhc2hCdWZmZXI7DQo+ID4gPiAgICAgVUlOVE4gICAgICAgICAgICAgICAgIENvbW1vbkJ1 ZmZlclBhZ2VzOw0KPiA+ID4gICAgIENPTU1PTl9CVUZGRVJfSEVBREVSICAqQ29tbW9uQnVmZmVy SGVhZGVyOw0KPiA+ID4gKyAgVUlOVDMyICAgICAgICAgICAgICAgIFJlc2VydmVkTWVtQml0bWFw Ow0KPiA+ID4NCj4gPiA+ICAgICBERUJVRyAoKA0KPiA+ID4gICAgICAgREVCVUdfVkVSQk9TRSwN Cj4gPiA+IEBAIC02MjAsMTIgKzYwMCwxMyBAQCBJb01tdUFsbG9jYXRlQnVmZmVyICgNCj4gPiA+ ICAgICAgIFBoeXNpY2FsQWRkcmVzcyA9IFNJWkVfNEdCIC0gMTsNCj4gPiA+ICAgICB9DQo+ID4g Pg0KPiA+ID4gLSAgU3RhdHVzID0gZ0JTLT5BbGxvY2F0ZVBhZ2VzICgNCj4gPiA+IC0gICAgICAg ICAgICAgICAgICBBbGxvY2F0ZU1heEFkZHJlc3MsDQo+ID4gPiAtICAgICAgICAgICAgICAgICAg TWVtb3J5VHlwZSwNCj4gPiA+IC0gICAgICAgICAgICAgICAgICBDb21tb25CdWZmZXJQYWdlcywN Cj4gPiA+IC0gICAgICAgICAgICAgICAgICAmUGh5c2ljYWxBZGRyZXNzDQo+ID4gPiAtICAgICAg ICAgICAgICAgICAgKTsNCj4gPiA+ICsgIFN0YXR1cyA9IElvTW11QWxsb2NhdGVDb21tb25CdWZm ZXIgKA0KPiA+ID4gKyAgICAgICAgICAgICBNZW1vcnlUeXBlLA0KPiA+ID4gKyAgICAgICAgICAg ICBDb21tb25CdWZmZXJQYWdlcywNCj4gPiA+ICsgICAgICAgICAgICAgJlBoeXNpY2FsQWRkcmVz cywNCj4gPiA+ICsgICAgICAgICAgICAgJlJlc2VydmVkTWVtQml0bWFwDQo+ID4gPiArICAgICAg ICAgICAgICk7DQo+ID4gPiArDQo+ID4gPiAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K PiA+ID4gICAgICAgZ290byBGcmVlU3Rhc2hCdWZmZXI7DQo+ID4gPiAgICAgfQ0KPiA+ID4gQEAg LTYzMyw4ICs2MTQsOSBAQCBJb01tdUFsbG9jYXRlQnVmZmVyICgNCj4gPiA+ICAgICBDb21tb25C dWZmZXJIZWFkZXIgPSAoVk9JRCAqKShVSU5UTilQaHlzaWNhbEFkZHJlc3M7DQo+ID4gPiAgICAg UGh5c2ljYWxBZGRyZXNzICAgKz0gRUZJX1BBR0VfU0laRTsNCj4gPiA+DQo+ID4gPiAtICBDb21t b25CdWZmZXJIZWFkZXItPlNpZ25hdHVyZSAgID0gQ09NTU9OX0JVRkZFUl9TSUc7DQo+ID4gPiAt ICBDb21tb25CdWZmZXJIZWFkZXItPlN0YXNoQnVmZmVyID0gU3Rhc2hCdWZmZXI7DQo+ID4gPiAr ICBDb21tb25CdWZmZXJIZWFkZXItPlNpZ25hdHVyZSAgICAgICAgID0gQ09NTU9OX0JVRkZFUl9T SUc7DQo+ID4gPiArICBDb21tb25CdWZmZXJIZWFkZXItPlN0YXNoQnVmZmVyICAgICAgID0gU3Rh c2hCdWZmZXI7DQo+ID4gPiArICBDb21tb25CdWZmZXJIZWFkZXItPlJlc2VydmVkTWVtQml0bWFw ID0NCj4gUmVzZXJ2ZWRNZW1CaXRtYXA7DQo+ID4gPg0KPiA+ID4gICAgICpIb3N0QWRkcmVzcyA9 IChWT0lEICopKFVJTlROKVBoeXNpY2FsQWRkcmVzczsNCj4gPiA+DQo+ID4gPiBAQCAtNzA3LDcg KzY4OSw3IEBAIElvTW11RnJlZUJ1ZmZlciAoDQo+ID4gPiAgICAgLy8gUmVsZWFzZSB0aGUgY29t bW9uIGJ1ZmZlciBpdHNlbGYuIFVubWFwKCkgaGFzIHJlLWVuY3J5cHRlZCBpdCBpbi0NCj4gPiBw bGFjZSwgc28NCj4gPiA+ICAgICAvLyBubyBuZWVkIHRvIHplcm8gaXQuDQo+ID4gPiAgICAgLy8N Cj4gPiA+IC0gIHJldHVybiBnQlMtPkZyZWVQYWdlcyAoKFVJTlROKUNvbW1vbkJ1ZmZlckhlYWRl ciwNCj4gPiBDb21tb25CdWZmZXJQYWdlcyk7DQo+ID4gPiArICByZXR1cm4gSW9NbXVGcmVlQ29t bW9uQnVmZmVyIChDb21tb25CdWZmZXJIZWFkZXIsDQo+ID4gQ29tbW9uQnVmZmVyUGFnZXMpOw0K PiA+ID4gICB9DQo+ID4gPg0KPiA+ID4gICAvKioNCj4gPiA+IEBAIC04NzgsNiArODYwLDExIEBA IElvTW11VW5tYXBBbGxNYXBwaW5ncyAoDQo+ID4gPiAgICAgICAgIFRSVUUgICAgICAvLyBNZW1v cnlNYXBMb2NrZWQNCj4gPiA+ICAgICAgICAgKTsNCj4gPiA+ICAgICB9DQo+ID4gPiArDQo+ID4g PiArICAvLw0KPiA+ID4gKyAgLy8gUmVsZWFzZSB0aGUgcmVzZXJ2ZWQgc2hhcmVkIG1lbW9yeSBh cyB3ZWxsLg0KPiA+ID4gKyAgLy8NCj4gPiA+ICsgIElvTW11UmVsZWFzZVJlc2VydmVkU2hhcmVk TWVtIChUUlVFKTsNCj4gPiA+ICAgfQ0KPiA+ID4NCj4gPiA+ICAgLyoqDQo+ID4gPiBAQCAtOTM2 LDYgKzkyMywxOSBAQCBJbnN0YWxsSW9NbXVQcm90b2NvbCAoDQo+ID4gPiAgICAgICBnb3RvIENs b3NlRXhpdEJvb3RFdmVudDsNCj4gPiA+ICAgICB9DQo+ID4gPg0KPiA+ID4gKyAgLy8NCj4gPiA+ ICsgIC8vIEN1cnJlbnRseSBvbmx5IFRkeCBndWVzdCBzdXBwb3J0IFJlc2VydmVkIHNoYXJlZCBt ZW1vcnkgZm9yDQo+IERNQQ0KPiA+IG9wZXJhdGlvbi4NCj4gPiA+ICsgIC8vDQo+ID4gPiArICBp ZiAoQ0NfR1VFU1RfSVNfVERYIChQY2RHZXQ2NA0KPiAoUGNkQ29uZmlkZW50aWFsQ29tcHV0aW5n R3Vlc3RBdHRyKSkpDQo+ID4gew0KPiA+ID4gKyAgICBtUmVzZXJ2ZWRTaGFyZWRNZW1TdXBwb3J0 ZWQgPSBUUlVFOw0KPiA+ID4gKyAgICBTdGF0dXMgICAgICAgICAgICAgICAgICAgICAgPSBJb01t dUluaXRSZXNlcnZlZFNoYXJlZE1lbSAoKTsNCj4gPiA+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPiA+ID4gKyAgICAgIG1SZXNlcnZlZFNoYXJlZE1lbVN1cHBvcnRlZCA9IEZBTFNF Ow0KPiA+ID4gKyAgICB9IGVsc2Ugew0KPiA+ID4gKyAgICAgIERFQlVHICgoREVCVUdfSU5GTywg IiVhOiBGZWF0dXJlIG9mIHJlc2VydmVkIG1lbW9yeSBmb3IgRE1BDQo+IGlzDQo+ID4gc3VwcG9y dGVkLlxuIiwgX19GVU5DVElPTl9fKSk7DQo+ID4gPiArICAgIH0NCj4gPiA+ICsgIH0NCj4gPiA+ ICsNCj4gPiA+ICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gPg0KPiA+ID4gICBDbG9zZUV4 aXRCb290RXZlbnQ6DQo+ID4gPiBkaWZmIC0tZ2l0IGEvT3ZtZlBrZy9Jb01tdUR4ZS9Jb01tdUJ1 ZmZlci5jDQo+ID4gYi9Pdm1mUGtnL0lvTW11RHhlL0lvTW11QnVmZmVyLmMNCj4gPiA+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0DQo+ID4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjVhZGE4ZTlkNTdiZA0K PiA+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ID4gKysrIGIvT3ZtZlBrZy9Jb01tdUR4ZS9Jb01tdUJ1 ZmZlci5jDQo+ID4gPiBAQCAtMCwwICsxLDQyNSBAQA0KPiA+ID4gKy8qKiBAZmlsZQ0KPiA+ID4g Kw0KPiA+ID4gKyAgQ29weXJpZ2h0IChjKSAyMDIyLCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJp Z2h0cyByZXNlcnZlZC48QlI+DQo+ID4gPiArDQo+ID4gPiArICBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ID4gKw0KPiA+ID4gKyoqLw0KPiA+ID4gKyNp bmNsdWRlIDxMaWJyYXJ5L0Jhc2VMaWIuaD4NCj4gPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9CYXNl TWVtb3J5TGliLmg+DQo+ID4gPiArI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCj4gPiA+ ICsjaW5jbHVkZSA8TGlicmFyeS9NZW1vcnlBbGxvY2F0aW9uTGliLmg+DQo+ID4gPiArI2luY2x1 ZGUgPExpYnJhcnkvTWVtRW5jcnlwdFRkeExpYi5oPg0KPiA+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5 L1VlZmlCb290U2VydmljZXNUYWJsZUxpYi5oPg0KPiA+ID4gKyNpbmNsdWRlICJJb01tdUludGVy bmFsLmgiDQo+ID4gPiArDQo+ID4gPiArZXh0ZXJuIEJPT0xFQU4gIG1SZXNlcnZlZFNoYXJlZE1l bVN1cHBvcnRlZDsNCj4gPiA+ICsNCj4gPiA+ICsjZGVmaW5lIFNJWkVfT0ZfTUVNX1JBTkdFKE1l bVJhbmdlKSAgKE1lbVJhbmdlLT5IZWFkZXJTaXplDQo+ICsNCj4gPiBNZW1SYW5nZS0+RGF0YVNp emUpDQo+ID4gPiArDQo+ID4gPiArI2RlZmluZSBSRVNFUlZFRF9NRU1fQklUTUFQXzRLX01BU0sg ICAgMHhmDQo+ID4gPiArI2RlZmluZSBSRVNFUlZFRF9NRU1fQklUTUFQXzMyS19NQVNLICAgMHhm ZjANCj4gPiA+ICsjZGVmaW5lIFJFU0VSVkVEX01FTV9CSVRNQVBfMTI4S19NQVNLICAweDMwMDAN Cj4gPiA+ICsjZGVmaW5lIFJFU0VSVkVEX01FTV9CSVRNQVBfMU1fTUFTSyAgICAweDQwMDAwDQo+ ID4gPiArI2RlZmluZSBSRVNFUlZFRF9NRU1fQklUTUFQXzJNX01BU0sgICAgMHgxODAwMDANCj4g PiA+ICsjZGVmaW5lIFJFU0VSVkVEX01FTV9CSVRNQVBfTUFTSyAgICAgICAweDFmZmZmZg0KPiA+ ID4gKw0KPiA+ID4gK1NUQVRJQyBJT01NVV9SRVNFUlZFRF9NRU1fUkFOR0UgIG1SZXNlcnZlZE1l bVJhbmdlc1tdID0gew0KPiA+ID4gKyAgeyBSRVNFUlZFRF9NRU1fQklUTUFQXzRLX01BU0ssICAg MCwgIDQsIFNJWkVfNEtCLCAgIFNJWkVfNEtCLA0KPiAwIH0sDQo+ID4gPiArICB7IFJFU0VSVkVE X01FTV9CSVRNQVBfMzJLX01BU0ssICA0LCAgOCwgU0laRV8zMktCLCAgU0laRV80S0IsDQo+ID4g MCB9LA0KPiA+ID4gKyAgeyBSRVNFUlZFRF9NRU1fQklUTUFQXzEyOEtfTUFTSywgMTIsIDIsIFNJ WkVfMTI4S0IsDQo+IFNJWkVfNEtCLA0KPiA+IDAgfSwNCj4gPiA+ICsgIHsgUkVTRVJWRURfTUVN X0JJVE1BUF8xTV9NQVNLLCAgIDE0LCAxLCBTSVpFXzFNQiwgICBTSVpFXzRLQiwNCj4gPiAwIH0s DQo+ID4gPiArICB7IFJFU0VSVkVEX01FTV9CSVRNQVBfMk1fTUFTSywgICAxNSwgMiwgU0laRV8y TUIsICAgU0laRV80S0IsDQo+ID4gMCB9LA0KPiA+ID4gK307DQo+ID4gPiArDQo+ID4gPiArLy8N Cj4gPiA+ICsvLyBCaXRtYXAgb2YgdGhlIGFsbG9jYXRpb24gb2YgcmVzZXJ2ZWQgbWVtb3J5Lg0K PiA+ID4gKy8vDQo+ID4gPiArU1RBVElDIFVJTlQzMiAgbVJlc2VydmVkTWVtQml0bWFwID0gMDsN Cj4gPiA+ICsNCj4gPiA+ICsvLw0KPiA+ID4gKy8vIFN0YXJ0IGFkZHJlc3Mgb2YgdGhlIHJlc2Vy dmVkIG1lbW9yeSByZWdpb24uDQo+ID4gPiArLy8NCj4gPiA+ICtTVEFUSUMgRUZJX1BIWVNJQ0FM X0FERFJFU1MgIG1SZXNlcnZlZFNoYXJlZE1lbUFkZHJlc3MgPSAwOw0KPiA+ID4gKw0KPiA+ID4g Ky8vDQo+ID4gPiArLy8gVG90YWwgc2l6ZSBvZiB0aGUgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbi4N Cj4gPiA+ICsvLw0KPiA+ID4gK1NUQVRJQyBVSU5UMzIgIG1SZXNlcnZlZFNoYXJlZE1lbVNpemUg PSAwOw0KPiA+ID4gKw0KPiA+ID4gKy8qKg0KPiA+ID4gKyAqIENhbGN1bGF0ZSB0aGUgc2l6ZSBv ZiByZXNlcnZlZCBtZW1vcnkuDQo+ID4gPiArICoNCj4gPiA+ICsgKiBAcmV0dmFsIFVJTlQzMiAg IFNpemUgb2YgdGhlIHJlc2VydmVkIG1lbW9yeQ0KPiA+ID4gKyAqLw0KPiA+ID4gK1NUQVRJQw0K PiA+ID4gK1VJTlQzMg0KPiA+ID4gK0NhbGN1YXRlUmVzZXJ2ZWRNZW1TaXplICgNCj4gPiA+ICsg IFZPSUQNCj4gPiA+ICsgICkNCj4gPiA+ICt7DQo+ID4gPiArICBVSU5UMzIgICAgICAgICAgICAg ICAgICAgIEluZGV4Ow0KPiA+ID4gKyAgSU9NTVVfUkVTRVJWRURfTUVNX1JBTkdFICAqTWVtUmFu Z2U7DQo+ID4gPiArDQo+ID4gPiArICBpZiAobVJlc2VydmVkU2hhcmVkTWVtU2l6ZSAhPSAwKSB7 DQo+ID4gPiArICAgIHJldHVybiBtUmVzZXJ2ZWRTaGFyZWRNZW1TaXplOw0KPiA+ID4gKyAgfQ0K PiA+ID4gKw0KPiA+ID4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgQVJSQVlfU0laRSAobVJl c2VydmVkTWVtUmFuZ2VzKTsgSW5kZXgrKykNCj4gew0KPiA+ID4gKyAgICBNZW1SYW5nZSAgICAg ICAgICAgICAgICA9ICZtUmVzZXJ2ZWRNZW1SYW5nZXNbSW5kZXhdOw0KPiA+ID4gKyAgICBtUmVz ZXJ2ZWRTaGFyZWRNZW1TaXplICs9IChTSVpFX09GX01FTV9SQU5HRSAoTWVtUmFuZ2UpDQo+ICoN Cj4gPiBNZW1SYW5nZS0+U2xvdHMpOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgcmV0 dXJuIG1SZXNlcnZlZFNoYXJlZE1lbVNpemU7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gKy8q Kg0KPiA+ID4gKyAqIEFsbG9jYXRlIGEgbWVtb3J5IHJlZ2lvbiBhbmQgY29udmVydCBpdCB0byBi ZSBzaGFyZWQuIFRoaXMgbWVtb3J5DQo+ID4gcmVnaW9uIHdpbGwgYmUNCj4gPiA+ICsgKiB1c2Vk IGluIHRoZSBETUEgb3BlcmF0aW9uLg0KPiA+ID4gKyAqDQo+ID4gPiArICogVGhlIHByZS1hbGxv YyBtZW1vcnkgY29udGFpbnMgcGllY2VzIG9mIG1lbW9yeSByZWdpb25zIHdpdGgNCj4gPiBkaWZm ZXJlbnQgc2l6ZS4gVGhlDQo+ID4gPiArICogYWxsb2NhdGlvbiBvZiB0aGUgc2hhcmVkIG1lbW9y eSByZWdpb25zIGFyZSBpbmRpY2F0ZWQgYnkgYSAzMi1iaXQNCj4gPiBiaXRtYXAgKG1SZXNlcnZl ZE1lbUJpdG1hcCkuDQo+ID4gPiArICoNCj4gPiA+ICsgKiBUaGUgbWVtb3J5IHJlZ2lvbnMgYXJl IGNvbnN1bWVkIGJ5IElvTW11QWxsb2NhdGVCdWZmZXIgKGluDQo+IHdoaWNoDQo+ID4gQ29tbW9u QnVmZmVyIGlzIGFsbG9jYXRlZCkgYW5kDQo+ID4gPiArICogSW9NbXVNYXAgKGluIHdoaWNoIGJv dW5jZSBidWZmZXIgaXMgYWxsb2NhdGVkKS4NCj4gPiA+ICsgKg0KPiA+ID4gKyAqIFRoZSBDb21t b25CdWZmZXIgY29udGFpbnMgMiBwYXJ0cywgb25lIHBhZ2UgZm9yDQo+ID4gQ29tbW9uQnVmZmVy SGVhZGVyIHdoaWNoIGlzIHByaXZhdGUgbWVtb3J5LA0KPiA+ID4gKyAqIHRoZSBvdGhlciBwYXJ0 IGlzIHNoYXJlZCBtZW1vcnkuIFNvIHRoZSBsYXlvdXQgb2YgYSBwaWVjZSBvZg0KPiBtZW1vcnkN Cj4gPiByZWdpb24gYWZ0ZXIgaW5pdGlhbGl6YXRpb24NCj4gPiA+ICsgKiBsb29rcyBsaWtlOg0K PiA+ID4gKyAqDQo+ID4gPiArICogICAgIHwtLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLXwNCj4gPiA+ICsgKiAgICAgfCBIZWFkZXIgICAgIHwgICAgRGF0YSAgICAgICAg ICAgICAgICAgICAgfCAgPC0tIGEgcGllY2Ugb2YgcHJlLWFsbG9jIG1lbW9yeQ0KPiA+IHJlZ2lv bg0KPiA+ID4gKyAqICAgICB8IDRrLCBwcml2YXRlfCA0ay8zMmsvMTI4ay9ldGMsIHNoYXJlZCAg ICB8DQo+ID4gPiArICogICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLXwNCj4gPiA+ICsgKg0KPiA+ID4gKyAqIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICBTdWNj ZXNzZnVsbHkgaW5pdGlhbGl6ZSB0aGUgcmVzZXJ2ZWQgbWVtb3J5Lg0KPiA+ID4gKyAqIEByZXR2 YWwgRUZJX1VOU1VQUE9SVEVEICBUaGlzIGZlYXR1cmUgaXMgbm90IHN1cHBvcnRlZC4NCj4gPiA+ ICsgKi8NCj4gPiA+ICtFRklfU1RBVFVTDQo+ID4gPiArSW9NbXVJbml0UmVzZXJ2ZWRTaGFyZWRN ZW0gKA0KPiA+ID4gKyAgVk9JRA0KPiA+ID4gKyAgKQ0KPiA+ID4gK3sNCj4gPiA+ICsgIEVGSV9T VEFUVVMgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiA+ID4gKyAgVUlOVDMyICAgICAgICAgICAg ICAgICAgICBJbmRleDEsIEluZGV4MjsNCj4gPiA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAg ICAgVG90YWxQYWdlczsNCj4gPiA+ICsgIElPTU1VX1JFU0VSVkVEX01FTV9SQU5HRSAgKk1lbVJh bmdlOw0KPiA+ID4gKyAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgICBQaHlzaWNhbEFkZHJlc3M7 DQo+ID4gPiArDQo+ID4gPiArICBpZiAoIW1SZXNlcnZlZFNoYXJlZE1lbVN1cHBvcnRlZCkgew0K PiA+ID4gKyAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0K PiA+ID4gKyAgVG90YWxQYWdlcyA9IEVGSV9TSVpFX1RPX1BBR0VTIChDYWxjdWF0ZVJlc2VydmVk TWVtU2l6ZSAoKSk7DQo+ID4gPiArDQo+ID4gPiArICBQaHlzaWNhbEFkZHJlc3MgPSAoRUZJX1BI WVNJQ0FMX0FERFJFU1MpKFVJTlROKUFsbG9jYXRlUGFnZXMNCj4gPiAoVG90YWxQYWdlcyk7DQo+ ID4gPiArICBERUJVRyAoKA0KPiA+ID4gKyAgICBERUJVR19WRVJCT1NFLA0KPiA+ID4gKyAgICAi JWE6IFJlc2VydmVkTWVtICglZCBwYWdlcykgYWRkcmVzcyA9IDB4JWxseFxuIiwNCj4gPiA+ICsg ICAgX19GVU5DVElPTl9fLA0KPiA+ID4gKyAgICBUb3RhbFBhZ2VzLA0KPiA+ID4gKyAgICBQaHlz aWNhbEFkZHJlc3MNCj4gPiA+ICsgICAgKSk7DQo+ID4gPiArDQo+ID4gPiArICBtUmVzZXJ2ZWRN ZW1CaXRtYXAgICAgICAgID0gMDsNCj4gPiA+ICsgIG1SZXNlcnZlZFNoYXJlZE1lbUFkZHJlc3Mg PSBQaHlzaWNhbEFkZHJlc3M7DQo+ID4gPiArDQo+ID4gPiArICBmb3IgKEluZGV4MSA9IDA7IElu ZGV4MSA8IEFSUkFZX1NJWkUgKG1SZXNlcnZlZE1lbVJhbmdlcyk7DQo+ID4gSW5kZXgxKyspIHsN Cj4gPiA+ICsgICAgTWVtUmFuZ2UgICAgICAgICAgICAgICAgICAgICAgICAgPSAmbVJlc2VydmVk TWVtUmFuZ2VzW0luZGV4MV07DQo+ID4gPiArICAgIE1lbVJhbmdlLT5TdGFydEFkZHJlc3NPZk1l bVJhbmdlID0gUGh5c2ljYWxBZGRyZXNzOw0KPiA+ID4gKw0KPiA+ID4gKyAgICBmb3IgKEluZGV4 MiA9IDA7IEluZGV4MiA8IE1lbVJhbmdlLT5TbG90czsgSW5kZXgyKyspIHsNCj4gPiA+ICsgICAg ICBTdGF0dXMgPSBNZW1FbmNyeXB0VGR4U2V0UGFnZVNoYXJlZEJpdCAoDQo+ID4gPiArICAgICAg ICAgICAgICAgICAwLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgKFVJTlQ2NCkoVUlOVE4pKE1l bVJhbmdlLT5TdGFydEFkZHJlc3NPZk1lbVJhbmdlICsNCj4gPiBJbmRleDIgKiBTSVpFX09GX01F TV9SQU5HRSAoTWVtUmFuZ2UpICsgTWVtUmFuZ2UtPkhlYWRlclNpemUpLA0KPiA+ID4gKyAgICAg ICAgICAgICAgICAgRUZJX1NJWkVfVE9fUEFHRVMgKE1lbVJhbmdlLT5EYXRhU2l6ZSkNCj4gPiA+ ICsgICAgICAgICAgICAgICAgICk7DQo+ID4gPiArICAgICAgQVNTRVJUICghRUZJX0VSUk9SIChT dGF0dXMpKTsNCj4gPiA+ICsgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICBQaHlzaWNhbEFkZHJl c3MgKz0gKE1lbVJhbmdlLT5TbG90cyAqIFNJWkVfT0ZfTUVNX1JBTkdFDQo+ID4gKE1lbVJhbmdl KSk7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gKy8qKg0KPiA+ID4gKyAqIFJlbGVhc2UgdGhlIHByZS1h bGxvYyBzaGFyZWQgbWVtb3J5Lg0KPiA+ID4gKyAqDQo+ID4gPiArICogQHJldHZhbCBFRklfU1VD Q0VTUyAgU3VjY2Vzc2Z1bGx5IHJlbGVhc2UgdGhlIHNoYXJlZCBtZW1vcnkNCj4gPiA+ICsgKi8N Cj4gPiA+ICtFRklfU1RBVFVTDQo+ID4gPiArSW9NbXVSZWxlYXNlUmVzZXJ2ZWRTaGFyZWRNZW0g KA0KPiA+ID4gKyAgQk9PTEVBTiAgTWVtb3J5TWFwTG9ja2VkDQo+ID4gPiArICApDQo+ID4gPiAr ew0KPiA+ID4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ID4gPiArICBV SU5UMzIgICAgICAgICAgICAgICAgICAgIEluZGV4MSwgSW5kZXgyOw0KPiA+ID4gKyAgSU9NTVVf UkVTRVJWRURfTUVNX1JBTkdFICAqTWVtUmFuZ2U7DQo+ID4gPiArDQo+ID4gPiArICBmb3IgKElu ZGV4MSA9IDA7IEluZGV4MSA8IEFSUkFZX1NJWkUgKG1SZXNlcnZlZE1lbVJhbmdlcyk7DQo+ID4g SW5kZXgxKyspIHsNCj4gPiA+ICsgICAgTWVtUmFuZ2UgPSAmbVJlc2VydmVkTWVtUmFuZ2VzW0lu ZGV4MV07DQo+ID4gPiArICAgIGZvciAoSW5kZXgyID0gMDsgSW5kZXgyIDwgTWVtUmFuZ2UtPlNs b3RzOyBJbmRleDIrKykgew0KPiA+ID4gKyAgICAgIFN0YXR1cyA9IE1lbUVuY3J5cHRUZHhDbGVh clBhZ2VTaGFyZWRCaXQgKA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgMCwNCj4gPiA+ICsgICAg ICAgICAgICAgICAgIChVSU5UNjQpKFVJTlROKShNZW1SYW5nZS0+U3RhcnRBZGRyZXNzT2ZNZW1S YW5nZSArDQo+ID4gSW5kZXgyICogU0laRV9PRl9NRU1fUkFOR0UgKE1lbVJhbmdlKSArIE1lbVJh bmdlLT5IZWFkZXJTaXplKSwNCj4gPiA+ICsgICAgICAgICAgICAgICAgIEVGSV9TSVpFX1RPX1BB R0VTIChNZW1SYW5nZS0+RGF0YVNpemUpDQo+ID4gPiArICAgICAgICAgICAgICAgICApOw0KPiA+ ID4gKyAgICAgIEFTU0VSVCAoIUVGSV9FUlJPUiAoU3RhdHVzKSk7DQo+ID4gPiArICAgIH0NCj4g PiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIGlmICghTWVtb3J5TWFwTG9ja2VkKSB7DQo+ID4g PiArICAgIEZyZWVQYWdlcyAoKFZPSUQgKikoVUlOVE4pbVJlc2VydmVkU2hhcmVkTWVtQWRkcmVz cywNCj4gPiBFRklfU0laRV9UT19QQUdFUyAoQ2FsY3VhdGVSZXNlcnZlZE1lbVNpemUgKCkpKTsN Cj4gPiA+ICsgICAgbVJlc2VydmVkU2hhcmVkTWVtQWRkcmVzcyA9IDA7DQo+ID4gPiArICAgIG1S ZXNlcnZlZE1lbUJpdG1hcCAgICAgICAgPSAwOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4g KyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICsvKioNCj4g PiA+ICsgKiBBbGxvY2F0ZSBmcm9tIHRoZSByZXNlcnZlZCBtZW1vcnkgcG9vbC4NCj4gPiA+ICsg KiBJZiB0aGUgcmVzZXJ2ZWQgc2hhcmVkIG1lbW9yeSBpcyBleGF1c3RlZCBvciB0aGVyZSBpcyBu byBzdWl0YWxiZQ0KPiBzaXplLA0KPiA+IGl0IHR1cm5zDQo+ID4gPiArICogdG8gdGhlIExlZ2Fj eUFsbG9jYXRlQnVmZmVyLg0KPiA+ID4gKyAqDQo+ID4gPiArICogQHBhcmFtIFR5cGUgICAgICAg ICAgICAgICAgQWxsb2NhdGUgdHlwZQ0KPiA+ID4gKyAqIEBwYXJhbSBNZW1vcnlUeXBlICAgICAg ICAgIFRoZSBtZW1vcnkgdHlwZSB0byBiZSBhbGxvY2F0ZWQNCj4gPiA+ICsgKiBAcGFyYW0gUGFn ZXMgICAgICAgICAgICAgICBQYWdlcyB0byBiZSBhbGxvY2F0ZWQuDQo+ID4gPiArICogQHBhcmFt IFJlc2VydmVkTWVtQml0bWFwICAgQml0bWFwIG9mIHRoZSBhbGxvY2F0ZWQgbWVtb3J5DQo+ID4g cmVnaW9uDQo+ID4gPiArICogQHBhcmFtIFBoeXNpY2FsQWRkcmVzcyAgICAgUG9pbnRlciB0byB0 aGUgZGF0YSBwYXJ0IG9mIGFsbG9jYXRlZA0KPiA+IG1lbW9yeSByZWdpb24NCj4gPiA+ICsgKg0K PiA+ID4gKyAqIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgIFN1Y2Nlc3NmdWxseSBhbGxvY2F0 ZSB0aGUgYnVmZmVyDQo+ID4gPiArICogQHJldHZhbCBPdGhlciAgICAgICAgICAgICAgQXMgdGhl IGVycm9yIGNvZGUgaW5kaWNhdGVzDQo+ID4gPiArICovDQo+ID4gPiArU1RBVElDDQo+ID4gPiAr RUZJX1NUQVRVUw0KPiA+ID4gK0ludGVybmFsQWxsb2NhdGVCdWZmZXIgKA0KPiA+ID4gKyAgSU4g IEVGSV9BTExPQ0FURV9UWVBFICAgICAgICBUeXBlLA0KPiA+ID4gKyAgSU4gIEVGSV9NRU1PUllf VFlQRSAgICAgICAgICBNZW1vcnlUeXBlLA0KPiA+ID4gKyAgSU4gIFVJTlROICAgICAgICAgICAg ICAgICAgICBQYWdlcywNCj4gPiA+ICsgIElOIE9VVCBVSU5UMzIgICAgICAgICAgICAgICAgKlJl c2VydmVkTWVtQml0bWFwLA0KPiA+ID4gKyAgSU4gT1VUIEVGSV9QSFlTSUNBTF9BRERSRVNTICAq UGh5c2ljYWxBZGRyZXNzDQo+ID4gPiArICApDQo+ID4gPiArew0KPiA+ID4gKyAgVUlOVDMyICAg ICAgICAgICAgICAgICAgICBNZW1CaXRtYXA7DQo+ID4gPiArICBVSU5UOCAgICAgICAgICAgICAg ICAgICAgIEluZGV4Ow0KPiA+ID4gKyAgSU9NTVVfUkVTRVJWRURfTUVNX1JBTkdFICAqTWVtUmFu Z2U7DQo+ID4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIFBhZ2VzT2ZMYXN0TWVtUmFu Z2U7DQo+ID4gPiArDQo+ID4gPiArICAqUmVzZXJ2ZWRNZW1CaXRtYXAgPSAwOw0KPiA+ID4gKw0K PiA+ID4gKyAgaWYgKFBhZ2VzID09IDApIHsNCj4gPiA+ICsgICAgQVNTRVJUIChGQUxTRSk7DQo+ ID4gPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gPiArICB9DQo+ID4g PiArDQo+ID4gPiArICBpZiAoIW1SZXNlcnZlZFNoYXJlZE1lbVN1cHBvcnRlZCkgew0KPiA+ID4g KyAgICBnb3RvIExlZ2FjeUFsbG9jYXRlQnVmZmVyOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ ID4gKyAgaWYgKG1SZXNlcnZlZFNoYXJlZE1lbUFkZHJlc3MgPT0gMCkgew0KPiA+ID4gKyAgICBn b3RvIExlZ2FjeUFsbG9jYXRlQnVmZmVyOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAg UGFnZXNPZkxhc3RNZW1SYW5nZSA9IDA7DQo+ID4gPiArDQo+ID4gPiArICBmb3IgKEluZGV4ID0g MDsgSW5kZXggPCBBUlJBWV9TSVpFIChtUmVzZXJ2ZWRNZW1SYW5nZXMpOyBJbmRleCsrKQ0KPiB7 DQo+ID4gPiArICAgIGlmICgoUGFnZXMgPiBQYWdlc09mTGFzdE1lbVJhbmdlKSAmJiAoUGFnZXMg PD0NCj4gRUZJX1NJWkVfVE9fUEFHRVMNCj4gPiAobVJlc2VydmVkTWVtUmFuZ2VzW0luZGV4XS5E YXRhU2l6ZSkpKSB7DQo+ID4gPiArICAgICAgYnJlYWs7DQo+ID4gPiArICAgIH0NCj4gPiA+ICsN Cj4gPiA+ICsgICAgUGFnZXNPZkxhc3RNZW1SYW5nZSA9IEVGSV9TSVpFX1RPX1BBR0VTDQo+ID4g KG1SZXNlcnZlZE1lbVJhbmdlc1tJbmRleF0uRGF0YVNpemUpOw0KPiA+ID4gKyAgfQ0KPiA+ID4g Kw0KPiA+ID4gKyAgaWYgKEluZGV4ID09IEFSUkFZX1NJWkUgKG1SZXNlcnZlZE1lbVJhbmdlcykp IHsNCj4gPiA+ICsgICAgLy8gVGhlcmUgaXMgbm8gc3VpdGFibGUgc2l6ZSBvZiByZXNlcnZlZCBt ZW1vcnkuIFR1cm4gdG8gbGVnYWN5DQo+ID4gYWxsb2NhdGUuDQo+ID4gPiArICAgIGdvdG8gTGVn YWN5QWxsb2NhdGVCdWZmZXI7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICBNZW1SYW5n ZSA9ICZtUmVzZXJ2ZWRNZW1SYW5nZXNbSW5kZXhdOw0KPiA+ID4gKw0KPiA+ID4gKyAgaWYgKCht UmVzZXJ2ZWRNZW1CaXRtYXAgJiBNZW1SYW5nZS0+Qml0bWFwTWFzaykgPT0NCj4gPiBNZW1SYW5n ZS0+Qml0bWFwTWFzaykgew0KPiA+ID4gKyAgICAvLyBUaGUgcmVzZXJ2ZWQgbWVtb3J5IGlzIGV4 YXVzdGVkLiBUdXJuIHRvIGxlZ2FjeSBhbGxvY2F0ZS4NCj4gPiA+ICsgICAgZ290byBMZWdhY3lB bGxvY2F0ZUJ1ZmZlcjsNCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIE1lbUJpdG1hcCA9 IChtUmVzZXJ2ZWRNZW1CaXRtYXAgJiBNZW1SYW5nZS0NCj4gPkJpdG1hcE1hc2spID4+DQo+ID4g TWVtUmFuZ2UtPlNoaWZ0Ow0KPiA+ID4gKw0KPiA+ID4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4 IDwgTWVtUmFuZ2UtPlNsb3RzOyBJbmRleCsrKSB7DQo+ID4gPiArICAgIGlmICgoTWVtQml0bWFw ICYgKFVJTlQ4KSgxPDxJbmRleCkpID09IDApIHsNCj4gPiA+ICsgICAgICBicmVhazsNCj4gPiA+ ICsgICAgfQ0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgQVNTRVJUIChJbmRleCAhPSBN ZW1SYW5nZS0+U2xvdHMpOw0KPiA+ID4gKw0KPiA+ID4gKyAgKlBoeXNpY2FsQWRkcmVzcyAgID0g TWVtUmFuZ2UtPlN0YXJ0QWRkcmVzc09mTWVtUmFuZ2UgKyBJbmRleA0KPiAqDQo+ID4gU0laRV9P Rl9NRU1fUkFOR0UgKE1lbVJhbmdlKSArIE1lbVJhbmdlLT5IZWFkZXJTaXplOw0KPiA+ID4gKyAg KlJlc2VydmVkTWVtQml0bWFwID0gKFVJTlQzMikoMSA8PCAoSW5kZXggKyBNZW1SYW5nZS0+U2hp ZnQpKTsNCj4gPiA+ICsNCj4gPiA+ICsgIERFQlVHICgoDQo+ID4gPiArICAgIERFQlVHX1ZFUkJP U0UsDQo+ID4gPiArICAgICIlYTogcmFuZ2Utc2l6ZTogJWx4LCBzdGFydC1hZGRyZXNzPTB4JWxs eCwgcGFnZXM9MHglbGx4LCBiaXRzPTB4JWx4LA0KPiA+IGJpdG1hcDogJWx4ID0+ICVseFxuIiwN Cj4gPiA+ICsgICAgX19GVU5DVElPTl9fLA0KPiA+ID4gKyAgICBNZW1SYW5nZS0+RGF0YVNpemUs DQo+ID4gPiArICAgICpQaHlzaWNhbEFkZHJlc3MsDQo+ID4gPiArICAgIFBhZ2VzLA0KPiA+ID4g KyAgICAqUmVzZXJ2ZWRNZW1CaXRtYXAsDQo+ID4gPiArICAgIG1SZXNlcnZlZE1lbUJpdG1hcCwN Cj4gPiA+ICsgICAgbVJlc2VydmVkTWVtQml0bWFwIHwgKlJlc2VydmVkTWVtQml0bWFwDQo+ID4g PiArICAgICkpOw0KPiA+ID4gKw0KPiA+ID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ID4g Kw0KPiA+ID4gK0xlZ2FjeUFsbG9jYXRlQnVmZmVyOg0KPiA+ID4gKw0KPiA+ID4gKyAgKlJlc2Vy dmVkTWVtQml0bWFwID0gMDsNCj4gPiA+ICsgIHJldHVybiBnQlMtPkFsbG9jYXRlUGFnZXMgKFR5 cGUsIE1lbW9yeVR5cGUsIFBhZ2VzLA0KPiBQaHlzaWNhbEFkZHJlc3MpOw0KPiA+ID4gK30NCj4g PiA+ICsNCj4gPiA+ICsvKioNCj4gPiA+ICsgKiBBbGxvY2F0ZSByZXNlcnZlZCBzaGFyZWQgbWVt b3J5IGZvciBib3VuY2UgYnVmZmVyLg0KPiA+ID4gKyAqDQo+ID4gPiArICogQHBhcmFtIFR5cGUg ICAgICAgIEFsbG9jYXRlIHR5cGUNCj4gPiA+ICsgKiBAcGFyYW0gTWVtb3J5VHlwZSAgVGhlIG1l bW9yeSB0eXBlIHRvIGJlIGFsbG9jYXRlZA0KPiA+ID4gKyAqIEBwYXJhbSBNYXBJbmZvICAgICBQ b2ludGVyIHRvIHRoZSBNQVBfSU5GTw0KPiA+ID4gKyAqDQo+ID4gPiArICogQHJldHZhbCBFRklf U1VDQ0VTUyAgICAgICAgU3VjY2Vzc2Z1bGx5IGFsbG9jYXRlIHRoZSBib3VuY2UgYnVmZmVyDQo+ ID4gPiArICogQHJldHZhbCBPdGhlciAgICAgICAgICAgICAgQXMgdGhlIGVycm9yIGNvZGUgaW5k aWNhdGVzDQo+ID4gPiArDQo+ID4gPiArICovDQo+ID4gPiArRUZJX1NUQVRVUw0KPiA+ID4gK0lv TW11QWxsb2NhdGVCb3VuY2VCdWZmZXIgKA0KPiA+ID4gKyAgSU4gICAgIEVGSV9BTExPQ0FURV9U WVBFICBUeXBlLA0KPiA+ID4gKyAgSU4gICAgIEVGSV9NRU1PUllfVFlQRSAgICBNZW1vcnlUeXBl LA0KPiA+ID4gKyAgSU4gT1VUIE1BUF9JTkZPICAgICAgICAgICAqTWFwSW5mbw0KPiA+ID4gKyAg KQ0KPiA+ID4gK3sNCj4gPiA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPiA+ICsgIFVJTlQz MiAgICAgIFJlc2VydmVkTWVtQml0bWFwOw0KPiA+ID4gKw0KPiA+ID4gKyAgUmVzZXJ2ZWRNZW1C aXRtYXAgPSAwOw0KPiA+ID4gKyAgU3RhdHVzICAgICAgICAgICAgPSBJbnRlcm5hbEFsbG9jYXRl QnVmZmVyICgNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICBUeXBlLA0KPiA+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgIE1lbW9yeVR5cGUsDQo+ID4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgTWFwSW5mby0+TnVtYmVyT2ZQYWdlcywNCj4gPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAmUmVzZXJ2ZWRNZW1CaXRtYXAsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgJk1hcEluZm8tPlBsYWluVGV4dEFkZHJlc3MNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICApOw0KPiA+ID4gKyAgTWFwSW5mby0+UmVzZXJ2ZWRNZW1CaXRtYXAgPSBSZXNlcnZlZE1l bUJpdG1hcDsNCj4gPiA+ICsgIG1SZXNlcnZlZE1lbUJpdG1hcCAgICAgICAgfD0gUmVzZXJ2ZWRN ZW1CaXRtYXA7DQo+ID4gPiArDQo+ID4gPiArICBBU1NFUlQgKFN0YXR1cyA9PSBFRklfU1VDQ0VT Uyk7DQo+ID4gPiArDQo+ID4gPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ID4gK30NCj4gPiA+ICsN Cj4gPiA+ICsvKioNCj4gPiA+ICsgKiBGcmVlIHRoZSBib3VuY2UgYnVmZmVyIGFsbG9jYXRlZCBp biBJb01tdUFsbG9jYXRlQm91bmNlQnVmZmVyLg0KPiA+ID4gKyAqDQo+ID4gPiArICogQHBhcmFt IE1hcEluZm8gICAgICAgUG9pbnRlciB0byB0aGUgTUFQX0lORk8NCj4gPiA+ICsgKiBAcmV0dXJu IEVGSV9TVUNDRVNTICBTdWNjZXNzZnVsbHkgZnJlZSB0aGUgYm91bmNlIGJ1ZmZlci4NCj4gPiA+ ICsgKi8NCj4gPiA+ICtFRklfU1RBVFVTDQo+ID4gPiArSW9NbXVGcmVlQm91bmNlQnVmZmVyICgN Cj4gPiA+ICsgIElOIE9VVCAgICAgTUFQX0lORk8gICpNYXBJbmZvDQo+ID4gPiArICApDQo+ID4g PiArew0KPiA+ID4gKyAgaWYgKE1hcEluZm8tPlJlc2VydmVkTWVtQml0bWFwID09IDApIHsNCj4g PiA+ICsgICAgZ0JTLT5GcmVlUGFnZXMgKE1hcEluZm8tPlBsYWluVGV4dEFkZHJlc3MsIE1hcElu Zm8tDQo+ID4gPk51bWJlck9mUGFnZXMpOw0KPiA+ID4gKyAgfSBlbHNlIHsNCj4gPiA+ICsgICAg REVCVUcgKCgNCj4gPiA+ICsgICAgICBERUJVR19WRVJCT1NFLA0KPiA+ID4gKyAgICAgICIlYTog UGxhaW5UZXh0QWRkcmVzcz0weCVMeCwgYml0cz0weCVMeCwgYml0bWFwOiAlTHggPT4gJUx4XG4i LA0KPiA+ID4gKyAgICAgIF9fRlVOQ1RJT05fXywNCj4gPiA+ICsgICAgICBNYXBJbmZvLT5QbGFp blRleHRBZGRyZXNzLA0KPiA+ID4gKyAgICAgIE1hcEluZm8tPlJlc2VydmVkTWVtQml0bWFwLA0K PiA+ID4gKyAgICAgIG1SZXNlcnZlZE1lbUJpdG1hcCwNCj4gPiA+ICsgICAgICBtUmVzZXJ2ZWRN ZW1CaXRtYXAgJiAoKFVJTlQzMikofk1hcEluZm8tDQo+ID4gPlJlc2VydmVkTWVtQml0bWFwKSkN Cj4gPiA+ICsgICAgICApKTsNCj4gPiA+ICsgICAgTWFwSW5mby0+UGxhaW5UZXh0QWRkcmVzcyAg PSAwOw0KPiA+ID4gKyAgICBtUmVzZXJ2ZWRNZW1CaXRtYXAgICAgICAgICY9IChVSU5UMzIpKH5N YXBJbmZvLQ0KPiA+ID5SZXNlcnZlZE1lbUJpdG1hcCk7DQo+ID4gPiArICAgIE1hcEluZm8tPlJl c2VydmVkTWVtQml0bWFwID0gMDsNCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIHJldHVy biBFRklfU1VDQ0VTUzsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPiArICog QWxsb2NhdGUgQ29tbW9uQnVmZmVyIGZyb20gcHJlLWFsbG9jYXRlZCBzaGFyZWQgbWVtb3J5Lg0K PiA+ID4gKyAqDQo+ID4gPiArICogQHBhcmFtIE1lbW9yeVR5cGUgICAgICAgICAgTWVtb3J5IHR5 cGUNCj4gPiA+ICsgKiBAcGFyYW0gQ29tbW9uQnVmZmVyUGFnZXMgICBQYWdlcyBvZiBDb21tb25C dWZmZXINCj4gPiA+ICsgKiBAcGFyYW0gUGh5c2ljYWxBZGRyZXNzICAgICBBbGxvY2F0ZWQgcGh5 c2ljYWwgYWRkcmVzcw0KPiA+ID4gKyAqIEBwYXJhbSBSZXNlcnZlZE1lbUJpdG1hcCAgIEJpdG1h cCB3aGljaCBpbmRpY2F0ZXMgdGhlDQo+IGFsbG9jYXRpb24NCj4gPiBvZiByZXNlcnZlZCBtZW1v cnkNCj4gPiA+ICsgKg0KPiA+ID4gKyAqIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgIFN1Y2Nl c3NmdWxseSBhbGxvY2F0ZSB0aGUgY29tbW9uIGJ1ZmZlcg0KPiA+ID4gKyAqIEByZXR2YWwgT3Ro ZXIgICAgICAgICAgICAgIEFzIHRoZSBlcnJvciBjb2RlIGluZGljYXRlcw0KPiA+ID4gKyAqLw0K PiA+ID4gK0VGSV9TVEFUVVMNCj4gPiA+ICtJb01tdUFsbG9jYXRlQ29tbW9uQnVmZmVyICgNCj4g PiA+ICsgIElOIEVGSV9NRU1PUllfVFlQRSAgICAgICAgTWVtb3J5VHlwZSwNCj4gPiA+ICsgIElO IFVJTlROICAgICAgICAgICAgICAgICAgQ29tbW9uQnVmZmVyUGFnZXMsDQo+ID4gPiArICBPVVQg RUZJX1BIWVNJQ0FMX0FERFJFU1MgICpQaHlzaWNhbEFkZHJlc3MsDQo+ID4gPiArICBPVVQgVUlO VDMyICAgICAgICAgICAgICAgICpSZXNlcnZlZE1lbUJpdG1hcA0KPiA+ID4gKyAgKQ0KPiA+ID4g K3sNCj4gPiA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPiA+ICsNCj4gPiA+ICsgIFN0YXR1 cyA9IEludGVybmFsQWxsb2NhdGVCdWZmZXIgKA0KPiA+ID4gKyAgICAgICAgICAgICBBbGxvY2F0 ZU1heEFkZHJlc3MsDQo+ID4gPiArICAgICAgICAgICAgIE1lbW9yeVR5cGUsDQo+ID4gPiArICAg ICAgICAgICAgIENvbW1vbkJ1ZmZlclBhZ2VzLA0KPiA+ID4gKyAgICAgICAgICAgICBSZXNlcnZl ZE1lbUJpdG1hcCwNCj4gPiA+ICsgICAgICAgICAgICAgUGh5c2ljYWxBZGRyZXNzDQo+ID4gPiAr ICAgICAgICAgICAgICk7DQo+ID4gPiArICBBU1NFUlQgKFN0YXR1cyA9PSBFRklfU1VDQ0VTUyk7 DQo+ID4gPiArDQo+ID4gPiArICBtUmVzZXJ2ZWRNZW1CaXRtYXAgfD0gKlJlc2VydmVkTWVtQml0 bWFwOw0KPiA+ID4gKw0KPiA+ID4gKyAgaWYgKCpSZXNlcnZlZE1lbUJpdG1hcCAhPSAwKSB7DQo+ ID4gPiArICAgICpQaHlzaWNhbEFkZHJlc3MgLT0gU0laRV80S0I7DQo+ID4gPiArICB9DQo+ID4g PiArDQo+ID4gPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICsv KioNCj4gPiA+ICsgKiBGcmVlIENvbW1vbkJ1ZmZlciB3aGljaCBpcyBhbGxvY2F0ZWQgYnkNCj4g PiBJb01tdUFsbG9jYXRlQ29tbW9uQnVmZmVyKCkuDQo+ID4gPiArICoNCj4gPiA+ICsgKiBAcGFy YW0gQ29tbW9uQnVmZmVySGVhZGVyICBQb2ludGVyIHRvIHRoZQ0KPiBDb21tb25CdWZmZXJIZWFk ZXINCj4gPiA+ICsgKiBAcGFyYW0gQ29tbW9uQnVmZmVyUGFnZXMgICBQYWdlcyBvZiBDb21tb25C dWZmZXINCj4gPiA+ICsgKg0KPiA+ID4gKyAqIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgIFN1 Y2Nlc3NmdWxseSBmcmVlIHRoZSBjb21tb24gYnVmZmVyDQo+ID4gPiArICogQHJldHZhbCBPdGhl ciAgICAgICAgICAgICAgQXMgdGhlIGVycm9yIGNvZGUgaW5kaWNhdGVzDQo+ID4gPiArICovDQo+ ID4gPiArRUZJX1NUQVRVUw0KPiA+ID4gK0lvTW11RnJlZUNvbW1vbkJ1ZmZlciAoDQo+ID4gPiAr ICBJTiBDT01NT05fQlVGRkVSX0hFQURFUiAgKkNvbW1vbkJ1ZmZlckhlYWRlciwNCj4gPiA+ICsg IElOIFVJTlROICAgICAgICAgICAgICAgICBDb21tb25CdWZmZXJQYWdlcw0KPiA+ID4gKyAgKQ0K PiA+ID4gK3sNCj4gPiA+ICsgIGlmICghbVJlc2VydmVkU2hhcmVkTWVtU3VwcG9ydGVkKSB7DQo+ ID4gPiArICAgIGdvdG8gTGVnYWN5RnJlZUNvbW1vbkJ1ZmZlcjsNCj4gPiA+ICsgIH0NCj4gPiA+ ICsNCj4gPiA+ICsgIGlmIChDb21tb25CdWZmZXJIZWFkZXItPlJlc2VydmVkTWVtQml0bWFwID09 IDApIHsNCj4gPiA+ICsgICAgZ290byBMZWdhY3lGcmVlQ29tbW9uQnVmZmVyOw0KPiA+ID4gKyAg fQ0KPiA+ID4gKw0KPiA+ID4gKyAgREVCVUcgKCgNCj4gPiA+ICsgICAgREVCVUdfVkVSQk9TRSwN Cj4gPiA+ICsgICAgIiVhOiBDb21tb25CdWZmZXI9MHglTHgsIGJpdHM9MHglTHgsIGJpdG1hcDog JUx4ID0+ICVMeFxuIiwNCj4gPiA+ICsgICAgX19GVU5DVElPTl9fLA0KPiA+ID4gKyAgICAoVUlO VDY0KShVSU5UTilDb21tb25CdWZmZXJIZWFkZXIgKyBTSVpFXzRLQiwNCj4gPiA+ICsgICAgQ29t bW9uQnVmZmVySGVhZGVyLT5SZXNlcnZlZE1lbUJpdG1hcCwNCj4gPiA+ICsgICAgbVJlc2VydmVk TWVtQml0bWFwLA0KPiA+ID4gKyAgICBtUmVzZXJ2ZWRNZW1CaXRtYXAgJiAoKFVJTlQzMikofkNv bW1vbkJ1ZmZlckhlYWRlci0NCj4gPiA+UmVzZXJ2ZWRNZW1CaXRtYXApKQ0KPiA+ID4gKyAgICAp KTsNCj4gPiA+ICsNCj4gPiA+ICsgIG1SZXNlcnZlZE1lbUJpdG1hcCAmPSAoVUlOVDMyKSh+Q29t bW9uQnVmZmVySGVhZGVyLQ0KPiA+ID5SZXNlcnZlZE1lbUJpdG1hcCk7DQo+ID4gPiArICByZXR1 cm4gRUZJX1NVQ0NFU1M7DQo+ID4gPiArDQo+ID4gPiArTGVnYWN5RnJlZUNvbW1vbkJ1ZmZlcjoN Cj4gPiA+ICsgIHJldHVybiBnQlMtPkZyZWVQYWdlcyAoKFVJTlROKUNvbW1vbkJ1ZmZlckhlYWRl ciwNCj4gPiBDb21tb25CdWZmZXJQYWdlcyk7DQo+ID4gPiArfQ0KPiA+ID4gZGlmZiAtLWdpdCBh L092bWZQa2cvSW9NbXVEeGUvSW9NbXVEeGUuaW5mDQo+ID4gYi9Pdm1mUGtnL0lvTW11RHhlL0lv TW11RHhlLmluZg0KPiA+ID4gaW5kZXggZTEwYmUxZGNmZjQ5Li4yMTkyMTQ1ZWE2NjEgMTAwNjQ0 DQo+ID4gPiAtLS0gYS9Pdm1mUGtnL0lvTW11RHhlL0lvTW11RHhlLmluZg0KPiA+ID4gKysrIGIv T3ZtZlBrZy9Jb01tdUR4ZS9Jb01tdUR4ZS5pbmYNCj4gPiA+IEBAIC0yMSw2ICsyMSw3IEBADQo+ ID4gPiAgICAgQW1kU2V2SW9NbXUuYw0KPiA+ID4gICAgIEFtZFNldklvTW11LmgNCj4gPiA+ICAg ICBJb01tdUR4ZS5jDQo+ID4gPiArICBJb01tdUJ1ZmZlci5jDQo+ID4gPg0KPiA+ID4gICBbUGFj a2FnZXNdDQo+ID4gPiAgICAgTWRlUGtnL01kZVBrZy5kZWMNCj4gPiA+IGRpZmYgLS1naXQgYS9P dm1mUGtnL0lvTW11RHhlL0lvTW11SW50ZXJuYWwuaA0KPiA+IGIvT3ZtZlBrZy9Jb01tdUR4ZS9J b01tdUludGVybmFsLmgNCj4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gPiBpbmRleCAw MDAwMDAwMDAwMDAuLjkzNmMzNWFhNTM2Yw0KPiA+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ID4gKysr IGIvT3ZtZlBrZy9Jb01tdUR4ZS9Jb01tdUludGVybmFsLmgNCj4gPiA+IEBAIC0wLDAgKzEsMTc5 IEBADQo+ID4gPiArLyoqIEBmaWxlDQo+ID4gPiArDQo+ID4gPiArICBDb3B5cmlnaHQgKGMpIDIw MjIsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gPiA+ICsN Cj4gPiA+ICsgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ ID4gPiArDQo+ID4gPiArKiovDQo+ID4gPiArDQo+ID4gPiArI2lmbmRlZiBJT01NVV9JTlRFUk5B TF9IXw0KPiA+ID4gKyNkZWZpbmUgSU9NTVVfSU5URVJOQUxfSF8NCj4gPiA+ICsNCj4gPiA+ICsj aW5jbHVkZSA8QmFzZS5oPg0KPiA+ID4gKyNpbmNsdWRlIDxQcm90b2NvbC9Jb01tdS5oPg0KPiA+ ID4gKyNpbmNsdWRlIDxVZWZpL1VlZmlCYXNlVHlwZS5oPg0KPiA+ID4gKyNpbmNsdWRlIDxVZWZp L1VlZmlTcGVjLmg+DQo+ID4gPiArDQo+ID4gPiArI2RlZmluZSBNQVBfSU5GT19TSUcgIFNJR05B VFVSRV82NCAoJ00nLCAnQScsICdQJywgJ18nLCAnSScsICdOJywgJ0YnLCAnTycpDQo+ID4gPiAr DQo+ID4gPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ID4gKyAgVUlOVDY0ICAgICAgICAgICAgICAg ICAgIFNpZ25hdHVyZTsNCj4gPiA+ICsgIExJU1RfRU5UUlkgICAgICAgICAgICAgICBMaW5rOw0K PiA+ID4gKyAgRURLSUlfSU9NTVVfT1BFUkFUSU9OICAgIE9wZXJhdGlvbjsNCj4gPiA+ICsgIFVJ TlROICAgICAgICAgICAgICAgICAgICBOdW1iZXJPZkJ5dGVzOw0KPiA+ID4gKyAgVUlOVE4gICAg ICAgICAgICAgICAgICAgIE51bWJlck9mUGFnZXM7DQo+ID4gPiArICBFRklfUEhZU0lDQUxfQURE UkVTUyAgICAgQ3J5cHRlZEFkZHJlc3M7DQo+ID4gPiArICBFRklfUEhZU0lDQUxfQUREUkVTUyAg ICAgUGxhaW5UZXh0QWRkcmVzczsNCj4gPiA+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICBS ZXNlcnZlZE1lbUJpdG1hcDsNCj4gPiA+ICt9IE1BUF9JTkZPOw0KPiA+ID4gKw0KPiA+ID4gKyNk ZWZpbmUgQ09NTU9OX0JVRkZFUl9TSUcgIFNJR05BVFVSRV82NCAoJ0MnLCAnTScsICdOJywgJ0In LCAnVScsDQo+ICdGJywNCj4gPiAnRicsICdSJykNCj4gPiA+ICsNCj4gPiA+ICsjcHJhZ21hIHBh Y2sgKDEpDQo+ID4gPiArLy8NCj4gPiA+ICsvLyBUaGUgZm9sbG93aW5nIHN0cnVjdHVyZSBlbmFi bGVzIE1hcCgpIGFuZCBVbm1hcCgpIHRvIHBlcmZvcm0gaW4tDQo+ID4gcGxhY2UNCj4gPiA+ICsv LyBkZWNyeXB0aW9uIGFuZCBlbmNyeXB0aW9uLCByZXNwZWN0aXZlbHksIGZvcg0KPiA+IEJ1c01h c3RlckNvbW1vbkJ1ZmZlcls2NF0NCj4gPiA+ICsvLyBvcGVyYXRpb25zLCB3aXRob3V0IGR5bmFt aWMgbWVtb3J5IGFsbG9jYXRpb24gb3IgcmVsZWFzZS4NCj4gPiA+ICsvLw0KPiA+ID4gKy8vIEJv dGggQ09NTU9OX0JVRkZFUl9IRUFERVIgYW5kDQo+ID4gQ09NTU9OX0JVRkZFUl9IRUFERVIuU3Rh c2hCdWZmZXIgYXJlIGFsbG9jYXRlZA0KPiA+ID4gKy8vIGJ5IEFsbG9jYXRlQnVmZmVyKCkgYW5k IHJlbGVhc2VkIGJ5IEZyZWVCdWZmZXIoKS4NCj4gPiA+ICsvLw0KPiA+ID4gK3R5cGVkZWYgc3Ry dWN0IHsNCj4gPiA+ICsgIFVJTlQ2NCAgICBTaWduYXR1cmU7DQo+ID4gPiArDQo+ID4gPiArICAv Lw0KPiA+ID4gKyAgLy8gQWx3YXlzIGFsbG9jYXRlZCBmcm9tIEVmaUJvb3RTZXJ2aWNlc0RhdGEg dHlwZSBtZW1vcnksIGFuZA0KPiBhbHdheXMNCj4gPiA+ICsgIC8vIGVuY3J5cHRlZC4NCj4gPiA+ ICsgIC8vDQo+ID4gPiArICBWT0lEICAgICAgKlN0YXNoQnVmZmVyOw0KPiA+ID4gKw0KPiA+ID4g KyAgLy8NCj4gPiA+ICsgIC8vIEJpdG1hcCBvZiByZXNlcnZlZCBtZW1vcnkNCj4gPiA+ICsgIC8v DQo+ID4gPiArICBVSU5UMzIgICAgUmVzZXJ2ZWRNZW1CaXRtYXA7DQo+ID4gPiArDQo+ID4gPiAr ICAvLw0KPiA+ID4gKyAgLy8gRm9sbG93ZWQgYnkgdGhlIGFjdHVhbCBjb21tb24gYnVmZmVyLCBz dGFydGluZyBhdCB0aGUgbmV4dCBwYWdlLg0KPiA+ID4gKyAgLy8NCj4gPiA+ICt9IENPTU1PTl9C VUZGRVJfSEVBREVSOw0KPiA+ID4gKw0KPiA+ID4gKy8vDQo+ID4gPiArLy8gVGhpcyBkYXRhIHN0 cnVjdHVyZSBkZWZpbmVzIGEgbWVtb3J5IHJhbmdlIGluIHRoZSByZXNlcnZlZCBtZW1vcnkNCj4g PiByZWdpb24uDQo+ID4gPiArLy8gUGxlYXNlIHJlZmVyIHRvIElvTW11SW5pdFJlc2VydmVkU2hh cmVkTWVtKCkgZm9yIGRldGFpbGVkDQo+ID4gaW5mb3JtYXRpb24uDQo+ID4gPiArLy8NCj4gPiA+ ICsvLyBUaGUgbWVtb3J5IHJlZ2lvbiBsb29rcyBsaWtlOg0KPiA+ID4gKy8vICAgICB8LS0tLS0t LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18DQo+ID4gPiArLy8gICAgIHwgSGVh ZGVyICAgICB8ICAgIERhdGEgICAgICAgICAgICAgICAgICAgIHwNCj4gPiA+ICsvLyAgICAgfCA0 aywgcHJpdmF0ZXwgNGsvMzJrLzEyOGsvZXRjLCBzaGFyZWQgICAgfA0KPiA+ID4gKy8vICAgICB8 LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18DQo+ID4gPiArLy8NCj4g PiA+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ID4gPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICBC aXRtYXBNYXNrOw0KPiA+ID4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgU2hpZnQ7DQo+ID4g PiArICBVSU5UMzIgICAgICAgICAgICAgICAgICBTbG90czsNCj4gPiA+ICsgIFVJTlQzMiAgICAg ICAgICAgICAgICAgIERhdGFTaXplOw0KPiA+ID4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAg SGVhZGVyU2l6ZTsNCj4gPiA+ICsgIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgIFN0YXJ0QWRkcmVz c09mTWVtUmFuZ2U7DQo+ID4gPiArfSBJT01NVV9SRVNFUlZFRF9NRU1fUkFOR0U7DQo+ID4gPiAr I3ByYWdtYSBwYWNrKCkNCj4gPiA+ICsNCj4gPiA+ICsvKioNCj4gPiA+ICsgKiBBbGxvY2F0ZSBh IG1lbW9yeSByZWdpb24gYW5kIGNvbnZlcnQgaXQgdG8gYmUgc2hhcmVkLiBUaGlzIG1lbW9yeQ0K PiA+IHJlZ2lvbiB3aWxsIGJlDQo+ID4gPiArICogdXNlZCBpbiB0aGUgRE1BIG9wZXJhdGlvbi4N Cj4gPiA+ICsgKg0KPiA+ID4gKyAqIFRoZSBwcmUtYWxsb2MgbWVtb3J5IGNvbnRhaW5zIHBpZWNl cyBvZiBtZW1vcnkgcmVnaW9ucyB3aXRoDQo+ID4gZGlmZmVyZW50IHNpemUuIFRoZQ0KPiA+ID4g KyAqIGFsbG9jYXRpb24gb2YgdGhlIHNoYXJlZCBtZW1vcnkgcmVnaW9ucyBhcmUgaW5kaWNhdGVk IGJ5IGEgMzItYml0DQo+ID4gYml0bWFwIChtUmVzZXJ2ZWRNZW1CaXRtYXApLg0KPiA+ID4gKyAq DQo+ID4gPiArICogVGhlIG1lbW9yeSByZWdpb25zIGFyZSBjb25zdW1lZCBieSBJb01tdUFsbG9j YXRlQnVmZmVyIChpbg0KPiB3aGljaA0KPiA+IENvbW1vbkJ1ZmZlciBpcyBhbGxvY2F0ZWQpIGFu ZA0KPiA+ID4gKyAqIElvTW11TWFwIChpbiB3aGljaCBib3VuY2UgYnVmZmVyIGlzIGFsbG9jYXRl ZCkuDQo+ID4gPiArICoNCj4gPiA+ICsgKiBUaGUgQ29tbW9uQnVmZmVyIGNvbnRhaW5zIDIgcGFy dHMsIG9uZSBwYWdlIGZvcg0KPiA+IENvbW1vbkJ1ZmZlckhlYWRlciB3aGljaCBpcyBwcml2YXRl IG1lbW9yeSwNCj4gPiA+ICsgKiB0aGUgb3RoZXIgcGFydCBpcyBzaGFyZWQgbWVtb3J5LiBTbyB0 aGUgbGF5b3V0IG9mIGEgcGllY2Ugb2YNCj4gbWVtb3J5DQo+ID4gcmVnaW9uIGFmdGVyIGluaXRp YWxpemF0aW9uDQo+ID4gPiArICogbG9va3MgbGlrZToNCj4gPiA+ICsgKg0KPiA+ID4gKyAqICAg ICB8LS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18DQo+ID4gPiArICog ICAgIHwgSGVhZGVyICAgICB8ICAgIERhdGEgICAgICAgICAgICAgICAgICAgIHwgIDwtLSBhIHBp ZWNlIG9mIHByZS1hbGxvYyBtZW1vcnkNCj4gPiByZWdpb24NCj4gPiA+ICsgKiAgICAgfCA0aywg cHJpdmF0ZXwgNGsvMzJrLzEyOGsvZXRjLCBzaGFyZWQgICAgfA0KPiA+ID4gKyAqICAgICB8LS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18DQo+ID4gPiArICoNCj4gPiA+ ICsgKiBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgU3VjY2Vzc2Z1bGx5IGluaXRpYWxpemUgdGhl IHJlc2VydmVkIG1lbW9yeS4NCj4gPiA+ICsgKiBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgVGhp cyBmZWF0dXJlIGlzIG5vdCBzdXBwb3J0ZWQuDQo+ID4gPiArICovDQo+ID4gPiArRUZJX1NUQVRV Uw0KPiA+ID4gK0lvTW11SW5pdFJlc2VydmVkU2hhcmVkTWVtICgNCj4gPiA+ICsgIFZPSUQNCj4g PiA+ICsgICk7DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPiArICogUmVsZWFzZSB0aGUgcHJl LWFsbG9jIHNoYXJlZCBtZW1vcnkuDQo+ID4gPiArICoNCj4gPiA+ICsgKiBAcmV0dmFsIEVGSV9T VUNDRVNTICBTdWNjZXNzZnVsbHkgcmVsZWFzZSB0aGUgc2hhcmVkIG1lbW9yeQ0KPiA+ID4gKyAq Lw0KPiA+ID4gK0VGSV9TVEFUVVMNCj4gPiA+ICtJb01tdVJlbGVhc2VSZXNlcnZlZFNoYXJlZE1l bSAoDQo+ID4gPiArICBCT09MRUFOICBNZW1vcnlNYXBMb2NrZWQNCj4gPiA+ICsgICk7DQo+ID4g PiArDQo+ID4gPiArLyoqDQo+ID4gPiArICogQWxsb2NhdGUgcmVzZXJ2ZWQgc2hhcmVkIG1lbW9y eSBmb3IgYm91bmNlIGJ1ZmZlci4NCj4gPiA+ICsgKg0KPiA+ID4gKyAqIEBwYXJhbSBUeXBlICAg ICAgICBBbGxvY2F0ZSB0eXBlDQo+ID4gPiArICogQHBhcmFtIE1lbW9yeVR5cGUgIFRoZSBtZW1v cnkgdHlwZSB0byBiZSBhbGxvY2F0ZWQNCj4gPiA+ICsgKiBAcGFyYW0gTWFwSW5mbyAgICAgUG9p bnRlciB0byB0aGUgTUFQX0lORk8NCj4gPiA+ICsgKg0KPiA+ID4gKyAqIEByZXR2YWwgRUZJX1NV Q0NFU1MgICAgICAgIFN1Y2Nlc3NmdWxseSBhbGxvY2F0ZSB0aGUgYm91bmNlIGJ1ZmZlcg0KPiA+ ID4gKyAqIEByZXR2YWwgT3RoZXIgICAgICAgICAgICAgIEFzIHRoZSBlcnJvciBjb2RlIGluZGlj YXRlcw0KPiA+ID4gKyAqLw0KPiA+ID4gK0VGSV9TVEFUVVMNCj4gPiA+ICtJb01tdUFsbG9jYXRl Qm91bmNlQnVmZmVyICgNCj4gPiA+ICsgIElOICAgICBFRklfQUxMT0NBVEVfVFlQRSAgVHlwZSwN Cj4gPiA+ICsgIElOICAgICBFRklfTUVNT1JZX1RZUEUgICAgTWVtb3J5VHlwZSwNCj4gPiA+ICsg IElOIE9VVCBNQVBfSU5GTyAgICAgICAgICAgKk1hcEluZm8NCj4gPiA+ICsgICk7DQo+ID4gPiAr DQo+ID4gPiArLyoqDQo+ID4gPiArICogRnJlZSB0aGUgYm91bmNlIGJ1ZmZlciBhbGxvY2F0ZWQg aW4gSW9NbXVBbGxvY2F0ZUJvdW5jZUJ1ZmZlci4NCj4gPiA+ICsgKg0KPiA+ID4gKyAqIEBwYXJh bSBNYXBJbmZvICAgICAgIFBvaW50ZXIgdG8gdGhlIE1BUF9JTkZPDQo+ID4gPiArICogQHJldHVy biBFRklfU1VDQ0VTUyAgU3VjY2Vzc2Z1bGx5IGZyZWUgdGhlIGJvdW5jZSBidWZmZXIuDQo+ID4g PiArICovDQo+ID4gPiArRUZJX1NUQVRVUw0KPiA+ID4gK0lvTW11RnJlZUJvdW5jZUJ1ZmZlciAo DQo+ID4gPiArICBJTiBPVVQgICAgIE1BUF9JTkZPICAqTWFwSW5mbw0KPiA+ID4gKyAgKTsNCj4g PiA+ICsNCj4gPiA+ICsvKioNCj4gPiA+ICsgKiBBbGxvY2F0ZSBDb21tb25CdWZmZXIgZnJvbSBw cmUtYWxsb2NhdGVkIHNoYXJlZCBtZW1vcnkuDQo+ID4gPiArICoNCj4gPiA+ICsgKiBAcGFyYW0g TWVtb3J5VHlwZSAgICAgICAgICBNZW1vcnkgdHlwZQ0KPiA+ID4gKyAqIEBwYXJhbSBDb21tb25C dWZmZXJQYWdlcyAgIFBhZ2VzIG9mIENvbW1vbkJ1ZmZlcg0KPiA+ID4gKyAqIEBwYXJhbSBQaHlz aWNhbEFkZHJlc3MgICAgIEFsbG9jYXRlZCBwaHlzaWNhbCBhZGRyZXNzDQo+ID4gPiArICogQHBh cmFtIFJlc2VydmVkTWVtQml0bWFwICAgQml0bWFwIHdoaWNoIGluZGljYXRlcyB0aGUNCj4gYWxs b2NhdGlvbg0KPiA+IG9mIHJlc2VydmVkIG1lbW9yeQ0KPiA+ID4gKyAqDQo+ID4gPiArICogQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgICAgU3VjY2Vzc2Z1bGx5IGFsbG9jYXRlIHRoZSBjb21tb24g YnVmZmVyDQo+ID4gPiArICogQHJldHZhbCBPdGhlciAgICAgICAgICAgICAgQXMgdGhlIGVycm9y IGNvZGUgaW5kaWNhdGVzDQo+ID4gPiArICovDQo+ID4gPiArRUZJX1NUQVRVUw0KPiA+ID4gK0lv TW11QWxsb2NhdGVDb21tb25CdWZmZXIgKA0KPiA+ID4gKyAgSU4gRUZJX01FTU9SWV9UWVBFICAg ICAgICBNZW1vcnlUeXBlLA0KPiA+ID4gKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICBDb21t b25CdWZmZXJQYWdlcywNCj4gPiA+ICsgIE9VVCBFRklfUEhZU0lDQUxfQUREUkVTUyAgKlBoeXNp Y2FsQWRkcmVzcywNCj4gPiA+ICsgIE9VVCBVSU5UMzIgICAgICAgICAgICAgICAgKlJlc2VydmVk TWVtQml0bWFwDQo+ID4gPiArICApOw0KPiA+ID4gKw0KPiA+ID4gKy8qKg0KPiA+ID4gKyAqIEZy ZWUgQ29tbW9uQnVmZmVyIHdoaWNoIGlzIGFsbG9jYXRlZCBieQ0KPiA+IElvTW11QWxsb2NhdGVD b21tb25CdWZmZXIoKS4NCj4gPiA+ICsgKg0KPiA+ID4gKyAqIEBwYXJhbSBDb21tb25CdWZmZXJI ZWFkZXIgIFBvaW50ZXIgdG8gdGhlDQo+IENvbW1vbkJ1ZmZlckhlYWRlcg0KPiA+ID4gKyAqIEBw YXJhbSBDb21tb25CdWZmZXJQYWdlcyAgIFBhZ2VzIG9mIENvbW1vbkJ1ZmZlcg0KPiA+ID4gKyAq DQo+ID4gPiArICogQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgU3VjY2Vzc2Z1bGx5IGZyZWUg dGhlIGNvbW1vbiBidWZmZXINCj4gPiA+ICsgKiBAcmV0dmFsIE90aGVyICAgICAgICAgICAgICBB cyB0aGUgZXJyb3IgY29kZSBpbmRpY2F0ZXMNCj4gPiA+ICsgKi8NCj4gPiA+ICtFRklfU1RBVFVT DQo+ID4gPiArSW9NbXVGcmVlQ29tbW9uQnVmZmVyICgNCj4gPiA+ICsgIElOIENPTU1PTl9CVUZG RVJfSEVBREVSICAqQ29tbW9uQnVmZmVySGVhZGVyLA0KPiA+ID4gKyAgSU4gVUlOVE4gICAgICAg ICAgICAgICAgIENvbW1vbkJ1ZmZlclBhZ2VzDQo+ID4gPiArICApOw0KPiA+ID4gKw0KPiA+ID4g KyNlbmRpZg0K