From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chandan Uddaraju Subject: [DPU PATCH v2 2/3] drm/msm/dp: add displayPort driver support Date: Mon, 7 Jan 2019 12:51:10 -0800 Message-ID: <1546894271-25870-3-git-send-email-chandanu@codeaurora.org> References: <1546894271-25870-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: <1546894271-25870-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, devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org Cc: abhinavk-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, nganji-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, hoegsberg-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, jsanka-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, Chandan Uddaraju List-Id: linux-arm-msm@vger.kernel.org QWRkIHRoZSBuZWVkZWQgZGlzcGxheVBvcnQgZmlsZXMgdG8gZW5hYmxlIERQIGRyaXZlcgpvbiBt c20gdGFyZ2V0LgoKImRwX2Rpc3BsYXkiIG1vZHVsZSBpcyB0aGUgbWFpbiBtb2R1bGUgdGhhdCBj YWxscyBpbnRvCm90aGVyIHN1Yi1tb2R1bGVzLiAiZHBfZHJtIiBmaWxlIHJlcHJlc2VudHMgdGhl IGludGVyZmFjZQpiZXR3ZWVuIERSTSBmcmFtZXdvcmsgYW5kIERQIGRyaXZlci4KCmNoYW5nZXMg aW4gdjI6Ci0tIFVwZGF0ZSBjb3B5cmlnaHQgbWFya2luZ3Mgb24gYWxsIHJlbGV2YW50IGZpbGVz LgotLSBDaGFuZ2UgcHJfZXJyKCkgdG8gRFJNX0VSUk9SKCkKLS0gVXNlIEFQSXMgZGlyZWN0bHkg aW5zdGVhZCBvZiBmdW5jdGlvbiBwb2ludGVycy4KLS0gVXNlIGRybV9kaXNwbGF5X21vZGUgc3Ry dWN0dXJlIHRvIHN0b3JlIGxpbmsgcGFyYW1ldGVycyBpbiB0aGUgZHJpdmVyLgotLSBVc2UgbWFj cm9zIGZvciByZWdpc3RlciBkZWZpbml0aW9ucyBpbnN0ZWFkIG9mIGhhcmRjb2RlZCB2YWx1ZXMu Ci0tIFJlcGxhY2Ugd3JpdGVsX3JlbGF4ZWQvcmVhZGxfcmVsYXhlZCB3aXRoIHdyaXRlbC9yZWFk bAogICBhbmQgcmVtb3ZlIG1lbW9yeSBiYXJyaWVycy4KLS0gUmVtb3ZlIHVubmVjZXNzYXJ5IE5V TEwgY2hlY2tzLgotLSBVc2UgZHJtIGhlbHBlciBmdW5jdGlvbnMgZm9yIGRwY2QgcmVhZC93cml0 ZS4KLS0gVXNlIERSTV9ERUJVR19EUCBmb3IgZGVidWcgbXNncy4KClNpZ25lZC1vZmYtYnk6IENo YW5kYW4gVWRkYXJhanUgPGNoYW5kYW51QGNvZGVhdXJvcmEub3JnPgotLS0KIGRyaXZlcnMvZ3B1 L2RybS9tc20vS2NvbmZpZyAgICAgICAgICAgICAgICAgfCAgICA5ICsKIGRyaXZlcnMvZ3B1L2Ry bS9tc20vTWFrZWZpbGUgICAgICAgICAgICAgICAgfCAgIDEyICsKIGRyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmMgfCAgIDIwICsKIGRyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9pb191dGlsLmMgfCAgICAyICsKIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9pb191dGlsLmggfCAgIDI2ICsKIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBf YXV4LmMgICAgICAgICAgICAgfCAgNTQ4ICsrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21zbS9k cC9kcF9hdXguaCAgICAgICAgICAgICB8ICAgMzcgKwogZHJpdmVycy9ncHUvZHJtL21zbS9kcC9k cF9jYXRhbG9nLmMgICAgICAgICB8ICA5OTYgKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1 L2RybS9tc20vZHAvZHBfY2F0YWxvZy5oICAgICAgICAgfCAgMTA4ICsrCiBkcml2ZXJzL2dwdS9k cm0vbXNtL2RwL2RwX2N0cmwuYyAgICAgICAgICAgIHwgMTYxMSArKysrKysrKysrKysrKysrKysr KysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY3RybC5oICAgICAgICAgICAgfCAg IDM2ICsKIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGlzcGxheS5jICAgICAgICAgfCAgOTQx ICsrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGlzcGxheS5oICAg ICAgICAgfCAgIDI4ICsKIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZHJtLmMgICAgICAgICAg ICAgfCAgMTg5ICsrKysKIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZHJtLmggICAgICAgICAg ICAgfCAgIDIwICsKIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZXh0Y29uLmMgICAgICAgICAg fCAgMjI4ICsrKysKIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZXh0Y29uLmggICAgICAgICAg fCAgIDg1ICsrCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2xpbmsuYyAgICAgICAgICAgIHwg MTIxNiArKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9saW5r LmggICAgICAgICAgICB8ICAxMzIgKysrCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3BhbmVs LmMgICAgICAgICAgIHwgIDUwNCArKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBf cGFuZWwuaCAgICAgICAgICAgfCAgIDkxICsrCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3Bh cnNlci5jICAgICAgICAgIHwgIDYyMSArKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21zbS9k cC9kcF9wYXJzZXIuaCAgICAgICAgICB8ICAxOTYgKysrKwogZHJpdmVycy9ncHUvZHJtL21zbS9k cC9kcF9wb3dlci5jICAgICAgICAgICB8ICA3MzMgKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9k cm0vbXNtL2RwL2RwX3Bvd2VyLmggICAgICAgICAgIHwgICA1MSArCiBkcml2ZXJzL2dwdS9kcm0v bXNtL2RwL2RwX3JlZy5oICAgICAgICAgICAgIHwgIDQ3NSArKysrKysrKwogZHJpdmVycy9ncHUv ZHJtL21zbS9tc21fZHJ2LmMgICAgICAgICAgICAgICB8ICAgIDIgKwogZHJpdmVycy9ncHUvZHJt L21zbS9tc21fZHJ2LmggICAgICAgICAgICAgICB8ICAgNDEgKwogMjggZmlsZXMgY2hhbmdlZCwg ODk1OCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21z bS9kcC9kcF9hdXguYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAv ZHBfYXV4LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2Nh dGFsb2cuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY2F0 YWxvZy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9jdHJs LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2N0cmwuaAog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGlzcGxheS5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kaXNwbGF5LmgKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2RybS5jCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kcm0uaAogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZXh0Y29uLmMKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2V4dGNvbi5oCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9saW5rLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2xpbmsuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS9tc20vZHAvZHBfcGFuZWwuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9tc20vZHAvZHBfcGFuZWwuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9tc20vZHAvZHBfcGFyc2VyLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vbXNtL2RwL2RwX3BhcnNlci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L21zbS9kcC9kcF9wb3dlci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21z bS9kcC9kcF9wb3dlci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9k cC9kcF9yZWcuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vS2NvbmZpZyBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vS2NvbmZpZwppbmRleCBjZjU0OWYxLi5jNmIyZTA3IDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL21z bS9LY29uZmlnCkBAIC00OSw2ICs0OSwxNSBAQCBjb25maWcgRFJNX01TTV9IRE1JX0hEQ1AKIAlo ZWxwCiAJICBDaG9vc2UgdGhpcyBvcHRpb24gdG8gZW5hYmxlIEhEQ1Agc3RhdGUgbWFjaGluZQog Citjb25maWcgRFJNX01TTV9EUAorCWJvb2wgIkVuYWJsZSBEUCBzdXBwb3J0IGluIE1TTSBEUk0g ZHJpdmVyIgorCWRlcGVuZHMgb24gRFJNX01TTQorCWRlZmF1bHQgbgorCWhlbHAKKwkgIENvbXBp bGUgaW4gc3VwcG9ydCBmb3IgRFAgZHJpdmVyIGluIG1zbSBkcm0gZHJpdmVyLiBEUCBleHRlcm5h bAorCSAgZGlzcGxheSBzdXBwb3J0IGlzIGVuYWJsZWQgdGhyb3VnaCB0aGlzIGNvbmZpZyBvcHRp b24uIEl0IGNhbgorCSAgYmUgcHJpbWFyeSBvciBzZWNvbmRhcnkgZGlzcGxheSBvbiBkZXZpY2Uu CisKIGNvbmZpZyBEUk1fTVNNX0RTSQogCWJvb2wgIkVuYWJsZSBEU0kgc3VwcG9ydCBpbiBNU00g RFJNIGRyaXZlciIKIAlkZXBlbmRzIG9uIERSTV9NU00KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlCmluZGV4IDU2 YTcwYzcuLjQ1MTY2ZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUK KysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZQpAQCAtMiw2ICsyLDcgQEAKIGNjZmxh Z3MteSA6PSAtSWRyaXZlcnMvZ3B1L2RybS9tc20KIGNjZmxhZ3MteSArPSAtSWRyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxCiBjY2ZsYWdzLSQoQ09ORklHX0RSTV9NU01fRFNJKSArPSAtSWRy aXZlcnMvZ3B1L2RybS9tc20vZHNpCitjY2ZsYWdzLSQoQ09ORklHX0RSTV9NU01fRFApICs9IC1J ZHJpdmVycy9ncHUvZHJtL21zbS9kcAogCiBtc20teSA6PSBcCiAJYWRyZW5vL2FkcmVub19kZXZp Y2UubyBcCkBAIC05Niw2ICs5NywxNyBAQCBtc20teSA6PSBcCiAKIG1zbS0kKENPTkZJR19ERUJV R19GUykgKz0gYWRyZW5vL2E1eHhfZGVidWdmcy5vCiAKK21zbS0kKENPTkZJR19EUk1fTVNNX0RQ KSs9IGRwL2RwX2F1eC5vIFwKKwlkcC9kcF9jYXRhbG9nLm8gXAorCWRwL2RwX2N0cmwubyBcCisJ ZHAvZHBfZGlzcGxheS5vIFwKKwlkcC9kcF9kcm0ubyBcCisJZHAvZHBfZXh0Y29uLm8gXAorCWRw L2RwX2xpbmsubyBcCisJZHAvZHBfcGFuZWwubyBcCisJZHAvZHBfcGFyc2VyLm8gXAorCWRwL2Rw X3Bvd2VyLm8KKwogbXNtLSQoQ09ORklHX0RSTV9GQkRFVl9FTVVMQVRJT04pICs9IG1zbV9mYmRl di5vCiBtc20tJChDT05GSUdfQ09NTU9OX0NMSykgKz0gZGlzcC9tZHA0L21kcDRfbHZkc19wbGwu bwogbXNtLSQoQ09ORklHX0NPTU1PTl9DTEspICs9IGhkbWkvaGRtaV9wbGxfODk2MC5vCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5jIGIvZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuYwppbmRleCAwZGRhNGE2Li5l NmY4MWExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5j b2Rlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmMK QEAgLTk5MSw2ICs5OTEsOSBAQCBzdGF0aWMgdm9pZCBkcHVfZW5jb2Rlcl92aXJ0X21vZGVfc2V0 KHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYywKIAogCXRyYWNlX2RwdV9lbmNfbW9kZV9zZXQo RFJNSUQoZHJtX2VuYykpOwogCisJaWYgKGRybV9lbmMtPmVuY29kZXJfdHlwZSA9PSBEUk1fTU9E RV9FTkNPREVSX1RNRFMgJiYgcHJpdi0+ZHApCisJCW1zbV9kcF9kaXNwbGF5X21vZGVfc2V0KHBy aXYtPmRwLCBkcm1fZW5jLCBtb2RlLCBhZGpfbW9kZSk7CisKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5 KGNvbm5faXRlciwgY29ubmVjdG9yX2xpc3QsIGhlYWQpCiAJCWlmIChjb25uX2l0ZXItPmVuY29k ZXIgPT0gZHJtX2VuYykKIAkJCWNvbm4gPSBjb25uX2l0ZXI7CkBAIC0xMTE0LDYgKzExMTcsNyBA QCBzdGF0aWMgdm9pZCBkcHVfZW5jb2Rlcl92aXJ0X2VuYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIg KmRybV9lbmMpCiB7CiAJc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmMgPSBOVUxMOwog CWludCByZXQgPSAwOworCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXY7CiAJc3RydWN0IGRy bV9kaXNwbGF5X21vZGUgKmN1cl9tb2RlID0gTlVMTDsKIAogCWlmICghZHJtX2VuYykgewpAQCAt MTEyNCw2ICsxMTI4LDcgQEAgc3RhdGljIHZvaWQgZHB1X2VuY29kZXJfdmlydF9lbmFibGUoc3Ry dWN0IGRybV9lbmNvZGVyICpkcm1fZW5jKQogCiAJbXV0ZXhfbG9jaygmZHB1X2VuYy0+ZW5jX2xv Y2spOwogCWN1cl9tb2RlID0gJmRwdV9lbmMtPmJhc2UuY3J0Yy0+c3RhdGUtPmFkanVzdGVkX21v ZGU7CisJcHJpdiA9IGRybV9lbmMtPmRldi0+ZGV2X3ByaXZhdGU7CiAKIAl0cmFjZV9kcHVfZW5j X2VuYWJsZShEUk1JRChkcm1fZW5jKSwgY3VyX21vZGUtPmhkaXNwbGF5LAogCQkJICAgICBjdXJf bW9kZS0+dmRpc3BsYXkpOwpAQCAtMTE0NCw2ICsxMTQ5LDE1IEBAIHN0YXRpYyB2b2lkIGRwdV9l bmNvZGVyX3ZpcnRfZW5hYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYykKIAogCV9kcHVf ZW5jb2Rlcl92aXJ0X2VuYWJsZV9oZWxwZXIoZHJtX2VuYyk7CiAKKwlpZiAoZHJtX2VuYy0+ZW5j b2Rlcl90eXBlID09IERSTV9NT0RFX0VOQ09ERVJfVE1EUyAmJiBwcml2LT5kcCkgeworCQlyZXQg PSBtc21fZHBfZGlzcGxheV9lbmFibGUocHJpdi0+ZHAsCisJCQkJCQlkcm1fZW5jKTsKKwkJaWYg KHJldCkgeworCQkJRFBVX0VSUk9SX0VOQyhkcHVfZW5jLCAiZHAgZGlzcGxheSBlbmFibGUgZmFp bGVkOiAlZFxuIiwKKwkJCQlyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CiAJZHB1X2VuYy0+ ZW5hYmxlZCA9IHRydWU7CiAKIG91dDoKQEAgLTExODAsNiArMTE5NCwxMiBAQCBzdGF0aWMgdm9p ZCBkcHVfZW5jb2Rlcl92aXJ0X2Rpc2FibGUoc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jKQog CXByaXYgPSBkcm1fZW5jLT5kZXYtPmRldl9wcml2YXRlOwogCWRwdV9rbXMgPSB0b19kcHVfa21z KHByaXYtPmttcyk7CiAKKwlpZiAoZHJtX2VuYy0+ZW5jb2Rlcl90eXBlID09IERSTV9NT0RFX0VO Q09ERVJfVE1EUyAmJiBwcml2LT5kcCkgeworCQlpZiAobXNtX2RwX2Rpc3BsYXlfZGlzYWJsZShw cml2LT5kcCwgZHJtX2VuYykpIHsKKwkJCURQVV9FUlJPUl9FTkMoZHB1X2VuYywgImRwIGRpc3Bs YXkgZGlzYWJsZSBmYWlsZWRcbiIpOworCQkJcmV0dXJuOworCQkgIH0KKwl9CiAJdHJhY2VfZHB1 X2VuY19kaXNhYmxlKERSTUlEKGRybV9lbmMpKTsKIAogCS8qIHdhaXQgZm9yIGlkbGUgKi8KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9pb191dGlsLmMgYi9k cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaW9fdXRpbC5jCmluZGV4IDc4ODMzYzIu LmI0YjFkYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9p b191dGlsLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2lvX3V0aWwu YwpAQCAtMTQsNyArMTQsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxp bnV4L2Nsay9jbGstY29uZi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxp bnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxkcm0vZHJtUC5o PgogCiAjaW5jbHVkZSA8ZHJtL2RybV9wcmludC5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaW9fdXRpbC5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2lvX3V0aWwuaAppbmRleCBiYzA3MzgxLi5hMWQzZTA1IDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaW9fdXRpbC5oCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9pb191dGlsLmgKQEAgLTE1LDYgKzE1LDcgQEAK IAogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZp Y2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KICNpbmNsdWRlIDxs aW51eC90eXBlcy5oPgogCiAjZGVmaW5lIERFVl9EQkcoZm10LCBhcmdzLi4uKSAgIHByX2RlYnVn KGZtdCwgIyNhcmdzKQpAQCAtMjIsNiArMjMsMjkgQEAKICNkZWZpbmUgREVWX1dBUk4oZm10LCBh cmdzLi4uKSAgcHJfd2FybihmbXQsICMjYXJncykKICNkZWZpbmUgREVWX0VSUihmbXQsIGFyZ3Mu Li4pICAgcHJfZXJyKGZtdCwgIyNhcmdzKQogCitzdHJ1Y3QgZHNzX2lvX2RhdGEgeworCXUzMiBs ZW47CisJdm9pZCBfX2lvbWVtICpiYXNlOworfTsKKworZW51bSBkc3NfdnJlZ190eXBlIHsKKwlE U1NfUkVHX0xETywKKwlEU1NfUkVHX1ZTLAorfTsKKworc3RydWN0IGRzc192cmVnIHsKKwlzdHJ1 Y3QgcmVndWxhdG9yICp2cmVnOyAvKiB2cmVnIGhhbmRsZSAqLworCWNoYXIgdnJlZ19uYW1lWzMy XTsKKwlpbnQgbWluX3ZvbHRhZ2U7CisJaW50IG1heF92b2x0YWdlOworCWludCBlbmFibGVfbG9h ZDsKKwlpbnQgZGlzYWJsZV9sb2FkOworCWludCBwcmVfb25fc2xlZXA7CisJaW50IHBvc3Rfb25f c2xlZXA7CisJaW50IHByZV9vZmZfc2xlZXA7CisJaW50IHBvc3Rfb2ZmX3NsZWVwOworfTsKKwog c3RydWN0IGRzc19ncGlvIHsKIAl1bnNpZ25lZCBpbnQgZ3BpbzsKIAl1bnNpZ25lZCBpbnQgdmFs dWU7CkBAIC00Miw2ICs2Niw4IEBAIHN0cnVjdCBkc3NfY2xrIHsKIH07CiAKIHN0cnVjdCBkc3Nf bW9kdWxlX3Bvd2VyIHsKKwl1bnNpZ25lZCBpbnQgbnVtX3ZyZWc7CisJc3RydWN0IGRzc192cmVn ICp2cmVnX2NvbmZpZzsKIAl1bnNpZ25lZCBpbnQgbnVtX2dwaW87CiAJc3RydWN0IGRzc19ncGlv ICpncGlvX2NvbmZpZzsKIAl1bnNpZ25lZCBpbnQgbnVtX2NsazsKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9tc20vZHAvZHBfYXV4LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2F1 eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMGJlMTAKLS0tIC9kZXYv bnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2F1eC5jCkBAIC0wLDAgKzEsNTQ4 IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CisvKgorICogQ29w eXJpZ2h0IChjKSAyMDEyLTIwMTksIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJl c2VydmVkLgorICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkJIltkcm0tZHBdICVzOiAiIGZtdCwg X19mdW5jX18KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlICJkcF9hdXgu aCIKKworI2RlZmluZSBEUF9BVVhfRU5VTV9TVFIoeCkJCSN4CisKK2VudW0geworCURQX0FVWF9E QVRBX0lOREVYX1dSSVRFID0gQklUKDMxKSwKK307CisKK3N0cnVjdCBkcF9hdXhfcHJpdmF0ZSB7 CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBkcF9hdXggZHBfYXV4OworCXN0cnVjdCBk cF9jYXRhbG9nX2F1eCAqY2F0YWxvZzsKKworCXN0cnVjdCBtdXRleCBtdXRleDsKKwlzdHJ1Y3Qg Y29tcGxldGlvbiBjb21wOworCisJdTMyIGF1eF9lcnJvcl9udW07CisJdTMyIHJldHJ5X2NudDsK Kwlib29sIGNtZF9idXN5OworCWJvb2wgbmF0aXZlOworCWJvb2wgcmVhZDsKKwlib29sIG5vX3Nl bmRfYWRkcjsKKwlib29sIG5vX3NlbmRfc3RvcDsKKwl1MzIgb2Zmc2V0OworCXUzMiBzZWdtZW50 OworCisJc3RydWN0IGRybV9kcF9hdXggZHJtX2F1eDsKK307CisKK3N0YXRpYyBjaGFyICpkcF9h dXhfZ2V0X2Vycm9yKHUzMiBhdXhfZXJyb3IpCit7CisJc3dpdGNoIChhdXhfZXJyb3IpIHsKKwlj YXNlIERQX0FVWF9FUlJfTk9ORToKKwkJcmV0dXJuIERQX0FVWF9FTlVNX1NUUihEUF9BVVhfRVJS X05PTkUpOworCWNhc2UgRFBfQVVYX0VSUl9BRERSOgorCQlyZXR1cm4gRFBfQVVYX0VOVU1fU1RS KERQX0FVWF9FUlJfQUREUik7CisJY2FzZSBEUF9BVVhfRVJSX1RPVVQ6CisJCXJldHVybiBEUF9B VVhfRU5VTV9TVFIoRFBfQVVYX0VSUl9UT1VUKTsKKwljYXNlIERQX0FVWF9FUlJfTkFDSzoKKwkJ cmV0dXJuIERQX0FVWF9FTlVNX1NUUihEUF9BVVhfRVJSX05BQ0spOworCWNhc2UgRFBfQVVYX0VS Ul9ERUZFUjoKKwkJcmV0dXJuIERQX0FVWF9FTlVNX1NUUihEUF9BVVhfRVJSX0RFRkVSKTsKKwlj YXNlIERQX0FVWF9FUlJfTkFDS19ERUZFUjoKKwkJcmV0dXJuIERQX0FVWF9FTlVNX1NUUihEUF9B VVhfRVJSX05BQ0tfREVGRVIpOworCWRlZmF1bHQ6CisJCXJldHVybiAidW5rbm93biI7CisJfQor fQorCitzdGF0aWMgdTMyIGRwX2F1eF93cml0ZShzdHJ1Y3QgZHBfYXV4X3ByaXZhdGUgKmF1eCwK KwkJCXN0cnVjdCBkcm1fZHBfYXV4X21zZyAqbXNnKQoreworCXUzMiBkYXRhWzRdLCByZWcsIGxl bjsKKwl1OCAqbXNnZGF0YSA9IG1zZy0+YnVmZmVyOworCWludCBjb25zdCBhdXhfY21kX2ZpZm9f bGVuID0gMTI4OworCWludCBpID0gMDsKKworCWlmIChhdXgtPnJlYWQpCisJCWxlbiA9IDQ7CisJ ZWxzZQorCQlsZW4gPSBtc2ctPnNpemUgKyA0OworCisJLyoKKwkgKiBjbWQgZmlmbyBvbmx5IGhh cyBkZXB0aCBvZiAxNDQgYnl0ZXMKKwkgKiBsaW1pdCBidWYgbGVuZ3RoIHRvIDEyOCBieXRlcyBo ZXJlCisJICovCisJaWYgKGxlbiA+IGF1eF9jbWRfZmlmb19sZW4pIHsKKwkJRFJNX0VSUk9SKCJi dWYgbGVuIGVycm9yXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogUGFjayBjbWQgYW5kIHdy aXRlIHRvIEhXICovCisJZGF0YVswXSA9IChtc2ctPmFkZHJlc3MgPj4gMTYpICYgMHhmOyAvKiBh ZGRyWzE5OjE2XSAqLworCWlmIChhdXgtPnJlYWQpCisJCWRhdGFbMF0gfD0gIEJJVCg0KTsgLyog Ui9XICovCisKKwlkYXRhWzFdID0gKG1zZy0+YWRkcmVzcyA+PiA4KSAmIDB4ZmY7CS8qIGFkZHJb MTU6OF0gKi8KKwlkYXRhWzJdID0gbXNnLT5hZGRyZXNzICYgMHhmZjsJCS8qIGFkZHJbNzowXSAq LworCWRhdGFbM10gPSAobXNnLT5zaXplIC0gMSkgJiAweGZmOwkvKiBsZW5bNzowXSAqLworCisJ Zm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCXJlZyA9IChpIDwgNCkgPyBkYXRhW2ldIDog bXNnZGF0YVtpIC0gNF07CisJCXJlZyA9ICgocmVnKSA8PCA4KSAmIDB4MDAwMGZmMDA7IC8qIGlu ZGV4ID0gMCwgd3JpdGUgKi8KKwkJaWYgKGkgPT0gMCkKKwkJCXJlZyB8PSBEUF9BVVhfREFUQV9J TkRFWF9XUklURTsKKwkJYXV4LT5jYXRhbG9nLT5kYXRhID0gcmVnOworCQlkcF9jYXRhbG9nX2F1 eF93cml0ZV9kYXRhKGF1eC0+Y2F0YWxvZyk7CisJfQorCisJZHBfY2F0YWxvZ19hdXhfY2xlYXJf dHJhbnMoYXV4LT5jYXRhbG9nLCBmYWxzZSk7CisKKwlyZWcgPSAwOyAvKiBUcmFuc2FjdGlvbiBu dW1iZXIgPT0gMSAqLworCWlmICghYXV4LT5uYXRpdmUpIHsgLyogaTJjICovCisJCXJlZyB8PSBC SVQoOCk7CisKKwkJaWYgKGF1eC0+bm9fc2VuZF9hZGRyKQorCQkJcmVnIHw9IEJJVCgxMCk7CisK KwkJaWYgKGF1eC0+bm9fc2VuZF9zdG9wKQorCQkJcmVnIHw9IEJJVCgxMSk7CisJfQorCisJcmVn IHw9IEJJVCg5KTsKKwlhdXgtPmNhdGFsb2ctPmRhdGEgPSByZWc7CisJZHBfY2F0YWxvZ19hdXhf d3JpdGVfdHJhbnMoYXV4LT5jYXRhbG9nKTsKKworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBp bnQgZHBfYXV4X2NtZF9maWZvX3R4KHN0cnVjdCBkcF9hdXhfcHJpdmF0ZSAqYXV4LAorCQkJICAg ICAgc3RydWN0IGRybV9kcF9hdXhfbXNnICptc2cpCit7CisJdTMyIHJldCA9IDAsIGxlbiA9IDAs IHRpbWVvdXQ7CisJaW50IGNvbnN0IGF1eF90aW1lb3V0X21zID0gSFovNDsKKworCXJlaW5pdF9j b21wbGV0aW9uKCZhdXgtPmNvbXApOworCisJbGVuID0gZHBfYXV4X3dyaXRlKGF1eCwgbXNnKTsK KwlpZiAobGVuID09IDApIHsKKwkJRFJNX0VSUk9SKCJEUCBBVVggd3JpdGUgZmFpbGVkXG4iKTsK KwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdGltZW91dCA9IHdhaXRfZm9yX2NvbXBsZXRpb25f dGltZW91dCgmYXV4LT5jb21wLCBhdXhfdGltZW91dF9tcyk7CisJaWYgKCF0aW1lb3V0KSB7CisJ CURSTV9FUlJPUigiYXV4ICVzIHRpbWVvdXRcbiIsIChhdXgtPnJlYWQgPyAicmVhZCIgOiAid3Jp dGUiKSk7CisJCXJldHVybiAtRVRJTUVET1VUOworCX0KKworCWlmIChhdXgtPmF1eF9lcnJvcl9u dW0gPT0gRFBfQVVYX0VSUl9OT05FKSB7CisJCXJldCA9IGxlbjsKKwl9IGVsc2UgeworCQlEUk1f RVJST1JfUkFURUxJTUlURUQoImF1eCBlcnI6ICVzXG4iLAorCQkJZHBfYXV4X2dldF9lcnJvcihh dXgtPmF1eF9lcnJvcl9udW0pKTsKKworCQlyZXQgPSAtRUlOVkFMOworCX0KKworCXJldHVybiBy ZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGRwX2F1eF9jbWRfZmlmb19yeChzdHJ1Y3QgZHBfYXV4X3By aXZhdGUgKmF1eCwKKwkJc3RydWN0IGRybV9kcF9hdXhfbXNnICptc2cpCit7CisJdTMyIGRhdGE7 CisJdTggKmRwOworCXUzMiBpLCBhY3R1YWxfaTsKKwl1MzIgbGVuID0gbXNnLT5zaXplOworCisJ ZHBfY2F0YWxvZ19hdXhfY2xlYXJfdHJhbnMoYXV4LT5jYXRhbG9nLCB0cnVlKTsKKworCWRhdGEg PSAwOworCWRhdGEgfD0gRFBfQVVYX0RBVEFfSU5ERVhfV1JJVEU7IC8qIElOREVYX1dSSVRFICov CisJZGF0YSB8PSBCSVQoMCk7ICAvKiByZWFkICovCisKKwlhdXgtPmNhdGFsb2ctPmRhdGEgPSBk YXRhOworCWRwX2NhdGFsb2dfYXV4X3dyaXRlX2RhdGEoYXV4LT5jYXRhbG9nKTsKKworCWRwID0g bXNnLT5idWZmZXI7CisKKwkvKiBkaXNjYXJkIGZpcnN0IGJ5dGUgKi8KKwlkYXRhID0gZHBfY2F0 YWxvZ19hdXhfcmVhZF9kYXRhKGF1eC0+Y2F0YWxvZyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVu OyBpKyspIHsKKwkJZGF0YSA9IGRwX2NhdGFsb2dfYXV4X3JlYWRfZGF0YShhdXgtPmNhdGFsb2cp OworCQkqZHArKyA9ICh1OCkoKGRhdGEgPj4gOCkgJiAweGZmKTsKKworCQlhY3R1YWxfaSA9IChk YXRhID4+IDE2KSAmIDB4RkY7CisJCWlmIChpICE9IGFjdHVhbF9pKQorCQkJcHJfd2FybigiSW5k ZXggbWlzbWF0Y2g6IGV4cGVjdGVkICVkLCBmb3VuZCAlZFxuIiwKKwkJCQlpLCBhY3R1YWxfaSk7 CisJfQorfQorCitzdGF0aWMgdm9pZCBkcF9hdXhfbmF0aXZlX2hhbmRsZXIoc3RydWN0IGRwX2F1 eF9wcml2YXRlICphdXgpCit7CisJdTMyIGlzciA9IGF1eC0+Y2F0YWxvZy0+aXNyOworCisJaWYg KGlzciAmIERQX0lOVFJfQVVYX0kyQ19ET05FKQorCQlhdXgtPmF1eF9lcnJvcl9udW0gPSBEUF9B VVhfRVJSX05PTkU7CisJZWxzZSBpZiAoaXNyICYgRFBfSU5UUl9XUk9OR19BRERSKQorCQlhdXgt PmF1eF9lcnJvcl9udW0gPSBEUF9BVVhfRVJSX0FERFI7CisJZWxzZSBpZiAoaXNyICYgRFBfSU5U Ul9USU1FT1VUKQorCQlhdXgtPmF1eF9lcnJvcl9udW0gPSBEUF9BVVhfRVJSX1RPVVQ7CisJaWYg KGlzciAmIERQX0lOVFJfTkFDS19ERUZFUikKKwkJYXV4LT5hdXhfZXJyb3JfbnVtID0gRFBfQVVY X0VSUl9OQUNLOworCisJY29tcGxldGUoJmF1eC0+Y29tcCk7Cit9CisKK3N0YXRpYyB2b2lkIGRw X2F1eF9pMmNfaGFuZGxlcihzdHJ1Y3QgZHBfYXV4X3ByaXZhdGUgKmF1eCkKK3sKKwl1MzIgaXNy ID0gYXV4LT5jYXRhbG9nLT5pc3I7CisKKwlpZiAoaXNyICYgRFBfSU5UUl9BVVhfSTJDX0RPTkUp IHsKKwkJaWYgKGlzciAmIChEUF9JTlRSX0kyQ19OQUNLIHwgRFBfSU5UUl9JMkNfREVGRVIpKQor CQkJYXV4LT5hdXhfZXJyb3JfbnVtID0gRFBfQVVYX0VSUl9OQUNLOworCQllbHNlCisJCQlhdXgt PmF1eF9lcnJvcl9udW0gPSBEUF9BVVhfRVJSX05PTkU7CisJfSBlbHNlIHsKKwkJaWYgKGlzciAm IERQX0lOVFJfV1JPTkdfQUREUikKKwkJCWF1eC0+YXV4X2Vycm9yX251bSA9IERQX0FVWF9FUlJf QUREUjsKKwkJZWxzZSBpZiAoaXNyICYgRFBfSU5UUl9USU1FT1VUKQorCQkJYXV4LT5hdXhfZXJy b3JfbnVtID0gRFBfQVVYX0VSUl9UT1VUOworCQlpZiAoaXNyICYgRFBfSU5UUl9OQUNLX0RFRkVS KQorCQkJYXV4LT5hdXhfZXJyb3JfbnVtID0gRFBfQVVYX0VSUl9OQUNLX0RFRkVSOworCQlpZiAo aXNyICYgRFBfSU5UUl9JMkNfTkFDSykKKwkJCWF1eC0+YXV4X2Vycm9yX251bSA9IERQX0FVWF9F UlJfTkFDSzsKKwkJaWYgKGlzciAmIERQX0lOVFJfSTJDX0RFRkVSKQorCQkJYXV4LT5hdXhfZXJy b3JfbnVtID0gRFBfQVVYX0VSUl9ERUZFUjsKKwl9CisKKwljb21wbGV0ZSgmYXV4LT5jb21wKTsK K30KKworc3RhdGljIHZvaWQgZHBfYXV4X3VwZGF0ZV9vZmZzZXRfYW5kX3NlZ21lbnQoc3RydWN0 IGRwX2F1eF9wcml2YXRlICphdXgsCisJCQkJCSAgICAgc3RydWN0IGRybV9kcF9hdXhfbXNnICpp bnB1dF9tc2cpCit7CisJdTMyIGNvbnN0IGVkaWRfYWRkcmVzcyA9IDB4NTA7CisJdTMyIGNvbnN0 IHNlZ21lbnRfYWRkcmVzcyA9IDB4MzA7CisJYm9vbCBpMmNfcmVhZCA9IGlucHV0X21zZy0+cmVx dWVzdCAmCisJCShEUF9BVVhfSTJDX1JFQUQgJiBEUF9BVVhfTkFUSVZFX1JFQUQpOworCXU4ICpk YXRhID0gTlVMTDsKKworCWlmIChhdXgtPm5hdGl2ZSB8fCBpMmNfcmVhZCB8fCAoKGlucHV0X21z Zy0+YWRkcmVzcyAhPSBlZGlkX2FkZHJlc3MpICYmCisJCShpbnB1dF9tc2ctPmFkZHJlc3MgIT0g c2VnbWVudF9hZGRyZXNzKSkpCisJCXJldHVybjsKKworCisJZGF0YSA9IGlucHV0X21zZy0+YnVm ZmVyOworCWlmIChpbnB1dF9tc2ctPmFkZHJlc3MgPT0gc2VnbWVudF9hZGRyZXNzKQorCQlhdXgt PnNlZ21lbnQgPSAqZGF0YTsKKwllbHNlCisJCWF1eC0+b2Zmc2V0ID0gKmRhdGE7Cit9CisKKy8q KgorICogZHBfYXV4X3RyYW5zZmVyX2hlbHBlcigpIC0gaGVscGVyIGZ1bmN0aW9uIGZvciBFRElE IHJlYWQgdHJhbnNhY3Rpb25zCisgKgorICogQGF1eDogRFAgQVVYIHByaXZhdGUgc3RydWN0dXJl CisgKiBAaW5wdXRfbXNnOiBpbnB1dCBtZXNzYWdlIGZyb20gRFJNIHVwc3RyZWFtIEFQSXMKKyAq CisgKiByZXR1cm46IHZvaWQKKyAqCisgKiBUaGlzIGhlbHBlciBmdW5jdGlvbiBpcyB1c2VkIHRv IGZpeCBFRElEIHJlYWRzIGZvciBub24tY29tcGxpYW50CisgKiBzaW5rcyB0aGF0IGRvIG5vdCBo YW5kbGUgdGhlIGkyYyBtaWRkbGUtb2YtdHJhbnNhY3Rpb24gZmxhZyBjb3JyZWN0bHkuCisgKi8K K3N0YXRpYyB2b2lkIGRwX2F1eF90cmFuc2Zlcl9oZWxwZXIoc3RydWN0IGRwX2F1eF9wcml2YXRl ICphdXgsCisJCQkJICAgc3RydWN0IGRybV9kcF9hdXhfbXNnICppbnB1dF9tc2cpCit7CisJc3Ry dWN0IGRybV9kcF9hdXhfbXNnIGhlbHBlcl9tc2c7CisJdTMyIGNvbnN0IG1lc3NhZ2Vfc2l6ZSA9 IDB4MTA7CisJdTMyIGNvbnN0IHNlZ21lbnRfYWRkcmVzcyA9IDB4MzA7CisJYm9vbCBpMmNfbW90 ID0gaW5wdXRfbXNnLT5yZXF1ZXN0ICYgRFBfQVVYX0kyQ19NT1Q7CisJYm9vbCBpMmNfcmVhZCA9 IGlucHV0X21zZy0+cmVxdWVzdCAmCisJCShEUF9BVVhfSTJDX1JFQUQgJiBEUF9BVVhfTkFUSVZF X1JFQUQpOworCisJaWYgKCFpMmNfbW90IHx8ICFpMmNfcmVhZCB8fCAoaW5wdXRfbXNnLT5zaXpl ID09IDApKQorCQlyZXR1cm47CisKKwlhdXgtPnJlYWQgPSBmYWxzZTsKKwlhdXgtPmNtZF9idXN5 ID0gdHJ1ZTsKKwlhdXgtPm5vX3NlbmRfYWRkciA9IHRydWU7CisJYXV4LT5ub19zZW5kX3N0b3Ag PSB0cnVlOworCisJLyoKKwkgKiBTZW5kIHRoZSBzZWdtZW50IGFkZHJlc3MgZm9yIGV2ZXJ5IGky YyByZWFkIGluIHdoaWNoIHRoZQorCSAqIG1pZGRsZS1vZi10cmFuYWN0aW9uIGZsYWcgaXMgc2V0 LiBUaGlzIGlzIHJlcXVpcmVkIHRvIHN1cHBvcnQgRURJRAorCSAqIHJlYWRzIG9mIG1vcmUgdGhh biAyIGJsb2NrcyBhcyB0aGUgc2VnbWVudCBhZGRyZXNzIGlzIHJlc2V0IHRvIDAKKwkgKiBzaW5j ZSB3ZSBhcmUgb3ZlcnJpZGluZyB0aGUgbWlkZGxlLW9mLXRyYW5zYWN0aW9uIGZsYWcgZm9yIHJl YWQKKwkgKiB0cmFuc2FjdGlvbnMuCisJICovCisJbWVtc2V0KCZoZWxwZXJfbXNnLCAwLCBzaXpl b2YoaGVscGVyX21zZykpOworCWhlbHBlcl9tc2cuYWRkcmVzcyA9IHNlZ21lbnRfYWRkcmVzczsK KwloZWxwZXJfbXNnLmJ1ZmZlciA9ICZhdXgtPnNlZ21lbnQ7CisJaGVscGVyX21zZy5zaXplID0g MTsKKwlkcF9hdXhfY21kX2ZpZm9fdHgoYXV4LCAmaGVscGVyX21zZyk7CisKKwkvKgorCSAqIFNl bmQgdGhlIG9mZnNldCBhZGRyZXNzIGZvciBldmVyeSBpMmMgcmVhZCBpbiB3aGljaCB0aGUKKwkg KiBtaWRkbGUtb2YtdHJhbnNhY3Rpb24gZmxhZyBpcyBzZXQuIFRoaXMgd2lsbCBlbnN1cmUgdGhh dCB0aGUgc2luaworCSAqIHdpbGwgdXBkYXRlIGl0cyByZWFkIHBvaW50ZXIgYW5kIHJldHVybiB0 aGUgY29ycmVjdCBwb3J0aW9uIG9mIHRoZQorCSAqIEVESUQgYnVmZmVyIGluIHRoZSBzdWJzZXF1 ZW50IGkyYyByZWFkIHRyYXNudGlvbiB0cmlnZ2VyZWQgaW4gdGhlCisJICogbmF0aXZlIEFVWCB0 cmFuc2ZlciBmdW5jdGlvbi4KKwkgKi8KKwltZW1zZXQoJmhlbHBlcl9tc2csIDAsIHNpemVvZiho ZWxwZXJfbXNnKSk7CisJaGVscGVyX21zZy5hZGRyZXNzID0gaW5wdXRfbXNnLT5hZGRyZXNzOwor CWhlbHBlcl9tc2cuYnVmZmVyID0gJmF1eC0+b2Zmc2V0OworCWhlbHBlcl9tc2cuc2l6ZSA9IDE7 CisJZHBfYXV4X2NtZF9maWZvX3R4KGF1eCwgJmhlbHBlcl9tc2cpOworCWF1eC0+b2Zmc2V0ICs9 IG1lc3NhZ2Vfc2l6ZTsKKworCWlmIChhdXgtPm9mZnNldCA9PSAweDgwIHx8IGF1eC0+b2Zmc2V0 ID09IDB4MTAwKQorCQlhdXgtPnNlZ21lbnQgPSAweDA7IC8qIHJlc2V0IHNlZ21lbnQgYXQgZW5k IG9mIGJsb2NrICovCit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgdGhlIHJlYWwgam9i IHRvIHByb2Nlc3MgYW4gQVVYIHRyYW5zYWN0aW9uLgorICogSXQgd2lsbCBjYWxsIGF1eF9yZXNl dCgpIGZ1bmN0aW9uIHRvIHJlc2V0IHRoZSBBVVggY2hhbm5lbCwKKyAqIGlmIHRoZSB3YWl0aW5n IGlzIHRpbWVvdXQuCisgKi8KK3N0YXRpYyBzc2l6ZV90IGRwX2F1eF90cmFuc2ZlcihzdHJ1Y3Qg ZHJtX2RwX2F1eCAqZHJtX2F1eCwKKwkJCSAgICAgICBzdHJ1Y3QgZHJtX2RwX2F1eF9tc2cgKm1z ZykKK3sKKwlzc2l6ZV90IHJldDsKKwlpbnQgY29uc3QgYXV4X2NtZF9uYXRpdmVfbWF4ID0gMTY7 CisJaW50IGNvbnN0IGF1eF9jbWRfaTJjX21heCA9IDEyODsKKwlpbnQgY29uc3QgcmV0cnlfY291 bnQgPSA1OworCXN0cnVjdCBkcF9hdXhfcHJpdmF0ZSAqYXV4ID0gY29udGFpbmVyX29mKGRybV9h dXgsCisJCXN0cnVjdCBkcF9hdXhfcHJpdmF0ZSwgZHJtX2F1eCk7CisKKwltdXRleF9sb2NrKCZh dXgtPm11dGV4KTsKKworCWF1eC0+bmF0aXZlID0gbXNnLT5yZXF1ZXN0ICYgKERQX0FVWF9OQVRJ VkVfV1JJVEUgJiBEUF9BVVhfTkFUSVZFX1JFQUQpOworCisJLyogSWdub3JlIGFkZHJlc3Mgb25s eSBtZXNzYWdlICovCisJaWYgKChtc2ctPnNpemUgPT0gMCkgfHwgKG1zZy0+YnVmZmVyID09IE5V TEwpKSB7CisJCW1zZy0+cmVwbHkgPSBhdXgtPm5hdGl2ZSA/CisJCQlEUF9BVVhfTkFUSVZFX1JF UExZX0FDSyA6IERQX0FVWF9JMkNfUkVQTFlfQUNLOworCQlyZXQgPSBtc2ctPnNpemU7CisJCWdv dG8gdW5sb2NrX2V4aXQ7CisJfQorCisJLyogbXNnIHNhbml0eSBjaGVjayAqLworCWlmICgoYXV4 LT5uYXRpdmUgJiYgKG1zZy0+c2l6ZSA+IGF1eF9jbWRfbmF0aXZlX21heCkpIHx8CisJCShtc2ct PnNpemUgPiBhdXhfY21kX2kyY19tYXgpKSB7CisJCURSTV9FUlJPUigiJXM6IGludmFsaWQgbXNn OiBzaXplKCV6dSksIHJlcXVlc3QoJXgpXG4iLAorCQkJX19mdW5jX18sIG1zZy0+c2l6ZSwgbXNn LT5yZXF1ZXN0KTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byB1bmxvY2tfZXhpdDsKKwl9CisK KwlkcF9hdXhfdXBkYXRlX29mZnNldF9hbmRfc2VnbWVudChhdXgsIG1zZyk7CisJZHBfYXV4X3Ry YW5zZmVyX2hlbHBlcihhdXgsIG1zZyk7CisKKwlhdXgtPnJlYWQgPSBtc2ctPnJlcXVlc3QgJiAo RFBfQVVYX0kyQ19SRUFEICYgRFBfQVVYX05BVElWRV9SRUFEKTsKKwlhdXgtPmNtZF9idXN5ID0g dHJ1ZTsKKworCWlmIChhdXgtPnJlYWQpIHsKKwkJYXV4LT5ub19zZW5kX2FkZHIgPSB0cnVlOwor CQlhdXgtPm5vX3NlbmRfc3RvcCA9IGZhbHNlOworCX0gZWxzZSB7CisJCWF1eC0+bm9fc2VuZF9h ZGRyID0gdHJ1ZTsKKwkJYXV4LT5ub19zZW5kX3N0b3AgPSB0cnVlOworCX0KKworCXJldCA9IGRw X2F1eF9jbWRfZmlmb190eChhdXgsIG1zZyk7CisJaWYgKChyZXQgPCAwKSAmJiBhdXgtPm5hdGl2 ZSkgeworCQlhdXgtPnJldHJ5X2NudCsrOworCQlpZiAoIShhdXgtPnJldHJ5X2NudCAlIHJldHJ5 X2NvdW50KSkKKwkJCWRwX2NhdGFsb2dfYXV4X3VwZGF0ZV9jZmcoYXV4LT5jYXRhbG9nLAorCQkJ CWF1eC0+ZHBfYXV4LmNmZywgUEhZX0FVWF9DRkcxKTsKKwkJZHBfY2F0YWxvZ19hdXhfcmVzZXQo YXV4LT5jYXRhbG9nKTsKKwkJZ290byB1bmxvY2tfZXhpdDsKKwl9IGVsc2UgaWYgKHJldCA8IDAp IHsKKwkJZ290byB1bmxvY2tfZXhpdDsKKwl9CisKKwlpZiAoYXV4LT5hdXhfZXJyb3JfbnVtID09 IERQX0FVWF9FUlJfTk9ORSkgeworCQlpZiAoYXV4LT5yZWFkKQorCQkJZHBfYXV4X2NtZF9maWZv X3J4KGF1eCwgbXNnKTsKKworCQltc2ctPnJlcGx5ID0gYXV4LT5uYXRpdmUgPworCQkJRFBfQVVY X05BVElWRV9SRVBMWV9BQ0sgOiBEUF9BVVhfSTJDX1JFUExZX0FDSzsKKwl9IGVsc2UgeworCQkv KiBSZXBseSBkZWZlciB0byByZXRyeSAqLworCQltc2ctPnJlcGx5ID0gYXV4LT5uYXRpdmUgPwor CQkJRFBfQVVYX05BVElWRV9SRVBMWV9ERUZFUiA6IERQX0FVWF9JMkNfUkVQTFlfREVGRVI7CisJ fQorCisJLyogUmV0dXJuIHJlcXVlc3RlZCBzaXplIGZvciBzdWNjZXNzIG9yIHJldHJ5ICovCisJ cmV0ID0gbXNnLT5zaXplOworCWF1eC0+cmV0cnlfY250ID0gMDsKKwordW5sb2NrX2V4aXQ6CisJ YXV4LT5jbWRfYnVzeSA9IGZhbHNlOworCW11dGV4X3VubG9jaygmYXV4LT5tdXRleCk7CisJcmV0 dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZHBfYXV4X3Jlc2V0X3BoeV9jb25maWdfaW5kaWNl cyhzdHJ1Y3QgZHBfYXV4X2NmZyAqYXV4X2NmZykKK3sKKwlpbnQgaSA9IDA7CisKKwlmb3IgKGkg PSAwOyBpIDwgUEhZX0FVWF9DRkdfTUFYOyBpKyspCisJCWF1eF9jZmdbaV0uY3VycmVudF9pbmRl eCA9IDA7Cit9CisKK3ZvaWQgZHBfYXV4X2lzcihzdHJ1Y3QgZHBfYXV4ICpkcF9hdXgpCit7CisJ c3RydWN0IGRwX2F1eF9wcml2YXRlICphdXg7CisKKwlpZiAoIWRwX2F1eCkgeworCQlEUk1fRVJS T1IoImludmFsaWQgaW5wdXRcbiIpOworCQlyZXR1cm47CisJfQorCisJYXV4ID0gY29udGFpbmVy X29mKGRwX2F1eCwgc3RydWN0IGRwX2F1eF9wcml2YXRlLCBkcF9hdXgpOworCisJZHBfY2F0YWxv Z19hdXhfZ2V0X2lycShhdXgtPmNhdGFsb2csIGF1eC0+Y21kX2J1c3kpOworCisJaWYgKCFhdXgt PmNtZF9idXN5KQorCQlyZXR1cm47CisKKwlpZiAoYXV4LT5uYXRpdmUpCisJCWRwX2F1eF9uYXRp dmVfaGFuZGxlcihhdXgpOworCWVsc2UKKwkJZHBfYXV4X2kyY19oYW5kbGVyKGF1eCk7Cit9CisK K3ZvaWQgZHBfYXV4X3JlY29uZmlnKHN0cnVjdCBkcF9hdXggKmRwX2F1eCkKK3sKKwlzdHJ1Y3Qg ZHBfYXV4X3ByaXZhdGUgKmF1eDsKKworCWF1eCA9IGNvbnRhaW5lcl9vZihkcF9hdXgsIHN0cnVj dCBkcF9hdXhfcHJpdmF0ZSwgZHBfYXV4KTsKKworCWRwX2NhdGFsb2dfYXV4X3VwZGF0ZV9jZmco YXV4LT5jYXRhbG9nLAorCQkJZHBfYXV4LT5jZmcsIFBIWV9BVVhfQ0ZHMSk7CisJZHBfY2F0YWxv Z19hdXhfcmVzZXQoYXV4LT5jYXRhbG9nKTsKK30KKwordm9pZCBkcF9hdXhfaW5pdChzdHJ1Y3Qg ZHBfYXV4ICpkcF9hdXgsIHN0cnVjdCBkcF9hdXhfY2ZnICphdXhfY2ZnKQoreworCXN0cnVjdCBk cF9hdXhfcHJpdmF0ZSAqYXV4OworCisJaWYgKCFkcF9hdXggfHwgIWF1eF9jZmcpIHsKKwkJRFJN X0VSUk9SKCJpbnZhbGlkIGlucHV0XG4iKTsKKwkJcmV0dXJuOworCX0KKworCWF1eCA9IGNvbnRh aW5lcl9vZihkcF9hdXgsIHN0cnVjdCBkcF9hdXhfcHJpdmF0ZSwgZHBfYXV4KTsKKworCWRwX2F1 eF9yZXNldF9waHlfY29uZmlnX2luZGljZXMoYXV4X2NmZyk7CisJZHBfY2F0YWxvZ19hdXhfc2V0 dXAoYXV4LT5jYXRhbG9nLCBhdXhfY2ZnKTsKKwlkcF9jYXRhbG9nX2F1eF9yZXNldChhdXgtPmNh dGFsb2cpOworCWRwX2NhdGFsb2dfYXV4X2VuYWJsZShhdXgtPmNhdGFsb2csIHRydWUpOworCWF1 eC0+cmV0cnlfY250ID0gMDsKK30KKwordm9pZCBkcF9hdXhfZGVpbml0KHN0cnVjdCBkcF9hdXgg KmRwX2F1eCkKK3sKKwlzdHJ1Y3QgZHBfYXV4X3ByaXZhdGUgKmF1eDsKKworCWlmICghZHBfYXV4 KSB7CisJCURSTV9FUlJPUigiaW52YWxpZCBpbnB1dFxuIik7CisJCXJldHVybjsKKwl9CisKKwlh dXggPSBjb250YWluZXJfb2YoZHBfYXV4LCBzdHJ1Y3QgZHBfYXV4X3ByaXZhdGUsIGRwX2F1eCk7 CisKKwlkcF9jYXRhbG9nX2F1eF9lbmFibGUoYXV4LT5jYXRhbG9nLCBmYWxzZSk7Cit9CisKK2lu dCBkcF9hdXhfcmVnaXN0ZXIoc3RydWN0IGRwX2F1eCAqZHBfYXV4KQoreworCXN0cnVjdCBkcF9h dXhfcHJpdmF0ZSAqYXV4OworCWludCByZXQgPSAwOworCisJaWYgKCFkcF9hdXgpIHsKKwkJRFJN X0VSUk9SKCJpbnZhbGlkIGlucHV0XG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBleGl0 OworCX0KKworCWF1eCA9IGNvbnRhaW5lcl9vZihkcF9hdXgsIHN0cnVjdCBkcF9hdXhfcHJpdmF0 ZSwgZHBfYXV4KTsKKworCWF1eC0+ZHJtX2F1eC5uYW1lID0gImRwdV9kcF9hdXgiOworCWF1eC0+ ZHJtX2F1eC5kZXYgPSBhdXgtPmRldjsKKwlhdXgtPmRybV9hdXgudHJhbnNmZXIgPSBkcF9hdXhf dHJhbnNmZXI7CisJcmV0ID0gZHJtX2RwX2F1eF9yZWdpc3RlcigmYXV4LT5kcm1fYXV4KTsKKwlp ZiAocmV0KSB7CisJCURSTV9FUlJPUigiJXM6IGZhaWxlZCB0byByZWdpc3RlciBkcm0gYXV4OiAl ZFxuIiwgX19mdW5jX18sIHJldCk7CisJCWdvdG8gZXhpdDsKKwl9CisJZHBfYXV4LT5kcm1fYXV4 ID0gJmF1eC0+ZHJtX2F1eDsKK2V4aXQ6CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBkcF9hdXhf dW5yZWdpc3RlcihzdHJ1Y3QgZHBfYXV4ICpkcF9hdXgpCit7CisJc3RydWN0IGRwX2F1eF9wcml2 YXRlICphdXg7CisKKwlpZiAoIWRwX2F1eCkgeworCQlEUk1fRVJST1IoImludmFsaWQgaW5wdXRc biIpOworCQlyZXR1cm47CisJfQorCisJYXV4ID0gY29udGFpbmVyX29mKGRwX2F1eCwgc3RydWN0 IGRwX2F1eF9wcml2YXRlLCBkcF9hdXgpOworCWRybV9kcF9hdXhfdW5yZWdpc3RlcigmYXV4LT5k cm1fYXV4KTsKK30KKworc3RydWN0IGRwX2F1eCAqZHBfYXV4X2dldChzdHJ1Y3QgZGV2aWNlICpk ZXYsIHN0cnVjdCBkcF9jYXRhbG9nX2F1eCAqY2F0YWxvZywKKwkJCSAgc3RydWN0IGRwX2F1eF9j ZmcgKmF1eF9jZmcpCit7CisJaW50IHJjID0gMDsKKwlzdHJ1Y3QgZHBfYXV4X3ByaXZhdGUgKmF1 eDsKKwlzdHJ1Y3QgZHBfYXV4ICpkcF9hdXg7CisKKwlpZiAoIWNhdGFsb2cgfHwgIWF1eF9jZmcp IHsKKwkJRFJNX0VSUk9SKCJpbnZhbGlkIGlucHV0XG4iKTsKKwkJcmMgPSAtRU5PREVWOworCQln b3RvIGVycm9yOworCX0KKworCWF1eCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqYXV4KSwg R0ZQX0tFUk5FTCk7CisJaWYgKCFhdXgpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGVycm9y OworCX0KKworCWluaXRfY29tcGxldGlvbigmYXV4LT5jb21wKTsKKwlhdXgtPmNtZF9idXN5ID0g ZmFsc2U7CisJbXV0ZXhfaW5pdCgmYXV4LT5tdXRleCk7CisKKwlhdXgtPmRldiA9IGRldjsKKwlh dXgtPmNhdGFsb2cgPSBjYXRhbG9nOworCWF1eC0+ZHBfYXV4LmNmZyA9IGF1eF9jZmc7CisJZHBf YXV4ID0gJmF1eC0+ZHBfYXV4OworCWF1eC0+cmV0cnlfY250ID0gMDsKKworCXJldHVybiBkcF9h dXg7CitlcnJvcjoKKwlyZXR1cm4gRVJSX1BUUihyYyk7Cit9CisKK3ZvaWQgZHBfYXV4X3B1dChz dHJ1Y3QgZHBfYXV4ICpkcF9hdXgpCit7CisJc3RydWN0IGRwX2F1eF9wcml2YXRlICphdXg7CisK KwlpZiAoIWRwX2F1eCkKKwkJcmV0dXJuOworCisJYXV4ID0gY29udGFpbmVyX29mKGRwX2F1eCwg c3RydWN0IGRwX2F1eF9wcml2YXRlLCBkcF9hdXgpOworCisJbXV0ZXhfZGVzdHJveSgmYXV4LT5t dXRleCk7CisKKwlkZXZtX2tmcmVlKGF1eC0+ZGV2LCBhdXgpOworfQpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL21zbS9kcC9kcF9hdXguaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBf YXV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg0OTVjNQotLS0gL2Rl di9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfYXV4LmgKQEAgLTAsMCArMSwz NyBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLworLyoKKyAq IENvcHlyaWdodCAoYykgMjAxMi0yMDE5LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0 cyByZXNlcnZlZC4KKyAqLworCisjaWZuZGVmIF9EUF9BVVhfSF8KKyNkZWZpbmUgX0RQX0FVWF9I XworCisjaW5jbHVkZSAiZHBfY2F0YWxvZy5oIgorI2luY2x1ZGUgPGRybS9kcm1fZHBfaGVscGVy Lmg+CisKK2VudW0gZHBfYXV4X2Vycm9yIHsKKwlEUF9BVVhfRVJSX05PTkUJPSAwLAorCURQX0FV WF9FUlJfQUREUgk9IC0xLAorCURQX0FVWF9FUlJfVE9VVAk9IC0yLAorCURQX0FVWF9FUlJfTkFD Swk9IC0zLAorCURQX0FVWF9FUlJfREVGRVIJPSAtNCwKKwlEUF9BVVhfRVJSX05BQ0tfREVGRVIJ PSAtNSwKK307CisKK3N0cnVjdCBkcF9hdXggeworCXN0cnVjdCBkcm1fZHBfYXV4ICpkcm1fYXV4 OworCXN0cnVjdCBkcF9hdXhfY2ZnICpjZmc7Cit9OworCitpbnQgZHBfYXV4X3JlZ2lzdGVyKHN0 cnVjdCBkcF9hdXggKmF1eCk7Cit2b2lkIGRwX2F1eF91bnJlZ2lzdGVyKHN0cnVjdCBkcF9hdXgg KmF1eCk7Cit2b2lkIGRwX2F1eF9pc3Ioc3RydWN0IGRwX2F1eCAqYXV4KTsKK3ZvaWQgZHBfYXV4 X2luaXQoc3RydWN0IGRwX2F1eCAqYXV4LCBzdHJ1Y3QgZHBfYXV4X2NmZyAqYXV4X2NmZyk7Cit2 b2lkIGRwX2F1eF9kZWluaXQoc3RydWN0IGRwX2F1eCAqYXV4KTsKK3ZvaWQgZHBfYXV4X3JlY29u ZmlnKHN0cnVjdCBkcF9hdXggKmF1eCk7CisKK3N0cnVjdCBkcF9hdXggKmRwX2F1eF9nZXQoc3Ry dWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZHBfY2F0YWxvZ19hdXggKmNhdGFsb2csCisJCQkgIHN0 cnVjdCBkcF9hdXhfY2ZnICphdXhfY2ZnKTsKK3ZvaWQgZHBfYXV4X3B1dChzdHJ1Y3QgZHBfYXV4 ICphdXgpOworCisjZW5kaWYgLypfX0RQX0FVWF9IXyovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vbXNtL2RwL2RwX2NhdGFsb2cuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY2F0 YWxvZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2YzQ2MWIKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2NhdGFsb2cuYwpAQCAtMCww ICsxLDk5NiBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQorLyoK KyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDE5LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJp Z2h0cyByZXNlcnZlZC4KKyAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpCSJbZHJtLWRwXSAlczog IiBmbXQsIF9fZnVuY19fCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxp bnV4L2lvcG9sbC5oPgorI2luY2x1ZGUgPGRybS9kcm1fZHBfaGVscGVyLmg+CisKKyNpbmNsdWRl ICJkcF9jYXRhbG9nLmgiCisjaW5jbHVkZSAiZHBfcmVnLmgiCisKKyNkZWZpbmUgUE9MTElOR19T TEVFUF9VUwkJCTEwMDAKKyNkZWZpbmUgUE9MTElOR19USU1FT1VUX1VTCQkJMTAwMDAKKworI2Rl ZmluZSBSRUZUSU1FUl9ERUZBVUxUX1ZBTFVFCQkJMHgyMDAwMAorI2RlZmluZSBTQ1JBTUJMRVJf UkVTRVRfQ09VTlRfVkFMVUUJCTB4RkMKKworI2RlZmluZSBkcF9jYXRhbG9nX2dldF9wcml2KHgp IHsgXAorCXN0cnVjdCBkcF9jYXRhbG9nICpkcF9jYXRhbG9nOyBcCisJZHBfY2F0YWxvZyA9IGNv bnRhaW5lcl9vZih4LCBzdHJ1Y3QgZHBfY2F0YWxvZywgeCk7IFwKKwljYXRhbG9nID0gY29udGFp bmVyX29mKGRwX2NhdGFsb2csIHN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUsIFwKKwkJCQlkcF9j YXRhbG9nKTsgXAorfQorCisjZGVmaW5lIERQX0lOVEVSUlVQVF9TVEFUVVMxIFwKKwkoRFBfSU5U Ul9BVVhfSTJDX0RPTkV8IFwKKwlEUF9JTlRSX1dST05HX0FERFIgfCBEUF9JTlRSX1RJTUVPVVQg fCBcCisJRFBfSU5UUl9OQUNLX0RFRkVSIHwgRFBfSU5UUl9XUk9OR19EQVRBX0NOVCB8IFwKKwlE UF9JTlRSX0kyQ19OQUNLIHwgRFBfSU5UUl9JMkNfREVGRVIgfCBcCisJRFBfSU5UUl9QTExfVU5M T0NLRUQgfCBEUF9JTlRSX0FVWF9FUlJPUikKKworI2RlZmluZSBEUF9JTlRFUlJVUFRfU1RBVFVT MV9NQVNLCShEUF9JTlRFUlJVUFRfU1RBVFVTMSA8PCAyKQorCisjZGVmaW5lIERQX0lOVEVSUlVQ VF9TVEFUVVMyIFwKKwkoRFBfSU5UUl9SRUFEWV9GT1JfVklERU8gfCBEUF9JTlRSX0lETEVfUEFU VEVSTl9TRU5UIHwgXAorCURQX0lOVFJfRlJBTUVfRU5EIHwgRFBfSU5UUl9DUkNfVVBEQVRFRCkK KworI2RlZmluZSBEUF9JTlRFUlJVUFRfU1RBVFVTMl9NQVNLCShEUF9JTlRFUlJVUFRfU1RBVFVT MiA8PCAyKQorCitzdGF0aWMgdTggY29uc3Qgdm1fcHJlX2VtcGhhc2lzWzRdWzRdID0geworCXsw eDAwLCAweDBCLCAweDEyLCAweEZGfSwgICAgICAgLyogcGUwLCAwIGRiICovCisJezB4MDAsIDB4 MEEsIDB4MTIsIDB4RkZ9LCAgICAgICAvKiBwZTEsIDMuNSBkYiAqLworCXsweDAwLCAweDBDLCAw eEZGLCAweEZGfSwgICAgICAgLyogcGUyLCA2LjAgZGIgKi8KKwl7MHhGRiwgMHhGRiwgMHhGRiwg MHhGRn0gICAgICAgIC8qIHBlMywgOS41IGRiICovCit9OworCisvKiB2b2x0YWdlIHN3aW5nLCAw LjJ2IGFuZCAxLjB2IGFyZSBub3Qgc3VwcG9ydCAqLworc3RhdGljIHU4IGNvbnN0IHZtX3ZvbHRh Z2Vfc3dpbmdbNF1bNF0gPSB7CisJezB4MDcsIDB4MEYsIDB4MTQsIDB4RkZ9LCAvKiBzdzAsIDAu NHYgICovCisJezB4MTEsIDB4MUQsIDB4MUYsIDB4RkZ9LCAvKiBzdzEsIDAuNiB2ICovCisJezB4 MTgsIDB4MUYsIDB4RkYsIDB4RkZ9LCAvKiBzdzEsIDAuOCB2ICovCisJezB4RkYsIDB4RkYsIDB4 RkYsIDB4RkZ9ICAvKiBzdzEsIDEuMiB2LCBvcHRpb25hbCAqLworfTsKKworc3RydWN0IGRwX2Nh dGFsb2dfcHJpdmF0ZSB7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBkcF9pbyAqaW87 CisJc3RydWN0IGRwX2NhdGFsb2cgZHBfY2F0YWxvZzsKK307CisKK3N0YXRpYyBpbmxpbmUgdTMy IGRwX3JlYWRfYXV4KHN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2csIHUzMiBvZmZz ZXQpCit7CisJcmV0dXJuIHJlYWRsX3JlbGF4ZWQoY2F0YWxvZy0+aW8tPmRwX2F1eC5iYXNlICsg b2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRwX3dyaXRlX2F1eChzdHJ1Y3QgZHBf Y2F0YWxvZ19wcml2YXRlICpjYXRhbG9nLAorCQkJICAgICAgIHUzMiBvZmZzZXQsIHUzMiBkYXRh KQoreworCS8qCisJICogVG8gbWFrZSBzdXJlIGF1eCByZWcgd3JpdGVzIGhhcHBlbnMgYmVmb3Jl IGFueSBvdGhlciBvcGVyYXRpb24sCisJICogdGhpcyBmdW5jdGlvbiB1c2VzIHdyaXRlbCgpIGlu c3RyZWFkIG9mIHdyaXRlbF9yZWxheGVkKCkKKwkgKi8KKwl3cml0ZWwoZGF0YSwgY2F0YWxvZy0+ aW8tPmRwX2F1eC5iYXNlICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB1MzIgZHBfcmVh ZF9haGIoc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZywgdTMyIG9mZnNldCkKK3sK KwlyZXR1cm4gcmVhZGxfcmVsYXhlZChjYXRhbG9nLT5pby0+ZHBfYWhiLmJhc2UgKyBvZmZzZXQp OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZHBfd3JpdGVfYWhiKHN0cnVjdCBkcF9jYXRhbG9n X3ByaXZhdGUgKmNhdGFsb2csCisJCQkgICAgICAgdTMyIG9mZnNldCwgdTMyIGRhdGEpCit7CisJ LyoKKwkgKiBUbyBtYWtlIHN1cmUgcGh5IHJlZyB3cml0ZXMgaGFwcGVucyBiZWZvcmUgYW55IG90 aGVyIG9wZXJhdGlvbiwKKwkgKiB0aGlzIGZ1bmN0aW9uIHVzZXMgd3JpdGVsKCkgaW5zdHJlYWQg b2Ygd3JpdGVsX3JlbGF4ZWQoKQorCSAqLworCXdyaXRlbChkYXRhLCBjYXRhbG9nLT5pby0+ZHBf YWhiLmJhc2UgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBkcF9yZWFkX2NjKHN0 cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2csIHUzMiBvZmZzZXQpCit7CisJcmV0dXJu IHJlYWRsX3JlbGF4ZWQoY2F0YWxvZy0+aW8tPmRwX2NjX2lvLmJhc2UgKyBvZmZzZXQpOworfQor CitzdGF0aWMgaW5saW5lIHZvaWQgZHBfd3JpdGVfcGh5KHN0cnVjdCBkcF9jYXRhbG9nX3ByaXZh dGUgKmNhdGFsb2csCisJCQkgICAgICAgdTMyIG9mZnNldCwgdTMyIGRhdGEpCit7CisJLyoKKwkg KiBUbyBtYWtlIHN1cmUgcGh5IHJlZyB3cml0ZXMgaGFwcGVucyBiZWZvcmUgYW55IG90aGVyIG9w ZXJhdGlvbiwKKwkgKiB0aGlzIGZ1bmN0aW9uIHVzZXMgd3JpdGVsKCkgaW5zdHJlYWQgb2Ygd3Jp dGVsX3JlbGF4ZWQoKQorCSAqLworCXdyaXRlbChkYXRhLCBjYXRhbG9nLT5pby0+cGh5X2lvLmJh c2UgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZHBfd3JpdGVfcGxsKHN0cnVj dCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2csCisJCQkgICAgICAgdTMyIG9mZnNldCwgdTMy IGRhdGEpCit7CisJd3JpdGVsX3JlbGF4ZWQoZGF0YSwgY2F0YWxvZy0+aW8tPmRwX3BsbF9pby5i YXNlICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRwX3dyaXRlX2xuX3R4MChz dHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nLAorCQkJICAgICAgIHUzMiBvZmZzZXQs IHUzMiBkYXRhKQoreworCXdyaXRlbF9yZWxheGVkKGRhdGEsIGNhdGFsb2ctPmlvLT5sbl90eDBf aW8uYmFzZSArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkcF93cml0ZV9sbl90 eDEoc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZywKKwkJCSAgICAgICB1MzIgb2Zm c2V0LCB1MzIgZGF0YSkKK3sKKwl3cml0ZWxfcmVsYXhlZChkYXRhLCBjYXRhbG9nLT5pby0+bG5f dHgxX2lvLmJhc2UgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZHBfd3JpdGVf dXNiX2NtKHN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2csCisJCQkgICAgICAgdTMy IG9mZnNldCwgdTMyIGRhdGEpCit7CisJLyoKKwkgKiBUbyBtYWtlIHN1cmUgdXNiIHJlZyB3cml0 ZXMgaGFwcGVucyBiZWZvcmUgYW55IG90aGVyIG9wZXJhdGlvbiwKKwkgKiB0aGlzIGZ1bmN0aW9u IHVzZXMgd3JpdGVsKCkgaW5zdHJlYWQgb2Ygd3JpdGVsX3JlbGF4ZWQoKQorCSAqLworCXdyaXRl bChkYXRhLCBjYXRhbG9nLT5pby0+dXNiM19kcF9jb20uYmFzZSArIG9mZnNldCk7Cit9CisKK3N0 YXRpYyBpbmxpbmUgdm9pZCBkcF93cml0ZV9wMChzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpj YXRhbG9nLAorCQkJICAgICAgIHUzMiBvZmZzZXQsIHUzMiBkYXRhKQoreworCS8qCisJICogVG8g bWFrZSBzdXJlIGludGVyZmFjZSByZWcgd3JpdGVzIGhhcHBlbnMgYmVmb3JlIGFueSBvdGhlciBv cGVyYXRpb24sCisJICogdGhpcyBmdW5jdGlvbiB1c2VzIHdyaXRlbCgpIGluc3RyZWFkIG9mIHdy aXRlbF9yZWxheGVkKCkKKwkgKi8KKwl3cml0ZWwoZGF0YSwgY2F0YWxvZy0+aW8tPmRwX3AwLmJh c2UgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBkcF9yZWFkX2xpbmsoc3RydWN0 IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZywgdTMyIG9mZnNldCkKK3sKKwlyZXR1cm4gcmVh ZGxfcmVsYXhlZChjYXRhbG9nLT5pby0+ZHBfbGluay5iYXNlICsgb2Zmc2V0KTsKK30KKworc3Rh dGljIGlubGluZSB2b2lkIGRwX3dyaXRlX2xpbmsoc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAq Y2F0YWxvZywKKwkJCSAgICAgICB1MzIgb2Zmc2V0LCB1MzIgZGF0YSkKK3sKKwkvKgorCSAqIFRv IG1ha2Ugc3VyZSBsaW5rIHJlZyB3cml0ZXMgaGFwcGVucyBiZWZvcmUgYW55IG90aGVyIG9wZXJh dGlvbiwKKwkgKiB0aGlzIGZ1bmN0aW9uIHVzZXMgd3JpdGVsKCkgaW5zdHJlYWQgb2Ygd3JpdGVs X3JlbGF4ZWQoKQorCSAqLworCXdyaXRlbChkYXRhLCBjYXRhbG9nLT5pby0+ZHBfbGluay5iYXNl ICsgb2Zmc2V0KTsKK30KKworLyogYXV4IHJlbGF0ZWQgY2F0YWxvZyBmdW5jdGlvbnMgKi8KK3Uz MiBkcF9jYXRhbG9nX2F1eF9yZWFkX2RhdGEoc3RydWN0IGRwX2NhdGFsb2dfYXV4ICphdXgpCit7 CisJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKKworCWlmICghYXV4KSB7CisJ CURSTV9FUlJPUigiaW52YWxpZCBpbnB1dFxuIik7CisJCXJldHVybiAwOworCX0KKworCWRwX2Nh dGFsb2dfZ2V0X3ByaXYoYXV4KTsKKworCXJldHVybiBkcF9yZWFkX2F1eChjYXRhbG9nLCBSRUdf RFBfQVVYX0RBVEEpOworfQorCitpbnQgZHBfY2F0YWxvZ19hdXhfd3JpdGVfZGF0YShzdHJ1Y3Qg ZHBfY2F0YWxvZ19hdXggKmF1eCkKK3sKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBkcF9jYXRhbG9n X3ByaXZhdGUgKmNhdGFsb2c7CisKKwlpZiAoIWF1eCkgeworCQlEUk1fRVJST1IoImludmFsaWQg aW5wdXRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkcF9jYXRhbG9nX2dldF9wcml2 KGF1eCk7CisJZHBfd3JpdGVfYXV4KGNhdGFsb2csIFJFR19EUF9BVVhfREFUQSwgYXV4LT5kYXRh KTsKKwlyZXR1cm4gcmM7Cit9CisKK2ludCBkcF9jYXRhbG9nX2F1eF93cml0ZV90cmFucyhzdHJ1 Y3QgZHBfY2F0YWxvZ19hdXggKmF1eCkKK3sKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBkcF9jYXRh bG9nX3ByaXZhdGUgKmNhdGFsb2c7CisKKwlpZiAoIWF1eCkgeworCQlEUk1fRVJST1IoImludmFs aWQgaW5wdXRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkcF9jYXRhbG9nX2dldF9w cml2KGF1eCk7CisJZHBfd3JpdGVfYXV4KGNhdGFsb2csIFJFR19EUF9BVVhfVFJBTlNfQ1RSTCwg YXV4LT5kYXRhKTsKKwlyZXR1cm4gcmM7Cit9CisKK2ludCBkcF9jYXRhbG9nX2F1eF9jbGVhcl90 cmFucyhzdHJ1Y3QgZHBfY2F0YWxvZ19hdXggKmF1eCwgYm9vbCByZWFkKQoreworCWludCByYyA9 IDA7CisJdTMyIGRhdGEgPSAwOworCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7 CisKKwlpZiAoIWF1eCkgeworCQlEUk1fRVJST1IoImludmFsaWQgaW5wdXRcbiIpOworCQlyZXR1 cm4gLUVJTlZBTDsKKwl9CisKKwlkcF9jYXRhbG9nX2dldF9wcml2KGF1eCk7CisKKwlpZiAocmVh ZCkgeworCQlkYXRhID0gZHBfcmVhZF9hdXgoY2F0YWxvZywgUkVHX0RQX0FVWF9UUkFOU19DVFJM KTsKKwkJZGF0YSAmPSB+RFBfQVVYX1RSQU5TX0NUUkxfR087CisJCWRwX3dyaXRlX2F1eChjYXRh bG9nLCBSRUdfRFBfQVVYX1RSQU5TX0NUUkwsIGRhdGEpOworCX0gZWxzZSB7CisJCWRwX3dyaXRl X2F1eChjYXRhbG9nLCBSRUdfRFBfQVVYX1RSQU5TX0NUUkwsIDApOworCX0KKwlyZXR1cm4gcmM7 Cit9CisKK3ZvaWQgZHBfY2F0YWxvZ19hdXhfcmVzZXQoc3RydWN0IGRwX2NhdGFsb2dfYXV4ICph dXgpCit7CisJdTMyIGF1eF9jdHJsOworCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFs b2c7CisKKwlpZiAoIWF1eCkgeworCQlEUk1fRVJST1IoImludmFsaWQgaW5wdXRcbiIpOworCQly ZXR1cm47CisJfQorCisJZHBfY2F0YWxvZ19nZXRfcHJpdihhdXgpOworCisJYXV4X2N0cmwgPSBk cF9yZWFkX2F1eChjYXRhbG9nLCBSRUdfRFBfQVVYX0NUUkwpOworCisJYXV4X2N0cmwgfD0gRFBf QVVYX0NUUkxfUkVTRVQ7CisJZHBfd3JpdGVfYXV4KGNhdGFsb2csIFJFR19EUF9BVVhfQ1RSTCwg YXV4X2N0cmwpOworCXVzbGVlcF9yYW5nZSgxMDAwLCAxMTAwKTsgLyogaC93IHJlY29tbWVuZGVk IGRlbGF5ICovCisKKwlhdXhfY3RybCAmPSB+RFBfQVVYX0NUUkxfUkVTRVQ7CisJZHBfd3JpdGVf YXV4KGNhdGFsb2csIFJFR19EUF9BVVhfQ1RSTCwgYXV4X2N0cmwpOworfQorCit2b2lkIGRwX2Nh dGFsb2dfYXV4X2VuYWJsZShzdHJ1Y3QgZHBfY2F0YWxvZ19hdXggKmF1eCwgYm9vbCBlbmFibGUp Cit7CisJdTMyIGF1eF9jdHJsOworCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7 CisKKwlpZiAoIWF1eCkgeworCQlEUk1fRVJST1IoImludmFsaWQgaW5wdXRcbiIpOworCQlyZXR1 cm47CisJfQorCisJZHBfY2F0YWxvZ19nZXRfcHJpdihhdXgpOworCisJYXV4X2N0cmwgPSBkcF9y ZWFkX2F1eChjYXRhbG9nLCBSRUdfRFBfQVVYX0NUUkwpOworCisJaWYgKGVuYWJsZSkgeworCQlk cF93cml0ZV9hdXgoY2F0YWxvZywgUkVHX0RQX1RJTUVPVVRfQ09VTlQsIDB4ZmZmZik7CisJCWRw X3dyaXRlX2F1eChjYXRhbG9nLCBSRUdfRFBfQVVYX0xJTUlUUywgMHhmZmZmKTsKKwkJYXV4X2N0 cmwgfD0gRFBfQVVYX0NUUkxfRU5BQkxFOworCX0gZWxzZSB7CisJCWF1eF9jdHJsICY9IH5EUF9B VVhfQ1RSTF9FTkFCTEU7CisJfQorCisJZHBfd3JpdGVfYXV4KGNhdGFsb2csIFJFR19EUF9BVVhf Q1RSTCwgYXV4X2N0cmwpOworfQorCit2b2lkIGRwX2NhdGFsb2dfYXV4X3VwZGF0ZV9jZmcoc3Ry dWN0IGRwX2NhdGFsb2dfYXV4ICphdXgsCisJCXN0cnVjdCBkcF9hdXhfY2ZnICpjZmcsIGVudW0g ZHBfcGh5X2F1eF9jb25maWdfdHlwZSB0eXBlKQoreworCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZh dGUgKmNhdGFsb2c7CisJdTMyIG5ld19pbmRleCA9IDAsIGN1cnJlbnRfaW5kZXggPSAwOworCisJ aWYgKCFhdXggfHwgIWNmZyB8fCAodHlwZSA+PSBQSFlfQVVYX0NGR19NQVgpKSB7CisJCURSTV9F UlJPUigiaW52YWxpZCBpbnB1dFxuIik7CisJCXJldHVybjsKKwl9CisKKwlkcF9jYXRhbG9nX2dl dF9wcml2KGF1eCk7CisKKwljdXJyZW50X2luZGV4ID0gY2ZnW3R5cGVdLmN1cnJlbnRfaW5kZXg7 CisJbmV3X2luZGV4ID0gKGN1cnJlbnRfaW5kZXggKyAxKSAlIGNmZ1t0eXBlXS5jZmdfY250Owor CURSTV9ERUJVR19EUCgiVXBkYXRpbmcgJXMgZnJvbSAweCUwOHggdG8gMHglMDh4XG4iLAorCQlk cF9waHlfYXV4X2NvbmZpZ190eXBlX3RvX3N0cmluZyh0eXBlKSwKKwljZmdbdHlwZV0ubHV0W2N1 cnJlbnRfaW5kZXhdLCBjZmdbdHlwZV0ubHV0W25ld19pbmRleF0pOworCisJZHBfd3JpdGVfcGh5 KGNhdGFsb2csIGNmZ1t0eXBlXS5vZmZzZXQsCisJCQljZmdbdHlwZV0ubHV0W25ld19pbmRleF0p OworCWNmZ1t0eXBlXS5jdXJyZW50X2luZGV4ID0gbmV3X2luZGV4OworfQorCit2b2lkIGRwX2Nh dGFsb2dfYXV4X3NldHVwKHN0cnVjdCBkcF9jYXRhbG9nX2F1eCAqYXV4LAorCQlzdHJ1Y3QgZHBf YXV4X2NmZyAqY2ZnKQoreworCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7CisJ aW50IGkgPSAwOworCisJaWYgKCFhdXggfHwgIWNmZykgeworCQlEUk1fRVJST1IoImludmFsaWQg aW5wdXRcbiIpOworCQlyZXR1cm47CisJfQorCisJZHBfY2F0YWxvZ19nZXRfcHJpdihhdXgpOwor CisJZHBfd3JpdGVfcGh5KGNhdGFsb2csIFJFR19EUF9QSFlfUERfQ1RMLCBEUF9QSFlfUERfQ1RM X1BXUkROIHwKKwkJRFBfUEhZX1BEX0NUTF9BVVhfUFdSRE4gfCBEUF9QSFlfUERfQ1RMX1BMTF9Q V1JETiB8CisJCURQX1BIWV9QRF9DVExfRFBfQ0xBTVBfRU4pOworCisJLyogVHVybiBvbiBCSUFT IGN1cnJlbnQgZm9yIFBIWS9QTEwgKi8KKwlkcF93cml0ZV9wbGwoY2F0YWxvZywKKwkJUVNFUkRF U19DT01fQklBU19FTl9DTEtCVUZMUl9FTiwgUVNFUkRFU19DT01fQklBU19FTiB8CisJCVFTRVJE RVNfQ09NX0JJQVNfRU5fTVVYIHwgUVNFUkRFU19DT01fQ0xLQlVGX0xfRU4gfAorCQlRU0VSREVT X0NPTV9FTl9TWVNDTEtfVFhfU0VMKTsKKworCS8qIERQIEFVWCBDRkcgcmVnaXN0ZXIgcHJvZ3Jh bW1pbmcgKi8KKwlmb3IgKGkgPSAwOyBpIDwgUEhZX0FVWF9DRkdfTUFYOyBpKyspIHsKKwkJRFJN X0RFQlVHX0RQKCIlczogb2Zmc2V0PTB4JTA4eCwgdmFsdWU9MHglMDh4XG4iLAorCQkJZHBfcGh5 X2F1eF9jb25maWdfdHlwZV90b19zdHJpbmcoaSksCisJCQljZmdbaV0ub2Zmc2V0LCBjZmdbaV0u bHV0W2NmZ1tpXS5jdXJyZW50X2luZGV4XSk7CisJCWRwX3dyaXRlX3BoeShjYXRhbG9nLCBjZmdb aV0ub2Zmc2V0LAorCQkJY2ZnW2ldLmx1dFtjZmdbaV0uY3VycmVudF9pbmRleF0pOworCX0KKwor CWRwX3dyaXRlX3BoeShjYXRhbG9nLCBSRUdfRFBfUEhZX0FVWF9JTlRFUlJVUFRfTUFTSywgUEhZ X0FVWF9TVE9QX0VSUl9NQVNLIHwKKwkJCVBIWV9BVVhfREVDX0VSUl9NQVNLIHwgUEhZX0FVWF9T WU5DX0VSUl9NQVNLIHwKKwkJCVBIWV9BVVhfQUxJR05fRVJSX01BU0sgfCBQSFlfQVVYX1JFUV9F UlJfTUFTSyk7Cit9CisKK3ZvaWQgZHBfY2F0YWxvZ19hdXhfZ2V0X2lycShzdHJ1Y3QgZHBfY2F0 YWxvZ19hdXggKmF1eCwgYm9vbCBjbWRfYnVzeSkKK3sKKwl1MzIgYWNrOworCXN0cnVjdCBkcF9j YXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7CisKKwlpZiAoIWF1eCkgeworCQlEUk1fRVJST1IoImlu dmFsaWQgaW5wdXRcbiIpOworCQlyZXR1cm47CisJfQorCisJZHBfY2F0YWxvZ19nZXRfcHJpdihh dXgpOworCisJYXV4LT5pc3IgPSBkcF9yZWFkX2FoYihjYXRhbG9nLCBSRUdfRFBfSU5UUl9TVEFU VVMpOworCWF1eC0+aXNyICY9IH5EUF9JTlRFUlJVUFRfU1RBVFVTMV9NQVNLOworCWFjayA9IGF1 eC0+aXNyICYgRFBfSU5URVJSVVBUX1NUQVRVUzE7CisJYWNrIDw8PSAxOworCWFjayB8PSBEUF9J TlRFUlJVUFRfU1RBVFVTMV9NQVNLOworCWRwX3dyaXRlX2FoYihjYXRhbG9nLCBSRUdfRFBfSU5U Ul9TVEFUVVMsIGFjayk7Cit9CisKKy8qIGNvbnRyb2xsZXIgcmVsYXRlZCBjYXRhbG9nIGZ1bmN0 aW9ucyAqLwordm9pZCBkcF9jYXRhbG9nX2N0cmxfdXBkYXRlX3RyYW5zZmVyX3VuaXQoc3RydWN0 IGRwX2NhdGFsb2dfY3RybCAqY3RybCkKK3sKKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpj YXRhbG9nOworCisJaWYgKCFjdHJsKSB7CisJCURSTV9FUlJPUigiaW52YWxpZCBpbnB1dFxuIik7 CisJCXJldHVybjsKKwl9CisKKwlkcF9jYXRhbG9nX2dldF9wcml2KGN0cmwpOworCisJZHBfd3Jp dGVfbGluayhjYXRhbG9nLCBSRUdfRFBfVkFMSURfQk9VTkRBUlksIGN0cmwtPnZhbGlkX2JvdW5k YXJ5KTsKKwlkcF93cml0ZV9saW5rKGNhdGFsb2csIFJFR19EUF9UVSwgY3RybC0+ZHBfdHUpOwor CWRwX3dyaXRlX2xpbmsoY2F0YWxvZywgUkVHX0RQX1ZBTElEX0JPVU5EQVJZXzIsIGN0cmwtPnZh bGlkX2JvdW5kYXJ5Mik7Cit9CisKK3ZvaWQgZHBfY2F0YWxvZ19jdHJsX3N0YXRlX2N0cmwoc3Ry dWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCwgdTMyIHN0YXRlKQoreworCXN0cnVjdCBkcF9jYXRh bG9nX3ByaXZhdGUgKmNhdGFsb2c7CisKKwlpZiAoIWN0cmwpIHsKKwkJRFJNX0VSUk9SKCJpbnZh bGlkIGlucHV0XG4iKTsKKwkJcmV0dXJuOworCX0KKworCWRwX2NhdGFsb2dfZ2V0X3ByaXYoY3Ry bCk7CisKKwlkcF93cml0ZV9saW5rKGNhdGFsb2csIFJFR19EUF9TVEFURV9DVFJMLCBzdGF0ZSk7 Cit9CisKK3ZvaWQgZHBfY2F0YWxvZ19jdHJsX2NvbmZpZ19jdHJsKHN0cnVjdCBkcF9jYXRhbG9n X2N0cmwgKmN0cmwsIHUzMiBjZmcpCit7CisJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0 YWxvZzsKKworCWlmICghY3RybCkgeworCQlEUk1fRVJST1IoImludmFsaWQgaW5wdXRcbiIpOwor CQlyZXR1cm47CisJfQorCisJZHBfY2F0YWxvZ19nZXRfcHJpdihjdHJsKTsKKworCURSTV9ERUJV R19EUCgiRFBfQ09ORklHVVJBVElPTl9DVFJMPTB4JXhcbiIsIGNmZyk7CisKKwlkcF93cml0ZV9s aW5rKGNhdGFsb2csIFJFR19EUF9DT05GSUdVUkFUSU9OX0NUUkwsIGNmZyk7Cit9CisKK3ZvaWQg ZHBfY2F0YWxvZ19jdHJsX2xhbmVfbWFwcGluZyhzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJs KQoreworCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7CisJdTMyIGxuXzAgPSAw LCBsbl8xID0gMSwgbG5fMiA9IDIsIGxuXzMgPSAzOyAvKiBPbmUtdG8tT25lIG1hcHBpbmcgKi8K Kwl1MzIgbG5fbWFwcGluZzsKKworCWlmICghY3RybCkgeworCQlEUk1fRVJST1IoImludmFsaWQg aW5wdXRcbiIpOworCQlyZXR1cm47CisJfQorCisJZHBfY2F0YWxvZ19nZXRfcHJpdihjdHJsKTsK KworCWxuX21hcHBpbmcgPSBsbl8wIDw8IExBTkUwX01BUFBJTkdfU0hJRlQ7CisJbG5fbWFwcGlu ZyB8PSBsbl8xIDw8IExBTkUxX01BUFBJTkdfU0hJRlQ7CisJbG5fbWFwcGluZyB8PSBsbl8yIDw8 IExBTkUyX01BUFBJTkdfU0hJRlQ7CisJbG5fbWFwcGluZyB8PSBsbl8zIDw8IExBTkUzX01BUFBJ TkdfU0hJRlQ7CisKKwlkcF93cml0ZV9saW5rKGNhdGFsb2csIFJFR19EUF9MT0dJQ0FMMlBIWVNJ Q0FMX0xBTkVfTUFQUElORywgbG5fbWFwcGluZyk7Cit9CisKK3ZvaWQgZHBfY2F0YWxvZ19jdHJs X21haW5saW5rX2N0cmwoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCwKKwkJCQkJCWJvb2wg ZW5hYmxlKQoreworCXUzMiBtYWlubGlua19jdHJsOworCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZh dGUgKmNhdGFsb2c7CisKKwlpZiAoIWN0cmwpIHsKKwkJRFJNX0VSUk9SKCJpbnZhbGlkIGlucHV0 XG4iKTsKKwkJcmV0dXJuOworCX0KKworCWRwX2NhdGFsb2dfZ2V0X3ByaXYoY3RybCk7CisKKwlp ZiAoZW5hYmxlKSB7CisJCS8qCisJCSogVG8gbWFrZSBzdXJlIGxpbmsgcmVnIHdyaXRlcyBoYXBw ZW5zIGJlZm9yZSBhbnkgb3RoZXIgb3BlcmF0aW9uLAorCQkqIGRwX3dyaXRlX2xpbmsoKSBmdW5j dGlvbiB1c2VzIHdyaXRlbCgpIGluc3RyZWFkIG9mIHdyaXRlbF9yZWxheGVkKCkKKwkJKi8KKwkJ ZHBfd3JpdGVfbGluayhjYXRhbG9nLCBSRUdfRFBfTUFJTkxJTktfQ1RSTCwgRFBfTUFJTkxJTktf RkJfQk9VTkRBUllfU0VMKTsKKwkJZHBfd3JpdGVfbGluayhjYXRhbG9nLCBSRUdfRFBfTUFJTkxJ TktfQ1RSTCwKKwkJCQkJRFBfTUFJTkxJTktfRkJfQk9VTkRBUllfU0VMIHwgRFBfTUFJTkxJTktf Q1RSTF9SRVNFVCk7CisJCWRwX3dyaXRlX2xpbmsoY2F0YWxvZywgUkVHX0RQX01BSU5MSU5LX0NU UkwsIERQX01BSU5MSU5LX0ZCX0JPVU5EQVJZX1NFTCk7CisJCWRwX3dyaXRlX2xpbmsoY2F0YWxv ZywgUkVHX0RQX01BSU5MSU5LX0NUUkwsCisJCQkJCURQX01BSU5MSU5LX0ZCX0JPVU5EQVJZX1NF TCB8IERQX01BSU5MSU5LX0NUUkxfRU5BQkxFKTsKKwl9IGVsc2UgeworCQltYWlubGlua19jdHJs ID0gZHBfcmVhZF9saW5rKGNhdGFsb2csIFJFR19EUF9NQUlOTElOS19DVFJMKTsKKwkJbWFpbmxp bmtfY3RybCAmPSB+RFBfTUFJTkxJTktfQ1RSTF9FTkFCTEU7CisJCWRwX3dyaXRlX2xpbmsoY2F0 YWxvZywgUkVHX0RQX01BSU5MSU5LX0NUUkwsIG1haW5saW5rX2N0cmwpOworCX0KK30KKwordm9p ZCBkcF9jYXRhbG9nX2N0cmxfY29uZmlnX21pc2Moc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3Ry bCwKKwkJCQkJdTMyIGNvbG9yaW1ldHJ5X2NmZywgdTMyIHRlc3RfYml0c19kZXB0aCkKK3sKKwl1 MzIgbWlzY192YWw7CisJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKKworCWlm ICghY3RybCkgeworCQlEUk1fRVJST1IoImludmFsaWQgaW5wdXRcbiIpOworCQlyZXR1cm47CisJ fQorCisJZHBfY2F0YWxvZ19nZXRfcHJpdihjdHJsKTsKKworCW1pc2NfdmFsID0gZHBfcmVhZF9s aW5rKGNhdGFsb2csIFJFR19EUF9NSVNDMV9NSVNDMCk7CisJbWlzY192YWwgfD0gY29sb3JpbWV0 cnlfY2ZnIDw8IERQX01JU0MwX0NPTE9SSU1FVFJZX0NGR19TSElGVDsKKwltaXNjX3ZhbCB8PSB0 ZXN0X2JpdHNfZGVwdGggPDwgRFBfTUlTQzBfVEVTVF9CSVRTX0RFUFRIX1NISUZUOworCS8qIENv bmZpZ3VyZSBjbG9jayB0byBzeW5jaHJvbm91cyBtb2RlICovCisJbWlzY192YWwgfD0gRFBfTUlT QzBfU1lOQ0hST05PVVNfQ0xLOworCisJRFJNX0RFQlVHX0RQKCJtaXNjIHNldHRpbmdzID0gMHgl eFxuIiwgbWlzY192YWwpOworCWRwX3dyaXRlX2xpbmsoY2F0YWxvZywgUkVHX0RQX01JU0MxX01J U0MwLCBtaXNjX3ZhbCk7Cit9CisKK3ZvaWQgZHBfY2F0YWxvZ19jdHJsX2NvbmZpZ19tc2Eoc3Ry dWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCwKKwkJCQkJdTMyIHJhdGUsIHUzMiBzdHJlYW1fcmF0 ZV9raHosCisJCQkJCWJvb2wgZml4ZWRfbnZpZCkKK3sKKwl1MzIgcGl4ZWxfbSwgcGl4ZWxfbjsK Kwl1MzIgbXZpZCwgbnZpZDsKKwl1NjQgbXZpZF9jYWxjOworCXUzMiBjb25zdCBudmlkX2ZpeGVk ID0gMHg4MDAwOworCXUzMiBjb25zdCBsaW5rX3JhdGVfaGJyMiA9IDU0MDAwMDsKKwl1MzIgY29u c3QgbGlua19yYXRlX2hicjMgPSA4MTAwMDA7CisJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAq Y2F0YWxvZzsKKworCWlmICghY3RybCkgeworCQlEUk1fRVJST1IoImludmFsaWQgaW5wdXRcbiIp OworCQlyZXR1cm47CisJfQorCisJZHBfY2F0YWxvZ19nZXRfcHJpdihjdHJsKTsKKwlpZiAoZml4 ZWRfbnZpZCkgeworCQlEUk1fREVCVUdfRFAoInVzZSBmaXhlZCBOVklEPTB4JXhcbiIsIG52aWRf Zml4ZWQpOworCQludmlkID0gbnZpZF9maXhlZDsKKworCQlEUk1fREVCVUdfRFAoImxpbmsgcmF0 ZT0lZGticHMsIHN0cmVhbV9yYXRlX2toej0ldUtoeiIsCisJCQlyYXRlLCBzdHJlYW1fcmF0ZV9r aHopOworCisJCS8qCisJCSAqIEZvciBpbnRlcm1lZGlhdGUgcmVzdWx0cywgdXNlIDY0IGJpdCBh cml0aG1ldGljIHRvIGF2b2lkCisJCSAqIGxvc3Mgb2YgcHJlY2lzaW9uLgorCQkgKi8KKwkJbXZp ZF9jYWxjID0gKHU2NCkgc3RyZWFtX3JhdGVfa2h6ICogbnZpZDsKKwkJbXZpZF9jYWxjID0gZGl2 X3U2NChtdmlkX2NhbGMsIHJhdGUpOworCisJCS8qCisJCSAqIHRydW5jYXRlIGJhY2sgdG8gMzIg Yml0cyBhcyB0aGlzIGZpbmFsIGRpdmlkZWQgdmFsdWUgd2lsbAorCQkgKiBhbHdheXMgYmUgd2l0 aGluIHRoZSByYW5nZSBvZiBhIDMyIGJpdCB1bnNpZ25lZCBpbnQuCisJCSAqLworCQltdmlkID0g KHUzMikgbXZpZF9jYWxjOworCX0gZWxzZSB7CisJCXBpeGVsX20gPSBkcF9yZWFkX2NjKGNhdGFs b2csIE1NU1NfRFBfUElYRUxfTSk7CisJCXBpeGVsX24gPSBkcF9yZWFkX2NjKGNhdGFsb2csIE1N U1NfRFBfUElYRUxfTik7CisJCURSTV9ERUJVR19EUCgicGl4ZWxfbT0weCV4LCBwaXhlbF9uPTB4 JXhcbiIsIHBpeGVsX20sIHBpeGVsX24pOworCisJCW12aWQgPSAocGl4ZWxfbSAmIDB4RkZGRikg KiA1OworCQludmlkID0gKDB4RkZGRiAmICh+cGl4ZWxfbikpICsgKHBpeGVsX20gJiAweEZGRkYp OworCisJCURSTV9ERUJVR19EUCgicmF0ZSA9ICVkXG4iLCByYXRlKTsKKworCQlpZiAobGlua19y YXRlX2hicjIgPT0gcmF0ZSkKKwkJCW52aWQgKj0gMjsKKworCQlpZiAobGlua19yYXRlX2hicjMg PT0gcmF0ZSkKKwkJCW52aWQgKj0gMzsKKwl9CisKKwlEUk1fREVCVUdfRFAoIm12aWQ9MHgleCwg bnZpZD0weCV4XG4iLCBtdmlkLCBudmlkKTsKKwlkcF93cml0ZV9saW5rKGNhdGFsb2csIFJFR19E UF9TT0ZUV0FSRV9NVklELCBtdmlkKTsKKwlkcF93cml0ZV9saW5rKGNhdGFsb2csIFJFR19EUF9T T0ZUV0FSRV9OVklELCBudmlkKTsKK30KKworaW50IGRwX2NhdGFsb2dfY3RybF9zZXRfcGF0dGVy bihzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsLAorCQkJCQl1MzIgcGF0dGVybikKK3sKKwlp bnQgYml0LCByZXQ7CisJdTMyIGRhdGE7CisJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0 YWxvZzsKKworCWlmICghY3RybCkgeworCQlEUk1fRVJST1IoImludmFsaWQgaW5wdXRcbiIpOwor CQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkcF9jYXRhbG9nX2dldF9wcml2KGN0cmwpOworCisJ Yml0ID0gQklUKHBhdHRlcm4gLSAxKTsKKwlEUk1fREVCVUdfRFAoImh3OiBiaXQ9JWQgdHJhaW49 JWRcbiIsIGJpdCwgcGF0dGVybik7CisJZHBfd3JpdGVfbGluayhjYXRhbG9nLCBSRUdfRFBfU1RB VEVfQ1RSTCwgYml0KTsKKworCWJpdCA9IEJJVChwYXR0ZXJuIC0gMSkgPDwgRFBfTUFJTkxJTktf UkVBRFlfTElOS19UUkFJTklOR19TSElGVDsKKworCS8qIFBvbGwgZm9yIG1haW5saW5rIHJlYWR5 IHN0YXR1cyAqLworCXJldCA9IHJlYWR4X3BvbGxfdGltZW91dChyZWFkbCwgY2F0YWxvZy0+aW8t PmRwX2xpbmsuYmFzZSArIFJFR19EUF9NQUlOTElOS19SRUFEWSwKKwkJCQkgZGF0YSwgZGF0YSAm IGJpdCwKKwkJCQkgUE9MTElOR19TTEVFUF9VUywgUE9MTElOR19USU1FT1VUX1VTKTsKKwlpZiAo cmV0IDwgMCkgeworCQlEUk1fRVJST1IoInNldCBwYXR0ZXJuIGZvciBsaW5rX3RyYWluPSVkIGZh aWxlZFxuIiwgcGF0dGVybik7CisJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworfQorCit2 b2lkIGRwX2NhdGFsb2dfY3RybF91c2JfcmVzZXQoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3Ry bCwgYm9vbCBmbGlwKQoreworCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7CisK KwlpZiAoIWN0cmwpIHsKKwkJRFJNX0VSUk9SKCJpbnZhbGlkIGlucHV0XG4iKTsKKwkJcmV0dXJu OworCX0KKworCWRwX2NhdGFsb2dfZ2V0X3ByaXYoY3RybCk7CisKKwlkcF93cml0ZV91c2JfY20o Y2F0YWxvZywgUkVHX1VTQjNfRFBfQ09NX1JFU0VUX09WUkRfQ1RSTCwKKwkJCVVTQjNfRFBfQ09N X09WUkRfQ1RSTF9TV19EUFBIWV9SRVNFVF9NVVggfAorCQkJVVNCM19EUF9DT01fT1ZSRF9DVFJM X1NXX1VTQjNQSFlfUkVTRVRfTVVYKTsKKwlkcF93cml0ZV91c2JfY20oY2F0YWxvZywgUkVHX1VT QjNfRFBfQ09NX1BIWV9NT0RFX0NUUkwsCisJCQkJCQlVU0IzX0RQX0NPTV9QSFlfTU9ERV9EUCk7 CisJZHBfd3JpdGVfdXNiX2NtKGNhdGFsb2csIFJFR19VU0IzX0RQX0NPTV9TV19SRVNFVCwKKwkJ CQkJCVVTQjNfRFBfQ09NX1NXX1JFU0VUX1NFVCk7CisKKwlpZiAoIWZsaXApIC8qIENDMSAqLwor CQlkcF93cml0ZV91c2JfY20oY2F0YWxvZywgUkVHX1VTQjNfRFBfQ09NX1RZUEVDX0NUUkwsCisJ CQkJCVVTQjNfRFBfQ09NX1RZUEVDX0NUUkxfUE9SVFNFTF9NVVgpOworCWVsc2UgLyogQ0MyICov CisJCWRwX3dyaXRlX3VzYl9jbShjYXRhbG9nLCBSRUdfVVNCM19EUF9DT01fVFlQRUNfQ1RSTCwK KwkJCQkJVVNCM19EUF9DT01fVFlQRUNfQ1RSTF9QT1JUU0VMX01VWCB8CisJCQkJCVVTQjNfRFBf Q09NX1RZUEVDX0NUUkxfUE9SVFNFTCk7CisKKwlkcF93cml0ZV91c2JfY20oY2F0YWxvZywgUkVH X1VTQjNfRFBfQ09NX1NXSV9DVFJMLCAweDAwKTsKKwlkcF93cml0ZV91c2JfY20oY2F0YWxvZywg UkVHX1VTQjNfRFBfQ09NX1NXX1JFU0VULCAweDAwKTsKKworCWRwX3dyaXRlX3VzYl9jbShjYXRh bG9nLCBSRUdfVVNCM19EUF9DT01fUE9XRVJfRE9XTl9DVFJMLAorCQkJCQkJVVNCM19EUF9DT01f UE9XRVJfRE9XTl9DVFJMX1NXX1BXUkROKTsKKwlkcF93cml0ZV91c2JfY20oY2F0YWxvZywgUkVH X1VTQjNfRFBfQ09NX1JFU0VUX09WUkRfQ1RSTCwgMHgwMCk7CisKK30KKwordm9pZCBkcF9jYXRh bG9nX2N0cmxfcmVzZXQoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCkKK3sKKwl1MzIgc3df cmVzZXQ7CisJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKKwl2b2lkIF9faW9t ZW0gKmJhc2U7CisKKwlpZiAoIWN0cmwpIHsKKwkJRFJNX0VSUk9SKCJpbnZhbGlkIGlucHV0XG4i KTsKKwkJcmV0dXJuOworCX0KKworCWRwX2NhdGFsb2dfZ2V0X3ByaXYoY3RybCk7CisJYmFzZSA9 IGNhdGFsb2ctPmlvLT5kcF9haGIuYmFzZTsKKworCXN3X3Jlc2V0ID0gZHBfcmVhZF9haGIoY2F0 YWxvZywgUkVHX0RQX1NXX1JFU0VUKTsKKworCXN3X3Jlc2V0IHw9IERQX1NXX1JFU0VUOworCWRw X3dyaXRlX2FoYihjYXRhbG9nLCBSRUdfRFBfU1dfUkVTRVQsIHN3X3Jlc2V0KTsKKwl1c2xlZXBf cmFuZ2UoMTAwMCwgMTEwMCk7IC8qIGgvdyByZWNvbW1lbmRlZCBkZWxheSAqLworCisJc3dfcmVz ZXQgJj0gfkRQX1NXX1JFU0VUOworCWRwX3dyaXRlX2FoYihjYXRhbG9nLCBSRUdfRFBfU1dfUkVT RVQsIHN3X3Jlc2V0KTsKK30KKworYm9vbCBkcF9jYXRhbG9nX2N0cmxfbWFpbmxpbmtfcmVhZHko c3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCkKK3sKKwl1MzIgZGF0YTsKKwlpbnQgcmV0Owor CXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7CisKKwlpZiAoIWN0cmwpIHsKKwkJ RFJNX0VSUk9SKCJpbnZhbGlkIGlucHV0XG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWRw X2NhdGFsb2dfZ2V0X3ByaXYoY3RybCk7CisKKwkvKiBQb2xsIGZvciBtYWlubGluayByZWFkeSBz dGF0dXMgKi8KKwlyZXQgPSByZWFkeF9wb2xsX3RpbWVvdXQocmVhZGwsCisJCQkJIGNhdGFsb2ct PmlvLT5kcF9saW5rLmJhc2UgKyBSRUdfRFBfTUFJTkxJTktfUkVBRFksCisJCQkJIGRhdGEsIGRh dGEgJiBEUF9NQUlOTElOS19SRUFEWV9GT1JfVklERU8sCisJCQkJIFBPTExJTkdfU0xFRVBfVVMs IFBPTExJTkdfVElNRU9VVF9VUyk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0VSUk9SKCJtYWlu bGluayBub3QgcmVhZHlcbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7 Cit9CisKK3ZvaWQgZHBfY2F0YWxvZ19jdHJsX2VuYWJsZV9pcnEoc3RydWN0IGRwX2NhdGFsb2df Y3RybCAqY3RybCwKKwkJCQkJCWJvb2wgZW5hYmxlKQoreworCXN0cnVjdCBkcF9jYXRhbG9nX3By aXZhdGUgKmNhdGFsb2c7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCisJaWYgKCFjdHJsKSB7CisJ CURSTV9FUlJPUigiaW52YWxpZCBpbnB1dFxuIik7CisJCXJldHVybjsKKwl9CisKKwlkcF9jYXRh bG9nX2dldF9wcml2KGN0cmwpOworCWJhc2UgPSBjYXRhbG9nLT5pby0+ZHBfYWhiLmJhc2U7CisK KwlpZiAoZW5hYmxlKSB7CisJCWRwX3dyaXRlX2FoYihjYXRhbG9nLCBSRUdfRFBfSU5UUl9TVEFU VVMsIERQX0lOVEVSUlVQVF9TVEFUVVMxX01BU0spOworCQlkcF93cml0ZV9haGIoY2F0YWxvZywg UkVHX0RQX0lOVFJfU1RBVFVTMiwgRFBfSU5URVJSVVBUX1NUQVRVUzJfTUFTSyk7CisJfSBlbHNl IHsKKwkJZHBfd3JpdGVfYWhiKGNhdGFsb2csIFJFR19EUF9JTlRSX1NUQVRVUywgMHgwMCk7CisJ CWRwX3dyaXRlX2FoYihjYXRhbG9nLCBSRUdfRFBfSU5UUl9TVEFUVVMyLCAweDAwKTsKKwl9Cit9 CisKK3ZvaWQgZHBfY2F0YWxvZ19jdHJsX2hwZF9jb25maWcoc3RydWN0IGRwX2NhdGFsb2dfY3Ry bCAqY3RybCwgYm9vbCBlbikKK3sKKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9n OworCisJaWYgKCFjdHJsKSB7CisJCURSTV9FUlJPUigiaW52YWxpZCBpbnB1dFxuIik7CisJCXJl dHVybjsKKwl9CisKKwlkcF9jYXRhbG9nX2dldF9wcml2KGN0cmwpOworCisJaWYgKGVuKSB7CisJ CXUzMiByZWZ0aW1lciA9IGRwX3JlYWRfYXV4KGNhdGFsb2csIFJFR19EUF9EUF9IUERfUkVGVElN RVIpOworCisJCWRwX3dyaXRlX2F1eChjYXRhbG9nLCBSRUdfRFBfRFBfSFBEX0lOVF9BQ0ssCisJ CQkJRFBfRFBfSFBEX1BMVUdfSU5UX0FDSyB8IERQX0RQX0lSUV9IUERfSU5UX0FDSyB8CisJCQkJ RFBfRFBfSFBEX1JFUExVR19JTlRfQUNLIHwgRFBfRFBfSFBEX1VOUExVR19JTlRfQUNLKTsKKwkJ ZHBfd3JpdGVfYXV4KGNhdGFsb2csIFJFR19EUF9EUF9IUERfSU5UX01BU0ssCisJCQkJRFBfRFBf SFBEX1BMVUdfSU5UX01BU0sgfCBEUF9EUF9JUlFfSFBEX0lOVF9NQVNLIHwKKwkJCQlEUF9EUF9I UERfUkVQTFVHX0lOVF9NQVNLIHwgRFBfRFBfSFBEX1VOUExVR19JTlRfTUFTSyk7CisKKwkJLyog Q29uZmlndXJlIFJFRlRJTUVSICovCisJCXJlZnRpbWVyIHw9IFJFRlRJTUVSX0RFRkFVTFRfVkFM VUU7CisJCWRwX3dyaXRlX2F1eChjYXRhbG9nLCBSRUdfRFBfRFBfSFBEX1JFRlRJTUVSLCByZWZ0 aW1lcik7CisJCS8qIEVuYWJsZSBIUEQgKi8KKwkJZHBfd3JpdGVfYXV4KGNhdGFsb2csIFJFR19E UF9EUF9IUERfQ1RSTCwgRFBfRFBfSFBEX0NUUkxfSFBEX0VOKTsKKwl9IGVsc2UgeworCQkvKiBE aXNhYmxlIEhQRCAqLworCQlkcF93cml0ZV9hdXgoY2F0YWxvZywgUkVHX0RQX0RQX0hQRF9DVFJM LCAweDApOworCX0KK30KKwordm9pZCBkcF9jYXRhbG9nX2N0cmxfZ2V0X2ludGVycnVwdChzdHJ1 Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsKQoreworCXUzMiBhY2sgPSAwOworCXN0cnVjdCBkcF9j YXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7CisKKwlpZiAoIWN0cmwpIHsKKwkJRFJNX0VSUk9SKCJp bnZhbGlkIGlucHV0XG4iKTsKKwkJcmV0dXJuOworCX0KKworCWRwX2NhdGFsb2dfZ2V0X3ByaXYo Y3RybCk7CisKKwljdHJsLT5pc3IgPSBkcF9yZWFkX2FoYihjYXRhbG9nLCBSRUdfRFBfSU5UUl9T VEFUVVMyKTsKKwljdHJsLT5pc3IgJj0gfkRQX0lOVEVSUlVQVF9TVEFUVVMyX01BU0s7CisJYWNr ID0gY3RybC0+aXNyICYgRFBfSU5URVJSVVBUX1NUQVRVUzI7CisJYWNrIDw8PSAxOworCWFjayB8 PSBEUF9JTlRFUlJVUFRfU1RBVFVTMl9NQVNLOworCWRwX3dyaXRlX2FoYihjYXRhbG9nLCBSRUdf RFBfSU5UUl9TVEFUVVMyLCBhY2spOworfQorCit2b2lkIGRwX2NhdGFsb2dfY3RybF9waHlfcmVz ZXQoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCkKK3sKKwlzdHJ1Y3QgZHBfY2F0YWxvZ19w cml2YXRlICpjYXRhbG9nOworCisJaWYgKCFjdHJsKSB7CisJCURSTV9FUlJPUigiaW52YWxpZCBp bnB1dFxuIik7CisJCXJldHVybjsKKwl9CisKKwlkcF9jYXRhbG9nX2dldF9wcml2KGN0cmwpOwor CisJZHBfd3JpdGVfYWhiKGNhdGFsb2csIFJFR19EUF9QSFlfQ1RSTCwKKwkJCURQX1BIWV9DVFJM X1NXX1JFU0VUX1BMTCB8IERQX1BIWV9DVFJMX1NXX1JFU0VUKTsKKwl1c2xlZXBfcmFuZ2UoMTAw MCwgMTEwMCk7IC8qIGgvdyByZWNvbW1lbmRlZCBkZWxheSAqLworCWRwX3dyaXRlX2FoYihjYXRh bG9nLCBSRUdfRFBfUEhZX0NUUkwsIDB4MCk7Cit9CisKK3ZvaWQgZHBfY2F0YWxvZ19jdHJsX3Bo eV9sYW5lX2NmZyhzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsLAorCQlib29sIGZsaXBwZWQs IHU4IGxuX2NudCkKK3sKKwl1MzIgaW5mbyA9IDB4MDsKKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2 YXRlICpjYXRhbG9nOworCXU4IG9yaWVudGF0aW9uID0gQklUKCEhZmxpcHBlZCk7CisKKwlpZiAo IWN0cmwpIHsKKwkJRFJNX0VSUk9SKCJpbnZhbGlkIGlucHV0XG4iKTsKKwkJcmV0dXJuOworCX0K KworCWRwX2NhdGFsb2dfZ2V0X3ByaXYoY3RybCk7CisKKwlpbmZvID0gbG5fY250ICYgRFBfUEhZ X1NQQVJFMF9NQVNLOworCWluZm8gfD0gKG9yaWVudGF0aW9uICYgRFBfUEhZX1NQQVJFMF9NQVNL KSA8PCBEUF9QSFlfU1BBUkUwX09SSUVOVEFUSU9OX0lORk9fU0hJRlQ7CisJRFJNX0RFQlVHX0RQ KCJTaGFyZWQgSW5mbyA9IDB4JXhcbiIsIGluZm8pOworCisJZHBfd3JpdGVfcGh5KGNhdGFsb2cs IFJFR19EUF9QSFlfU1BBUkUwLCBpbmZvKTsKK30KKworaW50IGRwX2NhdGFsb2dfY3RybF91cGRh dGVfdnhfcHgoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCwKKwkJdTggdl9sZXZlbCwgdTgg cF9sZXZlbCkKK3sKKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOworCXU4IHZh bHVlMCwgdmFsdWUxOworCisJaWYgKCFjdHJsKSB7CisJCURSTV9FUlJPUigiaW52YWxpZCBpbnB1 dFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRwX2NhdGFsb2dfZ2V0X3ByaXYoY3Ry bCk7CisKKwlEUk1fREVCVUdfRFAoImh3OiB2PSVkIHA9JWRcbiIsIHZfbGV2ZWwsIHBfbGV2ZWwp OworCisJdmFsdWUwID0gdm1fdm9sdGFnZV9zd2luZ1t2X2xldmVsXVtwX2xldmVsXTsKKwl2YWx1 ZTEgPSB2bV9wcmVfZW1waGFzaXNbdl9sZXZlbF1bcF9sZXZlbF07CisKKwlpZiAodmFsdWUwID09 IDB4RkYgJiYgdmFsdWUxID09IDB4RkYpIHsKKwkJRFJNX0VSUk9SKCJpbnZhbGlkIHZ4ICgweCV4 PTB4JXgpLCBweCAoMHgleD0weCV4XG4iLAorCQkJdl9sZXZlbCwgdmFsdWUwLCBwX2xldmVsLCB2 YWx1ZTEpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJLyogcHJvZ3JhbSBkZWZhdWx0IHNldHRp bmcgZmlyc3QgKi8KKwlkcF93cml0ZV9sbl90eDAoY2F0YWxvZywgVFhuX1RYX0RSVl9MVkwsIDB4 MkEpOworCWRwX3dyaXRlX2xuX3R4MShjYXRhbG9nLCBUWG5fVFhfRFJWX0xWTCwgMHgyQSk7CisJ ZHBfd3JpdGVfbG5fdHgwKGNhdGFsb2csIFRYbl9UWF9FTVBfUE9TVDFfTFZMLCAweDIwKTsKKwlk cF93cml0ZV9sbl90eDEoY2F0YWxvZywgVFhuX1RYX0VNUF9QT1NUMV9MVkwsIDB4MjApOworCisJ LyogRW5hYmxlIE1VWCB0byB1c2UgQ3Vyc29yIHZhbHVlcyBmcm9tIHRoZXNlIHJlZ2lzdGVycyAq LworCXZhbHVlMCB8PSBCSVQoNSk7CisJdmFsdWUxIHw9IEJJVCg1KTsKKworCS8qIENvbmZpZ3Vy ZSBob3N0IGFuZCBwYW5lbCBvbmx5IGlmIGJvdGggdmFsdWVzIGFyZSBhbGxvd2VkICovCisJZHBf d3JpdGVfbG5fdHgwKGNhdGFsb2csIFRYbl9UWF9EUlZfTFZMLCB2YWx1ZTApOworCWRwX3dyaXRl X2xuX3R4MShjYXRhbG9nLCBUWG5fVFhfRFJWX0xWTCwgdmFsdWUwKTsKKwlkcF93cml0ZV9sbl90 eDAoY2F0YWxvZywgVFhuX1RYX0VNUF9QT1NUMV9MVkwsIHZhbHVlMSk7CisJZHBfd3JpdGVfbG5f dHgxKGNhdGFsb2csIFRYbl9UWF9FTVBfUE9TVDFfTFZMLCB2YWx1ZTEpOworCURSTV9ERUJVR19E UCgiaHc6IHZ4X3ZhbHVlPTB4JXggcHhfdmFsdWU9MHgleFxuIiwKKwkJCXZhbHVlMCwgdmFsdWUx KTsKKworCXJldHVybiAwOworfQorCit2b2lkIGRwX2NhdGFsb2dfY3RybF9zZW5kX3BoeV9wYXR0 ZXJuKHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwsCisJCQl1MzIgcGF0dGVybikKK3sKKwlz dHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOworCXUzMiB2YWx1ZSA9IDB4MDsKKwor CWlmICghY3RybCkgeworCQlEUk1fRVJST1IoImludmFsaWQgaW5wdXRcbiIpOworCQlyZXR1cm47 CisJfQorCisJZHBfY2F0YWxvZ19nZXRfcHJpdihjdHJsKTsKKworCS8qIE1ha2Ugc3VyZSB0byBj bGVhciB0aGUgY3VycmVudCBwYXR0ZXJuIGJlZm9yZSBzdGFydGluZyBhIG5ldyBvbmUgKi8KKwlk cF93cml0ZV9saW5rKGNhdGFsb2csIFJFR19EUF9TVEFURV9DVFJMLCAweDApOworCisJc3dpdGNo IChwYXR0ZXJuKSB7CisJY2FzZSBEUF9MSU5LX1FVQUxfUEFUVEVSTl9EMTBfMjoKKwkJZHBfd3Jp dGVfbGluayhjYXRhbG9nLCBSRUdfRFBfU1RBVEVfQ1RSTCwgRFBfU1RBVEVfQ1RSTF9MSU5LX1RS QUlOSU5HX1BBVFRFUk4xKTsKKwkJYnJlYWs7CisJY2FzZSBEUF9MSU5LX1FVQUxfUEFUVEVSTl9F UlJPUl9SQVRFOgorCQl2YWx1ZSAmPSB+RFBfSEJSMl9FUk1fUEFUVEVSTjsKKwkJZHBfd3JpdGVf bGluayhjYXRhbG9nLCBSRUdfRFBfSEJSMl9DT01QTElBTkNFX1NDUkFNQkxFUl9SRVNFVCwgdmFs dWUpOworCQl2YWx1ZSB8PSBTQ1JBTUJMRVJfUkVTRVRfQ09VTlRfVkFMVUU7CisJCWRwX3dyaXRl X2xpbmsoY2F0YWxvZywgUkVHX0RQX0hCUjJfQ09NUExJQU5DRV9TQ1JBTUJMRVJfUkVTRVQsIHZh bHVlKTsKKwkJZHBfd3JpdGVfbGluayhjYXRhbG9nLCBSRUdfRFBfTUFJTkxJTktfTEVWRUxTLCBE UF9NQUlOTElOS19TQUZFX1RPX0VYSVRfTEVWRUxfMik7CisJCWRwX3dyaXRlX2xpbmsoY2F0YWxv ZywgUkVHX0RQX1NUQVRFX0NUUkwsIERQX1NUQVRFX0NUUkxfTElOS19TWU1CT0xfRVJSX01FQVNV UkUpOworCQlicmVhazsKKwljYXNlIERQX0xJTktfUVVBTF9QQVRURVJOX1BSQlM3OgorCQlkcF93 cml0ZV9saW5rKGNhdGFsb2csIFJFR19EUF9TVEFURV9DVFJMLCBEUF9TVEFURV9DVFJMX0xJTktf UFJCUzcpOworCQlicmVhazsKKwljYXNlIERQX0xJTktfUVVBTF9QQVRURVJOXzgwQklUX0NVU1RP TToKKwkJZHBfd3JpdGVfbGluayhjYXRhbG9nLCBSRUdfRFBfU1RBVEVfQ1RSTCwgRFBfU1RBVEVf Q1RSTF9MSU5LX1RFU1RfQ1VTVE9NX1BBVFRFUk4pOworCQkvKiAwMDExMTExMDAwMDAxMTExMTAw MDAwMTExMTEwMDAwMCAqLworCQlkcF93cml0ZV9saW5rKGNhdGFsb2csIFJFR19EUF9URVNUXzgw QklUX0NVU1RPTV9QQVRURVJOX1JFRzAsIDB4M0UwRjgzRTApOworCQkvKiAwMDAwMTExMTEwMDAw MDExMTExMDAwMDAxMTExMTAwMCAqLworCQlkcF93cml0ZV9saW5rKGNhdGFsb2csIFJFR19EUF9U RVNUXzgwQklUX0NVU1RPTV9QQVRURVJOX1JFRzEsIDB4MEY4M0UwRjgpOworCQkvKiAxMTExMTAw MDAwMTExMTEwICovCisJCWRwX3dyaXRlX2xpbmsoY2F0YWxvZywgUkVHX0RQX1RFU1RfODBCSVRf Q1VTVE9NX1BBVFRFUk5fUkVHMiwgMHgwMDAwRjgzRSk7CisJCWJyZWFrOworCWNhc2UgRFBfTElO S19RVUFMX1BBVFRFUk5fSEJSMl9FWUU6CisJCXZhbHVlID0gRFBfSEJSMl9FUk1fUEFUVEVSTjsK KwkJZHBfd3JpdGVfbGluayhjYXRhbG9nLCBSRUdfRFBfSEJSMl9DT01QTElBTkNFX1NDUkFNQkxF Ul9SRVNFVCwgdmFsdWUpOworCQl2YWx1ZSB8PSBTQ1JBTUJMRVJfUkVTRVRfQ09VTlRfVkFMVUU7 CisJCWRwX3dyaXRlX2xpbmsoY2F0YWxvZywgUkVHX0RQX0hCUjJfQ09NUExJQU5DRV9TQ1JBTUJM RVJfUkVTRVQsIHZhbHVlKTsKKwkJZHBfd3JpdGVfbGluayhjYXRhbG9nLCBSRUdfRFBfTUFJTkxJ TktfTEVWRUxTLCBEUF9NQUlOTElOS19TQUZFX1RPX0VYSVRfTEVWRUxfMik7CisJCWRwX3dyaXRl X2xpbmsoY2F0YWxvZywgUkVHX0RQX1NUQVRFX0NUUkwsIERQX1NUQVRFX0NUUkxfTElOS19TWU1C T0xfRVJSX01FQVNVUkUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEUk1fREVCVUdfRFAoIk5v IHZhbGlkIHRlc3QgcGF0dGVybiByZXF1ZXN0ZWQ6IDB4JXhcbiIsIHBhdHRlcm4pOworCQlyZXR1 cm47CisJfQorfQorCit1MzIgZHBfY2F0YWxvZ19jdHJsX3JlYWRfcGh5X3BhdHRlcm4oc3RydWN0 IGRwX2NhdGFsb2dfY3RybCAqY3RybCkKK3sKKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpj YXRhbG9nOworCisJaWYgKCFjdHJsKSB7CisJCURSTV9FUlJPUigiaW52YWxpZCBpbnB1dFxuIik7 CisJCXJldHVybiAwOworCX0KKworCWRwX2NhdGFsb2dfZ2V0X3ByaXYoY3RybCk7CisKKwlyZXR1 cm4gZHBfcmVhZF9saW5rKGNhdGFsb2csIFJFR19EUF9NQUlOTElOS19SRUFEWSk7Cit9CisKKy8q IHBhbmVsIHJlbGF0ZWQgY2F0YWxvZyBmdW5jdGlvbnMgKi8KK2ludCBkcF9jYXRhbG9nX3BhbmVs X3RpbWluZ19jZmcoc3RydWN0IGRwX2NhdGFsb2dfcGFuZWwgKnBhbmVsKQoreworCXN0cnVjdCBk cF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7CisKKwlpZiAoIXBhbmVsKSB7CisJCURSTV9FUlJP UigiaW52YWxpZCBpbnB1dFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRwX2NhdGFs b2dfZ2V0X3ByaXYocGFuZWwpOworCisJZHBfd3JpdGVfbGluayhjYXRhbG9nLCBSRUdfRFBfVE9U QUxfSE9SX1ZFUiwgcGFuZWwtPnRvdGFsKTsKKwlkcF93cml0ZV9saW5rKGNhdGFsb2csIFJFR19E UF9TVEFSVF9IT1JfVkVSX0ZST01fU1lOQywgcGFuZWwtPnN5bmNfc3RhcnQpOworCWRwX3dyaXRl X2xpbmsoY2F0YWxvZywgUkVHX0RQX0hTWU5DX1ZTWU5DX1dJRFRIX1BPTEFSSVRZLCBwYW5lbC0+ d2lkdGhfYmxhbmtpbmcpOworCWRwX3dyaXRlX2xpbmsoY2F0YWxvZywgUkVHX0RQX0FDVElWRV9I T1JfVkVSLCBwYW5lbC0+ZHBfYWN0aXZlKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBkcF9jYXRh bG9nX3BhbmVsX3RwZ19lbmFibGUoc3RydWN0IGRwX2NhdGFsb2dfcGFuZWwgKnBhbmVsKQorewor CXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7CisKKwlpZiAoIXBhbmVsKSB7CisJ CURSTV9FUlJPUigiaW52YWxpZCBpbnB1dFxuIik7CisJCXJldHVybjsKKwl9CisKKwlkcF9jYXRh bG9nX2dldF9wcml2KHBhbmVsKTsKKworCWRwX3dyaXRlX3AwKGNhdGFsb2csIE1NU1NfRFBfSU5U Rl9DT05GSUcsIDB4MCk7CisJZHBfd3JpdGVfcDAoY2F0YWxvZywgTU1TU19EUF9JTlRGX0hTWU5D X0NUTCwgcGFuZWwtPmhzeW5jX2N0bCk7CisJZHBfd3JpdGVfcDAoY2F0YWxvZywgTU1TU19EUF9J TlRGX1ZTWU5DX1BFUklPRF9GMCwgcGFuZWwtPnZzeW5jX3BlcmlvZCAqCisJCQlwYW5lbC0+aHN5 bmNfcGVyaW9kKTsKKwlkcF93cml0ZV9wMChjYXRhbG9nLCBNTVNTX0RQX0lOVEZfVlNZTkNfUFVM U0VfV0lEVEhfRjAsIHBhbmVsLT52X3N5bmNfd2lkdGggKgorCQkJcGFuZWwtPmhzeW5jX3Blcmlv ZCk7CisJZHBfd3JpdGVfcDAoY2F0YWxvZywgTU1TU19EUF9JTlRGX1ZTWU5DX1BFUklPRF9GMSwg MCk7CisJZHBfd3JpdGVfcDAoY2F0YWxvZywgTU1TU19EUF9JTlRGX1ZTWU5DX1BVTFNFX1dJRFRI X0YxLCAwKTsKKwlkcF93cml0ZV9wMChjYXRhbG9nLCBNTVNTX0RQX0lOVEZfRElTUExBWV9IQ1RM LCBwYW5lbC0+ZGlzcGxheV9oY3RsKTsKKwlkcF93cml0ZV9wMChjYXRhbG9nLCBNTVNTX0RQX0lO VEZfQUNUSVZFX0hDVEwsIDApOworCWRwX3dyaXRlX3AwKGNhdGFsb2csIE1NU1NfSU5URl9ESVNQ TEFZX1ZfU1RBUlRfRjAsIHBhbmVsLT5kaXNwbGF5X3Zfc3RhcnQpOworCWRwX3dyaXRlX3AwKGNh dGFsb2csIE1NU1NfRFBfSU5URl9ESVNQTEFZX1ZfRU5EX0YwLCBwYW5lbC0+ZGlzcGxheV92X2Vu ZCk7CisJZHBfd3JpdGVfcDAoY2F0YWxvZywgTU1TU19JTlRGX0RJU1BMQVlfVl9TVEFSVF9GMSwg MCk7CisJZHBfd3JpdGVfcDAoY2F0YWxvZywgTU1TU19EUF9JTlRGX0RJU1BMQVlfVl9FTkRfRjEs IDApOworCWRwX3dyaXRlX3AwKGNhdGFsb2csIE1NU1NfRFBfSU5URl9BQ1RJVkVfVl9TVEFSVF9G MCwgMCk7CisJZHBfd3JpdGVfcDAoY2F0YWxvZywgTU1TU19EUF9JTlRGX0FDVElWRV9WX0VORF9G MCwgMCk7CisJZHBfd3JpdGVfcDAoY2F0YWxvZywgTU1TU19EUF9JTlRGX0FDVElWRV9WX1NUQVJU X0YxLCAwKTsKKwlkcF93cml0ZV9wMChjYXRhbG9nLCBNTVNTX0RQX0lOVEZfQUNUSVZFX1ZfRU5E X0YxLCAwKTsKKwlkcF93cml0ZV9wMChjYXRhbG9nLCBNTVNTX0RQX0lOVEZfUE9MQVJJVFlfQ1RM LCAwKTsKKworCWRwX3dyaXRlX3AwKGNhdGFsb2csIE1NU1NfRFBfVFBHX01BSU5fQ09OVFJPTCwg RFBfVFBHX0NIRUNLRVJFRF9SRUNUX1BBVFRFUk4pOworCWRwX3dyaXRlX3AwKGNhdGFsb2csIE1N U1NfRFBfVFBHX1ZJREVPX0NPTkZJRywKKwkJCQkJRFBfVFBHX1ZJREVPX0NPTkZJR19CUFBfOEJJ VCB8CisJCQkJCURQX1RQR19WSURFT19DT05GSUdfUkdCKTsKKwlkcF93cml0ZV9wMChjYXRhbG9n LCBNTVNTX0RQX0JJU1RfRU5BQkxFLCBEUF9CSVNUX0VOQUJMRV9EUEJJU1RfRU4pOworCWRwX3dy aXRlX3AwKGNhdGFsb2csIE1NU1NfRFBfVElNSU5HX0VOR0lORV9FTiwgRFBfVElNSU5HX0VOR0lO RV9FTl9FTik7CisJRFJNX0RFQlVHX0RQKCIlczogZW5hYmxlZCB0cGdcbiIsIF9fZnVuY19fKTsK K30KKwordm9pZCBkcF9jYXRhbG9nX3BhbmVsX3RwZ19kaXNhYmxlKHN0cnVjdCBkcF9jYXRhbG9n X3BhbmVsICpwYW5lbCkKK3sKKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwor CisJaWYgKCFwYW5lbCkgeworCQlEUk1fRVJST1IoImludmFsaWQgaW5wdXRcbiIpOworCQlyZXR1 cm47CisJfQorCisJZHBfY2F0YWxvZ19nZXRfcHJpdihwYW5lbCk7CisKKwlkcF93cml0ZV9wMChj YXRhbG9nLCBNTVNTX0RQX1RQR19NQUlOX0NPTlRST0wsIDB4MCk7CisJZHBfd3JpdGVfcDAoY2F0 YWxvZywgTU1TU19EUF9CSVNUX0VOQUJMRSwgMHgwKTsKKwlkcF93cml0ZV9wMChjYXRhbG9nLCBN TVNTX0RQX1RJTUlOR19FTkdJTkVfRU4sIDB4MCk7CisJcmV0dXJuOworfQorCitzdHJ1Y3QgZHBf Y2F0YWxvZyAqZHBfY2F0YWxvZ19nZXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZHBfaW8g KmlvKQoreworCWludCByYyA9IDA7CisJc3RydWN0IGRwX2NhdGFsb2cgKmRwX2NhdGFsb2c7CisJ c3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKKworCWlmICghaW8pIHsKKwkJRFJN X0VSUk9SKCJpbnZhbGlkIGlucHV0XG4iKTsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIGVycm9y OworCX0KKworCWNhdGFsb2cgID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpjYXRhbG9nKSwg R0ZQX0tFUk5FTCk7CisJaWYgKCFjYXRhbG9nKSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBl cnJvcjsKKwl9CisKKwljYXRhbG9nLT5kZXYgPSBkZXY7CisJY2F0YWxvZy0+aW8gPSBpbzsKKwor CWRwX2NhdGFsb2cgPSAmY2F0YWxvZy0+ZHBfY2F0YWxvZzsKKworCXJldHVybiBkcF9jYXRhbG9n OworZXJyb3I6CisJcmV0dXJuIEVSUl9QVFIocmMpOworfQorCit2b2lkIGRwX2NhdGFsb2dfcHV0 KHN0cnVjdCBkcF9jYXRhbG9nICpkcF9jYXRhbG9nKQoreworCXN0cnVjdCBkcF9jYXRhbG9nX3By aXZhdGUgKmNhdGFsb2c7CisKKwlpZiAoIWRwX2NhdGFsb2cpCisJCXJldHVybjsKKworCWNhdGFs b2cgPSBjb250YWluZXJfb2YoZHBfY2F0YWxvZywgc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSwK KwkJCQlkcF9jYXRhbG9nKTsKKworCWRldm1fa2ZyZWUoY2F0YWxvZy0+ZGV2LCBjYXRhbG9nKTsK K30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY2F0YWxvZy5oIGIvZHJp dmVycy9ncHUvZHJtL21zbS9kcC9kcF9jYXRhbG9nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uNjUwOTMxMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9t c20vZHAvZHBfY2F0YWxvZy5oCkBAIC0wLDAgKzEsMTA4IEBACisvKiBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMC1vbmx5ICovCisvKgorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMTks IFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICovCisKKyNpZm5k ZWYgX0RQX0NBVEFMT0dfSF8KKyNkZWZpbmUgX0RQX0NBVEFMT0dfSF8KKworI2luY2x1ZGUgImRw X3BhcnNlci5oIgorCisvKiBpbnRlcnJ1cHRzICovCisjZGVmaW5lIERQX0lOVFJfSFBECQlCSVQo MCkKKyNkZWZpbmUgRFBfSU5UUl9BVVhfSTJDX0RPTkUJQklUKDMpCisjZGVmaW5lIERQX0lOVFJf V1JPTkdfQUREUglCSVQoNikKKyNkZWZpbmUgRFBfSU5UUl9USU1FT1VUCQlCSVQoOSkKKyNkZWZp bmUgRFBfSU5UUl9OQUNLX0RFRkVSCUJJVCgxMikKKyNkZWZpbmUgRFBfSU5UUl9XUk9OR19EQVRB X0NOVAlCSVQoMTUpCisjZGVmaW5lIERQX0lOVFJfSTJDX05BQ0sJQklUKDE4KQorI2RlZmluZSBE UF9JTlRSX0kyQ19ERUZFUglCSVQoMjEpCisjZGVmaW5lIERQX0lOVFJfUExMX1VOTE9DS0VECUJJ VCgyNCkKKyNkZWZpbmUgRFBfSU5UUl9BVVhfRVJST1IJQklUKDI3KQorCisjZGVmaW5lIERQX0lO VFJfUkVBRFlfRk9SX1ZJREVPCQlCSVQoMCkKKyNkZWZpbmUgRFBfSU5UUl9JRExFX1BBVFRFUk5f U0VOVAlCSVQoMykKKyNkZWZpbmUgRFBfSU5UUl9GUkFNRV9FTkQJCUJJVCg2KQorI2RlZmluZSBE UF9JTlRSX0NSQ19VUERBVEVECQlCSVQoOSkKKworc3RydWN0IGRwX2NhdGFsb2dfYXV4IHsKKwl1 MzIgZGF0YTsKKwl1MzIgaXNyOworfTsKKworc3RydWN0IGRwX2NhdGFsb2dfY3RybCB7CisJdTMy IGRwX3R1OworCXUzMiB2YWxpZF9ib3VuZGFyeTsKKwl1MzIgdmFsaWRfYm91bmRhcnkyOworCXUz MiBpc3I7Cit9OworCitzdHJ1Y3QgZHBfY2F0YWxvZ19wYW5lbCB7CisJdTMyIHRvdGFsOworCXUz MiBzeW5jX3N0YXJ0OworCXUzMiB3aWR0aF9ibGFua2luZzsKKwl1MzIgZHBfYWN0aXZlOworCisJ LyogVFBHICovCisJdTMyIGhzeW5jX3BlcmlvZDsKKwl1MzIgdnN5bmNfcGVyaW9kOworCXUzMiBk aXNwbGF5X3Zfc3RhcnQ7CisJdTMyIGRpc3BsYXlfdl9lbmQ7CisJdTMyIHZfc3luY193aWR0aDsK Kwl1MzIgaHN5bmNfY3RsOworCXUzMiBkaXNwbGF5X2hjdGw7Cit9OworCitzdHJ1Y3QgZHBfY2F0 YWxvZyB7CisJc3RydWN0IGRwX2NhdGFsb2dfYXV4IGF1eDsKKwlzdHJ1Y3QgZHBfY2F0YWxvZ19j dHJsIGN0cmw7CisJc3RydWN0IGRwX2NhdGFsb2dfcGFuZWwgcGFuZWw7Cit9OworCisvKiBBVVgg QVBJcyAqLwordTMyIGRwX2NhdGFsb2dfYXV4X3JlYWRfZGF0YShzdHJ1Y3QgZHBfY2F0YWxvZ19h dXggKmF1eCk7CitpbnQgZHBfY2F0YWxvZ19hdXhfd3JpdGVfZGF0YShzdHJ1Y3QgZHBfY2F0YWxv Z19hdXggKmF1eCk7CitpbnQgZHBfY2F0YWxvZ19hdXhfd3JpdGVfdHJhbnMoc3RydWN0IGRwX2Nh dGFsb2dfYXV4ICphdXgpOworaW50IGRwX2NhdGFsb2dfYXV4X2NsZWFyX3RyYW5zKHN0cnVjdCBk cF9jYXRhbG9nX2F1eCAqYXV4LCBib29sIHJlYWQpOwordm9pZCBkcF9jYXRhbG9nX2F1eF9yZXNl dChzdHJ1Y3QgZHBfY2F0YWxvZ19hdXggKmF1eCk7Cit2b2lkIGRwX2NhdGFsb2dfYXV4X2VuYWJs ZShzdHJ1Y3QgZHBfY2F0YWxvZ19hdXggKmF1eCwgYm9vbCBlbmFibGUpOwordm9pZCBkcF9jYXRh bG9nX2F1eF91cGRhdGVfY2ZnKHN0cnVjdCBkcF9jYXRhbG9nX2F1eCAqYXV4LAorCQlzdHJ1Y3Qg ZHBfYXV4X2NmZyAqY2ZnLCBlbnVtIGRwX3BoeV9hdXhfY29uZmlnX3R5cGUgdHlwZSk7Cit2b2lk IGRwX2NhdGFsb2dfYXV4X3NldHVwKHN0cnVjdCBkcF9jYXRhbG9nX2F1eCAqYXV4LAorCQlzdHJ1 Y3QgZHBfYXV4X2NmZyAqYXV4X2NmZyk7Cit2b2lkIGRwX2NhdGFsb2dfYXV4X2dldF9pcnEoc3Ry dWN0IGRwX2NhdGFsb2dfYXV4ICphdXgsIGJvb2wgY21kX2J1c3kpOworCisvKiBEUCBDb250cm9s bGVyIEFQSXMgKi8KK3ZvaWQgZHBfY2F0YWxvZ19jdHJsX3N0YXRlX2N0cmwoc3RydWN0IGRwX2Nh dGFsb2dfY3RybCAqY3RybCwgdTMyIHN0YXRlKTsKK3ZvaWQgZHBfY2F0YWxvZ19jdHJsX2NvbmZp Z19jdHJsKHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwsIHUzMiBjb25maWcpOwordm9pZCBk cF9jYXRhbG9nX2N0cmxfbGFuZV9tYXBwaW5nKHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwp Owordm9pZCBkcF9jYXRhbG9nX2N0cmxfbWFpbmxpbmtfY3RybChzdHJ1Y3QgZHBfY2F0YWxvZ19j dHJsICpjdHJsLCBib29sIGVuYWJsZSk7Cit2b2lkIGRwX2NhdGFsb2dfY3RybF9jb25maWdfbWlz YyhzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsLCB1MzIgY2MsIHUzMiB0Yik7Cit2b2lkIGRw X2NhdGFsb2dfY3RybF9jb25maWdfbXNhKHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwsIHUz MiByYXRlLAorCQkJCXUzMiBzdHJlYW1fcmF0ZV9raHosIGJvb2wgZml4ZWRfbnZpZCk7CitpbnQg ZHBfY2F0YWxvZ19jdHJsX3NldF9wYXR0ZXJuKHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmws IHUzMiBwYXR0ZXJuKTsKK3ZvaWQgZHBfY2F0YWxvZ19jdHJsX3Jlc2V0KHN0cnVjdCBkcF9jYXRh bG9nX2N0cmwgKmN0cmwpOwordm9pZCBkcF9jYXRhbG9nX2N0cmxfdXNiX3Jlc2V0KHN0cnVjdCBk cF9jYXRhbG9nX2N0cmwgKmN0cmwsIGJvb2wgZmxpcCk7Citib29sIGRwX2NhdGFsb2dfY3RybF9t YWlubGlua19yZWFkeShzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsKTsKK3ZvaWQgZHBfY2F0 YWxvZ19jdHJsX2VuYWJsZV9pcnEoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCwgYm9vbCBl bmFibGUpOwordm9pZCBkcF9jYXRhbG9nX2N0cmxfaHBkX2NvbmZpZyhzdHJ1Y3QgZHBfY2F0YWxv Z19jdHJsICpjdHJsLCBib29sIGVuYWJsZSk7Cit2b2lkIGRwX2NhdGFsb2dfY3RybF9waHlfcmVz ZXQoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCk7Cit2b2lkIGRwX2NhdGFsb2dfY3RybF9w aHlfbGFuZV9jZmcoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCwgYm9vbCBmbGlwcGVkLAor CQkJCXU4IGxhbmVfY250KTsKK2ludCBkcF9jYXRhbG9nX2N0cmxfdXBkYXRlX3Z4X3B4KHN0cnVj dCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwsIHU4IHZfbGV2ZWwsCisJCQkJdTggcF9sZXZlbCk7Cit2 b2lkIGRwX2NhdGFsb2dfY3RybF9nZXRfaW50ZXJydXB0KHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwg KmN0cmwpOwordm9pZCBkcF9jYXRhbG9nX2N0cmxfdXBkYXRlX3RyYW5zZmVyX3VuaXQoc3RydWN0 IGRwX2NhdGFsb2dfY3RybCAqY3RybCk7Cit2b2lkIGRwX2NhdGFsb2dfY3RybF9zZW5kX3BoeV9w YXR0ZXJuKHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwsCisJCQl1MzIgcGF0dGVybik7Cit1 MzIgZHBfY2F0YWxvZ19jdHJsX3JlYWRfcGh5X3BhdHRlcm4oc3RydWN0IGRwX2NhdGFsb2dfY3Ry bCAqY3RybCk7CisKKy8qIERQIFBhbmVsIEFQSXMgKi8KK2ludCBkcF9jYXRhbG9nX3BhbmVsX3Rp bWluZ19jZmcoc3RydWN0IGRwX2NhdGFsb2dfcGFuZWwgKnBhbmVsKTsKK3ZvaWQgZHBfY2F0YWxv Z19wYW5lbF90cGdfZW5hYmxlKHN0cnVjdCBkcF9jYXRhbG9nX3BhbmVsICpwYW5lbCk7Cit2b2lk IGRwX2NhdGFsb2dfcGFuZWxfdHBnX2Rpc2FibGUoc3RydWN0IGRwX2NhdGFsb2dfcGFuZWwgKnBh bmVsKTsKKworc3RydWN0IGRwX2NhdGFsb2cgKmRwX2NhdGFsb2dfZ2V0KHN0cnVjdCBkZXZpY2Ug KmRldiwgc3RydWN0IGRwX2lvICppbyk7Cit2b2lkIGRwX2NhdGFsb2dfcHV0KHN0cnVjdCBkcF9j YXRhbG9nICpjYXRhbG9nKTsKKworI2VuZGlmIC8qIF9EUF9DQVRBTE9HX0hfICovCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2N0cmwuYyBiL2RyaXZlcnMvZ3B1L2RybS9t c20vZHAvZHBfY3RybC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExM2Fi MjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2N0cmwuYwpA QCAtMCwwICsxLDE2MTEgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9u bHkKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxOSwgVGhlIExpbnV4IEZvdW5kYXRpb24u IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKworI2RlZmluZSBwcl9mbXQoZm10KQkiW2RybS1k cF0gJXM6ICIgZm10LCBfX2Z1bmNfXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNs dWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNs dWRlIDxkcm0vZHJtX2ZpeGVkLmg+CisKKyNpbmNsdWRlICJkcF9yZWcuaCIKKyNpbmNsdWRlICJk cF9jdHJsLmgiCisKKyNkZWZpbmUgRFBfS0haX1RPX0haIDEwMDAKKyNkZWZpbmUgSURMRV9QQVRU RVJOX0NPTVBMRVRJT05fVElNRU9VVF9KSUZGSUVTCSgzMCAqIEhaIC8gMTAwMCkgLyogMzAgbXMg Ki8KKyNkZWZpbmUgV0FJVF9GT1JfVklERU9fUkVBRFlfVElNRU9VVF9KSUZGSUVTIChIWiAvIDIp CisKKyNkZWZpbmUgRFBfQ1RSTF9JTlRSX1JFQURZX0ZPUl9WSURFTyAgICAgQklUKDApCisjZGVm aW5lIERQX0NUUkxfSU5UUl9JRExFX1BBVFRFUk5fU0VOVCAgQklUKDMpCisKKyNkZWZpbmUgTVJf TElOS19UUkFJTklORzEgIDB4OAorI2RlZmluZSBNUl9MSU5LX1NZTUJPTF9FUk0gMHg4MAorI2Rl ZmluZSBNUl9MSU5LX1BSQlM3IDB4MTAwCisjZGVmaW5lIE1SX0xJTktfQ1VTVE9NODAgMHgyMDAK Kworc3RydWN0IGRwX3R1X2NhbGNfaW5wdXQgeworCXU2NCBsY2xrOyAgICAgICAgLyogMTYyLCAy NzAsIDU0MCBhbmQgODEwICovCisJdTY0IHBjbGtfa2h6OyAgICAvKiBpbiBLSHogKi8KKwl1NjQg aGFjdGl2ZTsgICAgIC8qIGFjdGl2ZSBoLXdpZHRoICovCisJdTY0IGhwb3JjaDsgICAgICAvKiBi cCArIGZwICsgcHVsc2UgKi8KKwlpbnQgbmxhbmVzOyAgICAgIC8qIG5vLm9mLmxhbmVzICovCisJ aW50IGJwcDsgICAgICAgICAvKiBiaXRzICovCisJaW50IHBpeGVsX2VuYzsgICAvKiA0NDQsIDQy MCwgNDIyICovCisJaW50IGRzY19lbjsgICAgIC8qIGRzYyBvbi9vZmYgKi8KKwlpbnQgYXN5bmNf ZW47ICAgLyogYXN5bmMgbW9kZSAqLworfTsKKworc3RydWN0IGRwX3ZjX3R1X21hcHBpbmdfdGFi bGUgeworCXU4IHZhbGlkX2JvdW5kYXJ5X2xpbms7CisJdTE2IGRlbGF5X3N0YXJ0X2xpbms7CisJ Ym9vbCBib3VuZGFyeV9tb2RlcmF0aW9uX2VuOworCXU4IHZhbGlkX2xvd2VyX2JvdW5kYXJ5X2xp bms7CisJdTggdXBwZXJfYm91bmRhcnlfY291bnQ7CisJdTggbG93ZXJfYm91bmRhcnlfY291bnQ7 CisJdTggdHVfc2l6ZV9taW51czE7Cit9OworCitzdHJ1Y3QgZHBfY3RybF9wcml2YXRlIHsKKwlz dHJ1Y3QgZHBfY3RybCBkcF9jdHJsOworCisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBk cF9hdXggKmF1eDsKKwlzdHJ1Y3QgZHBfcGFuZWwgKnBhbmVsOworCXN0cnVjdCBkcF9saW5rICps aW5rOworCXN0cnVjdCBkcF9wb3dlciAqcG93ZXI7CisJc3RydWN0IGRwX3BhcnNlciAqcGFyc2Vy OworCXN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmNhdGFsb2c7CisKKwlzdHJ1Y3QgY29tcGxldGlv biBpZGxlX2NvbXA7CisJc3RydWN0IG11dGV4IHB1c2hfaWRsZV9tdXRleDsKKwlzdHJ1Y3QgY29t cGxldGlvbiB2aWRlb19jb21wOworfTsKKwordm9pZCBkcF9jdHJsX2Fib3J0KHN0cnVjdCBkcF9j dHJsICpkcF9jdHJsKQoreworCXN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0cmw7CisKKwljdHJs ID0gY29udGFpbmVyX29mKGRwX2N0cmwsIHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUsIGRwX2N0cmwp OworCisJYXRvbWljX3NldCgmY3RybC0+ZHBfY3RybC5hYm9ydGVkLCAxKTsKK30KKwordm9pZCBk cF9jdHJsX3B1c2hfaWRsZShzdHJ1Y3QgZHBfY3RybCAqZHBfY3RybCkKK3sKKwlzdHJ1Y3QgZHBf Y3RybF9wcml2YXRlICpjdHJsOworCisJY3RybCA9IGNvbnRhaW5lcl9vZihkcF9jdHJsLCBzdHJ1 Y3QgZHBfY3RybF9wcml2YXRlLCBkcF9jdHJsKTsKKworCW11dGV4X2xvY2soJmN0cmwtPnB1c2hf aWRsZV9tdXRleCk7CisKKwlyZWluaXRfY29tcGxldGlvbigmY3RybC0+aWRsZV9jb21wKTsKKwlk cF9jYXRhbG9nX2N0cmxfc3RhdGVfY3RybChjdHJsLT5jYXRhbG9nLCBEUF9TVEFURV9DVFJMX1BV U0hfSURMRSk7CisKKwlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmY3RybC0+aWRs ZV9jb21wLAorCQkJSURMRV9QQVRURVJOX0NPTVBMRVRJT05fVElNRU9VVF9KSUZGSUVTKSkKKwkJ cHJfd2FybigiUFVTSF9JRExFIHBhdHRlcm4gdGltZWRvdXRcbiIpOworCisJbXV0ZXhfdW5sb2Nr KCZjdHJsLT5wdXNoX2lkbGVfbXV0ZXgpOworCXByX2RlYnVnKCJtYWlubGluayBvZmYgZG9uZVxu Iik7Cit9CisKK3N0YXRpYyB2b2lkIGRwX2N0cmxfY29uZmlnX2N0cmwoc3RydWN0IGRwX2N0cmxf cHJpdmF0ZSAqY3RybCkKK3sKKwl1MzIgY29uZmlnID0gMCwgdGJkOworCXU4ICpkcGNkID0gY3Ry bC0+cGFuZWwtPmRwY2Q7CisKKwkvKiBEZWZhdWx0LT4gTFNDTEsgRElWOiAxLzQgTENMSyAgKi8K Kwljb25maWcgfD0gKDIgPDwgRFBfQ09ORklHVVJBVElPTl9DVFJMX0xTQ0xLX0RJVl9TSElGVCk7 CisKKwkvKiBTY3JhbWJsZXIgcmVzZXQgZW5hYmxlICovCisJaWYgKGRwY2RbRFBfRURQX0NPTkZJ R1VSQVRJT05fQ0FQXSAmIERQX0FMVEVSTkFURV9TQ1JBTUJMRVJfUkVTRVRfQ0FQKQorCQljb25m aWcgfD0gRFBfQ09ORklHVVJBVElPTl9DVFJMX0FTU1I7CisKKwl0YmQgPSBkcF9saW5rX2dldF90 ZXN0X2JpdHNfZGVwdGgoY3RybC0+bGluaywKKwkJCWN0cmwtPnBhbmVsLT5kcF9tb2RlLmJwcCk7 CisKKwlpZiAodGJkID09IERQX1RFU1RfQklUX0RFUFRIX1VOS05PV04pIHsKKwkJcHJfZGVidWco IkJJVF9ERVBUSCBub3Qgc2V0LiBDb25maWd1cmUgZGVmYXVsdFxuIik7CisJCXRiZCA9IERQX1RF U1RfQklUX0RFUFRIXzg7CisJfQorCisJY29uZmlnIHw9IHRiZCA8PCBEUF9DT05GSUdVUkFUSU9O X0NUUkxfQlBDX1NISUZUOworCisJLyogTnVtIG9mIExhbmVzICovCisJY29uZmlnIHw9ICgoY3Ry bC0+bGluay0+bGlua19wYXJhbXMubnVtX2xhbmVzIC0gMSkKKwkJCTw8IERQX0NPTkZJR1VSQVRJ T05fQ1RSTF9OVU1fT0ZfTEFORVNfU0hJRlQpOworCisJaWYgKGRybV9kcF9lbmhhbmNlZF9mcmFt ZV9jYXAoZHBjZCkpCisJCWNvbmZpZyB8PSBEUF9DT05GSUdVUkFUSU9OX0NUUkxfRU5IQU5DRURf RlJBTUlORzsKKworCWNvbmZpZyB8PSBEUF9DT05GSUdVUkFUSU9OX0NUUkxfUF9JTlRFUkxBQ0VE OyAvKiBwcm9ncmVzc2l2ZSB2aWRlbyAqLworCisJLyogc3luYyBjbG9jayAmIHN0YXRpYyBNdmlk ICovCisJY29uZmlnIHw9IERQX0NPTkZJR1VSQVRJT05fQ1RSTF9TVEFUSUNfRFlOQU1JQ19DTjsK Kwljb25maWcgfD0gRFBfQ09ORklHVVJBVElPTl9DVFJMX1NZTkNfQVNZTkNfQ0xLOworCisJZHBf Y2F0YWxvZ19jdHJsX2NvbmZpZ19jdHJsKGN0cmwtPmNhdGFsb2csIGNvbmZpZyk7Cit9CisKKy8q KgorICogZHBfY3RybF9jb25maWd1cmVfc291cmNlX3BhcmFtcygpIC0gY29uZmlndXJlcyBEUCB0 cmFuc21pdHRlciBzb3VyY2UgcGFyYW1zCisgKiBAY3RybDogRGlzcGxheSBQb3J0IERyaXZlciBk YXRhCisgKgorICogQ29uZmlndXJlcyB0aGUgRFAgdHJhbnNtaXR0ZXIgc291cmNlIHBhcmFtcyBp bmNsdWRpbmcgZGV0YWlscyBzdWNoIGFzIGxhbmUKKyAqIGNvbmZpZ3VyYXRpb24sIG91dHB1dCBm b3JtYXQgYW5kIHNpbmsvcGFuZWwgdGltaW5nIGluZm9ybWF0aW9uLgorICovCitzdGF0aWMgdm9p ZCBkcF9jdHJsX2NvbmZpZ3VyZV9zb3VyY2VfcGFyYW1zKHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUg KmN0cmwpCit7CisJdTMyIGNjLCB0YjsKKworCWRwX2NhdGFsb2dfY3RybF9sYW5lX21hcHBpbmco Y3RybC0+Y2F0YWxvZyk7CisJZHBfY2F0YWxvZ19jdHJsX21haW5saW5rX2N0cmwoY3RybC0+Y2F0 YWxvZywgdHJ1ZSk7CisKKwlkcF9jdHJsX2NvbmZpZ19jdHJsKGN0cmwpOworCisJdGIgPSBkcF9s aW5rX2dldF90ZXN0X2JpdHNfZGVwdGgoY3RybC0+bGluaywKKwkJY3RybC0+cGFuZWwtPmRwX21v ZGUuYnBwKTsKKwljYyA9IGRwX2xpbmtfZ2V0X2NvbG9yaW1ldHJ5X2NvbmZpZyhjdHJsLT5saW5r KTsKKwlkcF9jYXRhbG9nX2N0cmxfY29uZmlnX21pc2MoY3RybC0+Y2F0YWxvZywgY2MsIHRiKTsK KwlkcF9wYW5lbF90aW1pbmdfY2ZnKGN0cmwtPnBhbmVsKTsKK30KKworLyoKKyAqIFRoZSBzdHJ1 Y3R1cmUgYW5kIGZldyBmdW5jdGlvbnMgcHJlc2VudCBiZWxvdyBhcmUgSVAvSGFyZHdhcmUKKyAq IHNwZWNpZmljIGltcGxlbWVudGF0aW9uLiBNb3N0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiB3aWxs IG5vdAorICogaGF2ZSBjb2RpbmcgY29tbWVudHMKKyAqLworc3RydWN0IHR1X2FsZ29fZGF0YSB7 CisJczY0IGxjbGtfZnA7CisJczY0IHBjbGtfZnA7CisJczY0IGx3aWR0aDsKKwlzNjQgaGJwX3Jl bGF0aXZlX3RvX3BjbGs7CisJaW50IG5sYW5lczsKKwlpbnQgYnBwOworCWludCBwaXhlbEVuYzsK KwlpbnQgZHNjX2VuOworCWludCBhc3luY19lbjsKKwlpbnQgYnBjOworCisJdWludCBkZWxheV9z dGFydF9saW5rX2V4dHJhX3BpeGNsazsKKwlpbnQgZXh0cmFfYnVmZmVyX21hcmdpbjsKKwlzNjQg cmF0aW9fZnA7CisJczY0IG9yaWdpbmFsX3JhdGlvX2ZwOworCisJczY0IGVycl9mcDsKKwlzNjQg bl9lcnJfZnA7CisJczY0IG5fbl9lcnJfZnA7CisJaW50IHR1X3NpemU7CisJaW50IHR1X3NpemVf ZGVzaXJlZDsKKwlpbnQgdHVfc2l6ZV9taW51czE7CisKKwlpbnQgdmFsaWRfYm91bmRhcnlfbGlu azsKKwlzNjQgcmVzdWx0aW5nX3ZhbGlkX2ZwOworCXM2NCB0b3RhbF92YWxpZF9mcDsKKwlzNjQg ZWZmZWN0aXZlX3ZhbGlkX2ZwOworCXM2NCBlZmZlY3RpdmVfdmFsaWRfcmVjb3JkZWRfZnA7CisJ aW50IG5fdHVzOworCWludCBuX3R1c19wZXJfbGFuZTsKKwlpbnQgcGFpcmVkX3R1czsKKwlpbnQg cmVtYWluZGVyX3R1czsKKwlpbnQgcmVtYWluZGVyX3R1c191cHBlcjsKKwlpbnQgcmVtYWluZGVy X3R1c19sb3dlcjsKKwlpbnQgZXh0cmFfYnl0ZXM7CisJaW50IGZpbGxlcl9zaXplOworCWludCBk ZWxheV9zdGFydF9saW5rOworCisJaW50IGV4dHJhX3BjbGtfY3ljbGVzOworCWludCBleHRyYV9w Y2xrX2N5Y2xlc19pbl9saW5rX2NsazsKKwlzNjQgcmF0aW9fYnlfdHVfZnA7CisJczY0IGF2ZXJh Z2VfdmFsaWQyX2ZwOworCWludCBuZXdfdmFsaWRfYm91bmRhcnlfbGluazsKKwlpbnQgcmVtYWlu ZGVyX3N5bWJvbHNfZXhpc3Q7CisJaW50IG5fc3ltYm9sczsKKwlzNjQgbl9yZW1haW5kZXJfc3lt Ym9sc19wZXJfbGFuZV9mcDsKKwlzNjQgbGFzdF9wYXJ0aWFsX3R1X2ZwOworCXM2NCBUVV9yYXRp b19lcnJfZnA7CisKKwlpbnQgbl90dXNfaW5jbF9sYXN0X2luY29tcGxldGVfdHU7CisJaW50IGV4 dHJhX3BjbGtfY3ljbGVzX3RtcDsKKwlpbnQgZXh0cmFfcGNsa19jeWNsZXNfaW5fbGlua19jbGtf dG1wOworCWludCBleHRyYV9yZXF1aXJlZF9ieXRlc19uZXdfdG1wOworCWludCBmaWxsZXJfc2l6 ZV90bXA7CisJaW50IGxvd2VyX2ZpbGxlcl9zaXplX3RtcDsKKwlpbnQgZGVsYXlfc3RhcnRfbGlu a190bXA7CisKKwlib29sIGJvdW5kYXJ5X21vZGVyYXRpb25fZW47CisJaW50IGJvdW5kYXJ5X21v ZF9sb3dlcl9lcnI7CisJaW50IHVwcGVyX2JvdW5kYXJ5X2NvdW50OworCWludCBsb3dlcl9ib3Vu ZGFyeV9jb3VudDsKKwlpbnQgaV91cHBlcl9ib3VuZGFyeV9jb3VudDsKKwlpbnQgaV9sb3dlcl9i b3VuZGFyeV9jb3VudDsKKwlpbnQgdmFsaWRfbG93ZXJfYm91bmRhcnlfbGluazsKKwlpbnQgZXZl bl9kaXN0cmlidXRpb25fQkY7CisJaW50IGV2ZW5fZGlzdHJpYnV0aW9uX2xlZ2FjeTsKKwlpbnQg ZXZlbl9kaXN0cmlidXRpb247CisJaW50IG1pbl9oYmxhbmtfdmlvbGF0ZWQ7CisJczY0IGRlbGF5 X3N0YXJ0X3RpbWVfZnA7CisJczY0IGhicF90aW1lX2ZwOworCXM2NCBoYWN0aXZlX3RpbWVfZnA7 CisJczY0IGRpZmZfYWJzX2ZwOworCisJczY0IHJhdGlvOworfTsKKworc3RhdGljIGludCBfdHVf cGFyYW1fY29tcGFyZShzNjQgYSwgczY0IGIpCit7CisJdTMyIGFfaW50LCBhX2ZyYWM7CisJdTMy IGJfaW50LCBiX2ZyYWM7CisKKwlpZiAoYSA9PSBiKQorCQlyZXR1cm4gMDsKKworCWFfaW50ID0g KGEgPj4gMzIpICYgMHg3RkZGRkZGRjsKKwlhX2ZyYWMgPSBhICYgMHhGRkZGRkZGRjsKKworCWJf aW50ID0gKGIgPj4gMzIpICYgMHg3RkZGRkZGRjsKKwliX2ZyYWMgPSBiICYgMHhGRkZGRkZGRjsK KworCWlmIChhX2ludCA+IGJfaW50KQorCQlyZXR1cm4gMTsKKwllbHNlIGlmIChhX2ludCA8IGJf aW50KQorCQlyZXR1cm4gMjsKKwllbHNlIGlmIChhX2ZyYWMgPiBiX2ZyYWMpCisJCXJldHVybiAx OworCWVsc2UKKwkJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyB2b2lkIF90dV92YWxpZF9ib3VuZGFy eV9jYWxjKHN0cnVjdCB0dV9hbGdvX2RhdGEgKnR1KQoreworCXM2NCB0ZW1wMV9mcCwgdGVtcDJf ZnAsIHRlbXAsIHRlbXAxLCB0ZW1wMjsKKwlpbnQgY29tcGFyZV9yZXN1bHRfMSwgY29tcGFyZV9y ZXN1bHRfMiwgY29tcGFyZV9yZXN1bHRfMzsKKworCXRlbXAxX2ZwID0gZHJtX2ZpeHBfZnJvbV9m cmFjdGlvbih0dS0+dHVfc2l6ZSwgMSk7CisJdGVtcDJfZnAgPSBkcm1fZml4cF9tdWwodHUtPnJh dGlvX2ZwLCB0ZW1wMV9mcCk7CisKKwl0dS0+bmV3X3ZhbGlkX2JvdW5kYXJ5X2xpbmsgPSBkcm1f Zml4cDJpbnRfY2VpbCh0ZW1wMl9mcCk7CisKKwl0ZW1wID0gKHR1LT5pX3VwcGVyX2JvdW5kYXJ5 X2NvdW50ICoKKwkJCQl0dS0+bmV3X3ZhbGlkX2JvdW5kYXJ5X2xpbmsgKworCQkJCXR1LT5pX2xv d2VyX2JvdW5kYXJ5X2NvdW50ICoKKwkJCQkodHUtPm5ld192YWxpZF9ib3VuZGFyeV9saW5rLTEp KTsKKwl0dS0+YXZlcmFnZV92YWxpZDJfZnAgPSBkcm1fZml4cF9mcm9tX2ZyYWN0aW9uKHRlbXAs CisJCQkJCSh0dS0+aV91cHBlcl9ib3VuZGFyeV9jb3VudCArCisJCQkJCXR1LT5pX2xvd2VyX2Jv dW5kYXJ5X2NvdW50KSk7CisKKwl0ZW1wMV9mcCA9IGRybV9maXhwX2Zyb21fZnJhY3Rpb24odHUt PmJwcCwgOCk7CisJdGVtcDJfZnAgPSBkcm1fZml4cF9mcm9tX2ZyYWN0aW9uKHR1LT5sd2lkdGgs IDEpOworCXRlbXAxX2ZwID0gZHJtX2ZpeHBfbXVsKHRlbXAyX2ZwLCB0ZW1wMV9mcCk7CisJdGVt cDJfZnAgPSBkcm1fZml4cF9kaXYodGVtcDFfZnAsIHR1LT5hdmVyYWdlX3ZhbGlkMl9mcCk7CisJ dHUtPm5fdHVzID0gZHJtX2ZpeHAyaW50KHRlbXAyX2ZwKTsKKworCXRlbXAxX2ZwID0gZHJtX2Zp eHBfZnJvbV9mcmFjdGlvbih0dS0+bl90dXMsIDEpOworCXRlbXAyX2ZwID0gZHJtX2ZpeHBfbXVs KHRlbXAxX2ZwLCB0dS0+YXZlcmFnZV92YWxpZDJfZnApOworCXRlbXAxX2ZwID0gZHJtX2ZpeHBf ZnJvbV9mcmFjdGlvbih0dS0+bl9zeW1ib2xzLCAxKTsKKwl0ZW1wMl9mcCA9IHRlbXAxX2ZwIC0g dGVtcDJfZnA7CisJdGVtcDFfZnAgPSBkcm1fZml4cF9mcm9tX2ZyYWN0aW9uKHR1LT5ubGFuZXMs IDEpOworCXRlbXAyX2ZwID0gZHJtX2ZpeHBfZGl2KHRlbXAyX2ZwLCB0ZW1wMV9mcCk7CisJdHUt Pm5fcmVtYWluZGVyX3N5bWJvbHNfcGVyX2xhbmVfZnAgPSB0ZW1wMl9mcDsKKworCXRlbXAxX2Zw ID0gZHJtX2ZpeHBfZnJvbV9mcmFjdGlvbih0dS0+dHVfc2l6ZSwgMSk7CisJdHUtPmxhc3RfcGFy dGlhbF90dV9mcCA9CisJCQlkcm1fZml4cF9kaXYodHUtPm5fcmVtYWluZGVyX3N5bWJvbHNfcGVy X2xhbmVfZnAsCisJCQkJCXRlbXAxX2ZwKTsKKworCWlmICh0dS0+bl9yZW1haW5kZXJfc3ltYm9s c19wZXJfbGFuZV9mcCAhPSAwKQorCQl0dS0+cmVtYWluZGVyX3N5bWJvbHNfZXhpc3QgPSAxOwor CWVsc2UKKwkJdHUtPnJlbWFpbmRlcl9zeW1ib2xzX2V4aXN0ID0gMDsKKworCXRlbXAxX2ZwID0g ZHJtX2ZpeHBfZnJvbV9mcmFjdGlvbih0dS0+bl90dXMsIHR1LT5ubGFuZXMpOworCXR1LT5uX3R1 c19wZXJfbGFuZSA9IGRybV9maXhwMmludCh0ZW1wMV9mcCk7CisKKwl0dS0+cGFpcmVkX3R1cyA9 IChpbnQpKCh0dS0+bl90dXNfcGVyX2xhbmUpIC8KKwkJCQkJKHR1LT5pX3VwcGVyX2JvdW5kYXJ5 X2NvdW50ICsKKwkJCQkJIHR1LT5pX2xvd2VyX2JvdW5kYXJ5X2NvdW50KSk7CisKKwl0dS0+cmVt YWluZGVyX3R1cyA9IHR1LT5uX3R1c19wZXJfbGFuZSAtIHR1LT5wYWlyZWRfdHVzICoKKwkJCQkJ CSh0dS0+aV91cHBlcl9ib3VuZGFyeV9jb3VudCArCisJCQkJCQl0dS0+aV9sb3dlcl9ib3VuZGFy eV9jb3VudCk7CisKKwlpZiAoKHR1LT5yZW1haW5kZXJfdHVzIC0gdHUtPmlfdXBwZXJfYm91bmRh cnlfY291bnQpID4gMCkgeworCQl0dS0+cmVtYWluZGVyX3R1c191cHBlciA9IHR1LT5pX3VwcGVy X2JvdW5kYXJ5X2NvdW50OworCQl0dS0+cmVtYWluZGVyX3R1c19sb3dlciA9IHR1LT5yZW1haW5k ZXJfdHVzIC0KKwkJCQkJCXR1LT5pX3VwcGVyX2JvdW5kYXJ5X2NvdW50OworCX0gZWxzZSB7CisJ CXR1LT5yZW1haW5kZXJfdHVzX3VwcGVyID0gdHUtPnJlbWFpbmRlcl90dXM7CisJCXR1LT5yZW1h aW5kZXJfdHVzX2xvd2VyID0gMDsKKwl9CisKKwl0ZW1wID0gdHUtPnBhaXJlZF90dXMgKiAodHUt PmlfdXBwZXJfYm91bmRhcnlfY291bnQgKgorCQkJCXR1LT5uZXdfdmFsaWRfYm91bmRhcnlfbGlu ayArCisJCQkJdHUtPmlfbG93ZXJfYm91bmRhcnlfY291bnQgKgorCQkJCSh0dS0+bmV3X3ZhbGlk X2JvdW5kYXJ5X2xpbmsgLSAxKSkgKworCQkJCSh0dS0+cmVtYWluZGVyX3R1c191cHBlciAqCisJ CQkJIHR1LT5uZXdfdmFsaWRfYm91bmRhcnlfbGluaykgKworCQkJCSh0dS0+cmVtYWluZGVyX3R1 c19sb3dlciAqCisJCQkJKHR1LT5uZXdfdmFsaWRfYm91bmRhcnlfbGluayAtIDEpKTsKKwl0dS0+ dG90YWxfdmFsaWRfZnAgPSBkcm1fZml4cF9mcm9tX2ZyYWN0aW9uKHRlbXAsIDEpOworCisJaWYg KHR1LT5yZW1haW5kZXJfc3ltYm9sc19leGlzdCkgeworCQl0ZW1wMV9mcCA9IHR1LT50b3RhbF92 YWxpZF9mcCArCisJCQkJdHUtPm5fcmVtYWluZGVyX3N5bWJvbHNfcGVyX2xhbmVfZnA7CisJCXRl bXAyX2ZwID0gZHJtX2ZpeHBfZnJvbV9mcmFjdGlvbih0dS0+bl90dXNfcGVyX2xhbmUsIDEpOwor CQl0ZW1wMl9mcCA9IHRlbXAyX2ZwICsgdHUtPmxhc3RfcGFydGlhbF90dV9mcDsKKwkJdGVtcDFf ZnAgPSBkcm1fZml4cF9kaXYodGVtcDFfZnAsIHRlbXAyX2ZwKTsKKwl9IGVsc2UgeworCQl0ZW1w Ml9mcCA9IGRybV9maXhwX2Zyb21fZnJhY3Rpb24odHUtPm5fdHVzX3Blcl9sYW5lLCAxKTsKKwkJ dGVtcDFfZnAgPSBkcm1fZml4cF9kaXYodHUtPnRvdGFsX3ZhbGlkX2ZwLCB0ZW1wMl9mcCk7CisJ fQorCXR1LT5lZmZlY3RpdmVfdmFsaWRfZnAgPSB0ZW1wMV9mcDsKKworCXRlbXAxX2ZwID0gZHJt X2ZpeHBfZnJvbV9mcmFjdGlvbih0dS0+dHVfc2l6ZSwgMSk7CisJdGVtcDJfZnAgPSBkcm1fZml4 cF9tdWwodHUtPnJhdGlvX2ZwLCB0ZW1wMV9mcCk7CisJdHUtPm5fbl9lcnJfZnAgPSB0dS0+ZWZm ZWN0aXZlX3ZhbGlkX2ZwIC0gdGVtcDJfZnA7CisKKwl0ZW1wMV9mcCA9IGRybV9maXhwX2Zyb21f ZnJhY3Rpb24odHUtPnR1X3NpemUsIDEpOworCXRlbXAyX2ZwID0gZHJtX2ZpeHBfbXVsKHR1LT5y YXRpb19mcCwgdGVtcDFfZnApOworCXR1LT5uX2Vycl9mcCA9IHR1LT5hdmVyYWdlX3ZhbGlkMl9m cCAtIHRlbXAyX2ZwOworCisJdHUtPmV2ZW5fZGlzdHJpYnV0aW9uID0gdHUtPm5fdHVzICUgdHUt Pm5sYW5lcyA9PSAwID8gMSA6IDA7CisKKwl0ZW1wMV9mcCA9IGRybV9maXhwX2Zyb21fZnJhY3Rp b24odHUtPmJwcCwgOCk7CisJdGVtcDJfZnAgPSBkcm1fZml4cF9mcm9tX2ZyYWN0aW9uKHR1LT5s d2lkdGgsIDEpOworCXRlbXAxX2ZwID0gZHJtX2ZpeHBfbXVsKHRlbXAyX2ZwLCB0ZW1wMV9mcCk7 CisJdGVtcDJfZnAgPSBkcm1fZml4cF9kaXYodGVtcDFfZnAsIHR1LT5hdmVyYWdlX3ZhbGlkMl9m cCk7CisKKwlpZiAodGVtcDJfZnApCisJCXR1LT5uX3R1c19pbmNsX2xhc3RfaW5jb21wbGV0ZV90 dSA9IGRybV9maXhwMmludF9jZWlsKHRlbXAyX2ZwKTsKKwllbHNlCisJCXR1LT5uX3R1c19pbmNs X2xhc3RfaW5jb21wbGV0ZV90dSA9IDA7CisKKwl0ZW1wMSA9IDA7CisJdGVtcDFfZnAgPSBkcm1f Zml4cF9mcm9tX2ZyYWN0aW9uKHR1LT50dV9zaXplLCAxKTsKKwl0ZW1wMl9mcCA9IGRybV9maXhw X211bCh0dS0+b3JpZ2luYWxfcmF0aW9fZnAsIHRlbXAxX2ZwKTsKKwl0ZW1wMV9mcCA9IHR1LT5h dmVyYWdlX3ZhbGlkMl9mcCAtIHRlbXAyX2ZwOworCXRlbXAyX2ZwID0gZHJtX2ZpeHBfZnJvbV9m cmFjdGlvbih0dS0+bl90dXNfaW5jbF9sYXN0X2luY29tcGxldGVfdHUsIDEpOworCXRlbXAxX2Zw ID0gZHJtX2ZpeHBfbXVsKHRlbXAyX2ZwLCB0ZW1wMV9mcCk7CisKKwlpZiAodGVtcDFfZnApCisJ CXRlbXAxID0gZHJtX2ZpeHAyaW50X2NlaWwodGVtcDFfZnApOworCisJdGVtcCA9IHR1LT5pX3Vw cGVyX2JvdW5kYXJ5X2NvdW50ICogdHUtPm5sYW5lczsKKwl0ZW1wMV9mcCA9IGRybV9maXhwX2Zy b21fZnJhY3Rpb24odHUtPnR1X3NpemUsIDEpOworCXRlbXAyX2ZwID0gZHJtX2ZpeHBfbXVsKHR1 LT5vcmlnaW5hbF9yYXRpb19mcCwgdGVtcDFfZnApOworCXRlbXAxX2ZwID0gZHJtX2ZpeHBfZnJv bV9mcmFjdGlvbih0dS0+bmV3X3ZhbGlkX2JvdW5kYXJ5X2xpbmssIDEpOworCXRlbXAyX2ZwID0g dGVtcDFfZnAgLSB0ZW1wMl9mcDsKKwl0ZW1wMV9mcCA9IGRybV9maXhwX2Zyb21fZnJhY3Rpb24o dGVtcCwgMSk7CisJdGVtcDJfZnAgPSBkcm1fZml4cF9tdWwodGVtcDFfZnAsIHRlbXAyX2ZwKTsK KworCWlmICh0ZW1wMl9mcCkKKwkJdGVtcDIgPSBkcm1fZml4cDJpbnRfY2VpbCh0ZW1wMl9mcCk7 CisJZWxzZQorCQl0ZW1wMiA9IDA7CisJdHUtPmV4dHJhX3JlcXVpcmVkX2J5dGVzX25ld190bXAg PSAoaW50KSh0ZW1wMSArIHRlbXAyKTsKKworCXRlbXAxX2ZwID0gZHJtX2ZpeHBfZnJvbV9mcmFj dGlvbig4LCB0dS0+YnBwKTsKKwl0ZW1wMl9mcCA9IGRybV9maXhwX2Zyb21fZnJhY3Rpb24oCisJ dHUtPmV4dHJhX3JlcXVpcmVkX2J5dGVzX25ld190bXAsIDEpOworCXRlbXAxX2ZwID0gZHJtX2Zp eHBfbXVsKHRlbXAyX2ZwLCB0ZW1wMV9mcCk7CisKKwlpZiAodGVtcDFfZnApCisJCXR1LT5leHRy YV9wY2xrX2N5Y2xlc190bXAgPSBkcm1fZml4cDJpbnRfY2VpbCh0ZW1wMV9mcCk7CisJZWxzZQor CQl0dS0+ZXh0cmFfcGNsa19jeWNsZXNfdG1wID0gMDsKKworCXRlbXAxX2ZwID0gZHJtX2ZpeHBf ZnJvbV9mcmFjdGlvbih0dS0+ZXh0cmFfcGNsa19jeWNsZXNfdG1wLCAxKTsKKwl0ZW1wMl9mcCA9 IGRybV9maXhwX2Rpdih0dS0+bGNsa19mcCwgdHUtPnBjbGtfZnApOworCXRlbXAxX2ZwID0gZHJt X2ZpeHBfbXVsKHRlbXAxX2ZwLCB0ZW1wMl9mcCk7CisKKwlpZiAodGVtcDFfZnApCisJCXR1LT5l eHRyYV9wY2xrX2N5Y2xlc19pbl9saW5rX2Nsa190bXAgPQorCQkJCQkJZHJtX2ZpeHAyaW50X2Nl aWwodGVtcDFfZnApOworCWVsc2UKKwkJdHUtPmV4dHJhX3BjbGtfY3ljbGVzX2luX2xpbmtfY2xr X3RtcCA9IDA7CisKKwl0dS0+ZmlsbGVyX3NpemVfdG1wID0gdHUtPnR1X3NpemUgLSB0dS0+bmV3 X3ZhbGlkX2JvdW5kYXJ5X2xpbms7CisKKwl0dS0+bG93ZXJfZmlsbGVyX3NpemVfdG1wID0gdHUt PmZpbGxlcl9zaXplX3RtcCArIDE7CisKKwl0dS0+ZGVsYXlfc3RhcnRfbGlua190bXAgPSB0dS0+ ZXh0cmFfcGNsa19jeWNsZXNfaW5fbGlua19jbGtfdG1wICsKKwkJCQkJdHUtPmxvd2VyX2ZpbGxl cl9zaXplX3RtcCArCisJCQkJCXR1LT5leHRyYV9idWZmZXJfbWFyZ2luOworCisJdGVtcDFfZnAg PSBkcm1fZml4cF9mcm9tX2ZyYWN0aW9uKHR1LT5kZWxheV9zdGFydF9saW5rX3RtcCwgMSk7CisJ dHUtPmRlbGF5X3N0YXJ0X3RpbWVfZnAgPSBkcm1fZml4cF9kaXYodGVtcDFfZnAsIHR1LT5sY2xr X2ZwKTsKKworCWNvbXBhcmVfcmVzdWx0XzEgPSBfdHVfcGFyYW1fY29tcGFyZSh0dS0+bl9uX2Vy cl9mcCwgdHUtPmRpZmZfYWJzX2ZwKTsKKwlpZiAoY29tcGFyZV9yZXN1bHRfMSA9PSAyKQorCQlj b21wYXJlX3Jlc3VsdF8xID0gMTsKKwllbHNlCisJCWNvbXBhcmVfcmVzdWx0XzEgPSAwOworCisJ Y29tcGFyZV9yZXN1bHRfMiA9IF90dV9wYXJhbV9jb21wYXJlKHR1LT5uX25fZXJyX2ZwLCB0dS0+ ZXJyX2ZwKTsKKwlpZiAoY29tcGFyZV9yZXN1bHRfMiA9PSAyKQorCQljb21wYXJlX3Jlc3VsdF8y ID0gMTsKKwllbHNlCisJCWNvbXBhcmVfcmVzdWx0XzIgPSAwOworCisJY29tcGFyZV9yZXN1bHRf MyA9IF90dV9wYXJhbV9jb21wYXJlKHR1LT5oYnBfdGltZV9mcCwKKwkJCQkJdHUtPmRlbGF5X3N0 YXJ0X3RpbWVfZnApOworCWlmIChjb21wYXJlX3Jlc3VsdF8zID09IDIpCisJCWNvbXBhcmVfcmVz dWx0XzMgPSAwOworCWVsc2UKKwkJY29tcGFyZV9yZXN1bHRfMyA9IDE7CisKKwlpZiAoKCh0dS0+ ZXZlbl9kaXN0cmlidXRpb24gPT0gMSkgfHwKKwkJCSgodHUtPmV2ZW5fZGlzdHJpYnV0aW9uX0JG ID09IDApICYmCisJCQkodHUtPmV2ZW5fZGlzdHJpYnV0aW9uX2xlZ2FjeSA9PSAwKSkpICYmCisJ CQl0dS0+bl9lcnJfZnAgPj0gMCAmJiB0dS0+bl9uX2Vycl9mcCA+PSAwICYmCisJCQljb21wYXJl X3Jlc3VsdF8yICYmCisJCQkoY29tcGFyZV9yZXN1bHRfMSB8fCAodHUtPm1pbl9oYmxhbmtfdmlv bGF0ZWQgPT0gMSkpICYmCisJCQkodHUtPm5ld192YWxpZF9ib3VuZGFyeV9saW5rIC0gMSkgPiAw ICYmCisJCQljb21wYXJlX3Jlc3VsdF8zICYmCisJCQkodHUtPmRlbGF5X3N0YXJ0X2xpbmtfdG1w IDw9IDEwMjMpKSB7CisJCXR1LT51cHBlcl9ib3VuZGFyeV9jb3VudCA9IHR1LT5pX3VwcGVyX2Jv dW5kYXJ5X2NvdW50OworCQl0dS0+bG93ZXJfYm91bmRhcnlfY291bnQgPSB0dS0+aV9sb3dlcl9i b3VuZGFyeV9jb3VudDsKKwkJdHUtPmVycl9mcCA9IHR1LT5uX25fZXJyX2ZwOworCQl0dS0+Ym91 bmRhcnlfbW9kZXJhdGlvbl9lbiA9IHRydWU7CisJCXR1LT50dV9zaXplX2Rlc2lyZWQgPSB0dS0+ dHVfc2l6ZTsKKwkJdHUtPnZhbGlkX2JvdW5kYXJ5X2xpbmsgPSB0dS0+bmV3X3ZhbGlkX2JvdW5k YXJ5X2xpbms7CisJCXR1LT5lZmZlY3RpdmVfdmFsaWRfcmVjb3JkZWRfZnAgPSB0dS0+ZWZmZWN0 aXZlX3ZhbGlkX2ZwOworCQl0dS0+ZXZlbl9kaXN0cmlidXRpb25fQkYgPSAxOworCQl0dS0+ZGVs YXlfc3RhcnRfbGluayA9IHR1LT5kZWxheV9zdGFydF9saW5rX3RtcDsKKwl9IGVsc2UgaWYgKHR1 LT5ib3VuZGFyeV9tb2RfbG93ZXJfZXJyID09IDApIHsKKwkJY29tcGFyZV9yZXN1bHRfMSA9IF90 dV9wYXJhbV9jb21wYXJlKHR1LT5uX25fZXJyX2ZwLAorCQkJCQkJCXR1LT5kaWZmX2Fic19mcCk7 CisJCWlmIChjb21wYXJlX3Jlc3VsdF8xID09IDIpCisJCQl0dS0+Ym91bmRhcnlfbW9kX2xvd2Vy X2VyciA9IDE7CisJfQorfQorCitzdGF0aWMgdm9pZCBfZHBfY3RybF9jYWxjX3R1KHN0cnVjdCBk cF90dV9jYWxjX2lucHV0ICppbiwKKwkJCQkgICBzdHJ1Y3QgZHBfdmNfdHVfbWFwcGluZ190YWJs ZSAqdHVfdGFibGUpCit7CisJc3RydWN0IHR1X2FsZ29fZGF0YSB0dTsKKwlpbnQgY29tcGFyZV9y ZXN1bHRfMSwgY29tcGFyZV9yZXN1bHRfMjsKKwl1NjQgdGVtcCA9IDA7CisJczY0IHRlbXBfZnAg PSAwLCB0ZW1wMV9mcCA9IDAsIHRlbXAyX2ZwID0gMDsKKworCXM2NCBMQ0xLX0ZBU1RfU0tFV19m cCA9IGRybV9maXhwX2Zyb21fZnJhY3Rpb24oNiwgMTAwMDApOyAvKiAwLjAwMDYgKi8KKwlzNjQg Y29uc3RfcDQ5X2ZwID0gZHJtX2ZpeHBfZnJvbV9mcmFjdGlvbig0OSwgMTAwKTsgLyogMC40OSAq LworCXM2NCBjb25zdF9wNTZfZnAgPSBkcm1fZml4cF9mcm9tX2ZyYWN0aW9uKDU2LCAxMDApOyAv KiAwLjU2ICovCisJczY0IFJBVElPX1NDQUxFX2ZwID0gZHJtX2ZpeHBfZnJvbV9mcmFjdGlvbigx MDAxLCAxMDAwKTsKKworCXU4IERQX0JSVVRFX0ZPUkNFID0gMTsKKwlzNjQgQlJVVEVfRk9SQ0Vf VEhSRVNIT0xEX2ZwID0gZHJtX2ZpeHBfZnJvbV9mcmFjdGlvbigxLCAxMCk7IC8qIDAuMSAqLwor CXVpbnQgRVhUUkFfUElYQ0xLX0NZQ0xFX0RFTEFZID0gNDsKKwl1aW50IEhCTEFOS19NQVJHSU4g PSA0OworCisJbWVtc2V0KCZ0dSwgMCwgc2l6ZW9mKHR1KSk7CisKKwl0dS5sY2xrX2ZwICAgICAg ICAgICAgICA9IGRybV9maXhwX2Zyb21fZnJhY3Rpb24oaW4tPmxjbGssIDEpOworCXR1LnBjbGtf ZnAgICAgICAgICAgICAgID0gZHJtX2ZpeHBfZnJvbV9mcmFjdGlvbihpbi0+cGNsa19raHosIDEw MDApOworCXR1Lmx3aWR0aCAgICAgICAgICAgICAgID0gaW4tPmhhY3RpdmU7CisJdHUuaGJwX3Jl bGF0aXZlX3RvX3BjbGsgPSBpbi0+aHBvcmNoOworCXR1Lm5sYW5lcyAgICAgICAgICAgICAgID0g aW4tPm5sYW5lczsKKwl0dS5icHAgICAgICAgICAgICAgICAgICA9IGluLT5icHA7CisJdHUucGl4 ZWxFbmMgICAgICAgICAgICAgPSBpbi0+cGl4ZWxfZW5jOworCXR1LmRzY19lbiAgICAgICAgICAg ICAgID0gaW4tPmRzY19lbjsKKwl0dS5hc3luY19lbiAgICAgICAgICAgICA9IGluLT5hc3luY19l bjsKKworCXR1LmVycl9mcCA9IGRybV9maXhwX2Zyb21fZnJhY3Rpb24oMTAwMCwgMSk7IC8qIDEw MDAgKi8KKworCWlmICh0dS5waXhlbEVuYyA9PSA0MjApIHsKKwkJdGVtcF9mcCA9IGRybV9maXhw X2Zyb21fZnJhY3Rpb24oMiwgMSk7CisJCXR1LnBjbGtfZnAgPSBkcm1fZml4cF9kaXYodHUucGNs a19mcCwgdGVtcF9mcCk7CisJCXR1Lmx3aWR0aCAvPSAyOworCQl0dS5oYnBfcmVsYXRpdmVfdG9f cGNsayAvPSAyOworCX0KKworCWlmICh0dS5waXhlbEVuYyA9PSA0MjIpIHsKKwkJc3dpdGNoICh0 dS5icHApIHsKKwkJY2FzZSAyNDoKKwkJCXR1LmJwcCA9IDE2OworCQkJdHUuYnBjID0gODsKKwkJ CWJyZWFrOworCQljYXNlIDMwOgorCQkJdHUuYnBwID0gMjA7CisJCQl0dS5icGMgPSAxMDsKKwkJ CWJyZWFrOworCQlkZWZhdWx0OgorCQkJdHUuYnBwID0gMTY7CisJCQl0dS5icGMgPSA4OworCQkJ YnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQl0dS5icGMgPSB0dS5icHAvMzsKKwl9CisKKwl0ZW1w MV9mcCA9IGRybV9maXhwX2Zyb21fZnJhY3Rpb24oNCwgMSk7CisJdGVtcDJfZnAgPSBkcm1fZml4 cF9tdWwodGVtcDFfZnAsIHR1LmxjbGtfZnApOworCXRlbXBfZnAgPSBkcm1fZml4cF9kaXYodGVt cDJfZnAsIHR1LnBjbGtfZnApOworCXR1LmV4dHJhX2J1ZmZlcl9tYXJnaW4gPSBkcm1fZml4cDJp bnRfY2VpbCh0ZW1wX2ZwKTsKKworCXRlbXAxX2ZwID0gZHJtX2ZpeHBfZnJvbV9mcmFjdGlvbih0 dS5icHAsIDgpOworCXRlbXAyX2ZwID0gZHJtX2ZpeHBfbXVsKHR1LnBjbGtfZnAsIHRlbXAxX2Zw KTsKKwl0ZW1wMV9mcCA9IGRybV9maXhwX2Zyb21fZnJhY3Rpb24odHUubmxhbmVzLCAxKTsKKwl0 ZW1wMl9mcCA9IGRybV9maXhwX2Rpdih0ZW1wMl9mcCwgdGVtcDFfZnApOworCXR1LnJhdGlvX2Zw ID0gZHJtX2ZpeHBfZGl2KHRlbXAyX2ZwLCB0dS5sY2xrX2ZwKTsKKworCXR1Lm9yaWdpbmFsX3Jh dGlvX2ZwID0gdHUucmF0aW9fZnA7CisJdHUuYm91bmRhcnlfbW9kZXJhdGlvbl9lbiA9IGZhbHNl OworCXR1LnVwcGVyX2JvdW5kYXJ5X2NvdW50ID0gMDsKKwl0dS5sb3dlcl9ib3VuZGFyeV9jb3Vu dCA9IDA7CisJdHUuaV91cHBlcl9ib3VuZGFyeV9jb3VudCA9IDA7CisJdHUuaV9sb3dlcl9ib3Vu ZGFyeV9jb3VudCA9IDA7CisJdHUudmFsaWRfbG93ZXJfYm91bmRhcnlfbGluayA9IDA7CisJdHUu ZXZlbl9kaXN0cmlidXRpb25fQkYgPSAwOworCXR1LmV2ZW5fZGlzdHJpYnV0aW9uX2xlZ2FjeSA9 IDA7CisJdHUuZXZlbl9kaXN0cmlidXRpb24gPSAwOworCXR1LmRlbGF5X3N0YXJ0X3RpbWVfZnAg PSAwOworCisJdHUuZXJyX2ZwID0gZHJtX2ZpeHBfZnJvbV9mcmFjdGlvbigxMDAwLCAxKTsKKwl0 dS5uX2Vycl9mcCA9IDA7CisJdHUubl9uX2Vycl9mcCA9IDA7CisKKwl0dS5yYXRpbyA9IGRybV9m aXhwMmludCh0dS5yYXRpb19mcCk7CisJaWYgKCgoKHUzMil0dS5sd2lkdGggJSB0dS5ubGFuZXMp ICE9IDApICYmCisJCQkhdHUucmF0aW8gJiYgdHUuZHNjX2VuID09IDApIHsKKwkJdHUucmF0aW9f ZnAgPSBkcm1fZml4cF9tdWwodHUucmF0aW9fZnAsIFJBVElPX1NDQUxFX2ZwKTsKKwkJdHUucmF0 aW8gPSBkcm1fZml4cDJpbnQodHUucmF0aW9fZnApOworCQlpZiAodHUucmF0aW8pCisJCQl0dS5y YXRpb19mcCA9IGRybV9maXhwX2Zyb21fZnJhY3Rpb24oMSwgMSk7CisJfQorCisJaWYgKHR1LnJh dGlvID4gMSkKKwkJdHUucmF0aW8gPSAxOworCisJaWYgKHR1LnJhdGlvID09IDEpCisJCWdvdG8g dHVfc2l6ZV9jYWxjOworCisJY29tcGFyZV9yZXN1bHRfMSA9IF90dV9wYXJhbV9jb21wYXJlKHR1 LnJhdGlvX2ZwLCBjb25zdF9wNDlfZnApOworCWlmICghY29tcGFyZV9yZXN1bHRfMSB8fCBjb21w YXJlX3Jlc3VsdF8xID09IDEpCisJCWNvbXBhcmVfcmVzdWx0XzEgPSAxOworCWVsc2UKKwkJY29t cGFyZV9yZXN1bHRfMSA9IDA7CisKKwljb21wYXJlX3Jlc3VsdF8yID0gX3R1X3BhcmFtX2NvbXBh cmUodHUucmF0aW9fZnAsIGNvbnN0X3A1Nl9mcCk7CisJaWYgKCFjb21wYXJlX3Jlc3VsdF8yIHx8 IGNvbXBhcmVfcmVzdWx0XzIgPT0gMikKKwkJY29tcGFyZV9yZXN1bHRfMiA9IDE7CisJZWxzZQor CQljb21wYXJlX3Jlc3VsdF8yID0gMDsKKworCWlmICh0dS5kc2NfZW4gJiYgY29tcGFyZV9yZXN1 bHRfMSAmJiBjb21wYXJlX3Jlc3VsdF8yKSB7CisJCUhCTEFOS19NQVJHSU4gKz0gNDsKKwkJRFJN X0RFQlVHX0RQKCJJbmZvOiBpbmNyZWFzZSBIQkxBTktfTUFSR0lOIHRvICVkXG4iLCBIQkxBTktf TUFSR0lOKTsKKwl9CisKK3R1X3NpemVfY2FsYzoKKwlmb3IgKHR1LnR1X3NpemUgPSAzMjsgdHUu dHVfc2l6ZSA8PSA2NDsgdHUudHVfc2l6ZSsrKSB7CisJCXRlbXAxX2ZwID0gZHJtX2ZpeHBfZnJv bV9mcmFjdGlvbih0dS50dV9zaXplLCAxKTsKKwkJdGVtcDJfZnAgPSBkcm1fZml4cF9tdWwodHUu cmF0aW9fZnAsIHRlbXAxX2ZwKTsKKwkJdGVtcCA9IGRybV9maXhwMmludF9jZWlsKHRlbXAyX2Zw KTsKKwkJdGVtcDFfZnAgPSBkcm1fZml4cF9mcm9tX2ZyYWN0aW9uKHRlbXAsIDEpOworCQl0dS5u X2Vycl9mcCA9IHRlbXAxX2ZwIC0gdGVtcDJfZnA7CisKKwkJaWYgKHR1Lm5fZXJyX2ZwIDwgdHUu ZXJyX2ZwKSB7CisJCQl0dS5lcnJfZnAgPSB0dS5uX2Vycl9mcDsKKwkJCXR1LnR1X3NpemVfZGVz aXJlZCA9IHR1LnR1X3NpemU7CisJCX0KKwl9CisKKwl0dS50dV9zaXplX21pbnVzMSA9IHR1LnR1 X3NpemVfZGVzaXJlZCAtIDE7CisKKwl0ZW1wMV9mcCA9IGRybV9maXhwX2Zyb21fZnJhY3Rpb24o dHUudHVfc2l6ZV9kZXNpcmVkLCAxKTsKKwl0ZW1wMl9mcCA9IGRybV9maXhwX211bCh0dS5yYXRp b19mcCwgdGVtcDFfZnApOworCXR1LnZhbGlkX2JvdW5kYXJ5X2xpbmsgPSBkcm1fZml4cDJpbnRf Y2VpbCh0ZW1wMl9mcCk7CisKKwl0ZW1wMV9mcCA9IGRybV9maXhwX2Zyb21fZnJhY3Rpb24odHUu YnBwLCA4KTsKKwl0ZW1wMl9mcCA9IGRybV9maXhwX2Zyb21fZnJhY3Rpb24odHUubHdpZHRoLCAx KTsKKwl0ZW1wMl9mcCA9IGRybV9maXhwX211bCh0ZW1wMl9mcCwgdGVtcDFfZnApOworCisJdGVt cDFfZnAgPSBkcm1fZml4cF9mcm9tX2ZyYWN0aW9uKHR1LnZhbGlkX2JvdW5kYXJ5X2xpbmssIDEp OworCXRlbXAyX2ZwID0gZHJtX2ZpeHBfZGl2KHRlbXAyX2ZwLCB0ZW1wMV9mcCk7CisJdHUubl90 dXMgPSBkcm1fZml4cDJpbnQodGVtcDJfZnApOworCisJdHUuZXZlbl9kaXN0cmlidXRpb25fbGVn YWN5ID0gdHUubl90dXMgJSB0dS5ubGFuZXMgPT0gMCA/IDEgOiAwOworCURSTV9ERUJVR19EUCgi SW5mbzogbl9zeW0gPSAlZCwgbnVtX29mX3R1cyA9ICVkXG4iLAorCQl0dS52YWxpZF9ib3VuZGFy eV9saW5rLCB0dS5uX3R1cyk7CisKKwl0ZW1wMV9mcCA9IGRybV9maXhwX2Zyb21fZnJhY3Rpb24o dHUudHVfc2l6ZV9kZXNpcmVkLCAxKTsKKwl0ZW1wMl9mcCA9IGRybV9maXhwX211bCh0dS5vcmln aW5hbF9yYXRpb19mcCwgdGVtcDFfZnApOworCXRlbXAxX2ZwID0gZHJtX2ZpeHBfZnJvbV9mcmFj dGlvbih0dS52YWxpZF9ib3VuZGFyeV9saW5rLCAxKTsKKwl0ZW1wMl9mcCA9IHRlbXAxX2ZwIC0g dGVtcDJfZnA7CisJdGVtcDFfZnAgPSBkcm1fZml4cF9mcm9tX2ZyYWN0aW9uKHR1Lm5fdHVzICsg MSwgMSk7CisJdGVtcDJfZnAgPSBkcm1fZml4cF9tdWwodGVtcDFfZnAsIHRlbXAyX2ZwKTsKKwor CXRlbXAgPSBkcm1fZml4cDJpbnQodGVtcDJfZnApOworCWlmICh0ZW1wICYmIHRlbXAyX2ZwKQor CQl0dS5leHRyYV9ieXRlcyA9IGRybV9maXhwMmludF9jZWlsKHRlbXAyX2ZwKTsKKwllbHNlCisJ CXR1LmV4dHJhX2J5dGVzID0gMDsKKworCXRlbXAxX2ZwID0gZHJtX2ZpeHBfZnJvbV9mcmFjdGlv bih0dS5leHRyYV9ieXRlcywgMSk7CisJdGVtcDJfZnAgPSBkcm1fZml4cF9mcm9tX2ZyYWN0aW9u KDgsIHR1LmJwcCk7CisJdGVtcDFfZnAgPSBkcm1fZml4cF9tdWwodGVtcDFfZnAsIHRlbXAyX2Zw KTsKKworCXRlbXAgPSBkcm1fZml4cDJpbnQodGVtcDFfZnApOworCWlmICh0ZW1wICYmIHRlbXAx X2ZwKQorCQl0dS5leHRyYV9wY2xrX2N5Y2xlcyA9IGRybV9maXhwMmludF9jZWlsKHRlbXAxX2Zw KTsKKwllbHNlCisJCXR1LmV4dHJhX3BjbGtfY3ljbGVzID0gMDsKKworCXRlbXAxX2ZwID0gZHJt X2ZpeHBfZGl2KHR1LmxjbGtfZnAsIHR1LnBjbGtfZnApOworCXRlbXAyX2ZwID0gZHJtX2ZpeHBf ZnJvbV9mcmFjdGlvbih0dS5leHRyYV9wY2xrX2N5Y2xlcywgMSk7CisJdGVtcDFfZnAgPSBkcm1f Zml4cF9tdWwodGVtcDJfZnAsIHRlbXAxX2ZwKTsKKworCXRlbXAgPSBkcm1fZml4cDJpbnQodGVt cDFfZnApOworCWlmICh0ZW1wICYmIHRlbXAxX2ZwKQorCQl0dS5leHRyYV9wY2xrX2N5Y2xlc19p bl9saW5rX2NsayA9IGRybV9maXhwMmludF9jZWlsKHRlbXAxX2ZwKTsKKwllbHNlCisJCXR1LmV4 dHJhX3BjbGtfY3ljbGVzX2luX2xpbmtfY2xrID0gMDsKKworCXR1LmZpbGxlcl9zaXplID0gdHUu dHVfc2l6ZV9kZXNpcmVkIC0gdHUudmFsaWRfYm91bmRhcnlfbGluazsKKworCXRlbXAxX2ZwID0g ZHJtX2ZpeHBfZnJvbV9mcmFjdGlvbih0dS50dV9zaXplX2Rlc2lyZWQsIDEpOworCXR1LnJhdGlv X2J5X3R1X2ZwID0gZHJtX2ZpeHBfbXVsKHR1LnJhdGlvX2ZwLCB0ZW1wMV9mcCk7CisKKwl0dS5k ZWxheV9zdGFydF9saW5rID0gdHUuZXh0cmFfcGNsa19jeWNsZXNfaW5fbGlua19jbGsgKworCQkJ CXR1LmZpbGxlcl9zaXplICsgdHUuZXh0cmFfYnVmZmVyX21hcmdpbjsKKworCXR1LnJlc3VsdGlu Z192YWxpZF9mcCA9CisJCQlkcm1fZml4cF9mcm9tX2ZyYWN0aW9uKHR1LnZhbGlkX2JvdW5kYXJ5 X2xpbmssIDEpOworCisJdGVtcDFfZnAgPSBkcm1fZml4cF9mcm9tX2ZyYWN0aW9uKHR1LnR1X3Np emVfZGVzaXJlZCwgMSk7CisJdGVtcDJfZnAgPSBkcm1fZml4cF9kaXYodHUucmVzdWx0aW5nX3Zh bGlkX2ZwLCB0ZW1wMV9mcCk7CisJdHUuVFVfcmF0aW9fZXJyX2ZwID0gdGVtcDJfZnAgLSB0dS5v cmlnaW5hbF9yYXRpb19mcDsKKworCXRlbXAxX2ZwID0gZHJtX2ZpeHBfZnJvbV9mcmFjdGlvbigK KwkJCSh0dS5oYnBfcmVsYXRpdmVfdG9fcGNsayAtIEhCTEFOS19NQVJHSU4pLCAxKTsKKwl0dS5o YnBfdGltZV9mcCA9IGRybV9maXhwX2Rpdih0ZW1wMV9mcCwgdHUucGNsa19mcCk7CisKKwl0ZW1w MV9mcCA9IGRybV9maXhwX2Zyb21fZnJhY3Rpb24odHUuZGVsYXlfc3RhcnRfbGluaywgMSk7CisJ dHUuZGVsYXlfc3RhcnRfdGltZV9mcCA9IGRybV9maXhwX2Rpdih0ZW1wMV9mcCwgdHUubGNsa19m cCk7CisKKwljb21wYXJlX3Jlc3VsdF8xID0gX3R1X3BhcmFtX2NvbXBhcmUodHUuaGJwX3RpbWVf ZnAsCisJCQkJCXR1LmRlbGF5X3N0YXJ0X3RpbWVfZnApOworCWlmIChjb21wYXJlX3Jlc3VsdF8x ID09IDIpIC8qIGlmIChoYnBfdGltZV9mcCA8IGRlbGF5X3N0YXJ0X3RpbWVfZnApICovCisJCXR1 Lm1pbl9oYmxhbmtfdmlvbGF0ZWQgPSAxOworCisJdGVtcDFfZnAgPSBkcm1fZml4cF9mcm9tX2Zy YWN0aW9uKHR1Lmx3aWR0aCwgMSk7CisJdHUuaGFjdGl2ZV90aW1lX2ZwID0gZHJtX2ZpeHBfZGl2 KHRlbXAxX2ZwLCB0dS5wY2xrX2ZwKTsKKworCWNvbXBhcmVfcmVzdWx0XzIgPSBfdHVfcGFyYW1f Y29tcGFyZSh0dS5oYWN0aXZlX3RpbWVfZnAsCisJCQkJCQl0dS5kZWxheV9zdGFydF90aW1lX2Zw KTsKKwlpZiAoY29tcGFyZV9yZXN1bHRfMiA9PSAyKQorCQl0dS5taW5faGJsYW5rX3Zpb2xhdGVk ID0gMTsKKworCXR1LmRlbGF5X3N0YXJ0X3RpbWVfZnAgPSAwOworCisJLyogYnJ1dGUgZm9yY2Ug Ki8KKworCXR1LmRlbGF5X3N0YXJ0X2xpbmtfZXh0cmFfcGl4Y2xrID0gRVhUUkFfUElYQ0xLX0NZ Q0xFX0RFTEFZOworCXR1LmRpZmZfYWJzX2ZwID0gdHUucmVzdWx0aW5nX3ZhbGlkX2ZwIC0gdHUu cmF0aW9fYnlfdHVfZnA7CisKKwl0ZW1wID0gZHJtX2ZpeHAyaW50KHR1LmRpZmZfYWJzX2ZwKTsK KwlpZiAoIXRlbXAgJiYgdHUuZGlmZl9hYnNfZnAgPD0gMHhmZmZmKQorCQl0dS5kaWZmX2Fic19m cCA9IDA7CisKKwkvKiBpZihkaWZmX2FicyA8IDApIGRpZmZfYWJzICo9IC0xICovCisJaWYgKHR1 LmRpZmZfYWJzX2ZwIDwgMCkKKwkJdHUuZGlmZl9hYnNfZnAgPSBkcm1fZml4cF9tdWwodHUuZGlm Zl9hYnNfZnAsIC0xKTsKKworCXR1LmJvdW5kYXJ5X21vZF9sb3dlcl9lcnIgPSAwOworCWlmICgo dHUuZGlmZl9hYnNfZnAgIT0gMCAmJgorCQkJKCh0dS5kaWZmX2Fic19mcCA+IEJSVVRFX0ZPUkNF X1RIUkVTSE9MRF9mcCkgfHwKKwkJCSAodHUuZXZlbl9kaXN0cmlidXRpb25fbGVnYWN5ID09IDAp IHx8CisJCQkgKERQX0JSVVRFX0ZPUkNFID09IDEpKSkgfHwKKwkJCSh0dS5taW5faGJsYW5rX3Zp b2xhdGVkID09IDEpKSB7CisJCWRvIHsKKwkJCXR1LmVycl9mcCA9IGRybV9maXhwX2Zyb21fZnJh Y3Rpb24oMTAwMCwgMSk7CisKKwkJCXRlbXAxX2ZwID0gZHJtX2ZpeHBfZGl2KHR1LmxjbGtfZnAs IHR1LnBjbGtfZnApOworCQkJdGVtcDJfZnAgPSBkcm1fZml4cF9mcm9tX2ZyYWN0aW9uKAorCQkJ CQl0dS5kZWxheV9zdGFydF9saW5rX2V4dHJhX3BpeGNsaywgMSk7CisJCQl0ZW1wMV9mcCA9IGRy bV9maXhwX211bCh0ZW1wMl9mcCwgdGVtcDFfZnApOworCisJCQlpZiAodGVtcDFfZnApCisJCQkJ dHUuZXh0cmFfYnVmZmVyX21hcmdpbiA9CisJCQkJCWRybV9maXhwMmludF9jZWlsKHRlbXAxX2Zw KTsKKwkJCWVsc2UKKwkJCQl0dS5leHRyYV9idWZmZXJfbWFyZ2luID0gMDsKKworCQkJdGVtcDFf ZnAgPSBkcm1fZml4cF9mcm9tX2ZyYWN0aW9uKHR1LmJwcCwgOCk7CisJCQl0ZW1wMl9mcCA9IGRy bV9maXhwX2Zyb21fZnJhY3Rpb24odHUubHdpZHRoLCAxKTsKKwkJCXRlbXAxX2ZwID0gZHJtX2Zp eHBfbXVsKHRlbXAyX2ZwLCB0ZW1wMV9mcCk7CisKKwkJCWlmICh0ZW1wMV9mcCkKKwkJCQl0dS5u X3N5bWJvbHMgPSBkcm1fZml4cDJpbnRfY2VpbCh0ZW1wMV9mcCk7CisJCQllbHNlCisJCQkJdHUu bl9zeW1ib2xzID0gMDsKKworCQkJZm9yICh0dS50dV9zaXplID0gMzI7IHR1LnR1X3NpemUgPD0g NjQ7IHR1LnR1X3NpemUrKykgeworCQkJCWZvciAodHUuaV91cHBlcl9ib3VuZGFyeV9jb3VudCA9 IDE7CisJCQkJCXR1LmlfdXBwZXJfYm91bmRhcnlfY291bnQgPD0gMTU7CisJCQkJCXR1LmlfdXBw ZXJfYm91bmRhcnlfY291bnQrKykgeworCQkJCQlmb3IgKHR1LmlfbG93ZXJfYm91bmRhcnlfY291 bnQgPSAxOworCQkJCQkJdHUuaV9sb3dlcl9ib3VuZGFyeV9jb3VudCA8PSAxNTsKKwkJCQkJCXR1 LmlfbG93ZXJfYm91bmRhcnlfY291bnQrKykgeworCQkJCQkJX3R1X3ZhbGlkX2JvdW5kYXJ5X2Nh bGMoJnR1KTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCXR1LmRlbGF5X3N0YXJ0X2xpbmtfZXh0 cmFfcGl4Y2xrLS07CisJCX0gd2hpbGUgKHR1LmJvdW5kYXJ5X21vZGVyYXRpb25fZW4gIT0gdHJ1 ZSAmJgorCQkJdHUuYm91bmRhcnlfbW9kX2xvd2VyX2VyciA9PSAxICYmCisJCQl0dS5kZWxheV9z dGFydF9saW5rX2V4dHJhX3BpeGNsayAhPSAwKTsKKworCQlpZiAodHUuYm91bmRhcnlfbW9kZXJh dGlvbl9lbiA9PSB0cnVlKSB7CisJCQl0ZW1wMV9mcCA9IGRybV9maXhwX2Zyb21fZnJhY3Rpb24o CisJCQkJCSh0dS51cHBlcl9ib3VuZGFyeV9jb3VudCAqCisJCQkJCXR1LnZhbGlkX2JvdW5kYXJ5 X2xpbmsgKworCQkJCQl0dS5sb3dlcl9ib3VuZGFyeV9jb3VudCAqCisJCQkJCSh0dS52YWxpZF9i b3VuZGFyeV9saW5rIC0gMSkpLCAxKTsKKwkJCXRlbXAyX2ZwID0gZHJtX2ZpeHBfZnJvbV9mcmFj dGlvbigKKwkJCQkJKHR1LnVwcGVyX2JvdW5kYXJ5X2NvdW50ICsKKwkJCQkJdHUubG93ZXJfYm91 bmRhcnlfY291bnQpLCAxKTsKKwkJCXR1LnJlc3VsdGluZ192YWxpZF9mcCA9CisJCQkJCWRybV9m aXhwX2Rpdih0ZW1wMV9mcCwgdGVtcDJfZnApOworCisJCQl0ZW1wMV9mcCA9IGRybV9maXhwX2Zy b21fZnJhY3Rpb24oCisJCQkJCXR1LnR1X3NpemVfZGVzaXJlZCwgMSk7CisJCQl0dS5yYXRpb19i eV90dV9mcCA9CisJCQkJZHJtX2ZpeHBfbXVsKHR1Lm9yaWdpbmFsX3JhdGlvX2ZwLCB0ZW1wMV9m cCk7CisKKwkJCXR1LnZhbGlkX2xvd2VyX2JvdW5kYXJ5X2xpbmsgPQorCQkJCXR1LnZhbGlkX2Jv dW5kYXJ5X2xpbmsgLSAxOworCisJCQl0ZW1wMV9mcCA9IGRybV9maXhwX2Zyb21fZnJhY3Rpb24o dHUuYnBwLCA4KTsKKwkJCXRlbXAyX2ZwID0gZHJtX2ZpeHBfZnJvbV9mcmFjdGlvbih0dS5sd2lk dGgsIDEpOworCQkJdGVtcDFfZnAgPSBkcm1fZml4cF9tdWwodGVtcDJfZnAsIHRlbXAxX2ZwKTsK KwkJCXRlbXAyX2ZwID0gZHJtX2ZpeHBfZGl2KHRlbXAxX2ZwLAorCQkJCQkJdHUucmVzdWx0aW5n X3ZhbGlkX2ZwKTsKKwkJCXR1Lm5fdHVzID0gZHJtX2ZpeHAyaW50KHRlbXAyX2ZwKTsKKworCQkJ dHUudHVfc2l6ZV9taW51czEgPSB0dS50dV9zaXplX2Rlc2lyZWQgLSAxOworCQkJdHUuZXZlbl9k aXN0cmlidXRpb25fQkYgPSAxOworCisJCQl0ZW1wMV9mcCA9CisJCQkJZHJtX2ZpeHBfZnJvbV9m cmFjdGlvbih0dS50dV9zaXplX2Rlc2lyZWQsIDEpOworCQkJdGVtcDJfZnAgPQorCQkJCWRybV9m aXhwX2Rpdih0dS5yZXN1bHRpbmdfdmFsaWRfZnAsIHRlbXAxX2ZwKTsKKwkJCXR1LlRVX3JhdGlv X2Vycl9mcCA9IHRlbXAyX2ZwIC0gdHUub3JpZ2luYWxfcmF0aW9fZnA7CisJCX0KKwl9CisKKwl0 ZW1wMV9mcCA9IGRybV9maXhwX2Zyb21fZnJhY3Rpb24odHUubHdpZHRoLCAxKTsKKwl0ZW1wMl9m cCA9IGRybV9maXhwX211bChMQ0xLX0ZBU1RfU0tFV19mcCwgdGVtcDFfZnApOworCisJaWYgKHRl bXAyX2ZwKQorCQl0ZW1wID0gZHJtX2ZpeHAyaW50X2NlaWwodGVtcDJfZnApOworCWVsc2UKKwkJ dGVtcCA9IDA7CisKKwl0ZW1wMV9mcCA9IGRybV9maXhwX2Zyb21fZnJhY3Rpb24odHUubmxhbmVz LCAxKTsKKwl0ZW1wMl9mcCA9IGRybV9maXhwX211bCh0dS5vcmlnaW5hbF9yYXRpb19mcCwgdGVt cDFfZnApOworCXRlbXAxX2ZwID0gZHJtX2ZpeHBfZnJvbV9mcmFjdGlvbih0dS5icHAsIDgpOwor CXRlbXAyX2ZwID0gZHJtX2ZpeHBfZGl2KHRlbXAxX2ZwLCB0ZW1wMl9mcCk7CisJdGVtcDFfZnAg PSBkcm1fZml4cF9mcm9tX2ZyYWN0aW9uKHRlbXAsIDEpOworCXRlbXAyX2ZwID0gZHJtX2ZpeHBf bXVsKHRlbXAxX2ZwLCB0ZW1wMl9mcCk7CisJdGVtcCA9IGRybV9maXhwMmludCh0ZW1wMl9mcCk7 CisKKwlpZiAodHUuYXN5bmNfZW4pCisJCXR1LmRlbGF5X3N0YXJ0X2xpbmsgKz0gKGludCl0ZW1w OworCisJdGVtcDFfZnAgPSBkcm1fZml4cF9mcm9tX2ZyYWN0aW9uKHR1LmRlbGF5X3N0YXJ0X2xp bmssIDEpOworCXR1LmRlbGF5X3N0YXJ0X3RpbWVfZnAgPSBkcm1fZml4cF9kaXYodGVtcDFfZnAs IHR1LmxjbGtfZnApOworCisJLyogT1VUUFVUUyAqLworCXR1X3RhYmxlLT52YWxpZF9ib3VuZGFy eV9saW5rICAgICAgID0gdHUudmFsaWRfYm91bmRhcnlfbGluazsKKwl0dV90YWJsZS0+ZGVsYXlf c3RhcnRfbGluayAgICAgICAgICA9IHR1LmRlbGF5X3N0YXJ0X2xpbms7CisJdHVfdGFibGUtPmJv dW5kYXJ5X21vZGVyYXRpb25fZW4gICAgPSB0dS5ib3VuZGFyeV9tb2RlcmF0aW9uX2VuOworCXR1 X3RhYmxlLT52YWxpZF9sb3dlcl9ib3VuZGFyeV9saW5rID0gdHUudmFsaWRfbG93ZXJfYm91bmRh cnlfbGluazsKKwl0dV90YWJsZS0+dXBwZXJfYm91bmRhcnlfY291bnQgICAgICA9IHR1LnVwcGVy X2JvdW5kYXJ5X2NvdW50OworCXR1X3RhYmxlLT5sb3dlcl9ib3VuZGFyeV9jb3VudCAgICAgID0g dHUubG93ZXJfYm91bmRhcnlfY291bnQ7CisJdHVfdGFibGUtPnR1X3NpemVfbWludXMxICAgICAg ICAgICAgPSB0dS50dV9zaXplX21pbnVzMTsKKworCURSTV9ERUJVR19EUCgiVFU6IHZhbGlkX2Jv dW5kYXJ5X2xpbms6ICVkXG4iLCB0dV90YWJsZS0+dmFsaWRfYm91bmRhcnlfbGluayk7CisJRFJN X0RFQlVHX0RQKCJUVTogZGVsYXlfc3RhcnRfbGluazogJWRcbiIsIHR1X3RhYmxlLT5kZWxheV9z dGFydF9saW5rKTsKKwlEUk1fREVCVUdfRFAoIlRVOiBib3VuZGFyeV9tb2RlcmF0aW9uX2VuOiAl ZFxuIiwKKwkJCXR1X3RhYmxlLT5ib3VuZGFyeV9tb2RlcmF0aW9uX2VuKTsKKwlEUk1fREVCVUdf RFAoIlRVOiB2YWxpZF9sb3dlcl9ib3VuZGFyeV9saW5rOiAlZFxuIiwKKwkJCXR1X3RhYmxlLT52 YWxpZF9sb3dlcl9ib3VuZGFyeV9saW5rKTsKKwlEUk1fREVCVUdfRFAoIlRVOiB1cHBlcl9ib3Vu ZGFyeV9jb3VudDogJWRcbiIsCisJCQl0dV90YWJsZS0+dXBwZXJfYm91bmRhcnlfY291bnQpOwor CURSTV9ERUJVR19EUCgiVFU6IGxvd2VyX2JvdW5kYXJ5X2NvdW50OiAlZFxuIiwKKwkJCXR1X3Rh YmxlLT5sb3dlcl9ib3VuZGFyeV9jb3VudCk7CisJRFJNX0RFQlVHX0RQKCJUVTogdHVfc2l6ZV9t aW51czE6ICVkXG4iLCB0dV90YWJsZS0+dHVfc2l6ZV9taW51czEpOworfQorCitzdGF0aWMgdm9p ZCBkcF9jdHJsX2NhbGNfdHVfcGFyYW1ldGVycyhzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJs LAorCQlzdHJ1Y3QgZHBfdmNfdHVfbWFwcGluZ190YWJsZSAqdHVfdGFibGUpCit7CisJc3RydWN0 IGRwX3R1X2NhbGNfaW5wdXQgaW47CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRybV9tb2Rl OworCisJZHJtX21vZGUgPSAmY3RybC0+cGFuZWwtPmRwX21vZGUuZHJtX21vZGU7CisKKwlpbi5s Y2xrID0gY3RybC0+bGluay0+bGlua19wYXJhbXMucmF0ZSAvIDEwMDA7CisJaW4ucGNsa19raHog PSBkcm1fbW9kZS0+Y2xvY2s7CisJaW4uaGFjdGl2ZSA9IGRybV9tb2RlLT5oZGlzcGxheTsKKwlp bi5ocG9yY2ggPSBkcm1fbW9kZS0+aHRvdGFsIC0gZHJtX21vZGUtPmhkaXNwbGF5OworCWluLm5s YW5lcyA9IGN0cmwtPmxpbmstPmxpbmtfcGFyYW1zLm51bV9sYW5lczsKKwlpbi5icHAgPSBjdHJs LT5wYW5lbC0+ZHBfbW9kZS5icHA7CisJaW4ucGl4ZWxfZW5jID0gNDQ0OworCWluLmRzY19lbiA9 IDA7CisJaW4uYXN5bmNfZW4gPSAwOworCisJX2RwX2N0cmxfY2FsY190dSgmaW4sIHR1X3RhYmxl KTsKK30KKworc3RhdGljIHZvaWQgZHBfY3RybF9zZXR1cF90cl91bml0KHN0cnVjdCBkcF9jdHJs X3ByaXZhdGUgKmN0cmwpCit7CisJdTMyIGRwX3R1ID0gMHgwOworCXUzMiB2YWxpZF9ib3VuZGFy eSA9IDB4MDsKKwl1MzIgdmFsaWRfYm91bmRhcnkyID0gMHgwOworCXN0cnVjdCBkcF92Y190dV9t YXBwaW5nX3RhYmxlIHR1X2NhbGNfdGFibGU7CisKKwlkcF9jdHJsX2NhbGNfdHVfcGFyYW1ldGVy cyhjdHJsLCAmdHVfY2FsY190YWJsZSk7CisKKwlkcF90dSB8PSB0dV9jYWxjX3RhYmxlLnR1X3Np emVfbWludXMxOworCXZhbGlkX2JvdW5kYXJ5IHw9IHR1X2NhbGNfdGFibGUudmFsaWRfYm91bmRh cnlfbGluazsKKwl2YWxpZF9ib3VuZGFyeSB8PSAodHVfY2FsY190YWJsZS5kZWxheV9zdGFydF9s aW5rIDw8IDE2KTsKKworCXZhbGlkX2JvdW5kYXJ5MiB8PSAodHVfY2FsY190YWJsZS52YWxpZF9s b3dlcl9ib3VuZGFyeV9saW5rIDw8IDEpOworCXZhbGlkX2JvdW5kYXJ5MiB8PSAodHVfY2FsY190 YWJsZS51cHBlcl9ib3VuZGFyeV9jb3VudCA8PCAxNik7CisJdmFsaWRfYm91bmRhcnkyIHw9ICh0 dV9jYWxjX3RhYmxlLmxvd2VyX2JvdW5kYXJ5X2NvdW50IDw8IDIwKTsKKworCWlmICh0dV9jYWxj X3RhYmxlLmJvdW5kYXJ5X21vZGVyYXRpb25fZW4pCisJCXZhbGlkX2JvdW5kYXJ5MiB8PSBCSVQo MCk7CisKKwlwcl9kZWJ1ZygiZHBfdHU9MHgleCwgdmFsaWRfYm91bmRhcnk9MHgleCwgdmFsaWRf Ym91bmRhcnkyPTB4JXhcbiIsCisJCQlkcF90dSwgdmFsaWRfYm91bmRhcnksIHZhbGlkX2JvdW5k YXJ5Mik7CisKKwljdHJsLT5jYXRhbG9nLT5kcF90dSA9IGRwX3R1OworCWN0cmwtPmNhdGFsb2ct PnZhbGlkX2JvdW5kYXJ5ID0gdmFsaWRfYm91bmRhcnk7CisJY3RybC0+Y2F0YWxvZy0+dmFsaWRf Ym91bmRhcnkyID0gdmFsaWRfYm91bmRhcnkyOworCisJZHBfY2F0YWxvZ19jdHJsX3VwZGF0ZV90 cmFuc2Zlcl91bml0KGN0cmwtPmNhdGFsb2cpOworfQorCitzdGF0aWMgaW50IGRwX2N0cmxfd2Fp dDR2aWRlb19yZWFkeShzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsKQoreworCWludCByZXQg PSAwOworCisJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmN0cmwtPnZpZGVvX2Nv bXAsCisJCQkJV0FJVF9GT1JfVklERU9fUkVBRFlfVElNRU9VVF9KSUZGSUVTKSkgeworCQlEUk1f RVJST1IoIkxpbmsgVHJhaW4gdGltZWRvdXRcbiIpOworCQlyZXQgPSAtRVRJTUVET1VUOworCX0K KwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRwX2N0cmxfdXBkYXRlX3Z4X3B4KHN0cnVj dCBkcF9jdHJsX3ByaXZhdGUgKmN0cmwpCit7CisJc3RydWN0IGRwX2xpbmsgKmxpbmsgPSBjdHJs LT5saW5rOworCWludCByZXQgPSAwLCBsYW5lOworCXU4IGJ1Zls0XTsKKwl1MzIgbWF4X2xldmVs X3JlYWNoZWQgPSAwOworCXUzMiB2b2x0YWdlX3N3aW5nX2xldmVsID0gbGluay0+cGh5X3BhcmFt cy52X2xldmVsOworCXUzMiBwcmVfZW1waGFzaXNfbGV2ZWwgPSBsaW5rLT5waHlfcGFyYW1zLnBf bGV2ZWw7CisKKwlyZXQgPSBkcF9jYXRhbG9nX2N0cmxfdXBkYXRlX3Z4X3B4KGN0cmwtPmNhdGFs b2csCisJCXZvbHRhZ2Vfc3dpbmdfbGV2ZWwsIHByZV9lbXBoYXNpc19sZXZlbCk7CisJaWYgKHJl dCkKKwkJcmV0dXJuIHJldDsKKworCWlmICh2b2x0YWdlX3N3aW5nX2xldmVsID09IERQX1RSQUlO X1ZPTFRBR0VfU1dJTkdfTUFYKSB7CisJCXByX2RlYnVnKCJtYXguIHZvbHRhZ2Ugc3dpbmcgbGV2 ZWwgcmVhY2hlZCAlZFxuIiwKKwkJCQl2b2x0YWdlX3N3aW5nX2xldmVsKTsKKwkJbWF4X2xldmVs X3JlYWNoZWQgfD0gRFBfVFJBSU5fTUFYX1NXSU5HX1JFQUNIRUQ7CisJfQorCisJaWYgKHByZV9l bXBoYXNpc19sZXZlbCA9PSBEUF9UUkFJTl9QUkVfRU1QSEFTSVNfTUFYKSB7CisJCXByX2RlYnVn KCJtYXguIHByZS1lbXBoYXNpcyBsZXZlbCByZWFjaGVkICVkXG4iLAorCQkJCXByZV9lbXBoYXNp c19sZXZlbCk7CisJCW1heF9sZXZlbF9yZWFjaGVkICB8PSBEUF9UUkFJTl9NQVhfUFJFX0VNUEhB U0lTX1JFQUNIRUQ7CisJfQorCisJcHJlX2VtcGhhc2lzX2xldmVsIDw8PSBEUF9UUkFJTl9QUkVf RU1QSEFTSVNfU0hJRlQ7CisKKwlmb3IgKGxhbmUgPSAwOyBsYW5lIDwgNDsgbGFuZSsrKQorCQli dWZbbGFuZV0gPSB2b2x0YWdlX3N3aW5nX2xldmVsIHwgcHJlX2VtcGhhc2lzX2xldmVsIHwgbWF4 X2xldmVsX3JlYWNoZWQ7CisKKwlwcl9kZWJ1Zygic2luazogcHx2PTB4JXhcbiIsIHZvbHRhZ2Vf c3dpbmdfbGV2ZWwgfCBwcmVfZW1waGFzaXNfbGV2ZWwpOworCXJldCA9IGRybV9kcF9kcGNkX3dy aXRlKGN0cmwtPmF1eC0+ZHJtX2F1eCwgRFBfVFJBSU5JTkdfTEFORTBfU0VULCBidWYsIDQpOwor CWlmIChyZXQgPT0gNCkKKwkJcmV0ID0gMDsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBi b29sIGRwX2N0cmxfdHJhaW5fcGF0dGVybl9zZXQoc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3Ry bCwKKwkJdTggcGF0dGVybikKK3sKKwl1OCBidWZbNF07CisJaW50IHJldCA9IDA7CisKKwlwcl9k ZWJ1Zygic2luazogcGF0dGVybj0leFxuIiwgcGF0dGVybik7CisKKwlidWZbMF0gPSBwYXR0ZXJu OworCXJldCA9IGRybV9kcF9kcGNkX3dyaXRlYihjdHJsLT5hdXgtPmRybV9hdXgsIERQX1RSQUlO SU5HX1BBVFRFUk5fU0VULCBidWZbMF0pOworCXJldHVybiByZXQgPT0gMTsKK30KKworc3RhdGlj IGludCBkcF9jdHJsX3JlYWRfbGlua19zdGF0dXMoc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3Ry bCwKKwkJCQkgICAgdTggKmxpbmtfc3RhdHVzKQoreworCWludCBsZW4gPSAwOworCXUzMiBjb25z dCBvZmZzZXQgPSBEUF9MQU5FX0FMSUdOX1NUQVRVU19VUERBVEVEIC0gRFBfTEFORTBfMV9TVEFU VVM7CisJdTMyIGxpbmtfc3RhdHVzX3JlYWRfbWF4X3JldHJpZXMgPSAxMDA7CisKKwl3aGlsZSAo LS1saW5rX3N0YXR1c19yZWFkX21heF9yZXRyaWVzKSB7CisJCWxlbiA9IGRybV9kcF9kcGNkX3Jl YWRfbGlua19zdGF0dXMoY3RybC0+YXV4LT5kcm1fYXV4LAorCQkJbGlua19zdGF0dXMpOworCQlp ZiAobGVuICE9IERQX0xJTktfU1RBVFVTX1NJWkUpIHsKKwkJCURSTV9FUlJPUigiRFAgbGluayBz dGF0dXMgcmVhZCBmYWlsZWQsIGVycjogJWRcbiIsIGxlbik7CisJCQlyZXR1cm4gbGVuOworCQl9 CisKKwkJaWYgKCEobGlua19zdGF0dXNbb2Zmc2V0XSAmIERQX0xJTktfU1RBVFVTX1VQREFURUQp KQorCQkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC1FVElNRURPVVQ7Cit9CisKK3N0YXRpYyBp bnQgZHBfY3RybF9saW5rX3RyYWluXzEoc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybCkKK3sK KwlpbnQgdHJpZXMsIG9sZF92X2xldmVsLCByZXQgPSAwOworCXU4IGxpbmtfc3RhdHVzW0RQX0xJ TktfU1RBVFVTX1NJWkVdOworCWludCBjb25zdCBtYXhpbXVtX3JldHJpZXMgPSA1OworCisJZHBf Y2F0YWxvZ19jdHJsX3N0YXRlX2N0cmwoY3RybC0+Y2F0YWxvZywgMCk7CisKKwlyZXQgPSBkcF9j YXRhbG9nX2N0cmxfc2V0X3BhdHRlcm4oY3RybC0+Y2F0YWxvZywgRFBfVFJBSU5JTkdfUEFUVEVS Tl8xKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCWRwX2N0cmxfdHJhaW5fcGF0dGVybl9z ZXQoY3RybCwgRFBfVFJBSU5JTkdfUEFUVEVSTl8xIHwKKwkJRFBfTElOS19TQ1JBTUJMSU5HX0RJ U0FCTEUpOworCXJldCA9IGRwX2N0cmxfdXBkYXRlX3Z4X3B4KGN0cmwpOworCWlmIChyZXQpCisJ CXJldHVybiByZXQ7CisKKwl0cmllcyA9IDA7CisJb2xkX3ZfbGV2ZWwgPSBjdHJsLT5saW5rLT5w aHlfcGFyYW1zLnZfbGV2ZWw7CisJZm9yICh0cmllcyA9IDA7IHRyaWVzIDwgbWF4aW11bV9yZXRy aWVzOyB0cmllcysrKSB7CisJCWRybV9kcF9saW5rX3RyYWluX2Nsb2NrX3JlY292ZXJ5X2RlbGF5 KGN0cmwtPnBhbmVsLT5kcGNkKTsKKworCQlyZXQgPSBkcF9jdHJsX3JlYWRfbGlua19zdGF0dXMo Y3RybCwgbGlua19zdGF0dXMpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlpZiAo ZHJtX2RwX2Nsb2NrX3JlY292ZXJ5X29rKGxpbmtfc3RhdHVzLAorCQkJY3RybC0+bGluay0+bGlu a19wYXJhbXMubnVtX2xhbmVzKSkgeworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCWlmIChjdHJs LT5saW5rLT5waHlfcGFyYW1zLnZfbGV2ZWwgPT0gRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19NQVgp IHsKKwkJCURSTV9FUlJPUl9SQVRFTElNSVRFRCgibWF4IHZfbGV2ZWwgcmVhY2hlZFxuIik7CisJ CQlyZXR1cm4gLUVBR0FJTjsKKwkJfQorCisJCWlmIChvbGRfdl9sZXZlbCAhPSBjdHJsLT5saW5r LT5waHlfcGFyYW1zLnZfbGV2ZWwpIHsKKwkJCXRyaWVzID0gMDsKKwkJCW9sZF92X2xldmVsID0g Y3RybC0+bGluay0+cGh5X3BhcmFtcy52X2xldmVsOworCQl9CisKKwkJcHJfZGVidWcoImNsb2Nr IHJlY292ZXJ5IG5vdCBkb25lLCBhZGp1c3RpbmcgdnggcHhcbiIpOworCisJCWRwX2xpbmtfYWRq dXN0X2xldmVscyhjdHJsLT5saW5rLCBsaW5rX3N0YXR1cyk7CisJCXJldCA9IGRwX2N0cmxfdXBk YXRlX3Z4X3B4KGN0cmwpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlEUk1f RVJST1IoIm1heCB0cmllcyByZWFjaGVkXG4iKTsKKwlyZXR1cm4gLUVUSU1FRE9VVDsKK30KKwor c3RhdGljIGludCBkcF9jdHJsX2xpbmtfcmF0ZV9kb3duX3NoaWZ0KHN0cnVjdCBkcF9jdHJsX3By aXZhdGUgKmN0cmwpCit7CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKGN0cmwtPmxpbmstPmxp bmtfcGFyYW1zLnJhdGUpIHsKKwljYXNlIDgxMDAwMDoKKwkJY3RybC0+bGluay0+bGlua19wYXJh bXMucmF0ZSA9IDU0MDAwMDsKKwkJYnJlYWs7CisJY2FzZSA1NDAwMDA6CisJCWN0cmwtPmxpbmst PmxpbmtfcGFyYW1zLnJhdGUgPSAyNzAwMDA7CisJCWJyZWFrOworCWNhc2UgMjcwMDAwOgorCWNh c2UgMTYyMDAwOgorCWRlZmF1bHQ6CisJCWN0cmwtPmxpbmstPmxpbmtfcGFyYW1zLnJhdGUgPSAx NjIwMDA7CisJCWJyZWFrOworCX07CisKKwlwcl9kZWJ1ZygibmV3IHJhdGU9MHgleFxuIiwgY3Ry bC0+bGluay0+bGlua19wYXJhbXMucmF0ZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMg dm9pZCBkcF9jdHJsX2NsZWFyX3RyYWluaW5nX3BhdHRlcm4oc3RydWN0IGRwX2N0cmxfcHJpdmF0 ZSAqY3RybCkKK3sKKwlkcF9jdHJsX3RyYWluX3BhdHRlcm5fc2V0KGN0cmwsIERQX1RSQUlOSU5H X1BBVFRFUk5fRElTQUJMRSk7CisJZHJtX2RwX2xpbmtfdHJhaW5fY2hhbm5lbF9lcV9kZWxheShj dHJsLT5wYW5lbC0+ZHBjZCk7Cit9CisKK3N0YXRpYyBpbnQgZHBfY3RybF9saW5rX3RyYWluaW5n XzIoc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybCkKK3sKKwlpbnQgdHJpZXMgPSAwLCByZXQg PSAwOworCWNoYXIgcGF0dGVybjsKKwlpbnQgY29uc3QgbWF4aW11bV9yZXRyaWVzID0gNTsKKwl1 OCBsaW5rX3N0YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpFXTsKKworCWRwX2NhdGFsb2dfY3RybF9z dGF0ZV9jdHJsKGN0cmwtPmNhdGFsb2csIDApOworCisJaWYgKGRybV9kcF90cHMzX3N1cHBvcnRl ZChjdHJsLT5wYW5lbC0+ZHBjZCkpCisJCXBhdHRlcm4gPSBEUF9UUkFJTklOR19QQVRURVJOXzM7 CisJZWxzZQorCQlwYXR0ZXJuID0gRFBfVFJBSU5JTkdfUEFUVEVSTl8yOworCisJcmV0ID0gZHBf Y3RybF91cGRhdGVfdnhfcHgoY3RybCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJl dCA9IGRwX2NhdGFsb2dfY3RybF9zZXRfcGF0dGVybihjdHJsLT5jYXRhbG9nLCBwYXR0ZXJuKTsK KwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZHBfY3RybF90cmFpbl9wYXR0ZXJuX3NldChj dHJsLCBwYXR0ZXJuIHwgRFBfUkVDT1ZFUkVEX0NMT0NLX09VVF9FTik7CisKKwlmb3IgKHRyaWVz ID0gMDsgdHJpZXMgPD0gbWF4aW11bV9yZXRyaWVzOyB0cmllcysrKSB7CisJCWRybV9kcF9saW5r X3RyYWluX2NoYW5uZWxfZXFfZGVsYXkoY3RybC0+cGFuZWwtPmRwY2QpOworCisJCXJldCA9IGRw X2N0cmxfcmVhZF9saW5rX3N0YXR1cyhjdHJsLCBsaW5rX3N0YXR1cyk7CisJCWlmIChyZXQpCisJ CQlyZXR1cm4gcmV0OworCisJCWlmIChkcm1fZHBfY2hhbm5lbF9lcV9vayhsaW5rX3N0YXR1cywK KwkJCWN0cmwtPmxpbmstPmxpbmtfcGFyYW1zLm51bV9sYW5lcykpCisJCQlyZXR1cm4gcmV0Owor CisJCWRwX2xpbmtfYWRqdXN0X2xldmVscyhjdHJsLT5saW5rLCBsaW5rX3N0YXR1cyk7CisJCXJl dCA9IGRwX2N0cmxfdXBkYXRlX3Z4X3B4KGN0cmwpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJl dDsKKworCX0KKworCXJldHVybiAtRVRJTUVET1VUOworfQorCitzdGF0aWMgaW50IGRwX2N0cmxf bGlua190cmFpbihzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsKQoreworCWludCByZXQgPSAw OworCXU4IGVuY29kaW5nID0gRFBfU0VUX0FOU0lfOEIxMEI7CisJc3RydWN0IGRybV9kcF9saW5r IGxpbmtfaW5mbyA9IHswfTsKKworCWN0cmwtPmxpbmstPnBoeV9wYXJhbXMucF9sZXZlbCA9IDA7 CisJY3RybC0+bGluay0+cGh5X3BhcmFtcy52X2xldmVsID0gMDsKKworCWRwX2N0cmxfY29uZmln X2N0cmwoY3RybCk7CisKKwlyZXQgPSBkcm1fZHBfbGlua19wcm9iZShjdHJsLT5hdXgtPmRybV9h dXgsICZsaW5rX2luZm8pOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRv IHJldHJpZXZlIGxpbmsgY2FwYWJpbGl0aWVzLiByZXQ9JWRcbiIsIHJldCk7CisJCWRwX2NhdGFs b2dfY3RybF9zdGF0ZV9jdHJsKGN0cmwtPmNhdGFsb2csIDApOworCQlyZXR1cm4gcmV0OworCX0K KworCWRybV9kcF9saW5rX2NvbmZpZ3VyZShjdHJsLT5hdXgtPmRybV9hdXgsICZsaW5rX2luZm8p OworCWRybV9kcF9kcGNkX3dyaXRlKGN0cmwtPmF1eC0+ZHJtX2F1eCwgRFBfTUFJTl9MSU5LX0NI QU5ORUxfQ09ESU5HX1NFVCwKKwkJCQkmZW5jb2RpbmcsIDEpOworCisJcmV0ID0gZHBfY3RybF9s aW5rX3RyYWluXzEoY3RybCk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoImxpbmsgdHJhaW5p bmcgIzEgZmFpbGVkLiByZXQ9JWRcbiIsIHJldCk7CisJCWdvdG8gZW5kOworCX0KKworCS8qIHBy aW50IHN1Y2Nlc3MgaW5mbyBhcyB0aGlzIGlzIGEgcmVzdWx0IG9mIHVzZXIgaW5pdGlhdGVkIGFj dGlvbiAqLworCURSTV9ERUJVR19EUCgibGluayB0cmFpbmluZyAjMSBzdWNjZXNzZnVsXG4iKTsK KworCXJldCA9IGRwX2N0cmxfbGlua190cmFpbmluZ18yKGN0cmwpOworCWlmIChyZXQpIHsKKwkJ RFJNX0VSUk9SKCJsaW5rIHRyYWluaW5nICMyIGZhaWxlZC4gcmV0PSVkXG4iLCByZXQpOworCQln b3RvIGVuZDsKKwl9CisKKwkvKiBwcmludCBzdWNjZXNzIGluZm8gYXMgdGhpcyBpcyBhIHJlc3Vs dCBvZiB1c2VyIGluaXRpYXRlZCBhY3Rpb24gKi8KKwlEUk1fREVCVUdfRFAoImxpbmsgdHJhaW5p bmcgIzIgc3VjY2Vzc2Z1bFxuIik7CisKK2VuZDoKKwlkcF9jYXRhbG9nX2N0cmxfc3RhdGVfY3Ry bChjdHJsLT5jYXRhbG9nLCAwKTsKKworCWRwX2N0cmxfY2xlYXJfdHJhaW5pbmdfcGF0dGVybihj dHJsKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRwX2N0cmxfc2V0dXBfbWFpbl9s aW5rKHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0cmwsIGJvb2wgdHJhaW4pCit7CisJYm9vbCBt YWlubGlua19yZWFkeSA9IGZhbHNlOworCWludCByZXQgPSAwOworCisJZHBfY2F0YWxvZ19jdHJs X21haW5saW5rX2N0cmwoY3RybC0+Y2F0YWxvZywgdHJ1ZSk7CisKKwlyZXQgPSBkcF9saW5rX3Bz bV9jb25maWcoY3RybC0+bGluaywgJmN0cmwtPnBhbmVsLT5saW5rX2luZm8sIGZhbHNlKTsKKwlp ZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKGN0cmwtPmxpbmstPnNpbmtfcmVxdWVzdCAm IERQX1RFU1RfTElOS19QSFlfVEVTVF9QQVRURVJOKQorCQlyZXR1cm4gcmV0OworCisJaWYgKCF0 cmFpbikKKwkJZ290byBzZW5kX3ZpZGVvOworCisJLyoKKwkgKiBBcyBwYXJ0IG9mIHByZXZpb3Vz IGNhbGxzLCBEUCBjb250cm9sbGVyIHN0YXRlIG1pZ2h0IGhhdmUKKwkgKiB0cmFuc2l0aW9uZWQg dG8gUFVTSF9JRExFLiBJbiBvcmRlciB0byBzdGFydCB0cmFuc21pdHRpbmcgYSBsaW5rCisJICog dHJhaW5pbmcgcGF0dGVybiwgd2UgaGF2ZSB0byBmaXJzdCBkbyBhIERQIHNvZnR3YXJlIHJlc2V0 LgorCSAqLworCWRwX2NhdGFsb2dfY3RybF9yZXNldChjdHJsLT5jYXRhbG9nKTsKKworCXJldCA9 IGRwX2N0cmxfbGlua190cmFpbihjdHJsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCitz ZW5kX3ZpZGVvOgorCS8qCisJICogU2V0IHVwIHRyYW5zZmVyIHVuaXQgdmFsdWVzIGFuZCBzZXQg Y29udHJvbGxlciBzdGF0ZSB0byBzZW5kCisJICogdmlkZW8uCisJICovCisJZHBfY3RybF9zZXR1 cF90cl91bml0KGN0cmwpOworCWRwX2NhdGFsb2dfY3RybF9zdGF0ZV9jdHJsKGN0cmwtPmNhdGFs b2csIERQX1NUQVRFX0NUUkxfU0VORF9WSURFTyk7CisKKwlyZXQgPSBkcF9jdHJsX3dhaXQ0dmlk ZW9fcmVhZHkoY3RybCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW1haW5saW5rX3Jl YWR5ID0gZHBfY2F0YWxvZ19jdHJsX21haW5saW5rX3JlYWR5KGN0cmwtPmNhdGFsb2cpOworCURS TV9ERUJVR19EUCgibWFpbmxpbmsgJXNcbiIsIG1haW5saW5rX3JlYWR5ID8gIlJFQURZIiA6ICJO T1QgUkVBRFkiKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBkcF9jdHJsX3NldF9j bG9ja19yYXRlKHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0cmwsCisJCQkJICAgY2hhciAqbmFt ZSwgdTMyIHJhdGUpCit7CisJdTMyIG51bSA9IGN0cmwtPnBhcnNlci0+bXBbRFBfQ1RSTF9QTV0u bnVtX2NsazsKKwlzdHJ1Y3QgZHNzX2NsayAqY2ZnID0gY3RybC0+cGFyc2VyLT5tcFtEUF9DVFJM X1BNXS5jbGtfY29uZmlnOworCisJd2hpbGUgKG51bSAmJiBzdHJjbXAoY2ZnLT5jbGtfbmFtZSwg bmFtZSkpIHsKKwkJbnVtLS07CisJCWNmZysrOworCX0KKworCURSTV9ERUJVR19EUCgic2V0dGlu ZyByYXRlPSVkIG9uIGNsaz0lc1xuIiwgcmF0ZSwgbmFtZSk7CisKKwlpZiAobnVtKQorCQljZmct PnJhdGUgPSByYXRlOworCWVsc2UKKwkJRFJNX0VSUk9SKCIlcyBjbG9jayBjb3VsZCBub3QgYmUg c2V0IHdpdGggcmF0ZSAlZFxuIiwgbmFtZSwgcmF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgZHBfY3Ry bF9lbmFibGVfbWFpbmxpbmtfY2xvY2tzKHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0cmwpCit7 CisJaW50IHJldCA9IDA7CisKKwlkcF9wb3dlcl9zZXRfbGlua19jbGtfcGFyZW50KGN0cmwtPnBv d2VyKTsKKwlkcF9wb3dlcl9zZXRfcGl4ZWxfY2xrX3BhcmVudChjdHJsLT5wb3dlcik7CisKKwlk cF9jdHJsX3NldF9jbG9ja19yYXRlKGN0cmwsICJjdHJsX2xpbmtfY2xrIiwgY3RybC0+bGluay0+ bGlua19wYXJhbXMucmF0ZSk7CisKKwlkcF9jdHJsX3NldF9jbG9ja19yYXRlKGN0cmwsICJjdHJs X3BpeGVsX2NsayIsIGN0cmwtPmRwX2N0cmwucGl4ZWxfcmF0ZSk7CisKKwlyZXQgPSBkcF9wb3dl cl9jbGtfZW5hYmxlKGN0cmwtPnBvd2VyLCBEUF9DVFJMX1BNLCB0cnVlKTsKKwlpZiAocmV0KQor CQlEUk1fRVJST1IoIlVuYWJsZWQgdG8gc3RhcnQgbGluayBjbG9ja3MuIHJldD0lZFxuIiwgcmV0 KTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBkcF9jdHJsX2hvc3RfaW5pdChzdHJ1Y3QgZHBf Y3RybCAqZHBfY3RybCwgYm9vbCBmbGlwKQoreworCXN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0 cmw7CisKKwlpZiAoIWRwX2N0cmwpIHsKKwkJRFJNX0VSUk9SKCJJbnZhbGlkIGlucHV0IGRhdGFc biIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljdHJsID0gY29udGFpbmVyX29mKGRwX2N0 cmwsIHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUsIGRwX2N0cmwpOworCisJY3RybC0+ZHBfY3RybC5v cmllbnRhdGlvbiA9IGZsaXA7CisKKwlkcF9jYXRhbG9nX2N0cmxfdXNiX3Jlc2V0KGN0cmwtPmNh dGFsb2csIGZsaXApOworCWRwX2NhdGFsb2dfY3RybF9waHlfcmVzZXQoY3RybC0+Y2F0YWxvZyk7 CisJZHBfY2F0YWxvZ19jdHJsX2VuYWJsZV9pcnEoY3RybC0+Y2F0YWxvZywgdHJ1ZSk7CisKKwly ZXR1cm4gMDsKK30KKworLyoqCisgKiBkcF9jdHJsX2hvc3RfZGVpbml0KCkgLSBVbmluaXRpYWxp emUgRFAgY29udHJvbGxlcgorICogQGN0cmw6IERpc3BsYXkgUG9ydCBEcml2ZXIgZGF0YQorICoK KyAqIFBlcmZvcm0gcmVxdWlyZWQgc3RlcHMgdG8gdW5pbml0aWFsaXplIERQIGNvbnRyb2xsZXIK KyAqIGFuZCBpdHMgcmVzb3VyY2VzLgorICovCit2b2lkIGRwX2N0cmxfaG9zdF9kZWluaXQoc3Ry dWN0IGRwX2N0cmwgKmRwX2N0cmwpCit7CisJc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybDsK KworCWlmICghZHBfY3RybCkgeworCQlEUk1fRVJST1IoIkludmFsaWQgaW5wdXQgZGF0YVxuIik7 CisJCXJldHVybjsKKwl9CisKKwljdHJsID0gY29udGFpbmVyX29mKGRwX2N0cmwsIHN0cnVjdCBk cF9jdHJsX3ByaXZhdGUsIGRwX2N0cmwpOworCisJZHBfY2F0YWxvZ19jdHJsX2VuYWJsZV9pcnEo Y3RybC0+Y2F0YWxvZywgZmFsc2UpOworCisJRFJNX0RFQlVHX0RQKCJIb3N0IGRlaW5pdGlhbGl6 ZWQgc3VjY2Vzc2Z1bGx5XG4iKTsKK30KKworc3RhdGljIGJvb2wgZHBfY3RybF91c2VfZml4ZWRf bnZpZChzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsKQoreworCXU4ICpkcGNkID0gY3RybC0+ cGFuZWwtPmRwY2Q7CisKKwkvKgorCSAqIEZvciBiZXR0ZXIgaW50ZXJvcCBleHBlcmllbmNlLCB1 c2VkIGEgZml4ZWQgTlZJRD0weDgwMDAKKwkgKiB3aGVuZXZlciBjb25uZWN0ZWQgdG8gYSBWR0Eg ZG9uZ2xlIGRvd25zdHJlYW0uCisJICovCisJaWYgKGRwY2RbRFBfRE9XTlNUUkVBTVBPUlRfUFJF U0VOVF0gJiBEUF9EV05fU1RSTV9QT1JUX1BSRVNFTlQpIHsKKwkJdTggdHlwZSA9IGRwY2RbRFBf RE9XTlNUUkVBTVBPUlRfUFJFU0VOVF0gJgorCQkJRFBfRFdOX1NUUk1fUE9SVF9UWVBFX01BU0s7 CisJCWlmICh0eXBlID09IERQX0RXTl9TVFJNX1BPUlRfVFlQRV9BTkFMT0cpCisJCQlyZXR1cm4g dHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbnQgZHBfY3RybF9saW5r X21haW50ZW5hbmNlKHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0cmwpCit7CisJaW50IHJldCA9 IDA7CisKKwlkcF9jdHJsX3B1c2hfaWRsZSgmY3RybC0+ZHBfY3RybCk7CisJZHBfY3RybF9yZXNl dCgmY3RybC0+ZHBfY3RybCk7CisKKwljdHJsLT5kcF9jdHJsLnBpeGVsX3JhdGUgPSBjdHJsLT5w YW5lbC0+ZHBfbW9kZS5kcm1fbW9kZS5jbG9jazsKKworCWRvIHsKKwkJaWYgKHJldCA9PSAtRUFH QUlOKSB7CisJCQkvKiB0cnkgd2l0aCBsb3dlciBsaW5rIHJhdGUgKi8KKwkJCWRwX2N0cmxfbGlu a19yYXRlX2Rvd25fc2hpZnQoY3RybCk7CisKKwkJCWRwX2NhdGFsb2dfY3RybF9tYWlubGlua19j dHJsKGN0cmwtPmNhdGFsb2csIGZhbHNlKTsKKwkJfQorCisJCWRwX2NhdGFsb2dfY3RybF9waHlf bGFuZV9jZmcoY3RybC0+Y2F0YWxvZywKKwkJCWN0cmwtPmRwX2N0cmwub3JpZW50YXRpb24sIGN0 cmwtPmxpbmstPmxpbmtfcGFyYW1zLm51bV9sYW5lcyk7CisKKwkJLyoKKwkJICogRGlzYWJsZSBh bmQgcmUtZW5hYmxlIHRoZSBtYWlubGluayBjbG9jayBzaW5jZSB0aGUKKwkJICogbGluayBjbG9j ayBtaWdodCBoYXZlIGJlZW4gYWRqdXN0ZWQgYXMgcGFydCBvZiB0aGUKKwkJICogbGluayBtYWlu dGVuYW5jZS4KKwkJICovCisJCXJldCA9IGRwX3Bvd2VyX2Nsa19lbmFibGUoY3RybC0+cG93ZXIs IERQX0NUUkxfUE0sIGZhbHNlKTsKKwkJaWYgKHJldCkgeworCQkJRFJNX0VSUk9SKCJGYWlsZWQg dG8gZGlzYWJsZSBjbG9ja3MuIHJldD0lZFxuIiwgcmV0KTsKKwkJCWJyZWFrOworCQl9CisKKwkJ cmV0ID0gZHBfY3RybF9lbmFibGVfbWFpbmxpbmtfY2xvY2tzKGN0cmwpOworCQlpZiAocmV0KSB7 CisJCQlEUk1fRVJST1IoIkZhaWxlZCB0byBlbmFibGUgbWFpbmxpbmsgY2xrcy4gcmV0PSVkXG4i LCByZXQpOworCQkJYnJlYWs7CisJCX0KKworCQlkcF9jdHJsX2NvbmZpZ3VyZV9zb3VyY2VfcGFy YW1zKGN0cmwpOworCisJCWRwX2NhdGFsb2dfY3RybF9jb25maWdfbXNhKGN0cmwtPmNhdGFsb2cs CisJCQljdHJsLT5saW5rLT5saW5rX3BhcmFtcy5yYXRlLAorCQkJY3RybC0+ZHBfY3RybC5waXhl bF9yYXRlLCBkcF9jdHJsX3VzZV9maXhlZF9udmlkKGN0cmwpKTsKKworCQlyZWluaXRfY29tcGxl dGlvbigmY3RybC0+aWRsZV9jb21wKTsKKworCQlyZXQgPSBkcF9jdHJsX3NldHVwX21haW5fbGlu ayhjdHJsLCB0cnVlKTsKKwl9IHdoaWxlIChyZXQgPT0gLUVBR0FJTik7CisKKwlyZXR1cm4gcmV0 OworfQorCitzdGF0aWMgdm9pZCBkcF9jdHJsX3Byb2Nlc3NfcGh5X3Rlc3RfcmVxdWVzdChzdHJ1 Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsKQoreworCWludCByZXQgPSAwOworCisJaWYgKCFjdHJs LT5saW5rLT5waHlfcGFyYW1zLnBoeV90ZXN0X3BhdHRlcm5fc2VsKSB7CisJCURSTV9ERUJVR19E UCgibm8gdGVzdCBwYXR0ZXJuIHNlbGVjdGVkIGJ5IHNpbmtcbiIpOworCQlyZXR1cm47CisJfQor CisJZHBfY3RybF9wdXNoX2lkbGUoJmN0cmwtPmRwX2N0cmwpOworCS8qCisJICogVGhlIGdsb2Jh bCByZXNldCB3aWxsIG5lZWQgRFAgbGluayByZWxhdGVkIGNsb2NrcyB0byBiZQorCSAqIHJ1bm5p bmcuIEFkZCB0aGUgZ2xvYmFsIHJlc2V0IGp1c3QgYmVmb3JlIGRpc2FibGluZyB0aGUKKwkgKiBs aW5rIGNsb2NrcyBhbmQgY29yZSBjbG9ja3MuCisJICovCisJZHBfY3RybF9yZXNldCgmY3RybC0+ ZHBfY3RybCk7CisJZHBfY3RybF9vZmYoJmN0cmwtPmRwX2N0cmwpOworCisJcmV0ID0gZHBfY3Ry bF9vbigmY3RybC0+ZHBfY3RybCk7CisJaWYgKHJldCkKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8g ZW5hYmxlIERQIGNvbnRyb2xsZXJcbiIpOworCit9CisKK3N0YXRpYyBib29sIGRwX2N0cmxfc2Vu ZF9waHlfdGVzdF9wYXR0ZXJuKHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0cmwpCit7CisJYm9v bCBzdWNjZXNzID0gZmFsc2U7CisJdTMyIHBhdHRlcm5fc2VudCA9IDB4MDsKKwl1MzIgcGF0dGVy bl9yZXF1ZXN0ZWQgPSBjdHJsLT5saW5rLT5waHlfcGFyYW1zLnBoeV90ZXN0X3BhdHRlcm5fc2Vs OworCisJRFJNX0RFQlVHX0RQKCJyZXF1ZXN0OiAweCV4XG4iLCBwYXR0ZXJuX3JlcXVlc3RlZCk7 CisKKwlpZiAoZHBfY2F0YWxvZ19jdHJsX3VwZGF0ZV92eF9weChjdHJsLT5jYXRhbG9nLAorCQkJ Y3RybC0+bGluay0+cGh5X3BhcmFtcy52X2xldmVsLAorCQkJY3RybC0+bGluay0+cGh5X3BhcmFt cy5wX2xldmVsKSkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBzZXQgdi9wIGxldmVsc1xuIik7 CisJCXJldHVybiBmYWxzZTsKKwl9CisJZHBfY2F0YWxvZ19jdHJsX3NlbmRfcGh5X3BhdHRlcm4o Y3RybC0+Y2F0YWxvZywgcGF0dGVybl9yZXF1ZXN0ZWQpOworCWRwX2xpbmtfc2VuZF90ZXN0X3Jl c3BvbnNlKGN0cmwtPmxpbmspOworCisJcGF0dGVybl9zZW50ID0gZHBfY2F0YWxvZ19jdHJsX3Jl YWRfcGh5X3BhdHRlcm4oY3RybC0+Y2F0YWxvZyk7CisKKwlzd2l0Y2ggKHBhdHRlcm5fc2VudCkg eworCWNhc2UgTVJfTElOS19UUkFJTklORzE6CisJCXN1Y2Nlc3MgPSBwYXR0ZXJuX3JlcXVlc3Rl ZCA9PQorCQkJCURQX0xJTktfUVVBTF9QQVRURVJOX0QxMF8yOworCQlicmVhazsKKwljYXNlIE1S X0xJTktfU1lNQk9MX0VSTToKKwkJc3VjY2VzcyA9IChwYXR0ZXJuX3JlcXVlc3RlZCA9PQorCQkJ CURQX0xJTktfUVVBTF9QQVRURVJOX0VSUk9SX1JBVEUpCisJCQl8fCAocGF0dGVybl9yZXF1ZXN0 ZWQgPT0KKwkJCQlEUF9MSU5LX1FVQUxfUEFUVEVSTl9IQlIyX0VZRSk7CisJCWJyZWFrOworCWNh c2UgTVJfTElOS19QUkJTNzoKKwkJc3VjY2VzcyA9IHBhdHRlcm5fcmVxdWVzdGVkID09IERQX0xJ TktfUVVBTF9QQVRURVJOX1BSQlM3OworCQlicmVhazsKKwljYXNlIE1SX0xJTktfQ1VTVE9NODA6 CisJCXN1Y2Nlc3MgPSBwYXR0ZXJuX3JlcXVlc3RlZCA9PQorCQkJCURQX0xJTktfUVVBTF9QQVRU RVJOXzgwQklUX0NVU1RPTTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc3VjY2VzcyA9IGZhbHNl OworCX0KKworCURSTV9ERUJVR19EUCgiJXM6IHRlc3QtPjB4JXhcbiIsIHN1Y2Nlc3MgPyAic3Vj Y2VzcyIgOiAiZmFpbGVkIiwKKwkJCQkJCXBhdHRlcm5fcmVxdWVzdGVkKTsKKwlyZXR1cm4gc3Vj Y2VzczsKK30KKwordm9pZCBkcF9jdHJsX2hhbmRsZV9zaW5rX3JlcXVlc3Qoc3RydWN0IGRwX2N0 cmwgKmRwX2N0cmwpCit7CisJc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybDsKKwl1MzIgc2lu a19yZXF1ZXN0ID0gMHgwOworCisJaWYgKCFkcF9jdHJsKSB7CisJCURSTV9FUlJPUigiaW52YWxp ZCBpbnB1dFxuIik7CisJCXJldHVybjsKKwl9CisKKwljdHJsID0gY29udGFpbmVyX29mKGRwX2N0 cmwsIHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUsIGRwX2N0cmwpOworCXNpbmtfcmVxdWVzdCA9IGN0 cmwtPmxpbmstPnNpbmtfcmVxdWVzdDsKKworCWlmIChzaW5rX3JlcXVlc3QgJiBEUF9URVNUX0xJ TktfUEhZX1RFU1RfUEFUVEVSTikgeworCQlEUk1fREVCVUdfRFAoIlBIWV9URVNUX1BBVFRFUk4g cmVxdWVzdFxuIik7CisJCWRwX2N0cmxfcHJvY2Vzc19waHlfdGVzdF9yZXF1ZXN0KGN0cmwpOwor CX0KKworCWlmIChzaW5rX3JlcXVlc3QgJiBEUF9MSU5LX1NUQVRVU19VUERBVEVEKQorCQlkcF9j dHJsX2xpbmtfbWFpbnRlbmFuY2UoY3RybCk7CisKKwlpZiAoc2lua19yZXF1ZXN0ICYgRFBfVEVT VF9MSU5LX1RSQUlOSU5HKSB7CisJCWRwX2xpbmtfc2VuZF90ZXN0X3Jlc3BvbnNlKGN0cmwtPmxp bmspOworCQlkcF9jdHJsX2xpbmtfbWFpbnRlbmFuY2UoY3RybCk7CisJfQorfQorCit2b2lkIGRw X2N0cmxfcmVzZXQoc3RydWN0IGRwX2N0cmwgKmRwX2N0cmwpCit7CisJc3RydWN0IGRwX2N0cmxf cHJpdmF0ZSAqY3RybDsKKworCWlmICghZHBfY3RybCkgeworCQlEUk1fRVJST1IoImludmFsaWQg cGFyYW1zXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWN0cmwgPSBjb250YWluZXJfb2YoZHBfY3Ry bCwgc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSwgZHBfY3RybCk7CisJZHBfY2F0YWxvZ19jdHJsX3Jl c2V0KGN0cmwtPmNhdGFsb2cpOworfQorCitpbnQgZHBfY3RybF9vbihzdHJ1Y3QgZHBfY3RybCAq ZHBfY3RybCkKK3sKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0cmw7 CisJdTMyIHJhdGUgPSAwOworCXUzMiBsaW5rX3RyYWluX21heF9yZXRyaWVzID0gMTAwOworCXUz MiBjb25zdCBwaHlfY3RzX3BpeGVsX2Nsa19raHogPSAxNDg1MDA7CisKKwlpZiAoIWRwX2N0cmwp IHsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIGVuZDsKKwl9CisKKwljdHJsID0gY29udGFpbmVy X29mKGRwX2N0cmwsIHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUsIGRwX2N0cmwpOworCisJYXRvbWlj X3NldCgmY3RybC0+ZHBfY3RybC5hYm9ydGVkLCAwKTsKKwlyYXRlID0gY3RybC0+cGFuZWwtPmxp bmtfaW5mby5yYXRlOworCisJZHBfcG93ZXJfY2xrX2VuYWJsZShjdHJsLT5wb3dlciwgRFBfQ09S RV9QTSwgdHJ1ZSk7CisJZHBfY2F0YWxvZ19jdHJsX2hwZF9jb25maWcoY3RybC0+Y2F0YWxvZywg dHJ1ZSk7CisKKwlpZiAoY3RybC0+bGluay0+c2lua19yZXF1ZXN0ICYgRFBfVEVTVF9MSU5LX1BI WV9URVNUX1BBVFRFUk4pIHsKKwkJRFJNX0RFQlVHX0RQKCJ1c2luZyBwaHkgdGVzdCBsaW5rIHBh cmFtZXRlcnNcbiIpOworCQlpZiAoIWN0cmwtPnBhbmVsLT5kcF9tb2RlLmRybV9tb2RlLmNsb2Nr KQorCQkJY3RybC0+ZHBfY3RybC5waXhlbF9yYXRlID0gcGh5X2N0c19waXhlbF9jbGtfa2h6Owor CX0gZWxzZSB7CisJCWN0cmwtPmxpbmstPmxpbmtfcGFyYW1zLnJhdGUgPSByYXRlOworCQljdHJs LT5saW5rLT5saW5rX3BhcmFtcy5udW1fbGFuZXMgPQorCQkJY3RybC0+cGFuZWwtPmxpbmtfaW5m by5udW1fbGFuZXM7CisJCWN0cmwtPmRwX2N0cmwucGl4ZWxfcmF0ZSA9IGN0cmwtPnBhbmVsLT5k cF9tb2RlLmRybV9tb2RlLmNsb2NrOworCX0KKworCURSTV9ERUJVR19EUCgicmF0ZT0lZCwgbnVt X2xhbmVzPSVkLCBwaXhlbF9yYXRlPSVkXG4iLAorCQljdHJsLT5saW5rLT5saW5rX3BhcmFtcy5y YXRlLAorCQljdHJsLT5saW5rLT5saW5rX3BhcmFtcy5udW1fbGFuZXMsIGN0cmwtPmRwX2N0cmwu cGl4ZWxfcmF0ZSk7CisKKwlkcF9jYXRhbG9nX2N0cmxfcGh5X2xhbmVfY2ZnKGN0cmwtPmNhdGFs b2csCisJCQljdHJsLT5kcF9jdHJsLm9yaWVudGF0aW9uLCBjdHJsLT5saW5rLT5saW5rX3BhcmFt cy5udW1fbGFuZXMpOworCisJcmMgPSBkcF9jdHJsX2VuYWJsZV9tYWlubGlua19jbG9ja3MoY3Ry bCk7CisJaWYgKHJjKQorCQlnb3RvIGVuZDsKKworCXJlaW5pdF9jb21wbGV0aW9uKCZjdHJsLT5p ZGxlX2NvbXApOworCisJZHBfY3RybF9jb25maWd1cmVfc291cmNlX3BhcmFtcyhjdHJsKTsKKwor CXdoaWxlICgtLWxpbmtfdHJhaW5fbWF4X3JldHJpZXMgJiYgIWF0b21pY19yZWFkKCZjdHJsLT5k cF9jdHJsLmFib3J0ZWQpKSB7CisJCWRwX2NhdGFsb2dfY3RybF9jb25maWdfbXNhKGN0cmwtPmNh dGFsb2csCisJCQljdHJsLT5saW5rLT5saW5rX3BhcmFtcy5yYXRlLAorCQkJY3RybC0+ZHBfY3Ry bC5waXhlbF9yYXRlLCBkcF9jdHJsX3VzZV9maXhlZF9udmlkKGN0cmwpKTsKKworCQlyYyA9IGRw X2N0cmxfc2V0dXBfbWFpbl9saW5rKGN0cmwsIHRydWUpOworCQlpZiAoIXJjKQorCQkJYnJlYWs7 CisKKwkJLyogdHJ5IHdpdGggbG93ZXIgbGluayByYXRlICovCisJCWRwX2N0cmxfbGlua19yYXRl X2Rvd25fc2hpZnQoY3RybCk7CisKKwkJZHBfY2F0YWxvZ19jdHJsX21haW5saW5rX2N0cmwoY3Ry bC0+Y2F0YWxvZywgZmFsc2UpOworCisJCXJjID0gZHBfcG93ZXJfY2xrX2VuYWJsZShjdHJsLT5w b3dlciwgRFBfQ1RSTF9QTSwgZmFsc2UpOworCQlpZiAocmMpIHsKKwkJCURSTV9FUlJPUigiRmFp bGVkIHRvIGRpc2FibGUgY2xvY2tzLiByZXQ9JWRcbiIsIHJjKTsKKwkJCWJyZWFrOworCQl9CisJ CS8qIGh3IHJlY29tbWVuZGVkIGRlbGF5IGJlZm9yZSByZS1lbmFibGluZyBjbG9ja3MgKi8KKwkJ bXNsZWVwKDIwKTsKKworCQlkcF9jdHJsX2VuYWJsZV9tYWlubGlua19jbG9ja3MoY3RybCk7CisJ fQorCisJaWYgKGN0cmwtPmxpbmstPnNpbmtfcmVxdWVzdCAmIERQX1RFU1RfTElOS19QSFlfVEVT VF9QQVRURVJOKQorCQlkcF9jdHJsX3NlbmRfcGh5X3Rlc3RfcGF0dGVybihjdHJsKTsKKworCURS TV9ERUJVR19EUCgiRW5kLVxuIik7CisKK2VuZDoKKwlyZXR1cm4gcmM7Cit9CisKK3ZvaWQgZHBf Y3RybF9vZmYoc3RydWN0IGRwX2N0cmwgKmRwX2N0cmwpCit7CisJc3RydWN0IGRwX2N0cmxfcHJp dmF0ZSAqY3RybDsKKworCWlmICghZHBfY3RybCkKKwkJcmV0dXJuOworCisJY3RybCA9IGNvbnRh aW5lcl9vZihkcF9jdHJsLCBzdHJ1Y3QgZHBfY3RybF9wcml2YXRlLCBkcF9jdHJsKTsKKworCWRw X2NhdGFsb2dfY3RybF9tYWlubGlua19jdHJsKGN0cmwtPmNhdGFsb2csIGZhbHNlKTsKKwlkcF9j YXRhbG9nX2N0cmxfcmVzZXQoY3RybC0+Y2F0YWxvZyk7CisJZHBfcG93ZXJfY2xrX2VuYWJsZShj dHJsLT5wb3dlciwgRFBfQ1RSTF9QTSwgZmFsc2UpOworCisJRFJNX0RFQlVHX0RQKCJEUCBvZmYg ZG9uZVxuIik7Cit9CisKK3ZvaWQgZHBfY3RybF9pc3Ioc3RydWN0IGRwX2N0cmwgKmRwX2N0cmwp Cit7CisJc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybDsKKworCWlmICghZHBfY3RybCkKKwkJ cmV0dXJuOworCisJY3RybCA9IGNvbnRhaW5lcl9vZihkcF9jdHJsLCBzdHJ1Y3QgZHBfY3RybF9w cml2YXRlLCBkcF9jdHJsKTsKKworCWRwX2NhdGFsb2dfY3RybF9nZXRfaW50ZXJydXB0KGN0cmwt PmNhdGFsb2cpOworCisJaWYgKGN0cmwtPmNhdGFsb2ctPmlzciAmIERQX0NUUkxfSU5UUl9SRUFE WV9GT1JfVklERU8pIHsKKwkJRFJNX0RFQlVHX0RQKCJkcF92aWRlb19yZWFkeVxuIik7CisJCWNv bXBsZXRlKCZjdHJsLT52aWRlb19jb21wKTsKKwl9CisKKwlpZiAoY3RybC0+Y2F0YWxvZy0+aXNy ICYgRFBfQ1RSTF9JTlRSX0lETEVfUEFUVEVSTl9TRU5UKSB7CisJCURSTV9ERUJVR19EUCgiaWRs ZV9wYXR0ZXJuc19zZW50XG4iKTsKKwkJY29tcGxldGUoJmN0cmwtPmlkbGVfY29tcCk7CisJfQor fQorCitzdHJ1Y3QgZHBfY3RybCAqZHBfY3RybF9nZXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1 Y3QgZHBfbGluayAqbGluaywgc3RydWN0IGRwX3BhbmVsICpwYW5lbCwKKwkJCXN0cnVjdCBkcF9h dXggKmF1eCwgc3RydWN0IGRwX3Bvd2VyICpwb3dlciwgc3RydWN0IGRwX2NhdGFsb2dfY3RybCAq Y2F0YWxvZywKKwkJCXN0cnVjdCBkcF9wYXJzZXIgKnBhcnNlcikKK3sKKwlpbnQgcmMgPSAwOwor CXN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0cmw7CisJc3RydWN0IGRwX2N0cmwgKmRwX2N0cmw7 CisKKwlpZiAoIWRldiB8fCAhcGFuZWwgfHwgIWF1eCB8fAorCSAgICAhbGluayB8fCAhY2F0YWxv ZykgeworCQlEUk1fRVJST1IoImludmFsaWQgaW5wdXRcbiIpOworCQlyYyA9IC1FSU5WQUw7CisJ CWdvdG8gZXJyb3I7CisJfQorCisJY3RybCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqY3Ry bCksIEdGUF9LRVJORUwpOworCWlmICghY3RybCkgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8g ZXJyb3I7CisJfQorCisJaW5pdF9jb21wbGV0aW9uKCZjdHJsLT5pZGxlX2NvbXApOworCWluaXRf Y29tcGxldGlvbigmY3RybC0+dmlkZW9fY29tcCk7CisJbXV0ZXhfaW5pdCgmY3RybC0+cHVzaF9p ZGxlX211dGV4KTsKKworCS8qIGluIHBhcmFtZXRlcnMgKi8KKwljdHJsLT5wYXJzZXIgICA9IHBh cnNlcjsKKwljdHJsLT5wYW5lbCAgICA9IHBhbmVsOworCWN0cmwtPnBvd2VyICAgID0gcG93ZXI7 CisJY3RybC0+YXV4ICAgICAgPSBhdXg7CisJY3RybC0+bGluayAgICAgPSBsaW5rOworCWN0cmwt PmNhdGFsb2cgID0gY2F0YWxvZzsKKwljdHJsLT5kZXYgICAgICA9IGRldjsKKworCWRwX2N0cmwg PSAmY3RybC0+ZHBfY3RybDsKKworCXJldHVybiBkcF9jdHJsOworZXJyb3I6CisJcmV0dXJuIEVS Ul9QVFIocmMpOworfQorCit2b2lkIGRwX2N0cmxfcHV0KHN0cnVjdCBkcF9jdHJsICpkcF9jdHJs KQoreworCXN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0cmw7CisKKwlpZiAoIWRwX2N0cmwpCisJ CXJldHVybjsKKworCWN0cmwgPSBjb250YWluZXJfb2YoZHBfY3RybCwgc3RydWN0IGRwX2N0cmxf cHJpdmF0ZSwgZHBfY3RybCk7CisKKwltdXRleF9kZXN0cm95KCZjdHJsLT5wdXNoX2lkbGVfbXV0 ZXgpOworCisJZGV2bV9rZnJlZShjdHJsLT5kZXYsIGN0cmwpOworfQpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL21zbS9kcC9kcF9jdHJsLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2Rw X2N0cmwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTRjODA3Ci0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9jdHJsLmgKQEAgLTAsMCAr MSwzNiBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLworLyoK KyAqIENvcHlyaWdodCAoYykgMjAxMi0yMDE5LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJp Z2h0cyByZXNlcnZlZC4KKyAqLworCisjaWZuZGVmIF9EUF9DVFJMX0hfCisjZGVmaW5lIF9EUF9D VFJMX0hfCisKKyNpbmNsdWRlICJkcF9hdXguaCIKKyNpbmNsdWRlICJkcF9wYW5lbC5oIgorI2lu Y2x1ZGUgImRwX2xpbmsuaCIKKyNpbmNsdWRlICJkcF9wYXJzZXIuaCIKKyNpbmNsdWRlICJkcF9w b3dlci5oIgorI2luY2x1ZGUgImRwX2NhdGFsb2cuaCIKKworc3RydWN0IGRwX2N0cmwgeworCWJv b2wgb3JpZW50YXRpb247CisJYXRvbWljX3QgYWJvcnRlZDsKKwl1MzIgcGl4ZWxfcmF0ZTsKK307 CisKK2ludCBkcF9jdHJsX2hvc3RfaW5pdChzdHJ1Y3QgZHBfY3RybCAqZHBfY3RybCwgYm9vbCBm bGlwKTsKK3ZvaWQgZHBfY3RybF9ob3N0X2RlaW5pdChzdHJ1Y3QgZHBfY3RybCAqZHBfY3RybCk7 CitpbnQgZHBfY3RybF9vbihzdHJ1Y3QgZHBfY3RybCAqZHBfY3RybCk7Cit2b2lkIGRwX2N0cmxf b2ZmKHN0cnVjdCBkcF9jdHJsICpkcF9jdHJsKTsKK3ZvaWQgZHBfY3RybF9wdXNoX2lkbGUoc3Ry dWN0IGRwX2N0cmwgKmRwX2N0cmwpOwordm9pZCBkcF9jdHJsX2Fib3J0KHN0cnVjdCBkcF9jdHJs ICpkcF9jdHJsKTsKK3ZvaWQgZHBfY3RybF9pc3Ioc3RydWN0IGRwX2N0cmwgKmRwX2N0cmwpOwor dm9pZCBkcF9jdHJsX3Jlc2V0KHN0cnVjdCBkcF9jdHJsICpkcF9jdHJsKTsKK3ZvaWQgZHBfY3Ry bF9oYW5kbGVfc2lua19yZXF1ZXN0KHN0cnVjdCBkcF9jdHJsICpkcF9jdHJsKTsKK3N0cnVjdCBk cF9jdHJsICpkcF9jdHJsX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkcF9saW5rICps aW5rLCBzdHJ1Y3QgZHBfcGFuZWwgKnBhbmVsLAorCQkJc3RydWN0IGRwX2F1eCAqYXV4LCBzdHJ1 Y3QgZHBfcG93ZXIgKnBvd2VyLCBzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjYXRhbG9nLAorCQkJ c3RydWN0IGRwX3BhcnNlciAqcGFyc2VyKTsKK3ZvaWQgZHBfY3RybF9wdXQoc3RydWN0IGRwX2N0 cmwgKmRwX2N0cmwpOworCisjZW5kaWYgLyogX0RQX0NUUkxfSF8gKi8KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9k cC9kcF9kaXNwbGF5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIwNjgy YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGlzcGxheS5j CkBAIC0wLDAgKzEsOTQxIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1v bmx5CisvKgorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMTksIFRoZSBMaW51eCBGb3VuZGF0aW9u LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkJIltkcm0t ZHBdICVzOiAiIGZtdCwgX19mdW5jX18KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2lu Y2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVk ZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgorI2luY2x1 ZGUgPGxpbnV4L29mX2lycS5oPgorCisjaW5jbHVkZSAibXNtX2Rydi5oIgorI2luY2x1ZGUgImRw X2V4dGNvbi5oIgorI2luY2x1ZGUgImRwX3BhcnNlci5oIgorI2luY2x1ZGUgImRwX3Bvd2VyLmgi CisjaW5jbHVkZSAiZHBfY2F0YWxvZy5oIgorI2luY2x1ZGUgImRwX2F1eC5oIgorI2luY2x1ZGUg ImRwX2xpbmsuaCIKKyNpbmNsdWRlICJkcF9wYW5lbC5oIgorI2luY2x1ZGUgImRwX2N0cmwuaCIK KyNpbmNsdWRlICJkcF9kaXNwbGF5LmgiCisjaW5jbHVkZSAiZHBfZHJtLmgiCisKK3N0YXRpYyBz dHJ1Y3QgbXNtX2RwICpnX2RwX2Rpc3BsYXk7CisjZGVmaW5lIEhQRF9TVFJJTkdfU0laRSAzMAor CitzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlIHsKKwljaGFyICpuYW1lOworCWludCBpcnE7CisK KwkvKiBzdGF0ZSB2YXJpYWJsZXMgKi8KKwlib29sIGNvcmVfaW5pdGlhbGl6ZWQ7CisJYm9vbCBw b3dlcl9vbjsKKwlib29sIGhwZF9pcnFfb247CisJYm9vbCBhdWRpb19zdXBwb3J0ZWQ7CisKKwlz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXN0cnVjdCBkZW50cnkgKnJvb3Q7CisJc3Ry dWN0IGNvbXBsZXRpb24gbm90aWZpY2F0aW9uX2NvbXA7CisKKwlzdHJ1Y3QgZHBfdXNicGQgICAq dXNicGQ7CisJc3RydWN0IGRwX3BhcnNlciAgKnBhcnNlcjsKKwlzdHJ1Y3QgZHBfcG93ZXIgICAq cG93ZXI7CisJc3RydWN0IGRwX2NhdGFsb2cgKmNhdGFsb2c7CisJc3RydWN0IGRwX2F1eCAgICAg KmF1eDsKKwlzdHJ1Y3QgZHBfbGluayAgICAqbGluazsKKwlzdHJ1Y3QgZHBfcGFuZWwgICAqcGFu ZWw7CisJc3RydWN0IGRwX2N0cmwgICAgKmN0cmw7CisKKwlzdHJ1Y3QgZHBfdXNicGRfY2IgdXNi cGRfY2I7CisJc3RydWN0IGRwX2Rpc3BsYXlfbW9kZSBkcF9tb2RlOworCXN0cnVjdCBtc21fZHAg ZHBfZGlzcGxheTsKKworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZHBf ZHRfbWF0Y2hbXSA9IHsKKwl7LmNvbXBhdGlibGUgPSAicWNvbSxkcC1kaXNwbGF5In0sCisJe30K K307CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBkcF9kaXNwbGF5X2lycShpbnQgaXJxLCB2b2lkICpk ZXZfaWQpCit7CisJc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHAgPSBkZXZfaWQ7CisKKwlp ZiAoIWRwKSB7CisJCURSTV9FUlJPUigiaW52YWxpZCBkYXRhXG4iKTsKKwkJcmV0dXJuIElSUV9O T05FOworCX0KKworCS8qIERQIGNvbnRyb2xsZXIgaXNyICovCisJZHBfY3RybF9pc3IoZHAtPmN0 cmwpOworCisJLyogRFAgYXV4IGlzciAqLworCWRwX2F1eF9pc3IoZHAtPmF1eCk7CisKKwlyZXR1 cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgZHBfZGlzcGxheV9iaW5kKHN0cnVjdCBk ZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAorCQkJICAgdm9pZCAqZGF0YSkKK3sK KwlpbnQgcmMgPSAwOworCXN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUgKmRwOworCXN0cnVjdCBk cm1fZGV2aWNlICpkcm07CisJc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdjsKKwlzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisKKwlpZiAo IWRldiB8fCAhcGRldiB8fCAhbWFzdGVyKSB7CisJCURSTV9FUlJPUigiaW52YWxpZCBwYXJhbShz KSwgZGV2ICVwSywgcGRldiAlcEssIG1hc3RlciAlcEtcbiIsCisJCQkJZGV2LCBwZGV2LCBtYXN0 ZXIpOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gZW5kOworCX0KKworCWRybSA9IGRldl9nZXRf ZHJ2ZGF0YShtYXN0ZXIpOworCWRwID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJaWYg KCFkcm0gfHwgIWRwKSB7CisJCURSTV9FUlJPUigiaW52YWxpZCBwYXJhbShzKSwgZHJtICVwSywg ZHAgJXBLXG4iLAorCQkJCWRybSwgZHApOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gZW5kOwor CX0KKworCWRwLT5kcF9kaXNwbGF5LmRybV9kZXYgPSBkcm07CisJcHJpdiA9IGRybS0+ZGV2X3By aXZhdGU7CisJcHJpdi0+ZHAgPSAmKGRwLT5kcF9kaXNwbGF5KTsKKworCXJjID0gZHAtPnBhcnNl ci0+cGFyc2UoZHAtPnBhcnNlcik7CisJaWYgKHJjKSB7CisJCURSTV9FUlJPUigiZGV2aWNlIHRy ZWUgcGFyc2luZyBmYWlsZWRcbiIpOworCQlnb3RvIGVuZDsKKwl9CisKKwlyYyA9IGRwX2F1eF9y ZWdpc3RlcihkcC0+YXV4KTsKKwlpZiAocmMpIHsKKwkJRFJNX0VSUk9SKCJEUk0gRFAgQVVYIHJl Z2lzdGVyIGZhaWxlZFxuIik7CisJCWdvdG8gZW5kOworCX0KKworCXJjID0gZHBfcG93ZXJfY2xp ZW50X2luaXQoZHAtPnBvd2VyKTsKKwlpZiAocmMpIHsKKwkJRFJNX0VSUk9SKCJQb3dlciBjbGll bnQgY3JlYXRlIGZhaWxlZFxuIik7CisJCWdvdG8gZW5kOworCX0KKworZW5kOgorCXJldHVybiBy YzsKK30KKworc3RhdGljIHZvaWQgZHBfZGlzcGxheV91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2 LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCisJCQkgICAgICB2b2lkICpkYXRhKQoreworCXN0cnVj dCBkcF9kaXNwbGF5X3ByaXZhdGUgKmRwOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYg PSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gZGV2 X2dldF9kcnZkYXRhKG1hc3Rlcik7CisJc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdiA9IGRy bS0+ZGV2X3ByaXZhdGU7CisKKwlpZiAoIWRldiB8fCAhcGRldikgeworCQlEUk1fRVJST1IoImlu dmFsaWQgcGFyYW0ocylcbiIpOworCQlyZXR1cm47CisJfQorCisJZHAgPSBwbGF0Zm9ybV9nZXRf ZHJ2ZGF0YShwZGV2KTsKKwlpZiAoIWRwKSB7CisJCURSTV9FUlJPUigiSW52YWxpZCBwYXJhbXNc biIpOworCQlyZXR1cm47CisJfQorCisJKHZvaWQpZHBfcG93ZXJfY2xpZW50X2RlaW5pdChkcC0+ cG93ZXIpOworCSh2b2lkKWRwX2F1eF91bnJlZ2lzdGVyKGRwLT5hdXgpOworCXByaXYtPmRwID0g TlVMTDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21wb25lbnRfb3BzIGRwX2Rpc3BsYXlf Y29tcF9vcHMgPSB7CisJLmJpbmQgPSBkcF9kaXNwbGF5X2JpbmQsCisJLnVuYmluZCA9IGRwX2Rp c3BsYXlfdW5iaW5kLAorfTsKKworc3RhdGljIGJvb2wgZHBfZGlzcGxheV9pc19kc19icmlkZ2Uo c3RydWN0IGRwX3BhbmVsICpwYW5lbCkKK3sKKwlyZXR1cm4gKHBhbmVsLT5kcGNkW0RQX0RPV05T VFJFQU1QT1JUX1BSRVNFTlRdICYKKwkJRFBfRFdOX1NUUk1fUE9SVF9QUkVTRU5UKTsKK30KKwor c3RhdGljIGJvb2wgZHBfZGlzcGxheV9pc19zaW5rX2NvdW50X3plcm8oc3RydWN0IGRwX2Rpc3Bs YXlfcHJpdmF0ZSAqZHApCit7CisJcmV0dXJuIGRwX2Rpc3BsYXlfaXNfZHNfYnJpZGdlKGRwLT5w YW5lbCkgJiYKKwkJKGRwLT5saW5rLT5zaW5rX2NvdW50ID09IDApOworfQorCitzdGF0aWMgdm9p ZCBkcF9kaXNwbGF5X3NlbmRfaHBkX2V2ZW50KHN0cnVjdCBtc21fZHAgKmRwX2Rpc3BsYXkpCit7 CisJc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHA7CisJc3RydWN0IGRybV9jb25uZWN0b3Ig KmNvbm5lY3RvcjsKKworCWRwID0gY29udGFpbmVyX29mKGRwX2Rpc3BsYXksIHN0cnVjdCBkcF9k aXNwbGF5X3ByaXZhdGUsIGRwX2Rpc3BsYXkpOworCWlmICghZHApIHsKKwkJRFJNX0VSUk9SKCJp bnZhbGlkIHBhcmFtc1xuIik7CisJCXJldHVybjsKKwl9CisKKwljb25uZWN0b3IgPSBkcC0+ZHBf ZGlzcGxheS5jb25uZWN0b3I7CisJZHJtX2hlbHBlcl9ocGRfaXJxX2V2ZW50KGNvbm5lY3Rvci0+ ZGV2KTsKK30KKworc3RhdGljIGludCBkcF9kaXNwbGF5X3NlbmRfaHBkX25vdGlmaWNhdGlvbihz dHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcCwKKwkJCQkJICAgIGJvb2wgaHBkKQoreworCWlm ICgoaHBkICYmIGRwLT5kcF9kaXNwbGF5LmlzX2Nvbm5lY3RlZCkgfHwKKwkJCSghaHBkICYmICFk cC0+ZHBfZGlzcGxheS5pc19jb25uZWN0ZWQpKSB7CisJCURSTV9ERUJVR19EUCgiSFBEIGFscmVh ZHkgJXNcbiIsIChocGQgPyAib24iIDogIm9mZiIpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyog cmVzZXQgdmlkZW8gcGF0dGVybiBmbGFnIG9uIGRpc2Nvbm5lY3QgKi8KKwlpZiAoIWhwZCkKKwkJ ZHAtPnBhbmVsLT52aWRlb190ZXN0ID0gZmFsc2U7CisKKwlkcC0+ZHBfZGlzcGxheS5pc19jb25u ZWN0ZWQgPSBocGQ7CisJcmVpbml0X2NvbXBsZXRpb24oJmRwLT5ub3RpZmljYXRpb25fY29tcCk7 CisJZHBfZGlzcGxheV9zZW5kX2hwZF9ldmVudCgmZHAtPmRwX2Rpc3BsYXkpOworCisJaWYgKCF3 YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmRwLT5ub3RpZmljYXRpb25fY29tcCwgSFogKiAy KSkgeworCQlwcl93YXJuKCIlcyB0aW1lb3V0XG4iLCBocGQgPyAiY29ubmVjdCIgOiAiZGlzY29u bmVjdCIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBkcF9kaXNwbGF5X3Byb2Nlc3NfaHBkX2hpZ2goc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0 ZSAqZHApCit7CisJaW50IHJjID0gMDsKKwlzdHJ1Y3QgZWRpZCAqZWRpZDsKKworCWRwX2F1eF9p bml0KGRwLT5hdXgsIGRwLT5wYXJzZXItPmF1eF9jZmcpOworCisJaWYgKGRwLT5saW5rLT5wc21f ZW5hYmxlZCkKKwkJZ290byBub3RpZnk7CisKKwlyYyA9IGRwX3BhbmVsX3JlYWRfc2lua19jYXBz KGRwLT5wYW5lbCwgZHAtPmRwX2Rpc3BsYXkuY29ubmVjdG9yKTsKKwlpZiAocmMpCisJCWdvdG8g bm90aWZ5OworCisJZHBfbGlua19wcm9jZXNzX3JlcXVlc3QoZHAtPmxpbmspOworCisJaWYgKGRw X2Rpc3BsYXlfaXNfc2lua19jb3VudF96ZXJvKGRwKSkgeworCQlEUk1fREVCVUdfRFAoIm5vIGRv d25zdHJlYW0gZGV2aWNlcyBjb25uZWN0ZWRcbiIpOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8g ZW5kOworCX0KKworCWVkaWQgPSBkcC0+cGFuZWwtPmVkaWQ7CisKKwlkcC0+YXVkaW9fc3VwcG9y dGVkID0gZHJtX2RldGVjdF9tb25pdG9yX2F1ZGlvKGVkaWQpOworCisJZHBfcGFuZWxfaGFuZGxl X3NpbmtfcmVxdWVzdChkcC0+cGFuZWwpOworCisJZHAtPmRwX2Rpc3BsYXkubWF4X3BjbGtfa2h6 ID0gZHAtPnBhcnNlci0+bWF4X3BjbGtfa2h6Oworbm90aWZ5OgorCWRwX2Rpc3BsYXlfc2VuZF9o cGRfbm90aWZpY2F0aW9uKGRwLCB0cnVlKTsKKworZW5kOgorCXJldHVybiByYzsKK30KKworc3Rh dGljIHZvaWQgZHBfZGlzcGxheV9ob3N0X2luaXQoc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAq ZHApCit7CisJYm9vbCBmbGlwID0gZmFsc2U7CisKKwlpZiAoZHAtPmNvcmVfaW5pdGlhbGl6ZWQp IHsKKwkJRFJNX0RFQlVHX0RQKCJEUCBjb3JlIGFscmVhZHkgaW5pdGlhbGl6ZWRcbiIpOworCQly ZXR1cm47CisJfQorCisJaWYgKGRwLT51c2JwZC0+b3JpZW50YXRpb24gPT0gT1JJRU5UQVRJT05f Q0MyKQorCQlmbGlwID0gdHJ1ZTsKKworCWRwX3Bvd2VyX2luaXQoZHAtPnBvd2VyLCBmbGlwKTsK KwlkcF9jdHJsX2hvc3RfaW5pdChkcC0+Y3RybCwgZmxpcCk7CisJZW5hYmxlX2lycShkcC0+aXJx KTsKKwlkcC0+Y29yZV9pbml0aWFsaXplZCA9IHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIGRwX2Rp c3BsYXlfaG9zdF9kZWluaXQoc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHApCit7CisJaWYg KCFkcC0+Y29yZV9pbml0aWFsaXplZCkgeworCQlEUk1fREVCVUdfRFAoIkRQIGNvcmUgYWxyZWFk eSBvZmZcbiIpOworCQlyZXR1cm47CisJfQorCisJZHBfY3RybF9ob3N0X2RlaW5pdChkcC0+Y3Ry bCk7CisJZHBfYXV4X2RlaW5pdChkcC0+YXV4KTsKKwlkcF9wb3dlcl9kZWluaXQoZHAtPnBvd2Vy KTsKKwlkaXNhYmxlX2lycShkcC0+aXJxKTsKKwlkcC0+Y29yZV9pbml0aWFsaXplZCA9IGZhbHNl OworfQorCitzdGF0aWMgdm9pZCBkcF9kaXNwbGF5X3Byb2Nlc3NfaHBkX2xvdyhzdHJ1Y3QgZHBf ZGlzcGxheV9wcml2YXRlICpkcCkKK3sKKwkvKiBjYW5jZWwgYW55IHBlbmRpbmcgcmVxdWVzdCAq LworCWRwX2N0cmxfYWJvcnQoZHAtPmN0cmwpOworCisJZHBfZGlzcGxheV9zZW5kX2hwZF9ub3Rp ZmljYXRpb24oZHAsIGZhbHNlKTsKKworCWRwX2F1eF9kZWluaXQoZHAtPmF1eCk7Cit9CisKK3N0 YXRpYyBpbnQgZHBfZGlzcGxheV91c2JwZF9jb25maWd1cmVfY2Ioc3RydWN0IGRldmljZSAqZGV2 KQoreworCWludCByYyA9IDA7CisJc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHA7CisKKwlp ZiAoIWRldikgeworCQlEUk1fRVJST1IoImludmFsaWQgZGV2XG4iKTsKKwkJcmMgPSAtRUlOVkFM OworCQlnb3RvIGVuZDsKKwl9CisKKwlkcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWlmICgh ZHApIHsKKwkJRFJNX0VSUk9SKCJubyBkcml2ZXIgZGF0YSBmb3VuZFxuIik7CisJCXJjID0gLUVO T0RFVjsKKwkJZ290byBlbmQ7CisJfQorCisJZHBfZGlzcGxheV9ob3N0X2luaXQoZHApOworCisJ aWYgKGRwLT51c2JwZC0+aHBkX2hpZ2gpCisJCWRwX2Rpc3BsYXlfcHJvY2Vzc19ocGRfaGlnaChk cCk7CitlbmQ6CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBkcF9kaXNwbGF5X2NsZWFu KHN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUgKmRwKQoreworCWRwX2N0cmxfcHVzaF9pZGxlKGRw LT5jdHJsKTsKKwlkcF9jdHJsX29mZihkcC0+Y3RybCk7Cit9CisKK3N0YXRpYyBpbnQgZHBfZGlz cGxheV91c2JwZF9kaXNjb25uZWN0X2NiKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgcmMg PSAwOworCXN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUgKmRwOworCisJaWYgKCFkZXYpIHsKKwkJ RFJNX0VSUk9SKCJpbnZhbGlkIGRldlxuIik7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBlbmQ7 CisJfQorCisJZHAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpZiAoIWRwKSB7CisJCURSTV9F UlJPUigibm8gZHJpdmVyIGRhdGEgZm91bmRcbiIpOworCQlyYyA9IC1FTk9ERVY7CisJCWdvdG8g ZW5kOworCX0KKworCS8qIGNhbmNlbCBhbnkgcGVuZGluZyByZXF1ZXN0ICovCisJZHBfY3RybF9h Ym9ydChkcC0+Y3RybCk7CisKKwlyYyA9IGRwX2Rpc3BsYXlfc2VuZF9ocGRfbm90aWZpY2F0aW9u KGRwLCBmYWxzZSk7CisKKwkvKiBpZiBjYWJsZSBpcyBkaXNjb25uZWN0ZWQsIHJlc2V0IHBzbV9l bmFibGVkIGZsYWcgKi8KKwlpZiAoIWRwLT51c2JwZC0+YWx0X21vZGVfY2ZnX2RvbmUpCisJCWRw LT5saW5rLT5wc21fZW5hYmxlZCA9IGZhbHNlOworCisJaWYgKChyYyA8IDApICYmIGRwLT5wb3dl cl9vbikKKwkJZHBfZGlzcGxheV9jbGVhbihkcCk7CisKKwlkcF9kaXNwbGF5X2hvc3RfZGVpbml0 KGRwKTsKK2VuZDoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIGRwX2Rpc3BsYXlfaGFu ZGxlX3ZpZGVvX3JlcXVlc3Qoc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHApCit7CisJaWYg KGRwLT5saW5rLT5zaW5rX3JlcXVlc3QgJiBEUF9URVNUX0xJTktfVklERU9fUEFUVEVSTikgewor CQkvKiBmb3JjZSBkaXNjb25uZWN0IGZvbGxvd2VkIGJ5IGNvbm5lY3QgKi8KKwkJZHAtPnVzYnBk LT5jb25uZWN0KGRwLT51c2JwZCwgZmFsc2UpOworCQlkcC0+cGFuZWwtPnZpZGVvX3Rlc3QgPSB0 cnVlOworCQlkcC0+dXNicGQtPmNvbm5lY3QoZHAtPnVzYnBkLCB0cnVlKTsKKwkJZHBfbGlua19z ZW5kX3Rlc3RfcmVzcG9uc2UoZHAtPmxpbmspOworCX0KK30KKworc3RhdGljIGludCBkcF9kaXNw bGF5X2hhbmRsZV9ocGRfaXJxKHN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUgKmRwKQoreworCWlm IChkcC0+bGluay0+c2lua19yZXF1ZXN0ICYgRFNfUE9SVF9TVEFUVVNfQ0hBTkdFRCkgeworCQlk cF9kaXNwbGF5X3NlbmRfaHBkX25vdGlmaWNhdGlvbihkcCwgZmFsc2UpOworCisJCWlmIChkcF9k aXNwbGF5X2lzX3NpbmtfY291bnRfemVybyhkcCkpIHsKKwkJCURSTV9ERUJVR19EUCgic2luayBj b3VudCBpcyB6ZXJvLCBub3RoaW5nIHRvIGRvXG4iKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJ cmV0dXJuIGRwX2Rpc3BsYXlfcHJvY2Vzc19ocGRfaGlnaChkcCk7CisJfQorCisJZHBfY3RybF9o YW5kbGVfc2lua19yZXF1ZXN0KGRwLT5jdHJsKTsKKworCWRwX2Rpc3BsYXlfaGFuZGxlX3ZpZGVv X3JlcXVlc3QoZHApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHBfZGlzcGxheV91 c2JwZF9hdHRlbnRpb25fY2Ioc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCByYyA9IDA7CisJ c3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHA7CisKKwlpZiAoIWRldikgeworCQlEUk1fRVJS T1IoImludmFsaWQgZGV2XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZHAgPSBkZXZf Z2V0X2RydmRhdGEoZGV2KTsKKwlpZiAoIWRwKSB7CisJCURSTV9FUlJPUigibm8gZHJpdmVyIGRh dGEgZm91bmRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoZHAtPnVzYnBkLT5o cGRfaXJxKSB7CisJCWRwLT5ocGRfaXJxX29uID0gdHJ1ZTsKKworCQlyYyA9IGRwX2xpbmtfcHJv Y2Vzc19yZXF1ZXN0KGRwLT5saW5rKTsKKwkJLyogY2hlY2sgZm9yIGFueSB0ZXN0IHJlcXVlc3Qg aXNzdWVkIGJ5IHNpbmsgKi8KKwkJaWYgKCFyYykKKwkJCWRwX2Rpc3BsYXlfaGFuZGxlX2hwZF9p cnEoZHApOworCisJCWRwLT5ocGRfaXJxX29uID0gZmFsc2U7CisJCWdvdG8gZW5kOworCX0KKwor CWlmICghZHAtPnVzYnBkLT5ocGRfaGlnaCkgeworCQlkcF9kaXNwbGF5X3Byb2Nlc3NfaHBkX2xv dyhkcCk7CisJCWdvdG8gZW5kOworCX0KKworCWlmIChkcC0+dXNicGQtPmFsdF9tb2RlX2NmZ19k b25lKQorCQlkcF9kaXNwbGF5X3Byb2Nlc3NfaHBkX2hpZ2goZHApOworZW5kOgorCXJldHVybiBy YzsKK30KKworc3RhdGljIHZvaWQgZHBfZGlzcGxheV9kZWluaXRfc3ViX21vZHVsZXMoc3RydWN0 IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHApCit7CisJZHBfY3RybF9wdXQoZHAtPmN0cmwpOworCWRw X2xpbmtfcHV0KGRwLT5saW5rKTsKKwlkcF9wYW5lbF9wdXQoZHAtPnBhbmVsKTsKKwlkcF9hdXhf cHV0KGRwLT5hdXgpOworCWRwX3Bvd2VyX3B1dChkcC0+cG93ZXIpOworCWRwX2NhdGFsb2dfcHV0 KGRwLT5jYXRhbG9nKTsKKwlkcF9wYXJzZXJfcHV0KGRwLT5wYXJzZXIpOworfQorCitzdGF0aWMg aW50IGRwX2luaXRfc3ViX21vZHVsZXMoc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHApCit7 CisJaW50IHJjID0gMDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZHAtPnBkZXYtPmRldjsKKwlz dHJ1Y3QgZHBfdXNicGRfY2IgKmNiID0gJmRwLT51c2JwZF9jYjsKKwlzdHJ1Y3QgZHBfcGFuZWxf aW4gcGFuZWxfaW4gPSB7CisJCS5kZXYgPSBkZXYsCisJfTsKKworCS8qIENhbGxiYWNrIEFQSXMg dXNlZCBmb3IgY2FibGUgc3RhdHVzIGNoYW5nZSBldmVudCAqLworCWNiLT5jb25maWd1cmUgID0g ZHBfZGlzcGxheV91c2JwZF9jb25maWd1cmVfY2I7CisJY2ItPmRpc2Nvbm5lY3QgPSBkcF9kaXNw bGF5X3VzYnBkX2Rpc2Nvbm5lY3RfY2I7CisJY2ItPmF0dGVudGlvbiAgPSBkcF9kaXNwbGF5X3Vz YnBkX2F0dGVudGlvbl9jYjsKKworCWRwLT5wYXJzZXIgPSBkcF9wYXJzZXJfZ2V0KGRwLT5wZGV2 KTsKKwlpZiAoSVNfRVJSKGRwLT5wYXJzZXIpKSB7CisJCXJjID0gUFRSX0VSUihkcC0+cGFyc2Vy KTsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBwYXJzZXIsIHJjID0gJWRcbiIs IHJjKTsKKwkJZHAtPnBhcnNlciA9IE5VTEw7CisJCWdvdG8gZXJyb3JfcGFyc2VyOworCX0KKwor CWRwLT5jYXRhbG9nID0gZHBfY2F0YWxvZ19nZXQoZGV2LCAmZHAtPnBhcnNlci0+aW8pOworCWlm IChJU19FUlIoZHAtPmNhdGFsb2cpKSB7CisJCXJjID0gUFRSX0VSUihkcC0+Y2F0YWxvZyk7CisJ CURSTV9FUlJPUigiZmFpbGVkIHRvIGluaXRpYWxpemUgY2F0YWxvZywgcmMgPSAlZFxuIiwgcmMp OworCQlkcC0+Y2F0YWxvZyA9IE5VTEw7CisJCWdvdG8gZXJyb3JfY2F0YWxvZzsKKwl9CisKKwlk cC0+cG93ZXIgPSBkcF9wb3dlcl9nZXQoZHAtPnBhcnNlcik7CisJaWYgKElTX0VSUihkcC0+cG93 ZXIpKSB7CisJCXJjID0gUFRSX0VSUihkcC0+cG93ZXIpOworCQlEUk1fRVJST1IoImZhaWxlZCB0 byBpbml0aWFsaXplIHBvd2VyLCByYyA9ICVkXG4iLCByYyk7CisJCWRwLT5wb3dlciA9IE5VTEw7 CisJCWdvdG8gZXJyb3JfcG93ZXI7CisJfQorCisJZHAtPmF1eCA9IGRwX2F1eF9nZXQoZGV2LCAm ZHAtPmNhdGFsb2ctPmF1eCwgZHAtPnBhcnNlci0+YXV4X2NmZyk7CisJaWYgKElTX0VSUihkcC0+ YXV4KSkgeworCQlyYyA9IFBUUl9FUlIoZHAtPmF1eCk7CisJCURSTV9FUlJPUigiZmFpbGVkIHRv IGluaXRpYWxpemUgYXV4LCByYyA9ICVkXG4iLCByYyk7CisJCWRwLT5hdXggPSBOVUxMOworCQln b3RvIGVycm9yX2F1eDsKKwl9CisKKwlkcC0+bGluayA9IGRwX2xpbmtfZ2V0KGRldiwgZHAtPmF1 eCk7CisJaWYgKElTX0VSUihkcC0+bGluaykpIHsKKwkJcmMgPSBQVFJfRVJSKGRwLT5saW5rKTsK KwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBsaW5rLCByYyA9ICVkXG4iLCByYyk7 CisJCWRwLT5saW5rID0gTlVMTDsKKwkJZ290byBlcnJvcl9saW5rOworCX0KKworCXBhbmVsX2lu LmF1eCA9IGRwLT5hdXg7CisJcGFuZWxfaW4uY2F0YWxvZyA9ICZkcC0+Y2F0YWxvZy0+cGFuZWw7 CisJcGFuZWxfaW4ubGluayA9IGRwLT5saW5rOworCisJZHAtPnBhbmVsID0gZHBfcGFuZWxfZ2V0 KCZwYW5lbF9pbik7CisJaWYgKElTX0VSUihkcC0+cGFuZWwpKSB7CisJCXJjID0gUFRSX0VSUihk cC0+cGFuZWwpOworCQlEUk1fRVJST1IoImZhaWxlZCB0byBpbml0aWFsaXplIHBhbmVsLCByYyA9 ICVkXG4iLCByYyk7CisJCWRwLT5wYW5lbCA9IE5VTEw7CisJCWdvdG8gZXJyb3JfcGFuZWw7CisJ fQorCisJZHAtPmN0cmwgPSBkcF9jdHJsX2dldChkZXYsIGRwLT5saW5rLCBkcC0+cGFuZWwsIGRw LT5hdXgsCisJCQkgICAgICAgZHAtPnBvd2VyLCAmZHAtPmNhdGFsb2ctPmN0cmwsIGRwLT5wYXJz ZXIpOworCWlmIChJU19FUlIoZHAtPmN0cmwpKSB7CisJCXJjID0gUFRSX0VSUihkcC0+Y3RybCk7 CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGluaXRpYWxpemUgY3RybCwgcmMgPSAlZFxuIiwgcmMp OworCQlkcC0+Y3RybCA9IE5VTEw7CisJCWdvdG8gZXJyb3JfY3RybDsKKwl9CisKKwlyZXR1cm4g cmM7CitlcnJvcl9jdHJsOgorCWRwX3BhbmVsX3B1dChkcC0+cGFuZWwpOworZXJyb3JfcGFuZWw6 CisJZHBfbGlua19wdXQoZHAtPmxpbmspOworZXJyb3JfbGluazoKKwlkcF9hdXhfcHV0KGRwLT5h dXgpOworZXJyb3JfYXV4OgorCWRwX3Bvd2VyX3B1dChkcC0+cG93ZXIpOworZXJyb3JfcG93ZXI6 CisJZHBfY2F0YWxvZ19wdXQoZHAtPmNhdGFsb2cpOworZXJyb3JfY2F0YWxvZzoKKwlkcF9wYXJz ZXJfcHV0KGRwLT5wYXJzZXIpOworZXJyb3JfcGFyc2VyOgorCXJldHVybiByYzsKK30KKworc3Rh dGljIGludCBkcF9kaXNwbGF5X3NldF9tb2RlKHN0cnVjdCBtc21fZHAgKmRwX2Rpc3BsYXksCisJ CQkgICAgICAgc3RydWN0IGRwX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlpbnQgcmMgPSAwOwor CXN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUgKmRwOworCisJZHAgPSBjb250YWluZXJfb2YoZHBf ZGlzcGxheSwgc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSwgZHBfZGlzcGxheSk7CisKKwlkcC0+ cGFuZWwtPmRwX21vZGUuZHJtX21vZGUgPSBtb2RlLT5kcm1fbW9kZTsKKwlkcC0+cGFuZWwtPmRw X21vZGUuYnBwID0gbW9kZS0+YnBwOworCWRwLT5wYW5lbC0+ZHBfbW9kZS5jYXBhYmlsaXRpZXMg PSBtb2RlLT5jYXBhYmlsaXRpZXM7CisJZHBfcGFuZWxfaW5pdF9wYW5lbF9pbmZvKGRwLT5wYW5l bCk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGRwX2Rpc3BsYXlfcHJlcGFyZShzdHJ1 Y3QgbXNtX2RwICpkcCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkcF9kaXNwbGF5 X2VuYWJsZShzdHJ1Y3QgbXNtX2RwICpkcF9kaXNwbGF5KQoreworCWludCByYyA9IDA7CisJc3Ry dWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHA7CisKKwlkcCA9IGNvbnRhaW5lcl9vZihkcF9kaXNw bGF5LCBzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlLCBkcF9kaXNwbGF5KTsKKworCWlmIChkcC0+ cG93ZXJfb24pIHsKKwkJRFJNX0RFQlVHX0RQKCJMaW5rIGFscmVhZHkgc2V0dXAsIHJldHVyblxu Iik7CisJCXJldHVybiAwOworCX0KKworCWRwX2F1eF9pbml0KGRwLT5hdXgsIGRwLT5wYXJzZXIt PmF1eF9jZmcpOworCisJcmMgPSBkcF9jdHJsX29uKGRwLT5jdHJsKTsKKwlpZiAoIXJjKQorCQlk cC0+cG93ZXJfb24gPSB0cnVlOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGRwX2Rp c3BsYXlfcG9zdF9lbmFibGUoc3RydWN0IG1zbV9kcCAqZHBfZGlzcGxheSkKK3sKKwlpbnQgcmMg PSAwOworCXN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUgKmRwOworCisJZHAgPSBjb250YWluZXJf b2YoZHBfZGlzcGxheSwgc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSwgZHBfZGlzcGxheSk7CisK Kwljb21wbGV0ZV9hbGwoJmRwLT5ub3RpZmljYXRpb25fY29tcCk7CisJcmV0dXJuIHJjOworfQor CitzdGF0aWMgaW50IGRwX2Rpc3BsYXlfcHJlX2Rpc2FibGUoc3RydWN0IG1zbV9kcCAqZHBfZGlz cGxheSkKK3sKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUgKmRwOwor CisJZHAgPSBjb250YWluZXJfb2YoZHBfZGlzcGxheSwgc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0 ZSwgZHBfZGlzcGxheSk7CisKKwlpZiAoZHAtPnVzYnBkLT5hbHRfbW9kZV9jZmdfZG9uZSAmJiAo ZHAtPnVzYnBkLT5ocGRfaGlnaCB8fAorCQlkcC0+dXNicGQtPmZvcmNlZF9kaXNjb25uZWN0KSkK KwkJZHBfbGlua19wc21fY29uZmlnKGRwLT5saW5rLCAmZHAtPnBhbmVsLT5saW5rX2luZm8sIHRy dWUpOworCisJZHBfY3RybF9wdXNoX2lkbGUoZHAtPmN0cmwpOworCXJldHVybiByYzsKK30KKwor c3RhdGljIGludCBkcF9kaXNwbGF5X2Rpc2FibGUoc3RydWN0IG1zbV9kcCAqZHBfZGlzcGxheSkK K3sKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUgKmRwOworCisJZHAg PSBjb250YWluZXJfb2YoZHBfZGlzcGxheSwgc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSwgZHBf ZGlzcGxheSk7CisKKwlpZiAoIWRwLT5wb3dlcl9vbiB8fCAhZHAtPmNvcmVfaW5pdGlhbGl6ZWQp CisJCWdvdG8gZXJyb3I7CisKKwlkcF9jdHJsX29mZihkcC0+Y3RybCk7CisKKwlkcC0+cG93ZXJf b24gPSBmYWxzZTsKKworCWNvbXBsZXRlX2FsbCgmZHAtPm5vdGlmaWNhdGlvbl9jb21wKTsKK2Vy cm9yOgorCXJldHVybiByYzsKK30KKworaW50IGRwX2Rpc3BsYXlfcmVxdWVzdF9pcnEoc3RydWN0 IG1zbV9kcCAqZHBfZGlzcGxheSkKK3sKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBkcF9kaXNwbGF5 X3ByaXZhdGUgKmRwOworCisJaWYgKCFkcF9kaXNwbGF5KSB7CisJCURSTV9FUlJPUigiaW52YWxp ZCBpbnB1dFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRwID0gY29udGFpbmVyX29m KGRwX2Rpc3BsYXksIHN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUsIGRwX2Rpc3BsYXkpOworCisJ ZHAtPmlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKGRwLT5wZGV2LT5kZXYub2Zfbm9kZSwgMCk7 CisJaWYgKGRwLT5pcnEgPCAwKSB7CisJCXJjID0gZHAtPmlycTsKKwkJRFJNX0VSUk9SKCJmYWls ZWQgdG8gZ2V0IGlycTogJWRcbiIsIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KKworCXJjID0gZGV2 bV9yZXF1ZXN0X2lycSgmZHAtPnBkZXYtPmRldiwgZHAtPmlycSwgZHBfZGlzcGxheV9pcnEsCisJ CUlSUUZfVFJJR0dFUl9ISUdILCAiZHBfZGlzcGxheV9pc3IiLCBkcCk7CisJaWYgKHJjIDwgMCkg eworCQlEUk1fRVJST1IoImZhaWxlZCB0byByZXF1ZXN0IElSUSV1OiAlZFxuIiwKKwkJCQlkcC0+ aXJxLCByYyk7CisJCXJldHVybiByYzsKKwl9CisJZGlzYWJsZV9pcnEoZHAtPmlycSk7CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkcF9kaXNwbGF5X3VucHJlcGFyZShzdHJ1Y3QgbXNt X2RwICpkcCkKK3sKKwlyZXR1cm4gMDsKK30KKworaW50IGRwX2Rpc3BsYXlfdmFsaWRhdGVfbW9k ZShzdHJ1Y3QgbXNtX2RwICpkcCwgdTMyIG1vZGVfcGNsa19raHopCit7CisJY29uc3QgdTMyIG51 bV9jb21wb25lbnRzID0gMywgZGVmYXVsdF9icHAgPSAyNDsKKwlzdHJ1Y3QgZHBfZGlzcGxheV9w cml2YXRlICpkcF9kaXNwbGF5OworCXN0cnVjdCBkcm1fZHBfbGluayAqbGlua19pbmZvOworCXUz MiBtb2RlX3JhdGVfa2h6ID0gMCwgc3VwcG9ydGVkX3JhdGVfa2h6ID0gMCwgbW9kZV9icHAgPSAw OworCisJaWYgKCFkcCB8fCAhbW9kZV9wY2xrX2toeiB8fCAhZHAtPmNvbm5lY3RvcikgeworCQlE Uk1fRVJST1IoImludmFsaWQgcGFyYW1zXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJ ZHBfZGlzcGxheSA9IGNvbnRhaW5lcl9vZihkcCwgc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSwg ZHBfZGlzcGxheSk7CisJbGlua19pbmZvID0gJmRwX2Rpc3BsYXktPnBhbmVsLT5saW5rX2luZm87 CisKKwltb2RlX2JwcCA9IGRwLT5jb25uZWN0b3ItPmRpc3BsYXlfaW5mby5icGMgKiBudW1fY29t cG9uZW50czsKKwlpZiAoIW1vZGVfYnBwKQorCQltb2RlX2JwcCA9IGRlZmF1bHRfYnBwOworCisJ bW9kZV9icHAgPSBkcF9wYW5lbF9nZXRfbW9kZV9icHAoZHBfZGlzcGxheS0+cGFuZWwsCisJCQlt b2RlX2JwcCwgbW9kZV9wY2xrX2toeik7CisKKwltb2RlX3JhdGVfa2h6ID0gbW9kZV9wY2xrX2to eiAqIG1vZGVfYnBwOworCXN1cHBvcnRlZF9yYXRlX2toeiA9IGxpbmtfaW5mby0+bnVtX2xhbmVz ICogbGlua19pbmZvLT5yYXRlICogODsKKworCWlmIChtb2RlX3JhdGVfa2h6ID4gc3VwcG9ydGVk X3JhdGVfa2h6KQorCQlyZXR1cm4gTU9ERV9CQUQ7CisKKwlyZXR1cm4gTU9ERV9PSzsKK30KKwor aW50IGRwX2Rpc3BsYXlfZ2V0X21vZGVzKHN0cnVjdCBtc21fZHAgKmRwLAorCQkJCXN0cnVjdCBk cF9kaXNwbGF5X21vZGUgKmRwX21vZGUpCit7CisJc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAq ZHBfZGlzcGxheTsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghZHApIHsKKwkJRFJNX0VSUk9SKCJp bnZhbGlkIHBhcmFtc1xuIik7CisJCXJldHVybiAwOworCX0KKworCWRwX2Rpc3BsYXkgPSBjb250 YWluZXJfb2YoZHAsIHN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUsIGRwX2Rpc3BsYXkpOworCisJ cmV0ID0gZHBfcGFuZWxfZ2V0X21vZGVzKGRwX2Rpc3BsYXktPnBhbmVsLAorCQlkcC0+Y29ubmVj dG9yLCBkcF9tb2RlKTsKKwlpZiAoZHBfbW9kZS0+ZHJtX21vZGUuY2xvY2spCisJCWRwLT5tYXhf cGNsa19raHogPSBkcF9tb2RlLT5kcm1fbW9kZS5jbG9jazsKKwlyZXR1cm4gcmV0OworfQorCiti b29sIGRwX2Rpc3BsYXlfY2hlY2tfdmlkZW9fdGVzdChzdHJ1Y3QgbXNtX2RwICpkcCkKK3sKKwlz dHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcF9kaXNwbGF5OworCisJaWYgKCFkcCkgeworCQlE Uk1fRVJST1IoImludmFsaWQgcGFyYW1zXG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWRw X2Rpc3BsYXkgPSBjb250YWluZXJfb2YoZHAsIHN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUsIGRw X2Rpc3BsYXkpOworCisJaWYgKGRwX2Rpc3BsYXktPnBhbmVsLT52aWRlb190ZXN0KQorCQlyZXR1 cm4gdHJ1ZTsKKworCXJldHVybiBmYWxzZTsKK30KKworaW50IGRwX2Rpc3BsYXlfZ2V0X3Rlc3Rf YnBwKHN0cnVjdCBtc21fZHAgKmRwKQoreworCXN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUgKmRw X2Rpc3BsYXk7CisKKwlpZiAoIWRwKSB7CisJCURSTV9FUlJPUigiaW52YWxpZCBwYXJhbXNcbiIp OworCQlyZXR1cm4gMDsKKwl9CisKKwlkcF9kaXNwbGF5ID0gY29udGFpbmVyX29mKGRwLCBzdHJ1 Y3QgZHBfZGlzcGxheV9wcml2YXRlLCBkcF9kaXNwbGF5KTsKKworCXJldHVybiBkcF9saW5rX2Jp dF9kZXB0aF90b19icHAoCisJCWRwX2Rpc3BsYXktPmxpbmstPnRlc3RfdmlkZW8udGVzdF9iaXRf ZGVwdGgpOworfQorCitzdGF0aWMgaW50IGRwX2Rpc3BsYXlfcHJvYmUoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldikKK3sKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBkcF9kaXNwbGF5X3ByaXZh dGUgKmRwOworCisJaWYgKCFwZGV2IHx8ICFwZGV2LT5kZXYub2Zfbm9kZSkgeworCQlEUk1fRVJS T1IoInBkZXYgbm90IGZvdW5kXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZHAgPSBk ZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpkcCksIEdGUF9LRVJORUwpOworCWlmICgh ZHApCisJCXJldHVybiAtRU5PTUVNOworCisJaW5pdF9jb21wbGV0aW9uKCZkcC0+bm90aWZpY2F0 aW9uX2NvbXApOworCisJZHAtPnBkZXYgPSBwZGV2OworCWRwLT5uYW1lID0gImRybV9kcCI7CisK KwlyYyA9IGRwX2luaXRfc3ViX21vZHVsZXMoZHApOworCWlmIChyYykgeworCQlEUk1fRVJST1Io ImluaXQgc3ViIG1vZHVsZSBmYWlsZWRcbiIpOworCQlkZXZtX2tmcmVlKCZwZGV2LT5kZXYsIGRw KTsKKwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEo cGRldiwgZHApOworCisJZ19kcF9kaXNwbGF5ID0gJmRwLT5kcF9kaXNwbGF5OworCisJcmMgPSBj b21wb25lbnRfYWRkKCZwZGV2LT5kZXYsICZkcF9kaXNwbGF5X2NvbXBfb3BzKTsKKwlpZiAocmMp IHsKKwkJRFJNX0VSUk9SKCJjb21wb25lbnQgYWRkIGZhaWxlZCwgcmM9JWRcbiIsIHJjKTsKKwkJ ZHBfZGlzcGxheV9kZWluaXRfc3ViX21vZHVsZXMoZHApOworCQlkZXZtX2tmcmVlKCZwZGV2LT5k ZXYsIGRwKTsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgZHBfZGlzcGxheV9y ZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZHBfZGlzcGxh eV9wcml2YXRlICpkcDsKKworCWlmICghcGRldikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkcCA9 IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJZHBfZGlzcGxheV9kZWluaXRfc3ViX21v ZHVsZXMoZHApOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJZGV2bV9r ZnJlZSgmcGRldi0+ZGV2LCBkcCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBw bGF0Zm9ybV9kcml2ZXIgZHBfZGlzcGxheV9kcml2ZXIgPSB7CisJLnByb2JlICA9IGRwX2Rpc3Bs YXlfcHJvYmUsCisJLnJlbW92ZSA9IGRwX2Rpc3BsYXlfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJ CS5uYW1lID0gIm1zbS1kcC1kaXNwbGF5IiwKKwkJLm9mX21hdGNoX3RhYmxlID0gZHBfZHRfbWF0 Y2gsCisJfSwKK307CisKK2ludCBfX2luaXQgbXNtX2RwX3JlZ2lzdGVyKHZvaWQpCit7CisJaW50 IHJldDsKKworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZHBfZGlzcGxheV9kcml2 ZXIpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJkcml2ZXIgcmVnaXN0ZXIgZmFpbGVkIik7 CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIHJldDsKK30KKwordm9pZCBfX2V4aXQgbXNt X2RwX3VucmVnaXN0ZXIodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZHBf ZGlzcGxheV9kcml2ZXIpOworfQorCitpbnQgbXNtX2RwX21vZGVzZXRfaW5pdChzdHJ1Y3QgbXNt X2RwICpkcF9kaXNwbGF5LCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJc3RydWN0IGRybV9l bmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXY7CisJaW50 IHJldDsKKworCWlmIChXQVJOX09OKCFlbmNvZGVyKSB8fCBXQVJOX09OKCFkcF9kaXNwbGF5KSB8 fCBXQVJOX09OKCFkZXYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXByaXYgPSBkZXYtPmRldl9w cml2YXRlOworCWRwX2Rpc3BsYXktPmRybV9kZXYgPSBkZXY7CisKKwlyZXQgPSBkcF9kaXNwbGF5 X3JlcXVlc3RfaXJxKGRwX2Rpc3BsYXkpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJyZXF1 ZXN0X2lycSBmYWlsZWQsIHJldD0lZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlk cF9kaXNwbGF5LT5lbmNvZGVyID0gZW5jb2RlcjsKKworCWRwX2Rpc3BsYXktPmNvbm5lY3RvciA9 IGRwX2RybV9jb25uZWN0b3JfaW5pdChkcF9kaXNwbGF5KTsKKwlpZiAoSVNfRVJSKGRwX2Rpc3Bs YXktPmNvbm5lY3RvcikpIHsKKwkJcmV0ID0gUFRSX0VSUihkcF9kaXNwbGF5LT5jb25uZWN0b3Ip OworCQlEUk1fREVWX0VSUk9SKGRldi0+ZGV2LAorCQkJImZhaWxlZCB0byBjcmVhdGUgZHAgY29u bmVjdG9yOiAlZFxuIiwgcmV0KTsKKwkJZHBfZGlzcGxheS0+Y29ubmVjdG9yID0gTlVMTDsKKwkJ cmV0dXJuIHJldDsKKwl9CisKKwlwcml2LT5jb25uZWN0b3JzW3ByaXYtPm51bV9jb25uZWN0b3Jz KytdID0gZHBfZGlzcGxheS0+Y29ubmVjdG9yOworCXJldHVybiAwOworfQorCitpbnQgbXNtX2Rw X2Rpc3BsYXlfZW5hYmxlKHN0cnVjdCBtc21fZHAgKmRwLCBzdHJ1Y3QgZHJtX2VuY29kZXIgKmVu Y29kZXIpCit7CisJaW50IHJjID0gMDsKKwlzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcF9k aXNwbGF5OworCisJZHBfZGlzcGxheSA9IGNvbnRhaW5lcl9vZihkcCwgc3RydWN0IGRwX2Rpc3Bs YXlfcHJpdmF0ZSwgZHBfZGlzcGxheSk7CisJaWYgKCFkcF9kaXNwbGF5LT5kcF9tb2RlLmRybV9t b2RlLmNsb2NrKSB7CisJCURSTV9FUlJPUigiaW52YWxpZCBwYXJhbXNcbiIpOworCQlyZXR1cm4g LUVJTlZBTDsKKwl9CisKKwlyYyA9IGRwX2Rpc3BsYXlfc2V0X21vZGUoZHAsICZkcF9kaXNwbGF5 LT5kcF9tb2RlKTsKKwlpZiAocmMpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcGVyZm9ybSBh IG1vZGUgc2V0LCByYz0lZFxuIiwgcmMpOworCQlyZXR1cm4gcmM7CisJfQorCisJcmMgPSBkcF9k aXNwbGF5X3ByZXBhcmUoZHApOworCWlmIChyYykgeworCQlEUk1fRVJST1IoIkRQIGRpc3BsYXkg cHJlcGFyZSBmYWlsZWQsIHJjPSVkXG4iLCByYyk7CisJCXJldHVybiByYzsKKwl9CisKKwlyYyA9 IGRwX2Rpc3BsYXlfZW5hYmxlKGRwKTsKKwlpZiAocmMpIHsKKwkJRFJNX0VSUk9SKCJEUCBkaXNw bGF5IGVuYWJsZSBmYWlsZWQsIHJjPSVkXG4iLCByYyk7CisJCWRwX2Rpc3BsYXlfdW5wcmVwYXJl KGRwKTsKKwkJcmV0dXJuIHJjOworCX0KKworCXJjID0gZHBfZGlzcGxheV9wb3N0X2VuYWJsZShk cCk7CisJaWYgKHJjKSB7CisJCURSTV9FUlJPUigiRFAgZGlzcGxheSBwb3N0IGVuYWJsZSBmYWls ZWQsIHJjPSVkXG4iLCByYyk7CisJCWRwX2Rpc3BsYXlfZGlzYWJsZShkcCk7CisJCWRwX2Rpc3Bs YXlfdW5wcmVwYXJlKGRwKTsKKwl9CisJcmV0dXJuIHJjOworfQorCitpbnQgbXNtX2RwX2Rpc3Bs YXlfZGlzYWJsZShzdHJ1Y3QgbXNtX2RwICpkcCwgc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVy KQoreworCWludCByYyA9IDA7CisKKwlyYyA9IGRwX2Rpc3BsYXlfcHJlX2Rpc2FibGUoZHApOwor CWlmIChyYykgeworCQlEUk1fRVJST1IoIkRQIGRpc3BsYXkgcHJlIGRpc2FibGUgZmFpbGVkLCBy Yz0lZFxuIiwgcmMpOworCQlyZXR1cm4gcmM7CisJfQorCisJcmMgPSBkcF9kaXNwbGF5X2Rpc2Fi bGUoZHApOworCWlmIChyYykgeworCQlEUk1fRVJST1IoIkRQIGRpc3BsYXkgZGlzYWJsZSBmYWls ZWQsIHJjPSVkXG4iLCByYyk7CisJCXJldHVybiByYzsKKwl9CisKKwlyYyA9IGRwX2Rpc3BsYXlf dW5wcmVwYXJlKGRwKTsKKwlpZiAocmMpIHsKKwkJRFJNX0VSUk9SKCJEUCBkaXNwbGF5IHVucHJl cGFyZSBmYWlsZWQsIHJjPSVkXG4iLCByYyk7CisJfQorCXJldHVybiByYzsKK30KKwordm9pZCBt c21fZHBfZGlzcGxheV9tb2RlX3NldChzdHJ1Y3QgbXNtX2RwICpkcCwgc3RydWN0IGRybV9lbmNv ZGVyICplbmNvZGVyLAorCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJCXN0 cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQoreworCXN0cnVjdCBkcF9kaXNw bGF5X3ByaXZhdGUgKmRwX2Rpc3BsYXk7CisKKwlkcF9kaXNwbGF5ID0gY29udGFpbmVyX29mKGRw LCBzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlLCBkcF9kaXNwbGF5KTsKKworCW1lbXNldCgmZHBf ZGlzcGxheS0+ZHBfbW9kZSwgMHgwLCBzaXplb2Yoc3RydWN0IGRwX2Rpc3BsYXlfbW9kZSkpOwor CisJaWYgKGRwX2Rpc3BsYXlfY2hlY2tfdmlkZW9fdGVzdChkcCkpCisJCWRwX2Rpc3BsYXktPmRw X21vZGUuYnBwID0gZHBfZGlzcGxheV9nZXRfdGVzdF9icHAoZHApOworCWVsc2UgLyogRGVmYXVs dCBudW1fY29tcG9uZW50cyBwZXIgcGl4ZWwgPSAzICovCisJCWRwX2Rpc3BsYXktPmRwX21vZGUu YnBwID0gZHAtPmNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmJwYyAqIDM7CisKKwlpZiAoIWRwX2Rp c3BsYXktPmRwX21vZGUuYnBwKQorCQlkcF9kaXNwbGF5LT5kcF9tb2RlLmJwcCA9IDI0OyAvKiBE ZWZhdWx0IGJwcCAqLworCisJZHJtX21vZGVfY29weSgmZHBfZGlzcGxheS0+ZHBfbW9kZS5kcm1f bW9kZSwgYWRqdXN0ZWRfbW9kZSk7CisKKwlkcF9kaXNwbGF5LT5kcF9tb2RlLnZfYWN0aXZlX2xv dyA9CisJCSEhKGRwX2Rpc3BsYXktPmRwX21vZGUuZHJtX21vZGUuZmxhZ3MgJiBEUk1fTU9ERV9G TEFHX05WU1lOQyk7CisKKwlkcF9kaXNwbGF5LT5kcF9tb2RlLmhfYWN0aXZlX2xvdyA9CisJCSEh KGRwX2Rpc3BsYXktPmRwX21vZGUuZHJtX21vZGUuZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX05IU1lO Qyk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2Rpc3BsYXkuaCBi L2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGlzcGxheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLmNlMDliYjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9k cm0vbXNtL2RwL2RwX2Rpc3BsYXkuaApAQCAtMCwwICsxLDI4IEBACisvKiBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCisvKgorICogQ29weXJpZ2h0IChjKSAyMDE3LTIw MTksIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICovCisKKyNp Zm5kZWYgX0RQX0RJU1BMQVlfSF8KKyNkZWZpbmUgX0RQX0RJU1BMQVlfSF8KKworI2luY2x1ZGUg PGRybS9kcm1QLmg+CisKKyNpbmNsdWRlICJkcF9wYW5lbC5oIgorCitzdHJ1Y3QgbXNtX2RwIHsK KwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldjsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yOworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKKwlib29sIGlzX2Nvbm5lY3Rl ZDsKKwl1MzIgbWF4X3BjbGtfa2h6OworfTsKKworaW50IGRwX2Rpc3BsYXlfdmFsaWRhdGVfbW9k ZShzdHJ1Y3QgbXNtX2RwICpkcF9kaXNwbGF5LCB1MzIgbW9kZV9wY2xrX2toeik7CitpbnQgZHBf ZGlzcGxheV9nZXRfbW9kZXMoc3RydWN0IG1zbV9kcCAqZHBfZGlzcGxheSwKKwkJc3RydWN0IGRw X2Rpc3BsYXlfbW9kZSAqZHBfbW9kZSk7CitpbnQgZHBfZGlzcGxheV9yZXF1ZXN0X2lycShzdHJ1 Y3QgbXNtX2RwICpkcF9kaXNwbGF5KTsKK2Jvb2wgZHBfZGlzcGxheV9jaGVja192aWRlb190ZXN0 KHN0cnVjdCBtc21fZHAgKmRwX2Rpc3BsYXkpOworaW50IGRwX2Rpc3BsYXlfZ2V0X3Rlc3RfYnBw KHN0cnVjdCBtc21fZHAgKmRwX2Rpc3BsYXkpOworCisjZW5kaWYgLyogX0RQX0RJU1BMQVlfSF8g Ki8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZHJtLmMgYi9kcml2ZXJz L2dwdS9kcm0vbXNtL2RwL2RwX2RybS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjUzMTZlYzU3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9k cF9kcm0uYwpAQCAtMCwwICsxLDE4OSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ TC0yLjAtb25seQorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDE5LCBUaGUgTGludXggRm91 bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworCisjZGVmaW5lIHByX2ZtdChmbXQp CSJbZHJtLWRwXTogJXM6ICIgZm10LCBfX2Z1bmNfXworCisjaW5jbHVkZSA8ZHJtL2RybV9hdG9t aWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KKyNpbmNsdWRlIDxkcm0v ZHJtX2NydGMuaD4KKworI2luY2x1ZGUgIm1zbV9kcnYuaCIKKyNpbmNsdWRlICJtc21fa21zLmgi CisjaW5jbHVkZSAiZHBfZHJtLmgiCisKK3N0cnVjdCBkcF9jb25uZWN0b3IgeworCXN0cnVjdCBk cm1fY29ubmVjdG9yIGJhc2U7CisJc3RydWN0IG1zbV9kcCAqZHBfZGlzcGxheTsKK307CisjZGVm aW5lIHRvX2RwX2Nvbm5lY3Rvcih4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IGRwX2Nvbm5lY3Rv ciwgYmFzZSkKKworLyoqCisgKiBkcF9jb25uZWN0b3JfZGV0ZWN0IC0gY2FsbGJhY2sgdG8gZGV0 ZXJtaW5lIGlmIGNvbm5lY3RvciBpcyBjb25uZWN0ZWQKKyAqIEBjb25uZWN0b3I6IFBvaW50ZXIg dG8gZHJtIGNvbm5lY3RvciBzdHJ1Y3R1cmUKKyAqIEBmb3JjZTogRm9yY2UgZGV0ZWN0IHNldHRp bmcgZnJvbSBkcm0gZnJhbWV3b3JrCisgKiBSZXR1cm5zOiBDb25uZWN0b3IgJ2lzIGNvbm5lY3Rl ZCcgc3RhdHVzCisgKi8KK3N0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIGRwX2Nvbm5l Y3Rvcl9kZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm4sCisJCWJvb2wgZm9yY2UpCit7 CisJZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBzdGF0dXMgPSBjb25uZWN0b3Jfc3RhdHVzX3Vu a25vd247CisJc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgY3VycmVudF9zdGF0dXMg PSBjb25uZWN0b3Jfc3RhdHVzX3Vua25vd247CisJc3RydWN0IG1zbV9kcCAqZHA7CisJc3RydWN0 IGRwX2Nvbm5lY3RvciAqZHBfY29ubjsKKwlzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2ID0g Y29ubi0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgbXNtX2ttcyAqa21zID0gcHJpdi0+a21z OworCisJZHBfY29ubiA9IHRvX2RwX2Nvbm5lY3Rvcihjb25uKTsKKwlkcCA9IGRwX2Nvbm4tPmRw X2Rpc3BsYXk7CisKKwlEUk1fREVCVUdfRFAoImlzX2Nvbm5lY3RlZCA9ICVzXG4iLAorCQkoZHAt PmlzX2Nvbm5lY3RlZCkgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKworCXN0YXR1cyA9IChkcC0+aXNf Y29ubmVjdGVkKSA/IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkIDoKKwkJCQkJY29ubmVjdG9y X3N0YXR1c19kaXNjb25uZWN0ZWQ7CisKKwlpZiAoZHAtPmlzX2Nvbm5lY3RlZCAmJiAoY3VycmVu dF9zdGF0dXMgIT0gc3RhdHVzKQorCQkJCSYmIGttcy0+ZnVuY3MtPnNldF9lbmNvZGVyX21vZGUp IHsKKwkJa21zLT5mdW5jcy0+c2V0X2VuY29kZXJfbW9kZShrbXMsCisJCQkJZHAtPmVuY29kZXIs IGZhbHNlKTsKKwkJRFJNX0RFQlVHX0RQKCJjYWxsIHNldF9lbmNvZGVyX21vZGVcbiIpOworCX0K KwljdXJyZW50X3N0YXR1cyA9IHN0YXR1czsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAq IGRwX2Nvbm5lY3Rvcl9nZXRfbW9kZXMgLSBjYWxsYmFjayB0byBhZGQgZHJtIG1vZGVzIHZpYSBk cm1fbW9kZV9wcm9iZWRfYWRkKCkKKyAqIEBjb25uZWN0b3I6IFBvaW50ZXIgdG8gZHJtIGNvbm5l Y3RvciBzdHJ1Y3R1cmUKKyAqIFJldHVybnM6IE51bWJlciBvZiBtb2RlcyBhZGRlZAorICovCitz dGF0aWMgaW50IGRwX2Nvbm5lY3Rvcl9nZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvcikKK3sKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBtc21fZHAgKmRwOworCXN0cnVjdCBk cF9kaXNwbGF5X21vZGUgKmRwX21vZGUgPSBOVUxMOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICptLCBkcm1fbW9kZTsKKwlzdHJ1Y3QgZHBfY29ubmVjdG9yICpkcF9jb25uOworCisJaWYgKCFj b25uZWN0b3IpCisJCXJldHVybiAwOworCisJZHBfY29ubiA9IHRvX2RwX2Nvbm5lY3Rvcihjb25u ZWN0b3IpOworCWRwID0gZHBfY29ubi0+ZHBfZGlzcGxheTsKKworCWRwX21vZGUgPSBremFsbG9j KHNpemVvZigqZHBfbW9kZSksICBHRlBfS0VSTkVMKTsKKwlpZiAoIWRwX21vZGUpCisJCXJldHVy biAwOworCisJLyogcGx1Z2dhYmxlIGNhc2UgYXNzdW1lcyBFRElEIGlzIHJlYWQgd2hlbiBIUEQg Ki8KKwlpZiAoZHAtPmlzX2Nvbm5lY3RlZCkgeworCQkvKgorCQkgKlRoZSBnZXRfbW9kZXMoKSBm dW5jdGlvbiBtaWdodCByZXR1cm4gb25lIG1vZGUgdGhhdCBpcyBzdG9yZWQKKwkJICogaW4gZHBf bW9kZSB3aGVuIGNvbXBsaWFuY2UgdGVzdCBpcyBpbiBwcm9ncmVzcy4gSWYgbm90LCB0aGUKKwkJ ICogcmV0dXJuIHZhbHVlIGlzIGVxdWFsIHRvIHRoZSB0b3RhbCBudW1iZXIgb2YgbW9kZXMgc3Vw cG9ydGVkCisJCSAqIGJ5IHRoZSBzaW5rCisJCSAqLworCQlyYyA9IGRwX2Rpc3BsYXlfZ2V0X21v ZGVzKGRwLCBkcF9tb2RlKTsKKwkJaWYgKHJjIDw9IDApIHsKKwkJCURSTV9FUlJPUigiZmFpbGVk IHRvIGdldCBEUCBzaW5rIG1vZGVzLCByYz0lZFxuIiwgcmMpOworCQkJcmV0dXJuIHJjOworCQl9 CisJCWlmIChkcF9tb2RlLT5kcm1fbW9kZS5jbG9jaykgeyAvKiB2YWxpZCBEUCBtb2RlICovCisJ CQltZW1zZXQoJmRybV9tb2RlLCAweDAsIHNpemVvZihkcm1fbW9kZSkpOworCQkJZHJtX21vZGVf Y29weSgmZHJtX21vZGUsICZkcF9tb2RlLT5kcm1fbW9kZSk7CisJCQltID0gZHJtX21vZGVfZHVw bGljYXRlKGNvbm5lY3Rvci0+ZGV2LCAmZHJtX21vZGUpOworCQkJaWYgKCFtKSB7CisJCQkJRFJN X0VSUk9SKCJmYWlsZWQgdG8gYWRkIG1vZGUgJXV4JXVcbiIsCisJCQkJICAgICAgIGRybV9tb2Rl LmhkaXNwbGF5LAorCQkJCSAgICAgICBkcm1fbW9kZS52ZGlzcGxheSk7CisJCQkJa2ZyZWUoZHBf bW9kZSk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlkcm1fbW9kZV9wcm9iZWRfYWRkKGNvbm5l Y3RvciwgbSk7CisJCX0KKwl9IGVsc2UgeworCQlEUk1fREVCVUdfRFAoIk5vIHNpbmsgY29ubmVj dGVkXG4iKTsKKwl9CisJa2ZyZWUoZHBfbW9kZSk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgor ICogZHBfY29ubmVjdG9yX21vZGVfdmFsaWQgLSBjYWxsYmFjayB0byBkZXRlcm1pbmUgaWYgc3Bl Y2lmaWVkIG1vZGUgaXMgdmFsaWQKKyAqIEBjb25uZWN0b3I6IFBvaW50ZXIgdG8gZHJtIGNvbm5l Y3RvciBzdHJ1Y3R1cmUKKyAqIEBtb2RlOiBQb2ludGVyIHRvIGRybSBtb2RlIHN0cnVjdHVyZQor ICogUmV0dXJuczogVmFsaWRpdHkgc3RhdHVzIGZvciBzcGVjaWZpZWQgbW9kZQorICovCitzdGF0 aWMgZW51bSBkcm1fbW9kZV9zdGF0dXMgZHBfY29ubmVjdG9yX21vZGVfdmFsaWQoc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUp Cit7CisJc3RydWN0IG1zbV9kcCAqZHBfZGlzcDsKKwlzdHJ1Y3QgZHBfY29ubmVjdG9yICpkcF9j b25uOworCisJaWYgKCFtb2RlIHx8ICFjb25uZWN0b3IpIHsKKwkJRFJNX0VSUk9SKCJpbnZhbGlk IHBhcmFtc1xuIik7CisJCXJldHVybiBNT0RFX0VSUk9SOworCX0KKworCWRwX2Nvbm4gPSB0b19k cF9jb25uZWN0b3IoY29ubmVjdG9yKTsKKwlkcF9kaXNwID0gZHBfY29ubi0+ZHBfZGlzcGxheTsK KworCW1vZGUtPnZyZWZyZXNoID0gZHJtX21vZGVfdnJlZnJlc2gobW9kZSk7CisKKwlpZiAoKGRw X2Rpc3AtPm1heF9wY2xrX2toeiA8PSAwKSB8fAorCQkJKGRwX2Rpc3AtPm1heF9wY2xrX2toeiA+ IERQX01BWF9QSVhFTF9DTEtfS0haKSB8fAorCQkJKG1vZGUtPmNsb2NrID4gZHBfZGlzcC0+bWF4 X3BjbGtfa2h6KSkKKwkJcmV0dXJuIE1PREVfQkFEOworCisJcmV0dXJuIGRwX2Rpc3BsYXlfdmFs aWRhdGVfbW9kZShkcF9kaXNwLCBtb2RlLT5jbG9jayk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyBkcF9jb25uZWN0b3JfZnVuY3MgPSB7CisJLmRldGVjdCA9 IGRwX2Nvbm5lY3Rvcl9kZXRlY3QsCisJLmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3Np bmdsZV9jb25uZWN0b3JfbW9kZXMsCisJLmRlc3Ryb3kgPSBkcm1fY29ubmVjdG9yX2NsZWFudXAs CisJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0LAorCS5hdG9taWNf ZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9z dGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0 b3JfZGVzdHJveV9zdGF0ZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rv cl9oZWxwZXJfZnVuY3MgZHBfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKKwkuZ2V0X21vZGVz ID0gZHBfY29ubmVjdG9yX2dldF9tb2RlcywKKwkubW9kZV92YWxpZCA9IGRwX2Nvbm5lY3Rvcl9t b2RlX3ZhbGlkLAorfTsKKworLyogY29ubmVjdG9yIGluaXRpYWxpemF0aW9uICovCitzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqZHBfZHJtX2Nvbm5lY3Rvcl9pbml0KHN0cnVjdCBtc21fZHAgKmRwX2Rp c3BsYXkpCit7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9IE5VTEw7CisJc3Ry dWN0IGRwX2Nvbm5lY3RvciAqZHBfY29ubmVjdG9yOworCWludCByZXQ7CisKKwlkcF9jb25uZWN0 b3IgPSBkZXZtX2t6YWxsb2MoZHBfZGlzcGxheS0+ZHJtX2Rldi0+ZGV2LCBzaXplb2YoKmRwX2Nv bm5lY3RvciksCisJCQkJICAgIEdGUF9LRVJORUwpOworCWlmICghZHBfY29ubmVjdG9yKQorCQly ZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWRwX2Nvbm5lY3Rvci0+ZHBfZGlzcGxheSA9IGRw X2Rpc3BsYXk7CisKKwljb25uZWN0b3IgPSAmZHBfY29ubmVjdG9yLT5iYXNlOworCisJcmV0ID0g ZHJtX2Nvbm5lY3Rvcl9pbml0KGRwX2Rpc3BsYXktPmRybV9kZXYsIGNvbm5lY3RvciwgJmRwX2Nv bm5lY3Rvcl9mdW5jcywKKwkJCURSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydCk7CisJaWYg KHJldCkKKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKworCWRybV9jb25uZWN0b3JfaGVscGVyX2Fk ZChjb25uZWN0b3IsICZkcF9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKworCS8qCisJICogRW5h YmxlIEhQRCB0byBsZXQgaHBkIGV2ZW50IGlzIGhhbmRsZWQgd2hlbiBjYWJsZSBpcyBhdHRhY2hl ZCB0byB0aGUgaG9zdC4KKwkgKi8KKwljb25uZWN0b3ItPnBvbGxlZCA9IERSTV9DT05ORUNUT1Jf UE9MTF9IUEQ7CisKKwlkcm1fY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKGNvbm5lY3RvciwgZHBf ZGlzcGxheS0+ZW5jb2Rlcik7CisKKwlyZXR1cm4gY29ubmVjdG9yOworfQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kcm0uaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAv ZHBfZHJtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y0NzJjNQotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZHJtLmgKQEAgLTAsMCAr MSwyMCBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLworLyoK KyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDE5LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJp Z2h0cyByZXNlcnZlZC4KKyAqLworCisjaWZuZGVmIF9EUF9EUk1fSF8KKyNkZWZpbmUgX0RQX0RS TV9IXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgor I2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIu aD4KKworI2luY2x1ZGUgIm1zbV9kcnYuaCIKKyNpbmNsdWRlICJkcF9kaXNwbGF5LmgiCisKK3N0 cnVjdCBkcm1fY29ubmVjdG9yICpkcF9kcm1fY29ubmVjdG9yX2luaXQoc3RydWN0IG1zbV9kcCAq ZHBfZGlzcGxheSk7CisKKyNlbmRpZiAvKiBfRFBfRFJNX0hfICovCisKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZXh0Y29uLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rw L2RwX2V4dGNvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1YWQ1YWMK LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2V4dGNvbi5jCkBA IC0wLDAgKzEsMjI4IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5 CisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTksIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBB bGwgcmlnaHRzIHJlc2VydmVkLgorICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkJIltkcm0tZHBd ICVzOiAiIGZtdCwgX19mdW5jX18KKworI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRl IDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9leHRjb24uaD4KKyNpbmNsdWRlIDxk cm0vZHJtUC5oPgorCisjaW5jbHVkZSAiZHBfZXh0Y29uLmgiCisKKy8qIERQIHNwZWNpZmljIFZE TSBjb21tYW5kcyAqLworI2RlZmluZSBEUF9VU0JQRF9WRE1fU1RBVFVTCTB4MTAKKyNkZWZpbmUg RFBfVVNCUERfVkRNX0NPTkZJR1VSRQkweDExCisKKy8qIFVTQlBELVR5cGVDIHNwZWNpZmljIE1h Y3JvcyAqLworI2RlZmluZSBWRE1fVkVSU0lPTgkJMHgwCisjZGVmaW5lIFVTQl9DX0RQX1NJRAkJ MHhGRjAxCisKK3N0cnVjdCBkcF9leHRjb25fcHJpdmF0ZSB7CisJdTMyIHZkbzsKKwlzdHJ1Y3Qg ZGV2aWNlICpkZXY7CisJc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGV4dGNvbl9uYjsKKwlzdHJ1Y3Qg ZXh0Y29uX2RldiAqZXh0Y29uOworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpleHRjb25fd3E7 CisJc3RydWN0IHdvcmtfc3RydWN0IGV2ZW50X3dvcms7CisJc3RydWN0IHVzYnBkICpwZDsKKwlz dHJ1Y3QgZHBfdXNicGRfY2IgKmRwX2NiOworCXN0cnVjdCBkcF91c2JwZCBkcF91c2JwZDsKK307 CisKK3N0YXRpYyBpbnQgZHBfZXh0Y29uX2Nvbm5lY3Qoc3RydWN0IGRwX3VzYnBkICpkcF91c2Jw ZCwgYm9vbCBocGQpCit7CisJaW50IHJjID0gMDsKKwlzdHJ1Y3QgZHBfZXh0Y29uX3ByaXZhdGUg KmV4dGNvbjsKKworCWV4dGNvbiA9IGNvbnRhaW5lcl9vZihkcF91c2JwZCwgc3RydWN0IGRwX2V4 dGNvbl9wcml2YXRlLCBkcF91c2JwZCk7CisKKwlkcF91c2JwZC0+aHBkX2hpZ2ggPSBocGQ7CisJ ZHBfdXNicGQtPmZvcmNlZF9kaXNjb25uZWN0ID0gIWhwZDsKKworCWlmIChocGQpCisJCWV4dGNv bi0+ZHBfY2ItPmNvbmZpZ3VyZShleHRjb24tPmRldik7CisJZWxzZQorCQlleHRjb24tPmRwX2Ni LT5kaXNjb25uZWN0KGV4dGNvbi0+ZGV2KTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGlu dCBkcF9leHRjb25fZ2V0X2xhbmVzKHN0cnVjdCBkcF9leHRjb25fcHJpdmF0ZSAqZXh0Y29uX3By aXYpCit7CisJdW5pb24gZXh0Y29uX3Byb3BlcnR5X3ZhbHVlIHByb3BlcnR5OworCisJZXh0Y29u X2dldF9wcm9wZXJ0eShleHRjb25fcHJpdi0+ZXh0Y29uLAorCQkJCQlFWFRDT05fRElTUF9EUCwK KwkJCQkJRVhUQ09OX1BST1BfVVNCX1NTLAorCQkJCQkmcHJvcGVydHkpOworCXJldHVybiAoKHBy b3BlcnR5LmludHZhbCkgPyAyIDogNCk7Cit9CisKKworc3RhdGljIHZvaWQgZHBfZXh0Y29uX2V2 ZW50X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBkcF9leHRjb25f cHJpdmF0ZSAqZXh0Y29uX3ByaXY7CisJaW50IGRwX3N0YXRlLCByZXQ7CisJaW50IGxhbmVzOwor CXVuaW9uIGV4dGNvbl9wcm9wZXJ0eV92YWx1ZSBwcm9wZXJ0eTsKKworCWV4dGNvbl9wcml2ID0g Y29udGFpbmVyX29mKHdvcmssCisJCQlzdHJ1Y3QgZHBfZXh0Y29uX3ByaXZhdGUsIGV2ZW50X3dv cmspOworCisJaWYgKCFleHRjb25fcHJpdiB8fCAhZXh0Y29uX3ByaXYtPmV4dGNvbikgeworCQlE Uk1fRVJST1IoIkludmFsaWQgZXh0Y29uIGRldmljZSBoYW5kbGVyXG4iKTsKKwkJcmV0dXJuOwor CX0KKworCWRwX3N0YXRlID0gZXh0Y29uX2dldF9zdGF0ZShleHRjb25fcHJpdi0+ZXh0Y29uLCBF WFRDT05fRElTUF9EUCk7CisKKwlpZiAoZHBfc3RhdGUgPiAwKSB7CisJCXJldCA9IGV4dGNvbl9n ZXRfcHJvcGVydHkoZXh0Y29uX3ByaXYtPmV4dGNvbiwKKwkJCQkJRVhUQ09OX0RJU1BfRFAsCisJ CQkJCUVYVENPTl9QUk9QX1VTQl9UWVBFQ19QT0xBUklUWSwKKwkJCQkJJnByb3BlcnR5KTsKKwkJ aWYgKHJldCkgeworCQkJRFJNX0VSUk9SKCJHZXQgUG9sYXJpdHkgcHJvcGVydHkgZmFpbGVkXG4i KTsKKwkJCXJldHVybjsKKwkJfQorCQlleHRjb25fcHJpdi0+ZHBfdXNicGQub3JpZW50YXRpb24g PQorCQkJKHByb3BlcnR5LmludHZhbCkgPyBPUklFTlRBVElPTl9DQzIgOiBPUklFTlRBVElPTl9D QzE7CisKKwkJbGFuZXMgPSBkcF9leHRjb25fZ2V0X2xhbmVzKGV4dGNvbl9wcml2KTsKKwkJaWYg KCFsYW5lcykKKwkJCXJldHVybjsKKwkJZXh0Y29uX3ByaXYtPmRwX3VzYnBkLm11bHRpX2Z1bmMg PQorCQkJCQkoKGxhbmVzID09IDIpID8gZmFsc2UgOiB0cnVlKTsKKworCQlpZiAoZXh0Y29uX3By aXYtPmRwX2NiICYmIGV4dGNvbl9wcml2LT5kcF9jYi0+Y29uZmlndXJlKSB7CisJCQlyZXQgPSBk cF9leHRjb25fY29ubmVjdCgmZXh0Y29uX3ByaXYtPmRwX3VzYnBkLCB0cnVlKTsKKwkJCWlmIChy ZXQpIHsKKwkJCQlEUk1fRVJST1IoImV4dGNvbl9jb25uZWN0LT50cnVlIGZhaWxlZFxuIik7CisJ CQkJcmV0dXJuOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJaWYgKGV4dGNvbl9wcml2LT5kcF9j YiAmJiBleHRjb25fcHJpdi0+ZHBfY2ItPmRpc2Nvbm5lY3QpIHsKKwkJCXJldCA9IGRwX2V4dGNv bl9jb25uZWN0KCZleHRjb25fcHJpdi0+ZHBfdXNicGQsIGZhbHNlKTsKKwkJCWlmIChyZXQpIHsK KwkJCQlEUk1fRVJST1IoImV4dGNvbl9jb25uZWN0LT5mYWxzZSBmYWlsZWRcbiIpOworCQkJCXJl dHVybjsKKwkJCX0KKwkJfQorCX0KK30KKworc3RhdGljIGludCBkcF9leHRjb25fZXZlbnRfbm90 aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCQkJICB1bnNpZ25lZCBsb25nIGV2ZW50 LCB2b2lkICpwcml2KQoreworCXN0cnVjdCBkcF9leHRjb25fcHJpdmF0ZSAqZXh0Y29uX3ByaXY7 CisKKwlleHRjb25fcHJpdiA9IGNvbnRhaW5lcl9vZihuYiwgc3RydWN0IGRwX2V4dGNvbl9wcml2 YXRlLAorCQkJCQkJZXh0Y29uX25iKTsKKworCXF1ZXVlX3dvcmsoZXh0Y29uX3ByaXYtPmV4dGNv bl93cSwgJmV4dGNvbl9wcml2LT5ldmVudF93b3JrKTsKKwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9 CisKK2ludCBkcF9leHRjb25fcmVnaXN0ZXIoc3RydWN0IGRwX3VzYnBkICpkcF91c2JwZCkKK3sK KwlzdHJ1Y3QgZHBfZXh0Y29uX3ByaXZhdGUgKmV4dGNvbl9wcml2OworCWludCByZXQgPSAwOwor CisJaWYgKCFkcF91c2JwZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlleHRjb25fcHJpdiA9IGNv bnRhaW5lcl9vZihkcF91c2JwZCwgc3RydWN0IGRwX2V4dGNvbl9wcml2YXRlLCBkcF91c2JwZCk7 CisKKwlleHRjb25fcHJpdi0+ZXh0Y29uX25iLm5vdGlmaWVyX2NhbGwgPSBkcF9leHRjb25fZXZl bnRfbm90aWZ5OworCXJldCA9IGRldm1fZXh0Y29uX3JlZ2lzdGVyX25vdGlmaWVyKGV4dGNvbl9w cml2LT5kZXYsIGV4dGNvbl9wcml2LT5leHRjb24sCisJCQkJCSAgICBFWFRDT05fRElTUF9EUCwK KwkJCQkJICAgICZleHRjb25fcHJpdi0+ZXh0Y29uX25iKTsKKwlpZiAocmV0KSB7CisJCURSTV9E RVZfRVJST1IoZXh0Y29uX3ByaXYtPmRldiwKKwkJCSJyZWdpc3RlciBFWFRDT05fRElTUF9EUCBu b3RpZmllciBlcnJcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlyZXR1cm4gcmV0OworCX0KKwor CWV4dGNvbl9wcml2LT5leHRjb25fd3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgi ZHJtX2RwX2V4dGNvbiIpOworCWlmIChJU19FUlJfT1JfTlVMTChleHRjb25fcHJpdi0+ZXh0Y29u X3dxKSkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgd29ya3F1ZXVlXG4iKTsKKwkJ ZHBfZXh0Y29uX3VucmVnaXN0ZXIoZHBfdXNicGQpOworCQlyZXR1cm4gLUVQRVJNOworCX0KKwor CUlOSVRfV09SSygmZXh0Y29uX3ByaXYtPmV2ZW50X3dvcmssIGRwX2V4dGNvbl9ldmVudF93b3Jr KTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIGRwX2V4dGNvbl91bnJlZ2lzdGVyKHN0cnVjdCBk cF91c2JwZCAqZHBfdXNicGQpCit7CisJc3RydWN0IGRwX2V4dGNvbl9wcml2YXRlICpleHRjb25f cHJpdjsKKworCWlmICghZHBfdXNicGQpIHsKKwkJRFJNX0VSUk9SKCJJbnZhbGlkIGlucHV0XG4i KTsKKwkJcmV0dXJuOworCX0KKworCWV4dGNvbl9wcml2ID0gY29udGFpbmVyX29mKGRwX3VzYnBk LCBzdHJ1Y3QgZHBfZXh0Y29uX3ByaXZhdGUsIGRwX3VzYnBkKTsKKworCWRldm1fZXh0Y29uX3Vu cmVnaXN0ZXJfbm90aWZpZXIoZXh0Y29uX3ByaXYtPmRldiwgZXh0Y29uX3ByaXYtPmV4dGNvbiwK KwkJCQkJICAgIEVYVENPTl9ESVNQX0RQLAorCQkJCQkgICAgJmV4dGNvbl9wcml2LT5leHRjb25f bmIpOworCisJaWYgKGV4dGNvbl9wcml2LT5leHRjb25fd3EpCisJCWRlc3Ryb3lfd29ya3F1ZXVl KGV4dGNvbl9wcml2LT5leHRjb25fd3EpOworCisJcmV0dXJuOworfQorCitzdHJ1Y3QgZHBfdXNi cGQgKmRwX2V4dGNvbl9nZXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZHBfdXNicGRfY2Ig KmNiKQoreworCWludCByYyA9IDA7CisJc3RydWN0IGRwX2V4dGNvbl9wcml2YXRlICpkcF9leHRj b247CisJc3RydWN0IGRwX3VzYnBkICpkcF91c2JwZDsKKworCWlmICghY2IpIHsKKwkJRFJNX0VS Uk9SKCJpbnZhbGlkIGNiIGRhdGFcbiIpOworCQlyYyA9IC1FSU5WQUw7CisJCXJldHVybiBFUlJf UFRSKHJjKTsKKwl9CisKKwlkcF9leHRjb24gPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmRw X2V4dGNvbiksIEdGUF9LRVJORUwpOworCWlmICghZHBfZXh0Y29uKSB7CisJCXJjID0gLUVOT01F TTsKKwkJcmV0dXJuIEVSUl9QVFIocmMpOworCX0KKworCWRwX2V4dGNvbi0+ZXh0Y29uID0gZXh0 Y29uX2dldF9lZGV2X2J5X3BoYW5kbGUoZGV2LCAwKTsKKwlpZiAoIWRwX2V4dGNvbi0+ZXh0Y29u KSB7CisJCURSTV9FUlJPUigiaW52YWxpZCBleHRjb24gZGF0YVxuIik7CisJCXJjID0gLUVJTlZB TDsKKwkJZGV2bV9rZnJlZShkZXYsIGRwX2V4dGNvbik7CisJCXJldHVybiBFUlJfUFRSKHJjKTsK KyAgICAgICAgfQorCisJZHBfZXh0Y29uLT5kZXYgPSBkZXY7CisJZHBfZXh0Y29uLT5kcF9jYiA9 IGNiOworCisJZHBfZXh0Y29uLT5kcF91c2JwZC5jb25uZWN0ID0gZHBfZXh0Y29uX2Nvbm5lY3Q7 CisJZHBfdXNicGQgPSAmZHBfZXh0Y29uLT5kcF91c2JwZDsKKworCXJldHVybiBkcF91c2JwZDsK K30KKwordm9pZCBkcF9leHRjb25fcHV0KHN0cnVjdCBkcF91c2JwZCAqZHBfdXNicGQpCit7CisJ c3RydWN0IGRwX2V4dGNvbl9wcml2YXRlICpleHRjb247CisKKwlpZiAoIWRwX3VzYnBkKQorCQly ZXR1cm47CisKKwlleHRjb24gPSBjb250YWluZXJfb2YoZHBfdXNicGQsIHN0cnVjdCBkcF9leHRj b25fcHJpdmF0ZSwgZHBfdXNicGQpOworCisJZGV2bV9rZnJlZShleHRjb24tPmRldiwgZXh0Y29u KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZXh0Y29uLmggYi9k cml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2V4dGNvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjI4YzdmMDkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0v bXNtL2RwL2RwX2V4dGNvbi5oCkBAIC0wLDAgKzEsODUgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxOSwg VGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKworI2lmbmRl ZiBfRFBfRVhUQ09OX0hfCisjZGVmaW5lIF9EUF9FWFRDT05fSF8KKworLy8jaW5jbHVkZSA8bGlu dXgvdXNiL3VzYnBkLmg+CisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxp bnV4L2RldmljZS5oPgorCitlbnVtIHBsdWdfb3JpZW50YXRpb24geworCU9SSUVOVEFUSU9OX05P TkUsCisJT1JJRU5UQVRJT05fQ0MxLAorCU9SSUVOVEFUSU9OX0NDMiwKK307CisKKy8qKgorICog c3RydWN0IGRwX3VzYnBkIC0gRGlzcGxheVBvcnQgc3RhdHVzCisgKgorICogQG9yaWVudGF0aW9u OiBwbHVnIG9yaWVudGF0aW9uIGNvbmZpZ3VyYXRpb24KKyAqIEBsb3dfcG93X3N0OiBsb3cgcG93 ZXIgc3RhdGUKKyAqIEBhZGFwdG9yX2RwX2VuOiBhZGFwdG9yIGZ1bmN0aW9uYWxpdHkgZW5hYmxl ZAorICogQG11bHRpX2Z1bmM6IG11bHRpLWZ1bmN0aW9uIHByZWZlcnJlZAorICogQHVzYl9jb25m aWdfcmVxOiByZXF1ZXN0IHRvIHN3aXRjaCB0byB1c2IKKyAqIEBleGl0X2RwX21vZGU6IHJlcXVl c3QgZXhpdCBmcm9tIGRpc3BsYXlwb3J0IG1vZGUKKyAqIEBocGRfaGlnaDogSG90IFBsdWcgRGV0 ZWN0IHNpZ25hbCBpcyBoaWdoLgorICogQGhwZF9pcnE6IENoYW5nZSBpbiB0aGUgc3RhdHVzIHNp bmNlIGxhc3QgbWVzc2FnZQorICogQGFsdF9tb2RlX2NmZ19kb25lOiBib29sIHRvIHNwZWNpZnkg YWx0IG1vZGUgc3RhdHVzCisgKiBAZGVidWdfZW46IGJvb2wgdG8gc3BlY2lmeSBkZWJ1ZyBtb2Rl CisgKiBAY29ubmVjdDogc2ltdWxhdGUgZGlzY29ubmVjdCBvciBjb25uZWN0IGZvciBkZWJ1ZyBt b2RlCisgKi8KK3N0cnVjdCBkcF91c2JwZCB7CisJZW51bSBwbHVnX29yaWVudGF0aW9uIG9yaWVu dGF0aW9uOworCWJvb2wgbG93X3Bvd19zdDsKKwlib29sIGFkYXB0b3JfZHBfZW47CisJYm9vbCBt dWx0aV9mdW5jOworCWJvb2wgdXNiX2NvbmZpZ19yZXE7CisJYm9vbCBleGl0X2RwX21vZGU7CisJ Ym9vbCBocGRfaGlnaDsKKwlib29sIGhwZF9pcnE7CisJYm9vbCBhbHRfbW9kZV9jZmdfZG9uZTsK Kwlib29sIGRlYnVnX2VuOworCWJvb2wgZm9yY2VkX2Rpc2Nvbm5lY3Q7CisKKwlpbnQgKCpjb25u ZWN0KShzdHJ1Y3QgZHBfdXNicGQgKmRwX3VzYnBkLCBib29sIGhwZCk7Cit9OworCisvKioKKyAq IHN0cnVjdCBkcF91c2JwZF9jYiAtIGNhbGxiYWNrIGZ1bmN0aW9ucyBwcm92aWRlZCBieSB0aGUg Y2xpZW50CisgKgorICogQGNvbmZpZ3VyZTogY2FsbGVkIGJ5IHVzYnBkIG1vZHVsZSB3aGVuIFBE IGNvbW11bmljYXRpb24gaGFzCisgKiBiZWVuIGNvbXBsZXRlZCBhbmQgdGhlIHVzYiBwZXJpcGhl cmFsIGhhcyBiZWVuIGNvbmZpZ3VyZWQgb24KKyAqIGRwIG1vZGUuCisgKiBAZGlzY29ubmVjdDog bm90aWZ5IHRoZSBjYWJsZSBkaXNjb25uZWN0IGlzc3VlZCBieSB1c2IuCisgKiBAYXR0ZW50aW9u OiBub3RpZnkgYW55IGF0dGVudGlvbiBtZXNzYWdlIGlzc3VlZCBieSB1c2IuCisgKi8KK3N0cnVj dCBkcF91c2JwZF9jYiB7CisJaW50ICgqY29uZmlndXJlKShzdHJ1Y3QgZGV2aWNlICpkZXYpOwor CWludCAoKmRpc2Nvbm5lY3QpKHN0cnVjdCBkZXZpY2UgKmRldik7CisJaW50ICgqYXR0ZW50aW9u KShzdHJ1Y3QgZGV2aWNlICpkZXYpOworfTsKKworLyoqCisgKiBkcF9leHRjb25fZ2V0KCkgLSBz ZXR1cCB1c2JwZCBtb2R1bGUKKyAqCisgKiBAZGV2OiBkZXZpY2UgaW5zdGFuY2Ugb2YgdGhlIGNh bGxlcgorICogQGNiOiBzdHJ1Y3QgY29udGFpbmluZyBjYWxsYmFjayBmdW5jdGlvbiBwb2ludGVy cy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyB0aGUgY2xpZW50IHRvIGluaXRpYWxpemUg dGhlIHVzYnBkCisgKiBtb2R1bGUuIFRoZSBtb2R1bGUgd2lsbCBjb21tdW5pY2F0ZSB3aXRoIHVz YiBkcml2ZXIgYW5kCisgKiBoYW5kbGVzIHRoZSBwb3dlciBkZWxpdmVyeSAoUEQpIGNvbW11bmlj YXRpb24gd2l0aCB0aGUKKyAqIHNpbmsvdXNiIGRldmljZS4gVGhpcyBtb2R1bGUgd2lsbCBub3Rp ZnkgdGhlIGNsaWVudCB1c2luZworICogdGhlIGNhbGxiYWNrIGZ1bmN0aW9ucyBhYm91dCB0aGUg Y29ubmVjdGlvbiBhbmQgc3RhdHVzLgorICovCitzdHJ1Y3QgZHBfdXNicGQgKmRwX2V4dGNvbl9n ZXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZHBfdXNicGRfY2IgKmNiKTsKKwordm9pZCBk cF9leHRjb25fcHV0KHN0cnVjdCBkcF91c2JwZCAqcGQpOworCitpbnQgZHBfZXh0Y29uX3JlZ2lz dGVyKHN0cnVjdCBkcF91c2JwZCAqZHBfdXNicGQpOwordm9pZCBkcF9leHRjb25fdW5yZWdpc3Rl cihzdHJ1Y3QgZHBfdXNicGQgKmRwX3VzYnBkKTsKKworI2VuZGlmIC8qIF9EUF9FWFRDT05fSF8g Ki8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfbGluay5jIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9kcC9kcF9saW5rLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uNDk3NDViYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAv ZHBfbGluay5jCkBAIC0wLDAgKzEsMTIxNiBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjAtb25seQorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMi0yMDE5LCBUaGUgTGludXgg Rm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworCisjZGVmaW5lIHByX2ZtdChm bXQpCSJbZHJtLWRwXSAlczogIiBmbXQsIF9fZnVuY19fCisKKyNpbmNsdWRlICJkcF9saW5rLmgi CisjaW5jbHVkZSAiZHBfcGFuZWwuaCIKKworI2RlZmluZSBEUF9URVNUX1JFUVVFU1RfTUFTSwkJ MHg3RgorCitlbnVtIGF1ZGlvX3NhbXBsZV9yYXRlIHsKKwlBVURJT19TQU1QTEVfUkFURV8zMl9L SFoJPSAweDAwLAorCUFVRElPX1NBTVBMRV9SQVRFXzQ0XzFfS0haCT0gMHgwMSwKKwlBVURJT19T QU1QTEVfUkFURV80OF9LSFoJPSAweDAyLAorCUFVRElPX1NBTVBMRV9SQVRFXzg4XzJfS0haCT0g MHgwMywKKwlBVURJT19TQU1QTEVfUkFURV85Nl9LSFoJPSAweDA0LAorCUFVRElPX1NBTVBMRV9S QVRFXzE3Nl80X0tIWgk9IDB4MDUsCisJQVVESU9fU0FNUExFX1JBVEVfMTkyX0tIWgk9IDB4MDYs Cit9OworCitlbnVtIGF1ZGlvX3BhdHRlcm5fdHlwZSB7CisJQVVESU9fVEVTVF9QQVRURVJOX09Q RVJBVE9SX0RFRklORUQJPSAweDAwLAorCUFVRElPX1RFU1RfUEFUVEVSTl9TQVdUT09USAkJPSAw eDAxLAorfTsKKworc3RydWN0IGRwX2xpbmtfcmVxdWVzdCB7CisJdTMyIHRlc3RfcmVxdWVzdGVk OworCXUzMiB0ZXN0X2xpbmtfcmF0ZTsKKwl1MzIgdGVzdF9sYW5lX2NvdW50OworfTsKKworc3Ry dWN0IGRwX2xpbmtfcHJpdmF0ZSB7CisJdTMyIHByZXZfc2lua19jb3VudDsKKwlzdHJ1Y3QgZGV2 aWNlICpkZXY7CisJc3RydWN0IGRwX2F1eCAqYXV4OworCXN0cnVjdCBkcF9saW5rIGRwX2xpbms7 CisKKwlzdHJ1Y3QgZHBfbGlua19yZXF1ZXN0IHJlcXVlc3Q7CisJdTggbGlua19zdGF0dXNbRFBf TElOS19TVEFUVVNfU0laRV07Cit9OworCitzdGF0aWMgaW50IGRwX2xpbmtfZ2V0X3BlcmlvZChz dHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5rLCBpbnQgY29uc3QgYWRkcikKK3sKKwlpbnQgcmV0 ID0gMDsKKwl1OCBkYXRhOworCXUzMiBjb25zdCBtYXhfYXVkaW9fcGVyaW9kID0gMHhBOworCisJ LyogVEVTVF9BVURJT19QRVJJT0RfQ0hfWFggKi8KKwlpZiAoZHJtX2RwX2RwY2RfcmVhZGIobGlu ay0+YXV4LT5kcm1fYXV4LCBhZGRyLCAmZGF0YSkgPCAwKSB7CisJCURSTV9FUlJPUigiZmFpbGVk IHRvIHJlYWQgdGVzdF9hdWRpb19wZXJpb2QgKDB4JXgpXG4iLCBhZGRyKTsKKwkJcmV0ID0gLUVJ TlZBTDsKKwkJZ290byBleGl0OworCX0KKworCS8qIFBlcmlvZCAtIEJpdHMgMzowICovCisJZGF0 YSA9IGRhdGEgJiAweEY7CisJaWYgKChpbnQpZGF0YSA+IG1heF9hdWRpb19wZXJpb2QpIHsKKwkJ RFJNX0VSUk9SKCJpbnZhbGlkIHRlc3RfYXVkaW9fcGVyaW9kX2NoXzEgPSAweCV4XG4iLCBkYXRh KTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBleGl0OworCX0KKworCXJldCA9IGRhdGE7Citl eGl0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZHBfbGlua19wYXJzZV9hdWRpb19j aGFubmVsX3BlcmlvZChzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5rKQoreworCWludCByZXQg PSAwOworCXN0cnVjdCBkcF9saW5rX3Rlc3RfYXVkaW8gKnJlcSA9ICZsaW5rLT5kcF9saW5rLnRl c3RfYXVkaW87CisKKwlyZXQgPSBkcF9saW5rX2dldF9wZXJpb2QobGluaywgRFBfVEVTVF9BVURJ T19QRVJJT0RfQ0gxKTsKKwlpZiAocmV0ID09IC1FSU5WQUwpCisJCWdvdG8gZXhpdDsKKworCXJl cS0+dGVzdF9hdWRpb19wZXJpb2RfY2hfMSA9IHJldDsKKwlEUk1fREVCVUdfRFAoInRlc3RfYXVk aW9fcGVyaW9kX2NoXzEgPSAweCV4XG4iLCByZXQpOworCisJcmV0ID0gZHBfbGlua19nZXRfcGVy aW9kKGxpbmssIERQX1RFU1RfQVVESU9fUEVSSU9EX0NIMik7CisJaWYgKHJldCA9PSAtRUlOVkFM KQorCQlnb3RvIGV4aXQ7CisKKwlyZXEtPnRlc3RfYXVkaW9fcGVyaW9kX2NoXzIgPSByZXQ7CisJ RFJNX0RFQlVHX0RQKCJ0ZXN0X2F1ZGlvX3BlcmlvZF9jaF8yID0gMHgleFxuIiwgcmV0KTsKKwor CS8qIFRFU1RfQVVESU9fUEVSSU9EX0NIXzMgKEJ5dGUgMHgyNzUpICovCisJcmV0ID0gZHBfbGlu a19nZXRfcGVyaW9kKGxpbmssIERQX1RFU1RfQVVESU9fUEVSSU9EX0NIMyk7CisJaWYgKHJldCA9 PSAtRUlOVkFMKQorCQlnb3RvIGV4aXQ7CisKKwlyZXEtPnRlc3RfYXVkaW9fcGVyaW9kX2NoXzMg PSByZXQ7CisJRFJNX0RFQlVHX0RQKCJ0ZXN0X2F1ZGlvX3BlcmlvZF9jaF8zID0gMHgleFxuIiwg cmV0KTsKKworCXJldCA9IGRwX2xpbmtfZ2V0X3BlcmlvZChsaW5rLCBEUF9URVNUX0FVRElPX1BF UklPRF9DSDQpOworCWlmIChyZXQgPT0gLUVJTlZBTCkKKwkJZ290byBleGl0OworCisJcmVxLT50 ZXN0X2F1ZGlvX3BlcmlvZF9jaF80ID0gcmV0OworCURSTV9ERUJVR19EUCgidGVzdF9hdWRpb19w ZXJpb2RfY2hfNCA9IDB4JXhcbiIsIHJldCk7CisKKwlyZXQgPSBkcF9saW5rX2dldF9wZXJpb2Qo bGluaywgRFBfVEVTVF9BVURJT19QRVJJT0RfQ0g1KTsKKwlpZiAocmV0ID09IC1FSU5WQUwpCisJ CWdvdG8gZXhpdDsKKworCXJlcS0+dGVzdF9hdWRpb19wZXJpb2RfY2hfNSA9IHJldDsKKwlEUk1f REVCVUdfRFAoInRlc3RfYXVkaW9fcGVyaW9kX2NoXzUgPSAweCV4XG4iLCByZXQpOworCisJcmV0 ID0gZHBfbGlua19nZXRfcGVyaW9kKGxpbmssIERQX1RFU1RfQVVESU9fUEVSSU9EX0NINik7CisJ aWYgKHJldCA9PSAtRUlOVkFMKQorCQlnb3RvIGV4aXQ7CisKKwlyZXEtPnRlc3RfYXVkaW9fcGVy aW9kX2NoXzYgPSByZXQ7CisJRFJNX0RFQlVHX0RQKCJ0ZXN0X2F1ZGlvX3BlcmlvZF9jaF82ID0g MHgleFxuIiwgcmV0KTsKKworCXJldCA9IGRwX2xpbmtfZ2V0X3BlcmlvZChsaW5rLCBEUF9URVNU X0FVRElPX1BFUklPRF9DSDcpOworCWlmIChyZXQgPT0gLUVJTlZBTCkKKwkJZ290byBleGl0Owor CisJcmVxLT50ZXN0X2F1ZGlvX3BlcmlvZF9jaF83ID0gcmV0OworCURSTV9ERUJVR19EUCgidGVz dF9hdWRpb19wZXJpb2RfY2hfNyA9IDB4JXhcbiIsIHJldCk7CisKKwlyZXQgPSBkcF9saW5rX2dl dF9wZXJpb2QobGluaywgRFBfVEVTVF9BVURJT19QRVJJT0RfQ0g4KTsKKwlpZiAocmV0ID09IC1F SU5WQUwpCisJCWdvdG8gZXhpdDsKKworCXJlcS0+dGVzdF9hdWRpb19wZXJpb2RfY2hfOCA9IHJl dDsKKwlEUk1fREVCVUdfRFAoInRlc3RfYXVkaW9fcGVyaW9kX2NoXzggPSAweCV4XG4iLCByZXQp OworZXhpdDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRwX2xpbmtfcGFyc2VfYXVk aW9fcGF0dGVybl90eXBlKHN0cnVjdCBkcF9saW5rX3ByaXZhdGUgKmxpbmspCit7CisJaW50IHJl dCA9IDA7CisJdTggZGF0YTsKKwlzc2l6ZV90IHJsZW47CisJaW50IGNvbnN0IG1heF9hdWRpb19w YXR0ZXJuX3R5cGUgPSAweDE7CisKKwlybGVuID0gZHJtX2RwX2RwY2RfcmVhZGIobGluay0+YXV4 LT5kcm1fYXV4LAorCQkJCURQX1RFU1RfQVVESU9fUEFUVEVSTl9UWVBFLCAmZGF0YSk7CisJaWYg KHJsZW4gPCAwKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIHJlYWQgbGluayBhdWRpbyBtb2Rl LiBybGVuPSV6ZFxuIiwgcmxlbik7CisJCXJldHVybiBybGVuOworCX0KKworCS8qIEF1ZGlvIFBh dHRlcm4gVHlwZSAtIEJpdHMgNzowICovCisJaWYgKChpbnQpZGF0YSA+IG1heF9hdWRpb19wYXR0 ZXJuX3R5cGUpIHsKKwkJRFJNX0VSUk9SKCJpbnZhbGlkIGF1ZGlvIHBhdHRlcm4gdHlwZSA9IDB4 JXhcbiIsIGRhdGEpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGV4aXQ7CisJfQorCisJbGlu ay0+ZHBfbGluay50ZXN0X2F1ZGlvLnRlc3RfYXVkaW9fcGF0dGVybl90eXBlID0gZGF0YTsKKwlE Uk1fREVCVUdfRFAoImF1ZGlvIHBhdHRlcm4gdHlwZSA9IDB4JXhcbiIsIGRhdGEpOworZXhpdDoK KwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRwX2xpbmtfcGFyc2VfYXVkaW9fbW9kZShz dHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5rKQoreworCWludCByZXQgPSAwOworCXU4IGRhdGE7 CisJc3NpemVfdCBybGVuOworCWludCBjb25zdCBtYXhfYXVkaW9fc2FtcGxpbmdfcmF0ZSA9IDB4 NjsKKwlpbnQgY29uc3QgbWF4X2F1ZGlvX2NoYW5uZWxfY291bnQgPSAweDg7CisJaW50IHNhbXBs aW5nX3JhdGUgPSAweDA7CisJaW50IGNoYW5uZWxfY291bnQgPSAweDA7CisKKwlybGVuID0gZHJt X2RwX2RwY2RfcmVhZGIobGluay0+YXV4LT5kcm1fYXV4LCBEUF9URVNUX0FVRElPX01PREUsICZk YXRhKTsKKwlpZiAocmxlbiA8IDApIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gcmVhZCBsaW5r IGF1ZGlvIG1vZGUuIHJsZW49JXpkXG4iLCBybGVuKTsKKwkJcmV0dXJuIHJsZW47CisJfQorCisJ LyogU2FtcGxpbmcgUmF0ZSAtIEJpdHMgMzowICovCisJc2FtcGxpbmdfcmF0ZSA9IGRhdGEgJiAw eEY7CisJaWYgKHNhbXBsaW5nX3JhdGUgPiBtYXhfYXVkaW9fc2FtcGxpbmdfcmF0ZSkgeworCQlE Uk1fRVJST1IoInNhbXBsaW5nIHJhdGUgKDB4JXgpIGdyZWF0ZXIgdGhhbiBtYXggKDB4JXgpXG4i LAorCQkJCXNhbXBsaW5nX3JhdGUsIG1heF9hdWRpb19zYW1wbGluZ19yYXRlKTsKKwkJcmV0ID0g LUVJTlZBTDsKKwkJZ290byBleGl0OworCX0KKworCS8qIENoYW5uZWwgQ291bnQgLSBCaXRzIDc6 NCAqLworCWNoYW5uZWxfY291bnQgPSAoKGRhdGEgJiAweEYwKSA+PiA0KSArIDE7CisJaWYgKGNo YW5uZWxfY291bnQgPiBtYXhfYXVkaW9fY2hhbm5lbF9jb3VudCkgeworCQlEUk1fRVJST1IoImNo YW5uZWxfY291bnQgKDB4JXgpIGdyZWF0ZXIgdGhhbiBtYXggKDB4JXgpXG4iLAorCQkJCWNoYW5u ZWxfY291bnQsIG1heF9hdWRpb19jaGFubmVsX2NvdW50KTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJ Z290byBleGl0OworCX0KKworCWxpbmstPmRwX2xpbmsudGVzdF9hdWRpby50ZXN0X2F1ZGlvX3Nh bXBsaW5nX3JhdGUgPSBzYW1wbGluZ19yYXRlOworCWxpbmstPmRwX2xpbmsudGVzdF9hdWRpby50 ZXN0X2F1ZGlvX2NoYW5uZWxfY291bnQgPSBjaGFubmVsX2NvdW50OworCURSTV9ERUJVR19EUCgi c2FtcGxpbmdfcmF0ZSA9IDB4JXgsIGNoYW5uZWxfY291bnQgPSAweCV4XG4iLAorCQkJCQlzYW1w bGluZ19yYXRlLCBjaGFubmVsX2NvdW50KTsKK2V4aXQ6CisJcmV0dXJuIHJldDsKK30KKworLyoq CisgKiBkcF9wYXJzZV9hdWRpb19wYXR0ZXJuX3BhcmFtcygpIC0gcGFyc2VzIGF1ZGlvIHBhdHRl cm4gcGFyYW1ldGVycyBmcm9tIERQQ0QKKyAqIEBsaW5rOiBEaXNwbGF5IFBvcnQgRHJpdmVyIGRh dGEKKyAqCisgKiBSZXR1cm5zIDAgaWYgaXQgc3VjY2Vzc2Z1bGx5IHBhcnNlcyB0aGUgYXVkaW8g bGluayBwYXR0ZXJuIHBhcmFtZXRlcnMuCisgKi8KK3N0YXRpYyBpbnQgZHBfbGlua19wYXJzZV9h dWRpb19wYXR0ZXJuX3BhcmFtcyhzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5rKQoreworCWlu dCByZXQgPSAwOworCisJcmV0ID0gZHBfbGlua19wYXJzZV9hdWRpb19tb2RlKGxpbmspOworCWlm IChyZXQpCisJCWdvdG8gZXhpdDsKKworCXJldCA9IGRwX2xpbmtfcGFyc2VfYXVkaW9fcGF0dGVy bl90eXBlKGxpbmspOworCWlmIChyZXQpCisJCWdvdG8gZXhpdDsKKworCXJldCA9IGRwX2xpbmtf cGFyc2VfYXVkaW9fY2hhbm5lbF9wZXJpb2QobGluayk7CisKK2V4aXQ6CisJcmV0dXJuIHJldDsK K30KKworLyoqCisgKiBkcF9saW5rX2lzX3ZpZGVvX3BhdHRlcm5fdmFsaWQoKSAtIHZhbGlkYXRl cyB0aGUgdmlkZW8gcGF0dGVybgorICogQHBhdHRlcm46IHZpZGVvIHBhdHRlcm4gcmVxdWVzdGVk IGJ5IHRoZSBzaW5rCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSByZXF1ZXN0ZWQgdmlkZW8g cGF0dGVybiBpcyBzdXBwb3J0ZWQuCisgKi8KK3N0YXRpYyBib29sIGRwX2xpbmtfaXNfdmlkZW9f cGF0dGVybl92YWxpZCh1MzIgcGF0dGVybikKK3sKKwlzd2l0Y2ggKHBhdHRlcm4pIHsKKwljYXNl IERQX05PX1RFU1RfUEFUVEVSTjoKKwljYXNlIERQX0NPTE9SX1JBTVA6CisJY2FzZSBEUF9CTEFD S19BTkRfV0hJVEVfVkVSVElDQUxfTElORVM6CisJY2FzZSBEUF9DT0xPUl9TUVVBUkU6CisJCXJl dHVybiB0cnVlOworCWRlZmF1bHQ6CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CisKKy8qKgorICog ZHBfbGlua19pc19iaXRfZGVwdGhfdmFsaWQoKSAtIHZhbGlkYXRlcyB0aGUgYml0IGRlcHRoIHJl cXVlc3RlZAorICogQGJpdF9kZXB0aDogYml0IGRlcHRoIHJlcXVlc3RlZCBieSB0aGUgc2luawor ICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVxdWVzdGVkIGJpdCBkZXB0aCBpcyBzdXBwb3J0 ZWQuCisgKi8KK3N0YXRpYyBib29sIGRwX2xpbmtfaXNfYml0X2RlcHRoX3ZhbGlkKHUzMiB0YmQp Cit7CisJLyogRFBfVEVTVF9WSURFT19QQVRURVJOX05PTkUgaXMgdHJlYXRlZCBhcyBpbnZhbGlk ICovCisJc3dpdGNoICh0YmQpIHsKKwljYXNlIERQX1RFU1RfQklUX0RFUFRIXzY6CisJY2FzZSBE UF9URVNUX0JJVF9ERVBUSF84OgorCWNhc2UgRFBfVEVTVF9CSVRfREVQVEhfMTA6CisJCXJldHVy biB0cnVlOworCWRlZmF1bHQ6CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CisKK3N0YXRpYyBpbnQg ZHBfbGlua19wYXJzZV90aW1pbmdfcGFyYW1zMShzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5r LAorCQkJCQlpbnQgYWRkciwgaW50IGxlbiwgdTMyICp2YWwpCit7CisJdTggYnBbMl07CisJaW50 IHJsZW47CisKKwlpZiAobGVuICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogUmVhZCB0 aGUgcmVxdWVzdGVkIHZpZGVvIGxpbmsgcGF0dGVybiAoQnl0ZSAweDIyMSkuICovCisJcmxlbiA9 IGRybV9kcF9kcGNkX3JlYWQobGluay0+YXV4LT5kcm1fYXV4LCBhZGRyLCBicCwgbGVuKTsKKwlp ZiAocmxlbiA8IGxlbikgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byByZWFkIDB4JXhcbiIsIGFk ZHIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkqdmFsID0gYnBbMV0gfCAoYnBbMF0gPDwg OCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkcF9saW5rX3BhcnNlX3RpbWluZ19w YXJhbXMyKHN0cnVjdCBkcF9saW5rX3ByaXZhdGUgKmxpbmssCisJCQkJCWludCBhZGRyLCBpbnQg bGVuLAorCQkJCQl1MzIgKnZhbDEsIHUzMiAqdmFsMikKK3sKKwl1OCBicFsyXTsKKwlpbnQgcmxl bjsKKworCWlmIChsZW4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBSZWFkIHRoZSBy ZXF1ZXN0ZWQgdmlkZW8gbGluayBwYXR0ZXJuIChCeXRlIDB4MjIxKS4gKi8KKwlybGVuID0gZHJt X2RwX2RwY2RfcmVhZChsaW5rLT5hdXgtPmRybV9hdXgsIGFkZHIsIGJwLCBsZW4pOworCWlmIChy bGVuIDwgbGVuKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIHJlYWQgMHgleFxuIiwgYWRkcik7 CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCSp2YWwxID0gKGJwWzBdICYgQklUKDcpKSA+PiA3 OworCSp2YWwyID0gYnBbMV0gfCAoKGJwWzBdICYgMHg3RikgPDwgOCk7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCBkcF9saW5rX3BhcnNlX3RpbWluZ19wYXJhbXMzKHN0cnVjdCBkcF9s aW5rX3ByaXZhdGUgKmxpbmssCisJCQkJCWludCBhZGRyLCB1MzIgKnZhbCkKK3sKKwl1OCBicDsK Kwl1MzIgbGVuID0gMTsKKwlpbnQgcmxlbjsKKworCXJsZW4gPSBkcm1fZHBfZHBjZF9yZWFkKGxp bmstPmF1eC0+ZHJtX2F1eCwgYWRkciwgJmJwLCBsZW4pOworCWlmIChybGVuIDwgMSkgeworCQlE Uk1fRVJST1IoImZhaWxlZCB0byByZWFkIDB4JXhcbiIsIGFkZHIpOworCQlyZXR1cm4gLUVJTlZB TDsKKwl9CisJKnZhbCA9IGJwOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogZHBfcGFyc2Vf dmlkZW9fcGF0dGVybl9wYXJhbXMoKSAtIHBhcnNlcyB2aWRlbyBwYXR0ZXJuIHBhcmFtZXRlcnMg ZnJvbSBEUENECisgKiBAbGluazogRGlzcGxheSBQb3J0IERyaXZlciBkYXRhCisgKgorICogUmV0 dXJucyAwIGlmIGl0IHN1Y2Nlc3NmdWxseSBwYXJzZXMgdGhlIHZpZGVvIGxpbmsgcGF0dGVybiBh bmQgdGhlIGxpbmsKKyAqIGJpdCBkZXB0aCByZXF1ZXN0ZWQgYnkgdGhlIHNpbmsgYW5kLCBhbmQg aWYgdGhlIHZhbHVlcyBwYXJzZWQgYXJlIHZhbGlkLgorICovCitzdGF0aWMgaW50IGRwX2xpbmtf cGFyc2VfdmlkZW9fcGF0dGVybl9wYXJhbXMoc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGluaykK K3sKKwlpbnQgcmV0ID0gMDsKKwlzc2l6ZV90IHJsZW47CisJdTggYnA7CisKKwlybGVuID0gZHJt X2RwX2RwY2RfcmVhZGIobGluay0+YXV4LT5kcm1fYXV4LCBEUF9URVNUX1BBVFRFUk4sICZicCk7 CisJaWYgKHJsZW4gPCAwKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIHJlYWQgbGluayB2aWRl byBwYXR0ZXJuLiBybGVuPSV6ZFxuIiwgcmxlbik7CisJCXJldHVybiBybGVuOworCX0KKworCWlm ICghZHBfbGlua19pc192aWRlb19wYXR0ZXJuX3ZhbGlkKGJwKSkgeworCQlEUk1fRVJST1IoImlu dmFsaWQgbGluayB2aWRlbyBwYXR0ZXJuID0gMHgleFxuIiwgYnApOworCQlyZXQgPSAtRUlOVkFM OworCQlyZXR1cm4gcmV0OworCX0KKworCWxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X3Zp ZGVvX3BhdHRlcm4gPSBicDsKKworCS8qIFJlYWQgdGhlIHJlcXVlc3RlZCBjb2xvciBiaXQgZGVw dGggYW5kIGR5bmFtaWMgcmFuZ2UgKEJ5dGUgMHgyMzIpICovCisJcmxlbiA9IGRybV9kcF9kcGNk X3JlYWRiKGxpbmstPmF1eC0+ZHJtX2F1eCwgRFBfVEVTVF9NSVNDMCwgJmJwKTsKKwlpZiAocmxl biA8IDApIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gcmVhZCBsaW5rIGJpdCBkZXB0aC4gcmxl bj0lemRcbiIsIHJsZW4pOworCQlyZXR1cm4gcmxlbjsKKwl9CisKKwkvKiBEeW5hbWljIFJhbmdl ICovCisJbGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3RfZHluX3JhbmdlID0gKGJwICYgRFBf VEVTVF9EWU5BTUlDX1JBTkdFX0NFQSk7CisKKwkvKiBDb2xvciBiaXQgZGVwdGggKi8KKwlicCAm PSBEUF9URVNUX0JJVF9ERVBUSF9NQVNLOworCWlmICghZHBfbGlua19pc19iaXRfZGVwdGhfdmFs aWQoYnApKSB7CisJCURSTV9FUlJPUigiaW52YWxpZCBsaW5rIGJpdCBkZXB0aCA9IDB4JXhcbiIs IGJwKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlsaW5rLT5kcF9s aW5rLnRlc3RfdmlkZW8udGVzdF9iaXRfZGVwdGggPSBicDsKKworCS8qIHJlc29sdXRpb24gdGlt aW5nIHBhcmFtcyAqLworCXJldCA9IGRwX2xpbmtfcGFyc2VfdGltaW5nX3BhcmFtczEobGluaywg RFBfVEVTVF9IX1RPVEFMX0hJLCAyLAorCQkJJmxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0 X2hfdG90YWwpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gcGFyc2UgdGVz dF9oX3RvdGFsIChEUF9URVNUX0hfVE9UQUxfSEkpXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisK KwlyZXQgPSBkcF9saW5rX3BhcnNlX3RpbWluZ19wYXJhbXMxKGxpbmssIERQX1RFU1RfVl9UT1RB TF9ISSwgMiwKKwkJCSZsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF92X3RvdGFsKTsKKwlp ZiAocmV0KSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIHBhcnNlIHRlc3Rfdl90b3RhbCAoRFBf VEVTVF9WX1RPVEFMX0hJKVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gZHBfbGlu a19wYXJzZV90aW1pbmdfcGFyYW1zMShsaW5rLCBEUF9URVNUX0hfU1RBUlRfSEksIDIsCisJCQkm bGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3RfaF9zdGFydCk7CisJaWYgKHJldCkgeworCQlE Uk1fRVJST1IoImZhaWxlZCB0byBwYXJzZSB0ZXN0X2hfc3RhcnQgKERQX1RFU1RfSF9TVEFSVF9I SSlcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGRwX2xpbmtfcGFyc2VfdGltaW5n X3BhcmFtczEobGluaywgRFBfVEVTVF9WX1NUQVJUX0hJLCAyLAorCQkJJmxpbmstPmRwX2xpbmsu dGVzdF92aWRlby50ZXN0X3Zfc3RhcnQpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJmYWls ZWQgdG8gcGFyc2UgdGVzdF92X3N0YXJ0IChEUF9URVNUX1ZfU1RBUlRfSEkpXG4iKTsKKwkJcmV0 dXJuIHJldDsKKwl9CisKKwlyZXQgPSBkcF9saW5rX3BhcnNlX3RpbWluZ19wYXJhbXMyKGxpbmss IERQX1RFU1RfSFNZTkNfSEksIDIsCisJCQkmbGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3Rf aHN5bmNfcG9sLAorCQkJJmxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X2hzeW5jX3dpZHRo KTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIHBhcnNlIChEUF9URVNUX0hT WU5DX0hJKVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gZHBfbGlua19wYXJzZV90 aW1pbmdfcGFyYW1zMihsaW5rLCBEUF9URVNUX1ZTWU5DX0hJLCAyLAorCQkJJmxpbmstPmRwX2xp bmsudGVzdF92aWRlby50ZXN0X3ZzeW5jX3BvbCwKKwkJCSZsaW5rLT5kcF9saW5rLnRlc3Rfdmlk ZW8udGVzdF92c3luY193aWR0aCk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0 byBwYXJzZSAoRFBfVEVTVF9WU1lOQ19ISSlcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJl dCA9IGRwX2xpbmtfcGFyc2VfdGltaW5nX3BhcmFtczEobGluaywgRFBfVEVTVF9IX1dJRFRIX0hJ LCAyLAorCQkJJmxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X2hfd2lkdGgpOworCWlmIChy ZXQpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gcGFyc2UgdGVzdF9oX3dpZHRoIChEUF9URVNU X0hfV0lEVEhfSEkpXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBkcF9saW5rX3Bh cnNlX3RpbWluZ19wYXJhbXMxKGxpbmssIERQX1RFU1RfVl9IRUlHSFRfSEksIDIsCisJCQkmbGlu ay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3Rfdl9oZWlnaHQpOworCWlmIChyZXQpIHsKKwkJRFJN X0VSUk9SKCJmYWlsZWQgdG8gcGFyc2UgdGVzdF92X2hlaWdodCAoRFBfVEVTVF9WX0hFSUdIVF9I SSlcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGRwX2xpbmtfcGFyc2VfdGltaW5n X3BhcmFtczMobGluaywgRFBfVEVTVF9NSVNDMSwKKwkJJmxpbmstPmRwX2xpbmsudGVzdF92aWRl by50ZXN0X3JyX2QpOworCWxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X3JyX2QgJj0gRFBf VEVTVF9SRUZSRVNIX0RFTk9NSU5BVE9SOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJmYWls ZWQgdG8gcGFyc2UgdGVzdF9ycl9kIChEUF9URVNUX01JU0MxKVxuIik7CisJCXJldHVybiByZXQ7 CisJfQorCisJcmV0ID0gZHBfbGlua19wYXJzZV90aW1pbmdfcGFyYW1zMyhsaW5rLCBEUF9URVNU X1JFRlJFU0hfUkFURV9OVU1FUkFUT1IsCisJCSZsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVz dF9ycl9uKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIHBhcnNlIHRlc3Rf cnJfbiAoRFBfVEVTVF9SRUZSRVNIX1JBVEVfTlVNRVJBVE9SKVxuIik7CisJCXJldHVybiByZXQ7 CisJfQorCisJRFJNX0RFQlVHX0RQKCJsaW5rIHZpZGVvIHBhdHRlcm4gPSAweCV4XG4iIFwKKwkJ ImxpbmsgZHluYW1pYyByYW5nZSA9IDB4JXhcbiIgXAorCQkibGluayBiaXQgZGVwdGggPSAweCV4 XG4iIFwKKwkJIlRFU1RfSF9UT1RBTCA9ICVkLCBURVNUX1ZfVE9UQUwgPSAlZFxuIiBcCisJCSJU RVNUX0hfU1RBUlQgPSAlZCwgVEVTVF9WX1NUQVJUID0gJWRcbiIgXAorCQkiVEVTVF9IU1lOQ19Q T0wgPSAlZFxuIiBcCisJCSJURVNUX0hTWU5DX1dJRFRIID0gJWRcbiIgXAorCQkiVEVTVF9WU1lO Q19QT0wgPSAlZFxuIiBcCisJCSJURVNUX1ZTWU5DX1dJRFRIID0gJWRcbiIgXAorCQkiVEVTVF9I X1dJRFRIID0gJWRcbiIgXAorCQkiVEVTVF9WX0hFSUdIVCA9ICVkXG4iIFwKKwkJIlRFU1RfUkVG UkVTSF9ERU5PTUlOQVRPUiA9ICVkXG4iIFwKKwkJICJURVNUX1JFRlJFU0hfTlVNRVJBVE9SID0g JWRcbiIsCisJCWxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X3ZpZGVvX3BhdHRlcm4sCisJ CWxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X2R5bl9yYW5nZSwKKwkJbGluay0+ZHBfbGlu ay50ZXN0X3ZpZGVvLnRlc3RfYml0X2RlcHRoLAorCQlsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8u dGVzdF9oX3RvdGFsLAorCQlsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF92X3RvdGFsLAor CQlsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF9oX3N0YXJ0LAorCQlsaW5rLT5kcF9saW5r LnRlc3RfdmlkZW8udGVzdF92X3N0YXJ0LAorCQlsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVz dF9oc3luY19wb2wsCisJCWxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X2hzeW5jX3dpZHRo LAorCQlsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF92c3luY19wb2wsCisJCWxpbmstPmRw X2xpbmsudGVzdF92aWRlby50ZXN0X3ZzeW5jX3dpZHRoLAorCQlsaW5rLT5kcF9saW5rLnRlc3Rf dmlkZW8udGVzdF9oX3dpZHRoLAorCQlsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF92X2hl aWdodCwKKwkJbGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3RfcnJfZCwKKwkJbGluay0+ZHBf bGluay50ZXN0X3ZpZGVvLnRlc3RfcnJfbik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAq IGRwX2xpbmtfcGFyc2VfbGlua190cmFpbmluZ19wYXJhbXMoKSAtIHBhcnNlcyBsaW5rIHRyYWlu aW5nIHBhcmFtZXRlcnMgZnJvbQorICogRFBDRAorICogQGxpbms6IERpc3BsYXkgUG9ydCBEcml2 ZXIgZGF0YQorICoKKyAqIFJldHVybnMgMCBpZiBpdCBzdWNjZXNzZnVsbHkgcGFyc2VzIHRoZSBs aW5rIHJhdGUgKEJ5dGUgMHgyMTkpIGFuZCBsYW5lCisgKiBjb3VudCAoQnl0ZSAweDIyMCksIGFu ZCBpZiB0aGVzZSB2YWx1ZXMgcGFyc2UgYXJlIHZhbGlkLgorICovCitzdGF0aWMgaW50IGRwX2xp bmtfcGFyc2VfbGlua190cmFpbmluZ19wYXJhbXMoc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGlu aykKK3sKKwl1OCBicDsKKwlzc2l6ZV90IHJsZW47CisKKwlybGVuID0gZHJtX2RwX2RwY2RfcmVh ZGIobGluay0+YXV4LT5kcm1fYXV4LCBEUF9URVNUX0xJTktfUkFURSwJJmJwKTsKKwlpZiAocmxl biA8IDApIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gcmVhZCBsaW5rIHJhdGUuIHJsZW49JXpk XG4iLCBybGVuKTsKKwkJcmV0dXJuIHJsZW47CisJfQorCisJaWYgKCFpc19saW5rX3JhdGVfdmFs aWQoYnApKSB7CisJCURSTV9FUlJPUigiaW52YWxpZCBsaW5rIHJhdGUgPSAweCV4XG4iLCBicCk7 CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWxpbmstPnJlcXVlc3QudGVzdF9saW5rX3JhdGUg PSBicDsKKwlEUk1fREVCVUdfRFAoImxpbmsgcmF0ZSA9IDB4JXhcbiIsIGxpbmstPnJlcXVlc3Qu dGVzdF9saW5rX3JhdGUpOworCisJcmxlbiA9IGRybV9kcF9kcGNkX3JlYWRiKGxpbmstPmF1eC0+ ZHJtX2F1eCwgRFBfVEVTVF9MQU5FX0NPVU5ULCAmYnApOworCWlmIChybGVuIDwgMCkgeworCQlE Uk1fRVJST1IoImZhaWxlZCB0byByZWFkIGxhbmUgY291bnQuIHJsZW49JXpkXG4iLCBybGVuKTsK KwkJcmV0dXJuIHJsZW47CisJfQorCWJwICY9IERQX01BWF9MQU5FX0NPVU5UX01BU0s7CisKKwlp ZiAoIWlzX2xhbmVfY291bnRfdmFsaWQoYnApKSB7CisJCURSTV9FUlJPUigiaW52YWxpZCBsYW5l IGNvdW50ID0gMHgleFxuIiwgYnApOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlsaW5rLT5y ZXF1ZXN0LnRlc3RfbGFuZV9jb3VudCA9IGJwOworCURSTV9ERUJVR19EUCgibGFuZSBjb3VudCA9 IDB4JXhcbiIsIGxpbmstPnJlcXVlc3QudGVzdF9sYW5lX2NvdW50KTsKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIGJvb2wgZHBfbGlua19pc19waHlfdGVzdF9wYXR0ZXJuX3N1cHBvcnRlZCh1MzIg cGh5X3Rlc3RfcGF0dGVybl9zZWwpCit7CisJc3dpdGNoIChwaHlfdGVzdF9wYXR0ZXJuX3NlbCkg eworCWNhc2UgRFBfTElOS19RVUFMX1BBVFRFUk5fRElTQUJMRToKKwljYXNlIERQX0xJTktfUVVB TF9QQVRURVJOX0QxMF8yOgorCWNhc2UgRFBfTElOS19RVUFMX1BBVFRFUk5fRVJST1JfUkFURToK KwljYXNlIERQX0xJTktfUVVBTF9QQVRURVJOX1BSQlM3OgorCWNhc2UgRFBfTElOS19RVUFMX1BB VFRFUk5fODBCSVRfQ1VTVE9NOgorCWNhc2UgRFBfTElOS19RVUFMX1BBVFRFUk5fSEJSMl9FWUU6 CisJCXJldHVybiB0cnVlOworCWRlZmF1bHQ6CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CisKKy8q KgorICogZHBfcGFyc2VfcGh5X3Rlc3RfcGFyYW1zKCkgLSBwYXJzZXMgdGhlIHBoeSBsaW5rIHBh cmFtZXRlcnMKKyAqIEBsaW5rOiBEaXNwbGF5IFBvcnQgRHJpdmVyIGRhdGEKKyAqCisgKiBQYXJz ZXMgdGhlIERQQ0QgKEJ5dGUgMHgyNDgpIGZvciB0aGUgRFAgUEhZIGxpbmsgcGF0dGVybiB0aGF0 IGlzIGJlaW5nCisgKiByZXF1ZXN0ZWQuCisgKi8KK3N0YXRpYyBpbnQgZHBfbGlua19wYXJzZV9w aHlfdGVzdF9wYXJhbXMoc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGluaykKK3sKKwl1OCBkYXRh OworCXNzaXplX3QgcmxlbjsKKwlpbnQgcmV0ID0gMDsKKworCXJsZW4gPSBkcm1fZHBfZHBjZF9y ZWFkYihsaW5rLT5hdXgtPmRybV9hdXgsIERQX1RFU1RfUEhZX1BBVFRFUk4sICZkYXRhKTsKKwlp ZiAocmxlbiA8IDApIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gcmVhZCBwaHkgbGluayBwYXR0 ZXJuLiBybGVuPSV6ZFxuIiwgcmxlbik7CisJCXJldHVybiBybGVuOworCX0KKworCWxpbmstPmRw X2xpbmsucGh5X3BhcmFtcy5waHlfdGVzdF9wYXR0ZXJuX3NlbCA9IGRhdGE7CisKKwlEUk1fREVC VUdfRFAoInBoeV90ZXN0X3BhdHRlcm5fc2VsID0gMHgleFxuIiwgZGF0YSk7CisKKwlpZiAoIWRw X2xpbmtfaXNfcGh5X3Rlc3RfcGF0dGVybl9zdXBwb3J0ZWQoZGF0YSkpCisJCXJldCA9IC1FSU5W QUw7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGRwX2xpbmtfaXNfdmlkZW9fYXVkaW9f dGVzdF9yZXF1ZXN0ZWQoKSAtIGNoZWNrcyBmb3IgYXVkaW8vdmlkZW8gbGluayByZXF1ZXN0Cisg KiBAbGluazogbGluayByZXF1ZXN0ZWQgYnkgdGhlIHNpbmsKKyAqCisgKiBSZXR1cm5zIHRydWUg aWYgdGhlIHJlcXVlc3RlZCBsaW5rIGlzIGEgcGVybWl0dGVkIGF1ZGlvL3ZpZGVvIGxpbmsuCisg Ki8KK3N0YXRpYyBib29sIGRwX2xpbmtfaXNfdmlkZW9fYXVkaW9fdGVzdF9yZXF1ZXN0ZWQodTMy IGxpbmspCit7CisJdTggdmlkZW9fYXVkaW9fdGVzdCA9IChEUF9URVNUX0xJTktfVklERU9fUEFU VEVSTiB8CisJCQkJRFBfVEVTVF9MSU5LX0FVRElPX1BBVFRFUk4gfAorCQkJCURQX1RFU1RfTElO S19BVURJT19ESVNBQkxFRF9WSURFTyk7CisKKwlyZXR1cm4gKChsaW5rICYgdmlkZW9fYXVkaW9f dGVzdCkgJiYKKwkJIShsaW5rICYgfnZpZGVvX2F1ZGlvX3Rlc3QpKTsKK30KKworLyoqCisgKiBk cF9saW5rX3BhcnNlX3JlcXVlc3QoKSAtIHBhcnNlcyBsaW5rIHJlcXVlc3QgcGFyYW1ldGVycyBm cm9tIHNpbmsKKyAqIEBsaW5rOiBEaXNwbGF5IFBvcnQgRHJpdmVyIGRhdGEKKyAqCisgKiBQYXJz ZXMgdGhlIERQQ0QgdG8gY2hlY2sgaWYgYW4gYXV0b21hdGVkIGxpbmsgaXMgcmVxdWVzdGVkIChC eXRlIDB4MjAxKSwKKyAqIGFuZCB3aGF0IHR5cGUgb2YgbGluayBhdXRvbWF0aW9uIGlzIGJlaW5n IHJlcXVlc3RlZCAoQnl0ZSAweDIxOCkuCisgKi8KK3N0YXRpYyBpbnQgZHBfbGlua19wYXJzZV9y ZXF1ZXN0KHN0cnVjdCBkcF9saW5rX3ByaXZhdGUgKmxpbmspCit7CisJaW50IHJldCA9IDA7CisJ dTggZGF0YTsKKwlzc2l6ZV90IHJsZW47CisKKwkvKioKKwkgKiBSZWFkIHRoZSBkZXZpY2Ugc2Vy dmljZSBJUlEgdmVjdG9yIChCeXRlIDB4MjAxKSB0byBkZXRlcm1pbmUKKwkgKiB3aGV0aGVyIGFu IGF1dG9tYXRlZCBsaW5rIGhhcyBiZWVuIHJlcXVlc3RlZCBieSB0aGUgc2luay4KKwkgKi8KKwly bGVuID0gZHJtX2RwX2RwY2RfcmVhZGIobGluay0+YXV4LT5kcm1fYXV4LAorCQkJCURQX0RFVklD RV9TRVJWSUNFX0lSUV9WRUNUT1IsICZkYXRhKTsKKwlpZiAocmxlbiA8IDApIHsKKwkJRFJNX0VS Uk9SKCJhdXggcmVhZCBmYWlsZWQuIHJsZW49JXpkXG4iLCBybGVuKTsKKwkJcmV0dXJuIHJsZW47 CisJfQorCisJRFJNX0RFQlVHX0RQKCJkZXZpY2Ugc2VydmljZSBpcnEgdmVjdG9yID0gMHgleFxu IiwgZGF0YSk7CisKKwlpZiAoIShkYXRhICYgRFBfQVVUT01BVEVEX1RFU1RfUkVRVUVTVCkpIHsK KwkJRFJNX0RFQlVHX0RQKCJubyB0ZXN0IHJlcXVlc3RlZFxuIik7CisJCXJldHVybiAwOworCX0K KworCS8qKgorCSAqIFJlYWQgdGhlIGxpbmsgcmVxdWVzdCBieXRlIChCeXRlIDB4MjE4KSB0byBk ZXRlcm1pbmUgd2hhdCB0eXBlCisJICogb2YgYXV0b21hdGVkIGxpbmsgaGFzIGJlZW4gcmVxdWVz dGVkIGJ5IHRoZSBzaW5rLgorCSAqLworCXJsZW4gPSBkcm1fZHBfZHBjZF9yZWFkYihsaW5rLT5h dXgtPmRybV9hdXgsIERQX1RFU1RfUkVRVUVTVCwgJmRhdGEpOworCWlmIChybGVuIDwgMCkgewor CQlEUk1fRVJST1IoImF1eCByZWFkIGZhaWxlZC4gcmxlbj0lemRcbiIsIHJsZW4pOworCQlyZXR1 cm4gcmxlbjsKKwl9CisKKwlpZiAoIWRhdGEgfHwgKGRhdGEgPT0gRFBfVEVTVF9MSU5LX0ZBVVhf UEFUVEVSTikpIHsKKwkJRFJNX0RFQlVHX0RQKCJsaW5rIDB4JXggbm90IHN1cHBvcnRlZFxuIiwg ZGF0YSk7CisJCWdvdG8gZW5kOworCX0KKworCURSTV9ERUJVR19EUCgiVGVzdDooMHgleCkgcmVx dWVzdGVkXG4iLCBkYXRhKTsKKwlsaW5rLT5yZXF1ZXN0LnRlc3RfcmVxdWVzdGVkID0gZGF0YTsK KworCWlmIChsaW5rLT5yZXF1ZXN0LnRlc3RfcmVxdWVzdGVkID09IERQX1RFU1RfTElOS19QSFlf VEVTVF9QQVRURVJOKSB7CisJCXJldCA9IGRwX2xpbmtfcGFyc2VfcGh5X3Rlc3RfcGFyYW1zKGxp bmspOworCQlpZiAocmV0KQorCQkJZ290byBlbmQ7CisJCXJldCA9IGRwX2xpbmtfcGFyc2VfbGlu a190cmFpbmluZ19wYXJhbXMobGluayk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVuZDsKKwl9CisK KwlpZiAobGluay0+cmVxdWVzdC50ZXN0X3JlcXVlc3RlZCA9PSBEUF9URVNUX0xJTktfVFJBSU5J TkcpIHsKKwkJcmV0ID0gZHBfbGlua19wYXJzZV9saW5rX3RyYWluaW5nX3BhcmFtcyhsaW5rKTsK KwkJaWYgKHJldCkKKwkJCWdvdG8gZW5kOworCX0KKworCWlmIChkcF9saW5rX2lzX3ZpZGVvX2F1 ZGlvX3Rlc3RfcmVxdWVzdGVkKAorCQkJbGluay0+cmVxdWVzdC50ZXN0X3JlcXVlc3RlZCkpIHsK KwkJcmV0ID0gZHBfbGlua19wYXJzZV92aWRlb19wYXR0ZXJuX3BhcmFtcyhsaW5rKTsKKwkJaWYg KHJldCkKKwkJCWdvdG8gZW5kOworCisJCXJldCA9IGRwX2xpbmtfcGFyc2VfYXVkaW9fcGF0dGVy bl9wYXJhbXMobGluayk7CisJfQorZW5kOgorCS8qKgorCSAqIFNlbmQgYSBEUF9URVNUX0FDSyBp ZiBhbGwgbGluayBwYXJhbWV0ZXJzIGFyZSB2YWxpZCwgb3RoZXJ3aXNlIHNlbmQKKwkgKiBhIERQ X1RFU1RfTkFLLgorCSAqLworCWlmIChyZXQpIHsKKwkJbGluay0+ZHBfbGluay50ZXN0X3Jlc3Bv bnNlID0gRFBfVEVTVF9OQUs7CisJfSBlbHNlIHsKKwkJaWYgKGxpbmstPnJlcXVlc3QudGVzdF9y ZXF1ZXN0ZWQgIT0gRFBfVEVTVF9MSU5LX0VESURfUkVBRCkKKwkJCWxpbmstPmRwX2xpbmsudGVz dF9yZXNwb25zZSA9IERQX1RFU1RfQUNLOworCQllbHNlCisJCQlsaW5rLT5kcF9saW5rLnRlc3Rf cmVzcG9uc2UgPQorCQkJCURQX1RFU1RfRURJRF9DSEVDS1NVTV9XUklURTsKKwl9CisKKwlyZXR1 cm4gcmV0OworfQorCisvKioKKyAqIGRwX2xpbmtfcGFyc2Vfc2lua19jb3VudCgpIC0gcGFyc2Vz IHRoZSBzaW5rIGNvdW50CisgKgorICogUGFyc2VzIHRoZSBEUENEIHRvIGNoZWNrIGlmIHRoZXJl IGlzIGFuIHVwZGF0ZSB0byB0aGUgc2luayBjb3VudAorICogKEJ5dGUgMHgyMDApLCBhbmQgd2hl dGhlciBhbGwgdGhlIHNpbmsgZGV2aWNlcyBjb25uZWN0ZWQgaGF2ZSBDb250ZW50CisgKiBQcm90 ZWN0aW9uIGVuYWJsZWQuCisgKi8KK3N0YXRpYyBpbnQgZHBfbGlua19wYXJzZV9zaW5rX2NvdW50 KHN0cnVjdCBkcF9saW5rICpkcF9saW5rKQoreworCXNzaXplX3QgcmxlbjsKKwlib29sIGNwX3Jl YWR5OworCisJc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGluayA9IGNvbnRhaW5lcl9vZihkcF9s aW5rLAorCQkJc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSwgZHBfbGluayk7CisKKwlybGVuID0gZHJt X2RwX2RwY2RfcmVhZGIobGluay0+YXV4LT5kcm1fYXV4LCBEUF9TSU5LX0NPVU5ULAorCQkJCSAm bGluay0+ZHBfbGluay5zaW5rX2NvdW50KTsKKwlpZiAocmxlbiA8IDApIHsKKwkJRFJNX0VSUk9S KCJzaW5rIGNvdW50IHJlYWQgZmFpbGVkLiBybGVuPSV6ZFxuIiwgcmxlbik7CisJCXJldHVybiBy bGVuOworCX0KKworCWNwX3JlYWR5ID0gbGluay0+ZHBfbGluay5zaW5rX2NvdW50ICYgRFBfU0lO S19DUF9SRUFEWTsKKworCWxpbmstPmRwX2xpbmsuc2lua19jb3VudCA9CisJCURQX0dFVF9TSU5L X0NPVU5UKGxpbmstPmRwX2xpbmsuc2lua19jb3VudCk7CisKKwlEUk1fREVCVUdfRFAoInNpbmtf Y291bnQgPSAweCV4LCBjcF9yZWFkeSA9IDB4JXhcbiIsCisJCWxpbmstPmRwX2xpbmsuc2lua19j b3VudCwgY3BfcmVhZHkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkcF9saW5rX3Bh cnNlX3Npbmtfc3RhdHVzX2ZpZWxkKHN0cnVjdCBkcF9saW5rX3ByaXZhdGUgKmxpbmspCit7CisJ aW50IGxlbiA9IDA7CisKKwlsaW5rLT5wcmV2X3NpbmtfY291bnQgPSBsaW5rLT5kcF9saW5rLnNp bmtfY291bnQ7CisJZHBfbGlua19wYXJzZV9zaW5rX2NvdW50KCZsaW5rLT5kcF9saW5rKTsKKwor CWxlbiA9IGRybV9kcF9kcGNkX3JlYWRfbGlua19zdGF0dXMobGluay0+YXV4LT5kcm1fYXV4LAor CQlsaW5rLT5saW5rX3N0YXR1cyk7CisJaWYgKGxlbiA8IERQX0xJTktfU1RBVFVTX1NJWkUpCisJ CURSTV9FUlJPUigiRFAgbGluayBzdGF0dXMgcmVhZCBmYWlsZWRcbiIpOworCWRwX2xpbmtfcGFy c2VfcmVxdWVzdChsaW5rKTsKK30KKworLyoqCisgKiBkcF9saW5rX3Byb2Nlc3NfbGlua190cmFp bmluZ19yZXF1ZXN0KCkgLSBwcm9jZXNzZXMgbmV3IHRyYWluaW5nIHJlcXVlc3RzCisgKiBAbGlu azogRGlzcGxheSBQb3J0IGxpbmsgZGF0YQorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBoYW5k bGUgbmV3IGxpbmsgdHJhaW5pbmcgcmVxdWVzdHMgdGhhdCBhcmUgaW5pdGlhdGVkIGJ5CisgKiB0 aGUgc2luay4gSW4gcGFydGljdWxhciwgaXQgd2lsbCB1cGRhdGUgdGhlIHJlcXVlc3RlZCBsYW5l IGNvdW50IGFuZCBsaW5rCisgKiBsaW5rIHJhdGUsIGFuZCB0aGVuIHRyaWdnZXIgdGhlIGxpbmsg cmV0cmFpbmluZyBwcm9jZWR1cmUuCisgKgorICogVGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDAg aWYgYSBsaW5rIHRyYWluaW5nIHJlcXVlc3QgaGFzIGJlZW4gcHJvY2Vzc2VkLAorICogb3RoZXJ3 aXNlIGl0IHdpbGwgcmV0dXJuIC1FSU5WQUwuCisgKi8KK3N0YXRpYyBpbnQgZHBfbGlua19wcm9j ZXNzX2xpbmtfdHJhaW5pbmdfcmVxdWVzdChzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5rKQor eworCWlmIChsaW5rLT5yZXF1ZXN0LnRlc3RfcmVxdWVzdGVkICE9IERQX1RFU1RfTElOS19UUkFJ TklORykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlEUk1fREVCVUdfRFAoIlRlc3Q6MHgleCBsaW5r IHJhdGUgPSAweCV4LCBsYW5lIGNvdW50ID0gMHgleFxuIiwKKwkJCURQX1RFU1RfTElOS19UUkFJ TklORywKKwkJCWxpbmstPnJlcXVlc3QudGVzdF9saW5rX3JhdGUsCisJCQlsaW5rLT5yZXF1ZXN0 LnRlc3RfbGFuZV9jb3VudCk7CisKKwlsaW5rLT5kcF9saW5rLmxpbmtfcGFyYW1zLm51bV9sYW5l cyA9IGxpbmstPnJlcXVlc3QudGVzdF9sYW5lX2NvdW50OworCWxpbmstPmRwX2xpbmsubGlua19w YXJhbXMucmF0ZSA9IGxpbmstPnJlcXVlc3QudGVzdF9saW5rX3JhdGU7CisKKwlyZXR1cm4gMDsK K30KKworYm9vbCBkcF9saW5rX3NlbmRfdGVzdF9yZXNwb25zZShzdHJ1Y3QgZHBfbGluayAqZHBf bGluaykKK3sKKwlzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5rID0gTlVMTDsKKwlpbnQgcmV0 ID0gMDsKKworCWlmICghZHBfbGluaykgeworCQlEUk1fRVJST1IoImludmFsaWQgaW5wdXRcbiIp OworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJbGluayA9IGNvbnRhaW5lcl9vZihkcF9saW5rLCBz dHJ1Y3QgZHBfbGlua19wcml2YXRlLCBkcF9saW5rKTsKKworCXJldCA9IGRybV9kcF9kcGNkX3dy aXRlYihsaW5rLT5hdXgtPmRybV9hdXgsIERQX1RFU1RfUkVTUE9OU0UsCisJCQlkcF9saW5rLT50 ZXN0X3Jlc3BvbnNlKTsKKwlyZXR1cm4gcmV0ID09IDE7Cit9CisKK2ludCBkcF9saW5rX3BzbV9j b25maWcoc3RydWN0IGRwX2xpbmsgKmRwX2xpbmssCisJCQkgICAgICBzdHJ1Y3QgZHJtX2RwX2xp bmsgKmxpbmtfaW5mbywgYm9vbCBlbmFibGUpCit7CisJc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAq bGluayA9IE5VTEw7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIWRwX2xpbmspIHsKKwkJRFJNX0VS Uk9SKCJpbnZhbGlkIHBhcmFtc1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWxpbmsg PSBjb250YWluZXJfb2YoZHBfbGluaywgc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSwgZHBfbGluayk7 CisKKwlpZiAoZW5hYmxlKQorCQlyZXQgPSBkcm1fZHBfbGlua19wb3dlcl9kb3duKGxpbmstPmF1 eC0+ZHJtX2F1eCwgbGlua19pbmZvKTsKKwllbHNlCisJCXJldCA9IGRybV9kcF9saW5rX3Bvd2Vy X3VwKGxpbmstPmF1eC0+ZHJtX2F1eCwgbGlua19pbmZvKTsKKworCWlmIChyZXQpCisJCURSTV9F UlJPUigiRmFpbGVkIHRvICVzIGxvdyBwb3dlciBtb2RlXG4iLCBlbmFibGUgPyAiZW50ZXIiIDog ImV4aXQiKTsKKwllbHNlCisJCWRwX2xpbmstPnBzbV9lbmFibGVkID0gZW5hYmxlOworCisJcmV0 dXJuIHJldDsKK30KKworYm9vbCBkcF9saW5rX3NlbmRfZWRpZF9jaGVja3N1bShzdHJ1Y3QgZHBf bGluayAqZHBfbGluaywgdTggY2hlY2tzdW0pCit7CisJc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAq bGluayA9IE5VTEw7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIWRwX2xpbmspIHsKKwkJRFJNX0VS Uk9SKCJpbnZhbGlkIGlucHV0XG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWxpbmsgPSBj b250YWluZXJfb2YoZHBfbGluaywgc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSwgZHBfbGluayk7CisK KwlyZXQgPSBkcm1fZHBfZHBjZF93cml0ZWIobGluay0+YXV4LT5kcm1fYXV4LCBEUF9URVNUX0VE SURfQ0hFQ0tTVU0sIGNoZWNrc3VtKTsKKwlyZXR1cm4gcmV0ID09IDE7Cit9CisKK3N0YXRpYyBp bnQgZHBfbGlua19wYXJzZV92eF9weChzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5rKQorewor CXU4IGRhdGE7CisJaW50IHJldCA9IDA7CisJdTMyIHYwLCBwMCwgdjEsIHAxLCB2MiwgcDIsIHYz LCBwMzsKKwlzc2l6ZV90IHJsZW47CisKKwlybGVuID0gZHJtX2RwX2RwY2RfcmVhZGIobGluay0+ YXV4LT5kcm1fYXV4LCBEUF9BREpVU1RfUkVRVUVTVF9MQU5FMF8xLCAmZGF0YSk7CisJaWYgKHJs ZW4gPCAwKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIHJlYWQgbGFuZXMuIHJsZW49JXpkXG4i LCBybGVuKTsKKwkJcmV0dXJuIHJsZW47CisJfQorCisJRFJNX0RFQlVHX0RQKCJsYW5lcyAwLzEg KEJ5dGUgMHgyMDYpOiAweCV4XG4iLCBkYXRhKTsKKworCXYwID0gZGF0YSAmIDB4MzsKKwlkYXRh ID0gZGF0YSA+PiAyOworCXAwID0gZGF0YSAmIDB4MzsKKwlkYXRhID0gZGF0YSA+PiAyOworCisJ djEgPSBkYXRhICYgMHgzOworCWRhdGEgPSBkYXRhID4+IDI7CisJcDEgPSBkYXRhICYgMHgzOwor CWRhdGEgPSBkYXRhID4+IDI7CisKKwlybGVuID0gZHJtX2RwX2RwY2RfcmVhZGIobGluay0+YXV4 LT5kcm1fYXV4LCBEUF9BREpVU1RfUkVRVUVTVF9MQU5FMl8zLCAmZGF0YSk7CisJaWYgKHJsZW4g PCAwKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIHJlYWQgbGFuZXMgMi8zLiBybGVuPSV6ZFxu Iiwgcmxlbik7CisJCXJldHVybiBybGVuOworCX0KKworCURSTV9ERUJVR19EUCgibGFuZXMgMi8z IChCeXRlIDB4MjA3KTogMHgleFxuIiwgZGF0YSk7CisKKwl2MiA9IGRhdGEgJiAweDM7CisJZGF0 YSA9IGRhdGEgPj4gMjsKKwlwMiA9IGRhdGEgJiAweDM7CisJZGF0YSA9IGRhdGEgPj4gMjsKKwor CXYzID0gZGF0YSAmIDB4MzsKKwlkYXRhID0gZGF0YSA+PiAyOworCXAzID0gZGF0YSAmIDB4MzsK KwlkYXRhID0gZGF0YSA+PiAyOworCisJRFJNX0RFQlVHX0RQKCJ2eDogMD0lZCwgMT0lZCwgMj0l ZCwgMz0lZFxuIiwgdjAsIHYxLCB2MiwgdjMpOworCURSTV9ERUJVR19EUCgicHg6IDA9JWQsIDE9 JWQsIDI9JWQsIDM9JWRcbiIsIHAwLCBwMSwgcDIsIHAzKTsKKworCS8qKgorCSAqIFVwZGF0ZSB0 aGUgdm9sdGFnZSBhbmQgcHJlLWVtcGhhc2lzIGxldmVscyBhcyBwZXIgRFBDRCByZXF1ZXN0CisJ ICogdmVjdG9yLgorCSAqLworCURSTV9ERUJVR19EUCgiQ3VycmVudDogdl9sZXZlbCA9IDB4JXgs IHBfbGV2ZWwgPSAweCV4XG4iLAorCQkJbGluay0+ZHBfbGluay5waHlfcGFyYW1zLnZfbGV2ZWws CisJCQlsaW5rLT5kcF9saW5rLnBoeV9wYXJhbXMucF9sZXZlbCk7CisJRFJNX0RFQlVHX0RQKCJS ZXF1ZXN0ZWQ6IHZfbGV2ZWwgPSAweCV4LCBwX2xldmVsID0gMHgleFxuIiwgdjAsIHAwKTsKKwls aW5rLT5kcF9saW5rLnBoeV9wYXJhbXMudl9sZXZlbCA9IHYwOworCWxpbmstPmRwX2xpbmsucGh5 X3BhcmFtcy5wX2xldmVsID0gcDA7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGRwX2xp bmtfcHJvY2Vzc19waHlfdGVzdF9wYXR0ZXJuX3JlcXVlc3QoKSAtIHByb2Nlc3MgbmV3IHBoeSBs aW5rIHJlcXVlc3RzCisgKiBAbGluazogRGlzcGxheSBQb3J0IERyaXZlciBkYXRhCisgKgorICog VGhpcyBmdW5jdGlvbiB3aWxsIGhhbmRsZSBuZXcgcGh5IGxpbmsgcGF0dGVybiByZXF1ZXN0cyB0 aGF0IGFyZSBpbml0aWF0ZWQKKyAqIGJ5IHRoZSBzaW5rLiBUaGUgZnVuY3Rpb24gd2lsbCByZXR1 cm4gMCBpZiBhIHBoeSBsaW5rIHBhdHRlcm4gaGFzIGJlZW4KKyAqIHByb2Nlc3NlZCwgb3RoZXJ3 aXNlIGl0IHdpbGwgcmV0dXJuIC1FSU5WQUwuCisgKi8KK3N0YXRpYyBpbnQgZHBfbGlua19wcm9j ZXNzX3BoeV90ZXN0X3BhdHRlcm5fcmVxdWVzdCgKKwkJc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAq bGluaykKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmICghKGxpbmstPnJlcXVlc3QudGVzdF9yZXF1 ZXN0ZWQgJiBEUF9URVNUX0xJTktfUEhZX1RFU1RfUEFUVEVSTikpIHsKKwkJRFJNX0RFQlVHX0RQ KCJubyBwaHkgdGVzdFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghaXNfbGlu a19yYXRlX3ZhbGlkKGxpbmstPnJlcXVlc3QudGVzdF9saW5rX3JhdGUpIHx8CisJCSFpc19sYW5l X2NvdW50X3ZhbGlkKGxpbmstPnJlcXVlc3QudGVzdF9sYW5lX2NvdW50KSkgeworCQlEUk1fRVJS T1IoIkludmFsaWQgcGFyYW1zOiBsaW5rIHJhdGUgPSAweCV4LCBsYW5lIGNvdW50ID0gMHgleFxu IiwKKwkJCWxpbmstPnJlcXVlc3QudGVzdF9saW5rX3JhdGUsIGxpbmstPnJlcXVlc3QudGVzdF9s YW5lX2NvdW50KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJRFJNX0RFQlVHX0RQKCJDdXJy ZW50OiByYXRlID0gMHgleCwgbGFuZSBjb3VudCA9IDB4JXhcbiIsCisJCQlsaW5rLT5kcF9saW5r LmxpbmtfcGFyYW1zLnJhdGUsCisJCQlsaW5rLT5kcF9saW5rLmxpbmtfcGFyYW1zLm51bV9sYW5l cyk7CisKKwlEUk1fREVCVUdfRFAoIlJlcXVlc3RlZDogcmF0ZSA9IDB4JXgsIGxhbmUgY291bnQg PSAweCV4XG4iLAorCQkJbGluay0+cmVxdWVzdC50ZXN0X2xpbmtfcmF0ZSwgbGluay0+cmVxdWVz dC50ZXN0X2xhbmVfY291bnQpOworCisJbGluay0+ZHBfbGluay5saW5rX3BhcmFtcy5udW1fbGFu ZXMgPSBsaW5rLT5yZXF1ZXN0LnRlc3RfbGFuZV9jb3VudDsKKwlsaW5rLT5kcF9saW5rLmxpbmtf cGFyYW1zLnJhdGUgPSBsaW5rLT5yZXF1ZXN0LnRlc3RfbGlua19yYXRlOworCisJcmV0ID0gZHBf bGlua19wYXJzZV92eF9weChsaW5rKTsKKwlpZiAocmV0KQorCQkgIERSTV9FUlJPUigicGFyc2Vf dnhfcHggZmFpbGVkLiByZXQ9JWRcbiIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0 aWMgdTggZ2V0X2xpbmtfc3RhdHVzKGNvbnN0IHU4IGxpbmtfc3RhdHVzW0RQX0xJTktfU1RBVFVT X1NJWkVdLCBpbnQgcikKK3sKKwlyZXR1cm4gbGlua19zdGF0dXNbciAtIERQX0xBTkUwXzFfU1RB VFVTXTsKK30KKworLyoqCisgKiBkcF9saW5rX3Byb2Nlc3NfbGlua19zdGF0dXNfdXBkYXRlKCkg LSBwcm9jZXNzZXMgbGluayBzdGF0dXMgdXBkYXRlcworICogQGxpbms6IERpc3BsYXkgUG9ydCBs aW5rIG1vZHVsZSBkYXRhCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGNoZWNrIGZvciBjaGFu Z2VzIGluIHRoZSBsaW5rIHN0YXR1cywgZS5nLiBjbG9jaworICogcmVjb3ZlcnkgZG9uZSBvbiBh bGwgbGFuZXMsIGFuZCB0cmlnZ2VyIGxpbmsgdHJhaW5pbmcgaWYgdGhlcmUgaXMgYQorICogZmFp bHVyZS9lcnJvciBvbiB0aGUgbGluay4KKyAqCisgKiBUaGUgZnVuY3Rpb24gd2lsbCByZXR1cm4g MCBpZiB0aGUgYSBsaW5rIHN0YXR1cyB1cGRhdGUgaGFzIGJlZW4gcHJvY2Vzc2VkLAorICogb3Ro ZXJ3aXNlIGl0IHdpbGwgcmV0dXJuIC1FSU5WQUwuCisgKi8KK3N0YXRpYyBpbnQgZHBfbGlua19w cm9jZXNzX2xpbmtfc3RhdHVzX3VwZGF0ZShzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5rKQor eworCWlmICghKGdldF9saW5rX3N0YXR1cyhsaW5rLT5saW5rX3N0YXR1cywgRFBfTEFORV9BTElH Tl9TVEFUVVNfVVBEQVRFRCkgJgorCQkJCQkJCURQX0xJTktfU1RBVFVTX1VQREFURUQpIHx8CisJ CQkoZHJtX2RwX2Nsb2NrX3JlY292ZXJ5X29rKGxpbmstPmxpbmtfc3RhdHVzLAorCQkJCQlsaW5r LT5kcF9saW5rLmxpbmtfcGFyYW1zLm51bV9sYW5lcykgJiYKKwkJCWRybV9kcF9jaGFubmVsX2Vx X29rKGxpbmstPmxpbmtfc3RhdHVzLAorCQkJCQlsaW5rLT5kcF9saW5rLmxpbmtfcGFyYW1zLm51 bV9sYW5lcykpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCURSTV9ERUJVR19EUCgiY2hhbm5lbF9l cV9kb25lID0gJWQsIGNsb2NrX3JlY292ZXJ5X2RvbmUgPSAlZFxuIiwKKwkJCWRybV9kcF9jbG9j a19yZWNvdmVyeV9vayhsaW5rLT5saW5rX3N0YXR1cywKKwkJCWxpbmstPmRwX2xpbmsubGlua19w YXJhbXMubnVtX2xhbmVzKSwKKwkJCWRybV9kcF9jbG9ja19yZWNvdmVyeV9vayhsaW5rLT5saW5r X3N0YXR1cywKKwkJCWxpbmstPmRwX2xpbmsubGlua19wYXJhbXMubnVtX2xhbmVzKSk7CisKKwly ZXR1cm4gMDsKK30KKworLyoqCisgKiBkcF9saW5rX3Byb2Nlc3NfZG93bnN0cmVhbV9wb3J0X3N0 YXR1c19jaGFuZ2UoKSAtIHByb2Nlc3MgcG9ydCBzdGF0dXMgY2hhbmdlcworICogQGxpbms6IERp c3BsYXkgUG9ydCBEcml2ZXIgZGF0YQorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBoYW5kbGUg ZG93bnN0cmVhbSBwb3J0IHVwZGF0ZXMgdGhhdCBhcmUgaW5pdGlhdGVkIGJ5CisgKiB0aGUgc2lu ay4gSWYgdGhlIGRvd25zdHJlYW0gcG9ydCBzdGF0dXMgaGFzIGNoYW5nZWQsIHRoZSBFRElEIGlz IHJlYWQgdmlhCisgKiBBVVguCisgKgorICogVGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDAgaWYg YSBkb3duc3RyZWFtIHBvcnQgdXBkYXRlIGhhcyBiZWVuCisgKiBwcm9jZXNzZWQsIG90aGVyd2lz ZSBpdCB3aWxsIHJldHVybiAtRUlOVkFMLgorICovCitzdGF0aWMgaW50IGRwX2xpbmtfcHJvY2Vz c19kc19wb3J0X3N0YXR1c19jaGFuZ2Uoc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGluaykKK3sK KwlpZiAoZ2V0X2xpbmtfc3RhdHVzKGxpbmstPmxpbmtfc3RhdHVzLCBEUF9MQU5FX0FMSUdOX1NU QVRVU19VUERBVEVEKSAmCisJCQkJCURQX0RPV05TVFJFQU1fUE9SVF9TVEFUVVNfQ0hBTkdFRCkK KwkJZ290byByZXNldDsKKworCWlmIChsaW5rLT5wcmV2X3NpbmtfY291bnQgPT0gbGluay0+ZHBf bGluay5zaW5rX2NvdW50KQorCQlyZXR1cm4gLUVJTlZBTDsKKworcmVzZXQ6CisJLyogcmVzZXQg cHJldl9zaW5rX2NvdW50ICovCisJbGluay0+cHJldl9zaW5rX2NvdW50ID0gbGluay0+ZHBfbGlu ay5zaW5rX2NvdW50OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBib29sIGRwX2xpbmtfaXNf dmlkZW9fcGF0dGVybl9yZXF1ZXN0ZWQoc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGluaykKK3sK KwlyZXR1cm4gKGxpbmstPnJlcXVlc3QudGVzdF9yZXF1ZXN0ZWQgJiBEUF9URVNUX0xJTktfVklE RU9fUEFUVEVSTikKKwkJJiYgIShsaW5rLT5yZXF1ZXN0LnRlc3RfcmVxdWVzdGVkICYKKwkJRFBf VEVTVF9MSU5LX0FVRElPX0RJU0FCTEVEX1ZJREVPKTsKK30KKworc3RhdGljIGJvb2wgZHBfbGlu a19pc19hdWRpb19wYXR0ZXJuX3JlcXVlc3RlZChzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5r KQoreworCXJldHVybiAobGluay0+cmVxdWVzdC50ZXN0X3JlcXVlc3RlZCAmIERQX1RFU1RfTElO S19BVURJT19QQVRURVJOKTsKK30KKworc3RhdGljIHZvaWQgZHBfbGlua19yZXNldF9kYXRhKHN0 cnVjdCBkcF9saW5rX3ByaXZhdGUgKmxpbmspCit7CisJbGluay0+cmVxdWVzdCA9IChjb25zdCBz dHJ1Y3QgZHBfbGlua19yZXF1ZXN0KXsgMCB9OworCWxpbmstPmRwX2xpbmsudGVzdF92aWRlbyA9 IChjb25zdCBzdHJ1Y3QgZHBfbGlua190ZXN0X3ZpZGVvKXsgMCB9OworCWxpbmstPmRwX2xpbmsu dGVzdF92aWRlby50ZXN0X2JpdF9kZXB0aCA9IERQX1RFU1RfQklUX0RFUFRIX1VOS05PV047CisJ bGluay0+ZHBfbGluay50ZXN0X2F1ZGlvID0gKGNvbnN0IHN0cnVjdCBkcF9saW5rX3Rlc3RfYXVk aW8peyAwIH07CisJbGluay0+ZHBfbGluay5waHlfcGFyYW1zLnBoeV90ZXN0X3BhdHRlcm5fc2Vs ID0gMDsKKwlsaW5rLT5kcF9saW5rLnNpbmtfcmVxdWVzdCA9IDA7CisJbGluay0+ZHBfbGluay50 ZXN0X3Jlc3BvbnNlID0gMDsKK30KKworLyoqCisgKiBkcF9saW5rX3Byb2Nlc3NfcmVxdWVzdCgp IC0gaGFuZGxlIEhQRCBJUlEgdHJhbnNpdGlvbiB0byBISUdICisgKiBAbGluazogcG9pbnRlciB0 byBsaW5rIG1vZHVsZSBkYXRhCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGhhbmRsZSB0aGUg SFBEIElSUSBzdGF0ZSB0cmFuc2l0aW9ucyBmcm9tIExPVyB0byBISUdICisgKiAoaW5jbHVkaW5n IGNhc2VzIHdoZW4gdGhlcmUgYXJlIGJhY2sgdG8gYmFjayBIUEQgSVJRIEhJR0gpIGluZGljYXRp bmcKKyAqIHRoZSBzdGFydCBvZiBhIG5ldyBsaW5rIHRyYWluaW5nIHJlcXVlc3Qgb3Igc2luayBz dGF0dXMgdXBkYXRlLgorICovCitpbnQgZHBfbGlua19wcm9jZXNzX3JlcXVlc3Qoc3RydWN0IGRw X2xpbmsgKmRwX2xpbmspCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGRwX2xpbmtfcHJpdmF0 ZSAqbGluazsKKworCWlmICghZHBfbGluaykgeworCQlEUk1fRVJST1IoImludmFsaWQgaW5wdXRc biIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlsaW5rID0gY29udGFpbmVyX29mKGRwX2xp bmssIHN0cnVjdCBkcF9saW5rX3ByaXZhdGUsIGRwX2xpbmspOworCisJZHBfbGlua19yZXNldF9k YXRhKGxpbmspOworCisJZHBfbGlua19wYXJzZV9zaW5rX3N0YXR1c19maWVsZChsaW5rKTsKKwor CWlmIChsaW5rLT5yZXF1ZXN0LnRlc3RfcmVxdWVzdGVkID09IERQX1RFU1RfTElOS19FRElEX1JF QUQpIHsKKwkJZHBfbGluay0+c2lua19yZXF1ZXN0IHw9IERQX1RFU1RfTElOS19FRElEX1JFQUQ7 CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gZHBfbGlua19wcm9jZXNzX2RzX3BvcnRfc3Rh dHVzX2NoYW5nZShsaW5rKTsKKwlpZiAoIXJldCkgeworCQlkcF9saW5rLT5zaW5rX3JlcXVlc3Qg fD0gRFNfUE9SVF9TVEFUVVNfQ0hBTkdFRDsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBk cF9saW5rX3Byb2Nlc3NfbGlua190cmFpbmluZ19yZXF1ZXN0KGxpbmspOworCWlmICghcmV0KSB7 CisJCWRwX2xpbmstPnNpbmtfcmVxdWVzdCB8PSBEUF9URVNUX0xJTktfVFJBSU5JTkc7CisJCXJl dHVybiByZXQ7CisJfQorCisJcmV0ID0gZHBfbGlua19wcm9jZXNzX3BoeV90ZXN0X3BhdHRlcm5f cmVxdWVzdChsaW5rKTsKKwlpZiAoIXJldCkgeworCQlkcF9saW5rLT5zaW5rX3JlcXVlc3QgfD0g RFBfVEVTVF9MSU5LX1BIWV9URVNUX1BBVFRFUk47CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0 ID0gZHBfbGlua19wcm9jZXNzX2xpbmtfc3RhdHVzX3VwZGF0ZShsaW5rKTsKKwlpZiAoIXJldCkg eworCQlkcF9saW5rLT5zaW5rX3JlcXVlc3QgfD0gRFBfTElOS19TVEFUVVNfVVBEQVRFRDsKKwkJ cmV0dXJuIHJldDsKKwl9CisKKwlpZiAoZHBfbGlua19pc192aWRlb19wYXR0ZXJuX3JlcXVlc3Rl ZChsaW5rKSkgeworCQlkcF9saW5rLT5zaW5rX3JlcXVlc3QgfD0gRFBfVEVTVF9MSU5LX1ZJREVP X1BBVFRFUk47CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChkcF9saW5rX2lzX2F1ZGlv X3BhdHRlcm5fcmVxdWVzdGVkKGxpbmspKSB7CisJCWRwX2xpbmstPnNpbmtfcmVxdWVzdCB8PSBE UF9URVNUX0xJTktfQVVESU9fUEFUVEVSTjsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0 dXJuIHJldDsKK30KKworaW50IGRwX2xpbmtfZ2V0X2NvbG9yaW1ldHJ5X2NvbmZpZyhzdHJ1Y3Qg ZHBfbGluayAqZHBfbGluaykKK3sKKwl1MzIgY2M7CisJc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAq bGluazsKKworCWlmICghZHBfbGluaykgeworCQlEUk1fRVJST1IoImludmFsaWQgaW5wdXRcbiIp OworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlsaW5rID0gY29udGFpbmVyX29mKGRwX2xpbmss IHN0cnVjdCBkcF9saW5rX3ByaXZhdGUsIGRwX2xpbmspOworCisJLyoKKwkgKiBVbmxlc3MgYSB2 aWRlbyBwYXR0ZXJuIENUUyB0ZXN0IGlzIG9uZ29pbmcsIHVzZSBSR0JfVkVTQQorCSAqIE9ubHkg UkdCX1ZFU0EgYW5kIFJHQl9DRUEgc3VwcG9ydGVkIGZvciBub3cKKwkgKi8KKwlpZiAoZHBfbGlu a19pc192aWRlb19wYXR0ZXJuX3JlcXVlc3RlZChsaW5rKSkKKwkJY2MgPSBsaW5rLT5kcF9saW5r LnRlc3RfdmlkZW8udGVzdF9keW5fcmFuZ2U7CisJZWxzZQorCQljYyA9IERQX1RFU1RfRFlOQU1J Q19SQU5HRV9WRVNBOworCisJcmV0dXJuIGNjOworfQorCitpbnQgZHBfbGlua19hZGp1c3RfbGV2 ZWxzKHN0cnVjdCBkcF9saW5rICpkcF9saW5rLCB1OCAqbGlua19zdGF0dXMpCit7CisJaW50IGk7 CisJaW50IG1heCA9IDA7CisJdTggZGF0YTsKKwlzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5r OworCisJaWYgKCFkcF9saW5rKSB7CisJCURSTV9FUlJPUigiaW52YWxpZCBpbnB1dFxuIik7CisJ CXJldHVybiAtRUlOVkFMOworCX0KKworCWxpbmsgPSBjb250YWluZXJfb2YoZHBfbGluaywgc3Ry dWN0IGRwX2xpbmtfcHJpdmF0ZSwgZHBfbGluayk7CisKKwkvKiB1c2UgdGhlIG1heCBsZXZlbCBh Y3Jvc3MgbGFuZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZHBfbGluay0+bGlua19wYXJhbXMubnVt X2xhbmVzOyBpKyspIHsKKwkJZGF0YSA9IGRybV9kcF9nZXRfYWRqdXN0X3JlcXVlc3Rfdm9sdGFn ZShsaW5rX3N0YXR1cywgaSk7CisJCURSTV9ERUJVR19EUCgibGFuZT0lZCByZXFfdm9sdGFnZV9z d2luZz0lZFxuIiwgaSwgZGF0YSk7CisJCWlmIChtYXggPCBkYXRhKQorCQkJbWF4ID0gZGF0YTsK Kwl9CisKKwlkcF9saW5rLT5waHlfcGFyYW1zLnZfbGV2ZWwgPSBtYXggPj4gRFBfVFJBSU5fVk9M VEFHRV9TV0lOR19TSElGVDsKKworCS8qIHVzZSB0aGUgbWF4IGxldmVsIGFjcm9zcyBsYW5lcyAq LworCW1heCA9IDA7CisJZm9yIChpID0gMDsgaSA8IGRwX2xpbmstPmxpbmtfcGFyYW1zLm51bV9s YW5lczsgaSsrKSB7CisJCWRhdGEgPSBkcm1fZHBfZ2V0X2FkanVzdF9yZXF1ZXN0X3ByZV9lbXBo YXNpcyhsaW5rX3N0YXR1cywgaSk7CisJCURSTV9ERUJVR19EUCgibGFuZT0lZCByZXFfcHJlX2Vt cGhhc2lzPSVkXG4iLCBpLCBkYXRhKTsKKwkJaWYgKG1heCA8IGRhdGEpCisJCQltYXggPSBkYXRh OworCX0KKworCWRwX2xpbmstPnBoeV9wYXJhbXMucF9sZXZlbCA9IG1heCA+PiBEUF9UUkFJTl9Q UkVfRU1QSEFTSVNfU0hJRlQ7CisKKwkvKioKKwkgKiBBZGp1c3QgdGhlIHZvbHRhZ2Ugc3dpbmcg YW5kIHByZS1lbXBoYXNpcyBsZXZlbCBjb21iaW5hdGlvbiB0byB3aXRoaW4KKwkgKiB0aGUgYWxs b3dhYmxlIHJhbmdlLgorCSAqLworCWlmIChkcF9saW5rLT5waHlfcGFyYW1zLnZfbGV2ZWwgPiBE UF9UUkFJTl9WT0xUQUdFX1NXSU5HX01BWCkgeworCQlEUk1fREVCVUdfRFAoIlJlcXVlc3RlZCB2 U3dpbmdMZXZlbD0lZCwgY2hhbmdlIHRvICVkXG4iLAorCQkJZHBfbGluay0+cGh5X3BhcmFtcy52 X2xldmVsLCBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX01BWCk7CisJCWRwX2xpbmstPnBoeV9wYXJh bXMudl9sZXZlbCA9IERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTUFYOworCX0KKworCWlmIChkcF9s aW5rLT5waHlfcGFyYW1zLnBfbGV2ZWwgPiBEUF9UUkFJTl9QUkVfRU1QSEFTSVNfTUFYKSB7CisJ CURSTV9ERUJVR19EUCgiUmVxdWVzdGVkIHByZUVtcGhhc2lzTGV2ZWw9JWQsIGNoYW5nZSB0byAl ZFxuIiwKKwkJCWRwX2xpbmstPnBoeV9wYXJhbXMucF9sZXZlbCwgRFBfVFJBSU5fUFJFX0VNUEhB U0lTX01BWCk7CisJCWRwX2xpbmstPnBoeV9wYXJhbXMucF9sZXZlbCA9IERQX1RSQUlOX1BSRV9F TVBIQVNJU19NQVg7CisJfQorCisJaWYgKChkcF9saW5rLT5waHlfcGFyYW1zLnBfbGV2ZWwgPiBE UF9UUkFJTl9QUkVfRU1QSEFTSVNfTFZMXzEpCisJCSYmIChkcF9saW5rLT5waHlfcGFyYW1zLnZf bGV2ZWwgPT0gRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MVkxfMikpIHsKKwkJRFJNX0RFQlVHX0RQ KCJSZXF1ZXN0ZWQgcHJlRW1waGFzaXNMZXZlbD0lZCwgY2hhbmdlIHRvICVkXG4iLAorCQkJZHBf bGluay0+cGh5X3BhcmFtcy5wX2xldmVsLAorCQkJRFBfVFJBSU5fUFJFX0VNUEhBU0lTX0xWTF8x KTsKKwkJZHBfbGluay0+cGh5X3BhcmFtcy5wX2xldmVsID0gRFBfVFJBSU5fUFJFX0VNUEhBU0lT X0xWTF8xOworCX0KKworCURSTV9ERUJVR19EUCgiYWRqdXN0ZWQ6IHZfbGV2ZWw9JWQsIHBfbGV2 ZWw9JWRcbiIsCisJCWRwX2xpbmstPnBoeV9wYXJhbXMudl9sZXZlbCwgZHBfbGluay0+cGh5X3Bh cmFtcy5wX2xldmVsKTsKKworCXJldHVybiAwOworfQorCit1MzIgZHBfbGlua19nZXRfdGVzdF9i aXRzX2RlcHRoKHN0cnVjdCBkcF9saW5rICpkcF9saW5rLCB1MzIgYnBwKQoreworCXUzMiB0YmQ7 CisKKwkvKgorCSAqIEZldyBzaW1wbGlzdGljIHJ1bGVzIGFuZCBhc3N1bXB0aW9ucyBtYWRlIGhl cmU6CisJICogICAgMS4gVGVzdCBiaXQgZGVwdGggaXMgYml0IGRlcHRoIHBlciBjb2xvciBjb21w b25lbnQKKwkgKiAgICAyLiBBc3N1bWUgMyBjb2xvciBjb21wb25lbnRzCisJICovCisJc3dpdGNo IChicHApIHsKKwljYXNlIDE4OgorCQl0YmQgPSBEUF9URVNUX0JJVF9ERVBUSF82OworCQlicmVh azsKKwljYXNlIDI0OgorCQl0YmQgPSBEUF9URVNUX0JJVF9ERVBUSF84OworCQlicmVhazsKKwlj YXNlIDMwOgorCQl0YmQgPSBEUF9URVNUX0JJVF9ERVBUSF8xMDsKKwkJYnJlYWs7CisJZGVmYXVs dDoKKwkJdGJkID0gRFBfVEVTVF9CSVRfREVQVEhfVU5LTk9XTjsKKwkJYnJlYWs7CisJfQorCisJ aWYgKHRiZCAhPSBEUF9URVNUX0JJVF9ERVBUSF9VTktOT1dOKQorCQl0YmQgPSAodGJkID4+IERQ X1RFU1RfQklUX0RFUFRIX1NISUZUKTsKKworCXJldHVybiB0YmQ7Cit9CisKK3N0cnVjdCBkcF9s aW5rICpkcF9saW5rX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkcF9hdXggKmF1eCkK K3sKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBkcF9saW5rX3ByaXZhdGUgKmxpbms7CisJc3RydWN0 IGRwX2xpbmsgKmRwX2xpbms7CisKKwlpZiAoIWRldiB8fCAhYXV4KSB7CisJCURSTV9FUlJPUigi aW52YWxpZCBpbnB1dFxuIik7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBlcnJvcjsKKwl9CisK KwlsaW5rID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpsaW5rKSwgR0ZQX0tFUk5FTCk7CisJ aWYgKCFsaW5rKSB7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlsaW5r LT5kZXYgICA9IGRldjsKKwlsaW5rLT5hdXggICA9IGF1eDsKKworCWRwX2xpbmsgPSAmbGluay0+ ZHBfbGluazsKKworCXJldHVybiBkcF9saW5rOworZXJyb3I6CisJcmV0dXJuIEVSUl9QVFIocmMp OworfQorCit2b2lkIGRwX2xpbmtfcHV0KHN0cnVjdCBkcF9saW5rICpkcF9saW5rKQoreworCXN0 cnVjdCBkcF9saW5rX3ByaXZhdGUgKmxpbms7CisKKwlpZiAoIWRwX2xpbmspCisJCXJldHVybjsK KworCWxpbmsgPSBjb250YWluZXJfb2YoZHBfbGluaywgc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSwg ZHBfbGluayk7CisKKwlkZXZtX2tmcmVlKGxpbmstPmRldiwgbGluayk7Cit9CmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2xpbmsuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20v ZHAvZHBfbGluay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNzkwNGIK LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2xpbmsuaApAQCAt MCwwICsxLDEzMiBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAq LworLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMi0yMDE5LCBUaGUgTGludXggRm91bmRhdGlvbi4g QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworCisjaWZuZGVmIF9EUF9MSU5LX0hfCisjZGVmaW5l IF9EUF9MSU5LX0hfCisKKyNpbmNsdWRlICJkcF9hdXguaCIKKworI2RlZmluZSBEU19QT1JUX1NU QVRVU19DSEFOR0VEIDB4MjAwCisjZGVmaW5lIERQX1RFU1RfQklUX0RFUFRIX1VOS05PV04gMHhG RkZGRkZGRgorCitlbnVtIGRwX2xpbmtfdm9sdGFnZV9sZXZlbCB7CisJRFBfVFJBSU5fVk9MVEFH RV9TV0lOR19MVkxfMAk9IDAsCisJRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MVkxfMQk9IDEsCisJ RFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MVkxfMgk9IDIsCisJRFBfVFJBSU5fVk9MVEFHRV9TV0lO R19NQVgJPSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xWTF8yLAorfTsKKworZW51bSBkcF9saW5r X3ByZWVtYXBoYXNpc19sZXZlbCB7CisJRFBfVFJBSU5fUFJFX0VNUEhBU0lTX0xWTF8wCT0gMCwK KwlEUF9UUkFJTl9QUkVfRU1QSEFTSVNfTFZMXzEJPSAxLAorCURQX1RSQUlOX1BSRV9FTVBIQVNJ U19MVkxfMgk9IDIsCisJRFBfVFJBSU5fUFJFX0VNUEhBU0lTX01BWAk9IERQX1RSQUlOX1BSRV9F TVBIQVNJU19MVkxfMiwKK307CisKK3N0cnVjdCBkcF9saW5rX3Rlc3RfdmlkZW8geworCXUzMiB0 ZXN0X3ZpZGVvX3BhdHRlcm47CisJdTMyIHRlc3RfYml0X2RlcHRoOworCXUzMiB0ZXN0X2R5bl9y YW5nZTsKKwl1MzIgdGVzdF9oX3RvdGFsOworCXUzMiB0ZXN0X3ZfdG90YWw7CisJdTMyIHRlc3Rf aF9zdGFydDsKKwl1MzIgdGVzdF92X3N0YXJ0OworCXUzMiB0ZXN0X2hzeW5jX3BvbDsKKwl1MzIg dGVzdF9oc3luY193aWR0aDsKKwl1MzIgdGVzdF92c3luY19wb2w7CisJdTMyIHRlc3RfdnN5bmNf d2lkdGg7CisJdTMyIHRlc3RfaF93aWR0aDsKKwl1MzIgdGVzdF92X2hlaWdodDsKKwl1MzIgdGVz dF9ycl9kOworCXUzMiB0ZXN0X3JyX247Cit9OworCitzdHJ1Y3QgZHBfbGlua190ZXN0X2F1ZGlv IHsKKwl1MzIgdGVzdF9hdWRpb19zYW1wbGluZ19yYXRlOworCXUzMiB0ZXN0X2F1ZGlvX2NoYW5u ZWxfY291bnQ7CisJdTMyIHRlc3RfYXVkaW9fcGF0dGVybl90eXBlOworCXUzMiB0ZXN0X2F1ZGlv X3BlcmlvZF9jaF8xOworCXUzMiB0ZXN0X2F1ZGlvX3BlcmlvZF9jaF8yOworCXUzMiB0ZXN0X2F1 ZGlvX3BlcmlvZF9jaF8zOworCXUzMiB0ZXN0X2F1ZGlvX3BlcmlvZF9jaF80OworCXUzMiB0ZXN0 X2F1ZGlvX3BlcmlvZF9jaF81OworCXUzMiB0ZXN0X2F1ZGlvX3BlcmlvZF9jaF82OworCXUzMiB0 ZXN0X2F1ZGlvX3BlcmlvZF9jaF83OworCXUzMiB0ZXN0X2F1ZGlvX3BlcmlvZF9jaF84OworfTsK Kworc3RydWN0IGRwX2xpbmtfcGh5X3BhcmFtcyB7CisJdTMyIHBoeV90ZXN0X3BhdHRlcm5fc2Vs OworCXU4IHZfbGV2ZWw7CisJdTggcF9sZXZlbDsKK307CisKK3N0cnVjdCBkcF9saW5rIHsKKwl1 MzIgc2lua19yZXF1ZXN0OworCXUzMiB0ZXN0X3Jlc3BvbnNlOworCWJvb2wgcHNtX2VuYWJsZWQ7 CisKKwl1OCBzaW5rX2NvdW50OworCXN0cnVjdCBkcF9saW5rX3Rlc3RfdmlkZW8gdGVzdF92aWRl bzsKKwlzdHJ1Y3QgZHBfbGlua190ZXN0X2F1ZGlvIHRlc3RfYXVkaW87CisJc3RydWN0IGRwX2xp bmtfcGh5X3BhcmFtcyBwaHlfcGFyYW1zOworCXN0cnVjdCBkcm1fZHBfbGluayBsaW5rX3BhcmFt czsKK307CisKKy8qKgorICogbWRzc19kcF90ZXN0X2JpdF9kZXB0aF90b19icHAoKSAtIGNvbnZl cnQgdGVzdCBiaXQgZGVwdGggdG8gYnBwCisgKiBAdGJkOiB0ZXN0IGJpdCBkZXB0aAorICoKKyAq IFJldHVybnMgdGhlIGJpdHMgcGVyIHBpeGVsIChicHApIHRvIGJlIHVzZWQgY29ycmVzcG9uZGlu ZyB0byB0aGUKKyAqIGdpdCBiaXQgZGVwdGggdmFsdWUuIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0 aGF0IGJpdCBkZXB0aCBoYXMKKyAqIGFscmVhZHkgYmVlbiB2YWxpZGF0ZWQuCisgKi8KK3N0YXRp YyBpbmxpbmUgdTMyIGRwX2xpbmtfYml0X2RlcHRoX3RvX2JwcCh1MzIgdGJkKQoreworCS8qCisJ ICogRmV3IHNpbXBsaXN0aWMgcnVsZXMgYW5kIGFzc3VtcHRpb25zIG1hZGUgaGVyZToKKwkgKiAg ICAxLiBCaXQgZGVwdGggaXMgcGVyIGNvbG9yIGNvbXBvbmVudAorCSAqICAgIDIuIElmIGJpdCBk ZXB0aCBpcyB1bmtub3duIHJldHVybiAwCisJICogICAgMy4gQXNzdW1lIDMgY29sb3IgY29tcG9u ZW50cworCSAqLworCXN3aXRjaCAodGJkKSB7CisJY2FzZSBEUF9URVNUX0JJVF9ERVBUSF82Ogor CQlyZXR1cm4gMTg7CisJY2FzZSBEUF9URVNUX0JJVF9ERVBUSF84OgorCQlyZXR1cm4gMjQ7CisJ Y2FzZSBEUF9URVNUX0JJVF9ERVBUSF8xMDoKKwkJcmV0dXJuIDMwOworCWNhc2UgRFBfVEVTVF9C SVRfREVQVEhfVU5LTk9XTjoKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKK3UzMiBk cF9saW5rX2dldF90ZXN0X2JpdHNfZGVwdGgoc3RydWN0IGRwX2xpbmsgKmRwX2xpbmssIHUzMiBi cHApOworaW50IGRwX2xpbmtfcHJvY2Vzc19yZXF1ZXN0KHN0cnVjdCBkcF9saW5rICpkcF9saW5r KTsKK2ludCBkcF9saW5rX2dldF9jb2xvcmltZXRyeV9jb25maWcoc3RydWN0IGRwX2xpbmsgKmRw X2xpbmspOworaW50IGRwX2xpbmtfYWRqdXN0X2xldmVscyhzdHJ1Y3QgZHBfbGluayAqZHBfbGlu aywgdTggKmxpbmtfc3RhdHVzKTsKK2Jvb2wgZHBfbGlua19zZW5kX3Rlc3RfcmVzcG9uc2Uoc3Ry dWN0IGRwX2xpbmsgKmRwX2xpbmspOworaW50IGRwX2xpbmtfcHNtX2NvbmZpZyhzdHJ1Y3QgZHBf bGluayAqZHBfbGluaywKKwkJc3RydWN0IGRybV9kcF9saW5rICpsaW5rX2luZm8sIGJvb2wgZW5h YmxlKTsKK2Jvb2wgZHBfbGlua19zZW5kX2VkaWRfY2hlY2tzdW0oc3RydWN0IGRwX2xpbmsgKmRw X2xpbmssIHU4IGNoZWNrc3VtKTsKKworLyoqCisgKiBkcF9saW5rX2dldCgpIC0gZ2V0IHRoZSBm dW5jdGlvbmFsaXRpZXMgb2YgZHAgdGVzdCBtb2R1bGUKKyAqCisgKgorICogcmV0dXJuOiBhIHBv aW50ZXIgdG8gZHBfbGluayBzdHJ1Y3QKKyAqLworc3RydWN0IGRwX2xpbmsgKmRwX2xpbmtfZ2V0 KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRwX2F1eCAqYXV4KTsKKworLyoqCisgKiBkcF9s aW5rX3B1dCgpIC0gcmVsZWFzZXMgdGhlIGRwIHRlc3QgbW9kdWxlJ3MgcmVzb3VyY2VzCisgKgor ICogQGRwX2xpbms6IGFuIGluc3RhbmNlIG9mIGRwX2xpbmsgbW9kdWxlCisgKgorICovCit2b2lk IGRwX2xpbmtfcHV0KHN0cnVjdCBkcF9saW5rICpkcF9saW5rKTsKKworI2VuZGlmIC8qIF9EUF9M SU5LX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3BhbmVsLmMg Yi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3BhbmVsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uZDdlMTY1ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9k cm0vbXNtL2RwL2RwX3BhbmVsLmMKQEAgLTAsMCArMSw1MDQgQEAKKy8vIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxOSwg VGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKworI2RlZmlu ZSBwcl9mbXQoZm10KQkiW2RybS1kcF0gJXM6ICIgZm10LCBfX2Z1bmNfXworCisjaW5jbHVkZSAi ZHBfcGFuZWwuaCIKKworI2luY2x1ZGUgPGRybS9kcm1fY29ubmVjdG9yLmg+CisjaW5jbHVkZSA8 ZHJtL2RybV9lZGlkLmg+CisKKyNkZWZpbmUgRFBfTUFYX0RTX1BPUlRfQ09VTlQgMQorCitzdHJ1 Y3QgZHBfcGFuZWxfcHJpdmF0ZSB7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBkcF9w YW5lbCBkcF9wYW5lbDsKKwlzdHJ1Y3QgZHBfYXV4ICphdXg7CisJc3RydWN0IGRwX2xpbmsgKmxp bms7CisJc3RydWN0IGRwX2NhdGFsb2dfcGFuZWwgKmNhdGFsb2c7CisJYm9vbCBwYW5lbF9vbjsK Kwlib29sIGF1eF9jZmdfdXBkYXRlX2RvbmU7Cit9OworCitzdGF0aWMgaW50IGRwX3BhbmVsX3Jl YWRfZHBjZChzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsKQoreworCWludCBybGVuLCByYyA9IDA7 CisJc3RydWN0IGRwX3BhbmVsX3ByaXZhdGUgKnBhbmVsOworCXN0cnVjdCBkcm1fZHBfbGluayAq bGlua19pbmZvOworCXU4ICpkcGNkLCBtYWpvciA9IDAsIG1pbm9yID0gMDsKKwl1MzIgZGZwX2Nv dW50ID0gMDsKKwl1bnNpZ25lZCBsb25nIGNhcHMgPSBEUF9MSU5LX0NBUF9FTkhBTkNFRF9GUkFN SU5HOworCisJZHBjZCA9IGRwX3BhbmVsLT5kcGNkOworCisJcGFuZWwgPSBjb250YWluZXJfb2Yo ZHBfcGFuZWwsIHN0cnVjdCBkcF9wYW5lbF9wcml2YXRlLCBkcF9wYW5lbCk7CisJbGlua19pbmZv ID0gJmRwX3BhbmVsLT5saW5rX2luZm87CisKKwlybGVuID0gZHJtX2RwX2RwY2RfcmVhZChwYW5l bC0+YXV4LT5kcm1fYXV4LCBEUF9EUENEX1JFViwKKwkJZHBjZCwgKERQX1JFQ0VJVkVSX0NBUF9T SVpFICsgMSkpOworCWlmIChybGVuIDwgKERQX1JFQ0VJVkVSX0NBUF9TSVpFICsgMSkpIHsKKwkJ RFJNX0VSUk9SKCJkcGNkIHJlYWQgZmFpbGVkLCBybGVuPSVkXG4iLCBybGVuKTsKKwkJcmV0dXJu IC1FSU5WQUw7CisJfQorCisJbGlua19pbmZvLT5yZXZpc2lvbiA9IGRwX3BhbmVsLT5kcGNkW0RQ X0RQQ0RfUkVWXTsKKworCW1ham9yID0gKGxpbmtfaW5mby0+cmV2aXNpb24gPj4gNCkgJiAweDBm OworCW1pbm9yID0gbGlua19pbmZvLT5yZXZpc2lvbiAmIDB4MGY7CisJRFJNX0RFQlVHX0RQKCJ2 ZXJzaW9uOiAlZC4lZFxuIiwgbWFqb3IsIG1pbm9yKTsKKworCWxpbmtfaW5mby0+cmF0ZSA9CisJ CWRybV9kcF9id19jb2RlX3RvX2xpbmtfcmF0ZShkcF9wYW5lbC0+ZHBjZFtEUF9NQVhfTElOS19S QVRFXSk7CisJRFJNX0RFQlVHX0RQKCJsaW5rX3JhdGU9JWRcbiIsIGxpbmtfaW5mby0+cmF0ZSk7 CisKKwlsaW5rX2luZm8tPm51bV9sYW5lcyA9IGRwX3BhbmVsLT5kcGNkW0RQX01BWF9MQU5FX0NP VU5UXSAmCisJCQkJRFBfTUFYX0xBTkVfQ09VTlRfTUFTSzsKKworCURSTV9ERUJVR19EUCgibGFu ZV9jb3VudD0lZFxuIiwgbGlua19pbmZvLT5udW1fbGFuZXMpOworCisJaWYgKGRybV9kcF9lbmhh bmNlZF9mcmFtZV9jYXAoZHBjZCkpCisJCWxpbmtfaW5mby0+Y2FwYWJpbGl0aWVzIHw9IGNhcHM7 CisKKwlkZnBfY291bnQgPSBkcGNkW0RQX0RPV05fU1RSRUFNX1BPUlRfQ09VTlRdICYKKwkJCQkJ CURQX0RPV05fU1RSRUFNX1BPUlRfQ09VTlQ7CisJaWYgKGRmcF9jb3VudCA+IERQX01BWF9EU19Q T1JUX0NPVU5UKQorCQlEUk1fRVJST1IoIkRTIHBvcnQgY291bnQgJWQgZ3JlYXRlciB0aGF0IG1h eCAoJWQpIHN1cHBvcnRlZFxuIiwKKwkJCWRmcF9jb3VudCwgRFBfTUFYX0RTX1BPUlRfQ09VTlQp OworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGRwX3BhbmVsX3JlYWRfZWRpZChzdHJ1 Y3QgZHBfcGFuZWwgKmRwX3BhbmVsLAorCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3Ip Cit7CisJaW50IHJldHJ5X2NudCA9IDA7CisJY29uc3QgaW50IG1heF9yZXRyeSA9IDEwOworCXN0 cnVjdCBkcF9wYW5lbF9wcml2YXRlICpwYW5lbDsKKworCXBhbmVsID0gY29udGFpbmVyX29mKGRw X3BhbmVsLCBzdHJ1Y3QgZHBfcGFuZWxfcHJpdmF0ZSwgZHBfcGFuZWwpOworCisJZG8geworCQlr ZnJlZShkcF9wYW5lbC0+ZWRpZCk7CisJCWRwX3BhbmVsLT5lZGlkID0gZHJtX2dldF9lZGlkKGNv bm5lY3RvciwKKwkJCQkJICAgICAgJnBhbmVsLT5hdXgtPmRybV9hdXgtPmRkYyk7CisJCWlmICgh ZHBfcGFuZWwtPmVkaWQpIHsKKwkJCURSTV9FUlJPUigiRURJRCByZWFkIGZhaWxlZFxuIik7CisJ CQlyZXRyeV9jbnQrKzsKKwkJCWRwX2F1eF9yZWNvbmZpZyhwYW5lbC0+YXV4KTsKKwkJCXBhbmVs LT5hdXhfY2ZnX3VwZGF0ZV9kb25lID0gdHJ1ZTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiAwOwor CQl9CisJfSB3aGlsZSAocmV0cnlfY250IDwgbWF4X3JldHJ5KTsKKworCXJldHVybiAtRUlOVkFM OworfQorCitzdGF0aWMgdTMyIGRwX3BhbmVsX2dldF9zdXBwb3J0ZWRfYnBwKHN0cnVjdCBkcF9w YW5lbCAqZHBfcGFuZWwsCisJCXUzMiBtb2RlX2VkaWRfYnBwLCB1MzIgbW9kZV9wY2xrX2toeikK K3sKKwlzdHJ1Y3QgZHJtX2RwX2xpbmsgKmxpbmtfaW5mbzsKKwljb25zdCB1MzIgbWF4X3N1cHBv cnRlZF9icHAgPSAzMCwgbWluX3N1cHBvcnRlZF9icHAgPSAxODsKKwl1MzIgYnBwID0gMCwgZGF0 YV9yYXRlX2toeiA9IDA7CisKKwlicHAgPSBtaW5fdCh1MzIsIG1vZGVfZWRpZF9icHAsIG1heF9z dXBwb3J0ZWRfYnBwKTsKKworCWxpbmtfaW5mbyA9ICZkcF9wYW5lbC0+bGlua19pbmZvOworCWRh dGFfcmF0ZV9raHogPSBsaW5rX2luZm8tPm51bV9sYW5lcyAqIGxpbmtfaW5mby0+cmF0ZSAqIDg7 CisKKwl3aGlsZSAoYnBwID4gbWluX3N1cHBvcnRlZF9icHApIHsKKwkJaWYgKG1vZGVfcGNsa19r aHogKiBicHAgPD0gZGF0YV9yYXRlX2toeikKKwkJCWJyZWFrOworCQlicHAgLT0gNjsKKwl9CisK KwlyZXR1cm4gYnBwOworfQorCitzdGF0aWMgdm9pZCBkcF9wYW5lbF9zZXRfdGVzdF9tb2RlKHN0 cnVjdCBkcF9wYW5lbF9wcml2YXRlICpwYW5lbCwKKwkJc3RydWN0IGRwX2Rpc3BsYXlfbW9kZSAq bW9kZSkKK3sKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZHJtX21vZGUgPSBOVUxMOworCXN0 cnVjdCBkcF9saW5rX3Rlc3RfdmlkZW8gKnRlc3RfaW5mbyA9IE5VTEw7CisKKwlpZiAoIXBhbmVs KSB7CisJCURSTV9FUlJPUigiaW52YWxpZCBwYXJhbXNcbiIpOworCQlyZXR1cm47CisJfQorCisJ ZHJtX21vZGUgPSAmbW9kZS0+ZHJtX21vZGU7CisJdGVzdF9pbmZvID0gJnBhbmVsLT5saW5rLT50 ZXN0X3ZpZGVvOworCisJZHJtX21vZGUtPmhkaXNwbGF5ID0gdGVzdF9pbmZvLT50ZXN0X2hfd2lk dGg7CisJZHJtX21vZGUtPmhzeW5jX3N0YXJ0ID0gZHJtX21vZGUtPmhkaXNwbGF5ICsgdGVzdF9p bmZvLT50ZXN0X2hfdG90YWwgLQorCQkJKHRlc3RfaW5mby0+dGVzdF9oX3N0YXJ0ICsgdGVzdF9p bmZvLT50ZXN0X2hfd2lkdGgpOworCWRybV9tb2RlLT5oc3luY19lbmQgPSBkcm1fbW9kZS0+aHN5 bmNfc3RhcnQgKyB0ZXN0X2luZm8tPnRlc3RfaHN5bmNfd2lkdGg7CisJZHJtX21vZGUtPmh0b3Rh bCA9IGRybV9tb2RlLT5oc3luY19lbmQgKyB0ZXN0X2luZm8tPnRlc3RfaF9zdGFydCAtCisJCQkJ CQl0ZXN0X2luZm8tPnRlc3RfaHN5bmNfd2lkdGg7CisKKwlkcm1fbW9kZS0+dmRpc3BsYXkgPSB0 ZXN0X2luZm8tPnRlc3Rfdl9oZWlnaHQ7CisJZHJtX21vZGUtPnZzeW5jX3N0YXJ0ID0gZHJtX21v ZGUtPnZkaXNwbGF5ICsgdGVzdF9pbmZvLT50ZXN0X3ZfdG90YWwgLQorCQkJKHRlc3RfaW5mby0+ dGVzdF92X3N0YXJ0ICsgdGVzdF9pbmZvLT50ZXN0X3ZfaGVpZ2h0KTsKKwlkcm1fbW9kZS0+dnN5 bmNfZW5kID0gZHJtX21vZGUtPnZzeW5jX3N0YXJ0ICsgdGVzdF9pbmZvLT50ZXN0X3ZzeW5jX3dp ZHRoOworCWRybV9tb2RlLT52dG90YWwgPSBkcm1fbW9kZS0+dnN5bmNfZW5kICsgdGVzdF9pbmZv LT50ZXN0X3Zfc3RhcnQgLQorCQkJCQkJdGVzdF9pbmZvLT50ZXN0X3ZzeW5jX3dpZHRoOworCisJ ZHJtX21vZGUtPnZyZWZyZXNoID0gdGVzdF9pbmZvLT50ZXN0X3JyX247CisJZHJtX21vZGUtPmNs b2NrID0gdGVzdF9pbmZvLT50ZXN0X2hfdG90YWwgKgorCQl0ZXN0X2luZm8tPnRlc3Rfdl90b3Rh bCAqIGRybV9tb2RlLT52cmVmcmVzaDsKKworCWRybV9tb2RlLT50eXBlID0gMHg0ODsKKwlkcm1f bW9kZV9zZXRfbmFtZShkcm1fbW9kZSk7CisKKwlpZiAodGVzdF9pbmZvLT50ZXN0X3JyX2QgPT0g MCkKKwkJZHJtX21vZGUtPmNsb2NrIC89IDEwMDA7CisJZWxzZQorCQlkcm1fbW9kZS0+Y2xvY2sg Lz0gMTAwMTsKKworCWlmICh0ZXN0X2luZm8tPnRlc3RfaF93aWR0aCA9PSA2NDApCisJCWRybV9t b2RlLT5jbG9jayA9IDI1MTcwOworfQorCitzdGF0aWMgaW50IGRwX3BhbmVsX3VwZGF0ZV9tb2Rl cyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCXN0cnVjdCBlZGlkICplZGlkKQor eworCWludCByYyA9IDA7CisKKwlpZiAoZWRpZCkgeworCQlyYyA9IGRybV9jb25uZWN0b3JfdXBk YXRlX2VkaWRfcHJvcGVydHkoY29ubmVjdG9yLCBlZGlkKTsKKwkJaWYgKHJjKSB7CisJCQlEUk1f RVJST1IoImZhaWxlZCB0byB1cGRhdGUgZWRpZCBwcm9wZXJ0eSAlZFxuIiwgcmMpOworCQkJcmV0 dXJuIHJjOworCQl9CisJCXJjID0gZHJtX2FkZF9lZGlkX21vZGVzKGNvbm5lY3RvciwgZWRpZCk7 CisJCURSTV9ERUJVR19EUCgiJXMgLSIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIHJjOworCX0KKwor CXJjID0gZHJtX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eShjb25uZWN0b3IsIE5VTEwp OworCWlmIChyYykKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gdXBkYXRlIGVkaWQgcHJvcGVydHkg JWRcbiIsIHJjKTsKKworCXJldHVybiByYzsKK30KKworaW50IGRwX3BhbmVsX3JlYWRfc2lua19j YXBzKHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwsCisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvcikKK3sKKwlpbnQgcmMgPSAwLCBid19jb2RlOworCXN0cnVjdCBkcF9wYW5lbF9wcml2 YXRlICpwYW5lbDsKKworCWlmICghZHBfcGFuZWwgfHwgIWNvbm5lY3RvcikgeworCQlEUk1fRVJS T1IoImludmFsaWQgaW5wdXRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwYW5lbCA9 IGNvbnRhaW5lcl9vZihkcF9wYW5lbCwgc3RydWN0IGRwX3BhbmVsX3ByaXZhdGUsIGRwX3BhbmVs KTsKKworCXJjID0gZHBfcGFuZWxfcmVhZF9kcGNkKGRwX3BhbmVsKTsKKwlid19jb2RlID0gZHJt X2RwX2xpbmtfcmF0ZV90b19id19jb2RlKGRwX3BhbmVsLT5saW5rX2luZm8ucmF0ZSk7CisJaWYg KHJjIHx8ICFpc19saW5rX3JhdGVfdmFsaWQoYndfY29kZSkgfHwKKwkJCSFpc19sYW5lX2NvdW50 X3ZhbGlkKGRwX3BhbmVsLT5saW5rX2luZm8ubnVtX2xhbmVzKSB8fAorCQkJKGJ3X2NvZGUgPiBk cF9wYW5lbC0+bWF4X2J3X2NvZGUpKSB7CisJCURSTV9FUlJPUigicmVhZCBkcGNkIGZhaWxlZCAl ZFxuIiwgcmMpOworCQlyZXR1cm4gcmM7CisJfQorCisJcmMgPSBkcF9wYW5lbF9yZWFkX2VkaWQo ZHBfcGFuZWwsIGNvbm5lY3Rvcik7CisJaWYgKHJjKSB7CisJCURSTV9FUlJPUigicGFuZWwgZWRp ZCByZWFkIGZhaWxlZCwgc2V0IGZhaWxzYWZlIG1vZGUucmM9JWRcbiIsIHJjKTsKKwkJcmV0dXJu IHJjOworCX0KKworCWlmIChwYW5lbC0+YXV4X2NmZ191cGRhdGVfZG9uZSkgeworCQlEUk1fREVC VUdfRFAoInJlYWQgRFBDRCB3aXRoIHVwZGF0ZWQgQVVYIGNvbmZpZ1xuIik7CisJCXJjID0gZHBf cGFuZWxfcmVhZF9kcGNkKGRwX3BhbmVsKTsKKwkJYndfY29kZSA9IGRybV9kcF9saW5rX3JhdGVf dG9fYndfY29kZShkcF9wYW5lbC0+bGlua19pbmZvLnJhdGUpOworCQlpZiAocmMgfHwgIWlzX2xp bmtfcmF0ZV92YWxpZChid19jb2RlKSB8fAorCQkJCSFpc19sYW5lX2NvdW50X3ZhbGlkKGRwX3Bh bmVsLT5saW5rX2luZm8ubnVtX2xhbmVzKSB8fAorCQkJCShid19jb2RlID4gZHBfcGFuZWwtPm1h eF9id19jb2RlKSkgeworCQkJRFJNX0VSUk9SKCJyZWFkIGRwY2QgZmFpbGVkICVkXG4iLCByYyk7 CisJCQlyZXR1cm4gcmM7CisJCX0KKwkJcGFuZWwtPmF1eF9jZmdfdXBkYXRlX2RvbmUgPSBmYWxz ZTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordTMyIGRwX3BhbmVsX2dldF9tb2RlX2JwcChzdHJ1 Y3QgZHBfcGFuZWwgKmRwX3BhbmVsLAorCQl1MzIgbW9kZV9lZGlkX2JwcCwgdTMyIG1vZGVfcGNs a19raHopCit7CisJc3RydWN0IGRwX3BhbmVsX3ByaXZhdGUgKnBhbmVsOworCXUzMiBicHAgPSBt b2RlX2VkaWRfYnBwOworCisJaWYgKCFkcF9wYW5lbCB8fCAhbW9kZV9lZGlkX2JwcCB8fCAhbW9k ZV9wY2xrX2toeikgeworCQlEUk1fRVJST1IoImludmFsaWQgaW5wdXRcbiIpOworCQlyZXR1cm4g MDsKKwl9CisKKwlwYW5lbCA9IGNvbnRhaW5lcl9vZihkcF9wYW5lbCwgc3RydWN0IGRwX3BhbmVs X3ByaXZhdGUsIGRwX3BhbmVsKTsKKworCWlmIChkcF9wYW5lbC0+dmlkZW9fdGVzdCkKKwkJYnBw ID0gZHBfbGlua19iaXRfZGVwdGhfdG9fYnBwKAorCQkJCXBhbmVsLT5saW5rLT50ZXN0X3ZpZGVv LnRlc3RfYml0X2RlcHRoKTsKKwllbHNlCisJCWJwcCA9IGRwX3BhbmVsX2dldF9zdXBwb3J0ZWRf YnBwKGRwX3BhbmVsLCBtb2RlX2VkaWRfYnBwLAorCQkJCW1vZGVfcGNsa19raHopOworCisJcmV0 dXJuIGJwcDsKK30KKworaW50IGRwX3BhbmVsX2dldF9tb2RlcyhzdHJ1Y3QgZHBfcGFuZWwgKmRw X3BhbmVsLAorCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIHN0cnVjdCBkcF9kaXNw bGF5X21vZGUgKm1vZGUpCit7CisJc3RydWN0IGRwX3BhbmVsX3ByaXZhdGUgKnBhbmVsOworCisJ aWYgKCFkcF9wYW5lbCkgeworCQlEUk1fRVJST1IoImludmFsaWQgaW5wdXRcbiIpOworCQlyZXR1 cm4gLUVJTlZBTDsKKwl9CisKKwlwYW5lbCA9IGNvbnRhaW5lcl9vZihkcF9wYW5lbCwgc3RydWN0 IGRwX3BhbmVsX3ByaXZhdGUsIGRwX3BhbmVsKTsKKworCWlmIChkcF9wYW5lbC0+dmlkZW9fdGVz dCkgeworCQlkcF9wYW5lbF9zZXRfdGVzdF9tb2RlKHBhbmVsLCBtb2RlKTsKKwkJcmV0dXJuIDE7 CisJfSBlbHNlIGlmIChkcF9wYW5lbC0+ZWRpZCkgeworCQlyZXR1cm4gZHBfcGFuZWxfdXBkYXRl X21vZGVzKGNvbm5lY3RvciwgZHBfcGFuZWwtPmVkaWQpOworCX0KKworCXJldHVybiAwOworfQor Cit1OCBkcF9wYW5lbF9nZXRfZWRpZF9jaGVja3N1bShzdHJ1Y3QgZWRpZCAqZWRpZCkKK3sKKwlz dHJ1Y3QgZWRpZCAqbGFzdF9ibG9jazsKKwl1OCAqcmF3X2VkaWQ7CisJYm9vbCBpc19lZGlkX2Nv cnJ1cHQ7CisKKwlpZiAoIWVkaWQpIHsKKwkJRFJNX0VSUk9SKCJpbnZhbGlkIGVkaWQgaW5wdXRc biIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyYXdfZWRpZCA9ICh1OCAqKWVkaWQ7CisJcmF3X2Vk aWQgKz0gKGVkaWQtPmV4dGVuc2lvbnMgKiBFRElEX0xFTkdUSCk7CisJbGFzdF9ibG9jayA9IChz dHJ1Y3QgZWRpZCAqKXJhd19lZGlkOworCisJLyogYmxvY2sgdHlwZSBleHRlbnNpb24gKi8KKwlk cm1fZWRpZF9ibG9ja192YWxpZChyYXdfZWRpZCwgMSwgZmFsc2UsICZpc19lZGlkX2NvcnJ1cHQp OworCWlmICghaXNfZWRpZF9jb3JydXB0KQorCQlyZXR1cm4gbGFzdF9ibG9jay0+Y2hlY2tzdW07 CisKKwlEUk1fRVJST1IoIkludmFsaWQgYmxvY2ssIG5vIGNoZWNrc3VtXG4iKTsKKwlyZXR1cm4g MDsKK30KKwordm9pZCBkcF9wYW5lbF9oYW5kbGVfc2lua19yZXF1ZXN0KHN0cnVjdCBkcF9wYW5l bCAqZHBfcGFuZWwpCit7CisJc3RydWN0IGRwX3BhbmVsX3ByaXZhdGUgKnBhbmVsOworCisJaWYg KCFkcF9wYW5lbCkgeworCQlEUk1fRVJST1IoImludmFsaWQgaW5wdXRcbiIpOworCQlyZXR1cm47 CisJfQorCisJcGFuZWwgPSBjb250YWluZXJfb2YoZHBfcGFuZWwsIHN0cnVjdCBkcF9wYW5lbF9w cml2YXRlLCBkcF9wYW5lbCk7CisKKwlpZiAocGFuZWwtPmxpbmstPnNpbmtfcmVxdWVzdCAmIERQ X1RFU1RfTElOS19FRElEX1JFQUQpIHsKKwkJdTggY2hlY2tzdW0gPSBkcF9wYW5lbF9nZXRfZWRp ZF9jaGVja3N1bShkcF9wYW5lbC0+ZWRpZCk7CisKKwkJZHBfbGlua19zZW5kX2VkaWRfY2hlY2tz dW0ocGFuZWwtPmxpbmssIGNoZWNrc3VtKTsKKwkJZHBfbGlua19zZW5kX3Rlc3RfcmVzcG9uc2Uo cGFuZWwtPmxpbmspOworCX0KK30KKwordm9pZCBkcF9wYW5lbF90cGdfY29uZmlnKHN0cnVjdCBk cF9wYW5lbCAqZHBfcGFuZWwsIGJvb2wgZW5hYmxlKQoreworCXUzMiBoc3luY19zdGFydF94LCBo c3luY19lbmRfeDsKKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wYW5lbCAqY2F0YWxvZzsKKwlzdHJ1Y3Qg ZHBfcGFuZWxfcHJpdmF0ZSAqcGFuZWw7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRybV9t b2RlOworCisJaWYgKCFkcF9wYW5lbCkgeworCQlEUk1fRVJST1IoImludmFsaWQgaW5wdXRcbiIp OworCQlyZXR1cm47CisJfQorCisJcGFuZWwgPSBjb250YWluZXJfb2YoZHBfcGFuZWwsIHN0cnVj dCBkcF9wYW5lbF9wcml2YXRlLCBkcF9wYW5lbCk7CisJY2F0YWxvZyA9IHBhbmVsLT5jYXRhbG9n OworCWRybV9tb2RlID0gJnBhbmVsLT5kcF9wYW5lbC5kcF9tb2RlLmRybV9tb2RlOworCisJaWYg KCFwYW5lbC0+cGFuZWxfb24pIHsKKwkJRFJNX0RFQlVHX0RQKCJEUCBwYW5lbCBub3QgZW5hYmxl ZCwgaGFuZGxlIFRQRyBvbiBuZXh0IHBhbmVsIG9uXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlm ICghZW5hYmxlKSB7CisJCWRwX2NhdGFsb2dfcGFuZWxfdHBnX2Rpc2FibGUoY2F0YWxvZyk7CisJ CXJldHVybjsKKwl9CisKKwkvKiBUUEcgY29uZmlnICovCisJY2F0YWxvZy0+aHN5bmNfcGVyaW9k ID0gZHJtX21vZGUtPmh0b3RhbDsKKwljYXRhbG9nLT52c3luY19wZXJpb2QgPSBkcm1fbW9kZS0+ dnRvdGFsOworCisJY2F0YWxvZy0+ZGlzcGxheV92X3N0YXJ0ID0gKChkcm1fbW9kZS0+dnRvdGFs IC0gZHJtX21vZGUtPnZzeW5jX3N0YXJ0KSAqCisJCQkJCWNhdGFsb2ctPmhzeW5jX3BlcmlvZCk7 CisJY2F0YWxvZy0+ZGlzcGxheV92X2VuZCA9ICgoY2F0YWxvZy0+dnN5bmNfcGVyaW9kIC0gZHJt X21vZGUtPnZzeW5jX3N0YXJ0IC0KKwkJCQkJZHJtX21vZGUtPnZkaXNwbGF5KSAqIGNhdGFsb2ct PmhzeW5jX3BlcmlvZCkgLSAxOworCisJY2F0YWxvZy0+ZGlzcGxheV92X3N0YXJ0ICs9IGRybV9t b2RlLT5odG90YWwgLSBkcm1fbW9kZS0+aHN5bmNfc3RhcnQ7CisJY2F0YWxvZy0+ZGlzcGxheV92 X2VuZCAtPSBkcm1fbW9kZS0+aHN5bmNfc3RhcnQgLSBkcm1fbW9kZS0+aGRpc3BsYXk7CisKKwlo c3luY19zdGFydF94ID0gZHJtX21vZGUtPmh0b3RhbCAtIGRybV9tb2RlLT5oc3luY19zdGFydDsK Kwloc3luY19lbmRfeCA9IGNhdGFsb2ctPmhzeW5jX3BlcmlvZCAtIGRybV9tb2RlLT5oc3luY19z dGFydCAtCisJCQkJCWRybV9tb2RlLT5oZGlzcGxheSAtIDE7CisKKwljYXRhbG9nLT52X3N5bmNf d2lkdGggPSBkcm1fbW9kZS0+dnN5bmNfZW5kIC0gZHJtX21vZGUtPnZzeW5jX3N0YXJ0OworCisJ Y2F0YWxvZy0+aHN5bmNfY3RsID0gKGNhdGFsb2ctPmhzeW5jX3BlcmlvZCA8PCAxNikgfAorCQkJ KGRybV9tb2RlLT5oc3luY19lbmQgLSBkcm1fbW9kZS0+aHN5bmNfc3RhcnQpOworCWNhdGFsb2ct PmRpc3BsYXlfaGN0bCA9IChoc3luY19lbmRfeCA8PCAxNikgfCBoc3luY19zdGFydF94OworCisJ RFJNX0RFQlVHX0RQKCIlczogY2FsbGluZyBjYXRhbG9nIHRwZ19lbmFibGVcbiIsIF9fZnVuY19f KTsKKwlkcF9jYXRhbG9nX3BhbmVsX3RwZ19lbmFibGUoY2F0YWxvZyk7Cit9CisKK2ludCBkcF9w YW5lbF90aW1pbmdfY2ZnKHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwpCit7CisJaW50IHJjID0g MDsKKwl1MzIgZGF0YSwgdG90YWxfdmVyLCB0b3RhbF9ob3I7CisJc3RydWN0IGRwX2NhdGFsb2df cGFuZWwgKmNhdGFsb2c7CisJc3RydWN0IGRwX3BhbmVsX3ByaXZhdGUgKnBhbmVsOworCXN0cnVj dCBkcm1fZGlzcGxheV9tb2RlICpkcm1fbW9kZTsKKworCXBhbmVsID0gY29udGFpbmVyX29mKGRw X3BhbmVsLCBzdHJ1Y3QgZHBfcGFuZWxfcHJpdmF0ZSwgZHBfcGFuZWwpOworCWNhdGFsb2cgPSBw YW5lbC0+Y2F0YWxvZzsKKwlkcm1fbW9kZSA9ICZwYW5lbC0+ZHBfcGFuZWwuZHBfbW9kZS5kcm1f bW9kZTsKKworCURSTV9ERUJVR19EUCgid2lkdGg9JWQgaHBvcmNoPSAlZCAlZCAlZFxuIiwKKwkJ ZHJtX21vZGUtPmhkaXNwbGF5LCBkcm1fbW9kZS0+aHRvdGFsIC0gZHJtX21vZGUtPmhzeW5jX2Vu ZCwKKwkJZHJtX21vZGUtPmhzeW5jX3N0YXJ0IC0gZHJtX21vZGUtPmhkaXNwbGF5LAorCQlkcm1f bW9kZS0+aHN5bmNfZW5kIC0gZHJtX21vZGUtPmhzeW5jX3N0YXJ0KTsKKworCURSTV9ERUJVR19E UCgiaGVpZ2h0PSVkIHZwb3JjaD0gJWQgJWQgJWRcbiIsCisJCWRybV9tb2RlLT52ZGlzcGxheSwg ZHJtX21vZGUtPnZ0b3RhbCAtIGRybV9tb2RlLT52c3luY19lbmQsCisJCWRybV9tb2RlLT52c3lu Y19zdGFydCAtIGRybV9tb2RlLT52ZGlzcGxheSwKKwkJZHJtX21vZGUtPnZzeW5jX2VuZCAtIGRy bV9tb2RlLT52c3luY19zdGFydCk7CisKKwl0b3RhbF9ob3IgPSBkcm1fbW9kZS0+aHRvdGFsOwor CisJdG90YWxfdmVyID0gZHJtX21vZGUtPnZ0b3RhbDsKKworCWRhdGEgPSB0b3RhbF92ZXI7CisJ ZGF0YSA8PD0gMTY7CisJZGF0YSB8PSB0b3RhbF9ob3I7CisKKwljYXRhbG9nLT50b3RhbCA9IGRh dGE7CisKKwlkYXRhID0gKGRybV9tb2RlLT52dG90YWwgLSBkcm1fbW9kZS0+dnN5bmNfc3RhcnQp OworCWRhdGEgPDw9IDE2OworCWRhdGEgfD0gKGRybV9tb2RlLT5odG90YWwgLSBkcm1fbW9kZS0+ aHN5bmNfc3RhcnQpOworCisJY2F0YWxvZy0+c3luY19zdGFydCA9IGRhdGE7CisKKwlkYXRhID0g ZHJtX21vZGUtPnZzeW5jX2VuZCAtIGRybV9tb2RlLT52c3luY19zdGFydDsKKwlkYXRhIDw8PSAx NjsKKwlkYXRhIHw9IChwYW5lbC0+ZHBfcGFuZWwuZHBfbW9kZS52X2FjdGl2ZV9sb3cgPDwgMzEp OworCWRhdGEgfD0gZHJtX21vZGUtPmhzeW5jX2VuZCAtIGRybV9tb2RlLT5oc3luY19zdGFydDsK KwlkYXRhIHw9IChwYW5lbC0+ZHBfcGFuZWwuZHBfbW9kZS5oX2FjdGl2ZV9sb3cgPDwgMTUpOwor CisJY2F0YWxvZy0+d2lkdGhfYmxhbmtpbmcgPSBkYXRhOworCisJZGF0YSA9IGRybV9tb2RlLT52 ZGlzcGxheTsKKwlkYXRhIDw8PSAxNjsKKwlkYXRhIHw9IGRybV9tb2RlLT5oZGlzcGxheTsKKwor CWNhdGFsb2ctPmRwX2FjdGl2ZSA9IGRhdGE7CisKKwlkcF9jYXRhbG9nX3BhbmVsX3RpbWluZ19j ZmcoY2F0YWxvZyk7CisJcGFuZWwtPnBhbmVsX29uID0gdHJ1ZTsKKworCXJldHVybiByYzsKK30K KworaW50IGRwX3BhbmVsX2luaXRfcGFuZWxfaW5mbyhzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVs KQoreworCWludCByYyA9IDA7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRybV9tb2RlOwor CisJZHJtX21vZGUgPSAmZHBfcGFuZWwtPmRwX21vZGUuZHJtX21vZGU7CisKKwkvKgorCSAqIHBy aW50IHJlc29sdXRpb24gaW5mbyBhcyB0aGlzIGlzIGEgcmVzdWx0CisJICogb2YgdXNlciBpbml0 aWF0ZWQgYWN0aW9uIG9mIGNhYmxlIGNvbm5lY3Rpb24KKwkgKi8KKwlEUk1fREVCVUdfRFAoIlNF VCBORVcgUkVTT0xVVElPTjpcbiIpOworCURSTV9ERUJVR19EUCgiJWR4JWRAJWRmcHNcbiIsIGRy bV9tb2RlLT5oZGlzcGxheSwKKwkJZHJtX21vZGUtPnZkaXNwbGF5LCBkcm1fbW9kZS0+dnJlZnJl c2gpOworCURSTV9ERUJVR19EUCgiaF9wb3JjaGVzKGJhY2t8ZnJvbnR8d2lkdGgpID0gKCVkfCVk fCVkKVxuIiwKKwkJCWRybV9tb2RlLT5odG90YWwgLSBkcm1fbW9kZS0+aHN5bmNfZW5kLAorCQkJ ZHJtX21vZGUtPmhzeW5jX3N0YXJ0IC0gZHJtX21vZGUtPmhkaXNwbGF5LAorCQkJZHJtX21vZGUt PmhzeW5jX2VuZCAtIGRybV9tb2RlLT5oc3luY19zdGFydCk7CisJRFJNX0RFQlVHX0RQKCJ2X3Bv cmNoZXMoYmFja3xmcm9udHx3aWR0aCkgPSAoJWR8JWR8JWQpXG4iLAorCQkJZHJtX21vZGUtPnZ0 b3RhbCAtIGRybV9tb2RlLT52c3luY19lbmQsCisJCQlkcm1fbW9kZS0+dnN5bmNfc3RhcnQgLSBk cm1fbW9kZS0+dmRpc3BsYXksCisJCQlkcm1fbW9kZS0+dnN5bmNfZW5kIC0gZHJtX21vZGUtPnZz eW5jX3N0YXJ0KTsKKwlEUk1fREVCVUdfRFAoInBpeGVsIGNsb2NrIChLSHopPSglZClcbiIsIGRy bV9tb2RlLT5jbG9jayk7CisJRFJNX0RFQlVHX0RQKCJicHAgPSAlZFxuIiwgZHBfcGFuZWwtPmRw X21vZGUuYnBwKTsKKworCWRwX3BhbmVsLT5kcF9tb2RlLmJwcCA9IG1heF90KHUzMiwgMTgsIG1p bl90KHUzMiwgZHBfcGFuZWwtPmRwX21vZGUuYnBwLCAzMCkpOworCURSTV9ERUJVR19EUCgidXBk YXRlZCBicHAgPSAlZFxuIiwgZHBfcGFuZWwtPmRwX21vZGUuYnBwKTsKKworCXJldHVybiByYzsK K30KKworc3RydWN0IGRwX3BhbmVsICpkcF9wYW5lbF9nZXQoc3RydWN0IGRwX3BhbmVsX2luICpp bikKK3sKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBkcF9wYW5lbF9wcml2YXRlICpwYW5lbDsKKwlz dHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsOworCisJaWYgKCFpbi0+ZGV2IHx8ICFpbi0+Y2F0YWxv ZyB8fCAhaW4tPmF1eCB8fCAhaW4tPmxpbmspIHsKKwkJRFJNX0VSUk9SKCJpbnZhbGlkIGlucHV0 XG4iKTsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIGVycm9yOworCX0KKworCXBhbmVsID0gZGV2 bV9remFsbG9jKGluLT5kZXYsIHNpemVvZigqcGFuZWwpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBh bmVsKSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlwYW5lbC0+ZGV2 ID0gaW4tPmRldjsKKwlwYW5lbC0+YXV4ID0gaW4tPmF1eDsKKwlwYW5lbC0+Y2F0YWxvZyA9IGlu LT5jYXRhbG9nOworCXBhbmVsLT5saW5rID0gaW4tPmxpbms7CisKKwlkcF9wYW5lbCA9ICZwYW5l bC0+ZHBfcGFuZWw7CisJZHBfcGFuZWwtPm1heF9id19jb2RlID0gRFBfTElOS19CV184XzE7CisJ cGFuZWwtPmF1eF9jZmdfdXBkYXRlX2RvbmUgPSBmYWxzZTsKKworCXJldHVybiBkcF9wYW5lbDsK K2Vycm9yOgorCXJldHVybiBFUlJfUFRSKHJjKTsKK30KKwordm9pZCBkcF9wYW5lbF9wdXQoc3Ry dWN0IGRwX3BhbmVsICpkcF9wYW5lbCkKK3sKKwlzdHJ1Y3QgZHBfcGFuZWxfcHJpdmF0ZSAqcGFu ZWw7CisKKwlpZiAoIWRwX3BhbmVsKQorCQlyZXR1cm47CisKKwlwYW5lbCA9IGNvbnRhaW5lcl9v ZihkcF9wYW5lbCwgc3RydWN0IGRwX3BhbmVsX3ByaXZhdGUsIGRwX3BhbmVsKTsKKworCWtmcmVl KGRwX3BhbmVsLT5lZGlkKTsKKwlkcF9wYW5lbC0+ZWRpZCA9IE5VTEw7CisJZGV2bV9rZnJlZShw YW5lbC0+ZGV2LCBwYW5lbCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rw L2RwX3BhbmVsLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3BhbmVsLmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQzNmExYQotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcGFuZWwuaApAQCAtMCwwICsxLDkxIEBACisvKiBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCisvKgorICogQ29weXJpZ2h0IChj KSAyMDEyLTIwMTksIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor ICovCisKKyNpZm5kZWYgX0RQX1BBTkVMX0hfCisjZGVmaW5lIF9EUF9QQU5FTF9IXworCisjaW5j bHVkZSA8ZHJtL21zbV9kcm0uaD4KKworI2luY2x1ZGUgImRwX2F1eC5oIgorI2luY2x1ZGUgImRw X2xpbmsuaCIKKyNpbmNsdWRlICJkcF9leHRjb24uaCIKKworc3RydWN0IGVkaWQ7CisKKyNkZWZp bmUgRFBfTUFYX0RPV05TVFJFQU1fUE9SVFMgMHgxMAorCitzdHJ1Y3QgZHBfZGlzcGxheV9tb2Rl IHsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBkcm1fbW9kZTsKKwl1MzIgY2FwYWJpbGl0aWVz OworCXUzMiBicHA7CisJdTMyIGhfYWN0aXZlX2xvdzsKKwl1MzIgdl9hY3RpdmVfbG93OworfTsK Kworc3RydWN0IGRwX3BhbmVsX2luIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IGRw X2F1eCAqYXV4OworCXN0cnVjdCBkcF9saW5rICpsaW5rOworCXN0cnVjdCBkcF9jYXRhbG9nX3Bh bmVsICpjYXRhbG9nOworfTsKKworc3RydWN0IGRwX3BhbmVsIHsKKwkvKiBkcGNkIHJhdyBkYXRh ICovCisJdTggZHBjZFtEUF9SRUNFSVZFUl9DQVBfU0laRSArIDFdOworCisJc3RydWN0IGRybV9k cF9saW5rIGxpbmtfaW5mbzsKKwlzdHJ1Y3QgZWRpZCAqZWRpZDsKKwlzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAqY29ubmVjdG9yOworCXN0cnVjdCBkcF9kaXNwbGF5X21vZGUgZHBfbW9kZTsKKwlib29s IHZpZGVvX3Rlc3Q7CisKKwl1MzIgdmljOworCXUzMiBtYXhfcGNsa19raHo7CisKKwl1MzIgbWF4 X2J3X2NvZGU7Cit9OworCitpbnQgZHBfcGFuZWxfaW5pdF9wYW5lbF9pbmZvKHN0cnVjdCBkcF9w YW5lbCAqZHBfcGFuZWwpOworaW50IGRwX3BhbmVsX2RlaW5pdChzdHJ1Y3QgZHBfcGFuZWwgKmRw X3BhbmVsKTsKK2ludCBkcF9wYW5lbF90aW1pbmdfY2ZnKHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFu ZWwpOworaW50IGRwX3BhbmVsX3JlYWRfc2lua19jYXBzKHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFu ZWwsCisJCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpOwordTMyIGRwX3BhbmVsX2dl dF9tb2RlX2JwcChzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsLCB1MzIgbW9kZV9tYXhfYnBwLAor CQkJdTMyIG1vZGVfcGNsa19raHopOworaW50IGRwX3BhbmVsX2dldF9tb2RlcyhzdHJ1Y3QgZHBf cGFuZWwgKmRwX3BhbmVsLAorCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBzdHJ1 Y3QgZHBfZGlzcGxheV9tb2RlICptb2RlKTsKK3ZvaWQgZHBfcGFuZWxfaGFuZGxlX3NpbmtfcmVx dWVzdChzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsKTsKK3ZvaWQgZHBfcGFuZWxfdHBnX2NvbmZp ZyhzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsLCBib29sIGVuYWJsZSk7CisKKy8qKgorICogaXNf bGlua19yYXRlX3ZhbGlkKCkgLSB2YWxpZGF0ZXMgdGhlIGxpbmsgcmF0ZQorICogQGxhbmVfcmF0 ZTogbGluayByYXRlIHJlcXVlc3RlZCBieSB0aGUgc2luaworICoKKyAqIFJldHVybnMgdHJ1ZSBp ZiB0aGUgcmVxdWVzdGVkIGxpbmsgcmF0ZSBpcyBzdXBwb3J0ZWQuCisgKi8KK3N0YXRpYyBpbmxp bmUgYm9vbCBpc19saW5rX3JhdGVfdmFsaWQodTMyIGJ3X2NvZGUpCit7CisJcmV0dXJuIChid19j b2RlID09IERQX0xJTktfQldfMV82MiB8fAorCQlid19jb2RlID09IERQX0xJTktfQldfMl83IHx8 CisJCWJ3X2NvZGUgPT0gRFBfTElOS19CV181XzQgfHwKKwkJYndfY29kZSA9PSBEUF9MSU5LX0JX XzhfMSk7Cit9CisKKy8qKgorICogZHBfbGlua19pc19sYW5lX2NvdW50X3ZhbGlkKCkgLSB2YWxp ZGF0ZXMgdGhlIGxhbmUgY291bnQKKyAqIEBsYW5lX2NvdW50OiBsYW5lIGNvdW50IHJlcXVlc3Rl ZCBieSB0aGUgc2luaworICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVxdWVzdGVkIGxhbmUg Y291bnQgaXMgc3VwcG9ydGVkLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfbGFuZV9jb3Vu dF92YWxpZCh1MzIgbGFuZV9jb3VudCkKK3sKKwlyZXR1cm4gKGxhbmVfY291bnQgPT0gMSB8fAor CQlsYW5lX2NvdW50ID09IDIgfHwKKwkJbGFuZV9jb3VudCA9PSA0KTsKK30KKworc3RydWN0IGRw X3BhbmVsICpkcF9wYW5lbF9nZXQoc3RydWN0IGRwX3BhbmVsX2luICppbik7Cit2b2lkIGRwX3Bh bmVsX3B1dChzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsKTsKKyNlbmRpZiAvKiBfRFBfUEFORUxf SF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcGFyc2VyLmMgYi9k cml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3BhcnNlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjUwMjBkMTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0v bXNtL2RwL2RwX3BhcnNlci5jCkBAIC0wLDAgKzEsNjIxIEBACisvLyBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMC1vbmx5CisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTksIFRo ZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICovCisKKyNkZWZpbmUg cHJfZm10KGZtdCkJIltkcm0tZHBdICVzOiAiIGZtdCwgX19mdW5jX18KKworI2luY2x1ZGUgPGxp bnV4L29mX2dwaW8uaD4KKworI2luY2x1ZGUgImRwX3BhcnNlci5oIgorCitzdGF0aWMgaW50IG1z bV9kc3NfaW9yZW1hcF9ieW5hbWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJCSAg IHN0cnVjdCBkc3NfaW9fZGF0YSAqaW9fZGF0YSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1 Y3QgcmVzb3VyY2UgKnJlcyA9IE5VTEw7CisKKwlpZiAoIWlvX2RhdGEpIHsKKwkJRFJNX0VSUk9S KCIlcFMtPiVzOiBpbnZhbGlkIGlucHV0XG4iLAorCQkJX19idWlsdGluX3JldHVybl9hZGRyZXNz KDApLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJlcyA9IHBsYXRmb3Jt X2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sIG5hbWUpOworCWlmICgh cmVzKSB7CisJCURSTV9FUlJPUigiJXBTLT4lczogJyVzJyBtc21fZHNzX2dldF9yZXNfYnluYW1l IGZhaWxlZFxuIiwKKwkJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSwgX19mdW5jX18sIG5h bWUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpb19kYXRhLT5sZW4gPSAodTMyKXJlc291 cmNlX3NpemUocmVzKTsKKwlpb19kYXRhLT5iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCBpb19k YXRhLT5sZW4pOworCWlmICghaW9fZGF0YS0+YmFzZSkgeworCQlEUk1fRVJST1IoIiVwUy0+JXM6 ICclcycgaW9yZW1hcCBmYWlsZWRcbiIsCisJCQlfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCks IF9fZnVuY19fLCBuYW1lKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyB2b2lkIG1zbV9kc3NfaW91bm1hcChzdHJ1Y3QgZHNzX2lvX2RhdGEgKmlvX2RhdGEp Cit7CisJaWYgKCFpb19kYXRhKSB7CisJCURSTV9FUlJPUigiJXBTLT4lczogaW52YWxpZCBpbnB1 dFxuIiwKKwkJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSwgX19mdW5jX18pOworCQlyZXR1 cm47CisJfQorCisJaWYgKGlvX2RhdGEtPmJhc2UpIHsKKwkJaW91bm1hcChpb19kYXRhLT5iYXNl KTsKKwkJaW9fZGF0YS0+YmFzZSA9IE5VTEw7CisJfQorCWlvX2RhdGEtPmxlbiA9IDA7Cit9CisK K3N0YXRpYyB2b2lkIGRwX3BhcnNlcl91bm1hcF9pb19yZXNvdXJjZXMoc3RydWN0IGRwX3BhcnNl ciAqcGFyc2VyKQoreworCXN0cnVjdCBkcF9pbyAqaW8gPSAmcGFyc2VyLT5pbzsKKworCW1zbV9k c3NfaW91bm1hcCgmaW8tPmRwX2FoYik7CisJbXNtX2Rzc19pb3VubWFwKCZpby0+ZHBfYXV4KTsK Kwltc21fZHNzX2lvdW5tYXAoJmlvLT5kcF9saW5rKTsKKwltc21fZHNzX2lvdW5tYXAoJmlvLT5k cF9wMCk7CisJbXNtX2Rzc19pb3VubWFwKCZpby0+cGh5X2lvKTsKKwltc21fZHNzX2lvdW5tYXAo JmlvLT5sbl90eDBfaW8pOworCW1zbV9kc3NfaW91bm1hcCgmaW8tPmxuX3R4MF9pbyk7CisJbXNt X2Rzc19pb3VubWFwKCZpby0+ZHBfcGxsX2lvKTsKKwltc21fZHNzX2lvdW5tYXAoJmlvLT5kcF9j Y19pbyk7CisJbXNtX2Rzc19pb3VubWFwKCZpby0+dXNiM19kcF9jb20pOworCW1zbV9kc3NfaW91 bm1hcCgmaW8tPnFmcHJvbV9pbyk7Cit9CisKK3N0YXRpYyBpbnQgZHBfcGFyc2VyX2N0cmxfcmVz KHN0cnVjdCBkcF9wYXJzZXIgKnBhcnNlcikKK3sKKwlpbnQgcmMgPSAwOworCXUzMiBpbmRleDsK KwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gcGFyc2VyLT5wZGV2OworCXN0cnVjdCBk ZXZpY2Vfbm9kZSAqb2Zfbm9kZSA9IHBhcnNlci0+cGRldi0+ZGV2Lm9mX25vZGU7CisJc3RydWN0 IGRwX2lvICppbyA9ICZwYXJzZXItPmlvOworCisJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihv Zl9ub2RlLCAiY2VsbC1pbmRleCIsICZpbmRleCk7CisJaWYgKHJjKSB7CisJCURSTV9FUlJPUigi Y2VsbC1pbmRleCBub3Qgc3BlY2lmaWVkLCAlZFxuIiwgcmMpOworCQlyZXR1cm4gcmM7CisJfQor CisJcmMgPSBtc21fZHNzX2lvcmVtYXBfYnluYW1lKHBkZXYsICZpby0+ZHBfYWhiLCAiZHBfYWhi Iik7CisJaWYgKHJjKSB7CisJCURSTV9FUlJPUigidW5hYmxlIHRvIHJlbWFwIGRwIGlvIHJlc291 cmNlcywgJWRcbiIsIHJjKTsKKwkJZ290byBlcnI7CisJfQorCisJcmMgPSBtc21fZHNzX2lvcmVt YXBfYnluYW1lKHBkZXYsICZpby0+ZHBfYXV4LCAiZHBfYXV4Iik7CisJaWYgKHJjKSB7CisJCURS TV9FUlJPUigidW5hYmxlIHRvIHJlbWFwIGRwIGlvIHJlc291cmNlcywgJWRcbiIsIHJjKTsKKwkJ Z290byBlcnI7CisJfQorCisJcmMgPSBtc21fZHNzX2lvcmVtYXBfYnluYW1lKHBkZXYsICZpby0+ ZHBfbGluaywgImRwX2xpbmsiKTsKKwlpZiAocmMpIHsKKwkJRFJNX0VSUk9SKCJ1bmFibGUgdG8g cmVtYXAgZHAgaW8gcmVzb3VyY2VzLCAlZFxuIiwgcmMpOworCQlnb3RvIGVycjsKKwl9CisKKwly YyA9IG1zbV9kc3NfaW9yZW1hcF9ieW5hbWUocGRldiwgJmlvLT5kcF9wMCwgImRwX3AwIik7CisJ aWYgKHJjKSB7CisJCURSTV9FUlJPUigidW5hYmxlIHRvIHJlbWFwIGRwIGlvIHJlc291cmNlcywg JWRcbiIsIHJjKTsKKwkJZ290byBlcnI7CisJfQorCisJcmMgPSBtc21fZHNzX2lvcmVtYXBfYnlu YW1lKHBkZXYsICZpby0+cGh5X2lvLCAiZHBfcGh5Iik7CisJaWYgKHJjKSB7CisJCURSTV9FUlJP UigidW5hYmxlIHRvIHJlbWFwIGRwIFBIWSByZXNvdXJjZXMsICVkXG4iLCByYyk7CisJCWdvdG8g ZXJyOworCX0KKworCXJjID0gbXNtX2Rzc19pb3JlbWFwX2J5bmFtZShwZGV2LCAmaW8tPmxuX3R4 MF9pbywgImRwX2xuX3R4MCIpOworCWlmIChyYykgeworCQlEUk1fRVJST1IoInVuYWJsZSB0byBy ZW1hcCBkcCBUWDAgcmVzb3VyY2VzLCAlZFxuIiwgcmMpOworCQlnb3RvIGVycjsKKwl9CisKKwly YyA9IG1zbV9kc3NfaW9yZW1hcF9ieW5hbWUocGRldiwgJmlvLT5sbl90eDFfaW8sICJkcF9sbl90 eDEiKTsKKwlpZiAocmMpIHsKKwkJRFJNX0VSUk9SKCJ1bmFibGUgdG8gcmVtYXAgZHAgVFgxIHJl c291cmNlcywgJWRcbiIsIHJjKTsKKwkJZ290byBlcnI7CisJfQorCisJcmMgPSBtc21fZHNzX2lv cmVtYXBfYnluYW1lKHBkZXYsICZpby0+ZHBfcGxsX2lvLCAiZHBfcGxsIik7CisJaWYgKHJjKSB7 CisJCURSTV9FUlJPUigidW5hYmxlIHRvIHJlbWFwIERQIFBMTCByZXNvdXJjZXMsICVkXG4iLCBy Yyk7CisJCWdvdG8gZXJyOworCX0KKworCXJjID0gbXNtX2Rzc19pb3JlbWFwX2J5bmFtZShwZGV2 LCAmaW8tPnVzYjNfZHBfY29tLCAidXNiM19kcF9jb20iKTsKKwlpZiAocmMpIHsKKwkJRFJNX0VS Uk9SKCJ1bmFibGUgdG8gcmVtYXAgVVNCMyBEUCBjb20gcmVzb3VyY2VzLCAlZFxuIiwgcmMpOwor CQlnb3RvIGVycjsKKwl9CisKKwlyYyA9IG1zbV9kc3NfaW9yZW1hcF9ieW5hbWUocGRldiwgJmlv LT5kcF9jY19pbywgImRwX21tc3NfY2MiKTsKKwlpZiAocmMpIHsKKwkJRFJNX0VSUk9SKCJ1bmFi bGUgdG8gcmVtYXAgZHAgTU1TU19DQyByZXNvdXJjZXNcbiIpOworCQlnb3RvIGVycjsKKwl9CisK KwlpZiAobXNtX2Rzc19pb3JlbWFwX2J5bmFtZShwZGV2LCAmaW8tPnFmcHJvbV9pbywgInFmcHJv bV9waHlzaWNhbCIpKQorCQlwcl93YXJuKCJ1bmFibGUgdG8gcmVtYXAgZHAgcWZwcm9tIHJlc291 cmNlc1xuIik7CisKKwlyZXR1cm4gMDsKK2VycjoKKwlkcF9wYXJzZXJfdW5tYXBfaW9fcmVzb3Vy Y2VzKHBhcnNlcik7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZHBfZ2V0 X3BoeV9hdXhfY29uZmlnX3Byb3BlcnR5KHUzMiBjZmdfdHlwZSkKK3sKKwlzd2l0Y2ggKGNmZ190 eXBlKSB7CisJY2FzZSBQSFlfQVVYX0NGRzA6CisJCXJldHVybiAicWNvbSxhdXgtY2ZnMC1zZXR0 aW5ncyI7CisJY2FzZSBQSFlfQVVYX0NGRzE6CisJCXJldHVybiAicWNvbSxhdXgtY2ZnMS1zZXR0 aW5ncyI7CisJY2FzZSBQSFlfQVVYX0NGRzI6CisJCXJldHVybiAicWNvbSxhdXgtY2ZnMi1zZXR0 aW5ncyI7CisJY2FzZSBQSFlfQVVYX0NGRzM6CisJCXJldHVybiAicWNvbSxhdXgtY2ZnMy1zZXR0 aW5ncyI7CisJY2FzZSBQSFlfQVVYX0NGRzQ6CisJCXJldHVybiAicWNvbSxhdXgtY2ZnNC1zZXR0 aW5ncyI7CisJY2FzZSBQSFlfQVVYX0NGRzU6CisJCXJldHVybiAicWNvbSxhdXgtY2ZnNS1zZXR0 aW5ncyI7CisJY2FzZSBQSFlfQVVYX0NGRzY6CisJCXJldHVybiAicWNvbSxhdXgtY2ZnNi1zZXR0 aW5ncyI7CisJY2FzZSBQSFlfQVVYX0NGRzc6CisJCXJldHVybiAicWNvbSxhdXgtY2ZnNy1zZXR0 aW5ncyI7CisJY2FzZSBQSFlfQVVYX0NGRzg6CisJCXJldHVybiAicWNvbSxhdXgtY2ZnOC1zZXR0 aW5ncyI7CisJY2FzZSBQSFlfQVVYX0NGRzk6CisJCXJldHVybiAicWNvbSxhdXgtY2ZnOS1zZXR0 aW5ncyI7CisJZGVmYXVsdDoKKwkJcmV0dXJuICJ1bmtub3duIjsKKwl9Cit9CisKK3N0YXRpYyBp bnQgZHBfcGFyc2VyX2F1eChzdHJ1Y3QgZHBfcGFyc2VyICpwYXJzZXIpCit7CisJc3RydWN0IGRl dmljZV9ub2RlICpvZl9ub2RlID0gcGFyc2VyLT5wZGV2LT5kZXYub2Zfbm9kZTsKKwlpbnQgbGVu ID0gMCwgaSA9IDAsIGogPSAwLCBjb25maWdfY291bnQgPSAwOworCWNvbnN0IGNoYXIgKmRhdGE7 CisKKwlmb3IgKGkgPSAwOyBpIDwgUEhZX0FVWF9DRkdfTUFYOyBpKyspIHsKKwkJY29uc3QgY2hh ciAqcHJvcGVydHkgPSBkcF9nZXRfcGh5X2F1eF9jb25maWdfcHJvcGVydHkoaSk7CisKKwkJZGF0 YSA9IG9mX2dldF9wcm9wZXJ0eShvZl9ub2RlLCBwcm9wZXJ0eSwgJmxlbik7CisJCWlmICghZGF0 YSkgeworCQkJRFJNX0VSUk9SKCJVbmFibGUgdG8gcmVhZCAlc1xuIiwgcHJvcGVydHkpOworCQkJ Z290byBlcnJvcjsKKwkJfQorCisJCWNvbmZpZ19jb3VudCA9IGxlbiAtIDE7CisJCWlmIChjb25m aWdfY291bnQgPCAxIHx8IC8qIG1pbmltdW0gY29uZmlnIGNvdW50ID0gMSAqLworCQkJY29uZmln X2NvdW50ID4gRFBfQVVYX0NGR19NQVhfVkFMVUVfQ05UKSB7CisJCQlEUk1fRVJST1IoIkludmFs aWQgY29uZmlnIGNvdW50ICglZCkgY29uZmlncyBmb3IgJXNcbiIsCisJCQkJCWNvbmZpZ19jb3Vu dCwgcHJvcGVydHkpOworCQkJZ290byBlcnJvcjsKKwkJfQorCisJCXBhcnNlci0+YXV4X2NmZ1tp XS5vZmZzZXQgPSBkYXRhWzBdOworCQlwYXJzZXItPmF1eF9jZmdbaV0uY2ZnX2NudCA9IGNvbmZp Z19jb3VudDsKKwkJRFJNX0RFQlVHX0RQKCIlcyBvZmZzZXQ9MHgleCwgY2ZnX2NudD0lZFxuIiwK KwkJCQlwcm9wZXJ0eSwKKwkJCQlwYXJzZXItPmF1eF9jZmdbaV0ub2Zmc2V0LAorCQkJCXBhcnNl ci0+YXV4X2NmZ1tpXS5jZmdfY250KTsKKwkJZm9yIChqID0gMTsgaiA8IGxlbjsgaisrKSB7CisJ CQlwYXJzZXItPmF1eF9jZmdbaV0ubHV0W2ogLSAxXSA9IGRhdGFbal07CisJCQlEUk1fREVCVUdf RFAoIiVzIGx1dFslZF09MHgleFxuIiwKKwkJCQkJcHJvcGVydHksCisJCQkJCWksCisJCQkJCXBh cnNlci0+YXV4X2NmZ1tpXS5sdXRbaiAtIDFdKTsKKwkJfQorCX0KKwkJcmV0dXJuIDA7CisKK2Vy cm9yOgorCWZvciAoaSA9IDA7IGkgPCBQSFlfQVVYX0NGR19NQVg7IGkrKykgeworCQlwYXJzZXIt PmF1eF9jZmdbaV0gPSAoY29uc3Qgc3RydWN0IGRwX2F1eF9jZmcpeyAwIH07CisJfQorCXJldHVy biAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IGRwX3BhcnNlcl9taXNjKHN0cnVjdCBkcF9wYXJz ZXIgKnBhcnNlcikKK3sKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9k ZSA9IHBhcnNlci0+cGRldi0+ZGV2Lm9mX25vZGU7CisKKwlyYyA9IG9mX3Byb3BlcnR5X3JlYWRf dTMyKG9mX25vZGUsCisJCSJxY29tLG1heC1wY2xrLWZyZXF1ZW5jeS1raHoiLCAmcGFyc2VyLT5t YXhfcGNsa19raHopOworCWlmIChyYykKKwkJcGFyc2VyLT5tYXhfcGNsa19raHogPSBEUF9NQVhf UElYRUxfQ0xLX0tIWjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRwX3BhcnNlcl9w aW5jdHJsKHN0cnVjdCBkcF9wYXJzZXIgKnBhcnNlcikKK3sKKwlzdHJ1Y3QgZHBfcGluY3RybCAq cGluY3RybCA9ICZwYXJzZXItPnBpbmN0cmw7CisKKwlwaW5jdHJsLT5waW4gPSBkZXZtX3BpbmN0 cmxfZ2V0KCZwYXJzZXItPnBkZXYtPmRldik7CisKKwlpZiAoSVNfRVJSX09SX05VTEwocGluY3Ry bC0+cGluKSkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBnZXQgcGluY3RybCwgcmM9JWxkXG4i LCBQVFJfRVJSKHBpbmN0cmwtPnBpbikpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwaW5j dHJsLT5zdGF0ZV9hY3RpdmUgPSBwaW5jdHJsX2xvb2t1cF9zdGF0ZShwaW5jdHJsLT5waW4sCisJ CQkJCSJtZHNzX2RwX2FjdGl2ZSIpOworCWlmIChJU19FUlJfT1JfTlVMTChwaW5jdHJsLT5zdGF0 ZV9hY3RpdmUpKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGdldCBwaW5jdHJsIGFjdGl2ZSBz dGF0ZSwgJWxkXG4iLAorCQkJUFRSX0VSUihwaW5jdHJsLT5zdGF0ZV9hY3RpdmUpKTsKKwkJcmV0 dXJuIC1FSU5WQUw7CisJfQorCisJcGluY3RybC0+c3RhdGVfc3VzcGVuZCA9IHBpbmN0cmxfbG9v a3VwX3N0YXRlKHBpbmN0cmwtPnBpbiwKKwkJCQkJIm1kc3NfZHBfc2xlZXAiKTsKKwlpZiAoSVNf RVJSX09SX05VTEwocGluY3RybC0+c3RhdGVfc3VzcGVuZCkpIHsKKwkJRFJNX0VSUk9SKCJmYWls ZWQgdG8gZ2V0IHBpbmN0cmwgc3VzcGVuZCBzdGF0ZSwgJWxkXG4iLAorCQkJUFRSX0VSUihwaW5j dHJsLT5zdGF0ZV9zdXNwZW5kKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAw OworfQorCitzdGF0aWMgaW50IGRwX3BhcnNlcl9ncGlvKHN0cnVjdCBkcF9wYXJzZXIgKnBhcnNl cikKK3sKKwlpbnQgaSA9IDA7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBhcnNlci0+cGRldi0+ ZGV2OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSA9IGRldi0+b2Zfbm9kZTsKKwlzdHJ1 Y3QgZHNzX21vZHVsZV9wb3dlciAqbXAgPSAmcGFyc2VyLT5tcFtEUF9DT1JFX1BNXTsKKwlzdGF0 aWMgY29uc3QgY2hhciAqIGNvbnN0IGRwX2dwaW9zW10gPSB7CisJCSJxY29tLGF1eC1lbi1ncGlv IiwKKwkJInFjb20sYXV4LXNlbC1ncGlvIiwKKwkJInFjb20sdXNicGx1Zy1jYy1ncGlvIiwKKwl9 OworCisJbXAtPmdwaW9fY29uZmlnID0gZGV2bV9remFsbG9jKGRldiwKKwkJc2l6ZW9mKHN0cnVj dCBkc3NfZ3BpbykgKiBBUlJBWV9TSVpFKGRwX2dwaW9zKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFt cC0+Z3Bpb19jb25maWcpCisJCXJldHVybiAtRU5PTUVNOworCisJbXAtPm51bV9ncGlvID0gQVJS QVlfU0laRShkcF9ncGlvcyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbXAtPm51bV9ncGlvOyBpKysp IHsKKwkJbXAtPmdwaW9fY29uZmlnW2ldLmdwaW8gPSBvZl9nZXRfbmFtZWRfZ3BpbyhvZl9ub2Rl LAorCQkJZHBfZ3Bpb3NbaV0sIDApOworCisJCWlmICghZ3Bpb19pc192YWxpZChtcC0+Z3Bpb19j b25maWdbaV0uZ3BpbykpIHsKKwkJCURSTV9FUlJPUigiJXMgZ3BpbyBub3Qgc3BlY2lmaWVkXG4i LCBkcF9ncGlvc1tpXSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCXN0cmxjcHkobXAt PmdwaW9fY29uZmlnW2ldLmdwaW9fbmFtZSwgZHBfZ3Bpb3NbaV0sCisJCQlzaXplb2YobXAtPmdw aW9fY29uZmlnW2ldLmdwaW9fbmFtZSkpOworCisJCW1wLT5ncGlvX2NvbmZpZ1tpXS52YWx1ZSA9 IDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpkcF9wYXJzZXJf c3VwcGx5X25vZGVfbmFtZShlbnVtIGRwX3BtX3R5cGUgbW9kdWxlKQoreworCXN3aXRjaCAobW9k dWxlKSB7CisJY2FzZSBEUF9DT1JFX1BNOglyZXR1cm4gInFjb20sY29yZS1zdXBwbHktZW50cmll cyI7CisJY2FzZSBEUF9DVFJMX1BNOglyZXR1cm4gInFjb20sY3RybC1zdXBwbHktZW50cmllcyI7 CisJY2FzZSBEUF9QSFlfUE06CQlyZXR1cm4gInFjb20scGh5LXN1cHBseS1lbnRyaWVzIjsKKwlk ZWZhdWx0OgkJcmV0dXJuICI/Pz8iOworCX0KK30KKworc3RhdGljIGludCBkcF9wYXJzZXJfZ2V0 X3ZyZWcoc3RydWN0IGRwX3BhcnNlciAqcGFyc2VyLAorCQllbnVtIGRwX3BtX3R5cGUgbW9kdWxl KQoreworCWludCBpID0gMCwgcmMgPSAwOworCXUzMiB0bXAgPSAwOworCWNvbnN0IGNoYXIgKnBt X3N1cHBseV9uYW1lID0gTlVMTDsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnN1cHBseV9ub2RlID0g TlVMTDsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUgPSBwYXJzZXItPnBkZXYtPmRldi5v Zl9ub2RlOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqc3VwcGx5X3Jvb3Rfbm9kZSA9IE5VTEw7CisJ c3RydWN0IGRzc19tb2R1bGVfcG93ZXIgKm1wID0gJnBhcnNlci0+bXBbbW9kdWxlXTsKKworCW1w LT5udW1fdnJlZyA9IDA7CisJcG1fc3VwcGx5X25hbWUgPSBkcF9wYXJzZXJfc3VwcGx5X25vZGVf bmFtZShtb2R1bGUpOworCXN1cHBseV9yb290X25vZGUgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShv Zl9ub2RlLCBwbV9zdXBwbHlfbmFtZSk7CisJaWYgKCFzdXBwbHlfcm9vdF9ub2RlKSB7CisJCURS TV9FUlJPUigibm8gc3VwcGx5IGVudHJ5IHByZXNlbnQ6ICVzXG4iLCBwbV9zdXBwbHlfbmFtZSk7 CisJCXJldHVybiAwOworCX0KKworCW1wLT5udW1fdnJlZyA9IG9mX2dldF9hdmFpbGFibGVfY2hp bGRfY291bnQoc3VwcGx5X3Jvb3Rfbm9kZSk7CisKKwlpZiAobXAtPm51bV92cmVnID09IDApIHsK KwkJRFJNX0RFQlVHX0RQKCJubyB2cmVnXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJRFJNX0RF QlVHX0RQKCJ2cmVnIGZvdW5kLiBjb3VudD0lZFxuIiwgbXAtPm51bV92cmVnKTsKKworCW1wLT52 cmVnX2NvbmZpZyA9IGRldm1fa3phbGxvYygmcGFyc2VyLT5wZGV2LT5kZXYsCisJCXNpemVvZihz dHJ1Y3QgZHNzX3ZyZWcpICogbXAtPm51bV92cmVnLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1wLT52 cmVnX2NvbmZpZykgeworCQltcC0+bnVtX3ZyZWcgPSAwOworCQlyZXR1cm4gLUVOT01FTTsKKwl9 CisKKwlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKHN1cHBseV9yb290X25vZGUsIHN1cHBseV9ub2Rl KSB7CisJCWNvbnN0IGNoYXIgKnN0ID0gTlVMTDsKKwkJLyogdnJlZy1uYW1lICovCisJCXJjID0g b2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcoc3VwcGx5X25vZGUsCisJCQkicWNvbSxzdXBwbHktbmFt ZSIsICZzdCk7CisJCWlmIChyYykgeworCQkJRFJNX0VSUk9SKCJlcnJvciByZWFkaW5nIG5hbWUu IHJjPSVkXG4iLCByYyk7CisJCQltcC0+bnVtX3ZyZWcgPSAwOworCQkJcmV0dXJuIHJjOworCQl9 CisJCXNucHJpbnRmKG1wLT52cmVnX2NvbmZpZ1tpXS52cmVnX25hbWUsCisJCQlBUlJBWV9TSVpF KChtcC0+dnJlZ19jb25maWdbaV0udnJlZ19uYW1lKSksICIlcyIsIHN0KTsKKwkJLyogdnJlZy1t aW4tdm9sdGFnZSAqLworCQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHN1cHBseV9ub2RlLAor CQkJInFjb20sc3VwcGx5LW1pbi12b2x0YWdlIiwgJnRtcCk7CisJCWlmIChyYykgeworCQkJRFJN X0VSUk9SKCJlcnJvciByZWFkaW5nIG1pbiB2b2x0LiByYz0lZFxuIiwgcmMpOworCQkJbXAtPm51 bV92cmVnID0gMDsKKwkJCXJldHVybiByYzsKKwkJfQorCQltcC0+dnJlZ19jb25maWdbaV0ubWlu X3ZvbHRhZ2UgPSB0bXA7CisKKwkJLyogdnJlZy1tYXgtdm9sdGFnZSAqLworCQlyYyA9IG9mX3By b3BlcnR5X3JlYWRfdTMyKHN1cHBseV9ub2RlLAorCQkJInFjb20sc3VwcGx5LW1heC12b2x0YWdl IiwgJnRtcCk7CisJCWlmIChyYykgeworCQkJRFJNX0VSUk9SKCJlcnJvciByZWFkaW5nIG1heCB2 b2x0LiByYz0lZFxuIiwgcmMpOworCQkJbXAtPm51bV92cmVnID0gMDsKKwkJCXJldHVybiByYzsK KwkJfQorCQltcC0+dnJlZ19jb25maWdbaV0ubWF4X3ZvbHRhZ2UgPSB0bXA7CisKKwkJLyogZW5h YmxlLWxvYWQgKi8KKwkJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihzdXBwbHlfbm9kZSwKKwkJ CSJxY29tLHN1cHBseS1lbmFibGUtbG9hZCIsICZ0bXApOworCQlpZiAocmMpIHsKKwkJCURSTV9F UlJPUigiZXJyb3IgcmVhZGluZyBlbmFibGUgbG9hZC4gcmM9JWRcbiIsIHJjKTsKKwkJCW1wLT5u dW1fdnJlZyA9IDA7CisJCQlyZXR1cm4gcmM7CisJCX0KKwkJbXAtPnZyZWdfY29uZmlnW2ldLmVu YWJsZV9sb2FkID0gdG1wOworCisJCS8qIGRpc2FibGUtbG9hZCAqLworCQlyYyA9IG9mX3Byb3Bl cnR5X3JlYWRfdTMyKHN1cHBseV9ub2RlLAorCQkJInFjb20sc3VwcGx5LWRpc2FibGUtbG9hZCIs ICZ0bXApOworCQlpZiAocmMpIHsKKwkJCURSTV9FUlJPUigiZXJyb3IgcmVhZGluZyBkaXNhYmxl IGxvYWQuIHJjPSVkXG4iLCByYyk7CisJCQkgbXAtPm51bV92cmVnID0gMDsKKwkJCXJldHVybiBy YzsKKwkJfQorCQltcC0+dnJlZ19jb25maWdbaV0uZGlzYWJsZV9sb2FkID0gdG1wOworCisJCURS TV9ERUJVR19EUCgiJXMgbWluPSVkLCBtYXg9JWQsIGVuYWJsZT0lZCwgZGlzYWJsZT0lZFxuIiwK KwkJCW1wLT52cmVnX2NvbmZpZ1tpXS52cmVnX25hbWUsCisJCQltcC0+dnJlZ19jb25maWdbaV0u bWluX3ZvbHRhZ2UsCisJCQltcC0+dnJlZ19jb25maWdbaV0ubWF4X3ZvbHRhZ2UsCisJCQltcC0+ dnJlZ19jb25maWdbaV0uZW5hYmxlX2xvYWQsCisJCQltcC0+dnJlZ19jb25maWdbaV0uZGlzYWJs ZV9sb2FkCisJCQkpOworCQkrK2k7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg ZHBfcGFyc2VyX3JlZ3VsYXRvcihzdHJ1Y3QgZHBfcGFyc2VyICpwYXJzZXIpCit7CisJaW50IGks IHJjID0gMDsKKworCS8qIFBhcnNlIHRoZSByZWd1bGF0b3IgaW5mb3JtYXRpb24gKi8KKwlmb3Ig KGkgPSBEUF9DT1JFX1BNOyBpIDwgRFBfTUFYX1BNOyBpKyspIHsKKwkJcmMgPSBkcF9wYXJzZXJf Z2V0X3ZyZWcocGFyc2VyLCBpKTsKKwkJaWYgKHJjKSB7CisJCQlEUk1fRVJST1IoImdldF9kdF92 cmVnX2RhdGEgZmFpbGVkIGZvciAlcy4gcmM9JWRcbiIsCisJCQkJZHBfcGFyc2VyX3BtX25hbWUo aSksIHJjKTsKKwkJCWktLTsKKwkJCXJldHVybiByYzsKKwkJfQorCX0KKworCXJldHVybiAwOwor fQorCitzdGF0aWMgaW5saW5lIGJvb2wgZHBfcGFyc2VyX2NoZWNrX3ByZWZpeChjb25zdCBjaGFy ICpjbGtfcHJlZml4LCBjb25zdCBjaGFyICpjbGtfbmFtZSkKK3sKKwlyZXR1cm4gIXN0cm5jbXAo Y2xrX3ByZWZpeCwgY2xrX25hbWUsIHN0cmxlbihjbGtfcHJlZml4KSk7Cit9CisKK3N0YXRpYyBp bnQgZHBfcGFyc2VyX2luaXRfY2xrX2RhdGEoc3RydWN0IGRwX3BhcnNlciAqcGFyc2VyKQorewor CWludCBudW1fY2xrID0gMCwgaSA9IDAsIHJjID0gMDsKKwlpbnQgY29yZV9jbGtfY291bnQgPSAw LCBjdHJsX2Nsa19jb3VudCA9IDA7CisJY29uc3QgY2hhciAqY2xrX25hbWU7CisJc3RydWN0IGRl dmljZSAqZGV2ID0gJnBhcnNlci0+cGRldi0+ZGV2OworCXN0cnVjdCBkc3NfbW9kdWxlX3Bvd2Vy ICpjb3JlX3Bvd2VyID0gJnBhcnNlci0+bXBbRFBfQ09SRV9QTV07CisJc3RydWN0IGRzc19tb2R1 bGVfcG93ZXIgKmN0cmxfcG93ZXIgPSAmcGFyc2VyLT5tcFtEUF9DVFJMX1BNXTsKKworCW51bV9j bGsgPSBvZl9wcm9wZXJ0eV9jb3VudF9zdHJpbmdzKGRldi0+b2Zfbm9kZSwgImNsb2NrLW5hbWVz Iik7CisJaWYgKG51bV9jbGsgPD0gMCkgeworCQlEUk1fRVJST1IoIm5vIGNsb2NrcyBhcmUgZGVm aW5lZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBudW1f Y2xrOyBpKyspIHsKKwkJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZ19pbmRleChkZXYtPm9m X25vZGUsCisJCQkJImNsb2NrLW5hbWVzIiwgaSwgJmNsa19uYW1lKTsKKwkJaWYgKHJjKSB7CisJ CQlEUk1fRVJST1IoImVycm9yIHJlYWRpbmcgY2xvY2stbmFtZXMgJWRcbiIsIHJjKTsKKwkJCXJl dHVybiByYzsKKwkJfQorCisJCWlmIChkcF9wYXJzZXJfY2hlY2tfcHJlZml4KCJjb3JlIiwgY2xr X25hbWUpKQorCQkJY29yZV9jbGtfY291bnQrKzsKKworCQlpZiAoZHBfcGFyc2VyX2NoZWNrX3By ZWZpeCgiY3RybCIsIGNsa19uYW1lKSkKKwkJCWN0cmxfY2xrX2NvdW50Kys7CisJfQorCisJLyog SW5pdGlhbGl6ZSB0aGUgQ09SRSBwb3dlciBtb2R1bGUgKi8KKwlpZiAoY29yZV9jbGtfY291bnQg PD0gMCkgeworCQlEUk1fRVJST1IoIm5vIGNvcmUgY2xvY2tzIGFyZSBkZWZpbmVkXG4iKTsKKwkJ cmV0dXJuIC1FSU5WQUw7CisJfQorCisJY29yZV9wb3dlci0+bnVtX2NsayA9IGNvcmVfY2xrX2Nv dW50OworCWNvcmVfcG93ZXItPmNsa19jb25maWcgPSBkZXZtX2t6YWxsb2MoZGV2LAorCQkJc2l6 ZW9mKHN0cnVjdCBkc3NfY2xrKSAqIGNvcmVfcG93ZXItPm51bV9jbGssCisJCQlHRlBfS0VSTkVM KTsKKwlpZiAoIWNvcmVfcG93ZXItPmNsa19jb25maWcpIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJ fQorCisJLyogSW5pdGlhbGl6ZSB0aGUgQ1RSTCBwb3dlciBtb2R1bGUgKi8KKwlpZiAoY3RybF9j bGtfY291bnQgPD0gMCkgeworCQlEUk1fRVJST1IoIm5vIGN0cmwgY2xvY2tzIGFyZSBkZWZpbmVk XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY3RybF9wb3dlci0+bnVtX2NsayA9IGN0 cmxfY2xrX2NvdW50OworCWN0cmxfcG93ZXItPmNsa19jb25maWcgPSBkZXZtX2t6YWxsb2MoZGV2 LAorCQkJc2l6ZW9mKHN0cnVjdCBkc3NfY2xrKSAqIGN0cmxfcG93ZXItPm51bV9jbGssCisJCQlH RlBfS0VSTkVMKTsKKwlpZiAoIWN0cmxfcG93ZXItPmNsa19jb25maWcpIHsKKwkJY3RybF9wb3dl ci0+bnVtX2NsayA9IDA7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQor CitzdGF0aWMgaW50IGRwX3BhcnNlcl9jbG9jayhzdHJ1Y3QgZHBfcGFyc2VyICpwYXJzZXIpCit7 CisJaW50IHJjID0gMCwgaSA9IDA7CisJaW50IG51bV9jbGsgPSAwOworCWludCBjb3JlX2Nsa19p bmRleCA9IDAsIGN0cmxfY2xrX2luZGV4ID0gMDsKKwlpbnQgY29yZV9jbGtfY291bnQgPSAwLCBj dHJsX2Nsa19jb3VudCA9IDA7CisJY29uc3QgY2hhciAqY2xrX25hbWU7CisJc3RydWN0IGRldmlj ZSAqZGV2ID0gJnBhcnNlci0+cGRldi0+ZGV2OworCXN0cnVjdCBkc3NfbW9kdWxlX3Bvd2VyICpj b3JlX3Bvd2VyID0gJnBhcnNlci0+bXBbRFBfQ09SRV9QTV07CisJc3RydWN0IGRzc19tb2R1bGVf cG93ZXIgKmN0cmxfcG93ZXIgPSAmcGFyc2VyLT5tcFtEUF9DVFJMX1BNXTsKKworCWNvcmVfcG93 ZXIgPSAmcGFyc2VyLT5tcFtEUF9DT1JFX1BNXTsKKwljdHJsX3Bvd2VyID0gJnBhcnNlci0+bXBb RFBfQ1RSTF9QTV07CisKKwlyYyA9ICBkcF9wYXJzZXJfaW5pdF9jbGtfZGF0YShwYXJzZXIpOwor CWlmIChyYykgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBpbml0aWFsaXplIHBvd2VyIGRhdGEg JWRcbiIsIHJjKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY29yZV9jbGtfY291bnQgPSBj b3JlX3Bvd2VyLT5udW1fY2xrOworCWN0cmxfY2xrX2NvdW50ID0gY3RybF9wb3dlci0+bnVtX2Ns azsKKworCW51bV9jbGsgPSBjb3JlX2Nsa19jb3VudCArIGN0cmxfY2xrX2NvdW50OworCisJZm9y IChpID0gMDsgaSA8IG51bV9jbGs7IGkrKykgeworCQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfc3Ry aW5nX2luZGV4KGRldi0+b2Zfbm9kZSwgImNsb2NrLW5hbWVzIiwKKwkJCQlpLCAmY2xrX25hbWUp OworCQlpZiAocmMpIHsKKwkJCSBEUk1fRVJST1IoImVycm9yIHJlYWRpbmcgY2xvY2stbmFtZXMg JWRcbiIsIHJjKTsKKwkJCXJldHVybiByYzsKKwkJfQorCQlpZiAoZHBfcGFyc2VyX2NoZWNrX3By ZWZpeCgiY29yZSIsIGNsa19uYW1lKSAmJgorCQkJCWNvcmVfY2xrX2luZGV4IDwgY29yZV9jbGtf Y291bnQpIHsKKwkJCXN0cnVjdCBkc3NfY2xrICpjbGsgPQorCQkJCSZjb3JlX3Bvd2VyLT5jbGtf Y29uZmlnW2NvcmVfY2xrX2luZGV4XTsKKwkJCXN0cmxjcHkoY2xrLT5jbGtfbmFtZSwgY2xrX25h bWUsIHNpemVvZihjbGstPmNsa19uYW1lKSk7CisJCQljbGstPnR5cGUgPSBEU1NfQ0xLX0FIQjsK KwkJCWNvcmVfY2xrX2luZGV4Kys7CisJCX0gZWxzZSBpZiAoZHBfcGFyc2VyX2NoZWNrX3ByZWZp eCgiY3RybCIsIGNsa19uYW1lKSAmJgorCQkJICAgY3RybF9jbGtfaW5kZXggPCBjdHJsX2Nsa19j b3VudCkgeworCQkJc3RydWN0IGRzc19jbGsgKmNsayA9CisJCQkJJmN0cmxfcG93ZXItPmNsa19j b25maWdbY3RybF9jbGtfaW5kZXhdOworCQkJc3RybGNweShjbGstPmNsa19uYW1lLCBjbGtfbmFt ZSwgc2l6ZW9mKGNsay0+Y2xrX25hbWUpKTsKKwkJCWN0cmxfY2xrX2luZGV4Kys7CisKKwkJCWlm ICghc3RybmNtcChjbGtfbmFtZSwgImN0cmxfbGlua19jbGsiLCBzdHJsZW4oImN0cmxfbGlua19j bGsiKSkgfHwKKwkJCSAgIXN0cm5jbXAoY2xrX25hbWUsICJjdHJsX3BpeGVsX2NsayIsIHN0cmxl bigiY3RybF9waXhlbF9jbGsiKSkpCisJCQkJY2xrLT50eXBlID0gRFNTX0NMS19QQ0xLOworCQkJ ZWxzZQorCQkJCWNsay0+dHlwZSA9IERTU19DTEtfQUhCOworCQl9CisJfQorCisJRFJNX0RFQlVH X0RQKCJjbG9jayBwYXJzaW5nIHN1Y2Nlc3NmdWxcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBpbnQgZHBfcGFyc2VyX3BhcnNlKHN0cnVjdCBkcF9wYXJzZXIgKnBhcnNlcikKK3sKKwlp bnQgcmMgPSAwOworCisJaWYgKCFwYXJzZXIpIHsKKwkJRFJNX0VSUk9SKCJpbnZhbGlkIGlucHV0 XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmMgPSBkcF9wYXJzZXJfY3RybF9yZXMo cGFyc2VyKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCXJjID0gZHBfcGFyc2VyX2F1eChw YXJzZXIpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJcmMgPSBkcF9wYXJzZXJfbWlzYyhw YXJzZXIpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJcmMgPSBkcF9wYXJzZXJfY2xvY2so cGFyc2VyKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCXJjID0gZHBfcGFyc2VyX3JlZ3Vs YXRvcihwYXJzZXIpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJcmMgPSBkcF9wYXJzZXJf Z3BpbyhwYXJzZXIpOworCWlmIChyYykgeworCQlEUk1fRVJST1IoInVuYWJsZSB0byBwYXJzZSBH UElPc1xuIik7CisJCXJldHVybiByYzsKKwl9CisKKwlyYyA9IGRwX3BhcnNlcl9waW5jdHJsKHBh cnNlcik7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0cnVjdCBkcF9wYXJzZXIgKmRwX3BhcnNlcl9n ZXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZHBfcGFyc2VyICpw YXJzZXI7CisKKwlwYXJzZXIgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpwYXJz ZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBhcnNlcikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01F TSk7CisKKwlwYXJzZXItPnBhcnNlID0gZHBfcGFyc2VyX3BhcnNlOworCXBhcnNlci0+cGRldiA9 IHBkZXY7CisKKwlyZXR1cm4gcGFyc2VyOworfQorCit2b2lkIGRwX3BhcnNlcl9wdXQoc3RydWN0 IGRwX3BhcnNlciAqcGFyc2VyKQoreworCit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bXNtL2RwL2RwX3BhcnNlci5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wYXJzZXIuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzVhNTBiCi0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wYXJzZXIuaApAQCAtMCwwICsxLDE5NiBA QAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLworLyoKKyAqIENv cHlyaWdodCAoYykgMjAxMi0yMDE5LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KKyAqLworCisjaWZuZGVmIF9EUF9QQVJTRVJfSF8KKyNkZWZpbmUgX0RQX1BBUlNF Ul9IXworCisjaW5jbHVkZSAiZHB1X2lvX3V0aWwuaCIKKworI2RlZmluZSBEUF9MQUJFTCAiTURT UyBEUCBESVNQTEFZIgorI2RlZmluZSBBVVhfQ0ZHX0xFTgkxMAorI2RlZmluZSBEUF9NQVhfUElY RUxfQ0xLX0tIWgk2NzUwMDAKKworZW51bSBkcF9wbV90eXBlIHsKKwlEUF9DT1JFX1BNLAorCURQ X0NUUkxfUE0sCisJRFBfUEhZX1BNLAorCURQX01BWF9QTQorfTsKKworc3RhdGljIGlubGluZSBj b25zdCBjaGFyICpkcF9wYXJzZXJfcG1fbmFtZShlbnVtIGRwX3BtX3R5cGUgbW9kdWxlKQorewor CXN3aXRjaCAobW9kdWxlKSB7CisJY2FzZSBEUF9DT1JFX1BNOglyZXR1cm4gIkRQX0NPUkVfUE0i OworCWNhc2UgRFBfQ1RSTF9QTToJcmV0dXJuICJEUF9DVFJMX1BNIjsKKwljYXNlIERQX1BIWV9Q TToJCXJldHVybiAiRFBfUEhZX1BNIjsKKwlkZWZhdWx0OgkJcmV0dXJuICI/Pz8iOworCX0KK30K KworLyoqCisgKiBzdHJ1Y3QgZHBfZGlzcGxheV9kYXRhICAtIGRpc3BsYXkgcmVsYXRlZCBkZXZp Y2UgdHJlZSBkYXRhLgorICoKKyAqIEBjdHJsX25vZGU6IHJlZmVyZWNlIHRvIGNvbnRyb2xsZXIg ZGV2aWNlCisgKiBAcGh5X25vZGU6ICByZWZlcmVuY2UgdG8gcGh5IGRldmljZQorICogQGlzX2Fj dGl2ZTogaXMgdGhlIGNvbnRyb2xsZXIgY3VycmVudGx5IGFjdGl2ZQorICogQG5hbWU6IG5hbWUg b2YgdGhlIGRpc3BsYXkKKyAqIEBkaXNwbGF5X3R5cGU6IHR5cGUgb2YgdGhlIGRpc3BsYXkKKyAq Lworc3RydWN0IGRwX2Rpc3BsYXlfZGF0YSB7CisJc3RydWN0IGRldmljZV9ub2RlICpjdHJsX25v ZGU7CisJc3RydWN0IGRldmljZV9ub2RlICpwaHlfbm9kZTsKKwlib29sIGlzX2FjdGl2ZTsKKwlj b25zdCBjaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKmRpc3BsYXlfdHlwZTsKK307CisKKy8qKgor ICogc3RydWN0IGRwX2N0cmxfcmVzb3VyY2UgLSBjb250cm9sbGVyJ3MgSU8gcmVsYXRlZCBkYXRh CisgKgorICogQGRwX2FoYjogY29udHJvbGxlcidzIGFoYiBtYXBwZWQgbWVtb3J5IGFkZHJlc3MK KyAqIEBkcF9hdXg6IGNvbnRyb2xsZXIncyBhdXggbWFwcGVkIG1lbW9yeSBhZGRyZXNzCisgKiBA ZHBfbGluazogY29udHJvbGxlcidzIGxpbmsgbWFwcGVkIG1lbW9yeSBhZGRyZXNzCisgKiBAZHBf cDA6IGNvbnRyb2xsZXIncyBwMCBtYXBwZWQgbWVtb3J5IGFkZHJlc3MKKyAqIEBwaHlfaW86IHBo eSdzIG1hcHBlZCBtZW1vcnkgYWRkcmVzcworICogQGxuX3R4MF9pbzogVVNCLURQIGxhbmUgVFgw J3MgbWFwcGVkIG1lbW9yeSBhZGRyZXNzCisgKiBAbG5fdHgxX2lvOiBVU0ItRFAgbGFuZSBUWDEn cyBtYXBwZWQgbWVtb3J5IGFkZHJlc3MKKyAqIEBkcF9jY19pbzogRFAgY2MncyBtYXBwZWQgbWVt b3J5IGFkZHJlc3MKKyAqIEBxZnByb21faW86IHFmcHJvbSdzIG1hcHBlZCBtZW1vcnkgYWRkcmVz cworICogQGRwX3BsbF9pbzogRFAgUExMIG1hcHBlZCBtZW1vcnkgYWRkcmVzcworICogQHVzYjNf ZHBfY29tOiBVU0IzIERQIFBIWSBjb21ibyBtYXBwZWQgbWVtb3J5IGFkZHJlc3MKKyAqLworc3Ry dWN0IGRwX2lvIHsKKwlzdHJ1Y3QgZHNzX2lvX2RhdGEgY3RybF9pbzsKKwlzdHJ1Y3QgZHNzX2lv X2RhdGEgZHBfYWhiOworCXN0cnVjdCBkc3NfaW9fZGF0YSBkcF9hdXg7CisJc3RydWN0IGRzc19p b19kYXRhIGRwX2xpbms7CisJc3RydWN0IGRzc19pb19kYXRhIGRwX3AwOworCXN0cnVjdCBkc3Nf aW9fZGF0YSBwaHlfaW87CisJc3RydWN0IGRzc19pb19kYXRhIGxuX3R4MF9pbzsKKwlzdHJ1Y3Qg ZHNzX2lvX2RhdGEgbG5fdHgxX2lvOworCXN0cnVjdCBkc3NfaW9fZGF0YSBkcF9jY19pbzsKKwlz dHJ1Y3QgZHNzX2lvX2RhdGEgcWZwcm9tX2lvOworCXN0cnVjdCBkc3NfaW9fZGF0YSBkcF9wbGxf aW87CisJc3RydWN0IGRzc19pb19kYXRhIHVzYjNfZHBfY29tOworfTsKKworLyoqCisgKiBzdHJ1 Y3QgZHBfcGluY3RybCAtIERQJ3MgcGluIGNvbnRyb2wKKyAqCisgKiBAcGluOiBwaW4tY29udHJv bGxlcidzIGluc3RhbmNlCisgKiBAc3RhdGVfYWN0aXZlOiBhY3RpdmUgc3RhdGUgcGluIGNvbnRy b2wKKyAqIEBzdGF0ZV9ocGRfYWN0aXZlOiBocGQgYWN0aXZlIHN0YXRlIHBpbiBjb250cm9sCisg KiBAc3RhdGVfc3VzcGVuZDogc3VzcGVuZCBzdGF0ZSBwaW4gY29udHJvbAorICovCitzdHJ1Y3Qg ZHBfcGluY3RybCB7CisJc3RydWN0IHBpbmN0cmwgKnBpbjsKKwlzdHJ1Y3QgcGluY3RybF9zdGF0 ZSAqc3RhdGVfYWN0aXZlOworCXN0cnVjdCBwaW5jdHJsX3N0YXRlICpzdGF0ZV9ocGRfYWN0aXZl OworCXN0cnVjdCBwaW5jdHJsX3N0YXRlICpzdGF0ZV9zdXNwZW5kOworfTsKKworI2RlZmluZSBE UF9FTlVNX1NUUih4KQkjeAorI2RlZmluZSBEUF9BVVhfQ0ZHX01BWF9WQUxVRV9DTlQgMworLyoq CisgKiBzdHJ1Y3QgZHBfYXV4X2NmZyAtIERQJ3MgQVVYIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MK KyAqCisgKiBAY2ZnX2NudDogY291bnQgb2YgdGhlIGNvbmZpZ3VyYWJsZSBzZXR0aW5ncyBmb3Ig dGhlIEFVWCByZWdpc3RlcgorICogQGN1cnJlbnRfaW5kZXg6IGN1cnJlbnQgaW5kZXggb2YgdGhl IEFVWCBjb25maWcgbHV0CisgKiBAb2Zmc2V0OiByZWdpc3RlciBvZmZzZXQgb2YgdGhlIEFVWCBj b25maWcgcmVnaXN0ZXIKKyAqIEBsdXQ6IGxvb2sgdXAgdGFibGUgZm9yIHRoZSBBVVggY29uZmln IHZhbHVlcyBmb3IgdGhpcyByZWdpc3RlcgorICovCitzdHJ1Y3QgZHBfYXV4X2NmZyB7CisJdTMy IGNmZ19jbnQ7CisJdTMyIGN1cnJlbnRfaW5kZXg7CisJdTMyIG9mZnNldDsKKwl1MzIgbHV0W0RQ X0FVWF9DRkdfTUFYX1ZBTFVFX0NOVF07Cit9OworCisvKiBQSFkgQVVYIGNvbmZpZyByZWdpc3Rl cnMgKi8KK2VudW0gZHBfcGh5X2F1eF9jb25maWdfdHlwZSB7CisJUEhZX0FVWF9DRkcwLAorCVBI WV9BVVhfQ0ZHMSwKKwlQSFlfQVVYX0NGRzIsCisJUEhZX0FVWF9DRkczLAorCVBIWV9BVVhfQ0ZH NCwKKwlQSFlfQVVYX0NGRzUsCisJUEhZX0FVWF9DRkc2LAorCVBIWV9BVVhfQ0ZHNywKKwlQSFlf QVVYX0NGRzgsCisJUEhZX0FVWF9DRkc5LAorCVBIWV9BVVhfQ0ZHX01BWCwKK307CisKK3N0YXRp YyBpbmxpbmUgY2hhciAqZHBfcGh5X2F1eF9jb25maWdfdHlwZV90b19zdHJpbmcodTMyIGNmZ190 eXBlKQoreworCXN3aXRjaCAoY2ZnX3R5cGUpIHsKKwljYXNlIFBIWV9BVVhfQ0ZHMDoKKwkJcmV0 dXJuIERQX0VOVU1fU1RSKFBIWV9BVVhfQ0ZHMCk7CisJY2FzZSBQSFlfQVVYX0NGRzE6CisJCXJl dHVybiBEUF9FTlVNX1NUUihQSFlfQVVYX0NGRzEpOworCWNhc2UgUEhZX0FVWF9DRkcyOgorCQly ZXR1cm4gRFBfRU5VTV9TVFIoUEhZX0FVWF9DRkcyKTsKKwljYXNlIFBIWV9BVVhfQ0ZHMzoKKwkJ cmV0dXJuIERQX0VOVU1fU1RSKFBIWV9BVVhfQ0ZHMyk7CisJY2FzZSBQSFlfQVVYX0NGRzQ6CisJ CXJldHVybiBEUF9FTlVNX1NUUihQSFlfQVVYX0NGRzQpOworCWNhc2UgUEhZX0FVWF9DRkc1Ogor CQlyZXR1cm4gRFBfRU5VTV9TVFIoUEhZX0FVWF9DRkc1KTsKKwljYXNlIFBIWV9BVVhfQ0ZHNjoK KwkJcmV0dXJuIERQX0VOVU1fU1RSKFBIWV9BVVhfQ0ZHNik7CisJY2FzZSBQSFlfQVVYX0NGRzc6 CisJCXJldHVybiBEUF9FTlVNX1NUUihQSFlfQVVYX0NGRzcpOworCWNhc2UgUEhZX0FVWF9DRkc4 OgorCQlyZXR1cm4gRFBfRU5VTV9TVFIoUEhZX0FVWF9DRkc4KTsKKwljYXNlIFBIWV9BVVhfQ0ZH OToKKwkJcmV0dXJuIERQX0VOVU1fU1RSKFBIWV9BVVhfQ0ZHOSk7CisJZGVmYXVsdDoKKwkJcmV0 dXJuICJ1bmtub3duIjsKKwl9Cit9CisKKy8qKgorICogc3RydWN0IGRwX3BhcnNlciAtIERQIHBh cnNlcidzIGRhdGEgZXhwb3NlZCB0byBjbGllbnRzCisgKgorICogQHBkZXY6IHBsYXRmb3JtIGRh dGEgb2YgdGhlIGNsaWVudAorICogQG1wOiBncGlvLCByZWd1bGF0b3IgYW5kIGNsb2NrIHJlbGF0 ZWQgZGF0YQorICogQHBpbmN0cmw6IHBpbi1jb250cm9sIHJlbGF0ZWQgZGF0YQorICogQGRpc3Bf ZGF0YTogY29udHJvbGxlcidzIGRpc3BsYXkgcmVsYXRlZCBkYXRhCisgKiBAcGFyc2U6IGZ1bmN0 aW9uIHRvIGJlIGNhbGxlZCBieSBjbGllbnQgdG8gcGFyc2UgZGV2aWNlIHRyZWUuCisgKi8KK3N0 cnVjdCBkcF9wYXJzZXIgeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0 IGRzc19tb2R1bGVfcG93ZXIgbXBbRFBfTUFYX1BNXTsKKwlzdHJ1Y3QgZHBfcGluY3RybCBwaW5j dHJsOworCXN0cnVjdCBkcF9pbyBpbzsKKwlzdHJ1Y3QgZHBfZGlzcGxheV9kYXRhIGRpc3BfZGF0 YTsKKworCXU4IGxfbWFwWzRdOworCXN0cnVjdCBkcF9hdXhfY2ZnIGF1eF9jZmdbQVVYX0NGR19M RU5dOworCXUzMiBtYXhfcGNsa19raHo7CisKKwlpbnQgKCpwYXJzZSkoc3RydWN0IGRwX3BhcnNl ciAqcGFyc2VyKTsKK307CisKKy8qKgorICogZHBfcGFyc2VyX2dldCgpIC0gZ2V0IHRoZSBEUCdz IGRldmljZSB0cmVlIHBhcnNlciBtb2R1bGUKKyAqCisgKiBAcGRldjogcGxhdGZvcm0gZGF0YSBv ZiB0aGUgY2xpZW50CisgKiByZXR1cm46IHBvaW50ZXIgdG8gZHBfcGFyc2VyIHN0cnVjdHVyZS4K KyAqCisgKiBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGNsaWVudCBjYXBhYmlsaXR5IHRvIHBhcnNl IHRoZQorICogZGV2aWNlIHRyZWUgYW5kIHBvcHVsYXRlIHRoZSBkYXRhIHN0cnVjdHVyZXMuIFRo ZSBkYXRhCisgKiByZWxhdGVkIHRvIGNsb2NrLCByZWd1bGF0b3JzLCBwaW4tY29udHJvbCBhbmQg b3RoZXIKKyAqIGNhbiBiZSBwYXJzZWQgdXNpbmcgdGhpcyBtb2R1bGUuCisgKi8KK3N0cnVjdCBk cF9wYXJzZXIgKmRwX3BhcnNlcl9nZXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CisK Ky8qKgorICogZHBfcGFyc2VyX3B1dCgpIC0gY2xlYW5zIHRoZSBkcF9wYXJzZXIgbW9kdWxlCisg KgorICogQHBhcnNlcjogcG9pbnRlciB0byB0aGUgcGFyc2VyJ3MgZGF0YS4KKyAqLwordm9pZCBk cF9wYXJzZXJfcHV0KHN0cnVjdCBkcF9wYXJzZXIgKnBhcnNlcik7CisjZW5kaWYKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcG93ZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9t c20vZHAvZHBfcG93ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Nzhk ZTcwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wb3dlci5j CkBAIC0wLDAgKzEsNzMzIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1v bmx5CisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTksIFRoZSBMaW51eCBGb3VuZGF0aW9u LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkJIltkcm0t ZHBdICVzOiAiIGZtdCwgX19mdW5jX18KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1 ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgorI2luY2x1ZGUgImRwX3Bvd2VyLmgiCisK KyNkZWZpbmUgRFBfQ0xJRU5UX05BTUVfU0laRQkyMAorCitzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0 ZSB7CisJc3RydWN0IGRwX3BhcnNlciAqcGFyc2VyOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXY7CisJc3RydWN0IGNsayAqcGl4ZWxfY2xrX3JjZzsKKwlzdHJ1Y3QgY2xrICpsaW5rX2Ns a19zcmM7CisJc3RydWN0IGNsayAqcGl4ZWxfcHJvdmlkZXI7CisJc3RydWN0IGNsayAqbGlua19w cm92aWRlcjsKKworCXN0cnVjdCBkcF9wb3dlciBkcF9wb3dlcjsKK307CisKK3N0YXRpYyBpbnQg bXNtX2Rzc19pbml0X3ZyZWcoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZHNzX3ZyZWcgKmlu X3ZyZWcsCisJCQlpbnQgbnVtX3ZyZWcpCit7CisJaW50IGkgPSAwLCByYyA9IDA7CisJc3RydWN0 IGRzc192cmVnICpjdXJyX3ZyZWcgPSBOVUxMOworCWVudW0gZHNzX3ZyZWdfdHlwZSB0eXBlOwor CisJaWYgKCFpbl92cmVnIHx8ICFudW1fdnJlZykKKwkJcmV0dXJuIHJjOworCisJZm9yIChpID0g MDsgaSA8IG51bV92cmVnOyBpKyspIHsKKwkJY3Vycl92cmVnID0gJmluX3ZyZWdbaV07CisJCWN1 cnJfdnJlZy0+dnJlZyA9IGRldm1fcmVndWxhdG9yX2dldChkZXYsCisJCQljdXJyX3ZyZWctPnZy ZWdfbmFtZSk7CisJCXJjID0gUFRSX1JFVChjdXJyX3ZyZWctPnZyZWcpOworCQlpZiAocmMpIHsK KwkJCURSTV9ERVZfRVJST1IoZGV2LCAiJXBTLT4lczogJXMgZ2V0IGZhaWxlZC4gcmM9JWRcbiIs CisJCQkJIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSwgX19mdW5jX18sCisJCQkJIGN1cnJf dnJlZy0+dnJlZ19uYW1lLCByYyk7CisJCQljdXJyX3ZyZWctPnZyZWcgPSBOVUxMOworCQkJZ290 byB2cmVnX2dldF9mYWlsOworCQl9CisJCXR5cGUgPSAocmVndWxhdG9yX2NvdW50X3ZvbHRhZ2Vz KGN1cnJfdnJlZy0+dnJlZykgPiAwKQorCQkJCT8gRFNTX1JFR19MRE8gOiBEU1NfUkVHX1ZTOwor CQlpZiAodHlwZSA9PSBEU1NfUkVHX0xETykgeworCQkJcmMgPSByZWd1bGF0b3Jfc2V0X3ZvbHRh Z2UoCisJCQkJY3Vycl92cmVnLT52cmVnLAorCQkJCWN1cnJfdnJlZy0+bWluX3ZvbHRhZ2UsCisJ CQkJY3Vycl92cmVnLT5tYXhfdm9sdGFnZSk7CisJCQlpZiAocmMgPCAwKSB7CisJCQkJRFJNX0RF Vl9FUlJPUihkZXYsICIlcFMtPiVzOiVzIHNldCB2bHRnIGZhaWxcbiIsCisJCQkJCV9fYnVpbHRp bl9yZXR1cm5fYWRkcmVzcygwKSwKKwkJCQkJX19mdW5jX18sCisJCQkJCWN1cnJfdnJlZy0+dnJl Z19uYW1lKTsKKwkJCQlnb3RvIHZyZWdfc2V0X3ZvbHRhZ2VfZmFpbDsKKwkJCX0KKwkJfQorCX0K KwlyZXR1cm4gMDsKKwordnJlZ191bmNvbmZpZzoKK2lmICh0eXBlID09IERTU19SRUdfTERPKQor CXJlZ3VsYXRvcl9zZXRfbG9hZChjdXJyX3ZyZWctPnZyZWcsIDApOworCit2cmVnX3NldF92b2x0 YWdlX2ZhaWw6CisJZGV2bV9yZWd1bGF0b3JfcHV0KGN1cnJfdnJlZy0+dnJlZyk7CisJY3Vycl92 cmVnLT52cmVnID0gTlVMTDsKKwordnJlZ19nZXRfZmFpbDoKKwlmb3IgKGktLTsgaSA+PSAwOyBp LS0pIHsKKwkJY3Vycl92cmVnID0gJmluX3ZyZWdbaV07CisJCXR5cGUgPSAocmVndWxhdG9yX2Nv dW50X3ZvbHRhZ2VzKGN1cnJfdnJlZy0+dnJlZykgPiAwKQorCQkJPyBEU1NfUkVHX0xETyA6IERT U19SRUdfVlM7CisJCWdvdG8gdnJlZ191bmNvbmZpZzsKKwl9CisJcmV0dXJuIHJjOworfQorCitz dGF0aWMgaW50IG1zbV9kc3NfZGVpbml0X3ZyZWcoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qg ZHNzX3ZyZWcgKmluX3ZyZWcsCisJCQlpbnQgbnVtX3ZyZWcpCit7CisJaW50IGkgPSAwLCByYyA9 IDA7CisJc3RydWN0IGRzc192cmVnICpjdXJyX3ZyZWcgPSBOVUxMOworCWVudW0gZHNzX3ZyZWdf dHlwZSB0eXBlOworCisJaWYgKCFpbl92cmVnIHx8ICFudW1fdnJlZykKKwkJcmV0dXJuIHJjOwor CisJZm9yIChpID0gbnVtX3ZyZWctMTsgaSA+PSAwOyBpLS0pIHsKKwkJY3Vycl92cmVnID0gJmlu X3ZyZWdbaV07CisJCWlmIChjdXJyX3ZyZWctPnZyZWcpIHsKKwkJCXR5cGUgPSAocmVndWxhdG9y X2NvdW50X3ZvbHRhZ2VzKAorCQkJCWN1cnJfdnJlZy0+dnJlZykgPiAwKQorCQkJCT8gRFNTX1JF R19MRE8gOiBEU1NfUkVHX1ZTOworCQkJaWYgKHR5cGUgPT0gRFNTX1JFR19MRE8pIHsKKwkJCQly ZWd1bGF0b3Jfc2V0X3ZvbHRhZ2UoY3Vycl92cmVnLT52cmVnLAorCQkJCQkwLCBjdXJyX3ZyZWct Pm1heF92b2x0YWdlKTsKKwkJCX0KKwkJCWRldm1fcmVndWxhdG9yX3B1dChjdXJyX3ZyZWctPnZy ZWcpOworCQkJY3Vycl92cmVnLT52cmVnID0gTlVMTDsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIGludCBtc21fZHNzX2VuYWJsZV92cmVnKHN0cnVjdCBkc3NfdnJlZyAqaW5fdnJl ZywgaW50IG51bV92cmVnLCBpbnQgZW5hYmxlKQoreworCWludCBpID0gMCwgcmMgPSAwOworCWJv b2wgbmVlZF9zbGVlcDsKKworCWlmIChlbmFibGUpIHsKKwkJZm9yIChpID0gMDsgaSA8IG51bV92 cmVnOyBpKyspIHsKKwkJCWlmIChJU19FUlJfT1JfTlVMTChpbl92cmVnW2ldLnZyZWcpKSB7CisJ CQkJcmMgPSBQVFJfRVJSKGluX3ZyZWdbaV0udnJlZyk7CisJCQkJRFJNX0VSUk9SKCIlcFMtPiVz OiAlcyB2cmVnIGVycm9yLiByYz0lZFxuIiwKKwkJCQkJX19idWlsdGluX3JldHVybl9hZGRyZXNz KDApLCBfX2Z1bmNfXywKKwkJCQkJaW5fdnJlZ1tpXS52cmVnX25hbWUsIHJjKTsKKwkJCQlnb3Rv IHZyZWdfc2V0X29wdF9tb2RlX2ZhaWw7CisJCQl9CisJCQluZWVkX3NsZWVwID0gIXJlZ3VsYXRv cl9pc19lbmFibGVkKGluX3ZyZWdbaV0udnJlZyk7CisJCQlpZiAoaW5fdnJlZ1tpXS5wcmVfb25f c2xlZXAgJiYgbmVlZF9zbGVlcCkKKwkJCQl1c2xlZXBfcmFuZ2UoaW5fdnJlZ1tpXS5wcmVfb25f c2xlZXAgKiAxMDAwLAorCQkJCQlpbl92cmVnW2ldLnByZV9vbl9zbGVlcCAqIDEwMDApOworCQkJ cmMgPSByZWd1bGF0b3Jfc2V0X2xvYWQoaW5fdnJlZ1tpXS52cmVnLAorCQkJCWluX3ZyZWdbaV0u ZW5hYmxlX2xvYWQpOworCQkJaWYgKHJjIDwgMCkgeworCQkJCURSTV9FUlJPUigiJXBTLT4lczog JXMgc2V0IG9wdCBtIGZhaWxcbiIsCisJCQkJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSwg X19mdW5jX18sCisJCQkJCWluX3ZyZWdbaV0udnJlZ19uYW1lKTsKKwkJCQlnb3RvIHZyZWdfc2V0 X29wdF9tb2RlX2ZhaWw7CisJCQl9CisJCQlyYyA9IHJlZ3VsYXRvcl9lbmFibGUoaW5fdnJlZ1tp XS52cmVnKTsKKwkJCWlmIChpbl92cmVnW2ldLnBvc3Rfb25fc2xlZXAgJiYgbmVlZF9zbGVlcCkK KwkJCQl1c2xlZXBfcmFuZ2UoaW5fdnJlZ1tpXS5wb3N0X29uX3NsZWVwICogMTAwMCwKKwkJCQkJ aW5fdnJlZ1tpXS5wb3N0X29uX3NsZWVwICogMTAwMCk7CisJCQlpZiAocmMgPCAwKSB7CisJCQkJ RFJNX0VSUk9SKCIlcFMtPiVzOiAlcyBlbmFibGUgZmFpbGVkXG4iLAorCQkJCQlfX2J1aWx0aW5f cmV0dXJuX2FkZHJlc3MoMCksIF9fZnVuY19fLAorCQkJCQlpbl92cmVnW2ldLnZyZWdfbmFtZSk7 CisJCQkJZ290byBkaXNhYmxlX3ZyZWc7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlmb3IgKGkg PSBudW1fdnJlZy0xOyBpID49IDA7IGktLSkgeworCQkJaWYgKGluX3ZyZWdbaV0ucHJlX29mZl9z bGVlcCkKKwkJCQl1c2xlZXBfcmFuZ2UoaW5fdnJlZ1tpXS5wcmVfb2ZmX3NsZWVwICogMTAwMCwK KwkJCQkJaW5fdnJlZ1tpXS5wcmVfb2ZmX3NsZWVwICogMTAwMCk7CisJCQlyZWd1bGF0b3Jfc2V0 X2xvYWQoaW5fdnJlZ1tpXS52cmVnLAorCQkJCWluX3ZyZWdbaV0uZGlzYWJsZV9sb2FkKTsKKwkJ CXJlZ3VsYXRvcl9kaXNhYmxlKGluX3ZyZWdbaV0udnJlZyk7CisJCQlpZiAoaW5fdnJlZ1tpXS5w b3N0X29mZl9zbGVlcCkKKwkJCQl1c2xlZXBfcmFuZ2UoaW5fdnJlZ1tpXS5wb3N0X29mZl9zbGVl cCAqIDEwMDAsCisJCQkJCWluX3ZyZWdbaV0ucG9zdF9vZmZfc2xlZXAgKiAxMDAwKTsKKwkJfQor CX0KKwlyZXR1cm4gcmM7CisKK2Rpc2FibGVfdnJlZzoKKwlyZWd1bGF0b3Jfc2V0X2xvYWQoaW5f dnJlZ1tpXS52cmVnLCBpbl92cmVnW2ldLmRpc2FibGVfbG9hZCk7CisKK3ZyZWdfc2V0X29wdF9t b2RlX2ZhaWw6CisJZm9yIChpLS07IGkgPj0gMDsgaS0tKSB7CisJCWlmIChpbl92cmVnW2ldLnBy ZV9vZmZfc2xlZXApCisJCQl1c2xlZXBfcmFuZ2UoaW5fdnJlZ1tpXS5wcmVfb2ZmX3NsZWVwICog MTAwMCwKKwkJCQlpbl92cmVnW2ldLnByZV9vZmZfc2xlZXAgKiAxMDAwKTsKKwkJcmVndWxhdG9y X3NldF9sb2FkKGluX3ZyZWdbaV0udnJlZywKKwkJCWluX3ZyZWdbaV0uZGlzYWJsZV9sb2FkKTsK KwkJcmVndWxhdG9yX2Rpc2FibGUoaW5fdnJlZ1tpXS52cmVnKTsKKwkJaWYgKGluX3ZyZWdbaV0u cG9zdF9vZmZfc2xlZXApCisJCQl1c2xlZXBfcmFuZ2UoaW5fdnJlZ1tpXS5wb3N0X29mZl9zbGVl cCAqIDEwMDAsCisJCQkJaW5fdnJlZ1tpXS5wb3N0X29mZl9zbGVlcCAqIDEwMDApOworCX0KKwor CXJldHVybiByYzsKK30gLyogbXNtX2Rzc19lbmFibGVfdnJlZyAqLworCitzdGF0aWMgaW50IGRw X3Bvd2VyX3JlZ3VsYXRvcl9pbml0KHN0cnVjdCBkcF9wb3dlcl9wcml2YXRlICpwb3dlcikKK3sK KwlpbnQgcmMgPSAwLCBpID0gMCwgaiA9IDA7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl djsKKwlzdHJ1Y3QgZHBfcGFyc2VyICpwYXJzZXI7CisKKwlwYXJzZXIgPSBwb3dlci0+cGFyc2Vy OworCXBkZXYgPSBwb3dlci0+cGRldjsKKworCWZvciAoaSA9IERQX0NPUkVfUE07ICFyYyAmJiAo aSA8IERQX01BWF9QTSk7IGkrKykgeworCQlyYyA9IG1zbV9kc3NfaW5pdF92cmVnKCZwZGV2LT5k ZXYsCisJCQlwYXJzZXItPm1wW2ldLnZyZWdfY29uZmlnLAorCQkJcGFyc2VyLT5tcFtpXS5udW1f dnJlZyk7CisJCWlmIChyYykgeworCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gaW5pdCB2cmVncyBm b3IgJXNcbiIsCisJCQkJZHBfcGFyc2VyX3BtX25hbWUoaSkpOworCQkJZm9yIChqID0gaSAtIDE7 IGogPj0gRFBfQ09SRV9QTTsgai0tKSB7CisJCQkJbXNtX2Rzc19kZWluaXRfdnJlZygmcGRldi0+ ZGV2LAorCQkJCXBhcnNlci0+bXBbal0udnJlZ19jb25maWcsCisJCQkJcGFyc2VyLT5tcFtqXS5u dW1fdnJlZyk7CisJCQl9CisKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwl9CitlcnJvcjoKKwlyZXR1 cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIGRwX3Bvd2VyX3JlZ3VsYXRvcl9kZWluaXQoc3RydWN0 IGRwX3Bvd2VyX3ByaXZhdGUgKnBvd2VyKQoreworCWludCByYyA9IDAsIGkgPSAwOworCXN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IGRwX3BhcnNlciAqcGFyc2VyOworCisJ cGFyc2VyID0gcG93ZXItPnBhcnNlcjsKKwlwZGV2ID0gcG93ZXItPnBkZXY7CisKKwlmb3IgKGkg PSBEUF9DT1JFX1BNOyAoaSA8IERQX01BWF9QTSk7IGkrKykgeworCQlyYyA9IG1zbV9kc3NfZGVp bml0X3ZyZWcoJnBkZXYtPmRldiwKKwkJCXBhcnNlci0+bXBbaV0udnJlZ19jb25maWcsCisJCQlw YXJzZXItPm1wW2ldLm51bV92cmVnKTsKKwkJaWYgKHJjKQorCQkJRFJNX0VSUk9SKCJmYWlsZWQg dG8gZGVpbml0IHZyZWdzIGZvciAlc1xuIiwKKwkJCQlkcF9wYXJzZXJfcG1fbmFtZShpKSk7CisJ fQorfQorCitzdGF0aWMgaW50IGRwX3Bvd2VyX3JlZ3VsYXRvcl9jdHJsKHN0cnVjdCBkcF9wb3dl cl9wcml2YXRlICpwb3dlciwgYm9vbCBlbmFibGUpCit7CisJaW50IHJjID0gMCwgaSA9IDAsIGog PSAwOworCXN0cnVjdCBkcF9wYXJzZXIgKnBhcnNlciA9IHBvd2VyLT5wYXJzZXI7CisKKwlmb3Ig KGkgPSBEUF9DT1JFX1BNOyBpIDwgRFBfTUFYX1BNOyBpKyspIHsKKwkJcmMgPSBtc21fZHNzX2Vu YWJsZV92cmVnKAorCQkJcGFyc2VyLT5tcFtpXS52cmVnX2NvbmZpZywKKwkJCXBhcnNlci0+bXBb aV0ubnVtX3ZyZWcsIGVuYWJsZSk7CisJCWlmIChyYykgeworCQkJRFJNX0VSUk9SKCJmYWlsZWQg dG8gJyVzJyB2cmVncyBmb3IgJXNcbiIsCisJCQkJCWVuYWJsZSA/ICJlbmFibGUiIDogImRpc2Fi bGUiLAorCQkJCQlkcF9wYXJzZXJfcG1fbmFtZShpKSk7CisJCQlpZiAoZW5hYmxlKSB7CisJCQkJ Zm9yIChqID0gaS0xOyBqID49IERQX0NPUkVfUE07IGotLSkgeworCQkJCQltc21fZHNzX2VuYWJs ZV92cmVnKAorCQkJCQlwYXJzZXItPm1wW2pdLnZyZWdfY29uZmlnLAorCQkJCQlwYXJzZXItPm1w W2pdLm51bV92cmVnLCAwKTsKKwkJCQl9CisJCQl9CisJCQlnb3RvIGVycm9yOworCQl9CisJfQor ZXJyb3I6CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGRwX3Bvd2VyX3BpbmN0cmxfc2V0 KHN0cnVjdCBkcF9wb3dlcl9wcml2YXRlICpwb3dlciwgYm9vbCBhY3RpdmUpCit7CisJaW50IHJj ID0gLUVGQVVMVDsKKwlzdHJ1Y3QgcGluY3RybF9zdGF0ZSAqcGluX3N0YXRlOworCXN0cnVjdCBk cF9wYXJzZXIgKnBhcnNlciA9IHBvd2VyLT5wYXJzZXI7CisKKwlpZiAoSVNfRVJSX09SX05VTEwo cGFyc2VyLT5waW5jdHJsLnBpbikpCisJCXJldHVybiBQVFJfRVJSKHBhcnNlci0+cGluY3RybC5w aW4pOworCisJcGluX3N0YXRlID0gYWN0aXZlID8gcGFyc2VyLT5waW5jdHJsLnN0YXRlX2FjdGl2 ZQorCQkJCTogcGFyc2VyLT5waW5jdHJsLnN0YXRlX3N1c3BlbmQ7CisKKwlyYyA9IHBpbmN0cmxf c2VsZWN0X3N0YXRlKHBhcnNlci0+cGluY3RybC5waW4sIHBpbl9zdGF0ZSk7CisJaWYgKHJjKSB7 CisJCURSTV9FUlJPUigiY2FuIG5vdCBzZXQgJXMgcGluc1xuIiwKKwkJCWFjdGl2ZSA/ICJkcF9h Y3RpdmUiIDogImRwX3NsZWVwIik7CisJCXJldHVybiByYzsKKwl9CisKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIGludCBkcF9wb3dlcl9jbGtfaW5pdChzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSAq cG93ZXIpCit7CisJaW50IHJjID0gMDsKKwlzdHJ1Y3QgZHNzX21vZHVsZV9wb3dlciAqY29yZSwg KmN0cmw7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBvd2VyLT5wZGV2LT5kZXY7CisKKwljb3Jl ID0gJnBvd2VyLT5wYXJzZXItPm1wW0RQX0NPUkVfUE1dOworCWN0cmwgPSAmcG93ZXItPnBhcnNl ci0+bXBbRFBfQ1RSTF9QTV07CisKKwlpZiAocG93ZXItPnBhcnNlci0+cGxsICYmIHBvd2VyLT5w YXJzZXItPnBsbC0+Z2V0X3Byb3ZpZGVyKSB7CisJCXJjID0gcG93ZXItPnBhcnNlci0+cGxsLT5n ZXRfcHJvdmlkZXIocG93ZXItPnBhcnNlci0+cGxsLAorCQkJCSZwb3dlci0+bGlua19wcm92aWRl ciwgJnBvd2VyLT5waXhlbF9wcm92aWRlcik7CisJCWlmIChyYykgeworCQkJcHJfaW5mbygiJXM6 IGNhbid0IGdldCBwcm92aWRlciBmcm9tIHBsbCwgZG9uJ3Qgc2V0IHBhcmVudFxuIiwKKwkJCQlf X2Z1bmNfXyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXJjID0gbXNtX2Rzc19nZXRfY2xr KGRldiwgY29yZS0+Y2xrX2NvbmZpZywgY29yZS0+bnVtX2Nsayk7CisJaWYgKHJjKSB7CisJCURS TV9FUlJPUigiZmFpbGVkIHRvIGdldCAlcyBjbGsuIGVycj0lZFxuIiwKKwkJCWRwX3BhcnNlcl9w bV9uYW1lKERQX0NPUkVfUE0pLCByYyk7CisJCXJldHVybiByYzsKKwl9CisKKwlyYyA9IG1zbV9k c3NfZ2V0X2NsayhkZXYsIGN0cmwtPmNsa19jb25maWcsIGN0cmwtPm51bV9jbGspOworCWlmIChy YykgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBnZXQgJXMgY2xrLiBlcnI9JWRcbiIsCisJCQlk cF9wYXJzZXJfcG1fbmFtZShEUF9DVFJMX1BNKSwgcmMpOworCQltc21fZHNzX3B1dF9jbGsoY29y ZS0+Y2xrX2NvbmZpZywgY29yZS0+bnVtX2Nsayk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwor CXBvd2VyLT5waXhlbF9jbGtfcmNnID0gZGV2bV9jbGtfZ2V0KGRldiwgInBpeGVsX2Nsa19yY2ci KTsKKwlpZiAoSVNfRVJSKHBvd2VyLT5waXhlbF9jbGtfcmNnKSkgeworCQlEUk1fREVCVUdfRFAo IlVuYWJsZSB0byBnZXQgRFAgcGl4ZWwgY2xrIFJDR1xuIik7CisJCXBvd2VyLT5waXhlbF9jbGtf cmNnID0gTlVMTDsKKwkJbXNtX2Rzc19wdXRfY2xrKGNvcmUtPmNsa19jb25maWcsIGNvcmUtPm51 bV9jbGspOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBkcF9wb3dlcl9jbGtfZGVpbml0KHN0cnVjdCBkcF9wb3dlcl9wcml2YXRlICpwb3dlcikK K3sKKwlzdHJ1Y3QgZHNzX21vZHVsZV9wb3dlciAqY29yZSwgKmN0cmw7CisKKwljb3JlID0gJnBv d2VyLT5wYXJzZXItPm1wW0RQX0NPUkVfUE1dOworCWN0cmwgPSAmcG93ZXItPnBhcnNlci0+bXBb RFBfQ1RSTF9QTV07CisKKwlpZiAoIWNvcmUgfHwgIWN0cmwpIHsKKwkJRFJNX0VSUk9SKCJpbnZh bGlkIHBvd2VyX2RhdGFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltc21fZHNzX3B1 dF9jbGsoY3RybC0+Y2xrX2NvbmZpZywgY3RybC0+bnVtX2Nsayk7CisJbXNtX2Rzc19wdXRfY2xr KGNvcmUtPmNsa19jb25maWcsIGNvcmUtPm51bV9jbGspOworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50IGRwX3Bvd2VyX2Nsa19zZXRfcmF0ZShzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSAqcG93 ZXIsCisJCWVudW0gZHBfcG1fdHlwZSBtb2R1bGUsIGJvb2wgZW5hYmxlKQoreworCWludCByYyA9 IDA7CisJc3RydWN0IGRzc19tb2R1bGVfcG93ZXIgKm1wID0gJnBvd2VyLT5wYXJzZXItPm1wW21v ZHVsZV07CisKKwlpZiAoZW5hYmxlKSB7CisJCXJjID0gbXNtX2Rzc19jbGtfc2V0X3JhdGUobXAt PmNsa19jb25maWcsIG1wLT5udW1fY2xrKTsKKwkJaWYgKHJjKSB7CisJCQlEUk1fRVJST1IoImZh aWxlZCB0byBzZXQgY2xrcyByYXRlLlxuIik7CisJCQlyZXR1cm4gcmM7CisJCX0KKwl9CisKKwly YyA9IG1zbV9kc3NfZW5hYmxlX2NsayhtcC0+Y2xrX2NvbmZpZywgbXAtPm51bV9jbGssIGVuYWJs ZSk7CisJaWYgKHJjKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvICVkIGNsa3MsIGVycjogJWRc biIsIGVuYWJsZSwgcmMpOworCQlyZXR1cm4gcmM7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2lu dCBkcF9wb3dlcl9jbGtfZW5hYmxlKHN0cnVjdCBkcF9wb3dlciAqZHBfcG93ZXIsCisJCWVudW0g ZHBfcG1fdHlwZSBwbV90eXBlLCBib29sIGVuYWJsZSkKK3sKKwlpbnQgcmMgPSAwOworCXN0cnVj dCBkc3NfbW9kdWxlX3Bvd2VyICptcDsKKwlzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSAqcG93ZXI7 CisKKwlwb3dlciA9IGNvbnRhaW5lcl9vZihkcF9wb3dlciwgc3RydWN0IGRwX3Bvd2VyX3ByaXZh dGUsIGRwX3Bvd2VyKTsKKwltcCA9ICZwb3dlci0+cGFyc2VyLT5tcFtwbV90eXBlXTsKKworCWlm IChwbV90eXBlICE9IERQX0NPUkVfUE0gJiYgcG1fdHlwZSAhPSBEUF9DVFJMX1BNKSB7CisJCURS TV9FUlJPUigidW5zdXBwb3J0ZWQgcG93ZXIgbW9kdWxlOiAlc1xuIiwKKwkJCQlkcF9wYXJzZXJf cG1fbmFtZShwbV90eXBlKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChlbmFibGUp IHsKKwkJaWYgKHBtX3R5cGUgPT0gRFBfQ09SRV9QTSAmJiBkcF9wb3dlci0+Y29yZV9jbGtzX29u KSB7CisJCQlEUk1fREVCVUdfRFAoImNvcmUgY2xrcyBhbHJlYWR5IGVuYWJsZWRcbiIpOworCQkJ cmV0dXJuIDA7CisJCX0KKworCQlpZiAocG1fdHlwZSA9PSBEUF9DVFJMX1BNICYmIGRwX3Bvd2Vy LT5saW5rX2Nsa3Nfb24pIHsKKwkJCURSTV9ERUJVR19EUCgibGlua3MgY2xrcyBhbHJlYWR5IGVu YWJsZWRcbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKworCQlpZiAoKHBtX3R5cGUgPT0gRFBfQ1RS TF9QTSkgJiYgKCFkcF9wb3dlci0+Y29yZV9jbGtzX29uKSkgeworCQkJRFJNX0RFQlVHX0RQKCJO ZWVkIHRvIGVuYWJsZSBjb3JlIGNsa3MgYmVmb3JlIGxpbmsgY2xrc1xuIik7CisKKwkJCXJjID0g ZHBfcG93ZXJfY2xrX3NldF9yYXRlKHBvd2VyLCBEUF9DT1JFX1BNLCBlbmFibGUpOworCQkJaWYg KHJjKSB7CisJCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZW5hYmxlIGNsa3M6ICVzLiBlcnI9JWRc biIsCisJCQkJCWRwX3BhcnNlcl9wbV9uYW1lKERQX0NPUkVfUE0pLCByYyk7CisJCQkJcmV0dXJu IHJjOworCQkJfQorCQkJZHBfcG93ZXItPmNvcmVfY2xrc19vbiA9IHRydWU7CisJCX0KKwl9CisK KwlyYyA9IGRwX3Bvd2VyX2Nsa19zZXRfcmF0ZShwb3dlciwgcG1fdHlwZSwgZW5hYmxlKTsKKwlp ZiAocmMpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gJyVzJyBjbGtzIGZvcjogJXMuIGVycj0l ZFxuIiwKKwkJCWVuYWJsZSA/ICJlbmFibGUiIDogImRpc2FibGUiLAorCQkJZHBfcGFyc2VyX3Bt X25hbWUocG1fdHlwZSksIHJjKTsKKwkJCXJldHVybiByYzsKKwl9CisKKwlpZiAocG1fdHlwZSA9 PSBEUF9DT1JFX1BNKQorCQlkcF9wb3dlci0+Y29yZV9jbGtzX29uID0gZW5hYmxlOworCWVsc2UK KwkJZHBfcG93ZXItPmxpbmtfY2xrc19vbiA9IGVuYWJsZTsKKworCURSTV9ERUJVR19EUCgiJXMg Y2xvY2tzIGZvciAlc1xuIiwKKwkJCWVuYWJsZSA/ICJlbmFibGUiIDogImRpc2FibGUiLAorCQkJ ZHBfcGFyc2VyX3BtX25hbWUocG1fdHlwZSkpOworCURSTV9ERUJVR19EUCgibGlua19jbGtzOiVz IGNvcmVfY2xrczolc1xuIiwKKwkJZHBfcG93ZXItPmxpbmtfY2xrc19vbiA/ICJvbiIgOiAib2Zm IiwKKwkJZHBfcG93ZXItPmNvcmVfY2xrc19vbiA/ICJvbiIgOiAib2ZmIik7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludCBkcF9wb3dlcl9yZXF1ZXN0X2dwaW9zKHN0cnVjdCBkcF9wb3dl cl9wcml2YXRlICpwb3dlcikKK3sKKwlpbnQgcmMgPSAwLCBpOworCXN0cnVjdCBkZXZpY2UgKmRl diA9ICZwb3dlci0+cGRldi0+ZGV2OworCXN0cnVjdCBkc3NfbW9kdWxlX3Bvd2VyICptcCA9ICZw b3dlci0+cGFyc2VyLT5tcFtEUF9DT1JFX1BNXTsKKwlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0 IGdwaW9fbmFtZXNbXSA9IHsKKwkJImF1eF9lbmFibGUiLCAiYXV4X3NlbCIsICJ1c2JwbHVnX2Nj IiwKKwl9OworCisJaWYgKCFwb3dlcikgeworCQlEUk1fRVJST1IoImludmFsaWQgcG93ZXIgZGF0 YVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9T SVpFKGdwaW9fbmFtZXMpOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IGdwaW8gPSBtcC0+Z3Bpb19j b25maWdbaV0uZ3BpbzsKKworCQlpZiAoIWdwaW9faXNfdmFsaWQoZ3BpbykpCisJCQljb250aW51 ZTsKKworCQlyYyA9IGRldm1fZ3Bpb19yZXF1ZXN0KGRldiwgZ3BpbywgZ3Bpb19uYW1lc1tpXSk7 CisJCWlmIChyYykgeworCQkJRFJNX0VSUk9SKCJyZXF1ZXN0ICVzIGdwaW8gZmFpbGVkLCByYz0l ZFxuIiwKKwkJCQkgICAgICAgZ3Bpb19uYW1lc1tpXSwgcmMpOworCQkJcmV0dXJuIHJjOworCQl9 CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgYm9vbCBkcF9wb3dlcl9maW5kX2dwaW8oY29u c3QgY2hhciAqZ3BpbzEsIGNvbnN0IGNoYXIgKmdwaW8yKQoreworCXJldHVybiAhIXN0cm5zdHIo Z3BpbzEsIGdwaW8yLCBzdHJsZW4oZ3BpbzEpKTsKK30KKworc3RhdGljIHZvaWQgZHBfcG93ZXJf c2V0X2dwaW8oc3RydWN0IGRwX3Bvd2VyX3ByaXZhdGUgKnBvd2VyLCBib29sIGZsaXApCit7CisJ aW50IGk7CisJc3RydWN0IGRzc19tb2R1bGVfcG93ZXIgKm1wID0gJnBvd2VyLT5wYXJzZXItPm1w W0RQX0NPUkVfUE1dOworCXN0cnVjdCBkc3NfZ3BpbyAqY29uZmlnID0gbXAtPmdwaW9fY29uZmln OworCisJZm9yIChpID0gMDsgaSA8IG1wLT5udW1fZ3BpbzsgaSsrKSB7CisJCWlmIChkcF9wb3dl cl9maW5kX2dwaW8oY29uZmlnLT5ncGlvX25hbWUsICJhdXgtc2VsIikpCisJCQljb25maWctPnZh bHVlID0gZmxpcDsKKworCQlpZiAoZ3Bpb19pc192YWxpZChjb25maWctPmdwaW8pKSB7CisJCQlE Uk1fREVCVUdfRFAoImdwaW8gJXMsIHZhbHVlICVkXG4iLCBjb25maWctPmdwaW9fbmFtZSwKKwkJ CQljb25maWctPnZhbHVlKTsKKworCQkJaWYgKGRwX3Bvd2VyX2ZpbmRfZ3Bpbyhjb25maWctPmdw aW9fbmFtZSwgImF1eC1lbiIpIHx8CisJCQkgICAgZHBfcG93ZXJfZmluZF9ncGlvKGNvbmZpZy0+ Z3Bpb19uYW1lLCAiYXV4LXNlbCIpKQorCQkJCWdwaW9fZGlyZWN0aW9uX291dHB1dChjb25maWct PmdwaW8sCisJCQkJCWNvbmZpZy0+dmFsdWUpOworCQkJZWxzZQorCQkJCWdwaW9fc2V0X3ZhbHVl KGNvbmZpZy0+Z3BpbywgY29uZmlnLT52YWx1ZSk7CisKKwkJfQorCQljb25maWcrKzsKKwl9Cit9 CisKK3N0YXRpYyBpbnQgZHBfcG93ZXJfY29uZmlnX2dwaW9zKHN0cnVjdCBkcF9wb3dlcl9wcml2 YXRlICpwb3dlciwgYm9vbCBmbGlwLAorCQkJCQlib29sIGVuYWJsZSkKK3sKKwlpbnQgcmMgPSAw LCBpOworCXN0cnVjdCBkc3NfbW9kdWxlX3Bvd2VyICptcCA9ICZwb3dlci0+cGFyc2VyLT5tcFtE UF9DT1JFX1BNXTsKKwlzdHJ1Y3QgZHNzX2dwaW8gKmNvbmZpZyA9IG1wLT5ncGlvX2NvbmZpZzsK KworCW1wID0gJnBvd2VyLT5wYXJzZXItPm1wW0RQX0NPUkVfUE1dOworCWNvbmZpZyA9IG1wLT5n cGlvX2NvbmZpZzsKKworCWlmIChlbmFibGUpIHsKKwkJcmMgPSBkcF9wb3dlcl9yZXF1ZXN0X2dw aW9zKHBvd2VyKTsKKwkJaWYgKHJjKSB7CisJCQlEUk1fRVJST1IoImdwaW8gcmVxdWVzdCBmYWls ZWRcbiIpOworCQkJcmV0dXJuIHJjOworCQl9CisKKwkJZHBfcG93ZXJfc2V0X2dwaW8ocG93ZXIs IGZsaXApOworCX0gZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPCBtcC0+bnVtX2dwaW87IGkrKykg eworCQkJZ3Bpb19zZXRfdmFsdWUoY29uZmlnW2ldLmdwaW8sIDApOworCQkJZ3Bpb19mcmVlKGNv bmZpZ1tpXS5ncGlvKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitpbnQgZHBfcG93ZXJf Y2xpZW50X2luaXQoc3RydWN0IGRwX3Bvd2VyICpkcF9wb3dlcikKK3sKKwlpbnQgcmMgPSAwOwor CXN0cnVjdCBkcF9wb3dlcl9wcml2YXRlICpwb3dlcjsKKworCWlmICghZHBfcG93ZXIpIHsKKwkJ RFJNX0VSUk9SKCJpbnZhbGlkIHBvd2VyIGRhdGFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9 CisKKwlwb3dlciA9IGNvbnRhaW5lcl9vZihkcF9wb3dlciwgc3RydWN0IGRwX3Bvd2VyX3ByaXZh dGUsIGRwX3Bvd2VyKTsKKworCXBtX3J1bnRpbWVfZW5hYmxlKCZwb3dlci0+cGRldi0+ZGV2KTsK KworCXJjID0gZHBfcG93ZXJfcmVndWxhdG9yX2luaXQocG93ZXIpOworCWlmIChyYykgeworCQlE Uk1fRVJST1IoImZhaWxlZCB0byBpbml0IHJlZ3VsYXRvcnMgJWRcbiIsIHJjKTsKKwkJZ290byBl cnJvcl9wb3dlcjsKKwl9CisKKwlyYyA9IGRwX3Bvd2VyX2Nsa19pbml0KHBvd2VyKTsKKwlpZiAo cmMpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gaW5pdCBjbG9ja3MgJWRcbiIsIHJjKTsKKwkJ Z290byBlcnJvcl9jbGs7CisJfQorCXJldHVybiAwOworCitlcnJvcl9jbGs6CisJZHBfcG93ZXJf cmVndWxhdG9yX2RlaW5pdChwb3dlcik7CitlcnJvcl9wb3dlcjoKKwlwbV9ydW50aW1lX2Rpc2Fi bGUoJnBvd2VyLT5wZGV2LT5kZXYpOworCXJldHVybiByYzsKK30KKwordm9pZCBkcF9wb3dlcl9j bGllbnRfZGVpbml0KHN0cnVjdCBkcF9wb3dlciAqZHBfcG93ZXIpCit7CisJc3RydWN0IGRwX3Bv d2VyX3ByaXZhdGUgKnBvd2VyOworCisJaWYgKCFkcF9wb3dlcikgeworCQlEUk1fRVJST1IoImlu dmFsaWQgcG93ZXIgZGF0YVxuIik7CisJCXJldHVybjsKKwl9CisKKwlwb3dlciA9IGNvbnRhaW5l cl9vZihkcF9wb3dlciwgc3RydWN0IGRwX3Bvd2VyX3ByaXZhdGUsIGRwX3Bvd2VyKTsKKworCWRw X3Bvd2VyX2Nsa19kZWluaXQocG93ZXIpOworCWRwX3Bvd2VyX3JlZ3VsYXRvcl9kZWluaXQocG93 ZXIpOworCXBtX3J1bnRpbWVfZGlzYWJsZSgmcG93ZXItPnBkZXYtPmRldik7CisKK30KKworaW50 IGRwX3Bvd2VyX3NldF9saW5rX2Nsa19wYXJlbnQoc3RydWN0IGRwX3Bvd2VyICpkcF9wb3dlcikK K3sKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBkcF9wb3dlcl9wcml2YXRlICpwb3dlcjsKKwl1MzIg bnVtOworCXN0cnVjdCBkc3NfY2xrICpjZmc7CisJY2hhciAqbmFtZSA9ICJjdHJsX2xpbmtfY2xr IjsKKworCWlmICghZHBfcG93ZXIpIHsKKwkJRFJNX0VSUk9SKCJpbnZhbGlkIHBvd2VyIGRhdGFc biIpOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlwb3dlciA9IGNvbnRh aW5lcl9vZihkcF9wb3dlciwgc3RydWN0IGRwX3Bvd2VyX3ByaXZhdGUsIGRwX3Bvd2VyKTsKKwor CW51bSA9IHBvd2VyLT5wYXJzZXItPm1wW0RQX0NUUkxfUE1dLm51bV9jbGs7CisJY2ZnID0gcG93 ZXItPnBhcnNlci0+bXBbRFBfQ1RSTF9QTV0uY2xrX2NvbmZpZzsKKworCXdoaWxlIChudW0gJiYg c3RyY21wKGNmZy0+Y2xrX25hbWUsIG5hbWUpKSB7CisJCW51bS0tOworCQljZmcrKzsKKwl9CisK KwlpZiAobnVtICYmIHBvd2VyLT5saW5rX3Byb3ZpZGVyKSB7CisJCXBvd2VyLT5saW5rX2Nsa19z cmMgPSBjbGtfZ2V0X3BhcmVudChjZmctPmNsayk7CisJCQlpZiAocG93ZXItPmxpbmtfY2xrX3Ny YykgeworCQkJCWNsa19zZXRfcGFyZW50KHBvd2VyLT5saW5rX2Nsa19zcmMsIHBvd2VyLT5saW5r X3Byb3ZpZGVyKTsKKwkJCQlEUk1fREVCVUdfRFAoIiVzOiBpcyB0aGUgcGFyZW50IG9mIGNsaz0l c1xuIiwKKwkJCQkJCV9fY2xrX2dldF9uYW1lKHBvd2VyLT5saW5rX3Byb3ZpZGVyKSwKKwkJCQkJ CV9fY2xrX2dldF9uYW1lKHBvd2VyLT5saW5rX2Nsa19zcmMpKTsKKwkJCX0gZWxzZSB7CisJCQkJ RFJNX0VSUk9SKCJjb3VsZG4ndCBnZXQgcGFyZW50IGZvciBjbGs9JXNcbiIsIG5hbWUpOworCQkJ CXJjID0gLUVJTlZBTDsKKwkJCX0KKwl9IGVsc2UgeworCQlEUk1fRVJST1IoIiVzIGNsb2NrIGNv dWxkIG5vdCBiZSBzZXQgcGFyZW50XG4iLCBuYW1lKTsKKwkJcmMgPSAtRUlOVkFMOworCX0KK2V4 aXQ6CisJcmV0dXJuIHJjOworfQorCitpbnQgZHBfcG93ZXJfc2V0X3BpeGVsX2Nsa19wYXJlbnQo c3RydWN0IGRwX3Bvd2VyICpkcF9wb3dlcikKK3sKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBkcF9w b3dlcl9wcml2YXRlICpwb3dlcjsKKworCXBvd2VyID0gY29udGFpbmVyX29mKGRwX3Bvd2VyLCBz dHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSwgZHBfcG93ZXIpOworCisJaWYgKHBvd2VyLT5waXhlbF9j bGtfcmNnICYmIHBvd2VyLT5waXhlbF9wcm92aWRlcikgeworCQlyYyA9IGNsa19zZXRfcGFyZW50 KHBvd2VyLT5waXhlbF9jbGtfcmNnLCBwb3dlci0+cGl4ZWxfcHJvdmlkZXIpOworCQlpZiAocmMp IHsKKwkJCURSTV9FUlJPUigiZmFpbGVkIHRvIHNldCBwYXJlbnQgY2xrIHNyYywgJWRcbiIsIHJj KTsKKwkJCXJldHVybiByYzsKKwkJfQorCQlEUk1fREVCVUdfRFAoIiVzOiBpcyB0aGUgcGFyZW50 IG9mIGNsaz0lc1xuIiwKKwkJCQkJX19jbGtfZ2V0X25hbWUocG93ZXItPnBpeGVsX3Byb3ZpZGVy KSwKKwkJCQkJX19jbGtfZ2V0X25hbWUocG93ZXItPnBpeGVsX2Nsa19yY2cpKTsKKwl9CisKKwly ZXR1cm4gMDsKK30KKworaW50IGRwX3Bvd2VyX2luaXQoc3RydWN0IGRwX3Bvd2VyICpkcF9wb3dl ciwgYm9vbCBmbGlwKQoreworCWludCByYyA9IDA7CisJc3RydWN0IGRwX3Bvd2VyX3ByaXZhdGUg KnBvd2VyOworCisJaWYgKCFkcF9wb3dlcikgeworCQlEUk1fRVJST1IoImludmFsaWQgcG93ZXIg ZGF0YVxuIik7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBleGl0OworCX0KKworCXBvd2VyID0g Y29udGFpbmVyX29mKGRwX3Bvd2VyLCBzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSwgZHBfcG93ZXIp OworCisJcG1fcnVudGltZV9nZXRfc3luYygmcG93ZXItPnBkZXYtPmRldik7CisJcmMgPSBkcF9w b3dlcl9yZWd1bGF0b3JfY3RybChwb3dlciwgdHJ1ZSk7CisJaWYgKHJjKSB7CisJCURSTV9FUlJP UigiZmFpbGVkIHRvIGVuYWJsZSByZWd1bGF0b3JzLCAlZFxuIiwgcmMpOworCQlnb3RvIGV4aXQ7 CisJfQorCisJcmMgPSBkcF9wb3dlcl9waW5jdHJsX3NldChwb3dlciwgdHJ1ZSk7CisJaWYgKHJj KSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIHNldCBwaW5jdHJsIHN0YXRlLCAlZFxuIiwgcmMp OworCQlnb3RvIGVycl9waW5jdHJsOworCX0KKworCXJjID0gZHBfcG93ZXJfY29uZmlnX2dwaW9z KHBvd2VyLCBmbGlwLCB0cnVlKTsKKwlpZiAocmMpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8g ZW5hYmxlIGdwaW9zLCAlZFxuIiwgcmMpOworCQlnb3RvIGVycl9ncGlvOworCX0KKworCXJjID0g ZHBfcG93ZXJfY2xrX2VuYWJsZShkcF9wb3dlciwgRFBfQ09SRV9QTSwgdHJ1ZSk7CisJaWYgKHJj KSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGVuYWJsZSBEUCBjb3JlIGNsb2NrcywgJWRcbiIs IHJjKTsKKwkJZ290byBlcnJfY2xrOworCX0KKworCXJldHVybiAwOworCitlcnJfY2xrOgorCWRw X3Bvd2VyX2NvbmZpZ19ncGlvcyhwb3dlciwgZmxpcCwgZmFsc2UpOworZXJyX2dwaW86CisJZHBf cG93ZXJfcGluY3RybF9zZXQocG93ZXIsIGZhbHNlKTsKK2Vycl9waW5jdHJsOgorCWRwX3Bvd2Vy X3JlZ3VsYXRvcl9jdHJsKHBvd2VyLCBmYWxzZSk7CitleGl0OgorCXBtX3J1bnRpbWVfcHV0X3N5 bmMoJnBvd2VyLT5wZGV2LT5kZXYpOworCXJldHVybiByYzsKK30KKworaW50IGRwX3Bvd2VyX2Rl aW5pdChzdHJ1Y3QgZHBfcG93ZXIgKmRwX3Bvd2VyKQoreworCXN0cnVjdCBkcF9wb3dlcl9wcml2 YXRlICpwb3dlcjsKKworCXBvd2VyID0gY29udGFpbmVyX29mKGRwX3Bvd2VyLCBzdHJ1Y3QgZHBf cG93ZXJfcHJpdmF0ZSwgZHBfcG93ZXIpOworCisJZHBfcG93ZXJfY2xrX2VuYWJsZShkcF9wb3dl ciwgRFBfQ09SRV9QTSwgZmFsc2UpOworCWRwX3Bvd2VyX2NvbmZpZ19ncGlvcyhwb3dlciwgZmFs c2UsIGZhbHNlKTsKKwlkcF9wb3dlcl9waW5jdHJsX3NldChwb3dlciwgZmFsc2UpOworCWRwX3Bv d2VyX3JlZ3VsYXRvcl9jdHJsKHBvd2VyLCBmYWxzZSk7CisJcG1fcnVudGltZV9wdXRfc3luYygm cG93ZXItPnBkZXYtPmRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBkcF9wb3dlciAqZHBf cG93ZXJfZ2V0KHN0cnVjdCBkcF9wYXJzZXIgKnBhcnNlcikKK3sKKwlpbnQgcmMgPSAwOworCXN0 cnVjdCBkcF9wb3dlcl9wcml2YXRlICpwb3dlcjsKKwlzdHJ1Y3QgZHBfcG93ZXIgKmRwX3Bvd2Vy OworCisJaWYgKCFwYXJzZXIpIHsKKwkJRFJNX0VSUk9SKCJpbnZhbGlkIGlucHV0XG4iKTsKKwkJ cmMgPSAtRUlOVkFMOworCQlnb3RvIGVycm9yOworCX0KKworCXBvd2VyID0gZGV2bV9remFsbG9j KCZwYXJzZXItPnBkZXYtPmRldiwgc2l6ZW9mKCpwb3dlciksIEdGUF9LRVJORUwpOworCWlmICgh cG93ZXIpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yOworCX0KKworCXBvd2VyLT5w YXJzZXIgPSBwYXJzZXI7CisJcG93ZXItPnBkZXYgPSBwYXJzZXItPnBkZXY7CisKKwlkcF9wb3dl ciA9ICZwb3dlci0+ZHBfcG93ZXI7CisKKwlyZXR1cm4gZHBfcG93ZXI7CitlcnJvcjoKKwlyZXR1 cm4gRVJSX1BUUihyYyk7Cit9CisKK3ZvaWQgZHBfcG93ZXJfcHV0KHN0cnVjdCBkcF9wb3dlciAq ZHBfcG93ZXIpCit7CisJc3RydWN0IGRwX3Bvd2VyX3ByaXZhdGUgKnBvd2VyID0gTlVMTDsKKwor CWlmICghZHBfcG93ZXIpCisJCXJldHVybjsKKworCXBvd2VyID0gY29udGFpbmVyX29mKGRwX3Bv d2VyLCBzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSwgZHBfcG93ZXIpOworCisJZGV2bV9rZnJlZSgm cG93ZXItPnBkZXYtPmRldiwgcG93ZXIpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L21zbS9kcC9kcF9wb3dlci5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wb3dlci5oCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZTJkM2IKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3Bvd2VyLmgKQEAgLTAsMCArMSw1MSBAQAor LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLworLyoKKyAqIENvcHly aWdodCAoYykgMjAxMi0yMDE5LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNl cnZlZC4KKyAqLworCisjaWZuZGVmIF9EUF9QT1dFUl9IXworI2RlZmluZSBfRFBfUE9XRVJfSF8K KworI2luY2x1ZGUgImRwX3BhcnNlci5oIgorCisvKioKKyAqIHNydWN0IGRwX3Bvd2VyIC0gRGlz cGxheVBvcnQncyBwb3dlciByZWxhdGVkIGRhdGEKKyAqCisgKiBAaW5pdDogaW5pdGlhbGl6ZXMg dGhlIHJlZ3VsYXRvcnMvY29yZSBjbG9ja3MvR1BJT3MvcGluY3RybAorICogQGRlaW5pdDogdHVy bnMgb2ZmIHRoZSByZWd1bGF0b3JzL2NvcmUgY2xvY2tzL0dQSU9zL3BpbmN0cmwKKyAqIEBjbGtf ZW5hYmxlOiBlbmFibGUvZGlzYWJsZSB0aGUgRFAgY2xvY2tzCisgKiBAc2V0X3BpeGVsX2Nsa19w YXJlbnQ6IHNldCB0aGUgcGFyZW50IG9mIERQIHBpeGVsIGNsb2NrCisgKi8KK3N0cnVjdCBkcF9w b3dlciB7CisJYm9vbCBjb3JlX2Nsa3Nfb247CisJYm9vbCBsaW5rX2Nsa3Nfb247Cit9OworCitp bnQgZHBfcG93ZXJfaW5pdChzdHJ1Y3QgZHBfcG93ZXIgKnBvd2VyLCBib29sIGZsaXApOworaW50 IGRwX3Bvd2VyX2RlaW5pdChzdHJ1Y3QgZHBfcG93ZXIgKnBvd2VyKTsKK2ludCBkcF9wb3dlcl9j bGtfZW5hYmxlKHN0cnVjdCBkcF9wb3dlciAqcG93ZXIsIGVudW0gZHBfcG1fdHlwZSBwbV90eXBl LAorCQkJCWJvb2wgZW5hYmxlKTsKK2ludCBkcF9wb3dlcl9zZXRfbGlua19jbGtfcGFyZW50KHN0 cnVjdCBkcF9wb3dlciAqcG93ZXIpOworaW50IGRwX3Bvd2VyX3NldF9waXhlbF9jbGtfcGFyZW50 KHN0cnVjdCBkcF9wb3dlciAqcG93ZXIpOworaW50IGRwX3Bvd2VyX2NsaWVudF9pbml0KHN0cnVj dCBkcF9wb3dlciAqcG93ZXIpOwordm9pZCBkcF9wb3dlcl9jbGllbnRfZGVpbml0KHN0cnVjdCBk cF9wb3dlciAqcG93ZXIpOworCisvKioKKyAqIGRwX3Bvd2VyX2dldCgpIC0gY29uZmlndXJlIGFu ZCBnZXQgdGhlIERpc3BsYXlQb3J0IHBvd2VyIG1vZHVsZSBkYXRhCisgKgorICogQHBhcnNlcjog aW5zdGFuY2Ugb2YgcGFyc2VyIG1vZHVsZQorICogcmV0dXJuOiBwb2ludGVyIHRvIGFsbG9jYXRl ZCBwb3dlciBtb2R1bGUgZGF0YQorICoKKyAqIFRoaXMgQVBJIHdpbGwgY29uZmlndXJlIHRoZSBE aXNwbGF5UG9ydCdzIHBvd2VyIG1vZHVsZSBhbmQgcHJvdmlkZXMKKyAqIG1ldGhvZHMgdG8gYmUg Y2FsbGVkIGJ5IHRoZSBjbGllbnQgdG8gY29uZmlndXJlIHRoZSBwb3dlciByZWxhdGVkCisgKiBt b2R1ZWxlcy4KKyAqLworc3RydWN0IGRwX3Bvd2VyICpkcF9wb3dlcl9nZXQoc3RydWN0IGRwX3Bh cnNlciAqcGFyc2VyKTsKKworLyoqCisgKiBkcF9wb3dlcl9wdXQoKSAtIHJlbGVhc2UgdGhlIHBv d2VyIHJlbGF0ZWQgcmVzb3VyY2VzCisgKgorICogQHBvd2VyOiBwb2ludGVyIHRvIHRoZSBwb3dl ciBtb2R1bGUncyBkYXRhCisgKi8KK3ZvaWQgZHBfcG93ZXJfcHV0KHN0cnVjdCBkcF9wb3dlciAq cG93ZXIpOworI2VuZGlmIC8qIF9EUF9QT1dFUl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL21zbS9kcC9kcF9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcmVnLmgK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEwMDhlNwotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcmVnLmgKQEAgLTAsMCArMSw0NzUgQEAK Ky8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KKy8qCisgKiBDb3B5 cmlnaHQgKGMpIDIwMTctMjAxOSwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCisgKi8KKworI2lmbmRlZiBfRFBfUkVHX0hfCisjZGVmaW5lIF9EUF9SRUdfSF8KKwor LyogRFBfVFggUmVnaXN0ZXJzICovCisjZGVmaW5lIFJFR19EUF9IV19WRVJTSU9OCQkJKDB4MDAw MDAwMDApCisKKyNkZWZpbmUgUkVHX0RQX1NXX1JFU0VUCQkJCSgweDAwMDAwMDEwKQorI2RlZmlu ZSBEUF9TV19SRVNFVAkJCQkoMHgwMDAwMDAwMSkKKworI2RlZmluZSBSRUdfRFBfUEhZX0NUUkwJ CQkJKDB4MDAwMDAwMTQpCisjZGVmaW5lIERQX1BIWV9DVFJMX1NXX1JFU0VUX1BMTAkJKDB4MDAw MDAwMDEpCisjZGVmaW5lIERQX1BIWV9DVFJMX1NXX1JFU0VUCQkJKDB4MDAwMDAwMDQpCisKKyNk ZWZpbmUgUkVHX0RQX0NMS19DVFJMCQkJCSgweDAwMDAwMDE4KQorI2RlZmluZSBSRUdfRFBfQ0xL X0FDVElWRQkJCSgweDAwMDAwMDFDKQorI2RlZmluZSBSRUdfRFBfSU5UUl9TVEFUVVMJCQkoMHgw MDAwMDAyMCkKKyNkZWZpbmUgUkVHX0RQX0lOVFJfU1RBVFVTMgkJCSgweDAwMDAwMDI0KQorI2Rl ZmluZSBSRUdfRFBfSU5UUl9TVEFUVVMzCQkJKDB4MDAwMDAwMjgpCisKKyNkZWZpbmUgUkVHX0RQ X0RQX0hQRF9DVFJMCQkJKDB4MDAwMDAwMDApCisjZGVmaW5lIERQX0RQX0hQRF9DVFJMX0hQRF9F TgkJCSgweDAwMDAwMDAxKQorCisjZGVmaW5lIFJFR19EUF9EUF9IUERfSU5UX1NUQVRVUwkJKDB4 MDAwMDAwMDQpCisKKyNkZWZpbmUgUkVHX0RQX0RQX0hQRF9JTlRfQUNLCQkJKDB4MDAwMDAwMDgp CisjZGVmaW5lIERQX0RQX0hQRF9QTFVHX0lOVF9BQ0sJCQkoMHgwMDAwMDAwMSkKKyNkZWZpbmUg RFBfRFBfSVJRX0hQRF9JTlRfQUNLCQkJKDB4MDAwMDAwMDIpCisjZGVmaW5lIERQX0RQX0hQRF9S RVBMVUdfSU5UX0FDSwkJKDB4MDAwMDAwMDQpCisjZGVmaW5lIERQX0RQX0hQRF9VTlBMVUdfSU5U X0FDSwkJKDB4MDAwMDAwMDgpCisKKyNkZWZpbmUgUkVHX0RQX0RQX0hQRF9JTlRfTUFTSwkJCSgw eDAwMDAwMDBDKQorI2RlZmluZSBEUF9EUF9IUERfUExVR19JTlRfTUFTSwkJCSgweDAwMDAwMDAx KQorI2RlZmluZSBEUF9EUF9JUlFfSFBEX0lOVF9NQVNLCQkJKDB4MDAwMDAwMDIpCisjZGVmaW5l IERQX0RQX0hQRF9SRVBMVUdfSU5UX01BU0sJCSgweDAwMDAwMDA0KQorI2RlZmluZSBEUF9EUF9I UERfVU5QTFVHX0lOVF9NQVNLCQkoMHgwMDAwMDAwOCkKKworI2RlZmluZSBSRUdfRFBfRFBfSFBE X1JFRlRJTUVSCQkJKDB4MDAwMDAwMTgpCisjZGVmaW5lIFJFR19EUF9EUF9IUERfRVZFTlRfVElN RV8wCQkoMHgwMDAwMDAxQykKKyNkZWZpbmUgUkVHX0RQX0RQX0hQRF9FVkVOVF9USU1FXzEJCSgw eDAwMDAwMDIwKQorCisjZGVmaW5lIFJFR19EUF9BVVhfQ1RSTAkJCQkoMHgwMDAwMDAzMCkKKyNk ZWZpbmUgRFBfQVVYX0NUUkxfRU5BQkxFCQkJKDB4MDAwMDAwMDEpCisjZGVmaW5lIERQX0FVWF9D VFJMX1JFU0VUCQkJKDB4MDAwMDAwMDIpCisKKyNkZWZpbmUgUkVHX0RQX0FVWF9EQVRBCQkJCSgw eDAwMDAwMDM0KQorCisjZGVmaW5lIFJFR19EUF9BVVhfVFJBTlNfQ1RSTAkJCSgweDAwMDAwMDM4 KQorI2RlZmluZSBEUF9BVVhfVFJBTlNfQ1RSTF9JMkMJCQkoMHgwMDAwMDEwMCkKKyNkZWZpbmUg RFBfQVVYX1RSQU5TX0NUUkxfR08JCQkoMHgwMDAwMDIwMCkKKworI2RlZmluZSBSRUdfRFBfVElN RU9VVF9DT1VOVAkJCSgweDAwMDAwMDNDKQorI2RlZmluZSBSRUdfRFBfQVVYX0xJTUlUUwkJCSgw eDAwMDAwMDQwKQorI2RlZmluZSBSRUdfRFBfQVVYX1NUQVRVUwkJCSgweDAwMDAwMDQ0KQorCisj ZGVmaW5lIERQX0RQQ0RfQ1BfSVJRCQkJCSgweDIwMSkKKyNkZWZpbmUgRFBfRFBDRF9SWFNUQVRV UwkJCSgweDY5NDkzKQorCisjZGVmaW5lIERQX0lOVEVSUlVQVF9UUkFOU19OVU0JCQkoMHgwMDAw MDBBMCkKKworI2RlZmluZSBSRUdfRFBfTUFJTkxJTktfQ1RSTAkJCSgweDAwMDAwMDAwKQorI2Rl ZmluZSBEUF9NQUlOTElOS19DVFJMX0VOQUJMRQkJCSgweDAwMDAwMDAxKQorI2RlZmluZSBEUF9N QUlOTElOS19DVFJMX1JFU0VUCQkJKDB4MDAwMDAwMDIpCisjZGVmaW5lIERQX01BSU5MSU5LX0ZC X0JPVU5EQVJZX1NFTAkJKDB4MDIwMDAwMDApCisKKyNkZWZpbmUgUkVHX0RQX1NUQVRFX0NUUkwJ CQkoMHgwMDAwMDAwNCkKKyNkZWZpbmUgRFBfU1RBVEVfQ1RSTF9MSU5LX1RSQUlOSU5HX1BBVFRF Uk4xCSgweDAwMDAwMDAxKQorI2RlZmluZSBEUF9TVEFURV9DVFJMX0xJTktfVFJBSU5JTkdfUEFU VEVSTjIJKDB4MDAwMDAwMDIpCisjZGVmaW5lIERQX1NUQVRFX0NUUkxfTElOS19UUkFJTklOR19Q QVRURVJOMwkoMHgwMDAwMDAwNCkKKyNkZWZpbmUgRFBfU1RBVEVfQ1RSTF9MSU5LX1RSQUlOSU5H X1BBVFRFUk40CSgweDAwMDAwMDA4KQorI2RlZmluZSBEUF9TVEFURV9DVFJMX0xJTktfU1lNQk9M X0VSUl9NRUFTVVJFCSgweDAwMDAwMDEwKQorI2RlZmluZSBEUF9TVEFURV9DVFJMX0xJTktfUFJC UzcJCSgweDAwMDAwMDIwKQorI2RlZmluZSBEUF9TVEFURV9DVFJMX0xJTktfVEVTVF9DVVNUT01f UEFUVEVSTgkoMHgwMDAwMDA0MCkKKyNkZWZpbmUgRFBfU1RBVEVfQ1RSTF9TRU5EX1ZJREVPCQko MHgwMDAwMDA4MCkKKyNkZWZpbmUgRFBfU1RBVEVfQ1RSTF9QVVNIX0lETEUgCQkoMHgwMDAwMDEw MCkKKworI2RlZmluZSBSRUdfRFBfQ09ORklHVVJBVElPTl9DVFJMCQkoMHgwMDAwMDAwOCkKKyNk ZWZpbmUgRFBfQ09ORklHVVJBVElPTl9DVFJMX1NZTkNfQVNZTkNfQ0xLCSgweDAwMDAwMDAxKQor I2RlZmluZSBEUF9DT05GSUdVUkFUSU9OX0NUUkxfU1RBVElDX0RZTkFNSUNfQ04gKDB4MDAwMDAw MDIpCisjZGVmaW5lIERQX0NPTkZJR1VSQVRJT05fQ1RSTF9QX0lOVEVSTEFDRUQJKDB4MDAwMDAw MDQpCisjZGVmaW5lIERQX0NPTkZJR1VSQVRJT05fQ1RSTF9JTlRFUkxBQ0VEX0JURgkoMHgwMDAw MDAwOCkKKyNkZWZpbmUgRFBfQ09ORklHVVJBVElPTl9DVFJMX05VTV9PRl9MQU5FUwkoMHgwMDAw MDAxMCkKKyNkZWZpbmUgRFBfQ09ORklHVVJBVElPTl9DVFJMX0VOSEFOQ0VEX0ZSQU1JTkcJKDB4 MDAwMDAwNDApCisjZGVmaW5lIERQX0NPTkZJR1VSQVRJT05fQ1RSTF9TRU5EX1ZTQwkJKDB4MDAw MDAwODApCisjZGVmaW5lIERQX0NPTkZJR1VSQVRJT05fQ1RSTF9CUEMJCSgweDAwMDAwMTAwKQor I2RlZmluZSBEUF9DT05GSUdVUkFUSU9OX0NUUkxfQVNTUgkJKDB4MDAwMDA0MDApCisjZGVmaW5l IERQX0NPTkZJR1VSQVRJT05fQ1RSTF9SR0JfWVVWCQkoMHgwMDAwMDgwMCkKKyNkZWZpbmUgRFBf Q09ORklHVVJBVElPTl9DVFJMX0xTQ0xLX0RJVgkJKDB4MDAwMDIwMDApCisjZGVmaW5lIERQX0NP TkZJR1VSQVRJT05fQ1RSTF9OVU1fT0ZfTEFORVNfU0hJRlQgICAgICAoMHgwNCkKKyNkZWZpbmUg RFBfQ09ORklHVVJBVElPTl9DVFJMX0JQQ19TSElGVCAJICAgICAgKDB4MDgpCisjZGVmaW5lIERQ X0NPTkZJR1VSQVRJT05fQ1RSTF9MU0NMS19ESVZfU0hJRlQJICAgICAgKDB4MEQpCisKKyNkZWZp bmUgUkVHX0RQX1NPRlRXQVJFX01WSUQJCQkoMHgwMDAwMDAxMCkKKyNkZWZpbmUgUkVHX0RQX1NP RlRXQVJFX05WSUQJCQkoMHgwMDAwMDAxOCkKKyNkZWZpbmUgUkVHX0RQX1RPVEFMX0hPUl9WRVIJ CQkoMHgwMDAwMDAxQykKKyNkZWZpbmUgUkVHX0RQX1NUQVJUX0hPUl9WRVJfRlJPTV9TWU5DCQko MHgwMDAwMDAyMCkKKyNkZWZpbmUgUkVHX0RQX0hTWU5DX1ZTWU5DX1dJRFRIX1BPTEFSSVRZCSgw eDAwMDAwMDI0KQorI2RlZmluZSBSRUdfRFBfQUNUSVZFX0hPUl9WRVIJCQkoMHgwMDAwMDAyOCkK KworI2RlZmluZSBSRUdfRFBfTUlTQzFfTUlTQzAJCQkoMHgwMDAwMDAyQykKKyNkZWZpbmUgRFBf TUlTQzBfU1lOQ0hST05PVVNfQ0xLCQkoMHgwMDAwMDAwMSkKKyNkZWZpbmUgRFBfTUlTQzBfQ09M T1JJTUVUUllfQ0ZHX1NISUZUCQkoMHgwMDAwMDAwMSkKKyNkZWZpbmUgRFBfTUlTQzBfVEVTVF9C SVRTX0RFUFRIX1NISUZUCQkoMHgwMDAwMDAwNSkKKworI2RlZmluZSBSRUdfRFBfVkFMSURfQk9V TkRBUlkJCQkoMHgwMDAwMDAzMCkKKyNkZWZpbmUgUkVHX0RQX1ZBTElEX0JPVU5EQVJZXzIJCQko MHgwMDAwMDAzNCkKKworI2RlZmluZSBSRUdfRFBfTE9HSUNBTDJQSFlTSUNBTF9MQU5FX01BUFBJ TkcJKDB4MDAwMDAwMzgpCisjZGVmaW5lIExBTkUwX01BUFBJTkdfU0hJRlQJCQkoMHgwMDAwMDAw MCkKKyNkZWZpbmUgTEFORTFfTUFQUElOR19TSElGVAkJCSgweDAwMDAwMDAyKQorI2RlZmluZSBM QU5FMl9NQVBQSU5HX1NISUZUCQkJKDB4MDAwMDAwMDQpCisjZGVmaW5lIExBTkUzX01BUFBJTkdf U0hJRlQJCQkoMHgwMDAwMDAwNikKKworI2RlZmluZSBSRUdfRFBfTUFJTkxJTktfUkVBRFkJCQko MHgwMDAwMDA0MCkKKyNkZWZpbmUgRFBfTUFJTkxJTktfUkVBRFlfRk9SX1ZJREVPCQkoMHgwMDAw MDAwMSkKKyNkZWZpbmUgRFBfTUFJTkxJTktfUkVBRFlfTElOS19UUkFJTklOR19TSElGVAkoMHgw MDAwMDAwMykKKworI2RlZmluZSBSRUdfRFBfTUFJTkxJTktfTEVWRUxTCQkJKDB4MDAwMDAwNDQp CisjZGVmaW5lIERQX01BSU5MSU5LX1NBRkVfVE9fRVhJVF9MRVZFTF8yCSgweDAwMDAwMDAyKQor CisKKyNkZWZpbmUgUkVHX0RQX1RVCQkJCSgweDAwMDAwMDRDKQorCisjZGVmaW5lIFJFR19EUF9I QlIyX0NPTVBMSUFOQ0VfU0NSQU1CTEVSX1JFU0VUCSgweDAwMDAwMDU0KQorI2RlZmluZSBEUF9I QlIyX0VSTV9QQVRURVJOCQkJKDB4MDAwMTAwMDApCisKKyNkZWZpbmUgUkVHX0RQX1RFU1RfODBC SVRfQ1VTVE9NX1BBVFRFUk5fUkVHMAkoMHgwMDAwMDBDMCkKKyNkZWZpbmUgUkVHX0RQX1RFU1Rf ODBCSVRfQ1VTVE9NX1BBVFRFUk5fUkVHMQkoMHgwMDAwMDBDNCkKKyNkZWZpbmUgUkVHX0RQX1RF U1RfODBCSVRfQ1VTVE9NX1BBVFRFUk5fUkVHMgkoMHgwMDAwMDBDOCkKKworI2RlZmluZSBNTVNT X0RQX01JU0MxX01JU0MwCQkJKDB4MDAwMDAwMkMpCisjZGVmaW5lIE1NU1NfRFBfQVVESU9fVElN SU5HX0dFTgkJKDB4MDAwMDAwODApCisjZGVmaW5lIE1NU1NfRFBfQVVESU9fVElNSU5HX1JCUl8z MgkJKDB4MDAwMDAwODQpCisjZGVmaW5lIE1NU1NfRFBfQVVESU9fVElNSU5HX0hCUl8zMgkJKDB4 MDAwMDAwODgpCisjZGVmaW5lIE1NU1NfRFBfQVVESU9fVElNSU5HX1JCUl80NAkJKDB4MDAwMDAw OEMpCisjZGVmaW5lIE1NU1NfRFBfQVVESU9fVElNSU5HX0hCUl80NAkJKDB4MDAwMDAwOTApCisj ZGVmaW5lIE1NU1NfRFBfQVVESU9fVElNSU5HX1JCUl80OAkJKDB4MDAwMDAwOTQpCisjZGVmaW5l IE1NU1NfRFBfQVVESU9fVElNSU5HX0hCUl80OAkJKDB4MDAwMDAwOTgpCisKKyNkZWZpbmUgTU1T U19EUF9QU1JfQ1JDX1JHCQkJKDB4MDAwMDAxNTQpCisjZGVmaW5lIE1NU1NfRFBfUFNSX0NSQ19C CQkJKDB4MDAwMDAxNTgpCisKKyNkZWZpbmUgUkVHX0RQX0NPTVBSRVNTSU9OX01PREVfQ1RSTAkJ KDB4MDAwMDAxODApCisKKyNkZWZpbmUgTU1TU19EUF9BVURJT19DRkcJCQkoMHgwMDAwMDIwMCkK KyNkZWZpbmUgTU1TU19EUF9BVURJT19TVEFUVVMJCQkoMHgwMDAwMDIwNCkKKyNkZWZpbmUgTU1T U19EUF9BVURJT19QS1RfQ1RSTAkJCSgweDAwMDAwMjA4KQorI2RlZmluZSBNTVNTX0RQX0FVRElP X1BLVF9DVFJMMgkJCSgweDAwMDAwMjBDKQorI2RlZmluZSBNTVNTX0RQX0FVRElPX0FDUl9DVFJM CQkJKDB4MDAwMDAyMTApCisjZGVmaW5lIE1NU1NfRFBfQVVESU9fQ1RSTF9SRVNFVAkJKDB4MDAw MDAyMTQpCisKKyNkZWZpbmUgTU1TU19EUF9TRFBfQ0ZHCQkJCSgweDAwMDAwMjI4KQorI2RlZmlu ZSBNTVNTX0RQX1NEUF9DRkcyCQkJKDB4MDAwMDAyMkMpCisjZGVmaW5lIE1NU1NfRFBfQVVESU9f VElNRVNUQU1QXzAJCSgweDAwMDAwMjMwKQorI2RlZmluZSBNTVNTX0RQX0FVRElPX1RJTUVTVEFN UF8xCQkoMHgwMDAwMDIzNCkKKworI2RlZmluZSBNTVNTX0RQX0FVRElPX1NUUkVBTV8wCQkJKDB4 MDAwMDAyNDApCisjZGVmaW5lIE1NU1NfRFBfQVVESU9fU1RSRUFNXzEJCQkoMHgwMDAwMDI0NCkK KworI2RlZmluZSBNTVNTX0RQX0VYVEVOU0lPTl8wCQkJKDB4MDAwMDAyNTApCisjZGVmaW5lIE1N U1NfRFBfRVhURU5TSU9OXzEJCQkoMHgwMDAwMDI1NCkKKyNkZWZpbmUgTU1TU19EUF9FWFRFTlNJ T05fMgkJCSgweDAwMDAwMjU4KQorI2RlZmluZSBNTVNTX0RQX0VYVEVOU0lPTl8zCQkJKDB4MDAw MDAyNUMpCisjZGVmaW5lIE1NU1NfRFBfRVhURU5TSU9OXzQJCQkoMHgwMDAwMDI2MCkKKyNkZWZp bmUgTU1TU19EUF9FWFRFTlNJT05fNQkJCSgweDAwMDAwMjY0KQorI2RlZmluZSBNTVNTX0RQX0VY VEVOU0lPTl82CQkJKDB4MDAwMDAyNjgpCisjZGVmaW5lIE1NU1NfRFBfRVhURU5TSU9OXzcJCQko MHgwMDAwMDI2QykKKyNkZWZpbmUgTU1TU19EUF9FWFRFTlNJT05fOAkJCSgweDAwMDAwMjcwKQor I2RlZmluZSBNTVNTX0RQX0VYVEVOU0lPTl85CQkJKDB4MDAwMDAyNzQpCisjZGVmaW5lIE1NU1Nf RFBfQVVESU9fQ09QWU1BTkFHRU1FTlRfMAkJKDB4MDAwMDAyNzgpCisjZGVmaW5lIE1NU1NfRFBf QVVESU9fQ09QWU1BTkFHRU1FTlRfMQkJKDB4MDAwMDAyN0MpCisjZGVmaW5lIE1NU1NfRFBfQVVE SU9fQ09QWU1BTkFHRU1FTlRfMgkJKDB4MDAwMDAyODApCisjZGVmaW5lIE1NU1NfRFBfQVVESU9f Q09QWU1BTkFHRU1FTlRfMwkJKDB4MDAwMDAyODQpCisjZGVmaW5lIE1NU1NfRFBfQVVESU9fQ09Q WU1BTkFHRU1FTlRfNAkJKDB4MDAwMDAyODgpCisjZGVmaW5lIE1NU1NfRFBfQVVESU9fQ09QWU1B TkFHRU1FTlRfNQkJKDB4MDAwMDAyOEMpCisjZGVmaW5lIE1NU1NfRFBfQVVESU9fSVNSQ18wCQkJ KDB4MDAwMDAyOTApCisjZGVmaW5lIE1NU1NfRFBfQVVESU9fSVNSQ18xCQkJKDB4MDAwMDAyOTQp CisjZGVmaW5lIE1NU1NfRFBfQVVESU9fSVNSQ18yCQkJKDB4MDAwMDAyOTgpCisjZGVmaW5lIE1N U1NfRFBfQVVESU9fSVNSQ18zCQkJKDB4MDAwMDAyOUMpCisjZGVmaW5lIE1NU1NfRFBfQVVESU9f SVNSQ180CQkJKDB4MDAwMDAyQTApCisjZGVmaW5lIE1NU1NfRFBfQVVESU9fSVNSQ181CQkJKDB4 MDAwMDAyQTQpCisjZGVmaW5lIE1NU1NfRFBfQVVESU9fSU5GT0ZSQU1FXzAJCSgweDAwMDAwMkE4 KQorI2RlZmluZSBNTVNTX0RQX0FVRElPX0lORk9GUkFNRV8xCQkoMHgwMDAwMDJBQykKKyNkZWZp bmUgTU1TU19EUF9BVURJT19JTkZPRlJBTUVfMgkJKDB4MDAwMDAyQjApCisKKyNkZWZpbmUgTU1T U19EUF9HRU5FUklDMF8wCQkJKDB4MDAwMDAzMDApCisjZGVmaW5lIE1NU1NfRFBfR0VORVJJQzBf MQkJCSgweDAwMDAwMzA0KQorI2RlZmluZSBNTVNTX0RQX0dFTkVSSUMwXzIJCQkoMHgwMDAwMDMw OCkKKyNkZWZpbmUgTU1TU19EUF9HRU5FUklDMF8zCQkJKDB4MDAwMDAzMEMpCisjZGVmaW5lIE1N U1NfRFBfR0VORVJJQzBfNAkJCSgweDAwMDAwMzEwKQorI2RlZmluZSBNTVNTX0RQX0dFTkVSSUMw XzUJCQkoMHgwMDAwMDMxNCkKKyNkZWZpbmUgTU1TU19EUF9HRU5FUklDMF82CQkJKDB4MDAwMDAz MTgpCisjZGVmaW5lIE1NU1NfRFBfR0VORVJJQzBfNwkJCSgweDAwMDAwMzFDKQorI2RlZmluZSBN TVNTX0RQX0dFTkVSSUMwXzgJCQkoMHgwMDAwMDMyMCkKKyNkZWZpbmUgTU1TU19EUF9HRU5FUklD MF85CQkJKDB4MDAwMDAzMjQpCisjZGVmaW5lIE1NU1NfRFBfR0VORVJJQzFfMAkJCSgweDAwMDAw MzI4KQorI2RlZmluZSBNTVNTX0RQX0dFTkVSSUMxXzEJCQkoMHgwMDAwMDMyQykKKyNkZWZpbmUg TU1TU19EUF9HRU5FUklDMV8yCQkJKDB4MDAwMDAzMzApCisjZGVmaW5lIE1NU1NfRFBfR0VORVJJ QzFfMwkJCSgweDAwMDAwMzM0KQorI2RlZmluZSBNTVNTX0RQX0dFTkVSSUMxXzQJCQkoMHgwMDAw MDMzOCkKKyNkZWZpbmUgTU1TU19EUF9HRU5FUklDMV81CQkJKDB4MDAwMDAzM0MpCisjZGVmaW5l IE1NU1NfRFBfR0VORVJJQzFfNgkJCSgweDAwMDAwMzQwKQorI2RlZmluZSBNTVNTX0RQX0dFTkVS SUMxXzcJCQkoMHgwMDAwMDM0NCkKKyNkZWZpbmUgTU1TU19EUF9HRU5FUklDMV84CQkJKDB4MDAw MDAzNDgpCisjZGVmaW5lIE1NU1NfRFBfR0VORVJJQzFfOQkJCSgweDAwMDAwMzRDKQorCisjZGVm aW5lIE1NU1NfRFBfVlNDRVhUXzAJCQkoMHgwMDAwMDJEMCkKKyNkZWZpbmUgTU1TU19EUF9WU0NF WFRfMQkJCSgweDAwMDAwMkQ0KQorI2RlZmluZSBNTVNTX0RQX1ZTQ0VYVF8yCQkJKDB4MDAwMDAy RDgpCisjZGVmaW5lIE1NU1NfRFBfVlNDRVhUXzMJCQkoMHgwMDAwMDJEQykKKyNkZWZpbmUgTU1T U19EUF9WU0NFWFRfNAkJCSgweDAwMDAwMkUwKQorI2RlZmluZSBNTVNTX0RQX1ZTQ0VYVF81CQkJ KDB4MDAwMDAyRTQpCisjZGVmaW5lIE1NU1NfRFBfVlNDRVhUXzYJCQkoMHgwMDAwMDJFOCkKKyNk ZWZpbmUgTU1TU19EUF9WU0NFWFRfNwkJCSgweDAwMDAwMkVDKQorI2RlZmluZSBNTVNTX0RQX1ZT Q0VYVF84CQkJKDB4MDAwMDAyRjApCisjZGVmaW5lIE1NU1NfRFBfVlNDRVhUXzkJCQkoMHgwMDAw MDJGNCkKKworI2RlZmluZSBNTVNTX0RQX0JJU1RfRU5BQkxFCQkJKDB4MDAwMDAwMDApCisjZGVm aW5lIERQX0JJU1RfRU5BQkxFX0RQQklTVF9FTgkJKDB4MDAwMDAwMDEpCisKKyNkZWZpbmUgTU1T U19EUF9USU1JTkdfRU5HSU5FX0VOCQkoMHgwMDAwMDAxMCkKKyNkZWZpbmUgRFBfVElNSU5HX0VO R0lORV9FTl9FTgkJCSgweDAwMDAwMDAxKQorCisjZGVmaW5lIE1NU1NfRFBfSU5URl9DT05GSUcJ CQkoMHgwMDAwMDAxNCkKKyNkZWZpbmUgTU1TU19EUF9JTlRGX0hTWU5DX0NUTAkJCSgweDAwMDAw MDE4KQorI2RlZmluZSBNTVNTX0RQX0lOVEZfVlNZTkNfUEVSSU9EX0YwCQkoMHgwMDAwMDAxQykK KyNkZWZpbmUgTU1TU19EUF9JTlRGX1ZTWU5DX1BFUklPRF9GMQkJKDB4MDAwMDAwMjApCisjZGVm aW5lIE1NU1NfRFBfSU5URl9WU1lOQ19QVUxTRV9XSURUSF9GMAkoMHgwMDAwMDAyNCkKKyNkZWZp bmUgTU1TU19EUF9JTlRGX1ZTWU5DX1BVTFNFX1dJRFRIX0YxCSgweDAwMDAwMDI4KQorI2RlZmlu ZSBNTVNTX0lOVEZfRElTUExBWV9WX1NUQVJUX0YwCQkoMHgwMDAwMDAyQykKKyNkZWZpbmUgTU1T U19JTlRGX0RJU1BMQVlfVl9TVEFSVF9GMQkJKDB4MDAwMDAwMzApCisjZGVmaW5lIE1NU1NfRFBf SU5URl9ESVNQTEFZX1ZfRU5EX0YwCQkoMHgwMDAwMDAzNCkKKyNkZWZpbmUgTU1TU19EUF9JTlRG X0RJU1BMQVlfVl9FTkRfRjEJCSgweDAwMDAwMDM4KQorI2RlZmluZSBNTVNTX0RQX0lOVEZfQUNU SVZFX1ZfU1RBUlRfRjAJCSgweDAwMDAwMDNDKQorI2RlZmluZSBNTVNTX0RQX0lOVEZfQUNUSVZF X1ZfU1RBUlRfRjEJCSgweDAwMDAwMDQwKQorI2RlZmluZSBNTVNTX0RQX0lOVEZfQUNUSVZFX1Zf RU5EX0YwCQkoMHgwMDAwMDA0NCkKKyNkZWZpbmUgTU1TU19EUF9JTlRGX0FDVElWRV9WX0VORF9G MQkJKDB4MDAwMDAwNDgpCisjZGVmaW5lIE1NU1NfRFBfSU5URl9ESVNQTEFZX0hDVEwJCSgweDAw MDAwMDRDKQorI2RlZmluZSBNTVNTX0RQX0lOVEZfQUNUSVZFX0hDVEwJCSgweDAwMDAwMDUwKQor I2RlZmluZSBNTVNTX0RQX0lOVEZfUE9MQVJJVFlfQ1RMCQkoMHgwMDAwMDA1OCkKKworI2RlZmlu ZSBNTVNTX0RQX1RQR19NQUlOX0NPTlRST0wJCSgweDAwMDAwMDYwKQorI2RlZmluZSBEUF9UUEdf Q0hFQ0tFUkVEX1JFQ1RfUEFUVEVSTgkJKDB4MDAwMDAxMDApCisKKyNkZWZpbmUgTU1TU19EUF9U UEdfVklERU9fQ09ORklHCQkoMHgwMDAwMDA2NCkKKyNkZWZpbmUgRFBfVFBHX1ZJREVPX0NPTkZJ R19CUFBfOEJJVAkJKDB4MDAwMDAwMDEpCisjZGVmaW5lIERQX1RQR19WSURFT19DT05GSUdfUkdC CQkJKDB4MDAwMDAwMDQpCisKKyNkZWZpbmUgTU1TU19EUF9BU1lOQ19GSUZPX0NPTkZJRwkJKDB4 MDAwMDAwODgpCisKKy8qRFAgUEhZIFJlZ2lzdGVyIG9mZnNldHMgKi8KKyNkZWZpbmUgUkVHX0RQ X1BIWV9SRVZJU0lPTl9JRDAgICAgICAgICAgICAgICAgICgweDAwMDAwMDAwKQorI2RlZmluZSBS RUdfRFBfUEhZX1JFVklTSU9OX0lEMSAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDQpCisjZGVm aW5lIFJFR19EUF9QSFlfUkVWSVNJT05fSUQyICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwOCkK KyNkZWZpbmUgUkVHX0RQX1BIWV9SRVZJU0lPTl9JRDMgICAgICAgICAgICAgICAgICgweDAwMDAw MDBDKQorCisjZGVmaW5lIFJFR19EUF9QSFlfQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAo MHgwMDAwMDAxMCkKKworI2RlZmluZSBSRUdfRFBfUEhZX1BEX0NUTCAgICAgICAgICAgICAgICAg ICAgICAgKDB4MDAwMDAwMTgpCisjZGVmaW5lIERQX1BIWV9QRF9DVExfUFdSRE4gICAgICAgICAg ICAgICAgICAgICAoMHgwMDAwMDAwMSkKKyNkZWZpbmUgRFBfUEhZX1BEX0NUTF9QU1JfUFdSRE4J CQkoMHgwMDAwMDAwMikKKyNkZWZpbmUgRFBfUEhZX1BEX0NUTF9BVVhfUFdSRE4JCQkoMHgwMDAw MDAwNCkKKyNkZWZpbmUgRFBfUEhZX1BEX0NUTF9MQU5FXzBfMV9QV1JETgkJKDB4MDAwMDAwMDgp CisjZGVmaW5lIERQX1BIWV9QRF9DVExfTEFORV8yXzNfUFdSRE4JCSgweDAwMDAwMDEwKQorI2Rl ZmluZSBEUF9QSFlfUERfQ1RMX1BMTF9QV1JETgkJCSgweDAwMDAwMDIwKQorI2RlZmluZSBEUF9Q SFlfUERfQ1RMX0RQX0NMQU1QX0VOCQkoMHgwMDAwMDA0MCkKKworI2RlZmluZSBSRUdfRFBfUEhZ X01PREUgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMUMpCisKKyNkZWZpbmUgUkVH X0RQX1BIWV9BVVhfQ0ZHMCAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDIwKQorI2RlZmlu ZSBSRUdfRFBfUEhZX0FVWF9DRkcxICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMjQpCisj ZGVmaW5lIFJFR19EUF9QSFlfQVVYX0NGRzIgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAy OCkKKyNkZWZpbmUgUkVHX0RQX1BIWV9BVVhfQ0ZHMyAgICAgICAgICAgICAgICAgICAgICgweDAw MDAwMDJDKQorI2RlZmluZSBSRUdfRFBfUEhZX0FVWF9DRkc0ICAgICAgICAgICAgICAgICAgICAg KDB4MDAwMDAwMzApCisjZGVmaW5lIFJFR19EUF9QSFlfQVVYX0NGRzUgICAgICAgICAgICAgICAg ICAgICAoMHgwMDAwMDAzNCkKKyNkZWZpbmUgUkVHX0RQX1BIWV9BVVhfQ0ZHNiAgICAgICAgICAg ICAgICAgICAgICgweDAwMDAwMDM4KQorI2RlZmluZSBSRUdfRFBfUEhZX0FVWF9DRkc3ICAgICAg ICAgICAgICAgICAgICAgKDB4MDAwMDAwM0MpCisjZGVmaW5lIFJFR19EUF9QSFlfQVVYX0NGRzgg ICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDA0MCkKKyNkZWZpbmUgUkVHX0RQX1BIWV9BVVhf Q0ZHOSAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDQ0KQorCisjZGVmaW5lIFJFR19EUF9Q SFlfQVVYX0lOVEVSUlVQVF9NQVNLICAgICAgICAgICAoMHgwMDAwMDA0OCkKKyNkZWZpbmUgUEhZ X0FVWF9TVE9QX0VSUl9NQVNLICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDAxKQorI2RlZmlu ZSBQSFlfQVVYX0RFQ19FUlJfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDIpCisj ZGVmaW5lIFBIWV9BVVhfU1lOQ19FUlJfTUFTSyAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAw NCkKKyNkZWZpbmUgUEhZX0FVWF9BTElHTl9FUlJfTUFTSyAgICAgICAgICAgICAgICAgICgweDAw MDAwMDA4KQorI2RlZmluZSBQSFlfQVVYX1JFUV9FUlJfTUFTSyAgICAgICAgICAgICAgICAgICAg KDB4MDAwMDAwMTApCisKKworI2RlZmluZSBSRUdfRFBfUEhZX0FVWF9JTlRFUlJVUFRfQ0xFQVIg ICAgICAgICAgKDB4MDAwMDAwNEMpCisjZGVmaW5lIFJFR19EUF9QSFlfQVVYX0JJU1RfQ0ZHCQkJ KDB4MDAwMDAwNTApCisKKyNkZWZpbmUgUkVHX0RQX1BIWV9WQ09fRElWCQkJMHgwMDY0CisjZGVm aW5lIFJFR19EUF9QSFlfVFgwX1RYMV9MQU5FX0NUTAkJMHgwMDZDCisjZGVmaW5lIFJFR19EUF9Q SFlfVFgyX1RYM19MQU5FX0NUTAkJMHgwMDg4CisKKyNkZWZpbmUgUkVHX0RQX1BIWV9TUEFSRTAJ CQkoMHgwMEFDKQorI2RlZmluZSBEUF9QSFlfU1BBUkUwX01BU0sJCQkoMHgwMDBGKQorI2RlZmlu ZSBEUF9QSFlfU1BBUkUwX09SSUVOVEFUSU9OX0lORk9fU0hJRlQJKDB4MDAwNCk7CisKKyNkZWZp bmUgUkVHX0RQX1BIWV9TVEFUVVMJCQkoMHgwMEMwKQorCisvKiBUeCByZWdpc3RlcnMgKi8KKyNk ZWZpbmUgVFhuX0JJU1RfTU9ERV9MQU5FTk8JCQkweDAwMDAKKyNkZWZpbmUgVFhuX0NMS0JVRl9F TkFCTEUJCQkweDAwMDgKKyNkZWZpbmUgVFhuX1RYX0VNUF9QT1NUMV9MVkwJCQkweDAwMEMKKwor I2RlZmluZSBUWG5fVFhfRFJWX0xWTAkJCQkweDAwMUMKKworI2RlZmluZSBUWG5fUkVTRVRfVFNZ TkNfRU4JCQkweDAwMjQKKyNkZWZpbmUgVFhuX1BSRV9TVEFMTF9MRE9fQk9PU1RfRU4JCTB4MDAy OAorI2RlZmluZSBUWG5fVFhfQkFORAkJCQkweDAwMkMKKyNkZWZpbmUgVFhuX1NMRVdfQ05UTAkJ CQkweDAwMzAKKyNkZWZpbmUgVFhuX0lOVEVSRkFDRV9TRUxFQ1QJCQkweDAwMzQKKworI2RlZmlu ZSBUWG5fUkVTX0NPREVfTEFORV9UWAkJCTB4MDAzQworI2RlZmluZSBUWG5fUkVTX0NPREVfTEFO RV9SWAkJCTB4MDA0MAorI2RlZmluZSBUWG5fUkVTX0NPREVfTEFORV9PRkZTRVRfVFgJCTB4MDA0 NAorI2RlZmluZSBUWG5fUkVTX0NPREVfTEFORV9PRkZTRVRfUlgJCTB4MDA0OAorCisjZGVmaW5l IFRYbl9ERUJVR19CVVNfU0VMCQkJMHgwMDU4CisjZGVmaW5lIFRYbl9UUkFOU0NFSVZFUl9CSUFT X0VOCQkJMHgwMDVDCisjZGVmaW5lIFRYbl9ISUdIWl9EUlZSX0VOCQkJMHgwMDYwCisjZGVmaW5l IFRYbl9UWF9QT0xfSU5WCQkJCTB4MDA2NAorI2RlZmluZSBUWG5fUEFSUkFURV9SRUNfREVURUNU X0lETEVfRU4JCTB4MDA2OAorCisjZGVmaW5lIFRYbl9MQU5FX01PREVfMQkJCQkweDAwOEMKKwor I2RlZmluZSBUWG5fVFJBTl9EUlZSX0VNUF9FTgkJCTB4MDBDMAorI2RlZmluZSBUWG5fVFhfSU5U RVJGQUNFX01PREUJCQkweDAwQzQKKworI2RlZmluZSBUWG5fVk1PREVfQ1RSTDEJCQkJMHgwMEYw CisKKy8qIFBMTCByZWdpc3RlciBvZmZzZXQgKi8KKyNkZWZpbmUgUVNFUkRFU19DT01fQVRCX1NF TDEJCQkweDAwMDAKKyNkZWZpbmUgUVNFUkRFU19DT01fQVRCX1NFTDIJCQkweDAwMDQKKyNkZWZp bmUgUVNFUkRFU19DT01fRlJFUV9VUERBVEUJCQkweDAwMDgKKyNkZWZpbmUgUVNFUkRFU19DT01f QkdfVElNRVIJCQkweDAwMEMKKyNkZWZpbmUgUVNFUkRFU19DT01fU1NDX0VOX0NFTlRFUgkJMHgw MDEwCisjZGVmaW5lIFFTRVJERVNfQ09NX1NTQ19BREpfUEVSMQkJMHgwMDE0CisjZGVmaW5lIFFT RVJERVNfQ09NX1NTQ19BREpfUEVSMgkJMHgwMDE4CisjZGVmaW5lIFFTRVJERVNfQ09NX1NTQ19Q RVIxCQkJMHgwMDFDCisjZGVmaW5lIFFTRVJERVNfQ09NX1NTQ19QRVIyCQkJMHgwMDIwCisjZGVm aW5lIFFTRVJERVNfQ09NX1NTQ19TVEVQX1NJWkUxCQkweDAwMjQKKyNkZWZpbmUgUVNFUkRFU19D T01fU1NDX1NURVBfU0laRTIJCTB4MDAyOAorI2RlZmluZSBRU0VSREVTX0NPTV9QT1NUX0RJVgkJ CTB4MDAyQworI2RlZmluZSBRU0VSREVTX0NPTV9QT1NUX0RJVl9NVVgJCTB4MDAzMAorCisjZGVm aW5lIFFTRVJERVNfQ09NX0JJQVNfRU5fQ0xLQlVGTFJfRU4JCTB4MDAzNAorI2RlZmluZSBRU0VS REVTX0NPTV9CSUFTX0VOCQkJMHgwMDAxCisjZGVmaW5lIFFTRVJERVNfQ09NX0JJQVNfRU5fTVVY CQkJMHgwMDAyCisjZGVmaW5lIFFTRVJERVNfQ09NX0NMS0JVRl9SX0VOCQkJMHgwMDA0CisjZGVm aW5lIFFTRVJERVNfQ09NX0NMS0JVRl9MX0VOCQkJMHgwMDA4CisjZGVmaW5lIFFTRVJERVNfQ09N X0VOX1NZU0NMS19UWF9TRUwJCTB4MDAxMAorI2RlZmluZSBRU0VSREVTX0NPTV9DTEtCVUZfUlhf RFJJVkVfTAkJMHgwMDIwCisjZGVmaW5lIFFTRVJERVNfQ09NX0NMS0JVRl9SWF9EUklWRV9SCQkw eDAwNDAKKworI2RlZmluZSBRU0VSREVTX0NPTV9DTEtfRU5BQkxFMQkJCTB4MDAzOAorI2RlZmlu ZSBRU0VSREVTX0NPTV9TWVNfQ0xLX0NUUkwJCTB4MDAzQworI2RlZmluZSBRU0VSREVTX0NPTV9T WVNDTEtfQlVGX0VOQUJMRQkJMHgwMDQwCisjZGVmaW5lIFFTRVJERVNfQ09NX1BMTF9FTgkJCTB4 MDA0NAorI2RlZmluZSBRU0VSREVTX0NPTV9QTExfSVZDTwkJCTB4MDA0OAorI2RlZmluZSBRU0VS REVTX0NPTV9DTU5fSUVUUklNCQkJMHgwMDRDCisjZGVmaW5lIFFTRVJERVNfQ09NX0NNTl9JUFRS SU0JCQkweDAwNTAKKworI2RlZmluZSBRU0VSREVTX0NPTV9DUF9DVFJMX01PREUwCQkweDAwNjAK KyNkZWZpbmUgUVNFUkRFU19DT01fQ1BfQ1RSTF9NT0RFMQkJMHgwMDY0CisjZGVmaW5lIFFTRVJE RVNfQ09NX1BMTF9SQ1RSTF9NT0RFMAkJMHgwMDY4CisjZGVmaW5lIFFTRVJERVNfQ09NX1BMTF9S Q1RSTF9NT0RFMQkJMHgwMDZDCisjZGVmaW5lIFFTRVJERVNfQ09NX1BMTF9DQ1RSTF9NT0RFMAkJ MHgwMDcwCisjZGVmaW5lIFFTRVJERVNfQ09NX1BMTF9DQ1RSTF9NT0RFMQkJMHgwMDc0CisjZGVm aW5lIFFTRVJERVNfQ09NX1BMTF9DTlRSTAkJCTB4MDA3OAorI2RlZmluZSBRU0VSREVTX0NPTV9C SUFTX0VOX0NUUkxfQllfUFNNCQkweDAwN0MKKyNkZWZpbmUgUVNFUkRFU19DT01fU1lTQ0xLX0VO X1NFTAkJMHgwMDgwCisjZGVmaW5lIFFTRVJERVNfQ09NX0NNTF9TWVNDTEtfU0VMCQkweDAwODQK KyNkZWZpbmUgUVNFUkRFU19DT01fUkVTRVRTTV9DTlRSTAkJMHgwMDg4CisjZGVmaW5lIFFTRVJE RVNfQ09NX1JFU0VUU01fQ05UUkwyCQkweDAwOEMKKyNkZWZpbmUgUVNFUkRFU19DT01fTE9DS19D TVBfRU4JCQkweDAwOTAKKyNkZWZpbmUgUVNFUkRFU19DT01fTE9DS19DTVBfQ0ZHCQkweDAwOTQK KyNkZWZpbmUgUVNFUkRFU19DT01fTE9DS19DTVAxX01PREUwCQkweDAwOTgKKyNkZWZpbmUgUVNF UkRFU19DT01fTE9DS19DTVAyX01PREUwCQkweDAwOUMKKyNkZWZpbmUgUVNFUkRFU19DT01fTE9D S19DTVAzX01PREUwCQkweDAwQTAKKworI2RlZmluZSBRU0VSREVTX0NPTV9ERUNfU1RBUlRfTU9E RTAJCTB4MDBCMAorI2RlZmluZSBRU0VSREVTX0NPTV9ERUNfU1RBUlRfTU9ERTEJCTB4MDBCNAor I2RlZmluZSBRU0VSREVTX0NPTV9ESVZfRlJBQ19TVEFSVDFfTU9ERTAJMHgwMEI4CisjZGVmaW5l IFFTRVJERVNfQ09NX0RJVl9GUkFDX1NUQVJUMl9NT0RFMAkweDAwQkMKKyNkZWZpbmUgUVNFUkRF U19DT01fRElWX0ZSQUNfU1RBUlQzX01PREUwCTB4MDBDMAorI2RlZmluZSBRU0VSREVTX0NPTV9E SVZfRlJBQ19TVEFSVDFfTU9ERTEJMHgwMEM0CisjZGVmaW5lIFFTRVJERVNfQ09NX0RJVl9GUkFD X1NUQVJUMl9NT0RFMQkweDAwQzgKKyNkZWZpbmUgUVNFUkRFU19DT01fRElWX0ZSQUNfU1RBUlQz X01PREUxCTB4MDBDQworI2RlZmluZSBRU0VSREVTX0NPTV9JTlRFR0xPT1BfSU5JVFZBTAkJMHgw MEQwCisjZGVmaW5lIFFTRVJERVNfQ09NX0lOVEVHTE9PUF9FTgkJMHgwMEQ0CisjZGVmaW5lIFFT RVJERVNfQ09NX0lOVEVHTE9PUF9HQUlOMF9NT0RFMAkweDAwRDgKKyNkZWZpbmUgUVNFUkRFU19D T01fSU5URUdMT09QX0dBSU4xX01PREUwCTB4MDBEQworI2RlZmluZSBRU0VSREVTX0NPTV9JTlRF R0xPT1BfR0FJTjBfTU9ERTEJMHgwMEUwCisjZGVmaW5lIFFTRVJERVNfQ09NX0lOVEVHTE9PUF9H QUlOMV9NT0RFMQkweDAwRTQKKyNkZWZpbmUgUVNFUkRFU19DT01fVkNPQ0FMX0RFQURNQU5fQ1RS TAkJMHgwMEU4CisjZGVmaW5lIFFTRVJERVNfQ09NX1ZDT19UVU5FX0NUUkwJCTB4MDBFQworI2Rl ZmluZSBRU0VSREVTX0NPTV9WQ09fVFVORV9NQVAJCTB4MDBGMAorCisjZGVmaW5lIFFTRVJERVNf Q09NX0NNTl9TVEFUVVMJCQkweDAxMjQKKyNkZWZpbmUgUVNFUkRFU19DT01fUkVTRVRfU01fU1RB VFVTCQkweDAxMjgKKworI2RlZmluZSBRU0VSREVTX0NPTV9DTEtfU0VMCQkJMHgwMTM4CisjZGVm aW5lIFFTRVJERVNfQ09NX0hTQ0xLX1NFTAkJCTB4MDEzQworCisjZGVmaW5lIFFTRVJERVNfQ09N X0NPUkVDTEtfRElWX01PREUwCQkweDAxNDgKKworI2RlZmluZSBRU0VSREVTX0NPTV9TV19SRVNF VAkJCTB4MDE1MAorI2RlZmluZSBRU0VSREVTX0NPTV9DT1JFX0NMS19FTgkJCTB4MDE1NAorI2Rl ZmluZSBRU0VSREVTX0NPTV9DX1JFQURZX1NUQVRVUwkJMHgwMTU4CisjZGVmaW5lIFFTRVJERVNf Q09NX0NNTl9DT05GSUcJCQkweDAxNUMKKworI2RlZmluZSBRU0VSREVTX0NPTV9TVlNfTU9ERV9D TEtfU0VMCQkweDAxNjQKKworLyogRFAgTU1TU19DQyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgTU1T U19EUF9MSU5LX0NNRF9SQ0dSCQkJKDB4MDEzOCkKKyNkZWZpbmUgTU1TU19EUF9MSU5LX0NGR19S Q0dSCQkJKDB4MDEzQykKKyNkZWZpbmUgTU1TU19EUF9QSVhFTF9NCQkJCSgweDAxNzQpCisjZGVm aW5lIE1NU1NfRFBfUElYRUxfTgkJCQkoMHgwMTc4KQorCisvKiBEUCBIRENQIDEuMyByZWdpc3Rl cnMgKi8KKyNkZWZpbmUgRFBfSERDUF9DVFJMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoMHgwQTApCisjZGVmaW5lIERQX0hEQ1BfU1RBVFVTICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKDB4MEE0KQorI2RlZmluZSBEUF9IRENQX1NXX1VQUEVSX0FLU1YgICAgICAg ICAgICAgICAgICAgICAgICAgICgweDA5OCkKKyNkZWZpbmUgRFBfSERDUF9TV19MT1dFUl9BS1NW ICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwOUMpCisjZGVmaW5lIERQX0hEQ1BfRU5UUk9Q WV9DVFJMMCAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MzUwKQorI2RlZmluZSBEUF9IRENQ X0VOVFJPUFlfQ1RSTDEgICAgICAgICAgICAgICAgICAgICAgICAgICgweDM1QykKKyNkZWZpbmUg RFBfSERDUF9TSEFfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwQzgpCisj ZGVmaW5lIERQX0hEQ1BfUkNWUE9SVF9EQVRBMl8wICAgICAgICAgICAgICAgICAgICAgICAgKDB4 MEIwKQorI2RlZmluZSBEUF9IRENQX1JDVlBPUlRfREFUQTMgICAgICAgICAgICAgICAgICAgICAg ICAgICgweDBBNCkKKyNkZWZpbmUgRFBfSERDUF9SQ1ZQT1JUX0RBVEE0ICAgICAgICAgICAgICAg ICAgICAgICAgICAoMHgwQTgpCisjZGVmaW5lIERQX0hEQ1BfUkNWUE9SVF9EQVRBNSAgICAgICAg ICAgICAgICAgICAgICAgICAgKDB4MEMwKQorI2RlZmluZSBEUF9IRENQX1JDVlBPUlRfREFUQTYg ICAgICAgICAgICAgICAgICAgICAgICAgICgweDBDNCkKKworI2RlZmluZSBIRENQX1NFQ19EUF9U Wl9IVl9ITE9TX0hEQ1BfU0hBX0NUUkwgICAgICAgICAgICgweDAyNCkKKyNkZWZpbmUgSERDUF9T RUNfRFBfVFpfSFZfSExPU19IRENQX1NIQV9EQVRBICAgICAgICAgICAoMHgwMjgpCisjZGVmaW5l IEhEQ1BfU0VDX0RQX1RaX0hWX0hMT1NfSERDUF9SQ1ZQT1JUX0RBVEEwICAgICAgKDB4MDA0KQor I2RlZmluZSBIRENQX1NFQ19EUF9UWl9IVl9ITE9TX0hEQ1BfUkNWUE9SVF9EQVRBMSAgICAgICgw eDAwOCkKKyNkZWZpbmUgSERDUF9TRUNfRFBfVFpfSFZfSExPU19IRENQX1JDVlBPUlRfREFUQTcg ICAgICAoMHgwMEMpCisjZGVmaW5lIEhEQ1BfU0VDX0RQX1RaX0hWX0hMT1NfSERDUF9SQ1ZQT1JU X0RBVEE4ICAgICAgKDB4MDEwKQorI2RlZmluZSBIRENQX1NFQ19EUF9UWl9IVl9ITE9TX0hEQ1Bf UkNWUE9SVF9EQVRBOSAgICAgICgweDAxNCkKKyNkZWZpbmUgSERDUF9TRUNfRFBfVFpfSFZfSExP U19IRENQX1JDVlBPUlRfREFUQTEwICAgICAoMHgwMTgpCisjZGVmaW5lIEhEQ1BfU0VDX0RQX1Ra X0hWX0hMT1NfSERDUF9SQ1ZQT1JUX0RBVEExMSAgICAgKDB4MDFDKQorI2RlZmluZSBIRENQX1NF Q19EUF9UWl9IVl9ITE9TX0hEQ1BfUkNWUE9SVF9EQVRBMTIgICAgICgweDAyMCkKKworLyogVVNC MyBEUCBDT00gcmVnaXN0ZXJzICovCisjZGVmaW5lIFJFR19VU0IzX0RQX0NPTV9SRVNFVF9PVlJE X0NUUkwJCQkoMHgxQykKKyNkZWZpbmUgVVNCM19EUF9DT01fT1ZSRF9DVFJMX1NXX0RQUEhZX1JF U0VUCQkoMHgwMSkKKyNkZWZpbmUgVVNCM19EUF9DT01fT1ZSRF9DVFJMX1NXX0RQUEhZX1JFU0VU X01VWAkoMHgwMikKKyNkZWZpbmUgVVNCM19EUF9DT01fT1ZSRF9DVFJMX1NXX1VTQjNQSFlfUkVT RVQJCSgweDA0KQorI2RlZmluZSBVU0IzX0RQX0NPTV9PVlJEX0NUUkxfU1dfVVNCM1BIWV9SRVNF VF9NVVgJKDB4MDgpCisKKyNkZWZpbmUgUkVHX1VTQjNfRFBfQ09NX1BIWV9NT0RFX0NUUkwJCQko MHgwMCkKKyNkZWZpbmUgVVNCM19EUF9DT01fUEhZX01PREVfRFAJCQkJKDB4MDIpCisKKyNkZWZp bmUgUkVHX1VTQjNfRFBfQ09NX1NXX1JFU0VUCQkJKDB4MDQpCisjZGVmaW5lIFVTQjNfRFBfQ09N X1NXX1JFU0VUX1NFVAkJCSgweDAxKQorCisjZGVmaW5lIFJFR19VU0IzX0RQX0NPTV9UWVBFQ19D VFJMCQkJKDB4MTApCisjZGVmaW5lIFVTQjNfRFBfQ09NX1RZUEVDX0NUUkxfUE9SVFNFTAkJCSgw eDAxKQorI2RlZmluZSBVU0IzX0RQX0NPTV9UWVBFQ19DVFJMX1BPUlRTRUxfTVVYCQkoMHgwMikK KworI2RlZmluZSBSRUdfVVNCM19EUF9DT01fU1dJX0NUUkwJCQkoMHgwYykKKworI2RlZmluZSBS RUdfVVNCM19EUF9DT01fUE9XRVJfRE9XTl9DVFJMCQkJKDB4MDgpCisjZGVmaW5lIFVTQjNfRFBf Q09NX1BPV0VSX0RPV05fQ1RSTF9TV19QV1JETgkJKDB4MDEpCisKKworCisjZW5kaWYgLyogX0RQ X1JFR19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmMgYi9k cml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYwppbmRleCA2MjY1YmU4Li41Mjc3MTc0IDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9k cm0vbXNtL21zbV9kcnYuYwpAQCAtMTQzNCw2ICsxNDM0LDcgQEAgc3RhdGljIGludCBfX2luaXQg bXNtX2RybV9yZWdpc3Rlcih2b2lkKQogCW1zbV9kc2lfcmVnaXN0ZXIoKTsKIAltc21fZWRwX3Jl Z2lzdGVyKCk7CiAJbXNtX2hkbWlfcmVnaXN0ZXIoKTsKKwltc21fZHBfcmVnaXN0ZXIoKTsKIAlh ZHJlbm9fcmVnaXN0ZXIoKTsKIAlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtc21f cGxhdGZvcm1fZHJpdmVyKTsKIH0KQEAgLTE0NDIsNiArMTQ0Myw3IEBAIHN0YXRpYyB2b2lkIF9f ZXhpdCBtc21fZHJtX3VucmVnaXN0ZXIodm9pZCkKIHsKIAlEQkcoImZpbmkiKTsKIAlwbGF0Zm9y bV9kcml2ZXJfdW5yZWdpc3RlcigmbXNtX3BsYXRmb3JtX2RyaXZlcik7CisJbXNtX2RwX3VucmVn aXN0ZXIoKTsKIAltc21faGRtaV91bnJlZ2lzdGVyKCk7CiAJYWRyZW5vX3VucmVnaXN0ZXIoKTsK IAltc21fZWRwX3VucmVnaXN0ZXIoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20v bXNtX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmgKaW5kZXggOWNkNmE5Ni4u M2NkYmZjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmgKKysrIGIv ZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmgKQEAgLTE3Niw2ICsxNzYsNyBAQCBzdHJ1Y3Qg bXNtX2RybV9wcml2YXRlIHsKIAkvKiBEU0kgaXMgc2hhcmVkIGJ5IG1kcDQgYW5kIG1kcDUgKi8K IAlzdHJ1Y3QgbXNtX2RzaSAqZHNpWzJdOwogCisJc3RydWN0IG1zbV9kcCAqZHA7CiAJLyogd2hl biB3ZSBoYXZlIG1vcmUgdGhhbiBvbmUgJ21zbV9ncHUnIHRoZXNlIG5lZWQgdG8gYmUgYW4gYXJy YXk6ICovCiAJc3RydWN0IG1zbV9ncHUgKmdwdTsKIAlzdHJ1Y3QgbXNtX2ZpbGVfcHJpdmF0ZSAq bGFzdGN0eDsKQEAgLTM4NCw2ICszODUsNDYgQEAgc3RhdGljIGlubGluZSBpbnQgbXNtX2RzaV9t b2Rlc2V0X2luaXQoc3RydWN0IG1zbV9kc2kgKm1zbV9kc2ksCiB9CiAjZW5kaWYKIAorI2lmZGVm IENPTkZJR19EUk1fTVNNX0RQCitpbnQgX19pbml0IG1zbV9kcF9yZWdpc3Rlcih2b2lkKTsKK3Zv aWQgX19leGl0IG1zbV9kcF91bnJlZ2lzdGVyKHZvaWQpOworaW50IG1zbV9kcF9tb2Rlc2V0X2lu aXQoc3RydWN0IG1zbV9kcCAqZHBfZGlzcGxheSwgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJ CSBzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpOworaW50IG1zbV9kcF9kaXNwbGF5X2VuYWJs ZShzdHJ1Y3QgbXNtX2RwICpkcCwgc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKTsKK2ludCBt c21fZHBfZGlzcGxheV9kaXNhYmxlKHN0cnVjdCBtc21fZHAgKmRwLCBzdHJ1Y3QgZHJtX2VuY29k ZXIgKmVuY29kZXIpOwordm9pZCBtc21fZHBfZGlzcGxheV9tb2RlX3NldChzdHJ1Y3QgbXNtX2Rw ICpkcCwgc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCXN0cnVjdCBkcm1fZGlzcGxh eV9tb2RlICptb2RlLAorCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2Rl KTsKKworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IF9faW5pdCBtc21fZHBfcmVnaXN0ZXIodm9p ZCkKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2V4aXQgbXNt X2RwX3VucmVnaXN0ZXIodm9pZCkKK3sKK30KK3N0YXRpYyBpbmxpbmUgaW50IG1zbV9kcF9tb2Rl c2V0X2luaXQoc3RydWN0IG1zbV9kcCAqZHBfZGlzcGxheSwKKwkJCQkgICAgICAgc3RydWN0IGRy bV9kZXZpY2UgKmRldiwKKwkJCQkgICAgICAgc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQor eworCXJldHVybiAtRUlOVkFMOworfQorc3RhdGljIGlubGluZSBpbnQgbXNtX2RwX2Rpc3BsYXlf ZW5hYmxlKHN0cnVjdCBtc21fZHAgKmRwLCBzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7 CisJcmV0dXJuIC1FSU5WQUw7Cit9CitzdGF0aWMgaW5saW5lIGludCBtc21fZHBfZGlzcGxheV9k aXNhYmxlKHN0cnVjdCBtc21fZHAgKmRwLCBzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7 CisJcmV0dXJuIC1FSU5WQUw7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgbXNtX2RwX2Rpc3BsYXlf bW9kZV9zZXQoc3RydWN0IG1zbV9kcCAqZHAsIHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwK KwkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCQlzdHJ1Y3QgZHJtX2Rpc3Bs YXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKK30KKyNlbmRpZgorCiB2b2lkIF9faW5pdCBtc21f bWRwX3JlZ2lzdGVyKHZvaWQpOwogdm9pZCBfX2V4aXQgbXNtX21kcF91bnJlZ2lzdGVyKHZvaWQp Owogdm9pZCBfX2luaXQgbXNtX2RwdV9yZWdpc3Rlcih2b2lkKTsKLS0gClRoZSBRdWFsY29tbSBJ bm5vdmF0aW9uIENlbnRlciwgSW5jLiBpcyBhIG1lbWJlciBvZiB0aGUgQ29kZSBBdXJvcmEgRm9y dW0sCmEgTGludXggRm91bmRhdGlvbiBDb2xsYWJvcmF0aXZlIFByb2plY3QKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkZyZWVkcmVubyBtYWlsaW5nIGxp c3QKRnJlZWRyZW5vQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZyZWVkcmVubwo=