From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 192.55.52.136, mailfrom: ray.ni@intel.com) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by groups.io with SMTP; Tue, 23 Jul 2019 18:40:44 -0700 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga106.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 23 Jul 2019 18:40:44 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.64,300,1559545200"; d="scan'208";a="193291499" Received: from fmsmsx104.amr.corp.intel.com ([10.18.124.202]) by fmsmga004.fm.intel.com with ESMTP; 23 Jul 2019 18:40:43 -0700 Received: from fmsmsx161.amr.corp.intel.com (10.18.125.9) by fmsmsx104.amr.corp.intel.com (10.18.124.202) with Microsoft SMTP Server (TLS) id 14.3.439.0; Tue, 23 Jul 2019 18:40:43 -0700 Received: from shsmsx103.ccr.corp.intel.com (10.239.4.69) by FMSMSX161.amr.corp.intel.com (10.18.125.9) with Microsoft SMTP Server (TLS) id 14.3.439.0; Tue, 23 Jul 2019 18:40:43 -0700 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.110]) by SHSMSX103.ccr.corp.intel.com ([169.254.4.109]) with mapi id 14.03.0439.000; Wed, 24 Jul 2019 09:40:41 +0800 From: "Ni, Ray" To: "Kinney, Michael D" , "devel@edk2.groups.io" , "lersek@redhat.com" CC: "Dong, Eric" Subject: Re: [edk2-devel] [PATCH 4/4] MdeModulePkg/DxeIpl: Create 5-level page table for long mode Thread-Topic: [edk2-devel] [PATCH 4/4] MdeModulePkg/DxeIpl: Create 5-level page table for long mode Thread-Index: AQHVQTt2cbYWoDCQaUekb4lsAe3OuKbYS6Fw///DD4CAAEyLAIAAo48Q Date: Wed, 24 Jul 2019 01:40:41 +0000 Message-ID: <734D49CCEBEEF84792F5B80ED585239D5C24238B@SHSMSX104.ccr.corp.intel.com> References: <20190722081547.56100-1-ray.ni@intel.com> <20190722081547.56100-5-ray.ni@intel.com> <734D49CCEBEEF84792F5B80ED585239D5C2417DB@SHSMSX104.ccr.corp.intel.com> <6cc63718-a546-8b80-022d-d1a76cff081d@redhat.com> In-Reply-To: Accept-Language: en-US, zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiZDJjNTgzNjktYjQ2My00ZmFjLWE4MWMtNTBlODZmZDJmODNmIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiVkZLaTNxQXVqOFptYmszWTB0Z2lkUVl4WisyK2tPdjVpOXBJd0xPUEl1UldpWUZ3RFFZYnRtNXFEcTRnYkxyWCJ9 x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.600.7 dlp-reaction: no-action x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Return-Path: ray.ni@intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 TWlrZSwNClRoYW5rcyBmb3IgdGhlIHN1Z2dlc3Rpb24uDQpJIHdpbGwgdHJ5IHRvIG1vdmUgQ3B1 aWQuaCB0byBNZGVQa2cvSW5jbHVkZS9SZWdpc3RlciBkaXJlY3RvcnkgaW4gVjIgcGF0Y2guDQoN ClRoYW5rcywNClJheQ0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEtp bm5leSwgTWljaGFlbCBEDQo+IFNlbnQ6IFdlZG5lc2RheSwgSnVseSAyNCwgMjAxOSA3OjU0IEFN DQo+IFRvOiBkZXZlbEBlZGsyLmdyb3Vwcy5pbzsgbGVyc2VrQHJlZGhhdC5jb207IE5pLCBSYXkg PHJheS5uaUBpbnRlbC5jb20+OyBLaW5uZXksIE1pY2hhZWwgRCA8bWljaGFlbC5kLmtpbm5leUBp bnRlbC5jb20+DQo+IENjOiBEb25nLCBFcmljIDxlcmljLmRvbmdAaW50ZWwuY29tPg0KPiBTdWJq ZWN0OiBSRTogW2VkazItZGV2ZWxdIFtQQVRDSCA0LzRdIE1kZU1vZHVsZVBrZy9EeGVJcGw6IENy ZWF0ZSA1LWxldmVsIHBhZ2UgdGFibGUgZm9yIGxvbmcgbW9kZQ0KPiANCj4gTGFzemxvLA0KPiAN Cj4gVGhlcmUgYWxyZWFkeSBhIGZldyBleGFtcGxlcyBpbiBNZGVQa2cvSW5jbHVkZS9MaWJyYXJ5 L0Jhc2VMaWIuaC4NCj4gRm9yIGV4YW1wbGUsIHRoZSBiaXQgZmllbGQgc3RydWN0dXJlcyBmb3Ig Q1IwLCBDUjQsIEVGTEFHUywNCj4gYW5kIGEgc2VnbWVudCBkZXNjcmlwdG9yIGFyZSBpbiB0aGF0 IC5oIGZpbGUuICBUaGVzZSBhcmUgYWxsDQo+IHdpdGhpbjoNCj4gDQo+ICNpZiBkZWZpbmVkIChN REVfQ1BVX0lBMzIpIHx8IGRlZmluZWQgKE1ERV9DUFVfWDY0KQ0KPiAuIC4gLg0KPiAjZW5kaWYN Cj4gDQo+IFdlIGhhdmUgc2luY2UgdXNlZCBhIHN0YW5kYXJkIHdheSB0byBwcm92aWRlIC5oIGZp bGVzIGZvcg0KPiByZWdpc3RlcnMuICBCZXN0IGV4YW1wbGUgaXMgaW4gVWVmaUNwdVBrZy9JbmNs dWRlL1JlZ2lzdGVyLg0KPiANCj4gSXQgbWF5IG1ha2Ugc2Vuc2UgdG8gcHV0IHRoZSByZWdpc3Rl ciBkZWZpbml0aW9ucyByZXF1aXJlZA0KPiBieSBNZGVQa2cgYW5kIE1kZU1vZHVsZVBrZyBpbiBN ZGVQa2cvSW5jbHVkZS9SZWdpc3RlciwgYW5kDQo+IGZpbGVzIHRoYXQgdXNlIHRob3NlIHJlZ2lz dGVyIHR5cGVzIGNhbiBpbmNsdWRlIHRoZQ0KPiByZXF1aXJlZCByZWdpc3RlciBkZWZpbml0aW9u IGluY2x1ZGUgZmlsZXMuDQo+IA0KPiBCZXN0IHJlZ2FyZHMsDQo+IA0KPiBNaWtlDQo+IA0KPiA+ IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gRnJvbTogZGV2ZWxAZWRrMi5ncm91cHMu aW8NCj4gPiBbbWFpbHRvOmRldmVsQGVkazIuZ3JvdXBzLmlvXSBPbiBCZWhhbGYgT2YgTGFzemxv IEVyc2VrDQo+ID4gU2VudDogVHVlc2RheSwgSnVseSAyMywgMjAxOSAxMjoyMCBQTQ0KPiA+IFRv OiBOaSwgUmF5IDxyYXkubmlAaW50ZWwuY29tPjsgZGV2ZWxAZWRrMi5ncm91cHMuaW8NCj4gPiBD YzogRG9uZywgRXJpYyA8ZXJpYy5kb25nQGludGVsLmNvbT4NCj4gPiBTdWJqZWN0OiBSZTogW2Vk azItZGV2ZWxdIFtQQVRDSCA0LzRdDQo+ID4gTWRlTW9kdWxlUGtnL0R4ZUlwbDogQ3JlYXRlIDUt bGV2ZWwgcGFnZSB0YWJsZSBmb3IgbG9uZw0KPiA+IG1vZGUNCj4gPg0KPiA+IE9uIDA3LzIzLzE5 IDE3OjI5LCBOaSwgUmF5IHdyb3RlOg0KPiA+ID4NCj4gPiA+DQo+ID4gPj4gLS0tLS1PcmlnaW5h bCBNZXNzYWdlLS0tLS0NCj4gPiA+PiBGcm9tOiBkZXZlbEBlZGsyLmdyb3Vwcy5pbyA8ZGV2ZWxA ZWRrMi5ncm91cHMuaW8+IE9uDQo+ID4gQmVoYWxmIE9mIExhc3psbw0KPiA+ID4+IEVyc2VrDQo+ ID4gPj4gU2VudDogVHVlc2RheSwgSnVseSAyMywgMjAxOSA1OjQ2IFBNDQo+ID4gPj4gVG86IGRl dmVsQGVkazIuZ3JvdXBzLmlvOyBOaSwgUmF5IDxyYXkubmlAaW50ZWwuY29tPg0KPiA+ID4+IENj OiBEb25nLCBFcmljIDxlcmljLmRvbmdAaW50ZWwuY29tPg0KPiA+ID4+IFN1YmplY3Q6IFJlOiBb ZWRrMi1kZXZlbF0gW1BBVENIIDQvNF0NCj4gPiBNZGVNb2R1bGVQa2cvRHhlSXBsOiBDcmVhdGUN Cj4gPiA+PiA1LWxldmVsIHBhZ2UgdGFibGUgZm9yIGxvbmcgbW9kZQ0KPiA+ID4+DQo+ID4gPj4g T24gMDcvMjIvMTkgMTA6MTUsIE5pLCBSYXkgd3JvdGU6DQo+ID4gPj4+IFJFRjoNCj4gPiBodHRw czovL2J1Z3ppbGxhLnRpYW5vY29yZS5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDgNCj4gPiA+Pj4N Cj4gPiA+Pj4gRHhlSXBsIGlzIHJlc3BvbnNpYmxlIHRvIGNyZWF0ZSBwYWdlIHRhYmxlIGZvciBE WEUNCj4gPiBwaGFzZSBydW5uaW5nDQo+ID4gPj4+IGVpdGhlciBpbiBsb25nIG1vZGUgb3IgaW4g MzJiaXQgbW9kZSB3aXRoIGNlcnRhaW4NCj4gPiBwcm90ZWN0aW9uDQo+ID4gPj4+IG1lY2hhbmlz bSBlbmFibGVkIChyZWZlciB0byBUb0J1aWxkUGFnZVRhYmxlKCkpLg0KPiA+ID4+Pg0KPiA+ID4+ PiBUaGUgcGF0Y2ggdXBkYXRlcyBEeGVJcGwgdG8gY3JlYXRlIDUtbGV2ZWwgcGFnZQ0KPiA+IHRh YmxlIGZvciBEWEUgcGhhc2UNCj4gPiA+Pj4gcnVubmluZyBpbiBsb25nIG1vZGUgd2hlbiBQY2RV c2U1TGV2ZWxQYWdlVGFibGUgaXMNCj4gPiBUUlVFIGFuZCBDUFUNCj4gPiA+Pj4gc3VwcG9ydHMg NS1sZXZlbCBwYWdlIHRhYmxlLg0KPiA+ID4+Pg0KPiA+ID4+PiBTaWduZWQtb2ZmLWJ5OiBSYXkg TmkgPHJheS5uaUBpbnRlbC5jb20+DQo+ID4gPj4+IENjOiBFcmljIERvbmcgPGVyaWMuZG9uZ0Bp bnRlbC5jb20+DQo+ID4gPj4+IENjOiBMYXN6bG8gRXJzZWsgPGxlcnNla0ByZWRoYXQuY29tPg0K PiA+ID4+PiAtLS0NCj4gPiA+Pj4gIE1kZU1vZHVsZVBrZy9Db3JlL0R4ZUlwbFBlaW0vRHhlSXBs LmluZiAgICAgICB8DQo+ID4gMSArDQo+ID4gPj4+ICAuLi4vQ29yZS9EeGVJcGxQZWltL1g2NC9W aXJ0dWFsTWVtb3J5LmMgICAgICAgfA0KPiA+IDIyNyArKysrKysrKysrKystLS0tLS0NCj4gPiA+ Pj4gIDIgZmlsZXMgY2hhbmdlZCwgMTUxIGluc2VydGlvbnMoKyksIDc3IGRlbGV0aW9ucygtDQo+ ID4gKQ0KPiA+ID4+Pg0KPiA+ID4+PiBkaWZmIC0tZ2l0DQo+ID4gYS9NZGVNb2R1bGVQa2cvQ29y ZS9EeGVJcGxQZWltL0R4ZUlwbC5pbmYNCj4gPiA+Pj4gYi9NZGVNb2R1bGVQa2cvQ29yZS9EeGVJ cGxQZWltL0R4ZUlwbC5pbmYNCj4gPiA+Pj4gaW5kZXggYWJjMzIxN2IwMS4uOThiYzE3ZmM5ZCAx MDA2NDQNCj4gPiA+Pj4gLS0tIGEvTWRlTW9kdWxlUGtnL0NvcmUvRHhlSXBsUGVpbS9EeGVJcGwu aW5mDQo+ID4gPj4+ICsrKyBiL01kZU1vZHVsZVBrZy9Db3JlL0R4ZUlwbFBlaW0vRHhlSXBsLmlu Zg0KPiA+ID4+PiBAQCAtMTEwLDYgKzExMCw3IEBAIFtQY2QuSUEzMixQY2QuWDY0XQ0KPiA+ID4+ Pg0KPiA+IGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2ROdWxsUG9pbnRlckRldGVj dGlvblANCj4gPiByb3BlcnR5TWFzayAgICAjIyBDT05TVU1FUw0KPiA+ID4+Pg0KPiA+IGdFZmlN ZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RIZWFwR3VhcmRQcm9wZXJ0eU1hc2sNCj4gPiAj IyBDT05TVU1FUw0KPiA+ID4+PiAgICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNk Q3B1U3RhY2tHdWFyZA0KPiA+ICMjIENPTlNVTUVTDQo+ID4gPj4+ICsNCj4gPiBnRWZpTWRlTW9k dWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkVXNlNUxldmVsUGFnZVRhYmxlDQo+ID4gIyMgU09NRVRJ TUVTX0NPTlNVTUVTDQo+ID4gPj4+DQo+ID4gPj4+ICBbUGNkLklBMzIsUGNkLlg2NCxQY2QuQVJN LFBjZC5BQVJDSDY0XQ0KPiA+ID4+PiAgICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQu UGNkU2V0TnhGb3JTdGFjaw0KPiA+ICMjIFNPTUVUSU1FU19DT05TVU1FUw0KPiA+ID4+PiBkaWZm IC0tZ2l0DQo+ID4gYS9NZGVNb2R1bGVQa2cvQ29yZS9EeGVJcGxQZWltL1g2NC9WaXJ0dWFsTWVt b3J5LmMNCj4gPiA+Pj4gYi9NZGVNb2R1bGVQa2cvQ29yZS9EeGVJcGxQZWltL1g2NC9WaXJ0dWFs TWVtb3J5LmMNCj4gPiA+Pj4gaW5kZXggZWRjMzhlNDUyNS4uYTViY2RjYzczNCAxMDA2NDQNCj4g PiA+Pj4gLS0tDQo+ID4gYS9NZGVNb2R1bGVQa2cvQ29yZS9EeGVJcGxQZWltL1g2NC9WaXJ0dWFs TWVtb3J5LmMNCj4gPiA+Pj4gKysrDQo+ID4gYi9NZGVNb2R1bGVQa2cvQ29yZS9EeGVJcGxQZWlt L1g2NC9WaXJ0dWFsTWVtb3J5LmMNCj4gPiA+Pj4gQEAgLTE1LDcgKzE1LDcgQEANCj4gPiA+Pj4g ICAgICAyKSBJQS0zMiBJbnRlbChSKSBBcmNoaXRlY3R1cmUgU29mdHdhcmUNCj4gPiBEZXZlbG9w ZXIncyBNYW51YWwgVm9sdW1lIDI6SW5zdHJ1Y3Rpb24gU2V0IFJlZmVyZW5jZSwNCj4gPiBJbnRl bA0KPiA+ID4+PiAgICAgIDMpIElBLTMyIEludGVsKFIpIEFyY2hpdGVjdHVyZSBTb2Z0d2FyZQ0K PiA+IERldmVsb3BlcidzIE1hbnVhbA0KPiA+ID4+PiBWb2x1bWUgMzpTeXN0ZW0gUHJvZ3JhbW1l cidzIEd1aWRlLCBJbnRlbA0KPiA+ID4+Pg0KPiA+ID4+PiAtQ29weXJpZ2h0IChjKSAyMDA2IC0g MjAxOCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbA0KPiA+IHJpZ2h0cw0KPiA+ID4+PiByZXNlcnZl ZC48QlI+DQo+ID4gPj4+ICtDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDE5LCBJbnRlbCBDb3Jwb3Jh dGlvbi4gQWxsDQo+ID4gcmlnaHRzDQo+ID4gPj4+ICtyZXNlcnZlZC48QlI+DQo+ID4gPj4+ICBD b3B5cmlnaHQgKGMpIDIwMTcsIEFNRCBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMNCj4gPiByZXNl cnZlZC48QlI+DQo+ID4gPj4+DQo+ID4gPj4+ICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNE LTItQ2xhdXNlLVBhdGVudCBAQCAtDQo+ID4gNjI2LDE0ICs2MjYsMTkgQEANCj4gPiA+Pj4gQ3Jl YXRlSWRlbnRpdHlNYXBwaW5nUGFnZVRhYmxlcyAoDQo+ID4gPj4+ICAgICkNCj4gPiA+Pj4gIHsN Cj4gPiA+Pj4gICAgVUlOVDMyDQo+ID4gUmVnRWF4Ow0KPiA+ID4+PiArICBVSU5UMzINCj4gPiBS ZWdFYng7DQo+ID4gPj4+ICsgIFVJTlQzMg0KPiA+IFJlZ0VjeDsNCj4gPiA+Pj4gICAgVUlOVDMy DQo+ID4gUmVnRWR4Ow0KPiA+ID4+PiAgICBVSU5UOA0KPiA+IFBoeXNpY2FsQWRkcmVzc0JpdHM7 DQo+ID4gPj4+ICAgIEVGSV9QSFlTSUNBTF9BRERSRVNTDQo+ID4gUGFnZUFkZHJlc3M7DQo+ID4g Pj4+ICsgIFVJTlRODQo+ID4gSW5kZXhPZlBtbDVFbnRyaWVzOw0KPiA+ID4+PiAgICBVSU5UTg0K PiA+IEluZGV4T2ZQbWw0RW50cmllczsNCj4gPiA+Pj4gICAgVUlOVE4NCj4gPiBJbmRleE9mUGRw RW50cmllczsNCj4gPiA+Pj4gICAgVUlOVE4NCj4gPiBJbmRleE9mUGFnZURpcmVjdG9yeUVudHJp ZXM7DQo+ID4gPj4+ICsgIFVJTlQzMg0KPiA+IE51bWJlck9mUG1sNUVudHJpZXNOZWVkZWQ7DQo+ ID4gPj4+ICAgIFVJTlQzMg0KPiA+IE51bWJlck9mUG1sNEVudHJpZXNOZWVkZWQ7DQo+ID4gPj4+ ICAgIFVJTlQzMg0KPiA+IE51bWJlck9mUGRwRW50cmllc05lZWRlZDsNCj4gPiA+Pj4gKyAgUEFH RV9NQVBfQU5EX0RJUkVDVE9SWV9QT0lOVEVSDQo+ID4gKlBhZ2VNYXBMZXZlbDVFbnRyeTsNCj4g PiA+Pj4gICAgUEFHRV9NQVBfQU5EX0RJUkVDVE9SWV9QT0lOVEVSDQo+ID4gKlBhZ2VNYXBMZXZl bDRFbnRyeTsNCj4gPiA+Pj4gICAgUEFHRV9NQVBfQU5EX0RJUkVDVE9SWV9QT0lOVEVSDQo+ID4g KlBhZ2VNYXA7DQo+ID4gPj4+ICAgIFBBR0VfTUFQX0FORF9ESVJFQ1RPUllfUE9JTlRFUg0KPiA+ ICpQYWdlRGlyZWN0b3J5UG9pbnRlckVudHJ5Ow0KPiA+ID4+PiBAQCAtNjQxLDkgKzY0NiwxMSBA QA0KPiA+IENyZWF0ZUlkZW50aXR5TWFwcGluZ1BhZ2VUYWJsZXMgKA0KPiA+ID4+PiAgICBVSU5U Tg0KPiA+IFRvdGFsUGFnZXNOdW07DQo+ID4gPj4+ICAgIFVJTlRODQo+ID4gQmlnUGFnZUFkZHJl c3M7DQo+ID4gPj4+ICAgIFZPSUQNCj4gPiAqSG9iOw0KPiA+ID4+PiArICBCT09MRUFODQo+ID4g UGFnZTVMZXZlbFN1cHBvcnQ7DQo+ID4gPj4+ICAgIEJPT0xFQU4NCj4gPiBQYWdlMUdTdXBwb3J0 Ow0KPiA+ID4+PiAgICBQQUdFX1RBQkxFXzFHX0VOVFJZDQo+ID4gKlBhZ2VEaXJlY3RvcnkxR0Vu dHJ5Ow0KPiA+ID4+PiAgICBVSU5UNjQNCj4gPiBBZGRyZXNzRW5jTWFzazsNCj4gPiA+Pj4gKyAg SUEzMl9DUjQNCj4gPiBDcjQ7DQo+ID4gPj4+DQo+ID4gPj4+ICAgIC8vDQo+ID4gPj4+ICAgIC8v IE1ha2Ugc3VyZSBBZGRyZXNzRW5jTWFzayBpcyBjb250YWluZWQgdG8NCj4gPiBzbWFsbGVzdCBz dXBwb3J0ZWQNCj4gPiA+Pj4gYWRkcmVzcyBmaWVsZCBAQCAtNjc3LDMzICs2ODQsNjYgQEANCj4g PiBDcmVhdGVJZGVudGl0eU1hcHBpbmdQYWdlVGFibGVzICgNCj4gPiA+Pj4gICAgICB9DQo+ID4g Pj4+ICAgIH0NCj4gPiA+Pj4NCj4gPiA+Pj4gKyAgUGFnZTVMZXZlbFN1cHBvcnQgPSBGQUxTRTsN Cj4gPiA+Pj4gKyAgaWYgKFBjZEdldEJvb2wgKFBjZFVzZTVMZXZlbFBhZ2VUYWJsZSkpIHsNCj4g PiA+Pj4gKyAgICBBc21DcHVpZEV4ICgweDcsIDAsICZSZWdFYXgsICZSZWdFYngsICZSZWdFY3gs DQo+ID4gJlJlZ0VkeCk7DQo+ID4gPj4+ICsgICAgREVCVUcgKChERUJVR19JTkZPLCAiQ3B1aWQo Ny8wKToNCj4gPiAlMDh4LyUwOHgvJTA4eC8lMDh4XG4iLCBSZWdFYXgsIFJlZ0VieCwgUmVnRWN4 LA0KPiA+IFJlZ0VkeCkpOw0KPiA+ID4+PiArICAgIGlmICgoUmVnRWN4ICYgQklUMTYpICE9IDAp IHsNCj4gPiA+Pg0KPiA+ID4+ICgxKSBXb3VsZCBpdCBiZSBwb3NzaWJsZSB0byB1c2UgbWFjcm8g bmFtZXMgaGVyZSwNCj4gPiBmb3IgSW5kZXggYW5kDQo+ID4gPj4gU3ViSW5kZXggaW4gQXNtQ3B1 aWRFeCgpLCBhbmQgYSAiYmV0dGVyIiBtYWNybyBuYW1lDQo+ID4gdGhhbiBCSVQxNiwgaW4gdGhl IFJlZ0VjeCBjaGVjaz8NCj4gPiA+DQo+ID4gPiBUaGVyZSBhcmUgbWFjcm9zIHdoaWNoIGFyZSBk ZWZpbmVkIGluIFVlZmlDcHVQa2cgZm9yDQo+ID4gdGhlIENQVUlEIGxlYWYNCj4gPiA+IGZ1bmN0 aW9ucyBhbmQgc3RydWN0dXJlcyBmb3IgdGhlIENQVUlEIG91dHB1dCBkYXRhLg0KPiA+ID4gQnV0 IHNpbmNlIHRoZXJlIGlzIHJ1bGUgdGhhdCBNZGVNb2R1bGVQa2cgY2Fubm90DQo+ID4gZGVwZW5k IG9uIFVlZmlDcHVQa2cNCj4gPiA+IHNvIHRoZSBjb2RlIGNhbm5vdCB1c2UgdGhvc2UgbWFjcm9z L3N0cnVjdHVyZXMuDQo+ID4gPg0KPiA+ID4gSSBhbSB0aGlua2luZyBvZiBhIG5ldyBydWxlIHRo YXQgVWVmaUNwdVBrZyBhbmQNCj4gPiBNZGVNb2R1bGVQa2cgY2FuIGRlcGVuZCBvbiBlYWNoIG90 aGVyLg0KPiA+ID4gSSBoYXZlbid0IHRhbGtlZCB3aXRoIE1pa2Ugb24gdGhpcy4gTm90IHN1cmUg aWYgaGUgaXMNCj4gPiBvayBvbiB0aGlzLg0KPiA+ID4gRm9yIHRoaXMgY2FzZSwgeWVzIEkgY2Fu IHRlbXBvcmFyeSBkZWZpbmUgMiBtYWNyb3M6DQo+ID4gb25lIGZvciAweDcsIHRoZSBvdGhlciBm b3IgQklUMTYuDQo+ID4NCj4gPiBJJ20gYXdhcmUgb2YgdGhpcyByZXN0cmljdGlvbi4gSSB0aGlu ayBpdCdzIGEgZ29vZCBvbmU7DQo+ID4gcGVyc29uYWxseSBJIHdvdWxkbid0IGxpa2UgTWRlTW9k dWxlUGtnIHRvIGRlcGVuZCBvbg0KPiA+IFVlZmlDcHVQa2cuIEZvciBleGFtcGxlLCB3aGlsZSBN ZGVNb2R1bGVQa2cgaXMgdmVyeQ0KPiA+IG5lY2Vzc2FyeSBmb3IgQUFSQ0g2NCBwbGF0Zm9ybXMs IFVlZmlDcHVQa2cgZG9lc24ndA0KPiA+IGFwcGVhciBuZWNlc3NhcnkgZm9yIEFBUkNINjQgcGxh dGZvcm1zLg0KPiA+DQo+ID4gSWYgYm90aCBNZGVNb2R1bGVQa2cgYW5kIFVlZmlDcHVQa2cgZGVw ZW5kIG9uIHN1Y2gNCj4gPiBtYWNyb3MsIHRoZW4gdGhlIG1hY3JvcyBzaG91bGQgYXJndWFibHkg YmUgZGVmaW5lZCBpbg0KPiA+ICJNZGVNb2R1bGVQa2cvSW5jbHVkZS9JbmR1c3RyeVN0YW5kYXJk Iiwgb3IgZXZlbg0KPiA+ICJNZGVQa2cvSW5jbHVkZS9JbmR1c3RyeVN0YW5kYXJkIi4gVGhlIHJl Z2lzdGVycyBhbmQNCj4gPiBiaXQtZmllbGRzIGNvbWUgZnJvbSBwdWJsaXNoZWQgaW5kdXN0cnkg c3BlY2lmaWNhdGlvbnMuDQo+ID4gKFB1Ymxpc2hlZCBieSBJbnRlbCA6KSApDQo+ID4NCj4gPiA+ Pj4gKyAgICAgIFBhZ2U1TGV2ZWxTdXBwb3J0ID0gVFJVRTsNCj4gPiA+Pj4gKyAgICB9DQo+ID4g Pj4+ICsgIH0NCj4gPiA+Pj4gKw0KPiA+ID4+PiArICBERUJVRyAoKERFQlVHX0lORk8sDQo+ID4g IkFkZHJlc3NCaXRzLzVMZXZlbFBhZ2luZy8xR1BhZ2UgPQ0KPiA+ID4+PiArICVkLyVkLyVkXG4i LCBQaHlzaWNhbEFkZHJlc3NCaXRzLA0KPiA+IFBhZ2U1TGV2ZWxTdXBwb3J0LA0KPiA+ID4+IFBh Z2UxR1N1cHBvcnQpKTsNCj4gPiA+Pj4gKw0KPiA+ID4+DQo+ID4gPj4gKDIpIENhbiB3ZSBmb3Jt YXQgdGhpcyBsb2cgbWVzc2FnZSBhczoNCj4gPiA+Pg0KPiA+ID4+ICAgQWRkcmVzc0JpdHM9JWQg NUxldmVsUGFnaW5nPSVkIDFHUGFnZT0lZA0KPiA+ID4NCj4gPiA+IG9rLg0KPiA+ID4NCj4gPiA+ Pg0KPiA+ID4+ID8NCj4gPiA+Pg0KPiA+ID4+PiAgICAvLw0KPiA+ID4+PiAtICAvLyBJQS0zMmUg cGFnaW5nIHRyYW5zbGF0ZXMgNDgtYml0IGxpbmVhcg0KPiA+IGFkZHJlc3NlcyB0byA1Mi1iaXQg cGh5c2ljYWwgYWRkcmVzc2VzLg0KPiA+ID4+PiArICAvLyBJQS0zMmUgcGFnaW5nIHRyYW5zbGF0 ZXMgNDgtYml0IGxpbmVhcg0KPiA+IGFkZHJlc3NlcyB0byA1Mi1iaXQNCj4gPiA+Pj4gKyBwaHlz aWNhbCBhZGRyZXNzZXMgIC8vICB3aGVuIDUtTGV2ZWwgUGFnaW5nIGlzDQo+ID4gZGlzYWJsZWQs ICAvLyAgZHVlDQo+ID4gPj4+ICsgdG8gZWl0aGVyIHVuc3VwcG9ydGVkIGJ5IEhXLCBvciBkaXNh YmxlZCBieSBQQ0QuDQo+ID4gPj4+ICAgIC8vDQo+ID4gPj4+ICAgIEFTU0VSVCAoUGh5c2ljYWxB ZGRyZXNzQml0cyA8PSA1Mik7DQo+ID4gPj4+IC0gIGlmIChQaHlzaWNhbEFkZHJlc3NCaXRzID4g NDgpIHsNCj4gPiA+Pj4gKyAgaWYgKCFQYWdlNUxldmVsU3VwcG9ydCAmJiBQaHlzaWNhbEFkZHJl c3NCaXRzID4NCj4gPiA0OCkgew0KPiA+ID4+PiAgICAgIFBoeXNpY2FsQWRkcmVzc0JpdHMgPSA0 ODsNCj4gPiA+Pj4gICAgfQ0KPiA+ID4+Pg0KPiA+ID4+PiAgICAvLw0KPiA+ID4+PiAgICAvLyBD YWxjdWxhdGUgdGhlIHRhYmxlIGVudHJpZXMgbmVlZGVkLg0KPiA+ID4+PiAgICAvLw0KPiA+ID4+ PiAtICBpZiAoUGh5c2ljYWxBZGRyZXNzQml0cyA8PSAzOSApIHsNCj4gPiA+Pj4gLSAgICBOdW1i ZXJPZlBtbDRFbnRyaWVzTmVlZGVkID0gMTsNCj4gPiA+Pj4gLSAgICBOdW1iZXJPZlBkcEVudHJp ZXNOZWVkZWQgPSAoVUlOVDMyKUxTaGlmdFU2NA0KPiA+ICgxLCAoUGh5c2ljYWxBZGRyZXNzQml0 cyAtIDMwKSk7DQo+ID4gPj4+IC0gIH0gZWxzZSB7DQo+ID4gPj4+IC0gICAgTnVtYmVyT2ZQbWw0 RW50cmllc05lZWRlZCA9IChVSU5UMzIpTFNoaWZ0VTY0DQo+ID4gKDEsIChQaHlzaWNhbEFkZHJl c3NCaXRzIC0gMzkpKTsNCj4gPiA+Pj4gLSAgICBOdW1iZXJPZlBkcEVudHJpZXNOZWVkZWQgPSA1 MTI7DQo+ID4gPj4+ICsgIE51bWJlck9mUG1sNUVudHJpZXNOZWVkZWQgPSAxOw0KPiA+ID4+PiAr ICBpZiAoUGh5c2ljYWxBZGRyZXNzQml0cyA+IDQ4KSB7DQo+ID4gPj4+ICsgICAgTnVtYmVyT2ZQ bWw1RW50cmllc05lZWRlZCA9IChVSU5UMzIpIExTaGlmdFU2NA0KPiA+ICgxLCBQaHlzaWNhbEFk ZHJlc3NCaXRzIC0gNDgpOw0KPiA+ID4+PiArICAgIFBoeXNpY2FsQWRkcmVzc0JpdHMgPSA0ODsN Cj4gPiA+Pj4gICAgfQ0KPiA+ID4+Pg0KPiA+ID4+PiArICBOdW1iZXJPZlBtbDRFbnRyaWVzTmVl ZGVkID0gMTsNCj4gPiA+Pj4gKyAgaWYgKFBoeXNpY2FsQWRkcmVzc0JpdHMgPiAzOSkgew0KPiA+ ID4+PiArICAgIE51bWJlck9mUG1sNEVudHJpZXNOZWVkZWQgPSAoVUlOVDMyKSBMU2hpZnRVNjQN Cj4gPiAoMSwgUGh5c2ljYWxBZGRyZXNzQml0cyAtIDM5KTsNCj4gPiA+Pj4gKyAgICBQaHlzaWNh bEFkZHJlc3NCaXRzID0gMzk7DQo+ID4gPj4+ICsgIH0NCj4gPiA+Pj4gKw0KPiA+ID4+PiArICBO dW1iZXJPZlBkcEVudHJpZXNOZWVkZWQgPSAxOw0KPiA+ID4+PiArICBBU1NFUlQgKFBoeXNpY2Fs QWRkcmVzc0JpdHMgPiAzMCk7DQo+ID4gTnVtYmVyT2ZQZHBFbnRyaWVzTmVlZGVkID0NCj4gPiA+ Pj4gKyAoVUlOVDMyKSBMU2hpZnRVNjQgKDEsIFBoeXNpY2FsQWRkcmVzc0JpdHMgLSAzMCk7DQo+ ID4gPj4+ICsNCj4gPiA+Pj4gICAgLy8NCj4gPiA+Pj4gICAgLy8gUHJlLWFsbG9jYXRlIGJpZyBw YWdlcyB0byBhdm9pZCBsYXRlcg0KPiA+IGFsbG9jYXRpb25zLg0KPiA+ID4+PiAgICAvLw0KPiA+ ID4+PiAgICBpZiAoIVBhZ2UxR1N1cHBvcnQpIHsNCj4gPiA+Pj4gLSAgICBUb3RhbFBhZ2VzTnVt ID0gKE51bWJlck9mUGRwRW50cmllc05lZWRlZCArIDEpDQo+ID4gKiBOdW1iZXJPZlBtbDRFbnRy aWVzTmVlZGVkICsgMTsNCj4gPiA+Pj4gKyAgICBUb3RhbFBhZ2VzTnVtID0gKChOdW1iZXJPZlBk cEVudHJpZXNOZWVkZWQgKw0KPiA+IDEpICoNCj4gPiA+Pj4gKyBOdW1iZXJPZlBtbDRFbnRyaWVz TmVlZGVkICsgMSkgKg0KPiA+IE51bWJlck9mUG1sNUVudHJpZXNOZWVkZWQNCj4gPiA+PiArIDE7 DQo+ID4gPj4+ICAgIH0gZWxzZSB7DQo+ID4gPj4+IC0gICAgVG90YWxQYWdlc051bSA9IE51bWJl ck9mUG1sNEVudHJpZXNOZWVkZWQgKyAxOw0KPiA+ID4+PiArICAgIFRvdGFsUGFnZXNOdW0gPSAo TnVtYmVyT2ZQbWw0RW50cmllc05lZWRlZCArDQo+ID4gMSkgKg0KPiA+ID4+PiArIE51bWJlck9m UG1sNUVudHJpZXNOZWVkZWQgKyAxOyAgfQ0KPiA+ID4+PiArDQo+ID4gPj4+ICsgIC8vDQo+ID4g Pj4+ICsgIC8vIFN1YnN0cmFjdCB0aGUgb25lIHBhZ2Ugb2NjdXBpZWQgYnkgUE1MNQ0KPiA+IGVu dHJpZXMgaWYgNS1MZXZlbCBQYWdpbmcgaXMgZGlzYWJsZWQuDQo+ID4gPj4+ICsgIC8vDQo+ID4g Pj4+ICsgIGlmICghUGFnZTVMZXZlbFN1cHBvcnQpIHsNCj4gPiA+Pj4gKyAgICBUb3RhbFBhZ2Vz TnVtLS07DQo+ID4gPj4+ICAgIH0NCj4gPiA+Pj4gKw0KPiA+ID4+PiArICBERUJVRyAoKERFQlVH X0lORk8sICJQbWw1L1BtbDQvUGRwL1RvdGFsUGFnZSA9DQo+ID4gJWQvJWQvJWQvJWRcbiIsDQo+ ID4gPj4+ICsgICAgTnVtYmVyT2ZQbWw1RW50cmllc05lZWRlZCwNCj4gPiBOdW1iZXJPZlBtbDRF bnRyaWVzTmVlZGVkLA0KPiA+ID4+PiArICAgIE51bWJlck9mUGRwRW50cmllc05lZWRlZCwgVG90 YWxQYWdlc051bSkpOw0KPiA+ID4+PiArDQo+ID4gPj4NCj4gPiA+PiAoMykgU2FtZSBjb21tZW50 IGFib3V0IGxvZyBtZXNzYWdlIGZvcm1hdHRpbmcgYXMgaW4NCj4gPiAoMikuDQo+ID4gPj4NCj4g PiA+PiAoNCkgUGxlYXNlIGxvZyBVSU5UMzIgdmFsdWVzIHdpdGggJXUsIG5vdCAlZC4NCj4gPiA+ Pg0KPiA+ID4+ICg1KSBQbGVhc2UgbG9nIFVJTlROIHZhbHVlcyB3aXRoICVMdSAoYW5kIGNhc3Qg dGhlbQ0KPiA+IHRvIFVJTlQ2NCBmaXJzdCkuDQo+ID4gPg0KPiA+ID4NCj4gPiA+IG9rIHRvIGFi b3ZlIDMsIDQsIDUuDQo+ID4gPg0KPiA+ID4+DQo+ID4gPj4gKDYpIE1vcmUgZ2VuZXJhbGx5LCBj YW4gd2UgcGxlYXNlIHJlcGxhY2UgdGhpcyBwYXRjaA0KPiA+IHdpdGggdGhyZWUNCj4gPiA+PiBw YXRjaGVzLCBpbiB0aGUgc2VyaWVzPw0KPiA+ID4+DQo+ID4gPj4gLSB0aGUgZmlyc3QgcGF0Y2gg c2hvdWxkIGV4dHJhY3QgdGhlIFRvdGFsUGFnZXNOdW0NCj4gPiBjYWxjdWxhdGlvbiB0byBhDQo+ ID4gPj4gc2VwYXJhdGUgKmxpYnJhcnkqIGZ1bmN0aW9uIChpdCBzaG91bGQgYmUgYSBwdWJsaWMN Cj4gPiBmdW5jdGlvbiBpbiBhIEJBU0UNCj4gPiA+PiBvciBQRUlNIGxpYnJhcnkpDQo+ID4gPj4N Cj4gPiA+PiAtIHRoZSBzZWNvbmQgcGF0Y2ggc2hvdWxkIGV4dGVuZCB0aGUgVG90YWxQYWdlc051 bQ0KPiA+IGNhbGN1bGF0aW9uIGluIHRoZQ0KPiA+ID4+IGxpYnJhcnkgZnVuY3Rpb24gdG8gNS1s ZXZlbCBwYWdpbmcNCj4gPiA+Pg0KPiA+ID4+IC0gdGhlIHRoaXJkIHBhdGNoIHNob3VsZCBiZSB0 aGUgcmVtYWluaW5nIGNvZGUgZnJvbQ0KPiA+IHRoZSBwcmVzZW50IHBhdGNoLg0KPiA+ID4+DQo+ ID4gPj4gSGVyZSdzIHdoeTogaW4gT3ZtZlBrZy9QbGF0Zm9ybVBlaSwgdGhlDQo+ID4gR2V0UGVp TWVtb3J5Q2FwKCkgZnVuY3Rpb24NCj4gPiA+PiBkdXBsaWNhdGVzIHRoaXMgY2FsY3VsYXRpb24u IEluIE9WTUYsIFBFSS1waGFzZQ0KPiA+IG1lbW9yeSBhbGxvY2F0aW9ucw0KPiA+ID4+IGNhbiBi ZSBkb21pbmF0ZWQgYnkgdGhlIHBhZ2UgdGFibGVzIGJ1aWx0IGZvciA2NC1iaXQNCj4gPiBEWEUs IGFuZCBzbw0KPiA+ID4+IE92bWZQa2cvUGxhdGZvcm1QZWkgbXVzdCBrbm93LCBmb3Igc2l6aW5n IHRoZQ0KPiA+IHBlcm1hbmVudCBQRUkgUkFNLCBob3cNCj4gPiA+PiBtdWNoIFJBTSB0aGUgRFhF IElQTCBQRUlNIHdpbGwgbmVlZCBmb3IgdGhvc2UgcGFnZQ0KPiA+IHRhYmxlcy4NCj4gPiA+Pg0K PiA+ID4+IEkgd291bGQgKnJlYWxseSogZGlzbGlrZSBjb3B5aW5nIHRoaXMgdXBkYXRlIChmb3Ig NS0NCj4gPiBsZXZlbCBwYWdpbmcpDQo+ID4gPj4gZnJvbQ0KPiA+ID4+IENyZWF0ZUlkZW50aXR5 TWFwcGluZ1BhZ2VUYWJsZXMoKSB0bw0KPiA+IEdldFBlaU1lbW9yeUNhcCgpLiBJbnN0ZWFkLCB0 aGUNCj4gPiA+PiBjYWxjdWxhdGlvbiBzaG91bGQgYmUgZXh0cmFjdGVkIHRvIGEgbGlicmFyeQ0K PiA+IGZ1bmN0aW9uLCBhbmQgdGhlbiBPVk1GDQo+ID4gPj4gKGFuZCBhbGwgb3RoZXIgcGxhdGZv cm1zIGFmZmVjdGVkIHNpbWlsYXJseSkgY291bGQNCj4gPiBjYWxsIHRoZSBuZXcgZnVuY3Rpb24u DQo+ID4gPj4NCj4gPiA+PiBJZiB0aGlzIGlzIG5vdCBmZWFzaWJsZSBvciB2ZXJ5IG11Y2ggb3V0 IG9mIHNjb3BlLA0KPiA+IHRoZW4gSSBndWVzcyB3ZSdsbA0KPiA+ID4+IGp1c3Qga2VlcCB0aGUg UENEIGFzIEZBTFNFIGluIE9WTUYsIGZvciB0aGUgdGltZQ0KPiA+IGJlaW5nLg0KPiA+ID4+DQo+ ID4gPg0KPiA+ID4gQlogaHR0cHM6Ly9idWd6aWxsYS50aWFub2NvcmUub3JnL3Nob3dfYnVnLmNn aT9pZD04NDcNCj4gPiBtYXkgYmUgd2hhdCB5b3UNCj4gPiA+IG5lZWQuDQo+ID4NCj4gPiBPaCwg aW5kZWVkLiBJJ20gc3Vic2NyaWJlZCB0byB0aGlzIEJaLCBidXQgdGhlIGxhc3QNCj4gPiB1cGRh dGUgd2FzIGluIEphbg0KPiA+IDIwMTggOikNCj4gPg0KPiA+ID4gRXh0cmFjdGluZyBhIGxpYnJh cnkgQVBJIHRvIHJldHVybiBob3cgbWFueSBwYWdlcyBhcmUNCj4gPiBuZWVkZWQgZm9yIHBhZ2UN Cj4gPiA+IHRhYmxlcyBuZWVkcyB0byBjb25zaWRlciBzZXZlcmFsIGNhc2VzOg0KPiA+ID4gMS4g NEsgb3IgMk0gb3IgMUcgcGFnZSBzaXplIGlzIHVzZWQuDQo+ID4gPiAyLiByYW5nZSBvZiBwaHlz aWNhbCBtZW1vcnkNCj4gPiA+IDMuIHBhZ2UgdGFibGUgbGV2ZWwNCj4gPiA+DQo+ID4gPiBCdXQg cmlnaHQgbm93LCB0aGlzIGlzIG5vdCBpbiB0aGUgaGlnaCBwcmlvcml0eSBpbiBteQ0KPiA+IHRv LWRvIGxpc3QuDQo+ID4gPiBJIGNhbiBoZWxwIHRvIGNoYW5nZSBHZXRQZWlNZW1vcnlDYXAoKSBm b3Igc2hvcnQtdGVybQ0KPiA+IG5lZWRzLg0KPiA+ID4gQXJlIHlvdSBvayB3aXRoIHRoaXM/DQo+ ID4NCj4gPiBObywgSSdtIG5vdC4NCj4gPg0KPiA+IE9idmlvdXNseSwgSSdtIG5vdCB0cnlpbmcg dG8gZm9yY2UgeW91IHRvIGFic3RyYWN0IG91dA0KPiA+IHRoZSBsaWJyYXJ5IGluIHF1ZXN0aW9u LCBqdXN0IGZvciBPVk1GJ3Mgc2FrZS4gV2hhdCBJJ20NCj4gPiBzYXlpbmcgaXMgdGhhdCBJIHN0 cm9uZ2x5IHByZWZlciBkZWxheWluZyA1LWxldmVsDQo+ID4gcGFnaW5nIHN1cHBvcnQgaW4gT1ZN RiB1bnRpbCB0aGlzIGxpYnJhcnkgYmVjb21lcw0KPiA+IGF2YWlsYWJsZSwgb3ZlciBkdXBsaWNh dGluZyB5ZXQgbW9yZSBjb2RlIChhbmQgY29tcGxleA0KPiA+IGNvZGUsIGF0DQo+ID4gdGhhdCkg ZnJvbSBvdGhlciBQYWNrYWdlcyB0byBPdm1mUGtnLiBGcm9tIHRoYXQNCj4gPiBwZXJzcGVjdGl2 ZSwgSSBhcHByZWNpYXRlIHRoZSBuZXcgUENEIHZlcnkgbXVjaCwNCj4gPiBiZWNhdXNlIGl0IHNo b3VsZCBtYWtlIHRoaXMgcG9zdHBvbmluZyBlYXN5Lg0KPiA+DQo+ID4gSW4gb3RoZXIgd29yZHMs IHRoZXJlIGlzIG5vIHNob3J0LXRlcm0gbmVlZC4NCj4gPg0KPiA+IFRoYW5rIHlvdSENCj4gPiBM YXN6bG8NCj4gPg0KPiA+IA0KDQo=