From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by dpdk.org (Postfix) with ESMTP id 3781B44C3 for ; Mon, 11 Mar 2019 14:09:14 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga102.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 11 Mar 2019 06:09:13 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.58,467,1544515200"; d="scan'208";a="151233857" Received: from fmsmsx103.amr.corp.intel.com ([10.18.124.201]) by fmsmga004.fm.intel.com with ESMTP; 11 Mar 2019 06:09:12 -0700 Received: from fmsmsx102.amr.corp.intel.com (10.18.124.200) by FMSMSX103.amr.corp.intel.com (10.18.124.201) with Microsoft SMTP Server (TLS) id 14.3.408.0; Mon, 11 Mar 2019 06:09:12 -0700 Received: from shsmsx106.ccr.corp.intel.com (10.239.4.159) by FMSMSX102.amr.corp.intel.com (10.18.124.200) with Microsoft SMTP Server (TLS) id 14.3.408.0; Mon, 11 Mar 2019 06:09:12 -0700 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.74]) by SHSMSX106.ccr.corp.intel.com ([169.254.10.144]) with mapi id 14.03.0415.000; Mon, 11 Mar 2019 21:09:09 +0800 From: "Xu, Rosen" To: "Yigit, Ferruh" , "dev@dpdk.org" CC: "Zhang, Tianfei" , "Wei, Dan" , "Pei, Andy" , "Yang, Qiming" , "Wang, Haiyue" , "Chen, Santos" , "Zhang, Zhang" Thread-Topic: [PATCH v1 05/11] drivers/net/ipn3ke: add IPN3KE PMD driver Thread-Index: AQHU1BpfVDtHKaPF8kq6nCO9sJ65qqYDD23Q Date: Mon, 11 Mar 2019 13:09:08 +0000 Message-ID: <0E78D399C70DA940A335608C6ED296D73A5EC0F3@SHSMSX104.ccr.corp.intel.com> References: <1551338000-120348-1-git-send-email-rosen.xu@intel.com> <1551338000-120348-6-git-send-email-rosen.xu@intel.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiYjVmYWY5NTgtNzliMC00Mzk0LWFmM2YtMzAxYzMxN2YxNTg2IiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiYlFhWVI2MUFYYWw3TlpRSnNtRkxqaDZcL3dRclF0RXhrOFM5TXJ6QTFyUDRoOHhsUDh2YmxLMGk0aWNOSmpCUVwvIn0= x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.400.15 dlp-reaction: no-action x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v1 05/11] drivers/net/ipn3ke: add IPN3KE PMD driver X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 11 Mar 2019 13:09:15 -0000 SGksDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogWWlnaXQsIEZlcnJ1 aA0KPiBTZW50OiBXZWRuZXNkYXksIE1hcmNoIDA2LCAyMDE5IDIwOjQ0DQo+IFRvOiBYdSwgUm9z ZW4gPHJvc2VuLnh1QGludGVsLmNvbT47IGRldkBkcGRrLm9yZw0KPiBDYzogWmhhbmcsIFRpYW5m ZWkgPHRpYW5mZWkuemhhbmdAaW50ZWwuY29tPjsgV2VpLCBEYW4NCj4gPGRhbi53ZWlAaW50ZWwu Y29tPjsgUGVpLCBBbmR5IDxhbmR5LnBlaUBpbnRlbC5jb20+OyBZYW5nLCBRaW1pbmcNCj4gPHFp bWluZy55YW5nQGludGVsLmNvbT47IFdhbmcsIEhhaXl1ZSA8aGFpeXVlLndhbmdAaW50ZWwuY29t PjsgQ2hlbiwNCj4gU2FudG9zIDxzYW50b3MuY2hlbkBpbnRlbC5jb20+OyBaaGFuZywgWmhhbmcg PHpoYW5nLnpoYW5nQGludGVsLmNvbT4NCj4gU3ViamVjdDogUmU6IFtQQVRDSCB2MSAwNS8xMV0g ZHJpdmVycy9uZXQvaXBuM2tlOiBhZGQgSVBOM0tFIFBNRCBkcml2ZXINCj4gDQo+IE9uIDIvMjgv MjAxOSA3OjEzIEFNLCBSb3NlbiBYdSB3cm90ZToNCj4gPiBBZGQgSW50ZWwgRlBHQSBBY2NlbGVy YXRpb24gTklDIElQTjNLRSBQTUQgZHJpdmVyLg0KPiA+DQo+ID4gU2lnbmVkLW9mZi1ieTogUm9z ZW4gWHUgPHJvc2VuLnh1QGludGVsLmNvbT4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBBbmR5IFBlaSA8 YW5keS5wZWlAaW50ZWwuY29tPg0KPiA+IFNpZ25lZC1vZmYtYnk6IERhbiBXZWkgPGRhbi53ZWlA aW50ZWwuY29tPg0KPiA+IC0tLQ0KPiA+ICBkcml2ZXJzL25ldC9NYWtlZmlsZSAgICAgICAgICAg ICAgICAgICAgICAgICAgfCAgICAxICsNCj4gPiAgZHJpdmVycy9uZXQvaXBuM2tlL01ha2VmaWxl ICAgICAgICAgICAgICAgICAgIHwgICAzMyArDQo+ID4gIGRyaXZlcnMvbmV0L2lwbjNrZS9pcG4z a2VfZXRoZGV2LmMgICAgICAgICAgICB8ICA4MTQgKysrKysrKysrDQo+ID4gIGRyaXZlcnMvbmV0 L2lwbjNrZS9pcG4za2VfZXRoZGV2LmggICAgICAgICAgICB8ICA3NDIgKysrKysrKysrDQo+ID4g IGRyaXZlcnMvbmV0L2lwbjNrZS9pcG4za2VfZmxvdy5jICAgICAgICAgICAgICB8IDE0MDcgKysr KysrKysrKysrKysrKw0KPiA+ICBkcml2ZXJzL25ldC9pcG4za2UvaXBuM2tlX2Zsb3cuaCAgICAg ICAgICAgICAgfCAgMTA0ICsrDQo+ID4gIGRyaXZlcnMvbmV0L2lwbjNrZS9pcG4za2VfbG9ncy5o ICAgICAgICAgICAgICB8ICAgMzAgKw0KPiA+ICBkcml2ZXJzL25ldC9pcG4za2UvaXBuM2tlX3Jl cHJlc2VudG9yLmMgICAgICAgfCAgODkwICsrKysrKysrKysNCj4gPiAgZHJpdmVycy9uZXQvaXBu M2tlL2lwbjNrZV90bS5jICAgICAgICAgICAgICAgIHwgMjIxNw0KPiArKysrKysrKysrKysrKysr KysrKysrKysrDQo+ID4gIGRyaXZlcnMvbmV0L2lwbjNrZS9pcG4za2VfdG0uaCAgICAgICAgICAg ICAgICB8ICAxMzUgKysNCj4gPiAgZHJpdmVycy9uZXQvaXBuM2tlL21lc29uLmJ1aWxkICAgICAg ICAgICAgICAgIHwgICAgOSArDQo+ID4gIGRyaXZlcnMvbmV0L2lwbjNrZS9ydGVfcG1kX2lwbjNr ZV92ZXJzaW9uLm1hcCB8ICAgIDQgKw0KPiANCj4gQ2FuIHlvdSBwbGVhc2Ugc3BsaXQgdGhpcyBw YXRjaCBpbnRvIG11bHRpcGxlIHBhdGNoLCBhdCBsZWFzdCBJIHRoaW5rIGV0aGRldiwNCj4gZmxv dyBzdXBwb3J0IGFuZCB0bSBzdXBwb3J0IGNhbiBiZSBzZXBlcmF0ZWQuDQoNCkdvb2Qgc3VnZ2Vz dGlvbi4gSSB3aWxsIGFwcGx5IGl0IGluIHBhdGNoIHYyLg0KDQo+IDwuLi4+DQo+IA0KPiA+IEBA IC0zMiw2ICszMiw3IEBAIERJUlMtJChDT05GSUdfUlRFX0xJQlJURV9GTTEwS19QTUQpICs9IGZt MTBrDQo+ID4gIERJUlMtJChDT05GSUdfUlRFX0xJQlJURV9JNDBFX1BNRCkgKz0gaTQwZQ0KPiA+ ICBESVJTLSQoQ09ORklHX1JURV9MSUJSVEVfSUNFX1BNRCkgKz0gaWNlDQo+ID4gIERJUlMtJChD T05GSUdfUlRFX0xJQlJURV9JWEdCRV9QTUQpICs9IGl4Z2JlDQo+ID4gK0RJUlMtJChDT05GSUdf UlRFX0xJQlJURV9JUE4zS0VfUE1EKSArPSBpcG4za2UNCj4gDQo+IENhbiB5b3UgcGxlYXNlIGFk ZCBhbHBoYXRlY2FsbHkgc29ydGVkLCB5b3UgYXJlIGFsbW9zdCB0aGVyZSwgYnV0IG5vdCBxdWl0 ZSBKDQoNCk9rYXkuDQoNCj4gPC4uLj4NCj4gDQo+ID4gQEAgLTAsMCArMSwzMyBAQA0KPiA+ICsj IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UgIyBDb3B5cmlnaHQoYykgMjAx OSBJbnRlbA0KPiA+ICtDb3Jwb3JhdGlvbg0KPiA+ICsNCj4gPiAraW5jbHVkZSAkKFJURV9TREsp L21rL3J0ZS52YXJzLm1rDQo+ID4gKw0KPiA+ICsjDQo+ID4gKyMgbGlicmFyeSBuYW1lDQo+ID4g KyMNCj4gPiArTElCID0gbGlicnRlX3BtZF9pcG4za2UuYQ0KPiA+ICsNCj4gPiArQ0ZMQUdTICs9 IC1EQUxMT1dfRVhQRVJJTUVOVEFMX0FQSQ0KPiANCj4gQ2FuIHlvdSBwbGVhc2UgYWRkIHRoZSBl eHBlcmltZW5hdGFsIEFQSXMgY2FsbGVkIGZyb20gdGhpcyBQTUQgYXMNCj4gY29tbWVudHMgaGVy ZSwgdGhhdCBjYW4gaGVscCBhIGxvdCB0byB0cmFjZSB3aGVuIHRvIHJlbW92ZSB0aGUgZmxhZywg b3IgaXQgaXMNCj4gcmVhbGx5IHJlcXVpcmVkPw0KDQpPa2F5Lg0KDQo+ID4gK0NGTEFHUyArPSAt TzMNCj4gPiArI0NGTEFHUyArPSAkKFdFUlJPUl9GTEFHUykNCj4gPiArQ0ZMQUdTICs9IC1JJChS VEVfU0RLKS9kcml2ZXJzL2J1cy9pZnBnYSBDRkxBR1MgKz0NCj4gPiArLUkkKFJURV9TREspL2Ry aXZlcnMvcmF3L2lmcGdhX3Jhd2Rldg0KPiA+ICtMRExJQlMgKz0gLWxydGVfZWFsIC1scnRlX21i dWYgLWxydGVfbWVtcG9vbCAtbHJ0ZV9yaW5nIExETElCUyArPQ0KPiA+ICstbHJ0ZV9ldGhkZXYg LWxydGVfbmV0IC1scnRlX2t2YXJncyBMRExJQlMgKz0gLWxydGVfYnVzX3BjaSBMRExJQlMgKz0N Cj4gPiArLWxydGVfYnVzX3ZkZXYNCj4gDQo+IENhbiB5b3UgcGxlYXNlIGRvdWJsZSBjaGVjayBp ZiB5b3UgcmVhbGx5IGhhdmUgYSBkZXBlbmRlbmN5IHRvIGJvdGggcGNpIGFuZA0KPiB2ZGV2Pw0K DQpObyBkZXBlbmRlbmN5IHRvIHBjaSwgYnV0IHdlIG5lZWQgdmRldiB0byB0YWtlIHNvbWUgY29u ZmlndXJhdGlvbi4NCg0KPiBBbmQgZG9uJ3QgeW91IG5lZWQgYnVzX2lmcGdhID8NCg0KSXQgbmVl ZCwgSSB3aWxsIGFwcGx5IGl0IGluIHBhdGNoIHYyLg0KDQo+ID4gKw0KPiA+ICtFWFBPUlRfTUFQ IDo9IHJ0ZV9wbWRfaXBuM2tlX3ZlcnNpb24ubWFwDQo+ID4gKw0KPiA+ICtMSUJBQklWRVIgOj0g MQ0KPiA+ICsNCj4gPiArIw0KPiA+ICsjIGFsbCBzb3VyY2UgYXJlIHN0b3JlZCBpbiBTUkNTLXkN Cj4gPiArIw0KPiA+ICtTUkNTLXkgKz0gaXBuM2tlX2V0aGRldi5jDQo+IA0KPiBUaGV5IGFyZSBz YW1lIHRoaW5nLCBidXQgZm9yIGNvbnNpc3RlbmN5IGNhbiB5b3UgcGxlYXNlIHVzZToNCj4gU1JD LSQoQ09ORklHX1JURV9MSUJSVEVfSVBOM0tFX1BNRCkgKz0gaXBuM2tlX2V0aGRldi5jDQoNCk9r YXksIEkgd2lsbCBhcHBseSBpdCBpbiBwYXRjaCB2Mi4NCg0KPiA8Li4uPg0KPiANCj4gPiArc3Rh dGljIGNvbnN0IHN0cnVjdCBydGVfYWZ1X3V1aWQgYWZ1X3V1aWRfaXBuM2tlX21hcFtdID0gew0K PiA+ICsJeyBNQVBfVVVJRF8xMEdfTE9XLCAgTUFQX1VVSURfMTBHX0hJR0ggfSwNCj4gPiArCXsg SVBOM0tFX1VVSURfMTBHX0xPVywgSVBOM0tFX1VVSURfMTBHX0hJR0ggfSwNCj4gPiArCXsgSVBO M0tFX1VVSURfMjVHX0xPVywgSVBOM0tFX1VVSURfMjVHX0hJR0ggfSwNCj4gPiArCXsgMCwgMCAv KiBzZW50aW5lbCAqLyB9LA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IGlwbjNrZV9od19j YXAgaHdfY2FwOw0KPiANCj4gRG8geW91IG5lZWQgdGhpcyBmb3J3YXJkIGRlY2xlcmF0aW9uPyAi aXBuM2tlX2V0aGRldi5oIiBpcyBhbHJlYWR5IGluY2x1ZGVkLg0KDQpod19jYXAgaXMgb25seSB1 c2VkIGluIGlwbjNrZV9ldGhkZXYuYywgc28gSSB3aWxsIHJlbW92ZSB0aGUgZGVmaW5pdGlvbiBp biBpcG4za2VfZXRoZGV2LmgNCg0KPiA+ICsNCj4gPiArc3RhdGljIGludCBpcG4za2VfaW5kaXJl Y3RfcmVhZChzdHJ1Y3QgaXBuM2tlX2h3ICpodywNCj4gPiArCQkJCQkgdWludDMyX3QgKnJkX2Rh dGEsDQo+ID4gKwkJCQkJIHVpbnQzMl90IGFkZHIsDQo+ID4gKwkJCQkJIHVpbnQzMl90IG1hY19u dW0sDQo+ID4gKwkJCQkJIHVpbnQzMl90IGRldl9zZWwsDQo+ID4gKwkJCQkJIHVpbnQzMl90IGV0 aF93cmFwcGVyX3NlbCkNCj4gDQo+IEFjY29yZGluZyBvdXIgY29kaW5nIGNvbnZlbnRpb24sIGl0 IHNob3VsZCBiZSBsaWtlOg0KPiANCj4gc3RhdGljIGludA0KPiBpcG4za2VfaW5kaXJlY3RfcmVh ZChzdHJ1Y3QgaXBuM2tlX2h3ICpodywNCj4gCXVpbnQzMl90ICpyZF9kYXRhLCB1aW50MzJfdCBh ZGRyLCB1aW50MzJfdCBtYWNfbnVtLA0KPiAJdWludDMyX3QgZGV2X3NlbCwgdWludDMyX3QgZXRo X3dyYXBwZXJfc2VsKQ0KPiANCj4gU2luY2UgdGhpcyBpcyBhIG5ldyBmaWxlLCB3aHkgbm93IGZv bGxvdyB0aGUgcHJvamVjdCBjb2RpbmcgY29udmVudGlvbj8NCj4gaHR0cHM6Ly9kb2MuZHBkay5v cmcvZ3VpZGVzL2NvbnRyaWJ1dGluZy9jb2Rpbmdfc3R5bGUuaHRtbA0KDQpPa2F5LCBhYnNvbHV0 ZWx5IGZvbGxvdyBjb2RpbmcgY29udmVudGlvbi4NCiANCj4gDQo+IDwuLi4+DQo+IA0KPiA+ICtz dGF0aWMgaW50DQo+ID4gK2lwbjNrZV9od19pbml0X3Zibmcoc3RydWN0IHJ0ZV9hZnVfZGV2aWNl ICphZnVfZGV2LA0KPiA+ICsJc3RydWN0IGlwbjNrZV9odyAqaHcpDQo+ID4gK3sNCj4gPiArCXN0 cnVjdCBydGVfcmF3ZGV2ICpyYXdkZXY7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsJaW50IGk7DQo+ ID4gKwl1aW50MzJfdCB2YWw7DQo+ID4gKw0KPiA+ICsJcmF3ZGV2ICA9IGFmdV9kZXYtPnJhd2Rl djsNCj4gPiArDQo+ID4gKwlody0+YWZ1X2lkLnV1aWQudXVpZF9sb3cgPSBhZnVfZGV2LT5pZC51 dWlkLnV1aWRfbG93Ow0KPiA+ICsJaHctPmFmdV9pZC51dWlkLnV1aWRfaGlnaCA9IGFmdV9kZXYt PmlkLnV1aWQudXVpZF9oaWdoOw0KPiA+ICsJaHctPmFmdV9pZC5wb3J0ID0gYWZ1X2Rldi0+aWQu cG9ydDsNCj4gPiArCWh3LT5od19hZGRyID0gKHVpbnQ4X3QgKikoYWZ1X2Rldi0+bWVtX3Jlc291 cmNlWzBdLmFkZHIpOw0KPiA+ICsJaWYgKChhZnVfZGV2LT5pZC51dWlkLnV1aWRfbG93ID09IE1B UF9VVUlEXzEwR19MT1cpICYmDQo+ID4gKwkJKGFmdV9kZXYtPmlkLnV1aWQudXVpZF9oaWdoID09 IE1BUF9VVUlEXzEwR19ISUdIKSkgew0KPiA+ICsJCWh3LT5mX21hY19yZWFkID0gbWFwX2luZGly ZWN0X21hY19yZWFkOw0KPiA+ICsJCWh3LT5mX21hY193cml0ZSA9IG1hcF9pbmRpcmVjdF9tYWNf d3JpdGU7DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCWh3LT5mX21hY19yZWFkID0gaXBuM2tlX2lu ZGlyZWN0X21hY19yZWFkOw0KPiA+ICsJCWh3LT5mX21hY193cml0ZSA9IGlwbjNrZV9pbmRpcmVj dF9tYWNfd3JpdGU7DQo+ID4gKwl9DQo+ID4gKwlody0+cmF3ZGV2ID0gcmF3ZGV2Ow0KPiA+ICsJ cmF3ZGV2LT5kZXZfb3BzLT5hdHRyX2dldChyYXdkZXYsDQo+ID4gKwkJCQkicmV0aW1lcl9pbmZv IiwNCj4gPiArCQkJCSh1aW50NjRfdCAqKSZody0+cmV0aW1lcik7DQo+IA0KPiBXaGF0IGRvIHlv dSB0aGluayBjYXN0aW5nIHRvICJ1aW50cHRyX3QiIGluc3RlYWQgb2YgInVpbnQ2NF90ICoiID8N Cg0KVG8gZml4IGNvbXBpbGUgd2FybmluZyBhbmQgZm9sbG93IHRoZSBkZWZpbml0aW9uIG9mIGF0 dHJfZ2V0Og0KdHlwZWRlZiBpbnQgKCpyYXdkZXZfZ2V0X2F0dHJfdCkoc3RydWN0IHJ0ZV9yYXdk ZXYgKmRldiwNCgkJCQkgY29uc3QgY2hhciAqYXR0cl9uYW1lLA0KCQkJCSB1aW50NjRfdCAqYXR0 cl92YWx1ZSk7DQoNCj4gPC4uLj4NCj4gDQo+ID4gKwlyZXQgPSBydGVfZXRoX3N3aXRjaF9kb21h aW5fYWxsb2MoJmh3LT5zd2l0Y2hfZG9tYWluX2lkKTsNCj4gPiArCWlmIChyZXQpDQo+ID4gKwkJ SVBOM0tFX0FGVV9QTURfV0FSTigiZmFpbGVkIHRvIGFsbG9jYXRlIHN3aXRjaCBkb21haW4NCj4g Zm9yIGRldmljZSAlZCIsDQo+ID4gKwkJcmV0KTsNCj4gPiArDQo+ID4gKwlyZXQgPSBpcG4za2Vf aHdfdG1faW5pdChodyk7DQo+IA0KPiBmdW5jdGlvbiBpcyBkZWZpbmVkIGluIGFub3RoZXIgLmMg ZmlsZSwgbmVlZCB0byBkZWNsYXJlZCBmb3IgdGhlIHVzYWdlLA0KPiBvdGhlcndpc2UgY2F1c2lu ZyBidWlsZCB3YXJuaW5nOg0KDQpPa2F5LCBJIHdpbGwgZml4IGl0IGluIHBhdGNoIHYyLg0KIA0K PiAuLi4vZHJpdmVycy9uZXQvaXBuM2tlL2lwbjNrZV9ldGhkZXYuYzogSW4gZnVuY3Rpb24g4oCY aXBuM2tlX2h3X2luaXRfdmJuZ+KAmToNCj4gLi4uL2RyaXZlcnMvbmV0L2lwbjNrZS9pcG4za2Vf ZXRoZGV2LmM6NDQzOjg6IHdhcm5pbmc6IGltcGxpY2l0IGRlY2xhcmF0aW9uDQo+IG9mIGZ1bmN0 aW9uIOKAmGlwbjNrZV9od190bV9pbml04oCZOyBkaWQgeW91IG1lYW4g4oCYaXBuM2tlX2h3X2Nh cF9pbml04oCZPw0KPiBbLVdpbXBsaWNpdC1mdW5jdGlvbi1kZWNsYXJhdGlvbl0NCj4gICByZXQg PSBpcG4za2VfaHdfdG1faW5pdChodyk7DQo+ICAgICAgICAgXn5+fn5+fn5+fn5+fn5+fn4NCg0K SSB3aWxsIGZpeCBpdCBpbiBwYXRjaCB2Mi4NCiANCj4gPC4uLj4NCj4gDQo+ID4gKw0KPiA+ICtS VEVfSU5JVChpcG4za2VfYWZ1X2luaXRfbG9nKTsNCj4gPiArc3RhdGljIHZvaWQNCj4gPiAraXBu M2tlX2FmdV9pbml0X2xvZyh2b2lkKQ0KPiANCj4gQ2FuIGNvbWJpbmUgYm90aDoNCj4gUlRFX0lO SVQoaXBuM2tlX2FmdV9pbml0X2xvZykNCj4gew0KPiANCj4gDQo+IEp1c3QgZm9yIGNvbnNpc3Rl bmN5LCBjYW4geW91IG1vdmUgdGhpcyBmdW5jdGlvbiB0byB0aGUgYnV0dG9tIG9mIHRoZSBmaWxl Pw0KDQpPa2F5LCBJIHdpbGwgZml4IGl0IGluIHBhdGNoIHYyLg0KDQo+ID4gK3sNCj4gPiArCWlw bjNrZV9hZnVfbG9ndHlwZSA9IHJ0ZV9sb2dfcmVnaXN0ZXIoImRyaXZlci5hZnUuaXBuM2tlIik7 DQo+IA0KPiAicG1kLm5ldC5pcG4za2UiDQo+IA0KPiA8Li4uPg0KPiANCj4gPiArCQlpZiAoIWh3 KSB7DQo+ID4gKwkJCUlQTjNLRV9BRlVfUE1EX0xPRyhFUlIsDQo+ID4gKwkJCQkiZmFpbGVkIHRv IGFsbG9jYXRlIGhhcmR3YXJ0IGRhdGEiKTsNCj4gPiArCQkJCXJldHZhbCA9IC1FTk9NRU07DQo+ ID4gKwkJCQlyZXR1cm4gLUVOT01FTTsNCj4gDQo+IFRoZXJlIGlzIGFscmVhZHkgJ0lQTjNLRV9B RlVfUE1EX0VSUicgYW5kIHZhcmlhbnQgbWFjcm9zIGRlZmluZWQgaWYgeW91DQo+IHByZWZlciB0 byB1c2UuDQoNCkkgd2lsbCByZXBsYWNlIGl0IHdpdGggJ0lQTjNLRV9BRlVfUE1EX0VSUicuDQoN Cj4gPiArCQl9DQo+ID4gKwkJYWZ1X2Rldi0+c2hhcmVkLmRhdGEgPSBodzsNCj4gPiArDQo+ID4g KwkJcnRlX3NwaW5sb2NrX2luaXQoJmFmdV9kZXYtPnNoYXJlZC5sb2NrKTsNCj4gDQo+IEdldHRp bmcgZm9sbG93aW5nIHdhcm5pbmcgd2l0aCBjbGFuZyBbMV0sIHdvcnRoIGNoZWtjaW5nLCBpcyAn c3RydWN0DQo+IHJ0ZV9hZnVfZGV2aWNlJyByZWFsbHkgbmVlZHMgdG8gYmUgcGFja2VkPw0KDQpJ IHdpbGwgZml4IGNsYW5nIGNvbXBpbGUgd2FybmluZyBpbiBwYXRjaCB2Mi4NCg0KPiBbMV0NCj4g Li4uL2RwZGsvZHJpdmVycy9uZXQvaXBuM2tlL2lwbjNrZV9ldGhkZXYuYzo1MzY6MjI6IHdhcm5p bmc6IHRha2luZw0KPiBhZGRyZXNzIG9mIHBhY2tlZCBtZW1iZXIgJ3NoYXJlZCcgb2YgY2xhc3Mg b3Igc3RydWN0dXJlICdydGVfYWZ1X2RldmljZScNCj4gbWF5IHJlc3VsdCBpbiBhbiB1bmFsaWdu ZWQgcG9pbnRlciB2YWx1ZSBbLVdhZGRyZXNzLW9mLXBhY2sgZWQtbWVtYmVyXQ0KPiAgICAgICAg ICAgICAgICAgcnRlX3NwaW5sb2NrX2luaXQoJmFmdV9kZXYtPnNoYXJlZC5sb2NrKTsNCj4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBefn5+fn5+fn5+fn5+fn5+fn5+fg0KDQpJ IHdpbGwgZml4IGl0IGluIHBhdGNodjIuDQoNCj4gPiArCX0gZWxzZQ0KPiA+ICsJCWh3ID0gKHN0 cnVjdCBpcG4za2VfaHcgKilhZnVfZGV2LT5zaGFyZWQuZGF0YTsNCj4gPiArDQo+ID4gKyNpZiBJ UE4zS0VfSFdfQkFTRV9FTkFCTEUNCj4gPiArCXJldHZhbCA9IGlwbjNrZV9od19pbml0X2Jhc2Uo YWZ1X2RldiwgaHcpOw0KPiA+ICsJaWYgKHJldHZhbCkNCj4gPiArCQlyZXR1cm4gcmV0dmFsOw0K PiA+ICsjZW5kaWYNCj4gDQo+IElzIHRoaXMgbWFjcm8gZGVmaW5lZCBhbnl3aGVyZT8gSXQgbG9v a3MgbGlrZSBub3QsIHNvIGlzIGl0IHVzZWQgbGlrZSAiI2lmIDAiLCBpZiBzbw0KPiByZW1vdmVk IHRoZSBtYWNybyBhbmQgdGhlIHdyYXBwZWQgY29kZSBwbGVhc2UuDQoNClRoaXMgbWFjcm8gaXMg anVzdCBmb3IgZGVidWcgd2l0aCBvbGQgRlBHQSBiaXRzdHJlYW0sIHdpdGggbmV3ZXN0IGJpdHN0 cmVhbSB3ZSBkb24ndCBuZWVkIGl0Lg0KU28gSSB3aWxsIHJlbW92ZSBpdCBpbiBwYXRjaCB2Mi4N Cg0KPiA+ICsNCj4gPiArCXJldHZhbCA9IGlwbjNrZV9od19pbml0X3ZibmcoYWZ1X2RldiwgaHcp Ow0KPiA+ICsJaWYgKHJldHZhbCkNCj4gPiArCQlyZXR1cm4gcmV0dmFsOw0KPiA+ICsNCj4gPiAr CS8qIHByb2JlIHJlcHJlc2VudG9yIHBvcnRzICovDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgaHct PnBvcnRfbnVtOyBpKyspIHsNCj4gPiArCQlzdHJ1Y3QgaXBuM2tlX3Jwc3QgcnBzdCA9IHsNCj4g PiArCQkJLnBvcnRfaWQgPSBpLA0KPiA+ICsJCQkuc3dpdGNoX2RvbWFpbl9pZCA9IGh3LT5zd2l0 Y2hfZG9tYWluX2lkLA0KPiA+ICsJCQkuaHcgPSBodw0KPiA+ICsJCX07DQo+ID4gKw0KPiA+ICsJ CS8qIHJlcHJlc2VudG9yIHBvcnQgbmV0X2JkZl9wb3J0ICovDQo+ID4gKwkJc25wcmludGYobmFt ZSwgc2l6ZW9mKG5hbWUpLCAibmV0XyVzX3JlcHJlc2VudG9yXyVkIiwNCj4gPiArCQkJYWZ1X2Rl di0+ZGV2aWNlLm5hbWUsIGkpOw0KPiA+ICsNCj4gPiArCQlyZXR2YWwgPSBydGVfZXRoX2Rldl9j cmVhdGUoJmFmdV9kZXYtPmRldmljZSwgbmFtZSwNCj4gPiArCQkJc2l6ZW9mKHN0cnVjdCBpcG4z a2VfcnBzdCksIE5VTEwsIE5VTEwsDQo+ID4gKwkJCWlwbjNrZV9ycHN0X2luaXQsICZycHN0KTsN Cj4gDQo+IFNpbWlsYXIgYWxsaWdubWVudCB3YXJuaW5nIGFzIGFib3ZlOg0KPiANCj4gLi4uL2Rw ZGsvZHJpdmVycy9uZXQvaXBuM2tlL2lwbjNrZV9ldGhkZXYuYzo1NjI6MzI6IHdhcm5pbmc6IHRh a2luZw0KPiBhZGRyZXNzIG9mIHBhY2tlZCBtZW1iZXIgJ2RldmljZScgb2YgY2xhc3Mgb3Igc3Ry dWN0dXJlICdydGVfYWZ1X2RldmljZScgbWF5DQo+IHJlc3VsdCBpbiBhbiB1bmFsaWduZWQgcG9p bnRlciB2YWx1ZSBbLVdhZGRyZXNzLW9mLXBhYyQgZWQtbWVtYmVyXQ0KPiAgICAgICAgICAgICAg ICAgcmV0dmFsID0gcnRlX2V0aF9kZXZfY3JlYXRlKCZhZnVfZGV2LT5kZXZpY2UsIG5hbWUsDQo+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5+fn5+fn5+fn5+ fn5+fg0KDQpJIHdpbGwgZml4IGl0IGluIHBhdGNoIHYyLg0KDQo+IA0KPiA+ICsNCj4gPiArCQlp ZiAocmV0dmFsKQ0KPiA+ICsJCQlJUE4zS0VfQUZVX1BNRF9MT0coRVJSLCAiZmFpbGVkIHRvIGNy ZWF0ZQ0KPiBpcG4za2UgIg0KPiA+ICsJCQkJInJlcHJlc2VudG9yICVzLiIsIG5hbWUpOw0KPiAN Cj4gTm8gbmVlZCB0byBzcGxpdCB0aGUgbWVzc2FnZS4NCg0KT2theS4NCg0KPiA8Li4uPg0KPiAN Cj4gPiArCXJldCA9IHJ0ZV9ldGhfc3dpdGNoX2RvbWFpbl9mcmVlKGh3LT5zd2l0Y2hfZG9tYWlu X2lkKTsNCj4gPiArCWlmIChyZXQpDQo+ID4gKwkJSVBOM0tFX0FGVV9QTURfTE9HKFdBUk5JTkcs DQo+ID4gKwkJCQkJCQkiZmFpbGVkIHRvIGZyZWUgc3dpdGNoDQo+IGRvbWFpbjogJWQiLA0KPiA+ ICsJCQkJCQkJcmV0KTsNCj4gDQo+IFBsZWFzZSBmaXggdGhlIGluZGVudGF0aW9uLg0KDQpPa2F5 Lg0KDQo+ID4gKw0KPiA+ICsJLyogZmxvdyB1bmluaXQqLz4gKw0KPiA+ICsJaXBuM2tlX2h3X3Vu aW5pdChodyk7DQo+IA0KPiBJcyB0aGUgY29tbWVudCBmb3IgImh3X3VuaW5pdCIgPw0KDQpZZXMs IEkgd2lsbCBmaXggaXQgaW4gcGF0Y2ggdjIsIHRoYW5rcy4NCg0KPiA+ICsNCj4gPiArCXJldHVy biAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IHJ0ZV9hZnVfZHJpdmVyIGFm dV9pcG4za2VfZHJpdmVyID0gew0KPiA+ICsJLmlkX3RhYmxlID0gYWZ1X3V1aWRfaXBuM2tlX21h cCwNCj4gPiArCS5wcm9iZSA9IGlwbjNrZV92c3dpdGNoX3Byb2JlLA0KPiA+ICsJLnJlbW92ZSA9 IGlwbjNrZV92c3dpdGNoX3JlbW92ZSwNCj4gPiArfTsNCj4gPiArDQo+ID4gK1JURV9QTURfUkVH SVNURVJfQUZVKG5ldF9pcG4za2VfYWZ1LCBhZnVfaXBuM2tlX2RyaXZlcik7DQo+IA0KPiBTbyB0 aGlzIGZpbGUgaXMgaGFzIHR3byBkcml2ZXJzLCBvbmUgdmRldiBkcml2ZXIgYW5kIG9uZSBhZnUg ZHJpdmVyLg0KPiBJcyB2ZGV2IG9uZSBvbmx5IHRvIGdldCB0aGUgZGV2aWNlIGFyZ3VtZW50cz8g SWYgc28gd2h5IG5vdCBnZXQgZGV2aWNlDQoNClllcw0KDQo+IGFyZ3VtZW50cyBkaXJlY3RseSB0 byBhZnUgZHJpdmVyIGFuZCByZW1vdmUgdGhlIHZkZXYgZGV2aWNlL2RyaXZlcj8NCg0KU29tZSBz cGVjaWFsIGFyZ3VtZW50cyBmb3IgSVBOM0tFIG5lZWQgdG8gdXNlIHRoZSB2ZGV2IHRvIHRha2Ug Y29uZmlndXJhdGlvbi4NClNvIHdlIGNhbid0IG1lcmdlIHRoZSBuZXcgY29uZmlndXJhdGlvbiB2 ZGV2IHRvIGFmdSBhZnUgZHJpdmVyLg0KIA0KPiBBbmQgc2luY2UgdGhpcyBpcyBhbiBBRlUgZHJp dmVyLCBzaG91bGQgd2UgaGF2ZSBhIGRyaXZlcnMvaWZwZ2EvKiBmb2xkZXIgYW5kDQo+IHB1dCB0 aGVzZSBkcml2ZXJzIGluIGl0PyBXaGF0IGRvIHlvdSB0aGluaz8NCg0KRnJvbSBmdW5jdGlvbiBw b2ludCBvZiB2aWV3LCBpdCdzIGEgTklDIGRyaXZlciwgc28gd2UgcHV0IGl0IGluIG5ldCBkcml2 ZXJzIGZvbGRlci4NCiANCj4gPiArUlRFX1BNRF9SRUdJU1RFUl9BRlVfQUxJQVMobmV0X2lwbjNr ZV9hZnUsIGFmdV9kZXYpOw0KPiANCj4gSXNuJ3QgJ2FmdV9kZXYnIHNvIGdlbmVyZWljIGZvciBi ZWluZyBhbGlhcz8NCg0KTm8sIEkgd2lsbCByZW1vdmUgaXQgaW4gcGF0Y2ggdjIuIFRoYW5rcy4N Cg0KPiBBbHNvIGFyZSB5b3UgdGFraW5nICdhbGlhcycgZmllbGQgaW50byBhY2NvdW50PyBJIGNo ZWNrZWQgdGhlIGlmcGdhIGJ1cyBjb2RlIGJ1dA0KPiBub3QgYWJsZSB0byBmaW5kLCBjYW4geW91 IHBsZWFzZSBkb3VibGUgY2hlY2s/IERpZCB5b3UgdGVzdCB0aGlzIGFsaWFzPw0KDQpUaGlzIGFs aWFzIGlzIG5vIHVzZWZ1bCwgSSB3aWxsIHJlbW92ZSBpdCBpbiBwYXRjaCB2Mi4gVGhhbmtzLg0K DQo+ID4gK1JURV9QTURfUkVHSVNURVJfUEFSQU1fU1RSSU5HKG5ldF9pcG4za2VfYWZ1LA0KPiA+ ICsJImJkZj08c3RyaW5nPiAiDQo+ID4gKwkicG9ydD08aW50PiAiDQo+ID4gKwkidXVkaV9oaWdo PTxpbnQ2ND4gIg0KPiA+ICsJInV1aWRfbG93PTxpbnQ2ND4gIg0KPiA+ICsJInBhdGg9PHN0cmlu Zz4gIg0KPiA+ICsJInByX2VuYWJsZT08aW50PiINCj4gPiArCSJkZWJ1Zz08aW50PiIpOw0KDQpO byB1c2VmdWwsIEkgd2lsbCByZW1vdmUgaXQgaW4gcGF0Y2ggdjIuIFRoYW5rcy4NCiANCj4gQXJl IHRoZXNlIHRoZSBuZXQgZHJpdmVyIGRldmljZSBhcmd1bWVudHM/IFdoZXJlIHRoZXkgYXJlDQo+ IGRlZmluZWQvcGFyc2VkL3VzZWQ/DQoNCk5vIHVzZWZ1bCwgSSB3aWxsIHJlbW92ZSBpdCBpbiBw YXRjaCB2Mi4gVGhhbmtzLg0KDQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0 IHZhbGlkX2FyZ3NbXSA9IHsNCj4gPiArI2RlZmluZSBJUE4zS0VfQUZVX05BTUUgICAgICAgICAi YWZ1Ig0KPiA+ICsJCUlQTjNLRV9BRlVfTkFNRSwNCj4gPiArI2RlZmluZSBJUE4zS0VfRlBHQV9B Q0NFTEVSQVRJT05fTElTVCAgICAgImZwZ2FfYWNjIg0KPiA+ICsJCUlQTjNLRV9GUEdBX0FDQ0VM RVJBVElPTl9MSVNULA0KPiA+ICsjZGVmaW5lIElQTjNLRV9JNDBFX1BGX0xJU1QgICAgICJpNDBl X3BmIg0KPiA+ICsJCUlQTjNLRV9JNDBFX1BGX0xJU1QsDQo+ID4gKwkJTlVMTA0KPiA+ICt9Ow0K PiA+ICtzdGF0aWMgaW50DQo+ID4gK2lwbjNrZV9jZmdfcGFyc2VfYWNjX2xpc3QoY29uc3QgY2hh ciAqYWZ1X25hbWUsIGNvbnN0IGNoYXINCj4gPiArKmFjY19saXN0X25hbWUpDQo+IA0KPiBQbGVh c2UgZml4IHRoZSBpbmRlbnRhdGlvbi4NCg0KT2theS4NCg0KPiA8Li4uPg0KPiANCj4gPiArCWlm IChydGVfa3ZhcmdzX2NvdW50KGt2bGlzdCwgSVBOM0tFX0ZQR0FfQUNDRUxFUkFUSU9OX0xJU1Qp ID09IDEpDQo+IHsNCj4gPiArCQlpZiAocnRlX2t2YXJnc19wcm9jZXNzKGt2bGlzdCwNCj4gSVBO M0tFX0ZQR0FfQUNDRUxFUkFUSU9OX0xJU1QsDQo+ID4gKwkJCQkgICAgICAgJnJ0ZV9pZnBnYV9n ZXRfc3RyaW5nX2FyZywNCj4gPiArCQkJCSAgICAgICAmYWNjX25hbWUpIDwgMCkgew0KPiA+ICsJ CQlJUE4zS0VfQUZVX1BNRF9FUlIoImVycm9yIHRvIHBhcnNlICVzIiwNCj4gPiArCQkJCSAgICAg SVBOM0tFX0ZQR0FfQUNDRUxFUkFUSU9OX0xJU1QpOw0KPiA+ICsJCQlnb3RvIGVuZDsNCj4gPiAr CQl9DQo+ID4gKwkJcmV0ID0gaXBuM2tlX2NmZ19wYXJzZV9hY2NfbGlzdChhZnVfbmFtZSwgYWNj X25hbWUpOw0KPiA+ICsJCWlmIChyZXQpDQo+ID4gKwkJCWdvdG8gZW5kOw0KPiA+ICsJfSBlbHNl IHsNCj4gPiArCQlJUE4zS0VfQUZVX1BNRF9JTkZPKCJhcmcgJXMgaXMgb3B0aW9uYWwgZm9yIGlw bjNrZSwgdXNpbmcNCj4gaTQwZSBhY2MiLA0KPiA+ICsJCQkgIElQTjNLRV9GUEdBX0FDQ0VMRVJB VElPTl9MSVNUKTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZiAocnRlX2t2YXJnc19jb3VudChr dmxpc3QsIElQTjNLRV9JNDBFX1BGX0xJU1QpID09IDEpIHsNCj4gPiArCQlpZiAocnRlX2t2YXJn c19wcm9jZXNzKGt2bGlzdCwgSVBOM0tFX0k0MEVfUEZfTElTVCwNCj4gPiArCQkJCSAgICAgICAm cnRlX2lmcGdhX2dldF9zdHJpbmdfYXJnLA0KPiA+ICsJCQkJICAgICAgICZwZl9uYW1lKSA8IDAp IHsNCj4gPiArCQkJSVBOM0tFX0FGVV9QTURfRVJSKCJlcnJvciB0byBwYXJzZSAlcyIsDQo+ID4g KwkJCQkgICAgIElQTjNLRV9JNDBFX1BGX0xJU1QpOw0KPiA+ICsJCQlnb3RvIGVuZDsNCj4gPiAr CQl9DQo+ID4gKwkJcmV0ID0gaXBuM2tlX2NmZ19wYXJzZV9pNDBlX3BmX2V0aGRldihhZnVfbmFt ZSwNCj4gcGZfbmFtZSk7DQo+IA0KPiBZb3Ugc2hvdWxkbid0IHJlbHkgb24gdG8gdGhlIG9yZGVy IG9mIHRoZSBkZXZhcmdzLCB3aGF0IGlmICdhZnVfbmFtZScgaXMgbm90DQo+IHByb3ZpZGVkIHll dCB3aGVuICdwZl9uYW1lJyBhcmcgaXMgcHJvdmlkZWQ/DQoNClllcywgSSB3aWxsIGZpeCBvcmRl ciBkZXBlbmRlbmN5IGluIHBhdGNoIHYyLiBCdXQgYWZ1X25hbWUgYW5kIHBmX25hbWUgYXJlIG1h bmRhdG9yeS4NCg0KPiBTYW1lIGNvbmNlcm4gZm9yIGFib3ZlICdpcG4za2VfY2ZnX3BhcnNlX2Fj Y19saXN0KCknLiBJdCBpcyBiZXR0ZXIgdG8gZ2V0IGFsbA0KPiB0aGUgYXJncyBmaXJzdCwgbGF0 ZXIgY2FsbCB0aGUgcHJvcGVyIEFQSXMuDQoNCkdvb2Qgc3VnZ2VzdGlvbiwgSSB3aWxsIGFwcGx5 IGl0IGluIHBhdGNoIHYyLg0KDQo+IDwuLi4+DQo+IA0KPiA+ICtzdGF0aWMgaW50DQo+ID4gK2lw bjNrZV9jZmdfcmVtb3ZlKHN0cnVjdCBydGVfdmRldl9kZXZpY2UgKnZkZXYpIHsNCj4gPiArCUlQ TjNLRV9BRlVfUE1EX0lORk8oIlJlbW92ZSBpcG4za2VfY2ZnICVwIiwNCj4gPiArCQl2ZGV2KTsN Cj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gDQo+IE5vdGhpbmcgdG8gYmUgZG9uZSBmb3IgcmVt b3ZlPw0KDQpJIG1pc3MgdW5iaW5kaW5nIEk0MGUgYW5kIEZQR0EgcG9ydCBtYXBwaW5nLiBJIHdp bGwgZml4IGl0IGluIHBhdGNoIHYyLg0KIA0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3Ry dWN0IHJ0ZV92ZGV2X2RyaXZlciBpcG4za2VfY2ZnX2RyaXZlciA9IHsNCj4gPiArCS5wcm9iZSA9 IGlwbjNrZV9jZmdfcHJvYmUsDQo+ID4gKwkucmVtb3ZlID0gaXBuM2tlX2NmZ19yZW1vdmUsDQo+ ID4gK307DQo+ID4gKw0KPiA+ICtSVEVfUE1EX1JFR0lTVEVSX1ZERVYoaXBuM2tlX2NmZywgaXBu M2tlX2NmZ19kcml2ZXIpOw0KPiA+ICtSVEVfUE1EX1JFR0lTVEVSX0FMSUFTKGlwbjNrZV9jZmcs IGlwbjNrZV9jZmcpOw0KPiA+ICtSVEVfUE1EX1JFR0lTVEVSX1BBUkFNX1NUUklORyhpcG4za2Vf Y2ZnLA0KPiA+ICsJImFmdT08c3RyaW5nPiAiDQo+ID4gKwkiZnBnYV9hY2M9PHN0cmluZz4iDQo+ ID4gKwkiaTQwZT08c3RyaW5nPiIpOw0KPiANCj4gSXNuJ3QgdGhpcyAiaTQwZV9wZiIsIHVzaW5n IGRlZmluZWQgbWFjcm9zIGNhbiBwcmV2ZW50IG1pc3Rha2VzLg0KDQpPa2F5LCBJIHdpbGwgZml4 IGl0IGluIHBhdGNoIHYyLg0KDQo+IDwuLi4+DQo+IA0KPiA+ICtzdGF0aWMgaW5saW5lIHVpbnQz Ml90IF9pcG4za2VfaW5kcmN0X3JlYWQoc3RydWN0IGlwbjNrZV9odyAqaHcsDQo+ID4gKwkJdWlu dDMyX3QgYWRkcikNCj4gPiArew0KPiA+ICsJdWludDY0X3Qgd29yZF9vZmZzZXQgPSAwOw0KPiA+ ICsJdWludDY0X3QgcmVhZF9kYXRhID0gMDsNCj4gPiArCXVpbnQ2NF90IGluZGlyZWN0X3ZhbHVl ID0gMDsNCj4gPiArCXZvbGF0aWxlIHZvaWQgKmluZGlyZWN0X2FkZHJzID0gMDsNCj4gPiArDQo+ ID4gKwl3b3JkX29mZnNldCA9IChhZGRyICYgMHgxRkZGRkZGKSA+PiAyOw0KPiA+ICsJaW5kaXJl Y3RfdmFsdWUgPSBSQ01EIHwgd29yZF9vZmZzZXQgPDwgMzI7DQo+ID4gKwlpbmRpcmVjdF9hZGRy cyA9ICh2b2xhdGlsZSB2b2lkICopKGh3LT5od19hZGRyICsNCj4gPiArCQkJCQkJKHVpbnQzMl90 KShVUExfQkFTRSB8IDB4MTApKTsNCj4gPiArDQo+ID4gKwl1c2xlZXAoMTApOw0KPiANCj4gUmVx dWlyZWQgaGVhZCBmb3IgdXNsZWVwIHNlZW1zIG5vdCBpbmNsdWRlZCwgY2F1c2luZyBidWlsZCB3 YXJuaW5nOg0KPiANCj4gSW4gZmlsZSBpbmNsdWRlZCBmcm9tIC4uLi9kcml2ZXJzL25ldC9pcG4z a2UvaXBuM2tlX3JlcHJlc2VudG9yLmM6Mjc6DQo+IC4uLi9kcml2ZXJzL25ldC9pcG4za2UvaXBu M2tlX2V0aGRldi5oOiBJbiBmdW5jdGlvbiDigJhfaXBuM2tlX2luZHJjdF9yZWFk4oCZOg0KPiAu Li4vZHJpdmVycy9uZXQvaXBuM2tlL2lwbjNrZV9ldGhkZXYuaDoyMjA6Mjogd2FybmluZzogaW1w bGljaXQgZGVjbGFyYXRpb24NCj4gb2YgZnVuY3Rpb24g4oCYdXNsZWVw4oCZOyBkaWQgeW91IG1l YW4g4oCYZnNlZWvigJk/IFstV2ltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uXQ0KPiAgIHVz bGVlcCgxMCk7DQo+ICAgXn5+fn5+DQoNCkkgd2lsbCBmaXggaXQgaW4gcGF0Y2ggdjIuDQoNCj4g U2FtZSB3YXJuaW5nIGZvciBhbGwgb2NjdXJhbmNlcy4NCg0KQXBwbHkgaW4gcGF0Y2ggdjIuDQoN Cj4gPC4uLj4NCj4gDQo+ID4gK3N0YXRpYyBpbnQNCj4gPiAraXBuM2tlX2Zsb3dfaHdfdXBkYXRl KHN0cnVjdCBpcG4za2VfaHcgKmh3LA0KPiA+ICsJCQlzdHJ1Y3QgcnRlX2Zsb3cgKmZsb3csIHVp bnQzMl90IGlzX2FkZCkgew0KPiA+ICsJdWludDMyX3QgKnBkYXRhID0gTlVMTDsNCj4gPiArCXVp bnQzMl90IGRhdGE7DQo+ID4gKwl1aW50MzJfdCB0aW1lX291dCA9IE1ITF9DT01NQU5EX1RJTUVf Q09VTlQ7DQo+ID4gKw0KPiA+ICsjaWZkZWYgREVCVUdfSVBOM0tFX0ZMT1cNCj4gDQo+IEluIG1h bnkgcGxhY2VzIGluIHRoaXMgcGF0Y2hzZXQsIHRoZXJlIGFyZSBkZWZpbmUgd2hpY2ggYXJlIG5v dCBwYXJ0IG9mIFBNRA0KPiBjb25maWd1cmF0aW9uLiBTbyBtb3N0IHByb2JhYmx5IG5lZWQgdG8g ZW5hYmxlL2Rpc2FibGUgdGhlbSBtYW51YWxseSBpbg0KPiB0aGUgY29kZS4gVGhpcyBhcHByb2Fj aCBpcyB2ZXJ5IG9wZW4gdGhlIGVycm9ycy4gVGhlIGNvZGUgaW4gdGhlIGlmZGVmIGJsb2NrIGlz DQo+IGVzY2FwZWQgZnJvbSBhbGwgY29tcGlsZXJzLCB3aGVuIHNvbWVvbmUgbmVlZHMgaXQsIGl0 IGlzIGNvbW1vbiB0aGF0IHRoZXkNCj4gZXZlbiBkb24ndCBjb21waWxlIGFuZCB3b3JrLg0KPiAN Cj4gSSBzdWdnZXN0IHJlbW92aW5nIHRoZW0gYWxsLg0KDQpPa2F5LCBhcHBseSBpbiBwYXRjaCB2 Mi4NCg0KPiBJZiBhIGRlZmluZSBpcyByZWFsbHkgbmVjZXNzYXJ5IGFkZCBpdCBhcyBQTUQgY29u ZmlnIG9wdGlvbi4NCg0KT2theS4NCg0KPiA+ICsJdWludDMyX3QgaTsNCj4gPiArDQo+ID4gKwlw cmludGYoIklQTjNLRSBmbG93IGR1bXBcbiIpOw0KPiA+ICsNCj4gPiArCXBkYXRhID0gKHVpbnQz Ml90ICopZmxvdy0+cnVsZS5rZXk7DQo+ID4gKwlwcmludGYoIiAtIGtleSAgIDoiKTsNCj4gPiAr DQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgUlRFX0RJTShmbG93LT5ydWxlLmtleSk7IGkrKykNCj4g PiArCQlwcmludGYoIiAlMDJ4IiwgZmxvdy0+cnVsZS5rZXlbaV0pOw0KPiA+ICsNCj4gPiArCWZv ciAoaSA9IDA7IGkgPCA0OyBpKyspDQo+ID4gKwkJcHJpbnRmKCIgJTAyeCIsIF9fU1dBUDMyKHBk YXRhWzMgLSBpXSkpOw0KPiA+ICsJcHJpbnRmKCJcbiIpOw0KPiA+ICsNCj4gPiArCXBkYXRhID0g KHVpbnQzMl90ICopZmxvdy0+cnVsZS5yZXN1bHQ7DQo+ID4gKwlwcmludGYoIiAtIHJlc3VsdDoi KTsNCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgUlRFX0RJTShmbG93LT5ydWxlLnJlc3Vs dCk7IGkrKykNCj4gPiArCQlwcmludGYoIiAlMDJ4IiwgZmxvdy0+cnVsZS5yZXN1bHRbaV0pOw0K PiA+ICsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCAxOyBpKyspDQo+ID4gKwkJcHJpbnRmKCIgJTAy eCIsIHBkYXRhW2ldKTsNCj4gPiArCXByaW50ZigiXG4iKTsNCj4gPiArI2VuZGlmDQo+ID4gKw0K PiA+ICsJcGRhdGEgPSAodWludDMyX3QgKilmbG93LT5ydWxlLmtleTsNCj4gPiArDQo+ID4gKwlJ UE4zS0VfTUFTS19XUklURV9SRUcoaHcsDQo+ID4gKwkJCUlQTjNLRV9DTEZfTUhMX0tFWV8wLA0K PiA+ICsJCQkwLA0KPiA+ICsJCQlfX1NXQVAzMihwZGF0YVszXSksDQo+ID4gKwkJCUlQTjNLRV9D TEZfTUhMX0tFWV9NQVNLKTsNCj4gPiArDQo+ID4gKwlJUE4zS0VfTUFTS19XUklURV9SRUcoaHcs DQo+ID4gKwkJCUlQTjNLRV9DTEZfTUhMX0tFWV8xLA0KPiA+ICsJCQkwLA0KPiA+ICsJCQlfX1NX QVAzMihwZGF0YVsyXSksDQo+ID4gKwkJCUlQTjNLRV9DTEZfTUhMX0tFWV9NQVNLKTsNCj4gPiAr DQo+ID4gKwlJUE4zS0VfTUFTS19XUklURV9SRUcoaHcsDQo+ID4gKwkJCUlQTjNLRV9DTEZfTUhM X0tFWV8yLA0KPiA+ICsJCQkwLA0KPiA+ICsJCQlfX1NXQVAzMihwZGF0YVsxXSksDQo+ID4gKwkJ CUlQTjNLRV9DTEZfTUhMX0tFWV9NQVNLKTsNCj4gPiArDQo+ID4gKwlJUE4zS0VfTUFTS19XUklU RV9SRUcoaHcsDQo+ID4gKwkJCUlQTjNLRV9DTEZfTUhMX0tFWV8zLA0KPiA+ICsJCQkwLA0KPiA+ ICsJCQlfX1NXQVAzMihwZGF0YVswXSksDQo+ID4gKwkJCUlQTjNLRV9DTEZfTUhMX0tFWV9NQVNL KTsNCj4gPiArDQo+ID4gKwlwZGF0YSA9ICh1aW50MzJfdCAqKWZsb3ctPnJ1bGUucmVzdWx0Ow0K PiA+ICsJSVBOM0tFX01BU0tfV1JJVEVfUkVHKGh3LA0KPiA+ICsJCQlJUE4zS0VfQ0xGX01ITF9S RVMsDQo+ID4gKwkJCTAsDQo+ID4gKwkJCV9fU1dBUDMyKHBkYXRhWzBdKSwNCj4gPiArCQkJSVBO M0tFX0NMRl9NSExfUkVTX01BU0spOw0KPiA+ICsNCj4gPiArCS8qIGluc2VydC9kZWxldGUgdGhl IGtleSBhbmQgcmVzdWx0ICovDQo+ID4gKwlkYXRhID0gMDsNCj4gPiArCWRhdGEgPSBJUE4zS0Vf TUFTS19SRUFEX1JFRyhodywNCj4gPiArCQkJCUlQTjNLRV9DTEZfTUhMX01HTVRfQ1RSTCwNCj4g PiArCQkJCTAsDQo+ID4gKwkJCQkweDgwMDAwMDAwKTsNCj4gPiArCXRpbWVfb3V0ID0gTUhMX0NP TU1BTkRfVElNRV9DT1VOVDsNCj4gPiArCXdoaWxlIChJUE4zS0VfQklUX0lTU0VUKGRhdGEsDQo+ IElQTjNLRV9DTEZfTUhMX01HTVRfQ1RSTF9CSVRfQlVTWSkgJiYNCj4gPiArCQkodGltZV9vdXQg PiAwKSkgew0KPiA+ICsJCWRhdGEgPSBJUE4zS0VfTUFTS19SRUFEX1JFRyhodywNCj4gPiArCQkJ CQlJUE4zS0VfQ0xGX01ITF9NR01UX0NUUkwsDQo+ID4gKwkJCQkJMCwNCj4gPiArCQkJCQkweDgw MDAwMDAwKTsNCj4gPiArCQl0aW1lX291dC0tOw0KPiA+ICsJCXJ0ZV9kZWxheV91cyhNSExfQ09N TUFORF9USU1FX0lOVEVSVkFMX1VTKTsNCj4gDQo+IA0KPiBUaGlzIGlzIGdpdmluZyBtaXNzaW5n IGRlY2xlcmF0aW9uIHdhcm5pbmcgZm9yIGNyb3NzIGNvbXBpbGUgWzFdLCBtb3N0IHByb2JhYmx5 DQo+IGEgaGVkZXIgaXMgbWlzc2luZy4NCg0KSSB3aWxsIGFwcGx5IGl0IGluIHBhdGNoIHYyLg0K DQo+IFsxXQ0KPiAuLi4vZHJpdmVycy9uZXQvaXBuM2tlL2lwbjNrZV9mbG93LmM6MTA4NDozOiB3 YXJuaW5nOiBpbXBsaWNpdCBkZWNsYXJhdGlvbiBvZg0KPiBmdW5jdGlvbiDigJhydGVfZGVsYXlf dXPigJk7IGRpZCB5b3UgbWVhbiDigJhydGVfcmVhbGxvY+KAmT8NCj4gWy1XaW1wbGljaXQtZnVu Y3Rpb24tZGVjbGFyYXRpb25dDQo+ICAgIHJ0ZV9kZWxheV91cyhNSExfQ09NTUFORF9USU1FX0lO VEVSVkFMX1VTKTsNCj4gICAgXn5+fn5+fn5+fn5+DQoNCkZpeCBpbiBwYXRjaCB2Mi4NCg0KPiA8 Li4uPg0KPiANCj4gPiArc3RhdGljIGludA0KPiA+ICtpcG4za2VfcmV0aW1lcl9jb25mX2xpbmso c3RydWN0IHJ0ZV9yYXdkZXYgKnJhd2RldiwNCj4gPiArCQkJCXVpbnQxNl90IHBvcnQsDQo+ID4g KwkJCQl1aW50OF90IGZvcmNlX3NwZWVkLA0KPiA+ICsJCQkJYm9vbCBpc191cCkNCj4gPiArew0K PiA+ICsJc3RydWN0IGlmcGdhX3Jhd2RldmdfbGlua19pbmZvIGxpbmZvOw0KPiA+ICsNCj4gPiAr CWxpbmZvLnBvcnQgPSBwb3J0Ow0KPiA+ICsJbGluZm8ubGlua191cCA9IGlzX3VwOw0KPiA+ICsJ bGluZm8ubGlua19zcGVlZCA9IGZvcmNlX3NwZWVkOw0KPiA+ICsNCj4gPiArCXJldHVybiByYXdk ZXYtPmRldl9vcHMtPmF0dHJfc2V0KHJhd2RldiwNCj4gPiArCQkJCQkicmV0aW1lcl9saW5rc3Rh dHVzIiwNCj4gPiArCQkJCQkodWludDY0X3QpJmxpbmZvKTsNCj4gDQo+IFlvdSBhcmUgc2F2aW5n IHRoZSBwb2ludGVyIG9mIGEgbG9jYWwgdmFyaWFibGUgY29udmVydGluZyBpdCB0byB1aW50NjRf dC4NCj4gDQo+IENhbiB5b3UgcGxlYXNlIGVsYWJvcmF0ZSB3aHkgbGluayBpbmZvIG5lZWRzIHRv IHNhdmVkIGFzIGF0dHJpYnV0ZT8gQW5kDQo+IHdoZW4gaXQgaXMgcmV0cmlldmVkIGJhY2sgd2ls bCB0aGUgbWVtb3J5IGJlIHN0aWxsIHZhbGlkPw0KDQpJIGFncmVlIHdpdGggeW91LCBpdCdzIG5v dCBzdWl0YWJsZSB0byBzYXZlIHRoZSBwb2ludGVyIG9mIGEgbG9jYWwgdmFyaWFibGUgY29udmVy dGluZyBpdCB0byB1aW5nNjRfdC4NClRoaXMgY29kZSBpcyBqdXN0IGZvciB0ZXN0LCBJIHdpbGwg cmVtb3ZlIGl0LiBUaGFua3MuDQoNCj4gDQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lk DQo+ID4gK2lwbjNrZV91cGRhdGVfbGluayhzdHJ1Y3QgcnRlX3Jhd2RldiAqcmF3ZGV2LA0KPiA+ ICsJCQl1aW50MTZfdCBwb3J0LA0KPiA+ICsJCQlzdHJ1Y3QgcnRlX2V0aF9saW5rICpsaW5rKQ0K PiA+ICt7DQo+ID4gKwlzdHJ1Y3QgaWZwZ2FfcmF3ZGV2Z19saW5rX2luZm8gbGluZm87DQo+ID4g Kw0KPiA+ICsJcmF3ZGV2LT5kZXZfb3BzLT5hdHRyX2dldChyYXdkZXYsDQo+ID4gKwkJCQkicmV0 aW1lcl9saW5rc3RhdHVzIiwNCj4gPiArCQkJCSh1aW50NjRfdCAqKSZsaW5mbyk7DQo+ID4gKwkv KiBQYXJzZSB0aGUgbGluayBzdGF0dXMgKi8NCj4gPiArCWxpbmstPmxpbmtfc3RhdHVzID0gbGlu Zm8ubGlua191cDsNCj4gPiArCXN3aXRjaCAobGluZm8ubGlua19zcGVlZCkgew0KPiA+ICsJY2Fz ZSBJRlBHQV9SQVdERVZfTElOS19TUEVFRF8xMEdCOg0KPiA+ICsJCWxpbmstPmxpbmtfc3BlZWQg PSBFVEhfU1BFRURfTlVNXzEwRzsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgSUZQR0FfUkFX REVWX0xJTktfU1BFRURfMjVHQjoNCj4gPiArCQlsaW5rLT5saW5rX3NwZWVkID0gRVRIX1NQRUVE X05VTV8yNUc7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwlkZWZhdWx0Og0KPiA+ICsJCUlQTjNLRV9B RlVfUE1EX0xPRyhFUlIsICJVbmtub3duIGxpbmsgc3BlZWQgaW5mbyAldSIsDQo+ID4gKwkJCWxp bmZvLmxpbmtfc3BlZWQpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJfQ0KPiA+ICt9DQo+ID4gKw0K PiA+ICsvKg0KPiA+ICsgKiBTZXQgZGV2aWNlIGxpbmsgdXAuDQo+ID4gKyAqLw0KPiA+ICtpbnQN Cj4gPiAraXBuM2tlX3Jwc3RfZGV2X3NldF9saW5rX3VwKHN0cnVjdCBydGVfZXRoX2RldiAqZGV2 KSB7DQo+ID4gKwl1aW50OF90IGxpbmtfc3BlZWQgPSBJRlBHQV9SQVdERVZfTElOS19TUEVFRF9V TktOT1dOOw0KPiA+ICsJc3RydWN0IGlwbjNrZV9odyAqaHcgPSBJUE4zS0VfREVWX1BSSVZBVEVf VE9fSFcoZGV2KTsNCj4gPiArCXN0cnVjdCBpcG4za2VfcnBzdCAqcnBzdCA9IElQTjNLRV9ERVZf UFJJVkFURV9UT19SUFNUKGRldik7DQo+ID4gKwlzdHJ1Y3QgcnRlX3Jhd2RldiAqcmF3ZGV2Ow0K PiA+ICsJc3RydWN0IHJ0ZV9ldGhfY29uZiAqY29uZiA9ICZkZXYtPmRhdGEtPmRldl9jb25mOw0K PiA+ICsNCj4gPiArCXJhd2RldiA9IGh3LT5yYXdkZXY7DQo+ID4gKwlpZiAoY29uZi0+bGlua19z cGVlZHMgPT0gRVRIX0xJTktfU1BFRURfQVVUT05FRykgew0KPiA+ICsJCWNvbmYtPmxpbmtfc3Bl ZWRzID0gRVRIX0xJTktfU1BFRURfMjVHIHwNCj4gPiArCQkJCUVUSF9MSU5LX1NQRUVEXzEwRzsN Cj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZiAoY29uZi0+bGlua19zcGVlZHMgJiBFVEhfTElOS19T UEVFRF8xMEcpDQo+ID4gKwkJbGlua19zcGVlZCA9IElGUEdBX1JBV0RFVl9MSU5LX1NQRUVEXzI1 R0I7DQo+ID4gKwllbHNlIGlmIChjb25mLT5saW5rX3NwZWVkcyAmIEVUSF9MSU5LX1NQRUVEXzI1 RykNCj4gPiArCQlsaW5rX3NwZWVkID0gSUZQR0FfUkFXREVWX0xJTktfU1BFRURfMTBHQjsNCj4g PiArCWVsc2UNCj4gPiArCQlsaW5rX3NwZWVkID0gSUZQR0FfUkFXREVWX0xJTktfU1BFRURfVU5L Tk9XTjsNCj4gPiArDQo+ID4gKwlpZiAocnBzdC0+aTQwZV9wZl9ldGgpDQo+ID4gKwkJcnRlX2V0 aF9kZXZfc2V0X2xpbmtfdXAocnBzdC0+aTQwZV9wZl9ldGhfcG9ydF9pZCk7DQo+ID4gKw0KPiA+ ICsJcmV0dXJuIGlwbjNrZV9yZXRpbWVyX2NvbmZfbGluayhyYXdkZXYsDQo+ID4gKwkJCQkJcnBz dC0+cG9ydF9pZCwNCj4gPiArCQkJCQlsaW5rX3NwZWVkLA0KPiA+ICsJCQkJCXRydWUpOw0KPiAN Cj4gSnVzdCBhIHJlbWluZGVyIHRoYXQgdGhpcyBpcyBub3QgZG9pbmcgYW55dGhpbmcgdXNlZnVs LCBhbHRob3VnaCBpdCBsb29rcyBsaWtlIC4NCj4gJ2lwbjNrZV9yZXRpbWVyX2NvbmZfbGluaygp JyBjYWxscyAncmF3ZGV2LT5kZXZfb3BzLT5hdHRyX3NldCgpJyB3aGljaA0KPiBkb2Vzbid0IGRv IGFueXRoaW5nIGZ1bmN0aW9uYWwuDQo+IDwuLi4+DQoNCkl0J3MganVzdCBmb3IgZGVidWcuIEkg d2lsbCByZW1vdmUgaXQgaW4gcGF0Y2ggdjIuIFRoYW5rcy4NCg0KPiA+ICtzdHJ1Y3QgZXRoX2Rl dl9vcHMgaXBuM2tlX3Jwc3RfZGV2X29wcyA9IHsNCj4gPiArCS5kZXZfaW5mb3NfZ2V0ICAgICAg ICA9IGlwbjNrZV9ycHN0X2Rldl9pbmZvc19nZXQsDQo+ID4gKw0KPiA+ICsJLmRldl9jb25maWd1 cmUgICAgICAgID0gaXBuM2tlX3Jwc3RfZGV2X2NvbmZpZ3VyZSwNCj4gPiArCS5kZXZfc3RhcnQg ICAgICAgICAgICA9IGlwbjNrZV9ycHN0X2Rldl9zdGFydCwNCj4gPiArCS5kZXZfc3RvcCAgICAg ICAgICAgICA9IGlwbjNrZV9ycHN0X2Rldl9zdG9wLA0KPiA+ICsJLmRldl9jbG9zZSAgICAgICAg ICAgID0gaXBuM2tlX3Jwc3RfZGV2X2Nsb3NlLA0KPiA+ICsJLmRldl9yZXNldCAgICAgICAgICAg ID0gaXBuM2tlX3Jwc3RfZGV2X3Jlc2V0LA0KPiA+ICsNCj4gPiArCS5zdGF0c19nZXQgICAgICAg ICAgICA9IGlwbjNrZV9ycHN0X3N0YXRzX2dldCwNCj4gPiArCS54c3RhdHNfZ2V0ICAgICAgICAg ICA9IGlwbjNrZV9ycHN0X3hzdGF0c19nZXQsDQo+ID4gKwkueHN0YXRzX2dldF9uYW1lcyAgICAg PSBpcG4za2VfcnBzdF94c3RhdHNfZ2V0X25hbWVzLA0KPiA+ICsJLnN0YXRzX3Jlc2V0ICAgICAg ICAgID0gaXBuM2tlX3Jwc3Rfc3RhdHNfcmVzZXQsDQo+ID4gKwkueHN0YXRzX3Jlc2V0ICAgICAg ICAgPSBpcG4za2VfcnBzdF9zdGF0c19yZXNldCwNCj4gPiArDQo+ID4gKwkuZmlsdGVyX2N0cmwg ICAgICAgICAgPSBpcG4za2VfYWZ1X2ZpbHRlcl9jdHJsLA0KPiA+ICsNCj4gPiArCS5yeF9xdWV1 ZV9zdGFydCAgICAgICA9IGlwbjNrZV9ycHN0X3J4X3F1ZXVlX3N0YXJ0LA0KPiA+ICsJLnJ4X3F1 ZXVlX3N0b3AgICAgICAgID0gaXBuM2tlX3Jwc3RfcnhfcXVldWVfc3RvcCwNCj4gPiArCS50eF9x dWV1ZV9zdGFydCAgICAgICA9IGlwbjNrZV9ycHN0X3R4X3F1ZXVlX3N0YXJ0LA0KPiA+ICsJLnR4 X3F1ZXVlX3N0b3AgICAgICAgID0gaXBuM2tlX3Jwc3RfdHhfcXVldWVfc3RvcCwNCj4gPiArCS5y eF9xdWV1ZV9zZXR1cCAgICAgICA9IGlwbjNrZV9ycHN0X3J4X3F1ZXVlX3NldHVwLA0KPiA+ICsJ LnJ4X3F1ZXVlX3JlbGVhc2UgICAgID0gaXBuM2tlX3Jwc3RfcnhfcXVldWVfcmVsZWFzZSwNCj4g PiArCS50eF9xdWV1ZV9zZXR1cCAgICAgICA9IGlwbjNrZV9ycHN0X3R4X3F1ZXVlX3NldHVwLA0K PiA+ICsJLnR4X3F1ZXVlX3JlbGVhc2UgICAgID0gaXBuM2tlX3Jwc3RfdHhfcXVldWVfcmVsZWFz ZSwNCj4gPiArDQo+ID4gKwkuZGV2X3NldF9saW5rX3VwICAgICAgPSBpcG4za2VfcnBzdF9kZXZf c2V0X2xpbmtfdXAsDQo+ID4gKwkuZGV2X3NldF9saW5rX2Rvd24gICAgPSBpcG4za2VfcnBzdF9k ZXZfc2V0X2xpbmtfZG93biwNCj4gPiArCS5saW5rX3VwZGF0ZSAgICAgICAgICA9IGlwbjNrZV9y cHN0X2xpbmtfdXBkYXRlLA0KPiA+ICsNCj4gPiArCS5wcm9taXNjdW91c19lbmFibGUgICA9IGlw bjNrZV9ycHN0X3Byb21pc2N1b3VzX2VuYWJsZSwNCj4gPiArCS5wcm9taXNjdW91c19kaXNhYmxl ICA9IGlwbjNrZV9ycHN0X3Byb21pc2N1b3VzX2Rpc2FibGUsDQo+ID4gKwkuYWxsbXVsdGljYXN0 X2VuYWJsZSAgPSBpcG4za2VfcnBzdF9hbGxtdWx0aWNhc3RfZW5hYmxlLA0KPiA+ICsJLmFsbG11 bHRpY2FzdF9kaXNhYmxlID0gaXBuM2tlX3Jwc3RfYWxsbXVsdGljYXN0X2Rpc2FibGUsDQo+ID4g KwkubWFjX2FkZHJfc2V0ICAgICAgICAgPSBpcG4za2VfcnBzdF9tYWNfYWRkcl9zZXQsDQo+ID4g KwkvKi5nZXRfcmVnICAgICAgICAgICAgICA9IGlwbjNrZV9nZXRfcmVncywqLw0KPiA+ICsJLm10 dV9zZXQgICAgICAgICAgICAgID0gaXBuM2tlX3Jwc3RfbXR1X3NldCwNCj4gPiArDQo+ID4gKwkv KioNCj4gPiArCSAqIC5yeHFfaW5mb19nZXQgICAgICAgICA9IGlwbjNrZV9yeHFfaW5mb19nZXQs DQo+ID4gKwkgKiAudHhxX2luZm9fZ2V0ICAgICAgICAgPSBpcG4za2VfdHhxX2luZm9fZ2V0LA0K PiA+ICsJICogLmZ3X3ZlcnNpb25fZ2V0ICAgICAgID0gLA0KPiA+ICsJICogLmdldF9tb2R1bGVf aW5mbyAgICAgID0gaXBuM2tlX2dldF9tb2R1bGVfaW5mbywNCj4gPiArCSAqLw0KPiANCj4gUGxl YXNlIHJlbW92ZSBjb21tZW50ZWQgY29kZS4NCg0KT2theS4NCg0KPiA+ICsNCj4gPiArCS50bV9v cHNfZ2V0ICAgICAgICAgICA9IGlwbjNrZV90bV9vcHNfZ2V0LA0KPiA+ICt9Ow0KPiANCj4gSXMg dGhpcyB1bmRlcnN0YW5kaW5nIGNvcnJlY3Q6DQo+IFRoZXNlIGRldl9vcHMgYXJlIGZvciByZXBy ZXNlbnRvciBwb3J0cyBhbmQgdG8gY29udHJvbCB0aGUgZXRoZXJuZXQgcG9ydHMNCj4gdmlhIEZQ R0EgaW50ZXJmYWNlLg0KDQpZZXMNCg0KPiBJZiBzbyBjYW4gdGhlIHBvcnRzIGJlIGNvbmZpZ3Vy ZWQgdmlhIHJlZ3VsYXIgZGV2aWNlIGRyaXZlcnM/IElzIHRoZXJlIHBvc3NpYmxlDQo+IGNvbmZs aWN0IGJldHdlZW4gdHdvIGNvbnRyb2xzIGFuZCBpcyB0aGVyZSBhbnkgc3luY3Jvbml6YXRpb24g cmVxdWlyZWQ/DQoNCklmIGFyZ3VtZW50ICdmcGdhX2FjYyAnIG9mIHZkZXYgZW5hYmxlLCByZXBy ZXNlbnRvciBpcyBqdXN0IGZvciBGUEdBIHBvcnQgY29uZmlndXJhdGlvbi4NCk90aGVyd2lzZSwg cmVwcmVzZW50b3IgaXMganVzdCBmb3IgSTQwZSBQRiBwb3J0IGNvbmZpZ3VyYXRpb24uDQoNCj4g PC4uLj4NCj4gDQo+ID4gK3N0YXRpYyBpbnQNCj4gPiAraXBuM2tlX3RtX2hpZXJhcmNoeV9jb21t aXRfY2hlY2soc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYsDQo+ID4gKwkJCQkJCXN0cnVjdCBydGVf dG1fZXJyb3IgKmVycm9yKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgaXBuM2tlX3RtX2ludGVybmFs cyAqdG0gPQ0KPiBJUE4zS0VfREVWX1BSSVZBVEVfVE9fVE0oZGV2KTsNCj4gPiArCXVpbnQzMl90 IHRtX2lkOw0KPiA+ICsJc3RydWN0IGlwbjNrZV90bV9ub2RlX2xpc3QgKm5sOw0KPiA+ICsJc3Ry dWN0IGlwbjNrZV90bV9ub2RlICpuLCAqcGFyZW50X25vZGU7DQo+ID4gKwllbnVtIGlwbjNrZV90 bV9ub2RlX3N0YXRlIG5vZGVfc3RhdGU7DQo+ID4gKw0KPiA+ICsJdG1faWQgPSB0bS0+dG1faWQ7 DQo+ID4gKw0KPiA+ICsJbmwgPSAmdG0tPmguY29zX2NvbW1pdF9ub2RlX2xpc3Q7DQo+ID4gKwlU QUlMUV9GT1JFQUNIKG4sIG5sLCBub2RlKSB7DQo+ID4gKwkJbm9kZV9zdGF0ZSA9IG4tPm5vZGVf c3RhdGU7DQo+ID4gKwkJcGFyZW50X25vZGUgPSBuLT5wYXJlbnRfbm9kZTsNCj4gPiArCQlpZiAo bi0+bm9kZV9zdGF0ZSA9PQ0KPiBJUE4zS0VfVE1fTk9ERV9TVEFURV9DT05GSUdVUkVEX0FERCkg ew0KPiA+ICsJCQlpZiAoKG4tPnBhcmVudF9ub2RlX2lkID09IFJURV9UTV9OT0RFX0lEX05VTEwp DQo+IHx8DQo+ID4gKwkJCQkobi0+bGV2ZWwgIT0gSVBOM0tFX1RNX05PREVfTEVWRUxfQ09TKQ0K PiB8fA0KPiA+ICsJCQkJKG4tPnRtX2lkICE9IHRtX2lkKSB8fA0KPiA+ICsJCQkJKHBhcmVudF9u b2RlID09IE5VTEwpIHx8DQo+ID4gKwkJCQkocGFyZW50X25vZGUgJiYNCj4gPiArCQkJCQkocGFy ZW50X25vZGUtPm5vZGVfc3RhdGUgPT0NCj4gPiArDQo+IAlJUE4zS0VfVE1fTk9ERV9TVEFURV9D T05GSUdVUkVEX0RFTCkpIHx8DQo+ID4gKwkJCQkocGFyZW50X25vZGUgJiYNCj4gPiArCQkJCQko cGFyZW50X25vZGUtPm5vZGVfc3RhdGUgPT0NCj4gPiArDQo+IAlJUE4zS0VfVE1fTk9ERV9TVEFU RV9JRExFKSkgfHwNCj4gPiArCQkJCShuLT5zaGFwZXJfcHJvZmlsZS52YWxpZCA9PSAwKSkNCj4g PiArCQkJCXJldHVybiAtcnRlX3RtX2Vycm9yX3NldChlcnJvciwNCj4gPiArCQkJCQkJRUlOVkFM LA0KPiA+ICsNCj4gCVJURV9UTV9FUlJPUl9UWVBFX1VOU1BFQ0lGSUVELA0KPiA+ICsJCQkJCQlO VUxMLA0KPiA+ICsJCQkJCQlydGVfc3RyZXJyb3IoRUlOVkFMKSk7DQo+ID4gKwkJfSBlbHNlIGlm IChuLT5ub2RlX3N0YXRlID09DQo+IElQTjNLRV9UTV9OT0RFX1NUQVRFX0NPTkZJR1VSRURfREVM KQ0KPiA+ICsJCQlpZiAoKG4tPmxldmVsICE9IElQTjNLRV9UTV9OT0RFX0xFVkVMX0NPUykgfHwN Cj4gPiArCQkJCShuLT5uX2NoaWxkcmVuICE9IDApKQ0KPiA+ICsJCQkJcmV0dXJuIC1ydGVfdG1f ZXJyb3Jfc2V0KGVycm9yLA0KPiA+ICsJCQkJCQlFSU5WQUwsDQo+ID4gKw0KPiAJUlRFX1RNX0VS Uk9SX1RZUEVfVU5TUEVDSUZJRUQsDQo+ID4gKwkJCQkJCU5VTEwsDQo+ID4gKwkJCQkJCXJ0ZV9z dHJlcnJvcihFSU5WQUwpKTsNCj4gPiArCQllbHNlDQo+ID4gKwkJCXJldHVybiAtcnRlX3RtX2Vy cm9yX3NldChlcnJvciwNCj4gPiArCQkJCQkJRUlOVkFMLA0KPiA+ICsNCj4gCVJURV9UTV9FUlJP Ul9UWVBFX1VOU1BFQ0lGSUVELA0KPiA+ICsJCQkJCQlOVUxMLA0KPiA+ICsJCQkJCQlydGVfc3Ry ZXJyb3IoRUlOVkFMKSk7DQo+IA0KPiBJdCBpcyBlYXN5IHRvIGNvbmZ1c2UgbGFzdCAnZWxzZScs IGFsc28gSSBiZWxpdmUgaXRzIGluZGVudGF0aW9uIGlzIHdyb25nLCBzbyBpdCBtYXkNCj4gYmUg YWxyZWFkeSBjb25mdXNlZCwgY2FuIHlvdSBwbGVhc2UgdXNlIGJyYWNlcyB0byBjbGFyaWZ5LCBy ZWxhdGVkIGNsYW5nDQo+IHdhcm5pbmc6DQoNCk9rYXkNCg0KPiAuLi9kcGRrL2RyaXZlcnMvbmV0 L2lwbjNrZS9pcG4za2VfdG0uYzoxNTUxOjM6IHdhcm5pbmc6IGFkZCBleHBsaWNpdCBicmFjZXMN Cj4gdG8gYXZvaWQgZGFuZ2xpbmcgZWxzZSBbLVdkYW5nbGluZy1lbHNlXQ0KPiAgICAgICAgICAg ICAgICAgZWxzZQ0KPiAgICAgICAgICAgICAgICAgXg0KDQpPa2F5DQogDQo+ID4gKwl9DQo+ID4g Kw0KPiA+ICsJbmwgPSAmdG0tPmgudnRfY29tbWl0X25vZGVfbGlzdDsNCj4gPiArCVRBSUxRX0ZP UkVBQ0gobiwgbmwsIG5vZGUpIHsNCj4gPiArCQlub2RlX3N0YXRlID0gbi0+bm9kZV9zdGF0ZTsN Cj4gPiArCQlwYXJlbnRfbm9kZSA9IG4tPnBhcmVudF9ub2RlOw0KPiA+ICsJCWlmIChuLT5ub2Rl X3N0YXRlID09DQo+IElQTjNLRV9UTV9OT0RFX1NUQVRFX0NPTkZJR1VSRURfQUREKSB7DQo+ID4g KwkJCWlmICgobi0+cGFyZW50X25vZGVfaWQgPT0gUlRFX1RNX05PREVfSURfTlVMTCkNCj4gfHwN Cj4gPiArCQkJCShuLT5sZXZlbCAhPSBJUE4zS0VfVE1fTk9ERV9MRVZFTF9WVCkNCj4gfHwNCj4g PiArCQkJCShuLT50bV9pZCAhPSB0bV9pZCkgfHwNCj4gPiArCQkJCShwYXJlbnRfbm9kZSA9PSBO VUxMKSB8fA0KPiA+ICsJCQkJKHBhcmVudF9ub2RlICYmDQo+ID4gKwkJCQkJKHBhcmVudF9ub2Rl LT5ub2RlX3N0YXRlID09DQo+ID4gKw0KPiAJSVBOM0tFX1RNX05PREVfU1RBVEVfQ09ORklHVVJF RF9ERUwpKSB8fA0KPiA+ICsJCQkJKHBhcmVudF9ub2RlICYmDQo+ID4gKwkJCQkJKHBhcmVudF9u b2RlLT5ub2RlX3N0YXRlID09DQo+ID4gKw0KPiAJSVBOM0tFX1RNX05PREVfU1RBVEVfSURMRSkp IHx8DQo+ID4gKwkJCQkobi0+c2hhcGVyX3Byb2ZpbGUudmFsaWQgPT0gMCkpDQo+ID4gKwkJCQly ZXR1cm4gLXJ0ZV90bV9lcnJvcl9zZXQoZXJyb3IsDQo+ID4gKwkJCQkJCUVJTlZBTCwNCj4gPiAr DQo+IAlSVEVfVE1fRVJST1JfVFlQRV9VTlNQRUNJRklFRCwNCj4gPiArCQkJCQkJTlVMTCwNCj4g PiArCQkJCQkJcnRlX3N0cmVycm9yKEVJTlZBTCkpOw0KPiA+ICsJCX0gZWxzZSBpZiAobi0+bm9k ZV9zdGF0ZSA9PQ0KPiBJUE4zS0VfVE1fTk9ERV9TVEFURV9DT05GSUdVUkVEX0RFTCkNCj4gPiAr CQkJaWYgKChuLT5sZXZlbCAhPSBJUE4zS0VfVE1fTk9ERV9MRVZFTF9WVCkgfHwNCj4gPiArCQkJ CShuLT5uX2NoaWxkcmVuICE9IDApKQ0KPiA+ICsJCQkJcmV0dXJuIC1ydGVfdG1fZXJyb3Jfc2V0 KGVycm9yLA0KPiA+ICsJCQkJCQlFSU5WQUwsDQo+ID4gKw0KPiAJUlRFX1RNX0VSUk9SX1RZUEVf VU5TUEVDSUZJRUQsDQo+ID4gKwkJCQkJCU5VTEwsDQo+ID4gKwkJCQkJCXJ0ZV9zdHJlcnJvcihF SU5WQUwpKTsNCj4gPiArCQllbHNlDQo+ID4gKwkJCXJldHVybiAtcnRlX3RtX2Vycm9yX3NldChl cnJvciwNCj4gPiArCQkJCQkJRUlOVkFMLA0KPiA+ICsNCj4gCVJURV9UTV9FUlJPUl9UWVBFX1VO U1BFQ0lGSUVELA0KPiA+ICsJCQkJCQlOVUxMLA0KPiA+ICsJCQkJCQlydGVfc3RyZXJyb3IoRUlO VkFMKSk7DQo+IA0KPiBTYW1lIGFzIGFib3ZlIGZvciB0aGlzICdlbHNlJywgY2xhbmcgd2Fybmlu ZzoNCj4gDQo+IC4uLi9kcGRrL2RyaXZlcnMvbmV0L2lwbjNrZS9pcG4za2VfdG0uYzoxNTg4OjM6 IHdhcm5pbmc6IGFkZCBleHBsaWNpdA0KPiBicmFjZXMgdG8gYXZvaWQgZGFuZ2xpbmcgZWxzZSBb LVdkYW5nbGluZy1lbHNlXQ0KPiAgICAgICAgICAgICAgICAgZWxzZQ0KPiAgICAgICAgICAgICAg ICAgXg0KDQpBcHBseSBpbiBwYXRjaCB2Mi4NCg0KPiANCj4gPC4uLj4NCj4gDQo+ID4gK3N0YXRp YyBpbnQNCj4gPiAraXBuM2tlX3RtX2hpZXJhcmNoeV9od19jb21taXQoc3RydWN0IHJ0ZV9ldGhf ZGV2ICpkZXYsDQo+ID4gKwkJCQkJc3RydWN0IHJ0ZV90bV9lcnJvciAqZXJyb3IpDQo+ID4gK3sN Cj4gPiArCXN0cnVjdCBpcG4za2VfaHcgKmh3ID0gSVBOM0tFX0RFVl9QUklWQVRFX1RPX0hXKGRl dik7DQo+ID4gKwlzdHJ1Y3QgaXBuM2tlX3RtX2ludGVybmFscyAqdG0gPQ0KPiBJUE4zS0VfREVW X1BSSVZBVEVfVE9fVE0oZGV2KTsNCj4gPiArCXN0cnVjdCBpcG4za2VfdG1fbm9kZV9saXN0ICpu bDsNCj4gPiArCXN0cnVjdCBpcG4za2VfdG1fbm9kZSAqbiwgKm5uLCAqcGFyZW50X25vZGU7DQo+ ID4gKw0KPiA+ICsJbiA9IHRtLT5oLnBvcnRfY29tbWl0X25vZGU7DQo+ID4gKwlpZiAobikgew0K PiA+ICsJCWlmIChuLT5ub2RlX3N0YXRlID09DQo+IElQTjNLRV9UTV9OT0RFX1NUQVRFX0NPTkZJ R1VSRURfQUREKSB7DQo+ID4gKwkJCXRtLT5oLnBvcnRfY29tbWl0X25vZGUgPSBOVUxMOw0KPiA+ ICsNCj4gPiArCQkJbi0+bm9kZV9zdGF0ZSA9DQo+IElQTjNLRV9UTV9OT0RFX1NUQVRFX0NPTU1J VFRFRDsNCj4gPiArCQl9IGVsc2UgaWYgKG4tPm5vZGVfc3RhdGUgPT0NCj4gPiArDQo+IAlJUE4z S0VfVE1fTk9ERV9TVEFURV9DT05GSUdVUkVEX0RFTCkgew0KPiA+ICsJCQl0bS0+aC5wb3J0X2Nv bW1pdF9ub2RlID0gTlVMTDsNCj4gPiArDQo+ID4gKwkJCW4tPm5vZGVfc3RhdGUgPSBJUE4zS0Vf VE1fTk9ERV9TVEFURV9JRExFOw0KPiA+ICsJCQluLT5wcmlvcml0eSA9DQo+IElQTjNLRV9UTV9O T0RFX1BSSU9SSVRZX05PUk1BTDA7DQo+ID4gKwkJCW4tPndlaWdodCA9IDA7DQo+ID4gKwkJCW4t PnRtX2lkID0gUlRFX1RNX05PREVfSURfTlVMTDsNCj4gPiArCQl9IGVsc2UNCj4gPiArCQkJcmV0 dXJuIC1ydGVfdG1fZXJyb3Jfc2V0KGVycm9yLA0KPiA+ICsJCQkJCQlFSU5WQUwsDQo+ID4gKw0K PiAJUlRFX1RNX0VSUk9SX1RZUEVfVU5TUEVDSUZJRUQsDQo+ID4gKwkJCQkJCU5VTEwsDQo+ID4g KwkJCQkJCXJ0ZV9zdHJlcnJvcihFSU5WQUwpKTsNCj4gPiArCQlpcG4za2VfaHdfdG1fbm9kZV93 cihodywgbik7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJbmwgPSAmdG0tPmgudnRfY29tbWl0X25v ZGVfbGlzdDsNCj4gPiArCWZvciAobiA9IFRBSUxRX0ZJUlNUKG5sKTsgbjsgbm4pIHsNCj4gDQo+ IHdoYXQgaXMgdGhlIHBvaW50IG9mIGxhc3QgJ25uJz8gY2xhbmcgd2FybmluZzoNCg0KRml4IGlu IHBhdGNoIHYyLg0KDQo+IC4uLi9kcGRrL2RyaXZlcnMvbmV0L2lwbjNrZS9pcG4za2VfdG0uYzox ODExOjMxOiB3YXJuaW5nOiBleHByZXNzaW9uDQo+IHJlc3VsdCB1bnVzZWQgWy1XdW51c2VkLXZh bHVlXQ0KPiAgICAgICAgIGZvciAobiA9IFRBSUxRX0ZJUlNUKG5sKTsgbjsgbm4pIHsNCj4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5+DQo+IA0KPiB0aGVyZSBhcmUgbXVs dGlwbGUgc2ltaWxhciB1c2FnZSwgYW0gSSBtaXNzaW5nIHNvbWV0aGluZywgaWYgbm90IGNhbiB5 b3UNCj4gcGxlYXNlIGNsZWFuIHRoZW06DQo+IC4uLi9kcGRrL2RyaXZlcnMvbmV0L2lwbjNrZS9p cG4za2VfdG0uYzoxODQxOjMxOiB3YXJuaW5nOiBleHByZXNzaW9uDQo+IHJlc3VsdCB1bnVzZWQg Wy1XdW51c2VkLXZhbHVlXQ0KPiAuLi4vZHBkay9kcml2ZXJzL25ldC9pcG4za2UvaXBuM2tlX3Rt LmM6MTg5NzozMTogd2FybmluZzogZXhwcmVzc2lvbg0KPiByZXN1bHQgdW51c2VkIFstV3VudXNl ZC12YWx1ZV0NCj4gLi4uL2RwZGsvZHJpdmVycy9uZXQvaXBuM2tlL2lwbjNrZV90bS5jOjE5MTQ6 MzE6IHdhcm5pbmc6IGV4cHJlc3Npb24NCj4gcmVzdWx0IHVudXNlZCBbLVd1bnVzZWQtdmFsdWVd IDwuLi4+DQoNCk9rYXksIEkgd2lsbCBmaXggaXQgaW4gcGF0Y2ggdjIuDQogDQo+ID4gK3N0YXRp YyB2b2lkDQo+ID4gK2lwbjNrZV90bV9zaG93KHN0cnVjdCBydGVfZXRoX2RldiAqZGV2KSB7DQo+ ID4gKwlzdHJ1Y3QgaXBuM2tlX3RtX2ludGVybmFscyAqdG0gPQ0KPiBJUE4zS0VfREVWX1BSSVZB VEVfVE9fVE0oZGV2KTsNCj4gPiArCXVpbnQzMl90IHRtX2lkOw0KPiA+ICsJc3RydWN0IGlwbjNr ZV90bV9ub2RlX2xpc3QgKnZ0X25sLCAqY29zX25sOw0KPiA+ICsJc3RydWN0IGlwbjNrZV90bV9u b2RlICpwb3J0X24sICp2dF9uLCAqY29zX247DQo+ID4gKwljaGFyICpzdHJfc3RhdGVbSVBOM0tF X1RNX05PREVfU1RBVEVfTUFYXSA9IHsiSWRsZSIsDQo+ID4gKwkJCQkJCSJDZmdBZGQiLA0KPiA+ ICsJCQkJCQkiQ2ZnRGVsIiwNCj4gPiArCQkJCQkJIkNvbW1pdHRlZCJ9Ow0KPiA+ICsNCj4gPiAr CXRtX2lkID0gdG0tPnRtX2lkOw0KPiA+ICsNCj4gPiArCXByaW50ZigiKioqKioqKioqKioqKkhR b1MgVHJlZSglZCkqKioqKioqKioqKioqXG4iLCB0bV9pZCk7DQo+IA0KPiBQbGVhc2UgZG9uJ3Qg dXNlICdwcmludGYnIGluIGRyaXZlcnMgYW5kIGxpYnMsIGluc3RlYWQgcHJlZmVyIGxvZ2dpbmcg ZnVuY3Rpb25zLg0KDQpPa2F5Lg0KDQo+IDwuLi4+DQo+IA0KPiA+ICsvKiBUTSBMZXZlbHMgKi8N Cj4gPiArZW51bSBpcG4za2VfdG1fbm9kZV9sZXZlbCB7DQo+ID4gKwlJUE4zS0VfVE1fTk9ERV9M RVZFTF9QT1JUID0gMCwNCj4gDQo+IE5vIG5lZWQgdG8gcHJvdmlkZSBpbml0aWFsICcwJyB2YWx1 ZSB0byBhbiBlbnVtLCB0aGF0IGlzIHRoZSBkZWZhdWx0IHZhbHVlLg0KDQpPa2F5Lg0KDQo+IDwu Li4+DQo+IA0KPiA+IEBAIC0wLDAgKzEsNCBAQA0KPiA+ICtEUERLXzIuMCB7DQo+IA0KPiBQbGVh c2UgZml4IHRhZyB3aXRoIGNvcnJlY3QgRFBESyB2ZXJzaW9uLg0KDQpPa2F5DQoNCj4gPiArDQo+ ID4gKwlsb2NhbDogKjsNCj4gPiArfTsNCj4gPg0KDQo=