From mboxrd@z Thu Jan 1 00:00:00 1970 From: Imre Deak Subject: Re: [PATCH 02/14] drm/i915: Extract intel_runtime_pm.c Date: Tue, 30 Sep 2014 15:22:09 +0300 Message-ID: <1412079729.18498.1.camel@intelbox> References: <1412067410-9346-1-git-send-email-daniel.vetter@ffwll.ch> <1412067410-9346-3-git-send-email-daniel.vetter@ffwll.ch> Reply-To: imre.deak@intel.com Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTP id F01536E2EC for ; Tue, 30 Sep 2014 05:22:15 -0700 (PDT) In-Reply-To: <1412067410-9346-3-git-send-email-daniel.vetter@ffwll.ch> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Daniel Vetter Cc: Daniel Vetter , Intel Graphics Development List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCAyMDE0LTA5LTMwIGF0IDEwOjU2ICswMjAwLCBEYW5pZWwgVmV0dGVyIHdyb3RlOgo+ IEdlZXogaXMgdGhlIGF1ZGlvIGhhY2sgdWdseS4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBEYW5pZWwg VmV0dGVyIDxkYW5pZWwudmV0dGVyQGludGVsLmNvbT4KCkxvb2tzIG9rLCBidXQgbmVlZHMgdG8g YmUgcmViYXNlZCBvbgoKY29tbWl0IDA4NTI0YTlmZmEzOTZjNTZmZjNmYmVjOWNmZDgwZWRkM2Zh NmEwNTgKQXV0aG9yOiBTYXRoZWVzaGFrcmlzaG5hIE0gPHNhdGhlZXNoYWtyaXNobmEubUBpbnRl bC5jb20+CkRhdGU6ICAgVHVlIEFwciA4IDE1OjQ2OjU2IDIwMTQgKzA1MzAKCiAgICBkcm0vaTkx NS9za2w6IFJlc3RvcmUgcGlwZSBCL0MgaW50ZXJydXB0cwoKPiAtLS0KPiAgZHJpdmVycy9ncHUv ZHJtL2k5MTUvTWFrZWZpbGUgICAgICAgICAgIHwgICAgNCArLQo+ICBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9kcnYuaCAgICAgICAgfCAgIDM5ICstCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX3BtLmMgICAgICAgICB8IDExNTggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Cj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3J1bnRpbWVfcG0uYyB8IDExOTAgKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKwo+ICA0IGZpbGVzIGNoYW5nZWQsIDEyMTQgaW5zZXJ0 aW9ucygrKSwgMTE3NyBkZWxldGlvbnMoLSkKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX3J1bnRpbWVfcG0uYwo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4g aW5kZXggMmQ4MzE3ZDM2ZTA5Li4zYTZiY2UwNDdmNmYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmls ZQo+IEBAIC0xMSw3ICsxMSw5IEBAIGk5MTUteSA6PSBpOTE1X2Rydi5vIFwKPiAgCSAgaTkxNV9w YXJhbXMubyBcCj4gICAgICAgICAgICBpOTE1X3N1c3BlbmQubyBcCj4gIAkgIGk5MTVfc3lzZnMu byBcCj4gLQkgIGludGVsX3BtLm8KPiArCSAgaW50ZWxfcG0ubyBcCj4gKwkgIGludGVsX3J1bnRp bWVfcG0ubwo+ICsKPiAgaTkxNS0kKENPTkZJR19DT01QQVQpICAgKz0gaTkxNV9pb2MzMi5vCj4g IGk5MTUtJChDT05GSUdfREVCVUdfRlMpICs9IGk5MTVfZGVidWdmcy5vCj4gIAo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2Rydi5oCj4gaW5kZXggNjE3MTI2Nzg2ODE5Li5hOTYzZGQ4NzA5OTQgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+IEBAIC0xMDczLDYgKzEwNzMsMjcgQEAgZXh0ZXJu IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICppbnRlbF9maW5kX3BhbmVsX2Rvd25jbG9jaygKPiAg CQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpmaXhlZF9tb2RlLAo+ICAJCQkJc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7Cj4gIAo+ICsvKiBpbnRlbF9ydW50aW1lX3BtLmMgKi8K PiAraW50IGludGVsX3Bvd2VyX2RvbWFpbnNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq KTsKPiArdm9pZCBpbnRlbF9wb3dlcl9kb21haW5zX3JlbW92ZShzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqKTsKPiArdm9pZCBpbnRlbF9wb3dlcl9kb21haW5zX2luaXRfaHcoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiArdm9pZCBpbnRlbF9pbml0X3J1bnRpbWVfcG0oc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiArdm9pZCBpbnRlbF9maW5pX3J1bnRp bWVfcG0oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiArCj4gK2Jvb2wgaW50 ZWxfZGlzcGxheV9wb3dlcl9lbmFibGVkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwKPiArCQkJCSBlbnVtIGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluIGRvbWFpbik7Cj4gK2Jv b2wgaW50ZWxfZGlzcGxheV9wb3dlcl9lbmFibGVkX3VubG9ja2VkKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwKPiArCQkJCQkgIGVudW0gaW50ZWxfZGlzcGxheV9wb3dlcl9kb21h aW4gZG9tYWluKTsKPiArdm9pZCBpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldChzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gKwkJCSAgICAgZW51bSBpbnRlbF9kaXNwbGF5X3Bvd2Vy X2RvbWFpbiBkb21haW4pOwo+ICt2b2lkIGludGVsX2Rpc3BsYXlfcG93ZXJfcHV0KHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiArCQkJICAgICBlbnVtIGludGVsX2Rpc3BsYXlf cG93ZXJfZG9tYWluIGRvbWFpbik7Cj4gK3ZvaWQgaW50ZWxfYXV4X2Rpc3BsYXlfcnVudGltZV9n ZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiArdm9pZCBpbnRlbF9hdXhf ZGlzcGxheV9ydW50aW1lX3B1dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ ICt2b2lkIGludGVsX3J1bnRpbWVfcG1fZ2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdik7Cj4gK3ZvaWQgaW50ZWxfcnVudGltZV9wbV9nZXRfbm9yZXN1bWUoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiArdm9pZCBpbnRlbF9ydW50aW1lX3BtX3B1dChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ICsKPiAgLyogaW50ZWxfcG0uYyAqLwo+ ICB2b2lkIGludGVsX2luaXRfY2xvY2tfZ2F0aW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+ ICB2b2lkIGludGVsX3N1c3BlbmRfaHcoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gQEAgLTEw OTAsMTcgKzExMTEsNiBAQCBib29sIGludGVsX2ZiY19lbmFibGVkKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYpOwo+ICB2b2lkIGludGVsX3VwZGF0ZV9mYmMoc3RydWN0IGRybV9kZXZpY2UgKmRldik7 Cj4gIHZvaWQgaW50ZWxfZ3B1X2lwc19pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdik7Cj4gIHZvaWQgaW50ZWxfZ3B1X2lwc190ZWFyZG93bih2b2lkKTsKPiAtaW50IGludGVs X3Bvd2VyX2RvbWFpbnNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqKTsKPiAtdm9pZCBp bnRlbF9wb3dlcl9kb21haW5zX3JlbW92ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqKTsKPiAt Ym9vbCBpbnRlbF9kaXNwbGF5X3Bvd2VyX2VuYWJsZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LAo+IC0JCQkJIGVudW0gaW50ZWxfZGlzcGxheV9wb3dlcl9kb21haW4gZG9tYWlu KTsKPiAtYm9vbCBpbnRlbF9kaXNwbGF5X3Bvd2VyX2VuYWJsZWRfdW5sb2NrZWQoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IC0JCQkJCSAgZW51bSBpbnRlbF9kaXNwbGF5X3Bv d2VyX2RvbWFpbiBkb21haW4pOwo+IC12b2lkIGludGVsX2Rpc3BsYXlfcG93ZXJfZ2V0KHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAtCQkJICAgICBlbnVtIGludGVsX2Rpc3Bs YXlfcG93ZXJfZG9tYWluIGRvbWFpbik7Cj4gLXZvaWQgaW50ZWxfZGlzcGxheV9wb3dlcl9wdXQo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IC0JCQkgICAgIGVudW0gaW50ZWxf ZGlzcGxheV9wb3dlcl9kb21haW4gZG9tYWluKTsKPiAtdm9pZCBpbnRlbF9wb3dlcl9kb21haW5z X2luaXRfaHcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiAgdm9pZCBpbnRl bF9pbml0X2d0X3Bvd2Vyc2F2ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiAgdm9pZCBpbnRl bF9jbGVhbnVwX2d0X3Bvd2Vyc2F2ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiAgdm9pZCBp bnRlbF9lbmFibGVfZ3RfcG93ZXJzYXZlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+IEBAIC0x MTExLDEzICsxMTIxLDYgQEAgdm9pZCBpcm9ubGFrZV90ZWFyZG93bl9yYzYoc3RydWN0IGRybV9k ZXZpY2UgKmRldik7Cj4gIHZvaWQgZ2VuNl91cGRhdGVfcmluZ19mcmVxKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYpOwo+ICB2b2lkIGdlbjZfcnBzX2lkbGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KTsKPiAgdm9pZCBnZW42X3Jwc19ib29zdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYpOwo+IC12b2lkIGludGVsX2F1eF9kaXNwbGF5X3J1bnRpbWVfZ2V0KHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gLXZvaWQgaW50ZWxfYXV4X2Rpc3BsYXlf cnVudGltZV9wdXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiAtdm9pZCBp bnRlbF9ydW50aW1lX3BtX2dldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ IC12b2lkIGludGVsX3J1bnRpbWVfcG1fZ2V0X25vcmVzdW1lKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdik7Cj4gLXZvaWQgaW50ZWxfcnVudGltZV9wbV9wdXQoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiAtdm9pZCBpbnRlbF9pbml0X3J1bnRpbWVfcG0oc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiAtdm9pZCBpbnRlbF9maW5pX3J1bnRp bWVfcG0oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiAgdm9pZCBpbGtfd21f Z2V0X2h3X3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+ICAKPiAKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX3BtLmMKPiBpbmRleCA2YjQxNjIwMTI0MGYuLjA2YzFlYTBhN2JmZCAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfcG0uYwo+IEBAIC0zMCw5ICszMCw2IEBACj4gICNpbmNsdWRlICJpbnRl bF9kcnYuaCIKPiAgI2luY2x1ZGUgIi4uLy4uLy4uL3BsYXRmb3JtL3g4Ni9pbnRlbF9pcHMuaCIK PiAgI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+IC0jaW5jbHVkZSA8bGludXgvdmdhYXJiLmg+ Cj4gLSNpbmNsdWRlIDxkcm0vaTkxNV9wb3dlcndlbGwuaD4KPiAtI2luY2x1ZGUgPGxpbnV4L3Bt X3J1bnRpbWUuaD4KPiAgCj4gIC8qKgo+ICAgKiBSQzYgaXMgYSBzcGVjaWFsIHBvd2VyIHN0YWdl IHdoaWNoIGFsbG93cyB0aGUgR1BVIHRvIGVudGVyIGFuIHZlcnkKPiBAQCAtNjIwNiwxMTYyICs2 MjAzLDcgQEAgdm9pZCBpbnRlbF9zdXNwZW5kX2h3KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4g IAkJbHB0X3N1c3BlbmRfaHcoZGV2KTsKPiAgfQo+ICAKPiAtI2RlZmluZSBmb3JfZWFjaF9wb3dl cl93ZWxsKGksIHBvd2VyX3dlbGwsIGRvbWFpbl9tYXNrLCBwb3dlcl9kb21haW5zKQlcCj4gLQlm b3IgKGkgPSAwOwkJCQkJCQlcCj4gLQkgICAgIGkgPCAocG93ZXJfZG9tYWlucyktPnBvd2VyX3dl bGxfY291bnQgJiYJCQlcCj4gLQkJICgocG93ZXJfd2VsbCkgPSAmKHBvd2VyX2RvbWFpbnMpLT5w b3dlcl93ZWxsc1tpXSk7CVwKPiAtCSAgICAgaSsrKQkJCQkJCQlcCj4gLQkJaWYgKChwb3dlcl93 ZWxsKS0+ZG9tYWlucyAmIChkb21haW5fbWFzaykpCj4gIAo+IC0jZGVmaW5lIGZvcl9lYWNoX3Bv d2VyX3dlbGxfcmV2KGksIHBvd2VyX3dlbGwsIGRvbWFpbl9tYXNrLCBwb3dlcl9kb21haW5zKSBc Cj4gLQlmb3IgKGkgPSAocG93ZXJfZG9tYWlucyktPnBvd2VyX3dlbGxfY291bnQgLSAxOwkJCSBc Cj4gLQkgICAgIGkgPj0gMCAmJiAoKHBvd2VyX3dlbGwpID0gJihwb3dlcl9kb21haW5zKS0+cG93 ZXJfd2VsbHNbaV0pO1wKPiAtCSAgICAgaS0tKQkJCQkJCQkgXAo+IC0JCWlmICgocG93ZXJfd2Vs bCktPmRvbWFpbnMgJiAoZG9tYWluX21hc2spKQo+IC0KPiAtLyoqCj4gLSAqIFdlIHNob3VsZCBv bmx5IHVzZSB0aGUgcG93ZXIgd2VsbCBpZiB3ZSBleHBsaWNpdGx5IGFza2VkIHRoZSBoYXJkd2Fy ZSB0bwo+IC0gKiBlbmFibGUgaXQsIHNvIGNoZWNrIGlmIGl0J3MgZW5hYmxlZCBhbmQgYWxzbyBj aGVjayBpZiB3ZSd2ZSByZXF1ZXN0ZWQgaXQgdG8KPiAtICogYmUgZW5hYmxlZC4KPiAtICovCj4g LXN0YXRpYyBib29sIGhzd19wb3dlcl93ZWxsX2VuYWJsZWQoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LAo+IC0JCQkJICAgc3RydWN0IGk5MTVfcG93ZXJfd2VsbCAqcG93ZXJfd2Vs bCkKPiAtewo+IC0JcmV0dXJuIEk5MTVfUkVBRChIU1dfUFdSX1dFTExfRFJJVkVSKSA9PQo+IC0J CSAgICAgKEhTV19QV1JfV0VMTF9FTkFCTEVfUkVRVUVTVCB8IEhTV19QV1JfV0VMTF9TVEFURV9F TkFCTEVEKTsKPiAtfQo+IC0KPiAtYm9vbCBpbnRlbF9kaXNwbGF5X3Bvd2VyX2VuYWJsZWRfdW5s b2NrZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IC0JCQkJCSAgZW51bSBp bnRlbF9kaXNwbGF5X3Bvd2VyX2RvbWFpbiBkb21haW4pCj4gLXsKPiAtCXN0cnVjdCBpOTE1X3Bv d2VyX2RvbWFpbnMgKnBvd2VyX2RvbWFpbnM7Cj4gLQlzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsICpw b3dlcl93ZWxsOwo+IC0JYm9vbCBpc19lbmFibGVkOwo+IC0JaW50IGk7Cj4gLQo+IC0JaWYgKGRl dl9wcml2LT5wbS5zdXNwZW5kZWQpCj4gLQkJcmV0dXJuIGZhbHNlOwo+IC0KPiAtCXBvd2VyX2Rv bWFpbnMgPSAmZGV2X3ByaXYtPnBvd2VyX2RvbWFpbnM7Cj4gLQo+IC0JaXNfZW5hYmxlZCA9IHRy dWU7Cj4gLQo+IC0JZm9yX2VhY2hfcG93ZXJfd2VsbF9yZXYoaSwgcG93ZXJfd2VsbCwgQklUKGRv bWFpbiksIHBvd2VyX2RvbWFpbnMpIHsKPiAtCQlpZiAocG93ZXJfd2VsbC0+YWx3YXlzX29uKQo+ IC0JCQljb250aW51ZTsKPiAtCj4gLQkJaWYgKCFwb3dlcl93ZWxsLT5od19lbmFibGVkKSB7Cj4g LQkJCWlzX2VuYWJsZWQgPSBmYWxzZTsKPiAtCQkJYnJlYWs7Cj4gLQkJfQo+IC0JfQo+IC0KPiAt CXJldHVybiBpc19lbmFibGVkOwo+IC19Cj4gLQo+IC1ib29sIGludGVsX2Rpc3BsYXlfcG93ZXJf ZW5hYmxlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gLQkJCQkgZW51bSBp bnRlbF9kaXNwbGF5X3Bvd2VyX2RvbWFpbiBkb21haW4pCj4gLXsKPiAtCXN0cnVjdCBpOTE1X3Bv d2VyX2RvbWFpbnMgKnBvd2VyX2RvbWFpbnM7Cj4gLQlib29sIHJldDsKPiAtCj4gLQlwb3dlcl9k b21haW5zID0gJmRldl9wcml2LT5wb3dlcl9kb21haW5zOwo+IC0KPiAtCW11dGV4X2xvY2soJnBv d2VyX2RvbWFpbnMtPmxvY2spOwo+IC0JcmV0ID0gaW50ZWxfZGlzcGxheV9wb3dlcl9lbmFibGVk X3VubG9ja2VkKGRldl9wcml2LCBkb21haW4pOwo+IC0JbXV0ZXhfdW5sb2NrKCZwb3dlcl9kb21h aW5zLT5sb2NrKTsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+IC19Cj4gLQo+IC0vKgo+IC0gKiBTdGFy dGluZyB3aXRoIEhhc3dlbGwsIHdlIGhhdmUgYSAiUG93ZXIgRG93biBXZWxsIiB0aGF0IGNhbiBi ZSB0dXJuZWQgb2ZmCj4gLSAqIHdoZW4gbm90IG5lZWRlZCBhbnltb3JlLiBXZSBoYXZlIDQgcmVn aXN0ZXJzIHRoYXQgY2FuIHJlcXVlc3QgdGhlIHBvd2VyIHdlbGwKPiAtICogdG8gYmUgZW5hYmxl ZCwgYW5kIGl0IHdpbGwgb25seSBiZSBkaXNhYmxlZCBpZiBub25lIG9mIHRoZSByZWdpc3RlcnMg aXMKPiAtICogcmVxdWVzdGluZyBpdCB0byBiZSBlbmFibGVkLgo+IC0gKi8KPiAtc3RhdGljIHZv aWQgaHN3X3Bvd2VyX3dlbGxfcG9zdF9lbmFibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZGV2X3ByaXYtPmRldjsK PiAtCj4gLQkvKgo+IC0JICogQWZ0ZXIgd2UgcmUtZW5hYmxlIHRoZSBwb3dlciB3ZWxsLCBpZiB3 ZSB0b3VjaCBWR0EgcmVnaXN0ZXIgMHgzZDUKPiAtCSAqIHdlJ2xsIGdldCB1bmNsYWltZWQgcmVn aXN0ZXIgaW50ZXJydXB0cy4gVGhpcyBzdG9wcyBhZnRlciB3ZSB3cml0ZQo+IC0JICogYW55dGhp bmcgdG8gdGhlIFZHQSBNU1IgcmVnaXN0ZXIuIFRoZSB2Z2Fjb24gbW9kdWxlIHVzZXMgdGhpcwo+ IC0JICogcmVnaXN0ZXIgYWxsIHRoZSB0aW1lLCBzbyBpZiB3ZSB1bmJpbmQgb3VyIGRyaXZlciBh bmQsIGFzIGEKPiAtCSAqIGNvbnNlcXVlbmNlLCBiaW5kIHZnYWNvbiwgd2UnbGwgZ2V0IHN0dWNr IGluIGFuIGluZmluaXRlIGxvb3AgYXQKPiAtCSAqIGNvbnNvbGVfdW5sb2NrKCkuIFNvIG1ha2Ug aGVyZSB3ZSB0b3VjaCB0aGUgVkdBIE1TUiByZWdpc3RlciwgbWFraW5nCj4gLQkgKiBzdXJlIHZn YWNvbiBjYW4ga2VlcCB3b3JraW5nIG5vcm1hbGx5IHdpdGhvdXQgdHJpZ2dlcmluZyBpbnRlcnJ1 cHRzCj4gLQkgKiBhbmQgZXJyb3IgbWVzc2FnZXMuCj4gLQkgKi8KPiAtCXZnYV9nZXRfdW5pbnRl cnJ1cHRpYmxlKGRldi0+cGRldiwgVkdBX1JTUkNfTEVHQUNZX0lPKTsKPiAtCW91dGIoaW5iKFZH QV9NU1JfUkVBRCksIFZHQV9NU1JfV1JJVEUpOwo+IC0JdmdhX3B1dChkZXYtPnBkZXYsIFZHQV9S U1JDX0xFR0FDWV9JTyk7Cj4gLQo+IC0JaWYgKElTX0JST0FEV0VMTChkZXYpKQo+IC0JCWdlbjhf aXJxX3Bvd2VyX3dlbGxfcG9zdF9lbmFibGUoZGV2X3ByaXYpOwo+IC19Cj4gLQo+IC1zdGF0aWMg dm9pZCBoc3dfc2V0X3Bvd2VyX3dlbGwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 LAo+IC0JCQkgICAgICAgc3RydWN0IGk5MTVfcG93ZXJfd2VsbCAqcG93ZXJfd2VsbCwgYm9vbCBl bmFibGUpCj4gLXsKPiAtCWJvb2wgaXNfZW5hYmxlZCwgZW5hYmxlX3JlcXVlc3RlZDsKPiAtCXVp bnQzMl90IHRtcDsKPiAtCj4gLQl0bXAgPSBJOTE1X1JFQUQoSFNXX1BXUl9XRUxMX0RSSVZFUik7 Cj4gLQlpc19lbmFibGVkID0gdG1wICYgSFNXX1BXUl9XRUxMX1NUQVRFX0VOQUJMRUQ7Cj4gLQll bmFibGVfcmVxdWVzdGVkID0gdG1wICYgSFNXX1BXUl9XRUxMX0VOQUJMRV9SRVFVRVNUOwo+IC0K PiAtCWlmIChlbmFibGUpIHsKPiAtCQlpZiAoIWVuYWJsZV9yZXF1ZXN0ZWQpCj4gLQkJCUk5MTVf V1JJVEUoSFNXX1BXUl9XRUxMX0RSSVZFUiwKPiAtCQkJCSAgIEhTV19QV1JfV0VMTF9FTkFCTEVf UkVRVUVTVCk7Cj4gLQo+IC0JCWlmICghaXNfZW5hYmxlZCkgewo+IC0JCQlEUk1fREVCVUdfS01T KCJFbmFibGluZyBwb3dlciB3ZWxsXG4iKTsKPiAtCQkJaWYgKHdhaXRfZm9yKChJOTE1X1JFQUQo SFNXX1BXUl9XRUxMX0RSSVZFUikgJgo+IC0JCQkJICAgICAgSFNXX1BXUl9XRUxMX1NUQVRFX0VO QUJMRUQpLCAyMCkpCj4gLQkJCQlEUk1fRVJST1IoIlRpbWVvdXQgZW5hYmxpbmcgcG93ZXIgd2Vs bFxuIik7Cj4gLQkJfQo+IC0KPiAtCQloc3dfcG93ZXJfd2VsbF9wb3N0X2VuYWJsZShkZXZfcHJp dik7Cj4gLQl9IGVsc2Ugewo+IC0JCWlmIChlbmFibGVfcmVxdWVzdGVkKSB7Cj4gLQkJCUk5MTVf V1JJVEUoSFNXX1BXUl9XRUxMX0RSSVZFUiwgMCk7Cj4gLQkJCVBPU1RJTkdfUkVBRChIU1dfUFdS X1dFTExfRFJJVkVSKTsKPiAtCQkJRFJNX0RFQlVHX0tNUygiUmVxdWVzdGluZyB0byBkaXNhYmxl IHRoZSBwb3dlciB3ZWxsXG4iKTsKPiAtCQl9Cj4gLQl9Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lk IGhzd19wb3dlcl93ZWxsX3N5bmNfaHcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 LAo+IC0JCQkJICAgc3RydWN0IGk5MTVfcG93ZXJfd2VsbCAqcG93ZXJfd2VsbCkKPiAtewo+IC0J aHN3X3NldF9wb3dlcl93ZWxsKGRldl9wcml2LCBwb3dlcl93ZWxsLCBwb3dlcl93ZWxsLT5jb3Vu dCA+IDApOwo+IC0KPiAtCS8qCj4gLQkgKiBXZSdyZSB0YWtpbmcgb3ZlciB0aGUgQklPUywgc28g Y2xlYXIgYW55IHJlcXVlc3RzIG1hZGUgYnkgaXQgc2luY2UKPiAtCSAqIHRoZSBkcml2ZXIgaXMg aW4gY2hhcmdlIG5vdy4KPiAtCSAqLwo+IC0JaWYgKEk5MTVfUkVBRChIU1dfUFdSX1dFTExfQklP UykgJiBIU1dfUFdSX1dFTExfRU5BQkxFX1JFUVVFU1QpCj4gLQkJSTkxNV9XUklURShIU1dfUFdS X1dFTExfQklPUywgMCk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGhzd19wb3dlcl93ZWxsX2Vu YWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gLQkJCQkgIHN0cnVjdCBp OTE1X3Bvd2VyX3dlbGwgKnBvd2VyX3dlbGwpCj4gLXsKPiAtCWhzd19zZXRfcG93ZXJfd2VsbChk ZXZfcHJpdiwgcG93ZXJfd2VsbCwgdHJ1ZSk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGhzd19w b3dlcl93ZWxsX2Rpc2FibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IC0J CQkJICAgc3RydWN0IGk5MTVfcG93ZXJfd2VsbCAqcG93ZXJfd2VsbCkKPiAtewo+IC0JaHN3X3Nl dF9wb3dlcl93ZWxsKGRldl9wcml2LCBwb3dlcl93ZWxsLCBmYWxzZSk7Cj4gLX0KPiAtCj4gLXN0 YXRpYyB2b2lkIGk5eHhfYWx3YXlzX29uX3Bvd2VyX3dlbGxfbm9vcChzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYsCj4gLQkJCQkJICAgc3RydWN0IGk5MTVfcG93ZXJfd2VsbCAqcG93 ZXJfd2VsbCkKPiAtewo+IC19Cj4gLQo+IC1zdGF0aWMgYm9vbCBpOXh4X2Fsd2F5c19vbl9wb3dl cl93ZWxsX2VuYWJsZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IC0JCQkJ CSAgICAgc3RydWN0IGk5MTVfcG93ZXJfd2VsbCAqcG93ZXJfd2VsbCkKPiAtewo+IC0JcmV0dXJu IHRydWU7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIHZsdl9zZXRfcG93ZXJfd2VsbChzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gLQkJCSAgICAgICBzdHJ1Y3QgaTkxNV9wb3dl cl93ZWxsICpwb3dlcl93ZWxsLCBib29sIGVuYWJsZSkKPiAtewo+IC0JZW51bSBwdW5pdF9wb3dl cl93ZWxsIHBvd2VyX3dlbGxfaWQgPSBwb3dlcl93ZWxsLT5kYXRhOwo+IC0JdTMyIG1hc2s7Cj4g LQl1MzIgc3RhdGU7Cj4gLQl1MzIgY3RybDsKPiAtCj4gLQltYXNrID0gUFVOSVRfUFdSR1RfTUFT Syhwb3dlcl93ZWxsX2lkKTsKPiAtCXN0YXRlID0gZW5hYmxlID8gUFVOSVRfUFdSR1RfUFdSX09O KHBvd2VyX3dlbGxfaWQpIDoKPiAtCQkJIFBVTklUX1BXUkdUX1BXUl9HQVRFKHBvd2VyX3dlbGxf aWQpOwo+IC0KPiAtCW11dGV4X2xvY2soJmRldl9wcml2LT5ycHMuaHdfbG9jayk7Cj4gLQo+IC0j ZGVmaW5lIENPTkQgXAo+IC0JKCh2bHZfcHVuaXRfcmVhZChkZXZfcHJpdiwgUFVOSVRfUkVHX1BX UkdUX1NUQVRVUykgJiBtYXNrKSA9PSBzdGF0ZSkKPiAtCj4gLQlpZiAoQ09ORCkKPiAtCQlnb3Rv IG91dDsKPiAtCj4gLQljdHJsID0gdmx2X3B1bml0X3JlYWQoZGV2X3ByaXYsIFBVTklUX1JFR19Q V1JHVF9DVFJMKTsKPiAtCWN0cmwgJj0gfm1hc2s7Cj4gLQljdHJsIHw9IHN0YXRlOwo+IC0Jdmx2 X3B1bml0X3dyaXRlKGRldl9wcml2LCBQVU5JVF9SRUdfUFdSR1RfQ1RSTCwgY3RybCk7Cj4gLQo+ IC0JaWYgKHdhaXRfZm9yKENPTkQsIDEwMCkpCj4gLQkJRFJNX0VSUk9SKCJ0aW1vdXQgc2V0dGlu ZyBwb3dlciB3ZWxsIHN0YXRlICUwOHggKCUwOHgpXG4iLAo+IC0JCQkgIHN0YXRlLAo+IC0JCQkg IHZsdl9wdW5pdF9yZWFkKGRldl9wcml2LCBQVU5JVF9SRUdfUFdSR1RfQ1RSTCkpOwo+IC0KPiAt I3VuZGVmIENPTkQKPiAtCj4gLW91dDoKPiAtCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnJwcy5o d19sb2NrKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgdmx2X3Bvd2VyX3dlbGxfc3luY19odyhz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gLQkJCQkgICBzdHJ1Y3QgaTkxNV9w b3dlcl93ZWxsICpwb3dlcl93ZWxsKQo+IC17Cj4gLQl2bHZfc2V0X3Bvd2VyX3dlbGwoZGV2X3By aXYsIHBvd2VyX3dlbGwsIHBvd2VyX3dlbGwtPmNvdW50ID4gMCk7Cj4gLX0KPiAtCj4gLXN0YXRp YyB2b2lkIHZsdl9wb3dlcl93ZWxsX2VuYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYsCj4gLQkJCQkgIHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwgKnBvd2VyX3dlbGwpCj4gLXsK PiAtCXZsdl9zZXRfcG93ZXJfd2VsbChkZXZfcHJpdiwgcG93ZXJfd2VsbCwgdHJ1ZSk7Cj4gLX0K PiAtCj4gLXN0YXRpYyB2b2lkIHZsdl9wb3dlcl93ZWxsX2Rpc2FibGUoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LAo+IC0JCQkJICAgc3RydWN0IGk5MTVfcG93ZXJfd2VsbCAqcG93 ZXJfd2VsbCkKPiAtewo+IC0Jdmx2X3NldF9wb3dlcl93ZWxsKGRldl9wcml2LCBwb3dlcl93ZWxs LCBmYWxzZSk7Cj4gLX0KPiAtCj4gLXN0YXRpYyBib29sIHZsdl9wb3dlcl93ZWxsX2VuYWJsZWQo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IC0JCQkJICAgc3RydWN0IGk5MTVf cG93ZXJfd2VsbCAqcG93ZXJfd2VsbCkKPiAtewo+IC0JaW50IHBvd2VyX3dlbGxfaWQgPSBwb3dl cl93ZWxsLT5kYXRhOwo+IC0JYm9vbCBlbmFibGVkID0gZmFsc2U7Cj4gLQl1MzIgbWFzazsKPiAt CXUzMiBzdGF0ZTsKPiAtCXUzMiBjdHJsOwo+IC0KPiAtCW1hc2sgPSBQVU5JVF9QV1JHVF9NQVNL KHBvd2VyX3dlbGxfaWQpOwo+IC0JY3RybCA9IFBVTklUX1BXUkdUX1BXUl9PTihwb3dlcl93ZWxs X2lkKTsKPiAtCj4gLQltdXRleF9sb2NrKCZkZXZfcHJpdi0+cnBzLmh3X2xvY2spOwo+IC0KPiAt CXN0YXRlID0gdmx2X3B1bml0X3JlYWQoZGV2X3ByaXYsIFBVTklUX1JFR19QV1JHVF9TVEFUVVMp ICYgbWFzazsKPiAtCS8qCj4gLQkgKiBXZSBvbmx5IGV2ZXIgc2V0IHRoZSBwb3dlci1vbiBhbmQg cG93ZXItZ2F0ZSBzdGF0ZXMsIGFueXRoaW5nCj4gLQkgKiBlbHNlIGlzIHVuZXhwZWN0ZWQuCj4g LQkgKi8KPiAtCVdBUk5fT04oc3RhdGUgIT0gUFVOSVRfUFdSR1RfUFdSX09OKHBvd2VyX3dlbGxf aWQpICYmCj4gLQkJc3RhdGUgIT0gUFVOSVRfUFdSR1RfUFdSX0dBVEUocG93ZXJfd2VsbF9pZCkp Owo+IC0JaWYgKHN0YXRlID09IGN0cmwpCj4gLQkJZW5hYmxlZCA9IHRydWU7Cj4gLQo+IC0JLyoK PiAtCSAqIEEgdHJhbnNpZW50IHN0YXRlIGF0IHRoaXMgcG9pbnQgd291bGQgbWVhbiBzb21lIHVu ZXhwZWN0ZWQgcGFydHkKPiAtCSAqIGlzIHBva2luZyBhdCB0aGUgcG93ZXIgY29udHJvbHMgdG9v Lgo+IC0JICovCj4gLQljdHJsID0gdmx2X3B1bml0X3JlYWQoZGV2X3ByaXYsIFBVTklUX1JFR19Q V1JHVF9DVFJMKSAmIG1hc2s7Cj4gLQlXQVJOX09OKGN0cmwgIT0gc3RhdGUpOwo+IC0KPiAtCW11 dGV4X3VubG9jaygmZGV2X3ByaXYtPnJwcy5od19sb2NrKTsKPiAtCj4gLQlyZXR1cm4gZW5hYmxl ZDsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgdmx2X2Rpc3BsYXlfcG93ZXJfd2VsbF9lbmFibGUo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IC0JCQkJCSAgc3RydWN0IGk5MTVf cG93ZXJfd2VsbCAqcG93ZXJfd2VsbCkKPiAtewo+IC0JV0FSTl9PTl9PTkNFKHBvd2VyX3dlbGwt PmRhdGEgIT0gUFVOSVRfUE9XRVJfV0VMTF9ESVNQMkQpOwo+IC0KPiAtCXZsdl9zZXRfcG93ZXJf d2VsbChkZXZfcHJpdiwgcG93ZXJfd2VsbCwgdHJ1ZSk7Cj4gLQo+IC0Jc3Bpbl9sb2NrX2lycSgm ZGV2X3ByaXYtPmlycV9sb2NrKTsKPiAtCXZhbGxleXZpZXdfZW5hYmxlX2Rpc3BsYXlfaXJxcyhk ZXZfcHJpdik7Cj4gLQlzcGluX3VubG9ja19pcnEoJmRldl9wcml2LT5pcnFfbG9jayk7Cj4gLQo+ IC0JLyoKPiAtCSAqIER1cmluZyBkcml2ZXIgaW5pdGlhbGl6YXRpb24vcmVzdW1lIHdlIGNhbiBh dm9pZCByZXN0b3JpbmcgdGhlCj4gLQkgKiBwYXJ0IG9mIHRoZSBIVy9TVyBzdGF0ZSB0aGF0IHdp bGwgYmUgaW5pdGVkIGFueXdheSBleHBsaWNpdGx5Lgo+IC0JICovCj4gLQlpZiAoZGV2X3ByaXYt PnBvd2VyX2RvbWFpbnMuaW5pdGlhbGl6aW5nKQo+IC0JCXJldHVybjsKPiAtCj4gLQlpbnRlbF9o cGRfaW5pdChkZXZfcHJpdi0+ZGV2KTsKPiAtCj4gLQlpOTE1X3JlZGlzYWJsZV92Z2FfcG93ZXJf b24oZGV2X3ByaXYtPmRldik7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIHZsdl9kaXNwbGF5X3Bv d2VyX3dlbGxfZGlzYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gLQkJ CQkJICAgc3RydWN0IGk5MTVfcG93ZXJfd2VsbCAqcG93ZXJfd2VsbCkKPiAtewo+IC0JV0FSTl9P Tl9PTkNFKHBvd2VyX3dlbGwtPmRhdGEgIT0gUFVOSVRfUE9XRVJfV0VMTF9ESVNQMkQpOwo+IC0K PiAtCXNwaW5fbG9ja19pcnEoJmRldl9wcml2LT5pcnFfbG9jayk7Cj4gLQl2YWxsZXl2aWV3X2Rp c2FibGVfZGlzcGxheV9pcnFzKGRldl9wcml2KTsKPiAtCXNwaW5fdW5sb2NrX2lycSgmZGV2X3By aXYtPmlycV9sb2NrKTsKPiAtCj4gLQl2bHZfc2V0X3Bvd2VyX3dlbGwoZGV2X3ByaXYsIHBvd2Vy X3dlbGwsIGZhbHNlKTsKPiAtCj4gLQl2bHZfcG93ZXJfc2VxdWVuY2VyX3Jlc2V0KGRldl9wcml2 KTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgdmx2X2RwaW9fY21uX3Bvd2VyX3dlbGxfZW5hYmxl KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAtCQkJCQkgICBzdHJ1Y3QgaTkx NV9wb3dlcl93ZWxsICpwb3dlcl93ZWxsKQo+IC17Cj4gLQlXQVJOX09OX09OQ0UocG93ZXJfd2Vs bC0+ZGF0YSAhPSBQVU5JVF9QT1dFUl9XRUxMX0RQSU9fQ01OX0JDKTsKPiAtCj4gLQkvKgo+IC0J ICogRW5hYmxlIHRoZSBDUkkgY2xvY2sgc291cmNlIHNvIHdlIGNhbiBnZXQgYXQgdGhlCj4gLQkg KiBkaXNwbGF5IGFuZCB0aGUgcmVmZXJlbmNlIGNsb2NrIGZvciBWR0EKPiAtCSAqIGhvdHBsdWcg LyBtYW51YWwgZGV0ZWN0aW9uLgo+IC0JICovCj4gLQlJOTE1X1dSSVRFKERQTEwoUElQRV9CKSwg STkxNV9SRUFEKERQTEwoUElQRV9CKSkgfAo+IC0JCSAgIERQTExfUkVGQV9DTEtfRU5BQkxFX1ZM ViB8IERQTExfSU5URUdSQVRFRF9DUklfQ0xLX1ZMVik7Cj4gLQl1ZGVsYXkoMSk7IC8qID4xMG5z IGZvciBjbW5yZXNldCwgPjBucyBmb3Igc2lkZXJlc2V0ICovCj4gLQo+IC0Jdmx2X3NldF9wb3dl cl93ZWxsKGRldl9wcml2LCBwb3dlcl93ZWxsLCB0cnVlKTsKPiAtCj4gLQkvKgo+IC0JICogRnJv bSBWTFYyQTBfRFBfZURQX0RQSU9fZHJpdmVyX3ZiaW9zX25vdGVzXzEwLmRvY3ggLQo+IC0JICog IDYuCURlLWFzc2VydCBjbW5fcmVzZXQvc2lkZV9yZXNldC4gU2FtZSBhcyBWTFYgWDAuCj4gLQkg KiAgIGEuCUdVbml0IDB4MjExMCBiaXRbMF0gc2V0IHRvIDEgKGRlZiAwKQo+IC0JICogICBiLglU aGUgb3RoZXIgYml0cyBzdWNoIGFzIHNmciBzZXR0aW5ncyAvIG1vZGVzZWwgbWF5IGFsbAo+IC0J ICoJYmUgc2V0IHRvIDAuCj4gLQkgKgo+IC0JICogVGhpcyBzaG91bGQgb25seSBiZSBkb25lIG9u IGluaXQgYW5kIHJlc3VtZSBmcm9tIFMzIHdpdGgKPiAtCSAqIGJvdGggUExMcyBkaXNhYmxlZCwg b3Igd2UgcmlzayBsb3NpbmcgRFBJTyBhbmQgUExMCj4gLQkgKiBzeW5jaHJvbml6YXRpb24uCj4g LQkgKi8KPiAtCUk5MTVfV1JJVEUoRFBJT19DVEwsIEk5MTVfUkVBRChEUElPX0NUTCkgfCBEUElP X0NNTlJTVCk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIHZsdl9kcGlvX2Ntbl9wb3dlcl93ZWxs X2Rpc2FibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IC0JCQkJCSAgICBz dHJ1Y3QgaTkxNV9wb3dlcl93ZWxsICpwb3dlcl93ZWxsKQo+IC17Cj4gLQllbnVtIHBpcGUgcGlw ZTsKPiAtCj4gLQlXQVJOX09OX09OQ0UocG93ZXJfd2VsbC0+ZGF0YSAhPSBQVU5JVF9QT1dFUl9X RUxMX0RQSU9fQ01OX0JDKTsKPiAtCj4gLQlmb3JfZWFjaF9waXBlKGRldl9wcml2LCBwaXBlKQo+ IC0JCWFzc2VydF9wbGxfZGlzYWJsZWQoZGV2X3ByaXYsIHBpcGUpOwo+IC0KPiAtCS8qIEFzc2Vy dCBjb21tb24gcmVzZXQgKi8KPiAtCUk5MTVfV1JJVEUoRFBJT19DVEwsIEk5MTVfUkVBRChEUElP X0NUTCkgJiB+RFBJT19DTU5SU1QpOwo+IC0KPiAtCXZsdl9zZXRfcG93ZXJfd2VsbChkZXZfcHJp diwgcG93ZXJfd2VsbCwgZmFsc2UpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBjaHZfZHBpb19j bW5fcG93ZXJfd2VsbF9lbmFibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ IC0JCQkJCSAgIHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwgKnBvd2VyX3dlbGwpCj4gLXsKPiAtCWVu dW0gZHBpb19waHkgcGh5Owo+IC0KPiAtCVdBUk5fT05fT05DRShwb3dlcl93ZWxsLT5kYXRhICE9 IFBVTklUX1BPV0VSX1dFTExfRFBJT19DTU5fQkMgJiYKPiAtCQkgICAgIHBvd2VyX3dlbGwtPmRh dGEgIT0gUFVOSVRfUE9XRVJfV0VMTF9EUElPX0NNTl9EKTsKPiAtCj4gLQkvKgo+IC0JICogRW5h YmxlIHRoZSBDUkkgY2xvY2sgc291cmNlIHNvIHdlIGNhbiBnZXQgYXQgdGhlCj4gLQkgKiBkaXNw bGF5IGFuZCB0aGUgcmVmZXJlbmNlIGNsb2NrIGZvciBWR0EKPiAtCSAqIGhvdHBsdWcgLyBtYW51 YWwgZGV0ZWN0aW9uLgo+IC0JICovCj4gLQlpZiAocG93ZXJfd2VsbC0+ZGF0YSA9PSBQVU5JVF9Q T1dFUl9XRUxMX0RQSU9fQ01OX0JDKSB7Cj4gLQkJcGh5ID0gRFBJT19QSFkwOwo+IC0JCUk5MTVf V1JJVEUoRFBMTChQSVBFX0IpLCBJOTE1X1JFQUQoRFBMTChQSVBFX0IpKSB8Cj4gLQkJCSAgIERQ TExfUkVGQV9DTEtfRU5BQkxFX1ZMVik7Cj4gLQkJSTkxNV9XUklURShEUExMKFBJUEVfQiksIEk5 MTVfUkVBRChEUExMKFBJUEVfQikpIHwKPiAtCQkJICAgRFBMTF9SRUZBX0NMS19FTkFCTEVfVkxW IHwgRFBMTF9JTlRFR1JBVEVEX0NSSV9DTEtfVkxWKTsKPiAtCX0gZWxzZSB7Cj4gLQkJcGh5ID0g RFBJT19QSFkxOwo+IC0JCUk5MTVfV1JJVEUoRFBMTChQSVBFX0MpLCBJOTE1X1JFQUQoRFBMTChQ SVBFX0MpKSB8Cj4gLQkJCSAgIERQTExfUkVGQV9DTEtfRU5BQkxFX1ZMViB8IERQTExfSU5URUdS QVRFRF9DUklfQ0xLX1ZMVik7Cj4gLQl9Cj4gLQl1ZGVsYXkoMSk7IC8qID4xMG5zIGZvciBjbW5y ZXNldCwgPjBucyBmb3Igc2lkZXJlc2V0ICovCj4gLQl2bHZfc2V0X3Bvd2VyX3dlbGwoZGV2X3By aXYsIHBvd2VyX3dlbGwsIHRydWUpOwo+IC0KPiAtCS8qIFBvbGwgZm9yIHBoeXB3cmdvb2Qgc2ln bmFsICovCj4gLQlpZiAod2FpdF9mb3IoSTkxNV9SRUFEKERJU1BMQVlfUEhZX1NUQVRVUykgJiBQ SFlfUE9XRVJHT09EKHBoeSksIDEpKQo+IC0JCURSTV9FUlJPUigiRGlzcGxheSBQSFkgJWQgaXMg bm90IHBvd2VyIHVwXG4iLCBwaHkpOwo+IC0KPiAtCUk5MTVfV1JJVEUoRElTUExBWV9QSFlfQ09O VFJPTCwgSTkxNV9SRUFEKERJU1BMQVlfUEhZX0NPTlRST0wpIHwKPiAtCQkgICBQSFlfQ09NX0xB TkVfUkVTRVRfREVBU1NFUlQocGh5KSk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGNodl9kcGlv X2Ntbl9wb3dlcl93ZWxsX2Rpc2FibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 LAo+IC0JCQkJCSAgICBzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsICpwb3dlcl93ZWxsKQo+IC17Cj4g LQllbnVtIGRwaW9fcGh5IHBoeTsKPiAtCj4gLQlXQVJOX09OX09OQ0UocG93ZXJfd2VsbC0+ZGF0 YSAhPSBQVU5JVF9QT1dFUl9XRUxMX0RQSU9fQ01OX0JDICYmCj4gLQkJICAgICBwb3dlcl93ZWxs LT5kYXRhICE9IFBVTklUX1BPV0VSX1dFTExfRFBJT19DTU5fRCk7Cj4gLQo+IC0JaWYgKHBvd2Vy X3dlbGwtPmRhdGEgPT0gUFVOSVRfUE9XRVJfV0VMTF9EUElPX0NNTl9CQykgewo+IC0JCXBoeSA9 IERQSU9fUEhZMDsKPiAtCQlhc3NlcnRfcGxsX2Rpc2FibGVkKGRldl9wcml2LCBQSVBFX0EpOwo+ IC0JCWFzc2VydF9wbGxfZGlzYWJsZWQoZGV2X3ByaXYsIFBJUEVfQik7Cj4gLQl9IGVsc2Ugewo+ IC0JCXBoeSA9IERQSU9fUEhZMTsKPiAtCQlhc3NlcnRfcGxsX2Rpc2FibGVkKGRldl9wcml2LCBQ SVBFX0MpOwo+IC0JfQo+IC0KPiAtCUk5MTVfV1JJVEUoRElTUExBWV9QSFlfQ09OVFJPTCwgSTkx NV9SRUFEKERJU1BMQVlfUEhZX0NPTlRST0wpICYKPiAtCQkgICB+UEhZX0NPTV9MQU5FX1JFU0VU X0RFQVNTRVJUKHBoeSkpOwo+IC0KPiAtCXZsdl9zZXRfcG93ZXJfd2VsbChkZXZfcHJpdiwgcG93 ZXJfd2VsbCwgZmFsc2UpOwo+IC19Cj4gLQo+IC1zdGF0aWMgYm9vbCBjaHZfcGlwZV9wb3dlcl93 ZWxsX2VuYWJsZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IC0JCQkJCXN0 cnVjdCBpOTE1X3Bvd2VyX3dlbGwgKnBvd2VyX3dlbGwpCj4gLXsKPiAtCWVudW0gcGlwZSBwaXBl ID0gcG93ZXJfd2VsbC0+ZGF0YTsKPiAtCWJvb2wgZW5hYmxlZDsKPiAtCXUzMiBzdGF0ZSwgY3Ry bDsKPiAtCj4gLQltdXRleF9sb2NrKCZkZXZfcHJpdi0+cnBzLmh3X2xvY2spOwo+IC0KPiAtCXN0 YXRlID0gdmx2X3B1bml0X3JlYWQoZGV2X3ByaXYsIFBVTklUX1JFR19EU1BGUkVRKSAmIERQX1NT U19NQVNLKHBpcGUpOwo+IC0JLyoKPiAtCSAqIFdlIG9ubHkgZXZlciBzZXQgdGhlIHBvd2VyLW9u IGFuZCBwb3dlci1nYXRlIHN0YXRlcywgYW55dGhpbmcKPiAtCSAqIGVsc2UgaXMgdW5leHBlY3Rl ZC4KPiAtCSAqLwo+IC0JV0FSTl9PTihzdGF0ZSAhPSBEUF9TU1NfUFdSX09OKHBpcGUpICYmIHN0 YXRlICE9IERQX1NTU19QV1JfR0FURShwaXBlKSk7Cj4gLQllbmFibGVkID0gc3RhdGUgPT0gRFBf U1NTX1BXUl9PTihwaXBlKTsKPiAtCj4gLQkvKgo+IC0JICogQSB0cmFuc2llbnQgc3RhdGUgYXQg dGhpcyBwb2ludCB3b3VsZCBtZWFuIHNvbWUgdW5leHBlY3RlZCBwYXJ0eQo+IC0JICogaXMgcG9r aW5nIGF0IHRoZSBwb3dlciBjb250cm9scyB0b28uCj4gLQkgKi8KPiAtCWN0cmwgPSB2bHZfcHVu aXRfcmVhZChkZXZfcHJpdiwgUFVOSVRfUkVHX0RTUEZSRVEpICYgRFBfU1NDX01BU0socGlwZSk7 Cj4gLQlXQVJOX09OKGN0cmwgPDwgMTYgIT0gc3RhdGUpOwo+IC0KPiAtCW11dGV4X3VubG9jaygm ZGV2X3ByaXYtPnJwcy5od19sb2NrKTsKPiAtCj4gLQlyZXR1cm4gZW5hYmxlZDsKPiAtfQo+IC0K PiAtc3RhdGljIHZvaWQgY2h2X3NldF9waXBlX3Bvd2VyX3dlbGwoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LAo+IC0JCQkJICAgIHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwgKnBvd2Vy X3dlbGwsCj4gLQkJCQkgICAgYm9vbCBlbmFibGUpCj4gLXsKPiAtCWVudW0gcGlwZSBwaXBlID0g cG93ZXJfd2VsbC0+ZGF0YTsKPiAtCXUzMiBzdGF0ZTsKPiAtCXUzMiBjdHJsOwo+IC0KPiAtCXN0 YXRlID0gZW5hYmxlID8gRFBfU1NTX1BXUl9PTihwaXBlKSA6IERQX1NTU19QV1JfR0FURShwaXBl KTsKPiAtCj4gLQltdXRleF9sb2NrKCZkZXZfcHJpdi0+cnBzLmh3X2xvY2spOwo+IC0KPiAtI2Rl ZmluZSBDT05EIFwKPiAtCSgodmx2X3B1bml0X3JlYWQoZGV2X3ByaXYsIFBVTklUX1JFR19EU1BG UkVRKSAmIERQX1NTU19NQVNLKHBpcGUpKSA9PSBzdGF0ZSkKPiAtCj4gLQlpZiAoQ09ORCkKPiAt CQlnb3RvIG91dDsKPiAtCj4gLQljdHJsID0gdmx2X3B1bml0X3JlYWQoZGV2X3ByaXYsIFBVTklU X1JFR19EU1BGUkVRKTsKPiAtCWN0cmwgJj0gfkRQX1NTQ19NQVNLKHBpcGUpOwo+IC0JY3RybCB8 PSBlbmFibGUgPyBEUF9TU0NfUFdSX09OKHBpcGUpIDogRFBfU1NDX1BXUl9HQVRFKHBpcGUpOwo+ IC0Jdmx2X3B1bml0X3dyaXRlKGRldl9wcml2LCBQVU5JVF9SRUdfRFNQRlJFUSwgY3RybCk7Cj4g LQo+IC0JaWYgKHdhaXRfZm9yKENPTkQsIDEwMCkpCj4gLQkJRFJNX0VSUk9SKCJ0aW1vdXQgc2V0 dGluZyBwb3dlciB3ZWxsIHN0YXRlICUwOHggKCUwOHgpXG4iLAo+IC0JCQkgIHN0YXRlLAo+IC0J CQkgIHZsdl9wdW5pdF9yZWFkKGRldl9wcml2LCBQVU5JVF9SRUdfRFNQRlJFUSkpOwo+IC0KPiAt I3VuZGVmIENPTkQKPiAtCj4gLW91dDoKPiAtCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnJwcy5o d19sb2NrKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgY2h2X3BpcGVfcG93ZXJfd2VsbF9zeW5j X2h3KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAtCQkJCQlzdHJ1Y3QgaTkx NV9wb3dlcl93ZWxsICpwb3dlcl93ZWxsKQo+IC17Cj4gLQljaHZfc2V0X3BpcGVfcG93ZXJfd2Vs bChkZXZfcHJpdiwgcG93ZXJfd2VsbCwgcG93ZXJfd2VsbC0+Y291bnQgPiAwKTsKPiAtfQo+IC0K PiAtc3RhdGljIHZvaWQgY2h2X3BpcGVfcG93ZXJfd2VsbF9lbmFibGUoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LAo+IC0JCQkJICAgICAgIHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwg KnBvd2VyX3dlbGwpCj4gLXsKPiAtCVdBUk5fT05fT05DRShwb3dlcl93ZWxsLT5kYXRhICE9IFBJ UEVfQSAmJgo+IC0JCSAgICAgcG93ZXJfd2VsbC0+ZGF0YSAhPSBQSVBFX0IgJiYKPiAtCQkgICAg IHBvd2VyX3dlbGwtPmRhdGEgIT0gUElQRV9DKTsKPiAtCj4gLQljaHZfc2V0X3BpcGVfcG93ZXJf d2VsbChkZXZfcHJpdiwgcG93ZXJfd2VsbCwgdHJ1ZSk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lk IGNodl9waXBlX3Bvd2VyX3dlbGxfZGlzYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYsCj4gLQkJCQkJc3RydWN0IGk5MTVfcG93ZXJfd2VsbCAqcG93ZXJfd2VsbCkKPiAtewo+ IC0JV0FSTl9PTl9PTkNFKHBvd2VyX3dlbGwtPmRhdGEgIT0gUElQRV9BICYmCj4gLQkJICAgICBw b3dlcl93ZWxsLT5kYXRhICE9IFBJUEVfQiAmJgo+IC0JCSAgICAgcG93ZXJfd2VsbC0+ZGF0YSAh PSBQSVBFX0MpOwo+IC0KPiAtCWNodl9zZXRfcGlwZV9wb3dlcl93ZWxsKGRldl9wcml2LCBwb3dl cl93ZWxsLCBmYWxzZSk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGNoZWNrX3Bvd2VyX3dlbGxf c3RhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IC0JCQkJICAgc3RydWN0 IGk5MTVfcG93ZXJfd2VsbCAqcG93ZXJfd2VsbCkKPiAtewo+IC0JYm9vbCBlbmFibGVkID0gcG93 ZXJfd2VsbC0+b3BzLT5pc19lbmFibGVkKGRldl9wcml2LCBwb3dlcl93ZWxsKTsKPiAtCj4gLQlp ZiAocG93ZXJfd2VsbC0+YWx3YXlzX29uIHx8ICFpOTE1LmRpc2FibGVfcG93ZXJfd2VsbCkgewo+ IC0JCWlmICghZW5hYmxlZCkKPiAtCQkJZ290byBtaXNtYXRjaDsKPiAtCj4gLQkJcmV0dXJuOwo+ IC0JfQo+IC0KPiAtCWlmIChlbmFibGVkICE9IChwb3dlcl93ZWxsLT5jb3VudCA+IDApKQo+IC0J CWdvdG8gbWlzbWF0Y2g7Cj4gLQo+IC0JcmV0dXJuOwo+IC0KPiAtbWlzbWF0Y2g6Cj4gLQlXQVJO KDEsICJzdGF0ZSBtaXNtYXRjaCBmb3IgJyVzJyAoYWx3YXlzX29uICVkIGh3IHN0YXRlICVkIHVz ZS1jb3VudCAlZCBkaXNhYmxlX3Bvd2VyX3dlbGwgJWRcbiIsCj4gLQkJICBwb3dlcl93ZWxsLT5u YW1lLCBwb3dlcl93ZWxsLT5hbHdheXNfb24sIGVuYWJsZWQsCj4gLQkJICBwb3dlcl93ZWxsLT5j b3VudCwgaTkxNS5kaXNhYmxlX3Bvd2VyX3dlbGwpOwo+IC19Cj4gLQo+IC12b2lkIGludGVsX2Rp c3BsYXlfcG93ZXJfZ2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAtCQkJ ICAgICBlbnVtIGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluIGRvbWFpbikKPiAtewo+IC0Jc3Ry dWN0IGk5MTVfcG93ZXJfZG9tYWlucyAqcG93ZXJfZG9tYWluczsKPiAtCXN0cnVjdCBpOTE1X3Bv d2VyX3dlbGwgKnBvd2VyX3dlbGw7Cj4gLQlpbnQgaTsKPiAtCj4gLQlpbnRlbF9ydW50aW1lX3Bt X2dldChkZXZfcHJpdik7Cj4gLQo+IC0JcG93ZXJfZG9tYWlucyA9ICZkZXZfcHJpdi0+cG93ZXJf ZG9tYWluczsKPiAtCj4gLQltdXRleF9sb2NrKCZwb3dlcl9kb21haW5zLT5sb2NrKTsKPiAtCj4g LQlmb3JfZWFjaF9wb3dlcl93ZWxsKGksIHBvd2VyX3dlbGwsIEJJVChkb21haW4pLCBwb3dlcl9k b21haW5zKSB7Cj4gLQkJaWYgKCFwb3dlcl93ZWxsLT5jb3VudCsrKSB7Cj4gLQkJCURSTV9ERUJV R19LTVMoImVuYWJsaW5nICVzXG4iLCBwb3dlcl93ZWxsLT5uYW1lKTsKPiAtCQkJcG93ZXJfd2Vs bC0+b3BzLT5lbmFibGUoZGV2X3ByaXYsIHBvd2VyX3dlbGwpOwo+IC0JCQlwb3dlcl93ZWxsLT5o d19lbmFibGVkID0gdHJ1ZTsKPiAtCQl9Cj4gLQo+IC0JCWNoZWNrX3Bvd2VyX3dlbGxfc3RhdGUo ZGV2X3ByaXYsIHBvd2VyX3dlbGwpOwo+IC0JfQo+IC0KPiAtCXBvd2VyX2RvbWFpbnMtPmRvbWFp bl91c2VfY291bnRbZG9tYWluXSsrOwo+IC0KPiAtCW11dGV4X3VubG9jaygmcG93ZXJfZG9tYWlu cy0+bG9jayk7Cj4gLX0KPiAtCj4gLXZvaWQgaW50ZWxfZGlzcGxheV9wb3dlcl9wdXQoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IC0JCQkgICAgIGVudW0gaW50ZWxfZGlzcGxh eV9wb3dlcl9kb21haW4gZG9tYWluKQo+IC17Cj4gLQlzdHJ1Y3QgaTkxNV9wb3dlcl9kb21haW5z ICpwb3dlcl9kb21haW5zOwo+IC0Jc3RydWN0IGk5MTVfcG93ZXJfd2VsbCAqcG93ZXJfd2VsbDsK PiAtCWludCBpOwo+IC0KPiAtCXBvd2VyX2RvbWFpbnMgPSAmZGV2X3ByaXYtPnBvd2VyX2RvbWFp bnM7Cj4gLQo+IC0JbXV0ZXhfbG9jaygmcG93ZXJfZG9tYWlucy0+bG9jayk7Cj4gLQo+IC0JV0FS Tl9PTighcG93ZXJfZG9tYWlucy0+ZG9tYWluX3VzZV9jb3VudFtkb21haW5dKTsKPiAtCXBvd2Vy X2RvbWFpbnMtPmRvbWFpbl91c2VfY291bnRbZG9tYWluXS0tOwo+IC0KPiAtCWZvcl9lYWNoX3Bv d2VyX3dlbGxfcmV2KGksIHBvd2VyX3dlbGwsIEJJVChkb21haW4pLCBwb3dlcl9kb21haW5zKSB7 Cj4gLQkJV0FSTl9PTighcG93ZXJfd2VsbC0+Y291bnQpOwo+IC0KPiAtCQlpZiAoIS0tcG93ZXJf d2VsbC0+Y291bnQgJiYgaTkxNS5kaXNhYmxlX3Bvd2VyX3dlbGwpIHsKPiAtCQkJRFJNX0RFQlVH X0tNUygiZGlzYWJsaW5nICVzXG4iLCBwb3dlcl93ZWxsLT5uYW1lKTsKPiAtCQkJcG93ZXJfd2Vs bC0+aHdfZW5hYmxlZCA9IGZhbHNlOwo+IC0JCQlwb3dlcl93ZWxsLT5vcHMtPmRpc2FibGUoZGV2 X3ByaXYsIHBvd2VyX3dlbGwpOwo+IC0JCX0KPiAtCj4gLQkJY2hlY2tfcG93ZXJfd2VsbF9zdGF0 ZShkZXZfcHJpdiwgcG93ZXJfd2VsbCk7Cj4gLQl9Cj4gLQo+IC0JbXV0ZXhfdW5sb2NrKCZwb3dl cl9kb21haW5zLT5sb2NrKTsKPiAtCj4gLQlpbnRlbF9ydW50aW1lX3BtX3B1dChkZXZfcHJpdik7 Cj4gLX0KPiAtCj4gLXN0YXRpYyBzdHJ1Y3QgaTkxNV9wb3dlcl9kb21haW5zICpoc3dfcHdyOwo+ IC0KPiAtLyogRGlzcGxheSBhdWRpbyBkcml2ZXIgcG93ZXIgd2VsbCByZXF1ZXN0ICovCj4gLWlu dCBpOTE1X3JlcXVlc3RfcG93ZXJfd2VsbCh2b2lkKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXY7Cj4gLQo+IC0JaWYgKCFoc3dfcHdyKQo+IC0JCXJldHVybiAtRU5P REVWOwo+IC0KPiAtCWRldl9wcml2ID0gY29udGFpbmVyX29mKGhzd19wd3IsIHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlLAo+IC0JCQkJcG93ZXJfZG9tYWlucyk7Cj4gLQlpbnRlbF9kaXNwbGF5X3Bv d2VyX2dldChkZXZfcHJpdiwgUE9XRVJfRE9NQUlOX0FVRElPKTsKPiAtCXJldHVybiAwOwo+IC19 Cj4gLUVYUE9SVF9TWU1CT0xfR1BMKGk5MTVfcmVxdWVzdF9wb3dlcl93ZWxsKTsKPiAtCj4gLS8q IERpc3BsYXkgYXVkaW8gZHJpdmVyIHBvd2VyIHdlbGwgcmVsZWFzZSAqLwo+IC1pbnQgaTkxNV9y ZWxlYXNlX3Bvd2VyX3dlbGwodm9pZCkKPiAtewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2Owo+IC0KPiAtCWlmICghaHN3X3B3cikKPiAtCQlyZXR1cm4gLUVOT0RFVjsKPiAt Cj4gLQlkZXZfcHJpdiA9IGNvbnRhaW5lcl9vZihoc3dfcHdyLCBzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSwKPiAtCQkJCXBvd2VyX2RvbWFpbnMpOwo+IC0JaW50ZWxfZGlzcGxheV9wb3dlcl9wdXQo ZGV2X3ByaXYsIFBPV0VSX0RPTUFJTl9BVURJTyk7Cj4gLQlyZXR1cm4gMDsKPiAtfQo+IC1FWFBP UlRfU1lNQk9MX0dQTChpOTE1X3JlbGVhc2VfcG93ZXJfd2VsbCk7Cj4gLQo+IC0vKgo+IC0gKiBQ cml2YXRlIGludGVyZmFjZSBmb3IgdGhlIGF1ZGlvIGRyaXZlciB0byBnZXQgQ0RDTEsgaW4ga0h6 Lgo+IC0gKgo+IC0gKiBDYWxsZXIgbXVzdCByZXF1ZXN0IHBvd2VyIHdlbGwgdXNpbmcgaTkxNV9y ZXF1ZXN0X3Bvd2VyX3dlbGwoKSBwcmlvciB0bwo+IC0gKiBtYWtpbmcgdGhlIGNhbGwuCj4gLSAq Lwo+IC1pbnQgaTkxNV9nZXRfY2RjbGtfZnJlcSh2b2lkKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXY7Cj4gLQo+IC0JaWYgKCFoc3dfcHdyKQo+IC0JCXJldHVybiAt RU5PREVWOwo+IC0KPiAtCWRldl9wcml2ID0gY29udGFpbmVyX29mKGhzd19wd3IsIHN0cnVjdCBk cm1faTkxNV9wcml2YXRlLAo+IC0JCQkJcG93ZXJfZG9tYWlucyk7Cj4gLQo+IC0JcmV0dXJuIGlu dGVsX2RkaV9nZXRfY2RjbGtfZnJlcShkZXZfcHJpdik7Cj4gLX0KPiAtRVhQT1JUX1NZTUJPTF9H UEwoaTkxNV9nZXRfY2RjbGtfZnJlcSk7Cj4gLQo+IC0KPiAtI2RlZmluZSBQT1dFUl9ET01BSU5f TUFTSyAoQklUKFBPV0VSX0RPTUFJTl9OVU0pIC0gMSkKPiAtCj4gLSNkZWZpbmUgSFNXX0FMV0FZ U19PTl9QT1dFUl9ET01BSU5TICgJCQlcCj4gLQlCSVQoUE9XRVJfRE9NQUlOX1BJUEVfQSkgfAkJ CVwKPiAtCUJJVChQT1dFUl9ET01BSU5fVFJBTlNDT0RFUl9FRFApIHwJCVwKPiAtCUJJVChQT1dF Ul9ET01BSU5fUE9SVF9ERElfQV8yX0xBTkVTKSB8CQlcCj4gLQlCSVQoUE9XRVJfRE9NQUlOX1BP UlRfRERJX0FfNF9MQU5FUykgfAkJXAo+IC0JQklUKFBPV0VSX0RPTUFJTl9QT1JUX0RESV9CXzJf TEFORVMpIHwJCVwKPiAtCUJJVChQT1dFUl9ET01BSU5fUE9SVF9ERElfQl80X0xBTkVTKSB8CQlc Cj4gLQlCSVQoUE9XRVJfRE9NQUlOX1BPUlRfRERJX0NfMl9MQU5FUykgfAkJXAo+IC0JQklUKFBP V0VSX0RPTUFJTl9QT1JUX0RESV9DXzRfTEFORVMpIHwJCVwKPiAtCUJJVChQT1dFUl9ET01BSU5f UE9SVF9ERElfRF8yX0xBTkVTKSB8CQlcCj4gLQlCSVQoUE9XRVJfRE9NQUlOX1BPUlRfRERJX0Rf NF9MQU5FUykgfAkJXAo+IC0JQklUKFBPV0VSX0RPTUFJTl9QT1JUX0NSVCkgfAkJCVwKPiAtCUJJ VChQT1dFUl9ET01BSU5fUExMUykgfAkJCVwKPiAtCUJJVChQT1dFUl9ET01BSU5fSU5JVCkpCj4g LSNkZWZpbmUgSFNXX0RJU1BMQVlfUE9XRVJfRE9NQUlOUyAoCQkJCVwKPiAtCShQT1dFUl9ET01B SU5fTUFTSyAmIH5IU1dfQUxXQVlTX09OX1BPV0VSX0RPTUFJTlMpIHwJXAo+IC0JQklUKFBPV0VS X0RPTUFJTl9JTklUKSkKPiAtCj4gLSNkZWZpbmUgQkRXX0FMV0FZU19PTl9QT1dFUl9ET01BSU5T ICgJCQlcCj4gLQlIU1dfQUxXQVlTX09OX1BPV0VSX0RPTUFJTlMgfAkJCVwKPiAtCUJJVChQT1dF Ul9ET01BSU5fUElQRV9BX1BBTkVMX0ZJVFRFUikpCj4gLSNkZWZpbmUgQkRXX0RJU1BMQVlfUE9X RVJfRE9NQUlOUyAoCQkJCVwKPiAtCShQT1dFUl9ET01BSU5fTUFTSyAmIH5CRFdfQUxXQVlTX09O X1BPV0VSX0RPTUFJTlMpIHwJXAo+IC0JQklUKFBPV0VSX0RPTUFJTl9JTklUKSkKPiAtCj4gLSNk ZWZpbmUgVkxWX0FMV0FZU19PTl9QT1dFUl9ET01BSU5TCUJJVChQT1dFUl9ET01BSU5fSU5JVCkK PiAtI2RlZmluZSBWTFZfRElTUExBWV9QT1dFUl9ET01BSU5TCVBPV0VSX0RPTUFJTl9NQVNLCj4g LQo+IC0jZGVmaW5lIFZMVl9EUElPX0NNTl9CQ19QT1dFUl9ET01BSU5TICgJCVwKPiAtCUJJVChQ T1dFUl9ET01BSU5fUE9SVF9ERElfQl8yX0xBTkVTKSB8CVwKPiAtCUJJVChQT1dFUl9ET01BSU5f UE9SVF9ERElfQl80X0xBTkVTKSB8CVwKPiAtCUJJVChQT1dFUl9ET01BSU5fUE9SVF9ERElfQ18y X0xBTkVTKSB8CVwKPiAtCUJJVChQT1dFUl9ET01BSU5fUE9SVF9ERElfQ180X0xBTkVTKSB8CVwK PiAtCUJJVChQT1dFUl9ET01BSU5fUE9SVF9DUlQpIHwJCVwKPiAtCUJJVChQT1dFUl9ET01BSU5f SU5JVCkpCj4gLQo+IC0jZGVmaW5lIFZMVl9EUElPX1RYX0JfTEFORVNfMDFfUE9XRVJfRE9NQUlO UyAoCVwKPiAtCUJJVChQT1dFUl9ET01BSU5fUE9SVF9ERElfQl8yX0xBTkVTKSB8CVwKPiAtCUJJ VChQT1dFUl9ET01BSU5fUE9SVF9ERElfQl80X0xBTkVTKSB8CVwKPiAtCUJJVChQT1dFUl9ET01B SU5fSU5JVCkpCj4gLQo+IC0jZGVmaW5lIFZMVl9EUElPX1RYX0JfTEFORVNfMjNfUE9XRVJfRE9N QUlOUyAoCVwKPiAtCUJJVChQT1dFUl9ET01BSU5fUE9SVF9ERElfQl80X0xBTkVTKSB8CVwKPiAt CUJJVChQT1dFUl9ET01BSU5fSU5JVCkpCj4gLQo+IC0jZGVmaW5lIFZMVl9EUElPX1RYX0NfTEFO RVNfMDFfUE9XRVJfRE9NQUlOUyAoCVwKPiAtCUJJVChQT1dFUl9ET01BSU5fUE9SVF9ERElfQ18y X0xBTkVTKSB8CVwKPiAtCUJJVChQT1dFUl9ET01BSU5fUE9SVF9ERElfQ180X0xBTkVTKSB8CVwK PiAtCUJJVChQT1dFUl9ET01BSU5fSU5JVCkpCj4gLQo+IC0jZGVmaW5lIFZMVl9EUElPX1RYX0Nf TEFORVNfMjNfUE9XRVJfRE9NQUlOUyAoCVwKPiAtCUJJVChQT1dFUl9ET01BSU5fUE9SVF9ERElf Q180X0xBTkVTKSB8CVwKPiAtCUJJVChQT1dFUl9ET01BSU5fSU5JVCkpCj4gLQo+IC0jZGVmaW5l IENIVl9QSVBFX0FfUE9XRVJfRE9NQUlOUyAoCVwKPiAtCUJJVChQT1dFUl9ET01BSU5fUElQRV9B KSB8CVwKPiAtCUJJVChQT1dFUl9ET01BSU5fSU5JVCkpCj4gLQo+IC0jZGVmaW5lIENIVl9QSVBF X0JfUE9XRVJfRE9NQUlOUyAoCVwKPiAtCUJJVChQT1dFUl9ET01BSU5fUElQRV9CKSB8CVwKPiAt CUJJVChQT1dFUl9ET01BSU5fSU5JVCkpCj4gLQo+IC0jZGVmaW5lIENIVl9QSVBFX0NfUE9XRVJf RE9NQUlOUyAoCVwKPiAtCUJJVChQT1dFUl9ET01BSU5fUElQRV9DKSB8CVwKPiAtCUJJVChQT1dF Ul9ET01BSU5fSU5JVCkpCj4gLQo+IC0jZGVmaW5lIENIVl9EUElPX0NNTl9CQ19QT1dFUl9ET01B SU5TICgJCVwKPiAtCUJJVChQT1dFUl9ET01BSU5fUE9SVF9ERElfQl8yX0xBTkVTKSB8CVwKPiAt CUJJVChQT1dFUl9ET01BSU5fUE9SVF9ERElfQl80X0xBTkVTKSB8CVwKPiAtCUJJVChQT1dFUl9E T01BSU5fUE9SVF9ERElfQ18yX0xBTkVTKSB8CVwKPiAtCUJJVChQT1dFUl9ET01BSU5fUE9SVF9E RElfQ180X0xBTkVTKSB8CVwKPiAtCUJJVChQT1dFUl9ET01BSU5fSU5JVCkpCj4gLQo+IC0jZGVm aW5lIENIVl9EUElPX0NNTl9EX1BPV0VSX0RPTUFJTlMgKAkJXAo+IC0JQklUKFBPV0VSX0RPTUFJ Tl9QT1JUX0RESV9EXzJfTEFORVMpIHwJXAo+IC0JQklUKFBPV0VSX0RPTUFJTl9QT1JUX0RESV9E XzRfTEFORVMpIHwJXAo+IC0JQklUKFBPV0VSX0RPTUFJTl9JTklUKSkKPiAtCj4gLSNkZWZpbmUg Q0hWX0RQSU9fVFhfRF9MQU5FU18wMV9QT1dFUl9ET01BSU5TICgJXAo+IC0JQklUKFBPV0VSX0RP TUFJTl9QT1JUX0RESV9EXzJfTEFORVMpIHwJXAo+IC0JQklUKFBPV0VSX0RPTUFJTl9QT1JUX0RE SV9EXzRfTEFORVMpIHwJXAo+IC0JQklUKFBPV0VSX0RPTUFJTl9JTklUKSkKPiAtCj4gLSNkZWZp bmUgQ0hWX0RQSU9fVFhfRF9MQU5FU18yM19QT1dFUl9ET01BSU5TICgJXAo+IC0JQklUKFBPV0VS X0RPTUFJTl9QT1JUX0RESV9EXzRfTEFORVMpIHwJXAo+IC0JQklUKFBPV0VSX0RPTUFJTl9JTklU KSkKPiAtCj4gLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsX29wcyBpOXh4X2Fs d2F5c19vbl9wb3dlcl93ZWxsX29wcyA9IHsKPiAtCS5zeW5jX2h3ID0gaTl4eF9hbHdheXNfb25f cG93ZXJfd2VsbF9ub29wLAo+IC0JLmVuYWJsZSA9IGk5eHhfYWx3YXlzX29uX3Bvd2VyX3dlbGxf bm9vcCwKPiAtCS5kaXNhYmxlID0gaTl4eF9hbHdheXNfb25fcG93ZXJfd2VsbF9ub29wLAo+IC0J LmlzX2VuYWJsZWQgPSBpOXh4X2Fsd2F5c19vbl9wb3dlcl93ZWxsX2VuYWJsZWQsCj4gLX07Cj4g LQo+IC1zdGF0aWMgY29uc3Qgc3RydWN0IGk5MTVfcG93ZXJfd2VsbF9vcHMgY2h2X3BpcGVfcG93 ZXJfd2VsbF9vcHMgPSB7Cj4gLQkuc3luY19odyA9IGNodl9waXBlX3Bvd2VyX3dlbGxfc3luY19o dywKPiAtCS5lbmFibGUgPSBjaHZfcGlwZV9wb3dlcl93ZWxsX2VuYWJsZSwKPiAtCS5kaXNhYmxl ID0gY2h2X3BpcGVfcG93ZXJfd2VsbF9kaXNhYmxlLAo+IC0JLmlzX2VuYWJsZWQgPSBjaHZfcGlw ZV9wb3dlcl93ZWxsX2VuYWJsZWQsCj4gLX07Cj4gLQo+IC1zdGF0aWMgY29uc3Qgc3RydWN0IGk5 MTVfcG93ZXJfd2VsbF9vcHMgY2h2X2RwaW9fY21uX3Bvd2VyX3dlbGxfb3BzID0gewo+IC0JLnN5 bmNfaHcgPSB2bHZfcG93ZXJfd2VsbF9zeW5jX2h3LAo+IC0JLmVuYWJsZSA9IGNodl9kcGlvX2Nt bl9wb3dlcl93ZWxsX2VuYWJsZSwKPiAtCS5kaXNhYmxlID0gY2h2X2RwaW9fY21uX3Bvd2VyX3dl bGxfZGlzYWJsZSwKPiAtCS5pc19lbmFibGVkID0gdmx2X3Bvd2VyX3dlbGxfZW5hYmxlZCwKPiAt fTsKPiAtCj4gLXN0YXRpYyBzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsIGk5eHhfYWx3YXlzX29uX3Bv d2VyX3dlbGxbXSA9IHsKPiAtCXsKPiAtCQkubmFtZSA9ICJhbHdheXMtb24iLAo+IC0JCS5hbHdh eXNfb24gPSAxLAo+IC0JCS5kb21haW5zID0gUE9XRVJfRE9NQUlOX01BU0ssCj4gLQkJLm9wcyA9 ICZpOXh4X2Fsd2F5c19vbl9wb3dlcl93ZWxsX29wcywKPiAtCX0sCj4gLX07Cj4gLQo+IC1zdGF0 aWMgY29uc3Qgc3RydWN0IGk5MTVfcG93ZXJfd2VsbF9vcHMgaHN3X3Bvd2VyX3dlbGxfb3BzID0g ewo+IC0JLnN5bmNfaHcgPSBoc3dfcG93ZXJfd2VsbF9zeW5jX2h3LAo+IC0JLmVuYWJsZSA9IGhz d19wb3dlcl93ZWxsX2VuYWJsZSwKPiAtCS5kaXNhYmxlID0gaHN3X3Bvd2VyX3dlbGxfZGlzYWJs ZSwKPiAtCS5pc19lbmFibGVkID0gaHN3X3Bvd2VyX3dlbGxfZW5hYmxlZCwKPiAtfTsKPiAtCj4g LXN0YXRpYyBzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsIGhzd19wb3dlcl93ZWxsc1tdID0gewo+IC0J ewo+IC0JCS5uYW1lID0gImFsd2F5cy1vbiIsCj4gLQkJLmFsd2F5c19vbiA9IDEsCj4gLQkJLmRv bWFpbnMgPSBIU1dfQUxXQVlTX09OX1BPV0VSX0RPTUFJTlMsCj4gLQkJLm9wcyA9ICZpOXh4X2Fs d2F5c19vbl9wb3dlcl93ZWxsX29wcywKPiAtCX0sCj4gLQl7Cj4gLQkJLm5hbWUgPSAiZGlzcGxh eSIsCj4gLQkJLmRvbWFpbnMgPSBIU1dfRElTUExBWV9QT1dFUl9ET01BSU5TLAo+IC0JCS5vcHMg PSAmaHN3X3Bvd2VyX3dlbGxfb3BzLAo+IC0JfSwKPiAtfTsKPiAtCj4gLXN0YXRpYyBzdHJ1Y3Qg aTkxNV9wb3dlcl93ZWxsIGJkd19wb3dlcl93ZWxsc1tdID0gewo+IC0Jewo+IC0JCS5uYW1lID0g ImFsd2F5cy1vbiIsCj4gLQkJLmFsd2F5c19vbiA9IDEsCj4gLQkJLmRvbWFpbnMgPSBCRFdfQUxX QVlTX09OX1BPV0VSX0RPTUFJTlMsCj4gLQkJLm9wcyA9ICZpOXh4X2Fsd2F5c19vbl9wb3dlcl93 ZWxsX29wcywKPiAtCX0sCj4gLQl7Cj4gLQkJLm5hbWUgPSAiZGlzcGxheSIsCj4gLQkJLmRvbWFp bnMgPSBCRFdfRElTUExBWV9QT1dFUl9ET01BSU5TLAo+IC0JCS5vcHMgPSAmaHN3X3Bvd2VyX3dl bGxfb3BzLAo+IC0JfSwKPiAtfTsKPiAtCj4gLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTkxNV9wb3dl cl93ZWxsX29wcyB2bHZfZGlzcGxheV9wb3dlcl93ZWxsX29wcyA9IHsKPiAtCS5zeW5jX2h3ID0g dmx2X3Bvd2VyX3dlbGxfc3luY19odywKPiAtCS5lbmFibGUgPSB2bHZfZGlzcGxheV9wb3dlcl93 ZWxsX2VuYWJsZSwKPiAtCS5kaXNhYmxlID0gdmx2X2Rpc3BsYXlfcG93ZXJfd2VsbF9kaXNhYmxl LAo+IC0JLmlzX2VuYWJsZWQgPSB2bHZfcG93ZXJfd2VsbF9lbmFibGVkLAo+IC19Owo+IC0KPiAt c3RhdGljIGNvbnN0IHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGxfb3BzIHZsdl9kcGlvX2Ntbl9wb3dl cl93ZWxsX29wcyA9IHsKPiAtCS5zeW5jX2h3ID0gdmx2X3Bvd2VyX3dlbGxfc3luY19odywKPiAt CS5lbmFibGUgPSB2bHZfZHBpb19jbW5fcG93ZXJfd2VsbF9lbmFibGUsCj4gLQkuZGlzYWJsZSA9 IHZsdl9kcGlvX2Ntbl9wb3dlcl93ZWxsX2Rpc2FibGUsCj4gLQkuaXNfZW5hYmxlZCA9IHZsdl9w b3dlcl93ZWxsX2VuYWJsZWQsCj4gLX07Cj4gLQo+IC1zdGF0aWMgY29uc3Qgc3RydWN0IGk5MTVf cG93ZXJfd2VsbF9vcHMgdmx2X2RwaW9fcG93ZXJfd2VsbF9vcHMgPSB7Cj4gLQkuc3luY19odyA9 IHZsdl9wb3dlcl93ZWxsX3N5bmNfaHcsCj4gLQkuZW5hYmxlID0gdmx2X3Bvd2VyX3dlbGxfZW5h YmxlLAo+IC0JLmRpc2FibGUgPSB2bHZfcG93ZXJfd2VsbF9kaXNhYmxlLAo+IC0JLmlzX2VuYWJs ZWQgPSB2bHZfcG93ZXJfd2VsbF9lbmFibGVkLAo+IC19Owo+IC0KPiAtc3RhdGljIHN0cnVjdCBp OTE1X3Bvd2VyX3dlbGwgdmx2X3Bvd2VyX3dlbGxzW10gPSB7Cj4gLQl7Cj4gLQkJLm5hbWUgPSAi YWx3YXlzLW9uIiwKPiAtCQkuYWx3YXlzX29uID0gMSwKPiAtCQkuZG9tYWlucyA9IFZMVl9BTFdB WVNfT05fUE9XRVJfRE9NQUlOUywKPiAtCQkub3BzID0gJmk5eHhfYWx3YXlzX29uX3Bvd2VyX3dl bGxfb3BzLAo+IC0JfSwKPiAtCXsKPiAtCQkubmFtZSA9ICJkaXNwbGF5IiwKPiAtCQkuZG9tYWlu cyA9IFZMVl9ESVNQTEFZX1BPV0VSX0RPTUFJTlMsCj4gLQkJLmRhdGEgPSBQVU5JVF9QT1dFUl9X RUxMX0RJU1AyRCwKPiAtCQkub3BzID0gJnZsdl9kaXNwbGF5X3Bvd2VyX3dlbGxfb3BzLAo+IC0J fSwKPiAtCXsKPiAtCQkubmFtZSA9ICJkcGlvLXR4LWItMDEiLAo+IC0JCS5kb21haW5zID0gVkxW X0RQSU9fVFhfQl9MQU5FU18wMV9QT1dFUl9ET01BSU5TIHwKPiAtCQkJICAgVkxWX0RQSU9fVFhf Ql9MQU5FU18yM19QT1dFUl9ET01BSU5TIHwKPiAtCQkJICAgVkxWX0RQSU9fVFhfQ19MQU5FU18w MV9QT1dFUl9ET01BSU5TIHwKPiAtCQkJICAgVkxWX0RQSU9fVFhfQ19MQU5FU18yM19QT1dFUl9E T01BSU5TLAo+IC0JCS5vcHMgPSAmdmx2X2RwaW9fcG93ZXJfd2VsbF9vcHMsCj4gLQkJLmRhdGEg PSBQVU5JVF9QT1dFUl9XRUxMX0RQSU9fVFhfQl9MQU5FU18wMSwKPiAtCX0sCj4gLQl7Cj4gLQkJ Lm5hbWUgPSAiZHBpby10eC1iLTIzIiwKPiAtCQkuZG9tYWlucyA9IFZMVl9EUElPX1RYX0JfTEFO RVNfMDFfUE9XRVJfRE9NQUlOUyB8Cj4gLQkJCSAgIFZMVl9EUElPX1RYX0JfTEFORVNfMjNfUE9X RVJfRE9NQUlOUyB8Cj4gLQkJCSAgIFZMVl9EUElPX1RYX0NfTEFORVNfMDFfUE9XRVJfRE9NQUlO UyB8Cj4gLQkJCSAgIFZMVl9EUElPX1RYX0NfTEFORVNfMjNfUE9XRVJfRE9NQUlOUywKPiAtCQku b3BzID0gJnZsdl9kcGlvX3Bvd2VyX3dlbGxfb3BzLAo+IC0JCS5kYXRhID0gUFVOSVRfUE9XRVJf V0VMTF9EUElPX1RYX0JfTEFORVNfMjMsCj4gLQl9LAo+IC0Jewo+IC0JCS5uYW1lID0gImRwaW8t dHgtYy0wMSIsCj4gLQkJLmRvbWFpbnMgPSBWTFZfRFBJT19UWF9CX0xBTkVTXzAxX1BPV0VSX0RP TUFJTlMgfAo+IC0JCQkgICBWTFZfRFBJT19UWF9CX0xBTkVTXzIzX1BPV0VSX0RPTUFJTlMgfAo+ IC0JCQkgICBWTFZfRFBJT19UWF9DX0xBTkVTXzAxX1BPV0VSX0RPTUFJTlMgfAo+IC0JCQkgICBW TFZfRFBJT19UWF9DX0xBTkVTXzIzX1BPV0VSX0RPTUFJTlMsCj4gLQkJLm9wcyA9ICZ2bHZfZHBp b19wb3dlcl93ZWxsX29wcywKPiAtCQkuZGF0YSA9IFBVTklUX1BPV0VSX1dFTExfRFBJT19UWF9D X0xBTkVTXzAxLAo+IC0JfSwKPiAtCXsKPiAtCQkubmFtZSA9ICJkcGlvLXR4LWMtMjMiLAo+IC0J CS5kb21haW5zID0gVkxWX0RQSU9fVFhfQl9MQU5FU18wMV9QT1dFUl9ET01BSU5TIHwKPiAtCQkJ ICAgVkxWX0RQSU9fVFhfQl9MQU5FU18yM19QT1dFUl9ET01BSU5TIHwKPiAtCQkJICAgVkxWX0RQ SU9fVFhfQ19MQU5FU18wMV9QT1dFUl9ET01BSU5TIHwKPiAtCQkJICAgVkxWX0RQSU9fVFhfQ19M QU5FU18yM19QT1dFUl9ET01BSU5TLAo+IC0JCS5vcHMgPSAmdmx2X2RwaW9fcG93ZXJfd2VsbF9v cHMsCj4gLQkJLmRhdGEgPSBQVU5JVF9QT1dFUl9XRUxMX0RQSU9fVFhfQ19MQU5FU18yMywKPiAt CX0sCj4gLQl7Cj4gLQkJLm5hbWUgPSAiZHBpby1jb21tb24iLAo+IC0JCS5kb21haW5zID0gVkxW X0RQSU9fQ01OX0JDX1BPV0VSX0RPTUFJTlMsCj4gLQkJLmRhdGEgPSBQVU5JVF9QT1dFUl9XRUxM X0RQSU9fQ01OX0JDLAo+IC0JCS5vcHMgPSAmdmx2X2RwaW9fY21uX3Bvd2VyX3dlbGxfb3BzLAo+ IC0JfSwKPiAtfTsKPiAtCj4gLXN0YXRpYyBzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsIGNodl9wb3dl cl93ZWxsc1tdID0gewo+IC0Jewo+IC0JCS5uYW1lID0gImFsd2F5cy1vbiIsCj4gLQkJLmFsd2F5 c19vbiA9IDEsCj4gLQkJLmRvbWFpbnMgPSBWTFZfQUxXQVlTX09OX1BPV0VSX0RPTUFJTlMsCj4g LQkJLm9wcyA9ICZpOXh4X2Fsd2F5c19vbl9wb3dlcl93ZWxsX29wcywKPiAtCX0sCj4gLSNpZiAw Cj4gLQl7Cj4gLQkJLm5hbWUgPSAiZGlzcGxheSIsCj4gLQkJLmRvbWFpbnMgPSBWTFZfRElTUExB WV9QT1dFUl9ET01BSU5TLAo+IC0JCS5kYXRhID0gUFVOSVRfUE9XRVJfV0VMTF9ESVNQMkQsCj4g LQkJLm9wcyA9ICZ2bHZfZGlzcGxheV9wb3dlcl93ZWxsX29wcywKPiAtCX0sCj4gLQl7Cj4gLQkJ Lm5hbWUgPSAicGlwZS1hIiwKPiAtCQkuZG9tYWlucyA9IENIVl9QSVBFX0FfUE9XRVJfRE9NQUlO UywKPiAtCQkuZGF0YSA9IFBJUEVfQSwKPiAtCQkub3BzID0gJmNodl9waXBlX3Bvd2VyX3dlbGxf b3BzLAo+IC0JfSwKPiAtCXsKPiAtCQkubmFtZSA9ICJwaXBlLWIiLAo+IC0JCS5kb21haW5zID0g Q0hWX1BJUEVfQl9QT1dFUl9ET01BSU5TLAo+IC0JCS5kYXRhID0gUElQRV9CLAo+IC0JCS5vcHMg PSAmY2h2X3BpcGVfcG93ZXJfd2VsbF9vcHMsCj4gLQl9LAo+IC0Jewo+IC0JCS5uYW1lID0gInBp cGUtYyIsCj4gLQkJLmRvbWFpbnMgPSBDSFZfUElQRV9DX1BPV0VSX0RPTUFJTlMsCj4gLQkJLmRh dGEgPSBQSVBFX0MsCj4gLQkJLm9wcyA9ICZjaHZfcGlwZV9wb3dlcl93ZWxsX29wcywKPiAtCX0s Cj4gLSNlbmRpZgo+IC0Jewo+IC0JCS5uYW1lID0gImRwaW8tY29tbW9uLWJjIiwKPiAtCQkvKgo+ IC0JCSAqIFhYWDogY21ucmVzZXQgZm9yIG9uZSBQSFkgc2VlbXMgdG8gZGlzdHVyYiB0aGUgb3Ro ZXIuCj4gLQkJICogQXMgYSB3b3JrYXJvdW5kIGtlZXAgYm90aCBwb3dlcmVkIG9uIGF0IHRoZSBz YW1lCj4gLQkJICogdGltZSBmb3Igbm93Lgo+IC0JCSAqLwo+IC0JCS5kb21haW5zID0gQ0hWX0RQ SU9fQ01OX0JDX1BPV0VSX0RPTUFJTlMgfCBDSFZfRFBJT19DTU5fRF9QT1dFUl9ET01BSU5TLAo+ IC0JCS5kYXRhID0gUFVOSVRfUE9XRVJfV0VMTF9EUElPX0NNTl9CQywKPiAtCQkub3BzID0gJmNo dl9kcGlvX2Ntbl9wb3dlcl93ZWxsX29wcywKPiAtCX0sCj4gLQl7Cj4gLQkJLm5hbWUgPSAiZHBp by1jb21tb24tZCIsCj4gLQkJLyoKPiAtCQkgKiBYWFg6IGNtbnJlc2V0IGZvciBvbmUgUEhZIHNl ZW1zIHRvIGRpc3R1cmIgdGhlIG90aGVyLgo+IC0JCSAqIEFzIGEgd29ya2Fyb3VuZCBrZWVwIGJv dGggcG93ZXJlZCBvbiBhdCB0aGUgc2FtZQo+IC0JCSAqIHRpbWUgZm9yIG5vdy4KPiAtCQkgKi8K PiAtCQkuZG9tYWlucyA9IENIVl9EUElPX0NNTl9CQ19QT1dFUl9ET01BSU5TIHwgQ0hWX0RQSU9f Q01OX0RfUE9XRVJfRE9NQUlOUywKPiAtCQkuZGF0YSA9IFBVTklUX1BPV0VSX1dFTExfRFBJT19D TU5fRCwKPiAtCQkub3BzID0gJmNodl9kcGlvX2Ntbl9wb3dlcl93ZWxsX29wcywKPiAtCX0sCj4g LSNpZiAwCj4gLQl7Cj4gLQkJLm5hbWUgPSAiZHBpby10eC1iLTAxIiwKPiAtCQkuZG9tYWlucyA9 IFZMVl9EUElPX1RYX0JfTEFORVNfMDFfUE9XRVJfRE9NQUlOUyB8Cj4gLQkJCSAgIFZMVl9EUElP X1RYX0JfTEFORVNfMjNfUE9XRVJfRE9NQUlOUywKPiAtCQkub3BzID0gJnZsdl9kcGlvX3Bvd2Vy X3dlbGxfb3BzLAo+IC0JCS5kYXRhID0gUFVOSVRfUE9XRVJfV0VMTF9EUElPX1RYX0JfTEFORVNf MDEsCj4gLQl9LAo+IC0Jewo+IC0JCS5uYW1lID0gImRwaW8tdHgtYi0yMyIsCj4gLQkJLmRvbWFp bnMgPSBWTFZfRFBJT19UWF9CX0xBTkVTXzAxX1BPV0VSX0RPTUFJTlMgfAo+IC0JCQkgICBWTFZf RFBJT19UWF9CX0xBTkVTXzIzX1BPV0VSX0RPTUFJTlMsCj4gLQkJLm9wcyA9ICZ2bHZfZHBpb19w b3dlcl93ZWxsX29wcywKPiAtCQkuZGF0YSA9IFBVTklUX1BPV0VSX1dFTExfRFBJT19UWF9CX0xB TkVTXzIzLAo+IC0JfSwKPiAtCXsKPiAtCQkubmFtZSA9ICJkcGlvLXR4LWMtMDEiLAo+IC0JCS5k b21haW5zID0gVkxWX0RQSU9fVFhfQ19MQU5FU18wMV9QT1dFUl9ET01BSU5TIHwKPiAtCQkJICAg VkxWX0RQSU9fVFhfQ19MQU5FU18yM19QT1dFUl9ET01BSU5TLAo+IC0JCS5vcHMgPSAmdmx2X2Rw aW9fcG93ZXJfd2VsbF9vcHMsCj4gLQkJLmRhdGEgPSBQVU5JVF9QT1dFUl9XRUxMX0RQSU9fVFhf Q19MQU5FU18wMSwKPiAtCX0sCj4gLQl7Cj4gLQkJLm5hbWUgPSAiZHBpby10eC1jLTIzIiwKPiAt CQkuZG9tYWlucyA9IFZMVl9EUElPX1RYX0NfTEFORVNfMDFfUE9XRVJfRE9NQUlOUyB8Cj4gLQkJ CSAgIFZMVl9EUElPX1RYX0NfTEFORVNfMjNfUE9XRVJfRE9NQUlOUywKPiAtCQkub3BzID0gJnZs dl9kcGlvX3Bvd2VyX3dlbGxfb3BzLAo+IC0JCS5kYXRhID0gUFVOSVRfUE9XRVJfV0VMTF9EUElP X1RYX0NfTEFORVNfMjMsCj4gLQl9LAo+IC0Jewo+IC0JCS5uYW1lID0gImRwaW8tdHgtZC0wMSIs Cj4gLQkJLmRvbWFpbnMgPSBDSFZfRFBJT19UWF9EX0xBTkVTXzAxX1BPV0VSX0RPTUFJTlMgfAo+ IC0JCQkgICBDSFZfRFBJT19UWF9EX0xBTkVTXzIzX1BPV0VSX0RPTUFJTlMsCj4gLQkJLm9wcyA9 ICZ2bHZfZHBpb19wb3dlcl93ZWxsX29wcywKPiAtCQkuZGF0YSA9IFBVTklUX1BPV0VSX1dFTExf RFBJT19UWF9EX0xBTkVTXzAxLAo+IC0JfSwKPiAtCXsKPiAtCQkubmFtZSA9ICJkcGlvLXR4LWQt MjMiLAo+IC0JCS5kb21haW5zID0gQ0hWX0RQSU9fVFhfRF9MQU5FU18wMV9QT1dFUl9ET01BSU5T IHwKPiAtCQkJICAgQ0hWX0RQSU9fVFhfRF9MQU5FU18yM19QT1dFUl9ET01BSU5TLAo+IC0JCS5v cHMgPSAmdmx2X2RwaW9fcG93ZXJfd2VsbF9vcHMsCj4gLQkJLmRhdGEgPSBQVU5JVF9QT1dFUl9X RUxMX0RQSU9fVFhfRF9MQU5FU18yMywKPiAtCX0sCj4gLSNlbmRpZgo+IC19Owo+IC0KPiAtc3Rh dGljIHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwgKmxvb2t1cF9wb3dlcl93ZWxsKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAtCQkJCQkJIGVudW0gcHVuaXRfcG93ZXJfd2VsbCBw b3dlcl93ZWxsX2lkKQo+IC17Cj4gLQlzdHJ1Y3QgaTkxNV9wb3dlcl9kb21haW5zICpwb3dlcl9k b21haW5zID0gJmRldl9wcml2LT5wb3dlcl9kb21haW5zOwo+IC0Jc3RydWN0IGk5MTVfcG93ZXJf d2VsbCAqcG93ZXJfd2VsbDsKPiAtCWludCBpOwo+IC0KPiAtCWZvcl9lYWNoX3Bvd2VyX3dlbGwo aSwgcG93ZXJfd2VsbCwgUE9XRVJfRE9NQUlOX01BU0ssIHBvd2VyX2RvbWFpbnMpIHsKPiAtCQlp ZiAocG93ZXJfd2VsbC0+ZGF0YSA9PSBwb3dlcl93ZWxsX2lkKQo+IC0JCQlyZXR1cm4gcG93ZXJf d2VsbDsKPiAtCX0KPiAtCj4gLQlyZXR1cm4gTlVMTDsKPiAtfQo+IC0KPiAtI2RlZmluZSBzZXRf cG93ZXJfd2VsbHMocG93ZXJfZG9tYWlucywgX19wb3dlcl93ZWxscykgKHsJCVwKPiAtCShwb3dl cl9kb21haW5zKS0+cG93ZXJfd2VsbHMgPSAoX19wb3dlcl93ZWxscyk7CQkJXAo+IC0JKHBvd2Vy X2RvbWFpbnMpLT5wb3dlcl93ZWxsX2NvdW50ID0gQVJSQVlfU0laRShfX3Bvd2VyX3dlbGxzKTsJ XAo+IC19KQo+IC0KPiAtaW50IGludGVsX3Bvd2VyX2RvbWFpbnNfaW5pdChzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gLXsKPiAtCXN0cnVjdCBpOTE1X3Bvd2VyX2RvbWFpbnMg KnBvd2VyX2RvbWFpbnMgPSAmZGV2X3ByaXYtPnBvd2VyX2RvbWFpbnM7Cj4gLQo+IC0JbXV0ZXhf aW5pdCgmcG93ZXJfZG9tYWlucy0+bG9jayk7Cj4gLQo+IC0JLyoKPiAtCSAqIFRoZSBlbmFibGlu ZyBvcmRlciB3aWxsIGJlIGZyb20gbG93ZXIgdG8gaGlnaGVyIGluZGV4ZWQgd2VsbHMsCj4gLQkg KiB0aGUgZGlzYWJsaW5nIG9yZGVyIGlzIHJldmVyc2VkLgo+IC0JICovCj4gLQlpZiAoSVNfSEFT V0VMTChkZXZfcHJpdi0+ZGV2KSkgewo+IC0JCXNldF9wb3dlcl93ZWxscyhwb3dlcl9kb21haW5z LCBoc3dfcG93ZXJfd2VsbHMpOwo+IC0JCWhzd19wd3IgPSBwb3dlcl9kb21haW5zOwo+IC0JfSBl bHNlIGlmIChJU19CUk9BRFdFTEwoZGV2X3ByaXYtPmRldikpIHsKPiAtCQlzZXRfcG93ZXJfd2Vs bHMocG93ZXJfZG9tYWlucywgYmR3X3Bvd2VyX3dlbGxzKTsKPiAtCQloc3dfcHdyID0gcG93ZXJf ZG9tYWluczsKPiAtCX0gZWxzZSBpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdi0+ZGV2KSkgewo+ IC0JCXNldF9wb3dlcl93ZWxscyhwb3dlcl9kb21haW5zLCBjaHZfcG93ZXJfd2VsbHMpOwo+IC0J fSBlbHNlIGlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2LT5kZXYpKSB7Cj4gLQkJc2V0X3Bvd2Vy X3dlbGxzKHBvd2VyX2RvbWFpbnMsIHZsdl9wb3dlcl93ZWxscyk7Cj4gLQl9IGVsc2Ugewo+IC0J CXNldF9wb3dlcl93ZWxscyhwb3dlcl9kb21haW5zLCBpOXh4X2Fsd2F5c19vbl9wb3dlcl93ZWxs KTsKPiAtCX0KPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtdm9pZCBpbnRlbF9wb3dlcl9k b21haW5zX3JlbW92ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gLXsKPiAt CWhzd19wd3IgPSBOVUxMOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBpbnRlbF9wb3dlcl9kb21h aW5zX3Jlc3VtZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gLXsKPiAtCXN0 cnVjdCBpOTE1X3Bvd2VyX2RvbWFpbnMgKnBvd2VyX2RvbWFpbnMgPSAmZGV2X3ByaXYtPnBvd2Vy X2RvbWFpbnM7Cj4gLQlzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsICpwb3dlcl93ZWxsOwo+IC0JaW50 IGk7Cj4gLQo+IC0JbXV0ZXhfbG9jaygmcG93ZXJfZG9tYWlucy0+bG9jayk7Cj4gLQlmb3JfZWFj aF9wb3dlcl93ZWxsKGksIHBvd2VyX3dlbGwsIFBPV0VSX0RPTUFJTl9NQVNLLCBwb3dlcl9kb21h aW5zKSB7Cj4gLQkJcG93ZXJfd2VsbC0+b3BzLT5zeW5jX2h3KGRldl9wcml2LCBwb3dlcl93ZWxs KTsKPiAtCQlwb3dlcl93ZWxsLT5od19lbmFibGVkID0gcG93ZXJfd2VsbC0+b3BzLT5pc19lbmFi bGVkKGRldl9wcml2LAo+IC0JCQkJCQkJCSAgICAgcG93ZXJfd2VsbCk7Cj4gLQl9Cj4gLQltdXRl eF91bmxvY2soJnBvd2VyX2RvbWFpbnMtPmxvY2spOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCB2 bHZfY21ubGFuZV93YShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gLXsKPiAt CXN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwgKmNtbiA9Cj4gLQkJbG9va3VwX3Bvd2VyX3dlbGwoZGV2 X3ByaXYsIFBVTklUX1BPV0VSX1dFTExfRFBJT19DTU5fQkMpOwo+IC0Jc3RydWN0IGk5MTVfcG93 ZXJfd2VsbCAqZGlzcDJkID0KPiAtCQlsb29rdXBfcG93ZXJfd2VsbChkZXZfcHJpdiwgUFVOSVRf UE9XRVJfV0VMTF9ESVNQMkQpOwo+IC0KPiAtCS8qIG5vdGhpbmcgdG8gZG8gaWYgY29tbW9uIGxh bmUgaXMgYWxyZWFkeSBvZmYgKi8KPiAtCWlmICghY21uLT5vcHMtPmlzX2VuYWJsZWQoZGV2X3By aXYsIGNtbikpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCS8qIElmIHRoZSBkaXNwbGF5IG1pZ2h0IGJl IGFscmVhZHkgYWN0aXZlIHNraXAgdGhpcyAqLwo+IC0JaWYgKGRpc3AyZC0+b3BzLT5pc19lbmFi bGVkKGRldl9wcml2LCBkaXNwMmQpICYmCj4gLQkgICAgSTkxNV9SRUFEKERQSU9fQ1RMKSAmIERQ SU9fQ01OUlNUKQo+IC0JCXJldHVybjsKPiAtCj4gLQlEUk1fREVCVUdfS01TKCJ0b2dnbGluZyBk aXNwbGF5IFBIWSBzaWRlIHJlc2V0XG4iKTsKPiAtCj4gLQkvKiBjbW5sYW5lIG5lZWRzIERQTEwg cmVnaXN0ZXJzICovCj4gLQlkaXNwMmQtPm9wcy0+ZW5hYmxlKGRldl9wcml2LCBkaXNwMmQpOwo+ IC0KPiAtCS8qCj4gLQkgKiBGcm9tIFZMVjJBMF9EUF9lRFBfSERNSV9EUElPX2RyaXZlcl92Ymlv c19ub3Rlc18xMS5kb2N4Ogo+IC0JICogTmVlZCB0byBhc3NlcnQgYW5kIGRlLWFzc2VydCBQSFkg U0IgcmVzZXQgYnkgZ2F0aW5nIHRoZQo+IC0JICogY29tbW9uIGxhbmUgcG93ZXIsIHRoZW4gdW4t Z2F0aW5nIGl0Lgo+IC0JICogU2ltcGx5IHVuZ2F0aW5nIGlzbid0IGVub3VnaCB0byByZXNldCB0 aGUgUEhZIGVub3VnaCB0byBnZXQKPiAtCSAqIHBvcnRzIGFuZCBsYW5lcyBydW5uaW5nLgo+IC0J ICovCj4gLQljbW4tPm9wcy0+ZGlzYWJsZShkZXZfcHJpdiwgY21uKTsKPiAtfQo+IC0KPiAtdm9p ZCBpbnRlbF9wb3dlcl9kb21haW5zX2luaXRfaHcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZGV2X3ByaXYtPmRldjsK PiAtCXN0cnVjdCBpOTE1X3Bvd2VyX2RvbWFpbnMgKnBvd2VyX2RvbWFpbnMgPSAmZGV2X3ByaXYt PnBvd2VyX2RvbWFpbnM7Cj4gLQo+IC0JcG93ZXJfZG9tYWlucy0+aW5pdGlhbGl6aW5nID0gdHJ1 ZTsKPiAtCj4gLQlpZiAoSVNfVkFMTEVZVklFVyhkZXYpICYmICFJU19DSEVSUllWSUVXKGRldikp IHsKPiAtCQltdXRleF9sb2NrKCZwb3dlcl9kb21haW5zLT5sb2NrKTsKPiAtCQl2bHZfY21ubGFu ZV93YShkZXZfcHJpdik7Cj4gLQkJbXV0ZXhfdW5sb2NrKCZwb3dlcl9kb21haW5zLT5sb2NrKTsK PiAtCX0KPiAtCj4gLQkvKiBGb3Igbm93LCB3ZSBuZWVkIHRoZSBwb3dlciB3ZWxsIHRvIGJlIGFs d2F5cyBlbmFibGVkLiAqLwo+IC0JaW50ZWxfZGlzcGxheV9zZXRfaW5pdF9wb3dlcihkZXZfcHJp diwgdHJ1ZSk7Cj4gLQlpbnRlbF9wb3dlcl9kb21haW5zX3Jlc3VtZShkZXZfcHJpdik7Cj4gLQlw b3dlcl9kb21haW5zLT5pbml0aWFsaXppbmcgPSBmYWxzZTsKPiAtfQo+IC0KPiAtdm9pZCBpbnRl bF9hdXhfZGlzcGxheV9ydW50aW1lX2dldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpCj4gLXsKPiAtCWludGVsX3J1bnRpbWVfcG1fZ2V0KGRldl9wcml2KTsKPiAtfQo+IC0KPiAt dm9pZCBpbnRlbF9hdXhfZGlzcGxheV9ydW50aW1lX3B1dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYpCj4gLXsKPiAtCWludGVsX3J1bnRpbWVfcG1fcHV0KGRldl9wcml2KTsKPiAt fQo+IC0KPiAtdm9pZCBpbnRlbF9ydW50aW1lX3BtX2dldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYpCj4gLXsKPiAtCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkZXZfcHJpdi0+ ZGV2Owo+IC0Jc3RydWN0IGRldmljZSAqZGV2aWNlID0gJmRldi0+cGRldi0+ZGV2Owo+IC0KPiAt CWlmICghSEFTX1JVTlRJTUVfUE0oZGV2KSkKPiAtCQlyZXR1cm47Cj4gLQo+IC0JcG1fcnVudGlt ZV9nZXRfc3luYyhkZXZpY2UpOwo+IC0JV0FSTihkZXZfcHJpdi0+cG0uc3VzcGVuZGVkLCAiRGV2 aWNlIHN0aWxsIHN1c3BlbmRlZC5cbiIpOwo+IC19Cj4gLQo+IC12b2lkIGludGVsX3J1bnRpbWVf cG1fZ2V0X25vcmVzdW1lKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+ IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRldl9wcml2LT5kZXY7Cj4gLQlzdHJ1Y3QgZGV2 aWNlICpkZXZpY2UgPSAmZGV2LT5wZGV2LT5kZXY7Cj4gLQo+IC0JaWYgKCFIQVNfUlVOVElNRV9Q TShkZXYpKQo+IC0JCXJldHVybjsKPiAtCj4gLQlXQVJOKGRldl9wcml2LT5wbS5zdXNwZW5kZWQs ICJHZXR0aW5nIG5vc3luYy1yZWYgd2hpbGUgc3VzcGVuZGVkLlxuIik7Cj4gLQlwbV9ydW50aW1l X2dldF9ub3Jlc3VtZShkZXZpY2UpOwo+IC19Cj4gLQo+IC12b2lkIGludGVsX3J1bnRpbWVfcG1f cHV0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0Jc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9IGRldl9wcml2LT5kZXY7Cj4gLQlzdHJ1Y3QgZGV2aWNlICpkZXZpY2Ug PSAmZGV2LT5wZGV2LT5kZXY7Cj4gLQo+IC0JaWYgKCFIQVNfUlVOVElNRV9QTShkZXYpKQo+IC0J CXJldHVybjsKPiAtCj4gLQlwbV9ydW50aW1lX21hcmtfbGFzdF9idXN5KGRldmljZSk7Cj4gLQlw bV9ydW50aW1lX3B1dF9hdXRvc3VzcGVuZChkZXZpY2UpOwo+IC19Cj4gLQo+IC12b2lkIGludGVs X2luaXRfcnVudGltZV9wbShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gLXsK PiAtCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkZXZfcHJpdi0+ZGV2Owo+IC0Jc3RydWN0IGRl dmljZSAqZGV2aWNlID0gJmRldi0+cGRldi0+ZGV2Owo+IC0KPiAtCWlmICghSEFTX1JVTlRJTUVf UE0oZGV2KSkKPiAtCQlyZXR1cm47Cj4gLQo+IC0JcG1fcnVudGltZV9zZXRfYWN0aXZlKGRldmlj ZSk7Cj4gLQo+IC0JLyoKPiAtCSAqIFJQTSBkZXBlbmRzIG9uIFJDNiB0byBzYXZlIHJlc3RvcmUg dGhlIEdUIEhXIGNvbnRleHQsIHNvIG1ha2UgUkM2IGEKPiAtCSAqIHJlcXVpcmVtZW50Lgo+IC0J ICovCj4gLQlpZiAoIWludGVsX2VuYWJsZV9yYzYoZGV2KSkgewo+IC0JCURSTV9JTkZPKCJSQzYg ZGlzYWJsZWQsIGRpc2FibGluZyBydW50aW1lIFBNIHN1cHBvcnRcbiIpOwo+IC0JCXJldHVybjsK PiAtCX0KPiAtCj4gLQlwbV9ydW50aW1lX3NldF9hdXRvc3VzcGVuZF9kZWxheShkZXZpY2UsIDEw MDAwKTsgLyogMTBzICovCj4gLQlwbV9ydW50aW1lX21hcmtfbGFzdF9idXN5KGRldmljZSk7Cj4g LQlwbV9ydW50aW1lX3VzZV9hdXRvc3VzcGVuZChkZXZpY2UpOwo+IC0KPiAtCXBtX3J1bnRpbWVf cHV0X2F1dG9zdXNwZW5kKGRldmljZSk7Cj4gLX0KPiAtCj4gLXZvaWQgaW50ZWxfZmluaV9ydW50 aW1lX3BtKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0Jc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9IGRldl9wcml2LT5kZXY7Cj4gLQlzdHJ1Y3QgZGV2aWNlICpkZXZp Y2UgPSAmZGV2LT5wZGV2LT5kZXY7Cj4gLQo+IC0JaWYgKCFIQVNfUlVOVElNRV9QTShkZXYpKQo+ IC0JCXJldHVybjsKPiAtCj4gLQlpZiAoIWludGVsX2VuYWJsZV9yYzYoZGV2KSkKPiAtCQlyZXR1 cm47Cj4gLQo+IC0JLyogTWFrZSBzdXJlIHdlJ3JlIG5vdCBzdXNwZW5kZWQgZmlyc3QuICovCj4g LQlwbV9ydW50aW1lX2dldF9zeW5jKGRldmljZSk7Cj4gLQlwbV9ydW50aW1lX2Rpc2FibGUoZGV2 aWNlKTsKPiAtfQo+ICAKPiAgc3RhdGljIHZvaWQgaW50ZWxfaW5pdF9mYmMoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICB7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX3J1bnRpbWVfcG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3J1 bnRpbWVfcG0uYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi4y M2Y5N2VlNzlmZGUKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfcnVudGltZV9wbS5jCj4gQEAgLTAsMCArMSwxMTkwIEBACj4gKy8qCj4gKyAqIENvcHly aWdodCDCqSAyMDEyLTIwMTQgSW50ZWwgQ29ycG9yYXRpb24KPiArICoKPiArICogUGVybWlzc2lv biBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWlu aW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50 YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdh cmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ICsg KiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJp YnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2Fy ZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1 cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4g KyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g bm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNs dWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsgKiBT b2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJ VEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5D TFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5H RU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQg SE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsgKiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVS V0lTRSwgQVJJU0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRI RSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4gKyAqIElOIFRIRSBTT0ZU V0FSRS4KPiArICoKPiArICogQXV0aG9yczoKPiArICogICAgRXVnZW5pIERvZG9ub3YgPGV1Z2Vu aS5kb2Rvbm92QGludGVsLmNvbT4KPiArICogICAgRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRl ckBmZndsbC5jaD4KPiArICoKPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvcG1fcnVudGlt ZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvdmdhYXJiLmg+Cj4gKwo+ICsjaW5jbHVkZSAiaTkxNV9k cnYuaCIKPiArI2luY2x1ZGUgImludGVsX2Rydi5oIgo+ICsjaW5jbHVkZSA8ZHJtL2k5MTVfcG93 ZXJ3ZWxsLmg+Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGk5MTVfcG93ZXJfZG9tYWlucyAqaHN3X3B3 cjsKPiArCj4gKyNkZWZpbmUgZm9yX2VhY2hfcG93ZXJfd2VsbChpLCBwb3dlcl93ZWxsLCBkb21h aW5fbWFzaywgcG93ZXJfZG9tYWlucykJXAo+ICsJZm9yIChpID0gMDsJCQkJCQkJXAo+ICsJICAg ICBpIDwgKHBvd2VyX2RvbWFpbnMpLT5wb3dlcl93ZWxsX2NvdW50ICYmCQkJXAo+ICsJCSAoKHBv d2VyX3dlbGwpID0gJihwb3dlcl9kb21haW5zKS0+cG93ZXJfd2VsbHNbaV0pOwlcCj4gKwkgICAg IGkrKykJCQkJCQkJXAo+ICsJCWlmICgocG93ZXJfd2VsbCktPmRvbWFpbnMgJiAoZG9tYWluX21h c2spKQo+ICsKPiArI2RlZmluZSBmb3JfZWFjaF9wb3dlcl93ZWxsX3JldihpLCBwb3dlcl93ZWxs LCBkb21haW5fbWFzaywgcG93ZXJfZG9tYWlucykgXAo+ICsJZm9yIChpID0gKHBvd2VyX2RvbWFp bnMpLT5wb3dlcl93ZWxsX2NvdW50IC0gMTsJCQkgXAo+ICsJICAgICBpID49IDAgJiYgKChwb3dl cl93ZWxsKSA9ICYocG93ZXJfZG9tYWlucyktPnBvd2VyX3dlbGxzW2ldKTtcCj4gKwkgICAgIGkt LSkJCQkJCQkJIFwKPiArCQlpZiAoKHBvd2VyX3dlbGwpLT5kb21haW5zICYgKGRvbWFpbl9tYXNr KSkKPiArCj4gKy8qKgo+ICsgKiBXZSBzaG91bGQgb25seSB1c2UgdGhlIHBvd2VyIHdlbGwgaWYg d2UgZXhwbGljaXRseSBhc2tlZCB0aGUgaGFyZHdhcmUgdG8KPiArICogZW5hYmxlIGl0LCBzbyBj aGVjayBpZiBpdCdzIGVuYWJsZWQgYW5kIGFsc28gY2hlY2sgaWYgd2UndmUgcmVxdWVzdGVkIGl0 IHRvCj4gKyAqIGJlIGVuYWJsZWQuCj4gKyAqLwo+ICtzdGF0aWMgYm9vbCBoc3dfcG93ZXJfd2Vs bF9lbmFibGVkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiArCQkJCSAgIHN0 cnVjdCBpOTE1X3Bvd2VyX3dlbGwgKnBvd2VyX3dlbGwpCj4gK3sKPiArCXJldHVybiBJOTE1X1JF QUQoSFNXX1BXUl9XRUxMX0RSSVZFUikgPT0KPiArCQkgICAgIChIU1dfUFdSX1dFTExfRU5BQkxF X1JFUVVFU1QgfCBIU1dfUFdSX1dFTExfU1RBVEVfRU5BQkxFRCk7Cj4gK30KPiArCj4gK2Jvb2wg aW50ZWxfZGlzcGxheV9wb3dlcl9lbmFibGVkX3VubG9ja2VkKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwKPiArCQkJCQkgIGVudW0gaW50ZWxfZGlzcGxheV9wb3dlcl9kb21haW4g ZG9tYWluKQo+ICt7Cj4gKwlzdHJ1Y3QgaTkxNV9wb3dlcl9kb21haW5zICpwb3dlcl9kb21haW5z Owo+ICsJc3RydWN0IGk5MTVfcG93ZXJfd2VsbCAqcG93ZXJfd2VsbDsKPiArCWJvb2wgaXNfZW5h YmxlZDsKPiArCWludCBpOwo+ICsKPiArCWlmIChkZXZfcHJpdi0+cG0uc3VzcGVuZGVkKQo+ICsJ CXJldHVybiBmYWxzZTsKPiArCj4gKwlwb3dlcl9kb21haW5zID0gJmRldl9wcml2LT5wb3dlcl9k b21haW5zOwo+ICsKPiArCWlzX2VuYWJsZWQgPSB0cnVlOwo+ICsKPiArCWZvcl9lYWNoX3Bvd2Vy X3dlbGxfcmV2KGksIHBvd2VyX3dlbGwsIEJJVChkb21haW4pLCBwb3dlcl9kb21haW5zKSB7Cj4g KwkJaWYgKHBvd2VyX3dlbGwtPmFsd2F5c19vbikKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCWlm ICghcG93ZXJfd2VsbC0+aHdfZW5hYmxlZCkgewo+ICsJCQlpc19lbmFibGVkID0gZmFsc2U7Cj4g KwkJCWJyZWFrOwo+ICsJCX0KPiArCX0KPiArCj4gKwlyZXR1cm4gaXNfZW5hYmxlZDsKPiArfQo+ ICsKPiArYm9vbCBpbnRlbF9kaXNwbGF5X3Bvd2VyX2VuYWJsZWQoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LAo+ICsJCQkJIGVudW0gaW50ZWxfZGlzcGxheV9wb3dlcl9kb21haW4g ZG9tYWluKQo+ICt7Cj4gKwlzdHJ1Y3QgaTkxNV9wb3dlcl9kb21haW5zICpwb3dlcl9kb21haW5z Owo+ICsJYm9vbCByZXQ7Cj4gKwo+ICsJcG93ZXJfZG9tYWlucyA9ICZkZXZfcHJpdi0+cG93ZXJf ZG9tYWluczsKPiArCj4gKwltdXRleF9sb2NrKCZwb3dlcl9kb21haW5zLT5sb2NrKTsKPiArCXJl dCA9IGludGVsX2Rpc3BsYXlfcG93ZXJfZW5hYmxlZF91bmxvY2tlZChkZXZfcHJpdiwgZG9tYWlu KTsKPiArCW11dGV4X3VubG9jaygmcG93ZXJfZG9tYWlucy0+bG9jayk7Cj4gKwo+ICsJcmV0dXJu IHJldDsKPiArfQo+ICsKPiArLyoKPiArICogU3RhcnRpbmcgd2l0aCBIYXN3ZWxsLCB3ZSBoYXZl IGEgIlBvd2VyIERvd24gV2VsbCIgdGhhdCBjYW4gYmUgdHVybmVkIG9mZgo+ICsgKiB3aGVuIG5v dCBuZWVkZWQgYW55bW9yZS4gV2UgaGF2ZSA0IHJlZ2lzdGVycyB0aGF0IGNhbiByZXF1ZXN0IHRo ZSBwb3dlciB3ZWxsCj4gKyAqIHRvIGJlIGVuYWJsZWQsIGFuZCBpdCB3aWxsIG9ubHkgYmUgZGlz YWJsZWQgaWYgbm9uZSBvZiB0aGUgcmVnaXN0ZXJzIGlzCj4gKyAqIHJlcXVlc3RpbmcgaXQgdG8g YmUgZW5hYmxlZC4KPiArICovCj4gK3N0YXRpYyB2b2lkIGhzd19wb3dlcl93ZWxsX3Bvc3RfZW5h YmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArewo+ICsJc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9IGRldl9wcml2LT5kZXY7Cj4gKwo+ICsJLyoKPiArCSAqIEFmdGVyIHdl IHJlLWVuYWJsZSB0aGUgcG93ZXIgd2VsbCwgaWYgd2UgdG91Y2ggVkdBIHJlZ2lzdGVyIDB4M2Q1 Cj4gKwkgKiB3ZSdsbCBnZXQgdW5jbGFpbWVkIHJlZ2lzdGVyIGludGVycnVwdHMuIFRoaXMgc3Rv cHMgYWZ0ZXIgd2Ugd3JpdGUKPiArCSAqIGFueXRoaW5nIHRvIHRoZSBWR0EgTVNSIHJlZ2lzdGVy LiBUaGUgdmdhY29uIG1vZHVsZSB1c2VzIHRoaXMKPiArCSAqIHJlZ2lzdGVyIGFsbCB0aGUgdGlt ZSwgc28gaWYgd2UgdW5iaW5kIG91ciBkcml2ZXIgYW5kLCBhcyBhCj4gKwkgKiBjb25zZXF1ZW5j ZSwgYmluZCB2Z2Fjb24sIHdlJ2xsIGdldCBzdHVjayBpbiBhbiBpbmZpbml0ZSBsb29wIGF0Cj4g KwkgKiBjb25zb2xlX3VubG9jaygpLiBTbyBtYWtlIGhlcmUgd2UgdG91Y2ggdGhlIFZHQSBNU1Ig cmVnaXN0ZXIsIG1ha2luZwo+ICsJICogc3VyZSB2Z2Fjb24gY2FuIGtlZXAgd29ya2luZyBub3Jt YWxseSB3aXRob3V0IHRyaWdnZXJpbmcgaW50ZXJydXB0cwo+ICsJICogYW5kIGVycm9yIG1lc3Nh Z2VzLgo+ICsJICovCj4gKwl2Z2FfZ2V0X3VuaW50ZXJydXB0aWJsZShkZXYtPnBkZXYsIFZHQV9S U1JDX0xFR0FDWV9JTyk7Cj4gKwlvdXRiKGluYihWR0FfTVNSX1JFQUQpLCBWR0FfTVNSX1dSSVRF KTsKPiArCXZnYV9wdXQoZGV2LT5wZGV2LCBWR0FfUlNSQ19MRUdBQ1lfSU8pOwo+ICsKPiArCWlm IChJU19CUk9BRFdFTEwoZGV2KSkKPiArCQlnZW44X2lycV9wb3dlcl93ZWxsX3Bvc3RfZW5hYmxl KGRldl9wcml2KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaHN3X3NldF9wb3dlcl93ZWxsKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiArCQkJICAgICAgIHN0cnVjdCBpOTE1 X3Bvd2VyX3dlbGwgKnBvd2VyX3dlbGwsIGJvb2wgZW5hYmxlKQo+ICt7Cj4gKwlib29sIGlzX2Vu YWJsZWQsIGVuYWJsZV9yZXF1ZXN0ZWQ7Cj4gKwl1aW50MzJfdCB0bXA7Cj4gKwo+ICsJdG1wID0g STkxNV9SRUFEKEhTV19QV1JfV0VMTF9EUklWRVIpOwo+ICsJaXNfZW5hYmxlZCA9IHRtcCAmIEhT V19QV1JfV0VMTF9TVEFURV9FTkFCTEVEOwo+ICsJZW5hYmxlX3JlcXVlc3RlZCA9IHRtcCAmIEhT V19QV1JfV0VMTF9FTkFCTEVfUkVRVUVTVDsKPiArCj4gKwlpZiAoZW5hYmxlKSB7Cj4gKwkJaWYg KCFlbmFibGVfcmVxdWVzdGVkKQo+ICsJCQlJOTE1X1dSSVRFKEhTV19QV1JfV0VMTF9EUklWRVIs Cj4gKwkJCQkgICBIU1dfUFdSX1dFTExfRU5BQkxFX1JFUVVFU1QpOwo+ICsKPiArCQlpZiAoIWlz X2VuYWJsZWQpIHsKPiArCQkJRFJNX0RFQlVHX0tNUygiRW5hYmxpbmcgcG93ZXIgd2VsbFxuIik7 Cj4gKwkJCWlmICh3YWl0X2ZvcigoSTkxNV9SRUFEKEhTV19QV1JfV0VMTF9EUklWRVIpICYKPiAr CQkJCSAgICAgIEhTV19QV1JfV0VMTF9TVEFURV9FTkFCTEVEKSwgMjApKQo+ICsJCQkJRFJNX0VS Uk9SKCJUaW1lb3V0IGVuYWJsaW5nIHBvd2VyIHdlbGxcbiIpOwo+ICsJCX0KPiArCj4gKwkJaHN3 X3Bvd2VyX3dlbGxfcG9zdF9lbmFibGUoZGV2X3ByaXYpOwo+ICsJfSBlbHNlIHsKPiArCQlpZiAo ZW5hYmxlX3JlcXVlc3RlZCkgewo+ICsJCQlJOTE1X1dSSVRFKEhTV19QV1JfV0VMTF9EUklWRVIs IDApOwo+ICsJCQlQT1NUSU5HX1JFQUQoSFNXX1BXUl9XRUxMX0RSSVZFUik7Cj4gKwkJCURSTV9E RUJVR19LTVMoIlJlcXVlc3RpbmcgdG8gZGlzYWJsZSB0aGUgcG93ZXIgd2VsbFxuIik7Cj4gKwkJ fQo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBoc3dfcG93ZXJfd2VsbF9zeW5jX2h3KHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiArCQkJCSAgIHN0cnVjdCBpOTE1X3Bv d2VyX3dlbGwgKnBvd2VyX3dlbGwpCj4gK3sKPiArCWhzd19zZXRfcG93ZXJfd2VsbChkZXZfcHJp diwgcG93ZXJfd2VsbCwgcG93ZXJfd2VsbC0+Y291bnQgPiAwKTsKPiArCj4gKwkvKgo+ICsJICog V2UncmUgdGFraW5nIG92ZXIgdGhlIEJJT1MsIHNvIGNsZWFyIGFueSByZXF1ZXN0cyBtYWRlIGJ5 IGl0IHNpbmNlCj4gKwkgKiB0aGUgZHJpdmVyIGlzIGluIGNoYXJnZSBub3cuCj4gKwkgKi8KPiAr CWlmIChJOTE1X1JFQUQoSFNXX1BXUl9XRUxMX0JJT1MpICYgSFNXX1BXUl9XRUxMX0VOQUJMRV9S RVFVRVNUKQo+ICsJCUk5MTVfV1JJVEUoSFNXX1BXUl9XRUxMX0JJT1MsIDApOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCBoc3dfcG93ZXJfd2VsbF9lbmFibGUoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LAo+ICsJCQkJICBzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsICpwb3dlcl93ZWxs KQo+ICt7Cj4gKwloc3dfc2V0X3Bvd2VyX3dlbGwoZGV2X3ByaXYsIHBvd2VyX3dlbGwsIHRydWUp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBoc3dfcG93ZXJfd2VsbF9kaXNhYmxlKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiArCQkJCSAgIHN0cnVjdCBpOTE1X3Bvd2VyX3dl bGwgKnBvd2VyX3dlbGwpCj4gK3sKPiArCWhzd19zZXRfcG93ZXJfd2VsbChkZXZfcHJpdiwgcG93 ZXJfd2VsbCwgZmFsc2UpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpOXh4X2Fsd2F5c19vbl9w b3dlcl93ZWxsX25vb3Aoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICsJCQkJ CSAgIHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwgKnBvd2VyX3dlbGwpCj4gK3sKPiArfQo+ICsKPiAr c3RhdGljIGJvb2wgaTl4eF9hbHdheXNfb25fcG93ZXJfd2VsbF9lbmFibGVkKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiArCQkJCQkgICAgIHN0cnVjdCBpOTE1X3Bvd2VyX3dl bGwgKnBvd2VyX3dlbGwpCj4gK3sKPiArCXJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCB2bHZfc2V0X3Bvd2VyX3dlbGwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 LAo+ICsJCQkgICAgICAgc3RydWN0IGk5MTVfcG93ZXJfd2VsbCAqcG93ZXJfd2VsbCwgYm9vbCBl bmFibGUpCj4gK3sKPiArCWVudW0gcHVuaXRfcG93ZXJfd2VsbCBwb3dlcl93ZWxsX2lkID0gcG93 ZXJfd2VsbC0+ZGF0YTsKPiArCXUzMiBtYXNrOwo+ICsJdTMyIHN0YXRlOwo+ICsJdTMyIGN0cmw7 Cj4gKwo+ICsJbWFzayA9IFBVTklUX1BXUkdUX01BU0socG93ZXJfd2VsbF9pZCk7Cj4gKwlzdGF0 ZSA9IGVuYWJsZSA/IFBVTklUX1BXUkdUX1BXUl9PTihwb3dlcl93ZWxsX2lkKSA6Cj4gKwkJCSBQ VU5JVF9QV1JHVF9QV1JfR0FURShwb3dlcl93ZWxsX2lkKTsKPiArCj4gKwltdXRleF9sb2NrKCZk ZXZfcHJpdi0+cnBzLmh3X2xvY2spOwo+ICsKPiArI2RlZmluZSBDT05EIFwKPiArCSgodmx2X3B1 bml0X3JlYWQoZGV2X3ByaXYsIFBVTklUX1JFR19QV1JHVF9TVEFUVVMpICYgbWFzaykgPT0gc3Rh dGUpCj4gKwo+ICsJaWYgKENPTkQpCj4gKwkJZ290byBvdXQ7Cj4gKwo+ICsJY3RybCA9IHZsdl9w dW5pdF9yZWFkKGRldl9wcml2LCBQVU5JVF9SRUdfUFdSR1RfQ1RSTCk7Cj4gKwljdHJsICY9IH5t YXNrOwo+ICsJY3RybCB8PSBzdGF0ZTsKPiArCXZsdl9wdW5pdF93cml0ZShkZXZfcHJpdiwgUFVO SVRfUkVHX1BXUkdUX0NUUkwsIGN0cmwpOwo+ICsKPiArCWlmICh3YWl0X2ZvcihDT05ELCAxMDAp KQo+ICsJCURSTV9FUlJPUigidGltb3V0IHNldHRpbmcgcG93ZXIgd2VsbCBzdGF0ZSAlMDh4ICgl MDh4KVxuIiwKPiArCQkJICBzdGF0ZSwKPiArCQkJICB2bHZfcHVuaXRfcmVhZChkZXZfcHJpdiwg UFVOSVRfUkVHX1BXUkdUX0NUUkwpKTsKPiArCj4gKyN1bmRlZiBDT05ECj4gKwo+ICtvdXQ6Cj4g KwltdXRleF91bmxvY2soJmRldl9wcml2LT5ycHMuaHdfbG9jayk7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIHZsdl9wb3dlcl93ZWxsX3N5bmNfaHcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LAo+ICsJCQkJICAgc3RydWN0IGk5MTVfcG93ZXJfd2VsbCAqcG93ZXJfd2VsbCkKPiAr ewo+ICsJdmx2X3NldF9wb3dlcl93ZWxsKGRldl9wcml2LCBwb3dlcl93ZWxsLCBwb3dlcl93ZWxs LT5jb3VudCA+IDApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB2bHZfcG93ZXJfd2VsbF9lbmFi bGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICsJCQkJICBzdHJ1Y3QgaTkx NV9wb3dlcl93ZWxsICpwb3dlcl93ZWxsKQo+ICt7Cj4gKwl2bHZfc2V0X3Bvd2VyX3dlbGwoZGV2 X3ByaXYsIHBvd2VyX3dlbGwsIHRydWUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB2bHZfcG93 ZXJfd2VsbF9kaXNhYmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiArCQkJ CSAgIHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwgKnBvd2VyX3dlbGwpCj4gK3sKPiArCXZsdl9zZXRf cG93ZXJfd2VsbChkZXZfcHJpdiwgcG93ZXJfd2VsbCwgZmFsc2UpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgYm9vbCB2bHZfcG93ZXJfd2VsbF9lbmFibGVkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwKPiArCQkJCSAgIHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwgKnBvd2VyX3dlbGwpCj4g K3sKPiArCWludCBwb3dlcl93ZWxsX2lkID0gcG93ZXJfd2VsbC0+ZGF0YTsKPiArCWJvb2wgZW5h YmxlZCA9IGZhbHNlOwo+ICsJdTMyIG1hc2s7Cj4gKwl1MzIgc3RhdGU7Cj4gKwl1MzIgY3RybDsK PiArCj4gKwltYXNrID0gUFVOSVRfUFdSR1RfTUFTSyhwb3dlcl93ZWxsX2lkKTsKPiArCWN0cmwg PSBQVU5JVF9QV1JHVF9QV1JfT04ocG93ZXJfd2VsbF9pZCk7Cj4gKwo+ICsJbXV0ZXhfbG9jaygm ZGV2X3ByaXYtPnJwcy5od19sb2NrKTsKPiArCj4gKwlzdGF0ZSA9IHZsdl9wdW5pdF9yZWFkKGRl dl9wcml2LCBQVU5JVF9SRUdfUFdSR1RfU1RBVFVTKSAmIG1hc2s7Cj4gKwkvKgo+ICsJICogV2Ug b25seSBldmVyIHNldCB0aGUgcG93ZXItb24gYW5kIHBvd2VyLWdhdGUgc3RhdGVzLCBhbnl0aGlu Zwo+ICsJICogZWxzZSBpcyB1bmV4cGVjdGVkLgo+ICsJICovCj4gKwlXQVJOX09OKHN0YXRlICE9 IFBVTklUX1BXUkdUX1BXUl9PTihwb3dlcl93ZWxsX2lkKSAmJgo+ICsJCXN0YXRlICE9IFBVTklU X1BXUkdUX1BXUl9HQVRFKHBvd2VyX3dlbGxfaWQpKTsKPiArCWlmIChzdGF0ZSA9PSBjdHJsKQo+ ICsJCWVuYWJsZWQgPSB0cnVlOwo+ICsKPiArCS8qCj4gKwkgKiBBIHRyYW5zaWVudCBzdGF0ZSBh dCB0aGlzIHBvaW50IHdvdWxkIG1lYW4gc29tZSB1bmV4cGVjdGVkIHBhcnR5Cj4gKwkgKiBpcyBw b2tpbmcgYXQgdGhlIHBvd2VyIGNvbnRyb2xzIHRvby4KPiArCSAqLwo+ICsJY3RybCA9IHZsdl9w dW5pdF9yZWFkKGRldl9wcml2LCBQVU5JVF9SRUdfUFdSR1RfQ1RSTCkgJiBtYXNrOwo+ICsJV0FS Tl9PTihjdHJsICE9IHN0YXRlKTsKPiArCj4gKwltdXRleF91bmxvY2soJmRldl9wcml2LT5ycHMu aHdfbG9jayk7Cj4gKwo+ICsJcmV0dXJuIGVuYWJsZWQ7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IHZsdl9kaXNwbGF5X3Bvd2VyX3dlbGxfZW5hYmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwKPiArCQkJCQkgIHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwgKnBvd2VyX3dlbGwpCj4g K3sKPiArCVdBUk5fT05fT05DRShwb3dlcl93ZWxsLT5kYXRhICE9IFBVTklUX1BPV0VSX1dFTExf RElTUDJEKTsKPiArCj4gKwl2bHZfc2V0X3Bvd2VyX3dlbGwoZGV2X3ByaXYsIHBvd2VyX3dlbGws IHRydWUpOwo+ICsKPiArCXNwaW5fbG9ja19pcnEoJmRldl9wcml2LT5pcnFfbG9jayk7Cj4gKwl2 YWxsZXl2aWV3X2VuYWJsZV9kaXNwbGF5X2lycXMoZGV2X3ByaXYpOwo+ICsJc3Bpbl91bmxvY2tf aXJxKCZkZXZfcHJpdi0+aXJxX2xvY2spOwo+ICsKPiArCS8qCj4gKwkgKiBEdXJpbmcgZHJpdmVy IGluaXRpYWxpemF0aW9uL3Jlc3VtZSB3ZSBjYW4gYXZvaWQgcmVzdG9yaW5nIHRoZQo+ICsJICog cGFydCBvZiB0aGUgSFcvU1cgc3RhdGUgdGhhdCB3aWxsIGJlIGluaXRlZCBhbnl3YXkgZXhwbGlj aXRseS4KPiArCSAqLwo+ICsJaWYgKGRldl9wcml2LT5wb3dlcl9kb21haW5zLmluaXRpYWxpemlu ZykKPiArCQlyZXR1cm47Cj4gKwo+ICsJaW50ZWxfaHBkX2luaXQoZGV2X3ByaXYtPmRldik7Cj4g Kwo+ICsJaTkxNV9yZWRpc2FibGVfdmdhX3Bvd2VyX29uKGRldl9wcml2LT5kZXYpOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCB2bHZfZGlzcGxheV9wb3dlcl93ZWxsX2Rpc2FibGUoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICsJCQkJCSAgIHN0cnVjdCBpOTE1X3Bvd2VyX3dl bGwgKnBvd2VyX3dlbGwpCj4gK3sKPiArCVdBUk5fT05fT05DRShwb3dlcl93ZWxsLT5kYXRhICE9 IFBVTklUX1BPV0VSX1dFTExfRElTUDJEKTsKPiArCj4gKwlzcGluX2xvY2tfaXJxKCZkZXZfcHJp di0+aXJxX2xvY2spOwo+ICsJdmFsbGV5dmlld19kaXNhYmxlX2Rpc3BsYXlfaXJxcyhkZXZfcHJp dik7Cj4gKwlzcGluX3VubG9ja19pcnEoJmRldl9wcml2LT5pcnFfbG9jayk7Cj4gKwo+ICsJdmx2 X3NldF9wb3dlcl93ZWxsKGRldl9wcml2LCBwb3dlcl93ZWxsLCBmYWxzZSk7Cj4gKwo+ICsJdmx2 X3Bvd2VyX3NlcXVlbmNlcl9yZXNldChkZXZfcHJpdik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IHZsdl9kcGlvX2Ntbl9wb3dlcl93ZWxsX2VuYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsCj4gKwkJCQkJICAgc3RydWN0IGk5MTVfcG93ZXJfd2VsbCAqcG93ZXJfd2VsbCkK PiArewo+ICsJV0FSTl9PTl9PTkNFKHBvd2VyX3dlbGwtPmRhdGEgIT0gUFVOSVRfUE9XRVJfV0VM TF9EUElPX0NNTl9CQyk7Cj4gKwo+ICsJLyoKPiArCSAqIEVuYWJsZSB0aGUgQ1JJIGNsb2NrIHNv dXJjZSBzbyB3ZSBjYW4gZ2V0IGF0IHRoZQo+ICsJICogZGlzcGxheSBhbmQgdGhlIHJlZmVyZW5j ZSBjbG9jayBmb3IgVkdBCj4gKwkgKiBob3RwbHVnIC8gbWFudWFsIGRldGVjdGlvbi4KPiArCSAq Lwo+ICsJSTkxNV9XUklURShEUExMKFBJUEVfQiksIEk5MTVfUkVBRChEUExMKFBJUEVfQikpIHwK PiArCQkgICBEUExMX1JFRkFfQ0xLX0VOQUJMRV9WTFYgfCBEUExMX0lOVEVHUkFURURfQ1JJX0NM S19WTFYpOwo+ICsJdWRlbGF5KDEpOyAvKiA+MTBucyBmb3IgY21ucmVzZXQsID4wbnMgZm9yIHNp ZGVyZXNldCAqLwo+ICsKPiArCXZsdl9zZXRfcG93ZXJfd2VsbChkZXZfcHJpdiwgcG93ZXJfd2Vs bCwgdHJ1ZSk7Cj4gKwo+ICsJLyoKPiArCSAqIEZyb20gVkxWMkEwX0RQX2VEUF9EUElPX2RyaXZl cl92Ymlvc19ub3Rlc18xMC5kb2N4IC0KPiArCSAqICA2LglEZS1hc3NlcnQgY21uX3Jlc2V0L3Np ZGVfcmVzZXQuIFNhbWUgYXMgVkxWIFgwLgo+ICsJICogICBhLglHVW5pdCAweDIxMTAgYml0WzBd IHNldCB0byAxIChkZWYgMCkKPiArCSAqICAgYi4JVGhlIG90aGVyIGJpdHMgc3VjaCBhcyBzZnIg c2V0dGluZ3MgLyBtb2Rlc2VsIG1heSBhbGwKPiArCSAqCWJlIHNldCB0byAwLgo+ICsJICoKPiAr CSAqIFRoaXMgc2hvdWxkIG9ubHkgYmUgZG9uZSBvbiBpbml0IGFuZCByZXN1bWUgZnJvbSBTMyB3 aXRoCj4gKwkgKiBib3RoIFBMTHMgZGlzYWJsZWQsIG9yIHdlIHJpc2sgbG9zaW5nIERQSU8gYW5k IFBMTAo+ICsJICogc3luY2hyb25pemF0aW9uLgo+ICsJICovCj4gKwlJOTE1X1dSSVRFKERQSU9f Q1RMLCBJOTE1X1JFQUQoRFBJT19DVEwpIHwgRFBJT19DTU5SU1QpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCB2bHZfZHBpb19jbW5fcG93ZXJfd2VsbF9kaXNhYmxlKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwKPiArCQkJCQkgICAgc3RydWN0IGk5MTVfcG93ZXJfd2VsbCAqcG93 ZXJfd2VsbCkKPiArewo+ICsJZW51bSBwaXBlIHBpcGU7Cj4gKwo+ICsJV0FSTl9PTl9PTkNFKHBv d2VyX3dlbGwtPmRhdGEgIT0gUFVOSVRfUE9XRVJfV0VMTF9EUElPX0NNTl9CQyk7Cj4gKwo+ICsJ Zm9yX2VhY2hfcGlwZShkZXZfcHJpdiwgcGlwZSkKPiArCQlhc3NlcnRfcGxsX2Rpc2FibGVkKGRl dl9wcml2LCBwaXBlKTsKPiArCj4gKwkvKiBBc3NlcnQgY29tbW9uIHJlc2V0ICovCj4gKwlJOTE1 X1dSSVRFKERQSU9fQ1RMLCBJOTE1X1JFQUQoRFBJT19DVEwpICYgfkRQSU9fQ01OUlNUKTsKPiAr Cj4gKwl2bHZfc2V0X3Bvd2VyX3dlbGwoZGV2X3ByaXYsIHBvd2VyX3dlbGwsIGZhbHNlKTsKPiAr fQo+ICsKPiArc3RhdGljIHZvaWQgY2h2X2RwaW9fY21uX3Bvd2VyX3dlbGxfZW5hYmxlKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiArCQkJCQkgICBzdHJ1Y3QgaTkxNV9wb3dl cl93ZWxsICpwb3dlcl93ZWxsKQo+ICt7Cj4gKwllbnVtIGRwaW9fcGh5IHBoeTsKPiArCj4gKwlX QVJOX09OX09OQ0UocG93ZXJfd2VsbC0+ZGF0YSAhPSBQVU5JVF9QT1dFUl9XRUxMX0RQSU9fQ01O X0JDICYmCj4gKwkJICAgICBwb3dlcl93ZWxsLT5kYXRhICE9IFBVTklUX1BPV0VSX1dFTExfRFBJ T19DTU5fRCk7Cj4gKwo+ICsJLyoKPiArCSAqIEVuYWJsZSB0aGUgQ1JJIGNsb2NrIHNvdXJjZSBz byB3ZSBjYW4gZ2V0IGF0IHRoZQo+ICsJICogZGlzcGxheSBhbmQgdGhlIHJlZmVyZW5jZSBjbG9j ayBmb3IgVkdBCj4gKwkgKiBob3RwbHVnIC8gbWFudWFsIGRldGVjdGlvbi4KPiArCSAqLwo+ICsJ aWYgKHBvd2VyX3dlbGwtPmRhdGEgPT0gUFVOSVRfUE9XRVJfV0VMTF9EUElPX0NNTl9CQykgewo+ ICsJCXBoeSA9IERQSU9fUEhZMDsKPiArCQlJOTE1X1dSSVRFKERQTEwoUElQRV9CKSwgSTkxNV9S RUFEKERQTEwoUElQRV9CKSkgfAo+ICsJCQkgICBEUExMX1JFRkFfQ0xLX0VOQUJMRV9WTFYpOwo+ ICsJCUk5MTVfV1JJVEUoRFBMTChQSVBFX0IpLCBJOTE1X1JFQUQoRFBMTChQSVBFX0IpKSB8Cj4g KwkJCSAgIERQTExfUkVGQV9DTEtfRU5BQkxFX1ZMViB8IERQTExfSU5URUdSQVRFRF9DUklfQ0xL X1ZMVik7Cj4gKwl9IGVsc2Ugewo+ICsJCXBoeSA9IERQSU9fUEhZMTsKPiArCQlJOTE1X1dSSVRF KERQTEwoUElQRV9DKSwgSTkxNV9SRUFEKERQTEwoUElQRV9DKSkgfAo+ICsJCQkgICBEUExMX1JF RkFfQ0xLX0VOQUJMRV9WTFYgfCBEUExMX0lOVEVHUkFURURfQ1JJX0NMS19WTFYpOwo+ICsJfQo+ ICsJdWRlbGF5KDEpOyAvKiA+MTBucyBmb3IgY21ucmVzZXQsID4wbnMgZm9yIHNpZGVyZXNldCAq Lwo+ICsJdmx2X3NldF9wb3dlcl93ZWxsKGRldl9wcml2LCBwb3dlcl93ZWxsLCB0cnVlKTsKPiAr Cj4gKwkvKiBQb2xsIGZvciBwaHlwd3Jnb29kIHNpZ25hbCAqLwo+ICsJaWYgKHdhaXRfZm9yKEk5 MTVfUkVBRChESVNQTEFZX1BIWV9TVEFUVVMpICYgUEhZX1BPV0VSR09PRChwaHkpLCAxKSkKPiAr CQlEUk1fRVJST1IoIkRpc3BsYXkgUEhZICVkIGlzIG5vdCBwb3dlciB1cFxuIiwgcGh5KTsKPiAr Cj4gKwlJOTE1X1dSSVRFKERJU1BMQVlfUEhZX0NPTlRST0wsIEk5MTVfUkVBRChESVNQTEFZX1BI WV9DT05UUk9MKSB8Cj4gKwkJICAgUEhZX0NPTV9MQU5FX1JFU0VUX0RFQVNTRVJUKHBoeSkpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBjaHZfZHBpb19jbW5fcG93ZXJfd2VsbF9kaXNhYmxlKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiArCQkJCQkgICAgc3RydWN0IGk5MTVf cG93ZXJfd2VsbCAqcG93ZXJfd2VsbCkKPiArewo+ICsJZW51bSBkcGlvX3BoeSBwaHk7Cj4gKwo+ ICsJV0FSTl9PTl9PTkNFKHBvd2VyX3dlbGwtPmRhdGEgIT0gUFVOSVRfUE9XRVJfV0VMTF9EUElP X0NNTl9CQyAmJgo+ICsJCSAgICAgcG93ZXJfd2VsbC0+ZGF0YSAhPSBQVU5JVF9QT1dFUl9XRUxM X0RQSU9fQ01OX0QpOwo+ICsKPiArCWlmIChwb3dlcl93ZWxsLT5kYXRhID09IFBVTklUX1BPV0VS X1dFTExfRFBJT19DTU5fQkMpIHsKPiArCQlwaHkgPSBEUElPX1BIWTA7Cj4gKwkJYXNzZXJ0X3Bs bF9kaXNhYmxlZChkZXZfcHJpdiwgUElQRV9BKTsKPiArCQlhc3NlcnRfcGxsX2Rpc2FibGVkKGRl dl9wcml2LCBQSVBFX0IpOwo+ICsJfSBlbHNlIHsKPiArCQlwaHkgPSBEUElPX1BIWTE7Cj4gKwkJ YXNzZXJ0X3BsbF9kaXNhYmxlZChkZXZfcHJpdiwgUElQRV9DKTsKPiArCX0KPiArCj4gKwlJOTE1 X1dSSVRFKERJU1BMQVlfUEhZX0NPTlRST0wsIEk5MTVfUkVBRChESVNQTEFZX1BIWV9DT05UUk9M KSAmCj4gKwkJICAgflBIWV9DT01fTEFORV9SRVNFVF9ERUFTU0VSVChwaHkpKTsKPiArCj4gKwl2 bHZfc2V0X3Bvd2VyX3dlbGwoZGV2X3ByaXYsIHBvd2VyX3dlbGwsIGZhbHNlKTsKPiArfQo+ICsK PiArc3RhdGljIGJvb2wgY2h2X3BpcGVfcG93ZXJfd2VsbF9lbmFibGVkKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiwKPiArCQkJCQlzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsICpwb3dl cl93ZWxsKQo+ICt7Cj4gKwllbnVtIHBpcGUgcGlwZSA9IHBvd2VyX3dlbGwtPmRhdGE7Cj4gKwli b29sIGVuYWJsZWQ7Cj4gKwl1MzIgc3RhdGUsIGN0cmw7Cj4gKwo+ICsJbXV0ZXhfbG9jaygmZGV2 X3ByaXYtPnJwcy5od19sb2NrKTsKPiArCj4gKwlzdGF0ZSA9IHZsdl9wdW5pdF9yZWFkKGRldl9w cml2LCBQVU5JVF9SRUdfRFNQRlJFUSkgJiBEUF9TU1NfTUFTSyhwaXBlKTsKPiArCS8qCj4gKwkg KiBXZSBvbmx5IGV2ZXIgc2V0IHRoZSBwb3dlci1vbiBhbmQgcG93ZXItZ2F0ZSBzdGF0ZXMsIGFu eXRoaW5nCj4gKwkgKiBlbHNlIGlzIHVuZXhwZWN0ZWQuCj4gKwkgKi8KPiArCVdBUk5fT04oc3Rh dGUgIT0gRFBfU1NTX1BXUl9PTihwaXBlKSAmJiBzdGF0ZSAhPSBEUF9TU1NfUFdSX0dBVEUocGlw ZSkpOwo+ICsJZW5hYmxlZCA9IHN0YXRlID09IERQX1NTU19QV1JfT04ocGlwZSk7Cj4gKwo+ICsJ LyoKPiArCSAqIEEgdHJhbnNpZW50IHN0YXRlIGF0IHRoaXMgcG9pbnQgd291bGQgbWVhbiBzb21l IHVuZXhwZWN0ZWQgcGFydHkKPiArCSAqIGlzIHBva2luZyBhdCB0aGUgcG93ZXIgY29udHJvbHMg dG9vLgo+ICsJICovCj4gKwljdHJsID0gdmx2X3B1bml0X3JlYWQoZGV2X3ByaXYsIFBVTklUX1JF R19EU1BGUkVRKSAmIERQX1NTQ19NQVNLKHBpcGUpOwo+ICsJV0FSTl9PTihjdHJsIDw8IDE2ICE9 IHN0YXRlKTsKPiArCj4gKwltdXRleF91bmxvY2soJmRldl9wcml2LT5ycHMuaHdfbG9jayk7Cj4g Kwo+ICsJcmV0dXJuIGVuYWJsZWQ7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGNodl9zZXRfcGlw ZV9wb3dlcl93ZWxsKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiArCQkJCSAg ICBzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsICpwb3dlcl93ZWxsLAo+ICsJCQkJICAgIGJvb2wgZW5h YmxlKQo+ICt7Cj4gKwllbnVtIHBpcGUgcGlwZSA9IHBvd2VyX3dlbGwtPmRhdGE7Cj4gKwl1MzIg c3RhdGU7Cj4gKwl1MzIgY3RybDsKPiArCj4gKwlzdGF0ZSA9IGVuYWJsZSA/IERQX1NTU19QV1Jf T04ocGlwZSkgOiBEUF9TU1NfUFdSX0dBVEUocGlwZSk7Cj4gKwo+ICsJbXV0ZXhfbG9jaygmZGV2 X3ByaXYtPnJwcy5od19sb2NrKTsKPiArCj4gKyNkZWZpbmUgQ09ORCBcCj4gKwkoKHZsdl9wdW5p dF9yZWFkKGRldl9wcml2LCBQVU5JVF9SRUdfRFNQRlJFUSkgJiBEUF9TU1NfTUFTSyhwaXBlKSkg PT0gc3RhdGUpCj4gKwo+ICsJaWYgKENPTkQpCj4gKwkJZ290byBvdXQ7Cj4gKwo+ICsJY3RybCA9 IHZsdl9wdW5pdF9yZWFkKGRldl9wcml2LCBQVU5JVF9SRUdfRFNQRlJFUSk7Cj4gKwljdHJsICY9 IH5EUF9TU0NfTUFTSyhwaXBlKTsKPiArCWN0cmwgfD0gZW5hYmxlID8gRFBfU1NDX1BXUl9PTihw aXBlKSA6IERQX1NTQ19QV1JfR0FURShwaXBlKTsKPiArCXZsdl9wdW5pdF93cml0ZShkZXZfcHJp diwgUFVOSVRfUkVHX0RTUEZSRVEsIGN0cmwpOwo+ICsKPiArCWlmICh3YWl0X2ZvcihDT05ELCAx MDApKQo+ICsJCURSTV9FUlJPUigidGltb3V0IHNldHRpbmcgcG93ZXIgd2VsbCBzdGF0ZSAlMDh4 ICglMDh4KVxuIiwKPiArCQkJICBzdGF0ZSwKPiArCQkJICB2bHZfcHVuaXRfcmVhZChkZXZfcHJp diwgUFVOSVRfUkVHX0RTUEZSRVEpKTsKPiArCj4gKyN1bmRlZiBDT05ECj4gKwo+ICtvdXQ6Cj4g KwltdXRleF91bmxvY2soJmRldl9wcml2LT5ycHMuaHdfbG9jayk7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIGNodl9waXBlX3Bvd2VyX3dlbGxfc3luY19odyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYsCj4gKwkJCQkJc3RydWN0IGk5MTVfcG93ZXJfd2VsbCAqcG93ZXJfd2VsbCkK PiArewo+ICsJY2h2X3NldF9waXBlX3Bvd2VyX3dlbGwoZGV2X3ByaXYsIHBvd2VyX3dlbGwsIHBv d2VyX3dlbGwtPmNvdW50ID4gMCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGNodl9waXBlX3Bv d2VyX3dlbGxfZW5hYmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiArCQkJ CSAgICAgICBzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsICpwb3dlcl93ZWxsKQo+ICt7Cj4gKwlXQVJO X09OX09OQ0UocG93ZXJfd2VsbC0+ZGF0YSAhPSBQSVBFX0EgJiYKPiArCQkgICAgIHBvd2VyX3dl bGwtPmRhdGEgIT0gUElQRV9CICYmCj4gKwkJICAgICBwb3dlcl93ZWxsLT5kYXRhICE9IFBJUEVf Qyk7Cj4gKwo+ICsJY2h2X3NldF9waXBlX3Bvd2VyX3dlbGwoZGV2X3ByaXYsIHBvd2VyX3dlbGws IHRydWUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBjaHZfcGlwZV9wb3dlcl93ZWxsX2Rpc2Fi bGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICsJCQkJCXN0cnVjdCBpOTE1 X3Bvd2VyX3dlbGwgKnBvd2VyX3dlbGwpCj4gK3sKPiArCVdBUk5fT05fT05DRShwb3dlcl93ZWxs LT5kYXRhICE9IFBJUEVfQSAmJgo+ICsJCSAgICAgcG93ZXJfd2VsbC0+ZGF0YSAhPSBQSVBFX0Ig JiYKPiArCQkgICAgIHBvd2VyX3dlbGwtPmRhdGEgIT0gUElQRV9DKTsKPiArCj4gKwljaHZfc2V0 X3BpcGVfcG93ZXJfd2VsbChkZXZfcHJpdiwgcG93ZXJfd2VsbCwgZmFsc2UpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCBjaGVja19wb3dlcl93ZWxsX3N0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwKPiArCQkJCSAgIHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwgKnBvd2VyX3dl bGwpCj4gK3sKPiArCWJvb2wgZW5hYmxlZCA9IHBvd2VyX3dlbGwtPm9wcy0+aXNfZW5hYmxlZChk ZXZfcHJpdiwgcG93ZXJfd2VsbCk7Cj4gKwo+ICsJaWYgKHBvd2VyX3dlbGwtPmFsd2F5c19vbiB8 fCAhaTkxNS5kaXNhYmxlX3Bvd2VyX3dlbGwpIHsKPiArCQlpZiAoIWVuYWJsZWQpCj4gKwkJCWdv dG8gbWlzbWF0Y2g7Cj4gKwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwlpZiAoZW5hYmxlZCAh PSAocG93ZXJfd2VsbC0+Y291bnQgPiAwKSkKPiArCQlnb3RvIG1pc21hdGNoOwo+ICsKPiArCXJl dHVybjsKPiArCj4gK21pc21hdGNoOgo+ICsJV0FSTigxLCAic3RhdGUgbWlzbWF0Y2ggZm9yICcl cycgKGFsd2F5c19vbiAlZCBodyBzdGF0ZSAlZCB1c2UtY291bnQgJWQgZGlzYWJsZV9wb3dlcl93 ZWxsICVkXG4iLAo+ICsJCSAgcG93ZXJfd2VsbC0+bmFtZSwgcG93ZXJfd2VsbC0+YWx3YXlzX29u LCBlbmFibGVkLAo+ICsJCSAgcG93ZXJfd2VsbC0+Y291bnQsIGk5MTUuZGlzYWJsZV9wb3dlcl93 ZWxsKTsKPiArfQo+ICsKPiArdm9pZCBpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gKwkJCSAgICAgZW51bSBpbnRlbF9kaXNwbGF5X3Bv d2VyX2RvbWFpbiBkb21haW4pCj4gK3sKPiArCXN0cnVjdCBpOTE1X3Bvd2VyX2RvbWFpbnMgKnBv d2VyX2RvbWFpbnM7Cj4gKwlzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsICpwb3dlcl93ZWxsOwo+ICsJ aW50IGk7Cj4gKwo+ICsJaW50ZWxfcnVudGltZV9wbV9nZXQoZGV2X3ByaXYpOwo+ICsKPiArCXBv d2VyX2RvbWFpbnMgPSAmZGV2X3ByaXYtPnBvd2VyX2RvbWFpbnM7Cj4gKwo+ICsJbXV0ZXhfbG9j aygmcG93ZXJfZG9tYWlucy0+bG9jayk7Cj4gKwo+ICsJZm9yX2VhY2hfcG93ZXJfd2VsbChpLCBw b3dlcl93ZWxsLCBCSVQoZG9tYWluKSwgcG93ZXJfZG9tYWlucykgewo+ICsJCWlmICghcG93ZXJf d2VsbC0+Y291bnQrKykgewo+ICsJCQlEUk1fREVCVUdfS01TKCJlbmFibGluZyAlc1xuIiwgcG93 ZXJfd2VsbC0+bmFtZSk7Cj4gKwkJCXBvd2VyX3dlbGwtPm9wcy0+ZW5hYmxlKGRldl9wcml2LCBw b3dlcl93ZWxsKTsKPiArCQkJcG93ZXJfd2VsbC0+aHdfZW5hYmxlZCA9IHRydWU7Cj4gKwkJfQo+ ICsKPiArCQljaGVja19wb3dlcl93ZWxsX3N0YXRlKGRldl9wcml2LCBwb3dlcl93ZWxsKTsKPiAr CX0KPiArCj4gKwlwb3dlcl9kb21haW5zLT5kb21haW5fdXNlX2NvdW50W2RvbWFpbl0rKzsKPiAr Cj4gKwltdXRleF91bmxvY2soJnBvd2VyX2RvbWFpbnMtPmxvY2spOwo+ICt9Cj4gKwo+ICt2b2lk IGludGVsX2Rpc3BsYXlfcG93ZXJfcHV0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwKPiArCQkJICAgICBlbnVtIGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluIGRvbWFpbikKPiAr ewo+ICsJc3RydWN0IGk5MTVfcG93ZXJfZG9tYWlucyAqcG93ZXJfZG9tYWluczsKPiArCXN0cnVj dCBpOTE1X3Bvd2VyX3dlbGwgKnBvd2VyX3dlbGw7Cj4gKwlpbnQgaTsKPiArCj4gKwlwb3dlcl9k b21haW5zID0gJmRldl9wcml2LT5wb3dlcl9kb21haW5zOwo+ICsKPiArCW11dGV4X2xvY2soJnBv d2VyX2RvbWFpbnMtPmxvY2spOwo+ICsKPiArCVdBUk5fT04oIXBvd2VyX2RvbWFpbnMtPmRvbWFp bl91c2VfY291bnRbZG9tYWluXSk7Cj4gKwlwb3dlcl9kb21haW5zLT5kb21haW5fdXNlX2NvdW50 W2RvbWFpbl0tLTsKPiArCj4gKwlmb3JfZWFjaF9wb3dlcl93ZWxsX3JldihpLCBwb3dlcl93ZWxs LCBCSVQoZG9tYWluKSwgcG93ZXJfZG9tYWlucykgewo+ICsJCVdBUk5fT04oIXBvd2VyX3dlbGwt PmNvdW50KTsKPiArCj4gKwkJaWYgKCEtLXBvd2VyX3dlbGwtPmNvdW50ICYmIGk5MTUuZGlzYWJs ZV9wb3dlcl93ZWxsKSB7Cj4gKwkJCURSTV9ERUJVR19LTVMoImRpc2FibGluZyAlc1xuIiwgcG93 ZXJfd2VsbC0+bmFtZSk7Cj4gKwkJCXBvd2VyX3dlbGwtPmh3X2VuYWJsZWQgPSBmYWxzZTsKPiAr CQkJcG93ZXJfd2VsbC0+b3BzLT5kaXNhYmxlKGRldl9wcml2LCBwb3dlcl93ZWxsKTsKPiArCQl9 Cj4gKwo+ICsJCWNoZWNrX3Bvd2VyX3dlbGxfc3RhdGUoZGV2X3ByaXYsIHBvd2VyX3dlbGwpOwo+ ICsJfQo+ICsKPiArCW11dGV4X3VubG9jaygmcG93ZXJfZG9tYWlucy0+bG9jayk7Cj4gKwo+ICsJ aW50ZWxfcnVudGltZV9wbV9wdXQoZGV2X3ByaXYpOwo+ICt9Cj4gKwo+ICsjZGVmaW5lIFBPV0VS X0RPTUFJTl9NQVNLIChCSVQoUE9XRVJfRE9NQUlOX05VTSkgLSAxKQo+ICsKPiArI2RlZmluZSBI U1dfQUxXQVlTX09OX1BPV0VSX0RPTUFJTlMgKAkJCVwKPiArCUJJVChQT1dFUl9ET01BSU5fUElQ RV9BKSB8CQkJXAo+ICsJQklUKFBPV0VSX0RPTUFJTl9UUkFOU0NPREVSX0VEUCkgfAkJXAo+ICsJ QklUKFBPV0VSX0RPTUFJTl9QT1JUX0RESV9BXzJfTEFORVMpIHwJCVwKPiArCUJJVChQT1dFUl9E T01BSU5fUE9SVF9ERElfQV80X0xBTkVTKSB8CQlcCj4gKwlCSVQoUE9XRVJfRE9NQUlOX1BPUlRf RERJX0JfMl9MQU5FUykgfAkJXAo+ICsJQklUKFBPV0VSX0RPTUFJTl9QT1JUX0RESV9CXzRfTEFO RVMpIHwJCVwKPiArCUJJVChQT1dFUl9ET01BSU5fUE9SVF9ERElfQ18yX0xBTkVTKSB8CQlcCj4g KwlCSVQoUE9XRVJfRE9NQUlOX1BPUlRfRERJX0NfNF9MQU5FUykgfAkJXAo+ICsJQklUKFBPV0VS X0RPTUFJTl9QT1JUX0RESV9EXzJfTEFORVMpIHwJCVwKPiArCUJJVChQT1dFUl9ET01BSU5fUE9S VF9ERElfRF80X0xBTkVTKSB8CQlcCj4gKwlCSVQoUE9XRVJfRE9NQUlOX1BPUlRfQ1JUKSB8CQkJ XAo+ICsJQklUKFBPV0VSX0RPTUFJTl9QTExTKSB8CQkJXAo+ICsJQklUKFBPV0VSX0RPTUFJTl9J TklUKSkKPiArI2RlZmluZSBIU1dfRElTUExBWV9QT1dFUl9ET01BSU5TICgJCQkJXAo+ICsJKFBP V0VSX0RPTUFJTl9NQVNLICYgfkhTV19BTFdBWVNfT05fUE9XRVJfRE9NQUlOUykgfAlcCj4gKwlC SVQoUE9XRVJfRE9NQUlOX0lOSVQpKQo+ICsKPiArI2RlZmluZSBCRFdfQUxXQVlTX09OX1BPV0VS X0RPTUFJTlMgKAkJCVwKPiArCUhTV19BTFdBWVNfT05fUE9XRVJfRE9NQUlOUyB8CQkJXAo+ICsJ QklUKFBPV0VSX0RPTUFJTl9QSVBFX0FfUEFORUxfRklUVEVSKSkKPiArI2RlZmluZSBCRFdfRElT UExBWV9QT1dFUl9ET01BSU5TICgJCQkJXAo+ICsJKFBPV0VSX0RPTUFJTl9NQVNLICYgfkJEV19B TFdBWVNfT05fUE9XRVJfRE9NQUlOUykgfAlcCj4gKwlCSVQoUE9XRVJfRE9NQUlOX0lOSVQpKQo+ ICsKPiArI2RlZmluZSBWTFZfQUxXQVlTX09OX1BPV0VSX0RPTUFJTlMJQklUKFBPV0VSX0RPTUFJ Tl9JTklUKQo+ICsjZGVmaW5lIFZMVl9ESVNQTEFZX1BPV0VSX0RPTUFJTlMJUE9XRVJfRE9NQUlO X01BU0sKPiArCj4gKyNkZWZpbmUgVkxWX0RQSU9fQ01OX0JDX1BPV0VSX0RPTUFJTlMgKAkJXAo+ ICsJQklUKFBPV0VSX0RPTUFJTl9QT1JUX0RESV9CXzJfTEFORVMpIHwJXAo+ICsJQklUKFBPV0VS X0RPTUFJTl9QT1JUX0RESV9CXzRfTEFORVMpIHwJXAo+ICsJQklUKFBPV0VSX0RPTUFJTl9QT1JU X0RESV9DXzJfTEFORVMpIHwJXAo+ICsJQklUKFBPV0VSX0RPTUFJTl9QT1JUX0RESV9DXzRfTEFO RVMpIHwJXAo+ICsJQklUKFBPV0VSX0RPTUFJTl9QT1JUX0NSVCkgfAkJXAo+ICsJQklUKFBPV0VS X0RPTUFJTl9JTklUKSkKPiArCj4gKyNkZWZpbmUgVkxWX0RQSU9fVFhfQl9MQU5FU18wMV9QT1dF Ul9ET01BSU5TICgJXAo+ICsJQklUKFBPV0VSX0RPTUFJTl9QT1JUX0RESV9CXzJfTEFORVMpIHwJ XAo+ICsJQklUKFBPV0VSX0RPTUFJTl9QT1JUX0RESV9CXzRfTEFORVMpIHwJXAo+ICsJQklUKFBP V0VSX0RPTUFJTl9JTklUKSkKPiArCj4gKyNkZWZpbmUgVkxWX0RQSU9fVFhfQl9MQU5FU18yM19Q T1dFUl9ET01BSU5TICgJXAo+ICsJQklUKFBPV0VSX0RPTUFJTl9QT1JUX0RESV9CXzRfTEFORVMp IHwJXAo+ICsJQklUKFBPV0VSX0RPTUFJTl9JTklUKSkKPiArCj4gKyNkZWZpbmUgVkxWX0RQSU9f VFhfQ19MQU5FU18wMV9QT1dFUl9ET01BSU5TICgJXAo+ICsJQklUKFBPV0VSX0RPTUFJTl9QT1JU X0RESV9DXzJfTEFORVMpIHwJXAo+ICsJQklUKFBPV0VSX0RPTUFJTl9QT1JUX0RESV9DXzRfTEFO RVMpIHwJXAo+ICsJQklUKFBPV0VSX0RPTUFJTl9JTklUKSkKPiArCj4gKyNkZWZpbmUgVkxWX0RQ SU9fVFhfQ19MQU5FU18yM19QT1dFUl9ET01BSU5TICgJXAo+ICsJQklUKFBPV0VSX0RPTUFJTl9Q T1JUX0RESV9DXzRfTEFORVMpIHwJXAo+ICsJQklUKFBPV0VSX0RPTUFJTl9JTklUKSkKPiArCj4g KyNkZWZpbmUgQ0hWX1BJUEVfQV9QT1dFUl9ET01BSU5TICgJXAo+ICsJQklUKFBPV0VSX0RPTUFJ Tl9QSVBFX0EpIHwJXAo+ICsJQklUKFBPV0VSX0RPTUFJTl9JTklUKSkKPiArCj4gKyNkZWZpbmUg Q0hWX1BJUEVfQl9QT1dFUl9ET01BSU5TICgJXAo+ICsJQklUKFBPV0VSX0RPTUFJTl9QSVBFX0Ip IHwJXAo+ICsJQklUKFBPV0VSX0RPTUFJTl9JTklUKSkKPiArCj4gKyNkZWZpbmUgQ0hWX1BJUEVf Q19QT1dFUl9ET01BSU5TICgJXAo+ICsJQklUKFBPV0VSX0RPTUFJTl9QSVBFX0MpIHwJXAo+ICsJ QklUKFBPV0VSX0RPTUFJTl9JTklUKSkKPiArCj4gKyNkZWZpbmUgQ0hWX0RQSU9fQ01OX0JDX1BP V0VSX0RPTUFJTlMgKAkJXAo+ICsJQklUKFBPV0VSX0RPTUFJTl9QT1JUX0RESV9CXzJfTEFORVMp IHwJXAo+ICsJQklUKFBPV0VSX0RPTUFJTl9QT1JUX0RESV9CXzRfTEFORVMpIHwJXAo+ICsJQklU KFBPV0VSX0RPTUFJTl9QT1JUX0RESV9DXzJfTEFORVMpIHwJXAo+ICsJQklUKFBPV0VSX0RPTUFJ Tl9QT1JUX0RESV9DXzRfTEFORVMpIHwJXAo+ICsJQklUKFBPV0VSX0RPTUFJTl9JTklUKSkKPiAr Cj4gKyNkZWZpbmUgQ0hWX0RQSU9fQ01OX0RfUE9XRVJfRE9NQUlOUyAoCQlcCj4gKwlCSVQoUE9X RVJfRE9NQUlOX1BPUlRfRERJX0RfMl9MQU5FUykgfAlcCj4gKwlCSVQoUE9XRVJfRE9NQUlOX1BP UlRfRERJX0RfNF9MQU5FUykgfAlcCj4gKwlCSVQoUE9XRVJfRE9NQUlOX0lOSVQpKQo+ICsKPiAr I2RlZmluZSBDSFZfRFBJT19UWF9EX0xBTkVTXzAxX1BPV0VSX0RPTUFJTlMgKAlcCj4gKwlCSVQo UE9XRVJfRE9NQUlOX1BPUlRfRERJX0RfMl9MQU5FUykgfAlcCj4gKwlCSVQoUE9XRVJfRE9NQUlO X1BPUlRfRERJX0RfNF9MQU5FUykgfAlcCj4gKwlCSVQoUE9XRVJfRE9NQUlOX0lOSVQpKQo+ICsK PiArI2RlZmluZSBDSFZfRFBJT19UWF9EX0xBTkVTXzIzX1BPV0VSX0RPTUFJTlMgKAlcCj4gKwlC SVQoUE9XRVJfRE9NQUlOX1BPUlRfRERJX0RfNF9MQU5FUykgfAlcCj4gKwlCSVQoUE9XRVJfRE9N QUlOX0lOSVQpKQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGxfb3Bz IGk5eHhfYWx3YXlzX29uX3Bvd2VyX3dlbGxfb3BzID0gewo+ICsJLnN5bmNfaHcgPSBpOXh4X2Fs d2F5c19vbl9wb3dlcl93ZWxsX25vb3AsCj4gKwkuZW5hYmxlID0gaTl4eF9hbHdheXNfb25fcG93 ZXJfd2VsbF9ub29wLAo+ICsJLmRpc2FibGUgPSBpOXh4X2Fsd2F5c19vbl9wb3dlcl93ZWxsX25v b3AsCj4gKwkuaXNfZW5hYmxlZCA9IGk5eHhfYWx3YXlzX29uX3Bvd2VyX3dlbGxfZW5hYmxlZCwK PiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsX29wcyBjaHZf cGlwZV9wb3dlcl93ZWxsX29wcyA9IHsKPiArCS5zeW5jX2h3ID0gY2h2X3BpcGVfcG93ZXJfd2Vs bF9zeW5jX2h3LAo+ICsJLmVuYWJsZSA9IGNodl9waXBlX3Bvd2VyX3dlbGxfZW5hYmxlLAo+ICsJ LmRpc2FibGUgPSBjaHZfcGlwZV9wb3dlcl93ZWxsX2Rpc2FibGUsCj4gKwkuaXNfZW5hYmxlZCA9 IGNodl9waXBlX3Bvd2VyX3dlbGxfZW5hYmxlZCwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBz dHJ1Y3QgaTkxNV9wb3dlcl93ZWxsX29wcyBjaHZfZHBpb19jbW5fcG93ZXJfd2VsbF9vcHMgPSB7 Cj4gKwkuc3luY19odyA9IHZsdl9wb3dlcl93ZWxsX3N5bmNfaHcsCj4gKwkuZW5hYmxlID0gY2h2 X2RwaW9fY21uX3Bvd2VyX3dlbGxfZW5hYmxlLAo+ICsJLmRpc2FibGUgPSBjaHZfZHBpb19jbW5f cG93ZXJfd2VsbF9kaXNhYmxlLAo+ICsJLmlzX2VuYWJsZWQgPSB2bHZfcG93ZXJfd2VsbF9lbmFi bGVkLAo+ICt9Owo+ICsKPiArc3RhdGljIHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwgaTl4eF9hbHdh eXNfb25fcG93ZXJfd2VsbFtdID0gewo+ICsJewo+ICsJCS5uYW1lID0gImFsd2F5cy1vbiIsCj4g KwkJLmFsd2F5c19vbiA9IDEsCj4gKwkJLmRvbWFpbnMgPSBQT1dFUl9ET01BSU5fTUFTSywKPiAr CQkub3BzID0gJmk5eHhfYWx3YXlzX29uX3Bvd2VyX3dlbGxfb3BzLAo+ICsJfSwKPiArfTsKPiAr Cj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsX29wcyBoc3dfcG93ZXJfd2Vs bF9vcHMgPSB7Cj4gKwkuc3luY19odyA9IGhzd19wb3dlcl93ZWxsX3N5bmNfaHcsCj4gKwkuZW5h YmxlID0gaHN3X3Bvd2VyX3dlbGxfZW5hYmxlLAo+ICsJLmRpc2FibGUgPSBoc3dfcG93ZXJfd2Vs bF9kaXNhYmxlLAo+ICsJLmlzX2VuYWJsZWQgPSBoc3dfcG93ZXJfd2VsbF9lbmFibGVkLAo+ICt9 Owo+ICsKPiArc3RhdGljIHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwgaHN3X3Bvd2VyX3dlbGxzW10g PSB7Cj4gKwl7Cj4gKwkJLm5hbWUgPSAiYWx3YXlzLW9uIiwKPiArCQkuYWx3YXlzX29uID0gMSwK PiArCQkuZG9tYWlucyA9IEhTV19BTFdBWVNfT05fUE9XRVJfRE9NQUlOUywKPiArCQkub3BzID0g Jmk5eHhfYWx3YXlzX29uX3Bvd2VyX3dlbGxfb3BzLAo+ICsJfSwKPiArCXsKPiArCQkubmFtZSA9 ICJkaXNwbGF5IiwKPiArCQkuZG9tYWlucyA9IEhTV19ESVNQTEFZX1BPV0VSX0RPTUFJTlMsCj4g KwkJLm9wcyA9ICZoc3dfcG93ZXJfd2VsbF9vcHMsCj4gKwl9LAo+ICt9Owo+ICsKPiArc3RhdGlj IHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwgYmR3X3Bvd2VyX3dlbGxzW10gPSB7Cj4gKwl7Cj4gKwkJ Lm5hbWUgPSAiYWx3YXlzLW9uIiwKPiArCQkuYWx3YXlzX29uID0gMSwKPiArCQkuZG9tYWlucyA9 IEJEV19BTFdBWVNfT05fUE9XRVJfRE9NQUlOUywKPiArCQkub3BzID0gJmk5eHhfYWx3YXlzX29u X3Bvd2VyX3dlbGxfb3BzLAo+ICsJfSwKPiArCXsKPiArCQkubmFtZSA9ICJkaXNwbGF5IiwKPiAr CQkuZG9tYWlucyA9IEJEV19ESVNQTEFZX1BPV0VSX0RPTUFJTlMsCj4gKwkJLm9wcyA9ICZoc3df cG93ZXJfd2VsbF9vcHMsCj4gKwl9LAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBp OTE1X3Bvd2VyX3dlbGxfb3BzIHZsdl9kaXNwbGF5X3Bvd2VyX3dlbGxfb3BzID0gewo+ICsJLnN5 bmNfaHcgPSB2bHZfcG93ZXJfd2VsbF9zeW5jX2h3LAo+ICsJLmVuYWJsZSA9IHZsdl9kaXNwbGF5 X3Bvd2VyX3dlbGxfZW5hYmxlLAo+ICsJLmRpc2FibGUgPSB2bHZfZGlzcGxheV9wb3dlcl93ZWxs X2Rpc2FibGUsCj4gKwkuaXNfZW5hYmxlZCA9IHZsdl9wb3dlcl93ZWxsX2VuYWJsZWQsCj4gK307 Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGk5MTVfcG93ZXJfd2VsbF9vcHMgdmx2X2RwaW9f Y21uX3Bvd2VyX3dlbGxfb3BzID0gewo+ICsJLnN5bmNfaHcgPSB2bHZfcG93ZXJfd2VsbF9zeW5j X2h3LAo+ICsJLmVuYWJsZSA9IHZsdl9kcGlvX2Ntbl9wb3dlcl93ZWxsX2VuYWJsZSwKPiArCS5k aXNhYmxlID0gdmx2X2RwaW9fY21uX3Bvd2VyX3dlbGxfZGlzYWJsZSwKPiArCS5pc19lbmFibGVk ID0gdmx2X3Bvd2VyX3dlbGxfZW5hYmxlZCwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgaTkxNV9wb3dlcl93ZWxsX29wcyB2bHZfZHBpb19wb3dlcl93ZWxsX29wcyA9IHsKPiArCS5z eW5jX2h3ID0gdmx2X3Bvd2VyX3dlbGxfc3luY19odywKPiArCS5lbmFibGUgPSB2bHZfcG93ZXJf d2VsbF9lbmFibGUsCj4gKwkuZGlzYWJsZSA9IHZsdl9wb3dlcl93ZWxsX2Rpc2FibGUsCj4gKwku aXNfZW5hYmxlZCA9IHZsdl9wb3dlcl93ZWxsX2VuYWJsZWQsCj4gK307Cj4gKwo+ICtzdGF0aWMg c3RydWN0IGk5MTVfcG93ZXJfd2VsbCB2bHZfcG93ZXJfd2VsbHNbXSA9IHsKPiArCXsKPiArCQku bmFtZSA9ICJhbHdheXMtb24iLAo+ICsJCS5hbHdheXNfb24gPSAxLAo+ICsJCS5kb21haW5zID0g VkxWX0FMV0FZU19PTl9QT1dFUl9ET01BSU5TLAo+ICsJCS5vcHMgPSAmaTl4eF9hbHdheXNfb25f cG93ZXJfd2VsbF9vcHMsCj4gKwl9LAo+ICsJewo+ICsJCS5uYW1lID0gImRpc3BsYXkiLAo+ICsJ CS5kb21haW5zID0gVkxWX0RJU1BMQVlfUE9XRVJfRE9NQUlOUywKPiArCQkuZGF0YSA9IFBVTklU X1BPV0VSX1dFTExfRElTUDJELAo+ICsJCS5vcHMgPSAmdmx2X2Rpc3BsYXlfcG93ZXJfd2VsbF9v cHMsCj4gKwl9LAo+ICsJewo+ICsJCS5uYW1lID0gImRwaW8tdHgtYi0wMSIsCj4gKwkJLmRvbWFp bnMgPSBWTFZfRFBJT19UWF9CX0xBTkVTXzAxX1BPV0VSX0RPTUFJTlMgfAo+ICsJCQkgICBWTFZf RFBJT19UWF9CX0xBTkVTXzIzX1BPV0VSX0RPTUFJTlMgfAo+ICsJCQkgICBWTFZfRFBJT19UWF9D X0xBTkVTXzAxX1BPV0VSX0RPTUFJTlMgfAo+ICsJCQkgICBWTFZfRFBJT19UWF9DX0xBTkVTXzIz X1BPV0VSX0RPTUFJTlMsCj4gKwkJLm9wcyA9ICZ2bHZfZHBpb19wb3dlcl93ZWxsX29wcywKPiAr CQkuZGF0YSA9IFBVTklUX1BPV0VSX1dFTExfRFBJT19UWF9CX0xBTkVTXzAxLAo+ICsJfSwKPiAr CXsKPiArCQkubmFtZSA9ICJkcGlvLXR4LWItMjMiLAo+ICsJCS5kb21haW5zID0gVkxWX0RQSU9f VFhfQl9MQU5FU18wMV9QT1dFUl9ET01BSU5TIHwKPiArCQkJICAgVkxWX0RQSU9fVFhfQl9MQU5F U18yM19QT1dFUl9ET01BSU5TIHwKPiArCQkJICAgVkxWX0RQSU9fVFhfQ19MQU5FU18wMV9QT1dF Ul9ET01BSU5TIHwKPiArCQkJICAgVkxWX0RQSU9fVFhfQ19MQU5FU18yM19QT1dFUl9ET01BSU5T LAo+ICsJCS5vcHMgPSAmdmx2X2RwaW9fcG93ZXJfd2VsbF9vcHMsCj4gKwkJLmRhdGEgPSBQVU5J VF9QT1dFUl9XRUxMX0RQSU9fVFhfQl9MQU5FU18yMywKPiArCX0sCj4gKwl7Cj4gKwkJLm5hbWUg PSAiZHBpby10eC1jLTAxIiwKPiArCQkuZG9tYWlucyA9IFZMVl9EUElPX1RYX0JfTEFORVNfMDFf UE9XRVJfRE9NQUlOUyB8Cj4gKwkJCSAgIFZMVl9EUElPX1RYX0JfTEFORVNfMjNfUE9XRVJfRE9N QUlOUyB8Cj4gKwkJCSAgIFZMVl9EUElPX1RYX0NfTEFORVNfMDFfUE9XRVJfRE9NQUlOUyB8Cj4g KwkJCSAgIFZMVl9EUElPX1RYX0NfTEFORVNfMjNfUE9XRVJfRE9NQUlOUywKPiArCQkub3BzID0g JnZsdl9kcGlvX3Bvd2VyX3dlbGxfb3BzLAo+ICsJCS5kYXRhID0gUFVOSVRfUE9XRVJfV0VMTF9E UElPX1RYX0NfTEFORVNfMDEsCj4gKwl9LAo+ICsJewo+ICsJCS5uYW1lID0gImRwaW8tdHgtYy0y MyIsCj4gKwkJLmRvbWFpbnMgPSBWTFZfRFBJT19UWF9CX0xBTkVTXzAxX1BPV0VSX0RPTUFJTlMg fAo+ICsJCQkgICBWTFZfRFBJT19UWF9CX0xBTkVTXzIzX1BPV0VSX0RPTUFJTlMgfAo+ICsJCQkg ICBWTFZfRFBJT19UWF9DX0xBTkVTXzAxX1BPV0VSX0RPTUFJTlMgfAo+ICsJCQkgICBWTFZfRFBJ T19UWF9DX0xBTkVTXzIzX1BPV0VSX0RPTUFJTlMsCj4gKwkJLm9wcyA9ICZ2bHZfZHBpb19wb3dl cl93ZWxsX29wcywKPiArCQkuZGF0YSA9IFBVTklUX1BPV0VSX1dFTExfRFBJT19UWF9DX0xBTkVT XzIzLAo+ICsJfSwKPiArCXsKPiArCQkubmFtZSA9ICJkcGlvLWNvbW1vbiIsCj4gKwkJLmRvbWFp bnMgPSBWTFZfRFBJT19DTU5fQkNfUE9XRVJfRE9NQUlOUywKPiArCQkuZGF0YSA9IFBVTklUX1BP V0VSX1dFTExfRFBJT19DTU5fQkMsCj4gKwkJLm9wcyA9ICZ2bHZfZHBpb19jbW5fcG93ZXJfd2Vs bF9vcHMsCj4gKwl9LAo+ICt9Owo+ICsKPiArc3RhdGljIHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwg Y2h2X3Bvd2VyX3dlbGxzW10gPSB7Cj4gKwl7Cj4gKwkJLm5hbWUgPSAiYWx3YXlzLW9uIiwKPiAr CQkuYWx3YXlzX29uID0gMSwKPiArCQkuZG9tYWlucyA9IFZMVl9BTFdBWVNfT05fUE9XRVJfRE9N QUlOUywKPiArCQkub3BzID0gJmk5eHhfYWx3YXlzX29uX3Bvd2VyX3dlbGxfb3BzLAo+ICsJfSwK PiArI2lmIDAKPiArCXsKPiArCQkubmFtZSA9ICJkaXNwbGF5IiwKPiArCQkuZG9tYWlucyA9IFZM Vl9ESVNQTEFZX1BPV0VSX0RPTUFJTlMsCj4gKwkJLmRhdGEgPSBQVU5JVF9QT1dFUl9XRUxMX0RJ U1AyRCwKPiArCQkub3BzID0gJnZsdl9kaXNwbGF5X3Bvd2VyX3dlbGxfb3BzLAo+ICsJfSwKPiAr CXsKPiArCQkubmFtZSA9ICJwaXBlLWEiLAo+ICsJCS5kb21haW5zID0gQ0hWX1BJUEVfQV9QT1dF Ul9ET01BSU5TLAo+ICsJCS5kYXRhID0gUElQRV9BLAo+ICsJCS5vcHMgPSAmY2h2X3BpcGVfcG93 ZXJfd2VsbF9vcHMsCj4gKwl9LAo+ICsJewo+ICsJCS5uYW1lID0gInBpcGUtYiIsCj4gKwkJLmRv bWFpbnMgPSBDSFZfUElQRV9CX1BPV0VSX0RPTUFJTlMsCj4gKwkJLmRhdGEgPSBQSVBFX0IsCj4g KwkJLm9wcyA9ICZjaHZfcGlwZV9wb3dlcl93ZWxsX29wcywKPiArCX0sCj4gKwl7Cj4gKwkJLm5h bWUgPSAicGlwZS1jIiwKPiArCQkuZG9tYWlucyA9IENIVl9QSVBFX0NfUE9XRVJfRE9NQUlOUywK PiArCQkuZGF0YSA9IFBJUEVfQywKPiArCQkub3BzID0gJmNodl9waXBlX3Bvd2VyX3dlbGxfb3Bz LAo+ICsJfSwKPiArI2VuZGlmCj4gKwl7Cj4gKwkJLm5hbWUgPSAiZHBpby1jb21tb24tYmMiLAo+ ICsJCS8qCj4gKwkJICogWFhYOiBjbW5yZXNldCBmb3Igb25lIFBIWSBzZWVtcyB0byBkaXN0dXJi IHRoZSBvdGhlci4KPiArCQkgKiBBcyBhIHdvcmthcm91bmQga2VlcCBib3RoIHBvd2VyZWQgb24g YXQgdGhlIHNhbWUKPiArCQkgKiB0aW1lIGZvciBub3cuCj4gKwkJICovCj4gKwkJLmRvbWFpbnMg PSBDSFZfRFBJT19DTU5fQkNfUE9XRVJfRE9NQUlOUyB8IENIVl9EUElPX0NNTl9EX1BPV0VSX0RP TUFJTlMsCj4gKwkJLmRhdGEgPSBQVU5JVF9QT1dFUl9XRUxMX0RQSU9fQ01OX0JDLAo+ICsJCS5v cHMgPSAmY2h2X2RwaW9fY21uX3Bvd2VyX3dlbGxfb3BzLAo+ICsJfSwKPiArCXsKPiArCQkubmFt ZSA9ICJkcGlvLWNvbW1vbi1kIiwKPiArCQkvKgo+ICsJCSAqIFhYWDogY21ucmVzZXQgZm9yIG9u ZSBQSFkgc2VlbXMgdG8gZGlzdHVyYiB0aGUgb3RoZXIuCj4gKwkJICogQXMgYSB3b3JrYXJvdW5k IGtlZXAgYm90aCBwb3dlcmVkIG9uIGF0IHRoZSBzYW1lCj4gKwkJICogdGltZSBmb3Igbm93Lgo+ ICsJCSAqLwo+ICsJCS5kb21haW5zID0gQ0hWX0RQSU9fQ01OX0JDX1BPV0VSX0RPTUFJTlMgfCBD SFZfRFBJT19DTU5fRF9QT1dFUl9ET01BSU5TLAo+ICsJCS5kYXRhID0gUFVOSVRfUE9XRVJfV0VM TF9EUElPX0NNTl9ELAo+ICsJCS5vcHMgPSAmY2h2X2RwaW9fY21uX3Bvd2VyX3dlbGxfb3BzLAo+ ICsJfSwKPiArI2lmIDAKPiArCXsKPiArCQkubmFtZSA9ICJkcGlvLXR4LWItMDEiLAo+ICsJCS5k b21haW5zID0gVkxWX0RQSU9fVFhfQl9MQU5FU18wMV9QT1dFUl9ET01BSU5TIHwKPiArCQkJICAg VkxWX0RQSU9fVFhfQl9MQU5FU18yM19QT1dFUl9ET01BSU5TLAo+ICsJCS5vcHMgPSAmdmx2X2Rw aW9fcG93ZXJfd2VsbF9vcHMsCj4gKwkJLmRhdGEgPSBQVU5JVF9QT1dFUl9XRUxMX0RQSU9fVFhf Ql9MQU5FU18wMSwKPiArCX0sCj4gKwl7Cj4gKwkJLm5hbWUgPSAiZHBpby10eC1iLTIzIiwKPiAr CQkuZG9tYWlucyA9IFZMVl9EUElPX1RYX0JfTEFORVNfMDFfUE9XRVJfRE9NQUlOUyB8Cj4gKwkJ CSAgIFZMVl9EUElPX1RYX0JfTEFORVNfMjNfUE9XRVJfRE9NQUlOUywKPiArCQkub3BzID0gJnZs dl9kcGlvX3Bvd2VyX3dlbGxfb3BzLAo+ICsJCS5kYXRhID0gUFVOSVRfUE9XRVJfV0VMTF9EUElP X1RYX0JfTEFORVNfMjMsCj4gKwl9LAo+ICsJewo+ICsJCS5uYW1lID0gImRwaW8tdHgtYy0wMSIs Cj4gKwkJLmRvbWFpbnMgPSBWTFZfRFBJT19UWF9DX0xBTkVTXzAxX1BPV0VSX0RPTUFJTlMgfAo+ ICsJCQkgICBWTFZfRFBJT19UWF9DX0xBTkVTXzIzX1BPV0VSX0RPTUFJTlMsCj4gKwkJLm9wcyA9 ICZ2bHZfZHBpb19wb3dlcl93ZWxsX29wcywKPiArCQkuZGF0YSA9IFBVTklUX1BPV0VSX1dFTExf RFBJT19UWF9DX0xBTkVTXzAxLAo+ICsJfSwKPiArCXsKPiArCQkubmFtZSA9ICJkcGlvLXR4LWMt MjMiLAo+ICsJCS5kb21haW5zID0gVkxWX0RQSU9fVFhfQ19MQU5FU18wMV9QT1dFUl9ET01BSU5T IHwKPiArCQkJICAgVkxWX0RQSU9fVFhfQ19MQU5FU18yM19QT1dFUl9ET01BSU5TLAo+ICsJCS5v cHMgPSAmdmx2X2RwaW9fcG93ZXJfd2VsbF9vcHMsCj4gKwkJLmRhdGEgPSBQVU5JVF9QT1dFUl9X RUxMX0RQSU9fVFhfQ19MQU5FU18yMywKPiArCX0sCj4gKwl7Cj4gKwkJLm5hbWUgPSAiZHBpby10 eC1kLTAxIiwKPiArCQkuZG9tYWlucyA9IENIVl9EUElPX1RYX0RfTEFORVNfMDFfUE9XRVJfRE9N QUlOUyB8Cj4gKwkJCSAgIENIVl9EUElPX1RYX0RfTEFORVNfMjNfUE9XRVJfRE9NQUlOUywKPiAr CQkub3BzID0gJnZsdl9kcGlvX3Bvd2VyX3dlbGxfb3BzLAo+ICsJCS5kYXRhID0gUFVOSVRfUE9X RVJfV0VMTF9EUElPX1RYX0RfTEFORVNfMDEsCj4gKwl9LAo+ICsJewo+ICsJCS5uYW1lID0gImRw aW8tdHgtZC0yMyIsCj4gKwkJLmRvbWFpbnMgPSBDSFZfRFBJT19UWF9EX0xBTkVTXzAxX1BPV0VS X0RPTUFJTlMgfAo+ICsJCQkgICBDSFZfRFBJT19UWF9EX0xBTkVTXzIzX1BPV0VSX0RPTUFJTlMs Cj4gKwkJLm9wcyA9ICZ2bHZfZHBpb19wb3dlcl93ZWxsX29wcywKPiArCQkuZGF0YSA9IFBVTklU X1BPV0VSX1dFTExfRFBJT19UWF9EX0xBTkVTXzIzLAo+ICsJfSwKPiArI2VuZGlmCj4gK307Cj4g Kwo+ICtzdGF0aWMgc3RydWN0IGk5MTVfcG93ZXJfd2VsbCAqbG9va3VwX3Bvd2VyX3dlbGwoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICsJCQkJCQkgZW51bSBwdW5pdF9wb3dl cl93ZWxsIHBvd2VyX3dlbGxfaWQpCj4gK3sKPiArCXN0cnVjdCBpOTE1X3Bvd2VyX2RvbWFpbnMg KnBvd2VyX2RvbWFpbnMgPSAmZGV2X3ByaXYtPnBvd2VyX2RvbWFpbnM7Cj4gKwlzdHJ1Y3QgaTkx NV9wb3dlcl93ZWxsICpwb3dlcl93ZWxsOwo+ICsJaW50IGk7Cj4gKwo+ICsJZm9yX2VhY2hfcG93 ZXJfd2VsbChpLCBwb3dlcl93ZWxsLCBQT1dFUl9ET01BSU5fTUFTSywgcG93ZXJfZG9tYWlucykg ewo+ICsJCWlmIChwb3dlcl93ZWxsLT5kYXRhID09IHBvd2VyX3dlbGxfaWQpCj4gKwkJCXJldHVy biBwb3dlcl93ZWxsOwo+ICsJfQo+ICsKPiArCXJldHVybiBOVUxMOwo+ICt9Cj4gKwo+ICsjZGVm aW5lIHNldF9wb3dlcl93ZWxscyhwb3dlcl9kb21haW5zLCBfX3Bvd2VyX3dlbGxzKSAoewkJXAo+ ICsJKHBvd2VyX2RvbWFpbnMpLT5wb3dlcl93ZWxscyA9IChfX3Bvd2VyX3dlbGxzKTsJCQlcCj4g KwkocG93ZXJfZG9tYWlucyktPnBvd2VyX3dlbGxfY291bnQgPSBBUlJBWV9TSVpFKF9fcG93ZXJf d2VsbHMpOwlcCj4gK30pCj4gKwo+ICtpbnQgaW50ZWxfcG93ZXJfZG9tYWluc19pbml0KHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArewo+ICsJc3RydWN0IGk5MTVfcG93ZXJf ZG9tYWlucyAqcG93ZXJfZG9tYWlucyA9ICZkZXZfcHJpdi0+cG93ZXJfZG9tYWluczsKPiArCj4g KwltdXRleF9pbml0KCZwb3dlcl9kb21haW5zLT5sb2NrKTsKPiArCj4gKwkvKgo+ICsJICogVGhl IGVuYWJsaW5nIG9yZGVyIHdpbGwgYmUgZnJvbSBsb3dlciB0byBoaWdoZXIgaW5kZXhlZCB3ZWxs cywKPiArCSAqIHRoZSBkaXNhYmxpbmcgb3JkZXIgaXMgcmV2ZXJzZWQuCj4gKwkgKi8KPiArCWlm IChJU19IQVNXRUxMKGRldl9wcml2LT5kZXYpKSB7Cj4gKwkJc2V0X3Bvd2VyX3dlbGxzKHBvd2Vy X2RvbWFpbnMsIGhzd19wb3dlcl93ZWxscyk7Cj4gKwkJaHN3X3B3ciA9IHBvd2VyX2RvbWFpbnM7 Cj4gKwl9IGVsc2UgaWYgKElTX0JST0FEV0VMTChkZXZfcHJpdi0+ZGV2KSkgewo+ICsJCXNldF9w b3dlcl93ZWxscyhwb3dlcl9kb21haW5zLCBiZHdfcG93ZXJfd2VsbHMpOwo+ICsJCWhzd19wd3Ig PSBwb3dlcl9kb21haW5zOwo+ICsJfSBlbHNlIGlmIChJU19DSEVSUllWSUVXKGRldl9wcml2LT5k ZXYpKSB7Cj4gKwkJc2V0X3Bvd2VyX3dlbGxzKHBvd2VyX2RvbWFpbnMsIGNodl9wb3dlcl93ZWxs cyk7Cj4gKwl9IGVsc2UgaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYtPmRldikpIHsKPiArCQlz ZXRfcG93ZXJfd2VsbHMocG93ZXJfZG9tYWlucywgdmx2X3Bvd2VyX3dlbGxzKTsKPiArCX0gZWxz ZSB7Cj4gKwkJc2V0X3Bvd2VyX3dlbGxzKHBvd2VyX2RvbWFpbnMsIGk5eHhfYWx3YXlzX29uX3Bv d2VyX3dlbGwpOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICt2b2lkIGludGVs X3Bvd2VyX2RvbWFpbnNfcmVtb3ZlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikK PiArewo+ICsJaHN3X3B3ciA9IE5VTEw7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGludGVsX3Bv d2VyX2RvbWFpbnNfcmVzdW1lKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAr ewo+ICsJc3RydWN0IGk5MTVfcG93ZXJfZG9tYWlucyAqcG93ZXJfZG9tYWlucyA9ICZkZXZfcHJp di0+cG93ZXJfZG9tYWluczsKPiArCXN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwgKnBvd2VyX3dlbGw7 Cj4gKwlpbnQgaTsKPiArCj4gKwltdXRleF9sb2NrKCZwb3dlcl9kb21haW5zLT5sb2NrKTsKPiAr CWZvcl9lYWNoX3Bvd2VyX3dlbGwoaSwgcG93ZXJfd2VsbCwgUE9XRVJfRE9NQUlOX01BU0ssIHBv d2VyX2RvbWFpbnMpIHsKPiArCQlwb3dlcl93ZWxsLT5vcHMtPnN5bmNfaHcoZGV2X3ByaXYsIHBv d2VyX3dlbGwpOwo+ICsJCXBvd2VyX3dlbGwtPmh3X2VuYWJsZWQgPSBwb3dlcl93ZWxsLT5vcHMt PmlzX2VuYWJsZWQoZGV2X3ByaXYsCj4gKwkJCQkJCQkJICAgICBwb3dlcl93ZWxsKTsKPiArCX0K PiArCW11dGV4X3VubG9jaygmcG93ZXJfZG9tYWlucy0+bG9jayk7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIHZsdl9jbW5sYW5lX3dhKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikK PiArewo+ICsJc3RydWN0IGk5MTVfcG93ZXJfd2VsbCAqY21uID0KPiArCQlsb29rdXBfcG93ZXJf d2VsbChkZXZfcHJpdiwgUFVOSVRfUE9XRVJfV0VMTF9EUElPX0NNTl9CQyk7Cj4gKwlzdHJ1Y3Qg aTkxNV9wb3dlcl93ZWxsICpkaXNwMmQgPQo+ICsJCWxvb2t1cF9wb3dlcl93ZWxsKGRldl9wcml2 LCBQVU5JVF9QT1dFUl9XRUxMX0RJU1AyRCk7Cj4gKwo+ICsJLyogbm90aGluZyB0byBkbyBpZiBj b21tb24gbGFuZSBpcyBhbHJlYWR5IG9mZiAqLwo+ICsJaWYgKCFjbW4tPm9wcy0+aXNfZW5hYmxl ZChkZXZfcHJpdiwgY21uKSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJLyogSWYgdGhlIGRpc3BsYXkg bWlnaHQgYmUgYWxyZWFkeSBhY3RpdmUgc2tpcCB0aGlzICovCj4gKwlpZiAoZGlzcDJkLT5vcHMt PmlzX2VuYWJsZWQoZGV2X3ByaXYsIGRpc3AyZCkgJiYKPiArCSAgICBJOTE1X1JFQUQoRFBJT19D VEwpICYgRFBJT19DTU5SU1QpCj4gKwkJcmV0dXJuOwo+ICsKPiArCURSTV9ERUJVR19LTVMoInRv Z2dsaW5nIGRpc3BsYXkgUEhZIHNpZGUgcmVzZXRcbiIpOwo+ICsKPiArCS8qIGNtbmxhbmUgbmVl ZHMgRFBMTCByZWdpc3RlcnMgKi8KPiArCWRpc3AyZC0+b3BzLT5lbmFibGUoZGV2X3ByaXYsIGRp c3AyZCk7Cj4gKwo+ICsJLyoKPiArCSAqIEZyb20gVkxWMkEwX0RQX2VEUF9IRE1JX0RQSU9fZHJp dmVyX3ZiaW9zX25vdGVzXzExLmRvY3g6Cj4gKwkgKiBOZWVkIHRvIGFzc2VydCBhbmQgZGUtYXNz ZXJ0IFBIWSBTQiByZXNldCBieSBnYXRpbmcgdGhlCj4gKwkgKiBjb21tb24gbGFuZSBwb3dlciwg dGhlbiB1bi1nYXRpbmcgaXQuCj4gKwkgKiBTaW1wbHkgdW5nYXRpbmcgaXNuJ3QgZW5vdWdoIHRv IHJlc2V0IHRoZSBQSFkgZW5vdWdoIHRvIGdldAo+ICsJICogcG9ydHMgYW5kIGxhbmVzIHJ1bm5p bmcuCj4gKwkgKi8KPiArCWNtbi0+b3BzLT5kaXNhYmxlKGRldl9wcml2LCBjbW4pOwo+ICt9Cj4g Kwo+ICt2b2lkIGludGVsX3Bvd2VyX2RvbWFpbnNfaW5pdF9odyhzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpCj4gK3sKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkZXZfcHJp di0+ZGV2Owo+ICsJc3RydWN0IGk5MTVfcG93ZXJfZG9tYWlucyAqcG93ZXJfZG9tYWlucyA9ICZk ZXZfcHJpdi0+cG93ZXJfZG9tYWluczsKPiArCj4gKwlwb3dlcl9kb21haW5zLT5pbml0aWFsaXpp bmcgPSB0cnVlOwo+ICsKPiArCWlmIChJU19WQUxMRVlWSUVXKGRldikgJiYgIUlTX0NIRVJSWVZJ RVcoZGV2KSkgewo+ICsJCW11dGV4X2xvY2soJnBvd2VyX2RvbWFpbnMtPmxvY2spOwo+ICsJCXZs dl9jbW5sYW5lX3dhKGRldl9wcml2KTsKPiArCQltdXRleF91bmxvY2soJnBvd2VyX2RvbWFpbnMt PmxvY2spOwo+ICsJfQo+ICsKPiArCS8qIEZvciBub3csIHdlIG5lZWQgdGhlIHBvd2VyIHdlbGwg dG8gYmUgYWx3YXlzIGVuYWJsZWQuICovCj4gKwlpbnRlbF9kaXNwbGF5X3NldF9pbml0X3Bvd2Vy KGRldl9wcml2LCB0cnVlKTsKPiArCWludGVsX3Bvd2VyX2RvbWFpbnNfcmVzdW1lKGRldl9wcml2 KTsKPiArCXBvd2VyX2RvbWFpbnMtPmluaXRpYWxpemluZyA9IGZhbHNlOwo+ICt9Cj4gKwo+ICt2 b2lkIGludGVsX2F1eF9kaXNwbGF5X3J1bnRpbWVfZ2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdikKPiArewo+ICsJaW50ZWxfcnVudGltZV9wbV9nZXQoZGV2X3ByaXYpOwo+ICt9 Cj4gKwo+ICt2b2lkIGludGVsX2F1eF9kaXNwbGF5X3J1bnRpbWVfcHV0KHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikKPiArewo+ICsJaW50ZWxfcnVudGltZV9wbV9wdXQoZGV2X3By aXYpOwo+ICt9Cj4gKwo+ICt2b2lkIGludGVsX3J1bnRpbWVfcG1fZ2V0KHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRl dl9wcml2LT5kZXY7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXZpY2UgPSAmZGV2LT5wZGV2LT5kZXY7 Cj4gKwo+ICsJaWYgKCFIQVNfUlVOVElNRV9QTShkZXYpKQo+ICsJCXJldHVybjsKPiArCj4gKwlw bV9ydW50aW1lX2dldF9zeW5jKGRldmljZSk7Cj4gKwlXQVJOKGRldl9wcml2LT5wbS5zdXNwZW5k ZWQsICJEZXZpY2Ugc3RpbGwgc3VzcGVuZGVkLlxuIik7Cj4gK30KPiArCj4gK3ZvaWQgaW50ZWxf cnVudGltZV9wbV9nZXRfbm9yZXN1bWUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZGV2X3ByaXYtPmRldjsKPiArCXN0 cnVjdCBkZXZpY2UgKmRldmljZSA9ICZkZXYtPnBkZXYtPmRldjsKPiArCj4gKwlpZiAoIUhBU19S VU5USU1FX1BNKGRldikpCj4gKwkJcmV0dXJuOwo+ICsKPiArCVdBUk4oZGV2X3ByaXYtPnBtLnN1 c3BlbmRlZCwgIkdldHRpbmcgbm9zeW5jLXJlZiB3aGlsZSBzdXNwZW5kZWQuXG4iKTsKPiArCXBt X3J1bnRpbWVfZ2V0X25vcmVzdW1lKGRldmljZSk7Cj4gK30KPiArCj4gK3ZvaWQgaW50ZWxfcnVu dGltZV9wbV9wdXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICt7Cj4gKwlz dHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZGV2X3ByaXYtPmRldjsKPiArCXN0cnVjdCBkZXZpY2Ug KmRldmljZSA9ICZkZXYtPnBkZXYtPmRldjsKPiArCj4gKwlpZiAoIUhBU19SVU5USU1FX1BNKGRl dikpCj4gKwkJcmV0dXJuOwo+ICsKPiArCXBtX3J1bnRpbWVfbWFya19sYXN0X2J1c3koZGV2aWNl KTsKPiArCXBtX3J1bnRpbWVfcHV0X2F1dG9zdXNwZW5kKGRldmljZSk7Cj4gK30KPiArCj4gK3Zv aWQgaW50ZWxfaW5pdF9ydW50aW1lX3BtKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRldl9wcml2LT5kZXY7Cj4gKwlz dHJ1Y3QgZGV2aWNlICpkZXZpY2UgPSAmZGV2LT5wZGV2LT5kZXY7Cj4gKwo+ICsJaWYgKCFIQVNf UlVOVElNRV9QTShkZXYpKQo+ICsJCXJldHVybjsKPiArCj4gKwlwbV9ydW50aW1lX3NldF9hY3Rp dmUoZGV2aWNlKTsKPiArCj4gKwkvKgo+ICsJICogUlBNIGRlcGVuZHMgb24gUkM2IHRvIHNhdmUg cmVzdG9yZSB0aGUgR1QgSFcgY29udGV4dCwgc28gbWFrZSBSQzYgYQo+ICsJICogcmVxdWlyZW1l bnQuCj4gKwkgKi8KPiArCWlmICghaW50ZWxfZW5hYmxlX3JjNihkZXYpKSB7Cj4gKwkJRFJNX0lO Rk8oIlJDNiBkaXNhYmxlZCwgZGlzYWJsaW5nIHJ1bnRpbWUgUE0gc3VwcG9ydFxuIik7Cj4gKwkJ cmV0dXJuOwo+ICsJfQo+ICsKPiArCXBtX3J1bnRpbWVfc2V0X2F1dG9zdXNwZW5kX2RlbGF5KGRl dmljZSwgMTAwMDApOyAvKiAxMHMgKi8KPiArCXBtX3J1bnRpbWVfbWFya19sYXN0X2J1c3koZGV2 aWNlKTsKPiArCXBtX3J1bnRpbWVfdXNlX2F1dG9zdXNwZW5kKGRldmljZSk7Cj4gKwo+ICsJcG1f cnVudGltZV9wdXRfYXV0b3N1c3BlbmQoZGV2aWNlKTsKPiArfQo+ICsKPiArdm9pZCBpbnRlbF9m aW5pX3J1bnRpbWVfcG0oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICt7Cj4g KwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZGV2X3ByaXYtPmRldjsKPiArCXN0cnVjdCBkZXZp Y2UgKmRldmljZSA9ICZkZXYtPnBkZXYtPmRldjsKPiArCj4gKwlpZiAoIUhBU19SVU5USU1FX1BN KGRldikpCj4gKwkJcmV0dXJuOwo+ICsKPiArCWlmICghaW50ZWxfZW5hYmxlX3JjNihkZXYpKQo+ ICsJCXJldHVybjsKPiArCj4gKwkvKiBNYWtlIHN1cmUgd2UncmUgbm90IHN1c3BlbmRlZCBmaXJz dC4gKi8KPiArCXBtX3J1bnRpbWVfZ2V0X3N5bmMoZGV2aWNlKTsKPiArCXBtX3J1bnRpbWVfZGlz YWJsZShkZXZpY2UpOwo+ICt9Cj4gKwo+ICsvKiBEaXNwbGF5IGF1ZGlvIGRyaXZlciBwb3dlciB3 ZWxsIHJlcXVlc3QgKi8KPiAraW50IGk5MTVfcmVxdWVzdF9wb3dlcl93ZWxsKHZvaWQpCj4gK3sK PiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdjsKPiArCj4gKwlpZiAoIWhzd19w d3IpCj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwo+ICsJZGV2X3ByaXYgPSBjb250YWluZXJfb2Yo aHN3X3B3ciwgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUsCj4gKwkJCQlwb3dlcl9kb21haW5zKTsK PiArCWludGVsX2Rpc3BsYXlfcG93ZXJfZ2V0KGRldl9wcml2LCBQT1dFUl9ET01BSU5fQVVESU8p Owo+ICsJcmV0dXJuIDA7Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwoaTkxNV9yZXF1ZXN0X3Bv d2VyX3dlbGwpOwo+ICsKPiArLyogRGlzcGxheSBhdWRpbyBkcml2ZXIgcG93ZXIgd2VsbCByZWxl YXNlICovCj4gK2ludCBpOTE1X3JlbGVhc2VfcG93ZXJfd2VsbCh2b2lkKQo+ICt7Cj4gKwlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXY7Cj4gKwo+ICsJaWYgKCFoc3dfcHdyKQo+ICsJ CXJldHVybiAtRU5PREVWOwo+ICsKPiArCWRldl9wcml2ID0gY29udGFpbmVyX29mKGhzd19wd3Is IHN0cnVjdCBkcm1faTkxNV9wcml2YXRlLAo+ICsJCQkJcG93ZXJfZG9tYWlucyk7Cj4gKwlpbnRl bF9kaXNwbGF5X3Bvd2VyX3B1dChkZXZfcHJpdiwgUE9XRVJfRE9NQUlOX0FVRElPKTsKPiArCXJl dHVybiAwOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKGk5MTVfcmVsZWFzZV9wb3dlcl93ZWxs KTsKPiArCj4gKy8qCj4gKyAqIFByaXZhdGUgaW50ZXJmYWNlIGZvciB0aGUgYXVkaW8gZHJpdmVy IHRvIGdldCBDRENMSyBpbiBrSHouCj4gKyAqCj4gKyAqIENhbGxlciBtdXN0IHJlcXVlc3QgcG93 ZXIgd2VsbCB1c2luZyBpOTE1X3JlcXVlc3RfcG93ZXJfd2VsbCgpIHByaW9yIHRvCj4gKyAqIG1h a2luZyB0aGUgY2FsbC4KPiArICovCj4gK2ludCBpOTE1X2dldF9jZGNsa19mcmVxKHZvaWQpCj4g K3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdjsKPiArCj4gKwlpZiAoIWhz d19wd3IpCj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwo+ICsJZGV2X3ByaXYgPSBjb250YWluZXJf b2YoaHN3X3B3ciwgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUsCj4gKwkJCQlwb3dlcl9kb21haW5z KTsKPiArCj4gKwlyZXR1cm4gaW50ZWxfZGRpX2dldF9jZGNsa19mcmVxKGRldl9wcml2KTsKPiAr fQo+ICtFWFBPUlRfU1lNQk9MX0dQTChpOTE1X2dldF9jZGNsa19mcmVxKTsKCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBs aXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=