From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yakir Yang Subject: [PATCH v6] drm/rockchip: hdmi: add Innosilicon HDMI support Date: Mon, 25 Jan 2016 09:47:10 +0800 Message-ID: <1453686430-21470-1-git-send-email-ykk@rock-chips.com> References: <1453686197-20975-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: <1453686197-20975-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 , David Airlie , 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: devicetree@vger.kernel.org VGhlIElubm9zaWxpY29uIEhETUkgaXMgYSBsb3cgcG93ZXIgSERNSSAxLjQgdHJhbnNtaXR0ZXIK SVAsIGFuZCBpdCBoYXZlIGJlZW4gaW50ZWdyYXRlZCBvbiBzb21lIHJvY2tjaGlwIENQVXMKKGxp a2UgUkszMDM2LCBSSzMxMngpLgoKU2lnbmVkLW9mZi1ieTogWWFraXIgWWFuZyA8eWtrQHJvY2st Y2hpcHMuY29tPgotLS0KQ2hhbmdlcyBpbiB2NjoKLSBSZWJhc2UgdGhlIE1ha2VmaWxlL0tjb25m aWcgZmlsZXMgd2hpY2ggYWRkIGJ5IENocmlzJ3Mgcm9ja2NoaXAtbWlwaSBkcml2ZXIgKENhZXNl cikKCkNoYW5nZXMgaW4gdjU6Ci0gVXNlIGhkbWlfaW5mb2ZyYW1lIGhlbHBlciBmdW5jdGlvbnMg dG8gcGFja2VkIHRoZSBpbmZvZnJhbWUgKFJ1c3NlbGwpCi0gUmVtb3ZlIHRoZSB1bnVzZWQgZG91 YmxlIHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCBmb3IgZGRjIHRyYW5zZmVyIChSdXNzZWxs KQotIFJlbW92ZSB0aGUgdW51c2VkIGxvY2FsIHZhcmlhYmxlIGluICJpbm5vX2hkbWlfaTJjX3dy aXRlKCkiIGZ1bmN0aW9uIChSdXNzZWxsKQoKQ2hhbmdlcyBpbiB2NDoKLSBNb2RpZnkgdGhlIGNv bW1pdCB0aXRsZSAiZHJtL3JvY2tjaGlwOiBoZG1pOiAuLi4iIChNYXJrKQotIENvcnJlY3QgdGhl ICJES01TIiB0byAiRFBNUyIgKE1hcmspCi0gRml4IG92ZXIgODAgY2hhcmFjdGVycyBwcm9ibGVt cyAoTWFyaykKLSBSZW1vdmUgZW5jb2RlciAucHJlcGFyZS8uY29tbWl0IGhlbHBlciBmdW5jdGlv bnMsIGFuZCBtb3ZlIHRoZSB2b3AgbW9kZQpjb25maWd1cmUgZnVuY3Rpb24gaW50byBlbmNvZGVy IC5lbmFibGUgaGVscGVyIGZ1bmN0aW9ucy4gKE1hcmspCgpDaGFuZ2VzIGluIHYzOgotIFVzZSBl bmNvZGVyIGVuYWJsZS9kaXNhYmxlIGZ1bmN0aW9uLCBhbmQgcmVtb3ZlIHRoZSBlbmNvZGVyIERQ TVMgZnVuY3Rpb24KLSBLZWVwIEhETUkgUExMIHBvd2VyIG9uIGluIHN0YW5kYnkgbW9kZQoKQ2hh bmdlcyBpbiB2MjoKLSBVc2luZyBEUk0gYXRvbWljIGhlbHBlciBmdW5jdGlvbnMgZm9yIGNvbm5l Y3RvciBpbml0IChNYXJrKQogICAgLSBSZW1vdmUgImhkbWktPmNvbm5lY3Rvci5lbmNvZGVyID0g ZW5jb2RlcjsiIChNYXJrKQoKIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9LY29uZmlnICAgICB8 ICAgOCArCiBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvTWFrZWZpbGUgICAgfCAgIDEgKwogZHJp dmVycy9ncHUvZHJtL3JvY2tjaGlwL2lubm9faGRtaS5jIHwgOTQxICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvaW5ub19oZG1pLmgg fCAzNjIgKysrKysrKysrKysrKysKIDQgZmlsZXMgY2hhbmdlZCwgMTMxMiBpbnNlcnRpb25zKCsp CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2lubm9faGRtaS5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2lubm9faGRtaS5o CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL0tjb25maWcgYi9kcml2ZXJz L2dwdS9kcm0vcm9ja2NoaXAvS2NvbmZpZwppbmRleCA4NTczOTg1Li5lMTViZjQ3IDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9k cm0vcm9ja2NoaXAvS2NvbmZpZwpAQCAtMzUsMyArMzUsMTEgQEAgY29uZmlnIFJPQ0tDSElQX0RX X01JUElfRFNJCiAJIGZvciB0aGUgU3lub3BzeXMgRGVzaWduV2FyZSBIRE1JIGRyaXZlci4gSWYg eW91IHdhbnQgdG8KIAkgZW5hYmxlIE1JUEkgRFNJIG9uIFJLMzI4OCBiYXNlZCBTb0MsIHlvdSBz aG91bGQgc2VsZXQgdGhpcwogCSBvcHRpb24uCisKK2NvbmZpZyBST0NLQ0hJUF9JTk5PX0hETUkK Kwl0cmlzdGF0ZSAiUm9ja2NoaXAgc3BlY2lmaWMgZXh0ZW5zaW9ucyBmb3IgSW5ub3NpbGljb24g SERNSSIKKyAgICAgICAgZGVwZW5kcyBvbiBEUk1fUk9DS0NISVAKKyAgICAgICAgaGVscAorCSAg VGhpcyBzZWxlY3RzIHN1cHBvcnQgZm9yIFJvY2tjaGlwIFNvQyBzcGVjaWZpYyBleHRlbnNpb25z CisJICBmb3IgdGhlIElubm9zaWxpY29uIEhETUkgZHJpdmVyLiBJZiB5b3Ugd2FudCB0byBlbmFi bGUKKwkgIEhETUkgb24gUkszMDM2IGJhc2VkIFNvQywgeW91IHNob3VsZCBzZWxldCB0aGlzIG9w dGlvbi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9NYWtlZmlsZSBiL2Ry aXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9NYWtlZmlsZQppbmRleCBmNmE4MDlhLi5kZjhmYmVmIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvTWFrZWZpbGUKKysrIGIvZHJpdmVy cy9ncHUvZHJtL3JvY2tjaGlwL01ha2VmaWxlCkBAIC04LDUgKzgsNiBAQCByb2NrY2hpcGRybS0k KENPTkZJR19EUk1fRkJERVZfRU1VTEFUSU9OKSArPSByb2NrY2hpcF9kcm1fZmJkZXYubwogCiBv YmotJChDT05GSUdfUk9DS0NISVBfRFdfSERNSSkgKz0gZHdfaGRtaS1yb2NrY2hpcC5vCiBvYmot JChDT05GSUdfUk9DS0NISVBfRFdfTUlQSV9EU0kpICs9IGR3LW1pcGktZHNpLm8KK29iai0kKENP TkZJR19ST0NLQ0hJUF9JTk5PX0hETUkpICs9IGlubm9faGRtaS5vCiAKIG9iai0kKENPTkZJR19E Uk1fUk9DS0NISVApICs9IHJvY2tjaGlwZHJtLm8gcm9ja2NoaXBfdm9wX3JlZy5vCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvaW5ub19oZG1pLmMgYi9kcml2ZXJzL2dwdS9k cm0vcm9ja2NoaXAvaW5ub19oZG1pLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uNGRhMzAyMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9p bm5vX2hkbWkuYwpAQCAtMCwwICsxLDk0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgRnV6aG91 IFJvY2tjaGlwIEVsZWN0cm9uaWNzIENvLkx0ZAorICogICAgWmhlbmcgWWFuZyA8emhlbmd5YW5n QHJvY2stY2hpcHMuY29tPgorICogICAgWWFraXIgWWFuZyA8eWtrQHJvY2stY2hpcHMuY29tPgor ICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0 cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4 L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+ CisjaW5jbHVkZSA8bGludXgvaGRtaS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4K KyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2lu Y2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorCisjaW5jbHVkZSA8ZHJtL2RybV9vZi5oPgorI2lu Y2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+Cisj aW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZWRpZC5o PgorI2luY2x1ZGUgPGRybS9kcm1fZW5jb2Rlcl9zbGF2ZS5oPgorCisjaW5jbHVkZSAicm9ja2No aXBfZHJtX2Rydi5oIgorI2luY2x1ZGUgInJvY2tjaGlwX2RybV92b3AuaCIKKworI2luY2x1ZGUg Imlubm9faGRtaS5oIgorCisjZGVmaW5lIHRvX2lubm9faGRtaSh4KQljb250YWluZXJfb2YoeCwg c3RydWN0IGlubm9faGRtaSwgeCkKKworc3RydWN0IGhkbWlfZGF0YV9pbmZvIHsKKwlpbnQgdmlj OworCWJvb2wgc2lua19pc19oZG1pOworCWJvb2wgc2lua19oYXNfYXVkaW87CisJdW5zaWduZWQg aW50IGVuY19pbl9mb3JtYXQ7CisJdW5zaWduZWQgaW50IGVuY19vdXRfZm9ybWF0OworCXVuc2ln bmVkIGludCBjb2xvcmltZXRyeTsKK307CisKK3N0cnVjdCBpbm5vX2hkbWlfaTJjIHsKKwlzdHJ1 Y3QgaTJjX2FkYXB0ZXIgYWRhcDsKKworCXU4IGRkY19hZGRyOworCXU4IHNlZ21lbnRfYWRkcjsK KworCXN0cnVjdCBtdXRleCBsb2NrOworCXN0cnVjdCBjb21wbGV0aW9uIGNtcDsKK307CisKK3N0 cnVjdCBpbm5vX2hkbWkgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZHJtX2RldjsKKworCWludCBpcnE7CisJc3RydWN0IGNsayAqcGNsazsKKwl2b2lkIF9faW9t ZW0gKnJlZ3M7CisKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcgljb25uZWN0b3I7CisJc3RydWN0IGRy bV9lbmNvZGVyCWVuY29kZXI7CisKKwlzdHJ1Y3QgaW5ub19oZG1pX2kyYyAqaTJjOworCXN0cnVj dCBpMmNfYWRhcHRlciAqZGRjOworCisJdW5zaWduZWQgaW50IHRtZHNfcmF0ZTsKKworCXN0cnVj dCBoZG1pX2RhdGFfaW5mbwloZG1pX2RhdGE7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgcHJl dmlvdXNfbW9kZTsKK307CisKK2VudW0geworCUNTQ19JVFU2MDFfMTZfMjM1X1RPX1JHQl8wXzI1 NV84QklULAorCUNTQ19JVFU2MDFfMF8yNTVfVE9fUkdCXzBfMjU1XzhCSVQsCisJQ1NDX0lUVTcw OV8xNl8yMzVfVE9fUkdCXzBfMjU1XzhCSVQsCisJQ1NDX1JHQl8wXzI1NV9UT19JVFU2MDFfMTZf MjM1XzhCSVQsCisJQ1NDX1JHQl8wXzI1NV9UT19JVFU3MDlfMTZfMjM1XzhCSVQsCisJQ1NDX1JH Ql8wXzI1NV9UT19SR0JfMTZfMjM1XzhCSVQsCit9OworCitzdGF0aWMgY29uc3QgY2hhciBjb2Vm Zl9jc2NbXVsyNF0gPSB7CisJLyoKKwkgKiBZVVYyUkdCOjYwMSBTRCBtb2RlKFlbMTY6MjM1XSwg VVZbMTY6MjQwXSwgUkdCWzA6MjU1XSk6CisJICogICBSID0gMS4xNjQqWSArIDEuNTk2KlYgLSAy MDQKKwkgKiAgIEcgPSAxLjE2NCpZIC0gMC4zOTEqVSAtIDAuODEzKlYgKyAxNTQKKwkgKiAgIEIg PSAxLjE2NCpZICsgMi4wMTgqVSAtIDI1OAorCSAqLworCXsKKwkJMHgwNCwgMHhhNywgMHgwMCwg MHgwMCwgMHgwNiwgMHg2MiwgMHgwMiwgMHhjYywKKwkJMHgwNCwgMHhhNywgMHgxMSwgMHg5MCwg MHgxMywgMHg0MCwgMHgwMCwgMHg5YSwKKwkJMHgwNCwgMHhhNywgMHgwOCwgMHgxMiwgMHgwMCwg MHgwMCwgMHgwMywgMHgwMgorCX0sCisJLyoKKwkgKiBZVVYyUkdCOjYwMSBTRCBtb2RlKFlVVlsw OjI1NV0sUkdCWzA6MjU1XSk6CisJICogICBSID0gWSArIDEuNDAyKlYgLSAyNDgKKwkgKiAgIEcg PSBZIC0gMC4zNDQqVSAtIDAuNzE0KlYgKyAxMzUKKwkgKiAgIEIgPSBZICsgMS43NzIqVSAtIDIy NworCSAqLworCXsKKwkJMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg5YiwgMHgwMiwg MHhmOCwKKwkJMHgwNCwgMHgwMCwgMHgxMSwgMHg2MCwgMHgxMiwgMHhkYiwgMHgwMCwgMHg4NywK KwkJMHgwNCwgMHgwMCwgMHgwNywgMHgxNiwgMHgwMCwgMHgwMCwgMHgwMiwgMHhlMworCX0sCisJ LyoKKwkgKiBZVVYyUkdCOjcwOSBIRCBtb2RlKFlbMTY6MjM1XSxVVlsxNjoyNDBdLFJHQlswOjI1 NV0pOgorCSAqICAgUiA9IDEuMTY0KlkgKyAxLjc5MypWIC0gMjQ4CisJICogICBHID0gMS4xNjQq WSAtIDAuMjEzKlUgLSAwLjUzNCpWICsgNzcKKwkgKiAgIEIgPSAxLjE2NCpZICsgMi4xMTUqVSAt IDI4OQorCSAqLworCXsKKwkJMHgwNCwgMHhhNywgMHgwMCwgMHgwMCwgMHgwNywgMHgyYywgMHgw MiwgMHhmOCwKKwkJMHgwNCwgMHhhNywgMHgxMCwgMHhkYSwgMHgxMiwgMHgyMiwgMHgwMCwgMHg0 ZCwKKwkJMHgwNCwgMHhhNywgMHgwOCwgMHg3NCwgMHgwMCwgMHgwMCwgMHgwMywgMHgyMQorCX0s CisKKwkvKgorCSAqIFJHQjJZVVY6NjAxIFNEIG1vZGU6CisJICogICBDYiA9IC0wLjI5MUcgLSAw LjE0OFIgKyAwLjQzOUIgKyAxMjgKKwkgKiAgIFkgID0gMC41MDRHICArIDAuMjU3UiArIDAuMDk4 QiArIDE2CisJICogICBDciA9IC0wLjM2OEcgKyAwLjQzOVIgLSAwLjA3MUIgKyAxMjgKKwkgKi8K Kwl7CisJCTB4MTEsIDB4NWYsIDB4MDEsIDB4ODIsIDB4MTAsIDB4MjMsIDB4MDAsIDB4ODAsCisJ CTB4MDIsIDB4MWMsIDB4MDAsIDB4YTEsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MWUsCisJCTB4MTEs IDB4MjksIDB4MTAsIDB4NTksIDB4MDEsIDB4ODIsIDB4MDAsIDB4ODAKKwl9LAorCS8qCisJICog UkdCMllVVjo3MDkgSEQgbW9kZToKKwkgKiAgIENiID0gLSAwLjMzOEcgLSAwLjEwMVIgKyAwLjQz OUIgKyAxMjgKKwkgKiAgIFkgID0gMC42MTRHICAgKyAwLjE4M1IgKyAwLjA2MkIgKyAxNgorCSAq ICAgQ3IgPSAtIDAuMzk5RyArIDAuNDM5UiAtIDAuMDQwQiArIDEyOAorCSAqLworCXsKKwkJMHgx MSwgMHg5OCwgMHgwMSwgMHhjMSwgMHgxMCwgMHgyOCwgMHgwMCwgMHg4MCwKKwkJMHgwMiwgMHg3 NCwgMHgwMCwgMHhiYiwgMHgwMCwgMHgzZiwgMHgwMCwgMHgxMCwKKwkJMHgxMSwgMHg1YSwgMHgx MCwgMHg2NywgMHgwMSwgMHhjMSwgMHgwMCwgMHg4MAorCX0sCisJLyoKKwkgKiBSR0JbMDoyNTVd MlJHQlsxNjoyMzVdOgorCSAqICAgUicgPSBSIHggKDIzNS0xNikvMjU1ICsgMTY7CisJICogICBH JyA9IEcgeCAoMjM1LTE2KS8yNTUgKyAxNjsKKwkgKiAgIEInID0gQiB4ICgyMzUtMTYpLzI1NSAr IDE2OworCSAqLworCXsKKwkJMHgwMCwgMHgwMCwgMHgwMywgMHg2RiwgMHgwMCwgMHgwMCwgMHgw MCwgMHgxMCwKKwkJMHgwMywgMHg2RiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgx MCwKKwkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg2RiwgMHgwMCwgMHgxMAorCX0s Cit9OworCitzdGF0aWMgaW5saW5lIHU4IGhkbWlfcmVhZGIoc3RydWN0IGlubm9faGRtaSAqaGRt aSwgdTE2IG9mZnNldCkKK3sKKwlyZXR1cm4gcmVhZGxfcmVsYXhlZChoZG1pLT5yZWdzICsgKG9m ZnNldCkgKiAweDA0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGhkbWlfd3JpdGViKHN0cnVj dCBpbm5vX2hkbWkgKmhkbWksIHUxNiBvZmZzZXQsIHUzMiB2YWwpCit7CisJd3JpdGVsX3JlbGF4 ZWQodmFsLCBoZG1pLT5yZWdzICsgKG9mZnNldCkgKiAweDA0KTsKK30KKworc3RhdGljIGlubGlu ZSB2b2lkIGhkbWlfbW9kYihzdHJ1Y3QgaW5ub19oZG1pICpoZG1pLCB1MTYgb2Zmc2V0LAorCQkJ ICAgICB1MzIgbXNrLCB1MzIgdmFsKQoreworCXU4IHRlbXAgPSBoZG1pX3JlYWRiKGhkbWksIG9m ZnNldCkgJiB+bXNrOworCisJdGVtcCB8PSB2YWwgJiBtc2s7CisJaGRtaV93cml0ZWIoaGRtaSwg b2Zmc2V0LCB0ZW1wKTsKK30KKworc3RhdGljIHZvaWQgaW5ub19oZG1pX2kyY19pbml0KHN0cnVj dCBpbm5vX2hkbWkgKmhkbWkpCit7CisJaW50IGRkY19idXNfZnJlcTsKKworCWRkY19idXNfZnJl cSA9IChoZG1pLT50bWRzX3JhdGUgPj4gMikgLyBIRE1JX1NDTF9SQVRFOworCisJaGRtaV93cml0 ZWIoaGRtaSwgRERDX0JVU19GUkVRX0wsIGRkY19idXNfZnJlcSAmIDB4RkYpOworCWhkbWlfd3Jp dGViKGhkbWksIEREQ19CVVNfRlJFUV9ILCAoZGRjX2J1c19mcmVxID4+IDgpICYgMHhGRik7CisK KwkvKiBDbGVhciB0aGUgRURJRCBpbnRlcnJ1cHQgZmxhZyBhbmQgbXV0ZSB0aGUgaW50ZXJydXB0 ICovCisJaGRtaV93cml0ZWIoaGRtaSwgSERNSV9JTlRFUlJVUFRfTUFTSzEsIDApOworCWhkbWlf d3JpdGViKGhkbWksIEhETUlfSU5URVJSVVBUX1NUQVRVUzEsIG1fSU5UX0VESURfUkVBRFkpOwor fQorCitzdGF0aWMgdm9pZCBpbm5vX2hkbWlfc3lzX3Bvd2VyKHN0cnVjdCBpbm5vX2hkbWkgKmhk bWksIGJvb2wgZW5hYmxlKQoreworCWlmIChlbmFibGUpCisJCWhkbWlfbW9kYihoZG1pLCBIRE1J X1NZU19DVFJMLCBtX1BPV0VSLCB2X1BXUl9PTik7CisJZWxzZQorCQloZG1pX21vZGIoaGRtaSwg SERNSV9TWVNfQ1RSTCwgbV9QT1dFUiwgdl9QV1JfT0ZGKTsKK30KKworc3RhdGljIHZvaWQgaW5u b19oZG1pX3NldF9wd3JfbW9kZShzdHJ1Y3QgaW5ub19oZG1pICpoZG1pLCBpbnQgbW9kZSkKK3sK Kwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIE5PUk1BTDoKKwkJaW5ub19oZG1pX3N5c19wb3dlciho ZG1pLCBmYWxzZSk7CisKKwkJaGRtaV93cml0ZWIoaGRtaSwgSERNSV9QSFlfUFJFX0VNUEhBU0lT LCAweDZmKTsKKwkJaGRtaV93cml0ZWIoaGRtaSwgSERNSV9QSFlfRFJJVkVSLCAweGJiKTsKKwor CQloZG1pX3dyaXRlYihoZG1pLCBIRE1JX1BIWV9TWVNfQ1RMLCAweDE1KTsKKwkJaGRtaV93cml0 ZWIoaGRtaSwgSERNSV9QSFlfU1lTX0NUTCwgMHgxNCk7CisJCWhkbWlfd3JpdGViKGhkbWksIEhE TUlfUEhZX1NZU19DVEwsIDB4MTApOworCQloZG1pX3dyaXRlYihoZG1pLCBIRE1JX1BIWV9DSEdf UFdSLCAweDBmKTsKKwkJaGRtaV93cml0ZWIoaGRtaSwgSERNSV9QSFlfU1lOQywgMHgwMCk7CisJ CWhkbWlfd3JpdGViKGhkbWksIEhETUlfUEhZX1NZTkMsIDB4MDEpOworCisJCWlubm9faGRtaV9z eXNfcG93ZXIoaGRtaSwgdHJ1ZSk7CisJCWJyZWFrOworCisJY2FzZSBMT1dFUl9QV1I6CisJCWlu bm9faGRtaV9zeXNfcG93ZXIoaGRtaSwgZmFsc2UpOworCQloZG1pX3dyaXRlYihoZG1pLCBIRE1J X1BIWV9EUklWRVIsIDB4MDApOworCQloZG1pX3dyaXRlYihoZG1pLCBIRE1JX1BIWV9QUkVfRU1Q SEFTSVMsIDB4MDApOworCQloZG1pX3dyaXRlYihoZG1pLCBIRE1JX1BIWV9DSEdfUFdSLCAweDAw KTsKKwkJaGRtaV93cml0ZWIoaGRtaSwgSERNSV9QSFlfU1lTX0NUTCwgMHgxNSk7CisKKwkJYnJl YWs7CisKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGhkbWktPmRldiwgIlVua25vd24gcG93ZXIgbW9k ZSAlZFxuIiwgbW9kZSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBpbm5vX2hkbWlfcmVzZXQoc3Ry dWN0IGlubm9faGRtaSAqaGRtaSkKK3sKKwl1MzIgdmFsOworCXUzMiBtc2s7CisKKwloZG1pX21v ZGIoaGRtaSwgSERNSV9TWVNfQ1RSTCwgbV9SU1RfRElHSVRBTCwgdl9OT1RfUlNUX0RJR0lUQUwp OworCXVkZWxheSgxMDApOworCisJaGRtaV9tb2RiKGhkbWksIEhETUlfU1lTX0NUUkwsIG1fUlNU X0FOQUxPRywgdl9OT1RfUlNUX0FOQUxPRyk7CisJdWRlbGF5KDEwMCk7CisKKwltc2sgPSBtX1JF R19DTEtfSU5WIHwgbV9SRUdfQ0xLX1NPVVJDRSB8IG1fUE9XRVIgfCBtX0lOVF9QT0w7CisJdmFs ID0gdl9SRUdfQ0xLX0lOViB8IHZfUkVHX0NMS19TT1VSQ0VfU1lTIHwgdl9QV1JfT04gfCB2X0lO VF9QT0xfSElHSDsKKwloZG1pX21vZGIoaGRtaSwgSERNSV9TWVNfQ1RSTCwgbXNrLCB2YWwpOwor CisJaW5ub19oZG1pX3NldF9wd3JfbW9kZShoZG1pLCBOT1JNQUwpOworfQorCitzdGF0aWMgaW50 IGlubm9faGRtaV91cGxvYWRfZnJhbWUoc3RydWN0IGlubm9faGRtaSAqaGRtaSwgaW50IHNldHVw X3JjLAorCQkJCSAgdW5pb24gaGRtaV9pbmZvZnJhbWUgKmZyYW1lLCB1MzIgZnJhbWVfaW5kZXgs CisJCQkJICB1MzIgbWFzaywgdTMyIGRpc2FibGUsIHUzMiBlbmFibGUpCit7CisJaWYgKG1hc2sp CisJCWhkbWlfbW9kYihoZG1pLCBIRE1JX1BBQ0tFVF9TRU5EX0FVVE8sIG1hc2ssIGRpc2FibGUp OworCisJaGRtaV93cml0ZWIoaGRtaSwgSERNSV9DT05UUk9MX1BBQ0tFVF9CVUZfSU5ERVgsIGZy YW1lX2luZGV4KTsKKworCWlmIChzZXR1cF9yYyA+PSAwKSB7CisJCXU4IHBhY2tlZF9mcmFtZVtI RE1JX01BWElNVU1fSU5GT19GUkFNRV9TSVpFXTsKKwkJc3NpemVfdCByYywgaTsKKworCQlyYyA9 IGhkbWlfaW5mb2ZyYW1lX3BhY2soZnJhbWUsIHBhY2tlZF9mcmFtZSwKKwkJCQkJIHNpemVvZihw YWNrZWRfZnJhbWUpKTsKKwkJaWYgKHJjIDwgMCkKKwkJCXJldHVybiByYzsKKworCQlmb3IgKGkg PSAwOyBpIDwgcmM7IGkrKykKKwkJCWhkbWlfd3JpdGViKGhkbWksIEhETUlfQ09OVFJPTF9QQUNL RVRfQUREUiArIGksCisJCQkJICAgIHBhY2tlZF9mcmFtZVtpXSk7CisKKwkJaWYgKG1hc2spCisJ CQloZG1pX21vZGIoaGRtaSwgSERNSV9QQUNLRVRfU0VORF9BVVRPLCBtYXNrLCBlbmFibGUpOwor CX0KKworCXJldHVybiBzZXR1cF9yYzsKK30KKworc3RhdGljIGludCBpbm5vX2hkbWlfY29uZmln X3ZpZGVvX3ZzaShzdHJ1Y3QgaW5ub19oZG1pICpoZG1pLAorCQkJCSAgICAgIHN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlICptb2RlKQoreworCXVuaW9uIGhkbWlfaW5mb2ZyYW1lIGZyYW1lOworCWlu dCByYzsKKworCXJjID0gZHJtX2hkbWlfdmVuZG9yX2luZm9mcmFtZV9mcm9tX2Rpc3BsYXlfbW9k ZSgmZnJhbWUudmVuZG9yLmhkbWksCisJCQkJCQkJIG1vZGUpOworCisJcmV0dXJuIGlubm9faGRt aV91cGxvYWRfZnJhbWUoaGRtaSwgcmMsICZmcmFtZSwgSU5GT0ZSQU1FX1ZTSSwKKwkJbV9QQUNL RVRfVlNJX0VOLCB2X1BBQ0tFVF9WU0lfRU4oMCksIHZfUEFDS0VUX1ZTSV9FTigxKSk7Cit9CisK K3N0YXRpYyBpbnQgaW5ub19oZG1pX2NvbmZpZ192aWRlb19hdmkoc3RydWN0IGlubm9faGRtaSAq aGRtaSwKKwkJCQkgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwl1bmlv biBoZG1pX2luZm9mcmFtZSBmcmFtZTsKKwlpbnQgcmM7CisKKwlyYyA9IGRybV9oZG1pX2F2aV9p bmZvZnJhbWVfZnJvbV9kaXNwbGF5X21vZGUoJmZyYW1lLmF2aSwgbW9kZSk7CisKKwlpZiAoaGRt aS0+aGRtaV9kYXRhLmVuY19vdXRfZm9ybWF0ID09IEhETUlfQ09MT1JTUEFDRV9SR0IpCisJCWZy YW1lLmF2aS5jb2xvcnNwYWNlID0gSERNSV9DT0xPUlNQQUNFX1JHQjsKKwllbHNlIGlmIChoZG1p LT5oZG1pX2RhdGEuZW5jX291dF9mb3JtYXQgPT0gSERNSV9DT0xPUlNQQUNFX1lVVjQ0NCkKKwkJ ZnJhbWUuYXZpLmNvbG9yc3BhY2UgPSBIRE1JX0NPTE9SU1BBQ0VfWVVWNDQ0OworCWVsc2UgaWYg KGhkbWktPmhkbWlfZGF0YS5lbmNfb3V0X2Zvcm1hdCA9PSBIRE1JX0NPTE9SU1BBQ0VfWVVWNDIy KQorCQlmcmFtZS5hdmkuY29sb3JzcGFjZSA9IEhETUlfQ09MT1JTUEFDRV9ZVVY0MjI7CisJZWxz ZQorCQlmcmFtZS5hdmkuY29sb3JzcGFjZSA9IEhETUlfQ09MT1JTUEFDRV9SR0I7CisKKwlyZXR1 cm4gaW5ub19oZG1pX3VwbG9hZF9mcmFtZShoZG1pLCByYywgJmZyYW1lLCBJTkZPRlJBTUVfQVZJ LCAwLCAwLCAwKTsKK30KKworc3RhdGljIGludCBpbm5vX2hkbWlfY29uZmlnX3ZpZGVvX2NzYyhz dHJ1Y3QgaW5ub19oZG1pICpoZG1pKQoreworCXN0cnVjdCBoZG1pX2RhdGFfaW5mbyAqZGF0YSA9 ICZoZG1pLT5oZG1pX2RhdGE7CisJaW50IGMwX2MyX2NoYW5nZSA9IDA7CisJaW50IGNzY19lbmFi bGUgPSAwOworCWludCBjc2NfbW9kZSA9IDA7CisJaW50IGF1dG9fY3NjID0gMDsKKwlpbnQgdmFs dWU7CisJaW50IGk7CisKKwkvKiBJbnB1dCB2aWRlbyBtb2RlIGlzIFNEUiBSR0IyNGJpdCwgZGF0 YSBlbmFibGUgc2lnbmFsIGZyb20gZXh0ZXJuYWwgKi8KKwloZG1pX3dyaXRlYihoZG1pLCBIRE1J X1ZJREVPX0NPTlRSTDEsIHZfREVfRVhURVJOQUwgfAorCQkgICAgdl9WSURFT19JTlBVVF9GT1JN QVQoVklERU9fSU5QVVRfU0RSX1JHQjQ0NCkpOworCisJLyogSW5wdXQgY29sb3IgaGFyZGNvZGUg dG8gUkdCLCBhbmQgb3V0cHV0IGNvbG9yIGhhcmRjb2RlIHRvIFJHQjg4OCAqLworCXZhbHVlID0g dl9WSURFT19JTlBVVF9CSVRTKFZJREVPX0lOUFVUXzhCSVRTKSB8CisJCXZfVklERU9fT1VUUFVU X0NPTE9SKDApIHwKKwkJdl9WSURFT19JTlBVVF9DU1AoMCk7CisJaGRtaV93cml0ZWIoaGRtaSwg SERNSV9WSURFT19DT05UUkwyLCB2YWx1ZSk7CisKKwlpZiAoZGF0YS0+ZW5jX291dF9mb3JtYXQg PT0gZGF0YS0+ZW5jX291dF9mb3JtYXQpIHsKKwkJaWYgKChkYXRhLT5lbmNfaW5fZm9ybWF0ID09 IEhETUlfQ09MT1JTUEFDRV9SR0IpIHx8CisJCSAgICAoZGF0YS0+ZW5jX2luX2Zvcm1hdCA+PSBI RE1JX0NPTE9SU1BBQ0VfWVVWNDQ0KSkgeworCQkJdmFsdWUgPSB2X1NPRl9ESVNBQkxFIHwgdl9D T0xPUl9ERVBUSF9OT1RfSU5ESUNBVEVEKDEpOworCQkJaGRtaV93cml0ZWIoaGRtaSwgSERNSV9W SURFT19DT05UUkwzLCB2YWx1ZSk7CisKKwkJCWhkbWlfbW9kYihoZG1pLCBIRE1JX1ZJREVPX0NP TlRSTCwKKwkJCQkgIG1fVklERU9fQVVUT19DU0MgfCBtX1ZJREVPX0MwX0MyX1NXQVAsCisJCQkJ ICB2X1ZJREVPX0FVVE9fQ1NDKEFVVE9fQ1NDX0RJU0FCTEUpIHwKKwkJCQkgIHZfVklERU9fQzBf QzJfU1dBUChDMF9DMl9DSEFOR0VfRElTQUJMRSkpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisK KwlpZiAoZGF0YS0+Y29sb3JpbWV0cnkgPT0gSERNSV9DT0xPUklNRVRSWV9JVFVfNjAxKSB7CisJ CWlmICgoZGF0YS0+ZW5jX2luX2Zvcm1hdCA9PSBIRE1JX0NPTE9SU1BBQ0VfUkdCKSAmJgorCQkg ICAgKGRhdGEtPmVuY19vdXRfZm9ybWF0ID09IEhETUlfQ09MT1JTUEFDRV9ZVVY0NDQpKSB7CisJ CQljc2NfbW9kZSA9IENTQ19SR0JfMF8yNTVfVE9fSVRVNjAxXzE2XzIzNV84QklUOworCQkJYXV0 b19jc2MgPSBBVVRPX0NTQ19ESVNBQkxFOworCQkJYzBfYzJfY2hhbmdlID0gQzBfQzJfQ0hBTkdF X0RJU0FCTEU7CisJCQljc2NfZW5hYmxlID0gdl9DU0NfRU5BQkxFOworCQl9IGVsc2UgaWYgKChk YXRhLT5lbmNfaW5fZm9ybWF0ID09IEhETUlfQ09MT1JTUEFDRV9ZVVY0NDQpICYmCisJCQkgICAo ZGF0YS0+ZW5jX291dF9mb3JtYXQgPT0gSERNSV9DT0xPUlNQQUNFX1JHQikpIHsKKwkJCWNzY19t b2RlID0gQ1NDX0lUVTYwMV8xNl8yMzVfVE9fUkdCXzBfMjU1XzhCSVQ7CisJCQlhdXRvX2NzYyA9 IEFVVE9fQ1NDX0VOQUJMRTsKKwkJCWMwX2MyX2NoYW5nZSA9IEMwX0MyX0NIQU5HRV9ESVNBQkxF OworCQkJY3NjX2VuYWJsZSA9IHZfQ1NDX0RJU0FCTEU7CisJCX0KKwl9IGVsc2UgeworCQlpZiAo KGRhdGEtPmVuY19pbl9mb3JtYXQgPT0gSERNSV9DT0xPUlNQQUNFX1JHQikgJiYKKwkJICAgIChk YXRhLT5lbmNfb3V0X2Zvcm1hdCA9PSBIRE1JX0NPTE9SU1BBQ0VfWVVWNDQ0KSkgeworCQkJY3Nj X21vZGUgPSBDU0NfUkdCXzBfMjU1X1RPX0lUVTcwOV8xNl8yMzVfOEJJVDsKKwkJCWF1dG9fY3Nj ID0gQVVUT19DU0NfRElTQUJMRTsKKwkJCWMwX2MyX2NoYW5nZSA9IEMwX0MyX0NIQU5HRV9ESVNB QkxFOworCQkJY3NjX2VuYWJsZSA9IHZfQ1NDX0VOQUJMRTsKKwkJfSBlbHNlIGlmICgoZGF0YS0+ ZW5jX2luX2Zvcm1hdCA9PSBIRE1JX0NPTE9SU1BBQ0VfWVVWNDQ0KSAmJgorCQkJICAgKGRhdGEt PmVuY19vdXRfZm9ybWF0ID09IEhETUlfQ09MT1JTUEFDRV9SR0IpKSB7CisJCQljc2NfbW9kZSA9 IENTQ19JVFU3MDlfMTZfMjM1X1RPX1JHQl8wXzI1NV84QklUOworCQkJYXV0b19jc2MgPSBBVVRP X0NTQ19FTkFCTEU7CisJCQljMF9jMl9jaGFuZ2UgPSBDMF9DMl9DSEFOR0VfRElTQUJMRTsKKwkJ CWNzY19lbmFibGUgPSB2X0NTQ19ESVNBQkxFOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8 IDI0OyBpKyspCisJCWhkbWlfd3JpdGViKGhkbWksIEhETUlfVklERU9fQ1NDX0NPRUYgKyBpLAor CQkJICAgIGNvZWZmX2NzY1tjc2NfbW9kZV1baV0pOworCisJdmFsdWUgPSB2X1NPRl9ESVNBQkxF IHwgY3NjX2VuYWJsZSB8IHZfQ09MT1JfREVQVEhfTk9UX0lORElDQVRFRCgxKTsKKwloZG1pX3dy aXRlYihoZG1pLCBIRE1JX1ZJREVPX0NPTlRSTDMsIHZhbHVlKTsKKwloZG1pX21vZGIoaGRtaSwg SERNSV9WSURFT19DT05UUkwsIG1fVklERU9fQVVUT19DU0MgfAorCQkgIG1fVklERU9fQzBfQzJf U1dBUCwgdl9WSURFT19BVVRPX0NTQyhhdXRvX2NzYykgfAorCQkgIHZfVklERU9fQzBfQzJfU1dB UChjMF9jMl9jaGFuZ2UpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlubm9faGRt aV9jb25maWdfdmlkZW9fdGltaW5nKHN0cnVjdCBpbm5vX2hkbWkgKmhkbWksCisJCQkJCSBzdHJ1 Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlpbnQgdmFsdWU7CisKKwkvKiBTZXQgZGV0 YWlsIGV4dGVybmFsIHZpZGVvIHRpbWluZyBwb2xhcml0eSBhbmQgaW50ZXJsYWNlIG1vZGUgKi8K Kwl2YWx1ZSA9IHZfRVhURVJBTkxfVklERU8oMSk7CisJdmFsdWUgfD0gbW9kZS0+ZmxhZ3MgJiBE Uk1fTU9ERV9GTEFHX1BIU1lOQyA/CisJCSB2X0hTWU5DX1BPTEFSSVRZKDEpIDogdl9IU1lOQ19Q T0xBUklUWSgwKTsKKwl2YWx1ZSB8PSBtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfUFZTWU5D ID8KKwkJIHZfVlNZTkNfUE9MQVJJVFkoMSkgOiB2X1ZTWU5DX1BPTEFSSVRZKDApOworCXZhbHVl IHw9IG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UgPworCQkgdl9JTkVUTEFD RSgxKSA6IHZfSU5FVExBQ0UoMCk7CisJaGRtaV93cml0ZWIoaGRtaSwgSERNSV9WSURFT19USU1J TkdfQ1RMLCB2YWx1ZSk7CisKKwkvKiBTZXQgZGV0YWlsIGV4dGVybmFsIHZpZGVvIHRpbWluZyAq LworCXZhbHVlID0gbW9kZS0+aHRvdGFsOworCWhkbWlfd3JpdGViKGhkbWksIEhETUlfVklERU9f RVhUX0hUT1RBTF9MLCB2YWx1ZSAmIDB4RkYpOworCWhkbWlfd3JpdGViKGhkbWksIEhETUlfVklE RU9fRVhUX0hUT1RBTF9ILCAodmFsdWUgPj4gOCkgJiAweEZGKTsKKworCXZhbHVlID0gbW9kZS0+ aHRvdGFsIC0gbW9kZS0+aGRpc3BsYXk7CisJaGRtaV93cml0ZWIoaGRtaSwgSERNSV9WSURFT19F WFRfSEJMQU5LX0wsIHZhbHVlICYgMHhGRik7CisJaGRtaV93cml0ZWIoaGRtaSwgSERNSV9WSURF T19FWFRfSEJMQU5LX0gsICh2YWx1ZSA+PiA4KSAmIDB4RkYpOworCisJdmFsdWUgPSBtb2RlLT5o c3luY19zdGFydCAtIG1vZGUtPmhkaXNwbGF5OworCWhkbWlfd3JpdGViKGhkbWksIEhETUlfVklE RU9fRVhUX0hERUxBWV9MLCB2YWx1ZSAmIDB4RkYpOworCWhkbWlfd3JpdGViKGhkbWksIEhETUlf VklERU9fRVhUX0hERUxBWV9ILCAodmFsdWUgPj4gOCkgJiAweEZGKTsKKworCXZhbHVlID0gbW9k ZS0+aHN5bmNfZW5kIC0gbW9kZS0+aHN5bmNfc3RhcnQ7CisJaGRtaV93cml0ZWIoaGRtaSwgSERN SV9WSURFT19FWFRfSERVUkFUSU9OX0wsIHZhbHVlICYgMHhGRik7CisJaGRtaV93cml0ZWIoaGRt aSwgSERNSV9WSURFT19FWFRfSERVUkFUSU9OX0gsICh2YWx1ZSA+PiA4KSAmIDB4RkYpOworCisJ dmFsdWUgPSBtb2RlLT52dG90YWw7CisJaGRtaV93cml0ZWIoaGRtaSwgSERNSV9WSURFT19FWFRf VlRPVEFMX0wsIHZhbHVlICYgMHhGRik7CisJaGRtaV93cml0ZWIoaGRtaSwgSERNSV9WSURFT19F WFRfVlRPVEFMX0gsICh2YWx1ZSA+PiA4KSAmIDB4RkYpOworCisJdmFsdWUgPSBtb2RlLT52dG90 YWwgLSBtb2RlLT52ZGlzcGxheTsKKwloZG1pX3dyaXRlYihoZG1pLCBIRE1JX1ZJREVPX0VYVF9W QkxBTkssIHZhbHVlICYgMHhGRik7CisKKwl2YWx1ZSA9IG1vZGUtPnZzeW5jX3N0YXJ0IC0gbW9k ZS0+dmRpc3BsYXk7CisJaGRtaV93cml0ZWIoaGRtaSwgSERNSV9WSURFT19FWFRfVkRFTEFZLCB2 YWx1ZSAmIDB4RkYpOworCisJdmFsdWUgPSBtb2RlLT52c3luY19lbmQgLSBtb2RlLT52c3luY19z dGFydDsKKwloZG1pX3dyaXRlYihoZG1pLCBIRE1JX1ZJREVPX0VYVF9WRFVSQVRJT04sIHZhbHVl ICYgMHhGRik7CisKKwloZG1pX3dyaXRlYihoZG1pLCBIRE1JX1BIWV9QUkVfRElWX1JBVElPLCAw eDFlKTsKKwloZG1pX3dyaXRlYihoZG1pLCBIRE1JX1BIWV9GRUVEQkFDS19ESVZfUkFUSU9fTE9X LCAweDJjKTsKKwloZG1pX3dyaXRlYihoZG1pLCBIRE1JX1BIWV9GRUVEQkFDS19ESVZfUkFUSU9f SElHSCwgMHgwMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbm5vX2hkbWlfc2V0 dXAoc3RydWN0IGlubm9faGRtaSAqaGRtaSwKKwkJCSAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICptb2RlKQoreworCWhkbWktPmhkbWlfZGF0YS52aWMgPSBkcm1fbWF0Y2hfY2VhX21vZGUobW9k ZSk7CisKKwloZG1pLT5oZG1pX2RhdGEuZW5jX2luX2Zvcm1hdCA9IEhETUlfQ09MT1JTUEFDRV9S R0I7CisJaGRtaS0+aGRtaV9kYXRhLmVuY19vdXRfZm9ybWF0ID0gSERNSV9DT0xPUlNQQUNFX1JH QjsKKworCWlmICgoaGRtaS0+aGRtaV9kYXRhLnZpYyA9PSA2KSB8fCAoaGRtaS0+aGRtaV9kYXRh LnZpYyA9PSA3KSB8fAorCSAgICAoaGRtaS0+aGRtaV9kYXRhLnZpYyA9PSAyMSkgfHwgKGhkbWkt PmhkbWlfZGF0YS52aWMgPT0gMjIpIHx8CisJICAgIChoZG1pLT5oZG1pX2RhdGEudmljID09IDIp IHx8IChoZG1pLT5oZG1pX2RhdGEudmljID09IDMpIHx8CisJICAgIChoZG1pLT5oZG1pX2RhdGEu dmljID09IDE3KSB8fCAoaGRtaS0+aGRtaV9kYXRhLnZpYyA9PSAxOCkpCisJCWhkbWktPmhkbWlf ZGF0YS5jb2xvcmltZXRyeSA9IEhETUlfQ09MT1JJTUVUUllfSVRVXzYwMTsKKwllbHNlCisJCWhk bWktPmhkbWlfZGF0YS5jb2xvcmltZXRyeSA9IEhETUlfQ09MT1JJTUVUUllfSVRVXzcwOTsKKwor CS8qIE11dGUgdmlkZW8gYW5kIGF1ZGlvIG91dHB1dCAqLworCWhkbWlfbW9kYihoZG1pLCBIRE1J X0FWX01VVEUsIG1fQVVESU9fTVVURSB8IG1fVklERU9fQkxBQ0ssCisJCSAgdl9BVURJT19NVVRF KDEpIHwgdl9WSURFT19NVVRFKDEpKTsKKworCS8qIFNldCBIRE1JIE1vZGUgKi8KKwloZG1pX3dy aXRlYihoZG1pLCBIRE1JX0hEQ1BfQ1RSTCwKKwkJICAgIHZfSERNSV9EVkkoaGRtaS0+aGRtaV9k YXRhLnNpbmtfaXNfaGRtaSkpOworCisJaW5ub19oZG1pX2NvbmZpZ192aWRlb190aW1pbmcoaGRt aSwgbW9kZSk7CisKKwlpbm5vX2hkbWlfY29uZmlnX3ZpZGVvX2NzYyhoZG1pKTsKKworCWlmICho ZG1pLT5oZG1pX2RhdGEuc2lua19pc19oZG1pKSB7CisJCWlubm9faGRtaV9jb25maWdfdmlkZW9f YXZpKGhkbWksIG1vZGUpOworCQlpbm5vX2hkbWlfY29uZmlnX3ZpZGVvX3ZzaShoZG1pLCBtb2Rl KTsKKwl9CisKKwkvKgorCSAqIFdoZW4gSVAgY29udHJvbGxlciBoYXZlIGNvbmZpZ3VyZWQgdG8g YW4gYWNjdXJhdGUgdmlkZW8KKwkgKiB0aW1pbmcsIHRoZW4gdGhlIFRNRFMgY2xvY2sgc291cmNl IHdvdWxkIGJlIHN3aXRjaGVkIHRvCisJICogRENMS19MQ0RDLCBzbyB3ZSBuZWVkIHRvIGluaXQg dGhlIFRNRFMgcmF0ZSB0byBtb2RlIHBpeGVsCisJICogY2xvY2sgcmF0ZSwgYW5kIHJlY29uZmln dXJlIHRoZSBEREMgY2xvY2suCisJICovCisJaGRtaS0+dG1kc19yYXRlID0gbW9kZS0+Y2xvY2sg KiAxMDAwOworCWlubm9faGRtaV9pMmNfaW5pdChoZG1pKTsKKworCS8qIFVubXV0ZSB2aWRlbyBh bmQgYXVkaW8gb3V0cHV0ICovCisJaGRtaV9tb2RiKGhkbWksIEhETUlfQVZfTVVURSwgbV9BVURJ T19NVVRFIHwgbV9WSURFT19CTEFDSywKKwkJICB2X0FVRElPX01VVEUoMCkgfCB2X1ZJREVPX01V VEUoMCkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGlubm9faGRtaV9lbmNvZGVy X21vZGVfc2V0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCQkgICAgICAgc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJICAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICphZGpfbW9kZSkKK3sKKwlzdHJ1Y3QgaW5ub19oZG1pICpoZG1pID0gdG9faW5ub19oZG1p KGVuY29kZXIpOworCisJaW5ub19oZG1pX3NldHVwKGhkbWksIGFkal9tb2RlKTsKKworCS8qIFN0 b3JlIHRoZSBkaXNwbGF5IG1vZGUgZm9yIHBsdWdpbi9EUE1TIHBvd2Vyb24gZXZlbnRzICovCisJ bWVtY3B5KCZoZG1pLT5wcmV2aW91c19tb2RlLCBhZGpfbW9kZSwgc2l6ZW9mKGhkbWktPnByZXZp b3VzX21vZGUpKTsKK30KKworc3RhdGljIHZvaWQgaW5ub19oZG1pX2VuY29kZXJfZW5hYmxlKHN0 cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgaW5ub19oZG1pICpoZG1pID0g dG9faW5ub19oZG1pKGVuY29kZXIpOworCisJcm9ja2NoaXBfZHJtX2NydGNfbW9kZV9jb25maWco ZW5jb2Rlci0+Y3J0YywgRFJNX01PREVfQ09OTkVDVE9SX0hETUlBLAorCQkJCSAgICAgIFJPQ0tD SElQX09VVF9NT0RFX1A4ODgpOworCisJaW5ub19oZG1pX3NldF9wd3JfbW9kZShoZG1pLCBOT1JN QUwpOworfQorCitzdGF0aWMgdm9pZCBpbm5vX2hkbWlfZW5jb2Rlcl9kaXNhYmxlKHN0cnVjdCBk cm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgaW5ub19oZG1pICpoZG1pID0gdG9faW5u b19oZG1pKGVuY29kZXIpOworCisJaW5ub19oZG1pX3NldF9wd3JfbW9kZShoZG1pLCBMT1dFUl9Q V1IpOworfQorCitzdGF0aWMgYm9vbCBpbm5vX2hkbWlfZW5jb2Rlcl9tb2RlX2ZpeHVwKHN0cnVj dCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCQkJIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICptb2RlLAorCQkJCQkgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkal9tb2RlKQorewor CXJldHVybiB0cnVlOworfQorCitzdGF0aWMgc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5j cyBpbm5vX2hkbWlfZW5jb2Rlcl9oZWxwZXJfZnVuY3MgPSB7CisJLmVuYWJsZSAgICAgPSBpbm5v X2hkbWlfZW5jb2Rlcl9lbmFibGUsCisJLmRpc2FibGUgICAgPSBpbm5vX2hkbWlfZW5jb2Rlcl9k aXNhYmxlLAorCS5tb2RlX2ZpeHVwID0gaW5ub19oZG1pX2VuY29kZXJfbW9kZV9maXh1cCwKKwku bW9kZV9zZXQgICA9IGlubm9faGRtaV9lbmNvZGVyX21vZGVfc2V0LAorfTsKKworc3RhdGljIHN0 cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyBpbm5vX2hkbWlfZW5jb2Rlcl9mdW5jcyA9IHsKKwkuZGVz dHJveSA9IGRybV9lbmNvZGVyX2NsZWFudXAsCit9OworCitzdGF0aWMgZW51bSBkcm1fY29ubmVj dG9yX3N0YXR1cworaW5ub19oZG1pX2Nvbm5lY3Rvcl9kZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm5lY3RvciwgYm9vbCBmb3JjZSkKK3sKKwlzdHJ1Y3QgaW5ub19oZG1pICpoZG1pID0g dG9faW5ub19oZG1pKGNvbm5lY3Rvcik7CisKKwlyZXR1cm4gKGhkbWlfcmVhZGIoaGRtaSwgSERN SV9TVEFUVVMpICYgbV9IT1RQTFVHKSA/CisJCWNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkIDog Y29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7Cit9CisKK3N0YXRpYyBpbnQgaW5ub19oZG1p X2Nvbm5lY3Rvcl9nZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sK KwlzdHJ1Y3QgaW5ub19oZG1pICpoZG1pID0gdG9faW5ub19oZG1pKGNvbm5lY3Rvcik7CisJc3Ry dWN0IGVkaWQgKmVkaWQ7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIWhkbWktPmRkYykKKwkJcmV0 dXJuIDA7CisKKwllZGlkID0gZHJtX2dldF9lZGlkKGNvbm5lY3RvciwgaGRtaS0+ZGRjKTsKKwlp ZiAoZWRpZCkgeworCQloZG1pLT5oZG1pX2RhdGEuc2lua19pc19oZG1pID0gZHJtX2RldGVjdF9o ZG1pX21vbml0b3IoZWRpZCk7CisJCWhkbWktPmhkbWlfZGF0YS5zaW5rX2hhc19hdWRpbyA9IGRy bV9kZXRlY3RfbW9uaXRvcl9hdWRpbyhlZGlkKTsKKwkJZHJtX21vZGVfY29ubmVjdG9yX3VwZGF0 ZV9lZGlkX3Byb3BlcnR5KGNvbm5lY3RvciwgZWRpZCk7CisJCXJldCA9IGRybV9hZGRfZWRpZF9t b2Rlcyhjb25uZWN0b3IsIGVkaWQpOworCQlrZnJlZShlZGlkKTsKKwl9CisKKwlyZXR1cm4gcmV0 OworfQorCitzdGF0aWMgZW51bSBkcm1fbW9kZV9zdGF0dXMKK2lubm9faGRtaV9jb25uZWN0b3Jf bW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJICAgICAgIHN0 cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCXJldHVybiBNT0RFX09LOworfQorCitz dGF0aWMgc3RydWN0IGRybV9lbmNvZGVyICoKK2lubm9faGRtaV9jb25uZWN0b3JfYmVzdF9lbmNv ZGVyKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGlubm9faGRt aSAqaGRtaSA9IHRvX2lubm9faGRtaShjb25uZWN0b3IpOworCisJcmV0dXJuICZoZG1pLT5lbmNv ZGVyOworfQorCitzdGF0aWMgaW50Citpbm5vX2hkbWlfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9t b2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJCSAgICAgICB1aW50MzJf dCBtYXhYLCB1aW50MzJfdCBtYXhZKQoreworCXJldHVybiBkcm1faGVscGVyX3Byb2JlX3Npbmds ZV9jb25uZWN0b3JfbW9kZXMoY29ubmVjdG9yLCAxOTIwLCAxMDgwKTsKK30KKworc3RhdGljIHZv aWQgaW5ub19oZG1pX2Nvbm5lY3Rvcl9kZXN0cm95KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3IpCit7CisJZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyKGNvbm5lY3Rvcik7CisJZHJtX2Nv bm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rvcik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2Nvbm5l Y3Rvcl9mdW5jcyBpbm5vX2hkbWlfY29ubmVjdG9yX2Z1bmNzID0geworCS5kcG1zID0gZHJtX2F0 b21pY19oZWxwZXJfY29ubmVjdG9yX2RwbXMsCisJLmZpbGxfbW9kZXMgPSBpbm5vX2hkbWlfcHJv YmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKKwkuZGV0ZWN0ID0gaW5ub19oZG1pX2Nvbm5lY3Rv cl9kZXRlY3QsCisJLmRlc3Ryb3kgPSBpbm5vX2hkbWlfY29ubmVjdG9yX2Rlc3Ryb3ksCisJLnJl c2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0LAorCS5hdG9taWNfZHVwbGlj YXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSwK KwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZGVz dHJveV9zdGF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVu Y3MgaW5ub19oZG1pX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgPSB7CisJLmdldF9tb2RlcyA9IGlu bm9faGRtaV9jb25uZWN0b3JfZ2V0X21vZGVzLAorCS5tb2RlX3ZhbGlkID0gaW5ub19oZG1pX2Nv bm5lY3Rvcl9tb2RlX3ZhbGlkLAorCS5iZXN0X2VuY29kZXIgPSBpbm5vX2hkbWlfY29ubmVjdG9y X2Jlc3RfZW5jb2RlciwKK307CisKK3N0YXRpYyBpbnQgaW5ub19oZG1pX3JlZ2lzdGVyKHN0cnVj dCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCBpbm5vX2hkbWkgKmhkbWkpCit7CisJc3RydWN0IGRy bV9lbmNvZGVyICplbmNvZGVyID0gJmhkbWktPmVuY29kZXI7CisJc3RydWN0IGRldmljZSAqZGV2 ID0gaGRtaS0+ZGV2OworCisJZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MgPSBkcm1fb2ZfZmluZF9w b3NzaWJsZV9jcnRjcyhkcm0sIGRldi0+b2Zfbm9kZSk7CisKKwkvKgorCSAqIElmIHdlIGZhaWxl ZCB0byBmaW5kIHRoZSBDUlRDKHMpIHdoaWNoIHRoaXMgZW5jb2RlciBpcworCSAqIHN1cHBvc2Vk IHRvIGJlIGNvbm5lY3RlZCB0bywgaXQncyBiZWNhdXNlIHRoZSBDUlRDIGhhcworCSAqIG5vdCBi ZWVuIHJlZ2lzdGVyZWQgeWV0LiAgRGVmZXIgcHJvYmluZywgYW5kIGhvcGUgdGhhdAorCSAqIHRo ZSByZXF1aXJlZCBDUlRDIGlzIGFkZGVkIGxhdGVyLgorCSAqLworCWlmIChlbmNvZGVyLT5wb3Nz aWJsZV9jcnRjcyA9PSAwKQorCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKworCWRybV9lbmNvZGVy X2hlbHBlcl9hZGQoZW5jb2RlciwgJmlubm9faGRtaV9lbmNvZGVyX2hlbHBlcl9mdW5jcyk7CisJ ZHJtX2VuY29kZXJfaW5pdChkcm0sIGVuY29kZXIsICZpbm5vX2hkbWlfZW5jb2Rlcl9mdW5jcywK KwkJCSBEUk1fTU9ERV9FTkNPREVSX1RNRFMsIE5VTEwpOworCisJaGRtaS0+Y29ubmVjdG9yLnBv bGxlZCA9IERSTV9DT05ORUNUT1JfUE9MTF9IUEQ7CisKKwlkcm1fY29ubmVjdG9yX2hlbHBlcl9h ZGQoJmhkbWktPmNvbm5lY3RvciwKKwkJCQkgJmlubm9faGRtaV9jb25uZWN0b3JfaGVscGVyX2Z1 bmNzKTsKKwlkcm1fY29ubmVjdG9yX2luaXQoZHJtLCAmaGRtaS0+Y29ubmVjdG9yLCAmaW5ub19o ZG1pX2Nvbm5lY3Rvcl9mdW5jcywKKwkJCSAgIERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQSk7CisK Kwlkcm1fbW9kZV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIoJmhkbWktPmNvbm5lY3RvciwgZW5j b2Rlcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlycXJldHVybl90IGlubm9faGRtaV9p MmNfaXJxKHN0cnVjdCBpbm5vX2hkbWkgKmhkbWkpCit7CisJc3RydWN0IGlubm9faGRtaV9pMmMg KmkyYyA9IGhkbWktPmkyYzsKKwl1OCBzdGF0OworCisJc3RhdCA9IGhkbWlfcmVhZGIoaGRtaSwg SERNSV9JTlRFUlJVUFRfU1RBVFVTMSk7CisJaWYgKCEoc3RhdCAmIG1fSU5UX0VESURfUkVBRFkp KQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwkvKiBDbGVhciBIRE1JIEVESUQgaW50ZXJydXB0IGZs YWcgKi8KKwloZG1pX3dyaXRlYihoZG1pLCBIRE1JX0lOVEVSUlVQVF9TVEFUVVMxLCBtX0lOVF9F RElEX1JFQURZKTsKKworCWNvbXBsZXRlKCZpMmMtPmNtcCk7CisKKwlyZXR1cm4gSVJRX0hBTkRM RUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBpbm5vX2hkbWlfaGFyZGlycShpbnQgaXJxLCB2 b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGlubm9faGRtaSAqaGRtaSA9IGRldl9pZDsKKwlpcnFy ZXR1cm5fdCByZXQgPSBJUlFfTk9ORTsKKwl1OCBpbnRlcnJ1cHQ7CisKKwlpZiAoaGRtaS0+aTJj KQorCQlyZXQgPSBpbm5vX2hkbWlfaTJjX2lycShoZG1pKTsKKworCWludGVycnVwdCA9IGhkbWlf cmVhZGIoaGRtaSwgSERNSV9TVEFUVVMpOworCWlmIChpbnRlcnJ1cHQgJiBtX0lOVF9IT1RQTFVH KSB7CisJCWhkbWlfbW9kYihoZG1pLCBIRE1JX1NUQVRVUywgbV9JTlRfSE9UUExVRywgbV9JTlRf SE9UUExVRyk7CisJCXJldCA9IElSUV9XQUtFX1RIUkVBRDsKKwl9CisKKwlyZXR1cm4gcmV0Owor fQorCitzdGF0aWMgaXJxcmV0dXJuX3QgaW5ub19oZG1pX2lycShpbnQgaXJxLCB2b2lkICpkZXZf aWQpCit7CisJc3RydWN0IGlubm9faGRtaSAqaGRtaSA9IGRldl9pZDsKKworCWRybV9oZWxwZXJf aHBkX2lycV9ldmVudChoZG1pLT5jb25uZWN0b3IuZGV2KTsKKworCXJldHVybiBJUlFfSEFORExF RDsKK30KKworc3RhdGljIGludCBpbm5vX2hkbWlfaTJjX3JlYWQoc3RydWN0IGlubm9faGRtaSAq aGRtaSwgc3RydWN0IGkyY19tc2cgKm1zZ3MpCit7CisJaW50IGxlbmd0aCA9IG1zZ3MtPmxlbjsK Kwl1OCAqYnVmID0gbXNncy0+YnVmOworCWludCByZXQ7CisKKwlyZXQgPSB3YWl0X2Zvcl9jb21w bGV0aW9uX3RpbWVvdXQoJmhkbWktPmkyYy0+Y21wLCBIWiAvIDEwKTsKKwlpZiAoIXJldCkKKwkJ cmV0dXJuIC1FQUdBSU47CisKKwl3aGlsZSAobGVuZ3RoLS0pCisJCSpidWYrKyA9IGhkbWlfcmVh ZGIoaGRtaSwgSERNSV9FRElEX0ZJRk9fQUREUik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBpbm5vX2hkbWlfaTJjX3dyaXRlKHN0cnVjdCBpbm5vX2hkbWkgKmhkbWksIHN0cnVjdCBp MmNfbXNnICptc2dzKQoreworCS8qCisJICogVGhlIEREQyBtb2R1bGUgb25seSBzdXBwb3J0IHJl YWQgRURJRCBtZXNzYWdlLCBzbworCSAqIHdlIGFzc3VtZSB0aGF0IGVhY2ggd29yZCB3cml0ZSB0 byB0aGlzIGkyYyBhZGFwdGVyCisJICogc2hvdWxkIGJlIHRoZSBvZmZzZXQgb2YgRURJRCB3b3Jk IGFkZHJlc3MuCisJICovCisJaWYgKChtc2dzLT5sZW4gIT0gMSkgfHwKKwkgICAgKChtc2dzLT5h ZGRyICE9IEREQ19BRERSKSAmJiAobXNncy0+YWRkciAhPSBERENfU0VHTUVOVF9BRERSKSkpCisJ CXJldHVybiAtRUlOVkFMOworCisJcmVpbml0X2NvbXBsZXRpb24oJmhkbWktPmkyYy0+Y21wKTsK KworCWlmIChtc2dzLT5hZGRyID09IEREQ19TRUdNRU5UX0FERFIpCisJCWhkbWktPmkyYy0+c2Vn bWVudF9hZGRyID0gbXNncy0+YnVmWzBdOworCWlmIChtc2dzLT5hZGRyID09IEREQ19BRERSKQor CQloZG1pLT5pMmMtPmRkY19hZGRyID0gbXNncy0+YnVmWzBdOworCisJLyogU2V0IGVkaWQgZmlm byBmaXJzdCBhZGRyICovCisJaGRtaV93cml0ZWIoaGRtaSwgSERNSV9FRElEX0ZJRk9fT0ZGU0VU LCAweDAwKTsKKworCS8qIFNldCBlZGlkIHdvcmQgYWRkcmVzcyAweDAwLzB4ODAgKi8KKwloZG1p X3dyaXRlYihoZG1pLCBIRE1JX0VESURfV09SRF9BRERSLCBoZG1pLT5pMmMtPmRkY19hZGRyKTsK KworCS8qIFNldCBlZGlkIHNlZ21lbnQgcG9pbnRlciAqLworCWhkbWlfd3JpdGViKGhkbWksIEhE TUlfRURJRF9TRUdNRU5UX1BPSU5URVIsIGhkbWktPmkyYy0+c2VnbWVudF9hZGRyKTsKKworCXJl dHVybiAwOworfQorCitzdGF0aWMgaW50IGlubm9faGRtaV9pMmNfeGZlcihzdHJ1Y3QgaTJjX2Fk YXB0ZXIgKmFkYXAsCisJCQkgICAgICBzdHJ1Y3QgaTJjX21zZyAqbXNncywgaW50IG51bSkKK3sK KwlzdHJ1Y3QgaW5ub19oZG1pICpoZG1pID0gaTJjX2dldF9hZGFwZGF0YShhZGFwKTsKKwlzdHJ1 Y3QgaW5ub19oZG1pX2kyYyAqaTJjID0gaGRtaS0+aTJjOworCWludCBpLCByZXQgPSAwOworCisJ bXV0ZXhfbG9jaygmaTJjLT5sb2NrKTsKKworCS8qIENsZWFyIHRoZSBFRElEIGludGVycnVwdCBm bGFnIGFuZCB1bm11dGUgdGhlIGludGVycnVwdCAqLworCWhkbWlfd3JpdGViKGhkbWksIEhETUlf SU5URVJSVVBUX01BU0sxLCBtX0lOVF9FRElEX1JFQURZKTsKKwloZG1pX3dyaXRlYihoZG1pLCBI RE1JX0lOVEVSUlVQVF9TVEFUVVMxLCBtX0lOVF9FRElEX1JFQURZKTsKKworCWZvciAoaSA9IDA7 IGkgPCBudW07IGkrKykgeworCQlkZXZfZGJnKGhkbWktPmRldiwgInhmZXI6IG51bTogJWQvJWQs IGxlbjogJWQsIGZsYWdzOiAlI3hcbiIsCisJCQlpICsgMSwgbnVtLCBtc2dzW2ldLmxlbiwgbXNn c1tpXS5mbGFncyk7CisKKwkJaWYgKG1zZ3NbaV0uZmxhZ3MgJiBJMkNfTV9SRCkKKwkJCXJldCA9 IGlubm9faGRtaV9pMmNfcmVhZChoZG1pLCAmbXNnc1tpXSk7CisJCWVsc2UKKwkJCXJldCA9IGlu bm9faGRtaV9pMmNfd3JpdGUoaGRtaSwgJm1zZ3NbaV0pOworCisJCWlmIChyZXQgPCAwKQorCQkJ YnJlYWs7CisJfQorCisJaWYgKCFyZXQpCisJCXJldCA9IG51bTsKKworCS8qIE11dGUgSERNSSBF RElEIGludGVycnVwdCAqLworCWhkbWlfd3JpdGViKGhkbWksIEhETUlfSU5URVJSVVBUX01BU0sx LCAwKTsKKworCW11dGV4X3VubG9jaygmaTJjLT5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisK K3N0YXRpYyB1MzIgaW5ub19oZG1pX2kyY19mdW5jKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRl cikKK3sKKwlyZXR1cm4gSTJDX0ZVTkNfSTJDIHwgSTJDX0ZVTkNfU01CVVNfRU1VTDsKK30KKwor c3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb3JpdGhtIGlubm9faGRtaV9hbGdvcml0aG0gPSB7 CisJLm1hc3Rlcl94ZmVyCT0gaW5ub19oZG1pX2kyY194ZmVyLAorCS5mdW5jdGlvbmFsaXR5CT0g aW5ub19oZG1pX2kyY19mdW5jLAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYWRhcHRlciAqaW5u b19oZG1pX2kyY19hZGFwdGVyKHN0cnVjdCBpbm5vX2hkbWkgKmhkbWkpCit7CisJc3RydWN0IGky Y19hZGFwdGVyICphZGFwOworCXN0cnVjdCBpbm5vX2hkbWlfaTJjICppMmM7CisJaW50IHJldDsK KworCWkyYyA9IGRldm1fa3phbGxvYyhoZG1pLT5kZXYsIHNpemVvZigqaTJjKSwgR0ZQX0tFUk5F TCk7CisJaWYgKCFpMmMpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJbXV0ZXhfaW5p dCgmaTJjLT5sb2NrKTsKKwlpbml0X2NvbXBsZXRpb24oJmkyYy0+Y21wKTsKKworCWFkYXAgPSAm aTJjLT5hZGFwOworCWFkYXAtPmNsYXNzID0gSTJDX0NMQVNTX0REQzsKKwlhZGFwLT5vd25lciA9 IFRISVNfTU9EVUxFOworCWFkYXAtPmRldi5wYXJlbnQgPSBoZG1pLT5kZXY7CisJYWRhcC0+ZGV2 Lm9mX25vZGUgPSBoZG1pLT5kZXYtPm9mX25vZGU7CisJYWRhcC0+YWxnbyA9ICZpbm5vX2hkbWlf YWxnb3JpdGhtOworCXN0cmxjcHkoYWRhcC0+bmFtZSwgIklubm8gSERNSSIsIHNpemVvZihhZGFw LT5uYW1lKSk7CisJaTJjX3NldF9hZGFwZGF0YShhZGFwLCBoZG1pKTsKKworCXJldCA9IGkyY19h ZGRfYWRhcHRlcihhZGFwKTsKKwlpZiAocmV0KSB7CisJCWRldl93YXJuKGhkbWktPmRldiwgImNh bm5vdCBhZGQgJXMgSTJDIGFkYXB0ZXJcbiIsIGFkYXAtPm5hbWUpOworCQlkZXZtX2tmcmVlKGhk bWktPmRldiwgaTJjKTsKKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKwl9CisKKwloZG1pLT5pMmMg PSBpMmM7CisKKwlkZXZfaW5mbyhoZG1pLT5kZXYsICJyZWdpc3RlcmVkICVzIEkyQyBidXMgZHJp dmVyXG4iLCBhZGFwLT5uYW1lKTsKKworCXJldHVybiBhZGFwOworfQorCitzdGF0aWMgaW50IGlu bm9faGRtaV9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAor CQkJCSB2b2lkICpkYXRhKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19w bGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gZGF0YTsKKwlz dHJ1Y3QgaW5ub19oZG1pICpoZG1pOworCXN0cnVjdCByZXNvdXJjZSAqaW9yZXM7CisJaW50IGly cTsKKwlpbnQgcmV0OworCisJaGRtaSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqaGRtaSks IEdGUF9LRVJORUwpOworCWlmICghaGRtaSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwloZG1pLT5k ZXYgPSBkZXY7CisJaGRtaS0+ZHJtX2RldiA9IGRybTsKKworCWlvcmVzID0gcGxhdGZvcm1fZ2V0 X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIWlvcmVzKQorCQlyZXR1 cm4gLUVOWElPOworCisJaGRtaS0+cmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIGlv cmVzKTsKKwlpZiAoSVNfRVJSKGhkbWktPnJlZ3MpKQorCQlyZXR1cm4gUFRSX0VSUihoZG1pLT5y ZWdzKTsKKworCWhkbWktPnBjbGsgPSBkZXZtX2Nsa19nZXQoaGRtaS0+ZGV2LCAicGNsayIpOwor CWlmIChJU19FUlIoaGRtaS0+cGNsaykpIHsKKwkJZGV2X2VycihoZG1pLT5kZXYsICJVbmFibGUg dG8gZ2V0IEhETUkgcGNsayBjbGtcbiIpOworCQlyZXR1cm4gUFRSX0VSUihoZG1pLT5wY2xrKTsK Kwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoaGRtaS0+cGNsayk7CisJaWYgKHJldCkg eworCQlkZXZfZXJyKGhkbWktPmRldiwgIkNhbm5vdCBlbmFibGUgSERNSSBwY2xrIGNsb2NrOiAl ZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJx KHBkZXYsIDApOworCWlmIChpcnEgPCAwKQorCQlyZXR1cm4gaXJxOworCisJaW5ub19oZG1pX3Jl c2V0KGhkbWkpOworCisJaGRtaS0+ZGRjID0gaW5ub19oZG1pX2kyY19hZGFwdGVyKGhkbWkpOwor CWlmIChJU19FUlIoaGRtaS0+ZGRjKSkgeworCQloZG1pLT5kZGMgPSBOVUxMOworCQlyZXR1cm4g UFRSX0VSUihoZG1pLT5kZGMpOworCX0KKworCS8qCisJICogV2hlbiBJUCBjb250cm9sbGVyIGhh dmVuJ3QgY29uZmlndXJlZCB0byBhbiBhY2N1cmF0ZSB2aWRlbworCSAqIHRpbWluZywgdGhlbiB0 aGUgVE1EUyBjbG9jayBzb3VyY2Ugd291bGQgYmUgc3dpdGNoZWQgdG8KKwkgKiBQQ0xLX0hETUks IHNvIHdlIG5lZWQgdG8gaW5pdCB0aGUgVE1EUyByYXRlIHRvIFBDTEsgcmF0ZSwKKwkgKiBhbmQg cmVjb25maWd1cmUgdGhlIEREQyBjbG9jay4KKwkgKi8KKwloZG1pLT50bWRzX3JhdGUgPSBjbGtf Z2V0X3JhdGUoaGRtaS0+cGNsayk7CisJaW5ub19oZG1pX2kyY19pbml0KGhkbWkpOworCisJcmV0 ID0gaW5ub19oZG1pX3JlZ2lzdGVyKGRybSwgaGRtaSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJl dDsKKworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGhkbWkpOworCisJLyogVW5tdXRlIGhvdHBsdWcg aW50ZXJydXB0ICovCisJaGRtaV9tb2RiKGhkbWksIEhETUlfU1RBVFVTLCBtX01BU0tfSU5UX0hP VFBMVUcsIHZfTUFTS19JTlRfSE9UUExVRygxKSk7CisKKwlyZXQgPSBkZXZtX3JlcXVlc3RfdGhy ZWFkZWRfaXJxKGRldiwgaXJxLCBpbm5vX2hkbWlfaGFyZGlycSwKKwkJCQkJaW5ub19oZG1pX2ly cSwgSVJRRl9TSEFSRUQsCisJCQkJCWRldl9uYW1lKGRldiksIGhkbWkpOworCisJcmV0dXJuIHJl dDsKK30KKworc3RhdGljIHZvaWQgaW5ub19oZG1pX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYs IHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKKwkJCSAgICAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qg aW5ub19oZG1pICpoZG1pID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwloZG1pLT5jb25uZWN0 b3IuZnVuY3MtPmRlc3Ryb3koJmhkbWktPmNvbm5lY3Rvcik7CisJaGRtaS0+ZW5jb2Rlci5mdW5j cy0+ZGVzdHJveSgmaGRtaS0+ZW5jb2Rlcik7CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaGRt aS0+cGNsayk7CisJaTJjX3B1dF9hZGFwdGVyKGhkbWktPmRkYyk7Cit9CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgY29tcG9uZW50X29wcyBpbm5vX2hkbWlfb3BzID0geworCS5iaW5kCT0gaW5ub19o ZG1pX2JpbmQsCisJLnVuYmluZAk9IGlubm9faGRtaV91bmJpbmQsCit9OworCitzdGF0aWMgaW50 IGlubm9faGRtaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVy biBjb21wb25lbnRfYWRkKCZwZGV2LT5kZXYsICZpbm5vX2hkbWlfb3BzKTsKK30KKworc3RhdGlj IGludCBpbm5vX2hkbWlfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJ Y29tcG9uZW50X2RlbCgmcGRldi0+ZGV2LCAmaW5ub19oZG1pX29wcyk7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgaW5ub19oZG1pX2R0X2lkc1td ID0geworCXsgLmNvbXBhdGlibGUgPSAicm9ja2NoaXAscmszMDM2LWlubm8taGRtaSIsCisJfSwK Kwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBpbm5vX2hkbWlfZHRfaWRzKTsKKwor c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaW5ub19oZG1pX2RyaXZlciA9IHsKKwkucHJv YmUgID0gaW5ub19oZG1pX3Byb2JlLAorCS5yZW1vdmUgPSBpbm5vX2hkbWlfcmVtb3ZlLAorCS5k cml2ZXIgPSB7CisJCS5uYW1lID0gImlubm9oZG1pLXJvY2tjaGlwIiwKKwkJLm9mX21hdGNoX3Rh YmxlID0gaW5ub19oZG1pX2R0X2lkcywKKwl9LAorfTsKKworbW9kdWxlX3BsYXRmb3JtX2RyaXZl cihpbm5vX2hkbWlfZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiWmhlbmcgWWFuZyA8emhlbmd5 YW5nQHJvY2stY2hpcHMuY29tPiIpOworTU9EVUxFX0FVVEhPUigiWWFraXIgWWFuZyA8eWtrQHJv Y2stY2hpcHMuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJSb2NrY2hpcCBTcGVjaWZpYyBJ Tk5PLUhETUkgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMo InBsYXRmb3JtOmlubm9oZG1pLXJvY2tjaGlwIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vcm9ja2NoaXAvaW5ub19oZG1pLmggYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvaW5ub19o ZG1pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE3YzQxNQotLS0gL2Rl di9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9pbm5vX2hkbWkuaApAQCAtMCww ICsxLDM2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgRnV6aG91IFJvY2tjaGlwIEVsZWN0cm9u aWNzIENvLkx0ZAorICogICAgWmhlbmcgWWFuZyA8emhlbmd5YW5nQHJvY2stY2hpcHMuY29tPgor ICogICAgWWFraXIgWWFuZyA8eWtrQHJvY2stY2hpcHMuY29tPgorICoKKyAqIFRoaXMgc29mdHdh cmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMK KyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlm aWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK KyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKwor I2lmbmRlZiBfX0lOTk9fSERNSV9IX18KKyNkZWZpbmUgX19JTk5PX0hETUlfSF9fCisKKyNkZWZp bmUgRERDX1NFR01FTlRfQUREUgkJMHgzMAorCitlbnVtIFBXUl9NT0RFIHsKKwlOT1JNQUwsCisJ TE9XRVJfUFdSLAorfTsKKworI2RlZmluZSBIRE1JX1NDTF9SQVRFCQkJKDEwMCoxMDAwKQorI2Rl ZmluZSBERENfQlVTX0ZSRVFfTAkJCTB4NGIKKyNkZWZpbmUgRERDX0JVU19GUkVRX0gJCQkweDRj CisKKyNkZWZpbmUgSERNSV9TWVNfQ1RSTAkJCTB4MDAKKyNkZWZpbmUgbV9SU1RfQU5BTE9HCQkJ KDEgPDwgNikKKyNkZWZpbmUgdl9SU1RfQU5BTE9HCQkJKDAgPDwgNikKKyNkZWZpbmUgdl9OT1Rf UlNUX0FOQUxPRwkJKDEgPDwgNikKKyNkZWZpbmUgbV9SU1RfRElHSVRBTAkJCSgxIDw8IDUpCisj ZGVmaW5lIHZfUlNUX0RJR0lUQUwJCQkoMCA8PCA1KQorI2RlZmluZSB2X05PVF9SU1RfRElHSVRB TAkJKDEgPDwgNSkKKyNkZWZpbmUgbV9SRUdfQ0xLX0lOVgkJCSgxIDw8IDQpCisjZGVmaW5lIHZf UkVHX0NMS19OT1RfSU5WCQkoMCA8PCA0KQorI2RlZmluZSB2X1JFR19DTEtfSU5WCQkJKDEgPDwg NCkKKyNkZWZpbmUgbV9WQ0xLX0lOVgkJCSgxIDw8IDMpCisjZGVmaW5lIHZfVkNMS19OT1RfSU5W CQkJKDAgPDwgMykKKyNkZWZpbmUgdl9WQ0xLX0lOVgkJCSgxIDw8IDMpCisjZGVmaW5lIG1fUkVH X0NMS19TT1VSQ0UJCSgxIDw8IDIpCisjZGVmaW5lIHZfUkVHX0NMS19TT1VSQ0VfVE1EUwkJKDAg PDwgMikKKyNkZWZpbmUgdl9SRUdfQ0xLX1NPVVJDRV9TWVMJCSgxIDw8IDIpCisjZGVmaW5lIG1f UE9XRVIJCQkJKDEgPDwgMSkKKyNkZWZpbmUgdl9QV1JfT04JCQkoMCA8PCAxKQorI2RlZmluZSB2 X1BXUl9PRkYJCQkoMSA8PCAxKQorI2RlZmluZSBtX0lOVF9QT0wJCQkoMSA8PCAwKQorI2RlZmlu ZSB2X0lOVF9QT0xfSElHSAkJCTEKKyNkZWZpbmUgdl9JTlRfUE9MX0xPVwkJCTAKKworI2RlZmlu ZSBIRE1JX1ZJREVPX0NPTlRSTDEJCTB4MDEKKyNkZWZpbmUgbV9WSURFT19JTlBVVF9GT1JNQVQJ CSg3IDw8IDEpCisjZGVmaW5lIG1fREVfU09VUkNFCQkJKDEgPDwgMCkKKyNkZWZpbmUgdl9WSURF T19JTlBVVF9GT1JNQVQobikJCShuIDw8IDEpCisjZGVmaW5lIHZfREVfRVhURVJOQUwJCQkxCisj ZGVmaW5lIHZfREVfSU5URVJOQUwJCQkwCitlbnVtIHsKKwlWSURFT19JTlBVVF9TRFJfUkdCNDQ0 ID0gMCwKKwlWSURFT19JTlBVVF9ERFJfUkdCNDQ0ID0gNSwKKwlWSURFT19JTlBVVF9ERFJfWUNC Q1I0MjIgPSA2Cit9OworCisjZGVmaW5lIEhETUlfVklERU9fQ09OVFJMMgkJMHgwMgorI2RlZmlu ZSBtX1ZJREVPX09VVFBVVF9DT0xPUgkJKDMgPDwgNikKKyNkZWZpbmUgbV9WSURFT19JTlBVVF9C SVRTCQkoMyA8PCA0KQorI2RlZmluZSBtX1ZJREVPX0lOUFVUX0NTUAkJKDEgPDwgMCkKKyNkZWZp bmUgdl9WSURFT19PVVRQVVRfQ09MT1IobikJCSgoKG4pICYgMHgzKSA8PCA2KQorI2RlZmluZSB2 X1ZJREVPX0lOUFVUX0JJVFMobikJCShuIDw8IDQpCisjZGVmaW5lIHZfVklERU9fSU5QVVRfQ1NQ KG4pCQkobiA8PCAwKQorZW51bSB7CisJVklERU9fSU5QVVRfMTJCSVRTID0gMCwKKwlWSURFT19J TlBVVF8xMEJJVFMgPSAxLAorCVZJREVPX0lOUFVUX1JFVkVSVCA9IDIsCisJVklERU9fSU5QVVRf OEJJVFMgPSAzLAorfTsKKworI2RlZmluZSBIRE1JX1ZJREVPX0NPTlRSTAkJMHgwMworI2RlZmlu ZSBtX1ZJREVPX0FVVE9fQ1NDCQkoMSA8PCA3KQorI2RlZmluZSB2X1ZJREVPX0FVVE9fQ1NDKG4p CQkobiA8PCA3KQorI2RlZmluZSBtX1ZJREVPX0MwX0MyX1NXQVAJCSgxIDw8IDApCisjZGVmaW5l IHZfVklERU9fQzBfQzJfU1dBUChuKQkJKG4gPDwgMCkKK2VudW0geworCUMwX0MyX0NIQU5HRV9F TkFCTEUgPSAwLAorCUMwX0MyX0NIQU5HRV9ESVNBQkxFID0gMSwKKwlBVVRPX0NTQ19ESVNBQkxF ID0gMCwKKwlBVVRPX0NTQ19FTkFCTEUgPSAxLAorfTsKKworI2RlZmluZSBIRE1JX1ZJREVPX0NP TlRSTDMJCTB4MDQKKyNkZWZpbmUgbV9DT0xPUl9ERVBUSF9OT1RfSU5ESUNBVEVECSgxIDw8IDQp CisjZGVmaW5lIG1fU09GCQkJCSgxIDw8IDMpCisjZGVmaW5lIG1fQ09MT1JfUkFOR0UJCQkoMSA8 PCAyKQorI2RlZmluZSBtX0NTQwkJCQkoMSA8PCAwKQorI2RlZmluZSB2X0NPTE9SX0RFUFRIX05P VF9JTkRJQ0FURUQobikJKChuKSA8PCA0KQorI2RlZmluZSB2X1NPRl9FTkFCTEUJCQkoMCA8PCAz KQorI2RlZmluZSB2X1NPRl9ESVNBQkxFCQkJKDEgPDwgMykKKyNkZWZpbmUgdl9DT0xPUl9SQU5H RV9GVUxMCQkoMSA8PCAyKQorI2RlZmluZSB2X0NPTE9SX1JBTkdFX0xJTUlURUQJCSgwIDw8IDIp CisjZGVmaW5lIHZfQ1NDX0VOQUJMRQkJCTEKKyNkZWZpbmUgdl9DU0NfRElTQUJMRQkJCTAKKwor I2RlZmluZSBIRE1JX0FWX01VVEUJCQkweDA1CisjZGVmaW5lIG1fQVZNVVRFX0NMRUFSCQkJKDEg PDwgNykKKyNkZWZpbmUgbV9BVk1VVEVfRU5BQkxFCQkJKDEgPDwgNikKKyNkZWZpbmUgbV9BVURJ T19NVVRFCQkJKDEgPDwgMSkKKyNkZWZpbmUgbV9WSURFT19CTEFDSwkJCSgxIDw8IDApCisjZGVm aW5lIHZfQVZNVVRFX0NMRUFSKG4pCQkobiA8PCA3KQorI2RlZmluZSB2X0FWTVVURV9FTkFCTEUo bikJCShuIDw8IDYpCisjZGVmaW5lIHZfQVVESU9fTVVURShuKQkJCShuIDw8IDEpCisjZGVmaW5l IHZfVklERU9fTVVURShuKQkJCShuIDw8IDApCisKKyNkZWZpbmUgSERNSV9WSURFT19USU1JTkdf Q1RMCQkweDA4CisjZGVmaW5lIHZfSFNZTkNfUE9MQVJJVFkobikJCShuIDw8IDMpCisjZGVmaW5l IHZfVlNZTkNfUE9MQVJJVFkobikJCShuIDw8IDIpCisjZGVmaW5lIHZfSU5FVExBQ0UobikJCQko biA8PCAxKQorI2RlZmluZSB2X0VYVEVSQU5MX1ZJREVPKG4pCQkobiA8PCAwKQorCisjZGVmaW5l IEhETUlfVklERU9fRVhUX0hUT1RBTF9MCQkweDA5CisjZGVmaW5lIEhETUlfVklERU9fRVhUX0hU T1RBTF9ICQkweDBhCisjZGVmaW5lIEhETUlfVklERU9fRVhUX0hCTEFOS19MCQkweDBiCisjZGVm aW5lIEhETUlfVklERU9fRVhUX0hCTEFOS19ICQkweDBjCisjZGVmaW5lIEhETUlfVklERU9fRVhU X0hERUxBWV9MCQkweDBkCisjZGVmaW5lIEhETUlfVklERU9fRVhUX0hERUxBWV9ICQkweDBlCisj ZGVmaW5lIEhETUlfVklERU9fRVhUX0hEVVJBVElPTl9MCTB4MGYKKyNkZWZpbmUgSERNSV9WSURF T19FWFRfSERVUkFUSU9OX0gJMHgxMAorI2RlZmluZSBIRE1JX1ZJREVPX0VYVF9WVE9UQUxfTAkJ MHgxMQorI2RlZmluZSBIRE1JX1ZJREVPX0VYVF9WVE9UQUxfSAkJMHgxMgorI2RlZmluZSBIRE1J X1ZJREVPX0VYVF9WQkxBTksJCTB4MTMKKyNkZWZpbmUgSERNSV9WSURFT19FWFRfVkRFTEFZCQkw eDE0CisjZGVmaW5lIEhETUlfVklERU9fRVhUX1ZEVVJBVElPTgkweDE1CisKKyNkZWZpbmUgSERN SV9WSURFT19DU0NfQ09FRgkJMHgxOAorCisjZGVmaW5lIEhETUlfQVVESU9fQ1RSTDEJCTB4MzUK K2VudW0geworCUNUU19TT1VSQ0VfSU5URVJOQUwgPSAwLAorCUNUU19TT1VSQ0VfRVhURVJOQUwg PSAxLAorfTsKKyNkZWZpbmUgdl9DVFNfU09VUkNFKG4pCQkJKG4gPDwgNykKKworZW51bSB7CisJ RE9XTlNBTVBMRV9ESVNBQkxFID0gMCwKKwlET1dOU0FNUExFXzFfMiA9IDEsCisJRE9XTlNBTVBM RV8xXzQgPSAyLAorfTsKKyNkZWZpbmUgdl9ET1dOX1NBTVBMRShuKQkJKG4gPDwgNSkKKworZW51 bSB7CisJQVVESU9fU09VUkNFX0lJUyA9IDAsCisJQVVESU9fU09VUkNFX1NQRElGID0gMSwKK307 CisjZGVmaW5lIHZfQVVESU9fU09VUkNFKG4pCQkobiA8PCAzKQorCisjZGVmaW5lIHZfTUNMS19F TkFCTEUobikJCShuIDw8IDIpCitlbnVtIHsKKwlNQ0xLXzEyOEZTID0gMCwKKwlNQ0xLXzI1NkZT ID0gMSwKKwlNQ0xLXzM4NEZTID0gMiwKKwlNQ0xLXzUxMkZTID0gMywKK307CisjZGVmaW5lIHZf TUNMS19SQVRJTyhuKQkJCShuKQorCisjZGVmaW5lIEFVRElPX1NBTVBMRV9SQVRFCQkweDM3Citl bnVtIHsKKwlBVURJT18zMksgPSAweDMsCisJQVVESU9fNDQxSyA9IDB4MCwKKwlBVURJT180OEsg PSAweDIsCisJQVVESU9fODgySyA9IDB4OCwKKwlBVURJT185NksgPSAweGEsCisJQVVESU9fMTc2 NEsgPSAweGMsCisJQVVESU9fMTkySyA9IDB4ZSwKK307CisKKyNkZWZpbmUgQVVESU9fSTJTX01P REUJCQkweDM4CitlbnVtIHsKKwlJMlNfQ0hBTk5FTF8xXzIgPSAxLAorCUkyU19DSEFOTkVMXzNf NCA9IDMsCisJSTJTX0NIQU5ORUxfNV82ID0gNywKKwlJMlNfQ0hBTk5FTF83XzggPSAweGYKK307 CisjZGVmaW5lIHZfSTJTX0NIQU5ORUwobikJCSgobikgPDwgMikKK2VudW0geworCUkyU19TVEFO REFSRCA9IDAsCisJSTJTX0xFRlRfSlVTVElGSUVEID0gMSwKKwlJMlNfUklHSFRfSlVTVElGSUVE ID0gMiwKK307CisjZGVmaW5lIHZfSTJTX01PREUobikJCQkobikKKworI2RlZmluZSBBVURJT19J MlNfTUFQCQkJMHgzOQorI2RlZmluZSBBVURJT19JMlNfU1dBUFNfU1BESUYJCTB4M2EKKyNkZWZp bmUgdl9TUElERl9GUkVRKG4pCQkJKG4pCisKKyNkZWZpbmUgTl8zMksJCQkJMHgxMDAwCisjZGVm aW5lIE5fNDQxSwkJCQkweDE4ODAKKyNkZWZpbmUgTl84ODJLCQkJCTB4MzEwMAorI2RlZmluZSBO XzE3NjRLCQkJCTB4NjIwMAorI2RlZmluZSBOXzQ4SwkJCQkweDE4MDAKKyNkZWZpbmUgTl85NksJ CQkJMHgzMDAwCisjZGVmaW5lIE5fMTkySwkJCQkweDYwMDAKKworI2RlZmluZSBIRE1JX0FVRElP X0NIQU5ORUxfU1RBVFVTCTB4M2UKKyNkZWZpbmUgbV9BVURJT19TVEFUVVNfTkxQQ00JCSgxIDw8 IDcpCisjZGVmaW5lIG1fQVVESU9fU1RBVFVTX1VTRQkJKDEgPDwgNikKKyNkZWZpbmUgbV9BVURJ T19TVEFUVVNfQ09QWVJJR0hUCSgxIDw8IDUpCisjZGVmaW5lIG1fQVVESU9fU1RBVFVTX0FERElU SU9OCQkoMyA8PCAyKQorI2RlZmluZSBtX0FVRElPX1NUQVRVU19DTEtfQUNDVVJBQ1kJKDIgPDwg MCkKKyNkZWZpbmUgdl9BVURJT19TVEFUVVNfTkxQQ00obikJCSgobiAmIDEpIDw8IDcpCisjZGVm aW5lIEFVRElPX05fSAkJCTB4M2YKKyNkZWZpbmUgQVVESU9fTl9NCQkJMHg0MAorI2RlZmluZSBB VURJT19OX0wJCQkweDQxCisKKyNkZWZpbmUgSERNSV9BVURJT19DVFNfSAkJMHg0NQorI2RlZmlu ZSBIRE1JX0FVRElPX0NUU19NCQkweDQ2CisjZGVmaW5lIEhETUlfQVVESU9fQ1RTX0wJCTB4NDcK KworI2RlZmluZSBIRE1JX0REQ19DTEtfTAkJCTB4NGIKKyNkZWZpbmUgSERNSV9ERENfQ0xLX0gJ CQkweDRjCisKKyNkZWZpbmUgSERNSV9FRElEX1NFR01FTlRfUE9JTlRFUgkweDRkCisjZGVmaW5l IEhETUlfRURJRF9XT1JEX0FERFIJCTB4NGUKKyNkZWZpbmUgSERNSV9FRElEX0ZJRk9fT0ZGU0VU CQkweDRmCisjZGVmaW5lIEhETUlfRURJRF9GSUZPX0FERFIJCTB4NTAKKworI2RlZmluZSBIRE1J X1BBQ0tFVF9TRU5EX01BTlVBTAkJMHg5YworI2RlZmluZSBIRE1JX1BBQ0tFVF9TRU5EX0FVVE8J CTB4OWQKKyNkZWZpbmUgbV9QQUNLRVRfR0NQX0VOCQkJKDEgPDwgNykKKyNkZWZpbmUgbV9QQUNL RVRfTVNJX0VOCQkJKDEgPDwgNikKKyNkZWZpbmUgbV9QQUNLRVRfU0RJX0VOCQkJKDEgPDwgNSkK KyNkZWZpbmUgbV9QQUNLRVRfVlNJX0VOCQkJKDEgPDwgNCkKKyNkZWZpbmUgdl9QQUNLRVRfR0NQ X0VOKG4pCQkoKG4gJiAxKSA8PCA3KQorI2RlZmluZSB2X1BBQ0tFVF9NU0lfRU4obikJCSgobiAm IDEpIDw8IDYpCisjZGVmaW5lIHZfUEFDS0VUX1NESV9FTihuKQkJKChuICYgMSkgPDwgNSkKKyNk ZWZpbmUgdl9QQUNLRVRfVlNJX0VOKG4pCQkoKG4gJiAxKSA8PCA0KQorCisjZGVmaW5lIEhETUlf Q09OVFJPTF9QQUNLRVRfQlVGX0lOREVYCTB4OWYKK2VudW0geworCUlORk9GUkFNRV9WU0kgPSAw eDA1LAorCUlORk9GUkFNRV9BVkkgPSAweDA2LAorCUlORk9GUkFNRV9BQUkgPSAweDA4LAorfTsK KworI2RlZmluZSBIRE1JX0NPTlRST0xfUEFDS0VUX0FERFIJMHhhMAorI2RlZmluZSBIRE1JX01B WElNVU1fSU5GT19GUkFNRV9TSVpFCTB4MTEKK2VudW0geworCUFWSV9DT0xPUl9NT0RFX1JHQiA9 IDAsCisJQVZJX0NPTE9SX01PREVfWUNCQ1I0MjIgPSAxLAorCUFWSV9DT0xPUl9NT0RFX1lDQkNS NDQ0ID0gMiwKKwlBVklfQ09MT1JJTUVUUllfTk9fREFUQSA9IDAsCisKKwlBVklfQ09MT1JJTUVU UllfU01QVEVfMTcwTSA9IDEsCisJQVZJX0NPTE9SSU1FVFJZX0lUVTcwOSA9IDIsCisJQVZJX0NP TE9SSU1FVFJZX0VYVEVOREVEID0gMywKKworCUFWSV9DT0RFRF9GUkFNRV9BU1BFQ1RfTk9fREFU QSA9IDAsCisJQVZJX0NPREVEX0ZSQU1FX0FTUEVDVF80XzMgPSAxLAorCUFWSV9DT0RFRF9GUkFN RV9BU1BFQ1RfMTZfOSA9IDIsCisKKwlBQ1RJVkVfQVNQRUNUX1JBVEVfU0FNRV9BU19DT0RFRF9G UkFNRSA9IDB4MDgsCisJQUNUSVZFX0FTUEVDVF9SQVRFXzRfMyA9IDB4MDksCisJQUNUSVZFX0FT UEVDVF9SQVRFXzE2XzkgPSAweDBBLAorCUFDVElWRV9BU1BFQ1RfUkFURV8xNF85ID0gMHgwQiwK K307CisKKyNkZWZpbmUgSERNSV9IRENQX0NUUkwJCQkweDUyCisjZGVmaW5lIG1fSERNSV9EVkkJ CQkoMSA8PCAxKQorI2RlZmluZSB2X0hETUlfRFZJKG4pCQkJKG4gPDwgMSkKKworI2RlZmluZSBI RE1JX0lOVEVSUlVQVF9NQVNLMQkJMHhjMAorI2RlZmluZSBIRE1JX0lOVEVSUlVQVF9TVEFUVVMx CQkweGMxCisjZGVmaW5lCW1fSU5UX0FDVElWRV9WU1lOQwkJKDEgPDwgNSkKKyNkZWZpbmUgbV9J TlRfRURJRF9SRUFEWQkJKDEgPDwgMikKKworI2RlZmluZSBIRE1JX0lOVEVSUlVQVF9NQVNLMgkJ MHhjMgorI2RlZmluZSBIRE1JX0lOVEVSUlVQVF9TVEFUVVMyCQkweGMzCisjZGVmaW5lIG1fSU5U X0hEQ1BfRVJSCQkJKDEgPDwgNykKKyNkZWZpbmUgbV9JTlRfQktTVl9GTEFHCQkJKDEgPDwgNikK KyNkZWZpbmUgbV9JTlRfSERDUF9PSwkJCSgxIDw8IDQpCisKKyNkZWZpbmUgSERNSV9TVEFUVVMJ CQkweGM4CisjZGVmaW5lIG1fSE9UUExVRwkJCSgxIDw8IDcpCisjZGVmaW5lIG1fTUFTS19JTlRf SE9UUExVRwkJKDEgPDwgNSkKKyNkZWZpbmUgbV9JTlRfSE9UUExVRwkJCSgxIDw8IDEpCisjZGVm aW5lIHZfTUFTS19JTlRfSE9UUExVRyhuKQkJKChuICYgMHgxKSA8PCA1KQorCisjZGVmaW5lIEhE TUlfQ09MT1JCQVIgICAgICAgICAgICAgICAgICAgMHhjOQorCisjZGVmaW5lIEhETUlfUEhZX1NZ TkMJCQkweGNlCisjZGVmaW5lIEhETUlfUEhZX1NZU19DVEwJCTB4ZTAKKyNkZWZpbmUgbV9UTURT X0NMS19TT1VSQ0UJCSgxIDw8IDUpCisjZGVmaW5lIHZfVE1EU19GUk9NX1BMTAkJCSgwIDw8IDUp CisjZGVmaW5lIHZfVE1EU19GUk9NX0dFTgkJCSgxIDw8IDUpCisjZGVmaW5lIG1fUEhBU0VfQ0xL CQkJKDEgPDwgNCkKKyNkZWZpbmUgdl9ERUZBVUxUX1BIQVNFCQkJKDAgPDwgNCkKKyNkZWZpbmUg dl9TWU5DX1BIQVNFCQkJKDEgPDwgNCkKKyNkZWZpbmUgbV9UTURTX0NVUlJFTlRfUFdSCQkoMSA8 PCAzKQorI2RlZmluZSB2X1RVUk5fT05fQ1VSUkVOVAkJKDAgPDwgMykKKyNkZWZpbmUgdl9DQVRf T0ZGX0NVUlJFTlQJCSgxIDw8IDMpCisjZGVmaW5lIG1fQkFOREdBUF9QV1IJCQkoMSA8PCAyKQor I2RlZmluZSB2X0JBTkRHQVBfUFdSX1VQCQkoMCA8PCAyKQorI2RlZmluZSB2X0JBTkRHQVBfUFdS X0RPV04JCSgxIDw8IDIpCisjZGVmaW5lIG1fUExMX1BXUgkJCSgxIDw8IDEpCisjZGVmaW5lIHZf UExMX1BXUl9VUAkJCSgwIDw8IDEpCisjZGVmaW5lIHZfUExMX1BXUl9ET1dOCQkJKDEgPDwgMSkK KyNkZWZpbmUgbV9UTURTX0NIR19QV1IJCQkoMSA8PCAwKQorI2RlZmluZSB2X1RNRFNfQ0hHX1BX Ul9VUAkJKDAgPDwgMCkKKyNkZWZpbmUgdl9UTURTX0NIR19QV1JfRE9XTgkJKDEgPDwgMCkKKwor I2RlZmluZSBIRE1JX1BIWV9DSEdfUFdSCQkweGUxCisjZGVmaW5lIHZfQ0xLX0NIR19QV1IobikJ CSgobiAmIDEpIDw8IDMpCisjZGVmaW5lIHZfREFUQV9DSEdfUFdSKG4pCQkoKG4gJiA3KSA8PCAw KQorCisjZGVmaW5lIEhETUlfUEhZX0RSSVZFUgkJCTB4ZTIKKyNkZWZpbmUgdl9DTEtfTUFJTl9E UklWRVIobikJCShuIDw8IDQpCisjZGVmaW5lIHZfREFUQV9NQUlOX0RSSVZFUihuKQkJKG4gPDwg MCkKKworI2RlZmluZSBIRE1JX1BIWV9QUkVfRU1QSEFTSVMJCTB4ZTMKKyNkZWZpbmUgdl9QUkVf RU1QSEFTSVMobikJCSgobiAmIDcpIDw8IDQpCisjZGVmaW5lIHZfQ0xLX1BSRV9EUklWRVIobikJ CSgobiAmIDMpIDw8IDIpCisjZGVmaW5lIHZfREFUQV9QUkVfRFJJVkVSKG4pCQkoKG4gJiAzKSA8 PCAwKQorCisjZGVmaW5lIEhETUlfUEhZX0ZFRURCQUNLX0RJVl9SQVRJT19MT1cJCTB4ZTcKKyNk ZWZpbmUgdl9GRUVEQkFDS19ESVZfTE9XKG4pCQkJKG4gJiAweGZmKQorI2RlZmluZSBIRE1JX1BI WV9GRUVEQkFDS19ESVZfUkFUSU9fSElHSAkweGU4CisjZGVmaW5lIHZfRkVFREJBQ0tfRElWX0hJ R0gobikJCQkobiAmIDEpCisKKyNkZWZpbmUgSERNSV9QSFlfUFJFX0RJVl9SQVRJTwkJMHhlZAor I2RlZmluZSB2X1BSRV9ESVZfUkFUSU8obikJCShuICYgMHgxZikKKworI2RlZmluZSBIRE1JX0NF Q19DVFJMCQkJMHhkMAorI2RlZmluZSBtX0FESlVTVF9GT1JfSElTRU5TRQkJKDEgPDwgNikKKyNk ZWZpbmUgbV9SRUpFQ1RfUlhfQlJPQURDQVNUCQkoMSA8PCA1KQorI2RlZmluZSBtX0JVU0ZSRUVU SU1FX0VOQUJMRQkJKDEgPDwgMikKKyNkZWZpbmUgbV9SRUpFQ1RfUlgJCQkoMSA8PCAxKQorI2Rl ZmluZSBtX1NUQVJUX1RYCQkJKDEgPDwgMCkKKworI2RlZmluZSBIRE1JX0NFQ19EQVRBCQkJMHhk MQorI2RlZmluZSBIRE1JX0NFQ19UWF9PRkZTRVQJCTB4ZDIKKyNkZWZpbmUgSERNSV9DRUNfUlhf T0ZGU0VUCQkweGQzCisjZGVmaW5lIEhETUlfQ0VDX0NMS19ICQkJMHhkNAorI2RlZmluZSBIRE1J X0NFQ19DTEtfTAkJCTB4ZDUKKyNkZWZpbmUgSERNSV9DRUNfVFhfTEVOR1RICQkweGQ2CisjZGVm aW5lIEhETUlfQ0VDX1JYX0xFTkdUSAkJMHhkNworI2RlZmluZSBIRE1JX0NFQ19UWF9JTlRfTUFT SwkJMHhkOAorI2RlZmluZSBtX1RYX0RPTkUJCQkoMSA8PCAzKQorI2RlZmluZSBtX1RYX05PQUNL CQkJKDEgPDwgMikKKyNkZWZpbmUgbV9UWF9CUk9BRENBU1RfUkVKCQkoMSA8PCAxKQorI2RlZmlu ZSBtX1RYX0JVU05PVEZSRUUJCQkoMSA8PCAwKQorCisjZGVmaW5lIEhETUlfQ0VDX1JYX0lOVF9N QVNLCQkweGQ5CisjZGVmaW5lIG1fUlhfTEFfRVJSCQkJKDEgPDwgNCkKKyNkZWZpbmUgbV9SWF9H TElUQ0gJCQkoMSA8PCAzKQorI2RlZmluZSBtX1JYX0RPTkUJCQkoMSA8PCAwKQorCisjZGVmaW5l IEhETUlfQ0VDX1RYX0lOVAkJCTB4ZGEKKyNkZWZpbmUgSERNSV9DRUNfUlhfSU5UCQkJMHhkYgor I2RlZmluZSBIRE1JX0NFQ19CVVNGUkVFVElNRV9MCQkweGRjCisjZGVmaW5lIEhETUlfQ0VDX0JV U0ZSRUVUSU1FX0gJCTB4ZGQKKyNkZWZpbmUgSERNSV9DRUNfTE9HSUNBRERSCQkweGRlCisKKyNl bmRpZiAvKiBfX0lOTk9fSERNSV9IX18gKi8KLS0gCjEuOS4xCgoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmkt ZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK