From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yakir Yang Subject: [PATCH v4] drm/rockchip: hdmi: add Innosilicon HDMI support Date: Mon, 18 Jan 2016 22:42:20 +0800 Message-ID: <1453128140-29208-1-git-send-email-ykk@rock-chips.com> References: <1453128123-29155-1-git-send-email-ykk@rock-chips.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1453128123-29155-1-git-send-email-ykk@rock-chips.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Mark Yao , Heiko Stuebner Cc: Mark Rutland , devicetree@vger.kernel.org, Pawel Moll , Ian Campbell , Ben Chan , Ken Mixte , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org, Rob Herring , Kumar Gala , Thierry Reding , linux-arm-kernel@lists.infradead.org, Zheng Yang List-Id: linux-rockchip.vger.kernel.org VGhlIElubm9zaWxpY29uIEhETUkgaXMgYSBsb3cgcG93ZXIgSERNSSAxLjQgdHJhbnNtaXR0ZXIK SVAsIGFuZCBpdCBoYXZlIGJlZW4gaW50ZWdyYXRlZCBvbiBzb21lIHJvY2tjaGlwIENQVXMKKGxp a2UgUkszMDM2LCBSSzMxMngpLgoKU2lnbmVkLW9mZi1ieTogWWFraXIgWWFuZyA8eWtrQHJvY2st Y2hpcHMuY29tPgotLS0KQ2hhbmdlcyBpbiB2NDoKLSBNb2RpZnkgdGhlIGNvbW1pdCB0aXRsZSAi ZHJtL3JvY2tjaGlwOiBoZG1pOiAuLi4iIChNYXJrKQotIENvcnJlY3QgdGhlICJES01TIiB0byAi RFBNUyIgKE1hcmspCi0gRml4IG92ZXIgODAgY2hhcmFjdGVycyBwcm9ibGVtcyAoTWFyaykKLSBS ZW1vdmUgZW5jb2RlciAucHJlcGFyZS8uY29tbWl0IGhlbHBlciBmdW5jdGlvbnMsIGFuZCBtb3Zl IHRoZSB2b3AgbW9kZQogIGNvbmZpZ3VyZSBmdW5jdGlvbiBpbnRvIGVuY29kZXIgLmVuYWJsZSBo ZWxwZXIgZnVuY3Rpb25zLiAoTWFyaykKCkNoYW5nZXMgaW4gdjM6Ci0gVXNlIGVuY29kZXIgZW5h YmxlL2Rpc2FibGUgZnVuY3Rpb24sIGFuZCByZW1vdmUgdGhlIGVuY29kZXIgRFBNUyBmdW5jdGlv bgotIEtlZXAgSERNSSBQTEwgcG93ZXIgb24gaW4gc3RhbmRieSBtb2RlCgpDaGFuZ2VzIGluIHYy OgotIFVzaW5nIERSTSBhdG9taWMgaGVscGVyIGZ1bmN0aW9ucyBmb3IgY29ubmVjdG9yIGluaXQg KE1hcmspCi0gUmVtb3ZlICJoZG1pLT5jb25uZWN0b3IuZW5jb2RlciA9IGVuY29kZXI7IiAoTWFy aykKCiBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvS2NvbmZpZyAgICAgfCAgIDggKwogZHJpdmVy cy9ncHUvZHJtL3JvY2tjaGlwL01ha2VmaWxlICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9y b2NrY2hpcC9pbm5vX2hkbWkuYyB8IDk5MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwogZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2lubm9faGRtaS5oIHwgMzY0ICsrKysrKysr KysrKysKIDQgZmlsZXMgY2hhbmdlZCwgMTM2NSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2lubm9faGRtaS5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2lubm9faGRtaS5oCgpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2No aXAvS2NvbmZpZwppbmRleCAzNTIxNWY2Li5hNTAxNGUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vcm9ja2NoaXAvS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvS2Nv bmZpZwpAQCAtMjUsMyArMjUsMTEgQEAgY29uZmlnIFJPQ0tDSElQX0RXX0hETUkKIAkgIGZvciB0 aGUgU3lub3BzeXMgRGVzaWduV2FyZSBIRE1JIGRyaXZlci4gSWYgeW91IHdhbnQgdG8KIAkgIGVu YWJsZSBIRE1JIG9uIFJLMzI4OCBiYXNlZCBTb0MsIHlvdSBzaG91bGQgc2VsZXQgdGhpcwogCSAg b3B0aW9uLgorCitjb25maWcgUk9DS0NISVBfSU5OT19IRE1JCisJdHJpc3RhdGUgIlJvY2tjaGlw IHNwZWNpZmljIGV4dGVuc2lvbnMgZm9yIElubm9zaWxpY29uIEhETUkiCisgICAgICAgIGRlcGVu ZHMgb24gRFJNX1JPQ0tDSElQCisgICAgICAgIGhlbHAKKwkgIFRoaXMgc2VsZWN0cyBzdXBwb3J0 IGZvciBSb2NrY2hpcCBTb0Mgc3BlY2lmaWMgZXh0ZW5zaW9ucworCSAgZm9yIHRoZSBJbm5vc2ls aWNvbiBIRE1JIGRyaXZlci4gSWYgeW91IHdhbnQgdG8gZW5hYmxlCisJICBIRE1JIG9uIFJLMzAz NiBiYXNlZCBTb0MsIHlvdSBzaG91bGQgc2VsZXQgdGhpcyBvcHRpb24uCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2No aXAvTWFrZWZpbGUKaW5kZXggOWU2ZTk5Mi4uOTZiOWRiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL3JvY2tjaGlwL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9N YWtlZmlsZQpAQCAtNiw1ICs2LDYgQEAgcm9ja2NoaXBkcm0teSA6PSByb2NrY2hpcF9kcm1fZHJ2 Lm8gcm9ja2NoaXBfZHJtX2ZiLm8gcm9ja2NoaXBfZHJtX2ZiZGV2Lm8gXAogCQlyb2NrY2hpcF9k cm1fZ2VtLm8gcm9ja2NoaXBfZHJtX3ZvcC5vCiAKIG9iai0kKENPTkZJR19ST0NLQ0hJUF9EV19I RE1JKSArPSBkd19oZG1pLXJvY2tjaGlwLm8KK29iai0kKENPTkZJR19ST0NLQ0hJUF9JTk5PX0hE TUkpICs9IGlubm9faGRtaS5vCiAKIG9iai0kKENPTkZJR19EUk1fUk9DS0NISVApICs9IHJvY2tj aGlwZHJtLm8gcm9ja2NoaXBfdm9wX3JlZy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v cm9ja2NoaXAvaW5ub19oZG1pLmMgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvaW5ub19oZG1p LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMyMTJiOAotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9pbm5vX2hkbWkuYwpAQCAtMCwwICsx LDk5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgRnV6aG91IFJvY2tjaGlwIEVsZWN0cm9uaWNz IENvLkx0ZAorICogICAgWmhlbmcgWWFuZyA8emhlbmd5YW5nQHJvY2stY2hpcHMuY29tPgorICog ICAgWWFraXIgWWFuZyA8eWtrQHJvY2stY2hpcHMuY29tPgorICoKKyAqIFRoaXMgc29mdHdhcmUg aXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAq IExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVk IHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAq IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lu Y2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxp bnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaGRt aS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1 bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2Rldmlj ZS5oPgorCisjaW5jbHVkZSA8ZHJtL2RybV9vZi5oPgorI2luY2x1ZGUgPGRybS9kcm1QLmg+Cisj aW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRj X2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZWRpZC5oPgorI2luY2x1ZGUgPGRybS9kcm1f ZW5jb2Rlcl9zbGF2ZS5oPgorCisjaW5jbHVkZSAicm9ja2NoaXBfZHJtX2Rydi5oIgorI2luY2x1 ZGUgInJvY2tjaGlwX2RybV92b3AuaCIKKworI2luY2x1ZGUgImlubm9faGRtaS5oIgorCisjZGVm aW5lIHRvX2lubm9faGRtaSh4KQljb250YWluZXJfb2YoeCwgc3RydWN0IGlubm9faGRtaSwgeCkK Kworc3RydWN0IGhkbWlfZGF0YV9pbmZvIHsKKwlpbnQgdmljOworCWJvb2wgc2lua19pc19oZG1p OworCWJvb2wgc2lua19oYXNfYXVkaW87CisJdW5zaWduZWQgaW50IGVuY19pbl9mb3JtYXQ7CisJ dW5zaWduZWQgaW50IGVuY19vdXRfZm9ybWF0OworCXVuc2lnbmVkIGludCBjb2xvcmltZXRyeTsK K307CisKK3N0cnVjdCBpbm5vX2hkbWlfaTJjIHsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgYWRhcDsK KworCXU4IGRkY19hZGRyOworCXU4IHNlZ21lbnRfYWRkcjsKKworCXN0cnVjdCBtdXRleCBsb2Nr OworCXN0cnVjdCBjb21wbGV0aW9uIGNtcDsKK307CisKK3N0cnVjdCBpbm5vX2hkbWkgeworCXN0 cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldjsKKworCWludCBp cnE7CisJc3RydWN0IGNsayAqcGNsazsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisKKwlzdHJ1Y3Qg ZHJtX2Nvbm5lY3Rvcgljb25uZWN0b3I7CisJc3RydWN0IGRybV9lbmNvZGVyCWVuY29kZXI7CisK KwlzdHJ1Y3QgaW5ub19oZG1pX2kyYyAqaTJjOworCXN0cnVjdCBpMmNfYWRhcHRlciAqZGRjOwor CisJdW5zaWduZWQgaW50IHRtZHNfcmF0ZTsKKworCXN0cnVjdCBoZG1pX2RhdGFfaW5mbwloZG1p X2RhdGE7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgcHJldmlvdXNfbW9kZTsKK307CisKK2Vu dW0geworCUNTQ19JVFU2MDFfMTZfMjM1X1RPX1JHQl8wXzI1NV84QklULAorCUNTQ19JVFU2MDFf MF8yNTVfVE9fUkdCXzBfMjU1XzhCSVQsCisJQ1NDX0lUVTcwOV8xNl8yMzVfVE9fUkdCXzBfMjU1 XzhCSVQsCisJQ1NDX1JHQl8wXzI1NV9UT19JVFU2MDFfMTZfMjM1XzhCSVQsCisJQ1NDX1JHQl8w XzI1NV9UT19JVFU3MDlfMTZfMjM1XzhCSVQsCisJQ1NDX1JHQl8wXzI1NV9UT19SR0JfMTZfMjM1 XzhCSVQsCit9OworCitzdGF0aWMgY29uc3QgY2hhciBjb2VmZl9jc2NbXVsyNF0gPSB7CisJLyoK KwkgKiBZVVYyUkdCOjYwMSBTRCBtb2RlKFlbMTY6MjM1XSwgVVZbMTY6MjQwXSwgUkdCWzA6MjU1 XSk6CisJICogICBSID0gMS4xNjQqWSArIDEuNTk2KlYgLSAyMDQKKwkgKiAgIEcgPSAxLjE2NCpZ IC0gMC4zOTEqVSAtIDAuODEzKlYgKyAxNTQKKwkgKiAgIEIgPSAxLjE2NCpZICsgMi4wMTgqVSAt IDI1OAorCSAqLworCXsKKwkJMHgwNCwgMHhhNywgMHgwMCwgMHgwMCwgMHgwNiwgMHg2MiwgMHgw MiwgMHhjYywKKwkJMHgwNCwgMHhhNywgMHgxMSwgMHg5MCwgMHgxMywgMHg0MCwgMHgwMCwgMHg5 YSwKKwkJMHgwNCwgMHhhNywgMHgwOCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMgorCX0s CisJLyoKKwkgKiBZVVYyUkdCOjYwMSBTRCBtb2RlKFlVVlswOjI1NV0sUkdCWzA6MjU1XSk6CisJ ICogICBSID0gWSArIDEuNDAyKlYgLSAyNDgKKwkgKiAgIEcgPSBZIC0gMC4zNDQqVSAtIDAuNzE0 KlYgKyAxMzUKKwkgKiAgIEIgPSBZICsgMS43NzIqVSAtIDIyNworCSAqLworCXsKKwkJMHgwNCwg MHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg5YiwgMHgwMiwgMHhmOCwKKwkJMHgwNCwgMHgwMCwg MHgxMSwgMHg2MCwgMHgxMiwgMHhkYiwgMHgwMCwgMHg4NywKKwkJMHgwNCwgMHgwMCwgMHgwNywg MHgxNiwgMHgwMCwgMHgwMCwgMHgwMiwgMHhlMworCX0sCisJLyoKKwkgKiBZVVYyUkdCOjcwOSBI RCBtb2RlKFlbMTY6MjM1XSxVVlsxNjoyNDBdLFJHQlswOjI1NV0pOgorCSAqICAgUiA9IDEuMTY0 KlkgKyAxLjc5MypWIC0gMjQ4CisJICogICBHID0gMS4xNjQqWSAtIDAuMjEzKlUgLSAwLjUzNCpW ICsgNzcKKwkgKiAgIEIgPSAxLjE2NCpZICsgMi4xMTUqVSAtIDI4OQorCSAqLworCXsKKwkJMHgw NCwgMHhhNywgMHgwMCwgMHgwMCwgMHgwNywgMHgyYywgMHgwMiwgMHhmOCwKKwkJMHgwNCwgMHhh NywgMHgxMCwgMHhkYSwgMHgxMiwgMHgyMiwgMHgwMCwgMHg0ZCwKKwkJMHgwNCwgMHhhNywgMHgw OCwgMHg3NCwgMHgwMCwgMHgwMCwgMHgwMywgMHgyMQorCX0sCisKKwkvKgorCSAqIFJHQjJZVVY6 NjAxIFNEIG1vZGU6CisJICogICBDYiA9IC0wLjI5MUcgLSAwLjE0OFIgKyAwLjQzOUIgKyAxMjgK KwkgKiAgIFkgID0gMC41MDRHICArIDAuMjU3UiArIDAuMDk4QiArIDE2CisJICogICBDciA9IC0w LjM2OEcgKyAwLjQzOVIgLSAwLjA3MUIgKyAxMjgKKwkgKi8KKwl7CisJCTB4MTEsIDB4NWYsIDB4 MDEsIDB4ODIsIDB4MTAsIDB4MjMsIDB4MDAsIDB4ODAsCisJCTB4MDIsIDB4MWMsIDB4MDAsIDB4 YTEsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MWUsCisJCTB4MTEsIDB4MjksIDB4MTAsIDB4NTksIDB4 MDEsIDB4ODIsIDB4MDAsIDB4ODAKKwl9LAorCS8qCisJICogUkdCMllVVjo3MDkgSEQgbW9kZToK KwkgKiAgIENiID0gLSAwLjMzOEcgLSAwLjEwMVIgKyAwLjQzOUIgKyAxMjgKKwkgKiAgIFkgID0g MC42MTRHICAgKyAwLjE4M1IgKyAwLjA2MkIgKyAxNgorCSAqICAgQ3IgPSAtIDAuMzk5RyArIDAu NDM5UiAtIDAuMDQwQiArIDEyOAorCSAqLworCXsKKwkJMHgxMSwgMHg5OCwgMHgwMSwgMHhjMSwg MHgxMCwgMHgyOCwgMHgwMCwgMHg4MCwKKwkJMHgwMiwgMHg3NCwgMHgwMCwgMHhiYiwgMHgwMCwg MHgzZiwgMHgwMCwgMHgxMCwKKwkJMHgxMSwgMHg1YSwgMHgxMCwgMHg2NywgMHgwMSwgMHhjMSwg MHgwMCwgMHg4MAorCX0sCisJLyoKKwkgKiBSR0JbMDoyNTVdMlJHQlsxNjoyMzVdOgorCSAqICAg UicgPSBSIHggKDIzNS0xNikvMjU1ICsgMTY7CisJICogICBHJyA9IEcgeCAoMjM1LTE2KS8yNTUg KyAxNjsKKwkgKiAgIEInID0gQiB4ICgyMzUtMTYpLzI1NSArIDE2OworCSAqLworCXsKKwkJMHgw MCwgMHgwMCwgMHgwMywgMHg2RiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkJMHgwMywgMHg2 RiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkJMHgwMCwgMHgwMCwgMHgw MCwgMHgwMCwgMHgwMywgMHg2RiwgMHgwMCwgMHgxMAorCX0sCit9OworCitzdGF0aWMgaW5saW5l IHU4IGhkbWlfcmVhZGIoc3RydWN0IGlubm9faGRtaSAqaGRtaSwgdTE2IG9mZnNldCkKK3sKKwly ZXR1cm4gcmVhZGxfcmVsYXhlZChoZG1pLT5yZWdzICsgKG9mZnNldCkgKiAweDA0KTsKK30KKwor c3RhdGljIGlubGluZSB2b2lkIGhkbWlfd3JpdGViKHN0cnVjdCBpbm5vX2hkbWkgKmhkbWksIHUx NiBvZmZzZXQsIHUzMiB2YWwpCit7CisJd3JpdGVsX3JlbGF4ZWQodmFsLCBoZG1pLT5yZWdzICsg KG9mZnNldCkgKiAweDA0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGhkbWlfbW9kYihzdHJ1 Y3QgaW5ub19oZG1pICpoZG1pLCB1MTYgb2Zmc2V0LAorCQkJICAgICB1MzIgbXNrLCB1MzIgdmFs KQoreworCXU4IHRlbXAgPSBoZG1pX3JlYWRiKGhkbWksIG9mZnNldCkgJiB+bXNrOworCisJdGVt cCB8PSB2YWwgJiBtc2s7CisJaGRtaV93cml0ZWIoaGRtaSwgb2Zmc2V0LCB0ZW1wKTsKK30KKwor c3RhdGljIHZvaWQgaW5ub19oZG1pX2kyY19pbml0KHN0cnVjdCBpbm5vX2hkbWkgKmhkbWkpCit7 CisJaW50IGRkY19idXNfZnJlcTsKKworCWRkY19idXNfZnJlcSA9IChoZG1pLT50bWRzX3JhdGUg Pj4gMikgLyBIRE1JX1NDTF9SQVRFOworCisJaGRtaV93cml0ZWIoaGRtaSwgRERDX0JVU19GUkVR X0wsIGRkY19idXNfZnJlcSAmIDB4RkYpOworCWhkbWlfd3JpdGViKGhkbWksIEREQ19CVVNfRlJF UV9ILCAoZGRjX2J1c19mcmVxID4+IDgpICYgMHhGRik7CisKKwkvKiBDbGVhciB0aGUgRURJRCBp bnRlcnJ1cHQgZmxhZyBhbmQgbXV0ZSB0aGUgaW50ZXJydXB0ICovCisJaGRtaV93cml0ZWIoaGRt aSwgSERNSV9JTlRFUlJVUFRfTUFTSzEsIDApOworCWhkbWlfd3JpdGViKGhkbWksIEhETUlfSU5U RVJSVVBUX1NUQVRVUzEsIG1fSU5UX0VESURfUkVBRFkpOworfQorCitzdGF0aWMgdm9pZCBpbm5v X2hkbWlfc3lzX3Bvd2VyKHN0cnVjdCBpbm5vX2hkbWkgKmhkbWksIGJvb2wgZW5hYmxlKQorewor CWlmIChlbmFibGUpCisJCWhkbWlfbW9kYihoZG1pLCBIRE1JX1NZU19DVFJMLCBtX1BPV0VSLCB2 X1BXUl9PTik7CisJZWxzZQorCQloZG1pX21vZGIoaGRtaSwgSERNSV9TWVNfQ1RSTCwgbV9QT1dF Uiwgdl9QV1JfT0ZGKTsKK30KKworc3RhdGljIHZvaWQgaW5ub19oZG1pX3NldF9wd3JfbW9kZShz dHJ1Y3QgaW5ub19oZG1pICpoZG1pLCBpbnQgbW9kZSkKK3sKKwlzd2l0Y2ggKG1vZGUpIHsKKwlj YXNlIE5PUk1BTDoKKwkJaW5ub19oZG1pX3N5c19wb3dlcihoZG1pLCBmYWxzZSk7CisKKwkJaGRt aV93cml0ZWIoaGRtaSwgSERNSV9QSFlfUFJFX0VNUEhBU0lTLCAweDZmKTsKKwkJaGRtaV93cml0 ZWIoaGRtaSwgSERNSV9QSFlfRFJJVkVSLCAweGJiKTsKKworCQloZG1pX3dyaXRlYihoZG1pLCBI RE1JX1BIWV9TWVNfQ1RMLCAweDE1KTsKKwkJaGRtaV93cml0ZWIoaGRtaSwgSERNSV9QSFlfU1lT X0NUTCwgMHgxNCk7CisJCWhkbWlfd3JpdGViKGhkbWksIEhETUlfUEhZX1NZU19DVEwsIDB4MTAp OworCQloZG1pX3dyaXRlYihoZG1pLCBIRE1JX1BIWV9DSEdfUFdSLCAweDBmKTsKKwkJaGRtaV93 cml0ZWIoaGRtaSwgSERNSV9QSFlfU1lOQywgMHgwMCk7CisJCWhkbWlfd3JpdGViKGhkbWksIEhE TUlfUEhZX1NZTkMsIDB4MDEpOworCisJCWlubm9faGRtaV9zeXNfcG93ZXIoaGRtaSwgdHJ1ZSk7 CisJCWJyZWFrOworCisJY2FzZSBMT1dFUl9QV1I6CisJCWlubm9faGRtaV9zeXNfcG93ZXIoaGRt aSwgZmFsc2UpOworCQloZG1pX3dyaXRlYihoZG1pLCBIRE1JX1BIWV9EUklWRVIsIDB4MDApOwor CQloZG1pX3dyaXRlYihoZG1pLCBIRE1JX1BIWV9QUkVfRU1QSEFTSVMsIDB4MDApOworCQloZG1p X3dyaXRlYihoZG1pLCBIRE1JX1BIWV9DSEdfUFdSLCAweDAwKTsKKwkJaGRtaV93cml0ZWIoaGRt aSwgSERNSV9QSFlfU1lTX0NUTCwgMHgxNSk7CisKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlk ZXZfZXJyKGhkbWktPmRldiwgIlVua25vd24gcG93ZXIgbW9kZSAlZFxuIiwgbW9kZSk7CisJfQor fQorCitzdGF0aWMgdm9pZCBpbm5vX2hkbWlfcmVzZXQoc3RydWN0IGlubm9faGRtaSAqaGRtaSkK K3sKKwl1MzIgdmFsOworCXUzMiBtc2s7CisKKwloZG1pX21vZGIoaGRtaSwgSERNSV9TWVNfQ1RS TCwgbV9SU1RfRElHSVRBTCwgdl9OT1RfUlNUX0RJR0lUQUwpOworCXVkZWxheSgxMDApOworCisJ aGRtaV9tb2RiKGhkbWksIEhETUlfU1lTX0NUUkwsIG1fUlNUX0FOQUxPRywgdl9OT1RfUlNUX0FO QUxPRyk7CisJdWRlbGF5KDEwMCk7CisKKwltc2sgPSBtX1JFR19DTEtfSU5WIHwgbV9SRUdfQ0xL X1NPVVJDRSB8IG1fUE9XRVIgfCBtX0lOVF9QT0w7CisJdmFsID0gdl9SRUdfQ0xLX0lOViB8IHZf UkVHX0NMS19TT1VSQ0VfU1lTIHwgdl9QV1JfT04gfCB2X0lOVF9QT0xfSElHSDsKKwloZG1pX21v ZGIoaGRtaSwgSERNSV9TWVNfQ1RSTCwgbXNrLCB2YWwpOworCisJaW5ub19oZG1pX3NldF9wd3Jf bW9kZShoZG1pLCBOT1JNQUwpOworfQorCitzdGF0aWMgaW50IGlubm9faGRtaV9jb25maWdfdmlk ZW9fYXZpKHN0cnVjdCBpbm5vX2hkbWkgKmhkbWkpCit7CisJY2hhciBpbmZvW0hETUlfU0laRV9B VklfSU5GT0ZSQU1FXSA9IHswfTsKKwlpbnQgYXZpX2NvbG9yX21vZGU7CisJaW50IGk7CisKKwlo ZG1pX3dyaXRlYihoZG1pLCBIRE1JX0NPTlRST0xfUEFDS0VUX0JVRl9JTkRFWCwgSU5GT0ZSQU1F X0FWSSk7CisKKwlpbmZvWzBdID0gMHg4MjsKKwlpbmZvWzFdID0gMHgwMjsKKwlpbmZvWzJdID0g MHgwRDsKKwlpbmZvWzNdID0gaW5mb1swXSArIGluZm9bMV0gKyBpbmZvWzJdOworCisJaWYgKGhk bWktPmhkbWlfZGF0YS5lbmNfb3V0X2Zvcm1hdCA9PSBIRE1JX0NPTE9SU1BBQ0VfUkdCKQorCQlh dmlfY29sb3JfbW9kZSA9IEFWSV9DT0xPUl9NT0RFX1JHQjsKKwllbHNlIGlmIChoZG1pLT5oZG1p X2RhdGEuZW5jX291dF9mb3JtYXQgPT0gSERNSV9DT0xPUlNQQUNFX1lVVjQ0NCkKKwkJYXZpX2Nv bG9yX21vZGUgPSBBVklfQ09MT1JfTU9ERV9ZQ0JDUjQ0NDsKKwllbHNlIGlmIChoZG1pLT5oZG1p X2RhdGEuZW5jX291dF9mb3JtYXQgPT0gSERNSV9DT0xPUlNQQUNFX1lVVjQyMikKKwkJYXZpX2Nv bG9yX21vZGUgPSBBVklfQ09MT1JfTU9ERV9ZQ0JDUjQyMjsKKwllbHNlCisJCWF2aV9jb2xvcl9t b2RlID0gQVZJX0NPTE9SX01PREVfUkdCOworCisJaW5mb1s0XSA9IChhdmlfY29sb3JfbW9kZSA8 PCA1KTsKKwlpbmZvWzVdID0gKEFWSV9DT0xPUklNRVRSWV9OT19EQVRBIDw8IDYpIHwKKwkJICAo QVZJX0NPREVEX0ZSQU1FX0FTUEVDVF9OT19EQVRBIDw8IDQpIHwKKwkJICBBQ1RJVkVfQVNQRUNU X1JBVEVfU0FNRV9BU19DT0RFRF9GUkFNRTsKKworCWluZm9bNl0gPSAwOworCWluZm9bN10gPSBo ZG1pLT5oZG1pX2RhdGEudmljOworCisJaWYgKGhkbWktPmhkbWlfZGF0YS52aWMgPT0gNiB8fCBo ZG1pLT5oZG1pX2RhdGEudmljID09IDcgfHwKKwkgICAgaGRtaS0+aGRtaV9kYXRhLnZpYyA9PSAy MSB8fCBoZG1pLT5oZG1pX2RhdGEudmljID09IDIyKQorCQlpbmZvWzhdID0gMTsKKwllbHNlCisJ CWluZm9bOF0gPSAwOworCisJLyogQ2FsY3VsYXRlIGF2aSBpbmZvIGZyYW1lIGNoZWNLc3VtICov CisJZm9yIChpID0gNDsgaSA8IEhETUlfU0laRV9BVklfSU5GT0ZSQU1FOyBpKyspCisJCWluZm9b M10gKz0gaW5mb1tpXTsKKwlpbmZvWzNdID0gMHgxMDAgLSBpbmZvWzNdOworCisJZm9yIChpID0g MDsgaSA8IEhETUlfU0laRV9BVklfSU5GT0ZSQU1FOyBpKyspCisJCWhkbWlfd3JpdGViKGhkbWks IEhETUlfQ09OVFJPTF9QQUNLRVRfQUREUiArIGksIGluZm9baV0pOworCisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQgaW5ub19oZG1pX2NvbmZpZ192aWRlb192c2koc3RydWN0IGlubm9faGRt aSAqaGRtaSkKK3sKKwljaGFyIGluZm9bSERNSV9TSVpFX1ZTSV9JTkZPRlJBTUVdID0gezB9Owor CWludCBpOworCisJaGRtaV9tb2RiKGhkbWksIEhETUlfUEFDS0VUX1NFTkRfQVVUTywgbV9QQUNL RVRfVlNJX0VOLAorCQkgIHZfUEFDS0VUX1ZTSV9FTigwKSk7CisKKwloZG1pX3dyaXRlYihoZG1p LCBIRE1JX0NPTlRST0xfUEFDS0VUX0JVRl9JTkRFWCwgSU5GT0ZSQU1FX1ZTSSk7CisKKwkvKiBI ZWFkZXIgQnl0ZXMgKi8KKwlpbmZvWzBdID0gMHg4MTsKKwlpbmZvWzFdID0gMHgwMTsKKworCS8q IFBCMSAtIFBCMyBjb250YWluIHRoZSAyNGJpdCBJRUVFIFJlZ2lzdHJhdGlvbiBJZGVudGlmaWVy ICovCisJaW5mb1s0XSA9IDB4MDM7CisJaW5mb1s1XSA9IDB4MGM7CisJaW5mb1s2XSA9IDB4MDA7 CisKKwkvKiBQQjQgLSBIRE1JX1ZpZGVvX0Zvcm1hdCBpbnRvIGJpdHMgNzo1ICovCisJaW5mb1s3 XSA9IDA7CisKKwkvKgorCSAqIFBCNSAtIERlcGVuZGluZyBvbiB0aGUgdmlkZW8gZm9ybWF0LCB0 aGlzIGJ5dGUgd2lsbCBjb250YWluCisJICogZWl0aGVyIHRoZSBIRE1JX1ZJQyBjb2RlIGluIGJ1 dHMgNzowLCBPUiB0aGUgM0RfU3RydWN0dXJlIGluCisJICogYml0cyA3OjQuCisJICovCisJaW5m b1syXSA9IDB4MDYgLSAyOworCWluZm9bOF0gPSAwOworCWluZm9bOV0gPSAwOworCisJaW5mb1sz XSA9IGluZm9bMF0gKyBpbmZvWzFdICsgaW5mb1syXTsKKworCS8qIENhbGN1bGF0ZSBpbmZvIGZy YW1lIGNoZWNLc3VtICovCisJZm9yIChpID0gNDsgaSA8IEhETUlfU0laRV9WU0lfSU5GT0ZSQU1F OyBpKyspCisJCWluZm9bM10gKz0gaW5mb1tpXTsKKwlpbmZvWzNdID0gMHgxMDAgLSBpbmZvWzNd OworCisJZm9yIChpID0gMDsgaSA8IEhETUlfU0laRV9WU0lfSU5GT0ZSQU1FOyBpKyspCisJCWhk bWlfd3JpdGViKGhkbWksIEhETUlfQ09OVFJPTF9QQUNLRVRfQUREUiArIGksIGluZm9baV0pOwor CisJaGRtaV9tb2RiKGhkbWksIEhETUlfUEFDS0VUX1NFTkRfQVVUTywgbV9QQUNLRVRfVlNJX0VO LAorCQkgIHZfUEFDS0VUX1ZTSV9FTigxKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu dCBpbm5vX2hkbWlfY29uZmlnX3ZpZGVvX2NzYyhzdHJ1Y3QgaW5ub19oZG1pICpoZG1pKQorewor CXN0cnVjdCBoZG1pX2RhdGFfaW5mbyAqZGF0YSA9ICZoZG1pLT5oZG1pX2RhdGE7CisJaW50IGMw X2MyX2NoYW5nZSA9IDA7CisJaW50IGNzY19lbmFibGUgPSAwOworCWludCBjc2NfbW9kZSA9IDA7 CisJaW50IGF1dG9fY3NjID0gMDsKKwlpbnQgdmFsdWU7CisJaW50IGk7CisKKwkvKiBJbnB1dCB2 aWRlbyBtb2RlIGlzIFNEUiBSR0IyNGJpdCwgZGF0YSBlbmFibGUgc2lnbmFsIGZyb20gZXh0ZXJu YWwgKi8KKwloZG1pX3dyaXRlYihoZG1pLCBIRE1JX1ZJREVPX0NPTlRSTDEsIHZfREVfRVhURVJO QUwgfAorCQkgICAgdl9WSURFT19JTlBVVF9GT1JNQVQoVklERU9fSU5QVVRfU0RSX1JHQjQ0NCkp OworCisJLyogSW5wdXQgY29sb3IgaGFyZGNvZGUgdG8gUkdCLCBhbmQgb3V0cHV0IGNvbG9yIGhh cmRjb2RlIHRvIFJHQjg4OCAqLworCXZhbHVlID0gdl9WSURFT19JTlBVVF9CSVRTKFZJREVPX0lO UFVUXzhCSVRTKSB8CisJCXZfVklERU9fT1VUUFVUX0NPTE9SKDApIHwKKwkJdl9WSURFT19JTlBV VF9DU1AoMCk7CisJaGRtaV93cml0ZWIoaGRtaSwgSERNSV9WSURFT19DT05UUkwyLCB2YWx1ZSk7 CisKKwlpZiAoZGF0YS0+ZW5jX291dF9mb3JtYXQgPT0gZGF0YS0+ZW5jX291dF9mb3JtYXQpIHsK KwkJaWYgKChkYXRhLT5lbmNfaW5fZm9ybWF0ID09IEhETUlfQ09MT1JTUEFDRV9SR0IpIHx8CisJ CSAgICAoZGF0YS0+ZW5jX2luX2Zvcm1hdCA+PSBIRE1JX0NPTE9SU1BBQ0VfWVVWNDQ0KSkgewor CQkJdmFsdWUgPSB2X1NPRl9ESVNBQkxFIHwgdl9DT0xPUl9ERVBUSF9OT1RfSU5ESUNBVEVEKDEp OworCQkJaGRtaV93cml0ZWIoaGRtaSwgSERNSV9WSURFT19DT05UUkwzLCB2YWx1ZSk7CisKKwkJ CWhkbWlfbW9kYihoZG1pLCBIRE1JX1ZJREVPX0NPTlRSTCwKKwkJCQkgIG1fVklERU9fQVVUT19D U0MgfCBtX1ZJREVPX0MwX0MyX1NXQVAsCisJCQkJICB2X1ZJREVPX0FVVE9fQ1NDKEFVVE9fQ1ND X0RJU0FCTEUpIHwKKwkJCQkgIHZfVklERU9fQzBfQzJfU1dBUChDMF9DMl9DSEFOR0VfRElTQUJM RSkpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlpZiAoZGF0YS0+Y29sb3JpbWV0cnkgPT0g SERNSV9DT0xPUklNRVRSWV9JVFVfNjAxKSB7CisJCWlmICgoZGF0YS0+ZW5jX2luX2Zvcm1hdCA9 PSBIRE1JX0NPTE9SU1BBQ0VfUkdCKSAmJgorCQkgICAgKGRhdGEtPmVuY19vdXRfZm9ybWF0ID09 IEhETUlfQ09MT1JTUEFDRV9ZVVY0NDQpKSB7CisJCQljc2NfbW9kZSA9IENTQ19SR0JfMF8yNTVf VE9fSVRVNjAxXzE2XzIzNV84QklUOworCQkJYXV0b19jc2MgPSBBVVRPX0NTQ19ESVNBQkxFOwor CQkJYzBfYzJfY2hhbmdlID0gQzBfQzJfQ0hBTkdFX0RJU0FCTEU7CisJCQljc2NfZW5hYmxlID0g dl9DU0NfRU5BQkxFOworCQl9IGVsc2UgaWYgKChkYXRhLT5lbmNfaW5fZm9ybWF0ID09IEhETUlf Q09MT1JTUEFDRV9ZVVY0NDQpICYmCisJCQkgICAoZGF0YS0+ZW5jX291dF9mb3JtYXQgPT0gSERN SV9DT0xPUlNQQUNFX1JHQikpIHsKKwkJCWNzY19tb2RlID0gQ1NDX0lUVTYwMV8xNl8yMzVfVE9f UkdCXzBfMjU1XzhCSVQ7CisJCQlhdXRvX2NzYyA9IEFVVE9fQ1NDX0VOQUJMRTsKKwkJCWMwX2My X2NoYW5nZSA9IEMwX0MyX0NIQU5HRV9ESVNBQkxFOworCQkJY3NjX2VuYWJsZSA9IHZfQ1NDX0RJ U0FCTEU7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoKGRhdGEtPmVuY19pbl9mb3JtYXQgPT0gSERN SV9DT0xPUlNQQUNFX1JHQikgJiYKKwkJICAgIChkYXRhLT5lbmNfb3V0X2Zvcm1hdCA9PSBIRE1J X0NPTE9SU1BBQ0VfWVVWNDQ0KSkgeworCQkJY3NjX21vZGUgPSBDU0NfUkdCXzBfMjU1X1RPX0lU VTcwOV8xNl8yMzVfOEJJVDsKKwkJCWF1dG9fY3NjID0gQVVUT19DU0NfRElTQUJMRTsKKwkJCWMw X2MyX2NoYW5nZSA9IEMwX0MyX0NIQU5HRV9ESVNBQkxFOworCQkJY3NjX2VuYWJsZSA9IHZfQ1ND X0VOQUJMRTsKKwkJfSBlbHNlIGlmICgoZGF0YS0+ZW5jX2luX2Zvcm1hdCA9PSBIRE1JX0NPTE9S U1BBQ0VfWVVWNDQ0KSAmJgorCQkJICAgKGRhdGEtPmVuY19vdXRfZm9ybWF0ID09IEhETUlfQ09M T1JTUEFDRV9SR0IpKSB7CisJCQljc2NfbW9kZSA9IENTQ19JVFU3MDlfMTZfMjM1X1RPX1JHQl8w XzI1NV84QklUOworCQkJYXV0b19jc2MgPSBBVVRPX0NTQ19FTkFCTEU7CisJCQljMF9jMl9jaGFu Z2UgPSBDMF9DMl9DSEFOR0VfRElTQUJMRTsKKwkJCWNzY19lbmFibGUgPSB2X0NTQ19ESVNBQkxF OworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IDI0OyBpKyspCisJCWhkbWlfd3JpdGViKGhk bWksIEhETUlfVklERU9fQ1NDX0NPRUYgKyBpLAorCQkJICAgIGNvZWZmX2NzY1tjc2NfbW9kZV1b aV0pOworCisJdmFsdWUgPSB2X1NPRl9ESVNBQkxFIHwgY3NjX2VuYWJsZSB8IHZfQ09MT1JfREVQ VEhfTk9UX0lORElDQVRFRCgxKTsKKwloZG1pX3dyaXRlYihoZG1pLCBIRE1JX1ZJREVPX0NPTlRS TDMsIHZhbHVlKTsKKwloZG1pX21vZGIoaGRtaSwgSERNSV9WSURFT19DT05UUkwsIG1fVklERU9f QVVUT19DU0MgfAorCQkgIG1fVklERU9fQzBfQzJfU1dBUCwgdl9WSURFT19BVVRPX0NTQyhhdXRv X2NzYykgfAorCQkgIHZfVklERU9fQzBfQzJfU1dBUChjMF9jMl9jaGFuZ2UpKTsKKworCXJldHVy biAwOworfQorCitzdGF0aWMgaW50IGlubm9faGRtaV9jb25maWdfdmlkZW9fdGltaW5nKHN0cnVj dCBpbm5vX2hkbWkgKmhkbWksCisJCQkJCSBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkK K3sKKwlpbnQgdmFsdWU7CisKKwkvKiBTZXQgZGV0YWlsIGV4dGVybmFsIHZpZGVvIHRpbWluZyBw b2xhcml0eSBhbmQgaW50ZXJsYWNlIG1vZGUgKi8KKwl2YWx1ZSA9IHZfRVhURVJBTkxfVklERU8o MSk7CisJdmFsdWUgfD0gbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX1BIU1lOQyA/CisJCSB2 X0hTWU5DX1BPTEFSSVRZKDEpIDogdl9IU1lOQ19QT0xBUklUWSgwKTsKKwl2YWx1ZSB8PSBtb2Rl LT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfUFZTWU5DID8KKwkJIHZfVlNZTkNfUE9MQVJJVFkoMSkg OiB2X1ZTWU5DX1BPTEFSSVRZKDApOworCXZhbHVlIHw9IG1vZGUtPmZsYWdzICYgRFJNX01PREVf RkxBR19JTlRFUkxBQ0UgPworCQkgdl9JTkVUTEFDRSgxKSA6IHZfSU5FVExBQ0UoMCk7CisJaGRt aV93cml0ZWIoaGRtaSwgSERNSV9WSURFT19USU1JTkdfQ1RMLCB2YWx1ZSk7CisKKwkvKiBTZXQg ZGV0YWlsIGV4dGVybmFsIHZpZGVvIHRpbWluZyAqLworCXZhbHVlID0gbW9kZS0+aHRvdGFsOwor CWhkbWlfd3JpdGViKGhkbWksIEhETUlfVklERU9fRVhUX0hUT1RBTF9MLCB2YWx1ZSAmIDB4RkYp OworCWhkbWlfd3JpdGViKGhkbWksIEhETUlfVklERU9fRVhUX0hUT1RBTF9ILCAodmFsdWUgPj4g OCkgJiAweEZGKTsKKworCXZhbHVlID0gbW9kZS0+aHRvdGFsIC0gbW9kZS0+aGRpc3BsYXk7CisJ aGRtaV93cml0ZWIoaGRtaSwgSERNSV9WSURFT19FWFRfSEJMQU5LX0wsIHZhbHVlICYgMHhGRik7 CisJaGRtaV93cml0ZWIoaGRtaSwgSERNSV9WSURFT19FWFRfSEJMQU5LX0gsICh2YWx1ZSA+PiA4 KSAmIDB4RkYpOworCisJdmFsdWUgPSBtb2RlLT5oc3luY19zdGFydCAtIG1vZGUtPmhkaXNwbGF5 OworCWhkbWlfd3JpdGViKGhkbWksIEhETUlfVklERU9fRVhUX0hERUxBWV9MLCB2YWx1ZSAmIDB4 RkYpOworCWhkbWlfd3JpdGViKGhkbWksIEhETUlfVklERU9fRVhUX0hERUxBWV9ILCAodmFsdWUg Pj4gOCkgJiAweEZGKTsKKworCXZhbHVlID0gbW9kZS0+aHN5bmNfZW5kIC0gbW9kZS0+aHN5bmNf c3RhcnQ7CisJaGRtaV93cml0ZWIoaGRtaSwgSERNSV9WSURFT19FWFRfSERVUkFUSU9OX0wsIHZh bHVlICYgMHhGRik7CisJaGRtaV93cml0ZWIoaGRtaSwgSERNSV9WSURFT19FWFRfSERVUkFUSU9O X0gsICh2YWx1ZSA+PiA4KSAmIDB4RkYpOworCisJdmFsdWUgPSBtb2RlLT52dG90YWw7CisJaGRt aV93cml0ZWIoaGRtaSwgSERNSV9WSURFT19FWFRfVlRPVEFMX0wsIHZhbHVlICYgMHhGRik7CisJ aGRtaV93cml0ZWIoaGRtaSwgSERNSV9WSURFT19FWFRfVlRPVEFMX0gsICh2YWx1ZSA+PiA4KSAm IDB4RkYpOworCisJdmFsdWUgPSBtb2RlLT52dG90YWwgLSBtb2RlLT52ZGlzcGxheTsKKwloZG1p X3dyaXRlYihoZG1pLCBIRE1JX1ZJREVPX0VYVF9WQkxBTkssIHZhbHVlICYgMHhGRik7CisKKwl2 YWx1ZSA9IG1vZGUtPnZzeW5jX3N0YXJ0IC0gbW9kZS0+dmRpc3BsYXk7CisJaGRtaV93cml0ZWIo aGRtaSwgSERNSV9WSURFT19FWFRfVkRFTEFZLCB2YWx1ZSAmIDB4RkYpOworCisJdmFsdWUgPSBt b2RlLT52c3luY19lbmQgLSBtb2RlLT52c3luY19zdGFydDsKKwloZG1pX3dyaXRlYihoZG1pLCBI RE1JX1ZJREVPX0VYVF9WRFVSQVRJT04sIHZhbHVlICYgMHhGRik7CisKKwloZG1pX3dyaXRlYiho ZG1pLCBIRE1JX1BIWV9QUkVfRElWX1JBVElPLCAweDFlKTsKKwloZG1pX3dyaXRlYihoZG1pLCBI RE1JX1BIWV9GRUVEQkFDS19ESVZfUkFUSU9fTE9XLCAweDJjKTsKKwloZG1pX3dyaXRlYihoZG1p LCBIRE1JX1BIWV9GRUVEQkFDS19ESVZfUkFUSU9fSElHSCwgMHgwMSk7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCBpbm5vX2hkbWlfc2V0dXAoc3RydWN0IGlubm9faGRtaSAqaGRtaSwK KwkJCSAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCWludCB2YWx1ZTsKKwor CWhkbWktPmhkbWlfZGF0YS52aWMgPSBkcm1fbWF0Y2hfY2VhX21vZGUobW9kZSk7CisKKwloZG1p LT5oZG1pX2RhdGEuZW5jX2luX2Zvcm1hdCA9IEhETUlfQ09MT1JTUEFDRV9SR0I7CisJaGRtaS0+ aGRtaV9kYXRhLmVuY19vdXRfZm9ybWF0ID0gSERNSV9DT0xPUlNQQUNFX1JHQjsKKworCWlmICgo aGRtaS0+aGRtaV9kYXRhLnZpYyA9PSA2KSB8fCAoaGRtaS0+aGRtaV9kYXRhLnZpYyA9PSA3KSB8 fAorCSAgICAoaGRtaS0+aGRtaV9kYXRhLnZpYyA9PSAyMSkgfHwgKGhkbWktPmhkbWlfZGF0YS52 aWMgPT0gMjIpIHx8CisJICAgIChoZG1pLT5oZG1pX2RhdGEudmljID09IDIpIHx8IChoZG1pLT5o ZG1pX2RhdGEudmljID09IDMpIHx8CisJICAgIChoZG1pLT5oZG1pX2RhdGEudmljID09IDE3KSB8 fCAoaGRtaS0+aGRtaV9kYXRhLnZpYyA9PSAxOCkpCisJCWhkbWktPmhkbWlfZGF0YS5jb2xvcmlt ZXRyeSA9IEhETUlfQ09MT1JJTUVUUllfSVRVXzYwMTsKKwllbHNlCisJCWhkbWktPmhkbWlfZGF0 YS5jb2xvcmltZXRyeSA9IEhETUlfQ09MT1JJTUVUUllfSVRVXzcwOTsKKworCS8qIE11dGUgdmlk ZW8gYW5kIGF1ZGlvIG91dHB1dCAqLworCWhkbWlfbW9kYihoZG1pLCBIRE1JX0FWX01VVEUsIG1f QVVESU9fTVVURSB8IG1fVklERU9fQkxBQ0ssCisJCSAgdl9BVURJT19NVVRFKDEpIHwgdl9WSURF T19NVVRFKDEpKTsKKworCS8qIFNldCBIRE1JIE1vZGUgKi8KKwloZG1pX3dyaXRlYihoZG1pLCBI RE1JX0hEQ1BfQ1RSTCwKKwkJICAgIHZfSERNSV9EVkkoaGRtaS0+aGRtaV9kYXRhLnNpbmtfaXNf aGRtaSkpOworCisJaW5ub19oZG1pX2NvbmZpZ192aWRlb190aW1pbmcoaGRtaSwgbW9kZSk7CisK Kwlpbm5vX2hkbWlfY29uZmlnX3ZpZGVvX2NzYyhoZG1pKTsKKworCWlmIChoZG1pLT5oZG1pX2Rh dGEuc2lua19pc19oZG1pKSB7CisJCWlubm9faGRtaV9jb25maWdfdmlkZW9fYXZpKGhkbWkpOwor CQlpbm5vX2hkbWlfY29uZmlnX3ZpZGVvX3ZzaShoZG1pKTsKKwl9CisKKwkvKgorCSAqIFdoZW4g SVAgY29udHJvbGxlciBoYXZlIGNvbmZpZ3VyZWQgdG8gYW4gYWNjdXJhdGUgdmlkZW8KKwkgKiB0 aW1pbmcsIHRoZW4gdGhlIFRNRFMgY2xvY2sgc291cmNlIHdvdWxkIGJlIHN3aXRjaGVkIHRvCisJ ICogRENMS19MQ0RDLCBzbyB3ZSBuZWVkIHRvIGluaXQgdGhlIFRNRFMgcmF0ZSB0byBtb2RlIHBp eGVsCisJICogY2xvY2sgcmF0ZSwgYW5kIHJlY29uZmlndXJlIHRoZSBEREMgY2xvY2suCisJICov CisJaGRtaS0+dG1kc19yYXRlID0gbW9kZS0+Y2xvY2sgKiAxMDAwOworCWlubm9faGRtaV9pMmNf aW5pdChoZG1pKTsKKworCS8qIFVubXV0ZSB2aWRlbyBhbmQgYXVkaW8gb3V0cHV0ICovCisJaGRt aV9tb2RiKGhkbWksIEhETUlfQVZfTVVURSwgbV9BVURJT19NVVRFIHwgbV9WSURFT19CTEFDSywK KwkJICB2X0FVRElPX01VVEUoMCkgfCB2X1ZJREVPX01VVEUoMCkpOworCisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyB2b2lkIGlubm9faGRtaV9lbmNvZGVyX21vZGVfc2V0KHN0cnVjdCBkcm1fZW5j b2RlciAqZW5jb2RlciwKKwkJCQkgICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUs CisJCQkJICAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGpfbW9kZSkKK3sKKwlzdHJ1 Y3QgaW5ub19oZG1pICpoZG1pID0gdG9faW5ub19oZG1pKGVuY29kZXIpOworCisJaW5ub19oZG1p X3NldHVwKGhkbWksIGFkal9tb2RlKTsKKworCS8qIFN0b3JlIHRoZSBkaXNwbGF5IG1vZGUgZm9y IHBsdWdpbi9EUE1TIHBvd2Vyb24gZXZlbnRzICovCisJbWVtY3B5KCZoZG1pLT5wcmV2aW91c19t b2RlLCBhZGpfbW9kZSwgc2l6ZW9mKGhkbWktPnByZXZpb3VzX21vZGUpKTsKK30KKworc3RhdGlj IHZvaWQgaW5ub19oZG1pX2VuY29kZXJfZW5hYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rl cikKK3sKKwlzdHJ1Y3QgaW5ub19oZG1pICpoZG1pID0gdG9faW5ub19oZG1pKGVuY29kZXIpOwor CisJcm9ja2NoaXBfZHJtX2NydGNfbW9kZV9jb25maWcoZW5jb2Rlci0+Y3J0YywgRFJNX01PREVf Q09OTkVDVE9SX0hETUlBLAorCQkJCSAgICAgIFJPQ0tDSElQX09VVF9NT0RFX1A4ODgpOworCisJ aW5ub19oZG1pX3NldF9wd3JfbW9kZShoZG1pLCBOT1JNQUwpOworfQorCitzdGF0aWMgdm9pZCBp bm5vX2hkbWlfZW5jb2Rlcl9kaXNhYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sK KwlzdHJ1Y3QgaW5ub19oZG1pICpoZG1pID0gdG9faW5ub19oZG1pKGVuY29kZXIpOworCisJaW5u b19oZG1pX3NldF9wd3JfbW9kZShoZG1pLCBMT1dFUl9QV1IpOworfQorCitzdGF0aWMgYm9vbCBp bm5vX2hkbWlfZW5jb2Rlcl9tb2RlX2ZpeHVwKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwK KwkJCQkJIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJCQkgc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKmFkal9tb2RlKQoreworCXJldHVybiB0cnVlOworfQorCitzdGF0 aWMgc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyBpbm5vX2hkbWlfZW5jb2Rlcl9oZWxw ZXJfZnVuY3MgPSB7CisJLmVuYWJsZSAgICAgPSBpbm5vX2hkbWlfZW5jb2Rlcl9lbmFibGUsCisJ LmRpc2FibGUgICAgPSBpbm5vX2hkbWlfZW5jb2Rlcl9kaXNhYmxlLAorCS5tb2RlX2ZpeHVwID0g aW5ub19oZG1pX2VuY29kZXJfbW9kZV9maXh1cCwKKwkubW9kZV9zZXQgICA9IGlubm9faGRtaV9l bmNvZGVyX21vZGVfc2V0LAorfTsKKworc3RhdGljIHN0cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyBp bm5vX2hkbWlfZW5jb2Rlcl9mdW5jcyA9IHsKKwkuZGVzdHJveSA9IGRybV9lbmNvZGVyX2NsZWFu dXAsCit9OworCitzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cworaW5ub19oZG1pX2Nv bm5lY3Rvcl9kZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgYm9vbCBmb3Jj ZSkKK3sKKwlzdHJ1Y3QgaW5ub19oZG1pICpoZG1pID0gdG9faW5ub19oZG1pKGNvbm5lY3Rvcik7 CisKKwlyZXR1cm4gKGhkbWlfcmVhZGIoaGRtaSwgSERNSV9TVEFUVVMpICYgbV9IT1RQTFVHKSA/ CisJCWNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkIDogY29ubmVjdG9yX3N0YXR1c19kaXNjb25u ZWN0ZWQ7Cit9CisKK3N0YXRpYyBpbnQgaW5ub19oZG1pX2Nvbm5lY3Rvcl9nZXRfbW9kZXMoc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgaW5ub19oZG1pICpoZG1p ID0gdG9faW5ub19oZG1pKGNvbm5lY3Rvcik7CisJc3RydWN0IGVkaWQgKmVkaWQ7CisJaW50IHJl dCA9IDA7CisKKwlpZiAoIWhkbWktPmRkYykKKwkJcmV0dXJuIDA7CisKKwllZGlkID0gZHJtX2dl dF9lZGlkKGNvbm5lY3RvciwgaGRtaS0+ZGRjKTsKKwlpZiAoZWRpZCkgeworCQloZG1pLT5oZG1p X2RhdGEuc2lua19pc19oZG1pID0gZHJtX2RldGVjdF9oZG1pX21vbml0b3IoZWRpZCk7CisJCWhk bWktPmhkbWlfZGF0YS5zaW5rX2hhc19hdWRpbyA9IGRybV9kZXRlY3RfbW9uaXRvcl9hdWRpbyhl ZGlkKTsKKwkJZHJtX21vZGVfY29ubmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KGNvbm5lY3Rv ciwgZWRpZCk7CisJCXJldCA9IGRybV9hZGRfZWRpZF9tb2Rlcyhjb25uZWN0b3IsIGVkaWQpOwor CQlrZnJlZShlZGlkKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgZW51bSBkcm1f bW9kZV9zdGF0dXMKK2lubm9faGRtaV9jb25uZWN0b3JfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yLAorCQkJICAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpt b2RlKQoreworCXJldHVybiBNT0RFX09LOworfQorCitzdGF0aWMgc3RydWN0IGRybV9lbmNvZGVy ICoKK2lubm9faGRtaV9jb25uZWN0b3JfYmVzdF9lbmNvZGVyKHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IpCit7CisJc3RydWN0IGlubm9faGRtaSAqaGRtaSA9IHRvX2lubm9faGRtaShj b25uZWN0b3IpOworCisJcmV0dXJuICZoZG1pLT5lbmNvZGVyOworfQorCitzdGF0aWMgaW50Citp bm5vX2hkbWlfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yLAorCQkJCSAgICAgICB1aW50MzJfdCBtYXhYLCB1aW50MzJfdCBtYXhZKQor eworCXJldHVybiBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMoY29ubmVj dG9yLCAxOTIwLCAxMDgwKTsKK30KKworc3RhdGljIHZvaWQgaW5ub19oZG1pX2Nvbm5lY3Rvcl9k ZXN0cm95KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJZHJtX2Nvbm5lY3Rv cl91bnJlZ2lzdGVyKGNvbm5lY3Rvcik7CisJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rv cik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyBpbm5vX2hkbWlfY29u bmVjdG9yX2Z1bmNzID0geworCS5kcG1zID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rw bXMsCisJLmZpbGxfbW9kZXMgPSBpbm5vX2hkbWlfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2Rl cywKKwkuZGV0ZWN0ID0gaW5ub19oZG1pX2Nvbm5lY3Rvcl9kZXRlY3QsCisJLmRlc3Ryb3kgPSBp bm5vX2hkbWlfY29ubmVjdG9yX2Rlc3Ryb3ksCisJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJf Y29ubmVjdG9yX3Jlc2V0LAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19o ZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUg PSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZSwKK307CisKK3N0YXRp YyBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgaW5ub19oZG1pX2Nvbm5lY3Rvcl9o ZWxwZXJfZnVuY3MgPSB7CisJLmdldF9tb2RlcyA9IGlubm9faGRtaV9jb25uZWN0b3JfZ2V0X21v ZGVzLAorCS5tb2RlX3ZhbGlkID0gaW5ub19oZG1pX2Nvbm5lY3Rvcl9tb2RlX3ZhbGlkLAorCS5i ZXN0X2VuY29kZXIgPSBpbm5vX2hkbWlfY29ubmVjdG9yX2Jlc3RfZW5jb2RlciwKK307CisKK3N0 YXRpYyBpbnQgaW5ub19oZG1pX3JlZ2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVj dCBpbm5vX2hkbWkgKmhkbWkpCit7CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyID0gJmhk bWktPmVuY29kZXI7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaGRtaS0+ZGV2OworCisJZW5jb2Rl ci0+cG9zc2libGVfY3J0Y3MgPSBkcm1fb2ZfZmluZF9wb3NzaWJsZV9jcnRjcyhkcm0sIGRldi0+ b2Zfbm9kZSk7CisKKwkvKgorCSAqIElmIHdlIGZhaWxlZCB0byBmaW5kIHRoZSBDUlRDKHMpIHdo aWNoIHRoaXMgZW5jb2RlciBpcworCSAqIHN1cHBvc2VkIHRvIGJlIGNvbm5lY3RlZCB0bywgaXQn cyBiZWNhdXNlIHRoZSBDUlRDIGhhcworCSAqIG5vdCBiZWVuIHJlZ2lzdGVyZWQgeWV0LiAgRGVm ZXIgcHJvYmluZywgYW5kIGhvcGUgdGhhdAorCSAqIHRoZSByZXF1aXJlZCBDUlRDIGlzIGFkZGVk IGxhdGVyLgorCSAqLworCWlmIChlbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9PSAwKQorCQlyZXR1 cm4gLUVQUk9CRV9ERUZFUjsKKworCWRybV9lbmNvZGVyX2hlbHBlcl9hZGQoZW5jb2RlciwgJmlu bm9faGRtaV9lbmNvZGVyX2hlbHBlcl9mdW5jcyk7CisJZHJtX2VuY29kZXJfaW5pdChkcm0sIGVu Y29kZXIsICZpbm5vX2hkbWlfZW5jb2Rlcl9mdW5jcywKKwkJCSBEUk1fTU9ERV9FTkNPREVSX1RN RFMsIE5VTEwpOworCisJaGRtaS0+Y29ubmVjdG9yLnBvbGxlZCA9IERSTV9DT05ORUNUT1JfUE9M TF9IUEQ7CisKKwlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJmhkbWktPmNvbm5lY3RvciwKKwkJ CQkgJmlubm9faGRtaV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwlkcm1fY29ubmVjdG9yX2lu aXQoZHJtLCAmaGRtaS0+Y29ubmVjdG9yLCAmaW5ub19oZG1pX2Nvbm5lY3Rvcl9mdW5jcywKKwkJ CSAgIERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQSk7CisKKwlkcm1fbW9kZV9jb25uZWN0b3JfYXR0 YWNoX2VuY29kZXIoJmhkbWktPmNvbm5lY3RvciwgZW5jb2Rlcik7CisKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIGlycXJldHVybl90IGlubm9faGRtaV9pMmNfaXJxKHN0cnVjdCBpbm5vX2hkbWkg KmhkbWkpCit7CisJc3RydWN0IGlubm9faGRtaV9pMmMgKmkyYyA9IGhkbWktPmkyYzsKKwl1OCBz dGF0OworCisJc3RhdCA9IGhkbWlfcmVhZGIoaGRtaSwgSERNSV9JTlRFUlJVUFRfU1RBVFVTMSk7 CisJaWYgKCEoc3RhdCAmIG1fSU5UX0VESURfUkVBRFkpKQorCQlyZXR1cm4gSVJRX05PTkU7CisK KwkvKiBDbGVhciBIRE1JIEVESUQgaW50ZXJydXB0IGZsYWcgKi8KKwloZG1pX3dyaXRlYihoZG1p LCBIRE1JX0lOVEVSUlVQVF9TVEFUVVMxLCBtX0lOVF9FRElEX1JFQURZKTsKKworCWNvbXBsZXRl KCZpMmMtPmNtcCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1 cm5fdCBpbm5vX2hkbWlfaGFyZGlycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0 IGlubm9faGRtaSAqaGRtaSA9IGRldl9pZDsKKwlpcnFyZXR1cm5fdCByZXQgPSBJUlFfTk9ORTsK Kwl1OCBpbnRlcnJ1cHQ7CisKKwlpZiAoaGRtaS0+aTJjKQorCQlyZXQgPSBpbm5vX2hkbWlfaTJj X2lycShoZG1pKTsKKworCWludGVycnVwdCA9IGhkbWlfcmVhZGIoaGRtaSwgSERNSV9TVEFUVVMp OworCWlmIChpbnRlcnJ1cHQgJiBtX0lOVF9IT1RQTFVHKSB7CisJCWhkbWlfbW9kYihoZG1pLCBI RE1JX1NUQVRVUywgbV9JTlRfSE9UUExVRywgbV9JTlRfSE9UUExVRyk7CisJCXJldCA9IElSUV9X QUtFX1RIUkVBRDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qg aW5ub19oZG1pX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGlubm9faGRt aSAqaGRtaSA9IGRldl9pZDsKKworCWRybV9oZWxwZXJfaHBkX2lycV9ldmVudChoZG1pLT5jb25u ZWN0b3IuZGV2KTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBpbm5v X2hkbWlfaTJjX3dhaXQoc3RydWN0IGlubm9faGRtaSAqaGRtaSkKK3sKKwlzdHJ1Y3QgaW5ub19o ZG1pX2kyYyAqaTJjID0gaGRtaS0+aTJjOworCWludCBzdGF0OworCisJc3RhdCA9IHdhaXRfZm9y X2NvbXBsZXRpb25fdGltZW91dCgmaTJjLT5jbXAsIEhaIC8gMTApOworCWlmICghc3RhdCkgewor CQlzdGF0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZpMmMtPmNtcCwgSFogLyAxMCk7 CisJCWlmICghc3RhdCkKKwkJCXJldHVybiAtRUFHQUlOOworCX0KKworCXJldHVybiAwOworfQor CitzdGF0aWMgaW50IGlubm9faGRtaV9pMmNfcmVhZChzdHJ1Y3QgaW5ub19oZG1pICpoZG1pLCBz dHJ1Y3QgaTJjX21zZyAqbXNncykKK3sKKwlpbnQgbGVuZ3RoID0gbXNncy0+bGVuOworCXU4ICpi dWYgPSBtc2dzLT5idWY7CisJaW50IHJldDsKKworCXJldCA9IGlubm9faGRtaV9pMmNfd2FpdCho ZG1pKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJd2hpbGUgKGxlbmd0aC0tKQorCQkq YnVmKysgPSBoZG1pX3JlYWRiKGhkbWksIEhETUlfRURJRF9GSUZPX0FERFIpOworCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgaW5ub19oZG1pX2kyY193cml0ZShzdHJ1Y3QgaW5ub19oZG1p ICpoZG1pLCBzdHJ1Y3QgaTJjX21zZyAqbXNncykKK3sKKwlzdHJ1Y3QgaW5ub19oZG1pX2kyYyAq aTJjID0gaGRtaS0+aTJjOworCisJLyoKKwkgKiBUaGUgRERDIG1vZHVsZSBvbmx5IHN1cHBvcnQg cmVhZCBFRElEIG1lc3NhZ2UsIHNvCisJICogd2UgYXNzdW1lIHRoYXQgZWFjaCB3b3JkIHdyaXRl IHRvIHRoaXMgaTJjIGFkYXB0ZXIKKwkgKiBzaG91bGQgYmUgdGhlIG9mZnNldCBvZiBFRElEIHdv cmQgYWRkcmVzcy4KKwkgKi8KKwlpZiAoKG1zZ3MtPmxlbiAhPSAxKSB8fAorCSAgICAoKG1zZ3Mt PmFkZHIgIT0gRERDX0FERFIpICYmIChtc2dzLT5hZGRyICE9IEREQ19TRUdNRU5UX0FERFIpKSkK KwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZWluaXRfY29tcGxldGlvbigmaTJjLT5jbXApOworCisJ aWYgKG1zZ3MtPmFkZHIgPT0gRERDX1NFR01FTlRfQUREUikKKwkJaGRtaS0+aTJjLT5zZWdtZW50 X2FkZHIgPSBtc2dzLT5idWZbMF07CisJaWYgKG1zZ3MtPmFkZHIgPT0gRERDX0FERFIpCisJCWhk bWktPmkyYy0+ZGRjX2FkZHIgPSBtc2dzLT5idWZbMF07CisKKwkvKiBTZXQgZWRpZCBmaWZvIGZp cnN0IGFkZHIgKi8KKwloZG1pX3dyaXRlYihoZG1pLCBIRE1JX0VESURfRklGT19PRkZTRVQsIDB4 MDApOworCisJLyogU2V0IGVkaWQgd29yZCBhZGRyZXNzIDB4MDAvMHg4MCAqLworCWhkbWlfd3Jp dGViKGhkbWksIEhETUlfRURJRF9XT1JEX0FERFIsIGhkbWktPmkyYy0+ZGRjX2FkZHIpOworCisJ LyogU2V0IGVkaWQgc2VnbWVudCBwb2ludGVyICovCisJaGRtaV93cml0ZWIoaGRtaSwgSERNSV9F RElEX1NFR01FTlRfUE9JTlRFUiwgaGRtaS0+aTJjLT5zZWdtZW50X2FkZHIpOworCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgaW5ub19oZG1pX2kyY194ZmVyKHN0cnVjdCBpMmNfYWRhcHRl ciAqYWRhcCwKKwkJCSAgICAgIHN0cnVjdCBpMmNfbXNnICptc2dzLCBpbnQgbnVtKQoreworCXN0 cnVjdCBpbm5vX2hkbWkgKmhkbWkgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXApOworCXN0cnVjdCBp bm5vX2hkbWlfaTJjICppMmMgPSBoZG1pLT5pMmM7CisJaW50IGksIHJldCA9IDA7CisKKwltdXRl eF9sb2NrKCZpMmMtPmxvY2spOworCisJLyogQ2xlYXIgdGhlIEVESUQgaW50ZXJydXB0IGZsYWcg YW5kIHVubXV0ZSB0aGUgaW50ZXJydXB0ICovCisJaGRtaV93cml0ZWIoaGRtaSwgSERNSV9JTlRF UlJVUFRfTUFTSzEsIG1fSU5UX0VESURfUkVBRFkpOworCWhkbWlfd3JpdGViKGhkbWksIEhETUlf SU5URVJSVVBUX1NUQVRVUzEsIG1fSU5UX0VESURfUkVBRFkpOworCisJZm9yIChpID0gMDsgaSA8 IG51bTsgaSsrKSB7CisJCWRldl9kYmcoaGRtaS0+ZGV2LCAieGZlcjogbnVtOiAlZC8lZCwgbGVu OiAlZCwgZmxhZ3M6ICUjeFxuIiwKKwkJCWkgKyAxLCBudW0sIG1zZ3NbaV0ubGVuLCBtc2dzW2ld LmZsYWdzKTsKKworCQlpZiAobXNnc1tpXS5mbGFncyAmIEkyQ19NX1JEKQorCQkJcmV0ID0gaW5u b19oZG1pX2kyY19yZWFkKGhkbWksICZtc2dzW2ldKTsKKwkJZWxzZQorCQkJcmV0ID0gaW5ub19o ZG1pX2kyY193cml0ZShoZG1pLCAmbXNnc1tpXSk7CisKKwkJaWYgKHJldCA8IDApCisJCQlicmVh azsKKwl9CisKKwlpZiAoIXJldCkKKwkJcmV0ID0gbnVtOworCisJLyogTXV0ZSBIRE1JIEVESUQg aW50ZXJydXB0ICovCisJaGRtaV93cml0ZWIoaGRtaSwgSERNSV9JTlRFUlJVUFRfTUFTSzEsIDAp OworCisJbXV0ZXhfdW5sb2NrKCZpMmMtPmxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworc3Rh dGljIHUzMiBpbm5vX2hkbWlfaTJjX2Z1bmMoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQor eworCXJldHVybiBJMkNfRlVOQ19JMkMgfCBJMkNfRlVOQ19TTUJVU19FTVVMOworfQorCitzdGF0 aWMgY29uc3Qgc3RydWN0IGkyY19hbGdvcml0aG0gaW5ub19oZG1pX2FsZ29yaXRobSA9IHsKKwku bWFzdGVyX3hmZXIJPSBpbm5vX2hkbWlfaTJjX3hmZXIsCisJLmZ1bmN0aW9uYWxpdHkJPSBpbm5v X2hkbWlfaTJjX2Z1bmMsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19hZGFwdGVyICppbm5vX2hk bWlfaTJjX2FkYXB0ZXIoc3RydWN0IGlubm9faGRtaSAqaGRtaSkKK3sKKwlzdHJ1Y3QgaTJjX2Fk YXB0ZXIgKmFkYXA7CisJc3RydWN0IGlubm9faGRtaV9pMmMgKmkyYzsKKwlpbnQgcmV0OworCisJ aTJjID0gZGV2bV9remFsbG9jKGhkbWktPmRldiwgc2l6ZW9mKCppMmMpLCBHRlBfS0VSTkVMKTsK KwlpZiAoIWkyYykKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwltdXRleF9pbml0KCZp MmMtPmxvY2spOworCWluaXRfY29tcGxldGlvbigmaTJjLT5jbXApOworCisJYWRhcCA9ICZpMmMt PmFkYXA7CisJYWRhcC0+Y2xhc3MgPSBJMkNfQ0xBU1NfRERDOworCWFkYXAtPm93bmVyID0gVEhJ U19NT0RVTEU7CisJYWRhcC0+ZGV2LnBhcmVudCA9IGhkbWktPmRldjsKKwlhZGFwLT5kZXYub2Zf bm9kZSA9IGhkbWktPmRldi0+b2Zfbm9kZTsKKwlhZGFwLT5hbGdvID0gJmlubm9faGRtaV9hbGdv cml0aG07CisJc3RybGNweShhZGFwLT5uYW1lLCAiSW5ubyBIRE1JIiwgc2l6ZW9mKGFkYXAtPm5h bWUpKTsKKwlpMmNfc2V0X2FkYXBkYXRhKGFkYXAsIGhkbWkpOworCisJcmV0ID0gaTJjX2FkZF9h ZGFwdGVyKGFkYXApOworCWlmIChyZXQpIHsKKwkJZGV2X3dhcm4oaGRtaS0+ZGV2LCAiY2Fubm90 IGFkZCAlcyBJMkMgYWRhcHRlclxuIiwgYWRhcC0+bmFtZSk7CisJCWRldm1fa2ZyZWUoaGRtaS0+ ZGV2LCBpMmMpOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKworCWhkbWktPmkyYyA9IGky YzsKKworCWRldl9pbmZvKGhkbWktPmRldiwgInJlZ2lzdGVyZWQgJXMgSTJDIGJ1cyBkcml2ZXJc biIsIGFkYXAtPm5hbWUpOworCisJcmV0dXJuIGFkYXA7Cit9CisKK3N0YXRpYyBpbnQgaW5ub19o ZG1pX2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCisJCQkJ IHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRm b3JtX2RldmljZShkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBkYXRhOworCXN0cnVj dCBpbm5vX2hkbWkgKmhkbWk7CisJc3RydWN0IHJlc291cmNlICppb3JlczsKKwlpbnQgaXJxOwor CWludCByZXQ7CisKKwloZG1pID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpoZG1pKSwgR0ZQ X0tFUk5FTCk7CisJaWYgKCFoZG1pKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWhkbWktPmRldiA9 IGRldjsKKwloZG1pLT5kcm1fZGV2ID0gZHJtOworCisJaW9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVz b3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghaW9yZXMpCisJCXJldHVybiAt RU5YSU87CisKKwloZG1pLT5yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgaW9yZXMp OworCWlmIChJU19FUlIoaGRtaS0+cmVncykpCisJCXJldHVybiBQVFJfRVJSKGhkbWktPnJlZ3Mp OworCisJaGRtaS0+cGNsayA9IGRldm1fY2xrX2dldChoZG1pLT5kZXYsICJwY2xrIik7CisJaWYg KElTX0VSUihoZG1pLT5wY2xrKSkgeworCQlkZXZfZXJyKGhkbWktPmRldiwgIlVuYWJsZSB0byBn ZXQgSERNSSBwY2xrIGNsa1xuIik7CisJCXJldHVybiBQVFJfRVJSKGhkbWktPnBjbGspOworCX0K KworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShoZG1pLT5wY2xrKTsKKwlpZiAocmV0KSB7CisJ CWRldl9lcnIoaGRtaS0+ZGV2LCAiQ2Fubm90IGVuYWJsZSBIRE1JIHBjbGsgY2xvY2s6ICVkXG4i LCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRl diwgMCk7CisJaWYgKGlycSA8IDApCisJCXJldHVybiBpcnE7CisKKwlpbm5vX2hkbWlfcmVzZXQo aGRtaSk7CisKKwloZG1pLT5kZGMgPSBpbm5vX2hkbWlfaTJjX2FkYXB0ZXIoaGRtaSk7CisJaWYg KElTX0VSUihoZG1pLT5kZGMpKSB7CisJCWhkbWktPmRkYyA9IE5VTEw7CisJCXJldHVybiBQVFJf RVJSKGhkbWktPmRkYyk7CisJfQorCisJLyoKKwkgKiBXaGVuIElQIGNvbnRyb2xsZXIgaGF2ZW4n dCBjb25maWd1cmVkIHRvIGFuIGFjY3VyYXRlIHZpZGVvCisJICogdGltaW5nLCB0aGVuIHRoZSBU TURTIGNsb2NrIHNvdXJjZSB3b3VsZCBiZSBzd2l0Y2hlZCB0bworCSAqIFBDTEtfSERNSSwgc28g d2UgbmVlZCB0byBpbml0IHRoZSBUTURTIHJhdGUgdG8gUENMSyByYXRlLAorCSAqIGFuZCByZWNv bmZpZ3VyZSB0aGUgRERDIGNsb2NrLgorCSAqLworCWhkbWktPnRtZHNfcmF0ZSA9IGNsa19nZXRf cmF0ZShoZG1pLT5wY2xrKTsKKwlpbm5vX2hkbWlfaTJjX2luaXQoaGRtaSk7CisKKwlyZXQgPSBp bm5vX2hkbWlfcmVnaXN0ZXIoZHJtLCBoZG1pKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0Owor CisJZGV2X3NldF9kcnZkYXRhKGRldiwgaGRtaSk7CisKKwkvKiBVbm11dGUgaG90cGx1ZyBpbnRl cnJ1cHQgKi8KKwloZG1pX21vZGIoaGRtaSwgSERNSV9TVEFUVVMsIG1fTUFTS19JTlRfSE9UUExV Rywgdl9NQVNLX0lOVF9IT1RQTFVHKDEpKTsKKworCXJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRl ZF9pcnEoZGV2LCBpcnEsIGlubm9faGRtaV9oYXJkaXJxLAorCQkJCQlpbm5vX2hkbWlfaXJxLCBJ UlFGX1NIQVJFRCwKKwkJCQkJZGV2X25hbWUoZGV2KSwgaGRtaSk7CisKKwlyZXR1cm4gcmV0Owor fQorCitzdGF0aWMgdm9pZCBpbm5vX2hkbWlfdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3Ry dWN0IGRldmljZSAqbWFzdGVyLAorCQkJICAgICB2b2lkICpkYXRhKQoreworCXN0cnVjdCBpbm5v X2hkbWkgKmhkbWkgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWhkbWktPmNvbm5lY3Rvci5m dW5jcy0+ZGVzdHJveSgmaGRtaS0+Y29ubmVjdG9yKTsKKwloZG1pLT5lbmNvZGVyLmZ1bmNzLT5k ZXN0cm95KCZoZG1pLT5lbmNvZGVyKTsKKworCWNsa19kaXNhYmxlX3VucHJlcGFyZShoZG1pLT5w Y2xrKTsKKwlpMmNfcHV0X2FkYXB0ZXIoaGRtaS0+ZGRjKTsKK30KKworc3RhdGljIGNvbnN0IHN0 cnVjdCBjb21wb25lbnRfb3BzIGlubm9faGRtaV9vcHMgPSB7CisJLmJpbmQJPSBpbm5vX2hkbWlf YmluZCwKKwkudW5iaW5kCT0gaW5ub19oZG1pX3VuYmluZCwKK307CisKK3N0YXRpYyBpbnQgaW5u b19oZG1pX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIGNv bXBvbmVudF9hZGQoJnBkZXYtPmRldiwgJmlubm9faGRtaV9vcHMpOworfQorCitzdGF0aWMgaW50 IGlubm9faGRtaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwljb21w b25lbnRfZGVsKCZwZGV2LT5kZXYsICZpbm5vX2hkbWlfb3BzKTsKKworCXJldHVybiAwOworfQor CitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBpbm5vX2hkbWlfZHRfaWRzW10gPSB7 CisJeyAuY29tcGF0aWJsZSA9ICJyb2NrY2hpcCxyazMwMzYtaW5uby1oZG1pIiwKKwl9LAorCXt9 LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGlubm9faGRtaV9kdF9pZHMpOworCitzdGF0 aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpbm5vX2hkbWlfZHJpdmVyID0geworCS5wcm9iZSAg PSBpbm5vX2hkbWlfcHJvYmUsCisJLnJlbW92ZSA9IGlubm9faGRtaV9yZW1vdmUsCisJLmRyaXZl ciA9IHsKKwkJLm5hbWUgPSAiaW5ub2hkbWktcm9ja2NoaXAiLAorCQkub2ZfbWF0Y2hfdGFibGUg PSBpbm5vX2hkbWlfZHRfaWRzLAorCX0sCit9OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGlu bm9faGRtaV9kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJaaGVuZyBZYW5nIDx6aGVuZ3lhbmdA cm9jay1jaGlwcy5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJZYWtpciBZYW5nIDx5a2tAcm9jay1j aGlwcy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlJvY2tjaGlwIFNwZWNpZmljIElOTk8t SERNSSBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxh dGZvcm06aW5ub2hkbWktcm9ja2NoaXAiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9y b2NrY2hpcC9pbm5vX2hkbWkuaCBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9pbm5vX2hkbWku aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmYxN2FkCi0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2lubm9faGRtaS5oCkBAIC0wLDAgKzEs MzY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSBGdXpob3UgUm9ja2NoaXAgRWxlY3Ryb25pY3Mg Q28uTHRkCisgKiAgICBaaGVuZyBZYW5nIDx6aGVuZ3lhbmdAcm9jay1jaGlwcy5jb20+CisgKiAg ICBZYWtpciBZYW5nIDx5a2tAcm9jay1jaGlwcy5jb20+CisgKgorICogVGhpcyBzb2Z0d2FyZSBp cyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICog TGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQg dW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICog R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZu ZGVmIF9fSU5OT19IRE1JX0hfXworI2RlZmluZSBfX0lOTk9fSERNSV9IX18KKworI2RlZmluZSBE RENfU0VHTUVOVF9BRERSCQkweDMwCisKK2VudW0gUFdSX01PREUgeworCU5PUk1BTCwKKwlMT1dF Ul9QV1IsCit9OworCisjZGVmaW5lIEhETUlfU0NMX1JBVEUJCQkoMTAwKjEwMDApCisjZGVmaW5l IEREQ19CVVNfRlJFUV9MCQkJMHg0YgorI2RlZmluZSBERENfQlVTX0ZSRVFfSAkJCTB4NGMKKwor I2RlZmluZSBIRE1JX1NZU19DVFJMCQkJMHgwMAorI2RlZmluZSBtX1JTVF9BTkFMT0cJCQkoMSA8 PCA2KQorI2RlZmluZSB2X1JTVF9BTkFMT0cJCQkoMCA8PCA2KQorI2RlZmluZSB2X05PVF9SU1Rf QU5BTE9HCQkoMSA8PCA2KQorI2RlZmluZSBtX1JTVF9ESUdJVEFMCQkJKDEgPDwgNSkKKyNkZWZp bmUgdl9SU1RfRElHSVRBTAkJCSgwIDw8IDUpCisjZGVmaW5lIHZfTk9UX1JTVF9ESUdJVEFMCQko MSA8PCA1KQorI2RlZmluZSBtX1JFR19DTEtfSU5WCQkJKDEgPDwgNCkKKyNkZWZpbmUgdl9SRUdf Q0xLX05PVF9JTlYJCSgwIDw8IDQpCisjZGVmaW5lIHZfUkVHX0NMS19JTlYJCQkoMSA8PCA0KQor I2RlZmluZSBtX1ZDTEtfSU5WCQkJKDEgPDwgMykKKyNkZWZpbmUgdl9WQ0xLX05PVF9JTlYJCQko MCA8PCAzKQorI2RlZmluZSB2X1ZDTEtfSU5WCQkJKDEgPDwgMykKKyNkZWZpbmUgbV9SRUdfQ0xL X1NPVVJDRQkJKDEgPDwgMikKKyNkZWZpbmUgdl9SRUdfQ0xLX1NPVVJDRV9UTURTCQkoMCA8PCAy KQorI2RlZmluZSB2X1JFR19DTEtfU09VUkNFX1NZUwkJKDEgPDwgMikKKyNkZWZpbmUgbV9QT1dF UgkJCQkoMSA8PCAxKQorI2RlZmluZSB2X1BXUl9PTgkJCSgwIDw8IDEpCisjZGVmaW5lIHZfUFdS X09GRgkJCSgxIDw8IDEpCisjZGVmaW5lIG1fSU5UX1BPTAkJCSgxIDw8IDApCisjZGVmaW5lIHZf SU5UX1BPTF9ISUdICQkJMQorI2RlZmluZSB2X0lOVF9QT0xfTE9XCQkJMAorCisjZGVmaW5lIEhE TUlfVklERU9fQ09OVFJMMQkJMHgwMQorI2RlZmluZSBtX1ZJREVPX0lOUFVUX0ZPUk1BVAkJKDcg PDwgMSkKKyNkZWZpbmUgbV9ERV9TT1VSQ0UJCQkoMSA8PCAwKQorI2RlZmluZSB2X1ZJREVPX0lO UFVUX0ZPUk1BVChuKQkJKG4gPDwgMSkKKyNkZWZpbmUgdl9ERV9FWFRFUk5BTAkJCTEKKyNkZWZp bmUgdl9ERV9JTlRFUk5BTAkJCTAKK2VudW0geworCVZJREVPX0lOUFVUX1NEUl9SR0I0NDQgPSAw LAorCVZJREVPX0lOUFVUX0REUl9SR0I0NDQgPSA1LAorCVZJREVPX0lOUFVUX0REUl9ZQ0JDUjQy MiA9IDYKK307CisKKyNkZWZpbmUgSERNSV9WSURFT19DT05UUkwyCQkweDAyCisjZGVmaW5lIG1f VklERU9fT1VUUFVUX0NPTE9SCQkoMyA8PCA2KQorI2RlZmluZSBtX1ZJREVPX0lOUFVUX0JJVFMJ CSgzIDw8IDQpCisjZGVmaW5lIG1fVklERU9fSU5QVVRfQ1NQCQkoMSA8PCAwKQorI2RlZmluZSB2 X1ZJREVPX09VVFBVVF9DT0xPUihuKQkJKCgobikgJiAweDMpIDw8IDYpCisjZGVmaW5lIHZfVklE RU9fSU5QVVRfQklUUyhuKQkJKG4gPDwgNCkKKyNkZWZpbmUgdl9WSURFT19JTlBVVF9DU1AobikJ CShuIDw8IDApCitlbnVtIHsKKwlWSURFT19JTlBVVF8xMkJJVFMgPSAwLAorCVZJREVPX0lOUFVU XzEwQklUUyA9IDEsCisJVklERU9fSU5QVVRfUkVWRVJUID0gMiwKKwlWSURFT19JTlBVVF84QklU UyA9IDMsCit9OworCisjZGVmaW5lIEhETUlfVklERU9fQ09OVFJMCQkweDAzCisjZGVmaW5lIG1f VklERU9fQVVUT19DU0MJCSgxIDw8IDcpCisjZGVmaW5lIHZfVklERU9fQVVUT19DU0MobikJCShu IDw8IDcpCisjZGVmaW5lIG1fVklERU9fQzBfQzJfU1dBUAkJKDEgPDwgMCkKKyNkZWZpbmUgdl9W SURFT19DMF9DMl9TV0FQKG4pCQkobiA8PCAwKQorZW51bSB7CisJQzBfQzJfQ0hBTkdFX0VOQUJM RSA9IDAsCisJQzBfQzJfQ0hBTkdFX0RJU0FCTEUgPSAxLAorCUFVVE9fQ1NDX0RJU0FCTEUgPSAw LAorCUFVVE9fQ1NDX0VOQUJMRSA9IDEsCit9OworCisjZGVmaW5lIEhETUlfVklERU9fQ09OVFJM MwkJMHgwNAorI2RlZmluZSBtX0NPTE9SX0RFUFRIX05PVF9JTkRJQ0FURUQJKDEgPDwgNCkKKyNk ZWZpbmUgbV9TT0YJCQkJKDEgPDwgMykKKyNkZWZpbmUgbV9DT0xPUl9SQU5HRQkJCSgxIDw8IDIp CisjZGVmaW5lIG1fQ1NDCQkJCSgxIDw8IDApCisjZGVmaW5lIHZfQ09MT1JfREVQVEhfTk9UX0lO RElDQVRFRChuKQkoKG4pIDw8IDQpCisjZGVmaW5lIHZfU09GX0VOQUJMRQkJCSgwIDw8IDMpCisj ZGVmaW5lIHZfU09GX0RJU0FCTEUJCQkoMSA8PCAzKQorI2RlZmluZSB2X0NPTE9SX1JBTkdFX0ZV TEwJCSgxIDw8IDIpCisjZGVmaW5lIHZfQ09MT1JfUkFOR0VfTElNSVRFRAkJKDAgPDwgMikKKyNk ZWZpbmUgdl9DU0NfRU5BQkxFCQkJMQorI2RlZmluZSB2X0NTQ19ESVNBQkxFCQkJMAorCisjZGVm aW5lIEhETUlfQVZfTVVURQkJCTB4MDUKKyNkZWZpbmUgbV9BVk1VVEVfQ0xFQVIJCQkoMSA8PCA3 KQorI2RlZmluZSBtX0FWTVVURV9FTkFCTEUJCQkoMSA8PCA2KQorI2RlZmluZSBtX0FVRElPX01V VEUJCQkoMSA8PCAxKQorI2RlZmluZSBtX1ZJREVPX0JMQUNLCQkJKDEgPDwgMCkKKyNkZWZpbmUg dl9BVk1VVEVfQ0xFQVIobikJCShuIDw8IDcpCisjZGVmaW5lIHZfQVZNVVRFX0VOQUJMRShuKQkJ KG4gPDwgNikKKyNkZWZpbmUgdl9BVURJT19NVVRFKG4pCQkJKG4gPDwgMSkKKyNkZWZpbmUgdl9W SURFT19NVVRFKG4pCQkJKG4gPDwgMCkKKworI2RlZmluZSBIRE1JX1ZJREVPX1RJTUlOR19DVEwJ CTB4MDgKKyNkZWZpbmUgdl9IU1lOQ19QT0xBUklUWShuKQkJKG4gPDwgMykKKyNkZWZpbmUgdl9W U1lOQ19QT0xBUklUWShuKQkJKG4gPDwgMikKKyNkZWZpbmUgdl9JTkVUTEFDRShuKQkJCShuIDw8 IDEpCisjZGVmaW5lIHZfRVhURVJBTkxfVklERU8obikJCShuIDw8IDApCisKKyNkZWZpbmUgSERN SV9WSURFT19FWFRfSFRPVEFMX0wJCTB4MDkKKyNkZWZpbmUgSERNSV9WSURFT19FWFRfSFRPVEFM X0gJCTB4MGEKKyNkZWZpbmUgSERNSV9WSURFT19FWFRfSEJMQU5LX0wJCTB4MGIKKyNkZWZpbmUg SERNSV9WSURFT19FWFRfSEJMQU5LX0gJCTB4MGMKKyNkZWZpbmUgSERNSV9WSURFT19FWFRfSERF TEFZX0wJCTB4MGQKKyNkZWZpbmUgSERNSV9WSURFT19FWFRfSERFTEFZX0gJCTB4MGUKKyNkZWZp bmUgSERNSV9WSURFT19FWFRfSERVUkFUSU9OX0wJMHgwZgorI2RlZmluZSBIRE1JX1ZJREVPX0VY VF9IRFVSQVRJT05fSAkweDEwCisjZGVmaW5lIEhETUlfVklERU9fRVhUX1ZUT1RBTF9MCQkweDEx CisjZGVmaW5lIEhETUlfVklERU9fRVhUX1ZUT1RBTF9ICQkweDEyCisjZGVmaW5lIEhETUlfVklE RU9fRVhUX1ZCTEFOSwkJMHgxMworI2RlZmluZSBIRE1JX1ZJREVPX0VYVF9WREVMQVkJCTB4MTQK KyNkZWZpbmUgSERNSV9WSURFT19FWFRfVkRVUkFUSU9OCTB4MTUKKworI2RlZmluZSBIRE1JX1ZJ REVPX0NTQ19DT0VGCQkweDE4CisKKyNkZWZpbmUgSERNSV9BVURJT19DVFJMMQkJMHgzNQorZW51 bSB7CisJQ1RTX1NPVVJDRV9JTlRFUk5BTCA9IDAsCisJQ1RTX1NPVVJDRV9FWFRFUk5BTCA9IDEs Cit9OworI2RlZmluZSB2X0NUU19TT1VSQ0UobikJCQkobiA8PCA3KQorCitlbnVtIHsKKwlET1dO U0FNUExFX0RJU0FCTEUgPSAwLAorCURPV05TQU1QTEVfMV8yID0gMSwKKwlET1dOU0FNUExFXzFf NCA9IDIsCit9OworI2RlZmluZSB2X0RPV05fU0FNUExFKG4pCQkobiA8PCA1KQorCitlbnVtIHsK KwlBVURJT19TT1VSQ0VfSUlTID0gMCwKKwlBVURJT19TT1VSQ0VfU1BESUYgPSAxLAorfTsKKyNk ZWZpbmUgdl9BVURJT19TT1VSQ0UobikJCShuIDw8IDMpCisKKyNkZWZpbmUgdl9NQ0xLX0VOQUJM RShuKQkJKG4gPDwgMikKK2VudW0geworCU1DTEtfMTI4RlMgPSAwLAorCU1DTEtfMjU2RlMgPSAx LAorCU1DTEtfMzg0RlMgPSAyLAorCU1DTEtfNTEyRlMgPSAzLAorfTsKKyNkZWZpbmUgdl9NQ0xL X1JBVElPKG4pCQkJKG4pCisKKyNkZWZpbmUgQVVESU9fU0FNUExFX1JBVEUJCTB4MzcKK2VudW0g eworCUFVRElPXzMySyA9IDB4MywKKwlBVURJT180NDFLID0gMHgwLAorCUFVRElPXzQ4SyA9IDB4 MiwKKwlBVURJT184ODJLID0gMHg4LAorCUFVRElPXzk2SyA9IDB4YSwKKwlBVURJT18xNzY0SyA9 IDB4YywKKwlBVURJT18xOTJLID0gMHhlLAorfTsKKworI2RlZmluZSBBVURJT19JMlNfTU9ERQkJ CTB4MzgKK2VudW0geworCUkyU19DSEFOTkVMXzFfMiA9IDEsCisJSTJTX0NIQU5ORUxfM180ID0g MywKKwlJMlNfQ0hBTk5FTF81XzYgPSA3LAorCUkyU19DSEFOTkVMXzdfOCA9IDB4ZgorfTsKKyNk ZWZpbmUgdl9JMlNfQ0hBTk5FTChuKQkJKChuKSA8PCAyKQorZW51bSB7CisJSTJTX1NUQU5EQVJE ID0gMCwKKwlJMlNfTEVGVF9KVVNUSUZJRUQgPSAxLAorCUkyU19SSUdIVF9KVVNUSUZJRUQgPSAy LAorfTsKKyNkZWZpbmUgdl9JMlNfTU9ERShuKQkJCShuKQorCisjZGVmaW5lIEFVRElPX0kyU19N QVAJCQkweDM5CisjZGVmaW5lIEFVRElPX0kyU19TV0FQU19TUERJRgkJMHgzYQorI2RlZmluZSB2 X1NQSURGX0ZSRVEobikJCQkobikKKworI2RlZmluZSBOXzMySwkJCQkweDEwMDAKKyNkZWZpbmUg Tl80NDFLCQkJCTB4MTg4MAorI2RlZmluZSBOXzg4MksJCQkJMHgzMTAwCisjZGVmaW5lIE5fMTc2 NEsJCQkJMHg2MjAwCisjZGVmaW5lIE5fNDhLCQkJCTB4MTgwMAorI2RlZmluZSBOXzk2SwkJCQkw eDMwMDAKKyNkZWZpbmUgTl8xOTJLCQkJCTB4NjAwMAorCisjZGVmaW5lIEhETUlfQVVESU9fQ0hB Tk5FTF9TVEFUVVMJMHgzZQorI2RlZmluZSBtX0FVRElPX1NUQVRVU19OTFBDTQkJKDEgPDwgNykK KyNkZWZpbmUgbV9BVURJT19TVEFUVVNfVVNFCQkoMSA8PCA2KQorI2RlZmluZSBtX0FVRElPX1NU QVRVU19DT1BZUklHSFQJKDEgPDwgNSkKKyNkZWZpbmUgbV9BVURJT19TVEFUVVNfQURESVRJT04J CSgzIDw8IDIpCisjZGVmaW5lIG1fQVVESU9fU1RBVFVTX0NMS19BQ0NVUkFDWQkoMiA8PCAwKQor I2RlZmluZSB2X0FVRElPX1NUQVRVU19OTFBDTShuKQkJKChuICYgMSkgPDwgNykKKyNkZWZpbmUg QVVESU9fTl9ICQkJMHgzZgorI2RlZmluZSBBVURJT19OX00JCQkweDQwCisjZGVmaW5lIEFVRElP X05fTAkJCTB4NDEKKworI2RlZmluZSBIRE1JX0FVRElPX0NUU19ICQkweDQ1CisjZGVmaW5lIEhE TUlfQVVESU9fQ1RTX00JCTB4NDYKKyNkZWZpbmUgSERNSV9BVURJT19DVFNfTAkJMHg0NworCisj ZGVmaW5lIEhETUlfRERDX0NMS19MCQkJMHg0YgorI2RlZmluZSBIRE1JX0REQ19DTEtfSAkJCTB4 NGMKKworI2RlZmluZSBIRE1JX0VESURfU0VHTUVOVF9QT0lOVEVSCTB4NGQKKyNkZWZpbmUgSERN SV9FRElEX1dPUkRfQUREUgkJMHg0ZQorI2RlZmluZSBIRE1JX0VESURfRklGT19PRkZTRVQJCTB4 NGYKKyNkZWZpbmUgSERNSV9FRElEX0ZJRk9fQUREUgkJMHg1MAorCisjZGVmaW5lIEhETUlfUEFD S0VUX1NFTkRfTUFOVUFMCQkweDljCisjZGVmaW5lIEhETUlfUEFDS0VUX1NFTkRfQVVUTwkJMHg5 ZAorI2RlZmluZSBtX1BBQ0tFVF9HQ1BfRU4JCQkoMSA8PCA3KQorI2RlZmluZSBtX1BBQ0tFVF9N U0lfRU4JCQkoMSA8PCA2KQorI2RlZmluZSBtX1BBQ0tFVF9TRElfRU4JCQkoMSA8PCA1KQorI2Rl ZmluZSBtX1BBQ0tFVF9WU0lfRU4JCQkoMSA8PCA0KQorI2RlZmluZSB2X1BBQ0tFVF9HQ1BfRU4o bikJCSgobiAmIDEpIDw8IDcpCisjZGVmaW5lIHZfUEFDS0VUX01TSV9FTihuKQkJKChuICYgMSkg PDwgNikKKyNkZWZpbmUgdl9QQUNLRVRfU0RJX0VOKG4pCQkoKG4gJiAxKSA8PCA1KQorI2RlZmlu ZSB2X1BBQ0tFVF9WU0lfRU4obikJCSgobiAmIDEpIDw8IDQpCisKKyNkZWZpbmUgSERNSV9DT05U Uk9MX1BBQ0tFVF9CVUZfSU5ERVgJMHg5ZgorZW51bSB7CisJSU5GT0ZSQU1FX1ZTSSA9IDB4MDUs CisJSU5GT0ZSQU1FX0FWSSA9IDB4MDYsCisJSU5GT0ZSQU1FX0FBSSA9IDB4MDgsCit9OworCisj ZGVmaW5lIEhETUlfQ09OVFJPTF9QQUNLRVRfQUREUgkweGEwCisjZGVmaW5lIEhETUlfU0laRV9W U0lfSU5GT0ZSQU1FCQkweDBBCisjZGVmaW5lIEhETUlfU0laRV9BVklfSU5GT0ZSQU1FCQkweDEx CisjZGVmaW5lIEhETUlfU0laRV9BVURJT19JTkZPRlJBTUUJMHgwRgorZW51bSB7CisJQVZJX0NP TE9SX01PREVfUkdCID0gMCwKKwlBVklfQ09MT1JfTU9ERV9ZQ0JDUjQyMiA9IDEsCisJQVZJX0NP TE9SX01PREVfWUNCQ1I0NDQgPSAyLAorCUFWSV9DT0xPUklNRVRSWV9OT19EQVRBID0gMCwKKwor CUFWSV9DT0xPUklNRVRSWV9TTVBURV8xNzBNID0gMSwKKwlBVklfQ09MT1JJTUVUUllfSVRVNzA5 ID0gMiwKKwlBVklfQ09MT1JJTUVUUllfRVhURU5ERUQgPSAzLAorCisJQVZJX0NPREVEX0ZSQU1F X0FTUEVDVF9OT19EQVRBID0gMCwKKwlBVklfQ09ERURfRlJBTUVfQVNQRUNUXzRfMyA9IDEsCisJ QVZJX0NPREVEX0ZSQU1FX0FTUEVDVF8xNl85ID0gMiwKKworCUFDVElWRV9BU1BFQ1RfUkFURV9T QU1FX0FTX0NPREVEX0ZSQU1FID0gMHgwOCwKKwlBQ1RJVkVfQVNQRUNUX1JBVEVfNF8zID0gMHgw OSwKKwlBQ1RJVkVfQVNQRUNUX1JBVEVfMTZfOSA9IDB4MEEsCisJQUNUSVZFX0FTUEVDVF9SQVRF XzE0XzkgPSAweDBCLAorfTsKKworI2RlZmluZSBIRE1JX0hEQ1BfQ1RSTAkJCTB4NTIKKyNkZWZp bmUgbV9IRE1JX0RWSQkJCSgxIDw8IDEpCisjZGVmaW5lIHZfSERNSV9EVkkobikJCQkobiA8PCAx KQorCisjZGVmaW5lIEhETUlfSU5URVJSVVBUX01BU0sxCQkweGMwCisjZGVmaW5lIEhETUlfSU5U RVJSVVBUX1NUQVRVUzEJCTB4YzEKKyNkZWZpbmUJbV9JTlRfQUNUSVZFX1ZTWU5DCQkoMSA8PCA1 KQorI2RlZmluZSBtX0lOVF9FRElEX1JFQURZCQkoMSA8PCAyKQorCisjZGVmaW5lIEhETUlfSU5U RVJSVVBUX01BU0syCQkweGMyCisjZGVmaW5lIEhETUlfSU5URVJSVVBUX1NUQVRVUzIJCTB4YzMK KyNkZWZpbmUgbV9JTlRfSERDUF9FUlIJCQkoMSA8PCA3KQorI2RlZmluZSBtX0lOVF9CS1NWX0ZM QUcJCQkoMSA8PCA2KQorI2RlZmluZSBtX0lOVF9IRENQX09LCQkJKDEgPDwgNCkKKworI2RlZmlu ZSBIRE1JX1NUQVRVUwkJCTB4YzgKKyNkZWZpbmUgbV9IT1RQTFVHCQkJKDEgPDwgNykKKyNkZWZp bmUgbV9NQVNLX0lOVF9IT1RQTFVHCQkoMSA8PCA1KQorI2RlZmluZSBtX0lOVF9IT1RQTFVHCQkJ KDEgPDwgMSkKKyNkZWZpbmUgdl9NQVNLX0lOVF9IT1RQTFVHKG4pCQkoKG4gJiAweDEpIDw8IDUp CisKKyNkZWZpbmUgSERNSV9DT0xPUkJBUiAgICAgICAgICAgICAgICAgICAweGM5CisKKyNkZWZp bmUgSERNSV9QSFlfU1lOQwkJCTB4Y2UKKyNkZWZpbmUgSERNSV9QSFlfU1lTX0NUTAkJMHhlMAor I2RlZmluZSBtX1RNRFNfQ0xLX1NPVVJDRQkJKDEgPDwgNSkKKyNkZWZpbmUgdl9UTURTX0ZST01f UExMCQkJKDAgPDwgNSkKKyNkZWZpbmUgdl9UTURTX0ZST01fR0VOCQkJKDEgPDwgNSkKKyNkZWZp bmUgbV9QSEFTRV9DTEsJCQkoMSA8PCA0KQorI2RlZmluZSB2X0RFRkFVTFRfUEhBU0UJCQkoMCA8 PCA0KQorI2RlZmluZSB2X1NZTkNfUEhBU0UJCQkoMSA8PCA0KQorI2RlZmluZSBtX1RNRFNfQ1VS UkVOVF9QV1IJCSgxIDw8IDMpCisjZGVmaW5lIHZfVFVSTl9PTl9DVVJSRU5UCQkoMCA8PCAzKQor I2RlZmluZSB2X0NBVF9PRkZfQ1VSUkVOVAkJKDEgPDwgMykKKyNkZWZpbmUgbV9CQU5ER0FQX1BX UgkJCSgxIDw8IDIpCisjZGVmaW5lIHZfQkFOREdBUF9QV1JfVVAJCSgwIDw8IDIpCisjZGVmaW5l IHZfQkFOREdBUF9QV1JfRE9XTgkJKDEgPDwgMikKKyNkZWZpbmUgbV9QTExfUFdSCQkJKDEgPDwg MSkKKyNkZWZpbmUgdl9QTExfUFdSX1VQCQkJKDAgPDwgMSkKKyNkZWZpbmUgdl9QTExfUFdSX0RP V04JCQkoMSA8PCAxKQorI2RlZmluZSBtX1RNRFNfQ0hHX1BXUgkJCSgxIDw8IDApCisjZGVmaW5l IHZfVE1EU19DSEdfUFdSX1VQCQkoMCA8PCAwKQorI2RlZmluZSB2X1RNRFNfQ0hHX1BXUl9ET1dO CQkoMSA8PCAwKQorCisjZGVmaW5lIEhETUlfUEhZX0NIR19QV1IJCTB4ZTEKKyNkZWZpbmUgdl9D TEtfQ0hHX1BXUihuKQkJKChuICYgMSkgPDwgMykKKyNkZWZpbmUgdl9EQVRBX0NIR19QV1IobikJ CSgobiAmIDcpIDw8IDApCisKKyNkZWZpbmUgSERNSV9QSFlfRFJJVkVSCQkJMHhlMgorI2RlZmlu ZSB2X0NMS19NQUlOX0RSSVZFUihuKQkJKG4gPDwgNCkKKyNkZWZpbmUgdl9EQVRBX01BSU5fRFJJ VkVSKG4pCQkobiA8PCAwKQorCisjZGVmaW5lIEhETUlfUEhZX1BSRV9FTVBIQVNJUwkJMHhlMwor I2RlZmluZSB2X1BSRV9FTVBIQVNJUyhuKQkJKChuICYgNykgPDwgNCkKKyNkZWZpbmUgdl9DTEtf UFJFX0RSSVZFUihuKQkJKChuICYgMykgPDwgMikKKyNkZWZpbmUgdl9EQVRBX1BSRV9EUklWRVIo bikJCSgobiAmIDMpIDw8IDApCisKKyNkZWZpbmUgSERNSV9QSFlfRkVFREJBQ0tfRElWX1JBVElP X0xPVwkJMHhlNworI2RlZmluZSB2X0ZFRURCQUNLX0RJVl9MT1cobikJCQkobiAmIDB4ZmYpCisj ZGVmaW5lIEhETUlfUEhZX0ZFRURCQUNLX0RJVl9SQVRJT19ISUdICTB4ZTgKKyNkZWZpbmUgdl9G RUVEQkFDS19ESVZfSElHSChuKQkJCShuICYgMSkKKworI2RlZmluZSBIRE1JX1BIWV9QUkVfRElW X1JBVElPCQkweGVkCisjZGVmaW5lIHZfUFJFX0RJVl9SQVRJTyhuKQkJKG4gJiAweDFmKQorCisj ZGVmaW5lIEhETUlfQ0VDX0NUUkwJCQkweGQwCisjZGVmaW5lIG1fQURKVVNUX0ZPUl9ISVNFTlNF CQkoMSA8PCA2KQorI2RlZmluZSBtX1JFSkVDVF9SWF9CUk9BRENBU1QJCSgxIDw8IDUpCisjZGVm aW5lIG1fQlVTRlJFRVRJTUVfRU5BQkxFCQkoMSA8PCAyKQorI2RlZmluZSBtX1JFSkVDVF9SWAkJ CSgxIDw8IDEpCisjZGVmaW5lIG1fU1RBUlRfVFgJCQkoMSA8PCAwKQorCisjZGVmaW5lIEhETUlf Q0VDX0RBVEEJCQkweGQxCisjZGVmaW5lIEhETUlfQ0VDX1RYX09GRlNFVAkJMHhkMgorI2RlZmlu ZSBIRE1JX0NFQ19SWF9PRkZTRVQJCTB4ZDMKKyNkZWZpbmUgSERNSV9DRUNfQ0xLX0gJCQkweGQ0 CisjZGVmaW5lIEhETUlfQ0VDX0NMS19MCQkJMHhkNQorI2RlZmluZSBIRE1JX0NFQ19UWF9MRU5H VEgJCTB4ZDYKKyNkZWZpbmUgSERNSV9DRUNfUlhfTEVOR1RICQkweGQ3CisjZGVmaW5lIEhETUlf Q0VDX1RYX0lOVF9NQVNLCQkweGQ4CisjZGVmaW5lIG1fVFhfRE9ORQkJCSgxIDw8IDMpCisjZGVm aW5lIG1fVFhfTk9BQ0sJCQkoMSA8PCAyKQorI2RlZmluZSBtX1RYX0JST0FEQ0FTVF9SRUoJCSgx IDw8IDEpCisjZGVmaW5lIG1fVFhfQlVTTk9URlJFRQkJCSgxIDw8IDApCisKKyNkZWZpbmUgSERN SV9DRUNfUlhfSU5UX01BU0sJCTB4ZDkKKyNkZWZpbmUgbV9SWF9MQV9FUlIJCQkoMSA8PCA0KQor I2RlZmluZSBtX1JYX0dMSVRDSAkJCSgxIDw8IDMpCisjZGVmaW5lIG1fUlhfRE9ORQkJCSgxIDw8 IDApCisKKyNkZWZpbmUgSERNSV9DRUNfVFhfSU5UCQkJMHhkYQorI2RlZmluZSBIRE1JX0NFQ19S WF9JTlQJCQkweGRiCisjZGVmaW5lIEhETUlfQ0VDX0JVU0ZSRUVUSU1FX0wJCTB4ZGMKKyNkZWZp bmUgSERNSV9DRUNfQlVTRlJFRVRJTUVfSAkJMHhkZAorI2RlZmluZSBIRE1JX0NFQ19MT0dJQ0FE RFIJCTB4ZGUKKworI2VuZGlmIC8qIF9fSU5OT19IRE1JX0hfXyAqLwotLSAKMS45LjEKCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFp bGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=