From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alan Cox Subject: [PATCH 09/47] gma500: initial medfield merge Date: Thu, 08 Mar 2012 16:02:20 +0000 Message-ID: <20120308160216.7973.63190.stgit@bob.linux.org.uk> References: <20120308155914.7973.16588.stgit@bob.linux.org.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from lxorguk.ukuu.org.uk (lxorguk.ukuu.org.uk [81.2.110.251]) by gabe.freedesktop.org (Postfix) with ESMTP id CFCE5A0D02 for ; Thu, 8 Mar 2012 07:47:58 -0800 (PST) In-Reply-To: <20120308155914.7973.16588.stgit@bob.linux.org.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org Errors-To: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org To: airlied@linux.ie, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org RnJvbTogS2lyaWxsIEEuIFNodXRlbW92IDxraXJpbGwuc2h1dGVtb3ZAbGludXguaW50ZWwuY29t PgoKV2UgbmVlZCB0byBtZXJnZSB0aGlzIGFoZWFkIG9mIHNvbWUgb2YgdGhlIGNsZWFudXAgYmVj YXVzZSBhIGxvdCBvZiBuZWVkZWQKY2xlYW51cCBzcGFucyBib3RoIG5ldyBhbmQgb2xkIGNoaXBz LiBJZiB3ZSB0cnkgYW5kIGNsZWFuIHVwIGFuZCB0aGUgbWVyZ2UKd2UgZW5kIHVwIGZpZ2h0aW5n IG91cnNlbHZlcy4KClNpZ25lZC1vZmYtYnk6IEtpcmlsbCBBLiBTaHV0ZW1vdiA8a2lyaWxsLnNo dXRlbW92QGxpbnV4LmludGVsLmNvbT4KW1dpdGggYSBsb2FkIG9mIHRoZSBjbGVhbnVwIHN0dWZm IGZvbGRlZCBpbiwgcmVnaXN0ZXIgc3R1ZmYgcmV3b3JrZWQgc2FuZWx5XQpTaWduZWQtb2ZmLWJ5 OiBBbGFuIENveCA8YWxhbkBsaW51eC5pbnRlbC5jb20+Ci0tLQoKIGFyY2gveDg2L3BsYXRmb3Jt L21yc3QvbXJzdC5jICAgICAgICAgICAgICAgICB8ICAgMTYgCiBkcml2ZXJzL2dwdS9kcm0vZ21h NTAwL0tjb25maWcgICAgICAgICAgICAgICAgfCAgICA3IAogZHJpdmVycy9ncHUvZHJtL2dtYTUw MC9NYWtlZmlsZSAgICAgICAgICAgICAgIHwgICAxMCAKIGRyaXZlcnMvZ3B1L2RybS9nbWE1MDAv bWRmbGRfZGV2aWNlLmMgICAgICAgICB8ICA2OTEgKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1 L2RybS9nbWE1MDAvbWRmbGRfZHNpX2RwaS5jICAgICAgICB8IDEwMjQgKysrKysrKysrKysrKysr KysrKysrCiBkcml2ZXJzL2dwdS9kcm0vZ21hNTAwL21kZmxkX2RzaV9kcGkuaCAgICAgICAgfCAg IDc5ICsrCiBkcml2ZXJzL2dwdS9kcm0vZ21hNTAwL21kZmxkX2RzaV9vdXRwdXQuYyAgICAgfCAg NjM1ICsrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9nbWE1MDAvbWRmbGRfZHNpX291dHB1 dC5oICAgICB8ICAzODkgKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9nbWE1MDAvbWRmbGRfZHNp X3BrZ19zZW5kZXIuYyB8ICA2OTQgKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vZ21h NTAwL21kZmxkX2RzaV9wa2dfc2VuZGVyLmggfCAgIDkyICsrCiBkcml2ZXJzL2dwdS9kcm0vZ21h NTAwL21kZmxkX2ludGVsX2Rpc3BsYXkuYyAgfCAxMTkyICsrKysrKysrKysrKysrKysrKysrKysr KysKIGRyaXZlcnMvZ3B1L2RybS9nbWE1MDAvbWRmbGRfb3V0cHV0LmMgICAgICAgICB8ICAgNzcg KysKIGRyaXZlcnMvZ3B1L2RybS9nbWE1MDAvbWRmbGRfb3V0cHV0LmggICAgICAgICB8ICAgNzcg KysKIGRyaXZlcnMvZ3B1L2RybS9nbWE1MDAvbWRmbGRfdG1kX3ZpZC5jICAgICAgICB8ICAyMDEg KysrKwogZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9tZGZsZF90cG9fdmlkLmMgICAgICAgIHwgIDEy NCArKysKIGRyaXZlcnMvZ3B1L2RybS9nbWE1MDAvcHNiX2Rydi5jICAgICAgICAgICAgICB8ICAg MTAgCiBkcml2ZXJzL2dwdS9kcm0vZ21hNTAwL3BzYl9kcnYuaCAgICAgICAgICAgICAgfCAgIDg5 ICsrCiBkcml2ZXJzL2dwdS9kcm0vZ21hNTAwL3BzYl9pcnEuYyAgICAgICAgICAgICAgfCAgIDU4 ICsKIGRyaXZlcnMvZ3B1L2RybS9nbWE1MDAvcHNiX2lycS5oICAgICAgICAgICAgICB8ICAgIDIg CiBkcml2ZXJzL2dwdS9kcm0vZ21hNTAwL3RjMzU4NzZ4LWRzaS1sdmRzLmMgICAgfCAgODI5ICsr KysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vZ21hNTAwL3RjMzU4NzZ4LWRzaS1sdmRz LmggICAgfCAgIDM4ICsKIGluY2x1ZGUvbGludXgvaTJjL3RjMzU4NzZ4LmggICAgICAgICAgICAg ICAgICB8ICAgMTEgCiAyMiBmaWxlcyBjaGFuZ2VkLCA2MzQ1IGluc2VydGlvbnMoKyksIDAgZGVs ZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9tZGZs ZF9kZXZpY2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9nbWE1MDAvbWRm bGRfZHNpX2RwaS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9t ZGZsZF9kc2lfZHBpLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vZ21hNTAw L21kZmxkX2RzaV9vdXRwdXQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9n bWE1MDAvbWRmbGRfZHNpX291dHB1dC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL2dtYTUwMC9tZGZsZF9kc2lfcGtnX3NlbmRlci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL2dtYTUwMC9tZGZsZF9kc2lfcGtnX3NlbmRlci5oCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9tZGZsZF9pbnRlbF9kaXNwbGF5LmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vZ21hNTAwL21kZmxkX291dHB1dC5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9tZGZsZF9vdXRwdXQuaAogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9nbWE1MDAvbWRmbGRfdG1kX3ZpZC5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9tZGZsZF90cG9fdmlkLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vZ21hNTAwL3RjMzU4NzZ4LWRzaS1s dmRzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vZ21hNTAwL3RjMzU4NzZ4 LWRzaS1sdmRzLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2xpbnV4L2kyYy90YzM1ODc2 eC5oCgoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BsYXRmb3JtL21yc3QvbXJzdC5jIGIvYXJjaC94 ODYvcGxhdGZvcm0vbXJzdC9tcnN0LmMKaW5kZXggNDc1ZTJjZC4uYjkzMGNjNCAxMDA2NDQKLS0t IGEvYXJjaC94ODYvcGxhdGZvcm0vbXJzdC9tcnN0LmMKKysrIGIvYXJjaC94ODYvcGxhdGZvcm0v bXJzdC9tcnN0LmMKQEAgLTI4LDYgKzI4LDggQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4K ICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC9pbnRlbF9t c2ljLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy90YzM1 ODc2eC5oPgogCiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL21wc3BlY19k ZWYuaD4KQEAgLTY4Niw2ICs2ODgsMTkgQEAgc3RhdGljIHZvaWQgKm1zaWNfb2NkX3BsYXRmb3Jt X2RhdGEodm9pZCAqaW5mbykKIAlyZXR1cm4gbXNpY19nZW5lcmljX3BsYXRmb3JtX2RhdGEoaW5m bywgSU5URUxfTVNJQ19CTE9DS19PQ0QpOwogfQogCisvKiB0YzM1ODc2eCBEU0ktTFZEUyBicmlk Z2UgY2hpcCBhbmQgcGFuZWwgcGxhdGZvcm0gZGF0YSAqLworc3RhdGljIHZvaWQgKnRjMzU4NzZ4 X3BsYXRmb3JtX2RhdGEodm9pZCAqZGF0YSkKK3sKKyAgICAgICBzdGF0aWMgc3RydWN0IHRjMzU4 NzZ4X3BsYXRmb3JtX2RhdGEgcGRhdGE7CisKKyAgICAgICAvKiBncGlvIHBpbnMgc2V0IHRvIC0x IHdpbGwgbm90IGJlIHVzZWQgYnkgdGhlIGRyaXZlciAqLworICAgICAgIHBkYXRhLmdwaW9fYnJp ZGdlX3Jlc2V0ID0gZ2V0X2dwaW9fYnlfbmFtZSgiTENNQl9SWEVOIik7CisgICAgICAgcGRhdGEu Z3Bpb19wYW5lbF9ibF9lbiA9IGdldF9ncGlvX2J5X25hbWUoIjZTNlBfQkxfRU4iKTsKKyAgICAg ICBwZGF0YS5ncGlvX3BhbmVsX3ZhZGQgPSBnZXRfZ3Bpb19ieV9uYW1lKCJFTl9WUkVHX0xDRF9W M1AzIik7CisKKyAgICAgICByZXR1cm4gJnBkYXRhOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0 IGRldnNfaWQgX19pbml0Y29uc3QgZGV2aWNlX2lkc1tdID0gewogCXsiYm1hMDIzIiwgU0ZJX0RF Vl9UWVBFX0kyQywgMSwgJm5vX3BsYXRmb3JtX2RhdGF9LAogCXsicG1pY19ncGlvIiwgU0ZJX0RF Vl9UWVBFX1NQSSwgMSwgJnBtaWNfZ3Bpb19wbGF0Zm9ybV9kYXRhfSwKQEAgLTY5OCw2ICs3MTMs NyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRldnNfaWQgX19pbml0Y29uc3QgZGV2aWNlX2lkc1td ID0gewogCXsiaTJjX2FjY2VsIiwgU0ZJX0RFVl9UWVBFX0kyQywgMCwgJmxpczMzMWRsX3BsYXRm b3JtX2RhdGF9LAogCXsicG1pY19hdWRpbyIsIFNGSV9ERVZfVFlQRV9JUEMsIDEsICZub19wbGF0 Zm9ybV9kYXRhfSwKIAl7Im1wdTMwNTAiLCBTRklfREVWX1RZUEVfSTJDLCAxLCAmbXB1MzA1MF9w bGF0Zm9ybV9kYXRhfSwKKwl7ImkyY19kaXNwX2JyaWciLCBTRklfREVWX1RZUEVfSTJDLCAwLCAm dGMzNTg3NnhfcGxhdGZvcm1fZGF0YX0sCiAKIAkvKiBNU0lDIHN1YmRldmljZXMgKi8KIAl7Im1z aWNfYmF0dGVyeSIsIFNGSV9ERVZfVFlQRV9JUEMsIDEsICZtc2ljX2JhdHRlcnlfcGxhdGZvcm1f ZGF0YX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL0tjb25maWcgYi9kcml2 ZXJzL2dwdS9kcm0vZ21hNTAwL0tjb25maWcKaW5kZXggZjkyYTdmNC4uNDJlNjY1YyAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9nbWE1MDAvS2NvbmZpZwpAQCAtMjQsMyArMjQsMTAgQEAgY29uZmlnIERSTV9HTUEzNjAwCiAJ aGVscAogCSAgU2F5IHllcyB0byBpbmNsdWRlIGJhc2ljIHN1cHBvcnQgZm9yIEludGVsIEdNQTM2 MDAvMzY1MCAoSW50ZWwKIAkgIENlZGFyIFRyYWlsKSBwbGF0Zm9ybXMuCisKK2NvbmZpZyBEUk1f TUVERklFTEQKKwlib29sICJJbnRlbCBNZWRmaWVsZCBzdXBwb3J0IChFeHBlcmltZW50YWwpIgor CWRlcGVuZHMgb24gRFJNX0dNQTUwMCAmJiBYODZfSU5URUxfTUlECisJaGVscAorCSAgU2F5IHll cyB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBJbnRlbCBNZWRmaWVsZCBwbGF0Zm9ybS4KKwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1 L2RybS9nbWE1MDAvTWFrZWZpbGUKaW5kZXggODFjMTAzYi4uMTU4Mzk4MiAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vZ21h NTAwL01ha2VmaWxlCkBAIC0zNyw0ICszNywxNCBAQCBnbWE1MDBfZ2Z4LSQoQ09ORklHX0RSTV9H TUE2MDApICs9IG9ha3RyYWlsX2RldmljZS5vIFwKIAkgIG9ha3RyYWlsX2hkbWkubyBcCiAJICBv YWt0cmFpbF9oZG1pX2kyYy5vCiAKK2dtYTUwMF9nZngtJChDT05GSUdfRFJNX01FREZJRUxEKSAr PSBtZGZsZF9kZXZpY2UubyBcCisJICBtZGZsZF9vdXRwdXQubyBcCisJICBtZGZsZF9pbnRlbF9k aXNwbGF5Lm8gXAorCSAgbWRmbGRfZHNpX291dHB1dC5vIFwKKwkgIG1kZmxkX2RzaV9kcGkubyBc CisJICBtZGZsZF9kc2lfcGtnX3NlbmRlci5vIFwKKwkgIG1kZmxkX3Rwb192aWQubyBcCisJICBt ZGZsZF90bWRfdmlkLm8gXAorCSAgdGMzNTg3NngtZHNpLWx2ZHMubworCiBvYmotJChDT05GSUdf RFJNX0dNQTUwMCkgKz0gZ21hNTAwX2dmeC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v Z21hNTAwL21kZmxkX2RldmljZS5jIGIvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9tZGZsZF9kZXZp Y2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2ZkZGE5Ci0tLSAvZGV2 L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9tZGZsZF9kZXZpY2UuYwpAQCAtMCww ICsxLDY5MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEsIElu dGVsIENvcnBvcmF0aW9uLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklM SVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRo IEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8KKworI2luY2x1ZGUgInBzYl9kcnYuaCIKKyNpbmNsdWRlICJtaWRfYmlvcy5oIgorI2luY2x1 ZGUgIm1kZmxkX291dHB1dC5oIgorI2luY2x1ZGUgIm1kZmxkX2RzaV9vdXRwdXQuaCIKKyNpbmNs dWRlICJ0YzM1ODc2eC1kc2ktbHZkcy5oIgorCisjaW5jbHVkZSA8YXNtL2ludGVsX3NjdV9pcGMu aD4KKworI2lmZGVmIENPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFCisKKyNkZWZpbmUgTVJT VF9CTENfTUFYX1BXTV9SRUdfRlJFUQkgICAgMHhGRkZGCisjZGVmaW5lIEJMQ19QV01fUFJFQ0lT SU9OX0ZBQ1RPUiAxMDAJLyogMTAwMDAwMDAgKi8KKyNkZWZpbmUgQkxDX1BXTV9GUkVRX0NBTENf Q09OU1RBTlQgMzIKKyNkZWZpbmUgTUh6IDEwMDAwMDAKKyNkZWZpbmUgQlJJR0hUTkVTU19NSU5f TEVWRUwgMQorI2RlZmluZSBCUklHSFRORVNTX01BWF9MRVZFTCAxMDAKKyNkZWZpbmUgQlJJR0hU TkVTU19NQVNLCTB4RkYKKyNkZWZpbmUgQkxDX1BPTEFSSVRZX05PUk1BTCAwCisjZGVmaW5lIEJM Q19QT0xBUklUWV9JTlZFUlNFIDEKKyNkZWZpbmUgQkxDX0FESlVTVE1FTlRfTUFYIDEwMAorCisj ZGVmaW5lIE1ERkxEX0JMQ19QV01fUFJFQ0lTSU9OX0ZBQ1RPUiAgICAxMAorI2RlZmluZSBNREZM RF9CTENfTUFYX1BXTV9SRUdfRlJFUSAgICAgICAgMHhGRkZFCisjZGVmaW5lIE1ERkxEX0JMQ19N SU5fUFdNX1JFR19GUkVRICAgICAgICAweDIKKworI2RlZmluZSBNREZMRF9CQUNLTElHSFRfUFdN X1BPTEFSSVRZX0JJVF9DTEVBUiAoMHhGRkZFKQorI2RlZmluZSBNREZMRF9CQUNLTElHSFRfUFdN X0NUTF9TSElGVAkoMTYpCisKK3N0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqbWRmbGRf YmFja2xpZ2h0X2RldmljZTsKKworaW50IG1kZmxkX3NldF9icmlnaHRuZXNzKHN0cnVjdCBiYWNr bGlnaHRfZGV2aWNlICpiZCkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0KKwkJKHN0cnVj dCBkcm1fZGV2aWNlICopYmxfZ2V0X2RhdGEobWRmbGRfYmFja2xpZ2h0X2RldmljZSk7CisJc3Ry dWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCBs ZXZlbCA9IGJkLT5wcm9wcy5icmlnaHRuZXNzOworCisJRFJNX0RFQlVHX0RSSVZFUigiYmFja2xp Z2h0IGxldmVsIHNldCB0byAlZFxuIiwgbGV2ZWwpOworCisJLyogUGVyZm9ybSB2YWx1ZSBib3Vu ZHMgY2hlY2tpbmcgKi8KKwlpZiAobGV2ZWwgPCBCUklHSFRORVNTX01JTl9MRVZFTCkKKwkJbGV2 ZWwgPSBCUklHSFRORVNTX01JTl9MRVZFTDsKKworCWlmIChnbWFfcG93ZXJfYmVnaW4oZGV2LCBm YWxzZSkpIHsKKwkJdTMyIGFkanVzdGVkX2xldmVsID0gMDsKKworCQkvKgorCQkgKiBBZGp1c3Qg dGhlIGJhY2tsaWdodCBsZXZlbCB3aXRoIHRoZSBwZXJjZW50IGluCisJCSAqIGRldl9wcml2LT5i bGNfYWRqMgorCQkgKi8KKwkJYWRqdXN0ZWRfbGV2ZWwgPSBsZXZlbCAqIGRldl9wcml2LT5ibGNf YWRqMjsKKwkJYWRqdXN0ZWRfbGV2ZWwgPSBhZGp1c3RlZF9sZXZlbCAvIEJMQ19BREpVU1RNRU5U X01BWDsKKwkJZGV2X3ByaXYtPmJyaWdodG5lc3NfYWRqdXN0ZWQgPSBhZGp1c3RlZF9sZXZlbDsK KworCQlpZiAobWRmbGRfZ2V0X3BhbmVsX3R5cGUoZGV2LCAwKSA9PSBUQzM1ODc2WCkgeworCQkJ aWYgKGRldl9wcml2LT5kcGlfcGFuZWxfb25bMF0gfHwKKwkJCQkJZGV2X3ByaXYtPmRwaV9wYW5l bF9vblsyXSkKKwkJCQl0YzM1ODc2eF9icmlnaHRuZXNzX2NvbnRyb2woZGV2LAorCQkJCQkJZGV2 X3ByaXYtPmJyaWdodG5lc3NfYWRqdXN0ZWQpOworCQl9IGVsc2UgeworCQkJaWYgKGRldl9wcml2 LT5kcGlfcGFuZWxfb25bMF0pCisJCQkJbWRmbGRfZHNpX2JyaWdodG5lc3NfY29udHJvbChkZXYs IDAsCisJCQkJCQlkZXZfcHJpdi0+YnJpZ2h0bmVzc19hZGp1c3RlZCk7CisJCX0KKworCQlpZiAo ZGV2X3ByaXYtPmRwaV9wYW5lbF9vblsyXSkKKwkJCW1kZmxkX2RzaV9icmlnaHRuZXNzX2NvbnRy b2woZGV2LCAyLAorCQkJCQlkZXZfcHJpdi0+YnJpZ2h0bmVzc19hZGp1c3RlZCk7CisJCWdtYV9w b3dlcl9lbmQoZGV2KTsKKwl9CisKKwkvKiBjYWNoZSB0aGUgYnJpZ2h0bmVzcyBmb3IgbGF0ZXIg dXNlICovCisJZGV2X3ByaXYtPmJyaWdodG5lc3MgPSBsZXZlbDsKKwlyZXR1cm4gMDsKK30KKwor aW50IG1kZmxkX2dldF9icmlnaHRuZXNzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKK3sK KwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0KKwkJKHN0cnVjdCBkcm1fZGV2aWNlICopYmxfZ2V0 X2RhdGEobWRmbGRfYmFja2xpZ2h0X2RldmljZSk7CisJc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAq ZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJRFJNX0RFQlVHX0RSSVZFUigiYnJpZ2h0 bmVzcyA9IDB4JXggXG4iLCBkZXZfcHJpdi0+YnJpZ2h0bmVzcyk7CisKKwkvKiByZXR1cm4gbG9j YWxseSBjYWNoZWQgdmFyIGluc3RlYWQgb2YgSFcgcmVhZCAoZHVlIHRvIERQU1QgZXRjLikgKi8K KwlyZXR1cm4gZGV2X3ByaXYtPmJyaWdodG5lc3M7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg YmFja2xpZ2h0X29wcyBtZGZsZF9vcHMgPSB7CisJLmdldF9icmlnaHRuZXNzID0gbWRmbGRfZ2V0 X2JyaWdodG5lc3MsCisJLnVwZGF0ZV9zdGF0dXMgID0gbWRmbGRfc2V0X2JyaWdodG5lc3MsCit9 OworCitzdGF0aWMgaW50IGRldmljZV9iYWNrbGlnaHRfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KQoreworCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gKHN0cnVjdCBkcm1f cHNiX3ByaXZhdGUgKikKKwkJZGV2LT5kZXZfcHJpdmF0ZTsKKworCWRldl9wcml2LT5ibGNfYWRq MSA9IEJMQ19BREpVU1RNRU5UX01BWDsKKwlkZXZfcHJpdi0+YmxjX2FkajIgPSBCTENfQURKVVNU TUVOVF9NQVg7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG1kZmxkX2JhY2tsaWdodF9pbml0KHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzIHBy b3BzOworCWludCByZXQgPSAwOworCisJbWVtc2V0KCZwcm9wcywgMCwgc2l6ZW9mKHN0cnVjdCBi YWNrbGlnaHRfcHJvcGVydGllcykpOworCXByb3BzLm1heF9icmlnaHRuZXNzID0gQlJJR0hUTkVT U19NQVhfTEVWRUw7CisJcHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9QTEFURk9STTsKKwltZGZsZF9i YWNrbGlnaHRfZGV2aWNlID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcigibWRmbGQtYmwiLAor CQkJCU5VTEwsICh2b2lkICopZGV2LCAmbWRmbGRfb3BzLCAmcHJvcHMpOworCisJaWYgKElTX0VS UihtZGZsZF9iYWNrbGlnaHRfZGV2aWNlKSkKKwkJcmV0dXJuIFBUUl9FUlIobWRmbGRfYmFja2xp Z2h0X2RldmljZSk7CisKKwlyZXQgPSBkZXZpY2VfYmFja2xpZ2h0X2luaXQoZGV2KTsKKwlpZiAo cmV0KQorCQlyZXR1cm4gcmV0OworCisJbWRmbGRfYmFja2xpZ2h0X2RldmljZS0+cHJvcHMuYnJp Z2h0bmVzcyA9IEJSSUdIVE5FU1NfTUFYX0xFVkVMOworCW1kZmxkX2JhY2tsaWdodF9kZXZpY2Ut PnByb3BzLm1heF9icmlnaHRuZXNzID0gQlJJR0hUTkVTU19NQVhfTEVWRUw7CisJYmFja2xpZ2h0 X3VwZGF0ZV9zdGF0dXMobWRmbGRfYmFja2xpZ2h0X2RldmljZSk7CisJcmV0dXJuIDA7Cit9Cisj ZW5kaWYKKworc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKm1kZmxkX2dldF9iYWNrbGlnaHRfZGV2 aWNlKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0UKKwlyZXR1 cm4gbWRmbGRfYmFja2xpZ2h0X2RldmljZTsKKyNlbHNlCisJcmV0dXJuIE5VTEw7CisjZW5kaWYK K30KKworLyoKKyAqIG1kZmxkX3NhdmVfZGlzcGxheV9yZWdpc3RlcnMKKyAqCisgKiBEZXNjcmlw dGlvbjogV2UgYXJlIGdvaW5nIHRvIHN1c3BlbmQgc28gc2F2ZSBjdXJyZW50IGRpc3BsYXkKKyAq IHJlZ2lzdGVyIHN0YXRlLgorICoKKyAqIE5vdGVzOiBGSVhNRV9KTElVNyBuZWVkIHRvIGFkZCB0 aGUgc3VwcG9ydCBmb3IgRFBJIE1JUEkgJiBIRE1JIGF1ZGlvCisgKi8KK3N0YXRpYyBpbnQgbWRm bGRfc2F2ZV9kaXNwbGF5X3JlZ2lzdGVycyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgcGlw ZSkKK3sKKwlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZh dGU7CisJc3RydWN0IG1lZGZpZWxkX3N0YXRlICpyZWdzID0gJmRldl9wcml2LT5yZWdzLm1kZmxk OworCWludCBpOworCisJLyogcmVnaXN0ZXIgKi8KKwl1MzIgZHBsbF9yZWcgPSBNUlNUX0RQTExf QTsKKwl1MzIgZnBfcmVnID0gTVJTVF9GUEEwOworCXUzMiBwaXBlY29uZl9yZWcgPSBQSVBFQUNP TkY7CisJdTMyIGh0b3RfcmVnID0gSFRPVEFMX0E7CisJdTMyIGhibGFua19yZWcgPSBIQkxBTktf QTsKKwl1MzIgaHN5bmNfcmVnID0gSFNZTkNfQTsKKwl1MzIgdnRvdF9yZWcgPSBWVE9UQUxfQTsK Kwl1MzIgdmJsYW5rX3JlZyA9IFZCTEFOS19BOworCXUzMiB2c3luY19yZWcgPSBWU1lOQ19BOwor CXUzMiBwaXBlc3JjX3JlZyA9IFBJUEVBU1JDOworCXUzMiBkc3BzdHJpZGVfcmVnID0gRFNQQVNU UklERTsKKwl1MzIgZHNwbGlub2ZmX3JlZyA9IERTUEFMSU5PRkY7CisJdTMyIGRzcHRpbGVvZmZf cmVnID0gRFNQQVRJTEVPRkY7CisJdTMyIGRzcHNpemVfcmVnID0gRFNQQVNJWkU7CisJdTMyIGRz cHBvc19yZWcgPSBEU1BBUE9TOworCXUzMiBkc3BzdXJmX3JlZyA9IERTUEFTVVJGOworCXUzMiBt aXBpX3JlZyA9IE1JUEk7CisJdTMyIGRzcGNudHJfcmVnID0gRFNQQUNOVFI7CisJdTMyIGRzcHN0 YXR1c19yZWcgPSBQSVBFQVNUQVQ7CisJdTMyIHBhbGV0dGVfcmVnID0gUEFMRVRURV9BOworCisJ LyogcG9pbnRlciB0byB2YWx1ZXMgKi8KKwl1MzIgKmRwbGxfdmFsID0gJnJlZ3MtPnNhdmVEUExM X0E7CisJdTMyICpmcF92YWwgPSAmcmVncy0+c2F2ZUZQQTA7CisJdTMyICpwaXBlY29uZl92YWwg PSAmcmVncy0+c2F2ZVBJUEVBQ09ORjsKKwl1MzIgKmh0b3RfdmFsID0gJnJlZ3MtPnNhdmVIVE9U QUxfQTsKKwl1MzIgKmhibGFua192YWwgPSAmcmVncy0+c2F2ZUhCTEFOS19BOworCXUzMiAqaHN5 bmNfdmFsID0gJnJlZ3MtPnNhdmVIU1lOQ19BOworCXUzMiAqdnRvdF92YWwgPSAmcmVncy0+c2F2 ZVZUT1RBTF9BOworCXUzMiAqdmJsYW5rX3ZhbCA9ICZyZWdzLT5zYXZlVkJMQU5LX0E7CisJdTMy ICp2c3luY192YWwgPSAmcmVncy0+c2F2ZVZTWU5DX0E7CisJdTMyICpwaXBlc3JjX3ZhbCA9ICZy ZWdzLT5zYXZlUElQRUFTUkM7CisJdTMyICpkc3BzdHJpZGVfdmFsID0gJnJlZ3MtPnNhdmVEU1BB U1RSSURFOworCXUzMiAqZHNwbGlub2ZmX3ZhbCA9ICZyZWdzLT5zYXZlRFNQQUxJTk9GRjsKKwl1 MzIgKmRzcHRpbGVvZmZfdmFsID0gJnJlZ3MtPnNhdmVEU1BBVElMRU9GRjsKKwl1MzIgKmRzcHNp emVfdmFsID0gJnJlZ3MtPnNhdmVEU1BBU0laRTsKKwl1MzIgKmRzcHBvc192YWwgPSAmcmVncy0+ c2F2ZURTUEFQT1M7CisJdTMyICpkc3BzdXJmX3ZhbCA9ICZyZWdzLT5zYXZlRFNQQVNVUkY7CisJ dTMyICptaXBpX3ZhbCA9ICZyZWdzLT5zYXZlTUlQSTsKKwl1MzIgKmRzcGNudHJfdmFsID0gJnJl Z3MtPnNhdmVEU1BBQ05UUjsKKwl1MzIgKmRzcHN0YXR1c192YWwgPSAmcmVncy0+c2F2ZURTUEFT VEFUVVM7CisJdTMyICpwYWxldHRlX3ZhbCA9IHJlZ3MtPnNhdmVfcGFsZXR0ZV9hOworCisJc3dp dGNoIChwaXBlKSB7CisJY2FzZSAwOgorCQlicmVhazsKKwljYXNlIDE6CisJCS8qIHJlZ2VzdGVy ICovCisJCWRwbGxfcmVnID0gTURGTERfRFBMTF9COworCQlmcF9yZWcgPSBNREZMRF9EUExMX0RJ VjA7CisJCXBpcGVjb25mX3JlZyA9IFBJUEVCQ09ORjsKKwkJaHRvdF9yZWcgPSBIVE9UQUxfQjsK KwkJaGJsYW5rX3JlZyA9IEhCTEFOS19COworCQloc3luY19yZWcgPSBIU1lOQ19COworCQl2dG90 X3JlZyA9IFZUT1RBTF9COworCQl2YmxhbmtfcmVnID0gVkJMQU5LX0I7CisJCXZzeW5jX3JlZyA9 IFZTWU5DX0I7CisJCXBpcGVzcmNfcmVnID0gUElQRUJTUkM7CisJCWRzcHN0cmlkZV9yZWcgPSBE U1BCU1RSSURFOworCQlkc3BsaW5vZmZfcmVnID0gRFNQQkxJTk9GRjsKKwkJZHNwdGlsZW9mZl9y ZWcgPSBEU1BCVElMRU9GRjsKKwkJZHNwc2l6ZV9yZWcgPSBEU1BCU0laRTsKKwkJZHNwcG9zX3Jl ZyA9IERTUEJQT1M7CisJCWRzcHN1cmZfcmVnID0gRFNQQlNVUkY7CisJCWRzcGNudHJfcmVnID0g RFNQQkNOVFI7CisJCWRzcHN0YXR1c19yZWcgPSBQSVBFQlNUQVQ7CisJCXBhbGV0dGVfcmVnID0g UEFMRVRURV9COworCisJCS8qIHZhbHVlcyAqLworCQlkcGxsX3ZhbCA9ICZyZWdzLT5zYXZlRFBM TF9COworCQlmcF92YWwgPSAmcmVncy0+c2F2ZUZQQjA7CisJCXBpcGVjb25mX3ZhbCA9ICZyZWdz LT5zYXZlUElQRUJDT05GOworCQlodG90X3ZhbCA9ICZyZWdzLT5zYXZlSFRPVEFMX0I7CisJCWhi bGFua192YWwgPSAmcmVncy0+c2F2ZUhCTEFOS19COworCQloc3luY192YWwgPSAmcmVncy0+c2F2 ZUhTWU5DX0I7CisJCXZ0b3RfdmFsID0gJnJlZ3MtPnNhdmVWVE9UQUxfQjsKKwkJdmJsYW5rX3Zh bCA9ICZyZWdzLT5zYXZlVkJMQU5LX0I7CisJCXZzeW5jX3ZhbCA9ICZyZWdzLT5zYXZlVlNZTkNf QjsKKwkJcGlwZXNyY192YWwgPSAmcmVncy0+c2F2ZVBJUEVCU1JDOworCQlkc3BzdHJpZGVfdmFs ID0gJnJlZ3MtPnNhdmVEU1BCU1RSSURFOworCQlkc3BsaW5vZmZfdmFsID0gJnJlZ3MtPnNhdmVE U1BCTElOT0ZGOworCQlkc3B0aWxlb2ZmX3ZhbCA9ICZyZWdzLT5zYXZlRFNQQlRJTEVPRkY7CisJ CWRzcHNpemVfdmFsID0gJnJlZ3MtPnNhdmVEU1BCU0laRTsKKwkJZHNwcG9zX3ZhbCA9ICZyZWdz LT5zYXZlRFNQQlBPUzsKKwkJZHNwc3VyZl92YWwgPSAmcmVncy0+c2F2ZURTUEJTVVJGOworCQlk c3BjbnRyX3ZhbCA9ICZyZWdzLT5zYXZlRFNQQkNOVFI7CisJCWRzcHN0YXR1c192YWwgPSAmcmVn cy0+c2F2ZURTUEJTVEFUVVM7CisJCXBhbGV0dGVfdmFsID0gcmVncy0+c2F2ZV9wYWxldHRlX2I7 CisJCWJyZWFrOworCWNhc2UgMjoKKwkJLyogcmVnaXN0ZXIgKi8KKwkJcGlwZWNvbmZfcmVnID0g UElQRUNDT05GOworCQlodG90X3JlZyA9IEhUT1RBTF9DOworCQloYmxhbmtfcmVnID0gSEJMQU5L X0M7CisJCWhzeW5jX3JlZyA9IEhTWU5DX0M7CisJCXZ0b3RfcmVnID0gVlRPVEFMX0M7CisJCXZi bGFua19yZWcgPSBWQkxBTktfQzsKKwkJdnN5bmNfcmVnID0gVlNZTkNfQzsKKwkJcGlwZXNyY19y ZWcgPSBQSVBFQ1NSQzsKKwkJZHNwc3RyaWRlX3JlZyA9IERTUENTVFJJREU7CisJCWRzcGxpbm9m Zl9yZWcgPSBEU1BDTElOT0ZGOworCQlkc3B0aWxlb2ZmX3JlZyA9IERTUENUSUxFT0ZGOworCQlk c3BzaXplX3JlZyA9IERTUENTSVpFOworCQlkc3Bwb3NfcmVnID0gRFNQQ1BPUzsKKwkJZHNwc3Vy Zl9yZWcgPSBEU1BDU1VSRjsKKwkJbWlwaV9yZWcgPSBNSVBJX0M7CisJCWRzcGNudHJfcmVnID0g RFNQQ0NOVFI7CisJCWRzcHN0YXR1c19yZWcgPSBQSVBFQ1NUQVQ7CisJCXBhbGV0dGVfcmVnID0g UEFMRVRURV9DOworCisJCS8qIHBvaW50ZXIgdG8gdmFsdWVzICovCisJCXBpcGVjb25mX3ZhbCA9 ICZyZWdzLT5zYXZlUElQRUNDT05GOworCQlodG90X3ZhbCA9ICZyZWdzLT5zYXZlSFRPVEFMX0M7 CisJCWhibGFua192YWwgPSAmcmVncy0+c2F2ZUhCTEFOS19DOworCQloc3luY192YWwgPSAmcmVn cy0+c2F2ZUhTWU5DX0M7CisJCXZ0b3RfdmFsID0gJnJlZ3MtPnNhdmVWVE9UQUxfQzsKKwkJdmJs YW5rX3ZhbCA9ICZyZWdzLT5zYXZlVkJMQU5LX0M7CisJCXZzeW5jX3ZhbCA9ICZyZWdzLT5zYXZl VlNZTkNfQzsKKwkJcGlwZXNyY192YWwgPSAmcmVncy0+c2F2ZVBJUEVDU1JDOworCQlkc3BzdHJp ZGVfdmFsID0gJnJlZ3MtPnNhdmVEU1BDU1RSSURFOworCQlkc3BsaW5vZmZfdmFsID0gJnJlZ3Mt PnNhdmVEU1BDTElOT0ZGOworCQlkc3B0aWxlb2ZmX3ZhbCA9ICZyZWdzLT5zYXZlRFNQQ1RJTEVP RkY7CisJCWRzcHNpemVfdmFsID0gJnJlZ3MtPnNhdmVEU1BDU0laRTsKKwkJZHNwcG9zX3ZhbCA9 ICZyZWdzLT5zYXZlRFNQQ1BPUzsKKwkJZHNwc3VyZl92YWwgPSAmcmVncy0+c2F2ZURTUENTVVJG OworCQltaXBpX3ZhbCA9ICZyZWdzLT5zYXZlTUlQSV9DOworCQlkc3BjbnRyX3ZhbCA9ICZyZWdz LT5zYXZlRFNQQ0NOVFI7CisJCWRzcHN0YXR1c192YWwgPSAmcmVncy0+c2F2ZURTUENTVEFUVVM7 CisJCXBhbGV0dGVfdmFsID0gcmVncy0+c2F2ZV9wYWxldHRlX2M7CisJCWJyZWFrOworCWRlZmF1 bHQ6CisJCURSTV9FUlJPUigiJXMsIGludmFsaWQgcGlwZSBudW1iZXIuXG4iLCBfX2Z1bmNfXyk7 CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFBpcGUgJiBwbGFuZSBBIGluZm8gKi8KKwkq ZHBsbF92YWwgPSBQU0JfUlZEQzMyKGRwbGxfcmVnKTsKKwkqZnBfdmFsID0gUFNCX1JWREMzMihm cF9yZWcpOworCSpwaXBlY29uZl92YWwgPSBQU0JfUlZEQzMyKHBpcGVjb25mX3JlZyk7CisJKmh0 b3RfdmFsID0gUFNCX1JWREMzMihodG90X3JlZyk7CisJKmhibGFua192YWwgPSBQU0JfUlZEQzMy KGhibGFua19yZWcpOworCSpoc3luY192YWwgPSBQU0JfUlZEQzMyKGhzeW5jX3JlZyk7CisJKnZ0 b3RfdmFsID0gUFNCX1JWREMzMih2dG90X3JlZyk7CisJKnZibGFua192YWwgPSBQU0JfUlZEQzMy KHZibGFua19yZWcpOworCSp2c3luY192YWwgPSBQU0JfUlZEQzMyKHZzeW5jX3JlZyk7CisJKnBp cGVzcmNfdmFsID0gUFNCX1JWREMzMihwaXBlc3JjX3JlZyk7CisJKmRzcHN0cmlkZV92YWwgPSBQ U0JfUlZEQzMyKGRzcHN0cmlkZV9yZWcpOworCSpkc3BsaW5vZmZfdmFsID0gUFNCX1JWREMzMihk c3BsaW5vZmZfcmVnKTsKKwkqZHNwdGlsZW9mZl92YWwgPSBQU0JfUlZEQzMyKGRzcHRpbGVvZmZf cmVnKTsKKwkqZHNwc2l6ZV92YWwgPSBQU0JfUlZEQzMyKGRzcHNpemVfcmVnKTsKKwkqZHNwcG9z X3ZhbCA9IFBTQl9SVkRDMzIoZHNwcG9zX3JlZyk7CisJKmRzcHN1cmZfdmFsID0gUFNCX1JWREMz Mihkc3BzdXJmX3JlZyk7CisJKmRzcGNudHJfdmFsID0gUFNCX1JWREMzMihkc3BjbnRyX3JlZyk7 CisJKmRzcHN0YXR1c192YWwgPSBQU0JfUlZEQzMyKGRzcHN0YXR1c19yZWcpOworCisJLypzYXZl IHBhbGV0dGUgKGdhbW1hKSAqLworCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKwkJcGFsZXR0 ZV92YWxbaV0gPSBQU0JfUlZEQzMyKHBhbGV0dGVfcmVnICsgKGkgPDwgMikpOworCisJaWYgKHBp cGUgPT0gMSkgeworCQlyZWdzLT5zYXZlUEZJVF9DT05UUk9MID0gUFNCX1JWREMzMihQRklUX0NP TlRST0wpOworCQlyZWdzLT5zYXZlUEZJVF9QR01fUkFUSU9TID0gUFNCX1JWREMzMihQRklUX1BH TV9SQVRJT1MpOworCisJCXJlZ3MtPnNhdmVIRE1JUEhZTUlTQ0NUTCA9IFBTQl9SVkRDMzIoSERN SVBIWU1JU0NDVEwpOworCQlyZWdzLT5zYXZlSERNSUJfQ09OVFJPTCA9IFBTQl9SVkRDMzIoSERN SUJfQ09OVFJPTCk7CisJCXJldHVybiAwOworCX0KKworCSptaXBpX3ZhbCA9IFBTQl9SVkRDMzIo bWlwaV9yZWcpOworCXJldHVybiAwOworfQorCisvKgorICogbWRmbGRfcmVzdG9yZV9kaXNwbGF5 X3JlZ2lzdGVycworICoKKyAqIERlc2NyaXB0aW9uOiBXZSBhcmUgZ29pbmcgdG8gcmVzdW1lIHNv IHJlc3RvcmUgZGlzcGxheSByZWdpc3RlciBzdGF0ZS4KKyAqCisgKiBOb3RlczogRklYTUVfSkxJ VTcgbmVlZCB0byBhZGQgdGhlIHN1cHBvcnQgZm9yIERQSSBNSVBJICYgSERNSSBhdWRpbworICov CitzdGF0aWMgaW50IG1kZmxkX3Jlc3RvcmVfZGlzcGxheV9yZWdpc3RlcnMoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwgaW50IHBpcGUpCit7CisJLyogVG8gZ2V0ICBwYW5lbCBvdXQgb2YgVUxQUyBt b2RlLiAqLworCXUzMiB0ZW1wID0gMDsKKwl1MzIgZGV2aWNlX3JlYWR5X3JlZyA9IERFVklDRV9S RUFEWV9SRUc7CisJc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9w cml2YXRlOworCXN0cnVjdCBtZGZsZF9kc2lfY29uZmlnICpkc2lfY29uZmlnID0gTlVMTDsKKwlz dHJ1Y3QgbWVkZmllbGRfc3RhdGUgKnJlZ3MgPSAmZGV2X3ByaXYtPnJlZ3MubWRmbGQ7CisJdTMy IGkgPSAwOworCXUzMiBkcGxsID0gMDsKKwl1MzIgdGltZW91dCA9IDA7CisKKwkvKiByZWdlc3Rl ciAqLworCXUzMiBkcGxsX3JlZyA9IE1SU1RfRFBMTF9BOworCXUzMiBmcF9yZWcgPSBNUlNUX0ZQ QTA7CisJdTMyIHBpcGVjb25mX3JlZyA9IFBJUEVBQ09ORjsKKwl1MzIgaHRvdF9yZWcgPSBIVE9U QUxfQTsKKwl1MzIgaGJsYW5rX3JlZyA9IEhCTEFOS19BOworCXUzMiBoc3luY19yZWcgPSBIU1lO Q19BOworCXUzMiB2dG90X3JlZyA9IFZUT1RBTF9BOworCXUzMiB2YmxhbmtfcmVnID0gVkJMQU5L X0E7CisJdTMyIHZzeW5jX3JlZyA9IFZTWU5DX0E7CisJdTMyIHBpcGVzcmNfcmVnID0gUElQRUFT UkM7CisJdTMyIGRzcHN0cmlkZV9yZWcgPSBEU1BBU1RSSURFOworCXUzMiBkc3BsaW5vZmZfcmVn ID0gRFNQQUxJTk9GRjsKKwl1MzIgZHNwdGlsZW9mZl9yZWcgPSBEU1BBVElMRU9GRjsKKwl1MzIg ZHNwc2l6ZV9yZWcgPSBEU1BBU0laRTsKKwl1MzIgZHNwcG9zX3JlZyA9IERTUEFQT1M7CisJdTMy IGRzcHN1cmZfcmVnID0gRFNQQVNVUkY7CisJdTMyIGRzcHN0YXR1c19yZWcgPSBQSVBFQVNUQVQ7 CisJdTMyIG1pcGlfcmVnID0gTUlQSTsKKwl1MzIgZHNwY250cl9yZWcgPSBEU1BBQ05UUjsKKwl1 MzIgcGFsZXR0ZV9yZWcgPSBQQUxFVFRFX0E7CisKKwkvKiB2YWx1ZXMgKi8KKwl1MzIgZHBsbF92 YWwgPSByZWdzLT5zYXZlRFBMTF9BICYgfkRQTExfVkNPX0VOQUJMRTsKKwl1MzIgZnBfdmFsID0g cmVncy0+c2F2ZUZQQTA7CisJdTMyIHBpcGVjb25mX3ZhbCA9IHJlZ3MtPnNhdmVQSVBFQUNPTkY7 CisJdTMyIGh0b3RfdmFsID0gcmVncy0+c2F2ZUhUT1RBTF9BOworCXUzMiBoYmxhbmtfdmFsID0g cmVncy0+c2F2ZUhCTEFOS19BOworCXUzMiBoc3luY192YWwgPSByZWdzLT5zYXZlSFNZTkNfQTsK Kwl1MzIgdnRvdF92YWwgPSByZWdzLT5zYXZlVlRPVEFMX0E7CisJdTMyIHZibGFua192YWwgPSBy ZWdzLT5zYXZlVkJMQU5LX0E7CisJdTMyIHZzeW5jX3ZhbCA9IHJlZ3MtPnNhdmVWU1lOQ19BOwor CXUzMiBwaXBlc3JjX3ZhbCA9IHJlZ3MtPnNhdmVQSVBFQVNSQzsKKwl1MzIgZHNwc3RyaWRlX3Zh bCA9IHJlZ3MtPnNhdmVEU1BBU1RSSURFOworCXUzMiBkc3BsaW5vZmZfdmFsID0gcmVncy0+c2F2 ZURTUEFMSU5PRkY7CisJdTMyIGRzcHRpbGVvZmZfdmFsID0gcmVncy0+c2F2ZURTUEFUSUxFT0ZG OworCXUzMiBkc3BzaXplX3ZhbCA9IHJlZ3MtPnNhdmVEU1BBU0laRTsKKwl1MzIgZHNwcG9zX3Zh bCA9IHJlZ3MtPnNhdmVEU1BBUE9TOworCXUzMiBkc3BzdXJmX3ZhbCA9IHJlZ3MtPnNhdmVEU1BB U1VSRjsKKwl1MzIgZHNwc3RhdHVzX3ZhbCA9IHJlZ3MtPnNhdmVEU1BBU1RBVFVTOworCXUzMiBt aXBpX3ZhbCA9IHJlZ3MtPnNhdmVNSVBJOworCXUzMiBkc3BjbnRyX3ZhbCA9IHJlZ3MtPnNhdmVE U1BBQ05UUjsKKwl1MzIgKnBhbGV0dGVfdmFsID0gcmVncy0+c2F2ZV9wYWxldHRlX2E7CisKKwlz d2l0Y2ggKHBpcGUpIHsKKwljYXNlIDA6CisJCWRzaV9jb25maWcgPSBkZXZfcHJpdi0+ZHNpX2Nv bmZpZ3NbMF07CisJCWJyZWFrOworCWNhc2UgMToKKwkJLyogcmVnZXN0ZXIgKi8KKwkJZHBsbF9y ZWcgPSBNREZMRF9EUExMX0I7CisJCWZwX3JlZyA9IE1ERkxEX0RQTExfRElWMDsKKwkJcGlwZWNv bmZfcmVnID0gUElQRUJDT05GOworCQlodG90X3JlZyA9IEhUT1RBTF9COworCQloYmxhbmtfcmVn ID0gSEJMQU5LX0I7CisJCWhzeW5jX3JlZyA9IEhTWU5DX0I7CisJCXZ0b3RfcmVnID0gVlRPVEFM X0I7CisJCXZibGFua19yZWcgPSBWQkxBTktfQjsKKwkJdnN5bmNfcmVnID0gVlNZTkNfQjsKKwkJ cGlwZXNyY19yZWcgPSBQSVBFQlNSQzsKKwkJZHNwc3RyaWRlX3JlZyA9IERTUEJTVFJJREU7CisJ CWRzcGxpbm9mZl9yZWcgPSBEU1BCTElOT0ZGOworCQlkc3B0aWxlb2ZmX3JlZyA9IERTUEJUSUxF T0ZGOworCQlkc3BzaXplX3JlZyA9IERTUEJTSVpFOworCQlkc3Bwb3NfcmVnID0gRFNQQlBPUzsK KwkJZHNwc3VyZl9yZWcgPSBEU1BCU1VSRjsKKwkJZHNwY250cl9yZWcgPSBEU1BCQ05UUjsKKwkJ ZHNwc3RhdHVzX3JlZyA9IFBJUEVCU1RBVDsKKwkJcGFsZXR0ZV9yZWcgPSBQQUxFVFRFX0I7CisK KwkJLyogdmFsdWVzICovCisJCWRwbGxfdmFsID0gcmVncy0+c2F2ZURQTExfQiAmIH5EUExMX1ZD T19FTkFCTEU7CisJCWZwX3ZhbCA9IHJlZ3MtPnNhdmVGUEIwOworCQlwaXBlY29uZl92YWwgPSBy ZWdzLT5zYXZlUElQRUJDT05GOworCQlodG90X3ZhbCA9IHJlZ3MtPnNhdmVIVE9UQUxfQjsKKwkJ aGJsYW5rX3ZhbCA9IHJlZ3MtPnNhdmVIQkxBTktfQjsKKwkJaHN5bmNfdmFsID0gcmVncy0+c2F2 ZUhTWU5DX0I7CisJCXZ0b3RfdmFsID0gcmVncy0+c2F2ZVZUT1RBTF9COworCQl2YmxhbmtfdmFs ID0gcmVncy0+c2F2ZVZCTEFOS19COworCQl2c3luY192YWwgPSByZWdzLT5zYXZlVlNZTkNfQjsK KwkJcGlwZXNyY192YWwgPSByZWdzLT5zYXZlUElQRUJTUkM7CisJCWRzcHN0cmlkZV92YWwgPSBy ZWdzLT5zYXZlRFNQQlNUUklERTsKKwkJZHNwbGlub2ZmX3ZhbCA9IHJlZ3MtPnNhdmVEU1BCTElO T0ZGOworCQlkc3B0aWxlb2ZmX3ZhbCA9IHJlZ3MtPnNhdmVEU1BCVElMRU9GRjsKKwkJZHNwc2l6 ZV92YWwgPSByZWdzLT5zYXZlRFNQQlNJWkU7CisJCWRzcHBvc192YWwgPSByZWdzLT5zYXZlRFNQ QlBPUzsKKwkJZHNwc3VyZl92YWwgPSByZWdzLT5zYXZlRFNQQlNVUkY7CisJCWRzcGNudHJfdmFs ID0gcmVncy0+c2F2ZURTUEJDTlRSOworCQlkc3BzdGF0dXNfdmFsID0gcmVncy0+c2F2ZURTUEJT VEFUVVM7CisJCXBhbGV0dGVfdmFsID0gcmVncy0+c2F2ZV9wYWxldHRlX2I7CisJCWJyZWFrOwor CWNhc2UgMjoKKwkJLyogcmVnZXN0ZXIgKi8KKwkJcGlwZWNvbmZfcmVnID0gUElQRUNDT05GOwor CQlodG90X3JlZyA9IEhUT1RBTF9DOworCQloYmxhbmtfcmVnID0gSEJMQU5LX0M7CisJCWhzeW5j X3JlZyA9IEhTWU5DX0M7CisJCXZ0b3RfcmVnID0gVlRPVEFMX0M7CisJCXZibGFua19yZWcgPSBW QkxBTktfQzsKKwkJdnN5bmNfcmVnID0gVlNZTkNfQzsKKwkJcGlwZXNyY19yZWcgPSBQSVBFQ1NS QzsKKwkJZHNwc3RyaWRlX3JlZyA9IERTUENTVFJJREU7CisJCWRzcGxpbm9mZl9yZWcgPSBEU1BD TElOT0ZGOworCQlkc3B0aWxlb2ZmX3JlZyA9IERTUENUSUxFT0ZGOworCQlkc3BzaXplX3JlZyA9 IERTUENTSVpFOworCQlkc3Bwb3NfcmVnID0gRFNQQ1BPUzsKKwkJZHNwc3VyZl9yZWcgPSBEU1BD U1VSRjsKKwkJbWlwaV9yZWcgPSBNSVBJX0M7CisJCWRzcGNudHJfcmVnID0gRFNQQ0NOVFI7CisJ CWRzcHN0YXR1c19yZWcgPSBQSVBFQ1NUQVQ7CisJCXBhbGV0dGVfcmVnID0gUEFMRVRURV9DOwor CisJCS8qIHZhbHVlcyAqLworCQlwaXBlY29uZl92YWwgPSByZWdzLT5zYXZlUElQRUNDT05GOwor CQlodG90X3ZhbCA9IHJlZ3MtPnNhdmVIVE9UQUxfQzsKKwkJaGJsYW5rX3ZhbCA9IHJlZ3MtPnNh dmVIQkxBTktfQzsKKwkJaHN5bmNfdmFsID0gcmVncy0+c2F2ZUhTWU5DX0M7CisJCXZ0b3RfdmFs ID0gcmVncy0+c2F2ZVZUT1RBTF9DOworCQl2YmxhbmtfdmFsID0gcmVncy0+c2F2ZVZCTEFOS19D OworCQl2c3luY192YWwgPSByZWdzLT5zYXZlVlNZTkNfQzsKKwkJcGlwZXNyY192YWwgPSByZWdz LT5zYXZlUElQRUNTUkM7CisJCWRzcHN0cmlkZV92YWwgPSByZWdzLT5zYXZlRFNQQ1NUUklERTsK KwkJZHNwbGlub2ZmX3ZhbCA9IHJlZ3MtPnNhdmVEU1BDTElOT0ZGOworCQlkc3B0aWxlb2ZmX3Zh bCA9IHJlZ3MtPnNhdmVEU1BDVElMRU9GRjsKKwkJZHNwc2l6ZV92YWwgPSByZWdzLT5zYXZlRFNQ Q1NJWkU7CisJCWRzcHBvc192YWwgPSByZWdzLT5zYXZlRFNQQ1BPUzsKKwkJZHNwc3VyZl92YWwg PSByZWdzLT5zYXZlRFNQQ1NVUkY7CisJCW1pcGlfdmFsID0gcmVncy0+c2F2ZU1JUElfQzsKKwkJ ZHNwY250cl92YWwgPSByZWdzLT5zYXZlRFNQQ0NOVFI7CisJCWRzcHN0YXR1c192YWwgPSByZWdz LT5zYXZlRFNQQ1NUQVRVUzsKKwkJcGFsZXR0ZV92YWwgPSByZWdzLT5zYXZlX3BhbGV0dGVfYzsK KworCQlkc2lfY29uZmlnID0gZGV2X3ByaXYtPmRzaV9jb25maWdzWzFdOworCQlicmVhazsKKwlk ZWZhdWx0OgorCQlEUk1fRVJST1IoIiVzLCBpbnZhbGlkIHBpcGUgbnVtYmVyLlxuIiwgX19mdW5j X18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKm1ha2Ugc3VyZSBWR0EgcGxhbmUgaXMg b2ZmLiBpdCBpbml0aWFsaXplcyB0byBvbiBhZnRlciByZXNldCEqLworCVBTQl9XVkRDMzIoMHg4 MDAwMDAwMCwgVkdBQ05UUkwpOworCisJaWYgKHBpcGUgPT0gMSkgeworCQlQU0JfV1ZEQzMyKGRw bGxfdmFsICYgfkRQTExfVkNPX0VOQUJMRSwgZHBsbF9yZWcpOworCQlQU0JfUlZEQzMyKGRwbGxf cmVnKTsKKworCQlQU0JfV1ZEQzMyKGZwX3ZhbCwgZnBfcmVnKTsKKwl9IGVsc2UgeworCisJCWRw bGwgPSBQU0JfUlZEQzMyKGRwbGxfcmVnKTsKKworCQlpZiAoIShkcGxsICYgRFBMTF9WQ09fRU5B QkxFKSkgeworCisJCQkvKiBXaGVuIHVuZ2F0aW5nIHBvd2VyIG9mIERQTEwsIG5lZWRzIHRvIHdh aXQgMC41dXMKKwkJCSAgIGJlZm9yZSBlbmFibGUgdGhlIFZDTyAqLworCQkJaWYgKGRwbGwgJiBN REZMRF9QV1JfR0FURV9FTikgeworCQkJCWRwbGwgJj0gfk1ERkxEX1BXUl9HQVRFX0VOOworCQkJ CVBTQl9XVkRDMzIoZHBsbCwgZHBsbF9yZWcpOworCQkJCS8qIEZJWE1FX01ERkxEIFBPIC0gY2hh bmdlIDUwMCB0byAxIGFmdGVyIFBPICovCisJCQkJdWRlbGF5KDUwMCk7CisJCQl9CisKKwkJCVBT Ql9XVkRDMzIoZnBfdmFsLCBmcF9yZWcpOworCQkJUFNCX1dWREMzMihkcGxsX3ZhbCwgZHBsbF9y ZWcpOworCQkJLyogRklYTUVfTURGTEQgUE8gLSBjaGFuZ2UgNTAwIHRvIDEgYWZ0ZXIgUE8gKi8K KwkJCXVkZWxheSg1MDApOworCisJCQlkcGxsX3ZhbCB8PSBEUExMX1ZDT19FTkFCTEU7CisJCQlQ U0JfV1ZEQzMyKGRwbGxfdmFsLCBkcGxsX3JlZyk7CisJCQlQU0JfUlZEQzMyKGRwbGxfcmVnKTsK KworCQkJLyogd2FpdCBmb3IgRFNJIFBMTCB0byBsb2NrICovCisJCQl3aGlsZSAodGltZW91dCA8 IDIwMDAwICYmCisJCQkgICEoUFNCX1JWREMzMihwaXBlY29uZl9yZWcpICYgUElQRUNPTkZfRFNJ UExMX0xPQ0spKSB7CisJCQkJdWRlbGF5KDE1MCk7CisJCQkJdGltZW91dCsrOworCQkJfQorCisJ CQlpZiAodGltZW91dCA9PSAyMDAwMCkgeworCQkJCURSTV9FUlJPUigiJXMsIGNhbid0IGxvY2sg RFNJUExMLlxuIiwKKwkJCQkJCQkJX19mdW5jX18pOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJ fQorCQl9CisJfQorCS8qIFJlc3RvcmUgbW9kZSAqLworCVBTQl9XVkRDMzIoaHRvdF92YWwsIGh0 b3RfcmVnKTsKKwlQU0JfV1ZEQzMyKGhibGFua192YWwsIGhibGFua19yZWcpOworCVBTQl9XVkRD MzIoaHN5bmNfdmFsLCBoc3luY19yZWcpOworCVBTQl9XVkRDMzIodnRvdF92YWwsIHZ0b3RfcmVn KTsKKwlQU0JfV1ZEQzMyKHZibGFua192YWwsIHZibGFua19yZWcpOworCVBTQl9XVkRDMzIodnN5 bmNfdmFsLCB2c3luY19yZWcpOworCVBTQl9XVkRDMzIocGlwZXNyY192YWwsIHBpcGVzcmNfcmVn KTsKKwlQU0JfV1ZEQzMyKGRzcHN0YXR1c192YWwsIGRzcHN0YXR1c19yZWcpOworCisJLypzZXQg dXAgdGhlIHBsYW5lKi8KKwlQU0JfV1ZEQzMyKGRzcHN0cmlkZV92YWwsIGRzcHN0cmlkZV9yZWcp OworCVBTQl9XVkRDMzIoZHNwbGlub2ZmX3ZhbCwgZHNwbGlub2ZmX3JlZyk7CisJUFNCX1dWREMz Mihkc3B0aWxlb2ZmX3ZhbCwgZHNwdGlsZW9mZl9yZWcpOworCVBTQl9XVkRDMzIoZHNwc2l6ZV92 YWwsIGRzcHNpemVfcmVnKTsKKwlQU0JfV1ZEQzMyKGRzcHBvc192YWwsIGRzcHBvc19yZWcpOwor CVBTQl9XVkRDMzIoZHNwc3VyZl92YWwsIGRzcHN1cmZfcmVnKTsKKworCWlmIChwaXBlID09IDEp IHsKKwkJLyogcmVzdG9yZSBwYWxldHRlIChnYW1tYSkgKi8KKwkJLypEUk1fVURFTEFZKDUwMDAw KTsgKi8KKwkJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQorCQkJUFNCX1dWREMzMihwYWxldHRl X3ZhbFtpXSwgcGFsZXR0ZV9yZWcgKyAoaSA8PCAyKSk7CisKKwkJUFNCX1dWREMzMihyZWdzLT5z YXZlUEZJVF9DT05UUk9MLCBQRklUX0NPTlRST0wpOworCQlQU0JfV1ZEQzMyKHJlZ3MtPnNhdmVQ RklUX1BHTV9SQVRJT1MsIFBGSVRfUEdNX1JBVElPUyk7CisKKwkJLypUT0RPOiByZXN1bWUgSERN SSBwb3J0ICovCisKKwkJLypUT0RPOiByZXN1bWUgcGlwZSovCisKKwkJLyplbmFibGUgdGhlIHBs YW5lKi8KKwkJUFNCX1dWREMzMihkc3BjbnRyX3ZhbCAmIH5ESVNQTEFZX1BMQU5FX0VOQUJMRSwg ZHNwY250cl9yZWcpOworCisJCXJldHVybiAwOworCX0KKworCS8qc2V0IHVwIHBpcGUgcmVsYXRl ZCByZWdpc3RlcnMqLworCVBTQl9XVkRDMzIobWlwaV92YWwsIG1pcGlfcmVnKTsKKworCS8qc2V0 dXAgTUlQSSBhZGFwdGVyICsgTUlQSSBJUCByZWdpc3RlcnMqLworCWlmIChkc2lfY29uZmlnKQor CQltZGZsZF9kc2lfY29udHJvbGxlcl9pbml0KGRzaV9jb25maWcsIHBpcGUpOworCisJaWYgKGlu X2F0b21pYygpIHx8IGluX2ludGVycnVwdCgpKQorCQltZGVsYXkoMjApOworCWVsc2UKKwkJbXNs ZWVwKDIwKTsKKworCS8qZW5hYmxlIHRoZSBwbGFuZSovCisJUFNCX1dWREMzMihkc3BjbnRyX3Zh bCwgZHNwY250cl9yZWcpOworCisJaWYgKGluX2F0b21pYygpIHx8IGluX2ludGVycnVwdCgpKQor CQltZGVsYXkoMjApOworCWVsc2UKKwkJbXNsZWVwKDIwKTsKKworCS8qIExQIEhvbGQgUmVsZWFz ZSAqLworCXRlbXAgPSBSRUdfUkVBRChtaXBpX3JlZyk7CisJdGVtcCB8PSBMUF9PVVRQVVRfSE9M RF9SRUxFQVNFOworCVJFR19XUklURShtaXBpX3JlZywgdGVtcCk7CisJbWRlbGF5KDEpOworCisK KwkvKiBTZXQgRFNJIGhvc3QgdG8gZXhpdCBmcm9tIFV0cmEgTG93IFBvd2VyIFN0YXRlICovCisJ dGVtcCA9IFJFR19SRUFEKGRldmljZV9yZWFkeV9yZWcpOworCXRlbXAgJj0gflVMUFNfTUFTSzsK Kwl0ZW1wIHw9IDB4MzsKKwl0ZW1wIHw9IEVYSVRfVUxQU19ERVZfUkVBRFk7CisJUkVHX1dSSVRF KGRldmljZV9yZWFkeV9yZWcsIHRlbXApOworCW1kZWxheSgxKTsKKworCXRlbXAgPSBSRUdfUkVB RChkZXZpY2VfcmVhZHlfcmVnKTsKKwl0ZW1wICY9IH5VTFBTX01BU0s7CisJdGVtcCB8PSBFWElU SU5HX1VMUFM7CisJUkVHX1dSSVRFKGRldmljZV9yZWFkeV9yZWcsIHRlbXApOworCW1kZWxheSgx KTsKKworCS8qZW5hYmxlIHRoZSBwaXBlKi8KKwlQU0JfV1ZEQzMyKHBpcGVjb25mX3ZhbCwgcGlw ZWNvbmZfcmVnKTsKKworCS8qIHJlc3RvcmUgcGFsZXR0ZSAoZ2FtbWEpICovCisJLypEUk1fVURF TEFZKDUwMDAwKTsgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisJCVBTQl9XVkRDMzIo cGFsZXR0ZV92YWxbaV0sIHBhbGV0dGVfcmVnICsgKGkgPDwgMikpOworCisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQgbWRmbGRfc2F2ZV9yZWdpc3RlcnMoc3RydWN0IGRybV9kZXZpY2UgKmRl dikKK3sKKwkvKiBtZGZsZF9zYXZlX2N1cnNvcl9vdmVybGF5X3JlZ2lzdGVycyhkZXYpOyAqLwor CW1kZmxkX3NhdmVfZGlzcGxheV9yZWdpc3RlcnMoZGV2LCAwKTsKKwltZGZsZF9zYXZlX2Rpc3Bs YXlfcmVnaXN0ZXJzKGRldiwgMik7CisJbWRmbGRfZGlzYWJsZV9jcnRjKGRldiwgMCk7CisJbWRm bGRfZGlzYWJsZV9jcnRjKGRldiwgMik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBt ZGZsZF9yZXN0b3JlX3JlZ2lzdGVycyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCW1kZmxk X3Jlc3RvcmVfZGlzcGxheV9yZWdpc3RlcnMoZGV2LCAyKTsKKwltZGZsZF9yZXN0b3JlX2Rpc3Bs YXlfcmVnaXN0ZXJzKGRldiwgMCk7CisJLyogbWRmbGRfcmVzdG9yZV9jdXJzb3Jfb3ZlcmxheV9y ZWdpc3RlcnMoZGV2KTsgKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1kZmxkX3Bv d2VyX2Rvd24oc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwkvKiBGSVhNRSAqLworCXJldHVy biAwOworfQorCitzdGF0aWMgaW50IG1kZmxkX3Bvd2VyX3VwKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYpCit7CisJLyogRklYTUUgKi8KKwlyZXR1cm4gMDsKK30KKworY29uc3Qgc3RydWN0IHBzYl9v cHMgbWRmbGRfY2hpcF9vcHMgPSB7CisJLm5hbWUgPSAibWRmbGQiLAorCS5hY2NlbF8yZCA9IDAs CisJLnBpcGVzID0gMywKKwkuY3J0Y3MgPSAzLAorCS5zZ3hfb2Zmc2V0ID0gTVJTVF9TR1hfT0ZG U0VULAorCisJLmNoaXBfc2V0dXAgPSBtaWRfY2hpcF9zZXR1cCwKKwkuY3J0Y19oZWxwZXIgPSAm bWRmbGRfaGVscGVyX2Z1bmNzLAorCS5jcnRjX2Z1bmNzID0gJnBzYl9pbnRlbF9jcnRjX2Z1bmNz LAorCisJLm91dHB1dF9pbml0ID0gbWRmbGRfb3V0cHV0X2luaXQsCisKKyNpZmRlZiBDT05GSUdf QkFDS0xJR0hUX0NMQVNTX0RFVklDRQorCS5iYWNrbGlnaHRfaW5pdCA9IG1kZmxkX2JhY2tsaWdo dF9pbml0LAorI2VuZGlmCisKKwkuc2F2ZV9yZWdzID0gbWRmbGRfc2F2ZV9yZWdpc3RlcnMsCisJ LnJlc3RvcmVfcmVncyA9IG1kZmxkX3Jlc3RvcmVfcmVnaXN0ZXJzLAorCS5wb3dlcl9kb3duID0g bWRmbGRfcG93ZXJfZG93biwKKwkucG93ZXJfdXAgPSBtZGZsZF9wb3dlcl91cCwKK307CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL21kZmxkX2RzaV9kcGkuYyBiL2RyaXZlcnMv Z3B1L2RybS9nbWE1MDAvbWRmbGRfZHNpX2RwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLmZjMGRmMjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZ21h NTAwL21kZmxkX2RzaV9kcGkuYwpAQCAtMCwwICsxLDEwMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQg wqkgMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdy YW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5 IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhl ICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmlj dGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2Us IGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisg KiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNv bnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVj dCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdo dCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAor ICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50 aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElT IFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Mg T1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9S UyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBP UiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwg VE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNU SU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAqIERFQUxJTkdTIElO IFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICogamltIGxpdSA8amltLmxpdUBpbnRl bC5jb20+CisgKiBKYWNraWUgTGk8eWFvZG9uZy5saUBpbnRlbC5jb20+CisgKi8KKworI2luY2x1 ZGUgIm1kZmxkX2RzaV9kcGkuaCIKKyNpbmNsdWRlICJtZGZsZF9vdXRwdXQuaCIKKyNpbmNsdWRl ICJtZGZsZF9kc2lfcGtnX3NlbmRlci5oIgorI2luY2x1ZGUgInBzYl9kcnYuaCIKKyNpbmNsdWRl ICJ0YzM1ODc2eC1kc2ktbHZkcy5oIgorCitzdGF0aWMgdm9pZCBtZGZsZF9kc2lfZHBpX3NodXRf ZG93bihzdHJ1Y3QgbWRmbGRfZHNpX2RwaV9vdXRwdXQgKm91dHB1dCwKKwkJCQkJCQkJaW50IHBp cGUpOworCitzdGF0aWMgdm9pZCBtZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oc3RydWN0IGRy bV9kZXZpY2UgKmRldiwgdTMyIHBpcGUpCit7CisJdTMyIGdlbl9maWZvX3N0YXRfcmVnID0gTUlQ SV9HRU5fRklGT19TVEFUX1JFRyhwaXBlKTsKKwlpbnQgdGltZW91dCA9IDA7CisKKwl1ZGVsYXko NTAwKTsKKworCS8qIFRoaXMgd2lsbCB0aW1lIG91dCBhZnRlciBhcHByb3hpbWF0ZWx5IDIrIHNl Y29uZHMgKi8KKwl3aGlsZSAoKHRpbWVvdXQgPCAyMDAwMCkgJiYKKwkJKFJFR19SRUFEKGdlbl9m aWZvX3N0YXRfcmVnKSAmIERTSV9GSUZPX0dFTl9IU19EQVRBX0ZVTEwpKSB7CisJCXVkZWxheSgx MDApOworCQl0aW1lb3V0Kys7CisJfQorCisJaWYgKHRpbWVvdXQgPT0gMjAwMDApCisJCURSTV9J TkZPKCJNSVBJOiBIUyBEYXRhIEZJRk8gd2FzIG5ldmVyIGNsZWFyZWQhXG4iKTsKK30KKworc3Rh dGljIHZvaWQgbWRmbGRfd2FpdF9mb3JfSFNfQ1RSTF9GSUZPKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsIHUzMiBwaXBlKQoreworCXUzMiBnZW5fZmlmb19zdGF0X3JlZyA9IE1JUElfR0VOX0ZJRk9f U1RBVF9SRUcocGlwZSk7CisJaW50IHRpbWVvdXQgPSAwOworCisJdWRlbGF5KDUwMCk7CisKKwkv KiBUaGlzIHdpbGwgdGltZSBvdXQgYWZ0ZXIgYXBwcm94aW1hdGVseSAyKyBzZWNvbmRzICovCisJ d2hpbGUgKCh0aW1lb3V0IDwgMjAwMDApICYmIChSRUdfUkVBRChnZW5fZmlmb19zdGF0X3JlZykK KwkJCQkJJiBEU0lfRklGT19HRU5fSFNfQ1RSTF9GVUxMKSkgeworCQl1ZGVsYXkoMTAwKTsKKwkJ dGltZW91dCsrOworCX0KKwlpZiAodGltZW91dCA9PSAyMDAwMCkKKwkJRFJNX0lORk8oIk1JUEk6 IEhTIENNRCBGSUZPIHdhcyBuZXZlciBjbGVhcmVkIVxuIik7Cit9CisKK3N0YXRpYyB2b2lkIG1k ZmxkX3dhaXRfZm9yX0RQSV9DVFJMX0ZJRk8oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTMyIHBp cGUpCit7CisJdTMyIGdlbl9maWZvX3N0YXRfcmVnID0gTUlQSV9HRU5fRklGT19TVEFUX1JFRyhw aXBlKTsKKwlpbnQgdGltZW91dCA9IDA7CisKKwl1ZGVsYXkoNTAwKTsKKworCS8qIFRoaXMgd2ls bCB0aW1lIG91dCBhZnRlciBhcHByb3hpbWF0ZWx5IDIrIHNlY29uZHMgKi8KKwl3aGlsZSAoKHRp bWVvdXQgPCAyMDAwMCkgJiYgKChSRUdfUkVBRChnZW5fZmlmb19zdGF0X3JlZykgJgorCQkJCQlE UElfRklGT19FTVBUWSkgIT0gRFBJX0ZJRk9fRU1QVFkpKSB7CisJCXVkZWxheSgxMDApOworCQl0 aW1lb3V0Kys7CisJfQorCisJaWYgKHRpbWVvdXQgPT0gMjAwMDApCisJCURSTV9FUlJPUigiTUlQ STogRFBJIEZJRk8gd2FzIG5ldmVyIGNsZWFyZWRcbiIpOworfQorCitzdGF0aWMgdm9pZCBtZGZs ZF93YWl0X2Zvcl9TUExfUEtHX1NFTlQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTMyIHBpcGUp Cit7CisJdTMyIGludHJfc3RhdF9yZWcgPSBNSVBJX0lOVFJfU1RBVF9SRUcocGlwZSk7CisJaW50 IHRpbWVvdXQgPSAwOworCisJdWRlbGF5KDUwMCk7CisKKwkvKiBUaGlzIHdpbGwgdGltZSBvdXQg YWZ0ZXIgYXBwcm94aW1hdGVseSAyKyBzZWNvbmRzICovCisJd2hpbGUgKCh0aW1lb3V0IDwgMjAw MDApICYmICghKFJFR19SRUFEKGludHJfc3RhdF9yZWcpCisJCQkJCSYgRFNJX0lOVFJfU1RBVEVf U1BMX1BLR19TRU5UKSkpIHsKKwkJdWRlbGF5KDEwMCk7CisJCXRpbWVvdXQrKzsKKwl9CisKKwlp ZiAodGltZW91dCA9PSAyMDAwMCkKKyAgICAgICAgICAgICAgICBEUk1fRVJST1IoIk1JUEk6IFNQ TF9QS1RfU0VOVF9JTlRFUlJVUFQgd2FzIG5vdCBzZW50IHN1Y2Nlc3NmdWxseSFcbiIpOworfQor CisvKiBGb3IgVEMzNTg3NlggKi8KKworc3RhdGljIHZvaWQgZHNpX3NldF9kZXZpY2VfcmVhZHlf c3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHN0YXRlLAorCQkJCWludCBwaXBlKQor eworCVJFR19GTERfTU9EKE1JUElfREVWSUNFX1JFQURZX1JFRyhwaXBlKSwgISFzdGF0ZSwgMCwg MCk7Cit9CisKK3N0YXRpYyB2b2lkIGRzaV9zZXRfcGlwZV9wbGFuZV9lbmFibGVfc3RhdGUoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJCQlpbnQgc3RhdGUsIGludCBwaXBlKQoreworCXN0 cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MzIg cGlwZWNvbmZfcmVnID0gUElQRUFDT05GOworCXUzMiBkc3BjbnRyX3JlZyA9IERTUEFDTlRSOwor CisJdTMyIGRzcGNudHIgPSBkZXZfcHJpdi0+ZHNwY250cltwaXBlXTsKKwl1MzIgbWlwaSA9IE1J UElfUE9SVF9FTiB8IFBBU1NfRlJPTV9TUEhZX1RPX0FGRSB8IFNFTF9GTE9QUEVEX0hTVFg7CisK KwlpZiAocGlwZSkgeworCQlwaXBlY29uZl9yZWcgPSBQSVBFQ0NPTkY7CisJCWRzcGNudHJfcmVn ID0gRFNQQ0NOVFI7CisJfSBlbHNlCisJCW1pcGkgJj0gKH4weDAzKTsKKworCWlmIChzdGF0ZSkg eworCQkvKlNldCB1cCBwaXBlICovCisJCVJFR19XUklURShwaXBlY29uZl9yZWcsIEJJVCgzMSkp OworCisJCWlmIChSRUdfQklUX1dBSVQocGlwZWNvbmZfcmVnLCAxLCAzMCkpCisJCQlkZXZfZXJy KCZkZXYtPnBkZXYtPmRldiwgIiVzOiBQaXBlIGVuYWJsZSB0aW1lb3V0XG4iLAorCQkJCV9fZnVu Y19fKTsKKworCQkvKlNldCB1cCBkaXNwbGF5IHBsYW5lICovCisJCVJFR19XUklURShkc3BjbnRy X3JlZywgZHNwY250cik7CisJfSBlbHNlIHsKKwkJdTMyIGRzcGJhc2VfcmVnID0gcGlwZSA/IE1E RkxEX0RTUENCQVNFIDogTVJTVF9EU1BBQkFTRTsKKworCQkvKiBQdXQgRFNJIGxhbmVzIHRvIFVM UFMgdG8gZGlzYWJsZSBwaXBlICovCisJCVJFR19GTERfTU9EKE1JUElfREVWSUNFX1JFQURZX1JF RyhwaXBlKSwgMiwgMiwgMSk7CisJCVJFR19SRUFEKE1JUElfREVWSUNFX1JFQURZX1JFRyhwaXBl KSk7IC8qIHBvc3RlZCB3cml0ZT8gKi8KKworCQkvKiBMUCBIb2xkICovCisJCVJFR19GTERfTU9E KE1JUElfUE9SVF9DT05UUk9MKHBpcGUpLCAwLCAxNiwgMTYpOworCQlSRUdfUkVBRChNSVBJX1BP UlRfQ09OVFJPTChwaXBlKSk7IC8qIHBvc3RlZCB3cml0ZT8gKi8KKworCQkvKiBEaXNhYmxlIGRp c3BsYXkgcGxhbmUgKi8KKwkJUkVHX0ZMRF9NT0QoZHNwY250cl9yZWcsIDAsIDMxLCAzMSk7CisK KwkJLyogRmx1c2ggdGhlIHBsYW5lIGNoYW5nZXMgPz8/IHBvc3RlZCB3cml0ZT8gKi8KKwkJUkVH X1dSSVRFKGRzcGJhc2VfcmVnLCBSRUdfUkVBRChkc3BiYXNlX3JlZykpOworCQlSRUdfUkVBRChk c3BiYXNlX3JlZyk7CisKKwkJLyogRGlzYWJsZSBQSVBFICovCisJCVJFR19GTERfTU9EKHBpcGVj b25mX3JlZywgMCwgMzEsIDMxKTsKKworCQlpZiAoUkVHX0JJVF9XQUlUKHBpcGVjb25mX3JlZywg MCwgMzApKQorCQkJZGV2X2VycigmZGV2LT5wZGV2LT5kZXYsICIlczogUGlwZSBkaXNhYmxlIHRp bWVvdXRcbiIsCisJCQkJX19mdW5jX18pOworCisJCWlmIChSRUdfQklUX1dBSVQoTUlQSV9HRU5f RklGT19TVEFUX1JFRyhwaXBlKSwgMSwgMjgpKQorCQkJZGV2X2VycigmZGV2LT5wZGV2LT5kZXYs ICIlczogRklGTyBub3QgZW1wdHlcbiIsCisJCQkJX19mdW5jX18pOworCX0KK30KKworc3RhdGlj IHZvaWQgbWRmbGRfZHNpX2NvbmZpZ3VyZV9kb3duKHN0cnVjdCBtZGZsZF9kc2lfZW5jb2RlciAq ZHNpX2VuY29kZXIsCisJCQkJCQkJCWludCBwaXBlKQoreworCXN0cnVjdCBtZGZsZF9kc2lfZHBp X291dHB1dCAqZHBpX291dHB1dCA9CisJCQkJTURGTERfRFNJX0RQSV9PVVRQVVQoZHNpX2VuY29k ZXIpOworCXN0cnVjdCBtZGZsZF9kc2lfY29uZmlnICpkc2lfY29uZmlnID0KKwkJCQltZGZsZF9k c2lfZW5jb2Rlcl9nZXRfY29uZmlnKGRzaV9lbmNvZGVyKTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2ID0gZHNpX2NvbmZpZy0+ZGV2OworCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2 ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmICghZGV2X3ByaXYtPmRwaV9wYW5lbF9vbltwaXBl XSkgeworCQlkZXZfZXJyKGRldi0+ZGV2LCAiRFBJIHBhbmVsIGlzIGFscmVhZHkgb2ZmXG4iKTsK KwkJcmV0dXJuOworCX0KKwl0YzM1ODc2eF90b3NoaWJhX2JyaWRnZV9wYW5lbF9vZmYoZGV2KTsK Kwl0YzM1ODc2eF9zZXRfYnJpZGdlX3Jlc2V0X3N0YXRlKGRldiwgMSk7CisJZHNpX3NldF9waXBl X3BsYW5lX2VuYWJsZV9zdGF0ZShkZXYsIDAsIHBpcGUpOworCW1kZmxkX2RzaV9kcGlfc2h1dF9k b3duKGRwaV9vdXRwdXQsIHBpcGUpOworCWRzaV9zZXRfZGV2aWNlX3JlYWR5X3N0YXRlKGRldiwg MCwgcGlwZSk7Cit9CisKK3N0YXRpYyB2b2lkIG1kZmxkX2RzaV9jb25maWd1cmVfdXAoc3RydWN0 IG1kZmxkX2RzaV9lbmNvZGVyICpkc2lfZW5jb2RlciwKKwkJCQkJCQkJaW50IHBpcGUpCit7CisJ c3RydWN0IG1kZmxkX2RzaV9kcGlfb3V0cHV0ICpkcGlfb3V0cHV0ID0KKwkJCQlNREZMRF9EU0lf RFBJX09VVFBVVChkc2lfZW5jb2Rlcik7CisJc3RydWN0IG1kZmxkX2RzaV9jb25maWcgKmRzaV9j b25maWcgPQorCQkJCW1kZmxkX2RzaV9lbmNvZGVyX2dldF9jb25maWcoZHNpX2VuY29kZXIpOwor CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkc2lfY29uZmlnLT5kZXY7CisJc3RydWN0IGRybV9w c2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKGRldl9wcml2 LT5kcGlfcGFuZWxfb25bcGlwZV0pIHsKKwkJZGV2X2VycihkZXYtPmRldiwgIkRQSSBwYW5lbCBp cyBhbHJlYWR5IG9uXG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qIEZvciByZXN1bWUgcGF0aCBz ZXF1ZW5jZSAqLworCW1kZmxkX2RzaV9kcGlfc2h1dF9kb3duKGRwaV9vdXRwdXQsIHBpcGUpOwor CWRzaV9zZXRfZGV2aWNlX3JlYWR5X3N0YXRlKGRldiwgMCwgcGlwZSk7CisKKwlkc2lfc2V0X2Rl dmljZV9yZWFkeV9zdGF0ZShkZXYsIDEsIHBpcGUpOworCXRjMzU4NzZ4X3NldF9icmlkZ2VfcmVz ZXRfc3RhdGUoZGV2LCAwKTsKKwl0YzM1ODc2eF9jb25maWd1cmVfbHZkc19icmlkZ2UoZGV2KTsK KwltZGZsZF9kc2lfZHBpX3R1cm5fb24oZHBpX291dHB1dCwgcGlwZSk7ICAvKiBTZW5kIHR1cm4g b24gY29tbWFuZCAqLworCWRzaV9zZXRfcGlwZV9wbGFuZV9lbmFibGVfc3RhdGUoZGV2LCAxLCBw aXBlKTsKK30KKy8qIEVuZCBmb3IgVEMzNTg3NlggKi8KKworLyogKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAq XAorICogRlVOQ1RJT046IG1kZmxkX2RzaV90cG9faWNfaW5pdAorICoKKyAqIERFU0NSSVBUSU9O OiAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb25seSBieSBtcnN0X2RzaV9tb2RlX3NldCBhbmQK KyAqICAgICAgICAgICAgICAgcmVzdG9yZV9kaXNwbGF5X3JlZ2lzdGVycy4gIHNpbmNlIHRoaXMg ZnVuY3Rpb24gZG9lcyBub3QKKyAqICAgICAgICAgICAgICAgYWNxdWlyZSB0aGUgbXV0ZXgsIGl0 IGlzIGltcG9ydGFudCB0aGF0IHRoZSBjYWxsaW5nIGZ1bmN0aW9uCisgKiAgICAgICAgICAgICAg IGRvZXMhCitcKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqICovCitzdGF0aWMgdm9pZCBtZGZsZF9kc2lfdHBv X2ljX2luaXQoc3RydWN0IG1kZmxkX2RzaV9jb25maWcgKmRzaV9jb25maWcsIHUzMiBwaXBlKQor eworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkc2lfY29uZmlnLT5kZXY7CisJdTMyIGRjc0No YW5uZWxOdW1iZXIgPSBkc2lfY29uZmlnLT5jaGFubmVsX251bTsKKwl1MzIgZ2VuX2RhdGFfcmVn ID0gTUlQSV9IU19HRU5fREFUQV9SRUcocGlwZSk7CisJdTMyIGdlbl9jdHJsX3JlZyA9IE1JUElf SFNfR0VOX0NUUkxfUkVHKHBpcGUpOworCXUzMiBnZW5fY3RybF92YWwgPSBHRU5fTE9OR19XUklU RTsKKworCURSTV9JTkZPKCJFbnRlciBtcnN0IGluaXQgVFBPIE1JUEkgZGlzcGxheS5cbiIpOwor CisJZ2VuX2N0cmxfdmFsIHw9IGRjc0NoYW5uZWxOdW1iZXIgPDwgRENTX0NIQU5ORUxfTlVNQkVS X1BPUzsKKworCS8qIEZsaXAgcGFnZSBvcmRlciAqLworCW1kZmxkX3dhaXRfZm9yX0hTX0RBVEFf RklGTyhkZXYsIHBpcGUpOworCVJFR19XUklURShnZW5fZGF0YV9yZWcsIDB4MDAwMDgwMzYpOwor CW1kZmxkX3dhaXRfZm9yX0hTX0NUUkxfRklGTyhkZXYsIHBpcGUpOworCVJFR19XUklURShnZW5f Y3RybF9yZWcsIGdlbl9jdHJsX3ZhbCB8ICgweDAyIDw8IFdPUkRfQ09VTlRTX1BPUykpOworCisJ LyogMHhGMCAqLworCW1kZmxkX3dhaXRfZm9yX0hTX0RBVEFfRklGTyhkZXYsIHBpcGUpOworCVJF R19XUklURShnZW5fZGF0YV9yZWcsIDB4MDA1YTVhZjApOworCW1kZmxkX3dhaXRfZm9yX0hTX0NU UkxfRklGTyhkZXYsIHBpcGUpOworCVJFR19XUklURShnZW5fY3RybF9yZWcsIGdlbl9jdHJsX3Zh bCB8ICgweDAzIDw8IFdPUkRfQ09VTlRTX1BPUykpOworCisJLyogV3JpdGUgcHJvdGVjdGlvbiBr ZXkgKi8KKwltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKKwlSRUdfV1JJ VEUoZ2VuX2RhdGFfcmVnLCAweDAwNWE1YWYxKTsKKwltZGZsZF93YWl0X2Zvcl9IU19DVFJMX0ZJ Rk8oZGV2LCBwaXBlKTsKKwlSRUdfV1JJVEUoZ2VuX2N0cmxfcmVnLCBnZW5fY3RybF92YWwgfCAo MHgwMyA8PCBXT1JEX0NPVU5UU19QT1MpKTsKKworCS8qIDB4RkMgKi8KKwltZGZsZF93YWl0X2Zv cl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKKwlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDAw NWE1YWZjKTsKKwltZGZsZF93YWl0X2Zvcl9IU19DVFJMX0ZJRk8oZGV2LCBwaXBlKTsKKwlSRUdf V1JJVEUoZ2VuX2N0cmxfcmVnLCBnZW5fY3RybF92YWwgfCAoMHgwMyA8PCBXT1JEX0NPVU5UU19Q T1MpKTsKKworCS8qIDB4QjcgKi8KKwltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBw aXBlKTsKKwlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDc3MDAwMGI3KTsKKwltZGZsZF93YWl0 X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKKwlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAw eDAwMDAwMDQ0KTsKKwltZGZsZF93YWl0X2Zvcl9IU19DVFJMX0ZJRk8oZGV2LCBwaXBlKTsKKwlS RUdfV1JJVEUoZ2VuX2N0cmxfcmVnLCBnZW5fY3RybF92YWwgfCAoMHgwNSA8PCBXT1JEX0NPVU5U U19QT1MpKTsKKworCS8qIDB4QjYgKi8KKwltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2 LCBwaXBlKTsKKwlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDAwMGEwYWI2KTsKKwltZGZsZF93 YWl0X2Zvcl9IU19DVFJMX0ZJRk8oZGV2LCBwaXBlKTsKKwlSRUdfV1JJVEUoZ2VuX2N0cmxfcmVn LCBnZW5fY3RybF92YWwgfCAoMHgwMyA8PCBXT1JEX0NPVU5UU19QT1MpKTsKKworCS8qIDB4RjIg Ki8KKwltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKKwlSRUdfV1JJVEUo Z2VuX2RhdGFfcmVnLCAweDA4MTAxMGYyKTsKKwltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8o ZGV2LCBwaXBlKTsKKwlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDRhMDcwNzA4KTsKKwltZGZs ZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKKwlSRUdfV1JJVEUoZ2VuX2RhdGFf cmVnLCAweDAwMDAwMGM1KTsKKwltZGZsZF93YWl0X2Zvcl9IU19DVFJMX0ZJRk8oZGV2LCBwaXBl KTsKKwlSRUdfV1JJVEUoZ2VuX2N0cmxfcmVnLCBnZW5fY3RybF92YWwgfCAoMHgwOSA8PCBXT1JE X0NPVU5UU19QT1MpKTsKKworCS8qIDB4RjggKi8KKwltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJ Rk8oZGV2LCBwaXBlKTsKKwlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDAyNDAwM2Y4KTsKKwlt ZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKKwlSRUdfV1JJVEUoZ2VuX2Rh dGFfcmVnLCAweDAxMDMwYTA0KTsKKwltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBw aXBlKTsKKwlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDBlMDIwMjIwKTsKKwltZGZsZF93YWl0 X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKKwlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAw eDAwMDAwMDA0KTsKKwltZGZsZF93YWl0X2Zvcl9IU19DVFJMX0ZJRk8oZGV2LCBwaXBlKTsKKwlS RUdfV1JJVEUoZ2VuX2N0cmxfcmVnLCBnZW5fY3RybF92YWwgfCAoMHgwZCA8PCBXT1JEX0NPVU5U U19QT1MpKTsKKworCS8qIDB4RTIgKi8KKwltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2 LCBwaXBlKTsKKwlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDM5OGZjM2UyKTsKKwltZGZsZF93 YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKKwlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVn LCAweDAwMDA5MTZmKTsKKwltZGZsZF93YWl0X2Zvcl9IU19DVFJMX0ZJRk8oZGV2LCBwaXBlKTsK KwlSRUdfV1JJVEUoZ2VuX2N0cmxfcmVnLCBnZW5fY3RybF92YWwgfCAoMHgwNiA8PCBXT1JEX0NP VU5UU19QT1MpKTsKKworCS8qIDB4QjAgKi8KKwltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8o ZGV2LCBwaXBlKTsKKwlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDAwMDAwMGIwKTsKKwltZGZs ZF93YWl0X2Zvcl9IU19DVFJMX0ZJRk8oZGV2LCBwaXBlKTsKKwlSRUdfV1JJVEUoZ2VuX2N0cmxf cmVnLCBnZW5fY3RybF92YWwgfCAoMHgwMiA8PCBXT1JEX0NPVU5UU19QT1MpKTsKKworCS8qIDB4 RjQgKi8KKwltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKKwlSRUdfV1JJ VEUoZ2VuX2RhdGFfcmVnLCAweDI0MDI0MmY0KTsKKwltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJ Rk8oZGV2LCBwaXBlKTsKKwlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDc4ZWUyMDAyKTsKKwlt ZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKKwlSRUdfV1JJVEUoZ2VuX2Rh dGFfcmVnLCAweDJhMDcxMDUwKTsKKwltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBw aXBlKTsKKwlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDUwN2ZlZTEwKTsKKwltZGZsZF93YWl0 X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKKwlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAw eDEwMzAwNzEwKTsKKwltZGZsZF93YWl0X2Zvcl9IU19DVFJMX0ZJRk8oZGV2LCBwaXBlKTsKKwlS RUdfV1JJVEUoZ2VuX2N0cmxfcmVnLCBnZW5fY3RybF92YWwgfCAoMHgxNCA8PCBXT1JEX0NPVU5U U19QT1MpKTsKKworCS8qIDB4QkEgKi8KKwltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2 LCBwaXBlKTsKKwlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDE5ZmUwN2JhKTsKKwltZGZsZF93 YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKKwlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVn LCAweDEwMWMwYTMxKTsKKwltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsK KwlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDAwMDAwMDEwKTsKKwltZGZsZF93YWl0X2Zvcl9I U19DVFJMX0ZJRk8oZGV2LCBwaXBlKTsKKwlSRUdfV1JJVEUoZ2VuX2N0cmxfcmVnLCBnZW5fY3Ry bF92YWwgfCAoMHgwOSA8PCBXT1JEX0NPVU5UU19QT1MpKTsKKworCS8qIDB4QkIgKi8KKwltZGZs ZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKKwlSRUdfV1JJVEUoZ2VuX2RhdGFf cmVnLCAweDI4ZmYwN2JiKTsKKwltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBl KTsKKwlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDI0MjgwYTMxKTsKKwltZGZsZF93YWl0X2Zv cl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKKwlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDAw MDAwMDM0KTsKKwltZGZsZF93YWl0X2Zvcl9IU19DVFJMX0ZJRk8oZGV2LCBwaXBlKTsKKwlSRUdf V1JJVEUoZ2VuX2N0cmxfcmVnLCBnZW5fY3RybF92YWwgfCAoMHgwOSA8PCBXT1JEX0NPVU5UU19Q T1MpKTsKKworCS8qIDB4RkIgKi8KKwltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBw aXBlKTsKKwlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDUzNWQwNWZiKTsKKwltZGZsZF93YWl0 X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKKwlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAw eDFiMWEyMTMwKTsKKwltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKKwlS RUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDIyMWUxODBlKTsKKwltZGZsZF93YWl0X2Zvcl9IU19E QVRBX0ZJRk8oZGV2LCBwaXBlKTsKKwlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDEzMWQyMTIw KTsKKwltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKKwlSRUdfV1JJVEUo Z2VuX2RhdGFfcmVnLCAweDUzNWQwNTA4KTsKKwltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8o ZGV2LCBwaXBlKTsKKwlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDFjMWEyMTMxKTsKKwltZGZs ZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKKwlSRUdfV1JJVEUoZ2VuX2RhdGFf cmVnLCAweDIzMWYxNjBkKTsKKwltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBl KTsKKwlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDExMWIyMjIwKTsKKwltZGZsZF93YWl0X2Zv cl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKKwlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDUz NWMyMDA4KTsKKwltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKKwlSRUdf V1JJVEUoZ2VuX2RhdGFfcmVnLCAweDFmMWQyNDMzKTsKKwltZGZsZF93YWl0X2Zvcl9IU19EQVRB X0ZJRk8oZGV2LCBwaXBlKTsKKwlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDJjMjUxYTEwKTsK KwltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKKwlSRUdfV1JJVEUoZ2Vu X2RhdGFfcmVnLCAweDJjMzQzNzJkKTsKKwltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2 LCBwaXBlKTsKKwlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDAwMDAwMDIzKTsKKwltZGZsZF93 YWl0X2Zvcl9IU19DVFJMX0ZJRk8oZGV2LCBwaXBlKTsKKwlSRUdfV1JJVEUoZ2VuX2N0cmxfcmVn LCBnZW5fY3RybF92YWwgfCAoMHgzMSA8PCBXT1JEX0NPVU5UU19QT1MpKTsKKworCS8qIDB4RkEg Ki8KKwltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKKwlSRUdfV1JJVEUo Z2VuX2RhdGFfcmVnLCAweDUyNWMwYmZhKTsKKwltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8o ZGV2LCBwaXBlKTsKKwlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDFjMWMyMzJmKTsKKwltZGZs ZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKKwlSRUdfV1JJVEUoZ2VuX2RhdGFf cmVnLCAweDI2MjMxOTBlKTsKKwltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBl KTsKKwlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDE4MjEyNjI1KTsKKwltZGZsZF93YWl0X2Zv cl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKKwlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDU0 NWQwZDBlKTsKKwltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKKwlSRUdf V1JJVEUoZ2VuX2RhdGFfcmVnLCAweDFlMWQyMzMzKTsKKwltZGZsZF93YWl0X2Zvcl9IU19EQVRB X0ZJRk8oZGV2LCBwaXBlKTsKKwlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDI2MjMxYTEwKTsK KwltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKKwlSRUdfV1JJVEUoZ2Vu X2RhdGFfcmVnLCAweDFhMjIyNzI1KTsKKwltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2 LCBwaXBlKTsKKwlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDU0NWQyODBmKTsKKwltZGZsZF93 YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKKwlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVn LCAweDIxMjAyNjM1KTsKKwltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsK KwlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDMxMjkyMDEzKTsKKwltZGZsZF93YWl0X2Zvcl9I U19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKKwlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDMxMzkz ZDMzKTsKKwltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKKwlSRUdfV1JJ VEUoZ2VuX2RhdGFfcmVnLCAweDAwMDAwMDI5KTsKKwltZGZsZF93YWl0X2Zvcl9IU19DVFJMX0ZJ Rk8oZGV2LCBwaXBlKTsKKwlSRUdfV1JJVEUoZ2VuX2N0cmxfcmVnLCBnZW5fY3RybF92YWwgfCAo MHgzMSA8PCBXT1JEX0NPVU5UU19QT1MpKTsKKworCS8qIFNldCBETSAqLworCW1kZmxkX3dhaXRf Zm9yX0hTX0RBVEFfRklGTyhkZXYsIHBpcGUpOworCVJFR19XUklURShnZW5fZGF0YV9yZWcsIDB4 MDAwMTAwZjcpOworCW1kZmxkX3dhaXRfZm9yX0hTX0NUUkxfRklGTyhkZXYsIHBpcGUpOworCVJF R19XUklURShnZW5fY3RybF9yZWcsIGdlbl9jdHJsX3ZhbCB8ICgweDAzIDw8IFdPUkRfQ09VTlRT X1BPUykpOworfQorCitzdGF0aWMgdTE2IG1kZmxkX2RzaV9kcGlfdG9fYnl0ZV9jbG9ja19jb3Vu dChpbnQgcGl4ZWxfY2xvY2tfY291bnQsCisJCQkJCQlpbnQgbnVtX2xhbmUsIGludCBicHApCit7 CisJcmV0dXJuICh1MTYpKChwaXhlbF9jbG9ja19jb3VudCAqIGJwcCkgLyAobnVtX2xhbmUgKiA4 KSk7Cit9CisKKy8qCisgKiBDYWxjdWxhdGUgdGhlIGRwaSB0aW1lIGJhc2luZyBvbiBhIGdpdmVu IGRybSBtb2RlIEBtb2RlCisgKiByZXR1cm4gMCBvbiBzdWNjZXNzLgorICogRklYTUU6IEkgd2Fz IHVzaW5nIHByb3Bvc2VkIG1vZGUgdmFsdWUgZm9yIGNhbGN1bGF0aW9uLCBtYXkgbmVlZCB0bwor ICogdXNlIGNydGMgbW9kZSB2YWx1ZXMgbGF0ZXIKKyAqLworaW50IG1kZmxkX2RzaV9kcGlfdGlt aW5nX2NhbGN1bGF0aW9uKHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJCXN0cnVj dCBtZGZsZF9kc2lfZHBpX3RpbWluZyAqZHBpX3RpbWluZywKKwkJCQlpbnQgbnVtX2xhbmUsIGlu dCBicHApCit7CisJaW50IHBjbGtfaHN5bmMsIHBjbGtfaGZwLCBwY2xrX2hicCwgcGNsa19oYWN0 aXZlOworCWludCBwY2xrX3ZzeW5jLCBwY2xrX3ZmcCwgcGNsa192YnAsIHBjbGtfdmFjdGl2ZTsK KworCXBjbGtfaGFjdGl2ZSA9IG1vZGUtPmhkaXNwbGF5OworCXBjbGtfaGZwID0gbW9kZS0+aHN5 bmNfc3RhcnQgLSBtb2RlLT5oZGlzcGxheTsKKwlwY2xrX2hzeW5jID0gbW9kZS0+aHN5bmNfZW5k IC0gbW9kZS0+aHN5bmNfc3RhcnQ7CisJcGNsa19oYnAgPSBtb2RlLT5odG90YWwgLSBtb2RlLT5o c3luY19lbmQ7CisKKwlwY2xrX3ZhY3RpdmUgPSBtb2RlLT52ZGlzcGxheTsKKwlwY2xrX3ZmcCA9 IG1vZGUtPnZzeW5jX3N0YXJ0IC0gbW9kZS0+dmRpc3BsYXk7CisJcGNsa192c3luYyA9IG1vZGUt PnZzeW5jX2VuZCAtIG1vZGUtPnZzeW5jX3N0YXJ0OworCXBjbGtfdmJwID0gbW9kZS0+dnRvdGFs IC0gbW9kZS0+dnN5bmNfZW5kOworCisJLyoKKwkgKiBieXRlIGNsb2NrIGNvdW50cyB3ZXJlIGNh bGN1bGF0ZWQgYnkgZm9sbG93aW5nIGZvcm11bGEKKwkgKiBiY2xvY2tfY291bnQgPSBwY2xrX2Nv dW50ICogYnBwIC8gbnVtX2xhbmUgLyA4CisJICovCisJZHBpX3RpbWluZy0+aHN5bmNfY291bnQg PSBtZGZsZF9kc2lfZHBpX3RvX2J5dGVfY2xvY2tfY291bnQoCisJCQkJCQlwY2xrX2hzeW5jLCBu dW1fbGFuZSwgYnBwKTsKKwlkcGlfdGltaW5nLT5oYnBfY291bnQgPSBtZGZsZF9kc2lfZHBpX3Rv X2J5dGVfY2xvY2tfY291bnQoCisJCQkJCQlwY2xrX2hicCwgbnVtX2xhbmUsIGJwcCk7CisJZHBp X3RpbWluZy0+aGZwX2NvdW50ID0gbWRmbGRfZHNpX2RwaV90b19ieXRlX2Nsb2NrX2NvdW50KAor CQkJCQkJcGNsa19oZnAsIG51bV9sYW5lLCBicHApOworCWRwaV90aW1pbmctPmhhY3RpdmVfY291 bnQgPSBtZGZsZF9kc2lfZHBpX3RvX2J5dGVfY2xvY2tfY291bnQoCisJCQkJCQlwY2xrX2hhY3Rp dmUsIG51bV9sYW5lLCBicHApOworCWRwaV90aW1pbmctPnZzeW5jX2NvdW50ID0gbWRmbGRfZHNp X2RwaV90b19ieXRlX2Nsb2NrX2NvdW50KAorCQkJCQkJcGNsa192c3luYywgbnVtX2xhbmUsIGJw cCk7CisJZHBpX3RpbWluZy0+dmJwX2NvdW50ID0gbWRmbGRfZHNpX2RwaV90b19ieXRlX2Nsb2Nr X2NvdW50KAorCQkJCQkJcGNsa192YnAsIG51bV9sYW5lLCBicHApOworCWRwaV90aW1pbmctPnZm cF9jb3VudCA9IG1kZmxkX2RzaV9kcGlfdG9fYnl0ZV9jbG9ja19jb3VudCgKKwkJCQkJCXBjbGtf dmZwLCBudW1fbGFuZSwgYnBwKTsKKworCXJldHVybiAwOworfQorCit2b2lkIG1kZmxkX2RzaV9k cGlfY29udHJvbGxlcl9pbml0KHN0cnVjdCBtZGZsZF9kc2lfY29uZmlnICpkc2lfY29uZmlnLAor CQkJCQkJCQlpbnQgcGlwZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZHNpX2NvbmZp Zy0+ZGV2OworCWludCBsYW5lX2NvdW50ID0gZHNpX2NvbmZpZy0+bGFuZV9jb3VudDsKKwlzdHJ1 Y3QgbWRmbGRfZHNpX2RwaV90aW1pbmcgZHBpX3RpbWluZzsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSAqbW9kZSA9IGRzaV9jb25maWctPm1vZGU7CisJdTMyIHZhbDsKKworCS8qdW4tcmVhZHkg ZGV2aWNlKi8KKwlSRUdfRkxEX01PRChNSVBJX0RFVklDRV9SRUFEWV9SRUcocGlwZSksIDAsIDAs IDApOworCisJLyppbml0IGRzaSBhZGFwdGVyIGJlZm9yZSBraWNraW5nIG9mZiovCisJUkVHX1dS SVRFKE1JUElfQ1RSTF9SRUcocGlwZSksIDB4MDAwMDAwMTgpOworCisJLyplbmFibGUgYWxsIGlu dGVycnVwdHMqLworCVJFR19XUklURShNSVBJX0lOVFJfRU5fUkVHKHBpcGUpLCAweGZmZmZmZmZm KTsKKworCS8qc2V0IHVwIGZ1bmNfcHJnKi8KKwl2YWwgPSBsYW5lX2NvdW50OworCXZhbCB8PSBk c2lfY29uZmlnLT5jaGFubmVsX251bSA8PCBEU0lfRFBJX1ZJUlRfQ0hBTk5FTF9PRkZTRVQ7CisK Kwlzd2l0Y2ggKGRzaV9jb25maWctPmJwcCkgeworCWNhc2UgMTY6CisJCXZhbCB8PSBEU0lfRFBJ X0NPTE9SX0ZPUk1BVF9SR0I1NjU7CisJCWJyZWFrOworCWNhc2UgMTg6CisJCXZhbCB8PSBEU0lf RFBJX0NPTE9SX0ZPUk1BVF9SR0I2NjY7CisJCWJyZWFrOworCWNhc2UgMjQ6CisJCXZhbCB8PSBE U0lfRFBJX0NPTE9SX0ZPUk1BVF9SR0I4ODg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURSTV9F UlJPUigidW5zdXBwb3J0ZWQgY29sb3IgZm9ybWF0LCBicHAgPSAlZFxuIiwKKwkJCQkJCQlkc2lf Y29uZmlnLT5icHApOworCX0KKwlSRUdfV1JJVEUoTUlQSV9EU0lfRlVOQ19QUkdfUkVHKHBpcGUp LCB2YWwpOworCisJUkVHX1dSSVRFKE1JUElfSFNfVFhfVElNRU9VVF9SRUcocGlwZSksCisJCQko bW9kZS0+dnRvdGFsICogbW9kZS0+aHRvdGFsICogZHNpX2NvbmZpZy0+YnBwIC8KKwkJCQkoOCAq IGxhbmVfY291bnQpKSAmIERTSV9IU19UWF9USU1FT1VUX01BU0spOworCVJFR19XUklURShNSVBJ X0xQX1JYX1RJTUVPVVRfUkVHKHBpcGUpLAorCQkJCTB4ZmZmZiAmIERTSV9MUF9SWF9USU1FT1VU X01BU0spOworCisJLyptYXggdmFsdWU6IDIwIGNsb2NrIGN5Y2xlcyBvZiB0eGNsa2VzYyovCisJ UkVHX1dSSVRFKE1JUElfVFVSTl9BUk9VTkRfVElNRU9VVF9SRUcocGlwZSksCisJCQkJMHgxNCAm IERTSV9UVVJOX0FST1VORF9USU1FT1VUX01BU0spOworCisJLyptaW4gMjEgdHhjbGtlc2MsIG1h eDogZmZmZmgqLworCVJFR19XUklURShNSVBJX0RFVklDRV9SRVNFVF9USU1FUl9SRUcocGlwZSks CisJCQkJMHhmZmZmICYgRFNJX1JFU0VUX1RJTUVSX01BU0spOworCisJUkVHX1dSSVRFKE1JUElf RFBJX1JFU09MVVRJT05fUkVHKHBpcGUpLAorCQkJCW1vZGUtPnZkaXNwbGF5IDw8IDE2IHwgbW9k ZS0+aGRpc3BsYXkpOworCisJLypzZXQgRFBJIHRpbWluZyByZWdpc3RlcnMqLworCW1kZmxkX2Rz aV9kcGlfdGltaW5nX2NhbGN1bGF0aW9uKG1vZGUsICZkcGlfdGltaW5nLAorCQkJCWRzaV9jb25m aWctPmxhbmVfY291bnQsIGRzaV9jb25maWctPmJwcCk7CisKKwlSRUdfV1JJVEUoTUlQSV9IU1lO Q19DT1VOVF9SRUcocGlwZSksCisJCQlkcGlfdGltaW5nLmhzeW5jX2NvdW50ICYgRFNJX0RQSV9U SU1JTkdfTUFTSyk7CisJUkVHX1dSSVRFKE1JUElfSEJQX0NPVU5UX1JFRyhwaXBlKSwKKwkJCWRw aV90aW1pbmcuaGJwX2NvdW50ICYgRFNJX0RQSV9USU1JTkdfTUFTSyk7CisJUkVHX1dSSVRFKE1J UElfSEZQX0NPVU5UX1JFRyhwaXBlKSwKKwkJCWRwaV90aW1pbmcuaGZwX2NvdW50ICYgRFNJX0RQ SV9USU1JTkdfTUFTSyk7CisJUkVHX1dSSVRFKE1JUElfSEFDVElWRV9DT1VOVF9SRUcocGlwZSks CisJCQlkcGlfdGltaW5nLmhhY3RpdmVfY291bnQgJiBEU0lfRFBJX1RJTUlOR19NQVNLKTsKKwlS RUdfV1JJVEUoTUlQSV9WU1lOQ19DT1VOVF9SRUcocGlwZSksCisJCQlkcGlfdGltaW5nLnZzeW5j X2NvdW50ICYgRFNJX0RQSV9USU1JTkdfTUFTSyk7CisJUkVHX1dSSVRFKE1JUElfVkJQX0NPVU5U X1JFRyhwaXBlKSwKKwkJCWRwaV90aW1pbmcudmJwX2NvdW50ICYgRFNJX0RQSV9USU1JTkdfTUFT Syk7CisJUkVHX1dSSVRFKE1JUElfVkZQX0NPVU5UX1JFRyhwaXBlKSwKKwkJCWRwaV90aW1pbmcu dmZwX2NvdW50ICYgRFNJX0RQSV9USU1JTkdfTUFTSyk7CisKKwlSRUdfV1JJVEUoTUlQSV9ISUdI X0xPV19TV0lUQ0hfQ09VTlRfUkVHKHBpcGUpLCAweDQ2KTsKKworCS8qbWluOiA3ZDAgbWF4OiA0 ZTIwKi8KKwlSRUdfV1JJVEUoTUlQSV9JTklUX0NPVU5UX1JFRyhwaXBlKSwgMHgwMDAwMDdkMCk7 CisKKwkvKnNldCB1cCB2aWRlbyBtb2RlKi8KKwl2YWwgPSBkc2lfY29uZmlnLT52aWRlb19tb2Rl IHwgRFNJX0RQSV9DT01QTEVURV9MQVNUX0xJTkU7CisJUkVHX1dSSVRFKE1JUElfVklERU9fTU9E RV9GT1JNQVRfUkVHKHBpcGUpLCB2YWwpOworCisJUkVHX1dSSVRFKE1JUElfRU9UX0RJU0FCTEVf UkVHKHBpcGUpLCAweDAwMDAwMDAwKTsKKworCVJFR19XUklURShNSVBJX0xQX0JZVEVDTEtfUkVH KHBpcGUpLCAweDAwMDAwMDA0KTsKKworCS8qVE9ETzogZmlndXJlIG91dCBob3cgdG8gc2V0dXAg dGhlc2UgcmVnaXN0ZXJzKi8KKwlpZiAobWRmbGRfZ2V0X3BhbmVsX3R5cGUoZGV2LCBwaXBlKSA9 PSBUQzM1ODc2WCkKKwkJUkVHX1dSSVRFKE1JUElfRFBIWV9QQVJBTV9SRUcocGlwZSksIDB4MkEw YzYwMDgpOworCWVsc2UKKwkJUkVHX1dSSVRFKE1JUElfRFBIWV9QQVJBTV9SRUcocGlwZSksIDB4 MTUwYzM0MDgpOworCisJUkVHX1dSSVRFKE1JUElfQ0xLX0xBTkVfU1dJVENIX1RJTUVfQ05UX1JF RyhwaXBlKSwgKDB4YSA8PCAxNikgfCAweDE0KTsKKworCWlmIChtZGZsZF9nZXRfcGFuZWxfdHlw ZShkZXYsIHBpcGUpID09IFRDMzU4NzZYKQorCQl0YzM1ODc2eF9zZXRfYnJpZGdlX3Jlc2V0X3N0 YXRlKGRldiwgMCk7ICAvKlB1bGwgSGlnaCBSZXNldCAqLworCisJLypzZXQgZGV2aWNlIHJlYWR5 Ki8KKwlSRUdfRkxEX01PRChNSVBJX0RFVklDRV9SRUFEWV9SRUcocGlwZSksIDEsIDAsIDApOwor fQorCit2b2lkIG1kZmxkX2RzaV9kcGlfdHVybl9vbihzdHJ1Y3QgbWRmbGRfZHNpX2RwaV9vdXRw dXQgKm91dHB1dCwgaW50IHBpcGUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG91dHB1 dC0+ZGV2OworCisJLyogY2xlYXIgc3BlY2lhbCBwYWNrZXQgc2VudCBiaXQgKi8KKwlpZiAoUkVH X1JFQUQoTUlQSV9JTlRSX1NUQVRfUkVHKHBpcGUpKSAmIERTSV9JTlRSX1NUQVRFX1NQTF9QS0df U0VOVCkKKwkJUkVHX1dSSVRFKE1JUElfSU5UUl9TVEFUX1JFRyhwaXBlKSwKKwkJCQkJRFNJX0lO VFJfU1RBVEVfU1BMX1BLR19TRU5UKTsKKworCS8qc2VuZCB0dXJuIG9uIHBhY2thZ2UqLworCVJF R19XUklURShNSVBJX0RQSV9DT05UUk9MX1JFRyhwaXBlKSwgRFNJX0RQSV9DVFJMX0hTX1RVUk5f T04pOworCisJLyp3YWl0IGZvciBTUExfUEtHX1NFTlQgaW50ZXJydXB0Ki8KKwltZGZsZF93YWl0 X2Zvcl9TUExfUEtHX1NFTlQoZGV2LCBwaXBlKTsKKworCWlmIChSRUdfUkVBRChNSVBJX0lOVFJf U1RBVF9SRUcocGlwZSkpICYgRFNJX0lOVFJfU1RBVEVfU1BMX1BLR19TRU5UKQorCQlSRUdfV1JJ VEUoTUlQSV9JTlRSX1NUQVRfUkVHKHBpcGUpLAorCQkJCQlEU0lfSU5UUl9TVEFURV9TUExfUEtH X1NFTlQpOworCisJb3V0cHV0LT5wYW5lbF9vbiA9IDE7CisKKwkvKiBGSVhNRSB0aGUgZm9sbG93 aW5nIGlzIGRpc2FibGVkIHRvIFdBIHRoZSBYIHNsb3cgc3RhcnQgaXNzdWUKKwkgICBmb3IgVE1E IHBhbmVsCisJaWYgKHBpcGUgPT0gMikKKwkJZGV2X3ByaXYtPmRwaV9wYW5lbF9vbjIgPSB0cnVl OworCWVsc2UgaWYgKHBpcGUgPT0gMCkKKwkJZGV2X3ByaXYtPmRwaV9wYW5lbF9vbiA9IHRydWU7 ICovCit9CisKK3N0YXRpYyB2b2lkIG1kZmxkX2RzaV9kcGlfc2h1dF9kb3duKHN0cnVjdCBtZGZs ZF9kc2lfZHBpX291dHB1dCAqb3V0cHV0LAorCQkJCQkJCQlpbnQgcGlwZSkKK3sKKwlzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2ID0gb3V0cHV0LT5kZXY7CisKKwkvKmlmIG91dHB1dCBpcyBvbiwgb3Ig bW9kZSBzZXR0aW5nIGRpZG4ndCBoYXBwZW4sIGlnbm9yZSB0aGlzKi8KKwlpZiAoKCFvdXRwdXQt PnBhbmVsX29uKSB8fCBvdXRwdXQtPmZpcnN0X2Jvb3QpIHsKKwkJb3V0cHV0LT5maXJzdF9ib290 ID0gMDsKKwkJcmV0dXJuOworCX0KKworCS8qIFdhaXQgZm9yIGRwaSBmaWZvIHRvIGVtcHR5ICov CisJbWRmbGRfd2FpdF9mb3JfRFBJX0NUUkxfRklGTyhkZXYsIHBpcGUpOworCisJLyogQ2xlYXIg dGhlIHNwZWNpYWwgcGFja2V0IGludGVycnVwdCBiaXQgaWYgc2V0ICovCisJaWYgKFJFR19SRUFE KE1JUElfSU5UUl9TVEFUX1JFRyhwaXBlKSkgJiBEU0lfSU5UUl9TVEFURV9TUExfUEtHX1NFTlQp CisJCVJFR19XUklURShNSVBJX0lOVFJfU1RBVF9SRUcocGlwZSksCisJCQkJCURTSV9JTlRSX1NU QVRFX1NQTF9QS0dfU0VOVCk7CisKKwlpZiAoUkVHX1JFQUQoTUlQSV9EUElfQ09OVFJPTF9SRUco cGlwZSkpID09IERTSV9EUElfQ1RSTF9IU19TSFVURE9XTikKKwkJZ290byBzaHV0ZG93bl9vdXQ7 CisKKwlSRUdfV1JJVEUoTUlQSV9EUElfQ09OVFJPTF9SRUcocGlwZSksIERTSV9EUElfQ1RSTF9I U19TSFVURE9XTik7CisKK3NodXRkb3duX291dDoKKwlvdXRwdXQtPnBhbmVsX29uID0gMDsKKwlv dXRwdXQtPmZpcnN0X2Jvb3QgPSAwOworCisJLyogRklYTUUgdGhlIGZvbGxvd2luZyBpcyBkaXNh YmxlZCB0byBXQSB0aGUgWCBzbG93IHN0YXJ0IGlzc3VlCisJICAgZm9yIFRNRCBwYW5lbAorCWlm IChwaXBlID09IDIpCisJCWRldl9wcml2LT5kcGlfcGFuZWxfb24yID0gZmFsc2U7CisJZWxzZSBp ZiAocGlwZSA9PSAwKQorCQlkZXZfcHJpdi0+ZHBpX3BhbmVsX29uID0gZmFsc2U7CSAqLworfQor CitzdGF0aWMgdm9pZCBtZGZsZF9kc2lfZHBpX3NldF9wb3dlcihzdHJ1Y3QgZHJtX2VuY29kZXIg KmVuY29kZXIsIGJvb2wgb24pCit7CisJc3RydWN0IG1kZmxkX2RzaV9lbmNvZGVyICpkc2lfZW5j b2RlciA9IG1kZmxkX2RzaV9lbmNvZGVyKGVuY29kZXIpOworCXN0cnVjdCBtZGZsZF9kc2lfZHBp X291dHB1dCAqZHBpX291dHB1dCA9CisJCQkJTURGTERfRFNJX0RQSV9PVVRQVVQoZHNpX2VuY29k ZXIpOworCXN0cnVjdCBtZGZsZF9kc2lfY29uZmlnICpkc2lfY29uZmlnID0KKwkJCQltZGZsZF9k c2lfZW5jb2Rlcl9nZXRfY29uZmlnKGRzaV9lbmNvZGVyKTsKKwlpbnQgcGlwZSA9IG1kZmxkX2Rz aV9lbmNvZGVyX2dldF9waXBlKGRzaV9lbmNvZGVyKTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 ID0gZHNpX2NvbmZpZy0+ZGV2OworCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0g ZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MzIgcGlwZWNvbmZfcmVnID0gUElQRUFDT05GOworCisJaWYg KHBpcGUpCisJCXBpcGVjb25mX3JlZyA9IFBJUEVDQ09ORjsKKworCS8qc3RhcnQgdXAgZGlzcGxh eSBpc2xhbmQgaWYgaXQgd2FzIHNodXRkb3duKi8KKwlpZiAoIWdtYV9wb3dlcl9iZWdpbihkZXYs IHRydWUpKQorCQlyZXR1cm47CisKKwlpZiAob24pIHsKKwkJaWYgKG1kZmxkX2dldF9wYW5lbF90 eXBlKGRldiwgcGlwZSkgPT0gVE1EX1ZJRCkKKwkJCW1kZmxkX2RzaV9kcGlfdHVybl9vbihkcGlf b3V0cHV0LCBwaXBlKTsKKwkJZWxzZSBpZiAobWRmbGRfZ2V0X3BhbmVsX3R5cGUoZGV2LCBwaXBl KSA9PSBUQzM1ODc2WCkKKwkJCW1kZmxkX2RzaV9jb25maWd1cmVfdXAoZHNpX2VuY29kZXIsIHBp cGUpOworCQllbHNlIHsKKwkJCS8qZW5hYmxlIG1pcGkgcG9ydCovCisJCQlSRUdfV1JJVEUoTUlQ SV9QT1JUX0NPTlRST0wocGlwZSksCisJCQkJUkVHX1JFQUQoTUlQSV9QT1JUX0NPTlRST0wocGlw ZSkpIHwgQklUKDMxKSk7CisJCQlSRUdfUkVBRChNSVBJX1BPUlRfQ09OVFJPTChwaXBlKSk7CisK KwkJCW1kZmxkX2RzaV9kcGlfdHVybl9vbihkcGlfb3V0cHV0LCBwaXBlKTsKKwkJCW1kZmxkX2Rz aV90cG9faWNfaW5pdChkc2lfY29uZmlnLCBwaXBlKTsKKwkJfQorCQlkZXZfcHJpdi0+ZHBpX3Bh bmVsX29uW3BpcGVdID0gdHJ1ZTsKKwl9IGVsc2UgeworCQlpZiAobWRmbGRfZ2V0X3BhbmVsX3R5 cGUoZGV2LCBwaXBlKSA9PSBUTURfVklEKQorCQkJbWRmbGRfZHNpX2RwaV9zaHV0X2Rvd24oZHBp X291dHB1dCwgcGlwZSk7CisJCWVsc2UgaWYgKG1kZmxkX2dldF9wYW5lbF90eXBlKGRldiwgcGlw ZSkgPT0gVEMzNTg3NlgpCisJCQltZGZsZF9kc2lfY29uZmlndXJlX2Rvd24oZHNpX2VuY29kZXIs IHBpcGUpOworCQllbHNlIHsKKwkJCW1kZmxkX2RzaV9kcGlfc2h1dF9kb3duKGRwaV9vdXRwdXQs IHBpcGUpOworCisJCQkvKmRpc2FibGUgbWlwaSBwb3J0Ki8KKwkJCVJFR19XUklURShNSVBJX1BP UlRfQ09OVFJPTChwaXBlKSwKKwkJCQlSRUdfUkVBRChNSVBJX1BPUlRfQ09OVFJPTChwaXBlKSkg JiB+QklUKDMxKSk7CisJCQlSRUdfUkVBRChNSVBJX1BPUlRfQ09OVFJPTChwaXBlKSk7CisJCX0K KwkJZGV2X3ByaXYtPmRwaV9wYW5lbF9vbltwaXBlXSA9IGZhbHNlOworCX0KKwlnbWFfcG93ZXJf ZW5kKGRldik7Cit9CisKK3ZvaWQgbWRmbGRfZHNpX2RwaV9kcG1zKHN0cnVjdCBkcm1fZW5jb2Rl ciAqZW5jb2RlciwgaW50IG1vZGUpCit7CisJbWRmbGRfZHNpX2RwaV9zZXRfcG93ZXIoZW5jb2Rl ciwgbW9kZSA9PSBEUk1fTU9ERV9EUE1TX09OKTsKK30KKworYm9vbCBtZGZsZF9kc2lfZHBpX21v ZGVfZml4dXAoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCSAgICAgc3RydWN0IGRy bV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq YWRqdXN0ZWRfbW9kZSkKK3sKKwlzdHJ1Y3QgbWRmbGRfZHNpX2VuY29kZXIgKmRzaV9lbmNvZGVy ID0gbWRmbGRfZHNpX2VuY29kZXIoZW5jb2Rlcik7CisJc3RydWN0IG1kZmxkX2RzaV9jb25maWcg KmRzaV9jb25maWcgPQorCQkJCW1kZmxkX2RzaV9lbmNvZGVyX2dldF9jb25maWcoZHNpX2VuY29k ZXIpOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpmaXhlZF9tb2RlID0gZHNpX2NvbmZpZy0+ Zml4ZWRfbW9kZTsKKworCWlmIChmaXhlZF9tb2RlKSB7CisJCWFkanVzdGVkX21vZGUtPmhkaXNw bGF5ID0gZml4ZWRfbW9kZS0+aGRpc3BsYXk7CisJCWFkanVzdGVkX21vZGUtPmhzeW5jX3N0YXJ0 ID0gZml4ZWRfbW9kZS0+aHN5bmNfc3RhcnQ7CisJCWFkanVzdGVkX21vZGUtPmhzeW5jX2VuZCA9 IGZpeGVkX21vZGUtPmhzeW5jX2VuZDsKKwkJYWRqdXN0ZWRfbW9kZS0+aHRvdGFsID0gZml4ZWRf bW9kZS0+aHRvdGFsOworCQlhZGp1c3RlZF9tb2RlLT52ZGlzcGxheSA9IGZpeGVkX21vZGUtPnZk aXNwbGF5OworCQlhZGp1c3RlZF9tb2RlLT52c3luY19zdGFydCA9IGZpeGVkX21vZGUtPnZzeW5j X3N0YXJ0OworCQlhZGp1c3RlZF9tb2RlLT52c3luY19lbmQgPSBmaXhlZF9tb2RlLT52c3luY19l bmQ7CisJCWFkanVzdGVkX21vZGUtPnZ0b3RhbCA9IGZpeGVkX21vZGUtPnZ0b3RhbDsKKwkJYWRq dXN0ZWRfbW9kZS0+Y2xvY2sgPSBmaXhlZF9tb2RlLT5jbG9jazsKKwkJZHJtX21vZGVfc2V0X2Ny dGNpbmZvKGFkanVzdGVkX21vZGUsIENSVENfSU5URVJMQUNFX0hBTFZFX1YpOworCX0KKwlyZXR1 cm4gdHJ1ZTsKK30KKwordm9pZCBtZGZsZF9kc2lfZHBpX3ByZXBhcmUoc3RydWN0IGRybV9lbmNv ZGVyICplbmNvZGVyKQoreworCW1kZmxkX2RzaV9kcGlfc2V0X3Bvd2VyKGVuY29kZXIsIGZhbHNl KTsKK30KKwordm9pZCBtZGZsZF9kc2lfZHBpX2NvbW1pdChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVu Y29kZXIpCit7CisJbWRmbGRfZHNpX2RwaV9zZXRfcG93ZXIoZW5jb2RlciwgdHJ1ZSk7Cit9CisK Ky8qIEZvciBUQzM1ODc2WCAqLworLyogVGhpcyBmdW5jdGlvbmFsaXR5IHdhcyBpbXBsZW1lbnRl ZCBpbiBGVyBpbiBpQ0RLICovCisvKiBCdXQgcmVtb3ZlZCBpbiBEVjAgYW5kIGxhdGVyLiBTbyBu ZWVkIHRvIGFkZCBoZXJlLiAqLworc3RhdGljIHZvaWQgbWlwaV9zZXRfcHJvcGVydGllcyhzdHJ1 Y3QgbWRmbGRfZHNpX2NvbmZpZyAqZHNpX2NvbmZpZywgaW50IHBpcGUpCit7CisJc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9IGRzaV9jb25maWctPmRldjsKKworCVJFR19XUklURShNSVBJX0NUUkxf UkVHKHBpcGUpLCAweDAwMDAwMDE4KTsKKwlSRUdfV1JJVEUoTUlQSV9JTlRSX0VOX1JFRyhwaXBl KSwgMHhmZmZmZmZmZik7CisJUkVHX1dSSVRFKE1JUElfSFNfVFhfVElNRU9VVF9SRUcocGlwZSks IDB4ZmZmZmZmKTsKKwlSRUdfV1JJVEUoTUlQSV9MUF9SWF9USU1FT1VUX1JFRyhwaXBlKSwgMHhm ZmZmZmYpOworCVJFR19XUklURShNSVBJX1RVUk5fQVJPVU5EX1RJTUVPVVRfUkVHKHBpcGUpLCAw eDE0KTsKKwlSRUdfV1JJVEUoTUlQSV9ERVZJQ0VfUkVTRVRfVElNRVJfUkVHKHBpcGUpLCAweGZm KTsKKwlSRUdfV1JJVEUoTUlQSV9ISUdIX0xPV19TV0lUQ0hfQ09VTlRfUkVHKHBpcGUpLCAweDI1 KTsKKwlSRUdfV1JJVEUoTUlQSV9JTklUX0NPVU5UX1JFRyhwaXBlKSwgMHhmMCk7CisJUkVHX1dS SVRFKE1JUElfRU9UX0RJU0FCTEVfUkVHKHBpcGUpLCAweDAwMDAwMDAwKTsKKwlSRUdfV1JJVEUo TUlQSV9MUF9CWVRFQ0xLX1JFRyhwaXBlKSwgMHgwMDAwMDAwNCk7CisJUkVHX1dSSVRFKE1JUElf REJJX0JXX0NUUkxfUkVHKHBpcGUpLCAweDAwMDAwODIwKTsKKwlSRUdfV1JJVEUoTUlQSV9DTEtf TEFORV9TV0lUQ0hfVElNRV9DTlRfUkVHKHBpcGUpLCAoMHhhIDw8IDE2KSB8IDB4MTQpOworfQor CitzdGF0aWMgdm9pZCBtZGZsZF9taXBpX3NldF92aWRlb190aW1pbmcoc3RydWN0IG1kZmxkX2Rz aV9jb25maWcgKmRzaV9jb25maWcsCisJCQkJCWludCBwaXBlKQoreworCXN0cnVjdCBkcm1fZGV2 aWNlICpkZXYgPSBkc2lfY29uZmlnLT5kZXY7CisJc3RydWN0IG1kZmxkX2RzaV9kcGlfdGltaW5n IGRwaV90aW1pbmc7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSBkc2lfY29uZmln LT5tb2RlOworCisJbWRmbGRfZHNpX2RwaV90aW1pbmdfY2FsY3VsYXRpb24obW9kZSwgJmRwaV90 aW1pbmcsCisJCQkJCWRzaV9jb25maWctPmxhbmVfY291bnQsCisJCQkJCWRzaV9jb25maWctPmJw cCk7CisKKwlSRUdfV1JJVEUoTUlQSV9EUElfUkVTT0xVVElPTl9SRUcocGlwZSksCisJCW1vZGUt PnZkaXNwbGF5IDw8IDE2IHwgbW9kZS0+aGRpc3BsYXkpOworCVJFR19XUklURShNSVBJX0hTWU5D X0NPVU5UX1JFRyhwaXBlKSwKKwkJZHBpX3RpbWluZy5oc3luY19jb3VudCAmIERTSV9EUElfVElN SU5HX01BU0spOworCVJFR19XUklURShNSVBJX0hCUF9DT1VOVF9SRUcocGlwZSksCisJCWRwaV90 aW1pbmcuaGJwX2NvdW50ICYgRFNJX0RQSV9USU1JTkdfTUFTSyk7CisJUkVHX1dSSVRFKE1JUElf SEZQX0NPVU5UX1JFRyhwaXBlKSwKKwkJZHBpX3RpbWluZy5oZnBfY291bnQgJiBEU0lfRFBJX1RJ TUlOR19NQVNLKTsKKwlSRUdfV1JJVEUoTUlQSV9IQUNUSVZFX0NPVU5UX1JFRyhwaXBlKSwKKwkJ ZHBpX3RpbWluZy5oYWN0aXZlX2NvdW50ICYgRFNJX0RQSV9USU1JTkdfTUFTSyk7CisJUkVHX1dS SVRFKE1JUElfVlNZTkNfQ09VTlRfUkVHKHBpcGUpLAorCQlkcGlfdGltaW5nLnZzeW5jX2NvdW50 ICYgRFNJX0RQSV9USU1JTkdfTUFTSyk7CisJUkVHX1dSSVRFKE1JUElfVkJQX0NPVU5UX1JFRyhw aXBlKSwKKwkJZHBpX3RpbWluZy52YnBfY291bnQgJiBEU0lfRFBJX1RJTUlOR19NQVNLKTsKKwlS RUdfV1JJVEUoTUlQSV9WRlBfQ09VTlRfUkVHKHBpcGUpLAorCQlkcGlfdGltaW5nLnZmcF9jb3Vu dCAmIERTSV9EUElfVElNSU5HX01BU0spOworfQorCitzdGF0aWMgdm9pZCBtZGZsZF9taXBpX2Nv bmZpZyhzdHJ1Y3QgbWRmbGRfZHNpX2NvbmZpZyAqZHNpX2NvbmZpZywgaW50IHBpcGUpCit7CisJ c3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRzaV9jb25maWctPmRldjsKKwlpbnQgbGFuZV9jb3Vu dCA9IGRzaV9jb25maWctPmxhbmVfY291bnQ7CisKKwlpZiAocGlwZSkgeworCQlSRUdfV1JJVEUo TUlQSV9QT1JUX0NPTlRST0woMCksIDB4MDAwMDAwMDIpOworCQlSRUdfV1JJVEUoTUlQSV9QT1JU X0NPTlRST0woMiksIDB4ODAwMDAwMDApOworCX0gZWxzZSB7CisJCVJFR19XUklURShNSVBJX1BP UlRfQ09OVFJPTCgwKSwgMHg4MDAxMDAwMCk7CisJCVJFR19XUklURShNSVBJX1BPUlRfQ09OVFJP TCgyKSwgMHgwMCk7CisJfQorCisJUkVHX1dSSVRFKE1JUElfRFBIWV9QQVJBTV9SRUcocGlwZSks IDB4MTUwQTYwMEYpOworCVJFR19XUklURShNSVBJX1ZJREVPX01PREVfRk9STUFUX1JFRyhwaXBl KSwgMHgwMDAwMDAwRik7CisKKwkvKiBsYW5lX2NvdW50ID0gMyAqLworCVJFR19XUklURShNSVBJ X0RTSV9GVU5DX1BSR19SRUcocGlwZSksIDB4MDAwMDAyMDAgfCBsYW5lX2NvdW50KTsKKworCW1k ZmxkX21pcGlfc2V0X3ZpZGVvX3RpbWluZyhkc2lfY29uZmlnLCBwaXBlKTsKK30KKworc3RhdGlj IHZvaWQgbWRmbGRfc2V0X3BpcGVfdGltaW5nKHN0cnVjdCBtZGZsZF9kc2lfY29uZmlnICpkc2lf Y29uZmlnLCBpbnQgcGlwZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZHNpX2NvbmZp Zy0+ZGV2OworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0gZHNpX2NvbmZpZy0+bW9k ZTsKKworCVJFR19XUklURShIVE9UQUxfQSwgKChtb2RlLT5odG90YWwgLSAxKSA8PCAxNikgfCAo bW9kZS0+aGRpc3BsYXkgLSAxKSk7CisJUkVHX1dSSVRFKEhCTEFOS19BLCAoKG1vZGUtPmh0b3Rh bCAtIDEpIDw8IDE2KSB8IChtb2RlLT5oZGlzcGxheSAtIDEpKTsKKwlSRUdfV1JJVEUoSFNZTkNf QSwKKwkJKChtb2RlLT5oc3luY19lbmQgLSAxKSA8PCAxNikgfCAobW9kZS0+aHN5bmNfc3RhcnQg LSAxKSk7CisKKwlSRUdfV1JJVEUoVlRPVEFMX0EsICgobW9kZS0+dnRvdGFsIC0gMSkgPDwgMTYp IHwgKG1vZGUtPnZkaXNwbGF5IC0gMSkpOworCVJFR19XUklURShWQkxBTktfQSwgKChtb2RlLT52 dG90YWwgLSAxKSA8PCAxNikgfCAobW9kZS0+dmRpc3BsYXkgLSAxKSk7CisJUkVHX1dSSVRFKFZT WU5DX0EsCisJCSgobW9kZS0+dnN5bmNfZW5kIC0gMSkgPDwgMTYpIHwgKG1vZGUtPnZzeW5jX3N0 YXJ0IC0gMSkpOworCisJUkVHX1dSSVRFKFBJUEVBU1JDLAorCQkoKG1vZGUtPmhkaXNwbGF5IC0g MSkgPDwgMTYpIHwgKG1vZGUtPnZkaXNwbGF5IC0gMSkpOworfQorLyogRW5kIGZvciBUQzM1ODc2 WCAqLworCit2b2lkIG1kZmxkX2RzaV9kcGlfbW9kZV9zZXQoc3RydWN0IGRybV9lbmNvZGVyICpl bmNvZGVyLAorCQkJCSAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJCSAgIHN0 cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQoreworCXN0cnVjdCBtZGZsZF9k c2lfZW5jb2RlciAqZHNpX2VuY29kZXIgPSBtZGZsZF9kc2lfZW5jb2RlcihlbmNvZGVyKTsKKwlz dHJ1Y3QgbWRmbGRfZHNpX2RwaV9vdXRwdXQgKmRwaV9vdXRwdXQgPQorCQkJCQlNREZMRF9EU0lf RFBJX09VVFBVVChkc2lfZW5jb2Rlcik7CisJc3RydWN0IG1kZmxkX2RzaV9jb25maWcgKmRzaV9j b25maWcgPQorCQkJCW1kZmxkX2RzaV9lbmNvZGVyX2dldF9jb25maWcoZHNpX2VuY29kZXIpOwor CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkc2lfY29uZmlnLT5kZXY7CisJc3RydWN0IGRybV9w c2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCBwaXBlID0gbWRm bGRfZHNpX2VuY29kZXJfZ2V0X3BpcGUoZHNpX2VuY29kZXIpOworCisJdTMyIHBpcGVjb25mX3Jl ZyA9IFBJUEVBQ09ORjsKKwl1MzIgZHNwY250cl9yZWcgPSBEU1BBQ05UUjsKKworCXUzMiBwaXBl Y29uZiA9IGRldl9wcml2LT5waXBlY29uZltwaXBlXTsKKwl1MzIgZHNwY250ciA9IGRldl9wcml2 LT5kc3BjbnRyW3BpcGVdOworCXUzMiBtaXBpID0gTUlQSV9QT1JUX0VOIHwgUEFTU19GUk9NX1NQ SFlfVE9fQUZFIHwgU0VMX0ZMT1BQRURfSFNUWDsKKworCWlmIChwaXBlKSB7CisJCXBpcGVjb25m X3JlZyA9IFBJUEVDQ09ORjsKKwkJZHNwY250cl9yZWcgPSBEU1BDQ05UUjsKKwl9IGVsc2Ugewor CQlpZiAobWRmbGRfZ2V0X3BhbmVsX3R5cGUoZGV2LCBwaXBlKSA9PSBUQzM1ODc2WCkKKwkJCW1p cGkgJj0gKH4weDAzKTsgLyogVXNlIGFsbCBmb3VyIGxhbmVzICovCisJCWVsc2UKKwkJCW1pcGkg fD0gMjsKKwl9CisKKwkvKnN0YXJ0IHVwIGRpc3BsYXkgaXNsYW5kIGlmIGl0IHdhcyBzaHV0ZG93 biovCisJaWYgKCFnbWFfcG93ZXJfYmVnaW4oZGV2LCB0cnVlKSkKKwkJcmV0dXJuOworCisJaWYg KG1kZmxkX2dldF9wYW5lbF90eXBlKGRldiwgcGlwZSkgPT0gVEMzNTg3NlgpIHsKKwkJLyoKKwkJ ICogVGhlIGZvbGxvd2luZyBsb2dpYyBpcyByZXF1aXJlZCB0byByZXNldCB0aGUgYnJpZGdlIGFu ZAorCQkgKiBjb25maWd1cmUuIFRoaXMgYWxzbyBzdGFydHMgdGhlIERTSSBjbG9jayBhdCAyMDBN SHouCisJCSAqLworCQl0YzM1ODc2eF9zZXRfYnJpZGdlX3Jlc2V0X3N0YXRlKGRldiwgMCk7ICAv KlB1bGwgSGlnaCBSZXNldCAqLworCQl0YzM1ODc2eF90b3NoaWJhX2JyaWRnZV9wYW5lbF9vbihk ZXYpOworCQl1ZGVsYXkoMTAwKTsKKwkJLyogTm93IHN0YXJ0IHRoZSBEU0kgY2xvY2sgKi8KKwkJ UkVHX1dSSVRFKE1SU1RfRFBMTF9BLCAweDAwKTsKKwkJUkVHX1dSSVRFKE1SU1RfRlBBMCwgMHhD MSk7CisJCVJFR19XUklURShNUlNUX0RQTExfQSwgMHgwMDgwMDAwMCk7CisJCXVkZWxheSg1MDAp OworCQlSRUdfV1JJVEUoTVJTVF9EUExMX0EsIDB4ODA4MDAwMDApOworCisJCWlmIChSRUdfQklU X1dBSVQocGlwZWNvbmZfcmVnLCAxLCAyOSkpCisJCQlkZXZfZXJyKCZkZXYtPnBkZXYtPmRldiwg IiVzOiBEU0kgUExMIGxvY2sgdGltZW91dFxuIiwKKwkJCQlfX2Z1bmNfXyk7CisKKwkJUkVHX1dS SVRFKE1JUElfRFBIWV9QQVJBTV9SRUcocGlwZSksIDB4MkEwYzYwMDgpOworCisJCW1pcGlfc2V0 X3Byb3BlcnRpZXMoZHNpX2NvbmZpZywgcGlwZSk7CisJCW1kZmxkX21pcGlfY29uZmlnKGRzaV9j b25maWcsIHBpcGUpOworCQltZGZsZF9zZXRfcGlwZV90aW1pbmcoZHNpX2NvbmZpZywgcGlwZSk7 CisKKwkJUkVHX1dSSVRFKERTUEFCQVNFLCAweDAwKTsKKwkJUkVHX1dSSVRFKERTUEFTVFJJREUs IChtb2RlLT5oZGlzcGxheSAqIDQpKTsKKwkJUkVHX1dSSVRFKERTUEFTSVpFLAorCQkJKChtb2Rl LT52ZGlzcGxheSAtIDEpIDw8IDE2KSB8IChtb2RlLT5oZGlzcGxheSAtIDEpKTsKKworCQlSRUdf V1JJVEUoRFNQQUNOVFIsIDB4OTgwMDAwMDApOworCQlSRUdfV1JJVEUoRFNQQVNVUkYsIDB4MDAp OworCisJCVJFR19XUklURShWR0FDTlRSTCwgMHg4MDAwMDAwMCk7CisJCVJFR19XUklURShERVZJ Q0VfUkVBRFlfUkVHLCAweDAwMDAwMDAxKTsKKworCQlSRUdfV1JJVEUoTUlQSV9QT1JUX0NPTlRS T0wocGlwZSksIDB4ODA4MTAwMDApOworCX0gZWxzZSB7CisJCS8qc2V0IHVwIG1pcGkgcG9ydCBG SVhNRTogZG8gYXQgaW5pdCB0aW1lICovCisJCVJFR19XUklURShNSVBJX1BPUlRfQ09OVFJPTChw aXBlKSwgbWlwaSk7CisJfQorCVJFR19SRUFEKE1JUElfUE9SVF9DT05UUk9MKHBpcGUpKTsKKwor CWlmIChtZGZsZF9nZXRfcGFuZWxfdHlwZShkZXYsIHBpcGUpID09IFRNRF9WSUQpIHsKKwkJLyog Tk9QICovCisJfSBlbHNlIGlmIChtZGZsZF9nZXRfcGFuZWxfdHlwZShkZXYsIHBpcGUpID09IFRD MzU4NzZYKSB7CisJCS8qIHNldCB1cCBEU0kgY29udHJvbGxlciBEUEkgaW50ZXJmYWNlICovCisJ CW1kZmxkX2RzaV9kcGlfY29udHJvbGxlcl9pbml0KGRzaV9jb25maWcsIHBpcGUpOworCisJCS8q IENvbmZpZ3VyZSBNSVBJIEJyaWRnZSBhbmQgUGFuZWwgKi8KKwkJdGMzNTg3NnhfY29uZmlndXJl X2x2ZHNfYnJpZGdlKGRldik7CisJCWRldl9wcml2LT5kcGlfcGFuZWxfb25bcGlwZV0gPSB0cnVl OworCX0gZWxzZSB7CisJCS8qdHVybiBvbiBEUEkgaW50ZXJmYWNlKi8KKwkJbWRmbGRfZHNpX2Rw aV90dXJuX29uKGRwaV9vdXRwdXQsIHBpcGUpOworCX0KKworCS8qc2V0IHVwIHBpcGUqLworCVJF R19XUklURShwaXBlY29uZl9yZWcsIHBpcGVjb25mKTsKKwlSRUdfUkVBRChwaXBlY29uZl9yZWcp OworCisJLypzZXQgdXAgZGlzcGxheSBwbGFuZSovCisJUkVHX1dSSVRFKGRzcGNudHJfcmVnLCBk c3BjbnRyKTsKKwlSRUdfUkVBRChkc3BjbnRyX3JlZyk7CisKKwltc2xlZXAoMjApOyAvKiBGSVhN RTogdGhpcyBzaG91bGQgd2FpdCBmb3IgdmJsYW5rICovCisKKwlpZiAobWRmbGRfZ2V0X3BhbmVs X3R5cGUoZGV2LCBwaXBlKSA9PSBUTURfVklEKSB7CisJCS8qIE5PUCAqLworCX0gZWxzZSBpZiAo bWRmbGRfZ2V0X3BhbmVsX3R5cGUoZGV2LCBwaXBlKSA9PSBUQzM1ODc2WCkgeworCQltZGZsZF9k c2lfZHBpX3R1cm5fb24oZHBpX291dHB1dCwgcGlwZSk7CisJfSBlbHNlIHsKKwkJLyogaW5pdCBk cml2ZXIgaWMgKi8KKwkJbWRmbGRfZHNpX3Rwb19pY19pbml0KGRzaV9jb25maWcsIHBpcGUpOwor CQkvKmluaXQgYmFja2xpZ2h0Ki8KKwkJbWRmbGRfZHNpX2JyaWdodG5lc3NfaW5pdChkc2lfY29u ZmlnLCBwaXBlKTsKKwl9CisKKwlnbWFfcG93ZXJfZW5kKGRldik7Cit9CisKKy8qCisgKiBJbml0 IERTSSBEUEkgZW5jb2Rlci4KKyAqIEFsbG9jYXRlIGFuIG1kZmxkX2RzaV9lbmNvZGVyIGFuZCBh dHRhY2ggaXQgdG8gZ2l2ZW4gQGRzaV9jb25uZWN0b3IKKyAqIHJldHVybiBwb2ludGVyIG9mIG5l d2x5IGFsbG9jYXRlZCBEUEkgZW5jb2RlciwgTlVMTCBvbiBlcnJvcgorICovCitzdHJ1Y3QgbWRm bGRfZHNpX2VuY29kZXIgKm1kZmxkX2RzaV9kcGlfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LAorCQkJCXN0cnVjdCBtZGZsZF9kc2lfY29ubmVjdG9yICpkc2lfY29ubmVjdG9yLAorCQkJCWNv bnN0IHN0cnVjdCBwYW5lbF9mdW5jcyAqcF9mdW5jcykKK3sKKwlzdHJ1Y3QgbWRmbGRfZHNpX2Rw aV9vdXRwdXQgKmRwaV9vdXRwdXQgPSBOVUxMOworCXN0cnVjdCBtZGZsZF9kc2lfY29uZmlnICpk c2lfY29uZmlnOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPSBOVUxMOworCXN0 cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9IE5VTEw7CisJc3RydWN0IGRybV9kaXNwbGF5X21v ZGUgKmZpeGVkX21vZGUgPSBOVUxMOworCWludCBwaXBlOworCXUzMiBkYXRhOworCWludCByZXQ7 CisKKwlwaXBlID0gZHNpX2Nvbm5lY3Rvci0+cGlwZTsKKworCWlmIChtZGZsZF9nZXRfcGFuZWxf dHlwZShkZXYsIHBpcGUpICE9IFRDMzU4NzZYKSB7CisJCWRzaV9jb25maWcgPSBtZGZsZF9kc2lf Z2V0X2NvbmZpZyhkc2lfY29ubmVjdG9yKTsKKworCQkvKiBwYW5lbCBoYXJkLXJlc2V0ICovCisJ CWlmIChwX2Z1bmNzLT5yZXNldCkgeworCQkJcmV0ID0gcF9mdW5jcy0+cmVzZXQocGlwZSk7CisJ CQlpZiAocmV0KSB7CisJCQkJRFJNX0VSUk9SKCJQYW5lbCAlZCBoYXJkLXJlc2V0IGZhaWxlZFxu IiwgcGlwZSk7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCX0KKworCQkvKiBwYW5lbCBkcnZJ QyBpbml0ICovCisJCWlmIChwX2Z1bmNzLT5kcnZfaWNfaW5pdCkKKwkJCXBfZnVuY3MtPmRydl9p Y19pbml0KGRzaV9jb25maWcsIHBpcGUpOworCisJCS8qIHBhbmVsIHBvd2VyIG1vZGUgZGV0ZWN0 ICovCisJCXJldCA9IG1kZmxkX2RzaV9nZXRfcG93ZXJfbW9kZShkc2lfY29uZmlnLCAmZGF0YSwg ZmFsc2UpOworCQlpZiAocmV0KSB7CisJCQlEUk1fRVJST1IoIlBhbmVsICVkIGdldCBwb3dlciBt b2RlIGZhaWxlZFxuIiwgcGlwZSk7CisJCQlkc2lfY29ubmVjdG9yLT5zdGF0dXMgPSBjb25uZWN0 b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKKwkJfSBlbHNlIHsKKwkJCURSTV9JTkZPKCJwaXBlICVk IHBvd2VyIG1vZGUgMHgleFxuIiwgcGlwZSwgZGF0YSk7CisJCQlkc2lfY29ubmVjdG9yLT5zdGF0 dXMgPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKKwkJfQorCX0KKworCWRwaV9vdXRwdXQg PSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWRmbGRfZHNpX2RwaV9vdXRwdXQpLCBHRlBfS0VSTkVM KTsKKwlpZiAoIWRwaV9vdXRwdXQpIHsKKwkJRFJNX0VSUk9SKCJObyBtZW1vcnlcbiIpOworCQly ZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoZHNpX2Nvbm5lY3Rvci0+cGlwZSkKKwkJZHBpX291dHB1 dC0+cGFuZWxfb24gPSAwOworCWVsc2UKKwkJZHBpX291dHB1dC0+cGFuZWxfb24gPSAwOworCisJ ZHBpX291dHB1dC0+ZGV2ID0gZGV2OworCWlmIChtZGZsZF9nZXRfcGFuZWxfdHlwZShkZXYsIHBp cGUpICE9IFRDMzU4NzZYKQorCQlkcGlfb3V0cHV0LT5wX2Z1bmNzID0gcF9mdW5jczsKKwlkcGlf b3V0cHV0LT5maXJzdF9ib290ID0gMTsKKworCS8qZ2V0IGZpeGVkIG1vZGUqLworCWRzaV9jb25m aWcgPSBtZGZsZF9kc2lfZ2V0X2NvbmZpZyhkc2lfY29ubmVjdG9yKTsKKwlmaXhlZF9tb2RlID0g ZHNpX2NvbmZpZy0+Zml4ZWRfbW9kZTsKKworCS8qY3JlYXRlIGRybSBlbmNvZGVyIG9iamVjdCov CisJY29ubmVjdG9yID0gJmRzaV9jb25uZWN0b3ItPmJhc2UuYmFzZTsKKwllbmNvZGVyID0gJmRw aV9vdXRwdXQtPmJhc2UuYmFzZS5iYXNlOworCWRybV9lbmNvZGVyX2luaXQoZGV2LAorCQkJZW5j b2RlciwKKwkJCXBfZnVuY3MtPmVuY29kZXJfZnVuY3MsCisJCQlEUk1fTU9ERV9FTkNPREVSX0xW RFMpOworCWRybV9lbmNvZGVyX2hlbHBlcl9hZGQoZW5jb2RlciwKKwkJCQlwX2Z1bmNzLT5lbmNv ZGVyX2hlbHBlcl9mdW5jcyk7CisKKwkvKmF0dGFjaCB0byBnaXZlbiBjb25uZWN0b3IqLworCWRy bV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2Rlcihjb25uZWN0b3IsIGVuY29kZXIpOworCisJ LypzZXQgcG9zc2libGUgY3J0Y3MgYW5kIGNsb25lcyovCisJaWYgKGRzaV9jb25uZWN0b3ItPnBp cGUpIHsKKwkJZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MgPSAoMSA8PCAyKTsKKwkJZW5jb2Rlci0+ cG9zc2libGVfY2xvbmVzID0gKDEgPDwgMSk7CisJfSBlbHNlIHsKKwkJZW5jb2Rlci0+cG9zc2li bGVfY3J0Y3MgPSAoMSA8PCAwKTsKKwkJZW5jb2Rlci0+cG9zc2libGVfY2xvbmVzID0gKDEgPDwg MCk7CisJfQorCisJZHNpX2Nvbm5lY3Rvci0+YmFzZS5lbmNvZGVyID0gJmRwaV9vdXRwdXQtPmJh c2UuYmFzZTsKKworCXJldHVybiAmZHBpX291dHB1dC0+YmFzZTsKK30KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9nbWE1MDAvbWRmbGRfZHNpX2RwaS5oIGIvZHJpdmVycy9ncHUvZHJtL2dt YTUwMC9tZGZsZF9kc2lfZHBpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u NmY3NjI0NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvbWRmbGRf ZHNpX2RwaS5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxMCBJbnRl bCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUg b2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29m dHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIp LAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVk aW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlm eSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2Vs bCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0 aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5k IHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBo KSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25z IG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJB UyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJ RUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklO RlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklH SFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICog TElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhF UldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhF IFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FS RS4KKyAqCisgKiBBdXRob3JzOgorICogamltIGxpdSA8amltLmxpdUBpbnRlbC5jb20+CisgKiBK YWNraWUgTGk8eWFvZG9uZy5saUBpbnRlbC5jb20+CisgKi8KKworI2lmbmRlZiBfX01ERkxEX0RT SV9EUElfSF9fCisjZGVmaW5lIF9fTURGTERfRFNJX0RQSV9IX18KKworI2luY2x1ZGUgIm1kZmxk X2RzaV9vdXRwdXQuaCIKKyNpbmNsdWRlICJtZGZsZF9vdXRwdXQuaCIKKworc3RydWN0IG1kZmxk X2RzaV9kcGlfdGltaW5nIHsKKwl1MTYgaHN5bmNfY291bnQ7CisJdTE2IGhicF9jb3VudDsKKwl1 MTYgaGZwX2NvdW50OworCXUxNiBoYWN0aXZlX2NvdW50OworCXUxNiB2c3luY19jb3VudDsKKwl1 MTYgdmJwX2NvdW50OworCXUxNiB2ZnBfY291bnQ7Cit9OworCitzdHJ1Y3QgbWRmbGRfZHNpX2Rw aV9vdXRwdXQgeworCXN0cnVjdCBtZGZsZF9kc2lfZW5jb2RlciBiYXNlOworCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXY7CisKKwlpbnQgcGFuZWxfb247CisJaW50IGZpcnN0X2Jvb3Q7CisKKwljb25z dCBzdHJ1Y3QgcGFuZWxfZnVuY3MgKnBfZnVuY3M7Cit9OworCisjZGVmaW5lIE1ERkxEX0RTSV9E UElfT1VUUFVUKGRzaV9lbmNvZGVyKVwKKwljb250YWluZXJfb2YoZHNpX2VuY29kZXIsIHN0cnVj dCBtZGZsZF9kc2lfZHBpX291dHB1dCwgYmFzZSkKKworLyogRXhwb3J0IGZ1bmN0aW9ucyAqLwor ZXh0ZXJuIGludCBtZGZsZF9kc2lfZHBpX3RpbWluZ19jYWxjdWxhdGlvbihzdHJ1Y3QgZHJtX2Rp c3BsYXlfbW9kZSAqbW9kZSwKKwkJCQlzdHJ1Y3QgbWRmbGRfZHNpX2RwaV90aW1pbmcgKmRwaV90 aW1pbmcsCisJCQkJaW50IG51bV9sYW5lLCBpbnQgYnBwKTsKK2V4dGVybiBzdHJ1Y3QgbWRmbGRf ZHNpX2VuY29kZXIgKm1kZmxkX2RzaV9kcGlfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAor CQkJCXN0cnVjdCBtZGZsZF9kc2lfY29ubmVjdG9yICpkc2lfY29ubmVjdG9yLAorCQkJCWNvbnN0 IHN0cnVjdCBwYW5lbF9mdW5jcyAqcF9mdW5jcyk7CisKKy8qIE1ERkxEIERQSSBoZWxwZXIgZnVu Y3Rpb25zICovCitleHRlcm4gdm9pZCBtZGZsZF9kc2lfZHBpX2RwbXMoc3RydWN0IGRybV9lbmNv ZGVyICplbmNvZGVyLCBpbnQgbW9kZSk7CitleHRlcm4gYm9vbCBtZGZsZF9kc2lfZHBpX21vZGVf Zml4dXAoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCXN0cnVjdCBkcm1fZGlzcGxh eV9tb2RlICptb2RlLAorCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2Rl KTsKK2V4dGVybiB2b2lkIG1kZmxkX2RzaV9kcGlfcHJlcGFyZShzdHJ1Y3QgZHJtX2VuY29kZXIg KmVuY29kZXIpOworZXh0ZXJuIHZvaWQgbWRmbGRfZHNpX2RwaV9jb21taXQoc3RydWN0IGRybV9l bmNvZGVyICplbmNvZGVyKTsKK2V4dGVybiB2b2lkIG1kZmxkX2RzaV9kcGlfbW9kZV9zZXQoc3Ry dWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpt b2RlLAorCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKTsKK2V4dGVy biB2b2lkIG1kZmxkX2RzaV9kcGlfdHVybl9vbihzdHJ1Y3QgbWRmbGRfZHNpX2RwaV9vdXRwdXQg Km91dHB1dCwKKwkJCQlpbnQgcGlwZSk7CitleHRlcm4gdm9pZCBtZGZsZF9kc2lfZHBpX2NvbnRy b2xsZXJfaW5pdChzdHJ1Y3QgbWRmbGRfZHNpX2NvbmZpZyAqZHNpX2NvbmZpZywKKwkJCQlpbnQg cGlwZSk7CisjZW5kaWYgLypfX01ERkxEX0RTSV9EUElfSF9fKi8KZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9nbWE1MDAvbWRmbGRfZHNpX291dHB1dC5jIGIvZHJpdmVycy9ncHUvZHJtL2dt YTUwMC9tZGZsZF9kc2lfb3V0cHV0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uOTMzOGMyOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvbWRm bGRfZHNpX291dHB1dC5jCkBAIC0wLDAgKzEsNjM1IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIw MTAgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVk LCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0 aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29m dHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24s IGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5 LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5k L29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRv IHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8g dGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90 aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBh cmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBw b3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9W SURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisg KiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFO RCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1Ig Q09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RI RVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQg T1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBX SVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBUSEUg U09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqIGppbSBsaXUgPGppbS5saXVAaW50ZWwuY29t PgorICogSmFja2llIExpPHlhb2RvbmcubGlAaW50ZWwuY29tPgorICovCisKKyNpbmNsdWRlIDxs aW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgIm1kZmxkX2RzaV9vdXRwdXQuaCIKKyNpbmNsdWRl ICJtZGZsZF9kc2lfZHBpLmgiCisjaW5jbHVkZSAibWRmbGRfb3V0cHV0LmgiCisjaW5jbHVkZSAi bWRmbGRfZHNpX3BrZ19zZW5kZXIuaCIKKyNpbmNsdWRlICJ0YzM1ODc2eC1kc2ktbHZkcy5oIgor I2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KKyNpbmNsdWRlIDxhc20vaW50ZWxfc2N1X2lw Yy5oPgorCisvKiBnZXQgdGhlIExBQkMgZnJvbSBjb21tYW5kIGxpbmUuICovCitzdGF0aWMgaW50 IExBQkNfY29udHJvbCA9IDE7CisKKyNpZmRlZiBNT0RVTEUKK21vZHVsZV9wYXJhbShMQUJDX2Nv bnRyb2wsIGludCwgMDY0NCk7CisjZWxzZQorCitzdGF0aWMgaW50IF9faW5pdCBwYXJzZV9MQUJD X2NvbnRyb2woY2hhciAqYXJnKQoreworCS8qIExBQkMgY29udHJvbCBjYW4gYmUgcGFzc2VkIGlu IGFzIGEgY21kbGluZSBwYXJhbWV0ZXIgKi8KKwkvKiB0byBlbmFibGUgdGhpcyBmZWF0dXJlIGFk ZCBMQUJDPTEgdG8gY21kbGluZSAqLworCS8qIHRvIGRpc2FibGUgdGhpcyBmZWF0dXJlIGFkZCBM QUJDPTAgdG8gY21kbGluZSAqLworCWlmICghYXJnKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlm ICghc3RyY2FzZWNtcChhcmcsICIwIikpCisJCUxBQkNfY29udHJvbCA9IDA7CisJZWxzZSBpZiAo IXN0cmNhc2VjbXAoYXJnLCAiMSIpKQorCQlMQUJDX2NvbnRyb2wgPSAxOworCisJcmV0dXJuIDA7 Cit9CitlYXJseV9wYXJhbSgiTEFCQyIsIHBhcnNlX0xBQkNfY29udHJvbCk7CisjZW5kaWYKKwor LyoqCisgKiBDaGVjayBhbmQgc2VlIGlmIHRoZSBnZW5lcmljIGNvbnRyb2wgb3IgZGF0YSBidWZm ZXIgaXMgZW1wdHkgYW5kIHJlYWR5LgorICovCit2b2lkIG1kZmxkX2RzaV9nZW5fZmlmb19yZWFk eShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgZ2VuX2ZpZm9fc3RhdF9yZWcsCisJCQkJCQkJ dTMyIGZpZm9fc3RhdCkKK3sKKwl1MzIgR0VOX0JGX3RpbWVfb3V0X2NvdW50OworCisJLyogQ2hl Y2sgTUlQSSBBZGF0cGVyIGNvbW1hbmQgcmVnaXN0ZXJzICovCisJZm9yIChHRU5fQkZfdGltZV9v dXRfY291bnQgPSAwOworCQkJR0VOX0JGX3RpbWVfb3V0X2NvdW50IDwgR0VOX0ZCX1RJTUVfT1VU OworCQkJR0VOX0JGX3RpbWVfb3V0X2NvdW50KyspIHsKKwkJaWYgKChSRUdfUkVBRChnZW5fZmlm b19zdGF0X3JlZykgJiBmaWZvX3N0YXQpID09IGZpZm9fc3RhdCkKKwkJCWJyZWFrOworCQl1ZGVs YXkoMTAwKTsKKwl9CisKKwlpZiAoR0VOX0JGX3RpbWVfb3V0X2NvdW50ID09IEdFTl9GQl9USU1F X09VVCkKKwkJRFJNX0VSUk9SKCJtZGZsZF9kc2lfZ2VuX2ZpZm9fcmVhZHksIFRpbWVvdXQuIGdl bl9maWZvX3N0YXRfcmVnID0gMHgleC5cbiIsCisJCQkJCWdlbl9maWZvX3N0YXRfcmVnKTsKK30K KworLyoqCisgKiBNYW5hZ2UgdGhlIERTSSBNSVBJIGtleWJvYXJkIGFuZCBkaXNwbGF5IGJyaWdo dG5lc3MuCisgKiBGSVhNRTogdGhpcyBpcyBleHBvcnRlZCB0byBPU1BNIGNvZGUuIHNob3VsZCB3 b3JrIG91dCBhbiBzcGVjaWZpYworICogZGlzcGxheSBpbnRlcmZhY2UgdG8gT1NQTS4KKyAqLwor Cit2b2lkIG1kZmxkX2RzaV9icmlnaHRuZXNzX2luaXQoc3RydWN0IG1kZmxkX2RzaV9jb25maWcg KmRzaV9jb25maWcsIGludCBwaXBlKQoreworCXN0cnVjdCBtZGZsZF9kc2lfcGtnX3NlbmRlciAq c2VuZGVyID0KKwkJCQltZGZsZF9kc2lfZ2V0X3BrZ19zZW5kZXIoZHNpX2NvbmZpZyk7CisJc3Ry dWN0IGRybV9kZXZpY2UgKmRldiA9IHNlbmRlci0+ZGV2OworCXN0cnVjdCBkcm1fcHNiX3ByaXZh dGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MzIgZ2VuX2N0cmxfdmFsOworCisJ aWYgKCFzZW5kZXIpIHsKKwkJRFJNX0VSUk9SKCJObyBzZW5kZXIgZm91bmRcbiIpOworCQlyZXR1 cm47CisJfQorCisJLyogU2V0IGRlZmF1bHQgZGlzcGxheSBiYWNrbGlnaHQgdmFsdWUgdG8gODUl ICgweGQ4KSovCisJbWRmbGRfZHNpX3NlbmRfbWNzX3Nob3J0KHNlbmRlciwgd3JpdGVfZGlzcGxh eV9icmlnaHRuZXNzLCAweGQ4LCAxLAorCQkJCXRydWUpOworCisJLyogU2V0IG1pbmltdW0gYnJp Z2h0bmVzcyBzZXR0aW5nIG9mIENBQkMgZnVuY3Rpb24gdG8gMjAlICgweDMzKSovCisJbWRmbGRf ZHNpX3NlbmRfbWNzX3Nob3J0KHNlbmRlciwgd3JpdGVfY2FiY19taW5fYnJpZ2h0LCAweDMzLCAx LCB0cnVlKTsKKworCS8qIEVuYWJsZSBiYWNrbGlnaHQgb3IvYW5kIExBQkMgKi8KKwlnZW5fY3Ry bF92YWwgPSBCUklHSFRfQ05UTF9CTE9DS19PTiB8IERJU1BMQVlfRElNTUlOR19PTiB8CisJCQkJ CQkJCUJBQ0tMSUdIVF9PTjsKKwlpZiAoTEFCQ19jb250cm9sID09IDEpCisJCWdlbl9jdHJsX3Zh bCB8PSBESVNQTEFZX0RJTU1JTkdfT04gfCBESVNQTEFZX0JSSUdIVE5FU1NfQVVUTworCQkJCQkJ CQl8IEdBTU1BX0FVVE87CisKKwlpZiAoTEFCQ19jb250cm9sID09IDEpCisJCWdlbl9jdHJsX3Zh bCB8PSBBTUJJRU5UX0xJR0hUX1NFTlNFX09OOworCisJZGV2X3ByaXYtPm1pcGlfY3RybF9kaXNw bGF5ID0gZ2VuX2N0cmxfdmFsOworCisJbWRmbGRfZHNpX3NlbmRfbWNzX3Nob3J0KHNlbmRlciwg d3JpdGVfY3RybF9kaXNwbGF5LCAodTgpZ2VuX2N0cmxfdmFsLAorCQkJCTEsIHRydWUpOworCisJ bWRmbGRfZHNpX3NlbmRfbWNzX3Nob3J0KHNlbmRlciwgd3JpdGVfY3RybF9jYWJjLCBVSV9JTUFH RSwgMSwgdHJ1ZSk7Cit9CisKK3ZvaWQgbWRmbGRfZHNpX2JyaWdodG5lc3NfY29udHJvbChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgcGlwZSwgaW50IGxldmVsKQoreworCXN0cnVjdCBtZGZs ZF9kc2lfcGtnX3NlbmRlciAqc2VuZGVyOworCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9w cml2OworCXN0cnVjdCBtZGZsZF9kc2lfY29uZmlnICpkc2lfY29uZmlnOworCXUzMiBnZW5fY3Ry bF92YWwgPSAwOworCWludCBwX3R5cGUgPSBUTURfVklEOworCisJaWYgKCFkZXYgfHwgKHBpcGUg IT0gMCAmJiBwaXBlICE9IDIpKSB7CisJCURSTV9FUlJPUigiSW52YWxpZCBwYXJhbWV0ZXJcbiIp OworCQlyZXR1cm47CisJfQorCisJcF90eXBlID0gbWRmbGRfZ2V0X3BhbmVsX3R5cGUoZGV2LCAw KTsKKworCWRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmIChwaXBlKQorCQlkc2lf Y29uZmlnID0gZGV2X3ByaXYtPmRzaV9jb25maWdzWzFdOworCWVsc2UKKwkJZHNpX2NvbmZpZyA9 IGRldl9wcml2LT5kc2lfY29uZmlnc1swXTsKKworCXNlbmRlciA9IG1kZmxkX2RzaV9nZXRfcGtn X3NlbmRlcihkc2lfY29uZmlnKTsKKworCWlmICghc2VuZGVyKSB7CisJCURSTV9FUlJPUigiTm8g c2VuZGVyIGZvdW5kXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWdlbl9jdHJsX3ZhbCA9IChsZXZl bCAqIDB4ZmYgLyBNREZMRF9EU0lfQlJJR0hUTkVTU19NQVhfTEVWRUwpICYgMHhmZjsKKworCWRl dl9kYmcoc2VuZGVyLT5kZXYtPmRldiwgInBpcGUgPSAlZCwgZ2VuX2N0cmxfdmFsID0gJWQuXG4i LAorCQkJCQkJCXBpcGUsIGdlbl9jdHJsX3ZhbCk7CisKKwlpZiAocF90eXBlID09IFRNRF9WSUQp IHsKKwkJLyogU2V0IGRpc3BsYXkgYmFja2xpZ2h0IHZhbHVlICovCisJCW1kZmxkX2RzaV9zZW5k X21jc19zaG9ydChzZW5kZXIsIHRtZF93cml0ZV9kaXNwbGF5X2JyaWdodG5lc3MsCisJCQkJCSh1 OClnZW5fY3RybF92YWwsIDEsIHRydWUpOworCX0gZWxzZSB7CisJCS8qIFNldCBkaXNwbGF5IGJh Y2tsaWdodCB2YWx1ZSAqLworCQltZGZsZF9kc2lfc2VuZF9tY3Nfc2hvcnQoc2VuZGVyLCB3cml0 ZV9kaXNwbGF5X2JyaWdodG5lc3MsCisJCQkJCSh1OClnZW5fY3RybF92YWwsIDEsIHRydWUpOwor CisJCS8qIEVuYWJsZSBiYWNrbGlnaHQgY29udHJvbCAqLworCQlpZiAobGV2ZWwgPT0gMCkKKwkJ CWdlbl9jdHJsX3ZhbCA9IDA7CisJCWVsc2UKKwkJCWdlbl9jdHJsX3ZhbCA9IGRldl9wcml2LT5t aXBpX2N0cmxfZGlzcGxheTsKKworCQltZGZsZF9kc2lfc2VuZF9tY3Nfc2hvcnQoc2VuZGVyLCB3 cml0ZV9jdHJsX2Rpc3BsYXksCisJCQkJCSh1OClnZW5fY3RybF92YWwsIDEsIHRydWUpOworCX0K K30KKworc3RhdGljIGludCBtZGZsZF9kc2lfZ2V0X3BhbmVsX3N0YXR1cyhzdHJ1Y3QgbWRmbGRf ZHNpX2NvbmZpZyAqZHNpX2NvbmZpZywKKwkJCQl1OCBkY3MsIHUzMiAqZGF0YSwgYm9vbCBocykK K3sKKwlzdHJ1Y3QgbWRmbGRfZHNpX3BrZ19zZW5kZXIgKnNlbmRlcgorCQk9IG1kZmxkX2RzaV9n ZXRfcGtnX3NlbmRlcihkc2lfY29uZmlnKTsKKworCWlmICghc2VuZGVyIHx8ICFkYXRhKSB7CisJ CURSTV9FUlJPUigiSW52YWxpZCBwYXJhbWV0ZXJcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9 CisKKwlyZXR1cm4gbWRmbGRfZHNpX3JlYWRfbWNzKHNlbmRlciwgZGNzLCBkYXRhLCAxLCBocyk7 Cit9CisKK2ludCBtZGZsZF9kc2lfZ2V0X3Bvd2VyX21vZGUoc3RydWN0IG1kZmxkX2RzaV9jb25m aWcgKmRzaV9jb25maWcsIHUzMiAqbW9kZSwKKwkJCWJvb2wgaHMpCit7CisJaWYgKCFkc2lfY29u ZmlnIHx8ICFtb2RlKSB7CisJCURSTV9FUlJPUigiSW52YWxpZCBwYXJhbWV0ZXJcbiIpOworCQly ZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gbWRmbGRfZHNpX2dldF9wYW5lbF9zdGF0dXMo ZHNpX2NvbmZpZywgMHgwYSwgbW9kZSwgaHMpOworfQorCitpbnQgbWRmbGRfZHNpX2dldF9kaWFn bm9zdGljX3Jlc3VsdChzdHJ1Y3QgbWRmbGRfZHNpX2NvbmZpZyAqZHNpX2NvbmZpZywKKwkJCQl1 MzIgKnJlc3VsdCwgYm9vbCBocykKK3sKKwlpZiAoIWRzaV9jb25maWcgfHwgIXJlc3VsdCkgewor CQlEUk1fRVJST1IoIkludmFsaWQgcGFyYW1ldGVyXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJ fQorCisJcmV0dXJuIG1kZmxkX2RzaV9nZXRfcGFuZWxfc3RhdHVzKGRzaV9jb25maWcsIDB4MGYs IHJlc3VsdCwgaHMpOworfQorCisvKgorICogTk9URTogdGhpcyBmdW5jdGlvbiB3YXMgdXNlZCBi eSBPU1BNLgorICogVE9ETzogd2lsbCBiZSByZW1vdmVkIGxhdGVyLCBzaG91bGQgd29yayBvdXQg ZGlzcGxheSBpbnRlcmZhY2VzIGZvciBPU1BNCisgKi8KK3ZvaWQgbWRmbGRfZHNpX2NvbnRyb2xs ZXJfaW5pdChzdHJ1Y3QgbWRmbGRfZHNpX2NvbmZpZyAqZHNpX2NvbmZpZywgaW50IHBpcGUpCit7 CisJaWYgKCFkc2lfY29uZmlnIHx8ICgocGlwZSAhPSAwKSAmJiAocGlwZSAhPSAyKSkpIHsKKwkJ RFJNX0VSUk9SKCJJbnZhbGlkIHBhcmFtZXRlcnNcbiIpOworCQlyZXR1cm47CisJfQorCisJbWRm bGRfZHNpX2RwaV9jb250cm9sbGVyX2luaXQoZHNpX2NvbmZpZywgcGlwZSk7Cit9CisKK3N0YXRp YyB2b2lkIG1kZmxkX2RzaV9jb25uZWN0b3Jfc2F2ZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yKQoreworfQorCitzdGF0aWMgdm9pZCBtZGZsZF9kc2lfY29ubmVjdG9yX3Jlc3RvcmUo c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKK30KKworLyogRklYTUU6IHN0YXJ0 IHVzaW5nIHRoZSBmb3JjZSBwYXJhbWV0ZXIgKi8KK3N0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jf c3RhdHVzCittZGZsZF9kc2lfY29ubmVjdG9yX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubmVjdG9yLCBib29sIGZvcmNlKQoreworCXN0cnVjdCBtZGZsZF9kc2lfY29ubmVjdG9yICpk c2lfY29ubmVjdG9yCisJCT0gbWRmbGRfZHNpX2Nvbm5lY3Rvcihjb25uZWN0b3IpOworCisJZHNp X2Nvbm5lY3Rvci0+c3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CisKKwlyZXR1 cm4gZHNpX2Nvbm5lY3Rvci0+c3RhdHVzOworfQorCitzdGF0aWMgaW50IG1kZmxkX2RzaV9jb25u ZWN0b3Jfc2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQkJ c3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksCisJCQkJdWludDY0X3QgdmFsdWUpCit7CisJ c3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyID0gY29ubmVjdG9yLT5lbmNvZGVyOworCXN0cnVj dCBiYWNrbGlnaHRfZGV2aWNlICpwc2JfYmQ7CisKKwlpZiAoIXN0cmNtcChwcm9wZXJ0eS0+bmFt ZSwgInNjYWxpbmcgbW9kZSIpICYmIGVuY29kZXIpIHsKKwkJc3RydWN0IHBzYl9pbnRlbF9jcnRj ICpwc2JfY3J0YyA9CisJCQkJCXRvX3BzYl9pbnRlbF9jcnRjKGVuY29kZXItPmNydGMpOworCQli b29sIGNlbnRlcmVjaGFuZ2U7CisJCXVpbnQ2NF90IHZhbDsKKworCQlpZiAoIXBzYl9jcnRjKQor CQkJZ290byBzZXRfcHJvcF9lcnJvcjsKKworCQlzd2l0Y2ggKHZhbHVlKSB7CisJCWNhc2UgRFJN X01PREVfU0NBTEVfRlVMTFNDUkVFTjoKKwkJCWJyZWFrOworCQljYXNlIERSTV9NT0RFX1NDQUxF X05PX1NDQUxFOgorCQkJYnJlYWs7CisJCWNhc2UgRFJNX01PREVfU0NBTEVfQVNQRUNUOgorCQkJ YnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIHNldF9wcm9wX2Vycm9yOworCQl9CisKKwkJaWYg KGRybV9jb25uZWN0b3JfcHJvcGVydHlfZ2V0X3ZhbHVlKGNvbm5lY3RvciwgcHJvcGVydHksICZ2 YWwpKQorCQkJZ290byBzZXRfcHJvcF9lcnJvcjsKKworCQlpZiAodmFsID09IHZhbHVlKQorCQkJ Z290byBzZXRfcHJvcF9kb25lOworCisJCWlmIChkcm1fY29ubmVjdG9yX3Byb3BlcnR5X3NldF92 YWx1ZShjb25uZWN0b3IsCisJCQkJCQkJcHJvcGVydHksIHZhbHVlKSkKKwkJCWdvdG8gc2V0X3By b3BfZXJyb3I7CisKKwkJY2VudGVyZWNoYW5nZSA9ICh2YWwgPT0gRFJNX01PREVfU0NBTEVfTk9f U0NBTEUpIHx8CisJCQkodmFsdWUgPT0gRFJNX01PREVfU0NBTEVfTk9fU0NBTEUpOworCisJCWlm IChwc2JfY3J0Yy0+c2F2ZWRfbW9kZS5oZGlzcGxheSAhPSAwICYmCisJCSAgICBwc2JfY3J0Yy0+ c2F2ZWRfbW9kZS52ZGlzcGxheSAhPSAwKSB7CisJCQlpZiAoY2VudGVyZWNoYW5nZSkgeworCQkJ CWlmICghZHJtX2NydGNfaGVscGVyX3NldF9tb2RlKGVuY29kZXItPmNydGMsCisJCQkJCQkmcHNi X2NydGMtPnNhdmVkX21vZGUsCisJCQkJCQllbmNvZGVyLT5jcnRjLT54LAorCQkJCQkJZW5jb2Rl ci0+Y3J0Yy0+eSwKKwkJCQkJCWVuY29kZXItPmNydGMtPmZiKSkKKwkJCQkJZ290byBzZXRfcHJv cF9lcnJvcjsKKwkJCX0gZWxzZSB7CisJCQkJc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5j cyAqZnVuY3MgPQorCQkJCQkJZW5jb2Rlci0+aGVscGVyX3ByaXZhdGU7CisJCQkJZnVuY3MtPm1v ZGVfc2V0KGVuY29kZXIsCisJCQkJCSZwc2JfY3J0Yy0+c2F2ZWRfbW9kZSwKKwkJCQkJJnBzYl9j cnRjLT5zYXZlZF9hZGp1c3RlZF9tb2RlKTsKKwkJCX0KKwkJfQorCX0gZWxzZSBpZiAoIXN0cmNt cChwcm9wZXJ0eS0+bmFtZSwgImJhY2tsaWdodCIpICYmIGVuY29kZXIpIHsKKwkJaWYgKGRybV9j b25uZWN0b3JfcHJvcGVydHlfc2V0X3ZhbHVlKGNvbm5lY3RvciwgcHJvcGVydHksCisJCQkJCQkJ CQl2YWx1ZSkpCisJCQlnb3RvIHNldF9wcm9wX2Vycm9yOworCQllbHNlIHsKKwkJCXBzYl9iZCA9 IG1kZmxkX2dldF9iYWNrbGlnaHRfZGV2aWNlKCk7CisJCQlpZiAocHNiX2JkKSB7CisJCQkJcHNi X2JkLT5wcm9wcy5icmlnaHRuZXNzID0gdmFsdWU7CisJCQkJbWRmbGRfc2V0X2JyaWdodG5lc3Mo cHNiX2JkKTsKKwkJCX0KKwkJfQorCX0KK3NldF9wcm9wX2RvbmU6CisJcmV0dXJuIDA7CitzZXRf cHJvcF9lcnJvcjoKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB2b2lkIG1kZmxkX2RzaV9jb25u ZWN0b3JfZGVzdHJveShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVj dCBtZGZsZF9kc2lfY29ubmVjdG9yICpkc2lfY29ubmVjdG9yID0KKwkJCQkJbWRmbGRfZHNpX2Nv bm5lY3Rvcihjb25uZWN0b3IpOworCXN0cnVjdCBtZGZsZF9kc2lfcGtnX3NlbmRlciAqc2VuZGVy OworCisJaWYgKCFkc2lfY29ubmVjdG9yKQorCQlyZXR1cm47CisJZHJtX3N5c2ZzX2Nvbm5lY3Rv cl9yZW1vdmUoY29ubmVjdG9yKTsKKwlkcm1fY29ubmVjdG9yX2NsZWFudXAoY29ubmVjdG9yKTsK KwlzZW5kZXIgPSBkc2lfY29ubmVjdG9yLT5wa2dfc2VuZGVyOworCW1kZmxkX2RzaV9wa2dfc2Vu ZGVyX2Rlc3Ryb3koc2VuZGVyKTsKKwlrZnJlZShkc2lfY29ubmVjdG9yKTsKK30KKworc3RhdGlj IGludCBtZGZsZF9kc2lfY29ubmVjdG9yX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubmVjdG9yKQoreworCXN0cnVjdCBtZGZsZF9kc2lfY29ubmVjdG9yICpkc2lfY29ubmVjdG9y ID0KKwkJCQltZGZsZF9kc2lfY29ubmVjdG9yKGNvbm5lY3Rvcik7CisJc3RydWN0IG1kZmxkX2Rz aV9jb25maWcgKmRzaV9jb25maWcgPQorCQkJCW1kZmxkX2RzaV9nZXRfY29uZmlnKGRzaV9jb25u ZWN0b3IpOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpmaXhlZF9tb2RlID0gZHNpX2NvbmZp Zy0+Zml4ZWRfbW9kZTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZHVwX21vZGUgPSBOVUxM OworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKKworCWNvbm5lY3Rv ci0+ZGlzcGxheV9pbmZvLm1pbl92ZnJlcSA9IDA7CisJY29ubmVjdG9yLT5kaXNwbGF5X2luZm8u bWF4X3ZmcmVxID0gMjAwOworCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLm1pbl9oZnJlcSA9IDA7 CisJY29ubmVjdG9yLT5kaXNwbGF5X2luZm8ubWF4X2hmcmVxID0gMjAwOworCisJaWYgKGZpeGVk X21vZGUpIHsKKwkJZGV2X2RiZyhkZXYtPmRldiwgImZpeGVkX21vZGUgJWR4JWRcbiIsCisJCQkJ Zml4ZWRfbW9kZS0+aGRpc3BsYXksIGZpeGVkX21vZGUtPnZkaXNwbGF5KTsKKwkJZHVwX21vZGUg PSBkcm1fbW9kZV9kdXBsaWNhdGUoZGV2LCBmaXhlZF9tb2RlKTsKKwkJZHJtX21vZGVfcHJvYmVk X2FkZChjb25uZWN0b3IsIGR1cF9tb2RlKTsKKwkJcmV0dXJuIDE7CisJfQorCURSTV9FUlJPUigi RGlkbid0IGdldCBhbnkgbW9kZXMhXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBt ZGZsZF9kc2lfY29ubmVjdG9yX21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvciwKKwkJCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCXN0cnVjdCBt ZGZsZF9kc2lfY29ubmVjdG9yICpkc2lfY29ubmVjdG9yID0KKwkJCQkJbWRmbGRfZHNpX2Nvbm5l Y3Rvcihjb25uZWN0b3IpOworCXN0cnVjdCBtZGZsZF9kc2lfY29uZmlnICpkc2lfY29uZmlnID0K KwkJCQkJbWRmbGRfZHNpX2dldF9jb25maWcoZHNpX2Nvbm5lY3Rvcik7CisJc3RydWN0IGRybV9k aXNwbGF5X21vZGUgKmZpeGVkX21vZGUgPSBkc2lfY29uZmlnLT5maXhlZF9tb2RlOworCisJaWYg KG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19EQkxTQ0FOKQorCQlyZXR1cm4gTU9ERV9OT19E QkxFU0NBTjsKKworCWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKQor CQlyZXR1cm4gTU9ERV9OT19JTlRFUkxBQ0U7CisKKwkvKioKKwkgKiBGSVhNRTogY3VycmVudCBE QyBoYXMgbm8gZml0dGluZyB1bml0LCByZWplY3QgYW55IG1vZGUgc2V0dGluZworCSAqIHJlcXVl c3QKKwkgKiBXaWxsIGZpZ3VyZSBvdXQgYSB3YXkgdG8gZG8gdXAtc2NhbGluZyhwYW5uZWwgZml0 dGluZykgbGF0ZXIuCisJICoqLworCWlmIChmaXhlZF9tb2RlKSB7CisJCWlmIChtb2RlLT5oZGlz cGxheSAhPSBmaXhlZF9tb2RlLT5oZGlzcGxheSkKKwkJCXJldHVybiBNT0RFX1BBTkVMOworCisJ CWlmIChtb2RlLT52ZGlzcGxheSAhPSBmaXhlZF9tb2RlLT52ZGlzcGxheSkKKwkJCXJldHVybiBN T0RFX1BBTkVMOworCX0KKworCXJldHVybiBNT0RFX09LOworfQorCitzdGF0aWMgdm9pZCBtZGZs ZF9kc2lfY29ubmVjdG9yX2RwbXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgaW50 IG1vZGUpCit7CisJaWYgKG1vZGUgPT0gY29ubmVjdG9yLT5kcG1zKQorCQlyZXR1cm47CisKKwkv KmZpcnN0LCBleGVjdXRlIGRwbXMqLworCisJZHJtX2hlbHBlcl9jb25uZWN0b3JfZHBtcyhjb25u ZWN0b3IsIG1vZGUpOworfQorCitzdGF0aWMgc3RydWN0IGRybV9lbmNvZGVyICptZGZsZF9kc2lf Y29ubmVjdG9yX2Jlc3RfZW5jb2RlcigKKwkJCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yKQoreworCXN0cnVjdCBtZGZsZF9kc2lfY29ubmVjdG9yICpkc2lfY29ubmVjdG9yID0KKwkJ CQltZGZsZF9kc2lfY29ubmVjdG9yKGNvbm5lY3Rvcik7CisJc3RydWN0IG1kZmxkX2RzaV9jb25m aWcgKmRzaV9jb25maWcgPQorCQkJCW1kZmxkX2RzaV9nZXRfY29uZmlnKGRzaV9jb25uZWN0b3Ip OworCXJldHVybiAmZHNpX2NvbmZpZy0+ZW5jb2Rlci0+YmFzZS5iYXNlOworfQorCisvKkRTSSBj b25uZWN0b3IgZnVuY3MqLworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNz IG1kZmxkX2RzaV9jb25uZWN0b3JfZnVuY3MgPSB7CisJLmRwbXMgPSAvKmRybV9oZWxwZXJfY29u bmVjdG9yX2RwbXMqL21kZmxkX2RzaV9jb25uZWN0b3JfZHBtcywKKwkuc2F2ZSA9IG1kZmxkX2Rz aV9jb25uZWN0b3Jfc2F2ZSwKKwkucmVzdG9yZSA9IG1kZmxkX2RzaV9jb25uZWN0b3JfcmVzdG9y ZSwKKwkuZGV0ZWN0ID0gbWRmbGRfZHNpX2Nvbm5lY3Rvcl9kZXRlY3QsCisJLmZpbGxfbW9kZXMg PSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsCisJLnNldF9wcm9wZXJ0 eSA9IG1kZmxkX2RzaV9jb25uZWN0b3Jfc2V0X3Byb3BlcnR5LAorCS5kZXN0cm95ID0gbWRmbGRf ZHNpX2Nvbm5lY3Rvcl9kZXN0cm95LAorfTsKKworLypEU0kgY29ubmVjdG9yIGhlbHBlciBmdW5j cyovCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzCisJbWRm bGRfZHNpX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgPSB7CisJLmdldF9tb2RlcyA9IG1kZmxkX2Rz aV9jb25uZWN0b3JfZ2V0X21vZGVzLAorCS5tb2RlX3ZhbGlkID0gbWRmbGRfZHNpX2Nvbm5lY3Rv cl9tb2RlX3ZhbGlkLAorCS5iZXN0X2VuY29kZXIgPSBtZGZsZF9kc2lfY29ubmVjdG9yX2Jlc3Rf ZW5jb2RlciwKK307CisKK3N0YXRpYyBpbnQgbWRmbGRfZHNpX2dldF9kZWZhdWx0X2NvbmZpZyhz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBtZGZsZF9kc2lfY29uZmlnICpjb25m aWcsIGludCBwaXBlKQoreworCWlmICghZGV2IHx8ICFjb25maWcpIHsKKwkJRFJNX0VSUk9SKCJJ bnZhbGlkIHBhcmFtZXRlcnMiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY29uZmlnLT5i cHAgPSAyNDsKKwlpZiAobWRmbGRfZ2V0X3BhbmVsX3R5cGUoZGV2LCBwaXBlKSA9PSBUQzM1ODc2 WCkKKwkJY29uZmlnLT5sYW5lX2NvdW50ID0gNDsKKwllbHNlCisJCWNvbmZpZy0+bGFuZV9jb3Vu dCA9IDI7CisJY29uZmlnLT5jaGFubmVsX251bSA9IDA7CisKKwlpZiAobWRmbGRfZ2V0X3BhbmVs X3R5cGUoZGV2LCBwaXBlKSA9PSBUTURfVklEKQorCQljb25maWctPnZpZGVvX21vZGUgPSBNREZM RF9EU0lfVklERU9fTk9OX0JVUlNUX01PREVfU1lOQ19QVUxTRTsKKwllbHNlIGlmIChtZGZsZF9n ZXRfcGFuZWxfdHlwZShkZXYsIHBpcGUpID09IFRDMzU4NzZYKQorCQljb25maWctPnZpZGVvX21v ZGUgPQorCQkJCU1ERkxEX0RTSV9WSURFT19OT05fQlVSU1RfTU9ERV9TWU5DX0VWRU5UUzsKKwll bHNlCisJCWNvbmZpZy0+dmlkZW9fbW9kZSA9IE1ERkxEX0RTSV9WSURFT19CVVJTVF9NT0RFOwor CisJcmV0dXJuIDA7Cit9CisKK2ludCBtZGZsZF9kc2lfcGFuZWxfcmVzZXQoaW50IHBpcGUpCit7 CisJdW5zaWduZWQgZ3BpbzsKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAocGlwZSkgeworCWNh c2UgMDoKKwkJZ3BpbyA9IDEyODsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlncGlvID0gMzQ7CisJ CWJyZWFrOworCWRlZmF1bHQ6CisJCURSTV9FUlJPUigiSW52YWxpZCBvdXRwdXRcbiIpOworCQly ZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoZ3BpbywgImdmeCIpOwor CWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJncGlvX3JxdWVzZXQgZmFpbGVkXG4iKTsKKwkJcmV0 dXJuIHJldDsKKwl9CisKKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3BpbywgMSk7CisJ aWYgKHJldCkgeworCQlEUk1fRVJST1IoImdwaW9fZGlyZWN0aW9uX291dHB1dCBmYWlsZWRcbiIp OworCQlnb3RvIGdwaW9fZXJyb3I7CisJfQorCisJZ3Bpb19nZXRfdmFsdWUoMTI4KTsKKworZ3Bp b19lcnJvcjoKKwlpZiAoZ3Bpb19pc192YWxpZChncGlvKSkKKwkJZ3Bpb19mcmVlKGdwaW8pOwor CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIE1JUEkgb3V0cHV0IGluaXQKKyAqIEBkZXYgZHJt IGRldmljZQorICogQHBpcGUgcGlwZSBudW1iZXIuIDAgb3IgMgorICogQGNvbmZpZworICoKKyAq IERvIHRoZSBpbml0aWFsaXphdGlvbiBvZiBhIE1JUEkgb3V0cHV0LCBpbmNsdWRpbmcgY3JlYXRl IERSTSBtb2RlIG9iamVjdHMKKyAqIGluaXRpYWxpemF0aW9uIG9mIERTSSBvdXRwdXQgb24gQHBp cGUKKyAqLwordm9pZCBtZGZsZF9kc2lfb3V0cHV0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRl diwKKwkJCSAgIGludCBwaXBlLAorCQkJICAgc3RydWN0IG1kZmxkX2RzaV9jb25maWcgKmNvbmZp ZywKKwkJCSAgIGNvbnN0IHN0cnVjdCBwYW5lbF9mdW5jcyAqcF92aWRfZnVuY3MpCit7CisJc3Ry dWN0IG1kZmxkX2RzaV9jb25maWcgKmRzaV9jb25maWc7CisJc3RydWN0IG1kZmxkX2RzaV9jb25u ZWN0b3IgKmRzaV9jb25uZWN0b3I7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsK KwlzdHJ1Y3QgbWRmbGRfZHNpX2VuY29kZXIgKmVuY29kZXI7CisJc3RydWN0IGRybV9wc2JfcHJp dmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBwYW5lbF9pbmZvIGRz aV9wYW5lbF9pbmZvOworCXUzMiB3aWR0aF9tbSwgaGVpZ2h0X21tOworCisJZGV2X2RiZyhkZXYt PmRldiwgImluaXQgRFNJIG91dHB1dCBvbiBwaXBlICVkXG4iLCBwaXBlKTsKKworCWlmICghZGV2 IHx8ICgocGlwZSAhPSAwKSAmJiAocGlwZSAhPSAyKSkpIHsKKwkJRFJNX0VSUk9SKCJJbnZhbGlk IHBhcmFtZXRlclxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKmNyZWF0ZSBhIG5ldyBjb25uZXRv ciovCisJZHNpX2Nvbm5lY3RvciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtZGZsZF9kc2lfY29u bmVjdG9yKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkc2lfY29ubmVjdG9yKSB7CisJCURSTV9FUlJP UigiTm8gbWVtb3J5Iik7CisJCXJldHVybjsKKwl9CisKKwlkc2lfY29ubmVjdG9yLT5waXBlID0g IHBpcGU7CisKKwkvKnNldCBEU0kgY29uZmlnKi8KKwlpZiAoY29uZmlnKQorCQlkc2lfY29uZmln ID0gY29uZmlnOworCWVsc2UgeworCQlkc2lfY29uZmlnID0ga3phbGxvYyhzaXplb2Yoc3RydWN0 IG1kZmxkX2RzaV9jb25maWcpLAorCQkJCQkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKCFkc2lfY29u ZmlnKSB7CisJCQlEUk1fRVJST1IoImNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIERTSSBjb25m aWdcbiIpOworCQkJZ290byBkc2lfaW5pdF9lcnIwOworCQl9CisJCW1kZmxkX2RzaV9nZXRfZGVm YXVsdF9jb25maWcoZGV2LCBkc2lfY29uZmlnLCBwaXBlKTsKKwl9CisKKwlkc2lfY29ubmVjdG9y LT5wcml2YXRlID0gZHNpX2NvbmZpZzsKKworCWRzaV9jb25maWctPmNoYW5nZWQgPSAxOworCWRz aV9jb25maWctPmRldiA9IGRldjsKKworCWRzaV9jb25maWctPmZpeGVkX21vZGUgPSBwX3ZpZF9m dW5jcy0+Z2V0X2NvbmZpZ19tb2RlKGRldik7CisJaWYgKHBfdmlkX2Z1bmNzLT5nZXRfcGFuZWxf aW5mbyhkZXYsIHBpcGUsICZkc2lfcGFuZWxfaW5mbykpCisJCQlnb3RvIGRzaV9pbml0X2VycjA7 CisKKwl3aWR0aF9tbSA9IGRzaV9wYW5lbF9pbmZvLndpZHRoX21tOworCWhlaWdodF9tbSA9IGRz aV9wYW5lbF9pbmZvLmhlaWdodF9tbTsKKworCWRzaV9jb25maWctPm1vZGUgPSBkc2lfY29uZmln LT5maXhlZF9tb2RlOworCWRzaV9jb25maWctPmNvbm5lY3RvciA9IGRzaV9jb25uZWN0b3I7CisK KwlpZiAoIWRzaV9jb25maWctPmZpeGVkX21vZGUpIHsKKwkJRFJNX0VSUk9SKCJObyBwYW5uZWwg Zml4ZWQgbW9kZSB3YXMgZm91bmRcbiIpOworCQlnb3RvIGRzaV9pbml0X2VycjA7CisJfQorCisJ aWYgKHBpcGUgJiYgZGV2X3ByaXYtPmRzaV9jb25maWdzWzBdKSB7CisJCWRzaV9jb25maWctPmR2 cl9pY19pbml0ZWQgPSAwOworCQlkZXZfcHJpdi0+ZHNpX2NvbmZpZ3NbMV0gPSBkc2lfY29uZmln OworCX0gZWxzZSBpZiAocGlwZSA9PSAwKSB7CisJCWRzaV9jb25maWctPmR2cl9pY19pbml0ZWQg PSAxOworCQlkZXZfcHJpdi0+ZHNpX2NvbmZpZ3NbMF0gPSBkc2lfY29uZmlnOworCX0gZWxzZSB7 CisJCURSTV9FUlJPUigiVHJ5aW5nIHRvIGluaXQgTUlQSTEgYmVmb3JlIE1JUEkwXG4iKTsKKwkJ Z290byBkc2lfaW5pdF9lcnIwOworCX0KKworCisJY29ubmVjdG9yID0gJmRzaV9jb25uZWN0b3It PmJhc2UuYmFzZTsKKwlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCBjb25uZWN0b3IsICZtZGZsZF9k c2lfY29ubmVjdG9yX2Z1bmNzLAorCQkJCQkJRFJNX01PREVfQ09OTkVDVE9SX0xWRFMpOworCWRy bV9jb25uZWN0b3JfaGVscGVyX2FkZChjb25uZWN0b3IsICZtZGZsZF9kc2lfY29ubmVjdG9yX2hl bHBlcl9mdW5jcyk7CisKKwljb25uZWN0b3ItPmRpc3BsYXlfaW5mby5zdWJwaXhlbF9vcmRlciA9 IFN1YlBpeGVsSG9yaXpvbnRhbFJHQjsKKwljb25uZWN0b3ItPmRpc3BsYXlfaW5mby53aWR0aF9t bSA9IHdpZHRoX21tOworCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmhlaWdodF9tbSA9IGhlaWdo dF9tbTsKKwljb25uZWN0b3ItPmludGVybGFjZV9hbGxvd2VkID0gZmFsc2U7CisJY29ubmVjdG9y LT5kb3VibGVzY2FuX2FsbG93ZWQgPSBmYWxzZTsKKworCS8qYXR0YWNoIHByb3BlcnRpZXMqLwor CWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KGNvbm5lY3RvciwKKwkJCQlkZXYtPm1vZGVf Y29uZmlnLnNjYWxpbmdfbW9kZV9wcm9wZXJ0eSwKKwkJCQlEUk1fTU9ERV9TQ0FMRV9GVUxMU0NS RUVOKTsKKwlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eShjb25uZWN0b3IsCisJCQkJZGV2 X3ByaXYtPmJhY2tsaWdodF9wcm9wZXJ0eSwKKwkJCQlNREZMRF9EU0lfQlJJR0hUTkVTU19NQVhf TEVWRUwpOworCisJLyppbml0IERTSSBwYWNrYWdlIHNlbmRlciBvbiB0aGlzIG91dHB1dCovCisJ aWYgKG1kZmxkX2RzaV9wa2dfc2VuZGVyX2luaXQoZHNpX2Nvbm5lY3RvciwgcGlwZSkpIHsKKwkJ RFJNX0VSUk9SKCJQYWNrYWdlIFNlbmRlciBpbml0aWFsaXphdGlvbiBmYWlsZWQgb24gcGlwZSAl ZFxuIiwKKwkJCQkJCQkJCXBpcGUpOworCQlnb3RvIGRzaV9pbml0X2VycjA7CisJfQorCisJZW5j b2RlciA9IG1kZmxkX2RzaV9kcGlfaW5pdChkZXYsIGRzaV9jb25uZWN0b3IsIHBfdmlkX2Z1bmNz KTsKKwlpZiAoIWVuY29kZXIpIHsKKwkJRFJNX0VSUk9SKCJDcmVhdGUgRFBJIGVuY29kZXIgZmFp bGVkXG4iKTsKKwkJZ290byBkc2lfaW5pdF9lcnIxOworCX0KKwllbmNvZGVyLT5wcml2YXRlID0g ZHNpX2NvbmZpZzsKKwlkc2lfY29uZmlnLT5lbmNvZGVyID0gZW5jb2RlcjsKKwllbmNvZGVyLT5i YXNlLnR5cGUgPSAocGlwZSA9PSAwKSA/IElOVEVMX09VVFBVVF9NSVBJIDoKKwkJSU5URUxfT1VU UFVUX01JUEkyOworCWRybV9zeXNmc19jb25uZWN0b3JfYWRkKGNvbm5lY3Rvcik7CisJcmV0dXJu OworCisJLypUT0RPOiBhZGQgY29kZSB0byBkZXN0cm95IG91dHB1dHMgb24gZXJyb3IqLworZHNp X2luaXRfZXJyMToKKwkvKmRlc3Ryb3kgc2VuZGVyKi8KKwltZGZsZF9kc2lfcGtnX3NlbmRlcl9k ZXN0cm95KGRzaV9jb25uZWN0b3ItPnBrZ19zZW5kZXIpOworCisJZHJtX2Nvbm5lY3Rvcl9jbGVh bnVwKGNvbm5lY3Rvcik7CisKKwlrZnJlZShkc2lfY29uZmlnLT5maXhlZF9tb2RlKTsKKwlrZnJl ZShkc2lfY29uZmlnKTsKK2RzaV9pbml0X2VycjA6CisJa2ZyZWUoZHNpX2Nvbm5lY3Rvcik7Cit9 CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL21kZmxkX2RzaV9vdXRwdXQuaCBi L2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvbWRmbGRfZHNpX291dHB1dC5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjZGY2NjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2dwdS9kcm0vZ21hNTAwL21kZmxkX2RzaV9vdXRwdXQuaApAQCAtMCwwICsxLDM4OSBAQAorLyoK KyAqIENvcHlyaWdodCDCqSAyMDEwIEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lv biBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWlu aW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0 aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3 aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUg cmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwg c3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0 byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRv IGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUg YWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVk aW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3Bp ZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBU SEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkg S0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBU TyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwK KyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENM QUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9O IE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9G IE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgor ICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6CisgKiBqaW0gbGl1 IDxqaW0ubGl1QGludGVsLmNvbT4KKyAqIEphY2tpZSBMaTx5YW9kb25nLmxpQGludGVsLmNvbT4K KyAqLworCisjaWZuZGVmIF9fTURGTERfRFNJX09VVFBVVF9IX18KKyNkZWZpbmUgX19NREZMRF9E U0lfT1VUUFVUX0hfXworCisjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CisjaW5jbHVkZSA8 bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2Ry bS5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgorI2luY2x1ZGUgPGRybS9kcm1fZWRpZC5o PgorCisjaW5jbHVkZSAicHNiX2Rydi5oIgorI2luY2x1ZGUgInBzYl9pbnRlbF9kcnYuaCIKKyNp bmNsdWRlICJwc2JfaW50ZWxfcmVnLmgiCisjaW5jbHVkZSAibWRmbGRfb3V0cHV0LmgiCisKKyNp bmNsdWRlIDxhc20vbXJzdC5oPgorCisjZGVmaW5lIEZMRF9NQVNLKHN0YXJ0LCBlbmQpCSgoKDEg PDwgKChzdGFydCkgLSAoZW5kKSArIDEpKSAtIDEpIDw8IChlbmQpKQorI2RlZmluZSBGTERfVkFM KHZhbCwgc3RhcnQsIGVuZCkgKCgodmFsKSA8PCAoZW5kKSkgJiBGTERfTUFTSyhzdGFydCwgZW5k KSkKKyNkZWZpbmUgRkxEX0dFVCh2YWwsIHN0YXJ0LCBlbmQpICgoKHZhbCkgJiBGTERfTUFTSyhz dGFydCwgZW5kKSkgPj4gKGVuZCkpCisjZGVmaW5lIEZMRF9NT0Qob3JpZywgdmFsLCBzdGFydCwg ZW5kKSBcCisJKCgob3JpZykgJiB+RkxEX01BU0soc3RhcnQsIGVuZCkpIHwgRkxEX1ZBTCh2YWws IHN0YXJ0LCBlbmQpKQorCisjZGVmaW5lIFJFR19GTERfTU9EKHJlZywgdmFsLCBzdGFydCwgZW5k KSBcCisJUkVHX1dSSVRFKHJlZywgRkxEX01PRChSRUdfUkVBRChyZWcpLCB2YWwsIHN0YXJ0LCBl bmQpKQorCitzdGF0aWMgaW5saW5lIGludCBSRUdJU1RFUl9GTERfV0FJVChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LCB1MzIgcmVnLAorCQl1MzIgdmFsLCBpbnQgc3RhcnQsIGludCBlbmQpCit7CisJ aW50IHQgPSAxMDAwMDA7CisKKwl3aGlsZSAoRkxEX0dFVChSRUdfUkVBRChyZWcpLCBzdGFydCwg ZW5kKSAhPSB2YWwpIHsKKwkJaWYgKC0tdCA9PSAwKQorCQkJcmV0dXJuIDE7CisJfQorCisJcmV0 dXJuIDA7Cit9CisKKyNkZWZpbmUgUkVHX0ZMRF9XQUlUKHJlZywgdmFsLCBzdGFydCwgZW5kKSBc CisJUkVHSVNURVJfRkxEX1dBSVQoZGV2LCByZWcsIHZhbCwgc3RhcnQsIGVuZCkKKworI2RlZmlu ZSBSRUdfQklUX1dBSVQocmVnLCB2YWwsIGJpdG51bSkgXAorCVJFR0lTVEVSX0ZMRF9XQUlUKGRl diwgcmVnLCB2YWwsIGJpdG51bSwgYml0bnVtKQorCisjZGVmaW5lIE1ERkxEX0RTSV9CUklHSFRO RVNTX01BWF9MRVZFTCAxMDAKKworI2lmZGVmIERFQlVHCisjZGVmaW5lIENIRUNLX1BJUEUocGlw ZSkgKHsJCQlcCisJY29uc3QgdHlwZW9mKHBpcGUpIF9fcGlwZSA9IChwaXBlKTsJXAorCUJVR19P TihfX3BpcGUgIT0gMCAmJiBfX3BpcGUgIT0gMik7CVwKKwlfX3BpcGU7CX0pCisjZWxzZQorI2Rl ZmluZSBDSEVDS19QSVBFKHBpcGUpIChwaXBlKQorI2VuZGlmCisKKy8qCisgKiBBY3R1YWwgTUlQ SUEtPk1JUElDIHJlZyBvZmZzZXQgaXMgMHg4MDAsIHZhbHVlIDB4NDAwIGlzIHZhbGlkIGZvciAw IGFuZCAyCisgKi8KKyNkZWZpbmUgUkVHX09GRlNFVChwaXBlKSAoQ0hFQ0tfUElQRShwaXBlKSAq IDB4NDAwKQorCisvKiBtZGZsZCBEU0kgY29udHJvbGxlciByZWdpc3RlcnMgKi8KKyNkZWZpbmUg TUlQSV9ERVZJQ0VfUkVBRFlfUkVHKHBpcGUpCQkoMHhiMDAwICsgUkVHX09GRlNFVChwaXBlKSkK KyNkZWZpbmUgTUlQSV9JTlRSX1NUQVRfUkVHKHBpcGUpCQkoMHhiMDA0ICsgUkVHX09GRlNFVChw aXBlKSkKKyNkZWZpbmUgTUlQSV9JTlRSX0VOX1JFRyhwaXBlKQkJCSgweGIwMDggKyBSRUdfT0ZG U0VUKHBpcGUpKQorI2RlZmluZSBNSVBJX0RTSV9GVU5DX1BSR19SRUcocGlwZSkJCSgweGIwMGMg KyBSRUdfT0ZGU0VUKHBpcGUpKQorI2RlZmluZSBNSVBJX0hTX1RYX1RJTUVPVVRfUkVHKHBpcGUp CQkoMHhiMDEwICsgUkVHX09GRlNFVChwaXBlKSkKKyNkZWZpbmUgTUlQSV9MUF9SWF9USU1FT1VU X1JFRyhwaXBlKQkJKDB4YjAxNCArIFJFR19PRkZTRVQocGlwZSkpCisjZGVmaW5lIE1JUElfVFVS Tl9BUk9VTkRfVElNRU9VVF9SRUcocGlwZSkJKDB4YjAxOCArIFJFR19PRkZTRVQocGlwZSkpCisj ZGVmaW5lIE1JUElfREVWSUNFX1JFU0VUX1RJTUVSX1JFRyhwaXBlKQkoMHhiMDFjICsgUkVHX09G RlNFVChwaXBlKSkKKyNkZWZpbmUgTUlQSV9EUElfUkVTT0xVVElPTl9SRUcocGlwZSkJCSgweGIw MjAgKyBSRUdfT0ZGU0VUKHBpcGUpKQorI2RlZmluZSBNSVBJX0RCSV9GSUZPX1RIUk9UVExFX1JF RyhwaXBlKQkoMHhiMDI0ICsgUkVHX09GRlNFVChwaXBlKSkKKyNkZWZpbmUgTUlQSV9IU1lOQ19D T1VOVF9SRUcocGlwZSkJCSgweGIwMjggKyBSRUdfT0ZGU0VUKHBpcGUpKQorI2RlZmluZSBNSVBJ X0hCUF9DT1VOVF9SRUcocGlwZSkJCSgweGIwMmMgKyBSRUdfT0ZGU0VUKHBpcGUpKQorI2RlZmlu ZSBNSVBJX0hGUF9DT1VOVF9SRUcocGlwZSkJCSgweGIwMzAgKyBSRUdfT0ZGU0VUKHBpcGUpKQor I2RlZmluZSBNSVBJX0hBQ1RJVkVfQ09VTlRfUkVHKHBpcGUpCQkoMHhiMDM0ICsgUkVHX09GRlNF VChwaXBlKSkKKyNkZWZpbmUgTUlQSV9WU1lOQ19DT1VOVF9SRUcocGlwZSkJCSgweGIwMzggKyBS RUdfT0ZGU0VUKHBpcGUpKQorI2RlZmluZSBNSVBJX1ZCUF9DT1VOVF9SRUcocGlwZSkJCSgweGIw M2MgKyBSRUdfT0ZGU0VUKHBpcGUpKQorI2RlZmluZSBNSVBJX1ZGUF9DT1VOVF9SRUcocGlwZSkJ CSgweGIwNDAgKyBSRUdfT0ZGU0VUKHBpcGUpKQorI2RlZmluZSBNSVBJX0hJR0hfTE9XX1NXSVRD SF9DT1VOVF9SRUcocGlwZSkJKDB4YjA0NCArIFJFR19PRkZTRVQocGlwZSkpCisjZGVmaW5lIE1J UElfRFBJX0NPTlRST0xfUkVHKHBpcGUpCQkoMHhiMDQ4ICsgUkVHX09GRlNFVChwaXBlKSkKKyNk ZWZpbmUgTUlQSV9EUElfREFUQV9SRUcocGlwZSkJCQkoMHhiMDRjICsgUkVHX09GRlNFVChwaXBl KSkKKyNkZWZpbmUgTUlQSV9JTklUX0NPVU5UX1JFRyhwaXBlKQkJKDB4YjA1MCArIFJFR19PRkZT RVQocGlwZSkpCisjZGVmaW5lIE1JUElfTUFYX1JFVFVSTl9QQUNLX1NJWkVfUkVHKHBpcGUpCSgw eGIwNTQgKyBSRUdfT0ZGU0VUKHBpcGUpKQorI2RlZmluZSBNSVBJX1ZJREVPX01PREVfRk9STUFU X1JFRyhwaXBlKQkoMHhiMDU4ICsgUkVHX09GRlNFVChwaXBlKSkKKyNkZWZpbmUgTUlQSV9FT1Rf RElTQUJMRV9SRUcocGlwZSkJCSgweGIwNWMgKyBSRUdfT0ZGU0VUKHBpcGUpKQorI2RlZmluZSBN SVBJX0xQX0JZVEVDTEtfUkVHKHBpcGUpCQkoMHhiMDYwICsgUkVHX09GRlNFVChwaXBlKSkKKyNk ZWZpbmUgTUlQSV9MUF9HRU5fREFUQV9SRUcocGlwZSkJCSgweGIwNjQgKyBSRUdfT0ZGU0VUKHBp cGUpKQorI2RlZmluZSBNSVBJX0hTX0dFTl9EQVRBX1JFRyhwaXBlKQkJKDB4YjA2OCArIFJFR19P RkZTRVQocGlwZSkpCisjZGVmaW5lIE1JUElfTFBfR0VOX0NUUkxfUkVHKHBpcGUpCQkoMHhiMDZj ICsgUkVHX09GRlNFVChwaXBlKSkKKyNkZWZpbmUgTUlQSV9IU19HRU5fQ1RSTF9SRUcocGlwZSkJ CSgweGIwNzAgKyBSRUdfT0ZGU0VUKHBpcGUpKQorI2RlZmluZSBNSVBJX0dFTl9GSUZPX1NUQVRf UkVHKHBpcGUpCQkoMHhiMDc0ICsgUkVHX09GRlNFVChwaXBlKSkKKyNkZWZpbmUgTUlQSV9IU19M U19EQklfRU5BQkxFX1JFRyhwaXBlKQkJKDB4YjA3OCArIFJFR19PRkZTRVQocGlwZSkpCisjZGVm aW5lIE1JUElfRFBIWV9QQVJBTV9SRUcocGlwZSkJCSgweGIwODAgKyBSRUdfT0ZGU0VUKHBpcGUp KQorI2RlZmluZSBNSVBJX0RCSV9CV19DVFJMX1JFRyhwaXBlKQkJKDB4YjA4NCArIFJFR19PRkZT RVQocGlwZSkpCisjZGVmaW5lIE1JUElfQ0xLX0xBTkVfU1dJVENIX1RJTUVfQ05UX1JFRyhwaXBl KQkoMHhiMDg4ICsgUkVHX09GRlNFVChwaXBlKSkKKworI2RlZmluZSBNSVBJX0NUUkxfUkVHKHBp cGUpCQkJKDB4YjEwNCArIFJFR19PRkZTRVQocGlwZSkpCisjZGVmaW5lIE1JUElfREFUQV9BRERf UkVHKHBpcGUpCQkJKDB4YjEwOCArIFJFR19PRkZTRVQocGlwZSkpCisjZGVmaW5lIE1JUElfREFU QV9MRU5fUkVHKHBpcGUpCQkJKDB4YjEwYyArIFJFR19PRkZTRVQocGlwZSkpCisjZGVmaW5lIE1J UElfQ01EX0FERF9SRUcocGlwZSkJCQkoMHhiMTEwICsgUkVHX09GRlNFVChwaXBlKSkKKyNkZWZp bmUgTUlQSV9DTURfTEVOX1JFRyhwaXBlKQkJCSgweGIxMTQgKyBSRUdfT0ZGU0VUKHBpcGUpKQor CisvKiBub24tdW5pZm9ybSByZWcgb2Zmc2V0ICovCisjZGVmaW5lIE1JUElfUE9SVF9DT05UUk9M KHBpcGUpCQkoQ0hFQ0tfUElQRShwaXBlKSA/IE1JUElfQyA6IE1JUEkpCisKKyNkZWZpbmUgRFNJ X0RFVklDRV9SRUFEWQkJCQkoMHgxKQorI2RlZmluZSBEU0lfUE9XRVJfU1RBVEVfVUxQU19FTlRF UgkJCSgweDIgPDwgMSkKKyNkZWZpbmUgRFNJX1BPV0VSX1NUQVRFX1VMUFNfRVhJVAkJCSgweDEg PDwgMSkKKyNkZWZpbmUgRFNJX1BPV0VSX1NUQVRFX1VMUFNfT0ZGU0VUCQkJKDB4MSkKKworCisj ZGVmaW5lIERTSV9PTkVfREFUQV9MQU5FCQkJCQkoMHgxKQorI2RlZmluZSBEU0lfVFdPX0RBVEFf TEFORQkJCQkJKDB4MikKKyNkZWZpbmUgRFNJX1RIUkVFX0RBVEFfTEFORQkJCQkJKDBYMykKKyNk ZWZpbmUgRFNJX0ZPVVJfREFUQV9MQU5FCQkJCQkoMHg0KQorI2RlZmluZSBEU0lfRFBJX1ZJUlRf Q0hBTk5FTF9PRkZTRVQJCQkoMHgzKQorI2RlZmluZSBEU0lfREJJX1ZJUlRfQ0hBTk5FTF9PRkZT RVQJCQkoMHg1KQorI2RlZmluZSBEU0lfRFBJX0NPTE9SX0ZPUk1BVF9SR0I1NjUJCQkoMHgwMSA8 PCA3KQorI2RlZmluZSBEU0lfRFBJX0NPTE9SX0ZPUk1BVF9SR0I2NjYJCQkoMHgwMiA8PCA3KQor I2RlZmluZSBEU0lfRFBJX0NPTE9SX0ZPUk1BVF9SR0I2NjZfVU5QQUNLCQkoMHgwMyA8PCA3KQor I2RlZmluZSBEU0lfRFBJX0NPTE9SX0ZPUk1BVF9SR0I4ODgJCQkoMHgwNCA8PCA3KQorI2RlZmlu ZSBEU0lfREJJX0NPTE9SX0ZPUk1BVF9PUFRJT04yCQkJKDB4MDUgPDwgMTMpCisKKyNkZWZpbmUg RFNJX0lOVFJfU1RBVEVfUlhTT1RFUlJPUgkJCUJJVCgwKQorCisjZGVmaW5lIERTSV9JTlRSX1NU QVRFX1NQTF9QS0dfU0VOVAkJCUJJVCgzMCkKKyNkZWZpbmUgRFNJX0lOVFJfU1RBVEVfVEUJCQkJ QklUKDMxKQorCisjZGVmaW5lIERTSV9IU19UWF9USU1FT1VUX01BU0sJCQkJKDB4ZmZmZmZmKQor CisjZGVmaW5lIERTSV9MUF9SWF9USU1FT1VUX01BU0sJCQkJKDB4ZmZmZmZmKQorCisjZGVmaW5l IERTSV9UVVJOX0FST1VORF9USU1FT1VUX01BU0sJCSgweDNmKQorCisjZGVmaW5lIERTSV9SRVNF VF9USU1FUl9NQVNLCQkJCSgweGZmZmYpCisKKyNkZWZpbmUgRFNJX0RCSV9GSUZPX1dNX0hBTEYJ CQkJKDB4MCkKKyNkZWZpbmUgRFNJX0RCSV9GSUZPX1dNX1FVQVJURVIJCQkJKDB4MSkKKyNkZWZp bmUgRFNJX0RCSV9GSUZPX1dNX0xPVwkJCQkJKDB4MikKKworI2RlZmluZSBEU0lfRFBJX1RJTUlO R19NQVNLCQkJCQkoMHhmZmZmKQorCisjZGVmaW5lIERTSV9JTklUX1RJTUVSX01BU0sJCQkJCSgw eGZmZmYpCisKKyNkZWZpbmUgRFNJX0RCSV9SRVRVUk5fUEFDS19TSVpFX01BU0sJCSgweDNmZikK KworI2RlZmluZSBEU0lfTFBfQllURUNMS19NQVNLCQkJCQkoMHgwZmZmZikKKworI2RlZmluZSBE U0lfSFNfQ1RSTF9HRU5fU0hPUlRfVzAJCQkoMHgwMykKKyNkZWZpbmUgRFNJX0hTX0NUUkxfR0VO X1NIT1JUX1cxCQkJKDB4MTMpCisjZGVmaW5lIERTSV9IU19DVFJMX0dFTl9TSE9SVF9XMgkJCSgw eDIzKQorI2RlZmluZSBEU0lfSFNfQ1RSTF9HRU5fUjAJCQkJCSgweDA0KQorI2RlZmluZSBEU0lf SFNfQ1RSTF9HRU5fUjEJCQkJCSgweDE0KQorI2RlZmluZSBEU0lfSFNfQ1RSTF9HRU5fUjIJCQkJ CSgweDI0KQorI2RlZmluZSBEU0lfSFNfQ1RSTF9HRU5fTE9OR19XCQkJCSgweDI5KQorI2RlZmlu ZSBEU0lfSFNfQ1RSTF9NQ1NfU0hPUlRfVzAJCQkoMHgwNSkKKyNkZWZpbmUgRFNJX0hTX0NUUkxf TUNTX1NIT1JUX1cxCQkJKDB4MTUpCisjZGVmaW5lIERTSV9IU19DVFJMX01DU19SMAkJCQkJKDB4 MDYpCisjZGVmaW5lIERTSV9IU19DVFJMX01DU19MT05HX1cJCQkJKDB4MzkpCisjZGVmaW5lIERT SV9IU19DVFJMX1ZDX09GRlNFVAkJCQkoMHgwNikKKyNkZWZpbmUgRFNJX0hTX0NUUkxfV0NfT0ZG U0VUCQkJCSgweDA4KQorCisjZGVmaW5lCURTSV9GSUZPX0dFTl9IU19EQVRBX0ZVTEwJCQlCSVQo MCkKKyNkZWZpbmUgRFNJX0ZJRk9fR0VOX0hTX0RBVEFfSEFMRl9FTVBUWQkJQklUKDEpCisjZGVm aW5lIERTSV9GSUZPX0dFTl9IU19EQVRBX0VNUFRZCQkJQklUKDIpCisjZGVmaW5lIERTSV9GSUZP X0dFTl9MUF9EQVRBX0ZVTEwJCQlCSVQoOCkKKyNkZWZpbmUgRFNJX0ZJRk9fR0VOX0xQX0RBVEFf SEFMRl9FTVBUWQkJQklUKDkpCisjZGVmaW5lIERTSV9GSUZPX0dFTl9MUF9EQVRBX0VNUFRZCQkJ QklUKDEwKQorI2RlZmluZSBEU0lfRklGT19HRU5fSFNfQ1RSTF9GVUxMCQkJQklUKDE2KQorI2Rl ZmluZSBEU0lfRklGT19HRU5fSFNfQ1RSTF9IQUxGX0VNUFRZCQlCSVQoMTcpCisjZGVmaW5lIERT SV9GSUZPX0dFTl9IU19DVFJMX0VNUFRZCQkJQklUKDE4KQorI2RlZmluZSBEU0lfRklGT19HRU5f TFBfQ1RSTF9GVUxMCQkJQklUKDI0KQorI2RlZmluZSBEU0lfRklGT19HRU5fTFBfQ1RSTF9IQUxG X0VNUFRZCQlCSVQoMjUpCisjZGVmaW5lIERTSV9GSUZPX0dFTl9MUF9DVFJMX0VNUFRZCQkJQklU KDI2KQorI2RlZmluZSBEU0lfRklGT19EQklfRU1QVFkJCQkJCUJJVCgyNykKKyNkZWZpbmUgRFNJ X0ZJRk9fRFBJX0VNUFRZCQkJCQlCSVQoMjgpCisKKyNkZWZpbmUgRFNJX0RCSV9IU19MUF9TV0lU Q0hfTUFTSwkJCSgweDEpCisKKyNkZWZpbmUgRFNJX0hTX0xQX1NXSVRDSF9DT1VOVEVSX09GRlNF VAkJKDB4MCkKKyNkZWZpbmUgRFNJX0xQX0hTX1NXSVRDSF9DT1VOVEVSX09GRlNFVAkJKDB4MTYp CisKKyNkZWZpbmUgRFNJX0RQSV9DVFJMX0hTX1NIVVRET1dOCQkJKDB4MDAwMDAwMDEpCisjZGVm aW5lIERTSV9EUElfQ1RSTF9IU19UVVJOX09OCQkJCSgweDAwMDAwMDAyKQorCisvKmRzaSBwb3dl ciBtb2RlcyovCisjZGVmaW5lIERTSV9QT1dFUl9NT0RFX0RJU1BMQVlfT04JQklUKDIpCisjZGVm aW5lIERTSV9QT1dFUl9NT0RFX05PUk1BTF9PTglCSVQoMykKKyNkZWZpbmUgRFNJX1BPV0VSX01P REVfU0xFRVBfT1VUCUJJVCg0KQorI2RlZmluZSBEU0lfUE9XRVJfTU9ERV9QQVJUSUFMX09OCUJJ VCg1KQorI2RlZmluZSBEU0lfUE9XRVJfTU9ERV9JRExFX09OCQlCSVQoNikKKworZW51bSB7CisJ TURGTERfRFNJX1ZJREVPX05PTl9CVVJTVF9NT0RFX1NZTkNfUFVMU0UgPSAxLAorCU1ERkxEX0RT SV9WSURFT19OT05fQlVSU1RfTU9ERV9TWU5DX0VWRU5UUyA9IDIsCisJTURGTERfRFNJX1ZJREVP X0JVUlNUX01PREUgPSAzLAorfTsKKworI2RlZmluZSBEU0lfRFBJX0NPTVBMRVRFX0xBU1RfTElO RQkJCUJJVCgyKQorI2RlZmluZSBEU0lfRFBJX0RJU0FCTEVfQlRBCQkJCQlCSVQoMykKKworc3Ry dWN0IG1kZmxkX2RzaV9jb25uZWN0b3Jfc3RhdGUgeworCXUzMiBtaXBpX2N0cmxfcmVnOworfTsK Kworc3RydWN0IG1kZmxkX2RzaV9lbmNvZGVyX3N0YXRlIHsKKworfTsKKworc3RydWN0IG1kZmxk X2RzaV9jb25uZWN0b3IgeworCXN0cnVjdCBwc2JfaW50ZWxfY29ubmVjdG9yIGJhc2U7CisKKwlp bnQgcGlwZTsKKwl2b2lkICpwcml2YXRlOworCXZvaWQgKnBrZ19zZW5kZXI7CisKKwkvKiBDb25u ZWN0aW9uIHN0YXR1cyAqLworCWVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgc3RhdHVzOworfTsK Kworc3RydWN0IG1kZmxkX2RzaV9lbmNvZGVyIHsKKwlzdHJ1Y3QgcHNiX2ludGVsX2VuY29kZXIg YmFzZTsKKwl2b2lkICpwcml2YXRlOworfTsKKworLyoKKyAqIERTSSBjb25maWcsIGNvbnNpc3Rz IG9mIG9uZSBEU0kgY29ubmVjdG9yLCB0d28gRFNJIGVuY29kZXJzLgorICogRFJNIHdpbGwgcGlj ayB1cCBvbiBEU0kgZW5jb2RlciBiYXNpbmcgb24gZGlmZmVyZW50cyBjb25maWdzLgorICovCitz dHJ1Y3QgbWRmbGRfZHNpX2NvbmZpZyB7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKKwlzdHJ1 Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZml4ZWRfbW9kZTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSAqbW9kZTsKKworCXN0cnVjdCBtZGZsZF9kc2lfY29ubmVjdG9yICpjb25uZWN0b3I7CisJc3Ry dWN0IG1kZmxkX2RzaV9lbmNvZGVyICplbmNvZGVyOworCisJaW50IGNoYW5nZWQ7CisKKwlpbnQg YnBwOworCWludCBsYW5lX2NvdW50OworCS8qVmlydHVhbCBjaGFubmVsIG51bWJlciBmb3IgdGhp cyBlbmNvZGVyKi8KKwlpbnQgY2hhbm5lbF9udW07CisJLyp2aWRlbyBtb2RlIGNvbmZpZ3VyZSov CisJaW50IHZpZGVvX21vZGU7CisKKwlpbnQgZHZyX2ljX2luaXRlZDsKK307CisKK3N0YXRpYyBp bmxpbmUgc3RydWN0IG1kZmxkX2RzaV9jb25uZWN0b3IgKm1kZmxkX2RzaV9jb25uZWN0b3IoCisJ CXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IHBzYl9pbnRlbF9j b25uZWN0b3IgKnBzYl9jb25uZWN0b3I7CisKKwlwc2JfY29ubmVjdG9yID0gdG9fcHNiX2ludGVs X2Nvbm5lY3Rvcihjb25uZWN0b3IpOworCisJcmV0dXJuIGNvbnRhaW5lcl9vZihwc2JfY29ubmVj dG9yLCBzdHJ1Y3QgbWRmbGRfZHNpX2Nvbm5lY3RvciwgYmFzZSk7Cit9CisKK3N0YXRpYyBpbmxp bmUgc3RydWN0IG1kZmxkX2RzaV9lbmNvZGVyICptZGZsZF9kc2lfZW5jb2RlcigKKwkJc3RydWN0 IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBwc2JfaW50ZWxfZW5jb2RlciAqcHNi X2VuY29kZXI7CisKKwlwc2JfZW5jb2RlciA9IHRvX3BzYl9pbnRlbF9lbmNvZGVyKGVuY29kZXIp OworCisJcmV0dXJuIGNvbnRhaW5lcl9vZihwc2JfZW5jb2Rlciwgc3RydWN0IG1kZmxkX2RzaV9l bmNvZGVyLCBiYXNlKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbWRmbGRfZHNpX2NvbmZp ZyAqCisJbWRmbGRfZHNpX2dldF9jb25maWcoc3RydWN0IG1kZmxkX2RzaV9jb25uZWN0b3IgKmNv bm5lY3RvcikKK3sKKwlpZiAoIWNvbm5lY3RvcikKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIChz dHJ1Y3QgbWRmbGRfZHNpX2NvbmZpZyAqKWNvbm5lY3Rvci0+cHJpdmF0ZTsKK30KKworc3RhdGlj IGlubGluZSB2b2lkICptZGZsZF9kc2lfZ2V0X3BrZ19zZW5kZXIoc3RydWN0IG1kZmxkX2RzaV9j b25maWcgKmNvbmZpZykKK3sKKwlzdHJ1Y3QgbWRmbGRfZHNpX2Nvbm5lY3RvciAqZHNpX2Nvbm5l Y3RvcjsKKworCWlmICghY29uZmlnKQorCQlyZXR1cm4gTlVMTDsKKworCWRzaV9jb25uZWN0b3Ig PSBjb25maWctPmNvbm5lY3RvcjsKKworCWlmICghZHNpX2Nvbm5lY3RvcikKKwkJcmV0dXJuIE5V TEw7CisKKwlyZXR1cm4gZHNpX2Nvbm5lY3Rvci0+cGtnX3NlbmRlcjsKK30KKworc3RhdGljIGlu bGluZSBzdHJ1Y3QgbWRmbGRfZHNpX2NvbmZpZyAqCisJbWRmbGRfZHNpX2VuY29kZXJfZ2V0X2Nv bmZpZyhzdHJ1Y3QgbWRmbGRfZHNpX2VuY29kZXIgKmVuY29kZXIpCit7CisJaWYgKCFlbmNvZGVy KQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gKHN0cnVjdCBtZGZsZF9kc2lfY29uZmlnICopZW5j b2Rlci0+cHJpdmF0ZTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbWRmbGRfZHNpX2Nvbm5l Y3RvciAqCisJbWRmbGRfZHNpX2VuY29kZXJfZ2V0X2Nvbm5lY3RvcihzdHJ1Y3QgbWRmbGRfZHNp X2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IG1kZmxkX2RzaV9jb25maWcgKmNvbmZpZzsK KworCWlmICghZW5jb2RlcikKKwkJcmV0dXJuIE5VTEw7CisKKwljb25maWcgPSBtZGZsZF9kc2lf ZW5jb2Rlcl9nZXRfY29uZmlnKGVuY29kZXIpOworCWlmICghY29uZmlnKQorCQlyZXR1cm4gTlVM TDsKKworCXJldHVybiBjb25maWctPmNvbm5lY3RvcjsKK30KKworc3RhdGljIGlubGluZSB2b2lk ICptZGZsZF9kc2lfZW5jb2Rlcl9nZXRfcGtnX3NlbmRlcigKKwkJCQlzdHJ1Y3QgbWRmbGRfZHNp X2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IG1kZmxkX2RzaV9jb25maWcgKmRzaV9jb25m aWc7CisKKwlkc2lfY29uZmlnID0gbWRmbGRfZHNpX2VuY29kZXJfZ2V0X2NvbmZpZyhlbmNvZGVy KTsKKwlpZiAoIWRzaV9jb25maWcpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIG1kZmxkX2Rz aV9nZXRfcGtnX3NlbmRlcihkc2lfY29uZmlnKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbWRm bGRfZHNpX2VuY29kZXJfZ2V0X3BpcGUoc3RydWN0IG1kZmxkX2RzaV9lbmNvZGVyICplbmNvZGVy KQoreworCXN0cnVjdCBtZGZsZF9kc2lfY29ubmVjdG9yICpjb25uZWN0b3I7CisKKwlpZiAoIWVu Y29kZXIpCisJCXJldHVybiAtMTsKKworCWNvbm5lY3RvciA9IG1kZmxkX2RzaV9lbmNvZGVyX2dl dF9jb25uZWN0b3IoZW5jb2Rlcik7CisJaWYgKCFjb25uZWN0b3IpCisJCXJldHVybiAtMTsKKwly ZXR1cm4gY29ubmVjdG9yLT5waXBlOworfQorCisvKiBFeHBvcnQgZnVuY3Rpb25zICovCitleHRl cm4gdm9pZCBtZGZsZF9kc2lfZ2VuX2ZpZm9fcmVhZHkoc3RydWN0IGRybV9kZXZpY2UgKmRldiwK KwkJCQkJdTMyIGdlbl9maWZvX3N0YXRfcmVnLCB1MzIgZmlmb19zdGF0KTsKK2V4dGVybiB2b2lk IG1kZmxkX2RzaV9icmlnaHRuZXNzX2luaXQoc3RydWN0IG1kZmxkX2RzaV9jb25maWcgKmRzaV9j b25maWcsCisJCQkJCWludCBwaXBlKTsKK2V4dGVybiB2b2lkIG1kZmxkX2RzaV9icmlnaHRuZXNz X2NvbnRyb2woc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHBpcGUsCisJCQkJCWludCBsZXZl bCk7CitleHRlcm4gdm9pZCBtZGZsZF9kc2lfb3V0cHV0X2luaXQoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwKKwkJCQkJaW50IHBpcGUsCisJCQkJCXN0cnVjdCBtZGZsZF9kc2lfY29uZmlnICpjb25m aWcsCisJCQkJCWNvbnN0IHN0cnVjdCBwYW5lbF9mdW5jcyAqcF92aWRfZnVuY3MpOworZXh0ZXJu IHZvaWQgbWRmbGRfZHNpX2NvbnRyb2xsZXJfaW5pdChzdHJ1Y3QgbWRmbGRfZHNpX2NvbmZpZyAq ZHNpX2NvbmZpZywKKwkJCQkJaW50IHBpcGUpOworCitleHRlcm4gaW50IG1kZmxkX2RzaV9nZXRf cG93ZXJfbW9kZShzdHJ1Y3QgbWRmbGRfZHNpX2NvbmZpZyAqZHNpX2NvbmZpZywKKwkJCQkJdTMy ICptb2RlLCBib29sIGhzKTsKK2V4dGVybiBpbnQgbWRmbGRfZHNpX2dldF9kaWFnbm9zdGljX3Jl c3VsdChzdHJ1Y3QgbWRmbGRfZHNpX2NvbmZpZyAqZHNpX2NvbmZpZywKKwkJCQkJdTMyICpyZXN1 bHQsIGJvb2wgaHMpOworZXh0ZXJuIGludCBtZGZsZF9kc2lfcGFuZWxfcmVzZXQoaW50IHBpcGUp OworCisjZW5kaWYgLypfX01ERkxEX0RTSV9PVVRQVVRfSF9fKi8KZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9nbWE1MDAvbWRmbGRfZHNpX3BrZ19zZW5kZXIuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9nbWE1MDAvbWRmbGRfZHNpX3BrZ19zZW5kZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi5mMTkzYWNlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2dt YTUwMC9tZGZsZF9kc2lfcGtnX3NlbmRlci5jCkBAIC0wLDAgKzEsNjk0IEBACisvKgorICogQ29w eXJpZ2h0IMKpIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhl cmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQor ICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmls ZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQg cmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMg dG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNl bnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1p dCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28s IHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBj b3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhl IG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBz dWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZU V0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBF WFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhF IEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERB TUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09O VFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4g Q09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFM SU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqIEphY2tpZSBMaTx5YW9k b25nLmxpQGludGVsLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgorCisj aW5jbHVkZSAibWRmbGRfZHNpX291dHB1dC5oIgorI2luY2x1ZGUgIm1kZmxkX2RzaV9wa2dfc2Vu ZGVyLmgiCisjaW5jbHVkZSAibWRmbGRfZHNpX2RwaS5oIgorCisjZGVmaW5lIE1ERkxEX0RTSV9S RUFEX01BWF9DT1VOVAkJNTAwMAorCitlbnVtIGRhdGFfdHlwZSB7CisJRFNJX0RUX0dFTkVSSUNf U0hPUlRfV1JJVEVfMAk9IDB4MDMsCisJRFNJX0RUX0dFTkVSSUNfU0hPUlRfV1JJVEVfMQk9IDB4 MTMsCisJRFNJX0RUX0dFTkVSSUNfU0hPUlRfV1JJVEVfMgk9IDB4MjMsCisJRFNJX0RUX0dFTkVS SUNfUkVBRF8wCQk9IDB4MDQsCisJRFNJX0RUX0dFTkVSSUNfUkVBRF8xCQk9IDB4MTQsCisJRFNJ X0RUX0dFTkVSSUNfUkVBRF8yCQk9IDB4MjQsCisJRFNJX0RUX0dFTkVSSUNfTE9OR19XUklURQk9 IDB4MjksCisJRFNJX0RUX0RDU19TSE9SVF9XUklURV8wCT0gMHgwNSwKKwlEU0lfRFRfRENTX1NI T1JUX1dSSVRFXzEJPSAweDE1LAorCURTSV9EVF9EQ1NfUkVBRAkJCT0gMHgwNiwKKwlEU0lfRFRf RENTX0xPTkdfV1JJVEUJCT0gMHgzOSwKK307CisKK2VudW0geworCU1ERkxEX0RTSV9QQU5FTF9N T0RFX1NMRUVQID0gMHgxLAorfTsKKworZW51bSB7CisJTURGTERfRFNJX1BLR19TRU5ERVJfRlJF RSA9IDB4MCwKKwlNREZMRF9EU0lfUEtHX1NFTkRFUl9CVVNZID0gMHgxLAorfTsKKworc3RhdGlj IGNvbnN0IGNoYXIgKmNvbnN0IGRzaV9lcnJvcnNbXSA9IHsKKwkiUlggU09UIEVycm9yIiwKKwki UlggU09UIFN5bmMgRXJyb3IiLAorCSJSWCBFT1QgU3luYyBFcnJvciIsCisJIlJYIEVzY2FwZSBN b2RlIEVudHJ5IEVycm9yIiwKKwkiUlggTFAgVFggU3luYyBFcnJvciIsCisJIlJYIEhTIFJlY2Vp dmUgVGltZW91dCBFcnJvciIsCisJIlJYIEZhbHNlIENvbnRyb2wgRXJyb3IiLAorCSJSWCBFQ0Mg U2luZ2xlIEJpdCBFcnJvciIsCisJIlJYIEVDQyBNdWx0aWJpdCBFcnJvciIsCisJIlJYIENoZWNr c3VtIEVycm9yIiwKKwkiUlggRFNJIERhdGEgVHlwZSBOb3QgUmVjb2duaXNlZCIsCisJIlJYIERT SSBWQyBJRCBJbnZhbGlkIiwKKwkiVFggRmFsc2UgQ29udHJvbCBFcnJvciIsCisJIlRYIEVDQyBT aW5nbGUgQml0IEVycm9yIiwKKwkiVFggRUNDIE11bHRpYml0IEVycm9yIiwKKwkiVFggQ2hlY2tz dW0gRXJyb3IiLAorCSJUWCBEU0kgRGF0YSBUeXBlIE5vdCBSZWNvZ25pc2VkIiwKKwkiVFggRFNJ IFZDIElEIGludmFsaWQiLAorCSJIaWdoIENvbnRlbnRpb24iLAorCSJMb3cgY29udGVudGlvbiIs CisJIkRQSSBGSUZPIFVuZGVyIHJ1biIsCisJIkhTIFRYIFRpbWVvdXQiLAorCSJMUCBSWCBUaW1l b3V0IiwKKwkiVHVybiBBcm91bmQgQUNLIFRpbWVvdXQiLAorCSJBQ0sgV2l0aCBObyBFcnJvciIs CisJIlJYIEludmFsaWQgVFggTGVuZ3RoIiwKKwkiUlggUHJvdCBWaW9sYXRpb24iLAorCSJIUyBH ZW5lcmljIFdyaXRlIEZJRk8gRnVsbCIsCisJIkxQIEdlbmVyaWMgV3JpdGUgRklGTyBGdWxsIiwK KwkiR2VuZXJpYyBSZWFkIERhdGEgQXZhaWwiCisJIlNwZWNpYWwgUGFja2V0IFNlbnQiLAorCSJU ZWFyaW5nIEVmZmVjdCIsCit9OworCitzdGF0aWMgaW5saW5lIGludCB3YWl0X2Zvcl9nZW5fZmlm b19lbXB0eShzdHJ1Y3QgbWRmbGRfZHNpX3BrZ19zZW5kZXIgKnNlbmRlciwKKwkJCQkJCXUzMiBt YXNrKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBzZW5kZXItPmRldjsKKwl1MzIgZ2Vu X2ZpZm9fc3RhdF9yZWcgPSBzZW5kZXItPm1pcGlfZ2VuX2ZpZm9fc3RhdF9yZWc7CisJaW50IHJl dHJ5ID0gMHhmZmZmOworCisJd2hpbGUgKHJldHJ5LS0pIHsKKwkJaWYgKChtYXNrICYgUkVHX1JF QUQoZ2VuX2ZpZm9fc3RhdF9yZWcpKSA9PSBtYXNrKQorCQkJcmV0dXJuIDA7CisJCXVkZWxheSgx MDApOworCX0KKwlEUk1fRVJST1IoImZpZm8gaXMgTk9UIGVtcHR5IDB4JTA4eFxuIiwgUkVHX1JF QUQoZ2VuX2ZpZm9fc3RhdF9yZWcpKTsKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCB3 YWl0X2Zvcl9hbGxfZmlmb3NfZW1wdHkoc3RydWN0IG1kZmxkX2RzaV9wa2dfc2VuZGVyICpzZW5k ZXIpCit7CisJcmV0dXJuIHdhaXRfZm9yX2dlbl9maWZvX2VtcHR5KHNlbmRlciwgKEJJVCgyKSB8 IEJJVCgxMCkgfCBCSVQoMTgpIHwKKwkJCQkJCUJJVCgyNikgfCBCSVQoMjcpIHwgQklUKDI4KSkp OworfQorCitzdGF0aWMgaW50IHdhaXRfZm9yX2xwX2ZpZm9zX2VtcHR5KHN0cnVjdCBtZGZsZF9k c2lfcGtnX3NlbmRlciAqc2VuZGVyKQoreworCXJldHVybiB3YWl0X2Zvcl9nZW5fZmlmb19lbXB0 eShzZW5kZXIsIChCSVQoMTApIHwgQklUKDI2KSkpOworfQorCitzdGF0aWMgaW50IHdhaXRfZm9y X2hzX2ZpZm9zX2VtcHR5KHN0cnVjdCBtZGZsZF9kc2lfcGtnX3NlbmRlciAqc2VuZGVyKQorewor CXJldHVybiB3YWl0X2Zvcl9nZW5fZmlmb19lbXB0eShzZW5kZXIsIChCSVQoMikgfCBCSVQoMTgp KSk7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX2RzaV9lcnJvcihzdHJ1Y3QgbWRmbGRfZHNpX3Br Z19zZW5kZXIgKnNlbmRlciwgdTMyIG1hc2spCit7CisJdTMyIGludHJfc3RhdF9yZWcgPSBzZW5k ZXItPm1pcGlfaW50cl9zdGF0X3JlZzsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gc2VuZGVy LT5kZXY7CisKKwlkZXZfZGJnKHNlbmRlci0+ZGV2LT5kZXYsICJIYW5kbGluZyBlcnJvciAweCUw OHhcbiIsIG1hc2spOworCisJc3dpdGNoIChtYXNrKSB7CisJY2FzZSBCSVQoMCk6CisJY2FzZSBC SVQoMSk6CisJY2FzZSBCSVQoMik6CisJY2FzZSBCSVQoMyk6CisJY2FzZSBCSVQoNCk6CisJY2Fz ZSBCSVQoNSk6CisJY2FzZSBCSVQoNik6CisJY2FzZSBCSVQoNyk6CisJY2FzZSBCSVQoOCk6CisJ Y2FzZSBCSVQoOSk6CisJY2FzZSBCSVQoMTApOgorCWNhc2UgQklUKDExKToKKwljYXNlIEJJVCgx Mik6CisJY2FzZSBCSVQoMTMpOgorCQlkZXZfZGJnKHNlbmRlci0+ZGV2LT5kZXYsICJObyBBY3Rp b24gcmVxdWlyZWRcbiIpOworCQlicmVhazsKKwljYXNlIEJJVCgxNCk6CisJCS8qd2FpdCBmb3Ig YWxsIGZpZm8gZW1wdHkqLworCQkvKndhaXRfZm9yX2FsbF9maWZvc19lbXB0eShzZW5kZXIpKi87 CisJCWJyZWFrOworCWNhc2UgQklUKDE1KToKKwkJZGV2X2RiZyhzZW5kZXItPmRldi0+ZGV2LCAi Tm8gQWN0aW9uIHJlcXVpcmVkXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBCSVQoMTYpOgorCQlicmVh azsKKwljYXNlIEJJVCgxNyk6CisJCWJyZWFrOworCWNhc2UgQklUKDE4KToKKwljYXNlIEJJVCgx OSk6CisJCWRldl9kYmcoc2VuZGVyLT5kZXYtPmRldiwgIkhpZ2gvTG93IGNvbnRlbnRpb24gZGV0 ZWN0ZWRcbiIpOworCQkvKndhaXQgZm9yIGNvbnRlbnRpb24gcmVjb3ZlcnkgdGltZSovCisJCS8q bWRlbGF5KDEwKTsqLworCQkvKndhaXQgZm9yIGFsbCBmaWZvIGVtcHR5Ki8KKwkJaWYgKDApCisJ CQl3YWl0X2Zvcl9hbGxfZmlmb3NfZW1wdHkoc2VuZGVyKTsKKwkJYnJlYWs7CisJY2FzZSBCSVQo MjApOgorCQlkZXZfZGJnKHNlbmRlci0+ZGV2LT5kZXYsICJObyBBY3Rpb24gcmVxdWlyZWRcbiIp OworCQlicmVhazsKKwljYXNlIEJJVCgyMSk6CisJCS8qd2FpdCBmb3IgYWxsIGZpZm8gZW1wdHkq LworCQkvKndhaXRfZm9yX2FsbF9maWZvc19lbXB0eShzZW5kZXIpOyovCisJCWJyZWFrOworCWNh c2UgQklUKDIyKToKKwkJYnJlYWs7CisJY2FzZSBCSVQoMjMpOgorCWNhc2UgQklUKDI0KToKKwlj YXNlIEJJVCgyNSk6CisJY2FzZSBCSVQoMjYpOgorCWNhc2UgQklUKDI3KToKKwkJZGV2X2RiZyhz ZW5kZXItPmRldi0+ZGV2LCAiSFMgR2VuIGZpZm8gZnVsbFxuIik7CisJCVJFR19XUklURShpbnRy X3N0YXRfcmVnLCBtYXNrKTsKKwkJd2FpdF9mb3JfaHNfZmlmb3NfZW1wdHkoc2VuZGVyKTsKKwkJ YnJlYWs7CisJY2FzZSBCSVQoMjgpOgorCQlkZXZfZGJnKHNlbmRlci0+ZGV2LT5kZXYsICJMUCBH ZW4gZmlmbyBmdWxsXG4iKTsKKwkJUkVHX1dSSVRFKGludHJfc3RhdF9yZWcsIG1hc2spOworCQl3 YWl0X2Zvcl9scF9maWZvc19lbXB0eShzZW5kZXIpOworCQlicmVhazsKKwljYXNlIEJJVCgyOSk6 CisJY2FzZSBCSVQoMzApOgorCWNhc2UgQklUKDMxKToKKwkJZGV2X2RiZyhzZW5kZXItPmRldi0+ ZGV2LCAiTm8gQWN0aW9uIHJlcXVpcmVkXG4iKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKG1hc2sg JiBSRUdfUkVBRChpbnRyX3N0YXRfcmVnKSkKKwkJZGV2X2RiZyhzZW5kZXItPmRldi0+ZGV2LAor CQkJCSJDYW5ub3QgY2xlYW4gaW50ZXJydXB0IDB4JTA4eFxuIiwgbWFzayk7CisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgZHNpX2Vycm9yX2hhbmRsZXIoc3RydWN0IG1kZmxkX2RzaV9wa2df c2VuZGVyICpzZW5kZXIpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHNlbmRlci0+ZGV2 OworCXUzMiBpbnRyX3N0YXRfcmVnID0gc2VuZGVyLT5taXBpX2ludHJfc3RhdF9yZWc7CisJdTMy IG1hc2s7CisJdTMyIGludHJfc3RhdDsKKwlpbnQgaTsKKwlpbnQgZXJyID0gMDsKKworCWludHJf c3RhdCA9IFJFR19SRUFEKGludHJfc3RhdF9yZWcpOworCisJZm9yIChpID0gMDsgaSA8IDMyOyBp KyspIHsKKwkJbWFzayA9ICgweDAwMDAwMDAxVUwpIDw8IGk7CisJCWlmIChpbnRyX3N0YXQgJiBt YXNrKSB7CisJCQlkZXZfZGJnKHNlbmRlci0+ZGV2LT5kZXYsICJbRFNJXTogJXNcbiIsIGRzaV9l cnJvcnNbaV0pOworCQkJZXJyID0gaGFuZGxlX2RzaV9lcnJvcihzZW5kZXIsIG1hc2spOworCQkJ aWYgKGVycikKKwkJCQlEUk1fRVJST1IoIkNhbm5vdCBoYW5kbGUgZXJyb3JcbiIpOworCQl9CisJ fQorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgc2VuZF9zaG9ydF9wa2coc3RydWN0IG1k ZmxkX2RzaV9wa2dfc2VuZGVyICpzZW5kZXIsIHU4IGRhdGFfdHlwZSwKKwkJCXU4IGNtZCwgdTgg cGFyYW0sIGJvb2wgaHMpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHNlbmRlci0+ZGV2 OworCXUzMiBjdHJsX3JlZzsKKwl1MzIgdmFsOworCXU4IHZpcnR1YWxfY2hhbm5lbCA9IDA7CisK KwlpZiAoaHMpIHsKKwkJY3RybF9yZWcgPSBzZW5kZXItPm1pcGlfaHNfZ2VuX2N0cmxfcmVnOwor CisJCS8qIEZJWE1FOiB3YWl0X2Zvcl9oc19maWZvc19lbXB0eShzZW5kZXIpOyAqLworCX0gZWxz ZSB7CisJCWN0cmxfcmVnID0gc2VuZGVyLT5taXBpX2xwX2dlbl9jdHJsX3JlZzsKKworCQkvKiBG SVhNRTogd2FpdF9mb3JfbHBfZmlmb3NfZW1wdHkoc2VuZGVyKTsgKi8KKwl9CisKKwl2YWwgPSBG TERfVkFMKHBhcmFtLCAyMywgMTYpIHwgRkxEX1ZBTChjbWQsIDE1LCA4KSB8CisJCUZMRF9WQUwo dmlydHVhbF9jaGFubmVsLCA3LCA2KSB8IEZMRF9WQUwoZGF0YV90eXBlLCA1LCAwKTsKKworCVJF R19XUklURShjdHJsX3JlZywgdmFsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNl bmRfbG9uZ19wa2coc3RydWN0IG1kZmxkX2RzaV9wa2dfc2VuZGVyICpzZW5kZXIsIHU4IGRhdGFf dHlwZSwKKwkJCXU4ICpkYXRhLCBpbnQgbGVuLCBib29sIGhzKQoreworCXN0cnVjdCBkcm1fZGV2 aWNlICpkZXYgPSBzZW5kZXItPmRldjsKKwl1MzIgY3RybF9yZWc7CisJdTMyIGRhdGFfcmVnOwor CXUzMiB2YWw7CisJdTggKnA7CisJdTggYjEsIGIyLCBiMywgYjQ7CisJdTggdmlydHVhbF9jaGFu bmVsID0gMDsKKwlpbnQgaTsKKworCWlmIChocykgeworCQljdHJsX3JlZyA9IHNlbmRlci0+bWlw aV9oc19nZW5fY3RybF9yZWc7CisJCWRhdGFfcmVnID0gc2VuZGVyLT5taXBpX2hzX2dlbl9kYXRh X3JlZzsKKworCQkvKiBGSVhNRTogd2FpdF9mb3JfaHNfZmlmb3NfZW1wdHkoc2VuZGVyKTsgKi8K Kwl9IGVsc2UgeworCQljdHJsX3JlZyA9IHNlbmRlci0+bWlwaV9scF9nZW5fY3RybF9yZWc7CisJ CWRhdGFfcmVnID0gc2VuZGVyLT5taXBpX2xwX2dlbl9kYXRhX3JlZzsKKworCQkvKiBGSVhNRTog d2FpdF9mb3JfbHBfZmlmb3NfZW1wdHkoc2VuZGVyKTsgKi8KKwl9CisKKwlwID0gZGF0YTsKKwlm b3IgKGkgPSAwOyBpIDwgbGVuIC8gNDsgaSsrKSB7CisJCWIxID0gKnArKzsKKwkJYjIgPSAqcCsr OworCQliMyA9ICpwKys7CisJCWI0ID0gKnArKzsKKworCQlSRUdfV1JJVEUoZGF0YV9yZWcsIGI0 IDw8IDI0IHwgYjMgPDwgMTYgfCBiMiA8PCA4IHwgYjEpOworCX0KKworCWkgPSBsZW4gJSA0Owor CWlmIChpKSB7CisJCWIxID0gMDsgYjIgPSAwOyBiMyA9IDA7CisKKwkJc3dpdGNoIChpKSB7CisJ CWNhc2UgMzoKKwkJCWIxID0gKnArKzsKKwkJCWIyID0gKnArKzsKKwkJCWIzID0gKnArKzsKKwkJ CWJyZWFrOworCQljYXNlIDI6CisJCQliMSA9ICpwKys7CisJCQliMiA9ICpwKys7CisJCQlicmVh azsKKwkJY2FzZSAxOgorCQkJYjEgPSAqcCsrOworCQkJYnJlYWs7CisJCX0KKworCQlSRUdfV1JJ VEUoZGF0YV9yZWcsIGIzIDw8IDE2IHwgYjIgPDwgOCB8IGIxKTsKKwl9CisKKwl2YWwgPSBGTERf VkFMKGxlbiwgMjMsIDgpIHwgRkxEX1ZBTCh2aXJ0dWFsX2NoYW5uZWwsIDcsIDYpIHwKKwkJRkxE X1ZBTChkYXRhX3R5cGUsIDUsIDApOworCisJUkVHX1dSSVRFKGN0cmxfcmVnLCB2YWwpOworCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2VuZF9wa2dfcHJlcGFyZShzdHJ1Y3QgbWRmbGRf ZHNpX3BrZ19zZW5kZXIgKnNlbmRlciwgdTggZGF0YV90eXBlLAorCQkJdTggKmRhdGEsIHUxNiBs ZW4pCit7CisJdTggY21kOworCisJc3dpdGNoIChkYXRhX3R5cGUpIHsKKwljYXNlIERTSV9EVF9E Q1NfU0hPUlRfV1JJVEVfMDoKKwljYXNlIERTSV9EVF9EQ1NfU0hPUlRfV1JJVEVfMToKKwljYXNl IERTSV9EVF9EQ1NfTE9OR19XUklURToKKwkJY21kID0gKmRhdGE7CisJCWJyZWFrOworCWRlZmF1 bHQ6CisJCXJldHVybiAwOworCX0KKworCS8qdGhpcyBwcmV2ZW50cyBvdGhlciBwYWNrYWdlIHNl bmRpbmcgd2hpbGUgZG9pbmcgbXNsZWVwKi8KKwlzZW5kZXItPnN0YXR1cyA9IE1ERkxEX0RTSV9Q S0dfU0VOREVSX0JVU1k7CisKKwkvKndhaXQgZm9yIDEyMCBtaWxsaXNlY29uZHMgaW4gY2FzZSBl eGl0X3NsZWVwX21vZGUganVzdCBiZSBzZW50Ki8KKwlpZiAodW5saWtlbHkoY21kID09IERDU19F TlRFUl9TTEVFUF9NT0RFKSkgeworCQkvKlRPRE86IHJlcGxhY2UgaXQgd2l0aCBtc2xlZXAgbGF0 ZXIqLworCQltZGVsYXkoMTIwKTsKKwl9CisKKwlpZiAodW5saWtlbHkoY21kID09IERDU19FWElU X1NMRUVQX01PREUpKSB7CisJCS8qVE9ETzogcmVwbGFjZSBpdCB3aXRoIG1zbGVlcCBsYXRlciov CisJCW1kZWxheSgxMjApOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZW5kX3Br Z19kb25lKHN0cnVjdCBtZGZsZF9kc2lfcGtnX3NlbmRlciAqc2VuZGVyLCB1OCBkYXRhX3R5cGUs CisJCQl1OCAqZGF0YSwgdTE2IGxlbikKK3sKKwl1OCBjbWQ7CisKKwlzd2l0Y2ggKGRhdGFfdHlw ZSkgeworCWNhc2UgRFNJX0RUX0RDU19TSE9SVF9XUklURV8wOgorCWNhc2UgRFNJX0RUX0RDU19T SE9SVF9XUklURV8xOgorCWNhc2UgRFNJX0RUX0RDU19MT05HX1dSSVRFOgorCQljbWQgPSAqZGF0 YTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCisJLyp1cGRhdGUgcGFu ZWwgc3RhdHVzKi8KKwlpZiAodW5saWtlbHkoY21kID09IERDU19FTlRFUl9TTEVFUF9NT0RFKSkg eworCQlzZW5kZXItPnBhbmVsX21vZGUgfD0gTURGTERfRFNJX1BBTkVMX01PREVfU0xFRVA7CisJ CS8qVE9ETzogcmVwbGFjZSBpdCB3aXRoIG1zbGVlcCBsYXRlciovCisJCW1kZWxheSgxMjApOwor CX0gZWxzZSBpZiAodW5saWtlbHkoY21kID09IERDU19FWElUX1NMRUVQX01PREUpKSB7CisJCXNl bmRlci0+cGFuZWxfbW9kZSAmPSB+TURGTERfRFNJX1BBTkVMX01PREVfU0xFRVA7CisJCS8qVE9E TzogcmVwbGFjZSBpdCB3aXRoIG1zbGVlcCBsYXRlciovCisJCW1kZWxheSgxMjApOworCX0gZWxz ZSBpZiAodW5saWtlbHkoY21kID09IERDU19TT0ZUX1JFU0VUKSkgeworCQkvKlRPRE86IHJlcGxh Y2UgaXQgd2l0aCBtc2xlZXAgbGF0ZXIqLworCQltZGVsYXkoNSk7CisJfQorCisJc2VuZGVyLT5z dGF0dXMgPSBNREZMRF9EU0lfUEtHX1NFTkRFUl9GUkVFOworCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBpbnQgc2VuZF9wa2coc3RydWN0IG1kZmxkX2RzaV9wa2dfc2VuZGVyICpzZW5kZXIsIHU4 IGRhdGFfdHlwZSwKKwkJdTggKmRhdGEsIHUxNiBsZW4sIGJvb2wgaHMpCit7CisJaW50IHJldDsK KworCS8qaGFuZGxlIERTSSBlcnJvciovCisJcmV0ID0gZHNpX2Vycm9yX2hhbmRsZXIoc2VuZGVy KTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiRXJyb3IgaGFuZGxpbmcgZmFpbGVkXG4iKTsK KwkJcmV0dXJuIC1FQUdBSU47CisJfQorCisJLyogc2VuZCBwa2cgKi8KKwlpZiAoc2VuZGVyLT5z dGF0dXMgPT0gTURGTERfRFNJX1BLR19TRU5ERVJfQlVTWSkgeworCQlEUk1fRVJST1IoInNlbmRl ciBpcyBidXN5XG4iKTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCisJcmV0ID0gc2VuZF9wa2df cHJlcGFyZShzZW5kZXIsIGRhdGFfdHlwZSwgZGF0YSwgbGVuKTsKKwlpZiAocmV0KSB7CisJCURS TV9FUlJPUigic2VuZF9wa2dfcHJlcGFyZSBlcnJvclxuIik7CisJCXJldHVybiByZXQ7CisJfQor CisJc3dpdGNoIChkYXRhX3R5cGUpIHsKKwljYXNlIERTSV9EVF9HRU5FUklDX1NIT1JUX1dSSVRF XzA6CisJY2FzZSBEU0lfRFRfR0VORVJJQ19TSE9SVF9XUklURV8xOgorCWNhc2UgRFNJX0RUX0dF TkVSSUNfU0hPUlRfV1JJVEVfMjoKKwljYXNlIERTSV9EVF9HRU5FUklDX1JFQURfMDoKKwljYXNl IERTSV9EVF9HRU5FUklDX1JFQURfMToKKwljYXNlIERTSV9EVF9HRU5FUklDX1JFQURfMjoKKwlj YXNlIERTSV9EVF9EQ1NfU0hPUlRfV1JJVEVfMDoKKwljYXNlIERTSV9EVF9EQ1NfU0hPUlRfV1JJ VEVfMToKKwljYXNlIERTSV9EVF9EQ1NfUkVBRDoKKwkJcmV0ID0gc2VuZF9zaG9ydF9wa2coc2Vu ZGVyLCBkYXRhX3R5cGUsIGRhdGFbMF0sIGRhdGFbMV0sIGhzKTsKKwkJYnJlYWs7CisJY2FzZSBE U0lfRFRfR0VORVJJQ19MT05HX1dSSVRFOgorCWNhc2UgRFNJX0RUX0RDU19MT05HX1dSSVRFOgor CQlyZXQgPSBzZW5kX2xvbmdfcGtnKHNlbmRlciwgZGF0YV90eXBlLCBkYXRhLCBsZW4sIGhzKTsK KwkJYnJlYWs7CisJfQorCisJc2VuZF9wa2dfZG9uZShzZW5kZXIsIGRhdGFfdHlwZSwgZGF0YSwg bGVuKTsKKworCS8qRklYTUU6IHNob3VsZCBJIHF1ZXJ5IGNvbXBsZXRlIGFuZCBmaWZvIGVtcHR5 IGhlcmU/Ki8KKworCXJldHVybiByZXQ7Cit9CisKK2ludCBtZGZsZF9kc2lfc2VuZF9tY3NfbG9u ZyhzdHJ1Y3QgbWRmbGRfZHNpX3BrZ19zZW5kZXIgKnNlbmRlciwgdTggKmRhdGEsCisJCQl1MzIg bGVuLCBib29sIGhzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIXNlbmRlciB8 fCAhZGF0YSB8fCAhbGVuKSB7CisJCURSTV9FUlJPUigiSW52YWxpZCBwYXJhbWV0ZXJzXG4iKTsK KwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNlbmRlci0+bG9j aywgZmxhZ3MpOworCXNlbmRfcGtnKHNlbmRlciwgRFNJX0RUX0RDU19MT05HX1dSSVRFLCBkYXRh LCBsZW4sIGhzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZW5kZXItPmxvY2ssIGZsYWdz KTsKKworCXJldHVybiAwOworfQorCitpbnQgbWRmbGRfZHNpX3NlbmRfbWNzX3Nob3J0KHN0cnVj dCBtZGZsZF9kc2lfcGtnX3NlbmRlciAqc2VuZGVyLCB1OCBjbWQsCisJCQl1OCBwYXJhbSwgdTgg cGFyYW1fbnVtLCBib29sIGhzKQoreworCXU4IGRhdGFbMl07CisJdW5zaWduZWQgbG9uZyBmbGFn czsKKwl1OCBkYXRhX3R5cGU7CisKKwlpZiAoIXNlbmRlcikgeworCQlEUk1fRVJST1IoIkludmFs aWQgcGFyYW1ldGVyXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGF0YVswXSA9IGNt ZDsKKworCWlmIChwYXJhbV9udW0pIHsKKwkJZGF0YV90eXBlID0gRFNJX0RUX0RDU19TSE9SVF9X UklURV8xOworCQlkYXRhWzFdID0gcGFyYW07CisJfSBlbHNlIHsKKwkJZGF0YV90eXBlID0gRFNJ X0RUX0RDU19TSE9SVF9XUklURV8wOworCQlkYXRhWzFdID0gMDsKKwl9CisKKwlzcGluX2xvY2tf aXJxc2F2ZSgmc2VuZGVyLT5sb2NrLCBmbGFncyk7CisJc2VuZF9wa2coc2VuZGVyLCBkYXRhX3R5 cGUsIGRhdGEsIHNpemVvZihkYXRhKSwgaHMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNl bmRlci0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBtZGZsZF9kc2lfc2Vu ZF9nZW5fc2hvcnQoc3RydWN0IG1kZmxkX2RzaV9wa2dfc2VuZGVyICpzZW5kZXIsIHU4IHBhcmFt MCwKKwkJCXU4IHBhcmFtMSwgdTggcGFyYW1fbnVtLCBib29sIGhzKQoreworCXU4IGRhdGFbMl07 CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1OCBkYXRhX3R5cGU7CisKKwlpZiAoIXNlbmRlciB8 fCBwYXJhbV9udW0gPCAwIHx8IHBhcmFtX251bSA+IDIpIHsKKwkJRFJNX0VSUk9SKCJJbnZhbGlk IHBhcmFtZXRlclxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAocGFyYW1f bnVtKSB7CisJY2FzZSAwOgorCQlkYXRhX3R5cGUgPSBEU0lfRFRfR0VORVJJQ19TSE9SVF9XUklU RV8wOworCQlkYXRhWzBdID0gMDsKKwkJZGF0YVsxXSA9IDA7CisJCWJyZWFrOworCWNhc2UgMToK KwkJZGF0YV90eXBlID0gRFNJX0RUX0dFTkVSSUNfU0hPUlRfV1JJVEVfMTsKKwkJZGF0YVswXSA9 IHBhcmFtMDsKKwkJZGF0YVsxXSA9IDA7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJZGF0YV90eXBl ID0gRFNJX0RUX0dFTkVSSUNfU0hPUlRfV1JJVEVfMjsKKwkJZGF0YVswXSA9IHBhcmFtMDsKKwkJ ZGF0YVsxXSA9IHBhcmFtMTsKKwkJYnJlYWs7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNl bmRlci0+bG9jaywgZmxhZ3MpOworCXNlbmRfcGtnKHNlbmRlciwgZGF0YV90eXBlLCBkYXRhLCBz aXplb2YoZGF0YSksIGhzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZW5kZXItPmxvY2ss IGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitpbnQgbWRmbGRfZHNpX3NlbmRfZ2VuX2xvbmco c3RydWN0IG1kZmxkX2RzaV9wa2dfc2VuZGVyICpzZW5kZXIsIHU4ICpkYXRhLAorCQkJdTMyIGxl biwgYm9vbCBocykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFzZW5kZXIgfHwg IWRhdGEgfHwgIWxlbikgeworCQlEUk1fRVJST1IoIkludmFsaWQgcGFyYW1ldGVyc1xuIik7CisJ CXJldHVybiAtRUlOVkFMOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZzZW5kZXItPmxvY2ss IGZsYWdzKTsKKwlzZW5kX3BrZyhzZW5kZXIsIERTSV9EVF9HRU5FUklDX0xPTkdfV1JJVEUsIGRh dGEsIGxlbiwgaHMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbmRlci0+bG9jaywgZmxh Z3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19yZWFkX3BhbmVsX2RhdGEoc3Ry dWN0IG1kZmxkX2RzaV9wa2dfc2VuZGVyICpzZW5kZXIsIHU4IGRhdGFfdHlwZSwKKwkJCXU4ICpk YXRhLCB1MTYgbGVuLCB1MzIgKmRhdGFfb3V0LCB1MTYgbGVuX291dCwgYm9vbCBocykKK3sKKwl1 bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBzZW5kZXItPmRl djsKKwlpbnQgaTsKKwl1MzIgZ2VuX2RhdGFfcmVnOworCWludCByZXRyeSA9IE1ERkxEX0RTSV9S RUFEX01BWF9DT1VOVDsKKworCWlmICghc2VuZGVyIHx8ICFkYXRhX291dCB8fCAhbGVuX291dCkg eworCQlEUk1fRVJST1IoIkludmFsaWQgcGFyYW1ldGVyc1xuIik7CisJCXJldHVybiAtRUlOVkFM OworCX0KKworCS8qKgorCSAqIGRvIHJlYWRpbmcuCisJICogMCkgc2VuZCBvdXQgZ2VuZXJpYyBy ZWFkIHJlcXVlc3QKKwkgKiAxKSBwb2xsaW5nIHJlYWQgZGF0YSBhdmFpbCBpbnRlcnJ1cHQKKwkg KiAyKSByZWFkIGRhdGEKKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2VuZGVyLT5sb2NrLCBm bGFncyk7CisKKwlSRUdfV1JJVEUoc2VuZGVyLT5taXBpX2ludHJfc3RhdF9yZWcsIEJJVCgyOSkp OworCisJaWYgKChSRUdfUkVBRChzZW5kZXItPm1pcGlfaW50cl9zdGF0X3JlZykgJiBCSVQoMjkp KSkKKwkJRFJNX0VSUk9SKCJDYW4gTk9UIGNsZWFuIHJlYWQgZGF0YSB2YWxpZCBpbnRlcnJ1cHRc biIpOworCisJLypzZW5kIG91dCByZWFkIHJlcXVlc3QqLworCXNlbmRfcGtnKHNlbmRlciwgZGF0 YV90eXBlLCBkYXRhLCBsZW4sIGhzKTsKKworCS8qcG9sbGluZyByZWFkIGRhdGEgYXZhaWwgaW50 ZXJydXB0Ki8KKwl3aGlsZSAocmV0cnkgJiYgIShSRUdfUkVBRChzZW5kZXItPm1pcGlfaW50cl9z dGF0X3JlZykgJiBCSVQoMjkpKSkgeworCQl1ZGVsYXkoMTAwKTsKKwkJcmV0cnktLTsKKwl9CisK KwlpZiAoIXJldHJ5KSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbmRlci0+bG9jaywg ZmxhZ3MpOworCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwl9CisKKwlSRUdfV1JJVEUoc2VuZGVyLT5t aXBpX2ludHJfc3RhdF9yZWcsIEJJVCgyOSkpOworCisJLypyZWFkIGRhdGEqLworCWlmIChocykK KwkJZ2VuX2RhdGFfcmVnID0gc2VuZGVyLT5taXBpX2hzX2dlbl9kYXRhX3JlZzsKKwllbHNlCisJ CWdlbl9kYXRhX3JlZyA9IHNlbmRlci0+bWlwaV9scF9nZW5fZGF0YV9yZWc7CisKKwlmb3IgKGkg PSAwOyBpIDwgbGVuX291dDsgaSsrKQorCQkqKGRhdGFfb3V0ICsgaSkgPSBSRUdfUkVBRChnZW5f ZGF0YV9yZWcpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VuZGVyLT5sb2NrLCBmbGFn cyk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG1kZmxkX2RzaV9yZWFkX21jcyhzdHJ1Y3QgbWRm bGRfZHNpX3BrZ19zZW5kZXIgKnNlbmRlciwgdTggY21kLAorCQl1MzIgKmRhdGEsIHUxNiBsZW4s IGJvb2wgaHMpCit7CisJaWYgKCFzZW5kZXIgfHwgIWRhdGEgfHwgIWxlbikgeworCQlEUk1fRVJS T1IoIkludmFsaWQgcGFyYW1ldGVyc1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJl dHVybiBfX3JlYWRfcGFuZWxfZGF0YShzZW5kZXIsIERTSV9EVF9EQ1NfUkVBRCwgJmNtZCwgMSwK KwkJCQlkYXRhLCBsZW4sIGhzKTsKK30KKworaW50IG1kZmxkX2RzaV9wa2dfc2VuZGVyX2luaXQo c3RydWN0IG1kZmxkX2RzaV9jb25uZWN0b3IgKmRzaV9jb25uZWN0b3IsCisJCQkJCQkJCWludCBw aXBlKQoreworCXN0cnVjdCBtZGZsZF9kc2lfcGtnX3NlbmRlciAqcGtnX3NlbmRlcjsKKwlzdHJ1 Y3QgbWRmbGRfZHNpX2NvbmZpZyAqZHNpX2NvbmZpZyA9CisJCQkJbWRmbGRfZHNpX2dldF9jb25m aWcoZHNpX2Nvbm5lY3Rvcik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRzaV9jb25maWct PmRldjsKKwl1MzIgbWlwaV92YWwgPSAwOworCisJaWYgKCFkc2lfY29ubmVjdG9yKSB7CisJCURS TV9FUlJPUigiSW52YWxpZCBwYXJhbWV0ZXJcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisK Kwlwa2dfc2VuZGVyID0gZHNpX2Nvbm5lY3Rvci0+cGtnX3NlbmRlcjsKKworCWlmICghcGtnX3Nl bmRlciB8fCBJU19FUlIocGtnX3NlbmRlcikpIHsKKwkJcGtnX3NlbmRlciA9IGt6YWxsb2Moc2l6 ZW9mKHN0cnVjdCBtZGZsZF9kc2lfcGtnX3NlbmRlciksCisJCQkJCQkJCUdGUF9LRVJORUwpOwor CQlpZiAoIXBrZ19zZW5kZXIpIHsKKwkJCURSTV9FUlJPUigiQ3JlYXRlIERTSSBwa2cgc2VuZGVy IGZhaWxlZFxuIik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQlkc2lfY29ubmVjdG9yLT5w a2dfc2VuZGVyID0gKHZvaWQgKilwa2dfc2VuZGVyOworCX0KKworCXBrZ19zZW5kZXItPmRldiA9 IGRldjsKKwlwa2dfc2VuZGVyLT5kc2lfY29ubmVjdG9yID0gZHNpX2Nvbm5lY3RvcjsKKwlwa2df c2VuZGVyLT5waXBlID0gcGlwZTsKKwlwa2dfc2VuZGVyLT5wa2dfbnVtID0gMDsKKwlwa2dfc2Vu ZGVyLT5wYW5lbF9tb2RlID0gMDsKKwlwa2dfc2VuZGVyLT5zdGF0dXMgPSBNREZMRF9EU0lfUEtH X1NFTkRFUl9GUkVFOworCisJLyppbml0IHJlZ3MqLworCWlmIChwaXBlID09IDApIHsKKwkJcGtn X3NlbmRlci0+ZHBsbF9yZWcgPSBNUlNUX0RQTExfQTsKKwkJcGtnX3NlbmRlci0+ZHNwY250cl9y ZWcgPSBEU1BBQ05UUjsKKwkJcGtnX3NlbmRlci0+cGlwZWNvbmZfcmVnID0gUElQRUFDT05GOwor CQlwa2dfc2VuZGVyLT5kc3BsaW5vZmZfcmVnID0gRFNQQUxJTk9GRjsKKwkJcGtnX3NlbmRlci0+ ZHNwc3VyZl9yZWcgPSBEU1BBU1VSRjsKKwkJcGtnX3NlbmRlci0+cGlwZXN0YXRfcmVnID0gUElQ RUFTVEFUOworCX0gZWxzZSBpZiAocGlwZSA9PSAyKSB7CisJCXBrZ19zZW5kZXItPmRwbGxfcmVn ID0gTVJTVF9EUExMX0E7CisJCXBrZ19zZW5kZXItPmRzcGNudHJfcmVnID0gRFNQQ0NOVFI7CisJ CXBrZ19zZW5kZXItPnBpcGVjb25mX3JlZyA9IFBJUEVDQ09ORjsKKwkJcGtnX3NlbmRlci0+ZHNw bGlub2ZmX3JlZyA9IERTUENMSU5PRkY7CisJCXBrZ19zZW5kZXItPmRzcHN1cmZfcmVnID0gRFNQ Q1NVUkY7CisJCXBrZ19zZW5kZXItPnBpcGVzdGF0X3JlZyA9IFBJUEVDU1RBVDsKKwl9CisKKwlw a2dfc2VuZGVyLT5taXBpX2ludHJfc3RhdF9yZWcgPSBNSVBJX0lOVFJfU1RBVF9SRUcocGlwZSk7 CisJcGtnX3NlbmRlci0+bWlwaV9scF9nZW5fZGF0YV9yZWcgPSBNSVBJX0xQX0dFTl9EQVRBX1JF RyhwaXBlKTsKKwlwa2dfc2VuZGVyLT5taXBpX2hzX2dlbl9kYXRhX3JlZyA9IE1JUElfSFNfR0VO X0RBVEFfUkVHKHBpcGUpOworCXBrZ19zZW5kZXItPm1pcGlfbHBfZ2VuX2N0cmxfcmVnID0gTUlQ SV9MUF9HRU5fQ1RSTF9SRUcocGlwZSk7CisJcGtnX3NlbmRlci0+bWlwaV9oc19nZW5fY3RybF9y ZWcgPSBNSVBJX0hTX0dFTl9DVFJMX1JFRyhwaXBlKTsKKwlwa2dfc2VuZGVyLT5taXBpX2dlbl9m aWZvX3N0YXRfcmVnID0gTUlQSV9HRU5fRklGT19TVEFUX1JFRyhwaXBlKTsKKwlwa2dfc2VuZGVy LT5taXBpX2RhdGFfYWRkcl9yZWcgPSBNSVBJX0RBVEFfQUREX1JFRyhwaXBlKTsKKwlwa2dfc2Vu ZGVyLT5taXBpX2RhdGFfbGVuX3JlZyA9IE1JUElfREFUQV9MRU5fUkVHKHBpcGUpOworCXBrZ19z ZW5kZXItPm1pcGlfY21kX2FkZHJfcmVnID0gTUlQSV9DTURfQUREX1JFRyhwaXBlKTsKKwlwa2df c2VuZGVyLT5taXBpX2NtZF9sZW5fcmVnID0gTUlQSV9DTURfTEVOX1JFRyhwaXBlKTsKKworCS8q aW5pdCBsb2NrKi8KKwlzcGluX2xvY2tfaW5pdCgmcGtnX3NlbmRlci0+bG9jayk7CisKKwlpZiAo bWRmbGRfZ2V0X3BhbmVsX3R5cGUoZGV2LCBwaXBlKSAhPSBUQzM1ODc2WCkgeworCQkvKioKKwkJ ICogRm9yIHZpZGVvIG1vZGUsIGRvbid0IGVuYWJsZSBEUEkgdGltaW5nIG91dHB1dCBoZXJlLAor CQkgKiB3aWxsIGluaXQgdGhlIERQSSB0aW1pbmcgb3V0cHV0IGR1cmluZyBtb2RlIHNldHRpbmcu CisJCSAqLworCQltaXBpX3ZhbCA9IFBBU1NfRlJPTV9TUEhZX1RPX0FGRSB8IFNFTF9GTE9QUEVE X0hTVFg7CisKKwkJaWYgKHBpcGUgPT0gMCkKKwkJCW1pcGlfdmFsIHw9IDB4MjsKKworCQlSRUdf V1JJVEUoTUlQSV9QT1JUX0NPTlRST0wocGlwZSksIG1pcGlfdmFsKTsKKwkJUkVHX1JFQUQoTUlQ SV9QT1JUX0NPTlRST0wocGlwZSkpOworCisJCS8qIGRvIGRzaSBjb250cm9sbGVyIGluaXQgKi8K KwkJbWRmbGRfZHNpX2NvbnRyb2xsZXJfaW5pdChkc2lfY29uZmlnLCBwaXBlKTsKKwl9CisKKwly ZXR1cm4gMDsKK30KKwordm9pZCBtZGZsZF9kc2lfcGtnX3NlbmRlcl9kZXN0cm95KHN0cnVjdCBt ZGZsZF9kc2lfcGtnX3NlbmRlciAqc2VuZGVyKQoreworCWlmICghc2VuZGVyIHx8IElTX0VSUihz ZW5kZXIpKQorCQlyZXR1cm47CisKKwkvKmZyZWUqLworCWtmcmVlKHNlbmRlcik7Cit9CisKKwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9tZGZsZF9kc2lfcGtnX3NlbmRlci5o IGIvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9tZGZsZF9kc2lfcGtnX3NlbmRlci5oCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1OWNkN2UKLS0tIC9kZXYvbnVsbAorKysgYi9k cml2ZXJzL2dwdS9kcm0vZ21hNTAwL21kZmxkX2RzaV9wa2dfc2VuZGVyLmgKQEAgLTAsMCArMSw5 MiBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDEwIEludGVsIENvcnBvcmF0aW9uCisgKgorICog UGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJz b24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBk b2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBT b2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9u CisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlz dHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdh cmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVy bmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAq CisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGlj ZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGlu IGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4K KyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5U WSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1Qg TElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZF TlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBG T1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g QU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJP TSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBP UiBPVEhFUgorICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6Cisg KiBKYWNraWUgTGk8eWFvZG9uZy5saUBpbnRlbC5jb20+CisgKi8KKyNpZm5kZWYgX19NREZMRF9E U0lfUEtHX1NFTkRFUl9IX18KKyNkZWZpbmUgX19NREZMRF9EU0lfUEtHX1NFTkRFUl9IX18KKwor I2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKworI2RlZmluZSBNREZMRF9NQVhfRENTX1BBUkFN CTgKKworc3RydWN0IG1kZmxkX2RzaV9wa2dfc2VuZGVyIHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2OworCXN0cnVjdCBtZGZsZF9kc2lfY29ubmVjdG9yICpkc2lfY29ubmVjdG9yOworCXUzMiBz dGF0dXM7CisJdTMyIHBhbmVsX21vZGU7CisKKwlpbnQgcGlwZTsKKworCXNwaW5sb2NrX3QgbG9j azsKKworCXUzMiBwa2dfbnVtOworCisJLyogUmVnaXN0ZXJzICovCisJdTMyIGRwbGxfcmVnOwor CXUzMiBkc3BjbnRyX3JlZzsKKwl1MzIgcGlwZWNvbmZfcmVnOworCXUzMiBwaXBlc3RhdF9yZWc7 CisJdTMyIGRzcGxpbm9mZl9yZWc7CisJdTMyIGRzcHN1cmZfcmVnOworCisJdTMyIG1pcGlfaW50 cl9zdGF0X3JlZzsKKwl1MzIgbWlwaV9scF9nZW5fZGF0YV9yZWc7CisJdTMyIG1pcGlfaHNfZ2Vu X2RhdGFfcmVnOworCXUzMiBtaXBpX2xwX2dlbl9jdHJsX3JlZzsKKwl1MzIgbWlwaV9oc19nZW5f Y3RybF9yZWc7CisJdTMyIG1pcGlfZ2VuX2ZpZm9fc3RhdF9yZWc7CisJdTMyIG1pcGlfZGF0YV9h ZGRyX3JlZzsKKwl1MzIgbWlwaV9kYXRhX2xlbl9yZWc7CisJdTMyIG1pcGlfY21kX2FkZHJfcmVn OworCXUzMiBtaXBpX2NtZF9sZW5fcmVnOworfTsKKworLyogRENTIGRlZmluaXRpb25zICovCisj ZGVmaW5lIERDU19TT0ZUX1JFU0VUCQkJMHgwMQorI2RlZmluZSBEQ1NfRU5URVJfU0xFRVBfTU9E RQkJMHgxMAorI2RlZmluZSBEQ1NfRVhJVF9TTEVFUF9NT0RFCQkweDExCisjZGVmaW5lIERDU19T RVRfRElTUExBWV9PRkYJCTB4MjgKKyNkZWZpbmUgRENTX1NFVF9ESVNQTEFZX09OCQkweDI5Cisj ZGVmaW5lIERDU19TRVRfQ09MVU1OX0FERFJFU1MJCTB4MmEKKyNkZWZpbmUgRENTX1NFVF9QQUdF X0FERFJFU1MJCTB4MmIKKyNkZWZpbmUgRENTX1dSSVRFX01FTV9TVEFSVAkJMHgyYworI2RlZmlu ZSBEQ1NfU0VUX1RFQVJfT0ZGCQkweDM0CisjZGVmaW5lIERDU19TRVRfVEVBUl9PTgkJCTB4MzUK KworZXh0ZXJuIGludCBtZGZsZF9kc2lfcGtnX3NlbmRlcl9pbml0KHN0cnVjdCBtZGZsZF9kc2lf Y29ubmVjdG9yICpkc2lfY29ubmVjdG9yLAorCQkJCQlpbnQgcGlwZSk7CitleHRlcm4gdm9pZCBt ZGZsZF9kc2lfcGtnX3NlbmRlcl9kZXN0cm95KHN0cnVjdCBtZGZsZF9kc2lfcGtnX3NlbmRlciAq c2VuZGVyKTsKK2ludCBtZGZsZF9kc2lfc2VuZF9tY3Nfc2hvcnQoc3RydWN0IG1kZmxkX2RzaV9w a2dfc2VuZGVyICpzZW5kZXIsIHU4IGNtZCwKKwkJCQkJdTggcGFyYW0sIHU4IHBhcmFtX251bSwg Ym9vbCBocyk7CitpbnQgbWRmbGRfZHNpX3NlbmRfbWNzX2xvbmcoc3RydWN0IG1kZmxkX2RzaV9w a2dfc2VuZGVyICpzZW5kZXIsIHU4ICpkYXRhLAorCQkJCQl1MzIgbGVuLCBib29sIGhzKTsKK2lu dCBtZGZsZF9kc2lfc2VuZF9nZW5fc2hvcnQoc3RydWN0IG1kZmxkX2RzaV9wa2dfc2VuZGVyICpz ZW5kZXIsIHU4IHBhcmFtMCwKKwkJCQkJdTggcGFyYW0xLCB1OCBwYXJhbV9udW0sIGJvb2wgaHMp OworaW50IG1kZmxkX2RzaV9zZW5kX2dlbl9sb25nKHN0cnVjdCBtZGZsZF9kc2lfcGtnX3NlbmRl ciAqc2VuZGVyLCB1OCAqZGF0YSwKKwkJCQkJdTMyIGxlbiwgYm9vbCBocyk7CisvKiBSZWFkIGlu dGVyZmFjZXMgKi8KK2ludCBtZGZsZF9kc2lfcmVhZF9tY3Moc3RydWN0IG1kZmxkX2RzaV9wa2df c2VuZGVyICpzZW5kZXIsIHU4IGNtZCwKKwkJdTMyICpkYXRhLCB1MTYgbGVuLCBib29sIGhzKTsK KworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL21kZmxkX2ludGVs X2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvbWRmbGRfaW50ZWxfZGlzcGxheS5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ZTVhZjUKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL21kZmxkX2ludGVsX2Rpc3BsYXkuYwpAQCAt MCwwICsxLDExOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgw4LCqSAyMDA2LTIwMDcgSW50ZWwgQ29y cG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBj b25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24g MiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICog VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVs LCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBt b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFt OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisg KiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNB LgorICoKKyAqIEF1dGhvcnM6CisgKglFcmljIEFuaG9sdCA8ZXJpY0BhbmhvbHQubmV0PgorICov CisKKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+ CisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgInBzYl9pbnRlbF9yZWcuaCIKKyNp bmNsdWRlICJwc2JfaW50ZWxfZGlzcGxheS5oIgorI2luY2x1ZGUgImZyYW1lYnVmZmVyLmgiCisj aW5jbHVkZSAibWRmbGRfb3V0cHV0LmgiCisjaW5jbHVkZSAibWRmbGRfZHNpX291dHB1dC5oIgor CisvKiBIYXJkY29kZWQgY3VycmVudGx5ICovCitzdGF0aWMgaW50IGtzZWwgPSBLU0VMX0NSWVNU QUxfMTk7CisKK3N0cnVjdCBwc2JfaW50ZWxfcmFuZ2VfdCB7CisJaW50IG1pbiwgbWF4OworfTsK Kworc3RydWN0IG1yc3RfbGltaXRfdCB7CisJc3RydWN0IHBzYl9pbnRlbF9yYW5nZV90IGRvdCwg bSwgcDE7Cit9OworCitzdHJ1Y3QgbXJzdF9jbG9ja190IHsKKwkvKiBkZXJpdmVkIHZhbHVlcyAq LworCWludCBkb3Q7CisJaW50IG07CisJaW50IHAxOworfTsKKworI2RlZmluZSBDT1VOVF9NQVgg MHgxMDAwMDAwMAorCit2b2lkIG1kZmxkV2FpdEZvclBpcGVEaXNhYmxlKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIGludCBwaXBlKQoreworCWludCBjb3VudCwgdGVtcDsKKwl1MzIgcGlwZWNvbmZf cmVnID0gUElQRUFDT05GOworCisJc3dpdGNoIChwaXBlKSB7CisJY2FzZSAwOgorCQlicmVhazsK KwljYXNlIDE6CisJCXBpcGVjb25mX3JlZyA9IFBJUEVCQ09ORjsKKwkJYnJlYWs7CisJY2FzZSAy OgorCQlwaXBlY29uZl9yZWcgPSBQSVBFQ0NPTkY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURS TV9FUlJPUigiSWxsZWdhbCBQaXBlIE51bWJlci5cbiIpOworCQlyZXR1cm47CisJfQorCisJLyog RklYTUUgSkxJVTdfUE8gKi8KKwlwc2JfaW50ZWxfd2FpdF9mb3JfdmJsYW5rKGRldik7CisJcmV0 dXJuOworCisJLyogV2FpdCBmb3IgZm9yIHRoZSBwaXBlIGRpc2FibGUgdG8gdGFrZSBlZmZlY3Qu ICovCisJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgQ09VTlRfTUFYOyBjb3VudCsrKSB7CisJCXRl bXAgPSBSRUdfUkVBRChwaXBlY29uZl9yZWcpOworCQlpZiAoKHRlbXAgJiBQSVBFQUNPTkZfUElQ RV9TVEFURSkgPT0gMCkKKwkJCWJyZWFrOworCX0KK30KKwordm9pZCBtZGZsZFdhaXRGb3JQaXBl RW5hYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwaXBlKQoreworCWludCBjb3VudCwg dGVtcDsKKwl1MzIgcGlwZWNvbmZfcmVnID0gUElQRUFDT05GOworCisJc3dpdGNoIChwaXBlKSB7 CisJY2FzZSAwOgorCQlicmVhazsKKwljYXNlIDE6CisJCXBpcGVjb25mX3JlZyA9IFBJUEVCQ09O RjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlwaXBlY29uZl9yZWcgPSBQSVBFQ0NPTkY7CisJCWJy ZWFrOworCWRlZmF1bHQ6CisJCURSTV9FUlJPUigiSWxsZWdhbCBQaXBlIE51bWJlci5cbiIpOwor CQlyZXR1cm47CisJfQorCisJLyogRklYTUUgSkxJVTdfUE8gKi8KKwlwc2JfaW50ZWxfd2FpdF9m b3JfdmJsYW5rKGRldik7CisJcmV0dXJuOworCisJLyogV2FpdCBmb3IgZm9yIHRoZSBwaXBlIGVu YWJsZSB0byB0YWtlIGVmZmVjdC4gKi8KKwlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBDT1VOVF9N QVg7IGNvdW50KyspIHsKKwkJdGVtcCA9IFJFR19SRUFEKHBpcGVjb25mX3JlZyk7CisJCWlmICgo dGVtcCAmIFBJUEVBQ09ORl9QSVBFX1NUQVRFKSA9PSAxKQorCQkJYnJlYWs7CisJfQorfQorCitz dGF0aWMgdm9pZCBwc2JfaW50ZWxfY3J0Y19wcmVwYXJlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykK K3sKKwlzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzICpjcnRjX2Z1bmNzID0gY3J0Yy0+aGVs cGVyX3ByaXZhdGU7CisJY3J0Y19mdW5jcy0+ZHBtcyhjcnRjLCBEUk1fTU9ERV9EUE1TX09GRik7 Cit9CisKK3N0YXRpYyB2b2lkIHBzYl9pbnRlbF9jcnRjX2NvbW1pdChzdHJ1Y3QgZHJtX2NydGMg KmNydGMpCit7CisJc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyAqY3J0Y19mdW5jcyA9IGNy dGMtPmhlbHBlcl9wcml2YXRlOworCWNydGNfZnVuY3MtPmRwbXMoY3J0YywgRFJNX01PREVfRFBN U19PTik7Cit9CisKK3N0YXRpYyBib29sIHBzYl9pbnRlbF9jcnRjX21vZGVfZml4dXAoc3RydWN0 IGRybV9jcnRjICpjcnRjLAorCQkJCSAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJ CQkJICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwlyZXR1cm4g dHJ1ZTsKK30KKworLyoqCisgKiBSZXR1cm4gdGhlIHBpcGUgY3VycmVudGx5IGNvbm5lY3RlZCB0 byB0aGUgcGFuZWwgZml0dGVyLAorICogb3IgLTEgaWYgdGhlIHBhbmVsIGZpdHRlciBpcyBub3Qg cHJlc2VudCBvciBub3QgaW4gdXNlCisgKi8KK3N0YXRpYyBpbnQgcHNiX2ludGVsX3BhbmVsX2Zp dHRlcl9waXBlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJdTMyIHBmaXRfY29udHJvbDsK KworCXBmaXRfY29udHJvbCA9IFJFR19SRUFEKFBGSVRfQ09OVFJPTCk7CisKKwkvKiBTZWUgaWYg dGhlIHBhbmVsIGZpdHRlciBpcyBpbiB1c2UgKi8KKwlpZiAoKHBmaXRfY29udHJvbCAmIFBGSVRf RU5BQkxFKSA9PSAwKQorCQlyZXR1cm4gLTE7CisKKwkvKiA5NjUgY2FuIHBsYWNlIHBhbmVsIGZp dHRlciBvbiBlaXRoZXIgcGlwZSAqLworCXJldHVybiAocGZpdF9jb250cm9sID4+IDI5KSAmIDB4 MzsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fZGV2aWNlIGdsb2JsZV9kZXY7CisKK3ZvaWQgbWRm bGRfX2ludGVsX3BsYW5lX3NldF9hbHBoYShpbnQgZW5hYmxlKQoreworCXN0cnVjdCBkcm1fZGV2 aWNlICpkZXYgPSAmZ2xvYmxlX2RldjsKKwlpbnQgZHNwY250cl9yZWcgPSBEU1BBQ05UUjsKKwl1 MzIgZHNwY250cjsKKworCWRzcGNudHIgPSBSRUdfUkVBRChkc3BjbnRyX3JlZyk7CisKKwlpZiAo ZW5hYmxlKSB7CisJCWRzcGNudHIgJj0gfkRJU1BQTEFORV8zMkJQUF9OT19BTFBIQTsKKwkJZHNw Y250ciB8PSBESVNQUExBTkVfMzJCUFA7CisJfSBlbHNlIHsKKwkJZHNwY250ciAmPSB+RElTUFBM QU5FXzMyQlBQOworCQlkc3BjbnRyIHw9IERJU1BQTEFORV8zMkJQUF9OT19BTFBIQTsKKwl9CisK KwlSRUdfV1JJVEUoZHNwY250cl9yZWcsIGRzcGNudHIpOworfQorCitzdGF0aWMgaW50IGNoZWNr X2ZiKHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKQoreworCWlmICghZmIpCisJCXJldHVybiAw OworCisJc3dpdGNoIChmYi0+Yml0c19wZXJfcGl4ZWwpIHsKKwljYXNlIDg6CisJY2FzZSAxNjoK KwljYXNlIDI0OgorCWNhc2UgMzI6CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCURSTV9FUlJP UigiVW5rbm93biBjb2xvciBkZXB0aFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKwor c3RhdGljIGludCBtZGZsZF9faW50ZWxfcGlwZV9zZXRfYmFzZShzdHJ1Y3QgZHJtX2NydGMgKmNy dGMsIGludCB4LCBpbnQgeSwKKwkJCQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpvbGRfZmIpCit7 CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwkvKiBzdHJ1Y3QgZHJtX2k5 MTVfbWFzdGVyX3ByaXZhdGUgKm1hc3Rlcl9wcml2OyAqLworCXN0cnVjdCBwc2JfaW50ZWxfY3J0 YyAqcHNiX2ludGVsX2NydGMgPSB0b19wc2JfaW50ZWxfY3J0YyhjcnRjKTsKKwlzdHJ1Y3QgcHNi X2ZyYW1lYnVmZmVyICpwc2JmYiA9IHRvX3BzYl9mYihjcnRjLT5mYik7CisJaW50IHBpcGUgPSBw c2JfaW50ZWxfY3J0Yy0+cGlwZTsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0LCBvZmZzZXQ7CisJaW50 IGRzcGxpbm9mZiA9IERTUEFMSU5PRkY7CisJaW50IGRzcHN1cmYgPSBEU1BBU1VSRjsKKwlpbnQg ZHNwc3RyaWRlID0gRFNQQVNUUklERTsKKwlpbnQgZHNwY250cl9yZWcgPSBEU1BBQ05UUjsKKwl1 MzIgZHNwY250cjsKKwlpbnQgcmV0OworCisJbWVtY3B5KCZnbG9ibGVfZGV2LCBkZXYsIHNpemVv ZihzdHJ1Y3QgZHJtX2RldmljZSkpOworCisJZGV2X2RiZyhkZXYtPmRldiwgInBpcGUgPSAweCV4 LlxuIiwgcGlwZSk7CisKKwkvKiBubyBmYiBib3VuZCAqLworCWlmICghY3J0Yy0+ZmIpIHsKKwkJ ZGV2X2RiZyhkZXYtPmRldiwgIk5vIEZCIGJvdW5kXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJ cmV0ID0gY2hlY2tfZmIoY3J0Yy0+ZmIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlz d2l0Y2ggKHBpcGUpIHsKKwljYXNlIDA6CisJCWRzcGxpbm9mZiA9IERTUEFMSU5PRkY7CisJCWJy ZWFrOworCWNhc2UgMToKKwkJZHNwbGlub2ZmID0gRFNQQkxJTk9GRjsKKwkJZHNwc3VyZiA9IERT UEJTVVJGOworCQlkc3BzdHJpZGUgPSBEU1BCU1RSSURFOworCQlkc3BjbnRyX3JlZyA9IERTUEJD TlRSOworCQlicmVhazsKKwljYXNlIDI6CisJCWRzcGxpbm9mZiA9IERTUENMSU5PRkY7CisJCWRz cHN1cmYgPSBEU1BDU1VSRjsKKwkJZHNwc3RyaWRlID0gRFNQQ1NUUklERTsKKwkJZHNwY250cl9y ZWcgPSBEU1BDQ05UUjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJRFJNX0VSUk9SKCJJbGxlZ2Fs IFBpcGUgTnVtYmVyLlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghZ21hX3Bv d2VyX2JlZ2luKGRldiwgdHJ1ZSkpCisJCXJldHVybiAwOworCisJc3RhcnQgPSBwc2JmYi0+Z3R0 LT5vZmZzZXQ7CisJb2Zmc2V0ID0geSAqIGNydGMtPmZiLT5waXRjaGVzWzBdICsgeCAqIChjcnRj LT5mYi0+Yml0c19wZXJfcGl4ZWwgLyA4KTsKKworCVJFR19XUklURShkc3BzdHJpZGUsIGNydGMt PmZiLT5waXRjaGVzWzBdKTsKKwlkc3BjbnRyID0gUkVHX1JFQUQoZHNwY250cl9yZWcpOworCWRz cGNudHIgJj0gfkRJU1BQTEFORV9QSVhGT1JNQVRfTUFTSzsKKworCXN3aXRjaCAoY3J0Yy0+ZmIt PmJpdHNfcGVyX3BpeGVsKSB7CisJY2FzZSA4OgorCQlkc3BjbnRyIHw9IERJU1BQTEFORV84QlBQ OworCQlicmVhazsKKwljYXNlIDE2OgorCQlpZiAoY3J0Yy0+ZmItPmRlcHRoID09IDE1KQorCQkJ ZHNwY250ciB8PSBESVNQUExBTkVfMTVfMTZCUFA7CisJCWVsc2UKKwkJCWRzcGNudHIgfD0gRElT UFBMQU5FXzE2QlBQOworCQlicmVhazsKKwljYXNlIDI0OgorCWNhc2UgMzI6CisJCWRzcGNudHIg fD0gRElTUFBMQU5FXzMyQlBQX05PX0FMUEhBOworCQlicmVhazsKKwl9CisJUkVHX1dSSVRFKGRz cGNudHJfcmVnLCBkc3BjbnRyKTsKKworCWRldl9kYmcoZGV2LT5kZXYsICJXcml0aW5nIGJhc2Ug JTA4bFggJTA4bFggJWQgJWRcbiIsCisJCQkJCQlzdGFydCwgb2Zmc2V0LCB4LCB5KTsKKwlSRUdf V1JJVEUoZHNwbGlub2ZmLCBvZmZzZXQpOworCVJFR19SRUFEKGRzcGxpbm9mZik7CisJUkVHX1dS SVRFKGRzcHN1cmYsIHN0YXJ0KTsKKwlSRUdfUkVBRChkc3BzdXJmKTsKKworCWdtYV9wb3dlcl9l bmQoZGV2KTsKKworCXJldHVybiAwOworfQorCisvKgorICogRGlzYWJsZSB0aGUgcGlwZSwgcGxh bmUgYW5kIHBsbC4KKyAqCisgKi8KK3ZvaWQgbWRmbGRfZGlzYWJsZV9jcnRjKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsIGludCBwaXBlKQoreworCWludCBkcGxsX3JlZyA9IE1SU1RfRFBMTF9BOwor CWludCBkc3BjbnRyX3JlZyA9IERTUEFDTlRSOworCWludCBkc3BiYXNlX3JlZyA9IE1SU1RfRFNQ QUJBU0U7CisJaW50IHBpcGVjb25mX3JlZyA9IFBJUEVBQ09ORjsKKwl1MzIgdGVtcDsKKworCWRl dl9kYmcoZGV2LT5kZXYsICJwaXBlID0gJWRcbiIsIHBpcGUpOworCisKKwlzd2l0Y2ggKHBpcGUp IHsKKwljYXNlIDA6CisJCWJyZWFrOworCWNhc2UgMToKKwkJZHBsbF9yZWcgPSBNREZMRF9EUExM X0I7CisJCWRzcGNudHJfcmVnID0gRFNQQkNOVFI7CisJCWRzcGJhc2VfcmVnID0gRFNQQlNVUkY7 CisJCXBpcGVjb25mX3JlZyA9IFBJUEVCQ09ORjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlkcGxs X3JlZyA9IE1SU1RfRFBMTF9BOworCQlkc3BjbnRyX3JlZyA9IERTUENDTlRSOworCQlkc3BiYXNl X3JlZyA9IE1ERkxEX0RTUENCQVNFOworCQlwaXBlY29uZl9yZWcgPSBQSVBFQ0NPTkY7CisJCWJy ZWFrOworCWRlZmF1bHQ6CisJCURSTV9FUlJPUigiSWxsZWdhbCBQaXBlIE51bWJlci5cbiIpOwor CQlyZXR1cm47CisJfQorCisJaWYgKHBpcGUgIT0gMSkKKwkJbWRmbGRfZHNpX2dlbl9maWZvX3Jl YWR5KGRldiwgTUlQSV9HRU5fRklGT19TVEFUX1JFRyhwaXBlKSwKKwkJCQlIU19DVFJMX0ZJRk9f RU1QVFkgfCBIU19EQVRBX0ZJRk9fRU1QVFkpOworCisJLyogRGlzYWJsZSBkaXNwbGF5IHBsYW5l ICovCisJdGVtcCA9IFJFR19SRUFEKGRzcGNudHJfcmVnKTsKKwlpZiAoKHRlbXAgJiBESVNQTEFZ X1BMQU5FX0VOQUJMRSkgIT0gMCkgeworCQlSRUdfV1JJVEUoZHNwY250cl9yZWcsCisJCQkgIHRl bXAgJiB+RElTUExBWV9QTEFORV9FTkFCTEUpOworCQkvKiBGbHVzaCB0aGUgcGxhbmUgY2hhbmdl cyAqLworCQlSRUdfV1JJVEUoZHNwYmFzZV9yZWcsIFJFR19SRUFEKGRzcGJhc2VfcmVnKSk7CisJ CVJFR19SRUFEKGRzcGJhc2VfcmVnKTsKKwl9CisKKwkvKiBGSVhNRV9KTElVNyBNREZMRF9QTyBy ZXZpc2l0ICovCisKKwkvKiBOZXh0LCBkaXNhYmxlIGRpc3BsYXkgcGlwZXMgKi8KKwl0ZW1wID0g UkVHX1JFQUQocGlwZWNvbmZfcmVnKTsKKwlpZiAoKHRlbXAgJiBQSVBFQUNPTkZfRU5BQkxFKSAh PSAwKSB7CisJCXRlbXAgJj0gflBJUEVBQ09ORl9FTkFCTEU7CisJCXRlbXAgfD0gUElQRUNPTkZf UExBTkVfT0ZGIHwgUElQRUNPTkZfQ1VSU09SX09GRjsKKwkJUkVHX1dSSVRFKHBpcGVjb25mX3Jl ZywgdGVtcCk7CisJCVJFR19SRUFEKHBpcGVjb25mX3JlZyk7CisKKwkJLyogV2FpdCBmb3IgZm9y IHRoZSBwaXBlIGRpc2FibGUgdG8gdGFrZSBlZmZlY3QuICovCisJCW1kZmxkV2FpdEZvclBpcGVE aXNhYmxlKGRldiwgcGlwZSk7CisJfQorCisJdGVtcCA9IFJFR19SRUFEKGRwbGxfcmVnKTsKKwlp ZiAodGVtcCAmIERQTExfVkNPX0VOQUJMRSkgeworCQlpZiAoKHBpcGUgIT0gMSAmJgorCQkJISgo UkVHX1JFQUQoUElQRUFDT05GKSB8IFJFR19SRUFEKFBJUEVDQ09ORikpCisJCQkJJiBQSVBFQUNP TkZfRU5BQkxFKSkgfHwgcGlwZSA9PSAxKSB7CisJCQl0ZW1wICY9IH4oRFBMTF9WQ09fRU5BQkxF KTsKKwkJCVJFR19XUklURShkcGxsX3JlZywgdGVtcCk7CisJCQlSRUdfUkVBRChkcGxsX3JlZyk7 CisJCQkvKiBXYWl0IGZvciB0aGUgY2xvY2tzIHRvIHR1cm4gb2ZmLiAqLworCQkJLyogRklYTUVf TURGTEQgUE8gbWF5IG5lZWQgbW9yZSBkZWxheSAqLworCQkJdWRlbGF5KDUwMCk7CisKKwkJCWlm ICghKHRlbXAgJiBNREZMRF9QV1JfR0FURV9FTikpIHsKKwkJCQkvKiBnYXRpbmcgcG93ZXIgb2Yg RFBMTCAqLworCQkJCVJFR19XUklURShkcGxsX3JlZywgdGVtcCB8IE1ERkxEX1BXUl9HQVRFX0VO KTsKKwkJCQkvKiBGSVhNRV9NREZMRCBQTyAtIGNoYW5nZSA1MDAgdG8gMSBhZnRlciBQTyAqLwor CQkJCXVkZWxheSg1MDAwKTsKKwkJCX0KKwkJfQorCX0KKworfQorCisvKioKKyAqIFNldHMgdGhl IHBvd2VyIG1hbmFnZW1lbnQgbW9kZSBvZiB0aGUgcGlwZSBhbmQgcGxhbmUuCisgKgorICogVGhp cyBjb2RlIHNob3VsZCBwcm9iYWJseSBncm93IHN1cHBvcnQgZm9yIHR1cm5pbmcgdGhlIGN1cnNv ciBvZmYgYW5kIGJhY2sKKyAqIG9uIGFwcHJvcHJpYXRlbHkgYXQgdGhlIHNhbWUgdGltZSBhcyB3 ZSdyZSB0dXJuaW5nIHRoZSBwaXBlIG9mZi9vbi4KKyAqLworc3RhdGljIHZvaWQgbWRmbGRfY3J0 Y19kcG1zKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgaW50IG1vZGUpCit7CisJc3RydWN0IGRybV9k ZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJp diA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IHBzYl9pbnRlbF9jcnRjICpwc2JfaW50ZWxf Y3J0YyA9IHRvX3BzYl9pbnRlbF9jcnRjKGNydGMpOworCWludCBwaXBlID0gcHNiX2ludGVsX2Ny dGMtPnBpcGU7CisJaW50IGRwbGxfcmVnID0gTVJTVF9EUExMX0E7CisJaW50IGRzcGNudHJfcmVn ID0gRFNQQUNOVFI7CisJaW50IGRzcGJhc2VfcmVnID0gTVJTVF9EU1BBQkFTRTsKKwlpbnQgcGlw ZWNvbmZfcmVnID0gUElQRUFDT05GOworCXUzMiBwaXBlc3RhdF9yZWcgPSBQSVBFQVNUQVQ7CisJ dTMyIHBpcGVjb25mID0gZGV2X3ByaXYtPnBpcGVjb25mW3BpcGVdOworCXUzMiB0ZW1wOworCWJv b2wgZW5hYmxlZDsKKwlpbnQgdGltZW91dCA9IDA7CisKKwlkZXZfZGJnKGRldi0+ZGV2LCAibW9k ZSA9ICVkLCBwaXBlID0gJWRcbiIsIG1vZGUsIHBpcGUpOworCisvKiBGSVhNRV9KTElVNyBNREZM RF9QTyByZXBsYWNlZCB3LyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uICovCisvKiBtZGZsZF9kYmlf ZHBtcyAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHBpcGUsIGJvb2wgZW5hYmxlZCkgKi8K KworCXN3aXRjaCAocGlwZSkgeworCWNhc2UgMDoKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlkcGxs X3JlZyA9IERQTExfQjsKKwkJZHNwY250cl9yZWcgPSBEU1BCQ05UUjsKKwkJZHNwYmFzZV9yZWcg PSBNUlNUX0RTUEJCQVNFOworCQlwaXBlY29uZl9yZWcgPSBQSVBFQkNPTkY7CisJCWRwbGxfcmVn ID0gTURGTERfRFBMTF9COworCQlicmVhazsKKwljYXNlIDI6CisJCWRwbGxfcmVnID0gTVJTVF9E UExMX0E7CisJCWRzcGNudHJfcmVnID0gRFNQQ0NOVFI7CisJCWRzcGJhc2VfcmVnID0gTURGTERf RFNQQ0JBU0U7CisJCXBpcGVjb25mX3JlZyA9IFBJUEVDQ09ORjsKKwkJcGlwZXN0YXRfcmVnID0g UElQRUNTVEFUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEUk1fRVJST1IoIklsbGVnYWwgUGlw ZSBOdW1iZXIuXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghZ21hX3Bvd2VyX2JlZ2luKGRl diwgdHJ1ZSkpCisJCXJldHVybjsKKworCS8qIFhYWDogV2hlbiBvdXIgb3V0cHV0cyBhcmUgYWxs IHVuYXdhcmUgb2YgRFBNUyBtb2RlcyBvdGhlciB0aGFuIG9mZgorCSAqIGFuZCBvbiwgd2Ugc2hv dWxkIG1hcCB0aG9zZSBtb2RlcyB0byBEUk1fTU9ERV9EUE1TX09GRiBpbiB0aGUgQ1JUQy4KKwkg Ki8KKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIERSTV9NT0RFX0RQTVNfT046CisJY2FzZSBEUk1f TU9ERV9EUE1TX1NUQU5EQlk6CisJY2FzZSBEUk1fTU9ERV9EUE1TX1NVU1BFTkQ6CisJCS8qIEVu YWJsZSB0aGUgRFBMTCAqLworCQl0ZW1wID0gUkVHX1JFQUQoZHBsbF9yZWcpOworCisJCWlmICgo dGVtcCAmIERQTExfVkNPX0VOQUJMRSkgPT0gMCkgeworCQkJLyogV2hlbiB1bmdhdGluZyBwb3dl ciBvZiBEUExMLCBuZWVkcyB0byB3YWl0IDAuNXVzCisJCQkgICBiZWZvcmUgZW5hYmxlIHRoZSBW Q08gKi8KKwkJCWlmICh0ZW1wICYgTURGTERfUFdSX0dBVEVfRU4pIHsKKwkJCQl0ZW1wICY9IH5N REZMRF9QV1JfR0FURV9FTjsKKwkJCQlSRUdfV1JJVEUoZHBsbF9yZWcsIHRlbXApOworCQkJCS8q IEZJWE1FX01ERkxEIFBPIC0gY2hhbmdlIDUwMCB0byAxIGFmdGVyIFBPICovCisJCQkJdWRlbGF5 KDUwMCk7CisJCQl9CisKKwkJCVJFR19XUklURShkcGxsX3JlZywgdGVtcCk7CisJCQlSRUdfUkVB RChkcGxsX3JlZyk7CisJCQkvKiBGSVhNRV9NREZMRCBQTyAtIGNoYW5nZSA1MDAgdG8gMSBhZnRl ciBQTyAqLworCQkJdWRlbGF5KDUwMCk7CisKKwkJCVJFR19XUklURShkcGxsX3JlZywgdGVtcCB8 IERQTExfVkNPX0VOQUJMRSk7CisJCQlSRUdfUkVBRChkcGxsX3JlZyk7CisKKwkJCS8qKgorCQkJ ICogd2FpdCBmb3IgRFNJIFBMTCB0byBsb2NrCisJCQkgKiBOT1RFOiBvbmx5IG5lZWQgdG8gcG9s bCBzdGF0dXMgb2YgcGlwZSAwIGFuZCBwaXBlIDEsCisJCQkgKiBzaW5jZSBib3RoIE1JUEkgcGlw ZXMgc2hhcmUgdGhlIHNhbWUgUExMLgorCQkJICovCisJCQl3aGlsZSAoKHBpcGUgIT0gMikgJiYg KHRpbWVvdXQgPCAyMDAwMCkgJiYKKwkJCSAgIShSRUdfUkVBRChwaXBlY29uZl9yZWcpICYgUElQ RUNPTkZfRFNJUExMX0xPQ0spKSB7CisJCQkJdWRlbGF5KDE1MCk7CisJCQkJdGltZW91dCsrOwor CQkJfQorCQl9CisKKwkJLyogRW5hYmxlIHRoZSBwbGFuZSAqLworCQl0ZW1wID0gUkVHX1JFQUQo ZHNwY250cl9yZWcpOworCQlpZiAoKHRlbXAgJiBESVNQTEFZX1BMQU5FX0VOQUJMRSkgPT0gMCkg eworCQkJUkVHX1dSSVRFKGRzcGNudHJfcmVnLAorCQkJCXRlbXAgfCBESVNQTEFZX1BMQU5FX0VO QUJMRSk7CisJCQkvKiBGbHVzaCB0aGUgcGxhbmUgY2hhbmdlcyAqLworCQkJUkVHX1dSSVRFKGRz cGJhc2VfcmVnLCBSRUdfUkVBRChkc3BiYXNlX3JlZykpOworCQl9CisKKwkJLyogRW5hYmxlIHRo ZSBwaXBlICovCisJCXRlbXAgPSBSRUdfUkVBRChwaXBlY29uZl9yZWcpOworCQlpZiAoKHRlbXAg JiBQSVBFQUNPTkZfRU5BQkxFKSA9PSAwKSB7CisJCQlSRUdfV1JJVEUocGlwZWNvbmZfcmVnLCBw aXBlY29uZik7CisKKwkJCS8qIFdhaXQgZm9yIGZvciB0aGUgcGlwZSBlbmFibGUgdG8gdGFrZSBl ZmZlY3QuICovCisJCQltZGZsZFdhaXRGb3JQaXBlRW5hYmxlKGRldiwgcGlwZSk7CisJCX0KKwor CQkvKndvcmthcm91bmQgZm9yIHNpZ2h0aW5nIDM3NDE3MDEgUmFuZG9tIFggYmxhbmsgZGlzcGxh eSovCisJCS8qcGVyZm9ybSB3L2EgaW4gdmlkZW8gbW9kZSBvbmx5IG9uIHBpcGUgQSBvciBDKi8K KwkJaWYgKHBpcGUgPT0gMCB8fCBwaXBlID09IDIpIHsKKwkJCVJFR19XUklURShwaXBlc3RhdF9y ZWcsIFJFR19SRUFEKHBpcGVzdGF0X3JlZykpOworCQkJbXNsZWVwKDEwMCk7CisJCQlpZiAoUElQ RV9WQkxBTktfU1RBVFVTICYgUkVHX1JFQUQocGlwZXN0YXRfcmVnKSkKKwkJCQlkZXZfZGJnKGRl di0+ZGV2LCAiT0siKTsKKwkJCWVsc2UgeworCQkJCWRldl9kYmcoZGV2LT5kZXYsICJTVFVDSyEh ISEiKTsKKwkJCQkvKnNodXRkb3duIGNvbnRyb2xsZXIqLworCQkJCXRlbXAgPSBSRUdfUkVBRChk c3BjbnRyX3JlZyk7CisJCQkJUkVHX1dSSVRFKGRzcGNudHJfcmVnLAorCQkJCQkJdGVtcCAmIH5E SVNQTEFZX1BMQU5FX0VOQUJMRSk7CisJCQkJUkVHX1dSSVRFKGRzcGJhc2VfcmVnLCBSRUdfUkVB RChkc3BiYXNlX3JlZykpOworCQkJCS8qbWRmbGRfZHNpX2RwaV9zaHV0X2Rvd24oZGV2LCBwaXBl KTsqLworCQkJCVJFR19XUklURSgweGIwNDgsIDEpOworCQkJCW1zbGVlcCgxMDApOworCQkJCXRl bXAgPSBSRUdfUkVBRChwaXBlY29uZl9yZWcpOworCQkJCXRlbXAgJj0gflBJUEVBQ09ORl9FTkFC TEU7CisJCQkJUkVHX1dSSVRFKHBpcGVjb25mX3JlZywgdGVtcCk7CisJCQkJbXNsZWVwKDEwMCk7 IC8qd2FpdCBmb3IgcGlwZSBkaXNhYmxlKi8KKwkJCQlSRUdfV1JJVEUoTUlQSV9ERVZJQ0VfUkVB RFlfUkVHKHBpcGUpLCAwKTsKKwkJCQltc2xlZXAoMTAwKTsKKwkJCQlSRUdfV1JJVEUoMHhiMDA0 LCBSRUdfUkVBRCgweGIwMDQpKTsKKwkJCQkvKiB0cnkgdG8gYnJpbmcgdGhlIGNvbnRyb2xsZXIg YmFjayB1cCBhZ2FpbiovCisJCQkJUkVHX1dSSVRFKE1JUElfREVWSUNFX1JFQURZX1JFRyhwaXBl KSwgMSk7CisJCQkJdGVtcCA9IFJFR19SRUFEKGRzcGNudHJfcmVnKTsKKwkJCQlSRUdfV1JJVEUo ZHNwY250cl9yZWcsCisJCQkJCQl0ZW1wIHwgRElTUExBWV9QTEFORV9FTkFCTEUpOworCQkJCVJF R19XUklURShkc3BiYXNlX3JlZywgUkVHX1JFQUQoZHNwYmFzZV9yZWcpKTsKKwkJCQkvKm1kZmxk X2RzaV9kcGlfdHVybl9vbihkZXYsIHBpcGUpOyovCisJCQkJUkVHX1dSSVRFKDB4YjA0OCwgMik7 CisJCQkJbXNsZWVwKDEwMCk7CisJCQkJdGVtcCA9IFJFR19SRUFEKHBpcGVjb25mX3JlZyk7CisJ CQkJdGVtcCB8PSBQSVBFQUNPTkZfRU5BQkxFOworCQkJCVJFR19XUklURShwaXBlY29uZl9yZWcs IHRlbXApOworCQkJfQorCQl9CisKKwkJcHNiX2ludGVsX2NydGNfbG9hZF9sdXQoY3J0Yyk7CisK KwkJLyogR2l2ZSB0aGUgb3ZlcmxheSBzY2FsZXIgYSBjaGFuY2UgdG8gZW5hYmxlCisJCSAgIGlm IGl0J3Mgb24gdGhpcyBwaXBlICovCisJCS8qIHBzYl9pbnRlbF9jcnRjX2RwbXNfdmlkZW8oY3J0 YywgdHJ1ZSk7IFRPRE8gKi8KKworCQlicmVhazsKKwljYXNlIERSTV9NT0RFX0RQTVNfT0ZGOgor CQkvKiBHaXZlIHRoZSBvdmVybGF5IHNjYWxlciBhIGNoYW5jZSB0byBkaXNhYmxlCisJCSAqIGlm IGl0J3Mgb24gdGhpcyBwaXBlICovCisJCS8qIHBzYl9pbnRlbF9jcnRjX2RwbXNfdmlkZW8oY3J0 YywgRkFMU0UpOyBUT0RPICovCisJCWlmIChwaXBlICE9IDEpCisJCQltZGZsZF9kc2lfZ2VuX2Zp Zm9fcmVhZHkoZGV2LAorCQkJCU1JUElfR0VOX0ZJRk9fU1RBVF9SRUcocGlwZSksCisJCQkJSFNf Q1RSTF9GSUZPX0VNUFRZIHwgSFNfREFUQV9GSUZPX0VNUFRZKTsKKworCQkvKiBEaXNhYmxlIHRo ZSBWR0EgcGxhbmUgdGhhdCB3ZSBuZXZlciB1c2UgKi8KKwkJUkVHX1dSSVRFKFZHQUNOVFJMLCBW R0FfRElTUF9ESVNBQkxFKTsKKworCQkvKiBEaXNhYmxlIGRpc3BsYXkgcGxhbmUgKi8KKwkJdGVt cCA9IFJFR19SRUFEKGRzcGNudHJfcmVnKTsKKwkJaWYgKCh0ZW1wICYgRElTUExBWV9QTEFORV9F TkFCTEUpICE9IDApIHsKKwkJCVJFR19XUklURShkc3BjbnRyX3JlZywKKwkJCQkgIHRlbXAgJiB+ RElTUExBWV9QTEFORV9FTkFCTEUpOworCQkJLyogRmx1c2ggdGhlIHBsYW5lIGNoYW5nZXMgKi8K KwkJCVJFR19XUklURShkc3BiYXNlX3JlZywgUkVHX1JFQUQoZHNwYmFzZV9yZWcpKTsKKwkJCVJF R19SRUFEKGRzcGJhc2VfcmVnKTsKKwkJfQorCisJCS8qIE5leHQsIGRpc2FibGUgZGlzcGxheSBw aXBlcyAqLworCQl0ZW1wID0gUkVHX1JFQUQocGlwZWNvbmZfcmVnKTsKKwkJaWYgKCh0ZW1wICYg UElQRUFDT05GX0VOQUJMRSkgIT0gMCkgeworCQkJdGVtcCAmPSB+UElQRUFDT05GX0VOQUJMRTsK KwkJCXRlbXAgfD0gUElQRUNPTkZfUExBTkVfT0ZGIHwgUElQRUNPTkZfQ1VSU09SX09GRjsKKwkJ CVJFR19XUklURShwaXBlY29uZl9yZWcsIHRlbXApOworCQkJUkVHX1JFQUQocGlwZWNvbmZfcmVn KTsKKworCQkJLyogV2FpdCBmb3IgZm9yIHRoZSBwaXBlIGRpc2FibGUgdG8gdGFrZSBlZmZlY3Qu ICovCisJCQltZGZsZFdhaXRGb3JQaXBlRGlzYWJsZShkZXYsIHBpcGUpOworCQl9CisKKwkJdGVt cCA9IFJFR19SRUFEKGRwbGxfcmVnKTsKKwkJaWYgKHRlbXAgJiBEUExMX1ZDT19FTkFCTEUpIHsK KwkJCWlmICgocGlwZSAhPSAxICYmICEoKFJFR19SRUFEKFBJUEVBQ09ORikKKwkJCQl8IFJFR19S RUFEKFBJUEVDQ09ORikpICYgUElQRUFDT05GX0VOQUJMRSkpCisJCQkJCXx8IHBpcGUgPT0gMSkg eworCQkJCXRlbXAgJj0gfihEUExMX1ZDT19FTkFCTEUpOworCQkJCVJFR19XUklURShkcGxsX3Jl ZywgdGVtcCk7CisJCQkJUkVHX1JFQUQoZHBsbF9yZWcpOworCQkJCS8qIFdhaXQgZm9yIHRoZSBj bG9ja3MgdG8gdHVybiBvZmYuICovCisJCQkJLyogRklYTUVfTURGTEQgUE8gbWF5IG5lZWQgbW9y ZSBkZWxheSAqLworCQkJCXVkZWxheSg1MDApOworCQkJfQorCQl9CisJCWJyZWFrOworCX0KKwll bmFibGVkID0gY3J0Yy0+ZW5hYmxlZCAmJiBtb2RlICE9IERSTV9NT0RFX0RQTVNfT0ZGOworCWdt YV9wb3dlcl9lbmQoZGV2KTsKK30KKworCisjZGVmaW5lIE1ERkxEX0xJTVRfRFBMTF8xOQkgICAg MAorI2RlZmluZSBNREZMRF9MSU1UX0RQTExfMjUJICAgIDEKKyNkZWZpbmUgTURGTERfTElNVF9E UExMXzgzCSAgICAyCisjZGVmaW5lIE1ERkxEX0xJTVRfRFBMTF8xMDAJICAgIDMKKyNkZWZpbmUg TURGTERfTElNVF9EU0lQTExfMTkJICAgIDQKKyNkZWZpbmUgTURGTERfTElNVF9EU0lQTExfMjUJ ICAgIDUKKyNkZWZpbmUgTURGTERfTElNVF9EU0lQTExfODMJICAgIDYKKyNkZWZpbmUgTURGTERf TElNVF9EU0lQTExfMTAwCSAgICA3CisKKyNkZWZpbmUgTURGTERfRE9UX01JTgkJICAxOTc1MAor I2RlZmluZSBNREZMRF9ET1RfTUFYCQkgIDEyMDAwMAorI2RlZmluZSBNREZMRF9EUExMX01fTUlO XzE5CSAgICAxMTMKKyNkZWZpbmUgTURGTERfRFBMTF9NX01BWF8xOQkgICAgMTU1CisjZGVmaW5l IE1ERkxEX0RQTExfUDFfTUlOXzE5CSAgICAyCisjZGVmaW5lIE1ERkxEX0RQTExfUDFfTUFYXzE5 CSAgICAxMAorI2RlZmluZSBNREZMRF9EUExMX01fTUlOXzI1CSAgICAxMDEKKyNkZWZpbmUgTURG TERfRFBMTF9NX01BWF8yNQkgICAgMTMwCisjZGVmaW5lIE1ERkxEX0RQTExfUDFfTUlOXzI1CSAg ICAyCisjZGVmaW5lIE1ERkxEX0RQTExfUDFfTUFYXzI1CSAgICAxMAorI2RlZmluZSBNREZMRF9E UExMX01fTUlOXzgzCSAgICA2NAorI2RlZmluZSBNREZMRF9EUExMX01fTUFYXzgzCSAgICA2NAor I2RlZmluZSBNREZMRF9EUExMX1AxX01JTl84MwkgICAgMgorI2RlZmluZSBNREZMRF9EUExMX1Ax X01BWF84MwkgICAgMgorI2RlZmluZSBNREZMRF9EUExMX01fTUlOXzEwMAkgICAgNjQKKyNkZWZp bmUgTURGTERfRFBMTF9NX01BWF8xMDAJICAgIDY0CisjZGVmaW5lIE1ERkxEX0RQTExfUDFfTUlO XzEwMAkgICAgMgorI2RlZmluZSBNREZMRF9EUExMX1AxX01BWF8xMDAJICAgIDIKKyNkZWZpbmUg TURGTERfRFNJUExMX01fTUlOXzE5CSAgICAxMzEKKyNkZWZpbmUgTURGTERfRFNJUExMX01fTUFY XzE5CSAgICAxNzUKKyNkZWZpbmUgTURGTERfRFNJUExMX1AxX01JTl8xOQkgICAgMworI2RlZmlu ZSBNREZMRF9EU0lQTExfUDFfTUFYXzE5CSAgICA4CisjZGVmaW5lIE1ERkxEX0RTSVBMTF9NX01J Tl8yNQkgICAgOTcKKyNkZWZpbmUgTURGTERfRFNJUExMX01fTUFYXzI1CSAgICAxNDAKKyNkZWZp bmUgTURGTERfRFNJUExMX1AxX01JTl8yNQkgICAgMworI2RlZmluZSBNREZMRF9EU0lQTExfUDFf TUFYXzI1CSAgICA5CisjZGVmaW5lIE1ERkxEX0RTSVBMTF9NX01JTl84MwkgICAgMzMKKyNkZWZp bmUgTURGTERfRFNJUExMX01fTUFYXzgzCSAgICA5MgorI2RlZmluZSBNREZMRF9EU0lQTExfUDFf TUlOXzgzCSAgICAyCisjZGVmaW5lIE1ERkxEX0RTSVBMTF9QMV9NQVhfODMJICAgIDMKKyNkZWZp bmUgTURGTERfRFNJUExMX01fTUlOXzEwMAkgICAgOTcKKyNkZWZpbmUgTURGTERfRFNJUExMX01f TUFYXzEwMAkgICAgMTQwCisjZGVmaW5lIE1ERkxEX0RTSVBMTF9QMV9NSU5fMTAwCSAgICAzCisj ZGVmaW5lIE1ERkxEX0RTSVBMTF9QMV9NQVhfMTAwCSAgICA5CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgbXJzdF9saW1pdF90IG1kZmxkX2xpbWl0c1tdID0geworCXsJCQkvKiBNREZMRF9MSU1UX0RQ TExfMTkgKi8KKwkgLmRvdCA9IHsubWluID0gTURGTERfRE9UX01JTiwgLm1heCA9IE1ERkxEX0RP VF9NQVh9LAorCSAubSA9IHsubWluID0gTURGTERfRFBMTF9NX01JTl8xOSwgLm1heCA9IE1ERkxE X0RQTExfTV9NQVhfMTl9LAorCSAucDEgPSB7Lm1pbiA9IE1ERkxEX0RQTExfUDFfTUlOXzE5LCAu bWF4ID0gTURGTERfRFBMTF9QMV9NQVhfMTl9LAorCSB9LAorCXsJCQkvKiBNREZMRF9MSU1UX0RQ TExfMjUgKi8KKwkgLmRvdCA9IHsubWluID0gTURGTERfRE9UX01JTiwgLm1heCA9IE1ERkxEX0RP VF9NQVh9LAorCSAubSA9IHsubWluID0gTURGTERfRFBMTF9NX01JTl8yNSwgLm1heCA9IE1ERkxE X0RQTExfTV9NQVhfMjV9LAorCSAucDEgPSB7Lm1pbiA9IE1ERkxEX0RQTExfUDFfTUlOXzI1LCAu bWF4ID0gTURGTERfRFBMTF9QMV9NQVhfMjV9LAorCSB9LAorCXsJCQkvKiBNREZMRF9MSU1UX0RQ TExfODMgKi8KKwkgLmRvdCA9IHsubWluID0gTURGTERfRE9UX01JTiwgLm1heCA9IE1ERkxEX0RP VF9NQVh9LAorCSAubSA9IHsubWluID0gTURGTERfRFBMTF9NX01JTl84MywgLm1heCA9IE1ERkxE X0RQTExfTV9NQVhfODN9LAorCSAucDEgPSB7Lm1pbiA9IE1ERkxEX0RQTExfUDFfTUlOXzgzLCAu bWF4ID0gTURGTERfRFBMTF9QMV9NQVhfODN9LAorCSB9LAorCXsJCQkvKiBNREZMRF9MSU1UX0RQ TExfMTAwICovCisJIC5kb3QgPSB7Lm1pbiA9IE1ERkxEX0RPVF9NSU4sIC5tYXggPSBNREZMRF9E T1RfTUFYfSwKKwkgLm0gPSB7Lm1pbiA9IE1ERkxEX0RQTExfTV9NSU5fMTAwLCAubWF4ID0gTURG TERfRFBMTF9NX01BWF8xMDB9LAorCSAucDEgPSB7Lm1pbiA9IE1ERkxEX0RQTExfUDFfTUlOXzEw MCwgLm1heCA9IE1ERkxEX0RQTExfUDFfTUFYXzEwMH0sCisJIH0sCisJewkJCS8qIE1ERkxEX0xJ TVRfRFNJUExMXzE5ICovCisJIC5kb3QgPSB7Lm1pbiA9IE1ERkxEX0RPVF9NSU4sIC5tYXggPSBN REZMRF9ET1RfTUFYfSwKKwkgLm0gPSB7Lm1pbiA9IE1ERkxEX0RTSVBMTF9NX01JTl8xOSwgLm1h eCA9IE1ERkxEX0RTSVBMTF9NX01BWF8xOX0sCisJIC5wMSA9IHsubWluID0gTURGTERfRFNJUExM X1AxX01JTl8xOSwgLm1heCA9IE1ERkxEX0RTSVBMTF9QMV9NQVhfMTl9LAorCSB9LAorCXsJCQkv KiBNREZMRF9MSU1UX0RTSVBMTF8yNSAqLworCSAuZG90ID0gey5taW4gPSBNREZMRF9ET1RfTUlO LCAubWF4ID0gTURGTERfRE9UX01BWH0sCisJIC5tID0gey5taW4gPSBNREZMRF9EU0lQTExfTV9N SU5fMjUsIC5tYXggPSBNREZMRF9EU0lQTExfTV9NQVhfMjV9LAorCSAucDEgPSB7Lm1pbiA9IE1E RkxEX0RTSVBMTF9QMV9NSU5fMjUsIC5tYXggPSBNREZMRF9EU0lQTExfUDFfTUFYXzI1fSwKKwkg fSwKKwl7CQkJLyogTURGTERfTElNVF9EU0lQTExfODMgKi8KKwkgLmRvdCA9IHsubWluID0gTURG TERfRE9UX01JTiwgLm1heCA9IE1ERkxEX0RPVF9NQVh9LAorCSAubSA9IHsubWluID0gTURGTERf RFNJUExMX01fTUlOXzgzLCAubWF4ID0gTURGTERfRFNJUExMX01fTUFYXzgzfSwKKwkgLnAxID0g ey5taW4gPSBNREZMRF9EU0lQTExfUDFfTUlOXzgzLCAubWF4ID0gTURGTERfRFNJUExMX1AxX01B WF84M30sCisJIH0sCisJewkJCS8qIE1ERkxEX0xJTVRfRFNJUExMXzEwMCAqLworCSAuZG90ID0g ey5taW4gPSBNREZMRF9ET1RfTUlOLCAubWF4ID0gTURGTERfRE9UX01BWH0sCisJIC5tID0gey5t aW4gPSBNREZMRF9EU0lQTExfTV9NSU5fMTAwLCAubWF4ID0gTURGTERfRFNJUExMX01fTUFYXzEw MH0sCisJIC5wMSA9IHsubWluID0gTURGTERfRFNJUExMX1AxX01JTl8xMDAsIC5tYXggPSBNREZM RF9EU0lQTExfUDFfTUFYXzEwMH0sCisJIH0sCit9OworCisjZGVmaW5lIE1ERkxEX01fTUlOCSAg ICAyMQorI2RlZmluZSBNREZMRF9NX01BWAkgICAgMTgwCitzdGF0aWMgY29uc3QgdTMyIG1kZmxk X21fY29udmVydHNbXSA9IHsKKy8qIE0gY29uZmlndXJhdGlvbiB0YWJsZSBmcm9tIDktYml0IExG U1IgdGFibGUgKi8KKwkyMjQsIDM2OCwgNDQwLCAyMjAsIDM2NiwgNDM5LCAyMTksIDM2NSwgMTgy LCAzNDcsIC8qIDIxIC0gMzAgKi8KKwkxNzMsIDM0MiwgMTcxLCA4NSwgMjk4LCAxNDksIDc0LCAz NywgMTgsIDI2NSwgICAvKiAzMSAtIDQwICovCisJMzg4LCAxOTQsIDM1MywgNDMyLCAyMTYsIDEw OCwgMzEwLCAxNTUsIDMzMywgMTY2LCAvKiA0MSAtIDUwICovCisJODMsIDQxLCAyNzYsIDEzOCwg MzI1LCAxNjIsIDMzNywgMTY4LCAzNDAsIDE3MCwgLyogNTEgLSA2MCAqLworCTM0MSwgNDI2LCA0 NjksIDIzNCwgMzczLCA0NDIsIDIyMSwgMTEwLCAzMTEsIDQxMSwgLyogNjEgLSA3MCAqLworCTQ2 MSwgNDg2LCAyNDMsIDM3NywgMTg4LCAzNTAsIDE3NSwgMzQzLCA0MjcsIDIxMywgLyogNzEgLSA4 MCAqLworCTEwNiwgNTMsIDI4MiwgMzk3LCAzNTQsIDIyNywgMTEzLCA1NiwgMjg0LCAxNDIsIC8q IDgxIC0gOTAgKi8KKwk3MSwgMzUsIDI3MywgMTM2LCAzMjQsIDQxOCwgNDY1LCA0ODgsIDUwMCwg NTA2LCAvKiA5MSAtIDEwMCAqLworCTI1MywgMTI2LCA2MywgMjg3LCAzOTksIDQ1NSwgNDgzLCAy NDEsIDM3NiwgNDQ0LCAvKiAxMDEgLSAxMTAgKi8KKwk0NzgsIDQ5NSwgNTAzLCAyNTEsIDM4MSwg NDQ2LCA0NzksIDIzOSwgMzc1LCA0NDMsIC8qIDExMSAtIDEyMCAqLworCTQ3NywgMjM4LCAxMTks IDMxNSwgMTU3LCA3OCwgMjk1LCAxNDcsIDMyOSwgNDIwLCAvKiAxMjEgLSAxMzAgKi8KKwkyMTAs IDEwNSwgMzA4LCAxNTQsIDc3LCAzOCwgMjc1LCAxMzcsIDY4LCAyOTAsIC8qIDEzMSAtIDE0MCAq LworCTE0NSwgMzI4LCAxNjQsIDgyLCAyOTcsIDQwNCwgNDU4LCA0ODUsIDQ5OCwgMjQ5LCAvKiAx NDEgLSAxNTAgKi8KKwkzODAsIDE5MCwgMzUxLCA0MzEsIDQ3MSwgMjM1LCAxMTcsIDMxNCwgNDEz LCAyMDYsIC8qIDE1MSAtIDE2MCAqLworCTEwMywgNTEsIDI1LCAxMiwgMjYyLCAzODcsIDE5Mywg OTYsIDQ4LCAyODAsIC8qIDE2MSAtIDE3MCAqLworCTM5NiwgMTk4LCA5OSwgMzA1LCAxNTIsIDc2 LCAyOTQsIDQwMywgNDU3LCAyMjgsIC8qIDE3MSAtIDE4MCAqLworfTsKKworc3RhdGljIGNvbnN0 IHN0cnVjdCBtcnN0X2xpbWl0X3QgKm1kZmxkX2xpbWl0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykK K3sKKwljb25zdCBzdHJ1Y3QgbXJzdF9saW1pdF90ICpsaW1pdCA9IE5VTEw7CisJc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZf cHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlpZiAocHNiX2ludGVsX3BpcGVfaGFzX3R5cGUo Y3J0YywgSU5URUxfT1VUUFVUX01JUEkpCisJICAgIHx8IHBzYl9pbnRlbF9waXBlX2hhc190eXBl KGNydGMsIElOVEVMX09VVFBVVF9NSVBJMikpIHsKKwkJaWYgKChrc2VsID09IEtTRUxfQ1JZU1RB TF8xOSkgfHwgKGtzZWwgPT0gS1NFTF9CWVBBU1NfMTkpKQorCQkJbGltaXQgPSAmbWRmbGRfbGlt aXRzW01ERkxEX0xJTVRfRFNJUExMXzE5XTsKKwkJZWxzZSBpZiAoa3NlbCA9PSBLU0VMX0JZUEFT U18yNSkKKwkJCWxpbWl0ID0gJm1kZmxkX2xpbWl0c1tNREZMRF9MSU1UX0RTSVBMTF8yNV07CisJ CWVsc2UgaWYgKChrc2VsID09IEtTRUxfQllQQVNTXzgzXzEwMCkgJiYKKwkJCQkoZGV2X3ByaXYt PmNvcmVfZnJlcSA9PSAxNjYpKQorCQkJbGltaXQgPSAmbWRmbGRfbGltaXRzW01ERkxEX0xJTVRf RFNJUExMXzgzXTsKKwkJZWxzZSBpZiAoKGtzZWwgPT0gS1NFTF9CWVBBU1NfODNfMTAwKSAmJgor CQkJIChkZXZfcHJpdi0+Y29yZV9mcmVxID09IDEwMCB8fAorCQkJCWRldl9wcml2LT5jb3JlX2Zy ZXEgPT0gMjAwKSkKKwkJCWxpbWl0ID0gJm1kZmxkX2xpbWl0c1tNREZMRF9MSU1UX0RTSVBMTF8x MDBdOworCX0gZWxzZSBpZiAocHNiX2ludGVsX3BpcGVfaGFzX3R5cGUoY3J0YywgSU5URUxfT1VU UFVUX0hETUkpKSB7CisJCWlmICgoa3NlbCA9PSBLU0VMX0NSWVNUQUxfMTkpIHx8IChrc2VsID09 IEtTRUxfQllQQVNTXzE5KSkKKwkJCWxpbWl0ID0gJm1kZmxkX2xpbWl0c1tNREZMRF9MSU1UX0RQ TExfMTldOworCQllbHNlIGlmIChrc2VsID09IEtTRUxfQllQQVNTXzI1KQorCQkJbGltaXQgPSAm bWRmbGRfbGltaXRzW01ERkxEX0xJTVRfRFBMTF8yNV07CisJCWVsc2UgaWYgKChrc2VsID09IEtT RUxfQllQQVNTXzgzXzEwMCkgJiYKKwkJCQkoZGV2X3ByaXYtPmNvcmVfZnJlcSA9PSAxNjYpKQor CQkJbGltaXQgPSAmbWRmbGRfbGltaXRzW01ERkxEX0xJTVRfRFBMTF84M107CisJCWVsc2UgaWYg KChrc2VsID09IEtTRUxfQllQQVNTXzgzXzEwMCkgJiYKKwkJCQkgKGRldl9wcml2LT5jb3JlX2Zy ZXEgPT0gMTAwIHx8CisJCQkJIGRldl9wcml2LT5jb3JlX2ZyZXEgPT0gMjAwKSkKKwkJCWxpbWl0 ID0gJm1kZmxkX2xpbWl0c1tNREZMRF9MSU1UX0RQTExfMTAwXTsKKwl9IGVsc2UgeworCQlsaW1p dCA9IE5VTEw7CisJCWRldl9kYmcoZGV2LT5kZXYsICJtZGZsZF9saW1pdCBXcm9uZyBkaXNwbGF5 IHR5cGUuXG4iKTsKKwl9CisKKwlyZXR1cm4gbGltaXQ7Cit9CisKKy8qKiBEZXJpdmUgdGhlIHBp eGVsIGNsb2NrIGZvciB0aGUgZ2l2ZW4gcmVmY2xrIGFuZCBkaXZpc29ycyBmb3IgOHh4IGNoaXBz LiAqLworc3RhdGljIHZvaWQgbWRmbGRfY2xvY2soaW50IHJlZmNsaywgc3RydWN0IG1yc3RfY2xv Y2tfdCAqY2xvY2spCit7CisJY2xvY2stPmRvdCA9IChyZWZjbGsgKiBjbG9jay0+bSkgLyBjbG9j ay0+cDE7Cit9CisKKy8qKgorICogUmV0dXJucyBhIHNldCBvZiBkaXZpc29ycyBmb3IgdGhlIGRl c2lyZWQgdGFyZ2V0IGNsb2NrIHdpdGggdGhlIGdpdmVuIHJlZmNsaywKKyAqIG9yIEZBTFNFLiAg RGl2aXNvciB2YWx1ZXMgYXJlIHRoZSBhY3R1YWwgZGl2aXNvcnMgZm9yCisgKi8KK3N0YXRpYyBi b29sCittZGZsZEZpbmRCZXN0UExMKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgaW50IHRhcmdldCwg aW50IHJlZmNsaywKKwkJc3RydWN0IG1yc3RfY2xvY2tfdCAqYmVzdF9jbG9jaykKK3sKKwlzdHJ1 Y3QgbXJzdF9jbG9ja190IGNsb2NrOworCWNvbnN0IHN0cnVjdCBtcnN0X2xpbWl0X3QgKmxpbWl0 ID0gbWRmbGRfbGltaXQoY3J0Yyk7CisJaW50IGVyciA9IHRhcmdldDsKKworCW1lbXNldChiZXN0 X2Nsb2NrLCAwLCBzaXplb2YoKmJlc3RfY2xvY2spKTsKKworCWZvciAoY2xvY2subSA9IGxpbWl0 LT5tLm1pbjsgY2xvY2subSA8PSBsaW1pdC0+bS5tYXg7IGNsb2NrLm0rKykgeworCQlmb3IgKGNs b2NrLnAxID0gbGltaXQtPnAxLm1pbjsgY2xvY2sucDEgPD0gbGltaXQtPnAxLm1heDsKKwkJICAg ICBjbG9jay5wMSsrKSB7CisJCQlpbnQgdGhpc19lcnI7CisKKwkJCW1kZmxkX2Nsb2NrKHJlZmNs aywgJmNsb2NrKTsKKworCQkJdGhpc19lcnIgPSBhYnMoY2xvY2suZG90IC0gdGFyZ2V0KTsKKwkJ CWlmICh0aGlzX2VyciA8IGVycikgeworCQkJCSpiZXN0X2Nsb2NrID0gY2xvY2s7CisJCQkJZXJy ID0gdGhpc19lcnI7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIGVyciAhPSB0YXJnZXQ7Cit9CisK K3N0YXRpYyBpbnQgbWRmbGRfY3J0Y19tb2RlX3NldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJ CQkgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCSAgICAgIHN0cnVjdCBk cm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlLAorCQkJICAgICAgaW50IHgsIGludCB5LAor CQkJICAgICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqb2xkX2ZiKQoreworCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0IHBzYl9pbnRlbF9jcnRjICpwc2JfaW50 ZWxfY3J0YyA9IHRvX3BzYl9pbnRlbF9jcnRjKGNydGMpOworCXN0cnVjdCBkcm1fcHNiX3ByaXZh dGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgcGlwZSA9IHBzYl9pbnRlbF9j cnRjLT5waXBlOworCWludCBmcF9yZWcgPSBNUlNUX0ZQQTA7CisJaW50IGRwbGxfcmVnID0gTVJT VF9EUExMX0E7CisJaW50IGRzcGNudHJfcmVnID0gRFNQQUNOVFI7CisJaW50IHBpcGVjb25mX3Jl ZyA9IFBJUEVBQ09ORjsKKwlpbnQgaHRvdF9yZWcgPSBIVE9UQUxfQTsKKwlpbnQgaGJsYW5rX3Jl ZyA9IEhCTEFOS19BOworCWludCBoc3luY19yZWcgPSBIU1lOQ19BOworCWludCB2dG90X3JlZyA9 IFZUT1RBTF9BOworCWludCB2YmxhbmtfcmVnID0gVkJMQU5LX0E7CisJaW50IHZzeW5jX3JlZyA9 IFZTWU5DX0E7CisJaW50IGRzcHNpemVfcmVnID0gRFNQQVNJWkU7CisJaW50IGRzcHBvc19yZWcg PSBEU1BBUE9TOworCWludCBwaXBlc3JjX3JlZyA9IFBJUEVBU1JDOworCXUzMiAqcGlwZWNvbmYg PSAmZGV2X3ByaXYtPnBpcGVjb25mW3BpcGVdOworCXUzMiAqZHNwY250ciA9ICZkZXZfcHJpdi0+ ZHNwY250cltwaXBlXTsKKwlpbnQgcmVmY2xrID0gMDsKKwlpbnQgY2xrX24gPSAwLCBjbGtfcDIg PSAwLCBjbGtfYnl0ZSA9IDEsIGNsayA9IDAsIG1fY29udiA9IDAsCisJCQkJCQkJCWNsa190bXAg PSAwOworCXN0cnVjdCBtcnN0X2Nsb2NrX3QgY2xvY2s7CisJYm9vbCBvazsKKwl1MzIgZHBsbCA9 IDAsIGZwID0gMDsKKwlib29sIGlzX2NydCA9IGZhbHNlLCBpc19sdmRzID0gZmFsc2UsIGlzX3R2 ID0gZmFsc2U7CisJYm9vbCBpc19taXBpID0gZmFsc2UsIGlzX21pcGkyID0gZmFsc2UsIGlzX2hk bWkgPSBmYWxzZTsKKwlzdHJ1Y3QgZHJtX21vZGVfY29uZmlnICptb2RlX2NvbmZpZyA9ICZkZXYt Pm1vZGVfY29uZmlnOworCXN0cnVjdCBwc2JfaW50ZWxfZW5jb2RlciAqcHNiX2ludGVsX2VuY29k ZXIgPSBOVUxMOworCXVpbnQ2NF90IHNjYWxpbmdUeXBlID0gRFJNX01PREVfU0NBTEVfRlVMTFND UkVFTjsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CisJc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm5lY3RvcjsKKwlpbnQgdGltZW91dCA9IDA7CisJaW50IHJldDsKKworCWRldl9kYmco ZGV2LT5kZXYsICJwaXBlID0gMHgleFxuIiwgcGlwZSk7CisKKyNpZiAwCisJaWYgKHBpcGUgPT0g MSkgeworCQlpZiAoIWdtYV9wb3dlcl9iZWdpbihkZXYsIHRydWUpKQorCQkJcmV0dXJuIDA7CisJ CWFuZHJvaWRfaGRtaV9jcnRjX21vZGVfc2V0KGNydGMsIG1vZGUsIGFkanVzdGVkX21vZGUsCisJ CQl4LCB5LCBvbGRfZmIpOworCQlnb3RvIG1yc3RfY3J0Y19tb2RlX3NldF9leGl0OworCX0KKyNl bmRpZgorCisJc3dpdGNoIChwaXBlKSB7CisJY2FzZSAwOgorCQlicmVhazsKKwljYXNlIDE6CisJ CWZwX3JlZyA9IEZQQjA7CisJCWRwbGxfcmVnID0gRFBMTF9COworCQlkc3BjbnRyX3JlZyA9IERT UEJDTlRSOworCQlwaXBlY29uZl9yZWcgPSBQSVBFQkNPTkY7CisJCWh0b3RfcmVnID0gSFRPVEFM X0I7CisJCWhibGFua19yZWcgPSBIQkxBTktfQjsKKwkJaHN5bmNfcmVnID0gSFNZTkNfQjsKKwkJ dnRvdF9yZWcgPSBWVE9UQUxfQjsKKwkJdmJsYW5rX3JlZyA9IFZCTEFOS19COworCQl2c3luY19y ZWcgPSBWU1lOQ19COworCQlkc3BzaXplX3JlZyA9IERTUEJTSVpFOworCQlkc3Bwb3NfcmVnID0g RFNQQlBPUzsKKwkJcGlwZXNyY19yZWcgPSBQSVBFQlNSQzsKKwkJZnBfcmVnID0gTURGTERfRFBM TF9ESVYwOworCQlkcGxsX3JlZyA9IE1ERkxEX0RQTExfQjsKKwkJYnJlYWs7CisJY2FzZSAyOgor CQlkcGxsX3JlZyA9IE1SU1RfRFBMTF9BOworCQlkc3BjbnRyX3JlZyA9IERTUENDTlRSOworCQlw aXBlY29uZl9yZWcgPSBQSVBFQ0NPTkY7CisJCWh0b3RfcmVnID0gSFRPVEFMX0M7CisJCWhibGFu a19yZWcgPSBIQkxBTktfQzsKKwkJaHN5bmNfcmVnID0gSFNZTkNfQzsKKwkJdnRvdF9yZWcgPSBW VE9UQUxfQzsKKwkJdmJsYW5rX3JlZyA9IFZCTEFOS19DOworCQl2c3luY19yZWcgPSBWU1lOQ19D OworCQlkc3BzaXplX3JlZyA9IERTUENTSVpFOworCQlkc3Bwb3NfcmVnID0gRFNQQ1BPUzsKKwkJ cGlwZXNyY19yZWcgPSBQSVBFQ1NSQzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJRFJNX0VSUk9S KCJJbGxlZ2FsIFBpcGUgTnVtYmVyLlxuIik7CisJCXJldHVybiAwOworCX0KKworCXJldCA9IGNo ZWNrX2ZiKGNydGMtPmZiKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZGV2X2RiZyhk ZXYtPmRldiwgImFkanVzdGVkX2hkaXNwbGF5ID0gJWRcbiIsCisJCSBhZGp1c3RlZF9tb2RlLT5o ZGlzcGxheSk7CisJZGV2X2RiZyhkZXYtPmRldiwgImFkanVzdGVkX3ZkaXNwbGF5ID0gJWRcbiIs CisJCSBhZGp1c3RlZF9tb2RlLT52ZGlzcGxheSk7CisJZGV2X2RiZyhkZXYtPmRldiwgImFkanVz dGVkX2hzeW5jX3N0YXJ0ID0gJWRcbiIsCisJCSBhZGp1c3RlZF9tb2RlLT5oc3luY19zdGFydCk7 CisJZGV2X2RiZyhkZXYtPmRldiwgImFkanVzdGVkX2hzeW5jX2VuZCA9ICVkXG4iLAorCQkgYWRq dXN0ZWRfbW9kZS0+aHN5bmNfZW5kKTsKKwlkZXZfZGJnKGRldi0+ZGV2LCAiYWRqdXN0ZWRfaHRv dGFsID0gJWRcbiIsCisJCSBhZGp1c3RlZF9tb2RlLT5odG90YWwpOworCWRldl9kYmcoZGV2LT5k ZXYsICJhZGp1c3RlZF92c3luY19zdGFydCA9ICVkXG4iLAorCQkgYWRqdXN0ZWRfbW9kZS0+dnN5 bmNfc3RhcnQpOworCWRldl9kYmcoZGV2LT5kZXYsICJhZGp1c3RlZF92c3luY19lbmQgPSAlZFxu IiwKKwkJIGFkanVzdGVkX21vZGUtPnZzeW5jX2VuZCk7CisJZGV2X2RiZyhkZXYtPmRldiwgImFk anVzdGVkX3Z0b3RhbCA9ICVkXG4iLAorCQkgYWRqdXN0ZWRfbW9kZS0+dnRvdGFsKTsKKwlkZXZf ZGJnKGRldi0+ZGV2LCAiYWRqdXN0ZWRfY2xvY2sgPSAlZFxuIiwKKwkJIGFkanVzdGVkX21vZGUt PmNsb2NrKTsKKwlkZXZfZGJnKGRldi0+ZGV2LCAiaGRpc3BsYXkgPSAlZFxuIiwKKwkJIG1vZGUt PmhkaXNwbGF5KTsKKwlkZXZfZGJnKGRldi0+ZGV2LCAidmRpc3BsYXkgPSAlZFxuIiwKKwkJIG1v ZGUtPnZkaXNwbGF5KTsKKworCWlmICghZ21hX3Bvd2VyX2JlZ2luKGRldiwgdHJ1ZSkpCisJCXJl dHVybiAwOworCisJbWVtY3B5KCZwc2JfaW50ZWxfY3J0Yy0+c2F2ZWRfbW9kZSwgbW9kZSwKKwkJ CQkJc2l6ZW9mKHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlKSk7CisJbWVtY3B5KCZwc2JfaW50ZWxf Y3J0Yy0+c2F2ZWRfYWRqdXN0ZWRfbW9kZSwgYWRqdXN0ZWRfbW9kZSwKKwkJCQkJc2l6ZW9mKHN0 cnVjdCBkcm1fZGlzcGxheV9tb2RlKSk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5lY3Rv ciwgJm1vZGVfY29uZmlnLT5jb25uZWN0b3JfbGlzdCwgaGVhZCkgeworCQlpZiAoIWNvbm5lY3Rv cikKKwkJCWNvbnRpbnVlOworCisJCWVuY29kZXIgPSBjb25uZWN0b3ItPmVuY29kZXI7CisKKwkJ aWYgKCFlbmNvZGVyKQorCQkJY29udGludWU7CisKKwkJaWYgKGVuY29kZXItPmNydGMgIT0gY3J0 YykKKwkJCWNvbnRpbnVlOworCisJCXBzYl9pbnRlbF9lbmNvZGVyID0gcHNiX2ludGVsX2F0dGFj aGVkX2VuY29kZXIoY29ubmVjdG9yKTsKKworCQlzd2l0Y2ggKHBzYl9pbnRlbF9lbmNvZGVyLT50 eXBlKSB7CisJCWNhc2UgSU5URUxfT1VUUFVUX0xWRFM6CisJCQlpc19sdmRzID0gdHJ1ZTsKKwkJ CWJyZWFrOworCQljYXNlIElOVEVMX09VVFBVVF9UVk9VVDoKKwkJCWlzX3R2ID0gdHJ1ZTsKKwkJ CWJyZWFrOworCQljYXNlIElOVEVMX09VVFBVVF9BTkFMT0c6CisJCQlpc19jcnQgPSB0cnVlOwor CQkJYnJlYWs7CisJCWNhc2UgSU5URUxfT1VUUFVUX01JUEk6CisJCQlpc19taXBpID0gdHJ1ZTsK KwkJCWJyZWFrOworCQljYXNlIElOVEVMX09VVFBVVF9NSVBJMjoKKwkJCWlzX21pcGkyID0gdHJ1 ZTsKKwkJCWJyZWFrOworCQljYXNlIElOVEVMX09VVFBVVF9IRE1JOgorCQkJaXNfaGRtaSA9IHRy dWU7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIERpc2FibGUgdGhlIFZHQSBwbGFuZSB0aGF0 IHdlIG5ldmVyIHVzZSAqLworCVJFR19XUklURShWR0FDTlRSTCwgVkdBX0RJU1BfRElTQUJMRSk7 CisKKwkvKiBEaXNhYmxlIHRoZSBwYW5lbCBmaXR0ZXIgaWYgaXQgd2FzIG9uIG91ciBwaXBlICov CisJaWYgKHBzYl9pbnRlbF9wYW5lbF9maXR0ZXJfcGlwZShkZXYpID09IHBpcGUpCisJCVJFR19X UklURShQRklUX0NPTlRST0wsIDApOworCisJLyogcGlwZXNyYyBhbmQgZHNwc2l6ZSBjb250cm9s IHRoZSBzaXplIHRoYXQgaXMgc2NhbGVkIGZyb20sCisJICogd2hpY2ggc2hvdWxkIGFsd2F5cyBi ZSB0aGUgdXNlcidzIHJlcXVlc3RlZCBzaXplLgorCSAqLworCWlmIChwaXBlID09IDEpIHsKKwkJ LyogRklYTUU6IFRvIG1ha2UgSERNSSBkaXNwbGF5IHdpdGggODY0eDQ4MCAoVFBPKSwgNDgweDg2 NAorCQkgKiAoUFlSKSBvciA0ODB4ODU0IChUTUQpLCBzZXQgdGhlIHNwcml0ZSB3aWR0aC9oZWln aHQgYW5kCisJCSAqIHNvdWNlIGltYWdlIHNpemUgcmVnaXN0ZXJzIHdpdGggdGhlIGFkanVzdGVk IG1vZGUgZm9yCisJCSAqIHBpcGUgQi4KKwkJICovCisKKwkJLyoKKwkJICogVGhlIGRlZmluZWQg c3ByaXRlIHJlY3RhbmdsZSBtdXN0IGFsd2F5cyBiZSBjb21wbGV0ZWx5CisJCSAqIGNvbnRhaW5l ZCB3aXRoaW4gdGhlIGRpc3BsYXlhYmxlIGFyZWEgb2YgdGhlIHNjcmVlbiBpbWFnZQorCQkgKiAo ZnJhbWUgYnVmZmVyKS4KKwkJICovCisJCVJFR19XUklURShkc3BzaXplX3JlZywgKChtaW4obW9k ZS0+Y3J0Y192ZGlzcGxheSwgYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSkgLSAxKSA8PCAx NikKKwkJCQl8IChtaW4obW9kZS0+Y3J0Y19oZGlzcGxheSwgYWRqdXN0ZWRfbW9kZS0+Y3J0Y19o ZGlzcGxheSkgLSAxKSk7CisJCS8qIFNldCB0aGUgQ1JUQyB3aXRoIGVuY29kZXIgbW9kZS4gKi8K KwkJUkVHX1dSSVRFKHBpcGVzcmNfcmVnLCAoKG1vZGUtPmNydGNfaGRpc3BsYXkgLSAxKSA8PCAx NikKKwkJCQkgfCAobW9kZS0+Y3J0Y192ZGlzcGxheSAtIDEpKTsKKwl9IGVsc2UgeworCQlSRUdf V1JJVEUoZHNwc2l6ZV9yZWcsCisJCQkJKChtb2RlLT5jcnRjX3ZkaXNwbGF5IC0gMSkgPDwgMTYp IHwKKwkJCQkJCShtb2RlLT5jcnRjX2hkaXNwbGF5IC0gMSkpOworCQlSRUdfV1JJVEUocGlwZXNy Y19yZWcsCisJCQkJKChtb2RlLT5jcnRjX2hkaXNwbGF5IC0gMSkgPDwgMTYpIHwKKwkJCQkJCSht b2RlLT5jcnRjX3ZkaXNwbGF5IC0gMSkpOworCX0KKworCVJFR19XUklURShkc3Bwb3NfcmVnLCAw KTsKKworCWlmIChwc2JfaW50ZWxfZW5jb2RlcikKKwkJZHJtX2Nvbm5lY3Rvcl9wcm9wZXJ0eV9n ZXRfdmFsdWUoY29ubmVjdG9yLAorCQkJZGV2LT5tb2RlX2NvbmZpZy5zY2FsaW5nX21vZGVfcHJv cGVydHksICZzY2FsaW5nVHlwZSk7CisKKwlpZiAoc2NhbGluZ1R5cGUgPT0gRFJNX01PREVfU0NB TEVfTk9fU0NBTEUpIHsKKwkJLyogTWVkZmllbGQgZG9lc24ndCBoYXZlIHJlZ2lzdGVyIHN1cHBv cnQgZm9yIGNlbnRlcmluZyBzbyB3ZQorCQkgKiBuZWVkIHRvIG1lc3Mgd2l0aCB0aGUgaC92Ymxh bmsgYW5kIGgvdnN5bmMgc3RhcnQgYW5kIGVuZHMKKwkJICogdG8gZ2V0IGNlbnRlcmluZworCQkg Ki8KKwkJaW50IG9mZnNldFggPSAwLCBvZmZzZXRZID0gMDsKKworCQlvZmZzZXRYID0gKGFkanVz dGVkX21vZGUtPmNydGNfaGRpc3BsYXkgLQorCQkJCQltb2RlLT5jcnRjX2hkaXNwbGF5KSAvIDI7 CisJCW9mZnNldFkgPSAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSAtCisJCQkJCW1vZGUt PmNydGNfdmRpc3BsYXkpIC8gMjsKKworCQlSRUdfV1JJVEUoaHRvdF9yZWcsIChtb2RlLT5jcnRj X2hkaXNwbGF5IC0gMSkgfAorCQkJKChhZGp1c3RlZF9tb2RlLT5jcnRjX2h0b3RhbCAtIDEpIDw8 IDE2KSk7CisJCVJFR19XUklURSh2dG90X3JlZywgKG1vZGUtPmNydGNfdmRpc3BsYXkgLSAxKSB8 CisJCQkoKGFkanVzdGVkX21vZGUtPmNydGNfdnRvdGFsIC0gMSkgPDwgMTYpKTsKKwkJUkVHX1dS SVRFKGhibGFua19yZWcsIChhZGp1c3RlZF9tb2RlLT5jcnRjX2hibGFua19zdGFydCAtCisJCQkJ CQkJCW9mZnNldFggLSAxKSB8CisJCQkoKGFkanVzdGVkX21vZGUtPmNydGNfaGJsYW5rX2VuZCAt IG9mZnNldFggLSAxKSA8PCAxNikpOworCQlSRUdfV1JJVEUoaHN5bmNfcmVnLCAoYWRqdXN0ZWRf bW9kZS0+Y3J0Y19oc3luY19zdGFydCAtCisJCQkJCQkJCW9mZnNldFggLSAxKSB8CisJCQkoKGFk anVzdGVkX21vZGUtPmNydGNfaHN5bmNfZW5kIC0gb2Zmc2V0WCAtIDEpIDw8IDE2KSk7CisJCVJF R19XUklURSh2YmxhbmtfcmVnLCAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192Ymxhbmtfc3RhcnQgLQor CQkJCQkJCQlvZmZzZXRZIC0gMSkgfAorCQkJKChhZGp1c3RlZF9tb2RlLT5jcnRjX3ZibGFua19l bmQgLSBvZmZzZXRZIC0gMSkgPDwgMTYpKTsKKwkJUkVHX1dSSVRFKHZzeW5jX3JlZywgKGFkanVz dGVkX21vZGUtPmNydGNfdnN5bmNfc3RhcnQgLQorCQkJCQkJCQlvZmZzZXRZIC0gMSkgfAorCQkJ KChhZGp1c3RlZF9tb2RlLT5jcnRjX3ZzeW5jX2VuZCAtIG9mZnNldFkgLSAxKSA8PCAxNikpOwor CX0gZWxzZSB7CisJCVJFR19XUklURShodG90X3JlZywgKGFkanVzdGVkX21vZGUtPmNydGNfaGRp c3BsYXkgLSAxKSB8CisJCQkoKGFkanVzdGVkX21vZGUtPmNydGNfaHRvdGFsIC0gMSkgPDwgMTYp KTsKKwkJUkVHX1dSSVRFKHZ0b3RfcmVnLCAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSAt IDEpIHwKKwkJCSgoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192dG90YWwgLSAxKSA8PCAxNikpOworCQlS RUdfV1JJVEUoaGJsYW5rX3JlZywgKGFkanVzdGVkX21vZGUtPmNydGNfaGJsYW5rX3N0YXJ0IC0g MSkgfAorCQkJKChhZGp1c3RlZF9tb2RlLT5jcnRjX2hibGFua19lbmQgLSAxKSA8PCAxNikpOwor CQlSRUdfV1JJVEUoaHN5bmNfcmVnLCAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oc3luY19zdGFydCAt IDEpIHwKKwkJCSgoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oc3luY19lbmQgLSAxKSA8PCAxNikpOwor CQlSRUdfV1JJVEUodmJsYW5rX3JlZywgKGFkanVzdGVkX21vZGUtPmNydGNfdmJsYW5rX3N0YXJ0 IC0gMSkgfAorCQkJKChhZGp1c3RlZF9tb2RlLT5jcnRjX3ZibGFua19lbmQgLSAxKSA8PCAxNikp OworCQlSRUdfV1JJVEUodnN5bmNfcmVnLCAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19zdGFy dCAtIDEpIHwKKwkJCSgoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19lbmQgLSAxKSA8PCAxNikp OworCX0KKworCS8qIEZsdXNoIHRoZSBwbGFuZSBjaGFuZ2VzICovCisJeworCQlzdHJ1Y3QgZHJt X2NydGNfaGVscGVyX2Z1bmNzICpjcnRjX2Z1bmNzID0KKwkJICAgIGNydGMtPmhlbHBlcl9wcml2 YXRlOworCQljcnRjX2Z1bmNzLT5tb2RlX3NldF9iYXNlKGNydGMsIHgsIHksIG9sZF9mYik7CisJ fQorCisJLyogc2V0dXAgcGlwZWNvbmYgKi8KKwkqcGlwZWNvbmYgPSBQSVBFQUNPTkZfRU5BQkxF OyAvKiBGSVhNRV9KTElVNyBSRUdfUkVBRChwaXBlY29uZl9yZWcpOyAqLworCisJLyogU2V0IHVw IHRoZSBkaXNwbGF5IHBsYW5lIHJlZ2lzdGVyICovCisJKmRzcGNudHIgPSBSRUdfUkVBRChkc3Bj bnRyX3JlZyk7CisJKmRzcGNudHIgfD0gcGlwZSA8PCBESVNQUExBTkVfU0VMX1BJUEVfUE9TOwor CSpkc3BjbnRyIHw9IERJU1BMQVlfUExBTkVfRU5BQkxFOworCisJaWYgKGlzX21pcGkyKQorCQln b3RvIG1yc3RfY3J0Y19tb2RlX3NldF9leGl0OworCWNsayA9IGFkanVzdGVkX21vZGUtPmNsb2Nr OworCisJaWYgKGlzX2hkbWkpIHsKKwkJaWYgKChrc2VsID09IEtTRUxfQ1JZU1RBTF8xOSkgfHwg KGtzZWwgPT0gS1NFTF9CWVBBU1NfMTkpKSB7CisJCQlyZWZjbGsgPSAxOTIwMDsKKworCQkJaWYg KGlzX21pcGkgfHwgaXNfbWlwaTIpCisJCQkJY2xrX24gPSAxLCBjbGtfcDIgPSA4OworCQkJZWxz ZSBpZiAoaXNfaGRtaSkKKwkJCQljbGtfbiA9IDEsIGNsa19wMiA9IDEwOworCQl9IGVsc2UgaWYg KGtzZWwgPT0gS1NFTF9CWVBBU1NfMjUpIHsKKwkJCXJlZmNsayA9IDI1MDAwOworCisJCQlpZiAo aXNfbWlwaSB8fCBpc19taXBpMikKKwkJCQljbGtfbiA9IDEsIGNsa19wMiA9IDg7CisJCQllbHNl IGlmIChpc19oZG1pKQorCQkJCWNsa19uID0gMSwgY2xrX3AyID0gMTA7CisJCX0gZWxzZSBpZiAo KGtzZWwgPT0gS1NFTF9CWVBBU1NfODNfMTAwKSAmJgorCQkJCQlkZXZfcHJpdi0+Y29yZV9mcmVx ID09IDE2NikgeworCQkJcmVmY2xrID0gODMwMDA7CisKKwkJCWlmIChpc19taXBpIHx8IGlzX21p cGkyKQorCQkJCWNsa19uID0gNCwgY2xrX3AyID0gODsKKwkJCWVsc2UgaWYgKGlzX2hkbWkpCisJ CQkJY2xrX24gPSA0LCBjbGtfcDIgPSAxMDsKKwkJfSBlbHNlIGlmICgoa3NlbCA9PSBLU0VMX0JZ UEFTU184M18xMDApICYmCisJCQkJCShkZXZfcHJpdi0+Y29yZV9mcmVxID09IDEwMCB8fAorCQkJ CQlkZXZfcHJpdi0+Y29yZV9mcmVxID09IDIwMCkpIHsKKwkJCXJlZmNsayA9IDEwMDAwMDsKKwkJ CWlmIChpc19taXBpIHx8IGlzX21pcGkyKQorCQkJCWNsa19uID0gNCwgY2xrX3AyID0gODsKKwkJ CWVsc2UgaWYgKGlzX2hkbWkpCisJCQkJY2xrX24gPSA0LCBjbGtfcDIgPSAxMDsKKwkJfQorCisJ CWlmIChpc19taXBpKQorCQkJY2xrX2J5dGUgPSBkZXZfcHJpdi0+YnBwIC8gODsKKwkJZWxzZSBp ZiAoaXNfbWlwaTIpCisJCQljbGtfYnl0ZSA9IGRldl9wcml2LT5icHAyIC8gODsKKworCQljbGtf dG1wID0gY2xrICogY2xrX24gKiBjbGtfcDIgKiBjbGtfYnl0ZTsKKworCQlkZXZfZGJnKGRldi0+ ZGV2LCAiY2xrID0gJWQsIGNsa19uID0gJWQsIGNsa19wMiA9ICVkLlxuIiwKKwkJCQkJY2xrLCBj bGtfbiwgY2xrX3AyKTsKKwkJZGV2X2RiZyhkZXYtPmRldiwgImFkanVzdGVkX21vZGUtPmNsb2Nr ID0gJWQsIGNsa190bXAgPSAlZC5cbiIsCisJCQkJCWFkanVzdGVkX21vZGUtPmNsb2NrLCBjbGtf dG1wKTsKKworCQlvayA9IG1kZmxkRmluZEJlc3RQTEwoY3J0YywgY2xrX3RtcCwgcmVmY2xrLCAm Y2xvY2spOworCisJCWlmICghb2spIHsKKwkJCURSTV9FUlJPUgorCQkJICAgICgibWRmbGRGaW5k QmVzdFBMTCBmYWlsIGluIG1kZmxkX2NydGNfbW9kZV9zZXQuXG4iKTsKKwkJfSBlbHNlIHsKKwkJ CW1fY29udiA9IG1kZmxkX21fY29udmVydHNbKGNsb2NrLm0gLSBNREZMRF9NX01JTildOworCisJ CQlkZXZfZGJnKGRldi0+ZGV2LCAiZG90IGNsb2NrID0gJWQsIgorCQkJCSAibSA9ICVkLCBwMSA9 ICVkLCBtX2NvbnYgPSAlZC5cbiIsCisJCQkJCWNsb2NrLmRvdCwgY2xvY2subSwKKwkJCQkJY2xv Y2sucDEsIG1fY29udik7CisJCX0KKworCQlkcGxsID0gUkVHX1JFQUQoZHBsbF9yZWcpOworCisJ CWlmIChkcGxsICYgRFBMTF9WQ09fRU5BQkxFKSB7CisJCQlkcGxsICY9IH5EUExMX1ZDT19FTkFC TEU7CisJCQlSRUdfV1JJVEUoZHBsbF9yZWcsIGRwbGwpOworCQkJUkVHX1JFQUQoZHBsbF9yZWcp OworCisJCQkvKiBGSVhNRSBqbGl1NyBjaGVjayB0aGUgRFBMTCBsb2NrIGJpdCBQSVBFQUNPTkZb MjldICovCisJCQkvKiBGSVhNRV9NREZMRCBQTyAtIGNoYW5nZSA1MDAgdG8gMSBhZnRlciBQTyAq LworCQkJdWRlbGF5KDUwMCk7CisKKwkJCS8qIHJlc2V0IE0xLCBOMSAmIFAxICovCisJCQlSRUdf V1JJVEUoZnBfcmVnLCAwKTsKKwkJCWRwbGwgJj0gfk1ERkxEX1AxX01BU0s7CisJCQlSRUdfV1JJ VEUoZHBsbF9yZWcsIGRwbGwpOworCQkJLyogRklYTUVfTURGTEQgUE8gLSBjaGFuZ2UgNTAwIHRv IDEgYWZ0ZXIgUE8gKi8KKwkJCXVkZWxheSg1MDApOworCQl9CisKKwkJLyogV2hlbiB1bmdhdGlu ZyBwb3dlciBvZiBEUExMLCBuZWVkcyB0byB3YWl0IDAuNXVzIGJlZm9yZQorCQkgKiBlbmFibGUg dGhlIFZDTyAqLworCQlpZiAoZHBsbCAmIE1ERkxEX1BXUl9HQVRFX0VOKSB7CisJCQlkcGxsICY9 IH5NREZMRF9QV1JfR0FURV9FTjsKKwkJCVJFR19XUklURShkcGxsX3JlZywgZHBsbCk7CisJCQkv KiBGSVhNRV9NREZMRCBQTyAtIGNoYW5nZSA1MDAgdG8gMSBhZnRlciBQTyAqLworCQkJdWRlbGF5 KDUwMCk7CisJCX0KKwkJZHBsbCA9IDA7CisKKyNpZiAwIC8qIEZJWE1FIHJldmlzaXQgbGF0ZXIg Ki8KKwkJaWYgKGtzZWwgPT0gS1NFTF9DUllTVEFMXzE5IHx8IGtzZWwgPT0gS1NFTF9CWVBBU1Nf MTkgfHwKKwkJCQkJCWtzZWwgPT0gS1NFTF9CWVBBU1NfMjUpCisJCQlkcGxsICY9IH5NREZMRF9J TlBVVF9SRUZfU0VMOworCQllbHNlIGlmIChrc2VsID09IEtTRUxfQllQQVNTXzgzXzEwMCkKKwkJ CWRwbGwgfD0gTURGTERfSU5QVVRfUkVGX1NFTDsKKyNlbmRpZiAvKiBGSVhNRSByZXZpc2l0IGxh dGVyICovCisKKwkJaWYgKGlzX2hkbWkpCisJCQlkcGxsIHw9IE1ERkxEX1ZDT19TRUw7CisKKwkJ ZnAgPSAoY2xrX24gLyAyKSA8PCAxNjsKKwkJZnAgfD0gbV9jb252OworCisJCS8qIGNvbXB1dGUg Yml0bWFzayBmcm9tIHAxIHZhbHVlICovCisJCWRwbGwgfD0gKDEgPDwgKGNsb2NrLnAxIC0gMikp IDw8IDE3OworCisjaWYgMCAvKiAxMDgwcDMwICYgNzIwcCAqLworCQlkcGxsID0gMHgwMDA1MDAw MDsKKwkJZnAgPSAweDAwMDAwMWJlOworI2VuZGlmCisjaWYgMCAvKiA0ODBwICovCisJCWRwbGwg PSAweDAyMDEwMDAwOworCQlmcCA9IDB4MDAwMDAwZDI7CisjZW5kaWYKKwl9IGVsc2UgeworI2lm IDAgLypEQklfVFBPXzQ4MHg4NjQqLworCQlkcGxsID0gMHgwMDAyMDAwMDsKKwkJZnAgPSAweDAw MDAwMTU2OworI2VuZGlmIC8qIERCSV9UUE9fNDgweDg2NCAqLyAvKiBnZXQgZnJvbSBzcGVjLiAq LworCisJCWRwbGwgPSAweDAwODAwMDAwOworCQlmcCA9IDB4MDAwMDAwYzE7CisJfQorCisJUkVH X1dSSVRFKGZwX3JlZywgZnApOworCVJFR19XUklURShkcGxsX3JlZywgZHBsbCk7CisJLyogRklY TUVfTURGTEQgUE8gLSBjaGFuZ2UgNTAwIHRvIDEgYWZ0ZXIgUE8gKi8KKwl1ZGVsYXkoNTAwKTsK KworCWRwbGwgfD0gRFBMTF9WQ09fRU5BQkxFOworCVJFR19XUklURShkcGxsX3JlZywgZHBsbCk7 CisJUkVHX1JFQUQoZHBsbF9yZWcpOworCisJLyogd2FpdCBmb3IgRFNJIFBMTCB0byBsb2NrICov CisJd2hpbGUgKHRpbWVvdXQgPCAyMDAwMCAmJgorCQkJIShSRUdfUkVBRChwaXBlY29uZl9yZWcp ICYgUElQRUNPTkZfRFNJUExMX0xPQ0spKSB7CisJCXVkZWxheSgxNTApOworCQl0aW1lb3V0Kys7 CisJfQorCisJaWYgKGlzX21pcGkpCisJCWdvdG8gbXJzdF9jcnRjX21vZGVfc2V0X2V4aXQ7CisK KwlkZXZfZGJnKGRldi0+ZGV2LCAiaXNfbWlwaSA9IDB4JXhcbiIsIGlzX21pcGkpOworCisJUkVH X1dSSVRFKHBpcGVjb25mX3JlZywgKnBpcGVjb25mKTsKKwlSRUdfUkVBRChwaXBlY29uZl9yZWcp OworCisJLyogV2FpdCBmb3IgZm9yIHRoZSBwaXBlIGVuYWJsZSB0byB0YWtlIGVmZmVjdC4gKi8K KwlSRUdfV1JJVEUoZHNwY250cl9yZWcsICpkc3BjbnRyKTsKKwlwc2JfaW50ZWxfd2FpdF9mb3Jf dmJsYW5rKGRldik7CisKK21yc3RfY3J0Y19tb2RlX3NldF9leGl0OgorCisJZ21hX3Bvd2VyX2Vu ZChkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK2NvbnN0IHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJf ZnVuY3MgbWRmbGRfaGVscGVyX2Z1bmNzID0geworCS5kcG1zID0gbWRmbGRfY3J0Y19kcG1zLAor CS5tb2RlX2ZpeHVwID0gcHNiX2ludGVsX2NydGNfbW9kZV9maXh1cCwKKwkubW9kZV9zZXQgPSBt ZGZsZF9jcnRjX21vZGVfc2V0LAorCS5tb2RlX3NldF9iYXNlID0gbWRmbGRfX2ludGVsX3BpcGVf c2V0X2Jhc2UsCisJLnByZXBhcmUgPSBwc2JfaW50ZWxfY3J0Y19wcmVwYXJlLAorCS5jb21taXQg PSBwc2JfaW50ZWxfY3J0Y19jb21taXQsCit9OworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vZ21hNTAwL21kZmxkX291dHB1dC5jIGIvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9tZGZsZF9v dXRwdXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTBjZTA3Ci0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9tZGZsZF9vdXRwdXQuYwpAQCAt MCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAgMjAxMCBJbnRlbCBDb3Jwb3JhdGlv bgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0 byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFz c29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVh bCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQg bGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1 Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2VuCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2Yg dGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3 YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlz c2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBp bmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICog U29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhP VVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAor ICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4g IElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBC RSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBX SEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJ TkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9S IFRIRSBVU0UgT1IgT1RIRVIKKyAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBB dXRob3JzOgorICogVGhvbWFzIEVhdG9uIDx0aG9tYXMuZy5lYXRvbkBpbnRlbC5jb20+CisgKiBT Y290dCBSb3dlIDxzY290dC5tLnJvd2VAaW50ZWwuY29tPgorKi8KKworI2luY2x1ZGUgIm1kZmxk X291dHB1dC5oIgorI2luY2x1ZGUgIm1kZmxkX2RzaV9kcGkuaCIKKyNpbmNsdWRlICJtZGZsZF9k c2lfb3V0cHV0LmgiCisKKyNpbmNsdWRlICJ0YzM1ODc2eC1kc2ktbHZkcy5oIgorCitpbnQgbWRm bGRfZ2V0X3BhbmVsX3R5cGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHBpcGUpCit7CisJ c3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXJl dHVybiBkZXZfcHJpdi0+bWRmbGRfcGFuZWxfaWQ7Cit9CisKK3N0YXRpYyB2b2lkIG1kZmxkX2lu aXRfcGFuZWwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IG1pcGlfcGlwZSwKKwkJCQkJCQkJ aW50IHBfdHlwZSkKK3sKKwlzd2l0Y2ggKHBfdHlwZSkgeworCWNhc2UgVFBPX1ZJRDoKKwkJbWRm bGRfZHNpX291dHB1dF9pbml0KGRldiwgbWlwaV9waXBlLCBOVUxMLAorCQkJCSZtZGZsZF90cG9f dmlkX2Z1bmNzKTsKKwkJYnJlYWs7CisJY2FzZSBUQzM1ODc2WDoKKwkJdGMzNTg3NnhfaW5pdChk ZXYpOworCQltZGZsZF9kc2lfb3V0cHV0X2luaXQoZGV2LCBtaXBpX3BpcGUsIE5VTEwsCisJCQkJ Jm1kZmxkX3RjMzU4NzZ4X2Z1bmNzKTsKKwkJYnJlYWs7CisJY2FzZSBUTURfVklEOgorCQltZGZs ZF9kc2lfb3V0cHV0X2luaXQoZGV2LCBtaXBpX3BpcGUsIE5VTEwsCisJCQkJJm1kZmxkX3RtZF92 aWRfZnVuY3MpOworCQlicmVhazsKKwljYXNlIEhETUk6CisvKgkJaWYgKGRldl9wcml2LT5tZGZs ZF9oZG1pX3ByZXNlbnQpCisJCQltZGZsZF9oZG1pX2luaXQoZGV2LCAmZGV2X3ByaXYtPm1vZGVf ZGV2KTsgKi8KKwkJYnJlYWs7CisJfQorfQorCisKK2ludCBtZGZsZF9vdXRwdXRfaW5pdChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2 ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCS8qIEZJWE1FOiBoYXJkY29kZWQgZm9yIG5vdyAqLwor CWRldl9wcml2LT5tZGZsZF9wYW5lbF9pZCA9IFRDMzU4NzZYOworCS8qIE1JUEkgcGFuZWwgMSAq LworCW1kZmxkX2luaXRfcGFuZWwoZGV2LCAwLCBkZXZfcHJpdi0+bWRmbGRfcGFuZWxfaWQpOwor CS8qIEhETUkgcGFuZWwgKi8KKwltZGZsZF9pbml0X3BhbmVsKGRldiwgMSwgSERNSSk7CisJcmV0 dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvbWRmbGRfb3V0 cHV0LmggYi9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL21kZmxkX291dHB1dC5oCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMmIyN2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vZ21hNTAwL21kZmxkX291dHB1dC5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisg KiBDb3B5cmlnaHQgKGMpICAyMDEwIEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lv biBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWlu aW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0 aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3 aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUg cmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwg c3VibGljZW5zZW4KKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0 byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRv IGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUg YWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVk aW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3Bp ZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBU SEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkg S0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBU TyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwK KyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENM QUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9O IE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9G IE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgor ICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6CisgKiBUaG9tYXMg RWF0b24gPHRob21hcy5nLmVhdG9uQGludGVsLmNvbT4KKyAqIFNjb3R0IFJvd2UgPHNjb3R0Lm0u cm93ZUBpbnRlbC5jb20+CisqLworCisjaWZuZGVmIE1ERkxEX09VVFBVVF9ICisjZGVmaW5lIE1E RkxEX09VVFBVVF9ICisKKyNpbmNsdWRlICJwc2JfZHJ2LmgiCisKKyNkZWZpbmUgVFBPX1BBTkVM X1dJRFRICQk4NAorI2RlZmluZSBUUE9fUEFORUxfSEVJR0hUCTQ2CisjZGVmaW5lIFRNRF9QQU5F TF9XSURUSAkJMzkKKyNkZWZpbmUgVE1EX1BBTkVMX0hFSUdIVAk3MQorCitzdHJ1Y3QgbWRmbGRf ZHNpX2NvbmZpZzsKKworZW51bSBwYW5lbF90eXBlIHsKKwlUUE9fVklELAorCVRNRF9WSUQsCisJ SERNSSwKKwlUQzM1ODc2WCwKK307CisKK3N0cnVjdCBwYW5lbF9pbmZvIHsKKwl1MzIgd2lkdGhf bW07CisJdTMyIGhlaWdodF9tbTsKKwkvKiBPdGhlciBpbmZvICovCit9OworCitzdHJ1Y3QgcGFu ZWxfZnVuY3MgeworCWNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyAqZW5jb2Rlcl9mdW5j czsKKwljb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzICplbmNvZGVyX2hlbHBl cl9mdW5jczsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqICgqZ2V0X2NvbmZpZ19tb2RlKShz dHJ1Y3QgZHJtX2RldmljZSAqKTsKKwlpbnQgKCpnZXRfcGFuZWxfaW5mbykoc3RydWN0IGRybV9k ZXZpY2UgKiwgaW50LCBzdHJ1Y3QgcGFuZWxfaW5mbyAqKTsKKwlpbnQgKCpyZXNldCkoaW50IHBp cGUpOworCXZvaWQgKCpkcnZfaWNfaW5pdCkoc3RydWN0IG1kZmxkX2RzaV9jb25maWcgKmRzaV9j b25maWcsIGludCBwaXBlKTsKK307CisKK2ludCBtZGZsZF9vdXRwdXRfaW5pdChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KTsKKworc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKm1kZmxkX2dldF9iYWNr bGlnaHRfZGV2aWNlKHZvaWQpOworaW50IG1kZmxkX3NldF9icmlnaHRuZXNzKHN0cnVjdCBiYWNr bGlnaHRfZGV2aWNlICpiZCk7CisKK2ludCBtZGZsZF9nZXRfcGFuZWxfdHlwZShzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCBpbnQgcGlwZSk7CisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZHJtX2NydGNf aGVscGVyX2Z1bmNzIG1kZmxkX2hlbHBlcl9mdW5jczsKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBw YW5lbF9mdW5jcyBtZGZsZF90bWRfdmlkX2Z1bmNzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBwYW5l bF9mdW5jcyBtZGZsZF90cG9fdmlkX2Z1bmNzOworCitleHRlcm4gdm9pZCBtZGZsZF9kaXNhYmxl X2NydGMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHBpcGUpOworZXh0ZXJuIHZvaWQgbWRm bGRXYWl0Rm9yUGlwZUVuYWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgcGlwZSk7Citl eHRlcm4gdm9pZCBtZGZsZFdhaXRGb3JQaXBlRGlzYWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LCBpbnQgcGlwZSk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAv bWRmbGRfdG1kX3ZpZC5jIGIvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9tZGZsZF90bWRfdmlkLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMwYzZjMwotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvbWRmbGRfdG1kX3ZpZC5jCkBAIC0wLDAgKzEs MjAxIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisg KiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBl cnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVk IGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhl IFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRp b24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBk aXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0 d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBm dXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgor ICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90 aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQg aW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJl LgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJB TlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5P VCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBF VkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxF IEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBG Uk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNF IE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoK KyAqIEppbSBMaXUgPGppbS5saXVAaW50ZWwuY29tPgorICogSmFja2llIExpPHlhb2RvbmcubGlA aW50ZWwuY29tPgorICogR2lkZW9uIEVhdG9uIDxlYXRvbi4KKyAqIFNjb3R0IFJvd2UgPHNjb3R0 Lm0ucm93ZUBpbnRlbC5jb20+CisgKi8KKworI2luY2x1ZGUgIm1kZmxkX2RzaV9kcGkuaCIKKyNp bmNsdWRlICJtZGZsZF9kc2lfcGtnX3NlbmRlci5oIgorCitzdGF0aWMgc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKnRtZF92aWRfZ2V0X2NvbmZpZ19tb2RlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYp Cit7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7CisJc3RydWN0IGRybV9wc2JfcHJp dmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBvYWt0cmFpbF90aW1p bmdfaW5mbyAqdGkgPSAmZGV2X3ByaXYtPmdjdF9kYXRhLkRURDsKKwlib29sIHVzZV9nY3QgPSBm YWxzZTsgLypEaXNhYmxlIEdDVCBmb3Igbm93Ki8KKworCW1vZGUgPSBremFsbG9jKHNpemVvZigq bW9kZSksIEdGUF9LRVJORUwpOworCWlmICghbW9kZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAo dXNlX2djdCkgeworCQltb2RlLT5oZGlzcGxheSA9ICh0aS0+aGFjdGl2ZV9oaSA8PCA4KSB8IHRp LT5oYWN0aXZlX2xvOworCQltb2RlLT52ZGlzcGxheSA9ICh0aS0+dmFjdGl2ZV9oaSA8PCA4KSB8 IHRpLT52YWN0aXZlX2xvOworCQltb2RlLT5oc3luY19zdGFydCA9IG1vZGUtPmhkaXNwbGF5ICsg XAorCQkJCSgodGktPmhzeW5jX29mZnNldF9oaSA8PCA4KSB8IFwKKwkJCQl0aS0+aHN5bmNfb2Zm c2V0X2xvKTsKKwkJbW9kZS0+aHN5bmNfZW5kID0gbW9kZS0+aHN5bmNfc3RhcnQgKyBcCisJCQkJ KCh0aS0+aHN5bmNfcHVsc2Vfd2lkdGhfaGkgPDwgOCkgfCBcCisJCQkJdGktPmhzeW5jX3B1bHNl X3dpZHRoX2xvKTsKKwkJbW9kZS0+aHRvdGFsID0gbW9kZS0+aGRpc3BsYXkgKyAoKHRpLT5oYmxh bmtfaGkgPDwgOCkgfCBcCisJCQkJCQkJCXRpLT5oYmxhbmtfbG8pOworCQltb2RlLT52c3luY19z dGFydCA9IFwKKwkJCW1vZGUtPnZkaXNwbGF5ICsgKCh0aS0+dnN5bmNfb2Zmc2V0X2hpIDw8IDgp IHwgXAorCQkJCQkJdGktPnZzeW5jX29mZnNldF9sbyk7CisJCW1vZGUtPnZzeW5jX2VuZCA9IFwK KwkJCW1vZGUtPnZzeW5jX3N0YXJ0ICsgKCh0aS0+dnN5bmNfcHVsc2Vfd2lkdGhfaGkgPDwgOCkg fCBcCisJCQkJCQl0aS0+dnN5bmNfcHVsc2Vfd2lkdGhfbG8pOworCQltb2RlLT52dG90YWwgPSBt b2RlLT52ZGlzcGxheSArIFwKKwkJCQkoKHRpLT52YmxhbmtfaGkgPDwgOCkgfCB0aS0+dmJsYW5r X2xvKTsKKwkJbW9kZS0+Y2xvY2sgPSB0aS0+cGl4ZWxfY2xvY2sgKiAxMDsKKworCQlkZXZfZGJn KGRldi0+ZGV2LCAiaGRpc3BsYXkgaXMgJWRcbiIsIG1vZGUtPmhkaXNwbGF5KTsKKwkJZGV2X2Ri ZyhkZXYtPmRldiwgInZkaXNwbGF5IGlzICVkXG4iLCBtb2RlLT52ZGlzcGxheSk7CisJCWRldl9k YmcoZGV2LT5kZXYsICJIU1MgaXMgJWRcbiIsIG1vZGUtPmhzeW5jX3N0YXJ0KTsKKwkJZGV2X2Ri ZyhkZXYtPmRldiwgIkhTRSBpcyAlZFxuIiwgbW9kZS0+aHN5bmNfZW5kKTsKKwkJZGV2X2RiZyhk ZXYtPmRldiwgImh0b3RhbCBpcyAlZFxuIiwgbW9kZS0+aHRvdGFsKTsKKwkJZGV2X2RiZyhkZXYt PmRldiwgIlZTUyBpcyAlZFxuIiwgbW9kZS0+dnN5bmNfc3RhcnQpOworCQlkZXZfZGJnKGRldi0+ ZGV2LCAiVlNFIGlzICVkXG4iLCBtb2RlLT52c3luY19lbmQpOworCQlkZXZfZGJnKGRldi0+ZGV2 LCAidnRvdGFsIGlzICVkXG4iLCBtb2RlLT52dG90YWwpOworCQlkZXZfZGJnKGRldi0+ZGV2LCAi Y2xvY2sgaXMgJWRcbiIsIG1vZGUtPmNsb2NrKTsKKwl9IGVsc2UgeworCQltb2RlLT5oZGlzcGxh eSA9IDQ4MDsKKwkJbW9kZS0+dmRpc3BsYXkgPSA4NTQ7CisJCW1vZGUtPmhzeW5jX3N0YXJ0ID0g NDg3OworCQltb2RlLT5oc3luY19lbmQgPSA0OTA7CisJCW1vZGUtPmh0b3RhbCA9IDQ5OTsKKwkJ bW9kZS0+dnN5bmNfc3RhcnQgPSA4NjE7CisJCW1vZGUtPnZzeW5jX2VuZCA9IDg2NTsKKwkJbW9k ZS0+dnRvdGFsID0gODczOworCQltb2RlLT5jbG9jayA9IDMzMjY0OworCX0KKworCWRybV9tb2Rl X3NldF9uYW1lKG1vZGUpOworCWRybV9tb2RlX3NldF9jcnRjaW5mbyhtb2RlLCAwKTsKKworCW1v ZGUtPnR5cGUgfD0gRFJNX01PREVfVFlQRV9QUkVGRVJSRUQ7CisKKwlyZXR1cm4gbW9kZTsKK30K Kworc3RhdGljIGludCB0bWRfdmlkX2dldF9wYW5lbF9pbmZvKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsCisJCQkJaW50IHBpcGUsCisJCQkJc3RydWN0IHBhbmVsX2luZm8gKnBpKQoreworCWlmICgh ZGV2IHx8ICFwaSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwaS0+d2lkdGhfbW0gPSBUTURfUEFO RUxfV0lEVEg7CisJcGktPmhlaWdodF9tbSA9IFRNRF9QQU5FTF9IRUlHSFQ7CisKKwlyZXR1cm4g MDsKK30KKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqXAorICogRlVOQ1RJT046IG1kZmxkX2luaXRf VE1EX01JUEkKKyAqCisgKiBERVNDUklQVElPTjogIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9u bHkgYnkgbXJzdF9kc2lfbW9kZV9zZXQgYW5kCisgKiAgICAgICAgICAgICAgIHJlc3RvcmVfZGlz cGxheV9yZWdpc3RlcnMuICBzaW5jZSB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90CisgKiAgICAgICAg ICAgICAgIGFjcXVpcmUgdGhlIG11dGV4LCBpdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGUgY2FsbGlu ZyBmdW5jdGlvbgorICogICAgICAgICAgICAgICBkb2VzIQorXCogKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAq LworCisvKiBGSVhNRTogbWFrZSB0aGUgYmVsb3cgZGF0YSB1OCBpbnN0ZWFkIG9mIHUzMjsgbm90 ZSBieXRlIG9yZGVyISAqLworc3RhdGljIHUzMiB0bWRfY21kX21jYXBfb2ZmW10gPSB7MHgwMDAw MDBiMn07CitzdGF0aWMgdTMyIHRtZF9jbWRfZW5hYmxlX2xhbmVfc3dpdGNoW10gPSB7MHgwMDAx MDFlZn07CitzdGF0aWMgdTMyIHRtZF9jbWRfc2V0X2xhbmVfbnVtW10gPSB7MHgwMDYzNjBlZn07 CitzdGF0aWMgdTMyIHRtZF9jbWRfcHVzaGluZ19jbG9jazBbXSA9IHsweDAwY2MyZmVmfTsKK3N0 YXRpYyB1MzIgdG1kX2NtZF9wdXNoaW5nX2Nsb2NrMVtdID0gezB4MDBkZDZlZWZ9Oworc3RhdGlj IHUzMiB0bWRfY21kX3NldF9tb2RlW10gPSB7MHgwMDAwMDBiM307CitzdGF0aWMgdTMyIHRtZF9j bWRfc2V0X3N5bmNfcHVsc2VfbW9kZVtdID0gezB4MDAwOTYxZWZ9Oworc3RhdGljIHUzMiB0bWRf Y21kX3NldF9jb2x1bW5bXSA9IHsweDAxMDAwMDJhLCAweDAwMDAwMGRmfTsKK3N0YXRpYyB1MzIg dG1kX2NtZF9zZXRfcGFnZVtdID0gezB4MDMwMDAwMmIsIDB4MDAwMDAwNTV9Oworc3RhdGljIHUz MiB0bWRfY21kX3NldF92aWRlb19tb2RlW10gPSB7MHgwMDAwMDE1M307CisvKm5vIGF1dG9fYmws bmVlZCBhZGQgaW4gZnVydHVyZSovCitzdGF0aWMgdTMyIHRtZF9jbWRfZW5hYmxlX2JhY2tsaWdo dFtdID0gezB4MDAwMDVhYjR9Oworc3RhdGljIHUzMiB0bWRfY21kX3NldF9iYWNrbGlnaHRfZGlt bWluZ1tdID0gezB4MDAwMDBlYmR9OworCitzdGF0aWMgdm9pZCBtZGZsZF9kc2lfdG1kX2Rydl9p Y19pbml0KHN0cnVjdCBtZGZsZF9kc2lfY29uZmlnICpkc2lfY29uZmlnLAorCQkJCSAgICAgIGlu dCBwaXBlKQoreworCXN0cnVjdCBtZGZsZF9kc2lfcGtnX3NlbmRlciAqc2VuZGVyCisJCQk9IG1k ZmxkX2RzaV9nZXRfcGtnX3NlbmRlcihkc2lfY29uZmlnKTsKKworCURSTV9JTkZPKCJFbnRlciBt ZGZsZCBpbml0IFRNRCBNSVBJIGRpc3BsYXkuXG4iKTsKKworCWlmICghc2VuZGVyKSB7CisJCURS TV9FUlJPUigiQ2Fubm90IGdldCBzZW5kZXJcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKGRz aV9jb25maWctPmR2cl9pY19pbml0ZWQpCisJCXJldHVybjsKKworCW1zbGVlcCgzKTsKKworCS8q IEZJWE1FOiBtYWtlIHRoZSBiZWxvdyBkYXRhIHU4IGluc3RlYWQgb2YgdTMyOyBub3RlIGJ5dGUg b3JkZXIhICovCisKKwltZGZsZF9kc2lfc2VuZF9nZW5fbG9uZyhzZW5kZXIsICh1OCAqKSB0bWRf Y21kX21jYXBfb2ZmLAorCQkJCXNpemVvZih0bWRfY21kX21jYXBfb2ZmKSwgZmFsc2UpOworCW1k ZmxkX2RzaV9zZW5kX2dlbl9sb25nKHNlbmRlciwgKHU4ICopIHRtZF9jbWRfZW5hYmxlX2xhbmVf c3dpdGNoLAorCQkJCXNpemVvZih0bWRfY21kX2VuYWJsZV9sYW5lX3N3aXRjaCksIGZhbHNlKTsK KwltZGZsZF9kc2lfc2VuZF9nZW5fbG9uZyhzZW5kZXIsICh1OCAqKSB0bWRfY21kX3NldF9sYW5l X251bSwKKwkJCQlzaXplb2YodG1kX2NtZF9zZXRfbGFuZV9udW0pLCBmYWxzZSk7CisJbWRmbGRf ZHNpX3NlbmRfZ2VuX2xvbmcoc2VuZGVyLCAodTggKikgdG1kX2NtZF9wdXNoaW5nX2Nsb2NrMCwK KwkJCQlzaXplb2YodG1kX2NtZF9wdXNoaW5nX2Nsb2NrMCksIGZhbHNlKTsKKwltZGZsZF9kc2lf c2VuZF9nZW5fbG9uZyhzZW5kZXIsICh1OCAqKSB0bWRfY21kX3B1c2hpbmdfY2xvY2sxLAorCQkJ CXNpemVvZih0bWRfY21kX3B1c2hpbmdfY2xvY2sxKSwgZmFsc2UpOworCW1kZmxkX2RzaV9zZW5k X2dlbl9sb25nKHNlbmRlciwgKHU4ICopIHRtZF9jbWRfc2V0X21vZGUsCisJCQkJc2l6ZW9mKHRt ZF9jbWRfc2V0X21vZGUpLCBmYWxzZSk7CisJbWRmbGRfZHNpX3NlbmRfZ2VuX2xvbmcoc2VuZGVy LCAodTggKikgdG1kX2NtZF9zZXRfc3luY19wdWxzZV9tb2RlLAorCQkJCXNpemVvZih0bWRfY21k X3NldF9zeW5jX3B1bHNlX21vZGUpLCBmYWxzZSk7CisJbWRmbGRfZHNpX3NlbmRfbWNzX2xvbmco c2VuZGVyLCAodTggKikgdG1kX2NtZF9zZXRfY29sdW1uLAorCQkJCXNpemVvZih0bWRfY21kX3Nl dF9jb2x1bW4pLCBmYWxzZSk7CisJbWRmbGRfZHNpX3NlbmRfbWNzX2xvbmcoc2VuZGVyLCAodTgg KikgdG1kX2NtZF9zZXRfcGFnZSwKKwkJCQlzaXplb2YodG1kX2NtZF9zZXRfcGFnZSksIGZhbHNl KTsKKwltZGZsZF9kc2lfc2VuZF9nZW5fbG9uZyhzZW5kZXIsICh1OCAqKSB0bWRfY21kX3NldF92 aWRlb19tb2RlLAorCQkJCXNpemVvZih0bWRfY21kX3NldF92aWRlb19tb2RlKSwgZmFsc2UpOwor CW1kZmxkX2RzaV9zZW5kX2dlbl9sb25nKHNlbmRlciwgKHU4ICopIHRtZF9jbWRfZW5hYmxlX2Jh Y2tsaWdodCwKKwkJCQlzaXplb2YodG1kX2NtZF9lbmFibGVfYmFja2xpZ2h0KSwgZmFsc2UpOwor CW1kZmxkX2RzaV9zZW5kX2dlbl9sb25nKHNlbmRlciwgKHU4ICopIHRtZF9jbWRfc2V0X2JhY2ts aWdodF9kaW1taW5nLAorCQkJCXNpemVvZih0bWRfY21kX3NldF9iYWNrbGlnaHRfZGltbWluZyks IGZhbHNlKTsKKworCWRzaV9jb25maWctPmR2cl9pY19pbml0ZWQgPSAxOworfQorCisvKlRQTyBE UEkgZW5jb2RlciBoZWxwZXIgZnVuY3MqLworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rl cl9oZWxwZXJfZnVuY3MKKwkJCQltZGZsZF90cG9fZHBpX2VuY29kZXJfaGVscGVyX2Z1bmNzID0g eworCS5kcG1zID0gbWRmbGRfZHNpX2RwaV9kcG1zLAorCS5tb2RlX2ZpeHVwID0gbWRmbGRfZHNp X2RwaV9tb2RlX2ZpeHVwLAorCS5wcmVwYXJlID0gbWRmbGRfZHNpX2RwaV9wcmVwYXJlLAorCS5t b2RlX3NldCA9IG1kZmxkX2RzaV9kcGlfbW9kZV9zZXQsCisJLmNvbW1pdCA9IG1kZmxkX2RzaV9k cGlfY29tbWl0LAorfTsKKworLypUUE8gRFBJIGVuY29kZXIgZnVuY3MqLworc3RhdGljIGNvbnN0 IHN0cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyBtZGZsZF90cG9fZHBpX2VuY29kZXJfZnVuY3MgPSB7 CisJLmRlc3Ryb3kgPSBkcm1fZW5jb2Rlcl9jbGVhbnVwLAorfTsKKworY29uc3Qgc3RydWN0IHBh bmVsX2Z1bmNzIG1kZmxkX3RtZF92aWRfZnVuY3MgPSB7CisJLmVuY29kZXJfZnVuY3MgPSAmbWRm bGRfdHBvX2RwaV9lbmNvZGVyX2Z1bmNzLAorCS5lbmNvZGVyX2hlbHBlcl9mdW5jcyA9ICZtZGZs ZF90cG9fZHBpX2VuY29kZXJfaGVscGVyX2Z1bmNzLAorCS5nZXRfY29uZmlnX21vZGUgPSAmdG1k X3ZpZF9nZXRfY29uZmlnX21vZGUsCisJLmdldF9wYW5lbF9pbmZvID0gdG1kX3ZpZF9nZXRfcGFu ZWxfaW5mbywKKwkucmVzZXQgPSBtZGZsZF9kc2lfcGFuZWxfcmVzZXQsCisJLmRydl9pY19pbml0 ID0gbWRmbGRfZHNpX3RtZF9kcnZfaWNfaW5pdCwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vZ21hNTAwL21kZmxkX3Rwb192aWQuYyBiL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvbWRm bGRfdHBvX3ZpZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ZDQxNzAK LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL21kZmxkX3Rwb192aWQu YwpAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDEwIEludGVsIENvcnBv cmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy Z2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBh bmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0 byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0 aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJn ZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGll cyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICog U29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBw ZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxs IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhl CisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwg V0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5D TFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN RU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xE RVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwg QVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdB UkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoK KyAqIEF1dGhvcnM6CisgKiBqaW0gbGl1IDxqaW0ubGl1QGludGVsLmNvbT4KKyAqIEphY2tpZSBM aTx5YW9kb25nLmxpQGludGVsLmNvbT4KKyAqLworCisjaW5jbHVkZSAibWRmbGRfZHNpX2RwaS5o IgorCitzdGF0aWMgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKnRwb192aWRfZ2V0X2NvbmZpZ19t b2RlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUg Km1vZGU7CisJc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2 YXRlOworCXN0cnVjdCBvYWt0cmFpbF90aW1pbmdfaW5mbyAqdGkgPSAmZGV2X3ByaXYtPmdjdF9k YXRhLkRURDsKKwlib29sIHVzZV9nY3QgPSBmYWxzZTsKKworCW1vZGUgPSBremFsbG9jKHNpemVv ZigqbW9kZSksIEdGUF9LRVJORUwpOworCWlmICghbW9kZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlp ZiAodXNlX2djdCkgeworCQltb2RlLT5oZGlzcGxheSA9ICh0aS0+aGFjdGl2ZV9oaSA8PCA4KSB8 IHRpLT5oYWN0aXZlX2xvOworCQltb2RlLT52ZGlzcGxheSA9ICh0aS0+dmFjdGl2ZV9oaSA8PCA4 KSB8IHRpLT52YWN0aXZlX2xvOworCQltb2RlLT5oc3luY19zdGFydCA9IG1vZGUtPmhkaXNwbGF5 ICsKKwkJCQkoKHRpLT5oc3luY19vZmZzZXRfaGkgPDwgOCkgfAorCQkJCXRpLT5oc3luY19vZmZz ZXRfbG8pOworCQltb2RlLT5oc3luY19lbmQgPSBtb2RlLT5oc3luY19zdGFydCArCisJCQkJKCh0 aS0+aHN5bmNfcHVsc2Vfd2lkdGhfaGkgPDwgOCkgfAorCQkJCXRpLT5oc3luY19wdWxzZV93aWR0 aF9sbyk7CisJCW1vZGUtPmh0b3RhbCA9IG1vZGUtPmhkaXNwbGF5ICsgKCh0aS0+aGJsYW5rX2hp IDw8IDgpIHwKKwkJCQkJCQkJdGktPmhibGFua19sbyk7CisJCW1vZGUtPnZzeW5jX3N0YXJ0ID0K KwkJCW1vZGUtPnZkaXNwbGF5ICsgKCh0aS0+dnN5bmNfb2Zmc2V0X2hpIDw8IDgpIHwKKwkJCQkJ CXRpLT52c3luY19vZmZzZXRfbG8pOworCQltb2RlLT52c3luY19lbmQgPQorCQkJbW9kZS0+dnN5 bmNfc3RhcnQgKyAoKHRpLT52c3luY19wdWxzZV93aWR0aF9oaSA8PCA4KSB8CisJCQkJCQl0aS0+ dnN5bmNfcHVsc2Vfd2lkdGhfbG8pOworCQltb2RlLT52dG90YWwgPSBtb2RlLT52ZGlzcGxheSAr CisJCQkJKCh0aS0+dmJsYW5rX2hpIDw8IDgpIHwgdGktPnZibGFua19sbyk7CisJCW1vZGUtPmNs b2NrID0gdGktPnBpeGVsX2Nsb2NrICogMTA7CisKKwkJZGV2X2RiZyhkZXYtPmRldiwgImhkaXNw bGF5IGlzICVkXG4iLCBtb2RlLT5oZGlzcGxheSk7CisJCWRldl9kYmcoZGV2LT5kZXYsICJ2ZGlz cGxheSBpcyAlZFxuIiwgbW9kZS0+dmRpc3BsYXkpOworCQlkZXZfZGJnKGRldi0+ZGV2LCAiSFNT IGlzICVkXG4iLCBtb2RlLT5oc3luY19zdGFydCk7CisJCWRldl9kYmcoZGV2LT5kZXYsICJIU0Ug aXMgJWRcbiIsIG1vZGUtPmhzeW5jX2VuZCk7CisJCWRldl9kYmcoZGV2LT5kZXYsICJodG90YWwg aXMgJWRcbiIsIG1vZGUtPmh0b3RhbCk7CisJCWRldl9kYmcoZGV2LT5kZXYsICJWU1MgaXMgJWRc biIsIG1vZGUtPnZzeW5jX3N0YXJ0KTsKKwkJZGV2X2RiZyhkZXYtPmRldiwgIlZTRSBpcyAlZFxu IiwgbW9kZS0+dnN5bmNfZW5kKTsKKwkJZGV2X2RiZyhkZXYtPmRldiwgInZ0b3RhbCBpcyAlZFxu IiwgbW9kZS0+dnRvdGFsKTsKKwkJZGV2X2RiZyhkZXYtPmRldiwgImNsb2NrIGlzICVkXG4iLCBt b2RlLT5jbG9jayk7CisJfSBlbHNlIHsKKwkJbW9kZS0+aGRpc3BsYXkgPSA4NjQ7CisJCW1vZGUt PnZkaXNwbGF5ID0gNDgwOworCQltb2RlLT5oc3luY19zdGFydCA9IDg3MzsKKwkJbW9kZS0+aHN5 bmNfZW5kID0gODc2OworCQltb2RlLT5odG90YWwgPSA4ODc7CisJCW1vZGUtPnZzeW5jX3N0YXJ0 ID0gNDg3OworCQltb2RlLT52c3luY19lbmQgPSA0OTA7CisJCW1vZGUtPnZ0b3RhbCA9IDQ5OTsK KwkJbW9kZS0+Y2xvY2sgPSAzMzI2NDsKKwl9CisKKwlkcm1fbW9kZV9zZXRfbmFtZShtb2RlKTsK Kwlkcm1fbW9kZV9zZXRfY3J0Y2luZm8obW9kZSwgMCk7CisKKwltb2RlLT50eXBlIHw9IERSTV9N T0RFX1RZUEVfUFJFRkVSUkVEOworCisJcmV0dXJuIG1vZGU7Cit9CisKK3N0YXRpYyBpbnQgdHBv X3ZpZF9nZXRfcGFuZWxfaW5mbyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCWludCBwaXBl LAorCQkJCXN0cnVjdCBwYW5lbF9pbmZvICpwaSkKK3sKKwlpZiAoIWRldiB8fCAhcGkpCisJCXJl dHVybiAtRUlOVkFMOworCisJcGktPndpZHRoX21tID0gVFBPX1BBTkVMX1dJRFRIOworCXBpLT5o ZWlnaHRfbW0gPSBUUE9fUEFORUxfSEVJR0hUOworCisJcmV0dXJuIDA7Cit9CisKKy8qVFBPIERQ SSBlbmNvZGVyIGhlbHBlciBmdW5jcyovCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVy X2hlbHBlcl9mdW5jcworCQkJCW1kZmxkX3Rwb19kcGlfZW5jb2Rlcl9oZWxwZXJfZnVuY3MgPSB7 CisJLmRwbXMgPSBtZGZsZF9kc2lfZHBpX2RwbXMsCisJLm1vZGVfZml4dXAgPSBtZGZsZF9kc2lf ZHBpX21vZGVfZml4dXAsCisJLnByZXBhcmUgPSBtZGZsZF9kc2lfZHBpX3ByZXBhcmUsCisJLm1v ZGVfc2V0ID0gbWRmbGRfZHNpX2RwaV9tb2RlX3NldCwKKwkuY29tbWl0ID0gbWRmbGRfZHNpX2Rw aV9jb21taXQsCit9OworCisvKlRQTyBEUEkgZW5jb2RlciBmdW5jcyovCitzdGF0aWMgY29uc3Qg c3RydWN0IGRybV9lbmNvZGVyX2Z1bmNzIG1kZmxkX3Rwb19kcGlfZW5jb2Rlcl9mdW5jcyA9IHsK KwkuZGVzdHJveSA9IGRybV9lbmNvZGVyX2NsZWFudXAsCit9OworCitjb25zdCBzdHJ1Y3QgcGFu ZWxfZnVuY3MgbWRmbGRfdHBvX3ZpZF9mdW5jcyA9IHsKKwkuZW5jb2Rlcl9mdW5jcyA9ICZtZGZs ZF90cG9fZHBpX2VuY29kZXJfZnVuY3MsCisJLmVuY29kZXJfaGVscGVyX2Z1bmNzID0gJm1kZmxk X3Rwb19kcGlfZW5jb2Rlcl9oZWxwZXJfZnVuY3MsCisJLmdldF9jb25maWdfbW9kZSA9ICZ0cG9f dmlkX2dldF9jb25maWdfbW9kZSwKKwkuZ2V0X3BhbmVsX2luZm8gPSB0cG9fdmlkX2dldF9wYW5l bF9pbmZvLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvcHNiX2Rydi5j IGIvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9wc2JfZHJ2LmMKaW5kZXggZjgwYzUwMS4uOTVhMDc0 NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9wc2JfZHJ2LmMKKysrIGIvZHJp dmVycy9ncHUvZHJtL2dtYTUwMC9wc2JfZHJ2LmMKQEAgLTYwLDYgKzYwLDE2IEBAIHN0YXRpYyBE RUZJTkVfUENJX0RFVklDRV9UQUJMRShwY2lpZGxpc3QpID0gewogCS8qIEF0b20gRTYyMCAqLwog CXsgMHg4MDg2LCAweDQxMDgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIChsb25nKSAm b2FrdHJhaWxfY2hpcF9vcHN9LAogI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfRFJNX01FREZJ RUxEKQorCXsweDgwODYsIDB4MDEzMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgKGxv bmcpICZtZGZsZF9jaGlwX29wc30sCisJezB4ODA4NiwgMHgwMTMxLCBQQ0lfQU5ZX0lELCBQQ0lf QU5ZX0lELCAwLCAwLCAobG9uZykgJm1kZmxkX2NoaXBfb3BzfSwKKwl7MHg4MDg2LCAweDAxMzIs IFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIChsb25nKSAmbWRmbGRfY2hpcF9vcHN9LAor CXsweDgwODYsIDB4MDEzMywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgKGxvbmcpICZt ZGZsZF9jaGlwX29wc30sCisJezB4ODA4NiwgMHgwMTM0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lE LCAwLCAwLCAobG9uZykgJm1kZmxkX2NoaXBfb3BzfSwKKwl7MHg4MDg2LCAweDAxMzUsIFBDSV9B TllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIChsb25nKSAmbWRmbGRfY2hpcF9vcHN9LAorCXsweDgw ODYsIDB4MDEzNiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgKGxvbmcpICZtZGZsZF9j aGlwX29wc30sCisJezB4ODA4NiwgMHgwMTM3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAw LCAobG9uZykgJm1kZmxkX2NoaXBfb3BzfSwKKyNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX0RS TV9HTUEzNjAwKQogCXsgMHg4MDg2LCAweDBiZTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAs IDAsIChsb25nKSAmY2R2X2NoaXBfb3BzfSwKIAl7IDB4ODA4NiwgMHgwYmUxLCBQQ0lfQU5ZX0lE LCBQQ0lfQU5ZX0lELCAwLCAwLCAobG9uZykgJmNkdl9jaGlwX29wc30sCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vZ21hNTAwL3BzYl9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAv cHNiX2Rydi5oCmluZGV4IDNjMGJmN2IuLmFmMWM5OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9nbWE1MDAvcHNiX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvcHNiX2Ry di5oCkBAIC0zODksMTEgKzM4OSw3OSBAQCBzdHJ1Y3QgcHNiX3N0YXRlIHsKIAl1aW50MzJfdCBz YXZlUFdNX0NPTlRST0xfTE9HSUM7CiB9OwogCitzdHJ1Y3QgbWVkZmllbGRfc3RhdGUgeworCXVp bnQzMl90IHNhdmVEUExMX0E7CisJdWludDMyX3Qgc2F2ZUZQQTA7CisJdWludDMyX3Qgc2F2ZVBJ UEVBQ09ORjsKKwl1aW50MzJfdCBzYXZlSFRPVEFMX0E7CisJdWludDMyX3Qgc2F2ZUhCTEFOS19B OworCXVpbnQzMl90IHNhdmVIU1lOQ19BOworCXVpbnQzMl90IHNhdmVWVE9UQUxfQTsKKwl1aW50 MzJfdCBzYXZlVkJMQU5LX0E7CisJdWludDMyX3Qgc2F2ZVZTWU5DX0E7CisJdWludDMyX3Qgc2F2 ZVBJUEVBU1JDOworCXVpbnQzMl90IHNhdmVEU1BBU1RSSURFOworCXVpbnQzMl90IHNhdmVEU1BB TElOT0ZGOworCXVpbnQzMl90IHNhdmVEU1BBVElMRU9GRjsKKwl1aW50MzJfdCBzYXZlRFNQQVNJ WkU7CisJdWludDMyX3Qgc2F2ZURTUEFQT1M7CisJdWludDMyX3Qgc2F2ZURTUEFTVVJGOworCXVp bnQzMl90IHNhdmVEU1BBQ05UUjsKKwl1aW50MzJfdCBzYXZlRFNQQVNUQVRVUzsKKwl1aW50MzJf dCBzYXZlX3BhbGV0dGVfYVsyNTZdOworCXVpbnQzMl90IHNhdmVNSVBJOworCisJdWludDMyX3Qg c2F2ZURQTExfQjsKKwl1aW50MzJfdCBzYXZlRlBCMDsKKwl1aW50MzJfdCBzYXZlUElQRUJDT05G OworCXVpbnQzMl90IHNhdmVIVE9UQUxfQjsKKwl1aW50MzJfdCBzYXZlSEJMQU5LX0I7CisJdWlu dDMyX3Qgc2F2ZUhTWU5DX0I7CisJdWludDMyX3Qgc2F2ZVZUT1RBTF9COworCXVpbnQzMl90IHNh dmVWQkxBTktfQjsKKwl1aW50MzJfdCBzYXZlVlNZTkNfQjsKKwl1aW50MzJfdCBzYXZlUElQRUJT UkM7CisJdWludDMyX3Qgc2F2ZURTUEJTVFJJREU7CisJdWludDMyX3Qgc2F2ZURTUEJMSU5PRkY7 CisJdWludDMyX3Qgc2F2ZURTUEJUSUxFT0ZGOworCXVpbnQzMl90IHNhdmVEU1BCU0laRTsKKwl1 aW50MzJfdCBzYXZlRFNQQlBPUzsKKwl1aW50MzJfdCBzYXZlRFNQQlNVUkY7CisJdWludDMyX3Qg c2F2ZURTUEJDTlRSOworCXVpbnQzMl90IHNhdmVEU1BCU1RBVFVTOworCXVpbnQzMl90IHNhdmVf cGFsZXR0ZV9iWzI1Nl07CisKKwl1aW50MzJfdCBzYXZlUElQRUNDT05GOworCXVpbnQzMl90IHNh dmVIVE9UQUxfQzsKKwl1aW50MzJfdCBzYXZlSEJMQU5LX0M7CisJdWludDMyX3Qgc2F2ZUhTWU5D X0M7CisJdWludDMyX3Qgc2F2ZVZUT1RBTF9DOworCXVpbnQzMl90IHNhdmVWQkxBTktfQzsKKwl1 aW50MzJfdCBzYXZlVlNZTkNfQzsKKwl1aW50MzJfdCBzYXZlUElQRUNTUkM7CisJdWludDMyX3Qg c2F2ZURTUENTVFJJREU7CisJdWludDMyX3Qgc2F2ZURTUENMSU5PRkY7CisJdWludDMyX3Qgc2F2 ZURTUENUSUxFT0ZGOworCXVpbnQzMl90IHNhdmVEU1BDU0laRTsKKwl1aW50MzJfdCBzYXZlRFNQ Q1BPUzsKKwl1aW50MzJfdCBzYXZlRFNQQ1NVUkY7CisJdWludDMyX3Qgc2F2ZURTUENDTlRSOwor CXVpbnQzMl90IHNhdmVEU1BDU1RBVFVTOworCXVpbnQzMl90IHNhdmVfcGFsZXR0ZV9jWzI1Nl07 CisJdWludDMyX3Qgc2F2ZU1JUElfQzsKKworCXVpbnQzMl90IHNhdmVQRklUX0NPTlRST0w7CisJ dWludDMyX3Qgc2F2ZVBGSVRfUEdNX1JBVElPUzsKKwl1aW50MzJfdCBzYXZlSERNSVBIWU1JU0ND VEw7CisJdWludDMyX3Qgc2F2ZUhETUlCX0NPTlRST0w7Cit9OworCiBzdHJ1Y3QgcHNiX3NhdmVf YXJlYSB7CiAJdWludDMyX3Qgc2F2ZUJTTTsKIAl1aW50MzJfdCBzYXZlVkJUOwogCXVuaW9uIHsK IAkgICAgICAgIHN0cnVjdCBwc2Jfc3RhdGUgcHNiOworCQlzdHJ1Y3QgbWVkZmllbGRfc3RhdGUg bWRmbGQ7CiAJfTsKIAl1aW50MzJfdCBzYXZlQkxDX1BXTV9DVEwyOwogCXVpbnQzMl90IHNhdmVC TENfUFdNX0NUTDsKQEAgLTU2Myw2ICs2MzEsMjQgQEAgc3RydWN0IGRybV9wc2JfcHJpdmF0ZSB7 CiAKIAkvKiAyRCBhY2NlbGVyYXRpb24gKi8KIAlzcGlubG9ja190IGxvY2tfMmQ7CisKKwkvKgor CSAqIFBhbmVsIGJyaWdodG5lc3MKKwkgKi8KKwlpbnQgYnJpZ2h0bmVzczsKKwlpbnQgYnJpZ2h0 bmVzc19hZGp1c3RlZDsKKworCWJvb2wgZHNyX2VuYWJsZTsKKwl1MzIgZHNyX2ZiX3VwZGF0ZTsK Kwlib29sIGRwaV9wYW5lbF9vblszXTsKKwl2b2lkICpkc2lfY29uZmlnc1syXTsKKwl1MzIgYnBw OworCXUzMiBicHAyOworCisJdTMyIHBpcGVjb25mWzNdOworCXUzMiBkc3BjbnRyWzNdOworCisJ aW50IG1kZmxkX3BhbmVsX2lkOwogfTsKIAogCkBAIC03NTgsNiArODQ0LDkgQEAgZXh0ZXJuIGNv bnN0IHN0cnVjdCBwc2Jfb3BzIHBzYl9jaGlwX29wczsKIC8qIG9ha3RyYWlsX2RldmljZS5jICov CiBleHRlcm4gY29uc3Qgc3RydWN0IHBzYl9vcHMgb2FrdHJhaWxfY2hpcF9vcHM7CiAKKy8qIG1k bGZkX2RldmljZS5jICovCitleHRlcm4gY29uc3Qgc3RydWN0IHBzYl9vcHMgbWRmbGRfY2hpcF9v cHM7CisKIC8qIGNkdl9kZXZpY2UuYyAqLwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBwc2Jfb3BzIGNk dl9jaGlwX29wczsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9wc2JfaXJx LmMgYi9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL3BzYl9pcnEuYwppbmRleCA3YmU4MDJiLi5hODZm YzNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL3BzYl9pcnEuYworKysgYi9k cml2ZXJzL2dwdS9kcm0vZ21hNTAwL3BzYl9pcnEuYwpAQCAtMjcsNiArMjcsOCBAQAogI2luY2x1 ZGUgInBzYl9yZWcuaCIKICNpbmNsdWRlICJwc2JfaW50ZWxfcmVnLmgiCiAjaW5jbHVkZSAicG93 ZXIuaCIKKyNpbmNsdWRlICJwc2JfaXJxLmgiCisjaW5jbHVkZSAibWRmbGRfb3V0cHV0LmgiCiAK IC8qCiAgKiBpbmxpbmUgZnVuY3Rpb25zCkBAIC00NTMsNiArNDU1LDExIEBAIGludCBwc2JfZW5h YmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgcGlwZSkKIAl1aW50MzJfdCBy ZWdfdmFsID0gMDsKIAl1aW50MzJfdCBwaXBlY29uZl9yZWcgPSBtaWRfcGlwZWNvbmYocGlwZSk7 CiAKKwkvKiBNZWRmaWVsZCBpcyBkaWZmZXJlbnQgLSB3ZSBzaG91bGQgcGVyaGFwcyBleHRyYWN0 IG91dCB2YmxhbmsKKwkgICBhbmQgYmxhY2tsaWdodCBldGMgb3BzICovCisJaWYgKElTX01GTEQo ZGV2KSkKKwkJcmV0dXJuIG1kZmxkX2VuYWJsZV90ZShkZXYsIHBpcGUpOworCiAJaWYgKGdtYV9w b3dlcl9iZWdpbihkZXYsIGZhbHNlKSkgewogCQlyZWdfdmFsID0gUkVHX1JFQUQocGlwZWNvbmZf cmVnKTsKIAkJZ21hX3Bvd2VyX2VuZChkZXYpOwpAQCAtNDg1LDYgKzQ5Miw4IEBAIHZvaWQgcHNi X2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwaXBlKQogCXN0cnVj dCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAl1bnNpZ25l ZCBsb25nIGlycWZsYWdzOwogCisJaWYgKElTX01GTEQoZGV2KSkKKwkJbWRmbGRfZGlzYWJsZV90 ZShkZXYsIHBpcGUpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+aXJxbWFza19sb2Nr LCBpcnFmbGFncyk7CiAKIAlpZiAocGlwZSA9PSAwKQpAQCAtNDk5LDYgKzUwOCw1NSBAQCB2b2lk IHBzYl9kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgcGlwZSkKIAlz cGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+aXJxbWFza19sb2NrLCBpcnFmbGFncyk7 CiB9CiAKKy8qCisgKiBJdCBpcyB1c2VkIHRvIGVuYWJsZSBURSBpbnRlcnJ1cHQKKyAqLworaW50 IG1kZmxkX2VuYWJsZV90ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgcGlwZSkKK3sKKwlz dHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9CisJCShzdHJ1Y3QgZHJtX3BzYl9wcml2 YXRlICopIGRldi0+ZGV2X3ByaXZhdGU7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKwl1aW50 MzJfdCByZWdfdmFsID0gMDsKKwl1aW50MzJfdCBwaXBlY29uZl9yZWcgPSBtaWRfcGlwZWNvbmYo cGlwZSk7CisKKwlpZiAoZ21hX3Bvd2VyX2JlZ2luKGRldiwgZmFsc2UpKSB7CisJCXJlZ192YWwg PSBSRUdfUkVBRChwaXBlY29uZl9yZWcpOworCQlnbWFfcG93ZXJfZW5kKGRldik7CisJfQorCisJ aWYgKCEocmVnX3ZhbCAmIFBJUEVBQ09ORl9FTkFCTEUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwor CXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+aXJxbWFza19sb2NrLCBpcnFmbGFncyk7CisK KwltaWRfZW5hYmxlX3BpcGVfZXZlbnQoZGV2X3ByaXYsIHBpcGUpOworCXBzYl9lbmFibGVfcGlw ZXN0YXQoZGV2X3ByaXYsIHBpcGUsIFBJUEVfVEVfRU5BQkxFKTsKKworCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJmRldl9wcml2LT5pcnFtYXNrX2xvY2ssIGlycWZsYWdzKTsKKworCXJldHVybiAw OworfQorCisvKgorICogSXQgaXMgdXNlZCB0byBkaXNhYmxlIFRFIGludGVycnVwdAorICovCit2 b2lkIG1kZmxkX2Rpc2FibGVfdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHBpcGUpCit7 CisJc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPQorCQkoc3RydWN0IGRybV9wc2Jf cHJpdmF0ZSAqKSBkZXYtPmRldl9wcml2YXRlOworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisK KwlpZiAoIWRldl9wcml2LT5kc3JfZW5hYmxlKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2tfaXJx c2F2ZSgmZGV2X3ByaXYtPmlycW1hc2tfbG9jaywgaXJxZmxhZ3MpOworCisJbWlkX2Rpc2FibGVf cGlwZV9ldmVudChkZXZfcHJpdiwgcGlwZSk7CisJcHNiX2Rpc2FibGVfcGlwZXN0YXQoZGV2X3By aXYsIHBpcGUsIFBJUEVfVEVfRU5BQkxFKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRl dl9wcml2LT5pcnFtYXNrX2xvY2ssIGlycWZsYWdzKTsKK30KKwogLyogQ2FsbGVkIGZyb20gZHJt IGdlbmVyaWMgY29kZSwgcGFzc2VkIGEgJ2NydGMnLCB3aGljaAogICogd2UgdXNlIGFzIGEgcGlw ZSBpbmRleAogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL3BzYl9pcnEu aCBiL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvcHNiX2lycS5oCmluZGV4IDIxNmZkYTMuLjYwMzA0 NWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvcHNiX2lycS5oCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9nbWE1MDAvcHNiX2lycS5oCkBAIC00Miw0ICs0Miw2IEBAIGludCAgcHNi X2VuYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHBpcGUpOwogdm9pZCBw c2JfZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHBpcGUpOwogdTMy ICBwc2JfZ2V0X3ZibGFua19jb3VudGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwaXBl KTsKIAoraW50IG1kZmxkX2VuYWJsZV90ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgcGlw ZSk7Cit2b2lkIG1kZmxkX2Rpc2FibGVfdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHBp cGUpOwogI2VuZGlmIC8qIF9TWVNJUlFfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9nbWE1MDAvdGMzNTg3NngtZHNpLWx2ZHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvdGMz NTg3NngtZHNpLWx2ZHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTA3 YWI1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC90YzM1ODc2eC1k c2ktbHZkcy5jCkBAIC0wLDAgKzEsODI5IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTEgSW50 ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVl IG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNv ZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUi KSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1 ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2Rp ZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNl bGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20g dGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZv bGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFu ZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFw aCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9u cyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAi QVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBM SUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05J TkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJ R0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAq IExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RI RVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRI RSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdB UkUuCisgKgorICovCisKKyNpbmNsdWRlICJtZGZsZF9kc2lfZHBpLmgiCisjaW5jbHVkZSAibWRm bGRfb3V0cHV0LmgiCisjaW5jbHVkZSAibWRmbGRfZHNpX3BrZ19zZW5kZXIuaCIKKyNpbmNsdWRl ICJ0YzM1ODc2eC1kc2ktbHZkcy5oIgorI2luY2x1ZGUgPGxpbnV4L2kyYy90YzM1ODc2eC5oPgor I2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2lu Y2x1ZGUgPGFzbS9pbnRlbF9zY3VfaXBjLmg+CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCAq dGMzNTg3NnhfY2xpZW50Oworc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50ICpjbWlfbGNkX2kyY19j bGllbnQ7CisKKyNkZWZpbmUgRkxEX01BU0soc3RhcnQsIGVuZCkJKCgoMSA8PCAoKHN0YXJ0KSAt IChlbmQpICsgMSkpIC0gMSkgPDwgKGVuZCkpCisjZGVmaW5lIEZMRF9WQUwodmFsLCBzdGFydCwg ZW5kKSAoKCh2YWwpIDw8IChlbmQpKSAmIEZMRF9NQVNLKHN0YXJ0LCBlbmQpKQorCisvKiBEU0kg RC1QSFkgTGF5ZXIgUmVnaXN0ZXJzICovCisjZGVmaW5lIEQwV19EUEhZQ09OVFRYCQkweDAwMDQK KyNkZWZpbmUgQ0xXX0RQSFlDT05UUlgJCTB4MDAyMAorI2RlZmluZSBEMFdfRFBIWUNPTlRSWAkJ MHgwMDI0CisjZGVmaW5lIEQxV19EUEhZQ09OVFJYCQkweDAwMjgKKyNkZWZpbmUgRDJXX0RQSFlD T05UUlgJCTB4MDAyQworI2RlZmluZSBEM1dfRFBIWUNPTlRSWAkJMHgwMDMwCisjZGVmaW5lIENP TV9EUEhZQ09OVFJYCQkweDAwMzgKKyNkZWZpbmUgQ0xXX0NOVFJMCQkweDAwNDAKKyNkZWZpbmUg RDBXX0NOVFJMCQkweDAwNDQKKyNkZWZpbmUgRDFXX0NOVFJMCQkweDAwNDgKKyNkZWZpbmUgRDJX X0NOVFJMCQkweDAwNEMKKyNkZWZpbmUgRDNXX0NOVFJMCQkweDAwNTAKKyNkZWZpbmUgREZUTU9E RV9DTlRSTAkJMHgwMDU0CisKKy8qIERTSSBQUEkgTGF5ZXIgUmVnaXN0ZXJzICovCisjZGVmaW5l IFBQSV9TVEFSVFBQSQkJMHgwMTA0CisjZGVmaW5lIFBQSV9CVVNZUFBJCQkweDAxMDgKKyNkZWZp bmUgUFBJX0xJTkVJTklUQ05UCQkweDAxMTAKKyNkZWZpbmUgUFBJX0xQVFhUSU1FQ05UCQkweDAx MTQKKyNkZWZpbmUgUFBJX0xBTkVFTkFCTEUJCTB4MDEzNAorI2RlZmluZSBQUElfVFhfUlhfVEEJ CTB4MDEzQworI2RlZmluZSBQUElfQ0xTX0FUTVIJCTB4MDE0MAorI2RlZmluZSBQUElfRDBTX0FU TVIJCTB4MDE0NAorI2RlZmluZSBQUElfRDFTX0FUTVIJCTB4MDE0OAorI2RlZmluZSBQUElfRDJT X0FUTVIJCTB4MDE0QworI2RlZmluZSBQUElfRDNTX0FUTVIJCTB4MDE1MAorI2RlZmluZSBQUElf RDBTX0NMUlNJUE9DT1VOVAkweDAxNjQKKyNkZWZpbmUgUFBJX0QxU19DTFJTSVBPQ09VTlQJMHgw MTY4CisjZGVmaW5lIFBQSV9EMlNfQ0xSU0lQT0NPVU5UCTB4MDE2QworI2RlZmluZSBQUElfRDNT X0NMUlNJUE9DT1VOVAkweDAxNzAKKyNkZWZpbmUgQ0xTX1BSRQkJCTB4MDE4MAorI2RlZmluZSBE MFNfUFJFCQkJMHgwMTg0CisjZGVmaW5lIEQxU19QUkUJCQkweDAxODgKKyNkZWZpbmUgRDJTX1BS RQkJCTB4MDE4QworI2RlZmluZSBEM1NfUFJFCQkJMHgwMTkwCisjZGVmaW5lIENMU19QUkVQCQkw eDAxQTAKKyNkZWZpbmUgRDBTX1BSRVAJCTB4MDFBNAorI2RlZmluZSBEMVNfUFJFUAkJMHgwMUE4 CisjZGVmaW5lIEQyU19QUkVQCQkweDAxQUMKKyNkZWZpbmUgRDNTX1BSRVAJCTB4MDFCMAorI2Rl ZmluZSBDTFNfWkVSTwkJMHgwMUMwCisjZGVmaW5lIEQwU19aRVJPCQkweDAxQzQKKyNkZWZpbmUg RDFTX1pFUk8JCTB4MDFDOAorI2RlZmluZSBEMlNfWkVSTwkJMHgwMUNDCisjZGVmaW5lIEQzU19a RVJPCQkweDAxRDAKKyNkZWZpbmUgUFBJX0NMUkZMRwkJMHgwMUUwCisjZGVmaW5lIFBQSV9DTFJT SVBPCQkweDAxRTQKKyNkZWZpbmUgSFNUSU1FT1VUCQkweDAxRjAKKyNkZWZpbmUgSFNUSU1FT1VU RU5BQkxFCQkweDAxRjQKKworLyogRFNJIFByb3RvY29sIExheWVyIFJlZ2lzdGVycyAqLworI2Rl ZmluZSBEU0lfU1RBUlREU0kJCTB4MDIwNAorI2RlZmluZSBEU0lfQlVTWURTSQkJMHgwMjA4Cisj ZGVmaW5lIERTSV9MQU5FRU5BQkxFCQkweDAyMTAKKyNkZWZpbmUgRFNJX0xBTkVTVEFUVVMwCQkw eDAyMTQKKyNkZWZpbmUgRFNJX0xBTkVTVEFUVVMxCQkweDAyMTgKKyNkZWZpbmUgRFNJX0lOVFNU QVRVUwkJMHgwMjIwCisjZGVmaW5lIERTSV9JTlRNQVNLCQkweDAyMjQKKyNkZWZpbmUgRFNJX0lO VENMUgkJMHgwMjI4CisjZGVmaW5lIERTSV9MUFRYVE8JCTB4MDIzMAorCisvKiBEU0kgR2VuZXJh bCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgRFNJRVJSQ05UCQkweDAzMDAKKworLyogRFNJIEFwcGxp Y2F0aW9uIExheWVyIFJlZ2lzdGVycyAqLworI2RlZmluZSBBUExDVFJMCQkJMHgwNDAwCisjZGVm aW5lIFJEUEtUTE4JCQkweDA0MDQKKworLyogVmlkZW8gUGF0aCBSZWdpc3RlcnMgKi8KKyNkZWZp bmUgVlBDVFJMCQkJMHgwNDUwCisjZGVmaW5lIEhUSU0xCQkJMHgwNDU0CisjZGVmaW5lIEhUSU0y CQkJMHgwNDU4CisjZGVmaW5lIFZUSU0xCQkJMHgwNDVDCisjZGVmaW5lIFZUSU0yCQkJMHgwNDYw CisjZGVmaW5lIFZGVUVOCQkJMHgwNDY0CisKKy8qIExWRFMgUmVnaXN0ZXJzICovCisjZGVmaW5l IExWTVgwMDAzCQkweDA0ODAKKyNkZWZpbmUgTFZNWDA0MDcJCTB4MDQ4NAorI2RlZmluZSBMVk1Y MDgxMQkJMHgwNDg4CisjZGVmaW5lIExWTVgxMjE1CQkweDA0OEMKKyNkZWZpbmUgTFZNWDE2MTkJ CTB4MDQ5MAorI2RlZmluZSBMVk1YMjAyMwkJMHgwNDk0CisjZGVmaW5lIExWTVgyNDI3CQkweDA0 OTgKKyNkZWZpbmUgTFZDRkcJCQkweDA0OUMKKyNkZWZpbmUgTFZQSFkwCQkJMHgwNEEwCisjZGVm aW5lIExWUEhZMQkJCTB4MDRBNAorCisvKiBTeXN0ZW0gUmVnaXN0ZXJzICovCisjZGVmaW5lIFNZ U1NUQVQJCQkweDA1MDAKKyNkZWZpbmUgU1lTUlNUCQkJMHgwNTA0CisKKy8qIEdQSU8gUmVnaXN0 ZXJzICovCisvKiNkZWZpbmUgR1BJT0MJCQkweDA1MjAqLworI2RlZmluZSBHUElPTwkJCTB4MDUy NAorI2RlZmluZSBHUElPSQkJCTB4MDUyOAorCisvKiBJMkMgUmVnaXN0ZXJzICovCisjZGVmaW5l IEkyQ1RJTUNUUkwJCTB4MDU0MAorI2RlZmluZSBJMkNNQUREUgkJMHgwNTQ0CisjZGVmaW5lIFdE QVRBUQkJCTB4MDU0OAorI2RlZmluZSBSREFUQVEJCQkweDA1NEMKKworLyogQ2hpcC9SZXYgUmVn aXN0ZXJzICovCisjZGVmaW5lIElEUkVHCQkJMHgwNTgwCisKKy8qIERlYnVnIFJlZ2lzdGVycyAq LworI2RlZmluZSBERUJVRzAwCQkJMHgwNUEwCisjZGVmaW5lIERFQlVHMDEJCQkweDA1QTQKKwor LyogUGFuZWwgQ0FCQyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUEFORUxfUFdNX0NPTlRST0wJMHg5 MAorI2RlZmluZSBQQU5FTF9GUkVRX0RJVklERVJfSEkJMHg5MQorI2RlZmluZSBQQU5FTF9GUkVR X0RJVklERVJfTE8JMHg5MgorI2RlZmluZSBQQU5FTF9EVVRZX0NPTlRST0wJMHg5MworI2RlZmlu ZSBQQU5FTF9NT0RJRllfUkdCCTB4OTQKKyNkZWZpbmUgUEFORUxfRlJBTUVSQVRFX0NPTlRST0wJ MHg5NgorI2RlZmluZSBQQU5FTF9QV01fTUlOCQkweDk3CisjZGVmaW5lIFBBTkVMX1BXTV9SRUYJ CTB4OTgKKyNkZWZpbmUgUEFORUxfUFdNX01BWAkJMHg5OQorI2RlZmluZSBQQU5FTF9BTExPV19E SVNUT1JUCTB4OUEKKyNkZWZpbmUgUEFORUxfQllQQVNTX1BXTUkJMHg5QgorCisvKiBQYW5lbCBj b2xvciBtYW5hZ2VtZW50IHJlZ2lzdGVycyAqLworI2RlZmluZSBQQU5FTF9DTV9FTkFCTEUJCTB4 NzAwCisjZGVmaW5lIFBBTkVMX0NNX0hVRQkJMHg3MDEKKyNkZWZpbmUgUEFORUxfQ01fU0FUVVJB VElPTgkweDcwMgorI2RlZmluZSBQQU5FTF9DTV9JTlRFTlNJVFkJMHg3MDMKKyNkZWZpbmUgUEFO RUxfQ01fQlJJR0hUTkVTUwkweDcwNAorI2RlZmluZSBQQU5FTF9DTV9DRV9FTkFCTEUJMHg3MDUK KyNkZWZpbmUgUEFORUxfQ01fUEVBS19FTgkweDcxMAorI2RlZmluZSBQQU5FTF9DTV9HQUlOCQkw eDcxMQorI2RlZmluZSBQQU5FTF9DTV9IVUVUQUJMRV9TVEFSVAkweDczMAorI2RlZmluZSBQQU5F TF9DTV9IVUVUQUJMRV9FTkQJMHg3NDcgLyogaW5jbHVzaXZlICovCisKKy8qIElucHV0IG11eGlu ZyBmb3IgcmVnaXN0ZXJzIExWTVgwMDAzLi4uTFZNWDI0MjcgKi8KK2VudW0geworCUlOUFVUX1Iw LAkvKiAwICovCisJSU5QVVRfUjEsCisJSU5QVVRfUjIsCisJSU5QVVRfUjMsCisJSU5QVVRfUjQs CisJSU5QVVRfUjUsCisJSU5QVVRfUjYsCisJSU5QVVRfUjcsCisJSU5QVVRfRzAsCS8qIDggKi8K KwlJTlBVVF9HMSwKKwlJTlBVVF9HMiwKKwlJTlBVVF9HMywKKwlJTlBVVF9HNCwKKwlJTlBVVF9H NSwKKwlJTlBVVF9HNiwKKwlJTlBVVF9HNywKKwlJTlBVVF9CMCwJLyogMTYgKi8KKwlJTlBVVF9C MSwKKwlJTlBVVF9CMiwKKwlJTlBVVF9CMywKKwlJTlBVVF9CNCwKKwlJTlBVVF9CNSwKKwlJTlBV VF9CNiwKKwlJTlBVVF9CNywKKwlJTlBVVF9IU1lOQywJLyogMjQgKi8KKwlJTlBVVF9WU1lOQywK KwlJTlBVVF9ERSwKKwlMT0dJQ18wLAorCS8qIDI4Li4uMzEgdW5kZWZpbmVkICovCit9OworCisj ZGVmaW5lIElOUFVUX01VWChsdm14MDMsIGx2bXgwMiwgbHZteDAxLCBsdm14MDApCQlcCisJKEZM RF9WQUwobHZteDAzLCAyOSwgMjQpIHwgRkxEX1ZBTChsdm14MDIsIDIwLCAxNikgfAlcCisJRkxE X1ZBTChsdm14MDEsIDEyLCA4KSB8IEZMRF9WQUwobHZteDAwLCA0LCAwKSkKKworLyoqCisgKiB0 YzM1ODc2eF9yZWd3IC0gV3JpdGUgRFNJLUxWRFMgYnJpZGdlIHJlZ2lzdGVyIHVzaW5nIEkyQwor ICogQGNsaWVudDogc3RydWN0IGkyY19jbGllbnQgdG8gdXNlCisgKiBAcmVnOiByZWdpc3RlciBh ZGRyZXNzCisgKiBAdmFsdWU6IHZhbHVlIHRvIHdyaXRlCisgKgorICogUmV0dXJucyAwIG9uIHN1 Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgdmFsdWUuCisgKi8KK3N0YXRpYyBpbnQgdGMzNTg3 NnhfcmVndyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1MTYgcmVnLCB1MzIgdmFsdWUpCit7 CisJaW50IHI7CisJdTggdHhfZGF0YVtdID0geworCQkvKiBOT1RFOiBSZWdpc3RlciBhZGRyZXNz IGJpZy1lbmRpYW4sIGRhdGEgbGl0dGxlLWVuZGlhbi4gKi8KKwkJKHJlZyA+PiA4KSAmIDB4ZmYs CisJCXJlZyAmIDB4ZmYsCisJCXZhbHVlICYgMHhmZiwKKwkJKHZhbHVlID4+IDgpICYgMHhmZiwK KwkJKHZhbHVlID4+IDE2KSAmIDB4ZmYsCisJCSh2YWx1ZSA+PiAyNCkgJiAweGZmLAorCX07CisJ c3RydWN0IGkyY19tc2cgbXNnc1tdID0geworCQl7CisJCQkuYWRkciA9IGNsaWVudC0+YWRkciwK KwkJCS5mbGFncyA9IDAsCisJCQkuYnVmID0gdHhfZGF0YSwKKwkJCS5sZW4gPSBBUlJBWV9TSVpF KHR4X2RhdGEpLAorCQl9LAorCX07CisKKwlyID0gaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRl ciwgbXNncywgQVJSQVlfU0laRShtc2dzKSk7CisJaWYgKHIgPCAwKSB7CisJCWRldl9lcnIoJmNs aWVudC0+ZGV2LCAiJXM6IHJlZyAweCUwNHggdmFsIDB4JTA4eCBlcnJvciAlZFxuIiwKKwkJCV9f ZnVuY19fLCByZWcsIHZhbHVlLCByKTsKKwkJcmV0dXJuIHI7CisJfQorCisJaWYgKHIgPCBBUlJB WV9TSVpFKG1zZ3MpKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiJXM6IHJlZyAweCUwNHgg dmFsIDB4JTA4eCBtc2dzICVkXG4iLAorCQkJX19mdW5jX18sIHJlZywgdmFsdWUsIHIpOworCQly ZXR1cm4gLUVBR0FJTjsKKwl9CisKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgIiVzOiByZWcgMHgl MDR4IHZhbCAweCUwOHhcbiIsCisJCQlfX2Z1bmNfXywgcmVnLCB2YWx1ZSk7CisKKwlyZXR1cm4g MDsKK30KKworLyoqCisgKiB0YzM1ODc2eF9yZWdyIC0gUmVhZCBEU0ktTFZEUyBicmlkZ2UgcmVn aXN0ZXIgdXNpbmcgSTJDCisgKiBAY2xpZW50OiBzdHJ1Y3QgaTJjX2NsaWVudCB0byB1c2UKKyAq IEByZWc6IHJlZ2lzdGVyIGFkZHJlc3MKKyAqIEB2YWx1ZTogcG9pbnRlciBmb3Igc3RvcmluZyB0 aGUgdmFsdWUKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJv ciB2YWx1ZS4KKyAqLworc3RhdGljIGludCB0YzM1ODc2eF9yZWdyKHN0cnVjdCBpMmNfY2xpZW50 ICpjbGllbnQsIHUxNiByZWcsIHUzMiAqdmFsdWUpCit7CisJaW50IHI7CisJdTggdHhfZGF0YVtd ID0geworCQkocmVnID4+IDgpICYgMHhmZiwKKwkJcmVnICYgMHhmZiwKKwl9OworCXU4IHJ4X2Rh dGFbNF07CisJc3RydWN0IGkyY19tc2cgbXNnc1tdID0geworCQl7CisJCQkuYWRkciA9IGNsaWVu dC0+YWRkciwKKwkJCS5mbGFncyA9IDAsCisJCQkuYnVmID0gdHhfZGF0YSwKKwkJCS5sZW4gPSBB UlJBWV9TSVpFKHR4X2RhdGEpLAorCQl9LAorCQl7CisJCQkuYWRkciA9IGNsaWVudC0+YWRkciwK KwkJCS5mbGFncyA9IEkyQ19NX1JELAorCQkJLmJ1ZiA9IHJ4X2RhdGEsCisJCQkubGVuID0gQVJS QVlfU0laRShyeF9kYXRhKSwKKwkJIH0sCisJfTsKKworCXIgPSBpMmNfdHJhbnNmZXIoY2xpZW50 LT5hZGFwdGVyLCBtc2dzLCBBUlJBWV9TSVpFKG1zZ3MpKTsKKwlpZiAociA8IDApIHsKKwkJZGV2 X2VycigmY2xpZW50LT5kZXYsICIlczogcmVnIDB4JTA0eCBlcnJvciAlZFxuIiwgX19mdW5jX18s CisJCQlyZWcsIHIpOworCQlyZXR1cm4gcjsKKwl9CisKKwlpZiAociA8IEFSUkFZX1NJWkUobXNn cykpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICIlczogcmVnIDB4JTA0eCBtc2dzICVkXG4i LCBfX2Z1bmNfXywKKwkJCXJlZywgcik7CisJCXJldHVybiAtRUFHQUlOOworCX0KKworCSp2YWx1 ZSA9IHJ4X2RhdGFbMF0gPDwgMjQgfCByeF9kYXRhWzFdIDw8IDE2IHwKKwkJcnhfZGF0YVsyXSA8 PCA4IHwgcnhfZGF0YVszXTsKKworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiJXM6IHJlZyAweCUw NHggdmFsdWUgMHglMDh4XG4iLCBfX2Z1bmNfXywKKwkJcmVnLCAqdmFsdWUpOworCisJcmV0dXJu IDA7Cit9CisKK3ZvaWQgdGMzNTg3Nnhfc2V0X2JyaWRnZV9yZXNldF9zdGF0ZShzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCBpbnQgc3RhdGUpCit7CisJc3RydWN0IHRjMzU4NzZ4X3BsYXRmb3JtX2Rh dGEgKnBkYXRhOworCisJaWYgKFdBUk4oIXRjMzU4NzZ4X2NsaWVudCwgIiVzIGNhbGxlZCBiZWZv cmUgcHJvYmUiLCBfX2Z1bmNfXykpCisJCXJldHVybjsKKworCWRldl9kYmcoJnRjMzU4NzZ4X2Ns aWVudC0+ZGV2LCAiJXM6IHN0YXRlICVkXG4iLCBfX2Z1bmNfXywgc3RhdGUpOworCisJcGRhdGEg PSBkZXZfZ2V0X3BsYXRkYXRhKCZ0YzM1ODc2eF9jbGllbnQtPmRldik7CisKKwlpZiAocGRhdGEt PmdwaW9fYnJpZGdlX3Jlc2V0ID09IC0xKQorCQlyZXR1cm47CisKKwlpZiAoc3RhdGUpIHsKKwkJ Z3Bpb19zZXRfdmFsdWVfY2Fuc2xlZXAocGRhdGEtPmdwaW9fYnJpZGdlX3Jlc2V0LCAwKTsKKwkJ bWRlbGF5KDEwKTsKKwl9IGVsc2UgeworCQkvKiBQdWxsIE1JUEkgQnJpZGdlIHJlc2V0IHBpbiB0 byBMb3cgKi8KKwkJZ3Bpb19zZXRfdmFsdWVfY2Fuc2xlZXAocGRhdGEtPmdwaW9fYnJpZGdlX3Jl c2V0LCAwKTsKKwkJbWRlbGF5KDIwKTsKKwkJLyogUHVsbCBNSVBJIEJyaWRnZSByZXNldCBwaW4g dG8gSGlnaCAqLworCQlncGlvX3NldF92YWx1ZV9jYW5zbGVlcChwZGF0YS0+Z3Bpb19icmlkZ2Vf cmVzZXQsIDEpOworCQltZGVsYXkoNDApOworCX0KK30KKwordm9pZCB0YzM1ODc2eF9jb25maWd1 cmVfbHZkc19icmlkZ2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaTJjX2Ns aWVudCAqaTJjID0gdGMzNTg3NnhfY2xpZW50OworCXUzMiBwcGlfbHB0eHRpbWVjbnQ7CisJdTMy IHR4dGFnb2NudDsKKwl1MzIgdHh0YXN1cmVjbnQ7CisJdTMyIGlkOworCisJaWYgKFdBUk4oIXRj MzU4NzZ4X2NsaWVudCwgIiVzIGNhbGxlZCBiZWZvcmUgcHJvYmUiLCBfX2Z1bmNfXykpCisJCXJl dHVybjsKKworCWRldl9kYmcoJnRjMzU4NzZ4X2NsaWVudC0+ZGV2LCAiJXNcbiIsIF9fZnVuY19f KTsKKworCWlmICghdGMzNTg3NnhfcmVncihpMmMsIElEUkVHLCAmaWQpKQorCQlkZXZfaW5mbygm dGMzNTg3NnhfY2xpZW50LT5kZXYsICJ0YzM1ODc2eCBJRCAweCUwOHhcbiIsIGlkKTsKKwllbHNl CisJCWRldl9lcnIoJnRjMzU4NzZ4X2NsaWVudC0+ZGV2LCAiQ2Fubm90IHJlYWQgSURcbiIpOwor CisJcHBpX2xwdHh0aW1lY250ID0gNDsKKwl0eHRhZ29jbnQgPSAoNSAqIHBwaV9scHR4dGltZWNu dCAtIDMpIC8gNDsKKwl0eHRhc3VyZWNudCA9IDMgKiBwcGlfbHB0eHRpbWVjbnQgLyAyOworCXRj MzU4NzZ4X3JlZ3coaTJjLCBQUElfVFhfUlhfVEEsIEZMRF9WQUwodHh0YWdvY250LCAyNiwgMTYp IHwKKwkJRkxEX1ZBTCh0eHRhc3VyZWNudCwgMTAsIDApKTsKKwl0YzM1ODc2eF9yZWd3KGkyYywg UFBJX0xQVFhUSU1FQ05ULCBGTERfVkFMKHBwaV9scHR4dGltZWNudCwgMTAsIDApKTsKKworCXRj MzU4NzZ4X3JlZ3coaTJjLCBQUElfRDBTX0NMUlNJUE9DT1VOVCwgRkxEX1ZBTCgxLCA1LCAwKSk7 CisJdGMzNTg3NnhfcmVndyhpMmMsIFBQSV9EMVNfQ0xSU0lQT0NPVU5ULCBGTERfVkFMKDEsIDUs IDApKTsKKwl0YzM1ODc2eF9yZWd3KGkyYywgUFBJX0QyU19DTFJTSVBPQ09VTlQsIEZMRF9WQUwo MSwgNSwgMCkpOworCXRjMzU4NzZ4X3JlZ3coaTJjLCBQUElfRDNTX0NMUlNJUE9DT1VOVCwgRkxE X1ZBTCgxLCA1LCAwKSk7CisKKwkvKiBFbmFibGluZyBNSVBJICYgUFBJIGxhbmVzLCBFbmFibGUg NCBsYW5lcyAqLworCXRjMzU4NzZ4X3JlZ3coaTJjLCBQUElfTEFORUVOQUJMRSwKKwkJQklUKDQp IHwgQklUKDMpIHwgQklUKDIpIHwgQklUKDEpIHwgQklUKDApKTsKKwl0YzM1ODc2eF9yZWd3KGky YywgRFNJX0xBTkVFTkFCTEUsCisJCUJJVCg0KSB8IEJJVCgzKSB8IEJJVCgyKSB8IEJJVCgxKSB8 IEJJVCgwKSk7CisJdGMzNTg3NnhfcmVndyhpMmMsIFBQSV9TVEFSVFBQSSwgQklUKDApKTsKKwl0 YzM1ODc2eF9yZWd3KGkyYywgRFNJX1NUQVJURFNJLCBCSVQoMCkpOworCisJLyogU2V0dGluZyBM VkRTIG91dHB1dCBmcmVxdWVuY3kgKi8KKwl0YzM1ODc2eF9yZWd3KGkyYywgTFZQSFkwLCBGTERf VkFMKDEsIDIwLCAxNikgfAorCQlGTERfVkFMKDIsIDE1LCAxNCkgfCBGTERfVkFMKDYsIDQsIDAp KTsgLyogMHgwMDA0ODAwNiAqLworCisJLyogU2V0dGluZyB2aWRlbyBwYW5lbCBjb250cm9sIHJl Z2lzdGVyLDB4MDAwMDAxMjAgVlRHZW49T04gPyE/IT8gKi8KKwl0YzM1ODc2eF9yZWd3KGkyYywg VlBDVFJMLCBCSVQoOCkgfCBCSVQoNSkpOworCisJLyogSG9yaXpvbnRhbCBiYWNrIHBvcmNoIGFu ZCBob3Jpem9udGFsIHB1bHNlIHdpZHRoLiAweDAwMjgwMDI4ICovCisJdGMzNTg3NnhfcmVndyhp MmMsIEhUSU0xLCBGTERfVkFMKDQwLCAyNCwgMTYpIHwgRkxEX1ZBTCg0MCwgOCwgMCkpOworCisJ LyogSG9yaXpvbnRhbCBmcm9udCBwb3JjaCBhbmQgaG9yaXpvbnRhbCBhY3RpdmUgdmlkZW8gc2l6 ZS4gMHgwMDUwMDUwMCovCisJdGMzNTg3NnhfcmVndyhpMmMsIEhUSU0yLCBGTERfVkFMKDgwLCAy NCwgMTYpIHwgRkxEX1ZBTCgxMjgwLCAxMCwgMCkpOworCisJLyogVmVydGljYWwgYmFjayBwb3Jj aCBhbmQgdmVydGljYWwgc3luYyBwdWxzZSB3aWR0aC4gMHgwMDBlMDAwYSAqLworCXRjMzU4NzZ4 X3JlZ3coaTJjLCBWVElNMSwgRkxEX1ZBTCgxNCwgMjMsIDE2KSB8IEZMRF9WQUwoMTAsIDcsIDAp KTsKKworCS8qIFZlcnRpY2FsIGZyb250IHBvcmNoIGFuZCB2ZXJ0aWNhbCBkaXNwbGF5IHNpemUu IDB4MDAwZTAzMjAgKi8KKwl0YzM1ODc2eF9yZWd3KGkyYywgVlRJTTIsIEZMRF9WQUwoMTQsIDIz LCAxNikgfCBGTERfVkFMKDgwMCwgMTAsIDApKTsKKworCS8qIFNldCBhYm92ZSBIVElNMSwgSFRJ TTIsIFZUSU0xLCBhbmQgVlRJTTIgYXQgbmV4dCBWU1lOQy4gKi8KKwl0YzM1ODc2eF9yZWd3KGky YywgVkZVRU4sIEJJVCgwKSk7CisKKwkvKiBTb2Z0IHJlc2V0IExDRCBjb250cm9sbGVyLiAqLwor CXRjMzU4NzZ4X3JlZ3coaTJjLCBTWVNSU1QsIEJJVCgyKSk7CisKKwkvKiBMVkRTLVRYIGlucHV0 IG11eGluZyAqLworCXRjMzU4NzZ4X3JlZ3coaTJjLCBMVk1YMDAwMywKKwkJSU5QVVRfTVVYKElO UFVUX1I1LCBJTlBVVF9SNCwgSU5QVVRfUjMsIElOUFVUX1IyKSk7CisJdGMzNTg3NnhfcmVndyhp MmMsIExWTVgwNDA3LAorCQlJTlBVVF9NVVgoSU5QVVRfRzIsIElOUFVUX1I3LCBJTlBVVF9SMSwg SU5QVVRfUjYpKTsKKwl0YzM1ODc2eF9yZWd3KGkyYywgTFZNWDA4MTEsCisJCUlOUFVUX01VWChJ TlBVVF9HMSwgSU5QVVRfRzAsIElOUFVUX0c0LCBJTlBVVF9HMykpOworCXRjMzU4NzZ4X3JlZ3co aTJjLCBMVk1YMTIxNSwKKwkJSU5QVVRfTVVYKElOUFVUX0IyLCBJTlBVVF9HNywgSU5QVVRfRzYs IElOUFVUX0c1KSk7CisJdGMzNTg3NnhfcmVndyhpMmMsIExWTVgxNjE5LAorCQlJTlBVVF9NVVgo SU5QVVRfQjQsIElOUFVUX0IzLCBJTlBVVF9CMSwgSU5QVVRfQjApKTsKKwl0YzM1ODc2eF9yZWd3 KGkyYywgTFZNWDIwMjMsCisJCUlOUFVUX01VWChMT0dJQ18wLCAgSU5QVVRfQjcsIElOUFVUX0I2 LCBJTlBVVF9CNSkpOworCXRjMzU4NzZ4X3JlZ3coaTJjLCBMVk1YMjQyNywKKwkJSU5QVVRfTVVY KElOUFVUX1IwLCBJTlBVVF9ERSwgSU5QVVRfVlNZTkMsIElOUFVUX0hTWU5DKSk7CisKKwkvKiBF bmFibGUgTFZEUyB0cmFuc21pdHRlci4gKi8KKwl0YzM1ODc2eF9yZWd3KGkyYywgTFZDRkcsIEJJ VCgwKSk7CisKKwkvKiBDbGVhciBub3RpZmljYXRpb25zLiBEb24ndCB3cml0ZSByZXNlcnZlZCBi aXRzLiBXYXMgd3JpdGUgMHhmZmZmZmZmZgorCSAqIHRvIDB4MDI4OCwgbXVzdCBiZSBpbiBlcnJv cj8hICovCisJdGMzNTg3NnhfcmVndyhpMmMsIERTSV9JTlRDTFIsIEZMRF9NQVNLKDMxLCAzMCkg fCBGTERfTUFTSygyMiwgMCkpOworfQorCisjZGVmaW5lIEdQSU9QV01DVFJMCTB4MzhGCisjZGVm aW5lIFBXTTBDTEtESVYwCTB4NjIgLyogbG93IGJ5dGUgKi8KKyNkZWZpbmUgUFdNMENMS0RJVjEJ MHg2MSAvKiBoaWdoIGJ5dGUgKi8KKworI2RlZmluZSBTWVNURU1DTEsJMTkyMDAwMDBVTCAvKiAx OS4yIE1IeiAqLworI2RlZmluZSBQV01fRlJFUVVFTkNZCTk2MDAgLyogSHogKi8KKworLyogZiA9 IGJhc2VjbGsgLyAoY2xrZGl2ICsgMSkgPT4gY2xrZGl2ID0gKGJhc2VjbGsgLSBmKSAvIGYgKi8K K3N0YXRpYyBpbmxpbmUgdTE2IGNhbGNfY2xrZGl2KHVuc2lnbmVkIGxvbmcgYmFzZWNsaywgdW5z aWduZWQgaW50IGYpCit7CisJcmV0dXJuIChiYXNlY2xrIC0gZikgLyBmOworfQorCitzdGF0aWMg dm9pZCB0YzM1ODc2eF9icmlnaHRuZXNzX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sK KwlpbnQgcmV0OworCXU4IHB3bWN0cmw7CisJdTE2IGNsa2RpdjsKKworCS8qIE1ha2Ugc3VyZSB0 aGUgUFdNIHJlZmVyZW5jZSBpcyB0aGUgMTkuMiBNSHogc3lzdGVtIGNsb2NrLiBSZWFkIGZpcnN0 CisJICogaW5zdGVhZCBvZiBzZXR0aW5nIGRpcmVjdGx5IHRvIGNhdGNoIHBvdGVudGlhbCBjb25m bGljdHMgYmV0d2VlbiBQV00KKwkgKiB1c2Vycy4gKi8KKwlyZXQgPSBpbnRlbF9zY3VfaXBjX2lv cmVhZDgoR1BJT1BXTUNUUkwsICZwd21jdHJsKTsKKwlpZiAocmV0IHx8IHB3bWN0cmwgIT0gMHgw MSkgeworCQlpZiAocmV0KQorCQkJZGV2X2VycigmZGV2LT5wZGV2LT5kZXYsICJHUElPUFdNQ1RS TCByZWFkIGZhaWxlZFxuIik7CisJCWVsc2UKKwkJCWRldl93YXJuKCZkZXYtPnBkZXYtPmRldiwg IkdQSU9QV01DVFJMIHdhcyBub3Qgc2V0IHRvIHN5c3RlbSBjbG9jayAocHdtY3RybCA9IDB4JTAy eClcbiIsIHB3bWN0cmwpOworCisJCXJldCA9IGludGVsX3NjdV9pcGNfaW93cml0ZTgoR1BJT1BX TUNUUkwsIDB4MDEpOworCQlpZiAocmV0KQorCQkJZGV2X2VycigmZGV2LT5wZGV2LT5kZXYsICJH UElPUFdNQ1RSTCBzZXQgZmFpbGVkXG4iKTsKKwl9CisKKwljbGtkaXYgPSBjYWxjX2Nsa2RpdihT WVNURU1DTEssIFBXTV9GUkVRVUVOQ1kpOworCisJcmV0ID0gaW50ZWxfc2N1X2lwY19pb3dyaXRl OChQV00wQ0xLRElWMSwgKGNsa2RpdiA+PiA4KSAmIDB4ZmYpOworCWlmICghcmV0KQorCQlyZXQg PSBpbnRlbF9zY3VfaXBjX2lvd3JpdGU4KFBXTTBDTEtESVYwLCBjbGtkaXYgJiAweGZmKTsKKwor CWlmIChyZXQpCisJCWRldl9lcnIoJmRldi0+cGRldi0+ZGV2LCAiUFdNMENMS0RJViBzZXQgZmFp bGVkXG4iKTsKKwllbHNlCisJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiUFdNMENMS0RJViBz ZXQgdG8gMHglMDR4ICglZCBIeilcbiIsCisJCQljbGtkaXYsIFBXTV9GUkVRVUVOQ1kpOworfQor CisjZGVmaW5lIFBXTTBEVVRZQ1lDTEUJCQkweDY3CisKK3ZvaWQgdGMzNTg3NnhfYnJpZ2h0bmVz c19jb250cm9sKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBsZXZlbCkKK3sKKwlpbnQgcmV0 OworCXU4IGR1dHlfdmFsOworCXU4IHBhbmVsX2R1dHlfdmFsOworCisJbGV2ZWwgPSBjbGFtcChs ZXZlbCwgMCwgTURGTERfRFNJX0JSSUdIVE5FU1NfTUFYX0xFVkVMKTsKKworCS8qIFBXTSBkdXR5 IGN5Y2xlIDB4MDAuLi4weDYzIGNvcnJlc3BvbmRzIHRvIDAuLi45OSUgKi8KKwlkdXR5X3ZhbCA9 IGxldmVsICogMHg2MyAvIE1ERkxEX0RTSV9CUklHSFRORVNTX01BWF9MRVZFTDsKKworCS8qIEkg d29uJ3QgcHJldGVuZCB0byB1bmRlcnN0YW5kIHRoaXMgZm9ybXVsYS4gVGhlIHBhbmVsIHNwZWMg aXMgcXVpdGUKKwkgKiBiYWQgZW5ncmlzaC4KKwkgKi8KKwlwYW5lbF9kdXR5X3ZhbCA9ICgyICog bGV2ZWwgLSAxMDApICogMHhBOSAvCisJCQkgTURGTERfRFNJX0JSSUdIVE5FU1NfTUFYX0xFVkVM ICsgMHg1NjsKKworCXJldCA9IGludGVsX3NjdV9pcGNfaW93cml0ZTgoUFdNMERVVFlDWUNMRSwg ZHV0eV92YWwpOworCWlmIChyZXQpCisJCWRldl9lcnIoJnRjMzU4NzZ4X2NsaWVudC0+ZGV2LCAi JXM6IGlwYyB3cml0ZSBmYWlsXG4iLAorCQkJX19mdW5jX18pOworCisJaWYgKGNtaV9sY2RfaTJj X2NsaWVudCkgeworCQlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNtaV9sY2RfaTJj X2NsaWVudCwKKwkJCQkJCVBBTkVMX1BXTV9NQVgsIHBhbmVsX2R1dHlfdmFsKTsKKwkJaWYgKHJl dCA8IDApCisJCQlkZXZfZXJyKCZjbWlfbGNkX2kyY19jbGllbnQtPmRldiwgIiVzOiBpMmMgd3Jp dGUgZmFpbGVkXG4iLAorCQkJCV9fZnVuY19fKTsKKwl9Cit9CisKK3ZvaWQgdGMzNTg3NnhfdG9z aGliYV9icmlkZ2VfcGFuZWxfb2ZmKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0 IHRjMzU4NzZ4X3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCisJaWYgKFdBUk4oIXRjMzU4NzZ4X2Ns aWVudCwgIiVzIGNhbGxlZCBiZWZvcmUgcHJvYmUiLCBfX2Z1bmNfXykpCisJCXJldHVybjsKKwor CWRldl9kYmcoJnRjMzU4NzZ4X2NsaWVudC0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKworCXBk YXRhID0gZGV2X2dldF9wbGF0ZGF0YSgmdGMzNTg3NnhfY2xpZW50LT5kZXYpOworCisJaWYgKHBk YXRhLT5ncGlvX3BhbmVsX2JsX2VuICE9IC0xKQorCQlncGlvX3NldF92YWx1ZV9jYW5zbGVlcChw ZGF0YS0+Z3Bpb19wYW5lbF9ibF9lbiwgMCk7CisKKwlpZiAocGRhdGEtPmdwaW9fcGFuZWxfdmFk ZCAhPSAtMSkKKwkJZ3Bpb19zZXRfdmFsdWVfY2Fuc2xlZXAocGRhdGEtPmdwaW9fcGFuZWxfdmFk ZCwgMCk7Cit9CisKK3ZvaWQgdGMzNTg3NnhfdG9zaGliYV9icmlkZ2VfcGFuZWxfb24oc3RydWN0 IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdGMzNTg3NnhfcGxhdGZvcm1fZGF0YSAqcGRh dGE7CisJc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRl OworCisJaWYgKFdBUk4oIXRjMzU4NzZ4X2NsaWVudCwgIiVzIGNhbGxlZCBiZWZvcmUgcHJvYmUi LCBfX2Z1bmNfXykpCisJCXJldHVybjsKKworCWRldl9kYmcoJnRjMzU4NzZ4X2NsaWVudC0+ZGV2 LCAiJXNcbiIsIF9fZnVuY19fKTsKKworCXBkYXRhID0gZGV2X2dldF9wbGF0ZGF0YSgmdGMzNTg3 NnhfY2xpZW50LT5kZXYpOworCisJaWYgKHBkYXRhLT5ncGlvX3BhbmVsX3ZhZGQgIT0gLTEpIHsK KwkJZ3Bpb19zZXRfdmFsdWVfY2Fuc2xlZXAocGRhdGEtPmdwaW9fcGFuZWxfdmFkZCwgMSk7CisJ CW1zbGVlcCgyNjApOworCX0KKworCWlmIChjbWlfbGNkX2kyY19jbGllbnQpIHsKKwkJaW50IHJl dDsKKwkJZGV2X2RiZygmY21pX2xjZF9pMmNfY2xpZW50LT5kZXYsICJzZXR0aW5nIFRDT05cbiIp OworCQkvKiBCaXQgNCBpcyBhdmVyYWdlX3NhdmluZy4gU2V0dGluZyBpdCB0byAxLCB0aGUgYnJp Z2h0bmVzcyBpcworCQkgKiByZWZlcmVuY2VkIHRvIHRoZSBhdmVyYWdlIG9mIHRoZSBmcmFtZSBj b250ZW50LiAwIG1lYW5zCisJCSAqIHJlZmVyZW5jZSB0byB0aGUgbWF4aW11bSBvZiBmcmFtZSBj b250ZW50cy4gQml0cyAzOjAgYXJlCisJCSAqIGFsbG93X2Rpc3RvcnQuIFdoZW4gc2V0IHRvIGEg bm9uemVybyB2YWx1ZSwgYWxsIGNvbG9yIHZhbHVlcworCQkgKiBiZXR3ZWVuIDI1NS1hbGxvd19k aXN0b3J0KjIgYW5kIDI1NSBhcmUgbWFwcGVkIHRvIHRoZQorCQkgKiAyNTUtYWxsb3dfZGlzdG9y dCoyIHZhbHVlLgorCQkgKi8KKwkJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbWlf bGNkX2kyY19jbGllbnQsCisJCQkJCQlQQU5FTF9BTExPV19ESVNUT1JULCAweDEwKTsKKwkJaWYg KHJldCA8IDApCisJCQlkZXZfZXJyKCZjbWlfbGNkX2kyY19jbGllbnQtPmRldiwKKwkJCQkiaTJj IHdyaXRlIGZhaWxlZCAoJWQpXG4iLCByZXQpOworCQlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0 ZV9kYXRhKGNtaV9sY2RfaTJjX2NsaWVudCwKKwkJCQkJCVBBTkVMX0JZUEFTU19QV01JLCAwKTsK KwkJaWYgKHJldCA8IDApCisJCQlkZXZfZXJyKCZjbWlfbGNkX2kyY19jbGllbnQtPmRldiwKKwkJ CQkiaTJjIHdyaXRlIGZhaWxlZCAoJWQpXG4iLCByZXQpOworCQkvKiBTZXQgbWluaW11bSBicmln aHRuZXNzIHZhbHVlIC0gdGhpcyBpcyB0dW5hYmxlICovCisJCXJldCA9IGkyY19zbWJ1c193cml0 ZV9ieXRlX2RhdGEoY21pX2xjZF9pMmNfY2xpZW50LAorCQkJCQkJUEFORUxfUFdNX01JTiwgMHgz NSk7CisJCWlmIChyZXQgPCAwKQorCQkJZGV2X2VycigmY21pX2xjZF9pMmNfY2xpZW50LT5kZXYs CisJCQkJImkyYyB3cml0ZSBmYWlsZWQgKCVkKVxuIiwgcmV0KTsKKwl9CisKKwlpZiAocGRhdGEt PmdwaW9fcGFuZWxfYmxfZW4gIT0gLTEpCisJCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKHBkYXRh LT5ncGlvX3BhbmVsX2JsX2VuLCAxKTsKKworCXRjMzU4NzZ4X2JyaWdodG5lc3NfY29udHJvbChk ZXYsIGRldl9wcml2LT5icmlnaHRuZXNzX2FkanVzdGVkKTsKK30KKworc3RhdGljIHN0cnVjdCBk cm1fZGlzcGxheV9tb2RlICp0YzM1ODc2eF9nZXRfY29uZmlnX21vZGUoc3RydWN0IGRybV9kZXZp Y2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKKworCWRldl9kYmco JmRldi0+cGRldi0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKworCW1vZGUgPSBremFsbG9jKHNp emVvZigqbW9kZSksIEdGUF9LRVJORUwpOworCWlmICghbW9kZSkKKwkJcmV0dXJuIE5VTEw7CisK KwkvKiBGSVhNRTogZG8gdGhpcyBwcm9wZXJseS4gKi8KKwltb2RlLT5oZGlzcGxheSA9IDEyODA7 CisJbW9kZS0+dmRpc3BsYXkgPSA4MDA7CisJbW9kZS0+aHN5bmNfc3RhcnQgPSAxMzYwOworCW1v ZGUtPmhzeW5jX2VuZCA9IDE0MDA7CisJbW9kZS0+aHRvdGFsID0gMTQ0MDsKKwltb2RlLT52c3lu Y19zdGFydCA9IDgxNDsKKwltb2RlLT52c3luY19lbmQgPSA4MjQ7CisJbW9kZS0+dnRvdGFsID0g ODM4OworCW1vZGUtPmNsb2NrID0gMzMzMjQgPDwgMTsKKworCWRldl9pbmZvKCZkZXYtPnBkZXYt PmRldiwgImhkaXNwbGF5KHcpID0gJWRcbiIsIG1vZGUtPmhkaXNwbGF5KTsKKwlkZXZfaW5mbygm ZGV2LT5wZGV2LT5kZXYsICJ2ZGlzcGxheShoKSA9ICVkXG4iLCBtb2RlLT52ZGlzcGxheSk7CisJ ZGV2X2luZm8oJmRldi0+cGRldi0+ZGV2LCAiSFNTID0gJWRcbiIsIG1vZGUtPmhzeW5jX3N0YXJ0 KTsKKwlkZXZfaW5mbygmZGV2LT5wZGV2LT5kZXYsICJIU0UgPSAlZFxuIiwgbW9kZS0+aHN5bmNf ZW5kKTsKKwlkZXZfaW5mbygmZGV2LT5wZGV2LT5kZXYsICJodG90YWwgPSAlZFxuIiwgbW9kZS0+ aHRvdGFsKTsKKwlkZXZfaW5mbygmZGV2LT5wZGV2LT5kZXYsICJWU1MgPSAlZFxuIiwgbW9kZS0+ dnN5bmNfc3RhcnQpOworCWRldl9pbmZvKCZkZXYtPnBkZXYtPmRldiwgIlZTRSA9ICVkXG4iLCBt b2RlLT52c3luY19lbmQpOworCWRldl9pbmZvKCZkZXYtPnBkZXYtPmRldiwgInZ0b3RhbCA9ICVk XG4iLCBtb2RlLT52dG90YWwpOworCWRldl9pbmZvKCZkZXYtPnBkZXYtPmRldiwgImNsb2NrID0g JWRcbiIsIG1vZGUtPmNsb2NrKTsKKworCWRybV9tb2RlX3NldF9uYW1lKG1vZGUpOworCWRybV9t b2RlX3NldF9jcnRjaW5mbyhtb2RlLCAwKTsKKworCW1vZGUtPnR5cGUgfD0gRFJNX01PREVfVFlQ RV9QUkVGRVJSRUQ7CisKKwlyZXR1cm4gbW9kZTsKK30KKworLyogRFYxIEFjdGl2ZSBhcmVhIDIx Ni45NiB4IDEzNS42IG1tICovCisjZGVmaW5lIERWMV9QQU5FTF9XSURUSCAyMTcKKyNkZWZpbmUg RFYxX1BBTkVMX0hFSUdIVCAxMzYKKworc3RhdGljIGludCB0YzM1ODc2eF9nZXRfcGFuZWxfaW5m byhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgcGlwZSwKKwkJCQlzdHJ1Y3QgcGFuZWxfaW5m byAqcGkpCit7CisJaWYgKCFkZXYgfHwgIXBpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBpLT53 aWR0aF9tbSA9IERWMV9QQU5FTF9XSURUSDsKKwlwaS0+aGVpZ2h0X21tID0gRFYxX1BBTkVMX0hF SUdIVDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRjMzU4NzZ4X2JyaWRnZV9wcm9i ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNl X2lkICppZCkKK3sKKwlzdHJ1Y3QgdGMzNTg3NnhfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisKKwlk ZXZfaW5mbygmY2xpZW50LT5kZXYsICIlc1xuIiwgX19mdW5jX18pOworCisJaWYgKCFpMmNfY2hl Y2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX0kyQykpIHsKKwkJZGV2 X2VycigmY2xpZW50LT5kZXYsICIlczogaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoKSBmYWlsZWRc biIsCisJCQlfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXBkYXRhID0gZGV2 X2dldF9wbGF0ZGF0YSgmY2xpZW50LT5kZXYpOworCWlmICghcGRhdGEpIHsKKwkJZGV2X2Vycigm Y2xpZW50LT5kZXYsICIlczogbm8gcGxhdGZvcm0gZGF0YVxuIiwgX19mdW5jX18pOworCQlyZXR1 cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAocGRhdGEtPmdwaW9fYnJpZGdlX3Jlc2V0ICE9IC0xKSB7 CisJCWdwaW9fcmVxdWVzdChwZGF0YS0+Z3Bpb19icmlkZ2VfcmVzZXQsICJ0YzM1ODc2eCBicmlk Z2UgcmVzZXQiKTsKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHBkYXRhLT5ncGlvX2JyaWRnZV9y ZXNldCwgMCk7CisJfQorCisJaWYgKHBkYXRhLT5ncGlvX3BhbmVsX2JsX2VuICE9IC0xKSB7CisJ CWdwaW9fcmVxdWVzdChwZGF0YS0+Z3Bpb19wYW5lbF9ibF9lbiwgInRjMzU4NzZ4IHBhbmVsIGJs IGVuIik7CisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChwZGF0YS0+Z3Bpb19wYW5lbF9ibF9lbiwg MCk7CisJfQorCisJaWYgKHBkYXRhLT5ncGlvX3BhbmVsX3ZhZGQgIT0gLTEpIHsKKwkJZ3Bpb19y ZXF1ZXN0KHBkYXRhLT5ncGlvX3BhbmVsX3ZhZGQsICJ0YzM1ODc2eCBwYW5lbCB2YWRkIik7CisJ CWdwaW9fZGlyZWN0aW9uX291dHB1dChwZGF0YS0+Z3Bpb19wYW5lbF92YWRkLCAwKTsKKwl9CisK Kwl0YzM1ODc2eF9jbGllbnQgPSBjbGllbnQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu dCB0YzM1ODc2eF9icmlkZ2VfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJ c3RydWN0IHRjMzU4NzZ4X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2X2dldF9wbGF0ZGF0YSgm Y2xpZW50LT5kZXYpOworCisJZGV2X2RiZygmY2xpZW50LT5kZXYsICIlc1xuIiwgX19mdW5jX18p OworCisJaWYgKHBkYXRhLT5ncGlvX2JyaWRnZV9yZXNldCAhPSAtMSkKKwkJZ3Bpb19mcmVlKHBk YXRhLT5ncGlvX2JyaWRnZV9yZXNldCk7CisKKwlpZiAocGRhdGEtPmdwaW9fcGFuZWxfYmxfZW4g IT0gLTEpCisJCWdwaW9fZnJlZShwZGF0YS0+Z3Bpb19wYW5lbF9ibF9lbik7CisKKwlpZiAocGRh dGEtPmdwaW9fcGFuZWxfdmFkZCAhPSAtMSkKKwkJZ3Bpb19mcmVlKHBkYXRhLT5ncGlvX3BhbmVs X3ZhZGQpOworCisJdGMzNTg3NnhfY2xpZW50ID0gTlVMTDsKKworCXJldHVybiAwOworfQorCitz dGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgdGMzNTg3NnhfYnJpZGdlX2lkW10gPSB7 CisJeyAiaTJjX2Rpc3BfYnJpZyIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxF KGkyYywgdGMzNTg3NnhfYnJpZGdlX2lkKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHRj MzU4NzZ4X2JyaWRnZV9pMmNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImky Y19kaXNwX2JyaWciLAorCX0sCisJLmlkX3RhYmxlID0gdGMzNTg3NnhfYnJpZGdlX2lkLAorCS5w cm9iZSA9IHRjMzU4NzZ4X2JyaWRnZV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AodGMz NTg3NnhfYnJpZGdlX3JlbW92ZSksCit9OworCisvKiBMQ0QgcGFuZWwgSTJDICovCitzdGF0aWMg aW50IGNtaV9sY2RfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkgICAg IGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlkZXZfaW5mbygmY2xpZW50LT5k ZXYsICIlc1xuIiwgX19mdW5jX18pOworCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShj bGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX0kyQykpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYs ICIlczogaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoKSBmYWlsZWRcbiIsCisJCQlfX2Z1bmNfXyk7 CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWNtaV9sY2RfaTJjX2NsaWVudCA9IGNsaWVudDsK KworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNtaV9sY2RfaTJjX3JlbW92ZShzdHJ1Y3Qg aTJjX2NsaWVudCAqY2xpZW50KQoreworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiJXNcbiIsIF9f ZnVuY19fKTsKKworCWNtaV9sY2RfaTJjX2NsaWVudCA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGNtaV9sY2RfaTJjX2lkW10gPSB7 CisJeyAiY21pLWxjZCIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywg Y21pX2xjZF9pMmNfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgY21pX2xjZF9pMmNf ZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImNtaS1sY2QiLAorCX0sCisJLmlk X3RhYmxlID0gY21pX2xjZF9pMmNfaWQsCisJLnByb2JlID0gY21pX2xjZF9pMmNfcHJvYmUsCisJ LnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGNtaV9sY2RfaTJjX3JlbW92ZSksCit9OworCisvKiBIQUNL IHRvIGNyZWF0ZSBJMkMgZGV2aWNlIHdoaWxlIGl0J3Mgbm90IGNyZWF0ZWQgYnkgcGxhdGZvcm0g Y29kZSAqLworI2RlZmluZSBDTUlfTENEX0kyQ19BREFQVEVSCTIKKyNkZWZpbmUgQ01JX0xDRF9J MkNfQUREUgkweDYwCisKK3N0YXRpYyBpbnQgY21pX2xjZF9oYWNrX2NyZWF0ZV9kZXZpY2Uodm9p ZCkKK3sKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXI7CisJc3RydWN0IGkyY19jbGllbnQg KmNsaWVudDsKKwlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaW5mbyA9IHsKKwkJLnR5cGUgPSAiY21p LWxjZCIsCisJCS5hZGRyID0gQ01JX0xDRF9JMkNfQUREUiwKKwl9OworCisJcHJfZGVidWcoIiVz XG4iLCBfX2Z1bmNfXyk7CisKKwlhZGFwdGVyID0gaTJjX2dldF9hZGFwdGVyKENNSV9MQ0RfSTJD X0FEQVBURVIpOworCWlmICghYWRhcHRlcikgeworCQlwcl9lcnIoIiVzOiBpMmNfZ2V0X2FkYXB0 ZXIoJWQpIGZhaWxlZFxuIiwgX19mdW5jX18sCisJCQlDTUlfTENEX0kyQ19BREFQVEVSKTsKKwkJ cmV0dXJuIC1FSU5WQUw7CisJfQorCisJY2xpZW50ID0gaTJjX25ld19kZXZpY2UoYWRhcHRlciwg JmluZm8pOworCWlmICghY2xpZW50KSB7CisJCXByX2VycigiJXM6IGkyY19uZXdfZGV2aWNlKCkg ZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCWkyY19wdXRfYWRhcHRlcihhZGFwdGVyKTsKKwkJcmV0 dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg ZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzIHRjMzU4NzZ4X2VuY29kZXJfaGVscGVyX2Z1bmNzID0g eworCS5kcG1zID0gbWRmbGRfZHNpX2RwaV9kcG1zLAorCS5tb2RlX2ZpeHVwID0gbWRmbGRfZHNp X2RwaV9tb2RlX2ZpeHVwLAorCS5wcmVwYXJlID0gbWRmbGRfZHNpX2RwaV9wcmVwYXJlLAorCS5t b2RlX3NldCA9IG1kZmxkX2RzaV9kcGlfbW9kZV9zZXQsCisJLmNvbW1pdCA9IG1kZmxkX2RzaV9k cGlfY29tbWl0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyB0 YzM1ODc2eF9lbmNvZGVyX2Z1bmNzID0geworCS5kZXN0cm95ID0gZHJtX2VuY29kZXJfY2xlYW51 cCwKK307CisKK2NvbnN0IHN0cnVjdCBwYW5lbF9mdW5jcyBtZGZsZF90YzM1ODc2eF9mdW5jcyA9 IHsKKwkuZW5jb2Rlcl9mdW5jcyA9ICZ0YzM1ODc2eF9lbmNvZGVyX2Z1bmNzLAorCS5lbmNvZGVy X2hlbHBlcl9mdW5jcyA9ICZ0YzM1ODc2eF9lbmNvZGVyX2hlbHBlcl9mdW5jcywKKwkuZ2V0X2Nv bmZpZ19tb2RlID0gdGMzNTg3NnhfZ2V0X2NvbmZpZ19tb2RlLAorCS5nZXRfcGFuZWxfaW5mbyA9 IHRjMzU4NzZ4X2dldF9wYW5lbF9pbmZvLAorfTsKKwordm9pZCB0YzM1ODc2eF9pbml0KHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpCit7CisJaW50IHI7CisKKwlkZXZfZGJnKCZkZXYtPnBkZXYtPmRl diwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwljbWlfbGNkX2hhY2tfY3JlYXRlX2RldmljZSgpOwor CisJciA9IGkyY19hZGRfZHJpdmVyKCZjbWlfbGNkX2kyY19kcml2ZXIpOworCWlmIChyIDwgMCkK KwkJZGV2X2VycigmZGV2LT5wZGV2LT5kZXYsCisJCQkiJXM6IGkyY19hZGRfZHJpdmVyKCkgZm9y ICVzIGZhaWxlZCAoJWQpXG4iLAorCQkJX19mdW5jX18sIGNtaV9sY2RfaTJjX2RyaXZlci5kcml2 ZXIubmFtZSwgcik7CisKKwlyID0gaTJjX2FkZF9kcml2ZXIoJnRjMzU4NzZ4X2JyaWRnZV9pMmNf ZHJpdmVyKTsKKwlpZiAociA8IDApCisJCWRldl9lcnIoJmRldi0+cGRldi0+ZGV2LAorCQkJIiVz OiBpMmNfYWRkX2RyaXZlcigpIGZvciAlcyBmYWlsZWQgKCVkKVxuIiwKKwkJCV9fZnVuY19fLCB0 YzM1ODc2eF9icmlkZ2VfaTJjX2RyaXZlci5kcml2ZXIubmFtZSwgcik7CisKKwl0YzM1ODc2eF9i cmlnaHRuZXNzX2luaXQoZGV2KTsKK30KKwordm9pZCB0YzM1ODc2eF9leGl0KHZvaWQpCit7CisJ cHJfZGVidWcoIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlpMmNfZGVsX2RyaXZlcigmdGMzNTg3Nnhf YnJpZGdlX2kyY19kcml2ZXIpOworCisJaWYgKGNtaV9sY2RfaTJjX2NsaWVudCkKKwkJaTJjX2Rl bF9kcml2ZXIoJmNtaV9sY2RfaTJjX2RyaXZlcik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vZ21hNTAwL3RjMzU4NzZ4LWRzaS1sdmRzLmggYi9kcml2ZXJzL2dwdS9kcm0vZ21hNTAw L3RjMzU4NzZ4LWRzaS1sdmRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u YjE0YjdmOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvdGMzNTg3 NngtZHNpLWx2ZHMuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTEg SW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBm cmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlz IHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdh cmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGlu Y2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBt b2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29y IHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdo b20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhl IGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFn cmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0 aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURF RCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJ TVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBO T05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09Q WVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIK KyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Ig T1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRI IFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBUSEUgU09G VFdBUkUuCisgKgorICovCisKKyNpZm5kZWYgX19NREZMRF9EU0lfTFZEU19CUklER0VfSF9fCisj ZGVmaW5lIF9fTURGTERfRFNJX0xWRFNfQlJJREdFX0hfXworCit2b2lkIHRjMzU4NzZ4X3NldF9i cmlkZ2VfcmVzZXRfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHN0YXRlKTsKK3Zv aWQgdGMzNTg3NnhfY29uZmlndXJlX2x2ZHNfYnJpZGdlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYp Owordm9pZCB0YzM1ODc2eF9icmlnaHRuZXNzX2NvbnRyb2woc3RydWN0IGRybV9kZXZpY2UgKmRl diwgaW50IGxldmVsKTsKK3ZvaWQgdGMzNTg3NnhfdG9zaGliYV9icmlkZ2VfcGFuZWxfb2ZmKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYpOwordm9pZCB0YzM1ODc2eF90b3NoaWJhX2JyaWRnZV9wYW5l bF9vbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK3ZvaWQgdGMzNTg3NnhfaW5pdChzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2KTsKK3ZvaWQgdGMzNTg3NnhfZXhpdCh2b2lkKTsKKworZXh0ZXJuIGNv bnN0IHN0cnVjdCBwYW5lbF9mdW5jcyBtZGZsZF90YzM1ODc2eF9mdW5jczsKKworI2VuZGlmIC8q X19NREZMRF9EU0lfTFZEU19CUklER0VfSF9fKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgv aTJjL3RjMzU4NzZ4LmggYi9pbmNsdWRlL2xpbnV4L2kyYy90YzM1ODc2eC5oCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNmE1MWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNs dWRlL2xpbnV4L2kyYy90YzM1ODc2eC5oCkBAIC0wLDAgKzEsMTEgQEAKKworI2lmbmRlZiBfVEMz NTg3NlhfSAorI2RlZmluZSBfVEMzNTg3NlhfSAorCitzdHJ1Y3QgdGMzNTg3NnhfcGxhdGZvcm1f ZGF0YSB7CisJaW50IGdwaW9fYnJpZGdlX3Jlc2V0OworCWludCBncGlvX3BhbmVsX2JsX2VuOwor CWludCBncGlvX3BhbmVsX3ZhZGQ7Cit9OworCisjZW5kaWYgLyogX1RDMzU4NzZYX0ggKi8KCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBt YWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==