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.120; helo=mga04.intel.com; envelope-from=eric.dong@intel.com; receiver=edk2-devel@lists.01.org Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) (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 48853211799FE for ; Tue, 16 Oct 2018 16:52:54 -0700 (PDT) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 16 Oct 2018 16:52:54 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.54,389,1534834800"; d="scan'208";a="83169221" Received: from fmsmsx103.amr.corp.intel.com ([10.18.124.201]) by orsmga006.jf.intel.com with ESMTP; 16 Oct 2018 16:52:53 -0700 Received: from shsmsx103.ccr.corp.intel.com (10.239.4.69) by FMSMSX103.amr.corp.intel.com (10.18.124.201) with Microsoft SMTP Server (TLS) id 14.3.319.2; Tue, 16 Oct 2018 16:52:53 -0700 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.217]) by SHSMSX103.ccr.corp.intel.com ([169.254.4.245]) with mapi id 14.03.0319.002; Wed, 17 Oct 2018 07:52:51 +0800 From: "Dong, Eric" To: "Ni, Ruiyu" , "edk2-devel@lists.01.org" CC: Laszlo Ersek Thread-Topic: [Patch 4/4] UefiCpuPkg/PiSmmCpuDxeSmm: Add logic to support semaphore type. Thread-Index: AQHUZP5t+yVVEJLtr0ecZfiIOpBJMaUii8wg Date: Tue, 16 Oct 2018 23:52:51 +0000 Message-ID: References: <20181015024948.228-1-eric.dong@intel.com> <20181015024948.228-5-eric.dong@intel.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [Patch 4/4] UefiCpuPkg/PiSmmCpuDxeSmm: Add logic to support semaphore type. X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 16 Oct 2018 23:52:55 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgUnVpeXUsDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTmksIFJ1 aXl1DQo+IFNlbnQ6IFR1ZXNkYXksIE9jdG9iZXIgMTYsIDIwMTggMTE6MTYgQU0NCj4gVG86IERv bmcsIEVyaWMgPGVyaWMuZG9uZ0BpbnRlbC5jb20+OyBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZw0K PiBDYzogTGFzemxvIEVyc2VrIDxsZXJzZWtAcmVkaGF0LmNvbT4NCj4gU3ViamVjdDogUmU6IFtQ YXRjaCA0LzRdIFVlZmlDcHVQa2cvUGlTbW1DcHVEeGVTbW06IEFkZCBsb2dpYyB0bw0KPiBzdXBw b3J0IHNlbWFwaG9yZSB0eXBlLg0KPiANCj4gT24gMTAvMTUvMjAxOCAxMDo0OSBBTSwgRXJpYyBE b25nIHdyb3RlOg0KPiA+IEJlY2F1c2UgdGhpcyBkcml2ZXIgbmVlZHMgdG8gc2V0IE1TUnMgc2F2 ZWQgaW4gbm9ybWFsIGJvb3QgcGhhc2UsIHN5bmMNCj4gPiBzZW1hcGhvcmUgbG9naWMgZnJvbSBS ZWdpc3RlckNwdUZlYXR1cmVzTGliIGNvZGUgd2hpY2ggdXNlZCBmb3Igbm9ybWFsDQo+IGJvb3Qg cGhhc2UuDQo+ID4NCj4gPiBEZXRhaWwgc2VlIGNoYW5nZSBTSEEtMTogZGNkZjE3NzQyMTJkODdl MmQ3ZmViMzYyODZhNDA4ZWE3NDc1ZmQ3YiBmb3INCj4gPiBSZWdpc3RlckNwdUZlYXR1cmVzTGli Lg0KPiA+DQo+ID4gQ2M6IFJ1aXl1IE5pIDxydWl5dS5uaUBpbnRlbC5jb20+DQo+ID4gQ2M6IExh c3psbyBFcnNlayA8bGVyc2VrQHJlZGhhdC5jb20+DQo+ID4gQ29udHJpYnV0ZWQtdW5kZXI6IFRp YW5vQ29yZSBDb250cmlidXRpb24gQWdyZWVtZW50IDEuMQ0KPiA+IFNpZ25lZC1vZmYtYnk6IEVy aWMgRG9uZyA8ZXJpYy5kb25nQGludGVsLmNvbT4NCj4gPiAtLS0NCj4gPiAgIFVlZmlDcHVQa2cv UGlTbW1DcHVEeGVTbW0vQ3B1UzMuYyAgICAgICAgICB8IDMxNiArKysrKysrKysrKysrKysrLQ0K PiAtLS0tLS0tLS0tLS0NCj4gPiAgIFVlZmlDcHVQa2cvUGlTbW1DcHVEeGVTbW0vTXBTZXJ2aWNl LmMgICAgICB8ICAgMyAtDQo+ID4gICBVZWZpQ3B1UGtnL1BpU21tQ3B1RHhlU21tL1BpU21tQ3B1 RHhlU21tLmggfCAgIDMgKy0NCj4gPiAgIDMgZmlsZXMgY2hhbmdlZCwgMTgwIGluc2VydGlvbnMo KyksIDE0MiBkZWxldGlvbnMoLSkNCj4gPg0KPiA+IGRpZmYgLS1naXQgYS9VZWZpQ3B1UGtnL1Bp U21tQ3B1RHhlU21tL0NwdVMzLmMNCj4gPiBiL1VlZmlDcHVQa2cvUGlTbW1DcHVEeGVTbW0vQ3B1 UzMuYw0KPiA+IGluZGV4IDUyZmY5Njc5ZDUuLjVhMzVmN2E2MzQgMTAwNjQ0DQo+ID4gLS0tIGEv VWVmaUNwdVBrZy9QaVNtbUNwdUR4ZVNtbS9DcHVTMy5jDQo+ID4gKysrIGIvVWVmaUNwdVBrZy9Q aVNtbUNwdUR4ZVNtbS9DcHVTMy5jDQo+ID4gQEAgLTM4LDkgKzM4LDEyIEBAIHR5cGVkZWYgc3Ry dWN0IHsNCj4gPiAgIH0gTVBfQVNTRU1CTFlfQUREUkVTU19NQVA7DQo+ID4NCj4gPiAgIC8vDQo+ ID4gLS8vIFNwaW4gbG9jayB1c2VkIHRvIHNlcmlhbGl6ZSBNZW1vcnlNYXBwZWQgb3BlcmF0aW9u DQo+ID4gKy8vIEZsYWdzIHVzZWQgd2hlbiBwcm9ncmFtIHRoZSByZWdpc3Rlci4NCj4gPiAgIC8v DQo+ID4gLVNQSU5fTE9DSyAgICAgICAgICAgICAgICAqbU1lbW9yeU1hcHBlZExvY2sgPSBOVUxM Ow0KPiA+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ID4gKyAgdm9sYXRpbGUgVUlOVE4gICAgICAgICAg IE1lbW9yeU1hcHBlZExvY2s7ICAgICAvLyBTcGlubG9jayB1c2VkIHRvIHByb2dyYW0NCj4gbW1p bw0KPiA+ICsgIHZvbGF0aWxlIFVJTlQzMiAgICAgICAgICAqU2VtYXBob3JlQ291bnQ7ICAgICAg Ly8gU2VtYXBob3JlIHVzZWQgdG8NCj4gcHJvZ3JhbSBzZW1hcGhvcmUuDQo+ID4gK30gUFJPR1JB TV9DUFVfUkVHSVNURVJfRkxBR1M7DQo+ID4NCj4gPiAgIC8vDQo+ID4gICAvLyBTaWduYWwgdGhh dCBTTU0gQkFTRSByZWxvY2F0aW9uIGlzIGNvbXBsZXRlLg0KPiA+IEBAIC02MiwxMyArNjUsMTEg QEAgQXNtR2V0QWRkcmVzc01hcCAoDQo+ID4gICAjZGVmaW5lIExFR0FDWV9SRUdJT05fU0laRSAg ICAoMiAqIDB4MTAwMCkNCj4gPiAgICNkZWZpbmUgTEVHQUNZX1JFR0lPTl9CQVNFICAgICgweEEw MDAwIC0gTEVHQUNZX1JFR0lPTl9TSVpFKQ0KPiA+DQo+ID4gK1BST0dSQU1fQ1BVX1JFR0lTVEVS X0ZMQUdTICAgbUNwdUZsYWdzOw0KPiA+ICAgQUNQSV9DUFVfREFUQSAgICAgICAgICAgICAgICBt QWNwaUNwdURhdGE7DQo+ID4gICB2b2xhdGlsZSBVSU5UMzIgICAgICAgICAgICAgIG1OdW1iZXJU b0ZpbmlzaDsNCj4gPiAgIE1QX0NQVV9FWENIQU5HRV9JTkZPICAgICAgICAgKm1FeGNoYW5nZUlu Zm87DQo+ID4gICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgIG1SZXN0b3JlU21tQ29uZmln dXJhdGlvbkluUzMgPSBGQUxTRTsNCj4gPiAtTVBfTVNSX0xPQ0sgICAgICAgICAgICAgICAgICAq bU1zclNwaW5Mb2NrcyA9IE5VTEw7DQo+ID4gLVVJTlROICAgICAgICAgICAgICAgICAgICAgICAg bU1zclNwaW5Mb2NrQ291bnQ7DQo+ID4gLVVJTlROICAgICAgICAgICAgICAgICAgICAgICAgbU1z ckNvdW50ID0gMDsNCj4gPg0KPiA+ICAgLy8NCj4gPiAgIC8vIFMzIGJvb3QgZmxhZw0KPiA+IEBA IC05MSw4OSArOTIsNiBAQCBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgIG1BcEhsdExvb3BD b2RlVGVtcGxhdGVbXSA9IHsNCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw eEVCLCAweEZDICAgICAgICAgICAgICAgLy8gam1wICQtMg0KPiA+ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIH07DQo+ID4NCj4gPiAtLyoqDQo+ID4gLSAgR2V0IE1TUiBzcGluIGxv Y2sgYnkgTVNSIGluZGV4Lg0KPiA+IC0NCj4gPiAtICBAcGFyYW0gIE1zckluZGV4ICAgICAgIE1T UiBpbmRleCB2YWx1ZS4NCj4gPiAtDQo+ID4gLSAgQHJldHVybiBQb2ludGVyIHRvIE1TUiBzcGlu IGxvY2suDQo+ID4gLQ0KPiA+IC0qKi8NCj4gPiAtU1BJTl9MT0NLICoNCj4gPiAtR2V0TXNyU3Bp bkxvY2tCeUluZGV4ICgNCj4gPiAtICBJTiBVSU5UMzIgICAgICBNc3JJbmRleA0KPiA+IC0gICkN Cj4gPiAtew0KPiA+IC0gIFVJTlROICAgICBJbmRleDsNCj4gPiAtICBmb3IgKEluZGV4ID0gMDsg SW5kZXggPCBtTXNyQ291bnQ7IEluZGV4KyspIHsNCj4gPiAtICAgIGlmIChNc3JJbmRleCA9PSBt TXNyU3BpbkxvY2tzW0luZGV4XS5Nc3JJbmRleCkgew0KPiA+IC0gICAgICByZXR1cm4gbU1zclNw aW5Mb2Nrc1tJbmRleF0uU3BpbkxvY2s7DQo+ID4gLSAgICB9DQo+ID4gLSAgfQ0KPiA+IC0gIHJl dHVybiBOVUxMOw0KPiA+IC19DQo+ID4gLQ0KPiA+IC0vKioNCj4gPiAtICBJbml0aWFsaXplIE1T UiBzcGluIGxvY2sgYnkgTVNSIGluZGV4Lg0KPiA+IC0NCj4gPiAtICBAcGFyYW0gIE1zckluZGV4 ICAgICAgIE1TUiBpbmRleCB2YWx1ZS4NCj4gPiAtDQo+ID4gLSoqLw0KPiA+IC1WT0lEDQo+ID4g LUluaXRNc3JTcGluTG9ja0J5SW5kZXggKA0KPiA+IC0gIElOIFVJTlQzMiAgICAgIE1zckluZGV4 DQo+ID4gLSAgKQ0KPiA+IC17DQo+ID4gLSAgVUlOVE4gICAgTXNyU3BpbkxvY2tDb3VudDsNCj4g PiAtICBVSU5UTiAgICBOZXdNc3JTcGluTG9ja0NvdW50Ow0KPiA+IC0gIFVJTlROICAgIEluZGV4 Ow0KPiA+IC0gIFVJTlROICAgIEFkZGVkU2l6ZTsNCj4gPiAtDQo+ID4gLSAgaWYgKG1Nc3JTcGlu TG9ja3MgPT0gTlVMTCkgew0KPiA+IC0gICAgTXNyU3BpbkxvY2tDb3VudCA9DQo+IG1TbW1DcHVT ZW1hcGhvcmVzLlNlbWFwaG9yZU1zci5BdmFpbGFibGVDb3VudGVyOw0KPiA+IC0gICAgbU1zclNw aW5Mb2NrcyA9IChNUF9NU1JfTE9DSyAqKSBBbGxvY2F0ZVBvb2wgKHNpemVvZg0KPiAoTVBfTVNS X0xPQ0spICogTXNyU3BpbkxvY2tDb3VudCk7DQo+ID4gLSAgICBBU1NFUlQgKG1Nc3JTcGluTG9j a3MgIT0gTlVMTCk7DQo+ID4gLSAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBNc3JTcGluTG9j a0NvdW50OyBJbmRleCsrKSB7DQo+ID4gLSAgICAgIG1Nc3JTcGluTG9ja3NbSW5kZXhdLlNwaW5M b2NrID0NCj4gPiAtICAgICAgIChTUElOX0xPQ0sgKikoKFVJTlROKW1TbW1DcHVTZW1hcGhvcmVz LlNlbWFwaG9yZU1zci5Nc3IgKw0KPiBJbmRleCAqIG1TZW1hcGhvcmVTaXplKTsNCj4gPiAtICAg ICAgbU1zclNwaW5Mb2Nrc1tJbmRleF0uTXNySW5kZXggPSAoVUlOVDMyKS0xOw0KPiA+IC0gICAg fQ0KPiA+IC0gICAgbU1zclNwaW5Mb2NrQ291bnQgPSBNc3JTcGluTG9ja0NvdW50Ow0KPiA+IC0g ICAgbVNtbUNwdVNlbWFwaG9yZXMuU2VtYXBob3JlTXNyLkF2YWlsYWJsZUNvdW50ZXIgPSAwOw0K PiA+IC0gIH0NCj4gPiAtICBpZiAoR2V0TXNyU3BpbkxvY2tCeUluZGV4IChNc3JJbmRleCkgPT0g TlVMTCkgew0KPiA+IC0gICAgLy8NCj4gPiAtICAgIC8vIEluaXRpYWxpemUgc3BpbiBsb2NrIGZv ciBNU1IgcHJvZ3JhbW1pbmcNCj4gPiAtICAgIC8vDQo+ID4gLSAgICBtTXNyU3BpbkxvY2tzW21N c3JDb3VudF0uTXNySW5kZXggPSBNc3JJbmRleDsNCj4gPiAtICAgIEluaXRpYWxpemVTcGluTG9j ayAobU1zclNwaW5Mb2Nrc1ttTXNyQ291bnRdLlNwaW5Mb2NrKTsNCj4gPiAtICAgIG1Nc3JDb3Vu dCArKzsNCj4gPiAtICAgIGlmIChtTXNyQ291bnQgPT0gbU1zclNwaW5Mb2NrQ291bnQpIHsNCj4g PiAtICAgICAgLy8NCj4gPiAtICAgICAgLy8gSWYgTVNSIHNwaW4gbG9jayBidWZmZXIgaXMgZnVs bCwgZW5sYXJnZSBpdA0KPiA+IC0gICAgICAvLw0KPiA+IC0gICAgICBBZGRlZFNpemUgPSBTSVpF XzRLQjsNCj4gPiAtICAgICAgbVNtbUNwdVNlbWFwaG9yZXMuU2VtYXBob3JlTXNyLk1zciA9DQo+ ID4gLSAgICAgICAgICAgICAgICAgICAgICAgIEFsbG9jYXRlUGFnZXMgKEVGSV9TSVpFX1RPX1BB R0VTKEFkZGVkU2l6ZSkpOw0KPiA+IC0gICAgICBBU1NFUlQgKG1TbW1DcHVTZW1hcGhvcmVzLlNl bWFwaG9yZU1zci5Nc3IgIT0gTlVMTCk7DQo+ID4gLSAgICAgIE5ld01zclNwaW5Mb2NrQ291bnQg PSBtTXNyU3BpbkxvY2tDb3VudCArIEFkZGVkU2l6ZSAvDQo+IG1TZW1hcGhvcmVTaXplOw0KPiA+ IC0gICAgICBtTXNyU3BpbkxvY2tzID0gUmVhbGxvY2F0ZVBvb2wgKA0KPiA+IC0gICAgICAgICAg ICAgICAgICAgICAgICBzaXplb2YgKE1QX01TUl9MT0NLKSAqIG1Nc3JTcGluTG9ja0NvdW50LA0K PiA+IC0gICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKE1QX01TUl9MT0NLKSAqIE5ld01z clNwaW5Mb2NrQ291bnQsDQo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgIG1Nc3JTcGluTG9j a3MNCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gPiAtICAgICAgQVNTRVJUICht TXNyU3BpbkxvY2tzICE9IE5VTEwpOw0KPiA+IC0gICAgICBtTXNyU3BpbkxvY2tDb3VudCA9IE5l d01zclNwaW5Mb2NrQ291bnQ7DQo+ID4gLSAgICAgIGZvciAoSW5kZXggPSBtTXNyQ291bnQ7IElu ZGV4IDwgbU1zclNwaW5Mb2NrQ291bnQ7IEluZGV4KyspIHsNCj4gPiAtICAgICAgICBtTXNyU3Bp bkxvY2tzW0luZGV4XS5TcGluTG9jayA9DQo+ID4gLSAgICAgICAgICAgICAgICAgKFNQSU5fTE9D Sw0KPiAqKSgoVUlOVE4pbVNtbUNwdVNlbWFwaG9yZXMuU2VtYXBob3JlTXNyLk1zciArDQo+ID4g LSAgICAgICAgICAgICAgICAgKEluZGV4IC0gbU1zckNvdW50KSAgKiBtU2VtYXBob3JlU2l6ZSk7 DQo+ID4gLSAgICAgICAgbU1zclNwaW5Mb2Nrc1tJbmRleF0uTXNySW5kZXggPSAoVUlOVDMyKS0x Ow0KPiA+IC0gICAgICB9DQo+ID4gLSAgICB9DQo+ID4gLSAgfQ0KPiA+IC19DQo+ID4gLQ0KPiA+ ICAgLyoqDQo+ID4gICAgIFN5bmMgdXAgdGhlIE1UUlIgdmFsdWVzIGZvciBhbGwgcHJvY2Vzc29y cy4NCj4gPg0KPiA+IEBAIC0yMDQsNDIgKzEyMiw4OSBAQCBSZXR1cm5zOg0KPiA+ICAgfQ0KPiA+ DQo+ID4gICAvKioNCj4gPiAtICBQcm9ncmFtcyByZWdpc3RlcnMgZm9yIHRoZSBjYWxsaW5nIHBy b2Nlc3Nvci4NCj4gPiArICBJbmNyZW1lbnQgc2VtYXBob3JlIGJ5IDEuDQo+ID4NCj4gPiAtICBU aGlzIGZ1bmN0aW9uIHByb2dyYW1zIHJlZ2lzdGVycyBmb3IgdGhlIGNhbGxpbmcgcHJvY2Vzc29y Lg0KPiA+ICsgIEBwYXJhbSAgICAgIFNlbSAgICAgICAgICAgIElOOiAgMzItYml0IHVuc2lnbmVk IGludGVnZXINCj4gPg0KPiA+IC0gIEBwYXJhbSAgUmVnaXN0ZXJUYWJsZXMgICAgICAgIFBvaW50 ZXIgdG8gcmVnaXN0ZXIgdGFibGUgb2YgdGhlIHJ1bm5pbmcNCj4gcHJvY2Vzc29yLg0KPiA+IC0g IEBwYXJhbSAgUmVnaXN0ZXJUYWJsZUNvdW50ICAgIFJlZ2lzdGVyIHRhYmxlIGNvdW50Lg0KPiA+ ICsqKi8NCj4gPiArVk9JRA0KPiA+ICtTM1JlbGVhc2VTZW1hcGhvcmUgKA0KPiA+ICsgIElOIE9V VCAgdm9sYXRpbGUgVUlOVDMyICAgICAgICAgICAqU2VtDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4g KyAgSW50ZXJsb2NrZWRJbmNyZW1lbnQgKFNlbSk7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0K PiA+ICsgIERlY3JlbWVudCB0aGUgc2VtYXBob3JlIGJ5IDEgaWYgaXQgaXMgbm90IHplcm8uDQo+ ID4gKw0KPiA+ICsgIFBlcmZvcm1zIGFuIGF0b21pYyBkZWNyZW1lbnQgb3BlcmF0aW9uIGZvciBz ZW1hcGhvcmUuDQo+ID4gKyAgVGhlIGNvbXBhcmUgZXhjaGFuZ2Ugb3BlcmF0aW9uIG11c3QgYmUg cGVyZm9ybWVkIHVzaW5nICBNUCBzYWZlDQo+ID4gKyBtZWNoYW5pc21zLg0KPiA+ICsNCj4gPiAr ICBAcGFyYW0gICAgICBTZW0gICAgICAgICAgICBJTjogIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2Vy DQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArVk9JRA0KPiA+ICtTM1dhaXRGb3JTZW1hcGhvcmUgKA0K PiA+ICsgIElOIE9VVCAgdm9sYXRpbGUgVUlOVDMyICAgICAgICAgICAqU2VtDQo+ID4gKyAgKQ0K PiA+ICt7DQo+ID4gKyAgVUlOVDMyICBWYWx1ZTsNCj4gPiArDQo+ID4gKyAgZG8gew0KPiA+ICsg ICAgVmFsdWUgPSAqU2VtOw0KPiA+ICsgIH0gd2hpbGUgKFZhbHVlID09IDApOw0KPiA+ICsNCj4g PiArICBJbnRlcmxvY2tlZERlY3JlbWVudCAoU2VtKTsNCj4gDQo+IFRoZSBjb2RlIGhlcmUgaXMg bm90IHNhZmUuIFBsZWFzZSByZWZlcmVuY2UgUmVsZWFzZVNlbWFwaG9yZSgpDQo+IGltcGxlbWVu dGF0aW9uIGluIFBpU21tQ3B1RHhlU21tL01wU2VydmljZS5jLg0KDQpZZXMsIHdpbGwgdXBkYXRl IGNvZGUgbG9naWMgaW4gbXkgbmV4dCB2ZXJzaW9uIGNoYW5nZXMuDQoNCj4gDQo+ID4gK30NCj4g PiArDQo+ID4gKy8qKg0KPiA+ICsgIEluaXRpYWxpemUgdGhlIENQVSByZWdpc3RlcnMgZnJvbSBh IHJlZ2lzdGVyIHRhYmxlLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBSZWdpc3RlclRhYmxl ICAgICAgICAgVGhlIHJlZ2lzdGVyIHRhYmxlIGZvciB0aGlzIEFQLg0KPiA+ICsgIEBwYXJhbVtp bl0gIEFwTG9jYXRpb24gICAgICAgICAgICBBUCBsb2NhdGlvbiBpbmZvIGZvciB0aGlzIGFwLg0K PiA+ICsgIEBwYXJhbVtpbl0gIENwdVN0YXR1cyAgICAgICAgICAgICBDUFUgc3RhdHVzIGluZm8g Zm9yIHRoaXMgQ1BVLg0KPiA+ICsgIEBwYXJhbVtpbl0gIENwdUZsYWdzICAgICAgICAgICAgICBG bGFncyBkYXRhIHN0cnVjdHVyZSB1c2VkIHdoZW4gcHJvZ3JhbSB0aGUNCj4gcmVnaXN0ZXIuDQo+ ID4NCj4gPiArICBAbm90ZSBUaGlzIHNlcnZpY2UgY291bGQgYmUgY2FsbGVkIGJ5IEJTUC9BUHMu DQo+ID4gICAqKi8NCj4gPiAgIFZPSUQNCj4gPiAtU2V0UHJvY2Vzc29yUmVnaXN0ZXIgKA0KPiA+ IC0gIElOIENQVV9SRUdJU1RFUl9UQUJMRSAgICAgICAgKlJlZ2lzdGVyVGFibGVzLA0KPiA+IC0g IElOIFVJTlROICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXJUYWJsZUNvdW50DQo+ID4gK0VG SUFQSQ0KPiA+ICtQcm9ncmFtUHJvY2Vzc29yUmVnaXN0ZXIgKA0KPiA+ICsgIElOIENQVV9SRUdJ U1RFUl9UQUJMRSAgICAgICAgICAgKlJlZ2lzdGVyVGFibGUsDQo+ID4gKyAgSU4gRUZJX0NQVV9Q SFlTSUNBTF9MT0NBVElPTiAgICAqQXBMb2NhdGlvbiwNCj4gPiArICBJTiBDUFVfU1RBVFVTX0lO Rk9STUFUSU9OICAgICAgICpDcHVTdGF0dXMsDQo+ID4gKyAgSU4gUFJPR1JBTV9DUFVfUkVHSVNU RVJfRkxBR1MgICAqQ3B1RmxhZ3MNCj4gPiAgICAgKQ0KPiA+ICAgew0KPiA+ICAgICBDUFVfUkVH SVNURVJfVEFCTEVfRU5UUlkgICpSZWdpc3RlclRhYmxlRW50cnk7DQo+ID4gICAgIFVJTlROICAg ICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ID4gICAgIFVJTlROICAgICAgICAgICAgICAgICAg ICAgVmFsdWU7DQo+ID4gLSAgU1BJTl9MT0NLICAgICAgICAgICAgICAgICAqTXNyU3BpbkxvY2s7 DQo+ID4gLSAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBJbml0QXBpY0lkOw0KPiA+IC0gIENQ VV9SRUdJU1RFUl9UQUJMRSAgICAgICAgKlJlZ2lzdGVyVGFibGU7DQo+ID4gKyAgQ1BVX1JFR0lT VEVSX1RBQkxFX0VOVFJZICAqUmVnaXN0ZXJUYWJsZUVudHJ5SGVhZDsNCj4gPiArICB2b2xhdGls ZSBVSU5UMzIgICAgICAgICAgICpTZW1hcGhvcmVQdHI7DQo+ID4gKyAgVUlOVDMyICAgICAgICAg ICAgICAgICAgICBDb3JlT2Zmc2V0Ow0KPiA+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAg UGFja2FnZU9mZnNldDsNCj4gPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VU aHJlYWRzQ291bnQ7DQo+ID4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBBcE9mZnNldDsN Cj4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIFByb2Nlc3NvckluZGV4Ow0KPiA+ICsg IFVJTlROICAgICAgICAgICAgICAgICAgICAgQXBJbmRleDsNCj4gPiArICBVSU5UTiAgICAgICAg ICAgICAgICAgICAgIFZhbGlkQXBDb3VudDsNCj4gPg0KPiA+IC0gIEluaXRBcGljSWQgPSBHZXRJ bml0aWFsQXBpY0lkICgpOw0KPiA+IC0gIFJlZ2lzdGVyVGFibGUgPSBOVUxMOw0KPiA+IC0gIGZv ciAoSW5kZXggPSAwOyBJbmRleCA8IFJlZ2lzdGVyVGFibGVDb3VudDsgSW5kZXgrKykgew0KPiA+ IC0gICAgaWYgKFJlZ2lzdGVyVGFibGVzW0luZGV4XS5Jbml0aWFsQXBpY0lkID09IEluaXRBcGlj SWQpIHsNCj4gPiAtICAgICAgUmVnaXN0ZXJUYWJsZSA9ICAmUmVnaXN0ZXJUYWJsZXNbSW5kZXhd Ow0KPiA+IC0gICAgICBicmVhazsNCj4gPiAtICAgIH0NCj4gPiAtICB9DQo+ID4gLSAgQVNTRVJU IChSZWdpc3RlclRhYmxlICE9IE5VTEwpOw0KPiA+ICsgIEFwSW5kZXggPSBBcExvY2F0aW9uLT5Q YWNrYWdlICogQ3B1U3RhdHVzLT5Db3JlQ291bnQgKiBDcHVTdGF0dXMtDQo+ID5UaHJlYWRDb3Vu dCBcDQo+ID4gKyAgICAgICAgICAgICsgQXBMb2NhdGlvbi0+Q29yZSAqIENwdVN0YXR1cy0+VGhy ZWFkQ291bnQgXA0KPiA+ICsgICAgICAgICAgICArIEFwTG9jYXRpb24tPlRocmVhZDsNCj4gUGxl YXNlIGF2b2lkIHVzaW5nIEFQLiBVc2UgVGhyZWFkIGluc3RlYWQuDQoNCkdvdCBpdC4gV2lsbCB1 c2UgdGhyZWFkIGZvciBjb25zaXN0ZW50Lg0KPiA+DQo+ID4gICAgIC8vDQo+ID4gICAgIC8vIFRy YXZlcnNlIFJlZ2lzdGVyIFRhYmxlIG9mIHRoaXMgbG9naWNhbCBwcm9jZXNzb3INCj4gPiAgICAg Ly8NCj4gPiAtICBSZWdpc3RlclRhYmxlRW50cnkgPSAoQ1BVX1JFR0lTVEVSX1RBQkxFX0VOVFJZ ICopIChVSU5UTikNCj4gPiBSZWdpc3RlclRhYmxlLT5SZWdpc3RlclRhYmxlRW50cnk7DQo+ID4g LSAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgUmVnaXN0ZXJUYWJsZS0+VGFibGVMZW5ndGg7IElu ZGV4KyssDQo+ID4gUmVnaXN0ZXJUYWJsZUVudHJ5KyspIHsNCj4gPiArICBSZWdpc3RlclRhYmxl RW50cnlIZWFkID0gKENQVV9SRUdJU1RFUl9UQUJMRV9FTlRSWSAqKSAoVUlOVE4pDQo+ID4gKyBS ZWdpc3RlclRhYmxlLT5SZWdpc3RlclRhYmxlRW50cnk7DQo+ID4gKw0KPiA+ICsgIGZvciAoSW5k ZXggPSAwOyBJbmRleCA8IFJlZ2lzdGVyVGFibGUtPlRhYmxlTGVuZ3RoOyBJbmRleCsrKSB7DQo+ ID4gKw0KPiA+ICsgICAgUmVnaXN0ZXJUYWJsZUVudHJ5ID0gJlJlZ2lzdGVyVGFibGVFbnRyeUhl YWRbSW5kZXhdOw0KPiA+ICsgICAgREVCVUcgKChERUJVR19JTkZPLCAiUHJvY2Vzc29yID0gJWQs IEVudHJ5IEluZGV4ICVkLCBUeXBlID0NCj4gPiArICVkIVxuIiwgQXBJbmRleCwgSW5kZXgsIFJl Z2lzdGVyVGFibGVFbnRyeS0+UmVnaXN0ZXJUeXBlKSk7DQo+IA0KPiBQbGVhc2UgZHVtcCB0aGUg cmVnaXN0ZXIgdHlwZSBhcyBzdHJpbmcuDQoNClllcywgd2lsbCB1cGRhdGUgaW4gbXkgbmV4dCB2 ZXJzaW9uIGNoYW5nZXMuDQoNCj4gDQo+ID4gKw0KPiA+ICAgICAgIC8vDQo+ID4gICAgICAgLy8g Q2hlY2sgdGhlIHR5cGUgb2Ygc3BlY2lmaWVkIHJlZ2lzdGVyDQo+ID4gICAgICAgLy8NCj4gPiBA QCAtMzEwLDEyICsyNzUsNiBAQCBTZXRQcm9jZXNzb3JSZWdpc3RlciAoDQo+ID4gICAgICAgICAg ICAgUmVnaXN0ZXJUYWJsZUVudHJ5LT5WYWx1ZQ0KPiA+ICAgICAgICAgICAgICk7DQo+ID4gICAg ICAgICB9IGVsc2Ugew0KPiA+IC0gICAgICAgIC8vDQo+ID4gLSAgICAgICAgLy8gR2V0IGxvY2sg dG8gYXZvaWQgUGFja2FnZS9Db3JlIHNjb3BlIE1TUnMgcHJvZ3JhbW1pbmcgaXNzdWUgaW4NCj4g cGFyYWxsZWwgZXhlY3V0aW9uIG1vZGUNCj4gPiAtICAgICAgICAvLyB0byBtYWtlIHN1cmUgTVNS IHJlYWQvd3JpdGUgb3BlcmF0aW9uIGlzIGF0b21pYy4NCj4gPiAtICAgICAgICAvLw0KPiA+IC0g ICAgICAgIE1zclNwaW5Mb2NrID0gR2V0TXNyU3BpbkxvY2tCeUluZGV4IChSZWdpc3RlclRhYmxl RW50cnktPkluZGV4KTsNCj4gPiAtICAgICAgICBBY3F1aXJlU3BpbkxvY2sgKE1zclNwaW5Mb2Nr KTsNCj4gPiAgICAgICAgICAgLy8NCj4gPiAgICAgICAgICAgLy8gU2V0IHRoZSBiaXQgc2VjdGlv biBhY2NvcmRpbmcgdG8gYml0IHN0YXJ0IGFuZCBsZW5ndGgNCj4gPiAgICAgICAgICAgLy8NCj4g PiBAQCAtMzI1LDIxICsyODQsMjAgQEAgU2V0UHJvY2Vzc29yUmVnaXN0ZXIgKA0KPiA+ICAgICAg ICAgICAgIFJlZ2lzdGVyVGFibGVFbnRyeS0+VmFsaWRCaXRTdGFydCArIFJlZ2lzdGVyVGFibGVF bnRyeS0NCj4gPlZhbGlkQml0TGVuZ3RoIC0gMSwNCj4gPiAgICAgICAgICAgICBSZWdpc3RlclRh YmxlRW50cnktPlZhbHVlDQo+ID4gICAgICAgICAgICAgKTsNCj4gPiAtICAgICAgICBSZWxlYXNl U3BpbkxvY2sgKE1zclNwaW5Mb2NrKTsNCj4gPiAgICAgICAgIH0NCj4gPiAgICAgICAgIGJyZWFr Ow0KPiA+ICAgICAgIC8vDQo+ID4gICAgICAgLy8gTWVtb3J5TWFwcGVkIG9wZXJhdGlvbnMNCj4g PiAgICAgICAvLw0KPiA+ICAgICAgIGNhc2UgTWVtb3J5TWFwcGVkOg0KPiA+IC0gICAgICBBY3F1 aXJlU3BpbkxvY2sgKG1NZW1vcnlNYXBwZWRMb2NrKTsNCj4gPiArICAgICAgQWNxdWlyZVNwaW5M b2NrICgmQ3B1RmxhZ3MtPk1lbW9yeU1hcHBlZExvY2spOw0KPiA+ICAgICAgICAgTW1pb0JpdEZp ZWxkV3JpdGUzMiAoDQo+ID4gICAgICAgICAgIChVSU5UTikoUmVnaXN0ZXJUYWJsZUVudHJ5LT5J bmRleCB8IExTaGlmdFU2NCAoUmVnaXN0ZXJUYWJsZUVudHJ5LQ0KPiA+SGlnaEluZGV4LCAzMikp LA0KPiA+ICAgICAgICAgICBSZWdpc3RlclRhYmxlRW50cnktPlZhbGlkQml0U3RhcnQsDQo+ID4g ICAgICAgICAgIFJlZ2lzdGVyVGFibGVFbnRyeS0+VmFsaWRCaXRTdGFydCArIFJlZ2lzdGVyVGFi bGVFbnRyeS0NCj4gPlZhbGlkQml0TGVuZ3RoIC0gMSwNCj4gPiAgICAgICAgICAgKFVJTlQzMilS ZWdpc3RlclRhYmxlRW50cnktPlZhbHVlDQo+ID4gICAgICAgICAgICk7DQo+ID4gLSAgICAgIFJl bGVhc2VTcGluTG9jayAobU1lbW9yeU1hcHBlZExvY2spOw0KPiA+ICsgICAgICBSZWxlYXNlU3Bp bkxvY2sgKCZDcHVGbGFncy0+TWVtb3J5TWFwcGVkTG9jayk7DQo+ID4gICAgICAgICBicmVhazsN Cj4gPiAgICAgICAvLw0KPiA+ICAgICAgIC8vIEVuYWJsZSBvciBkaXNhYmxlIGNhY2hlDQo+ID4g QEAgLTM1NSwxMiArMzEzLDk5IEBAIFNldFByb2Nlc3NvclJlZ2lzdGVyICgNCj4gPiAgICAgICAg IH0NCj4gPiAgICAgICAgIGJyZWFrOw0KPiA+DQo+ID4gKyAgICBjYXNlIFNlbWFwaG9yZToNCj4g DQo+IFBsZWFzZSByZWZlciB0byB0aGUgY29tbWVudCB0byBwYXRjaCAjMy4NCg0KR290IGl0Lg0K DQo+IA0KPiA+ICsgICAgICBTZW1hcGhvcmVQdHIgPSBDcHVGbGFncy0+U2VtYXBob3JlQ291bnQ7 DQo+ID4gKyAgICAgIHN3aXRjaCAoUmVnaXN0ZXJUYWJsZUVudHJ5LT5WYWx1ZSkgew0KPiA+ICsg ICAgICBjYXNlIENvcmVEZXBUeXBlOg0KPiA+ICsgICAgICAgIENvcmVPZmZzZXQgPSAoQXBMb2Nh dGlvbi0+UGFja2FnZSAqIENwdVN0YXR1cy0+Q29yZUNvdW50ICsNCj4gQXBMb2NhdGlvbi0+Q29y ZSkgKiBDcHVTdGF0dXMtPlRocmVhZENvdW50Ow0KPiA+ICsgICAgICAgIEFwT2Zmc2V0ID0gQ29y ZU9mZnNldCArIEFwTG9jYXRpb24tPlRocmVhZDsNCj4gPiArICAgICAgICAvLw0KPiA+ICsgICAg ICAgIC8vIEZpcnN0IGluY3JlYXNlIHNlbWFwaG9yZSBjb3VudCBieSAxIGZvciBwcm9jZXNzb3Jz IGluIHRoaXMgY29yZS4NCj4gPiArICAgICAgICAvLw0KPiA+ICsgICAgICAgIGZvciAoUHJvY2Vz c29ySW5kZXggPSAwOyBQcm9jZXNzb3JJbmRleCA8IENwdVN0YXR1cy0+VGhyZWFkQ291bnQ7DQo+ IFByb2Nlc3NvckluZGV4ICsrKSB7DQo+ID4gKyAgICAgICAgICBTM1JlbGVhc2VTZW1hcGhvcmUg KChVSU5UMzIgKikgJlNlbWFwaG9yZVB0cltDb3JlT2Zmc2V0ICsNCj4gUHJvY2Vzc29ySW5kZXhd KTsNCj4gPiArICAgICAgICB9DQo+ID4gKyAgICAgICAgLy8NCj4gPiArICAgICAgICAvLyBTZWNv bmQsIGNoZWNrIHdoZXRoZXIgdGhlIGNvdW50IGhhcyByZWFjaCB0aGUgY2hlY2sgbnVtYmVyLg0K PiA+ICsgICAgICAgIC8vDQo+ID4gKyAgICAgICAgZm9yIChQcm9jZXNzb3JJbmRleCA9IDA7IFBy b2Nlc3NvckluZGV4IDwgQ3B1U3RhdHVzLT5UaHJlYWRDb3VudDsNCj4gUHJvY2Vzc29ySW5kZXgg KyspIHsNCj4gPiArICAgICAgICAgIFMzV2FpdEZvclNlbWFwaG9yZSAoJlNlbWFwaG9yZVB0cltB cE9mZnNldF0pOw0KPiA+ICsgICAgICAgIH0NCj4gPiArICAgICAgICBicmVhazsNCj4gPiArDQo+ ID4gKyAgICAgIGNhc2UgUGFja2FnZURlcFR5cGU6DQo+ID4gKyAgICAgICAgUGFja2FnZU9mZnNl dCA9IEFwTG9jYXRpb24tPlBhY2thZ2UgKiBDcHVTdGF0dXMtPkNvcmVDb3VudCAqDQo+IENwdVN0 YXR1cy0+VGhyZWFkQ291bnQ7DQo+ID4gKyAgICAgICAgUGFja2FnZVRocmVhZHNDb3VudCA9IENw dVN0YXR1cy0+VGhyZWFkQ291bnQgKiBDcHVTdGF0dXMtDQo+ID5Db3JlQ291bnQ7DQo+ID4gKyAg ICAgICAgQXBPZmZzZXQgPSBQYWNrYWdlT2Zmc2V0ICsgQ3B1U3RhdHVzLT5UaHJlYWRDb3VudCAq IEFwTG9jYXRpb24tDQo+ID5Db3JlICsgQXBMb2NhdGlvbi0+VGhyZWFkOw0KPiA+ICsgICAgICAg IFZhbGlkQXBDb3VudCA9IENwdVN0YXR1cy0+VGhyZWFkQ291bnQgKiBDcHVTdGF0dXMtDQo+ID5W YWxpZENvcmVzSW5QYWNrYWdlc1tBcExvY2F0aW9uLT5QYWNrYWdlXTsNCj4gPiArICAgICAgICAv Lw0KPiA+ICsgICAgICAgIC8vIEZpcnN0IGluY3JlYXNlIHNlbWFwaG9yZSBjb3VudCBieSAxIGZv ciBwcm9jZXNzb3JzIGluIHRoaXMgcGFja2FnZS4NCj4gPiArICAgICAgICAvLw0KPiA+ICsgICAg ICAgIGZvciAoUHJvY2Vzc29ySW5kZXggPSAwOyBQcm9jZXNzb3JJbmRleCA8IFBhY2thZ2VUaHJl YWRzQ291bnQgOw0KPiBQcm9jZXNzb3JJbmRleCArKykgew0KPiA+ICsgICAgICAgICAgUzNSZWxl YXNlU2VtYXBob3JlICgoVUlOVDMyICopICZTZW1hcGhvcmVQdHJbUGFja2FnZU9mZnNldCArDQo+ IFByb2Nlc3NvckluZGV4XSk7DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsgICAgICAgIC8vDQo+ID4g KyAgICAgICAgLy8gU2Vjb25kLCBjaGVjayB3aGV0aGVyIHRoZSBjb3VudCBoYXMgcmVhY2ggdGhl IGNoZWNrIG51bWJlci4NCj4gPiArICAgICAgICAvLw0KPiA+ICsgICAgICAgIGZvciAoUHJvY2Vz c29ySW5kZXggPSAwOyBQcm9jZXNzb3JJbmRleCA8IFZhbGlkQXBDb3VudDsNCj4gUHJvY2Vzc29y SW5kZXggKyspIHsNCj4gPiArICAgICAgICAgIFMzV2FpdEZvclNlbWFwaG9yZSAoJlNlbWFwaG9y ZVB0cltBcE9mZnNldF0pOw0KPiA+ICsgICAgICAgIH0NCj4gPiArICAgICAgICBicmVhazsNCj4g PiArDQo+ID4gKyAgICAgIGRlZmF1bHQ6DQo+ID4gKyAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAg IH0NCj4gPiArICAgICAgYnJlYWs7DQo+ID4gKw0KPiA+ICAgICAgIGRlZmF1bHQ6DQo+ID4gICAg ICAgICBicmVhazsNCj4gPiAgICAgICB9DQo+ID4gICAgIH0NCj4gPiAgIH0NCj4gPg0KPiA+ICsv KioNCj4gPiArDQo+ID4gKyAgU2V0IFByb2Nlc3NvciByZWdpc3RlciBmb3Igb25lIEFQLg0KPiA+ ICsNCj4gPiArICBAcGFyYW0gICAgIFNtbVByZVJlZ2lzdGVyVGFibGUgICAgIFVzZSBwcmUgcmVn aXN0ZXIgdGFibGUgb3IgcmVnaXN0ZXINCj4gdGFibGUuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiAr Vk9JRA0KPiA+ICtTZXRSZWdpc3RlciAoDQo+ID4gKyAgSU4gQk9PTEVBTiAgICAgICAgICAgICAg ICAgU21tUHJlUmVnaXN0ZXJUYWJsZQ0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIENQVV9SRUdJ U1RFUl9UQUJMRSAgICAgICAgKlJlZ2lzdGVyVGFibGU7DQo+ID4gKyAgQ1BVX1JFR0lTVEVSX1RB QkxFICAgICAgICAqUmVnaXN0ZXJUYWJsZXM7DQo+ID4gKyAgVUlOVDMyICAgICAgICAgICAgICAg ICAgICBJbml0QXBpY0lkOw0KPiA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgUHJvY0lu ZGV4Ow0KPiA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ID4gKw0KPiA+ ICsgIGlmIChTbW1QcmVSZWdpc3RlclRhYmxlKSB7DQo+ID4gKyAgICBSZWdpc3RlclRhYmxlcyA9 IChDUFVfUkVHSVNURVJfVEFCTEUNCj4gPiArICopKFVJTlROKW1BY3BpQ3B1RGF0YS5QcmVTbW1J bml0UmVnaXN0ZXJUYWJsZTsNCj4gPiArICB9IGVsc2Ugew0KPiA+ICsgICAgUmVnaXN0ZXJUYWJs ZXMgPSAoQ1BVX1JFR0lTVEVSX1RBQkxFDQo+ID4gKyAqKShVSU5UTiltQWNwaUNwdURhdGEuUmVn aXN0ZXJUYWJsZTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIEluaXRBcGljSWQgPSBHZXRJbml0 aWFsQXBpY0lkICgpOw0KPiA+ICsgIFJlZ2lzdGVyVGFibGUgPSBOVUxMOw0KPiA+ICsgIGZvciAo SW5kZXggPSAwOyBJbmRleCA8IG1BY3BpQ3B1RGF0YS5OdW1iZXJPZkNwdXM7IEluZGV4KyspIHsN Cj4gPiArICAgIGlmIChSZWdpc3RlclRhYmxlc1tJbmRleF0uSW5pdGlhbEFwaWNJZCA9PSBJbml0 QXBpY0lkKSB7DQo+ID4gKyAgICAgIFJlZ2lzdGVyVGFibGUgPSAgJlJlZ2lzdGVyVGFibGVzW0lu ZGV4XTsNCj4gPiArICAgICAgUHJvY0luZGV4ID0gSW5kZXg7DQo+ID4gKyAgICAgIGJyZWFrOw0K PiA+ICsgICAgfQ0KPiA+ICsgIH0NCj4gPiArICBBU1NFUlQgKFJlZ2lzdGVyVGFibGUgIT0gTlVM TCk7DQo+ID4gKw0KPiA+ICsgIFByb2dyYW1Qcm9jZXNzb3JSZWdpc3RlciAoDQo+ID4gKyAgICBS ZWdpc3RlclRhYmxlLA0KPiA+ICsgICAgbUFjcGlDcHVEYXRhLkFwTG9jYXRpb24gKyBQcm9jSW5k ZXgsDQo+ID4gKyAgICAmbUFjcGlDcHVEYXRhLkNwdVN0YXR1cywNCj4gPiArICAgICZtQ3B1Rmxh Z3MNCj4gPiArICAgICk7DQo+ID4gK30NCj4gPiArDQo+ID4gICAvKioNCj4gPiAgICAgQVAgaW5p dGlhbGl6YXRpb24gYmVmb3JlIHRoZW4gYWZ0ZXIgU01CQVNFIHJlbG9jYXRpb24gaW4gdGhlIFMz IGJvb3QgcGF0aC4NCj4gPiAgICoqLw0KPiA+IEBAIC0zNzQsNyArNDE5LDcgQEAgSW5pdGlhbGl6 ZUFwICgNCj4gPg0KPiA+ICAgICBMb2FkTXRyckRhdGEgKG1BY3BpQ3B1RGF0YS5NdHJyVGFibGUp Ow0KPiA+DQo+ID4gLSAgU2V0UHJvY2Vzc29yUmVnaXN0ZXIgKChDUFVfUkVHSVNURVJfVEFCTEUg KikgKFVJTlROKQ0KPiA+IG1BY3BpQ3B1RGF0YS5QcmVTbW1Jbml0UmVnaXN0ZXJUYWJsZSwgbUFj cGlDcHVEYXRhLk51bWJlck9mQ3B1cyk7DQo+ID4gKyAgU2V0UmVnaXN0ZXIgKFRSVUUpOw0KPiA+ DQo+ID4gICAgIC8vDQo+ID4gICAgIC8vIENvdW50IGRvd24gdGhlIG51bWJlciB3aXRoIGxvY2sg bWVjaGFuaXNtLg0KPiA+IEBAIC0zOTEsNyArNDM2LDcgQEAgSW5pdGlhbGl6ZUFwICgNCj4gPiAg ICAgUHJvZ3JhbVZpcnR1YWxXaXJlTW9kZSAoKTsNCj4gPiAgICAgRGlzYWJsZUx2dEludGVycnVw dHMgKCk7DQo+ID4NCj4gPiAtICBTZXRQcm9jZXNzb3JSZWdpc3RlciAoKENQVV9SRUdJU1RFUl9U QUJMRSAqKSAoVUlOVE4pDQo+ID4gbUFjcGlDcHVEYXRhLlJlZ2lzdGVyVGFibGUsIG1BY3BpQ3B1 RGF0YS5OdW1iZXJPZkNwdXMpOw0KPiA+ICsgIFNldFJlZ2lzdGVyIChGQUxTRSk7DQo+ID4NCj4g PiAgICAgLy8NCj4gPiAgICAgLy8gUGxhY2UgQVAgaW50byB0aGUgc2FmZSBjb2RlLCBjb3VudCBk b3duIHRoZSBudW1iZXIgd2l0aCBsb2NrDQo+IG1lY2hhbmlzbSBpbiB0aGUgc2FmZSBjb2RlLg0K PiA+IEBAIC00NjYsNyArNTExLDcgQEAgSW5pdGlhbGl6ZUNwdUJlZm9yZVJlYmFzZSAoDQo+ID4g ICB7DQo+ID4gICAgIExvYWRNdHJyRGF0YSAobUFjcGlDcHVEYXRhLk10cnJUYWJsZSk7DQo+ID4N Cj4gPiAtICBTZXRQcm9jZXNzb3JSZWdpc3RlciAoKENQVV9SRUdJU1RFUl9UQUJMRSAqKSAoVUlO VE4pDQo+ID4gbUFjcGlDcHVEYXRhLlByZVNtbUluaXRSZWdpc3RlclRhYmxlLCBtQWNwaUNwdURh dGEuTnVtYmVyT2ZDcHVzKTsNCj4gPiArICBTZXRSZWdpc3RlciAoVFJVRSk7DQo+ID4NCj4gPiAg ICAgUHJvZ3JhbVZpcnR1YWxXaXJlTW9kZSAoKTsNCj4gPg0KPiA+IEBAIC01MDIsOCArNTQ3LDYg QEAgSW5pdGlhbGl6ZUNwdUFmdGVyUmViYXNlICgNCj4gPiAgICAgVk9JRA0KPiA+ICAgICApDQo+ ID4gICB7DQo+ID4gLSAgU2V0UHJvY2Vzc29yUmVnaXN0ZXIgKChDUFVfUkVHSVNURVJfVEFCTEUg KikgKFVJTlROKQ0KPiA+IG1BY3BpQ3B1RGF0YS5SZWdpc3RlclRhYmxlLCBtQWNwaUNwdURhdGEu TnVtYmVyT2ZDcHVzKTsNCj4gPiAtDQo+ID4gICAgIG1OdW1iZXJUb0ZpbmlzaCA9IG1BY3BpQ3B1 RGF0YS5OdW1iZXJPZkNwdXMgLSAxOw0KPiA+DQo+ID4gICAgIC8vDQo+ID4gQEAgLTUxMSw2ICs1 NTQsOCBAQCBJbml0aWFsaXplQ3B1QWZ0ZXJSZWJhc2UgKA0KPiA+ICAgICAvLw0KPiA+ICAgICBt SW5pdEFwc0FmdGVyU21tQmFzZVJlbG9jID0gVFJVRTsNCj4gPg0KPiA+ICsgIFNldFJlZ2lzdGVy IChGQUxTRSk7DQo+ID4gKw0KPiA+ICAgICB3aGlsZSAobU51bWJlclRvRmluaXNoID4gMCkgew0K PiA+ICAgICAgIENwdVBhdXNlICgpOw0KPiA+ICAgICB9DQo+ID4gQEAgLTU3NCw4ICs2MTksNiBA QCBTbW1SZXN0b3JlQ3B1ICgNCj4gPg0KPiA+ICAgICBtU21tUzNGbGFnID0gVFJVRTsNCj4gPg0K PiA+IC0gIEluaXRpYWxpemVTcGluTG9jayAobU1lbW9yeU1hcHBlZExvY2spOw0KPiA+IC0NCj4g PiAgICAgLy8NCj4gPiAgICAgLy8gU2VlIGlmIHRoZXJlIGlzIGVub3VnaCBjb250ZXh0IHRvIHJl c3VtZSBQRUkgUGhhc2UNCj4gPiAgICAgLy8NCj4gPiBAQCAtNzkwLDcgKzgzMyw2IEBAIENvcHlS ZWdpc3RlclRhYmxlICgNCj4gPiAgICAgKQ0KPiA+ICAgew0KPiA+ICAgICBVSU5UTiAgICAgICAg ICAgICAgICAgICAgICBJbmRleDsNCj4gPiAtICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICBJ bmRleDE7DQo+ID4gICAgIENQVV9SRUdJU1RFUl9UQUJMRV9FTlRSWSAgICpSZWdpc3RlclRhYmxl RW50cnk7DQo+ID4NCj4gPiAgICAgQ29weU1lbSAoRGVzdGluYXRpb25SZWdpc3RlclRhYmxlTGlz dCwgU291cmNlUmVnaXN0ZXJUYWJsZUxpc3QsDQo+ID4gTnVtYmVyT2ZDcHVzICogc2l6ZW9mIChD UFVfUkVHSVNURVJfVEFCTEUpKTsgQEAgLTgwMiwxNyArODQ0LDYgQEANCj4gQ29weVJlZ2lzdGVy VGFibGUgKA0KPiA+ICAgICAgICAgICApOw0KPiA+ICAgICAgICAgQVNTRVJUIChSZWdpc3RlclRh YmxlRW50cnkgIT0gTlVMTCk7DQo+ID4gICAgICAgICBEZXN0aW5hdGlvblJlZ2lzdGVyVGFibGVM aXN0W0luZGV4XS5SZWdpc3RlclRhYmxlRW50cnkgPQ0KPiAoRUZJX1BIWVNJQ0FMX0FERFJFU1Mp KFVJTlROKVJlZ2lzdGVyVGFibGVFbnRyeTsNCj4gPiAtICAgICAgLy8NCj4gPiAtICAgICAgLy8g R28gdGhvdWdoIGFsbCBNU1JzIGluIHJlZ2lzdGVyIHRhYmxlIHRvIGluaXRpYWxpemUgTVNSIHNw aW4gbG9jaw0KPiA+IC0gICAgICAvLw0KPiA+IC0gICAgICBmb3IgKEluZGV4MSA9IDA7IEluZGV4 MSA8DQo+IERlc3RpbmF0aW9uUmVnaXN0ZXJUYWJsZUxpc3RbSW5kZXhdLlRhYmxlTGVuZ3RoOyBJ bmRleDErKywNCj4gUmVnaXN0ZXJUYWJsZUVudHJ5KyspIHsNCj4gPiAtICAgICAgICBpZiAoKFJl Z2lzdGVyVGFibGVFbnRyeS0+UmVnaXN0ZXJUeXBlID09IE1zcikgJiYNCj4gKFJlZ2lzdGVyVGFi bGVFbnRyeS0+VmFsaWRCaXRMZW5ndGggPCA2NCkpIHsNCj4gPiAtICAgICAgICAgIC8vDQo+ID4g LSAgICAgICAgICAvLyBJbml0aWFsaXplIE1TUiBzcGluIGxvY2sgb25seSBmb3IgdGhvc2UgTVNS cyBuZWVkIGJpdCBmaWVsZCB3cml0aW5nDQo+ID4gLSAgICAgICAgICAvLw0KPiA+IC0gICAgICAg ICAgSW5pdE1zclNwaW5Mb2NrQnlJbmRleCAoUmVnaXN0ZXJUYWJsZUVudHJ5LT5JbmRleCk7DQo+ ID4gLSAgICAgICAgfQ0KPiA+IC0gICAgICB9DQo+ID4gICAgICAgfQ0KPiA+ICAgICB9DQo+ID4g ICB9DQo+ID4gQEAgLTgzMiw2ICs4NjMsNyBAQCBHZXRBY3BpQ3B1RGF0YSAoDQo+ID4gICAgIFZP SUQgICAgICAgICAgICAgICAgICAgICAgICpHZHRGb3JBcDsNCj4gPiAgICAgVk9JRCAgICAgICAg ICAgICAgICAgICAgICAgKklkdEZvckFwOw0KPiA+ICAgICBWT0lEICAgICAgICAgICAgICAgICAg ICAgICAqTWFjaGluZUNoZWNrSGFuZGxlckZvckFwOw0KPiA+ICsgIENQVV9TVEFUVVNfSU5GT1JN QVRJT04gICAgICpDcHVTdGF0dXM7DQo+ID4NCj4gPiAgICAgaWYgKCFtQWNwaVMzRW5hYmxlKSB7 DQo+ID4gICAgICAgcmV0dXJuOw0KPiA+IEBAIC05MDYsNiArOTM4LDE2IEBAIEdldEFjcGlDcHVE YXRhICgNCj4gPiAgICAgR2R0ci0+QmFzZSA9IChVSU5UTilHZHRGb3JBcDsNCj4gPiAgICAgSWR0 ci0+QmFzZSA9IChVSU5UTilJZHRGb3JBcDsNCj4gPiAgICAgbUFjcGlDcHVEYXRhLkFwTWFjaGlu ZUNoZWNrSGFuZGxlckJhc2UgPQ0KPiA+IChFRklfUEhZU0lDQUxfQUREUkVTUykoVUlOVE4pTWFj aGluZUNoZWNrSGFuZGxlckZvckFwOw0KPiA+ICsNCj4gPiArICBDcHVTdGF0dXMgPSAmbUFjcGlD cHVEYXRhLkNwdVN0YXR1czsgIENvcHlNZW0gKENwdVN0YXR1cywNCj4gPiArICZBY3BpQ3B1RGF0 YS0+Q3B1U3RhdHVzLCBzaXplb2YgKENQVV9TVEFUVVNfSU5GT1JNQVRJT04pKTsNCj4gPiArIENw dVN0YXR1cy0+VmFsaWRDb3Jlc0luUGFja2FnZXMgPSBBbGxvY2F0ZUNvcHlQb29sIChzaXplb2Yg KFVJTlQzMikNCj4gPiArICogQ3B1U3RhdHVzLT5QYWNrYWdlQ291bnQsDQo+ID4gKyBBY3BpQ3B1 RGF0YS0+Q3B1U3RhdHVzLlZhbGlkQ29yZXNJblBhY2thZ2VzKTsNCj4gPiArICBBU1NFUlQgKENw dVN0YXR1cy0+VmFsaWRDb3Jlc0luUGFja2FnZXMgIT0gTlVMTCk7DQo+ID4gKyBtQWNwaUNwdURh dGEuQXBMb2NhdGlvbiA9IEFsbG9jYXRlQ29weVBvb2wNCj4gPiArIChtQWNwaUNwdURhdGEuTnVt YmVyT2ZDcHVzICogc2l6ZW9mIChFRklfQ1BVX1BIWVNJQ0FMX0xPQ0FUSU9OKSwNCj4gPiArIEFj cGlDcHVEYXRhLT5BcExvY2F0aW9uKTsgIEFTU0VSVCAobUFjcGlDcHVEYXRhLkFwTG9jYXRpb24g IT0gTlVMTCk7DQo+ID4gKyAgSW5pdGlhbGl6ZVNwaW5Mb2NrKChTUElOX0xPQ0sqKSAmbUNwdUZs YWdzLk1lbW9yeU1hcHBlZExvY2spOw0KPiA+ICsgbUNwdUZsYWdzLlNlbWFwaG9yZUNvdW50ID0g QWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChVSU5UMzIpICoNCj4gPiArIENwdVN0YXR1cy0+UGFj a2FnZUNvdW50ICogQ3B1U3RhdHVzLT5Db3JlQ291bnQgKg0KPiA+ICsgQ3B1U3RhdHVzLT5UaHJl YWRDb3VudCk7ICBBU1NFUlQgKG1DcHVGbGFncy5TZW1hcGhvcmVDb3VudCAhPQ0KPiBOVUxMKTsN Cj4gPiAgIH0NCj4gPg0KPiA+ICAgLyoqDQo+ID4gZGlmZiAtLWdpdCBhL1VlZmlDcHVQa2cvUGlT bW1DcHVEeGVTbW0vTXBTZXJ2aWNlLmMNCj4gPiBiL1VlZmlDcHVQa2cvUGlTbW1DcHVEeGVTbW0v TXBTZXJ2aWNlLmMNCj4gPiBpbmRleCA5Y2Y1MDhhNWM3Li40MmIwNDA1MzFlIDEwMDY0NA0KPiA+ IC0tLSBhL1VlZmlDcHVQa2cvUGlTbW1DcHVEeGVTbW0vTXBTZXJ2aWNlLmMNCj4gPiArKysgYi9V ZWZpQ3B1UGtnL1BpU21tQ3B1RHhlU21tL01wU2VydmljZS5jDQo+ID4gQEAgLTEzMDMsOCArMTMw Myw2IEBAIEluaXRpYWxpemVTbW1DcHVTZW1hcGhvcmVzICgNCj4gPiAgICAgbVNtbUNwdVNlbWFw aG9yZXMuU2VtYXBob3JlR2xvYmFsLkNvZGVBY2Nlc3NDaGVja0xvY2sNCj4gPiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAoU1BJTl9MT0NLICop U2VtYXBob3JlQWRkcjsNCj4gPiAgICAgU2VtYXBob3JlQWRkciArPSBTZW1hcGhvcmVTaXplOw0K PiA+IC0gIG1TbW1DcHVTZW1hcGhvcmVzLlNlbWFwaG9yZUdsb2JhbC5NZW1vcnlNYXBwZWRMb2Nr DQo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg PSAoU1BJTl9MT0NLICopU2VtYXBob3JlQWRkcjsNCj4gPg0KPiA+ICAgICBTZW1hcGhvcmVBZGRy ID0gKFVJTlROKVNlbWFwaG9yZUJsb2NrICsgR2xvYmFsU2VtYXBob3Jlc1NpemU7DQo+ID4gICAg IG1TbW1DcHVTZW1hcGhvcmVzLlNlbWFwaG9yZUNwdS5CdXN5ICAgID0gKFNQSU5fTE9DSw0KPiAq KVNlbWFwaG9yZUFkZHI7DQo+ID4gQEAgLTEzMjEsNyArMTMxOSw2IEBAIEluaXRpYWxpemVTbW1D cHVTZW1hcGhvcmVzICgNCj4gPg0KPiA+ICAgICBtUEZMb2NrICAgICAgICAgICAgICAgICAgICAg ICA9IG1TbW1DcHVTZW1hcGhvcmVzLlNlbWFwaG9yZUdsb2JhbC5QRkxvY2s7DQo+ID4gICAgIG1D b25maWdTbW1Db2RlQWNjZXNzQ2hlY2tMb2NrID0NCj4gbVNtbUNwdVNlbWFwaG9yZXMuU2VtYXBo b3JlR2xvYmFsLkNvZGVBY2Nlc3NDaGVja0xvY2s7DQo+ID4gLSAgbU1lbW9yeU1hcHBlZExvY2sg ICAgICAgICAgICAgPQ0KPiBtU21tQ3B1U2VtYXBob3Jlcy5TZW1hcGhvcmVHbG9iYWwuTWVtb3J5 TWFwcGVkTG9jazsNCj4gPg0KPiA+ICAgICBtU2VtYXBob3JlU2l6ZSA9IFNlbWFwaG9yZVNpemU7 DQo+ID4gICB9DQo+ID4gZGlmZiAtLWdpdCBhL1VlZmlDcHVQa2cvUGlTbW1DcHVEeGVTbW0vUGlT bW1DcHVEeGVTbW0uaA0KPiA+IGIvVWVmaUNwdVBrZy9QaVNtbUNwdUR4ZVNtbS9QaVNtbUNwdUR4 ZVNtbS5oDQo+ID4gaW5kZXggOGM3ZjQ5OTZkMS4uZTI5NzAzMDhmZSAxMDA2NDQNCj4gPiAtLS0g YS9VZWZpQ3B1UGtnL1BpU21tQ3B1RHhlU21tL1BpU21tQ3B1RHhlU21tLmgNCj4gPiArKysgYi9V ZWZpQ3B1UGtnL1BpU21tQ3B1RHhlU21tL1BpU21tQ3B1RHhlU21tLmgNCj4gPiBAQCAtNTMsNiAr NTMsNyBAQCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GDQo+IEFOWSBL SU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELg0KPiA+ICAgI2luY2x1ZGUgPExpYnJhcnkv UmVwb3J0U3RhdHVzQ29kZUxpYi5oPg0KPiA+ICAgI2luY2x1ZGUgPExpYnJhcnkvU21tQ3B1RmVh dHVyZXNMaWIuaD4NCj4gPiAgICNpbmNsdWRlIDxMaWJyYXJ5L1BlQ29mZkdldEVudHJ5UG9pbnRM aWIuaD4NCj4gPiArI2luY2x1ZGUgPExpYnJhcnkvUmVnaXN0ZXJDcHVGZWF0dXJlc0xpYi5oPg0K PiA+DQo+ID4gICAjaW5jbHVkZSA8QWNwaUNwdURhdGEuaD4NCj4gPiAgICNpbmNsdWRlIDxDcHVI b3RQbHVnRGF0YS5oPg0KPiA+IEBAIC0zNjQsNyArMzY1LDYgQEAgdHlwZWRlZiBzdHJ1Y3Qgew0K PiA+ICAgICB2b2xhdGlsZSBCT09MRUFOICAgICAqQWxsQ3B1c0luU3luYzsNCj4gPiAgICAgU1BJ Tl9MT0NLICAgICAgICAgICAgKlBGTG9jazsNCj4gPiAgICAgU1BJTl9MT0NLICAgICAgICAgICAg KkNvZGVBY2Nlc3NDaGVja0xvY2s7DQo+ID4gLSAgU1BJTl9MT0NLICAgICAgICAgICAgKk1lbW9y eU1hcHBlZExvY2s7DQo+ID4gICB9IFNNTV9DUFVfU0VNQVBIT1JFX0dMT0JBTDsNCj4gPg0KPiA+ ICAgLy8vDQo+ID4gQEAgLTQwOSw3ICs0MDksNiBAQCBleHRlcm4gU01NX0NQVV9TRU1BUEhPUkVT DQo+IG1TbW1DcHVTZW1hcGhvcmVzOw0KPiA+ICAgZXh0ZXJuIFVJTlROICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG1TZW1hcGhvcmVTaXplOw0KPiA+ICAgZXh0ZXJuIFNQSU5fTE9DSyAg ICAgICAgICAgICAgICAgICAgICAgICAgICptUEZMb2NrOw0KPiA+ICAgZXh0ZXJuIFNQSU5fTE9D SyAgICAgICAgICAgICAgICAgICAgICAgICAgICptQ29uZmlnU21tQ29kZUFjY2Vzc0NoZWNrTG9j azsNCj4gPiAtZXh0ZXJuIFNQSU5fTE9DSyAgICAgICAgICAgICAgICAgICAgICAgICAgICptTWVt b3J5TWFwcGVkTG9jazsNCj4gPiAgIGV4dGVybiBFRklfU01SQU1fREVTQ1JJUFRPUiAgICAgICAg ICAgICAgICAqbVNtbUNwdVNtcmFtUmFuZ2VzOw0KPiA+ICAgZXh0ZXJuIFVJTlROICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG1TbW1DcHVTbXJhbVJhbmdlQ291bnQ7DQo+ID4gICBleHRl cm4gVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVBoeXNpY2FsQWRkcmVzc0Jp dHM7DQo+ID4NCj4gDQo+IA0KPiAtLQ0KPiBUaGFua3MsDQo+IFJheQ0K