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.115, mailfrom: ray.ni@intel.com) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by groups.io with SMTP; Tue, 23 Jul 2019 08:29:43 -0700 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 23 Jul 2019 08:29:43 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.64,299,1559545200"; d="scan'208";a="171196042" Received: from fmsmsx104.amr.corp.intel.com ([10.18.124.202]) by fmsmga007.fm.intel.com with ESMTP; 23 Jul 2019 08:29:43 -0700 Received: from fmsmsx123.amr.corp.intel.com (10.18.125.38) by fmsmsx104.amr.corp.intel.com (10.18.124.202) with Microsoft SMTP Server (TLS) id 14.3.439.0; Tue, 23 Jul 2019 08:29:43 -0700 Received: from shsmsx107.ccr.corp.intel.com (10.239.4.96) by fmsmsx123.amr.corp.intel.com (10.18.125.38) with Microsoft SMTP Server (TLS) id 14.3.439.0; Tue, 23 Jul 2019 08:29:42 -0700 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.110]) by SHSMSX107.ccr.corp.intel.com ([169.254.9.162]) with mapi id 14.03.0439.000; Tue, 23 Jul 2019 23:29:40 +0800 From: "Ni, Ray" To: "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 Date: Tue, 23 Jul 2019 15:29:40 +0000 Message-ID: <734D49CCEBEEF84792F5B80ED585239D5C2417DB@SHSMSX104.ccr.corp.intel.com> References: <20190722081547.56100-1-ray.ni@intel.com> <20190722081547.56100-5-ray.ni@intel.com> In-Reply-To: Accept-Language: en-US, zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiYzJmM2RmY2YtNTk1OS00ODllLTk5NzAtYWEwMjExYTc1ZThjIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiUEhEVWFhOHltZ29HODRzSWVDYXhsNmU5M1hPXC80ZUFMWVdzaVBhc3doZnJoTWluVW9leEZxdUVlWHpJZEpcL2JMIn0= 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 DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogZGV2ZWxAZWRrMi5ncm91 cHMuaW8gPGRldmVsQGVkazIuZ3JvdXBzLmlvPiBPbiBCZWhhbGYgT2YgTGFzemxvIEVyc2VrDQo+ IFNlbnQ6IFR1ZXNkYXksIEp1bHkgMjMsIDIwMTkgNTo0NiBQTQ0KPiBUbzogZGV2ZWxAZWRrMi5n cm91cHMuaW87IE5pLCBSYXkgPHJheS5uaUBpbnRlbC5jb20+DQo+IENjOiBEb25nLCBFcmljIDxl cmljLmRvbmdAaW50ZWwuY29tPg0KPiBTdWJqZWN0OiBSZTogW2VkazItZGV2ZWxdIFtQQVRDSCA0 LzRdIE1kZU1vZHVsZVBrZy9EeGVJcGw6IENyZWF0ZSA1LWxldmVsIHBhZ2UgdGFibGUgZm9yIGxv bmcgbW9kZQ0KPiANCj4gT24gMDcvMjIvMTkgMTA6MTUsIE5pLCBSYXkgd3JvdGU6DQo+ID4gUkVG OiBodHRwczovL2J1Z3ppbGxhLnRpYW5vY29yZS5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDgNCj4g Pg0KPiA+IER4ZUlwbCBpcyByZXNwb25zaWJsZSB0byBjcmVhdGUgcGFnZSB0YWJsZSBmb3IgRFhF IHBoYXNlIHJ1bm5pbmcNCj4gPiBlaXRoZXIgaW4gbG9uZyBtb2RlIG9yIGluIDMyYml0IG1vZGUg d2l0aCBjZXJ0YWluIHByb3RlY3Rpb24NCj4gPiBtZWNoYW5pc20gZW5hYmxlZCAocmVmZXIgdG8g VG9CdWlsZFBhZ2VUYWJsZSgpKS4NCj4gPg0KPiA+IFRoZSBwYXRjaCB1cGRhdGVzIER4ZUlwbCB0 byBjcmVhdGUgNS1sZXZlbCBwYWdlIHRhYmxlIGZvciBEWEUgcGhhc2UNCj4gPiBydW5uaW5nIGlu IGxvbmcgbW9kZSB3aGVuIFBjZFVzZTVMZXZlbFBhZ2VUYWJsZSBpcyBUUlVFIGFuZCBDUFUNCj4g PiBzdXBwb3J0cyA1LWxldmVsIHBhZ2UgdGFibGUuDQo+ID4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBS YXkgTmkgPHJheS5uaUBpbnRlbC5jb20+DQo+ID4gQ2M6IEVyaWMgRG9uZyA8ZXJpYy5kb25nQGlu dGVsLmNvbT4NCj4gPiBDYzogTGFzemxvIEVyc2VrIDxsZXJzZWtAcmVkaGF0LmNvbT4NCj4gPiAt LS0NCj4gPiAgTWRlTW9kdWxlUGtnL0NvcmUvRHhlSXBsUGVpbS9EeGVJcGwuaW5mICAgICAgIHwg ICAxICsNCj4gPiAgLi4uL0NvcmUvRHhlSXBsUGVpbS9YNjQvVmlydHVhbE1lbW9yeS5jICAgICAg IHwgMjI3ICsrKysrKysrKysrKy0tLS0tLQ0KPiA+ICAyIGZpbGVzIGNoYW5nZWQsIDE1MSBpbnNl cnRpb25zKCspLCA3NyBkZWxldGlvbnMoLSkNCj4gPg0KPiA+IGRpZmYgLS1naXQgYS9NZGVNb2R1 bGVQa2cvQ29yZS9EeGVJcGxQZWltL0R4ZUlwbC5pbmYgYi9NZGVNb2R1bGVQa2cvQ29yZS9EeGVJ cGxQZWltL0R4ZUlwbC5pbmYNCj4gPiBpbmRleCBhYmMzMjE3YjAxLi45OGJjMTdmYzlkIDEwMDY0 NA0KPiA+IC0tLSBhL01kZU1vZHVsZVBrZy9Db3JlL0R4ZUlwbFBlaW0vRHhlSXBsLmluZg0KPiA+ ICsrKyBiL01kZU1vZHVsZVBrZy9Db3JlL0R4ZUlwbFBlaW0vRHhlSXBsLmluZg0KPiA+IEBAIC0x MTAsNiArMTEwLDcgQEAgW1BjZC5JQTMyLFBjZC5YNjRdDQo+ID4gICAgZ0VmaU1kZU1vZHVsZVBr Z1Rva2VuU3BhY2VHdWlkLlBjZE51bGxQb2ludGVyRGV0ZWN0aW9uUHJvcGVydHlNYXNrICAgICMj IENPTlNVTUVTDQo+ID4gICAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZEhlYXBH dWFyZFByb3BlcnR5TWFzayAgICAgICAgICAgICAgICMjIENPTlNVTUVTDQo+ID4gICAgZ0VmaU1k ZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZENwdVN0YWNrR3VhcmQgICAgICAgICAgICAgICAg ICAgICAgICMjIENPTlNVTUVTDQo+ID4gKyAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlk LlBjZFVzZTVMZXZlbFBhZ2VUYWJsZSAgICAgICAgICAgICAgICAgICMjIFNPTUVUSU1FU19DT05T VU1FUw0KPiA+DQo+ID4gIFtQY2QuSUEzMixQY2QuWDY0LFBjZC5BUk0sUGNkLkFBUkNINjRdDQo+ ID4gICAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZFNldE54Rm9yU3RhY2sgICAg ICAgICAgICAgICAjIyBTT01FVElNRVNfQ09OU1VNRVMNCj4gPiBkaWZmIC0tZ2l0IGEvTWRlTW9k dWxlUGtnL0NvcmUvRHhlSXBsUGVpbS9YNjQvVmlydHVhbE1lbW9yeS5jIGIvTWRlTW9kdWxlUGtn L0NvcmUvRHhlSXBsUGVpbS9YNjQvVmlydHVhbE1lbW9yeS5jDQo+ID4gaW5kZXggZWRjMzhlNDUy NS4uYTViY2RjYzczNCAxMDA2NDQNCj4gPiAtLS0gYS9NZGVNb2R1bGVQa2cvQ29yZS9EeGVJcGxQ ZWltL1g2NC9WaXJ0dWFsTWVtb3J5LmMNCj4gPiArKysgYi9NZGVNb2R1bGVQa2cvQ29yZS9EeGVJ cGxQZWltL1g2NC9WaXJ0dWFsTWVtb3J5LmMNCj4gPiBAQCAtMTUsNyArMTUsNyBAQA0KPiA+ICAg ICAgMikgSUEtMzIgSW50ZWwoUikgQXJjaGl0ZWN0dXJlIFNvZnR3YXJlIERldmVsb3BlcidzIE1h bnVhbCBWb2x1bWUgMjpJbnN0cnVjdGlvbiBTZXQgUmVmZXJlbmNlLCBJbnRlbA0KPiA+ICAgICAg MykgSUEtMzIgSW50ZWwoUikgQXJjaGl0ZWN0dXJlIFNvZnR3YXJlIERldmVsb3BlcidzIE1hbnVh bCBWb2x1bWUgMzpTeXN0ZW0gUHJvZ3JhbW1lcidzIEd1aWRlLCBJbnRlbA0KPiA+DQo+ID4gLUNv cHlyaWdodCAoYykgMjAwNiAtIDIwMTgsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJl c2VydmVkLjxCUj4NCj4gPiArQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAxOSwgSW50ZWwgQ29ycG9y YXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiA+ICBDb3B5cmlnaHQgKGMpIDIwMTcs IEFNRCBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiA+DQo+ID4gIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4gQEAgLTYyNiwx NCArNjI2LDE5IEBAIENyZWF0ZUlkZW50aXR5TWFwcGluZ1BhZ2VUYWJsZXMgKA0KPiA+ICAgICkN Cj4gPiAgew0KPiA+ICAgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBSZWdFYXg7DQo+ID4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFJlZ0VieDsNCj4gPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUmVnRWN4Ow0KPiA+ICAgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBSZWdFZHg7DQo+ID4gICAgVUlOVDggICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFBoeXNpY2FsQWRkcmVzc0JpdHM7DQo+ID4gICAgRUZJ X1BIWVNJQ0FMX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgIFBhZ2VBZGRyZXNzOw0K PiA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRl eE9mUG1sNUVudHJpZXM7DQo+ID4gICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEluZGV4T2ZQbWw0RW50cmllczsNCj4gPiAgICBVSU5UTiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXhPZlBkcEVudHJpZXM7DQo+ID4gICAg VUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4T2ZQYWdl RGlyZWN0b3J5RW50cmllczsNCj4gPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTnVtYmVyT2ZQbWw1RW50cmllc05lZWRlZDsNCj4gPiAgICBVSU5UMzIg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyT2ZQbWw0RW50cmll c05lZWRlZDsNCj4gPiAgICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTnVtYmVyT2ZQZHBFbnRyaWVzTmVlZGVkOw0KPiA+ICsgIFBBR0VfTUFQX0FORF9ESVJF Q1RPUllfUE9JTlRFUiAgICAgICAgICAgICAgICAqUGFnZU1hcExldmVsNUVudHJ5Ow0KPiA+ICAg IFBBR0VfTUFQX0FORF9ESVJFQ1RPUllfUE9JTlRFUiAgICAgICAgICAgICAgICAqUGFnZU1hcExl dmVsNEVudHJ5Ow0KPiA+ICAgIFBBR0VfTUFQX0FORF9ESVJFQ1RPUllfUE9JTlRFUiAgICAgICAg ICAgICAgICAqUGFnZU1hcDsNCj4gPiAgICBQQUdFX01BUF9BTkRfRElSRUNUT1JZX1BPSU5URVIg ICAgICAgICAgICAgICAgKlBhZ2VEaXJlY3RvcnlQb2ludGVyRW50cnk7DQo+ID4gQEAgLTY0MSw5 ICs2NDYsMTEgQEAgQ3JlYXRlSWRlbnRpdHlNYXBwaW5nUGFnZVRhYmxlcyAoDQo+ID4gICAgVUlO VE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvdGFsUGFnZXNOdW07 DQo+ID4gICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJp Z1BhZ2VBZGRyZXNzOw0KPiA+ICAgIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqSG9iOw0KPiA+ICsgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQYWdlNUxldmVsU3VwcG9ydDsNCj4gPiAgICBCT09MRUFOICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFnZTFHU3VwcG9ydDsNCj4gPiAgICBQQUdF X1RBQkxFXzFHX0VOVFJZICAgICAgICAgICAgICAgICAgICAgICAgICAgKlBhZ2VEaXJlY3Rvcnkx R0VudHJ5Ow0KPiA+ICAgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBBZGRyZXNzRW5jTWFzazsNCj4gPiArICBJQTMyX0NSNCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQ3I0Ow0KPiA+DQo+ID4gICAgLy8NCj4gPiAgICAvLyBNYWtlIHN1 cmUgQWRkcmVzc0VuY01hc2sgaXMgY29udGFpbmVkIHRvIHNtYWxsZXN0IHN1cHBvcnRlZCBhZGRy ZXNzIGZpZWxkDQo+ID4gQEAgLTY3NywzMyArNjg0LDY2IEBAIENyZWF0ZUlkZW50aXR5TWFwcGlu Z1BhZ2VUYWJsZXMgKA0KPiA+ICAgICAgfQ0KPiA+ICAgIH0NCj4gPg0KPiA+ICsgIFBhZ2U1TGV2 ZWxTdXBwb3J0ID0gRkFMU0U7DQo+ID4gKyAgaWYgKFBjZEdldEJvb2wgKFBjZFVzZTVMZXZlbFBh Z2VUYWJsZSkpIHsNCj4gPiArICAgIEFzbUNwdWlkRXggKDB4NywgMCwgJlJlZ0VheCwgJlJlZ0Vi eCwgJlJlZ0VjeCwgJlJlZ0VkeCk7DQo+ID4gKyAgICBERUJVRyAoKERFQlVHX0lORk8sICJDcHVp ZCg3LzApOiAlMDh4LyUwOHgvJTA4eC8lMDh4XG4iLCBSZWdFYXgsIFJlZ0VieCwgUmVnRWN4LCBS ZWdFZHgpKTsNCj4gPiArICAgIGlmICgoUmVnRWN4ICYgQklUMTYpICE9IDApIHsNCj4gDQo+ICgx KSBXb3VsZCBpdCBiZSBwb3NzaWJsZSB0byB1c2UgbWFjcm8gbmFtZXMgaGVyZSwgZm9yIEluZGV4 IGFuZCBTdWJJbmRleA0KPiBpbiBBc21DcHVpZEV4KCksIGFuZCBhICJiZXR0ZXIiIG1hY3JvIG5h bWUgdGhhbiBCSVQxNiwgaW4gdGhlIFJlZ0VjeCBjaGVjaz8NCg0KVGhlcmUgYXJlIG1hY3JvcyB3 aGljaCBhcmUgZGVmaW5lZCBpbiBVZWZpQ3B1UGtnIGZvciB0aGUgQ1BVSUQgbGVhZiBmdW5jdGlv bnMNCmFuZCBzdHJ1Y3R1cmVzIGZvciB0aGUgQ1BVSUQgb3V0cHV0IGRhdGEuDQpCdXQgc2luY2Ug dGhlcmUgaXMgcnVsZSB0aGF0IE1kZU1vZHVsZVBrZyBjYW5ub3QgZGVwZW5kIG9uIFVlZmlDcHVQ a2cgc28NCnRoZSBjb2RlIGNhbm5vdCB1c2UgdGhvc2UgbWFjcm9zL3N0cnVjdHVyZXMuDQoNCkkg YW0gdGhpbmtpbmcgb2YgYSBuZXcgcnVsZSB0aGF0IFVlZmlDcHVQa2cgYW5kIE1kZU1vZHVsZVBr ZyBjYW4gZGVwZW5kIG9uIGVhY2ggb3RoZXIuDQpJIGhhdmVuJ3QgdGFsa2VkIHdpdGggTWlrZSBv biB0aGlzLiBOb3Qgc3VyZSBpZiBoZSBpcyBvayBvbiB0aGlzLg0KRm9yIHRoaXMgY2FzZSwgeWVz IEkgY2FuIHRlbXBvcmFyeSBkZWZpbmUgMiBtYWNyb3M6IG9uZSBmb3IgMHg3LCB0aGUgb3RoZXIg Zm9yIEJJVDE2Lg0KDQoNCj4gDQo+ID4gKyAgICAgIFBhZ2U1TGV2ZWxTdXBwb3J0ID0gVFJVRTsN Cj4gPiArICAgIH0NCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIERFQlVHICgoREVCVUdfSU5GTywg IkFkZHJlc3NCaXRzLzVMZXZlbFBhZ2luZy8xR1BhZ2UgPSAlZC8lZC8lZFxuIiwgUGh5c2ljYWxB ZGRyZXNzQml0cywgUGFnZTVMZXZlbFN1cHBvcnQsDQo+IFBhZ2UxR1N1cHBvcnQpKTsNCj4gPiAr DQo+IA0KPiAoMikgQ2FuIHdlIGZvcm1hdCB0aGlzIGxvZyBtZXNzYWdlIGFzOg0KPiANCj4gICBB ZGRyZXNzQml0cz0lZCA1TGV2ZWxQYWdpbmc9JWQgMUdQYWdlPSVkDQoNCm9rLg0KDQo+IA0KPiA/ DQo+IA0KPiA+ICAgIC8vDQo+ID4gLSAgLy8gSUEtMzJlIHBhZ2luZyB0cmFuc2xhdGVzIDQ4LWJp dCBsaW5lYXIgYWRkcmVzc2VzIHRvIDUyLWJpdCBwaHlzaWNhbCBhZGRyZXNzZXMuDQo+ID4gKyAg Ly8gSUEtMzJlIHBhZ2luZyB0cmFuc2xhdGVzIDQ4LWJpdCBsaW5lYXIgYWRkcmVzc2VzIHRvIDUy LWJpdCBwaHlzaWNhbCBhZGRyZXNzZXMNCj4gPiArICAvLyAgd2hlbiA1LUxldmVsIFBhZ2luZyBp cyBkaXNhYmxlZCwNCj4gPiArICAvLyAgZHVlIHRvIGVpdGhlciB1bnN1cHBvcnRlZCBieSBIVywg b3IgZGlzYWJsZWQgYnkgUENELg0KPiA+ICAgIC8vDQo+ID4gICAgQVNTRVJUIChQaHlzaWNhbEFk ZHJlc3NCaXRzIDw9IDUyKTsNCj4gPiAtICBpZiAoUGh5c2ljYWxBZGRyZXNzQml0cyA+IDQ4KSB7 DQo+ID4gKyAgaWYgKCFQYWdlNUxldmVsU3VwcG9ydCAmJiBQaHlzaWNhbEFkZHJlc3NCaXRzID4g NDgpIHsNCj4gPiAgICAgIFBoeXNpY2FsQWRkcmVzc0JpdHMgPSA0ODsNCj4gPiAgICB9DQo+ID4N Cj4gPiAgICAvLw0KPiA+ICAgIC8vIENhbGN1bGF0ZSB0aGUgdGFibGUgZW50cmllcyBuZWVkZWQu DQo+ID4gICAgLy8NCj4gPiAtICBpZiAoUGh5c2ljYWxBZGRyZXNzQml0cyA8PSAzOSApIHsNCj4g PiAtICAgIE51bWJlck9mUG1sNEVudHJpZXNOZWVkZWQgPSAxOw0KPiA+IC0gICAgTnVtYmVyT2ZQ ZHBFbnRyaWVzTmVlZGVkID0gKFVJTlQzMilMU2hpZnRVNjQgKDEsIChQaHlzaWNhbEFkZHJlc3NC aXRzIC0gMzApKTsNCj4gPiAtICB9IGVsc2Ugew0KPiA+IC0gICAgTnVtYmVyT2ZQbWw0RW50cmll c05lZWRlZCA9IChVSU5UMzIpTFNoaWZ0VTY0ICgxLCAoUGh5c2ljYWxBZGRyZXNzQml0cyAtIDM5 KSk7DQo+ID4gLSAgICBOdW1iZXJPZlBkcEVudHJpZXNOZWVkZWQgPSA1MTI7DQo+ID4gKyAgTnVt YmVyT2ZQbWw1RW50cmllc05lZWRlZCA9IDE7DQo+ID4gKyAgaWYgKFBoeXNpY2FsQWRkcmVzc0Jp dHMgPiA0OCkgew0KPiA+ICsgICAgTnVtYmVyT2ZQbWw1RW50cmllc05lZWRlZCA9IChVSU5UMzIp IExTaGlmdFU2NCAoMSwgUGh5c2ljYWxBZGRyZXNzQml0cyAtIDQ4KTsNCj4gPiArICAgIFBoeXNp Y2FsQWRkcmVzc0JpdHMgPSA0ODsNCj4gPiAgICB9DQo+ID4NCj4gPiArICBOdW1iZXJPZlBtbDRF bnRyaWVzTmVlZGVkID0gMTsNCj4gPiArICBpZiAoUGh5c2ljYWxBZGRyZXNzQml0cyA+IDM5KSB7 DQo+ID4gKyAgICBOdW1iZXJPZlBtbDRFbnRyaWVzTmVlZGVkID0gKFVJTlQzMikgTFNoaWZ0VTY0 ICgxLCBQaHlzaWNhbEFkZHJlc3NCaXRzIC0gMzkpOw0KPiA+ICsgICAgUGh5c2ljYWxBZGRyZXNz Qml0cyA9IDM5Ow0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgTnVtYmVyT2ZQZHBFbnRyaWVzTmVl ZGVkID0gMTsNCj4gPiArICBBU1NFUlQgKFBoeXNpY2FsQWRkcmVzc0JpdHMgPiAzMCk7DQo+ID4g KyAgTnVtYmVyT2ZQZHBFbnRyaWVzTmVlZGVkID0gKFVJTlQzMikgTFNoaWZ0VTY0ICgxLCBQaHlz aWNhbEFkZHJlc3NCaXRzIC0gMzApOw0KPiA+ICsNCj4gPiAgICAvLw0KPiA+ICAgIC8vIFByZS1h bGxvY2F0ZSBiaWcgcGFnZXMgdG8gYXZvaWQgbGF0ZXIgYWxsb2NhdGlvbnMuDQo+ID4gICAgLy8N Cj4gPiAgICBpZiAoIVBhZ2UxR1N1cHBvcnQpIHsNCj4gPiAtICAgIFRvdGFsUGFnZXNOdW0gPSAo TnVtYmVyT2ZQZHBFbnRyaWVzTmVlZGVkICsgMSkgKiBOdW1iZXJPZlBtbDRFbnRyaWVzTmVlZGVk ICsgMTsNCj4gPiArICAgIFRvdGFsUGFnZXNOdW0gPSAoKE51bWJlck9mUGRwRW50cmllc05lZWRl ZCArIDEpICogTnVtYmVyT2ZQbWw0RW50cmllc05lZWRlZCArIDEpICogTnVtYmVyT2ZQbWw1RW50 cmllc05lZWRlZA0KPiArIDE7DQo+ID4gICAgfSBlbHNlIHsNCj4gPiAtICAgIFRvdGFsUGFnZXNO dW0gPSBOdW1iZXJPZlBtbDRFbnRyaWVzTmVlZGVkICsgMTsNCj4gPiArICAgIFRvdGFsUGFnZXNO dW0gPSAoTnVtYmVyT2ZQbWw0RW50cmllc05lZWRlZCArIDEpICogTnVtYmVyT2ZQbWw1RW50cmll c05lZWRlZCArIDE7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIFN1YnN0 cmFjdCB0aGUgb25lIHBhZ2Ugb2NjdXBpZWQgYnkgUE1MNSBlbnRyaWVzIGlmIDUtTGV2ZWwgUGFn aW5nIGlzIGRpc2FibGVkLg0KPiA+ICsgIC8vDQo+ID4gKyAgaWYgKCFQYWdlNUxldmVsU3VwcG9y dCkgew0KPiA+ICsgICAgVG90YWxQYWdlc051bS0tOw0KPiA+ICAgIH0NCj4gPiArDQo+ID4gKyAg REVCVUcgKChERUJVR19JTkZPLCAiUG1sNS9QbWw0L1BkcC9Ub3RhbFBhZ2UgPSAlZC8lZC8lZC8l ZFxuIiwNCj4gPiArICAgIE51bWJlck9mUG1sNUVudHJpZXNOZWVkZWQsIE51bWJlck9mUG1sNEVu dHJpZXNOZWVkZWQsDQo+ID4gKyAgICBOdW1iZXJPZlBkcEVudHJpZXNOZWVkZWQsIFRvdGFsUGFn ZXNOdW0pKTsNCj4gPiArDQo+IA0KPiAoMykgU2FtZSBjb21tZW50IGFib3V0IGxvZyBtZXNzYWdl IGZvcm1hdHRpbmcgYXMgaW4gKDIpLg0KPiANCj4gKDQpIFBsZWFzZSBsb2cgVUlOVDMyIHZhbHVl cyB3aXRoICV1LCBub3QgJWQuDQo+IA0KPiAoNSkgUGxlYXNlIGxvZyBVSU5UTiB2YWx1ZXMgd2l0 aCAlTHUgKGFuZCBjYXN0IHRoZW0gdG8gVUlOVDY0IGZpcnN0KS4NCg0KDQpvayB0byBhYm92ZSAz LCA0LCA1Lg0KDQo+IA0KPiAoNikgTW9yZSBnZW5lcmFsbHksIGNhbiB3ZSBwbGVhc2UgcmVwbGFj ZSB0aGlzIHBhdGNoIHdpdGggdGhyZWUgcGF0Y2hlcywNCj4gaW4gdGhlIHNlcmllcz8NCj4gDQo+ IC0gdGhlIGZpcnN0IHBhdGNoIHNob3VsZCBleHRyYWN0IHRoZSBUb3RhbFBhZ2VzTnVtIGNhbGN1 bGF0aW9uIHRvIGENCj4gc2VwYXJhdGUgKmxpYnJhcnkqIGZ1bmN0aW9uIChpdCBzaG91bGQgYmUg YSBwdWJsaWMgZnVuY3Rpb24gaW4gYSBCQVNFIG9yDQo+IFBFSU0gbGlicmFyeSkNCj4gDQo+IC0g dGhlIHNlY29uZCBwYXRjaCBzaG91bGQgZXh0ZW5kIHRoZSBUb3RhbFBhZ2VzTnVtIGNhbGN1bGF0 aW9uIGluIHRoZQ0KPiBsaWJyYXJ5IGZ1bmN0aW9uIHRvIDUtbGV2ZWwgcGFnaW5nDQo+IA0KPiAt IHRoZSB0aGlyZCBwYXRjaCBzaG91bGQgYmUgdGhlIHJlbWFpbmluZyBjb2RlIGZyb20gdGhlIHBy ZXNlbnQgcGF0Y2guDQo+IA0KPiBIZXJlJ3Mgd2h5OiBpbiBPdm1mUGtnL1BsYXRmb3JtUGVpLCB0 aGUgR2V0UGVpTWVtb3J5Q2FwKCkgZnVuY3Rpb24NCj4gZHVwbGljYXRlcyB0aGlzIGNhbGN1bGF0 aW9uLiBJbiBPVk1GLCBQRUktcGhhc2UgbWVtb3J5IGFsbG9jYXRpb25zIGNhbg0KPiBiZSBkb21p bmF0ZWQgYnkgdGhlIHBhZ2UgdGFibGVzIGJ1aWx0IGZvciA2NC1iaXQgRFhFLCBhbmQgc28NCj4g T3ZtZlBrZy9QbGF0Zm9ybVBlaSBtdXN0IGtub3csIGZvciBzaXppbmcgdGhlIHBlcm1hbmVudCBQ RUkgUkFNLCBob3cNCj4gbXVjaCBSQU0gdGhlIERYRSBJUEwgUEVJTSB3aWxsIG5lZWQgZm9yIHRo b3NlIHBhZ2UgdGFibGVzLg0KPiANCj4gSSB3b3VsZCAqcmVhbGx5KiBkaXNsaWtlIGNvcHlpbmcg dGhpcyB1cGRhdGUgKGZvciA1LWxldmVsIHBhZ2luZykgZnJvbQ0KPiBDcmVhdGVJZGVudGl0eU1h cHBpbmdQYWdlVGFibGVzKCkgdG8gR2V0UGVpTWVtb3J5Q2FwKCkuIEluc3RlYWQsIHRoZQ0KPiBj YWxjdWxhdGlvbiBzaG91bGQgYmUgZXh0cmFjdGVkIHRvIGEgbGlicmFyeSBmdW5jdGlvbiwgYW5k IHRoZW4gT1ZNRg0KPiAoYW5kIGFsbCBvdGhlciBwbGF0Zm9ybXMgYWZmZWN0ZWQgc2ltaWxhcmx5 KSBjb3VsZCBjYWxsIHRoZSBuZXcgZnVuY3Rpb24uDQo+IA0KPiBJZiB0aGlzIGlzIG5vdCBmZWFz aWJsZSBvciB2ZXJ5IG11Y2ggb3V0IG9mIHNjb3BlLCB0aGVuIEkgZ3Vlc3Mgd2UnbGwNCj4ganVz dCBrZWVwIHRoZSBQQ0QgYXMgRkFMU0UgaW4gT1ZNRiwgZm9yIHRoZSB0aW1lIGJlaW5nLg0KPiAN Cg0KQlogaHR0cHM6Ly9idWd6aWxsYS50aWFub2NvcmUub3JnL3Nob3dfYnVnLmNnaT9pZD04NDcg bWF5IGJlIHdoYXQNCnlvdSBuZWVkLg0KRXh0cmFjdGluZyBhIGxpYnJhcnkgQVBJIHRvIHJldHVy biBob3cgbWFueSBwYWdlcyBhcmUgbmVlZGVkIGZvciBwYWdlIHRhYmxlcw0KbmVlZHMgdG8gY29u c2lkZXIgc2V2ZXJhbCBjYXNlczoNCjEuIDRLIG9yIDJNIG9yIDFHIHBhZ2Ugc2l6ZSBpcyB1c2Vk Lg0KMi4gcmFuZ2Ugb2YgcGh5c2ljYWwgbWVtb3J5DQozLiBwYWdlIHRhYmxlIGxldmVsDQoNCkJ1 dCByaWdodCBub3csIHRoaXMgaXMgbm90IGluIHRoZSBoaWdoIHByaW9yaXR5IGluIG15IHRvLWRv IGxpc3QuDQpJIGNhbiBoZWxwIHRvIGNoYW5nZSBHZXRQZWlNZW1vcnlDYXAoKSBmb3Igc2hvcnQt dGVybSBuZWVkcy4NCkFyZSB5b3Ugb2sgd2l0aCB0aGlzPw0KDQo+IEknbGwgbGV0IG90aGVycyBy ZXZpZXcgdGhlIHJlc3Qgb2YgdGhpcyBwYXRjaC4NCj4gDQo+IFRoYW5rcw0KPiBMYXN6bG8NCj4g DQo+ID4gICAgQmlnUGFnZUFkZHJlc3MgPSAoVUlOVE4pIEFsbG9jYXRlUGFnZVRhYmxlTWVtb3J5 IChUb3RhbFBhZ2VzTnVtKTsNCj4gPiAgICBBU1NFUlQgKEJpZ1BhZ2VBZGRyZXNzICE9IDApOw0K PiA+DQo+ID4gQEAgLTcxMSw5MiArNzUxLDEyNSBAQCBDcmVhdGVJZGVudGl0eU1hcHBpbmdQYWdl VGFibGVzICgNCj4gPiAgICAvLyBCeSBhcmNoaXRlY3R1cmUgb25seSBvbmUgUGFnZU1hcExldmVs NCBleGlzdHMgLSBzbyBsZXRzIGFsbG9jYXRlIHN0b3JhZ2UgZm9yIGl0Lg0KPiA+ICAgIC8vDQo+ ID4gICAgUGFnZU1hcCAgICAgICAgID0gKFZPSUQgKikgQmlnUGFnZUFkZHJlc3M7DQo+ID4gLSAg QmlnUGFnZUFkZHJlc3MgKz0gU0laRV80S0I7DQo+ID4gLQ0KPiA+IC0gIFBhZ2VNYXBMZXZlbDRF bnRyeSA9IFBhZ2VNYXA7DQo+ID4gLSAgUGFnZUFkZHJlc3MgICAgICAgID0gMDsNCj4gPiAtICBm b3IgKEluZGV4T2ZQbWw0RW50cmllcyA9IDA7IEluZGV4T2ZQbWw0RW50cmllcyA8IE51bWJlck9m UG1sNEVudHJpZXNOZWVkZWQ7IEluZGV4T2ZQbWw0RW50cmllcysrLA0KPiBQYWdlTWFwTGV2ZWw0 RW50cnkrKykgew0KPiA+ICsgIGlmIChQYWdlNUxldmVsU3VwcG9ydCkgew0KPiA+ICAgICAgLy8N Cj4gPiAtICAgIC8vIEVhY2ggUE1MNCBlbnRyeSBwb2ludHMgdG8gYSBwYWdlIG9mIFBhZ2UgRGly ZWN0b3J5IFBvaW50ZXIgZW50aXJlcy4NCj4gPiAtICAgIC8vIFNvIGxldHMgYWxsb2NhdGUgc3Bh Y2UgZm9yIHRoZW0gYW5kIGZpbGwgdGhlbSBpbiBpbiB0aGUgSW5kZXhPZlBkcEVudHJpZXMgbG9v cC4NCj4gPiArICAgIC8vIEJ5IGFyY2hpdGVjdHVyZSBvbmx5IG9uZSBQYWdlTWFwTGV2ZWw1IGV4 aXN0cyAtIHNvIGxldHMgYWxsb2NhdGUgc3RvcmFnZSBmb3IgaXQuDQo+ID4gICAgICAvLw0KPiA+ IC0gICAgUGFnZURpcmVjdG9yeVBvaW50ZXJFbnRyeSA9IChWT0lEICopIEJpZ1BhZ2VBZGRyZXNz Ow0KPiA+IC0gICAgQmlnUGFnZUFkZHJlc3MgKz0gU0laRV80S0I7DQo+ID4gKyAgICBQYWdlTWFw TGV2ZWw1RW50cnkgPSBQYWdlTWFwOw0KPiA+ICsgICAgQmlnUGFnZUFkZHJlc3MgICAgKz0gU0la RV80S0I7DQo+ID4gKyAgfQ0KPiA+ICsgIFBhZ2VBZGRyZXNzICAgICAgICA9IDA7DQo+ID4NCj4g PiArICBmb3IgKCBJbmRleE9mUG1sNUVudHJpZXMgPSAwDQo+ID4gKyAgICAgIDsgSW5kZXhPZlBt bDVFbnRyaWVzIDwgTnVtYmVyT2ZQbWw1RW50cmllc05lZWRlZA0KPiA+ICsgICAgICA7IEluZGV4 T2ZQbWw1RW50cmllcysrLCBQYWdlTWFwTGV2ZWw1RW50cnkrKykgew0KPiA+ICAgICAgLy8NCj4g PiAtICAgIC8vIE1ha2UgYSBQTUw0IEVudHJ5DQo+ID4gKyAgICAvLyBFYWNoIFBNTDUgZW50cnkg cG9pbnRzIHRvIGEgcGFnZSBvZiBQTUw0IGVudGlyZXMuDQo+ID4gKyAgICAvLyBTbyBsZXRzIGFs bG9jYXRlIHNwYWNlIGZvciB0aGVtIGFuZCBmaWxsIHRoZW0gaW4gaW4gdGhlIEluZGV4T2ZQbWw0 RW50cmllcyBsb29wLg0KPiA+ICsgICAgLy8gV2hlbiA1LUxldmVsIFBhZ2luZyBpcyBkaXNhYmxl ZCwgYmVsb3cgYWxsb2NhdGlvbiBoYXBwZW5zIG9ubHkgb25jZS4NCj4gPiAgICAgIC8vDQo+ID4g LSAgICBQYWdlTWFwTGV2ZWw0RW50cnktPlVpbnQ2NCA9IChVSU5UNjQpKFVJTlROKVBhZ2VEaXJl Y3RvcnlQb2ludGVyRW50cnkgfCBBZGRyZXNzRW5jTWFzazsNCj4gPiAtICAgIFBhZ2VNYXBMZXZl bDRFbnRyeS0+Qml0cy5SZWFkV3JpdGUgPSAxOw0KPiA+IC0gICAgUGFnZU1hcExldmVsNEVudHJ5 LT5CaXRzLlByZXNlbnQgPSAxOw0KPiA+ICsgICAgUGFnZU1hcExldmVsNEVudHJ5ID0gKFZPSUQg KikgQmlnUGFnZUFkZHJlc3M7DQo+ID4gKyAgICBCaWdQYWdlQWRkcmVzcyAgICArPSBTSVpFXzRL QjsNCj4gPg0KPiA+IC0gICAgaWYgKFBhZ2UxR1N1cHBvcnQpIHsNCj4gPiAtICAgICAgUGFnZURp cmVjdG9yeTFHRW50cnkgPSAoVk9JRCAqKSBQYWdlRGlyZWN0b3J5UG9pbnRlckVudHJ5Ow0KPiA+ ICsgICAgaWYgKFBhZ2U1TGV2ZWxTdXBwb3J0KSB7DQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAg IC8vIE1ha2UgYSBQTUw1IEVudHJ5DQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIFBhZ2VNYXBM ZXZlbDVFbnRyeS0+VWludDY0ID0gKFVJTlQ2NCkgKFVJTlROKSBQYWdlTWFwTGV2ZWw0RW50cnk7 DQo+ID4gKyAgICAgIFBhZ2VNYXBMZXZlbDVFbnRyeS0+Qml0cy5SZWFkV3JpdGUgPSAxOw0KPiA+ ICsgICAgICBQYWdlTWFwTGV2ZWw1RW50cnktPkJpdHMuUHJlc2VudCAgID0gMTsNCj4gPiArICAg IH0NCj4gPg0KPiA+IC0gICAgICBmb3IgKEluZGV4T2ZQYWdlRGlyZWN0b3J5RW50cmllcyA9IDA7 IEluZGV4T2ZQYWdlRGlyZWN0b3J5RW50cmllcyA8IDUxMjsgSW5kZXhPZlBhZ2VEaXJlY3RvcnlF bnRyaWVzKyssDQo+IFBhZ2VEaXJlY3RvcnkxR0VudHJ5KyssIFBhZ2VBZGRyZXNzICs9IFNJWkVf MUdCKSB7DQo+ID4gLSAgICAgICAgaWYgKFRvU3BsaXRQYWdlVGFibGUgKFBhZ2VBZGRyZXNzLCBT SVpFXzFHQiwgU3RhY2tCYXNlLCBTdGFja1NpemUpKSB7DQo+ID4gLSAgICAgICAgICBTcGxpdDFH UGFnZVRvMk0gKFBhZ2VBZGRyZXNzLCAoVUlOVDY0ICopIFBhZ2VEaXJlY3RvcnkxR0VudHJ5LCBT dGFja0Jhc2UsIFN0YWNrU2l6ZSk7DQo+ID4gLSAgICAgICAgfSBlbHNlIHsNCj4gPiAtICAgICAg ICAgIC8vDQo+ID4gLSAgICAgICAgICAvLyBGaWxsIGluIHRoZSBQYWdlIERpcmVjdG9yeSBlbnRy aWVzDQo+ID4gLSAgICAgICAgICAvLw0KPiA+IC0gICAgICAgICAgUGFnZURpcmVjdG9yeTFHRW50 cnktPlVpbnQ2NCA9IChVSU5UNjQpUGFnZUFkZHJlc3MgfCBBZGRyZXNzRW5jTWFzazsNCj4gPiAt ICAgICAgICAgIFBhZ2VEaXJlY3RvcnkxR0VudHJ5LT5CaXRzLlJlYWRXcml0ZSA9IDE7DQo+ID4g LSAgICAgICAgICBQYWdlRGlyZWN0b3J5MUdFbnRyeS0+Qml0cy5QcmVzZW50ID0gMTsNCj4gPiAt ICAgICAgICAgIFBhZ2VEaXJlY3RvcnkxR0VudHJ5LT5CaXRzLk11c3RCZTEgPSAxOw0KPiA+IC0g ICAgICAgIH0NCj4gPiAtICAgICAgfQ0KPiA+IC0gICAgfSBlbHNlIHsNCj4gPiAtICAgICAgZm9y IChJbmRleE9mUGRwRW50cmllcyA9IDA7IEluZGV4T2ZQZHBFbnRyaWVzIDwgTnVtYmVyT2ZQZHBF bnRyaWVzTmVlZGVkOyBJbmRleE9mUGRwRW50cmllcysrLA0KPiBQYWdlRGlyZWN0b3J5UG9pbnRl ckVudHJ5KyspIHsNCj4gPiAtICAgICAgICAvLw0KPiA+IC0gICAgICAgIC8vIEVhY2ggRGlyZWN0 b3J5IFBvaW50ZXIgZW50cmllcyBwb2ludHMgdG8gYSBwYWdlIG9mIFBhZ2UgRGlyZWN0b3J5IGVu dGlyZXMuDQo+ID4gLSAgICAgICAgLy8gU28gYWxsb2NhdGUgc3BhY2UgZm9yIHRoZW0gYW5kIGZp bGwgdGhlbSBpbiBpbiB0aGUgSW5kZXhPZlBhZ2VEaXJlY3RvcnlFbnRyaWVzIGxvb3AuDQo+ID4g LSAgICAgICAgLy8NCj4gPiAtICAgICAgICBQYWdlRGlyZWN0b3J5RW50cnkgPSAoVk9JRCAqKSBC aWdQYWdlQWRkcmVzczsNCj4gPiAtICAgICAgICBCaWdQYWdlQWRkcmVzcyArPSBTSVpFXzRLQjsN Cj4gPiArICAgIGZvciAoIEluZGV4T2ZQbWw0RW50cmllcyA9IDANCj4gPiArICAgICAgICA7IElu ZGV4T2ZQbWw0RW50cmllcyA8IChOdW1iZXJPZlBtbDVFbnRyaWVzTmVlZGVkID09IDEgPyBOdW1i ZXJPZlBtbDRFbnRyaWVzTmVlZGVkIDogNTEyKQ0KPiA+ICsgICAgICAgIDsgSW5kZXhPZlBtbDRF bnRyaWVzKyssIFBhZ2VNYXBMZXZlbDRFbnRyeSsrKSB7DQo+ID4gKyAgICAgIC8vDQo+ID4gKyAg ICAgIC8vIEVhY2ggUE1MNCBlbnRyeSBwb2ludHMgdG8gYSBwYWdlIG9mIFBhZ2UgRGlyZWN0b3J5 IFBvaW50ZXIgZW50aXJlcy4NCj4gPiArICAgICAgLy8gU28gbGV0cyBhbGxvY2F0ZSBzcGFjZSBm b3IgdGhlbSBhbmQgZmlsbCB0aGVtIGluIGluIHRoZSBJbmRleE9mUGRwRW50cmllcyBsb29wLg0K PiA+ICsgICAgICAvLw0KPiA+ICsgICAgICBQYWdlRGlyZWN0b3J5UG9pbnRlckVudHJ5ID0gKFZP SUQgKikgQmlnUGFnZUFkZHJlc3M7DQo+ID4gKyAgICAgIEJpZ1BhZ2VBZGRyZXNzICs9IFNJWkVf NEtCOw0KPiA+DQo+ID4gLSAgICAgICAgLy8NCj4gPiAtICAgICAgICAvLyBGaWxsIGluIGEgUGFn ZSBEaXJlY3RvcnkgUG9pbnRlciBFbnRyaWVzDQo+ID4gLSAgICAgICAgLy8NCj4gPiAtICAgICAg ICBQYWdlRGlyZWN0b3J5UG9pbnRlckVudHJ5LT5VaW50NjQgPSAoVUlOVDY0KShVSU5UTilQYWdl RGlyZWN0b3J5RW50cnkgfCBBZGRyZXNzRW5jTWFzazsNCj4gPiAtICAgICAgICBQYWdlRGlyZWN0 b3J5UG9pbnRlckVudHJ5LT5CaXRzLlJlYWRXcml0ZSA9IDE7DQo+ID4gLSAgICAgICAgUGFnZURp cmVjdG9yeVBvaW50ZXJFbnRyeS0+Qml0cy5QcmVzZW50ID0gMTsNCj4gPiArICAgICAgLy8NCj4g PiArICAgICAgLy8gTWFrZSBhIFBNTDQgRW50cnkNCj4gPiArICAgICAgLy8NCj4gPiArICAgICAg UGFnZU1hcExldmVsNEVudHJ5LT5VaW50NjQgPSAoVUlOVDY0KShVSU5UTilQYWdlRGlyZWN0b3J5 UG9pbnRlckVudHJ5IHwgQWRkcmVzc0VuY01hc2s7DQo+ID4gKyAgICAgIFBhZ2VNYXBMZXZlbDRF bnRyeS0+Qml0cy5SZWFkV3JpdGUgPSAxOw0KPiA+ICsgICAgICBQYWdlTWFwTGV2ZWw0RW50cnkt PkJpdHMuUHJlc2VudCA9IDE7DQo+ID4NCj4gPiAtICAgICAgICBmb3IgKEluZGV4T2ZQYWdlRGly ZWN0b3J5RW50cmllcyA9IDA7IEluZGV4T2ZQYWdlRGlyZWN0b3J5RW50cmllcyA8IDUxMjsgSW5k ZXhPZlBhZ2VEaXJlY3RvcnlFbnRyaWVzKyssDQo+IFBhZ2VEaXJlY3RvcnlFbnRyeSsrLCBQYWdl QWRkcmVzcyArPSBTSVpFXzJNQikgew0KPiA+IC0gICAgICAgICAgaWYgKFRvU3BsaXRQYWdlVGFi bGUgKFBhZ2VBZGRyZXNzLCBTSVpFXzJNQiwgU3RhY2tCYXNlLCBTdGFja1NpemUpKSB7DQo+ID4g LSAgICAgICAgICAgIC8vDQo+ID4gLSAgICAgICAgICAgIC8vIE5lZWQgdG8gc3BsaXQgdGhpcyAy TSBwYWdlIHRoYXQgY292ZXJzIE5VTEwgb3Igc3RhY2sgcmFuZ2UuDQo+ID4gLSAgICAgICAgICAg IC8vDQo+ID4gLSAgICAgICAgICAgIFNwbGl0Mk1QYWdlVG80SyAoUGFnZUFkZHJlc3MsIChVSU5U NjQgKikgUGFnZURpcmVjdG9yeUVudHJ5LCBTdGFja0Jhc2UsIFN0YWNrU2l6ZSk7DQo+ID4gKyAg ICAgIGlmIChQYWdlMUdTdXBwb3J0KSB7DQo+ID4gKyAgICAgICAgUGFnZURpcmVjdG9yeTFHRW50 cnkgPSAoVk9JRCAqKSBQYWdlRGlyZWN0b3J5UG9pbnRlckVudHJ5Ow0KPiA+ICsNCj4gPiArICAg ICAgICBmb3IgKEluZGV4T2ZQYWdlRGlyZWN0b3J5RW50cmllcyA9IDA7IEluZGV4T2ZQYWdlRGly ZWN0b3J5RW50cmllcyA8IDUxMjsgSW5kZXhPZlBhZ2VEaXJlY3RvcnlFbnRyaWVzKyssDQo+IFBh Z2VEaXJlY3RvcnkxR0VudHJ5KyssIFBhZ2VBZGRyZXNzICs9IFNJWkVfMUdCKSB7DQo+ID4gKyAg ICAgICAgICBpZiAoVG9TcGxpdFBhZ2VUYWJsZSAoUGFnZUFkZHJlc3MsIFNJWkVfMUdCLCBTdGFj a0Jhc2UsIFN0YWNrU2l6ZSkpIHsNCj4gPiArICAgICAgICAgICAgU3BsaXQxR1BhZ2VUbzJNIChQ YWdlQWRkcmVzcywgKFVJTlQ2NCAqKSBQYWdlRGlyZWN0b3J5MUdFbnRyeSwgU3RhY2tCYXNlLCBT dGFja1NpemUpOw0KPiA+ICAgICAgICAgICAgfSBlbHNlIHsNCj4gPiAgICAgICAgICAgICAgLy8N Cj4gPiAgICAgICAgICAgICAgLy8gRmlsbCBpbiB0aGUgUGFnZSBEaXJlY3RvcnkgZW50cmllcw0K PiA+ICAgICAgICAgICAgICAvLw0KPiA+IC0gICAgICAgICAgICBQYWdlRGlyZWN0b3J5RW50cnkt PlVpbnQ2NCA9IChVSU5UNjQpUGFnZUFkZHJlc3MgfCBBZGRyZXNzRW5jTWFzazsNCj4gPiAtICAg ICAgICAgICAgUGFnZURpcmVjdG9yeUVudHJ5LT5CaXRzLlJlYWRXcml0ZSA9IDE7DQo+ID4gLSAg ICAgICAgICAgIFBhZ2VEaXJlY3RvcnlFbnRyeS0+Qml0cy5QcmVzZW50ID0gMTsNCj4gPiAtICAg ICAgICAgICAgUGFnZURpcmVjdG9yeUVudHJ5LT5CaXRzLk11c3RCZTEgPSAxOw0KPiA+ICsgICAg ICAgICAgICBQYWdlRGlyZWN0b3J5MUdFbnRyeS0+VWludDY0ID0gKFVJTlQ2NClQYWdlQWRkcmVz cyB8IEFkZHJlc3NFbmNNYXNrOw0KPiA+ICsgICAgICAgICAgICBQYWdlRGlyZWN0b3J5MUdFbnRy eS0+Qml0cy5SZWFkV3JpdGUgPSAxOw0KPiA+ICsgICAgICAgICAgICBQYWdlRGlyZWN0b3J5MUdF bnRyeS0+Qml0cy5QcmVzZW50ID0gMTsNCj4gPiArICAgICAgICAgICAgUGFnZURpcmVjdG9yeTFH RW50cnktPkJpdHMuTXVzdEJlMSA9IDE7DQo+ID4gICAgICAgICAgICB9DQo+ID4gICAgICAgICAg fQ0KPiA+IC0gICAgICB9DQo+ID4gKyAgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgZm9yICgg SW5kZXhPZlBkcEVudHJpZXMgPSAwDQo+ID4gKyAgICAgICAgICAgIDsgSW5kZXhPZlBkcEVudHJp ZXMgPCAoTnVtYmVyT2ZQbWw0RW50cmllc05lZWRlZCA9PSAxID8gTnVtYmVyT2ZQZHBFbnRyaWVz TmVlZGVkIDogNTEyKQ0KPiA+ICsgICAgICAgICAgICA7IEluZGV4T2ZQZHBFbnRyaWVzKyssIFBh Z2VEaXJlY3RvcnlQb2ludGVyRW50cnkrKykgew0KPiA+ICsgICAgICAgICAgLy8NCj4gPiArICAg ICAgICAgIC8vIEVhY2ggRGlyZWN0b3J5IFBvaW50ZXIgZW50cmllcyBwb2ludHMgdG8gYSBwYWdl IG9mIFBhZ2UgRGlyZWN0b3J5IGVudGlyZXMuDQo+ID4gKyAgICAgICAgICAvLyBTbyBhbGxvY2F0 ZSBzcGFjZSBmb3IgdGhlbSBhbmQgZmlsbCB0aGVtIGluIGluIHRoZSBJbmRleE9mUGFnZURpcmVj dG9yeUVudHJpZXMgbG9vcC4NCj4gPiArICAgICAgICAgIC8vDQo+ID4gKyAgICAgICAgICBQYWdl RGlyZWN0b3J5RW50cnkgPSAoVk9JRCAqKSBCaWdQYWdlQWRkcmVzczsNCj4gPiArICAgICAgICAg IEJpZ1BhZ2VBZGRyZXNzICs9IFNJWkVfNEtCOw0KPiA+DQo+ID4gLSAgICAgIGZvciAoOyBJbmRl eE9mUGRwRW50cmllcyA8IDUxMjsgSW5kZXhPZlBkcEVudHJpZXMrKywgUGFnZURpcmVjdG9yeVBv aW50ZXJFbnRyeSsrKSB7DQo+ID4gLSAgICAgICAgWmVyb01lbSAoDQo+ID4gLSAgICAgICAgICBQ YWdlRGlyZWN0b3J5UG9pbnRlckVudHJ5LA0KPiA+IC0gICAgICAgICAgc2l6ZW9mKFBBR0VfTUFQ X0FORF9ESVJFQ1RPUllfUE9JTlRFUikNCj4gPiAtICAgICAgICAgICk7DQo+ID4gKyAgICAgICAg ICAvLw0KPiA+ICsgICAgICAgICAgLy8gRmlsbCBpbiBhIFBhZ2UgRGlyZWN0b3J5IFBvaW50ZXIg RW50cmllcw0KPiA+ICsgICAgICAgICAgLy8NCj4gPiArICAgICAgICAgIFBhZ2VEaXJlY3RvcnlQ b2ludGVyRW50cnktPlVpbnQ2NCA9IChVSU5UNjQpKFVJTlROKVBhZ2VEaXJlY3RvcnlFbnRyeSB8 IEFkZHJlc3NFbmNNYXNrOw0KPiA+ICsgICAgICAgICAgUGFnZURpcmVjdG9yeVBvaW50ZXJFbnRy eS0+Qml0cy5SZWFkV3JpdGUgPSAxOw0KPiA+ICsgICAgICAgICAgUGFnZURpcmVjdG9yeVBvaW50 ZXJFbnRyeS0+Qml0cy5QcmVzZW50ID0gMTsNCj4gPiArDQo+ID4gKyAgICAgICAgICBmb3IgKElu ZGV4T2ZQYWdlRGlyZWN0b3J5RW50cmllcyA9IDA7IEluZGV4T2ZQYWdlRGlyZWN0b3J5RW50cmll cyA8IDUxMjsgSW5kZXhPZlBhZ2VEaXJlY3RvcnlFbnRyaWVzKyssDQo+IFBhZ2VEaXJlY3RvcnlF bnRyeSsrLCBQYWdlQWRkcmVzcyArPSBTSVpFXzJNQikgew0KPiA+ICsgICAgICAgICAgICBpZiAo VG9TcGxpdFBhZ2VUYWJsZSAoUGFnZUFkZHJlc3MsIFNJWkVfMk1CLCBTdGFja0Jhc2UsIFN0YWNr U2l6ZSkpIHsNCj4gPiArICAgICAgICAgICAgICAvLw0KPiA+ICsgICAgICAgICAgICAgIC8vIE5l ZWQgdG8gc3BsaXQgdGhpcyAyTSBwYWdlIHRoYXQgY292ZXJzIE5VTEwgb3Igc3RhY2sgcmFuZ2Uu DQo+ID4gKyAgICAgICAgICAgICAgLy8NCj4gPiArICAgICAgICAgICAgICBTcGxpdDJNUGFnZVRv NEsgKFBhZ2VBZGRyZXNzLCAoVUlOVDY0ICopIFBhZ2VEaXJlY3RvcnlFbnRyeSwgU3RhY2tCYXNl LCBTdGFja1NpemUpOw0KPiA+ICsgICAgICAgICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAg ICAgIC8vDQo+ID4gKyAgICAgICAgICAgICAgLy8gRmlsbCBpbiB0aGUgUGFnZSBEaXJlY3Rvcnkg ZW50cmllcw0KPiA+ICsgICAgICAgICAgICAgIC8vDQo+ID4gKyAgICAgICAgICAgICAgUGFnZURp cmVjdG9yeUVudHJ5LT5VaW50NjQgPSAoVUlOVDY0KVBhZ2VBZGRyZXNzIHwgQWRkcmVzc0VuY01h c2s7DQo+ID4gKyAgICAgICAgICAgICAgUGFnZURpcmVjdG9yeUVudHJ5LT5CaXRzLlJlYWRXcml0 ZSA9IDE7DQo+ID4gKyAgICAgICAgICAgICAgUGFnZURpcmVjdG9yeUVudHJ5LT5CaXRzLlByZXNl bnQgPSAxOw0KPiA+ICsgICAgICAgICAgICAgIFBhZ2VEaXJlY3RvcnlFbnRyeS0+Qml0cy5NdXN0 QmUxID0gMTsNCj4gPiArICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgICAgfQ0KPiA+ICsgICAg ICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAgLy8NCj4gPiArICAgICAgICAvLyBGaWxsIHdpdGgg bnVsbCBlbnRyeSBmb3IgdW51c2VkIFBEUFRFDQo+ID4gKyAgICAgICAgLy8NCj4gPiArICAgICAg ICBaZXJvTWVtIChQYWdlRGlyZWN0b3J5UG9pbnRlckVudHJ5LCAoNTEyIC0gSW5kZXhPZlBkcEVu dHJpZXMpICogc2l6ZW9mKFBBR0VfTUFQX0FORF9ESVJFQ1RPUllfUE9JTlRFUikpOw0KPiA+ICAg ICAgICB9DQo+ID4gICAgICB9DQo+ID4gKw0KPiA+ICsgICAgLy8NCj4gPiArICAgIC8vIEZvciB0 aGUgUE1MNCBlbnRyaWVzIHdlIGFyZSBub3QgdXNpbmcgZmlsbCBpbiBhIG51bGwgZW50cnkuDQo+ ID4gKyAgICAvLw0KPiA+ICsgICAgWmVyb01lbSAoUGFnZU1hcExldmVsNEVudHJ5LCAoNTEyIC0g SW5kZXhPZlBtbDRFbnRyaWVzKSAqIHNpemVvZiAoUEFHRV9NQVBfQU5EX0RJUkVDVE9SWV9QT0lO VEVSKSk7DQo+ID4gICAgfQ0KPiA+DQo+ID4gLSAgLy8NCj4gPiAtICAvLyBGb3IgdGhlIFBNTDQg ZW50cmllcyB3ZSBhcmUgbm90IHVzaW5nIGZpbGwgaW4gYSBudWxsIGVudHJ5Lg0KPiA+IC0gIC8v DQo+ID4gLSAgZm9yICg7IEluZGV4T2ZQbWw0RW50cmllcyA8IDUxMjsgSW5kZXhPZlBtbDRFbnRy aWVzKyssIFBhZ2VNYXBMZXZlbDRFbnRyeSsrKSB7DQo+ID4gLSAgICBaZXJvTWVtICgNCj4gPiAt ICAgICAgUGFnZU1hcExldmVsNEVudHJ5LA0KPiA+IC0gICAgICBzaXplb2YgKFBBR0VfTUFQX0FO RF9ESVJFQ1RPUllfUE9JTlRFUikNCj4gPiAtICAgICAgKTsNCj4gPiArICBpZiAoUGFnZTVMZXZl bFN1cHBvcnQpIHsNCj4gPiArICAgIENyNC5VaW50TiA9IEFzbVJlYWRDcjQgKCk7DQo+ID4gKyAg ICBDcjQuQml0cy5MQTU3ID0gMTsNCj4gPiArICAgIEFzbVdyaXRlQ3I0IChDcjQuVWludE4pOw0K PiA+ICsgICAgLy8NCj4gPiArICAgIC8vIEZvciB0aGUgUE1MNSBlbnRyaWVzIHdlIGFyZSBub3Qg dXNpbmcgZmlsbCBpbiBhIG51bGwgZW50cnkuDQo+ID4gKyAgICAvLw0KPiA+ICsgICAgWmVyb01l bSAoUGFnZU1hcExldmVsNUVudHJ5LCAoNTEyIC0gSW5kZXhPZlBtbDVFbnRyaWVzKSAqIHNpemVv ZiAoUEFHRV9NQVBfQU5EX0RJUkVDVE9SWV9QT0lOVEVSKSk7DQo+ID4gICAgfQ0KPiA+DQo+ID4g ICAgLy8NCj4gPg0KPiANCj4gDQo+IA0KDQo=