From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) (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 4BDDD81EC2 for ; Wed, 14 Dec 2016 23:24:56 -0800 (PST) Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga105.fm.intel.com with ESMTP; 14 Dec 2016 23:24:55 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.33,350,1477983600"; d="scan'208";a="18378923" Received: from fmsmsx106.amr.corp.intel.com ([10.18.124.204]) by orsmga002.jf.intel.com with ESMTP; 14 Dec 2016 23:24:55 -0800 Received: from fmsmsx116.amr.corp.intel.com (10.18.116.20) by FMSMSX106.amr.corp.intel.com (10.18.124.204) with Microsoft SMTP Server (TLS) id 14.3.248.2; Wed, 14 Dec 2016 23:24:54 -0800 Received: from shsmsx102.ccr.corp.intel.com (10.239.4.154) by fmsmsx116.amr.corp.intel.com (10.18.116.20) with Microsoft SMTP Server (TLS) id 14.3.248.2; Wed, 14 Dec 2016 23:24:54 -0800 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.11]) by shsmsx102.ccr.corp.intel.com ([169.254.2.54]) with mapi id 14.03.0248.002; Thu, 15 Dec 2016 15:24:50 +0800 From: "Wu, Jiaxin" To: "Fu, Siyuan" , "edk2-devel@lists.01.org" CC: "Ye, Ting" , "Zhang, Lubo" , "Long, Qin" , Thomas Palmer Thread-Topic: [Patch 05/10] NetworkPkg/TlsDxe: TlsDxe driver implementation over OpenSSL Thread-Index: AQHSVdyIy4UAHsKTwky5eZhUQSa6LKEGmeSAgAICYfA= Date: Thu, 15 Dec 2016 07:24:50 +0000 Message-ID: <895558F6EA4E3B41AC93A00D163B72741627F566@SHSMSX103.ccr.corp.intel.com> References: <1481700859-76060-1-git-send-email-jiaxin.wu@intel.com> <1481700859-76060-6-git-send-email-jiaxin.wu@intel.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiNzQzYmZiNWQtMzgzMi00ZGIwLWIwNjQtYTQ3NjMyZmJkMjI4IiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX0lDIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE1LjkuNi42IiwiVHJ1c3RlZExhYmVsSGFzaCI6InR0NndXWmtlRzBtb2N3Q0w2Rlc3NnhyOFJVY3E3Y0doY0F6TVl2ODc3ZEU9In0= x-ctpclassification: CTP_IC x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [Patch 05/10] NetworkPkg/TlsDxe: TlsDxe driver implementation over OpenSSL X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 15 Dec 2016 07:24:56 -0000 Content-Language: en-US Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 VGhhbmtzIFNpeXVhbiwgSSBoYXZlIHJlZmluZWQgdGhlIFRsc0VjcnlwdFBhY2tldC9UbHNEZWNy eXB0UGFja2V0IGZ1bmN0aW9uIGFjY29yZGluZyB5b3VyIGZlZWRiYWNrLg0KDQpbUEFUQ0ggdjIg MDUvMTBdIE5ldHdvcmtQa2cvVGxzRHhlOiBUbHNEeGUgZHJpdmVyIGltcGxlbWVudGF0aW9uIG92 ZXIgT3BlblNTTA0KDQpUaGFua3MsDQpKaWF4aW4NCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2Ut LS0tLQ0KPiBGcm9tOiBGdSwgU2l5dWFuDQo+IFNlbnQ6IFdlZG5lc2RheSwgRGVjZW1iZXIgMTQs IDIwMTYgNDo0MSBQTQ0KPiBUbzogV3UsIEppYXhpbiA8amlheGluLnd1QGludGVsLmNvbT47IGVk azItZGV2ZWxAbGlzdHMuMDEub3JnDQo+IENjOiBZZSwgVGluZyA8dGluZy55ZUBpbnRlbC5jb20+ OyBaaGFuZywgTHVibyA8bHViby56aGFuZ0BpbnRlbC5jb20+Ow0KPiBMb25nLCBRaW4gPHFpbi5s b25nQGludGVsLmNvbT47IFRob21hcyBQYWxtZXIgPHRob21hcy5wYWxtZXJAaHBlLmNvbT4NCj4g U3ViamVjdDogUkU6IFtQYXRjaCAwNS8xMF0gTmV0d29ya1BrZy9UbHNEeGU6IFRsc0R4ZSBkcml2 ZXIgaW1wbGVtZW50YXRpb24NCj4gb3ZlciBPcGVuU1NMDQo+IA0KPiBIaSwgSmlheGluDQo+IA0K PiBTb21lIGNvbW1lbnRzIGFzIGJlbG93Og0KPiANCj4gSW4gVGxzSW1wbC5jDQo+IA0KPiBTaG91 bGQgdGhlIEFTU0VSVCBpbiBsaW5lIDEwNCBiZSBhbiBlcnJvciBoYW5kbGluZz8gSSBtZWFuIGlz IHRoZSBpbnB1dCBidWZmZXINCj4gY29taW5nIGZyb20gZXh0ZXJuYWwgaW5wdXQsIGFuZCBoYXZl IHdlIGNoZWNrZWQgQ29udGVudFR5cGUgd2l0aGluIGl0Pw0KPiANCj4gU2VlbXMgdGhlIFRlbXBS ZWNvcmRIZWFkZXIgcG9pbnRlciB3aWxsIGJlIG1vZGlmaWVkIGluIHRoZSB3aGlsZSBsb29wLA0K PiBzaG91bGRuJ3QgdGhlIDNyZCBwYXJhbWV0ZXIgYmUgdGhlIHJlbWluZGluZyBidWZmZXIgc2l6 ZSBvZiB0aGUgb3V0cHV0DQo+IGJ1ZmZlcj8NCj4gDQo+IFNob3VsZCB3ZSByZXR1cm4gZXJyb3Ig aWYgdGhlIFRsc0N0cmxUcmFmZmljT3V0IHJldHVybiBhIGZhaWx1cmU/DQo+IA0KPiBTaW1pbGFy IHF1ZXN0aW9ucyBmb3IgdGhlIGRlY3J5cHQgcGFja2V0IGZ1bmN0aW9uLg0KPiANCj4gDQo+IEJl c3QgUmVnYXJkcywNCj4gU2l5dWFuDQo+IA0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0K PiBGcm9tOiBXdSwgSmlheGluDQo+IFNlbnQ6IDIwMTbE6jEy1MIxNMjVIDE1OjM0DQo+IFRvOiBl ZGsyLWRldmVsQGxpc3RzLjAxLm9yZw0KPiBDYzogWWUsIFRpbmcgPHRpbmcueWVAaW50ZWwuY29t PjsgRnUsIFNpeXVhbiA8c2l5dWFuLmZ1QGludGVsLmNvbT47IFpoYW5nLA0KPiBMdWJvIDxsdWJv LnpoYW5nQGludGVsLmNvbT47IExvbmcsIFFpbiA8cWluLmxvbmdAaW50ZWwuY29tPjsgVGhvbWFz DQo+IFBhbG1lciA8dGhvbWFzLnBhbG1lckBocGUuY29tPjsgV3UsIEppYXhpbiA8amlheGluLnd1 QGludGVsLmNvbT4NCj4gU3ViamVjdDogW1BhdGNoIDA1LzEwXSBOZXR3b3JrUGtnL1Rsc0R4ZTog VGxzRHhlIGRyaXZlciBpbXBsZW1lbnRhdGlvbg0KPiBvdmVyIE9wZW5TU0wNCj4gDQo+IFRoaXMg cGF0Y2ggaXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIEVGSSBUTFMgU2VydmljZSBCaW5kaW5nDQo+ IFByb3RvY29sLCBFRkkgVExTIFByb3RvY29sIGFuZCBFRkkgVExTIENvbmZpZ3VyYXRpb24gUHJv dG9jb2wNCj4gSW50ZXJmYWNlcy4NCj4gDQo+IENjOiBZZSBUaW5nIDx0aW5nLnllQGludGVsLmNv bT4NCj4gQ2M6IEZ1IFNpeXVhbiA8c2l5dWFuLmZ1QGludGVsLmNvbT4NCj4gQ2M6IFpoYW5nIEx1 Ym8gPGx1Ym8uemhhbmdAaW50ZWwuY29tPg0KPiBDYzogTG9uZyBRaW4gPHFpbi5sb25nQGludGVs LmNvbT4NCj4gQ2M6IFRob21hcyBQYWxtZXIgPHRob21hcy5wYWxtZXJAaHBlLmNvbT4NCj4gQ29u dHJpYnV0ZWQtdW5kZXI6IFRpYW5vQ29yZSBDb250cmlidXRpb24gQWdyZWVtZW50IDEuMA0KPiBT aWduZWQtb2ZmLWJ5OiBXdSBKaWF4aW4gPGppYXhpbi53dUBpbnRlbC5jb20+DQo+IC0tLQ0KPiAg TmV0d29ya1BrZy9UbHNEeGUvVGxzQ29uZmlnUHJvdG9jb2wuYyB8IDE1MiArKysrKysrKw0KPiAg TmV0d29ya1BrZy9UbHNEeGUvVGxzRHJpdmVyLmMgICAgICAgICB8IDQ5OA0KPiArKysrKysrKysr KysrKysrKysrKysrKysrKysNCj4gIE5ldHdvcmtQa2cvVGxzRHhlL1Rsc0RyaXZlci5oICAgICAg ICAgfCAyMzcgKysrKysrKysrKysrKw0KPiAgTmV0d29ya1BrZy9UbHNEeGUvVGxzRHhlLmluZiAg ICAgICAgICB8ICA2NSArKysrDQo+ICBOZXR3b3JrUGtnL1Rsc0R4ZS9UbHNEeGUudW5pICAgICAg ICAgIHwgIDI1ICsrDQo+ICBOZXR3b3JrUGtnL1Rsc0R4ZS9UbHNEeGVFeHRyYS51bmkgICAgIHwg IDE4ICsNCj4gIE5ldHdvcmtQa2cvVGxzRHhlL1Rsc0ltcGwuYyAgICAgICAgICAgfCAyNzAgKysr KysrKysrKysrKysrDQo+ICBOZXR3b3JrUGtnL1Rsc0R4ZS9UbHNJbXBsLmggICAgICAgICAgIHwg MzE1ICsrKysrKysrKysrKysrKysrDQo+ICBOZXR3b3JrUGtnL1Rsc0R4ZS9UbHNQcm90b2NvbC5j ICAgICAgIHwgNjMyDQo+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gIDkg ZmlsZXMgY2hhbmdlZCwgMjIxMiBpbnNlcnRpb25zKCspDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQg TmV0d29ya1BrZy9UbHNEeGUvVGxzQ29uZmlnUHJvdG9jb2wuYw0KPiAgY3JlYXRlIG1vZGUgMTAw NjQ0IE5ldHdvcmtQa2cvVGxzRHhlL1Rsc0RyaXZlci5jDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQg TmV0d29ya1BrZy9UbHNEeGUvVGxzRHJpdmVyLmgNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBOZXR3 b3JrUGtnL1Rsc0R4ZS9UbHNEeGUuaW5mDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgTmV0d29ya1Br Zy9UbHNEeGUvVGxzRHhlLnVuaQ0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IE5ldHdvcmtQa2cvVGxz RHhlL1Rsc0R4ZUV4dHJhLnVuaQ0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IE5ldHdvcmtQa2cvVGxz RHhlL1Rsc0ltcGwuYw0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IE5ldHdvcmtQa2cvVGxzRHhlL1Rs c0ltcGwuaA0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IE5ldHdvcmtQa2cvVGxzRHhlL1Rsc1Byb3Rv Y29sLmMNCj4gDQo+IGRpZmYgLS1naXQgYS9OZXR3b3JrUGtnL1Rsc0R4ZS9UbHNDb25maWdQcm90 b2NvbC5jDQo+IGIvTmV0d29ya1BrZy9UbHNEeGUvVGxzQ29uZmlnUHJvdG9jb2wuYw0KPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwLi4yZWM3OWM5DQo+IC0tLSAvZGV2L251 bGwNCj4gKysrIGIvTmV0d29ya1BrZy9UbHNEeGUvVGxzQ29uZmlnUHJvdG9jb2wuYw0KPiBAQCAt MCwwICsxLDE1MiBAQA0KPiArLyoqIEBmaWxlDQo+ICsgIEltcGxlbWVudGF0aW9uIG9mIEVGSSBU TFMgQ29uZmlndXJhdGlvbiBQcm90b2NvbCBJbnRlcmZhY2VzLg0KPiArDQo+ICsgIENvcHlyaWdo dCAoYykgMjAxNiwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0K PiArDQo+ICsgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4g KyAgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNv bmRpdGlvbnMgb2YgdGhlIEJTRA0KPiBMaWNlbnNlDQo+ICsgIHdoaWNoIGFjY29tcGFuaWVzIHRo aXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUNCj4g Zm91bmQgYXQNCj4gKyAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNl LnBocC4NCj4gKw0KPiArICBUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNE IExJQ0VOU0UgT04gQU4gIkFTIElTIg0KPiBCQVNJUywNCj4gKyAgV0lUSE9VVCBXQVJSQU5USUVT IE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSDQo+IEVYUFJFU1MgT1IgSU1Q TElFRC4NCj4gKw0KPiArKiovDQo+ICsNCj4gKyNpbmNsdWRlICJUbHNJbXBsLmgiDQo+ICsNCj4g K0VGSV9UTFNfQ09ORklHVVJBVElPTl9QUk9UT0NPTCAgbVRsc0NvbmZpZ3VyYXRpb25Qcm90b2Nv bCA9IHsNCj4gKyAgVGxzQ29uZmlndXJhdGlvblNldERhdGEsDQo+ICsgIFRsc0NvbmZpZ3VyYXRp b25HZXREYXRhDQo+ICt9Ow0KPiArDQo+ICsvKioNCj4gKyAgU2V0IFRMUyBjb25maWd1cmF0aW9u IGRhdGEuDQo+ICsNCj4gKyAgVGhlIFNldERhdGEoKSBmdW5jdGlvbiBzZXRzIFRMUyBjb25maWd1 cmF0aW9uIHRvIG5vbi12b2xhdGlsZSBzdG9yYWdlIG9yDQo+IHZvbGF0aWxlDQo+ICsgIHN0b3Jh Z2UuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgICBQb2ludGVyIHRv IHRoZQ0KPiBFRklfVExTX0NPTkZJR1VSQVRJT05fUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBw YXJhbVtpbl0gIERhdGFUeXBlICAgICAgICAgICAgQ29uZmlndXJhdGlvbiBkYXRhIHR5cGUuDQo+ ICsgIEBwYXJhbVtpbl0gIERhdGEgICAgICAgICAgICAgICAgUG9pbnRlciB0byBjb25maWd1cmF0 aW9uIGRhdGEuDQo+ICsgIEBwYXJhbVtpbl0gIERhdGFTaXplICAgICAgICAgICAgVG90YWwgc2l6 ZSBvZiBjb25maWd1cmF0aW9uIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgICAgICAgICBUaGUgVExTIGNvbmZpZ3VyYXRpb24gZGF0YSBpcyBzZXQgc3VjY2Vzc2Z1bGx5 Lg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgIE9uZSBvciBtb3JlIG9mIHRo ZSBmb2xsb3dpbmcNCj4gY29uZGl0aW9ucyBpcyBUUlVFOg0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFRoaXMgaXMgTlVMTC4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBEYXRhIGlzIE5VTEwuDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRGF0YVNpemUgaXMgMC4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAg ICBUaGUgRGF0YVR5cGUgaXMgdW5zdXBwb3J0ZWQuDQo+ICsgIEByZXR2YWwgRUZJX09VVF9PRl9S RVNPVVJDRVMgICAgUmVxdWlyZWQgc3lzdGVtIHJlc291cmNlcyBjb3VsZCBub3QNCj4gYmUgYWxs b2NhdGVkLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArVGxzQ29u ZmlndXJhdGlvblNldERhdGEgKA0KPiArICBJTiAgICAgRUZJX1RMU19DT05GSUdVUkFUSU9OX1BS T1RPQ09MICAqVGhpcywNCj4gKyAgSU4gICAgIEVGSV9UTFNfQ09ORklHX0RBVEFfVFlQRSAgICAg ICAgRGF0YVR5cGUsDQo+ICsgIElOICAgICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAg ICpEYXRhLA0KPiArICBJTiAgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRh U2l6ZQ0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgU3RhdHVz Ow0KPiArICBUTFNfSU5TVEFOQ0UgICAgICAgICAgICAgICpJbnN0YW5jZTsNCj4gKyAgRUZJX1RQ TCAgICAgICAgICAgICAgICAgICBPbGRUcGw7DQo+ICsNCj4gKyAgU3RhdHVzID0gRUZJX1NVQ0NF U1M7DQo+ICsNCj4gKyAgaWYgKFRoaXMgPT0gTlVMTCB8fCAgRGF0YSA9PSBOVUxMIHx8IERhdGFT aXplID09IDApIHsNCj4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiArICB9 DQo+ICsNCj4gKyAgT2xkVHBsID0gZ0JTLT5SYWlzZVRQTCAoVFBMX0NBTExCQUNLKTsNCj4gKw0K PiArICBJbnN0YW5jZSA9IFRMU19JTlNUQU5DRV9GUk9NX0NPTkZJR1VSQVRJT05fVEhJUyAoVGhp cyk7DQo+ICsNCj4gKyAgc3dpdGNoIChEYXRhVHlwZSkgew0KPiArICBjYXNlIEVmaVRsc0NvbmZp Z0RhdGFUeXBlQ0FDZXJ0aWZpY2F0ZToNCj4gKyAgICBTdGF0dXMgPSBUbHNTZXRDYUNlcnRpZmlj YXRlIChJbnN0YW5jZS0+VGxzQ29ubiwgRGF0YSwgRGF0YVNpemUpOw0KPiArICAgIGJyZWFrOw0K PiArICBjYXNlIEVmaVRsc0NvbmZpZ0RhdGFUeXBlSG9zdFB1YmxpY0NlcnQ6DQo+ICsgICAgU3Rh dHVzID0gVGxzU2V0SG9zdFB1YmxpY0NlcnQgKEluc3RhbmNlLT5UbHNDb25uLCBEYXRhLCBEYXRh U2l6ZSk7DQo+ICsgICAgYnJlYWs7DQo+ICsgIGNhc2UgRWZpVGxzQ29uZmlnRGF0YVR5cGVIb3N0 UHJpdmF0ZUtleToNCj4gKyAgICBTdGF0dXMgPSBUbHNTZXRIb3N0UHJpdmF0ZUtleSAoSW5zdGFu Y2UtPlRsc0Nvbm4sIERhdGEsIERhdGFTaXplKTsNCj4gKyAgICBicmVhazsNCj4gKyAgY2FzZSBF ZmlUbHNDb25maWdEYXRhVHlwZUNlcnRSZXZvY2F0aW9uTGlzdDoNCj4gKyAgICBTdGF0dXMgPSBU bHNTZXRDZXJ0UmV2b2NhdGlvbkxpc3QgKERhdGEsIERhdGFTaXplKTsNCj4gKyAgICBicmVhazsN Cj4gKyAgZGVmYXVsdDoNCj4gKyAgICAgU3RhdHVzID0gRUZJX1VOU1VQUE9SVEVEOw0KPiArICB9 DQo+ICsNCj4gKyAgZ0JTLT5SZXN0b3JlVFBMIChPbGRUcGwpOw0KPiArICByZXR1cm4gU3RhdHVz Ow0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgR2V0IFRMUyBjb25maWd1cmF0aW9uIGRhdGEuDQo+ ICsNCj4gKyAgVGhlIEdldERhdGEoKSBmdW5jdGlvbiBnZXRzIFRMUyBjb25maWd1cmF0aW9uLg0K PiArDQo+ICsgIEBwYXJhbVtpbl0gICAgICAgVGhpcyAgICAgICAgICAgUG9pbnRlciB0byB0aGUN Cj4gRUZJX1RMU19DT05GSUdVUkFUSU9OX1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1b aW5dICAgICAgIERhdGFUeXBlICAgICAgIENvbmZpZ3VyYXRpb24gZGF0YSB0eXBlLg0KPiArICBA cGFyYW1baW4sIG91dF0gIERhdGEgICAgICAgICAgIFBvaW50ZXIgdG8gY29uZmlndXJhdGlvbiBk YXRhLg0KPiArICBAcGFyYW1baW4sIG91dF0gIERhdGFTaXplICAgICAgIFRvdGFsIHNpemUgb2Yg Y29uZmlndXJhdGlvbiBkYXRhLiBPbiBpbnB1dCwgaXQNCj4gbWVhbnMNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0aGUgc2l6ZSBvZiBEYXRhIGJ1ZmZlci4gT24gb3V0cHV0 LCBpdCBtZWFucyB0aGUgc2l6ZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG9mIGNvcGllZCBEYXRhIGJ1ZmZlciBpZiBFRklfU1VDQ0VTUywgYW5kIG1lYW5zIHRoZQ0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgb2YgZGVzaXJlZCBEYXRhIGJ1 ZmZlciBpZiBFRklfQlVGRkVSX1RPT19TTUFMTC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUND RVNTICAgICAgICAgICAgIFRoZSBUTFMgY29uZmlndXJhdGlvbiBkYXRhIGlzIGdvdCBzdWNjZXNz ZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICAgT25lIG9yIG1vcmUg b2YgdGhlIGZvbGxvd2luZw0KPiBjb25kaXRpb25zIGlzIFRSVUU6DQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBOVUxMLg0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIERhdGFTaXplIGlzIE5VTEwuDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRGF0YSBpcyBOVUxMIGlmICpEYXRhU2l6ZSBpcyBub3QgemVyby4NCj4g KyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgICBUaGUgRGF0YVR5cGUgaXMgdW5zdXBw b3J0ZWQuDQo+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICAgVGhlIFRMUyBjb25m aWd1cmF0aW9uIGRhdGEgaXMgbm90IGZvdW5kLg0KPiArICBAcmV0dmFsIEVGSV9CVUZGRVJfVE9P X1NNQUxMICAgIFRoZSBidWZmZXIgaXMgdG9vIHNtYWxsIHRvIGhvbGQgdGhlIGRhdGEuDQo+ICsq Ki8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArVGxzQ29uZmlndXJhdGlvbkdldERhdGEg KA0KPiArICBJTiAgICAgRUZJX1RMU19DT05GSUdVUkFUSU9OX1BST1RPQ09MICAqVGhpcywNCj4g KyAgSU4gICAgIEVGSV9UTFNfQ09ORklHX0RBVEFfVFlQRSAgICAgICAgRGF0YVR5cGUsDQo+ICsg IElOIE9VVCBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICpEYXRhLCBPUFRJT05BTA0K PiArICBJTiBPVVQgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAqRGF0YVNpemUNCj4g KyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAg VExTX0lOU1RBTkNFICAgICAgICAgICAgICAqSW5zdGFuY2U7DQo+ICsNCj4gKyAgRUZJX1RQTCAg ICAgICAgICAgICAgICAgICBPbGRUcGw7DQo+ICsNCj4gKyAgU3RhdHVzID0gRUZJX1NVQ0NFU1M7 DQo+ICsNCj4gKyAgaWYgKFRoaXMgPT0gTlVMTCB8fCBEYXRhU2l6ZSA9PSBOVUxMIHx8IChEYXRh ID09IE5VTEwgJiYgKkRhdGFTaXplICE9IDApKQ0KPiB7DQo+ICsgICAgcmV0dXJuIEVGSV9JTlZB TElEX1BBUkFNRVRFUjsNCj4gKyAgfQ0KPiArDQo+ICsgIE9sZFRwbCA9IGdCUy0+UmFpc2VUUEwg KFRQTF9DQUxMQkFDSyk7DQo+ICsNCj4gKyAgSW5zdGFuY2UgPSBUTFNfSU5TVEFOQ0VfRlJPTV9D T05GSUdVUkFUSU9OX1RISVMgKFRoaXMpOw0KPiArDQo+ICsgIHN3aXRjaCAoRGF0YVR5cGUpIHsN Cj4gKyAgY2FzZSBFZmlUbHNDb25maWdEYXRhVHlwZUNBQ2VydGlmaWNhdGU6DQo+ICsgICAgU3Rh dHVzID0gVGxzR2V0Q2FDZXJ0aWZpY2F0ZSAoSW5zdGFuY2UtPlRsc0Nvbm4sIERhdGEsIERhdGFT aXplKTsNCj4gKyAgICBicmVhazsNCj4gKyAgY2FzZSBFZmlUbHNDb25maWdEYXRhVHlwZUhvc3RQ dWJsaWNDZXJ0Og0KPiArICAgIFN0YXR1cyA9IFRsc0dldEhvc3RQdWJsaWNDZXJ0IChJbnN0YW5j ZS0+VGxzQ29ubiwgRGF0YSwgRGF0YVNpemUpOw0KPiArICAgIGJyZWFrOw0KPiArICBjYXNlIEVm aVRsc0NvbmZpZ0RhdGFUeXBlSG9zdFByaXZhdGVLZXk6DQo+ICsgICAgU3RhdHVzID0gVGxzR2V0 SG9zdFByaXZhdGVLZXkgKEluc3RhbmNlLT5UbHNDb25uLCBEYXRhLCBEYXRhU2l6ZSk7DQo+ICsg ICAgYnJlYWs7DQo+ICsgIGNhc2UgRWZpVGxzQ29uZmlnRGF0YVR5cGVDZXJ0UmV2b2NhdGlvbkxp c3Q6DQo+ICsgICAgU3RhdHVzID0gVGxzR2V0Q2VydFJldm9jYXRpb25MaXN0IChEYXRhLCBEYXRh U2l6ZSk7DQo+ICsgICAgYnJlYWs7DQo+ICsgIGRlZmF1bHQ6DQo+ICsgICAgU3RhdHVzID0gRUZJ X1VOU1VQUE9SVEVEOw0KPiArICB9DQo+ICsNCj4gKyAgZ0JTLT5SZXN0b3JlVFBMIChPbGRUcGwp Ow0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiBkaWZmIC0tZ2l0IGEvTmV0d29ya1BrZy9U bHNEeGUvVGxzRHJpdmVyLmMgYi9OZXR3b3JrUGtnL1Rsc0R4ZS9UbHNEcml2ZXIuYw0KPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwLi4wYTc1YzM5DQo+IC0tLSAvZGV2L251 bGwNCj4gKysrIGIvTmV0d29ya1BrZy9UbHNEeGUvVGxzRHJpdmVyLmMNCj4gQEAgLTAsMCArMSw0 OTggQEANCj4gKy8qKiBAZmlsZQ0KPiArICBUaGUgRHJpdmVyIEJpbmRpbmcgYW5kIFNlcnZpY2Ug QmluZGluZyBQcm90b2NvbCBmb3IgVGxzRHhlIGRyaXZlci4NCj4gKw0KPiArICBDb3B5cmlnaHQg KGMpIDIwMTYsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4g Kw0KPiArICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+ICsg IGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25k aXRpb25zIG9mIHRoZSBCU0QNCj4gTGljZW5zZQ0KPiArICB3aGljaCBhY2NvbXBhbmllcyB0aGlz IGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlDQo+IGZv dW5kIGF0DQo+ICsgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5w aHAuDQo+ICsNCj4gKyAgVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBM SUNFTlNFIE9OIEFOICJBUyBJUyINCj4gQkFTSVMsDQo+ICsgIFdJVEhPVVQgV0FSUkFOVElFUyBP UiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUg0KPiBFWFBSRVNTIE9SIElNUExJ RUQuDQo+ICsNCj4gKyoqLw0KPiArDQo+ICsjaW5jbHVkZSAiVGxzSW1wbC5oIg0KPiArDQo+ICtF RklfU0VSVklDRV9CSU5ESU5HX1BST1RPQ09MIG1UbHNTZXJ2aWNlQmluZGluZyA9IHsNCj4gKyAg VGxzU2VydmljZUJpbmRpbmdDcmVhdGVDaGlsZCwNCj4gKyAgVGxzU2VydmljZUJpbmRpbmdEZXN0 cm95Q2hpbGQNCj4gK307DQo+ICsNCj4gKy8qKg0KPiArICBSZWxlYXNlIGFsbCB0aGUgcmVzb3Vy Y2VzIHVzZWQgYnkgdGhlIFRMUyBpbnN0YW5jZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBJbnN0 YW5jZSAgICAgICAgVGhlIFRMUyBpbnN0YW5jZSBkYXRhLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQN Cj4gK1Rsc0NsZWFuSW5zdGFuY2UgKA0KPiArICBJTiBUTFNfSU5TVEFOQ0UgICAgICAgICAgICpJ bnN0YW5jZQ0KPiArICApDQo+ICt7DQo+ICsgIGlmIChJbnN0YW5jZSAhPSBOVUxMKSB7DQo+ICsg ICAgaWYgKEluc3RhbmNlLT5UbHNDb25uICE9IE5VTEwpIHsNCj4gKyAgICAgIFRsc0ZyZWUgKElu c3RhbmNlLT5UbHNDb25uKTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBGcmVlUG9vbCAoSW5zdGFu Y2UpOw0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBDcmVhdGUgdGhlIFRMUyBpbnN0 YW5jZSBhbmQgaW5pdGlhbGl6ZSBpdC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBTZXJ2aWNlICAg ICAgICAgICAgICBUaGUgcG9pbnRlciB0byB0aGUgVExTIHNlcnZpY2UuDQo+ICsgIEBwYXJhbVtv dXRdIEluc3RhbmNlICAgICAgICAgICAgIFRoZSBwb2ludGVyIHRvIHRoZSBUTFMgaW5zdGFuY2Uu DQo+ICsNCj4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgIEZhaWxlZCB0byBhbGxv Y2F0ZSByZXNvdXJjZXMuDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUg VExTIGluc3RhbmNlIGlzIGNyZWF0ZWQuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiAr VGxzQ3JlYXRlSW5zdGFuY2UgKA0KPiArICBJTiAgVExTX1NFUlZJQ0UgICAgICAgICAqU2Vydmlj ZSwNCj4gKyAgT1VUIFRMU19JTlNUQU5DRSAgICAgICAgKipJbnN0YW5jZQ0KPiArICApDQo+ICt7 DQo+ICsgIFRMU19JTlNUQU5DRSAgICAgICAgICAgICpUbHNJbnN0YW5jZTsNCj4gKw0KPiArICAq SW5zdGFuY2UgPSBOVUxMOw0KPiArDQo+ICsgIFRsc0luc3RhbmNlID0gQWxsb2NhdGVaZXJvUG9v bCAoc2l6ZW9mIChUTFNfSU5TVEFOQ0UpKTsNCj4gKyAgaWYgKFRsc0luc3RhbmNlID09IE5VTEwp IHsNCj4gKyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ICsgIH0NCj4gKw0KPiAr ICBUbHNJbnN0YW5jZS0+U2lnbmF0dXJlID0gVExTX0lOU1RBTkNFX1NJR05BVFVSRTsNCj4gKyAg SW5pdGlhbGl6ZUxpc3RIZWFkICgmVGxzSW5zdGFuY2UtPkxpbmspOw0KPiArICBUbHNJbnN0YW5j ZS0+SW5EZXN0cm95ID0gRkFMU0U7DQo+ICsgIFRsc0luc3RhbmNlLT5TZXJ2aWNlICAgPSBTZXJ2 aWNlOw0KPiArDQo+ICsgIENvcHlNZW0gKCZUbHNJbnN0YW5jZS0+VGxzLCAmbVRsc1Byb3RvY29s LCBzaXplb2YgKFRsc0luc3RhbmNlLT5UbHMpKTsNCj4gKyAgQ29weU1lbSAoJlRsc0luc3RhbmNl LT5UbHNDb25maWcsICZtVGxzQ29uZmlndXJhdGlvblByb3RvY29sLCBzaXplb2YNCj4gKFRsc0lu c3RhbmNlLT5UbHNDb25maWcpKTsNCj4gKw0KPiArICBUbHNJbnN0YW5jZS0+VGxzU2Vzc2lvblN0 YXRlID0gRWZpVGxzU2Vzc2lvbk5vdFN0YXJ0ZWQ7DQo+ICsNCj4gKyAgKkluc3RhbmNlID0gVGxz SW5zdGFuY2U7DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsv KioNCj4gKyAgUmVsZWFzZSBhbGwgdGhlIHJlc291cmNlcyB1c2VkIGJ5IHRoZSBUTFMgc2Vydmlj ZSBiaW5kaW5nIGluc3RhbmNlLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFNlcnZpY2UgICAgICAg IFRoZSBUTFMgc2VydmljZSBkYXRhLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK1Rsc0NsZWFu U2VydmljZSAoDQo+ICsgIElOIFRMU19TRVJWSUNFICAgICAqU2VydmljZQ0KPiArICApDQo+ICt7 DQo+ICsgIGlmIChTZXJ2aWNlICE9IE5VTEwpIHsNCj4gKyAgICBpZiAoU2VydmljZS0+VGxzQ3R4 ICE9IE5VTEwpIHsNCj4gKyAgICAgIFRsc0N0eEZyZWUgKFNlcnZpY2UtPlRsc0N0eCk7DQo+ICsg ICAgfQ0KPiArDQo+ICsgICAgRnJlZVBvb2wgKFNlcnZpY2UpOw0KPiArICB9DQo+ICt9DQo+ICsN Cj4gKy8qKg0KPiArICBDcmVhdGUgdGhlbiBpbml0aWFsaXplIGEgVExTIHNlcnZpY2UuDQo+ICsN Cj4gKyAgQHBhcmFtW2luXSAgSW1hZ2UgICAgICAgICAgICAgICAgICBJbWFnZUhhbmRsZSBvZiB0 aGUgVExTIGRyaXZlcg0KPiArICBAcGFyYW1bb3V0XSBTZXJ2aWNlICAgICAgICAgICAgICAgIFRo ZSBzZXJ2aWNlIGZvciBUTFMgZHJpdmVyDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JF U09VUkNFUyAgIEZhaWxlZCB0byBhbGxvY2F0ZSByZXNvdXJjZSB0byBjcmVhdGUNCj4gdGhlIHNl cnZpY2UuDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgc2VydmljZSBp cyBjcmVhdGVkIGZvciB0aGUgZHJpdmVyLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4g K1Rsc0NyZWF0ZVNlcnZpY2UgKA0KPiArICBJTiAgRUZJX0hBTkRMRSAgICAgICAgICAgIEltYWdl LA0KPiArICBPVVQgVExTX1NFUlZJQ0UgICAgICAgICAgICoqU2VydmljZQ0KPiArICApDQo+ICt7 DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBUTFNfU0VSVklDRSAg ICAgICAgICAgICpUbHNTZXJ2aWNlOw0KPiArDQo+ICsgIFN0YXR1cyA9IEVGSV9TVUNDRVNTOw0K PiArICAqU2VydmljZSA9IE5VTEw7DQo+ICsNCj4gKyAgQVNTRVJUIChTZXJ2aWNlICE9IE5VTEwp Ow0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIEFsbG9jYXRlIGEgVExTIFNlcnZpY2UgRGF0YQ0KPiAr ICAvLw0KPiArICBUbHNTZXJ2aWNlID0gQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChUTFNfU0VS VklDRSkpOw0KPiArICBpZiAoVGxzU2VydmljZSA9PSBOVUxMKSB7DQo+ICsgICAgcmV0dXJuIEVG SV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gSW5pdGlh bGl6ZSBUTFMgU2VydmljZSBEYXRhDQo+ICsgIC8vDQo+ICsgIFRsc1NlcnZpY2UtPlNpZ25hdHVy ZSAgICAgICAgPSBUTFNfU0VSVklDRV9TSUdOQVRVUkU7DQo+ICsgIENvcHlNZW0gKCZUbHNTZXJ2 aWNlLT5TZXJ2aWNlQmluZGluZywgJm1UbHNTZXJ2aWNlQmluZGluZywgc2l6ZW9mDQo+IChUbHNT ZXJ2aWNlLT5TZXJ2aWNlQmluZGluZykpOw0KPiArICBUbHNTZXJ2aWNlLT5UbHNDaGlsZHJlbk51 bSAgID0gMDsNCj4gKyAgSW5pdGlhbGl6ZUxpc3RIZWFkICgmVGxzU2VydmljZS0+VGxzQ2hpbGRy ZW5MaXN0KTsNCj4gKyAgVGxzU2VydmljZS0+SW1hZ2VIYW5kbGUgICAgICA9IEltYWdlOw0KPiAr DQo+ICsgICpTZXJ2aWNlID0gVGxzU2VydmljZTsNCj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0K PiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVW5sb2FkcyBhbiBpbWFnZS4NCj4gKw0KPiArICBAcGFy YW1baW5dICBJbWFnZUhhbmRsZSAgICAgICAgICAgSGFuZGxlIHRoYXQgaWRlbnRpZmllcyB0aGUg aW1hZ2UgdG8gYmUNCj4gdW5sb2FkZWQuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgICAgICAgVGhlIGltYWdlIGhhcyBiZWVuIHVubG9hZGVkLg0KPiArICBAcmV0dmFsIEVGSV9J TlZBTElEX1BBUkFNRVRFUiBJbWFnZUhhbmRsZSBpcyBub3QgYSB2YWxpZCBpbWFnZQ0KPiBoYW5k bGUuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtUbHNVbmxvYWQg KA0KPiArICBJTiBFRklfSEFORExFICBJbWFnZUhhbmRsZQ0KPiArICApDQo+ICt7DQo+ICsgIEVG SV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBVSU5UTiAgICAgICAg ICAgICAgICAgICAgICAgICAgIEhhbmRsZU51bTsNCj4gKyAgRUZJX0hBTkRMRSAgICAgICAgICAg ICAgICAgICAgICAqSGFuZGxlQnVmZmVyOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAg ICAgICAgIEluZGV4Ow0KPiArICBFRklfU0VSVklDRV9CSU5ESU5HX1BST1RPQ09MICAgICpTZXJ2 aWNlQmluZGluZzsNCj4gKyAgVExTX1NFUlZJQ0UgICAgICAgICAgICAgICAgICAgICAqVGxzU2Vy dmljZTsNCj4gKw0KPiArICBIYW5kbGVCdWZmZXIgICA9IE5VTEw7DQo+ICsgIFNlcnZpY2VCaW5k aW5nID0gTlVMTDsNCj4gKyAgVGxzU2VydmljZSAgICAgPSBOVUxMOw0KPiArDQo+ICsgIC8vDQo+ ICsgIC8vIExvY2F0ZSBhbGwgdGhlIGhhbmRsZXMgd2l0aCBUbHMgc2VydmljZSBiaW5kaW5nIHBy b3RvY29sLg0KPiArICAvLw0KPiArICBTdGF0dXMgPSBnQlMtPkxvY2F0ZUhhbmRsZUJ1ZmZlciAo DQo+ICsgICAgICAgICAgICAgICAgICBCeVByb3RvY29sLA0KPiArICAgICAgICAgICAgICAgICAg JmdFZmlUbHNTZXJ2aWNlQmluZGluZ1Byb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAg IE5VTEwsDQo+ICsgICAgICAgICAgICAgICAgICAmSGFuZGxlTnVtLA0KPiArICAgICAgICAgICAg ICAgICAgJkhhbmRsZUJ1ZmZlcg0KPiArICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0K PiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBIYW5kbGVOdW07IEluZGV4KyspIHsNCj4gKyAg ICAvLw0KPiArICAgIC8vIEZpcnN0bHksIGZpbmQgU2VydmljZUJpbmRpbmcgaW50ZXJmYWNlDQo+ ICsgICAgLy8NCj4gKyAgICBTdGF0dXMgPSBnQlMtPk9wZW5Qcm90b2NvbCAoDQo+ICsgICAgICAg ICAgICAgICAgICAgIEhhbmRsZUJ1ZmZlcltJbmRleF0sDQo+ICsgICAgICAgICAgICAgICAgICAg ICZnRWZpVGxzU2VydmljZUJpbmRpbmdQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAg ICAgIChWT0lEICoqKSAmU2VydmljZUJpbmRpbmcsDQo+ICsgICAgICAgICAgICAgICAgICAgIElt YWdlSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPiArICAgICAgICAgICAg ICAgICAgICBFRklfT1BFTl9QUk9UT0NPTF9CWV9IQU5ETEVfUFJPVE9DT0wNCj4gKyAgICAgICAg ICAgICAgICAgICAgKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAg ICByZXR1cm4gU3RhdHVzOw0KPiArICAgIH0NCj4gKw0KPiArICAgIFRsc1NlcnZpY2UgPSBUTFNf U0VSVklDRV9GUk9NX1RISVMgKFNlcnZpY2VCaW5kaW5nKTsNCj4gKw0KPiArICAgIC8vDQo+ICsg ICAgLy8gVGhlbiwgdW5pbnN0YWxsIFNlcnZpY2VCaW5kaW5nIGludGVyZmFjZQ0KPiArICAgIC8v DQo+ICsgICAgU3RhdHVzID0gZ0JTLT5Vbmluc3RhbGxNdWx0aXBsZVByb3RvY29sSW50ZXJmYWNl cyAoDQo+ICsgICAgICAgICAgICAgICAgICAgIEhhbmRsZUJ1ZmZlcltJbmRleF0sDQo+ICsgICAg ICAgICAgICAgICAgICAgICZnRWZpVGxzU2VydmljZUJpbmRpbmdQcm90b2NvbEd1aWQsIFNlcnZp Y2VCaW5kaW5nLA0KPiArICAgICAgICAgICAgICAgICAgICBOVUxMDQo+ICsgICAgICAgICAgICAg ICAgICAgICk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgcmV0 dXJuIFN0YXR1czsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBUbHNDbGVhblNlcnZpY2UgKFRsc1Nl cnZpY2UpOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKEhhbmRsZUJ1ZmZlciAhPSBOVUxMKSB7DQo+ ICsgICAgRnJlZVBvb2wgKEhhbmRsZUJ1ZmZlcik7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4g RUZJX1NVQ0NFU1M7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGlzIHRoZSBkZWNsYXJh dGlvbiBvZiBhbiBFRkkgaW1hZ2UgZW50cnkgcG9pbnQuIFRoaXMgZW50cnkgcG9pbnQgaXMNCj4g KyAgdGhlIHNhbWUgZm9yIFVFRkkgQXBwbGljYXRpb25zLCBVRUZJIE9TIExvYWRlcnMsIGFuZCBV RUZJIERyaXZlcnMgaW5jbHVkaW5nDQo+ICsgIGJvdGggZGV2aWNlIGRyaXZlcnMgYW5kIGJ1cyBk cml2ZXJzLg0KPiArDQo+ICsgIEBwYXJhbSAgSW1hZ2VIYW5kbGUgICAgICAgICAgIFRoZSBmaXJt d2FyZSBhbGxvY2F0ZWQgaGFuZGxlIGZvciB0aGUgVUVGSQ0KPiBpbWFnZS4NCj4gKyAgQHBhcmFt ICBTeXN0ZW1UYWJsZSAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRkkgU3lzdGVtIFRhYmxl Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBvcGVyYXRpb24g Y29tcGxldGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICAg ICAgQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cnJlZC4NCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0K PiArRUZJQVBJDQo+ICtUbHNEcml2ZXJFbnRyeVBvaW50ICgNCj4gKyAgSU4gRUZJX0hBTkRMRSAg ICAgICAgSW1hZ2VIYW5kbGUsDQo+ICsgIElOIEVGSV9TWVNURU1fVEFCTEUgICpTeXN0ZW1UYWJs ZQ0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgU3RhdHVzOw0KPiAr DQo+ICsgIFRMU19TRVJWSUNFICAgICAgICAgICAgKlRsc1NlcnZpY2U7DQo+ICsNCj4gKyAgLy8N Cj4gKyAgLy8gQ3JlYXRlIFRMUyBTZXJ2aWNlDQo+ICsgIC8vDQo+ICsgIFN0YXR1cyA9IFRsc0Ny ZWF0ZVNlcnZpY2UgKEltYWdlSGFuZGxlLCAmVGxzU2VydmljZSk7DQo+ICsgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAg QVNTRVJUIChUbHNTZXJ2aWNlICE9IE5VTEwpOw0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIEluaXRp YWxpemVzIHRoZSBPcGVuU1NMIGxpYnJhcnkuDQo+ICsgIC8vDQo+ICsgIFRsc0luaXRpYWxpemUg KCk7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gQ3JlYXRlIGEgbmV3IFNTTF9DVFggb2JqZWN0IGFz IGZyYW1ld29yayB0byBlc3RhYmxpc2ggVExTL1NTTCBlbmFibGVkDQo+ICsgIC8vIGNvbm5lY3Rp b25zLiBUTFMgMS4wIGlzIHVzZWQgYXMgdGhlIGRlZmF1bHQgdmVyc2lvbi4NCj4gKyAgLy8NCj4g KyAgVGxzU2VydmljZS0+VGxzQ3R4ID0gVGxzQ3R4TmV3IChUTFMxMF9QUk9UT0NPTF9WRVJTSU9O X01BSk9SLA0KPiBUTFMxMF9QUk9UT0NPTF9WRVJTSU9OX01JTk9SKTsNCj4gKyAgaWYgKFRsc1Nl cnZpY2UtPlRsc0N0eCA9PSBOVUxMKSB7DQo+ICsgICAgRnJlZVBvb2wgKFRsc1NlcnZpY2UpOw0K PiArICAgIHJldHVybiBFRklfQUJPUlRFRDsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8v IEluc3RhbGwgdGhlIFRsc1NlcnZpY2VCaW5kaW5nIFByb3RvY29sIG9udG8gSGFuZGxlDQo+ICsg IC8vDQo+ICsgIFN0YXR1cyA9IGdCUy0+SW5zdGFsbE11bHRpcGxlUHJvdG9jb2xJbnRlcmZhY2Vz ICgNCj4gKyAgICAgICAgICAgICAgICAgICZUbHNTZXJ2aWNlLT5IYW5kbGUsDQo+ICsgICAgICAg ICAgICAgICAgICAmZ0VmaVRsc1NlcnZpY2VCaW5kaW5nUHJvdG9jb2xHdWlkLA0KPiArICAgICAg ICAgICAgICAgICAgJlRsc1NlcnZpY2UtPlNlcnZpY2VCaW5kaW5nLA0KPiArICAgICAgICAgICAg ICAgICAgTlVMTA0KPiArICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAo U3RhdHVzKSkgew0KPiArICAgIGdvdG8gT05fQ0xFQU5fU0VSVklDRTsNCj4gKyAgfQ0KPiArDQo+ ICsgIHJldHVybiBTdGF0dXM7DQo+ICsNCj4gK09OX0NMRUFOX1NFUlZJQ0U6DQo+ICsgIFRsc0Ns ZWFuU2VydmljZSAoVGxzU2VydmljZSk7DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30N Cj4gKw0KPiArLyoqDQo+ICsgIENyZWF0ZXMgYSBjaGlsZCBoYW5kbGUgYW5kIGluc3RhbGxzIGEg cHJvdG9jb2wuDQo+ICsNCj4gKyAgVGhlIENyZWF0ZUNoaWxkKCkgZnVuY3Rpb24gaW5zdGFsbHMg YSBwcm90b2NvbCBvbiBDaGlsZEhhbmRsZS4NCj4gKyAgSWYgQ2hpbGRIYW5kbGUgaXMgYSBwb2lu dGVyIHRvIE5VTEwsIHRoZW4gYSBuZXcgaGFuZGxlIGlzIGNyZWF0ZWQgYW5kDQo+IHJldHVybmVk IGluIENoaWxkSGFuZGxlLg0KPiArICBJZiBDaGlsZEhhbmRsZSBpcyBub3QgYSBwb2ludGVyIHRv IE5VTEwsIHRoZW4gdGhlIHByb3RvY29sIGluc3RhbGxzIG9uIHRoZQ0KPiBleGlzdGluZyBDaGls ZEhhbmRsZS4NCj4gKw0KPiArICBAcGFyYW1baW5dIFRoaXMgICAgICAgIFBvaW50ZXIgdG8gdGhl IEVGSV9TRVJWSUNFX0JJTkRJTkdfUFJPVE9DT0wNCj4gaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtp bl0gQ2hpbGRIYW5kbGUgUG9pbnRlciB0byB0aGUgaGFuZGxlIG9mIHRoZSBjaGlsZCB0byBjcmVh dGUuIElmIGl0IGlzDQo+IE5VTEwsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbiBh IG5ldyBoYW5kbGUgaXMgY3JlYXRlZC4gSWYgaXQgaXMgYSBwb2ludGVyIHRvIGFuIGV4aXN0aW5n DQo+IFVFRkkgaGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4gdGhlIHBy b3RvY29sIGlzIGFkZGVkIHRvIHRoZSBleGlzdGluZyBVRUZJIGhhbmRsZS4NCj4gKw0KPiArICBA cmV0dmFsIEVGSV9TVUNDRVMgICAgICAgICAgICBUaGUgcHJvdG9jb2wgd2FzIGFkZGVkIHRvIENo aWxkSGFuZGxlLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBDaGlsZEhhbmRs ZSBpcyBOVUxMLg0KPiArICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICBUaGVyZSBhcmUg bm90IGVub3VnaCByZXNvdXJjZXMNCj4gYXZhaWxhYmxlIHRvIGNyZWF0ZQ0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0aGUgY2hpbGQuDQo+ICsgIEByZXR2YWwgb3RoZXIgICAg ICAgICAgICAgICAgIFRoZSBjaGlsZCBoYW5kbGUgd2FzIG5vdCBjcmVhdGVkLg0KPiArDQo+ICsq Ki8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArVGxzU2VydmljZUJpbmRpbmdDcmVhdGVD aGlsZCAoDQo+ICsgIElOIEVGSV9TRVJWSUNFX0JJTkRJTkdfUFJPVE9DT0wgICpUaGlzLA0KPiAr ICBJTiBFRklfSEFORExFICAgICAgICAgICAgICAgICAgICAqQ2hpbGRIYW5kbGUNCj4gKyAgKQ0K PiArew0KPiArICBUTFNfU0VSVklDRSAgICAgICAgICpUbHNTZXJ2aWNlOw0KPiArICBUTFNfSU5T VEFOQ0UgICAgICAgICpUbHNJbnN0YW5jZTsNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgU3Rh dHVzOw0KPiArICBFRklfVFBMICAgICAgICAgICAgICBPbGRUcGw7DQo+ICsNCj4gKyAgaWYgKChU aGlzID09IE5VTEwpIHx8IChDaGlsZEhhbmRsZSA9PSBOVUxMKSkgew0KPiArICAgIHJldHVybiBF RklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgIH0NCj4gKw0KPiArICBUbHNTZXJ2aWNlID0gVExT X1NFUlZJQ0VfRlJPTV9USElTIChUaGlzKTsNCj4gKw0KPiArICBTdGF0dXMgPSBUbHNDcmVhdGVJ bnN0YW5jZSAoVGxzU2VydmljZSwgJlRsc0luc3RhbmNlKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAo U3RhdHVzKSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBBU1NF UlQgKFRsc0luc3RhbmNlICE9IE5VTEwpOw0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIENyZWF0ZSBh IG5ldyBUTFMgY29ubmVjdGlvbiBvYmplY3QuDQo+ICsgIC8vDQo+ICsgIFRsc0luc3RhbmNlLT5U bHNDb25uID0gVGxzTmV3IChUbHNTZXJ2aWNlLT5UbHNDdHgpOw0KPiArICBpZiAoVGxzSW5zdGFu Y2UtPlRsc0Nvbm4gPT0gTlVMTCkgew0KPiArICAgIFN0YXR1cyA9IEVGSV9BQk9SVEVEOw0KPiAr ICAgIGdvdG8gT05fRVJST1I7DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBTZXQgZGVm YXVsdCBDb25uZWN0aW9uRW5kIHRvIEVmaVRsc0NsaWVudA0KPiArICAvLw0KPiArICBTdGF0dXMg PSBUbHNTZXRDb25uZWN0aW9uRW5kIChUbHNJbnN0YW5jZS0+VGxzQ29ubiwgRWZpVGxzQ2xpZW50 KTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIGdvdG8gT05fRVJST1I7 DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBJbnN0YWxsIFRMUyBwcm90b2NvbCBhbmQg Y29uZmlndXJhdGlvbiBwcm90b2NvbCBvbnRvIENoaWxkSGFuZGxlDQo+ICsgIC8vDQo+ICsgIFN0 YXR1cyA9IGdCUy0+SW5zdGFsbE11bHRpcGxlUHJvdG9jb2xJbnRlcmZhY2VzICgNCj4gKyAgICAg ICAgICAgICAgICAgIENoaWxkSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgJmdFZmlUbHNQ cm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAmVGxzSW5zdGFuY2UtPlRscywNCj4g KyAgICAgICAgICAgICAgICAgICZnRWZpVGxzQ29uZmlndXJhdGlvblByb3RvY29sR3VpZCwNCj4g KyAgICAgICAgICAgICAgICAgICZUbHNJbnN0YW5jZS0+VGxzQ29uZmlnLA0KPiArICAgICAgICAg ICAgICAgICAgTlVMTA0KPiArICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPiArICAgIGdvdG8gT05fRVJST1I7DQo+ICsgIH0NCj4gKw0KPiArICBU bHNJbnN0YW5jZS0+Q2hpbGRIYW5kbGUgPSAqQ2hpbGRIYW5kbGU7DQo+ICsNCj4gKyAgLy8NCj4g KyAgLy8gQWRkIGl0IHRvIHRoZSBUTFMgc2VydmljZSdzIGNoaWxkIGxpc3QuDQo+ICsgIC8vDQo+ ICsgIE9sZFRwbCA9IGdCUy0+UmFpc2VUUEwgKFRQTF9DQUxMQkFDSyk7DQo+ICsNCj4gKyAgSW5z ZXJ0VGFpbExpc3QgKCZUbHNTZXJ2aWNlLT5UbHNDaGlsZHJlbkxpc3QsICZUbHNJbnN0YW5jZS0+ TGluayk7DQo+ICsgIFRsc1NlcnZpY2UtPlRsc0NoaWxkcmVuTnVtKys7DQo+ICsNCj4gKyAgZ0JT LT5SZXN0b3JlVFBMIChPbGRUcGwpOw0KPiArDQo+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4g Kw0KPiArT05fRVJST1I6DQo+ICsgIFRsc0NsZWFuSW5zdGFuY2UgKFRsc0luc3RhbmNlKTsNCj4g KyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIERlc3Ryb3lzIGEgY2hp bGQgaGFuZGxlIHdpdGggYSBwcm90b2NvbCBpbnN0YWxsZWQgb24gaXQuDQo+ICsNCj4gKyAgVGhl IERlc3Ryb3lDaGlsZCgpIGZ1bmN0aW9uIGRvZXMgdGhlIG9wcG9zaXRlIG9mIENyZWF0ZUNoaWxk KCkuIEl0IHJlbW92ZXMNCj4gYSBwcm90b2NvbA0KPiArICB0aGF0IHdhcyBpbnN0YWxsZWQgYnkg Q3JlYXRlQ2hpbGQoKSBmcm9tIENoaWxkSGFuZGxlLiBJZiB0aGUgcmVtb3ZlZA0KPiBwcm90b2Nv bCBpcyB0aGUNCj4gKyAgbGFzdCBwcm90b2NvbCBvbiBDaGlsZEhhbmRsZSwgdGhlbiBDaGlsZEhh bmRsZSBpcyBkZXN0cm95ZWQuDQo+ICsNCj4gKyAgQHBhcmFtICBUaGlzICAgICAgICBQb2ludGVy IHRvIHRoZSBFRklfU0VSVklDRV9CSU5ESU5HX1BST1RPQ09MDQo+IGluc3RhbmNlLg0KPiArICBA cGFyYW0gIENoaWxkSGFuZGxlIEhhbmRsZSBvZiB0aGUgY2hpbGQgdG8gZGVzdHJveS4NCj4gKw0K PiArICBAcmV0dmFsIEVGSV9TVUNDRVMgICAgICAgICAgICBUaGUgcHJvdG9jb2wgd2FzIHJlbW92 ZWQgZnJvbSBDaGlsZEhhbmRsZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAg Q2hpbGRIYW5kbGUgZG9lcyBub3Qgc3VwcG9ydCB0aGUgcHJvdG9jb2wNCj4gdGhhdCBpcyBiZWlu ZyByZW1vdmVkLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBDaGlsZCBoYW5k bGUgaXMgTlVMTC4NCj4gKyAgQHJldHZhbCBFRklfQUNDRVNTX0RFTklFRCAgICAgVGhlIHByb3Rv Y29sIGNvdWxkIG5vdCBiZSByZW1vdmVkIGZyb20NCj4gdGhlIENoaWxkSGFuZGxlDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlY2F1c2UgaXRzIHNlcnZpY2VzIGFyZSBiZWlu ZyB1c2VkLg0KPiArICBAcmV0dmFsIG90aGVyICAgICAgICAgICAgICAgICBUaGUgY2hpbGQgaGFu ZGxlIHdhcyBub3QgZGVzdHJveWVkLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VG SUFQSQ0KPiArVGxzU2VydmljZUJpbmRpbmdEZXN0cm95Q2hpbGQgKA0KPiArICBJTiBFRklfU0VS VklDRV9CSU5ESU5HX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAg ICAgICAgICAgICAgQ2hpbGRIYW5kbGUNCj4gKyAgKQ0KPiArew0KPiArICBUTFNfU0VSVklDRSAg ICAgICAgICAgICAgICAgICAgKlRsc1NlcnZpY2U7DQo+ICsgIFRMU19JTlNUQU5DRSAgICAgICAg ICAgICAgICAgICAqVGxzSW5zdGFuY2U7DQo+ICsNCj4gKyAgRUZJX1RMU19QUk9UT0NPTCAgICAg ICAgICAgICAgICpUbHM7DQo+ICsgIEVGSV9UTFNfQ09ORklHVVJBVElPTl9QUk9UT0NPTCAqVGxz Q29uZmlnOw0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiAr ICBFRklfVFBMICAgICAgICAgICAgICAgICAgICAgICAgT2xkVHBsOw0KPiArDQo+ICsgIGlmICgo VGhpcyA9PSBOVUxMKSB8fCAoQ2hpbGRIYW5kbGUgPT0gTlVMTCkpIHsNCj4gKyAgICByZXR1cm4g RUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiArICB9DQo+ICsNCj4gKyAgVGxzU2VydmljZSA9IFRM U19TRVJWSUNFX0ZST01fVEhJUyAoVGhpcyk7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gRmluZCBU TFMgcHJvdG9jb2wgaW50ZXJmYWNlIGluc3RhbGxlZCBpbiBDaGlsZEhhbmRsZQ0KPiArICAvLw0K PiArICBTdGF0dXMgPSBnQlMtPk9wZW5Qcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgICAgICBD aGlsZEhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICZnRWZpVGxzUHJvdG9jb2xHdWlkLA0K PiArICAgICAgICAgICAgICAgICAgKFZPSUQgKiopICZUbHMsDQo+ICsgICAgICAgICAgICAgICAg ICBUbHNTZXJ2aWNlLT5JbWFnZUhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgIE5VTEwsDQo+ ICsgICAgICAgICAgICAgICAgICBFRklfT1BFTl9QUk9UT0NPTF9CWV9IQU5ETEVfUFJPVE9DT0wN Cj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsN Cj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gRmlu ZCBUTFMgY29uZmlndXJhdGlvbiBwcm90b2NvbCBpbnRlcmZhY2UgaW5zdGFsbGVkIGluIENoaWxk SGFuZGxlDQo+ICsgIC8vDQo+ICsgIFN0YXR1cyA9IGdCUy0+T3BlblByb3RvY29sICgNCj4gKyAg ICAgICAgICAgICAgICAgIENoaWxkSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgJmdFZmlU bHNDb25maWd1cmF0aW9uUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgKFZPSUQg KiopICZUbHNDb25maWcsDQo+ICsgICAgICAgICAgICAgICAgICBUbHNTZXJ2aWNlLT5JbWFnZUhh bmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgIE5VTEwsDQo+ICsgICAgICAgICAgICAgICAgICBF RklfT1BFTl9QUk9UT0NPTF9CWV9IQU5ETEVfUFJPVE9DT0wNCj4gKyAgICAgICAgICAgICAgICAg ICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4gU3RhdHVz Ow0KPiArICB9DQo+ICsNCj4gKyAgVGxzSW5zdGFuY2UgID0gVExTX0lOU1RBTkNFX0ZST01fUFJP VE9DT0xfVEhJUyAoVGxzKTsNCj4gKw0KPiArICBpZiAoVGxzSW5zdGFuY2UtPlNlcnZpY2UgIT0g VGxzU2VydmljZSkgew0KPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsg IH0NCj4gKw0KPiArICBpZiAoVGxzSW5zdGFuY2UtPkluRGVzdHJveSkgew0KPiArICAgIHJldHVy biBFRklfU1VDQ0VTUzsNCj4gKyAgfQ0KPiArDQo+ICsgIE9sZFRwbCA9IGdCUy0+UmFpc2VUUEwg KFRQTF9DQUxMQkFDSyk7DQo+ICsNCj4gKyAgVGxzSW5zdGFuY2UtPkluRGVzdHJveSA9IFRSVUU7 DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gVW5pbnN0YWxsIHRoZSBUTFMgcHJvdG9jb2wgYW5kIFRM UyBDb25maWd1cmF0aW9uIFByb3RvY29sIGludGVyZmFjZQ0KPiBpbnN0YWxsZWQgaW4gQ2hpbGRI YW5kbGUuDQo+ICsgIC8vDQo+ICsgIFN0YXR1cyA9IGdCUy0+VW5pbnN0YWxsTXVsdGlwbGVQcm90 b2NvbEludGVyZmFjZXMgKA0KPiArICAgICAgICAgICAgICAgICAgQ2hpbGRIYW5kbGUsDQo+ICsg ICAgICAgICAgICAgICAgICAmZ0VmaVRsc1Byb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAg ICAgIFRscywNCj4gKyAgICAgICAgICAgICAgICAgICZnRWZpVGxzQ29uZmlndXJhdGlvblByb3Rv Y29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgIFRsc0NvbmZpZywNCj4gKyAgICAgICAgICAg ICAgICAgIE5VTEwNCj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgUmVt b3ZlRW50cnlMaXN0ICgmVGxzSW5zdGFuY2UtPkxpbmspOw0KPiArICBUbHNTZXJ2aWNlLT5UbHND aGlsZHJlbk51bS0tOw0KPiArDQo+ICsgIGdCUy0+UmVzdG9yZVRQTCAoT2xkVHBsKTsNCj4gKw0K PiArICBUbHNDbGVhbkluc3RhbmNlIChUbHNJbnN0YW5jZSk7DQo+ICsNCj4gKyAgcmV0dXJuIEVG SV9TVUNDRVNTOw0KPiArfQ0KPiBkaWZmIC0tZ2l0IGEvTmV0d29ya1BrZy9UbHNEeGUvVGxzRHJp dmVyLmggYi9OZXR3b3JrUGtnL1Rsc0R4ZS9UbHNEcml2ZXIuaA0KPiBuZXcgZmlsZSBtb2RlIDEw MDY0NA0KPiBpbmRleCAwMDAwMDAwLi5jM2MzMGE4DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIv TmV0d29ya1BrZy9UbHNEeGUvVGxzRHJpdmVyLmgNCj4gQEAgLTAsMCArMSwyMzcgQEANCj4gKy8q KiBAZmlsZQ0KPiArICBIZWFkZXIgZmlsZSBvZiB0aGUgRHJpdmVyIEJpbmRpbmcgYW5kIFNlcnZp Y2UgQmluZGluZyBQcm90b2NvbCBmb3IgVGxzRHhlDQo+IGRyaXZlci4NCj4gKw0KPiArICBDb3B5 cmlnaHQgKGMpIDIwMTYsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxC Uj4NCj4gKw0KPiArICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxz DQo+ICsgIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFu ZCBjb25kaXRpb25zIG9mIHRoZSBCU0QNCj4gTGljZW5zZQ0KPiArICB3aGljaCBhY2NvbXBhbmll cyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJl DQo+IGZvdW5kIGF0DQo+ICsgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGlj ZW5zZS5waHAuDQo+ICsNCj4gKyAgVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhF IEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyINCj4gQkFTSVMsDQo+ICsgIFdJVEhPVVQgV0FSUkFO VElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUg0KPiBFWFBSRVNTIE9S IElNUExJRUQuDQo+ICsNCj4gKyoqLw0KPiArDQo+ICsjaWZuZGVmIF9fRUZJX1RMU19EUklWRVJf SF9fDQo+ICsjZGVmaW5lIF9fRUZJX1RMU19EUklWRVJfSF9fDQo+ICsNCj4gKyNpbmNsdWRlIDxV ZWZpLmg+DQo+ICsNCj4gKy8vDQo+ICsvLyBEcml2ZXIgUHJvdG9jb2xzDQo+ICsvLw0KPiArI2lu Y2x1ZGUgPFByb3RvY29sL1NlcnZpY2VCaW5kaW5nLmg+DQo+ICsNCj4gKy8vDQo+ICsvLyBEcml2 ZXIgVmVyc2lvbg0KPiArLy8NCj4gKyNkZWZpbmUgVExTX1ZFUlNJT04gIDB4MDAwMDAwMDANCj4g Kw0KPiArI2RlZmluZSBUTFNfU0VSVklDRV9TSUdOQVRVUkUgICAgU0lHTkFUVVJFXzMyICgnVCcs ICdMJywgJ1MnLCAnUycpDQo+ICsNCj4gKyNkZWZpbmUgVExTX0lOU1RBTkNFX1NJR05BVFVSRSAg IFNJR05BVFVSRV8zMiAoJ1QnLCAnTCcsICdTJywgJ0knKQ0KPiArDQo+ICsvLy8NCj4gKy8vLyBU TFMgU2VydmljZSBEYXRhDQo+ICsvLy8NCj4gK3R5cGVkZWYgc3RydWN0IF9UTFNfU0VSVklDRSAg VExTX1NFUlZJQ0U7DQo+ICsNCj4gKy8vLw0KPiArLy8vIFRMUyBJbnN0YW5jZSBEYXRhDQo+ICsv Ly8NCj4gK3R5cGVkZWYgc3RydWN0IF9UTFNfSU5TVEFOQ0UgVExTX0lOU1RBTkNFOw0KPiArDQo+ ICsNCj4gK3N0cnVjdCBfVExTX1NFUlZJQ0Ugew0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAg ICAgICAgICAgIFNpZ25hdHVyZTsNCj4gKyAgRUZJX1NFUlZJQ0VfQklORElOR19QUk9UT0NPTCAg ICBTZXJ2aWNlQmluZGluZzsNCj4gKw0KPiArICBVSU5UMTYgICAgICAgICAgICAgICAgICAgICAg ICAgIFRsc0NoaWxkcmVuTnVtOw0KPiArICBMSVNUX0VOVFJZICAgICAgICAgICAgICAgICAgICAg IFRsc0NoaWxkcmVuTGlzdDsNCj4gKw0KPiArICAvLw0KPiArICAvLyBIYW5kbGUgdG8gaW5zdGFs bCBUbHNTZXJ2aWNlQmluZGluZyBwcm90b2NvbC4NCj4gKyAgLy8NCj4gKyAgRUZJX0hBTkRMRSAg ICAgICAgICAgICAgICAgICAgICBIYW5kbGU7DQo+ICsgIEVGSV9IQU5ETEUgICAgICAgICAgICAg ICAgICAgICAgSW1hZ2VIYW5kbGU7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gTWFpbiBTU0wgQ29u dGV4dCBvYmplY3Qgd2hpY2ggaXMgY3JlYXRlZCBieSBhIHNlcnZlciBvciBjbGllbnQgb25jZSBw ZXINCj4gcHJvZ3JhbQ0KPiArICAvLyBsaWZlLXRpbWUgYW5kIHdoaWNoIGhvbGRzIG1haW5seSBk ZWZhdWx0IHZhbHVlcyBmb3IgdGhlIFNTTCBvYmplY3Qgd2hpY2gNCj4gYXJlIGxhdGVyDQo+ICsg IC8vIGNyZWF0ZWQgZm9yIHRoZSBjb25uZWN0aW9ucy4NCj4gKyAgLy8NCj4gKyAgVk9JRCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqVGxzQ3R4Ow0KPiArfTsNCj4gKw0KPiArc3RydWN0IF9U TFNfSU5TVEFOQ0Ugew0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgIFNpZ25h dHVyZTsNCj4gKyAgTElTVF9FTlRSWSAgICAgICAgICAgICAgICAgICAgICBMaW5rOw0KPiArDQo+ ICsgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgSW5EZXN0cm95Ow0KPiArDQo+ICsg IFRMU19TRVJWSUNFICAgICAgICAgICAgICAgICAgICAgKlNlcnZpY2U7DQo+ICsgIEVGSV9IQU5E TEUgICAgICAgICAgICAgICAgICAgICAgQ2hpbGRIYW5kbGU7DQo+ICsNCj4gKyAgRUZJX1RMU19Q Uk9UT0NPTCAgICAgICAgICAgICAgICBUbHM7DQo+ICsgIEVGSV9UTFNfQ09ORklHVVJBVElPTl9Q Uk9UT0NPTCAgVGxzQ29uZmlnOw0KPiArDQo+ICsgIEVGSV9UTFNfU0VTU0lPTl9TVEFURSAgICAg ICAgICAgVGxzU2Vzc2lvblN0YXRlOw0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIE1haW4gU1NMIENv bm5lY3Rpb24gd2hpY2ggaXMgY3JlYXRlZCBieSBhIHNlcnZlciBvciBhIGNsaWVudA0KPiArICAv LyBwZXIgZXN0YWJsaXNoZWQgY29ubmVjdGlvbi4NCj4gKyAgLy8NCj4gKyAgVk9JRCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqVGxzQ29ubjsNCj4gK307DQo+ICsNCj4gKw0KPiArI2RlZmlu ZSBUTFNfU0VSVklDRV9GUk9NX1RISVMoYSkgICBcDQo+ICsgIENSIChhLCBUTFNfU0VSVklDRSwg U2VydmljZUJpbmRpbmcsIFRMU19TRVJWSUNFX1NJR05BVFVSRSkNCj4gKw0KPiArI2RlZmluZSBU TFNfSU5TVEFOQ0VfRlJPTV9QUk9UT0NPTF9USElTKGEpICBcDQo+ICsgIENSIChhLCBUTFNfSU5T VEFOQ0UsIFRscywgVExTX0lOU1RBTkNFX1NJR05BVFVSRSkNCj4gKw0KPiArI2RlZmluZSBUTFNf SU5TVEFOQ0VfRlJPTV9DT05GSUdVUkFUSU9OX1RISVMoYSkgIFwNCj4gKyAgQ1IgKGEsIFRMU19J TlNUQU5DRSwgVGxzQ29uZmlnLCBUTFNfSU5TVEFOQ0VfU0lHTkFUVVJFKQ0KPiArDQo+ICsNCj4g Ky8qKg0KPiArICBSZWxlYXNlIGFsbCB0aGUgcmVzb3VyY2VzIHVzZWQgYnkgdGhlIFRMUyBpbnN0 YW5jZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBJbnN0YW5jZSAgICAgICAgVGhlIFRMUyBpbnN0 YW5jZSBkYXRhLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK1Rsc0NsZWFuSW5zdGFuY2UgKA0K PiArICBJTiBUTFNfSU5TVEFOQ0UgICAgICAgICAgICpJbnN0YW5jZQ0KPiArICApOw0KPiArDQo+ ICsvKioNCj4gKyAgQ3JlYXRlIHRoZSBUTFMgaW5zdGFuY2UgYW5kIGluaXRpYWxpemUgaXQuDQo+ ICsNCj4gKyAgQHBhcmFtW2luXSAgU2VydmljZSAgICAgICAgICAgICAgVGhlIHBvaW50ZXIgdG8g dGhlIFRMUyBzZXJ2aWNlLg0KPiArICBAcGFyYW1bb3V0XSBJbnN0YW5jZSAgICAgICAgICAgICBU aGUgcG9pbnRlciB0byB0aGUgVExTIGluc3RhbmNlLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX09V VF9PRl9SRVNPVVJDRVMgICBGYWlsZWQgdG8gYWxsb2NhdGUgcmVzb3VyY2VzLg0KPiArICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIFRMUyBpbnN0YW5jZSBpcyBjcmVhdGVkLg0K PiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK1Rsc0NyZWF0ZUluc3RhbmNlICgNCj4gKyAg SU4gIFRMU19TRVJWSUNFICAgICAgICAgKlNlcnZpY2UsDQo+ICsgIE9VVCBUTFNfSU5TVEFOQ0Ug ICAgICAgICoqSW5zdGFuY2UNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFJlbGVhc2UgYWxs IHRoZSByZXNvdXJjZXMgdXNlZCBieSB0aGUgVExTIHNlcnZpY2UgYmluZGluZyBpbnN0YW5jZS4N Cj4gKw0KPiArICBAcGFyYW1baW5dICBTZXJ2aWNlICAgICAgICBUaGUgVExTIHNlcnZpY2UgZGF0 YS4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtUbHNDbGVhblNlcnZpY2UgKA0KPiArICBJTiBU TFNfU0VSVklDRSAgICAgKlNlcnZpY2UNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIENyZWF0 ZSB0aGVuIGluaXRpYWxpemUgYSBUTFMgc2VydmljZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBJ bWFnZSAgICAgICAgICAgICAgICAgIEltYWdlSGFuZGxlIG9mIHRoZSBUTFMgZHJpdmVyDQo+ICsg IEBwYXJhbVtvdXRdIFNlcnZpY2UgICAgICAgICAgICAgICAgVGhlIHNlcnZpY2UgZm9yIFRMUyBk cml2ZXINCj4gKw0KPiArICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgRmFpbGVkIHRv IGFsbG9jYXRlIHJlc291cmNlIHRvIGNyZWF0ZQ0KPiB0aGUgc2VydmljZS4NCj4gKyAgQHJldHZh bCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBzZXJ2aWNlIGlzIGNyZWF0ZWQgZm9yIHRoZSBk cml2ZXIuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArVGxzQ3JlYXRlU2VydmljZSAo DQo+ICsgIElOICBFRklfSEFORExFICAgICAgICAgICAgSW1hZ2UsDQo+ICsgIE9VVCBUTFNfU0VS VklDRSAgICAgICAgICAgKipTZXJ2aWNlDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBVbmxv YWRzIGFuIGltYWdlLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIEltYWdlSGFuZGxlICAgICAgIEhh bmRsZSB0aGF0IGlkZW50aWZpZXMgdGhlIGltYWdlIHRvIGJlDQo+IHVubG9hZGVkLg0KPiArDQo+ ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBpbWFnZSBoYXMgYmVlbiB1bmxv YWRlZC4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgSW1hZ2VIYW5kbGUgaXMg bm90IGEgdmFsaWQgaW1hZ2UNCj4gaGFuZGxlLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMN Cj4gK0VGSUFQSQ0KPiArVGxzVW5sb2FkICgNCj4gKyAgSU4gRUZJX0hBTkRMRSAgSW1hZ2VIYW5k bGUNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgaXMgdGhlIGRlY2xhcmF0aW9uIG9m IGFuIEVGSSBpbWFnZSBlbnRyeSBwb2ludC4gVGhpcyBlbnRyeSBwb2ludCBpcw0KPiArICB0aGUg c2FtZSBmb3IgVUVGSSBBcHBsaWNhdGlvbnMsIFVFRkkgT1MgTG9hZGVycywgYW5kIFVFRkkgRHJp dmVycyBpbmNsdWRpbmcNCj4gKyAgYm90aCBkZXZpY2UgZHJpdmVycyBhbmQgYnVzIGRyaXZlcnMu DQo+ICsNCj4gKyAgQHBhcmFtICBJbWFnZUhhbmRsZSAgICAgICAgICAgVGhlIGZpcm13YXJlIGFs bG9jYXRlZCBoYW5kbGUgZm9yIHRoZSBVRUZJDQo+IGltYWdlLg0KPiArICBAcGFyYW0gIFN5c3Rl bVRhYmxlICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSSBTeXN0ZW0gVGFibGUuDQo+ICsN Cj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIG9wZXJhdGlvbiBjb21wbGV0 ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgICAgICBBbiB1 bmV4cGVjdGVkIGVycm9yIG9jY3VycmVkLg0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklB UEkNCj4gK1Rsc0RyaXZlckVudHJ5UG9pbnQgKA0KPiArICBJTiBFRklfSEFORExFICAgICAgICBJ bWFnZUhhbmRsZSwNCj4gKyAgSU4gRUZJX1NZU1RFTV9UQUJMRSAgKlN5c3RlbVRhYmxlDQo+ICsg ICk7DQo+ICsNCj4gKy8qKg0KPiArICBDcmVhdGVzIGEgY2hpbGQgaGFuZGxlIGFuZCBpbnN0YWxs cyBhIHByb3RvY29sLg0KPiArDQo+ICsgIFRoZSBDcmVhdGVDaGlsZCgpIGZ1bmN0aW9uIGluc3Rh bGxzIGEgcHJvdG9jb2wgb24gQ2hpbGRIYW5kbGUuDQo+ICsgIElmIENoaWxkSGFuZGxlIGlzIGEg cG9pbnRlciB0byBOVUxMLCB0aGVuIGEgbmV3IGhhbmRsZSBpcyBjcmVhdGVkIGFuZA0KPiByZXR1 cm5lZCBpbiBDaGlsZEhhbmRsZS4NCj4gKyAgSWYgQ2hpbGRIYW5kbGUgaXMgbm90IGEgcG9pbnRl ciB0byBOVUxMLCB0aGVuIHRoZSBwcm90b2NvbCBpbnN0YWxscyBvbiB0aGUNCj4gZXhpc3Rpbmcg Q2hpbGRIYW5kbGUuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSBUaGlzICAgICAgICBQb2ludGVyIHRv IHRoZSBFRklfU0VSVklDRV9CSU5ESU5HX1BST1RPQ09MDQo+IGluc3RhbmNlLg0KPiArICBAcGFy YW1baW5dIENoaWxkSGFuZGxlIFBvaW50ZXIgdG8gdGhlIGhhbmRsZSBvZiB0aGUgY2hpbGQgdG8g Y3JlYXRlLiBJZiBpdCBpcw0KPiBOVUxMLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgIHRo ZW4gYSBuZXcgaGFuZGxlIGlzIGNyZWF0ZWQuIElmIGl0IGlzIGEgcG9pbnRlciB0byBhbiBleGlz dGluZw0KPiBVRUZJIGhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICB0aGVuIHRo ZSBwcm90b2NvbCBpcyBhZGRlZCB0byB0aGUgZXhpc3RpbmcgVUVGSSBoYW5kbGUuDQo+ICsNCj4g KyAgQHJldHZhbCBFRklfU1VDQ0VTICAgICAgICAgICAgVGhlIHByb3RvY29sIHdhcyBhZGRlZCB0 byBDaGlsZEhhbmRsZS4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgQ2hpbGRI YW5kbGUgaXMgTlVMTC4NCj4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgVGhlcmUg YXJlIG5vdCBlbm91Z2ggcmVzb3VyY2VzDQo+IGF2YWlsYWJsZSB0byBjcmVhdGUNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNoaWxkLg0KPiArICBAcmV0dmFsIG90aGVy ICAgICAgICAgICAgICAgICBUaGUgY2hpbGQgaGFuZGxlIHdhcyBub3QgY3JlYXRlZC4NCj4gKw0K PiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1Rsc1NlcnZpY2VCaW5kaW5nQ3Jl YXRlQ2hpbGQgKA0KPiArICBJTiBFRklfU0VSVklDRV9CSU5ESU5HX1BST1RPQ09MICAqVGhpcywN Cj4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgKkNoaWxkSGFuZGxlDQo+ICsg ICk7DQo+ICsNCj4gKy8qKg0KPiArICBEZXN0cm95cyBhIGNoaWxkIGhhbmRsZSB3aXRoIGEgcHJv dG9jb2wgaW5zdGFsbGVkIG9uIGl0Lg0KPiArDQo+ICsgIFRoZSBEZXN0cm95Q2hpbGQoKSBmdW5j dGlvbiBkb2VzIHRoZSBvcHBvc2l0ZSBvZiBDcmVhdGVDaGlsZCgpLiBJdCByZW1vdmVzDQo+IGEg cHJvdG9jb2wNCj4gKyAgdGhhdCB3YXMgaW5zdGFsbGVkIGJ5IENyZWF0ZUNoaWxkKCkgZnJvbSBD aGlsZEhhbmRsZS4gSWYgdGhlIHJlbW92ZWQNCj4gcHJvdG9jb2wgaXMgdGhlDQo+ICsgIGxhc3Qg cHJvdG9jb2wgb24gQ2hpbGRIYW5kbGUsIHRoZW4gQ2hpbGRIYW5kbGUgaXMgZGVzdHJveWVkLg0K PiArDQo+ICsgIEBwYXJhbSAgVGhpcyAgICAgICAgUG9pbnRlciB0byB0aGUgRUZJX1NFUlZJQ0Vf QklORElOR19QUk9UT0NPTA0KPiBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtICBDaGlsZEhhbmRsZSBI YW5kbGUgb2YgdGhlIGNoaWxkIHRvIGRlc3Ryb3kuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VD Q0VTICAgICAgICAgICAgVGhlIHByb3RvY29sIHdhcyByZW1vdmVkIGZyb20gQ2hpbGRIYW5kbGUu DQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIENoaWxkSGFuZGxlIGRvZXMgbm90 IHN1cHBvcnQgdGhlIHByb3RvY29sDQo+IHRoYXQgaXMgYmVpbmcgcmVtb3ZlZC4NCj4gKyAgQHJl dHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgQ2hpbGQgaGFuZGxlIGlzIE5VTEwuDQo+ICsgIEBy ZXR2YWwgRUZJX0FDQ0VTU19ERU5JRUQgICAgIFRoZSBwcm90b2NvbCBjb3VsZCBub3QgYmUgcmVt b3ZlZCBmcm9tDQo+IHRoZSBDaGlsZEhhbmRsZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBiZWNhdXNlIGl0cyBzZXJ2aWNlcyBhcmUgYmVpbmcgdXNlZC4NCj4gKyAgQHJldHZh bCBvdGhlciAgICAgICAgICAgICAgICAgVGhlIGNoaWxkIGhhbmRsZSB3YXMgbm90IGRlc3Ryb3ll ZC4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1Rsc1NlcnZpY2VC aW5kaW5nRGVzdHJveUNoaWxkICgNCj4gKyAgSU4gRUZJX1NFUlZJQ0VfQklORElOR19QUk9UT0NP TCAgKlRoaXMsDQo+ICsgIElOIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgIENoaWxkSGFu ZGxlDQo+ICsgICk7DQo+ICsNCj4gKyNlbmRpZg0KPiBkaWZmIC0tZ2l0IGEvTmV0d29ya1BrZy9U bHNEeGUvVGxzRHhlLmluZiBiL05ldHdvcmtQa2cvVGxzRHhlL1Rsc0R4ZS5pbmYNCj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMC4uZGJhMzI1Nw0KPiAtLS0gL2Rldi9udWxs DQo+ICsrKyBiL05ldHdvcmtQa2cvVGxzRHhlL1Rsc0R4ZS5pbmYNCj4gQEAgLTAsMCArMSw2NSBA QA0KPiArIyMgQGZpbGUNCj4gKyMgIFRoaXMgbW9kdWxlIHByb2R1Y2VzIEVGSSBUTFMgUHJvdG9j b2wsIEVGSSBUTFMgU2VydmljZSBCaW5kaW5nIFByb3RvY29sDQo+IGFuZA0KPiArIyAgRUZJIFRM UyBDb25maWd1cmF0aW9uIFByb3RvY29sLg0KPiArIw0KPiArIyAgVGhpcyBtb2R1bGUgcHJvZHVj ZXMgRUZJIFRMUyAoVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5KSBQcm90b2NvbCBhbmQgRUZJDQo+ IFRMUw0KPiArIyAgU2VydmljZSBCaW5kaW5nIFByb3RvY29sLCB0byBwcm92aWRlIFRMUyBzZXJ2 aWNlcy4NCj4gKyMNCj4gKyMgIENvcHlyaWdodCAoYykgMjAxNiwgSW50ZWwgQ29ycG9yYXRpb24u IEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiArIw0KPiArIyAgVGhpcyBwcm9ncmFtIGFuZCB0 aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KPiArIyAgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2 YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlDQo+IEJTRCBMaWNl bnNlDQo+ICsjICB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIGZ1bGwg dGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUNCj4gZm91bmQgYXQNCj4gKyMgIGh0dHA6Ly9vcGVu c291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHAuDQo+ICsjICBUSEUgUFJPR1JBTSBJ UyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIg0KPiBCQVNJ UywNCj4gKyMgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJ TkQsIEVJVEhFUg0KPiBFWFBSRVNTIE9SIElNUExJRUQuDQo+ICsjDQo+ICsjDQo+ICsjIw0KPiAr DQo+ICtbRGVmaW5lc10NCj4gKyAgSU5GX1ZFUlNJT04gICAgICAgICAgICAgICA9IDB4MDAwMTAw MDUNCj4gKyAgQkFTRV9OQU1FICAgICAgICAgICAgICAgICA9IFRsc0R4ZQ0KPiArICBGSUxFX0dV SUQgICAgICAgICAgICAgICAgID0gM2FjZWIwYzAtM2M3Mi0xMWU0LTlhNTYtNzRkNDM1MDUyNjQ2 DQo+ICsgIE1PRFVMRV9UWVBFICAgICAgICAgICAgICAgPSBVRUZJX0RSSVZFUg0KPiArICBWRVJT SU9OX1NUUklORyAgICAgICAgICAgID0gMS4wDQo+ICsgIEVOVFJZX1BPSU5UICAgICAgICAgICAg ICAgPSBUbHNEcml2ZXJFbnRyeVBvaW50DQo+ICsgIFVOTE9BRF9JTUFHRSAgICAgICAgICAgICAg PSBUbHNVbmxvYWQNCj4gKyAgTU9EVUxFX1VOSV9GSUxFICAgICAgICAgICA9IFRsc0R4ZS51bmkN Cj4gKw0KPiArIw0KPiArIyAgVkFMSURfQVJDSElURUNUVVJFUyAgICAgICAgICAgPSBJQTMyIFg2 NA0KPiArIw0KPiArDQo+ICtbUGFja2FnZXNdDQo+ICsgIE1kZVBrZy9NZGVQa2cuZGVjDQo+ICsg IE1kZU1vZHVsZVBrZy9NZGVNb2R1bGVQa2cuZGVjDQo+ICsgIENyeXB0b1BrZy9DcnlwdG9Qa2cu ZGVjDQo+ICsNCj4gK1tTb3VyY2VzXQ0KPiArICBUbHNEcml2ZXIuaA0KPiArICBUbHNEcml2ZXIu Yw0KPiArICBUbHNQcm90b2NvbC5jDQo+ICsgIFRsc0NvbmZpZ1Byb3RvY29sLmMNCj4gKyAgVGxz SW1wbC5oDQo+ICsgIFRsc0ltcGwuYw0KPiArDQo+ICtbTGlicmFyeUNsYXNzZXNdDQo+ICsgIFVl ZmlEcml2ZXJFbnRyeVBvaW50DQo+ICsgIFVlZmlCb290U2VydmljZXNUYWJsZUxpYg0KPiArICBN ZW1vcnlBbGxvY2F0aW9uTGliDQo+ICsgIEJhc2VNZW1vcnlMaWINCj4gKyAgQmFzZUxpYg0KPiAr ICBVZWZpTGliDQo+ICsgIERlYnVnTGliDQo+ICsgIE5ldExpYg0KPiArICBCYXNlQ3J5cHRMaWIN Cj4gKyAgVGxzTGliDQo+ICsNCj4gK1tQcm90b2NvbHNdDQo+ICsgIGdFZmlUbHNTZXJ2aWNlQmlu ZGluZ1Byb3RvY29sR3VpZCAgICAgICAgICAjIyBQUk9EVUNFUw0KPiArICBnRWZpVGxzUHJvdG9j b2xHdWlkICAgICAgICAgICAgICAgICAgICAgICAgIyMgUFJPRFVDRVMNCj4gKyAgZ0VmaVRsc0Nv bmZpZ3VyYXRpb25Qcm90b2NvbEd1aWQgICAgICAgICAgICMjIFBST0RVQ0VTDQo+ICsNCj4gK1tV c2VyRXh0ZW5zaW9ucy5UaWFub0NvcmUuIkV4dHJhRmlsZXMiXQ0KPiArICBUbHNEeGVFeHRyYS51 bmkNCj4gZGlmZiAtLWdpdCBhL05ldHdvcmtQa2cvVGxzRHhlL1Rsc0R4ZS51bmkgYi9OZXR3b3Jr UGtnL1Rsc0R4ZS9UbHNEeGUudW5pDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAw MDAwMDAuLjk4YzQxY2ENCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9OZXR3b3JrUGtnL1Rsc0R4 ZS9UbHNEeGUudW5pDQo+IEBAIC0wLDAgKzEsMjUgQEANCj4gKy8vIC8qKiBAZmlsZQ0KPiArLy8g VGhpcyBtb2R1bGUgcHJvZHVjZXMgRUZJIFRMUyBQcm90b2NvbCwgRUZJIFRMUyBTZXJ2aWNlIEJp bmRpbmcgUHJvdG9jb2wNCj4gYW5kDQo+ICsvLyBFRkkgVExTIENvbmZpZ3VyYXRpb24gUHJvdG9j b2wuDQo+ICsvLw0KPiArLy8gVGhpcyBtb2R1bGUgcHJvZHVjZXMgRUZJIFRMUyAoVHJhbnNwb3J0 IExheWVyIFNlY3VyaXR5KSBQcm90b2NvbCwgRUZJIFRMUw0KPiArLy8gU2VydmljZSBCaW5kaW5n IFByb3RvY29sLCBhbmQgRUZJIFRMUyBDb25maWd1cmF0aW9uIFByb3RvY29sIHRvIHByb3ZpZGUN Cj4gVExTDQo+ICsvLyBzZXJ2aWNlcy4NCj4gKy8vDQo+ICsvLyBDb3B5cmlnaHQgKGMpIDIwMTYs IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gKy8vDQo+ICsv LyBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+ICsvLyBhcmUg bGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9u cyBvZiB0aGUNCj4gQlNEIExpY2Vuc2UNCj4gKy8vIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlz dHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUNCj4gZm91bmQg YXQNCj4gKy8vIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHAN Cj4gKy8vDQo+ICsvLyBUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJ Q0VOU0UgT04gQU4gIkFTIElTIg0KPiBCQVNJUywNCj4gKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBP UiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUg0KPiBFWFBSRVNTIE9SIElNUExJ RUQuDQo+ICsvLw0KPiArLy8gKiovDQo+ICsNCj4gKw0KPiArI3N0cmluZyBTVFJfTU9EVUxFX0FC U1RSQUNUICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAiVUVGSSBUTFMgc2VydmljZSINCj4g Kw0KPiArI3N0cmluZyBTVFJfTU9EVUxFX0RFU0NSSVBUSU9OICAgICAgICAgICNsYW5ndWFnZSBl bi1VUyAiVGhpcyBtb2R1bGUNCj4gcHJvZHVjZXMgRUZJIFRMUyBQcm90b2NvbCwgRUZJIFRMUyBT ZXJ2aWNlIEJpbmRpbmcgUHJvdG9jb2wgYW5kIEVGSSBUTFMNCj4gQ29uZmlndXJhdGlvbiBQcm90 b2NvbCB0byBwcm92aWRlIEVGSSBUTFMgc2VydmljZXMuIg0KPiArDQo+IGRpZmYgLS1naXQgYS9O ZXR3b3JrUGtnL1Rsc0R4ZS9UbHNEeGVFeHRyYS51bmkNCj4gYi9OZXR3b3JrUGtnL1Rsc0R4ZS9U bHNEeGVFeHRyYS51bmkNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMC4u YTM4NTgyYQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL05ldHdvcmtQa2cvVGxzRHhlL1Rsc0R4 ZUV4dHJhLnVuaQ0KPiBAQCAtMCwwICsxLDE4IEBADQo+ICsvLyAvKiogQGZpbGUNCj4gKy8vIFRs c0R4ZSBMb2NhbGl6ZWQgU3RyaW5ncyBhbmQgQ29udGVudA0KPiArLy8NCj4gKy8vIENvcHlyaWdo dCAoYykgMjAxNiwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0K PiArLy8NCj4gKy8vIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMN Cj4gKy8vIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFu ZCBjb25kaXRpb25zIG9mIHRoZQ0KPiBCU0QgTGljZW5zZQ0KPiArLy8gd2hpY2ggYWNjb21wYW5p ZXMgdGhpcyBkaXN0cmlidXRpb24uIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJl DQo+IGZvdW5kIGF0DQo+ICsvLyBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxp Y2Vuc2UucGhwLg0KPiArLy8NCj4gKy8vIFRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVS IFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiDQo+IEJBU0lTLA0KPiArLy8gV0lUSE9VVCBX QVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSDQo+IEVYUFJF U1MgT1IgSU1QTElFRC4NCj4gKy8vDQo+ICsvLyAqKi8NCj4gKw0KPiArI3N0cmluZyBTVFJfUFJP UEVSVElFU19NT0RVTEVfTkFNRQ0KPiArI2xhbmd1YWdlIGVuLVVTDQo+ICsiRUZJIFRMUyBEWEUg RHJpdmVyIg0KPiBkaWZmIC0tZ2l0IGEvTmV0d29ya1BrZy9UbHNEeGUvVGxzSW1wbC5jIGIvTmV0 d29ya1BrZy9UbHNEeGUvVGxzSW1wbC5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4 IDAwMDAwMDAuLjVmYjFlNzgNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9OZXR3b3JrUGtnL1Rs c0R4ZS9UbHNJbXBsLmMNCj4gQEAgLTAsMCArMSwyNzAgQEANCj4gKy8qKiBAZmlsZQ0KPiArICBU aGUgTWlzY2VsbGFuZW91cyBSb3V0aW5lcyBmb3IgVGxzRHhlIGRyaXZlci4NCj4gKw0KPiArQ29w eXJpZ2h0IChjKSAyMDE2LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48 QlI+DQo+ICsNCj4gK1RoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMN Cj4gK2FyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBj b25kaXRpb25zIG9mIHRoZSBCU0QNCj4gTGljZW5zZQ0KPiArd2hpY2ggYWNjb21wYW5pZXMgdGhp cyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPiBm b3VuZCBhdA0KPiAraHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBo cA0KPiArDQo+ICtUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VO U0UgT04gQU4gIkFTIElTIg0KPiBCQVNJUywNCj4gK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBS RVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUg0KPiBFWFBSRVNTIE9SIElNUExJRUQuDQo+ ICsNCj4gKyoqLw0KPiArDQo+ICsjaW5jbHVkZSAiVGxzSW1wbC5oIg0KPiArDQo+ICsvKioNCj4g KyAgRW5jcnlwdCB0aGUgbWVzc2FnZSBsaXN0ZWQgaW4gZnJhZ21lbnQuDQo+ICsNCj4gKyAgQHBh cmFtW2luXSAgICAgICBUbHNJbnN0YW5jZSAgICBUaGUgcG9pbnRlciB0byB0aGUgVExTIGluc3Rh bmNlLg0KPiArICBAcGFyYW1baW4sIG91dF0gIEZyYWdtZW50VGFibGUgIFBvaW50ZXIgdG8gYSBs aXN0IG9mIGZyYWdtZW50Lg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9u IGlucHV0IHRoZXNlIGZyYWdtZW50cyBjb250YWluIHRoZSBUTFMgaGVhZGVyIGFuZA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWluIHRleHQgVExTIHBheWxvYWQ7DQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT24gb3V0cHV0IHRoZXNlIGZyYWdt ZW50cyBjb250YWluIHRoZSBUTFMgaGVhZGVyIGFuZA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNpcGhlciB0ZXh0IFRMUyBwYXlsb2FkLg0KPiArICBAcGFyYW1baW5dICAg ICAgIEZyYWdtZW50Q291bnQgIE51bWJlciBvZiBmcmFnbWVudC4NCj4gKw0KPiArICBAcmV0dmFs IEVGSV9TVUNDRVNTICAgICAgICAgICAgIFRoZSBvcGVyYXRpb24gY29tcGxldGVkIHN1Y2Nlc3Nm dWxseS4NCj4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgICBDYW4ndCBhbGxvY2F0 ZSBtZW1vcnkgcmVzb3VyY2VzLg0KPiArICBAcmV0dmFsIEVGSV9BQk9SVEVEICAgICAgICAgICAg IFRMUyBzZXNzaW9uIHN0YXRlIGlzIGluY29ycmVjdC4NCj4gKyAgQHJldHZhbCBPdGhlcnMgICAg ICAgICAgICAgICAgICBPdGhlciBlcnJvcnMgYXMgaW5kaWNhdGVkLg0KPiArKiovDQo+ICtFRklf U1RBVFVTDQo+ICtUbHNFY3J5cHRQYWNrZXQgKA0KPiArICBJTiAgICAgVExTX0lOU1RBTkNFICAg ICAgICAgICAgICAgICAgKlRsc0luc3RhbmNlLA0KPiArICBJTiBPVVQgRUZJX1RMU19GUkFHTUVO VF9EQVRBICAgICAgICAgKipGcmFnbWVudFRhYmxlLA0KPiArICBJTiAgICAgVUlOVDMyICAgICAg ICAgICAgICAgICAgICAgICAgKkZyYWdtZW50Q291bnQNCj4gKyAgKQ0KPiArew0KPiArICBVSU5U TiAgICAgICAgICAgICAgIEluZGV4Ow0KPiArICBVSU5UMzIgICAgICAgICAgICAgIEJ5dGVzQ29w aWVkOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgIEJ1ZmZlckluU2l6ZTsNCj4gKyAgVUlOVDgg ICAgICAgICAgICAgICAqQnVmZmVySW47DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgKkJ1ZmZl ckluUHRyOw0KPiArICBUTFNfUkVDT1JEX0hFQURFUiAgICpSZWNvcmRIZWFkZXJJbjsNCj4gKyAg VUlOVDE2ICAgICAgICAgICAgICBUaGlzUGxhaW5NZXNzYWdlU2l6ZTsNCj4gKyAgVExTX1JFQ09S RF9IRUFERVIgICAqVGVtcFJlY29yZEhlYWRlcjsNCj4gKyAgVUlOVDE2ICAgICAgICAgICAgICBU aGlzTWVzc2FnZVNpemU7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgQnVmZmVyT3V0U2l6ZTsN Cj4gKyAgVUlOVDggICAgICAgICAgICAgICAqQnVmZmVyT3V0Ow0KPiArICBJTlROICAgICAgICAg ICAgICAgIFJldDsNCj4gKw0KPiArICBCeXRlc0NvcGllZCAgICAgID0gMDsNCj4gKyAgQnVmZmVy SW5TaXplICAgICA9IDA7DQo+ICsgIEJ1ZmZlckluICAgICAgICAgPSBOVUxMOw0KPiArICBCdWZm ZXJJblB0ciAgICAgID0gTlVMTDsNCj4gKyAgUmVjb3JkSGVhZGVySW4gICA9IE5VTEw7DQo+ICsg IFRlbXBSZWNvcmRIZWFkZXIgPSBOVUxMOw0KPiArICBCdWZmZXJPdXRTaXplICAgID0gMDsNCj4g KyAgQnVmZmVyT3V0ICAgICAgICA9IE5VTEw7DQo+ICsgIFJldCAgICAgICAgICAgICAgPSAwOw0K PiArDQo+ICsgIC8vDQo+ICsgIC8vIENhbGN1bGF0ZSB0aGUgc2l6ZSBhY2NvcmRpbmcgdG8gdGhl IGZyYWdtZW50IHRhYmxlLg0KPiArICAvLw0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCAq RnJhZ21lbnRDb3VudDsgSW5kZXgrKykgew0KPiArICAgIEJ1ZmZlckluU2l6ZSArPSAoKkZyYWdt ZW50VGFibGUpW0luZGV4XS5GcmFnbWVudExlbmd0aDsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ ICsgIC8vIEFsbG9jYXRlIGJ1ZmZlciBmb3IgcHJvY2Vzc2luZyBkYXRhLg0KPiArICAvLw0KPiAr ICBCdWZmZXJJbiA9IEFsbG9jYXRlWmVyb1Bvb2wgKEJ1ZmZlckluU2l6ZSk7DQo+ICsgIGlmIChC dWZmZXJJbiA9PSBOVUxMKSB7DQo+ICsgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0K PiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gQ29weSBhbGwgVExTIHBsYWluIHJlY29yZCBo ZWFkZXIgYW5kIHBheWxvYWQgaW50byBQcm9jZXNzQnVmZmVyLg0KPiArICAvLw0KPiArICBmb3Ig KEluZGV4ID0gMDsgSW5kZXggPCAqRnJhZ21lbnRDb3VudDsgSW5kZXgrKykgew0KPiArICAgIENv cHlNZW0gKA0KPiArICAgICAgKEJ1ZmZlckluICsgQnl0ZXNDb3BpZWQpLA0KPiArICAgICAgKCpG cmFnbWVudFRhYmxlKVtJbmRleF0uRnJhZ21lbnRCdWZmZXIsDQo+ICsgICAgICAoKkZyYWdtZW50 VGFibGUpW0luZGV4XS5GcmFnbWVudExlbmd0aA0KPiArICAgICAgKTsNCj4gKyAgICBCeXRlc0Nv cGllZCArPSAoKkZyYWdtZW50VGFibGUpW0luZGV4XS5GcmFnbWVudExlbmd0aDsNCj4gKyAgfQ0K PiArDQo+ICsgIEJ1ZmZlck91dCA9IEFsbG9jYXRlWmVyb1Bvb2wgKE1BWF9CVUZGRVJfU0laRSk7 DQo+ICsgIGlmIChCdWZmZXJPdXQgPT0gTlVMTCkgew0KPiArICAgIEZyZWVQb29sIChCdWZmZXJJ bik7DQo+ICsgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiArICB9DQo+ICsNCj4g KyAgLy8NCj4gKyAgLy8gUGFyc2luZyBidWZmZXIuDQo+ICsgIC8vDQo+ICsgIEJ1ZmZlckluUHRy ID0gQnVmZmVySW47DQo+ICsgIFRlbXBSZWNvcmRIZWFkZXIgPSAoVExTX1JFQ09SRF9IRUFERVIg KikgQnVmZmVyT3V0Ow0KPiArICB3aGlsZSAoKFVJTlROKSBCdWZmZXJJblB0ciA8IChVSU5UTikg QnVmZmVySW4gKyBCdWZmZXJJblNpemUpIHsNCj4gKyAgICBSZWNvcmRIZWFkZXJJbiA9IChUTFNf UkVDT1JEX0hFQURFUiAqKSBCdWZmZXJJblB0cjsNCj4gKyAgICBBU1NFUlQgKFJlY29yZEhlYWRl ckluLT5Db250ZW50VHlwZSA9PQ0KPiBUTFNfQ09OVEVOVF9UWVBFX0FQUExJQ0FUSU9OX0RBVEEp Ow0KPiArICAgIFRoaXNQbGFpbk1lc3NhZ2VTaXplID0gUmVjb3JkSGVhZGVySW4tPkxlbmd0aDsN Cj4gKw0KPiArICAgIFRsc1dyaXRlIChUbHNJbnN0YW5jZS0+VGxzQ29ubiwgKFVJTlQ4ICopIChS ZWNvcmRIZWFkZXJJbiArIDEpLA0KPiBUaGlzUGxhaW5NZXNzYWdlU2l6ZSk7DQo+ICsNCj4gKyAg ICBSZXQgPSBUbHNDdHJsVHJhZmZpY091dCAoVGxzSW5zdGFuY2UtPlRsc0Nvbm4sIChVSU5UOA0K PiAqKShUZW1wUmVjb3JkSGVhZGVyKSwgTUFYX0JVRkZFUl9TSVpFKTsNCj4gKw0KPiArICAgIGlm IChSZXQgPiAwKSB7DQo+ICsgICAgICBUaGlzTWVzc2FnZVNpemUgPSAoVUlOVDE2KSBSZXQ7DQo+ ICsgICAgfSBlbHNlIHsNCj4gKyAgICAgIFRoaXNNZXNzYWdlU2l6ZSA9IDA7DQo+ICsgICAgfQ0K PiArDQo+ICsgICAgQnVmZmVyT3V0U2l6ZSArPSBUaGlzTWVzc2FnZVNpemU7DQo+ICsNCj4gKyAg ICBCdWZmZXJJblB0ciArPSBSRUNPUkRfSEVBREVSX0xFTiArIFRoaXNQbGFpbk1lc3NhZ2VTaXpl Ow0KPiArICAgIFRlbXBSZWNvcmRIZWFkZXIgKz0gVGhpc01lc3NhZ2VTaXplOw0KPiArICB9DQo+ ICsNCj4gKyAgRnJlZVBvb2wgKEJ1ZmZlckluKTsNCj4gKw0KPiArICAvLw0KPiArICAvLyBUaGUg Y2FsbGVyIHdpbGwgdGFrZSByZXNwb25zaWJsZSB0byBoYW5kbGUgdGhlIG9yaWdpbmFsIGZyYWdt ZW50IHRhYmxlLg0KPiArICAvLw0KPiArICAqRnJhZ21lbnRUYWJsZSA9IEFsbG9jYXRlWmVyb1Bv b2wgKHNpemVvZiAoRUZJX1RMU19GUkFHTUVOVF9EQVRBKSk7DQo+ICsgIGlmICgqRnJhZ21lbnRU YWJsZSA9PSBOVUxMKSB7DQo+ICsgICAgRnJlZVBvb2wgKEJ1ZmZlck91dCk7DQo+ICsgICAgcmV0 dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiArICB9DQo+ICsNCj4gKyAgKCpGcmFnbWVudFRh YmxlKVswXS5GcmFnbWVudEJ1ZmZlciAgPSBCdWZmZXJPdXQ7DQo+ICsgICgqRnJhZ21lbnRUYWJs ZSlbMF0uRnJhZ21lbnRMZW5ndGggID0gQnVmZmVyT3V0U2l6ZTsNCj4gKyAgKkZyYWdtZW50Q291 bnQgICAgICAgICAgICAgICAgICAgICAgPSAxOw0KPiArDQo+ICsgIHJldHVybiBFRklfU1VDQ0VT UzsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIERlY3J5cHQgdGhlIG1lc3NhZ2UgbGlzdGVkIGlu IGZyYWdtZW50Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICAgICAgVGxzSW5zdGFuY2UgICAgVGhl IHBvaW50ZXIgdG8gdGhlIFRMUyBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luLCBvdXRdICBGcmFn bWVudFRhYmxlICBQb2ludGVyIHRvIGEgbGlzdCBvZiBmcmFnbWVudC4NCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBPbiBpbnB1dCB0aGVzZSBmcmFnbWVudHMgY29udGFpbiB0 aGUgVExTIGhlYWRlciBhbmQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj aXBoZXIgdGV4dCBUTFMgcGF5bG9hZDsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBPbiBvdXRwdXQgdGhlc2UgZnJhZ21lbnRzIGNvbnRhaW4gdGhlIFRMUyBoZWFkZXIgYW5k DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhaW4gdGV4dCBUTFMgcGF5 bG9hZC4NCj4gKyAgQHBhcmFtW2luXSAgICAgICBGcmFnbWVudENvdW50ICBOdW1iZXIgb2YgZnJh Z21lbnQuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICBUaGUgb3Bl cmF0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX09VVF9PRl9S RVNPVVJDRVMgICAgQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IHJlc291cmNlcy4NCj4gKyAgQHJldHZh bCBFRklfQUJPUlRFRCAgICAgICAgICAgICBUTFMgc2Vzc2lvbiBzdGF0ZSBpcyBpbmNvcnJlY3Qu DQo+ICsgIEByZXR2YWwgT3RoZXJzICAgICAgICAgICAgICAgICAgT3RoZXIgZXJyb3JzIGFzIGlu ZGljYXRlZC4NCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArVGxzRGVjcnlwdFBhY2tldCAoDQo+ ICsgIElOICAgICBUTFNfSU5TVEFOQ0UgICAgICAgICAgICAgICAgICAqVGxzSW5zdGFuY2UsDQo+ ICsgIElOIE9VVCBFRklfVExTX0ZSQUdNRU5UX0RBVEEgICAgICAgICAqKkZyYWdtZW50VGFibGUs DQo+ICsgIElOICAgICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAqRnJhZ21lbnRDb3Vu dA0KPiArICApDQo+ICt7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsgIFVJ TlQzMiAgICAgICAgICAgICAgQnl0ZXNDb3BpZWQ7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAg KkJ1ZmZlckluOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgIEJ1ZmZlckluU2l6ZTsNCj4gKyAg VUlOVDggICAgICAgICAgICAgICAqQnVmZmVySW5QdHI7DQo+ICsgIFRMU19SRUNPUkRfSEVBREVS ICAgKlJlY29yZEhlYWRlckluOw0KPiArICBVSU5UMTYgICAgICAgICAgICAgIFRoaXNDaXBoZXJN ZXNzYWdlU2l6ZTsNCj4gKyAgVExTX1JFQ09SRF9IRUFERVIgICAqVGVtcFJlY29yZEhlYWRlcjsN Cj4gKyAgVUlOVDE2ICAgICAgICAgICAgICBUaGlzUGxhaW5NZXNzYWdlU2l6ZTsNCj4gKyAgVUlO VDggICAgICAgICAgICAgICAqQnVmZmVyT3V0Ow0KPiArICBVSU5UMzIgICAgICAgICAgICAgIEJ1 ZmZlck91dFNpemU7DQo+ICsgIElOVE4gICAgICAgICAgICAgICAgUmV0Ow0KPiArDQo+ICsgIEJ5 dGVzQ29waWVkICAgICAgPSAwOw0KPiArICBCdWZmZXJJbiAgICAgICAgID0gTlVMTDsNCj4gKyAg QnVmZmVySW5TaXplICAgICA9IDA7DQo+ICsgIEJ1ZmZlckluUHRyICAgICAgPSBOVUxMOw0KPiAr ICBSZWNvcmRIZWFkZXJJbiAgID0gTlVMTDsNCj4gKyAgVGVtcFJlY29yZEhlYWRlciA9IE5VTEw7 DQo+ICsgIEJ1ZmZlck91dCAgICAgICAgPSBOVUxMOw0KPiArICBCdWZmZXJPdXRTaXplICAgID0g MDsNCj4gKyAgUmV0ICAgICAgICAgICAgICA9IDA7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gQ2Fs Y3VsYXRlIHRoZSBzaXplIGFjY29yZGluZyB0byB0aGUgZnJhZ21lbnQgdGFibGUuDQo+ICsgIC8v DQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8ICpGcmFnbWVudENvdW50OyBJbmRleCsrKSB7 DQo+ICsgICAgQnVmZmVySW5TaXplICs9ICgqRnJhZ21lbnRUYWJsZSlbSW5kZXhdLkZyYWdtZW50 TGVuZ3RoOw0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gQWxsb2NhdGUgYnVmZmVyIGZv ciBwcm9jZXNzaW5nIGRhdGENCj4gKyAgLy8NCj4gKyAgQnVmZmVySW4gPSBBbGxvY2F0ZVplcm9Q b29sIChCdWZmZXJJblNpemUpOw0KPiArICBpZiAoQnVmZmVySW4gPT0gTlVMTCkgew0KPiArICAg IHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsg IC8vIENvcHkgYWxsIFRMUyBwbGFpbiByZWNvcmQgaGVhZGVyIGFuZCBwYXlsb2FkIHRvIFByb2Nl c3NCdWZmZXINCj4gKyAgLy8NCj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgKkZyYWdtZW50 Q291bnQ7IEluZGV4KyspIHsNCj4gKyAgICBDb3B5TWVtICgNCj4gKyAgICAgIChCdWZmZXJJbiAr IEJ5dGVzQ29waWVkKSwNCj4gKyAgICAgICgqRnJhZ21lbnRUYWJsZSlbSW5kZXhdLkZyYWdtZW50 QnVmZmVyLA0KPiArICAgICAgKCpGcmFnbWVudFRhYmxlKVtJbmRleF0uRnJhZ21lbnRMZW5ndGgN Cj4gKyAgICAgICk7DQo+ICsgICAgQnl0ZXNDb3BpZWQgKz0gKCpGcmFnbWVudFRhYmxlKVtJbmRl eF0uRnJhZ21lbnRMZW5ndGg7DQo+ICsgIH0NCj4gKw0KPiArICBCdWZmZXJPdXQgPSBBbGxvY2F0 ZVplcm9Qb29sIChNQVhfQlVGRkVSX1NJWkUpOw0KPiArICBpZiAoQnVmZmVyT3V0ID09IE5VTEwp IHsNCj4gKyAgICBGcmVlUG9vbCAoQnVmZmVySW4pOw0KPiArICAgIHJldHVybiBFRklfT1VUX09G X1JFU09VUkNFUzsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIFBhcnNpbmcgYnVmZmVy LiBSZWNlaXZlZCBwYWNrZXQgbWF5IGhhdmUgbXVsdGlwbHkgVExTIHJlY29yZCBtZXNzYWdlLg0K PiArICAvLw0KPiArICBCdWZmZXJJblB0ciA9IEJ1ZmZlckluOw0KPiArICBUZW1wUmVjb3JkSGVh ZGVyID0gKFRMU19SRUNPUkRfSEVBREVSICopIEJ1ZmZlck91dDsNCj4gKyAgd2hpbGUgKChVSU5U TikgQnVmZmVySW5QdHIgPCAoVUlOVE4pIEJ1ZmZlckluICsgQnVmZmVySW5TaXplKSB7DQo+ICsg ICAgUmVjb3JkSGVhZGVySW4gPSAoVExTX1JFQ09SRF9IRUFERVIgKikgQnVmZmVySW5QdHI7DQo+ ICsgICAgQVNTRVJUIChSZWNvcmRIZWFkZXJJbi0+Q29udGVudFR5cGUgPT0NCj4gVExTX0NPTlRF TlRfVFlQRV9BUFBMSUNBVElPTl9EQVRBKTsNCj4gKyAgICBUaGlzQ2lwaGVyTWVzc2FnZVNpemUg PSBOVE9IUyAoUmVjb3JkSGVhZGVySW4tPkxlbmd0aCk7DQo+ICsNCj4gKyAgICBSZXQgPSBUbHND dHJsVHJhZmZpY0luIChUbHNJbnN0YW5jZS0+VGxzQ29ubiwgKFVJTlQ4ICopIChSZWNvcmRIZWFk ZXJJbiksDQo+IFJFQ09SRF9IRUFERVJfTEVOICsgVGhpc0NpcGhlck1lc3NhZ2VTaXplKTsNCj4g KyAgICBpZiAoUmV0ICE9IFJFQ09SRF9IRUFERVJfTEVOICsgVGhpc0NpcGhlck1lc3NhZ2VTaXpl KSB7DQo+ICsgICAgICBGcmVlUG9vbCAoQnVmZmVySW4pOw0KPiArICAgICAgVGxzSW5zdGFuY2Ut PlRsc1Nlc3Npb25TdGF0ZSA9IEVmaVRsc1Nlc3Npb25FcnJvcjsNCj4gKyAgICAgIHJldHVybiBF RklfQUJPUlRFRDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBSZXQgPSAwOw0KPiArICAgIFJldCA9 IFRsc1JlYWQgKFRsc0luc3RhbmNlLT5UbHNDb25uLCAoVUlOVDggKikgKFRlbXBSZWNvcmRIZWFk ZXIgKyAxKSwNCj4gTUFYX0JVRkZFUl9TSVpFKTsNCj4gKw0KPiArICAgIGlmIChSZXQgPiAwKSB7 DQo+ICsgICAgICBUaGlzUGxhaW5NZXNzYWdlU2l6ZSA9IChVSU5UMTYpIFJldDsNCj4gKyAgICB9 IGVsc2Ugew0KPiArICAgICAgVGhpc1BsYWluTWVzc2FnZVNpemUgPSAwOw0KPiArICAgIH0NCj4g Kw0KPiArICAgIENvcHlNZW0gKFRlbXBSZWNvcmRIZWFkZXIsIFJlY29yZEhlYWRlckluLA0KPiBS RUNPUkRfSEVBREVSX0xFTik7DQo+ICsgICAgVGVtcFJlY29yZEhlYWRlci0+TGVuZ3RoID0gVGhp c1BsYWluTWVzc2FnZVNpemU7DQo+ICsgICAgQnVmZmVyT3V0U2l6ZSArPSBSRUNPUkRfSEVBREVS X0xFTiArIFRoaXNQbGFpbk1lc3NhZ2VTaXplOw0KPiArDQo+ICsgICAgQnVmZmVySW5QdHIgKz0g UkVDT1JEX0hFQURFUl9MRU4gKyBUaGlzQ2lwaGVyTWVzc2FnZVNpemU7DQo+ICsgICAgVGVtcFJl Y29yZEhlYWRlciArPSBSRUNPUkRfSEVBREVSX0xFTiArIFRoaXNQbGFpbk1lc3NhZ2VTaXplOw0K PiArICB9DQo+ICsNCj4gKyAgRnJlZVBvb2wgKEJ1ZmZlckluKTsNCj4gKw0KPiArICAvLw0KPiAr ICAvLyBUaGUgY2FsbGVyIHdpbGwgdGFrZSByZXNwb25zaWJsZSB0byBoYW5kbGUgdGhlIG9yaWdp bmFsIGZyYWdtZW50IHRhYmxlDQo+ICsgIC8vDQo+ICsgICpGcmFnbWVudFRhYmxlID0gQWxsb2Nh dGVaZXJvUG9vbCAoc2l6ZW9mIChFRklfVExTX0ZSQUdNRU5UX0RBVEEpKTsNCj4gKyAgaWYgKCpG cmFnbWVudFRhYmxlID09IE5VTEwpIHsNCj4gKyAgICBGcmVlUG9vbCAoQnVmZmVyT3V0KTsNCj4g KyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ICsgIH0NCj4gKw0KPiArICAoKkZy YWdtZW50VGFibGUpWzBdLkZyYWdtZW50QnVmZmVyICA9IEJ1ZmZlck91dDsNCj4gKyAgKCpGcmFn bWVudFRhYmxlKVswXS5GcmFnbWVudExlbmd0aCAgPSBCdWZmZXJPdXRTaXplOw0KPiArICAqRnJh Z21lbnRDb3VudCAgICAgICAgICAgICAgICAgICAgICA9IDE7DQo+ICsNCj4gKyAgcmV0dXJuIEVG SV9TVUNDRVNTOw0KPiArfQ0KPiBkaWZmIC0tZ2l0IGEvTmV0d29ya1BrZy9UbHNEeGUvVGxzSW1w bC5oIGIvTmV0d29ya1BrZy9UbHNEeGUvVGxzSW1wbC5oDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 DQo+IGluZGV4IDAwMDAwMDAuLmIwNjE1Y2INCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9OZXR3 b3JrUGtnL1Rsc0R4ZS9UbHNJbXBsLmgNCj4gQEAgLTAsMCArMSwzMTUgQEANCj4gKy8qKiBAZmls ZQ0KPiArICBIZWFkZXIgZmlsZSBvZiBNaXNjZWxsYW5lb3VzIFJvdXRpbmVzIGZvciBUbHNEeGUg ZHJpdmVyLg0KPiArDQo+ICtDb3B5cmlnaHQgKGMpIDIwMTYsIEludGVsIENvcnBvcmF0aW9uLiBB bGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gKw0KPiArVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNj b21wYW55aW5nIG1hdGVyaWFscw0KPiArYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1 bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRA0KPiBMaWNlbnNlDQo+ICt3 aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhl IGxpY2Vuc2UgbWF5IGJlDQo+IGZvdW5kIGF0DQo+ICtodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGlj ZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+ICsNCj4gK1RIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVE IFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiDQo+IEJBU0lTLA0KPiArV0lUSE9V VCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSDQo+IEVY UFJFU1MgT1IgSU1QTElFRC4NCj4gKw0KPiArKiovDQo+ICsNCj4gKyNpZm5kZWYgX19FRklfVExT X0lNUExfSF9fDQo+ICsjZGVmaW5lIF9fRUZJX1RMU19JTVBMX0hfXw0KPiArDQo+ICsvLw0KPiAr Ly8gTGlicmFyaWVzDQo+ICsvLw0KPiArI2luY2x1ZGUgPExpYnJhcnkvVWVmaUJvb3RTZXJ2aWNl c1RhYmxlTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9NZW1vcnlBbGxvY2F0aW9uTGliLmg+ DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9CYXNlTWVtb3J5TGliLmg+DQo+ICsjaW5jbHVkZSA8TGli cmFyeS9CYXNlTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpTGliLmg+DQo+ICsjaW5j bHVkZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvTmV0TGliLmg+ DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9CYXNlQ3J5cHRMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJy YXJ5L1Rsc0xpYi5oPg0KPiArDQo+ICsvLw0KPiArLy8gQ29uc3VtZWQgUHJvdG9jb2xzDQo+ICsv Lw0KPiArI2luY2x1ZGUgPFByb3RvY29sL1Rscy5oPg0KPiArI2luY2x1ZGUgPFByb3RvY29sL1Rs c0NvbmZpZy5oPg0KPiArDQo+ICsjaW5jbHVkZSA8SW5kdXN0cnlTdGFuZGFyZC9UbHMxLmg+DQo+ ICsNCj4gKyNpbmNsdWRlICJUbHNEcml2ZXIuaCINCj4gKw0KPiArLy8NCj4gKy8vIFByb3RvY29s IGluc3RhbmNlcw0KPiArLy8NCj4gK2V4dGVybiBFRklfU0VSVklDRV9CSU5ESU5HX1BST1RPQ09M ICAgIG1UbHNTZXJ2aWNlQmluZGluZzsNCj4gK2V4dGVybiBFRklfVExTX1BST1RPQ09MICAgICAg ICAgICAgICAgIG1UbHNQcm90b2NvbDsNCj4gK2V4dGVybiBFRklfVExTX0NPTkZJR1VSQVRJT05f UFJPVE9DT0wgIG1UbHNDb25maWd1cmF0aW9uUHJvdG9jb2w7DQo+ICsNCj4gKyNkZWZpbmUgUkVD T1JEX0hFQURFUl9MRU4gNSAvLy8gQ29udGVudFR5cGUoMSkgKyBWZXJzaW9uKDIpICsNCj4gTGVu Z3RoKDIpDQo+ICsNCj4gKyNkZWZpbmUgTUFYX0JVRkZFUl9TSVpFICAgMzI3NjgNCj4gKw0KPiAr LyoqDQo+ICsgIEVuY3J5cHQgdGhlIG1lc3NhZ2UgbGlzdGVkIGluIGZyYWdtZW50Lg0KPiArDQo+ ICsgIEBwYXJhbVtpbl0gICAgICAgVGxzSW5zdGFuY2UgICAgVGhlIHBvaW50ZXIgdG8gdGhlIFRM UyBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luLCBvdXRdICBGcmFnbWVudFRhYmxlICBQb2ludGVy IHRvIGEgbGlzdCBvZiBmcmFnbWVudC4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBPbiBpbnB1dCB0aGVzZSBmcmFnbWVudHMgY29udGFpbiB0aGUgVExTIGhlYWRlciBhbmQN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFpbiB0ZXh0IFRMUyBwYXls b2FkOw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uIG91dHB1dCB0aGVz ZSBmcmFnbWVudHMgY29udGFpbiB0aGUgVExTIGhlYWRlciBhbmQNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjaXBoZXIgdGV4dCBUTFMgcGF5bG9hZC4NCj4gKyAgQHBhcmFt W2luXSAgICAgICBGcmFnbWVudENvdW50ICBOdW1iZXIgb2YgZnJhZ21lbnQuDQo+ICsNCj4gKyAg QHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICBUaGUgb3BlcmF0aW9uIGNvbXBsZXRlZCBz dWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgICAgQ2FuJ3Qg YWxsb2NhdGUgbWVtb3J5IHJlc291cmNlcy4NCj4gKyAgQHJldHZhbCBFRklfQUJPUlRFRCAgICAg ICAgICAgICBUTFMgc2Vzc2lvbiBzdGF0ZSBpcyBpbmNvcnJlY3QuDQo+ICsgIEByZXR2YWwgT3Ro ZXJzICAgICAgICAgICAgICAgICAgT3RoZXIgZXJyb3JzIGFzIGluZGljYXRlZC4NCj4gKyoqLw0K PiArRUZJX1NUQVRVUw0KPiArVGxzRWNyeXB0UGFja2V0ICgNCj4gKyAgSU4gICAgIFRMU19JTlNU QU5DRSAgICAgICAgICAgICAgICAgICpUbHNJbnN0YW5jZSwNCj4gKyAgSU4gT1VUIEVGSV9UTFNf RlJBR01FTlRfREFUQSAgICAgICAgICoqRnJhZ21lbnRUYWJsZSwNCj4gKyAgSU4gICAgIFVJTlQz MiAgICAgICAgICAgICAgICAgICAgICAgICpGcmFnbWVudENvdW50DQo+ICsgICk7DQo+ICsNCj4g Ky8qKg0KPiArICBEZWNyeXB0IHRoZSBtZXNzYWdlIGxpc3RlZCBpbiBmcmFnbWVudC4NCj4gKw0K PiArICBAcGFyYW1baW5dICAgICAgIFRsc0luc3RhbmNlICAgIFRoZSBwb2ludGVyIHRvIHRoZSBU TFMgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSAgRnJhZ21lbnRUYWJsZSAgUG9pbnRl ciB0byBhIGxpc3Qgb2YgZnJhZ21lbnQuDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgT24gaW5wdXQgdGhlc2UgZnJhZ21lbnRzIGNvbnRhaW4gdGhlIFRMUyBoZWFkZXIgYW5k DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lwaGVyIHRleHQgVExTIHBh eWxvYWQ7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT24gb3V0cHV0IHRo ZXNlIGZyYWdtZW50cyBjb250YWluIHRoZSBUTFMgaGVhZGVyIGFuZA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBsYWluIHRleHQgVExTIHBheWxvYWQuDQo+ICsgIEBwYXJh bVtpbl0gICAgICAgRnJhZ21lbnRDb3VudCAgTnVtYmVyIG9mIGZyYWdtZW50Lg0KPiArDQo+ICsg IEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgVGhlIG9wZXJhdGlvbiBjb21wbGV0ZWQg c3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgIENhbid0 IGFsbG9jYXRlIG1lbW9yeSByZXNvdXJjZXMuDQo+ICsgIEByZXR2YWwgRUZJX0FCT1JURUQgICAg ICAgICAgICAgVExTIHNlc3Npb24gc3RhdGUgaXMgaW5jb3JyZWN0Lg0KPiArICBAcmV0dmFsIE90 aGVycyAgICAgICAgICAgICAgICAgIE90aGVyIGVycm9ycyBhcyBpbmRpY2F0ZWQuDQo+ICsqKi8N Cj4gK0VGSV9TVEFUVVMNCj4gK1Rsc0RlY3J5cHRQYWNrZXQgKA0KPiArICBJTiAgICAgVExTX0lO U1RBTkNFICAgICAgICAgICAgICAgICAgKlRsc0luc3RhbmNlLA0KPiArICBJTiBPVVQgRUZJX1RM U19GUkFHTUVOVF9EQVRBICAgICAgICAgKipGcmFnbWVudFRhYmxlLA0KPiArICBJTiAgICAgVUlO VDMyICAgICAgICAgICAgICAgICAgICAgICAgKkZyYWdtZW50Q291bnQNCj4gKyAgKTsNCj4gKw0K PiArLyoqDQo+ICsgIFNldCBUTFMgc2Vzc2lvbiBkYXRhLg0KPiArDQo+ICsgIFRoZSBTZXRTZXNz aW9uRGF0YSgpIGZ1bmN0aW9uIHNldCBkYXRhIGZvciBhIG5ldyBUTFMgc2Vzc2lvbi4gQWxsIHNl c3Npb24NCj4gZGF0YSBzaG91bGQNCj4gKyAgYmUgc2V0IGJlZm9yZSBCdWlsZFJlc3BvbnNlUGFj a2V0KCkgaW52b2tlZC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICAg IFBvaW50ZXIgdG8gdGhlIEVGSV9UTFNfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtp bl0gIERhdGFUeXBlICAgICAgICAgICAgVExTIHNlc3Npb24gZGF0YSB0eXBlLg0KPiArICBAcGFy YW1baW5dICBEYXRhICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gc2Vzc2lvbiBkYXRhLg0KPiAr ICBAcGFyYW1baW5dICBEYXRhU2l6ZSAgICAgICAgICAgIFRvdGFsIHNpemUgb2Ygc2Vzc2lvbiBk YXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgVGhlIFRMUyBz ZXNzaW9uIGRhdGEgaXMgc2V0IHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJ RF9QQVJBTUVURVIgICBPbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nDQo+IGNvbmRpdGlvbnMg aXMgVFJVRToNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIE5V TEwuDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSBpcyBOVUxMLg0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFTaXplIGlzIDAuDQo+ICsg IEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgICAgVGhlIERhdGFUeXBlIGlzIHVuc3VwcG9y dGVkLg0KPiArICBAcmV0dmFsIEVGSV9BQ0NFU1NfREVOSUVEICAgICAgIElmIHRoZSBEYXRhVHlw ZSBpcyBvbmUgb2YgYmVsb3c6DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RWZpVGxzQ2xpZW50UmFuZG9tDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RWZpVGxzU2VydmVyUmFuZG9tDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RWZpVGxzS2V5TWF0ZXJpYWwNCj4gKyAgQHJldHZhbCBFRklfTk9UX1JFQURZICAgICAgICAgICBD dXJyZW50IFRMUyBzZXNzaW9uIHN0YXRlIGlzIE5PVA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEVmaVRsc1Nlc3Npb25TdGF0ZU5vdFN0YXJ0ZWQuDQo+ICsgIEByZXR2YWwg RUZJX09VVF9PRl9SRVNPVVJDRVMgICAgUmVxdWlyZWQgc3lzdGVtIHJlc291cmNlcyBjb3VsZCBu b3QNCj4gYmUgYWxsb2NhdGVkLg0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4g K1Rsc1NldFNlc3Npb25EYXRhICgNCj4gKyAgSU4gICAgIEVGSV9UTFNfUFJPVE9DT0wgICAgICAg ICAgICAgICpUaGlzLA0KPiArICBJTiAgICAgRUZJX1RMU19TRVNTSU9OX0RBVEFfVFlQRSAgICAg RGF0YVR5cGUsDQo+ICsgIElOICAgICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAqRGF0 YSwNCj4gKyAgSU4gICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFTaXplDQo+ ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBHZXQgVExTIHNlc3Npb24gZGF0YS4NCj4gKw0KPiAr ICBUaGUgR2V0U2Vzc2lvbkRhdGEoKSBmdW5jdGlvbiByZXR1cm4gdGhlIFRMUyBzZXNzaW9uIGlu Zm9ybWF0aW9uLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICAgICAgVGhpcyAgICAgICAgICAgUG9p bnRlciB0byB0aGUgRUZJX1RMU19QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAg ICAgICBEYXRhVHlwZSAgICAgICBUTFMgc2Vzc2lvbiBkYXRhIHR5cGUuDQo+ICsgIEBwYXJhbVtp biwgb3V0XSAgRGF0YSAgICAgICAgICAgUG9pbnRlciB0byBzZXNzaW9uIGRhdGEuDQo+ICsgIEBw YXJhbVtpbiwgb3V0XSAgRGF0YVNpemUgICAgICAgVG90YWwgc2l6ZSBvZiBzZXNzaW9uIGRhdGEu IE9uIGlucHV0LCBpdCBtZWFucw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRoZSBzaXplIG9mIERhdGEgYnVmZmVyLiBPbiBvdXRwdXQsIGl0IG1lYW5zIHRoZSBzaXplDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgY29waWVkIERhdGEgYnVmZmVy IGlmIEVGSV9TVUNDRVNTLCBhbmQgbWVhbnMgdGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZSBvZiBkZXNpcmVkIERhdGEgYnVmZmVyIGlmIEVGSV9CVUZGRVJfVE9P X1NNQUxMLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgVGhlIFRM UyBzZXNzaW9uIGRhdGEgaXMgZ290IHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfSU5W QUxJRF9QQVJBTUVURVIgICBPbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nDQo+IGNvbmRpdGlv bnMgaXMgVFJVRToNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlz IE5VTEwuDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YVNpemUgaXMg TlVMTC4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhIGlzIE5VTEwg aWYgKkRhdGFTaXplIGlzIG5vdCB6ZXJvLg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAg ICAgICAgIFRoZSBEYXRhVHlwZSBpcyB1bnN1cHBvcnRlZC4NCj4gKyAgQHJldHZhbCBFRklfTk9U X0ZPVU5EICAgICAgICAgICBUaGUgVExTIHNlc3Npb24gZGF0YSBpcyBub3QgZm91bmQuDQo+ICsg IEByZXR2YWwgRUZJX05PVF9SRUFEWSAgICAgICAgICAgVGhlIERhdGFUeXBlIGlzIG5vdCByZWFk eSBpbiBjdXJyZW50IHNlc3Npb24NCj4gc3RhdGUuDQo+ICsgIEByZXR2YWwgRUZJX0JVRkZFUl9U T09fU01BTEwgICAgVGhlIGJ1ZmZlciBpcyB0b28gc21hbGwgdG8gaG9sZCB0aGUgZGF0YS4NCj4g KyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtUbHNHZXRTZXNzaW9uRGF0YSAoDQo+ ICsgIElOICAgICBFRklfVExTX1BST1RPQ09MICAgICAgICAgICAgICAqVGhpcywNCj4gKyAgSU4g ICAgIEVGSV9UTFNfU0VTU0lPTl9EQVRBX1RZUEUgICAgIERhdGFUeXBlLA0KPiArICBJTiBPVVQg Vk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgKkRhdGEsICBPUFRJT05BTA0KPiArICBJTiBP VVQgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgKkRhdGFTaXplDQo+ICsgICk7DQo+ICsN Cj4gKy8qKg0KPiArICBCdWlsZCByZXNwb25zZSBwYWNrZXQgYWNjb3JkaW5nIHRvIFRMUyBzdGF0 ZSBtYWNoaW5lLiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkNCj4gdmFsaWQgZm9yDQo+ICsgIGFsZXJ0 LCBoYW5kc2hha2UgYW5kIGNoYW5nZV9jaXBoZXJfc3BlYyBjb250ZW50IHR5cGUuDQo+ICsNCj4g KyAgVGhlIEJ1aWxkUmVzcG9uc2VQYWNrZXQoKSBmdW5jdGlvbiBidWlsZHMgVExTIHJlc3BvbnNl IHBhY2tldCBpbg0KPiByZXNwb25zZSB0byB0aGUgVExTDQo+ICsgIHJlcXVlc3QgcGFja2V0IHNw ZWNpZmllZCBieSBSZXF1ZXN0QnVmZmVyIGFuZCBSZXF1ZXN0U2l6ZS4gSWYNCj4gUmVxdWVzdEJ1 ZmZlciBpcyBOVUxMIGFuZA0KPiArICBSZXF1ZXN0U2l6ZSBpcyAwLCBhbmQgVExTIHNlc3Npb24g c3RhdHVzIGlzIEVmaVRsc1Nlc3Npb25Ob3RTdGFydGVkLCB0aGUgVExTDQo+IHNlc3Npb24NCj4g KyAgd2lsbCBiZSBpbml0aWF0ZWQgYW5kIHRoZSByZXNwb25zZSBwYWNrZXQgbmVlZHMgdG8gYmUg Q2xpZW50SGVsbG8uIElmDQo+IFJlcXVlc3RCdWZmZXIgaXMNCj4gKyAgTlVMTCBhbmQgUmVxdWVz dFNpemUgaXMgMCwgYW5kIFRMUyBzZXNzaW9uIHN0YXR1cyBpcyBFZmlUbHNTZXNzaW9uQ2xvc2lu ZywNCj4gdGhlIFRMUw0KPiArICBzZXNzaW9uIHdpbGwgYmUgY2xvc2VkIGFuZCByZXNwb25zZSBw YWNrZXQgbmVlZHMgdG8gYmUgQ2xvc2VOb3RpZnkuIElmDQo+IFJlcXVlc3RCdWZmZXIgaXMNCj4g KyAgTlVMTCBhbmQgUmVxdWVzdFNpemUgaXMgMCwgYW5kIFRMUyBzZXNzaW9uIHN0YXR1cyBpcyBF ZmlUbHNTZXNzaW9uRXJyb3IsIHRoZQ0KPiBUTFMNCj4gKyAgc2Vzc2lvbiBoYXMgZXJyb3JzIGFu ZCB0aGUgcmVzcG9uc2UgcGFja2V0IG5lZWRzIHRvIGJlIEFsZXJ0IG1lc3NhZ2UNCj4gYmFzZWQg b24gZXJyb3INCj4gKyAgdHlwZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICAgICAgIFRoaXMgICAg ICAgICAgIFBvaW50ZXIgdG8gdGhlIEVGSV9UTFNfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBw YXJhbVtpbl0gICAgICAgUmVxdWVzdEJ1ZmZlciAgUG9pbnRlciB0byB0aGUgbW9zdCByZWNlbnRs eSByZWNlaXZlZCBUTFMNCj4gcGFja2V0LiBOVUxMDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbWVhbnMgVExTIG5lZWQgaW5pdGlhdGUgdGhlIFRMUyBzZXNzaW9uIGFuZCBy ZXNwb25zZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tldCBuZWVk IHRvIGJlIENsaWVudEhlbGxvLg0KPiArICBAcGFyYW1baW5dICAgICAgIFJlcXVlc3RTaXplICAg IFBhY2tldCBzaXplIGluIGJ5dGVzIGZvciB0aGUgbW9zdCByZWNlbnRseQ0KPiByZWNlaXZlZCBU TFMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrZXQuIDAgaXMgb25s eSB2YWxpZCB3aGVuIFJlcXVlc3RCdWZmZXIgaXMgTlVMTC4NCj4gKyAgQHBhcmFtW291dF0gICAg ICBCdWZmZXIgICAgICAgICBQb2ludGVyIHRvIHRoZSBidWZmZXIgdG8gaG9sZCB0aGUgYnVpbHQg cGFja2V0Lg0KPiArICBAcGFyYW1baW4sIG91dF0gIEJ1ZmZlclNpemUgICAgIFBvaW50ZXIgdG8g dGhlIGJ1ZmZlciBzaXplIGluIGJ5dGVzLiBPbiBpbnB1dCwNCj4gaXQgaXMNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYnVmZmVyIHNpemUgcHJvdmlkZWQgYnkgdGhl IGNhbGxlci4gT24gb3V0cHV0LCBpdA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlzIHRoZSBidWZmZXIgc2l6ZSBpbiBmYWN0IG5lZWRlZCB0byBjb250YWluIHRoZQ0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tldC4NCj4gKw0KPiArICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgIFRoZSByZXF1aXJlZCBUTFMgcGFja2V0IGlzIGJ1 aWx0IHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICBP bmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nDQo+IGNvbmRpdGlvbnMgaXMgVFJVRToNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIE5VTEwuDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdEJ1ZmZlciBpcyBOVUxMIGJ1dCBSZXF1 ZXN0U2l6ZSBpcyBOT1QgMC4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS ZXF1ZXN0U2l6ZSBpcyAwIGJ1dCBSZXF1ZXN0QnVmZmVyIGlzIE5PVCBOVUxMLg0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlclNpemUgaXMgTlVMTC4NCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXIgaXMgTlVMTCBpZiAqQnVmZmVyU2l6 ZSBpcyBub3QgemVyby4NCj4gKyAgQHJldHZhbCBFRklfQlVGRkVSX1RPT19TTUFMTCAgICBCdWZm ZXJTaXplIGlzIHRvbyBzbWFsbCB0byBob2xkIHRoZQ0KPiByZXNwb25zZSBwYWNrZXQuDQo+ICsg IEByZXR2YWwgRUZJX05PVF9SRUFEWSAgICAgICAgICAgQ3VycmVudCBUTFMgc2Vzc2lvbiBzdGF0 ZSBpcyBOT1QgcmVhZHkgdG8NCj4gYnVpbGQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBSZXNwb25zZVBhY2tldC4NCj4gKyAgQHJldHZhbCBFRklfQUJPUlRFRCAgICAgICAg ICAgICBTb21ldGhpbmcgd3JvbmcgYnVpbGQgcmVzcG9uc2UgcGFja2V0Lg0KPiArKiovDQo+ICtF RklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1Rsc0J1aWxkUmVzcG9uc2VQYWNrZXQgKA0KPiArICBJ TiAgICAgRUZJX1RMU19QUk9UT0NPTCAgICAgICAgICAgICAgKlRoaXMsDQo+ICsgIElOICAgICBV SU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAqUmVxdWVzdEJ1ZmZlciwgT1BUSU9OQUwNCj4g KyAgSU4gICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIFJlcXVlc3RTaXplLCBPUFRJ T05BTA0KPiArICAgICBPVVQgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgKkJ1ZmZlciwg T1BUSU9OQUwNCj4gKyAgSU4gT1VUIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICpCdWZm ZXJTaXplDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBEZWNyeXB0IG9yIGVuY3J5cHQgVExT IHBhY2tldCBkdXJpbmcgc2Vzc2lvbi4gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IHZhbGlkDQo+IGFm dGVyDQo+ICsgIHNlc3Npb24gY29ubmVjdGVkIGFuZCBmb3IgYXBwbGljYXRpb25fZGF0YSBjb250 ZW50IHR5cGUuDQo+ICsNCj4gKyAgVGhlIFByb2Nlc3NQYWNrZXQgKCkgZnVuY3Rpb24gcHJvY2Vz cyBlYWNoIGluYm91bmQgb3Igb3V0Ym91bmQgVExTIEFQUA0KPiBwYWNrZXQuDQo+ICsNCj4gKyAg QHBhcmFtW2luXSAgICAgICBUaGlzICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBFRklfVExTX1BS T1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW4sIG91dF0gIEZyYWdtZW50VGFibGUgIFBv aW50ZXIgdG8gYSBsaXN0IG9mIGZyYWdtZW50LiBUaGUgY2FsbGVyDQo+IHdpbGwgdGFrZQ0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNpYmxlIHRvIGhhbmRsZSB0 aGUgb3JpZ2luYWwgRnJhZ21lbnRUYWJsZSB3aGlsZQ0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGl0IG1heSBiZSByZWFsbG9jYXRlZCBpbiBUTFMgZHJpdmVyLiBJZiBDcnlw dE1vZGUgaXMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZmlUbHNFbmNy eXB0LCBvbiBpbnB1dCB0aGVzZSBmcmFnbWVudHMgY29udGFpbiB0aGUgVExTDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyIGFuZCBwbGFpbiB0ZXh0IFRMUyBBUFAg cGF5bG9hZDsgb24gb3V0cHV0IHRoZXNlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZnJhZ21lbnRzIGNvbnRhaW4gdGhlIFRMUyBoZWFkZXIgYW5kIGNpcGhlciB0ZXh0IFRM Uw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQUCBwYXlsb2FkLiBJZiBD cnlwdE1vZGUgaXMgRWZpVGxzRGVjcnlwdCwgb24gaW5wdXQNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0aGVzZSBmcmFnbWVudHMgY29udGFpbiB0aGUgVExTIGhlYWRlciBh bmQgY2lwaGVyIHRleHQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTFMg QVBQIHBheWxvYWQ7IG9uIG91dHB1dCB0aGVzZSBmcmFnbWVudHMgY29udGFpbiB0aGUNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTFMgaGVhZGVyIGFuZCBwbGFpbiB0ZXh0 IFRMUyBBUFAgcGF5bG9hZC4NCj4gKyAgQHBhcmFtW2luXSAgICAgICBGcmFnbWVudENvdW50ICBO dW1iZXIgb2YgZnJhZ21lbnQuDQo+ICsgIEBwYXJhbVtpbl0gICAgICAgQ3J5cHRNb2RlICAgICAg Q3J5cHQgbW9kZS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgIFRo ZSBvcGVyYXRpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfSU5W QUxJRF9QQVJBTUVURVIgICBPbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nDQo+IGNvbmRpdGlv bnMgaXMgVFJVRToNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlz IE5VTEwuDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJhZ21lbnRUYWJs ZSBpcyBOVUxMLg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyYWdtZW50 Q291bnQgaXMgTlVMTC4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDcnlw dG9Nb2RlIGlzIGludmFsaWQuDQo+ICsgIEByZXR2YWwgRUZJX05PVF9SRUFEWSAgICAgICAgICAg Q3VycmVudCBUTFMgc2Vzc2lvbiBzdGF0ZSBpcyBOT1QNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBFZmlUbHNTZXNzaW9uRGF0YVRyYW5zZmVycmluZy4NCj4gKyAgQHJldHZh bCBFRklfQUJPUlRFRCAgICAgICAgICAgICBTb21ldGhpbmcgd3JvbmcgZGVjcnlwdGlvbiB0aGUg bWVzc2FnZS4NCj4gVExTIHNlc3Npb24NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdGF0dXMgd2lsbCBiZWNvbWUgRWZpVGxzU2Vzc2lvbkVycm9yLiBUaGUgY2FsbGVyIG5l ZWQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsIEJ1aWxkUmVzcG9u c2VQYWNrZXQoKSB0byBnZW5lcmF0ZSBFcnJvciBBbGVydA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG1lc3NhZ2UgYW5kIHNlbmQgaXQgb3V0Lg0KPiArICBAcmV0dmFsIEVG SV9PVVRfT0ZfUkVTT1VSQ0VTICAgIE5vIGVub3VnaCByZXNvdXJjZSB0byBmaW5pc2ggdGhlDQo+ IG9wZXJhdGlvbi4NCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtUbHNQcm9j ZXNzUGFja2V0ICgNCj4gKyAgSU4gICAgIEVGSV9UTFNfUFJPVE9DT0wgICAgICAgICAgICAgICpU aGlzLA0KPiArICBJTiBPVVQgRUZJX1RMU19GUkFHTUVOVF9EQVRBICAgICAgICAgKipGcmFnbWVu dFRhYmxlLA0KPiArICBJTiAgICAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgKkZyYWdt ZW50Q291bnQsDQo+ICsgIElOICAgICBFRklfVExTX0NSWVBUX01PREUgICAgICAgICAgICBDcnlw dE1vZGUNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFNldCBUTFMgY29uZmlndXJhdGlvbiBk YXRhLg0KPiArDQo+ICsgIFRoZSBTZXREYXRhKCkgZnVuY3Rpb24gc2V0cyBUTFMgY29uZmlndXJh dGlvbiB0byBub24tdm9sYXRpbGUgc3RvcmFnZSBvcg0KPiB2b2xhdGlsZQ0KPiArICBzdG9yYWdl Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICAgUG9pbnRlciB0byB0 aGUNCj4gRUZJX1RMU19DT05GSUdVUkFUSU9OX1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFy YW1baW5dICBEYXRhVHlwZSAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gZGF0YSB0eXBlLg0KPiAr ICBAcGFyYW1baW5dICBEYXRhICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gY29uZmlndXJhdGlv biBkYXRhLg0KPiArICBAcGFyYW1baW5dICBEYXRhU2l6ZSAgICAgICAgICAgIFRvdGFsIHNpemUg b2YgY29uZmlndXJhdGlvbiBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAg ICAgICAgICAgVGhlIFRMUyBjb25maWd1cmF0aW9uIGRhdGEgaXMgc2V0IHN1Y2Nlc3NmdWxseS4N Cj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICBPbmUgb3IgbW9yZSBvZiB0aGUg Zm9sbG93aW5nDQo+IGNvbmRpdGlvbnMgaXMgVFJVRToNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBUaGlzIGlzIE5VTEwuDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRGF0YSBpcyBOVUxMLg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIERhdGFTaXplIGlzIDAuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgICAg VGhlIERhdGFUeXBlIGlzIHVuc3VwcG9ydGVkLg0KPiArICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVT T1VSQ0VTICAgIFJlcXVpcmVkIHN5c3RlbSByZXNvdXJjZXMgY291bGQgbm90DQo+IGJlIGFsbG9j YXRlZC4NCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtUbHNDb25maWd1cmF0 aW9uU2V0RGF0YSAoDQo+ICsgIElOICAgICBFRklfVExTX0NPTkZJR1VSQVRJT05fUFJPVE9DT0wg ICpUaGlzLA0KPiArICBJTiAgICAgRUZJX1RMU19DT05GSUdfREFUQV9UWVBFICAgICAgICBEYXRh VHlwZSwNCj4gKyAgSU4gICAgIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkRhdGEs DQo+ICsgIElOICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFTaXplDQo+ ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBHZXQgVExTIGNvbmZpZ3VyYXRpb24gZGF0YS4NCj4g Kw0KPiArICBUaGUgR2V0RGF0YSgpIGZ1bmN0aW9uIGdldHMgVExTIGNvbmZpZ3VyYXRpb24uDQo+ ICsNCj4gKyAgQHBhcmFtW2luXSAgICAgICBUaGlzICAgICAgICAgICBQb2ludGVyIHRvIHRoZQ0K PiBFRklfVExTX0NPTkZJR1VSQVRJT05fUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtp bl0gICAgICAgRGF0YVR5cGUgICAgICAgQ29uZmlndXJhdGlvbiBkYXRhIHR5cGUuDQo+ICsgIEBw YXJhbVtpbiwgb3V0XSAgRGF0YSAgICAgICAgICAgUG9pbnRlciB0byBjb25maWd1cmF0aW9uIGRh dGEuDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSAgRGF0YVNpemUgICAgICAgVG90YWwgc2l6ZSBvZiBj b25maWd1cmF0aW9uIGRhdGEuIE9uIGlucHV0LCBpdA0KPiBtZWFucw0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRoZSBzaXplIG9mIERhdGEgYnVmZmVyLiBPbiBvdXRwdXQs IGl0IG1lYW5zIHRoZSBzaXplDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg b2YgY29waWVkIERhdGEgYnVmZmVyIGlmIEVGSV9TVUNDRVNTLCBhbmQgbWVhbnMgdGhlDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSBvZiBkZXNpcmVkIERhdGEgYnVm ZmVyIGlmIEVGSV9CVUZGRVJfVE9PX1NNQUxMLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NF U1MgICAgICAgICAgICAgVGhlIFRMUyBjb25maWd1cmF0aW9uIGRhdGEgaXMgZ290IHN1Y2Nlc3Nm dWxseS4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICBPbmUgb3IgbW9yZSBv ZiB0aGUgZm9sbG93aW5nDQo+IGNvbmRpdGlvbnMgaXMgVFJVRToNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIE5VTEwuDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRGF0YVNpemUgaXMgTlVMTC4NCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBEYXRhIGlzIE5VTEwgaWYgKkRhdGFTaXplIGlzIG5vdCB6ZXJvLg0KPiAr ICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICAgIFRoZSBEYXRhVHlwZSBpcyB1bnN1cHBv cnRlZC4NCj4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgICBUaGUgVExTIGNvbmZp Z3VyYXRpb24gZGF0YSBpcyBub3QgZm91bmQuDQo+ICsgIEByZXR2YWwgRUZJX0JVRkZFUl9UT09f U01BTEwgICAgVGhlIGJ1ZmZlciBpcyB0b28gc21hbGwgdG8gaG9sZCB0aGUgZGF0YS4NCj4gKyoq Lw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtUbHNDb25maWd1cmF0aW9uR2V0RGF0YSAo DQo+ICsgIElOICAgICBFRklfVExTX0NPTkZJR1VSQVRJT05fUFJPVE9DT0wgICpUaGlzLA0KPiAr ICBJTiAgICAgRUZJX1RMU19DT05GSUdfREFUQV9UWVBFICAgICAgICBEYXRhVHlwZSwNCj4gKyAg SU4gT1VUIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkRhdGEsIE9QVElPTkFMDQo+ ICsgIElOIE9VVCBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICpEYXRhU2l6ZQ0KPiAr ICApOw0KPiArDQo+ICsjZW5kaWYNCj4gZGlmZiAtLWdpdCBhL05ldHdvcmtQa2cvVGxzRHhlL1Rs c1Byb3RvY29sLmMNCj4gYi9OZXR3b3JrUGtnL1Rsc0R4ZS9UbHNQcm90b2NvbC5jDQo+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAuLmJjNjE3ZTENCj4gLS0tIC9kZXYvbnVs bA0KPiArKysgYi9OZXR3b3JrUGtnL1Rsc0R4ZS9UbHNQcm90b2NvbC5jDQo+IEBAIC0wLDAgKzEs NjMyIEBADQo+ICsvKiogQGZpbGUNCj4gKyAgSW1wbGVtZW50YXRpb24gb2YgRUZJIFRMUyBQcm90 b2NvbCBJbnRlcmZhY2VzLg0KPiArDQo+ICsgIENvcHlyaWdodCAoYykgMjAxNiwgSW50ZWwgQ29y cG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiArDQo+ICsgIFRoaXMgcHJvZ3Jh bSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4gKyAgYXJlIGxpY2Vuc2VkIGFuZCBt YWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRA0K PiBMaWNlbnNlDQo+ICsgIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhl IGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUNCj4gZm91bmQgYXQNCj4gKyAgaHR0cDov L29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocC4NCj4gKw0KPiArICBUSEUg UFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElT Ig0KPiBCQVNJUywNCj4gKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBP RiBBTlkgS0lORCwgRUlUSEVSDQo+IEVYUFJFU1MgT1IgSU1QTElFRC4NCj4gKw0KPiArKiovDQo+ ICsNCj4gKyNpbmNsdWRlICJUbHNJbXBsLmgiDQo+ICsNCj4gK0VGSV9UTFNfUFJPVE9DT0wgIG1U bHNQcm90b2NvbCA9IHsNCj4gKyAgVGxzU2V0U2Vzc2lvbkRhdGEsDQo+ICsgIFRsc0dldFNlc3Np b25EYXRhLA0KPiArICBUbHNCdWlsZFJlc3BvbnNlUGFja2V0LA0KPiArICBUbHNQcm9jZXNzUGFj a2V0DQo+ICt9Ow0KPiArDQo+ICsvKioNCj4gKyAgU2V0IFRMUyBzZXNzaW9uIGRhdGEuDQo+ICsN Cj4gKyAgVGhlIFNldFNlc3Npb25EYXRhKCkgZnVuY3Rpb24gc2V0IGRhdGEgZm9yIGEgbmV3IFRM UyBzZXNzaW9uLiBBbGwgc2Vzc2lvbg0KPiBkYXRhIHNob3VsZA0KPiArICBiZSBzZXQgYmVmb3Jl IEJ1aWxkUmVzcG9uc2VQYWNrZXQoKSBpbnZva2VkLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRo aXMgICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgRUZJX1RMU19QUk9UT0NPTCBpbnN0YW5j ZS4NCj4gKyAgQHBhcmFtW2luXSAgRGF0YVR5cGUgICAgICAgICAgICBUTFMgc2Vzc2lvbiBkYXRh IHR5cGUuDQo+ICsgIEBwYXJhbVtpbl0gIERhdGEgICAgICAgICAgICAgICAgUG9pbnRlciB0byBz ZXNzaW9uIGRhdGEuDQo+ICsgIEBwYXJhbVtpbl0gIERhdGFTaXplICAgICAgICAgICAgVG90YWwg c2l6ZSBvZiBzZXNzaW9uIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAg ICAgICAgICBUaGUgVExTIHNlc3Npb24gZGF0YSBpcyBzZXQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBA cmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgIE9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dp bmcNCj4gY29uZGl0aW9ucyBpcyBUUlVFOg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFRoaXMgaXMgTlVMTC4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBEYXRhIGlzIE5VTEwuDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0 YVNpemUgaXMgMC4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgICBUaGUgRGF0 YVR5cGUgaXMgdW5zdXBwb3J0ZWQuDQo+ICsgIEByZXR2YWwgRUZJX0FDQ0VTU19ERU5JRUQgICAg ICAgSWYgdGhlIERhdGFUeXBlIGlzIG9uZSBvZiBiZWxvdzoNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBFZmlUbHNDbGllbnRSYW5kb20NCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBFZmlUbHNTZXJ2ZXJSYW5kb20NCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBFZmlUbHNLZXlNYXRlcmlhbA0KPiArICBAcmV0dmFsIEVGSV9OT1Rf UkVBRFkgICAgICAgICAgIEN1cnJlbnQgVExTIHNlc3Npb24gc3RhdGUgaXMgTk9UDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWZpVGxzU2Vzc2lvblN0YXRlTm90U3RhcnRl ZC4NCj4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgICBSZXF1aXJlZCBzeXN0ZW0g cmVzb3VyY2VzIGNvdWxkIG5vdA0KPiBiZSBhbGxvY2F0ZWQuDQo+ICsqKi8NCj4gK0VGSV9TVEFU VVMNCj4gK0VGSUFQSQ0KPiArVGxzU2V0U2Vzc2lvbkRhdGEgKA0KPiArICBJTiAgICAgRUZJX1RM U19QUk9UT0NPTCAgICAgICAgICAgICAgKlRoaXMsDQo+ICsgIElOICAgICBFRklfVExTX1NFU1NJ T05fREFUQV9UWVBFICAgICBEYXRhVHlwZSwNCj4gKyAgSU4gICAgIFZPSUQgICAgICAgICAgICAg ICAgICAgICAgICAgICpEYXRhLA0KPiArICBJTiAgICAgVUlOVE4gICAgICAgICAgICAgICAgICAg ICAgICAgRGF0YVNpemUNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAg ICAgIFN0YXR1czsNCj4gKyAgVExTX0lOU1RBTkNFICAgICAgICAgICAgICAqSW5zdGFuY2U7DQo+ ICsgIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgKkNpcGhlcklkOw0KPiArICBVSU5UTiAgICAg ICAgICAgICAgICAgICAgIEluZGV4Ow0KPiArDQo+ICsgIEVGSV9UUEwgICAgICAgICAgICAgICAg ICAgT2xkVHBsOw0KPiArDQo+ICsgIFN0YXR1cyA9IEVGSV9TVUNDRVNTOw0KPiArICBDaXBoZXJJ ZCA9IE5VTEw7DQo+ICsNCj4gKyAgaWYgKFRoaXMgPT0gTlVMTCB8fCBEYXRhID09IE5VTEwgfHwg RGF0YVNpemUgPT0gMCkgew0KPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ ICsgIH0NCj4gKw0KPiArICBPbGRUcGwgPSBnQlMtPlJhaXNlVFBMIChUUExfQ0FMTEJBQ0spOw0K PiArDQo+ICsgIEluc3RhbmNlID0gVExTX0lOU1RBTkNFX0ZST01fUFJPVE9DT0xfVEhJUyAoVGhp cyk7DQo+ICsNCj4gKyAgaWYgKERhdGFUeXBlICE9IEVmaVRsc1Nlc3Npb25TdGF0ZSAgJiYgSW5z dGFuY2UtPlRsc1Nlc3Npb25TdGF0ZSAhPQ0KPiBFZmlUbHNTZXNzaW9uTm90U3RhcnRlZCl7DQo+ ICsgICAgU3RhdHVzID0gRUZJX05PVF9SRUFEWTsNCj4gKyAgICBnb3RvIE9OX0VYSVQ7DQo+ICsg IH0NCj4gKw0KPiArICBzd2l0Y2ggKERhdGFUeXBlKSB7DQo+ICsgIC8vDQo+ICsgIC8vIFNlc3Np b24gQ29uZmlndXJhdGlvbg0KPiArICAvLw0KPiArICBjYXNlIEVmaVRsc1ZlcnNpb246DQo+ICsg ICAgaWYgKERhdGFTaXplICE9IHNpemVvZiAoRUZJX1RMU19WRVJTSU9OKSkgew0KPiArICAgICAg U3RhdHVzID0gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiArICAgICAgZ290byBPTl9FWElUOw0K PiArICAgIH0NCj4gKw0KPiArICAgIFN0YXR1cyA9IFRsc1NldFZlcnNpb24gKEluc3RhbmNlLT5U bHNDb25uLCAoKEVGSV9UTFNfVkVSU0lPTiAqKSBEYXRhKS0NCj4gPk1ham9yLCAoKEVGSV9UTFNf VkVSU0lPTiAqKSBEYXRhKS0+TWlub3IpOw0KPiArICAgIGJyZWFrOw0KPiArICBjYXNlIEVmaVRs c0Nvbm5lY3Rpb25FbmQ6DQo+ICsgICAgaWYgKERhdGFTaXplICE9IHNpemVvZiAoRUZJX1RMU19D T05ORUNUSU9OX0VORCkpIHsNCj4gKyAgICAgIFN0YXR1cyA9IEVGSV9JTlZBTElEX1BBUkFNRVRF UjsNCj4gKyAgICAgIGdvdG8gT05fRVhJVDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBTdGF0dXMg PSBUbHNTZXRDb25uZWN0aW9uRW5kIChJbnN0YW5jZS0+VGxzQ29ubiwNCj4gKigoRUZJX1RMU19D T05ORUNUSU9OX0VORCAqKSBEYXRhKSk7DQo+ICsgICAgYnJlYWs7DQo+ICsgIGNhc2UgRWZpVGxz Q2lwaGVyTGlzdDoNCj4gKyAgICBDaXBoZXJJZCA9IEFsbG9jYXRlUG9vbCAoRGF0YVNpemUpOw0K PiArICAgIGlmIChDaXBoZXJJZCA9PSBOVUxMKSB7DQo+ICsgICAgICBTdGF0dXMgPSBFRklfT1VU X09GX1JFU09VUkNFUzsNCj4gKyAgICAgIGdvdG8gT05fRVhJVDsNCj4gKyAgICB9DQo+ICsNCj4g KyAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBEYXRhU2l6ZSAvIHNpemVvZiAoRUZJX1RMU19D SVBIRVIpOyBJbmRleCsrKSB7DQo+ICsgICAgICAqKENpcGhlcklkICtJbmRleCkgPSBIVE9OUyAo KigoKFVJTlQxNiAqKSBEYXRhKSArIEluZGV4KSk7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgU3Rh dHVzID0gVGxzU2V0Q2lwaGVyTGlzdCAoSW5zdGFuY2UtPlRsc0Nvbm4sIENpcGhlcklkLCBEYXRh U2l6ZSAvIHNpemVvZg0KPiAoRUZJX1RMU19DSVBIRVIpKTsNCj4gKw0KPiArICAgIEZyZWVQb29s IChDaXBoZXJJZCk7DQo+ICsgICAgYnJlYWs7DQo+ICsgIGNhc2UgRWZpVGxzQ29tcHJlc3Npb25N ZXRob2Q6DQo+ICsgICAgLy8NCj4gKyAgICAvLyBUTFMgc2VlbXMgb25seSBkZWZpbmUgb25lIENv bXByZXNzaW9uTWV0aG9kLm51bGwsIHdoaWNoIHNwZWNpZmllcw0KPiB0aGF0IGRhdGEgZXhjaGFu Z2VkIHZpYSB0aGUNCj4gKyAgICAvLyByZWNvcmQgcHJvdG9jb2wgd2lsbCBub3QgYmUgY29tcHJl c3NlZC4NCj4gKyAgICAvLyBNb3JlIGluZm9ybWF0aW9uIGZyb20gT3BlblNTTDoNCj4gaHR0cDov L3d3dy5vcGVuc3NsLm9yZy9kb2NzL21hbm1hc3Rlci9zc2wvU1NMX0NPTVBfYWRkX2NvbXByZXNz aW8NCj4gbl9tZXRob2QuaHRtbA0KPiArICAgIC8vIFRoZSBUTFMgUkZDIGRvZXMgaG93ZXZlciBu b3Qgc3BlY2lmeSBjb21wcmVzc2lvbiBtZXRob2RzIG9yIHRoZWlyDQo+IGNvcnJlc3BvbmRpbmcg aWRlbnRpZmllcnMsDQo+ICsgICAgLy8gc28gdGhlcmUgaXMgY3VycmVudGx5IG5vIGNvbXBhdGli bGUgd2F5IHRvIGludGVncmF0ZSBjb21wcmVzc2lvbiB3aXRoDQo+IHVua25vd24gcGVlcnMuDQo+ ICsgICAgLy8gSXQgaXMgdGhlcmVmb3JlIGN1cnJlbnRseSBub3QgcmVjb21tZW5kZWQgdG8gaW50 ZWdyYXRlIGNvbXByZXNzaW9uDQo+IGludG8gYXBwbGljYXRpb25zLg0KPiArICAgIC8vIEFwcGxp Y2F0aW9ucyBmb3Igbm9uLXB1YmxpYyB1c2UgbWF5IGFncmVlIG9uIGNlcnRhaW4gY29tcHJlc3Np b24NCj4gbWV0aG9kcy4NCj4gKyAgICAvLyBVc2luZyBkaWZmZXJlbnQgY29tcHJlc3Npb24gbWV0 aG9kcyB3aXRoIHRoZSBzYW1lIGlkZW50aWZpZXIgd2lsbCBsZWFkDQo+IHRvIGNvbm5lY3Rpb24g ZmFpbHVyZS4NCj4gKyAgICAvLw0KPiArICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IERhdGFT aXplIC8gc2l6ZW9mIChFRklfVExTX0NPTVBSRVNTSU9OKTsNCj4gSW5kZXgrKykgew0KPiArICAg ICAgU3RhdHVzID0gVGxzU2V0Q29tcHJlc3Npb25NZXRob2QgKCooKFVJTlQ4ICopIERhdGEgKyBJ bmRleCkpOw0KPiArICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgICBi cmVhazsNCj4gKyAgICAgIH0NCj4gKyAgICB9DQo+ICsNCj4gKyAgICBicmVhazsNCj4gKyAgY2Fz ZSBFZmlUbHNFeHRlbnNpb25EYXRhOg0KPiArICAgIFN0YXR1cyA9IEVGSV9VTlNVUFBPUlRFRDsN Cj4gKyAgICBnb3RvIE9OX0VYSVQ7DQo+ICsgIGNhc2UgRWZpVGxzVmVyaWZ5TWV0aG9kOg0KPiAr ICAgIGlmIChEYXRhU2l6ZSAhPSBzaXplb2YgKEVGSV9UTFNfVkVSSUZZKSkgew0KPiArICAgICAg U3RhdHVzID0gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiArICAgICAgZ290byBPTl9FWElUOw0K PiArICAgIH0NCj4gKw0KPiArICAgIFRsc1NldFZlcmlmeSAoSW5zdGFuY2UtPlRsc0Nvbm4sICoo KFVJTlQzMiAqKSBEYXRhKSk7DQo+ICsgICAgYnJlYWs7DQo+ICsgIGNhc2UgRWZpVGxzU2Vzc2lv bklEOg0KPiArICAgIGlmIChEYXRhU2l6ZSAhPSBzaXplb2YgKEVGSV9UTFNfU0VTU0lPTl9JRCkp IHsNCj4gKyAgICAgIFN0YXR1cyA9IEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgICAgIGdv dG8gT05fRVhJVDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBTdGF0dXMgPSBUbHNTZXRTZXNzaW9u SWQgKA0KPiArICAgICAgICAgICAgICAgSW5zdGFuY2UtPlRsc0Nvbm4sDQo+ICsgICAgICAgICAg ICAgICAoKEVGSV9UTFNfU0VTU0lPTl9JRCAqKSBEYXRhKS0+RGF0YSwNCj4gKyAgICAgICAgICAg ICAgICgoRUZJX1RMU19TRVNTSU9OX0lEICopIERhdGEpLT5MZW5ndGgNCj4gKyAgICAgICAgICAg ICAgICk7DQo+ICsgICAgYnJlYWs7DQo+ICsgIGNhc2UgRWZpVGxzU2Vzc2lvblN0YXRlOg0KPiAr ICAgIGlmIChEYXRhU2l6ZSAhPSBzaXplb2YgKEVGSV9UTFNfU0VTU0lPTl9TVEFURSkpIHsNCj4g KyAgICAgIFN0YXR1cyA9IEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgICAgIGdvdG8gT05f RVhJVDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBJbnN0YW5jZS0+VGxzU2Vzc2lvblN0YXRlID0g KihFRklfVExTX1NFU1NJT05fU1RBVEUgKikgRGF0YTsNCj4gKyAgICBicmVhazsNCj4gKyAgLy8N Cj4gKyAgLy8gU2Vzc2lvbiBpbmZvcm1hdGlvbg0KPiArICAvLw0KPiArICBjYXNlIEVmaVRsc0Ns aWVudFJhbmRvbToNCj4gKyAgICBTdGF0dXMgPSBFRklfQUNDRVNTX0RFTklFRDsNCj4gKyAgICBi cmVhazsNCj4gKyAgY2FzZSBFZmlUbHNTZXJ2ZXJSYW5kb206DQo+ICsgICAgU3RhdHVzID0gRUZJ X0FDQ0VTU19ERU5JRUQ7DQo+ICsgICAgYnJlYWs7DQo+ICsgIGNhc2UgRWZpVGxzS2V5TWF0ZXJp YWw6DQo+ICsgICAgU3RhdHVzID0gRUZJX0FDQ0VTU19ERU5JRUQ7DQo+ICsgICAgYnJlYWs7DQo+ ICsgIC8vDQo+ICsgIC8vIFVuc3VwcG9ydGVkIHR5cGUuDQo+ICsgIC8vDQo+ICsgIGRlZmF1bHQ6 DQo+ICsgICAgU3RhdHVzID0gRUZJX1VOU1VQUE9SVEVEOw0KPiArICB9DQo+ICsNCj4gK09OX0VY SVQ6DQo+ICsgIGdCUy0+UmVzdG9yZVRQTCAoT2xkVHBsKTsNCj4gKyAgcmV0dXJuIFN0YXR1czsN Cj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIEdldCBUTFMgc2Vzc2lvbiBkYXRhLg0KPiArDQo+ICsg IFRoZSBHZXRTZXNzaW9uRGF0YSgpIGZ1bmN0aW9uIHJldHVybiB0aGUgVExTIHNlc3Npb24gaW5m b3JtYXRpb24uDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgICAgICBUaGlzICAgICAgICAgICBQb2lu dGVyIHRvIHRoZSBFRklfVExTX1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dICAg ICAgIERhdGFUeXBlICAgICAgIFRMUyBzZXNzaW9uIGRhdGEgdHlwZS4NCj4gKyAgQHBhcmFtW2lu LCBvdXRdICBEYXRhICAgICAgICAgICBQb2ludGVyIHRvIHNlc3Npb24gZGF0YS4NCj4gKyAgQHBh cmFtW2luLCBvdXRdICBEYXRhU2l6ZSAgICAgICBUb3RhbCBzaXplIG9mIHNlc3Npb24gZGF0YS4g T24gaW5wdXQsIGl0IG1lYW5zDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dGhlIHNpemUgb2YgRGF0YSBidWZmZXIuIE9uIG91dHB1dCwgaXQgbWVhbnMgdGhlIHNpemUNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBjb3BpZWQgRGF0YSBidWZmZXIg aWYgRUZJX1NVQ0NFU1MsIGFuZCBtZWFucyB0aGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaXplIG9mIGRlc2lyZWQgRGF0YSBidWZmZXIgaWYgRUZJX0JVRkZFUl9UT09f U01BTEwuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICBUaGUgVExT IHNlc3Npb24gZGF0YSBpcyBnb3Qgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9JTlZB TElEX1BBUkFNRVRFUiAgIE9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcNCj4gY29uZGl0aW9u cyBpcyBUUlVFOg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMg TlVMTC4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhU2l6ZSBpcyBO VUxMLg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgaXMgTlVMTCBp ZiAqRGF0YVNpemUgaXMgbm90IHplcm8uDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAg ICAgICAgVGhlIERhdGFUeXBlIGlzIHVuc3VwcG9ydGVkLg0KPiArICBAcmV0dmFsIEVGSV9OT1Rf Rk9VTkQgICAgICAgICAgIFRoZSBUTFMgc2Vzc2lvbiBkYXRhIGlzIG5vdCBmb3VuZC4NCj4gKyAg QHJldHZhbCBFRklfTk9UX1JFQURZICAgICAgICAgICBUaGUgRGF0YVR5cGUgaXMgbm90IHJlYWR5 IGluIGN1cnJlbnQgc2Vzc2lvbg0KPiBzdGF0ZS4NCj4gKyAgQHJldHZhbCBFRklfQlVGRkVSX1RP T19TTUFMTCAgICBUaGUgYnVmZmVyIGlzIHRvbyBzbWFsbCB0byBob2xkIHRoZSBkYXRhLg0KPiAr KiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1Rsc0dldFNlc3Npb25EYXRhICgNCj4g KyAgSU4gICAgIEVGSV9UTFNfUFJPVE9DT0wgICAgICAgICAgICAgICpUaGlzLA0KPiArICBJTiAg ICAgRUZJX1RMU19TRVNTSU9OX0RBVEFfVFlQRSAgICAgRGF0YVR5cGUsDQo+ICsgIElOIE9VVCBW T0lEICAgICAgICAgICAgICAgICAgICAgICAgICAqRGF0YSwgIE9QVElPTkFMDQo+ICsgIElOIE9V VCBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAqRGF0YVNpemUNCj4gKyAgKQ0KPiArew0K PiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgVExTX0lOU1RBTkNF ICAgICAgICAgICAgICAqSW5zdGFuY2U7DQo+ICsNCj4gKyAgRUZJX1RQTCAgICAgICAgICAgICAg ICAgICBPbGRUcGw7DQo+ICsNCj4gKyAgU3RhdHVzID0gRUZJX1NVQ0NFU1M7DQo+ICsNCj4gKyAg aWYgKFRoaXMgPT0gTlVMTCB8fCBEYXRhU2l6ZSA9PSBOVUxMIHx8IChEYXRhID09IE5VTEwgJiYg KkRhdGFTaXplICE9IDApKQ0KPiB7DQo+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRF UjsNCj4gKyAgfQ0KPiArDQo+ICsgIE9sZFRwbCA9IGdCUy0+UmFpc2VUUEwgKFRQTF9DQUxMQkFD Syk7DQo+ICsNCj4gKyAgSW5zdGFuY2UgPSBUTFNfSU5TVEFOQ0VfRlJPTV9QUk9UT0NPTF9USElT IChUaGlzKTsNCj4gKw0KPiArICBpZiAoSW5zdGFuY2UtPlRsc1Nlc3Npb25TdGF0ZSA9PSBFZmlU bHNTZXNzaW9uTm90U3RhcnRlZCAmJg0KPiArICAgIChEYXRhVHlwZSA9PSBFZmlUbHNTZXNzaW9u SUQgfHwgRGF0YVR5cGUgPT0gRWZpVGxzQ2xpZW50UmFuZG9tIHx8DQo+ICsgICAgRGF0YVR5cGUg PT0gRWZpVGxzU2VydmVyUmFuZG9tIHx8IERhdGFUeXBlID09IEVmaVRsc0tleU1hdGVyaWFsKSkg ew0KPiArICAgIFN0YXR1cyA9IEVGSV9OT1RfUkVBRFk7DQo+ICsgICAgZ290byBPTl9FWElUOw0K PiArICB9DQo+ICsNCj4gKyAgc3dpdGNoIChEYXRhVHlwZSkgew0KPiArICBjYXNlIEVmaVRsc1Zl cnNpb246DQo+ICsgICAgaWYgKCpEYXRhU2l6ZSA8IHNpemVvZiAoRUZJX1RMU19WRVJTSU9OKSkg ew0KPiArICAgICAgKkRhdGFTaXplID0gc2l6ZW9mIChFRklfVExTX1ZFUlNJT04pOw0KPiArICAg ICAgU3RhdHVzID0gRUZJX0JVRkZFUl9UT09fU01BTEw7DQo+ICsgICAgICBnb3RvIE9OX0VYSVQ7 DQo+ICsgICAgfQ0KPiArICAgICpEYXRhU2l6ZSA9IHNpemVvZiAoRUZJX1RMU19WRVJTSU9OKTsN Cj4gKyAgICAqKChVSU5UMTYgKikgRGF0YSkgPSBIVE9OUyAoVGxzR2V0VmVyc2lvbiAoSW5zdGFu Y2UtPlRsc0Nvbm4pKTsNCj4gKyAgICBicmVhazsNCj4gKyAgY2FzZSBFZmlUbHNDb25uZWN0aW9u RW5kOg0KPiArICAgIGlmICgqRGF0YVNpemUgPCBzaXplb2YgKEVGSV9UTFNfQ09OTkVDVElPTl9F TkQpKSB7DQo+ICsgICAgICAqRGF0YVNpemUgPSBzaXplb2YgKEVGSV9UTFNfQ09OTkVDVElPTl9F TkQpOw0KPiArICAgICAgU3RhdHVzID0gRUZJX0JVRkZFUl9UT09fU01BTEw7DQo+ICsgICAgICBn b3RvIE9OX0VYSVQ7DQo+ICsgICAgfQ0KPiArICAgICpEYXRhU2l6ZSA9IHNpemVvZiAoRUZJX1RM U19DT05ORUNUSU9OX0VORCk7DQo+ICsgICAgKigoVUlOVDggKikgRGF0YSkgPSBUbHNHZXRDb25u ZWN0aW9uRW5kIChJbnN0YW5jZS0+VGxzQ29ubik7DQo+ICsgICAgYnJlYWs7DQo+ICsgIGNhc2Ug RWZpVGxzQ2lwaGVyTGlzdDoNCj4gKyAgICAvLw0KPiArICAgIC8vIEdldCB0aGUgY3VycmVudCBz ZXNzaW9uIGNpcGhlciBzdWl0ZS4NCj4gKyAgICAvLw0KPiArICAgIGlmICgqRGF0YVNpemUgPCBz aXplb2YgKEVGSV9UTFNfQ0lQSEVSKSkgew0KPiArICAgICAgKkRhdGFTaXplID0gc2l6ZW9mIChF RklfVExTX0NJUEhFUik7DQo+ICsgICAgICBTdGF0dXMgPSBFRklfQlVGRkVSX1RPT19TTUFMTDsN Cj4gKyAgICAgIGdvdG8gT05fRVhJVDsNCj4gKyAgICB9DQo+ICsgICAgKkRhdGFTaXplID0gc2l6 ZW9mKEVGSV9UTFNfQ0lQSEVSKTsNCj4gKyAgICBTdGF0dXMgPSBUbHNHZXRDdXJyZW50Q2lwaGVy IChJbnN0YW5jZS0+VGxzQ29ubiwgKFVJTlQxNiAqKSBEYXRhKTsNCj4gKyAgICAqKChVSU5UMTYg KikgRGF0YSkgPSBIVE9OUyAoKigoVUlOVDE2ICopIERhdGEpKTsNCj4gKyAgICBicmVhazsNCj4g KyAgY2FzZSBFZmlUbHNDb21wcmVzc2lvbk1ldGhvZDoNCj4gKyAgICAvLw0KPiArICAgIC8vIEdl dCB0aGUgY3VycmVudCBzZXNzaW9uIGNvbXByZXNzaW9uIG1ldGhvZC4NCj4gKyAgICAvLw0KPiAr ICAgIGlmICgqRGF0YVNpemUgPCBzaXplb2YgKEVGSV9UTFNfQ09NUFJFU1NJT04pKSB7DQo+ICsg ICAgICAqRGF0YVNpemUgPSBzaXplb2YgKEVGSV9UTFNfQ09NUFJFU1NJT04pOw0KPiArICAgICAg U3RhdHVzID0gRUZJX0JVRkZFUl9UT09fU01BTEw7DQo+ICsgICAgICBnb3RvIE9OX0VYSVQ7DQo+ ICsgICAgfQ0KPiArICAgICpEYXRhU2l6ZSA9IHNpemVvZiAoRUZJX1RMU19DT01QUkVTU0lPTik7 DQo+ICsgICAgU3RhdHVzID0gVGxzR2V0Q3VycmVudENvbXByZXNzaW9uSWQgKEluc3RhbmNlLT5U bHNDb25uLCAoVUlOVDggKikNCj4gRGF0YSk7DQo+ICsgICAgYnJlYWs7DQo+ICsgIGNhc2UgRWZp VGxzRXh0ZW5zaW9uRGF0YToNCj4gKyAgICBTdGF0dXMgPSBFRklfVU5TVVBQT1JURUQ7DQo+ICsg ICAgZ290byBPTl9FWElUOw0KPiArICBjYXNlIEVmaVRsc1ZlcmlmeU1ldGhvZDoNCj4gKyAgICBp ZiAoKkRhdGFTaXplIDwgc2l6ZW9mIChFRklfVExTX1ZFUklGWSkpIHsNCj4gKyAgICAgICpEYXRh U2l6ZSA9IHNpemVvZiAoRUZJX1RMU19WRVJJRlkpOw0KPiArICAgICAgU3RhdHVzID0gRUZJX0JV RkZFUl9UT09fU01BTEw7DQo+ICsgICAgICBnb3RvIE9OX0VYSVQ7DQo+ICsgICAgfQ0KPiArICAg ICpEYXRhU2l6ZSA9IHNpemVvZiAoRUZJX1RMU19WRVJJRlkpOw0KPiArICAgICooKFVJTlQzMiAq KSBEYXRhKSA9IFRsc0dldFZlcmlmeSAoSW5zdGFuY2UtPlRsc0Nvbm4pOw0KPiArICAgIGJyZWFr Ow0KPiArICBjYXNlIEVmaVRsc1Nlc3Npb25JRDoNCj4gKyAgICBpZiAoKkRhdGFTaXplIDwgc2l6 ZW9mIChFRklfVExTX1NFU1NJT05fSUQpKSB7DQo+ICsgICAgICAqRGF0YVNpemUgPSBzaXplb2Yg KEVGSV9UTFNfU0VTU0lPTl9JRCk7DQo+ICsgICAgICBTdGF0dXMgPSBFRklfQlVGRkVSX1RPT19T TUFMTDsNCj4gKyAgICAgIGdvdG8gT05fRVhJVDsNCj4gKyAgICB9DQo+ICsgICAgKkRhdGFTaXpl ID0gc2l6ZW9mIChFRklfVExTX1NFU1NJT05fSUQpOw0KPiArICAgIFN0YXR1cyA9IFRsc0dldFNl c3Npb25JZCAoDQo+ICsgICAgICAgICAgICAgICBJbnN0YW5jZS0+VGxzQ29ubiwNCj4gKyAgICAg ICAgICAgICAgICgoRUZJX1RMU19TRVNTSU9OX0lEICopIERhdGEpLT5EYXRhLA0KPiArICAgICAg ICAgICAgICAgJigoKEVGSV9UTFNfU0VTU0lPTl9JRCAqKSBEYXRhKS0+TGVuZ3RoKQ0KPiArICAg ICAgICAgICAgICAgKTsNCj4gKyAgICBicmVhazsNCj4gKyAgY2FzZSBFZmlUbHNTZXNzaW9uU3Rh dGU6DQo+ICsgICAgaWYgKCpEYXRhU2l6ZSA8IHNpemVvZiAoRUZJX1RMU19TRVNTSU9OX1NUQVRF KSkgew0KPiArICAgICAgKkRhdGFTaXplID0gc2l6ZW9mIChFRklfVExTX1NFU1NJT05fU1RBVEUp Ow0KPiArICAgICAgU3RhdHVzID0gRUZJX0JVRkZFUl9UT09fU01BTEw7DQo+ICsgICAgICBnb3Rv IE9OX0VYSVQ7DQo+ICsgICAgfQ0KPiArICAgICpEYXRhU2l6ZSA9IHNpemVvZiAoRUZJX1RMU19T RVNTSU9OX1NUQVRFKTsNCj4gKyAgICBDb3B5TWVtIChEYXRhLCAmSW5zdGFuY2UtPlRsc1Nlc3Np b25TdGF0ZSwgKkRhdGFTaXplKTsNCj4gKyAgICBicmVhazsNCj4gKyAgY2FzZSBFZmlUbHNDbGll bnRSYW5kb206DQo+ICsgICAgaWYgKCpEYXRhU2l6ZSA8IHNpemVvZiAoRUZJX1RMU19SQU5ET00p KSB7DQo+ICsgICAgICAqRGF0YVNpemUgPSBzaXplb2YgKEVGSV9UTFNfUkFORE9NKTsNCj4gKyAg ICAgIFN0YXR1cyA9IEVGSV9CVUZGRVJfVE9PX1NNQUxMOw0KPiArICAgICAgZ290byBPTl9FWElU Ow0KPiArICAgIH0NCj4gKyAgICAqRGF0YVNpemUgPSBzaXplb2YgKEVGSV9UTFNfUkFORE9NKTsN Cj4gKyAgICBUbHNHZXRDbGllbnRSYW5kb20gKEluc3RhbmNlLT5UbHNDb25uLCAoVUlOVDggKikg RGF0YSk7DQo+ICsgICAgYnJlYWs7DQo+ICsgIGNhc2UgRWZpVGxzU2VydmVyUmFuZG9tOg0KPiAr ICAgIGlmICgqRGF0YVNpemUgPCBzaXplb2YgKEVGSV9UTFNfUkFORE9NKSkgew0KPiArICAgICAg KkRhdGFTaXplID0gc2l6ZW9mIChFRklfVExTX1JBTkRPTSk7DQo+ICsgICAgICBTdGF0dXMgPSBF RklfQlVGRkVSX1RPT19TTUFMTDsNCj4gKyAgICAgIGdvdG8gT05fRVhJVDsNCj4gKyAgICB9DQo+ ICsgICAgKkRhdGFTaXplID0gc2l6ZW9mIChFRklfVExTX1JBTkRPTSk7DQo+ICsgICAgVGxzR2V0 U2VydmVyUmFuZG9tIChJbnN0YW5jZS0+VGxzQ29ubiwgKFVJTlQ4ICopIERhdGEpOw0KPiArICAg IGJyZWFrOw0KPiArICBjYXNlIEVmaVRsc0tleU1hdGVyaWFsOg0KPiArICAgIGlmICgqRGF0YVNp emUgPCBzaXplb2YgKEVGSV9UTFNfTUFTVEVSX1NFQ1JFVCkpIHsNCj4gKyAgICAgICpEYXRhU2l6 ZSA9IHNpemVvZiAoRUZJX1RMU19NQVNURVJfU0VDUkVUKTsNCj4gKyAgICAgIFN0YXR1cyA9IEVG SV9CVUZGRVJfVE9PX1NNQUxMOw0KPiArICAgICAgZ290byBPTl9FWElUOw0KPiArICAgIH0NCj4g KyAgICAqRGF0YVNpemUgPSBzaXplb2YgKEVGSV9UTFNfTUFTVEVSX1NFQ1JFVCk7DQo+ICsgICAg U3RhdHVzID0gVGxzR2V0S2V5TWF0ZXJpYWwgKEluc3RhbmNlLT5UbHNDb25uLCAoVUlOVDggKikg RGF0YSk7DQo+ICsgICAgYnJlYWs7DQo+ICsgIC8vDQo+ICsgIC8vIFVuc3VwcG9ydGVkIHR5cGUu DQo+ICsgIC8vDQo+ICsgIGRlZmF1bHQ6DQo+ICsgICAgU3RhdHVzID0gRUZJX1VOU1VQUE9SVEVE Ow0KPiArICB9DQo+ICsNCj4gK09OX0VYSVQ6DQo+ICsgIGdCUy0+UmVzdG9yZVRQTCAoT2xkVHBs KTsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIEJ1aWxkIHJl c3BvbnNlIHBhY2tldCBhY2NvcmRpbmcgdG8gVExTIHN0YXRlIG1hY2hpbmUuIFRoaXMgZnVuY3Rp b24gaXMgb25seQ0KPiB2YWxpZCBmb3INCj4gKyAgYWxlcnQsIGhhbmRzaGFrZSBhbmQgY2hhbmdl X2NpcGhlcl9zcGVjIGNvbnRlbnQgdHlwZS4NCj4gKw0KPiArICBUaGUgQnVpbGRSZXNwb25zZVBh Y2tldCgpIGZ1bmN0aW9uIGJ1aWxkcyBUTFMgcmVzcG9uc2UgcGFja2V0IGluDQo+IHJlc3BvbnNl IHRvIHRoZSBUTFMNCj4gKyAgcmVxdWVzdCBwYWNrZXQgc3BlY2lmaWVkIGJ5IFJlcXVlc3RCdWZm ZXIgYW5kIFJlcXVlc3RTaXplLiBJZg0KPiBSZXF1ZXN0QnVmZmVyIGlzIE5VTEwgYW5kDQo+ICsg IFJlcXVlc3RTaXplIGlzIDAsIGFuZCBUTFMgc2Vzc2lvbiBzdGF0dXMgaXMgRWZpVGxzU2Vzc2lv bk5vdFN0YXJ0ZWQsIHRoZSBUTFMNCj4gc2Vzc2lvbg0KPiArICB3aWxsIGJlIGluaXRpYXRlZCBh bmQgdGhlIHJlc3BvbnNlIHBhY2tldCBuZWVkcyB0byBiZSBDbGllbnRIZWxsby4gSWYNCj4gUmVx dWVzdEJ1ZmZlciBpcw0KPiArICBOVUxMIGFuZCBSZXF1ZXN0U2l6ZSBpcyAwLCBhbmQgVExTIHNl c3Npb24gc3RhdHVzIGlzIEVmaVRsc1Nlc3Npb25DbG9zaW5nLA0KPiB0aGUgVExTDQo+ICsgIHNl c3Npb24gd2lsbCBiZSBjbG9zZWQgYW5kIHJlc3BvbnNlIHBhY2tldCBuZWVkcyB0byBiZSBDbG9z ZU5vdGlmeS4gSWYNCj4gUmVxdWVzdEJ1ZmZlciBpcw0KPiArICBOVUxMIGFuZCBSZXF1ZXN0U2l6 ZSBpcyAwLCBhbmQgVExTIHNlc3Npb24gc3RhdHVzIGlzIEVmaVRsc1Nlc3Npb25FcnJvciwgdGhl DQo+IFRMUw0KPiArICBzZXNzaW9uIGhhcyBlcnJvcnMgYW5kIHRoZSByZXNwb25zZSBwYWNrZXQg bmVlZHMgdG8gYmUgQWxlcnQgbWVzc2FnZQ0KPiBiYXNlZCBvbiBlcnJvcg0KPiArICB0eXBlLg0K PiArDQo+ICsgIEBwYXJhbVtpbl0gICAgICAgVGhpcyAgICAgICAgICAgUG9pbnRlciB0byB0aGUg RUZJX1RMU19QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAgICAgICBSZXF1ZXN0 QnVmZmVyICBQb2ludGVyIHRvIHRoZSBtb3N0IHJlY2VudGx5IHJlY2VpdmVkIFRMUw0KPiBwYWNr ZXQuIE5VTEwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFucyBUTFMg bmVlZCBpbml0aWF0ZSB0aGUgVExTIHNlc3Npb24gYW5kIHJlc3BvbnNlDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcGFja2V0IG5lZWQgdG8gYmUgQ2xpZW50SGVsbG8uDQo+ ICsgIEBwYXJhbVtpbl0gICAgICAgUmVxdWVzdFNpemUgICAgUGFja2V0IHNpemUgaW4gYnl0ZXMg Zm9yIHRoZSBtb3N0IHJlY2VudGx5DQo+IHJlY2VpdmVkIFRMUw0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBhY2tldC4gMCBpcyBvbmx5IHZhbGlkIHdoZW4gUmVxdWVzdEJ1 ZmZlciBpcyBOVUxMLg0KPiArICBAcGFyYW1bb3V0XSAgICAgIEJ1ZmZlciAgICAgICAgIFBvaW50 ZXIgdG8gdGhlIGJ1ZmZlciB0byBob2xkIHRoZSBidWlsdCBwYWNrZXQuDQo+ICsgIEBwYXJhbVtp biwgb3V0XSAgQnVmZmVyU2l6ZSAgICAgUG9pbnRlciB0byB0aGUgYnVmZmVyIHNpemUgaW4gYnl0 ZXMuIE9uIGlucHV0LA0KPiBpdCBpcw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRoZSBidWZmZXIgc2l6ZSBwcm92aWRlZCBieSB0aGUgY2FsbGVyLiBPbiBvdXRwdXQsIGl0 DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgdGhlIGJ1ZmZlciBzaXpl IGluIGZhY3QgbmVlZGVkIHRvIGNvbnRhaW4gdGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcGFja2V0Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAg ICAgICAgVGhlIHJlcXVpcmVkIFRMUyBwYWNrZXQgaXMgYnVpbHQgc3VjY2Vzc2Z1bGx5Lg0KPiAr ICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgIE9uZSBvciBtb3JlIG9mIHRoZSBmb2xs b3dpbmcNCj4gY29uZGl0aW9ucyBpcyBUUlVFOg0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFRoaXMgaXMgTlVMTC4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBSZXF1ZXN0QnVmZmVyIGlzIE5VTEwgYnV0IFJlcXVlc3RTaXplIGlzIE5PVCAwLg0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlcXVlc3RTaXplIGlzIDAgYnV0IFJl cXVlc3RCdWZmZXIgaXMgTk9UIE5VTEwuDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQnVmZmVyU2l6ZSBpcyBOVUxMLg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEJ1ZmZlciBpcyBOVUxMIGlmICpCdWZmZXJTaXplIGlzIG5vdCB6ZXJvLg0KPiArICBA cmV0dmFsIEVGSV9CVUZGRVJfVE9PX1NNQUxMICAgIEJ1ZmZlclNpemUgaXMgdG9vIHNtYWxsIHRv IGhvbGQgdGhlDQo+IHJlc3BvbnNlIHBhY2tldC4NCj4gKyAgQHJldHZhbCBFRklfTk9UX1JFQURZ ICAgICAgICAgICBDdXJyZW50IFRMUyBzZXNzaW9uIHN0YXRlIGlzIE5PVCByZWFkeSB0bw0KPiBi dWlsZA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc3BvbnNlUGFja2V0 Lg0KPiArICBAcmV0dmFsIEVGSV9BQk9SVEVEICAgICAgICAgICAgIFNvbWV0aGluZyB3cm9uZyBi dWlsZCByZXNwb25zZSBwYWNrZXQuDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0K PiArVGxzQnVpbGRSZXNwb25zZVBhY2tldCAoDQo+ICsgIElOICAgICBFRklfVExTX1BST1RPQ09M ICAgICAgICAgICAgICAqVGhpcywNCj4gKyAgSU4gICAgIFVJTlQ4ICAgICAgICAgICAgICAgICAg ICAgICAgICpSZXF1ZXN0QnVmZmVyLCBPUFRJT05BTA0KPiArICBJTiAgICAgVUlOVE4gICAgICAg ICAgICAgICAgICAgICAgICAgUmVxdWVzdFNpemUsIE9QVElPTkFMDQo+ICsgICAgIE9VVCBVSU5U OCAgICAgICAgICAgICAgICAgICAgICAgICAqQnVmZmVyLCBPUFRJT05BTA0KPiArICBJTiBPVVQg VUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgKkJ1ZmZlclNpemUNCj4gKyAgKQ0KPiArew0K PiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgVExTX0lOU1RBTkNF ICAgICAgICAgICAgICAqSW5zdGFuY2U7DQo+ICsgIEVGSV9UUEwgICAgICAgICAgICAgICAgICAg T2xkVHBsOw0KPiArDQo+ICsgIFN0YXR1cyA9IEVGSV9TVUNDRVNTOw0KPiArDQo+ICsgIGlmICgo VGhpcyA9PSBOVUxMKSB8fCAoQnVmZmVyU2l6ZSA9PSBOVUxMKSB8fA0KPiArICAgICAgKFJlcXVl c3RCdWZmZXIgPT0gTlVMTCAmJiBSZXF1ZXN0U2l6ZSAhPSAwKSB8fA0KPiArICAgICAgKFJlcXVl c3RCdWZmZXIgIT0gTlVMTCAmJiBSZXF1ZXN0U2l6ZSA9PSAwKSB8fA0KPiArICAgICAgKEJ1ZmZl ciA9PSBOVUxMICYmICpCdWZmZXJTaXplICE9MCkpIHsNCj4gKyAgICByZXR1cm4gRUZJX0lOVkFM SURfUEFSQU1FVEVSOw0KPiArICB9DQo+ICsNCj4gKyAgT2xkVHBsID0gZ0JTLT5SYWlzZVRQTCAo VFBMX0NBTExCQUNLKTsNCj4gKw0KPiArICBJbnN0YW5jZSA9IFRMU19JTlNUQU5DRV9GUk9NX1BS T1RPQ09MX1RISVMgKFRoaXMpOw0KPiArDQo+ICsgIGlmKFJlcXVlc3RCdWZmZXIgPT0gTlVMTCAm JiBSZXF1ZXN0U2l6ZSA9PSAwKSB7DQo+ICsgICAgc3dpdGNoIChJbnN0YW5jZS0+VGxzU2Vzc2lv blN0YXRlKSB7DQo+ICsgICAgY2FzZSBFZmlUbHNTZXNzaW9uTm90U3RhcnRlZDoNCj4gKyAgICAg IC8vDQo+ICsgICAgICAvLyBDbGllbnRIZWxsby4NCj4gKyAgICAgIC8vDQo+ICsgICAgICBTdGF0 dXMgPSBUbHNEb0hhbmRzaGFrZSAoDQo+ICsgICAgICAgICAgICAgICAgIEluc3RhbmNlLT5UbHND b25uLA0KPiArICAgICAgICAgICAgICAgICBOVUxMLA0KPiArICAgICAgICAgICAgICAgICAwLA0K PiArICAgICAgICAgICAgICAgICBCdWZmZXIsDQo+ICsgICAgICAgICAgICAgICAgIEJ1ZmZlclNp emUNCj4gKyAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4gKyAgICAgICAgZ290byBPTl9FWElUOw0KPiArICAgICAgfQ0KPiArDQo+ICsgICAg ICAvLw0KPiArICAgICAgLy8gKkJ1ZmZlclNpemUgc2hvdWxkIG5vdCBiZSB6ZXJvIHdoZW4gQ2xp ZW50SGVsbG8uDQo+ICsgICAgICAvLw0KPiArICAgICAgaWYgKCpCdWZmZXJTaXplID09IDApIHsN Cj4gKyAgICAgICAgU3RhdHVzID0gRUZJX0FCT1JURUQ7DQo+ICsgICAgICAgIGdvdG8gT05fRVhJ VDsNCj4gKyAgICAgIH0NCj4gKw0KPiArICAgICAgSW5zdGFuY2UtPlRsc1Nlc3Npb25TdGF0ZSA9 IEVmaVRsc1Nlc3Npb25IYW5kU2hha2luZzsNCj4gKw0KPiArICAgICAgYnJlYWs7DQo+ICsgICAg Y2FzZSBFZmlUbHNTZXNzaW9uQ2xvc2luZzoNCj4gKyAgICAgIC8vDQo+ICsgICAgICAvLyBUTFMg c2Vzc2lvbiB3aWxsIGJlIGNsb3NlZCBhbmQgcmVzcG9uc2UgcGFja2V0IG5lZWRzIHRvIGJlDQo+ IENsb3NlTm90aWZ5Lg0KPiArICAgICAgLy8NCj4gKyAgICAgIFN0YXR1cyA9IFRsc0Nsb3NlTm90 aWZ5ICgNCj4gKyAgICAgICAgICAgICAgICAgSW5zdGFuY2UtPlRsc0Nvbm4sDQo+ICsgICAgICAg ICAgICAgICAgIEJ1ZmZlciwNCj4gKyAgICAgICAgICAgICAgICAgQnVmZmVyU2l6ZQ0KPiArICAg ICAgICAgICAgICAgICApOw0KPiArICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiAr ICAgICAgICBnb3RvIE9OX0VYSVQ7DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIC8vDQo+ICsg ICAgICAvLyAqQnVmZmVyU2l6ZSBzaG91bGQgbm90IGJlIHplcm8gd2hlbiBidWlsZCBDbG9zZU5v dGlmeSBtZXNzYWdlLg0KPiArICAgICAgLy8NCj4gKyAgICAgIGlmICgqQnVmZmVyU2l6ZSA9PSAw KSB7DQo+ICsgICAgICAgIFN0YXR1cyA9IEVGSV9BQk9SVEVEOw0KPiArICAgICAgICBnb3RvIE9O X0VYSVQ7DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIGNhc2UgRWZp VGxzU2Vzc2lvbkVycm9yOg0KPiArICAgICAgLy8NCj4gKyAgICAgIC8vIFRMUyBzZXNzaW9uIGhh cyBlcnJvcnMgYW5kIHRoZSByZXNwb25zZSBwYWNrZXQgbmVlZHMgdG8gYmUgQWxlcnQNCj4gKyAg ICAgIC8vIG1lc3NhZ2UgYmFzZWQgb24gZXJyb3IgdHlwZS4NCj4gKyAgICAgIC8vDQo+ICsgICAg ICBTdGF0dXMgPSBUbHNIYW5kZUFsZXJ0ICgNCj4gKyAgICAgICAgICAgICAgICAgSW5zdGFuY2Ut PlRsc0Nvbm4sDQo+ICsgICAgICAgICAgICAgICAgIE5VTEwsDQo+ICsgICAgICAgICAgICAgICAg IDAsDQo+ICsgICAgICAgICAgICAgICAgIEJ1ZmZlciwNCj4gKyAgICAgICAgICAgICAgICAgQnVm ZmVyU2l6ZQ0KPiArICAgICAgICAgICAgICAgICApOw0KPiArICAgICAgaWYgKEVGSV9FUlJPUiAo U3RhdHVzKSkgew0KPiArICAgICAgICBnb3RvIE9OX0VYSVQ7DQo+ICsgICAgICB9DQo+ICsNCj4g KyAgICAgIGJyZWFrOw0KPiArICAgIGRlZmF1bHQ6DQo+ICsgICAgICAvLw0KPiArICAgICAgLy8g Q3VycmVudCBUTFMgc2Vzc2lvbiBzdGF0ZSBpcyBOT1QgcmVhZHkgdG8gYnVpbGQgUmVzcG9uc2VQ YWNrZXQuDQo+ICsgICAgICAvLw0KPiArICAgICAgU3RhdHVzID0gRUZJX05PVF9SRUFEWTsNCj4g KyAgICB9DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgLy8NCj4gKyAgICAvLyAxLiBSZWNlaXZlZCBw YWNrZXQgbWF5IGhhdmUgbXVsdGlwbHkgVExTIHJlY29yZCBtZXNzYWdlcy4NCj4gKyAgICAvLyAy LiBPbmUgVExTIHJlY29yZCBtZXNzYWdlIG1heSBoYXZlIG11bHRpcGx5IGhhbmRzaGFrZSBwcm90 b2NvbC4NCj4gKyAgICAvLyAzLiBTb21lIGVycm9ycyBtYXkgYmUgaGFwcGVuZWQgaW4gaGFuZHNo YWtlLg0KPiArICAgIC8vIFRsc0RvSGFuZHNoYWtlKCkgY2FuIGhhbmRsZSBhbGwgb2YgdGhvc2Ug Y2FzZXMuDQo+ICsgICAgLy8NCj4gKyAgICBpZiAoVGxzSW5IYW5kc2hha2UgKEluc3RhbmNlLT5U bHNDb25uKSkgew0KPiArICAgICAgU3RhdHVzID0gVGxzRG9IYW5kc2hha2UgKA0KPiArICAgICAg ICAgICAgICAgICBJbnN0YW5jZS0+VGxzQ29ubiwNCj4gKyAgICAgICAgICAgICAgICAgUmVxdWVz dEJ1ZmZlciwNCj4gKyAgICAgICAgICAgICAgICAgUmVxdWVzdFNpemUsDQo+ICsgICAgICAgICAg ICAgICAgIEJ1ZmZlciwNCj4gKyAgICAgICAgICAgICAgICAgQnVmZmVyU2l6ZQ0KPiArICAgICAg ICAgICAgICAgICApOw0KPiArICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAg ICAgICBnb3RvIE9OX0VYSVQ7DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIGlmICghVGxzSW5I YW5kc2hha2UgKEluc3RhbmNlLT5UbHNDb25uKSkgew0KPiArICAgICAgICBJbnN0YW5jZS0+VGxz U2Vzc2lvblN0YXRlID0gRWZpVGxzU2Vzc2lvbkRhdGFUcmFuc2ZlcnJpbmc7DQo+ICsgICAgICB9 DQo+ICsgICAgfSBlbHNlIHsNCj4gKyAgICAgIC8vDQo+ICsgICAgICAvLyBNdXN0IGJlIGFsZXJ0 IG1lc3NhZ2UsIERlY3J5cHQgaXQgYW5kIGJ1aWxkIHRoZSBSZXNwb25zZVBhY2tldC4NCj4gKyAg ICAgIC8vDQo+ICsgICAgICBBU1NFUlQgKCgoVExTX1JFQ09SRF9IRUFERVIgKikgUmVxdWVzdEJ1 ZmZlciktPkNvbnRlbnRUeXBlID09DQo+IFRMU19DT05URU5UX1RZUEVfQUxFUlQpOw0KPiArDQo+ ICsgICAgICBTdGF0dXMgPSBUbHNIYW5kZUFsZXJ0ICgNCj4gKyAgICAgICAgICAgICAgICAgSW5z dGFuY2UtPlRsc0Nvbm4sDQo+ICsgICAgICAgICAgICAgICAgIFJlcXVlc3RCdWZmZXIsDQo+ICsg ICAgICAgICAgICAgICAgIFJlcXVlc3RTaXplLA0KPiArICAgICAgICAgICAgICAgICBCdWZmZXIs DQo+ICsgICAgICAgICAgICAgICAgIEJ1ZmZlclNpemUNCj4gKyAgICAgICAgICAgICAgICAgKTsN Cj4gKyAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgICAgaWYgKFN0YXR1 cyAhPSBFRklfQlVGRkVSX1RPT19TTUFMTCkgew0KPiArICAgICAgICAgIEluc3RhbmNlLT5UbHNT ZXNzaW9uU3RhdGUgPSBFZmlUbHNTZXNzaW9uRXJyb3I7DQo+ICsgICAgICAgIH0NCj4gKw0KPiAr ICAgICAgICBnb3RvIE9OX0VYSVQ7DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArICB9DQo+ICsN Cj4gK09OX0VYSVQ6DQo+ICsgIGdCUy0+UmVzdG9yZVRQTCAoT2xkVHBsKTsNCj4gKyAgcmV0dXJu IFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIERlY3J5cHQgb3IgZW5jcnlwdCBUTFMg cGFja2V0IGR1cmluZyBzZXNzaW9uLiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgdmFsaWQNCj4gYWZ0 ZXINCj4gKyAgc2Vzc2lvbiBjb25uZWN0ZWQgYW5kIGZvciBhcHBsaWNhdGlvbl9kYXRhIGNvbnRl bnQgdHlwZS4NCj4gKw0KPiArICBUaGUgUHJvY2Vzc1BhY2tldCAoKSBmdW5jdGlvbiBwcm9jZXNz IGVhY2ggaW5ib3VuZCBvciBvdXRib3VuZCBUTFMgQVBQDQo+IHBhY2tldC4NCj4gKw0KPiArICBA cGFyYW1baW5dICAgICAgIFRoaXMgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIEVGSV9UTFNfUFJP VE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSAgRnJhZ21lbnRUYWJsZSAgUG9p bnRlciB0byBhIGxpc3Qgb2YgZnJhZ21lbnQuIFRoZSBjYWxsZXINCj4gd2lsbCB0YWtlDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2libGUgdG8gaGFuZGxlIHRo ZSBvcmlnaW5hbCBGcmFnbWVudFRhYmxlIHdoaWxlDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaXQgbWF5IGJlIHJlYWxsb2NhdGVkIGluIFRMUyBkcml2ZXIuIElmIENyeXB0 TW9kZSBpcw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVmaVRsc0VuY3J5 cHQsIG9uIGlucHV0IHRoZXNlIGZyYWdtZW50cyBjb250YWluIHRoZSBUTFMNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIgYW5kIHBsYWluIHRleHQgVExTIEFQUCBw YXlsb2FkOyBvbiBvdXRwdXQgdGhlc2UNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBmcmFnbWVudHMgY29udGFpbiB0aGUgVExTIGhlYWRlciBhbmQgY2lwaGVyIHRleHQgVExT DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVBQIHBheWxvYWQuIElmIENy eXB0TW9kZSBpcyBFZmlUbHNEZWNyeXB0LCBvbiBpbnB1dA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRoZXNlIGZyYWdtZW50cyBjb250YWluIHRoZSBUTFMgaGVhZGVyIGFu ZCBjaXBoZXIgdGV4dA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRMUyBB UFAgcGF5bG9hZDsgb24gb3V0cHV0IHRoZXNlIGZyYWdtZW50cyBjb250YWluIHRoZQ0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRMUyBoZWFkZXIgYW5kIHBsYWluIHRleHQg VExTIEFQUCBwYXlsb2FkLg0KPiArICBAcGFyYW1baW5dICAgICAgIEZyYWdtZW50Q291bnQgIE51 bWJlciBvZiBmcmFnbWVudC4NCj4gKyAgQHBhcmFtW2luXSAgICAgICBDcnlwdE1vZGUgICAgICBD cnlwdCBtb2RlLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgVGhl IG9wZXJhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9JTlZB TElEX1BBUkFNRVRFUiAgIE9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcNCj4gY29uZGl0aW9u cyBpcyBUUlVFOg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMg TlVMTC4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmFnbWVudFRhYmxl IGlzIE5VTEwuDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJhZ21lbnRD b3VudCBpcyBOVUxMLg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENyeXB0 b01vZGUgaXMgaW52YWxpZC4NCj4gKyAgQHJldHZhbCBFRklfTk9UX1JFQURZICAgICAgICAgICBD dXJyZW50IFRMUyBzZXNzaW9uIHN0YXRlIGlzIE5PVA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEVmaVRsc1Nlc3Npb25EYXRhVHJhbnNmZXJyaW5nLg0KPiArICBAcmV0dmFs IEVGSV9BQk9SVEVEICAgICAgICAgICAgIFNvbWV0aGluZyB3cm9uZyBkZWNyeXB0aW9uIHRoZSBt ZXNzYWdlLg0KPiBUTFMgc2Vzc2lvbg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0YXR1cyB3aWxsIGJlY29tZSBFZmlUbHNTZXNzaW9uRXJyb3IuIFRoZSBjYWxsZXIgbmVl ZA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGwgQnVpbGRSZXNwb25z ZVBhY2tldCgpIHRvIGdlbmVyYXRlIEVycm9yIEFsZXJ0DQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbWVzc2FnZSBhbmQgc2VuZCBpdCBvdXQuDQo+ICsgIEByZXR2YWwgRUZJ X09VVF9PRl9SRVNPVVJDRVMgICAgTm8gZW5vdWdoIHJlc291cmNlIHRvIGZpbmlzaCB0aGUNCj4g b3BlcmF0aW9uLg0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1Rsc1Byb2Nl c3NQYWNrZXQgKA0KPiArICBJTiAgICAgRUZJX1RMU19QUk9UT0NPTCAgICAgICAgICAgICAgKlRo aXMsDQo+ICsgIElOIE9VVCBFRklfVExTX0ZSQUdNRU5UX0RBVEEgICAgICAgICAqKkZyYWdtZW50 VGFibGUsDQo+ICsgIElOICAgICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAqRnJhZ21l bnRDb3VudCwNCj4gKyAgSU4gICAgIEVGSV9UTFNfQ1JZUFRfTU9ERSAgICAgICAgICAgIENyeXB0 TW9kZQ0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgU3RhdHVz Ow0KPiArICBUTFNfSU5TVEFOQ0UgICAgICAgICAgICAgICpJbnN0YW5jZTsNCj4gKw0KPiArICBF RklfVFBMICAgICAgICAgICAgICAgICAgIE9sZFRwbDsNCj4gKw0KPiArICBTdGF0dXMgPSBFRklf U1VDQ0VTUzsNCj4gKw0KPiArICBpZiAoVGhpcyA9PSBOVUxMIHx8IEZyYWdtZW50VGFibGUgPT0g TlVMTCB8fCBGcmFnbWVudENvdW50ID09IE5VTEwpIHsNCj4gKyAgICByZXR1cm4gRUZJX0lOVkFM SURfUEFSQU1FVEVSOw0KPiArICB9DQo+ICsNCj4gKyAgT2xkVHBsID0gZ0JTLT5SYWlzZVRQTCAo VFBMX0NBTExCQUNLKTsNCj4gKw0KPiArICBJbnN0YW5jZSA9IFRMU19JTlNUQU5DRV9GUk9NX1BS T1RPQ09MX1RISVMgKFRoaXMpOw0KPiArDQo+ICsgIGlmIChJbnN0YW5jZS0+VGxzU2Vzc2lvblN0 YXRlICE9IEVmaVRsc1Nlc3Npb25EYXRhVHJhbnNmZXJyaW5nKSB7DQo+ICsgICAgU3RhdHVzID0g RUZJX05PVF9SRUFEWTsNCj4gKyAgICBnb3RvIE9OX0VYSVQ7DQo+ICsgIH0NCj4gKw0KPiArICAv Lw0KPiArICAvLyBQYWNrZXQgc2VudCBvciByZWNlaXZlZCBtYXkgaGF2ZSBtdWx0aXBseSBUTFMg cmVjb3JkDQo+IG1lc3NhZ2UoQXBwbGljYXRpb24gZGF0YSB0eXBlKS4NCj4gKyAgLy8gU28sb24g aW5wdXQgdGhlc2UgZnJhZ21lbnRzIGNvbnRhaW4gdGhlIFRMUyBoZWFkZXIgYW5kIFRMUyBBUFAN Cj4gcGF5bG9hZDsNCj4gKyAgLy8gb24gb3V0cHV0IHRoZXNlIGZyYWdtZW50cyBhbHNvIGNvbnRh aW4gdGhlIFRMUyBoZWFkZXIgYW5kIFRMUyBBUFANCj4gcGF5bG9hZC4NCj4gKyAgLy8NCj4gKyAg c3dpdGNoIChDcnlwdE1vZGUpIHsNCj4gKyAgY2FzZSBFZmlUbHNFbmNyeXB0Og0KPiArICAgIFN0 YXR1cyA9IFRsc0VjcnlwdFBhY2tldCAoSW5zdGFuY2UsIEZyYWdtZW50VGFibGUsIEZyYWdtZW50 Q291bnQpOw0KPiArICAgIGJyZWFrOw0KPiArICBjYXNlIEVmaVRsc0RlY3J5cHQ6DQo+ICsgICAg U3RhdHVzID0gVGxzRGVjcnlwdFBhY2tldCAoSW5zdGFuY2UsIEZyYWdtZW50VGFibGUsIEZyYWdt ZW50Q291bnQpOw0KPiArICAgIGJyZWFrOw0KPiArICBkZWZhdWx0Og0KPiArICAgIHJldHVybiBF RklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgIH0NCj4gKw0KPiArT05fRVhJVDoNCj4gKyAgZ0JT LT5SZXN0b3JlVFBMIChPbGRUcGwpOw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiAtLQ0K PiAxLjkuNS5tc3lzZ2l0LjENCg0K