From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) (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 E12D381E9D for ; Wed, 16 Nov 2016 09:08:53 -0800 (PST) Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga101.fm.intel.com with ESMTP; 16 Nov 2016 09:05:37 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.31,500,1473145200"; d="scan'208";a="32034748" Received: from fmsmsx104.amr.corp.intel.com ([10.18.124.202]) by orsmga005.jf.intel.com with ESMTP; 16 Nov 2016 09:05:37 -0800 Received: from fmsmsx119.amr.corp.intel.com (10.18.124.207) by fmsmsx104.amr.corp.intel.com (10.18.124.202) with Microsoft SMTP Server (TLS) id 14.3.248.2; Wed, 16 Nov 2016 09:05:37 -0800 Received: from fmsmsx103.amr.corp.intel.com ([169.254.2.12]) by FMSMSX119.amr.corp.intel.com ([169.254.14.106]) with mapi id 14.03.0248.002; Wed, 16 Nov 2016 09:05:36 -0800 From: "Carsey, Jaben" To: Marcin Wojtas , Ard Biesheuvel CC: linaro-uefi , Leif Lindholm , Neta Zur Hershkovits , "Yehuda Yitschak" , Haim Boot , Jan Dabros , Bartosz Szczepanek , edk2-devel-01 , "Ni, Ruiyu" , "Carsey, Jaben" Thread-Topic: [PATCH v6 21/23] Applications/FirmwareUpdate: Add 'fupdate' comand to shell Thread-Index: AQHSQCRxJgZKoOAOZUaEITsc+jwr1aDb0sOg Date: Wed, 16 Nov 2016 17:05:36 +0000 Message-ID: References: <1468110107-18979-1-git-send-email-mw@semihalf.com> <1468110107-18979-22-git-send-email-mw@semihalf.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiODIxZjQ0OTMtNTQwOS00NjYzLWExZjktZjc1YmI1MTY2Yzk3IiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX0lDIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE1LjkuNi42IiwiVHJ1c3RlZExhYmVsSGFzaCI6IjlXU0NJVHJ0QnJYWXF6eGR2ckhhajZWR1IybmM5Qml4eTBVYXVYaTZ3Z2M9In0= x-ctpclassification: CTP_IC x-originating-ip: [10.1.200.106] MIME-Version: 1.0 Subject: Re: [PATCH v6 21/23] Applications/FirmwareUpdate: Add 'fupdate' comand to shell 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: Wed, 16 Nov 2016 17:08:54 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 TWFyY2luIGFuZCBBcmQsDQoNCkl0IHNvdW5kcyBsaWtlIHRoZXJlIGlzIGEgZ29hbCB0byBoYXZl IGEgVUVGSSBBcHBsaWNhdGlvbiBjYWxsIGludG8gYW4gaW50ZXJuYWwgc2hlbGwgY29tbWFuZC4N Cg0KVGhlcmUgaXMgbm8gZG9jdW1lbnRlZCBtZXRob2QgdG8gcHJvZ3JhbW1hdGljYWxseSBjYWxs IGFuIGludGVybmFsIGNvbW1hbmQuIFRoaXMgaXMgbm90IGEgZ29hbCBvZiB0aGUgY3VycmVudCBz aGVsbCBpbXBsZW1lbnRhdGlvbi4gU2hlbGxFeGVjdXRlIGV4cGxpY2l0bHkgZG9lcyBub3QgYWxs b3cgcnVubmluZyBvZiBpbnRlcm5hbCBjb21tYW5kcyAocGVyIFVFRkkgU2hlbGwgU3BlY2lmaWNh dGlvbiAyLjIpLg0KDQpUaHVzIEkgZG9u4oCZdCB0aGluayB1c2luZyBTaGVsbER5bmFtaWNDb21t YW5kUHJvdG9jb2wgd2lsbCBoZWxwLiAgVGhhdCBwcm90b2NvbCBpcyBmb3IgYWxsb3dpbmcgYSBk cml2ZXIgYWRkIGEgY29tbWFuZCB0byB0aGUgc2hlbGwncyBsaXN0IG9mIGF2YWlsYWJsZSBjb21t YW5kcy4NCg0KLUphYmVuDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTog TWFyY2luIFdvanRhcyBbbWFpbHRvOm13QHNlbWloYWxmLmNvbV0NCj4gU2VudDogV2VkbmVzZGF5 LCBOb3ZlbWJlciAxNiwgMjAxNiA4OjEzIEFNDQo+IFRvOiBBcmQgQmllc2hldXZlbCA8YXJkLmJp ZXNoZXV2ZWxAbGluYXJvLm9yZz4NCj4gQ2M6IGxpbmFyby11ZWZpIDxsaW5hcm8tdWVmaUBsaXN0 cy5saW5hcm8ub3JnPjsgTGVpZiBMaW5kaG9sbQ0KPiA8bGVpZi5saW5kaG9sbUBsaW5hcm8ub3Jn PjsgTmV0YSBadXIgSGVyc2hrb3ZpdHMgPG5ldGFAbWFydmVsbC5jb20+Ow0KPiBZZWh1ZGEgWWl0 c2NoYWsgPHllaHVkYXlAbWFydmVsbC5jb20+OyBIYWltIEJvb3QNCj4gPGhheWltQG1hcnZlbGwu Y29tPjsgSmFuIETEhWJyb8WbIDxqc2RAc2VtaWhhbGYuY29tPjsgQmFydG9zeg0KPiBTemN6ZXBh bmVrIDxic3pAc2VtaWhhbGYuY29tPjsgZWRrMi1kZXZlbC0wMSA8ZWRrMi1kZXZlbEBsaXN0cy4w MS5vcmc+Ow0KPiBDYXJzZXksIEphYmVuIDxqYWJlbi5jYXJzZXlAaW50ZWwuY29tPjsgTmksIFJ1 aXl1IDxydWl5dS5uaUBpbnRlbC5jb20+DQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjYgMjEvMjNd IEFwcGxpY2F0aW9ucy9GaXJtd2FyZVVwZGF0ZTogQWRkICdmdXBkYXRlJw0KPiBjb21hbmQgdG8g c2hlbGwNCj4gSW1wb3J0YW5jZTogSGlnaA0KPiANCj4gKyBKYWJlbiwgUnVpeXUgYW5kIGVkazIg bGlzdA0KPiANCj4gSGkgQXJkLA0KPiANCj4gSW50ZXJuYWwgU2hlbGwgaGVhZGVyICgiLi4vLi4v Li4vU2hlbGxQa2cvQXBwbGljYXRpb24vU2hlbGwvU2hlbGwuaCIpDQo+IHdhcyBhZGRlZCBPTkxZ IGZvciBiZWluZyBhYmxlIHRvIGV4ZWN1dGUgc2hlbGwgY29tbWFuZHMgKHRmdHAgYW5kIG91cg0K PiBjdXN0b20gU1BJIGZsYXNoIGNvbnRyb2wpIGZyb20gd2l0aGluIGEgbmV3IGNvbW1hbmQuIFRo aXMgaXMgbm93IGRvbmUNCj4gd2l0aDoNCj4gUnVuU2hlbGxDb21tYW5kIChUZnRwQ21kLCAmU3Rh dHVzKTsNCj4gQW5kIGl0IHdvcmtzIGZpbmUuDQo+IA0KPiBSZXBsYWNpbmcgYWJvdmUgd2l0aDoN Cj4gU2hlbGxFeGVjdXRlICgmSW1hZ2VIYW5kbGUsIFRmdHBDbWQsIEZBTFNFLCBOVUxMLCAmU3Rh dHVzKTsNCj4gYWxsb3cgdG8gZ2V0IHJpZCBvZiByZWxhdGl2ZSBpbmNsdWRlIGFuZCBzZWVtcyBt b3JlIGFwcHJvcHJpYXRlLCBidXQNCj4gdGhlcmUgaXMgY29tcGxldGVseSBubyBlZmZlY3Qgb2Yg Y2FsbGluZyBpdC4NCj4gDQo+IEkgY2hlY2tlZCBpbiBlZGsyIHNvdXJjZXMgYW5kIHNlZSBubyBy ZWxhdGlvbiBiZXR3ZWVuIGFib3ZlIHByb2JsZW0NCj4gYW5kIHJlZ2lzdGVyaW5nIG91ciBjb21t YW5kIHdpdGggaGVscCBvZiBTaGVsbER5bmFtaWNDb21tYW5kIHByb3RvY29sLg0KPiBVbmxlc3Mg SSBkb24ndCBrbm93IHNvbWV0aGluZy4gQW55d2F5LCBJJ2xsIGFwcmVjaWF0ZSBhbnkgaGludCwg aG93IHRvDQo+IHNvbHZlIHRoZSBpc3N1ZSBpbiBhIG5pY2Ugd2F5Lg0KPiANCj4gQmVzdCByZWdh cmRzLA0KPiBNYXJjaW4NCj4gDQo+IDIwMTYtMTEtMTUgMTc6MDkgR01UKzAxOjAwIEFyZCBCaWVz aGV1dmVsIDxhcmQuYmllc2hldXZlbEBsaW5hcm8ub3JnPjoNCj4gPiBPbiAxMCBKdWx5IDIwMTYg YXQgMDA6MjEsIE1hcmNpbiBXb2p0YXMgPG13QHNlbWloYWxmLmNvbT4gd3JvdGU6DQo+ID4+IEZy b206IEphbiBExIVicm/FmyA8anNkQHNlbWloYWxmLmNvbT4NCj4gPj4NCj4gPj4gJ2Z1cGRhdGUn IGNvbW1hbmQgcGVyZm9ybXMgdXBkYXRpbmcgZmlybXdhcmUgZnJvbSBmaWxlIHBsYWNlZCBvbiBs b2NhbA0KPiA+PiBmaWxlc3lzdGVtIG9yIG9uIFRGVFAgc2VydmVyLg0KPiA+PiBJdCB1c2VzIHRm dHAgYW5kIHNmIGNvbW1hbmRzLg0KPiA+Pg0KPiA+PiBDb250cmlidXRlZC11bmRlcjogVGlhbm9D b3JlIENvbnRyaWJ1dGlvbiBBZ3JlZW1lbnQgMS4wDQo+ID4+IFNpZ25lZC1vZmYtYnk6IEphbiBE YWJyb3MgPGpzZEBzZW1paGFsZi5jb20+DQo+ID4+IFNpZ25lZC1vZmYtYnk6IE1hcmNpbiBXb2p0 YXMgPG13QHNlbWloYWxmLmNvbT4NCj4gPg0KPiA+IFBsZWFzZSB1c2UgdGhlIFNoZWxsIGR5bmFt aWMgY29tbWFuZCBwcm90b2NvbCB0byBhZGQgY29tbWFuZHMgdG8gdGhlDQo+ID4gc2hlbGwuIFRo aXMgd2lsbCByZW1vdmUgdGhlIG5lZWQgZm9yIGluY2x1ZGluZyBpbnRlcm5hbCBTaGVsbCBoZWFk ZXJzLA0KPiA+IGFuZCBldmVuIGFsbG93IHlvdXIgY29tbWFuZHMgdG8gd29yayB3aXRoIHByZWJ1 aWx0IFNoZWxsIGJpbmFyaWVzLg0KPiA+DQo+ID4gTWRlUGtnL0luY2x1ZGUvUHJvdG9jb2wvU2hl bGxEeW5hbWljQ29tbWFuZC5oDQo+ID4NCj4gPiBUaGFua3MsDQo+ID4gQXJkLg0KPiA+DQo+ID4N Cj4gPj4gLS0tDQo+ID4+ICBBcHBsaWNhdGlvbnMvRmlybXdhcmVVcGRhdGUvRlVwZGF0ZS5jICAg fCA0NDgNCj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gPj4gIEFwcGxpY2F0 aW9ucy9GaXJtd2FyZVVwZGF0ZS9GVXBkYXRlLmluZiB8ICA2OCArKysrKw0KPiA+PiAgQXBwbGlj YXRpb25zL0Zpcm13YXJlVXBkYXRlL0ZVcGRhdGUudW5pIHwgQmluIDAgLT4gNTgzOCBieXRlcw0K PiA+PiAgUGxhdGZvcm1zL01hcnZlbGwvTWFydmVsbC5kZWMgICAgICAgICAgIHwgICAxICsNCj4g Pj4gIDQgZmlsZXMgY2hhbmdlZCwgNTE3IGluc2VydGlvbnMoKykNCj4gPj4gIGNyZWF0ZSBtb2Rl IDEwMDY0NCBBcHBsaWNhdGlvbnMvRmlybXdhcmVVcGRhdGUvRlVwZGF0ZS5jDQo+ID4+ICBjcmVh dGUgbW9kZSAxMDA2NDQgQXBwbGljYXRpb25zL0Zpcm13YXJlVXBkYXRlL0ZVcGRhdGUuaW5mDQo+ ID4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgQXBwbGljYXRpb25zL0Zpcm13YXJlVXBkYXRlL0ZVcGRh dGUudW5pDQo+ID4+DQo+ID4+IGRpZmYgLS1naXQgYS9BcHBsaWNhdGlvbnMvRmlybXdhcmVVcGRh dGUvRlVwZGF0ZS5jDQo+IGIvQXBwbGljYXRpb25zL0Zpcm13YXJlVXBkYXRlL0ZVcGRhdGUuYw0K PiA+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+PiBpbmRleCAwMDAwMDAwLi4zNTlhNGFjDQo+ ID4+IC0tLSAvZGV2L251bGwNCj4gPj4gKysrIGIvQXBwbGljYXRpb25zL0Zpcm13YXJlVXBkYXRl L0ZVcGRhdGUuYw0KPiA+PiBAQCAtMCwwICsxLDQ0OCBAQA0KPiA+Pg0KPiArLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KPiAqKioqKioq KioqKioqKioqKioqKioqDQo+ID4+ICtDb3B5cmlnaHQgKEMpIDIwMTYgTWFydmVsbCBJbnRlcm5h dGlvbmFsIEx0ZC4NCj4gPj4gKw0KPiA+PiArTWFydmVsbCBCU0QgTGljZW5zZSBPcHRpb24NCj4g Pj4gKw0KPiA+PiArSWYgeW91IHJlY2VpdmVkIHRoaXMgRmlsZSBmcm9tIE1hcnZlbGwsIHlvdSBt YXkgb3B0IHRvIHVzZSwgcmVkaXN0cmlidXRlDQo+IGFuZC9vcg0KPiA+PiArbW9kaWZ5IHRoaXMg RmlsZSB1bmRlciB0aGUgZm9sbG93aW5nIGxpY2Vuc2luZyB0ZXJtcy4NCj4gPj4gK1JlZGlzdHJp YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91 dA0KPiBtb2RpZmljYXRpb24sDQo+ID4+ICthcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQo+ID4+ICsNCj4gPj4gKyogUmVkaXN0cmli dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90 aWNlLA0KPiA+PiArICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyLg0KPiA+PiArDQo+ID4+ICsqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQo+ID4+ICsgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUN Cj4gPj4gKyAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp dGggdGhlIGRpc3RyaWJ1dGlvbi4NCj4gPj4gKw0KPiA+PiArKiBOZWl0aGVyIHRoZSBuYW1lIG9m IE1hcnZlbGwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZQ0KPiA+PiAr ICB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz b2Z0d2FyZQ0KPiB3aXRob3V0DQo+ID4+ICsgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz c2lvbi4NCj4gPj4gKw0KPiA+PiArVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q WVJJR0hUIEhPTERFUlMgQU5EDQo+IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KPiA+PiArQU5Z IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF RA0KPiBUTywgVEhFIElNUExJRUQNCj4gPj4gK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVINCj4gUFVSUE9TRSBBUkUNCj4gPj4gK0RJU0NM QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1INCj4gQ09OVFJJ QlVUT1JTIEJFIExJQUJMRSBGT1INCj4gPj4gK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SDQo+IENPTlNFUVVFTlRJQUwgREFNQUdFUw0KPiA+ PiArKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU VVRFDQo+IEdPT0RTIE9SIFNFUlZJQ0VTOw0KPiA+PiArTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikNCj4gSE9XRVZFUiBDQVVTRUQgQU5EIE9O DQo+ID4+ICtBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS SUNUIExJQUJJTElUWSwgT1INCj4gVE9SVA0KPiA+PiArKElOQ0xVRElORyBORUdMSUdFTkNFIE9S IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRg0KPiBUSEUgVVNFIE9GIFRISVMN Cj4gPj4gK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV Q0ggREFNQUdFLg0KPiA+PiArDQo+ID4+DQo+ICsqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCj4gKioqKioqKioqKioqKioqKioqKioqKi8N Cj4gPj4gKyNpbmNsdWRlIDxVZWZpLmg+DQo+ID4+ICsjaW5jbHVkZSA8U2hlbGxCYXNlLmg+DQo+ ID4+ICsNCj4gPj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VMaWIuaD4NCj4gPj4gKyNpbmNsdWRl IDxMaWJyYXJ5L0RlYnVnTGliLmg+DQo+ID4+ICsjaW5jbHVkZSA8TGlicmFyeS9NZW1vcnlBbGxv Y2F0aW9uTGliLmg+DQo+ID4+ICsjaW5jbHVkZSA8TGlicmFyeS9TaGVsbENvbW1hbmRMaWIuaD4N Cj4gPj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1NoZWxsTGliLmg+DQo+ID4+ICsjaW5jbHVkZSA8TGli cmFyeS9VZWZpTGliLmg+DQo+ID4+ICsjaW5jbHVkZSA8TGlicmFyeS9QcmludExpYi5oPg0KPiA+ PiArI2luY2x1ZGUgPExpYnJhcnkvVWVmaUxpYi5oPg0KPiA+PiArI2luY2x1ZGUgPExpYnJhcnkv U2hlbGxDRW50cnlMaWIuaD4NCj4gPj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0hpaUxpYi5oPg0KPiA+ PiArI2luY2x1ZGUgPEd1aWQvU2hlbGxMaWJIaWlHdWlkLmg+DQo+ID4+ICsjaW5jbHVkZSA8TGli cmFyeS9VZWZpQm9vdFNlcnZpY2VzVGFibGVMaWIuaD4NCj4gPj4gKyNpbmNsdWRlIDxMaWJyYXJ5 L0ZpbGVIYW5kbGVMaWIuaD4NCj4gPj4gKy8vIEZJWE1FOiBSZW1vdmUgaW5jbHVkaW5nIHJlbGF0 aXZlIHBhdGgNCj4gPj4gKyNpbmNsdWRlICIuLi8uLi8uLi9TaGVsbFBrZy9BcHBsaWNhdGlvbi9T aGVsbC9TaGVsbC5oIg0KPiA+PiArDQo+ID4+ICsjZGVmaW5lIENNRF9OQU1FX1NUUklORyAgICAg ICBMImZ1cGRhdGUiDQo+ID4+ICsNCj4gPj4gKyNkZWZpbmUgVEZUUF9DTURfU1RSSU5HICAgICAg IEwidGZ0cCAiDQo+ID4+ICsjZGVmaW5lIFNQQUNFX1NUUklORyAgICAgICAgICBMIiAiDQo+ID4+ ICsjZGVmaW5lIFNGX1BST0JFX0NNRF9TVFJJTkcgICBMInNmIHByb2JlIg0KPiA+PiArI2RlZmlu ZSBTRl9XUklURV9DTURfU1RSSU5HICAgTCJzZiB1cGRhdGVmaWxlICINCj4gPj4gKyNkZWZpbmUg U0ZfTE9BRF9BRERSX1NUUklORyAgIEwiMHgwIg0KPiA+PiArDQo+ID4+ICsjZGVmaW5lIE1BSU5f SERSX01BR0lDICAgICAgICAweEIxMDVCMDAyDQo+ID4+ICsNCj4gPj4gK3R5cGVkZWYgc3RydWN0 IHsNCj4gPj4gKyAgVUlOVDMyICBNYWdpYzsgICAgICAgICAgICAgIC8vICAwLTMNCj4gPj4gKyAg VUlOVDMyICBQcm9sb2dTaXplOyAgICAgICAgIC8vICA0LTcNCj4gPj4gKyAgVUlOVDMyICBQcm9s b2dDaGVja3N1bTsgICAgIC8vICA4LTExDQo+ID4+ICsgIFVJTlQzMiAgQm9vdEltYWdlU2l6ZTsg ICAgICAvLyAxMi0xNQ0KPiA+PiArICBVSU5UMzIgIEJvb3RJbWFnZUNoZWNrc3VtOyAgLy8gMTYt MTkNCj4gPj4gKyAgVUlOVDMyICBSZXNlcnZlZDA7ICAgICAgICAgIC8vIDIwLTIzDQo+ID4+ICsg IFVJTlQzMiAgTG9hZEFkZHI7ICAgICAgICAgICAvLyAyNC0yNw0KPiA+PiArICBVSU5UMzIgIEV4 ZWNBZGRyOyAgICAgICAgICAgLy8gMjgtMzENCj4gPj4gKyAgVUlOVDggICBVYXJ0Q29uZmlnOyAg ICAgICAgIC8vICAzMg0KPiA+PiArICBVSU5UOCAgIEJhdWRyYXRlOyAgICAgICAgICAgLy8gIDMz DQo+ID4+ICsgIFVJTlQ4ICAgRXh0Q291bnQ7ICAgICAgICAgICAvLyAgMzQNCj4gPj4gKyAgVUlO VDggICBBdXhGbGFnczsgICAgICAgICAgIC8vICAzNQ0KPiA+PiArICBVSU5UMzIgIElvQXJnMDsg ICAgICAgICAgICAgLy8gMzYtMzkNCj4gPj4gKyAgVUlOVDMyICBJb0FyZzE7ICAgICAgICAgICAg IC8vIDQwLTQzDQo+ID4+ICsgIFVJTlQzMiAgSW9BcmcyOyAgICAgICAgICAgICAvLyA0My00Nw0K PiA+PiArICBVSU5UMzIgIElvQXJnMzsgICAgICAgICAgICAgLy8gNDgtNTENCj4gPj4gKyAgVUlO VDMyICBSZXNlcnZlZDE7ICAgICAgICAgIC8vIDUyLTU1DQo+ID4+ICsgIFVJTlQzMiAgUmVzZXJ2 ZWQyOyAgICAgICAgICAvLyA1Ni01OQ0KPiA+PiArICBVSU5UMzIgIFJlc2VydmVkMzsgICAgICAg ICAgLy8gNjAtNjMNCj4gPj4gK30gTVZfSU1BR0VfSEVBREVSOw0KPiA+PiArDQo+ID4+ICtTVEFU SUMNCj4gPj4gK1VJTlQzMg0KPiA+PiArQ291bnRDaGVja3N1bSAoDQo+ID4+ICsgIFVJTlQzMiAq U3RhcnQsDQo+ID4+ICsgIFVJTlQzMiBMZW5ndGgNCj4gPj4gKyAgKQ0KPiA+PiArew0KPiA+PiAr ICBVSU5UMzIgU3VtID0gMDsNCj4gPj4gKyAgVUlOVDMyICpTdGFydHAgPSBTdGFydDsNCj4gPj4g Kw0KPiA+PiArICBkbyB7DQo+ID4+ICsgICAgU3VtICs9ICpTdGFydHA7DQo+ID4+ICsgICAgU3Rh cnRwKys7DQo+ID4+ICsgICAgTGVuZ3RoIC09IDQ7DQo+ID4+ICsgIH0gd2hpbGUgKExlbmd0aCA+ IDApOw0KPiA+PiArDQo+ID4+ICsgIHJldHVybiBTdW07DQo+ID4+ICt9DQo+ID4+ICsNCj4gPj4g K1NUQVRJQw0KPiA+PiArRUZJX1NUQVRVUw0KPiA+PiArQ2hlY2tJbWFnZUhlYWRlciAoDQo+ID4+ ICsgIElOIFZPSUQgKkltYWdlSGVhZGVyDQo+ID4+ICsgICkNCj4gPj4gK3sNCj4gPj4gKyAgTVZf SU1BR0VfSEVBREVSICpIZWFkZXI7DQo+ID4+ICsgIFVJTlQzMiBIZWFkZXJMZW5ndGgsIENoZWNr c3VtLCBDaGVja3N1bUJhY2t1cDsNCj4gPj4gKw0KPiA+PiArICBIZWFkZXIgPSAoTVZfSU1BR0Vf SEVBREVSICopIEltYWdlSGVhZGVyOw0KPiA+PiArICBIZWFkZXJMZW5ndGggPSBIZWFkZXItPlBy b2xvZ1NpemU7DQo+ID4+ICsgIENoZWNrc3VtQmFja3VwID0gSGVhZGVyLT5Qcm9sb2dDaGVja3N1 bTsNCj4gPj4gKw0KPiA+PiArICAvLyBDb21wYXJlIG1hZ2ljIG51bWJlcg0KPiA+PiArICBpZiAo SGVhZGVyLT5NYWdpYyAhPSBNQUlOX0hEUl9NQUdJQykgew0KPiA+PiArICAgIFByaW50IChMIiVz OiBCYWQgSW1hZ2UgbWFnaWMgMHglMDh4ICE9IDB4JTA4eFxuIiwNCj4gQ01EX05BTUVfU1RSSU5H LA0KPiA+PiArICAgICAgSGVhZGVyLT5NYWdpYywgTUFJTl9IRFJfTUFHSUMpOw0KPiA+PiArICAg IHJldHVybiBFRklfREVWSUNFX0VSUk9SOw0KPiA+PiArICB9DQo+ID4+ICsNCj4gPj4gKyAgLy8g VGhlIGNoZWNrc3VtIGZpZWxkIGlzIGRpc2NhcmRlZCBmcm9tIGNhbGN1bGF0aW9uDQo+ID4+ICsg IEhlYWRlci0+UHJvbG9nQ2hlY2tzdW0gPSAwOw0KPiA+PiArDQo+ID4+ICsgIENoZWNrc3VtID0g Q291bnRDaGVja3N1bSgoVUlOVDMyICopSGVhZGVyLCBIZWFkZXJMZW5ndGgpOw0KPiA+PiArICBp ZiAoQ2hlY2tzdW0gIT0gQ2hlY2tzdW1CYWNrdXApIHsNCj4gPj4gKyAgICBQcmludCAoTCIlczog QmFkIEltYWdlIGNoZWNrc3VtLiAweCV4ICE9IDB4JXhcbiIsDQo+IENNRF9OQU1FX1NUUklORywg Q2hlY2tzdW0sDQo+ID4+ICsgICAgICBDaGVja3N1bUJhY2t1cCk7DQo+ID4+ICsgICAgcmV0dXJu IEVGSV9ERVZJQ0VfRVJST1I7DQo+ID4+ICsgIH0NCj4gPj4gKw0KPiA+PiArICAvLyBSZXN0b3Jl IGNoZWNrc3VtIGJhY2t1cA0KPiA+PiArICBIZWFkZXItPlByb2xvZ0NoZWNrc3VtID0gQ2hlY2tz dW1CYWNrdXA7DQo+ID4+ICsNCj4gPj4gKyAgcmV0dXJuIDA7DQo+ID4+ICt9DQo+ID4+ICsNCj4g Pj4gK1NUQVRJQw0KPiA+PiArRUZJX1NUQVRVUw0KPiA+PiArQ2hlY2tGaXJtd2FyZUltYWdlICgN Cj4gPj4gKyAgQ09OU1QgQ0hBUjE2KiBGaXJtd2FyZUltYWdlDQo+ID4+ICsgICkNCj4gPj4gK3sN Cj4gPj4gKyAgRUZJX1NUQVRVUyBTdGF0dXM7DQo+ID4+ICsgIFZPSUQgKkZpbGVCdWZmZXI7DQo+ ID4+ICsgIFVJTlQ2NCBPcGVuTW9kZTsNCj4gPj4gKyAgVUlOVE4gRmlsZVNpemU7DQo+ID4+ICsg IFNIRUxMX0ZJTEVfSEFORExFIEZpbGVIYW5kbGUgPSBOVUxMOw0KPiA+PiArDQo+ID4+ICsgIE9w ZW5Nb2RlID0gRUZJX0ZJTEVfTU9ERV9SRUFEOw0KPiA+PiArDQo+ID4+ICsgIFN0YXR1cyA9IFNo ZWxsT3BlbkZpbGVCeU5hbWUgKEZpcm13YXJlSW1hZ2UsICZGaWxlSGFuZGxlLA0KPiBPcGVuTW9k ZSwgMCk7DQo+ID4+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+PiArICAgICAg UHJpbnQgKEwiJXM6IENhbm5vdCBvcGVuIEltYWdlIGZpbGVcbiIsIENNRF9OQU1FX1NUUklORyk7 DQo+ID4+ICsgICAgICByZXR1cm4gRUZJX0RFVklDRV9FUlJPUjsNCj4gPj4gKyAgICB9DQo+ID4+ ICsNCj4gPj4gKyAgU3RhdHVzID0gRmlsZUhhbmRsZUdldFNpemUgKEZpbGVIYW5kbGUsICZGaWxl U2l6ZSk7DQo+ID4+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+PiArICAgICAg UHJpbnQgKEwiJXM6IENhbm5vdCBnZXQgSW1hZ2UgZmlsZSBzaXplXG4iLCBDTURfTkFNRV9TVFJJ TkcpOw0KPiA+PiArICAgIH0NCj4gPj4gKw0KPiA+PiArICBGaWxlQnVmZmVyID0gQWxsb2NhdGVa ZXJvUG9vbCAoRmlsZVNpemUpOw0KPiA+PiArDQo+ID4+ICsgIC8vIFJlYWQgSW1hZ2UgaGVhZGVy IGludG8gYnVmZmVyDQo+ID4+ICsgIFN0YXR1cyA9IEZpbGVIYW5kbGVSZWFkIChGaWxlSGFuZGxl LCAmRmlsZVNpemUsIEZpbGVCdWZmZXIpOw0KPiA+PiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4gPj4gKyAgICAgIFByaW50IChMIiVzOiBDYW5ub3QgcmVhZCBJbWFnZSBmaWxlIGhl YWRlclxuIiwgQ01EX05BTUVfU1RSSU5HKTsNCj4gPj4gKyAgICAgIFNoZWxsQ2xvc2VGaWxlICgm RmlsZUhhbmRsZSk7DQo+ID4+ICsgICAgICBGcmVlUG9vbCAoRmlsZUJ1ZmZlcik7DQo+ID4+ICsg ICAgICByZXR1cm4gRUZJX0RFVklDRV9FUlJPUjsNCj4gPj4gKyAgICB9DQo+ID4+ICsNCj4gPj4g KyAgU3RhdHVzID0gQ2hlY2tJbWFnZUhlYWRlciAoRmlsZUJ1ZmZlcik7DQo+ID4+ICsgIGlmIChF RklfRVJST1IoU3RhdHVzKSkgew0KPiA+PiArICAgIHJldHVybiBFRklfREVWSUNFX0VSUk9SOw0K PiA+PiArICB9DQo+ID4+ICsNCj4gPj4gKyAgRnJlZVBvb2wgKEZpbGVCdWZmZXIpOw0KPiA+PiAr DQo+ID4+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPj4gK30NCj4gPj4gKw0KPiA+PiArU1RB VElDDQo+ID4+ICtDT05TVCBDSEFSMTYgKg0KPiA+PiArRmlsZU5hbWVGcm9tRmlsZVBhdGggKA0K PiA+PiArICBDT05TVCBDSEFSMTYgKlJlbW90ZUZpbGVQYXRoDQo+ID4+ICsgICkNCj4gPj4gK3sN Cj4gPj4gKyAgQ09OU1QgQ0hBUjE2ICpXYWxrZXI7DQo+ID4+ICsNCj4gPj4gKyAgLy8gR2F0aGVy IEZpbGVOYW1lIGZyb20gRmlsZVBhdGgNCj4gPj4gKyAgV2Fsa2VyID0gUmVtb3RlRmlsZVBhdGgg KyBTdHJMZW4gKFJlbW90ZUZpbGVQYXRoKTsNCj4gPj4gKyAgd2hpbGUgKCgtLVdhbGtlcikgPj0g UmVtb3RlRmlsZVBhdGgpIHsNCj4gPj4gKyAgICBpZiAoKCpXYWxrZXIgPT0gTCdcXCcpIHx8ICgq V2Fsa2VyID09IEwnLycpKSB7DQo+ID4+ICsgICAgICBicmVhazsNCj4gPj4gKyAgICB9DQo+ID4+ ICsgIH0NCj4gPj4gKw0KPiA+PiArICByZXR1cm4gKFdhbGtlciArIDEpOw0KPiA+PiArfQ0KPiA+ PiArDQo+ID4+ICtTVEFUSUMNCj4gPj4gK0NPTlNUIENIQVIxNioNCj4gPj4gK1ByZXBhcmVGaWxl ICgNCj4gPj4gKyAgTElTVF9FTlRSWSAqQ2hlY2tQYWNrYWdlDQo+ID4+ICsgICkNCj4gPj4gK3sN Cj4gPj4gKyAgRUZJX1NUQVRVUyBTdGF0dXM7DQo+ID4+ICsgIENPTlNUIENIQVIxNiAgKlZhbHVl U3RyOw0KPiA+PiArDQo+ID4+ICsgIFZhbHVlU3RyID0gU2hlbGxDb21tYW5kTGluZUdldFZhbHVl IChDaGVja1BhY2thZ2UsIEwiLWYiKTsNCj4gPj4gKyAgaWYgKFZhbHVlU3RyID09IE5VTEwpIHsN Cj4gPj4gKyAgICBQcmludCAoTCIlczogTm8gTG9jYWxGaWxlUGF0aCBwYXJhbWV0ZXIhXG4iLCBD TURfTkFNRV9TVFJJTkcpOw0KPiA+PiArICAgIHJldHVybiBOVUxMOw0KPiA+PiArICB9IGVsc2Ug ew0KPiA+PiArICAgIFN0YXR1cyA9IFNoZWxsSXNGaWxlIChWYWx1ZVN0cik7DQo+ID4+ICsgICAg aWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ID4+ICsgICAgICBQcmludCAoTCIlczogV3Jvbmcg TG9jYWxGaWxlUGF0aCBwYXJhbWV0ZXIhXG4iLA0KPiBDTURfTkFNRV9TVFJJTkcpOw0KPiA+PiAr ICAgICAgcmV0dXJuIE5VTEw7DQo+ID4+ICsgICAgfQ0KPiA+PiArICB9DQo+ID4+ICsgIHJldHVy biBWYWx1ZVN0cjsNCj4gPj4gK30NCj4gPj4gKw0KPiA+PiArQ09OU1QgQ0hBUjE2IGdTaGVsbEZV cGRhdGVGaWxlTmFtZVtdID0gTCJTaGVsbENvbW1hbmQiOw0KPiA+PiArRUZJX0hBTkRMRSBnU2hl bGxGVXBkYXRlSGlpSGFuZGxlID0gTlVMTDsNCj4gPj4gK0VGSV9IQU5ETEUgZ1NoZWxsRlVwZGF0 ZUhpaUhhbmRsZTsNCj4gPj4gKw0KPiA+PiArU1RBVElDIENPTlNUIFNIRUxMX1BBUkFNX0lURU0g UGFyYW1MaXN0W10gPSB7DQo+ID4+ICsgIHtMImhlbHAiLCBUeXBlRmxhZ30sDQo+ID4+ICsgIHtM Ii10IiwgVHlwZUZsYWd9LA0KPiA+PiArICB7TCItZiIsIFR5cGVWYWx1ZX0sDQo+ID4+ICsgIHtO VUxMICwgVHlwZU1heH0NCj4gPj4gKyAgfTsNCj4gPj4gKw0KPiA+PiArLyoqDQo+ID4+ICsgIFJl dHVybiB0aGUgZmlsZSBuYW1lIG9mIHRoZSBoZWxwIHRleHQgZmlsZSBpZiBub3QgdXNpbmcgSElJ Lg0KPiA+PiArDQo+ID4+ICsgIEByZXR1cm4gVGhlIHN0cmluZyBwb2ludGVyIHRvIHRoZSBmaWxl IG5hbWUuDQo+ID4+ICsqKi8NCj4gPj4gK0NPTlNUIENIQVIxNioNCj4gPj4gK0VGSUFQSQ0KPiA+ PiArU2hlbGxDb21tYW5kR2V0TWFuRmlsZU5hbWVGVXBkYXRlICgNCj4gPj4gKyAgVk9JRA0KPiA+ PiArICApDQo+ID4+ICt7DQo+ID4+ICsNCj4gPj4gKyAgcmV0dXJuIGdTaGVsbEZVcGRhdGVGaWxl TmFtZTsNCj4gPj4gK30NCj4gPj4gKw0KPiA+PiArVk9JRA0KPiA+PiArRlVwZGF0ZVVzYWdlICgN Cj4gPj4gKyAgVk9JRA0KPiA+PiArICApDQo+ID4+ICt7DQo+ID4+ICsgIFByaW50IChMIlxuRmly bXdhcmUgdXBkYXRlIGNvbW1hbmRcbiINCj4gPj4gKyAgICAgICAgICJmdXBkYXRlIFstZiA8TG9j YWxGaWxlUGF0aD5dIFstdCA8SG9zdD4gPFJlbW90ZUZpbGVQYXRoPl1cblxuIg0KPiA+PiArICAg ICAgICAgIkxvY2FsRmlsZVBhdGggIC0gcGF0aCB0byBsb2NhbCBmaXJtd2FyZSBpbWFnZSBmaWxl XG4iDQo+ID4+ICsgICAgICAgICAiSG9zdCAgICAgICAgICAgLSBJUCBudW1iZXIgb2YgVEZUUCBz ZXJ2ZXJcbiINCj4gPj4gKyAgICAgICAgICJSZW1vdGVGaWxlUGF0aCAtIHBhdGggdG8gZmlybXdh cmUgaW1hZ2UgZmlsZSBvbiBURlRQIHNlcnZlclxuIg0KPiA+PiArICAgICAgICAgIkV4YW1wbGVz OlxuIg0KPiA+PiArICAgICAgICAgIlVwZGF0ZSBmaXJtd2FyZSBmcm9tIGZpbGUgZnMyOlVlZmku aW1nXG4iDQo+ID4+ICsgICAgICAgICAiICBmdXBkYXRlIC1mIGZzMjpVZWZpLmltZ1xuIg0KPiA+ PiArICAgICAgICAgIlVwZGF0ZSBmaXJtd2FyZSBmcm9tIGZpbGUgcGF0aC9VZWZpLmltZyBURlRQ IHNlcnZlciB3aXRoIElQICINCj4gPj4gKyAgICAgICAgICJhZGRyZXNzIDEwLjAuMC4yMDBcbiIN Cj4gPj4gKyAgICAgICAgICIgIGZ1cGRhdGUgLXQgMTAuMC4wLjIwMCBwYXRoL1VlZmkuaW1nXG4i DQo+ID4+ICsgICk7DQo+ID4+ICt9DQo+ID4+ICsNCj4gPj4gK1NIRUxMX1NUQVRVUw0KPiA+PiAr RUZJQVBJDQo+ID4+ICtTaGVsbENvbW1hbmRSdW5GVXBkYXRlICgNCj4gPj4gKyAgSU4gRUZJX0hB TkRMRSAgICAgICAgSW1hZ2VIYW5kbGUsDQo+ID4+ICsgIElOIEVGSV9TWVNURU1fVEFCTEUgICpT eXN0ZW1UYWJsZQ0KPiA+PiArICApDQo+ID4+ICt7DQo+ID4+ICsgIEVGSV9TVEFUVVMgICAgU3Rh dHVzOw0KPiA+PiArICBMSVNUX0VOVFJZICAgICpDaGVja1BhY2thZ2U7DQo+ID4+ICsgIENIQVIx NiAgICAgICAgKlByb2JsZW1QYXJhbSwgKlRmdHBDbWQgPSBOVUxMLCAqU2ZDbWQgPSBOVUxMOw0K PiA+PiArICBDT05TVCBDSEFSMTYgICpSZW1vdGVGaWxlUGF0aCwgKkhvc3QsICpGaWxlVG9Xcml0 ZTsNCj4gPj4gKyAgVUlOVDggICAgICAgICBDbWRMZW47DQo+ID4+ICsgIEJPT0xFQU4gICAgICAg RmlsZUZsYWcsIFRmdHBGbGFnOw0KPiA+PiArDQo+ID4+ICsgIFN0YXR1cyA9IFNoZWxsSW5pdGlh bGl6ZSAoKTsNCj4gPj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+PiArICAgIFBy aW50IChMIiVzOiBFcnJvciB3aGlsZSBpbml0aWFsaXppbmYgU2hlbGxcbiIsIENNRF9OQU1FX1NU UklORyk7DQo+ID4+ICsgICAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4gPj4gKyAgICBy ZXR1cm4gU0hFTExfQUJPUlRFRDsNCj4gPj4gKyAgfQ0KPiA+PiArDQo+ID4+ICsgIFN0YXR1cyA9 IFNoZWxsQ29tbWFuZExpbmVQYXJzZSAoUGFyYW1MaXN0LCAmQ2hlY2tQYWNrYWdlLA0KPiAmUHJv YmxlbVBhcmFtLA0KPiA+PiArICAgIFRSVUUpOw0KPiA+PiArICBpZiAoRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQo+ID4+ICsgICAgUHJpbnQgKEwiUGFyc2UgZXJyb3IhXG4iKTsNCj4gPj4gKyAgfQ0K PiA+PiArDQo+ID4+ICsgIGlmIChTaGVsbENvbW1hbmRMaW5lR2V0RmxhZyAoQ2hlY2tQYWNrYWdl LCBMImhlbHAiKSkgew0KPiA+PiArICAgIEZVcGRhdGVVc2FnZSgpOw0KPiA+PiArICAgIHJldHVy biBFRklfU1VDQ0VTUzsNCj4gPj4gKyAgfQ0KPiA+PiArDQo+ID4+ICsgIEZpbGVGbGFnID0gU2hl bGxDb21tYW5kTGluZUdldEZsYWcgKENoZWNrUGFja2FnZSwgTCItZiIpOw0KPiA+PiArICBUZnRw RmxhZyA9IFNoZWxsQ29tbWFuZExpbmVHZXRGbGFnIChDaGVja1BhY2thZ2UsIEwiLXQiKTsNCj4g Pj4gKw0KPiA+PiArICBpZiAoIUZpbGVGbGFnICYmICFUZnRwRmxhZykgew0KPiA+PiArICAgIFBy aW50IChMIiVzOiBQbGVhc2Ugc3BlY2lmeSAtZiBvciAtdCBmbGFnXG4iLCBDTURfTkFNRV9TVFJJ TkcpOw0KPiA+PiArICAgIHJldHVybiBTSEVMTF9BQk9SVEVEOw0KPiA+PiArICB9IGVsc2UgaWYg KEZpbGVGbGFnICYmICFUZnRwRmxhZykgew0KPiA+PiArICAgIC8vIFByZXBhcmUgbG9jYWwgZmls ZSB0byBiZSBidXJuZWQgaW50byBmbGFzaA0KPiA+PiArICAgIEZpbGVUb1dyaXRlID0gUHJlcGFy ZUZpbGUgKENoZWNrUGFja2FnZSk7DQo+ID4+ICsgICAgaWYgKEZpbGVUb1dyaXRlID09IE5VTEwp IHsNCj4gPj4gKyAgICAgIFByaW50IChMIiVzOiBFcnJvciB3aGlsZSBwcmVwYXJpbmcgZmlsZSBm b3IgYnVyblxuIiwNCj4gQ01EX05BTUVfU1RSSU5HKTsNCj4gPj4gKyAgICAgIHJldHVybiBTSEVM TF9BQk9SVEVEOw0KPiA+PiArICAgIH0NCj4gPj4gKyAgfSBlbHNlIGlmIChUZnRwRmxhZyAmJiAh RmlsZUZsYWcpIHsNCj4gPj4gKyAgICBIb3N0ID0gU2hlbGxDb21tYW5kTGluZUdldFJhd1ZhbHVl IChDaGVja1BhY2thZ2UsIDEpOw0KPiA+PiArICAgIGlmIChIb3N0ID09IE5VTEwpIHsNCj4gPj4g KyAgICAgIFByaW50IChMIiVzOiBObyBIb3N0IHBhcmFtZXRlciFcbiIsIENNRF9OQU1FX1NUUklO Ryk7DQo+ID4+ICsgICAgICByZXR1cm4gU0hFTExfQUJPUlRFRDsNCj4gPj4gKyAgICB9DQo+ID4+ ICsNCj4gPj4gKyAgICBSZW1vdGVGaWxlUGF0aCA9IFNoZWxsQ29tbWFuZExpbmVHZXRSYXdWYWx1 ZSAoQ2hlY2tQYWNrYWdlLCAyKTsNCj4gPj4gKyAgICBpZiAoUmVtb3RlRmlsZVBhdGggPT0gTlVM TCkgew0KPiA+PiArICAgICAgUHJpbnQgKEwiJXM6IE5vIHJlbW90ZV9maWxlX3BhdGggcGFyYW1l dGVyIVxuIiwNCj4gQ01EX05BTUVfU1RSSU5HKTsNCj4gPj4gKyAgICAgIHJldHVybiBTSEVMTF9B Qk9SVEVEOw0KPiA+PiArICAgIH0NCj4gPj4gKw0KPiA+PiArICAgIC8vIEdhdGhlciBmaXJtd2Fy ZSBpbWFnZSBuYW1lIGZyb20gcmVtb3RlIGZpbGVwYXRoDQo+ID4+ICsgICAgRmlsZVRvV3JpdGUg PSBGaWxlTmFtZUZyb21GaWxlUGF0aCAoUmVtb3RlRmlsZVBhdGgpOw0KPiA+PiArDQo+ID4+ICsg ICAgLy8gQWxsb2NhdGUgYnVmZmVyIGZvciB0ZnRwIGNvbW1hbmQgc3RyaW5nDQo+ID4+ICsgICAg Q21kTGVuID0gU3RyU2l6ZSAoVEZUUF9DTURfU1RSSU5HKSArIFN0clNpemUgKFNQQUNFX1NUUklO RykgKw0KPiA+PiArICAgICAgU3RyU2l6ZSAoSG9zdCkgKyBTdHJTaXplIChSZW1vdGVGaWxlUGF0 aCk7DQo+ID4+ICsgICAgVGZ0cENtZCA9IChDSEFSMTYgKikgQWxsb2NhdGVaZXJvUG9vbCAoQ21k TGVuICsgc2l6ZW9mKENIQVIxNikpOw0KPiA+PiArICAgIGlmIChUZnRwQ21kID09IE5VTEwpIHsN Cj4gPj4gKyAgICAgIFByaW50IChMIiVzOiBDYW5ub3QgYWxsb2NhdGUgbWVtb3J5XG4iLCBDTURf TkFNRV9TVFJJTkcpOw0KPiA+PiArICAgICAgcmV0dXJuIFNIRUxMX0FCT1JURUQ7DQo+ID4+ICsg ICAgfQ0KPiA+PiArDQo+ID4+ICsgICAgLy8gQ29uY2F0ZW5hdGUgcGFyYW1ldGVycyBhbmQgZm9y bSB0ZnRwIGNvbW1hbmQgc3RyaW5nDQo+ID4+ICsgICAgU3RyQ2F0UyAoVGZ0cENtZCwgQ21kTGVu IC8gc2l6ZW9mKENIQVIxNiksIFRGVFBfQ01EX1NUUklORyk7DQo+ID4+ICsgICAgU3RyQ2F0UyAo VGZ0cENtZCwgQ21kTGVuIC8gc2l6ZW9mKENIQVIxNiksIChDSEFSMTYgKilIb3N0KTsNCj4gPj4g KyAgICAvLyBJbnNlcnQgc3BhY2UNCj4gPj4gKyAgICBTdHJDYXRTIChUZnRwQ21kLCBDbWRMZW4g LyBzaXplb2YoQ0hBUjE2KSwgU1BBQ0VfU1RSSU5HKTsNCj4gPj4gKyAgICBTdHJDYXRTIChUZnRw Q21kLCBDbWRMZW4gLyBzaXplb2YoQ0hBUjE2KSwgKENIQVIxNg0KPiAqKVJlbW90ZUZpbGVQYXRo KTsNCj4gPj4gKw0KPiA+PiArICAgIFJ1blNoZWxsQ29tbWFuZCAoVGZ0cENtZCwgJlN0YXR1cyk7 DQo+ID4+ICsgICAgRnJlZVBvb2wgKFRmdHBDbWQpOw0KPiA+PiArICAgIGlmIChFRklfRVJST1Io U3RhdHVzKSkgew0KPiA+PiArICAgICAgUHJpbnQgKEwiJXM6IEVycm9yIHdoaWxlIHBlcmZvcm1p bmcgdGZ0cCBjb21tYW5kXG4iLA0KPiBDTURfTkFNRV9TVFJJTkcpOw0KPiA+PiArICAgICAgcmV0 dXJuIFNIRUxMX0FCT1JURUQ7DQo+ID4+ICsgICAgfQ0KPiA+PiArDQo+ID4+ICsgIH0gZWxzZSB7 DQo+ID4+ICsgICAgUHJpbnQgKEwiJXM6IEJvdGggLWYgYW5kIC10IGZsYWcgc3BlY2lmaWVkLCBw bGVhc2UgY2hvb3NlIG9uZVxuIiwNCj4gPj4gKyAgICAgIENNRF9OQU1FX1NUUklORyk7DQo+ID4+ ICsgICAgcmV0dXJuIFNIRUxMX0FCT1JURUQ7DQo+ID4+ICsgIH0NCj4gPj4gKw0KPiA+PiArICAv LyBDaGVjayBpbWFnZSBjaGVja3N1bSBhbmQgbWFnaWMNCj4gPj4gKyAgU3RhdHVzID0gQ2hlY2tG aXJtd2FyZUltYWdlIChGaWxlVG9Xcml0ZSk7DQo+ID4+ICsgIGlmIChFRklfRVJST1IoU3RhdHVz KSkgew0KPiA+PiArICAgIFByaW50IChMIiVzOiBXcm9uZyBmaXJtd2FyZSBJbWFnZVxuIiwgQ01E X05BTUVfU1RSSU5HKTsNCj4gPj4gKyAgICByZXR1cm4gU0hFTExfQUJPUlRFRDsNCj4gPj4gKyAg fQ0KPiA+PiArDQo+ID4+ICsgIC8vIFByb2JlIHNwaSBidXMNCj4gPj4gKyAgUnVuU2hlbGxDb21t YW5kIChTRl9QUk9CRV9DTURfU1RSSU5HLCAmU3RhdHVzKTsNCj4gPj4gKyAgaWYgKEVGSV9FUlJP UihTdGF0dXMpKSB7DQo+ID4+ICsgICAgUHJpbnQgKEwiJXM6IEVycm9yIHdoaWxlIHBlcmZvcm1p bmcgc2YgcHJvYmVcbiIsDQo+IENNRF9OQU1FX1NUUklORyk7DQo+ID4+ICsgICAgcmV0dXJuIFNI RUxMX0FCT1JURUQ7DQo+ID4+ICsgIH0NCj4gPj4gKw0KPiA+PiArICAvLyBBbGxvY2F0ZSBidWZm ZXIgZm9yIHNmIGNvbW1hbmQgc3RyaW5nDQo+ID4+ICsgIENtZExlbiA9IFN0clNpemUgKFNGX1dS SVRFX0NNRF9TVFJJTkcpICsgU3RyU2l6ZSAoRmlsZVRvV3JpdGUpICsNCj4gPj4gKyAgICBTdHJT aXplIChTUEFDRV9TVFJJTkcpICsgU3RyU2l6ZSAoU0ZfTE9BRF9BRERSX1NUUklORyk7DQo+ID4+ ICsgIFNmQ21kID0gKENIQVIxNiAqKSBBbGxvY2F0ZVplcm9Qb29sIChDbWRMZW4gKyBzaXplb2Yo Q0hBUjE2KSk7DQo+ID4+ICsgIGlmIChTZkNtZCA9PSBOVUxMKSB7DQo+ID4+ICsgICAgUHJpbnQg KEwiJXM6IENhbm5vdCBhbGxvY2F0ZSBtZW1vcnlcbiIpOw0KPiA+PiArICAgIHJldHVybiBTSEVM TF9BQk9SVEVEOw0KPiA+PiArICB9DQo+ID4+ICsNCj4gPj4gKyAgLy8gQ29uY2F0ZW5hdGUgcGFy YW1ldGVycyBhbmQgZm9ybSBjb21tYW5kIHN0cmluZw0KPiA+PiArICBTdHJDYXRTIChTZkNtZCwg Q21kTGVuIC8gc2l6ZW9mKENIQVIxNiksIFNGX1dSSVRFX0NNRF9TVFJJTkcpOw0KPiA+PiArICBT dHJDYXRTIChTZkNtZCwgQ21kTGVuIC8gc2l6ZW9mKENIQVIxNiksIChDSEFSMTYgKilGaWxlVG9X cml0ZSk7DQo+ID4+ICsgIFN0ckNhdFMgKFNmQ21kLCBDbWRMZW4gLyBzaXplb2YoQ0hBUjE2KSwg U1BBQ0VfU1RSSU5HKTsNCj4gPj4gKyAgU3RyQ2F0UyAoU2ZDbWQsIENtZExlbiAvIHNpemVvZihD SEFSMTYpLCBTRl9MT0FEX0FERFJfU1RSSU5HKTsNCj4gPj4gKw0KPiA+PiArICAvLyBVcGRhdGUg ZmlybXdhcmUgaW1hZ2UgaW4gZmxhc2gNCj4gPj4gKyAgUnVuU2hlbGxDb21tYW5kIChTZkNtZCwg JlN0YXR1cyk7DQo+ID4+ICsgIEZyZWVQb29sIChTZkNtZCk7DQo+ID4+ICsgIGlmIChFRklfRVJS T1IoU3RhdHVzKSkgew0KPiA+PiArICAgIFByaW50IChMIiVzOiBFcnJvciB3aGlsZSBwZXJmb3Jt aW5nIHNmIHVwZGF0ZVxuIiwNCj4gQ01EX05BTUVfU1RSSU5HKTsNCj4gPj4gKyAgICByZXR1cm4g U0hFTExfQUJPUlRFRDsNCj4gPj4gKyAgfQ0KPiA+PiArDQo+ID4+ICsgIHJldHVybiBFRklfU1VD Q0VTUzsNCj4gPj4gK30NCj4gPj4gKw0KPiA+PiArRUZJX1NUQVRVUw0KPiA+PiArRUZJQVBJDQo+ ID4+ICtTaGVsbEZVcGRhdGVDb21tYW5kQ29uc3RydWN0b3IgKA0KPiA+PiArICBJTiBFRklfSEFO RExFICAgICAgICBJbWFnZUhhbmRsZSwNCj4gPj4gKyAgSU4gRUZJX1NZU1RFTV9UQUJMRSAgKlN5 c3RlbVRhYmxlDQo+ID4+ICsgICkNCj4gPj4gK3sNCj4gPj4gKyAgRUZJX1NUQVRVUyBTdGF0dXM7 DQo+ID4+ICsNCj4gPj4gKyAgZ1NoZWxsRlVwZGF0ZUhpaUhhbmRsZSA9IE5VTEw7DQo+ID4+ICsN Cj4gPj4gKyAgZ1NoZWxsRlVwZGF0ZUhpaUhhbmRsZSA9IEhpaUFkZFBhY2thZ2VzICgNCj4gPj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgJmdTaGVsbEZVcGRhdGVIaWlHdWlkLCBnSW1hZ2VI YW5kbGUsDQo+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIFVlZmlTaGVsbEZVcGRhdGVD b21tYW5kTGliU3RyaW5ncywgTlVMTA0KPiA+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAp Ow0KPiA+PiArICBpZiAoZ1NoZWxsRlVwZGF0ZUhpaUhhbmRsZSA9PSBOVUxMKSB7DQo+ID4+ICsg ICAgUHJpbnQgKEwiJXM6IENhbm5vdCBhZGQgSGlpIHBhY2thZ2VcbiIsIENNRF9OQU1FX1NUUklO Ryk7DQo+ID4+ICsgICAgcmV0dXJuIEVGSV9ERVZJQ0VfRVJST1I7DQo+ID4+ICsgIH0NCj4gPj4g Kw0KPiA+PiArICBTdGF0dXMgPSBTaGVsbENvbW1hbmRSZWdpc3RlckNvbW1hbmROYW1lICgNCj4g Pj4gKyAgICAgQ01EX05BTUVfU1RSSU5HLCBTaGVsbENvbW1hbmRSdW5GVXBkYXRlLA0KPiBTaGVs bENvbW1hbmRHZXRNYW5GaWxlTmFtZUZVcGRhdGUsDQo+ID4+ICsgICAgIDAsIENNRF9OQU1FX1NU UklORywgVFJVRSAsIGdTaGVsbEZVcGRhdGVIaWlIYW5kbGUsDQo+ID4+ICsgICAgIFNUUklOR19U T0tFTiAoU1RSX0dFVF9IRUxQX0ZVUERBVEUpDQo+ID4+ICsgICAgICk7DQo+ID4+ICsgIGlmIChF RklfRVJST1IoU3RhdHVzKSkgew0KPiA+PiArICAgIFByaW50IChMIiVzOiBFcnJvciB3aGlsZSBy ZWdpc3RlcmluZyBjb21tYW5kXG4iLA0KPiBDTURfTkFNRV9TVFJJTkcpOw0KPiA+PiArICAgIHJl dHVybiBTSEVMTF9BQk9SVEVEOw0KPiA+PiArICB9DQo+ID4+ICsNCj4gPj4gKyAgcmV0dXJuIEVG SV9TVUNDRVNTOw0KPiA+PiArfQ0KPiA+PiArDQo+ID4+ICtFRklfU1RBVFVTDQo+ID4+ICtFRklB UEkNCj4gPj4gK1NoZWxsRlVwZGF0ZUNvbW1hbmREZXN0cnVjdG9yICgNCj4gPj4gKyAgSU4gRUZJ X0hBTkRMRSAgICAgICAgSW1hZ2VIYW5kbGUsDQo+ID4+ICsgIElOIEVGSV9TWVNURU1fVEFCTEUg ICpTeXN0ZW1UYWJsZQ0KPiA+PiArICApDQo+ID4+ICt7DQo+ID4+ICsNCj4gPj4gKyAgaWYgKGdT aGVsbEZVcGRhdGVIaWlIYW5kbGUgIT0gTlVMTCkgew0KPiA+PiArICAgIEhpaVJlbW92ZVBhY2th Z2VzIChnU2hlbGxGVXBkYXRlSGlpSGFuZGxlKTsNCj4gPj4gKyAgfQ0KPiA+PiArICByZXR1cm4g RUZJX1NVQ0NFU1M7DQo+ID4+ICt9DQo+ID4+IGRpZmYgLS1naXQgYS9BcHBsaWNhdGlvbnMvRmly bXdhcmVVcGRhdGUvRlVwZGF0ZS5pbmYNCj4gYi9BcHBsaWNhdGlvbnMvRmlybXdhcmVVcGRhdGUv RlVwZGF0ZS5pbmYNCj4gPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPj4gaW5kZXggMDAwMDAw MC4uNTNiNTMwNQ0KPiA+PiAtLS0gL2Rldi9udWxsDQo+ID4+ICsrKyBiL0FwcGxpY2F0aW9ucy9G aXJtd2FyZVVwZGF0ZS9GVXBkYXRlLmluZg0KPiA+PiBAQCAtMCwwICsxLDY4IEBADQo+ID4+ICsj DQo+ID4+ICsjIE1hcnZlbGwgQlNEIExpY2Vuc2UgT3B0aW9uDQo+ID4+ICsjDQo+ID4+ICsjIElm IHlvdSByZWNlaXZlZCB0aGlzIEZpbGUgZnJvbSBNYXJ2ZWxsLCB5b3UgbWF5IG9wdCB0byB1c2Us IHJlZGlzdHJpYnV0ZQ0KPiA+PiArIyBhbmQvb3IgbW9kaWZ5IHRoaXMgRmlsZSB1bmRlciB0aGUg Zm9sbG93aW5nIGxpY2Vuc2luZyB0ZXJtcy4NCj4gPj4gKyMgUmVkaXN0cmlidXRpb24gYW5kIHVz ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQo+ID4+ICsjIG1v ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucyBhcmUNCj4gbWV0Og0KPiA+PiArIw0KPiA+PiArIyAqIFJlZGlzdHJpYnV0aW9ucyBv ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQo+IG5vdGljZSwN Cj4gPj4gKyMgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lci4NCj4gPj4gKyMNCj4gPj4gKyMgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodA0KPiA+PiArIyBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlDQo+ ID4+ICsjIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo IHRoZSBkaXN0cmlidXRpb24uDQo+ID4+ICsjDQo+ID4+ICsjICogTmVpdGhlciB0aGUgbmFtZSBv ZiBNYXJ2ZWxsIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkNCj4gYmUNCj4g Pj4gKyMgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUNCj4gd2l0aG91dA0KPiA+PiArIyBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl cm1pc3Npb24uDQo+ID4+ICsjDQo+ID4+ICsjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORA0KPiBDT05UUklCVVRPUlMgIkFTIElTIg0KPiA+PiAr IyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO T1QNCj4gTElNSVRFRCBUTywgVEhFDQo+ID4+ICsjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEENCj4gUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0K PiA+PiArIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVS IE9SDQo+IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUNCj4gPj4gKyMgRk9SIEFOWSBESVJFQ1QsIElO RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SDQo+IENPTlNFUVVFTlRJ QUwNCj4gPj4gKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV UkVNRU5UIE9GDQo+IFNVQlNUSVRVVEUgR09PRFMgT1INCj4gPj4gKyMgU0VSVklDRVM7IExPU1Mg T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUw0KPiBJTlRFUlJVUFRJT04pIEhP V0VWRVINCj4gPj4gKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF VEhFUiBJTiBDT05UUkFDVCwNCj4gU1RSSUNUIExJQUJJTElUWSwNCj4gPj4gKyMgT1IgVE9SVCAo SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWQ0KPiBXQVkg T1VUIE9GIFRIRSBVU0UNCj4gPj4gKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIDQo+IERBTUFHRS4NCj4gPj4gKyMNCj4gPj4gKw0K PiA+PiArW0RlZmluZXNdDQo+ID4+ICsgIElORl9WRVJTSU9OID0gMHgwMDAxMDAwNg0KPiA+PiAr ICBCQVNFX05BTUUgPSBVZWZpU2hlbGxGVXBkYXRlQ29tbWFuZExpYg0KPiA+PiArICBGSUxFX0dV SUQgPSA0NzAyOTJiMi05MjZiLTRlZDgtODA4MC1iZTdhMjYwZGI2MjcNCj4gPj4gKyAgTU9EVUxF X1RZUEUgPSBVRUZJX0FQUExJQ0FUSU9ODQo+ID4+ICsgIFZFUlNJT05fU1RSSU5HID0gMC4xDQo+ ID4+ICsgIExJQlJBUllfQ0xBU1MgPSBOVUxMfFVFRklfQVBQTElDQVRJT04gVUVGSV9EUklWRVIN Cj4gPj4gKyAgQ09OU1RSVUNUT1IgPSBTaGVsbEZVcGRhdGVDb21tYW5kQ29uc3RydWN0b3INCj4g Pj4gKyAgREVTVFJVQ1RPUiA9IFNoZWxsRlVwZGF0ZUNvbW1hbmREZXN0cnVjdG9yDQo+ID4+ICsN Cj4gPj4gK1tTb3VyY2VzXQ0KPiA+PiArICBGVXBkYXRlLmMNCj4gPj4gKyAgRlVwZGF0ZS51bmkN Cj4gPj4gKw0KPiA+PiArW1BhY2thZ2VzXQ0KPiA+PiArICBNZGVQa2cvTWRlUGtnLmRlYw0KPiA+ PiArICBTaGVsbFBrZy9TaGVsbFBrZy5kZWMNCj4gPj4gKyAgTWRlTW9kdWxlUGtnL01kZU1vZHVs ZVBrZy5kZWMNCj4gPj4gKyAgT3BlblBsYXRmb3JtUGtnL1BsYXRmb3Jtcy9NYXJ2ZWxsL01hcnZl bGwuZGVjDQo+ID4+ICsNCj4gPj4gK1tMaWJyYXJ5Q2xhc3Nlc10NCj4gPj4gKyAgVWVmaUxpYg0K PiA+PiArICBVZWZpQm9vdFNlcnZpY2VzVGFibGVMaWINCj4gPj4gKyAgTWVtb3J5QWxsb2NhdGlv bkxpYg0KPiA+PiArICBCYXNlTGliDQo+ID4+ICsgIEJhc2VNZW1vcnlMaWINCj4gPj4gKyAgRGVi dWdMaWINCj4gPj4gKyAgU2hlbGxDb21tYW5kTGliDQo+ID4+ICsgIFNoZWxsTGliDQo+ID4+ICsg IFVlZmlMaWINCj4gPj4gKyAgVWVmaVJ1bnRpbWVTZXJ2aWNlc1RhYmxlTGliDQo+ID4+ICsgIFBj ZExpYg0KPiA+PiArICBIaWlMaWINCj4gPj4gKyAgRmlsZUhhbmRsZUxpYg0KPiA+PiArDQo+ID4+ ICtbR3VpZHNdDQo+ID4+ICsgIGdTaGVsbEZVcGRhdGVIaWlHdWlkDQo+ID4+IGRpZmYgLS1naXQg YS9BcHBsaWNhdGlvbnMvRmlybXdhcmVVcGRhdGUvRlVwZGF0ZS51bmkNCj4gYi9BcHBsaWNhdGlv bnMvRmlybXdhcmVVcGRhdGUvRlVwZGF0ZS51bmkNCj4gPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQN Cj4gPj4gaW5kZXgNCj4gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u NjE0M2MwNTgwZjFkMWVmOGNlNGZlNjE5YTENCj4gZGYxY2UzODBhZGYyYzANCj4gPj4gR0lUIGJp bmFyeSBwYXRjaA0KPiA+PiBsaXRlcmFsIDU4MzgNCj4gPj4NCj4gemNtZDZyP04xdj01WFNkJnJU en5tQCtGT3VLJnpAQlhkQjVHNk9oYkhlSV8oJnMpKlA/RVg2PkxEZEx9DQo+IFJgfX00WQ0KPiA+ PiB6X0ZpbSlCMnxoYF9UQkV5Jk9ZPFola0pMNHxFIzhHVS0NCj4gazhFYFgrVkxNWT5HNFhfaEFH RVBZSiNSSFVjc3taOThFDQo+ID4+DQo+IHoocHZnSHtpTFZlYlMjTyMoQEZaSXQ0S1RQVCNfZzFK Sip9SiMkTVBIQEFfKHcpNjBaKmUkQkJQc1o1KERIJQ0KPiBUTXUNCj4gPj4gekk4UnNsRlZlbm5n cipwfmxUUCpLUkAkJDFwR2w0cDZHSmpxJnM+Tm44ZWdPPi0NCj4gOU1TMFFee1NWc3J1P09LVVlz Xg0KPiA+PiB6bmhOITsrU3JjOGIzR05CMTA9e1gpN1VpNl4qbCkqXmJVSXFqWFQkeVJtc29IeH5a TyFKVC0NCj4gbGJATGJ5bnhOXktgDQo+ID4+IHpJbl5rYnlodH0xZG9KYit3SzU7az1Od09rJWxS QkUjTzNTPHd5Pml4JjR0Rm8tDQo+IHByV0dHOVQ8TVVXRXRuJSo1SDENCj4gPj4NCj4gelNxfjtH ZmdleXU4JEdhPFozYzFufDhydm1vIUVHKGV7YFk/Sk1oPH5kTUBPPmlDVyZuSlpOfkJufl9Hcg0K PiBKRyRJag0KPiA+Pg0KPiB6ZD4lN1JyRTh3bj88MjB6eVh5NSF0JXNPSCpNJnR8b2h4UHFDbChW TXB2MVBoWDJ3R3FeUlhmWHlPM3ANCj4gNkdvI01jDQo+ID4+IHoyWGRtPFMqcWZUPU52dTZnM3Ny O21lfiZ7OE81VGdAK2NsRHkxKSFtdnIyQnAleUVBVlEqUWE8Xy0NCj4gUWlie3ZMfXgNCj4gPj4N Cj4gekVZQzxFPThOblBNQWR0cE1jM3hwfE5ydDhuU181JUVYdH49OygwNnxrN093dlF5cF8mTUFt dUxBbDYoDQo+IEh4a1YtTg0KPiA+PiB6RVQ4RDxsZjFxdE9Da2ReZ1lEfCVkNkRhRztFRnJHLQ0K PiA0aXk/P1JxXztpaTExeXBrNnIoKzJmVkthbnBBQm9IPU52DQo+ID4+IHo8JmojZ252Q1I0KVo3 bWJhT2Y0LVcxNU4jbGtrY0xNK2F2ZlJhN0NiJDwtDQo+ICl4Nmw1KVJuflgkVFVLNFZUaz9XX0AN Cj4gPj4NCj4gemEzZnAxVmc8YHk9YXhtYGx+dU5wdzRkclh5MkF0ZVVNcmNgRDteYWhTSFVhVShE Y3pUWkVHenBDMEE8dysNCj4gZSpXOQ0KPiA+PiB6bHNjK2FKQHQ3MWZtLXxOamFyLVAtQmtaWmRh SGolQkd1S34xTjk2ZkBtaFVEXj0rJUtafUoxdi0NCj4gSTNvSmlSXyp2DQo+ID4+IHprbGpkIWRm TH1CdiMpNFk/IyNLT3lOYGVZb3x2emZlJUN4OERAfkctDQo+ICRuVURSdWUpUCZeYUMzO3dCRktJ bHBTZzUNCj4gPj4NCj4gek83MmlOY3okaVlqKUFEJEh7OXNpKW8qeUc0U2NNfFZRWU9oJkBHeWVv eTMrIz9NbGwpdnVAdl4+QiMwQyEjDQo+IFhzSg0KPiA+Pg0KPiB6ZnxWX3NhcXIlO0VuQGBeM2ZZ RD91JXMqT2VRVktzc05Nc35sXlRVNHlucU1tTzAlQDFDbEc5XitRDQo+IFFTR3s7P0EjDQo+ID4+ IHote14tDQo+IFFASCopRnkwVnB2SmkwR1NLP3Z2MHtCbUR6TlJEMERqeD14UlBSbmhvYFYqdn0/ Z3xHU2dLJHdfUzhzP3MNCj4gPj4gekBQWldDUW5vWGE4TjckKz0tDQo+IHRIdllgaXRPRHBIdkdP fXgxI0E2WkNxTjI1QjUyalU4UlBZdWJKJEJPMyotb2lSTw0KPiA+PiB6OzdvZj1sPEheeWlBUlRl Q2VqTWN6T1FSantsUEExMmJPaFJKKGNOYSFgN0VuTF9aT0JzOC0NCj4gSmAjU1p2XjlrPCRYDQo+ ID4+DQo+IHpjeCo4fmBpYzN7WT5aNVRkMmtHTDlnMTE3aypEbXkkPmJ4d0JWekQ8UzlBRVI8YTB6 WShwQkdqekpQPHdiO34NCj4gMGoNCj4gPj4NCj4gemF0NDYpTkhnPl9CbWJWeSNBJU1MJlY3OHE4 RmhuciQ8YkJVPTlZVV44N31vRWRDKEsqQWowb2QyRTU+LQ0KPiBzUldNWg0KPiA+Pg0KPiB6TmJs aG45KjhNZ1VPT1Y2cUJjPGwrKV9MbTdEdkBeek4pPXdnMEUpSGdefGNrPUReMXQjUmIoREJ5akYq DQo+IGhIa0ZgDQo+ID4+IHo7SHVZXzlCdEh9ZFl0REtgcytSJnR7Ty0NCj4gMXczPmNSUHdyYiFZ JWpAfmc7a2RHODViK3szeVYhdzZJeTM+cVBmeloNCj4gPj4gelh7OW9qVGBlbzVwTHNtMC1kaHxE KHxoeExVcGVxeis+O0JRUzQybnEkfmRtSWZ9ZCY1Q0pMVy1NSEx1LQ0KPiB1P3g3Pw0KPiA+PiB6 ZE9WaTI/O0Y8Q3gxeU9RTE51LQ0KPiBIMH1nOWE+fWFPOGR0b29+UVh9Mzt7KyVxeWBsO2lASFB4 KXdkU0JQYXVBeDMoDQo+ID4+IHo+Xm5mJUtFKTEmYTQwU34kKzQ/cFBzMUw1OEghVDV6KUV2cWBC SnZ6aWRJalBtcHxsNXtROFM+bHN6cmBRZHJgQQ0KPiA+Pg0KPiB6ZVBIWjtPc34/UGwwYjU5bEd+ RVJ4Mzg/bFgpRT87aSQqVFA0KGgwWGszbWpVSlQjWF8lP244X1gwZ2luPCgqfmgNCj4gPj4NCj4g enZEdGdGQDRTKGhJaSgrfm1HfEQrT1gwYnVKPyZeKyk+RG0wPTc2bmdiaFExOXJlSiVTKTxTK15v bzRzeEpKDQo+IG5tWQ0KPiA+PiB6R1k2JWBrVmdgZz9tJHVYcWE/NiV0b2N2bU9USVpRdlRKIXYx UkNhIUkwLQ0KPiBnayhJZCRAdWlEN0BpcW5EVGFJbzgrDQo+ID4+IHp5Vj4objdMc0BES0ZCPEZx TzdWLQ0KPiB4cHVAaU4zNkhUZEBnNzZpNlpifipPazdSdCpkZlQ3Ym9IbXlVdHA9O2k7SygNCj4g Pj4gem9eZy0NCj4gV0BGbk9YekVAbExzKnpFeEc1TzFuJDRFMGkzVmpgMWxhPXd+ZCpSdzZ0KSol IzhxSkFgYHV0ST0mZ1hheA0KPiA+PiB6fEZoRiRII2JuLWQhdEM7b2JrOWdzRSNhWlc3YHBkKk5D XkNeIUskd3Y2dC1ILW9eS1g1Jmd+ayg3cWJMLQ0KPiBBSCElDQo+ID4+IHoyQHF6RjYpaz5WcDJ9 dXdZa1ZkMUgpUD5vVEN2RFFmM3I5cnRDLQ0KPiBtRnZ5WH1zUjhQNmc3cV4qYXgpRnw4VUhydCUN Cj4gPj4gUUh5SjtiYGY2Tlg+RlFiWjl9KlRgMDAwMDANCj4gPj4NCj4gPj4gbGl0ZXJhbCAwDQo+ ID4+IEhjbVY/ZDAwMDAxDQo+ID4+DQo+ID4+IGRpZmYgLS1naXQgYS9QbGF0Zm9ybXMvTWFydmVs bC9NYXJ2ZWxsLmRlYw0KPiBiL1BsYXRmb3Jtcy9NYXJ2ZWxsL01hcnZlbGwuZGVjDQo+ID4+IGlu ZGV4IGU2M2FkZDQuLmY5ZDI2NjAgMTAwNjQ0DQo+ID4+IC0tLSBhL1BsYXRmb3Jtcy9NYXJ2ZWxs L01hcnZlbGwuZGVjDQo+ID4+ICsrKyBiL1BsYXRmb3Jtcy9NYXJ2ZWxsL01hcnZlbGwuZGVjDQo+ ID4+IEBAIC01NCw2ICs1NCw3IEBADQo+ID4+DQo+ID4+ICAgIGdTaGVsbEVlcHJvbUhpaUd1aWQg PSB7IDB4YjJmNGM3MTQsIDB4MTQ3ZiwgMHg0ZmY3LCB7IDB4ODIsIDB4MWIsIDB4Y2UsDQo+IDB4 N2IsIDB4OTEsIDB4N2YsIDB4NWYsIDB4MmYgfSB9DQo+ID4+ICAgIGdTaGVsbFNmSGlpR3VpZCA9 IHsgMHgwM2E2Nzc1NiwgMHg4Y2RlLCAweDQ2MzgsIHsgMHg4MiwgMHgzNCwgMHg0YSwgMHgwZiwN Cj4gMHg2ZCwgMHg1OCwgMHg4MSwgMHgzOSB9IH0NCj4gPj4gKyAgZ1NoZWxsRlVwZGF0ZUhpaUd1 aWQgPSB7IDB4OWI1ZDIxNzYsIDB4NTkwYSwgMHg0OWRiLCB7IDB4ODksIDB4NWQsDQo+IDB4NGEs IDB4NzAsIDB4ZmUsIDB4YWQsIDB4YmUsIDB4MjQgfSB9DQo+ID4+DQo+ID4+ICBbUGNkc0ZpeGVk QXRCdWlsZC5jb21tb25dDQo+ID4+ICAjTVBQDQo+ID4+IC0tDQo+ID4+IDEuOC4zLjENCj4gPj4N Cg==