From mboxrd@z Thu Jan 1 00:00:00 1970 From: Heiko Stuebner Subject: [PATCH v6 5/7] drm/rockchip: dsi: migrate to use dw-mipi-dsi bridge driver Date: Mon, 1 Oct 2018 14:38:43 +0200 Message-ID: <20181001123845.11818-6-heiko@sntech.de> References: <20181001123845.11818-1-heiko@sntech.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from gloria.sntech.de (gloria.sntech.de [185.11.138.130]) by gabe.freedesktop.org (Postfix) with ESMTPS id DAB9D6E141 for ; Mon, 1 Oct 2018 12:39:05 +0000 (UTC) In-Reply-To: <20181001123845.11818-1-heiko@sntech.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: architt@codeaurora.org, hjc@rock-chips.com, a.hajda@samsung.com Cc: briannorris@chromium.org, hoegsberg@gmail.com, philippe.cornu@st.com, dri-devel@lists.freedesktop.org, yannick.fertre@st.com, linux-rockchip@lists.infradead.org, nickey.yang@rock-chips.com, mka@chromium.org, seanpaul@chromium.org, linux-arm-kernel@lists.infradead.org List-Id: dri-devel@lists.freedesktop.org RnJvbTogTmlja2V5IFlhbmcgPG5pY2tleS55YW5nQHJvY2stY2hpcHMuY29tPgoKQWRkIHRoZSBS T0NLQ0hJUCBEU0kgY29udHJvbGxlciBkcml2ZXIgdGhhdCB1c2VzIHRoZSBTeW5vcHN5cyBEZXNp Z25XYXJlCk1JUEkgRFNJIGhvc3QgY29udHJvbGxlciBicmlkZ2UgYW5kIHJlbW92ZSB0aGUgb2xk IHNlcGFyYXRlIG9uZS4KCmNoYW5nZXM6Cgp2MjoKICAgYWRkIGVycl9wbGxyZWYsIHJlbW92ZSB1 bm5lY2Vzc2FyeSBlbmNvZGVyLmVuYWJsZSAmIGRpc2FibGUKICAgY29ycmVjdCBzcGVsbGluZyBt aXN0YWtlcwp2MzoKICAgY2FsbCBkd19taXBpX2RzaV91bmJpbmQoKSBpbiBkd19taXBpX2RzaV9y b2NrY2hpcF91bmJpbmQoKQogICBmaXggdHlwbywgdXNlIG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0 YSgpLAogICBjaGFuZ2Ugc29tZSBiaW5kKCkgbG9naWMgaW50byBwcm9iZSgpCiAgIGFkZCAnZGV2 X3NldF9kcnZkYXRhKCknCnY0OgogIHJldHVybiAtRUlOVkFMIHdoZW4gY2FuIG5vdCBnZXQgYmVz dF9mcmVxCiAgYWRkIGEgY2xhcmlmeWluZyBjb21tZW50IHdoZW4gZ2V0IHZjbwogIGFkZCByZXZp ZXcgdGFnCnY1OgogIGtlZXAgb3VyIHBvd2VyIGRvbWFpbiBlbmFibGVkIHdoaWxlIHRvdWNoaW5n IEdSRgp2NjoKICBjaGFuZ2UgZnVuYyBuYW1lIGR3X21pcGlfZW5jb2Rlcl9kaXNhYmxlIHRvCiAg ZHdfbWlwaV9kc2lfZW5jb2Rlcl9kaXNhYmxlCnY3OgogIG5vbmUKdjg6IEhlaWtvCiAgYWRkIEFy Y2hpdCdzIFJldmlldyB0YWcKICBhZGFwdCB0byByZWNlbnQgY2hhbmdlcyBpbiB0aGUgb3JpZ2lu YWwgcm9ja2NoaXAtZHNpIGRyaXZlcgogIGJlYXV0aWZ5IGdyZi1oYW5kbGluZwogIHNwbGl0IGh3 LXNldHVwIChyZXNvdXJjZXMsIGRzaS1ob3N0KSBmcm9tIGJpbmQgaW50byBwcm9iZQp2Mi1uZXc6 IEhlaWtvCiAgYWRkIFNQRFggaGVhZGVyIGluc3RlYWQgb2YgbGljZW5zZSBibHVyYgogIGRyb3Ag b2xkIHZlcnNpb25pbmcgdG8gbm90IGNvbmZ1c2UgcGVvcGxlCnYzLW5ldzogSGVpa28KICBpbmNs dWRlIG9yZGVyaW5nCiAgbW92ZWQgaHdhY2Nlc3MgZnJvbSBtb2RlX3NldCB0byBlbmFibGUgY2Fs bGJhY2sKICBtb3ZlIHBsbHJlZl9jbGsgZW5hYmxlbWVudCB0byBiaW5kIChuZWVkZWQgYnkgYnJp ZGdlIG1vZGVfc2V0LT5sYW5lX21icHMpCnY0LW5ldzogSGVpa28KICByZWJhc2UgYWdhaW5zdCBy ZWNlbnQgcm9ja2NoaXAtZHNpIGNoYW5nZXMKICBtb3ZlIHRvIGNhbGwgY29tcG9uZW50X2FkZCBp biB0aGUgbmV3IGdsdWUgaG9zdC1hdHRhY2gKClNpZ25lZC1vZmYtYnk6IE5pY2tleSBZYW5nIDxu aWNrZXkueWFuZ0Byb2NrLWNoaXBzLmNvbT4KU2lnbmVkLW9mZi1ieTogQnJpYW4gTm9ycmlzIDxi cmlhbm5vcnJpc0BjaHJvbWl1bS5vcmc+ClJldmlld2VkLWJ5OiBCcmlhbiBOb3JyaXMgPGJyaWFu bm9ycmlzQGNocm9taXVtLm9yZz4KUmV2aWV3ZWQtYnk6IFNlYW4gUGF1bCA8c2VhbnBhdWxAY2hy b21pdW0ub3JnPgpSZXZpZXdlZC1ieTogQXJjaGl0IFRhbmVqYSA8YXJjaGl0dEBjb2RlYXVyb3Jh Lm9yZz4KUmV2aWV3ZWQtYnk6IEFuZHJ6ZWogSGFqZGEgPGEuaGFqZGFAc2Ftc3VuZy5jb20+ClNp Z25lZC1vZmYtYnk6IEhlaWtvIFN0dWVibmVyIDxoZWlrb0BzbnRlY2guZGU+Ci0tLQogZHJpdmVy cy9ncHUvZHJtL3JvY2tjaGlwL0tjb25maWcgICAgICAgICAgICAgIHwgICAgMiArLQogZHJpdmVy cy9ncHUvZHJtL3JvY2tjaGlwL01ha2VmaWxlICAgICAgICAgICAgIHwgICAgMiArLQogLi4uL2dw dS9kcm0vcm9ja2NoaXAvZHctbWlwaS1kc2ktcm9ja2NoaXAuYyAgIHwgIDkzOSArKysrKysrKysr KysKIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9kdy1taXBpLWRzaS5jICAgICAgICB8IDEzNDkg LS0tLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1f ZHJ2LmMgICB8ICAgIDIgKy0KIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1f ZHJ2LmggICB8ICAgIDIgKy0KIDYgZmlsZXMgY2hhbmdlZCwgOTQzIGluc2VydGlvbnMoKyksIDEz NTMgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3JvY2tj aGlwL2R3LW1pcGktZHNpLXJvY2tjaGlwLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vcm9ja2NoaXAvZHctbWlwaS1kc2kuYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9yb2NrY2hpcC9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL0tjb25maWcKaW5k ZXggMjY0MzhkNDU3MzJiLi4xZTc1MTk2Zjk2NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9yb2NrY2hpcC9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9LY29uZmln CkBAIC03LDcgKzcsNyBAQCBjb25maWcgRFJNX1JPQ0tDSElQCiAJc2VsZWN0IFZJREVPTU9ERV9I RUxQRVJTCiAJc2VsZWN0IERSTV9BTkFMT0dJWF9EUCBpZiBST0NLQ0hJUF9BTkFMT0dJWF9EUAog CXNlbGVjdCBEUk1fRFdfSERNSSBpZiBST0NLQ0hJUF9EV19IRE1JCi0Jc2VsZWN0IERSTV9NSVBJ X0RTSSBpZiBST0NLQ0hJUF9EV19NSVBJX0RTSQorCXNlbGVjdCBEUk1fRFdfTUlQSV9EU0kgaWYg Uk9DS0NISVBfRFdfTUlQSV9EU0kKIAlzZWxlY3QgRFJNX1JHQiBpZiBST0NLQ0hJUF9SR0IKIAlz ZWxlY3QgU05EX1NPQ19IRE1JX0NPREVDIGlmIFJPQ0tDSElQX0NETl9EUCAmJiBTTkRfU09DCiAJ aGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL01ha2VmaWxlIGIvZHJp dmVycy9ncHUvZHJtL3JvY2tjaGlwL01ha2VmaWxlCmluZGV4IDg2ODI2M2ZmMDMwMi4uZjZmYzlk NWRkMGFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvTWFrZWZpbGUKKysr IGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL01ha2VmaWxlCkBAIC0xMSw3ICsxMSw3IEBAIHJv Y2tjaGlwZHJtLSQoQ09ORklHX0RSTV9GQkRFVl9FTVVMQVRJT04pICs9IHJvY2tjaGlwX2RybV9m YmRldi5vCiByb2NrY2hpcGRybS0kKENPTkZJR19ST0NLQ0hJUF9BTkFMT0dJWF9EUCkgKz0gYW5h bG9naXhfZHAtcm9ja2NoaXAubwogcm9ja2NoaXBkcm0tJChDT05GSUdfUk9DS0NISVBfQ0ROX0RQ KSArPSBjZG4tZHAtY29yZS5vIGNkbi1kcC1yZWcubwogcm9ja2NoaXBkcm0tJChDT05GSUdfUk9D S0NISVBfRFdfSERNSSkgKz0gZHdfaGRtaS1yb2NrY2hpcC5vCi1yb2NrY2hpcGRybS0kKENPTkZJ R19ST0NLQ0hJUF9EV19NSVBJX0RTSSkgKz0gZHctbWlwaS1kc2kubworcm9ja2NoaXBkcm0tJChD T05GSUdfUk9DS0NISVBfRFdfTUlQSV9EU0kpICs9IGR3LW1pcGktZHNpLXJvY2tjaGlwLm8KIHJv Y2tjaGlwZHJtLSQoQ09ORklHX1JPQ0tDSElQX0lOTk9fSERNSSkgKz0gaW5ub19oZG1pLm8KIHJv Y2tjaGlwZHJtLSQoQ09ORklHX1JPQ0tDSElQX0xWRFMpICs9IHJvY2tjaGlwX2x2ZHMubwogcm9j a2NoaXBkcm0tJChDT05GSUdfUk9DS0NISVBfUkdCKSArPSByb2NrY2hpcF9yZ2IubwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2R3LW1pcGktZHNpLXJvY2tjaGlwLmMgYi9k cml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvZHctbWlwaS1kc2ktcm9ja2NoaXAuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmIzYWFlODQzOWFhMwotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9kdy1taXBpLWRzaS1yb2NrY2hpcC5jCkBA IC0wLDAgKzEsOTM5IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsKKy8q CisgKiBDb3B5cmlnaHQgKEMpIEZ1emhvdSBSb2NrY2hpcCBFbGVjdHJvbmljcyBDby5MdGQKKyAq IEF1dGhvcjoKKyAqICAgICAgQ2hyaXMgWmhvbmcgPHp5d0Byb2NrLWNoaXBzLmNvbT4KKyAqICAg ICAgTmlja2V5IFlhbmcgPG5pY2tleS55YW5nQHJvY2stY2hpcHMuY29tPgorICovCisKKyNpbmNs dWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fbWlwaV9kc2kuaD4KKyNpbmNsdWRl IDxkcm0vYnJpZGdlL2R3X21pcGlfZHNpLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9vZi5oPgorI2lu Y2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9sbC5oPgorI2luY2x1ZGUg PGxpbnV4L21hdGg2NC5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KKyNpbmNsdWRl IDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRl IDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisjaW5jbHVk ZSA8dmlkZW8vbWlwaV9kaXNwbGF5Lmg+CisKKyNpbmNsdWRlICJyb2NrY2hpcF9kcm1fZHJ2Lmgi CisjaW5jbHVkZSAicm9ja2NoaXBfZHJtX3ZvcC5oIgorCisjZGVmaW5lIERTSV9QSFlfUlNUWgkJ CTB4YTAKKyNkZWZpbmUgUEhZX0RJU0ZPUkNFUExMCQkJMAorI2RlZmluZSBQSFlfRU5GT1JDRVBM TAkJCUJJVCgzKQorI2RlZmluZSBQSFlfRElTQUJMRUNMSwkJCTAKKyNkZWZpbmUgUEhZX0VOQUJM RUNMSwkJCUJJVCgyKQorI2RlZmluZSBQSFlfUlNUWgkJCTAKKyNkZWZpbmUgUEhZX1VOUlNUWgkJ CUJJVCgxKQorI2RlZmluZSBQSFlfU0hVVERPV05aCQkJMAorI2RlZmluZSBQSFlfVU5TSFVURE9X TloJCQlCSVQoMCkKKworI2RlZmluZSBEU0lfUEhZX0lGX0NGRwkJCTB4YTQKKyNkZWZpbmUgTl9M QU5FUyhuKQkJCSgoKChuKSAtIDEpICYgMHgzKSA8PCAwKQorI2RlZmluZSBQSFlfU1RPUF9XQUlU X1RJTUUoY3ljbGUpCSgoKGN5Y2xlKSAmIDB4ZmYpIDw8IDgpCisKKyNkZWZpbmUgRFNJX1BIWV9T VEFUVVMJCQkweGIwCisjZGVmaW5lIExPQ0sJCQkJQklUKDApCisjZGVmaW5lIFNUT1BfU1RBVEVf Q0xLX0xBTkUJCUJJVCgyKQorCisjZGVmaW5lIERTSV9QSFlfVFNUX0NUUkwwCQkweGI0CisjZGVm aW5lIFBIWV9URVNUQ0xLCQkJQklUKDEpCisjZGVmaW5lIFBIWV9VTlRFU1RDTEsJCQkwCisjZGVm aW5lIFBIWV9URVNUQ0xSCQkJQklUKDApCisjZGVmaW5lIFBIWV9VTlRFU1RDTFIJCQkwCisKKyNk ZWZpbmUgRFNJX1BIWV9UU1RfQ1RSTDEJCTB4YjgKKyNkZWZpbmUgUEhZX1RFU1RFTgkJCUJJVCgx NikKKyNkZWZpbmUgUEhZX1VOVEVTVEVOCQkJMAorI2RlZmluZSBQSFlfVEVTVERPVVQobikJCQko KChuKSAmIDB4ZmYpIDw8IDgpCisjZGVmaW5lIFBIWV9URVNURElOKG4pCQkJKCgobikgJiAweGZm KSA8PCAwKQorCisjZGVmaW5lIERTSV9JTlRfU1QwCQkJMHhiYworI2RlZmluZSBEU0lfSU5UX1NU MQkJCTB4YzAKKyNkZWZpbmUgRFNJX0lOVF9NU0swCQkJMHhjNAorI2RlZmluZSBEU0lfSU5UX01T SzEJCQkweGM4CisKKyNkZWZpbmUgUEhZX1NUQVRVU19USU1FT1VUX1VTCQkxMDAwMAorI2RlZmlu ZSBDTURfUEtUX1NUQVRVU19USU1FT1VUX1VTCTIwMDAwCisKKyNkZWZpbmUgQllQQVNTX1ZDT19S QU5HRQlCSVQoNykKKyNkZWZpbmUgVkNPX1JBTkdFX0NPTl9TRUwodmFsKQkoKCh2YWwpICYgMHg3 KSA8PCAzKQorI2RlZmluZSBWQ09fSU5fQ0FQX0NPTl9ERUZBVUxUCSgweDAgPDwgMSkKKyNkZWZp bmUgVkNPX0lOX0NBUF9DT05fTE9XCSgweDEgPDwgMSkKKyNkZWZpbmUgVkNPX0lOX0NBUF9DT05f SElHSAkoMHgyIDw8IDEpCisjZGVmaW5lIFJFRl9CSUFTX0NVUl9TRUwJQklUKDApCisKKyNkZWZp bmUgQ1BfQ1VSUkVOVF8zVUEJMHgxCisjZGVmaW5lIENQX0NVUlJFTlRfNF81VUEJMHgyCisjZGVm aW5lIENQX0NVUlJFTlRfN181VUEJMHg2CisjZGVmaW5lIENQX0NVUlJFTlRfNlVBCTB4OQorI2Rl ZmluZSBDUF9DVVJSRU5UXzEyVUEJMHhiCisjZGVmaW5lIENQX0NVUlJFTlRfU0VMKHZhbCkJKCh2 YWwpICYgMHhmKQorI2RlZmluZSBDUF9QUk9HUkFNX0VOCQlCSVQoNykKKworI2RlZmluZSBMUEZf UkVTSVNUT1JTXzE1XzVLT0hNCTB4MQorI2RlZmluZSBMUEZfUkVTSVNUT1JTXzEzS09ITQkweDIK KyNkZWZpbmUgTFBGX1JFU0lTVE9SU18xMV81S09ITQkweDQKKyNkZWZpbmUgTFBGX1JFU0lTVE9S U18xMF81S09ITQkweDgKKyNkZWZpbmUgTFBGX1JFU0lTVE9SU184S09ITQkweDEwCisjZGVmaW5l IExQRl9QUk9HUkFNX0VOCQlCSVQoNikKKyNkZWZpbmUgTFBGX1JFU0lTVE9SU19TRUwodmFsKQko KHZhbCkgJiAweDNmKQorCisjZGVmaW5lIEhTRlJFUVJBTkdFX1NFTCh2YWwpCSgoKHZhbCkgJiAw eDNmKSA8PCAxKQorCisjZGVmaW5lIElOUFVUX0RJVklERVIodmFsKQkoKCh2YWwpIC0gMSkgJiAw eDdmKQorI2RlZmluZSBMT1dfUFJPR1JBTV9FTgkJMAorI2RlZmluZSBISUdIX1BST0dSQU1fRU4J CUJJVCg3KQorI2RlZmluZSBMT09QX0RJVl9MT1dfU0VMKHZhbCkJKCgodmFsKSAtIDEpICYgMHgx ZikKKyNkZWZpbmUgTE9PUF9ESVZfSElHSF9TRUwodmFsKQkoKCgodmFsKSAtIDEpID4+IDUpICYg MHhmKQorI2RlZmluZSBQTExfTE9PUF9ESVZfRU4JCUJJVCg1KQorI2RlZmluZSBQTExfSU5QVVRf RElWX0VOCUJJVCg0KQorCisjZGVmaW5lIFBPV0VSX0NPTlRST0wJCUJJVCg2KQorI2RlZmluZSBJ TlRFUk5BTF9SRUdfQ1VSUkVOVAlCSVQoMykKKyNkZWZpbmUgQklBU19CTE9DS19PTgkJQklUKDIp CisjZGVmaW5lIEJBTkRHQVBfT04JCUJJVCgwKQorCisjZGVmaW5lIFRFUl9SRVNJU1RPUl9ISUdI CUJJVCg3KQorI2RlZmluZQlURVJfUkVTSVNUT1JfTE9XCTAKKyNkZWZpbmUgTEVWRUxfU0hJRlRF UlNfT04JQklUKDYpCisjZGVmaW5lIFRFUl9DQUxfRE9ORQkJQklUKDUpCisjZGVmaW5lIFNFVFJE X01BWAkJKDB4NyA8PCAyKQorI2RlZmluZSBQT1dFUl9NQU5BR0UJCUJJVCgxKQorI2RlZmluZSBU RVJfUkVTSVNUT1JTX09OCUJJVCgwKQorCisjZGVmaW5lIEJJQVNFWFRSX1NFTCh2YWwpCSgodmFs KSAmIDB4NykKKyNkZWZpbmUgQkFOREdBUF9TRUwodmFsKQkoKHZhbCkgJiAweDcpCisjZGVmaW5l IFRMUF9QUk9HUkFNX0VOCQlCSVQoNykKKyNkZWZpbmUgVEhTX1BSRV9QUk9HUkFNX0VOCUJJVCg3 KQorI2RlZmluZSBUSFNfWkVST19QUk9HUkFNX0VOCUJJVCg2KQorCisjZGVmaW5lIFBMTF9CSUFT X0NVUl9TRUxfQ0FQX1ZDT19DT05UUk9MCQkweDEwCisjZGVmaW5lIFBMTF9DUF9DT05UUk9MX1BM TF9MT0NLX0JZUEFTUwkJCTB4MTEKKyNkZWZpbmUgUExMX0xQRl9BTkRfQ1BfQ09OVFJPTAkJCQkw eDEyCisjZGVmaW5lIFBMTF9JTlBVVF9ESVZJREVSX1JBVElPCQkJCTB4MTcKKyNkZWZpbmUgUExM X0xPT1BfRElWSURFUl9SQVRJTwkJCQkweDE4CisjZGVmaW5lIFBMTF9JTlBVVF9BTkRfTE9PUF9E SVZJREVSX1JBVElPU19DT05UUk9MCTB4MTkKKyNkZWZpbmUgQkFOREdBUF9BTkRfQklBU19DT05U Uk9MCQkJMHgyMAorI2RlZmluZSBURVJNSU5BVElPTl9SRVNJU1RFUl9DT05UUk9MCQkJMHgyMQor I2RlZmluZSBBRkVfQklBU19CQU5ER0FQX0FOQUxPR19QUk9HUkFNTUFCSUxJVFkJCTB4MjIKKyNk ZWZpbmUgSFNfUlhfQ09OVFJPTF9PRl9MQU5FXzAJCQkJMHg0NAorI2RlZmluZSBIU19UWF9DTE9D S19MQU5FX1JFUVVFU1RfU1RBVEVfVElNRV9DT05UUk9MCTB4NjAKKyNkZWZpbmUgSFNfVFhfQ0xP Q0tfTEFORV9QUkVQQVJFX1NUQVRFX1RJTUVfQ09OVFJPTAkweDYxCisjZGVmaW5lIEhTX1RYX0NM T0NLX0xBTkVfSFNfWkVST19TVEFURV9USU1FX0NPTlRST0wJMHg2MgorI2RlZmluZSBIU19UWF9D TE9DS19MQU5FX1RSQUlMX1NUQVRFX1RJTUVfQ09OVFJPTAkweDYzCisjZGVmaW5lIEhTX1RYX0NM T0NLX0xBTkVfRVhJVF9TVEFURV9USU1FX0NPTlRST0wJMHg2NAorI2RlZmluZSBIU19UWF9DTE9D S19MQU5FX1BPU1RfVElNRV9DT05UUk9MCQkweDY1CisjZGVmaW5lIEhTX1RYX0RBVEFfTEFORV9S RVFVRVNUX1NUQVRFX1RJTUVfQ09OVFJPTAkweDcwCisjZGVmaW5lIEhTX1RYX0RBVEFfTEFORV9Q UkVQQVJFX1NUQVRFX1RJTUVfQ09OVFJPTAkweDcxCisjZGVmaW5lIEhTX1RYX0RBVEFfTEFORV9I U19aRVJPX1NUQVRFX1RJTUVfQ09OVFJPTAkweDcyCisjZGVmaW5lIEhTX1RYX0RBVEFfTEFORV9U UkFJTF9TVEFURV9USU1FX0NPTlRST0wJMHg3MworI2RlZmluZSBIU19UWF9EQVRBX0xBTkVfRVhJ VF9TVEFURV9USU1FX0NPTlRST0wJCTB4NzQKKworI2RlZmluZSBEV19NSVBJX05FRURTX1BIWV9D RkdfQ0xLCUJJVCgwKQorI2RlZmluZSBEV19NSVBJX05FRURTX0dSRl9DTEsJCUJJVCgxKQorCisj ZGVmaW5lIFJLMzI4OF9HUkZfU09DX0NPTjYJCTB4MDI1YworI2RlZmluZSBSSzMyODhfRFNJMF9M Q0RDX1NFTAkJQklUKDYpCisjZGVmaW5lIFJLMzI4OF9EU0kxX0xDRENfU0VMCQlCSVQoOSkKKwor I2RlZmluZSBSSzMzOTlfR1JGX1NPQ19DT04yMAkJMHg2MjUwCisjZGVmaW5lIFJLMzM5OV9EU0kw X0xDRENfU0VMCQlCSVQoMCkKKyNkZWZpbmUgUkszMzk5X0RTSTFfTENEQ19TRUwJCUJJVCg0KQor CisjZGVmaW5lIFJLMzM5OV9HUkZfU09DX0NPTjIyCQkweDYyNTgKKyNkZWZpbmUgUkszMzk5X0RT STBfVFVSTlJFUVVFU1QJCSgweGYgPDwgMTIpCisjZGVmaW5lIFJLMzM5OV9EU0kwX1RVUk5ESVNB QkxFCQkoMHhmIDw8IDgpCisjZGVmaW5lIFJLMzM5OV9EU0kwX0ZPUkNFVFhTVE9QTU9ERQkoMHhm IDw8IDQpCisjZGVmaW5lIFJLMzM5OV9EU0kwX0ZPUkNFUlhNT0RFCQkoMHhmIDw8IDApCisKKyNk ZWZpbmUgUkszMzk5X0dSRl9TT0NfQ09OMjMJCTB4NjI1YworI2RlZmluZSBSSzMzOTlfRFNJMV9U VVJORElTQUJMRQkJKDB4ZiA8PCAxMikKKyNkZWZpbmUgUkszMzk5X0RTSTFfRk9SQ0VUWFNUT1BN T0RFCSgweGYgPDwgOCkKKyNkZWZpbmUgUkszMzk5X0RTSTFfRk9SQ0VSWE1PREUJCSgweGYgPDwg NCkKKyNkZWZpbmUgUkszMzk5X0RTSTFfRU5BQkxFCQkoMHhmIDw8IDApCisKKyNkZWZpbmUgUksz Mzk5X0dSRl9TT0NfQ09OMjQJCTB4NjI2MAorI2RlZmluZSBSSzMzOTlfVFhSWF9NQVNURVJTTEFW RVoJQklUKDcpCisjZGVmaW5lIFJLMzM5OV9UWFJYX0VOQUJMRUNMSwkJQklUKDYpCisjZGVmaW5l IFJLMzM5OV9UWFJYX0JBU0VESVIJCUJJVCg1KQorCisjZGVmaW5lIEhJV09SRF9VUERBVEUodmFs LCBtYXNrKQkodmFsIHwgKG1hc2spIDw8IDE2KQorCisjZGVmaW5lIHRvX2RzaShubSkJY29udGFp bmVyX29mKG5tLCBzdHJ1Y3QgZHdfbWlwaV9kc2lfcm9ja2NoaXAsIG5tKQorCitlbnVtIHsKKwlC QU5ER0FQXzk3XzA3LAorCUJBTkRHQVBfOThfMDUsCisJQkFOREdBUF85OV8wMiwKKwlCQU5ER0FQ XzEwMF8wMCwKKwlCQU5ER0FQXzkzXzE3LAorCUJBTkRHQVBfOTRfMTUsCisJQkFOREdBUF85NV8x MiwKKwlCQU5ER0FQXzk2XzEwLAorfTsKKworZW51bSB7CisJQklBU0VYVFJfODdfMSwKKwlCSUFT RVhUUl85MV81LAorCUJJQVNFWFRSXzk1XzksCisJQklBU0VYVFJfMTAwLAorCUJJQVNFWFRSXzEw NV85NCwKKwlCSUFTRVhUUl8xMTFfODgsCisJQklBU0VYVFJfMTE4XzgsCisJQklBU0VYVFJfMTI3 XzcsCit9OworCitzdHJ1Y3Qgcm9ja2NoaXBfZHdfZHNpX2NoaXBfZGF0YSB7CisJdTMyIHJlZzsK KworCXUzMiBsY2RzZWxfZ3JmX3JlZzsKKwl1MzIgbGNkc2VsX2JpZzsKKwl1MzIgbGNkc2VsX2xp dDsKKworCXUzMiBlbmFibGVfZ3JmX3JlZzsKKwl1MzIgZW5hYmxlOworCisJdTMyIGxhbmVjZmcx X2dyZl9yZWc7CisJdTMyIGxhbmVjZmcxOworCXUzMiBsYW5lY2ZnMl9ncmZfcmVnOworCXUzMiBs YW5lY2ZnMjsKKworCXVuc2lnbmVkIGludCBmbGFnczsKKwl1bnNpZ25lZCBpbnQgbWF4X2RhdGFf bGFuZXM7Cit9OworCitzdHJ1Y3QgZHdfbWlwaV9kc2lfcm9ja2NoaXAgeworCXN0cnVjdCBkZXZp Y2UgKmRldjsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgZW5jb2RlcjsKKwl2b2lkIF9faW9tZW0gKmJh c2U7CisKKwlzdHJ1Y3QgcmVnbWFwICpncmZfcmVnbWFwOworCXN0cnVjdCBjbGsgKnBsbHJlZl9j bGs7CisJc3RydWN0IGNsayAqZ3JmX2NsazsKKwlzdHJ1Y3QgY2xrICpwaHlfY2ZnX2NsazsKKwor CXVuc2lnbmVkIGludCBsYW5lX21icHM7IC8qIHBlciBsYW5lICovCisJdTE2IGlucHV0X2RpdjsK Kwl1MTYgZmVlZGJhY2tfZGl2OworCXUzMiBmb3JtYXQ7CisKKwlzdHJ1Y3QgZHdfbWlwaV9kc2kg KmRtZDsKKwljb25zdCBzdHJ1Y3Qgcm9ja2NoaXBfZHdfZHNpX2NoaXBfZGF0YSAqY2RhdGE7CisJ c3RydWN0IGR3X21pcGlfZHNpX3BsYXRfZGF0YSBwZGF0YTsKK307CisKK3N0cnVjdCBkcGh5X3Bs bF9wYXJhbWV0ZXJfbWFwIHsKKwl1bnNpZ25lZCBpbnQgbWF4X21icHM7CisJdTggaHNmcmVxcmFu Z2U7CisJdTggaWNwY3RybDsKKwl1OCBscGZjdHJsOworfTsKKworLyogVGhlIHRhYmxlIGlzIGJh c2VkIG9uIDI3TUh6IERQSFkgcGxsIHJlZmVyZW5jZSBjbG9jay4gKi8KK3N0YXRpYyBjb25zdCBz dHJ1Y3QgZHBoeV9wbGxfcGFyYW1ldGVyX21hcCBkcHBhX21hcFtdID0geworCXsgIDg5LCAweDAw LCBDUF9DVVJSRU5UXzNVQSwgTFBGX1JFU0lTVE9SU18xM0tPSE0gfSwKKwl7ICA5OSwgMHgxMCwg Q1BfQ1VSUkVOVF8zVUEsIExQRl9SRVNJU1RPUlNfMTNLT0hNIH0sCisJeyAxMDksIDB4MjAsIENQ X0NVUlJFTlRfM1VBLCBMUEZfUkVTSVNUT1JTXzEzS09ITSB9LAorCXsgMTI5LCAweDAxLCBDUF9D VVJSRU5UXzNVQSwgTFBGX1JFU0lTVE9SU18xNV81S09ITSB9LAorCXsgMTM5LCAweDExLCBDUF9D VVJSRU5UXzNVQSwgTFBGX1JFU0lTVE9SU18xNV81S09ITSB9LAorCXsgMTQ5LCAweDIxLCBDUF9D VVJSRU5UXzNVQSwgTFBGX1JFU0lTVE9SU18xNV81S09ITSB9LAorCXsgMTY5LCAweDAyLCBDUF9D VVJSRU5UXzZVQSwgTFBGX1JFU0lTVE9SU18xM0tPSE0gfSwKKwl7IDE3OSwgMHgxMiwgQ1BfQ1VS UkVOVF82VUEsIExQRl9SRVNJU1RPUlNfMTNLT0hNIH0sCisJeyAxOTksIDB4MjIsIENQX0NVUlJF TlRfNlVBLCBMUEZfUkVTSVNUT1JTXzEzS09ITSB9LAorCXsgMjE5LCAweDAzLCBDUF9DVVJSRU5U XzRfNVVBLCBMUEZfUkVTSVNUT1JTXzEzS09ITSB9LAorCXsgMjM5LCAweDEzLCBDUF9DVVJSRU5U XzRfNVVBLCBMUEZfUkVTSVNUT1JTXzEzS09ITSB9LAorCXsgMjQ5LCAweDIzLCBDUF9DVVJSRU5U XzRfNVVBLCBMUEZfUkVTSVNUT1JTXzEzS09ITSB9LAorCXsgMjY5LCAweDA0LCBDUF9DVVJSRU5U XzZVQSwgTFBGX1JFU0lTVE9SU18xMV81S09ITSB9LAorCXsgMjk5LCAweDE0LCBDUF9DVVJSRU5U XzZVQSwgTFBGX1JFU0lTVE9SU18xMV81S09ITSB9LAorCXsgMzI5LCAweDA1LCBDUF9DVVJSRU5U XzNVQSwgTFBGX1JFU0lTVE9SU18xNV81S09ITSB9LAorCXsgMzU5LCAweDE1LCBDUF9DVVJSRU5U XzNVQSwgTFBGX1JFU0lTVE9SU18xNV81S09ITSB9LAorCXsgMzk5LCAweDI1LCBDUF9DVVJSRU5U XzNVQSwgTFBGX1JFU0lTVE9SU18xNV81S09ITSB9LAorCXsgNDQ5LCAweDA2LCBDUF9DVVJSRU5U XzdfNVVBLCBMUEZfUkVTSVNUT1JTXzExXzVLT0hNIH0sCisJeyA0OTksIDB4MTYsIENQX0NVUlJF TlRfN181VUEsIExQRl9SRVNJU1RPUlNfMTFfNUtPSE0gfSwKKwl7IDU0OSwgMHgwNywgQ1BfQ1VS UkVOVF83XzVVQSwgTFBGX1JFU0lTVE9SU18xMF81S09ITSB9LAorCXsgNTk5LCAweDE3LCBDUF9D VVJSRU5UXzdfNVVBLCBMUEZfUkVTSVNUT1JTXzEwXzVLT0hNIH0sCisJeyA2NDksIDB4MDgsIENQ X0NVUlJFTlRfN181VUEsIExQRl9SRVNJU1RPUlNfMTFfNUtPSE0gfSwKKwl7IDY5OSwgMHgxOCwg Q1BfQ1VSUkVOVF83XzVVQSwgTFBGX1JFU0lTVE9SU18xMV81S09ITSB9LAorCXsgNzQ5LCAweDA5 LCBDUF9DVVJSRU5UXzdfNVVBLCBMUEZfUkVTSVNUT1JTXzExXzVLT0hNIH0sCisJeyA3OTksIDB4 MTksIENQX0NVUlJFTlRfN181VUEsIExQRl9SRVNJU1RPUlNfMTFfNUtPSE0gfSwKKwl7IDg0OSwg MHgyOSwgQ1BfQ1VSUkVOVF83XzVVQSwgTFBGX1JFU0lTVE9SU18xMV81S09ITSB9LAorCXsgODk5 LCAweDM5LCBDUF9DVVJSRU5UXzdfNVVBLCBMUEZfUkVTSVNUT1JTXzExXzVLT0hNIH0sCisJeyA5 NDksIDB4MGEsIENQX0NVUlJFTlRfMTJVQSwgTFBGX1JFU0lTVE9SU184S09ITSB9LAorCXsgOTk5 LCAweDFhLCBDUF9DVVJSRU5UXzEyVUEsIExQRl9SRVNJU1RPUlNfOEtPSE0gfSwKKwl7MTA0OSwg MHgyYSwgQ1BfQ1VSUkVOVF8xMlVBLCBMUEZfUkVTSVNUT1JTXzhLT0hNIH0sCisJezEwOTksIDB4 M2EsIENQX0NVUlJFTlRfMTJVQSwgTFBGX1JFU0lTVE9SU184S09ITSB9LAorCXsxMTQ5LCAweDBi LCBDUF9DVVJSRU5UXzEyVUEsIExQRl9SRVNJU1RPUlNfMTBfNUtPSE0gfSwKKwl7MTE5OSwgMHgx YiwgQ1BfQ1VSUkVOVF8xMlVBLCBMUEZfUkVTSVNUT1JTXzEwXzVLT0hNIH0sCisJezEyNDksIDB4 MmIsIENQX0NVUlJFTlRfMTJVQSwgTFBGX1JFU0lTVE9SU18xMF81S09ITSB9LAorCXsxMjk5LCAw eDNiLCBDUF9DVVJSRU5UXzEyVUEsIExQRl9SRVNJU1RPUlNfMTBfNUtPSE0gfSwKKwl7MTM0OSwg MHgwYywgQ1BfQ1VSUkVOVF8xMlVBLCBMUEZfUkVTSVNUT1JTXzEwXzVLT0hNIH0sCisJezEzOTks IDB4MWMsIENQX0NVUlJFTlRfMTJVQSwgTFBGX1JFU0lTVE9SU18xMF81S09ITSB9LAorCXsxNDQ5 LCAweDJjLCBDUF9DVVJSRU5UXzEyVUEsIExQRl9SRVNJU1RPUlNfMTBfNUtPSE0gfSwKKwl7MTUw MCwgMHgzYywgQ1BfQ1VSUkVOVF8xMlVBLCBMUEZfUkVTSVNUT1JTXzEwXzVLT0hNIH0KK307CisK K3N0YXRpYyBpbnQgbWF4X21icHNfdG9fcGFyYW1ldGVyKHVuc2lnbmVkIGludCBtYXhfbWJwcykK K3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRwcGFfbWFwKTsgaSsr KQorCQlpZiAoZHBwYV9tYXBbaV0ubWF4X21icHMgPj0gbWF4X21icHMpCisJCQlyZXR1cm4gaTsK KworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZHNpX3dyaXRlKHN0 cnVjdCBkd19taXBpX2RzaV9yb2NrY2hpcCAqZHNpLCB1MzIgcmVnLCB1MzIgdmFsKQoreworCXdy aXRlbCh2YWwsIGRzaS0+YmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGRzaV9y ZWFkKHN0cnVjdCBkd19taXBpX2RzaV9yb2NrY2hpcCAqZHNpLCB1MzIgcmVnKQoreworCXJldHVy biByZWFkbChkc2ktPmJhc2UgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZHNpX3Nl dChzdHJ1Y3QgZHdfbWlwaV9kc2lfcm9ja2NoaXAgKmRzaSwgdTMyIHJlZywgdTMyIG1hc2spCit7 CisJZHNpX3dyaXRlKGRzaSwgcmVnLCBkc2lfcmVhZChkc2ksIHJlZykgfCBtYXNrKTsKK30KKwor c3RhdGljIGlubGluZSB2b2lkIGRzaV91cGRhdGVfYml0cyhzdHJ1Y3QgZHdfbWlwaV9kc2lfcm9j a2NoaXAgKmRzaSwgdTMyIHJlZywKKwkJCQkgICB1MzIgbWFzaywgdTMyIHZhbCkKK3sKKwlkc2lf d3JpdGUoZHNpLCByZWcsIChkc2lfcmVhZChkc2ksIHJlZykgJiB+bWFzaykgfCB2YWwpOworfQor CitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9waHlfd3JpdGUoc3RydWN0IGR3X21pcGlfZHNpX3Jv Y2tjaGlwICpkc2ksCisJCQkJICB1OCB0ZXN0X2NvZGUsCisJCQkJICB1OCB0ZXN0X2RhdGEpCit7 CisJLyoKKwkgKiBXaXRoIHRoZSBmYWxsaW5nIGVkZ2Ugb24gVEVTVENMSywgdGhlIFRFU1RESU5b NzowXSBzaWduYWwgY29udGVudAorCSAqIGlzIGxhdGNoZWQgaW50ZXJuYWxseSBhcyB0aGUgY3Vy cmVudCB0ZXN0IGNvZGUuIFRlc3QgZGF0YSBpcworCSAqIHByb2dyYW1tZWQgaW50ZXJuYWxseSBi eSByaXNpbmcgZWRnZSBvbiBURVNUQ0xLLgorCSAqLworCWRzaV93cml0ZShkc2ksIERTSV9QSFlf VFNUX0NUUkwwLCBQSFlfVEVTVENMSyB8IFBIWV9VTlRFU1RDTFIpOworCisJZHNpX3dyaXRlKGRz aSwgRFNJX1BIWV9UU1RfQ1RSTDEsIFBIWV9URVNURU4gfCBQSFlfVEVTVERPVVQoMCkgfAorCQkJ CQkgIFBIWV9URVNURElOKHRlc3RfY29kZSkpOworCisJZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9U U1RfQ1RSTDAsIFBIWV9VTlRFU1RDTEsgfCBQSFlfVU5URVNUQ0xSKTsKKworCWRzaV93cml0ZShk c2ksIERTSV9QSFlfVFNUX0NUUkwxLCBQSFlfVU5URVNURU4gfCBQSFlfVEVTVERPVVQoMCkgfAor CQkJCQkgIFBIWV9URVNURElOKHRlc3RfZGF0YSkpOworCisJZHNpX3dyaXRlKGRzaSwgRFNJX1BI WV9UU1RfQ1RSTDAsIFBIWV9URVNUQ0xLIHwgUEhZX1VOVEVTVENMUik7Cit9CisKKy8qKgorICog bnMyYmMgLSBOYW5vc2Vjb25kcyB0byBieXRlIGNsb2NrIGN5Y2xlcworICovCitzdGF0aWMgaW5s aW5lIHVuc2lnbmVkIGludCBuczJiYyhzdHJ1Y3QgZHdfbWlwaV9kc2lfcm9ja2NoaXAgKmRzaSwg aW50IG5zKQoreworCXJldHVybiBESVZfUk9VTkRfVVAobnMgKiBkc2ktPmxhbmVfbWJwcyAvIDgs IDEwMDApOworfQorCisvKioKKyAqIG5zMnVpIC0gTmFub3NlY29uZHMgdG8gVUkgdGltZSBwZXJp b2RzCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG5zMnVpKHN0cnVjdCBkd19taXBp X2RzaV9yb2NrY2hpcCAqZHNpLCBpbnQgbnMpCit7CisJcmV0dXJuIERJVl9ST1VORF9VUChucyAq IGRzaS0+bGFuZV9tYnBzLCAxMDAwKTsKK30KKworc3RhdGljIGludCBkd19taXBpX2RzaV9waHlf aW5pdCh2b2lkICpwcml2X2RhdGEpCit7CisJc3RydWN0IGR3X21pcGlfZHNpX3JvY2tjaGlwICpk c2kgPSBwcml2X2RhdGE7CisJaW50IHJldCwgaSwgdmNvOworCisJLyoKKwkgKiBHZXQgdmNvIGZy b20gZnJlcXVlbmN5KGxhbmVfbWJwcykKKwkgKiB2Y28JZnJlcXVlbmN5IHRhYmxlCisJICogMDAw IC0gYmV0d2VlbiAgIDgwIGFuZCAgMjAwIE1IegorCSAqIDAwMSAtIGJldHdlZW4gIDIwMCBhbmQg IDMwMCBNSHoKKwkgKiAwMTAgLSBiZXR3ZWVuICAzMDAgYW5kICA1MDAgTUh6CisJICogMDExIC0g YmV0d2VlbiAgNTAwIGFuZCAgNzAwIE1IegorCSAqIDEwMCAtIGJldHdlZW4gIDcwMCBhbmQgIDkw MCBNSHoKKwkgKiAxMDEgLSBiZXR3ZWVuICA5MDAgYW5kIDExMDAgTUh6CisJICogMTEwIC0gYmV0 d2VlbiAxMTAwIGFuZCAxMzAwIE1IegorCSAqIDExMSAtIGJldHdlZW4gMTMwMCBhbmQgMTUwMCBN SHoKKwkgKi8KKwl2Y28gPSAoZHNpLT5sYW5lX21icHMgPCAyMDApID8gMCA6IChkc2ktPmxhbmVf bWJwcyArIDEwMCkgLyAyMDA7CisKKwlpID0gbWF4X21icHNfdG9fcGFyYW1ldGVyKGRzaS0+bGFu ZV9tYnBzKTsKKwlpZiAoaSA8IDApIHsKKwkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwKKwkJCSAg ICAgICJmYWlsZWQgdG8gZ2V0IHBhcmFtZXRlciBmb3IgJWRtYnBzIGNsb2NrXG4iLAorCQkJICAg ICAgZHNpLT5sYW5lX21icHMpOworCQlyZXR1cm4gaTsKKwl9CisKKwlyZXQgPSBjbGtfcHJlcGFy ZV9lbmFibGUoZHNpLT5waHlfY2ZnX2Nsayk7CisJaWYgKHJldCkgeworCQlEUk1fREVWX0VSUk9S KGRzaS0+ZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBwaHlfY2ZnX2Nsa1xuIik7CisJCXJldHVybiBy ZXQ7CisJfQorCisJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgUExMX0JJQVNfQ1VSX1NFTF9D QVBfVkNPX0NPTlRST0wsCisJCQkgICAgICBCWVBBU1NfVkNPX1JBTkdFIHwKKwkJCSAgICAgIFZD T19SQU5HRV9DT05fU0VMKHZjbykgfAorCQkJICAgICAgVkNPX0lOX0NBUF9DT05fTE9XIHwKKwkJ CSAgICAgIFJFRl9CSUFTX0NVUl9TRUwpOworCisJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwg UExMX0NQX0NPTlRST0xfUExMX0xPQ0tfQllQQVNTLAorCQkJICAgICAgQ1BfQ1VSUkVOVF9TRUwo ZHBwYV9tYXBbaV0uaWNwY3RybCkpOworCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIFBMTF9M UEZfQU5EX0NQX0NPTlRST0wsCisJCQkgICAgICBDUF9QUk9HUkFNX0VOIHwgTFBGX1BST0dSQU1f RU4gfAorCQkJICAgICAgTFBGX1JFU0lTVE9SU19TRUwoZHBwYV9tYXBbaV0ubHBmY3RybCkpOwor CisJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgSFNfUlhfQ09OVFJPTF9PRl9MQU5FXzAsCisJ CQkgICAgICBIU0ZSRVFSQU5HRV9TRUwoZHBwYV9tYXBbaV0uaHNmcmVxcmFuZ2UpKTsKKworCWR3 X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIFBMTF9JTlBVVF9ESVZJREVSX1JBVElPLAorCQkJICAg ICAgSU5QVVRfRElWSURFUihkc2ktPmlucHV0X2RpdikpOworCWR3X21pcGlfZHNpX3BoeV93cml0 ZShkc2ksIFBMTF9MT09QX0RJVklERVJfUkFUSU8sCisJCQkgICAgICBMT09QX0RJVl9MT1dfU0VM KGRzaS0+ZmVlZGJhY2tfZGl2KSB8CisJCQkgICAgICBMT1dfUFJPR1JBTV9FTik7CisJLyoKKwkg KiBXZSBuZWVkIHNldCBQTExfSU5QVVRfQU5EX0xPT1BfRElWSURFUl9SQVRJT1NfQ09OVFJPTCBp bW1lZGlhdGVseQorCSAqIHRvIG1ha2UgdGhlIGNvbmZpZ3VyZWQgTFNCIGVmZmVjdGl2ZSBhY2Nv cmRpbmcgdG8gSVAgc2ltdWxhdGlvbgorCSAqIGFuZCBsYWIgdGVzdCByZXN1bHRzLgorCSAqIE9u bHkgaW4gdGhpcyB3YXkgY2FuIHdlIGdldCBjb3JyZWN0IG1pcGkgcGh5IHBsbCBmcmVxdWVuY3ku CisJICovCisJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgUExMX0lOUFVUX0FORF9MT09QX0RJ VklERVJfUkFUSU9TX0NPTlRST0wsCisJCQkgICAgICBQTExfTE9PUF9ESVZfRU4gfCBQTExfSU5Q VVRfRElWX0VOKTsKKwlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCBQTExfTE9PUF9ESVZJREVS X1JBVElPLAorCQkJICAgICAgTE9PUF9ESVZfSElHSF9TRUwoZHNpLT5mZWVkYmFja19kaXYpIHwK KwkJCSAgICAgIEhJR0hfUFJPR1JBTV9FTik7CisJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwg UExMX0lOUFVUX0FORF9MT09QX0RJVklERVJfUkFUSU9TX0NPTlRST0wsCisJCQkgICAgICBQTExf TE9PUF9ESVZfRU4gfCBQTExfSU5QVVRfRElWX0VOKTsKKworCWR3X21pcGlfZHNpX3BoeV93cml0 ZShkc2ksIEFGRV9CSUFTX0JBTkRHQVBfQU5BTE9HX1BST0dSQU1NQUJJTElUWSwKKwkJCSAgICAg IExPV19QUk9HUkFNX0VOIHwgQklBU0VYVFJfU0VMKEJJQVNFWFRSXzEyN183KSk7CisJZHdfbWlw aV9kc2lfcGh5X3dyaXRlKGRzaSwgQUZFX0JJQVNfQkFOREdBUF9BTkFMT0dfUFJPR1JBTU1BQklM SVRZLAorCQkJICAgICAgSElHSF9QUk9HUkFNX0VOIHwgQkFOREdBUF9TRUwoQkFOREdBUF85Nl8x MCkpOworCisJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgQkFOREdBUF9BTkRfQklBU19DT05U Uk9MLAorCQkJICAgICAgUE9XRVJfQ09OVFJPTCB8IElOVEVSTkFMX1JFR19DVVJSRU5UIHwKKwkJ CSAgICAgIEJJQVNfQkxPQ0tfT04gfCBCQU5ER0FQX09OKTsKKworCWR3X21pcGlfZHNpX3BoeV93 cml0ZShkc2ksIFRFUk1JTkFUSU9OX1JFU0lTVEVSX0NPTlRST0wsCisJCQkgICAgICBURVJfUkVT SVNUT1JfTE9XIHwgVEVSX0NBTF9ET05FIHwKKwkJCSAgICAgIFNFVFJEX01BWCB8IFRFUl9SRVNJ U1RPUlNfT04pOworCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIFRFUk1JTkFUSU9OX1JFU0lT VEVSX0NPTlRST0wsCisJCQkgICAgICBURVJfUkVTSVNUT1JfSElHSCB8IExFVkVMX1NISUZURVJT X09OIHwKKwkJCSAgICAgIFNFVFJEX01BWCB8IFBPV0VSX01BTkFHRSB8CisJCQkgICAgICBURVJf UkVTSVNUT1JTX09OKTsKKworCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIEhTX1RYX0NMT0NL X0xBTkVfUkVRVUVTVF9TVEFURV9USU1FX0NPTlRST0wsCisJCQkgICAgICBUTFBfUFJPR1JBTV9F TiB8IG5zMmJjKGRzaSwgNTAwKSk7CisJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgSFNfVFhf Q0xPQ0tfTEFORV9QUkVQQVJFX1NUQVRFX1RJTUVfQ09OVFJPTCwKKwkJCSAgICAgIFRIU19QUkVf UFJPR1JBTV9FTiB8IG5zMnVpKGRzaSwgNDApKTsKKwlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNp LCBIU19UWF9DTE9DS19MQU5FX0hTX1pFUk9fU1RBVEVfVElNRV9DT05UUk9MLAorCQkJICAgICAg VEhTX1pFUk9fUFJPR1JBTV9FTiB8IG5zMmJjKGRzaSwgMzAwKSk7CisJZHdfbWlwaV9kc2lfcGh5 X3dyaXRlKGRzaSwgSFNfVFhfQ0xPQ0tfTEFORV9UUkFJTF9TVEFURV9USU1FX0NPTlRST0wsCisJ CQkgICAgICBUSFNfUFJFX1BST0dSQU1fRU4gfCBuczJ1aShkc2ksIDEwMCkpOworCWR3X21pcGlf ZHNpX3BoeV93cml0ZShkc2ksIEhTX1RYX0NMT0NLX0xBTkVfRVhJVF9TVEFURV9USU1FX0NPTlRS T0wsCisJCQkgICAgICBCSVQoNSkgfCBuczJiYyhkc2ksIDEwMCkpOworCWR3X21pcGlfZHNpX3Bo eV93cml0ZShkc2ksIEhTX1RYX0NMT0NLX0xBTkVfUE9TVF9USU1FX0NPTlRST0wsCisJCQkgICAg ICBCSVQoNSkgfCAobnMyYmMoZHNpLCA2MCkgKyA3KSk7CisKKwlkd19taXBpX2RzaV9waHlfd3Jp dGUoZHNpLCBIU19UWF9EQVRBX0xBTkVfUkVRVUVTVF9TVEFURV9USU1FX0NPTlRST0wsCisJCQkg ICAgICBUTFBfUFJPR1JBTV9FTiB8IG5zMmJjKGRzaSwgNTAwKSk7CisJZHdfbWlwaV9kc2lfcGh5 X3dyaXRlKGRzaSwgSFNfVFhfREFUQV9MQU5FX1BSRVBBUkVfU1RBVEVfVElNRV9DT05UUk9MLAor CQkJICAgICAgVEhTX1BSRV9QUk9HUkFNX0VOIHwgKG5zMnVpKGRzaSwgNTApICsgMjApKTsKKwlk d19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCBIU19UWF9EQVRBX0xBTkVfSFNfWkVST19TVEFURV9U SU1FX0NPTlRST0wsCisJCQkgICAgICBUSFNfWkVST19QUk9HUkFNX0VOIHwgKG5zMmJjKGRzaSwg MTQwKSArIDIpKTsKKwlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCBIU19UWF9EQVRBX0xBTkVf VFJBSUxfU1RBVEVfVElNRV9DT05UUk9MLAorCQkJICAgICAgVEhTX1BSRV9QUk9HUkFNX0VOIHwg KG5zMnVpKGRzaSwgNjApICsgOCkpOworCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIEhTX1RY X0RBVEFfTEFORV9FWElUX1NUQVRFX1RJTUVfQ09OVFJPTCwKKwkJCSAgICAgIEJJVCg1KSB8IG5z MmJjKGRzaSwgMTAwKSk7CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5waHlfY2ZnX2Ns ayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50Citkd19taXBpX2RzaV9nZXRfbGFu ZV9tYnBzKHZvaWQgKnByaXZfZGF0YSwgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJ CQkgIHVuc2lnbmVkIGxvbmcgbW9kZV9mbGFncywgdTMyIGxhbmVzLCB1MzIgZm9ybWF0LAorCQkJ ICB1bnNpZ25lZCBpbnQgKmxhbmVfbWJwcykKK3sKKwlzdHJ1Y3QgZHdfbWlwaV9kc2lfcm9ja2No aXAgKmRzaSA9IHByaXZfZGF0YTsKKwlpbnQgYnBwOworCXVuc2lnbmVkIGxvbmcgbXBjbGssIHRt cDsKKwl1bnNpZ25lZCBpbnQgdGFyZ2V0X21icHMgPSAxMDAwOworCXVuc2lnbmVkIGludCBtYXhf bWJwcyA9IGRwcGFfbWFwW0FSUkFZX1NJWkUoZHBwYV9tYXApIC0gMV0ubWF4X21icHM7CisJdW5z aWduZWQgbG9uZyBiZXN0X2ZyZXEgPSAwOworCXVuc2lnbmVkIGxvbmcgZnZjb19taW4sIGZ2Y29f bWF4LCBmaW4sIGZvdXQ7CisJdW5zaWduZWQgaW50IG1pbl9wcmVkaXYsIG1heF9wcmVkaXY7CisJ dW5zaWduZWQgaW50IF9wcmVkaXYsIHVuaW5pdGlhbGl6ZWRfdmFyKGJlc3RfcHJlZGl2KTsKKwl1 bnNpZ25lZCBsb25nIF9mYmRpdiwgdW5pbml0aWFsaXplZF92YXIoYmVzdF9mYmRpdik7CisJdW5z aWduZWQgbG9uZyBtaW5fZGVsdGEgPSBVTE9OR19NQVg7CisKKwlkc2ktPmZvcm1hdCA9IGZvcm1h dDsKKwlicHAgPSBtaXBpX2RzaV9waXhlbF9mb3JtYXRfdG9fYnBwKGRzaS0+Zm9ybWF0KTsKKwlp ZiAoYnBwIDwgMCkgeworCQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LAorCQkJICAgICAgImZhaWxl ZCB0byBnZXQgYnBwIGZvciBwaXhlbCBmb3JtYXQgJWRcbiIsCisJCQkgICAgICBkc2ktPmZvcm1h dCk7CisJCXJldHVybiBicHA7CisJfQorCisJbXBjbGsgPSBESVZfUk9VTkRfVVAobW9kZS0+Y2xv Y2ssIE1TRUNfUEVSX1NFQyk7CisJaWYgKG1wY2xrKSB7CisJCS8qIHRha2UgMSAvIDAuOCwgc2lu Y2UgbWJwcyBtdXN0IGJpZyB0aGFuIGJhbmR3aWR0aCBvZiBSR0IgKi8KKwkJdG1wID0gbXBjbGsg KiAoYnBwIC8gbGFuZXMpICogMTAgLyA4OworCQlpZiAodG1wIDwgbWF4X21icHMpCisJCQl0YXJn ZXRfbWJwcyA9IHRtcDsKKwkJZWxzZQorCQkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwKKwkJCQkg ICAgICAiRFBIWSBjbG9jayBmcmVxdWVuY3kgaXMgb3V0IG9mIHJhbmdlXG4iKTsKKwl9CisKKwlm aW4gPSBjbGtfZ2V0X3JhdGUoZHNpLT5wbGxyZWZfY2xrKTsKKwlmb3V0ID0gdGFyZ2V0X21icHMg KiBVU0VDX1BFUl9TRUM7CisKKwkvKiBjb25zdHJhaW50OiA1TWh6IDw9IEZyZWYgLyBOIDw9IDQw TUh6ICovCisJbWluX3ByZWRpdiA9IERJVl9ST1VORF9VUChmaW4sIDQwICogVVNFQ19QRVJfU0VD KTsKKwltYXhfcHJlZGl2ID0gZmluIC8gKDUgKiBVU0VDX1BFUl9TRUMpOworCisJLyogY29uc3Ry YWludDogODBNSHogPD0gRnZjbyA8PSAxNTAwTWh6ICovCisJZnZjb19taW4gPSA4MCAqIFVTRUNf UEVSX1NFQzsKKwlmdmNvX21heCA9IDE1MDAgKiBVU0VDX1BFUl9TRUM7CisKKwlmb3IgKF9wcmVk aXYgPSBtaW5fcHJlZGl2OyBfcHJlZGl2IDw9IG1heF9wcmVkaXY7IF9wcmVkaXYrKykgeworCQl1 NjQgdG1wOworCQl1MzIgZGVsdGE7CisJCS8qIEZ2Y28gPSBGcmVmICogTSAvIE4gKi8KKwkJdG1w ID0gKHU2NClmb3V0ICogX3ByZWRpdjsKKwkJZG9fZGl2KHRtcCwgZmluKTsKKwkJX2ZiZGl2ID0g dG1wOworCQkvKgorCQkgKiBEdWUgdG8gdGhlIHVzZSBvZiBhICJieSAyIHByZS1zY2FsZXIsIiB0 aGUgcmFuZ2Ugb2YgdGhlCisJCSAqIGZlZWRiYWNrIG11bHRpcGxpY2F0aW9uIHZhbHVlIE0gaXMg bGltaXRlZCB0byBldmVuIGRpdmlzaW9uCisJCSAqIG51bWJlcnMsIGFuZCBtIG11c3QgYmUgZ3Jl YXRlciB0aGFuIDYsIG5vdCBiaWdnZXIgdGhhbiA1MTIuCisJCSAqLworCQlpZiAoX2ZiZGl2IDwg NiB8fCBfZmJkaXYgPiA1MTIpCisJCQljb250aW51ZTsKKworCQlfZmJkaXYgKz0gX2ZiZGl2ICUg MjsKKworCQl0bXAgPSAodTY0KV9mYmRpdiAqIGZpbjsKKwkJZG9fZGl2KHRtcCwgX3ByZWRpdik7 CisJCWlmICh0bXAgPCBmdmNvX21pbiB8fCB0bXAgPiBmdmNvX21heCkKKwkJCWNvbnRpbnVlOwor CisJCWRlbHRhID0gYWJzKGZvdXQgLSB0bXApOworCQlpZiAoZGVsdGEgPCBtaW5fZGVsdGEpIHsK KwkJCWJlc3RfcHJlZGl2ID0gX3ByZWRpdjsKKwkJCWJlc3RfZmJkaXYgPSBfZmJkaXY7CisJCQlt aW5fZGVsdGEgPSBkZWx0YTsKKwkJCWJlc3RfZnJlcSA9IHRtcDsKKwkJfQorCX0KKworCWlmIChi ZXN0X2ZyZXEpIHsKKwkJZHNpLT5sYW5lX21icHMgPSBESVZfUk9VTkRfVVAoYmVzdF9mcmVxLCBV U0VDX1BFUl9TRUMpOworCQkqbGFuZV9tYnBzID0gZHNpLT5sYW5lX21icHM7CisJCWRzaS0+aW5w dXRfZGl2ID0gYmVzdF9wcmVkaXY7CisJCWRzaS0+ZmVlZGJhY2tfZGl2ID0gYmVzdF9mYmRpdjsK Kwl9IGVsc2UgeworCQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiQ2FuIG5vdCBmaW5kIGJlc3Rf ZnJlcSBmb3IgRFBIWVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOwor fQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGR3X21pcGlfZHNpX3BoeV9vcHMgZHdfbWlwaV9kc2lf cm9ja2NoaXBfcGh5X29wcyA9IHsKKwkuaW5pdCA9IGR3X21pcGlfZHNpX3BoeV9pbml0LAorCS5n ZXRfbGFuZV9tYnBzID0gZHdfbWlwaV9kc2lfZ2V0X2xhbmVfbWJwcywKK307CisKK3N0YXRpYyB2 b2lkIGR3X21pcGlfZHNpX3JvY2tjaGlwX2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2lfcm9ja2No aXAgKmRzaSwKKwkJCQkJaW50IG11eCkKK3sKKwlpZiAoZHNpLT5jZGF0YS0+bGNkc2VsX2dyZl9y ZWcpCisJCXJlZ21hcF93cml0ZShkc2ktPmdyZl9yZWdtYXAsIGRzaS0+Y2RhdGEtPmxjZHNlbF9n cmZfcmVnLAorCQkJbXV4ID8gZHNpLT5jZGF0YS0+bGNkc2VsX2xpdCA6IGRzaS0+Y2RhdGEtPmxj ZHNlbF9iaWcpOworCisJaWYgKGRzaS0+Y2RhdGEtPmxhbmVjZmcxX2dyZl9yZWcpCisJCXJlZ21h cF93cml0ZShkc2ktPmdyZl9yZWdtYXAsIGRzaS0+Y2RhdGEtPmxhbmVjZmcxX2dyZl9yZWcsCisJ CQkJCSAgICAgIGRzaS0+Y2RhdGEtPmxhbmVjZmcxKTsKKworCWlmIChkc2ktPmNkYXRhLT5sYW5l Y2ZnMl9ncmZfcmVnKQorCQlyZWdtYXBfd3JpdGUoZHNpLT5ncmZfcmVnbWFwLCBkc2ktPmNkYXRh LT5sYW5lY2ZnMl9ncmZfcmVnLAorCQkJCQkgICAgICBkc2ktPmNkYXRhLT5sYW5lY2ZnMik7CisK KwlpZiAoZHNpLT5jZGF0YS0+ZW5hYmxlX2dyZl9yZWcpCisJCXJlZ21hcF93cml0ZShkc2ktPmdy Zl9yZWdtYXAsIGRzaS0+Y2RhdGEtPmVuYWJsZV9ncmZfcmVnLAorCQkJCQkgICAgICBkc2ktPmNk YXRhLT5lbmFibGUpOworfQorCitzdGF0aWMgaW50Citkd19taXBpX2RzaV9lbmNvZGVyX2F0b21p Y19jaGVjayhzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkJIHN0cnVjdCBkcm1fY3J0 Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJCQkgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNv bm5fc3RhdGUpCit7CisJc3RydWN0IHJvY2tjaGlwX2NydGNfc3RhdGUgKnMgPSB0b19yb2NrY2hp cF9jcnRjX3N0YXRlKGNydGNfc3RhdGUpOworCXN0cnVjdCBkd19taXBpX2RzaV9yb2NrY2hpcCAq ZHNpID0gdG9fZHNpKGVuY29kZXIpOworCisJc3dpdGNoIChkc2ktPmZvcm1hdCkgeworCWNhc2Ug TUlQSV9EU0lfRk1UX1JHQjg4ODoKKwkJcy0+b3V0cHV0X21vZGUgPSBST0NLQ0hJUF9PVVRfTU9E RV9QODg4OworCQlicmVhazsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I2NjY6CisJCXMtPm91dHB1 dF9tb2RlID0gUk9DS0NISVBfT1VUX01PREVfUDY2NjsKKwkJYnJlYWs7CisJY2FzZSBNSVBJX0RT SV9GTVRfUkdCNTY1OgorCQlzLT5vdXRwdXRfbW9kZSA9IFJPQ0tDSElQX09VVF9NT0RFX1A1NjU7 CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdBUk5fT04oMSk7CisJCXJldHVybiAtRUlOVkFMOwor CX0KKworCXMtPm91dHB1dF90eXBlID0gRFJNX01PREVfQ09OTkVDVE9SX0RTSTsKKworCXJldHVy biAwOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9lbmNvZGVyX2VuYWJsZShzdHJ1Y3Qg ZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IGR3X21pcGlfZHNpX3JvY2tjaGlwICpk c2kgPSB0b19kc2koZW5jb2Rlcik7CisJaW50IHJldCwgbXV4OworCisJbXV4ID0gZHJtX29mX2Vu Y29kZXJfYWN0aXZlX2VuZHBvaW50X2lkKGRzaS0+ZGV2LT5vZl9ub2RlLAorCQkJCQkJJmRzaS0+ ZW5jb2Rlcik7CisJaWYgKG11eCA8IDApCisJCXJldHVybjsKKworCXBtX3J1bnRpbWVfZ2V0X3N5 bmMoZHNpLT5kZXYpOworCisJLyoKKwkgKiBGb3IgdGhlIFJLMzM5OSwgdGhlIGNsayBvZiBncmYg bXVzdCBiZSBlbmFibGVkIGJlZm9yZSB3cml0aW5nIGdyZgorCSAqIHJlZ2lzdGVyLiBBbmQgZm9y IFJLMzI4OCBvciBvdGhlciBzb2MsIHRoaXMgZ3JmX2NsayBtdXN0IGJlIE5VTEwsCisJICogdGhl IGNsa19wcmVwYXJlX2VuYWJsZSByZXR1cm4gdHJ1ZSBkaXJlY3RseS4KKwkgKi8KKwlyZXQgPSBj bGtfcHJlcGFyZV9lbmFibGUoZHNpLT5ncmZfY2xrKTsKKwlpZiAocmV0KSB7CisJCURSTV9ERVZf RVJST1IoZHNpLT5kZXYsICJGYWlsZWQgdG8gZW5hYmxlIGdyZl9jbGs6ICVkXG4iLCByZXQpOwor CQlyZXR1cm47CisJfQorCisJZHdfbWlwaV9kc2lfcm9ja2NoaXBfY29uZmlnKGRzaSwgbXV4KTsK KworCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPmdyZl9jbGspOworfQorCitzdGF0aWMgdm9p ZCBkd19taXBpX2RzaV9lbmNvZGVyX2Rpc2FibGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVy KQoreworCXN0cnVjdCBkd19taXBpX2RzaV9yb2NrY2hpcCAqZHNpID0gdG9fZHNpKGVuY29kZXIp OworCisJcG1fcnVudGltZV9wdXQoZHNpLT5kZXYpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0 IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcworZHdfbWlwaV9kc2lfZW5jb2Rlcl9oZWxwZXJfZnVu Y3MgPSB7CisJLmF0b21pY19jaGVjayA9IGR3X21pcGlfZHNpX2VuY29kZXJfYXRvbWljX2NoZWNr LAorCS5lbmFibGUgPSBkd19taXBpX2RzaV9lbmNvZGVyX2VuYWJsZSwKKwkuZGlzYWJsZSA9IGR3 X21pcGlfZHNpX2VuY29kZXJfZGlzYWJsZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJt X2VuY29kZXJfZnVuY3MgZHdfbWlwaV9kc2lfZW5jb2Rlcl9mdW5jcyA9IHsKKwkuZGVzdHJveSA9 IGRybV9lbmNvZGVyX2NsZWFudXAsCit9OworCitzdGF0aWMgaW50IHJvY2tjaGlwX2RzaV9kcm1f Y3JlYXRlX2VuY29kZXIoc3RydWN0IGR3X21pcGlfZHNpX3JvY2tjaGlwICpkc2ksCisJCQkJCSAg IHN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2KQoreworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5j b2RlciA9ICZkc2ktPmVuY29kZXI7CisJaW50IHJldDsKKworCWVuY29kZXItPnBvc3NpYmxlX2Ny dGNzID0gZHJtX29mX2ZpbmRfcG9zc2libGVfY3J0Y3MoZHJtX2RldiwKKwkJCQkJCQkgICAgIGRz aS0+ZGV2LT5vZl9ub2RlKTsKKworCXJldCA9IGRybV9lbmNvZGVyX2luaXQoZHJtX2RldiwgZW5j b2RlciwgJmR3X21pcGlfZHNpX2VuY29kZXJfZnVuY3MsCisJCQkgICAgICAgRFJNX01PREVfRU5D T0RFUl9EU0ksIE5VTEwpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gaW5p dGlhbGl6ZSBlbmNvZGVyIHdpdGggZHJtXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkcm1f ZW5jb2Rlcl9oZWxwZXJfYWRkKGVuY29kZXIsICZkd19taXBpX2RzaV9lbmNvZGVyX2hlbHBlcl9m dW5jcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkd19taXBpX2RzaV9yb2NrY2hp cF9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2UgKm1hc3Rl ciwKKwkJCQkgICAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGR3X21pcGlfZHNpX3JvY2tjaGlw ICpkc2kgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2Rl diA9IGRhdGE7CisJaW50IHJldDsKKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkc2ktPnBs bHJlZl9jbGspOworCWlmIChyZXQpIHsKKwkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8g ZW5hYmxlIHBsbHJlZl9jbGs6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJl dCA9IHJvY2tjaGlwX2RzaV9kcm1fY3JlYXRlX2VuY29kZXIoZHNpLCBkcm1fZGV2KTsKKwlpZiAo cmV0KSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIGNyZWF0ZSBkcm0gZW5jb2Rl clxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gZHdfbWlwaV9kc2lfYmluZChkc2kt PmRtZCwgJmRzaS0+ZW5jb2Rlcik7CisJaWYgKHJldCkgeworCQlEUk1fREVWX0VSUk9SKGRldiwg IkZhaWxlZCB0byBiaW5kOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfcm9ja2NoaXBfdW5iaW5kKHN0cnVj dCBkZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGRldmljZSAqbWFzdGVyLAorCQkJCQl2b2lkICpk YXRhKQoreworCXN0cnVjdCBkd19taXBpX2RzaV9yb2NrY2hpcCAqZHNpID0gZGV2X2dldF9kcnZk YXRhKGRldik7CisKKwlkd19taXBpX2RzaV91bmJpbmQoZHNpLT5kbWQpOworCisJY2xrX2Rpc2Fi bGVfdW5wcmVwYXJlKGRzaS0+cGxscmVmX2Nsayk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg Y29tcG9uZW50X29wcyBkd19taXBpX2RzaV9yb2NrY2hpcF9vcHMgPSB7CisJLmJpbmQJPSBkd19t aXBpX2RzaV9yb2NrY2hpcF9iaW5kLAorCS51bmJpbmQJPSBkd19taXBpX2RzaV9yb2NrY2hpcF91 bmJpbmQsCit9OworCitzdGF0aWMgaW50IGR3X21pcGlfZHNpX3JvY2tjaGlwX2hvc3RfYXR0YWNo KHZvaWQgKnByaXZfZGF0YSwKKwkJCQkJICAgIHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRldmlj ZSkKK3sKKwlzdHJ1Y3QgZHdfbWlwaV9kc2lfcm9ja2NoaXAgKmRzaSA9IHByaXZfZGF0YTsKKwlp bnQgcmV0OworCisJcmV0ID0gY29tcG9uZW50X2FkZChkc2ktPmRldiwgJmR3X21pcGlfZHNpX3Jv Y2tjaGlwX29wcyk7CisJaWYgKHJldCkgeworCQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiRmFp bGVkIHRvIHJlZ2lzdGVyIGNvbXBvbmVudDogJWRcbiIsCisJCQkJCXJldCk7CisJCXJldHVybiBy ZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHdfbWlwaV9kc2lfcm9ja2No aXBfaG9zdF9kZXRhY2godm9pZCAqcHJpdl9kYXRhLAorCQkJCQkgICAgc3RydWN0IG1pcGlfZHNp X2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBkd19taXBpX2RzaV9yb2NrY2hpcCAqZHNpID0g cHJpdl9kYXRhOworCisJY29tcG9uZW50X2RlbChkc2ktPmRldiwgJmR3X21pcGlfZHNpX3JvY2tj aGlwX29wcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkd19taXBp X2RzaV9ob3N0X29wcyBkd19taXBpX2RzaV9yb2NrY2hpcF9ob3N0X29wcyA9IHsKKwkuYXR0YWNo ID0gZHdfbWlwaV9kc2lfcm9ja2NoaXBfaG9zdF9hdHRhY2gsCisJLmRldGFjaCA9IGR3X21pcGlf ZHNpX3JvY2tjaGlwX2hvc3RfZGV0YWNoLAorfTsKKworc3RhdGljIGludCBkd19taXBpX2RzaV9y b2NrY2hpcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBk ZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+ b2Zfbm9kZTsKKwlzdHJ1Y3QgZHdfbWlwaV9kc2lfcm9ja2NoaXAgKmRzaTsKKwlzdHJ1Y3QgcmVz b3VyY2UgKnJlczsKKwljb25zdCBzdHJ1Y3Qgcm9ja2NoaXBfZHdfZHNpX2NoaXBfZGF0YSAqY2Rh dGEgPQorCQkJCW9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpOworCWludCByZXQsIGk7CisK Kwlkc2kgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmRzaSksIEdGUF9LRVJORUwpOworCWlm ICghZHNpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJj ZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJZHNpLT5iYXNlID0gZGV2bV9pb3JlbWFwX3Jl c291cmNlKGRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKGRzaS0+YmFzZSkpIHsKKwkJRFJNX0RFVl9F UlJPUihkZXYsICJVbmFibGUgdG8gZ2V0IGRzaSByZWdpc3RlcnNcbiIpOworCQlyZXR1cm4gUFRS X0VSUihkc2ktPmJhc2UpOworCX0KKworCWkgPSAwOworCXdoaWxlIChjZGF0YVtpXS5yZWcpIHsK KwkJaWYgKGNkYXRhW2ldLnJlZyA9PSByZXMtPnN0YXJ0KSB7CisJCQlkc2ktPmNkYXRhID0gJmNk YXRhW2ldOworCQkJYnJlYWs7CisJCX0KKworCQlpKys7CisJfQorCisJaWYgKCFkc2ktPmNkYXRh KSB7CisJCWRldl9lcnIoZGV2LCAibm8gZHNpLWNvbmZpZyBmb3IgJXMgbm9kZVxuIiwgbnAtPm5h bWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkc2ktPnBsbHJlZl9jbGsgPSBkZXZtX2Ns a19nZXQoZGV2LCAicmVmIik7CisJaWYgKElTX0VSUihkc2ktPnBsbHJlZl9jbGspKSB7CisJCXJl dCA9IFBUUl9FUlIoZHNpLT5wbGxyZWZfY2xrKTsKKwkJRFJNX0RFVl9FUlJPUihkZXYsCisJCQkg ICAgICAiVW5hYmxlIHRvIGdldCBwbGwgcmVmZXJlbmNlIGNsb2NrOiAlZFxuIiwgcmV0KTsKKwkJ cmV0dXJuIHJldDsKKwl9CisKKwlpZiAoZHNpLT5jZGF0YS0+ZmxhZ3MgJiBEV19NSVBJX05FRURT X1BIWV9DRkdfQ0xLKSB7CisJCWRzaS0+cGh5X2NmZ19jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAi cGh5X2NmZyIpOworCQlpZiAoSVNfRVJSKGRzaS0+cGh5X2NmZ19jbGspKSB7CisJCQlyZXQgPSBQ VFJfRVJSKGRzaS0+cGh5X2NmZ19jbGspOworCQkJRFJNX0RFVl9FUlJPUihkZXYsCisJCQkJICAg ICAgIlVuYWJsZSB0byBnZXQgcGh5X2NmZ19jbGs6ICVkXG4iLCByZXQpOworCQkJcmV0dXJuIHJl dDsKKwkJfQorCX0KKworCWlmIChkc2ktPmNkYXRhLT5mbGFncyAmIERXX01JUElfTkVFRFNfR1JG X0NMSykgeworCQlkc2ktPmdyZl9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAiZ3JmIik7CisJCWlm IChJU19FUlIoZHNpLT5ncmZfY2xrKSkgeworCQkJcmV0ID0gUFRSX0VSUihkc2ktPmdyZl9jbGsp OworCQkJRFJNX0RFVl9FUlJPUihkZXYsICJVbmFibGUgdG8gZ2V0IGdyZl9jbGs6ICVkXG4iLCBy ZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCWRzaS0+Z3JmX3JlZ21hcCA9IHN5c2Nv bl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGUobnAsICJyb2NrY2hpcCxncmYiKTsKKwlpZiAoSVNf RVJSKGRzaS0+Z3JmX3JlZ21hcCkpIHsKKwkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIlVuYWJs ZSB0byBnZXQgcm9ja2NoaXAsZ3JmXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoZHNpLT5ncmZfcmVn bWFwKTsKKwl9CisKKwlkc2ktPmRldiA9IGRldjsKKwlkc2ktPnBkYXRhLmJhc2UgPSBkc2ktPmJh c2U7CisJZHNpLT5wZGF0YS5tYXhfZGF0YV9sYW5lcyA9IGRzaS0+Y2RhdGEtPm1heF9kYXRhX2xh bmVzOworCWRzaS0+cGRhdGEucGh5X29wcyA9ICZkd19taXBpX2RzaV9yb2NrY2hpcF9waHlfb3Bz OworCWRzaS0+cGRhdGEuaG9zdF9vcHMgPSAmZHdfbWlwaV9kc2lfcm9ja2NoaXBfaG9zdF9vcHM7 CisJZHNpLT5wZGF0YS5wcml2X2RhdGEgPSBkc2k7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRl diwgZHNpKTsKKworCWRzaS0+ZG1kID0gZHdfbWlwaV9kc2lfcHJvYmUocGRldiwgJmRzaS0+cGRh dGEpOworCWlmIChJU19FUlIoZHNpLT5kbWQpKSB7CisJCXJldCA9IFBUUl9FUlIoZHNpLT5kbWQp OworCQlpZiAocmV0ICE9IC1FUFJPQkVfREVGRVIpCisJCQlEUk1fREVWX0VSUk9SKGRldiwKKwkJ CQkgICAgICAiRmFpbGVkIHRvIHByb2JlIGR3X21pcGlfZHNpOiAlZFxuIiwgcmV0KTsKKwkJZ290 byBlcnJfY2xrZGlzYWJsZTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX2Nsa2Rpc2FibGU6CisJ Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+cGxscmVmX2Nsayk7CisJcmV0dXJuIHJldDsKK30K Kworc3RhdGljIGludCBkd19taXBpX2RzaV9yb2NrY2hpcF9yZW1vdmUoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZHdfbWlwaV9kc2lfcm9ja2NoaXAgKmRzaSA9IHBs YXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJZHdfbWlwaV9kc2lfcmVtb3ZlKGRzaS0+ZG1k KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHJvY2tjaGlwX2R3X2Rz aV9jaGlwX2RhdGEgcmszMjg4X2NoaXBfZGF0YVtdID0geworCXsKKwkJLnJlZyA9IDB4ZmY5NjAw MDAsCisJCS5sY2RzZWxfZ3JmX3JlZyA9IFJLMzI4OF9HUkZfU09DX0NPTjYsCisJCS5sY2RzZWxf YmlnID0gSElXT1JEX1VQREFURSgwLCBSSzMyODhfRFNJMF9MQ0RDX1NFTCksCisJCS5sY2RzZWxf bGl0ID0gSElXT1JEX1VQREFURShSSzMyODhfRFNJMF9MQ0RDX1NFTCwgUkszMjg4X0RTSTBfTENE Q19TRUwpLAorCisJCS5tYXhfZGF0YV9sYW5lcyA9IDQsCisJfSwKKwl7CisJCS5yZWcgPSAweGZm OTY0MDAwLAorCQkubGNkc2VsX2dyZl9yZWcgPSBSSzMyODhfR1JGX1NPQ19DT042LAorCQkubGNk c2VsX2JpZyA9IEhJV09SRF9VUERBVEUoMCwgUkszMjg4X0RTSTFfTENEQ19TRUwpLAorCQkubGNk c2VsX2xpdCA9IEhJV09SRF9VUERBVEUoUkszMjg4X0RTSTFfTENEQ19TRUwsIFJLMzI4OF9EU0kx X0xDRENfU0VMKSwKKworCQkubWF4X2RhdGFfbGFuZXMgPSA0LAorCX0sCisJeyAvKiBzZW50aW5l bCAqLyB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJvY2tjaGlwX2R3X2RzaV9jaGlwX2Rh dGEgcmszMzk5X2NoaXBfZGF0YVtdID0geworCXsKKwkJLnJlZyA9IDB4ZmY5NjAwMDAsCisJCS5s Y2RzZWxfZ3JmX3JlZyA9IFJLMzM5OV9HUkZfU09DX0NPTjIwLAorCQkubGNkc2VsX2JpZyA9IEhJ V09SRF9VUERBVEUoMCwgUkszMzk5X0RTSTBfTENEQ19TRUwpLAorCQkubGNkc2VsX2xpdCA9IEhJ V09SRF9VUERBVEUoUkszMzk5X0RTSTBfTENEQ19TRUwsCisJCQkJCSAgICBSSzMzOTlfRFNJMF9M Q0RDX1NFTCksCisKKwkJLmxhbmVjZmcxX2dyZl9yZWcgPSBSSzMzOTlfR1JGX1NPQ19DT04yMiwK KwkJLmxhbmVjZmcxID0gSElXT1JEX1VQREFURSgwLCBSSzMzOTlfRFNJMF9UVVJOUkVRVUVTVCB8 CisJCQkJCSAgICAgUkszMzk5X0RTSTBfVFVSTkRJU0FCTEUgfAorCQkJCQkgICAgIFJLMzM5OV9E U0kwX0ZPUkNFVFhTVE9QTU9ERSB8CisJCQkJCSAgICAgUkszMzk5X0RTSTBfRk9SQ0VSWE1PREUp LAorCisJCS5mbGFncyA9IERXX01JUElfTkVFRFNfUEhZX0NGR19DTEsgfCBEV19NSVBJX05FRURT X0dSRl9DTEssCisJCS5tYXhfZGF0YV9sYW5lcyA9IDQsCisJfSwKKwl7CisJCS5yZWcgPSAweGZm OTY4MDAwLAorCQkubGNkc2VsX2dyZl9yZWcgPSBSSzMzOTlfR1JGX1NPQ19DT04yMCwKKwkJLmxj ZHNlbF9iaWcgPSBISVdPUkRfVVBEQVRFKDAsIFJLMzM5OV9EU0kxX0xDRENfU0VMKSwKKwkJLmxj ZHNlbF9saXQgPSBISVdPUkRfVVBEQVRFKFJLMzM5OV9EU0kxX0xDRENfU0VMLAorCQkJCQkgICAg UkszMzk5X0RTSTFfTENEQ19TRUwpLAorCisJCS5sYW5lY2ZnMV9ncmZfcmVnID0gUkszMzk5X0dS Rl9TT0NfQ09OMjMsCisJCS5sYW5lY2ZnMSA9IEhJV09SRF9VUERBVEUoMCwgUkszMzk5X0RTSTFf VFVSTkRJU0FCTEUgfAorCQkJCQkgICAgIFJLMzM5OV9EU0kxX0ZPUkNFVFhTVE9QTU9ERSB8CisJ CQkJCSAgICAgUkszMzk5X0RTSTFfRk9SQ0VSWE1PREUgfAorCQkJCQkgICAgIFJLMzM5OV9EU0kx X0VOQUJMRSksCisKKwkJLmxhbmVjZmcyX2dyZl9yZWcgPSBSSzMzOTlfR1JGX1NPQ19DT04yNCwK KwkJLmxhbmVjZmcyID0gSElXT1JEX1VQREFURShSSzMzOTlfVFhSWF9NQVNURVJTTEFWRVogfAor CQkJCQkgIFJLMzM5OV9UWFJYX0VOQUJMRUNMSywKKwkJCQkJICBSSzMzOTlfVFhSWF9NQVNURVJT TEFWRVogfAorCQkJCQkgIFJLMzM5OV9UWFJYX0VOQUJMRUNMSyB8CisJCQkJCSAgUkszMzk5X1RY UlhfQkFTRURJUiksCisKKwkJLmVuYWJsZV9ncmZfcmVnID0gUkszMzk5X0dSRl9TT0NfQ09OMjMs CisJCS5lbmFibGUgPSBISVdPUkRfVVBEQVRFKFJLMzM5OV9EU0kxX0VOQUJMRSwgUkszMzk5X0RT STFfRU5BQkxFKSwKKworCQkuZmxhZ3MgPSBEV19NSVBJX05FRURTX1BIWV9DRkdfQ0xLIHwgRFdf TUlQSV9ORUVEU19HUkZfQ0xLLAorCQkubWF4X2RhdGFfbGFuZXMgPSA0LAorCX0sCisJeyAvKiBz ZW50aW5lbCAqLyB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBkd19t aXBpX2RzaV9yb2NrY2hpcF9kdF9pZHNbXSA9IHsKKwl7CisJIC5jb21wYXRpYmxlID0gInJvY2tj aGlwLHJrMzI4OC1taXBpLWRzaSIsCisJIC5kYXRhID0gJnJrMzI4OF9jaGlwX2RhdGEsCisJfSwg eworCSAuY29tcGF0aWJsZSA9ICJyb2NrY2hpcCxyazMzOTktbWlwaS1kc2kiLAorCSAuZGF0YSA9 ICZyazMzOTlfY2hpcF9kYXRhLAorCX0sCisJeyAvKiBzZW50aW5lbCAqLyB9Cit9OworTU9EVUxF X0RFVklDRV9UQUJMRShvZiwgZHdfbWlwaV9kc2lfcm9ja2NoaXBfZHRfaWRzKTsKKworc3RydWN0 IHBsYXRmb3JtX2RyaXZlciBkd19taXBpX2RzaV9yb2NrY2hpcF9kcml2ZXIgPSB7CisJLnByb2Jl CQk9IGR3X21pcGlfZHNpX3JvY2tjaGlwX3Byb2JlLAorCS5yZW1vdmUJCT0gZHdfbWlwaV9kc2lf cm9ja2NoaXBfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkub2ZfbWF0Y2hfdGFibGUgPSBkd19t aXBpX2RzaV9yb2NrY2hpcF9kdF9pZHMsCisJCS5uYW1lCT0gImR3LW1pcGktZHNpLXJvY2tjaGlw IiwKKwl9LAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9kdy1taXBp LWRzaS5jIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2R3LW1pcGktZHNpLmMKZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2MmI2Y2I1ZDNmMC4uMDAwMDAwMDAwMDAwCi0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9kdy1taXBpLWRzaS5jCisrKyAvZGV2L251bGwKQEAgLTEs MTM0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE2LCBGdXpob3UgUm9ja2NoaXAg RWxlY3Ryb25pY3MgQ28uLCBMdGQKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkK LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhl IExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICov Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcG9uZW50Lmg+Ci0j aW5jbHVkZSA8bGludXgvaW9wb2xsLmg+Ci0jaW5jbHVkZSA8bGludXgvbWF0aDY0Lmg+Ci0jaW5j bHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Ci0jaW5j bHVkZSA8bGludXgvcG1fcnVudGltZS5oPgotI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgotI2lu Y2x1ZGUgPGxpbnV4L3Jlc2V0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi5oPgotI2lu Y2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgotI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5o PgotI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KLSNpbmNsdWRlIDxkcm0vZHJtX21p cGlfZHNpLmg+Ci0jaW5jbHVkZSA8ZHJtL2RybV9vZi5oPgotI2luY2x1ZGUgPGRybS9kcm1fcGFu ZWwuaD4KLSNpbmNsdWRlIDxkcm0vZHJtUC5oPgotI2luY2x1ZGUgPHZpZGVvL21pcGlfZGlzcGxh eS5oPgotCi0jaW5jbHVkZSAicm9ja2NoaXBfZHJtX2Rydi5oIgotI2luY2x1ZGUgInJvY2tjaGlw X2RybV92b3AuaCIKLQotI2RlZmluZSBEUklWRVJfTkFNRSAgICAiZHctbWlwaS1kc2kiCi0KLSNk ZWZpbmUgUkszMjg4X0dSRl9TT0NfQ09ONgkJMHgwMjVjCi0jZGVmaW5lIFJLMzI4OF9EU0kwX1NF TF9WT1BfTElUCQlCSVQoNikKLSNkZWZpbmUgUkszMjg4X0RTSTFfU0VMX1ZPUF9MSVQJCUJJVCg5 KQotCi0jZGVmaW5lIFJLMzM5OV9HUkZfU09DX0NPTjIwCQkweDYyNTAKLSNkZWZpbmUgUkszMzk5 X0RTSTBfU0VMX1ZPUF9MSVQJCUJJVCgwKQotI2RlZmluZSBSSzMzOTlfRFNJMV9TRUxfVk9QX0xJ VAkJQklUKDQpCi0KLS8qIGRpc2FibGUgdHVybnJlcXVlc3QsIHR1cm5kaXNhYmxlLCBmb3JjZXR4 c3RvcG1vZGUsIGZvcmNlcnhtb2RlICovCi0jZGVmaW5lIFJLMzM5OV9HUkZfU09DX0NPTjIyCQkw eDYyNTgKLSNkZWZpbmUgUkszMzk5X0dSRl9EU0lfTU9ERQkJMHhmZmZmMDAwMAotCi0jZGVmaW5l IERTSV9WRVJTSU9OCQkJMHgwMAotI2RlZmluZSBEU0lfUFdSX1VQCQkJMHgwNAotI2RlZmluZSBS RVNFVAkJCQkwCi0jZGVmaW5lIFBPV0VSVVAJCQkJQklUKDApCi0KLSNkZWZpbmUgRFNJX0NMS01H Ul9DRkcJCQkweDA4Ci0jZGVmaW5lIFRPX0NMS19ESVZJRFNJT04oZGl2KQkJKCgoZGl2KSAmIDB4 ZmYpIDw8IDgpCi0jZGVmaW5lIFRYX0VTQ19DTEtfRElWSURTSU9OKGRpdikJKCgoZGl2KSAmIDB4 ZmYpIDw8IDApCi0KLSNkZWZpbmUgRFNJX0RQSV9WQ0lECQkJMHgwYwotI2RlZmluZSBEUElfVklE KHZpZCkJCQkoKCh2aWQpICYgMHgzKSA8PCAwKQotCi0jZGVmaW5lIERTSV9EUElfQ09MT1JfQ09E SU5HCQkweDEwCi0jZGVmaW5lIEVOMThfTE9PU0VMWQkJCUJJVCg4KQotI2RlZmluZSBEUElfQ09M T1JfQ09ESU5HXzE2QklUXzEJMHgwCi0jZGVmaW5lIERQSV9DT0xPUl9DT0RJTkdfMTZCSVRfMgkw eDEKLSNkZWZpbmUgRFBJX0NPTE9SX0NPRElOR18xNkJJVF8zCTB4MgotI2RlZmluZSBEUElfQ09M T1JfQ09ESU5HXzE4QklUXzEJMHgzCi0jZGVmaW5lIERQSV9DT0xPUl9DT0RJTkdfMThCSVRfMgkw eDQKLSNkZWZpbmUgRFBJX0NPTE9SX0NPRElOR18yNEJJVAkJMHg1Ci0KLSNkZWZpbmUgRFNJX0RQ SV9DRkdfUE9MCQkJMHgxNAotI2RlZmluZSBDT0xPUk1fQUNUSVZFX0xPVwkJQklUKDQpCi0jZGVm aW5lIFNIVVREX0FDVElWRV9MT1cJCUJJVCgzKQotI2RlZmluZSBIU1lOQ19BQ1RJVkVfTE9XCQlC SVQoMikKLSNkZWZpbmUgVlNZTkNfQUNUSVZFX0xPVwkJQklUKDEpCi0jZGVmaW5lIERBVEFFTl9B Q1RJVkVfTE9XCQlCSVQoMCkKLQotI2RlZmluZSBEU0lfRFBJX0xQX0NNRF9USU0JCTB4MTgKLSNk ZWZpbmUgT1VUVkFDVF9MUENNRF9USU1FKHApCQkoKChwKSAmIDB4ZmYpIDw8IDE2KQotI2RlZmlu ZSBJTlZBQ1RfTFBDTURfVElNRShwKQkJKChwKSAmIDB4ZmYpCi0KLSNkZWZpbmUgRFNJX0RCSV9D RkcJCQkweDIwCi0jZGVmaW5lIERTSV9EQklfQ01EU0laRQkJCTB4MjgKLQotI2RlZmluZSBEU0lf UENLSERMX0NGRwkJCTB4MmMKLSNkZWZpbmUgRU5fQ1JDX1JYCQkJQklUKDQpCi0jZGVmaW5lIEVO X0VDQ19SWAkJCUJJVCgzKQotI2RlZmluZSBFTl9CVEEJCQkJQklUKDIpCi0jZGVmaW5lIEVOX0VP VFBfUlgJCQlCSVQoMSkKLSNkZWZpbmUgRU5fRU9UUF9UWAkJCUJJVCgwKQotCi0jZGVmaW5lIERT SV9NT0RFX0NGRwkJCTB4MzQKLSNkZWZpbmUgRU5BQkxFX1ZJREVPX01PREUJCTAKLSNkZWZpbmUg RU5BQkxFX0NNRF9NT0RFCQkJQklUKDApCi0KLSNkZWZpbmUgRFNJX1ZJRF9NT0RFX0NGRwkJMHgz OAotI2RlZmluZSBGUkFNRV9CVEFfQUNLCQkJQklUKDE0KQotI2RlZmluZSBFTkFCTEVfTE9XX1BP V0VSCQkoMHgzZiA8PCA4KQotI2RlZmluZSBFTkFCTEVfTE9XX1BPV0VSX01BU0sJCSgweDNmIDw8 IDgpCi0jZGVmaW5lIFZJRF9NT0RFX1RZUEVfTk9OX0JVUlNUX1NZTkNfUFVMU0VTCTB4MAotI2Rl ZmluZSBWSURfTU9ERV9UWVBFX05PTl9CVVJTVF9TWU5DX0VWRU5UUwkweDEKLSNkZWZpbmUgVklE X01PREVfVFlQRV9CVVJTVAkJCTB4MgotI2RlZmluZSBWSURfTU9ERV9UWVBFX01BU0sJCQkweDMK LQotI2RlZmluZSBEU0lfVklEX1BLVF9TSVpFCQkweDNjCi0jZGVmaW5lIFZJRF9QS1RfU0laRShw KQkJCSgoKHApICYgMHgzZmZmKSA8PCAwKQotI2RlZmluZSBWSURfUEtUX01BWF9TSVpFCQkweDNm ZmYKLQotI2RlZmluZSBEU0lfVklEX0hTQV9USU1FCQkweDQ4Ci0jZGVmaW5lIERTSV9WSURfSEJQ X1RJTUUJCTB4NGMKLSNkZWZpbmUgRFNJX1ZJRF9ITElORV9USU1FCQkweDUwCi0jZGVmaW5lIERT SV9WSURfVlNBX0xJTkVTCQkweDU0Ci0jZGVmaW5lIERTSV9WSURfVkJQX0xJTkVTCQkweDU4Ci0j ZGVmaW5lIERTSV9WSURfVkZQX0xJTkVTCQkweDVjCi0jZGVmaW5lIERTSV9WSURfVkFDVElWRV9M SU5FUwkJMHg2MAotI2RlZmluZSBEU0lfQ01EX01PREVfQ0ZHCQkweDY4Ci0jZGVmaW5lIE1BWF9S RF9QS1RfU0laRV9MUAkJQklUKDI0KQotI2RlZmluZSBEQ1NfTFdfVFhfTFAJCQlCSVQoMTkpCi0j ZGVmaW5lIERDU19TUl8wUF9UWF9MUAkJCUJJVCgxOCkKLSNkZWZpbmUgRENTX1NXXzFQX1RYX0xQ CQkJQklUKDE3KQotI2RlZmluZSBEQ1NfU1dfMFBfVFhfTFAJCQlCSVQoMTYpCi0jZGVmaW5lIEdF Tl9MV19UWF9MUAkJCUJJVCgxNCkKLSNkZWZpbmUgR0VOX1NSXzJQX1RYX0xQCQkJQklUKDEzKQot I2RlZmluZSBHRU5fU1JfMVBfVFhfTFAJCQlCSVQoMTIpCi0jZGVmaW5lIEdFTl9TUl8wUF9UWF9M UAkJCUJJVCgxMSkKLSNkZWZpbmUgR0VOX1NXXzJQX1RYX0xQCQkJQklUKDEwKQotI2RlZmluZSBH RU5fU1dfMVBfVFhfTFAJCQlCSVQoOSkKLSNkZWZpbmUgR0VOX1NXXzBQX1RYX0xQCQkJQklUKDgp Ci0jZGVmaW5lIEVOX0FDS19SUVNUCQkJQklUKDEpCi0jZGVmaW5lIEVOX1RFQVJfRlgJCQlCSVQo MCkKLQotI2RlZmluZSBDTURfTU9ERV9BTExfTFAJCQkoTUFYX1JEX1BLVF9TSVpFX0xQIHwgXAot CQkJCQkgRENTX0xXX1RYX0xQIHwgXAotCQkJCQkgRENTX1NSXzBQX1RYX0xQIHwgXAotCQkJCQkg RENTX1NXXzFQX1RYX0xQIHwgXAotCQkJCQkgRENTX1NXXzBQX1RYX0xQIHwgXAotCQkJCQkgR0VO X0xXX1RYX0xQIHwgXAotCQkJCQkgR0VOX1NSXzJQX1RYX0xQIHwgXAotCQkJCQkgR0VOX1NSXzFQ X1RYX0xQIHwgXAotCQkJCQkgR0VOX1NSXzBQX1RYX0xQIHwgXAotCQkJCQkgR0VOX1NXXzJQX1RY X0xQIHwgXAotCQkJCQkgR0VOX1NXXzFQX1RYX0xQIHwgXAotCQkJCQkgR0VOX1NXXzBQX1RYX0xQ KQotCi0jZGVmaW5lIERTSV9HRU5fSERSCQkJMHg2YwotI2RlZmluZSBHRU5fSERBVEEoZGF0YSkJ CQkoKChkYXRhKSAmIDB4ZmZmZikgPDwgOCkKLSNkZWZpbmUgR0VOX0hEQVRBX01BU0sJCQkoMHhm ZmZmIDw8IDgpCi0jZGVmaW5lIEdFTl9IVFlQRSh0eXBlKQkJCSgoKHR5cGUpICYgMHhmZikgPDwg MCkKLSNkZWZpbmUgR0VOX0hUWVBFX01BU0sJCQkweGZmCi0KLSNkZWZpbmUgRFNJX0dFTl9QTERf REFUQQkJMHg3MAotCi0jZGVmaW5lIERTSV9DTURfUEtUX1NUQVRVUwkJMHg3NAotI2RlZmluZSBH RU5fQ01EX0VNUFRZCQkJQklUKDApCi0jZGVmaW5lIEdFTl9DTURfRlVMTAkJCUJJVCgxKQotI2Rl ZmluZSBHRU5fUExEX1dfRU1QVFkJCQlCSVQoMikKLSNkZWZpbmUgR0VOX1BMRF9XX0ZVTEwJCQlC SVQoMykKLSNkZWZpbmUgR0VOX1BMRF9SX0VNUFRZCQkJQklUKDQpCi0jZGVmaW5lIEdFTl9QTERf Ul9GVUxMCQkJQklUKDUpCi0jZGVmaW5lIEdFTl9SRF9DTURfQlVTWQkJCUJJVCg2KQotCi0jZGVm aW5lIERTSV9UT19DTlRfQ0ZHCQkJMHg3OAotI2RlZmluZSBIU1RYX1RPX0NOVChwKQkJCSgoKHAp ICYgMHhmZmZmKSA8PCAxNikKLSNkZWZpbmUgTFBSWF9UT19DTlQocCkJCQkoKHApICYgMHhmZmZm KQotCi0jZGVmaW5lIERTSV9CVEFfVE9fQ05UCQkJMHg4YwotI2RlZmluZSBEU0lfTFBDTEtfQ1RS TAkJCTB4OTQKLSNkZWZpbmUgQVVUT19DTEtMQU5FX0NUUkwJCUJJVCgxKQotI2RlZmluZSBQSFlf VFhSRVFVRVNUQ0xLSFMJCUJJVCgwKQotCi0jZGVmaW5lIERTSV9QSFlfVE1SX0xQQ0xLX0NGRwkJ MHg5OAotI2RlZmluZSBQSFlfQ0xLSFMyTFBfVElNRShsYmNjKQkJKCgobGJjYykgJiAweDNmZikg PDwgMTYpCi0jZGVmaW5lIFBIWV9DTEtMUDJIU19USU1FKGxiY2MpCQkoKGxiY2MpICYgMHgzZmYp Ci0KLSNkZWZpbmUgRFNJX1BIWV9UTVJfQ0ZHCQkJMHg5YwotI2RlZmluZSBQSFlfSFMyTFBfVElN RShsYmNjKQkJKCgobGJjYykgJiAweGZmKSA8PCAyNCkKLSNkZWZpbmUgUEhZX0xQMkhTX1RJTUUo bGJjYykJCSgoKGxiY2MpICYgMHhmZikgPDwgMTYpCi0jZGVmaW5lIE1BWF9SRF9USU1FKGxiY2Mp CQkoKGxiY2MpICYgMHg3ZmZmKQotCi0jZGVmaW5lIERTSV9QSFlfUlNUWgkJCTB4YTAKLSNkZWZp bmUgUEhZX0RJU0ZPUkNFUExMCQkJMAotI2RlZmluZSBQSFlfRU5GT1JDRVBMTAkJCUJJVCgzKQot I2RlZmluZSBQSFlfRElTQUJMRUNMSwkJCTAKLSNkZWZpbmUgUEhZX0VOQUJMRUNMSwkJCUJJVCgy KQotI2RlZmluZSBQSFlfUlNUWgkJCTAKLSNkZWZpbmUgUEhZX1VOUlNUWgkJCUJJVCgxKQotI2Rl ZmluZSBQSFlfU0hVVERPV05aCQkJMAotI2RlZmluZSBQSFlfVU5TSFVURE9XTloJCQlCSVQoMCkK LQotI2RlZmluZSBEU0lfUEhZX0lGX0NGRwkJCTB4YTQKLSNkZWZpbmUgTl9MQU5FUyhuKQkJCSgo KChuKSAtIDEpICYgMHgzKSA8PCAwKQotI2RlZmluZSBQSFlfU1RPUF9XQUlUX1RJTUUoY3ljbGUp CSgoKGN5Y2xlKSAmIDB4ZmYpIDw8IDgpCi0KLSNkZWZpbmUgRFNJX1BIWV9TVEFUVVMJCQkweGIw Ci0jZGVmaW5lIExPQ0sJCQkJQklUKDApCi0jZGVmaW5lIFNUT1BfU1RBVEVfQ0xLX0xBTkUJCUJJ VCgyKQotCi0jZGVmaW5lIERTSV9QSFlfVFNUX0NUUkwwCQkweGI0Ci0jZGVmaW5lIFBIWV9URVNU Q0xLCQkJQklUKDEpCi0jZGVmaW5lIFBIWV9VTlRFU1RDTEsJCQkwCi0jZGVmaW5lIFBIWV9URVNU Q0xSCQkJQklUKDApCi0jZGVmaW5lIFBIWV9VTlRFU1RDTFIJCQkwCi0KLSNkZWZpbmUgRFNJX1BI WV9UU1RfQ1RSTDEJCTB4YjgKLSNkZWZpbmUgUEhZX1RFU1RFTgkJCUJJVCgxNikKLSNkZWZpbmUg UEhZX1VOVEVTVEVOCQkJMAotI2RlZmluZSBQSFlfVEVTVERPVVQobikJCQkoKChuKSAmIDB4ZmYp IDw8IDgpCi0jZGVmaW5lIFBIWV9URVNURElOKG4pCQkJKCgobikgJiAweGZmKSA8PCAwKQotCi0j ZGVmaW5lIERTSV9JTlRfU1QwCQkJMHhiYwotI2RlZmluZSBEU0lfSU5UX1NUMQkJCTB4YzAKLSNk ZWZpbmUgRFNJX0lOVF9NU0swCQkJMHhjNAotI2RlZmluZSBEU0lfSU5UX01TSzEJCQkweGM4Ci0K LSNkZWZpbmUgUEhZX1NUQVRVU19USU1FT1VUX1VTCQkxMDAwMAotI2RlZmluZSBDTURfUEtUX1NU QVRVU19USU1FT1VUX1VTCTIwMDAwCi0KLSNkZWZpbmUgQllQQVNTX1ZDT19SQU5HRQlCSVQoNykK LSNkZWZpbmUgVkNPX1JBTkdFX0NPTl9TRUwodmFsKQkoKCh2YWwpICYgMHg3KSA8PCAzKQotI2Rl ZmluZSBWQ09fSU5fQ0FQX0NPTl9ERUZBVUxUCSgweDAgPDwgMSkKLSNkZWZpbmUgVkNPX0lOX0NB UF9DT05fTE9XCSgweDEgPDwgMSkKLSNkZWZpbmUgVkNPX0lOX0NBUF9DT05fSElHSAkoMHgyIDw8 IDEpCi0jZGVmaW5lIFJFRl9CSUFTX0NVUl9TRUwJQklUKDApCi0KLSNkZWZpbmUgQ1BfQ1VSUkVO VF8zTUEJCUJJVCgzKQotI2RlZmluZSBDUF9QUk9HUkFNX0VOCQlCSVQoNykKLSNkZWZpbmUgTFBG X1BST0dSQU1fRU4JCUJJVCg2KQotI2RlZmluZSBMUEZfUkVTSVNUT1JTXzIwX0tPSE0JMAotCi0j ZGVmaW5lIEhTRlJFUVJBTkdFX1NFTCh2YWwpCSgoKHZhbCkgJiAweDNmKSA8PCAxKQotCi0jZGVm aW5lIElOUFVUX0RJVklERVIodmFsKQkoKCh2YWwpIC0gMSkgJiAweDdmKQotI2RlZmluZSBMT1df UFJPR1JBTV9FTgkJMAotI2RlZmluZSBISUdIX1BST0dSQU1fRU4JCUJJVCg3KQotI2RlZmluZSBM T09QX0RJVl9MT1dfU0VMKHZhbCkJKCgodmFsKSAtIDEpICYgMHgxZikKLSNkZWZpbmUgTE9PUF9E SVZfSElHSF9TRUwodmFsKQkoKCgodmFsKSAtIDEpID4+IDUpICYgMHgxZikKLSNkZWZpbmUgUExM X0xPT1BfRElWX0VOCQlCSVQoNSkKLSNkZWZpbmUgUExMX0lOUFVUX0RJVl9FTglCSVQoNCkKLQot I2RlZmluZSBQT1dFUl9DT05UUk9MCQlCSVQoNikKLSNkZWZpbmUgSU5URVJOQUxfUkVHX0NVUlJF TlQJQklUKDMpCi0jZGVmaW5lIEJJQVNfQkxPQ0tfT04JCUJJVCgyKQotI2RlZmluZSBCQU5ER0FQ X09OCQlCSVQoMCkKLQotI2RlZmluZSBURVJfUkVTSVNUT1JfSElHSAlCSVQoNykKLSNkZWZpbmUJ VEVSX1JFU0lTVE9SX0xPVwkwCi0jZGVmaW5lIExFVkVMX1NISUZURVJTX09OCUJJVCg2KQotI2Rl ZmluZSBURVJfQ0FMX0RPTkUJCUJJVCg1KQotI2RlZmluZSBTRVRSRF9NQVgJCSgweDcgPDwgMikK LSNkZWZpbmUgUE9XRVJfTUFOQUdFCQlCSVQoMSkKLSNkZWZpbmUgVEVSX1JFU0lTVE9SU19PTglC SVQoMCkKLQotI2RlZmluZSBCSUFTRVhUUl9TRUwodmFsKQkoKHZhbCkgJiAweDcpCi0jZGVmaW5l IEJBTkRHQVBfU0VMKHZhbCkJKCh2YWwpICYgMHg3KQotI2RlZmluZSBUTFBfUFJPR1JBTV9FTgkJ QklUKDcpCi0jZGVmaW5lIFRIU19QUkVfUFJPR1JBTV9FTglCSVQoNykKLSNkZWZpbmUgVEhTX1pF Uk9fUFJPR1JBTV9FTglCSVQoNikKLQotI2RlZmluZSBEV19NSVBJX05FRURTX1BIWV9DRkdfQ0xL CUJJVCgwKQotI2RlZmluZSBEV19NSVBJX05FRURTX0dSRl9DTEsJCUJJVCgxKQotCi1lbnVtIHsK LQlCQU5ER0FQXzk3XzA3LAotCUJBTkRHQVBfOThfMDUsCi0JQkFOREdBUF85OV8wMiwKLQlCQU5E R0FQXzEwMF8wMCwKLQlCQU5ER0FQXzkzXzE3LAotCUJBTkRHQVBfOTRfMTUsCi0JQkFOREdBUF85 NV8xMiwKLQlCQU5ER0FQXzk2XzEwLAotfTsKLQotZW51bSB7Ci0JQklBU0VYVFJfODdfMSwKLQlC SUFTRVhUUl85MV81LAotCUJJQVNFWFRSXzk1XzksCi0JQklBU0VYVFJfMTAwLAotCUJJQVNFWFRS XzEwNV85NCwKLQlCSUFTRVhUUl8xMTFfODgsCi0JQklBU0VYVFJfMTE4XzgsCi0JQklBU0VYVFJf MTI3XzcsCi19OwotCi1zdHJ1Y3QgZHdfbWlwaV9kc2lfcGxhdF9kYXRhIHsKLQl1MzIgZHNpMF9l bl9iaXQ7Ci0JdTMyIGRzaTFfZW5fYml0OwotCXUzMiBncmZfc3dpdGNoX3JlZzsKLQl1MzIgZ3Jm X2RzaTBfbW9kZTsKLQl1MzIgZ3JmX2RzaTBfbW9kZV9yZWc7Ci0JdW5zaWduZWQgaW50IGZsYWdz OwotCXVuc2lnbmVkIGludCBtYXhfZGF0YV9sYW5lczsKLX07Ci0KLXN0cnVjdCBkd19taXBpX2Rz aSB7Ci0Jc3RydWN0IGRybV9lbmNvZGVyIGVuY29kZXI7Ci0Jc3RydWN0IGRybV9jb25uZWN0b3Ig Y29ubmVjdG9yOwotCXN0cnVjdCBtaXBpX2RzaV9ob3N0IGRzaV9ob3N0OwotCXN0cnVjdCBkcm1f cGFuZWwgKnBhbmVsOwotCXN0cnVjdCBkZXZpY2UgKmRldjsKLQlzdHJ1Y3QgcmVnbWFwICpncmZf cmVnbWFwOwotCXZvaWQgX19pb21lbSAqYmFzZTsKLQotCXN0cnVjdCBjbGsgKmdyZl9jbGs7Ci0J c3RydWN0IGNsayAqcGxscmVmX2NsazsKLQlzdHJ1Y3QgY2xrICpwY2xrOwotCXN0cnVjdCBjbGsg KnBoeV9jZmdfY2xrOwotCi0JaW50IGRwbXNfbW9kZTsKLQl1bnNpZ25lZCBpbnQgbGFuZV9tYnBz OyAvKiBwZXIgbGFuZSAqLwotCXUzMiBjaGFubmVsOwotCXUzMiBsYW5lczsKLQl1MzIgZm9ybWF0 OwotCXUxNiBpbnB1dF9kaXY7Ci0JdTE2IGZlZWRiYWNrX2RpdjsKLQl1bnNpZ25lZCBsb25nIG1v ZGVfZmxhZ3M7Ci0KLQljb25zdCBzdHJ1Y3QgZHdfbWlwaV9kc2lfcGxhdF9kYXRhICpwZGF0YTsK LX07Ci0KLWVudW0gZHdfbWlwaV9kc2lfbW9kZSB7Ci0JRFdfTUlQSV9EU0lfQ01EX01PREUsCi0J RFdfTUlQSV9EU0lfVklEX01PREUsCi19OwotCi1zdHJ1Y3QgZHBoeV9wbGxfdGVzdGRpbl9tYXAg ewotCXVuc2lnbmVkIGludCBtYXhfbWJwczsKLQl1OCB0ZXN0ZGluOwotfTsKLQotLyogVGhlIHRh YmxlIGlzIGJhc2VkIG9uIDI3TUh6IERQSFkgcGxsIHJlZmVyZW5jZSBjbG9jay4gKi8KLXN0YXRp YyBjb25zdCBzdHJ1Y3QgZHBoeV9wbGxfdGVzdGRpbl9tYXAgZHB0ZGluX21hcFtdID0gewotCXsg IDkwLCAweDAwfSwgeyAxMDAsIDB4MTB9LCB7IDExMCwgMHgyMH0sIHsgMTMwLCAweDAxfSwKLQl7 IDE0MCwgMHgxMX0sIHsgMTUwLCAweDIxfSwgeyAxNzAsIDB4MDJ9LCB7IDE4MCwgMHgxMn0sCi0J eyAyMDAsIDB4MjJ9LCB7IDIyMCwgMHgwM30sIHsgMjQwLCAweDEzfSwgeyAyNTAsIDB4MjN9LAot CXsgMjcwLCAweDA0fSwgeyAzMDAsIDB4MTR9LCB7IDMzMCwgMHgwNX0sIHsgMzYwLCAweDE1fSwK LQl7IDQwMCwgMHgyNX0sIHsgNDUwLCAweDA2fSwgeyA1MDAsIDB4MTZ9LCB7IDU1MCwgMHgwN30s Ci0JeyA2MDAsIDB4MTd9LCB7IDY1MCwgMHgwOH0sIHsgNzAwLCAweDE4fSwgeyA3NTAsIDB4MDl9 LAotCXsgODAwLCAweDE5fSwgeyA4NTAsIDB4Mjl9LCB7IDkwMCwgMHgzOX0sIHsgOTUwLCAweDBh fSwKLQl7MTAwMCwgMHgxYX0sIHsxMDUwLCAweDJhfSwgezExMDAsIDB4M2F9LCB7MTE1MCwgMHgw Yn0sCi0JezEyMDAsIDB4MWJ9LCB7MTI1MCwgMHgyYn0sIHsxMzAwLCAweDNifSwgezEzNTAsIDB4 MGN9LAotCXsxNDAwLCAweDFjfSwgezE0NTAsIDB4MmN9LCB7MTUwMCwgMHgzY30KLX07Ci0KLXN0 YXRpYyBpbnQgbWF4X21icHNfdG9fdGVzdGRpbih1bnNpZ25lZCBpbnQgbWF4X21icHMpCi17Ci0J aW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkcHRkaW5fbWFwKTsgaSsrKQot CQlpZiAoZHB0ZGluX21hcFtpXS5tYXhfbWJwcyA+IG1heF9tYnBzKQotCQkJcmV0dXJuIGRwdGRp bl9tYXBbaV0udGVzdGRpbjsKLQotCXJldHVybiAtRUlOVkFMOwotfQotCi0vKgotICogVGhlIGNv bnRyb2xsZXIgc2hvdWxkIGdlbmVyYXRlIDIgZnJhbWVzIGJlZm9yZQotICogcHJlcGFyaW5nIHRo ZSBwZXJpcGhlcmFsLgotICovCi1zdGF0aWMgdm9pZCBkd19taXBpX2RzaV93YWl0X2Zvcl90d29f ZnJhbWVzKHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQotewotCWludCByZWZyZXNoLCB0 d29fZnJhbWVzOwotCi0JcmVmcmVzaCA9IGRybV9tb2RlX3ZyZWZyZXNoKG1vZGUpOwotCXR3b19m cmFtZXMgPSBESVZfUk9VTkRfVVAoTVNFQ19QRVJfU0VDLCByZWZyZXNoKSAqIDI7Ci0JbXNsZWVw KHR3b19mcmFtZXMpOwotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBkd19taXBpX2RzaSAqaG9z dF90b19kc2koc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QpCi17Ci0JcmV0dXJuIGNvbnRhaW5l cl9vZihob3N0LCBzdHJ1Y3QgZHdfbWlwaV9kc2ksIGRzaV9ob3N0KTsKLX0KLQotc3RhdGljIGlu bGluZSBzdHJ1Y3QgZHdfbWlwaV9kc2kgKmNvbl90b19kc2koc3RydWN0IGRybV9jb25uZWN0b3Ig KmNvbikKLXsKLQlyZXR1cm4gY29udGFpbmVyX29mKGNvbiwgc3RydWN0IGR3X21pcGlfZHNpLCBj b25uZWN0b3IpOwotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBkd19taXBpX2RzaSAqZW5jb2Rl cl90b19kc2koc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQotewotCXJldHVybiBjb250YWlu ZXJfb2YoZW5jb2Rlciwgc3RydWN0IGR3X21pcGlfZHNpLCBlbmNvZGVyKTsKLX0KLQotc3RhdGlj IGlubGluZSB2b2lkIGRzaV93cml0ZShzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwgdTMyIHJlZywg dTMyIHZhbCkKLXsKLQl3cml0ZWwodmFsLCBkc2ktPmJhc2UgKyByZWcpOwotfQotCi1zdGF0aWMg aW5saW5lIHUzMiBkc2lfcmVhZChzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwgdTMyIHJlZykKLXsK LQlyZXR1cm4gcmVhZGwoZHNpLT5iYXNlICsgcmVnKTsKLX0KLQotc3RhdGljIHZvaWQgZHdfbWlw aV9kc2lfcGh5X3dyaXRlKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLCB1OCB0ZXN0X2NvZGUsCi0J CQkJICB1OCB0ZXN0X2RhdGEpCi17Ci0JLyoKLQkgKiBXaXRoIHRoZSBmYWxsaW5nIGVkZ2Ugb24g VEVTVENMSywgdGhlIFRFU1RESU5bNzowXSBzaWduYWwgY29udGVudAotCSAqIGlzIGxhdGNoZWQg aW50ZXJuYWxseSBhcyB0aGUgY3VycmVudCB0ZXN0IGNvZGUuIFRlc3QgZGF0YSBpcwotCSAqIHBy b2dyYW1tZWQgaW50ZXJuYWxseSBieSByaXNpbmcgZWRnZSBvbiBURVNUQ0xLLgotCSAqLwotCWRz aV93cml0ZShkc2ksIERTSV9QSFlfVFNUX0NUUkwwLCBQSFlfVEVTVENMSyB8IFBIWV9VTlRFU1RD TFIpOwotCi0JZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9UU1RfQ1RSTDEsIFBIWV9URVNURU4gfCBQ SFlfVEVTVERPVVQoMCkgfAotCQkJCQkgIFBIWV9URVNURElOKHRlc3RfY29kZSkpOwotCi0JZHNp X3dyaXRlKGRzaSwgRFNJX1BIWV9UU1RfQ1RSTDAsIFBIWV9VTlRFU1RDTEsgfCBQSFlfVU5URVNU Q0xSKTsKLQotCWRzaV93cml0ZShkc2ksIERTSV9QSFlfVFNUX0NUUkwxLCBQSFlfVU5URVNURU4g fCBQSFlfVEVTVERPVVQoMCkgfAotCQkJCQkgIFBIWV9URVNURElOKHRlc3RfZGF0YSkpOwotCi0J ZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9UU1RfQ1RSTDAsIFBIWV9URVNUQ0xLIHwgUEhZX1VOVEVT VENMUik7Ci19Ci0KLS8qKgotICogbnMyYmMgLSBOYW5vc2Vjb25kcyB0byBieXRlIGNsb2NrIGN5 Y2xlcwotICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBuczJiYyhzdHJ1Y3QgZHdfbWlw aV9kc2kgKmRzaSwgaW50IG5zKQotewotCXJldHVybiBESVZfUk9VTkRfVVAobnMgKiBkc2ktPmxh bmVfbWJwcyAvIDgsIDEwMDApOwotfQotCi0vKioKLSAqIG5zMnVpIC0gTmFub3NlY29uZHMgdG8g VUkgdGltZSBwZXJpb2RzCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG5zMnVpKHN0 cnVjdCBkd19taXBpX2RzaSAqZHNpLCBpbnQgbnMpCi17Ci0JcmV0dXJuIERJVl9ST1VORF9VUChu cyAqIGRzaS0+bGFuZV9tYnBzLCAxMDAwKTsKLX0KLQotc3RhdGljIGludCBkd19taXBpX2RzaV9w aHlfaW5pdChzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKLXsKLQlpbnQgcmV0LCB0ZXN0ZGluLCB2 Y28sIHZhbDsKLQotCXZjbyA9IChkc2ktPmxhbmVfbWJwcyA8IDIwMCkgPyAwIDogKGRzaS0+bGFu ZV9tYnBzICsgMTAwKSAvIDIwMDsKLQotCXRlc3RkaW4gPSBtYXhfbWJwc190b190ZXN0ZGluKGRz aS0+bGFuZV9tYnBzKTsKLQlpZiAodGVzdGRpbiA8IDApIHsKLQkJRFJNX0RFVl9FUlJPUihkc2kt PmRldiwKLQkJCSAgICAgICJmYWlsZWQgdG8gZ2V0IHRlc3RkaW4gZm9yICVkbWJwcyBsYW5lIGNs b2NrXG4iLAotCQkJICAgICAgZHNpLT5sYW5lX21icHMpOwotCQlyZXR1cm4gdGVzdGRpbjsKLQl9 Ci0KLQkvKiBTdGFydCBieSBjbGVhcmluZyBQSFkgc3RhdGUgKi8KLQlkc2lfd3JpdGUoZHNpLCBE U0lfUEhZX1RTVF9DVFJMMCwgUEhZX1VOVEVTVENMUik7Ci0JZHNpX3dyaXRlKGRzaSwgRFNJX1BI WV9UU1RfQ1RSTDAsIFBIWV9URVNUQ0xSKTsKLQlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX1RTVF9D VFJMMCwgUEhZX1VOVEVTVENMUik7Ci0KLQlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5w aHlfY2ZnX2Nsayk7Ci0JaWYgKHJldCkgewotCQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiRmFp bGVkIHRvIGVuYWJsZSBwaHlfY2ZnX2Nsa1xuIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JZHdf bWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgMHgxMCwgQllQQVNTX1ZDT19SQU5HRSB8Ci0JCQkJCSBW Q09fUkFOR0VfQ09OX1NFTCh2Y28pIHwKLQkJCQkJIFZDT19JTl9DQVBfQ09OX0xPVyB8Ci0JCQkJ CSBSRUZfQklBU19DVVJfU0VMKTsKLQotCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4MTEs IENQX0NVUlJFTlRfM01BKTsKLQlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCAweDEyLCBDUF9Q Uk9HUkFNX0VOIHwgTFBGX1BST0dSQU1fRU4gfAotCQkJCQkgTFBGX1JFU0lTVE9SU18yMF9LT0hN KTsKLQotCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4NDQsIEhTRlJFUVJBTkdFX1NFTCh0 ZXN0ZGluKSk7Ci0KLQlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCAweDE3LCBJTlBVVF9ESVZJ REVSKGRzaS0+aW5wdXRfZGl2KSk7Ci0JZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgMHgxOCwg TE9PUF9ESVZfTE9XX1NFTChkc2ktPmZlZWRiYWNrX2RpdikgfAotCQkJCQkgTE9XX1BST0dSQU1f RU4pOwotCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4MTgsIExPT1BfRElWX0hJR0hfU0VM KGRzaS0+ZmVlZGJhY2tfZGl2KSB8Ci0JCQkJCSBISUdIX1BST0dSQU1fRU4pOwotCWR3X21pcGlf ZHNpX3BoeV93cml0ZShkc2ksIDB4MTksIFBMTF9MT09QX0RJVl9FTiB8IFBMTF9JTlBVVF9ESVZf RU4pOwotCi0JZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgMHgyMiwgTE9XX1BST0dSQU1fRU4g fAotCQkJCQkgQklBU0VYVFJfU0VMKEJJQVNFWFRSXzEyN183KSk7Ci0JZHdfbWlwaV9kc2lfcGh5 X3dyaXRlKGRzaSwgMHgyMiwgSElHSF9QUk9HUkFNX0VOIHwKLQkJCQkJIEJBTkRHQVBfU0VMKEJB TkRHQVBfOTZfMTApKTsKLQotCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4MjAsIFBPV0VS X0NPTlRST0wgfCBJTlRFUk5BTF9SRUdfQ1VSUkVOVCB8Ci0JCQkJCSBCSUFTX0JMT0NLX09OIHwg QkFOREdBUF9PTik7Ci0KLQlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCAweDIxLCBURVJfUkVT SVNUT1JfTE9XIHwgVEVSX0NBTF9ET05FIHwKLQkJCQkJIFNFVFJEX01BWCB8IFRFUl9SRVNJU1RP UlNfT04pOwotCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4MjEsIFRFUl9SRVNJU1RPUl9I SUdIIHwgTEVWRUxfU0hJRlRFUlNfT04gfAotCQkJCQkgU0VUUkRfTUFYIHwgUE9XRVJfTUFOQUdF IHwKLQkJCQkJIFRFUl9SRVNJU1RPUlNfT04pOwotCi0JZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRz aSwgMHg2MCwgVExQX1BST0dSQU1fRU4gfCBuczJiYyhkc2ksIDUwMCkpOwotCWR3X21pcGlfZHNp X3BoeV93cml0ZShkc2ksIDB4NjEsIFRIU19QUkVfUFJPR1JBTV9FTiB8IG5zMnVpKGRzaSwgNDAp KTsKLQlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCAweDYyLCBUSFNfWkVST19QUk9HUkFNX0VO IHwgbnMyYmMoZHNpLCAzMDApKTsKLQlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCAweDYzLCBU SFNfUFJFX1BST0dSQU1fRU4gfCBuczJ1aShkc2ksIDEwMCkpOwotCWR3X21pcGlfZHNpX3BoeV93 cml0ZShkc2ksIDB4NjQsIEJJVCg1KSB8IG5zMmJjKGRzaSwgMTAwKSk7Ci0JZHdfbWlwaV9kc2lf cGh5X3dyaXRlKGRzaSwgMHg2NSwgQklUKDUpIHwgKG5zMmJjKGRzaSwgNjApICsgNykpOwotCi0J ZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgMHg3MCwgVExQX1BST0dSQU1fRU4gfCBuczJiYyhk c2ksIDUwMCkpOwotCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4NzEsCi0JCQkgICAgICBU SFNfUFJFX1BST0dSQU1fRU4gfCAobnMydWkoZHNpLCA1MCkgKyA1KSk7Ci0JZHdfbWlwaV9kc2lf cGh5X3dyaXRlKGRzaSwgMHg3MiwKLQkJCSAgICAgIFRIU19aRVJPX1BST0dSQU1fRU4gfCAobnMy YmMoZHNpLCAxNDApICsgMikpOwotCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4NzMsCi0J CQkgICAgICBUSFNfUFJFX1BST0dSQU1fRU4gfCAobnMydWkoZHNpLCA2MCkgKyA4KSk7Ci0JZHdf bWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgMHg3NCwgQklUKDUpIHwgbnMyYmMoZHNpLCAxMDApKTsK LQotCWRzaV93cml0ZShkc2ksIERTSV9QSFlfUlNUWiwgUEhZX0VORk9SQ0VQTEwgfCBQSFlfRU5B QkxFQ0xLIHwKLQkJCQkgICAgIFBIWV9VTlJTVFogfCBQSFlfVU5TSFVURE9XTlopOwotCi0JcmV0 ID0gcmVhZGxfcG9sbF90aW1lb3V0KGRzaS0+YmFzZSArIERTSV9QSFlfU1RBVFVTLAotCQkJCSB2 YWwsIHZhbCAmIExPQ0ssIDEwMDAsIFBIWV9TVEFUVVNfVElNRU9VVF9VUyk7Ci0JaWYgKHJldCA8 IDApIHsKLQkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgImZhaWxlZCB0byB3YWl0IGZvciBwaHkg bG9jayBzdGF0ZVxuIik7Ci0JCWdvdG8gcGh5X2luaXRfZW5kOwotCX0KLQotCXJldCA9IHJlYWRs X3BvbGxfdGltZW91dChkc2ktPmJhc2UgKyBEU0lfUEhZX1NUQVRVUywKLQkJCQkgdmFsLCB2YWwg JiBTVE9QX1NUQVRFX0NMS19MQU5FLCAxMDAwLAotCQkJCSBQSFlfU1RBVFVTX1RJTUVPVVRfVVMp OwotCWlmIChyZXQgPCAwKQotCQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LAotCQkJICAgICAgImZh aWxlZCB0byB3YWl0IGZvciBwaHkgY2xrIGxhbmUgc3RvcCBzdGF0ZVxuIik7Ci0KLXBoeV9pbml0 X2VuZDoKLQljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5waHlfY2ZnX2Nsayk7Ci0KLQlyZXR1 cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGR3X21pcGlfZHNpX2dldF9sYW5lX2JwcyhzdHJ1Y3Qg ZHdfbWlwaV9kc2kgKmRzaSwKLQkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUp Ci17Ci0JdW5zaWduZWQgaW50IGksIHByZTsKLQl1bnNpZ25lZCBsb25nIG1wY2xrLCBwbGxyZWYs IHRtcDsKLQl1bnNpZ25lZCBpbnQgbSA9IDEsIG4gPSAxLCB0YXJnZXRfbWJwcyA9IDEwMDA7Ci0J dW5zaWduZWQgaW50IG1heF9tYnBzID0gZHB0ZGluX21hcFtBUlJBWV9TSVpFKGRwdGRpbl9tYXAp IC0gMV0ubWF4X21icHM7Ci0JaW50IGJwcDsKLQotCWJwcCA9IG1pcGlfZHNpX3BpeGVsX2Zvcm1h dF90b19icHAoZHNpLT5mb3JtYXQpOwotCWlmIChicHAgPCAwKSB7Ci0JCURSTV9ERVZfRVJST1Io ZHNpLT5kZXYsCi0JCQkgICAgICAiZmFpbGVkIHRvIGdldCBicHAgZm9yIHBpeGVsIGZvcm1hdCAl ZFxuIiwKLQkJCSAgICAgIGRzaS0+Zm9ybWF0KTsKLQkJcmV0dXJuIGJwcDsKLQl9Ci0KLQltcGNs ayA9IERJVl9ST1VORF9VUChtb2RlLT5jbG9jaywgTVNFQ19QRVJfU0VDKTsKLQlpZiAobXBjbGsp IHsKLQkJLyogdGFrZSAxIC8gMC44LCBzaW5jZSBtYnBzIG11c3QgYmlnIHRoYW4gYmFuZHdpZHRo IG9mIFJHQiAqLwotCQl0bXAgPSBtcGNsayAqIChicHAgLyBkc2ktPmxhbmVzKSAqIDEwIC8gODsK LQkJaWYgKHRtcCA8IG1heF9tYnBzKQotCQkJdGFyZ2V0X21icHMgPSB0bXA7Ci0JCWVsc2UKLQkJ CURSTV9ERVZfRVJST1IoZHNpLT5kZXYsCi0JCQkJICAgICAgIkRQSFkgY2xvY2sgZnJlcXVlbmN5 IGlzIG91dCBvZiByYW5nZVxuIik7Ci0JfQotCi0JcGxscmVmID0gRElWX1JPVU5EX1VQKGNsa19n ZXRfcmF0ZShkc2ktPnBsbHJlZl9jbGspLCBVU0VDX1BFUl9TRUMpOwotCXRtcCA9IHBsbHJlZjsK LQotCS8qCi0JICogVGhlIGxpbWl0cyBvbiB0aGUgUExMIGRpdmlzb3IgYXJlOgotCSAqCi0JICoJ NU1IeiA8PSAocGxscmVmIC8gbikgPD0gNDBNSHoKLQkgKgotCSAqIHdlIHdhbGsgb3ZlciB0aGVz ZSB2YWx1ZXMgaW4gZGVzY3JlYXNpbmcgb3JkZXIgc28gdGhhdCBpZiB3ZSBoaXQKLQkgKiBhbiBl eGFjdCBtYXRjaCBmb3IgdGFyZ2V0X21icHMgaXQgaXMgbW9yZSBsaWtlbHkgdGhhdCAibSIgd2ls bCBiZQotCSAqIGV2ZW4uCi0JICoKLQkgKiBUT0RPOiBlbnN1cmUgdGhhdCAibSIgaXMgZXZlbiBh ZnRlciB0aGlzIGxvb3AuCi0JICovCi0JZm9yIChpID0gcGxscmVmIC8gNTsgaSA+IChwbGxyZWYg LyA0MCk7IGktLSkgewotCQlwcmUgPSBwbGxyZWYgLyBpOwotCQlpZiAoKHRtcCA+ICh0YXJnZXRf bWJwcyAlIHByZSkpICYmICh0YXJnZXRfbWJwcyAvIHByZSA8IDUxMikpIHsKLQkJCXRtcCA9IHRh cmdldF9tYnBzICUgcHJlOwotCQkJbiA9IGk7Ci0JCQltID0gdGFyZ2V0X21icHMgLyBwcmU7Ci0J CX0KLQkJaWYgKHRtcCA9PSAwKQotCQkJYnJlYWs7Ci0JfQotCi0JZHNpLT5sYW5lX21icHMgPSBw bGxyZWYgLyBuICogbTsKLQlkc2ktPmlucHV0X2RpdiA9IG47Ci0JZHNpLT5mZWVkYmFja19kaXYg PSBtOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZHdfbWlwaV9kc2lfaG9zdF9hdHRh Y2goc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsCi0JCQkJICAgc3RydWN0IG1pcGlfZHNpX2Rl dmljZSAqZGV2aWNlKQotewotCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gaG9zdF90b19kc2ko aG9zdCk7Ci0KLQlpZiAoZGV2aWNlLT5sYW5lcyA+IGRzaS0+cGRhdGEtPm1heF9kYXRhX2xhbmVz KSB7Ci0JCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsCi0JCQkgICAgICAidGhlIG51bWJlciBvZiBk YXRhIGxhbmVzKCV1KSBpcyB0b28gbWFueVxuIiwKLQkJCSAgICAgIGRldmljZS0+bGFuZXMpOwot CQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlkc2ktPmxhbmVzID0gZGV2aWNlLT5sYW5lczsKLQlk c2ktPmNoYW5uZWwgPSBkZXZpY2UtPmNoYW5uZWw7Ci0JZHNpLT5mb3JtYXQgPSBkZXZpY2UtPmZv cm1hdDsKLQlkc2ktPm1vZGVfZmxhZ3MgPSBkZXZpY2UtPm1vZGVfZmxhZ3M7Ci0JZHNpLT5wYW5l bCA9IG9mX2RybV9maW5kX3BhbmVsKGRldmljZS0+ZGV2Lm9mX25vZGUpOwotCWlmICghSVNfRVJS KGRzaS0+cGFuZWwpKQotCQlyZXR1cm4gZHJtX3BhbmVsX2F0dGFjaChkc2ktPnBhbmVsLCAmZHNp LT5jb25uZWN0b3IpOwotCi0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyBpbnQgZHdfbWlw aV9kc2lfaG9zdF9kZXRhY2goc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsCi0JCQkJICAgc3Ry dWN0IG1pcGlfZHNpX2RldmljZSAqZGV2aWNlKQotewotCXN0cnVjdCBkd19taXBpX2RzaSAqZHNp ID0gaG9zdF90b19kc2koaG9zdCk7Ci0KLQlkcm1fcGFuZWxfZGV0YWNoKGRzaS0+cGFuZWwpOwot Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGR3X21pcGlfbWVzc2FnZV9jb25maWcoc3Ry dWN0IGR3X21pcGlfZHNpICpkc2ksCi0JCQkJICAgY29uc3Qgc3RydWN0IG1pcGlfZHNpX21zZyAq bXNnKQotewotCWJvb2wgbHBtID0gbXNnLT5mbGFncyAmIE1JUElfRFNJX01TR19VU0VfTFBNOwot CXUzMiB2YWwgPSAwOwotCi0JaWYgKG1zZy0+ZmxhZ3MgJiBNSVBJX0RTSV9NU0dfUkVRX0FDSykK LQkJdmFsIHw9IEVOX0FDS19SUVNUOwotCWlmIChscG0pCi0JCXZhbCB8PSBDTURfTU9ERV9BTExf TFA7Ci0KLQlkc2lfd3JpdGUoZHNpLCBEU0lfTFBDTEtfQ1RSTCwgbHBtID8gMCA6IFBIWV9UWFJF UVVFU1RDTEtIUyk7Ci0JZHNpX3dyaXRlKGRzaSwgRFNJX0NNRF9NT0RFX0NGRywgdmFsKTsKLX0K LQotc3RhdGljIGludCBkd19taXBpX2RzaV9nZW5fcGt0X2hkcl93cml0ZShzdHJ1Y3QgZHdfbWlw aV9kc2kgKmRzaSwgdTMyIGhkcl92YWwpCi17Ci0JaW50IHJldDsKLQl1MzIgdmFsLCBtYXNrOwot Ci0JcmV0ID0gcmVhZGxfcG9sbF90aW1lb3V0KGRzaS0+YmFzZSArIERTSV9DTURfUEtUX1NUQVRV UywKLQkJCQkgdmFsLCAhKHZhbCAmIEdFTl9DTURfRlVMTCksIDEwMDAsCi0JCQkJIENNRF9QS1Rf U1RBVFVTX1RJTUVPVVRfVVMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCURSTV9ERVZfRVJST1IoZHNp LT5kZXYsCi0JCQkgICAgICAiZmFpbGVkIHRvIGdldCBhdmFpbGFibGUgY29tbWFuZCBGSUZPXG4i KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlkc2lfd3JpdGUoZHNpLCBEU0lfR0VOX0hEUiwgaGRy X3ZhbCk7Ci0KLQltYXNrID0gR0VOX0NNRF9FTVBUWSB8IEdFTl9QTERfV19FTVBUWTsKLQlyZXQg PSByZWFkbF9wb2xsX3RpbWVvdXQoZHNpLT5iYXNlICsgRFNJX0NNRF9QS1RfU1RBVFVTLAotCQkJ CSB2YWwsICh2YWwgJiBtYXNrKSA9PSBtYXNrLAotCQkJCSAxMDAwLCBDTURfUEtUX1NUQVRVU19U SU1FT1VUX1VTKTsKLQlpZiAocmV0IDwgMCkgewotCQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAi ZmFpbGVkIHRvIHdyaXRlIGNvbW1hbmQgRklGT1xuIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0J cmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZHdfbWlwaV9kc2lfZGNzX3Nob3J0X3dyaXRlKHN0 cnVjdCBkd19taXBpX2RzaSAqZHNpLAotCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lf bXNnICptc2cpCi17Ci0JY29uc3QgdTggKnR4X2J1ZiA9IG1zZy0+dHhfYnVmOwotCXUxNiBkYXRh ID0gMDsKLQl1MzIgdmFsOwotCi0JaWYgKG1zZy0+dHhfbGVuID4gMCkKLQkJZGF0YSB8PSB0eF9i dWZbMF07Ci0JaWYgKG1zZy0+dHhfbGVuID4gMSkKLQkJZGF0YSB8PSB0eF9idWZbMV0gPDwgODsK LQotCWlmIChtc2ctPnR4X2xlbiA+IDIpIHsKLQkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwKLQkJ CSAgICAgICJ0b28gbG9uZyB0eCBidWYgbGVuZ3RoICV6dSBmb3Igc2hvcnQgd3JpdGVcbiIsCi0J CQkgICAgICBtc2ctPnR4X2xlbik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXZhbCA9IEdF Tl9IREFUQShkYXRhKSB8IEdFTl9IVFlQRShtc2ctPnR5cGUpOwotCXJldHVybiBkd19taXBpX2Rz aV9nZW5fcGt0X2hkcl93cml0ZShkc2ksIHZhbCk7Ci19Ci0KLXN0YXRpYyBpbnQgZHdfbWlwaV9k c2lfZGNzX2xvbmdfd3JpdGUoc3RydWN0IGR3X21pcGlfZHNpICpkc2ksCi0JCQkJICAgICAgY29u c3Qgc3RydWN0IG1pcGlfZHNpX21zZyAqbXNnKQotewotCWNvbnN0IHU4ICp0eF9idWYgPSBtc2ct PnR4X2J1ZjsKLQlpbnQgbGVuID0gbXNnLT50eF9sZW4sIHBsZF9kYXRhX2J5dGVzID0gc2l6ZW9m KHUzMiksIHJldDsKLQl1MzIgaGRyX3ZhbCA9IEdFTl9IREFUQShtc2ctPnR4X2xlbikgfCBHRU5f SFRZUEUobXNnLT50eXBlKTsKLQl1MzIgcmVtYWluZGVyOwotCXUzMiB2YWw7Ci0KLQlpZiAobXNn LT50eF9sZW4gPCAzKSB7Ci0JCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsCi0JCQkgICAgICAid3Jv bmcgdHggYnVmIGxlbmd0aCAlenUgZm9yIGxvbmcgd3JpdGVcbiIsCi0JCQkgICAgICBtc2ctPnR4 X2xlbik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXdoaWxlIChESVZfUk9VTkRfVVAobGVu LCBwbGRfZGF0YV9ieXRlcykpIHsKLQkJaWYgKGxlbiA8IHBsZF9kYXRhX2J5dGVzKSB7Ci0JCQly ZW1haW5kZXIgPSAwOwotCQkJbWVtY3B5KCZyZW1haW5kZXIsIHR4X2J1ZiwgbGVuKTsKLQkJCWRz aV93cml0ZShkc2ksIERTSV9HRU5fUExEX0RBVEEsIHJlbWFpbmRlcik7Ci0JCQlsZW4gPSAwOwot CQl9IGVsc2UgewotCQkJbWVtY3B5KCZyZW1haW5kZXIsIHR4X2J1ZiwgcGxkX2RhdGFfYnl0ZXMp OwotCQkJZHNpX3dyaXRlKGRzaSwgRFNJX0dFTl9QTERfREFUQSwgcmVtYWluZGVyKTsKLQkJCXR4 X2J1ZiArPSBwbGRfZGF0YV9ieXRlczsKLQkJCWxlbiAtPSBwbGRfZGF0YV9ieXRlczsKLQkJfQot Ci0JCXJldCA9IHJlYWRsX3BvbGxfdGltZW91dChkc2ktPmJhc2UgKyBEU0lfQ01EX1BLVF9TVEFU VVMsCi0JCQkJCSB2YWwsICEodmFsICYgR0VOX1BMRF9XX0ZVTEwpLCAxMDAwLAotCQkJCQkgQ01E X1BLVF9TVEFUVVNfVElNRU9VVF9VUyk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlEUk1fREVWX0VS Uk9SKGRzaS0+ZGV2LAotCQkJCSAgICAgICJmYWlsZWQgdG8gZ2V0IGF2YWlsYWJsZSB3cml0ZSBw YXlsb2FkIEZJRk9cbiIpOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCX0KLQotCXJldHVybiBkd19t aXBpX2RzaV9nZW5fcGt0X2hkcl93cml0ZShkc2ksIGhkcl92YWwpOwotfQotCi1zdGF0aWMgc3Np emVfdCBkd19taXBpX2RzaV9ob3N0X3RyYW5zZmVyKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0 LAotCQkJCQkgY29uc3Qgc3RydWN0IG1pcGlfZHNpX21zZyAqbXNnKQotewotCXN0cnVjdCBkd19t aXBpX2RzaSAqZHNpID0gaG9zdF90b19kc2koaG9zdCk7Ci0JaW50IHJldDsKLQotCWR3X21pcGlf bWVzc2FnZV9jb25maWcoZHNpLCBtc2cpOwotCi0Jc3dpdGNoIChtc2ctPnR5cGUpIHsKLQljYXNl IE1JUElfRFNJX0RDU19TSE9SVF9XUklURToKLQljYXNlIE1JUElfRFNJX0RDU19TSE9SVF9XUklU RV9QQVJBTToKLQljYXNlIE1JUElfRFNJX1NFVF9NQVhJTVVNX1JFVFVSTl9QQUNLRVRfU0laRToK LQkJcmV0ID0gZHdfbWlwaV9kc2lfZGNzX3Nob3J0X3dyaXRlKGRzaSwgbXNnKTsKLQkJYnJlYWs7 Ci0JY2FzZSBNSVBJX0RTSV9EQ1NfTE9OR19XUklURToKLQkJcmV0ID0gZHdfbWlwaV9kc2lfZGNz X2xvbmdfd3JpdGUoZHNpLCBtc2cpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlEUk1fREVWX0VS Uk9SKGRzaS0+ZGV2LCAidW5zdXBwb3J0ZWQgbWVzc2FnZSB0eXBlIDB4JTAyeFxuIiwKLQkJCSAg ICAgIG1zZy0+dHlwZSk7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0K LQotc3RhdGljIGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9ob3N0X29wcyBkd19taXBpX2RzaV9ob3N0 X29wcyA9IHsKLQkuYXR0YWNoID0gZHdfbWlwaV9kc2lfaG9zdF9hdHRhY2gsCi0JLmRldGFjaCA9 IGR3X21pcGlfZHNpX2hvc3RfZGV0YWNoLAotCS50cmFuc2ZlciA9IGR3X21pcGlfZHNpX2hvc3Rf dHJhbnNmZXIsCi19OwotCi1zdGF0aWMgdm9pZCBkd19taXBpX2RzaV92aWRlb19tb2RlX2NvbmZp ZyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKLXsKLQl1MzIgdmFsOwotCi0JdmFsID0gRU5BQkxF X0xPV19QT1dFUjsKLQotCWlmIChkc2ktPm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVP X0JVUlNUKQotCQl2YWwgfD0gVklEX01PREVfVFlQRV9CVVJTVDsKLQllbHNlIGlmIChkc2ktPm1v ZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPX1NZTkNfUFVMU0UpCi0JCXZhbCB8PSBWSURf TU9ERV9UWVBFX05PTl9CVVJTVF9TWU5DX1BVTFNFUzsKLQllbHNlCi0JCXZhbCB8PSBWSURfTU9E RV9UWVBFX05PTl9CVVJTVF9TWU5DX0VWRU5UUzsKLQotCWRzaV93cml0ZShkc2ksIERTSV9WSURf TU9ERV9DRkcsIHZhbCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGR3X21pcGlfZHNpX3NldF9tb2RlKHN0 cnVjdCBkd19taXBpX2RzaSAqZHNpLAotCQkJCSBlbnVtIGR3X21pcGlfZHNpX21vZGUgbW9kZSkK LXsKLQlpZiAobW9kZSA9PSBEV19NSVBJX0RTSV9DTURfTU9ERSkgewotCQlkc2lfd3JpdGUoZHNp LCBEU0lfUFdSX1VQLCBSRVNFVCk7Ci0JCWRzaV93cml0ZShkc2ksIERTSV9NT0RFX0NGRywgRU5B QkxFX0NNRF9NT0RFKTsKLQkJZHNpX3dyaXRlKGRzaSwgRFNJX1BXUl9VUCwgUE9XRVJVUCk7Ci0J fSBlbHNlIHsKLQkJZHNpX3dyaXRlKGRzaSwgRFNJX1BXUl9VUCwgUkVTRVQpOwotCQlkc2lfd3Jp dGUoZHNpLCBEU0lfTU9ERV9DRkcsIEVOQUJMRV9WSURFT19NT0RFKTsKLQkJZHdfbWlwaV9kc2lf dmlkZW9fbW9kZV9jb25maWcoZHNpKTsKLQkJZHNpX3dyaXRlKGRzaSwgRFNJX0xQQ0xLX0NUUkws IFBIWV9UWFJFUVVFU1RDTEtIUyk7Ci0JCWRzaV93cml0ZShkc2ksIERTSV9QV1JfVVAsIFBPV0VS VVApOwotCX0KLX0KLQotc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfZGlzYWJsZShzdHJ1Y3QgZHdf bWlwaV9kc2kgKmRzaSkKLXsKLQlkc2lfd3JpdGUoZHNpLCBEU0lfUFdSX1VQLCBSRVNFVCk7Ci0J ZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9SU1RaLCBQSFlfUlNUWik7Ci19Ci0KLXN0YXRpYyB2b2lk IGR3X21pcGlfZHNpX2luaXQoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCi17Ci0JLyoKLQkgKiBU aGUgbWF4aW11bSBwZXJtaXR0ZWQgZXNjYXBlIGNsb2NrIGlzIDIwTUh6IGFuZCBpdCBpcyBkZXJp dmVkIGZyb20KLQkgKiBsYW5lYnl0ZWNsaywgd2hpY2ggaXMgcnVubmluZyBhdCAibGFuZV9tYnBz IC8gOCIuICBUaHVzIHdlIHdhbnQ6Ci0JICoKLQkgKiAgICAgKGxhbmVfbWJwcyA+PiAzKSAvIGVz Y19jbGtfZGl2aXNpb24gPCAyMAotCSAqIHdoaWNoIGlzOgotCSAqICAgICAobGFuZV9tYnBzID4+ IDMpIC8gMjAgPiBlc2NfY2xrX2RpdmlzaW9uCi0JICovCi0JdTMyIGVzY19jbGtfZGl2aXNpb24g PSAoZHNpLT5sYW5lX21icHMgPj4gMykgLyAyMCArIDE7Ci0KLQlkc2lfd3JpdGUoZHNpLCBEU0lf UFdSX1VQLCBSRVNFVCk7Ci0JZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9SU1RaLCBQSFlfRElTRk9S Q0VQTEwgfCBQSFlfRElTQUJMRUNMSwotCQkgIHwgUEhZX1JTVFogfCBQSFlfU0hVVERPV05aKTsK LQlkc2lfd3JpdGUoZHNpLCBEU0lfQ0xLTUdSX0NGRywgVE9fQ0xLX0RJVklEU0lPTigxMCkgfAot CQkgIFRYX0VTQ19DTEtfRElWSURTSU9OKGVzY19jbGtfZGl2aXNpb24pKTsKLX0KLQotc3RhdGlj IHZvaWQgZHdfbWlwaV9kc2lfZHBpX2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwKLQkJ CQkgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKLXsKLQl1MzIgdmFsID0gMCwgY29s b3IgPSAwOwotCi0Jc3dpdGNoIChkc2ktPmZvcm1hdCkgewotCWNhc2UgTUlQSV9EU0lfRk1UX1JH Qjg4ODoKLQkJY29sb3IgPSBEUElfQ09MT1JfQ09ESU5HXzI0QklUOwotCQlicmVhazsKLQljYXNl IE1JUElfRFNJX0ZNVF9SR0I2NjY6Ci0JCWNvbG9yID0gRFBJX0NPTE9SX0NPRElOR18xOEJJVF8y IHwgRU4xOF9MT09TRUxZOwotCQlicmVhazsKLQljYXNlIE1JUElfRFNJX0ZNVF9SR0I2NjZfUEFD S0VEOgotCQljb2xvciA9IERQSV9DT0xPUl9DT0RJTkdfMThCSVRfMTsKLQkJYnJlYWs7Ci0JY2Fz ZSBNSVBJX0RTSV9GTVRfUkdCNTY1OgotCQljb2xvciA9IERQSV9DT0xPUl9DT0RJTkdfMTZCSVRf MTsKLQkJYnJlYWs7Ci0JfQotCi0JaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OVlNZ TkMpCi0JCXZhbCB8PSBWU1lOQ19BQ1RJVkVfTE9XOwotCWlmIChtb2RlLT5mbGFncyAmIERSTV9N T0RFX0ZMQUdfTkhTWU5DKQotCQl2YWwgfD0gSFNZTkNfQUNUSVZFX0xPVzsKLQotCWRzaV93cml0 ZShkc2ksIERTSV9EUElfVkNJRCwgRFBJX1ZJRChkc2ktPmNoYW5uZWwpKTsKLQlkc2lfd3JpdGUo ZHNpLCBEU0lfRFBJX0NPTE9SX0NPRElORywgY29sb3IpOwotCWRzaV93cml0ZShkc2ksIERTSV9E UElfQ0ZHX1BPTCwgdmFsKTsKLQlkc2lfd3JpdGUoZHNpLCBEU0lfRFBJX0xQX0NNRF9USU0sIE9V VFZBQ1RfTFBDTURfVElNRSg0KQotCQkgIHwgSU5WQUNUX0xQQ01EX1RJTUUoNCkpOwotfQotCi1z dGF0aWMgdm9pZCBkd19taXBpX2RzaV9wYWNrZXRfaGFuZGxlcl9jb25maWcoc3RydWN0IGR3X21p cGlfZHNpICpkc2kpCi17Ci0JZHNpX3dyaXRlKGRzaSwgRFNJX1BDS0hETF9DRkcsIEVOX0NSQ19S WCB8IEVOX0VDQ19SWCB8IEVOX0JUQSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGR3X21pcGlfZHNpX3Zp ZGVvX3BhY2tldF9jb25maWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2ksCi0JCQkJCSAgICBzdHJ1 Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKLXsKLQlkc2lfd3JpdGUoZHNpLCBEU0lfVklEX1BL VF9TSVpFLCBWSURfUEtUX1NJWkUobW9kZS0+aGRpc3BsYXkpKTsKLX0KLQotc3RhdGljIHZvaWQg ZHdfbWlwaV9kc2lfY29tbWFuZF9tb2RlX2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkK LXsKLQlkc2lfd3JpdGUoZHNpLCBEU0lfVE9fQ05UX0NGRywgSFNUWF9UT19DTlQoMTAwMCkgfCBM UFJYX1RPX0NOVCgxMDAwKSk7Ci0JZHNpX3dyaXRlKGRzaSwgRFNJX0JUQV9UT19DTlQsIDB4ZDAw KTsKLQlkc2lfd3JpdGUoZHNpLCBEU0lfTU9ERV9DRkcsIEVOQUJMRV9DTURfTU9ERSk7Ci19Ci0K LS8qIEdldCBsYW5lIGJ5dGUgY2xvY2sgY3ljbGVzLiAqLwotc3RhdGljIHUzMiBkd19taXBpX2Rz aV9nZXRfaGNvbXBvbmVudF9sYmNjKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLAotCQkJCQkgICBz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKLQkJCQkJICAgdTMyIGhjb21wb25lbnQpCi17 Ci0JdTMyIGZyYWMsIGxiY2M7Ci0KLQlsYmNjID0gaGNvbXBvbmVudCAqIGRzaS0+bGFuZV9tYnBz ICogTVNFQ19QRVJfU0VDIC8gODsKLQotCWZyYWMgPSBsYmNjICUgbW9kZS0+Y2xvY2s7Ci0JbGJj YyA9IGxiY2MgLyBtb2RlLT5jbG9jazsKLQlpZiAoZnJhYykKLQkJbGJjYysrOwotCi0JcmV0dXJu IGxiY2M7Ci19Ci0KLXN0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2xpbmVfdGltZXJfY29uZmlnKHN0 cnVjdCBkd19taXBpX2RzaSAqZHNpLAotCQkJCQkgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpt b2RlKQotewotCXUzMiBodG90YWwsIGhzYSwgaGJwLCBsYmNjOwotCi0JaHRvdGFsID0gbW9kZS0+ aHRvdGFsOwotCWhzYSA9IG1vZGUtPmhzeW5jX2VuZCAtIG1vZGUtPmhzeW5jX3N0YXJ0OwotCWhi cCA9IG1vZGUtPmh0b3RhbCAtIG1vZGUtPmhzeW5jX2VuZDsKLQotCWxiY2MgPSBkd19taXBpX2Rz aV9nZXRfaGNvbXBvbmVudF9sYmNjKGRzaSwgbW9kZSwgaHRvdGFsKTsKLQlkc2lfd3JpdGUoZHNp LCBEU0lfVklEX0hMSU5FX1RJTUUsIGxiY2MpOwotCi0JbGJjYyA9IGR3X21pcGlfZHNpX2dldF9o Y29tcG9uZW50X2xiY2MoZHNpLCBtb2RlLCBoc2EpOwotCWRzaV93cml0ZShkc2ksIERTSV9WSURf SFNBX1RJTUUsIGxiY2MpOwotCi0JbGJjYyA9IGR3X21pcGlfZHNpX2dldF9oY29tcG9uZW50X2xi Y2MoZHNpLCBtb2RlLCBoYnApOwotCWRzaV93cml0ZShkc2ksIERTSV9WSURfSEJQX1RJTUUsIGxi Y2MpOwotfQotCi1zdGF0aWMgdm9pZCBkd19taXBpX2RzaV92ZXJ0aWNhbF90aW1pbmdfY29uZmln KHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLAotCQkJCQkgICAgICAgc3RydWN0IGRybV9kaXNwbGF5 X21vZGUgKm1vZGUpCi17Ci0JdTMyIHZhY3RpdmUsIHZzYSwgdmZwLCB2YnA7Ci0KLQl2YWN0aXZl ID0gbW9kZS0+dmRpc3BsYXk7Ci0JdnNhID0gbW9kZS0+dnN5bmNfZW5kIC0gbW9kZS0+dnN5bmNf c3RhcnQ7Ci0JdmZwID0gbW9kZS0+dnN5bmNfc3RhcnQgLSBtb2RlLT52ZGlzcGxheTsKLQl2YnAg PSBtb2RlLT52dG90YWwgLSBtb2RlLT52c3luY19lbmQ7Ci0KLQlkc2lfd3JpdGUoZHNpLCBEU0lf VklEX1ZBQ1RJVkVfTElORVMsIHZhY3RpdmUpOwotCWRzaV93cml0ZShkc2ksIERTSV9WSURfVlNB X0xJTkVTLCB2c2EpOwotCWRzaV93cml0ZShkc2ksIERTSV9WSURfVkZQX0xJTkVTLCB2ZnApOwot CWRzaV93cml0ZShkc2ksIERTSV9WSURfVkJQX0xJTkVTLCB2YnApOwotfQotCi1zdGF0aWMgdm9p ZCBkd19taXBpX2RzaV9kcGh5X3RpbWluZ19jb25maWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2kp Ci17Ci0JZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9UTVJfQ0ZHLCBQSFlfSFMyTFBfVElNRSgweDQw KQotCQkgIHwgUEhZX0xQMkhTX1RJTUUoMHg0MCkgfCBNQVhfUkRfVElNRSgxMDAwMCkpOwotCi0J ZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9UTVJfTFBDTEtfQ0ZHLCBQSFlfQ0xLSFMyTFBfVElNRSgw eDQwKQotCQkgIHwgUEhZX0NMS0xQMkhTX1RJTUUoMHg0MCkpOwotfQotCi1zdGF0aWMgdm9pZCBk d19taXBpX2RzaV9kcGh5X2ludGVyZmFjZV9jb25maWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2kp Ci17Ci0JZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9JRl9DRkcsIFBIWV9TVE9QX1dBSVRfVElNRSgw eDIwKSB8Ci0JCSAgTl9MQU5FUyhkc2ktPmxhbmVzKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGR3X21p cGlfZHNpX2NsZWFyX2VycihzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKLXsKLQlkc2lfcmVhZChk c2ksIERTSV9JTlRfU1QwKTsKLQlkc2lfcmVhZChkc2ksIERTSV9JTlRfU1QxKTsKLQlkc2lfd3Jp dGUoZHNpLCBEU0lfSU5UX01TSzAsIDApOwotCWRzaV93cml0ZShkc2ksIERTSV9JTlRfTVNLMSwg MCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2VuY29kZXJfZGlzYWJsZShzdHJ1Y3Qg ZHJtX2VuY29kZXIgKmVuY29kZXIpCi17Ci0Jc3RydWN0IGR3X21pcGlfZHNpICpkc2kgPSBlbmNv ZGVyX3RvX2RzaShlbmNvZGVyKTsKLQotCWlmIChkc2ktPmRwbXNfbW9kZSAhPSBEUk1fTU9ERV9E UE1TX09OKQotCQlyZXR1cm47Ci0KLQlpZiAoY2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+cGNsaykp IHsKLQkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBlbmFibGUgcGNsa1xuIik7 Ci0JCXJldHVybjsKLQl9Ci0KLQlkcm1fcGFuZWxfZGlzYWJsZShkc2ktPnBhbmVsKTsKLQotCWR3 X21pcGlfZHNpX3NldF9tb2RlKGRzaSwgRFdfTUlQSV9EU0lfQ01EX01PREUpOwotCWRybV9wYW5l bF91bnByZXBhcmUoZHNpLT5wYW5lbCk7Ci0KLQlkd19taXBpX2RzaV9kaXNhYmxlKGRzaSk7Ci0J cG1fcnVudGltZV9wdXQoZHNpLT5kZXYpOwotCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPnBj bGspOwotCWRzaS0+ZHBtc19tb2RlID0gRFJNX01PREVfRFBNU19PRkY7Ci19Ci0KLXN0YXRpYyB2 b2lkIGR3X21pcGlfZHNpX2VuY29kZXJfZW5hYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rl cikKLXsKLQlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGVuY29kZXJfdG9fZHNpKGVuY29kZXIp OwotCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0gJmVuY29kZXItPmNydGMtPnN0YXRl LT5hZGp1c3RlZF9tb2RlOwotCWNvbnN0IHN0cnVjdCBkd19taXBpX2RzaV9wbGF0X2RhdGEgKnBk YXRhID0gZHNpLT5wZGF0YTsKLQlpbnQgbXV4ID0gZHJtX29mX2VuY29kZXJfYWN0aXZlX2VuZHBv aW50X2lkKGRzaS0+ZGV2LT5vZl9ub2RlLCBlbmNvZGVyKTsKLQl1MzIgdmFsOwotCWludCByZXQ7 Ci0KLQlyZXQgPSBkd19taXBpX2RzaV9nZXRfbGFuZV9icHMoZHNpLCBtb2RlKTsKLQlpZiAocmV0 IDwgMCkKLQkJcmV0dXJuOwotCi0JaWYgKGRzaS0+ZHBtc19tb2RlID09IERSTV9NT0RFX0RQTVNf T04pCi0JCXJldHVybjsKLQotCWlmIChjbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5wY2xrKSkgewot CQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBwY2xrXG4iKTsKLQkJ cmV0dXJuOwotCX0KLQotCXBtX3J1bnRpbWVfZ2V0X3N5bmMoZHNpLT5kZXYpOwotCWR3X21pcGlf ZHNpX2luaXQoZHNpKTsKLQlkd19taXBpX2RzaV9kcGlfY29uZmlnKGRzaSwgbW9kZSk7Ci0JZHdf bWlwaV9kc2lfcGFja2V0X2hhbmRsZXJfY29uZmlnKGRzaSk7Ci0JZHdfbWlwaV9kc2lfdmlkZW9f bW9kZV9jb25maWcoZHNpKTsKLQlkd19taXBpX2RzaV92aWRlb19wYWNrZXRfY29uZmlnKGRzaSwg bW9kZSk7Ci0JZHdfbWlwaV9kc2lfY29tbWFuZF9tb2RlX2NvbmZpZyhkc2kpOwotCWR3X21pcGlf ZHNpX2xpbmVfdGltZXJfY29uZmlnKGRzaSwgbW9kZSk7Ci0JZHdfbWlwaV9kc2lfdmVydGljYWxf dGltaW5nX2NvbmZpZyhkc2ksIG1vZGUpOwotCWR3X21pcGlfZHNpX2RwaHlfdGltaW5nX2NvbmZp Zyhkc2kpOwotCWR3X21pcGlfZHNpX2RwaHlfaW50ZXJmYWNlX2NvbmZpZyhkc2kpOwotCWR3X21p cGlfZHNpX2NsZWFyX2Vycihkc2kpOwotCi0JLyoKLQkgKiBGb3IgdGhlIFJLMzM5OSwgdGhlIGNs ayBvZiBncmYgbXVzdCBiZSBlbmFibGVkIGJlZm9yZSB3cml0aW5nIGdyZgotCSAqIHJlZ2lzdGVy LiBBbmQgZm9yIFJLMzI4OCBvciBvdGhlciBzb2MsIHRoaXMgZ3JmX2NsayBtdXN0IGJlIE5VTEws Ci0JICogdGhlIGNsa19wcmVwYXJlX2VuYWJsZSByZXR1cm4gdHJ1ZSBkaXJlY3RseS4KLQkgKi8K LQlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5ncmZfY2xrKTsKLQlpZiAocmV0KSB7Ci0J CURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWlsZWQgdG8gZW5hYmxlIGdyZl9jbGs6ICVkXG4i LCByZXQpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHBkYXRhLT5ncmZfZHNpMF9tb2RlX3JlZykK LQkJcmVnbWFwX3dyaXRlKGRzaS0+Z3JmX3JlZ21hcCwgcGRhdGEtPmdyZl9kc2kwX21vZGVfcmVn LAotCQkJICAgICBwZGF0YS0+Z3JmX2RzaTBfbW9kZSk7Ci0KLQlkd19taXBpX2RzaV9waHlfaW5p dChkc2kpOwotCWR3X21pcGlfZHNpX3dhaXRfZm9yX3R3b19mcmFtZXMobW9kZSk7Ci0KLQlkd19t aXBpX2RzaV9zZXRfbW9kZShkc2ksIERXX01JUElfRFNJX0NNRF9NT0RFKTsKLQlpZiAoZHJtX3Bh bmVsX3ByZXBhcmUoZHNpLT5wYW5lbCkpCi0JCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJmYWls ZWQgdG8gcHJlcGFyZSBwYW5lbFxuIik7Ci0KLQlkd19taXBpX2RzaV9zZXRfbW9kZShkc2ksIERX X01JUElfRFNJX1ZJRF9NT0RFKTsKLQlkcm1fcGFuZWxfZW5hYmxlKGRzaS0+cGFuZWwpOwotCi0J Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+cGNsayk7Ci0KLQlpZiAobXV4KQotCQl2YWwgPSBw ZGF0YS0+ZHNpMF9lbl9iaXQgfCAocGRhdGEtPmRzaTBfZW5fYml0IDw8IDE2KTsKLQllbHNlCi0J CXZhbCA9IHBkYXRhLT5kc2kwX2VuX2JpdCA8PCAxNjsKLQotCXJlZ21hcF93cml0ZShkc2ktPmdy Zl9yZWdtYXAsIHBkYXRhLT5ncmZfc3dpdGNoX3JlZywgdmFsKTsKLQlEUk1fREVWX0RFQlVHKGRz aS0+ZGV2LAotCQkgICAgICAidm9wICVzIG91dHB1dCB0byBkc2kwXG4iLCAobXV4KSA/ICJMSVQi IDogIkJJRyIpOwotCWRzaS0+ZHBtc19tb2RlID0gRFJNX01PREVfRFBNU19PTjsKLQotCWNsa19k aXNhYmxlX3VucHJlcGFyZShkc2ktPmdyZl9jbGspOwotfQotCi1zdGF0aWMgaW50Ci1kd19taXBp X2RzaV9lbmNvZGVyX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCi0J CQkJIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKLQkJCQkgc3RydWN0IGRybV9j b25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUpCi17Ci0Jc3RydWN0IHJvY2tjaGlwX2NydGNfc3Rh dGUgKnMgPSB0b19yb2NrY2hpcF9jcnRjX3N0YXRlKGNydGNfc3RhdGUpOwotCXN0cnVjdCBkd19t aXBpX2RzaSAqZHNpID0gZW5jb2Rlcl90b19kc2koZW5jb2Rlcik7Ci0KLQlzd2l0Y2ggKGRzaS0+ Zm9ybWF0KSB7Ci0JY2FzZSBNSVBJX0RTSV9GTVRfUkdCODg4OgotCQlzLT5vdXRwdXRfbW9kZSA9 IFJPQ0tDSElQX09VVF9NT0RFX1A4ODg7Ci0JCWJyZWFrOwotCWNhc2UgTUlQSV9EU0lfRk1UX1JH QjY2NjoKLQkJcy0+b3V0cHV0X21vZGUgPSBST0NLQ0hJUF9PVVRfTU9ERV9QNjY2OwotCQlicmVh azsKLQljYXNlIE1JUElfRFNJX0ZNVF9SR0I1NjU6Ci0JCXMtPm91dHB1dF9tb2RlID0gUk9DS0NI SVBfT1VUX01PREVfUDU2NTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJV0FSTl9PTigxKTsKLQkJ cmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jcy0+b3V0cHV0X3R5cGUgPSBEUk1fTU9ERV9DT05ORUNU T1JfRFNJOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29k ZXJfaGVscGVyX2Z1bmNzCi1kd19taXBpX2RzaV9lbmNvZGVyX2hlbHBlcl9mdW5jcyA9IHsKLQku ZW5hYmxlID0gZHdfbWlwaV9kc2lfZW5jb2Rlcl9lbmFibGUsCi0JLmRpc2FibGUgPSBkd19taXBp X2RzaV9lbmNvZGVyX2Rpc2FibGUsCi0JLmF0b21pY19jaGVjayA9IGR3X21pcGlfZHNpX2VuY29k ZXJfYXRvbWljX2NoZWNrLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9m dW5jcyBkd19taXBpX2RzaV9lbmNvZGVyX2Z1bmNzID0gewotCS5kZXN0cm95ID0gZHJtX2VuY29k ZXJfY2xlYW51cCwKLX07Ci0KLXN0YXRpYyBpbnQgZHdfbWlwaV9kc2lfY29ubmVjdG9yX2dldF9t b2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQotewotCXN0cnVjdCBkd19taXBp X2RzaSAqZHNpID0gY29uX3RvX2RzaShjb25uZWN0b3IpOwotCi0JcmV0dXJuIGRybV9wYW5lbF9n ZXRfbW9kZXMoZHNpLT5wYW5lbCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9o ZWxwZXJfZnVuY3MgZHdfbWlwaV9kc2lfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKLQkuZ2V0 X21vZGVzID0gZHdfbWlwaV9kc2lfY29ubmVjdG9yX2dldF9tb2RlcywKLX07Ci0KLXN0YXRpYyB2 b2lkIGR3X21pcGlfZHNpX2RybV9jb25uZWN0b3JfZGVzdHJveShzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yKQotewotCWRybV9jb25uZWN0b3JfdW5yZWdpc3Rlcihjb25uZWN0b3IpOwot CWRybV9jb25uZWN0b3JfY2xlYW51cChjb25uZWN0b3IpOwotfQotCi1zdGF0aWMgY29uc3Qgc3Ry dWN0IGRybV9jb25uZWN0b3JfZnVuY3MgZHdfbWlwaV9kc2lfYXRvbWljX2Nvbm5lY3Rvcl9mdW5j cyA9IHsKLQkuZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9t b2RlcywKLQkuZGVzdHJveSA9IGR3X21pcGlfZHNpX2RybV9jb25uZWN0b3JfZGVzdHJveSwKLQku cmVzZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfcmVzZXQsCi0JLmF0b21pY19kdXBs aWNhdGVfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHVwbGljYXRlX3N0YXRl LAotCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9k ZXN0cm95X3N0YXRlLAotfTsKLQotc3RhdGljIGludCBkd19taXBpX2RzaV9yZWdpc3RlcihzdHJ1 Y3QgZHJtX2RldmljZSAqZHJtLAotCQkJCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQotewotCXN0 cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9ICZkc2ktPmVuY29kZXI7Ci0Jc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvciA9ICZkc2ktPmNvbm5lY3RvcjsKLQlzdHJ1Y3QgZGV2aWNlICpk ZXYgPSBkc2ktPmRldjsKLQlpbnQgcmV0OwotCi0JZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MgPSBk cm1fb2ZfZmluZF9wb3NzaWJsZV9jcnRjcyhkcm0sCi0JCQkJCQkJICAgICBkZXYtPm9mX25vZGUp OwotCS8qCi0JICogSWYgd2UgZmFpbGVkIHRvIGZpbmQgdGhlIENSVEMocykgd2hpY2ggdGhpcyBl bmNvZGVyIGlzCi0JICogc3VwcG9zZWQgdG8gYmUgY29ubmVjdGVkIHRvLCBpdCdzIGJlY2F1c2Ug dGhlIENSVEMgaGFzCi0JICogbm90IGJlZW4gcmVnaXN0ZXJlZCB5ZXQuICBEZWZlciBwcm9iaW5n LCBhbmQgaG9wZSB0aGF0Ci0JICogdGhlIHJlcXVpcmVkIENSVEMgaXMgYWRkZWQgbGF0ZXIuCi0J ICovCi0JaWYgKGVuY29kZXItPnBvc3NpYmxlX2NydGNzID09IDApCi0JCXJldHVybiAtRVBST0JF X0RFRkVSOwotCi0JZHJtX2VuY29kZXJfaGVscGVyX2FkZCgmZHNpLT5lbmNvZGVyLAotCQkJICAg ICAgICZkd19taXBpX2RzaV9lbmNvZGVyX2hlbHBlcl9mdW5jcyk7Ci0JcmV0ID0gZHJtX2VuY29k ZXJfaW5pdChkcm0sICZkc2ktPmVuY29kZXIsICZkd19taXBpX2RzaV9lbmNvZGVyX2Z1bmNzLAot CQkJICAgICAgIERSTV9NT0RFX0VOQ09ERVJfRFNJLCBOVUxMKTsKLQlpZiAocmV0KSB7Ci0JCURS TV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgZW5jb2RlciB3aXRoIGRybVxu Iik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKGNvbm5l Y3RvciwKLQkJCQkgJmR3X21pcGlfZHNpX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOwotCi0JZHJt X2Nvbm5lY3Rvcl9pbml0KGRybSwgJmRzaS0+Y29ubmVjdG9yLAotCQkJICAgJmR3X21pcGlfZHNp X2F0b21pY19jb25uZWN0b3JfZnVuY3MsCi0JCQkgICBEUk1fTU9ERV9DT05ORUNUT1JfRFNJKTsK LQotCWRybV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIoY29ubmVjdG9yLCBlbmNvZGVyKTsKLQot CXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHJvY2tjaGlwX21pcGlfcGFyc2VfZHQoc3RydWN0 IGR3X21pcGlfZHNpICpkc2kpCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRzaS0+ZGV2 LT5vZl9ub2RlOwotCi0JZHNpLT5ncmZfcmVnbWFwID0gc3lzY29uX3JlZ21hcF9sb29rdXBfYnlf cGhhbmRsZShucCwgInJvY2tjaGlwLGdyZiIpOwotCWlmIChJU19FUlIoZHNpLT5ncmZfcmVnbWFw KSkgewotCQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiVW5hYmxlIHRvIGdldCByb2NrY2hpcCxn cmZcbiIpOwotCQlyZXR1cm4gUFRSX0VSUihkc2ktPmdyZl9yZWdtYXApOwotCX0KLQotCXJldHVy biAwOwotfQotCi1zdGF0aWMgc3RydWN0IGR3X21pcGlfZHNpX3BsYXRfZGF0YSByazMyODhfbWlw aV9kc2lfZHJ2X2RhdGEgPSB7Ci0JLmRzaTBfZW5fYml0ID0gUkszMjg4X0RTSTBfU0VMX1ZPUF9M SVQsCi0JLmRzaTFfZW5fYml0ID0gUkszMjg4X0RTSTFfU0VMX1ZPUF9MSVQsCi0JLmdyZl9zd2l0 Y2hfcmVnID0gUkszMjg4X0dSRl9TT0NfQ09ONiwKLQkubWF4X2RhdGFfbGFuZXMgPSA0LAotfTsK LQotc3RhdGljIHN0cnVjdCBkd19taXBpX2RzaV9wbGF0X2RhdGEgcmszMzk5X21pcGlfZHNpX2Ry dl9kYXRhID0gewotCS5kc2kwX2VuX2JpdCA9IFJLMzM5OV9EU0kwX1NFTF9WT1BfTElULAotCS5k c2kxX2VuX2JpdCA9IFJLMzM5OV9EU0kxX1NFTF9WT1BfTElULAotCS5ncmZfc3dpdGNoX3JlZyA9 IFJLMzM5OV9HUkZfU09DX0NPTjIwLAotCS5ncmZfZHNpMF9tb2RlID0gUkszMzk5X0dSRl9EU0lf TU9ERSwKLQkuZ3JmX2RzaTBfbW9kZV9yZWcgPSBSSzMzOTlfR1JGX1NPQ19DT04yMiwKLQkuZmxh Z3MgPSBEV19NSVBJX05FRURTX1BIWV9DRkdfQ0xLIHwgRFdfTUlQSV9ORUVEU19HUkZfQ0xLLAot CS5tYXhfZGF0YV9sYW5lcyA9IDQsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2Rldmlj ZV9pZCBkd19taXBpX2RzaV9kdF9pZHNbXSA9IHsKLQl7Ci0JIC5jb21wYXRpYmxlID0gInJvY2tj aGlwLHJrMzI4OC1taXBpLWRzaSIsCi0JIC5kYXRhID0gJnJrMzI4OF9taXBpX2RzaV9kcnZfZGF0 YSwKLQl9LCB7Ci0JIC5jb21wYXRpYmxlID0gInJvY2tjaGlwLHJrMzM5OS1taXBpLWRzaSIsCi0J IC5kYXRhID0gJnJrMzM5OV9taXBpX2RzaV9kcnZfZGF0YSwKLQl9LAotCXsgLyogc2VudGluZWwg Ki8gfQotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGR3X21pcGlfZHNpX2R0X2lkcyk7Ci0K LXN0YXRpYyBpbnQgZHdfbWlwaV9kc2lfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBk ZXZpY2UgKm1hc3RlciwKLQkJCSAgICB2b2lkICpkYXRhKQotewotCWNvbnN0IHN0cnVjdCBvZl9k ZXZpY2VfaWQgKm9mX2lkID0KLQkJCW9mX21hdGNoX2RldmljZShkd19taXBpX2RzaV9kdF9pZHMs IGRldik7Ci0JY29uc3Qgc3RydWN0IGR3X21pcGlfZHNpX3BsYXRfZGF0YSAqcGRhdGEgPSBvZl9p ZC0+ZGF0YTsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2 aWNlKGRldik7Ci0Jc3RydWN0IHJlc2V0X2NvbnRyb2wgKmFwYl9yc3Q7Ci0Jc3RydWN0IGRybV9k ZXZpY2UgKmRybSA9IGRhdGE7Ci0Jc3RydWN0IGR3X21pcGlfZHNpICpkc2k7Ci0Jc3RydWN0IHJl c291cmNlICpyZXM7Ci0JaW50IHJldDsKLQotCWRzaSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVv ZigqZHNpKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkc2kpCi0JCXJldHVybiAtRU5PTUVNOwotCi0J ZHNpLT5kZXYgPSBkZXY7Ci0JZHNpLT5wZGF0YSA9IHBkYXRhOwotCWRzaS0+ZHBtc19tb2RlID0g RFJNX01PREVfRFBNU19PRkY7Ci0KLQlyZXQgPSByb2NrY2hpcF9taXBpX3BhcnNlX2R0KGRzaSk7 Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJj ZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Ci0JZHNpLT5iYXNlID0gZGV2bV9pb3JlbWFwX3Jl c291cmNlKGRldiwgcmVzKTsKLQlpZiAoSVNfRVJSKGRzaS0+YmFzZSkpCi0JCXJldHVybiBQVFJf RVJSKGRzaS0+YmFzZSk7Ci0KLQlkc2ktPnBsbHJlZl9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAi cmVmIik7Ci0JaWYgKElTX0VSUihkc2ktPnBsbHJlZl9jbGspKSB7Ci0JCXJldCA9IFBUUl9FUlIo ZHNpLT5wbGxyZWZfY2xrKTsKLQkJRFJNX0RFVl9FUlJPUihkZXYsCi0JCQkgICAgICAiVW5hYmxl IHRvIGdldCBwbGwgcmVmZXJlbmNlIGNsb2NrOiAlZFxuIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsK LQl9Ci0KLQlkc2ktPnBjbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAicGNsayIpOwotCWlmIChJU19F UlIoZHNpLT5wY2xrKSkgewotCQlyZXQgPSBQVFJfRVJSKGRzaS0+cGNsayk7Ci0JCURSTV9ERVZf RVJST1IoZGV2LCAiVW5hYmxlIHRvIGdldCBwY2xrOiAlZFxuIiwgcmV0KTsKLQkJcmV0dXJuIHJl dDsKLQl9Ci0KLQkvKgotCSAqIE5vdGUgdGhhdCB0aGUgcmVzZXQgd2FzIG5vdCBkZWZpbmVkIGlu IHRoZSBpbml0aWFsIGRldmljZSB0cmVlLCBzbwotCSAqIHdlIGhhdmUgdG8gYmUgcHJlcGFyZWQg Zm9yIGl0IG5vdCBiZWluZyBmb3VuZC4KLQkgKi8KLQlhcGJfcnN0ID0gZGV2bV9yZXNldF9jb250 cm9sX2dldChkZXYsICJhcGIiKTsKLQlpZiAoSVNfRVJSKGFwYl9yc3QpKSB7Ci0JCXJldCA9IFBU Ul9FUlIoYXBiX3JzdCk7Ci0JCWlmIChyZXQgPT0gLUVOT0VOVCkgewotCQkJYXBiX3JzdCA9IE5V TEw7Ci0JCX0gZWxzZSB7Ci0JCQlEUk1fREVWX0VSUk9SKGRldiwKLQkJCQkgICAgICAiVW5hYmxl IHRvIGdldCByZXNldCBjb250cm9sOiAlZFxuIiwgcmV0KTsKLQkJCXJldHVybiByZXQ7Ci0JCX0K LQl9Ci0KLQlpZiAoYXBiX3JzdCkgewotCQlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5w Y2xrKTsKLQkJaWYgKHJldCkgewotCQkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gZW5h YmxlIHBjbGtcbiIpOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCi0JCXJlc2V0X2NvbnRyb2xfYXNz ZXJ0KGFwYl9yc3QpOwotCQl1c2xlZXBfcmFuZ2UoMTAsIDIwKTsKLQkJcmVzZXRfY29udHJvbF9k ZWFzc2VydChhcGJfcnN0KTsKLQotCQljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5wY2xrKTsK LQl9Ci0KLQlpZiAocGRhdGEtPmZsYWdzICYgRFdfTUlQSV9ORUVEU19QSFlfQ0ZHX0NMSykgewot CQlkc2ktPnBoeV9jZmdfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgInBoeV9jZmciKTsKLQkJaWYg KElTX0VSUihkc2ktPnBoeV9jZmdfY2xrKSkgewotCQkJcmV0ID0gUFRSX0VSUihkc2ktPnBoeV9j ZmdfY2xrKTsKLQkJCURSTV9ERVZfRVJST1IoZGV2LAotCQkJCSAgICAgICJVbmFibGUgdG8gZ2V0 IHBoeV9jZmdfY2xrOiAlZFxuIiwgcmV0KTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQl9Ci0KLQlp ZiAocGRhdGEtPmZsYWdzICYgRFdfTUlQSV9ORUVEU19HUkZfQ0xLKSB7Ci0JCWRzaS0+Z3JmX2Ns ayA9IGRldm1fY2xrX2dldChkZXYsICJncmYiKTsKLQkJaWYgKElTX0VSUihkc2ktPmdyZl9jbGsp KSB7Ci0JCQlyZXQgPSBQVFJfRVJSKGRzaS0+Z3JmX2Nsayk7Ci0JCQlEUk1fREVWX0VSUk9SKGRl diwgIlVuYWJsZSB0byBnZXQgZ3JmX2NsazogJWRcbiIsIHJldCk7Ci0JCQlyZXR1cm4gcmV0Owot CQl9Ci0JfQotCi0JcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+cGxscmVmX2Nsayk7Ci0J aWYgKHJldCkgewotCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBlbmFibGUgcGxscmVm X2Nsa1xuIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0ID0gZHdfbWlwaV9kc2lfcmVnaXN0 ZXIoZHJtLCBkc2kpOwotCWlmIChyZXQpIHsKLQkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQg dG8gcmVnaXN0ZXIgbWlwaV9kc2k6ICVkXG4iLCByZXQpOwotCQlnb3RvIGVycl9wbGxyZWY7Ci0J fQotCi0JZHNpLT5kc2lfaG9zdC5vcHMgPSAmZHdfbWlwaV9kc2lfaG9zdF9vcHM7Ci0JZHNpLT5k c2lfaG9zdC5kZXYgPSBkZXY7Ci0JcmV0ID0gbWlwaV9kc2lfaG9zdF9yZWdpc3RlcigmZHNpLT5k c2lfaG9zdCk7Ci0JaWYgKHJldCkgewotCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBy ZWdpc3RlciBNSVBJIGhvc3Q6ICVkXG4iLCByZXQpOwotCQlnb3RvIGVycl9jbGVhbnVwOwotCX0K LQotCWlmICghZHNpLT5wYW5lbCkgewotCQlyZXQgPSAtRVBST0JFX0RFRkVSOwotCQlnb3RvIGVy cl9taXBpX2RzaV9ob3N0OwotCX0KLQotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGRzaSk7Ci0JcG1f cnVudGltZV9lbmFibGUoZGV2KTsKLQlyZXR1cm4gMDsKLQotZXJyX21pcGlfZHNpX2hvc3Q6Ci0J bWlwaV9kc2lfaG9zdF91bnJlZ2lzdGVyKCZkc2ktPmRzaV9ob3N0KTsKLWVycl9jbGVhbnVwOgot CWRzaS0+Y29ubmVjdG9yLmZ1bmNzLT5kZXN0cm95KCZkc2ktPmNvbm5lY3Rvcik7Ci0JZHNpLT5l bmNvZGVyLmZ1bmNzLT5kZXN0cm95KCZkc2ktPmVuY29kZXIpOwotZXJyX3BsbHJlZjoKLQljbGtf ZGlzYWJsZV91bnByZXBhcmUoZHNpLT5wbGxyZWZfY2xrKTsKLQlyZXR1cm4gcmV0OwotfQotCi1z dGF0aWMgdm9pZCBkd19taXBpX2RzaV91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qg ZGV2aWNlICptYXN0ZXIsCi0JCQkgICAgICAgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZHdfbWlw aV9kc2kgKmRzaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCi0JbWlwaV9kc2lfaG9zdF91bnJl Z2lzdGVyKCZkc2ktPmRzaV9ob3N0KTsKLQlwbV9ydW50aW1lX2Rpc2FibGUoZGV2KTsKLQotCWRz aS0+Y29ubmVjdG9yLmZ1bmNzLT5kZXN0cm95KCZkc2ktPmNvbm5lY3Rvcik7Ci0JZHNpLT5lbmNv ZGVyLmZ1bmNzLT5kZXN0cm95KCZkc2ktPmVuY29kZXIpOwotCi0JY2xrX2Rpc2FibGVfdW5wcmVw YXJlKGRzaS0+cGxscmVmX2Nsayk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50 X29wcyBkd19taXBpX2RzaV9vcHMgPSB7Ci0JLmJpbmQJPSBkd19taXBpX2RzaV9iaW5kLAotCS51 bmJpbmQJPSBkd19taXBpX2RzaV91bmJpbmQsCi19OwotCi1zdGF0aWMgaW50IGR3X21pcGlfZHNp X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0JcmV0dXJuIGNvbXBvbmVu dF9hZGQoJnBkZXYtPmRldiwgJmR3X21pcGlfZHNpX29wcyk7Ci19Ci0KLXN0YXRpYyBpbnQgZHdf bWlwaV9kc2lfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0JY29tcG9u ZW50X2RlbCgmcGRldi0+ZGV2LCAmZHdfbWlwaV9kc2lfb3BzKTsKLQlyZXR1cm4gMDsKLX0KLQot c3RydWN0IHBsYXRmb3JtX2RyaXZlciBkd19taXBpX2RzaV9kcml2ZXIgPSB7Ci0JLnByb2JlCQk9 IGR3X21pcGlfZHNpX3Byb2JlLAotCS5yZW1vdmUJCT0gZHdfbWlwaV9kc2lfcmVtb3ZlLAotCS5k cml2ZXIJCT0gewotCQkub2ZfbWF0Y2hfdGFibGUgPSBkd19taXBpX2RzaV9kdF9pZHMsCi0JCS5u YW1lCT0gRFJJVkVSX05BTUUsCi0JfSwKLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v cm9ja2NoaXAvcm9ja2NoaXBfZHJtX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3Jv Y2tjaGlwX2RybV9kcnYuYwppbmRleCA5NDFmMzUyMzNiMWYuLjM3ZjlhM2I2NTFhYiAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9kcnYuYworKysgYi9k cml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2Rydi5jCkBAIC00ODksNyArNDg5 LDcgQEAgc3RhdGljIGludCBfX2luaXQgcm9ja2NoaXBfZHJtX2luaXQodm9pZCkKIAlBRERfUk9D S0NISVBfU1VCX0RSSVZFUihjZG5fZHBfZHJpdmVyLCBDT05GSUdfUk9DS0NISVBfQ0ROX0RQKTsK IAlBRERfUk9DS0NISVBfU1VCX0RSSVZFUihkd19oZG1pX3JvY2tjaGlwX3BsdGZtX2RyaXZlciwK IAkJCQlDT05GSUdfUk9DS0NISVBfRFdfSERNSSk7Ci0JQUREX1JPQ0tDSElQX1NVQl9EUklWRVIo ZHdfbWlwaV9kc2lfZHJpdmVyLAorCUFERF9ST0NLQ0hJUF9TVUJfRFJJVkVSKGR3X21pcGlfZHNp X3JvY2tjaGlwX2RyaXZlciwKIAkJCQlDT05GSUdfUk9DS0NISVBfRFdfTUlQSV9EU0kpOwogCUFE RF9ST0NLQ0hJUF9TVUJfRFJJVkVSKGlubm9faGRtaV9kcml2ZXIsIENPTkZJR19ST0NLQ0hJUF9J Tk5PX0hETUkpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2No aXBfZHJtX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9kcnYu aAppbmRleCAyMWEwMjNhOTdiYjguLjQ1M2ZlZjZhNTViOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0v cm9ja2NoaXAvcm9ja2NoaXBfZHJtX2Rydi5oCkBAIC02Nyw3ICs2Nyw3IEBAIGludCByb2NrY2hp cF9kcm1fd2FpdF92YWN0X2VuZChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHVuc2lnbmVkIGludCBt c3RpbWVvdXQpOwogaW50IHJvY2tjaGlwX2RybV9lbmRwb2ludF9pc19zdWJkcml2ZXIoc3RydWN0 IGRldmljZV9ub2RlICplcCk7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBjZG5fZHBf ZHJpdmVyOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZHdfaGRtaV9yb2NrY2hpcF9w bHRmbV9kcml2ZXI7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkd19taXBpX2RzaV9k cml2ZXI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkd19taXBpX2RzaV9yb2NrY2hp cF9kcml2ZXI7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpbm5vX2hkbWlfZHJpdmVy OwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcm9ja2NoaXBfZHBfZHJpdmVyOwogZXh0 ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcm9ja2NoaXBfbHZkc19kcml2ZXI7Ci0tIAoyLjE4 LjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1k ZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=