From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by mx.groups.io with SMTP id smtpd.web12.57991.1597716628562688905 for ; Mon, 17 Aug 2020 19:10:29 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=NJNa6HaQ; spf=pass (domain: intel.com, ip: 192.55.52.88, mailfrom: jian.j.wang@intel.com) IronPort-SDR: 4bhJdDdCdLM2Z2veErZr2iDcgAylsYteTf+2AeYOpFcJpsb4/EbyKkEaxnxta1pikvo/Evm2K6 uAbHcyKWQqqg== X-IronPort-AV: E=McAfee;i="6000,8403,9716"; a="172874077" X-IronPort-AV: E=Sophos;i="5.76,325,1592895600"; d="scan'208";a="172874077" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Aug 2020 19:10:27 -0700 IronPort-SDR: xB8uIOD1txdCO2WO+zOqAS/DcCq94OQ/rBfQrxE7TznY6VIlutzEcs+m4Qs2KD2l8aZFAdn1BJ jArfrN6UhO4g== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.76,325,1592895600"; d="scan'208";a="279276351" Received: from fmsmsx602-2.cps.intel.com (HELO fmsmsx602.amr.corp.intel.com) ([10.18.84.212]) by fmsmga008.fm.intel.com with ESMTP; 17 Aug 2020 19:10:27 -0700 Received: from fmsmsx602.amr.corp.intel.com (10.18.126.82) 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.1713.5; Mon, 17 Aug 2020 19:10:27 -0700 Received: from fmsmsx103.amr.corp.intel.com (10.18.124.201) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.1.1713.5 via Frontend Transport; Mon, 17 Aug 2020 19:10:27 -0700 Received: from FMSEDG002.ED.cps.intel.com (10.1.192.134) by FMSMSX103.amr.corp.intel.com (10.18.124.201) with Microsoft SMTP Server (TLS) id 14.3.439.0; Mon, 17 Aug 2020 19:10:27 -0700 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (104.47.55.108) by edgegateway.intel.com (192.55.55.69) with Microsoft SMTP Server (TLS) id 14.3.439.0; Mon, 17 Aug 2020 19:10:27 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=I6Edq0znSrqGvkkYcCgPyVh5XFhx7eBbnuM2ATXh35eOgc6hfBjuXtdoCynLaZPhlDHwVsJhcsIti32jxQB6WoaQXqXZeic94KytbNkoKaXAufw0SEt1vpt4J7jTvUKNhclFZnKcnd56fvpyqNxk6zxjxzLyg1F6Prv7HBySZinzz19ydo1EvXSoxaQRxzgY3u5NPOvZnMZBR2YVwqo68eazk8n/UQP/vuubNIoHtIYapP6Ivv07JBUf5QQ3RLrFuXvcCZOfr3HofRok0FRqI/mFRxbt9oZXxd47mtBl/nahxokzLRS7AABfsp9dJDcEbNknzJunlIkC8dL6eby9Og== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=EVblzjRby08dkxM4LgRJ3habIRikVO1kxuEl5ld2tJM=; b=EMfJLFKIVgMOeUbzB/eFOvudWdUqjlD0Qwpcp+Hmes8SWS+E5nr3XyzkIJGWowFZB8V6nWtA2R1334CVMNDQEmfHdckbJns/+YrWv+U3k3xGxoNHTfTgKBlVQ/G9YAtQK/cqGIda2o7wfSzd00te4c/n0filKAGLgqKQcka1uumh3I4br8FsumBkuMGLHH1k0PGXF4oRk8L++LXyFI+x6e7uecyWRaSYA4dbzRv7mBLFiAoIBw+ygAl+gbsHFimJnovmi3bFokTxuaFFHafBo3J+gLDnqh7GL8nQZ5xISwguxtB5hX45boQWKv7CnTHur/2PqNqIv+UL/0CPvnSqRQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=EVblzjRby08dkxM4LgRJ3habIRikVO1kxuEl5ld2tJM=; b=NJNa6HaQEZa59kbMpjZeZmkqQL/8G6/bW2nVUDYVQu8TptXhWbeomF4s744KudtLaRndUlHK0F2z3EIaid/F+axgH8VcJGqIA9wHWiO9o9yzzLKApZMADw54Ahgl0cBg1PV9D+b8MHhZ7uvM5y7L5Kg+Mz9ZuGwkLROTygGHsYY= Received: from SN6PR11MB3312.namprd11.prod.outlook.com (2603:10b6:805:c8::14) by SN6PR11MB2815.namprd11.prod.outlook.com (2603:10b6:805:62::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3283.15; Tue, 18 Aug 2020 02:10:25 +0000 Received: from SN6PR11MB3312.namprd11.prod.outlook.com ([fe80::bc48:4db0:9666:124e]) by SN6PR11MB3312.namprd11.prod.outlook.com ([fe80::bc48:4db0:9666:124e%7]) with mapi id 15.20.3283.024; Tue, 18 Aug 2020 02:10:25 +0000 From: "Wang, Jian J" To: "devel@edk2.groups.io" , "lersek@redhat.com" , "Yao, Jiewen" , "xiewenyi2@huawei.com" CC: "huangming23@huawei.com" , "songdongkuang@huawei.com" , "Mathews, John" Subject: Re: [edk2-devel] [PATCH EDK2 v2 1/1] SecurityPkg/DxeImageVerificationLib:Enhanced verification of Offset Thread-Topic: [edk2-devel] [PATCH EDK2 v2 1/1] SecurityPkg/DxeImageVerificationLib:Enhanced verification of Offset Thread-Index: AQHWcWlF+cIaWospL0uhU/4qGhrUc6k2Ym0AgADa0ICAABCrgIAFPPQAgACVq3A= Date: Tue, 18 Aug 2020 02:10:25 +0000 Message-ID: References: <1597319741-59646-1-git-send-email-xiewenyi2@huawei.com> <1597319741-59646-2-git-send-email-xiewenyi2@huawei.com> <024b1279-609d-fefa-8535-5af072815bf8@huawei.com> <250fc485-8705-88b7-21c9-ecd28132934d@redhat.com> In-Reply-To: <250fc485-8705-88b7-21c9-ecd28132934d@redhat.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiYmM2MDg4ZTAtNGRlNi00M2Y0LTlkMzAtMGIyNzAyZDcwODQyIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiV1wvaE1DV0tSOURSUDdYaVl2YnM3NXB0cHl4YllFdlZyTk1cLzkwUGtXeVdqbFFaQzE1bVlkXC9TbmZ3dFVQeUFUTyJ9 dlp-reaction: no-action dlp-version: 11.5.1.3 dlp-product: dlpe-windows x-ctpclassification: CTP_NT authentication-results: edk2.groups.io; dkim=none (message not signed) header.d=none;edk2.groups.io; dmarc=none action=none header.from=intel.com; x-originating-ip: [192.198.147.203] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: a9c12948-4fbe-421b-a46a-08d8431bdeef x-ms-traffictypediagnostic: SN6PR11MB2815: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:8882; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: He9w5D65stxJTSRhYVDifOb1kklYPH1MSSlDoDAMC1UgM9qfLypNRPL4gDTC2mIeR+2WVk/+uCRgGmZk9EKiP8j7ToYtbBvjYE3dQG55Q/FkOyUFoTmWuIJ9+02CsBQEI7u/ASQJ1uXxLBHrABiJTbpDgznoSY0rukBv340FmiWR3x3uTJ6mj3hGyRLGZLGa+HC8b0rJU2D9YpRUlWm8UriqUZYwqaZrmXXT3x9fQZC5HJPl/bo7YyhVcD5BUhc3GYn6MdPFjN3F/5iNuKoHjkaBzf10MmiPYTKSeDQaamEcTFtrYQ3ejjZE4TThD/RHD0yK/57hZaFPQnUSfQL1CUs2S3X8IK5bOZ8Ucz057uU9kHL76BRPxvTlUu9jV3UKhu6J4zuskR6Yu4mgfU+UaQ== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN6PR11MB3312.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(136003)(376002)(366004)(39860400002)(396003)(346002)(26005)(7696005)(9686003)(52536014)(53546011)(6506007)(55016002)(478600001)(107886003)(19627235002)(86362001)(8676002)(8936002)(83380400001)(66476007)(66556008)(30864003)(2906002)(76116006)(66946007)(110136005)(54906003)(33656002)(15650500001)(71200400001)(4326008)(966005)(5660300002)(186003)(66446008)(64756008)(316002)(559001)(579004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: SRRMcTkuewSsoTvaDuJPlDeCKNEW7zwyErqH6jJqxGAlP5Jnjo0AqM88G8SD4UvcekYMboLRpnQ820y983zgcfbN+uJ9C2fSAzU/8An9/qFIs48jn8TLU8sYlVk8WeSrppulh5kCBatBRHxEWeeS2abb/DSVGtSm/6orvrzn/fWhjqIdNc1suJ3KhK/5oQUDf0w4KaDZoprV9Jg8ezxGqs3iLTv2MoDqf6SuHYXkRZb7E58Nj9PQYC5v9nZhemo525PQBxMlqa86bibffZzqRnLowHRo3NVBflWSzXFwbrb+9y9XY2q+rw/+bUux0RDPABrr3JCpJ8mLgvZiiqsmKb7bFS4D9ebGpiL3VHj2Uy1OHvdZH5dDN2Dv4LZSaX8Y5P5NRJ+I+j9S4pIHrZGg3wSA9st9APMQguKOT2y5MHAegn+MnPqD+j8v99lmDsHT8htD4GhXP8AyixFPuQji2qBqX5k+53vo9ApEqJLLTvCYun5CTZbJERR6zG3k83wXkJ3vkUTu+51xTPtWn40r3kkLiiDp8PnRedzmhGOQxXC1xmQsv+VzudKXxfIzbH2CL0xbfEXBfgJNFmCnv17RupYYN5thlMFf4YefEbWKl8DWRk8toagJBqBOMZ9bvYolgXjbWBkoSqxzn6gGGlwrjA== MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SN6PR11MB3312.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a9c12948-4fbe-421b-a46a-08d8431bdeef X-MS-Exchange-CrossTenant-originalarrivaltime: 18 Aug 2020 02:10:25.5121 (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: zHD6Q7ciUROprm8r+UBpH4oU3mdikT5mpCz97T5cEl+9ZGgJ5I3kfnI0EDgmu0AZevlXRBh7sIzqO95DhQYc6Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR11MB2815 Return-Path: jian.j.wang@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 TGFzemxvLA0KDQpNeSBhcG9sb2dpZXMgZm9yIHRoZSBzbG93IHJlc3BvbnNlLiBJJ20gbm90IHRo ZSBvcmlnaW5hbCByZXBvcnRlciBidXQganVzdCB0aGUgQloNCnN1Ym1pdHRlci4gQW5kIEkgZGlk bid0IGRvIGRlZXAgYW5hbHlzaXMgdG8gdGhpcyBpc3N1ZS4gVGhlIGlzc3VlcyB3YXMgcmVwb3J0 ZWQgZnJvbQ0Kb25lIGludGVybmFsIHRlYW0uIEFkZCBKb2huIGluIGxvb3AgdG8gc2VlIGlmIGhl IGtub3dzIG1vcmUgYWJvdXQgaXQgb3Igbm90Lg0KDQpNeSBzdXBlcmZpY2lhbCB1bmRlcnN0YW5k aW5nIG9uIHN1Y2ggaXNzdWUgaXMgdGhhdCwgaWYgdGhlcmUncyAicG90ZW50aWFsIiBpc3N1ZSBp bg0KdGhlb3J5IGFuZCBoYXJkIHRvIHJlcHJvZHVjZSwgaXQncyBzdGlsbCB3b3J0aHkgb2YgdXNp bmcgYW4gYWx0ZXJuYXRpdmUgd2F5IHRvIHJlcGxhY2UNCnRoZSBvcmlnaW5hbCBpbXBsZW1lbnRh dGlvbiB3aXRoIG5vICJwb3RlbnRpYWwiIGlzc3VlIGF0IGFsbC4gTWF5YmUgd2UgZG9uJ3QgaGF2 ZQ0KdG8gcHJvdmUgb2xkIHdheSBpcyBzb21ldGhpbmcgd3JvbmcgYnV0IG11c3QgcHJvdmUgdGhh dCB0aGUgbmV3IHdheSBpcyByZWFsbHkgc2FmZS4NCg0KUmVnYXJkcywNCkppYW4NCg0KPiAtLS0t LU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBkZXZlbEBlZGsyLmdyb3Vwcy5pbyA8ZGV2 ZWxAZWRrMi5ncm91cHMuaW8+IE9uIEJlaGFsZiBPZiBMYXN6bG8gRXJzZWsNCj4gU2VudDogVHVl c2RheSwgQXVndXN0IDE4LCAyMDIwIDEyOjUzIEFNDQo+IFRvOiBZYW8sIEppZXdlbiA8amlld2Vu Lnlhb0BpbnRlbC5jb20+OyBkZXZlbEBlZGsyLmdyb3Vwcy5pbzsNCj4geGlld2VueWkyQGh1YXdl aS5jb207IFdhbmcsIEppYW4gSiA8amlhbi5qLndhbmdAaW50ZWwuY29tPg0KPiBDYzogaHVhbmdt aW5nMjNAaHVhd2VpLmNvbTsgc29uZ2RvbmdrdWFuZ0BodWF3ZWkuY29tDQo+IFN1YmplY3Q6IFJl OiBbZWRrMi1kZXZlbF0gW1BBVENIIEVESzIgdjIgMS8xXQ0KPiBTZWN1cml0eVBrZy9EeGVJbWFn ZVZlcmlmaWNhdGlvbkxpYjpFbmhhbmNlZCB2ZXJpZmljYXRpb24gb2YgT2Zmc2V0DQo+IA0KPiBI aSBKaWV3ZW4sDQo+IA0KPiBPbiAwOC8xNC8yMCAxMDo1MywgWWFvLCBKaWV3ZW4gd3JvdGU6DQo+ ID4+IFRvIEppZXdlbiwNCj4gPj4gU29ycnksIEkgZG9uJ3QgaGF2ZSBlbnZpcm9ubWVudCB0byBy ZXByb2R1Y2UgdGhlIGlzc3VlLg0KPiA+DQo+ID4gUGxlYXNlIGhlbHAgbWUgdW5kZXJzdGFuZCwg aWYgeW91IGRvbuKAmXQgaGF2ZSBlbnZpcm9ubWVudCB0byByZXByb2R1Y2UgdGhlDQo+IGlzc3Vl LCBob3cgZG8geW91IGd1YXJhbnRlZSB0aGF0IHlvdXIgcGF0Y2ggZG9lcyBmaXggdGhlIHByb2Js ZW0gYW5kIHdlIGRvbuKAmXQNCj4gaGF2ZSBhbnkgb3RoZXIgdnVsbmVyYWJpbGl0aWVzPw0KPiAN Cj4gVGhlIG9yaWdpbmFsIGJ1ZyByZXBvcnQgaW4NCj4gPGh0dHBzOi8vYnVnemlsbGEudGlhbm9j b3JlLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxNSNjMD4gaXMgc2VyaW91c2x5DQo+IGxhY2tpbmcu IEl0IGRvZXMgbm90IGdvIGludG8gZGV0YWlsIGFib3V0IHRoZSBhbGxlZ2VkIGludGVnZXIgb3Zl cmZsb3cuDQo+IEl0IGRvZXMgbm90IHF1b3RlIHRoZSBjb2RlLCBkb2VzIG5vdCBleHBsYWluIHRo ZSBjb250cm9sIGZsb3csIGRvZXMgbm90DQo+IGlkZW50aWZ5IHRoZSBleGFjdCBlZGsyIGNvbW1p dCBhdCB3aGljaCB0aGUgdnVsbmVyYWJpbGl0eSBleGlzdHMuDQo+IA0KPiBUaGUgYnVnIHJlcG9y dCBhbHNvIGRvZXMgbm90IG9mZmVyIGEgcmVwcm9kdWNlci4NCj4gDQo+IEFkZGl0aW9uYWxseSwg dGhlIGV4YWN0IHN0YXRlbWVudCB0aGF0IHRoZSBidWcgcmVwb3J0IGRvZXMgbWFrZSwgbmFtZWx5 DQo+IA0KPiAgIGl0J3MgcG9zc2libGUgdG8gb3ZlcmZsb3cgT2Zmc2V0IGJhY2sgdG8gMCBjYXVz aW5nIGFuIGVuZGxlc3MgbG9vcA0KPiANCj4gaXMgd3JvbmcgKGFzIGZhciBhcyBJIGNhbiB0ZWxs IGFueXdheSkuIEl0IGlzIG5vdCAiT2ZmU2V0IiB0aGF0IGNhbiBiZQ0KPiBvdmVyZmxvd2VkIHRv IHplcm8sIGJ1dCB0aGUgKmFkZGVuZCogdGhhdCBpcyBhZGRlZCB0byBPZmZTZXQgY2FuIGJlDQo+ IG92ZXJmbG93ZWQgdG8gemVyby4gVGhlcmVmb3JlIHRoZSBpbmZpbml0ZSBsb29wIHdpbGwgYXJp c2UgYmVjYXVzZQ0KPiBPZmZTZXQgcmVtYWlucyBzdHVjayBhdCBpdHMgcHJlc2VudCB2YWx1ZSwg YW5kIG5vdCBiZWNhdXNlIE9mZlNldCB3aWxsDQo+IGJlIHJlLXNldCB0byB6ZXJvLg0KPiANCj4g Rm9yIHRoZSByZWFzb25zLCB3ZSBjYW4gb25seSBzcGVjdWxhdGUgYXMgdG8gd2hhdCB0aGUgYWN0 dWFsIHByb2JsZW0gaXMsDQo+IHVubGVzcyBKaWFuIGRlY2lkZXMgdG8gam9pbiB0aGUgZGlzY3Vz c2lvbiBhbmQgY2xhcmlmaWVzIHdoYXQgaGUgaGFkIGluDQo+IG1pbmQgb3JpZ2luYWxseS4NCj4g DQo+IE15IHVuZGVyc3RhbmRpbmcgKG9yIGV2ZW4gInJlY29uc3RydWN0aW9uIikgb2YgdGhlIHZ1 bG5lcmFiaWxpdHkgaXMNCj4gZGVzY3JpYmVkIGFib3ZlLCBhbmQgaW4gdGhlIHBhdGNoZXMgdGhh dCBJIHByb3Bvc2VkLg0KPiANCj4gV2UgY2FuIHdyaXRlIGEgcGF0Y2ggYmFzZWQgb24gY29kZSBh bmFseXNpcy4gSXQncyBwb3NzaWJsZSB0byBpZGVudGlmeQ0KPiBpbnRlZ2VyIG92ZXJmbG93cyBi YXNlZCBvbiBjb2RlIGFuYWx5c2lzLCBhbmQgaXQncyBwb3NzaWJsZSB0byB2ZXJpZnkNCj4gdGhl IGNvcnJlY3RuZXNzIG9mIGZpeGVzIGJ5IGNvZGUgcmV2aWV3LiBPYnZpb3VzbHkgdGVzdGluZyBp cyBhbHdheXMNCj4gZ29vZCwgYnV0IG1hbnkgdGltZXMsIGNvbnN0cnVjdGluZyByZXByb2R1Y2Vy cyBmb3Igc3VjaCBpc3N1ZXMgdGhhdCB3ZXJlDQo+IGZvdW5kIGJ5IGNvZGUgcmV2aWV3LCBpcyBk aWZmaWN1bHQgYW5kIHRpbWUgY29uc3VtaW5nLiBXZSBjYW4gc2F5IHRoYXQNCj4gd2UgZG9uJ3Qg Zml4IHZ1bG5lcmFiaWxpdGllcyB3aXRob3V0IHJlcHJvZHVjZXJzLCBvciB3ZSBjYW4gc2F5IHRo YXQgd2UNCj4gbWFrZSBhbiBlZmZvcnQgdG8gZml4IHRoZW0gZXZlbiBpZiBhbGwgd2UgaGF2ZSBp cyBjb2RlIGFuYWx5c2lzIChhbmQgbm90DQo+IGEgcmVwcm9kdWNlcikuDQo+IA0KPiBTbyB0aGUg YWJvdmUgcGFyYWdyYXBoIGNvbmNlcm5zICJjb3JyZWN0bmVzcyIuIFJlZ2FyZGluZyAiY29tcGxl dGVuZXNzIiwNCj4gSSBndWFyYW50ZWUgeW91IHRoYXQgdGhpcyBwYXRjaCBkb2VzIG5vdCBmaXgg KmFsbCogcHJvYmxlbXMgcmVsYXRlZCB0bw0KPiBQRSBwYXJzaW5nLiAoU2VlIHRoZSBvdGhlciBC WiB0aWNrZXRzLikgSXQgZG9lcyBmaXggKm9uZSogaXNzdWUgd2l0aCBQRQ0KPiBwYXJzaW5nLiBX ZSBjYW4gc2F5IHRoYXQgd2UgdHJ5IHRvIGZpeCBzdWNoIGlzc3VlcyBncmFkdWFsbHkgKGdpdmUN Cj4gZGlmZmVyZW50IENWRSBudW1iZXJzIHRvIGRpZmZlcmVudCBpc3N1ZXMsIGFuZCBhZGRyZXNz IHRoZW0gb25lIGF0IGENCj4gdGltZSksIG9yIHdlIGNhbiBzYXkgdGhhdCB3ZSByZXdyaXRlIFBF IHBhcnNpbmcgZnJvbSB0aGUgZ3JvdW5kIHVwLg0KPiAoQlRXOiBJIGhhdmUgc2VyaW91c2x5IGF0 dGVtcHRlZCB0aGF0IGluIHRoZSBwYXN0LCBhbmQgSSBnYXZlIHVwLA0KPiBiZWNhdXNlIHRoZSBQ RSBmb3JtYXQgaXMgRlVCQVIuKQ0KPiANCj4gSW4gc3VtbWFyeToNCj4gDQo+IC0gdGhlIHByb2Js ZW0gc3RhdGVtZW50IGlzIHVuY2xlYXIsDQo+IA0KPiAtIGl0IHNlZW1zIGxpa2UgdGhlcmUgaXMg aW5kZWVkIGFuIGludGVnZXIgb3ZlcmZsb3cgcHJvYmxlbSBpbiB0aGUNCj4gU2VjRGF0YURpciBw YXJzaW5nIGxvb3AsIGJ1dCBpdCdzIHVuY2VydGFpbiB3aGV0aGVyIHRoZSBidWcgcmVwb3J0ZXIg aGFkDQo+IGV4YWN0bHkgdGhhdCBpbiBtaW5kDQo+IA0KPiAtIFBFIHBhcnNpbmcgaXMgZ3VhcmFu dGVlZCB0byBoYXZlIG90aGVyIHZ1bG5lcmFiaWxpdGllcyBlbHNld2hlcmUgaW4NCj4gZWRrMiwg YnV0IEknbSBjdXJyZW50bHkgdW5hd2FyZSBvZiBvdGhlciBzdWNoIGlzc3VlcyBpbg0KPiBEeGVJ bWFnZVZlcmlmaWNhdGlvbkxpYiBzcGVjaWZpY2FsbHkNCj4gDQo+IC0gZXZlbiBpZiB0aGVyZSBh cmUgb3RoZXIgc3VjaCBwcm9ibGVtcyAoaW4gRHhlSW1hZ2VWZXJpZmljYXRpb25MaWIgb3INCj4g ZWxzd2VoZXJlKSwgZml4aW5nIHRoaXMgYnVnIHRoYXQgd2Uga25vdyBhYm91dCBpcyBsaWtlbHkg d29ydGh3aGlsZQ0KPiANCj4gLSBmb3IgbWFueSBzdWNoIGJ1Z3MsIGNvbnN0cnVjdGluZyBhIHJl cHJvZHVjZXIgaXMgZGlmZmljdWx0IGFuZCB0aW1lDQo+IGNvbnN1bWluZzsgY29kZSBhbmFseXNp cywgYW5kICpyZWdyZXNzaW9uLXRlc3RpbmcqIGFyZSBmcmVxdWVudGx5IHRoZQ0KPiBvbmx5IHRv b2xzIHdlIGhhdmUuIFRoYXQgZG9lc24ndCBtZWFuIHdlIHNob3VsZCBpZ25vcmUgdGhpcyBjbGFz cyBvZiBidWdzLg0KPiANCj4gKEZpeGluZyBpbnRlZ2VyIG92ZXJmbG93cyByZXRyby1hY3RpdmVs eSBpcyBtb3JlIGRpZmZpY3VsdCB0aGFuIHdyaXRpbmcNCj4gb3ZlcmZsb3ctZnJlZSBjb2RlIGlu IHRoZSBmaXJzdCBwbGFjZSwgYnV0IHRoYXQgc2hpcCBoYXMgc2FpbGVkOyBzbyB3ZQ0KPiBjYW4g b25seSBmaWdodCB0aGVzZSBidWdzIGluY3JlbWVudGFsbHkgbm93LCB1bmxlc3Mgd2UgY2FuIHJl d3JpdGUgUEUNCj4gcGFyc2luZyB3aXRoIGEgbmV3IGRhdGEgc3RydWN0dXJlIGZyb20gdGhlIGdy b3VuZCB1cC4gQWdhaW4gSSB0cmllZCB0aGF0DQo+IGFuZCBnYXZlIHVwLCBiZWNhdXNlIHRoZSBz cGVjIGlzIG5vdCBwdWJsaWMsIGFuZCB3aGF0IEkgZGlkIG1hbmFnZSB0bw0KPiBsZWFybiBhYm91 dCBQRSwgc2hvd2VkIHRoYXQgaXQgd2FzIGluc2FuZWx5IG92ZXItZW5naW5lZXJlZC4gSSdtIG5v dA0KPiBzYXlpbmcgdGhhdCBvdGhlciBiaW5hcnkgLyBleGVjdXRhYmxlIGZvcm1hdHMgYXJlIGJl dHRlciwgb2YgY291cnNlLikNCj4gDQo+IFBsZWFzZSBjaGVjayBvdXQgbXkgcGF0Y2hlcyAoaW5s aW5lZCBlbHNld2hlcmUgaW4gdGhpcyB0aHJlYWQpLCBhbmQNCj4gY29tbWVudCB3aGV0aGVyIHlv dSdkIGxpa2UgbWUgdG8gcG9zdCB0aGVtIHRvIHRoZSBsaXN0IGFzIGEgc3RhbmRhbG9uZQ0KPiBz ZXJpZXMuDQo+IA0KPiBKaWFuOiBpdCB3b3VsZG4ndCBodXJ0IGlmIHlvdSBjb21tZW50ZWQgYXMg d2VsbC4NCj4gDQo+IFRoYW5rcw0KPiBMYXN6bG8NCj4gDQo+ID4+IC0tLS0tT3JpZ2luYWwgTWVz c2FnZS0tLS0tDQo+ID4+IEZyb206IGRldmVsQGVkazIuZ3JvdXBzLmlvIDxkZXZlbEBlZGsyLmdy b3Vwcy5pbz4gT24gQmVoYWxmIE9mDQo+IHdlbnlpLHhpZQ0KPiA+PiB2aWEgZ3JvdXBzLmlvDQo+ ID4+IFNlbnQ6IEZyaWRheSwgQXVndXN0IDE0LCAyMDIwIDM6NTQgUE0NCj4gPj4gVG86IExhc3ps byBFcnNlayA8bGVyc2VrQHJlZGhhdC5jb20+OyBkZXZlbEBlZGsyLmdyb3Vwcy5pbzsgWWFvLCBK aWV3ZW4NCj4gPj4gPGppZXdlbi55YW9AaW50ZWwuY29tPjsgV2FuZywgSmlhbiBKIDxqaWFuLmou d2FuZ0BpbnRlbC5jb20+DQo+ID4+IENjOiBodWFuZ21pbmcyM0BodWF3ZWkuY29tOyBzb25nZG9u Z2t1YW5nQGh1YXdlaS5jb20NCj4gPj4gU3ViamVjdDogUmU6IFtlZGsyLWRldmVsXSBbUEFUQ0gg RURLMiB2MiAxLzFdDQo+ID4+IFNlY3VyaXR5UGtnL0R4ZUltYWdlVmVyaWZpY2F0aW9uTGliOkVu aGFuY2VkIHZlcmlmaWNhdGlvbiBvZiBPZmZzZXQNCj4gPj4NCj4gPj4gVG8gTGFzemxvLA0KPiA+ PiBUaGFuayB5b3UgZm9yIHlvdXIgZGV0YWlsZWQgZGVzY3JpcHRpb24sIEkgYWdyZWUgd2l0aCB3 aGF0IHlvdSBhbmFseXplZCBhbmQNCj4gSSdtDQo+ID4+IE9LIHdpdGggeW91ciBwYXRjaGVzLCBp dCdzDQo+ID4+IGNvcnJlY3QgYW5kIG11Y2ggc2ltcGxlci4NCj4gPj4NCj4gPj4gVG8gSmlld2Vu LA0KPiA+PiBTb3JyeSwgSSBkb24ndCBoYXZlIGVudmlyb25tZW50IHRvIHJlcHJvZHVjZSB0aGUg aXNzdWUuDQo+ID4+DQo+ID4+IFRoYW5rcw0KPiA+PiBXZW55aQ0KPiA+Pg0KPiA+PiBPbiAyMDIw LzgvMTQgMjo1MCwgTGFzemxvIEVyc2VrIHdyb3RlOg0KPiA+Pj4gT24gMDgvMTMvMjAgMTM6NTUs IFdlbnlpIFhpZSB3cm90ZToNCj4gPj4+PiBSRUY6aHR0cHM6Ly9idWd6aWxsYS50aWFub2NvcmUu b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjE1DQo+ID4+Pj4NCj4gPj4+PiBUaGVyZSBpcyBhbiBpbnRl Z2VyIG92ZXJmbG93IHZ1bG5lcmFiaWxpdHkgaW4gRHhlSW1hZ2VWZXJpZmljYXRpb25IYW5kbGVy DQo+ID4+Pj4gZnVuY3Rpb24gd2hlbiBwYXJzaW5nIHRoZSBQRSBmaWxlcyBhdHRyaWJ1dGUgY2Vy dGlmaWNhdGUgdGFibGUuIEluIGNhc2VzDQo+ID4+Pj4gd2hlcmUgV2luQ2VydGlmaWNhdGUtPmR3 TGVuZ3RoIGlzIHN1ZmZpY2llbnRseSBsYXJnZSwgaXQncyBwb3NzaWJsZSB0bw0KPiA+Pj4+IG92 ZXJmbG93IE9mZnNldCBiYWNrIHRvIDAgY2F1c2luZyBhbiBlbmRsZXNzIGxvb3AuDQo+ID4+Pj4N Cj4gPj4+PiBDaGVjayBvZmZzZXQgaW5iZXR3ZWVuIFZpcnR1YWxBZGRyZXNzIGFuZCBWaXJ0dWFs QWRkcmVzcyArIFNpemUuDQo+ID4+Pj4gVXNpbmcgU2FmZWludExpYiB0byBkbyBvZmZzZXQgYWRk aXRpb24gd2l0aCByZXN1bHQgY2hlY2suDQo+ID4+Pj4NCj4gPj4+PiBDYzogSmlld2VuIFlhbyA8 amlld2VuLnlhb0BpbnRlbC5jb20+DQo+ID4+Pj4gQ2M6IEppYW4gSiBXYW5nIDxqaWFuLmoud2Fu Z0BpbnRlbC5jb20+DQo+ID4+Pj4gQ2M6IExhc3psbyBFcnNlayA8bGVyc2VrQHJlZGhhdC5jb20+ DQo+ID4+Pj4gU2lnbmVkLW9mZi1ieTogV2VueWkgWGllIDx4aWV3ZW55aTJAaHVhd2VpLmNvbT4N Cj4gPj4+PiAtLS0NCj4gPj4+PiAgU2VjdXJpdHlQa2cvTGlicmFyeS9EeGVJbWFnZVZlcmlmaWNh dGlvbkxpYi9EeGVJbWFnZVZlcmlmaWNhdGlvbkxpYi5pbmYNCj4gfA0KPiA+PiAxICsNCj4gPj4+ PiAgU2VjdXJpdHlQa2cvTGlicmFyeS9EeGVJbWFnZVZlcmlmaWNhdGlvbkxpYi9EeGVJbWFnZVZl cmlmaWNhdGlvbkxpYi5oDQo+IHwNCj4gPj4gMSArDQo+ID4+Pj4gIFNlY3VyaXR5UGtnL0xpYnJh cnkvRHhlSW1hZ2VWZXJpZmljYXRpb25MaWIvRHhlSW1hZ2VWZXJpZmljYXRpb25MaWIuYw0KPiB8 DQo+ID4+IDExMSArKysrKysrKysrKy0tLS0tLS0tLQ0KPiA+Pj4+ICAzIGZpbGVzIGNoYW5nZWQs IDYzIGluc2VydGlvbnMoKyksIDUwIGRlbGV0aW9ucygtKQ0KPiA+Pj4+DQo+ID4+Pj4gZGlmZiAt LWdpdA0KPiA+PiBhL1NlY3VyaXR5UGtnL0xpYnJhcnkvRHhlSW1hZ2VWZXJpZmljYXRpb25MaWIv RHhlSW1hZ2VWZXJpZmljYXRpb25MaWIuaW5mDQo+ID4+IGIvU2VjdXJpdHlQa2cvTGlicmFyeS9E eGVJbWFnZVZlcmlmaWNhdGlvbkxpYi9EeGVJbWFnZVZlcmlmaWNhdGlvbkxpYi5pbmYNCj4gPj4+ PiBpbmRleCAxZTFhNjM5ODU3ZTAuLmE3YWM0ODMwYjNkNCAxMDA2NDQNCj4gPj4+PiAtLS0NCj4g Pj4gYS9TZWN1cml0eVBrZy9MaWJyYXJ5L0R4ZUltYWdlVmVyaWZpY2F0aW9uTGliL0R4ZUltYWdl VmVyaWZpY2F0aW9uTGliLmluZg0KPiA+Pj4+ICsrKw0KPiA+PiBiL1NlY3VyaXR5UGtnL0xpYnJh cnkvRHhlSW1hZ2VWZXJpZmljYXRpb25MaWIvRHhlSW1hZ2VWZXJpZmljYXRpb25MaWIuaW5mDQo+ ID4+Pj4gQEAgLTUzLDYgKzUzLDcgQEAgW0xpYnJhcnlDbGFzc2VzXQ0KPiA+Pj4+ICAgIFNlY3Vy aXR5TWFuYWdlbWVudExpYg0KPiA+Pj4+ICAgIFBlQ29mZkxpYg0KPiA+Pj4+ICAgIFRwbU1lYXN1 cmVtZW50TGliDQo+ID4+Pj4gKyAgU2FmZUludExpYg0KPiA+Pj4+DQo+ID4+Pj4gIFtQcm90b2Nv bHNdDQo+ID4+Pj4gICAgZ0VmaUZpcm13YXJlVm9sdW1lMlByb3RvY29sR3VpZCAgICAgICAjIyBT T01FVElNRVNfQ09OU1VNRVMNCj4gPj4+PiBkaWZmIC0tZ2l0DQo+ID4+IGEvU2VjdXJpdHlQa2cv TGlicmFyeS9EeGVJbWFnZVZlcmlmaWNhdGlvbkxpYi9EeGVJbWFnZVZlcmlmaWNhdGlvbkxpYi5o DQo+ID4+IGIvU2VjdXJpdHlQa2cvTGlicmFyeS9EeGVJbWFnZVZlcmlmaWNhdGlvbkxpYi9EeGVJ bWFnZVZlcmlmaWNhdGlvbkxpYi5oDQo+ID4+Pj4gaW5kZXggMTc5NTVmZjk3NzRjLi4wNjAyNzM5 MTdkNWQgMTAwNjQ0DQo+ID4+Pj4gLS0tDQo+ID4+IGEvU2VjdXJpdHlQa2cvTGlicmFyeS9EeGVJ bWFnZVZlcmlmaWNhdGlvbkxpYi9EeGVJbWFnZVZlcmlmaWNhdGlvbkxpYi5oDQo+ID4+Pj4gKysr DQo+ID4+IGIvU2VjdXJpdHlQa2cvTGlicmFyeS9EeGVJbWFnZVZlcmlmaWNhdGlvbkxpYi9EeGVJ bWFnZVZlcmlmaWNhdGlvbkxpYi5oDQo+ID4+Pj4gQEAgLTIzLDYgKzIzLDcgQEAgU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gPj4+PiAgI2luY2x1ZGUgPExp YnJhcnkvRGV2aWNlUGF0aExpYi5oPg0KPiA+Pj4+ICAjaW5jbHVkZSA8TGlicmFyeS9TZWN1cml0 eU1hbmFnZW1lbnRMaWIuaD4NCj4gPj4+PiAgI2luY2x1ZGUgPExpYnJhcnkvUGVDb2ZmTGliLmg+ DQo+ID4+Pj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1NhZmVJbnRMaWIuaD4NCj4gPj4+PiAgI2luY2x1 ZGUgPFByb3RvY29sL0Zpcm13YXJlVm9sdW1lMi5oPg0KPiA+Pj4+ICAjaW5jbHVkZSA8UHJvdG9j b2wvRGV2aWNlUGF0aC5oPg0KPiA+Pj4+ICAjaW5jbHVkZSA8UHJvdG9jb2wvQmxvY2tJby5oPg0K PiA+Pj4+IGRpZmYgLS1naXQNCj4gPj4gYS9TZWN1cml0eVBrZy9MaWJyYXJ5L0R4ZUltYWdlVmVy aWZpY2F0aW9uTGliL0R4ZUltYWdlVmVyaWZpY2F0aW9uTGliLmMNCj4gPj4gYi9TZWN1cml0eVBr Zy9MaWJyYXJ5L0R4ZUltYWdlVmVyaWZpY2F0aW9uTGliL0R4ZUltYWdlVmVyaWZpY2F0aW9uTGli LmMNCj4gPj4+PiBpbmRleCAzNmI4N2UxNmQ1M2QuLmRiYzAzZTI4YzA1YiAxMDA2NDQNCj4gPj4+ PiAtLS0NCj4gYS9TZWN1cml0eVBrZy9MaWJyYXJ5L0R4ZUltYWdlVmVyaWZpY2F0aW9uTGliL0R4 ZUltYWdlVmVyaWZpY2F0aW9uTGliLmMNCj4gPj4+PiArKysNCj4gPj4gYi9TZWN1cml0eVBrZy9M aWJyYXJ5L0R4ZUltYWdlVmVyaWZpY2F0aW9uTGliL0R4ZUltYWdlVmVyaWZpY2F0aW9uTGliLmMN Cj4gPj4+PiBAQCAtMTY1OCw2ICsxNjU4LDEwIEBAIER4ZUltYWdlVmVyaWZpY2F0aW9uSGFuZGxl ciAoDQo+ID4+Pj4gICAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhc2hT dGF0dXM7DQo+ID4+Pj4gICAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgIERi U3RhdHVzOw0KPiA+Pj4+ICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJ c0ZvdW5kOw0KPiA+Pj4+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB bGlnbmVkTGVuZ3RoOw0KPiA+Pj4+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBSZXN1bHQ7DQo+ID4+Pj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAg ICAgIEFkZFN0YXR1czsNCj4gPj4+PiArICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgSXNBdXRoRGF0YUFzc2lnbmVkOw0KPiA+Pj4+DQo+ID4+Pj4gICAgU2lnbmF0dXJlTGlz dCAgICAgPSBOVUxMOw0KPiA+Pj4+ICAgIFNpZ25hdHVyZUxpc3RTaXplID0gMDsNCj4gPj4+PiBA QCAtMTY2Nyw2ICsxNjcxLDcgQEAgRHhlSW1hZ2VWZXJpZmljYXRpb25IYW5kbGVyICgNCj4gPj4+ PiAgICBBY3Rpb24gICAgICAgICAgICA9IEVGSV9JTUFHRV9FWEVDVVRJT05fQVVUSF9VTlRFU1RF RDsNCj4gPj4+PiAgICBJc1ZlcmlmaWVkICAgICAgICA9IEZBTFNFOw0KPiA+Pj4+ICAgIElzRm91 bmQgICAgICAgICAgID0gRkFMU0U7DQo+ID4+Pj4gKyAgUmVzdWx0ICAgICAgICAgICAgPSAwOw0K PiA+Pj4+DQo+ID4+Pj4gICAgLy8NCj4gPj4+PiAgICAvLyBDaGVjayB0aGUgaW1hZ2UgdHlwZSBh bmQgZ2V0IHBvbGljeSBzZXR0aW5nLg0KPiA+Pj4+IEBAIC0xODUwLDkgKzE4NTUsMTAgQEAgRHhl SW1hZ2VWZXJpZmljYXRpb25IYW5kbGVyICgNCj4gPj4+PiAgICAvLyBUaGUgZmlyc3QgY2VydGlm aWNhdGUgc3RhcnRzIGF0IG9mZnNldCAoU2VjRGF0YURpci0+VmlydHVhbEFkZHJlc3MpIGZyb20N Cj4gdGhlDQo+ID4+IHN0YXJ0IG9mIHRoZSBmaWxlLg0KPiA+Pj4+ICAgIC8vDQo+ID4+Pj4gICAg Zm9yIChPZmZTZXQgPSBTZWNEYXRhRGlyLT5WaXJ0dWFsQWRkcmVzczsNCj4gPj4+PiAtICAgICAg IE9mZlNldCA8IChTZWNEYXRhRGlyLT5WaXJ0dWFsQWRkcmVzcyArIFNlY0RhdGFEaXItPlNpemUp Ow0KPiA+Pj4+IC0gICAgICAgT2ZmU2V0ICs9IChXaW5DZXJ0aWZpY2F0ZS0+ZHdMZW5ndGggKyBB TElHTl9TSVpFIChXaW5DZXJ0aWZpY2F0ZS0NCj4gPj4+IGR3TGVuZ3RoKSkpIHsNCj4gPj4+PiAr ICAgICAgIChPZmZTZXQgPj0gU2VjRGF0YURpci0+VmlydHVhbEFkZHJlc3MpICYmIChPZmZTZXQg PCAoU2VjRGF0YURpci0NCj4gPj4+IFZpcnR1YWxBZGRyZXNzICsgU2VjRGF0YURpci0+U2l6ZSkp Oykgew0KPiA+Pj4+ICsgICAgSXNBdXRoRGF0YUFzc2lnbmVkID0gRkFMU0U7DQo+ID4+Pj4gICAg ICBXaW5DZXJ0aWZpY2F0ZSA9IChXSU5fQ0VSVElGSUNBVEUgKikgKG1JbWFnZUJhc2UgKyBPZmZT ZXQpOw0KPiA+Pj4+ICsgICAgQWxpZ25lZExlbmd0aCA9IFdpbkNlcnRpZmljYXRlLT5kd0xlbmd0 aCArIEFMSUdOX1NJWkUNCj4gKFdpbkNlcnRpZmljYXRlLQ0KPiA+Pj4gZHdMZW5ndGgpOw0KPiA+ Pj4NCj4gPj4+IEkgZGlzYWdyZWUgd2l0aCB0aGlzIHBhdGNoLg0KPiA+Pj4NCj4gPj4+IFRoZSBw cmltYXJ5IHJlYXNvbiBmb3IgbXkgZGlzYWdyZWVtZW50IGlzIHRoYXQgdGhlIGJ1ZyByZXBvcnQN Cj4gPj4+IDxodHRwczovL2J1Z3ppbGxhLnRpYW5vY29yZS5vcmcvc2hvd19idWcuY2dpP2lkPTIy MTUjYzA+IGlzIGluZXhhY3QsIGFuZA0KPiA+Pj4gc28gdGhpcyBwYXRjaCB0cmllcyB0byBmaXgg dGhlIHdyb25nIHRoaW5nLg0KPiA+Pj4NCj4gPj4+IFdpdGggZWRrMiBtYXN0ZXIgYXQgY29tbWl0 IDY1OTA0Y2RiYjMzYywgaXQgaXMgKm5vdCogcG9zc2libGUgdG8NCj4gPj4+IG92ZXJmbG93IHRo ZSBPZmZTZXQgdmFyaWFibGUgdG8gemVybyB3aXRoICJXaW5DZXJ0aWZpY2F0ZS0+ZHdMZW5ndGgi DQo+ID4+PiAqcHVyZWx5KiwgYW5kIGNhdXNlIGFuIGVuZGxlc3MgbG9vcC4gTm90ZSB0aGF0IHdl IGhhdmUgKGF0IGNvbW1pdA0KPiA+Pj4gNjU5MDRjZGJiMzNjKToNCj4gPj4+DQo+ID4+PiAgIGZv ciAoT2ZmU2V0ID0gU2VjRGF0YURpci0+VmlydHVhbEFkZHJlc3M7DQo+ID4+PiAgICAgICAgT2Zm U2V0IDwgKFNlY0RhdGFEaXItPlZpcnR1YWxBZGRyZXNzICsgU2VjRGF0YURpci0+U2l6ZSk7DQo+ ID4+PiAgICAgICAgT2ZmU2V0ICs9IChXaW5DZXJ0aWZpY2F0ZS0+ZHdMZW5ndGggKyBBTElHTl9T SVpFIChXaW5DZXJ0aWZpY2F0ZS0NCj4gPj4+IGR3TGVuZ3RoKSkpIHsNCj4gPj4+ICAgICBXaW5D ZXJ0aWZpY2F0ZSA9IChXSU5fQ0VSVElGSUNBVEUgKikgKG1JbWFnZUJhc2UgKyBPZmZTZXQpOw0K PiA+Pj4gICAgIGlmICgoU2VjRGF0YURpci0+VmlydHVhbEFkZHJlc3MgKyBTZWNEYXRhRGlyLT5T aXplIC0gT2ZmU2V0KSA8PSBzaXplb2YNCj4gPj4gKFdJTl9DRVJUSUZJQ0FURSkgfHwNCj4gPj4+ ICAgICAgICAgKFNlY0RhdGFEaXItPlZpcnR1YWxBZGRyZXNzICsgU2VjRGF0YURpci0+U2l6ZSAt IE9mZlNldCkgPA0KPiBXaW5DZXJ0aWZpY2F0ZS0NCj4gPj4+IGR3TGVuZ3RoKSB7DQo+ID4+PiAg ICAgICBicmVhazsNCj4gPj4+ICAgICB9DQo+ID4+Pg0KPiA+Pj4gVGhlIGxhc3Qgc3ViLWNvbmRp dGlvbiBjaGVja3Mgd2hldGhlciB0aGUgU2VjdXJpdHkgRGF0YSBEaXJlY3RvcnkgaGFzDQo+ID4+ PiBlbm91Z2ggcm9vbSBsZWZ0IGZvciAiV2luQ2VydGlmaWNhdGUtPmR3TGVuZ3RoIi4gSWYgbm90 LCB0aGVuIHdlIGJyZWFrDQo+ID4+PiBvdXQgb2YgdGhlIGxvb3AuDQo+ID4+Pg0KPiA+Pj4gSWYg d2UgKmRvKiBoYXZlIGVub3VnaCByb29tLCB0aGF0IGlzOg0KPiA+Pj4NCj4gPj4+ICAgKFNlY0Rh dGFEaXItPlZpcnR1YWxBZGRyZXNzICsgU2VjRGF0YURpci0+U2l6ZSAtIE9mZlNldCkgPj0NCj4g V2luQ2VydGlmaWNhdGUtDQo+ID4+PiBkd0xlbmd0aA0KPiA+Pj4NCj4gPj4+IHRoZW4gd2UgaGF2 ZSAoYnkgYWRkaW5nIE9mZlNldCB0byBib3RoIHNpZGVzKToNCj4gPj4+DQo+ID4+PiAgIFNlY0Rh dGFEaXItPlZpcnR1YWxBZGRyZXNzICsgU2VjRGF0YURpci0+U2l6ZSA+PSBPZmZTZXQgKyBXaW5D ZXJ0aWZpY2F0ZS0NCj4gPj4+IGR3TGVuZ3RoDQo+ID4+Pg0KPiA+Pj4gVGhlIGxlZnQgaGFuZCBz aWRlIGlzIGEga25vd24tZ29vZCBVSU5UMzIsIGFuZCBzbyBpbmNyZW1lbnRpbmcgT2ZmU2V0IChh DQo+ID4+PiBVSU5UMzIpICpzb2xlbHkqIGJ5ICJXaW5DZXJ0aWZpY2F0ZS0+ZHdMZW5ndGgiIChh bHNvIGEgVUlOVDMyKSBkb2VzIG5vdA0KPiA+Pj4gY2F1c2UgYW4gb3ZlcmZsb3cuDQo+ID4+Pg0K PiA+Pj4gSW5zdGVhZCwgdGhlIHByb2JsZW0gaXMgd2l0aCB0aGUgYWxpZ25tZW50LiBUaGUgImlm IiBzdGF0ZW1lbnQgY2hlY2tzDQo+ID4+PiB3aGV0aGVyIHdlIGhhdmUgZW5vdWdoIHJvb20gZm9y ICJkd0xlbmd0aCIsIGJ1dCB0aGVuICJPZmZTZXQiIGlzDQo+ID4+PiBhZHZhbmNlZCBieSAiZHdM ZW5ndGgiICphbGlnbmVkIHVwKiB0byB0aGUgbmV4dCBtdWx0aXBsZSBvZiA4LiBBbmQgdGhhdA0K PiA+Pj4gbWF5IGluZGVlZCBjYXVzZSB2YXJpb3VzIG92ZXJmbG93cy4NCj4gPj4+DQo+ID4+PiBO b3csIHRoZSBtYWluIHByb2JsZW0gd2l0aCB0aGUgcHJlc2VudCBwYXRjaCBpcyB0aGF0IGl0IGRv ZXMgbm90IGZpeCBvbmUNCj4gPj4+IG9mIHRob3NlIG92ZXJmbG93cy4gTmFtZWx5LCBjb25zaWRl ciB0aGF0ICJkd0xlbmd0aCIgaXMgdmVyeSBjbG9zZSB0bw0KPiA+Pj4gTUFYX1VJTlQzMiAob3Ig ZXZlbiB0aGluayBpdCdzIGV4YWN0bHkgTUFYX1VJTlQzMikuIFRoZW4gYWxpZ25pbmcgaXQgdXAN Cj4gPj4+IHRvIHRoZSBuZXh0IG11bHRpcGxlIG9mIDggd2lsbCB5aWVsZCAwLiBJbiBvdGhlciB3 b3JkcywgIkFsaWduZWRMZW5ndGgiDQo+ID4+PiB3aWxsIGJlIHplcm8uDQo+ID4+Pg0KPiA+Pj4g QW5kIHdoZW4gdGhhdCBoYXBwZW5zLCB0aGVyZSdzIGdvaW5nIHRvIGJlIGFuIGluZmluaXRlIGxv b3AganVzdCB0aGUNCj4gPj4+IHNhbWU6ICJPZmZTZXQiIHdpbGwgbm90IGJlIHplcm8sIGJ1dCBp dCB3aWxsIGJlICpzdHVjayouIFRoZQ0KPiA+Pj4gU2FmZVVpbnQzMkFkZCgpIGNhbGwgYXQgdGhl IGJvdHRvbSB3aWxsIHN1Y2NlZWQsIGJ1dCBpdCB3aWxsIG5vdCBjaGFuZ2UNCj4gPj4+IHRoZSB2 YWx1ZSBvZiAiT2ZmU2V0Ii4NCj4gPj4+DQo+ID4+PiBNb3JlIGF0IHRoZSBib3R0b20uDQo+ID4+ Pg0KPiA+Pj4NCj4gPj4+PiAgICAgIGlmICgoU2VjRGF0YURpci0+VmlydHVhbEFkZHJlc3MgKyBT ZWNEYXRhRGlyLT5TaXplIC0gT2ZmU2V0KSA8PSBzaXplb2YNCj4gPj4gKFdJTl9DRVJUSUZJQ0FU RSkgfHwNCj4gPj4+PiAgICAgICAgICAoU2VjRGF0YURpci0+VmlydHVhbEFkZHJlc3MgKyBTZWNE YXRhRGlyLT5TaXplIC0gT2ZmU2V0KSA8DQo+ID4+IFdpbkNlcnRpZmljYXRlLT5kd0xlbmd0aCkg ew0KPiA+Pj4+ICAgICAgICBicmVhazsNCj4gPj4+PiBAQCAtMTg3Miw2ICsxODc4LDggQEAgRHhl SW1hZ2VWZXJpZmljYXRpb25IYW5kbGVyICgNCj4gPj4+PiAgICAgICAgfQ0KPiA+Pj4+ICAgICAg ICBBdXRoRGF0YSAgID0gUGtjc0NlcnREYXRhLT5DZXJ0RGF0YTsNCj4gPj4+PiAgICAgICAgQXV0 aERhdGFTaXplID0gUGtjc0NlcnREYXRhLT5IZHIuZHdMZW5ndGggLSBzaXplb2YoUGtjc0NlcnRE YXRhLQ0KPiA+SGRyKTsNCj4gPj4+PiArICAgICAgSXNBdXRoRGF0YUFzc2lnbmVkID0gVFJVRTsN Cj4gPj4+PiArICAgICAgSGFzaFN0YXR1cyA9IEhhc2hQZUltYWdlQnlUeXBlIChBdXRoRGF0YSwg QXV0aERhdGFTaXplKTsNCj4gPj4+PiAgICAgIH0gZWxzZSBpZiAoV2luQ2VydGlmaWNhdGUtPndD ZXJ0aWZpY2F0ZVR5cGUgPT0NCj4gV0lOX0NFUlRfVFlQRV9FRklfR1VJRCkNCj4gPj4gew0KPiA+ Pj4+ICAgICAgICAvLw0KPiA+Pj4+ICAgICAgICAvLyBUaGUgY2VydGlmaWNhdGUgaXMgZm9ybWF0 dGVkIGFzIFdJTl9DRVJUSUZJQ0FURV9VRUZJX0dVSUQgd2hpY2gNCj4gaXMNCj4gPj4gZGVzY3Jp YmVkIGluIFVFRkkgU3BlYy4NCj4gPj4+PiBAQCAtMTg4MCw3MiArMTg4OCw3NSBAQCBEeGVJbWFn ZVZlcmlmaWNhdGlvbkhhbmRsZXIgKA0KPiA+Pj4+ICAgICAgICBpZiAoV2luQ2VydFVlZmlHdWlk LT5IZHIuZHdMZW5ndGggPD0NCj4gPj4gT0ZGU0VUX09GKFdJTl9DRVJUSUZJQ0FURV9VRUZJX0dV SUQsIENlcnREYXRhKSkgew0KPiA+Pj4+ICAgICAgICAgIGJyZWFrOw0KPiA+Pj4+ICAgICAgICB9 DQo+ID4+Pj4gLSAgICAgIGlmICghQ29tcGFyZUd1aWQgKCZXaW5DZXJ0VWVmaUd1aWQtPkNlcnRU eXBlLCAmZ0VmaUNlcnRQa2NzN0d1aWQpKQ0KPiB7DQo+ID4+Pj4gLSAgICAgICAgY29udGludWU7 DQo+ID4+Pj4gKyAgICAgIGlmIChDb21wYXJlR3VpZCAoJldpbkNlcnRVZWZpR3VpZC0+Q2VydFR5 cGUsICZnRWZpQ2VydFBrY3M3R3VpZCkpDQo+IHsNCj4gPj4+PiArICAgICAgICBBdXRoRGF0YSA9 IFdpbkNlcnRVZWZpR3VpZC0+Q2VydERhdGE7DQo+ID4+Pj4gKyAgICAgICAgQXV0aERhdGFTaXpl ID0gV2luQ2VydFVlZmlHdWlkLT5IZHIuZHdMZW5ndGggLQ0KPiA+PiBPRkZTRVRfT0YoV0lOX0NF UlRJRklDQVRFX1VFRklfR1VJRCwgQ2VydERhdGEpOw0KPiA+Pj4+ICsgICAgICAgIElzQXV0aERh dGFBc3NpZ25lZCA9IFRSVUU7DQo+ID4+Pj4gKyAgICAgICAgSGFzaFN0YXR1cyA9IEhhc2hQZUlt YWdlQnlUeXBlIChBdXRoRGF0YSwgQXV0aERhdGFTaXplKTsNCj4gPj4+PiAgICAgICAgfQ0KPiA+ Pj4+IC0gICAgICBBdXRoRGF0YSA9IFdpbkNlcnRVZWZpR3VpZC0+Q2VydERhdGE7DQo+ID4+Pj4g LSAgICAgIEF1dGhEYXRhU2l6ZSA9IFdpbkNlcnRVZWZpR3VpZC0+SGRyLmR3TGVuZ3RoIC0NCj4g Pj4gT0ZGU0VUX09GKFdJTl9DRVJUSUZJQ0FURV9VRUZJX0dVSUQsIENlcnREYXRhKTsNCj4gPj4+ PiAgICAgIH0gZWxzZSB7DQo+ID4+Pj4gICAgICAgIGlmIChXaW5DZXJ0aWZpY2F0ZS0+ZHdMZW5n dGggPCBzaXplb2YgKFdJTl9DRVJUSUZJQ0FURSkpIHsNCj4gPj4+PiAgICAgICAgICBicmVhazsN Cj4gPj4+PiAgICAgICAgfQ0KPiA+Pj4+IC0gICAgICBjb250aW51ZTsNCj4gPj4+PiAgICAgIH0N Cj4gPj4+Pg0KPiA+Pj4+IC0gICAgSGFzaFN0YXR1cyA9IEhhc2hQZUltYWdlQnlUeXBlIChBdXRo RGF0YSwgQXV0aERhdGFTaXplKTsNCj4gPj4+PiAtICAgIGlmIChFRklfRVJST1IgKEhhc2hTdGF0 dXMpKSB7DQo+ID4+Pj4gLSAgICAgIGNvbnRpbnVlOw0KPiA+Pj4+IC0gICAgfQ0KPiA+Pj4+IC0N Cj4gPj4+PiAtICAgIC8vDQo+ID4+Pj4gLSAgICAvLyBDaGVjayB0aGUgZGlnaXRhbCBzaWduYXR1 cmUgYWdhaW5zdCB0aGUgcmV2b2tlZCBjZXJ0aWZpY2F0ZSBpbg0KPiBmb3JiaWRkZW4NCj4gPj4g ZGF0YWJhc2UgKGRieCkuDQo+ID4+Pj4gLSAgICAvLw0KPiA+Pj4+IC0gICAgaWYgKElzRm9yYmlk ZGVuQnlEYnggKEF1dGhEYXRhLCBBdXRoRGF0YVNpemUpKSB7DQo+ID4+Pj4gLSAgICAgIEFjdGlv biA9IEVGSV9JTUFHRV9FWEVDVVRJT05fQVVUSF9TSUdfRkFJTEVEOw0KPiA+Pj4+IC0gICAgICBJ c1ZlcmlmaWVkID0gRkFMU0U7DQo+ID4+Pj4gLSAgICAgIGJyZWFrOw0KPiA+Pj4+IC0gICAgfQ0K PiA+Pj4+IC0NCj4gPj4+PiAtICAgIC8vDQo+ID4+Pj4gLSAgICAvLyBDaGVjayB0aGUgZGlnaXRh bCBzaWduYXR1cmUgYWdhaW5zdCB0aGUgdmFsaWQgY2VydGlmaWNhdGUgaW4gYWxsb3dlZA0KPiA+ PiBkYXRhYmFzZSAoZGIpLg0KPiA+Pj4+IC0gICAgLy8NCj4gPj4+PiAtICAgIGlmICghSXNWZXJp ZmllZCkgew0KPiA+Pj4+IC0gICAgICBpZiAoSXNBbGxvd2VkQnlEYiAoQXV0aERhdGEsIEF1dGhE YXRhU2l6ZSkpIHsNCj4gPj4+PiAtICAgICAgICBJc1ZlcmlmaWVkID0gVFJVRTsNCj4gPj4+PiAr ICAgIGlmIChJc0F1dGhEYXRhQXNzaWduZWQgJiYgIUVGSV9FUlJPUiAoSGFzaFN0YXR1cykpIHsN Cj4gPj4+PiArICAgICAgLy8NCj4gPj4+PiArICAgICAgLy8gQ2hlY2sgdGhlIGRpZ2l0YWwgc2ln bmF0dXJlIGFnYWluc3QgdGhlIHJldm9rZWQgY2VydGlmaWNhdGUgaW4NCj4gZm9yYmlkZGVuDQo+ ID4+IGRhdGFiYXNlIChkYngpLg0KPiA+Pj4+ICsgICAgICAvLw0KPiA+Pj4+ICsgICAgICBpZiAo SXNGb3JiaWRkZW5CeURieCAoQXV0aERhdGEsIEF1dGhEYXRhU2l6ZSkpIHsNCj4gPj4+PiArICAg ICAgICBBY3Rpb24gPSBFRklfSU1BR0VfRVhFQ1VUSU9OX0FVVEhfU0lHX0ZBSUxFRDsNCj4gPj4+ PiArICAgICAgICBJc1ZlcmlmaWVkID0gRkFMU0U7DQo+ID4+Pj4gKyAgICAgICAgYnJlYWs7DQo+ ID4+Pj4gICAgICAgIH0NCj4gPj4+PiAtICAgIH0NCj4gPj4+Pg0KPiA+Pj4+IC0gICAgLy8NCj4g Pj4+PiAtICAgIC8vIENoZWNrIHRoZSBpbWFnZSdzIGhhc2ggdmFsdWUuDQo+ID4+Pj4gLSAgICAv Lw0KPiA+Pj4+IC0gICAgRGJTdGF0dXMgPSBJc1NpZ25hdHVyZUZvdW5kSW5EYXRhYmFzZSAoDQo+ ID4+Pj4gLSAgICAgICAgICAgICAgICAgRUZJX0lNQUdFX1NFQ1VSSVRZX0RBVEFCQVNFMSwNCj4g Pj4+PiAtICAgICAgICAgICAgICAgICBtSW1hZ2VEaWdlc3QsDQo+ID4+Pj4gLSAgICAgICAgICAg ICAgICAgJm1DZXJ0VHlwZSwNCj4gPj4+PiAtICAgICAgICAgICAgICAgICBtSW1hZ2VEaWdlc3RT aXplLA0KPiA+Pj4+IC0gICAgICAgICAgICAgICAgICZJc0ZvdW5kDQo+ID4+Pj4gLSAgICAgICAg ICAgICAgICAgKTsNCj4gPj4+PiAtICAgIGlmIChFRklfRVJST1IgKERiU3RhdHVzKSB8fCBJc0Zv dW5kKSB7DQo+ID4+Pj4gLSAgICAgIEFjdGlvbiA9IEVGSV9JTUFHRV9FWEVDVVRJT05fQVVUSF9T SUdfRk9VTkQ7DQo+ID4+Pj4gLSAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIkR4ZUltYWdlVmVy aWZpY2F0aW9uTGliOiBJbWFnZSBpcyBzaWduZWQNCj4gYnV0ICVzDQo+ID4+IGhhc2ggb2YgaW1h Z2UgaXMgZm91bmQgaW4gREJYLlxuIiwgbUhhc2hUeXBlU3RyKSk7DQo+ID4+Pj4gLSAgICAgIElz VmVyaWZpZWQgPSBGQUxTRTsNCj4gPj4+PiAtICAgICAgYnJlYWs7DQo+ID4+Pj4gLSAgICB9DQo+ ID4+Pj4gKyAgICAgIC8vDQo+ID4+Pj4gKyAgICAgIC8vIENoZWNrIHRoZSBkaWdpdGFsIHNpZ25h dHVyZSBhZ2FpbnN0IHRoZSB2YWxpZCBjZXJ0aWZpY2F0ZSBpbiBhbGxvd2VkDQo+ID4+IGRhdGFi YXNlIChkYikuDQo+ID4+Pj4gKyAgICAgIC8vDQo+ID4+Pj4gKyAgICAgIGlmICghSXNWZXJpZmll ZCkgew0KPiA+Pj4+ICsgICAgICAgIGlmIChJc0FsbG93ZWRCeURiIChBdXRoRGF0YSwgQXV0aERh dGFTaXplKSkgew0KPiA+Pj4+ICsgICAgICAgICAgSXNWZXJpZmllZCA9IFRSVUU7DQo+ID4+Pj4g KyAgICAgICAgfQ0KPiA+Pj4+ICsgICAgICB9DQo+ID4+Pj4NCj4gPj4+PiAtICAgIGlmICghSXNW ZXJpZmllZCkgew0KPiA+Pj4+ICsgICAgICAvLw0KPiA+Pj4+ICsgICAgICAvLyBDaGVjayB0aGUg aW1hZ2UncyBoYXNoIHZhbHVlLg0KPiA+Pj4+ICsgICAgICAvLw0KPiA+Pj4+ICAgICAgICBEYlN0 YXR1cyA9IElzU2lnbmF0dXJlRm91bmRJbkRhdGFiYXNlICgNCj4gPj4+PiAtICAgICAgICAgICAg ICAgICAgIEVGSV9JTUFHRV9TRUNVUklUWV9EQVRBQkFTRSwNCj4gPj4+PiArICAgICAgICAgICAg ICAgICAgIEVGSV9JTUFHRV9TRUNVUklUWV9EQVRBQkFTRTEsDQo+ID4+Pj4gICAgICAgICAgICAg ICAgICAgICBtSW1hZ2VEaWdlc3QsDQo+ID4+Pj4gICAgICAgICAgICAgICAgICAgICAmbUNlcnRU eXBlLA0KPiA+Pj4+ICAgICAgICAgICAgICAgICAgICAgbUltYWdlRGlnZXN0U2l6ZSwNCj4gPj4+ PiAgICAgICAgICAgICAgICAgICAgICZJc0ZvdW5kDQo+ID4+Pj4gICAgICAgICAgICAgICAgICAg ICApOw0KPiA+Pj4+IC0gICAgICBpZiAoIUVGSV9FUlJPUiAoRGJTdGF0dXMpICYmIElzRm91bmQp IHsNCj4gPj4+PiAtICAgICAgICBJc1ZlcmlmaWVkID0gVFJVRTsNCj4gPj4+PiAtICAgICAgfSBl bHNlIHsNCj4gPj4+PiAtICAgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJEeGVJbWFnZVZlcmlm aWNhdGlvbkxpYjogSW1hZ2UgaXMgc2lnbmVkDQo+IGJ1dA0KPiA+PiBzaWduYXR1cmUgaXMgbm90 IGFsbG93ZWQgYnkgREIgYW5kICVzIGhhc2ggb2YgaW1hZ2UgaXMgbm90IGZvdW5kIGluDQo+IERC L0RCWC5cbiIsDQo+ID4+IG1IYXNoVHlwZVN0cikpOw0KPiA+Pj4+ICsgICAgICBpZiAoRUZJX0VS Uk9SIChEYlN0YXR1cykgfHwgSXNGb3VuZCkgew0KPiA+Pj4+ICsgICAgICAgIEFjdGlvbiA9IEVG SV9JTUFHRV9FWEVDVVRJT05fQVVUSF9TSUdfRk9VTkQ7DQo+ID4+Pj4gKyAgICAgICAgREVCVUcg KChERUJVR19JTkZPLCAiRHhlSW1hZ2VWZXJpZmljYXRpb25MaWI6IEltYWdlIGlzIHNpZ25lZA0K PiA+PiBidXQgJXMgaGFzaCBvZiBpbWFnZSBpcyBmb3VuZCBpbiBEQlguXG4iLCBtSGFzaFR5cGVT dHIpKTsNCj4gPj4+PiArICAgICAgICBJc1ZlcmlmaWVkID0gRkFMU0U7DQo+ID4+Pj4gKyAgICAg ICAgYnJlYWs7DQo+ID4+Pj4gICAgICAgIH0NCj4gPj4+PiArDQo+ID4+Pj4gKyAgICAgIGlmICgh SXNWZXJpZmllZCkgew0KPiA+Pj4+ICsgICAgICAgIERiU3RhdHVzID0gSXNTaWduYXR1cmVGb3Vu ZEluRGF0YWJhc2UgKA0KPiA+Pj4+ICsgICAgICAgICAgICAgICAgICAgICBFRklfSU1BR0VfU0VD VVJJVFlfREFUQUJBU0UsDQo+ID4+Pj4gKyAgICAgICAgICAgICAgICAgICAgIG1JbWFnZURpZ2Vz dCwNCj4gPj4+PiArICAgICAgICAgICAgICAgICAgICAgJm1DZXJ0VHlwZSwNCj4gPj4+PiArICAg ICAgICAgICAgICAgICAgICAgbUltYWdlRGlnZXN0U2l6ZSwNCj4gPj4+PiArICAgICAgICAgICAg ICAgICAgICAgJklzRm91bmQNCj4gPj4+PiArICAgICAgICAgICAgICAgICAgICAgKTsNCj4gPj4+ PiArICAgICAgICBpZiAoIUVGSV9FUlJPUiAoRGJTdGF0dXMpICYmIElzRm91bmQpIHsNCj4gPj4+ PiArICAgICAgICAgIElzVmVyaWZpZWQgPSBUUlVFOw0KPiA+Pj4+ICsgICAgICAgIH0gZWxzZSB7 DQo+ID4+Pj4gKyAgICAgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJEeGVJbWFnZVZlcmlmaWNh dGlvbkxpYjogSW1hZ2UgaXMgc2lnbmVkDQo+IGJ1dA0KPiA+PiBzaWduYXR1cmUgaXMgbm90IGFs bG93ZWQgYnkgREIgYW5kICVzIGhhc2ggb2YgaW1hZ2UgaXMgbm90IGZvdW5kIGluDQo+IERCL0RC WC5cbiIsDQo+ID4+IG1IYXNoVHlwZVN0cikpOw0KPiA+Pj4+ICsgICAgICAgIH0NCj4gPj4+PiAr ICAgICAgfQ0KPiA+Pj4+ICsgICAgfQ0KPiA+Pj4+ICsNCj4gPj4+PiArICAgIEFkZFN0YXR1cyA9 IFNhZmVVaW50MzJBZGQgKE9mZlNldCwgQWxpZ25lZExlbmd0aCwgJlJlc3VsdCk7DQo+ID4+Pj4g KyAgICBpZiAoRUZJX0VSUk9SIChBZGRTdGF0dXMpKSB7DQo+ID4+Pj4gKyAgICAgIGJyZWFrOw0K PiA+Pj4+ICAgICAgfQ0KPiA+Pj4+ICsgICAgT2ZmU2V0ID0gUmVzdWx0Ow0KPiA+Pj4+ICAgIH0N Cj4gPj4+Pg0KPiA+Pj4+ICAgIGlmIChPZmZTZXQgIT0gKFNlY0RhdGFEaXItPlZpcnR1YWxBZGRy ZXNzICsgU2VjRGF0YURpci0+U2l6ZSkpIHsNCj4gPj4+Pg0KPiA+Pj4NCj4gPj4+IFRoZXJlIGFy ZSBvdGhlciAoc21hbGxlcikgcmVhc29ucyB3aHkgSSBkaXNsaWtlIHRoaXMgcGF0Y2g6DQo+ID4+ Pg0KPiA+Pj4gLSBUaGUgIklzQXV0aERhdGFBc3NpZ25lZCIgdmFyaWFibGUgaXMgc3VwZXJmbHVv dXM7IHdlIGNvdWxkIHVzZSB0aGUNCj4gPj4+IGV4aXN0ZW50ICJBdXRoRGF0YSIgdmFyaWFibGUg KHdpdGggYSBOVUxMLWNoZWNrIGFuZCBhIE5VTEwtYXNzaWdubWVudCkNCj4gPj4+IHNpbWlsYXJs eS4NCj4gPj4+DQo+ID4+PiAtIFRoZSBwYXRjaCBjb21wbGljYXRlcyAvIHJlb3JnYW5pemVzIHRo ZSBjb250cm9sIGZsb3cgbmVlZGxlc3NseS4gVGhpcw0KPiA+Pj4gY29tcGxpY2F0aW9uIG9yaWdp bmF0ZXMgZnJvbSBwbGFjaW5nIHRoZSBjaGVja2VkICJPZmZTZXQiIGluY3JlbWVudCBhdA0KPiA+ Pj4gdGhlIGJvdHRvbSBvZiB0aGUgbG9vcCwgd2hpY2ggdGhlbiByZXF1aXJlcyB0aGUgcmVtb3Zh bCBvZiBhbGwgdGhlDQo+ID4+PiAiY29udGludWUiIHN0YXRlbWVudHMuIEJ1dCB3ZSBkb24ndCBu ZWVkIHRvIGNoZWNrLWFuZC1pbmNyZW1lbnQgYXQgdGhlDQo+ID4+PiBib3R0b20uIFdlIGNhbiBr ZWVwIHRoZSBpbmNyZW1lbnQgaW5zaWRlIHRoZSAiZm9yIiBzdGF0ZW1lbnQsIG9ubHkNCj4gPj4+ IGV4dGVuZCB0aGUgKmV4aXN0ZW50KiByb29tIGNoZWNrICh3aGljaCBJJ3ZlIHF1b3RlZCkgdG8g dGFrZSB0aGUNCj4gPj4+IGFsaWdubWVudCBpbnRvIGFjY291bnQgYXMgd2VsbC4gSWYgdGhlcmUg aXMgZW5vdWdoIHJvb20gZm9yIHRoZQ0KPiA+Pj4gYWxpZ25tZW50IGluIHRoZSBzZWN1cml0eSBk YXRhIGRpcmVjdG9yeSwgdGhlbiB0aGF0IGd1YXJhbnRlZXMgdGhlcmUNCj4gPj4+IHdvbid0IGJl IGEgVUlOVDMyIG92ZXJmbG93IGVpdGhlci4NCj4gPj4+DQo+ID4+PiBBbGwgaW4gYWxsLCBJJ20g cHJvcG9zaW5nIHRoZSBmb2xsb3dpbmcgdGhyZWUgcGF0Y2hlcyBpbnN0ZWFkLiBUaGUgZmlyc3QN Cj4gPj4+IHR3byBwYXRjaGVzIGFyZSBwcmVwYXJhdGlvbiwgdGhlIGxhc3QgcGF0Y2ggaXMgdGhl IGZpeC4NCj4gPj4+DQo+ID4+PiBQYXRjaCMxOg0KPiA+Pj4NCj4gPj4+PiBGcm9tIDExYWYwYTEw NGQzNGQzOWJmMWIxYWFiMjU2NDI4YWU0ZWRiZGRkNzcgTW9uIFNlcCAxNw0KPiAwMDowMDowMA0K PiA+PiAyMDAxDQo+ID4+Pj4gRnJvbTogTGFzemxvIEVyc2VrIDxsZXJzZWtAcmVkaGF0LmNvbT4N Cj4gPj4+PiBEYXRlOiBUaHUsIDEzIEF1ZyAyMDIwIDE5OjExOjM5ICswMjAwDQo+ID4+Pj4gU3Vi amVjdDogW1BBVENIIDEvM10gU2VjdXJpdHlQa2cvRHhlSW1hZ2VWZXJpZmljYXRpb25MaWI6IGV4 dHJhY3QNCj4gPj4+PiAgU2VjRGF0YURpckVuZCwgU2VjRGF0YURpckxlZnQNCj4gPj4+Pg0KPiA+ Pj4+IFRoZSBmb2xsb3dpbmcgdHdvIHF1YW50aXRpZXM6DQo+ID4+Pj4NCj4gPj4+PiAgIFNlY0Rh dGFEaXItPlZpcnR1YWxBZGRyZXNzICsgU2VjRGF0YURpci0+U2l6ZQ0KPiA+Pj4+ICAgU2VjRGF0 YURpci0+VmlydHVhbEFkZHJlc3MgKyBTZWNEYXRhRGlyLT5TaXplIC0gT2ZmU2V0DQo+ID4+Pj4N Cj4gPj4+PiBhcmUgdXNlZCBtdWx0aXBsZSB0aW1lcyBpbiBEeGVJbWFnZVZlcmlmaWNhdGlvbkhh bmRsZXIoKS4gSW50cm9kdWNlIGhlbHBlcg0KPiA+Pj4+IHZhcmlhYmxlcyBmb3IgdGhlbTogIlNl Y0RhdGFEaXJFbmQiIGFuZCAiU2VjRGF0YURpckxlZnQiLCByZXNwZWN0aXZlbHkuDQo+ID4+Pj4g VGhpcyBzYXZlcyB1cyBtdWx0aXBsZSBjYWxjdWxhdGlvbnMgYW5kIHNpZ25pZmljYW50bHkgc2lt cGxpZmllcyB0aGUgY29kZS4NCj4gPj4+Pg0KPiA+Pj4+IE5vdGUgdGhhdCBhbGwgdGhyZWUgc3Vt bWFuZHMgYWJvdmUgaGF2ZSB0eXBlIFVJTlQzMiwgdGhlcmVmb3JlIHRoZSBuZXcNCj4gPj4+PiB2 YXJpYWJsZXMgYXJlIGFsc28gb2YgdHlwZSBVSU5UMzIuDQo+ID4+Pj4NCj4gPj4+PiBUaGlzIHBh dGNoIGRvZXMgbm90IGNoYW5nZSBiZWhhdmlvci4NCj4gPj4+Pg0KPiA+Pj4+IChOb3RlIHRoYXQg dGhlIGNvZGUgYWxyZWFkeSBoYW5kbGVzIHRoZSBjYXNlIHdoZW4gdGhlDQo+ID4+Pj4NCj4gPj4+ PiAgIFNlY0RhdGFEaXItPlZpcnR1YWxBZGRyZXNzICsgU2VjRGF0YURpci0+U2l6ZQ0KPiA+Pj4+ DQo+ID4+Pj4gVUlOVDMyIGFkZGl0aW9uIG92ZXJmbG93cyAtLSBuYW1lbHksIGluIHRoYXQgY2Fz ZSwgdGhlIGNlcnRpZmljYXRlIGxvb3AgaXMNCj4gPj4+PiBuZXZlciBlbnRlcmVkLCBhbmQgdGhl IGNvcnJ1cHRpb24gY2hlY2sgcmlnaHQgYWZ0ZXIgdGhlIGxvb3AgZmlyZXMuKQ0KPiA+Pj4+DQo+ ID4+Pj4gU2lnbmVkLW9mZi1ieTogTGFzemxvIEVyc2VrIDxsZXJzZWtAcmVkaGF0LmNvbT4NCj4g Pj4+PiAtLS0NCj4gPj4+PiAgU2VjdXJpdHlQa2cvTGlicmFyeS9EeGVJbWFnZVZlcmlmaWNhdGlv bkxpYi9EeGVJbWFnZVZlcmlmaWNhdGlvbkxpYi5jIHwNCj4gMTINCj4gPj4gKysrKysrKystLS0t DQo+ID4+Pj4gIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0p DQo+ID4+Pj4NCj4gPj4+PiBkaWZmIC0tZ2l0DQo+ID4+IGEvU2VjdXJpdHlQa2cvTGlicmFyeS9E eGVJbWFnZVZlcmlmaWNhdGlvbkxpYi9EeGVJbWFnZVZlcmlmaWNhdGlvbkxpYi5jDQo+ID4+IGIv U2VjdXJpdHlQa2cvTGlicmFyeS9EeGVJbWFnZVZlcmlmaWNhdGlvbkxpYi9EeGVJbWFnZVZlcmlm aWNhdGlvbkxpYi5jDQo+ID4+Pj4gaW5kZXggMzZiODdlMTZkNTNkLi44NzYxOTgwYzg4YWEgMTAw NjQ0DQo+ID4+Pj4gLS0tDQo+IGEvU2VjdXJpdHlQa2cvTGlicmFyeS9EeGVJbWFnZVZlcmlmaWNh dGlvbkxpYi9EeGVJbWFnZVZlcmlmaWNhdGlvbkxpYi5jDQo+ID4+Pj4gKysrDQo+ID4+IGIvU2Vj dXJpdHlQa2cvTGlicmFyeS9EeGVJbWFnZVZlcmlmaWNhdGlvbkxpYi9EeGVJbWFnZVZlcmlmaWNh dGlvbkxpYi5jDQo+ID4+Pj4gQEAgLTE2NTIsNiArMTY1Miw4IEBAIER4ZUltYWdlVmVyaWZpY2F0 aW9uSGFuZGxlciAoDQo+ID4+Pj4gICAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICpBdXRoRGF0YTsNCj4gPj4+PiAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQXV0aERhdGFTaXplOw0KPiA+Pj4+ICAgIEVGSV9JTUFHRV9EQVRBX0RJUkVDVE9SWSAg ICAgICAgICAgICAqU2VjRGF0YURpcjsNCj4gPj4+PiArICBVSU5UMzIgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgU2VjRGF0YURpckVuZDsNCj4gPj4+PiArICBVSU5UMzIgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgU2VjRGF0YURpckxlZnQ7DQo+ID4+Pj4gICAgVUlOVDMyICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9mZlNldDsNCj4gPj4+PiAgICBDSEFSMTYgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKk5hbWVTdHI7DQo+ID4+Pj4gICAgUkVUVVJOX1NU QVRVUyAgICAgICAgICAgICAgICAgICAgICAgIFBlQ29mZlN0YXR1czsNCj4gPj4+PiBAQCAtMTg0 OSwxMiArMTg1MSwxNCBAQCBEeGVJbWFnZVZlcmlmaWNhdGlvbkhhbmRsZXIgKA0KPiA+Pj4+ICAg IC8vICJBdHRyaWJ1dGUgQ2VydGlmaWNhdGUgVGFibGUiLg0KPiA+Pj4+ICAgIC8vIFRoZSBmaXJz dCBjZXJ0aWZpY2F0ZSBzdGFydHMgYXQgb2Zmc2V0IChTZWNEYXRhRGlyLT5WaXJ0dWFsQWRkcmVz cykgZnJvbQ0KPiB0aGUNCj4gPj4gc3RhcnQgb2YgdGhlIGZpbGUuDQo+ID4+Pj4gICAgLy8NCj4g Pj4+PiArICBTZWNEYXRhRGlyRW5kID0gU2VjRGF0YURpci0+VmlydHVhbEFkZHJlc3MgKyBTZWNE YXRhRGlyLT5TaXplOw0KPiA+Pj4+ICAgIGZvciAoT2ZmU2V0ID0gU2VjRGF0YURpci0+VmlydHVh bEFkZHJlc3M7DQo+ID4+Pj4gLSAgICAgICBPZmZTZXQgPCAoU2VjRGF0YURpci0+VmlydHVhbEFk ZHJlc3MgKyBTZWNEYXRhRGlyLT5TaXplKTsNCj4gPj4+PiArICAgICAgIE9mZlNldCA8IFNlY0Rh dGFEaXJFbmQ7DQo+ID4+Pj4gICAgICAgICBPZmZTZXQgKz0gKFdpbkNlcnRpZmljYXRlLT5kd0xl bmd0aCArIEFMSUdOX1NJWkUgKFdpbkNlcnRpZmljYXRlLQ0KPiA+Pj4gZHdMZW5ndGgpKSkgew0K PiA+Pj4+ICAgICAgV2luQ2VydGlmaWNhdGUgPSAoV0lOX0NFUlRJRklDQVRFICopIChtSW1hZ2VC YXNlICsgT2ZmU2V0KTsNCj4gPj4+PiAtICAgIGlmICgoU2VjRGF0YURpci0+VmlydHVhbEFkZHJl c3MgKyBTZWNEYXRhRGlyLT5TaXplIC0gT2ZmU2V0KSA8PSBzaXplb2YNCj4gPj4gKFdJTl9DRVJU SUZJQ0FURSkgfHwNCj4gPj4+PiAtICAgICAgICAoU2VjRGF0YURpci0+VmlydHVhbEFkZHJlc3Mg KyBTZWNEYXRhRGlyLT5TaXplIC0gT2ZmU2V0KSA8DQo+ID4+IFdpbkNlcnRpZmljYXRlLT5kd0xl bmd0aCkgew0KPiA+Pj4+ICsgICAgU2VjRGF0YURpckxlZnQgPSBTZWNEYXRhRGlyRW5kIC0gT2Zm U2V0Ow0KPiA+Pj4+ICsgICAgaWYgKFNlY0RhdGFEaXJMZWZ0IDw9IHNpemVvZiAoV0lOX0NFUlRJ RklDQVRFKSB8fA0KPiA+Pj4+ICsgICAgICAgIFNlY0RhdGFEaXJMZWZ0IDwgV2luQ2VydGlmaWNh dGUtPmR3TGVuZ3RoKSB7DQo+ID4+Pj4gICAgICAgIGJyZWFrOw0KPiA+Pj4+ICAgICAgfQ0KPiA+ Pj4+DQo+ID4+Pj4gQEAgLTE5NDgsNyArMTk1Miw3IEBAIER4ZUltYWdlVmVyaWZpY2F0aW9uSGFu ZGxlciAoDQo+ID4+Pj4gICAgICB9DQo+ID4+Pj4gICAgfQ0KPiA+Pj4+DQo+ID4+Pj4gLSAgaWYg KE9mZlNldCAhPSAoU2VjRGF0YURpci0+VmlydHVhbEFkZHJlc3MgKyBTZWNEYXRhRGlyLT5TaXpl KSkgew0KPiA+Pj4+ICsgIGlmIChPZmZTZXQgIT0gU2VjRGF0YURpckVuZCkgew0KPiA+Pj4+ICAg ICAgLy8NCj4gPj4+PiAgICAgIC8vIFRoZSBTaXplIGluIENlcnRpZmljYXRlIFRhYmxlIG9yIHRo ZSBhdHRyaWJ1dGUgY2VydGlmaWNhdGUgdGFibGUgaXMNCj4gY29ycnVwdGVkLg0KPiA+Pj4+ICAg ICAgLy8NCj4gPj4+PiAtLQ0KPiA+Pj4+IDIuMTkuMS4zLmczMDI0N2FhNWQyMDENCj4gPj4+Pg0K PiA+Pj4NCj4gPj4+IFBhdGNoIzI6DQo+ID4+Pg0KPiA+Pj4+IEZyb20gNzIwMTJjMDY1YTUzNTgy ZjdkZjY5NWU3Yjk3MzBjNDVmNDkyMjZjNiBNb24gU2VwIDE3IDAwOjAwOjAwDQo+ID4+IDIwMDEN Cj4gPj4+PiBGcm9tOiBMYXN6bG8gRXJzZWsgPGxlcnNla0ByZWRoYXQuY29tPg0KPiA+Pj4+IERh dGU6IFRodSwgMTMgQXVnIDIwMjAgMTk6MTk6MDYgKzAyMDANCj4gPj4+PiBTdWJqZWN0OiBbUEFU Q0ggMi8zXSBTZWN1cml0eVBrZy9EeGVJbWFnZVZlcmlmaWNhdGlvbkxpYjogYXNzaWduDQo+ID4+ Pj4gIFdpbkNlcnRpZmljYXRlIGFmdGVyIHNpemUgY2hlY2sNCj4gPj4+Pg0KPiA+Pj4+IEN1cnJl bnRseSB0aGUgKFNlY0RhdGFEaXJMZWZ0IDw9IHNpemVvZiAoV0lOX0NFUlRJRklDQVRFKSkgY2hl Y2sgb25seQ0KPiA+Pj4+IGd1YXJkcyB0aGUgZGUtcmVmZXJlbmNpbmcgb2YgdGhlICJXaW5DZXJ0 aWZpY2F0ZSIgcG9pbnRlci4gSXQgZG9lcyBub3QNCj4gPj4+PiBndWFyZCB0aGUgY2FsY3VsYXRp b24gb2YgaHRlIHBvaW50ZXIgaXRzZWxmOg0KPiA+Pj4+DQo+ID4+Pj4gICBXaW5DZXJ0aWZpY2F0 ZSA9IChXSU5fQ0VSVElGSUNBVEUgKikgKG1JbWFnZUJhc2UgKyBPZmZTZXQpOw0KPiA+Pj4+DQo+ ID4+Pj4gVGhpcyBpcyB3cm9uZzsgaWYgd2UgZG9uJ3Qga25vdyBmb3Igc3VyZSB0aGF0IHdlIGhh dmUgZW5vdWdoIHJvb20gZm9yIGENCj4gPj4+PiBXSU5fQ0VSVElGSUNBVEUsIHRoZW4gZXZlbiBj cmVhdGluZyBzdWNoIGEgcG9pbnRlciwgbm90IGp1c3QNCj4gPj4+PiBkZS1yZWZlcmVuY2luZyBp dCwgbWF5IGludm9rZSB1bmRlZmluZWQgYmVoYXZpb3IuDQo+ID4+Pj4NCj4gPj4+PiBNb3ZlIHRo ZSBwb2ludGVyIGNhbGN1bGF0aW9uIGFmdGVyIHRoZSBzaXplIGNoZWNrLg0KPiA+Pj4+DQo+ID4+ Pj4gU2lnbmVkLW9mZi1ieTogTGFzemxvIEVyc2VrIDxsZXJzZWtAcmVkaGF0LmNvbT4NCj4gPj4+ PiAtLS0NCj4gPj4+PiAgU2VjdXJpdHlQa2cvTGlicmFyeS9EeGVJbWFnZVZlcmlmaWNhdGlvbkxp Yi9EeGVJbWFnZVZlcmlmaWNhdGlvbkxpYi5jIHwNCj4gOA0KPiA+PiArKysrKy0tLQ0KPiA+Pj4+ ICAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQ0KPiA+Pj4+ DQo+ID4+Pj4gZGlmZiAtLWdpdA0KPiA+PiBhL1NlY3VyaXR5UGtnL0xpYnJhcnkvRHhlSW1hZ2VW ZXJpZmljYXRpb25MaWIvRHhlSW1hZ2VWZXJpZmljYXRpb25MaWIuYw0KPiA+PiBiL1NlY3VyaXR5 UGtnL0xpYnJhcnkvRHhlSW1hZ2VWZXJpZmljYXRpb25MaWIvRHhlSW1hZ2VWZXJpZmljYXRpb25M aWIuYw0KPiA+Pj4+IGluZGV4IDg3NjE5ODBjODhhYS4uNDYxZWQ3Y2ZiNWFjIDEwMDY0NA0KPiA+ Pj4+IC0tLQ0KPiBhL1NlY3VyaXR5UGtnL0xpYnJhcnkvRHhlSW1hZ2VWZXJpZmljYXRpb25MaWIv RHhlSW1hZ2VWZXJpZmljYXRpb25MaWIuYw0KPiA+Pj4+ICsrKw0KPiA+PiBiL1NlY3VyaXR5UGtn L0xpYnJhcnkvRHhlSW1hZ2VWZXJpZmljYXRpb25MaWIvRHhlSW1hZ2VWZXJpZmljYXRpb25MaWIu Yw0KPiA+Pj4+IEBAIC0xODU1LDEwICsxODU1LDEyIEBAIER4ZUltYWdlVmVyaWZpY2F0aW9uSGFu ZGxlciAoDQo+ID4+Pj4gICAgZm9yIChPZmZTZXQgPSBTZWNEYXRhRGlyLT5WaXJ0dWFsQWRkcmVz czsNCj4gPj4+PiAgICAgICAgIE9mZlNldCA8IFNlY0RhdGFEaXJFbmQ7DQo+ID4+Pj4gICAgICAg ICBPZmZTZXQgKz0gKFdpbkNlcnRpZmljYXRlLT5kd0xlbmd0aCArIEFMSUdOX1NJWkUgKFdpbkNl cnRpZmljYXRlLQ0KPiA+Pj4gZHdMZW5ndGgpKSkgew0KPiA+Pj4+IC0gICAgV2luQ2VydGlmaWNh dGUgPSAoV0lOX0NFUlRJRklDQVRFICopIChtSW1hZ2VCYXNlICsgT2ZmU2V0KTsNCj4gPj4+PiAg ICAgIFNlY0RhdGFEaXJMZWZ0ID0gU2VjRGF0YURpckVuZCAtIE9mZlNldDsNCj4gPj4+PiAtICAg IGlmIChTZWNEYXRhRGlyTGVmdCA8PSBzaXplb2YgKFdJTl9DRVJUSUZJQ0FURSkgfHwNCj4gPj4+ PiAtICAgICAgICBTZWNEYXRhRGlyTGVmdCA8IFdpbkNlcnRpZmljYXRlLT5kd0xlbmd0aCkgew0K PiA+Pj4+ICsgICAgaWYgKFNlY0RhdGFEaXJMZWZ0IDw9IHNpemVvZiAoV0lOX0NFUlRJRklDQVRF KSkgew0KPiA+Pj4+ICsgICAgICBicmVhazsNCj4gPj4+PiArICAgIH0NCj4gPj4+PiArICAgIFdp bkNlcnRpZmljYXRlID0gKFdJTl9DRVJUSUZJQ0FURSAqKSAobUltYWdlQmFzZSArIE9mZlNldCk7 DQo+ID4+Pj4gKyAgICBpZiAoU2VjRGF0YURpckxlZnQgPCBXaW5DZXJ0aWZpY2F0ZS0+ZHdMZW5n dGgpIHsNCj4gPj4+PiAgICAgICAgYnJlYWs7DQo+ID4+Pj4gICAgICB9DQo+ID4+Pj4NCj4gPj4+ PiAtLQ0KPiA+Pj4+IDIuMTkuMS4zLmczMDI0N2FhNWQyMDENCj4gPj4+Pg0KPiA+Pj4NCj4gPj4+ IFBhdGNoIzM6DQo+ID4+Pg0KPiA+Pj4+IEZyb20gMGJiYmExNWI4NGY4ZjlmMmNkYzc3MGE4OWY0 MThhYWVjNmNmYjMxZSBNb24gU2VwIDE3IDAwOjAwOjAwDQo+ID4+IDIwMDENCj4gPj4+PiBGcm9t OiBMYXN6bG8gRXJzZWsgPGxlcnNla0ByZWRoYXQuY29tPg0KPiA+Pj4+IERhdGU6IFRodSwgMTMg QXVnIDIwMjAgMTk6MzQ6MzMgKzAyMDANCj4gPj4+PiBTdWJqZWN0OiBbUEFUQ0ggMy8zXSBTZWN1 cml0eVBrZy9EeGVJbWFnZVZlcmlmaWNhdGlvbkxpYjogY2F0Y2gNCj4gYWxpZ25tZW50DQo+ID4+ Pj4gIG92ZXJmbG93IChDVkUtMjAxOS0xNDU2MikNCj4gPj4+Pg0KPiA+Pj4+IFRoZSBEeGVJbWFn ZVZlcmlmaWNhdGlvbkhhbmRsZXIoKSBmdW5jdGlvbiBjdXJyZW50bHkgY2hlY2tzIHdoZXRoZXIN Cj4gPj4+PiAiU2VjRGF0YURpciIgaGFzIGVub3VnaCByb29tIGZvciAiV2luQ2VydGlmaWNhdGUt PmR3TGVuZ3RoIi4gSG93ZXZlciwNCj4gPj4gZm9yDQo+ID4+Pj4gYWR2YW5jaW5nICJPZmZTZXQi LCAiV2luQ2VydGlmaWNhdGUtPmR3TGVuZ3RoIiBpcyBhbGlnbmVkIHRvIHRoZSBuZXh0DQo+ID4+ Pj4gbXVsdGlwbGUgb2YgOC4gSWYgIldpbkNlcnRpZmljYXRlLT5kd0xlbmd0aCIgaXMgbGFyZ2Ug ZW5vdWdoLCB0aGUNCj4gPj4+PiBhbGlnbm1lbnQgd2lsbCByZXR1cm4gMCwgYW5kICJPZmZTZXQi IHdpbGwgYmUgc3R1Y2sgYXQgdGhlIHNhbWUgdmFsdWUuDQo+ID4+Pj4NCj4gPj4+PiBDaGVjayB3 aGV0aGVyICJTZWNEYXRhRGlyIiBoYXMgcm9vbSBsZWZ0IGZvciBib3RoDQo+ID4+Pj4gIldpbkNl cnRpZmljYXRlLT5kd0xlbmd0aCIgYW5kIHRoZSBhbGlnbm1lbnQuDQo+ID4+Pj4NCj4gPj4+PiBT aWduZWQtb2ZmLWJ5OiBMYXN6bG8gRXJzZWsgPGxlcnNla0ByZWRoYXQuY29tPg0KPiA+Pj4+IC0t LQ0KPiA+Pj4+ICBTZWN1cml0eVBrZy9MaWJyYXJ5L0R4ZUltYWdlVmVyaWZpY2F0aW9uTGliL0R4 ZUltYWdlVmVyaWZpY2F0aW9uTGliLmMgfA0KPiA0DQo+ID4+ICsrKy0NCj4gPj4+PiAgMSBmaWxl IGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQ0KPiA+Pj4+DQo+ID4+Pj4g ZGlmZiAtLWdpdA0KPiA+PiBhL1NlY3VyaXR5UGtnL0xpYnJhcnkvRHhlSW1hZ2VWZXJpZmljYXRp b25MaWIvRHhlSW1hZ2VWZXJpZmljYXRpb25MaWIuYw0KPiA+PiBiL1NlY3VyaXR5UGtnL0xpYnJh cnkvRHhlSW1hZ2VWZXJpZmljYXRpb25MaWIvRHhlSW1hZ2VWZXJpZmljYXRpb25MaWIuYw0KPiA+ Pj4+IGluZGV4IDQ2MWVkN2NmYjVhYy4uZTM4ZWI5ODFiN2EwIDEwMDY0NA0KPiA+Pj4+IC0tLQ0K PiBhL1NlY3VyaXR5UGtnL0xpYnJhcnkvRHhlSW1hZ2VWZXJpZmljYXRpb25MaWIvRHhlSW1hZ2VW ZXJpZmljYXRpb25MaWIuYw0KPiA+Pj4+ICsrKw0KPiA+PiBiL1NlY3VyaXR5UGtnL0xpYnJhcnkv RHhlSW1hZ2VWZXJpZmljYXRpb25MaWIvRHhlSW1hZ2VWZXJpZmljYXRpb25MaWIuYw0KPiA+Pj4+ IEBAIC0xODYwLDcgKzE4NjAsOSBAQCBEeGVJbWFnZVZlcmlmaWNhdGlvbkhhbmRsZXIgKA0KPiA+ Pj4+ICAgICAgICBicmVhazsNCj4gPj4+PiAgICAgIH0NCj4gPj4+PiAgICAgIFdpbkNlcnRpZmlj YXRlID0gKFdJTl9DRVJUSUZJQ0FURSAqKSAobUltYWdlQmFzZSArIE9mZlNldCk7DQo+ID4+Pj4g LSAgICBpZiAoU2VjRGF0YURpckxlZnQgPCBXaW5DZXJ0aWZpY2F0ZS0+ZHdMZW5ndGgpIHsNCj4g Pj4+PiArICAgIGlmIChTZWNEYXRhRGlyTGVmdCA8IFdpbkNlcnRpZmljYXRlLT5kd0xlbmd0aCB8 fA0KPiA+Pj4+ICsgICAgICAgIChTZWNEYXRhRGlyTGVmdCAtIFdpbkNlcnRpZmljYXRlLT5kd0xl bmd0aCA8DQo+ID4+Pj4gKyAgICAgICAgIEFMSUdOX1NJWkUgKFdpbkNlcnRpZmljYXRlLT5kd0xl bmd0aCkpKSB7DQo+ID4+Pj4gICAgICAgIGJyZWFrOw0KPiA+Pj4+ICAgICAgfQ0KPiA+Pj4+DQo+ ID4+Pj4gLS0NCj4gPj4+PiAyLjE5LjEuMy5nMzAyNDdhYTVkMjAxDQo+ID4+Pj4NCj4gPj4+DQo+ ID4+PiBJZiBXZW55aSBhbmQgdGhlIHJldmlld2VycyBhcmUgT0sgd2l0aCB0aGVzZSBwYXRjaGVz LCBJIGNhbiBzdWJtaXQgdGhlbQ0KPiA+Pj4gYXMgYSBzdGFuZGFsb25lIHBhdGNoIHNlcmllcy4N Cj4gPj4+DQo+ID4+PiBOb3RlIHRoYXQgSSBkbyBub3QgaGF2ZSBhbnkgcmVwcm9kdWNlciBmb3Ig dGhlIGlzc3VlOyB0aGUgYmVzdCB0ZXN0aW5nDQo+ID4+PiB0aGF0IEkgY291bGQgb2ZmZXIgd291 bGQgYmUgc29tZSBsaWdodC13ZWlnaHQgU2VjdXJlIEJvb3QgcmVncmVzc2lvbg0KPiA+Pj4gdGVz dHMuDQo+ID4+Pg0KPiA+Pj4gVGhhbmtzDQo+ID4+PiBMYXN6bG8NCj4gPj4+DQo+ID4+Pg0KPiA+ Pj4gLg0KPiA+Pj4NCj4gPj4NCj4gPj4NCj4gPj4NCj4gPg0KPiANCj4gDQo+IA0KDQo=