From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=192.55.52.115; helo=mga14.intel.com; envelope-from=eric.dong@intel.com; receiver=edk2-devel@lists.01.org Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id D5D692097E279 for ; Wed, 11 Jul 2018 20:04:45 -0700 (PDT) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 11 Jul 2018 20:04:45 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,341,1526367600"; d="scan'208";a="71647051" Received: from fmsmsx106.amr.corp.intel.com ([10.18.124.204]) by fmsmga001.fm.intel.com with ESMTP; 11 Jul 2018 20:04:45 -0700 Received: from fmsmsx113.amr.corp.intel.com (10.18.116.7) by FMSMSX106.amr.corp.intel.com (10.18.124.204) with Microsoft SMTP Server (TLS) id 14.3.319.2; Wed, 11 Jul 2018 20:04:45 -0700 Received: from shsmsx103.ccr.corp.intel.com (10.239.4.69) by FMSMSX113.amr.corp.intel.com (10.18.116.7) with Microsoft SMTP Server (TLS) id 14.3.319.2; Wed, 11 Jul 2018 20:04:44 -0700 Received: from shsmsx101.ccr.corp.intel.com ([169.254.1.57]) by SHSMSX103.ccr.corp.intel.com ([169.254.4.100]) with mapi id 14.03.0319.002; Thu, 12 Jul 2018 11:04:42 +0800 From: "Dong, Eric" To: Laszlo Ersek , "Yao, Jiewen" , Fan Jeff , "edk2-devel@lists.01.org" CC: "Ni, Ruiyu" Thread-Topic: =?utf-8?B?W2VkazJdIOetlOWkjTogW1BhdGNoXSBVZWZpQ3B1UGtnL01wSW5pdExpYjog?= =?utf-8?Q?Optimize_get_processor_number_performance.?= Thread-Index: AQHUE3rmDFOShawv6UKSeDwsvBHbsKSAFEKAgAYl3lCAADZdYIACuKAAgADEssD//7gDAIABTMsg Date: Thu, 12 Jul 2018 03:04:42 +0000 Message-ID: References: <20180704083736.9272-1-eric.dong@intel.com> <58bddde7-da02-1a73-f738-70c58c10b60a@redhat.com> <74D8A39837DF1E4DA445A8C0B3885C503AC9B858@shsmsx102.ccr.corp.intel.com> <26d8afe6-f89b-ddfc-0e8b-6acdc311f121@redhat.com> In-Reply-To: <26d8afe6-f89b-ddfc-0e8b-6acdc311f121@redhat.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: =?UTF-8?B?UmU6IOetlOWkjTogW1BhdGNoXSBVZWZpQ3B1UGtnL01wSW5pdExpYjogT3B0aW1pemUgZ2V0IHByb2Nlc3NvciBudW1iZXIgcGVyZm9ybWFuY2Uu?= X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.27 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 12 Jul 2018 03:04:46 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgTGFzemxvLA0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IExhc3ps byBFcnNlayBbbWFpbHRvOmxlcnNla0ByZWRoYXQuY29tXQ0KPiBTZW50OiBXZWRuZXNkYXksIEp1 bHkgMTEsIDIwMTggMTE6MTIgUE0NCj4gVG86IERvbmcsIEVyaWMgPGVyaWMuZG9uZ0BpbnRlbC5j b20+OyBZYW8sIEppZXdlbiA8amlld2VuLnlhb0BpbnRlbC5jb20+Ow0KPiBGYW4gSmVmZiA8dmFu amVmZl85MTlAaG90bWFpbC5jb20+OyBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZw0KPiBDYzogTmks IFJ1aXl1IDxydWl5dS5uaUBpbnRlbC5jb20+DQo+IFN1YmplY3Q6IFJlOiBbZWRrMl0g562U5aSN OiBbUGF0Y2hdIFVlZmlDcHVQa2cvTXBJbml0TGliOiBPcHRpbWl6ZSBnZXQNCj4gcHJvY2Vzc29y IG51bWJlciBwZXJmb3JtYW5jZS4NCj4gDQo+IE9uIDA3LzExLzE4IDEzOjMxLCBEb25nLCBFcmlj IHdyb3RlOg0KPiA+IEhpIEppZXdlbiwNCj4gPg0KPiA+IEkgY2hlY2tlZCB0aGUgY29kZSwgZm91 bmQgaW4gdGhlIEFQIGZ1bmN0aW9uIChBcFdha2V1cEZ1bmN0aW9uKSwgaXQNCj4gdXBkYXRlZCB0 aGUgR0RUIHZhbHVlIHdpdGggdGhlIHNhdmVkIEdEVCB2YWx1ZSBmcm9tIEJTUC4gU28gSSB0aGlu ayB3ZSBjYW4ndA0KPiB1c2UgR0RUIGluIHRoaXMgY2FzZS4gUmlnaHQ/DQo+ID4NCj4gPiAgICAg ICAvLw0KPiA+ICAgICAgIC8vIFN5bmMgQlNQJ3MgQ29udHJvbCByZWdpc3RlcnMgdG8gQVBzDQo+ ID4gICAgICAgLy8NCj4gPiAgICAgICBSZXN0b3JlVm9sYXRpbGVSZWdpc3RlcnMNCj4gPiAoJkNw dU1wRGF0YS0+Q3B1RGF0YVswXS5Wb2xhdGlsZVJlZ2lzdGVycywgRkFMU0UpOw0KPiANCj4gU2lk ZSByZW1hcms6IHBsZWFzZSByZW1lbWJlciB0aGF0IHRoaXMgcGFydGljdWxhciBjaHVuayBvZiBj b2RlIGlzIHN1YmplY3QgdG8NCj4gY2hhbmdlOyBkdWUgdG8gdGhlIHJldmlld2VkIChidXQgbm90 IHlldCBjb21taXR0ZWQpIHBhdGNoIGZyb20gUmF5Og0KPiANCj4gICBbUEFUQ0hdIFVlZmlDcHVQ a2cvTXBJbml0TGliOiBBdm9pZCBjYWxsaW5nIFBFSSBzZXJ2aWNlcyBmcm9tIEFQDQo+IA0KPiAg IGh0dHA6Ly9taWQubWFpbC1hcmNoaXZlLmNvbS8yMDE4MDcwMjA2MDEzNS4yNjQ2NzYtMS1ydWl5 dS5uaUBpbnRlbC5jb20NCj4gDQo+IFNhaWQgcGF0Y2ggaGFzICpub3QqIGJlZW4gY29tbWl0dGVk IHlldCwgYW5kICpvbmx5KiBiZWNhdXNlIFJheSBoaW1zZWxmDQo+IGhhcyBwdXNoIHJpZ2h0cywg YnV0IGhlIGlzIGN1cnJlbnRseSBhd2F5LiBTbyBub2JvZHkgaGFzIHBpY2tlZCB1cCB0aGUgcGF0 Y2gNCj4geWV0Lg0KPiANCj4gSSBzdWdnZXN0IHRoYXQsIGJlZm9yZSB3ZSBkbyBhbnl0aGluZyBl bHNlIGZvciBNcEluaXRMaWIsIHdlIGNvbW1pdCBSYXkncw0KPiBwYXRjaCBmaXJzdC4NCj4gDQo+ IEVyaWMsIGRvIHlvdSBhZ3JlZT8NCj4gDQo+IElmIHNvLCBjYW4geW91IHB1c2ggdGhlIHBhdGNo LCBvciBkbyB5b3Ugd2FudCBtZSB0byBkbyBpdD8gSSdtIGdsYWQgdG8gZG8gaXQgaWYNCj4geW91 IHByZWZlci4NCj4gDQoNCkFncmVlLCAganVzdCBwdXNoIFJheSdzIHBhdGNoOiBTSEEtMTogYzU2 MzA3N2EzODA0MzdjMTE0YWJhNGM5NWJlNjVlYjk2M2ViYzFmMw0KDQpMZXQncyBjb250aW51ZS4N CiANCiANCj4gVGhhbmtzLA0KPiBMYXN6bG8NCj4gDQo+IA0KPiA+PiAtLS0tLU9yaWdpbmFsIE1l c3NhZ2UtLS0tLQ0KPiA+PiBGcm9tOiBZYW8sIEppZXdlbg0KPiA+PiBTZW50OiBXZWRuZXNkYXks IEp1bHkgMTEsIDIwMTggMzo0NSBQTQ0KPiA+PiBUbzogRG9uZywgRXJpYyA8ZXJpYy5kb25nQGlu dGVsLmNvbT47IERvbmcsIEVyaWMNCj4gPj4gPGVyaWMuZG9uZ0BpbnRlbC5jb20+OyBMYXN6bG8g RXJzZWsgPGxlcnNla0ByZWRoYXQuY29tPjsgRmFuIEplZmYNCj4gPj4gPHZhbmplZmZfOTE5QGhv dG1haWwuY29tPjsgZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmcNCj4gPj4gQ2M6IE5pLCBSdWl5dSA8 cnVpeXUubmlAaW50ZWwuY29tPg0KPiA+PiBTdWJqZWN0OiBSRTogW2VkazJdIOetlOWkjTogW1Bh dGNoXSBVZWZpQ3B1UGtnL01wSW5pdExpYjogT3B0aW1pemUgZ2V0DQo+ID4+IHByb2Nlc3NvciBu dW1iZXIgcGVyZm9ybWFuY2UuDQo+ID4+DQo+ID4+IEhpDQo+ID4+IEkgYmVsaWV2ZSB1c2luZyBz dGFjayBwb2ludGVyIGlzIG5vdCBhIHJvYnVzdCB3YXkgaWYgdGhlIHN0YWNrIGd1YXJkDQo+ID4+ IGZlYXR1cmUgaXMgbm90IGVuYWJsZWQuIFN0YWNrIHBvaW50ZXIgbWF5IG92ZXJmbG93Lg0KPiA+ Pg0KPiA+PiBDYW4gd2UgdXNlIEdEVD8gRWFjaCBBUCBoYXMgaXRzIG93biBHRFQuDQo+ID4+DQo+ ID4+IFRoYW5rIHlvdQ0KPiA+PiBZYW8gSmlld2VuDQo+ID4+DQo+ID4+DQo+ID4+PiAtLS0tLU9y aWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+Pj4gRnJvbTogZWRrMi1kZXZlbCBbbWFpbHRvOmVkazIt ZGV2ZWwtYm91bmNlc0BsaXN0cy4wMS5vcmddIE9uIEJlaGFsZg0KPiA+Pj4gT2YgRG9uZywgRXJp Yw0KPiA+Pj4gU2VudDogTW9uZGF5LCBKdWx5IDksIDIwMTggMjoxMyBQTQ0KPiA+Pj4gVG86IERv bmcsIEVyaWMgPGVyaWMuZG9uZ0BpbnRlbC5jb20+OyBMYXN6bG8gRXJzZWsNCj4gPj4+IDxsZXJz ZWtAcmVkaGF0LmNvbT47IEZhbiBKZWZmIDx2YW5qZWZmXzkxOUBob3RtYWlsLmNvbT47DQo+ID4+ PiBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZw0KPiA+Pj4gQ2M6IE5pLCBSdWl5dSA8cnVpeXUubmlA aW50ZWwuY29tPg0KPiA+Pj4gU3ViamVjdDogUmU6IFtlZGsyXSDnrZTlpI06IFtQYXRjaF0gVWVm aUNwdVBrZy9NcEluaXRMaWI6IE9wdGltaXplIGdldA0KPiA+Pj4gcHJvY2Vzc29yIG51bWJlciBw ZXJmb3JtYW5jZS4NCj4gPj4+DQo+ID4+PiBIaSBMYXN6bG8sDQo+ID4+Pg0KPiA+Pj4gSSBoYXZl IGNyZWF0ZWQgaHR0cHM6Ly9idWd6aWxsYS50aWFub2NvcmUub3JnL3Nob3dfYnVnLmNnaT9pZD0x MDAyDQo+ID4+PiB0byByZXF1ZXN0IHRvIGFkZCBBc21SZWFkRXNwKCkgLyBBc21SZWFkUnNwKCku DQo+ID4+Pg0KPiA+Pj4gVGhhbmtzLA0KPiA+Pj4gRXJpYw0KPiA+Pj4NCj4gPj4+PiAtLS0tLU9y aWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+Pj4+IEZyb206IGVkazItZGV2ZWwgW21haWx0bzplZGsy LWRldmVsLWJvdW5jZXNAbGlzdHMuMDEub3JnXSBPbiBCZWhhbGYNCj4gPj4+PiBPZiBEb25nLCBF cmljDQo+ID4+Pj4gU2VudDogTW9uZGF5LCBKdWx5IDksIDIwMTggMTE6MDQgQU0NCj4gPj4+PiBU bzogTGFzemxvIEVyc2VrIDxsZXJzZWtAcmVkaGF0LmNvbT47IEZhbiBKZWZmDQo+ID4+Pj4gPHZh bmplZmZfOTE5QGhvdG1haWwuY29tPjsgZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmcNCj4gPj4+PiBD YzogTmksIFJ1aXl1IDxydWl5dS5uaUBpbnRlbC5jb20+DQo+ID4+Pj4gU3ViamVjdDogUmU6IFtl ZGsyXSDnrZTlpI06IFtQYXRjaF0gVWVmaUNwdVBrZy9NcEluaXRMaWI6IE9wdGltaXplIGdldA0K PiA+Pj4+IHByb2Nlc3NvciBudW1iZXIgcGVyZm9ybWFuY2UuDQo+ID4+Pj4NCj4gPj4+PiBIaSBM YXN6bG8sDQo+ID4+Pj4NCj4gPj4+Pj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPj4+ Pj4gRnJvbTogTGFzemxvIEVyc2VrIFttYWlsdG86bGVyc2VrQHJlZGhhdC5jb21dDQo+ID4+Pj4+ IFNlbnQ6IFRodXJzZGF5LCBKdWx5IDUsIDIwMTggOTowNCBQTQ0KPiA+Pj4+PiBUbzogRmFuIEpl ZmYgPHZhbmplZmZfOTE5QGhvdG1haWwuY29tPjsgRG9uZywgRXJpYw0KPiA+Pj4+PiA8ZXJpYy5k b25nQGludGVsLmNvbT47IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnDQo+ID4+Pj4+IENjOiBOaSwg UnVpeXUgPHJ1aXl1Lm5pQGludGVsLmNvbT4NCj4gPj4+Pj4gU3ViamVjdDogUmU6IFtlZGsyXSDn rZTlpI06IFtQYXRjaF0gVWVmaUNwdVBrZy9NcEluaXRMaWI6IE9wdGltaXplIGdldA0KPiA+Pj4+ PiBwcm9jZXNzb3IgbnVtYmVyIHBlcmZvcm1hbmNlLg0KPiA+Pj4+Pg0KPiA+Pj4+PiBIaSBKZWZm LA0KPiA+Pj4+Pg0KPiA+Pj4+PiBPbiAwNy8wNC8xOCAxMTozOSwgRmFuIEplZmYgd3JvdGU6DQo+ ID4+Pj4+PiBFcmljLA0KPiA+Pj4+Pj4NCj4gPj4+Pj4+IEN1cnJlbnQgaW1wbGVtZW50YXRpb24g ZG9lcyBub3QgY2FsbCBHZXRBcGljaWQoKSBtYW55IHRpbWVzLA0KPiA+Pj4+Pj4gUGxlYXNlDQo+ ID4+Pj4+IGNvcnJlY3QgeW91IGNvbW1pdCBtZXNzYWdlLiBZb3VyIGZpeCBpcyB0byBpbXByb3Zl IHRoZSBwZXJmb3JtYW5jZQ0KPiA+Pj4+PiBhZ2FpbnN0IHRoZSBjdXJyZW50IGltcGxlbWVudGF0 aW9uLg0KPiA+Pj4+Pg0KPiA+Pj4+PiBJIHRoaW5rIHRoZSBvcmlnaW5hbCBjb21taXQgbWVzc2Fn ZSBkb2VzIG1ha2Ugc2Vuc2UuIFdpdGhvdXQgdGhlDQo+ID4+Pj4+IHBhdGNoLA0KPiA+Pj4+PiBH ZXRQcm9jZXNzb3JOdW1iZXIoKSBtYXkgY2FsbCBHZXRBcGljSWQoKSB1cCB0bw0KPiA+Pj4+PiBU b3RhbFByb2Nlc3Nvck51bWJlciB0aW1lcy4gV2l0aCB0aGUgcGF0Y2gsIGV2ZW4gaWYgd2Ugc2tp cCB0aGUNCj4gPj4+Pj4gc3RhY2sgcmFuZ2Ugc2VhcmNoLA0KPiA+Pj4+PiBHZXRQcm9jZXNzb3JO dW1iZXIoKSB3aWxsIGNhbGwgR2V0QXBpY0lkKCkganVzdCBvbmNlLg0KPiA+Pj4+Pg0KPiA+Pj4+ PiBbLi4uXQ0KPiA+Pj4+Pg0KPiA+Pj4+PiBTb21lIG1vcmUgcXVlc3Rpb25zIGJlbG93LCBmb3Ig dGhlIHBhdGNoOg0KPiA+Pj4+Pg0KPiA+Pj4+Pj4g5Y+R5Lu25Lq6OiBFcmljIERvbmcgPGVyaWMu ZG9uZ0BpbnRlbC5jb20+DQo+ID4+Pj4+PiDlj5HpgIHml7bpl7Q6IFdlZG5lc2RheSwgSnVseSA0 LCAyMDE4IDQ6Mzc6MzYgUE0NCj4gPj4+Pj4+IOaUtuS7tuS6ujogZWRrMi1kZXZlbEBsaXN0cy4w MS5vcmcNCj4gPj4+Pj4+IOaKhOmAgTogUnVpeXUgTmk7IEplZmYgRmFuOyBMYXN6bG8gRXJzZWsN Cj4gPj4+Pj4+IOS4u+mimDogW1BhdGNoXSBVZWZpQ3B1UGtnL01wSW5pdExpYjogT3B0aW1pemUg Z2V0IHByb2Nlc3NvciBudW1iZXINCj4gPj4+Pj4gcGVyZm9ybWFuY2UuDQo+ID4+Pj4+Pg0KPiA+ Pj4+Pj4gQ3VycmVudCBmdW5jdGlvbiBoYXMgbG93IHBlcmZvcm1hbmNlIGJlY2F1c2UgaXQgY2Fs bHMgR2V0QXBpY0lkDQo+ID4+Pj4+PiBtYW55IHRpbWVzLg0KPiA+Pj4+Pj4NCj4gPj4+Pj4+IE5l dyBsb2dpYyBmaXJzdCB0cnkgdG8gYmFzZSBvbiB0aGUgc3RhY2sgcmFuZ2UgdXNlZCBieSBBUCB0 byBmaW5kDQo+ID4+Pj4+PiB0aGUgcHJvY2Vzc29yIG51bWJlci4gSWYgdGhpcyBzb2x1dGlvbiBm YWlsZWQsIHRoZW4gY2FsbA0KPiA+Pj4+Pj4gR2V0QXBpY0lkIG9uY2UgYW5kIGJhc2Ugb24gdGhp cyB2YWx1ZSB0byBzZWFyY2ggdGhlIHByb2Nlc3Nvci4NCj4gPj4+Pj4+DQo+ID4+Pj4+PiBDYzog UnVpeXUgTmkgPHJ1aXl1Lm5pQGludGVsLmNvbT4NCj4gPj4+Pj4+IENjOiBKZWZmIEZhbiA8dmFu amVmZl85MTlAaG90bWFpbC5jb20+DQo+ID4+Pj4+PiBDYzogTGFzemxvIEVyc2VrIDxsZXJzZWtA cmVkaGF0LmNvbT4NCj4gPj4+Pj4+IENvbnRyaWJ1dGVkLXVuZGVyOiBUaWFub0NvcmUgQ29udHJp YnV0aW9uIEFncmVlbWVudCAxLjENCj4gPj4+Pj4+IFNpZ25lZC1vZmYtYnk6IEVyaWMgRG9uZyA8 ZXJpYy5kb25nQGludGVsLmNvbT4NCj4gPj4+Pj4+IC0tLQ0KPiA+Pj4+Pj4gIFVlZmlDcHVQa2cv TGlicmFyeS9NcEluaXRMaWIvTXBMaWIuYyB8IDI1DQo+ID4+PiArKysrKysrKysrKysrKysrKysr KysrLS0tDQo+ID4+Pj4+PiAgMSBmaWxlIGNoYW5nZWQsIDIyIGluc2VydGlvbnMoKyksIDMgZGVs ZXRpb25zKC0pDQo+ID4+Pj4+Pg0KPiA+Pj4+Pj4gZGlmZiAtLWdpdCBhL1VlZmlDcHVQa2cvTGli cmFyeS9NcEluaXRMaWIvTXBMaWIuYw0KPiA+Pj4+Pj4gYi9VZWZpQ3B1UGtnL0xpYnJhcnkvTXBJ bml0TGliL01wTGliLmMNCj4gPj4+Pj4+IGluZGV4IGViMjc2NTkxMGMuLmFiZDY1YmVlMWEgMTAw NjQ0DQo+ID4+Pj4+PiAtLS0gYS9VZWZpQ3B1UGtnL0xpYnJhcnkvTXBJbml0TGliL01wTGliLmMN Cj4gPj4+Pj4+ICsrKyBiL1VlZmlDcHVQa2cvTGlicmFyeS9NcEluaXRMaWIvTXBMaWIuYw0KPiA+ Pj4+Pj4gQEAgLTQxOCw3ICs0MTgsOCBAQCBBcEluaXRpYWxpemVTeW5jICggIH0NCj4gPj4+Pj4+ DQo+ID4+Pj4+PiAgLyoqDQo+ID4+Pj4+PiAtICBGaW5kIHRoZSBjdXJyZW50IFByb2Nlc3NvciBu dW1iZXIgYnkgQVBJQyBJRC4NCj4gPj4+Pj4+ICsgIEZpcnN0IHRyeSB0byBmaW5kIHRoZSBjdXJy ZW50IFByb2Nlc3NvciBudW1iZXIgYnkgc3RhY2sNCj4gPj4+Pj4+ICsgYWRkcmVzcywgaWYgaXQg ZmFpbGVkLCB0aGVuIGJhc2Ugb24gQVBJQyBJRC4NCj4gPj4+Pj4+DQo+ID4+Pj4+PiAgICBAcGFy YW1baW5dICBDcHVNcERhdGEgICAgICAgICBQb2ludGVyIHRvIFBFSSBDUFUgTVAgRGF0YQ0KPiA+ Pj4+Pj4gICAgQHBhcmFtW291dF0gUHJvY2Vzc29yTnVtYmVyICAgUmV0dXJuIHRoZSBwb2Nlc3Nv ciBudW1iZXINCj4gZm91bmQNCj4gPj4+Pj4+IEBAIC00MzUsMTYgKzQzNiwzNCBAQCBHZXRQcm9j ZXNzb3JOdW1iZXIgKA0KPiA+Pj4+Pj4gICAgVUlOVE4gICAgICAgICAgICAgICAgICAgVG90YWxQ cm9jZXNzb3JOdW1iZXI7DQo+ID4+Pj4+PiAgICBVSU5UTiAgICAgICAgICAgICAgICAgICBJbmRl eDsNCj4gPj4+Pj4+ICAgIENQVV9JTkZPX0lOX0hPQiAgICAgICAgICpDcHVJbmZvSW5Ib2I7DQo+ ID4+Pj4+PiArICBVSU5UMzIgICAgICAgICAgICAgICAgICBDdXJyZW50QXBpY0lkOw0KPiA+Pj4+ Pj4NCj4gPj4+Pj4+ICsgIFRvdGFsUHJvY2Vzc29yTnVtYmVyID0gQ3B1TXBEYXRhLT5DcHVDb3Vu dDsNCj4gPj4+Pj4+ICAgIENwdUluZm9JbkhvYiA9IChDUFVfSU5GT19JTl9IT0IgKikgKFVJTlRO KSBDcHVNcERhdGEtDQo+ID4+Pj4+PiBDcHVJbmZvSW5Ib2I7DQo+ID4+Pj4+Pg0KPiA+Pj4+Pj4g LSAgVG90YWxQcm9jZXNzb3JOdW1iZXIgPSBDcHVNcERhdGEtPkNwdUNvdW50Ow0KPiA+Pj4+Pj4g KyAgLy8NCj4gPj4+Pj4+ICsgIC8vIEZpcnN0IHRyeSB0byBiYXNlIG9uIGN1cnJlbnQgc3RhY2sg YWRkcmVzcyB0byBmaW5kIHRoZSBBUCBpbmRleC4NCj4gPj4+Pj4+ICsgIC8vICZUb3RhbFByb2Nl c3Nvck51bWJlciB2YWx1ZSBsb2NhdGVkIGluIHRoZSBzdGFjayByYW5nZS4NCj4gPj4+Pj4+ICsg IC8vDQo+ID4+Pj4+PiAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBUb3RhbFByb2Nlc3Nvck51 bWJlcjsgSW5kZXggKyspIHsNCj4gPj4+Pj4+IC0gICAgaWYgKENwdUluZm9JbkhvYltJbmRleF0u QXBpY0lkID09IEdldEFwaWNJZCAoKSkgew0KPiA+Pj4+Pj4gKyAgICBpZiAoKENwdUluZm9Jbkhv YltJbmRleF0uQXBUb3BPZlN0YWNrID4gKFVJTlROKQ0KPiA+Pj4+PiAoJlRvdGFsUHJvY2Vzc29y TnVtYmVyKSkgJiYNCj4gPj4+Pj4+ICsgICAgICAgIChDcHVJbmZvSW5Ib2JbSW5kZXhdLkFwVG9w T2ZTdGFjayAtDQo+ID4+Pj4+PiArIENwdU1wRGF0YS0+Q3B1QXBTdGFja1NpemUgPCAoVUlOVE4p ICgmVG90YWxQcm9jZXNzb3JOdW1iZXIpKSkNCj4gew0KPiA+Pj4+Pj4gICAgICAgICpQcm9jZXNz b3JOdW1iZXIgPSBJbmRleDsNCj4gPj4+Pj4+ICAgICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ ID4+Pj4+PiAgICAgIH0NCj4gPj4+Pj4+ICAgIH0NCj4gPj4+Pj4NCj4gPj4+Pj4gKDEpIElmIEkg dW5kZXJzdGFuZCBjb3JyZWN0bHksIEFwVG9wT2ZTdGFjayBpcyB0aGUgZXhjbHVzaXZlIGVuZA0K PiA+Pj4+PiAoaGlnaGVzdA0KPiA+Pj4+PiBhZGRyZXNzKSBvZiB0aGUgQVAgc3RhY2ssIHNvIGFu eSBsb2NhbCB2YXJpYWJsZSBpcyBzdXBwb3NlZCB0bw0KPiA+Pj4+PiBzdGFydCBzdHJpY3RseSBi ZWxvdyBpdCAodGhlIHN0YWNrIGdyb3dzIGRvd24pLiBUaGlzIHNlZW1zIHRvDQo+ID4+Pj4+IGp1 c3RpZnkgdGhlICI+IiByZWxhdGlvbmFsIG9wZXJhdG9yLCBpbiB0aGUgZmlyc3Qgc3ViY29uZGl0 aW9uOyBPSy4NCj4gPj4+Pj4NCj4gPj4+Pj4gSG93ZXZlciwgd2hhdCBndWFyYW50ZWVzIHRoYXQg dGhlIFRvdGFsUHJvY2Vzc29yTnVtYmVyIGxvY2FsDQo+ID4+Pj4+IHZhcmlhYmxlIGlzIG5vdCBs b2NhdGVkIGV4YWN0bHkgYXQgdGhlIChpbmNsdXNpdmUpIGJhc2Ugb2YgdGhlIEFQIHN0YWNrPw0K PiA+PiBJT1csIHdoeSBpcyAiPCINCj4gPj4+Pj4gY29ycmVjdCwgaW4gdGhlIHNlY29uZCBzdWJj b25kaXRpb24sIHJhdGhlciB0aGFuICI8PSI/DQo+ID4+Pj4+DQo+ID4+Pj4NCj4gPj4+PiBbRXJp Y10gIFRvdGFsUHJvY2Vzc29yTnVtYmVyIGlzIHRoZSBmaXJzdCBsb2NhbCB2YXJpYWJsZSBpbiB0 aGlzDQo+ID4+Pj4gZnVuY3Rpb24sIGFsc28gZXhpc3Qgb3RoZXIgbG9jYWwgdmFyaWFibGVzIGlu IHRoaXMgZnVuY3Rpb24sIHNvIEkganVzdCB1c2UgIjwiDQo+ID4+IGhlcmUuDQo+ID4+Pj4NCj4g Pj4+Pj4NCj4gPj4+Pj4gKDIpIEknbSBnZW5lcmFsbHkgdW5oYXBweSBhYm91dCB0YWtpbmcgdGhl IGFkZHJlc3Mgb2YgbG9jYWwNCj4gPj4+Pj4gdmFyaWFibGVzLCBpbiBvcmRlciB0byBkZXRlcm1p bmUgc3RhY2sgbG9jYXRpb24gaW4gQyBsYW5ndWFnZS4NCj4gPj4+Pj4gSW5zdGVhZCwgSSB0aGlu ayB3ZSBzaG91bGQgaGF2ZQ0KPiA+Pj4+PiBBc21SZWFkRXNwKCkgLyBBc21SZWFkUnNwKCkgZnVu Y3Rpb25zIC0tIHdlIHVzZWQgdG8gaGF2ZQ0KPiA+Pj4+PiBBc21SZWFkU3AoKSBmb3IgSXRhbml1 bS4gUGxlYXNlIHNlZSB0aGUgZm9sbG93aW5nIHN1Yi10aHJlYWQsDQo+ID4+Pj4+IHdoZXJlIEpv cmRhbiBvcmlnaW5hbGx5IHN1Z2dlc3RlZCBBc21SZWFkRXNwKCkgLyBBc21SZWFkUnNwKCk6DQo+ ID4+Pj4+DQo+ID4+Pj4+IGh0dHA6Ly9taWQubWFpbC0NCj4gPj4+Pj4gYXJjaGl2ZS5jb20vMTUx MDU2NDEwODY3LjE1ODA5LjY1OTcwMTg5NDIyNjY4NzU0M0BqbGp1c3Rlbi1za2wNCj4gPj4+Pj4N Cj4gPj4+Pj4gaHR0cDovL21pZC5tYWlsLQ0KPiA+Pj4+PiBhcmNoaXZlLmNvbS8xNTEwNTk2Mjcy NTguMjA2MTQuMTY1MDU3NjYxOTE0MTUwMDU4MDJAamxqdXN0ZW4tDQo+IHNrbA0KPiA+Pj4+Pg0K PiA+Pj4+PiBTaG91bGQgSSBmaWxlIGEgRmVhdHVyZSBSZXF1ZXN0IGZvciBCYXNlTGliLCBhYm91 dCBhZGRpbmcNCj4gPj4+Pj4gQXNtUmVhZEVzcCgpIC8gQXNtUmVhZFJzcCgpPw0KPiA+Pj4+Pg0K PiA+Pj4+PiBJJ20gbm90IHN1Z2dlc3RpbmcgdGhhdCB3ZSBibG9jayB0aGlzIHBhdGNoIHdpdGgg dGhhdCBmZWF0dXJlDQo+ID4+Pj4+IHJlcXVlc3QsIGJ1dCBwZXJoYXBzIHdlIHNob3VsZCBibG9j ayB0aGUgKm5leHQqIHBhdGNoLg0KPiA+Pj4+Pg0KPiA+Pj4+DQo+ID4+Pj4gW0VyaWNdIFllcywg SSB0cmllcyB0byB1c2UgdGhlIGZ1bmN0aW9uIHlvdSBzdWdnZXN0ZWQgYnV0IHdlIGRvbid0DQo+ ID4+Pj4gZmluZCBpdCwgc28gSSB1c2UgbG9jYWwgdmFyaWFibGUgaGVyZS4gIEkgYWdyZWUgd2l0 aCB5b3VyIHN1Z2dlc3QNCj4gPj4+PiB0aGF0IHdlIHNob3VsZCBhZGQgdGhpcyBBUEkgZm9yIGxh dGVyIHVzYWdlLiBJIHdpbGwgZm9sbG93IHVwIHRvDQo+ID4+Pj4gYWRkIHRoaXMgbmV3DQo+ID4+ IEFQSSBhbmQgdXBkYXRlIHRoaXMgcGF0Y2ggdG8gVjIuDQo+ID4+Pj4NCj4gPj4+Pj4NCj4gPj4+ Pj4gRm9yIHRoZSBwcmVzZW50IHBhdGNoLCBJJ2xsIGZvbGxvdyB1cCB3aXRoIHRlc3QgcmVzdWx0 cyBzZXBhcmF0ZWx5Lg0KPiA+Pj4+Pg0KPiA+Pj4+PiBUaGFua3MsDQo+ID4+Pj4+IExhc3psbw0K PiA+Pj4+Pg0KPiA+Pj4+Pj4gKw0KPiA+Pj4+Pj4gKyAgLy8NCj4gPj4+Pj4+ICsgIC8vIElmIGNh bid0IGJhc2Ugb24gc3RhY2sgdG8gZmluZCB0aGUgQVAgaW5kZXgsIHVzZSB0aGUgQVBJQyBJRC4N Cj4gPj4+Pj4+ICsgIC8vDQo+ID4+Pj4+PiArICBDdXJyZW50QXBpY0lkID0gR2V0QXBpY0lkICgp OyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwNCj4gPj4+Pj4+ICsgVG90YWxQcm9jZXNzb3JOdW1i ZXI7IEluZGV4ICsrKSB7DQo+ID4+Pj4+PiArICAgIGlmIChDcHVJbmZvSW5Ib2JbSW5kZXhdLkFw aWNJZCA9PSBDdXJyZW50QXBpY0lkKSB7DQo+ID4+Pj4+PiArICAgICAgKlByb2Nlc3Nvck51bWJl ciA9IEluZGV4Ow0KPiA+Pj4+Pj4gKyAgICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPj4+Pj4+ ICsgICAgfQ0KPiA+Pj4+Pj4gKyAgfQ0KPiA+Pj4+Pj4gKw0KPiA+Pj4+Pj4gICAgcmV0dXJuIEVG SV9OT1RfRk9VTkQ7DQo+ID4+Pj4+PiAgfQ0KPiA+Pj4+Pj4NCj4gPj4+Pj4+IC0tDQo+ID4+Pj4+ PiAyLjE1LjAud2luZG93cy4xDQo+ID4+Pj4+Pg0KPiA+Pj4+Pj4gX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCj4gPj4+Pj4+IGVkazItZGV2ZWwgbWFpbGlu ZyBsaXN0DQo+ID4+Pj4+PiBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZw0KPiA+Pj4+Pj4gaHR0cHM6 Ly9saXN0cy4wMS5vcmcvbWFpbG1hbi9saXN0aW5mby9lZGsyLWRldmVsDQo+ID4+Pj4+Pg0KPiA+ Pj4+DQo+ID4+Pj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18NCj4gPj4+PiBlZGsyLWRldmVsIG1haWxpbmcgbGlzdA0KPiA+Pj4+IGVkazItZGV2ZWxAbGlz dHMuMDEub3JnDQo+ID4+Pj4gaHR0cHM6Ly9saXN0cy4wMS5vcmcvbWFpbG1hbi9saXN0aW5mby9l ZGsyLWRldmVsDQo+ID4+PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXw0KPiA+Pj4gZWRrMi1kZXZlbCBtYWlsaW5nIGxpc3QNCj4gPj4+IGVkazItZGV2ZWxA bGlzdHMuMDEub3JnDQo+ID4+PiBodHRwczovL2xpc3RzLjAxLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2VkazItZGV2ZWwNCg0K