From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chandan Uddaraju Subject: [DPU PATCH 2/3] drm/msm/dp: add displayPort driver support Date: Wed, 10 Oct 2018 10:15:58 -0700 Message-ID: <1539191759-14836-3-git-send-email-chandanu@codeaurora.org> References: <1539191759-14836-1-git-send-email-chandanu@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1539191759-14836-1-git-send-email-chandanu-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org Cc: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, nganji-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, hoegsberg-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org, abhinavk-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, jsanka-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, Chandan Uddaraju List-Id: linux-arm-msm@vger.kernel.org QWRkIHRoZSBuZWVkZWQgZGlzcGxheVBvcnQgZmlsZXMgdG8gZW5hYmxlIERQIGRyaXZlcgpvbiBt c20gdGFyZ2V0LgoKImRwX2Rpc3BsYXkiIG1vZHVsZSBpcyB0aGUgbWFpbiBtb2R1bGUgdGhhdCBj YWxscyBpbnRvCm90aGVyIHN1Yi1tb2R1bGVzLiAiZHBfZHJtIiBmaWxlIHJlcHJlc2VudHMgdGhl IGludGVyZmFjZQpiZXR3ZWVuIERSTSBmcmFtZXdvcmsgYW5kIERQIGRyaXZlci4KClNpZ25lZC1v ZmYtYnk6IENoYW5kYW4gVWRkYXJhanUgPGNoYW5kYW51QGNvZGVhdXJvcmEub3JnPgotLS0KIGRy aXZlcnMvZ3B1L2RybS9tc20vS2NvbmZpZyAgICAgICAgICAgICAgICAgfCAgICA5ICsKIGRyaXZl cnMvZ3B1L2RybS9tc20vTWFrZWZpbGUgICAgICAgICAgICAgICAgfCAgIDE1ICstCiBkcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaW9fdXRpbC5jIHwgIDIwNiArKysrCiBkcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaW9fdXRpbC5oIHwgICA0NCArCiBkcml2ZXJzL2dw dS9kcm0vbXNtL2RwL2RwX2F1eC5jICAgICAgICAgICAgIHwgIDU3MCArKysrKysrKysrCiBkcml2 ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2F1eC5oICAgICAgICAgICAgIHwgICA0NCArCiBkcml2ZXJz L2dwdS9kcm0vbXNtL2RwL2RwX2NhdGFsb2cuYyAgICAgICAgIHwgMTE4OCArKysrKysrKysrKysr KysrKysrKwogZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9jYXRhbG9nLmggICAgICAgICB8ICAx NDQgKysrCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2N0cmwuYyAgICAgICAgICAgIHwgMTQ3 NSArKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2N0 cmwuaCAgICAgICAgICAgIHwgICA1MCArCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2RlYnVn LmMgICAgICAgICAgIHwgIDUwNyArKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBf ZGVidWcuaCAgICAgICAgICAgfCAgIDgxICsrCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2Rp c3BsYXkuYyAgICAgICAgIHwgIDk3NyArKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJt L21zbS9kcC9kcF9kaXNwbGF5LmggICAgICAgICB8ICAgNTUgKwogZHJpdmVycy9ncHUvZHJtL21z bS9kcC9kcF9kcm0uYyAgICAgICAgICAgICB8ICA1NDIgKysrKysrKysrKwogZHJpdmVycy9ncHUv ZHJtL21zbS9kcC9kcF9kcm0uaCAgICAgICAgICAgICB8ICAgNTIgKwogZHJpdmVycy9ncHUvZHJt L21zbS9kcC9kcF9leHRjb24uYyAgICAgICAgICB8ICA0MDAgKysrKysrKwogZHJpdmVycy9ncHUv ZHJtL21zbS9kcC9kcF9leHRjb24uaCAgICAgICAgICB8ICAxMTEgKysKIGRyaXZlcnMvZ3B1L2Ry bS9tc20vZHAvZHBfbGluay5jICAgICAgICAgICAgfCAxNTQ5ICsrKysrKysrKysrKysrKysrKysr KysrKysrKwogZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9saW5rLmggICAgICAgICAgICB8ICAx ODQgKysrKwogZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wYW5lbC5jICAgICAgICAgICB8ICA2 MjQgKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcGFuZWwuaCAgICAgICAg ICAgfCAgMTIxICsrKwogZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wYXJzZXIuYyAgICAgICAg ICB8ICA2NzkgKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3BhcnNlci5o ICAgICAgICAgIHwgIDIwNSArKysrCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3Bvd2VyLmMg ICAgICAgICAgIHwgIDU5OSArKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9w b3dlci5oICAgICAgICAgICB8ICAgNTcgKwogZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9yZWcu aCAgICAgICAgICAgICB8ICAzNTcgKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYu YyAgICAgICAgICAgICAgIHwgICAgMiArCiBkcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuaCAg ICAgICAgICAgICAgIHwgICAyMiArCiBpbmNsdWRlL2RybS9kcm1fZHBfaGVscGVyLmggICAgICAg ICAgICAgICAgIHwgICAxOSArCiAzMCBmaWxlcyBjaGFuZ2VkLCAxMDg4NyBpbnNlcnRpb25zKCsp LCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9k cC9kcF9hdXguYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBf YXV4LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2NhdGFs b2cuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY2F0YWxv Zy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9jdHJsLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2N0cmwuaAogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGVidWcuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGVidWcuaAogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGlzcGxheS5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kaXNwbGF5LmgKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2RybS5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kcm0uaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZXh0Y29uLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2V4dGNvbi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL21zbS9kcC9kcF9saW5rLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vbXNtL2RwL2RwX2xpbmsuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9tc20vZHAvZHBfcGFuZWwuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9t c20vZHAvZHBfcGFuZWwuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20v ZHAvZHBfcGFyc2VyLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rw L2RwX3BhcnNlci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9k cF9wb3dlci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9w b3dlci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9yZWcu aAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1 L2RybS9tc20vS2NvbmZpZwppbmRleCA4NDNhOWQ0Li5jMzYzZjI0IDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9LY29uZmln CkBAIC00OSw2ICs0OSwxNSBAQCBjb25maWcgRFJNX01TTV9IRE1JX0hEQ1AKIAloZWxwCiAJICBD aG9vc2UgdGhpcyBvcHRpb24gdG8gZW5hYmxlIEhEQ1Agc3RhdGUgbWFjaGluZQogCitjb25maWcg RFJNX01TTV9EUAorCWJvb2wgIkVuYWJsZSBEUCBzdXBwb3J0IGluIE1TTSBEUk0gZHJpdmVyIgor CWRlcGVuZHMgb24gRFJNX01TTQorCWRlZmF1bHQgbgorCWhlbHAKKwkgIENvbXBpbGUgaW4gc3Vw cG9ydCBmb3IgRFAgZHJpdmVyIGluIG1zbSBkcm0KKwkgIGRyaXZlci4gRFAgZXh0ZXJuYWwgZGlz cGxheSBzdXBwb3J0IGlzIGVuYWJsZWQKKwkgIHRocm91Z2ggdGhpcyBjb25maWcgb3B0aW9uLiBJ dCBjYW4gYmUgcHJpbWFyeSBvcgorCSAgc2Vjb25kYXJ5IGRpc3BsYXkgb24gZGV2aWNlLgogY29u ZmlnIERSTV9NU01fRFNJCiAJYm9vbCAiRW5hYmxlIERTSSBzdXBwb3J0IGluIE1TTSBEUk0gZHJp dmVyIgogCWRlcGVuZHMgb24gRFJNX01TTQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21z bS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUKaW5kZXggMTlhYjUyMS4u NzY1YThkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZQorKysgYi9k cml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlCkBAIC0yLDYgKzIsNyBAQAogY2NmbGFncy15IDo9 IC1JZHJpdmVycy9ncHUvZHJtL21zbQogY2NmbGFncy15ICs9IC1JZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEKIGNjZmxhZ3MtJChDT05GSUdfRFJNX01TTV9EU0kpICs9IC1JZHJpdmVycy9n cHUvZHJtL21zbS9kc2kKK2NjZmxhZ3MtJChDT05GSUdfRFJNX01TTV9EUCkgKz0gLUlkcml2ZXJz L2dwdS9kcm0vbXNtL2RwCiAKIG1zbS15IDo9IFwKIAlhZHJlbm8vYWRyZW5vX2RldmljZS5vIFwK QEAgLTkzLDcgKzk0LDE5IEBAIG1zbS15IDo9IFwKIAltc21fc3VibWl0cXVldWUubwogCiBtc20t JChDT05GSUdfREVCVUdfRlMpICs9IGFkcmVuby9hNXh4X2RlYnVnZnMubyBcCi0JCQkgIGRpc3Av ZHB1MS9kcHVfZGJnLm8KKwkJCSAgZGlzcC9kcHUxL2RwdV9kYmcubyBcCisJCQkgIGRwL2RwX2Rl YnVnLm8KKworbXNtLSQoQ09ORklHX0RSTV9NU01fRFApKz0gZHAvZHBfZXh0Y29uLm8gXAorCWRw L2RwX3BhcnNlci5vIFwKKwlkcC9kcF9wb3dlci5vIFwKKwlkcC9kcF9jYXRhbG9nLm8gXAorCWRw L2RwX2F1eC5vIFwKKwlkcC9kcF9wYW5lbC5vIFwKKwlkcC9kcF9saW5rLm8gXAorCWRwL2RwX2N0 cmwubyBcCisJZHAvZHBfZGlzcGxheS5vIFwKKwlkcC9kcF9kcm0ubwogCiBtc20tJChDT05GSUdf RFJNX0ZCREVWX0VNVUxBVElPTikgKz0gbXNtX2ZiZGV2Lm8KIG1zbS0kKENPTkZJR19DT01NT05f Q0xLKSArPSBkaXNwL21kcDQvbWRwNF9sdmRzX3BsbC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaW9fdXRpbC5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2lvX3V0aWwuYwppbmRleCA3OTBkMzlmLi4wZjUzYTE1IDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaW9fdXRpbC5jCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9pb191dGlsLmMKQEAgLTE0LDEwICsxNCwyMTYg QEAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsvY2xrLWNvbmYu aD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1 ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+ CiAKICNpbmNsdWRlICJkcHVfaW9fdXRpbC5oIgogCitzdGF0aWMgc3RydWN0IHJlc291cmNlICpt c21fZHNzX2dldF9yZXNfYnluYW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQkJ CSAgICAgICB1bnNpZ25lZCBpbnQgdHlwZSwKKwkJCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUp Cit7CisJc3RydWN0IHJlc291cmNlICpyZXMgPSBOVUxMOworCisJcmVzID0gcGxhdGZvcm1fZ2V0 X3Jlc291cmNlX2J5bmFtZShwZGV2LCB0eXBlLCBuYW1lKTsKKwlpZiAoIXJlcykKKwkJREVWX0VS UigiJXM6ICclcycgcmVzb3VyY2Ugbm90IGZvdW5kXG4iLCBfX2Z1bmNfXywgbmFtZSk7CisKKwly ZXR1cm4gcmVzOworfSAvKiBtc21fZHNzX2dldF9yZXNfYnluYW1lICovCisKK2ludCBtc21fZHNz X2lvcmVtYXBfYnluYW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQkgICBzdHJ1 Y3QgZHNzX2lvX2RhdGEgKmlvX2RhdGEsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IHJl c291cmNlICpyZXMgPSBOVUxMOworCisJaWYgKCFwZGV2IHx8ICFpb19kYXRhKSB7CisJCURFVl9F UlIoIiVwUy0+JXM6IGludmFsaWQgaW5wdXRcbiIsCisJCQlfX2J1aWx0aW5fcmV0dXJuX2FkZHJl c3MoMCksIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmVzID0gbXNtX2Rz c19nZXRfcmVzX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgbmFtZSk7CisJaWYgKCFyZXMp IHsKKwkJREVWX0VSUigiJXBTLT4lczogJyVzJyBtc21fZHNzX2dldF9yZXNfYnluYW1lIGZhaWxl ZFxuIiwKKwkJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSwgX19mdW5jX18sIG5hbWUpOwor CQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpb19kYXRhLT5sZW4gPSAodTMyKXJlc291cmNlX3Np emUocmVzKTsKKwlpb19kYXRhLT5iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCBpb19kYXRhLT5s ZW4pOworCWlmICghaW9fZGF0YS0+YmFzZSkgeworCQlERVZfRVJSKCIlcFMtPiVzOiAnJXMnIGlv cmVtYXAgZmFpbGVkXG4iLAorCQkJX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApLCBfX2Z1bmNf XywgbmFtZSk7CisJCXJldHVybiAtRUlPOworCX0KKworCXJldHVybiAwOworfSAvKiBtc21fZHNz X2lvcmVtYXBfYnluYW1lICovCisKK3ZvaWQgbXNtX2Rzc19pb3VubWFwKHN0cnVjdCBkc3NfaW9f ZGF0YSAqaW9fZGF0YSkKK3sKKwlpZiAoIWlvX2RhdGEpIHsKKwkJREVWX0VSUigiJXBTLT4lczog aW52YWxpZCBpbnB1dFxuIiwKKwkJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSwgX19mdW5j X18pOworCQlyZXR1cm47CisJfQorCisJaWYgKGlvX2RhdGEtPmJhc2UpIHsKKwkJaW91bm1hcChp b19kYXRhLT5iYXNlKTsKKwkJaW9fZGF0YS0+YmFzZSA9IE5VTEw7CisJfQorCWlvX2RhdGEtPmxl biA9IDA7Cit9IC8qIG1zbV9kc3NfaW91bm1hcCAqLworCitpbnQgbXNtX2Rzc19jb25maWdfdnJl ZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkc3NfdnJlZyAqaW5fdnJlZywKKwkJCWludCBu dW1fdnJlZywgaW50IGNvbmZpZykKK3sKKwlpbnQgaSA9IDAsIHJjID0gMDsKKwlzdHJ1Y3QgZHNz X3ZyZWcgKmN1cnJfdnJlZyA9IE5VTEw7CisJZW51bSBkc3NfdnJlZ190eXBlIHR5cGU7CisKKwlp ZiAoIWluX3ZyZWcgfHwgIW51bV92cmVnKQorCQlyZXR1cm4gcmM7CisKKwlpZiAoY29uZmlnKSB7 CisJCWZvciAoaSA9IDA7IGkgPCBudW1fdnJlZzsgaSsrKSB7CisJCQljdXJyX3ZyZWcgPSAmaW5f dnJlZ1tpXTsKKwkJCWN1cnJfdnJlZy0+dnJlZyA9IHJlZ3VsYXRvcl9nZXQoZGV2LAorCQkJCWN1 cnJfdnJlZy0+dnJlZ19uYW1lKTsKKwkJCXJjID0gUFRSX1JFVChjdXJyX3ZyZWctPnZyZWcpOwor CQkJaWYgKHJjKSB7CisJCQkJREVWX0VSUigiJXBTLT4lczogJXMgZ2V0IGZhaWxlZC4gcmM9JWRc biIsCisJCQkJCSBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCksIF9fZnVuY19fLAorCQkJCQkg Y3Vycl92cmVnLT52cmVnX25hbWUsIHJjKTsKKwkJCQljdXJyX3ZyZWctPnZyZWcgPSBOVUxMOwor CQkJCWdvdG8gdnJlZ19nZXRfZmFpbDsKKwkJCX0KKwkJCXR5cGUgPSAocmVndWxhdG9yX2NvdW50 X3ZvbHRhZ2VzKGN1cnJfdnJlZy0+dnJlZykgPiAwKQorCQkJCQk/IERTU19SRUdfTERPIDogRFNT X1JFR19WUzsKKwkJCWlmICh0eXBlID09IERTU19SRUdfTERPKSB7CisJCQkJcmMgPSByZWd1bGF0 b3Jfc2V0X3ZvbHRhZ2UoCisJCQkJCWN1cnJfdnJlZy0+dnJlZywKKwkJCQkJY3Vycl92cmVnLT5t aW5fdm9sdGFnZSwKKwkJCQkJY3Vycl92cmVnLT5tYXhfdm9sdGFnZSk7CisJCQkJaWYgKHJjIDwg MCkgeworCQkJCQlERVZfRVJSKCIlcFMtPiVzOiAlcyBzZXQgdmx0ZyBmYWlsXG4iLAorCQkJCQkJ X19idWlsdGluX3JldHVybl9hZGRyZXNzKDApLAorCQkJCQkJX19mdW5jX18sCisJCQkJCQljdXJy X3ZyZWctPnZyZWdfbmFtZSk7CisJCQkJCWdvdG8gdnJlZ19zZXRfdm9sdGFnZV9mYWlsOworCQkJ CX0KKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCWZvciAoaSA9IG51bV92cmVnLTE7IGkgPj0gMDsg aS0tKSB7CisJCQljdXJyX3ZyZWcgPSAmaW5fdnJlZ1tpXTsKKwkJCWlmIChjdXJyX3ZyZWctPnZy ZWcpIHsKKwkJCQl0eXBlID0gKHJlZ3VsYXRvcl9jb3VudF92b2x0YWdlcygKKwkJCQkJY3Vycl92 cmVnLT52cmVnKSA+IDApCisJCQkJCT8gRFNTX1JFR19MRE8gOiBEU1NfUkVHX1ZTOworCQkJCWlm ICh0eXBlID09IERTU19SRUdfTERPKSB7CisJCQkJCXJlZ3VsYXRvcl9zZXRfdm9sdGFnZShjdXJy X3ZyZWctPnZyZWcsCisJCQkJCQkwLCBjdXJyX3ZyZWctPm1heF92b2x0YWdlKTsKKwkJCQl9CisJ CQkJcmVndWxhdG9yX3B1dChjdXJyX3ZyZWctPnZyZWcpOworCQkJCWN1cnJfdnJlZy0+dnJlZyA9 IE5VTEw7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIDA7CisKK3ZyZWdfdW5jb25maWc6CitpZiAo dHlwZSA9PSBEU1NfUkVHX0xETykKKwlyZWd1bGF0b3Jfc2V0X2xvYWQoY3Vycl92cmVnLT52cmVn LCAwKTsKKwordnJlZ19zZXRfdm9sdGFnZV9mYWlsOgorCXJlZ3VsYXRvcl9wdXQoY3Vycl92cmVn LT52cmVnKTsKKwljdXJyX3ZyZWctPnZyZWcgPSBOVUxMOworCit2cmVnX2dldF9mYWlsOgorCWZv ciAoaS0tOyBpID49IDA7IGktLSkgeworCQljdXJyX3ZyZWcgPSAmaW5fdnJlZ1tpXTsKKwkJdHlw ZSA9IChyZWd1bGF0b3JfY291bnRfdm9sdGFnZXMoY3Vycl92cmVnLT52cmVnKSA+IDApCisJCQk/ IERTU19SRUdfTERPIDogRFNTX1JFR19WUzsKKwkJZ290byB2cmVnX3VuY29uZmlnOworCX0KKwly ZXR1cm4gcmM7Cit9IC8qIG1zbV9kc3NfY29uZmlnX3ZyZWcgKi8KKworaW50IG1zbV9kc3NfZW5h YmxlX3ZyZWcoc3RydWN0IGRzc192cmVnICppbl92cmVnLCBpbnQgbnVtX3ZyZWcsIGludCBlbmFi bGUpCit7CisJaW50IGkgPSAwLCByYyA9IDA7CisJYm9vbCBuZWVkX3NsZWVwOworCisJaWYgKGVu YWJsZSkgeworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3ZyZWc7IGkrKykgeworCQkJcmMgPSBQVFJf UkVUKGluX3ZyZWdbaV0udnJlZyk7CisJCQlpZiAocmMpIHsKKwkJCQlERVZfRVJSKCIlcFMtPiVz OiAlcyByZWd1bGF0b3IgZXJyb3IuIHJjPSVkXG4iLAorCQkJCQlfX2J1aWx0aW5fcmV0dXJuX2Fk ZHJlc3MoMCksIF9fZnVuY19fLAorCQkJCQlpbl92cmVnW2ldLnZyZWdfbmFtZSwgcmMpOworCQkJ CWdvdG8gdnJlZ19zZXRfb3B0X21vZGVfZmFpbDsKKwkJCX0KKwkJCW5lZWRfc2xlZXAgPSAhcmVn dWxhdG9yX2lzX2VuYWJsZWQoaW5fdnJlZ1tpXS52cmVnKTsKKwkJCWlmIChpbl92cmVnW2ldLnBy ZV9vbl9zbGVlcCAmJiBuZWVkX3NsZWVwKQorCQkJCXVzbGVlcF9yYW5nZShpbl92cmVnW2ldLnBy ZV9vbl9zbGVlcCAqIDEwMDAsCisJCQkJCWluX3ZyZWdbaV0ucHJlX29uX3NsZWVwICogMTAwMCk7 CisJCQlyYyA9IHJlZ3VsYXRvcl9zZXRfbG9hZChpbl92cmVnW2ldLnZyZWcsCisJCQkJaW5fdnJl Z1tpXS5lbmFibGVfbG9hZCk7CisJCQlpZiAocmMgPCAwKSB7CisJCQkJREVWX0VSUigiJXBTLT4l czogJXMgc2V0IG9wdCBtIGZhaWxcbiIsCisJCQkJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygw KSwgX19mdW5jX18sCisJCQkJCWluX3ZyZWdbaV0udnJlZ19uYW1lKTsKKwkJCQlnb3RvIHZyZWdf c2V0X29wdF9tb2RlX2ZhaWw7CisJCQl9CisJCQlyYyA9IHJlZ3VsYXRvcl9lbmFibGUoaW5fdnJl Z1tpXS52cmVnKTsKKwkJCWlmIChpbl92cmVnW2ldLnBvc3Rfb25fc2xlZXAgJiYgbmVlZF9zbGVl cCkKKwkJCQl1c2xlZXBfcmFuZ2UoaW5fdnJlZ1tpXS5wb3N0X29uX3NsZWVwICogMTAwMCwKKwkJ CQkJaW5fdnJlZ1tpXS5wb3N0X29uX3NsZWVwICogMTAwMCk7CisJCQlpZiAocmMgPCAwKSB7CisJ CQkJREVWX0VSUigiJXBTLT4lczogJXMgZW5hYmxlIGZhaWxlZFxuIiwKKwkJCQkJX19idWlsdGlu X3JldHVybl9hZGRyZXNzKDApLCBfX2Z1bmNfXywKKwkJCQkJaW5fdnJlZ1tpXS52cmVnX25hbWUp OworCQkJCWdvdG8gZGlzYWJsZV92cmVnOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJZm9yIChp ID0gbnVtX3ZyZWctMTsgaSA+PSAwOyBpLS0pIHsKKwkJCWlmIChpbl92cmVnW2ldLnByZV9vZmZf c2xlZXApCisJCQkJdXNsZWVwX3JhbmdlKGluX3ZyZWdbaV0ucHJlX29mZl9zbGVlcCAqIDEwMDAs CisJCQkJCWluX3ZyZWdbaV0ucHJlX29mZl9zbGVlcCAqIDEwMDApOworCQkJcmVndWxhdG9yX3Nl dF9sb2FkKGluX3ZyZWdbaV0udnJlZywKKwkJCQlpbl92cmVnW2ldLmRpc2FibGVfbG9hZCk7CisJ CQlyZWd1bGF0b3JfZGlzYWJsZShpbl92cmVnW2ldLnZyZWcpOworCQkJaWYgKGluX3ZyZWdbaV0u cG9zdF9vZmZfc2xlZXApCisJCQkJdXNsZWVwX3JhbmdlKGluX3ZyZWdbaV0ucG9zdF9vZmZfc2xl ZXAgKiAxMDAwLAorCQkJCQlpbl92cmVnW2ldLnBvc3Rfb2ZmX3NsZWVwICogMTAwMCk7CisJCX0K Kwl9CisJcmV0dXJuIHJjOworCitkaXNhYmxlX3ZyZWc6CisJcmVndWxhdG9yX3NldF9sb2FkKGlu X3ZyZWdbaV0udnJlZywgaW5fdnJlZ1tpXS5kaXNhYmxlX2xvYWQpOworCit2cmVnX3NldF9vcHRf bW9kZV9mYWlsOgorCWZvciAoaS0tOyBpID49IDA7IGktLSkgeworCQlpZiAoaW5fdnJlZ1tpXS5w cmVfb2ZmX3NsZWVwKQorCQkJdXNsZWVwX3JhbmdlKGluX3ZyZWdbaV0ucHJlX29mZl9zbGVlcCAq IDEwMDAsCisJCQkJaW5fdnJlZ1tpXS5wcmVfb2ZmX3NsZWVwICogMTAwMCk7CisJCXJlZ3VsYXRv cl9zZXRfbG9hZChpbl92cmVnW2ldLnZyZWcsCisJCQlpbl92cmVnW2ldLmRpc2FibGVfbG9hZCk7 CisJCXJlZ3VsYXRvcl9kaXNhYmxlKGluX3ZyZWdbaV0udnJlZyk7CisJCWlmIChpbl92cmVnW2ld LnBvc3Rfb2ZmX3NsZWVwKQorCQkJdXNsZWVwX3JhbmdlKGluX3ZyZWdbaV0ucG9zdF9vZmZfc2xl ZXAgKiAxMDAwLAorCQkJCWluX3ZyZWdbaV0ucG9zdF9vZmZfc2xlZXAgKiAxMDAwKTsKKwl9CisK KwlyZXR1cm4gcmM7Cit9IC8qIG1zbV9kc3NfZW5hYmxlX3ZyZWcgKi8KKworCiB2b2lkIG1zbV9k c3NfcHV0X2NsayhzdHJ1Y3QgZHNzX2NsayAqY2xrX2FycnksIGludCBudW1fY2xrKQogewogCWlu dCBpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2lvX3V0 aWwuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9pb191dGlsLmgKaW5kZXgg YmMwNzM4MS4uNTI0YjM5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2lvX3V0aWwuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf aW9fdXRpbC5oCkBAIC0xNSw2ICsxNSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAj aW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxh dG9yL2NvbnN1bWVyLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2RlZmluZSBERVZf REJHKGZtdCwgYXJncy4uLikgICBwcl9kZWJ1ZyhmbXQsICMjYXJncykKQEAgLTIyLDYgKzIzLDM5 IEBACiAjZGVmaW5lIERFVl9XQVJOKGZtdCwgYXJncy4uLikgIHByX3dhcm4oZm10LCAjI2FyZ3Mp CiAjZGVmaW5lIERFVl9FUlIoZm10LCBhcmdzLi4uKSAgIHByX2VycihmbXQsICMjYXJncykKIAor c3RydWN0IGRzc19pb19kYXRhIHsKKwl1MzIgbGVuOworCXZvaWQgX19pb21lbSAqYmFzZTsKK307 CisKKy8qCit2b2lkIGRzc19yZWdfdyhzdHJ1Y3QgZHNzX2lvX2RhdGEgKmlvLCB1MzIgb2Zmc2V0 LCB1MzIgdmFsdWUsIHUzMiBkZWJ1Zyk7Cit1MzIgZHNzX3JlZ19yKHN0cnVjdCBkc3NfaW9fZGF0 YSAqaW8sIHUzMiBvZmZzZXQsIHUzMiBkZWJ1Zyk7Cit2b2lkIGRzc19yZWdfZHVtcCh2b2lkIF9f aW9tZW0gKmJhc2UsIHUzMiBsZW4sIGNvbnN0IGNoYXIgKnByZWZpeCwgdTMyIGRlYnVnKTsKKwor I2RlZmluZSBEU1NfUkVHX1dfTkQoaW8sIG9mZnNldCwgdmFsKSAgZHNzX3JlZ193KGlvLCBvZmZz ZXQsIHZhbCwgZmFsc2UpCisjZGVmaW5lIERTU19SRUdfVyhpbywgb2Zmc2V0LCB2YWwpICAgICBk c3NfcmVnX3coaW8sIG9mZnNldCwgdmFsLCB0cnVlKQorI2RlZmluZSBEU1NfUkVHX1JfTkQoaW8s IG9mZnNldCkgICAgICAgZHNzX3JlZ19yKGlvLCBvZmZzZXQsIGZhbHNlKQorI2RlZmluZSBEU1Nf UkVHX1IoaW8sIG9mZnNldCkgICAgICAgICAgZHNzX3JlZ19yKGlvLCBvZmZzZXQsIHRydWUpCisq LworZW51bSBkc3NfdnJlZ190eXBlIHsKKwlEU1NfUkVHX0xETywKKwlEU1NfUkVHX1ZTLAorfTsK Kworc3RydWN0IGRzc192cmVnIHsKKwlzdHJ1Y3QgcmVndWxhdG9yICp2cmVnOyAvKiB2cmVnIGhh bmRsZSAqLworCWNoYXIgdnJlZ19uYW1lWzMyXTsKKwlpbnQgbWluX3ZvbHRhZ2U7CisJaW50IG1h eF92b2x0YWdlOworCWludCBlbmFibGVfbG9hZDsKKwlpbnQgZGlzYWJsZV9sb2FkOworCWludCBw cmVfb25fc2xlZXA7CisJaW50IHBvc3Rfb25fc2xlZXA7CisJaW50IHByZV9vZmZfc2xlZXA7CisJ aW50IHBvc3Rfb2ZmX3NsZWVwOworfTsKKwogc3RydWN0IGRzc19ncGlvIHsKIAl1bnNpZ25lZCBp bnQgZ3BpbzsKIAl1bnNpZ25lZCBpbnQgdmFsdWU7CkBAIC00MiwxMiArNzYsMjIgQEAgc3RydWN0 IGRzc19jbGsgewogfTsKIAogc3RydWN0IGRzc19tb2R1bGVfcG93ZXIgeworCXVuc2lnbmVkIGlu dCBudW1fdnJlZzsKKwlzdHJ1Y3QgZHNzX3ZyZWcgKnZyZWdfY29uZmlnOwogCXVuc2lnbmVkIGlu dCBudW1fZ3BpbzsKIAlzdHJ1Y3QgZHNzX2dwaW8gKmdwaW9fY29uZmlnOwogCXVuc2lnbmVkIGlu dCBudW1fY2xrOwogCXN0cnVjdCBkc3NfY2xrICpjbGtfY29uZmlnOwogfTsKIAoraW50IG1zbV9k c3NfaW9yZW1hcF9ieW5hbWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJCSAgIHN0 cnVjdCBkc3NfaW9fZGF0YSAqaW9fZGF0YSwgY29uc3QgY2hhciAqbmFtZSk7Cit2b2lkIG1zbV9k c3NfaW91bm1hcChzdHJ1Y3QgZHNzX2lvX2RhdGEgKmlvX2RhdGEpOworCitpbnQgbXNtX2Rzc19j b25maWdfdnJlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkc3NfdnJlZyAqaW5fdnJlZywK KwkJCWludCBudW1fdnJlZywgaW50IGNvbmZpZyk7CitpbnQgbXNtX2Rzc19lbmFibGVfdnJlZyhz dHJ1Y3QgZHNzX3ZyZWcgKmluX3ZyZWcsIGludCBudW1fdnJlZywJaW50IGVuYWJsZSk7CisKIGlu dCBtc21fZHNzX2dldF9jbGsoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZHNzX2NsayAqY2xr X2FycnksIGludCBudW1fY2xrKTsKIHZvaWQgbXNtX2Rzc19wdXRfY2xrKHN0cnVjdCBkc3NfY2xr ICpjbGtfYXJyeSwgaW50IG51bV9jbGspOwogaW50IG1zbV9kc3NfY2xrX3NldF9yYXRlKHN0cnVj dCBkc3NfY2xrICpjbGtfYXJyeSwgaW50IG51bV9jbGspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL21zbS9kcC9kcF9hdXguYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfYXV4LmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBiODJjMgotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfYXV4LmMKQEAgLTAsMCArMSw1NzAgQEAK Ky8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFs bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAorICog b25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2RlZmluZSBwcl9mbXQo Zm10KQkiW2RybS1kcF0gJXM6ICIgZm10LCBfX2Z1bmNfXworCisjaW5jbHVkZSA8bGludXgvZGVs YXkuaD4KKworI2luY2x1ZGUgImRwX2F1eC5oIgorCisjZGVmaW5lIERQX0FVWF9FTlVNX1NUUih4 KQkJI3gKKworZW51bSB7CisJRFBfQVVYX0RBVEFfSU5ERVhfV1JJVEUgPSBCSVQoMzEpLAorfTsK Kworc3RydWN0IGRwX2F1eF9wcml2YXRlIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0 IGRwX2F1eCBkcF9hdXg7CisJc3RydWN0IGRwX2NhdGFsb2dfYXV4ICpjYXRhbG9nOworCXN0cnVj dCBkcF9hdXhfY2ZnICpjZmc7CisKKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CisJc3RydWN0IGNvbXBs ZXRpb24gY29tcDsKKworCXUzMiBhdXhfZXJyb3JfbnVtOworCXUzMiByZXRyeV9jbnQ7CisJYm9v bCBjbWRfYnVzeTsKKwlib29sIG5hdGl2ZTsKKwlib29sIHJlYWQ7CisJYm9vbCBub19zZW5kX2Fk ZHI7CisJYm9vbCBub19zZW5kX3N0b3A7CisJdTMyIG9mZnNldDsKKwl1MzIgc2VnbWVudDsKKwor CXN0cnVjdCBkcm1fZHBfYXV4IGRybV9hdXg7Cit9OworCitzdGF0aWMgY2hhciAqZHBfYXV4X2dl dF9lcnJvcih1MzIgYXV4X2Vycm9yKQoreworCXN3aXRjaCAoYXV4X2Vycm9yKSB7CisJY2FzZSBE UF9BVVhfRVJSX05PTkU6CisJCXJldHVybiBEUF9BVVhfRU5VTV9TVFIoRFBfQVVYX0VSUl9OT05F KTsKKwljYXNlIERQX0FVWF9FUlJfQUREUjoKKwkJcmV0dXJuIERQX0FVWF9FTlVNX1NUUihEUF9B VVhfRVJSX0FERFIpOworCWNhc2UgRFBfQVVYX0VSUl9UT1VUOgorCQlyZXR1cm4gRFBfQVVYX0VO VU1fU1RSKERQX0FVWF9FUlJfVE9VVCk7CisJY2FzZSBEUF9BVVhfRVJSX05BQ0s6CisJCXJldHVy biBEUF9BVVhfRU5VTV9TVFIoRFBfQVVYX0VSUl9OQUNLKTsKKwljYXNlIERQX0FVWF9FUlJfREVG RVI6CisJCXJldHVybiBEUF9BVVhfRU5VTV9TVFIoRFBfQVVYX0VSUl9ERUZFUik7CisJY2FzZSBE UF9BVVhfRVJSX05BQ0tfREVGRVI6CisJCXJldHVybiBEUF9BVVhfRU5VTV9TVFIoRFBfQVVYX0VS Ul9OQUNLX0RFRkVSKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gInVua25vd24iOworCX0KK30KKwor c3RhdGljIHUzMiBkcF9hdXhfd3JpdGUoc3RydWN0IGRwX2F1eF9wcml2YXRlICphdXgsCisJCQlz dHJ1Y3QgZHJtX2RwX2F1eF9tc2cgKm1zZykKK3sKKwl1MzIgZGF0YVs0XSwgcmVnLCBsZW47CisJ dTggKm1zZ2RhdGEgPSBtc2ctPmJ1ZmZlcjsKKwlpbnQgY29uc3QgYXV4X2NtZF9maWZvX2xlbiA9 IDEyODsKKwlpbnQgaSA9IDA7CisKKwlpZiAoYXV4LT5yZWFkKQorCQlsZW4gPSA0OworCWVsc2UK KwkJbGVuID0gbXNnLT5zaXplICsgNDsKKworCS8qCisJICogY21kIGZpZm8gb25seSBoYXMgZGVw dGggb2YgMTQ0IGJ5dGVzCisJICogbGltaXQgYnVmIGxlbmd0aCB0byAxMjggYnl0ZXMgaGVyZQor CSAqLworCWlmIChsZW4gPiBhdXhfY21kX2ZpZm9fbGVuKSB7CisJCXByX2VycigiYnVmIGxlbiBl cnJvclxuIik7CisJCXJldHVybiAwOworCX0KKworCS8qIFBhY2sgY21kIGFuZCB3cml0ZSB0byBI VyAqLworCWRhdGFbMF0gPSAobXNnLT5hZGRyZXNzID4+IDE2KSAmIDB4ZjsgLyogYWRkclsxOTox Nl0gKi8KKwlpZiAoYXV4LT5yZWFkKQorCQlkYXRhWzBdIHw9ICBCSVQoNCk7IC8qIFIvVyAqLwor CisJZGF0YVsxXSA9IChtc2ctPmFkZHJlc3MgPj4gOCkgJiAweGZmOwkvKiBhZGRyWzE1OjhdICov CisJZGF0YVsyXSA9IG1zZy0+YWRkcmVzcyAmIDB4ZmY7CQkvKiBhZGRyWzc6MF0gKi8KKwlkYXRh WzNdID0gKG1zZy0+c2l6ZSAtIDEpICYgMHhmZjsJLyogbGVuWzc6MF0gKi8KKworCWZvciAoaSA9 IDA7IGkgPCBsZW47IGkrKykgeworCQlyZWcgPSAoaSA8IDQpID8gZGF0YVtpXSA6IG1zZ2RhdGFb aSAtIDRdOworCQlyZWcgPSAoKHJlZykgPDwgOCkgJiAweDAwMDBmZjAwOyAvKiBpbmRleCA9IDAs IHdyaXRlICovCisJCWlmIChpID09IDApCisJCQlyZWcgfD0gRFBfQVVYX0RBVEFfSU5ERVhfV1JJ VEU7CisJCWF1eC0+Y2F0YWxvZy0+ZGF0YSA9IHJlZzsKKwkJYXV4LT5jYXRhbG9nLT53cml0ZV9k YXRhKGF1eC0+Y2F0YWxvZyk7CisJfQorCisJYXV4LT5jYXRhbG9nLT5jbGVhcl90cmFucyhhdXgt PmNhdGFsb2csIGZhbHNlKTsKKworCXJlZyA9IDA7IC8qIFRyYW5zYWN0aW9uIG51bWJlciA9PSAx ICovCisJaWYgKCFhdXgtPm5hdGl2ZSkgeyAvKiBpMmMgKi8KKwkJcmVnIHw9IEJJVCg4KTsKKwor CQlpZiAoYXV4LT5ub19zZW5kX2FkZHIpCisJCQlyZWcgfD0gQklUKDEwKTsKKworCQlpZiAoYXV4 LT5ub19zZW5kX3N0b3ApCisJCQlyZWcgfD0gQklUKDExKTsKKwl9CisKKwlyZWcgfD0gQklUKDkp OworCWF1eC0+Y2F0YWxvZy0+ZGF0YSA9IHJlZzsKKwlhdXgtPmNhdGFsb2ctPndyaXRlX3RyYW5z KGF1eC0+Y2F0YWxvZyk7CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgaW50IGRwX2F1eF9j bWRfZmlmb190eChzdHJ1Y3QgZHBfYXV4X3ByaXZhdGUgKmF1eCwKKwkJCSAgICAgIHN0cnVjdCBk cm1fZHBfYXV4X21zZyAqbXNnKQoreworCXUzMiByZXQgPSAwLCBsZW4gPSAwLCB0aW1lb3V0Owor CWludCBjb25zdCBhdXhfdGltZW91dF9tcyA9IEhaLzQ7CisKKwlyZWluaXRfY29tcGxldGlvbigm YXV4LT5jb21wKTsKKworCWxlbiA9IGRwX2F1eF93cml0ZShhdXgsIG1zZyk7CisJaWYgKGxlbiA9 PSAwKSB7CisJCXByX2VycigiRFAgQVVYIHdyaXRlIGZhaWxlZFxuIik7CisJCXJldHVybiAtRUlO VkFMOworCX0KKworCXRpbWVvdXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmF1eC0+ Y29tcCwgYXV4X3RpbWVvdXRfbXMpOworCWlmICghdGltZW91dCkgeworCQlwcl9lcnIoImF1eCAl cyB0aW1lb3V0XG4iLCAoYXV4LT5yZWFkID8gInJlYWQiIDogIndyaXRlIikpOworCQlyZXR1cm4g LUVUSU1FRE9VVDsKKwl9CisKKwlpZiAoYXV4LT5hdXhfZXJyb3JfbnVtID09IERQX0FVWF9FUlJf Tk9ORSkgeworCQlyZXQgPSBsZW47CisJfSBlbHNlIHsKKwkJcHJfZXJyX3JhdGVsaW1pdGVkKCJh dXggZXJyOiAlc1xuIiwKKwkJCWRwX2F1eF9nZXRfZXJyb3IoYXV4LT5hdXhfZXJyb3JfbnVtKSk7 CisKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9p ZCBkcF9hdXhfY21kX2ZpZm9fcngoc3RydWN0IGRwX2F1eF9wcml2YXRlICphdXgsCisJCXN0cnVj dCBkcm1fZHBfYXV4X21zZyAqbXNnKQoreworCXUzMiBkYXRhOworCXU4ICpkcDsKKwl1MzIgaSwg YWN0dWFsX2k7CisJdTMyIGxlbiA9IG1zZy0+c2l6ZTsKKworCWF1eC0+Y2F0YWxvZy0+Y2xlYXJf dHJhbnMoYXV4LT5jYXRhbG9nLCB0cnVlKTsKKworCWRhdGEgPSAwOworCWRhdGEgfD0gRFBfQVVY X0RBVEFfSU5ERVhfV1JJVEU7IC8qIElOREVYX1dSSVRFICovCisJZGF0YSB8PSBCSVQoMCk7ICAv KiByZWFkICovCisKKwlhdXgtPmNhdGFsb2ctPmRhdGEgPSBkYXRhOworCWF1eC0+Y2F0YWxvZy0+ d3JpdGVfZGF0YShhdXgtPmNhdGFsb2cpOworCisJZHAgPSBtc2ctPmJ1ZmZlcjsKKworCS8qIGRp c2NhcmQgZmlyc3QgYnl0ZSAqLworCWRhdGEgPSBhdXgtPmNhdGFsb2ctPnJlYWRfZGF0YShhdXgt PmNhdGFsb2cpOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWRhdGEgPSBhdXgt PmNhdGFsb2ctPnJlYWRfZGF0YShhdXgtPmNhdGFsb2cpOworCQkqZHArKyA9ICh1OCkoKGRhdGEg Pj4gOCkgJiAweGZmKTsKKworCQlhY3R1YWxfaSA9IChkYXRhID4+IDE2KSAmIDB4RkY7CisJCWlm IChpICE9IGFjdHVhbF9pKQorCQkJcHJfd2FybigiSW5kZXggbWlzbWF0Y2g6IGV4cGVjdGVkICVk LCBmb3VuZCAlZFxuIiwKKwkJCQlpLCBhY3R1YWxfaSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBk cF9hdXhfbmF0aXZlX2hhbmRsZXIoc3RydWN0IGRwX2F1eF9wcml2YXRlICphdXgpCit7CisJdTMy IGlzciA9IGF1eC0+Y2F0YWxvZy0+aXNyOworCisJaWYgKGlzciAmIERQX0lOVFJfQVVYX0kyQ19E T05FKQorCQlhdXgtPmF1eF9lcnJvcl9udW0gPSBEUF9BVVhfRVJSX05PTkU7CisJZWxzZSBpZiAo aXNyICYgRFBfSU5UUl9XUk9OR19BRERSKQorCQlhdXgtPmF1eF9lcnJvcl9udW0gPSBEUF9BVVhf RVJSX0FERFI7CisJZWxzZSBpZiAoaXNyICYgRFBfSU5UUl9USU1FT1VUKQorCQlhdXgtPmF1eF9l cnJvcl9udW0gPSBEUF9BVVhfRVJSX1RPVVQ7CisJaWYgKGlzciAmIERQX0lOVFJfTkFDS19ERUZF UikKKwkJYXV4LT5hdXhfZXJyb3JfbnVtID0gRFBfQVVYX0VSUl9OQUNLOworCisJY29tcGxldGUo JmF1eC0+Y29tcCk7Cit9CisKK3N0YXRpYyB2b2lkIGRwX2F1eF9pMmNfaGFuZGxlcihzdHJ1Y3Qg ZHBfYXV4X3ByaXZhdGUgKmF1eCkKK3sKKwl1MzIgaXNyID0gYXV4LT5jYXRhbG9nLT5pc3I7CisK KwlpZiAoaXNyICYgRFBfSU5UUl9BVVhfSTJDX0RPTkUpIHsKKwkJaWYgKGlzciAmIChEUF9JTlRS X0kyQ19OQUNLIHwgRFBfSU5UUl9JMkNfREVGRVIpKQorCQkJYXV4LT5hdXhfZXJyb3JfbnVtID0g RFBfQVVYX0VSUl9OQUNLOworCQllbHNlCisJCQlhdXgtPmF1eF9lcnJvcl9udW0gPSBEUF9BVVhf RVJSX05PTkU7CisJfSBlbHNlIHsKKwkJaWYgKGlzciAmIERQX0lOVFJfV1JPTkdfQUREUikKKwkJ CWF1eC0+YXV4X2Vycm9yX251bSA9IERQX0FVWF9FUlJfQUREUjsKKwkJZWxzZSBpZiAoaXNyICYg RFBfSU5UUl9USU1FT1VUKQorCQkJYXV4LT5hdXhfZXJyb3JfbnVtID0gRFBfQVVYX0VSUl9UT1VU OworCQlpZiAoaXNyICYgRFBfSU5UUl9OQUNLX0RFRkVSKQorCQkJYXV4LT5hdXhfZXJyb3JfbnVt ID0gRFBfQVVYX0VSUl9OQUNLX0RFRkVSOworCQlpZiAoaXNyICYgRFBfSU5UUl9JMkNfTkFDSykK KwkJCWF1eC0+YXV4X2Vycm9yX251bSA9IERQX0FVWF9FUlJfTkFDSzsKKwkJaWYgKGlzciAmIERQ X0lOVFJfSTJDX0RFRkVSKQorCQkJYXV4LT5hdXhfZXJyb3JfbnVtID0gRFBfQVVYX0VSUl9ERUZF UjsKKwl9CisKKwljb21wbGV0ZSgmYXV4LT5jb21wKTsKK30KKworc3RhdGljIHZvaWQgZHBfYXV4 X2lzcihzdHJ1Y3QgZHBfYXV4ICpkcF9hdXgpCit7CisJc3RydWN0IGRwX2F1eF9wcml2YXRlICph dXg7CisKKwlpZiAoIWRwX2F1eCkgeworCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOworCQly ZXR1cm47CisJfQorCisJYXV4ID0gY29udGFpbmVyX29mKGRwX2F1eCwgc3RydWN0IGRwX2F1eF9w cml2YXRlLCBkcF9hdXgpOworCisJYXV4LT5jYXRhbG9nLT5nZXRfaXJxKGF1eC0+Y2F0YWxvZywg YXV4LT5jbWRfYnVzeSk7CisKKwlpZiAoIWF1eC0+Y21kX2J1c3kpCisJCXJldHVybjsKKworCWlm IChhdXgtPm5hdGl2ZSkKKwkJZHBfYXV4X25hdGl2ZV9oYW5kbGVyKGF1eCk7CisJZWxzZQorCQlk cF9hdXhfaTJjX2hhbmRsZXIoYXV4KTsKK30KKworc3RhdGljIHZvaWQgZHBfYXV4X3JlY29uZmln KHN0cnVjdCBkcF9hdXggKmRwX2F1eCkKK3sKKwlzdHJ1Y3QgZHBfYXV4X3ByaXZhdGUgKmF1eDsK KworCWlmICghZHBfYXV4KSB7CisJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7CisJCXJldHVy bjsKKwl9CisKKwlhdXggPSBjb250YWluZXJfb2YoZHBfYXV4LCBzdHJ1Y3QgZHBfYXV4X3ByaXZh dGUsIGRwX2F1eCk7CisKKwlhdXgtPmNhdGFsb2ctPnVwZGF0ZV9hdXhfY2ZnKGF1eC0+Y2F0YWxv ZywKKwkJCWF1eC0+Y2ZnLCBQSFlfQVVYX0NGRzEpOworCWF1eC0+Y2F0YWxvZy0+cmVzZXQoYXV4 LT5jYXRhbG9nKTsKK30KKworc3RhdGljIHZvaWQgZHBfYXV4X3VwZGF0ZV9vZmZzZXRfYW5kX3Nl Z21lbnQoc3RydWN0IGRwX2F1eF9wcml2YXRlICphdXgsCisJCQkJCSAgICAgc3RydWN0IGRybV9k cF9hdXhfbXNnICppbnB1dF9tc2cpCit7CisJdTMyIGNvbnN0IGVkaWRfYWRkcmVzcyA9IDB4NTA7 CisJdTMyIGNvbnN0IHNlZ21lbnRfYWRkcmVzcyA9IDB4MzA7CisJYm9vbCBpMmNfcmVhZCA9IGlu cHV0X21zZy0+cmVxdWVzdCAmCisJCShEUF9BVVhfSTJDX1JFQUQgJiBEUF9BVVhfTkFUSVZFX1JF QUQpOworCXU4ICpkYXRhID0gTlVMTDsKKworCWlmIChhdXgtPm5hdGl2ZSB8fCBpMmNfcmVhZCB8 fCAoKGlucHV0X21zZy0+YWRkcmVzcyAhPSBlZGlkX2FkZHJlc3MpICYmCisJCShpbnB1dF9tc2ct PmFkZHJlc3MgIT0gc2VnbWVudF9hZGRyZXNzKSkpCisJCXJldHVybjsKKworCisJZGF0YSA9IGlu cHV0X21zZy0+YnVmZmVyOworCWlmIChpbnB1dF9tc2ctPmFkZHJlc3MgPT0gc2VnbWVudF9hZGRy ZXNzKQorCQlhdXgtPnNlZ21lbnQgPSAqZGF0YTsKKwllbHNlCisJCWF1eC0+b2Zmc2V0ID0gKmRh dGE7Cit9CisKKy8qKgorICogZHBfYXV4X3RyYW5zZmVyX2hlbHBlcigpIC0gaGVscGVyIGZ1bmN0 aW9uIGZvciBFRElEIHJlYWQgdHJhbnNhY3Rpb25zCisgKgorICogQGF1eDogRFAgQVVYIHByaXZh dGUgc3RydWN0dXJlCisgKiBAaW5wdXRfbXNnOiBpbnB1dCBtZXNzYWdlIGZyb20gRFJNIHVwc3Ry ZWFtIEFQSXMKKyAqCisgKiByZXR1cm46IHZvaWQKKyAqCisgKiBUaGlzIGhlbHBlciBmdW5jdGlv biBpcyB1c2VkIHRvIGZpeCBFRElEIHJlYWRzIGZvciBub24tY29tcGxpYW50CisgKiBzaW5rcyB0 aGF0IGRvIG5vdCBoYW5kbGUgdGhlIGkyYyBtaWRkbGUtb2YtdHJhbnNhY3Rpb24gZmxhZyBjb3Jy ZWN0bHkuCisgKi8KK3N0YXRpYyB2b2lkIGRwX2F1eF90cmFuc2Zlcl9oZWxwZXIoc3RydWN0IGRw X2F1eF9wcml2YXRlICphdXgsCisJCQkJICAgc3RydWN0IGRybV9kcF9hdXhfbXNnICppbnB1dF9t c2cpCit7CisJc3RydWN0IGRybV9kcF9hdXhfbXNnIGhlbHBlcl9tc2c7CisJdTMyIGNvbnN0IG1l c3NhZ2Vfc2l6ZSA9IDB4MTA7CisJdTMyIGNvbnN0IHNlZ21lbnRfYWRkcmVzcyA9IDB4MzA7CisJ Ym9vbCBpMmNfbW90ID0gaW5wdXRfbXNnLT5yZXF1ZXN0ICYgRFBfQVVYX0kyQ19NT1Q7CisJYm9v bCBpMmNfcmVhZCA9IGlucHV0X21zZy0+cmVxdWVzdCAmCisJCShEUF9BVVhfSTJDX1JFQUQgJiBE UF9BVVhfTkFUSVZFX1JFQUQpOworCisJaWYgKCFpMmNfbW90IHx8ICFpMmNfcmVhZCB8fCAoaW5w dXRfbXNnLT5zaXplID09IDApKQorCQlyZXR1cm47CisKKwlhdXgtPnJlYWQgPSBmYWxzZTsKKwlh dXgtPmNtZF9idXN5ID0gdHJ1ZTsKKwlhdXgtPm5vX3NlbmRfYWRkciA9IHRydWU7CisJYXV4LT5u b19zZW5kX3N0b3AgPSB0cnVlOworCisJLyoKKwkgKiBTZW5kIHRoZSBzZWdtZW50IGFkZHJlc3Mg Zm9yIGV2ZXJ5IGkyYyByZWFkIGluIHdoaWNoIHRoZQorCSAqIG1pZGRsZS1vZi10cmFuYWN0aW9u IGZsYWcgaXMgc2V0LiBUaGlzIGlzIHJlcXVpcmVkIHRvIHN1cHBvcnQgRURJRAorCSAqIHJlYWRz IG9mIG1vcmUgdGhhbiAyIGJsb2NrcyBhcyB0aGUgc2VnbWVudCBhZGRyZXNzIGlzIHJlc2V0IHRv IDAKKwkgKiBzaW5jZSB3ZSBhcmUgb3ZlcnJpZGluZyB0aGUgbWlkZGxlLW9mLXRyYW5zYWN0aW9u IGZsYWcgZm9yIHJlYWQKKwkgKiB0cmFuc2FjdGlvbnMuCisJICovCisJbWVtc2V0KCZoZWxwZXJf bXNnLCAwLCBzaXplb2YoaGVscGVyX21zZykpOworCWhlbHBlcl9tc2cuYWRkcmVzcyA9IHNlZ21l bnRfYWRkcmVzczsKKwloZWxwZXJfbXNnLmJ1ZmZlciA9ICZhdXgtPnNlZ21lbnQ7CisJaGVscGVy X21zZy5zaXplID0gMTsKKwlkcF9hdXhfY21kX2ZpZm9fdHgoYXV4LCAmaGVscGVyX21zZyk7CisK KwkvKgorCSAqIFNlbmQgdGhlIG9mZnNldCBhZGRyZXNzIGZvciBldmVyeSBpMmMgcmVhZCBpbiB3 aGljaCB0aGUKKwkgKiBtaWRkbGUtb2YtdHJhbnNhY3Rpb24gZmxhZyBpcyBzZXQuIFRoaXMgd2ls bCBlbnN1cmUgdGhhdCB0aGUgc2luaworCSAqIHdpbGwgdXBkYXRlIGl0cyByZWFkIHBvaW50ZXIg YW5kIHJldHVybiB0aGUgY29ycmVjdCBwb3J0aW9uIG9mIHRoZQorCSAqIEVESUQgYnVmZmVyIGlu IHRoZSBzdWJzZXF1ZW50IGkyYyByZWFkIHRyYXNudGlvbiB0cmlnZ2VyZWQgaW4gdGhlCisJICog bmF0aXZlIEFVWCB0cmFuc2ZlciBmdW5jdGlvbi4KKwkgKi8KKwltZW1zZXQoJmhlbHBlcl9tc2cs IDAsIHNpemVvZihoZWxwZXJfbXNnKSk7CisJaGVscGVyX21zZy5hZGRyZXNzID0gaW5wdXRfbXNn LT5hZGRyZXNzOworCWhlbHBlcl9tc2cuYnVmZmVyID0gJmF1eC0+b2Zmc2V0OworCWhlbHBlcl9t c2cuc2l6ZSA9IDE7CisJZHBfYXV4X2NtZF9maWZvX3R4KGF1eCwgJmhlbHBlcl9tc2cpOworCWF1 eC0+b2Zmc2V0ICs9IG1lc3NhZ2Vfc2l6ZTsKKworCWlmIChhdXgtPm9mZnNldCA9PSAweDgwIHx8 IGF1eC0+b2Zmc2V0ID09IDB4MTAwKQorCQlhdXgtPnNlZ21lbnQgPSAweDA7IC8qIHJlc2V0IHNl Z21lbnQgYXQgZW5kIG9mIGJsb2NrICovCit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGRvZXMg dGhlIHJlYWwgam9iIHRvIHByb2Nlc3MgYW4gQVVYIHRyYW5zYWN0aW9uLgorICogSXQgd2lsbCBj YWxsIGF1eF9yZXNldCgpIGZ1bmN0aW9uIHRvIHJlc2V0IHRoZSBBVVggY2hhbm5lbCwKKyAqIGlm IHRoZSB3YWl0aW5nIGlzIHRpbWVvdXQuCisgKi8KK3N0YXRpYyBzc2l6ZV90IGRwX2F1eF90cmFu c2ZlcihzdHJ1Y3QgZHJtX2RwX2F1eCAqZHJtX2F1eCwKKwkJCSAgICAgICBzdHJ1Y3QgZHJtX2Rw X2F1eF9tc2cgKm1zZykKK3sKKwlzc2l6ZV90IHJldDsKKwlpbnQgY29uc3QgYXV4X2NtZF9uYXRp dmVfbWF4ID0gMTY7CisJaW50IGNvbnN0IGF1eF9jbWRfaTJjX21heCA9IDEyODsKKwlpbnQgY29u c3QgcmV0cnlfY291bnQgPSA1OworCXN0cnVjdCBkcF9hdXhfcHJpdmF0ZSAqYXV4ID0gY29udGFp bmVyX29mKGRybV9hdXgsCisJCXN0cnVjdCBkcF9hdXhfcHJpdmF0ZSwgZHJtX2F1eCk7CisKKwlt dXRleF9sb2NrKCZhdXgtPm11dGV4KTsKKworCWF1eC0+bmF0aXZlID0gbXNnLT5yZXF1ZXN0ICYg KERQX0FVWF9OQVRJVkVfV1JJVEUgJiBEUF9BVVhfTkFUSVZFX1JFQUQpOworCisJLyogSWdub3Jl IGFkZHJlc3Mgb25seSBtZXNzYWdlICovCisJaWYgKChtc2ctPnNpemUgPT0gMCkgfHwgKG1zZy0+ YnVmZmVyID09IE5VTEwpKSB7CisJCW1zZy0+cmVwbHkgPSBhdXgtPm5hdGl2ZSA/CisJCQlEUF9B VVhfTkFUSVZFX1JFUExZX0FDSyA6IERQX0FVWF9JMkNfUkVQTFlfQUNLOworCQlyZXQgPSBtc2ct PnNpemU7CisJCWdvdG8gdW5sb2NrX2V4aXQ7CisJfQorCisJLyogbXNnIHNhbml0eSBjaGVjayAq LworCWlmICgoYXV4LT5uYXRpdmUgJiYgKG1zZy0+c2l6ZSA+IGF1eF9jbWRfbmF0aXZlX21heCkp IHx8CisJCShtc2ctPnNpemUgPiBhdXhfY21kX2kyY19tYXgpKSB7CisJCXByX2VycigiJXM6IGlu dmFsaWQgbXNnOiBzaXplKCV6dSksIHJlcXVlc3QoJXgpXG4iLAorCQkJX19mdW5jX18sIG1zZy0+ c2l6ZSwgbXNnLT5yZXF1ZXN0KTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byB1bmxvY2tfZXhp dDsKKwl9CisKKwlkcF9hdXhfdXBkYXRlX29mZnNldF9hbmRfc2VnbWVudChhdXgsIG1zZyk7CisJ ZHBfYXV4X3RyYW5zZmVyX2hlbHBlcihhdXgsIG1zZyk7CisKKwlhdXgtPnJlYWQgPSBtc2ctPnJl cXVlc3QgJiAoRFBfQVVYX0kyQ19SRUFEICYgRFBfQVVYX05BVElWRV9SRUFEKTsKKwlhdXgtPmNt ZF9idXN5ID0gdHJ1ZTsKKworCWlmIChhdXgtPnJlYWQpIHsKKwkJYXV4LT5ub19zZW5kX2FkZHIg PSB0cnVlOworCQlhdXgtPm5vX3NlbmRfc3RvcCA9IGZhbHNlOworCX0gZWxzZSB7CisJCWF1eC0+ bm9fc2VuZF9hZGRyID0gdHJ1ZTsKKwkJYXV4LT5ub19zZW5kX3N0b3AgPSB0cnVlOworCX0KKwor CXJldCA9IGRwX2F1eF9jbWRfZmlmb190eChhdXgsIG1zZyk7CisJaWYgKChyZXQgPCAwKSAmJiBh dXgtPm5hdGl2ZSkgeworCQlhdXgtPnJldHJ5X2NudCsrOworCQlpZiAoIShhdXgtPnJldHJ5X2Nu dCAlIHJldHJ5X2NvdW50KSkKKwkJCWF1eC0+Y2F0YWxvZy0+dXBkYXRlX2F1eF9jZmcoYXV4LT5j YXRhbG9nLAorCQkJCWF1eC0+Y2ZnLCBQSFlfQVVYX0NGRzEpOworCQlhdXgtPmNhdGFsb2ctPnJl c2V0KGF1eC0+Y2F0YWxvZyk7CisJCWdvdG8gdW5sb2NrX2V4aXQ7CisJfSBlbHNlIGlmIChyZXQg PCAwKSB7CisJCWdvdG8gdW5sb2NrX2V4aXQ7CisJfQorCisJaWYgKGF1eC0+YXV4X2Vycm9yX251 bSA9PSBEUF9BVVhfRVJSX05PTkUpIHsKKwkJaWYgKGF1eC0+cmVhZCkKKwkJCWRwX2F1eF9jbWRf Zmlmb19yeChhdXgsIG1zZyk7CisKKwkJbXNnLT5yZXBseSA9IGF1eC0+bmF0aXZlID8KKwkJCURQ X0FVWF9OQVRJVkVfUkVQTFlfQUNLIDogRFBfQVVYX0kyQ19SRVBMWV9BQ0s7CisJfSBlbHNlIHsK KwkJLyogUmVwbHkgZGVmZXIgdG8gcmV0cnkgKi8KKwkJbXNnLT5yZXBseSA9IGF1eC0+bmF0aXZl ID8KKwkJCURQX0FVWF9OQVRJVkVfUkVQTFlfREVGRVIgOiBEUF9BVVhfSTJDX1JFUExZX0RFRkVS OworCX0KKworCS8qIFJldHVybiByZXF1ZXN0ZWQgc2l6ZSBmb3Igc3VjY2VzcyBvciByZXRyeSAq LworCXJldCA9IG1zZy0+c2l6ZTsKKwlhdXgtPnJldHJ5X2NudCA9IDA7CisKK3VubG9ja19leGl0 OgorCWF1eC0+Y21kX2J1c3kgPSBmYWxzZTsKKwltdXRleF91bmxvY2soJmF1eC0+bXV0ZXgpOwor CXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGRwX2F1eF9yZXNldF9waHlfY29uZmlnX2lu ZGljZXMoc3RydWN0IGRwX2F1eF9jZmcgKmF1eF9jZmcpCit7CisJaW50IGkgPSAwOworCisJZm9y IChpID0gMDsgaSA8IFBIWV9BVVhfQ0ZHX01BWDsgaSsrKQorCQlhdXhfY2ZnW2ldLmN1cnJlbnRf aW5kZXggPSAwOworfQorCitzdGF0aWMgdm9pZCBkcF9hdXhfaW5pdChzdHJ1Y3QgZHBfYXV4ICpk cF9hdXgsIHN0cnVjdCBkcF9hdXhfY2ZnICphdXhfY2ZnKQoreworCXN0cnVjdCBkcF9hdXhfcHJp dmF0ZSAqYXV4OworCisJaWYgKCFkcF9hdXggfHwgIWF1eF9jZmcpIHsKKwkJcHJfZXJyKCJpbnZh bGlkIGlucHV0XG4iKTsKKwkJcmV0dXJuOworCX0KKworCWF1eCA9IGNvbnRhaW5lcl9vZihkcF9h dXgsIHN0cnVjdCBkcF9hdXhfcHJpdmF0ZSwgZHBfYXV4KTsKKworCWRwX2F1eF9yZXNldF9waHlf Y29uZmlnX2luZGljZXMoYXV4X2NmZyk7CisJYXV4LT5jYXRhbG9nLT5zZXR1cChhdXgtPmNhdGFs b2csIGF1eF9jZmcpOworCWF1eC0+Y2F0YWxvZy0+cmVzZXQoYXV4LT5jYXRhbG9nKTsKKwlhdXgt PmNhdGFsb2ctPmVuYWJsZShhdXgtPmNhdGFsb2csIHRydWUpOworCWF1eC0+cmV0cnlfY250ID0g MDsKK30KKworc3RhdGljIHZvaWQgZHBfYXV4X2RlaW5pdChzdHJ1Y3QgZHBfYXV4ICpkcF9hdXgp Cit7CisJc3RydWN0IGRwX2F1eF9wcml2YXRlICphdXg7CisKKwlpZiAoIWRwX2F1eCkgeworCQlw cl9lcnIoImludmFsaWQgaW5wdXRcbiIpOworCQlyZXR1cm47CisJfQorCisJYXV4ID0gY29udGFp bmVyX29mKGRwX2F1eCwgc3RydWN0IGRwX2F1eF9wcml2YXRlLCBkcF9hdXgpOworCisJYXV4LT5j YXRhbG9nLT5lbmFibGUoYXV4LT5jYXRhbG9nLCBmYWxzZSk7Cit9CisKK3N0YXRpYyBpbnQgZHBf YXV4X3JlZ2lzdGVyKHN0cnVjdCBkcF9hdXggKmRwX2F1eCkKK3sKKwlzdHJ1Y3QgZHBfYXV4X3By aXZhdGUgKmF1eDsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghZHBfYXV4KSB7CisJCXByX2Vycigi aW52YWxpZCBpbnB1dFxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXhpdDsKKwl9CisK KwlhdXggPSBjb250YWluZXJfb2YoZHBfYXV4LCBzdHJ1Y3QgZHBfYXV4X3ByaXZhdGUsIGRwX2F1 eCk7CisKKwlhdXgtPmRybV9hdXgubmFtZSA9ICJkcHVfZHBfYXV4IjsKKwlhdXgtPmRybV9hdXgu ZGV2ID0gYXV4LT5kZXY7CisJYXV4LT5kcm1fYXV4LnRyYW5zZmVyID0gZHBfYXV4X3RyYW5zZmVy OworCXJldCA9IGRybV9kcF9hdXhfcmVnaXN0ZXIoJmF1eC0+ZHJtX2F1eCk7CisJaWYgKHJldCkg eworCQlwcl9lcnIoIiVzOiBmYWlsZWQgdG8gcmVnaXN0ZXIgZHJtIGF1eDogJWRcbiIsIF9fZnVu Y19fLCByZXQpOworCQlnb3RvIGV4aXQ7CisJfQorCWRwX2F1eC0+ZHJtX2F1eCA9ICZhdXgtPmRy bV9hdXg7CitleGl0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGRwX2F1eF9kZXJl Z2lzdGVyKHN0cnVjdCBkcF9hdXggKmRwX2F1eCkKK3sKKwlzdHJ1Y3QgZHBfYXV4X3ByaXZhdGUg KmF1eDsKKworCWlmICghZHBfYXV4KSB7CisJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7CisJ CXJldHVybjsKKwl9CisKKwlhdXggPSBjb250YWluZXJfb2YoZHBfYXV4LCBzdHJ1Y3QgZHBfYXV4 X3ByaXZhdGUsIGRwX2F1eCk7CisJZHJtX2RwX2F1eF91bnJlZ2lzdGVyKCZhdXgtPmRybV9hdXgp OworfQorCitzdHJ1Y3QgZHBfYXV4ICpkcF9hdXhfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3Ry dWN0IGRwX2NhdGFsb2dfYXV4ICpjYXRhbG9nLAorCQkJICBzdHJ1Y3QgZHBfYXV4X2NmZyAqYXV4 X2NmZykKK3sKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBkcF9hdXhfcHJpdmF0ZSAqYXV4OworCXN0 cnVjdCBkcF9hdXggKmRwX2F1eDsKKworCWlmICghY2F0YWxvZyB8fCAhYXV4X2NmZykgeworCQlw cl9lcnIoImludmFsaWQgaW5wdXRcbiIpOworCQlyYyA9IC1FTk9ERVY7CisJCWdvdG8gZXJyb3I7 CisJfQorCisJYXV4ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCphdXgpLCBHRlBfS0VSTkVM KTsKKwlpZiAoIWF1eCkgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3I7CisJfQorCisJ aW5pdF9jb21wbGV0aW9uKCZhdXgtPmNvbXApOworCWF1eC0+Y21kX2J1c3kgPSBmYWxzZTsKKwlt dXRleF9pbml0KCZhdXgtPm11dGV4KTsKKworCWF1eC0+ZGV2ID0gZGV2OworCWF1eC0+Y2F0YWxv ZyA9IGNhdGFsb2c7CisJYXV4LT5jZmcgPSBhdXhfY2ZnOworCWRwX2F1eCA9ICZhdXgtPmRwX2F1 eDsKKwlhdXgtPnJldHJ5X2NudCA9IDA7CisKKwlkcF9hdXgtPmlzciAgICAgPSBkcF9hdXhfaXNy OworCWRwX2F1eC0+aW5pdCAgICA9IGRwX2F1eF9pbml0OworCWRwX2F1eC0+ZGVpbml0ICA9IGRw X2F1eF9kZWluaXQ7CisJZHBfYXV4LT5kcm1fYXV4X3JlZ2lzdGVyID0gZHBfYXV4X3JlZ2lzdGVy OworCWRwX2F1eC0+ZHJtX2F1eF9kZXJlZ2lzdGVyID0gZHBfYXV4X2RlcmVnaXN0ZXI7CisJZHBf YXV4LT5yZWNvbmZpZyA9IGRwX2F1eF9yZWNvbmZpZzsKKworCXJldHVybiBkcF9hdXg7CitlcnJv cjoKKwlyZXR1cm4gRVJSX1BUUihyYyk7Cit9CisKK3ZvaWQgZHBfYXV4X3B1dChzdHJ1Y3QgZHBf YXV4ICpkcF9hdXgpCit7CisJc3RydWN0IGRwX2F1eF9wcml2YXRlICphdXg7CisKKwlpZiAoIWRw X2F1eCkKKwkJcmV0dXJuOworCisJYXV4ID0gY29udGFpbmVyX29mKGRwX2F1eCwgc3RydWN0IGRw X2F1eF9wcml2YXRlLCBkcF9hdXgpOworCisJbXV0ZXhfZGVzdHJveSgmYXV4LT5tdXRleCk7CisK KwlkZXZtX2tmcmVlKGF1eC0+ZGV2LCBhdXgpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL21zbS9kcC9kcF9hdXguaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfYXV4LmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMzMDBlZAotLS0gL2Rldi9udWxsCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfYXV4LmgKQEAgLTAsMCArMSw0NCBAQAorLyoK KyAqIENvcHlyaWdodCAoYykgMjAxMi0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJp Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCisgKiBvbmx5 IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4K KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaWZuZGVmIF9EUF9BVVhfSF8K KyNkZWZpbmUgX0RQX0FVWF9IXworCisjaW5jbHVkZSAiZHBfY2F0YWxvZy5oIgorI2luY2x1ZGUg PGRybS9kcm1fZHBfaGVscGVyLmg+CisKK2VudW0gZHBfYXV4X2Vycm9yIHsKKwlEUF9BVVhfRVJS X05PTkUJPSAwLAorCURQX0FVWF9FUlJfQUREUgk9IC0xLAorCURQX0FVWF9FUlJfVE9VVAk9IC0y LAorCURQX0FVWF9FUlJfTkFDSwk9IC0zLAorCURQX0FVWF9FUlJfREVGRVIJPSAtNCwKKwlEUF9B VVhfRVJSX05BQ0tfREVGRVIJPSAtNSwKK307CisKK3N0cnVjdCBkcF9hdXggeworCXN0cnVjdCBk cm1fZHBfYXV4ICpkcm1fYXV4OworCWludCAoKmRybV9hdXhfcmVnaXN0ZXIpKHN0cnVjdCBkcF9h dXggKmF1eCk7CisJdm9pZCAoKmRybV9hdXhfZGVyZWdpc3Rlcikoc3RydWN0IGRwX2F1eCAqYXV4 KTsKKwl2b2lkICgqaXNyKShzdHJ1Y3QgZHBfYXV4ICphdXgpOworCXZvaWQgKCppbml0KShzdHJ1 Y3QgZHBfYXV4ICphdXgsIHN0cnVjdCBkcF9hdXhfY2ZnICphdXhfY2ZnKTsKKwl2b2lkICgqZGVp bml0KShzdHJ1Y3QgZHBfYXV4ICphdXgpOworCXZvaWQgKCpyZWNvbmZpZykoc3RydWN0IGRwX2F1 eCAqYXV4KTsKK307CisKK3N0cnVjdCBkcF9hdXggKmRwX2F1eF9nZXQoc3RydWN0IGRldmljZSAq ZGV2LCBzdHJ1Y3QgZHBfY2F0YWxvZ19hdXggKmNhdGFsb2csCisJCQkgIHN0cnVjdCBkcF9hdXhf Y2ZnICphdXhfY2ZnKTsKK3ZvaWQgZHBfYXV4X3B1dChzdHJ1Y3QgZHBfYXV4ICphdXgpOworCisj ZW5kaWYgLypfX0RQX0FVWF9IXyovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rw L2RwX2NhdGFsb2cuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY2F0YWxvZy5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MTg2MTIKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2NhdGFsb2cuYwpAQCAtMCwwICsxLDExODggQEAK Ky8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFs bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAorICog b25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2RlZmluZSBwcl9mbXQo Zm10KQkiW2RybS1kcF0gJXM6ICIgZm10LCBfX2Z1bmNfXworCisjaW5jbHVkZSA8bGludXgvZGVs YXkuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2RwX2hlbHBlci5oPgorCisjaW5jbHVkZSAiZHBfY2F0 YWxvZy5oIgorI2luY2x1ZGUgImRwX3JlZy5oIgorCisjZGVmaW5lIERQX0dFVF9NU0IoeCkJKHgg Pj4gOCkKKyNkZWZpbmUgRFBfR0VUX0xTQih4KQkoeCAmIDB4ZmYpCisKKyNkZWZpbmUgZHBfcmVh ZChvZmZzZXQpIHJlYWRsX3JlbGF4ZWQoKG9mZnNldCkpCisjZGVmaW5lIGRwX3dyaXRlKG9mZnNl dCwgZGF0YSkgd3JpdGVsX3JlbGF4ZWQoKGRhdGEpLCAob2Zmc2V0KSkKKworI2RlZmluZSBkcF9j YXRhbG9nX2dldF9wcml2KHgpIHsgXAorCXN0cnVjdCBkcF9jYXRhbG9nICpkcF9jYXRhbG9nOyBc CisJZHBfY2F0YWxvZyA9IGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgZHBfY2F0YWxvZywgeCk7IFwK KwljYXRhbG9nID0gY29udGFpbmVyX29mKGRwX2NhdGFsb2csIHN0cnVjdCBkcF9jYXRhbG9nX3By aXZhdGUsIFwKKwkJCQlkcF9jYXRhbG9nKTsgXAorfQorCisjZGVmaW5lIERQX0lOVEVSUlVQVF9T VEFUVVMxIFwKKwkoRFBfSU5UUl9BVVhfSTJDX0RPTkV8IFwKKwlEUF9JTlRSX1dST05HX0FERFIg fCBEUF9JTlRSX1RJTUVPVVQgfCBcCisJRFBfSU5UUl9OQUNLX0RFRkVSIHwgRFBfSU5UUl9XUk9O R19EQVRBX0NOVCB8IFwKKwlEUF9JTlRSX0kyQ19OQUNLIHwgRFBfSU5UUl9JMkNfREVGRVIgfCBc CisJRFBfSU5UUl9QTExfVU5MT0NLRUQgfCBEUF9JTlRSX0FVWF9FUlJPUikKKworI2RlZmluZSBE UF9JTlRSX01BU0sxCQkoRFBfSU5URVJSVVBUX1NUQVRVUzEgPDwgMikKKworI2RlZmluZSBEUF9J TlRFUlJVUFRfU1RBVFVTMiBcCisJKERQX0lOVFJfUkVBRFlfRk9SX1ZJREVPIHwgRFBfSU5UUl9J RExFX1BBVFRFUk5fU0VOVCB8IFwKKwlEUF9JTlRSX0ZSQU1FX0VORCB8IERQX0lOVFJfQ1JDX1VQ REFURUQpCisKKyNkZWZpbmUgRFBfSU5UUl9NQVNLMgkJKERQX0lOVEVSUlVQVF9TVEFUVVMyIDw8 IDIpCisKK3N0YXRpYyB1OCBjb25zdCB2bV9wcmVfZW1waGFzaXNbNF1bNF0gPSB7CisJezB4MDAs IDB4MEIsIDB4MTIsIDB4RkZ9LCAgICAgICAvKiBwZTAsIDAgZGIgKi8KKwl7MHgwMCwgMHgwQSwg MHgxMiwgMHhGRn0sICAgICAgIC8qIHBlMSwgMy41IGRiICovCisJezB4MDAsIDB4MEMsIDB4RkYs IDB4RkZ9LCAgICAgICAvKiBwZTIsIDYuMCBkYiAqLworCXsweEZGLCAweEZGLCAweEZGLCAweEZG fSAgICAgICAgLyogcGUzLCA5LjUgZGIgKi8KK307CisKKy8qIHZvbHRhZ2Ugc3dpbmcsIDAuMnYg YW5kIDEuMHYgYXJlIG5vdCBzdXBwb3J0ICovCitzdGF0aWMgdTggY29uc3Qgdm1fdm9sdGFnZV9z d2luZ1s0XVs0XSA9IHsKKwl7MHgwNywgMHgwRiwgMHgxNCwgMHhGRn0sIC8qIHN3MCwgMC40diAg Ki8KKwl7MHgxMSwgMHgxRCwgMHgxRiwgMHhGRn0sIC8qIHN3MSwgMC42IHYgKi8KKwl7MHgxOCwg MHgxRiwgMHhGRiwgMHhGRn0sIC8qIHN3MSwgMC44IHYgKi8KKwl7MHhGRiwgMHhGRiwgMHhGRiwg MHhGRn0gIC8qIHN3MSwgMS4yIHYsIG9wdGlvbmFsICovCit9OworCisvKiBhdWRpbyByZWxhdGVk IGNhdGFsb2cgZnVuY3Rpb25zICovCitzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlIHsKKwlzdHJ1 Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IGRwX2lvICppbzsKKworCXUzMiAoKmF1ZGlvX21hcClb RFBfQVVESU9fU0RQX0hFQURFUl9NQVhdOworCXN0cnVjdCBkcF9jYXRhbG9nIGRwX2NhdGFsb2c7 Cit9OworCisvKiBhdXggcmVsYXRlZCBjYXRhbG9nIGZ1bmN0aW9ucyAqLworc3RhdGljIHUzMiBk cF9jYXRhbG9nX2F1eF9yZWFkX2RhdGEoc3RydWN0IGRwX2NhdGFsb2dfYXV4ICphdXgpCit7CisJ c3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKKwl2b2lkIF9faW9tZW0gKmJhc2U7 CisKKwlpZiAoIWF1eCkgeworCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOworCQlnb3RvIGVu ZDsKKwl9CisKKwlkcF9jYXRhbG9nX2dldF9wcml2KGF1eCk7CisJYmFzZSA9IGNhdGFsb2ctPmlv LT5kcF9hdXguYmFzZTsKKworCXJldHVybiBkcF9yZWFkKGJhc2UgKyBEUF9BVVhfREFUQSk7Citl bmQ6CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHBfY2F0YWxvZ19hdXhfd3JpdGVfZGF0 YShzdHJ1Y3QgZHBfY2F0YWxvZ19hdXggKmF1eCkKK3sKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBk cF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCisJaWYg KCFhdXgpIHsKKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKKwkJcmMgPSAtRUlOVkFMOwor CQlnb3RvIGVuZDsKKwl9CisKKwlkcF9jYXRhbG9nX2dldF9wcml2KGF1eCk7CisJYmFzZSA9IGNh dGFsb2ctPmlvLT5kcF9hdXguYmFzZTsKKworCWRwX3dyaXRlKGJhc2UgKyBEUF9BVVhfREFUQSwg YXV4LT5kYXRhKTsKK2VuZDoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgZHBfY2F0YWxv Z19hdXhfd3JpdGVfdHJhbnMoc3RydWN0IGRwX2NhdGFsb2dfYXV4ICphdXgpCit7CisJaW50IHJj ID0gMDsKKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOworCXZvaWQgX19pb21l bSAqYmFzZTsKKworCWlmICghYXV4KSB7CisJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7CisJ CXJjID0gLUVJTlZBTDsKKwkJZ290byBlbmQ7CisJfQorCisJZHBfY2F0YWxvZ19nZXRfcHJpdihh dXgpOworCWJhc2UgPSBjYXRhbG9nLT5pby0+ZHBfYXV4LmJhc2U7CisKKwlkcF93cml0ZShiYXNl ICsgRFBfQVVYX1RSQU5TX0NUUkwsIGF1eC0+ZGF0YSk7CitlbmQ6CisJcmV0dXJuIHJjOworfQor CitzdGF0aWMgaW50IGRwX2NhdGFsb2dfYXV4X2NsZWFyX3RyYW5zKHN0cnVjdCBkcF9jYXRhbG9n X2F1eCAqYXV4LCBib29sIHJlYWQpCit7CisJaW50IHJjID0gMDsKKwl1MzIgZGF0YSA9IDA7CisJ c3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKKwl2b2lkIF9faW9tZW0gKmJhc2U7 CisKKwlpZiAoIWF1eCkgeworCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOworCQlyYyA9IC1F SU5WQUw7CisJCWdvdG8gZW5kOworCX0KKworCWRwX2NhdGFsb2dfZ2V0X3ByaXYoYXV4KTsKKwli YXNlID0gY2F0YWxvZy0+aW8tPmRwX2F1eC5iYXNlOworCisJaWYgKHJlYWQpIHsKKwkJZGF0YSA9 IGRwX3JlYWQoYmFzZSArIERQX0FVWF9UUkFOU19DVFJMKTsKKwkJZGF0YSAmPSB+QklUKDkpOwor CQlkcF93cml0ZShiYXNlICsgRFBfQVVYX1RSQU5TX0NUUkwsIGRhdGEpOworCX0gZWxzZSB7CisJ CWRwX3dyaXRlKGJhc2UgKyBEUF9BVVhfVFJBTlNfQ1RSTCwgMCk7CisJfQorZW5kOgorCXJldHVy biByYzsKK30KKworc3RhdGljIHZvaWQgZHBfY2F0YWxvZ19hdXhfcmVzZXQoc3RydWN0IGRwX2Nh dGFsb2dfYXV4ICphdXgpCit7CisJdTMyIGF1eF9jdHJsOworCXN0cnVjdCBkcF9jYXRhbG9nX3By aXZhdGUgKmNhdGFsb2c7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCisJaWYgKCFhdXgpIHsKKwkJ cHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKKwkJcmV0dXJuOworCX0KKworCWRwX2NhdGFsb2df Z2V0X3ByaXYoYXV4KTsKKwliYXNlID0gY2F0YWxvZy0+aW8tPmRwX2F1eC5iYXNlOworCisJYXV4 X2N0cmwgPSBkcF9yZWFkKGJhc2UgKyBEUF9BVVhfQ1RSTCk7CisKKwlhdXhfY3RybCB8PSBCSVQo MSk7CisJZHBfd3JpdGUoYmFzZSArIERQX0FVWF9DVFJMLCBhdXhfY3RybCk7CisJdXNsZWVwX3Jh bmdlKDEwMDAsIDEwMTApOyAvKiBoL3cgcmVjb21tZW5kZWQgZGVsYXkgKi8KKworCWF1eF9jdHJs ICY9IH5CSVQoMSk7CisJZHBfd3JpdGUoYmFzZSArIERQX0FVWF9DVFJMLCBhdXhfY3RybCk7CisJ d21iKCk7Cit9CisKK3N0YXRpYyB2b2lkIGRwX2NhdGFsb2dfYXV4X2VuYWJsZShzdHJ1Y3QgZHBf Y2F0YWxvZ19hdXggKmF1eCwgYm9vbCBlbmFibGUpCit7CisJdTMyIGF1eF9jdHJsOworCXN0cnVj dCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCisJ aWYgKCFhdXgpIHsKKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKKwkJcmV0dXJuOworCX0K KworCWRwX2NhdGFsb2dfZ2V0X3ByaXYoYXV4KTsKKwliYXNlID0gY2F0YWxvZy0+aW8tPmRwX2F1 eC5iYXNlOworCisJYXV4X2N0cmwgPSBkcF9yZWFkKGJhc2UgKyBEUF9BVVhfQ1RSTCk7CisKKwlp ZiAoZW5hYmxlKSB7CisJCWRwX3dyaXRlKGJhc2UgKyBEUF9USU1FT1VUX0NPVU5ULCAweGZmZmYp OworCQlkcF93cml0ZShiYXNlICsgRFBfQVVYX0xJTUlUUywgMHhmZmZmKTsKKwkJYXV4X2N0cmwg fD0gQklUKDApOworCX0gZWxzZSB7CisJCWF1eF9jdHJsICY9IH5CSVQoMCk7CisJfQorCisJZHBf d3JpdGUoYmFzZSArIERQX0FVWF9DVFJMLCBhdXhfY3RybCk7Cit9CisKK3N0YXRpYyB2b2lkIGRw X2NhdGFsb2dfYXV4X3VwZGF0ZV9jZmcoc3RydWN0IGRwX2NhdGFsb2dfYXV4ICphdXgsCisJCXN0 cnVjdCBkcF9hdXhfY2ZnICpjZmcsIGVudW0gZHBfcGh5X2F1eF9jb25maWdfdHlwZSB0eXBlKQor eworCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7CisJdTMyIG5ld19pbmRleCA9 IDAsIGN1cnJlbnRfaW5kZXggPSAwOworCisJaWYgKCFhdXggfHwgIWNmZyB8fCAodHlwZSA+PSBQ SFlfQVVYX0NGR19NQVgpKSB7CisJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7CisJCXJldHVy bjsKKwl9CisKKwlkcF9jYXRhbG9nX2dldF9wcml2KGF1eCk7CisKKwljdXJyZW50X2luZGV4ID0g Y2ZnW3R5cGVdLmN1cnJlbnRfaW5kZXg7CisJbmV3X2luZGV4ID0gKGN1cnJlbnRfaW5kZXggKyAx KSAlIGNmZ1t0eXBlXS5jZmdfY250OworCXByX2RlYnVnKCJVcGRhdGluZyAlcyBmcm9tIDB4JTA4 eCB0byAweCUwOHhcbiIsCisJCWRwX3BoeV9hdXhfY29uZmlnX3R5cGVfdG9fc3RyaW5nKHR5cGUp LAorCWNmZ1t0eXBlXS5sdXRbY3VycmVudF9pbmRleF0sIGNmZ1t0eXBlXS5sdXRbbmV3X2luZGV4 XSk7CisKKwlkcF93cml0ZShjYXRhbG9nLT5pby0+cGh5X2lvLmJhc2UgKyBjZmdbdHlwZV0ub2Zm c2V0LAorCQkJY2ZnW3R5cGVdLmx1dFtuZXdfaW5kZXhdKTsKKwljZmdbdHlwZV0uY3VycmVudF9p bmRleCA9IG5ld19pbmRleDsKK30KKworc3RhdGljIHZvaWQgZHBfY2F0YWxvZ19hdXhfc2V0dXAo c3RydWN0IGRwX2NhdGFsb2dfYXV4ICphdXgsCisJCXN0cnVjdCBkcF9hdXhfY2ZnICpjZmcpCit7 CisJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKKwlpbnQgaSA9IDA7CisKKwlp ZiAoIWF1eCB8fCAhY2ZnKSB7CisJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7CisJCXJldHVy bjsKKwl9CisKKwlkcF9jYXRhbG9nX2dldF9wcml2KGF1eCk7CisKKwlkcF93cml0ZShjYXRhbG9n LT5pby0+cGh5X2lvLmJhc2UgKyBEUF9QSFlfUERfQ1RMLCAweDY1KTsKKwl3bWIoKTsgLyogbWFr ZSBzdXJlIFBEIHByb2dyYW1taW5nIGhhcHBlbmVkICovCisKKwkvKiBUdXJuIG9uIEJJQVMgY3Vy cmVudCBmb3IgUEhZL1BMTCAqLworCWRwX3dyaXRlKGNhdGFsb2ctPmlvLT5kcF9wbGxfaW8uYmFz ZSArCisJCVFTRVJERVNfQ09NX0JJQVNfRU5fQ0xLQlVGTFJfRU4sIDB4MWIpOworCisJLyogRFAg QVVYIENGRyByZWdpc3RlciBwcm9ncmFtbWluZyAqLworCWZvciAoaSA9IDA7IGkgPCBQSFlfQVVY X0NGR19NQVg7IGkrKykgeworCQlwcl9kZWJ1ZygiJXM6IG9mZnNldD0weCUwOHgsIHZhbHVlPTB4 JTA4eFxuIiwKKwkJCWRwX3BoeV9hdXhfY29uZmlnX3R5cGVfdG9fc3RyaW5nKGkpLAorCQkJY2Zn W2ldLm9mZnNldCwgY2ZnW2ldLmx1dFtjZmdbaV0uY3VycmVudF9pbmRleF0pOworCQlkcF93cml0 ZShjYXRhbG9nLT5pby0+cGh5X2lvLmJhc2UgKyBjZmdbaV0ub2Zmc2V0LAorCQkJY2ZnW2ldLmx1 dFtjZmdbaV0uY3VycmVudF9pbmRleF0pOworCX0KKworCWRwX3dyaXRlKGNhdGFsb2ctPmlvLT5w aHlfaW8uYmFzZSArIERQX1BIWV9BVVhfSU5URVJSVVBUX01BU0ssIDB4MUYpOworfQorCitzdGF0 aWMgdm9pZCBkcF9jYXRhbG9nX2F1eF9nZXRfaXJxKHN0cnVjdCBkcF9jYXRhbG9nX2F1eCAqYXV4 LCBib29sIGNtZF9idXN5KQoreworCXUzMiBhY2s7CisJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0 ZSAqY2F0YWxvZzsKKwl2b2lkIF9faW9tZW0gKmFoYl9iYXNlOworCisJaWYgKCFhdXgpIHsKKwkJ cHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKKwkJcmV0dXJuOworCX0KKworCWRwX2NhdGFsb2df Z2V0X3ByaXYoYXV4KTsKKwlhaGJfYmFzZSA9IGNhdGFsb2ctPmlvLT5kcF9haGIuYmFzZTsKKwor CWF1eC0+aXNyID0gZHBfcmVhZChhaGJfYmFzZSArIERQX0lOVFJfU1RBVFVTKTsKKwlhdXgtPmlz ciAmPSB+RFBfSU5UUl9NQVNLMTsKKwlhY2sgPSBhdXgtPmlzciAmIERQX0lOVEVSUlVQVF9TVEFU VVMxOworCWFjayA8PD0gMTsKKwlhY2sgfD0gRFBfSU5UUl9NQVNLMTsKKwlkcF93cml0ZShhaGJf YmFzZSArIERQX0lOVFJfU1RBVFVTLCBhY2spOworfQorCisvKiBjb250cm9sbGVyIHJlbGF0ZWQg Y2F0YWxvZyBmdW5jdGlvbnMgKi8KK3N0YXRpYyB2b2lkIGRwX2NhdGFsb2dfY3RybF91cGRhdGVf dHJhbnNmZXJfdW5pdChzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsKQoreworCXN0cnVjdCBk cF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCisJaWYg KCFjdHJsKSB7CisJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7CisJCXJldHVybjsKKwl9CisK KwlkcF9jYXRhbG9nX2dldF9wcml2KGN0cmwpOworCWJhc2UgPSBjYXRhbG9nLT5pby0+ZHBfbGlu ay5iYXNlOworCisJZHBfd3JpdGUoYmFzZSArIERQX1ZBTElEX0JPVU5EQVJZLCBjdHJsLT52YWxp ZF9ib3VuZGFyeSk7CisJZHBfd3JpdGUoYmFzZSArIERQX1RVLCBjdHJsLT5kcF90dSk7CisJZHBf d3JpdGUoYmFzZSArIERQX1ZBTElEX0JPVU5EQVJZXzIsIGN0cmwtPnZhbGlkX2JvdW5kYXJ5Mik7 Cit9CisKK3N0YXRpYyB2b2lkIGRwX2NhdGFsb2dfY3RybF9zdGF0ZV9jdHJsKHN0cnVjdCBkcF9j YXRhbG9nX2N0cmwgKmN0cmwsIHUzMiBzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2 YXRlICpjYXRhbG9nOworCXZvaWQgX19pb21lbSAqYmFzZTsKKworCWlmICghY3RybCkgeworCQlw cl9lcnIoImludmFsaWQgaW5wdXRcbiIpOworCQlyZXR1cm47CisJfQorCisJZHBfY2F0YWxvZ19n ZXRfcHJpdihjdHJsKTsKKwliYXNlID0gY2F0YWxvZy0+aW8tPmRwX2xpbmsuYmFzZTsKKworCWRw X3dyaXRlKGJhc2UgKyBEUF9TVEFURV9DVFJMLCBzdGF0ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGRw X2NhdGFsb2dfY3RybF9jb25maWdfY3RybChzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsLCB1 MzIgY2ZnKQoreworCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7CisJdm9pZCBf X2lvbWVtICpsaW5rX2Jhc2U7CisKKwlpZiAoIWN0cmwpIHsKKwkJcHJfZXJyKCJpbnZhbGlkIGlu cHV0XG4iKTsKKwkJcmV0dXJuOworCX0KKworCWRwX2NhdGFsb2dfZ2V0X3ByaXYoY3RybCk7CisJ bGlua19iYXNlID0gY2F0YWxvZy0+aW8tPmRwX2xpbmsuYmFzZTsKKworCXByX2RlYnVnKCJEUF9D T05GSUdVUkFUSU9OX0NUUkw9MHgleFxuIiwgY2ZnKTsKKworCWRwX3dyaXRlKGxpbmtfYmFzZSAr IERQX0NPTkZJR1VSQVRJT05fQ1RSTCwgY2ZnKTsKK30KKworc3RhdGljIHZvaWQgZHBfY2F0YWxv Z19jdHJsX2xhbmVfbWFwcGluZyhzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsKQoreworCXN0 cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7CisJdm9pZCBfX2lvbWVtICpiYXNlOwor CisJaWYgKCFjdHJsKSB7CisJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7CisJCXJldHVybjsK Kwl9CisKKwlkcF9jYXRhbG9nX2dldF9wcml2KGN0cmwpOworCWJhc2UgPSBjYXRhbG9nLT5pby0+ ZHBfbGluay5iYXNlOworCisJZHBfd3JpdGUoYmFzZSArIERQX0xPR0lDQUwyUEhZU0lDQUxfTEFO RV9NQVBQSU5HLCAweGU0KTsKK30KKworc3RhdGljIHZvaWQgZHBfY2F0YWxvZ19jdHJsX21haW5s aW5rX2N0cmwoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCwKKwkJCQkJCWJvb2wgZW5hYmxl KQoreworCXUzMiBtYWlubGlua19jdHJsOworCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNh dGFsb2c7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCisJaWYgKCFjdHJsKSB7CisJCXByX2Vycigi aW52YWxpZCBpbnB1dFxuIik7CisJCXJldHVybjsKKwl9CisKKwlkcF9jYXRhbG9nX2dldF9wcml2 KGN0cmwpOworCWJhc2UgPSBjYXRhbG9nLT5pby0+ZHBfbGluay5iYXNlOworCisJaWYgKGVuYWJs ZSkgeworCQlkcF93cml0ZShiYXNlICsgRFBfTUFJTkxJTktfQ1RSTCwgMHgwMjAwMDAwMCk7CisJ CXdtYigpOyAvKiBtYWtlIHN1cmUgbWFpbmxpbmsgaXMgdHVybmVkIG9mZiBiZWZvcmUgcmVzZXQg Ki8KKwkJZHBfd3JpdGUoYmFzZSArIERQX01BSU5MSU5LX0NUUkwsIDB4MDIwMDAwMDIpOworCQl3 bWIoKTsgLyogbWFrZSBzdXJlIG1haW5saW5rIGVudGVyZWQgcmVzZXQgKi8KKwkJZHBfd3JpdGUo YmFzZSArIERQX01BSU5MSU5LX0NUUkwsIDB4MDIwMDAwMDApOworCQl3bWIoKTsgLyogbWFrZSBz dXJlIG1haW5saW5rIHJlc2V0IGRvbmUgKi8KKwkJZHBfd3JpdGUoYmFzZSArIERQX01BSU5MSU5L X0NUUkwsIDB4MDIwMDAwMDEpOworCQl3bWIoKTsgLyogbWFrZSBzdXJlIG1haW5saW5rIHR1cm5l ZCBvbiAqLworCX0gZWxzZSB7CisJCW1haW5saW5rX2N0cmwgPSBkcF9yZWFkKGJhc2UgKyBEUF9N QUlOTElOS19DVFJMKTsKKwkJbWFpbmxpbmtfY3RybCAmPSB+QklUKDApOworCQlkcF93cml0ZShi YXNlICsgRFBfTUFJTkxJTktfQ1RSTCwgbWFpbmxpbmtfY3RybCk7CisJfQorfQorCitzdGF0aWMg dm9pZCBkcF9jYXRhbG9nX2N0cmxfY29uZmlnX21pc2Moc3RydWN0IGRwX2NhdGFsb2dfY3RybCAq Y3RybCwKKwkJCQkJdTMyIGNjLCB1MzIgdGIpCit7CisJdTMyIG1pc2NfdmFsOworCXN0cnVjdCBk cF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCisJaWYg KCFjdHJsKSB7CisJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7CisJCXJldHVybjsKKwl9CisK KwlkcF9jYXRhbG9nX2dldF9wcml2KGN0cmwpOworCWJhc2UgPSBjYXRhbG9nLT5pby0+ZHBfbGlu ay5iYXNlOworCisJbWlzY192YWwgPSBkcF9yZWFkKGJhc2UgKyBEUF9NSVNDMV9NSVNDMCk7CisJ bWlzY192YWwgfD0gY2M7CisJbWlzY192YWwgfD0gKHRiIDw8IDUpOworCW1pc2NfdmFsIHw9IEJJ VCgwKTsgLyogQ29uZmlndXJlIGNsb2NrIHRvIHN5bmNocm9ub3VzIG1vZGUgKi8KKworCXByX2Rl YnVnKCJtaXNjIHNldHRpbmdzID0gMHgleFxuIiwgbWlzY192YWwpOworCWRwX3dyaXRlKGJhc2Ug KyBEUF9NSVNDMV9NSVNDMCwgbWlzY192YWwpOworfQorCitzdGF0aWMgdm9pZCBkcF9jYXRhbG9n X2N0cmxfY29uZmlnX21zYShzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsLAorCQkJCQl1MzIg cmF0ZSwgdTMyIHN0cmVhbV9yYXRlX2toeiwKKwkJCQkJYm9vbCBmaXhlZF9udmlkKQoreworCXUz MiBwaXhlbF9tLCBwaXhlbF9uOworCXUzMiBtdmlkLCBudmlkOworCXU2NCBtdmlkX2NhbGM7CisJ dTMyIGNvbnN0IG52aWRfZml4ZWQgPSAweDgwMDA7CisJdTMyIGNvbnN0IGxpbmtfcmF0ZV9oYnIy ID0gNTQwMDAwOworCXUzMiBjb25zdCBsaW5rX3JhdGVfaGJyMyA9IDgxMDAwMDsKKwlzdHJ1Y3Qg ZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOworCXZvaWQgX19pb21lbSAqYmFzZV9jYywgKmJh c2VfY3RybDsKKworCWlmICghY3RybCkgeworCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwor CQlyZXR1cm47CisJfQorCisJZHBfY2F0YWxvZ19nZXRfcHJpdihjdHJsKTsKKwlpZiAoZml4ZWRf bnZpZCkgeworCQlwcl9kZWJ1ZygidXNlIGZpeGVkIE5WSUQ9MHgleFxuIiwgbnZpZF9maXhlZCk7 CisJCW52aWQgPSBudmlkX2ZpeGVkOworCisJCXByX2RlYnVnKCJsaW5rIHJhdGU9JWRrYnBzLCBz dHJlYW1fcmF0ZV9raHo9JXVLaHoiLAorCQkJcmF0ZSwgc3RyZWFtX3JhdGVfa2h6KTsKKworCQkv KgorCQkgKiBGb3IgaW50ZXJtZWRpYXRlIHJlc3VsdHMsIHVzZSA2NCBiaXQgYXJpdGhtZXRpYyB0 byBhdm9pZAorCQkgKiBsb3NzIG9mIHByZWNpc2lvbi4KKwkJICovCisJCW12aWRfY2FsYyA9ICh1 NjQpIHN0cmVhbV9yYXRlX2toeiAqIG52aWQ7CisJCW12aWRfY2FsYyA9IGRpdl91NjQobXZpZF9j YWxjLCByYXRlKTsKKworCQkvKgorCQkgKiB0cnVuY2F0ZSBiYWNrIHRvIDMyIGJpdHMgYXMgdGhp cyBmaW5hbCBkaXZpZGVkIHZhbHVlIHdpbGwKKwkJICogYWx3YXlzIGJlIHdpdGhpbiB0aGUgcmFu Z2Ugb2YgYSAzMiBiaXQgdW5zaWduZWQgaW50LgorCQkgKi8KKwkJbXZpZCA9ICh1MzIpIG12aWRf Y2FsYzsKKwl9IGVsc2UgeworCQliYXNlX2NjID0gY2F0YWxvZy0+aW8tPmRwX2NjX2lvLmJhc2U7 CisKKwkJcGl4ZWxfbSA9IGRwX3JlYWQoYmFzZV9jYyArIE1NU1NfRFBfUElYRUxfTSk7CisJCXBp eGVsX24gPSBkcF9yZWFkKGJhc2VfY2MgKyBNTVNTX0RQX1BJWEVMX04pOworCQlwcl9kZWJ1Zygi cGl4ZWxfbT0weCV4LCBwaXhlbF9uPTB4JXhcbiIsIHBpeGVsX20sIHBpeGVsX24pOworCisJCW12 aWQgPSAocGl4ZWxfbSAmIDB4RkZGRikgKiA1OworCQludmlkID0gKDB4RkZGRiAmICh+cGl4ZWxf bikpICsgKHBpeGVsX20gJiAweEZGRkYpOworCisJCXByX2RlYnVnKCJyYXRlID0gJWRcbiIsIHJh dGUpOworCisJCWlmIChsaW5rX3JhdGVfaGJyMiA9PSByYXRlKQorCQkJbnZpZCAqPSAyOworCisJ CWlmIChsaW5rX3JhdGVfaGJyMyA9PSByYXRlKQorCQkJbnZpZCAqPSAzOworCX0KKworCWJhc2Vf Y3RybCA9IGNhdGFsb2ctPmlvLT5kcF9saW5rLmJhc2U7CisJcHJfZGVidWcoIm12aWQ9MHgleCwg bnZpZD0weCV4XG4iLCBtdmlkLCBudmlkKTsKKwlkcF93cml0ZShiYXNlX2N0cmwgKyBEUF9TT0ZU V0FSRV9NVklELCBtdmlkKTsKKwlkcF93cml0ZShiYXNlX2N0cmwgKyBEUF9TT0ZUV0FSRV9OVklE LCBudmlkKTsKK30KKworc3RhdGljIHZvaWQgZHBfY2F0YWxvZ19jdHJsX3NldF9wYXR0ZXJuKHN0 cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwsCisJCQkJCXUzMiBwYXR0ZXJuKQoreworCWludCBi aXQsIGNudCA9IDEwOworCXUzMiBkYXRhOworCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNh dGFsb2c7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCisJaWYgKCFjdHJsKSB7CisJCXByX2Vycigi aW52YWxpZCBpbnB1dFxuIik7CisJCXJldHVybjsKKwl9CisKKwlkcF9jYXRhbG9nX2dldF9wcml2 KGN0cmwpOworCWJhc2UgPSBjYXRhbG9nLT5pby0+ZHBfbGluay5iYXNlOworCisJYml0ID0gMTsK KwliaXQgPDw9IChwYXR0ZXJuIC0gMSk7CisJcHJfZGVidWcoImh3OiBiaXQ9JWQgdHJhaW49JWRc biIsIGJpdCwgcGF0dGVybik7CisJZHBfd3JpdGUoYmFzZSArIERQX1NUQVRFX0NUUkwsIGJpdCk7 CisKKwliaXQgPSA4OworCWJpdCA8PD0gKHBhdHRlcm4gLSAxKTsKKworCXdoaWxlIChjbnQtLSkg eworCQlkYXRhID0gZHBfcmVhZChiYXNlICsgRFBfTUFJTkxJTktfUkVBRFkpOworCQlpZiAoZGF0 YSAmIGJpdCkKKwkJCWJyZWFrOworCX0KKworCWlmIChjbnQgPT0gMCkKKwkJcHJfZXJyKCJzZXQg bGlua190cmFpbj0lZCBmYWlsZWRcbiIsIHBhdHRlcm4pOworfQorCitzdGF0aWMgdm9pZCBkcF9j YXRhbG9nX2N0cmxfdXNiX3Jlc2V0KHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwsIGJvb2wg ZmxpcCkKK3sKKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOworCXZvaWQgX19p b21lbSAqYmFzZTsKKworCWlmICghY3RybCkgeworCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIp OworCQlyZXR1cm47CisJfQorCisJZHBfY2F0YWxvZ19nZXRfcHJpdihjdHJsKTsKKworCWJhc2Ug PSBjYXRhbG9nLT5pby0+dXNiM19kcF9jb20uYmFzZTsKKworCWRwX3dyaXRlKGJhc2UgKyBVU0Iz X0RQX0NPTV9SRVNFVF9PVlJEX0NUUkwsIDB4MGEpOworCWRwX3dyaXRlKGJhc2UgKyBVU0IzX0RQ X0NPTV9QSFlfTU9ERV9DVFJMLCAweDAyKTsKKwlkcF93cml0ZShiYXNlICsgVVNCM19EUF9DT01f U1dfUkVTRVQsIDB4MDEpOworCS8qIG1ha2Ugc3VyZSB1c2IzIGNvbSBwaHkgc29mdHdhcmUgcmVz ZXQgaXMgZG9uZSAqLworCXdtYigpOworCisJaWYgKCFmbGlwKSAvKiBDQzEgKi8KKwkJZHBfd3Jp dGUoYmFzZSArIFVTQjNfRFBfQ09NX1RZUEVDX0NUUkwsIDB4MDIpOworCWVsc2UgLyogQ0MyICov CisJCWRwX3dyaXRlKGJhc2UgKyBVU0IzX0RQX0NPTV9UWVBFQ19DVFJMLCAweDAzKTsKKworCWRw X3dyaXRlKGJhc2UgKyBVU0IzX0RQX0NPTV9TV0lfQ1RSTCwgMHgwMCk7CisJZHBfd3JpdGUoYmFz ZSArIFVTQjNfRFBfQ09NX1NXX1JFU0VULCAweDAwKTsKKwkvKiBtYWtlIHN1cmUgdGhlIHNvZnR3 YXJlIHJlc2V0IGlzIGRvbmUgKi8KKwl3bWIoKTsKKworCWRwX3dyaXRlKGJhc2UgKyBVU0IzX0RQ X0NPTV9QT1dFUl9ET1dOX0NUUkwsIDB4MDEpOworCWRwX3dyaXRlKGJhc2UgKyBVU0IzX0RQX0NP TV9SRVNFVF9PVlJEX0NUUkwsIDB4MDApOworCS8qIG1ha2Ugc3VyZSBwaHkgaXMgYnJvdWdodCBv dXQgb2YgcmVzZXQgKi8KKwl3bWIoKTsKKworfQorCitzdGF0aWMgdm9pZCBkcF9jYXRhbG9nX3Bh bmVsX3RwZ19jZmcoc3RydWN0IGRwX2NhdGFsb2dfcGFuZWwgKnBhbmVsLAorCWJvb2wgZW5hYmxl KQoreworCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7CisJdm9pZCBfX2lvbWVt ICpiYXNlOworCisJaWYgKCFwYW5lbCkgeworCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwor CQlyZXR1cm47CisJfQorCisJZHBfY2F0YWxvZ19nZXRfcHJpdihwYW5lbCk7CisJYmFzZSA9IGNh dGFsb2ctPmlvLT5kcF9wMC5iYXNlOworCisJaWYgKCFlbmFibGUpIHsKKwkJZHBfd3JpdGUoYmFz ZSArIE1NU1NfRFBfVFBHX01BSU5fQ09OVFJPTCwgMHgwKTsKKwkJZHBfd3JpdGUoYmFzZSArIE1N U1NfRFBfQklTVF9FTkFCTEUsIDB4MCk7CisJCWRwX3dyaXRlKGJhc2UgKyBNTVNTX0RQX1RJTUlO R19FTkdJTkVfRU4sIDB4MCk7CisJCXdtYigpOyAvKiBlbnN1cmUgVGltaW5nIGdlbmVyYXRvciBp cyB0dXJuZWQgb2ZmICovCisJCXJldHVybjsKKwl9CisKKwlkcF93cml0ZShiYXNlICsgTU1TU19E UF9JTlRGX0NPTkZJRywgMHgwKTsKKwlkcF93cml0ZShiYXNlICsgTU1TU19EUF9JTlRGX0hTWU5D X0NUTCwgcGFuZWwtPmhzeW5jX2N0bCk7CisJZHBfd3JpdGUoYmFzZSArIE1NU1NfRFBfSU5URl9W U1lOQ19QRVJJT0RfRjAsIHBhbmVsLT52c3luY19wZXJpb2QgKgorCQkJcGFuZWwtPmhzeW5jX3Bl cmlvZCk7CisJZHBfd3JpdGUoYmFzZSArIE1NU1NfRFBfSU5URl9WU1lOQ19QVUxTRV9XSURUSF9G MCwgcGFuZWwtPnZfc3luY193aWR0aCAqCisJCQlwYW5lbC0+aHN5bmNfcGVyaW9kKTsKKwlkcF93 cml0ZShiYXNlICsgTU1TU19EUF9JTlRGX1ZTWU5DX1BFUklPRF9GMSwgMCk7CisJZHBfd3JpdGUo YmFzZSArIE1NU1NfRFBfSU5URl9WU1lOQ19QVUxTRV9XSURUSF9GMSwgMCk7CisJZHBfd3JpdGUo YmFzZSArIE1NU1NfRFBfSU5URl9ESVNQTEFZX0hDVEwsIHBhbmVsLT5kaXNwbGF5X2hjdGwpOwor CWRwX3dyaXRlKGJhc2UgKyBNTVNTX0RQX0lOVEZfQUNUSVZFX0hDVEwsIDApOworCWRwX3dyaXRl KGJhc2UgKyBNTVNTX0lOVEZfRElTUExBWV9WX1NUQVJUX0YwLCBwYW5lbC0+ZGlzcGxheV92X3N0 YXJ0KTsKKwlkcF93cml0ZShiYXNlICsgTU1TU19EUF9JTlRGX0RJU1BMQVlfVl9FTkRfRjAsIHBh bmVsLT5kaXNwbGF5X3ZfZW5kKTsKKwlkcF93cml0ZShiYXNlICsgTU1TU19JTlRGX0RJU1BMQVlf Vl9TVEFSVF9GMSwgMCk7CisJZHBfd3JpdGUoYmFzZSArIE1NU1NfRFBfSU5URl9ESVNQTEFZX1Zf RU5EX0YxLCAwKTsKKwlkcF93cml0ZShiYXNlICsgTU1TU19EUF9JTlRGX0FDVElWRV9WX1NUQVJU X0YwLCAwKTsKKwlkcF93cml0ZShiYXNlICsgTU1TU19EUF9JTlRGX0FDVElWRV9WX0VORF9GMCwg MCk7CisJZHBfd3JpdGUoYmFzZSArIE1NU1NfRFBfSU5URl9BQ1RJVkVfVl9TVEFSVF9GMSwgMCk7 CisJZHBfd3JpdGUoYmFzZSArIE1NU1NfRFBfSU5URl9BQ1RJVkVfVl9FTkRfRjEsIDApOworCWRw X3dyaXRlKGJhc2UgKyBNTVNTX0RQX0lOVEZfUE9MQVJJVFlfQ1RMLCAwKTsKKwl3bWIoKTsgLyog ZW5zdXJlIFRQRyByZWdpc3RlcnMgYXJlIHByb2dyYW1tZWQgKi8KKworCWRwX3dyaXRlKGJhc2Ug KyBNTVNTX0RQX1RQR19NQUlOX0NPTlRST0wsIDB4MTAwKTsKKwlkcF93cml0ZShiYXNlICsgTU1T U19EUF9UUEdfVklERU9fQ09ORklHLCAweDUpOworCXdtYigpOyAvKiBlbnN1cmUgVFBHIGNvbmZp ZyBpcyBwcm9ncmFtbWVkICovCisJZHBfd3JpdGUoYmFzZSArIE1NU1NfRFBfQklTVF9FTkFCTEUs IDB4MSk7CisJZHBfd3JpdGUoYmFzZSArIE1NU1NfRFBfVElNSU5HX0VOR0lORV9FTiwgMHgxKTsK Kwl3bWIoKTsgLyogZW5zdXJlIFRpbWluZyBnZW5lcmF0b3IgaXMgdHVybmVkIG9uICovCisJcHJf ZGVidWcoIiVzOiBlbmFibGVkIHRwZ1xuIiwgX19mdW5jX18pOworfQorCitzdGF0aWMgdm9pZCBk cF9jYXRhbG9nX2N0cmxfcmVzZXQoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCkKK3sKKwl1 MzIgc3dfcmVzZXQ7CisJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKKwl2b2lk IF9faW9tZW0gKmJhc2U7CisKKwlpZiAoIWN0cmwpIHsKKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0 XG4iKTsKKwkJcmV0dXJuOworCX0KKworCWRwX2NhdGFsb2dfZ2V0X3ByaXYoY3RybCk7CisJYmFz ZSA9IGNhdGFsb2ctPmlvLT5kcF9haGIuYmFzZTsKKworCXN3X3Jlc2V0ID0gZHBfcmVhZChiYXNl ICsgRFBfU1dfUkVTRVQpOworCisJc3dfcmVzZXQgfD0gQklUKDApOworCWRwX3dyaXRlKGJhc2Ug KyBEUF9TV19SRVNFVCwgc3dfcmVzZXQpOworCXVzbGVlcF9yYW5nZSgxMDAwLCAxMDEwKTsgLyog aC93IHJlY29tbWVuZGVkIGRlbGF5ICovCisKKwlzd19yZXNldCAmPSB+QklUKDApOworCWRwX3dy aXRlKGJhc2UgKyBEUF9TV19SRVNFVCwgc3dfcmVzZXQpOworfQorCitzdGF0aWMgYm9vbCBkcF9j YXRhbG9nX2N0cmxfbWFpbmxpbmtfcmVhZHkoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCkK K3sKKwl1MzIgZGF0YTsKKwlpbnQgY250ID0gMTA7CisJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0 ZSAqY2F0YWxvZzsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisKKwlpZiAoIWN0cmwpIHsKKwkJcHJf ZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKKwkJZ290byBlbmQ7CisJfQorCisJZHBfY2F0YWxvZ19n ZXRfcHJpdihjdHJsKTsKKwliYXNlID0gY2F0YWxvZy0+aW8tPmRwX2xpbmsuYmFzZTsKKworCXdo aWxlICgtLWNudCkgeworCQkvKiBEUF9NQUlOTElOS19SRUFEWSAqLworCQlkYXRhID0gZHBfcmVh ZChiYXNlICsgRFBfTUFJTkxJTktfUkVBRFkpOworCQlpZiAoZGF0YSAmIEJJVCgwKSkKKwkJCXJl dHVybiB0cnVlOworCisJCXVzbGVlcF9yYW5nZSgxMDAwLCAxMDEwKTsgLyogMW1zIHdhaXQgYmVm b3JlIG5leHQgcmVnIHJlYWQgKi8KKwl9CisJcHJfZXJyKCJtYWlubGluayBub3QgcmVhZHlcbiIp OworZW5kOgorCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgZHBfY2F0YWxvZ19jdHJs X2VuYWJsZV9pcnEoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCwKKwkJCQkJCWJvb2wgZW5h YmxlKQoreworCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7CisJdm9pZCBfX2lv bWVtICpiYXNlOworCisJaWYgKCFjdHJsKSB7CisJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7 CisJCXJldHVybjsKKwl9CisKKwlkcF9jYXRhbG9nX2dldF9wcml2KGN0cmwpOworCWJhc2UgPSBj YXRhbG9nLT5pby0+ZHBfYWhiLmJhc2U7CisKKwlpZiAoZW5hYmxlKSB7CisJCWRwX3dyaXRlKGJh c2UgKyBEUF9JTlRSX1NUQVRVUywgRFBfSU5UUl9NQVNLMSk7CisJCWRwX3dyaXRlKGJhc2UgKyBE UF9JTlRSX1NUQVRVUzIsIERQX0lOVFJfTUFTSzIpOworCX0gZWxzZSB7CisJCWRwX3dyaXRlKGJh c2UgKyBEUF9JTlRSX1NUQVRVUywgMHgwMCk7CisJCWRwX3dyaXRlKGJhc2UgKyBEUF9JTlRSX1NU QVRVUzIsIDB4MDApOworCX0KK30KKworc3RhdGljIHZvaWQgZHBfY2F0YWxvZ19jdHJsX2hwZF9j b25maWcoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCwgYm9vbCBlbikKK3sKKwlzdHJ1Y3Qg ZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOworCXZvaWQgX19pb21lbSAqYmFzZTsKKworCWlm ICghY3RybCkgeworCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOworCQlyZXR1cm47CisJfQor CisJZHBfY2F0YWxvZ19nZXRfcHJpdihjdHJsKTsKKwliYXNlID0gY2F0YWxvZy0+aW8tPmRwX2F1 eC5iYXNlOworCisJaWYgKGVuKSB7CisJCXUzMiByZWZ0aW1lciA9IGRwX3JlYWQoYmFzZSArIERQ X0RQX0hQRF9SRUZUSU1FUik7CisKKwkJZHBfd3JpdGUoYmFzZSArIERQX0RQX0hQRF9JTlRfQUNL LCAweEYpOworCQlkcF93cml0ZShiYXNlICsgRFBfRFBfSFBEX0lOVF9NQVNLLCAweEYpOworCisJ CS8qIEVuYWJsaW5nIFJFRlRJTUVSICovCisJCXJlZnRpbWVyIHw9IEJJVCgxNik7CisJCWRwX3dy aXRlKGJhc2UgKyBEUF9EUF9IUERfUkVGVElNRVIsIDB4Rik7CisJCS8qIEVuYWJsZSBIUEQgKi8K KwkJZHBfd3JpdGUoYmFzZSArIERQX0RQX0hQRF9DVFJMLCAweDEpOworCX0gZWxzZSB7CisJCS8q RGlzYWJsZSBIUEQgKi8KKwkJZHBfd3JpdGUoYmFzZSArIERQX0RQX0hQRF9DVFJMLCAweDApOwor CX0KK30KKworc3RhdGljIHZvaWQgZHBfY2F0YWxvZ19jdHJsX2dldF9pbnRlcnJ1cHQoc3RydWN0 IGRwX2NhdGFsb2dfY3RybCAqY3RybCkKK3sKKwl1MzIgYWNrID0gMDsKKwlzdHJ1Y3QgZHBfY2F0 YWxvZ19wcml2YXRlICpjYXRhbG9nOworCXZvaWQgX19pb21lbSAqYmFzZTsKKworCWlmICghY3Ry bCkgeworCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOworCQlyZXR1cm47CisJfQorCisJZHBf Y2F0YWxvZ19nZXRfcHJpdihjdHJsKTsKKwliYXNlID0gY2F0YWxvZy0+aW8tPmRwX2FoYi5iYXNl OworCisJY3RybC0+aXNyID0gZHBfcmVhZChiYXNlICsgRFBfSU5UUl9TVEFUVVMyKTsKKwljdHJs LT5pc3IgJj0gfkRQX0lOVFJfTUFTSzI7CisJYWNrID0gY3RybC0+aXNyICYgRFBfSU5URVJSVVBU X1NUQVRVUzI7CisJYWNrIDw8PSAxOworCWFjayB8PSBEUF9JTlRSX01BU0syOworCWRwX3dyaXRl KGJhc2UgKyBEUF9JTlRSX1NUQVRVUzIsIGFjayk7Cit9CisKK3N0YXRpYyB2b2lkIGRwX2NhdGFs b2dfY3RybF9waHlfcmVzZXQoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCkKK3sKKwlzdHJ1 Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOworCXZvaWQgX19pb21lbSAqYmFzZTsKKwor CWlmICghY3RybCkgeworCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOworCQlyZXR1cm47CisJ fQorCisJZHBfY2F0YWxvZ19nZXRfcHJpdihjdHJsKTsKKwliYXNlID0gY2F0YWxvZy0+aW8tPmRw X2FoYi5iYXNlOworCisJZHBfd3JpdGUoYmFzZSArIERQX1BIWV9DVFJMLCAweDUpOyAvKiBiaXQg MCAmIDIgKi8KKwl1c2xlZXBfcmFuZ2UoMTAwMCwgMTAxMCk7IC8qIGgvdyByZWNvbW1lbmRlZCBk ZWxheSAqLworCWRwX3dyaXRlKGJhc2UgKyBEUF9QSFlfQ1RSTCwgMHgwKTsKKwl3bWIoKTsgLyog bWFrZSBzdXJlIFBIWSByZXNldCBkb25lICovCit9CisKK3N0YXRpYyB2b2lkIGRwX2NhdGFsb2df Y3RybF9waHlfbGFuZV9jZmcoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCwKKwkJYm9vbCBm bGlwcGVkLCB1OCBsbl9jbnQpCit7CisJdTMyIGluZm8gPSAweDA7CisJc3RydWN0IGRwX2NhdGFs b2dfcHJpdmF0ZSAqY2F0YWxvZzsKKwl1OCBvcmllbnRhdGlvbiA9IEJJVCghIWZsaXBwZWQpOwor CisJaWYgKCFjdHJsKSB7CisJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7CisJCXJldHVybjsK Kwl9CisKKwlkcF9jYXRhbG9nX2dldF9wcml2KGN0cmwpOworCisJaW5mbyB8PSAobG5fY250ICYg MHgwRik7CisJaW5mbyB8PSAoKG9yaWVudGF0aW9uICYgMHgwRikgPDwgNCk7CisJcHJfZGVidWco IlNoYXJlZCBJbmZvID0gMHgleFxuIiwgaW5mbyk7CisKKwlkcF93cml0ZShjYXRhbG9nLT5pby0+ cGh5X2lvLmJhc2UgKyBEUF9QSFlfU1BBUkUwLCBpbmZvKTsKK30KKworc3RhdGljIHZvaWQgZHBf Y2F0YWxvZ19jdHJsX3VwZGF0ZV92eF9weChzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsLAor CQl1OCB2X2xldmVsLCB1OCBwX2xldmVsKQoreworCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUg KmNhdGFsb2c7CisJdm9pZCBfX2lvbWVtICpiYXNlMCwgKmJhc2UxOworCXU4IHZhbHVlMCwgdmFs dWUxOworCisJaWYgKCFjdHJsKSB7CisJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7CisJCXJl dHVybjsKKwl9CisKKwlkcF9jYXRhbG9nX2dldF9wcml2KGN0cmwpOworCWJhc2UwID0gY2F0YWxv Zy0+aW8tPmxuX3R4MF9pby5iYXNlOworCWJhc2UxID0gY2F0YWxvZy0+aW8tPmxuX3R4MV9pby5i YXNlOworCisJcHJfZGVidWcoImh3OiB2PSVkIHA9JWRcbiIsIHZfbGV2ZWwsIHBfbGV2ZWwpOwor CisJdmFsdWUwID0gdm1fdm9sdGFnZV9zd2luZ1t2X2xldmVsXVtwX2xldmVsXTsKKwl2YWx1ZTEg PSB2bV9wcmVfZW1waGFzaXNbdl9sZXZlbF1bcF9sZXZlbF07CisKKwkvKiBwcm9ncmFtIGRlZmF1 bHQgc2V0dGluZyBmaXJzdCAqLworCWRwX3dyaXRlKGJhc2UwICsgVFhuX1RYX0RSVl9MVkwsIDB4 MkEpOworCWRwX3dyaXRlKGJhc2UxICsgVFhuX1RYX0RSVl9MVkwsIDB4MkEpOworCWRwX3dyaXRl KGJhc2UwICsgVFhuX1RYX0VNUF9QT1NUMV9MVkwsIDB4MjApOworCWRwX3dyaXRlKGJhc2UxICsg VFhuX1RYX0VNUF9QT1NUMV9MVkwsIDB4MjApOworCisJLyogRW5hYmxlIE1VWCB0byB1c2UgQ3Vy c29yIHZhbHVlcyBmcm9tIHRoZXNlIHJlZ2lzdGVycyAqLworCXZhbHVlMCB8PSBCSVQoNSk7CisJ dmFsdWUxIHw9IEJJVCg1KTsKKworCS8qIENvbmZpZ3VyZSBob3N0IGFuZCBwYW5lbCBvbmx5IGlm IGJvdGggdmFsdWVzIGFyZSBhbGxvd2VkICovCisJaWYgKHZhbHVlMCAhPSAweEZGICYmIHZhbHVl MSAhPSAweEZGKSB7CisJCWRwX3dyaXRlKGJhc2UwICsgVFhuX1RYX0RSVl9MVkwsIHZhbHVlMCk7 CisJCWRwX3dyaXRlKGJhc2UxICsgVFhuX1RYX0RSVl9MVkwsIHZhbHVlMCk7CisJCWRwX3dyaXRl KGJhc2UwICsgVFhuX1RYX0VNUF9QT1NUMV9MVkwsIHZhbHVlMSk7CisJCWRwX3dyaXRlKGJhc2Ux ICsgVFhuX1RYX0VNUF9QT1NUMV9MVkwsIHZhbHVlMSk7CisKKwkJcHJfZGVidWcoImh3OiB2eF92 YWx1ZT0weCV4IHB4X3ZhbHVlPTB4JXhcbiIsCisJCQl2YWx1ZTAsIHZhbHVlMSk7CisJfSBlbHNl IHsKKwkJcHJfZXJyKCJpbnZhbGlkIHZ4ICgweCV4PTB4JXgpLCBweCAoMHgleD0weCV4XG4iLAor CQkJdl9sZXZlbCwgdmFsdWUwLCBwX2xldmVsLCB2YWx1ZTEpOworCX0KK30KKworc3RhdGljIHZv aWQgZHBfY2F0YWxvZ19jdHJsX3NlbmRfcGh5X3BhdHRlcm4oc3RydWN0IGRwX2NhdGFsb2dfY3Ry bCAqY3RybCwKKwkJCXUzMiBwYXR0ZXJuKQoreworCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUg KmNhdGFsb2c7CisJdTMyIHZhbHVlID0gMHgwOworCXZvaWQgX19pb21lbSAqYmFzZSA9IE5VTEw7 CisKKwlpZiAoIWN0cmwpIHsKKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKKwkJcmV0dXJu OworCX0KKworCWRwX2NhdGFsb2dfZ2V0X3ByaXYoY3RybCk7CisKKwliYXNlID0gY2F0YWxvZy0+ aW8tPmRwX2xpbmsuYmFzZTsKKworCWRwX3dyaXRlKGJhc2UgKyBEUF9TVEFURV9DVFJMLCAweDAp OworCisJc3dpdGNoIChwYXR0ZXJuKSB7CisJY2FzZSBEUF9URVNUX1BIWV9QQVRURVJOX0QxMF8y X05PX1NDUkFNQkxJTkc6CisJCWRwX3dyaXRlKGJhc2UgKyBEUF9TVEFURV9DVFJMLCAweDEpOwor CQlicmVhazsKKwljYXNlIERQX1RFU1RfUEhZX1BBVFRFUk5fU1lNQk9MX0VSUl9NRUFTVVJFTUVO VF9DTlQ6CisJCXZhbHVlICY9IH4oMSA8PCAxNik7CisJCWRwX3dyaXRlKGJhc2UgKyBEUF9IQlIy X0NPTVBMSUFOQ0VfU0NSQU1CTEVSX1JFU0VULCB2YWx1ZSk7CisJCXZhbHVlIHw9IDB4RkM7CisJ CWRwX3dyaXRlKGJhc2UgKyBEUF9IQlIyX0NPTVBMSUFOQ0VfU0NSQU1CTEVSX1JFU0VULCB2YWx1 ZSk7CisJCWRwX3dyaXRlKGJhc2UgKyBEUF9NQUlOTElOS19MRVZFTFMsIDB4Mik7CisJCWRwX3dy aXRlKGJhc2UgKyBEUF9TVEFURV9DVFJMLCAweDEwKTsKKwkJYnJlYWs7CisJY2FzZSBEUF9URVNU X1BIWV9QQVRURVJOX1BSQlM3OgorCQlkcF93cml0ZShiYXNlICsgRFBfU1RBVEVfQ1RSTCwgMHgy MCk7CisJCWJyZWFrOworCWNhc2UgRFBfVEVTVF9QSFlfUEFUVEVSTl84MF9CSVRfQ1VTVE9NX1BB VFRFUk46CisJCWRwX3dyaXRlKGJhc2UgKyBEUF9TVEFURV9DVFJMLCAweDQwKTsKKwkJLyogMDAx MTExMTAwMDAwMTExMTEwMDAwMDExMTExMDAwMDAgKi8KKwkJZHBfd3JpdGUoYmFzZSArIERQX1RF U1RfODBCSVRfQ1VTVE9NX1BBVFRFUk5fUkVHMCwgMHgzRTBGODNFMCk7CisJCS8qIDAwMDAxMTEx MTAwMDAwMTExMTEwMDAwMDExMTExMDAwICovCisJCWRwX3dyaXRlKGJhc2UgKyBEUF9URVNUXzgw QklUX0NVU1RPTV9QQVRURVJOX1JFRzEsIDB4MEY4M0UwRjgpOworCQkvKiAxMTExMTAwMDAwMTEx MTEwICovCisJCWRwX3dyaXRlKGJhc2UgKyBEUF9URVNUXzgwQklUX0NVU1RPTV9QQVRURVJOX1JF RzIsIDB4MDAwMEY4M0UpOworCQlicmVhazsKKwljYXNlIERQX1RFU1RfUEhZX1BBVFRFUk5fSEJS Ml9DVFNfRVlFX1BBVFRFUk46CisJCXZhbHVlID0gQklUKDE2KTsKKwkJZHBfd3JpdGUoYmFzZSAr IERQX0hCUjJfQ09NUExJQU5DRV9TQ1JBTUJMRVJfUkVTRVQsIHZhbHVlKTsKKwkJdmFsdWUgfD0g MHhGQzsKKwkJZHBfd3JpdGUoYmFzZSArIERQX0hCUjJfQ09NUExJQU5DRV9TQ1JBTUJMRVJfUkVT RVQsIHZhbHVlKTsKKwkJZHBfd3JpdGUoYmFzZSArIERQX01BSU5MSU5LX0xFVkVMUywgMHgyKTsK KwkJZHBfd3JpdGUoYmFzZSArIERQX1NUQVRFX0NUUkwsIDB4MTApOworCQlicmVhazsKKwlkZWZh dWx0OgorCQlwcl9kZWJ1ZygiTm8gdmFsaWQgdGVzdCBwYXR0ZXJuIHJlcXVlc3RlZDogMHgleFxu IiwgcGF0dGVybik7CisJCXJldHVybjsKKwl9CisKKwkvKiBNYWtlIHN1cmUgdGhlIHRlc3QgcGF0 dGVybiBpcyBwcm9ncmFtbWVkIGluIHRoZSBoYXJkd2FyZSAqLworCXdtYigpOworfQorCitzdGF0 aWMgdTMyIGRwX2NhdGFsb2dfY3RybF9yZWFkX3BoeV9wYXR0ZXJuKHN0cnVjdCBkcF9jYXRhbG9n X2N0cmwgKmN0cmwpCit7CisJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKKwl2 b2lkIF9faW9tZW0gKmJhc2UgPSBOVUxMOworCisJaWYgKCFjdHJsKSB7CisJCXByX2VycigiaW52 YWxpZCBpbnB1dFxuIik7CisJCXJldHVybiAwOworCX0KKworCWRwX2NhdGFsb2dfZ2V0X3ByaXYo Y3RybCk7CisKKwliYXNlID0gY2F0YWxvZy0+aW8tPmRwX2xpbmsuYmFzZTsKKworCXJldHVybiBk cF9yZWFkKGJhc2UgKyBEUF9NQUlOTElOS19SRUFEWSk7Cit9CisKKy8qIHBhbmVsIHJlbGF0ZWQg Y2F0YWxvZyBmdW5jdGlvbnMgKi8KK3N0YXRpYyBpbnQgZHBfY2F0YWxvZ19wYW5lbF90aW1pbmdf Y2ZnKHN0cnVjdCBkcF9jYXRhbG9nX3BhbmVsICpwYW5lbCkKK3sKKwlzdHJ1Y3QgZHBfY2F0YWxv Z19wcml2YXRlICpjYXRhbG9nOworCXZvaWQgX19pb21lbSAqYmFzZTsKKworCWlmICghcGFuZWwp IHsKKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKKwkJZ290byBlbmQ7CisJfQorCisJZHBf Y2F0YWxvZ19nZXRfcHJpdihwYW5lbCk7CisJYmFzZSA9IGNhdGFsb2ctPmlvLT5kcF9saW5rLmJh c2U7CisKKwlkcF93cml0ZShiYXNlICsgRFBfVE9UQUxfSE9SX1ZFUiwgcGFuZWwtPnRvdGFsKTsK KwlkcF93cml0ZShiYXNlICsgRFBfU1RBUlRfSE9SX1ZFUl9GUk9NX1NZTkMsIHBhbmVsLT5zeW5j X3N0YXJ0KTsKKwlkcF93cml0ZShiYXNlICsgRFBfSFNZTkNfVlNZTkNfV0lEVEhfUE9MQVJJVFks IHBhbmVsLT53aWR0aF9ibGFua2luZyk7CisJZHBfd3JpdGUoYmFzZSArIERQX0FDVElWRV9IT1Jf VkVSLCBwYW5lbC0+ZHBfYWN0aXZlKTsKK2VuZDoKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZv aWQgZHBfY2F0YWxvZ19hdWRpb19pbml0KHN0cnVjdCBkcF9jYXRhbG9nX2F1ZGlvICphdWRpbykK K3sKKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOworCXN0YXRpYyB1MzIgc2Rw X21hcFtdW0RQX0FVRElPX1NEUF9IRUFERVJfTUFYXSA9IHsKKwkJeworCQkJTU1TU19EUF9BVURJ T19TVFJFQU1fMCwKKwkJCU1NU1NfRFBfQVVESU9fU1RSRUFNXzEsCisJCQlNTVNTX0RQX0FVRElP X1NUUkVBTV8xLAorCQl9LAorCQl7CisJCQlNTVNTX0RQX0FVRElPX1RJTUVTVEFNUF8wLAorCQkJ TU1TU19EUF9BVURJT19USU1FU1RBTVBfMSwKKwkJCU1NU1NfRFBfQVVESU9fVElNRVNUQU1QXzEs CisJCX0sCisJCXsKKwkJCU1NU1NfRFBfQVVESU9fSU5GT0ZSQU1FXzAsCisJCQlNTVNTX0RQX0FV RElPX0lORk9GUkFNRV8xLAorCQkJTU1TU19EUF9BVURJT19JTkZPRlJBTUVfMSwKKwkJfSwKKwkJ eworCQkJTU1TU19EUF9BVURJT19DT1BZTUFOQUdFTUVOVF8wLAorCQkJTU1TU19EUF9BVURJT19D T1BZTUFOQUdFTUVOVF8xLAorCQkJTU1TU19EUF9BVURJT19DT1BZTUFOQUdFTUVOVF8xLAorCQl9 LAorCQl7CisJCQlNTVNTX0RQX0FVRElPX0lTUkNfMCwKKwkJCU1NU1NfRFBfQVVESU9fSVNSQ18x LAorCQkJTU1TU19EUF9BVURJT19JU1JDXzEsCisJCX0sCisJfTsKKworCWlmICghYXVkaW8pCisJ CXJldHVybjsKKworCWRwX2NhdGFsb2dfZ2V0X3ByaXYoYXVkaW8pOworCisJY2F0YWxvZy0+YXVk aW9fbWFwID0gc2RwX21hcDsKK30KKworc3RhdGljIHZvaWQgZHBfY2F0YWxvZ19hdWRpb19jb25m aWdfc2RwKHN0cnVjdCBkcF9jYXRhbG9nX2F1ZGlvICphdWRpbykKK3sKKwlzdHJ1Y3QgZHBfY2F0 YWxvZ19wcml2YXRlICpjYXRhbG9nOworCXZvaWQgX19pb21lbSAqYmFzZTsKKwl1MzIgc2RwX2Nm ZyA9IDA7CisJdTMyIHNkcF9jZmcyID0gMDsKKworCWlmICghYXVkaW8pCisJCXJldHVybjsKKwor CWRwX2NhdGFsb2dfZ2V0X3ByaXYoYXVkaW8pOworCWJhc2UgPSBjYXRhbG9nLT5pby0+ZHBfbGlu ay5iYXNlOworCisJc2RwX2NmZyA9IGRwX3JlYWQoYmFzZSArIE1NU1NfRFBfU0RQX0NGRyk7CisK KwkvKiBBVURJT19USU1FU1RBTVBfU0RQX0VOICovCisJc2RwX2NmZyB8PSBCSVQoMSk7CisJLyog QVVESU9fU1RSRUFNX1NEUF9FTiAqLworCXNkcF9jZmcgfD0gQklUKDIpOworCS8qIEFVRElPX0NP UFlfTUFOQUdFTUVOVF9TRFBfRU4gKi8KKwlzZHBfY2ZnIHw9IEJJVCg1KTsKKwkvKiBBVURJT19J U1JDX1NEUF9FTiAgKi8KKwlzZHBfY2ZnIHw9IEJJVCg2KTsKKwkvKiBBVURJT19JTkZPRlJBTUVf U0RQX0VOICAqLworCXNkcF9jZmcgfD0gQklUKDIwKTsKKworCXByX2RlYnVnKCJzZHBfY2ZnID0g MHgleFxuIiwgc2RwX2NmZyk7CisJZHBfd3JpdGUoYmFzZSArIE1NU1NfRFBfU0RQX0NGRywgc2Rw X2NmZyk7CisKKwlzZHBfY2ZnMiA9IGRwX3JlYWQoYmFzZSArIE1NU1NfRFBfU0RQX0NGRzIpOwor CS8qIElGUk1fUkVHU1JDIC0+IERvIG5vdCB1c2UgcmVnIHZhbHVlcyAqLworCXNkcF9jZmcyICY9 IH5CSVQoMCk7CisJLyogQVVESU9fU1RSRUFNX0hCM19SRUdTUkMtPiBEbyBub3QgdXNlIHJlZyB2 YWx1ZXMgKi8KKwlzZHBfY2ZnMiAmPSB+QklUKDEpOworCisJcHJfZGVidWcoInNkcF9jZmcyID0g MHgleFxuIiwgc2RwX2NmZzIpOworCWRwX3dyaXRlKGJhc2UgKyBNTVNTX0RQX1NEUF9DRkcyLCBz ZHBfY2ZnMik7Cit9CisKK3N0YXRpYyB2b2lkIGRwX2NhdGFsb2dfYXVkaW9fZ2V0X2hlYWRlcihz dHJ1Y3QgZHBfY2F0YWxvZ19hdWRpbyAqYXVkaW8pCit7CisJc3RydWN0IGRwX2NhdGFsb2dfcHJp dmF0ZSAqY2F0YWxvZzsKKwl1MzIgKCpzZHBfbWFwKVtEUF9BVURJT19TRFBfSEVBREVSX01BWF07 CisJdm9pZCBfX2lvbWVtICpiYXNlOworCWVudW0gZHBfY2F0YWxvZ19hdWRpb19zZHBfdHlwZSBz ZHA7CisJZW51bSBkcF9jYXRhbG9nX2F1ZGlvX2hlYWRlcl90eXBlIGhlYWRlcjsKKworCWlmICgh YXVkaW8pCisJCXJldHVybjsKKworCWRwX2NhdGFsb2dfZ2V0X3ByaXYoYXVkaW8pOworCisJYmFz ZSAgICA9IGNhdGFsb2ctPmlvLT5kcF9saW5rLmJhc2U7CisJc2RwX21hcCA9IGNhdGFsb2ctPmF1 ZGlvX21hcDsKKwlzZHAgICAgID0gYXVkaW8tPnNkcF90eXBlOworCWhlYWRlciAgPSBhdWRpby0+ c2RwX2hlYWRlcjsKKworCWF1ZGlvLT5kYXRhID0gZHBfcmVhZChiYXNlICsgc2RwX21hcFtzZHBd W2hlYWRlcl0pOworfQorCitzdGF0aWMgdm9pZCBkcF9jYXRhbG9nX2F1ZGlvX3NldF9oZWFkZXIo c3RydWN0IGRwX2NhdGFsb2dfYXVkaW8gKmF1ZGlvKQoreworCXN0cnVjdCBkcF9jYXRhbG9nX3By aXZhdGUgKmNhdGFsb2c7CisJdTMyICgqc2RwX21hcClbRFBfQVVESU9fU0RQX0hFQURFUl9NQVhd OworCXZvaWQgX19pb21lbSAqYmFzZTsKKwllbnVtIGRwX2NhdGFsb2dfYXVkaW9fc2RwX3R5cGUg c2RwOworCWVudW0gZHBfY2F0YWxvZ19hdWRpb19oZWFkZXJfdHlwZSBoZWFkZXI7CisJdTMyIGRh dGE7CisKKwlpZiAoIWF1ZGlvKQorCQlyZXR1cm47CisKKwlkcF9jYXRhbG9nX2dldF9wcml2KGF1 ZGlvKTsKKworCWJhc2UgICAgPSBjYXRhbG9nLT5pby0+ZHBfbGluay5iYXNlOworCXNkcF9tYXAg PSBjYXRhbG9nLT5hdWRpb19tYXA7CisJc2RwICAgICA9IGF1ZGlvLT5zZHBfdHlwZTsKKwloZWFk ZXIgID0gYXVkaW8tPnNkcF9oZWFkZXI7CisJZGF0YSAgICA9IGF1ZGlvLT5kYXRhOworCisJZHBf d3JpdGUoYmFzZSArIHNkcF9tYXBbc2RwXVtoZWFkZXJdLCBkYXRhKTsKK30KKworc3RhdGljIHZv aWQgZHBfY2F0YWxvZ19hdWRpb19jb25maWdfYWNyKHN0cnVjdCBkcF9jYXRhbG9nX2F1ZGlvICph dWRpbykKK3sKKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOworCXZvaWQgX19p b21lbSAqYmFzZTsKKwl1MzIgYWNyX2N0cmwsIHNlbGVjdDsKKworCWRwX2NhdGFsb2dfZ2V0X3By aXYoYXVkaW8pOworCisJc2VsZWN0ID0gYXVkaW8tPmRhdGE7CisJYmFzZSAgID0gY2F0YWxvZy0+ aW8tPmRwX2xpbmsuYmFzZTsKKworCWFjcl9jdHJsID0gc2VsZWN0IDw8IDQgfCBCSVQoMzEpIHwg QklUKDgpIHwgQklUKDE0KTsKKworCXByX2RlYnVnKCJzZWxlY3QgPSAweCV4LCBhY3JfY3RybCA9 IDB4JXhcbiIsIHNlbGVjdCwgYWNyX2N0cmwpOworCisJZHBfd3JpdGUoYmFzZSArIE1NU1NfRFBf QVVESU9fQUNSX0NUUkwsIGFjcl9jdHJsKTsKK30KKworc3RhdGljIHZvaWQgZHBfY2F0YWxvZ19h dWRpb19zYWZlX3RvX2V4aXRfbGV2ZWwoc3RydWN0IGRwX2NhdGFsb2dfYXVkaW8gKmF1ZGlvKQor eworCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7CisJdm9pZCBfX2lvbWVtICpi YXNlOworCXUzMiBtYWlubGlua19sZXZlbHMsIHNhZmVfdG9fZXhpdF9sZXZlbDsKKworCWRwX2Nh dGFsb2dfZ2V0X3ByaXYoYXVkaW8pOworCisJYmFzZSAgID0gY2F0YWxvZy0+aW8tPmRwX2xpbmsu YmFzZTsKKwlzYWZlX3RvX2V4aXRfbGV2ZWwgPSBhdWRpby0+ZGF0YTsKKworCW1haW5saW5rX2xl dmVscyA9IGRwX3JlYWQoYmFzZSArIERQX01BSU5MSU5LX0xFVkVMUyk7CisJbWFpbmxpbmtfbGV2 ZWxzICY9IDB4RkUwOworCW1haW5saW5rX2xldmVscyB8PSBzYWZlX3RvX2V4aXRfbGV2ZWw7CisK Kwlwcl9kZWJ1ZygibWFpbmxpbmtfbGV2ZWwgPSAweCV4LCBzYWZlX3RvX2V4aXRfbGV2ZWwgPSAw eCV4XG4iLAorCQkJbWFpbmxpbmtfbGV2ZWxzLCBzYWZlX3RvX2V4aXRfbGV2ZWwpOworCisJZHBf d3JpdGUoYmFzZSArIERQX01BSU5MSU5LX0xFVkVMUywgbWFpbmxpbmtfbGV2ZWxzKTsKK30KKwor c3RhdGljIHZvaWQgZHBfY2F0YWxvZ19hdWRpb19lbmFibGUoc3RydWN0IGRwX2NhdGFsb2dfYXVk aW8gKmF1ZGlvKQoreworCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7CisJdm9p ZCBfX2lvbWVtICpiYXNlOworCWJvb2wgZW5hYmxlOworCXUzMiBhdWRpb19jdHJsOworCisJZHBf Y2F0YWxvZ19nZXRfcHJpdihhdWRpbyk7CisKKwliYXNlICAgPSBjYXRhbG9nLT5pby0+ZHBfbGlu ay5iYXNlOworCWVuYWJsZSA9ICEhYXVkaW8tPmRhdGE7CisKKwlhdWRpb19jdHJsID0gZHBfcmVh ZChiYXNlICsgTU1TU19EUF9BVURJT19DRkcpOworCisJaWYgKGVuYWJsZSkKKwkJYXVkaW9fY3Ry bCB8PSBCSVQoMCk7CisJZWxzZQorCQlhdWRpb19jdHJsICY9IH5CSVQoMCk7CisKKwlwcl9kZWJ1 ZygiZHBfYXVkaW9fY2ZnID0gMHgleFxuIiwgYXVkaW9fY3RybCk7CisJZHBfd3JpdGUoYmFzZSAr IE1NU1NfRFBfQVVESU9fQ0ZHLCBhdWRpb19jdHJsKTsKKworCS8qIG1ha2Ugc3VyZSBhdWRpbyBl bmdpbmUgaXMgZGlzYWJsZWQgKi8KKwl3bWIoKTsKK30KKworc3RydWN0IGRwX2NhdGFsb2cgKmRw X2NhdGFsb2dfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRwX2lvICppbykKK3sKKwlp bnQgcmMgPSAwOworCXN0cnVjdCBkcF9jYXRhbG9nICpkcF9jYXRhbG9nOworCXN0cnVjdCBkcF9j YXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7CisJc3RydWN0IGRwX2NhdGFsb2dfYXV4IGF1eCA9IHsK KwkJLnJlYWRfZGF0YSAgICAgPSBkcF9jYXRhbG9nX2F1eF9yZWFkX2RhdGEsCisJCS53cml0ZV9k YXRhICAgID0gZHBfY2F0YWxvZ19hdXhfd3JpdGVfZGF0YSwKKwkJLndyaXRlX3RyYW5zICAgPSBk cF9jYXRhbG9nX2F1eF93cml0ZV90cmFucywKKwkJLmNsZWFyX3RyYW5zICAgPSBkcF9jYXRhbG9n X2F1eF9jbGVhcl90cmFucywKKwkJLnJlc2V0ICAgICAgICAgPSBkcF9jYXRhbG9nX2F1eF9yZXNl dCwKKwkJLnVwZGF0ZV9hdXhfY2ZnID0gZHBfY2F0YWxvZ19hdXhfdXBkYXRlX2NmZywKKwkJLmVu YWJsZSAgICAgICAgPSBkcF9jYXRhbG9nX2F1eF9lbmFibGUsCisJCS5zZXR1cCAgICAgICAgID0g ZHBfY2F0YWxvZ19hdXhfc2V0dXAsCisJCS5nZXRfaXJxICAgICAgID0gZHBfY2F0YWxvZ19hdXhf Z2V0X2lycSwKKwl9OworCXN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgY3RybCA9IHsKKwkJLnN0YXRl X2N0cmwgICAgID0gZHBfY2F0YWxvZ19jdHJsX3N0YXRlX2N0cmwsCisJCS5jb25maWdfY3RybCAg ICA9IGRwX2NhdGFsb2dfY3RybF9jb25maWdfY3RybCwKKwkJLmxhbmVfbWFwcGluZyAgID0gZHBf Y2F0YWxvZ19jdHJsX2xhbmVfbWFwcGluZywKKwkJLm1haW5saW5rX2N0cmwgID0gZHBfY2F0YWxv Z19jdHJsX21haW5saW5rX2N0cmwsCisJCS5jb25maWdfbWlzYyAgICA9IGRwX2NhdGFsb2dfY3Ry bF9jb25maWdfbWlzYywKKwkJLmNvbmZpZ19tc2EgICAgID0gZHBfY2F0YWxvZ19jdHJsX2NvbmZp Z19tc2EsCisJCS5zZXRfcGF0dGVybiAgICA9IGRwX2NhdGFsb2dfY3RybF9zZXRfcGF0dGVybiwK KwkJLnJlc2V0ICAgICAgICAgID0gZHBfY2F0YWxvZ19jdHJsX3Jlc2V0LAorCQkudXNiX3Jlc2V0 ICAgICAgPSBkcF9jYXRhbG9nX2N0cmxfdXNiX3Jlc2V0LAorCQkubWFpbmxpbmtfcmVhZHkgPSBk cF9jYXRhbG9nX2N0cmxfbWFpbmxpbmtfcmVhZHksCisJCS5lbmFibGVfaXJxICAgICA9IGRwX2Nh dGFsb2dfY3RybF9lbmFibGVfaXJxLAorCQkuaHBkX2NvbmZpZyAgICAgPSBkcF9jYXRhbG9nX2N0 cmxfaHBkX2NvbmZpZywKKwkJLnBoeV9yZXNldCAgICAgID0gZHBfY2F0YWxvZ19jdHJsX3BoeV9y ZXNldCwKKwkJLnBoeV9sYW5lX2NmZyAgID0gZHBfY2F0YWxvZ19jdHJsX3BoeV9sYW5lX2NmZywK KwkJLnVwZGF0ZV92eF9weCAgID0gZHBfY2F0YWxvZ19jdHJsX3VwZGF0ZV92eF9weCwKKwkJLmdl dF9pbnRlcnJ1cHQgID0gZHBfY2F0YWxvZ19jdHJsX2dldF9pbnRlcnJ1cHQsCisJCS51cGRhdGVf dHJhbnNmZXJfdW5pdCA9IGRwX2NhdGFsb2dfY3RybF91cGRhdGVfdHJhbnNmZXJfdW5pdCwKKwkJ LnNlbmRfcGh5X3BhdHRlcm4gICAgPSBkcF9jYXRhbG9nX2N0cmxfc2VuZF9waHlfcGF0dGVybiwK KwkJLnJlYWRfcGh5X3BhdHRlcm4gPSBkcF9jYXRhbG9nX2N0cmxfcmVhZF9waHlfcGF0dGVybiwK Kwl9OworCXN0cnVjdCBkcF9jYXRhbG9nX2F1ZGlvIGF1ZGlvID0geworCQkuaW5pdCAgICAgICA9 IGRwX2NhdGFsb2dfYXVkaW9faW5pdCwKKwkJLmNvbmZpZ19hY3IgPSBkcF9jYXRhbG9nX2F1ZGlv X2NvbmZpZ19hY3IsCisJCS5lbmFibGUgICAgID0gZHBfY2F0YWxvZ19hdWRpb19lbmFibGUsCisJ CS5jb25maWdfc2RwID0gZHBfY2F0YWxvZ19hdWRpb19jb25maWdfc2RwLAorCQkuc2V0X2hlYWRl ciA9IGRwX2NhdGFsb2dfYXVkaW9fc2V0X2hlYWRlciwKKwkJLmdldF9oZWFkZXIgPSBkcF9jYXRh bG9nX2F1ZGlvX2dldF9oZWFkZXIsCisJCS5zYWZlX3RvX2V4aXRfbGV2ZWwgPSBkcF9jYXRhbG9n X2F1ZGlvX3NhZmVfdG9fZXhpdF9sZXZlbCwKKwl9OworCXN0cnVjdCBkcF9jYXRhbG9nX3BhbmVs IHBhbmVsID0geworCQkudGltaW5nX2NmZyA9IGRwX2NhdGFsb2dfcGFuZWxfdGltaW5nX2NmZywK KwkJLnRwZ19jb25maWcgPSBkcF9jYXRhbG9nX3BhbmVsX3RwZ19jZmcsCisJfTsKKworCWlmICgh aW8pIHsKKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKKwkJcmMgPSAtRUlOVkFMOworCQln b3RvIGVycm9yOworCX0KKworCWNhdGFsb2cgID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpj YXRhbG9nKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjYXRhbG9nKSB7CisJCXJjID0gLUVOT01FTTsK KwkJZ290byBlcnJvcjsKKwl9CisKKwljYXRhbG9nLT5kZXYgPSBkZXY7CisJY2F0YWxvZy0+aW8g PSBpbzsKKworCWRwX2NhdGFsb2cgPSAmY2F0YWxvZy0+ZHBfY2F0YWxvZzsKKworCWRwX2NhdGFs b2ctPmF1eCAgID0gYXV4OworCWRwX2NhdGFsb2ctPmN0cmwgID0gY3RybDsKKwlkcF9jYXRhbG9n LT5hdWRpbyA9IGF1ZGlvOworCWRwX2NhdGFsb2ctPnBhbmVsID0gcGFuZWw7CisKKwlyZXR1cm4g ZHBfY2F0YWxvZzsKK2Vycm9yOgorCXJldHVybiBFUlJfUFRSKHJjKTsKK30KKwordm9pZCBkcF9j YXRhbG9nX3B1dChzdHJ1Y3QgZHBfY2F0YWxvZyAqZHBfY2F0YWxvZykKK3sKKwlzdHJ1Y3QgZHBf Y2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOworCisJaWYgKCFkcF9jYXRhbG9nKQorCQlyZXR1cm47 CisKKwljYXRhbG9nID0gY29udGFpbmVyX29mKGRwX2NhdGFsb2csIHN0cnVjdCBkcF9jYXRhbG9n X3ByaXZhdGUsCisJCQkJZHBfY2F0YWxvZyk7CisKKwlkZXZtX2tmcmVlKGNhdGFsb2ctPmRldiwg Y2F0YWxvZyk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2NhdGFs b2cuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY2F0YWxvZy5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4OTUxZGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2dwdS9kcm0vbXNtL2RwL2RwX2NhdGFsb2cuaApAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIENv cHlyaWdodCAoYykgMjAxNy0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCisgKiBvbmx5IHZlcnNp b24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisg KiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaWZuZGVmIF9EUF9DQVRBTE9HX0hfCisj ZGVmaW5lIF9EUF9DQVRBTE9HX0hfCisKKyNpbmNsdWRlICJkcF9wYXJzZXIuaCIKKworLyogaW50 ZXJydXB0cyAqLworI2RlZmluZSBEUF9JTlRSX0hQRAkJQklUKDApCisjZGVmaW5lIERQX0lOVFJf QVVYX0kyQ19ET05FCUJJVCgzKQorI2RlZmluZSBEUF9JTlRSX1dST05HX0FERFIJQklUKDYpCisj ZGVmaW5lIERQX0lOVFJfVElNRU9VVAkJQklUKDkpCisjZGVmaW5lIERQX0lOVFJfTkFDS19ERUZF UglCSVQoMTIpCisjZGVmaW5lIERQX0lOVFJfV1JPTkdfREFUQV9DTlQJQklUKDE1KQorI2RlZmlu ZSBEUF9JTlRSX0kyQ19OQUNLCUJJVCgxOCkKKyNkZWZpbmUgRFBfSU5UUl9JMkNfREVGRVIJQklU KDIxKQorI2RlZmluZSBEUF9JTlRSX1BMTF9VTkxPQ0tFRAlCSVQoMjQpCisjZGVmaW5lIERQX0lO VFJfQVVYX0VSUk9SCUJJVCgyNykKKworI2RlZmluZSBEUF9JTlRSX1JFQURZX0ZPUl9WSURFTwkJ QklUKDApCisjZGVmaW5lIERQX0lOVFJfSURMRV9QQVRURVJOX1NFTlQJQklUKDMpCisjZGVmaW5l IERQX0lOVFJfRlJBTUVfRU5ECQlCSVQoNikKKyNkZWZpbmUgRFBfSU5UUl9DUkNfVVBEQVRFRAkJ QklUKDkpCisKK3N0cnVjdCBkcF9jYXRhbG9nX2F1eCB7CisJdTMyIGRhdGE7CisJdTMyIGlzcjsK KworCXUzMiAoKnJlYWRfZGF0YSkoc3RydWN0IGRwX2NhdGFsb2dfYXV4ICphdXgpOworCWludCAo KndyaXRlX2RhdGEpKHN0cnVjdCBkcF9jYXRhbG9nX2F1eCAqYXV4KTsKKwlpbnQgKCp3cml0ZV90 cmFucykoc3RydWN0IGRwX2NhdGFsb2dfYXV4ICphdXgpOworCWludCAoKmNsZWFyX3RyYW5zKShz dHJ1Y3QgZHBfY2F0YWxvZ19hdXggKmF1eCwgYm9vbCByZWFkKTsKKwl2b2lkICgqcmVzZXQpKHN0 cnVjdCBkcF9jYXRhbG9nX2F1eCAqYXV4KTsKKwl2b2lkICgqZW5hYmxlKShzdHJ1Y3QgZHBfY2F0 YWxvZ19hdXggKmF1eCwgYm9vbCBlbmFibGUpOworCXZvaWQgKCp1cGRhdGVfYXV4X2NmZykoc3Ry dWN0IGRwX2NhdGFsb2dfYXV4ICphdXgsCisJCXN0cnVjdCBkcF9hdXhfY2ZnICpjZmcsIGVudW0g ZHBfcGh5X2F1eF9jb25maWdfdHlwZSB0eXBlKTsKKwl2b2lkICgqc2V0dXApKHN0cnVjdCBkcF9j YXRhbG9nX2F1eCAqYXV4LAorCQkJc3RydWN0IGRwX2F1eF9jZmcgKmF1eF9jZmcpOworCXZvaWQg KCpnZXRfaXJxKShzdHJ1Y3QgZHBfY2F0YWxvZ19hdXggKmF1eCwgYm9vbCBjbWRfYnVzeSk7Cit9 OworCitzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsIHsKKwl1MzIgZHBfdHU7CisJdTMyIHZhbGlkX2Jv dW5kYXJ5OworCXUzMiB2YWxpZF9ib3VuZGFyeTI7CisJdTMyIGlzcjsKKworCXZvaWQgKCpzdGF0 ZV9jdHJsKShzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsLCB1MzIgc3RhdGUpOworCXZvaWQg KCpjb25maWdfY3RybCkoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCwgdTMyIGNvbmZpZyk7 CisJdm9pZCAoKmxhbmVfbWFwcGluZykoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCk7CisJ dm9pZCAoKm1haW5saW5rX2N0cmwpKHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwsIGJvb2wg ZW5hYmxlKTsKKwl2b2lkICgqY29uZmlnX21pc2MpKHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0 cmwsIHUzMiBjYywgdTMyIHRiKTsKKwl2b2lkICgqY29uZmlnX21zYSkoc3RydWN0IGRwX2NhdGFs b2dfY3RybCAqY3RybCwgdTMyIHJhdGUsCisJCQkJdTMyIHN0cmVhbV9yYXRlX2toeiwgYm9vbCBm aXhlZF9udmlkKTsKKwl2b2lkICgqc2V0X3BhdHRlcm4pKHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwg KmN0cmwsIHUzMiBwYXR0ZXJuKTsKKwl2b2lkICgqcmVzZXQpKHN0cnVjdCBkcF9jYXRhbG9nX2N0 cmwgKmN0cmwpOworCXZvaWQgKCp1c2JfcmVzZXQpKHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0 cmwsIGJvb2wgZmxpcCk7CisJYm9vbCAoKm1haW5saW5rX3JlYWR5KShzdHJ1Y3QgZHBfY2F0YWxv Z19jdHJsICpjdHJsKTsKKwl2b2lkICgqZW5hYmxlX2lycSkoc3RydWN0IGRwX2NhdGFsb2dfY3Ry bCAqY3RybCwgYm9vbCBlbmFibGUpOworCXZvaWQgKCpocGRfY29uZmlnKShzdHJ1Y3QgZHBfY2F0 YWxvZ19jdHJsICpjdHJsLCBib29sIGVuYWJsZSk7CisJdm9pZCAoKnBoeV9yZXNldCkoc3RydWN0 IGRwX2NhdGFsb2dfY3RybCAqY3RybCk7CisJdm9pZCAoKnBoeV9sYW5lX2NmZykoc3RydWN0IGRw X2NhdGFsb2dfY3RybCAqY3RybCwgYm9vbCBmbGlwcGVkLAorCQkJCXU4IGxhbmVfY250KTsKKwl2 b2lkICgqdXBkYXRlX3Z4X3B4KShzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsLCB1OCB2X2xl dmVsLAorCQkJCXU4IHBfbGV2ZWwpOworCXZvaWQgKCpnZXRfaW50ZXJydXB0KShzdHJ1Y3QgZHBf Y2F0YWxvZ19jdHJsICpjdHJsKTsKKwl2b2lkICgqdXBkYXRlX3RyYW5zZmVyX3VuaXQpKHN0cnVj dCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwpOworCXZvaWQgKCpzZW5kX3BoeV9wYXR0ZXJuKShzdHJ1 Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsLAorCQkJdTMyIHBhdHRlcm4pOworCXUzMiAoKnJlYWRf cGh5X3BhdHRlcm4pKHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwpOworfTsKKworZW51bSBk cF9jYXRhbG9nX2F1ZGlvX3NkcF90eXBlIHsKKwlEUF9BVURJT19TRFBfU1RSRUFNLAorCURQX0FV RElPX1NEUF9USU1FU1RBTVAsCisJRFBfQVVESU9fU0RQX0lORk9GUkFNRSwKKwlEUF9BVURJT19T RFBfQ09QWU1BTkFHRU1FTlQsCisJRFBfQVVESU9fU0RQX0lTUkMsCisJRFBfQVVESU9fU0RQX01B WCwKK307CisKK2VudW0gZHBfY2F0YWxvZ19hdWRpb19oZWFkZXJfdHlwZSB7CisJRFBfQVVESU9f U0RQX0hFQURFUl8xLAorCURQX0FVRElPX1NEUF9IRUFERVJfMiwKKwlEUF9BVURJT19TRFBfSEVB REVSXzMsCisJRFBfQVVESU9fU0RQX0hFQURFUl9NQVgsCit9OworCitzdHJ1Y3QgZHBfY2F0YWxv Z19hdWRpbyB7CisJZW51bSBkcF9jYXRhbG9nX2F1ZGlvX3NkcF90eXBlIHNkcF90eXBlOworCWVu dW0gZHBfY2F0YWxvZ19hdWRpb19oZWFkZXJfdHlwZSBzZHBfaGVhZGVyOworCXUzMiBkYXRhOwor CisJdm9pZCAoKmluaXQpKHN0cnVjdCBkcF9jYXRhbG9nX2F1ZGlvICphdWRpbyk7CisJdm9pZCAo KmVuYWJsZSkoc3RydWN0IGRwX2NhdGFsb2dfYXVkaW8gKmF1ZGlvKTsKKwl2b2lkICgqY29uZmln X2Fjcikoc3RydWN0IGRwX2NhdGFsb2dfYXVkaW8gKmF1ZGlvKTsKKwl2b2lkICgqY29uZmlnX3Nk cCkoc3RydWN0IGRwX2NhdGFsb2dfYXVkaW8gKmF1ZGlvKTsKKwl2b2lkICgqc2V0X2hlYWRlciko c3RydWN0IGRwX2NhdGFsb2dfYXVkaW8gKmF1ZGlvKTsKKwl2b2lkICgqZ2V0X2hlYWRlcikoc3Ry dWN0IGRwX2NhdGFsb2dfYXVkaW8gKmF1ZGlvKTsKKwl2b2lkICgqc2FmZV90b19leGl0X2xldmVs KShzdHJ1Y3QgZHBfY2F0YWxvZ19hdWRpbyAqYXVkaW8pOworfTsKKworc3RydWN0IGRwX2NhdGFs b2dfcGFuZWwgeworCXUzMiB0b3RhbDsKKwl1MzIgc3luY19zdGFydDsKKwl1MzIgd2lkdGhfYmxh bmtpbmc7CisJdTMyIGRwX2FjdGl2ZTsKKworCS8qIFRQRyAqLworCXUzMiBoc3luY19wZXJpb2Q7 CisJdTMyIHZzeW5jX3BlcmlvZDsKKwl1MzIgZGlzcGxheV92X3N0YXJ0OworCXUzMiBkaXNwbGF5 X3ZfZW5kOworCXUzMiB2X3N5bmNfd2lkdGg7CisJdTMyIGhzeW5jX2N0bDsKKwl1MzIgZGlzcGxh eV9oY3RsOworCisJaW50ICgqdGltaW5nX2NmZykoc3RydWN0IGRwX2NhdGFsb2dfcGFuZWwgKnBh bmVsKTsKKwl2b2lkICgqdHBnX2NvbmZpZykoc3RydWN0IGRwX2NhdGFsb2dfcGFuZWwgKnBhbmVs LCBib29sIGVuYWJsZSk7Cit9OworCitzdHJ1Y3QgZHBfY2F0YWxvZyB7CisJc3RydWN0IGRwX2Nh dGFsb2dfYXV4IGF1eDsKKwlzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsIGN0cmw7CisJc3RydWN0IGRw X2NhdGFsb2dfYXVkaW8gYXVkaW87CisJc3RydWN0IGRwX2NhdGFsb2dfcGFuZWwgcGFuZWw7Cit9 OworCitzdHJ1Y3QgZHBfY2F0YWxvZyAqZHBfY2F0YWxvZ19nZXQoc3RydWN0IGRldmljZSAqZGV2 LCBzdHJ1Y3QgZHBfaW8gKmlvKTsKK3ZvaWQgZHBfY2F0YWxvZ19wdXQoc3RydWN0IGRwX2NhdGFs b2cgKmNhdGFsb2cpOworCisjZW5kaWYgLyogX0RQX0NBVEFMT0dfSF8gKi8KZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY3RybC5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9k cC9kcF9jdHJsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhhNTJmNQot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY3RybC5jCkBAIC0w LDAgKzEsMTQ3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMi0yMDE4LCBUaGUgTGludXgg Rm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICog aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJz aW9uIDIgYW5kCisgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisj ZGVmaW5lIHByX2ZtdChmbXQpCSJbZHJtLWRwXSAlczogIiBmbXQsIF9fZnVuY19fCisKKyNpbmNs dWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNs dWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSAiZHBfY3RybC5oIgorCisjZGVmaW5lIERQ X0tIWl9UT19IWiAxMDAwCisKKyNkZWZpbmUgRFBfQ1RSTF9JTlRSX1JFQURZX0ZPUl9WSURFTyAg ICAgQklUKDApCisjZGVmaW5lIERQX0NUUkxfSU5UUl9JRExFX1BBVFRFUk5fU0VOVCAgQklUKDMp CisKKy8qIGRwIHN0YXRlIGN0cmwgKi8KKyNkZWZpbmUgU1RfVFJBSU5fUEFUVEVSTl8xCQlCSVQo MCkKKyNkZWZpbmUgU1RfVFJBSU5fUEFUVEVSTl8yCQlCSVQoMSkKKyNkZWZpbmUgU1RfVFJBSU5f UEFUVEVSTl8zCQlCSVQoMikKKyNkZWZpbmUgU1RfVFJBSU5fUEFUVEVSTl80CQlCSVQoMykKKyNk ZWZpbmUgU1RfU1lNQk9MX0VSUl9SQVRFX01FQVNVUkVNRU5UCUJJVCg0KQorI2RlZmluZSBTVF9Q UkJTNwkJCUJJVCg1KQorI2RlZmluZSBTVF9DVVNUT01fODBfQklUX1BBVFRFUk4JQklUKDYpCisj ZGVmaW5lIFNUX1NFTkRfVklERU8JCQlCSVQoNykKKyNkZWZpbmUgU1RfUFVTSF9JRExFCQkJQklU KDgpCisKKyNkZWZpbmUgTVJfTElOS19UUkFJTklORzEgIDB4OAorI2RlZmluZSBNUl9MSU5LX1NZ TUJPTF9FUk0gMHg4MAorI2RlZmluZSBNUl9MSU5LX1BSQlM3IDB4MTAwCisjZGVmaW5lIE1SX0xJ TktfQ1VTVE9NODAgMHgyMDAKKworc3RydWN0IGRwX3ZjX3R1X21hcHBpbmdfdGFibGUgeworCXUz MiB2aWM7CisJdTggbGFuZXM7CisJdTggbHJhdGU7IC8qIERQX0xJTktfUkFURSAtPiAxNjIoNiks IDI3MCgxMCksIDU0MCgyMCksIDgxMCAoMzApICovCisJdTggYnBwOworCXU4IHZhbGlkX2JvdW5k YXJ5X2xpbms7CisJdTE2IGRlbGF5X3N0YXJ0X2xpbms7CisJYm9vbCBib3VuZGFyeV9tb2RlcmF0 aW9uX2VuOworCXU4IHZhbGlkX2xvd2VyX2JvdW5kYXJ5X2xpbms7CisJdTggdXBwZXJfYm91bmRh cnlfY291bnQ7CisJdTggbG93ZXJfYm91bmRhcnlfY291bnQ7CisJdTggdHVfc2l6ZV9taW51czE7 Cit9OworCitzdHJ1Y3QgZHBfY3RybF9wcml2YXRlIHsKKwlzdHJ1Y3QgZHBfY3RybCBkcF9jdHJs OworCisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBkcF9hdXggKmF1eDsKKwlzdHJ1Y3Qg ZHBfcGFuZWwgKnBhbmVsOworCXN0cnVjdCBkcF9saW5rICpsaW5rOworCXN0cnVjdCBkcF9wb3dl ciAqcG93ZXI7CisJc3RydWN0IGRwX3BhcnNlciAqcGFyc2VyOworCXN0cnVjdCBkcF9jYXRhbG9n X2N0cmwgKmNhdGFsb2c7CisKKwlzdHJ1Y3QgY29tcGxldGlvbiBpZGxlX2NvbXA7CisJc3RydWN0 IGNvbXBsZXRpb24gdmlkZW9fY29tcDsKKworCWJvb2wgb3JpZW50YXRpb247CisJYXRvbWljX3Qg YWJvcnRlZDsKKworCXUzMiBwaXhlbF9yYXRlOworCXUzMiB2aWM7Cit9OworCitlbnVtIG5vdGlm aWNhdGlvbl9zdGF0dXMgeworCU5PVElGWV9VTktOT1dOLAorCU5PVElGWV9DT05ORUNULAorCU5P VElGWV9ESVNDT05ORUNULAorCU5PVElGWV9DT05ORUNUX0lSUV9IUEQsCisJTk9USUZZX0RJU0NP Tk5FQ1RfSVJRX0hQRCwKK307CisKK3N0YXRpYyB2b2lkIGRwX2N0cmxfaWRsZV9wYXR0ZXJuc19z ZW50KHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0cmwpCit7CisJcHJfZGVidWcoImlkbGVfcGF0 dGVybnNfc2VudFxuIik7CisJY29tcGxldGUoJmN0cmwtPmlkbGVfY29tcCk7Cit9CisKK3N0YXRp YyB2b2lkIGRwX2N0cmxfdmlkZW9fcmVhZHkoc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybCkK K3sKKwlwcl9kZWJ1ZygiZHBfdmlkZW9fcmVhZHlcbiIpOworCWNvbXBsZXRlKCZjdHJsLT52aWRl b19jb21wKTsKK30KKworc3RhdGljIHZvaWQgZHBfY3RybF9hYm9ydChzdHJ1Y3QgZHBfY3RybCAq ZHBfY3RybCkKK3sKKwlzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsOworCisJaWYgKCFkcF9j dHJsKSB7CisJCXByX2VycigiSW52YWxpZCBpbnB1dCBkYXRhXG4iKTsKKwkJcmV0dXJuOworCX0K KworCWN0cmwgPSBjb250YWluZXJfb2YoZHBfY3RybCwgc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSwg ZHBfY3RybCk7CisKKwlhdG9taWNfc2V0KCZjdHJsLT5hYm9ydGVkLCAxKTsKK30KKworc3RhdGlj IHZvaWQgZHBfY3RybF9zdGF0ZV9jdHJsKHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0cmwsIHUz MiBzdGF0ZSkKK3sKKwljdHJsLT5jYXRhbG9nLT5zdGF0ZV9jdHJsKGN0cmwtPmNhdGFsb2csIHN0 YXRlKTsKK30KKworc3RhdGljIHZvaWQgZHBfY3RybF9wdXNoX2lkbGUoc3RydWN0IGRwX2N0cmwg KmRwX2N0cmwpCit7CisJaW50IGNvbnN0IGlkbGVfcGF0dGVybl9jb21wbGV0aW9uX3RpbWVvdXRf bXMgPSAzICogSFogLyAxMDA7CisJc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybDsKKworCWlm ICghZHBfY3RybCkgeworCQlwcl9lcnIoIkludmFsaWQgaW5wdXQgZGF0YVxuIik7CisJCXJldHVy bjsKKwl9CisKKwljdHJsID0gY29udGFpbmVyX29mKGRwX2N0cmwsIHN0cnVjdCBkcF9jdHJsX3By aXZhdGUsIGRwX2N0cmwpOworCisJcmVpbml0X2NvbXBsZXRpb24oJmN0cmwtPmlkbGVfY29tcCk7 CisJZHBfY3RybF9zdGF0ZV9jdHJsKGN0cmwsIFNUX1BVU0hfSURMRSk7CisKKwlpZiAoIXdhaXRf Zm9yX2NvbXBsZXRpb25fdGltZW91dCgmY3RybC0+aWRsZV9jb21wLAorCQkJaWRsZV9wYXR0ZXJu X2NvbXBsZXRpb25fdGltZW91dF9tcykpCisJCXByX3dhcm4oIlBVU0hfSURMRSBwYXR0ZXJuIHRp bWVkb3V0XG4iKTsKKworCXByX2RlYnVnKCJtYWlubGluayBvZmYgZG9uZVxuIik7Cit9CisKK3N0 YXRpYyB2b2lkIGRwX2N0cmxfY29uZmlnX2N0cmwoc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3Ry bCkKK3sKKwl1MzIgY29uZmlnID0gMCwgdGJkOworCXU4ICpkcGNkID0gY3RybC0+cGFuZWwtPmRw Y2Q7CisKKwljb25maWcgfD0gKDIgPDwgMTMpOyAvKiBEZWZhdWx0LT4gTFNDTEsgRElWOiAxLzQg TENMSyAgKi8KKwljb25maWcgfD0gKDAgPDwgMTEpOyAvKiBSR0IgKi8KKworCS8qIFNjcmFtYmxl ciByZXNldCBlbmFibGUgKi8KKwlpZiAoZHBjZFtEUF9FRFBfQ09ORklHVVJBVElPTl9DQVBdICYg RFBfQUxURVJOQVRFX1NDUkFNQkxFUl9SRVNFVF9DQVApCisJCWNvbmZpZyB8PSAoMSA8PCAxMCk7 CisKKwl0YmQgPSBjdHJsLT5saW5rLT5nZXRfdGVzdF9iaXRzX2RlcHRoKGN0cmwtPmxpbmssCisJ CQljdHJsLT5wYW5lbC0+cGluZm8uYnBwKTsKKworCWlmICh0YmQgPT0gRFBfVEVTVF9CSVRfREVQ VEhfVU5LTk9XTikKKwkJdGJkID0gRFBfVEVTVF9CSVRfREVQVEhfODsKKworCWNvbmZpZyB8PSB0 YmQgPDwgODsKKworCS8qIE51bSBvZiBMYW5lcyAqLworCWNvbmZpZyB8PSAoKGN0cmwtPmxpbmst PmxpbmtfcGFyYW1zLmxhbmVfY291bnQgLSAxKSA8PCA0KTsKKworCWlmIChkcm1fZHBfZW5oYW5j ZWRfZnJhbWVfY2FwKGRwY2QpKQorCQljb25maWcgfD0gMHg0MDsKKworCWNvbmZpZyB8PSAweDA0 OyAvKiBwcm9ncmVzc2l2ZSB2aWRlbyAqLworCisJY29uZmlnIHw9IDB4MDM7CS8qIHN5Y24gY2xv Y2sgJiBzdGF0aWMgTXZpZCAqLworCisJY3RybC0+Y2F0YWxvZy0+Y29uZmlnX2N0cmwoY3RybC0+ Y2F0YWxvZywgY29uZmlnKTsKK30KKworLyoqCisgKiBkcF9jdHJsX2NvbmZpZ3VyZV9zb3VyY2Vf cGFyYW1zKCkgLSBjb25maWd1cmVzIERQIHRyYW5zbWl0dGVyIHNvdXJjZSBwYXJhbXMKKyAqIEBj dHJsOiBEaXNwbGF5IFBvcnQgRHJpdmVyIGRhdGEKKyAqCisgKiBDb25maWd1cmVzIHRoZSBEUCB0 cmFuc21pdHRlciBzb3VyY2UgcGFyYW1zIGluY2x1ZGluZyBkZXRhaWxzIHN1Y2ggYXMgbGFuZQor ICogY29uZmlndXJhdGlvbiwgb3V0cHV0IGZvcm1hdCBhbmQgc2luay9wYW5lbCB0aW1pbmcgaW5m b3JtYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkIGRwX2N0cmxfY29uZmlndXJlX3NvdXJjZV9wYXJh bXMoc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybCkKK3sKKwl1MzIgY2MsIHRiOworCisJY3Ry bC0+Y2F0YWxvZy0+bGFuZV9tYXBwaW5nKGN0cmwtPmNhdGFsb2cpOworCWN0cmwtPmNhdGFsb2ct Pm1haW5saW5rX2N0cmwoY3RybC0+Y2F0YWxvZywgdHJ1ZSk7CisKKwlkcF9jdHJsX2NvbmZpZ19j dHJsKGN0cmwpOworCisJdGIgPSBjdHJsLT5saW5rLT5nZXRfdGVzdF9iaXRzX2RlcHRoKGN0cmwt PmxpbmssCisJCWN0cmwtPnBhbmVsLT5waW5mby5icHApOworCWNjID0gY3RybC0+bGluay0+Z2V0 X2NvbG9yaW1ldHJ5X2NvbmZpZyhjdHJsLT5saW5rKTsKKwljdHJsLT5jYXRhbG9nLT5jb25maWdf bWlzYyhjdHJsLT5jYXRhbG9nLCBjYywgdGIpOworCWN0cmwtPnBhbmVsLT50aW1pbmdfY2ZnKGN0 cmwtPnBhbmVsKTsKK30KKworc3RhdGljIHZvaWQgZHBfY3RybF9nZXRfZXh0cmFfcmVxX2J5dGVz KHU2NCByZXN1bHRfdmFsaWQsCisJCQkJCWludCB2YWxpZF9iZGFyeV9saW5rLAorCQkJCQl1NjQg dmFsdWUxLCB1NjQgdmFsdWUyLAorCQkJCQlib29sICpuZWdhdGl2ZSwgdTY0ICpyZXN1bHQsCisJ CQkJCXU2NCBjb21wYXJlKQoreworCSpuZWdhdGl2ZSA9IGZhbHNlOworCWlmIChyZXN1bHRfdmFs aWQgPj0gY29tcGFyZSkgeworCQlpZiAodmFsaWRfYmRhcnlfbGluaworCQkJCT49IGNvbXBhcmUp CisJCQkqcmVzdWx0ID0gdmFsdWUxICsgdmFsdWUyOworCQllbHNlIHsKKwkJCWlmICh2YWx1ZTEg PCB2YWx1ZTIpCisJCQkJKm5lZ2F0aXZlID0gdHJ1ZTsKKwkJCSpyZXN1bHQgPSAodmFsdWUxID49 IHZhbHVlMikgPworCQkJCSh2YWx1ZTEgLSB2YWx1ZTIpIDogKHZhbHVlMiAtIHZhbHVlMSk7CisJ CX0KKwl9IGVsc2UgeworCQlpZiAodmFsaWRfYmRhcnlfbGluaworCQkJCT49IGNvbXBhcmUpIHsK KwkJCWlmICh2YWx1ZTEgPj0gdmFsdWUyKQorCQkJCSpuZWdhdGl2ZSA9IHRydWU7CisJCQkqcmVz dWx0ID0gKHZhbHVlMSA+PSB2YWx1ZTIpID8KKwkJCQkodmFsdWUxIC0gdmFsdWUyKSA6ICh2YWx1 ZTIgLSB2YWx1ZTEpOworCQl9IGVsc2UgeworCQkJKnJlc3VsdCA9IHZhbHVlMSArIHZhbHVlMjsK KwkJCSpuZWdhdGl2ZSA9IHRydWU7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB1NjQgcm91bmR1cF91 NjQodTY0IHgsIHU2NCB5KQoreworCXggKz0gKHkgLSAxKTsKKwlyZXR1cm4gKGRpdjY0X3VsKHgs IHkpICogeSk7Cit9CisKK3N0YXRpYyB1NjQgcm91bmRkb3duX3U2NCh1NjQgeCwgdTY0IHkpCit7 CisJdTY0IHJlbTsKKworCWRpdjY0X3U2NF9yZW0oeCwgeSwgJnJlbSk7CisJcmV0dXJuICh4IC0g cmVtKTsKK30KKworc3RhdGljIHZvaWQgZHBfY3RybF9jYWxjX3R1X3BhcmFtZXRlcnMoc3RydWN0 IGRwX2N0cmxfcHJpdmF0ZSAqY3RybCwKKwkJCQkgICAgICAgc3RydWN0IGRwX3ZjX3R1X21hcHBp bmdfdGFibGUgKnR1X3RhYmxlKQoreworCXUzMiBtdWx0aXBsaWVyID0gMTAwMDAwMDsKKwl1NjQg cGNsaywgbGNsazsKKwl1OCBicHAsIGxuX2NudDsKKwlpbnQgcnVuX2lkeCA9IDA7CisJdTMyIGx3 aWR0aCwgaF9ibGFuazsKKwl1MzIgZmlmb19lbXB0eSA9IDA7CisJdTMyIHJhdGlvX3NjYWxlID0g MTAwMTsKKwl1NjQgdGVtcCwgcmF0aW8sIG9yaWdpbmFsX3JhdGlvOworCXU2NCB0ZW1wMiwgcmVt aW5kZXI7CisJdTY0IHRlbXAzLCB0ZW1wNCwgcmVzdWx0ID0gMDsKKworCXU2NCBlcnIgPSBtdWx0 aXBsaWVyOworCXU2NCBuX2VyciA9IDAsIG5fbl9lcnIgPSAwOworCWJvb2wgbl9lcnJfbmVnLCBu bl9lcnJfbmVnOworCXU4IGhibGFua19tYXJnaW4gPSAxNjsKKworCXU4IHR1X3NpemUsIHR1X3Np emVfZGVzaXJlZCA9IDAsIHR1X3NpemVfbWludXMxOworCWludCB2YWxpZF9ib3VuZGFyeV9saW5r OworCXU2NCByZXN1bHRpbmdfdmFsaWQ7CisJdTY0IHRvdGFsX3ZhbGlkOworCXU2NCBlZmZlY3Rp dmVfdmFsaWQ7CisJdTY0IGVmZmVjdGl2ZV92YWxpZF9yZWNvcmRlZDsKKwlpbnQgbl90dXM7CisJ aW50IG5fdHVzX3Blcl9sYW5lOworCWludCBwYWlyZWRfdHVzOworCWludCByZW1haW5kZXJfdHVz OworCWludCByZW1haW5kZXJfdHVzX3VwcGVyLCByZW1haW5kZXJfdHVzX2xvd2VyOworCWludCBl eHRyYV9ieXRlczsKKwlpbnQgZmlsbGVyX3NpemU7CisJaW50IGRlbGF5X3N0YXJ0X2xpbms7CisJ aW50IGJvdW5kYXJ5X21vZGVyYXRpb25fZW4gPSAwOworCWludCB1cHBlcl9iZHJ5X2NudCA9IDA7 CisJaW50IGxvd2VyX2JkcnlfY250ID0gMDsKKwlpbnQgaV91cHBlcl9iZHJ5X2NudCA9IDA7CisJ aW50IGlfbG93ZXJfYmRyeV9jbnQgPSAwOworCWludCB2YWxpZF9sb3dlcl9ib3VuZGFyeV9saW5r ID0gMDsKKwlpbnQgZXZlbl9kaXN0cmlidXRpb25fYmYgPSAwOworCWludCBldmVuX2Rpc3RyaWJ1 dGlvbl9sZWdhY3kgPSAwOworCWludCBldmVuX2Rpc3RyaWJ1dGlvbiA9IDA7CisJaW50IG1pbl9o YmxhbmsgPSAwOworCWludCBleHRyYV9wY2xrX2N5Y2xlczsKKwl1OCBleHRyYV9wY2xrX2N5Y2xl X2RlbGF5ID0gNDsKKwlpbnQgZXh0cmFfcGNsa19jeWNsZXNfaW5fbGlua19jbGs7CisJdTY0IHJh dGlvX2J5X3R1OworCXU2NCBhdmVyYWdlX3ZhbGlkMjsKKwl1NjQgZXh0cmFfYnVmZmVyX21hcmdp bjsKKwlpbnQgbmV3X3ZhbGlkX2JvdW5kYXJ5X2xpbms7CisKKwl1NjQgcmVzdWx0aW5nX3ZhbGlk X3RtcDsKKwl1NjQgcmF0aW9fYnlfdHVfdG1wOworCWludCBuX3R1c190bXA7CisJaW50IGV4dHJh X3BjbGtfY3ljbGVzX3RtcDsKKwlpbnQgZXh0cmFfcGNsa19jeWNsZXNfaW5fbGNsa190bXA7CisJ aW50IGV4dHJhX3JlcV9ieXRlc19uZXdfdG1wOworCWludCBmaWxsZXJfc2l6ZV90bXA7CisJaW50 IGxvd2VyX2ZpbGxlcl9zaXplX3RtcDsKKwlpbnQgZGVsYXlfc3RhcnRfbGlua190bXA7CisJaW50 IG1pbl9oYmxhbmtfdG1wID0gMDsKKwlib29sIGV4dHJhX3JlcV9ieXRlc19pc19uZWcgPSBmYWxz ZTsKKwlzdHJ1Y3QgZHBfcGFuZWxfaW5mbyAqcGluZm8gPSAmY3RybC0+cGFuZWwtPnBpbmZvOwor CisJdTggZHBfYnJ1dGVfZm9yY2UgPSAxOworCXU2NCBicnV0ZV9mb3JjZV90aHJlc2hvbGQgPSAx MDsKKwl1NjQgZGlmZl9hYnM7CisKKwlsbl9jbnQgPSAgY3RybC0+bGluay0+bGlua19wYXJhbXMu bGFuZV9jb3VudDsKKworCWJwcCA9IHBpbmZvLT5icHA7CisJbHdpZHRoID0gcGluZm8tPmhfYWN0 aXZlOworCWhfYmxhbmsgPSBwaW5mby0+aF9iYWNrX3BvcmNoICsgcGluZm8tPmhfZnJvbnRfcG9y Y2ggKworCQkJCXBpbmZvLT5oX3N5bmNfd2lkdGg7CisJcGNsayA9IHBpbmZvLT5waXhlbF9jbGtf a2h6ICogMTAwMDsKKworCWJvdW5kYXJ5X21vZGVyYXRpb25fZW4gPSAwOworCXVwcGVyX2Jkcnlf Y250ID0gMDsKKwlsb3dlcl9iZHJ5X2NudCA9IDA7CisJaV91cHBlcl9iZHJ5X2NudCA9IDA7CisJ aV9sb3dlcl9iZHJ5X2NudCA9IDA7CisJdmFsaWRfbG93ZXJfYm91bmRhcnlfbGluayA9IDA7CisJ ZXZlbl9kaXN0cmlidXRpb25fYmYgPSAwOworCWV2ZW5fZGlzdHJpYnV0aW9uX2xlZ2FjeSA9IDA7 CisJZXZlbl9kaXN0cmlidXRpb24gPSAwOworCW1pbl9oYmxhbmsgPSAwOworCisJbGNsayA9IGRy bV9kcF9id19jb2RlX3RvX2xpbmtfcmF0ZSgKKwkJY3RybC0+bGluay0+bGlua19wYXJhbXMuYndf Y29kZSkgKiBEUF9LSFpfVE9fSFo7CisKKwlwcl9kZWJ1ZygicGNsaz0lbGxkLCBhY3RpdmVfd2lk dGg9JWQsIGhfYmxhbms9JWRcbiIsCisJCQkJCQlwY2xrLCBsd2lkdGgsIGhfYmxhbmspOworCXBy X2RlYnVnKCJsY2xrID0gJWxsZCwgbG5fY250ID0gJWRcbiIsIGxjbGssIGxuX2NudCk7CisJcmF0 aW8gPSBkaXY2NF91NjRfcmVtKHBjbGsgKiBicHAgKiBtdWx0aXBsaWVyLAorCQkJCTggKiBsbl9j bnQgKiBsY2xrLCAmcmVtaW5kZXIpOworCXJhdGlvID0gZGl2NjRfdTY0KChwY2xrICogYnBwICog bXVsdGlwbGllciksICg4ICogbG5fY250ICogbGNsaykpOworCW9yaWdpbmFsX3JhdGlvID0gcmF0 aW87CisKKwlleHRyYV9idWZmZXJfbWFyZ2luID0gcm91bmR1cF91NjQoZGl2NjRfdTY0KGV4dHJh X3BjbGtfY3ljbGVfZGVsYXkKKwkJCQkqIGxjbGsgKiBtdWx0aXBsaWVyLCBwY2xrKSwgbXVsdGlw bGllcik7CisJZXh0cmFfYnVmZmVyX21hcmdpbiA9IGRpdjY0X3U2NChleHRyYV9idWZmZXJfbWFy Z2luLCBtdWx0aXBsaWVyKTsKKworCS8qIFRvIGRlYWwgd2l0aCBjYXNlcyB3aGVyZSBsaW5lcyBh cmUgbm90IGRpc3RyaWJ1dGFibGUgKi8KKwlpZiAoKChsd2lkdGggJSBsbl9jbnQpICE9IDApICYm IHJhdGlvIDwgbXVsdGlwbGllcikgeworCQlyYXRpbyA9IHJhdGlvICogcmF0aW9fc2NhbGU7CisJ CXJhdGlvID0gcmF0aW8gPCAoMTAwMCAqIG11bHRpcGxpZXIpCisJCQkJPyByYXRpbyA6ICgxMDAw ICogbXVsdGlwbGllcik7CisJfQorCXByX2RlYnVnKCJyYXRpbyA9ICVsbGRcbiIsIHJhdGlvKTsK KworCWZvciAodHVfc2l6ZSA9IDMyOyB0dV9zaXplIDw9IDY0OyB0dV9zaXplKyspIHsKKwkJdGVt cCA9IHJhdGlvICogdHVfc2l6ZTsKKwkJdGVtcDIgPSAoKHRlbXAgLyBtdWx0aXBsaWVyKSArIDEp ICogbXVsdGlwbGllcjsKKwkJbl9lcnIgPSByb3VuZHVwX3U2NCh0ZW1wLCBtdWx0aXBsaWVyKSAt IHRlbXA7CisKKwkJaWYgKG5fZXJyIDwgZXJyKSB7CisJCQllcnIgPSBuX2VycjsKKwkJCXR1X3Np emVfZGVzaXJlZCA9IHR1X3NpemU7CisJCX0KKwl9CisJcHJfZGVidWcoIkluZm86IHR1X3NpemVf ZGVzaXJlZCA9ICVkXG4iLCB0dV9zaXplX2Rlc2lyZWQpOworCisJdHVfc2l6ZV9taW51czEgPSB0 dV9zaXplX2Rlc2lyZWQgLSAxOworCisJdmFsaWRfYm91bmRhcnlfbGluayA9IHJvdW5kdXBfdTY0 KHJhdGlvICogdHVfc2l6ZV9kZXNpcmVkLCBtdWx0aXBsaWVyKTsKKwl2YWxpZF9ib3VuZGFyeV9s aW5rIC89IG11bHRpcGxpZXI7CisJbl90dXMgPSByb3VuZGRvd24oKGx3aWR0aCAqIGJwcCAqIG11 bHRpcGxpZXIpCisJCQkvICg4ICogdmFsaWRfYm91bmRhcnlfbGluayksIG11bHRpcGxpZXIpIC8g bXVsdGlwbGllcjsKKwlldmVuX2Rpc3RyaWJ1dGlvbl9sZWdhY3kgPSBuX3R1cyAlIGxuX2NudCA9 PSAwID8gMSA6IDA7CisJcHJfZGVidWcoIkluZm86IG5fc3ltYm9sX3Blcl90dT0lZCwgbnVtYmVy X29mX3R1cz0lZFxuIiwKKwkJCQkJdmFsaWRfYm91bmRhcnlfbGluaywgbl90dXMpOworCisJZXh0 cmFfYnl0ZXMgPSByb3VuZHVwX3U2NCgobl90dXMgKyAxKQorCQkJKiAoKHZhbGlkX2JvdW5kYXJ5 X2xpbmsgKiBtdWx0aXBsaWVyKQorCQkJLSAob3JpZ2luYWxfcmF0aW8gKiB0dV9zaXplX2Rlc2ly ZWQpKSwgbXVsdGlwbGllcik7CisJZXh0cmFfYnl0ZXMgLz0gbXVsdGlwbGllcjsKKwlleHRyYV9w Y2xrX2N5Y2xlcyA9IHJvdW5kdXAoZXh0cmFfYnl0ZXMgKiA4ICogbXVsdGlwbGllciAvIGJwcCwK KwkJCW11bHRpcGxpZXIpOworCWV4dHJhX3BjbGtfY3ljbGVzIC89IG11bHRpcGxpZXI7CisJZXh0 cmFfcGNsa19jeWNsZXNfaW5fbGlua19jbGsgPSByb3VuZHVwX3U2NChkaXY2NF91NjQoZXh0cmFf cGNsa19jeWNsZXMKKwkJCQkqIGxjbGsgKiBtdWx0aXBsaWVyLCBwY2xrKSwgbXVsdGlwbGllcik7 CisJZXh0cmFfcGNsa19jeWNsZXNfaW5fbGlua19jbGsgLz0gbXVsdGlwbGllcjsKKwlmaWxsZXJf c2l6ZSA9IHJvdW5kdXBfdTY0KCh0dV9zaXplX2Rlc2lyZWQgLSB2YWxpZF9ib3VuZGFyeV9saW5r KQorCQkJCQkJKiBtdWx0aXBsaWVyLCBtdWx0aXBsaWVyKTsKKwlmaWxsZXJfc2l6ZSAvPSBtdWx0 aXBsaWVyOworCXJhdGlvX2J5X3R1ID0gZGl2NjRfdTY0KHJhdGlvICogdHVfc2l6ZV9kZXNpcmVk LCBtdWx0aXBsaWVyKTsKKworCXByX2RlYnVnKCJleHRyYV9wY2xrX2N5Y2xlc19pbl9saW5rX2Ns az0lZCwgZXh0cmFfYnl0ZXM9JWRcbiIsCisJCQkJZXh0cmFfcGNsa19jeWNsZXNfaW5fbGlua19j bGssIGV4dHJhX2J5dGVzKTsKKwlwcl9kZWJ1ZygiZXh0cmFfcGNsa19jeWNsZXNfaW5fbGlua19j bGs9JWRcbiIsCisJCQkJZXh0cmFfcGNsa19jeWNsZXNfaW5fbGlua19jbGspOworCXByX2RlYnVn KCJmaWxsZXJfc2l6ZT0lZCwgZXh0cmFfYnVmZmVyX21hcmdpbj0lbGxkXG4iLAorCQkJCWZpbGxl cl9zaXplLCBleHRyYV9idWZmZXJfbWFyZ2luKTsKKworCWRlbGF5X3N0YXJ0X2xpbmsgPSAoKGV4 dHJhX2J5dGVzID4gZXh0cmFfcGNsa19jeWNsZXNfaW5fbGlua19jbGspCisJCQk/IGV4dHJhX2J5 dGVzCisJCQk6IGV4dHJhX3BjbGtfY3ljbGVzX2luX2xpbmtfY2xrKQorCQkJCSsgZmlsbGVyX3Np emUgKyBleHRyYV9idWZmZXJfbWFyZ2luOworCXJlc3VsdGluZ192YWxpZCA9IHZhbGlkX2JvdW5k YXJ5X2xpbms7CisJcHJfZGVidWcoIkluZm86IGRlbGF5X3N0YXJ0X2xpbms9JWQsIGZpbGxlcl9z aXplPSVkXG4iLAorCQkJCWRlbGF5X3N0YXJ0X2xpbmssIGZpbGxlcl9zaXplKTsKKwlwcl9kZWJ1 ZygidmFsaWRfYm91bmRhcnlfbGluaz0lZCByYXRpb19ieV90dT0lbGxkXG4iLAorCQkJCXZhbGlk X2JvdW5kYXJ5X2xpbmssIHJhdGlvX2J5X3R1KTsKKworCWRpZmZfYWJzID0gKHJlc3VsdGluZ192 YWxpZCA+PSByYXRpb19ieV90dSkKKwkJCQk/IChyZXN1bHRpbmdfdmFsaWQgLSByYXRpb19ieV90 dSkKKwkJCQk6IChyYXRpb19ieV90dSAtIHJlc3VsdGluZ192YWxpZCk7CisKKwlpZiAoZXJyICE9 IDAgJiYgKChkaWZmX2FicyA+IGJydXRlX2ZvcmNlX3RocmVzaG9sZCkKKwkJCXx8IChldmVuX2Rp c3RyaWJ1dGlvbl9sZWdhY3kgPT0gMCkKKwkJCXx8IChkcF9icnV0ZV9mb3JjZSA9PSAxKSkpIHsK KwkJZXJyID0gbXVsdGlwbGllcjsKKwkJZm9yICh0dV9zaXplID0gMzI7IHR1X3NpemUgPD0gNjQ7 IHR1X3NpemUrKykgeworCQkJZm9yIChpX3VwcGVyX2JkcnlfY250ID0gMTsgaV91cHBlcl9iZHJ5 X2NudCA8PSAxNTsKKwkJCQkJCWlfdXBwZXJfYmRyeV9jbnQrKykgeworCQkJCWZvciAoaV9sb3dl cl9iZHJ5X2NudCA9IDE7CisJCQkJCWlfbG93ZXJfYmRyeV9jbnQgPD0gMTU7CisJCQkJCWlfbG93 ZXJfYmRyeV9jbnQrKykgeworCQkJCQluZXdfdmFsaWRfYm91bmRhcnlfbGluayA9CisJCQkJCQly b3VuZHVwX3U2NChyYXRpbworCQkJCQkJKiB0dV9zaXplLCBtdWx0aXBsaWVyKTsKKwkJCQkJYXZl cmFnZV92YWxpZDIgPSAoaV91cHBlcl9iZHJ5X2NudAorCQkJCQkJKiBuZXdfdmFsaWRfYm91bmRh cnlfbGluaworCQkJCQkJKyBpX2xvd2VyX2JkcnlfY250CisJCQkJCQkqIChuZXdfdmFsaWRfYm91 bmRhcnlfbGluaworCQkJCQkJCS0gbXVsdGlwbGllcikpCisJCQkJCQkvIChpX3VwcGVyX2Jkcnlf Y250CisJCQkJCQkJKyBpX2xvd2VyX2JkcnlfY250KTsKKwkJCQkJbl90dXMgPSByb3VuZGRvd25f dTY0KGRpdjY0X3U2NChsd2lkdGgKKwkJCQkJCSogbXVsdGlwbGllciAqIG11bHRpcGxpZXIKKwkJ CQkJCSogKGJwcCAvIDgpLCBhdmVyYWdlX3ZhbGlkMiksCisJCQkJCQkJbXVsdGlwbGllcik7CisJ CQkJCW5fdHVzIC89IG11bHRpcGxpZXI7CisJCQkJCW5fdHVzX3Blcl9sYW5lCisJCQkJCQk9IHJv dW5kZG93bihuX3R1cworCQkJCQkJCSogbXVsdGlwbGllcgorCQkJCQkJCS8gbG5fY250LCBtdWx0 aXBsaWVyKTsKKwkJCQkJbl90dXNfcGVyX2xhbmUgLz0gbXVsdGlwbGllcjsKKwkJCQkJcGFpcmVk X3R1cyA9CisJCQkJCQlyb3VuZGRvd24oKG5fdHVzX3Blcl9sYW5lKQorCQkJCQkJCSogbXVsdGlw bGllcgorCQkJCQkJCS8gKGlfdXBwZXJfYmRyeV9jbnQKKwkJCQkJCQkrIGlfbG93ZXJfYmRyeV9j bnQpLAorCQkJCQkJCW11bHRpcGxpZXIpOworCQkJCQlwYWlyZWRfdHVzIC89IG11bHRpcGxpZXI7 CisJCQkJCXJlbWFpbmRlcl90dXMgPSBuX3R1c19wZXJfbGFuZQorCQkJCQkJCS0gcGFpcmVkX3R1 cworCQkJCQkJKiAoaV91cHBlcl9iZHJ5X2NudAorCQkJCQkJCSsgaV9sb3dlcl9iZHJ5X2NudCk7 CisJCQkJCWlmICgocmVtYWluZGVyX3R1cworCQkJCQkJLSBpX3VwcGVyX2JkcnlfY250KSA+IDAp IHsKKwkJCQkJCXJlbWFpbmRlcl90dXNfdXBwZXIKKwkJCQkJCQk9IGlfdXBwZXJfYmRyeV9jbnQ7 CisJCQkJCQlyZW1haW5kZXJfdHVzX2xvd2VyID0KKwkJCQkJCQlyZW1haW5kZXJfdHVzCisJCQkJ CQkJLSBpX3VwcGVyX2JkcnlfY250OworCQkJCQl9IGVsc2UgeworCQkJCQkJcmVtYWluZGVyX3R1 c191cHBlcgorCQkJCQkJCT0gcmVtYWluZGVyX3R1czsKKwkJCQkJCXJlbWFpbmRlcl90dXNfbG93 ZXIgPSAwOworCQkJCQl9CisJCQkJCXRvdGFsX3ZhbGlkID0gcGFpcmVkX3R1cworCQkJCQkJKiAo aV91cHBlcl9iZHJ5X2NudAorCQkJCQkJKiBuZXdfdmFsaWRfYm91bmRhcnlfbGluaworCQkJCQkJ CSsgaV9sb3dlcl9iZHJ5X2NudAorCQkJCQkJKiAobmV3X3ZhbGlkX2JvdW5kYXJ5X2xpbmsKKwkJ CQkJCQktIG11bHRpcGxpZXIpKQorCQkJCQkJKyAocmVtYWluZGVyX3R1c191cHBlcgorCQkJCQkJ KiBuZXdfdmFsaWRfYm91bmRhcnlfbGluaykKKwkJCQkJCSsgKHJlbWFpbmRlcl90dXNfbG93ZXIK KwkJCQkJCSogKG5ld192YWxpZF9ib3VuZGFyeV9saW5rCisJCQkJCQkJLSBtdWx0aXBsaWVyKSk7 CisJCQkJCW5fZXJyX25lZyA9IG5uX2Vycl9uZWcgPSBmYWxzZTsKKwkJCQkJZWZmZWN0aXZlX3Zh bGlkCisJCQkJCQk9IGRpdl91NjQodG90YWxfdmFsaWQsCisJCQkJCQkJbl90dXNfcGVyX2xhbmUp OworCQkJCQluX25fZXJyID0gKGVmZmVjdGl2ZV92YWxpZAorCQkJCQkJCT49IChyYXRpbyAqIHR1 X3NpemUpKQorCQkJCQkJPyAoZWZmZWN0aXZlX3ZhbGlkCisJCQkJCQkJLSAocmF0aW8gKiB0dV9z aXplKSkKKwkJCQkJCTogKChyYXRpbyAqIHR1X3NpemUpCisJCQkJCQkJLSBlZmZlY3RpdmVfdmFs aWQpOworCQkJCQlpZiAoZWZmZWN0aXZlX3ZhbGlkIDwgKHJhdGlvICogdHVfc2l6ZSkpCisJCQkJ CQlubl9lcnJfbmVnID0gdHJ1ZTsKKwkJCQkJbl9lcnIgPSAoYXZlcmFnZV92YWxpZDIKKwkJCQkJ CT49IChyYXRpbyAqIHR1X3NpemUpKQorCQkJCQkJPyAoYXZlcmFnZV92YWxpZDIKKwkJCQkJCQkt IChyYXRpbyAqIHR1X3NpemUpKQorCQkJCQkJOiAoKHJhdGlvICogdHVfc2l6ZSkKKwkJCQkJCQkt IGF2ZXJhZ2VfdmFsaWQyKTsKKwkJCQkJaWYgKGF2ZXJhZ2VfdmFsaWQyIDwgKHJhdGlvICogdHVf c2l6ZSkpCisJCQkJCQluX2Vycl9uZWcgPSB0cnVlOworCQkJCQlldmVuX2Rpc3RyaWJ1dGlvbiA9 CisJCQkJCQluX3R1cyAlIGxuX2NudCA9PSAwID8gMSA6IDA7CisJCQkJCWRpZmZfYWJzID0KKwkJ CQkJCXJlc3VsdGluZ192YWxpZCA+PSByYXRpb19ieV90dQorCQkJCQkJPyAocmVzdWx0aW5nX3Zh bGlkCisJCQkJCQkJLSByYXRpb19ieV90dSkKKwkJCQkJCTogKHJhdGlvX2J5X3R1CisJCQkJCQkJ LSByZXN1bHRpbmdfdmFsaWQpOworCisJCQkJCXJlc3VsdGluZ192YWxpZF90bXAgPSBkaXY2NF91 NjQoCisJCQkJCQkoaV91cHBlcl9iZHJ5X2NudAorCQkJCQkJKiBuZXdfdmFsaWRfYm91bmRhcnlf bGluaworCQkJCQkJKyBpX2xvd2VyX2JkcnlfY250CisJCQkJCQkqIChuZXdfdmFsaWRfYm91bmRh cnlfbGluaworCQkJCQkJCS0gbXVsdGlwbGllcikpLAorCQkJCQkJKGlfdXBwZXJfYmRyeV9jbnQK KwkJCQkJCQkrIGlfbG93ZXJfYmRyeV9jbnQpKTsKKwkJCQkJcmF0aW9fYnlfdHVfdG1wID0KKwkJ CQkJCW9yaWdpbmFsX3JhdGlvICogdHVfc2l6ZTsKKwkJCQkJcmF0aW9fYnlfdHVfdG1wIC89IG11 bHRpcGxpZXI7CisJCQkJCW5fdHVzX3RtcCA9IHJvdW5kZG93bl91NjQoCisJCQkJCQlkaXY2NF91 NjQobHdpZHRoCisJCQkJCQkqIG11bHRpcGxpZXIgKiBtdWx0aXBsaWVyCisJCQkJCQkqIGJwcCAv IDgsCisJCQkJCQlyZXN1bHRpbmdfdmFsaWRfdG1wKSwKKwkJCQkJCW11bHRpcGxpZXIpOworCQkJ CQluX3R1c190bXAgLz0gbXVsdGlwbGllcjsKKworCQkJCQl0ZW1wMyA9IChyZXN1bHRpbmdfdmFs aWRfdG1wCisJCQkJCQk+PSAob3JpZ2luYWxfcmF0aW8gKiB0dV9zaXplKSkKKwkJCQkJCT8gKHJl c3VsdGluZ192YWxpZF90bXAKKwkJCQkJCS0gb3JpZ2luYWxfcmF0aW8gKiB0dV9zaXplKQorCQkJ CQkJOiAob3JpZ2luYWxfcmF0aW8gKiB0dV9zaXplKQorCQkJCQkJLSByZXN1bHRpbmdfdmFsaWRf dG1wOworCQkJCQl0ZW1wMyA9IChuX3R1c190bXAgKyAxKSAqIHRlbXAzOworCQkJCQl0ZW1wNCA9 IChuZXdfdmFsaWRfYm91bmRhcnlfbGluaworCQkJCQkJPj0gKG9yaWdpbmFsX3JhdGlvICogdHVf c2l6ZSkpCisJCQkJCQk/IChuZXdfdmFsaWRfYm91bmRhcnlfbGluaworCQkJCQkJCS0gb3JpZ2lu YWxfcmF0aW8KKwkJCQkJCQkqIHR1X3NpemUpCisJCQkJCQk6IChvcmlnaW5hbF9yYXRpbyAqIHR1 X3NpemUpCisJCQkJCQktIG5ld192YWxpZF9ib3VuZGFyeV9saW5rOworCQkJCQl0ZW1wNCA9IChp X3VwcGVyX2JkcnlfY250CisJCQkJCQkJKiBsbl9jbnQgKiB0ZW1wNCk7CisKKwkJCQkJdGVtcDMg PSByb3VuZHVwX3U2NCh0ZW1wMywgbXVsdGlwbGllcik7CisJCQkJCXRlbXA0ID0gcm91bmR1cF91 NjQodGVtcDQsIG11bHRpcGxpZXIpOworCQkJCQlkcF9jdHJsX2dldF9leHRyYV9yZXFfYnl0ZXMK KwkJCQkJCShyZXN1bHRpbmdfdmFsaWRfdG1wLAorCQkJCQkJbmV3X3ZhbGlkX2JvdW5kYXJ5X2xp bmssCisJCQkJCQl0ZW1wMywgdGVtcDQsCisJCQkJCQkmZXh0cmFfcmVxX2J5dGVzX2lzX25lZywK KwkJCQkJCSZyZXN1bHQsCisJCQkJCQkob3JpZ2luYWxfcmF0aW8gKiB0dV9zaXplKSk7CisJCQkJ CWV4dHJhX3JlcV9ieXRlc19uZXdfdG1wCisJCQkJCQk9IGRpdjY0X3VsKHJlc3VsdCwgbXVsdGlw bGllcik7CisJCQkJCWlmICgoZXh0cmFfcmVxX2J5dGVzX2lzX25lZykKKwkJCQkJCSYmIChleHRy YV9yZXFfYnl0ZXNfbmV3X3RtcAorCQkJCQkJCT4gMSkpCisJCQkJCQlleHRyYV9yZXFfYnl0ZXNf bmV3X3RtcAorCQkJCQkJPSBleHRyYV9yZXFfYnl0ZXNfbmV3X3RtcCAtIDE7CisJCQkJCWlmIChl eHRyYV9yZXFfYnl0ZXNfbmV3X3RtcCA9PSAwKQorCQkJCQkJZXh0cmFfcmVxX2J5dGVzX25ld190 bXAgPSAxOworCQkJCQlleHRyYV9wY2xrX2N5Y2xlc190bXAgPQorCQkJCQkJKHU2NCkoZXh0cmFf cmVxX2J5dGVzX25ld190bXAKKwkJCQkJCSAgICAgICogOCAqIG11bHRpcGxpZXIpIC8gYnBwOwor CQkJCQlleHRyYV9wY2xrX2N5Y2xlc190bXAgLz0gbXVsdGlwbGllcjsKKworCQkJCQlpZiAoZXh0 cmFfcGNsa19jeWNsZXNfdG1wIDw9IDApCisJCQkJCQlleHRyYV9wY2xrX2N5Y2xlc190bXAgPSAx OworCQkJCQlleHRyYV9wY2xrX2N5Y2xlc19pbl9sY2xrX3RtcCA9CisJCQkJCQlyb3VuZHVwX3U2 NChkaXY2NF91NjQoCisJCQkJCQkJZXh0cmFfcGNsa19jeWNsZXNfdG1wCisJCQkJCQkJKiBsY2xr ICogbXVsdGlwbGllciwKKwkJCQkJCQlwY2xrKSwgbXVsdGlwbGllcik7CisJCQkJCWV4dHJhX3Bj bGtfY3ljbGVzX2luX2xjbGtfdG1wCisJCQkJCQkvPSBtdWx0aXBsaWVyOworCQkJCQlmaWxsZXJf c2l6ZV90bXAgPSByb3VuZHVwX3U2NCgKKwkJCQkJCSh0dV9zaXplICogbXVsdGlwbGllciAqCisJ CQkJCQluZXdfdmFsaWRfYm91bmRhcnlfbGluayksCisJCQkJCQltdWx0aXBsaWVyKTsKKwkJCQkJ ZmlsbGVyX3NpemVfdG1wIC89IG11bHRpcGxpZXI7CisJCQkJCWxvd2VyX2ZpbGxlcl9zaXplX3Rt cCA9CisJCQkJCQlmaWxsZXJfc2l6ZV90bXAgKyAxOworCQkJCQlpZiAoZXh0cmFfcmVxX2J5dGVz X2lzX25lZykKKwkJCQkJCXRlbXAzID0gKGV4dHJhX3JlcV9ieXRlc19uZXdfdG1wCisJCQkJCQk+ IGV4dHJhX3BjbGtfY3ljbGVzX2luX2xjbGtfdG1wCisJCQkJCQk/IGV4dHJhX3BjbGtfY3ljbGVz X2luX2xjbGtfdG1wCisJCQkJCQk6IGV4dHJhX3JlcV9ieXRlc19uZXdfdG1wKTsKKwkJCQkJZWxz ZQorCQkJCQkJdGVtcDMgPSAoZXh0cmFfcmVxX2J5dGVzX25ld190bXAKKwkJCQkJCT4gZXh0cmFf cGNsa19jeWNsZXNfaW5fbGNsa190bXAKKwkJCQkJCT8gZXh0cmFfcmVxX2J5dGVzX25ld190bXAg OgorCQkJCQkJZXh0cmFfcGNsa19jeWNsZXNfaW5fbGNsa190bXApOworCisJCQkJCXRlbXA0ID0g bG93ZXJfZmlsbGVyX3NpemVfdG1wCisJCQkJCQkrIGV4dHJhX2J1ZmZlcl9tYXJnaW47CisJCQkJ CWlmIChleHRyYV9yZXFfYnl0ZXNfaXNfbmVnKQorCQkJCQkJZGVsYXlfc3RhcnRfbGlua190bXAK KwkJCQkJCQk9ICh0ZW1wMyA+PSB0ZW1wNCkKKwkJCQkJCQk/ICh0ZW1wMyAtIHRlbXA0KQorCQkJ CQkJCTogKHRlbXA0IC0gdGVtcDMpOworCQkJCQllbHNlCisJCQkJCQlkZWxheV9zdGFydF9saW5r X3RtcAorCQkJCQkJCT0gdGVtcDMgKyB0ZW1wNDsKKworCQkJCQltaW5faGJsYW5rX3RtcCA9IChp bnQpZGl2NjRfdTY0KAorCQkJCQkJcm91bmR1cF91NjQoCisJCQkJCQlkaXY2NF91NjQoZGVsYXlf c3RhcnRfbGlua190bXAKKwkJCQkJCSogcGNsayAqIG11bHRpcGxpZXIsIGxjbGspLAorCQkJCQkJ bXVsdGlwbGllciksIG11bHRpcGxpZXIpCisJCQkJCQkrIGhibGFua19tYXJnaW47CisKKwkJCQkJ aWYgKCgoZXZlbl9kaXN0cmlidXRpb24gPT0gMSkKKwkJCQkJCXx8ICgoZXZlbl9kaXN0cmlidXRp b25fYmYgPT0gMCkKKwkJCQkJCSYmIChldmVuX2Rpc3RyaWJ1dGlvbl9sZWdhY3kKKwkJCQkJCQkJ PT0gMCkpKQorCQkJCQkJJiYgIW5fZXJyX25lZyAmJiAhbm5fZXJyX25lZworCQkJCQkJJiYgbl9u X2VyciA8IGVycgorCQkJCQkJJiYgKG5fbl9lcnIgPCBkaWZmX2FicworCQkJCQkJfHwgKGRwX2Jy dXRlX2ZvcmNlID09IDEpKQorCQkJCQkJJiYgKG5ld192YWxpZF9ib3VuZGFyeV9saW5rCisJCQkJ CQkJCQktIDEpID4gMAorCQkJCQkJJiYgKGhfYmxhbmsgPj0KKwkJCQkJCQkodTMyKW1pbl9oYmxh bmtfdG1wKSkgeworCQkJCQkJdXBwZXJfYmRyeV9jbnQgPQorCQkJCQkJCWlfdXBwZXJfYmRyeV9j bnQ7CisJCQkJCQlsb3dlcl9iZHJ5X2NudCA9CisJCQkJCQkJaV9sb3dlcl9iZHJ5X2NudDsKKwkJ CQkJCWVyciA9IG5fbl9lcnI7CisJCQkJCQlib3VuZGFyeV9tb2RlcmF0aW9uX2VuID0gMTsKKwkJ CQkJCXR1X3NpemVfZGVzaXJlZCA9IHR1X3NpemU7CisJCQkJCQl2YWxpZF9ib3VuZGFyeV9saW5r ID0KKwkJCQkJCQluZXdfdmFsaWRfYm91bmRhcnlfbGluazsKKwkJCQkJCWVmZmVjdGl2ZV92YWxp ZF9yZWNvcmRlZAorCQkJCQkJCT0gZWZmZWN0aXZlX3ZhbGlkOworCQkJCQkJZGVsYXlfc3RhcnRf bGluaworCQkJCQkJCT0gZGVsYXlfc3RhcnRfbGlua190bXA7CisJCQkJCQlmaWxsZXJfc2l6ZSA9 IGZpbGxlcl9zaXplX3RtcDsKKwkJCQkJCW1pbl9oYmxhbmsgPSBtaW5faGJsYW5rX3RtcDsKKwkJ CQkJCW5fdHVzID0gbl90dXNfdG1wOworCQkJCQkJZXZlbl9kaXN0cmlidXRpb25fYmYgPSAxOwor CisJCQkJCQlwcl9kZWJ1ZygidXBwZXJfYmRyeV9jbnQ9JWQsIGxvd2VyX2JvdW5kYXJ5X2NudD0l ZCwgZXJyPSVsbGQsIHR1X3NpemVfZGVzaXJlZD0lZCwgdmFsaWRfYm91bmRhcnlfbGluaz0lZCwg ZWZmZWN0aXZlX3ZhbGlkPSVsbGRcbiIsCisJCQkJCQkJdXBwZXJfYmRyeV9jbnQsCisJCQkJCQkJ bG93ZXJfYmRyeV9jbnQsIGVyciwKKwkJCQkJCQl0dV9zaXplX2Rlc2lyZWQsCisJCQkJCQkJdmFs aWRfYm91bmRhcnlfbGluaywKKwkJCQkJCQllZmZlY3RpdmVfdmFsaWQpOworCQkJCQl9CisJCQkJ fQorCQkJfQorCQl9CisKKwkJaWYgKGJvdW5kYXJ5X21vZGVyYXRpb25fZW4gPT0gMSkgeworCQkJ cmVzdWx0aW5nX3ZhbGlkID0gKHU2NCkodXBwZXJfYmRyeV9jbnQKKwkJCQkJKnZhbGlkX2JvdW5k YXJ5X2xpbmsgKyBsb3dlcl9iZHJ5X2NudAorCQkJCQkqICh2YWxpZF9ib3VuZGFyeV9saW5rIC0g MSkpCisJCQkJCS8gKHVwcGVyX2JkcnlfY250ICsgbG93ZXJfYmRyeV9jbnQpOworCQkJcmF0aW9f YnlfdHUgPSBvcmlnaW5hbF9yYXRpbyAqIHR1X3NpemVfZGVzaXJlZDsKKwkJCXZhbGlkX2xvd2Vy X2JvdW5kYXJ5X2xpbmsgPQorCQkJCSh2YWxpZF9ib3VuZGFyeV9saW5rIC8gbXVsdGlwbGllcikg LSAxOworCisJCQl0dV9zaXplX21pbnVzMSA9IHR1X3NpemVfZGVzaXJlZCAtIDE7CisJCQlldmVu X2Rpc3RyaWJ1dGlvbl9iZiA9IDE7CisJCQl2YWxpZF9ib3VuZGFyeV9saW5rIC89IG11bHRpcGxp ZXI7CisJCQlwcl9kZWJ1ZygiSW5mbzogQm91bmRhcnlfbW9kZXJhdGlvbiBlbmFibGVkXG4iKTsK KwkJfQorCX0KKworCW1pbl9oYmxhbmsgPSAoKGludCkgcm91bmR1cF91NjQoZGl2NjRfdTY0KGRl bGF5X3N0YXJ0X2xpbmsgKiBwY2xrCisJCQkqIG11bHRpcGxpZXIsIGxjbGspLCBtdWx0aXBsaWVy KSkKKwkJCS8gbXVsdGlwbGllciArIGhibGFua19tYXJnaW47CisJaWYgKGhfYmxhbmsgPCAodTMy KW1pbl9oYmxhbmspIHsKKwkJcHJfZGVidWcoIiBXQVJOSU5HOiBydW5faWR4PSVkIFByb2dyYW1t ZWQgaF9ibGFuayAlZCBpcyBzbWFsbGVyIHRoYW4gdGhlIG1pbl9oYmxhbmsgJWQgc3VwcG9ydGVk LlxuIiwKKwkJCQkJcnVuX2lkeCwgaF9ibGFuaywgbWluX2hibGFuayk7CisJfQorCisJaWYgKGZp Zm9fZW1wdHkpCXsKKwkJdHVfc2l6ZV9taW51czEgPSAzMTsKKwkJdmFsaWRfYm91bmRhcnlfbGlu ayA9IDMyOworCQlkZWxheV9zdGFydF9saW5rID0gMDsKKwkJYm91bmRhcnlfbW9kZXJhdGlvbl9l biA9IDA7CisJfQorCisJcHJfZGVidWcoInR1X3NpemVfbWludXMxPSVkIHZhbGlkX2JvdW5kYXJ5 X2xpbms9JWQgZGVsYXlfc3RhcnRfbGluaz0lZCBib3VuZGFyeV9tb2RlcmF0aW9uX2VuPSVkXG4g dXBwZXJfYm91bmRhcnlfY250PSVkIGxvd2VyX2JvdW5kYXJ5X2NudD0lZCB2YWxpZF9sb3dlcl9i b3VuZGFyeV9saW5rPSVkIG1pbl9oYmxhbms9JWRcbiIsCisJCXR1X3NpemVfbWludXMxLCB2YWxp ZF9ib3VuZGFyeV9saW5rLCBkZWxheV9zdGFydF9saW5rLAorCQlib3VuZGFyeV9tb2RlcmF0aW9u X2VuLCB1cHBlcl9iZHJ5X2NudCwgbG93ZXJfYmRyeV9jbnQsCisJCXZhbGlkX2xvd2VyX2JvdW5k YXJ5X2xpbmssIG1pbl9oYmxhbmspOworCisJdHVfdGFibGUtPnZhbGlkX2JvdW5kYXJ5X2xpbmsg PSB2YWxpZF9ib3VuZGFyeV9saW5rOworCXR1X3RhYmxlLT5kZWxheV9zdGFydF9saW5rID0gZGVs YXlfc3RhcnRfbGluazsKKwl0dV90YWJsZS0+Ym91bmRhcnlfbW9kZXJhdGlvbl9lbiA9IGJvdW5k YXJ5X21vZGVyYXRpb25fZW47CisJdHVfdGFibGUtPnZhbGlkX2xvd2VyX2JvdW5kYXJ5X2xpbmsg PSB2YWxpZF9sb3dlcl9ib3VuZGFyeV9saW5rOworCXR1X3RhYmxlLT51cHBlcl9ib3VuZGFyeV9j b3VudCA9IHVwcGVyX2JkcnlfY250OworCXR1X3RhYmxlLT5sb3dlcl9ib3VuZGFyeV9jb3VudCA9 IGxvd2VyX2JkcnlfY250OworCXR1X3RhYmxlLT50dV9zaXplX21pbnVzMSA9IHR1X3NpemVfbWlu dXMxOworfQorCitzdGF0aWMgdm9pZCBkcF9jdHJsX3NldHVwX3RyX3VuaXQoc3RydWN0IGRwX2N0 cmxfcHJpdmF0ZSAqY3RybCkKK3sKKwl1MzIgZHBfdHUgPSAweDA7CisJdTMyIHZhbGlkX2JvdW5k YXJ5ID0gMHgwOworCXUzMiB2YWxpZF9ib3VuZGFyeTIgPSAweDA7CisJc3RydWN0IGRwX3ZjX3R1 X21hcHBpbmdfdGFibGUgdHVfY2FsY190YWJsZTsKKworCWRwX2N0cmxfY2FsY190dV9wYXJhbWV0 ZXJzKGN0cmwsICZ0dV9jYWxjX3RhYmxlKTsKKworCWRwX3R1IHw9IHR1X2NhbGNfdGFibGUudHVf c2l6ZV9taW51czE7CisJdmFsaWRfYm91bmRhcnkgfD0gdHVfY2FsY190YWJsZS52YWxpZF9ib3Vu ZGFyeV9saW5rOworCXZhbGlkX2JvdW5kYXJ5IHw9ICh0dV9jYWxjX3RhYmxlLmRlbGF5X3N0YXJ0 X2xpbmsgPDwgMTYpOworCisJdmFsaWRfYm91bmRhcnkyIHw9ICh0dV9jYWxjX3RhYmxlLnZhbGlk X2xvd2VyX2JvdW5kYXJ5X2xpbmsgPDwgMSk7CisJdmFsaWRfYm91bmRhcnkyIHw9ICh0dV9jYWxj X3RhYmxlLnVwcGVyX2JvdW5kYXJ5X2NvdW50IDw8IDE2KTsKKwl2YWxpZF9ib3VuZGFyeTIgfD0g KHR1X2NhbGNfdGFibGUubG93ZXJfYm91bmRhcnlfY291bnQgPDwgMjApOworCisJaWYgKHR1X2Nh bGNfdGFibGUuYm91bmRhcnlfbW9kZXJhdGlvbl9lbikKKwkJdmFsaWRfYm91bmRhcnkyIHw9IEJJ VCgwKTsKKworCXByX2RlYnVnKCJkcF90dT0weCV4LCB2YWxpZF9ib3VuZGFyeT0weCV4LCB2YWxp ZF9ib3VuZGFyeTI9MHgleFxuIiwKKwkJCWRwX3R1LCB2YWxpZF9ib3VuZGFyeSwgdmFsaWRfYm91 bmRhcnkyKTsKKworCWN0cmwtPmNhdGFsb2ctPmRwX3R1ID0gZHBfdHU7CisJY3RybC0+Y2F0YWxv Zy0+dmFsaWRfYm91bmRhcnkgPSB2YWxpZF9ib3VuZGFyeTsKKwljdHJsLT5jYXRhbG9nLT52YWxp ZF9ib3VuZGFyeTIgPSB2YWxpZF9ib3VuZGFyeTI7CisKKwljdHJsLT5jYXRhbG9nLT51cGRhdGVf dHJhbnNmZXJfdW5pdChjdHJsLT5jYXRhbG9nKTsKK30KKworc3RhdGljIGludCBkcF9jdHJsX3dh aXQ0dmlkZW9fcmVhZHkoc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybCkKK3sKKwlpbnQgcmV0 ID0gMDsKKworCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmY3RybC0+dmlkZW9f Y29tcCwgSFogLyAyKTsKKwlpZiAocmV0IDw9IDApIHsKKwkJcHJfZXJyKCJMaW5rIFRyYWluIHRp bWVkb3V0XG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitz dGF0aWMgaW50IGRwX2N0cmxfdXBkYXRlX3NpbmtfdnhfcHgoc3RydWN0IGRwX2N0cmxfcHJpdmF0 ZSAqY3RybCwKKwkJCQkgICAgIHUzMiB2b2x0YWdlX2xldmVsLCB1MzIgcHJlX2VtcGhhc2lzX2xl dmVsKQoreworCWludCBpOworCXU4IGJ1Zls0XTsKKwl1MzIgbWF4X2xldmVsX3JlYWNoZWQgPSAw OworCisJaWYgKHZvbHRhZ2VfbGV2ZWwgPT0gRFBfTElOS19WT0xUQUdFX01BWCkgeworCQlwcl9k ZWJ1ZygibWF4LiB2b2x0YWdlIHN3aW5nIGxldmVsIHJlYWNoZWQgJWRcbiIsCisJCQkJdm9sdGFn ZV9sZXZlbCk7CisJCW1heF9sZXZlbF9yZWFjaGVkIHw9IEJJVCgyKTsKKwl9CisKKwlpZiAocHJl X2VtcGhhc2lzX2xldmVsID09IERQX0xJTktfUFJFX0VNUEhBU0lTX01BWCkgeworCQlwcl9kZWJ1 ZygibWF4LiBwcmUtZW1waGFzaXMgbGV2ZWwgcmVhY2hlZCAlZFxuIiwKKwkJCQlwcmVfZW1waGFz aXNfbGV2ZWwpOworCQltYXhfbGV2ZWxfcmVhY2hlZCAgfD0gQklUKDUpOworCX0KKworCXByZV9l bXBoYXNpc19sZXZlbCA8PD0gMzsKKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCWJ1Zltp XSA9IHZvbHRhZ2VfbGV2ZWwgfCBwcmVfZW1waGFzaXNfbGV2ZWwgfCBtYXhfbGV2ZWxfcmVhY2hl ZDsKKworCXByX2RlYnVnKCJzaW5rOiBwfHY9MHgleFxuIiwgdm9sdGFnZV9sZXZlbCB8IHByZV9l bXBoYXNpc19sZXZlbCk7CisJcmV0dXJuIGRybV9kcF9kcGNkX3dyaXRlKGN0cmwtPmF1eC0+ZHJt X2F1eCwgMHgxMDMsIGJ1ZiwgNCk7Cit9CisKK3N0YXRpYyB2b2lkIGRwX2N0cmxfdXBkYXRlX3Z4 X3B4KHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0cmwpCit7CisJc3RydWN0IGRwX2xpbmsgKmxp bmsgPSBjdHJsLT5saW5rOworCisJY3RybC0+Y2F0YWxvZy0+dXBkYXRlX3Z4X3B4KGN0cmwtPmNh dGFsb2csCisJCWxpbmstPnBoeV9wYXJhbXMudl9sZXZlbCwgbGluay0+cGh5X3BhcmFtcy5wX2xl dmVsKTsKKworCWRwX2N0cmxfdXBkYXRlX3NpbmtfdnhfcHgoY3RybCwgbGluay0+cGh5X3BhcmFt cy52X2xldmVsLAorCQlsaW5rLT5waHlfcGFyYW1zLnBfbGV2ZWwpOworfQorCitzdGF0aWMgdm9p ZCBkcF9jdHJsX3RyYWluX3BhdHRlcm5fc2V0KHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0cmws CisJCXU4IHBhdHRlcm4pCit7CisJdTggYnVmWzRdOworCisJcHJfZGVidWcoInNpbms6IHBhdHRl cm49JXhcbiIsIHBhdHRlcm4pOworCisJYnVmWzBdID0gcGF0dGVybjsKKwlkcm1fZHBfZHBjZF93 cml0ZShjdHJsLT5hdXgtPmRybV9hdXgsIERQX1RSQUlOSU5HX1BBVFRFUk5fU0VULCBidWYsIDEp OworfQorCitzdGF0aWMgaW50IGRwX2N0cmxfcmVhZF9saW5rX3N0YXR1cyhzdHJ1Y3QgZHBfY3Ry bF9wcml2YXRlICpjdHJsLAorCQkJCSAgICB1OCAqbGlua19zdGF0dXMpCit7CisJaW50IHJldCA9 IDAsIGxlbjsKKwl1MzIgY29uc3Qgb2Zmc2V0ID0gRFBfTEFORV9BTElHTl9TVEFUVVNfVVBEQVRF RCAtIERQX0xBTkUwXzFfU1RBVFVTOworCXUzMiBsaW5rX3N0YXR1c19yZWFkX21heF9yZXRyaWVz ID0gMTAwOworCisJd2hpbGUgKC0tbGlua19zdGF0dXNfcmVhZF9tYXhfcmV0cmllcykgeworCQls ZW4gPSBkcm1fZHBfZHBjZF9yZWFkX2xpbmtfc3RhdHVzKGN0cmwtPmF1eC0+ZHJtX2F1eCwKKwkJ CWxpbmtfc3RhdHVzKTsKKwkJaWYgKGxlbiAhPSBEUF9MSU5LX1NUQVRVU19TSVpFKSB7CisJCQlw cl9lcnIoIkRQIGxpbmsgc3RhdHVzIHJlYWQgZmFpbGVkLCBlcnI6ICVkXG4iLCBsZW4pOworCQkJ cmV0ID0gbGVuOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoIShsaW5rX3N0YXR1c1tvZmZzZXRd ICYgRFBfTElOS19TVEFUVVNfVVBEQVRFRCkpCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0 OworfQorCitzdGF0aWMgaW50IGRwX2N0cmxfbGlua190cmFpbl8xKHN0cnVjdCBkcF9jdHJsX3By aXZhdGUgKmN0cmwpCit7CisJaW50IHRyaWVzLCBvbGRfdl9sZXZlbCwgcmV0ID0gMDsKKwl1OCBs aW5rX3N0YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpFXTsKKwlpbnQgY29uc3QgbWF4aW11bV9yZXRy aWVzID0gNTsKKworCWRwX2N0cmxfc3RhdGVfY3RybChjdHJsLCAwKTsKKwkvKiBNYWtlIHN1cmUg dG8gY2xlYXIgdGhlIGN1cnJlbnQgcGF0dGVybiBiZWZvcmUgc3RhcnRpbmcgYSBuZXcgb25lICov CisJd21iKCk7CisKKwljdHJsLT5jYXRhbG9nLT5zZXRfcGF0dGVybihjdHJsLT5jYXRhbG9nLCAw eDAxKTsKKwlkcF9jdHJsX3RyYWluX3BhdHRlcm5fc2V0KGN0cmwsIERQX1RSQUlOSU5HX1BBVFRF Uk5fMSB8CisJCURQX0xJTktfU0NSQU1CTElOR19ESVNBQkxFKTsgLyogdHJhaW5fMSAqLworCWRw X2N0cmxfdXBkYXRlX3Z4X3B4KGN0cmwpOworCisJdHJpZXMgPSAwOworCW9sZF92X2xldmVsID0g Y3RybC0+bGluay0+cGh5X3BhcmFtcy52X2xldmVsOworCXdoaWxlICgxKSB7CisJCWRybV9kcF9s aW5rX3RyYWluX2Nsb2NrX3JlY292ZXJ5X2RlbGF5KGN0cmwtPnBhbmVsLT5kcGNkKTsKKworCQly ZXQgPSBkcF9jdHJsX3JlYWRfbGlua19zdGF0dXMoY3RybCwgbGlua19zdGF0dXMpOworCQlpZiAo cmV0KQorCQkJYnJlYWs7CisKKwkJaWYgKGRybV9kcF9jbG9ja19yZWNvdmVyeV9vayhsaW5rX3N0 YXR1cywKKwkJCWN0cmwtPmxpbmstPmxpbmtfcGFyYW1zLmxhbmVfY291bnQpKSB7CisJCQlicmVh azsKKwkJfQorCisJCWlmIChjdHJsLT5saW5rLT5waHlfcGFyYW1zLnZfbGV2ZWwgPT0gRFBfTElO S19WT0xUQUdFX01BWCkgeworCQkJcHJfZXJyX3JhdGVsaW1pdGVkKCJtYXggdl9sZXZlbCByZWFj aGVkXG4iKTsKKwkJCXJldCA9IC1FQUdBSU47CisJCQlicmVhazsKKwkJfQorCisJCWlmIChvbGRf dl9sZXZlbCA9PSBjdHJsLT5saW5rLT5waHlfcGFyYW1zLnZfbGV2ZWwpIHsKKwkJCXRyaWVzKys7 CisJCQlpZiAodHJpZXMgPj0gbWF4aW11bV9yZXRyaWVzKSB7CisJCQkJcHJfZXJyKCJtYXggdHJp ZXMgcmVhY2hlZFxuIik7CisJCQkJcmV0ID0gLUVUSU1FRE9VVDsKKwkJCQlicmVhazsKKwkJCX0K KwkJfSBlbHNlIHsKKwkJCXRyaWVzID0gMDsKKwkJCW9sZF92X2xldmVsID0gY3RybC0+bGluay0+ cGh5X3BhcmFtcy52X2xldmVsOworCQl9CisKKwkJcHJfZGVidWcoImNsb2NrIHJlY292ZXJ5IG5v dCBkb25lLCBhZGp1c3RpbmcgdnggcHhcbiIpOworCisJCWN0cmwtPmxpbmstPmFkanVzdF9sZXZl bHMoY3RybC0+bGluaywgbGlua19zdGF0dXMpOworCQlkcF9jdHJsX3VwZGF0ZV92eF9weChjdHJs KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRwX2N0cmxfbGlua19yYXRl X2Rvd25fc2hpZnQoc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybCkKK3sKKwlpbnQgcmV0ID0g MDsKKworCWlmICghY3RybCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKGN0cmwtPmxp bmstPmxpbmtfcGFyYW1zLmJ3X2NvZGUpIHsKKwljYXNlIERQX0xJTktfQldfOF8xOgorCQljdHJs LT5saW5rLT5saW5rX3BhcmFtcy5id19jb2RlID0gRFBfTElOS19CV181XzQ7CisJCWJyZWFrOwor CWNhc2UgRFBfTElOS19CV181XzQ6CisJCWN0cmwtPmxpbmstPmxpbmtfcGFyYW1zLmJ3X2NvZGUg PSBEUF9MSU5LX0JXXzJfNzsKKwkJYnJlYWs7CisJY2FzZSBEUF9MSU5LX0JXXzJfNzoKKwljYXNl IERQX0xJTktfQldfMV82MjoKKwlkZWZhdWx0OgorCQljdHJsLT5saW5rLT5saW5rX3BhcmFtcy5i d19jb2RlID0gRFBfTElOS19CV18xXzYyOworCQlicmVhazsKKwl9OworCisJcHJfZGVidWcoIm5l dyBidyBjb2RlPTB4JXhcbiIsIGN0cmwtPmxpbmstPmxpbmtfcGFyYW1zLmJ3X2NvZGUpOworCisJ cmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZHBfY3RybF9jbGVhcl90cmFpbmluZ19wYXR0 ZXJuKHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0cmwpCit7CisJZHBfY3RybF90cmFpbl9wYXR0 ZXJuX3NldChjdHJsLCAwKTsKKwlkcm1fZHBfbGlua190cmFpbl9jaGFubmVsX2VxX2RlbGF5KGN0 cmwtPnBhbmVsLT5kcGNkKTsKK30KKworc3RhdGljIGludCBkcF9jdHJsX2xpbmtfdHJhaW5pbmdf MihzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsKQoreworCWludCB0cmllcyA9IDAsIHJldCA9 IDA7CisJY2hhciBwYXR0ZXJuOworCWludCBjb25zdCBtYXhpbXVtX3JldHJpZXMgPSA1OworCXU4 IGxpbmtfc3RhdHVzW0RQX0xJTktfU1RBVFVTX1NJWkVdOworCisJZHBfY3RybF9zdGF0ZV9jdHJs KGN0cmwsIDApOworCS8qIE1ha2Ugc3VyZSB0byBjbGVhciB0aGUgY3VycmVudCBwYXR0ZXJuIGJl Zm9yZSBzdGFydGluZyBhIG5ldyBvbmUgKi8KKwl3bWIoKTsKKworCWlmIChkcm1fZHBfdHBzM19z dXBwb3J0ZWQoY3RybC0+cGFuZWwtPmRwY2QpKQorCQlwYXR0ZXJuID0gRFBfVFJBSU5JTkdfUEFU VEVSTl8zOworCWVsc2UKKwkJcGF0dGVybiA9IERQX1RSQUlOSU5HX1BBVFRFUk5fMjsKKworCWRw X2N0cmxfdXBkYXRlX3Z4X3B4KGN0cmwpOworCWN0cmwtPmNhdGFsb2ctPnNldF9wYXR0ZXJuKGN0 cmwtPmNhdGFsb2csIHBhdHRlcm4pOworCWRwX2N0cmxfdHJhaW5fcGF0dGVybl9zZXQoY3RybCwg cGF0dGVybiB8IERQX1JFQ09WRVJFRF9DTE9DS19PVVRfRU4pOworCisJZG8gIHsKKwkJZHJtX2Rw X2xpbmtfdHJhaW5fY2hhbm5lbF9lcV9kZWxheShjdHJsLT5wYW5lbC0+ZHBjZCk7CisKKwkJcmV0 ID0gZHBfY3RybF9yZWFkX2xpbmtfc3RhdHVzKGN0cmwsIGxpbmtfc3RhdHVzKTsKKwkJaWYgKHJl dCkKKwkJCWJyZWFrOworCisJCWlmIChkcm1fZHBfY2hhbm5lbF9lcV9vayhsaW5rX3N0YXR1cywK KwkJCWN0cmwtPmxpbmstPmxpbmtfcGFyYW1zLmxhbmVfY291bnQpKQorCQkJYnJlYWs7CisKKwkJ aWYgKHRyaWVzID4gbWF4aW11bV9yZXRyaWVzKSB7CisJCQlyZXQgPSAtRVRJTUVET1VUOworCQkJ YnJlYWs7CisJCX0KKwkJdHJpZXMrKzsKKworCQljdHJsLT5saW5rLT5hZGp1c3RfbGV2ZWxzKGN0 cmwtPmxpbmssIGxpbmtfc3RhdHVzKTsKKwkJZHBfY3RybF91cGRhdGVfdnhfcHgoY3RybCk7CisJ fSB3aGlsZSAoMSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRwX2N0cmxfbGlu a190cmFpbihzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsKQoreworCWludCByZXQgPSAwOwor CXU4IGVuY29kaW5nID0gMHgxOworCXN0cnVjdCBkcm1fZHBfbGluayBsaW5rX2luZm8gPSB7MH07 CisKKwljdHJsLT5saW5rLT5waHlfcGFyYW1zLnBfbGV2ZWwgPSAwOworCWN0cmwtPmxpbmstPnBo eV9wYXJhbXMudl9sZXZlbCA9IDA7CisKKwlkcF9jdHJsX2NvbmZpZ19jdHJsKGN0cmwpOworCisJ bGlua19pbmZvLm51bV9sYW5lcyA9IGN0cmwtPmxpbmstPmxpbmtfcGFyYW1zLmxhbmVfY291bnQ7 CisJbGlua19pbmZvLnJhdGUgPSBkcm1fZHBfYndfY29kZV90b19saW5rX3JhdGUoCisJCWN0cmwt PmxpbmstPmxpbmtfcGFyYW1zLmJ3X2NvZGUpOworCWxpbmtfaW5mby5jYXBhYmlsaXRpZXMgPSBj dHJsLT5wYW5lbC0+bGlua19pbmZvLmNhcGFiaWxpdGllczsKKworCWRybV9kcF9saW5rX2NvbmZp Z3VyZShjdHJsLT5hdXgtPmRybV9hdXgsICZsaW5rX2luZm8pOworCWRybV9kcF9kcGNkX3dyaXRl KGN0cmwtPmF1eC0+ZHJtX2F1eCwgRFBfTUFJTl9MSU5LX0NIQU5ORUxfQ09ESU5HX1NFVCwKKwkJ CQkmZW5jb2RpbmcsIDEpOworCisJcmV0ID0gZHBfY3RybF9saW5rX3RyYWluXzEoY3RybCk7CisJ aWYgKHJldCkgeworCQlwcl9lcnIoImxpbmsgdHJhaW5pbmcgIzEgZmFpbGVkXG4iKTsKKwkJZ290 byBlbmQ7CisJfQorCisJLyogcHJpbnQgc3VjY2VzcyBpbmZvIGFzIHRoaXMgaXMgYSByZXN1bHQg b2YgdXNlciBpbml0aWF0ZWQgYWN0aW9uICovCisJcHJfaW5mbygibGluayB0cmFpbmluZyAjMSBz dWNjZXNzZnVsXG4iKTsKKworCXJldCA9IGRwX2N0cmxfbGlua190cmFpbmluZ18yKGN0cmwpOwor CWlmIChyZXQpIHsKKwkJcHJfZXJyKCJsaW5rIHRyYWluaW5nICMyIGZhaWxlZFxuIik7CisJCWdv dG8gZW5kOworCX0KKworCS8qIHByaW50IHN1Y2Nlc3MgaW5mbyBhcyB0aGlzIGlzIGEgcmVzdWx0 IG9mIHVzZXIgaW5pdGlhdGVkIGFjdGlvbiAqLworCXByX2luZm8oImxpbmsgdHJhaW5pbmcgIzIg c3VjY2Vzc2Z1bFxuIik7CisKK2VuZDoKKwlkcF9jdHJsX3N0YXRlX2N0cmwoY3RybCwgMCk7CisJ LyogTWFrZSBzdXJlIHRvIGNsZWFyIHRoZSBjdXJyZW50IHBhdHRlcm4gYmVmb3JlIHN0YXJ0aW5n IGEgbmV3IG9uZSAqLworCXdtYigpOworCisJZHBfY3RybF9jbGVhcl90cmFpbmluZ19wYXR0ZXJu KGN0cmwpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZHBfY3RybF9zZXR1cF9tYWlu X2xpbmsoc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybCwgYm9vbCB0cmFpbikKK3sKKwlib29s IG1haW5saW5rX3JlYWR5ID0gZmFsc2U7CisJaW50IHJldCA9IDA7CisKKwljdHJsLT5jYXRhbG9n LT5tYWlubGlua19jdHJsKGN0cmwtPmNhdGFsb2csIHRydWUpOworCisJcmV0ID0gY3RybC0+bGlu ay0+cHNtX2NvbmZpZyhjdHJsLT5saW5rLAorCQkmY3RybC0+cGFuZWwtPmxpbmtfaW5mbywgZmFs c2UpOworCWlmIChyZXQpCisJCWdvdG8gZW5kOworCisJaWYgKGN0cmwtPmxpbmstPnNpbmtfcmVx dWVzdCAmIERQX1RFU1RfTElOS19QSFlfVEVTVF9QQVRURVJOKQorCQlnb3RvIGVuZDsKKworCWlm ICghdHJhaW4pCisJCWdvdG8gc2VuZF92aWRlbzsKKworCS8qCisJICogQXMgcGFydCBvZiBwcmV2 aW91cyBjYWxscywgRFAgY29udHJvbGxlciBzdGF0ZSBtaWdodCBoYXZlCisJICogdHJhbnNpdGlv bmVkIHRvIFBVU0hfSURMRS4gSW4gb3JkZXIgdG8gc3RhcnQgdHJhbnNtaXR0aW5nIGEgbGluawor CSAqIHRyYWluaW5nIHBhdHRlcm4sIHdlIGhhdmUgdG8gZmlyc3QgdG8gYSBEUCBzb2Z0d2FyZSBy ZXNldC4KKwkgKi8KKwljdHJsLT5jYXRhbG9nLT5yZXNldChjdHJsLT5jYXRhbG9nKTsKKworCXJl dCA9IGRwX2N0cmxfbGlua190cmFpbihjdHJsKTsKKwlpZiAocmV0KQorCQlnb3RvIGVuZDsKKwor c2VuZF92aWRlbzoKKwkvKgorCSAqIFNldCB1cCB0cmFuc2ZlciB1bml0IHZhbHVlcyBhbmQgc2V0 IGNvbnRyb2xsZXIgc3RhdGUgdG8gc2VuZAorCSAqIHZpZGVvLgorCSAqLworCWRwX2N0cmxfc2V0 dXBfdHJfdW5pdChjdHJsKTsKKwljdHJsLT5jYXRhbG9nLT5zdGF0ZV9jdHJsKGN0cmwtPmNhdGFs b2csIFNUX1NFTkRfVklERU8pOworCisJZHBfY3RybF93YWl0NHZpZGVvX3JlYWR5KGN0cmwpOwor CW1haW5saW5rX3JlYWR5ID0gY3RybC0+Y2F0YWxvZy0+bWFpbmxpbmtfcmVhZHkoY3RybC0+Y2F0 YWxvZyk7CisJcHJfZGVidWcoIm1haW5saW5rICVzXG4iLCBtYWlubGlua19yZWFkeSA/ICJSRUFE WSIgOiAiTk9UIFJFQURZIik7CitlbmQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQg ZHBfY3RybF9zZXRfY2xvY2tfcmF0ZShzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsLAorCQkJ CSAgIGNoYXIgKm5hbWUsIHUzMiByYXRlKQoreworCXUzMiBudW0gPSBjdHJsLT5wYXJzZXItPm1w W0RQX0NUUkxfUE1dLm51bV9jbGs7CisJc3RydWN0IGRzc19jbGsgKmNmZyA9IGN0cmwtPnBhcnNl ci0+bXBbRFBfQ1RSTF9QTV0uY2xrX2NvbmZpZzsKKworCXdoaWxlIChudW0gJiYgc3RyY21wKGNm Zy0+Y2xrX25hbWUsIG5hbWUpKSB7CisJCW51bS0tOworCQljZmcrKzsKKwl9CisKKwlwcl9kZWJ1 Zygic2V0dGluZyByYXRlPSVkIG9uIGNsaz0lc1xuIiwgcmF0ZSwgbmFtZSk7CisKKwlpZiAobnVt KQorCQljZmctPnJhdGUgPSByYXRlOworCWVsc2UKKwkJcHJfZXJyKCIlcyBjbG9jayBjb3VsZCBu b3QgYmUgc2V0IHdpdGggcmF0ZSAlZFxuIiwgbmFtZSwgcmF0ZSk7Cit9CisKK3N0YXRpYyBpbnQg ZHBfY3RybF9lbmFibGVfbWFpbmxpbmtfY2xvY2tzKHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0 cmwpCit7CisJaW50IHJldCA9IDA7CisKKwljdHJsLT5wb3dlci0+c2V0X3BpeGVsX2Nsa19wYXJl bnQoY3RybC0+cG93ZXIpOworCisJZHBfY3RybF9zZXRfY2xvY2tfcmF0ZShjdHJsLCAiY3RybF9s aW5rX2NsayIsCisJCWRybV9kcF9id19jb2RlX3RvX2xpbmtfcmF0ZShjdHJsLT5saW5rLT5saW5r X3BhcmFtcy5id19jb2RlKSk7CisKKwlkcF9jdHJsX3NldF9jbG9ja19yYXRlKGN0cmwsICJjdHJs X3BpeGVsX2NsayIsIGN0cmwtPnBpeGVsX3JhdGUpOworCisJcmV0ID0gY3RybC0+cG93ZXItPmNs a19lbmFibGUoY3RybC0+cG93ZXIsIERQX0NUUkxfUE0sIHRydWUpOworCWlmIChyZXQpIHsKKwkJ cHJfZXJyKCJVbmFibGVkIHRvIHN0YXJ0IGxpbmsgY2xvY2tzXG4iKTsKKwkJcmV0ID0gLUVJTlZB TDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRwX2N0cmxfZGlzYWJsZV9t YWlubGlua19jbG9ja3Moc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybCkKK3sKKwlyZXR1cm4g Y3RybC0+cG93ZXItPmNsa19lbmFibGUoY3RybC0+cG93ZXIsIERQX0NUUkxfUE0sIGZhbHNlKTsK K30KKworc3RhdGljIGludCBkcF9jdHJsX2hvc3RfaW5pdChzdHJ1Y3QgZHBfY3RybCAqZHBfY3Ry bCwgYm9vbCBmbGlwKQoreworCXN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0cmw7CisJc3RydWN0 IGRwX2NhdGFsb2dfY3RybCAqY2F0YWxvZzsKKworCWlmICghZHBfY3RybCkgeworCQlwcl9lcnIo IkludmFsaWQgaW5wdXQgZGF0YVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWN0cmwg PSBjb250YWluZXJfb2YoZHBfY3RybCwgc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSwgZHBfY3RybCk7 CisKKwljdHJsLT5vcmllbnRhdGlvbiA9IGZsaXA7CisJY2F0YWxvZyA9IGN0cmwtPmNhdGFsb2c7 CisKKwljYXRhbG9nLT51c2JfcmVzZXQoY3RybC0+Y2F0YWxvZywgZmxpcCk7CisJY2F0YWxvZy0+ cGh5X3Jlc2V0KGN0cmwtPmNhdGFsb2cpOworCWNhdGFsb2ctPmVuYWJsZV9pcnEoY3RybC0+Y2F0 YWxvZywgdHJ1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBkcF9jdHJsX2hvc3RfZGVp bml0KCkgLSBVbmluaXRpYWxpemUgRFAgY29udHJvbGxlcgorICogQGN0cmw6IERpc3BsYXkgUG9y dCBEcml2ZXIgZGF0YQorICoKKyAqIFBlcmZvcm0gcmVxdWlyZWQgc3RlcHMgdG8gdW5pbml0aWFs aXplIERQIGNvbnRyb2xsZXIKKyAqIGFuZCBpdHMgcmVzb3VyY2VzLgorICovCitzdGF0aWMgdm9p ZCBkcF9jdHJsX2hvc3RfZGVpbml0KHN0cnVjdCBkcF9jdHJsICpkcF9jdHJsKQoreworCXN0cnVj dCBkcF9jdHJsX3ByaXZhdGUgKmN0cmw7CisKKwlpZiAoIWRwX2N0cmwpIHsKKwkJcHJfZXJyKCJJ bnZhbGlkIGlucHV0IGRhdGFcbiIpOworCQlyZXR1cm47CisJfQorCisJY3RybCA9IGNvbnRhaW5l cl9vZihkcF9jdHJsLCBzdHJ1Y3QgZHBfY3RybF9wcml2YXRlLCBkcF9jdHJsKTsKKworCWN0cmwt PmNhdGFsb2ctPmVuYWJsZV9pcnEoY3RybC0+Y2F0YWxvZywgZmFsc2UpOworCisJcHJfZGVidWco Ikhvc3QgZGVpbml0aWFsaXplZCBzdWNjZXNzZnVsbHlcbiIpOworfQorCitzdGF0aWMgYm9vbCBk cF9jdHJsX3VzZV9maXhlZF9udmlkKHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0cmwpCit7CisJ dTggKmRwY2QgPSBjdHJsLT5wYW5lbC0+ZHBjZDsKKworCS8qCisJICogRm9yIGJldHRlciBpbnRl cm9wIGV4cGVyaWVuY2UsIHVzZWQgYSBmaXhlZCBOVklEPTB4ODAwMAorCSAqIHdoZW5ldmVyIGNv bm5lY3RlZCB0byBhIFZHQSBkb25nbGUgZG93bnN0cmVhbS4KKwkgKi8KKwlpZiAoZHBjZFtEUF9E T1dOU1RSRUFNUE9SVF9QUkVTRU5UXSAmIERQX0RXTl9TVFJNX1BPUlRfUFJFU0VOVCkgeworCQl1 OCB0eXBlID0gZHBjZFtEUF9ET1dOU1RSRUFNUE9SVF9QUkVTRU5UXSAmCisJCQlEUF9EV05fU1RS TV9QT1JUX1RZUEVfTUFTSzsKKwkJaWYgKHR5cGUgPT0gRFBfRFdOX1NUUk1fUE9SVF9UWVBFX0FO QUxPRykKKwkJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGlj IGludCBkcF9jdHJsX2xpbmtfbWFpbnRlbmFuY2Uoc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3Ry bCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCWN0cmwtPmRwX2N0cmwucHVzaF9pZGxlKCZjdHJsLT5k cF9jdHJsKTsKKwljdHJsLT5kcF9jdHJsLnJlc2V0KCZjdHJsLT5kcF9jdHJsKTsKKworCWN0cmwt PnBpeGVsX3JhdGUgPSBjdHJsLT5wYW5lbC0+cGluZm8ucGl4ZWxfY2xrX2toejsKKworCWRvIHsK KwkJaWYgKHJldCA9PSAtRUFHQUlOKSB7CisJCQkvKiB0cnkgd2l0aCBsb3dlciBsaW5rIHJhdGUg Ki8KKwkJCWRwX2N0cmxfbGlua19yYXRlX2Rvd25fc2hpZnQoY3RybCk7CisKKwkJCWN0cmwtPmNh dGFsb2ctPm1haW5saW5rX2N0cmwoY3RybC0+Y2F0YWxvZywgZmFsc2UpOworCQl9CisKKwkJY3Ry bC0+Y2F0YWxvZy0+cGh5X2xhbmVfY2ZnKGN0cmwtPmNhdGFsb2csCisJCQljdHJsLT5vcmllbnRh dGlvbiwgY3RybC0+bGluay0+bGlua19wYXJhbXMubGFuZV9jb3VudCk7CisKKwkJLyoKKwkJICog RGlzYWJsZSBhbmQgcmUtZW5hYmxlIHRoZSBtYWlubGluayBjbG9jayBzaW5jZSB0aGUKKwkJICog bGluayBjbG9jayBtaWdodCBoYXZlIGJlZW4gYWRqdXN0ZWQgYXMgcGFydCBvZiB0aGUKKwkJICog bGluayBtYWludGVuYW5jZS4KKwkJICovCisJCWRwX2N0cmxfZGlzYWJsZV9tYWlubGlua19jbG9j a3MoY3RybCk7CisKKwkJcmV0ID0gZHBfY3RybF9lbmFibGVfbWFpbmxpbmtfY2xvY2tzKGN0cmwp OworCQlpZiAocmV0KQorCQkJY29udGludWU7CisKKwkJZHBfY3RybF9jb25maWd1cmVfc291cmNl X3BhcmFtcyhjdHJsKTsKKworCQljdHJsLT5jYXRhbG9nLT5jb25maWdfbXNhKGN0cmwtPmNhdGFs b2csCisJCQlkcm1fZHBfYndfY29kZV90b19saW5rX3JhdGUoCisJCQljdHJsLT5saW5rLT5saW5r X3BhcmFtcy5id19jb2RlKSwKKwkJCWN0cmwtPnBpeGVsX3JhdGUsIGRwX2N0cmxfdXNlX2ZpeGVk X252aWQoY3RybCkpOworCisJCXJlaW5pdF9jb21wbGV0aW9uKCZjdHJsLT5pZGxlX2NvbXApOwor CisJCXJldCA9IGRwX2N0cmxfc2V0dXBfbWFpbl9saW5rKGN0cmwsIHRydWUpOworCX0gd2hpbGUg KHJldCA9PSAtRUFHQUlOKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGRwX2N0 cmxfcHJvY2Vzc19waHlfdGVzdF9yZXF1ZXN0KHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0cmwp Cit7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIWN0cmwtPmxpbmstPnBoeV9wYXJhbXMucGh5X3Rl c3RfcGF0dGVybl9zZWwpIHsKKwkJcHJfZGVidWcoIm5vIHRlc3QgcGF0dGVybiBzZWxlY3RlZCBi eSBzaW5rXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXByX2RlYnVnKCJzdGFydFxuIik7CisKKwlj dHJsLT5kcF9jdHJsLnB1c2hfaWRsZSgmY3RybC0+ZHBfY3RybCk7CisJLyoKKwkgKiBUaGUgZ2xv YmFsIHJlc2V0IHdpbGwgbmVlZCBEUCBsaW5rIHJhbGF0ZWQgY2xvY2tzIHRvIGJlCisJICogcnVu bmluZy4gQWRkIHRoZSBnbG9iYWwgcmVzZXQganVzdCBiZWZvcmUgZGlzYWJsaW5nIHRoZQorCSAq IGxpbmsgY2xvY2tzIGFuZCBjb3JlIGNsb2Nrcy4KKwkgKi8KKwljdHJsLT5kcF9jdHJsLnJlc2V0 KCZjdHJsLT5kcF9jdHJsKTsKKwljdHJsLT5kcF9jdHJsLm9mZigmY3RybC0+ZHBfY3RybCk7CisK KwlyZXQgPSBjdHJsLT5kcF9jdHJsLm9uKCZjdHJsLT5kcF9jdHJsKTsKKwlpZiAocmV0KQorCQlw cl9lcnIoImZhaWxlZCB0byBlbmFibGUgRFAgY29udHJvbGxlclxuIik7CisKKwlwcl9kZWJ1Zygi ZW5kXG4iKTsKK30KKworc3RhdGljIHZvaWQgZHBfY3RybF9zZW5kX3BoeV90ZXN0X3BhdHRlcm4o c3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybCkKK3sKKwlib29sIHN1Y2Nlc3MgPSBmYWxzZTsK Kwl1MzIgcGF0dGVybl9zZW50ID0gMHgwOworCXUzMiBwYXR0ZXJuX3JlcXVlc3RlZCA9IGN0cmwt PmxpbmstPnBoeV9wYXJhbXMucGh5X3Rlc3RfcGF0dGVybl9zZWw7CisKKwlwcl9kZWJ1ZygicmVx dWVzdDogJXNcbiIsCisJCQlkcF9saW5rX2dldF9waHlfdGVzdF9wYXR0ZXJuKHBhdHRlcm5fcmVx dWVzdGVkKSk7CisKKwljdHJsLT5jYXRhbG9nLT51cGRhdGVfdnhfcHgoY3RybC0+Y2F0YWxvZywK KwkJCWN0cmwtPmxpbmstPnBoeV9wYXJhbXMudl9sZXZlbCwKKwkJCWN0cmwtPmxpbmstPnBoeV9w YXJhbXMucF9sZXZlbCk7CisJY3RybC0+Y2F0YWxvZy0+c2VuZF9waHlfcGF0dGVybihjdHJsLT5j YXRhbG9nLCBwYXR0ZXJuX3JlcXVlc3RlZCk7CisJY3RybC0+bGluay0+c2VuZF90ZXN0X3Jlc3Bv bnNlKGN0cmwtPmxpbmspOworCisJcGF0dGVybl9zZW50ID0gY3RybC0+Y2F0YWxvZy0+cmVhZF9w aHlfcGF0dGVybihjdHJsLT5jYXRhbG9nKTsKKworCXN3aXRjaCAocGF0dGVybl9zZW50KSB7CisJ Y2FzZSBNUl9MSU5LX1RSQUlOSU5HMToKKwkJaWYgKHBhdHRlcm5fcmVxdWVzdGVkID09CisJCQkJ RFBfVEVTVF9QSFlfUEFUVEVSTl9EMTBfMl9OT19TQ1JBTUJMSU5HKQorCQkJc3VjY2VzcyA9IHRy dWU7CisJCWJyZWFrOworCWNhc2UgTVJfTElOS19TWU1CT0xfRVJNOgorCQlpZiAoKHBhdHRlcm5f cmVxdWVzdGVkID09CisJCQkJRFBfVEVTVF9QSFlfUEFUVEVSTl9TWU1CT0xfRVJSX01FQVNVUkVN RU5UX0NOVCkKKwkJCXx8IChwYXR0ZXJuX3JlcXVlc3RlZCA9PQorCQkJCURQX1RFU1RfUEhZX1BB VFRFUk5fSEJSMl9DVFNfRVlFX1BBVFRFUk4pKQorCQkJc3VjY2VzcyA9IHRydWU7CisJCWJyZWFr OworCWNhc2UgTVJfTElOS19QUkJTNzoKKwkJaWYgKHBhdHRlcm5fcmVxdWVzdGVkID09IERQX1RF U1RfUEhZX1BBVFRFUk5fUFJCUzcpCisJCQlzdWNjZXNzID0gdHJ1ZTsKKwkJYnJlYWs7CisJY2Fz ZSBNUl9MSU5LX0NVU1RPTTgwOgorCQlpZiAocGF0dGVybl9yZXF1ZXN0ZWQgPT0KKwkJCQlEUF9U RVNUX1BIWV9QQVRURVJOXzgwX0JJVF9DVVNUT01fUEFUVEVSTikKKwkJCXN1Y2Nlc3MgPSB0cnVl OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzdWNjZXNzID0gZmFsc2U7CisJCXJldHVybjsKKwl9 CisKKwlwcl9kZWJ1ZygiJXM6ICVzXG4iLCBzdWNjZXNzID8gInN1Y2Nlc3MiIDogImZhaWxlZCIs CisJCQlkcF9saW5rX2dldF9waHlfdGVzdF9wYXR0ZXJuKHBhdHRlcm5fcmVxdWVzdGVkKSk7Cit9 CisKK3N0YXRpYyB2b2lkIGRwX2N0cmxfaGFuZGxlX3NpbmtfcmVxdWVzdChzdHJ1Y3QgZHBfY3Ry bCAqZHBfY3RybCkKK3sKKwlzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsOworCXUzMiBzaW5r X3JlcXVlc3QgPSAweDA7CisKKwlpZiAoIWRwX2N0cmwpIHsKKwkJcHJfZXJyKCJpbnZhbGlkIGlu cHV0XG4iKTsKKwkJcmV0dXJuOworCX0KKworCWN0cmwgPSBjb250YWluZXJfb2YoZHBfY3RybCwg c3RydWN0IGRwX2N0cmxfcHJpdmF0ZSwgZHBfY3RybCk7CisJc2lua19yZXF1ZXN0ID0gY3RybC0+ bGluay0+c2lua19yZXF1ZXN0OworCisJaWYgKHNpbmtfcmVxdWVzdCAmIERQX1RFU1RfTElOS19Q SFlfVEVTVF9QQVRURVJOKSB7CisJCXByX2luZm8oIlBIWV9URVNUX1BBVFRFUk4gcmVxdWVzdFxu Iik7CisJCWRwX2N0cmxfcHJvY2Vzc19waHlfdGVzdF9yZXF1ZXN0KGN0cmwpOworCX0KKworCWlm IChzaW5rX3JlcXVlc3QgJiBEUF9MSU5LX1NUQVRVU19VUERBVEVEKQorCQlkcF9jdHJsX2xpbmtf bWFpbnRlbmFuY2UoY3RybCk7CisKKwlpZiAoc2lua19yZXF1ZXN0ICYgRFBfVEVTVF9MSU5LX1RS QUlOSU5HKSB7CisJCWN0cmwtPmxpbmstPnNlbmRfdGVzdF9yZXNwb25zZShjdHJsLT5saW5rKTsK KwkJZHBfY3RybF9saW5rX21haW50ZW5hbmNlKGN0cmwpOworCX0KK30KKworc3RhdGljIHZvaWQg ZHBfY3RybF9yZXNldChzdHJ1Y3QgZHBfY3RybCAqZHBfY3RybCkKK3sKKwlzdHJ1Y3QgZHBfY3Ry bF9wcml2YXRlICpjdHJsOworCisJaWYgKCFkcF9jdHJsKSB7CisJCXByX2VycigiaW52YWxpZCBw YXJhbXNcbiIpOworCQlyZXR1cm47CisJfQorCisJY3RybCA9IGNvbnRhaW5lcl9vZihkcF9jdHJs LCBzdHJ1Y3QgZHBfY3RybF9wcml2YXRlLCBkcF9jdHJsKTsKKwljdHJsLT5jYXRhbG9nLT5yZXNl dChjdHJsLT5jYXRhbG9nKTsKK30KKworc3RhdGljIGludCBkcF9jdHJsX29uKHN0cnVjdCBkcF9j dHJsICpkcF9jdHJsKQoreworCWludCByYyA9IDA7CisJc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAq Y3RybDsKKwl1MzIgcmF0ZSA9IDA7CisJdTMyIGxpbmtfdHJhaW5fbWF4X3JldHJpZXMgPSAxMDA7 CisJdTMyIGNvbnN0IHBoeV9jdHNfcGl4ZWxfY2xrX2toeiA9IDE0ODUwMDsKKworCWlmICghZHBf Y3RybCkgeworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gZW5kOworCX0KKworCWN0cmwgPSBjb250 YWluZXJfb2YoZHBfY3RybCwgc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSwgZHBfY3RybCk7CisKKwlh dG9taWNfc2V0KCZjdHJsLT5hYm9ydGVkLCAwKTsKKwlyYXRlID0gY3RybC0+cGFuZWwtPmxpbmtf aW5mby5yYXRlOworCisJY3RybC0+cG93ZXItPmNsa19lbmFibGUoY3RybC0+cG93ZXIsIERQX0NP UkVfUE0sIHRydWUpOworCWN0cmwtPmNhdGFsb2ctPmhwZF9jb25maWcoY3RybC0+Y2F0YWxvZywg dHJ1ZSk7CisKKwlpZiAoY3RybC0+bGluay0+c2lua19yZXF1ZXN0ICYgRFBfVEVTVF9MSU5LX1BI WV9URVNUX1BBVFRFUk4pIHsKKwkJcHJfZGVidWcoInVzaW5nIHBoeSB0ZXN0IGxpbmsgcGFyYW1l dGVyc1xuIik7CisJCWlmICghY3RybC0+cGFuZWwtPnBpbmZvLnBpeGVsX2Nsa19raHopCisJCQlj dHJsLT5waXhlbF9yYXRlID0gcGh5X2N0c19waXhlbF9jbGtfa2h6OworCX0gZWxzZSB7CisJCWN0 cmwtPmxpbmstPmxpbmtfcGFyYW1zLmJ3X2NvZGUgPQorCQkJZHJtX2RwX2xpbmtfcmF0ZV90b19i d19jb2RlKHJhdGUpOworCQljdHJsLT5saW5rLT5saW5rX3BhcmFtcy5sYW5lX2NvdW50ID0KKwkJ CWN0cmwtPnBhbmVsLT5saW5rX2luZm8ubnVtX2xhbmVzOworCQljdHJsLT5waXhlbF9yYXRlID0g Y3RybC0+cGFuZWwtPnBpbmZvLnBpeGVsX2Nsa19raHo7CisJfQorCisJcHJfZGVidWcoImJ3X2Nv ZGU9JWQsIGxhbmVfY291bnQ9JWQsIHBpeGVsX3JhdGU9JWRcbiIsCisJCWN0cmwtPmxpbmstPmxp bmtfcGFyYW1zLmJ3X2NvZGUsCisJCWN0cmwtPmxpbmstPmxpbmtfcGFyYW1zLmxhbmVfY291bnQs IGN0cmwtPnBpeGVsX3JhdGUpOworCisJY3RybC0+Y2F0YWxvZy0+cGh5X2xhbmVfY2ZnKGN0cmwt PmNhdGFsb2csCisJCQljdHJsLT5vcmllbnRhdGlvbiwgY3RybC0+bGluay0+bGlua19wYXJhbXMu bGFuZV9jb3VudCk7CisKKwlyYyA9IGRwX2N0cmxfZW5hYmxlX21haW5saW5rX2Nsb2NrcyhjdHJs KTsKKwlpZiAocmMpCisJCWdvdG8gZW5kOworCisJcmVpbml0X2NvbXBsZXRpb24oJmN0cmwtPmlk bGVfY29tcCk7CisKKwlkcF9jdHJsX2NvbmZpZ3VyZV9zb3VyY2VfcGFyYW1zKGN0cmwpOworCisJ d2hpbGUgKC0tbGlua190cmFpbl9tYXhfcmV0cmllcyAmJiAhYXRvbWljX3JlYWQoJmN0cmwtPmFi b3J0ZWQpKSB7CisJCWN0cmwtPmNhdGFsb2ctPmNvbmZpZ19tc2EoY3RybC0+Y2F0YWxvZywKKwkJ CWRybV9kcF9id19jb2RlX3RvX2xpbmtfcmF0ZSgKKwkJCWN0cmwtPmxpbmstPmxpbmtfcGFyYW1z LmJ3X2NvZGUpLAorCQkJY3RybC0+cGl4ZWxfcmF0ZSwgZHBfY3RybF91c2VfZml4ZWRfbnZpZChj dHJsKSk7CisKKwkJcmMgPSBkcF9jdHJsX3NldHVwX21haW5fbGluayhjdHJsLCB0cnVlKTsKKwkJ aWYgKCFyYykKKwkJCWJyZWFrOworCisJCS8qIHRyeSB3aXRoIGxvd2VyIGxpbmsgcmF0ZSAqLwor CQlkcF9jdHJsX2xpbmtfcmF0ZV9kb3duX3NoaWZ0KGN0cmwpOworCisJCWN0cmwtPmNhdGFsb2ct Pm1haW5saW5rX2N0cmwoY3RybC0+Y2F0YWxvZywgZmFsc2UpOworCisJCWRwX2N0cmxfZGlzYWJs ZV9tYWlubGlua19jbG9ja3MoY3RybCk7CisJCS8qIGh3IHJlY29tbWVuZGVkIGRlbGF5IGJlZm9y ZSByZS1lbmFibGluZyBjbG9ja3MgKi8KKwkJbXNsZWVwKDIwKTsKKworCQlkcF9jdHJsX2VuYWJs ZV9tYWlubGlua19jbG9ja3MoY3RybCk7CisJfQorCisJaWYgKGN0cmwtPmxpbmstPnNpbmtfcmVx dWVzdCAmIERQX1RFU1RfTElOS19QSFlfVEVTVF9QQVRURVJOKQorCQlkcF9jdHJsX3NlbmRfcGh5 X3Rlc3RfcGF0dGVybihjdHJsKTsKKworCXByX2RlYnVnKCJFbmQtXG4iKTsKKworZW5kOgorCXJl dHVybiByYzsKK30KKworc3RhdGljIHZvaWQgZHBfY3RybF9vZmYoc3RydWN0IGRwX2N0cmwgKmRw X2N0cmwpCit7CisJc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybDsKKworCWlmICghZHBfY3Ry bCkKKwkJcmV0dXJuOworCisJY3RybCA9IGNvbnRhaW5lcl9vZihkcF9jdHJsLCBzdHJ1Y3QgZHBf Y3RybF9wcml2YXRlLCBkcF9jdHJsKTsKKworCWN0cmwtPmNhdGFsb2ctPm1haW5saW5rX2N0cmwo Y3RybC0+Y2F0YWxvZywgZmFsc2UpOworCWN0cmwtPmNhdGFsb2ctPnJlc2V0KGN0cmwtPmNhdGFs b2cpOworCisJLyogTWFrZSBzdXJlIERQIGlzIGRpc2FibGVkIGJlZm9yZSBjbGsgZGlzYWJsZSAq LworCXdtYigpOworCisJZHBfY3RybF9kaXNhYmxlX21haW5saW5rX2Nsb2NrcyhjdHJsKTsKKwor CXByX2RlYnVnKCJEUCBvZmYgZG9uZVxuIik7Cit9CisKK3N0YXRpYyB2b2lkIGRwX2N0cmxfaXNy KHN0cnVjdCBkcF9jdHJsICpkcF9jdHJsKQoreworCXN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0 cmw7CisKKwlpZiAoIWRwX2N0cmwpCisJCXJldHVybjsKKworCWN0cmwgPSBjb250YWluZXJfb2Yo ZHBfY3RybCwgc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSwgZHBfY3RybCk7CisKKwljdHJsLT5jYXRh bG9nLT5nZXRfaW50ZXJydXB0KGN0cmwtPmNhdGFsb2cpOworCisJaWYgKGN0cmwtPmNhdGFsb2ct PmlzciAmIERQX0NUUkxfSU5UUl9SRUFEWV9GT1JfVklERU8pCisJCWRwX2N0cmxfdmlkZW9fcmVh ZHkoY3RybCk7CisKKwlpZiAoY3RybC0+Y2F0YWxvZy0+aXNyICYgRFBfQ1RSTF9JTlRSX0lETEVf UEFUVEVSTl9TRU5UKQorCQlkcF9jdHJsX2lkbGVfcGF0dGVybnNfc2VudChjdHJsKTsKK30KKwor c3RydWN0IGRwX2N0cmwgKmRwX2N0cmxfZ2V0KHN0cnVjdCBkcF9jdHJsX2luICppbikKK3sKKwlp bnQgcmMgPSAwOworCXN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0cmw7CisJc3RydWN0IGRwX2N0 cmwgKmRwX2N0cmw7CisKKwlpZiAoIWluLT5kZXYgfHwgIWluLT5wYW5lbCB8fCAhaW4tPmF1eCB8 fAorCSAgICAhaW4tPmxpbmsgfHwgIWluLT5jYXRhbG9nKSB7CisJCXByX2VycigiaW52YWxpZCBp bnB1dFxuIik7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBlcnJvcjsKKwl9CisKKwljdHJsID0g ZGV2bV9remFsbG9jKGluLT5kZXYsIHNpemVvZigqY3RybCksIEdGUF9LRVJORUwpOworCWlmICgh Y3RybCkgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3I7CisJfQorCisJaW5pdF9jb21w bGV0aW9uKCZjdHJsLT5pZGxlX2NvbXApOworCWluaXRfY29tcGxldGlvbigmY3RybC0+dmlkZW9f Y29tcCk7CisKKwkvKiBpbiBwYXJhbWV0ZXJzICovCisJY3RybC0+cGFyc2VyICAgPSBpbi0+cGFy c2VyOworCWN0cmwtPnBhbmVsICAgID0gaW4tPnBhbmVsOworCWN0cmwtPnBvd2VyICAgID0gaW4t PnBvd2VyOworCWN0cmwtPmF1eCAgICAgID0gaW4tPmF1eDsKKwljdHJsLT5saW5rICAgICA9IGlu LT5saW5rOworCWN0cmwtPmNhdGFsb2cgID0gaW4tPmNhdGFsb2c7CisJY3RybC0+ZGV2ICAgICAg PSBpbi0+ZGV2OworCisJZHBfY3RybCA9ICZjdHJsLT5kcF9jdHJsOworCisJLyogb3V0IHBhcmFt ZXRlcnMgKi8KKwlkcF9jdHJsLT5pbml0ICAgICAgPSBkcF9jdHJsX2hvc3RfaW5pdDsKKwlkcF9j dHJsLT5kZWluaXQgICAgPSBkcF9jdHJsX2hvc3RfZGVpbml0OworCWRwX2N0cmwtPm9uICAgICAg ICA9IGRwX2N0cmxfb247CisJZHBfY3RybC0+b2ZmICAgICAgID0gZHBfY3RybF9vZmY7CisJZHBf Y3RybC0+cHVzaF9pZGxlID0gZHBfY3RybF9wdXNoX2lkbGU7CisJZHBfY3RybC0+YWJvcnQgICAg ID0gZHBfY3RybF9hYm9ydDsKKwlkcF9jdHJsLT5pc3IgICAgICAgPSBkcF9jdHJsX2lzcjsKKwlk cF9jdHJsLT5yZXNldAkgICA9IGRwX2N0cmxfcmVzZXQ7CisJZHBfY3RybC0+aGFuZGxlX3Npbmtf cmVxdWVzdCA9IGRwX2N0cmxfaGFuZGxlX3NpbmtfcmVxdWVzdDsKKworCXJldHVybiBkcF9jdHJs OworZXJyb3I6CisJcmV0dXJuIEVSUl9QVFIocmMpOworfQorCit2b2lkIGRwX2N0cmxfcHV0KHN0 cnVjdCBkcF9jdHJsICpkcF9jdHJsKQoreworCXN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0cmw7 CisKKwlpZiAoIWRwX2N0cmwpCisJCXJldHVybjsKKworCWN0cmwgPSBjb250YWluZXJfb2YoZHBf Y3RybCwgc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSwgZHBfY3RybCk7CisKKwlkZXZtX2tmcmVlKGN0 cmwtPmRldiwgY3RybCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2Rw X2N0cmwuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY3RybC5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhYjIyMWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2dwdS9kcm0vbXNtL2RwL2RwX2N0cmwuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJp Z2h0IChjKSAyMDEyLTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2Vy dmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lvbiAy IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpZm5kZWYgX0RQX0NUUkxfSF8KKyNkZWZpbmUg X0RQX0NUUkxfSF8KKworI2luY2x1ZGUgImRwX2F1eC5oIgorI2luY2x1ZGUgImRwX3BhbmVsLmgi CisjaW5jbHVkZSAiZHBfbGluay5oIgorI2luY2x1ZGUgImRwX3BhcnNlci5oIgorI2luY2x1ZGUg ImRwX3Bvd2VyLmgiCisjaW5jbHVkZSAiZHBfY2F0YWxvZy5oIgorCitzdHJ1Y3QgZHBfY3RybCB7 CisJaW50ICgqaW5pdCkoc3RydWN0IGRwX2N0cmwgKmRwX2N0cmwsIGJvb2wgZmxpcCk7CisJdm9p ZCAoKmRlaW5pdCkoc3RydWN0IGRwX2N0cmwgKmRwX2N0cmwpOworCWludCAoKm9uKShzdHJ1Y3Qg ZHBfY3RybCAqZHBfY3RybCk7CisJdm9pZCAoKm9mZikoc3RydWN0IGRwX2N0cmwgKmRwX2N0cmwp OworCXZvaWQgKCpyZXNldCkoc3RydWN0IGRwX2N0cmwgKmRwX2N0cmwpOworCXZvaWQgKCpwdXNo X2lkbGUpKHN0cnVjdCBkcF9jdHJsICpkcF9jdHJsKTsKKwl2b2lkICgqYWJvcnQpKHN0cnVjdCBk cF9jdHJsICpkcF9jdHJsKTsKKwl2b2lkICgqaXNyKShzdHJ1Y3QgZHBfY3RybCAqZHBfY3RybCk7 CisJdm9pZCAoKmhhbmRsZV9zaW5rX3JlcXVlc3QpKHN0cnVjdCBkcF9jdHJsICpkcF9jdHJsKTsK K307CisKK3N0cnVjdCBkcF9jdHJsX2luIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0 IGRwX3BhbmVsICpwYW5lbDsKKwlzdHJ1Y3QgZHBfYXV4ICphdXg7CisJc3RydWN0IGRwX2xpbmsg Kmxpbms7CisJc3RydWN0IGRwX3BhcnNlciAqcGFyc2VyOworCXN0cnVjdCBkcF9wb3dlciAqcG93 ZXI7CisJc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY2F0YWxvZzsKK307CisKK3N0cnVjdCBkcF9j dHJsICpkcF9jdHJsX2dldChzdHJ1Y3QgZHBfY3RybF9pbiAqaW4pOwordm9pZCBkcF9jdHJsX3B1 dChzdHJ1Y3QgZHBfY3RybCAqZHBfY3RybCk7CisKKyNlbmRpZiAvKiBfRFBfQ1RSTF9IXyAqLwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kZWJ1Zy5jIGIvZHJpdmVycy9n cHUvZHJtL21zbS9kcC9kcF9kZWJ1Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjVjMGE4Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2Rw X2RlYnVnLmMKQEAgLTAsMCArMSw1MDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAx OCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgdmVyc2lvbiAyIGFuZAorICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KyAqCisgKi8KKworI2RlZmluZSBwcl9mbXQoZm10KQkiW2RybS1kcF0gJXM6ICIgZm10LCBfX2Z1 bmNfXworCisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGRybS9kcm1fY29u bmVjdG9yLmg+CisKKyNpbmNsdWRlICJkcF9wYXJzZXIuaCIKKyNpbmNsdWRlICJkcF9wb3dlci5o IgorI2luY2x1ZGUgImRwX2NhdGFsb2cuaCIKKyNpbmNsdWRlICJkcF9hdXguaCIKKyNpbmNsdWRl ICJkcF9jdHJsLmgiCisjaW5jbHVkZSAiZHBfZGVidWcuaCIKKyNpbmNsdWRlICJkcF9kaXNwbGF5 LmgiCisKKyNkZWZpbmUgREVCVUdfTkFNRSAiZHJtX2RwIgorCitzdHJ1Y3QgZHBfZGVidWdfcHJp dmF0ZSB7CisJc3RydWN0IGRlbnRyeSAqcm9vdDsKKworCXN0cnVjdCBkcF91c2JwZCAqdXNicGQ7 CisJc3RydWN0IGRwX2xpbmsgKmxpbms7CisJc3RydWN0IGRwX3BhbmVsICpwYW5lbDsKKwlzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqKmNvbm5lY3RvcjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisKKwlz dHJ1Y3QgZHBfZGVidWcgZHBfZGVidWc7Cit9OworCitzdGF0aWMgc3NpemVfdCBkcF9kZWJ1Z193 cml0ZV9ocGQoc3RydWN0IGZpbGUgKmZpbGUsCisJCWNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1 ZmYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBkcF9kZWJ1Z19wcml2 YXRlICpkZWJ1ZyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1ZltTWl84XTsKKwlzaXpl X3QgbGVuID0gMDsKKwlpbnQgaHBkOworCisJaWYgKCFkZWJ1ZykKKwkJcmV0dXJuIC1FTk9ERVY7 CisKKwlpZiAoKnBwb3MpCisJCXJldHVybiAwOworCisJLyogTGVhdmUgcm9vbSBmb3IgdGVybWlu YXRpb24gY2hhciAqLworCWxlbiA9IG1pbl90KHNpemVfdCwgY291bnQsIFNaXzggLSAxKTsKKwlp ZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZmYsIGxlbikpCisJCWdvdG8gZW5kOworCisJ YnVmW2xlbl0gPSAnXDAnOworCisJaWYgKGtzdHJ0b2ludChidWYsIDEwLCAmaHBkKSAhPSAwKQor CQlnb3RvIGVuZDsKKworCWlmIChkZWJ1Zy0+dXNicGQgJiYgZGVidWctPnVzYnBkLT5jb25uZWN0 KQorCQlkZWJ1Zy0+dXNicGQtPmNvbm5lY3QoZGVidWctPnVzYnBkLCBocGQpOworCitlbmQ6CisJ cmV0dXJuIC1sZW47Cit9CisKK3N0YXRpYyBzc2l6ZV90IGRwX2RlYnVnX3dyaXRlX2VkaWRfbW9k ZXMoc3RydWN0IGZpbGUgKmZpbGUsCisJCWNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZmYsIHNp emVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBkcF9kZWJ1Z19wcml2YXRlICpk ZWJ1ZyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1ZltTWl8zMl07CisJc2l6ZV90IGxl biA9IDA7CisJaW50IGhkaXNwbGF5ID0gMCwgdmRpc3BsYXkgPSAwLCB2cmVmcmVzaCA9IDA7CisK KwlpZiAoIWRlYnVnKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICgqcHBvcykKKwkJZ290byBl bmQ7CisKKwkvKiBMZWF2ZSByb29tIGZvciB0ZXJtaW5hdGlvbiBjaGFyICovCisJbGVuID0gbWlu X3Qoc2l6ZV90LCBjb3VudCwgU1pfMzIgLSAxKTsKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1 c2VyX2J1ZmYsIGxlbikpCisJCWdvdG8gY2xlYXI7CisKKwlidWZbbGVuXSA9ICdcMCc7CisKKwlp ZiAoc3NjYW5mKGJ1ZiwgIiVkICVkICVkIiwgJmhkaXNwbGF5LCAmdmRpc3BsYXksICZ2cmVmcmVz aCkgIT0gMykKKwkJZ290byBjbGVhcjsKKworCWlmICghaGRpc3BsYXkgfHwgIXZkaXNwbGF5IHx8 ICF2cmVmcmVzaCkKKwkJZ290byBjbGVhcjsKKworCWRlYnVnLT5kcF9kZWJ1Zy5kZWJ1Z19lbiA9 IHRydWU7CisJZGVidWctPmRwX2RlYnVnLmhkaXNwbGF5ID0gaGRpc3BsYXk7CisJZGVidWctPmRw X2RlYnVnLnZkaXNwbGF5ID0gdmRpc3BsYXk7CisJZGVidWctPmRwX2RlYnVnLnZyZWZyZXNoID0g dnJlZnJlc2g7CisJZ290byBlbmQ7CitjbGVhcjoKKwlwcl9kZWJ1ZygiY2xlYXJpbmcgZGVidWcg bW9kZXNcbiIpOworCWRlYnVnLT5kcF9kZWJ1Zy5kZWJ1Z19lbiA9IGZhbHNlOworZW5kOgorCXJl dHVybiBsZW47Cit9CisKK3N0YXRpYyBzc2l6ZV90IGRwX2RlYnVnX3JlYWRfY29ubmVjdGVkKHN0 cnVjdCBmaWxlICpmaWxlLAorCQljaGFyIF9fdXNlciAqdXNlcl9idWZmLCBzaXplX3QgY291bnQs IGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgZHBfZGVidWdfcHJpdmF0ZSAqZGVidWcgPSBmaWxl LT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbU1pfOF07CisJdTMyIGxlbiA9IDA7CisKKwlpZiAo IWRlYnVnKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICgqcHBvcykKKwkJcmV0dXJuIDA7CisK KwlpZiAoIWRlYnVnLT51c2JwZCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlsZW4gKz0gc25wcmlu dGYoYnVmLCBTWl84LCAiJWRcbiIsIGRlYnVnLT51c2JwZC0+aHBkX2hpZ2gpOworCisJaWYgKGNv cHlfdG9fdXNlcih1c2VyX2J1ZmYsIGJ1ZiwgbGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwkq cHBvcyArPSBsZW47CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHNzaXplX3QgZHBfZGVidWdf cmVhZF9lZGlkX21vZGVzKHN0cnVjdCBmaWxlICpmaWxlLAorCQljaGFyIF9fdXNlciAqdXNlcl9i dWZmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgZHBfZGVidWdfcHJp dmF0ZSAqZGVidWcgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciAqYnVmOworCXUzMiBsZW4g PSAwOworCWludCByYyA9IDA7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKwlz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKKworCWlmICghZGVidWcpIHsKKwkJcHJfZXJy KCJpbnZhbGlkIGRhdGFcbiIpOworCQlyYyA9IC1FTk9ERVY7CisJCWdvdG8gZXJyb3I7CisJfQor CisJY29ubmVjdG9yID0gKmRlYnVnLT5jb25uZWN0b3I7CisKKwlpZiAoIWNvbm5lY3Rvcikgewor CQlwcl9lcnIoImNvbm5lY3RvciBpcyBOVUxMXG4iKTsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3Rv IGVycm9yOworCX0KKworCWlmICgqcHBvcykKKwkJZ290byBlcnJvcjsKKworCWJ1ZiA9IGt6YWxs b2MoU1pfNEssIEdGUF9LRVJORUwpOworCWlmICghYnVmKSB7CisJCXJjID0gLUVOT01FTTsKKwkJ Z290byBlcnJvcjsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vZGUsICZjb25uZWN0b3It Pm1vZGVzLCBoZWFkKSB7CisJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIFNaXzRLIC0gbGVu LAorCQkiJXMgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgMHgleFxuIiwKKwkJbW9kZS0+bmFt ZSwgbW9kZS0+dnJlZnJlc2gsIG1vZGUtPmhkaXNwbGF5LAorCQltb2RlLT5oc3luY19zdGFydCwg bW9kZS0+aHN5bmNfZW5kLCBtb2RlLT5odG90YWwsCisJCW1vZGUtPnZkaXNwbGF5LCBtb2RlLT52 c3luY19zdGFydCwgbW9kZS0+dnN5bmNfZW5kLAorCQltb2RlLT52dG90YWwsIG1vZGUtPmZsYWdz KTsKKwl9CisKKwlpZiAoY29weV90b191c2VyKHVzZXJfYnVmZiwgYnVmLCBsZW4pKSB7CisJCWtm cmVlKGJ1Zik7CisJCXJjID0gLUVGQVVMVDsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkqcHBvcyAr PSBsZW47CisJa2ZyZWUoYnVmKTsKKworCXJldHVybiBsZW47CitlcnJvcjoKKwlyZXR1cm4gcmM7 Cit9CisKK3N0YXRpYyBpbnQgZHBfZGVidWdfY2hlY2tfYnVmZmVyX292ZXJmbG93KGludCByYywg aW50ICptYXhfc2l6ZSwgaW50ICpsZW4pCit7CisJaWYgKHJjID49ICptYXhfc2l6ZSkgeworCQlw cl9lcnIoImJ1ZmZlciBvdmVyZmxvd1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkqbGVu ICs9IHJjOworCSptYXhfc2l6ZSA9IFNaXzRLIC0gKmxlbjsKKworCXJldHVybiAwOworfQorCitz dGF0aWMgc3NpemVfdCBkcF9kZWJ1Z19yZWFkX2luZm8oc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIg X191c2VyICp1c2VyX2J1ZmYsCisJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0 cnVjdCBkcF9kZWJ1Z19wcml2YXRlICpkZWJ1ZyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFy ICpidWY7CisJdTMyIGxlbiA9IDAsIHJjID0gMDsKKwl1NjQgbGNsayA9IDA7CisJdTMyIG1heF9z aXplID0gU1pfNEs7CisKKwlpZiAoIWRlYnVnKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICgq cHBvcykKKwkJcmV0dXJuIDA7CisKKwlidWYgPSBremFsbG9jKFNaXzRLLCBHRlBfS0VSTkVMKTsK KwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyYyA9IHNucHJpbnRmKGJ1ZiArIGxl biwgbWF4X3NpemUsICJcdG5hbWUgPSAlc1xuIiwgREVCVUdfTkFNRSk7CisJaWYgKGRwX2RlYnVn X2NoZWNrX2J1ZmZlcl9vdmVyZmxvdyhyYywgJm1heF9zaXplLCAmbGVuKSkKKwkJZ290byBlcnJv cjsKKworCXJjID0gc25wcmludGYoYnVmICsgbGVuLCBtYXhfc2l6ZSwKKwkJIlx0ZHBfcGFuZWxc blx0XHRtYXhfcGNsa19raHogPSAlZFxuIiwKKwkJZGVidWctPnBhbmVsLT5tYXhfcGNsa19raHop OworCWlmIChkcF9kZWJ1Z19jaGVja19idWZmZXJfb3ZlcmZsb3cocmMsICZtYXhfc2l6ZSwgJmxl bikpCisJCWdvdG8gZXJyb3I7CisKKwlyYyA9IHNucHJpbnRmKGJ1ZiArIGxlbiwgbWF4X3NpemUs CisJCSJcdGRybV9kcF9saW5rXG5cdFx0cmF0ZSA9ICV1XG4iLAorCQlkZWJ1Zy0+cGFuZWwtPmxp bmtfaW5mby5yYXRlKTsKKwlpZiAoZHBfZGVidWdfY2hlY2tfYnVmZmVyX292ZXJmbG93KHJjLCAm bWF4X3NpemUsICZsZW4pKQorCQlnb3RvIGVycm9yOworCisJcmMgPSBzbnByaW50ZihidWYgKyBs ZW4sIG1heF9zaXplLAorCQkiXHRcdG51bV9sYW5lcyA9ICV1XG4iLAorCQlkZWJ1Zy0+cGFuZWwt PmxpbmtfaW5mby5udW1fbGFuZXMpOworCWlmIChkcF9kZWJ1Z19jaGVja19idWZmZXJfb3ZlcmZs b3cocmMsICZtYXhfc2l6ZSwgJmxlbikpCisJCWdvdG8gZXJyb3I7CisKKwlyYyA9IHNucHJpbnRm KGJ1ZiArIGxlbiwgbWF4X3NpemUsCisJCSJcdFx0Y2FwYWJpbGl0aWVzID0gJWx1XG4iLAorCQlk ZWJ1Zy0+cGFuZWwtPmxpbmtfaW5mby5jYXBhYmlsaXRpZXMpOworCWlmIChkcF9kZWJ1Z19jaGVj a19idWZmZXJfb3ZlcmZsb3cocmMsICZtYXhfc2l6ZSwgJmxlbikpCisJCWdvdG8gZXJyb3I7CisK KwlyYyA9IHNucHJpbnRmKGJ1ZiArIGxlbiwgbWF4X3NpemUsCisJCSJcdGRwX3BhbmVsX2luZm86 XG5cdFx0YWN0aXZlID0gJWR4JWRcbiIsCisJCWRlYnVnLT5wYW5lbC0+cGluZm8uaF9hY3RpdmUs CisJCWRlYnVnLT5wYW5lbC0+cGluZm8udl9hY3RpdmUpOworCWlmIChkcF9kZWJ1Z19jaGVja19i dWZmZXJfb3ZlcmZsb3cocmMsICZtYXhfc2l6ZSwgJmxlbikpCisJCWdvdG8gZXJyb3I7CisKKwly YyA9IHNucHJpbnRmKGJ1ZiArIGxlbiwgbWF4X3NpemUsCisJCSJcdFx0YmFja19wb3JjaCA9ICVk eCVkXG4iLAorCQlkZWJ1Zy0+cGFuZWwtPnBpbmZvLmhfYmFja19wb3JjaCwKKwkJZGVidWctPnBh bmVsLT5waW5mby52X2JhY2tfcG9yY2gpOworCWlmIChkcF9kZWJ1Z19jaGVja19idWZmZXJfb3Zl cmZsb3cocmMsICZtYXhfc2l6ZSwgJmxlbikpCisJCWdvdG8gZXJyb3I7CisKKwlyYyA9IHNucHJp bnRmKGJ1ZiArIGxlbiwgbWF4X3NpemUsCisJCSJcdFx0ZnJvbnRfcG9yY2ggPSAlZHglZFxuIiwK KwkJZGVidWctPnBhbmVsLT5waW5mby5oX2Zyb250X3BvcmNoLAorCQlkZWJ1Zy0+cGFuZWwtPnBp bmZvLnZfZnJvbnRfcG9yY2gpOworCWlmIChkcF9kZWJ1Z19jaGVja19idWZmZXJfb3ZlcmZsb3co cmMsICZtYXhfc2l6ZSwgJmxlbikpCisJCWdvdG8gZXJyb3I7CisKKwlyYyA9IHNucHJpbnRmKGJ1 ZiArIGxlbiwgbWF4X3NpemUsCisJCSJcdFx0c3luY193aWR0aCA9ICVkeCVkXG4iLAorCQlkZWJ1 Zy0+cGFuZWwtPnBpbmZvLmhfc3luY193aWR0aCwKKwkJZGVidWctPnBhbmVsLT5waW5mby52X3N5 bmNfd2lkdGgpOworCWlmIChkcF9kZWJ1Z19jaGVja19idWZmZXJfb3ZlcmZsb3cocmMsICZtYXhf c2l6ZSwgJmxlbikpCisJCWdvdG8gZXJyb3I7CisKKwlyYyA9IHNucHJpbnRmKGJ1ZiArIGxlbiwg bWF4X3NpemUsCisJCSJcdFx0YWN0aXZlX2xvdyA9ICVkeCVkXG4iLAorCQlkZWJ1Zy0+cGFuZWwt PnBpbmZvLmhfYWN0aXZlX2xvdywKKwkJZGVidWctPnBhbmVsLT5waW5mby52X2FjdGl2ZV9sb3cp OworCWlmIChkcF9kZWJ1Z19jaGVja19idWZmZXJfb3ZlcmZsb3cocmMsICZtYXhfc2l6ZSwgJmxl bikpCisJCWdvdG8gZXJyb3I7CisKKwlyYyA9IHNucHJpbnRmKGJ1ZiArIGxlbiwgbWF4X3NpemUs CisJCSJcdFx0aF9za2V3ID0gJWRcbiIsCisJCWRlYnVnLT5wYW5lbC0+cGluZm8uaF9za2V3KTsK KwlpZiAoZHBfZGVidWdfY2hlY2tfYnVmZmVyX292ZXJmbG93KHJjLCAmbWF4X3NpemUsICZsZW4p KQorCQlnb3RvIGVycm9yOworCisJcmMgPSBzbnByaW50ZihidWYgKyBsZW4sIG1heF9zaXplLAor CQkiXHRcdHJlZnJlc2ggcmF0ZSA9ICVkXG4iLAorCQlkZWJ1Zy0+cGFuZWwtPnBpbmZvLnJlZnJl c2hfcmF0ZSk7CisJaWYgKGRwX2RlYnVnX2NoZWNrX2J1ZmZlcl9vdmVyZmxvdyhyYywgJm1heF9z aXplLCAmbGVuKSkKKwkJZ290byBlcnJvcjsKKworCXJjID0gc25wcmludGYoYnVmICsgbGVuLCBt YXhfc2l6ZSwKKwkJIlx0XHRwaXhlbCBjbG9jayBraHogPSAlZFxuIiwKKwkJZGVidWctPnBhbmVs LT5waW5mby5waXhlbF9jbGtfa2h6KTsKKwlpZiAoZHBfZGVidWdfY2hlY2tfYnVmZmVyX292ZXJm bG93KHJjLCAmbWF4X3NpemUsICZsZW4pKQorCQlnb3RvIGVycm9yOworCisJcmMgPSBzbnByaW50 ZihidWYgKyBsZW4sIG1heF9zaXplLAorCQkiXHRcdGJwcCA9ICVkXG4iLAorCQlkZWJ1Zy0+cGFu ZWwtPnBpbmZvLmJwcCk7CisJaWYgKGRwX2RlYnVnX2NoZWNrX2J1ZmZlcl9vdmVyZmxvdyhyYywg Jm1heF9zaXplLCAmbGVuKSkKKwkJZ290byBlcnJvcjsKKworCS8qIExpbmsgSW5mb3JtYXRpb24g Ki8KKwlyYyA9IHNucHJpbnRmKGJ1ZiArIGxlbiwgbWF4X3NpemUsCisJCSJcdGRwX2xpbms6XG5c dFx0dGVzdF9yZXF1ZXN0ZWQgPSAlZFxuIiwKKwkJZGVidWctPmxpbmstPnNpbmtfcmVxdWVzdCk7 CisJaWYgKGRwX2RlYnVnX2NoZWNrX2J1ZmZlcl9vdmVyZmxvdyhyYywgJm1heF9zaXplLCAmbGVu KSkKKwkJZ290byBlcnJvcjsKKworCXJjID0gc25wcmludGYoYnVmICsgbGVuLCBtYXhfc2l6ZSwK KwkJIlx0XHRsYW5lX2NvdW50ID0gJWRcbiIsIGRlYnVnLT5saW5rLT5saW5rX3BhcmFtcy5sYW5l X2NvdW50KTsKKwlpZiAoZHBfZGVidWdfY2hlY2tfYnVmZmVyX292ZXJmbG93KHJjLCAmbWF4X3Np emUsICZsZW4pKQorCQlnb3RvIGVycm9yOworCisJcmMgPSBzbnByaW50ZihidWYgKyBsZW4sIG1h eF9zaXplLAorCQkiXHRcdGJ3X2NvZGUgPSAlZFxuIiwgZGVidWctPmxpbmstPmxpbmtfcGFyYW1z LmJ3X2NvZGUpOworCWlmIChkcF9kZWJ1Z19jaGVja19idWZmZXJfb3ZlcmZsb3cocmMsICZtYXhf c2l6ZSwgJmxlbikpCisJCWdvdG8gZXJyb3I7CisKKwlsY2xrID0gZHJtX2RwX2J3X2NvZGVfdG9f bGlua19yYXRlKAorCQkJZGVidWctPmxpbmstPmxpbmtfcGFyYW1zLmJ3X2NvZGUpICogMTAwMDsK KwlyYyA9IHNucHJpbnRmKGJ1ZiArIGxlbiwgbWF4X3NpemUsCisJCSJcdFx0bGNsayA9ICVsbGRc biIsIGxjbGspOworCWlmIChkcF9kZWJ1Z19jaGVja19idWZmZXJfb3ZlcmZsb3cocmMsICZtYXhf c2l6ZSwgJmxlbikpCisJCWdvdG8gZXJyb3I7CisKKwlyYyA9IHNucHJpbnRmKGJ1ZiArIGxlbiwg bWF4X3NpemUsCisJCSJcdFx0dl9sZXZlbCA9ICVkXG4iLCBkZWJ1Zy0+bGluay0+cGh5X3BhcmFt cy52X2xldmVsKTsKKwlpZiAoZHBfZGVidWdfY2hlY2tfYnVmZmVyX292ZXJmbG93KHJjLCAmbWF4 X3NpemUsICZsZW4pKQorCQlnb3RvIGVycm9yOworCisJcmMgPSBzbnByaW50ZihidWYgKyBsZW4s IG1heF9zaXplLAorCQkiXHRcdHBfbGV2ZWwgPSAlZFxuIiwgZGVidWctPmxpbmstPnBoeV9wYXJh bXMucF9sZXZlbCk7CisJaWYgKGRwX2RlYnVnX2NoZWNrX2J1ZmZlcl9vdmVyZmxvdyhyYywgJm1h eF9zaXplLCAmbGVuKSkKKwkJZ290byBlcnJvcjsKKworCWlmIChjb3B5X3RvX3VzZXIodXNlcl9i dWZmLCBidWYsIGxlbikpCisJCWdvdG8gZXJyb3I7CisKKwkqcHBvcyArPSBsZW47CisKKwlrZnJl ZShidWYpOworCXJldHVybiBsZW47CitlcnJvcjoKKwlrZnJlZShidWYpOworCXJldHVybiAtRUlO VkFMOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkcF9kZWJ1Z19m b3BzID0geworCS5vcGVuID0gc2ltcGxlX29wZW4sCisJLnJlYWQgPSBkcF9kZWJ1Z19yZWFkX2lu Zm8sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBlZGlkX21vZGVz X2ZvcHMgPSB7CisJLm9wZW4gPSBzaW1wbGVfb3BlbiwKKwkucmVhZCA9IGRwX2RlYnVnX3JlYWRf ZWRpZF9tb2RlcywKKwkud3JpdGUgPSBkcF9kZWJ1Z193cml0ZV9lZGlkX21vZGVzLAorfTsKKwor c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaHBkX2ZvcHMgPSB7CisJLm9wZW4g PSBzaW1wbGVfb3BlbiwKKwkud3JpdGUgPSBkcF9kZWJ1Z193cml0ZV9ocGQsCit9OworCitzdGF0 aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjb25uZWN0ZWRfZm9wcyA9IHsKKwkub3Bl biA9IHNpbXBsZV9vcGVuLAorCS5yZWFkID0gZHBfZGVidWdfcmVhZF9jb25uZWN0ZWQsCit9Owor CitzdGF0aWMgaW50IGRwX2RlYnVnX2luaXQoc3RydWN0IGRwX2RlYnVnICpkcF9kZWJ1ZykKK3sK KwlpbnQgcmMgPSAwOworCXN0cnVjdCBkcF9kZWJ1Z19wcml2YXRlICpkZWJ1ZyA9IGNvbnRhaW5l cl9vZihkcF9kZWJ1ZywKKwkJc3RydWN0IGRwX2RlYnVnX3ByaXZhdGUsIGRwX2RlYnVnKTsKKwlz dHJ1Y3QgZGVudHJ5ICpkaXIsICpmaWxlLCAqZWRpZF9tb2RlczsKKwlzdHJ1Y3QgZGVudHJ5ICpo cGQsICpjb25uZWN0ZWQ7CisKKwlkaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoREVCVUdfTkFNRSwg TlVMTCk7CisJaWYgKElTX0VSUl9PUl9OVUxMKGRpcikpIHsKKwkJcmMgPSBQVFJfRVJSKGRpcik7 CisJCXByX2VycigiWyVzXSBkZWJ1Z2ZzIGNyZWF0ZSBkaXIgZmFpbGVkLCByYyA9ICVkXG4iLAor CQkgICAgICAgREVCVUdfTkFNRSwgcmMpOworCQlnb3RvIGVycm9yOworCX0KKworCWZpbGUgPSBk ZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJkcF9kZWJ1ZyIsIDA0NDQsIGRpciwKKwkJCQlkZWJ1ZywgJmRw X2RlYnVnX2ZvcHMpOworCWlmIChJU19FUlJfT1JfTlVMTChmaWxlKSkgeworCQlyYyA9IFBUUl9F UlIoZmlsZSk7CisJCXByX2VycigiWyVzXSBkZWJ1Z2ZzIGNyZWF0ZSBmaWxlIGZhaWxlZCwgcmM9 JWRcbiIsCisJCSAgICAgICBERUJVR19OQU1FLCByYyk7CisJCWdvdG8gZXJyb3JfcmVtb3ZlX2Rp cjsKKwl9CisKKwllZGlkX21vZGVzID0gZGVidWdmc19jcmVhdGVfZmlsZSgiZWRpZF9tb2RlcyIs IDA2NDQsIGRpciwKKwkJCQkJZGVidWcsICZlZGlkX21vZGVzX2ZvcHMpOworCWlmIChJU19FUlJf T1JfTlVMTChlZGlkX21vZGVzKSkgeworCQlyYyA9IFBUUl9FUlIoZWRpZF9tb2Rlcyk7CisJCXBy X2VycigiWyVzXSBkZWJ1Z2ZzIGNyZWF0ZSBlZGlkX21vZGVzIGZhaWxlZCwgcmM9JWRcbiIsCisJ CSAgICAgICBERUJVR19OQU1FLCByYyk7CisJCWdvdG8gZXJyb3JfcmVtb3ZlX2RpcjsKKwl9CisK KwlocGQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJocGQiLCAwNjQ0LCBkaXIsCisJCQkJCWRlYnVn LCAmaHBkX2ZvcHMpOworCWlmIChJU19FUlJfT1JfTlVMTChocGQpKSB7CisJCXJjID0gUFRSX0VS UihocGQpOworCQlwcl9lcnIoIlslc10gZGVidWdmcyBocGQgZmFpbGVkLCByYz0lZFxuIiwKKwkJ CURFQlVHX05BTUUsIHJjKTsKKwkJZ290byBlcnJvcl9yZW1vdmVfZGlyOworCX0KKworCWNvbm5l Y3RlZCA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImNvbm5lY3RlZCIsIDA0NDQsIGRpciwKKwkJCQkJ ZGVidWcsICZjb25uZWN0ZWRfZm9wcyk7CisJaWYgKElTX0VSUl9PUl9OVUxMKGNvbm5lY3RlZCkp IHsKKwkJcmMgPSBQVFJfRVJSKGNvbm5lY3RlZCk7CisJCXByX2VycigiWyVzXSBkZWJ1Z2ZzIGNv bm5lY3RlZCBmYWlsZWQsIHJjPSVkXG4iLAorCQkJREVCVUdfTkFNRSwgcmMpOworCQlnb3RvIGVy cm9yX3JlbW92ZV9kaXI7CisJfQorCisJZGVidWctPnJvb3QgPSBkaXI7CisJcmV0dXJuIHJjOwor ZXJyb3JfcmVtb3ZlX2RpcjoKKwlkZWJ1Z2ZzX3JlbW92ZShkaXIpOworZXJyb3I6CisJcmV0dXJu IHJjOworfQorCitzdHJ1Y3QgZHBfZGVidWcgKmRwX2RlYnVnX2dldChzdHJ1Y3QgZGV2aWNlICpk ZXYsIHN0cnVjdCBkcF9wYW5lbCAqcGFuZWwsCisJCQlzdHJ1Y3QgZHBfdXNicGQgKnVzYnBkLCBz dHJ1Y3QgZHBfbGluayAqbGluaywKKwkJCXN0cnVjdCBkcm1fY29ubmVjdG9yICoqY29ubmVjdG9y KQoreworCWludCByYyA9IDA7CisJc3RydWN0IGRwX2RlYnVnX3ByaXZhdGUgKmRlYnVnOworCXN0 cnVjdCBkcF9kZWJ1ZyAqZHBfZGVidWc7CisKKwlpZiAoIWRldiB8fCAhcGFuZWwgfHwgIXVzYnBk IHx8ICFsaW5rKSB7CisJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7CisJCXJjID0gLUVJTlZB TDsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlkZWJ1ZyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVv ZigqZGVidWcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRlYnVnKSB7CisJCXJjID0gLUVOT01FTTsK KwkJZ290byBlcnJvcjsKKwl9CisKKwlkZWJ1Zy0+ZHBfZGVidWcuZGVidWdfZW4gPSBmYWxzZTsK KwlkZWJ1Zy0+dXNicGQgPSB1c2JwZDsKKwlkZWJ1Zy0+bGluayA9IGxpbms7CisJZGVidWctPnBh bmVsID0gcGFuZWw7CisJZGVidWctPmRldiA9IGRldjsKKwlkZWJ1Zy0+Y29ubmVjdG9yID0gY29u bmVjdG9yOworCisJZHBfZGVidWcgPSAmZGVidWctPmRwX2RlYnVnOworCWRwX2RlYnVnLT52ZGlz cGxheSA9IDA7CisJZHBfZGVidWctPmhkaXNwbGF5ID0gMDsKKwlkcF9kZWJ1Zy0+dnJlZnJlc2gg PSAwOworCisJcmMgPSBkcF9kZWJ1Z19pbml0KGRwX2RlYnVnKTsKKwlpZiAocmMpIHsKKwkJZGV2 bV9rZnJlZShkZXYsIGRlYnVnKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlyZXR1cm4gZHBfZGVi dWc7CitlcnJvcjoKKwlyZXR1cm4gRVJSX1BUUihyYyk7Cit9CisKK3N0YXRpYyBpbnQgZHBfZGVi dWdfZGVpbml0KHN0cnVjdCBkcF9kZWJ1ZyAqZHBfZGVidWcpCit7CisJc3RydWN0IGRwX2RlYnVn X3ByaXZhdGUgKmRlYnVnOworCisJaWYgKCFkcF9kZWJ1ZykKKwkJcmV0dXJuIC1FSU5WQUw7CisK KwlkZWJ1ZyA9IGNvbnRhaW5lcl9vZihkcF9kZWJ1Zywgc3RydWN0IGRwX2RlYnVnX3ByaXZhdGUs IGRwX2RlYnVnKTsKKworCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShkZWJ1Zy0+cm9vdCk7CisK KwlyZXR1cm4gMDsKK30KKwordm9pZCBkcF9kZWJ1Z19wdXQoc3RydWN0IGRwX2RlYnVnICpkcF9k ZWJ1ZykKK3sKKwlzdHJ1Y3QgZHBfZGVidWdfcHJpdmF0ZSAqZGVidWc7CisKKwlpZiAoIWRwX2Rl YnVnKQorCQlyZXR1cm47CisKKwlkZWJ1ZyA9IGNvbnRhaW5lcl9vZihkcF9kZWJ1Zywgc3RydWN0 IGRwX2RlYnVnX3ByaXZhdGUsIGRwX2RlYnVnKTsKKworCWRwX2RlYnVnX2RlaW5pdChkcF9kZWJ1 Zyk7CisKKwlkZXZtX2tmcmVlKGRlYnVnLT5kZXYsIGRlYnVnKTsKK30KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGVidWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAv ZHBfZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjQ4MGUxCi0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kZWJ1Zy5oCkBAIC0w LDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAxOCwgVGhlIExpbnV4IEZv dW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lv biAyIGFuZAorICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2lm bmRlZiBfRFBfREVCVUdfSF8KKyNkZWZpbmUgX0RQX0RFQlVHX0hfCisKKyNpbmNsdWRlICJkcF9w YW5lbC5oIgorI2luY2x1ZGUgImRwX2xpbmsuaCIKKyNpbmNsdWRlICJkcF9leHRjb24uaCIKKwor LyoqCisgKiBzdHJ1Y3QgZHBfZGVidWcKKyAqIEBkZWJ1Z19lbjogc3BlY2lmaWVzIHdoZXRoZXIg ZGVidWcgbW9kZSBlbmFibGVkCisgKiBAdmRpc3BsYXk6IHVzZWQgdG8gZmlsdGVyIG91dCB2ZGlz cGxheSB2YWx1ZQorICogQGhkaXNwbGF5OiB1c2VkIHRvIGZpbHRlciBvdXQgaGRpc3BsYXkgdmFs dWUKKyAqIEB2cmVmcmVzaDogdXNlZCB0byBmaWx0ZXIgb3V0IHZyZWZyZXNoIHZhbHVlCisgKiBA dHBnX3N0YXRlOiBzcGVjaWZpZXMgd2hldGhlciB0cGcgZmVhdHVyZSBpcyBlbmFibGVkCisgKi8K K3N0cnVjdCBkcF9kZWJ1ZyB7CisJYm9vbCBkZWJ1Z19lbjsKKwlpbnQgYXNwZWN0X3JhdGlvOwor CWludCB2ZGlzcGxheTsKKwlpbnQgaGRpc3BsYXk7CisJaW50IHZyZWZyZXNoOworfTsKKworI2lm IGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQorCisvKioKKyAqIGRwX2RlYnVnX2dldCgpIC0gY29u ZmlndXJlIGFuZCBnZXQgdGhlIERpc3BsYXlQbG90IGRlYnVnIG1vZHVsZSBkYXRhCisgKgorICog QGRldjogZGV2aWNlIGluc3RhbmNlIG9mIHRoZSBjYWxsZXIKKyAqIEBwYW5lbDogaW5zdGFuY2Ug b2YgcGFuZWwgbW9kdWxlCisgKiBAdXNicGQ6IGluc3RhbmNlIG9mIHVzYnBkIG1vZHVsZQorICog QGxpbms6IGluc3RhbmNlIG9mIGxpbmsgbW9kdWxlCisgKiBAY29ubmVjdG9yOiBkb3VibGUgcG9p bnRlciB0byBkaXNwbGF5IGNvbm5lY3RvcgorICogcmV0dXJuOiBwb2ludGVyIHRvIGFsbG9jYXRl ZCBkZWJ1ZyBtb2R1bGUgZGF0YQorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB1cCB0aGUgZGVi dWcgbW9kdWxlIGFuZCBwcm92aWRlcyBhIHdheQorICogZm9yIGRlYnVnZnMgaW5wdXQgdG8gYmUg Y29tbXVuaWNhdGVkIHdpdGggZXhpc3RpbmcgbW9kdWxlcworICovCitzdHJ1Y3QgZHBfZGVidWcg KmRwX2RlYnVnX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkcF9wYW5lbCAqcGFuZWws CisJCQlzdHJ1Y3QgZHBfdXNicGQgKnVzYnBkLCBzdHJ1Y3QgZHBfbGluayAqbGluaywKKwkJCXN0 cnVjdCBkcm1fY29ubmVjdG9yICoqY29ubmVjdG9yKTsKKy8qKgorICogZHBfZGVidWdfcHV0KCkK KyAqCisgKiBDbGVhbnMgdXAgZHBfZGVidWcgaW5zdGFuY2UKKyAqCisgKiBAZHBfZGVidWc6IGlu c3RhbmNlIG9mIGRwX2RlYnVnCisgKi8KK3ZvaWQgZHBfZGVidWdfcHV0KHN0cnVjdCBkcF9kZWJ1 ZyAqZHBfZGVidWcpOworCisjZWxzZQorCitzdGF0aWMgaW5saW5lCitzdHJ1Y3QgZHBfZGVidWcg KmRwX2RlYnVnX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkcF9wYW5lbCAqcGFuZWws CisJCQlzdHJ1Y3QgZHBfdXNicGQgKnVzYnBkLCBzdHJ1Y3QgZHBfbGluayAqbGluaywKKwkJCXN0 cnVjdCBkcm1fY29ubmVjdG9yICoqY29ubmVjdG9yKQoreworCXJldHVybiBFUlJfUFRSKC1FSU5W QUwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZHBfZGVidWdfcHV0KHN0cnVjdCBkcF9kZWJ1 ZyAqZHBfZGVidWcpCit7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykg Ki8KKworI2VuZGlmIC8qIF9EUF9ERUJVR19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL21zbS9kcC9kcF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2Rpc3Bs YXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Yzk4Mzk5Ci0tLSAvZGV2 L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kaXNwbGF5LmMKQEAgLTAsMCAr MSw5NzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAxOCwgVGhlIExpbnV4IEZvdW5k YXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAy IGFuZAorICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2RlZmlu ZSBwcl9mbXQoZm10KQkiW2RybS1kcF0gJXM6ICIgZm10LCBfX2Z1bmNfXworCisjaW5jbHVkZSA8 bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4 L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgv Y29tcG9uZW50Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+CisKKyNpbmNsdWRlICJtc21f ZHJ2LmgiCisjaW5jbHVkZSAiZHBfZXh0Y29uLmgiCisjaW5jbHVkZSAiZHBfcGFyc2VyLmgiCisj aW5jbHVkZSAiZHBfcG93ZXIuaCIKKyNpbmNsdWRlICJkcF9jYXRhbG9nLmgiCisjaW5jbHVkZSAi ZHBfYXV4LmgiCisjaW5jbHVkZSAiZHBfbGluay5oIgorI2luY2x1ZGUgImRwX3BhbmVsLmgiCisj aW5jbHVkZSAiZHBfY3RybC5oIgorI2luY2x1ZGUgImRwX2Rpc3BsYXkuaCIKKyNpbmNsdWRlICJk cF9kcm0uaCIKKyNpbmNsdWRlICJkcF9kZWJ1Zy5oIgorCitzdGF0aWMgc3RydWN0IG1zbV9kcCAq Z19kcF9kaXNwbGF5OworI2RlZmluZSBIUERfU1RSSU5HX1NJWkUgMzAKKworc3RydWN0IGRwX2Rp c3BsYXlfcHJpdmF0ZSB7CisJY2hhciAqbmFtZTsKKwlpbnQgaXJxOworCisJLyogc3RhdGUgdmFy aWFibGVzICovCisJYm9vbCBjb3JlX2luaXRpYWxpemVkOworCWJvb2wgcG93ZXJfb247CisJYm9v bCBocGRfaXJxX29uOworCWJvb2wgYXVkaW9fc3VwcG9ydGVkOworCisJc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldjsKKwlzdHJ1Y3QgZGVudHJ5ICpyb290OworCXN0cnVjdCBjb21wbGV0aW9u IG5vdGlmaWNhdGlvbl9jb21wOworCisJc3RydWN0IGRwX3VzYnBkICAgKnVzYnBkOworCXN0cnVj dCBkcF9wYXJzZXIgICpwYXJzZXI7CisJc3RydWN0IGRwX3Bvd2VyICAgKnBvd2VyOworCXN0cnVj dCBkcF9jYXRhbG9nICpjYXRhbG9nOworCXN0cnVjdCBkcF9hdXggICAgICphdXg7CisJc3RydWN0 IGRwX2xpbmsgICAgKmxpbms7CisJc3RydWN0IGRwX3BhbmVsICAgKnBhbmVsOworCXN0cnVjdCBk cF9jdHJsICAgICpjdHJsOworCXN0cnVjdCBkcF9kZWJ1ZyAgICpkZWJ1ZzsKKworCXN0cnVjdCBk cF91c2JwZF9jYiB1c2JwZF9jYjsKKwlzdHJ1Y3QgZHBfZGlzcGxheV9tb2RlIG1vZGU7CisJc3Ry dWN0IG1zbV9kcCBkcF9kaXNwbGF5OworCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2Rl dmljZV9pZCBkcF9kdF9tYXRjaFtdID0geworCXsuY29tcGF0aWJsZSA9ICJxY29tLGRwLWRpc3Bs YXkifSwKKwl7fQorfTsKKworc3RhdGljIGlycXJldHVybl90IGRwX2Rpc3BsYXlfaXJxKGludCBp cnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcCA9IGRl dl9pZDsKKworCWlmICghZHApIHsKKwkJcHJfZXJyKCJpbnZhbGlkIGRhdGFcbiIpOworCQlyZXR1 cm4gSVJRX05PTkU7CisJfQorCisJLyogRFAgY29udHJvbGxlciBpc3IgKi8KKwlkcC0+Y3RybC0+ aXNyKGRwLT5jdHJsKTsKKworCS8qIERQIGF1eCBpc3IgKi8KKwlkcC0+YXV4LT5pc3IoZHAtPmF1 eCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgZHBfZGlzcGxheV9i aW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAorCQkJICAgdm9p ZCAqZGF0YSkKK3sKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUgKmRw OworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm07CisJc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJp djsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRl dik7CisKKwlpZiAoIWRldiB8fCAhcGRldiB8fCAhbWFzdGVyKSB7CisJCXByX2VycigiaW52YWxp ZCBwYXJhbShzKSwgZGV2ICVwSywgcGRldiAlcEssIG1hc3RlciAlcEtcbiIsCisJCQkJZGV2LCBw ZGV2LCBtYXN0ZXIpOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gZW5kOworCX0KKworCWRybSA9 IGRldl9nZXRfZHJ2ZGF0YShtYXN0ZXIpOworCWRwID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRl dik7CisJaWYgKCFkcm0gfHwgIWRwKSB7CisJCXByX2VycigiaW52YWxpZCBwYXJhbShzKSwgZHJt ICVwSywgZHAgJXBLXG4iLAorCQkJCWRybSwgZHApOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8g ZW5kOworCX0KKworCWRwLT5kcF9kaXNwbGF5LmRybV9kZXYgPSBkcm07CisJcHJpdiA9IGRybS0+ ZGV2X3ByaXZhdGU7CisJcHJpdi0+ZHAgPSAmKGRwLT5kcF9kaXNwbGF5KTsKKworCXJjID0gZHAt PnBhcnNlci0+cGFyc2UoZHAtPnBhcnNlcik7CisJaWYgKHJjKSB7CisJCXByX2VycigiZGV2aWNl IHRyZWUgcGFyc2luZyBmYWlsZWRcbiIpOworCQlnb3RvIGVuZDsKKwl9CisKKwlyYyA9IGRwLT5h dXgtPmRybV9hdXhfcmVnaXN0ZXIoZHAtPmF1eCk7CisJaWYgKHJjKSB7CisJCXByX2VycigiRFJN IERQIEFVWCByZWdpc3RlciBmYWlsZWRcbiIpOworCQlnb3RvIGVuZDsKKwl9CisKKwlyYyA9IGRw LT5wb3dlci0+cG93ZXJfY2xpZW50X2luaXQoZHAtPnBvd2VyKTsKKwlpZiAocmMpIHsKKwkJcHJf ZXJyKCJQb3dlciBjbGllbnQgY3JlYXRlIGZhaWxlZFxuIik7CisJCWdvdG8gZW5kOworCX0KKwor ZW5kOgorCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgZHBfZGlzcGxheV91bmJpbmQoc3Ry dWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCisJCQkgICAgICB2b2lkICpk YXRhKQoreworCXN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUgKmRwOworCXN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgZHJtX2Rl dmljZSAqZHJtID0gZGV2X2dldF9kcnZkYXRhKG1hc3Rlcik7CisJc3RydWN0IG1zbV9kcm1fcHJp dmF0ZSAqcHJpdiA9IGRybS0+ZGV2X3ByaXZhdGU7CisKKwlpZiAoIWRldiB8fCAhcGRldikgewor CQlwcl9lcnIoImludmFsaWQgcGFyYW0ocylcbiIpOworCQlyZXR1cm47CisJfQorCisJZHAgPSBw bGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpZiAoIWRwKSB7CisJCXByX2VycigiSW52YWxp ZCBwYXJhbXNcbiIpOworCQlyZXR1cm47CisJfQorCisJKHZvaWQpZHAtPnBvd2VyLT5wb3dlcl9j bGllbnRfZGVpbml0KGRwLT5wb3dlcik7CisJKHZvaWQpZHAtPmF1eC0+ZHJtX2F1eF9kZXJlZ2lz dGVyKGRwLT5hdXgpOworCXByaXYtPmRwID0gTlVMTDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVj dCBjb21wb25lbnRfb3BzIGRwX2Rpc3BsYXlfY29tcF9vcHMgPSB7CisJLmJpbmQgPSBkcF9kaXNw bGF5X2JpbmQsCisJLnVuYmluZCA9IGRwX2Rpc3BsYXlfdW5iaW5kLAorfTsKKworc3RhdGljIGJv b2wgZHBfZGlzcGxheV9pc19kc19icmlkZ2Uoc3RydWN0IGRwX3BhbmVsICpwYW5lbCkKK3sKKwly ZXR1cm4gKHBhbmVsLT5kcGNkW0RQX0RPV05TVFJFQU1QT1JUX1BSRVNFTlRdICYKKwkJRFBfRFdO X1NUUk1fUE9SVF9QUkVTRU5UKTsKK30KKworc3RhdGljIGJvb2wgZHBfZGlzcGxheV9pc19zaW5r X2NvdW50X3plcm8oc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHApCit7CisJcmV0dXJuIGRw X2Rpc3BsYXlfaXNfZHNfYnJpZGdlKGRwLT5wYW5lbCkgJiYKKwkJKGRwLT5saW5rLT5zaW5rX2Nv dW50LmNvdW50ID09IDApOworfQorCitzdGF0aWMgdm9pZCBkcF9kaXNwbGF5X3NlbmRfaHBkX2V2 ZW50KHN0cnVjdCBtc21fZHAgKmRwX2Rpc3BsYXkpCit7CisJc3RydWN0IGRwX2Rpc3BsYXlfcHJp dmF0ZSAqZHA7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKworCWlmICghZHBf ZGlzcGxheSkgeworCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOworCQlyZXR1cm47CisJfQor CisJZHAgPSBjb250YWluZXJfb2YoZHBfZGlzcGxheSwgc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0 ZSwgZHBfZGlzcGxheSk7CisJaWYgKCFkcCkgeworCQlwcl9lcnIoImludmFsaWQgcGFyYW1zXG4i KTsKKwkJcmV0dXJuOworCX0KKworCWNvbm5lY3RvciA9IGRwLT5kcF9kaXNwbGF5LmNvbm5lY3Rv cjsKKwlkcm1faGVscGVyX2hwZF9pcnFfZXZlbnQoY29ubmVjdG9yLT5kZXYpOworfQorCitzdGF0 aWMgaW50IGRwX2Rpc3BsYXlfc2VuZF9ocGRfbm90aWZpY2F0aW9uKHN0cnVjdCBkcF9kaXNwbGF5 X3ByaXZhdGUgKmRwLAorCQkJCQkgICAgYm9vbCBocGQpCit7CisJaWYgKChocGQgJiYgZHAtPmRw X2Rpc3BsYXkuaXNfY29ubmVjdGVkKSB8fAorCQkJKCFocGQgJiYgIWRwLT5kcF9kaXNwbGF5Lmlz X2Nvbm5lY3RlZCkpIHsKKwkJcHJfaW5mbygiSFBEIGFscmVhZHkgJXNcbiIsIChocGQgPyAib24i IDogIm9mZiIpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogcmVzZXQgdmlkZW8gcGF0dGVybiBm bGFnIG9uIGRpc2Nvbm5lY3QgKi8KKwlpZiAoIWhwZCkKKwkJZHAtPnBhbmVsLT52aWRlb190ZXN0 ID0gZmFsc2U7CisKKwlkcC0+ZHBfZGlzcGxheS5pc19jb25uZWN0ZWQgPSBocGQ7CisJcmVpbml0 X2NvbXBsZXRpb24oJmRwLT5ub3RpZmljYXRpb25fY29tcCk7CisJZHBfZGlzcGxheV9zZW5kX2hw ZF9ldmVudCgmZHAtPmRwX2Rpc3BsYXkpOworCisJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3Rp bWVvdXQoJmRwLT5ub3RpZmljYXRpb25fY29tcCwgSFogKiAyKSkgeworCQlwcl93YXJuKCIlcyB0 aW1lb3V0XG4iLCBocGQgPyAiY29ubmVjdCIgOiAiZGlzY29ubmVjdCIpOworCQlyZXR1cm4gLUVJ TlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkcF9kaXNwbGF5X3Byb2Nl c3NfaHBkX2hpZ2goc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHApCit7CisJaW50IHJjID0g MDsKKwlzdHJ1Y3QgZWRpZCAqZWRpZDsKKworCWRwLT5hdXgtPmluaXQoZHAtPmF1eCwgZHAtPnBh cnNlci0+YXV4X2NmZyk7CisKKwlpZiAoZHAtPmxpbmstPnBzbV9lbmFibGVkKQorCQlnb3RvIG5v dGlmeTsKKworCXJjID0gZHAtPnBhbmVsLT5yZWFkX3NpbmtfY2FwcyhkcC0+cGFuZWwsIGRwLT5k cF9kaXNwbGF5LmNvbm5lY3Rvcik7CisJaWYgKHJjKQorCQlnb3RvIG5vdGlmeTsKKworCWRwLT5s aW5rLT5wcm9jZXNzX3JlcXVlc3QoZHAtPmxpbmspOworCisJaWYgKGRwX2Rpc3BsYXlfaXNfc2lu a19jb3VudF96ZXJvKGRwKSkgeworCQlwcl9kZWJ1Zygibm8gZG93bnN0cmVhbSBkZXZpY2VzIGNv bm5lY3RlZFxuIik7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBlbmQ7CisJfQorCisJZWRpZCA9 IGRwLT5wYW5lbC0+ZWRpZDsKKworCWRwLT5hdWRpb19zdXBwb3J0ZWQgPSBkcm1fZGV0ZWN0X21v bml0b3JfYXVkaW8oZWRpZCk7CisKKwlkcC0+cGFuZWwtPmhhbmRsZV9zaW5rX3JlcXVlc3QoZHAt PnBhbmVsKTsKKworCWRwLT5kcF9kaXNwbGF5Lm1heF9wY2xrX2toeiA9IGRwLT5wYXJzZXItPm1h eF9wY2xrX2toejsKK25vdGlmeToKKwlkcF9kaXNwbGF5X3NlbmRfaHBkX25vdGlmaWNhdGlvbihk cCwgdHJ1ZSk7CisKK2VuZDoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIGRwX2Rpc3Bs YXlfaG9zdF9pbml0KHN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUgKmRwKQoreworCWJvb2wgZmxp cCA9IGZhbHNlOworCisJaWYgKGRwLT5jb3JlX2luaXRpYWxpemVkKSB7CisJCXByX2RlYnVnKCJE UCBjb3JlIGFscmVhZHkgaW5pdGlhbGl6ZWRcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKGRw LT51c2JwZC0+b3JpZW50YXRpb24gPT0gT1JJRU5UQVRJT05fQ0MyKQorCQlmbGlwID0gdHJ1ZTsK KworCWRwLT5wb3dlci0+aW5pdChkcC0+cG93ZXIsIGZsaXApOworCWRwLT5jdHJsLT5pbml0KGRw LT5jdHJsLCBmbGlwKTsKKwllbmFibGVfaXJxKGRwLT5pcnEpOworCWRwLT5jb3JlX2luaXRpYWxp emVkID0gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgZHBfZGlzcGxheV9ob3N0X2RlaW5pdChzdHJ1 Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcCkKK3sKKwlpZiAoIWRwLT5jb3JlX2luaXRpYWxpemVk KSB7CisJCXByX2RlYnVnKCJEUCBjb3JlIGFscmVhZHkgb2ZmXG4iKTsKKwkJcmV0dXJuOworCX0K KworCWRwLT5jdHJsLT5kZWluaXQoZHAtPmN0cmwpOworCWRwLT5wb3dlci0+ZGVpbml0KGRwLT5w b3dlcik7CisJZGlzYWJsZV9pcnEoZHAtPmlycSk7CisJZHAtPmNvcmVfaW5pdGlhbGl6ZWQgPSBm YWxzZTsKK30KKworc3RhdGljIHZvaWQgZHBfZGlzcGxheV9wcm9jZXNzX2hwZF9sb3coc3RydWN0 IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHApCit7CisJLyogY2FuY2VsIGFueSBwZW5kaW5nIHJlcXVl c3QgKi8KKwlkcC0+Y3RybC0+YWJvcnQoZHAtPmN0cmwpOworCisJZHBfZGlzcGxheV9zZW5kX2hw ZF9ub3RpZmljYXRpb24oZHAsIGZhbHNlKTsKKworCWRwLT5hdXgtPmRlaW5pdChkcC0+YXV4KTsK K30KKworc3RhdGljIGludCBkcF9kaXNwbGF5X3VzYnBkX2NvbmZpZ3VyZV9jYihzdHJ1Y3QgZGV2 aWNlICpkZXYpCit7CisJaW50IHJjID0gMDsKKwlzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpk cDsKKworCWlmICghZGV2KSB7CisJCXByX2VycigiaW52YWxpZCBkZXZcbiIpOworCQlyYyA9IC1F SU5WQUw7CisJCWdvdG8gZW5kOworCX0KKworCWRwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJ aWYgKCFkcCkgeworCQlwcl9lcnIoIm5vIGRyaXZlciBkYXRhIGZvdW5kXG4iKTsKKwkJcmMgPSAt RU5PREVWOworCQlnb3RvIGVuZDsKKwl9CisKKwlkcF9kaXNwbGF5X2hvc3RfaW5pdChkcCk7CisK KwlpZiAoZHAtPnVzYnBkLT5ocGRfaGlnaCkKKwkJZHBfZGlzcGxheV9wcm9jZXNzX2hwZF9oaWdo KGRwKTsKK2VuZDoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIGRwX2Rpc3BsYXlfY2xl YW4oc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHApCit7CisJZHAtPmN0cmwtPnB1c2hfaWRs ZShkcC0+Y3RybCk7CisJZHAtPmN0cmwtPm9mZihkcC0+Y3RybCk7Cit9CisKK3N0YXRpYyBpbnQg ZHBfZGlzcGxheV91c2JwZF9kaXNjb25uZWN0X2NiKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlp bnQgcmMgPSAwOworCXN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUgKmRwOworCisJaWYgKCFkZXYp IHsKKwkJcHJfZXJyKCJpbnZhbGlkIGRldlxuIik7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBl bmQ7CisJfQorCisJZHAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpZiAoIWRwKSB7CisJCXBy X2Vycigibm8gZHJpdmVyIGRhdGEgZm91bmRcbiIpOworCQlyYyA9IC1FTk9ERVY7CisJCWdvdG8g ZW5kOworCX0KKworCS8qIGNhbmNlbCBhbnkgcGVuZGluZyByZXF1ZXN0ICovCisJZHAtPmN0cmwt PmFib3J0KGRwLT5jdHJsKTsKKworCXJjID0gZHBfZGlzcGxheV9zZW5kX2hwZF9ub3RpZmljYXRp b24oZHAsIGZhbHNlKTsKKworCS8qIGlmIGNhYmxlIGlzIGRpc2Nvbm5lY3RlZCwgcmVzZXQgcHNt X2VuYWJsZWQgZmxhZyAqLworCWlmICghZHAtPnVzYnBkLT5hbHRfbW9kZV9jZmdfZG9uZSkKKwkJ ZHAtPmxpbmstPnBzbV9lbmFibGVkID0gZmFsc2U7CisKKwlpZiAoKHJjIDwgMCkgJiYgZHAtPnBv d2VyX29uKQorCQlkcF9kaXNwbGF5X2NsZWFuKGRwKTsKKworCWRwX2Rpc3BsYXlfaG9zdF9kZWlu aXQoZHApOworZW5kOgorCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgZHBfZGlzcGxheV9o YW5kbGVfdmlkZW9fcmVxdWVzdChzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcCkKK3sKKwlp ZiAoZHAtPmxpbmstPnNpbmtfcmVxdWVzdCAmIERQX1RFU1RfTElOS19WSURFT19QQVRURVJOKSB7 CisJCS8qIGZvcmNlIGRpc2Nvbm5lY3QgZm9sbG93ZWQgYnkgY29ubmVjdCAqLworCQlkcC0+dXNi cGQtPmNvbm5lY3QoZHAtPnVzYnBkLCBmYWxzZSk7CisJCWRwLT5wYW5lbC0+dmlkZW9fdGVzdCA9 IHRydWU7CisJCWRwLT51c2JwZC0+Y29ubmVjdChkcC0+dXNicGQsIHRydWUpOworCQlkcC0+bGlu ay0+c2VuZF90ZXN0X3Jlc3BvbnNlKGRwLT5saW5rKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZHBf ZGlzcGxheV9oYW5kbGVfaHBkX2lycShzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcCkKK3sK KwlpZiAoZHAtPmxpbmstPnNpbmtfcmVxdWVzdCAmIERTX1BPUlRfU1RBVFVTX0NIQU5HRUQpIHsK KwkJZHBfZGlzcGxheV9zZW5kX2hwZF9ub3RpZmljYXRpb24oZHAsIGZhbHNlKTsKKworCQlpZiAo ZHBfZGlzcGxheV9pc19zaW5rX2NvdW50X3plcm8oZHApKSB7CisJCQlwcl9kZWJ1Zygic2luayBj b3VudCBpcyB6ZXJvLCBub3RoaW5nIHRvIGRvXG4iKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJ cmV0dXJuIGRwX2Rpc3BsYXlfcHJvY2Vzc19ocGRfaGlnaChkcCk7CisJfQorCisJZHAtPmN0cmwt PmhhbmRsZV9zaW5rX3JlcXVlc3QoZHAtPmN0cmwpOworCisJZHBfZGlzcGxheV9oYW5kbGVfdmlk ZW9fcmVxdWVzdChkcCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkcF9kaXNwbGF5 X3VzYnBkX2F0dGVudGlvbl9jYihzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IHJjID0gMDsK KwlzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcDsKKworCWlmICghZGV2KSB7CisJCXByX2Vy cigiaW52YWxpZCBkZXZcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkcCA9IGRldl9n ZXRfZHJ2ZGF0YShkZXYpOworCWlmICghZHApIHsKKwkJcHJfZXJyKCJubyBkcml2ZXIgZGF0YSBm b3VuZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChkcC0+dXNicGQtPmhwZF9p cnEpIHsKKwkJZHAtPmhwZF9pcnFfb24gPSB0cnVlOworCisJCXJjID0gZHAtPmxpbmstPnByb2Nl c3NfcmVxdWVzdChkcC0+bGluayk7CisJCS8qIGNoZWNrIGZvciBhbnkgdGVzdCByZXF1ZXN0IGlz c3VlZCBieSBzaW5rICovCisJCWlmICghcmMpCisJCQlkcF9kaXNwbGF5X2hhbmRsZV9ocGRfaXJx KGRwKTsKKworCQlkcC0+aHBkX2lycV9vbiA9IGZhbHNlOworCQlnb3RvIGVuZDsKKwl9CisKKwlp ZiAoIWRwLT51c2JwZC0+aHBkX2hpZ2gpIHsKKwkJZHBfZGlzcGxheV9wcm9jZXNzX2hwZF9sb3co ZHApOworCQlnb3RvIGVuZDsKKwl9CisKKwlpZiAoZHAtPnVzYnBkLT5hbHRfbW9kZV9jZmdfZG9u ZSkKKwkJZHBfZGlzcGxheV9wcm9jZXNzX2hwZF9oaWdoKGRwKTsKK2VuZDoKKwlyZXR1cm4gcmM7 Cit9CisKK3N0YXRpYyB2b2lkIGRwX2Rpc3BsYXlfZGVpbml0X3N1Yl9tb2R1bGVzKHN0cnVjdCBk cF9kaXNwbGF5X3ByaXZhdGUgKmRwKQoreworCWRwX2N0cmxfcHV0KGRwLT5jdHJsKTsKKwlkcF9s aW5rX3B1dChkcC0+bGluayk7CisJZHBfcGFuZWxfcHV0KGRwLT5wYW5lbCk7CisJZHBfYXV4X3B1 dChkcC0+YXV4KTsKKwlkcF9wb3dlcl9wdXQoZHAtPnBvd2VyKTsKKwlkcF9jYXRhbG9nX3B1dChk cC0+Y2F0YWxvZyk7CisJZHBfcGFyc2VyX3B1dChkcC0+cGFyc2VyKTsKKwlkcF9kZWJ1Z19wdXQo ZHAtPmRlYnVnKTsKK30KKworc3RhdGljIGludCBkcF9pbml0X3N1Yl9tb2R1bGVzKHN0cnVjdCBk cF9kaXNwbGF5X3ByaXZhdGUgKmRwKQoreworCWludCByYyA9IDA7CisJc3RydWN0IGRldmljZSAq ZGV2ID0gJmRwLT5wZGV2LT5kZXY7CisJc3RydWN0IGRwX3VzYnBkX2NiICpjYiA9ICZkcC0+dXNi cGRfY2I7CisJc3RydWN0IGRwX2N0cmxfaW4gY3RybF9pbiA9IHsKKwkJLmRldiA9IGRldiwKKwl9 OworCXN0cnVjdCBkcF9wYW5lbF9pbiBwYW5lbF9pbiA9IHsKKwkJLmRldiA9IGRldiwKKwl9Owor CisJLyogQ2FsbGJhY2sgQVBJcyB1c2VkIGZvciBjYWJsZSBzdGF0dXMgY2hhbmdlIGV2ZW50ICov CisJY2ItPmNvbmZpZ3VyZSAgPSBkcF9kaXNwbGF5X3VzYnBkX2NvbmZpZ3VyZV9jYjsKKwljYi0+ ZGlzY29ubmVjdCA9IGRwX2Rpc3BsYXlfdXNicGRfZGlzY29ubmVjdF9jYjsKKwljYi0+YXR0ZW50 aW9uICA9IGRwX2Rpc3BsYXlfdXNicGRfYXR0ZW50aW9uX2NiOworCisJZHAtPnBhcnNlciA9IGRw X3BhcnNlcl9nZXQoZHAtPnBkZXYpOworCWlmIChJU19FUlIoZHAtPnBhcnNlcikpIHsKKwkJcmMg PSBQVFJfRVJSKGRwLT5wYXJzZXIpOworCQlwcl9lcnIoImZhaWxlZCB0byBpbml0aWFsaXplIHBh cnNlciwgcmMgPSAlZFxuIiwgcmMpOworCQlkcC0+cGFyc2VyID0gTlVMTDsKKwkJZ290byBlcnJv cl9wYXJzZXI7CisJfQorCisJZHAtPmNhdGFsb2cgPSBkcF9jYXRhbG9nX2dldChkZXYsICZkcC0+ cGFyc2VyLT5pbyk7CisJaWYgKElTX0VSUihkcC0+Y2F0YWxvZykpIHsKKwkJcmMgPSBQVFJfRVJS KGRwLT5jYXRhbG9nKTsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBjYXRhbG9nLCBy YyA9ICVkXG4iLCByYyk7CisJCWRwLT5jYXRhbG9nID0gTlVMTDsKKwkJZ290byBlcnJvcl9jYXRh bG9nOworCX0KKworCWRwLT5wb3dlciA9IGRwX3Bvd2VyX2dldChkcC0+cGFyc2VyKTsKKwlpZiAo SVNfRVJSKGRwLT5wb3dlcikpIHsKKwkJcmMgPSBQVFJfRVJSKGRwLT5wb3dlcik7CisJCXByX2Vy cigiZmFpbGVkIHRvIGluaXRpYWxpemUgcG93ZXIsIHJjID0gJWRcbiIsIHJjKTsKKwkJZHAtPnBv d2VyID0gTlVMTDsKKwkJZ290byBlcnJvcl9wb3dlcjsKKwl9CisKKwlkcC0+YXV4ID0gZHBfYXV4 X2dldChkZXYsICZkcC0+Y2F0YWxvZy0+YXV4LCBkcC0+cGFyc2VyLT5hdXhfY2ZnKTsKKwlpZiAo SVNfRVJSKGRwLT5hdXgpKSB7CisJCXJjID0gUFRSX0VSUihkcC0+YXV4KTsKKwkJcHJfZXJyKCJm YWlsZWQgdG8gaW5pdGlhbGl6ZSBhdXgsIHJjID0gJWRcbiIsIHJjKTsKKwkJZHAtPmF1eCA9IE5V TEw7CisJCWdvdG8gZXJyb3JfYXV4OworCX0KKworCWRwLT5saW5rID0gZHBfbGlua19nZXQoZGV2 LCBkcC0+YXV4KTsKKwlpZiAoSVNfRVJSKGRwLT5saW5rKSkgeworCQlyYyA9IFBUUl9FUlIoZHAt PmxpbmspOworCQlwcl9lcnIoImZhaWxlZCB0byBpbml0aWFsaXplIGxpbmssIHJjID0gJWRcbiIs IHJjKTsKKwkJZHAtPmxpbmsgPSBOVUxMOworCQlnb3RvIGVycm9yX2xpbms7CisJfQorCisJcGFu ZWxfaW4uYXV4ID0gZHAtPmF1eDsKKwlwYW5lbF9pbi5jYXRhbG9nID0gJmRwLT5jYXRhbG9nLT5w YW5lbDsKKwlwYW5lbF9pbi5saW5rID0gZHAtPmxpbms7CisKKwlkcC0+cGFuZWwgPSBkcF9wYW5l bF9nZXQoJnBhbmVsX2luKTsKKwlpZiAoSVNfRVJSKGRwLT5wYW5lbCkpIHsKKwkJcmMgPSBQVFJf RVJSKGRwLT5wYW5lbCk7CisJCXByX2VycigiZmFpbGVkIHRvIGluaXRpYWxpemUgcGFuZWwsIHJj ID0gJWRcbiIsIHJjKTsKKwkJZHAtPnBhbmVsID0gTlVMTDsKKwkJZ290byBlcnJvcl9wYW5lbDsK Kwl9CisKKwljdHJsX2luLmxpbmsgPSBkcC0+bGluazsKKwljdHJsX2luLnBhbmVsID0gZHAtPnBh bmVsOworCWN0cmxfaW4uYXV4ID0gZHAtPmF1eDsKKwljdHJsX2luLnBvd2VyID0gZHAtPnBvd2Vy OworCWN0cmxfaW4uY2F0YWxvZyA9ICZkcC0+Y2F0YWxvZy0+Y3RybDsKKwljdHJsX2luLnBhcnNl ciA9IGRwLT5wYXJzZXI7CisKKwlkcC0+Y3RybCA9IGRwX2N0cmxfZ2V0KCZjdHJsX2luKTsKKwlp ZiAoSVNfRVJSKGRwLT5jdHJsKSkgeworCQlyYyA9IFBUUl9FUlIoZHAtPmN0cmwpOworCQlwcl9l cnIoImZhaWxlZCB0byBpbml0aWFsaXplIGN0cmwsIHJjID0gJWRcbiIsIHJjKTsKKwkJZHAtPmN0 cmwgPSBOVUxMOworCQlnb3RvIGVycm9yX2N0cmw7CisJfQorCisJZHAtPmRlYnVnID0gZHBfZGVi dWdfZ2V0KGRldiwgZHAtPnBhbmVsLCBkcC0+dXNicGQsCisJCQkJZHAtPmxpbmssICZkcC0+ZHBf ZGlzcGxheS5jb25uZWN0b3IpOworCWlmIChJU19FUlIoZHAtPmRlYnVnKSkgeworCQlyYyA9IFBU Ul9FUlIoZHAtPmRlYnVnKTsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBkZWJ1Zywg cmMgPSAlZFxuIiwgcmMpOworCQlkcC0+ZGVidWcgPSBOVUxMOworCQlnb3RvIGVycm9yX2RlYnVn OworCX0KKworCXJldHVybiByYzsKK2Vycm9yX2RlYnVnOgorCWRwX2N0cmxfcHV0KGRwLT5jdHJs KTsKK2Vycm9yX2N0cmw6CisJZHBfcGFuZWxfcHV0KGRwLT5wYW5lbCk7CitlcnJvcl9wYW5lbDoK KwlkcF9saW5rX3B1dChkcC0+bGluayk7CitlcnJvcl9saW5rOgorCWRwX2F1eF9wdXQoZHAtPmF1 eCk7CitlcnJvcl9hdXg6CisJZHBfcG93ZXJfcHV0KGRwLT5wb3dlcik7CitlcnJvcl9wb3dlcjoK KwlkcF9jYXRhbG9nX3B1dChkcC0+Y2F0YWxvZyk7CitlcnJvcl9jYXRhbG9nOgorCWRwX3BhcnNl cl9wdXQoZHAtPnBhcnNlcik7CitlcnJvcl9wYXJzZXI6CisJcmV0dXJuIHJjOworfQorCitzdGF0 aWMgaW50IGRwX2Rpc3BsYXlfc2V0X21vZGUoc3RydWN0IG1zbV9kcCAqZHBfZGlzcGxheSwKKwkJ CSAgICAgICBzdHJ1Y3QgZHBfZGlzcGxheV9tb2RlICptb2RlKQoreworCWludCByYyA9IDA7CisJ c3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHA7CisKKwlpZiAoIWRwX2Rpc3BsYXkpIHsKKwkJ cHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIGVycm9y OworCX0KKwlkcCA9IGNvbnRhaW5lcl9vZihkcF9kaXNwbGF5LCBzdHJ1Y3QgZHBfZGlzcGxheV9w cml2YXRlLCBkcF9kaXNwbGF5KTsKKworCWRwLT5wYW5lbC0+cGluZm8gPSBtb2RlLT50aW1pbmc7 CisJZHAtPnBhbmVsLT5pbml0X2luZm8oZHAtPnBhbmVsKTsKK2Vycm9yOgorCXJldHVybiByYzsK K30KKworc3RhdGljIGludCBkcF9kaXNwbGF5X3ByZXBhcmUoc3RydWN0IG1zbV9kcCAqZHApCit7 CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHBfZGlzcGxheV9lbmFibGUoc3RydWN0IG1z bV9kcCAqZHBfZGlzcGxheSkKK3sKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBkcF9kaXNwbGF5X3By aXZhdGUgKmRwOworCisJaWYgKCFkcF9kaXNwbGF5KSB7CisJCXByX2VycigiaW52YWxpZCBpbnB1 dFxuIik7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlkcCA9IGNvbnRh aW5lcl9vZihkcF9kaXNwbGF5LCBzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlLCBkcF9kaXNwbGF5 KTsKKworCWlmIChkcC0+cG93ZXJfb24pIHsKKwkJcHJfZGVidWcoIkxpbmsgYWxyZWFkeSBzZXR1 cCwgcmV0dXJuXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZHAtPmF1eC0+aW5pdChkcC0+YXV4 LCBkcC0+cGFyc2VyLT5hdXhfY2ZnKTsKKworCXJjID0gZHAtPmN0cmwtPm9uKGRwLT5jdHJsKTsK KwlpZiAoIXJjKQorCQlkcC0+cG93ZXJfb24gPSB0cnVlOworZXJyb3I6CisJcmV0dXJuIHJjOwor fQorCitzdGF0aWMgaW50IGRwX2Rpc3BsYXlfcG9zdF9lbmFibGUoc3RydWN0IG1zbV9kcCAqZHBf ZGlzcGxheSkKK3sKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUgKmRw OworCisJaWYgKCFkcF9kaXNwbGF5KSB7CisJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7CisJ CXJjID0gLUVJTlZBTDsKKwkJZ290byBlbmQ7CisJfQorCisJZHAgPSBjb250YWluZXJfb2YoZHBf ZGlzcGxheSwgc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSwgZHBfZGlzcGxheSk7CisKKwljb21w bGV0ZV9hbGwoJmRwLT5ub3RpZmljYXRpb25fY29tcCk7CisKK2VuZDoKKwlyZXR1cm4gcmM7Cit9 CisKK3N0YXRpYyBpbnQgZHBfZGlzcGxheV9wcmVfZGlzYWJsZShzdHJ1Y3QgbXNtX2RwICpkcF9k aXNwbGF5KQoreworCWludCByYyA9IDA7CisJc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHA7 CisKKwlpZiAoIWRwX2Rpc3BsYXkpIHsKKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKKwkJ cmMgPSAtRUlOVkFMOworCQlnb3RvIGVycm9yOworCX0KKworCWRwID0gY29udGFpbmVyX29mKGRw X2Rpc3BsYXksIHN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUsIGRwX2Rpc3BsYXkpOworCisJaWYg KGRwLT51c2JwZC0+YWx0X21vZGVfY2ZnX2RvbmUgJiYgKGRwLT51c2JwZC0+aHBkX2hpZ2ggfHwK KwkJZHAtPnVzYnBkLT5mb3JjZWRfZGlzY29ubmVjdCkpCisJCWRwLT5saW5rLT5wc21fY29uZmln KGRwLT5saW5rLCAmZHAtPnBhbmVsLT5saW5rX2luZm8sIHRydWUpOworCisJZHAtPmN0cmwtPnB1 c2hfaWRsZShkcC0+Y3RybCk7CitlcnJvcjoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQg ZHBfZGlzcGxheV9kaXNhYmxlKHN0cnVjdCBtc21fZHAgKmRwX2Rpc3BsYXkpCit7CisJaW50IHJj ID0gMDsKKwlzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcDsKKworCWlmICghZHBfZGlzcGxh eSkgeworCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOworCQlyYyA9IC1FSU5WQUw7CisJCWdv dG8gZXJyb3I7CisJfQorCisJZHAgPSBjb250YWluZXJfb2YoZHBfZGlzcGxheSwgc3RydWN0IGRw X2Rpc3BsYXlfcHJpdmF0ZSwgZHBfZGlzcGxheSk7CisKKwlpZiAoIWRwLT5wb3dlcl9vbiB8fCAh ZHAtPmNvcmVfaW5pdGlhbGl6ZWQpCisJCWdvdG8gZXJyb3I7CisKKwlkcC0+Y3RybC0+b2ZmKGRw LT5jdHJsKTsKKworCWRwLT5wb3dlcl9vbiA9IGZhbHNlOworCisJY29tcGxldGVfYWxsKCZkcC0+ bm90aWZpY2F0aW9uX2NvbXApOworZXJyb3I6CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50 IGRwX3JlcXVlc3RfaXJxKHN0cnVjdCBtc21fZHAgKmRwX2Rpc3BsYXkpCit7CisJaW50IHJjID0g MDsKKwlzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcDsKKworCWlmICghZHBfZGlzcGxheSkg eworCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisK KwlkcCA9IGNvbnRhaW5lcl9vZihkcF9kaXNwbGF5LCBzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRl LCBkcF9kaXNwbGF5KTsKKworCWRwLT5pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChkcC0+cGRl di0+ZGV2Lm9mX25vZGUsIDApOworCWlmIChkcC0+aXJxIDwgMCkgeworCQlyYyA9IGRwLT5pcnE7 CisJCXByX2VycigiZmFpbGVkIHRvIGdldCBpcnE6ICVkXG4iLCByYyk7CisJCXJldHVybiByYzsK Kwl9CisKKwlyYyA9IGRldm1fcmVxdWVzdF9pcnEoJmRwLT5wZGV2LT5kZXYsIGRwLT5pcnEsIGRw X2Rpc3BsYXlfaXJxLAorCQlJUlFGX1RSSUdHRVJfSElHSCwgImRwX2Rpc3BsYXlfaXNyIiwgZHAp OworCWlmIChyYyA8IDApIHsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gcmVxdWVzdCBJUlEldTogJWRc biIsCisJCQkJZHAtPmlycSwgcmMpOworCQlyZXR1cm4gcmM7CisJfQorCWRpc2FibGVfaXJxKGRw LT5pcnEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHBfZGVidWcgKmRwX2dl dF9kZWJ1ZyhzdHJ1Y3QgbXNtX2RwICpkcF9kaXNwbGF5KQoreworCXN0cnVjdCBkcF9kaXNwbGF5 X3ByaXZhdGUgKmRwOworCisJaWYgKCFkcF9kaXNwbGF5KSB7CisJCXByX2VycigiaW52YWxpZCBp bnB1dFxuIik7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KKworCWRwID0gY29udGFp bmVyX29mKGRwX2Rpc3BsYXksIHN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUsIGRwX2Rpc3BsYXkp OworCisJcmV0dXJuIGRwLT5kZWJ1ZzsKK30KKworc3RhdGljIGludCBkcF9kaXNwbGF5X3VucHJl cGFyZShzdHJ1Y3QgbXNtX2RwICpkcCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBk cF9kaXNwbGF5X3ZhbGlkYXRlX21vZGUoc3RydWN0IG1zbV9kcCAqZHAsIHUzMiBtb2RlX3BjbGtf a2h6KQoreworCWNvbnN0IHUzMiBudW1fY29tcG9uZW50cyA9IDMsIGRlZmF1bHRfYnBwID0gMjQ7 CisJc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHBfZGlzcGxheTsKKwlzdHJ1Y3QgZHJtX2Rw X2xpbmsgKmxpbmtfaW5mbzsKKwl1MzIgbW9kZV9yYXRlX2toeiA9IDAsIHN1cHBvcnRlZF9yYXRl X2toeiA9IDAsIG1vZGVfYnBwID0gMDsKKworCWlmICghZHAgfHwgIW1vZGVfcGNsa19raHogfHwg IWRwLT5jb25uZWN0b3IpIHsKKwkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtc1xuIik7CisJCXJldHVy biAtRUlOVkFMOworCX0KKworCWRwX2Rpc3BsYXkgPSBjb250YWluZXJfb2YoZHAsIHN0cnVjdCBk cF9kaXNwbGF5X3ByaXZhdGUsIGRwX2Rpc3BsYXkpOworCWxpbmtfaW5mbyA9ICZkcF9kaXNwbGF5 LT5wYW5lbC0+bGlua19pbmZvOworCisJbW9kZV9icHAgPSBkcC0+Y29ubmVjdG9yLT5kaXNwbGF5 X2luZm8uYnBjICogbnVtX2NvbXBvbmVudHM7CisJaWYgKCFtb2RlX2JwcCkKKwkJbW9kZV9icHAg PSBkZWZhdWx0X2JwcDsKKworCW1vZGVfYnBwID0gZHBfZGlzcGxheS0+cGFuZWwtPmdldF9tb2Rl X2JwcChkcF9kaXNwbGF5LT5wYW5lbCwKKwkJCW1vZGVfYnBwLCBtb2RlX3BjbGtfa2h6KTsKKwor CW1vZGVfcmF0ZV9raHogPSBtb2RlX3BjbGtfa2h6ICogbW9kZV9icHA7CisJc3VwcG9ydGVkX3Jh dGVfa2h6ID0gbGlua19pbmZvLT5udW1fbGFuZXMgKiBsaW5rX2luZm8tPnJhdGUgKiA4OworCisJ aWYgKG1vZGVfcmF0ZV9raHogPiBzdXBwb3J0ZWRfcmF0ZV9raHopCisJCXJldHVybiBNT0RFX0JB RDsKKworCXJldHVybiBNT0RFX09LOworfQorCitzdGF0aWMgaW50IGRwX2Rpc3BsYXlfZ2V0X21v ZGVzKHN0cnVjdCBtc21fZHAgKmRwLAorCQkJCXN0cnVjdCBkcF9kaXNwbGF5X21vZGUgKmRwX21v ZGUpCit7CisJc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHBfZGlzcGxheTsKKwlpbnQgcmV0 ID0gMDsKKworCWlmICghZHApIHsKKwkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtc1xuIik7CisJCXJl dHVybiAwOworCX0KKworCWRwX2Rpc3BsYXkgPSBjb250YWluZXJfb2YoZHAsIHN0cnVjdCBkcF9k aXNwbGF5X3ByaXZhdGUsIGRwX2Rpc3BsYXkpOworCisJcmV0ID0gZHBfZGlzcGxheS0+cGFuZWwt PmdldF9tb2RlcyhkcF9kaXNwbGF5LT5wYW5lbCwKKwkJZHAtPmNvbm5lY3RvciwgZHBfbW9kZSk7 CisJaWYgKGRwX21vZGUtPnRpbWluZy5waXhlbF9jbGtfa2h6KQorCQlkcC0+bWF4X3BjbGtfa2h6 ID0gZHBfbW9kZS0+dGltaW5nLnBpeGVsX2Nsa19raHo7CisJcmV0dXJuIHJldDsKK30KKworc3Rh dGljIGJvb2wgZHBfZGlzcGxheV9jaGVja192aWRlb190ZXN0KHN0cnVjdCBtc21fZHAgKmRwKQor eworCXN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUgKmRwX2Rpc3BsYXk7CisKKwlpZiAoIWRwKSB7 CisJCXByX2VycigiaW52YWxpZCBwYXJhbXNcbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJ ZHBfZGlzcGxheSA9IGNvbnRhaW5lcl9vZihkcCwgc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSwg ZHBfZGlzcGxheSk7CisKKwlpZiAoZHBfZGlzcGxheS0+cGFuZWwtPnZpZGVvX3Rlc3QpCisJCXJl dHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW50IGRwX2Rpc3BsYXlf Z2V0X3Rlc3RfYnBwKHN0cnVjdCBtc21fZHAgKmRwKQoreworCXN0cnVjdCBkcF9kaXNwbGF5X3By aXZhdGUgKmRwX2Rpc3BsYXk7CisKKwlpZiAoIWRwKSB7CisJCXByX2VycigiaW52YWxpZCBwYXJh bXNcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlkcF9kaXNwbGF5ID0gY29udGFpbmVyX29mKGRw LCBzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlLCBkcF9kaXNwbGF5KTsKKworCXJldHVybiBkcF9s aW5rX2JpdF9kZXB0aF90b19icHAoCisJCWRwX2Rpc3BsYXktPmxpbmstPnRlc3RfdmlkZW8udGVz dF9iaXRfZGVwdGgpOworfQorCitzdGF0aWMgaW50IGRwX2Rpc3BsYXlfcHJvYmUoc3RydWN0IHBs YXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBkcF9kaXNwbGF5 X3ByaXZhdGUgKmRwOworCisJaWYgKCFwZGV2IHx8ICFwZGV2LT5kZXYub2Zfbm9kZSkgeworCQlw cl9lcnIoInBkZXYgbm90IGZvdW5kXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZHAg PSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpkcCksIEdGUF9LRVJORUwpOworCWlm ICghZHApCisJCXJldHVybiAtRU5PTUVNOworCisJaW5pdF9jb21wbGV0aW9uKCZkcC0+bm90aWZp Y2F0aW9uX2NvbXApOworCisJZHAtPnBkZXYgPSBwZGV2OworCWRwLT5uYW1lID0gImRybV9kcCI7 CisKKwlyYyA9IGRwX2luaXRfc3ViX21vZHVsZXMoZHApOworCWlmIChyYykgeworCQlwcl9lcnIo ImluaXQgc3ViIG1vZHVsZSBmYWlsZWRcbiIpOworCQlkZXZtX2tmcmVlKCZwZGV2LT5kZXYsIGRw KTsKKwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEo cGRldiwgZHApOworCisJZ19kcF9kaXNwbGF5ID0gJmRwLT5kcF9kaXNwbGF5OworCisJZ19kcF9k aXNwbGF5LT5lbmFibGUgICAgICAgID0gZHBfZGlzcGxheV9lbmFibGU7CisJZ19kcF9kaXNwbGF5 LT5wb3N0X2VuYWJsZSAgID0gZHBfZGlzcGxheV9wb3N0X2VuYWJsZTsKKwlnX2RwX2Rpc3BsYXkt PnByZV9kaXNhYmxlICAgPSBkcF9kaXNwbGF5X3ByZV9kaXNhYmxlOworCWdfZHBfZGlzcGxheS0+ ZGlzYWJsZSAgICAgICA9IGRwX2Rpc3BsYXlfZGlzYWJsZTsKKwlnX2RwX2Rpc3BsYXktPnNldF9t b2RlICAgICAgPSBkcF9kaXNwbGF5X3NldF9tb2RlOworCWdfZHBfZGlzcGxheS0+dmFsaWRhdGVf bW9kZSA9IGRwX2Rpc3BsYXlfdmFsaWRhdGVfbW9kZTsKKwlnX2RwX2Rpc3BsYXktPmdldF9tb2Rl cyAgICAgPSBkcF9kaXNwbGF5X2dldF9tb2RlczsKKwlnX2RwX2Rpc3BsYXktPnByZXBhcmUgICAg ICAgPSBkcF9kaXNwbGF5X3ByZXBhcmU7CisJZ19kcF9kaXNwbGF5LT51bnByZXBhcmUgICAgID0g ZHBfZGlzcGxheV91bnByZXBhcmU7CisJZ19kcF9kaXNwbGF5LT5yZXF1ZXN0X2lycSAgID0gZHBf cmVxdWVzdF9pcnE7CisJZ19kcF9kaXNwbGF5LT5nZXRfZGVidWcgICAgID0gZHBfZ2V0X2RlYnVn OworCWdfZHBfZGlzcGxheS0+c2VuZF9ocGRfZXZlbnQgICAgPSBkcF9kaXNwbGF5X3NlbmRfaHBk X2V2ZW50OworCWdfZHBfZGlzcGxheS0+aXNfdmlkZW9fdGVzdCA9IGRwX2Rpc3BsYXlfY2hlY2tf dmlkZW9fdGVzdDsKKwlnX2RwX2Rpc3BsYXktPmdldF90ZXN0X2JwcCA9IGRwX2Rpc3BsYXlfZ2V0 X3Rlc3RfYnBwOworCisJcmMgPSBjb21wb25lbnRfYWRkKCZwZGV2LT5kZXYsICZkcF9kaXNwbGF5 X2NvbXBfb3BzKTsKKwlpZiAocmMpIHsKKwkJcHJfZXJyKCJjb21wb25lbnQgYWRkIGZhaWxlZCwg cmM9JWRcbiIsIHJjKTsKKwkJZHBfZGlzcGxheV9kZWluaXRfc3ViX21vZHVsZXMoZHApOworCQlk ZXZtX2tmcmVlKCZwZGV2LT5kZXYsIGRwKTsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKK2ludCBk cF9kaXNwbGF5X2dldF9kaXNwbGF5cyh2b2lkICoqZGlzcGxheXMsIGludCBjb3VudCkKK3sKKwlp ZiAoIWRpc3BsYXlzKSB7CisJCXByX2VycigiaW52YWxpZCBkYXRhXG4iKTsKKwkJcmV0dXJuIC1F SU5WQUw7CisJfQorCisJaWYgKGNvdW50ICE9IDEpIHsKKwkJcHJfZXJyKCJpbnZhbGlkIG51bWJl ciBvZiBkaXNwbGF5c1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRpc3BsYXlzWzBd ID0gZ19kcF9kaXNwbGF5OworCXJldHVybiBjb3VudDsKK30KKworaW50IGRwX2Rpc3BsYXlfZ2V0 X251bV9vZl9kaXNwbGF5cyh2b2lkKQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGRw X2Rpc3BsYXlfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0 IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHA7CisKKwlpZiAoIXBkZXYpCisJCXJldHVybiAtRUlOVkFM OworCisJZHAgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWRwX2Rpc3BsYXlfZGVp bml0X3N1Yl9tb2R1bGVzKGRwKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwp OworCWRldm1fa2ZyZWUoJnBkZXYtPmRldiwgZHApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGRwX2Rpc3BsYXlfZHJpdmVyID0geworCS5wcm9iZSAg PSBkcF9kaXNwbGF5X3Byb2JlLAorCS5yZW1vdmUgPSBkcF9kaXNwbGF5X3JlbW92ZSwKKwkuZHJp dmVyID0geworCQkubmFtZSA9ICJtc20tZHAtZGlzcGxheSIsCisJCS5vZl9tYXRjaF90YWJsZSA9 IGRwX2R0X21hdGNoLAorCX0sCit9OworCitpbnQgX19pbml0IG1zbV9kcF9yZWdpc3Rlcih2b2lk KQoreworCWludCByZXQ7CisKKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmRwX2Rp c3BsYXlfZHJpdmVyKTsKKwlpZiAocmV0KSB7CisJCXByX2VycigiZHJpdmVyIHJlZ2lzdGVyIGZh aWxlZCIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgX19l eGl0IG1zbV9kcF91bnJlZ2lzdGVyKHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0 ZXIoJmRwX2Rpc3BsYXlfZHJpdmVyKTsKK30KKworaW50IG1zbV9kcF9tb2Rlc2V0X2luaXQoc3Ry dWN0IG1zbV9kcCAqZHBfZGlzcGxheSwgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCXN0cnVj dCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2 OworCWludCByZXQ7CisKKwlpZiAoV0FSTl9PTighZW5jb2RlcikgfHwgV0FSTl9PTighZHBfZGlz cGxheSkgfHwgV0FSTl9PTighZGV2KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcml2ID0gZGV2 LT5kZXZfcHJpdmF0ZTsKKwlkcF9kaXNwbGF5LT5kcm1fZGV2ID0gZGV2OworCisJcmV0ID0gZHBf ZHJtX2JyaWRnZV9pbml0KGRwX2Rpc3BsYXksIGVuY29kZXIpOworCWlmIChyZXQpIHsKKwkJZGV2 X2VycihkZXYtPmRldiwgImZhaWxlZCB0byBjcmVhdGUgZHAgYnJpZGdlOiAlZFxuIiwgcmV0KTsK KwkJZHBfZGlzcGxheS0+YnJpZGdlID0gTlVMTDsKKwkJcmV0dXJuIHJldDsKKwl9CisJZHBfZGlz cGxheS0+ZW5jb2RlciA9IGVuY29kZXI7CisKKwlkcF9kaXNwbGF5LT5jb25uZWN0b3IgPSBkcF9k cm1fY29ubmVjdG9yX2luaXQoZHBfZGlzcGxheSk7CisJaWYgKElTX0VSUihkcF9kaXNwbGF5LT5j b25uZWN0b3IpKSB7CisJCXJldCA9IFBUUl9FUlIoZHBfZGlzcGxheS0+Y29ubmVjdG9yKTsKKwkJ ZGV2X2VycihkZXYtPmRldiwKKwkJCSJmYWlsZWQgdG8gY3JlYXRlIGRwIGNvbm5lY3RvcjogJWRc biIsIHJldCk7CisJCWRwX2Rpc3BsYXktPmNvbm5lY3RvciA9IE5VTEw7CisJCWdvdG8gY29ubl9m YWlsOworCX0KKworCXByaXYtPmJyaWRnZXNbcHJpdi0+bnVtX2JyaWRnZXMrK10gPSBkcF9kaXNw bGF5LT5icmlkZ2U7CisJcHJpdi0+Y29ubmVjdG9yc1twcml2LT5udW1fY29ubmVjdG9ycysrXSA9 IGRwX2Rpc3BsYXktPmNvbm5lY3RvcjsKKwlyZXR1cm4gMDsKKworY29ubl9mYWlsOgorCWlmIChk cF9kaXNwbGF5LT5icmlkZ2UpIHsKKwkJZHBfZHJtX2JyaWRnZV9kZWluaXQoZHBfZGlzcGxheSk7 CisJCWRwX2Rpc3BsYXktPmJyaWRnZSA9IE5VTEw7CisJfQorCXJldHVybiByZXQ7Cit9CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2Rpc3BsYXkuaCBiL2RyaXZlcnMvZ3B1 L2RybS9tc20vZHAvZHBfZGlzcGxheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLmNhNWVhZTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2Rw X2Rpc3BsYXkuaApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE3LTIw MTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu CisgKgorICovCisKKyNpZm5kZWYgX0RQX0RJU1BMQVlfSF8KKyNkZWZpbmUgX0RQX0RJU1BMQVlf SF8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisKKyNpbmNsdWRlICJkcF9wYW5lbC5oIgorCitz dHJ1Y3QgbXNtX2RwIHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldjsKKwlzdHJ1Y3QgZHBf YnJpZGdlICpkcF9icmlkZ2U7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKwlz dHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlOworCisJLyogdGhlIGVuY29kZXIgd2UgYXJlIGhvb2tl ZCB0byAob3V0c2lkZSBvZiBkc2kgYmxvY2spICovCisJc3RydWN0IGRybV9lbmNvZGVyICplbmNv ZGVyOworCWJvb2wgaXNfY29ubmVjdGVkOworCXUzMiBtYXhfcGNsa19raHo7CisKKwlpbnQgKCpl bmFibGUpKHN0cnVjdCBtc21fZHAgKmRwX2Rpc3BsYXkpOworCWludCAoKnBvc3RfZW5hYmxlKShz dHJ1Y3QgbXNtX2RwICpkcF9kaXNwbGF5KTsKKworCWludCAoKnByZV9kaXNhYmxlKShzdHJ1Y3Qg bXNtX2RwICpkcF9kaXNwbGF5KTsKKwlpbnQgKCpkaXNhYmxlKShzdHJ1Y3QgbXNtX2RwICpkcF9k aXNwbGF5KTsKKworCWludCAoKnNldF9tb2RlKShzdHJ1Y3QgbXNtX2RwICpkcF9kaXNwbGF5LAor CQkJc3RydWN0IGRwX2Rpc3BsYXlfbW9kZSAqbW9kZSk7CisJaW50ICgqdmFsaWRhdGVfbW9kZSko c3RydWN0IG1zbV9kcCAqZHBfZGlzcGxheSwgdTMyIG1vZGVfcGNsa19raHopOworCWludCAoKmdl dF9tb2Rlcykoc3RydWN0IG1zbV9kcCAqZHBfZGlzcGxheSwKKwkJc3RydWN0IGRwX2Rpc3BsYXlf bW9kZSAqZHBfbW9kZSk7CisJaW50ICgqcHJlcGFyZSkoc3RydWN0IG1zbV9kcCAqZHBfZGlzcGxh eSk7CisJaW50ICgqdW5wcmVwYXJlKShzdHJ1Y3QgbXNtX2RwICpkcF9kaXNwbGF5KTsKKwlpbnQg KCpyZXF1ZXN0X2lycSkoc3RydWN0IG1zbV9kcCAqZHBfZGlzcGxheSk7CisJc3RydWN0IGRwX2Rl YnVnICooKmdldF9kZWJ1Zykoc3RydWN0IG1zbV9kcCAqZHBfZGlzcGxheSk7CisJdm9pZCAoKnNl bmRfaHBkX2V2ZW50KShzdHJ1Y3QgbXNtX2RwICpkcF9kaXNwbGF5KTsKKwlib29sICgqaXNfdmlk ZW9fdGVzdCkoc3RydWN0IG1zbV9kcCAqZHBfZGlzcGxheSk7CisJaW50ICgqZ2V0X3Rlc3RfYnBw KShzdHJ1Y3QgbXNtX2RwICpkcF9kaXNwbGF5KTsKK307CisKK2ludCBkcF9kaXNwbGF5X2dldF9u dW1fb2ZfZGlzcGxheXModm9pZCk7CitpbnQgZHBfZGlzcGxheV9nZXRfZGlzcGxheXModm9pZCAq KmRpc3BsYXlzLCBpbnQgY291bnQpOworI2VuZGlmIC8qIF9EUF9ESVNQTEFZX0hfICovCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2RybS5jIGIvZHJpdmVycy9ncHUvZHJt L21zbS9kcC9kcF9kcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGQ2 NDQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kcm0uYwpA QCAtMCwwICsxLDU0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDE4LCBUaGUgTGlu dXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQor ICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2 ZXJzaW9uIDIgYW5kCisgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisg KiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLwor CisjZGVmaW5lIHByX2ZtdChmbXQpCSJbZHJtLWRwXTogJXM6ICIgZm10LCBfX2Z1bmNfXworCisj aW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9t aWMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KKworI2luY2x1ZGUgIm1zbV9kcnYuaCIK KyNpbmNsdWRlICJtc21fa21zLmgiCisvLyNpbmNsdWRlICJkcHVfY29ubmVjdG9yLmgiCisjaW5j bHVkZSAiZHBfZHJtLmgiCisjaW5jbHVkZSAiZHBfZGVidWcuaCIKKworc3RydWN0IGRwX2Nvbm5l Y3RvciB7CisJc3RydWN0IGRybV9jb25uZWN0b3IgYmFzZTsKKwlzdHJ1Y3QgbXNtX2RwICpkcF9k aXNwbGF5OworfTsKKyNkZWZpbmUgdG9fZHBfY29ubmVjdG9yKHgpIGNvbnRhaW5lcl9vZih4LCBz dHJ1Y3QgZHBfY29ubmVjdG9yLCBiYXNlKQorI2RlZmluZSB0b19kcF9icmlkZ2UoeCkgICAgIGNv bnRhaW5lcl9vZigoeCksIHN0cnVjdCBkcF9icmlkZ2UsIGJhc2UpCisKK3N0YXRpYyB2b2lkIGNv bnZlcnRfdG9fZHBfbW9kZShjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZHJtX21vZGUs CisJCQlzdHJ1Y3QgZHBfZGlzcGxheV9tb2RlICpkcF9tb2RlLCBzdHJ1Y3QgbXNtX2RwICpkcCkK K3sKKwljb25zdCB1MzIgbnVtX2NvbXBvbmVudHMgPSAzOworCisJbWVtc2V0KGRwX21vZGUsIDAs IHNpemVvZigqZHBfbW9kZSkpOworCisJZHBfbW9kZS0+dGltaW5nLmhfYWN0aXZlID0gZHJtX21v ZGUtPmhkaXNwbGF5OworCWRwX21vZGUtPnRpbWluZy5oX2JhY2tfcG9yY2ggPSBkcm1fbW9kZS0+ aHRvdGFsIC0gZHJtX21vZGUtPmhzeW5jX2VuZDsKKwlkcF9tb2RlLT50aW1pbmcuaF9zeW5jX3dp ZHRoID0gZHJtX21vZGUtPmh0b3RhbCAtCisJCQkoZHJtX21vZGUtPmhzeW5jX3N0YXJ0ICsgZHBf bW9kZS0+dGltaW5nLmhfYmFja19wb3JjaCk7CisJZHBfbW9kZS0+dGltaW5nLmhfZnJvbnRfcG9y Y2ggPSBkcm1fbW9kZS0+aHN5bmNfc3RhcnQgLQorCQkJCQkgZHJtX21vZGUtPmhkaXNwbGF5Owor CWRwX21vZGUtPnRpbWluZy5oX3NrZXcgPSBkcm1fbW9kZS0+aHNrZXc7CisKKwlkcF9tb2RlLT50 aW1pbmcudl9hY3RpdmUgPSBkcm1fbW9kZS0+dmRpc3BsYXk7CisJZHBfbW9kZS0+dGltaW5nLnZf YmFja19wb3JjaCA9IGRybV9tb2RlLT52dG90YWwgLSBkcm1fbW9kZS0+dnN5bmNfZW5kOworCWRw X21vZGUtPnRpbWluZy52X3N5bmNfd2lkdGggPSBkcm1fbW9kZS0+dnRvdGFsIC0KKwkJKGRybV9t b2RlLT52c3luY19zdGFydCArIGRwX21vZGUtPnRpbWluZy52X2JhY2tfcG9yY2gpOworCisJZHBf bW9kZS0+dGltaW5nLnZfZnJvbnRfcG9yY2ggPSBkcm1fbW9kZS0+dnN5bmNfc3RhcnQgLQorCQkJ CQkgZHJtX21vZGUtPnZkaXNwbGF5OworCisJaWYgKGRwLT5pc192aWRlb190ZXN0KGRwKSkKKwkJ ZHBfbW9kZS0+dGltaW5nLmJwcCA9IGRwLT5nZXRfdGVzdF9icHAoZHApOworCWVsc2UKKwkJZHBf bW9kZS0+dGltaW5nLmJwcCA9IGRwLT5jb25uZWN0b3ItPmRpc3BsYXlfaW5mby5icGMgKgorCQlu dW1fY29tcG9uZW50czsKKworCWlmICghZHBfbW9kZS0+dGltaW5nLmJwcCkKKwkJZHBfbW9kZS0+ dGltaW5nLmJwcCA9IDI0OworCisJZHBfbW9kZS0+dGltaW5nLnJlZnJlc2hfcmF0ZSA9IGRybV9t b2RlLT52cmVmcmVzaDsKKworCWRwX21vZGUtPnRpbWluZy5waXhlbF9jbGtfa2h6ID0gZHJtX21v ZGUtPmNsb2NrOworCisJZHBfbW9kZS0+dGltaW5nLnZfYWN0aXZlX2xvdyA9CisJCSEhKGRybV9t b2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfTlZTWU5DKTsKKworCWRwX21vZGUtPnRpbWluZy5o X2FjdGl2ZV9sb3cgPQorCQkhIShkcm1fbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX05IU1lO Qyk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbnZlcnRfdG9fZHJtX21vZGUoY29uc3Qgc3RydWN0IGRw X2Rpc3BsYXlfbW9kZSAqZHBfbW9kZSwKKwkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZHJt X21vZGUpCit7CisJdTMyIGZsYWdzID0gMDsKKworCW1lbXNldChkcm1fbW9kZSwgMCwgc2l6ZW9m KCpkcm1fbW9kZSkpOworCisJZHJtX21vZGUtPmhkaXNwbGF5ID0gZHBfbW9kZS0+dGltaW5nLmhf YWN0aXZlOworCWRybV9tb2RlLT5oc3luY19zdGFydCA9IGRybV9tb2RlLT5oZGlzcGxheSArCisJ CQkJZHBfbW9kZS0+dGltaW5nLmhfZnJvbnRfcG9yY2g7CisJZHJtX21vZGUtPmhzeW5jX2VuZCA9 IGRybV9tb2RlLT5oc3luY19zdGFydCArCisJCQkgICAgICBkcF9tb2RlLT50aW1pbmcuaF9zeW5j X3dpZHRoOworCWRybV9tb2RlLT5odG90YWwgPSBkcm1fbW9kZS0+aHN5bmNfZW5kICsgZHBfbW9k ZS0+dGltaW5nLmhfYmFja19wb3JjaDsKKwlkcm1fbW9kZS0+aHNrZXcgPSBkcF9tb2RlLT50aW1p bmcuaF9za2V3OworCisJZHJtX21vZGUtPnZkaXNwbGF5ID0gZHBfbW9kZS0+dGltaW5nLnZfYWN0 aXZlOworCWRybV9tb2RlLT52c3luY19zdGFydCA9IGRybV9tb2RlLT52ZGlzcGxheSArCisJCQkJ ZHBfbW9kZS0+dGltaW5nLnZfZnJvbnRfcG9yY2g7CisJZHJtX21vZGUtPnZzeW5jX2VuZCA9IGRy bV9tb2RlLT52c3luY19zdGFydCArCisJCQkgICAgICBkcF9tb2RlLT50aW1pbmcudl9zeW5jX3dp ZHRoOworCWRybV9tb2RlLT52dG90YWwgPSBkcm1fbW9kZS0+dnN5bmNfZW5kICsgZHBfbW9kZS0+ dGltaW5nLnZfYmFja19wb3JjaDsKKworCWRybV9tb2RlLT52cmVmcmVzaCA9IGRwX21vZGUtPnRp bWluZy5yZWZyZXNoX3JhdGU7CisJZHJtX21vZGUtPmNsb2NrID0gZHBfbW9kZS0+dGltaW5nLnBp eGVsX2Nsa19raHo7CisKKwlpZiAoZHBfbW9kZS0+dGltaW5nLmhfYWN0aXZlX2xvdykKKwkJZmxh Z3MgfD0gRFJNX01PREVfRkxBR19OSFNZTkM7CisJZWxzZQorCQlmbGFncyB8PSBEUk1fTU9ERV9G TEFHX1BIU1lOQzsKKworCWlmIChkcF9tb2RlLT50aW1pbmcudl9hY3RpdmVfbG93KQorCQlmbGFn cyB8PSBEUk1fTU9ERV9GTEFHX05WU1lOQzsKKwllbHNlCisJCWZsYWdzIHw9IERSTV9NT0RFX0ZM QUdfUFZTWU5DOworCisJZHJtX21vZGUtPmZsYWdzID0gZmxhZ3M7CisKKwlkcm1fbW9kZS0+dHlw ZSA9IDB4NDg7CisJZHJtX21vZGVfc2V0X25hbWUoZHJtX21vZGUpOworfQorCitzdGF0aWMgdm9p ZCBkcF9icmlkZ2VfcHJlX2VuYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqZHJtX2JyaWRnZSkKK3sK KwlpbnQgcmMgPSAwOworCXN0cnVjdCBkcF9icmlkZ2UgKmJyaWRnZTsKKwlzdHJ1Y3QgbXNtX2Rw ICpkcDsKKworCWlmICghZHJtX2JyaWRnZSkgeworCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4i KTsKKwkJcmV0dXJuOworCX0KKworCWJyaWRnZSA9IHRvX2RwX2JyaWRnZShkcm1fYnJpZGdlKTsK KwlkcCA9IGJyaWRnZS0+ZGlzcGxheTsKKworCS8qIEJ5IHRoaXMgcG9pbnQgbW9kZSBzaG91bGQg aGF2ZSBiZWVuIHZhbGlkYXRlZCB0aHJvdWdoIG1vZGVfZml4dXAgKi8KKwlyYyA9IGRwLT5zZXRf bW9kZShkcCwgJmJyaWRnZS0+ZHBfbW9kZSk7CisJaWYgKHJjKSB7CisJCXByX2VycigiWyVkXSBm YWlsZWQgdG8gcGVyZm9ybSBhIG1vZGUgc2V0LCByYz0lZFxuIiwKKwkJICAgICAgIGJyaWRnZS0+ aWQsIHJjKTsKKwkJcmV0dXJuOworCX0KKworCXJjID0gZHAtPnByZXBhcmUoZHApOworCWlmIChy YykgeworCQlwcl9lcnIoIlslZF0gRFAgZGlzcGxheSBwcmVwYXJlIGZhaWxlZCwgcmM9JWRcbiIs CisJCSAgICAgICBicmlkZ2UtPmlkLCByYyk7CisJCXJldHVybjsKKwl9CisKKwlyYyA9IGRwLT5l bmFibGUoZHApOworCWlmIChyYykgeworCQlwcl9lcnIoIlslZF0gRFAgZGlzcGxheSBlbmFibGUg ZmFpbGVkLCByYz0lZFxuIiwKKwkJICAgICAgIGJyaWRnZS0+aWQsIHJjKTsKKwkJZHAtPnVucHJl cGFyZShkcCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBkcF9icmlkZ2VfZW5hYmxlKHN0cnVjdCBk cm1fYnJpZGdlICpkcm1fYnJpZGdlKQoreworCWludCByYyA9IDA7CisJc3RydWN0IGRwX2JyaWRn ZSAqYnJpZGdlOworCXN0cnVjdCBtc21fZHAgKmRwOworCisJaWYgKCFkcm1fYnJpZGdlKSB7CisJ CXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOworCQlyZXR1cm47CisJfQorCisJYnJpZGdlID0g dG9fZHBfYnJpZGdlKGRybV9icmlkZ2UpOworCWRwID0gYnJpZGdlLT5kaXNwbGF5OworCisJcmMg PSBkcC0+cG9zdF9lbmFibGUoZHApOworCWlmIChyYykKKwkJcHJfZXJyKCJbJWRdIERQIGRpc3Bs YXkgcG9zdCBlbmFibGUgZmFpbGVkLCByYz0lZFxuIiwKKwkJICAgICAgIGJyaWRnZS0+aWQsIHJj KTsKK30KKworc3RhdGljIHZvaWQgZHBfYnJpZGdlX2Rpc2FibGUoc3RydWN0IGRybV9icmlkZ2Ug KmRybV9icmlkZ2UpCit7CisJaW50IHJjID0gMDsKKwlzdHJ1Y3QgZHBfYnJpZGdlICpicmlkZ2U7 CisJc3RydWN0IG1zbV9kcCAqZHA7CisKKwlpZiAoIWRybV9icmlkZ2UpIHsKKwkJcHJfZXJyKCJJ bnZhbGlkIHBhcmFtc1xuIik7CisJCXJldHVybjsKKwl9CisKKwlicmlkZ2UgPSB0b19kcF9icmlk Z2UoZHJtX2JyaWRnZSk7CisJZHAgPSBicmlkZ2UtPmRpc3BsYXk7CisKKwlyYyA9IGRwLT5wcmVf ZGlzYWJsZShkcCk7CisJaWYgKHJjKSB7CisJCXByX2VycigiWyVkXSBEUCBkaXNwbGF5IHByZSBk aXNhYmxlIGZhaWxlZCwgcmM9JWRcbiIsCisJCSAgICAgICBicmlkZ2UtPmlkLCByYyk7CisJfQor fQorCitzdGF0aWMgdm9pZCBkcF9icmlkZ2VfcG9zdF9kaXNhYmxlKHN0cnVjdCBkcm1fYnJpZGdl ICpkcm1fYnJpZGdlKQoreworCWludCByYyA9IDA7CisJc3RydWN0IGRwX2JyaWRnZSAqYnJpZGdl OworCXN0cnVjdCBtc21fZHAgKmRwOworCisJaWYgKCFkcm1fYnJpZGdlKSB7CisJCXByX2Vycigi SW52YWxpZCBwYXJhbXNcbiIpOworCQlyZXR1cm47CisJfQorCisJYnJpZGdlID0gdG9fZHBfYnJp ZGdlKGRybV9icmlkZ2UpOworCWRwID0gYnJpZGdlLT5kaXNwbGF5OworCisJcmMgPSBkcC0+ZGlz YWJsZShkcCk7CisJaWYgKHJjKSB7CisJCXByX2VycigiWyVkXSBEUCBkaXNwbGF5IGRpc2FibGUg ZmFpbGVkLCByYz0lZFxuIiwKKwkJICAgICAgIGJyaWRnZS0+aWQsIHJjKTsKKwkJcmV0dXJuOwor CX0KKworCXJjID0gZHAtPnVucHJlcGFyZShkcCk7CisJaWYgKHJjKSB7CisJCXByX2VycigiWyVk XSBEUCBkaXNwbGF5IHVucHJlcGFyZSBmYWlsZWQsIHJjPSVkXG4iLAorCQkgICAgICAgYnJpZGdl LT5pZCwgcmMpOworCQlyZXR1cm47CisJfQorfQorCitzdGF0aWMgdm9pZCBkcF9icmlkZ2VfbW9k ZV9zZXQoc3RydWN0IGRybV9icmlkZ2UgKmRybV9icmlkZ2UsCisJCQkJc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKm1vZGUsCisJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21v ZGUpCit7CisJc3RydWN0IGRwX2JyaWRnZSAqYnJpZGdlOworCXN0cnVjdCBtc21fZHAgKmRwOwor CisJaWYgKCFkcm1fYnJpZGdlIHx8ICFtb2RlIHx8ICFhZGp1c3RlZF9tb2RlKSB7CisJCXByX2Vy cigiSW52YWxpZCBwYXJhbXNcbiIpOworCQlyZXR1cm47CisJfQorCisJYnJpZGdlID0gdG9fZHBf YnJpZGdlKGRybV9icmlkZ2UpOworCWRwID0gYnJpZGdlLT5kaXNwbGF5OworCisJbWVtc2V0KCZi cmlkZ2UtPmRwX21vZGUsIDB4MCwgc2l6ZW9mKHN0cnVjdCBkcF9kaXNwbGF5X21vZGUpKTsKKwlj b252ZXJ0X3RvX2RwX21vZGUoYWRqdXN0ZWRfbW9kZSwgJmJyaWRnZS0+ZHBfbW9kZSwgZHApOwor fQorCitzdGF0aWMgYm9vbCBkcF9icmlkZ2VfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2JyaWRnZSAq ZHJtX2JyaWRnZSwKKwkJCQkgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAor CQkJCSAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCit7CisJYm9vbCBy ZXQgPSB0cnVlOworCXN0cnVjdCBkcF9kaXNwbGF5X21vZGUgZHBfbW9kZTsKKwlzdHJ1Y3QgZHBf YnJpZGdlICpicmlkZ2U7CisJc3RydWN0IG1zbV9kcCAqZHA7CisKKwlpZiAoIWRybV9icmlkZ2Ug fHwgIW1vZGUgfHwgIWFkanVzdGVkX21vZGUpIHsKKwkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xu Iik7CisJCXJldCA9IGZhbHNlOworCQlnb3RvIGVuZDsKKwl9CisKKwlicmlkZ2UgPSB0b19kcF9i cmlkZ2UoZHJtX2JyaWRnZSk7CisJZHAgPSBicmlkZ2UtPmRpc3BsYXk7CisKKwljb252ZXJ0X3Rv X2RwX21vZGUobW9kZSwgJmRwX21vZGUsIGRwKTsKKwljb252ZXJ0X3RvX2RybV9tb2RlKCZkcF9t b2RlLCBhZGp1c3RlZF9tb2RlKTsKK2VuZDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29u c3Qgc3RydWN0IGRybV9icmlkZ2VfZnVuY3MgZHBfYnJpZGdlX29wcyA9IHsKKwkubW9kZV9maXh1 cCAgID0gZHBfYnJpZGdlX21vZGVfZml4dXAsCisJLnByZV9lbmFibGUgICA9IGRwX2JyaWRnZV9w cmVfZW5hYmxlLAorCS5lbmFibGUgICAgICAgPSBkcF9icmlkZ2VfZW5hYmxlLAorCS5kaXNhYmxl ICAgICAgPSBkcF9icmlkZ2VfZGlzYWJsZSwKKwkucG9zdF9kaXNhYmxlID0gZHBfYnJpZGdlX3Bv c3RfZGlzYWJsZSwKKwkubW9kZV9zZXQgICAgID0gZHBfYnJpZGdlX21vZGVfc2V0LAorfTsKKwor aW50IGRwX2Nvbm5lY3Rvcl9wb3N0X2luaXQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv ciwgdm9pZCAqZGlzcGxheSkKK3sKKwlzdHJ1Y3QgbXNtX2RwICpkcF9kaXNwbGF5ID0gZGlzcGxh eTsKKworCWlmICghZHBfZGlzcGxheSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkcF9kaXNwbGF5 LT5jb25uZWN0b3IgPSBjb25uZWN0b3I7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogZHBfY29u bmVjdG9yX2RldGVjdCAtIGNhbGxiYWNrIHRvIGRldGVybWluZSBpZiBjb25uZWN0b3IgaXMgY29u bmVjdGVkCisgKiBAY29ubmVjdG9yOiBQb2ludGVyIHRvIGRybSBjb25uZWN0b3Igc3RydWN0dXJl CisgKiBAZm9yY2U6IEZvcmNlIGRldGVjdCBzZXR0aW5nIGZyb20gZHJtIGZyYW1ld29yaworICog UmV0dXJuczogQ29ubmVjdG9yICdpcyBjb25uZWN0ZWQnIHN0YXR1cworICovCitzdGF0aWMgZW51 bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBkcF9jb25uZWN0b3JfZGV0ZWN0KHN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uLAorCQlib29sIGZvcmNlKQoreworCWVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0 dXMgc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c191bmtub3duOworCXN0YXRpYyBlbnVtIGRybV9j b25uZWN0b3Jfc3RhdHVzIGN1cnJlbnRfc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c191bmtub3du OworCXN0cnVjdCBtc21fZHAgKmRwOworCXN0cnVjdCBkcF9jb25uZWN0b3IgKmRwX2Nvbm47CisJ c3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdiA9IGNvbm4tPmRldi0+ZGV2X3ByaXZhdGU7CisJ c3RydWN0IG1zbV9rbXMgKmttcyA9IHByaXYtPmttczsKKworCWRwX2Nvbm4gPSB0b19kcF9jb25u ZWN0b3IoY29ubik7CisJZHAgPSBkcF9jb25uLT5kcF9kaXNwbGF5OworCisJcHJfZXJyKCJpc19j b25uZWN0ZWQgPSAlc1xuIiwKKwkJKGRwLT5pc19jb25uZWN0ZWQpID8gInRydWUiIDogImZhbHNl Iik7CisKKwlzdGF0dXMgPSAoZHAtPmlzX2Nvbm5lY3RlZCkgPyBjb25uZWN0b3Jfc3RhdHVzX2Nv bm5lY3RlZCA6CisJCQkJCWNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOworCisJaWYgKGRw LT5pc19jb25uZWN0ZWQgJiYgZHAtPmJyaWRnZS0+ZW5jb2RlcgorCQkJCSYmIChjdXJyZW50X3N0 YXR1cyAhPSBzdGF0dXMpCisJCQkJJiYga21zLT5mdW5jcy0+c2V0X2VuY29kZXJfbW9kZSkgewor CQlrbXMtPmZ1bmNzLT5zZXRfZW5jb2Rlcl9tb2RlKGttcywKKwkJCQlkcC0+YnJpZGdlLT5lbmNv ZGVyLCBmYWxzZSk7CisJCXByX2VycigiY2FsbCBzZXRfZW5jb2Rlcl9tb2RlXG4iKTsKKwl9CisJ Y3VycmVudF9zdGF0dXMgPSBzdGF0dXM7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHZv aWQgZHBfY29ubmVjdG9yX2Rlc3Ryb3koc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikK K3sKKwlzdHJ1Y3QgZHBfY29ubmVjdG9yICpkcF9jb25uID0gdG9fZHBfY29ubmVjdG9yKGNvbm5l Y3Rvcik7CisKKwlEQkcoIiIpOworCisJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rvcik7 CisKKwlrZnJlZShkcF9jb25uKTsKK30KKwordm9pZCBkcF9jb25uZWN0b3Jfc2VuZF9ocGRfZXZl bnQodm9pZCAqZGlzcGxheSkKK3sKKwlzdHJ1Y3QgbXNtX2RwICpkcDsKKworCWlmICghZGlzcGxh eSkgeworCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOworCQlyZXR1cm47CisJfQorCisJZHAg PSBkaXNwbGF5OworCisJaWYgKGRwLT5zZW5kX2hwZF9ldmVudCkKKwkJZHAtPnNlbmRfaHBkX2V2 ZW50KGRwKTsKK30KKworLyoqCisgKiBkcF9jb25uZWN0b3JfZ2V0X21vZGVzIC0gY2FsbGJhY2sg dG8gYWRkIGRybSBtb2RlcyB2aWEgZHJtX21vZGVfcHJvYmVkX2FkZCgpCisgKiBAY29ubmVjdG9y OiBQb2ludGVyIHRvIGRybSBjb25uZWN0b3Igc3RydWN0dXJlCisgKiBSZXR1cm5zOiBOdW1iZXIg b2YgbW9kZXMgYWRkZWQKKyAqLworc3RhdGljIGludCBkcF9jb25uZWN0b3JfZ2V0X21vZGVzKHN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJaW50IHJjID0gMDsKKwlzdHJ1Y3Qg bXNtX2RwICpkcDsKKwlzdHJ1Y3QgZHBfZGlzcGxheV9tb2RlICpkcF9tb2RlID0gTlVMTDsKKwlz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbSwgZHJtX21vZGU7CisJc3RydWN0IGRwX2Nvbm5lY3Rv ciAqZHBfY29ubjsKKworCWlmICghY29ubmVjdG9yKQorCQlyZXR1cm4gMDsKKworCWRwX2Nvbm4g PSB0b19kcF9jb25uZWN0b3IoY29ubmVjdG9yKTsKKwlkcCA9IGRwX2Nvbm4tPmRwX2Rpc3BsYXk7 CisKKwlkcF9tb2RlID0ga3phbGxvYyhzaXplb2YoKmRwX21vZGUpLCAgR0ZQX0tFUk5FTCk7CisJ aWYgKCFkcF9tb2RlKQorCQlyZXR1cm4gMDsKKworCS8qIHBsdWdnYWJsZSBjYXNlIGFzc3VtZXMg RURJRCBpcyByZWFkIHdoZW4gSFBEICovCisJaWYgKGRwLT5pc19jb25uZWN0ZWQpIHsKKwkJcmMg PSBkcC0+Z2V0X21vZGVzKGRwLCBkcF9tb2RlKTsKKwkJaWYgKCFyYykKKwkJCXByX2VycigiZmFp bGVkIHRvIGdldCBEUCBzaW5rIG1vZGVzLCByYz0lZFxuIiwgcmMpOworCisJCWlmIChkcF9tb2Rl LT50aW1pbmcucGl4ZWxfY2xrX2toeikgeyAvKiB2YWxpZCBEUCBtb2RlICovCisJCQltZW1zZXQo JmRybV9tb2RlLCAweDAsIHNpemVvZihkcm1fbW9kZSkpOworCQkJY29udmVydF90b19kcm1fbW9k ZShkcF9tb2RlLCAmZHJtX21vZGUpOworCQkJbSA9IGRybV9tb2RlX2R1cGxpY2F0ZShjb25uZWN0 b3ItPmRldiwgJmRybV9tb2RlKTsKKwkJCWlmICghbSkgeworCQkJCXByX2VycigiZmFpbGVkIHRv IGFkZCBtb2RlICV1eCV1XG4iLAorCQkJCSAgICAgICBkcm1fbW9kZS5oZGlzcGxheSwKKwkJCQkg ICAgICAgZHJtX21vZGUudmRpc3BsYXkpOworCQkJCWtmcmVlKGRwX21vZGUpOworCQkJCXJldHVy biAwOworCQkJfQorCQkJbS0+d2lkdGhfbW0gPSBjb25uZWN0b3ItPmRpc3BsYXlfaW5mby53aWR0 aF9tbTsKKwkJCW0tPmhlaWdodF9tbSA9IGNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmhlaWdodF9t bTsKKwkJCWRybV9tb2RlX3Byb2JlZF9hZGQoY29ubmVjdG9yLCBtKTsKKwkJfQorCX0gZWxzZSB7 CisJCXByX2VycigiTm8gc2luayBjb25uZWN0ZWRcbiIpOworCX0KKwlrZnJlZShkcF9tb2RlKTsK KworCXJldHVybiByYzsKK30KKworaW50IGRwX2RybV9icmlkZ2VfaW5pdCh2b2lkICpkYXRhLCBz dHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJaW50IHJjID0gMDsKKwlzdHJ1Y3QgZHBf YnJpZGdlICpkcF9icmlkZ2U7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgbXNt X2RwICpkcF9kaXNwbGF5ID0gZGF0YTsKKwlzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2ID0g TlVMTDsKKworCWRwX2JyaWRnZSA9IGt6YWxsb2Moc2l6ZW9mKCpkcF9icmlkZ2UpLCBHRlBfS0VS TkVMKTsKKwlpZiAoIWRwX2JyaWRnZSkgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3I7 CisJfQorCisJZGV2ID0gZHBfZGlzcGxheS0+ZHJtX2RldjsKKwlkcF9icmlkZ2UtPmRpc3BsYXkg PSBkcF9kaXNwbGF5OworCWRwX2JyaWRnZS0+YmFzZS5mdW5jcyA9ICZkcF9icmlkZ2Vfb3BzOwor CWRwX2JyaWRnZS0+YmFzZS5lbmNvZGVyID0gZW5jb2RlcjsKKworCXByaXYgPSBkZXYtPmRldl9w cml2YXRlOworCisJcmMgPSBkcm1fYnJpZGdlX2F0dGFjaChlbmNvZGVyLCAmZHBfYnJpZGdlLT5i YXNlLCBOVUxMKTsKKwlpZiAocmMpIHsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gYXR0YWNoIGJyaWRn ZSwgcmM9JWRcbiIsIHJjKTsKKwkJZ290byBlcnJvcl9mcmVlX2JyaWRnZTsKKwl9CisKKwlyYyA9 IGRwX2Rpc3BsYXktPnJlcXVlc3RfaXJxKGRwX2Rpc3BsYXkpOworCWlmIChyYykgeworCQlwcl9l cnIoInJlcXVlc3RfaXJxIGZhaWxlZCwgcmM9JWRcbiIsIHJjKTsKKwkJZ290byBlcnJvcl9mcmVl X2JyaWRnZTsKKwl9CisKKwllbmNvZGVyLT5icmlkZ2UgPSAmZHBfYnJpZGdlLT5iYXNlOworCWRw X2Rpc3BsYXktPmRwX2JyaWRnZSA9IGRwX2JyaWRnZTsKKwlkcF9kaXNwbGF5LT5icmlkZ2UgPSAm ZHBfYnJpZGdlLT5iYXNlOworCisJcmV0dXJuIDA7CitlcnJvcl9mcmVlX2JyaWRnZToKKwlrZnJl ZShkcF9icmlkZ2UpOworZXJyb3I6CisJcmV0dXJuIHJjOworfQorCit2b2lkIGRwX2RybV9icmlk Z2VfZGVpbml0KHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG1zbV9kcCAqZGlzcGxheSA9IGRhdGE7 CisJc3RydWN0IGRwX2JyaWRnZSAqYnJpZGdlID0gZGlzcGxheS0+ZHBfYnJpZGdlOworCisJaWYg KGJyaWRnZSAmJiBicmlkZ2UtPmJhc2UuZW5jb2RlcikKKwkJYnJpZGdlLT5iYXNlLmVuY29kZXIt PmJyaWRnZSA9IE5VTEw7CisKKwlrZnJlZShicmlkZ2UpOworfQorCisvKioKKyAqIGRwX2Nvbm5l Y3Rvcl9tb2RlX3ZhbGlkIC0gY2FsbGJhY2sgdG8gZGV0ZXJtaW5lIGlmIHNwZWNpZmllZCBtb2Rl IGlzIHZhbGlkCisgKiBAY29ubmVjdG9yOiBQb2ludGVyIHRvIGRybSBjb25uZWN0b3Igc3RydWN0 dXJlCisgKiBAbW9kZTogUG9pbnRlciB0byBkcm0gbW9kZSBzdHJ1Y3R1cmUKKyAqIFJldHVybnM6 IFZhbGlkaXR5IHN0YXR1cyBmb3Igc3BlY2lmaWVkIG1vZGUKKyAqLworc3RhdGljIGVudW0gZHJt X21vZGVfc3RhdHVzIGRwX2Nvbm5lY3Rvcl9tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IsCisJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCXN0cnVj dCBtc21fZHAgKmRwX2Rpc3A7CisJc3RydWN0IGRwX2RlYnVnICpkZWJ1ZzsKKwlzdHJ1Y3QgZHBf Y29ubmVjdG9yICpkcF9jb25uOworCisJaWYgKCFtb2RlIHx8ICFjb25uZWN0b3IpIHsKKwkJcHJf ZXJyKCJpbnZhbGlkIHBhcmFtc1xuIik7CisJCXJldHVybiBNT0RFX0VSUk9SOworCX0KKworCWRw X2Nvbm4gPSB0b19kcF9jb25uZWN0b3IoY29ubmVjdG9yKTsKKwlkcF9kaXNwID0gZHBfY29ubi0+ ZHBfZGlzcGxheTsKKwlkZWJ1ZyA9IGRwX2Rpc3AtPmdldF9kZWJ1ZyhkcF9kaXNwKTsKKworCW1v ZGUtPnZyZWZyZXNoID0gZHJtX21vZGVfdnJlZnJlc2gobW9kZSk7CisKKwlpZiAobW9kZS0+Y2xv Y2sgPiBkcF9kaXNwLT5tYXhfcGNsa19raHopCisJCXJldHVybiBNT0RFX0JBRDsKKworCWlmIChk ZWJ1Zy0+ZGVidWdfZW4gJiYgKG1vZGUtPmhkaXNwbGF5ICE9IGRlYnVnLT5oZGlzcGxheSB8fAor CQkJbW9kZS0+dmRpc3BsYXkgIT0gZGVidWctPnZkaXNwbGF5IHx8CisJCQltb2RlLT52cmVmcmVz aCAhPSBkZWJ1Zy0+dnJlZnJlc2ggfHwKKwkJCW1vZGUtPnBpY3R1cmVfYXNwZWN0X3JhdGlvICE9 IGRlYnVnLT5hc3BlY3RfcmF0aW8pKQorCQlyZXR1cm4gTU9ERV9CQUQ7CisKKwlyZXR1cm4gZHBf ZGlzcC0+dmFsaWRhdGVfbW9kZShkcF9kaXNwLCBtb2RlLT5jbG9jayk7Cit9CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyBkcF9jb25uZWN0b3JfZnVuY3MgPSB7CisJ LmRldGVjdCA9IGRwX2Nvbm5lY3Rvcl9kZXRlY3QsCisJLmZpbGxfbW9kZXMgPSBkcm1faGVscGVy X3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsCisJLmRlc3Ryb3kgPSBkcF9jb25uZWN0b3Jf ZGVzdHJveSwKKwkucmVzZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfcmVzZXQsCisJ LmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHVw bGljYXRlX3N0YXRlLAorCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVy X2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1f Y29ubmVjdG9yX2hlbHBlcl9mdW5jcyBkcF9jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0geworCS5n ZXRfbW9kZXMgPSBkcF9jb25uZWN0b3JfZ2V0X21vZGVzLAorCS5tb2RlX3ZhbGlkID0gZHBfY29u bmVjdG9yX21vZGVfdmFsaWQsCit9OworCisvKiBjb25uZWN0b3IgaW5pdGlhbGl6YXRpb24gKi8K K3N0cnVjdCBkcm1fY29ubmVjdG9yICpkcF9kcm1fY29ubmVjdG9yX2luaXQoc3RydWN0IG1zbV9k cCAqZHBfZGlzcGxheSkKK3sKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gTlVM TDsKKwlzdHJ1Y3QgZHBfY29ubmVjdG9yICpkcF9jb25uZWN0b3I7CisJaW50IHJldDsKKworCWRw X2Nvbm5lY3RvciA9IGt6YWxsb2Moc2l6ZW9mKCpkcF9jb25uZWN0b3IpLCBHRlBfS0VSTkVMKTsK KwlpZiAoIWRwX2Nvbm5lY3RvcikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlkcF9j b25uZWN0b3ItPmRwX2Rpc3BsYXkgPSBkcF9kaXNwbGF5OworCisJY29ubmVjdG9yID0gJmRwX2Nv bm5lY3Rvci0+YmFzZTsKKworCXJldCA9IGRybV9jb25uZWN0b3JfaW5pdChkcF9kaXNwbGF5LT5k cm1fZGV2LCBjb25uZWN0b3IsICZkcF9jb25uZWN0b3JfZnVuY3MsCisJCQlEUk1fTU9ERV9DT05O RUNUT1JfRGlzcGxheVBvcnQpOworCWlmIChyZXQpCisJCXJldHVybiBFUlJfUFRSKHJldCk7CisK Kwlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoY29ubmVjdG9yLCAmZHBfY29ubmVjdG9yX2hlbHBl cl9mdW5jcyk7CisKKwkvKgorCSAqIEVuYWJsZSBIUEQgdG8gbGV0IGhwZCBldmVudCBpcyBoYW5k bGVkCisJICogd2hlbiBjYWJsZSBpcyBhdHRhY2hlZCB0byB0aGUgaG9zdC4KKwkgKi8KKwljb25u ZWN0b3ItPnBvbGxlZCA9IERSTV9DT05ORUNUT1JfUE9MTF9IUEQ7CisKKwkvKiBEaXNwbGF5IGRy aXZlciBkb2Vzbid0IHN1cHBvcnQgaW50ZXJsYWNlIG5vdy4gKi8KKwljb25uZWN0b3ItPmludGVy bGFjZV9hbGxvd2VkID0gZmFsc2U7CisJY29ubmVjdG9yLT5kb3VibGVzY2FuX2FsbG93ZWQgPSBm YWxzZTsKKworCWRybV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIoY29ubmVjdG9yLCBkcF9kaXNw bGF5LT5lbmNvZGVyKTsKKworCXJldHVybiBjb25uZWN0b3I7Cit9CmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2RybS5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9k cm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmJjMWJlCi0tLSAvZGV2 L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kcm0uaApAQCAtMCwwICsxLDUy IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9u LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQK KyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpZm5kZWYgX0RQ X0RSTV9IXworI2RlZmluZSBfRFBfRFJNX0hfCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgor I2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+CisjaW5jbHVk ZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorCisjaW5jbHVkZSAibXNtX2Rydi5oIgorI2luY2x1 ZGUgImRwX2Rpc3BsYXkuaCIKKworc3RydWN0IGRwX2JyaWRnZSB7CisJc3RydWN0IGRybV9icmlk Z2UgYmFzZTsKKwl1MzIgaWQ7CisKKwlzdHJ1Y3QgbXNtX2RwICpkaXNwbGF5OworCXN0cnVjdCBk cF9kaXNwbGF5X21vZGUgZHBfbW9kZTsKK307CisKKy8qKgorICogZHBfY29ubmVjdG9yX3Bvc3Rf aW5pdCAtIGNhbGxiYWNrIHRvIHBlcmZvcm0gYWRkaXRpb25hbCBpbml0aWFsaXphdGlvbiBzdGVw cworICogQGNvbm5lY3RvcjogUG9pbnRlciB0byBkcm0gY29ubmVjdG9yIHN0cnVjdHVyZQorICog QGRpc3BsYXk6IFBvaW50ZXIgdG8gcHJpdmF0ZSBkaXNwbGF5IGhhbmRsZQorICogUmV0dXJuczog WmVybyBvbiBzdWNjZXNzCisgKi8KK2ludCBkcF9jb25uZWN0b3JfcG9zdF9pbml0KHN0cnVjdCBk cm1fY29ubmVjdG9yICpjb25uZWN0b3IsIHZvaWQgKmRpc3BsYXkpOworCit2b2lkIGRwX2Nvbm5l Y3Rvcl9zZW5kX2hwZF9ldmVudCh2b2lkICpkaXNwbGF5KTsKKworaW50IGRwX2RybV9icmlkZ2Vf aW5pdCh2b2lkICpkaXNwbGF5LAorCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlcik7CisKK3Zv aWQgZHBfZHJtX2JyaWRnZV9kZWluaXQodm9pZCAqZGlzcGxheSk7CisKK3N0cnVjdCBkcm1fY29u bmVjdG9yICpkcF9kcm1fY29ubmVjdG9yX2luaXQoc3RydWN0IG1zbV9kcCAqZHBfZGlzcGxheSk7 CisKKyNlbmRpZiAvKiBfRFBfRFJNX0hfICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZHAvZHBfZXh0Y29uLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2V4dGNvbi5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNWMxM2IKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2V4dGNvbi5jCkBAIC0wLDAgKzEsNDAw IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9u LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQK KyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNkZWZpbmUgcHJf Zm10KGZtdCkJIltkcm0tZHBdICVzOiAiIGZtdCwgX19mdW5jX18KKworI2luY2x1ZGUgPGxpbnV4 L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9leHRj b24uaD4KKworI2luY2x1ZGUgImRwX2V4dGNvbi5oIgorCisvKiBEUCBzcGVjaWZpYyBWRE0gY29t bWFuZHMgKi8KKyNkZWZpbmUgRFBfVVNCUERfVkRNX1NUQVRVUwkweDEwCisjZGVmaW5lIERQX1VT QlBEX1ZETV9DT05GSUdVUkUJMHgxMQorCisvKiBVU0JQRC1UeXBlQyBzcGVjaWZpYyBNYWNyb3Mg Ki8KKyNkZWZpbmUgVkRNX1ZFUlNJT04JCTB4MAorI2RlZmluZSBVU0JfQ19EUF9TSUQJCTB4RkYw MQorCitlbnVtIGRwX3VzYnBkX3Bpbl9hc3NpZ25tZW50IHsKKwlEUF9VU0JQRF9QSU5fQSwKKwlE UF9VU0JQRF9QSU5fQiwKKwlEUF9VU0JQRF9QSU5fQywKKwlEUF9VU0JQRF9QSU5fRCwKKwlEUF9V U0JQRF9QSU5fRSwKKwlEUF9VU0JQRF9QSU5fRiwKKwlEUF9VU0JQRF9QSU5fTUFYLAorfTsKKwor c3RydWN0IGRwX3VzYnBkX2NhcGFiaWxpdGllcyB7CisJZW51bSBkcF91c2JwZF9wb3J0IHBvcnQ7 CisJYm9vbCByZWNlcHRhY2xlX3N0YXRlOworCXU4IHVsaW5rX3Bpbl9jb25maWc7CisJdTggZGxp bmtfcGluX2NvbmZpZzsKK307CisKK3N0cnVjdCBkcF9leHRjb25fcHJpdmF0ZSB7CisJdTMyIHZk bzsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGV4dGNvbl9u YjsKKwlzdHJ1Y3QgZXh0Y29uX2RldiAqZXh0Y29uOworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0 ICpleHRjb25fd3E7CisJc3RydWN0IHdvcmtfc3RydWN0IGV2ZW50X3dvcms7CisJc3RydWN0IHVz YnBkICpwZDsKKwlzdHJ1Y3QgZHBfdXNicGRfY2IgKmRwX2NiOworCXN0cnVjdCBkcF91c2JwZF9j YXBhYmlsaXRpZXMgY2FwOworCXN0cnVjdCBkcF91c2JwZCBkcF91c2JwZDsKK307CisKK3N0YXRp YyBjb25zdCBjaGFyICpkcF91c2JwZF9waW5fbmFtZSh1OCBwaW4pCit7CisJc3dpdGNoIChwaW4p IHsKKwljYXNlIERQX1VTQlBEX1BJTl9BOiByZXR1cm4gIkRQX1VTQlBEX1BJTl9BU1NJR05NRU5U X0EiOworCWNhc2UgRFBfVVNCUERfUElOX0I6IHJldHVybiAiRFBfVVNCUERfUElOX0FTU0lHTk1F TlRfQiI7CisJY2FzZSBEUF9VU0JQRF9QSU5fQzogcmV0dXJuICJEUF9VU0JQRF9QSU5fQVNTSUdO TUVOVF9DIjsKKwljYXNlIERQX1VTQlBEX1BJTl9EOiByZXR1cm4gIkRQX1VTQlBEX1BJTl9BU1NJ R05NRU5UX0QiOworCWNhc2UgRFBfVVNCUERfUElOX0U6IHJldHVybiAiRFBfVVNCUERfUElOX0FT U0lHTk1FTlRfRSI7CisJY2FzZSBEUF9VU0JQRF9QSU5fRjogcmV0dXJuICJEUF9VU0JQRF9QSU5f QVNTSUdOTUVOVF9GIjsKKwlkZWZhdWx0OiByZXR1cm4gIlVOS05PV04iOworCX0KK30KKworc3Rh dGljIGNvbnN0IGNoYXIgKmRwX3VzYnBkX3BvcnRfbmFtZShlbnVtIGRwX3VzYnBkX3BvcnQgcG9y dCkKK3sKKwlzd2l0Y2ggKHBvcnQpIHsKKwljYXNlIERQX1VTQlBEX1BPUlRfTk9ORTogcmV0dXJu ICJEUF9VU0JQRF9QT1JUX05PTkUiOworCWNhc2UgRFBfVVNCUERfUE9SVF9VRlBfRDogcmV0dXJu ICJEUF9VU0JQRF9QT1JUX1VGUF9EIjsKKwljYXNlIERQX1VTQlBEX1BPUlRfREZQX0Q6IHJldHVy biAiRFBfVVNCUERfUE9SVF9ERlBfRCI7CisJY2FzZSBEUF9VU0JQRF9QT1JUX0RfVUZQX0Q6IHJl dHVybiAiRFBfVVNCUERfUE9SVF9EX1VGUF9EIjsKKwlkZWZhdWx0OiByZXR1cm4gIkRQX1VTQlBE X1BPUlRfTk9ORSI7CisJfQorfQorCitzdGF0aWMgdm9pZCBkcF91c2JwZF9pbml0X3BvcnQoZW51 bSBkcF91c2JwZF9wb3J0ICpwb3J0LCB1MzIgaW5fcG9ydCkKK3sKKwlzd2l0Y2ggKGluX3BvcnQp IHsKKwljYXNlIDA6CisJCSpwb3J0ID0gRFBfVVNCUERfUE9SVF9OT05FOworCQlicmVhazsKKwlj YXNlIDE6CisJCSpwb3J0ID0gRFBfVVNCUERfUE9SVF9VRlBfRDsKKwkJYnJlYWs7CisJY2FzZSAy OgorCQkqcG9ydCA9IERQX1VTQlBEX1BPUlRfREZQX0Q7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJ KnBvcnQgPSBEUF9VU0JQRF9QT1JUX0RfVUZQX0Q7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCSpw b3J0ID0gRFBfVVNCUERfUE9SVF9OT05FOworCX0KKwlwcl9kZWJ1ZygicG9ydDolc1xuIiwgZHBf dXNicGRfcG9ydF9uYW1lKCpwb3J0KSk7Cit9CisKK3ZvaWQgZHBfdXNicGRfZ2V0X2NhcGFiaWxp dGllcyhzdHJ1Y3QgZHBfZXh0Y29uX3ByaXZhdGUgKnBkKQoreworCXN0cnVjdCBkcF91c2JwZF9j YXBhYmlsaXRpZXMgKmNhcCA9ICZwZC0+Y2FwOworCXUzMiBidWYgPSBwZC0+dmRvOworCWludCBw b3J0ID0gYnVmICYgMHgzOworCisJY2FwLT5yZWNlcHRhY2xlX3N0YXRlID0gKGJ1ZiAmIEJJVCg2 KSkgPyB0cnVlIDogZmFsc2U7CisJY2FwLT5kbGlua19waW5fY29uZmlnID0gKGJ1ZiA+PiA4KSAm IDB4ZmY7CisJY2FwLT51bGlua19waW5fY29uZmlnID0gKGJ1ZiA+PiAxNikgJiAweGZmOworCisJ ZHBfdXNicGRfaW5pdF9wb3J0KCZjYXAtPnBvcnQsIHBvcnQpOworfQorCit2b2lkIGRwX3VzYnBk X2dldF9zdGF0dXMoc3RydWN0IGRwX2V4dGNvbl9wcml2YXRlICpwZCkKK3sKKwlzdHJ1Y3QgZHBf dXNicGQgKnN0YXR1cyA9ICZwZC0+ZHBfdXNicGQ7CisJdTMyIGJ1ZiA9IHBkLT52ZG87CisJaW50 IHBvcnQgPSBidWYgJiAweDM7CisKKwlzdGF0dXMtPmxvd19wb3dfc3QgICAgID0gKGJ1ZiAmIEJJ VCgyKSkgPyB0cnVlIDogZmFsc2U7CisJc3RhdHVzLT5hZGFwdG9yX2RwX2VuICA9IChidWYgJiBC SVQoMykpID8gdHJ1ZSA6IGZhbHNlOworCXN0YXR1cy0+bXVsdGlfZnVuYyAgICAgPSAoYnVmICYg QklUKDQpKSA/IHRydWUgOiBmYWxzZTsKKwlzdGF0dXMtPnVzYl9jb25maWdfcmVxID0gKGJ1ZiAm IEJJVCg1KSkgPyB0cnVlIDogZmFsc2U7CisJc3RhdHVzLT5leGl0X2RwX21vZGUgICA9IChidWYg JiBCSVQoNikpID8gdHJ1ZSA6IGZhbHNlOworCXN0YXR1cy0+aHBkX2hpZ2ggICAgICAgPSAoYnVm ICYgQklUKDcpKSA/IHRydWUgOiBmYWxzZTsKKwlzdGF0dXMtPmhwZF9pcnEgICAgICAgID0gKGJ1 ZiAmIEJJVCg4KSkgPyB0cnVlIDogZmFsc2U7CisKKwlwcl9kZWJ1ZygibG93X3Bvd19zdCA9ICVk LCBhZGFwdG9yX2RwX2VuID0gJWQsIG11bHRpX2Z1bmMgPSAlZFxuIiwKKwkJCXN0YXR1cy0+bG93 X3Bvd19zdCwgc3RhdHVzLT5hZGFwdG9yX2RwX2VuLAorCQkJc3RhdHVzLT5tdWx0aV9mdW5jKTsK Kwlwcl9kZWJ1ZygidXNiX2NvbmZpZ19yZXEgPSAlZCwgZXhpdF9kcF9tb2RlID0gJWQsIGhwZF9o aWdoID0lZFxuIiwKKwkJCXN0YXR1cy0+dXNiX2NvbmZpZ19yZXEsCisJCQlzdGF0dXMtPmV4aXRf ZHBfbW9kZSwgc3RhdHVzLT5ocGRfaGlnaCk7CisJcHJfZGVidWcoImhwZF9pcnEgPSAlZFxuIiwg c3RhdHVzLT5ocGRfaXJxKTsKKworCWRwX3VzYnBkX2luaXRfcG9ydCgmc3RhdHVzLT5wb3J0LCBw b3J0KTsKK30KKwordTMyIGRwX3VzYnBkX2dlbl9jb25maWdfcGt0KHN0cnVjdCBkcF9leHRjb25f cHJpdmF0ZSAqcGQpCit7CisJdTggcGluX2NmZywgcGluOworCXUzMiBjb25maWcgPSAwOworCWNv bnN0IHUzMiB1ZnBfZF9jb25maWcgPSAweDIsIGRwX3ZlciA9IDB4MTsKKworCWlmIChwZC0+Y2Fw LnJlY2VwdGFjbGVfc3RhdGUpCisJCXBpbl9jZmcgPSBwZC0+Y2FwLnVsaW5rX3Bpbl9jb25maWc7 CisJZWxzZQorCQlwaW5fY2ZnID0gcGQtPmNhcC5kbGlua19waW5fY29uZmlnOworCisJZm9yIChw aW4gPSBEUF9VU0JQRF9QSU5fQTsgcGluIDwgRFBfVVNCUERfUElOX01BWDsgcGluKyspIHsKKwkJ aWYgKHBpbl9jZmcgJiBCSVQocGluKSkgeworCQkJaWYgKHBkLT5kcF91c2JwZC5tdWx0aV9mdW5j KSB7CisJCQkJaWYgKHBpbiA9PSBEUF9VU0JQRF9QSU5fRCkKKwkJCQkJYnJlYWs7CisJCQl9IGVs c2UgeworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJaWYgKHBpbiA9PSBEUF9VU0JQRF9Q SU5fTUFYKQorCQlwaW4gPSBEUF9VU0JQRF9QSU5fQzsKKworCXByX2RlYnVnKCJwaW4gYXNzaWdu bWVudDogJXNcbiIsIGRwX3VzYnBkX3Bpbl9uYW1lKHBpbikpOworCisJY29uZmlnIHw9IEJJVChw aW4pIDw8IDg7CisKKwljb25maWcgfD0gKGRwX3ZlciA8PCAyKTsKKwljb25maWcgfD0gdWZwX2Rf Y29uZmlnOworCisJcHJfZGVidWcoImNvbmZpZyA9IDB4JXhcbiIsIGNvbmZpZyk7CisJcmV0dXJu IGNvbmZpZzsKK30KKworc3RhdGljIGludCBkcF9leHRjb25fY29ubmVjdChzdHJ1Y3QgZHBfdXNi cGQgKmRwX3VzYnBkLCBib29sIGhwZCkKK3sKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBkcF9leHRj b25fcHJpdmF0ZSAqZXh0Y29uOworCisJaWYgKCFkcF91c2JwZCkgeworCQlwcl9lcnIoImludmFs aWQgaW5wdXRcbiIpOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gZXJyb3I7CisJfQorCisJZXh0 Y29uID0gY29udGFpbmVyX29mKGRwX3VzYnBkLCBzdHJ1Y3QgZHBfZXh0Y29uX3ByaXZhdGUsIGRw X3VzYnBkKTsKKworCWRwX3VzYnBkLT5ocGRfaGlnaCA9IGhwZDsKKwlkcF91c2JwZC0+Zm9yY2Vk X2Rpc2Nvbm5lY3QgPSAhaHBkOworCisJaWYgKGhwZCkKKwkJZXh0Y29uLT5kcF9jYi0+Y29uZmln dXJlKGV4dGNvbi0+ZGV2KTsKKwllbHNlCisJCWV4dGNvbi0+ZHBfY2ItPmRpc2Nvbm5lY3QoZXh0 Y29uLT5kZXYpOworCitlcnJvcjoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgZHBfZXh0 Y29uX2dldF9sYW5lcyhzdHJ1Y3QgZHBfZXh0Y29uX3ByaXZhdGUgKmV4dGNvbl9wcml2KQorewor CXVuaW9uIGV4dGNvbl9wcm9wZXJ0eV92YWx1ZSBwcm9wZXJ0eTsKKwl1OCBsYW5lczsKKworCWlm ICghZXh0Y29uX3ByaXYgfHwgIWV4dGNvbl9wcml2LT5leHRjb24pIHsKKwkJcHJfZXJyKCJJbnZh bGlkIGlucHV0IGFyZ3VtZW50c1xuIik7CisJCXJldHVybiAwOworCX0KKworCWV4dGNvbl9nZXRf cHJvcGVydHkoZXh0Y29uX3ByaXYtPmV4dGNvbiwKKwkJCQkJRVhUQ09OX0RJU1BfRFAsCisJCQkJ CUVYVENPTl9QUk9QX1VTQl9TUywKKwkJCQkJJnByb3BlcnR5KTsKKwlsYW5lcyA9ICgocHJvcGVy dHkuaW50dmFsKSA/IDIgOiA0KTsKKworCXJldHVybiBsYW5lczsKK30KKworCitzdGF0aWMgdm9p ZCBkcF9leHRjb25fZXZlbnRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3Ry dWN0IGRwX2V4dGNvbl9wcml2YXRlICpleHRjb25fcHJpdjsKKwlpbnQgZHBfc3RhdGUsIHJldDsK KwlpbnQgbGFuZXM7CisJdW5pb24gZXh0Y29uX3Byb3BlcnR5X3ZhbHVlIHByb3BlcnR5OworCisJ ZXh0Y29uX3ByaXYgPSBjb250YWluZXJfb2Yod29yaywKKwkJCXN0cnVjdCBkcF9leHRjb25fcHJp dmF0ZSwgZXZlbnRfd29yayk7CisKKwlpZiAoIWV4dGNvbl9wcml2IHx8ICFleHRjb25fcHJpdi0+ ZXh0Y29uKSB7CisJCXByX2VycigiSW52YWxpZCBleHRjb24gZGV2aWNlIGhhbmRsZXJcbiIpOwor CQlyZXR1cm47CisJfQorCisJZHBfc3RhdGUgPSBleHRjb25fZ2V0X3N0YXRlKGV4dGNvbl9wcml2 LT5leHRjb24sCisJCQkJCQlFWFRDT05fRElTUF9EUCk7CisKKwlpZiAoZHBfc3RhdGUgPiAwKSB7 CisJCXJldCA9IGV4dGNvbl9nZXRfcHJvcGVydHkoZXh0Y29uX3ByaXYtPmV4dGNvbiwKKwkJCQkJ RVhUQ09OX0RJU1BfRFAsCisJCQkJCUVYVENPTl9QUk9QX1VTQl9UWVBFQ19QT0xBUklUWSwKKwkJ CQkJJnByb3BlcnR5KTsKKwkJaWYgKHJldCkgeworCQkJcHJfZXJyKCJHZXQgUG9sYXJpdHkgcHJv cGVydHkgZmFpbGVkXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCQlleHRjb25fcHJpdi0+ZHBfdXNi cGQub3JpZW50YXRpb24gPQorCQkJKChwcm9wZXJ0eS5pbnR2YWwpID8KKwkJCQlPUklFTlRBVElP Tl9DQzIgOiBPUklFTlRBVElPTl9DQzEpOworCisJCWxhbmVzID0gZHBfZXh0Y29uX2dldF9sYW5l cyhleHRjb25fcHJpdik7CisJCWlmICghbGFuZXMpCisJCQlyZXR1cm47CisJCWV4dGNvbl9wcml2 LT5kcF91c2JwZC5tdWx0aV9mdW5jID0KKwkJCQkJKChsYW5lcyA9PSAyKSA/IGZhbHNlIDogdHJ1 ZSk7CisKKwkJaWYgKGV4dGNvbl9wcml2LT5kcF9jYiAmJiBleHRjb25fcHJpdi0+ZHBfY2ItPmNv bmZpZ3VyZSkKKwkJCWRwX2V4dGNvbl9jb25uZWN0KCZleHRjb25fcHJpdi0+ZHBfdXNicGQsIHRy dWUpOworCX0gZWxzZSB7CisJCWlmIChleHRjb25fcHJpdi0+ZHBfY2IgJiYgZXh0Y29uX3ByaXYt PmRwX2NiLT5kaXNjb25uZWN0KQorCQkJZHBfZXh0Y29uX2Nvbm5lY3QoJmV4dGNvbl9wcml2LT5k cF91c2JwZCwgZmFsc2UpOworCX0KK30KKworc3RhdGljIGludCBkcF9leHRjb25fY3JlYXRlX3dv cmtxdWV1ZShzdHJ1Y3QgZHBfZXh0Y29uX3ByaXZhdGUgKmV4dGNvbl9wcml2KQoreworCWV4dGNv bl9wcml2LT5leHRjb25fd3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgiZHJtX2Rw X2V4dGNvbiIpOworCWlmIChJU19FUlJfT1JfTlVMTChleHRjb25fcHJpdi0+ZXh0Y29uX3dxKSkg eworCQlwcl9lcnIoIkVycm9yIGNyZWF0aW5nIGV4dGNvbiB3cVxuIik7CisJCXJldHVybiAtRVBF Uk07CisJfQorCisJSU5JVF9XT1JLKCZleHRjb25fcHJpdi0+ZXZlbnRfd29yaywgZHBfZXh0Y29u X2V2ZW50X3dvcmspOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHBfZXh0Y29uX2V2 ZW50X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAorCQkJCSAgdW5zaWduZWQgbG9u ZyBldmVudCwgdm9pZCAqcHJpdikKK3sKKwlzdHJ1Y3QgZHBfZXh0Y29uX3ByaXZhdGUgKmV4dGNv bl9wcml2OworCisJZXh0Y29uX3ByaXYgPSBjb250YWluZXJfb2YobmIsIHN0cnVjdCBkcF9leHRj b25fcHJpdmF0ZSwKKwkJCQkJCWV4dGNvbl9uYik7CisKKwlxdWV1ZV93b3JrKGV4dGNvbl9wcml2 LT5leHRjb25fd3EsICZleHRjb25fcHJpdi0+ZXZlbnRfd29yayk7CisJcmV0dXJuIE5PVElGWV9E T05FOworfQorCitpbnQgZHBfZXh0Y29uX3JlZ2lzdGVyKHN0cnVjdCBkcF91c2JwZCAqZHBfdXNi cGQpCit7CisJc3RydWN0IGRwX2V4dGNvbl9wcml2YXRlICpleHRjb25fcHJpdjsKKwlpbnQgcmV0 ID0gMDsKKworCWlmICghZHBfdXNicGQpCisJCXJldHVybiAtRUlOVkFMOworCisJcHJfZXJyKCJT dGFydCsrKysiKTsKKwlleHRjb25fcHJpdiA9IGNvbnRhaW5lcl9vZihkcF91c2JwZCwgc3RydWN0 IGRwX2V4dGNvbl9wcml2YXRlLCBkcF91c2JwZCk7CisKKwlleHRjb25fcHJpdi0+ZXh0Y29uX25i Lm5vdGlmaWVyX2NhbGwgPSBkcF9leHRjb25fZXZlbnRfbm90aWZ5OworCXJldCA9IGRldm1fZXh0 Y29uX3JlZ2lzdGVyX25vdGlmaWVyKGV4dGNvbl9wcml2LT5kZXYsIGV4dGNvbl9wcml2LT5leHRj b24sCisJCQkJCSAgICBFWFRDT05fRElTUF9EUCwKKwkJCQkJICAgICZleHRjb25fcHJpdi0+ZXh0 Y29uX25iKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZXh0Y29uX3ByaXYtPmRldiwKKwkJCSJy ZWdpc3RlciBFWFRDT05fRElTUF9EUCBub3RpZmllciBlcnJcbiIpOworCQlyZXQgPSAtRUlOVkFM OworCX0KKworCXJldCA9IGRwX2V4dGNvbl9jcmVhdGVfd29ya3F1ZXVlKGV4dGNvbl9wcml2KTsK KwlpZiAocmV0KSB7CisJCXByX2VycigiRmFpbGVkIHRvIGNyZWF0ZSB3b3JrcXVldWVcbiIpOwor CQlkcF9leHRjb25fdW5yZWdpc3RlcihkcF91c2JwZCk7CisJfQorCisJcHJfZXJyKCJFbmQtLS0t Iik7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBkcF9leHRjb25fdW5yZWdpc3RlcihzdHJ1Y3Qg ZHBfdXNicGQgKmRwX3VzYnBkKQoreworCXN0cnVjdCBkcF9leHRjb25fcHJpdmF0ZSAqZXh0Y29u X3ByaXY7CisKKwlpZiAoIWRwX3VzYnBkKSB7CisJCXByX2VycigiSW52YWxpZCBpbnB1dFxuIik7 CisJCXJldHVybjsKKwl9CisKKwlwcl9lcnIoIlN0YXJ0KysrKyIpOworCWV4dGNvbl9wcml2ID0g Y29udGFpbmVyX29mKGRwX3VzYnBkLCBzdHJ1Y3QgZHBfZXh0Y29uX3ByaXZhdGUsIGRwX3VzYnBk KTsKKworCWRldm1fZXh0Y29uX3VucmVnaXN0ZXJfbm90aWZpZXIoZXh0Y29uX3ByaXYtPmRldiwg ZXh0Y29uX3ByaXYtPmV4dGNvbiwKKwkJCQkJICAgIEVYVENPTl9ESVNQX0RQLAorCQkJCQkgICAg JmV4dGNvbl9wcml2LT5leHRjb25fbmIpOworCisJaWYgKGV4dGNvbl9wcml2LT5leHRjb25fd3Ep CisJCWRlc3Ryb3lfd29ya3F1ZXVlKGV4dGNvbl9wcml2LT5leHRjb25fd3EpOworCisJcHJfZXJy KCJFbmQtLS0tIik7CisJcmV0dXJuOworfQorCitzdHJ1Y3QgZHBfdXNicGQgKmRwX2V4dGNvbl9n ZXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZHBfdXNicGRfY2IgKmNiKQoreworCWludCBy YyA9IDA7CisJc3RydWN0IGRwX2V4dGNvbl9wcml2YXRlICpkcF9leHRjb247CisJc3RydWN0IGRw X3VzYnBkICpkcF91c2JwZDsKKworCWlmICghY2IpIHsKKwkJcHJfZXJyKCJpbnZhbGlkIGNiIGRh dGFcbiIpOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gZXJyb3I7CisJfQorCisJcHJfZXJyKCIl czogU3RhcnQiLCBfX2Z1bmNfXyk7CisJZHBfZXh0Y29uID0gZGV2bV9remFsbG9jKGRldiwgc2l6 ZW9mKCpkcF9leHRjb24pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRwX2V4dGNvbikgeworCQlyYyA9 IC1FTk9NRU07CisJCWdvdG8gZXJyb3I7CisJfQorCisJZHBfZXh0Y29uLT5leHRjb24gPSBleHRj b25fZ2V0X2VkZXZfYnlfcGhhbmRsZShkZXYsIDApOworCWlmICghZHBfZXh0Y29uLT5leHRjb24p IHsKKwkJcHJfZXJyKCJpbnZhbGlkIGV4dGNvbiBkYXRhXG4iKTsKKwkJcmMgPSAtRUlOVkFMOwor CQlkZXZtX2tmcmVlKGRldiwgZHBfZXh0Y29uKTsKKwkJZ290byBlcnJvcjsKKyAgICAgICAgfQor CisJZHBfZXh0Y29uLT5kZXYgPSBkZXY7CisJZHBfZXh0Y29uLT5kcF9jYiA9IGNiOworCisJZHBf ZXh0Y29uLT5kcF91c2JwZC5jb25uZWN0ID0gZHBfZXh0Y29uX2Nvbm5lY3Q7CisJZHBfdXNicGQg PSAmZHBfZXh0Y29uLT5kcF91c2JwZDsKKworCXByX2VycigiJXM6IGVuZCIsIF9fZnVuY19fKTsK KwlyZXR1cm4gZHBfdXNicGQ7CitlcnJvcjoKKwlyZXR1cm4gRVJSX1BUUihyYyk7Cit9CisKK3Zv aWQgZHBfZXh0Y29uX3B1dChzdHJ1Y3QgZHBfdXNicGQgKmRwX3VzYnBkKQoreworCXN0cnVjdCBk cF9leHRjb25fcHJpdmF0ZSAqZXh0Y29uOworCisJaWYgKCFkcF91c2JwZCkKKwkJcmV0dXJuOwor CisJZXh0Y29uID0gY29udGFpbmVyX29mKGRwX3VzYnBkLCBzdHJ1Y3QgZHBfZXh0Y29uX3ByaXZh dGUsIGRwX3VzYnBkKTsKKworCWRldm1fa2ZyZWUoZXh0Y29uLT5kZXYsIGV4dGNvbik7CisKKwlw cl9lcnIoIiVzOiBlbmQiLCBfX2Z1bmNfXyk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vbXNtL2RwL2RwX2V4dGNvbi5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9leHRjb24u aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjgzYTE4Ci0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9leHRjb24uaApAQCAtMCwwICsxLDEx MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMi0yMDE4LCBUaGUgTGludXggRm91bmRhdGlv bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5k CisgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaWZuZGVmIF9E UF9FWFRDT05fSF8KKyNkZWZpbmUgX0RQX0VYVENPTl9IXworCisvLyNpbmNsdWRlIDxsaW51eC91 c2IvdXNicGQuaD4KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgv ZGV2aWNlLmg+CisKKy8qKgorICogZW51bSBkcF91c2JwZF9wb3J0IC0gdXNiL2RwIHBvcnQgdHlw ZQorICogQERQX1VTQlBEX1BPUlRfTk9ORTogcG9ydCBub3QgY29uZmlndXJlZAorICogQERQX1VT QlBEX1BPUlRfVUZQX0Q6IFVwc3RyZWFtIEZhY2luZyBQb3J0IC0gRGlzcGxheVBvcnQKKyAqIEBE UF9VU0JQRF9QT1JUX0RGUF9EOiBEb3duc3RyZWFtIEZhY2luZyBQb3J0IC0gRGlzcGxheVBvcnQK KyAqIEBEUF9VU0JQRF9QT1JUX0RfVUZQX0Q6IEJvdGggVUZQICYgREZQIC0gRGlzcGxheVBvcnQK KyAqLworCitlbnVtIGRwX3VzYnBkX3BvcnQgeworCURQX1VTQlBEX1BPUlRfTk9ORSwKKwlEUF9V U0JQRF9QT1JUX1VGUF9ELAorCURQX1VTQlBEX1BPUlRfREZQX0QsCisJRFBfVVNCUERfUE9SVF9E X1VGUF9ELAorfTsKKworZW51bSBwbHVnX29yaWVudGF0aW9uIHsKKwlPUklFTlRBVElPTl9OT05F LAorCU9SSUVOVEFUSU9OX0NDMSwKKwlPUklFTlRBVElPTl9DQzIsCit9OworCisvKioKKyAqIHN0 cnVjdCBkcF91c2JwZCAtIERpc3BsYXlQb3J0IHN0YXR1cworICoKKyAqIEBwb3J0OiBwb3J0IGNv bmZpZ3VyZWQKKyAqIG9yaWVudGF0aW9uOiBwbHVnIG9yaWVudGF0aW9uIGNvbmZpZ3VyYXRpb24K KyAqIEBsb3dfcG93X3N0OiBsb3cgcG93ZXIgc3RhdGUKKyAqIEBhZGFwdG9yX2RwX2VuOiBhZGFw dG9yIGZ1bmN0aW9uYWxpdHkgZW5hYmxlZAorICogQG11bHRpX2Z1bmM6IG11bHRpLWZ1bmN0aW9u IHByZWZlcnJlZAorICogQHVzYl9jb25maWdfcmVxOiByZXF1ZXN0IHRvIHN3aXRjaCB0byB1c2IK KyAqIEBleGl0X2RwX21vZGU6IHJlcXVlc3QgZXhpdCBmcm9tIGRpc3BsYXlwb3J0IG1vZGUKKyAq IEBocGRfaGlnaDogSG90IFBsdWcgRGV0ZWN0IHNpZ25hbCBpcyBoaWdoLgorICogQGhwZF9pcnE6 IENoYW5nZSBpbiB0aGUgc3RhdHVzIHNpbmNlIGxhc3QgbWVzc2FnZQorICogQGFsdF9tb2RlX2Nm Z19kb25lOiBib29sIHRvIHNwZWNpZnkgYWx0IG1vZGUgc3RhdHVzCisgKiBAZGVidWdfZW46IGJv b2wgdG8gc3BlY2lmeSBkZWJ1ZyBtb2RlCisgKiBAY29ubmVjdDogc2ltdWxhdGUgZGlzY29ubmVj dCBvciBjb25uZWN0IGZvciBkZWJ1ZyBtb2RlCisgKi8KK3N0cnVjdCBkcF91c2JwZCB7CisJZW51 bSBkcF91c2JwZF9wb3J0IHBvcnQ7CisJZW51bSBwbHVnX29yaWVudGF0aW9uIG9yaWVudGF0aW9u OworCWJvb2wgbG93X3Bvd19zdDsKKwlib29sIGFkYXB0b3JfZHBfZW47CisJYm9vbCBtdWx0aV9m dW5jOworCWJvb2wgdXNiX2NvbmZpZ19yZXE7CisJYm9vbCBleGl0X2RwX21vZGU7CisJYm9vbCBo cGRfaGlnaDsKKwlib29sIGhwZF9pcnE7CisJYm9vbCBhbHRfbW9kZV9jZmdfZG9uZTsKKwlib29s IGRlYnVnX2VuOworCWJvb2wgZm9yY2VkX2Rpc2Nvbm5lY3Q7CisKKwlpbnQgKCpjb25uZWN0KShz dHJ1Y3QgZHBfdXNicGQgKmRwX3VzYnBkLCBib29sIGhwZCk7Cit9OworCisvKioKKyAqIHN0cnVj dCBkcF91c2JwZF9jYiAtIGNhbGxiYWNrIGZ1bmN0aW9ucyBwcm92aWRlZCBieSB0aGUgY2xpZW50 CisgKgorICogQGNvbmZpZ3VyZTogY2FsbGVkIGJ5IHVzYnBkIG1vZHVsZSB3aGVuIFBEIGNvbW11 bmljYXRpb24gaGFzCisgKiBiZWVuIGNvbXBsZXRlZCBhbmQgdGhlIHVzYiBwZXJpcGhlcmFsIGhh cyBiZWVuIGNvbmZpZ3VyZWQgb24KKyAqIGRwIG1vZGUuCisgKiBAZGlzY29ubmVjdDogbm90aWZ5 IHRoZSBjYWJsZSBkaXNjb25uZWN0IGlzc3VlZCBieSB1c2IuCisgKiBAYXR0ZW50aW9uOiBub3Rp ZnkgYW55IGF0dGVudGlvbiBtZXNzYWdlIGlzc3VlZCBieSB1c2IuCisgKi8KK3N0cnVjdCBkcF91 c2JwZF9jYiB7CisJaW50ICgqY29uZmlndXJlKShzdHJ1Y3QgZGV2aWNlICpkZXYpOworCWludCAo KmRpc2Nvbm5lY3QpKHN0cnVjdCBkZXZpY2UgKmRldik7CisJaW50ICgqYXR0ZW50aW9uKShzdHJ1 Y3QgZGV2aWNlICpkZXYpOworfTsKKworLyoqCisgKiBkcF9leHRjb25fZ2V0KCkgLSBzZXR1cCB1 c2JwZCBtb2R1bGUKKyAqCisgKiBAZGV2OiBkZXZpY2UgaW5zdGFuY2Ugb2YgdGhlIGNhbGxlcgor ICogQGNiOiBzdHJ1Y3QgY29udGFpbmluZyBjYWxsYmFjayBmdW5jdGlvbiBwb2ludGVycy4KKyAq CisgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyB0aGUgY2xpZW50IHRvIGluaXRpYWxpemUgdGhlIHVz YnBkCisgKiBtb2R1bGUuIFRoZSBtb2R1bGUgd2lsbCBjb21tdW5pY2F0ZSB3aXRoIHVzYiBkcml2 ZXIgYW5kCisgKiBoYW5kbGVzIHRoZSBwb3dlciBkZWxpdmVyeSAoUEQpIGNvbW11bmljYXRpb24g d2l0aCB0aGUKKyAqIHNpbmsvdXNiIGRldmljZS4gVGhpcyBtb2R1bGUgd2lsbCBub3RpZnkgdGhl IGNsaWVudCB1c2luZworICogdGhlIGNhbGxiYWNrIGZ1bmN0aW9ucyBhYm91dCB0aGUgY29ubmVj dGlvbiBhbmQgc3RhdHVzLgorICovCitzdHJ1Y3QgZHBfdXNicGQgKmRwX2V4dGNvbl9nZXQoc3Ry dWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZHBfdXNicGRfY2IgKmNiKTsKKwordm9pZCBkcF9leHRj b25fcHV0KHN0cnVjdCBkcF91c2JwZCAqcGQpOworCitpbnQgZHBfZXh0Y29uX3JlZ2lzdGVyKHN0 cnVjdCBkcF91c2JwZCAqZHBfdXNicGQpOwordm9pZCBkcF9leHRjb25fdW5yZWdpc3RlcihzdHJ1 Y3QgZHBfdXNicGQgKmRwX3VzYnBkKTsKKworI2VuZGlmIC8qIF9EUF9FWFRDT05fSF8gKi8KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfbGluay5jIGIvZHJpdmVycy9ncHUv ZHJtL21zbS9kcC9kcF9saW5rLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u NWFiMWVmYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfbGlu ay5jCkBAIC0wLDAgKzEsMTU0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMi0yMDE4LCBU aGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSB2ZXJzaW9uIDIgYW5kCisgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK KyAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpCSJbZHJtLWRwXSAlczogIiBmbXQsIF9fZnVuY19f CisKKyNpbmNsdWRlICJkcF9saW5rLmgiCisjaW5jbHVkZSAiZHBfcGFuZWwuaCIKKworZW51bSBk eW5hbWljX3JhbmdlIHsKKwlEUF9EWU5BTUlDX1JBTkdFX1JHQl9WRVNBID0gMHgwMCwKKwlEUF9E WU5BTUlDX1JBTkdFX1JHQl9DRUEgPSAweDAxLAorCURQX0RZTkFNSUNfUkFOR0VfVU5LTk9XTiA9 IDB4RkZGRkZGRkYsCit9OworCitlbnVtIGF1ZGlvX3NhbXBsZV9yYXRlIHsKKwlBVURJT19TQU1Q TEVfUkFURV8zMl9LSFoJPSAweDAwLAorCUFVRElPX1NBTVBMRV9SQVRFXzQ0XzFfS0haCT0gMHgw MSwKKwlBVURJT19TQU1QTEVfUkFURV80OF9LSFoJPSAweDAyLAorCUFVRElPX1NBTVBMRV9SQVRF Xzg4XzJfS0haCT0gMHgwMywKKwlBVURJT19TQU1QTEVfUkFURV85Nl9LSFoJPSAweDA0LAorCUFV RElPX1NBTVBMRV9SQVRFXzE3Nl80X0tIWgk9IDB4MDUsCisJQVVESU9fU0FNUExFX1JBVEVfMTky X0tIWgk9IDB4MDYsCit9OworCitlbnVtIGF1ZGlvX3BhdHRlcm5fdHlwZSB7CisJQVVESU9fVEVT VF9QQVRURVJOX09QRVJBVE9SX0RFRklORUQJPSAweDAwLAorCUFVRElPX1RFU1RfUEFUVEVSTl9T QVdUT09USAkJPSAweDAxLAorfTsKKworc3RydWN0IGRwX2xpbmtfcmVxdWVzdCB7CisJdTMyIHRl c3RfcmVxdWVzdGVkOworCXUzMiB0ZXN0X2xpbmtfcmF0ZTsKKwl1MzIgdGVzdF9sYW5lX2NvdW50 OworfTsKKworc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSB7CisJdTMyIHByZXZfc2lua19jb3VudDsK KwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IGRwX2F1eCAqYXV4OworCXN0cnVjdCBkcF9s aW5rIGRwX2xpbms7CisKKwlzdHJ1Y3QgZHBfbGlua19yZXF1ZXN0IHJlcXVlc3Q7CisJdTggbGlu a19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV07Cit9OworCitzdGF0aWMgY2hhciAqZHBfbGlu a19nZXRfYXVkaW9fdGVzdF9wYXR0ZXJuKHUzMiBwYXR0ZXJuKQoreworCXN3aXRjaCAocGF0dGVy bikgeworCWNhc2UgQVVESU9fVEVTVF9QQVRURVJOX09QRVJBVE9SX0RFRklORUQ6CisJCXJldHVy biBEUF9MSU5LX0VOVU1fU1RSKEFVRElPX1RFU1RfUEFUVEVSTl9PUEVSQVRPUl9ERUZJTkVEKTsK KwljYXNlIEFVRElPX1RFU1RfUEFUVEVSTl9TQVdUT09USDoKKwkJcmV0dXJuIERQX0xJTktfRU5V TV9TVFIoQVVESU9fVEVTVF9QQVRURVJOX1NBV1RPT1RIKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4g InVua25vd24iOworCX0KK30KKworc3RhdGljIGNoYXIgKmRwX2xpbmtfZ2V0X2F1ZGlvX3NhbXBs ZV9yYXRlKHUzMiByYXRlKQoreworCXN3aXRjaCAocmF0ZSkgeworCWNhc2UgQVVESU9fU0FNUExF X1JBVEVfMzJfS0haOgorCQlyZXR1cm4gRFBfTElOS19FTlVNX1NUUihBVURJT19TQU1QTEVfUkFU RV8zMl9LSFopOworCWNhc2UgQVVESU9fU0FNUExFX1JBVEVfNDRfMV9LSFo6CisJCXJldHVybiBE UF9MSU5LX0VOVU1fU1RSKEFVRElPX1NBTVBMRV9SQVRFXzQ0XzFfS0haKTsKKwljYXNlIEFVRElP X1NBTVBMRV9SQVRFXzQ4X0tIWjoKKwkJcmV0dXJuIERQX0xJTktfRU5VTV9TVFIoQVVESU9fU0FN UExFX1JBVEVfNDhfS0haKTsKKwljYXNlIEFVRElPX1NBTVBMRV9SQVRFXzg4XzJfS0haOgorCQly ZXR1cm4gRFBfTElOS19FTlVNX1NUUihBVURJT19TQU1QTEVfUkFURV84OF8yX0tIWik7CisJY2Fz ZSBBVURJT19TQU1QTEVfUkFURV85Nl9LSFo6CisJCXJldHVybiBEUF9MSU5LX0VOVU1fU1RSKEFV RElPX1NBTVBMRV9SQVRFXzk2X0tIWik7CisJY2FzZSBBVURJT19TQU1QTEVfUkFURV8xNzZfNF9L SFo6CisJCXJldHVybiBEUF9MSU5LX0VOVU1fU1RSKEFVRElPX1NBTVBMRV9SQVRFXzE3Nl80X0tI Wik7CisJY2FzZSBBVURJT19TQU1QTEVfUkFURV8xOTJfS0haOgorCQlyZXR1cm4gRFBfTElOS19F TlVNX1NUUihBVURJT19TQU1QTEVfUkFURV8xOTJfS0haKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4g InVua25vd24iOworCX0KK30KKworc3RhdGljIGludCBkcF9saW5rX2dldF9wZXJpb2Qoc3RydWN0 IGRwX2xpbmtfcHJpdmF0ZSAqbGluaywgaW50IGNvbnN0IGFkZHIpCit7CisJaW50IHJldCA9IDA7 CisJdTggYnA7CisJdTggZGF0YTsKKwl1MzIgY29uc3QgcGFyYW1fbGVuID0gMHgxOworCXUzMiBj b25zdCBtYXhfYXVkaW9fcGVyaW9kID0gMHhBOworCisJLyogVEVTVF9BVURJT19QRVJJT0RfQ0hf WFggKi8KKwlpZiAoZHJtX2RwX2RwY2RfcmVhZChsaW5rLT5hdXgtPmRybV9hdXgsIGFkZHIsICZi cCwKKwkJcGFyYW1fbGVuKSA8IHBhcmFtX2xlbikgeworCQlwcl9lcnIoImZhaWxlZCB0byByZWFk IHRlc3RfYXVkaW9fcGVyaW9kICgweCV4KVxuIiwgYWRkcik7CisJCXJldCA9IC1FSU5WQUw7CisJ CWdvdG8gZXhpdDsKKwl9CisKKwlkYXRhID0gYnA7CisKKwkvKiBQZXJpb2QgLSBCaXRzIDM6MCAq LworCWRhdGEgPSBkYXRhICYgMHhGOworCWlmICgoaW50KWRhdGEgPiBtYXhfYXVkaW9fcGVyaW9k KSB7CisJCXByX2VycigiaW52YWxpZCB0ZXN0X2F1ZGlvX3BlcmlvZF9jaF8xID0gMHgleFxuIiwg ZGF0YSk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlyZXQgPSBkYXRh OworZXhpdDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRwX2xpbmtfcGFyc2VfYXVk aW9fY2hhbm5lbF9wZXJpb2Qoc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGluaykKK3sKKwlpbnQg cmV0ID0gMDsKKwlzdHJ1Y3QgZHBfbGlua190ZXN0X2F1ZGlvICpyZXEgPSAmbGluay0+ZHBfbGlu ay50ZXN0X2F1ZGlvOworCisJcmV0ID0gZHBfbGlua19nZXRfcGVyaW9kKGxpbmssIERQX1RFU1Rf QVVESU9fUEVSSU9EX0NIMSk7CisJaWYgKHJldCA9PSAtRUlOVkFMKQorCQlnb3RvIGV4aXQ7CisK KwlyZXEtPnRlc3RfYXVkaW9fcGVyaW9kX2NoXzEgPSByZXQ7CisJcHJfZGVidWcoInRlc3RfYXVk aW9fcGVyaW9kX2NoXzEgPSAweCV4XG4iLCByZXQpOworCisJcmV0ID0gZHBfbGlua19nZXRfcGVy aW9kKGxpbmssIERQX1RFU1RfQVVESU9fUEVSSU9EX0NIMik7CisJaWYgKHJldCA9PSAtRUlOVkFM KQorCQlnb3RvIGV4aXQ7CisKKwlyZXEtPnRlc3RfYXVkaW9fcGVyaW9kX2NoXzIgPSByZXQ7CisJ cHJfZGVidWcoInRlc3RfYXVkaW9fcGVyaW9kX2NoXzIgPSAweCV4XG4iLCByZXQpOworCisJLyog VEVTVF9BVURJT19QRVJJT0RfQ0hfMyAoQnl0ZSAweDI3NSkgKi8KKwlyZXQgPSBkcF9saW5rX2dl dF9wZXJpb2QobGluaywgRFBfVEVTVF9BVURJT19QRVJJT0RfQ0gzKTsKKwlpZiAocmV0ID09IC1F SU5WQUwpCisJCWdvdG8gZXhpdDsKKworCXJlcS0+dGVzdF9hdWRpb19wZXJpb2RfY2hfMyA9IHJl dDsKKwlwcl9kZWJ1ZygidGVzdF9hdWRpb19wZXJpb2RfY2hfMyA9IDB4JXhcbiIsIHJldCk7CisK KwlyZXQgPSBkcF9saW5rX2dldF9wZXJpb2QobGluaywgRFBfVEVTVF9BVURJT19QRVJJT0RfQ0g0 KTsKKwlpZiAocmV0ID09IC1FSU5WQUwpCisJCWdvdG8gZXhpdDsKKworCXJlcS0+dGVzdF9hdWRp b19wZXJpb2RfY2hfNCA9IHJldDsKKwlwcl9kZWJ1ZygidGVzdF9hdWRpb19wZXJpb2RfY2hfNCA9 IDB4JXhcbiIsIHJldCk7CisKKwlyZXQgPSBkcF9saW5rX2dldF9wZXJpb2QobGluaywgRFBfVEVT VF9BVURJT19QRVJJT0RfQ0g1KTsKKwlpZiAocmV0ID09IC1FSU5WQUwpCisJCWdvdG8gZXhpdDsK KworCXJlcS0+dGVzdF9hdWRpb19wZXJpb2RfY2hfNSA9IHJldDsKKwlwcl9kZWJ1ZygidGVzdF9h dWRpb19wZXJpb2RfY2hfNSA9IDB4JXhcbiIsIHJldCk7CisKKwlyZXQgPSBkcF9saW5rX2dldF9w ZXJpb2QobGluaywgRFBfVEVTVF9BVURJT19QRVJJT0RfQ0g2KTsKKwlpZiAocmV0ID09IC1FSU5W QUwpCisJCWdvdG8gZXhpdDsKKworCXJlcS0+dGVzdF9hdWRpb19wZXJpb2RfY2hfNiA9IHJldDsK Kwlwcl9kZWJ1ZygidGVzdF9hdWRpb19wZXJpb2RfY2hfNiA9IDB4JXhcbiIsIHJldCk7CisKKwly ZXQgPSBkcF9saW5rX2dldF9wZXJpb2QobGluaywgRFBfVEVTVF9BVURJT19QRVJJT0RfQ0g3KTsK KwlpZiAocmV0ID09IC1FSU5WQUwpCisJCWdvdG8gZXhpdDsKKworCXJlcS0+dGVzdF9hdWRpb19w ZXJpb2RfY2hfNyA9IHJldDsKKwlwcl9kZWJ1ZygidGVzdF9hdWRpb19wZXJpb2RfY2hfNyA9IDB4 JXhcbiIsIHJldCk7CisKKwlyZXQgPSBkcF9saW5rX2dldF9wZXJpb2QobGluaywgRFBfVEVTVF9B VURJT19QRVJJT0RfQ0g4KTsKKwlpZiAocmV0ID09IC1FSU5WQUwpCisJCWdvdG8gZXhpdDsKKwor CXJlcS0+dGVzdF9hdWRpb19wZXJpb2RfY2hfOCA9IHJldDsKKwlwcl9kZWJ1ZygidGVzdF9hdWRp b19wZXJpb2RfY2hfOCA9IDB4JXhcbiIsIHJldCk7CitleGl0OgorCXJldHVybiByZXQ7Cit9CisK K3N0YXRpYyBpbnQgZHBfbGlua19wYXJzZV9hdWRpb19wYXR0ZXJuX3R5cGUoc3RydWN0IGRwX2xp bmtfcHJpdmF0ZSAqbGluaykKK3sKKwlpbnQgcmV0ID0gMDsKKwl1OCBicDsKKwl1OCBkYXRhOwor CWludCBybGVuOworCWludCBjb25zdCBwYXJhbV9sZW4gPSAweDE7CisJaW50IGNvbnN0IG1heF9h dWRpb19wYXR0ZXJuX3R5cGUgPSAweDE7CisKKwlybGVuID0gZHJtX2RwX2RwY2RfcmVhZChsaW5r LT5hdXgtPmRybV9hdXgsCisJCURQX1RFU1RfQVVESU9fUEFUVEVSTl9UWVBFLCAmYnAsIHBhcmFt X2xlbik7CisJaWYgKHJsZW4gPCBwYXJhbV9sZW4pIHsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gcmVh ZCBsaW5rIGF1ZGlvIG1vZGUgZGF0YVxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXhp dDsKKwl9CisJZGF0YSA9IGJwOworCisJLyogQXVkaW8gUGF0dGVybiBUeXBlIC0gQml0cyA3OjAg Ki8KKwlpZiAoKGludClkYXRhID4gbWF4X2F1ZGlvX3BhdHRlcm5fdHlwZSkgeworCQlwcl9lcnIo ImludmFsaWQgYXVkaW8gcGF0dGVybiB0eXBlID0gMHgleFxuIiwgZGF0YSk7CisJCXJldCA9IC1F SU5WQUw7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlsaW5rLT5kcF9saW5rLnRlc3RfYXVkaW8udGVz dF9hdWRpb19wYXR0ZXJuX3R5cGUgPSBkYXRhOworCXByX2RlYnVnKCJhdWRpbyBwYXR0ZXJuIHR5 cGUgPSAlc1xuIiwKKwkJCWRwX2xpbmtfZ2V0X2F1ZGlvX3Rlc3RfcGF0dGVybihkYXRhKSk7Citl eGl0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZHBfbGlua19wYXJzZV9hdWRpb19t b2RlKHN0cnVjdCBkcF9saW5rX3ByaXZhdGUgKmxpbmspCit7CisJaW50IHJldCA9IDA7CisJdTgg YnA7CisJdTggZGF0YTsKKwlpbnQgcmxlbjsKKwlpbnQgY29uc3QgcGFyYW1fbGVuID0gMHgxOwor CWludCBjb25zdCBtYXhfYXVkaW9fc2FtcGxpbmdfcmF0ZSA9IDB4NjsKKwlpbnQgY29uc3QgbWF4 X2F1ZGlvX2NoYW5uZWxfY291bnQgPSAweDg7CisJaW50IHNhbXBsaW5nX3JhdGUgPSAweDA7CisJ aW50IGNoYW5uZWxfY291bnQgPSAweDA7CisKKwlybGVuID0gZHJtX2RwX2RwY2RfcmVhZChsaW5r LT5hdXgtPmRybV9hdXgsIERQX1RFU1RfQVVESU9fTU9ERSwKKwkJCSZicCwgcGFyYW1fbGVuKTsK KwlpZiAocmxlbiA8IHBhcmFtX2xlbikgeworCQlwcl9lcnIoImZhaWxlZCB0byByZWFkIGxpbmsg YXVkaW8gbW9kZSBkYXRhXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBleGl0OworCX0K KwlkYXRhID0gYnA7CisKKwkvKiBTYW1wbGluZyBSYXRlIC0gQml0cyAzOjAgKi8KKwlzYW1wbGlu Z19yYXRlID0gZGF0YSAmIDB4RjsKKwlpZiAoc2FtcGxpbmdfcmF0ZSA+IG1heF9hdWRpb19zYW1w bGluZ19yYXRlKSB7CisJCXByX2Vycigic2FtcGxpbmcgcmF0ZSAoMHgleCkgZ3JlYXRlciB0aGFu IG1heCAoMHgleClcbiIsCisJCQkJc2FtcGxpbmdfcmF0ZSwgbWF4X2F1ZGlvX3NhbXBsaW5nX3Jh dGUpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogQ2hhbm5lbCBD b3VudCAtIEJpdHMgNzo0ICovCisJY2hhbm5lbF9jb3VudCA9ICgoZGF0YSAmIDB4RjApID4+IDQp ICsgMTsKKwlpZiAoY2hhbm5lbF9jb3VudCA+IG1heF9hdWRpb19jaGFubmVsX2NvdW50KSB7CisJ CXByX2VycigiY2hhbm5lbF9jb3VudCAoMHgleCkgZ3JlYXRlciB0aGFuIG1heCAoMHgleClcbiIs CisJCQkJY2hhbm5lbF9jb3VudCwgbWF4X2F1ZGlvX2NoYW5uZWxfY291bnQpOworCQlyZXQgPSAt RUlOVkFMOworCQlnb3RvIGV4aXQ7CisJfQorCisJbGluay0+ZHBfbGluay50ZXN0X2F1ZGlvLnRl c3RfYXVkaW9fc2FtcGxpbmdfcmF0ZSA9IHNhbXBsaW5nX3JhdGU7CisJbGluay0+ZHBfbGluay50 ZXN0X2F1ZGlvLnRlc3RfYXVkaW9fY2hhbm5lbF9jb3VudCA9IGNoYW5uZWxfY291bnQ7CisJcHJf ZGVidWcoInNhbXBsaW5nX3JhdGUgPSAlcywgY2hhbm5lbF9jb3VudCA9IDB4JXhcbiIsCisJCWRw X2xpbmtfZ2V0X2F1ZGlvX3NhbXBsZV9yYXRlKHNhbXBsaW5nX3JhdGUpLCBjaGFubmVsX2NvdW50 KTsKK2V4aXQ6CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBkcF9wYXJzZV9hdWRpb19wYXR0 ZXJuX3BhcmFtcygpIC0gcGFyc2VzIGF1ZGlvIHBhdHRlcm4gcGFyYW1ldGVycyBmcm9tIERQQ0QK KyAqIEBsaW5rOiBEaXNwbGF5IFBvcnQgRHJpdmVyIGRhdGEKKyAqCisgKiBSZXR1cm5zIDAgaWYg aXQgc3VjY2Vzc2Z1bGx5IHBhcnNlcyB0aGUgYXVkaW8gbGluayBwYXR0ZXJuIHBhcmFtZXRlcnMu CisgKi8KK3N0YXRpYyBpbnQgZHBfbGlua19wYXJzZV9hdWRpb19wYXR0ZXJuX3BhcmFtcyhzdHJ1 Y3QgZHBfbGlua19wcml2YXRlICpsaW5rKQoreworCWludCByZXQgPSAwOworCisJcmV0ID0gZHBf bGlua19wYXJzZV9hdWRpb19tb2RlKGxpbmspOworCWlmIChyZXQpCisJCWdvdG8gZXhpdDsKKwor CXJldCA9IGRwX2xpbmtfcGFyc2VfYXVkaW9fcGF0dGVybl90eXBlKGxpbmspOworCWlmIChyZXQp CisJCWdvdG8gZXhpdDsKKworCXJldCA9IGRwX2xpbmtfcGFyc2VfYXVkaW9fY2hhbm5lbF9wZXJp b2QobGluayk7CisKK2V4aXQ6CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBkcF9saW5rX2lz X3ZpZGVvX3BhdHRlcm5fdmFsaWQoKSAtIHZhbGlkYXRlcyB0aGUgdmlkZW8gcGF0dGVybgorICog QHBhdHRlcm46IHZpZGVvIHBhdHRlcm4gcmVxdWVzdGVkIGJ5IHRoZSBzaW5rCisgKgorICogUmV0 dXJucyB0cnVlIGlmIHRoZSByZXF1ZXN0ZWQgdmlkZW8gcGF0dGVybiBpcyBzdXBwb3J0ZWQuCisg Ki8KK3N0YXRpYyBib29sIGRwX2xpbmtfaXNfdmlkZW9fcGF0dGVybl92YWxpZCh1MzIgcGF0dGVy bikKK3sKKwlzd2l0Y2ggKHBhdHRlcm4pIHsKKwljYXNlIERQX05PX1RFU1RfUEFUVEVSTjoKKwlj YXNlIERQX0NPTE9SX1JBTVA6CisJY2FzZSBEUF9CTEFDS19BTkRfV0hJVEVfVkVSVElDQUxfTElO RVM6CisJY2FzZSBEUF9DT0xPUl9TUVVBUkU6CisJCXJldHVybiB0cnVlOworCWRlZmF1bHQ6CisJ CXJldHVybiBmYWxzZTsKKwl9Cit9CisKK3N0YXRpYyBjaGFyICpkcF9saW5rX3ZpZGVvX3BhdHRl cm5fdG9fc3RyaW5nKHUzMiB0ZXN0X3ZpZGVvX3BhdHRlcm4pCit7CisJc3dpdGNoICh0ZXN0X3Zp ZGVvX3BhdHRlcm4pIHsKKwljYXNlIERQX05PX1RFU1RfUEFUVEVSTjoKKwkJcmV0dXJuIERQX0xJ TktfRU5VTV9TVFIoRFBfTk9fVEVTVF9QQVRURVJOKTsKKwljYXNlIERQX0NPTE9SX1JBTVA6CisJ CXJldHVybiBEUF9MSU5LX0VOVU1fU1RSKERQX0NPTE9SX1JBTVApOworCWNhc2UgRFBfQkxBQ0tf QU5EX1dISVRFX1ZFUlRJQ0FMX0xJTkVTOgorCQlyZXR1cm4gRFBfTElOS19FTlVNX1NUUihEUF9C TEFDS19BTkRfV0hJVEVfVkVSVElDQUxfTElORVMpOworCWNhc2UgRFBfQ09MT1JfU1FVQVJFOgor CQlyZXR1cm4gRFBfTElOS19FTlVNX1NUUihEUF9DT0xPUl9TUVVBUkUpOworCWRlZmF1bHQ6CisJ CXJldHVybiAidW5rbm93biI7CisJfQorfQorCisvKioKKyAqIGRwX2xpbmtfaXNfZHluYW1pY19y YW5nZV92YWxpZCgpIC0gdmFsaWRhdGVzIHRoZSBkeW5hbWljIHJhbmdlCisgKiBAYml0X2RlcHRo OiB0aGUgZHluYW1pYyByYW5nZSB2YWx1ZSB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyB0 cnVlIGlmIHRoZSBkeW5hbWljIHJhbmdlIHZhbHVlIGlzIHN1cHBvcnRlZC4KKyAqLworc3RhdGlj IGJvb2wgZHBfbGlua19pc19keW5hbWljX3JhbmdlX3ZhbGlkKHUzMiBkcikKK3sKKwlzd2l0Y2gg KGRyKSB7CisJY2FzZSBEUF9EWU5BTUlDX1JBTkdFX1JHQl9WRVNBOgorCWNhc2UgRFBfRFlOQU1J Q19SQU5HRV9SR0JfQ0VBOgorCQlyZXR1cm4gdHJ1ZTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gZmFs c2U7CisJfQorfQorCitzdGF0aWMgY2hhciAqZHBfbGlua19keW5hbWljX3JhbmdlX3RvX3N0cmlu Zyh1MzIgZHIpCit7CisJc3dpdGNoIChkcikgeworCWNhc2UgRFBfRFlOQU1JQ19SQU5HRV9SR0Jf VkVTQToKKwkJcmV0dXJuIERQX0xJTktfRU5VTV9TVFIoRFBfRFlOQU1JQ19SQU5HRV9SR0JfVkVT QSk7CisJY2FzZSBEUF9EWU5BTUlDX1JBTkdFX1JHQl9DRUE6CisJCXJldHVybiBEUF9MSU5LX0VO VU1fU1RSKERQX0RZTkFNSUNfUkFOR0VfUkdCX0NFQSk7CisJY2FzZSBEUF9EWU5BTUlDX1JBTkdF X1VOS05PV046CisJZGVmYXVsdDoKKwkJcmV0dXJuICJ1bmtub3duIjsKKwl9Cit9CisKKy8qKgor ICogZHBfbGlua19pc19iaXRfZGVwdGhfdmFsaWQoKSAtIHZhbGlkYXRlcyB0aGUgYml0IGRlcHRo IHJlcXVlc3RlZAorICogQGJpdF9kZXB0aDogYml0IGRlcHRoIHJlcXVlc3RlZCBieSB0aGUgc2lu aworICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVxdWVzdGVkIGJpdCBkZXB0aCBpcyBzdXBw b3J0ZWQuCisgKi8KK3N0YXRpYyBib29sIGRwX2xpbmtfaXNfYml0X2RlcHRoX3ZhbGlkKHUzMiB0 YmQpCit7CisJLyogRFBfVEVTVF9WSURFT19QQVRURVJOX05PTkUgaXMgdHJlYXRlZCBhcyBpbnZh bGlkICovCisJc3dpdGNoICh0YmQpIHsKKwljYXNlIERQX1RFU1RfQklUX0RFUFRIXzY6CisJY2Fz ZSBEUF9URVNUX0JJVF9ERVBUSF84OgorCWNhc2UgRFBfVEVTVF9CSVRfREVQVEhfMTA6CisJCXJl dHVybiB0cnVlOworCWRlZmF1bHQ6CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CisKK3N0YXRpYyBj aGFyICpkcF9saW5rX2JpdF9kZXB0aF90b19zdHJpbmcodTMyIHRiZCkKK3sKKwlzd2l0Y2ggKHRi ZCkgeworCWNhc2UgRFBfVEVTVF9CSVRfREVQVEhfNjoKKwkJcmV0dXJuIERQX0xJTktfRU5VTV9T VFIoRFBfVEVTVF9CSVRfREVQVEhfNik7CisJY2FzZSBEUF9URVNUX0JJVF9ERVBUSF84OgorCQly ZXR1cm4gRFBfTElOS19FTlVNX1NUUihEUF9URVNUX0JJVF9ERVBUSF84KTsKKwljYXNlIERQX1RF U1RfQklUX0RFUFRIXzEwOgorCQlyZXR1cm4gRFBfTElOS19FTlVNX1NUUihEUF9URVNUX0JJVF9E RVBUSF8xMCk7CisJY2FzZSBEUF9URVNUX0JJVF9ERVBUSF9VTktOT1dOOgorCWRlZmF1bHQ6CisJ CXJldHVybiAidW5rbm93biI7CisJfQorfQorCitzdGF0aWMgaW50IGRwX2xpbmtfcGFyc2VfdGlt aW5nX3BhcmFtczEoc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGluaywKKwkJCQkJaW50IGNvbnN0 IGFkZHIsIGludCBjb25zdCBsZW4sIHUzMiAqdmFsKQoreworCXU4IGJwWzJdOworCWludCBybGVu OworCisJaWYgKGxlbiA8IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogUmVhZCB0aGUgcmVx dWVzdGVkIHZpZGVvIGxpbmsgcGF0dGVybiAoQnl0ZSAweDIyMSkuICovCisJcmxlbiA9IGRybV9k cF9kcGNkX3JlYWQobGluay0+YXV4LT5kcm1fYXV4LCBhZGRyLCBicCwgbGVuKTsKKwlpZiAocmxl biA8IGxlbikgeworCQlwcl9lcnIoImZhaWxlZCB0byByZWFkIDB4JXhcbiIsIGFkZHIpOworCQly ZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkqdmFsID0gYnBbMV0gfCAoYnBbMF0gPDwgOCk7CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkcF9saW5rX3BhcnNlX3RpbWluZ19wYXJhbXMyKHN0 cnVjdCBkcF9saW5rX3ByaXZhdGUgKmxpbmssCisJCQkJCWludCBjb25zdCBhZGRyLCBpbnQgY29u c3QgbGVuLAorCQkJCQl1MzIgKnZhbDEsIHUzMiAqdmFsMikKK3sKKwl1OCBicFsyXTsKKwlpbnQg cmxlbjsKKworCWlmIChsZW4gPCAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIFJlYWQgdGhl IHJlcXVlc3RlZCB2aWRlbyBsaW5rIHBhdHRlcm4gKEJ5dGUgMHgyMjEpLiAqLworCXJsZW4gPSBk cm1fZHBfZHBjZF9yZWFkKGxpbmstPmF1eC0+ZHJtX2F1eCwgYWRkciwgYnAsIGxlbik7CisJaWYg KHJsZW4gPCBsZW4pIHsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gcmVhZCAweCV4XG4iLCBhZGRyKTsK KwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJKnZhbDEgPSAoYnBbMF0gJiBCSVQoNykpID4+IDc7 CisJKnZhbDIgPSBicFsxXSB8ICgoYnBbMF0gJiAweDdGKSA8PCA4KTsKKworCXJldHVybiAwOwor fQorCitzdGF0aWMgaW50IGRwX2xpbmtfcGFyc2VfdGltaW5nX3BhcmFtczMoc3RydWN0IGRwX2xp bmtfcHJpdmF0ZSAqbGluaywKKwkJCQkJaW50IGNvbnN0IGFkZHIsIHUzMiAqdmFsKQoreworCXU4 IGJwOworCXUzMiBsZW4gPSAxOworCWludCBybGVuOworCisJcmxlbiA9IGRybV9kcF9kcGNkX3Jl YWQobGluay0+YXV4LT5kcm1fYXV4LCBhZGRyLCAmYnAsIGxlbik7CisJaWYgKHJsZW4gPCAxKSB7 CisJCXByX2VycigiZmFpbGVkIHRvIHJlYWQgMHgleFxuIiwgYWRkcik7CisJCXJldHVybiAtRUlO VkFMOworCX0KKwkqdmFsID0gYnA7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBkcF9wYXJz ZV92aWRlb19wYXR0ZXJuX3BhcmFtcygpIC0gcGFyc2VzIHZpZGVvIHBhdHRlcm4gcGFyYW1ldGVy cyBmcm9tIERQQ0QKKyAqIEBsaW5rOiBEaXNwbGF5IFBvcnQgRHJpdmVyIGRhdGEKKyAqCisgKiBS ZXR1cm5zIDAgaWYgaXQgc3VjY2Vzc2Z1bGx5IHBhcnNlcyB0aGUgdmlkZW8gbGluayBwYXR0ZXJu IGFuZCB0aGUgbGluaworICogYml0IGRlcHRoIHJlcXVlc3RlZCBieSB0aGUgc2luayBhbmQsIGFu ZCBpZiB0aGUgdmFsdWVzIHBhcnNlZCBhcmUgdmFsaWQuCisgKi8KK3N0YXRpYyBpbnQgZHBfbGlu a19wYXJzZV92aWRlb19wYXR0ZXJuX3BhcmFtcyhzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5r KQoreworCWludCByZXQgPSAwOworCWludCBybGVuOworCXU4IGJwOworCXU4IGRhdGE7CisJdTMy IGR5bl9yYW5nZTsKKwlpbnQgY29uc3QgcGFyYW1fbGVuID0gMHgxOworCisJcmxlbiA9IGRybV9k cF9kcGNkX3JlYWQobGluay0+YXV4LT5kcm1fYXV4LCBEUF9URVNUX1BBVFRFUk4sCisJCQkmYnAs IHBhcmFtX2xlbik7CisJaWYgKHJsZW4gPCBwYXJhbV9sZW4pIHsKKwkJcHJfZXJyKCJmYWlsZWQg dG8gcmVhZCBsaW5rIHZpZGVvIHBhdHRlcm5cbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3Rv IGV4aXQ7CisJfQorCWRhdGEgPSBicDsKKworCWlmICghZHBfbGlua19pc192aWRlb19wYXR0ZXJu X3ZhbGlkKGRhdGEpKSB7CisJCXByX2VycigiaW52YWxpZCBsaW5rIHZpZGVvIHBhdHRlcm4gPSAw eCV4XG4iLCBkYXRhKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBleGl0OworCX0KKworCWxp bmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X3ZpZGVvX3BhdHRlcm4gPSBkYXRhOworCXByX2Rl YnVnKCJsaW5rIHZpZGVvIHBhdHRlcm4gPSAweCV4ICglcylcbiIsCisJCWxpbmstPmRwX2xpbmsu dGVzdF92aWRlby50ZXN0X3ZpZGVvX3BhdHRlcm4sCisJCWRwX2xpbmtfdmlkZW9fcGF0dGVybl90 b19zdHJpbmcoCisJCQlsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF92aWRlb19wYXR0ZXJu KSk7CisKKwkvKiBSZWFkIHRoZSByZXF1ZXN0ZWQgY29sb3IgYml0IGRlcHRoIGFuZCBkeW5hbWlj IHJhbmdlIChCeXRlIDB4MjMyKSAqLworCXJsZW4gPSBkcm1fZHBfZHBjZF9yZWFkKGxpbmstPmF1 eC0+ZHJtX2F1eCwgRFBfVEVTVF9NSVNDMCwKKwkJCSZicCwgcGFyYW1fbGVuKTsKKwlpZiAocmxl biA8IHBhcmFtX2xlbikgeworCQlwcl9lcnIoImZhaWxlZCB0byByZWFkIGxpbmsgYml0IGRlcHRo XG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBleGl0OworCX0KKwlkYXRhID0gYnA7CisK KwkvKiBEeW5hbWljIFJhbmdlICovCisJZHluX3JhbmdlID0gKGRhdGEgJiBEUF9URVNUX0RZTkFN SUNfUkFOR0VfQ0VBKSA+PiAzOworCWlmICghZHBfbGlua19pc19keW5hbWljX3JhbmdlX3ZhbGlk KGR5bl9yYW5nZSkpIHsKKwkJcHJfZXJyKCJpbnZhbGlkIGxpbmsgZHluYW1pYyByYW5nZSA9IDB4 JXgiLCBkeW5fcmFuZ2UpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGV4aXQ7CisJfQorCWxp bmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X2R5bl9yYW5nZSA9IGR5bl9yYW5nZTsKKwlwcl9k ZWJ1ZygibGluayBkeW5hbWljIHJhbmdlID0gMHgleCAoJXMpXG4iLAorCQlsaW5rLT5kcF9saW5r LnRlc3RfdmlkZW8udGVzdF9keW5fcmFuZ2UsCisJCWRwX2xpbmtfZHluYW1pY19yYW5nZV90b19z dHJpbmcoCisJCQlsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF9keW5fcmFuZ2UpKTsKKwor CS8qIENvbG9yIGJpdCBkZXB0aCAqLworCWRhdGEgJj0gRFBfVEVTVF9CSVRfREVQVEhfTUFTSzsK KwlpZiAoIWRwX2xpbmtfaXNfYml0X2RlcHRoX3ZhbGlkKGRhdGEpKSB7CisJCXByX2VycigiaW52 YWxpZCBsaW5rIGJpdCBkZXB0aCA9IDB4JXhcbiIsIGRhdGEpOworCQlyZXQgPSAtRUlOVkFMOwor CQlnb3RvIGV4aXQ7CisJfQorCisJbGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3RfYml0X2Rl cHRoID0gZGF0YTsKKwlwcl9kZWJ1ZygibGluayBiaXQgZGVwdGggPSAweCV4ICglcylcbiIsCisJ CWxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X2JpdF9kZXB0aCwKKwkJZHBfbGlua19iaXRf ZGVwdGhfdG9fc3RyaW5nKAorCQlsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF9iaXRfZGVw dGgpKTsKKworCS8qIHJlc29sdXRpb24gdGltaW5nIHBhcmFtcyAqLworCXJldCA9IGRwX2xpbmtf cGFyc2VfdGltaW5nX3BhcmFtczEobGluaywgRFBfVEVTVF9IX1RPVEFMX0hJLCAyLAorCQkJJmxp bmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X2hfdG90YWwpOworCWlmIChyZXQpIHsKKwkJcHJf ZXJyKCJmYWlsZWQgdG8gcGFyc2UgdGVzdF9oX3RvdGFsIChEUF9URVNUX0hfVE9UQUxfSEkpXG4i KTsKKwkJZ290byBleGl0OworCX0KKwlwcl9kZWJ1ZygiVEVTVF9IX1RPVEFMID0gJWRcbiIsIGxp bmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X2hfdG90YWwpOworCisJcmV0ID0gZHBfbGlua19w YXJzZV90aW1pbmdfcGFyYW1zMShsaW5rLCBEUF9URVNUX1ZfVE9UQUxfSEksIDIsCisJCQkmbGlu ay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3Rfdl90b3RhbCk7CisJaWYgKHJldCkgeworCQlwcl9l cnIoImZhaWxlZCB0byBwYXJzZSB0ZXN0X3ZfdG90YWwgKERQX1RFU1RfVl9UT1RBTF9ISSlcbiIp OworCQlnb3RvIGV4aXQ7CisJfQorCXByX2RlYnVnKCJURVNUX1ZfVE9UQUwgPSAlZFxuIiwgbGlu ay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3Rfdl90b3RhbCk7CisKKwlyZXQgPSBkcF9saW5rX3Bh cnNlX3RpbWluZ19wYXJhbXMxKGxpbmssIERQX1RFU1RfSF9TVEFSVF9ISSwgMiwKKwkJCSZsaW5r LT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF9oX3N0YXJ0KTsKKwlpZiAocmV0KSB7CisJCXByX2Vy cigiZmFpbGVkIHRvIHBhcnNlIHRlc3RfaF9zdGFydCAoRFBfVEVTVF9IX1NUQVJUX0hJKVxuIik7 CisJCWdvdG8gZXhpdDsKKwl9CisJcHJfZGVidWcoIlRFU1RfSF9TVEFSVCA9ICVkXG4iLCBsaW5r LT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF9oX3N0YXJ0KTsKKworCXJldCA9IGRwX2xpbmtfcGFy c2VfdGltaW5nX3BhcmFtczEobGluaywgRFBfVEVTVF9WX1NUQVJUX0hJLCAyLAorCQkJJmxpbmst PmRwX2xpbmsudGVzdF92aWRlby50ZXN0X3Zfc3RhcnQpOworCWlmIChyZXQpIHsKKwkJcHJfZXJy KCJmYWlsZWQgdG8gcGFyc2UgdGVzdF92X3N0YXJ0IChEUF9URVNUX1ZfU1RBUlRfSEkpXG4iKTsK KwkJZ290byBleGl0OworCX0KKwlwcl9kZWJ1ZygiVEVTVF9WX1NUQVJUID0gJWRcbiIsIGxpbmst PmRwX2xpbmsudGVzdF92aWRlby50ZXN0X3Zfc3RhcnQpOworCisJcmV0ID0gZHBfbGlua19wYXJz ZV90aW1pbmdfcGFyYW1zMihsaW5rLCBEUF9URVNUX0hTWU5DX0hJLCAyLAorCQkJJmxpbmstPmRw X2xpbmsudGVzdF92aWRlby50ZXN0X2hzeW5jX3BvbCwKKwkJCSZsaW5rLT5kcF9saW5rLnRlc3Rf dmlkZW8udGVzdF9oc3luY193aWR0aCk7CisJaWYgKHJldCkgeworCQlwcl9lcnIoImZhaWxlZCB0 byBwYXJzZSAoRFBfVEVTVF9IU1lOQ19ISSlcbiIpOworCQlnb3RvIGV4aXQ7CisJfQorCXByX2Rl YnVnKCJURVNUX0hTWU5DX1BPTCA9ICVkXG4iLAorCQlsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8u dGVzdF9oc3luY19wb2wpOworCXByX2RlYnVnKCJURVNUX0hTWU5DX1dJRFRIID0gJWRcbiIsCisJ CWxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X2hzeW5jX3dpZHRoKTsKKworCXJldCA9IGRw X2xpbmtfcGFyc2VfdGltaW5nX3BhcmFtczIobGluaywgRFBfVEVTVF9WU1lOQ19ISSwgMiwKKwkJ CSZsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF92c3luY19wb2wsCisJCQkmbGluay0+ZHBf bGluay50ZXN0X3ZpZGVvLnRlc3RfdnN5bmNfd2lkdGgpOworCWlmIChyZXQpIHsKKwkJcHJfZXJy KCJmYWlsZWQgdG8gcGFyc2UgKERQX1RFU1RfVlNZTkNfSEkpXG4iKTsKKwkJZ290byBleGl0Owor CX0KKwlwcl9kZWJ1ZygiVEVTVF9WU1lOQ19QT0wgPSAlZFxuIiwKKwkJbGluay0+ZHBfbGluay50 ZXN0X3ZpZGVvLnRlc3RfdnN5bmNfcG9sKTsKKwlwcl9kZWJ1ZygiVEVTVF9WU1lOQ19XSURUSCA9 ICVkXG4iLAorCQlsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF92c3luY193aWR0aCk7CisK KwlyZXQgPSBkcF9saW5rX3BhcnNlX3RpbWluZ19wYXJhbXMxKGxpbmssIERQX1RFU1RfSF9XSURU SF9ISSwgMiwKKwkJCSZsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF9oX3dpZHRoKTsKKwlp ZiAocmV0KSB7CisJCXByX2VycigiZmFpbGVkIHRvIHBhcnNlIHRlc3RfaF93aWR0aCAoRFBfVEVT VF9IX1dJRFRIX0hJKVxuIik7CisJCWdvdG8gZXhpdDsKKwl9CisJcHJfZGVidWcoIlRFU1RfSF9X SURUSCA9ICVkXG4iLCBsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF9oX3dpZHRoKTsKKwor CXJldCA9IGRwX2xpbmtfcGFyc2VfdGltaW5nX3BhcmFtczEobGluaywgRFBfVEVTVF9WX0hFSUdI VF9ISSwgMiwKKwkJCSZsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF92X2hlaWdodCk7CisJ aWYgKHJldCkgeworCQlwcl9lcnIoImZhaWxlZCB0byBwYXJzZSB0ZXN0X3ZfaGVpZ2h0IChEUF9U RVNUX1ZfSEVJR0hUX0hJKVxuIik7CisJCWdvdG8gZXhpdDsKKwl9CisJcHJfZGVidWcoIlRFU1Rf Vl9IRUlHSFQgPSAlZFxuIiwKKwkJbGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3Rfdl9oZWln aHQpOworCisJcmV0ID0gZHBfbGlua19wYXJzZV90aW1pbmdfcGFyYW1zMyhsaW5rLCBEUF9URVNU X01JU0MxLAorCQkmbGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3RfcnJfZCk7CisJbGluay0+ ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3RfcnJfZCAmPSBEUF9URVNUX1JFRlJFU0hfREVOT01JTkFU T1I7CisJaWYgKHJldCkgeworCQlwcl9lcnIoImZhaWxlZCB0byBwYXJzZSB0ZXN0X3JyX2QgKERQ X1RFU1RfTUlTQzEpXG4iKTsKKwkJZ290byBleGl0OworCX0KKwlwcl9kZWJ1ZygiVEVTVF9SRUZS RVNIX0RFTk9NSU5BVE9SID0gJWRcbiIsCisJCWxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0 X3JyX2QpOworCisJcmV0ID0gZHBfbGlua19wYXJzZV90aW1pbmdfcGFyYW1zMyhsaW5rLCBEUF9U RVNUX1JFRlJFU0hfUkFURV9OVU1FUkFUT1IsCisJCSZsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8u dGVzdF9ycl9uKTsKKwlpZiAocmV0KSB7CisJCXByX2VycigiZmFpbGVkIHRvIHBhcnNlIHRlc3Rf cnJfbiAoRFBfVEVTVF9SRUZSRVNIX1JBVEVfTlVNRVJBVE9SKVxuIik7CisJCWdvdG8gZXhpdDsK Kwl9CisJcHJfZGVidWcoIlRFU1RfUkVGUkVTSF9OVU1FUkFUT1IgPSAlZFxuIiwKKwkJbGluay0+ ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3RfcnJfbik7CitleGl0OgorCXJldHVybiByZXQ7Cit9CisK Ky8qKgorICogZHBfbGlua19wYXJzZV9saW5rX3RyYWluaW5nX3BhcmFtcygpIC0gcGFyc2VzIGxp bmsgdHJhaW5pbmcgcGFyYW1ldGVycyBmcm9tCisgKiBEUENECisgKiBAbGluazogRGlzcGxheSBQ b3J0IERyaXZlciBkYXRhCisgKgorICogUmV0dXJucyAwIGlmIGl0IHN1Y2Nlc3NmdWxseSBwYXJz ZXMgdGhlIGxpbmsgcmF0ZSAoQnl0ZSAweDIxOSkgYW5kIGxhbmUKKyAqIGNvdW50IChCeXRlIDB4 MjIwKSwgYW5kIGlmIHRoZXNlIHZhbHVlcyBwYXJzZSBhcmUgdmFsaWQuCisgKi8KK3N0YXRpYyBp bnQgZHBfbGlua19wYXJzZV9saW5rX3RyYWluaW5nX3BhcmFtcyhzdHJ1Y3QgZHBfbGlua19wcml2 YXRlICpsaW5rKQoreworCXU4IGJwOworCXU4IGRhdGE7CisJaW50IHJldCA9IDA7CisJaW50IHJs ZW47CisJaW50IGNvbnN0IHBhcmFtX2xlbiA9IDB4MTsKKworCXJsZW4gPSBkcm1fZHBfZHBjZF9y ZWFkKGxpbmstPmF1eC0+ZHJtX2F1eCwgRFBfVEVTVF9MSU5LX1JBVEUsCisJCQkmYnAsIHBhcmFt X2xlbik7CisJaWYgKHJsZW4gPCBwYXJhbV9sZW4pIHsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gcmVh ZCBsaW5rIHJhdGVcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGV4aXQ7CisJfQorCWRh dGEgPSBicDsKKworCWlmICghaXNfbGlua19yYXRlX3ZhbGlkKGRhdGEpKSB7CisJCXByX2Vycigi aW52YWxpZCBsaW5rIHJhdGUgPSAweCV4XG4iLCBkYXRhKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJ Z290byBleGl0OworCX0KKworCWxpbmstPnJlcXVlc3QudGVzdF9saW5rX3JhdGUgPSBkYXRhOwor CXByX2RlYnVnKCJsaW5rIHJhdGUgPSAweCV4XG4iLCBsaW5rLT5yZXF1ZXN0LnRlc3RfbGlua19y YXRlKTsKKworCXJsZW4gPSBkcm1fZHBfZHBjZF9yZWFkKGxpbmstPmF1eC0+ZHJtX2F1eCwgRFBf VEVTVF9MQU5FX0NPVU5ULAorCQkJJmJwLCBwYXJhbV9sZW4pOworCWlmIChybGVuIDwgcGFyYW1f bGVuKSB7CisJCXByX2VycigiZmFpbGVkIHRvIHJlYWQgbGFuZSBjb3VudFxuIik7CisJCXJldCA9 IC1FSU5WQUw7CisJCWdvdG8gZXhpdDsKKwl9CisJZGF0YSA9IGJwOworCWRhdGEgJj0gMHgxRjsK KworCWlmICghaXNfbGFuZV9jb3VudF92YWxpZChkYXRhKSkgeworCQlwcl9lcnIoImludmFsaWQg bGFuZSBjb3VudCA9IDB4JXhcbiIsIGRhdGEpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGV4 aXQ7CisJfQorCisJbGluay0+cmVxdWVzdC50ZXN0X2xhbmVfY291bnQgPSBkYXRhOworCXByX2Rl YnVnKCJsYW5lIGNvdW50ID0gMHgleFxuIiwgbGluay0+cmVxdWVzdC50ZXN0X2xhbmVfY291bnQp OworZXhpdDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgYm9vbCBkcF9saW5rX2lzX3BoeV90 ZXN0X3BhdHRlcm5fc3VwcG9ydGVkKHUzMiBwaHlfdGVzdF9wYXR0ZXJuX3NlbCkKK3sKKwlzd2l0 Y2ggKHBoeV90ZXN0X3BhdHRlcm5fc2VsKSB7CisJY2FzZSBEUF9URVNUX1BIWV9QQVRURVJOX05P TkU6CisJY2FzZSBEUF9URVNUX1BIWV9QQVRURVJOX0QxMF8yX05PX1NDUkFNQkxJTkc6CisJY2Fz ZSBEUF9URVNUX1BIWV9QQVRURVJOX1NZTUJPTF9FUlJfTUVBU1VSRU1FTlRfQ05UOgorCWNhc2Ug RFBfVEVTVF9QSFlfUEFUVEVSTl9QUkJTNzoKKwljYXNlIERQX1RFU1RfUEhZX1BBVFRFUk5fODBf QklUX0NVU1RPTV9QQVRURVJOOgorCWNhc2UgRFBfVEVTVF9QSFlfUEFUVEVSTl9IQlIyX0NUU19F WUVfUEFUVEVSTjoKKwkJcmV0dXJuIHRydWU7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZhbHNlOwor CX0KK30KKworLyoqCisgKiBkcF9wYXJzZV9waHlfdGVzdF9wYXJhbXMoKSAtIHBhcnNlcyB0aGUg cGh5IGxpbmsgcGFyYW1ldGVycworICogQGxpbms6IERpc3BsYXkgUG9ydCBEcml2ZXIgZGF0YQor ICoKKyAqIFBhcnNlcyB0aGUgRFBDRCAoQnl0ZSAweDI0OCkgZm9yIHRoZSBEUCBQSFkgbGluayBw YXR0ZXJuIHRoYXQgaXMgYmVpbmcKKyAqIHJlcXVlc3RlZC4KKyAqLworc3RhdGljIGludCBkcF9s aW5rX3BhcnNlX3BoeV90ZXN0X3BhcmFtcyhzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5rKQor eworCXU4IGJwOworCXU4IGRhdGE7CisJaW50IHJsZW47CisJaW50IGNvbnN0IHBhcmFtX2xlbiA9 IDB4MTsKKwlpbnQgcmV0ID0gMDsKKworCXJsZW4gPSBkcm1fZHBfZHBjZF9yZWFkKGxpbmstPmF1 eC0+ZHJtX2F1eCwgRFBfVEVTVF9QSFlfUEFUVEVSTiwKKwkJCSZicCwgcGFyYW1fbGVuKTsKKwlp ZiAocmxlbiA8IHBhcmFtX2xlbikgeworCQlwcl9lcnIoImZhaWxlZCB0byByZWFkIHBoeSBsaW5r IHBhdHRlcm5cbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVuZDsKKwl9CisKKwlkYXRh ID0gYnA7CisKKwlsaW5rLT5kcF9saW5rLnBoeV9wYXJhbXMucGh5X3Rlc3RfcGF0dGVybl9zZWwg PSBkYXRhOworCisJcHJfZGVidWcoInBoeV90ZXN0X3BhdHRlcm5fc2VsID0gJXNcbiIsCisJCQlk cF9saW5rX2dldF9waHlfdGVzdF9wYXR0ZXJuKGRhdGEpKTsKKworCWlmICghZHBfbGlua19pc19w aHlfdGVzdF9wYXR0ZXJuX3N1cHBvcnRlZChkYXRhKSkKKwkJcmV0ID0gLUVJTlZBTDsKK2VuZDoK KwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY2hhciAqZHBfbGlua19nZXRfdGVzdF9uYW1lKHUz MiB0ZXN0X3JlcXVlc3RlZCkKK3sKKwlzd2l0Y2ggKHRlc3RfcmVxdWVzdGVkKSB7CisJY2FzZSBE UF9URVNUX0xJTktfVFJBSU5JTkc6CisJCXJldHVybiBEUF9MSU5LX0VOVU1fU1RSKERQX1RFU1Rf TElOS19UUkFJTklORyk7CisJY2FzZSBEUF9URVNUX0xJTktfVklERU9fUEFUVEVSTjoKKwkJcmV0 dXJuIERQX0xJTktfRU5VTV9TVFIoRFBfVEVTVF9MSU5LX1ZJREVPX1BBVFRFUk4pOworCWNhc2Ug RFBfVEVTVF9MSU5LX0VESURfUkVBRDoKKwkJcmV0dXJuIERQX0xJTktfRU5VTV9TVFIoRFBfVEVT VF9MSU5LX0VESURfUkVBRCk7CisJY2FzZSBEUF9URVNUX0xJTktfUEhZX1RFU1RfUEFUVEVSTjoK KwkJcmV0dXJuIERQX0xJTktfRU5VTV9TVFIoRFBfVEVTVF9MSU5LX1BIWV9URVNUX1BBVFRFUk4p OworCWNhc2UgRFBfVEVTVF9MSU5LX0FVRElPX1BBVFRFUk46CisJCXJldHVybiBEUF9MSU5LX0VO VU1fU1RSKERQX1RFU1RfTElOS19BVURJT19QQVRURVJOKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4g InVua25vd24iOworCX0KK30KKworLyoqCisgKiBkcF9saW5rX2lzX3ZpZGVvX2F1ZGlvX3Rlc3Rf cmVxdWVzdGVkKCkgLSBjaGVja3MgZm9yIGF1ZGlvL3ZpZGVvIGxpbmsgcmVxdWVzdAorICogQGxp bms6IGxpbmsgcmVxdWVzdGVkIGJ5IHRoZSBzaW5rCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRo ZSByZXF1ZXN0ZWQgbGluayBpcyBhIHBlcm1pdHRlZCBhdWRpby92aWRlbyBsaW5rLgorICovCitz dGF0aWMgYm9vbCBkcF9saW5rX2lzX3ZpZGVvX2F1ZGlvX3Rlc3RfcmVxdWVzdGVkKHUzMiBsaW5r KQoreworCXJldHVybiAobGluayA9PSBEUF9URVNUX0xJTktfVklERU9fUEFUVEVSTikgfHwKKwkJ KGxpbmsgPT0gKERQX1RFU1RfTElOS19BVURJT19QQVRURVJOIHwKKwkJRFBfVEVTVF9MSU5LX1ZJ REVPX1BBVFRFUk4pKSB8fAorCQkobGluayA9PSBEUF9URVNUX0xJTktfQVVESU9fUEFUVEVSTikg fHwKKwkJKGxpbmsgPT0gKERQX1RFU1RfTElOS19BVURJT19QQVRURVJOIHwKKwkJRFBfVEVTVF9M SU5LX0FVRElPX0RJU0FCTEVEX1ZJREVPKSk7Cit9CisKKy8qKgorICogZHBfbGlua19zdXBwb3J0 ZWQoKSAtIGNoZWNrcyBpZiBsaW5rIHJlcXVlc3RlZCBieSBzaW5rIGlzIHN1cHBvcnRlZAorICog QHRlc3RfcmVxdWVzdGVkOiBsaW5rIHJlcXVlc3RlZCBieSB0aGUgc2luaworICoKKyAqIFJldHVy bnMgdHJ1ZSBpZiB0aGUgcmVxdWVzdGVkIGxpbmsgaXMgc3VwcG9ydGVkLgorICovCitzdGF0aWMg Ym9vbCBkcF9saW5rX2lzX3Rlc3Rfc3VwcG9ydGVkKHUzMiB0ZXN0X3JlcXVlc3RlZCkKK3sKKwly ZXR1cm4gKHRlc3RfcmVxdWVzdGVkID09IERQX1RFU1RfTElOS19UUkFJTklORykgfHwKKwkJKHRl c3RfcmVxdWVzdGVkID09IERQX1RFU1RfTElOS19FRElEX1JFQUQpIHx8CisJCSh0ZXN0X3JlcXVl c3RlZCA9PSBEUF9URVNUX0xJTktfUEhZX1RFU1RfUEFUVEVSTikgfHwKKwkJZHBfbGlua19pc192 aWRlb19hdWRpb190ZXN0X3JlcXVlc3RlZCh0ZXN0X3JlcXVlc3RlZCk7Cit9CisKK3N0YXRpYyBi b29sIGRwX2xpbmtfaXNfdGVzdF9lZGlkX3JlYWQoc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGlu aykKK3sKKwlyZXR1cm4gKGxpbmstPnJlcXVlc3QudGVzdF9yZXF1ZXN0ZWQgPT0gRFBfVEVTVF9M SU5LX0VESURfUkVBRCk7Cit9CisKKy8qKgorICogZHBfc2lua19wYXJzZV90ZXN0X3JlcXVlc3Qo KSAtIHBhcnNlcyBsaW5rIHJlcXVlc3QgcGFyYW1ldGVycyBmcm9tIHNpbmsKKyAqIEBsaW5rOiBE aXNwbGF5IFBvcnQgRHJpdmVyIGRhdGEKKyAqCisgKiBQYXJzZXMgdGhlIERQQ0QgdG8gY2hlY2sg aWYgYW4gYXV0b21hdGVkIGxpbmsgaXMgcmVxdWVzdGVkIChCeXRlIDB4MjAxKSwKKyAqIGFuZCB3 aGF0IHR5cGUgb2YgbGluayBhdXRvbWF0aW9uIGlzIGJlaW5nIHJlcXVlc3RlZCAoQnl0ZSAweDIx OCkuCisgKi8KK3N0YXRpYyBpbnQgZHBfbGlua19wYXJzZV9yZXF1ZXN0KHN0cnVjdCBkcF9saW5r X3ByaXZhdGUgKmxpbmspCit7CisJaW50IHJldCA9IDA7CisJdTggYnA7CisJdTggZGF0YTsKKwlp bnQgcmxlbjsKKwl1MzIgY29uc3QgcGFyYW1fbGVuID0gMHgxOworCisJLyoqCisJICogUmVhZCB0 aGUgZGV2aWNlIHNlcnZpY2UgSVJRIHZlY3RvciAoQnl0ZSAweDIwMSkgdG8gZGV0ZXJtaW5lCisJ ICogd2hldGhlciBhbiBhdXRvbWF0ZWQgbGluayBoYXMgYmVlbiByZXF1ZXN0ZWQgYnkgdGhlIHNp bmsuCisJICovCisJcmxlbiA9IGRybV9kcF9kcGNkX3JlYWQobGluay0+YXV4LT5kcm1fYXV4LAor CQlEUF9ERVZJQ0VfU0VSVklDRV9JUlFfVkVDVE9SLCAmYnAsIHBhcmFtX2xlbik7CisJaWYgKHJs ZW4gPCBwYXJhbV9sZW4pIHsKKwkJcHJfZXJyKCJhdXggcmVhZCBmYWlsZWRcbiIpOworCQlyZXQg PSAtRUlOVkFMOworCQlnb3RvIGVuZDsKKwl9CisKKwlkYXRhID0gYnA7CisKKwlwcl9kZWJ1Zygi ZGV2aWNlIHNlcnZpY2UgaXJxIHZlY3RvciA9IDB4JXhcbiIsIGRhdGEpOworCisJaWYgKCEoZGF0 YSAmIERQX0FVVE9NQVRFRF9URVNUX1JFUVVFU1QpKSB7CisJCXByX2RlYnVnKCJubyB0ZXN0IHJl cXVlc3RlZFxuIik7CisJCXJldHVybiAwOworCX0KKworCS8qKgorCSAqIFJlYWQgdGhlIGxpbmsg cmVxdWVzdCBieXRlIChCeXRlIDB4MjE4KSB0byBkZXRlcm1pbmUgd2hhdCB0eXBlCisJICogb2Yg YXV0b21hdGVkIGxpbmsgaGFzIGJlZW4gcmVxdWVzdGVkIGJ5IHRoZSBzaW5rLgorCSAqLworCXJs ZW4gPSBkcm1fZHBfZHBjZF9yZWFkKGxpbmstPmF1eC0+ZHJtX2F1eCwgRFBfVEVTVF9SRVFVRVNU LAorCQkJJmJwLCBwYXJhbV9sZW4pOworCWlmIChybGVuIDwgcGFyYW1fbGVuKSB7CisJCXByX2Vy cigiYXV4IHJlYWQgZmFpbGVkXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlbmQ7CisJ fQorCisJZGF0YSA9IGJwOworCisJaWYgKCFkcF9saW5rX2lzX3Rlc3Rfc3VwcG9ydGVkKGRhdGEp KSB7CisJCXByX2RlYnVnKCJsaW5rIDB4JXggbm90IHN1cHBvcnRlZFxuIiwgZGF0YSk7CisJCWdv dG8gZW5kOworCX0KKworCXByX2RlYnVnKCIlcyAoMHgleCkgcmVxdWVzdGVkXG4iLCBkcF9saW5r X2dldF90ZXN0X25hbWUoZGF0YSksIGRhdGEpOworCWxpbmstPnJlcXVlc3QudGVzdF9yZXF1ZXN0 ZWQgPSBkYXRhOworCisJaWYgKGxpbmstPnJlcXVlc3QudGVzdF9yZXF1ZXN0ZWQgPT0gRFBfVEVT VF9MSU5LX1BIWV9URVNUX1BBVFRFUk4pIHsKKwkJcmV0ID0gZHBfbGlua19wYXJzZV9waHlfdGVz dF9wYXJhbXMobGluayk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVuZDsKKwkJcmV0ID0gZHBfbGlu a19wYXJzZV9saW5rX3RyYWluaW5nX3BhcmFtcyhsaW5rKTsKKwl9CisKKwlpZiAobGluay0+cmVx dWVzdC50ZXN0X3JlcXVlc3RlZCA9PSBEUF9URVNUX0xJTktfVFJBSU5JTkcpCisJCXJldCA9IGRw X2xpbmtfcGFyc2VfbGlua190cmFpbmluZ19wYXJhbXMobGluayk7CisKKwlpZiAoZHBfbGlua19p c192aWRlb19hdWRpb190ZXN0X3JlcXVlc3RlZCgKKwkJCWxpbmstPnJlcXVlc3QudGVzdF9yZXF1 ZXN0ZWQpKSB7CisJCXJldCA9IGRwX2xpbmtfcGFyc2VfdmlkZW9fcGF0dGVybl9wYXJhbXMobGlu ayk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVuZDsKKworCQlyZXQgPSBkcF9saW5rX3BhcnNlX2F1 ZGlvX3BhdHRlcm5fcGFyYW1zKGxpbmspOworCX0KK2VuZDoKKwkvKioKKwkgKiBTZW5kIGEgRFBf VEVTVF9BQ0sgaWYgYWxsIGxpbmsgcGFyYW1ldGVycyBhcmUgdmFsaWQsIG90aGVyd2lzZSBzZW5k CisJICogYSBEUF9URVNUX05BSy4KKwkgKi8KKwlpZiAocmV0KSB7CisJCWxpbmstPmRwX2xpbmsu dGVzdF9yZXNwb25zZSA9IERQX1RFU1RfTkFLOworCX0gZWxzZSB7CisJCWlmICghZHBfbGlua19p c190ZXN0X2VkaWRfcmVhZChsaW5rKSkKKwkJCWxpbmstPmRwX2xpbmsudGVzdF9yZXNwb25zZSA9 IERQX1RFU1RfQUNLOworCQllbHNlCisJCQlsaW5rLT5kcF9saW5rLnRlc3RfcmVzcG9uc2UgPQor CQkJCURQX1RFU1RfRURJRF9DSEVDS1NVTV9XUklURTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQor CisvKioKKyAqIGRwX2xpbmtfcGFyc2Vfc2lua19jb3VudCgpIC0gcGFyc2VzIHRoZSBzaW5rIGNv dW50CisgKgorICogUGFyc2VzIHRoZSBEUENEIHRvIGNoZWNrIGlmIHRoZXJlIGlzIGFuIHVwZGF0 ZSB0byB0aGUgc2luayBjb3VudAorICogKEJ5dGUgMHgyMDApLCBhbmQgd2hldGhlciBhbGwgdGhl IHNpbmsgZGV2aWNlcyBjb25uZWN0ZWQgaGF2ZSBDb250ZW50CisgKiBQcm90ZWN0aW9uIGVuYWJs ZWQuCisgKi8KK3N0YXRpYyBpbnQgZHBfbGlua19wYXJzZV9zaW5rX2NvdW50KHN0cnVjdCBkcF9s aW5rICpkcF9saW5rKQoreworCWludCBybGVuOworCWludCBjb25zdCBwYXJhbV9sZW4gPSAweDE7 CisJc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGluayA9IGNvbnRhaW5lcl9vZihkcF9saW5rLAor CQkJc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSwgZHBfbGluayk7CisKKwlybGVuID0gZHJtX2RwX2Rw Y2RfcmVhZChsaW5rLT5hdXgtPmRybV9hdXgsIERQX1NJTktfQ09VTlQsCisJCQkmbGluay0+ZHBf bGluay5zaW5rX2NvdW50LmNvdW50LCBwYXJhbV9sZW4pOworCWlmIChybGVuIDwgcGFyYW1fbGVu KSB7CisJCXByX2VycigiZmFpbGVkIHRvIHJlYWQgc2luayBjb3VudFxuIik7CisJCXJldHVybiAt RUlOVkFMOworCX0KKworCWxpbmstPmRwX2xpbmsuc2lua19jb3VudC5jcF9yZWFkeSA9CisJCWxp bmstPmRwX2xpbmsuc2lua19jb3VudC5jb3VudCAmIERQX1NJTktfQ1BfUkVBRFk7CisJLyogQklU IDcsIEJJVCA1OjAgKi8KKwlsaW5rLT5kcF9saW5rLnNpbmtfY291bnQuY291bnQgPQorCQlEUF9H RVRfU0lOS19DT1VOVChsaW5rLT5kcF9saW5rLnNpbmtfY291bnQuY291bnQpOworCisJcHJfZGVi dWcoInNpbmtfY291bnQgPSAweCV4LCBjcF9yZWFkeSA9IDB4JXhcbiIsCisJCWxpbmstPmRwX2xp bmsuc2lua19jb3VudC5jb3VudCwKKwkJbGluay0+ZHBfbGluay5zaW5rX2NvdW50LmNwX3JlYWR5 KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZHBfbGlua19wYXJzZV9zaW5rX3N0YXR1 c19maWVsZChzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5rKQoreworCWludCBsZW4gPSAwOwor CisJbGluay0+cHJldl9zaW5rX2NvdW50ID0gbGluay0+ZHBfbGluay5zaW5rX2NvdW50LmNvdW50 OworCWRwX2xpbmtfcGFyc2Vfc2lua19jb3VudCgmbGluay0+ZHBfbGluayk7CisKKwlsZW4gPSBk cm1fZHBfZHBjZF9yZWFkX2xpbmtfc3RhdHVzKGxpbmstPmF1eC0+ZHJtX2F1eCwKKwkJbGluay0+ bGlua19zdGF0dXMpOworCWlmIChsZW4gPCBEUF9MSU5LX1NUQVRVU19TSVpFKQorCQlwcl9lcnIo IkRQIGxpbmsgc3RhdHVzIHJlYWQgZmFpbGVkXG4iKTsKKwlkcF9saW5rX3BhcnNlX3JlcXVlc3Qo bGluayk7Cit9CisKK3N0YXRpYyBib29sIGRwX2xpbmtfaXNfbGlua190cmFpbmluZ19yZXF1ZXN0 ZWQoc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGluaykKK3sKKwlyZXR1cm4gKGxpbmstPnJlcXVl c3QudGVzdF9yZXF1ZXN0ZWQgPT0gRFBfVEVTVF9MSU5LX1RSQUlOSU5HKTsKK30KKworLyoqCisg KiBkcF9saW5rX3Byb2Nlc3NfbGlua190cmFpbmluZ19yZXF1ZXN0KCkgLSBwcm9jZXNzZXMgbmV3 IHRyYWluaW5nIHJlcXVlc3RzCisgKiBAbGluazogRGlzcGxheSBQb3J0IGxpbmsgZGF0YQorICoK KyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBoYW5kbGUgbmV3IGxpbmsgdHJhaW5pbmcgcmVxdWVzdHMg dGhhdCBhcmUgaW5pdGlhdGVkIGJ5CisgKiB0aGUgc2luay4gSW4gcGFydGljdWxhciwgaXQgd2ls bCB1cGRhdGUgdGhlIHJlcXVlc3RlZCBsYW5lIGNvdW50IGFuZCBsaW5rCisgKiBsaW5rIHJhdGUs IGFuZCB0aGVuIHRyaWdnZXIgdGhlIGxpbmsgcmV0cmFpbmluZyBwcm9jZWR1cmUuCisgKgorICog VGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDAgaWYgYSBsaW5rIHRyYWluaW5nIHJlcXVlc3QgaGFz IGJlZW4gcHJvY2Vzc2VkLAorICogb3RoZXJ3aXNlIGl0IHdpbGwgcmV0dXJuIC1FSU5WQUwuCisg Ki8KK3N0YXRpYyBpbnQgZHBfbGlua19wcm9jZXNzX2xpbmtfdHJhaW5pbmdfcmVxdWVzdChzdHJ1 Y3QgZHBfbGlua19wcml2YXRlICpsaW5rKQoreworCWlmICghZHBfbGlua19pc19saW5rX3RyYWlu aW5nX3JlcXVlc3RlZChsaW5rKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcl9kZWJ1ZygiJXMg bGluayByYXRlID0gMHgleCwgbGFuZSBjb3VudCA9IDB4JXhcbiIsCisJCQlkcF9saW5rX2dldF90 ZXN0X25hbWUoRFBfVEVTVF9MSU5LX1RSQUlOSU5HKSwKKwkJCWxpbmstPnJlcXVlc3QudGVzdF9s aW5rX3JhdGUsCisJCQlsaW5rLT5yZXF1ZXN0LnRlc3RfbGFuZV9jb3VudCk7CisKKwlsaW5rLT5k cF9saW5rLmxpbmtfcGFyYW1zLmxhbmVfY291bnQgPSBsaW5rLT5yZXF1ZXN0LnRlc3RfbGFuZV9j b3VudDsKKwlsaW5rLT5kcF9saW5rLmxpbmtfcGFyYW1zLmJ3X2NvZGUgPSBsaW5rLT5yZXF1ZXN0 LnRlc3RfbGlua19yYXRlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRwX2xpbmtf c2VuZF90ZXN0X3Jlc3BvbnNlKHN0cnVjdCBkcF9saW5rICpkcF9saW5rKQoreworCXN0cnVjdCBk cF9saW5rX3ByaXZhdGUgKmxpbmsgPSBOVUxMOworCXUzMiBjb25zdCByZXNwb25zZV9sZW4gPSAw eDE7CisKKwlpZiAoIWRwX2xpbmspIHsKKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKKwkJ cmV0dXJuOworCX0KKworCWxpbmsgPSBjb250YWluZXJfb2YoZHBfbGluaywgc3RydWN0IGRwX2xp bmtfcHJpdmF0ZSwgZHBfbGluayk7CisKKwlkcm1fZHBfZHBjZF93cml0ZShsaW5rLT5hdXgtPmRy bV9hdXgsIERQX1RFU1RfUkVTUE9OU0UsCisJCQkmZHBfbGluay0+dGVzdF9yZXNwb25zZSwgcmVz cG9uc2VfbGVuKTsKK30KKworc3RhdGljIGludCBkcF9saW5rX3BzbV9jb25maWcoc3RydWN0IGRw X2xpbmsgKmRwX2xpbmssCisJCQkgICAgICBzdHJ1Y3QgZHJtX2RwX2xpbmsgKmxpbmtfaW5mbywg Ym9vbCBlbmFibGUpCit7CisJc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGluayA9IE5VTEw7CisJ aW50IHJldCA9IDA7CisKKwlpZiAoIWRwX2xpbmspIHsKKwkJcHJfZXJyKCJpbnZhbGlkIHBhcmFt c1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWxpbmsgPSBjb250YWluZXJfb2YoZHBf bGluaywgc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSwgZHBfbGluayk7CisKKwlpZiAoZW5hYmxlKQor CQlyZXQgPSBkcm1fZHBfbGlua19wb3dlcl9kb3duKGxpbmstPmF1eC0+ZHJtX2F1eCwgbGlua19p bmZvKTsKKwllbHNlCisJCXJldCA9IGRybV9kcF9saW5rX3Bvd2VyX3VwKGxpbmstPmF1eC0+ZHJt X2F1eCwgbGlua19pbmZvKTsKKworCWlmIChyZXQpCisJCXByX2VycigiRmFpbGVkIHRvICVzIGxv dyBwb3dlciBtb2RlXG4iLAorCQkJKGVuYWJsZSA/ICJlbnRlciIgOiAiZXhpdCIpKTsKKwllbHNl CisJCWRwX2xpbmstPnBzbV9lbmFibGVkID0gZW5hYmxlOworCisJcmV0dXJuIHJldDsKK30KKwor c3RhdGljIHZvaWQgZHBfbGlua19zZW5kX2VkaWRfY2hlY2tzdW0oc3RydWN0IGRwX2xpbmsgKmRw X2xpbmssIHU4IGNoZWNrc3VtKQoreworCXN0cnVjdCBkcF9saW5rX3ByaXZhdGUgKmxpbmsgPSBO VUxMOworCXUzMiBjb25zdCByZXNwb25zZV9sZW4gPSAweDE7CisKKwlpZiAoIWRwX2xpbmspIHsK KwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKKwkJcmV0dXJuOworCX0KKworCWxpbmsgPSBj b250YWluZXJfb2YoZHBfbGluaywgc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSwgZHBfbGluayk7CisK Kwlkcm1fZHBfZHBjZF93cml0ZShsaW5rLT5hdXgtPmRybV9hdXgsIERQX1RFU1RfRURJRF9DSEVD S1NVTSwKKwkJCSZjaGVja3N1bSwgcmVzcG9uc2VfbGVuKTsKK30KKworc3RhdGljIGludCBkcF9s aW5rX3BhcnNlX3Z4X3B4KHN0cnVjdCBkcF9saW5rX3ByaXZhdGUgKmxpbmspCit7CisJdTggYnA7 CisJdTggZGF0YTsKKwlpbnQgY29uc3QgcGFyYW1fbGVuID0gMHgxOworCWludCByZXQgPSAwOwor CXUzMiB2MCwgcDAsIHYxLCBwMSwgdjIsIHAyLCB2MywgcDM7CisJaW50IHJsZW47CisKKwlwcl9k ZWJ1ZygiXG4iKTsKKworCXJsZW4gPSBkcm1fZHBfZHBjZF9yZWFkKGxpbmstPmF1eC0+ZHJtX2F1 eCwgRFBfQURKVVNUX1JFUVVFU1RfTEFORTBfMSwKKwkJCSZicCwgcGFyYW1fbGVuKTsKKwlpZiAo cmxlbiA8IHBhcmFtX2xlbikgeworCQlwcl9lcnIoImZhaWxlZCByZWFkaW5nIGxhbmVzIDAvMVxu Iik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZW5kOworCX0KKworCWRhdGEgPSBicDsKKwor CXByX2RlYnVnKCJsYW5lcyAwLzEgKEJ5dGUgMHgyMDYpOiAweCV4XG4iLCBkYXRhKTsKKworCXYw ID0gZGF0YSAmIDB4MzsKKwlkYXRhID0gZGF0YSA+PiAyOworCXAwID0gZGF0YSAmIDB4MzsKKwlk YXRhID0gZGF0YSA+PiAyOworCisJdjEgPSBkYXRhICYgMHgzOworCWRhdGEgPSBkYXRhID4+IDI7 CisJcDEgPSBkYXRhICYgMHgzOworCWRhdGEgPSBkYXRhID4+IDI7CisKKwlybGVuID0gZHJtX2Rw X2RwY2RfcmVhZChsaW5rLT5hdXgtPmRybV9hdXgsIERQX0FESlVTVF9SRVFVRVNUX0xBTkUyXzMs CisJCQkmYnAsIHBhcmFtX2xlbik7CisJaWYgKHJsZW4gPCBwYXJhbV9sZW4pIHsKKwkJcHJfZXJy KCJmYWlsZWQgcmVhZGluZyBsYW5lcyAyLzNcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3Rv IGVuZDsKKwl9CisKKwlkYXRhID0gYnA7CisKKwlwcl9kZWJ1ZygibGFuZXMgMi8zIChCeXRlIDB4 MjA3KTogMHgleFxuIiwgZGF0YSk7CisKKwl2MiA9IGRhdGEgJiAweDM7CisJZGF0YSA9IGRhdGEg Pj4gMjsKKwlwMiA9IGRhdGEgJiAweDM7CisJZGF0YSA9IGRhdGEgPj4gMjsKKworCXYzID0gZGF0 YSAmIDB4MzsKKwlkYXRhID0gZGF0YSA+PiAyOworCXAzID0gZGF0YSAmIDB4MzsKKwlkYXRhID0g ZGF0YSA+PiAyOworCisJcHJfZGVidWcoInZ4OiAwPSVkLCAxPSVkLCAyPSVkLCAzPSVkXG4iLCB2 MCwgdjEsIHYyLCB2Myk7CisJcHJfZGVidWcoInB4OiAwPSVkLCAxPSVkLCAyPSVkLCAzPSVkXG4i LCBwMCwgcDEsIHAyLCBwMyk7CisKKwkvKioKKwkgKiBVcGRhdGUgdGhlIHZvbHRhZ2UgYW5kIHBy ZS1lbXBoYXNpcyBsZXZlbHMgYXMgcGVyIERQQ0QgcmVxdWVzdAorCSAqIHZlY3Rvci4KKwkgKi8K Kwlwcl9kZWJ1ZygiQ3VycmVudDogdl9sZXZlbCA9IDB4JXgsIHBfbGV2ZWwgPSAweCV4XG4iLAor CQkJbGluay0+ZHBfbGluay5waHlfcGFyYW1zLnZfbGV2ZWwsCisJCQlsaW5rLT5kcF9saW5rLnBo eV9wYXJhbXMucF9sZXZlbCk7CisJcHJfZGVidWcoIlJlcXVlc3RlZDogdl9sZXZlbCA9IDB4JXgs IHBfbGV2ZWwgPSAweCV4XG4iLCB2MCwgcDApOworCWxpbmstPmRwX2xpbmsucGh5X3BhcmFtcy52 X2xldmVsID0gdjA7CisJbGluay0+ZHBfbGluay5waHlfcGFyYW1zLnBfbGV2ZWwgPSBwMDsKKwor CXByX2RlYnVnKCJTdWNjZXNzXG4iKTsKK2VuZDoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAq IGRwX2xpbmtfcHJvY2Vzc19waHlfdGVzdF9wYXR0ZXJuX3JlcXVlc3QoKSAtIHByb2Nlc3MgbmV3 IHBoeSBsaW5rIHJlcXVlc3RzCisgKiBAbGluazogRGlzcGxheSBQb3J0IERyaXZlciBkYXRhCisg KgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGhhbmRsZSBuZXcgcGh5IGxpbmsgcGF0dGVybiByZXF1 ZXN0cyB0aGF0IGFyZSBpbml0aWF0ZWQKKyAqIGJ5IHRoZSBzaW5rLiBUaGUgZnVuY3Rpb24gd2ls bCByZXR1cm4gMCBpZiBhIHBoeSBsaW5rIHBhdHRlcm4gaGFzIGJlZW4KKyAqIHByb2Nlc3NlZCwg b3RoZXJ3aXNlIGl0IHdpbGwgcmV0dXJuIC1FSU5WQUwuCisgKi8KK3N0YXRpYyBpbnQgZHBfbGlu a19wcm9jZXNzX3BoeV90ZXN0X3BhdHRlcm5fcmVxdWVzdCgKKwkJc3RydWN0IGRwX2xpbmtfcHJp dmF0ZSAqbGluaykKK3sKKwl1MzIgdGVzdF9saW5rX3JhdGUgPSAwLCB0ZXN0X2xhbmVfY291bnQg PSAwOworCisJaWYgKCEobGluay0+cmVxdWVzdC50ZXN0X3JlcXVlc3RlZCAmIERQX1RFU1RfTElO S19QSFlfVEVTVF9QQVRURVJOKSkgeworCQlwcl9kZWJ1Zygibm8gcGh5IHRlc3RcbiIpOworCQly ZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl0ZXN0X2xpbmtfcmF0ZSA9IGxpbmstPnJlcXVlc3QudGVz dF9saW5rX3JhdGU7CisJdGVzdF9sYW5lX2NvdW50ID0gbGluay0+cmVxdWVzdC50ZXN0X2xhbmVf Y291bnQ7CisKKwlpZiAoIWlzX2xpbmtfcmF0ZV92YWxpZCh0ZXN0X2xpbmtfcmF0ZSkgfHwKKwkJ IWlzX2xhbmVfY291bnRfdmFsaWQodGVzdF9sYW5lX2NvdW50KSkgeworCQlwcl9lcnIoIkludmFs aWQgcGFyYW1zOiBsaW5rIHJhdGUgPSAweCV4LCBsYW5lIGNvdW50ID0gMHgleFxuIiwKKwkJCQl0 ZXN0X2xpbmtfcmF0ZSwgdGVzdF9sYW5lX2NvdW50KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQor CisJcHJfZGVidWcoInN0YXJ0XG4iKTsKKworCXByX2luZm8oIkN1cnJlbnQ6IGJ3X2NvZGUgPSAw eCV4LCBsYW5lIGNvdW50ID0gMHgleFxuIiwKKwkJCWxpbmstPmRwX2xpbmsubGlua19wYXJhbXMu YndfY29kZSwKKwkJCWxpbmstPmRwX2xpbmsubGlua19wYXJhbXMubGFuZV9jb3VudCk7CisKKwlw cl9pbmZvKCJSZXF1ZXN0ZWQ6IGJ3X2NvZGUgPSAweCV4LCBsYW5lIGNvdW50ID0gMHgleFxuIiwK KwkJCXRlc3RfbGlua19yYXRlLCB0ZXN0X2xhbmVfY291bnQpOworCisJbGluay0+ZHBfbGluay5s aW5rX3BhcmFtcy5sYW5lX2NvdW50ID0gbGluay0+cmVxdWVzdC50ZXN0X2xhbmVfY291bnQ7CisJ bGluay0+ZHBfbGluay5saW5rX3BhcmFtcy5id19jb2RlID0gbGluay0+cmVxdWVzdC50ZXN0X2xp bmtfcmF0ZTsKKworCWRwX2xpbmtfcGFyc2VfdnhfcHgobGluayk7CisKKwlwcl9kZWJ1ZygiZW5k XG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTggZ2V0X2xpbmtfc3RhdHVzKGNvbnN0 IHU4IGxpbmtfc3RhdHVzW0RQX0xJTktfU1RBVFVTX1NJWkVdLCBpbnQgcikKK3sKKwlyZXR1cm4g bGlua19zdGF0dXNbciAtIERQX0xBTkUwXzFfU1RBVFVTXTsKK30KKworLyoqCisgKiBkcF9saW5r X3Byb2Nlc3NfbGlua19zdGF0dXNfdXBkYXRlKCkgLSBwcm9jZXNzZXMgbGluayBzdGF0dXMgdXBk YXRlcworICogQGxpbms6IERpc3BsYXkgUG9ydCBsaW5rIG1vZHVsZSBkYXRhCisgKgorICogVGhp cyBmdW5jdGlvbiB3aWxsIGNoZWNrIGZvciBjaGFuZ2VzIGluIHRoZSBsaW5rIHN0YXR1cywgZS5n LiBjbG9jaworICogcmVjb3ZlcnkgZG9uZSBvbiBhbGwgbGFuZXMsIGFuZCB0cmlnZ2VyIGxpbmsg dHJhaW5pbmcgaWYgdGhlcmUgaXMgYQorICogZmFpbHVyZS9lcnJvciBvbiB0aGUgbGluay4KKyAq CisgKiBUaGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gMCBpZiB0aGUgYSBsaW5rIHN0YXR1cyB1cGRh dGUgaGFzIGJlZW4gcHJvY2Vzc2VkLAorICogb3RoZXJ3aXNlIGl0IHdpbGwgcmV0dXJuIC1FSU5W QUwuCisgKi8KK3N0YXRpYyBpbnQgZHBfbGlua19wcm9jZXNzX2xpbmtfc3RhdHVzX3VwZGF0ZShz dHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5rKQoreworCWlmICghKGdldF9saW5rX3N0YXR1cyhs aW5rLT5saW5rX3N0YXR1cywgRFBfTEFORV9BTElHTl9TVEFUVVNfVVBEQVRFRCkgJgorCQlEUF9M SU5LX1NUQVRVU19VUERBVEVEKSB8fCAvKiBsaW5rIHN0YXR1cyB1cGRhdGVkICovCisJCShkcm1f ZHBfY2xvY2tfcmVjb3Zlcnlfb2sobGluay0+bGlua19zdGF0dXMsCisJCQlsaW5rLT5kcF9saW5r LmxpbmtfcGFyYW1zLmxhbmVfY291bnQpICYmCisJICAgICBkcm1fZHBfY2hhbm5lbF9lcV9vayhs aW5rLT5saW5rX3N0YXR1cywKKwkJCWxpbmstPmRwX2xpbmsubGlua19wYXJhbXMubGFuZV9jb3Vu dCkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXByX2RlYnVnKCJjaGFubmVsX2VxX2RvbmUgPSAl ZCwgY2xvY2tfcmVjb3ZlcnlfZG9uZSA9ICVkXG4iLAorCQkJZHJtX2RwX2Nsb2NrX3JlY292ZXJ5 X29rKGxpbmstPmxpbmtfc3RhdHVzLAorCQkJbGluay0+ZHBfbGluay5saW5rX3BhcmFtcy5sYW5l X2NvdW50KSwKKwkJCWRybV9kcF9jbG9ja19yZWNvdmVyeV9vayhsaW5rLT5saW5rX3N0YXR1cywK KwkJCWxpbmstPmRwX2xpbmsubGlua19wYXJhbXMubGFuZV9jb3VudCkpOworCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBib29sIGRwX2xpbmtfaXNfZHNfcG9ydF9zdGF0dXNfY2hhbmdlZChzdHJ1 Y3QgZHBfbGlua19wcml2YXRlICpsaW5rKQoreworCWlmIChnZXRfbGlua19zdGF0dXMobGluay0+ bGlua19zdGF0dXMsIERQX0xBTkVfQUxJR05fU1RBVFVTX1VQREFURUQpICYKKwkJRFBfRE9XTlNU UkVBTV9QT1JUX1NUQVRVU19DSEFOR0VEKSAvKiBwb3J0IHN0YXR1cyBjaGFuZ2VkICovCisJCXJl dHVybiB0cnVlOworCisJaWYgKGxpbmstPnByZXZfc2lua19jb3VudCAhPSBsaW5rLT5kcF9saW5r LnNpbmtfY291bnQuY291bnQpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQor CisvKioKKyAqIGRwX2xpbmtfcHJvY2Vzc19kb3duc3RyZWFtX3BvcnRfc3RhdHVzX2NoYW5nZSgp IC0gcHJvY2VzcyBwb3J0IHN0YXR1cyBjaGFuZ2VzCisgKiBAbGluazogRGlzcGxheSBQb3J0IERy aXZlciBkYXRhCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGhhbmRsZSBkb3duc3RyZWFtIHBv cnQgdXBkYXRlcyB0aGF0IGFyZSBpbml0aWF0ZWQgYnkKKyAqIHRoZSBzaW5rLiBJZiB0aGUgZG93 bnN0cmVhbSBwb3J0IHN0YXR1cyBoYXMgY2hhbmdlZCwgdGhlIEVESUQgaXMgcmVhZCB2aWEKKyAq IEFVWC4KKyAqCisgKiBUaGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gMCBpZiBhIGRvd25zdHJlYW0g cG9ydCB1cGRhdGUgaGFzIGJlZW4KKyAqIHByb2Nlc3NlZCwgb3RoZXJ3aXNlIGl0IHdpbGwgcmV0 dXJuIC1FSU5WQUwuCisgKi8KK3N0YXRpYyBpbnQgZHBfbGlua19wcm9jZXNzX2RzX3BvcnRfc3Rh dHVzX2NoYW5nZShzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5rKQoreworCWlmICghZHBfbGlu a19pc19kc19wb3J0X3N0YXR1c19jaGFuZ2VkKGxpbmspKQorCQlyZXR1cm4gLUVJTlZBTDsKKwor CS8qIHJlc2V0IHByZXZfc2lua19jb3VudCAqLworCWxpbmstPnByZXZfc2lua19jb3VudCA9IGxp bmstPmRwX2xpbmsuc2lua19jb3VudC5jb3VudDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMg Ym9vbCBkcF9saW5rX2lzX3ZpZGVvX3BhdHRlcm5fcmVxdWVzdGVkKHN0cnVjdCBkcF9saW5rX3By aXZhdGUgKmxpbmspCit7CisJcmV0dXJuIChsaW5rLT5yZXF1ZXN0LnRlc3RfcmVxdWVzdGVkICYg RFBfVEVTVF9MSU5LX1ZJREVPX1BBVFRFUk4pCisJCSYmICEobGluay0+cmVxdWVzdC50ZXN0X3Jl cXVlc3RlZCAmCisJCURQX1RFU1RfTElOS19BVURJT19ESVNBQkxFRF9WSURFTyk7Cit9CisKK3N0 YXRpYyBib29sIGRwX2xpbmtfaXNfYXVkaW9fcGF0dGVybl9yZXF1ZXN0ZWQoc3RydWN0IGRwX2xp bmtfcHJpdmF0ZSAqbGluaykKK3sKKwlyZXR1cm4gKGxpbmstPnJlcXVlc3QudGVzdF9yZXF1ZXN0 ZWQgJiBEUF9URVNUX0xJTktfQVVESU9fUEFUVEVSTik7Cit9CisKKy8qKgorICogZHBfbGlua19w cm9jZXNzX3ZpZGVvX3BhdHRlcm5fcmVxdWVzdCgpIC0gcHJvY2VzcyBuZXcgdmlkZW8gcGF0dGVy biByZXF1ZXN0CisgKiBAbGluazogRGlzcGxheSBQb3J0IGxpbmsgbW9kdWxlJ3MgZGF0YQorICoK KyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBoYW5kbGUgYSBuZXcgdmlkZW8gcGF0dGVybiByZXF1ZXN0 IHRoYXQgYXJlIGluaXRpYXRlZCBieQorICogdGhlIHNpbmsuIFRoaXMgaXMgYWNoZWlldmVkIGJ5 IGZpcnN0IHNlbmRpbmcgYSBkaXNjb25uZWN0IG5vdGlmaWNhdGlvbiB0bworICogdGhlIHNpbmsg Zm9sbG93ZWQgYnkgYSBzdWJzZXF1ZW50IGNvbm5lY3Qgbm90aWZpY2F0aW9uIHRvIHRoZSB1c2Vy IG1vZHVsZXMsCisgKiB3aGVyZSBpdCBpcyBleHBlY3RlZCB0aGF0IHRoZSB1c2VyIG1vZHVsZXMg d291bGQgZHJhdyB0aGUgcmVxdWlyZWQgbGluaworICogcGF0dGVybi4KKyAqLworc3RhdGljIGlu dCBkcF9saW5rX3Byb2Nlc3NfdmlkZW9fcGF0dGVybl9yZXF1ZXN0KHN0cnVjdCBkcF9saW5rX3By aXZhdGUgKmxpbmspCit7CisJaWYgKCFkcF9saW5rX2lzX3ZpZGVvX3BhdHRlcm5fcmVxdWVzdGVk KGxpbmspKQorCQlnb3RvIGVuZDsKKworCXByX2RlYnVnKCIlczogYml0IGRlcHRoPSVkKCVkIGJw cCkgcGF0dGVybj0lc1xuIiwKKwkJZHBfbGlua19nZXRfdGVzdF9uYW1lKERQX1RFU1RfTElOS19W SURFT19QQVRURVJOKSwKKwkJbGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3RfYml0X2RlcHRo LAorCQlkcF9saW5rX2JpdF9kZXB0aF90b19icHAoCisJCWxpbmstPmRwX2xpbmsudGVzdF92aWRl by50ZXN0X2JpdF9kZXB0aCksCisJCWRwX2xpbmtfdmlkZW9fcGF0dGVybl90b19zdHJpbmcoCisJ CQlsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF92aWRlb19wYXR0ZXJuKSk7CisKKwlyZXR1 cm4gMDsKK2VuZDoKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoqCisgKiBkcF9saW5rX3Byb2Nl c3NfYXVkaW9fcGF0dGVybl9yZXF1ZXN0KCkgLSBwcm9jZXNzIG5ldyBhdWRpbyBwYXR0ZXJuIHJl cXVlc3QKKyAqIEBsaW5rOiBEaXNwbGF5IFBvcnQgbGluayBtb2R1bGUgZGF0YQorICoKKyAqIFRo aXMgZnVuY3Rpb24gd2lsbCBoYW5kbGUgYSBuZXcgYXVkaW8gcGF0dGVybiByZXF1ZXN0IHRoYXQg aXMgaW5pdGlhdGVkIGJ5CisgKiB0aGUgc2luay4gVGhpcyBpcyBhY2hlaWV2ZWQgYnkgc2VuZGlu ZyB0aGUgbmVjZXNzYXJ5IHNlY29uZGFyeSBkYXRhIHBhY2tldHMKKyAqIHRvIHRoZSBzaW5rLiBJ dCBpcyBleHBlY3RlZCB0aGF0IGFueSBzaW11bGF0ZW5vdXMgcmVxdWVzdHMgZm9yIHZpZGVvCisg KiBwYXR0ZXJucyB3aWxsIGJlIGhhbmRsZWQgYmVmb3JlIHRoZSBhdWRpbyBwYXR0ZXJuIGlzIHNl bnQgdG8gdGhlIHNpbmsuCisgKi8KK3N0YXRpYyBpbnQgZHBfbGlua19wcm9jZXNzX2F1ZGlvX3Bh dHRlcm5fcmVxdWVzdChzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5rKQoreworCWlmICghZHBf bGlua19pc19hdWRpb19wYXR0ZXJuX3JlcXVlc3RlZChsaW5rKSkKKwkJcmV0dXJuIC1FSU5WQUw7 CisKKwlwcl9kZWJ1Zygic2FtcGxpbmdfcmF0ZT0lcywgY2hhbm5lbF9jb3VudD0lZCwgcGF0dGVy bl90eXBlPSVzXG4iLAorCQlkcF9saW5rX2dldF9hdWRpb19zYW1wbGVfcmF0ZSgKKwkJCWxpbmst PmRwX2xpbmsudGVzdF9hdWRpby50ZXN0X2F1ZGlvX3NhbXBsaW5nX3JhdGUpLAorCQlsaW5rLT5k cF9saW5rLnRlc3RfYXVkaW8udGVzdF9hdWRpb19jaGFubmVsX2NvdW50LAorCQlkcF9saW5rX2dl dF9hdWRpb190ZXN0X3BhdHRlcm4oCisJCQlsaW5rLT5kcF9saW5rLnRlc3RfYXVkaW8udGVzdF9h dWRpb19wYXR0ZXJuX3R5cGUpKTsKKworCXByX2RlYnVnKCJhdWRpb19wZXJpb2Q6IGNoMT0weCV4 LCBjaDI9MHgleCwgY2gzPTB4JXgsIGNoND0weCV4XG4iLAorCQlsaW5rLT5kcF9saW5rLnRlc3Rf YXVkaW8udGVzdF9hdWRpb19wZXJpb2RfY2hfMSwKKwkJbGluay0+ZHBfbGluay50ZXN0X2F1ZGlv LnRlc3RfYXVkaW9fcGVyaW9kX2NoXzIsCisJCWxpbmstPmRwX2xpbmsudGVzdF9hdWRpby50ZXN0 X2F1ZGlvX3BlcmlvZF9jaF8zLAorCQlsaW5rLT5kcF9saW5rLnRlc3RfYXVkaW8udGVzdF9hdWRp b19wZXJpb2RfY2hfNCk7CisKKwlwcl9kZWJ1ZygiYXVkaW9fcGVyaW9kOiBjaDU9MHgleCwgY2g2 PTB4JXgsIGNoNz0weCV4LCBjaDg9MHgleFxuIiwKKwkJbGluay0+ZHBfbGluay50ZXN0X2F1ZGlv LnRlc3RfYXVkaW9fcGVyaW9kX2NoXzUsCisJCWxpbmstPmRwX2xpbmsudGVzdF9hdWRpby50ZXN0 X2F1ZGlvX3BlcmlvZF9jaF82LAorCQlsaW5rLT5kcF9saW5rLnRlc3RfYXVkaW8udGVzdF9hdWRp b19wZXJpb2RfY2hfNywKKwkJbGluay0+ZHBfbGluay50ZXN0X2F1ZGlvLnRlc3RfYXVkaW9fcGVy aW9kX2NoXzgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRwX2xpbmtfcmVzZXRf ZGF0YShzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5rKQoreworCWxpbmstPnJlcXVlc3QgPSAo Y29uc3Qgc3RydWN0IGRwX2xpbmtfcmVxdWVzdCl7IDAgfTsKKwlsaW5rLT5kcF9saW5rLnRlc3Rf dmlkZW8gPSAoY29uc3Qgc3RydWN0IGRwX2xpbmtfdGVzdF92aWRlbyl7IDAgfTsKKwlsaW5rLT5k cF9saW5rLnRlc3RfdmlkZW8udGVzdF9iaXRfZGVwdGggPSBEUF9URVNUX0JJVF9ERVBUSF9VTktO T1dOOworCWxpbmstPmRwX2xpbmsudGVzdF9hdWRpbyA9IChjb25zdCBzdHJ1Y3QgZHBfbGlua190 ZXN0X2F1ZGlvKXsgMCB9OworCWxpbmstPmRwX2xpbmsucGh5X3BhcmFtcy5waHlfdGVzdF9wYXR0 ZXJuX3NlbCA9IDA7CisJbGluay0+ZHBfbGluay5zaW5rX3JlcXVlc3QgPSAwOworCWxpbmstPmRw X2xpbmsudGVzdF9yZXNwb25zZSA9IDA7Cit9CisKKy8qKgorICogZHBfbGlua19wcm9jZXNzX3Jl cXVlc3QoKSAtIGhhbmRsZSBIUEQgSVJRIHRyYW5zaXRpb24gdG8gSElHSAorICogQGxpbms6IHBv aW50ZXIgdG8gbGluayBtb2R1bGUgZGF0YQorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBoYW5k bGUgdGhlIEhQRCBJUlEgc3RhdGUgdHJhbnNpdGlvbnMgZnJvbSBMT1cgdG8gSElHSAorICogKGlu Y2x1ZGluZyBjYXNlcyB3aGVuIHRoZXJlIGFyZSBiYWNrIHRvIGJhY2sgSFBEIElSUSBISUdIKSBp bmRpY2F0aW5nCisgKiB0aGUgc3RhcnQgb2YgYSBuZXcgbGluayB0cmFpbmluZyByZXF1ZXN0IG9y IHNpbmsgc3RhdHVzIHVwZGF0ZS4KKyAqLworc3RhdGljIGludCBkcF9saW5rX3Byb2Nlc3NfcmVx dWVzdChzdHJ1Y3QgZHBfbGluayAqZHBfbGluaykKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qg ZHBfbGlua19wcml2YXRlICpsaW5rOworCisJaWYgKCFkcF9saW5rKSB7CisJCXByX2VycigiaW52 YWxpZCBpbnB1dFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWxpbmsgPSBjb250YWlu ZXJfb2YoZHBfbGluaywgc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSwgZHBfbGluayk7CisKKwlwcl9k ZWJ1Zygic3RhcnRcbiIpOworCisJZHBfbGlua19yZXNldF9kYXRhKGxpbmspOworCisJZHBfbGlu a19wYXJzZV9zaW5rX3N0YXR1c19maWVsZChsaW5rKTsKKworCWlmIChkcF9saW5rX2lzX3Rlc3Rf ZWRpZF9yZWFkKGxpbmspKSB7CisJCWRwX2xpbmstPnNpbmtfcmVxdWVzdCB8PSBEUF9URVNUX0xJ TktfRURJRF9SRUFEOworCQlnb3RvIGV4aXQ7CisJfQorCisJcmV0ID0gZHBfbGlua19wcm9jZXNz X2RzX3BvcnRfc3RhdHVzX2NoYW5nZShsaW5rKTsKKwlpZiAoIXJldCkgeworCQlkcF9saW5rLT5z aW5rX3JlcXVlc3QgfD0gRFNfUE9SVF9TVEFUVVNfQ0hBTkdFRDsKKwkJZ290byBleGl0OworCX0K KworCXJldCA9IGRwX2xpbmtfcHJvY2Vzc19saW5rX3RyYWluaW5nX3JlcXVlc3QobGluayk7CisJ aWYgKCFyZXQpIHsKKwkJZHBfbGluay0+c2lua19yZXF1ZXN0IHw9IERQX1RFU1RfTElOS19UUkFJ TklORzsKKwkJZ290byBleGl0OworCX0KKworCXJldCA9IGRwX2xpbmtfcHJvY2Vzc19waHlfdGVz dF9wYXR0ZXJuX3JlcXVlc3QobGluayk7CisJaWYgKCFyZXQpIHsKKwkJZHBfbGluay0+c2lua19y ZXF1ZXN0IHw9IERQX1RFU1RfTElOS19QSFlfVEVTVF9QQVRURVJOOworCQlnb3RvIGV4aXQ7CisJ fQorCisJcmV0ID0gZHBfbGlua19wcm9jZXNzX2xpbmtfc3RhdHVzX3VwZGF0ZShsaW5rKTsKKwlp ZiAoIXJldCkgeworCQlkcF9saW5rLT5zaW5rX3JlcXVlc3QgfD0gRFBfTElOS19TVEFUVVNfVVBE QVRFRDsKKwkJZ290byBleGl0OworCX0KKworCXJldCA9IGRwX2xpbmtfcHJvY2Vzc192aWRlb19w YXR0ZXJuX3JlcXVlc3QobGluayk7CisJaWYgKCFyZXQpIHsKKwkJZHBfbGluay0+c2lua19yZXF1 ZXN0IHw9IERQX1RFU1RfTElOS19WSURFT19QQVRURVJOOworCQlnb3RvIGV4aXQ7CisJfQorCisJ cmV0ID0gZHBfbGlua19wcm9jZXNzX2F1ZGlvX3BhdHRlcm5fcmVxdWVzdChsaW5rKTsKKwlpZiAo IXJldCkgeworCQlkcF9saW5rLT5zaW5rX3JlcXVlc3QgfD0gRFBfVEVTVF9MSU5LX0FVRElPX1BB VFRFUk47CisJCWdvdG8gZXhpdDsKKwl9CisKKwlwcl9kZWJ1ZygiZG9uZVxuIik7CitleGl0Ogor CXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZHBfbGlua19nZXRfY29sb3JpbWV0cnlfY29u ZmlnKHN0cnVjdCBkcF9saW5rICpkcF9saW5rKQoreworCXUzMiBjYzsKKwllbnVtIGR5bmFtaWNf cmFuZ2UgZHI7CisJc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGluazsKKworCWlmICghZHBfbGlu aykgeworCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9 CisKKwlsaW5rID0gY29udGFpbmVyX29mKGRwX2xpbmssIHN0cnVjdCBkcF9saW5rX3ByaXZhdGUs IGRwX2xpbmspOworCisJLyogdW5sZXNzIGEgdmlkZW8gcGF0dGVybiBDVFMgdGVzdCBpcyBvbmdv aW5nLCB1c2UgQ0VBX1ZFU0EgKi8KKwlpZiAoZHBfbGlua19pc192aWRlb19wYXR0ZXJuX3JlcXVl c3RlZChsaW5rKSkKKwkJZHIgPSBsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF9keW5fcmFu Z2U7CisJZWxzZQorCQlkciA9IERQX0RZTkFNSUNfUkFOR0VfUkdCX1ZFU0E7CisKKwkvKiBPbmx5 IFJHQl9WRVNBIG5kIFJHQl9DRUEgc3VwcG9ydGVkIGZvciBub3cgKi8KKwlzd2l0Y2ggKGRyKSB7 CisJY2FzZSBEUF9EWU5BTUlDX1JBTkdFX1JHQl9DRUE6CisJCWNjID0gQklUKDMpOworCQlicmVh azsKKwljYXNlIERQX0RZTkFNSUNfUkFOR0VfUkdCX1ZFU0E6CisJZGVmYXVsdDoKKwkJY2MgPSAw OworCX0KKworCXJldHVybiBjYzsKK30KKworc3RhdGljIGludCBkcF9saW5rX2FkanVzdF9sZXZl bHMoc3RydWN0IGRwX2xpbmsgKmRwX2xpbmssIHU4ICpsaW5rX3N0YXR1cykKK3sKKwlpbnQgaTsK KwlpbnQgbWF4ID0gMDsKKwl1OCBkYXRhOworCXN0cnVjdCBkcF9saW5rX3ByaXZhdGUgKmxpbms7 CisKKwlpZiAoIWRwX2xpbmspIHsKKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKKwkJcmV0 dXJuIC1FSU5WQUw7CisJfQorCisJbGluayA9IGNvbnRhaW5lcl9vZihkcF9saW5rLCBzdHJ1Y3Qg ZHBfbGlua19wcml2YXRlLCBkcF9saW5rKTsKKworCS8qIHVzZSB0aGUgbWF4IGxldmVsIGFjcm9z cyBsYW5lcyAqLworCWZvciAoaSA9IDA7IGkgPCBkcF9saW5rLT5saW5rX3BhcmFtcy5sYW5lX2Nv dW50OyBpKyspIHsKKwkJZGF0YSA9IGRybV9kcF9nZXRfYWRqdXN0X3JlcXVlc3Rfdm9sdGFnZShs aW5rX3N0YXR1cywgaSk7CisJCXByX2RlYnVnKCJsYW5lPSVkIHJlcV92b2x0YWdlX3N3aW5nPSVk XG4iLCBpLCBkYXRhKTsKKwkJaWYgKG1heCA8IGRhdGEpCisJCQltYXggPSBkYXRhOworCX0KKwor CWRwX2xpbmstPnBoeV9wYXJhbXMudl9sZXZlbCA9IG1heCA+PiBEUF9UUkFJTl9WT0xUQUdFX1NX SU5HX1NISUZUOworCisJLyogdXNlIHRoZSBtYXggbGV2ZWwgYWNyb3NzIGxhbmVzICovCisJbWF4 ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgZHBfbGluay0+bGlua19wYXJhbXMubGFuZV9jb3VudDsg aSsrKSB7CisJCWRhdGEgPSBkcm1fZHBfZ2V0X2FkanVzdF9yZXF1ZXN0X3ByZV9lbXBoYXNpcyhs aW5rX3N0YXR1cywgaSk7CisJCXByX2RlYnVnKCJsYW5lPSVkIHJlcV9wcmVfZW1waGFzaXM9JWRc biIsIGksIGRhdGEpOworCQlpZiAobWF4IDwgZGF0YSkKKwkJCW1heCA9IGRhdGE7CisJfQorCisJ ZHBfbGluay0+cGh5X3BhcmFtcy5wX2xldmVsID0gbWF4ID4+IERQX1RSQUlOX1BSRV9FTVBIQVNJ U19TSElGVDsKKworCS8qKgorCSAqIEFkanVzdCB0aGUgdm9sdGFnZSBzd2luZyBhbmQgcHJlLWVt cGhhc2lzIGxldmVsIGNvbWJpbmF0aW9uIHRvIHdpdGhpbgorCSAqIHRoZSBhbGxvd2FibGUgcmFu Z2UuCisJICovCisJaWYgKGRwX2xpbmstPnBoeV9wYXJhbXMudl9sZXZlbCA+IERQX0xJTktfVk9M VEFHRV9NQVgpIHsKKwkJcHJfZGVidWcoIlJlcXVlc3RlZCB2U3dpbmdMZXZlbD0lZCwgY2hhbmdl IHRvICVkXG4iLAorCQkJZHBfbGluay0+cGh5X3BhcmFtcy52X2xldmVsLCBEUF9MSU5LX1ZPTFRB R0VfTUFYKTsKKwkJZHBfbGluay0+cGh5X3BhcmFtcy52X2xldmVsID0gRFBfTElOS19WT0xUQUdF X01BWDsKKwl9CisKKwlpZiAoZHBfbGluay0+cGh5X3BhcmFtcy5wX2xldmVsID4gRFBfTElOS19Q UkVfRU1QSEFTSVNfTUFYKSB7CisJCXByX2RlYnVnKCJSZXF1ZXN0ZWQgcHJlRW1waGFzaXNMZXZl bD0lZCwgY2hhbmdlIHRvICVkXG4iLAorCQkJZHBfbGluay0+cGh5X3BhcmFtcy5wX2xldmVsLCBE UF9MSU5LX1BSRV9FTVBIQVNJU19NQVgpOworCQlkcF9saW5rLT5waHlfcGFyYW1zLnBfbGV2ZWwg PSBEUF9MSU5LX1BSRV9FTVBIQVNJU19NQVg7CisJfQorCisJaWYgKChkcF9saW5rLT5waHlfcGFy YW1zLnBfbGV2ZWwgPiBEUF9MSU5LX1BSRV9FTVBIQVNJU19MRVZFTF8xKQorCQkmJiAoZHBfbGlu ay0+cGh5X3BhcmFtcy52X2xldmVsID09IERQX0xJTktfVk9MVEFHRV9MRVZFTF8yKSkgeworCQlw cl9kZWJ1ZygiUmVxdWVzdGVkIHByZUVtcGhhc2lzTGV2ZWw9JWQsIGNoYW5nZSB0byAlZFxuIiwK KwkJCWRwX2xpbmstPnBoeV9wYXJhbXMucF9sZXZlbCwKKwkJCURQX0xJTktfUFJFX0VNUEhBU0lT X0xFVkVMXzEpOworCQlkcF9saW5rLT5waHlfcGFyYW1zLnBfbGV2ZWwgPSBEUF9MSU5LX1BSRV9F TVBIQVNJU19MRVZFTF8xOworCX0KKworCXByX2RlYnVnKCJhZGp1c3RlZDogdl9sZXZlbD0lZCwg cF9sZXZlbD0lZFxuIiwKKwkJZHBfbGluay0+cGh5X3BhcmFtcy52X2xldmVsLCBkcF9saW5rLT5w aHlfcGFyYW1zLnBfbGV2ZWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHBfbGlu a19zZW5kX3BzbV9yZXF1ZXN0KHN0cnVjdCBkcF9saW5rICpkcF9saW5rLCBib29sIHJlcSkKK3sK KwlzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5rOworCisJaWYgKCFkcF9saW5rKSB7CisJCXBy X2VycigiaW52YWxpZCBpbnB1dFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWxpbmsg PSBjb250YWluZXJfb2YoZHBfbGluaywgc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSwgZHBfbGluayk7 CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBkcF9saW5rX2dldF90ZXN0X2JpdHNfZGVw dGgoc3RydWN0IGRwX2xpbmsgKmRwX2xpbmssIHUzMiBicHApCit7CisJdTMyIHRiZDsKKworCS8q CisJICogRmV3IHNpbXBsaXN0aWMgcnVsZXMgYW5kIGFzc3VtcHRpb25zIG1hZGUgaGVyZToKKwkg KiAgICAxLiBUZXN0IGJpdCBkZXB0aCBpcyBiaXQgZGVwdGggcGVyIGNvbG9yIGNvbXBvbmVudAor CSAqICAgIDIuIEFzc3VtZSAzIGNvbG9yIGNvbXBvbmVudHMKKwkgKi8KKwlzd2l0Y2ggKGJwcCkg eworCWNhc2UgMTg6CisJCXRiZCA9IERQX1RFU1RfQklUX0RFUFRIXzY7CisJCWJyZWFrOworCWNh c2UgMjQ6CisJCXRiZCA9IERQX1RFU1RfQklUX0RFUFRIXzg7CisJCWJyZWFrOworCWNhc2UgMzA6 CisJCXRiZCA9IERQX1RFU1RfQklUX0RFUFRIXzEwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl0 YmQgPSBEUF9URVNUX0JJVF9ERVBUSF9VTktOT1dOOworCQlicmVhazsKKwl9CisKKwlpZiAodGJk ICE9IERQX1RFU1RfQklUX0RFUFRIX1VOS05PV04pCisJCXRiZCA9ICh0YmQgPj4gRFBfVEVTVF9C SVRfREVQVEhfU0hJRlQpOworCisJcmV0dXJuIHRiZDsKK30KKworc3RydWN0IGRwX2xpbmsgKmRw X2xpbmtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRwX2F1eCAqYXV4KQoreworCWlu dCByYyA9IDA7CisJc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGluazsKKwlzdHJ1Y3QgZHBfbGlu ayAqZHBfbGluazsKKworCWlmICghZGV2IHx8ICFhdXgpIHsKKwkJcHJfZXJyKCJpbnZhbGlkIGlu cHV0XG4iKTsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIGVycm9yOworCX0KKworCWxpbmsgPSBk ZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmxpbmspLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWxpbmsp IHsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIGVycm9yOworCX0KKworCWxpbmstPmRldiAgID0g ZGV2OworCWxpbmstPmF1eCAgID0gYXV4OworCisJZHBfbGluayA9ICZsaW5rLT5kcF9saW5rOwor CisJZHBfbGluay0+cHJvY2Vzc19yZXF1ZXN0ICAgICAgICA9IGRwX2xpbmtfcHJvY2Vzc19yZXF1 ZXN0OworCWRwX2xpbmstPmdldF90ZXN0X2JpdHNfZGVwdGggICAgPSBkcF9saW5rX2dldF90ZXN0 X2JpdHNfZGVwdGg7CisJZHBfbGluay0+Z2V0X2NvbG9yaW1ldHJ5X2NvbmZpZyA9IGRwX2xpbmtf Z2V0X2NvbG9yaW1ldHJ5X2NvbmZpZzsKKwlkcF9saW5rLT5hZGp1c3RfbGV2ZWxzICAgICAgICAg ID0gZHBfbGlua19hZGp1c3RfbGV2ZWxzOworCWRwX2xpbmstPnNlbmRfcHNtX3JlcXVlc3QgICAg ICAgPSBkcF9saW5rX3NlbmRfcHNtX3JlcXVlc3Q7CisJZHBfbGluay0+c2VuZF90ZXN0X3Jlc3Bv bnNlICAgICA9IGRwX2xpbmtfc2VuZF90ZXN0X3Jlc3BvbnNlOworCWRwX2xpbmstPnBzbV9jb25m aWcgICAgICAgICAgICAgPSBkcF9saW5rX3BzbV9jb25maWc7CisJZHBfbGluay0+c2VuZF9lZGlk X2NoZWNrc3VtICAgICA9IGRwX2xpbmtfc2VuZF9lZGlkX2NoZWNrc3VtOworCisJcmV0dXJuIGRw X2xpbms7CitlcnJvcjoKKwlyZXR1cm4gRVJSX1BUUihyYyk7Cit9CisKK3ZvaWQgZHBfbGlua19w dXQoc3RydWN0IGRwX2xpbmsgKmRwX2xpbmspCit7CisJc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAq bGluazsKKworCWlmICghZHBfbGluaykKKwkJcmV0dXJuOworCisJbGluayA9IGNvbnRhaW5lcl9v ZihkcF9saW5rLCBzdHJ1Y3QgZHBfbGlua19wcml2YXRlLCBkcF9saW5rKTsKKworCWRldm1fa2Zy ZWUobGluay0+ZGV2LCBsaW5rKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20v ZHAvZHBfbGluay5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9saW5rLmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ2ZWY0MwotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfbGluay5oCkBAIC0wLDAgKzEsMTg0IEBACisvKgorICog Q29weXJpZ2h0IChjKSAyMDEyLTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRz IHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVy c2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoK KyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpZm5kZWYgX0RQX0xJTktfSF8KKyNk ZWZpbmUgX0RQX0xJTktfSF8KKworI2luY2x1ZGUgImRwX2F1eC5oIgorCisjZGVmaW5lIERTX1BP UlRfU1RBVFVTX0NIQU5HRUQgMHgyMDAKKyNkZWZpbmUgRFBfVEVTVF9CSVRfREVQVEhfVU5LTk9X TiAweEZGRkZGRkZGCisjZGVmaW5lIERQX0xJTktfRU5VTV9TVFIoeCkJCSN4CisKK2VudW0gZHBf bGlua192b2x0YWdlX2xldmVsIHsKKwlEUF9MSU5LX1ZPTFRBR0VfTEVWRUxfMAk9IDAsCisJRFBf TElOS19WT0xUQUdFX0xFVkVMXzEJPSAxLAorCURQX0xJTktfVk9MVEFHRV9MRVZFTF8yCT0gMiwK KwlEUF9MSU5LX1ZPTFRBR0VfTUFYCT0gRFBfTElOS19WT0xUQUdFX0xFVkVMXzIsCit9OworCitl bnVtIGRwX2xpbmtfcHJlZW1hcGhhc2lzX2xldmVsIHsKKwlEUF9MSU5LX1BSRV9FTVBIQVNJU19M RVZFTF8wCT0gMCwKKwlEUF9MSU5LX1BSRV9FTVBIQVNJU19MRVZFTF8xCT0gMSwKKwlEUF9MSU5L X1BSRV9FTVBIQVNJU19MRVZFTF8yCT0gMiwKKwlEUF9MSU5LX1BSRV9FTVBIQVNJU19NQVgJPSBE UF9MSU5LX1BSRV9FTVBIQVNJU19MRVZFTF8yLAorfTsKKworc3RydWN0IGRwX2xpbmtfc2lua19j b3VudCB7CisJdTMyIGNvdW50OworCWJvb2wgY3BfcmVhZHk7Cit9OworCitzdHJ1Y3QgZHBfbGlu a190ZXN0X3ZpZGVvIHsKKwl1MzIgdGVzdF92aWRlb19wYXR0ZXJuOworCXUzMiB0ZXN0X2JpdF9k ZXB0aDsKKwl1MzIgdGVzdF9keW5fcmFuZ2U7CisJdTMyIHRlc3RfaF90b3RhbDsKKwl1MzIgdGVz dF92X3RvdGFsOworCXUzMiB0ZXN0X2hfc3RhcnQ7CisJdTMyIHRlc3Rfdl9zdGFydDsKKwl1MzIg dGVzdF9oc3luY19wb2w7CisJdTMyIHRlc3RfaHN5bmNfd2lkdGg7CisJdTMyIHRlc3RfdnN5bmNf cG9sOworCXUzMiB0ZXN0X3ZzeW5jX3dpZHRoOworCXUzMiB0ZXN0X2hfd2lkdGg7CisJdTMyIHRl c3Rfdl9oZWlnaHQ7CisJdTMyIHRlc3RfcnJfZDsKKwl1MzIgdGVzdF9ycl9uOworfTsKKworc3Ry dWN0IGRwX2xpbmtfdGVzdF9hdWRpbyB7CisJdTMyIHRlc3RfYXVkaW9fc2FtcGxpbmdfcmF0ZTsK Kwl1MzIgdGVzdF9hdWRpb19jaGFubmVsX2NvdW50OworCXUzMiB0ZXN0X2F1ZGlvX3BhdHRlcm5f dHlwZTsKKwl1MzIgdGVzdF9hdWRpb19wZXJpb2RfY2hfMTsKKwl1MzIgdGVzdF9hdWRpb19wZXJp b2RfY2hfMjsKKwl1MzIgdGVzdF9hdWRpb19wZXJpb2RfY2hfMzsKKwl1MzIgdGVzdF9hdWRpb19w ZXJpb2RfY2hfNDsKKwl1MzIgdGVzdF9hdWRpb19wZXJpb2RfY2hfNTsKKwl1MzIgdGVzdF9hdWRp b19wZXJpb2RfY2hfNjsKKwl1MzIgdGVzdF9hdWRpb19wZXJpb2RfY2hfNzsKKwl1MzIgdGVzdF9h dWRpb19wZXJpb2RfY2hfODsKK307CisKK3N0cnVjdCBkcF9saW5rX3BoeV9wYXJhbXMgeworCXUz MiBwaHlfdGVzdF9wYXR0ZXJuX3NlbDsKKwl1OCB2X2xldmVsOworCXU4IHBfbGV2ZWw7Cit9Owor CitzdHJ1Y3QgZHBfbGlua19wYXJhbXMgeworCXUzMiBsYW5lX2NvdW50OworCXUzMiBid19jb2Rl OworfTsKKworc3RydWN0IGRwX2xpbmsgeworCXUzMiBzaW5rX3JlcXVlc3Q7CisJdTMyIHRlc3Rf cmVzcG9uc2U7CisJYm9vbCBwc21fZW5hYmxlZDsKKworCXN0cnVjdCBkcF9saW5rX3NpbmtfY291 bnQgc2lua19jb3VudDsKKwlzdHJ1Y3QgZHBfbGlua190ZXN0X3ZpZGVvIHRlc3RfdmlkZW87CisJ c3RydWN0IGRwX2xpbmtfdGVzdF9hdWRpbyB0ZXN0X2F1ZGlvOworCXN0cnVjdCBkcF9saW5rX3Bo eV9wYXJhbXMgcGh5X3BhcmFtczsKKwlzdHJ1Y3QgZHBfbGlua19wYXJhbXMgbGlua19wYXJhbXM7 CisKKwl1MzIgKCpnZXRfdGVzdF9iaXRzX2RlcHRoKShzdHJ1Y3QgZHBfbGluayAqZHBfbGluaywg dTMyIGJwcCk7CisJaW50ICgqcHJvY2Vzc19yZXF1ZXN0KShzdHJ1Y3QgZHBfbGluayAqZHBfbGlu ayk7CisJaW50ICgqZ2V0X2NvbG9yaW1ldHJ5X2NvbmZpZykoc3RydWN0IGRwX2xpbmsgKmRwX2xp bmspOworCWludCAoKmFkanVzdF9sZXZlbHMpKHN0cnVjdCBkcF9saW5rICpkcF9saW5rLCB1OCAq bGlua19zdGF0dXMpOworCWludCAoKnNlbmRfcHNtX3JlcXVlc3QpKHN0cnVjdCBkcF9saW5rICpk cF9saW5rLCBib29sIHJlcSk7CisJdm9pZCAoKnNlbmRfdGVzdF9yZXNwb25zZSkoc3RydWN0IGRw X2xpbmsgKmRwX2xpbmspOworCWludCAoKnBzbV9jb25maWcpKHN0cnVjdCBkcF9saW5rICpkcF9s aW5rLAorCQlzdHJ1Y3QgZHJtX2RwX2xpbmsgKmxpbmtfaW5mbywgYm9vbCBlbmFibGUpOworCXZv aWQgKCpzZW5kX2VkaWRfY2hlY2tzdW0pKHN0cnVjdCBkcF9saW5rICpkcF9saW5rLCB1OCBjaGVj a3N1bSk7Cit9OworCitzdGF0aWMgaW5saW5lIGNoYXIgKmRwX2xpbmtfZ2V0X3BoeV90ZXN0X3Bh dHRlcm4odTMyIHBoeV90ZXN0X3BhdHRlcm5fc2VsKQoreworCXN3aXRjaCAocGh5X3Rlc3RfcGF0 dGVybl9zZWwpIHsKKwljYXNlIERQX1RFU1RfUEhZX1BBVFRFUk5fTk9ORToKKwkJcmV0dXJuIERQ X0xJTktfRU5VTV9TVFIoRFBfVEVTVF9QSFlfUEFUVEVSTl9OT05FKTsKKwljYXNlIERQX1RFU1Rf UEhZX1BBVFRFUk5fRDEwXzJfTk9fU0NSQU1CTElORzoKKwkJcmV0dXJuIERQX0xJTktfRU5VTV9T VFIoCisJCQlEUF9URVNUX1BIWV9QQVRURVJOX0QxMF8yX05PX1NDUkFNQkxJTkcpOworCWNhc2Ug RFBfVEVTVF9QSFlfUEFUVEVSTl9TWU1CT0xfRVJSX01FQVNVUkVNRU5UX0NOVDoKKwkJcmV0dXJu IERQX0xJTktfRU5VTV9TVFIoCisJCQlEUF9URVNUX1BIWV9QQVRURVJOX1NZTUJPTF9FUlJfTUVB U1VSRU1FTlRfQ05UKTsKKwljYXNlIERQX1RFU1RfUEhZX1BBVFRFUk5fUFJCUzc6CisJCXJldHVy biBEUF9MSU5LX0VOVU1fU1RSKERQX1RFU1RfUEhZX1BBVFRFUk5fUFJCUzcpOworCWNhc2UgRFBf VEVTVF9QSFlfUEFUVEVSTl84MF9CSVRfQ1VTVE9NX1BBVFRFUk46CisJCXJldHVybiBEUF9MSU5L X0VOVU1fU1RSKAorCQkJRFBfVEVTVF9QSFlfUEFUVEVSTl84MF9CSVRfQ1VTVE9NX1BBVFRFUk4p OworCWNhc2UgRFBfVEVTVF9QSFlfUEFUVEVSTl9IQlIyX0NUU19FWUVfUEFUVEVSTjoKKwkJcmV0 dXJuIERQX0xJTktfRU5VTV9TVFIoCisJCQlEUF9URVNUX1BIWV9QQVRURVJOX0hCUjJfQ1RTX0VZ RV9QQVRURVJOKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gInVua25vd24iOworCX0KK30KKworLyoq CisgKiBtZHNzX2RwX3Rlc3RfYml0X2RlcHRoX3RvX2JwcCgpIC0gY29udmVydCB0ZXN0IGJpdCBk ZXB0aCB0byBicHAKKyAqIEB0YmQ6IHRlc3QgYml0IGRlcHRoCisgKgorICogUmV0dXJucyB0aGUg Yml0cyBwZXIgcGl4ZWwgKGJwcCkgdG8gYmUgdXNlZCBjb3JyZXNwb25kaW5nIHRvIHRoZQorICog Z2l0IGJpdCBkZXB0aCB2YWx1ZS4gVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgYml0IGRlcHRo IGhhcworICogYWxyZWFkeSBiZWVuIHZhbGlkYXRlZC4KKyAqLworc3RhdGljIGlubGluZSB1MzIg ZHBfbGlua19iaXRfZGVwdGhfdG9fYnBwKHUzMiB0YmQpCit7CisJdTMyIGJwcDsKKworCS8qCisJ ICogRmV3IHNpbXBsaXN0aWMgcnVsZXMgYW5kIGFzc3VtcHRpb25zIG1hZGUgaGVyZToKKwkgKiAg ICAxLiBCaXQgZGVwdGggaXMgcGVyIGNvbG9yIGNvbXBvbmVudAorCSAqICAgIDIuIElmIGJpdCBk ZXB0aCBpcyB1bmtub3duIHJldHVybiAwCisJICogICAgMy4gQXNzdW1lIDMgY29sb3IgY29tcG9u ZW50cworCSAqLworCXN3aXRjaCAodGJkKSB7CisJY2FzZSBEUF9URVNUX0JJVF9ERVBUSF82Ogor CQlicHAgPSAxODsKKwkJYnJlYWs7CisJY2FzZSBEUF9URVNUX0JJVF9ERVBUSF84OgorCQlicHAg PSAyNDsKKwkJYnJlYWs7CisJY2FzZSBEUF9URVNUX0JJVF9ERVBUSF8xMDoKKwkJYnBwID0gMzA7 CisJCWJyZWFrOworCWNhc2UgRFBfVEVTVF9CSVRfREVQVEhfVU5LTk9XTjoKKwlkZWZhdWx0Ogor CQlicHAgPSAwOworCX0KKworCXJldHVybiBicHA7Cit9CisKKy8qKgorICogZHBfbGlua19nZXQo KSAtIGdldCB0aGUgZnVuY3Rpb25hbGl0aWVzIG9mIGRwIHRlc3QgbW9kdWxlCisgKgorICoKKyAq IHJldHVybjogYSBwb2ludGVyIHRvIGRwX2xpbmsgc3RydWN0CisgKi8KK3N0cnVjdCBkcF9saW5r ICpkcF9saW5rX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkcF9hdXggKmF1eCk7CisK Ky8qKgorICogZHBfbGlua19wdXQoKSAtIHJlbGVhc2VzIHRoZSBkcCB0ZXN0IG1vZHVsZSdzIHJl c291cmNlcworICoKKyAqIEBkcF9saW5rOiBhbiBpbnN0YW5jZSBvZiBkcF9saW5rIG1vZHVsZQor ICoKKyAqLwordm9pZCBkcF9saW5rX3B1dChzdHJ1Y3QgZHBfbGluayAqZHBfbGluayk7CisKKyNl bmRpZiAvKiBfRFBfTElOS19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9k cC9kcF9wYW5lbC5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wYW5lbC5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0OTdiNDQKLS0tIC9kZXYvbnVsbAorKysgYi9k cml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3BhbmVsLmMKQEAgLTAsMCArMSw2MjQgQEAKKy8qCisg KiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAorICogb25seSB2 ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisg KgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2RlZmluZSBwcl9mbXQoZm10KQki W2RybS1kcF0gJXM6ICIgZm10LCBfX2Z1bmNfXworCisjaW5jbHVkZSAiZHBfcGFuZWwuaCIKKwor I2luY2x1ZGUgPGRybS9kcm1fY29ubmVjdG9yLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9lZGlkLmg+ CisKKyNkZWZpbmUgRFBfUEFORUxfREVGQVVMVF9CUFAgMjQKKyNkZWZpbmUgRFBfTUFYX0RTX1BP UlRfQ09VTlQgMQorCitlbnVtIHsKKwlEUF9MSU5LX1JBVEVfTVVMVElQTElFUiA9IDI3MDAwMDAw LAorfTsKKworc3RydWN0IGRwX3BhbmVsX3ByaXZhdGUgeworCXN0cnVjdCBkZXZpY2UgKmRldjsK KwlzdHJ1Y3QgZHBfcGFuZWwgZHBfcGFuZWw7CisJc3RydWN0IGRwX2F1eCAqYXV4OworCXN0cnVj dCBkcF9saW5rICpsaW5rOworCXN0cnVjdCBkcF9jYXRhbG9nX3BhbmVsICpjYXRhbG9nOworCWJv b2wgcGFuZWxfb247CisJYm9vbCBhdXhfY2ZnX3VwZGF0ZV9kb25lOworfTsKKworc3RhdGljIGNv bnN0IHN0cnVjdCBkcF9wYW5lbF9pbmZvIGZhaWxfc2FmZSA9IHsKKwkuaF9hY3RpdmUgPSA2NDAs CisJLnZfYWN0aXZlID0gNDgwLAorCS5oX2JhY2tfcG9yY2ggPSA0OCwKKwkuaF9mcm9udF9wb3Jj aCA9IDE2LAorCS5oX3N5bmNfd2lkdGggPSA5NiwKKwkuaF9hY3RpdmVfbG93ID0gMCwKKwkudl9i YWNrX3BvcmNoID0gMzMsCisJLnZfZnJvbnRfcG9yY2ggPSAxMCwKKwkudl9zeW5jX3dpZHRoID0g MiwKKwkudl9hY3RpdmVfbG93ID0gMCwKKwkuaF9za2V3ID0gMCwKKwkucmVmcmVzaF9yYXRlID0g NjAsCisJLnBpeGVsX2Nsa19raHogPSAyNTIwMCwKKwkuYnBwID0gMjQsCit9OworCitzdGF0aWMg aW50IGRwX3BhbmVsX3JlYWRfZHBjZChzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsKQoreworCWlu dCBybGVuLCByYyA9IDA7CisJc3RydWN0IGRwX3BhbmVsX3ByaXZhdGUgKnBhbmVsOworCXN0cnVj dCBkcm1fZHBfbGluayAqbGlua19pbmZvOworCXU4ICpkcGNkLCBtYWpvciA9IDAsIG1pbm9yID0g MDsKKwl1MzIgZGZwX2NvdW50ID0gMDsKKwl1bnNpZ25lZCBsb25nIGNhcHMgPSBEUF9MSU5LX0NB UF9FTkhBTkNFRF9GUkFNSU5HOworCisJaWYgKCFkcF9wYW5lbCkgeworCQlwcl9lcnIoImludmFs aWQgaW5wdXRcbiIpOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gZW5kOworCX0KKworCWRwY2Qg PSBkcF9wYW5lbC0+ZHBjZDsKKworCXBhbmVsID0gY29udGFpbmVyX29mKGRwX3BhbmVsLCBzdHJ1 Y3QgZHBfcGFuZWxfcHJpdmF0ZSwgZHBfcGFuZWwpOworCWxpbmtfaW5mbyA9ICZkcF9wYW5lbC0+ bGlua19pbmZvOworCisJcmxlbiA9IGRybV9kcF9kcGNkX3JlYWQocGFuZWwtPmF1eC0+ZHJtX2F1 eCwgRFBfRFBDRF9SRVYsCisJCWRwY2QsIChEUF9SRUNFSVZFUl9DQVBfU0laRSArIDEpKTsKKwlp ZiAocmxlbiA8IChEUF9SRUNFSVZFUl9DQVBfU0laRSArIDEpKSB7CisJCXByX2VycigiZHBjZCBy ZWFkIGZhaWxlZCwgcmxlbj0lZFxuIiwgcmxlbik7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBl bmQ7CisJfQorCisJbGlua19pbmZvLT5yZXZpc2lvbiA9IGRwX3BhbmVsLT5kcGNkW0RQX0RQQ0Rf UkVWXTsKKworCW1ham9yID0gKGxpbmtfaW5mby0+cmV2aXNpb24gPj4gNCkgJiAweDBmOworCW1p bm9yID0gbGlua19pbmZvLT5yZXZpc2lvbiAmIDB4MGY7CisJcHJfZGVidWcoInZlcnNpb246ICVk LiVkXG4iLCBtYWpvciwgbWlub3IpOworCisJbGlua19pbmZvLT5yYXRlID0KKwkJZHJtX2RwX2J3 X2NvZGVfdG9fbGlua19yYXRlKGRwX3BhbmVsLT5kcGNkW0RQX01BWF9MSU5LX1JBVEVdKTsKKwlw cl9kZWJ1ZygibGlua19yYXRlPSVkXG4iLCBsaW5rX2luZm8tPnJhdGUpOworCisJbGlua19pbmZv LT5udW1fbGFuZXMgPSBkcF9wYW5lbC0+ZHBjZFtEUF9NQVhfTEFORV9DT1VOVF0gJgorCQkJCURQ X01BWF9MQU5FX0NPVU5UX01BU0s7CisKKwlwcl9kZWJ1ZygibGFuZV9jb3VudD0lZFxuIiwgbGlu a19pbmZvLT5udW1fbGFuZXMpOworCisJaWYgKGRybV9kcF9lbmhhbmNlZF9mcmFtZV9jYXAoZHBj ZCkpCisJCWxpbmtfaW5mby0+Y2FwYWJpbGl0aWVzIHw9IGNhcHM7CisKKwlkZnBfY291bnQgPSBk cGNkW0RQX0RPV05fU1RSRUFNX1BPUlRfQ09VTlRdICYKKwkJCQkJCURQX0RPV05fU1RSRUFNX1BP UlRfQ09VTlQ7CisKKwlpZiAoKGRwY2RbRFBfRE9XTlNUUkVBTVBPUlRfUFJFU0VOVF0gJiBEUF9E V05fU1RSTV9QT1JUX1BSRVNFTlQpCisJCSYmIChkcGNkW0RQX0RQQ0RfUkVWXSA+IDB4MTApKSB7 CisJCXJsZW4gPSBkcm1fZHBfZHBjZF9yZWFkKHBhbmVsLT5hdXgtPmRybV9hdXgsCisJCQlEUF9E T1dOU1RSRUFNX1BPUlRfMCwgZHBfcGFuZWwtPmRzX3BvcnRzLAorCQkJRFBfTUFYX0RPV05TVFJF QU1fUE9SVFMpOworCQlpZiAocmxlbiA8IERQX01BWF9ET1dOU1RSRUFNX1BPUlRTKSB7CisJCQlw cl9lcnIoImRzIHBvcnQgc3RhdHVzIGZhaWxlZCwgcmxlbj0lZFxuIiwgcmxlbik7CisJCQlyYyA9 IC1FSU5WQUw7CisJCQlnb3RvIGVuZDsKKwkJfQorCX0KKworCWlmIChkZnBfY291bnQgPiBEUF9N QVhfRFNfUE9SVF9DT1VOVCkKKwkJcHJfZGVidWcoIkRTIHBvcnQgY291bnQgJWQgZ3JlYXRlciB0 aGF0IG1heCAoJWQpIHN1cHBvcnRlZFxuIiwKKwkJCWRmcF9jb3VudCwgRFBfTUFYX0RTX1BPUlRf Q09VTlQpOworCitlbmQ6CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGRwX3BhbmVsX3Nl dF9kZWZhdWx0X2xpbmtfcGFyYW1zKHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwpCit7CisJc3Ry dWN0IGRybV9kcF9saW5rICpsaW5rX2luZm87CisJY29uc3QgaW50IGRlZmF1bHRfYndfY29kZSA9 IDE2MjAwMDsKKwljb25zdCBpbnQgZGVmYXVsdF9udW1fbGFuZXMgPSAxOworCisJaWYgKCFkcF9w YW5lbCkgeworCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsK Kwl9CisJbGlua19pbmZvID0gJmRwX3BhbmVsLT5saW5rX2luZm87CisJbGlua19pbmZvLT5yYXRl ID0gZGVmYXVsdF9id19jb2RlOworCWxpbmtfaW5mby0+bnVtX2xhbmVzID0gZGVmYXVsdF9udW1f bGFuZXM7CisJcHJfZGVidWcoImxpbmtfcmF0ZT0lZCBudW1fbGFuZXM9JWRcbiIsCisJCWxpbmtf aW5mby0+cmF0ZSwgbGlua19pbmZvLT5udW1fbGFuZXMpOworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50IGRwX3BhbmVsX3JlYWRfZWRpZChzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsLAorCXN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJaW50IHJldHJ5X2NudCA9IDA7CisJ Y29uc3QgaW50IG1heF9yZXRyeSA9IDEwOworCXN0cnVjdCBkcF9wYW5lbF9wcml2YXRlICpwYW5l bDsKKworCWlmICghZHBfcGFuZWwpIHsKKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKKwkJ cmV0dXJuIC1FSU5WQUw7CisJfQorCisJcGFuZWwgPSBjb250YWluZXJfb2YoZHBfcGFuZWwsIHN0 cnVjdCBkcF9wYW5lbF9wcml2YXRlLCBkcF9wYW5lbCk7CisKKwlkbyB7CisJCWtmcmVlKGRwX3Bh bmVsLT5lZGlkKTsKKwkJZHBfcGFuZWwtPmVkaWQgPSBkcm1fZ2V0X2VkaWQoY29ubmVjdG9yLAor CQkJCQkgICAgICAmcGFuZWwtPmF1eC0+ZHJtX2F1eC0+ZGRjKTsKKwkJaWYgKCFkcF9wYW5lbC0+ ZWRpZCkgeworCQkJcHJfZXJyKCJFRElEIHJlYWQgZmFpbGVkXG4iKTsKKwkJCXJldHJ5X2NudCsr OworCQkJcGFuZWwtPmF1eC0+cmVjb25maWcocGFuZWwtPmF1eCk7CisJCQlwYW5lbC0+YXV4X2Nm Z191cGRhdGVfZG9uZSA9IHRydWU7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0g d2hpbGUgKHJldHJ5X2NudCA8IG1heF9yZXRyeSk7CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKwor c3RhdGljIGludCBkcF9wYW5lbF9yZWFkX3NpbmtfY2FwcyhzdHJ1Y3QgZHBfcGFuZWwgKmRwX3Bh bmVsLAorCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJaW50IHJjID0gMDsK KwlzdHJ1Y3QgZHBfcGFuZWxfcHJpdmF0ZSAqcGFuZWw7CisKKwlpZiAoIWRwX3BhbmVsIHx8ICFj b25uZWN0b3IpIHsKKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKKwkJcmV0dXJuIC1FSU5W QUw7CisJfQorCisJcGFuZWwgPSBjb250YWluZXJfb2YoZHBfcGFuZWwsIHN0cnVjdCBkcF9wYW5l bF9wcml2YXRlLCBkcF9wYW5lbCk7CisKKwlyYyA9IGRwX3BhbmVsX3JlYWRfZHBjZChkcF9wYW5l bCk7CisJaWYgKHJjIHx8ICFpc19saW5rX3JhdGVfdmFsaWQoZHJtX2RwX2xpbmtfcmF0ZV90b19i d19jb2RlKAorCQlkcF9wYW5lbC0+bGlua19pbmZvLnJhdGUpKSB8fCAhaXNfbGFuZV9jb3VudF92 YWxpZCgKKwkJZHBfcGFuZWwtPmxpbmtfaW5mby5udW1fbGFuZXMpIHx8CisJCSgoZHJtX2RwX2xp bmtfcmF0ZV90b19id19jb2RlKGRwX3BhbmVsLT5saW5rX2luZm8ucmF0ZSkpID4KKwkJZHBfcGFu ZWwtPm1heF9id19jb2RlKSkgeworCQlpZiAoKHJjID09IC1FVElNRURPVVQpIHx8IChyYyA9PSAt RU5PREVWKSkgeworCQkJcHJfZXJyKCJEUENEIHJlYWQgZmFpbGVkLCByZXR1cm4gZWFybHlcbiIp OworCQkJcmV0dXJuIHJjOworCQl9CisJCXByX2VycigicGFuZWwgZHBjZCByZWFkIGZhaWxlZC9p bmNvcnJlY3QsIHNldCBkZWZhdWx0IHBhcmFtc1xuIik7CisJCWRwX3BhbmVsX3NldF9kZWZhdWx0 X2xpbmtfcGFyYW1zKGRwX3BhbmVsKTsKKwl9CisKKwlyYyA9IGRwX3BhbmVsX3JlYWRfZWRpZChk cF9wYW5lbCwgY29ubmVjdG9yKTsKKwlpZiAocmMpIHsKKwkJcHJfZXJyKCJwYW5lbCBlZGlkIHJl YWQgZmFpbGVkLCBzZXQgZmFpbHNhZmUgbW9kZVxuIik7CisJCXJldHVybiByYzsKKwl9CisKKwlp ZiAocGFuZWwtPmF1eF9jZmdfdXBkYXRlX2RvbmUpIHsKKwkJcHJfZGVidWcoInJlYWQgRFBDRCB3 aXRoIHVwZGF0ZWQgQVVYIGNvbmZpZ1xuIik7CisJCWRwX3BhbmVsX3JlYWRfZHBjZChkcF9wYW5l bCk7CisJCXBhbmVsLT5hdXhfY2ZnX3VwZGF0ZV9kb25lID0gZmFsc2U7CisJfQorCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyB1MzIgZHBfcGFuZWxfZ2V0X3N1cHBvcnRlZF9icHAoc3RydWN0IGRw X3BhbmVsICpkcF9wYW5lbCwKKwkJdTMyIG1vZGVfZWRpZF9icHAsIHUzMiBtb2RlX3BjbGtfa2h6 KQoreworCXN0cnVjdCBkcm1fZHBfbGluayAqbGlua19pbmZvOworCWNvbnN0IHUzMiBtYXhfc3Vw cG9ydGVkX2JwcCA9IDMwLCBtaW5fc3VwcG9ydGVkX2JwcCA9IDE4OworCXUzMiBicHAgPSAwLCBk YXRhX3JhdGVfa2h6ID0gMDsKKworCWJwcCA9IG1pbl90KHUzMiwgbW9kZV9lZGlkX2JwcCwgbWF4 X3N1cHBvcnRlZF9icHApOworCisJbGlua19pbmZvID0gJmRwX3BhbmVsLT5saW5rX2luZm87CisJ ZGF0YV9yYXRlX2toeiA9IGxpbmtfaW5mby0+bnVtX2xhbmVzICogbGlua19pbmZvLT5yYXRlICog ODsKKworCXdoaWxlIChicHAgPiBtaW5fc3VwcG9ydGVkX2JwcCkgeworCQlpZiAobW9kZV9wY2xr X2toeiAqIGJwcCA8PSBkYXRhX3JhdGVfa2h6KQorCQkJYnJlYWs7CisJCWJwcCAtPSA2OworCX0K KworCXJldHVybiBicHA7Cit9CisKK3N0YXRpYyB1MzIgZHBfcGFuZWxfZ2V0X21vZGVfYnBwKHN0 cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwsCisJCXUzMiBtb2RlX2VkaWRfYnBwLCB1MzIgbW9kZV9w Y2xrX2toeikKK3sKKwlzdHJ1Y3QgZHBfcGFuZWxfcHJpdmF0ZSAqcGFuZWw7CisJdTMyIGJwcCA9 IG1vZGVfZWRpZF9icHA7CisKKwlpZiAoIWRwX3BhbmVsIHx8ICFtb2RlX2VkaWRfYnBwIHx8ICFt b2RlX3BjbGtfa2h6KSB7CisJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7CisJCXJldHVybiAw OworCX0KKworCXBhbmVsID0gY29udGFpbmVyX29mKGRwX3BhbmVsLCBzdHJ1Y3QgZHBfcGFuZWxf cHJpdmF0ZSwgZHBfcGFuZWwpOworCisJaWYgKGRwX3BhbmVsLT52aWRlb190ZXN0KQorCQlicHAg PSBkcF9saW5rX2JpdF9kZXB0aF90b19icHAoCisJCQkJcGFuZWwtPmxpbmstPnRlc3RfdmlkZW8u dGVzdF9iaXRfZGVwdGgpOworCWVsc2UKKwkJYnBwID0gZHBfcGFuZWxfZ2V0X3N1cHBvcnRlZF9i cHAoZHBfcGFuZWwsIG1vZGVfZWRpZF9icHAsCisJCQkJbW9kZV9wY2xrX2toeik7CisKKwlyZXR1 cm4gYnBwOworfQorCitzdGF0aWMgdm9pZCBkcF9wYW5lbF9zZXRfdGVzdF9tb2RlKHN0cnVjdCBk cF9wYW5lbF9wcml2YXRlICpwYW5lbCwKKwkJc3RydWN0IGRwX2Rpc3BsYXlfbW9kZSAqbW9kZSkK K3sKKwlzdHJ1Y3QgZHBfcGFuZWxfaW5mbyAqcGluZm8gPSBOVUxMOworCXN0cnVjdCBkcF9saW5r X3Rlc3RfdmlkZW8gKnRlc3RfaW5mbyA9IE5VTEw7CisKKwlpZiAoIXBhbmVsKSB7CisJCXByX2Vy cigiaW52YWxpZCBwYXJhbXNcbiIpOworCQlyZXR1cm47CisJfQorCisJcGluZm8gPSAmbW9kZS0+ dGltaW5nOworCXRlc3RfaW5mbyA9ICZwYW5lbC0+bGluay0+dGVzdF92aWRlbzsKKworCXBpbmZv LT5oX2FjdGl2ZSA9IHRlc3RfaW5mby0+dGVzdF9oX3dpZHRoOworCXBpbmZvLT5oX3N5bmNfd2lk dGggPSB0ZXN0X2luZm8tPnRlc3RfaHN5bmNfd2lkdGg7CisJcGluZm8tPmhfYmFja19wb3JjaCA9 IHRlc3RfaW5mby0+dGVzdF9oX3N0YXJ0IC0KKwkJdGVzdF9pbmZvLT50ZXN0X2hzeW5jX3dpZHRo OworCXBpbmZvLT5oX2Zyb250X3BvcmNoID0gdGVzdF9pbmZvLT50ZXN0X2hfdG90YWwgLQorCQko dGVzdF9pbmZvLT50ZXN0X2hfc3RhcnQgKyB0ZXN0X2luZm8tPnRlc3RfaF93aWR0aCk7CisKKwlw aW5mby0+dl9hY3RpdmUgPSB0ZXN0X2luZm8tPnRlc3Rfdl9oZWlnaHQ7CisJcGluZm8tPnZfc3lu Y193aWR0aCA9IHRlc3RfaW5mby0+dGVzdF92c3luY193aWR0aDsKKwlwaW5mby0+dl9iYWNrX3Bv cmNoID0gdGVzdF9pbmZvLT50ZXN0X3Zfc3RhcnQgLQorCQl0ZXN0X2luZm8tPnRlc3RfdnN5bmNf d2lkdGg7CisJcGluZm8tPnZfZnJvbnRfcG9yY2ggPSB0ZXN0X2luZm8tPnRlc3Rfdl90b3RhbCAt CisJCSh0ZXN0X2luZm8tPnRlc3Rfdl9zdGFydCArIHRlc3RfaW5mby0+dGVzdF92X2hlaWdodCk7 CisKKwlwaW5mby0+YnBwID0gZHBfbGlua19iaXRfZGVwdGhfdG9fYnBwKHRlc3RfaW5mby0+dGVz dF9iaXRfZGVwdGgpOworCXBpbmZvLT5oX2FjdGl2ZV9sb3cgPSB0ZXN0X2luZm8tPnRlc3RfaHN5 bmNfcG9sOworCXBpbmZvLT52X2FjdGl2ZV9sb3cgPSB0ZXN0X2luZm8tPnRlc3RfdnN5bmNfcG9s OworCisJcGluZm8tPnJlZnJlc2hfcmF0ZSA9IHRlc3RfaW5mby0+dGVzdF9ycl9uOworCXBpbmZv LT5waXhlbF9jbGtfa2h6ID0gdGVzdF9pbmZvLT50ZXN0X2hfdG90YWwgKgorCQl0ZXN0X2luZm8t PnRlc3Rfdl90b3RhbCAqIHBpbmZvLT5yZWZyZXNoX3JhdGU7CisKKwlpZiAodGVzdF9pbmZvLT50 ZXN0X3JyX2QgPT0gMCkKKwkJcGluZm8tPnBpeGVsX2Nsa19raHogLz0gMTAwMDsKKwllbHNlCisJ CXBpbmZvLT5waXhlbF9jbGtfa2h6IC89IDEwMDE7CisKKwlpZiAodGVzdF9pbmZvLT50ZXN0X2hf d2lkdGggPT0gNjQwKQorCQlwaW5mby0+cGl4ZWxfY2xrX2toeiA9IDI1MTcwOworfQorCitzdGF0 aWMgaW50IGRwX3BhbmVsX3VwZGF0ZV9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yLAorCXN0cnVjdCBlZGlkICplZGlkKQoreworCWludCByYyA9IDA7CisKKwlwcl9kZWJ1Zygi JXMgKyIsIF9fZnVuY19fKTsKKwlpZiAoZWRpZCkgeworCQlkcm1fY29ubmVjdG9yX3VwZGF0ZV9l ZGlkX3Byb3BlcnR5KGNvbm5lY3RvciwKKwkJCWVkaWQpOworCQlyYyA9IGRybV9hZGRfZWRpZF9t b2Rlcyhjb25uZWN0b3IsIGVkaWQpOworCQlwcl9kZWJ1ZygiJXMgLSIsIF9fZnVuY19fKTsKKwkJ cmV0dXJuIHJjOworCX0KKworCWRybV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoY29u bmVjdG9yLCBOVUxMKTsKKwlwcl9kZWJ1ZygiJXMgbnVsbCBlZGlkIC0iLCBfX2Z1bmNfXyk7CisJ cmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGRwX3BhbmVsX2dldF9tb2RlcyhzdHJ1Y3QgZHBf cGFuZWwgKmRwX3BhbmVsLAorCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIHN0cnVj dCBkcF9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJc3RydWN0IGRwX3BhbmVsX3ByaXZhdGUgKnBh bmVsOworCisJaWYgKCFkcF9wYW5lbCkgeworCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwor CQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwYW5lbCA9IGNvbnRhaW5lcl9vZihkcF9wYW5lbCwg c3RydWN0IGRwX3BhbmVsX3ByaXZhdGUsIGRwX3BhbmVsKTsKKworCWlmIChkcF9wYW5lbC0+dmlk ZW9fdGVzdCkgeworCQlkcF9wYW5lbF9zZXRfdGVzdF9tb2RlKHBhbmVsLCBtb2RlKTsKKwkJcmV0 dXJuIDE7CisJfSBlbHNlIGlmIChkcF9wYW5lbC0+ZWRpZCkgeworCSAgcmV0dXJuIGRwX3BhbmVs X3VwZGF0ZV9tb2Rlcyhjb25uZWN0b3IsIGRwX3BhbmVsLT5lZGlkKTsKKwl9CisKKwkvKiBmYWls LXNhZmUgbW9kZSAqLworCW1lbWNweSgmbW9kZS0+dGltaW5nLCAmZmFpbF9zYWZlLAorCQlzaXpl b2YoZmFpbF9zYWZlKSk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB1OCBkcF9wYW5lbF9nZXRf ZWRpZF9jaGVja3N1bShzdHJ1Y3QgZWRpZCAqZWRpZCkKK3sKKwlzdHJ1Y3QgZWRpZCAqbGFzdF9i bG9jayA9IE5VTEw7CisJdTggKnJhd19lZGlkID0gTlVMTDsKKworCWlmICghZWRpZCkgeworCQlw cl9lcnIoImludmFsaWQgZWRpZCBpbnB1dFxuIik7CisJCXJldHVybiAwOworCX0KKworCXJhd19l ZGlkID0gKHU4ICopZWRpZDsKKwlyYXdfZWRpZCArPSAoZWRpZC0+ZXh0ZW5zaW9ucyAqIEVESURf TEVOR1RIKTsKKwlsYXN0X2Jsb2NrID0gKHN0cnVjdCBlZGlkICopcmF3X2VkaWQ7CisKKwlpZiAo bGFzdF9ibG9jaykKKwkJcmV0dXJuIGxhc3RfYmxvY2stPmNoZWNrc3VtOworCisJcHJfZXJyKCJJ bnZhbGlkIGJsb2NrLCBubyBjaGVja3N1bVxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2 b2lkIGRwX3BhbmVsX2hhbmRsZV9zaW5rX3JlcXVlc3Qoc3RydWN0IGRwX3BhbmVsICpkcF9wYW5l bCkKK3sKKwlzdHJ1Y3QgZHBfcGFuZWxfcHJpdmF0ZSAqcGFuZWw7CisKKwlpZiAoIWRwX3BhbmVs KSB7CisJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7CisJCXJldHVybjsKKwl9CisKKwlwYW5l bCA9IGNvbnRhaW5lcl9vZihkcF9wYW5lbCwgc3RydWN0IGRwX3BhbmVsX3ByaXZhdGUsIGRwX3Bh bmVsKTsKKworCWlmIChwYW5lbC0+bGluay0+c2lua19yZXF1ZXN0ICYgRFBfVEVTVF9MSU5LX0VE SURfUkVBRCkgeworCQl1OCBjaGVja3N1bSA9IGRwX3BhbmVsX2dldF9lZGlkX2NoZWNrc3VtKGRw X3BhbmVsLT5lZGlkKTsKKworCQlwYW5lbC0+bGluay0+c2VuZF9lZGlkX2NoZWNrc3VtKHBhbmVs LT5saW5rLCBjaGVja3N1bSk7CisJCXBhbmVsLT5saW5rLT5zZW5kX3Rlc3RfcmVzcG9uc2UocGFu ZWwtPmxpbmspOworCX0KK30KKworc3RhdGljIHZvaWQgZHBfcGFuZWxfdHBnX2NvbmZpZyhzdHJ1 Y3QgZHBfcGFuZWwgKmRwX3BhbmVsLCBib29sIGVuYWJsZSkKK3sKKwl1MzIgaHN5bmNfc3RhcnRf eCwgaHN5bmNfZW5kX3g7CisJc3RydWN0IGRwX2NhdGFsb2dfcGFuZWwgKmNhdGFsb2c7CisJc3Ry dWN0IGRwX3BhbmVsX3ByaXZhdGUgKnBhbmVsOworCXN0cnVjdCBkcF9wYW5lbF9pbmZvICpwaW5m bzsKKworCWlmICghZHBfcGFuZWwpIHsKKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKKwkJ cmV0dXJuOworCX0KKworCXBhbmVsID0gY29udGFpbmVyX29mKGRwX3BhbmVsLCBzdHJ1Y3QgZHBf cGFuZWxfcHJpdmF0ZSwgZHBfcGFuZWwpOworCWNhdGFsb2cgPSBwYW5lbC0+Y2F0YWxvZzsKKwlw aW5mbyA9ICZwYW5lbC0+ZHBfcGFuZWwucGluZm87CisKKwlpZiAoIXBhbmVsLT5wYW5lbF9vbikg eworCQlwcl9kZWJ1ZygiRFAgcGFuZWwgbm90IGVuYWJsZWQsIGhhbmRsZSBUUEcgb24gbmV4dCBw YW5lbCBvblxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIWVuYWJsZSkgeworCQlwYW5lbC0+ Y2F0YWxvZy0+dHBnX2NvbmZpZyhjYXRhbG9nLCBmYWxzZSk7CisJCXJldHVybjsKKwl9CisKKwkv KiBUUEcgY29uZmlnICovCisJY2F0YWxvZy0+aHN5bmNfcGVyaW9kID0gcGluZm8tPmhfc3luY193 aWR0aCArIHBpbmZvLT5oX2JhY2tfcG9yY2ggKworCQkJcGluZm8tPmhfYWN0aXZlICsgcGluZm8t PmhfZnJvbnRfcG9yY2g7CisJY2F0YWxvZy0+dnN5bmNfcGVyaW9kID0gcGluZm8tPnZfc3luY193 aWR0aCArIHBpbmZvLT52X2JhY2tfcG9yY2ggKworCQkJcGluZm8tPnZfYWN0aXZlICsgcGluZm8t PnZfZnJvbnRfcG9yY2g7CisKKwljYXRhbG9nLT5kaXNwbGF5X3Zfc3RhcnQgPSAoKHBpbmZvLT52 X3N5bmNfd2lkdGggKworCQkJcGluZm8tPnZfYmFja19wb3JjaCkgKiBjYXRhbG9nLT5oc3luY19w ZXJpb2QpOworCWNhdGFsb2ctPmRpc3BsYXlfdl9lbmQgPSAoKGNhdGFsb2ctPnZzeW5jX3Blcmlv ZCAtCisJCQlwaW5mby0+dl9mcm9udF9wb3JjaCkgKiBjYXRhbG9nLT5oc3luY19wZXJpb2QpIC0g MTsKKworCWNhdGFsb2ctPmRpc3BsYXlfdl9zdGFydCArPSBwaW5mby0+aF9zeW5jX3dpZHRoICsg cGluZm8tPmhfYmFja19wb3JjaDsKKwljYXRhbG9nLT5kaXNwbGF5X3ZfZW5kIC09IHBpbmZvLT5o X2Zyb250X3BvcmNoOworCisJaHN5bmNfc3RhcnRfeCA9IHBpbmZvLT5oX2JhY2tfcG9yY2ggKyBw aW5mby0+aF9zeW5jX3dpZHRoOworCWhzeW5jX2VuZF94ID0gY2F0YWxvZy0+aHN5bmNfcGVyaW9k IC0gcGluZm8tPmhfZnJvbnRfcG9yY2ggLSAxOworCisJY2F0YWxvZy0+dl9zeW5jX3dpZHRoID0g cGluZm8tPnZfc3luY193aWR0aDsKKworCWNhdGFsb2ctPmhzeW5jX2N0bCA9IChjYXRhbG9nLT5o c3luY19wZXJpb2QgPDwgMTYpIHwKKwkJCXBpbmZvLT5oX3N5bmNfd2lkdGg7CisJY2F0YWxvZy0+ ZGlzcGxheV9oY3RsID0gKGhzeW5jX2VuZF94IDw8IDE2KSB8IGhzeW5jX3N0YXJ0X3g7CisKKwlw cl9lcnIoIiVzOiBjYWxsaW5nIGNhdGFsb2cgdHBnX2NvbmZpZ1xuIiwgX19mdW5jX18pOworCXBh bmVsLT5jYXRhbG9nLT50cGdfY29uZmlnKGNhdGFsb2csIHRydWUpOworfQorCitzdGF0aWMgaW50 IGRwX3BhbmVsX3RpbWluZ19jZmcoc3RydWN0IGRwX3BhbmVsICpkcF9wYW5lbCkKK3sKKwlpbnQg cmMgPSAwOworCXUzMiBkYXRhLCB0b3RhbF92ZXIsIHRvdGFsX2hvcjsKKwlzdHJ1Y3QgZHBfY2F0 YWxvZ19wYW5lbCAqY2F0YWxvZzsKKwlzdHJ1Y3QgZHBfcGFuZWxfcHJpdmF0ZSAqcGFuZWw7CisJ c3RydWN0IGRwX3BhbmVsX2luZm8gKnBpbmZvOworCisJaWYgKCFkcF9wYW5lbCkgeworCQlwcl9l cnIoImludmFsaWQgaW5wdXRcbiIpOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gZW5kOworCX0K KworCXBhbmVsID0gY29udGFpbmVyX29mKGRwX3BhbmVsLCBzdHJ1Y3QgZHBfcGFuZWxfcHJpdmF0 ZSwgZHBfcGFuZWwpOworCWNhdGFsb2cgPSBwYW5lbC0+Y2F0YWxvZzsKKwlwaW5mbyA9ICZwYW5l bC0+ZHBfcGFuZWwucGluZm87CisKKwlwcl9kZWJ1Zygid2lkdGg9JWQgaHBvcmNoPSAlZCAlZCAl ZFxuIiwKKwkJcGluZm8tPmhfYWN0aXZlLCBwaW5mby0+aF9iYWNrX3BvcmNoLAorCQlwaW5mby0+ aF9mcm9udF9wb3JjaCwgcGluZm8tPmhfc3luY193aWR0aCk7CisKKwlwcl9kZWJ1ZygiaGVpZ2h0 PSVkIHZwb3JjaD0gJWQgJWQgJWRcbiIsCisJCXBpbmZvLT52X2FjdGl2ZSwgcGluZm8tPnZfYmFj a19wb3JjaCwKKwkJcGluZm8tPnZfZnJvbnRfcG9yY2gsIHBpbmZvLT52X3N5bmNfd2lkdGgpOwor CisJdG90YWxfaG9yID0gcGluZm8tPmhfYWN0aXZlICsgcGluZm8tPmhfYmFja19wb3JjaCArCisJ CXBpbmZvLT5oX2Zyb250X3BvcmNoICsgcGluZm8tPmhfc3luY193aWR0aDsKKworCXRvdGFsX3Zl ciA9IHBpbmZvLT52X2FjdGl2ZSArIHBpbmZvLT52X2JhY2tfcG9yY2ggKworCQkJcGluZm8tPnZf ZnJvbnRfcG9yY2ggKyBwaW5mby0+dl9zeW5jX3dpZHRoOworCisJZGF0YSA9IHRvdGFsX3ZlcjsK KwlkYXRhIDw8PSAxNjsKKwlkYXRhIHw9IHRvdGFsX2hvcjsKKworCWNhdGFsb2ctPnRvdGFsID0g ZGF0YTsKKworCWRhdGEgPSAocGluZm8tPnZfYmFja19wb3JjaCArIHBpbmZvLT52X3N5bmNfd2lk dGgpOworCWRhdGEgPDw9IDE2OworCWRhdGEgfD0gKHBpbmZvLT5oX2JhY2tfcG9yY2ggKyBwaW5m by0+aF9zeW5jX3dpZHRoKTsKKworCWNhdGFsb2ctPnN5bmNfc3RhcnQgPSBkYXRhOworCisJZGF0 YSA9IHBpbmZvLT52X3N5bmNfd2lkdGg7CisJZGF0YSA8PD0gMTY7CisJZGF0YSB8PSAocGluZm8t PnZfYWN0aXZlX2xvdyA8PCAzMSk7CisJZGF0YSB8PSBwaW5mby0+aF9zeW5jX3dpZHRoOworCWRh dGEgfD0gKHBpbmZvLT5oX2FjdGl2ZV9sb3cgPDwgMTUpOworCisJY2F0YWxvZy0+d2lkdGhfYmxh bmtpbmcgPSBkYXRhOworCisJZGF0YSA9IHBpbmZvLT52X2FjdGl2ZTsKKwlkYXRhIDw8PSAxNjsK KwlkYXRhIHw9IHBpbmZvLT5oX2FjdGl2ZTsKKworCWNhdGFsb2ctPmRwX2FjdGl2ZSA9IGRhdGE7 CisKKwlwYW5lbC0+Y2F0YWxvZy0+dGltaW5nX2NmZyhjYXRhbG9nKTsKKwlwYW5lbC0+cGFuZWxf b24gPSB0cnVlOworZW5kOgorCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBkcF9wYW5lbF9p bml0X3BhbmVsX2luZm8oc3RydWN0IGRwX3BhbmVsICpkcF9wYW5lbCkKK3sKKwlpbnQgcmMgPSAw OworCXN0cnVjdCBkcF9wYW5lbF9pbmZvICpwaW5mbzsKKworCWlmICghZHBfcGFuZWwpIHsKKwkJ cHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIGVuZDsK Kwl9CisKKwlwaW5mbyA9ICZkcF9wYW5lbC0+cGluZm87CisKKwkvKgorCSAqIHByaW50IHJlc29s dXRpb24gaW5mbyBhcyB0aGlzIGlzIGEgcmVzdWx0CisJICogb2YgdXNlciBpbml0aWF0ZWQgYWN0 aW9uIG9mIGNhYmxlIGNvbm5lY3Rpb24KKwkgKi8KKwlwcl9pbmZvKCJTRVQgTkVXIFJFU09MVVRJ T046XG4iKTsKKwlwcl9pbmZvKCIlZHglZEAlZGZwc1xuIiwgcGluZm8tPmhfYWN0aXZlLAorCQlw aW5mby0+dl9hY3RpdmUsIHBpbmZvLT5yZWZyZXNoX3JhdGUpOworCXByX2luZm8oImhfcG9yY2hl cyhiYWNrfGZyb250fHdpZHRoKSA9ICglZHwlZHwlZClcbiIsCisJCQlwaW5mby0+aF9iYWNrX3Bv cmNoLAorCQkJcGluZm8tPmhfZnJvbnRfcG9yY2gsCisJCQlwaW5mby0+aF9zeW5jX3dpZHRoKTsK Kwlwcl9pbmZvKCJ2X3BvcmNoZXMoYmFja3xmcm9udHx3aWR0aCkgPSAoJWR8JWR8JWQpXG4iLAor CQkJcGluZm8tPnZfYmFja19wb3JjaCwKKwkJCXBpbmZvLT52X2Zyb250X3BvcmNoLAorCQkJcGlu Zm8tPnZfc3luY193aWR0aCk7CisJcHJfaW5mbygicGl4ZWwgY2xvY2sgKEtIeik9KCVkKVxuIiwg cGluZm8tPnBpeGVsX2Nsa19raHopOworCXByX2luZm8oImJwcCA9ICVkXG4iLCBwaW5mby0+YnBw KTsKKwlwcl9pbmZvKCJhY3RpdmUgbG93IChofHYpPSglZHwlZClcbiIsIHBpbmZvLT5oX2FjdGl2 ZV9sb3csCisJCXBpbmZvLT52X2FjdGl2ZV9sb3cpOworCisJcGluZm8tPmJwcCA9IG1heF90KHUz MiwgMTgsIG1pbl90KHUzMiwgcGluZm8tPmJwcCwgMzApKTsKKwlwcl9pbmZvKCJ1cGRhdGVkIGJw cCA9ICVkXG4iLCBwaW5mby0+YnBwKTsKK2VuZDoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB1 MzIgZHBfcGFuZWxfZ2V0X21pbl9yZXFfbGlua19yYXRlKHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFu ZWwpCit7CisJY29uc3QgdTMyIGVuY29kaW5nX2ZhY3R4MTAgPSA4OworCXUzMiBtaW5fbGlua19y YXRlX2toeiA9IDAsIGxhbmVfY250OworCXN0cnVjdCBkcF9wYW5lbF9pbmZvICpwaW5mbzsKKwor CWlmICghZHBfcGFuZWwpIHsKKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKKwkJZ290byBl bmQ7CisJfQorCisJbGFuZV9jbnQgPSBkcF9wYW5lbC0+bGlua19pbmZvLm51bV9sYW5lczsKKwlw aW5mbyA9ICZkcF9wYW5lbC0+cGluZm87CisKKwkvKiBudW1fbGFuZXMgKiBsYW5lX2NvdW50ICog OCA+PSBwY2xrICogYnBwICogMTAgKi8KKwltaW5fbGlua19yYXRlX2toeiA9IHBpbmZvLT5waXhl bF9jbGtfa2h6IC8KKwkJCQkobGFuZV9jbnQgKiBlbmNvZGluZ19mYWN0eDEwKTsKKwltaW5fbGlu a19yYXRlX2toeiAqPSBwaW5mby0+YnBwOworCisJcHJfZGVidWcoIm1pbiBsY2xrIHJlcT0lZCBr aHogZm9yIHBjbGs9JWQga2h6LCBsYW5lcz0lZCwgYnBwPSVkXG4iLAorCQltaW5fbGlua19yYXRl X2toeiwgcGluZm8tPnBpeGVsX2Nsa19raHosIGxhbmVfY250LAorCQlwaW5mby0+YnBwKTsKK2Vu ZDoKKwlyZXR1cm4gbWluX2xpbmtfcmF0ZV9raHo7Cit9CisKK3N0cnVjdCBkcF9wYW5lbCAqZHBf cGFuZWxfZ2V0KHN0cnVjdCBkcF9wYW5lbF9pbiAqaW4pCit7CisJaW50IHJjID0gMDsKKwlzdHJ1 Y3QgZHBfcGFuZWxfcHJpdmF0ZSAqcGFuZWw7CisJc3RydWN0IGRwX3BhbmVsICpkcF9wYW5lbDsK KworCWlmICghaW4tPmRldiB8fCAhaW4tPmNhdGFsb2cgfHwgIWluLT5hdXggfHwgIWluLT5saW5r KSB7CisJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290 byBlcnJvcjsKKwl9CisKKwlwYW5lbCA9IGRldm1fa3phbGxvYyhpbi0+ZGV2LCBzaXplb2YoKnBh bmVsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwYW5lbCkgeworCQlyYyA9IC1FTk9NRU07CisJCWdv dG8gZXJyb3I7CisJfQorCisJcGFuZWwtPmRldiA9IGluLT5kZXY7CisJcGFuZWwtPmF1eCA9IGlu LT5hdXg7CisJcGFuZWwtPmNhdGFsb2cgPSBpbi0+Y2F0YWxvZzsKKwlwYW5lbC0+bGluayA9IGlu LT5saW5rOworCisJZHBfcGFuZWwgPSAmcGFuZWwtPmRwX3BhbmVsOworCWRwX3BhbmVsLT5tYXhf YndfY29kZSA9IERQX0xJTktfQldfOF8xOworCXBhbmVsLT5hdXhfY2ZnX3VwZGF0ZV9kb25lID0g ZmFsc2U7CisKKwlkcF9wYW5lbC0+aW5pdF9pbmZvID0gZHBfcGFuZWxfaW5pdF9wYW5lbF9pbmZv OworCWRwX3BhbmVsLT50aW1pbmdfY2ZnID0gZHBfcGFuZWxfdGltaW5nX2NmZzsKKwlkcF9wYW5l bC0+cmVhZF9zaW5rX2NhcHMgPSBkcF9wYW5lbF9yZWFkX3NpbmtfY2FwczsKKwlkcF9wYW5lbC0+ Z2V0X21pbl9yZXFfbGlua19yYXRlID0gZHBfcGFuZWxfZ2V0X21pbl9yZXFfbGlua19yYXRlOwor CWRwX3BhbmVsLT5nZXRfbW9kZV9icHAgPSBkcF9wYW5lbF9nZXRfbW9kZV9icHA7CisJZHBfcGFu ZWwtPmdldF9tb2RlcyA9IGRwX3BhbmVsX2dldF9tb2RlczsKKwlkcF9wYW5lbC0+aGFuZGxlX3Np bmtfcmVxdWVzdCA9IGRwX3BhbmVsX2hhbmRsZV9zaW5rX3JlcXVlc3Q7CisJZHBfcGFuZWwtPnRw Z19jb25maWcgPSBkcF9wYW5lbF90cGdfY29uZmlnOworCisJcmV0dXJuIGRwX3BhbmVsOworZXJy b3I6CisJcmV0dXJuIEVSUl9QVFIocmMpOworfQorCit2b2lkIGRwX3BhbmVsX3B1dChzdHJ1Y3Qg ZHBfcGFuZWwgKmRwX3BhbmVsKQoreworCXN0cnVjdCBkcF9wYW5lbF9wcml2YXRlICpwYW5lbDsK KworCWlmICghZHBfcGFuZWwpCisJCXJldHVybjsKKworCXBhbmVsID0gY29udGFpbmVyX29mKGRw X3BhbmVsLCBzdHJ1Y3QgZHBfcGFuZWxfcHJpdmF0ZSwgZHBfcGFuZWwpOworCisJa2ZyZWUoZHBf cGFuZWwtPmVkaWQpOworCWRwX3BhbmVsLT5lZGlkID0gTlVMTDsKKwlkZXZtX2tmcmVlKHBhbmVs LT5kZXYsIHBhbmVsKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBf cGFuZWwuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcGFuZWwuaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjgwMmRmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9kcC9kcF9wYW5lbC5oCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogQ29w eXJpZ2h0IChjKSAyMDEyLTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJl c2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lv biAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpZm5kZWYgX0RQX1BBTkVMX0hfCisjZGVm aW5lIF9EUF9QQU5FTF9IXworCisjaW5jbHVkZSA8ZHJtL21zbV9kcm0uaD4KKworI2luY2x1ZGUg ImRwX2F1eC5oIgorI2luY2x1ZGUgImRwX2xpbmsuaCIKKyNpbmNsdWRlICJkcF9leHRjb24uaCIK Kworc3RydWN0IGVkaWQ7CisKK2VudW0gZHBfbGFuZV9jb3VudCB7CisJRFBfTEFORV9DT1VOVF8x CT0gMSwKKwlEUF9MQU5FX0NPVU5UXzIJPSAyLAorCURQX0xBTkVfQ09VTlRfNAk9IDQsCit9Owor CisjZGVmaW5lIERQX01BWF9ET1dOU1RSRUFNX1BPUlRTIDB4MTAKKworc3RydWN0IGRwX3BhbmVs X2luZm8geworCXUzMiBoX2FjdGl2ZTsKKwl1MzIgdl9hY3RpdmU7CisJdTMyIGhfYmFja19wb3Jj aDsKKwl1MzIgaF9mcm9udF9wb3JjaDsKKwl1MzIgaF9zeW5jX3dpZHRoOworCXUzMiBoX2FjdGl2 ZV9sb3c7CisJdTMyIHZfYmFja19wb3JjaDsKKwl1MzIgdl9mcm9udF9wb3JjaDsKKwl1MzIgdl9z eW5jX3dpZHRoOworCXUzMiB2X2FjdGl2ZV9sb3c7CisJdTMyIGhfc2tldzsKKwl1MzIgcmVmcmVz aF9yYXRlOworCXUzMiBwaXhlbF9jbGtfa2h6OworCXUzMiBicHA7Cit9OworCitzdHJ1Y3QgZHBf ZGlzcGxheV9tb2RlIHsKKwlzdHJ1Y3QgZHBfcGFuZWxfaW5mbyB0aW1pbmc7CisJdTMyIGNhcGFi aWxpdGllczsKK307CisKK3N0cnVjdCBkcF9wYW5lbF9pbiB7CisJc3RydWN0IGRldmljZSAqZGV2 OworCXN0cnVjdCBkcF9hdXggKmF1eDsKKwlzdHJ1Y3QgZHBfbGluayAqbGluazsKKwlzdHJ1Y3Qg ZHBfY2F0YWxvZ19wYW5lbCAqY2F0YWxvZzsKK307CisKK3N0cnVjdCBkcF9wYW5lbCB7CisJLyog ZHBjZCByYXcgZGF0YSAqLworCXU4IGRwY2RbRFBfUkVDRUlWRVJfQ0FQX1NJWkUgKyAxXTsKKwl1 OCBkc19wb3J0c1tEUF9NQVhfRE9XTlNUUkVBTV9QT1JUU107CisKKwlzdHJ1Y3QgZHJtX2RwX2xp bmsgbGlua19pbmZvOworCXN0cnVjdCBlZGlkICplZGlkOworCXN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3I7CisJc3RydWN0IGRwX3BhbmVsX2luZm8gcGluZm87CisJYm9vbCB2aWRlb190 ZXN0OworCisJdTMyIHZpYzsKKwl1MzIgbWF4X3BjbGtfa2h6OworCisJdTMyIG1heF9id19jb2Rl OworCWludCAoKmluaXRfaW5mbykoc3RydWN0IGRwX3BhbmVsICpkcF9wYW5lbCk7CisJaW50ICgq ZGVpbml0KShzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsKTsKKwlpbnQgKCp0aW1pbmdfY2ZnKShz dHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsKTsKKwlpbnQgKCpyZWFkX3NpbmtfY2Fwcykoc3RydWN0 IGRwX3BhbmVsICpkcF9wYW5lbCwKKwkJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7 CisJdTMyICgqZ2V0X21pbl9yZXFfbGlua19yYXRlKShzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVs KTsKKwl1MzIgKCpnZXRfbW9kZV9icHApKHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwsIHUzMiBt b2RlX21heF9icHAsCisJCQl1MzIgbW9kZV9wY2xrX2toeik7CisJaW50ICgqZ2V0X21vZGVzKShz dHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsLAorCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yLCBzdHJ1Y3QgZHBfZGlzcGxheV9tb2RlICptb2RlKTsKKwl2b2lkICgqaGFuZGxlX3Npbmtf cmVxdWVzdCkoc3RydWN0IGRwX3BhbmVsICpkcF9wYW5lbCk7CisJdm9pZCAoKnRwZ19jb25maWcp KHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwsIGJvb2wgZW5hYmxlKTsKK307CisKKy8qKgorICog aXNfbGlua19yYXRlX3ZhbGlkKCkgLSB2YWxpZGF0ZXMgdGhlIGxpbmsgcmF0ZQorICogQGxhbmVf cmF0ZTogbGluayByYXRlIHJlcXVlc3RlZCBieSB0aGUgc2luaworICoKKyAqIFJldHVybnMgdHJ1 ZSBpZiB0aGUgcmVxdWVzdGVkIGxpbmsgcmF0ZSBpcyBzdXBwb3J0ZWQuCisgKi8KK3N0YXRpYyBp bmxpbmUgYm9vbCBpc19saW5rX3JhdGVfdmFsaWQodTMyIGJ3X2NvZGUpCit7CisJcmV0dXJuICgo YndfY29kZSA9PSBEUF9MSU5LX0JXXzFfNjIpIHx8CisJCShid19jb2RlID09IERQX0xJTktfQldf Ml83KSB8fAorCQkoYndfY29kZSA9PSBEUF9MSU5LX0JXXzVfNCkgfHwKKwkJKGJ3X2NvZGUgPT0g RFBfTElOS19CV184XzEpKTsKK30KKworLyoqCisgKiBkcF9saW5rX2lzX2xhbmVfY291bnRfdmFs aWQoKSAtIHZhbGlkYXRlcyB0aGUgbGFuZSBjb3VudAorICogQGxhbmVfY291bnQ6IGxhbmUgY291 bnQgcmVxdWVzdGVkIGJ5IHRoZSBzaW5rCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSByZXF1 ZXN0ZWQgbGFuZSBjb3VudCBpcyBzdXBwb3J0ZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBp c19sYW5lX2NvdW50X3ZhbGlkKHUzMiBsYW5lX2NvdW50KQoreworCXJldHVybiAobGFuZV9jb3Vu dCA9PSBEUF9MQU5FX0NPVU5UXzEpIHx8CisJCShsYW5lX2NvdW50ID09IERQX0xBTkVfQ09VTlRf MikgfHwKKwkJKGxhbmVfY291bnQgPT0gRFBfTEFORV9DT1VOVF80KTsKK30KKworc3RydWN0IGRw X3BhbmVsICpkcF9wYW5lbF9nZXQoc3RydWN0IGRwX3BhbmVsX2luICppbik7Cit2b2lkIGRwX3Bh bmVsX3B1dChzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsKTsKKyNlbmRpZiAvKiBfRFBfUEFORUxf SF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcGFyc2VyLmMgYi9k cml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3BhcnNlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLmEzNjZkYzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0v bXNtL2RwL2RwX3BhcnNlci5jCkBAIC0wLDAgKzEsNjc5IEBACisvKgorICogQ29weXJpZ2h0IChj KSAyMDEyLTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisgKgorICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkJIltkcm0tZHBdICVzOiAi IGZtdCwgX19mdW5jX18KKworI2luY2x1ZGUgPGxpbnV4L29mX2dwaW8uaD4KKworI2luY2x1ZGUg ImRwX3BhcnNlci5oIgorCitzdGF0aWMgdm9pZCBkcF9wYXJzZXJfdW5tYXBfaW9fcmVzb3VyY2Vz KHN0cnVjdCBkcF9wYXJzZXIgKnBhcnNlcikKK3sKKwlzdHJ1Y3QgZHBfaW8gKmlvID0gJnBhcnNl ci0+aW87CisKKwltc21fZHNzX2lvdW5tYXAoJmlvLT5kcF9haGIpOworCW1zbV9kc3NfaW91bm1h cCgmaW8tPmRwX2F1eCk7CisJbXNtX2Rzc19pb3VubWFwKCZpby0+ZHBfbGluayk7CisJbXNtX2Rz c19pb3VubWFwKCZpby0+ZHBfcDApOworCW1zbV9kc3NfaW91bm1hcCgmaW8tPnBoeV9pbyk7CisJ bXNtX2Rzc19pb3VubWFwKCZpby0+bG5fdHgwX2lvKTsKKwltc21fZHNzX2lvdW5tYXAoJmlvLT5s bl90eDBfaW8pOworCW1zbV9kc3NfaW91bm1hcCgmaW8tPmRwX3BsbF9pbyk7CisJbXNtX2Rzc19p b3VubWFwKCZpby0+ZHBfY2NfaW8pOworCW1zbV9kc3NfaW91bm1hcCgmaW8tPnVzYjNfZHBfY29t KTsKKwltc21fZHNzX2lvdW5tYXAoJmlvLT5xZnByb21faW8pOworfQorCitzdGF0aWMgaW50IGRw X3BhcnNlcl9jdHJsX3JlcyhzdHJ1Y3QgZHBfcGFyc2VyICpwYXJzZXIpCit7CisJaW50IHJjID0g MDsKKwl1MzIgaW5kZXg7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHBhcnNlci0+ cGRldjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUgPSBwYXJzZXItPnBkZXYtPmRldi5v Zl9ub2RlOworCXN0cnVjdCBkcF9pbyAqaW8gPSAmcGFyc2VyLT5pbzsKKworCXJjID0gb2ZfcHJv cGVydHlfcmVhZF91MzIob2Zfbm9kZSwgImNlbGwtaW5kZXgiLCAmaW5kZXgpOworCWlmIChyYykg eworCQlwcl9lcnIoImNlbGwtaW5kZXggbm90IHNwZWNpZmllZCwgcmM9JWRcbiIsIHJjKTsKKwkJ Z290byBlcnI7CisJfQorCisJcmMgPSBtc21fZHNzX2lvcmVtYXBfYnluYW1lKHBkZXYsICZpby0+ ZHBfYWhiLCAiZHBfYWhiIik7CisJaWYgKHJjKSB7CisJCXByX2VycigidW5hYmxlIHRvIHJlbWFw IGRwIGlvIHJlc291cmNlc1xuIik7CisJCWdvdG8gZXJyOworCX0KKworCXJjID0gbXNtX2Rzc19p b3JlbWFwX2J5bmFtZShwZGV2LCAmaW8tPmRwX2F1eCwgImRwX2F1eCIpOworCWlmIChyYykgewor CQlwcl9lcnIoInVuYWJsZSB0byByZW1hcCBkcCBpbyByZXNvdXJjZXNcbiIpOworCQlnb3RvIGVy cjsKKwl9CisKKwlyYyA9IG1zbV9kc3NfaW9yZW1hcF9ieW5hbWUocGRldiwgJmlvLT5kcF9saW5r LCAiZHBfbGluayIpOworCWlmIChyYykgeworCQlwcl9lcnIoInVuYWJsZSB0byByZW1hcCBkcCBp byByZXNvdXJjZXNcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwlyYyA9IG1zbV9kc3NfaW9yZW1h cF9ieW5hbWUocGRldiwgJmlvLT5kcF9wMCwgImRwX3AwIik7CisJaWYgKHJjKSB7CisJCXByX2Vy cigidW5hYmxlIHRvIHJlbWFwIGRwIGlvIHJlc291cmNlc1xuIik7CisJCWdvdG8gZXJyOworCX0K KworCXJjID0gbXNtX2Rzc19pb3JlbWFwX2J5bmFtZShwZGV2LCAmaW8tPnBoeV9pbywgImRwX3Bo eSIpOworCWlmIChyYykgeworCQlwcl9lcnIoInVuYWJsZSB0byByZW1hcCBkcCBQSFkgcmVzb3Vy Y2VzXG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJcmMgPSBtc21fZHNzX2lvcmVtYXBfYnluYW1l KHBkZXYsICZpby0+bG5fdHgwX2lvLCAiZHBfbG5fdHgwIik7CisJaWYgKHJjKSB7CisJCXByX2Vy cigidW5hYmxlIHRvIHJlbWFwIGRwIFRYMCByZXNvdXJjZXNcbiIpOworCQlnb3RvIGVycjsKKwl9 CisKKwlyYyA9IG1zbV9kc3NfaW9yZW1hcF9ieW5hbWUocGRldiwgJmlvLT5sbl90eDFfaW8sICJk cF9sbl90eDEiKTsKKwlpZiAocmMpIHsKKwkJcHJfZXJyKCJ1bmFibGUgdG8gcmVtYXAgZHAgVFgx IHJlc291cmNlc1xuIik7CisJCWdvdG8gZXJyOworCX0KKworCXJjID0gbXNtX2Rzc19pb3JlbWFw X2J5bmFtZShwZGV2LCAmaW8tPmRwX3BsbF9pbywgImRwX3BsbCIpOworCWlmIChyYykgeworCQlw cl9lcnIoInVuYWJsZSB0byByZW1hcCBEUCBQTEwgcmVzb3VyY2VzXG4iKTsKKwkJZ290byBlcnI7 CisJfQorCisJcmMgPSBtc21fZHNzX2lvcmVtYXBfYnluYW1lKHBkZXYsICZpby0+dXNiM19kcF9j b20sICJ1c2IzX2RwX2NvbSIpOworCWlmIChyYykgeworCQlwcl9lcnIoInVuYWJsZSB0byByZW1h cCBVU0IzIERQIGNvbSByZXNvdXJjZXNcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwlpZiAobXNt X2Rzc19pb3JlbWFwX2J5bmFtZShwZGV2LCAmaW8tPmRwX2NjX2lvLCAiZHBfbW1zc19jYyIpKSB7 CisJCXByX2VycigidW5hYmxlIHRvIHJlbWFwIGRwIE1NU1NfQ0MgcmVzb3VyY2VzXG4iKTsKKwkJ Z290byBlcnI7CisJfQorCisJaWYgKG1zbV9kc3NfaW9yZW1hcF9ieW5hbWUocGRldiwgJmlvLT5x ZnByb21faW8sICJxZnByb21fcGh5c2ljYWwiKSkKKwkJcHJfd2FybigidW5hYmxlIHRvIHJlbWFw IGRwIHFmcHJvbSByZXNvdXJjZXNcbiIpOworCisJcmV0dXJuIDA7CitlcnI6CisJZHBfcGFyc2Vy X3VubWFwX2lvX3Jlc291cmNlcyhwYXJzZXIpOworCXJldHVybiByYzsKK30KKworc3RhdGljIGNv bnN0IGNoYXIgKmRwX2dldF9waHlfYXV4X2NvbmZpZ19wcm9wZXJ0eSh1MzIgY2ZnX3R5cGUpCit7 CisJc3dpdGNoIChjZmdfdHlwZSkgeworCWNhc2UgUEhZX0FVWF9DRkcwOgorCQlyZXR1cm4gInFj b20sYXV4LWNmZzAtc2V0dGluZ3MiOworCWNhc2UgUEhZX0FVWF9DRkcxOgorCQlyZXR1cm4gInFj b20sYXV4LWNmZzEtc2V0dGluZ3MiOworCWNhc2UgUEhZX0FVWF9DRkcyOgorCQlyZXR1cm4gInFj b20sYXV4LWNmZzItc2V0dGluZ3MiOworCWNhc2UgUEhZX0FVWF9DRkczOgorCQlyZXR1cm4gInFj b20sYXV4LWNmZzMtc2V0dGluZ3MiOworCWNhc2UgUEhZX0FVWF9DRkc0OgorCQlyZXR1cm4gInFj b20sYXV4LWNmZzQtc2V0dGluZ3MiOworCWNhc2UgUEhZX0FVWF9DRkc1OgorCQlyZXR1cm4gInFj b20sYXV4LWNmZzUtc2V0dGluZ3MiOworCWNhc2UgUEhZX0FVWF9DRkc2OgorCQlyZXR1cm4gInFj b20sYXV4LWNmZzYtc2V0dGluZ3MiOworCWNhc2UgUEhZX0FVWF9DRkc3OgorCQlyZXR1cm4gInFj b20sYXV4LWNmZzctc2V0dGluZ3MiOworCWNhc2UgUEhZX0FVWF9DRkc4OgorCQlyZXR1cm4gInFj b20sYXV4LWNmZzgtc2V0dGluZ3MiOworCWNhc2UgUEhZX0FVWF9DRkc5OgorCQlyZXR1cm4gInFj b20sYXV4LWNmZzktc2V0dGluZ3MiOworCWRlZmF1bHQ6CisJCXJldHVybiAidW5rbm93biI7CisJ fQorfQorCitzdGF0aWMgdm9pZCBkcF9wYXJzZXJfcGh5X2F1eF9jZmdfcmVzZXQoc3RydWN0IGRw X3BhcnNlciAqcGFyc2VyKQoreworCWludCBpID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBQSFlf QVVYX0NGR19NQVg7IGkrKykKKwkJcGFyc2VyLT5hdXhfY2ZnW2ldID0gKGNvbnN0IHN0cnVjdCBk cF9hdXhfY2ZnKXsgMCB9OworfQorCitzdGF0aWMgaW50IGRwX3BhcnNlcl9hdXgoc3RydWN0IGRw X3BhcnNlciAqcGFyc2VyKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSA9IHBhcnNl ci0+cGRldi0+ZGV2Lm9mX25vZGU7CisJaW50IGxlbiA9IDAsIGkgPSAwLCBqID0gMCwgY29uZmln X2NvdW50ID0gMDsKKwljb25zdCBjaGFyICpkYXRhOworCWludCBjb25zdCBtaW5pbXVtX2NvbmZp Z19jb3VudCA9IDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgUEhZX0FVWF9DRkdfTUFYOyBpKyspIHsK KwkJY29uc3QgY2hhciAqcHJvcGVydHkgPSBkcF9nZXRfcGh5X2F1eF9jb25maWdfcHJvcGVydHko aSk7CisKKwkJZGF0YSA9IG9mX2dldF9wcm9wZXJ0eShvZl9ub2RlLCBwcm9wZXJ0eSwgJmxlbik7 CisJCWlmICghZGF0YSkgeworCQkJcHJfZXJyKCJVbmFibGUgdG8gcmVhZCAlc1xuIiwgcHJvcGVy dHkpOworCQkJZ290byBlcnJvcjsKKwkJfQorCisJCWNvbmZpZ19jb3VudCA9IGxlbiAtIDE7CisJ CWlmICgoY29uZmlnX2NvdW50IDwgbWluaW11bV9jb25maWdfY291bnQpIHx8CisJCQkoY29uZmln X2NvdW50ID4gRFBfQVVYX0NGR19NQVhfVkFMVUVfQ05UKSkgeworCQkJcHJfZXJyKCJJbnZhbGlk IGNvbmZpZyBjb3VudCAoJWQpIGNvbmZpZ3MgZm9yICVzXG4iLAorCQkJCQljb25maWdfY291bnQs IHByb3BlcnR5KTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKworCQlwYXJzZXItPmF1eF9jZmdbaV0u b2Zmc2V0ID0gZGF0YVswXTsKKwkJcGFyc2VyLT5hdXhfY2ZnW2ldLmNmZ19jbnQgPSBjb25maWdf Y291bnQ7CisJCXByX2RlYnVnKCIlcyBvZmZzZXQ9MHgleCwgY2ZnX2NudD0lZFxuIiwKKwkJCQlw cm9wZXJ0eSwKKwkJCQlwYXJzZXItPmF1eF9jZmdbaV0ub2Zmc2V0LAorCQkJCXBhcnNlci0+YXV4 X2NmZ1tpXS5jZmdfY250KTsKKwkJZm9yIChqID0gMTsgaiA8IGxlbjsgaisrKSB7CisJCQlwYXJz ZXItPmF1eF9jZmdbaV0ubHV0W2ogLSAxXSA9IGRhdGFbal07CisJCQlwcl9kZWJ1ZygiJXMgbHV0 WyVkXT0weCV4XG4iLAorCQkJCQlwcm9wZXJ0eSwKKwkJCQkJaSwKKwkJCQkJcGFyc2VyLT5hdXhf Y2ZnW2ldLmx1dFtqIC0gMV0pOworCQl9CisJfQorCQlyZXR1cm4gMDsKKworZXJyb3I6CisJZHBf cGFyc2VyX3BoeV9hdXhfY2ZnX3Jlc2V0KHBhcnNlcik7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisK K3N0YXRpYyBpbnQgZHBfcGFyc2VyX21pc2Moc3RydWN0IGRwX3BhcnNlciAqcGFyc2VyKQorewor CWludCByYyA9IDA7CisJc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlID0gcGFyc2VyLT5wZGV2 LT5kZXYub2Zfbm9kZTsKKworCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIob2Zfbm9kZSwKKwkJ InFjb20sbWF4LXBjbGstZnJlcXVlbmN5LWtoeiIsICZwYXJzZXItPm1heF9wY2xrX2toeik7CisJ aWYgKHJjKQorCQlwYXJzZXItPm1heF9wY2xrX2toeiA9IERQX01BWF9QSVhFTF9DTEtfS0haOwor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHBfcGFyc2VyX3BpbmN0cmwoc3RydWN0IGRw X3BhcnNlciAqcGFyc2VyKQoreworCWludCByYyA9IDA7CisJc3RydWN0IGRwX3BpbmN0cmwgKnBp bmN0cmwgPSAmcGFyc2VyLT5waW5jdHJsOworCisJcGluY3RybC0+cGluID0gZGV2bV9waW5jdHJs X2dldCgmcGFyc2VyLT5wZGV2LT5kZXYpOworCisJaWYgKElTX0VSUl9PUl9OVUxMKHBpbmN0cmwt PnBpbikpIHsKKwkJcmMgPSBQVFJfRVJSKHBpbmN0cmwtPnBpbik7CisJCXByX2VycigiZmFpbGVk IHRvIGdldCBwaW5jdHJsLCByYz0lZFxuIiwgcmMpOworCQlnb3RvIGVycm9yOworCX0KKworCXBp bmN0cmwtPnN0YXRlX2FjdGl2ZSA9IHBpbmN0cmxfbG9va3VwX3N0YXRlKHBpbmN0cmwtPnBpbiwK KwkJCQkJIm1kc3NfZHBfYWN0aXZlIik7CisJaWYgKElTX0VSUl9PUl9OVUxMKHBpbmN0cmwtPnN0 YXRlX2FjdGl2ZSkpIHsKKwkJcmMgPSBQVFJfRVJSKHBpbmN0cmwtPnN0YXRlX2FjdGl2ZSk7CisJ CXByX2VycigiZmFpbGVkIHRvIGdldCBwaW5jdHJsIGFjdGl2ZSBzdGF0ZSwgcmM9JWRcbiIsIHJj KTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlwaW5jdHJsLT5zdGF0ZV9zdXNwZW5kID0gcGluY3Ry bF9sb29rdXBfc3RhdGUocGluY3RybC0+cGluLAorCQkJCQkibWRzc19kcF9zbGVlcCIpOworCWlm IChJU19FUlJfT1JfTlVMTChwaW5jdHJsLT5zdGF0ZV9zdXNwZW5kKSkgeworCQlyYyA9IFBUUl9F UlIocGluY3RybC0+c3RhdGVfc3VzcGVuZCk7CisJCXByX2VycigiZmFpbGVkIHRvIGdldCBwaW5j dHJsIHN1c3BlbmQgc3RhdGUsIHJjPSVkXG4iLCByYyk7CisJCWdvdG8gZXJyb3I7CisJfQorZXJy b3I6CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGRwX3BhcnNlcl9ncGlvKHN0cnVjdCBk cF9wYXJzZXIgKnBhcnNlcikKK3sKKwlpbnQgaSA9IDA7CisJc3RydWN0IGRldmljZSAqZGV2ID0g JnBhcnNlci0+cGRldi0+ZGV2OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSA9IGRldi0+ b2Zfbm9kZTsKKwlzdHJ1Y3QgZHNzX21vZHVsZV9wb3dlciAqbXAgPSAmcGFyc2VyLT5tcFtEUF9D T1JFX1BNXTsKKwlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGRwX2dwaW9zW10gPSB7CisJCSJx Y29tLGF1eC1lbi1ncGlvIiwKKwkJInFjb20sYXV4LXNlbC1ncGlvIiwKKwkJInFjb20sdXNicGx1 Zy1jYy1ncGlvIiwKKwl9OworCisJbXAtPmdwaW9fY29uZmlnID0gZGV2bV9remFsbG9jKGRldiwK KwkJc2l6ZW9mKHN0cnVjdCBkc3NfZ3BpbykgKiBBUlJBWV9TSVpFKGRwX2dwaW9zKSwgR0ZQX0tF Uk5FTCk7CisJaWYgKCFtcC0+Z3Bpb19jb25maWcpCisJCXJldHVybiAtRU5PTUVNOworCisJbXAt Pm51bV9ncGlvID0gQVJSQVlfU0laRShkcF9ncGlvcyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJS QVlfU0laRShkcF9ncGlvcyk7IGkrKykgeworCQltcC0+Z3Bpb19jb25maWdbaV0uZ3BpbyA9IG9m X2dldF9uYW1lZF9ncGlvKG9mX25vZGUsCisJCQlkcF9ncGlvc1tpXSwgMCk7CisKKwkJaWYgKCFn cGlvX2lzX3ZhbGlkKG1wLT5ncGlvX2NvbmZpZ1tpXS5ncGlvKSkgeworCQkJcHJfZXJyKCIlcyBn cGlvIG5vdCBzcGVjaWZpZWRcbiIsIGRwX2dwaW9zW2ldKTsKKwkJCXJldHVybiAtRUlOVkFMOwor CQl9CisKKwkJc3RybGNweShtcC0+Z3Bpb19jb25maWdbaV0uZ3Bpb19uYW1lLCBkcF9ncGlvc1tp XSwKKwkJCXNpemVvZihtcC0+Z3Bpb19jb25maWdbaV0uZ3Bpb19uYW1lKSk7CisKKwkJbXAtPmdw aW9fY29uZmlnW2ldLnZhbHVlID0gMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNv bnN0IGNoYXIgKmRwX3BhcnNlcl9zdXBwbHlfbm9kZV9uYW1lKGVudW0gZHBfcG1fdHlwZSBtb2R1 bGUpCit7CisJc3dpdGNoIChtb2R1bGUpIHsKKwljYXNlIERQX0NPUkVfUE06CXJldHVybiAicWNv bSxjb3JlLXN1cHBseS1lbnRyaWVzIjsKKwljYXNlIERQX0NUUkxfUE06CXJldHVybiAicWNvbSxj dHJsLXN1cHBseS1lbnRyaWVzIjsKKwljYXNlIERQX1BIWV9QTToJCXJldHVybiAicWNvbSxwaHkt c3VwcGx5LWVudHJpZXMiOworCWRlZmF1bHQ6CQlyZXR1cm4gIj8/PyI7CisJfQorfQorCitzdGF0 aWMgaW50IGRwX3BhcnNlcl9nZXRfdnJlZyhzdHJ1Y3QgZHBfcGFyc2VyICpwYXJzZXIsCisJCWVu dW0gZHBfcG1fdHlwZSBtb2R1bGUpCit7CisJaW50IGkgPSAwLCByYyA9IDA7CisJdTMyIHRtcCA9 IDA7CisJY29uc3QgY2hhciAqcG1fc3VwcGx5X25hbWUgPSBOVUxMOworCXN0cnVjdCBkZXZpY2Vf bm9kZSAqc3VwcGx5X25vZGUgPSBOVUxMOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSA9 IHBhcnNlci0+cGRldi0+ZGV2Lm9mX25vZGU7CisJc3RydWN0IGRldmljZV9ub2RlICpzdXBwbHlf cm9vdF9ub2RlID0gTlVMTDsKKwlzdHJ1Y3QgZHNzX21vZHVsZV9wb3dlciAqbXAgPSAmcGFyc2Vy LT5tcFttb2R1bGVdOworCisJbXAtPm51bV92cmVnID0gMDsKKwlwbV9zdXBwbHlfbmFtZSA9IGRw X3BhcnNlcl9zdXBwbHlfbm9kZV9uYW1lKG1vZHVsZSk7CisJc3VwcGx5X3Jvb3Rfbm9kZSA9IG9m X2dldF9jaGlsZF9ieV9uYW1lKG9mX25vZGUsIHBtX3N1cHBseV9uYW1lKTsKKwlpZiAoIXN1cHBs eV9yb290X25vZGUpIHsKKwkJcHJfZXJyKCJubyBzdXBwbHkgZW50cnkgcHJlc2VudDogJXNcbiIs IHBtX3N1cHBseV9uYW1lKTsKKwkJZ290byBub3ZyZWc7CisJfQorCisJbXAtPm51bV92cmVnID0g b2ZfZ2V0X2F2YWlsYWJsZV9jaGlsZF9jb3VudChzdXBwbHlfcm9vdF9ub2RlKTsKKworCWlmICht cC0+bnVtX3ZyZWcgPT0gMCkgeworCQlwcl9kZWJ1Zygibm8gdnJlZ1xuIik7CisJCWdvdG8gbm92 cmVnOworCX0gZWxzZSB7CisJCXByX2RlYnVnKCJ2cmVnIGZvdW5kLiBjb3VudD0lZFxuIiwgbXAt Pm51bV92cmVnKTsKKwl9CisKKwltcC0+dnJlZ19jb25maWcgPSBkZXZtX2t6YWxsb2MoJnBhcnNl ci0+cGRldi0+ZGV2LAorCQlzaXplb2Yoc3RydWN0IGRzc192cmVnKSAqIG1wLT5udW1fdnJlZywg R0ZQX0tFUk5FTCk7CisJaWYgKCFtcC0+dnJlZ19jb25maWcpIHsKKwkJcmMgPSAtRU5PTUVNOwor CQlnb3RvIGVycm9yOworCX0KKworCWZvcl9lYWNoX2NoaWxkX29mX25vZGUoc3VwcGx5X3Jvb3Rf bm9kZSwgc3VwcGx5X25vZGUpIHsKKwkJY29uc3QgY2hhciAqc3QgPSBOVUxMOworCQkvKiB2cmVn LW5hbWUgKi8KKwkJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhzdXBwbHlfbm9kZSwKKwkJ CSJxY29tLHN1cHBseS1uYW1lIiwgJnN0KTsKKwkJaWYgKHJjKSB7CisJCQlwcl9lcnIoImVycm9y IHJlYWRpbmcgbmFtZS4gcmM9JWRcbiIsCisJCQkJIHJjKTsKKwkJCWdvdG8gZXJyb3I7CisJCX0K KwkJc25wcmludGYobXAtPnZyZWdfY29uZmlnW2ldLnZyZWdfbmFtZSwKKwkJCUFSUkFZX1NJWkUo KG1wLT52cmVnX2NvbmZpZ1tpXS52cmVnX25hbWUpKSwgIiVzIiwgc3QpOworCQkvKiB2cmVnLW1p bi12b2x0YWdlICovCisJCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIoc3VwcGx5X25vZGUsCisJ CQkicWNvbSxzdXBwbHktbWluLXZvbHRhZ2UiLCAmdG1wKTsKKwkJaWYgKHJjKSB7CisJCQlwcl9l cnIoImVycm9yIHJlYWRpbmcgbWluIHZvbHQuIHJjPSVkXG4iLAorCQkJCXJjKTsKKwkJCWdvdG8g ZXJyb3I7CisJCX0KKwkJbXAtPnZyZWdfY29uZmlnW2ldLm1pbl92b2x0YWdlID0gdG1wOworCisJ CS8qIHZyZWctbWF4LXZvbHRhZ2UgKi8KKwkJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihzdXBw bHlfbm9kZSwKKwkJCSJxY29tLHN1cHBseS1tYXgtdm9sdGFnZSIsICZ0bXApOworCQlpZiAocmMp IHsKKwkJCXByX2VycigiZXJyb3IgcmVhZGluZyBtYXggdm9sdC4gcmM9JWRcbiIsCisJCQkJcmMp OworCQkJZ290byBlcnJvcjsKKwkJfQorCQltcC0+dnJlZ19jb25maWdbaV0ubWF4X3ZvbHRhZ2Ug PSB0bXA7CisKKwkJLyogZW5hYmxlLWxvYWQgKi8KKwkJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3Uz MihzdXBwbHlfbm9kZSwKKwkJCSJxY29tLHN1cHBseS1lbmFibGUtbG9hZCIsICZ0bXApOworCQlp ZiAocmMpIHsKKwkJCXByX2VycigiZXJyb3IgcmVhZGluZyBlbmFibGUgbG9hZC4gcmM9JWRcbiIs CisJCQkJcmMpOworCQkJZ290byBlcnJvcjsKKwkJfQorCQltcC0+dnJlZ19jb25maWdbaV0uZW5h YmxlX2xvYWQgPSB0bXA7CisKKwkJLyogZGlzYWJsZS1sb2FkICovCisJCXJjID0gb2ZfcHJvcGVy dHlfcmVhZF91MzIoc3VwcGx5X25vZGUsCisJCQkicWNvbSxzdXBwbHktZGlzYWJsZS1sb2FkIiwg JnRtcCk7CisJCWlmIChyYykgeworCQkJcHJfZXJyKCJlcnJvciByZWFkaW5nIGRpc2FibGUgbG9h ZC4gcmM9JWRcbiIsCisJCQkJcmMpOworCQkJZ290byBlcnJvcjsKKwkJfQorCQltcC0+dnJlZ19j b25maWdbaV0uZGlzYWJsZV9sb2FkID0gdG1wOworCisJCXByX2RlYnVnKCIlcyBtaW49JWQsIG1h eD0lZCwgZW5hYmxlPSVkLCBkaXNhYmxlPSVkXG4iLAorCQkJbXAtPnZyZWdfY29uZmlnW2ldLnZy ZWdfbmFtZSwKKwkJCW1wLT52cmVnX2NvbmZpZ1tpXS5taW5fdm9sdGFnZSwKKwkJCW1wLT52cmVn X2NvbmZpZ1tpXS5tYXhfdm9sdGFnZSwKKwkJCW1wLT52cmVnX2NvbmZpZ1tpXS5lbmFibGVfbG9h ZCwKKwkJCW1wLT52cmVnX2NvbmZpZ1tpXS5kaXNhYmxlX2xvYWQKKwkJCSk7CisJCSsraTsKKwl9 CisKKwlyZXR1cm4gcmM7CisKK2Vycm9yOgorCWlmIChtcC0+dnJlZ19jb25maWcpIHsKKwkJZGV2 bV9rZnJlZSgmcGFyc2VyLT5wZGV2LT5kZXYsIG1wLT52cmVnX2NvbmZpZyk7CisJCW1wLT52cmVn X2NvbmZpZyA9IE5VTEw7CisJfQorbm92cmVnOgorCW1wLT5udW1fdnJlZyA9IDA7CisKKwlyZXR1 cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIGRwX3BhcnNlcl9wdXRfdnJlZ19kYXRhKHN0cnVjdCBk ZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZHNzX21vZHVsZV9wb3dlciAqbXApCit7CisJaWYgKCFtcCkg eworCQlERVZfRVJSKCJpbnZhbGlkIGlucHV0XG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmICht cC0+dnJlZ19jb25maWcpIHsKKwkJZGV2bV9rZnJlZShkZXYsIG1wLT52cmVnX2NvbmZpZyk7CisJ CW1wLT52cmVnX2NvbmZpZyA9IE5VTEw7CisJfQorCW1wLT5udW1fdnJlZyA9IDA7Cit9CisKK3N0 YXRpYyBpbnQgZHBfcGFyc2VyX3JlZ3VsYXRvcihzdHJ1Y3QgZHBfcGFyc2VyICpwYXJzZXIpCit7 CisJaW50IGksIHJjID0gMDsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gcGFyc2Vy LT5wZGV2OworCisJLyogUGFyc2UgdGhlIHJlZ3VsYXRvciBpbmZvcm1hdGlvbiAqLworCWZvciAo aSA9IERQX0NPUkVfUE07IGkgPCBEUF9NQVhfUE07IGkrKykgeworCQlyYyA9IGRwX3BhcnNlcl9n ZXRfdnJlZyhwYXJzZXIsIGkpOworCQlpZiAocmMpIHsKKwkJCXByX2VycigiZ2V0X2R0X3ZyZWdf ZGF0YSBmYWlsZWQgZm9yICVzLiByYz0lZFxuIiwKKwkJCQlkcF9wYXJzZXJfcG1fbmFtZShpKSwg cmMpOworCQkJaS0tOworCQkJZm9yICg7IGkgPj0gRFBfQ09SRV9QTTsgaS0tKQorCQkJCWRwX3Bh cnNlcl9wdXRfdnJlZ19kYXRhKCZwZGV2LT5kZXYsCisJCQkJCSZwYXJzZXItPm1wW2ldKTsKKwkJ CWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgYm9vbCBkcF9wYXJz ZXJfY2hlY2tfcHJlZml4KGNvbnN0IGNoYXIgKmNsa19wcmVmaXgsIGNvbnN0IGNoYXIgKmNsa19u YW1lKQoreworCXJldHVybiAhIXN0cm5zdHIoY2xrX25hbWUsIGNsa19wcmVmaXgsIHN0cmxlbihj bGtfbmFtZSkpOworfQorCitzdGF0aWMgdm9pZCBkcF9wYXJzZXJfcHV0X2Nsa19kYXRhKHN0cnVj dCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZHNzX21vZHVsZV9wb3dlciAqbXApCit7CisJaWYgKCFt cCkgeworCQlERVZfRVJSKCIlczogaW52YWxpZCBpbnB1dFxuIiwgX19mdW5jX18pOworCQlyZXR1 cm47CisJfQorCisJaWYgKG1wLT5jbGtfY29uZmlnKSB7CisJCWRldm1fa2ZyZWUoZGV2LCBtcC0+ Y2xrX2NvbmZpZyk7CisJCW1wLT5jbGtfY29uZmlnID0gTlVMTDsKKwl9CisKKwltcC0+bnVtX2Ns ayA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGRwX3BhcnNlcl9wdXRfZ3Bpb19kYXRhKHN0cnVjdCBk ZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZHNzX21vZHVsZV9wb3dlciAqbXApCit7CisJaWYgKCFtcCkg eworCQlERVZfRVJSKCIlczogaW52YWxpZCBpbnB1dFxuIiwgX19mdW5jX18pOworCQlyZXR1cm47 CisJfQorCisJaWYgKG1wLT5ncGlvX2NvbmZpZykgeworCQlkZXZtX2tmcmVlKGRldiwgbXAtPmdw aW9fY29uZmlnKTsKKwkJbXAtPmdwaW9fY29uZmlnID0gTlVMTDsKKwl9CisKKwltcC0+bnVtX2dw aW8gPSAwOworfQorCitzdGF0aWMgaW50IGRwX3BhcnNlcl9pbml0X2Nsa19kYXRhKHN0cnVjdCBk cF9wYXJzZXIgKnBhcnNlcikKK3sKKwlpbnQgbnVtX2NsayA9IDAsIGkgPSAwLCByYyA9IDA7CisJ aW50IGNvcmVfY2xrX2NvdW50ID0gMCwgY3RybF9jbGtfY291bnQgPSAwOworCWNvbnN0IGNoYXIg KmNvcmVfY2xrID0gImNvcmUiOworCWNvbnN0IGNoYXIgKmN0cmxfY2xrID0gImN0cmwiOworCWNv bnN0IGNoYXIgKmNsa19uYW1lOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwYXJzZXItPnBkZXYt PmRldjsKKwlzdHJ1Y3QgZHNzX21vZHVsZV9wb3dlciAqY29yZV9wb3dlciA9ICZwYXJzZXItPm1w W0RQX0NPUkVfUE1dOworCXN0cnVjdCBkc3NfbW9kdWxlX3Bvd2VyICpjdHJsX3Bvd2VyID0gJnBh cnNlci0+bXBbRFBfQ1RSTF9QTV07CisKKwludW1fY2xrID0gb2ZfcHJvcGVydHlfY291bnRfc3Ry aW5ncyhkZXYtPm9mX25vZGUsICJjbG9jay1uYW1lcyIpOworCWlmIChudW1fY2xrIDw9IDApIHsK KwkJcHJfZXJyKCJubyBjbG9ja3MgYXJlIGRlZmluZWRcbiIpOworCQlyYyA9IC1FSU5WQUw7CisJ CWdvdG8gZXhpdDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NsazsgaSsrKSB7CisJCW9m X3Byb3BlcnR5X3JlYWRfc3RyaW5nX2luZGV4KGRldi0+b2Zfbm9kZSwKKwkJCQkiY2xvY2stbmFt ZXMiLCBpLCAmY2xrX25hbWUpOworCisJCWlmIChkcF9wYXJzZXJfY2hlY2tfcHJlZml4KGNvcmVf Y2xrLCBjbGtfbmFtZSkpCisJCQljb3JlX2Nsa19jb3VudCsrOworCisJCWlmIChkcF9wYXJzZXJf Y2hlY2tfcHJlZml4KGN0cmxfY2xrLCBjbGtfbmFtZSkpCisJCQljdHJsX2Nsa19jb3VudCsrOwor CX0KKworCS8qIEluaXRpYWxpemUgdGhlIENPUkUgcG93ZXIgbW9kdWxlICovCisJaWYgKGNvcmVf Y2xrX2NvdW50IDw9IDApIHsKKwkJcHJfZXJyKCJubyBjb3JlIGNsb2NrcyBhcmUgZGVmaW5lZFxu Iik7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBleGl0OworCX0KKworCWNvcmVfcG93ZXItPm51 bV9jbGsgPSBjb3JlX2Nsa19jb3VudDsKKwljb3JlX3Bvd2VyLT5jbGtfY29uZmlnID0gZGV2bV9r emFsbG9jKGRldiwKKwkJCXNpemVvZihzdHJ1Y3QgZHNzX2NsaykgKiBjb3JlX3Bvd2VyLT5udW1f Y2xrLAorCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFjb3JlX3Bvd2VyLT5jbGtfY29uZmlnKSB7CisJ CXJjID0gLUVJTlZBTDsKKwkJZ290byBleGl0OworCX0KKworCS8qIEluaXRpYWxpemUgdGhlIENU UkwgcG93ZXIgbW9kdWxlICovCisJaWYgKGN0cmxfY2xrX2NvdW50IDw9IDApIHsKKwkJcHJfZXJy KCJubyBjdHJsIGNsb2NrcyBhcmUgZGVmaW5lZFxuIik7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290 byBjdHJsX2Nsb2NrX2Vycm9yOworCX0KKworCWN0cmxfcG93ZXItPm51bV9jbGsgPSBjdHJsX2Ns a19jb3VudDsKKwljdHJsX3Bvd2VyLT5jbGtfY29uZmlnID0gZGV2bV9remFsbG9jKGRldiwKKwkJ CXNpemVvZihzdHJ1Y3QgZHNzX2NsaykgKiBjdHJsX3Bvd2VyLT5udW1fY2xrLAorCQkJR0ZQX0tF Uk5FTCk7CisJaWYgKCFjdHJsX3Bvd2VyLT5jbGtfY29uZmlnKSB7CisJCWN0cmxfcG93ZXItPm51 bV9jbGsgPSAwOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gY3RybF9jbG9ja19lcnJvcjsKKwl9 CisKKwlyZXR1cm4gcmM7CisKK2N0cmxfY2xvY2tfZXJyb3I6CisJZHBfcGFyc2VyX3B1dF9jbGtf ZGF0YShkZXYsIGNvcmVfcG93ZXIpOworZXhpdDoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBp bnQgZHBfcGFyc2VyX2Nsb2NrKHN0cnVjdCBkcF9wYXJzZXIgKnBhcnNlcikKK3sKKwlpbnQgcmMg PSAwLCBpID0gMDsKKwlpbnQgbnVtX2NsayA9IDA7CisJaW50IGNvcmVfY2xrX2luZGV4ID0gMCwg Y3RybF9jbGtfaW5kZXggPSAwOworCWludCBjb3JlX2Nsa19jb3VudCA9IDAsIGN0cmxfY2xrX2Nv dW50ID0gMDsKKwljb25zdCBjaGFyICpjbGtfbmFtZTsKKwljb25zdCBjaGFyICpjb3JlX2NsayA9 ICJjb3JlIjsKKwljb25zdCBjaGFyICpjdHJsX2NsayA9ICJjdHJsIjsKKwlzdHJ1Y3QgZGV2aWNl ICpkZXYgPSAmcGFyc2VyLT5wZGV2LT5kZXY7CisJc3RydWN0IGRzc19tb2R1bGVfcG93ZXIgKmNv cmVfcG93ZXIgPSAmcGFyc2VyLT5tcFtEUF9DT1JFX1BNXTsKKwlzdHJ1Y3QgZHNzX21vZHVsZV9w b3dlciAqY3RybF9wb3dlciA9ICZwYXJzZXItPm1wW0RQX0NUUkxfUE1dOworCisJY29yZV9wb3dl ciA9ICZwYXJzZXItPm1wW0RQX0NPUkVfUE1dOworCWN0cmxfcG93ZXIgPSAmcGFyc2VyLT5tcFtE UF9DVFJMX1BNXTsKKworCXJjID0gIGRwX3BhcnNlcl9pbml0X2Nsa19kYXRhKHBhcnNlcik7CisJ aWYgKHJjKSB7CisJCXByX2VycigiZmFpbGVkIHRvIGluaXRpYWxpemUgcG93ZXIgZGF0YVxuIik7 CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBleGl0OworCX0KKworCWNvcmVfY2xrX2NvdW50ID0g Y29yZV9wb3dlci0+bnVtX2NsazsKKwljdHJsX2Nsa19jb3VudCA9IGN0cmxfcG93ZXItPm51bV9j bGs7CisKKwludW1fY2xrID0gY29yZV9jbGtfY291bnQgKyBjdHJsX2Nsa19jb3VudDsKKworCWZv ciAoaSA9IDA7IGkgPCBudW1fY2xrOyBpKyspIHsKKwkJb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmdf aW5kZXgoZGV2LT5vZl9ub2RlLCAiY2xvY2stbmFtZXMiLAorCQkJCWksICZjbGtfbmFtZSk7CisK KwkJaWYgKGRwX3BhcnNlcl9jaGVja19wcmVmaXgoY29yZV9jbGssIGNsa19uYW1lKSAmJgorCQkJ CWNvcmVfY2xrX2luZGV4IDwgY29yZV9jbGtfY291bnQpIHsKKwkJCXN0cnVjdCBkc3NfY2xrICpj bGsgPQorCQkJCSZjb3JlX3Bvd2VyLT5jbGtfY29uZmlnW2NvcmVfY2xrX2luZGV4XTsKKwkJCXN0 cmxjcHkoY2xrLT5jbGtfbmFtZSwgY2xrX25hbWUsIHNpemVvZihjbGstPmNsa19uYW1lKSk7CisJ CQljbGstPnR5cGUgPSBEU1NfQ0xLX0FIQjsKKwkJCWNvcmVfY2xrX2luZGV4Kys7CisJCX0gZWxz ZSBpZiAoZHBfcGFyc2VyX2NoZWNrX3ByZWZpeChjdHJsX2NsaywgY2xrX25hbWUpICYmCisJCQkg ICBjdHJsX2Nsa19pbmRleCA8IGN0cmxfY2xrX2NvdW50KSB7CisJCQlzdHJ1Y3QgZHNzX2NsayAq Y2xrID0KKwkJCQkmY3RybF9wb3dlci0+Y2xrX2NvbmZpZ1tjdHJsX2Nsa19pbmRleF07CisJCQlz dHJsY3B5KGNsay0+Y2xrX25hbWUsIGNsa19uYW1lLCBzaXplb2YoY2xrLT5jbGtfbmFtZSkpOwor CQkJY3RybF9jbGtfaW5kZXgrKzsKKworCQkJaWYgKCFzdHJjbXAoY2xrX25hbWUsICJjdHJsX2xp bmtfY2xrIikgfHwKKwkJCSAgICAhc3RyY21wKGNsa19uYW1lLCAiY3RybF9waXhlbF9jbGsiKSkK KwkJCQljbGstPnR5cGUgPSBEU1NfQ0xLX1BDTEs7CisJCQllbHNlCisJCQkJY2xrLT50eXBlID0g RFNTX0NMS19BSEI7CisJCX0KKwl9CisKKwlwcl9kZWJ1ZygiY2xvY2sgcGFyc2luZyBzdWNjZXNz ZnVsXG4iKTsKKworZXhpdDoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgZHBfcGFyc2Vy X3BhcnNlKHN0cnVjdCBkcF9wYXJzZXIgKnBhcnNlcikKK3sKKwlpbnQgcmMgPSAwOworCisJaWYg KCFwYXJzZXIpIHsKKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKKwkJcmMgPSAtRUlOVkFM OworCQlnb3RvIGVycjsKKwl9CisKKwlyYyA9IGRwX3BhcnNlcl9jdHJsX3JlcyhwYXJzZXIpOwor CWlmIChyYykKKwkJZ290byBlcnI7CisKKwlyYyA9IGRwX3BhcnNlcl9hdXgocGFyc2VyKTsKKwlp ZiAocmMpCisJCWdvdG8gZXJyOworCisJcmMgPSBkcF9wYXJzZXJfbWlzYyhwYXJzZXIpOworCWlm IChyYykKKwkJZ290byBlcnI7CisKKwlyYyA9IGRwX3BhcnNlcl9jbG9jayhwYXJzZXIpOworCWlm IChyYykKKwkJZ290byBlcnI7CisKKwlyYyA9IGRwX3BhcnNlcl9yZWd1bGF0b3IocGFyc2VyKTsK KwlpZiAocmMpCisJCWdvdG8gZXJyOworCisJcmMgPSBkcF9wYXJzZXJfZ3BpbyhwYXJzZXIpOwor CWlmIChyYykKKwkJZ290byBlcnI7CisKKwlyYyA9IGRwX3BhcnNlcl9waW5jdHJsKHBhcnNlcik7 CitlcnI6CisJcmV0dXJuIHJjOworfQorCitzdHJ1Y3QgZHBfcGFyc2VyICpkcF9wYXJzZXJfZ2V0 KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRwX3BhcnNlciAqcGFy c2VyOworCisJcGFyc2VyID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqcGFyc2Vy KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwYXJzZXIpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0p OworCisJcGFyc2VyLT5wYXJzZSA9IGRwX3BhcnNlcl9wYXJzZTsKKwlwYXJzZXItPnBkZXYgPSBw ZGV2OworCisJcmV0dXJuIHBhcnNlcjsKK30KKwordm9pZCBkcF9wYXJzZXJfcHV0KHN0cnVjdCBk cF9wYXJzZXIgKnBhcnNlcikKK3sKKwlpbnQgaSA9IDA7CisJc3RydWN0IGRzc19tb2R1bGVfcG93 ZXIgKnBvd2VyID0gTlVMTDsKKworCWlmICghcGFyc2VyKSB7CisJCXByX2VycigiaW52YWxpZCBw YXJzZXIgbW9kdWxlXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXBvd2VyID0gcGFyc2VyLT5tcDsK KworCWZvciAoaSA9IDA7IGkgPCBEUF9NQVhfUE07IGkrKykgeworCQlkcF9wYXJzZXJfcHV0X2Ns a19kYXRhKCZwYXJzZXItPnBkZXYtPmRldiwgJnBvd2VyW2ldKTsKKwkJZHBfcGFyc2VyX3B1dF92 cmVnX2RhdGEoJnBhcnNlci0+cGRldi0+ZGV2LCAmcG93ZXJbaV0pOworCQlkcF9wYXJzZXJfcHV0 X2dwaW9fZGF0YSgmcGFyc2VyLT5wZGV2LT5kZXYsICZwb3dlcltpXSk7CisJfQorCisJZGV2bV9r ZnJlZSgmcGFyc2VyLT5wZGV2LT5kZXYsIHBhcnNlcik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vbXNtL2RwL2RwX3BhcnNlci5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9w YXJzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzllYTAyCi0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wYXJzZXIuaApAQCAtMCww ICsxLDIwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMi0yMDE4LCBUaGUgTGludXggRm91 bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9u IDIgYW5kCisgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaWZu ZGVmIF9EUF9QQVJTRVJfSF8KKyNkZWZpbmUgX0RQX1BBUlNFUl9IXworCisjaW5jbHVkZSAiZHB1 X2lvX3V0aWwuaCIKKworI2RlZmluZSBEUF9MQUJFTCAiTURTUyBEUCBESVNQTEFZIgorI2RlZmlu ZSBBVVhfQ0ZHX0xFTgkxMAorI2RlZmluZSBEUF9NQVhfUElYRUxfQ0xLX0tIWgk2NzUwMDAKKwor ZW51bSBkcF9wbV90eXBlIHsKKwlEUF9DT1JFX1BNLAorCURQX0NUUkxfUE0sCisJRFBfUEhZX1BN LAorCURQX01BWF9QTQorfTsKKworc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpkcF9wYXJzZXJf cG1fbmFtZShlbnVtIGRwX3BtX3R5cGUgbW9kdWxlKQoreworCXN3aXRjaCAobW9kdWxlKSB7CisJ Y2FzZSBEUF9DT1JFX1BNOglyZXR1cm4gIkRQX0NPUkVfUE0iOworCWNhc2UgRFBfQ1RSTF9QTToJ cmV0dXJuICJEUF9DVFJMX1BNIjsKKwljYXNlIERQX1BIWV9QTToJCXJldHVybiAiRFBfUEhZX1BN IjsKKwlkZWZhdWx0OgkJcmV0dXJuICI/Pz8iOworCX0KK30KKworLyoqCisgKiBzdHJ1Y3QgZHBf ZGlzcGxheV9kYXRhICAtIGRpc3BsYXkgcmVsYXRlZCBkZXZpY2UgdHJlZSBkYXRhLgorICoKKyAq IEBjdHJsX25vZGU6IHJlZmVyZWNlIHRvIGNvbnRyb2xsZXIgZGV2aWNlCisgKiBAcGh5X25vZGU6 ICByZWZlcmVuY2UgdG8gcGh5IGRldmljZQorICogQGlzX2FjdGl2ZTogaXMgdGhlIGNvbnRyb2xs ZXIgY3VycmVudGx5IGFjdGl2ZQorICogQG5hbWU6IG5hbWUgb2YgdGhlIGRpc3BsYXkKKyAqIEBk aXNwbGF5X3R5cGU6IHR5cGUgb2YgdGhlIGRpc3BsYXkKKyAqLworc3RydWN0IGRwX2Rpc3BsYXlf ZGF0YSB7CisJc3RydWN0IGRldmljZV9ub2RlICpjdHJsX25vZGU7CisJc3RydWN0IGRldmljZV9u b2RlICpwaHlfbm9kZTsKKwlib29sIGlzX2FjdGl2ZTsKKwljb25zdCBjaGFyICpuYW1lOworCWNv bnN0IGNoYXIgKmRpc3BsYXlfdHlwZTsKK307CisKKy8qKgorICogc3RydWN0IGRwX2N0cmxfcmVz b3VyY2UgLSBjb250cm9sbGVyJ3MgSU8gcmVsYXRlZCBkYXRhCisgKgorICogQGRwX2FoYjogY29u dHJvbGxlcidzIGFoYiBtYXBwZWQgbWVtb3J5IGFkZHJlc3MKKyAqIEBkcF9hdXg6IGNvbnRyb2xs ZXIncyBhdXggbWFwcGVkIG1lbW9yeSBhZGRyZXNzCisgKiBAZHBfbGluazogY29udHJvbGxlcidz IGxpbmsgbWFwcGVkIG1lbW9yeSBhZGRyZXNzCisgKiBAZHBfcDA6IGNvbnRyb2xsZXIncyBwMCBt YXBwZWQgbWVtb3J5IGFkZHJlc3MKKyAqIEBwaHlfaW86IHBoeSdzIG1hcHBlZCBtZW1vcnkgYWRk cmVzcworICogQGxuX3R4MF9pbzogVVNCLURQIGxhbmUgVFgwJ3MgbWFwcGVkIG1lbW9yeSBhZGRy ZXNzCisgKiBAbG5fdHgxX2lvOiBVU0ItRFAgbGFuZSBUWDEncyBtYXBwZWQgbWVtb3J5IGFkZHJl c3MKKyAqIEBkcF9jY19pbzogRFAgY2MncyBtYXBwZWQgbWVtb3J5IGFkZHJlc3MKKyAqIEBxZnBy b21faW86IHFmcHJvbSdzIG1hcHBlZCBtZW1vcnkgYWRkcmVzcworICogQGRwX3BsbF9pbzogRFAg UExMIG1hcHBlZCBtZW1vcnkgYWRkcmVzcworICogQHVzYjNfZHBfY29tOiBVU0IzIERQIFBIWSBj b21ibyBtYXBwZWQgbWVtb3J5IGFkZHJlc3MKKyAqLworc3RydWN0IGRwX2lvIHsKKwlzdHJ1Y3Qg ZHNzX2lvX2RhdGEgY3RybF9pbzsKKwlzdHJ1Y3QgZHNzX2lvX2RhdGEgZHBfYWhiOworCXN0cnVj dCBkc3NfaW9fZGF0YSBkcF9hdXg7CisJc3RydWN0IGRzc19pb19kYXRhIGRwX2xpbms7CisJc3Ry dWN0IGRzc19pb19kYXRhIGRwX3AwOworCXN0cnVjdCBkc3NfaW9fZGF0YSBwaHlfaW87CisJc3Ry dWN0IGRzc19pb19kYXRhIGxuX3R4MF9pbzsKKwlzdHJ1Y3QgZHNzX2lvX2RhdGEgbG5fdHgxX2lv OworCXN0cnVjdCBkc3NfaW9fZGF0YSBkcF9jY19pbzsKKwlzdHJ1Y3QgZHNzX2lvX2RhdGEgcWZw cm9tX2lvOworCXN0cnVjdCBkc3NfaW9fZGF0YSBkcF9wbGxfaW87CisJc3RydWN0IGRzc19pb19k YXRhIHVzYjNfZHBfY29tOworfTsKKworLyoqCisgKiBzdHJ1Y3QgZHBfcGluY3RybCAtIERQJ3Mg cGluIGNvbnRyb2wKKyAqCisgKiBAcGluOiBwaW4tY29udHJvbGxlcidzIGluc3RhbmNlCisgKiBA c3RhdGVfYWN0aXZlOiBhY3RpdmUgc3RhdGUgcGluIGNvbnRyb2wKKyAqIEBzdGF0ZV9ocGRfYWN0 aXZlOiBocGQgYWN0aXZlIHN0YXRlIHBpbiBjb250cm9sCisgKiBAc3RhdGVfc3VzcGVuZDogc3Vz cGVuZCBzdGF0ZSBwaW4gY29udHJvbAorICovCitzdHJ1Y3QgZHBfcGluY3RybCB7CisJc3RydWN0 IHBpbmN0cmwgKnBpbjsKKwlzdHJ1Y3QgcGluY3RybF9zdGF0ZSAqc3RhdGVfYWN0aXZlOworCXN0 cnVjdCBwaW5jdHJsX3N0YXRlICpzdGF0ZV9ocGRfYWN0aXZlOworCXN0cnVjdCBwaW5jdHJsX3N0 YXRlICpzdGF0ZV9zdXNwZW5kOworfTsKKworI2RlZmluZSBEUF9FTlVNX1NUUih4KQkjeAorI2Rl ZmluZSBEUF9BVVhfQ0ZHX01BWF9WQUxVRV9DTlQgMworLyoqCisgKiBzdHJ1Y3QgZHBfYXV4X2Nm ZyAtIERQJ3MgQVVYIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MKKyAqCisgKiBAY2ZnX2NudDogY291 bnQgb2YgdGhlIGNvbmZpZ3VyYWJsZSBzZXR0aW5ncyBmb3IgdGhlIEFVWCByZWdpc3RlcgorICog QGN1cnJlbnRfaW5kZXg6IGN1cnJlbnQgaW5kZXggb2YgdGhlIEFVWCBjb25maWcgbHV0CisgKiBA b2Zmc2V0OiByZWdpc3RlciBvZmZzZXQgb2YgdGhlIEFVWCBjb25maWcgcmVnaXN0ZXIKKyAqIEBs dXQ6IGxvb2sgdXAgdGFibGUgZm9yIHRoZSBBVVggY29uZmlnIHZhbHVlcyBmb3IgdGhpcyByZWdp c3RlcgorICovCitzdHJ1Y3QgZHBfYXV4X2NmZyB7CisJdTMyIGNmZ19jbnQ7CisJdTMyIGN1cnJl bnRfaW5kZXg7CisJdTMyIG9mZnNldDsKKwl1MzIgbHV0W0RQX0FVWF9DRkdfTUFYX1ZBTFVFX0NO VF07Cit9OworCisvKiBQSFkgQVVYIGNvbmZpZyByZWdpc3RlcnMgKi8KK2VudW0gZHBfcGh5X2F1 eF9jb25maWdfdHlwZSB7CisJUEhZX0FVWF9DRkcwLAorCVBIWV9BVVhfQ0ZHMSwKKwlQSFlfQVVY X0NGRzIsCisJUEhZX0FVWF9DRkczLAorCVBIWV9BVVhfQ0ZHNCwKKwlQSFlfQVVYX0NGRzUsCisJ UEhZX0FVWF9DRkc2LAorCVBIWV9BVVhfQ0ZHNywKKwlQSFlfQVVYX0NGRzgsCisJUEhZX0FVWF9D Rkc5LAorCVBIWV9BVVhfQ0ZHX01BWCwKK307CisKK3N0YXRpYyBpbmxpbmUgY2hhciAqZHBfcGh5 X2F1eF9jb25maWdfdHlwZV90b19zdHJpbmcodTMyIGNmZ190eXBlKQoreworCXN3aXRjaCAoY2Zn X3R5cGUpIHsKKwljYXNlIFBIWV9BVVhfQ0ZHMDoKKwkJcmV0dXJuIERQX0VOVU1fU1RSKFBIWV9B VVhfQ0ZHMCk7CisJY2FzZSBQSFlfQVVYX0NGRzE6CisJCXJldHVybiBEUF9FTlVNX1NUUihQSFlf QVVYX0NGRzEpOworCWNhc2UgUEhZX0FVWF9DRkcyOgorCQlyZXR1cm4gRFBfRU5VTV9TVFIoUEhZ X0FVWF9DRkcyKTsKKwljYXNlIFBIWV9BVVhfQ0ZHMzoKKwkJcmV0dXJuIERQX0VOVU1fU1RSKFBI WV9BVVhfQ0ZHMyk7CisJY2FzZSBQSFlfQVVYX0NGRzQ6CisJCXJldHVybiBEUF9FTlVNX1NUUihQ SFlfQVVYX0NGRzQpOworCWNhc2UgUEhZX0FVWF9DRkc1OgorCQlyZXR1cm4gRFBfRU5VTV9TVFIo UEhZX0FVWF9DRkc1KTsKKwljYXNlIFBIWV9BVVhfQ0ZHNjoKKwkJcmV0dXJuIERQX0VOVU1fU1RS KFBIWV9BVVhfQ0ZHNik7CisJY2FzZSBQSFlfQVVYX0NGRzc6CisJCXJldHVybiBEUF9FTlVNX1NU UihQSFlfQVVYX0NGRzcpOworCWNhc2UgUEhZX0FVWF9DRkc4OgorCQlyZXR1cm4gRFBfRU5VTV9T VFIoUEhZX0FVWF9DRkc4KTsKKwljYXNlIFBIWV9BVVhfQ0ZHOToKKwkJcmV0dXJuIERQX0VOVU1f U1RSKFBIWV9BVVhfQ0ZHOSk7CisJZGVmYXVsdDoKKwkJcmV0dXJuICJ1bmtub3duIjsKKwl9Cit9 CisKKy8qKgorICogc3RydWN0IGRwX3BhcnNlciAtIERQIHBhcnNlcidzIGRhdGEgZXhwb3NlZCB0 byBjbGllbnRzCisgKgorICogQHBkZXY6IHBsYXRmb3JtIGRhdGEgb2YgdGhlIGNsaWVudAorICog QG1wOiBncGlvLCByZWd1bGF0b3IgYW5kIGNsb2NrIHJlbGF0ZWQgZGF0YQorICogQHBpbmN0cmw6 IHBpbi1jb250cm9sIHJlbGF0ZWQgZGF0YQorICogQGRpc3BfZGF0YTogY29udHJvbGxlcidzIGRp c3BsYXkgcmVsYXRlZCBkYXRhCisgKiBAcGFyc2U6IGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBieSBj bGllbnQgdG8gcGFyc2UgZGV2aWNlIHRyZWUuCisgKi8KK3N0cnVjdCBkcF9wYXJzZXIgeworCXN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IGRzc19tb2R1bGVfcG93ZXIgbXBb RFBfTUFYX1BNXTsKKwlzdHJ1Y3QgZHBfcGluY3RybCBwaW5jdHJsOworCXN0cnVjdCBkcF9pbyBp bzsKKwlzdHJ1Y3QgZHBfZGlzcGxheV9kYXRhIGRpc3BfZGF0YTsKKworCXU4IGxfbWFwWzRdOwor CXN0cnVjdCBkcF9hdXhfY2ZnIGF1eF9jZmdbQVVYX0NGR19MRU5dOworCXUzMiBtYXhfcGNsa19r aHo7CisKKwlpbnQgKCpwYXJzZSkoc3RydWN0IGRwX3BhcnNlciAqcGFyc2VyKTsKK307CisKKy8q KgorICogZHBfcGFyc2VyX2dldCgpIC0gZ2V0IHRoZSBEUCdzIGRldmljZSB0cmVlIHBhcnNlciBt b2R1bGUKKyAqCisgKiBAcGRldjogcGxhdGZvcm0gZGF0YSBvZiB0aGUgY2xpZW50CisgKiByZXR1 cm46IHBvaW50ZXIgdG8gZHBfcGFyc2VyIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9u IHByb3ZpZGVzIGNsaWVudCBjYXBhYmlsaXR5IHRvIHBhcnNlIHRoZQorICogZGV2aWNlIHRyZWUg YW5kIHBvcHVsYXRlIHRoZSBkYXRhIHN0cnVjdHVyZXMuIFRoZSBkYXRhCisgKiByZWxhdGVkIHRv IGNsb2NrLCByZWd1bGF0b3JzLCBwaW4tY29udHJvbCBhbmQgb3RoZXIKKyAqIGNhbiBiZSBwYXJz ZWQgdXNpbmcgdGhpcyBtb2R1bGUuCisgKi8KK3N0cnVjdCBkcF9wYXJzZXIgKmRwX3BhcnNlcl9n ZXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CisKKy8qKgorICogZHBfcGFyc2VyX3B1 dCgpIC0gY2xlYW5zIHRoZSBkcF9wYXJzZXIgbW9kdWxlCisgKgorICogQHBhcnNlcjogcG9pbnRl ciB0byB0aGUgcGFyc2VyJ3MgZGF0YS4KKyAqLwordm9pZCBkcF9wYXJzZXJfcHV0KHN0cnVjdCBk cF9wYXJzZXIgKnBhcnNlcik7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9t c20vZHAvZHBfcG93ZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcG93ZXIuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDU4NDgwCi0tLSAvZGV2L251bGwKKysr IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wb3dlci5jCkBAIC0wLDAgKzEsNTk5IEBACisv KgorICogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwg cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9u bHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNkZWZpbmUgcHJfZm10KGZt dCkJIltkcm0tZHBdICVzOiAiIGZtdCwgX19mdW5jX18KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5o PgorI2luY2x1ZGUgImRwX3Bvd2VyLmgiCisKKyNkZWZpbmUgRFBfQ0xJRU5UX05BTUVfU0laRQky MAorCitzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSB7CisJc3RydWN0IGRwX3BhcnNlciAqcGFyc2Vy OworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IGNsayAqcGl4ZWxfY2xr X3JjZzsKKwlzdHJ1Y3QgY2xrICpwaXhlbF9wYXJlbnQ7CisKKwlzdHJ1Y3QgZHBfcG93ZXIgZHBf cG93ZXI7CisKKwlib29sIGNvcmVfY2xrc19vbjsKKwlib29sIGxpbmtfY2xrc19vbjsKK307CisK K3N0YXRpYyBpbnQgZHBfcG93ZXJfcmVndWxhdG9yX2luaXQoc3RydWN0IGRwX3Bvd2VyX3ByaXZh dGUgKnBvd2VyKQoreworCWludCByYyA9IDAsIGkgPSAwLCBqID0gMDsKKwlzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2OworCXN0cnVjdCBkcF9wYXJzZXIgKnBhcnNlcjsKKworCXBhcnNlciA9 IHBvd2VyLT5wYXJzZXI7CisJcGRldiA9IHBvd2VyLT5wZGV2OworCisJZm9yIChpID0gRFBfQ09S RV9QTTsgIXJjICYmIChpIDwgRFBfTUFYX1BNKTsgaSsrKSB7CisJCXJjID0gbXNtX2Rzc19jb25m aWdfdnJlZygmcGRldi0+ZGV2LAorCQkJcGFyc2VyLT5tcFtpXS52cmVnX2NvbmZpZywKKwkJCXBh cnNlci0+bXBbaV0ubnVtX3ZyZWcsIDEpOworCQlpZiAocmMpIHsKKwkJCXByX2VycigiZmFpbGVk IHRvIGluaXQgdnJlZ3MgZm9yICVzXG4iLAorCQkJCWRwX3BhcnNlcl9wbV9uYW1lKGkpKTsKKwkJ CWZvciAoaiA9IGkgLSAxOyBqID49IERQX0NPUkVfUE07IGotLSkgeworCQkJCW1zbV9kc3NfY29u ZmlnX3ZyZWcoJnBkZXYtPmRldiwKKwkJCQlwYXJzZXItPm1wW2pdLnZyZWdfY29uZmlnLAorCQkJ CXBhcnNlci0+bXBbal0ubnVtX3ZyZWcsIDApOworCQkJfQorCisJCQlnb3RvIGVycm9yOworCQl9 CisJfQorZXJyb3I6CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBkcF9wb3dlcl9yZWd1 bGF0b3JfZGVpbml0KHN0cnVjdCBkcF9wb3dlcl9wcml2YXRlICpwb3dlcikKK3sKKwlpbnQgcmMg PSAwLCBpID0gMDsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXN0cnVjdCBkcF9w YXJzZXIgKnBhcnNlcjsKKworCXBhcnNlciA9IHBvd2VyLT5wYXJzZXI7CisJcGRldiA9IHBvd2Vy LT5wZGV2OworCisJZm9yIChpID0gRFBfQ09SRV9QTTsgKGkgPCBEUF9NQVhfUE0pOyBpKyspIHsK KwkJcmMgPSBtc21fZHNzX2NvbmZpZ192cmVnKCZwZGV2LT5kZXYsCisJCQlwYXJzZXItPm1wW2ld LnZyZWdfY29uZmlnLAorCQkJcGFyc2VyLT5tcFtpXS5udW1fdnJlZywgMCk7CisJCWlmIChyYykK KwkJCXByX2VycigiZmFpbGVkIHRvIGRlaW5pdCB2cmVncyBmb3IgJXNcbiIsCisJCQkJZHBfcGFy c2VyX3BtX25hbWUoaSkpOworCX0KK30KKworc3RhdGljIGludCBkcF9wb3dlcl9yZWd1bGF0b3Jf Y3RybChzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSAqcG93ZXIsIGJvb2wgZW5hYmxlKQoreworCWlu dCByYyA9IDAsIGkgPSAwLCBqID0gMDsKKwlzdHJ1Y3QgZHBfcGFyc2VyICpwYXJzZXI7CisKKwlw YXJzZXIgPSBwb3dlci0+cGFyc2VyOworCisJZm9yIChpID0gRFBfQ09SRV9QTTsgaSA8IERQX01B WF9QTTsgaSsrKSB7CisJCXJjID0gbXNtX2Rzc19lbmFibGVfdnJlZygKKwkJCXBhcnNlci0+bXBb aV0udnJlZ19jb25maWcsCisJCQlwYXJzZXItPm1wW2ldLm51bV92cmVnLCBlbmFibGUpOworCQlp ZiAocmMpIHsKKwkJCXByX2VycigiZmFpbGVkIHRvICclcycgdnJlZ3MgZm9yICVzXG4iLAorCQkJ CQllbmFibGUgPyAiZW5hYmxlIiA6ICJkaXNhYmxlIiwKKwkJCQkJZHBfcGFyc2VyX3BtX25hbWUo aSkpOworCQkJaWYgKGVuYWJsZSkgeworCQkJCWZvciAoaiA9IGktMTsgaiA+PSBEUF9DT1JFX1BN OyBqLS0pIHsKKwkJCQkJbXNtX2Rzc19lbmFibGVfdnJlZygKKwkJCQkJcGFyc2VyLT5tcFtqXS52 cmVnX2NvbmZpZywKKwkJCQkJcGFyc2VyLT5tcFtqXS5udW1fdnJlZywgMCk7CisJCQkJfQorCQkJ fQorCQkJZ290byBlcnJvcjsKKwkJfQorCX0KK2Vycm9yOgorCXJldHVybiByYzsKK30KKworc3Rh dGljIGludCBkcF9wb3dlcl9waW5jdHJsX3NldChzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSAqcG93 ZXIsIGJvb2wgYWN0aXZlKQoreworCWludCByYyA9IC1FRkFVTFQ7CisJc3RydWN0IHBpbmN0cmxf c3RhdGUgKnBpbl9zdGF0ZTsKKwlzdHJ1Y3QgZHBfcGFyc2VyICpwYXJzZXI7CisKKwlwYXJzZXIg PSBwb3dlci0+cGFyc2VyOworCisJaWYgKElTX0VSUl9PUl9OVUxMKHBhcnNlci0+cGluY3RybC5w aW4pKQorCQlyZXR1cm4gUFRSX0VSUihwYXJzZXItPnBpbmN0cmwucGluKTsKKworCXBpbl9zdGF0 ZSA9IGFjdGl2ZSA/IHBhcnNlci0+cGluY3RybC5zdGF0ZV9hY3RpdmUKKwkJCQk6IHBhcnNlci0+ cGluY3RybC5zdGF0ZV9zdXNwZW5kOworCWlmICghSVNfRVJSX09SX05VTEwocGluX3N0YXRlKSkg eworCQlyYyA9IHBpbmN0cmxfc2VsZWN0X3N0YXRlKHBhcnNlci0+cGluY3RybC5waW4sCisJCQkJ cGluX3N0YXRlKTsKKwkJaWYgKHJjKQorCQkJcHJfZXJyKCJjYW4gbm90IHNldCAlcyBwaW5zXG4i LAorCQkJICAgICAgIGFjdGl2ZSA/ICJkcF9hY3RpdmUiCisJCQkgICAgICAgOiAiZHBfc2xlZXAi KTsKKwl9IGVsc2UgeworCQlwcl9lcnIoImludmFsaWQgJyVzJyBwaW5zdGF0ZVxuIiwKKwkJICAg ICAgIGFjdGl2ZSA/ICJkcF9hY3RpdmUiCisJCSAgICAgICA6ICJkcF9zbGVlcCIpOworCX0KKwor CXJldHVybiByYzsKK30KKworc3RhdGljIGludCBkcF9wb3dlcl9jbGtfaW5pdChzdHJ1Y3QgZHBf cG93ZXJfcHJpdmF0ZSAqcG93ZXIsIGJvb2wgZW5hYmxlKQoreworCWludCByYyA9IDA7CisJc3Ry dWN0IGRzc19tb2R1bGVfcG93ZXIgKmNvcmUsICpjdHJsOworCXN0cnVjdCBkZXZpY2UgKmRldjsK KworCWNvcmUgPSAmcG93ZXItPnBhcnNlci0+bXBbRFBfQ09SRV9QTV07CisJY3RybCA9ICZwb3dl ci0+cGFyc2VyLT5tcFtEUF9DVFJMX1BNXTsKKworCWRldiA9ICZwb3dlci0+cGRldi0+ZGV2Owor CisJaWYgKCFjb3JlIHx8ICFjdHJsKSB7CisJCXByX2VycigiaW52YWxpZCBwb3dlcl9kYXRhXG4i KTsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKGVuYWJsZSkgewor CQlyYyA9IG1zbV9kc3NfZ2V0X2NsayhkZXYsIGNvcmUtPmNsa19jb25maWcsIGNvcmUtPm51bV9j bGspOworCQlpZiAocmMpIHsKKwkJCXByX2VycigiZmFpbGVkIHRvIGdldCAlcyBjbGsuIGVycj0l ZFxuIiwKKwkJCQlkcF9wYXJzZXJfcG1fbmFtZShEUF9DT1JFX1BNKSwgcmMpOworCQkJZ290byBl eGl0OworCQl9CisKKwkJcmMgPSBtc21fZHNzX2dldF9jbGsoZGV2LCBjdHJsLT5jbGtfY29uZmln LCBjdHJsLT5udW1fY2xrKTsKKwkJaWYgKHJjKSB7CisJCQlwcl9lcnIoImZhaWxlZCB0byBnZXQg JXMgY2xrLiBlcnI9JWRcbiIsCisJCQkJZHBfcGFyc2VyX3BtX25hbWUoRFBfQ1RSTF9QTSksIHJj KTsKKwkJCWdvdG8gY3RybF9nZXRfZXJyb3I7CisJCX0KKworCQlwb3dlci0+cGl4ZWxfY2xrX3Jj ZyA9IGRldm1fY2xrX2dldChkZXYsICJwaXhlbF9jbGtfcmNnIik7CisJCWlmIChJU19FUlIocG93 ZXItPnBpeGVsX2Nsa19yY2cpKSB7CisJCQlwcl9kZWJ1ZygiVW5hYmxlIHRvIGdldCBEUCBwaXhl bCBjbGsgUkNHXG4iKTsKKwkJCXBvd2VyLT5waXhlbF9jbGtfcmNnID0gTlVMTDsKKwkJfQorCisJ CXBvd2VyLT5waXhlbF9wYXJlbnQgPSBkZXZtX2Nsa19nZXQoZGV2LCAicGl4ZWxfcGFyZW50Iik7 CisJCWlmIChJU19FUlIocG93ZXItPnBpeGVsX3BhcmVudCkpIHsKKwkJCXByX2RlYnVnKCJVbmFi bGUgdG8gZ2V0IERQIHBpeGVsIFJDRyBwYXJlbnRcbiIpOworCQkJcG93ZXItPnBpeGVsX3BhcmVu dCA9IE5VTEw7CisJCX0KKwl9IGVsc2UgeworCQlpZiAocG93ZXItPnBpeGVsX3BhcmVudCkKKwkJ CWRldm1fY2xrX3B1dChkZXYsIHBvd2VyLT5waXhlbF9wYXJlbnQpOworCisJCWlmIChwb3dlci0+ cGl4ZWxfY2xrX3JjZykKKwkJCWRldm1fY2xrX3B1dChkZXYsIHBvd2VyLT5waXhlbF9jbGtfcmNn KTsKKworCQltc21fZHNzX3B1dF9jbGsoY3RybC0+Y2xrX2NvbmZpZywgY3RybC0+bnVtX2Nsayk7 CisJCW1zbV9kc3NfcHV0X2Nsayhjb3JlLT5jbGtfY29uZmlnLCBjb3JlLT5udW1fY2xrKTsKKwl9 CisKKwlyZXR1cm4gcmM7CisKK2N0cmxfZ2V0X2Vycm9yOgorCW1zbV9kc3NfcHV0X2Nsayhjb3Jl LT5jbGtfY29uZmlnLCBjb3JlLT5udW1fY2xrKTsKK2V4aXQ6CisJcmV0dXJuIHJjOworfQorCitz dGF0aWMgaW50IGRwX3Bvd2VyX2Nsa19zZXRfcmF0ZShzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSAq cG93ZXIsCisJCWVudW0gZHBfcG1fdHlwZSBtb2R1bGUsIGJvb2wgZW5hYmxlKQoreworCWludCBy YyA9IDA7CisJc3RydWN0IGRzc19tb2R1bGVfcG93ZXIgKm1wOworCisJaWYgKCFwb3dlcikgewor CQlwcl9lcnIoImludmFsaWQgcG93ZXIgZGF0YVxuIik7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290 byBleGl0OworCX0KKworCW1wID0gJnBvd2VyLT5wYXJzZXItPm1wW21vZHVsZV07CisKKwlpZiAo ZW5hYmxlKSB7CisJCXJjID0gbXNtX2Rzc19jbGtfc2V0X3JhdGUobXAtPmNsa19jb25maWcsIG1w LT5udW1fY2xrKTsKKwkJaWYgKHJjKSB7CisJCQlwcl9lcnIoImZhaWxlZCB0byBzZXQgY2xrcyBy YXRlLlxuIik7CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQlyYyA9IG1zbV9kc3NfZW5hYmxlX2Ns ayhtcC0+Y2xrX2NvbmZpZywgbXAtPm51bV9jbGssIDEpOworCQlpZiAocmMpIHsKKwkJCXByX2Vy cigiZmFpbGVkIHRvIGVuYWJsZSBjbGtzXG4iKTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCX0gZWxz ZSB7CisJCXJjID0gbXNtX2Rzc19lbmFibGVfY2xrKG1wLT5jbGtfY29uZmlnLCBtcC0+bnVtX2Ns aywgMCk7CisJCWlmIChyYykgeworCQkJcHJfZXJyKCJmYWlsZWQgdG8gZGlzYWJsZSBjbGtzXG4i KTsKKwkJCQlnb3RvIGV4aXQ7CisJCX0KKwl9CitleGl0OgorCXJldHVybiByYzsKK30KKworc3Rh dGljIGludCBkcF9wb3dlcl9jbGtfZW5hYmxlKHN0cnVjdCBkcF9wb3dlciAqZHBfcG93ZXIsCisJ CWVudW0gZHBfcG1fdHlwZSBwbV90eXBlLCBib29sIGVuYWJsZSkKK3sKKwlpbnQgcmMgPSAwOwor CXN0cnVjdCBkc3NfbW9kdWxlX3Bvd2VyICptcDsKKwlzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSAq cG93ZXI7CisKKwlpZiAoIWRwX3Bvd2VyKSB7CisJCXByX2VycigiaW52YWxpZCBwb3dlciBkYXRh XG4iKTsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIGVycm9yOworCX0KKworCXBvd2VyID0gY29u dGFpbmVyX29mKGRwX3Bvd2VyLCBzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSwgZHBfcG93ZXIpOwor CisJbXAgPSAmcG93ZXItPnBhcnNlci0+bXBbcG1fdHlwZV07CisKKwlpZiAoKHBtX3R5cGUgIT0g RFBfQ09SRV9QTSkgJiYgKHBtX3R5cGUgIT0gRFBfQ1RSTF9QTSkpIHsKKwkJcHJfZXJyKCJ1bnN1 cHBvcnRlZCBwb3dlciBtb2R1bGU6ICVzXG4iLAorCQkJCWRwX3BhcnNlcl9wbV9uYW1lKHBtX3R5 cGUpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGVuYWJsZSkgeworCQlpZiAoKHBt X3R5cGUgPT0gRFBfQ09SRV9QTSkKKwkJCSYmIChwb3dlci0+Y29yZV9jbGtzX29uKSkgeworCQkJ cHJfZGVidWcoImNvcmUgY2xrcyBhbHJlYWR5IGVuYWJsZWRcbiIpOworCQkJcmV0dXJuIDA7CisJ CX0KKworCQlpZiAoKHBtX3R5cGUgPT0gRFBfQ1RSTF9QTSkKKwkJCSYmIChwb3dlci0+bGlua19j bGtzX29uKSkgeworCQkJcHJfZGVidWcoImxpbmtzIGNsa3MgYWxyZWFkeSBlbmFibGVkXG4iKTsK KwkJCXJldHVybiAwOworCQl9CisKKwkJaWYgKChwbV90eXBlID09IERQX0NUUkxfUE0pICYmICgh cG93ZXItPmNvcmVfY2xrc19vbikpIHsKKwkJCXByX2RlYnVnKCJOZWVkIHRvIGVuYWJsZSBjb3Jl IGNsa3MgYmVmb3JlIGxpbmsgY2xrc1xuIik7CisKKwkJCXJjID0gZHBfcG93ZXJfY2xrX3NldF9y YXRlKHBvd2VyLCBEUF9DT1JFX1BNLCBlbmFibGUpOworCQkJaWYgKHJjKSB7CisJCQkJcHJfZXJy KCJmYWlsZWQgdG8gZW5hYmxlIGNsa3M6ICVzLiBlcnI9JWRcbiIsCisJCQkJCWRwX3BhcnNlcl9w bV9uYW1lKERQX0NPUkVfUE0pLCByYyk7CisJCQkJZ290byBlcnJvcjsKKwkJCX0gZWxzZSB7CisJ CQkJcG93ZXItPmNvcmVfY2xrc19vbiA9IHRydWU7CisJCQl9CisJCX0KKwl9CisKKwlyYyA9IGRw X3Bvd2VyX2Nsa19zZXRfcmF0ZShwb3dlciwgcG1fdHlwZSwgZW5hYmxlKTsKKwlpZiAocmMpIHsK KwkJcHJfZXJyKCJmYWlsZWQgdG8gJyVzJyBjbGtzIGZvcjogJXMuIGVycj0lZFxuIiwKKwkJCWVu YWJsZSA/ICJlbmFibGUiIDogImRpc2FibGUiLAorCQkJZHBfcGFyc2VyX3BtX25hbWUocG1fdHlw ZSksIHJjKTsKKwkJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKHBtX3R5cGUgPT0gRFBfQ09SRV9Q TSkKKwkJcG93ZXItPmNvcmVfY2xrc19vbiA9IGVuYWJsZTsKKwllbHNlCisJCXBvd2VyLT5saW5r X2Nsa3Nfb24gPSBlbmFibGU7CisKKwlwcl9kZWJ1ZygiJXMgY2xvY2tzIGZvciAlc1xuIiwKKwkJ CWVuYWJsZSA/ICJlbmFibGUiIDogImRpc2FibGUiLAorCQkJZHBfcGFyc2VyX3BtX25hbWUocG1f dHlwZSkpOworCXByX2RlYnVnKCJsaW5rX2Nsa3M6JXMgY29yZV9jbGtzOiVzXG4iLAorCQlwb3dl ci0+bGlua19jbGtzX29uID8gIm9uIiA6ICJvZmYiLAorCQlwb3dlci0+Y29yZV9jbGtzX29uID8g Im9uIiA6ICJvZmYiKTsKK2Vycm9yOgorCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBkcF9w b3dlcl9yZXF1ZXN0X2dwaW9zKHN0cnVjdCBkcF9wb3dlcl9wcml2YXRlICpwb3dlcikKK3sKKwlp bnQgcmMgPSAwLCBpOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZHNzX21vZHVsZV9w b3dlciAqbXA7CisJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBncGlvX25hbWVzW10gPSB7CisJ CSJhdXhfZW5hYmxlIiwgImF1eF9zZWwiLCAidXNicGx1Z19jYyIsCisJfTsKKworCWlmICghcG93 ZXIpIHsKKwkJcHJfZXJyKCJpbnZhbGlkIHBvd2VyIGRhdGFcbiIpOworCQlyZXR1cm4gLUVJTlZB TDsKKwl9CisKKwlkZXYgPSAmcG93ZXItPnBkZXYtPmRldjsKKwltcCA9ICZwb3dlci0+cGFyc2Vy LT5tcFtEUF9DT1JFX1BNXTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGdwaW9fbmFt ZXMpOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IGdwaW8gPSBtcC0+Z3Bpb19jb25maWdbaV0uZ3Bp bzsKKworCQlpZiAoZ3Bpb19pc192YWxpZChncGlvKSkgeworCQkJcmMgPSBkZXZtX2dwaW9fcmVx dWVzdChkZXYsIGdwaW8sIGdwaW9fbmFtZXNbaV0pOworCQkJaWYgKHJjKSB7CisJCQkJcHJfZXJy KCJyZXF1ZXN0ICVzIGdwaW8gZmFpbGVkLCByYz0lZFxuIiwKKwkJCQkJICAgICAgIGdwaW9fbmFt ZXNbaV0sIHJjKTsKKwkJCQlnb3RvIGVycm9yOworCQkJfQorCQl9CisJfQorCXJldHVybiAwOwor ZXJyb3I6CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZ3Bpb19uYW1lcyk7IGkrKykgewor CQl1bnNpZ25lZCBpbnQgZ3BpbyA9IG1wLT5ncGlvX2NvbmZpZ1tpXS5ncGlvOworCisJCWlmIChn cGlvX2lzX3ZhbGlkKGdwaW8pKQorCQkJZ3Bpb19mcmVlKGdwaW8pOworCX0KKwlyZXR1cm4gcmM7 Cit9CisKK3N0YXRpYyBib29sIGRwX3Bvd2VyX2ZpbmRfZ3Bpbyhjb25zdCBjaGFyICpncGlvMSwg Y29uc3QgY2hhciAqZ3BpbzIpCit7CisJcmV0dXJuICEhc3RybnN0cihncGlvMSwgZ3BpbzIsIHN0 cmxlbihncGlvMSkpOworfQorCitzdGF0aWMgdm9pZCBkcF9wb3dlcl9zZXRfZ3BpbyhzdHJ1Y3Qg ZHBfcG93ZXJfcHJpdmF0ZSAqcG93ZXIsIGJvb2wgZmxpcCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qg ZHNzX21vZHVsZV9wb3dlciAqbXAgPSAmcG93ZXItPnBhcnNlci0+bXBbRFBfQ09SRV9QTV07CisJ c3RydWN0IGRzc19ncGlvICpjb25maWcgPSBtcC0+Z3Bpb19jb25maWc7CisKKwlmb3IgKGkgPSAw OyBpIDwgbXAtPm51bV9ncGlvOyBpKyspIHsKKwkJaWYgKGRwX3Bvd2VyX2ZpbmRfZ3Bpbyhjb25m aWctPmdwaW9fbmFtZSwgImF1eC1zZWwiKSkKKwkJCWNvbmZpZy0+dmFsdWUgPSBmbGlwOworCisJ CWlmIChncGlvX2lzX3ZhbGlkKGNvbmZpZy0+Z3BpbykpIHsKKwkJCXByX2RlYnVnKCJncGlvICVz LCB2YWx1ZSAlZFxuIiwgY29uZmlnLT5ncGlvX25hbWUsCisJCQkJY29uZmlnLT52YWx1ZSk7CisK KwkJCWlmIChkcF9wb3dlcl9maW5kX2dwaW8oY29uZmlnLT5ncGlvX25hbWUsICJhdXgtZW4iKSB8 fAorCQkJICAgIGRwX3Bvd2VyX2ZpbmRfZ3Bpbyhjb25maWctPmdwaW9fbmFtZSwgImF1eC1zZWwi KSkKKwkJCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoY29uZmlnLT5ncGlvLAorCQkJCQljb25maWct PnZhbHVlKTsKKwkJCWVsc2UKKwkJCQlncGlvX3NldF92YWx1ZShjb25maWctPmdwaW8sIGNvbmZp Zy0+dmFsdWUpOworCisJCX0KKwkJY29uZmlnKys7CisJfQorfQorCitzdGF0aWMgaW50IGRwX3Bv d2VyX2NvbmZpZ19ncGlvcyhzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSAqcG93ZXIsIGJvb2wgZmxp cCwKKwkJCQkJYm9vbCBlbmFibGUpCit7CisJaW50IHJjID0gMCwgaTsKKwlzdHJ1Y3QgZHNzX21v ZHVsZV9wb3dlciAqbXA7CisJc3RydWN0IGRzc19ncGlvICpjb25maWc7CisKKwltcCA9ICZwb3dl ci0+cGFyc2VyLT5tcFtEUF9DT1JFX1BNXTsKKwljb25maWcgPSBtcC0+Z3Bpb19jb25maWc7CisK KwlpZiAoZW5hYmxlKSB7CisJCXJjID0gZHBfcG93ZXJfcmVxdWVzdF9ncGlvcyhwb3dlcik7CisJ CWlmIChyYykgeworCQkJcHJfZXJyKCJncGlvIHJlcXVlc3QgZmFpbGVkXG4iKTsKKwkJCXJldHVy biByYzsKKwkJfQorCisJCWRwX3Bvd2VyX3NldF9ncGlvKHBvd2VyLCBmbGlwKTsKKwl9IGVsc2Ug eworCQlmb3IgKGkgPSAwOyBpIDwgbXAtPm51bV9ncGlvOyBpKyspIHsKKwkJCWdwaW9fc2V0X3Zh bHVlKGNvbmZpZ1tpXS5ncGlvLCAwKTsKKwkJCWdwaW9fZnJlZShjb25maWdbaV0uZ3Bpbyk7CisJ CX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkcF9wb3dlcl9jbGllbnRfaW5p dChzdHJ1Y3QgZHBfcG93ZXIgKmRwX3Bvd2VyKQoreworCWludCByYyA9IDA7CisJc3RydWN0IGRw X3Bvd2VyX3ByaXZhdGUgKnBvd2VyOworCisJaWYgKCFkcF9wb3dlcikgeworCQlwcl9lcnIoImlu dmFsaWQgcG93ZXIgZGF0YVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXBvd2VyID0g Y29udGFpbmVyX29mKGRwX3Bvd2VyLCBzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSwgZHBfcG93ZXIp OworCisJcG1fcnVudGltZV9lbmFibGUoJnBvd2VyLT5wZGV2LT5kZXYpOworCisJcmMgPSBkcF9w b3dlcl9yZWd1bGF0b3JfaW5pdChwb3dlcik7CisJaWYgKHJjKSB7CisJCXByX2VycigiZmFpbGVk IHRvIGluaXQgcmVndWxhdG9yc1xuIik7CisJCWdvdG8gZXJyb3JfcG93ZXI7CisJfQorCisJcmMg PSBkcF9wb3dlcl9jbGtfaW5pdChwb3dlciwgdHJ1ZSk7CisJaWYgKHJjKSB7CisJCXByX2Vycigi ZmFpbGVkIHRvIGluaXQgY2xvY2tzXG4iKTsKKwkJZ290byBlcnJvcl9jbGs7CisJfQorCXJldHVy biAwOworCitlcnJvcl9jbGs6CisJZHBfcG93ZXJfcmVndWxhdG9yX2RlaW5pdChwb3dlcik7Citl cnJvcl9wb3dlcjoKKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBvd2VyLT5wZGV2LT5kZXYpOworCXJl dHVybiByYzsKK30KKworc3RhdGljIHZvaWQgZHBfcG93ZXJfY2xpZW50X2RlaW5pdChzdHJ1Y3Qg ZHBfcG93ZXIgKmRwX3Bvd2VyKQoreworCXN0cnVjdCBkcF9wb3dlcl9wcml2YXRlICpwb3dlcjsK KworCWlmICghZHBfcG93ZXIpIHsKKwkJcHJfZXJyKCJpbnZhbGlkIHBvd2VyIGRhdGFcbiIpOwor CQlyZXR1cm47CisJfQorCisJcG93ZXIgPSBjb250YWluZXJfb2YoZHBfcG93ZXIsIHN0cnVjdCBk cF9wb3dlcl9wcml2YXRlLCBkcF9wb3dlcik7CisKKwlkcF9wb3dlcl9jbGtfaW5pdChwb3dlciwg ZmFsc2UpOworCWRwX3Bvd2VyX3JlZ3VsYXRvcl9kZWluaXQocG93ZXIpOworCXBtX3J1bnRpbWVf ZGlzYWJsZSgmcG93ZXItPnBkZXYtPmRldik7CisKK30KKworc3RhdGljIGludCBkcF9wb3dlcl9z ZXRfcGl4ZWxfY2xrX3BhcmVudChzdHJ1Y3QgZHBfcG93ZXIgKmRwX3Bvd2VyKQoreworCWludCBy YyA9IDA7CisJc3RydWN0IGRwX3Bvd2VyX3ByaXZhdGUgKnBvd2VyOworCisJaWYgKCFkcF9wb3dl cikgeworCQlwcl9lcnIoImludmFsaWQgcG93ZXIgZGF0YVxuIik7CisJCXJjID0gLUVJTlZBTDsK KwkJZ290byBleGl0OworCX0KKworCXBvd2VyID0gY29udGFpbmVyX29mKGRwX3Bvd2VyLCBzdHJ1 Y3QgZHBfcG93ZXJfcHJpdmF0ZSwgZHBfcG93ZXIpOworCisJaWYgKHBvd2VyLT5waXhlbF9jbGtf cmNnICYmIHBvd2VyLT5waXhlbF9wYXJlbnQpCisJCWNsa19zZXRfcGFyZW50KHBvd2VyLT5waXhl bF9jbGtfcmNnLCBwb3dlci0+cGl4ZWxfcGFyZW50KTsKK2V4aXQ6CisJcmV0dXJuIHJjOworfQor CitzdGF0aWMgaW50IGRwX3Bvd2VyX2luaXQoc3RydWN0IGRwX3Bvd2VyICpkcF9wb3dlciwgYm9v bCBmbGlwKQoreworCWludCByYyA9IDA7CisJc3RydWN0IGRwX3Bvd2VyX3ByaXZhdGUgKnBvd2Vy OworCisJaWYgKCFkcF9wb3dlcikgeworCQlwcl9lcnIoImludmFsaWQgcG93ZXIgZGF0YVxuIik7 CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBleGl0OworCX0KKworCXBvd2VyID0gY29udGFpbmVy X29mKGRwX3Bvd2VyLCBzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSwgZHBfcG93ZXIpOworCisJcG1f cnVudGltZV9nZXRfc3luYygmcG93ZXItPnBkZXYtPmRldik7CisJcmMgPSBkcF9wb3dlcl9yZWd1 bGF0b3JfY3RybChwb3dlciwgdHJ1ZSk7CisJaWYgKHJjKSB7CisJCXByX2VycigiZmFpbGVkIHRv IGVuYWJsZSByZWd1bGF0b3JzXG4iKTsKKwkJZ290byBleGl0OworCX0KKworCXJjID0gZHBfcG93 ZXJfcGluY3RybF9zZXQocG93ZXIsIHRydWUpOworCWlmIChyYykgeworCQlwcl9lcnIoImZhaWxl ZCB0byBzZXQgcGluY3RybCBzdGF0ZVxuIik7CisJCWdvdG8gZXJyX3BpbmN0cmw7CisJfQorCisJ cmMgPSBkcF9wb3dlcl9jb25maWdfZ3Bpb3MocG93ZXIsIGZsaXAsIHRydWUpOworCWlmIChyYykg eworCQlwcl9lcnIoImZhaWxlZCB0byBlbmFibGUgZ3Bpb3NcbiIpOworCQlnb3RvIGVycl9ncGlv OworCX0KKworCXJjID0gZHBfcG93ZXJfY2xrX2VuYWJsZShkcF9wb3dlciwgRFBfQ09SRV9QTSwg dHJ1ZSk7CisJaWYgKHJjKSB7CisJCXByX2VycigiZmFpbGVkIHRvIGVuYWJsZSBEUCBjb3JlIGNs b2Nrc1xuIik7CisJCWdvdG8gZXJyX2NsazsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX2NsazoK KwlkcF9wb3dlcl9jb25maWdfZ3Bpb3MocG93ZXIsIGZsaXAsIGZhbHNlKTsKK2Vycl9ncGlvOgor CWRwX3Bvd2VyX3BpbmN0cmxfc2V0KHBvd2VyLCBmYWxzZSk7CitlcnJfcGluY3RybDoKKwlkcF9w b3dlcl9yZWd1bGF0b3JfY3RybChwb3dlciwgZmFsc2UpOworZXhpdDoKKwlwbV9ydW50aW1lX3B1 dF9zeW5jKCZwb3dlci0+cGRldi0+ZGV2KTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQg ZHBfcG93ZXJfZGVpbml0KHN0cnVjdCBkcF9wb3dlciAqZHBfcG93ZXIpCit7CisJaW50IHJjID0g MDsKKwlzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSAqcG93ZXI7CisKKwlpZiAoIWRwX3Bvd2VyKSB7 CisJCXByX2VycigiaW52YWxpZCBwb3dlciBkYXRhXG4iKTsKKwkJcmMgPSAtRUlOVkFMOworCQln b3RvIGV4aXQ7CisJfQorCisJcG93ZXIgPSBjb250YWluZXJfb2YoZHBfcG93ZXIsIHN0cnVjdCBk cF9wb3dlcl9wcml2YXRlLCBkcF9wb3dlcik7CisKKwlkcF9wb3dlcl9jbGtfZW5hYmxlKGRwX3Bv d2VyLCBEUF9DT1JFX1BNLCBmYWxzZSk7CisJZHBfcG93ZXJfY29uZmlnX2dwaW9zKHBvd2VyLCBm YWxzZSwgZmFsc2UpOworCWRwX3Bvd2VyX3BpbmN0cmxfc2V0KHBvd2VyLCBmYWxzZSk7CisJZHBf cG93ZXJfcmVndWxhdG9yX2N0cmwocG93ZXIsIGZhbHNlKTsKKwlwbV9ydW50aW1lX3B1dF9zeW5j KCZwb3dlci0+cGRldi0+ZGV2KTsKK2V4aXQ6CisJcmV0dXJuIHJjOworfQorCitzdHJ1Y3QgZHBf cG93ZXIgKmRwX3Bvd2VyX2dldChzdHJ1Y3QgZHBfcGFyc2VyICpwYXJzZXIpCit7CisJaW50IHJj ID0gMDsKKwlzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSAqcG93ZXI7CisJc3RydWN0IGRwX3Bvd2Vy ICpkcF9wb3dlcjsKKworCWlmICghcGFyc2VyKSB7CisJCXByX2VycigiaW52YWxpZCBpbnB1dFxu Iik7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlwb3dlciA9IGRldm1f a3phbGxvYygmcGFyc2VyLT5wZGV2LT5kZXYsIHNpemVvZigqcG93ZXIpLCBHRlBfS0VSTkVMKTsK KwlpZiAoIXBvd2VyKSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlw b3dlci0+cGFyc2VyID0gcGFyc2VyOworCXBvd2VyLT5wZGV2ID0gcGFyc2VyLT5wZGV2OworCisJ ZHBfcG93ZXIgPSAmcG93ZXItPmRwX3Bvd2VyOworCisJZHBfcG93ZXItPmluaXQgPSBkcF9wb3dl cl9pbml0OworCWRwX3Bvd2VyLT5kZWluaXQgPSBkcF9wb3dlcl9kZWluaXQ7CisJZHBfcG93ZXIt PmNsa19lbmFibGUgPSBkcF9wb3dlcl9jbGtfZW5hYmxlOworCWRwX3Bvd2VyLT5zZXRfcGl4ZWxf Y2xrX3BhcmVudCA9IGRwX3Bvd2VyX3NldF9waXhlbF9jbGtfcGFyZW50OworCWRwX3Bvd2VyLT5w b3dlcl9jbGllbnRfaW5pdCA9IGRwX3Bvd2VyX2NsaWVudF9pbml0OworCWRwX3Bvd2VyLT5wb3dl cl9jbGllbnRfZGVpbml0ID0gZHBfcG93ZXJfY2xpZW50X2RlaW5pdDsKKworCXJldHVybiBkcF9w b3dlcjsKK2Vycm9yOgorCXJldHVybiBFUlJfUFRSKHJjKTsKK30KKwordm9pZCBkcF9wb3dlcl9w dXQoc3RydWN0IGRwX3Bvd2VyICpkcF9wb3dlcikKK3sKKwlzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0 ZSAqcG93ZXIgPSBOVUxMOworCisJaWYgKCFkcF9wb3dlcikKKwkJcmV0dXJuOworCisJcG93ZXIg PSBjb250YWluZXJfb2YoZHBfcG93ZXIsIHN0cnVjdCBkcF9wb3dlcl9wcml2YXRlLCBkcF9wb3dl cik7CisKKwlkZXZtX2tmcmVlKCZwb3dlci0+cGRldi0+ZGV2LCBwb3dlcik7Cit9CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3Bvd2VyLmggYi9kcml2ZXJzL2dwdS9kcm0v bXNtL2RwL2RwX3Bvd2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFh ZGFhZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcG93ZXIu aApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTgsIFRoZSBM aW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK KyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICov CisKKyNpZm5kZWYgX0RQX1BPV0VSX0hfCisjZGVmaW5lIF9EUF9QT1dFUl9IXworCisjaW5jbHVk ZSAiZHBfcGFyc2VyLmgiCisjaW5jbHVkZSAiZHB1X3Bvd2VyX2hhbmRsZS5oIgorCisvKioKKyAq IHNydWN0IGRwX3Bvd2VyIC0gRGlzcGxheVBvcnQncyBwb3dlciByZWxhdGVkIGRhdGEKKyAqCisg KiBAaW5pdDogaW5pdGlhbGl6ZXMgdGhlIHJlZ3VsYXRvcnMvY29yZSBjbG9ja3MvR1BJT3MvcGlu Y3RybAorICogQGRlaW5pdDogdHVybnMgb2ZmIHRoZSByZWd1bGF0b3JzL2NvcmUgY2xvY2tzL0dQ SU9zL3BpbmN0cmwKKyAqIEBjbGtfZW5hYmxlOiBlbmFibGUvZGlzYWJsZSB0aGUgRFAgY2xvY2tz CisgKiBAc2V0X3BpeGVsX2Nsa19wYXJlbnQ6IHNldCB0aGUgcGFyZW50IG9mIERQIHBpeGVsIGNs b2NrCisgKi8KK3N0cnVjdCBkcF9wb3dlciB7CisJaW50ICgqaW5pdCkoc3RydWN0IGRwX3Bvd2Vy ICpwb3dlciwgYm9vbCBmbGlwKTsKKwlpbnQgKCpkZWluaXQpKHN0cnVjdCBkcF9wb3dlciAqcG93 ZXIpOworCWludCAoKmNsa19lbmFibGUpKHN0cnVjdCBkcF9wb3dlciAqcG93ZXIsIGVudW0gZHBf cG1fdHlwZSBwbV90eXBlLAorCQkJCWJvb2wgZW5hYmxlKTsKKwlpbnQgKCpzZXRfcGl4ZWxfY2xr X3BhcmVudCkoc3RydWN0IGRwX3Bvd2VyICpwb3dlcik7CisJaW50ICgqcG93ZXJfY2xpZW50X2lu aXQpKHN0cnVjdCBkcF9wb3dlciAqcG93ZXIpOworCXZvaWQgKCpwb3dlcl9jbGllbnRfZGVpbml0 KShzdHJ1Y3QgZHBfcG93ZXIgKnBvd2VyKTsKK307CisKKy8qKgorICogZHBfcG93ZXJfZ2V0KCkg LSBjb25maWd1cmUgYW5kIGdldCB0aGUgRGlzcGxheVBvcnQgcG93ZXIgbW9kdWxlIGRhdGEKKyAq CisgKiBAcGFyc2VyOiBpbnN0YW5jZSBvZiBwYXJzZXIgbW9kdWxlCisgKiByZXR1cm46IHBvaW50 ZXIgdG8gYWxsb2NhdGVkIHBvd2VyIG1vZHVsZSBkYXRhCisgKgorICogVGhpcyBBUEkgd2lsbCBj b25maWd1cmUgdGhlIERpc3BsYXlQb3J0J3MgcG93ZXIgbW9kdWxlIGFuZCBwcm92aWRlcworICog bWV0aG9kcyB0byBiZSBjYWxsZWQgYnkgdGhlIGNsaWVudCB0byBjb25maWd1cmUgdGhlIHBvd2Vy IHJlbGF0ZWQKKyAqIG1vZHVlbGVzLgorICovCitzdHJ1Y3QgZHBfcG93ZXIgKmRwX3Bvd2VyX2dl dChzdHJ1Y3QgZHBfcGFyc2VyICpwYXJzZXIpOworCisvKioKKyAqIGRwX3Bvd2VyX3B1dCgpIC0g cmVsZWFzZSB0aGUgcG93ZXIgcmVsYXRlZCByZXNvdXJjZXMKKyAqCisgKiBAcG93ZXI6IHBvaW50 ZXIgdG8gdGhlIHBvd2VyIG1vZHVsZSdzIGRhdGEKKyAqLwordm9pZCBkcF9wb3dlcl9wdXQoc3Ry dWN0IGRwX3Bvd2VyICpwb3dlcik7CisjZW5kaWYgLyogX0RQX1BPV0VSX0hfICovCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL21z bS9kcC9kcF9yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2I1YzBl Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9yZWcuaApAQCAt MCwwICsxLDM1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDE4LCBUaGUgTGludXgg Rm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICog aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJz aW9uIDIgYW5kCisgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisj aWZuZGVmIF9EUF9SRUdfSF8KKyNkZWZpbmUgX0RQX1JFR19IXworCisvKiBEUF9UWCBSZWdpc3Rl cnMgKi8KKyNkZWZpbmUgRFBfSFdfVkVSU0lPTgkJCQkoMHgwMDAwMDAwMCkKKyNkZWZpbmUgRFBf U1dfUkVTRVQJCQkJKDB4MDAwMDAwMTApCisjZGVmaW5lIERQX1BIWV9DVFJMCQkJCSgweDAwMDAw MDE0KQorI2RlZmluZSBEUF9DTEtfQ1RSTAkJCQkoMHgwMDAwMDAxOCkKKyNkZWZpbmUgRFBfQ0xL X0FDVElWRQkJCQkoMHgwMDAwMDAxQykKKyNkZWZpbmUgRFBfSU5UUl9TVEFUVVMJCQkJKDB4MDAw MDAwMjApCisjZGVmaW5lIERQX0lOVFJfU1RBVFVTMgkJCQkoMHgwMDAwMDAyNCkKKyNkZWZpbmUg RFBfSU5UUl9TVEFUVVMzCQkJCSgweDAwMDAwMDI4KQorCisjZGVmaW5lIERQX0RQX0hQRF9DVFJM CQkJCSgweDAwMDAwMDAwKQorI2RlZmluZSBEUF9EUF9IUERfSU5UX1NUQVRVUwkJCSgweDAwMDAw MDA0KQorI2RlZmluZSBEUF9EUF9IUERfSU5UX0FDSwkJCSgweDAwMDAwMDA4KQorI2RlZmluZSBE UF9EUF9IUERfSU5UX01BU0sJCQkoMHgwMDAwMDAwQykKKyNkZWZpbmUgRFBfRFBfSFBEX1JFRlRJ TUVSCQkJKDB4MDAwMDAwMTgpCisjZGVmaW5lIERQX0RQX0hQRF9FVkVOVF9USU1FXzAJCQkoMHgw MDAwMDAxQykKKyNkZWZpbmUgRFBfRFBfSFBEX0VWRU5UX1RJTUVfMQkJCSgweDAwMDAwMDIwKQor I2RlZmluZSBEUF9BVVhfQ1RSTAkJCQkoMHgwMDAwMDAzMCkKKyNkZWZpbmUgRFBfQVVYX0RBVEEJ CQkJKDB4MDAwMDAwMzQpCisjZGVmaW5lIERQX0FVWF9UUkFOU19DVFJMCQkJKDB4MDAwMDAwMzgp CisjZGVmaW5lIERQX1RJTUVPVVRfQ09VTlQJCQkoMHgwMDAwMDAzQykKKyNkZWZpbmUgRFBfQVVY X0xJTUlUUwkJCQkoMHgwMDAwMDA0MCkKKyNkZWZpbmUgRFBfQVVYX1NUQVRVUwkJCQkoMHgwMDAw MDA0NCkKKworI2RlZmluZSBEUF9EUENEX0NQX0lSUQkJCQkoMHgyMDEpCisjZGVmaW5lIERQX0RQ Q0RfUlhTVEFUVVMJCQkoMHg2OTQ5MykKKworI2RlZmluZSBEUF9JTlRFUlJVUFRfVFJBTlNfTlVN CQkJKDB4MDAwMDAwQTApCisKKyNkZWZpbmUgRFBfTUFJTkxJTktfQ1RSTAkJCSgweDAwMDAwMDAw KQorI2RlZmluZSBEUF9TVEFURV9DVFJMCQkJCSgweDAwMDAwMDA0KQorI2RlZmluZSBEUF9DT05G SUdVUkFUSU9OX0NUUkwJCQkoMHgwMDAwMDAwOCkKKyNkZWZpbmUgRFBfU09GVFdBUkVfTVZJRAkJ CSgweDAwMDAwMDEwKQorI2RlZmluZSBEUF9TT0ZUV0FSRV9OVklECQkJKDB4MDAwMDAwMTgpCisj ZGVmaW5lIERQX1RPVEFMX0hPUl9WRVIJCQkoMHgwMDAwMDAxQykKKyNkZWZpbmUgRFBfU1RBUlRf SE9SX1ZFUl9GUk9NX1NZTkMJCSgweDAwMDAwMDIwKQorI2RlZmluZSBEUF9IU1lOQ19WU1lOQ19X SURUSF9QT0xBUklUWQkJKDB4MDAwMDAwMjQpCisjZGVmaW5lIERQX0FDVElWRV9IT1JfVkVSCQkJ KDB4MDAwMDAwMjgpCisjZGVmaW5lIERQX01JU0MxX01JU0MwCQkJCSgweDAwMDAwMDJDKQorI2Rl ZmluZSBEUF9WQUxJRF9CT1VOREFSWQkJCSgweDAwMDAwMDMwKQorI2RlZmluZSBEUF9WQUxJRF9C T1VOREFSWV8yCQkJKDB4MDAwMDAwMzQpCisjZGVmaW5lIERQX0xPR0lDQUwyUEhZU0lDQUxfTEFO RV9NQVBQSU5HCSgweDAwMDAwMDM4KQorCisjZGVmaW5lIERQX01BSU5MSU5LX1JFQURZCQkJKDB4 MDAwMDAwNDApCisjZGVmaW5lIERQX01BSU5MSU5LX0xFVkVMUwkJCSgweDAwMDAwMDQ0KQorI2Rl ZmluZSBEUF9UVQkJCQkJKDB4MDAwMDAwNEMpCisKKyNkZWZpbmUgRFBfSEJSMl9DT01QTElBTkNF X1NDUkFNQkxFUl9SRVNFVAkoMHgwMDAwMDA1NCkKKyNkZWZpbmUgRFBfVEVTVF84MEJJVF9DVVNU T01fUEFUVEVSTl9SRUcwCSgweDAwMDAwMEMwKQorI2RlZmluZSBEUF9URVNUXzgwQklUX0NVU1RP TV9QQVRURVJOX1JFRzEJKDB4MDAwMDAwQzQpCisjZGVmaW5lIERQX1RFU1RfODBCSVRfQ1VTVE9N X1BBVFRFUk5fUkVHMgkoMHgwMDAwMDBDOCkKKworI2RlZmluZSBNTVNTX0RQX01JU0MxX01JU0Mw CQkJKDB4MDAwMDAwMkMpCisjZGVmaW5lIE1NU1NfRFBfQVVESU9fVElNSU5HX0dFTgkJKDB4MDAw MDAwODApCisjZGVmaW5lIE1NU1NfRFBfQVVESU9fVElNSU5HX1JCUl8zMgkJKDB4MDAwMDAwODQp CisjZGVmaW5lIE1NU1NfRFBfQVVESU9fVElNSU5HX0hCUl8zMgkJKDB4MDAwMDAwODgpCisjZGVm aW5lIE1NU1NfRFBfQVVESU9fVElNSU5HX1JCUl80NAkJKDB4MDAwMDAwOEMpCisjZGVmaW5lIE1N U1NfRFBfQVVESU9fVElNSU5HX0hCUl80NAkJKDB4MDAwMDAwOTApCisjZGVmaW5lIE1NU1NfRFBf QVVESU9fVElNSU5HX1JCUl80OAkJKDB4MDAwMDAwOTQpCisjZGVmaW5lIE1NU1NfRFBfQVVESU9f VElNSU5HX0hCUl80OAkJKDB4MDAwMDAwOTgpCisKKyNkZWZpbmUgTU1TU19EUF9QU1JfQ1JDX1JH CQkJKDB4MDAwMDAxNTQpCisjZGVmaW5lIE1NU1NfRFBfUFNSX0NSQ19CCQkJKDB4MDAwMDAxNTgp CisKKyNkZWZpbmUgRFBfQ09NUFJFU1NJT05fTU9ERV9DVFJMCQkoMHgwMDAwMDE4MCkKKworI2Rl ZmluZSBNTVNTX0RQX0FVRElPX0NGRwkJCSgweDAwMDAwMjAwKQorI2RlZmluZSBNTVNTX0RQX0FV RElPX1NUQVRVUwkJCSgweDAwMDAwMjA0KQorI2RlZmluZSBNTVNTX0RQX0FVRElPX1BLVF9DVFJM CQkJKDB4MDAwMDAyMDgpCisjZGVmaW5lIE1NU1NfRFBfQVVESU9fUEtUX0NUUkwyCQkJKDB4MDAw MDAyMEMpCisjZGVmaW5lIE1NU1NfRFBfQVVESU9fQUNSX0NUUkwJCQkoMHgwMDAwMDIxMCkKKyNk ZWZpbmUgTU1TU19EUF9BVURJT19DVFJMX1JFU0VUCQkoMHgwMDAwMDIxNCkKKworI2RlZmluZSBN TVNTX0RQX1NEUF9DRkcJCQkJKDB4MDAwMDAyMjgpCisjZGVmaW5lIE1NU1NfRFBfU0RQX0NGRzIJ CQkoMHgwMDAwMDIyQykKKyNkZWZpbmUgTU1TU19EUF9BVURJT19USU1FU1RBTVBfMAkJKDB4MDAw MDAyMzApCisjZGVmaW5lIE1NU1NfRFBfQVVESU9fVElNRVNUQU1QXzEJCSgweDAwMDAwMjM0KQor CisjZGVmaW5lIE1NU1NfRFBfQVVESU9fU1RSRUFNXzAJCQkoMHgwMDAwMDI0MCkKKyNkZWZpbmUg TU1TU19EUF9BVURJT19TVFJFQU1fMQkJCSgweDAwMDAwMjQ0KQorCisjZGVmaW5lIE1NU1NfRFBf RVhURU5TSU9OXzAJCQkoMHgwMDAwMDI1MCkKKyNkZWZpbmUgTU1TU19EUF9FWFRFTlNJT05fMQkJ CSgweDAwMDAwMjU0KQorI2RlZmluZSBNTVNTX0RQX0VYVEVOU0lPTl8yCQkJKDB4MDAwMDAyNTgp CisjZGVmaW5lIE1NU1NfRFBfRVhURU5TSU9OXzMJCQkoMHgwMDAwMDI1QykKKyNkZWZpbmUgTU1T U19EUF9FWFRFTlNJT05fNAkJCSgweDAwMDAwMjYwKQorI2RlZmluZSBNTVNTX0RQX0VYVEVOU0lP Tl81CQkJKDB4MDAwMDAyNjQpCisjZGVmaW5lIE1NU1NfRFBfRVhURU5TSU9OXzYJCQkoMHgwMDAw MDI2OCkKKyNkZWZpbmUgTU1TU19EUF9FWFRFTlNJT05fNwkJCSgweDAwMDAwMjZDKQorI2RlZmlu ZSBNTVNTX0RQX0VYVEVOU0lPTl84CQkJKDB4MDAwMDAyNzApCisjZGVmaW5lIE1NU1NfRFBfRVhU RU5TSU9OXzkJCQkoMHgwMDAwMDI3NCkKKyNkZWZpbmUgTU1TU19EUF9BVURJT19DT1BZTUFOQUdF TUVOVF8wCQkoMHgwMDAwMDI3OCkKKyNkZWZpbmUgTU1TU19EUF9BVURJT19DT1BZTUFOQUdFTUVO VF8xCQkoMHgwMDAwMDI3QykKKyNkZWZpbmUgTU1TU19EUF9BVURJT19DT1BZTUFOQUdFTUVOVF8y CQkoMHgwMDAwMDI4MCkKKyNkZWZpbmUgTU1TU19EUF9BVURJT19DT1BZTUFOQUdFTUVOVF8zCQko MHgwMDAwMDI4NCkKKyNkZWZpbmUgTU1TU19EUF9BVURJT19DT1BZTUFOQUdFTUVOVF80CQkoMHgw MDAwMDI4OCkKKyNkZWZpbmUgTU1TU19EUF9BVURJT19DT1BZTUFOQUdFTUVOVF81CQkoMHgwMDAw MDI4QykKKyNkZWZpbmUgTU1TU19EUF9BVURJT19JU1JDXzAJCQkoMHgwMDAwMDI5MCkKKyNkZWZp bmUgTU1TU19EUF9BVURJT19JU1JDXzEJCQkoMHgwMDAwMDI5NCkKKyNkZWZpbmUgTU1TU19EUF9B VURJT19JU1JDXzIJCQkoMHgwMDAwMDI5OCkKKyNkZWZpbmUgTU1TU19EUF9BVURJT19JU1JDXzMJ CQkoMHgwMDAwMDI5QykKKyNkZWZpbmUgTU1TU19EUF9BVURJT19JU1JDXzQJCQkoMHgwMDAwMDJB MCkKKyNkZWZpbmUgTU1TU19EUF9BVURJT19JU1JDXzUJCQkoMHgwMDAwMDJBNCkKKyNkZWZpbmUg TU1TU19EUF9BVURJT19JTkZPRlJBTUVfMAkJKDB4MDAwMDAyQTgpCisjZGVmaW5lIE1NU1NfRFBf QVVESU9fSU5GT0ZSQU1FXzEJCSgweDAwMDAwMkFDKQorI2RlZmluZSBNTVNTX0RQX0FVRElPX0lO Rk9GUkFNRV8yCQkoMHgwMDAwMDJCMCkKKworI2RlZmluZSBNTVNTX0RQX0dFTkVSSUMwXzAJCQko MHgwMDAwMDMwMCkKKyNkZWZpbmUgTU1TU19EUF9HRU5FUklDMF8xCQkJKDB4MDAwMDAzMDQpCisj ZGVmaW5lIE1NU1NfRFBfR0VORVJJQzBfMgkJCSgweDAwMDAwMzA4KQorI2RlZmluZSBNTVNTX0RQ X0dFTkVSSUMwXzMJCQkoMHgwMDAwMDMwQykKKyNkZWZpbmUgTU1TU19EUF9HRU5FUklDMF80CQkJ KDB4MDAwMDAzMTApCisjZGVmaW5lIE1NU1NfRFBfR0VORVJJQzBfNQkJCSgweDAwMDAwMzE0KQor I2RlZmluZSBNTVNTX0RQX0dFTkVSSUMwXzYJCQkoMHgwMDAwMDMxOCkKKyNkZWZpbmUgTU1TU19E UF9HRU5FUklDMF83CQkJKDB4MDAwMDAzMUMpCisjZGVmaW5lIE1NU1NfRFBfR0VORVJJQzBfOAkJ CSgweDAwMDAwMzIwKQorI2RlZmluZSBNTVNTX0RQX0dFTkVSSUMwXzkJCQkoMHgwMDAwMDMyNCkK KyNkZWZpbmUgTU1TU19EUF9HRU5FUklDMV8wCQkJKDB4MDAwMDAzMjgpCisjZGVmaW5lIE1NU1Nf RFBfR0VORVJJQzFfMQkJCSgweDAwMDAwMzJDKQorI2RlZmluZSBNTVNTX0RQX0dFTkVSSUMxXzIJ CQkoMHgwMDAwMDMzMCkKKyNkZWZpbmUgTU1TU19EUF9HRU5FUklDMV8zCQkJKDB4MDAwMDAzMzQp CisjZGVmaW5lIE1NU1NfRFBfR0VORVJJQzFfNAkJCSgweDAwMDAwMzM4KQorI2RlZmluZSBNTVNT X0RQX0dFTkVSSUMxXzUJCQkoMHgwMDAwMDMzQykKKyNkZWZpbmUgTU1TU19EUF9HRU5FUklDMV82 CQkJKDB4MDAwMDAzNDApCisjZGVmaW5lIE1NU1NfRFBfR0VORVJJQzFfNwkJCSgweDAwMDAwMzQ0 KQorI2RlZmluZSBNTVNTX0RQX0dFTkVSSUMxXzgJCQkoMHgwMDAwMDM0OCkKKyNkZWZpbmUgTU1T U19EUF9HRU5FUklDMV85CQkJKDB4MDAwMDAzNEMpCisKKyNkZWZpbmUgTU1TU19EUF9WU0NFWFRf MAkJCSgweDAwMDAwMkQwKQorI2RlZmluZSBNTVNTX0RQX1ZTQ0VYVF8xCQkJKDB4MDAwMDAyRDQp CisjZGVmaW5lIE1NU1NfRFBfVlNDRVhUXzIJCQkoMHgwMDAwMDJEOCkKKyNkZWZpbmUgTU1TU19E UF9WU0NFWFRfMwkJCSgweDAwMDAwMkRDKQorI2RlZmluZSBNTVNTX0RQX1ZTQ0VYVF80CQkJKDB4 MDAwMDAyRTApCisjZGVmaW5lIE1NU1NfRFBfVlNDRVhUXzUJCQkoMHgwMDAwMDJFNCkKKyNkZWZp bmUgTU1TU19EUF9WU0NFWFRfNgkJCSgweDAwMDAwMkU4KQorI2RlZmluZSBNTVNTX0RQX1ZTQ0VY VF83CQkJKDB4MDAwMDAyRUMpCisjZGVmaW5lIE1NU1NfRFBfVlNDRVhUXzgJCQkoMHgwMDAwMDJG MCkKKyNkZWZpbmUgTU1TU19EUF9WU0NFWFRfOQkJCSgweDAwMDAwMkY0KQorCisjZGVmaW5lIE1N U1NfRFBfQklTVF9FTkFCTEUJCQkoMHgwMDAwMDAwMCkKKyNkZWZpbmUgTU1TU19EUF9USU1JTkdf RU5HSU5FX0VOCQkoMHgwMDAwMDAxMCkKKyNkZWZpbmUgTU1TU19EUF9JTlRGX0NPTkZJRwkJCSgw eDAwMDAwMDE0KQorI2RlZmluZSBNTVNTX0RQX0lOVEZfSFNZTkNfQ1RMCQkJKDB4MDAwMDAwMTgp CisjZGVmaW5lIE1NU1NfRFBfSU5URl9WU1lOQ19QRVJJT0RfRjAJCSgweDAwMDAwMDFDKQorI2Rl ZmluZSBNTVNTX0RQX0lOVEZfVlNZTkNfUEVSSU9EX0YxCQkoMHgwMDAwMDAyMCkKKyNkZWZpbmUg TU1TU19EUF9JTlRGX1ZTWU5DX1BVTFNFX1dJRFRIX0YwCSgweDAwMDAwMDI0KQorI2RlZmluZSBN TVNTX0RQX0lOVEZfVlNZTkNfUFVMU0VfV0lEVEhfRjEJKDB4MDAwMDAwMjgpCisjZGVmaW5lIE1N U1NfSU5URl9ESVNQTEFZX1ZfU1RBUlRfRjAJCSgweDAwMDAwMDJDKQorI2RlZmluZSBNTVNTX0lO VEZfRElTUExBWV9WX1NUQVJUX0YxCQkoMHgwMDAwMDAzMCkKKyNkZWZpbmUgTU1TU19EUF9JTlRG X0RJU1BMQVlfVl9FTkRfRjAJCSgweDAwMDAwMDM0KQorI2RlZmluZSBNTVNTX0RQX0lOVEZfRElT UExBWV9WX0VORF9GMQkJKDB4MDAwMDAwMzgpCisjZGVmaW5lIE1NU1NfRFBfSU5URl9BQ1RJVkVf Vl9TVEFSVF9GMAkJKDB4MDAwMDAwM0MpCisjZGVmaW5lIE1NU1NfRFBfSU5URl9BQ1RJVkVfVl9T VEFSVF9GMQkJKDB4MDAwMDAwNDApCisjZGVmaW5lIE1NU1NfRFBfSU5URl9BQ1RJVkVfVl9FTkRf RjAJCSgweDAwMDAwMDQ0KQorI2RlZmluZSBNTVNTX0RQX0lOVEZfQUNUSVZFX1ZfRU5EX0YxCQko MHgwMDAwMDA0OCkKKyNkZWZpbmUgTU1TU19EUF9JTlRGX0RJU1BMQVlfSENUTAkJKDB4MDAwMDAw NEMpCisjZGVmaW5lIE1NU1NfRFBfSU5URl9BQ1RJVkVfSENUTAkJKDB4MDAwMDAwNTApCisjZGVm aW5lIE1NU1NfRFBfSU5URl9QT0xBUklUWV9DVEwJCSgweDAwMDAwMDU4KQorI2RlZmluZSBNTVNT X0RQX1RQR19NQUlOX0NPTlRST0wJCSgweDAwMDAwMDYwKQorI2RlZmluZSBNTVNTX0RQX1RQR19W SURFT19DT05GSUcJCSgweDAwMDAwMDY0KQorI2RlZmluZSBNTVNTX0RQX0FTWU5DX0ZJRk9fQ09O RklHCQkoMHgwMDAwMDA4OCkKKworLypEUCBQSFkgUmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmlu ZSBEUF9QSFlfUkVWSVNJT05fSUQwICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDApCisj ZGVmaW5lIERQX1BIWV9SRVZJU0lPTl9JRDEgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAw NCkKKyNkZWZpbmUgRFBfUEhZX1JFVklTSU9OX0lEMiAgICAgICAgICAgICAgICAgICAgICgweDAw MDAwMDA4KQorI2RlZmluZSBEUF9QSFlfUkVWSVNJT05fSUQzICAgICAgICAgICAgICAgICAgICAg KDB4MDAwMDAwMEMpCisKKyNkZWZpbmUgRFBfUEhZX0NGRyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICgweDAwMDAwMDEwKQorI2RlZmluZSBEUF9QSFlfUERfQ1RMICAgICAgICAgICAgICAg ICAgICAgICAgICAgKDB4MDAwMDAwMTgpCisjZGVmaW5lIERQX1BIWV9NT0RFICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoMHgwMDAwMDAxQykKKworI2RlZmluZSBEUF9QSFlfQVVYX0NGRzAg ICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMjApCisjZGVmaW5lIERQX1BIWV9BVVhf Q0ZHMSAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAyNCkKKyNkZWZpbmUgRFBfUEhZ X0FVWF9DRkcyICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDI4KQorI2RlZmluZSBE UF9QSFlfQVVYX0NGRzMgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMkMpCisjZGVm aW5lIERQX1BIWV9BVVhfQ0ZHNCAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAzMCkK KyNkZWZpbmUgRFBfUEhZX0FVWF9DRkc1ICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAw MDM0KQorI2RlZmluZSBEUF9QSFlfQVVYX0NGRzYgICAgICAgICAgICAgICAgICAgICAgICAgKDB4 MDAwMDAwMzgpCisjZGVmaW5lIERQX1BIWV9BVVhfQ0ZHNyAgICAgICAgICAgICAgICAgICAgICAg ICAoMHgwMDAwMDAzQykKKyNkZWZpbmUgRFBfUEhZX0FVWF9DRkc4ICAgICAgICAgICAgICAgICAg ICAgICAgICgweDAwMDAwMDQwKQorI2RlZmluZSBEUF9QSFlfQVVYX0NGRzkgICAgICAgICAgICAg ICAgICAgICAgICAgKDB4MDAwMDAwNDQpCisjZGVmaW5lIERQX1BIWV9BVVhfSU5URVJSVVBUX01B U0sgICAgICAgICAgICAgICAoMHgwMDAwMDA0OCkKKyNkZWZpbmUgRFBfUEhZX0FVWF9JTlRFUlJV UFRfQ0xFQVIgICAgICAgICAgICAgICgweDAwMDAwMDRDKQorI2RlZmluZSBEUF9QSFlfQVVYX0JJ U1RfQ0ZHCQkJKDB4MDAwMDAwNTApCisKKyNkZWZpbmUgRFBfUEhZX1ZDT19ESVYJCQkJMHgwMDY0 CisjZGVmaW5lIERQX1BIWV9UWDBfVFgxX0xBTkVfQ1RMCQkJMHgwMDZDCisjZGVmaW5lIERQX1BI WV9UWDJfVFgzX0xBTkVfQ1RMCQkJMHgwMDg4CisKKyNkZWZpbmUgRFBfUEhZX1NQQVJFMAkJCQko MHgwMEFDKQorI2RlZmluZSBEUF9QSFlfU1RBVFVTCQkJCSgweDAwQzApCisKKy8qIFR4IHJlZ2lz dGVycyAqLworI2RlZmluZSBUWG5fQklTVF9NT0RFX0xBTkVOTwkJCTB4MDAwMAorI2RlZmluZSBU WG5fQ0xLQlVGX0VOQUJMRQkJCTB4MDAwOAorI2RlZmluZSBUWG5fVFhfRU1QX1BPU1QxX0xWTAkJ CTB4MDAwQworCisjZGVmaW5lIFRYbl9UWF9EUlZfTFZMCQkJCTB4MDAxQworCisjZGVmaW5lIFRY bl9SRVNFVF9UU1lOQ19FTgkJCTB4MDAyNAorI2RlZmluZSBUWG5fUFJFX1NUQUxMX0xET19CT09T VF9FTgkJMHgwMDI4CisjZGVmaW5lIFRYbl9UWF9CQU5ECQkJCTB4MDAyQworI2RlZmluZSBUWG5f U0xFV19DTlRMCQkJCTB4MDAzMAorI2RlZmluZSBUWG5fSU5URVJGQUNFX1NFTEVDVAkJCTB4MDAz NAorCisjZGVmaW5lIFRYbl9SRVNfQ09ERV9MQU5FX1RYCQkJMHgwMDNDCisjZGVmaW5lIFRYbl9S RVNfQ09ERV9MQU5FX1JYCQkJMHgwMDQwCisjZGVmaW5lIFRYbl9SRVNfQ09ERV9MQU5FX09GRlNF VF9UWAkJMHgwMDQ0CisjZGVmaW5lIFRYbl9SRVNfQ09ERV9MQU5FX09GRlNFVF9SWAkJMHgwMDQ4 CisKKyNkZWZpbmUgVFhuX0RFQlVHX0JVU19TRUwJCQkweDAwNTgKKyNkZWZpbmUgVFhuX1RSQU5T Q0VJVkVSX0JJQVNfRU4JCQkweDAwNUMKKyNkZWZpbmUgVFhuX0hJR0haX0RSVlJfRU4JCQkweDAw NjAKKyNkZWZpbmUgVFhuX1RYX1BPTF9JTlYJCQkJMHgwMDY0CisjZGVmaW5lIFRYbl9QQVJSQVRF X1JFQ19ERVRFQ1RfSURMRV9FTgkJMHgwMDY4CisKKyNkZWZpbmUgVFhuX0xBTkVfTU9ERV8xCQkJ CTB4MDA4QworCisjZGVmaW5lIFRYbl9UUkFOX0RSVlJfRU1QX0VOCQkJMHgwMEMwCisjZGVmaW5l IFRYbl9UWF9JTlRFUkZBQ0VfTU9ERQkJCTB4MDBDNAorCisjZGVmaW5lIFRYbl9WTU9ERV9DVFJM MQkJCQkweDAwRjAKKworLyogUExMIHJlZ2lzdGVyIG9mZnNldCAqLworI2RlZmluZSBRU0VSREVT X0NPTV9BVEJfU0VMMQkJCTB4MDAwMAorI2RlZmluZSBRU0VSREVTX0NPTV9BVEJfU0VMMgkJCTB4 MDAwNAorI2RlZmluZSBRU0VSREVTX0NPTV9GUkVRX1VQREFURQkJCTB4MDAwOAorI2RlZmluZSBR U0VSREVTX0NPTV9CR19USU1FUgkJCTB4MDAwQworI2RlZmluZSBRU0VSREVTX0NPTV9TU0NfRU5f Q0VOVEVSCQkweDAwMTAKKyNkZWZpbmUgUVNFUkRFU19DT01fU1NDX0FESl9QRVIxCQkweDAwMTQK KyNkZWZpbmUgUVNFUkRFU19DT01fU1NDX0FESl9QRVIyCQkweDAwMTgKKyNkZWZpbmUgUVNFUkRF U19DT01fU1NDX1BFUjEJCQkweDAwMUMKKyNkZWZpbmUgUVNFUkRFU19DT01fU1NDX1BFUjIJCQkw eDAwMjAKKyNkZWZpbmUgUVNFUkRFU19DT01fU1NDX1NURVBfU0laRTEJCTB4MDAyNAorI2RlZmlu ZSBRU0VSREVTX0NPTV9TU0NfU1RFUF9TSVpFMgkJMHgwMDI4CisjZGVmaW5lIFFTRVJERVNfQ09N X1BPU1RfRElWCQkJMHgwMDJDCisjZGVmaW5lIFFTRVJERVNfQ09NX1BPU1RfRElWX01VWAkJMHgw MDMwCisjZGVmaW5lIFFTRVJERVNfQ09NX0JJQVNfRU5fQ0xLQlVGTFJfRU4JCTB4MDAzNAorI2Rl ZmluZSBRU0VSREVTX0NPTV9DTEtfRU5BQkxFMQkJCTB4MDAzOAorI2RlZmluZSBRU0VSREVTX0NP TV9TWVNfQ0xLX0NUUkwJCTB4MDAzQworI2RlZmluZSBRU0VSREVTX0NPTV9TWVNDTEtfQlVGX0VO QUJMRQkJMHgwMDQwCisjZGVmaW5lIFFTRVJERVNfQ09NX1BMTF9FTgkJCTB4MDA0NAorI2RlZmlu ZSBRU0VSREVTX0NPTV9QTExfSVZDTwkJCTB4MDA0OAorI2RlZmluZSBRU0VSREVTX0NPTV9DTU5f SUVUUklNCQkJMHgwMDRDCisjZGVmaW5lIFFTRVJERVNfQ09NX0NNTl9JUFRSSU0JCQkweDAwNTAK KworI2RlZmluZSBRU0VSREVTX0NPTV9DUF9DVFJMX01PREUwCQkweDAwNjAKKyNkZWZpbmUgUVNF UkRFU19DT01fQ1BfQ1RSTF9NT0RFMQkJMHgwMDY0CisjZGVmaW5lIFFTRVJERVNfQ09NX1BMTF9S Q1RSTF9NT0RFMAkJMHgwMDY4CisjZGVmaW5lIFFTRVJERVNfQ09NX1BMTF9SQ1RSTF9NT0RFMQkJ MHgwMDZDCisjZGVmaW5lIFFTRVJERVNfQ09NX1BMTF9DQ1RSTF9NT0RFMAkJMHgwMDcwCisjZGVm aW5lIFFTRVJERVNfQ09NX1BMTF9DQ1RSTF9NT0RFMQkJMHgwMDc0CisjZGVmaW5lIFFTRVJERVNf Q09NX1BMTF9DTlRSTAkJCTB4MDA3OAorI2RlZmluZSBRU0VSREVTX0NPTV9CSUFTX0VOX0NUUkxf QllfUFNNCQkweDAwN0MKKyNkZWZpbmUgUVNFUkRFU19DT01fU1lTQ0xLX0VOX1NFTAkJMHgwMDgw CisjZGVmaW5lIFFTRVJERVNfQ09NX0NNTF9TWVNDTEtfU0VMCQkweDAwODQKKyNkZWZpbmUgUVNF UkRFU19DT01fUkVTRVRTTV9DTlRSTAkJMHgwMDg4CisjZGVmaW5lIFFTRVJERVNfQ09NX1JFU0VU U01fQ05UUkwyCQkweDAwOEMKKyNkZWZpbmUgUVNFUkRFU19DT01fTE9DS19DTVBfRU4JCQkweDAw OTAKKyNkZWZpbmUgUVNFUkRFU19DT01fTE9DS19DTVBfQ0ZHCQkweDAwOTQKKyNkZWZpbmUgUVNF UkRFU19DT01fTE9DS19DTVAxX01PREUwCQkweDAwOTgKKyNkZWZpbmUgUVNFUkRFU19DT01fTE9D S19DTVAyX01PREUwCQkweDAwOUMKKyNkZWZpbmUgUVNFUkRFU19DT01fTE9DS19DTVAzX01PREUw CQkweDAwQTAKKworI2RlZmluZSBRU0VSREVTX0NPTV9ERUNfU1RBUlRfTU9ERTAJCTB4MDBCMAor I2RlZmluZSBRU0VSREVTX0NPTV9ERUNfU1RBUlRfTU9ERTEJCTB4MDBCNAorI2RlZmluZSBRU0VS REVTX0NPTV9ESVZfRlJBQ19TVEFSVDFfTU9ERTAJMHgwMEI4CisjZGVmaW5lIFFTRVJERVNfQ09N X0RJVl9GUkFDX1NUQVJUMl9NT0RFMAkweDAwQkMKKyNkZWZpbmUgUVNFUkRFU19DT01fRElWX0ZS QUNfU1RBUlQzX01PREUwCTB4MDBDMAorI2RlZmluZSBRU0VSREVTX0NPTV9ESVZfRlJBQ19TVEFS VDFfTU9ERTEJMHgwMEM0CisjZGVmaW5lIFFTRVJERVNfQ09NX0RJVl9GUkFDX1NUQVJUMl9NT0RF MQkweDAwQzgKKyNkZWZpbmUgUVNFUkRFU19DT01fRElWX0ZSQUNfU1RBUlQzX01PREUxCTB4MDBD QworI2RlZmluZSBRU0VSREVTX0NPTV9JTlRFR0xPT1BfSU5JVFZBTAkJMHgwMEQwCisjZGVmaW5l IFFTRVJERVNfQ09NX0lOVEVHTE9PUF9FTgkJMHgwMEQ0CisjZGVmaW5lIFFTRVJERVNfQ09NX0lO VEVHTE9PUF9HQUlOMF9NT0RFMAkweDAwRDgKKyNkZWZpbmUgUVNFUkRFU19DT01fSU5URUdMT09Q X0dBSU4xX01PREUwCTB4MDBEQworI2RlZmluZSBRU0VSREVTX0NPTV9JTlRFR0xPT1BfR0FJTjBf TU9ERTEJMHgwMEUwCisjZGVmaW5lIFFTRVJERVNfQ09NX0lOVEVHTE9PUF9HQUlOMV9NT0RFMQkw eDAwRTQKKyNkZWZpbmUgUVNFUkRFU19DT01fVkNPQ0FMX0RFQURNQU5fQ1RSTAkJMHgwMEU4Cisj ZGVmaW5lIFFTRVJERVNfQ09NX1ZDT19UVU5FX0NUUkwJCTB4MDBFQworI2RlZmluZSBRU0VSREVT X0NPTV9WQ09fVFVORV9NQVAJCTB4MDBGMAorCisjZGVmaW5lIFFTRVJERVNfQ09NX0NNTl9TVEFU VVMJCQkweDAxMjQKKyNkZWZpbmUgUVNFUkRFU19DT01fUkVTRVRfU01fU1RBVFVTCQkweDAxMjgK KworI2RlZmluZSBRU0VSREVTX0NPTV9DTEtfU0VMCQkJMHgwMTM4CisjZGVmaW5lIFFTRVJERVNf Q09NX0hTQ0xLX1NFTAkJCTB4MDEzQworCisjZGVmaW5lIFFTRVJERVNfQ09NX0NPUkVDTEtfRElW X01PREUwCQkweDAxNDgKKworI2RlZmluZSBRU0VSREVTX0NPTV9TV19SRVNFVAkJCTB4MDE1MAor I2RlZmluZSBRU0VSREVTX0NPTV9DT1JFX0NMS19FTgkJCTB4MDE1NAorI2RlZmluZSBRU0VSREVT X0NPTV9DX1JFQURZX1NUQVRVUwkJMHgwMTU4CisjZGVmaW5lIFFTRVJERVNfQ09NX0NNTl9DT05G SUcJCQkweDAxNUMKKworI2RlZmluZSBRU0VSREVTX0NPTV9TVlNfTU9ERV9DTEtfU0VMCQkweDAx NjQKKworLyogRFAgTU1TU19DQyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgTU1TU19EUF9MSU5LX0NN RF9SQ0dSCQkJKDB4MDEzOCkKKyNkZWZpbmUgTU1TU19EUF9MSU5LX0NGR19SQ0dSCQkJKDB4MDEz QykKKyNkZWZpbmUgTU1TU19EUF9QSVhFTF9NCQkJCSgweDAxNzQpCisjZGVmaW5lIE1NU1NfRFBf UElYRUxfTgkJCQkoMHgwMTc4KQorCisvKiBEUCBIRENQIDEuMyByZWdpc3RlcnMgKi8KKyNkZWZp bmUgRFBfSERDUF9DVFJMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwQTAp CisjZGVmaW5lIERQX0hEQ1BfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KDB4MEE0KQorI2RlZmluZSBEUF9IRENQX1NXX1VQUEVSX0FLU1YgICAgICAgICAgICAgICAgICAg ICAgICAgICgweDA5OCkKKyNkZWZpbmUgRFBfSERDUF9TV19MT1dFUl9BS1NWICAgICAgICAgICAg ICAgICAgICAgICAgICAoMHgwOUMpCisjZGVmaW5lIERQX0hEQ1BfRU5UUk9QWV9DVFJMMCAgICAg ICAgICAgICAgICAgICAgICAgICAgKDB4MzUwKQorI2RlZmluZSBEUF9IRENQX0VOVFJPUFlfQ1RS TDEgICAgICAgICAgICAgICAgICAgICAgICAgICgweDM1QykKKyNkZWZpbmUgRFBfSERDUF9TSEFf U1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwQzgpCisjZGVmaW5lIERQX0hE Q1BfUkNWUE9SVF9EQVRBMl8wICAgICAgICAgICAgICAgICAgICAgICAgKDB4MEIwKQorI2RlZmlu ZSBEUF9IRENQX1JDVlBPUlRfREFUQTMgICAgICAgICAgICAgICAgICAgICAgICAgICgweDBBNCkK KyNkZWZpbmUgRFBfSERDUF9SQ1ZQT1JUX0RBVEE0ICAgICAgICAgICAgICAgICAgICAgICAgICAo MHgwQTgpCisjZGVmaW5lIERQX0hEQ1BfUkNWUE9SVF9EQVRBNSAgICAgICAgICAgICAgICAgICAg ICAgICAgKDB4MEMwKQorI2RlZmluZSBEUF9IRENQX1JDVlBPUlRfREFUQTYgICAgICAgICAgICAg ICAgICAgICAgICAgICgweDBDNCkKKworI2RlZmluZSBIRENQX1NFQ19EUF9UWl9IVl9ITE9TX0hE Q1BfU0hBX0NUUkwgICAgICAgICAgICgweDAyNCkKKyNkZWZpbmUgSERDUF9TRUNfRFBfVFpfSFZf SExPU19IRENQX1NIQV9EQVRBICAgICAgICAgICAoMHgwMjgpCisjZGVmaW5lIEhEQ1BfU0VDX0RQ X1RaX0hWX0hMT1NfSERDUF9SQ1ZQT1JUX0RBVEEwICAgICAgKDB4MDA0KQorI2RlZmluZSBIRENQ X1NFQ19EUF9UWl9IVl9ITE9TX0hEQ1BfUkNWUE9SVF9EQVRBMSAgICAgICgweDAwOCkKKyNkZWZp bmUgSERDUF9TRUNfRFBfVFpfSFZfSExPU19IRENQX1JDVlBPUlRfREFUQTcgICAgICAoMHgwMEMp CisjZGVmaW5lIEhEQ1BfU0VDX0RQX1RaX0hWX0hMT1NfSERDUF9SQ1ZQT1JUX0RBVEE4ICAgICAg KDB4MDEwKQorI2RlZmluZSBIRENQX1NFQ19EUF9UWl9IVl9ITE9TX0hEQ1BfUkNWUE9SVF9EQVRB OSAgICAgICgweDAxNCkKKyNkZWZpbmUgSERDUF9TRUNfRFBfVFpfSFZfSExPU19IRENQX1JDVlBP UlRfREFUQTEwICAgICAoMHgwMTgpCisjZGVmaW5lIEhEQ1BfU0VDX0RQX1RaX0hWX0hMT1NfSERD UF9SQ1ZQT1JUX0RBVEExMSAgICAgKDB4MDFDKQorI2RlZmluZSBIRENQX1NFQ19EUF9UWl9IVl9I TE9TX0hEQ1BfUkNWUE9SVF9EQVRBMTIgICAgICgweDAyMCkKKworLyogVVNCMyBEUCBDT00gcmVn aXN0ZXJzICovCisjZGVmaW5lIFVTQjNfRFBfQ09NX1JFU0VUX09WUkRfQ1RSTCAoMHgxQykKKyNk ZWZpbmUgVVNCM19EUF9DT01fUEhZX01PREVfQ1RSTCAgICgweDAwKQorI2RlZmluZSBVU0IzX0RQ X0NPTV9TV19SRVNFVCAgICAgICAgKDB4MDQpCisjZGVmaW5lIFVTQjNfRFBfQ09NX1RZUEVDX0NU UkwgICAgICAoMHgxMCkKKyNkZWZpbmUgVVNCM19EUF9DT01fU1dJX0NUUkwgICAgICAgICgweDBj KQorI2RlZmluZSBVU0IzX0RQX0NPTV9QT1dFUl9ET1dOX0NUUkwgKDB4MDgpCisKKworCisjZW5k aWYgLyogX0RQX1JFR19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21f ZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYwppbmRleCBmNWNkN2Y2Li5iZTgw MWJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYworKysgYi9kcml2 ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYwpAQCAtMTM2Nyw2ICsxMzY3LDcgQEAgc3RhdGljIGlu dCBfX2luaXQgbXNtX2RybV9yZWdpc3Rlcih2b2lkKQogCW1zbV9kc2lfcmVnaXN0ZXIoKTsKIAlt c21fZWRwX3JlZ2lzdGVyKCk7CiAJbXNtX2hkbWlfcmVnaXN0ZXIoKTsKKwltc21fZHBfcmVnaXN0 ZXIoKTsKIAlhZHJlbm9fcmVnaXN0ZXIoKTsKIAlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lz dGVyKCZtc21fcGxhdGZvcm1fZHJpdmVyKTsKIH0KQEAgLTEzNzUsNiArMTM3Niw3IEBAIHN0YXRp YyB2b2lkIF9fZXhpdCBtc21fZHJtX3VucmVnaXN0ZXIodm9pZCkKIHsKIAlEQkcoImZpbmkiKTsK IAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXNtX3BsYXRmb3JtX2RyaXZlcik7CisJbXNt X2RwX3VucmVnaXN0ZXIoKTsKIAltc21faGRtaV91bnJlZ2lzdGVyKCk7CiAJYWRyZW5vX3VucmVn aXN0ZXIoKTsKIAltc21fZWRwX3VucmVnaXN0ZXIoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vbXNtX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmgKaW5kZXgg OWQxMWYzMi4uZmIxZTZmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2 LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmgKQEAgLTE3Niw2ICsxNzYsNyBA QCBzdHJ1Y3QgbXNtX2RybV9wcml2YXRlIHsKIAkvKiBEU0kgaXMgc2hhcmVkIGJ5IG1kcDQgYW5k IG1kcDUgKi8KIAlzdHJ1Y3QgbXNtX2RzaSAqZHNpWzJdOwogCisJc3RydWN0IG1zbV9kcCAqZHA7 CiAJLyogd2hlbiB3ZSBoYXZlIG1vcmUgdGhhbiBvbmUgJ21zbV9ncHUnIHRoZXNlIG5lZWQgdG8g YmUgYW4gYXJyYXk6ICovCiAJc3RydWN0IG1zbV9ncHUgKmdwdTsKIAlzdHJ1Y3QgbXNtX2ZpbGVf cHJpdmF0ZSAqbGFzdGN0eDsKQEAgLTM2NCw2ICszNjUsMjcgQEAgc3RhdGljIGlubGluZSBpbnQg bXNtX2RzaV9tb2Rlc2V0X2luaXQoc3RydWN0IG1zbV9kc2kgKm1zbV9kc2ksCiB9CiAjZW5kaWYK IAorI2lmZGVmIENPTkZJR19EUk1fTVNNX0RQCitpbnQgX19pbml0IG1zbV9kcF9yZWdpc3Rlcih2 b2lkKTsKK3ZvaWQgX19leGl0IG1zbV9kcF91bnJlZ2lzdGVyKHZvaWQpOworaW50IG1zbV9kcF9t b2Rlc2V0X2luaXQoc3RydWN0IG1zbV9kcCAqZHBfZGlzcGxheSwgc3RydWN0IGRybV9kZXZpY2Ug KmRldiwKKwkJCSBzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpOworI2Vsc2UKK3N0YXRpYyBp bmxpbmUgaW50IF9faW5pdCBtc21fZHBfcmVnaXN0ZXIodm9pZCkKK3sKKwlyZXR1cm4gLUVJTlZB TDsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2V4aXQgbXNtX2RwX3VucmVnaXN0ZXIodm9pZCkK K3sKK30KK3N0YXRpYyBpbmxpbmUgaW50IG1zbV9kcF9tb2Rlc2V0X2luaXQoc3RydWN0IG1zbV9k cCAqZHBfZGlzcGxheSwKKwkJCQkgICAgICAgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkg ICAgICAgc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXJldHVybiAtRUlOVkFMOwor fQorI2VuZGlmCisKIHZvaWQgX19pbml0IG1zbV9tZHBfcmVnaXN0ZXIodm9pZCk7CiB2b2lkIF9f ZXhpdCBtc21fbWRwX3VucmVnaXN0ZXIodm9pZCk7CiB2b2lkIF9faW5pdCBtc21fZHB1X3JlZ2lz dGVyKHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2RwX2hlbHBlci5oIGIvaW5j bHVkZS9kcm0vZHJtX2RwX2hlbHBlci5oCmluZGV4IDJhMzg0M2YuLmIwODE2ZjUgMTAwNjQ0Ci0t LSBhL2luY2x1ZGUvZHJtL2RybV9kcF9oZWxwZXIuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fZHBf aGVscGVyLmgKQEAgLTU1MSw2ICs1NTEsOCBAQAogIyBkZWZpbmUgRFBfVEVTVF9MSU5LX0VESURf UkVBRAkJICAgICgxIDw8IDIpCiAjIGRlZmluZSBEUF9URVNUX0xJTktfUEhZX1RFU1RfUEFUVEVS TgkgICAgKDEgPDwgMykgLyogRFBDRCA+PSAxLjEgKi8KICMgZGVmaW5lIERQX1RFU1RfTElOS19G QVVYX1BBVFRFUk4JICAgICgxIDw8IDQpIC8qIERQQ0QgPj0gMS4yICovCisjIGRlZmluZSBEUF9U RVNUX0xJTktfQVVESU9fUEFUVEVSTiAgICAgKDEgPDwgNSkKKyMgZGVmaW5lIERQX1RFU1RfTElO S19BVURJT19ESVNBQkxFRF9WSURFTyAoMSA8PCA2KQogCiAjZGVmaW5lIERQX1RFU1RfTElOS19S QVRFCQkgICAgMHgyMTkKICMgZGVmaW5lIERQX0xJTktfUkFURV8xNjIJCSAgICAoMHg2KQpAQCAt NjM5LDYgKzY0MSwxMyBAQAogI2RlZmluZQlEUF9URVNUXzgwQklUX0NVU1RPTV9QQVRURVJOXzcx XzY0ICAweDI1OAogI2RlZmluZQlEUF9URVNUXzgwQklUX0NVU1RPTV9QQVRURVJOXzc5XzcyICAw eDI1OQogCisjZGVmaW5lIERQX1RFU1RfUEhZX1BBVFRFUk5fTk9ORQkJCTB4MAorI2RlZmluZSBE UF9URVNUX1BIWV9QQVRURVJOX0QxMF8yX05PX1NDUkFNQkxJTkcJMHgxCisjZGVmaW5lIERQX1RF U1RfUEhZX1BBVFRFUk5fU1lNQk9MX0VSUl9NRUFTVVJFTUVOVF9DTlQgMHgyCisjZGVmaW5lIERQ X1RFU1RfUEhZX1BBVFRFUk5fUFJCUzcJCQkweDMKKyNkZWZpbmUgRFBfVEVTVF9QSFlfUEFUVEVS Tl84MF9CSVRfQ1VTVE9NX1BBVFRFUk4JMHg0CisjZGVmaW5lIERQX1RFU1RfUEhZX1BBVFRFUk5f SEJSMl9DVFNfRVlFX1BBVFRFUk4JMHg1CisKICNkZWZpbmUgRFBfVEVTVF9SRVNQT05TRQkJICAg IDB4MjYwCiAjIGRlZmluZSBEUF9URVNUX0FDSwkJCSAgICAoMSA8PCAwKQogIyBkZWZpbmUgRFBf VEVTVF9OQUsJCQkgICAgKDEgPDwgMSkKQEAgLTY0OCw2ICs2NTcsMTYgQEAKIAogI2RlZmluZSBE UF9URVNUX1NJTksJCQkgICAgMHgyNzAKICMgZGVmaW5lIERQX1RFU1RfU0lOS19TVEFSVAkJICAg ICgxIDw8IDApCisjZGVmaW5lIERQX1RFU1RfQVVESU9fTU9ERQkJICAgIDB4MjcxCisjZGVmaW5l IERQX1RFU1RfQVVESU9fUEFUVEVSTl9UWVBFCSAgICAweDI3MgorI2RlZmluZSBEUF9URVNUX0FV RElPX1BFUklPRF9DSDEJICAgIDB4MjczCisjZGVmaW5lIERQX1RFU1RfQVVESU9fUEVSSU9EX0NI MgkgICAgMHgyNzQKKyNkZWZpbmUgRFBfVEVTVF9BVURJT19QRVJJT0RfQ0gzCSAgICAweDI3NQor I2RlZmluZSBEUF9URVNUX0FVRElPX1BFUklPRF9DSDQJICAgIDB4Mjc2CisjZGVmaW5lIERQX1RF U1RfQVVESU9fUEVSSU9EX0NINQkgICAgMHgyNzcKKyNkZWZpbmUgRFBfVEVTVF9BVURJT19QRVJJ T0RfQ0g2CSAgICAweDI3OAorI2RlZmluZSBEUF9URVNUX0FVRElPX1BFUklPRF9DSDcJICAgIDB4 Mjc5CisjZGVmaW5lIERQX1RFU1RfQVVESU9fUEVSSU9EX0NIOAkgICAgMHgyN0EKIAogI2RlZmlu ZSBEUF9GRUNfU1RBVFVTCQkJICAgIDB4MjgwICAgIC8qIDEuNCAqLwogIyBkZWZpbmUgRFBfRkVD X0RFQ09ERV9FTl9ERVRFQ1RFRAkgICAgKDEgPDwgMCkKLS0gClRoZSBRdWFsY29tbSBJbm5vdmF0 aW9uIENlbnRlciwgSW5jLiBpcyBhIG1lbWJlciBvZiB0aGUgQ29kZSBBdXJvcmEgRm9ydW0sCmEg TGludXggRm91bmRhdGlvbiBDb2xsYWJvcmF0aXZlIFByb2plY3QKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkZyZWVkcmVubyBtYWlsaW5nIGxpc3QKRnJl ZWRyZW5vQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2ZyZWVkcmVubwo=