From mboxrd@z Thu Jan 1 00:00:00 1970 From: Heiko Stuebner Subject: [PATCH v8 5/8] drm/rockchip: dsi: migrate to use dw-mipi-dsi bridge driver Date: Mon, 11 Jun 2018 15:34:59 +0200 Message-ID: <20180611133502.1292-6-heiko@sntech.de> References: <20180611133502.1292-1-heiko@sntech.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180611133502.1292-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: dri-devel@lists.freedesktop.org Cc: mark.rutland@arm.com, devicetree@vger.kernel.org, briannorris@chromium.org, hoegsberg@gmail.com, philippe.cornu@st.com, yannick.fertre@st.com, linux-rockchip@lists.infradead.org, nickey.yang@rock-chips.com, robh+dt@kernel.org, thierry.reding@gmail.com, laurent.pinchart@ideasonboard.com, mka@chromium.org List-Id: linux-rockchip.vger.kernel.org RnJvbTogTmlja2V5IFlhbmcgPG5pY2tleS55YW5nQHJvY2stY2hpcHMuY29tPgoKQWRkIHRoZSBS T0NLQ0hJUCBEU0kgY29udHJvbGxlciBkcml2ZXIgdGhhdCB1c2VzIHRoZSBTeW5vcHN5cyBEZXNp Z25XYXJlCk1JUEkgRFNJIGhvc3QgY29udHJvbGxlciBicmlkZ2UgYW5kIHJlbW92ZSB0aGUgb2xk IHNlcGFyYXRlIG9uZS4KCmNoYW5nZXM6Cgp2MjoKICAgYWRkIGVycl9wbGxyZWYsIHJlbW92ZSB1 bm5lY2Vzc2FyeSBlbmNvZGVyLmVuYWJsZSAmIGRpc2FibGUKICAgY29ycmVjdCBzcGVsbGluZyBt aXN0YWtlcwp2MzoKICAgY2FsbCBkd19taXBpX2RzaV91bmJpbmQoKSBpbiBkd19taXBpX2RzaV9y b2NrY2hpcF91bmJpbmQoKQogICBmaXggdHlwbywgdXNlIG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0 YSgpLAogICBjaGFuZ2Ugc29tZSBiaW5kKCkgbG9naWMgaW50byBwcm9iZSgpCiAgIGFkZCAnZGV2 X3NldF9kcnZkYXRhKCknCnY0OgogIHJldHVybiAtRUlOVkFMIHdoZW4gY2FuIG5vdCBnZXQgYmVz dF9mcmVxCiAgYWRkIGEgY2xhcmlmeWluZyBjb21tZW50IHdoZW4gZ2V0IHZjbwogIGFkZCByZXZp ZXcgdGFnCnY1OgogIGtlZXAgb3VyIHBvd2VyIGRvbWFpbiBlbmFibGVkIHdoaWxlIHRvdWNoaW5n IEdSRgp2NjoKICBjaGFuZ2UgZnVuYyBuYW1lIGR3X21pcGlfZW5jb2Rlcl9kaXNhYmxlIHRvCiAg ZHdfbWlwaV9kc2lfZW5jb2Rlcl9kaXNhYmxlCnY3OgogIG5vbmUKdjg6IEhlaWtvCiAgYWRkIEFy Y2hpdCdzIFJldmlldyB0YWcKICBhZGFwdCB0byByZWNlbnQgY2hhbmdlcyBpbiB0aGUgb3JpZ2lu YWwgcm9ja2NoaXAtZHNpIGRyaXZlcgogIGJlYXV0aWZ5IGdyZi1oYW5kbGluZwogIHNwbGl0IGh3 LXNldHVwIChyZXNvdXJjZXMsIGRzaS1ob3N0KSBmcm9tIGJpbmQgaW50byBwcm9iZQoKU2lnbmVk LW9mZi1ieTogTmlja2V5IFlhbmcgPG5pY2tleS55YW5nQHJvY2stY2hpcHMuY29tPgpTaWduZWQt b2ZmLWJ5OiBCcmlhbiBOb3JyaXMgPGJyaWFubm9ycmlzQGNocm9taXVtLm9yZz4KUmV2aWV3ZWQt Ynk6IEJyaWFuIE5vcnJpcyA8YnJpYW5ub3JyaXNAY2hyb21pdW0ub3JnPgpSZXZpZXdlZC1ieTog U2VhbiBQYXVsIDxzZWFucGF1bEBjaHJvbWl1bS5vcmc+ClJldmlld2VkLWJ5OiBBcmNoaXQgVGFu ZWphIDxhcmNoaXR0QGNvZGVhdXJvcmEub3JnPgpTaWduZWQtb2ZmLWJ5OiBIZWlrbyBTdHVlYm5l ciA8aGVpa29Ac250ZWNoLmRlPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9LY29uZmln ICAgICAgICAgICAgICB8ICAgIDIgKy0KIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9NYWtlZmls ZSAgICAgICAgICAgICB8ICAgIDIgKy0KIC4uLi9ncHUvZHJtL3JvY2tjaGlwL2R3LW1pcGktZHNp LXJvY2tjaGlwLmMgICB8ICA5MzYgKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vcm9ja2No aXAvZHctbWlwaS1kc2kuYyAgICAgICAgfCAxMzQ5IC0tLS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJz L2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2Rydi5jICAgfCAgICAyICstCiBkcml2ZXJz L2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2Rydi5oICAgfCAgICAyICstCiA2IGZpbGVz IGNoYW5nZWQsIDk0MCBpbnNlcnRpb25zKCspLCAxMzUzIGRlbGV0aW9ucygtKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9kdy1taXBpLWRzaS1yb2NrY2hpcC5j CiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2R3LW1pcGktZHNp LmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvS2NvbmZpZyBiL2RyaXZl cnMvZ3B1L2RybS9yb2NrY2hpcC9LY29uZmlnCmluZGV4IDBjY2M3NjIxN2VlNC4uOWViNDc5NTU5 NmQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvS2NvbmZpZworKysgYi9k cml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvS2NvbmZpZwpAQCAtNyw3ICs3LDcgQEAgY29uZmlnIERS TV9ST0NLQ0hJUAogCXNlbGVjdCBWSURFT01PREVfSEVMUEVSUwogCXNlbGVjdCBEUk1fQU5BTE9H SVhfRFAgaWYgUk9DS0NISVBfQU5BTE9HSVhfRFAKIAlzZWxlY3QgRFJNX0RXX0hETUkgaWYgUk9D S0NISVBfRFdfSERNSQotCXNlbGVjdCBEUk1fTUlQSV9EU0kgaWYgUk9DS0NISVBfRFdfTUlQSV9E U0kKKwlzZWxlY3QgRFJNX0RXX01JUElfRFNJIGlmIFJPQ0tDSElQX0RXX01JUElfRFNJCiAJc2Vs ZWN0IFNORF9TT0NfSERNSV9DT0RFQyBpZiBST0NLQ0hJUF9DRE5fRFAgJiYgU05EX1NPQwogCWhl bHAKIAkgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBhIFJvY2tjaGlwIHNvYyBjaGlw c2V0LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL01ha2VmaWxlIGIvZHJp dmVycy9ncHUvZHJtL3JvY2tjaGlwL01ha2VmaWxlCmluZGV4IGEzMTRlMjEwOWU3Ni4uMGYyMmRh ZDFjOTk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvTWFrZWZpbGUKKysr IGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL01ha2VmaWxlCkBAIC0xMSw3ICsxMSw3IEBAIHJv Y2tjaGlwZHJtLSQoQ09ORklHX0RSTV9GQkRFVl9FTVVMQVRJT04pICs9IHJvY2tjaGlwX2RybV9m YmRldi5vCiByb2NrY2hpcGRybS0kKENPTkZJR19ST0NLQ0hJUF9BTkFMT0dJWF9EUCkgKz0gYW5h bG9naXhfZHAtcm9ja2NoaXAubwogcm9ja2NoaXBkcm0tJChDT05GSUdfUk9DS0NISVBfQ0ROX0RQ KSArPSBjZG4tZHAtY29yZS5vIGNkbi1kcC1yZWcubwogcm9ja2NoaXBkcm0tJChDT05GSUdfUk9D S0NISVBfRFdfSERNSSkgKz0gZHdfaGRtaS1yb2NrY2hpcC5vCi1yb2NrY2hpcGRybS0kKENPTkZJ R19ST0NLQ0hJUF9EV19NSVBJX0RTSSkgKz0gZHctbWlwaS1kc2kubworcm9ja2NoaXBkcm0tJChD T05GSUdfUk9DS0NISVBfRFdfTUlQSV9EU0kpICs9IGR3LW1pcGktZHNpLXJvY2tjaGlwLm8KIHJv Y2tjaGlwZHJtLSQoQ09ORklHX1JPQ0tDSElQX0lOTk9fSERNSSkgKz0gaW5ub19oZG1pLm8KIHJv Y2tjaGlwZHJtLSQoQ09ORklHX1JPQ0tDSElQX0xWRFMpICs9IHJvY2tjaGlwX2x2ZHMubwogCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvZHctbWlwaS1kc2ktcm9ja2NoaXAu YyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9kdy1taXBpLWRzaS1yb2NrY2hpcC5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOTNiMDE5NDgyMjc2Ci0tLSAvZGV2 L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2R3LW1pcGktZHNpLXJvY2tjaGlw LmMKQEAgLTAsMCArMSw5MzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIEZ1emhvdSBSb2NrY2hp cCBFbGVjdHJvbmljcyBDby5MdGQKKyAqIEF1dGhvcjoKKyAqICAgICAgQ2hyaXMgWmhvbmcgPHp5 d0Byb2NrLWNoaXBzLmNvbT4KKyAqICAgICAgTmlja2V5IFlhbmcgPG5pY2tleS55YW5nQHJvY2st Y2hpcHMuY29tPgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUg Y29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoK KyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqCisgKiBMaWNlbnNlIHRlcm1zOiAgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgKEdQTCksIHZlcnNpb24gMgorICovCisKKyNpbmNsdWRlIDxsaW51eC9j bGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9tYXRoNjQu aD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2Uu aD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8ZHJtL2RybVAuaD4K KyNpbmNsdWRlIDxkcm0vZHJtX21pcGlfZHNpLmg+CisjaW5jbHVkZSA8ZHJtL2JyaWRnZS9kd19t aXBpX2RzaS5oPgorI2luY2x1ZGUgPHZpZGVvL21pcGlfZGlzcGxheS5oPgorI2luY2x1ZGUgPGxp bnV4L3JlZ21hcC5oPgorI2luY2x1ZGUgPGRybS9kcm1fb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9t ZmQvc3lzY29uLmg+CisKKyNpbmNsdWRlICJyb2NrY2hpcF9kcm1fZHJ2LmgiCisjaW5jbHVkZSAi cm9ja2NoaXBfZHJtX3ZvcC5oIgorCisjZGVmaW5lIERTSV9QSFlfUlNUWgkJCTB4YTAKKyNkZWZp bmUgUEhZX0RJU0ZPUkNFUExMCQkJMAorI2RlZmluZSBQSFlfRU5GT1JDRVBMTAkJCUJJVCgzKQor I2RlZmluZSBQSFlfRElTQUJMRUNMSwkJCTAKKyNkZWZpbmUgUEhZX0VOQUJMRUNMSwkJCUJJVCgy KQorI2RlZmluZSBQSFlfUlNUWgkJCTAKKyNkZWZpbmUgUEhZX1VOUlNUWgkJCUJJVCgxKQorI2Rl ZmluZSBQSFlfU0hVVERPV05aCQkJMAorI2RlZmluZSBQSFlfVU5TSFVURE9XTloJCQlCSVQoMCkK KworI2RlZmluZSBEU0lfUEhZX0lGX0NGRwkJCTB4YTQKKyNkZWZpbmUgTl9MQU5FUyhuKQkJCSgo KChuKSAtIDEpICYgMHgzKSA8PCAwKQorI2RlZmluZSBQSFlfU1RPUF9XQUlUX1RJTUUoY3ljbGUp CSgoKGN5Y2xlKSAmIDB4ZmYpIDw8IDgpCisKKyNkZWZpbmUgRFNJX1BIWV9TVEFUVVMJCQkweGIw CisjZGVmaW5lIExPQ0sJCQkJQklUKDApCisjZGVmaW5lIFNUT1BfU1RBVEVfQ0xLX0xBTkUJCUJJ VCgyKQorCisjZGVmaW5lIERTSV9QSFlfVFNUX0NUUkwwCQkweGI0CisjZGVmaW5lIFBIWV9URVNU Q0xLCQkJQklUKDEpCisjZGVmaW5lIFBIWV9VTlRFU1RDTEsJCQkwCisjZGVmaW5lIFBIWV9URVNU Q0xSCQkJQklUKDApCisjZGVmaW5lIFBIWV9VTlRFU1RDTFIJCQkwCisKKyNkZWZpbmUgRFNJX1BI WV9UU1RfQ1RSTDEJCTB4YjgKKyNkZWZpbmUgUEhZX1RFU1RFTgkJCUJJVCgxNikKKyNkZWZpbmUg UEhZX1VOVEVTVEVOCQkJMAorI2RlZmluZSBQSFlfVEVTVERPVVQobikJCQkoKChuKSAmIDB4ZmYp IDw8IDgpCisjZGVmaW5lIFBIWV9URVNURElOKG4pCQkJKCgobikgJiAweGZmKSA8PCAwKQorCisj ZGVmaW5lIERTSV9JTlRfU1QwCQkJMHhiYworI2RlZmluZSBEU0lfSU5UX1NUMQkJCTB4YzAKKyNk ZWZpbmUgRFNJX0lOVF9NU0swCQkJMHhjNAorI2RlZmluZSBEU0lfSU5UX01TSzEJCQkweGM4CisK KyNkZWZpbmUgUEhZX1NUQVRVU19USU1FT1VUX1VTCQkxMDAwMAorI2RlZmluZSBDTURfUEtUX1NU QVRVU19USU1FT1VUX1VTCTIwMDAwCisKKyNkZWZpbmUgQllQQVNTX1ZDT19SQU5HRQlCSVQoNykK KyNkZWZpbmUgVkNPX1JBTkdFX0NPTl9TRUwodmFsKQkoKCh2YWwpICYgMHg3KSA8PCAzKQorI2Rl ZmluZSBWQ09fSU5fQ0FQX0NPTl9ERUZBVUxUCSgweDAgPDwgMSkKKyNkZWZpbmUgVkNPX0lOX0NB UF9DT05fTE9XCSgweDEgPDwgMSkKKyNkZWZpbmUgVkNPX0lOX0NBUF9DT05fSElHSAkoMHgyIDw8 IDEpCisjZGVmaW5lIFJFRl9CSUFTX0NVUl9TRUwJQklUKDApCisKKyNkZWZpbmUgQ1BfQ1VSUkVO VF8zVUEJMHgxCisjZGVmaW5lIENQX0NVUlJFTlRfNF81VUEJMHgyCisjZGVmaW5lIENQX0NVUlJF TlRfN181VUEJMHg2CisjZGVmaW5lIENQX0NVUlJFTlRfNlVBCTB4OQorI2RlZmluZSBDUF9DVVJS RU5UXzEyVUEJMHhiCisjZGVmaW5lIENQX0NVUlJFTlRfU0VMKHZhbCkJKCh2YWwpICYgMHhmKQor I2RlZmluZSBDUF9QUk9HUkFNX0VOCQlCSVQoNykKKworI2RlZmluZSBMUEZfUkVTSVNUT1JTXzE1 XzVLT0hNCTB4MQorI2RlZmluZSBMUEZfUkVTSVNUT1JTXzEzS09ITQkweDIKKyNkZWZpbmUgTFBG X1JFU0lTVE9SU18xMV81S09ITQkweDQKKyNkZWZpbmUgTFBGX1JFU0lTVE9SU18xMF81S09ITQkw eDgKKyNkZWZpbmUgTFBGX1JFU0lTVE9SU184S09ITQkweDEwCisjZGVmaW5lIExQRl9QUk9HUkFN X0VOCQlCSVQoNikKKyNkZWZpbmUgTFBGX1JFU0lTVE9SU19TRUwodmFsKQkoKHZhbCkgJiAweDNm KQorCisjZGVmaW5lIEhTRlJFUVJBTkdFX1NFTCh2YWwpCSgoKHZhbCkgJiAweDNmKSA8PCAxKQor CisjZGVmaW5lIElOUFVUX0RJVklERVIodmFsKQkoKCh2YWwpIC0gMSkgJiAweDdmKQorI2RlZmlu ZSBMT1dfUFJPR1JBTV9FTgkJMAorI2RlZmluZSBISUdIX1BST0dSQU1fRU4JCUJJVCg3KQorI2Rl ZmluZSBMT09QX0RJVl9MT1dfU0VMKHZhbCkJKCgodmFsKSAtIDEpICYgMHgxZikKKyNkZWZpbmUg TE9PUF9ESVZfSElHSF9TRUwodmFsKQkoKCgodmFsKSAtIDEpID4+IDUpICYgMHhmKQorI2RlZmlu ZSBQTExfTE9PUF9ESVZfRU4JCUJJVCg1KQorI2RlZmluZSBQTExfSU5QVVRfRElWX0VOCUJJVCg0 KQorCisjZGVmaW5lIFBPV0VSX0NPTlRST0wJCUJJVCg2KQorI2RlZmluZSBJTlRFUk5BTF9SRUdf Q1VSUkVOVAlCSVQoMykKKyNkZWZpbmUgQklBU19CTE9DS19PTgkJQklUKDIpCisjZGVmaW5lIEJB TkRHQVBfT04JCUJJVCgwKQorCisjZGVmaW5lIFRFUl9SRVNJU1RPUl9ISUdICUJJVCg3KQorI2Rl ZmluZQlURVJfUkVTSVNUT1JfTE9XCTAKKyNkZWZpbmUgTEVWRUxfU0hJRlRFUlNfT04JQklUKDYp CisjZGVmaW5lIFRFUl9DQUxfRE9ORQkJQklUKDUpCisjZGVmaW5lIFNFVFJEX01BWAkJKDB4NyA8 PCAyKQorI2RlZmluZSBQT1dFUl9NQU5BR0UJCUJJVCgxKQorI2RlZmluZSBURVJfUkVTSVNUT1JT X09OCUJJVCgwKQorCisjZGVmaW5lIEJJQVNFWFRSX1NFTCh2YWwpCSgodmFsKSAmIDB4NykKKyNk ZWZpbmUgQkFOREdBUF9TRUwodmFsKQkoKHZhbCkgJiAweDcpCisjZGVmaW5lIFRMUF9QUk9HUkFN X0VOCQlCSVQoNykKKyNkZWZpbmUgVEhTX1BSRV9QUk9HUkFNX0VOCUJJVCg3KQorI2RlZmluZSBU SFNfWkVST19QUk9HUkFNX0VOCUJJVCg2KQorCisjZGVmaW5lIFBMTF9CSUFTX0NVUl9TRUxfQ0FQ X1ZDT19DT05UUk9MCQkweDEwCisjZGVmaW5lIFBMTF9DUF9DT05UUk9MX1BMTF9MT0NLX0JZUEFT UwkJCTB4MTEKKyNkZWZpbmUgUExMX0xQRl9BTkRfQ1BfQ09OVFJPTAkJCQkweDEyCisjZGVmaW5l IFBMTF9JTlBVVF9ESVZJREVSX1JBVElPCQkJCTB4MTcKKyNkZWZpbmUgUExMX0xPT1BfRElWSURF Ul9SQVRJTwkJCQkweDE4CisjZGVmaW5lIFBMTF9JTlBVVF9BTkRfTE9PUF9ESVZJREVSX1JBVElP U19DT05UUk9MCTB4MTkKKyNkZWZpbmUgQkFOREdBUF9BTkRfQklBU19DT05UUk9MCQkJMHgyMAor I2RlZmluZSBURVJNSU5BVElPTl9SRVNJU1RFUl9DT05UUk9MCQkJMHgyMQorI2RlZmluZSBBRkVf QklBU19CQU5ER0FQX0FOQUxPR19QUk9HUkFNTUFCSUxJVFkJCTB4MjIKKyNkZWZpbmUgSFNfUlhf Q09OVFJPTF9PRl9MQU5FXzAJCQkJMHg0NAorI2RlZmluZSBIU19UWF9DTE9DS19MQU5FX1JFUVVF U1RfU1RBVEVfVElNRV9DT05UUk9MCTB4NjAKKyNkZWZpbmUgSFNfVFhfQ0xPQ0tfTEFORV9QUkVQ QVJFX1NUQVRFX1RJTUVfQ09OVFJPTAkweDYxCisjZGVmaW5lIEhTX1RYX0NMT0NLX0xBTkVfSFNf WkVST19TVEFURV9USU1FX0NPTlRST0wJMHg2MgorI2RlZmluZSBIU19UWF9DTE9DS19MQU5FX1RS QUlMX1NUQVRFX1RJTUVfQ09OVFJPTAkweDYzCisjZGVmaW5lIEhTX1RYX0NMT0NLX0xBTkVfRVhJ VF9TVEFURV9USU1FX0NPTlRST0wJMHg2NAorI2RlZmluZSBIU19UWF9DTE9DS19MQU5FX1BPU1Rf VElNRV9DT05UUk9MCQkweDY1CisjZGVmaW5lIEhTX1RYX0RBVEFfTEFORV9SRVFVRVNUX1NUQVRF X1RJTUVfQ09OVFJPTAkweDcwCisjZGVmaW5lIEhTX1RYX0RBVEFfTEFORV9QUkVQQVJFX1NUQVRF X1RJTUVfQ09OVFJPTAkweDcxCisjZGVmaW5lIEhTX1RYX0RBVEFfTEFORV9IU19aRVJPX1NUQVRF X1RJTUVfQ09OVFJPTAkweDcyCisjZGVmaW5lIEhTX1RYX0RBVEFfTEFORV9UUkFJTF9TVEFURV9U SU1FX0NPTlRST0wJMHg3MworI2RlZmluZSBIU19UWF9EQVRBX0xBTkVfRVhJVF9TVEFURV9USU1F X0NPTlRST0wJCTB4NzQKKworI2RlZmluZSBEV19NSVBJX05FRURTX1BIWV9DRkdfQ0xLCUJJVCgw KQorI2RlZmluZSBEV19NSVBJX05FRURTX0dSRl9DTEsJCUJJVCgxKQorCisjZGVmaW5lIFJLMzI4 OF9HUkZfU09DX0NPTjYJCTB4MDI1YworI2RlZmluZSBSSzMyODhfRFNJMF9MQ0RDX1NFTAkJQklU KDYpCisjZGVmaW5lIFJLMzI4OF9EU0kxX0xDRENfU0VMCQlCSVQoOSkKKworI2RlZmluZSBSSzMz OTlfR1JGX1NPQ19DT04yMAkJMHg2MjUwCisjZGVmaW5lIFJLMzM5OV9EU0kwX0xDRENfU0VMCQlC SVQoMCkKKyNkZWZpbmUgUkszMzk5X0RTSTFfTENEQ19TRUwJCUJJVCg0KQorCisjZGVmaW5lIFJL MzM5OV9HUkZfU09DX0NPTjIyCQkweDYyNTgKKyNkZWZpbmUgUkszMzk5X0RTSTBfVFVSTlJFUVVF U1QJCSgweGYgPDwgMTIpCisjZGVmaW5lIFJLMzM5OV9EU0kwX1RVUk5ESVNBQkxFCQkoMHhmIDw8 IDgpCisjZGVmaW5lIFJLMzM5OV9EU0kwX0ZPUkNFVFhTVE9QTU9ERQkoMHhmIDw8IDQpCisjZGVm aW5lIFJLMzM5OV9EU0kwX0ZPUkNFUlhNT0RFCQkoMHhmIDw8IDApCisKKyNkZWZpbmUgUkszMzk5 X0dSRl9TT0NfQ09OMjMJCTB4NjI1YworI2RlZmluZSBSSzMzOTlfRFNJMV9UVVJORElTQUJMRQkJ KDB4ZiA8PCAxMikKKyNkZWZpbmUgUkszMzk5X0RTSTFfRk9SQ0VUWFNUT1BNT0RFCSgweGYgPDwg OCkKKyNkZWZpbmUgUkszMzk5X0RTSTFfRk9SQ0VSWE1PREUJCSgweGYgPDwgNCkKKyNkZWZpbmUg UkszMzk5X0RTSTFfRU5BQkxFCQkoMHhmIDw8IDApCisKKyNkZWZpbmUgUkszMzk5X0dSRl9TT0Nf Q09OMjQJCTB4NjI2MAorI2RlZmluZSBSSzMzOTlfVFhSWF9NQVNURVJTTEFWRVoJQklUKDcpCisj ZGVmaW5lIFJLMzM5OV9UWFJYX0VOQUJMRUNMSwkJQklUKDYpCisjZGVmaW5lIFJLMzM5OV9UWFJY X0JBU0VESVIJCUJJVCg1KQorCisjZGVmaW5lIEhJV09SRF9VUERBVEUodmFsLCBtYXNrKQkodmFs IHwgKG1hc2spIDw8IDE2KQorCisjZGVmaW5lIHRvX2RzaShubSkJY29udGFpbmVyX29mKG5tLCBz dHJ1Y3QgZHdfbWlwaV9kc2lfcm9ja2NoaXAsIG5tKQorCitlbnVtIHsKKwlCQU5ER0FQXzk3XzA3 LAorCUJBTkRHQVBfOThfMDUsCisJQkFOREdBUF85OV8wMiwKKwlCQU5ER0FQXzEwMF8wMCwKKwlC QU5ER0FQXzkzXzE3LAorCUJBTkRHQVBfOTRfMTUsCisJQkFOREdBUF85NV8xMiwKKwlCQU5ER0FQ Xzk2XzEwLAorfTsKKworZW51bSB7CisJQklBU0VYVFJfODdfMSwKKwlCSUFTRVhUUl85MV81LAor CUJJQVNFWFRSXzk1XzksCisJQklBU0VYVFJfMTAwLAorCUJJQVNFWFRSXzEwNV85NCwKKwlCSUFT RVhUUl8xMTFfODgsCisJQklBU0VYVFJfMTE4XzgsCisJQklBU0VYVFJfMTI3XzcsCit9OworCitz dHJ1Y3Qgcm9ja2NoaXBfZHdfZHNpX2NoaXBfZGF0YSB7CisJdTMyIHJlZzsKKworCXUzMiBsY2Rz ZWxfZ3JmX3JlZzsKKwl1MzIgbGNkc2VsX2JpZzsKKwl1MzIgbGNkc2VsX2xpdDsKKworCXUzMiBl bmFibGVfZ3JmX3JlZzsKKwl1MzIgZW5hYmxlOworCisJdTMyIGxhbmVjZmcxX2dyZl9yZWc7CisJ dTMyIGxhbmVjZmcxOworCXUzMiBsYW5lY2ZnMl9ncmZfcmVnOworCXUzMiBsYW5lY2ZnMjsKKwor CXVuc2lnbmVkIGludCBmbGFnczsKKwl1bnNpZ25lZCBpbnQgbWF4X2RhdGFfbGFuZXM7Cit9Owor CitzdHJ1Y3QgZHdfbWlwaV9kc2lfcm9ja2NoaXAgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlz dHJ1Y3QgZHJtX2VuY29kZXIgZW5jb2RlcjsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisKKwlzdHJ1 Y3QgcmVnbWFwICpncmZfcmVnbWFwOworCXN0cnVjdCBjbGsgKnBsbHJlZl9jbGs7CisJc3RydWN0 IGNsayAqZ3JmX2NsazsKKwlzdHJ1Y3QgY2xrICpwaHlfY2ZnX2NsazsKKworCXVuc2lnbmVkIGlu dCBsYW5lX21icHM7IC8qIHBlciBsYW5lICovCisJdTE2IGlucHV0X2RpdjsKKwl1MTYgZmVlZGJh Y2tfZGl2OworCXUzMiBmb3JtYXQ7CisKKwlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRtZDsKKwljb25z dCBzdHJ1Y3Qgcm9ja2NoaXBfZHdfZHNpX2NoaXBfZGF0YSAqY2RhdGE7CisJc3RydWN0IGR3X21p cGlfZHNpX3BsYXRfZGF0YSBwZGF0YTsKK307CisKK3N0cnVjdCBkcGh5X3BsbF9wYXJhbWV0ZXJf bWFwIHsKKwl1bnNpZ25lZCBpbnQgbWF4X21icHM7CisJdTggaHNmcmVxcmFuZ2U7CisJdTggaWNw Y3RybDsKKwl1OCBscGZjdHJsOworfTsKKworLyogVGhlIHRhYmxlIGlzIGJhc2VkIG9uIDI3TUh6 IERQSFkgcGxsIHJlZmVyZW5jZSBjbG9jay4gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHBoeV9w bGxfcGFyYW1ldGVyX21hcCBkcHBhX21hcFtdID0geworCXsgIDg5LCAweDAwLCBDUF9DVVJSRU5U XzNVQSwgTFBGX1JFU0lTVE9SU18xM0tPSE0gfSwKKwl7ICA5OSwgMHgxMCwgQ1BfQ1VSUkVOVF8z VUEsIExQRl9SRVNJU1RPUlNfMTNLT0hNIH0sCisJeyAxMDksIDB4MjAsIENQX0NVUlJFTlRfM1VB LCBMUEZfUkVTSVNUT1JTXzEzS09ITSB9LAorCXsgMTI5LCAweDAxLCBDUF9DVVJSRU5UXzNVQSwg TFBGX1JFU0lTVE9SU18xNV81S09ITSB9LAorCXsgMTM5LCAweDExLCBDUF9DVVJSRU5UXzNVQSwg TFBGX1JFU0lTVE9SU18xNV81S09ITSB9LAorCXsgMTQ5LCAweDIxLCBDUF9DVVJSRU5UXzNVQSwg TFBGX1JFU0lTVE9SU18xNV81S09ITSB9LAorCXsgMTY5LCAweDAyLCBDUF9DVVJSRU5UXzZVQSwg TFBGX1JFU0lTVE9SU18xM0tPSE0gfSwKKwl7IDE3OSwgMHgxMiwgQ1BfQ1VSUkVOVF82VUEsIExQ Rl9SRVNJU1RPUlNfMTNLT0hNIH0sCisJeyAxOTksIDB4MjIsIENQX0NVUlJFTlRfNlVBLCBMUEZf UkVTSVNUT1JTXzEzS09ITSB9LAorCXsgMjE5LCAweDAzLCBDUF9DVVJSRU5UXzRfNVVBLCBMUEZf UkVTSVNUT1JTXzEzS09ITSB9LAorCXsgMjM5LCAweDEzLCBDUF9DVVJSRU5UXzRfNVVBLCBMUEZf UkVTSVNUT1JTXzEzS09ITSB9LAorCXsgMjQ5LCAweDIzLCBDUF9DVVJSRU5UXzRfNVVBLCBMUEZf UkVTSVNUT1JTXzEzS09ITSB9LAorCXsgMjY5LCAweDA0LCBDUF9DVVJSRU5UXzZVQSwgTFBGX1JF U0lTVE9SU18xMV81S09ITSB9LAorCXsgMjk5LCAweDE0LCBDUF9DVVJSRU5UXzZVQSwgTFBGX1JF U0lTVE9SU18xMV81S09ITSB9LAorCXsgMzI5LCAweDA1LCBDUF9DVVJSRU5UXzNVQSwgTFBGX1JF U0lTVE9SU18xNV81S09ITSB9LAorCXsgMzU5LCAweDE1LCBDUF9DVVJSRU5UXzNVQSwgTFBGX1JF U0lTVE9SU18xNV81S09ITSB9LAorCXsgMzk5LCAweDI1LCBDUF9DVVJSRU5UXzNVQSwgTFBGX1JF U0lTVE9SU18xNV81S09ITSB9LAorCXsgNDQ5LCAweDA2LCBDUF9DVVJSRU5UXzdfNVVBLCBMUEZf UkVTSVNUT1JTXzExXzVLT0hNIH0sCisJeyA0OTksIDB4MTYsIENQX0NVUlJFTlRfN181VUEsIExQ Rl9SRVNJU1RPUlNfMTFfNUtPSE0gfSwKKwl7IDU0OSwgMHgwNywgQ1BfQ1VSUkVOVF83XzVVQSwg TFBGX1JFU0lTVE9SU18xMF81S09ITSB9LAorCXsgNTk5LCAweDE3LCBDUF9DVVJSRU5UXzdfNVVB LCBMUEZfUkVTSVNUT1JTXzEwXzVLT0hNIH0sCisJeyA2NDksIDB4MDgsIENQX0NVUlJFTlRfN181 VUEsIExQRl9SRVNJU1RPUlNfMTFfNUtPSE0gfSwKKwl7IDY5OSwgMHgxOCwgQ1BfQ1VSUkVOVF83 XzVVQSwgTFBGX1JFU0lTVE9SU18xMV81S09ITSB9LAorCXsgNzQ5LCAweDA5LCBDUF9DVVJSRU5U XzdfNVVBLCBMUEZfUkVTSVNUT1JTXzExXzVLT0hNIH0sCisJeyA3OTksIDB4MTksIENQX0NVUlJF TlRfN181VUEsIExQRl9SRVNJU1RPUlNfMTFfNUtPSE0gfSwKKwl7IDg0OSwgMHgyOSwgQ1BfQ1VS UkVOVF83XzVVQSwgTFBGX1JFU0lTVE9SU18xMV81S09ITSB9LAorCXsgODk5LCAweDM5LCBDUF9D VVJSRU5UXzdfNVVBLCBMUEZfUkVTSVNUT1JTXzExXzVLT0hNIH0sCisJeyA5NDksIDB4MGEsIENQ X0NVUlJFTlRfMTJVQSwgTFBGX1JFU0lTVE9SU184S09ITSB9LAorCXsgOTk5LCAweDFhLCBDUF9D VVJSRU5UXzEyVUEsIExQRl9SRVNJU1RPUlNfOEtPSE0gfSwKKwl7MTA0OSwgMHgyYSwgQ1BfQ1VS UkVOVF8xMlVBLCBMUEZfUkVTSVNUT1JTXzhLT0hNIH0sCisJezEwOTksIDB4M2EsIENQX0NVUlJF TlRfMTJVQSwgTFBGX1JFU0lTVE9SU184S09ITSB9LAorCXsxMTQ5LCAweDBiLCBDUF9DVVJSRU5U XzEyVUEsIExQRl9SRVNJU1RPUlNfMTBfNUtPSE0gfSwKKwl7MTE5OSwgMHgxYiwgQ1BfQ1VSUkVO VF8xMlVBLCBMUEZfUkVTSVNUT1JTXzEwXzVLT0hNIH0sCisJezEyNDksIDB4MmIsIENQX0NVUlJF TlRfMTJVQSwgTFBGX1JFU0lTVE9SU18xMF81S09ITSB9LAorCXsxMjk5LCAweDNiLCBDUF9DVVJS RU5UXzEyVUEsIExQRl9SRVNJU1RPUlNfMTBfNUtPSE0gfSwKKwl7MTM0OSwgMHgwYywgQ1BfQ1VS UkVOVF8xMlVBLCBMUEZfUkVTSVNUT1JTXzEwXzVLT0hNIH0sCisJezEzOTksIDB4MWMsIENQX0NV UlJFTlRfMTJVQSwgTFBGX1JFU0lTVE9SU18xMF81S09ITSB9LAorCXsxNDQ5LCAweDJjLCBDUF9D VVJSRU5UXzEyVUEsIExQRl9SRVNJU1RPUlNfMTBfNUtPSE0gfSwKKwl7MTUwMCwgMHgzYywgQ1Bf Q1VSUkVOVF8xMlVBLCBMUEZfUkVTSVNUT1JTXzEwXzVLT0hNIH0KK307CisKK3N0YXRpYyBpbnQg bWF4X21icHNfdG9fcGFyYW1ldGVyKHVuc2lnbmVkIGludCBtYXhfbWJwcykKK3sKKwlpbnQgaTsK KworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRwcGFfbWFwKTsgaSsrKQorCQlpZiAoZHBw YV9tYXBbaV0ubWF4X21icHMgPj0gbWF4X21icHMpCisJCQlyZXR1cm4gaTsKKworCXJldHVybiAt RUlOVkFMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZHNpX3dyaXRlKHN0cnVjdCBkd19taXBp X2RzaV9yb2NrY2hpcCAqZHNpLCB1MzIgcmVnLCB1MzIgdmFsKQoreworCXdyaXRlbCh2YWwsIGRz aS0+YmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGRzaV9yZWFkKHN0cnVjdCBk d19taXBpX2RzaV9yb2NrY2hpcCAqZHNpLCB1MzIgcmVnKQoreworCXJldHVybiByZWFkbChkc2kt PmJhc2UgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZHNpX3NldChzdHJ1Y3QgZHdf bWlwaV9kc2lfcm9ja2NoaXAgKmRzaSwgdTMyIHJlZywgdTMyIG1hc2spCit7CisJZHNpX3dyaXRl KGRzaSwgcmVnLCBkc2lfcmVhZChkc2ksIHJlZykgfCBtYXNrKTsKK30KKworc3RhdGljIGlubGlu ZSB2b2lkIGRzaV91cGRhdGVfYml0cyhzdHJ1Y3QgZHdfbWlwaV9kc2lfcm9ja2NoaXAgKmRzaSwg dTMyIHJlZywKKwkJCQkgICB1MzIgbWFzaywgdTMyIHZhbCkKK3sKKwlkc2lfd3JpdGUoZHNpLCBy ZWcsIChkc2lfcmVhZChkc2ksIHJlZykgJiB+bWFzaykgfCB2YWwpOworfQorCitzdGF0aWMgdm9p ZCBkd19taXBpX2RzaV9waHlfd3JpdGUoc3RydWN0IGR3X21pcGlfZHNpX3JvY2tjaGlwICpkc2ks CisJCQkJICB1OCB0ZXN0X2NvZGUsCisJCQkJICB1OCB0ZXN0X2RhdGEpCit7CisJLyoKKwkgKiBX aXRoIHRoZSBmYWxsaW5nIGVkZ2Ugb24gVEVTVENMSywgdGhlIFRFU1RESU5bNzowXSBzaWduYWwg Y29udGVudAorCSAqIGlzIGxhdGNoZWQgaW50ZXJuYWxseSBhcyB0aGUgY3VycmVudCB0ZXN0IGNv ZGUuIFRlc3QgZGF0YSBpcworCSAqIHByb2dyYW1tZWQgaW50ZXJuYWxseSBieSByaXNpbmcgZWRn ZSBvbiBURVNUQ0xLLgorCSAqLworCWRzaV93cml0ZShkc2ksIERTSV9QSFlfVFNUX0NUUkwwLCBQ SFlfVEVTVENMSyB8IFBIWV9VTlRFU1RDTFIpOworCisJZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9U U1RfQ1RSTDEsIFBIWV9URVNURU4gfCBQSFlfVEVTVERPVVQoMCkgfAorCQkJCQkgIFBIWV9URVNU RElOKHRlc3RfY29kZSkpOworCisJZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9UU1RfQ1RSTDAsIFBI WV9VTlRFU1RDTEsgfCBQSFlfVU5URVNUQ0xSKTsKKworCWRzaV93cml0ZShkc2ksIERTSV9QSFlf VFNUX0NUUkwxLCBQSFlfVU5URVNURU4gfCBQSFlfVEVTVERPVVQoMCkgfAorCQkJCQkgIFBIWV9U RVNURElOKHRlc3RfZGF0YSkpOworCisJZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9UU1RfQ1RSTDAs IFBIWV9URVNUQ0xLIHwgUEhZX1VOVEVTVENMUik7Cit9CisKKy8qKgorICogbnMyYmMgLSBOYW5v c2Vjb25kcyB0byBieXRlIGNsb2NrIGN5Y2xlcworICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVk IGludCBuczJiYyhzdHJ1Y3QgZHdfbWlwaV9kc2lfcm9ja2NoaXAgKmRzaSwgaW50IG5zKQorewor CXJldHVybiBESVZfUk9VTkRfVVAobnMgKiBkc2ktPmxhbmVfbWJwcyAvIDgsIDEwMDApOworfQor CisvKioKKyAqIG5zMnVpIC0gTmFub3NlY29uZHMgdG8gVUkgdGltZSBwZXJpb2RzCisgKi8KK3N0 YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG5zMnVpKHN0cnVjdCBkd19taXBpX2RzaV9yb2NrY2hp cCAqZHNpLCBpbnQgbnMpCit7CisJcmV0dXJuIERJVl9ST1VORF9VUChucyAqIGRzaS0+bGFuZV9t YnBzLCAxMDAwKTsKK30KKworc3RhdGljIGludCBkd19taXBpX2RzaV9waHlfaW5pdCh2b2lkICpw cml2X2RhdGEpCit7CisJc3RydWN0IGR3X21pcGlfZHNpX3JvY2tjaGlwICpkc2kgPSBwcml2X2Rh dGE7CisJaW50IHJldCwgaSwgdmNvOworCisJLyoKKwkgKiBHZXQgdmNvIGZyb20gZnJlcXVlbmN5 KGxhbmVfbWJwcykKKwkgKiB2Y28JZnJlcXVlbmN5IHRhYmxlCisJICogMDAwIC0gYmV0d2VlbiAg IDgwIGFuZCAgMjAwIE1IegorCSAqIDAwMSAtIGJldHdlZW4gIDIwMCBhbmQgIDMwMCBNSHoKKwkg KiAwMTAgLSBiZXR3ZWVuICAzMDAgYW5kICA1MDAgTUh6CisJICogMDExIC0gYmV0d2VlbiAgNTAw IGFuZCAgNzAwIE1IegorCSAqIDEwMCAtIGJldHdlZW4gIDcwMCBhbmQgIDkwMCBNSHoKKwkgKiAx MDEgLSBiZXR3ZWVuICA5MDAgYW5kIDExMDAgTUh6CisJICogMTEwIC0gYmV0d2VlbiAxMTAwIGFu ZCAxMzAwIE1IegorCSAqIDExMSAtIGJldHdlZW4gMTMwMCBhbmQgMTUwMCBNSHoKKwkgKi8KKwl2 Y28gPSAoZHNpLT5sYW5lX21icHMgPCAyMDApID8gMCA6IChkc2ktPmxhbmVfbWJwcyArIDEwMCkg LyAyMDA7CisKKwlpID0gbWF4X21icHNfdG9fcGFyYW1ldGVyKGRzaS0+bGFuZV9tYnBzKTsKKwlp ZiAoaSA8IDApIHsKKwkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwKKwkJCSAgICAgICJmYWlsZWQg dG8gZ2V0IHBhcmFtZXRlciBmb3IgJWRtYnBzIGNsb2NrXG4iLAorCQkJICAgICAgZHNpLT5sYW5l X21icHMpOworCQlyZXR1cm4gaTsKKwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZHNp LT5waHlfY2ZnX2Nsayk7CisJaWYgKHJldCkgeworCQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAi RmFpbGVkIHRvIGVuYWJsZSBwaHlfY2ZnX2Nsa1xuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJ ZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgUExMX0JJQVNfQ1VSX1NFTF9DQVBfVkNPX0NPTlRS T0wsCisJCQkgICAgICBCWVBBU1NfVkNPX1JBTkdFIHwKKwkJCSAgICAgIFZDT19SQU5HRV9DT05f U0VMKHZjbykgfAorCQkJICAgICAgVkNPX0lOX0NBUF9DT05fTE9XIHwKKwkJCSAgICAgIFJFRl9C SUFTX0NVUl9TRUwpOworCisJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgUExMX0NQX0NPTlRS T0xfUExMX0xPQ0tfQllQQVNTLAorCQkJICAgICAgQ1BfQ1VSUkVOVF9TRUwoZHBwYV9tYXBbaV0u aWNwY3RybCkpOworCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIFBMTF9MUEZfQU5EX0NQX0NP TlRST0wsCisJCQkgICAgICBDUF9QUk9HUkFNX0VOIHwgTFBGX1BST0dSQU1fRU4gfAorCQkJICAg ICAgTFBGX1JFU0lTVE9SU19TRUwoZHBwYV9tYXBbaV0ubHBmY3RybCkpOworCisJZHdfbWlwaV9k c2lfcGh5X3dyaXRlKGRzaSwgSFNfUlhfQ09OVFJPTF9PRl9MQU5FXzAsCisJCQkgICAgICBIU0ZS RVFSQU5HRV9TRUwoZHBwYV9tYXBbaV0uaHNmcmVxcmFuZ2UpKTsKKworCWR3X21pcGlfZHNpX3Bo eV93cml0ZShkc2ksIFBMTF9JTlBVVF9ESVZJREVSX1JBVElPLAorCQkJICAgICAgSU5QVVRfRElW SURFUihkc2ktPmlucHV0X2RpdikpOworCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIFBMTF9M T09QX0RJVklERVJfUkFUSU8sCisJCQkgICAgICBMT09QX0RJVl9MT1dfU0VMKGRzaS0+ZmVlZGJh Y2tfZGl2KSB8CisJCQkgICAgICBMT1dfUFJPR1JBTV9FTik7CisJLyoKKwkgKiBXZSBuZWVkIHNl dCBQTExfSU5QVVRfQU5EX0xPT1BfRElWSURFUl9SQVRJT1NfQ09OVFJPTCBpbW1lZGlhdGVseQor CSAqIHRvIG1ha2UgdGhlIGNvbmZpZ3VyZWQgTFNCIGVmZmVjdGl2ZSBhY2NvcmRpbmcgdG8gSVAg c2ltdWxhdGlvbgorCSAqIGFuZCBsYWIgdGVzdCByZXN1bHRzLgorCSAqIE9ubHkgaW4gdGhpcyB3 YXkgY2FuIHdlIGdldCBjb3JyZWN0IG1pcGkgcGh5IHBsbCBmcmVxdWVuY3kuCisJICovCisJZHdf bWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgUExMX0lOUFVUX0FORF9MT09QX0RJVklERVJfUkFUSU9T X0NPTlRST0wsCisJCQkgICAgICBQTExfTE9PUF9ESVZfRU4gfCBQTExfSU5QVVRfRElWX0VOKTsK Kwlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCBQTExfTE9PUF9ESVZJREVSX1JBVElPLAorCQkJ ICAgICAgTE9PUF9ESVZfSElHSF9TRUwoZHNpLT5mZWVkYmFja19kaXYpIHwKKwkJCSAgICAgIEhJ R0hfUFJPR1JBTV9FTik7CisJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgUExMX0lOUFVUX0FO RF9MT09QX0RJVklERVJfUkFUSU9TX0NPTlRST0wsCisJCQkgICAgICBQTExfTE9PUF9ESVZfRU4g fCBQTExfSU5QVVRfRElWX0VOKTsKKworCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIEFGRV9C SUFTX0JBTkRHQVBfQU5BTE9HX1BST0dSQU1NQUJJTElUWSwKKwkJCSAgICAgIExPV19QUk9HUkFN X0VOIHwgQklBU0VYVFJfU0VMKEJJQVNFWFRSXzEyN183KSk7CisJZHdfbWlwaV9kc2lfcGh5X3dy aXRlKGRzaSwgQUZFX0JJQVNfQkFOREdBUF9BTkFMT0dfUFJPR1JBTU1BQklMSVRZLAorCQkJICAg ICAgSElHSF9QUk9HUkFNX0VOIHwgQkFOREdBUF9TRUwoQkFOREdBUF85Nl8xMCkpOworCisJZHdf bWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgQkFOREdBUF9BTkRfQklBU19DT05UUk9MLAorCQkJICAg ICAgUE9XRVJfQ09OVFJPTCB8IElOVEVSTkFMX1JFR19DVVJSRU5UIHwKKwkJCSAgICAgIEJJQVNf QkxPQ0tfT04gfCBCQU5ER0FQX09OKTsKKworCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIFRF Uk1JTkFUSU9OX1JFU0lTVEVSX0NPTlRST0wsCisJCQkgICAgICBURVJfUkVTSVNUT1JfTE9XIHwg VEVSX0NBTF9ET05FIHwKKwkJCSAgICAgIFNFVFJEX01BWCB8IFRFUl9SRVNJU1RPUlNfT04pOwor CWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIFRFUk1JTkFUSU9OX1JFU0lTVEVSX0NPTlRST0ws CisJCQkgICAgICBURVJfUkVTSVNUT1JfSElHSCB8IExFVkVMX1NISUZURVJTX09OIHwKKwkJCSAg ICAgIFNFVFJEX01BWCB8IFBPV0VSX01BTkFHRSB8CisJCQkgICAgICBURVJfUkVTSVNUT1JTX09O KTsKKworCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIEhTX1RYX0NMT0NLX0xBTkVfUkVRVUVT VF9TVEFURV9USU1FX0NPTlRST0wsCisJCQkgICAgICBUTFBfUFJPR1JBTV9FTiB8IG5zMmJjKGRz aSwgNTAwKSk7CisJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgSFNfVFhfQ0xPQ0tfTEFORV9Q UkVQQVJFX1NUQVRFX1RJTUVfQ09OVFJPTCwKKwkJCSAgICAgIFRIU19QUkVfUFJPR1JBTV9FTiB8 IG5zMnVpKGRzaSwgNDApKTsKKwlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCBIU19UWF9DTE9D S19MQU5FX0hTX1pFUk9fU1RBVEVfVElNRV9DT05UUk9MLAorCQkJICAgICAgVEhTX1pFUk9fUFJP R1JBTV9FTiB8IG5zMmJjKGRzaSwgMzAwKSk7CisJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwg SFNfVFhfQ0xPQ0tfTEFORV9UUkFJTF9TVEFURV9USU1FX0NPTlRST0wsCisJCQkgICAgICBUSFNf UFJFX1BST0dSQU1fRU4gfCBuczJ1aShkc2ksIDEwMCkpOworCWR3X21pcGlfZHNpX3BoeV93cml0 ZShkc2ksIEhTX1RYX0NMT0NLX0xBTkVfRVhJVF9TVEFURV9USU1FX0NPTlRST0wsCisJCQkgICAg ICBCSVQoNSkgfCBuczJiYyhkc2ksIDEwMCkpOworCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ks IEhTX1RYX0NMT0NLX0xBTkVfUE9TVF9USU1FX0NPTlRST0wsCisJCQkgICAgICBCSVQoNSkgfCAo bnMyYmMoZHNpLCA2MCkgKyA3KSk7CisKKwlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCBIU19U WF9EQVRBX0xBTkVfUkVRVUVTVF9TVEFURV9USU1FX0NPTlRST0wsCisJCQkgICAgICBUTFBfUFJP R1JBTV9FTiB8IG5zMmJjKGRzaSwgNTAwKSk7CisJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwg SFNfVFhfREFUQV9MQU5FX1BSRVBBUkVfU1RBVEVfVElNRV9DT05UUk9MLAorCQkJICAgICAgVEhT X1BSRV9QUk9HUkFNX0VOIHwgKG5zMnVpKGRzaSwgNTApICsgMjApKTsKKwlkd19taXBpX2RzaV9w aHlfd3JpdGUoZHNpLCBIU19UWF9EQVRBX0xBTkVfSFNfWkVST19TVEFURV9USU1FX0NPTlRST0ws CisJCQkgICAgICBUSFNfWkVST19QUk9HUkFNX0VOIHwgKG5zMmJjKGRzaSwgMTQwKSArIDIpKTsK Kwlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCBIU19UWF9EQVRBX0xBTkVfVFJBSUxfU1RBVEVf VElNRV9DT05UUk9MLAorCQkJICAgICAgVEhTX1BSRV9QUk9HUkFNX0VOIHwgKG5zMnVpKGRzaSwg NjApICsgOCkpOworCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIEhTX1RYX0RBVEFfTEFORV9F WElUX1NUQVRFX1RJTUVfQ09OVFJPTCwKKwkJCSAgICAgIEJJVCg1KSB8IG5zMmJjKGRzaSwgMTAw KSk7CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5waHlfY2ZnX2Nsayk7CisKKwlyZXR1 cm4gcmV0OworfQorCitzdGF0aWMgaW50Citkd19taXBpX2RzaV9nZXRfbGFuZV9tYnBzKHZvaWQg KnByaXZfZGF0YSwgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkgIHVuc2lnbmVk IGxvbmcgbW9kZV9mbGFncywgdTMyIGxhbmVzLCB1MzIgZm9ybWF0LAorCQkJICB1bnNpZ25lZCBp bnQgKmxhbmVfbWJwcykKK3sKKwlzdHJ1Y3QgZHdfbWlwaV9kc2lfcm9ja2NoaXAgKmRzaSA9IHBy aXZfZGF0YTsKKwlpbnQgYnBwOworCXVuc2lnbmVkIGxvbmcgbXBjbGssIHRtcDsKKwl1bnNpZ25l ZCBpbnQgdGFyZ2V0X21icHMgPSAxMDAwOworCXVuc2lnbmVkIGludCBtYXhfbWJwcyA9IGRwcGFf bWFwW0FSUkFZX1NJWkUoZHBwYV9tYXApIC0gMV0ubWF4X21icHM7CisJdW5zaWduZWQgbG9uZyBi ZXN0X2ZyZXEgPSAwOworCXVuc2lnbmVkIGxvbmcgZnZjb19taW4sIGZ2Y29fbWF4LCBmaW4sIGZv dXQ7CisJdW5zaWduZWQgaW50IG1pbl9wcmVkaXYsIG1heF9wcmVkaXY7CisJdW5zaWduZWQgaW50 IF9wcmVkaXYsIHVuaW5pdGlhbGl6ZWRfdmFyKGJlc3RfcHJlZGl2KTsKKwl1bnNpZ25lZCBsb25n IF9mYmRpdiwgdW5pbml0aWFsaXplZF92YXIoYmVzdF9mYmRpdik7CisJdW5zaWduZWQgbG9uZyBt aW5fZGVsdGEgPSBVTE9OR19NQVg7CisKKwlkc2ktPmZvcm1hdCA9IGZvcm1hdDsKKwlicHAgPSBt aXBpX2RzaV9waXhlbF9mb3JtYXRfdG9fYnBwKGRzaS0+Zm9ybWF0KTsKKwlpZiAoYnBwIDwgMCkg eworCQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LAorCQkJICAgICAgImZhaWxlZCB0byBnZXQgYnBw IGZvciBwaXhlbCBmb3JtYXQgJWRcbiIsCisJCQkgICAgICBkc2ktPmZvcm1hdCk7CisJCXJldHVy biBicHA7CisJfQorCisJbXBjbGsgPSBESVZfUk9VTkRfVVAobW9kZS0+Y2xvY2ssIE1TRUNfUEVS X1NFQyk7CisJaWYgKG1wY2xrKSB7CisJCS8qIHRha2UgMSAvIDAuOCwgc2luY2UgbWJwcyBtdXN0 IGJpZyB0aGFuIGJhbmR3aWR0aCBvZiBSR0IgKi8KKwkJdG1wID0gbXBjbGsgKiAoYnBwIC8gbGFu ZXMpICogMTAgLyA4OworCQlpZiAodG1wIDwgbWF4X21icHMpCisJCQl0YXJnZXRfbWJwcyA9IHRt cDsKKwkJZWxzZQorCQkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwKKwkJCQkgICAgICAiRFBIWSBj bG9jayBmcmVxdWVuY3kgaXMgb3V0IG9mIHJhbmdlXG4iKTsKKwl9CisKKwlmaW4gPSBjbGtfZ2V0 X3JhdGUoZHNpLT5wbGxyZWZfY2xrKTsKKwlmb3V0ID0gdGFyZ2V0X21icHMgKiBVU0VDX1BFUl9T RUM7CisKKwkvKiBjb25zdHJhaW50OiA1TWh6IDw9IEZyZWYgLyBOIDw9IDQwTUh6ICovCisJbWlu X3ByZWRpdiA9IERJVl9ST1VORF9VUChmaW4sIDQwICogVVNFQ19QRVJfU0VDKTsKKwltYXhfcHJl ZGl2ID0gZmluIC8gKDUgKiBVU0VDX1BFUl9TRUMpOworCisJLyogY29uc3RyYWludDogODBNSHog PD0gRnZjbyA8PSAxNTAwTWh6ICovCisJZnZjb19taW4gPSA4MCAqIFVTRUNfUEVSX1NFQzsKKwlm dmNvX21heCA9IDE1MDAgKiBVU0VDX1BFUl9TRUM7CisKKwlmb3IgKF9wcmVkaXYgPSBtaW5fcHJl ZGl2OyBfcHJlZGl2IDw9IG1heF9wcmVkaXY7IF9wcmVkaXYrKykgeworCQl1NjQgdG1wOworCQl1 MzIgZGVsdGE7CisJCS8qIEZ2Y28gPSBGcmVmICogTSAvIE4gKi8KKwkJdG1wID0gKHU2NClmb3V0 ICogX3ByZWRpdjsKKwkJZG9fZGl2KHRtcCwgZmluKTsKKwkJX2ZiZGl2ID0gdG1wOworCQkvKgor CQkgKiBEdWUgdG8gdGhlIHVzZSBvZiBhICJieSAyIHByZS1zY2FsZXIsIiB0aGUgcmFuZ2Ugb2Yg dGhlCisJCSAqIGZlZWRiYWNrIG11bHRpcGxpY2F0aW9uIHZhbHVlIE0gaXMgbGltaXRlZCB0byBl dmVuIGRpdmlzaW9uCisJCSAqIG51bWJlcnMsIGFuZCBtIG11c3QgYmUgZ3JlYXRlciB0aGFuIDYs IG5vdCBiaWdnZXIgdGhhbiA1MTIuCisJCSAqLworCQlpZiAoX2ZiZGl2IDwgNiB8fCBfZmJkaXYg PiA1MTIpCisJCQljb250aW51ZTsKKworCQlfZmJkaXYgKz0gX2ZiZGl2ICUgMjsKKworCQl0bXAg PSAodTY0KV9mYmRpdiAqIGZpbjsKKwkJZG9fZGl2KHRtcCwgX3ByZWRpdik7CisJCWlmICh0bXAg PCBmdmNvX21pbiB8fCB0bXAgPiBmdmNvX21heCkKKwkJCWNvbnRpbnVlOworCisJCWRlbHRhID0g YWJzKGZvdXQgLSB0bXApOworCQlpZiAoZGVsdGEgPCBtaW5fZGVsdGEpIHsKKwkJCWJlc3RfcHJl ZGl2ID0gX3ByZWRpdjsKKwkJCWJlc3RfZmJkaXYgPSBfZmJkaXY7CisJCQltaW5fZGVsdGEgPSBk ZWx0YTsKKwkJCWJlc3RfZnJlcSA9IHRtcDsKKwkJfQorCX0KKworCWlmIChiZXN0X2ZyZXEpIHsK KwkJZHNpLT5sYW5lX21icHMgPSBESVZfUk9VTkRfVVAoYmVzdF9mcmVxLCBVU0VDX1BFUl9TRUMp OworCQkqbGFuZV9tYnBzID0gZHNpLT5sYW5lX21icHM7CisJCWRzaS0+aW5wdXRfZGl2ID0gYmVz dF9wcmVkaXY7CisJCWRzaS0+ZmVlZGJhY2tfZGl2ID0gYmVzdF9mYmRpdjsKKwl9IGVsc2Ugewor CQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiQ2FuIG5vdCBmaW5kIGJlc3RfZnJlcSBmb3IgRFBI WVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMg Y29uc3Qgc3RydWN0IGR3X21pcGlfZHNpX3BoeV9vcHMgZHdfbWlwaV9kc2lfcm9ja2NoaXBfcGh5 X29wcyA9IHsKKwkuaW5pdCA9IGR3X21pcGlfZHNpX3BoeV9pbml0LAorCS5nZXRfbGFuZV9tYnBz ID0gZHdfbWlwaV9kc2lfZ2V0X2xhbmVfbWJwcywKK307CisKK3N0YXRpYyB2b2lkIGR3X21pcGlf ZHNpX3JvY2tjaGlwX2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2lfcm9ja2NoaXAgKmRzaSwKKwkJ CQkJaW50IG11eCkKK3sKKwlwbV9ydW50aW1lX2dldF9zeW5jKGRzaS0+ZGV2KTsKKworCWlmIChk c2ktPmNkYXRhLT5sY2RzZWxfZ3JmX3JlZykKKwkJcmVnbWFwX3dyaXRlKGRzaS0+Z3JmX3JlZ21h cCwgZHNpLT5jZGF0YS0+bGNkc2VsX2dyZl9yZWcsCisJCQltdXggPyBkc2ktPmNkYXRhLT5sY2Rz ZWxfbGl0IDogZHNpLT5jZGF0YS0+bGNkc2VsX2JpZyk7CisKKwlpZiAoZHNpLT5jZGF0YS0+bGFu ZWNmZzFfZ3JmX3JlZykKKwkJcmVnbWFwX3dyaXRlKGRzaS0+Z3JmX3JlZ21hcCwgZHNpLT5jZGF0 YS0+bGFuZWNmZzFfZ3JmX3JlZywKKwkJCQkJICAgICAgZHNpLT5jZGF0YS0+bGFuZWNmZzEpOwor CisJaWYgKGRzaS0+Y2RhdGEtPmxhbmVjZmcyX2dyZl9yZWcpCisJCXJlZ21hcF93cml0ZShkc2kt PmdyZl9yZWdtYXAsIGRzaS0+Y2RhdGEtPmxhbmVjZmcyX2dyZl9yZWcsCisJCQkJCSAgICAgIGRz aS0+Y2RhdGEtPmxhbmVjZmcyKTsKKworCWlmIChkc2ktPmNkYXRhLT5lbmFibGVfZ3JmX3JlZykK KwkJcmVnbWFwX3dyaXRlKGRzaS0+Z3JmX3JlZ21hcCwgZHNpLT5jZGF0YS0+ZW5hYmxlX2dyZl9y ZWcsCisJCQkJCSAgICAgIGRzaS0+Y2RhdGEtPmVuYWJsZSk7Cit9CisKK3N0YXRpYyB2b2lkIGR3 X21pcGlfZHNpX2VuY29kZXJfbW9kZV9zZXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAor CQkJCQkgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJCSBzdHJ1Y3QgZHJtX2Rp c3BsYXlfbW9kZSAqYWRqdXN0ZWQpCit7CisJc3RydWN0IGR3X21pcGlfZHNpX3JvY2tjaGlwICpk c2kgPSB0b19kc2koZW5jb2Rlcik7CisJaW50IHJldCwgbXV4OworCisJbXV4ID0gZHJtX29mX2Vu Y29kZXJfYWN0aXZlX2VuZHBvaW50X2lkKGRzaS0+ZGV2LT5vZl9ub2RlLAorCQkJCQkJJmRzaS0+ ZW5jb2Rlcik7CisJaWYgKG11eCA8IDApCisJCXJldHVybjsKKworCS8qCisJICogRm9yIHRoZSBS SzMzOTksIHRoZSBjbGsgb2YgZ3JmIG11c3QgYmUgZW5hYmxlZCBiZWZvcmUgd3JpdGluZyBncmYK KwkgKiByZWdpc3Rlci4gQW5kIGZvciBSSzMyODggb3Igb3RoZXIgc29jLCB0aGlzIGdyZl9jbGsg bXVzdCBiZSBOVUxMLAorCSAqIHRoZSBjbGtfcHJlcGFyZV9lbmFibGUgcmV0dXJuIHRydWUgZGly ZWN0bHkuCisJICovCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+Z3JmX2Nsayk7CisJ aWYgKHJldCkgeworCQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBn cmZfY2xrOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuOworCX0KKworCWR3X21pcGlfZHNpX3JvY2tj aGlwX2NvbmZpZyhkc2ksIG11eCk7CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5ncmZf Y2xrKTsKK30KKworc3RhdGljIGludAorZHdfbWlwaV9kc2lfZW5jb2Rlcl9hdG9taWNfY2hlY2so c3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCSBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUg KmNydGNfc3RhdGUsCisJCQkJIHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRl KQoreworCXN0cnVjdCByb2NrY2hpcF9jcnRjX3N0YXRlICpzID0gdG9fcm9ja2NoaXBfY3J0Y19z dGF0ZShjcnRjX3N0YXRlKTsKKwlzdHJ1Y3QgZHdfbWlwaV9kc2lfcm9ja2NoaXAgKmRzaSA9IHRv X2RzaShlbmNvZGVyKTsKKworCXN3aXRjaCAoZHNpLT5mb3JtYXQpIHsKKwljYXNlIE1JUElfRFNJ X0ZNVF9SR0I4ODg6CisJCXMtPm91dHB1dF9tb2RlID0gUk9DS0NISVBfT1VUX01PREVfUDg4ODsK KwkJYnJlYWs7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCNjY2OgorCQlzLT5vdXRwdXRfbW9kZSA9 IFJPQ0tDSElQX09VVF9NT0RFX1A2NjY7CisJCWJyZWFrOworCWNhc2UgTUlQSV9EU0lfRk1UX1JH QjU2NToKKwkJcy0+b3V0cHV0X21vZGUgPSBST0NLQ0hJUF9PVVRfTU9ERV9QNTY1OworCQlicmVh azsKKwlkZWZhdWx0OgorCQlXQVJOX09OKDEpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlz LT5vdXRwdXRfdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9EU0k7CisKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfZW5jb2Rlcl9kaXNhYmxlKHN0cnVjdCBkcm1fZW5j b2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgZHdfbWlwaV9kc2lfcm9ja2NoaXAgKmRzaSA9IHRv X2RzaShlbmNvZGVyKTsKKworCXBtX3J1bnRpbWVfcHV0KGRzaS0+ZGV2KTsKK30KKworc3RhdGlj IGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MKK2R3X21pcGlfZHNpX2VuY29k ZXJfaGVscGVyX2Z1bmNzID0geworCS5tb2RlX3NldCA9IGR3X21pcGlfZHNpX2VuY29kZXJfbW9k ZV9zZXQsCisJLmF0b21pY19jaGVjayA9IGR3X21pcGlfZHNpX2VuY29kZXJfYXRvbWljX2NoZWNr LAorCS5kaXNhYmxlID0gZHdfbWlwaV9kc2lfZW5jb2Rlcl9kaXNhYmxlLAorfTsKKworc3RhdGlj IGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyBkd19taXBpX2RzaV9lbmNvZGVyX2Z1bmNz ID0geworCS5kZXN0cm95ID0gZHJtX2VuY29kZXJfY2xlYW51cCwKK307CisKK3N0YXRpYyBpbnQg cm9ja2NoaXBfZHNpX2RybV9jcmVhdGVfZW5jb2RlcihzdHJ1Y3QgZHdfbWlwaV9kc2lfcm9ja2No aXAgKmRzaSwKKwkJCQkJICAgc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYpCit7CisJc3RydWN0 IGRybV9lbmNvZGVyICplbmNvZGVyID0gJmRzaS0+ZW5jb2RlcjsKKwlpbnQgcmV0OworCisJZW5j b2Rlci0+cG9zc2libGVfY3J0Y3MgPSBkcm1fb2ZfZmluZF9wb3NzaWJsZV9jcnRjcyhkcm1fZGV2 LAorCQkJCQkJCSAgICAgZHNpLT5kZXYtPm9mX25vZGUpOworCisJcmV0ID0gZHJtX2VuY29kZXJf aW5pdChkcm1fZGV2LCBlbmNvZGVyLCAmZHdfbWlwaV9kc2lfZW5jb2Rlcl9mdW5jcywKKwkJCSAg ICAgICBEUk1fTU9ERV9FTkNPREVSX0RTSSwgTlVMTCk7CisJaWYgKHJldCkgeworCQlEUk1fRVJS T1IoIkZhaWxlZCB0byBpbml0aWFsaXplIGVuY29kZXIgd2l0aCBkcm1cbiIpOworCQlyZXR1cm4g cmV0OworCX0KKworCWRybV9lbmNvZGVyX2hlbHBlcl9hZGQoZW5jb2RlciwgJmR3X21pcGlfZHNp X2VuY29kZXJfaGVscGVyX2Z1bmNzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR3 X21pcGlfZHNpX3JvY2tjaGlwX2JpbmQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgc3Ry dWN0IGRldmljZSAqbWFzdGVyLAorCQkJCSAgICAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHdf bWlwaV9kc2lfcm9ja2NoaXAgKmRzaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBk cm1fZGV2aWNlICpkcm1fZGV2ID0gZGF0YTsKKwlzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlOwor CXN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsOworCWludCByZXQ7CisKKwkvKgorCSAqIEhhbmRsZSBw cm9iZS1kZWZlcnJhbHMgZHVlIHRvIG1pc3NpbmcgZGlzcGxheS4KKwkgKi8KKwlyZXQgPSBkcm1f b2ZfZmluZF9wYW5lbF9vcl9icmlkZ2UoZHNpLT5kZXYtPm9mX25vZGUsIDEsIDAsCisJCQkJCSAg JnBhbmVsLCAmYnJpZGdlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gcm9j a2NoaXBfZHNpX2RybV9jcmVhdGVfZW5jb2Rlcihkc2ksIGRybV9kZXYpOworCWlmIChyZXQpIHsK KwkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gY3JlYXRlIGRybSBlbmNvZGVyXG4iKTsK KwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBkd19taXBpX2RzaV9iaW5kKGRzaS0+ZG1kLCAm ZHNpLT5lbmNvZGVyKTsKKwlpZiAocmV0KSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVk IHRvIGJpbmQ6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOwor fQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9yb2NrY2hpcF91bmJpbmQoc3RydWN0IGRldmlj ZSAqZGV2LAorCQkJCQlzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCisJCQkJCXZvaWQgKmRhdGEpCit7 CisJc3RydWN0IGR3X21pcGlfZHNpX3JvY2tjaGlwICpkc2kgPSBkZXZfZ2V0X2RydmRhdGEoZGV2 KTsKKworCWR3X21pcGlfZHNpX3VuYmluZChkc2ktPmRtZCk7Cit9CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgY29tcG9uZW50X29wcyBkd19taXBpX2RzaV9yb2NrY2hpcF9vcHMgPSB7CisJLmJpbmQJ PSBkd19taXBpX2RzaV9yb2NrY2hpcF9iaW5kLAorCS51bmJpbmQJPSBkd19taXBpX2RzaV9yb2Nr Y2hpcF91bmJpbmQsCit9OworCitzdGF0aWMgaW50IGR3X21pcGlfZHNpX3JvY2tjaGlwX3Byb2Jl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0g JnBkZXYtPmRldjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOworCXN0 cnVjdCBkd19taXBpX2RzaV9yb2NrY2hpcCAqZHNpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOwor CWNvbnN0IHN0cnVjdCByb2NrY2hpcF9kd19kc2lfY2hpcF9kYXRhICpjZGF0YSA9CisJCQkJb2Zf ZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldik7CisJaW50IHJldCwgaTsKKworCWRzaSA9IGRldm1f a3phbGxvYyhkZXYsIHNpemVvZigqZHNpKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkc2kpCisJCXJl dHVybiAtRU5PTUVNOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVT T1VSQ0VfTUVNLCAwKTsKKwlkc2ktPmJhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCBy ZXMpOworCWlmIChJU19FUlIoZHNpLT5iYXNlKSkgeworCQlEUk1fREVWX0VSUk9SKGRldiwgIlVu YWJsZSB0byBnZXQgZHNpIHJlZ2lzdGVyc1xuIik7CisJCXJldHVybiBQVFJfRVJSKGRzaS0+YmFz ZSk7CisJfQorCisJaSA9IDA7CisJd2hpbGUgKGNkYXRhW2ldLnJlZykgeworCQlpZiAoY2RhdGFb aV0ucmVnID09IHJlcy0+c3RhcnQpIHsKKwkJCWRzaS0+Y2RhdGEgPSAmY2RhdGFbaV07CisJCQli cmVhazsKKwkJfQorCisJCWkrKzsKKwl9CisKKwlpZiAoIWRzaS0+Y2RhdGEpIHsKKwkJZGV2X2Vy cihkZXYsICJubyBkc2ktY29uZmlnIGZvciAlcyBub2RlXG4iLCBucC0+bmFtZSk7CisJCXJldHVy biAtRUlOVkFMOworCX0KKworCWRzaS0+cGxscmVmX2NsayA9IGRldm1fY2xrX2dldChkZXYsICJy ZWYiKTsKKwlpZiAoSVNfRVJSKGRzaS0+cGxscmVmX2NsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihk c2ktPnBsbHJlZl9jbGspOworCQlEUk1fREVWX0VSUk9SKGRldiwKKwkJCSAgICAgICJVbmFibGUg dG8gZ2V0IHBsbCByZWZlcmVuY2UgY2xvY2s6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0Owor CX0KKworCWlmIChkc2ktPmNkYXRhLT5mbGFncyAmIERXX01JUElfTkVFRFNfUEhZX0NGR19DTEsp IHsKKwkJZHNpLT5waHlfY2ZnX2NsayA9IGRldm1fY2xrX2dldChkZXYsICJwaHlfY2ZnIik7CisJ CWlmIChJU19FUlIoZHNpLT5waHlfY2ZnX2NsaykpIHsKKwkJCXJldCA9IFBUUl9FUlIoZHNpLT5w aHlfY2ZnX2Nsayk7CisJCQlEUk1fREVWX0VSUk9SKGRldiwKKwkJCQkgICAgICAiVW5hYmxlIHRv IGdldCBwaHlfY2ZnX2NsazogJWRcbiIsIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQor CisJaWYgKGRzaS0+Y2RhdGEtPmZsYWdzICYgRFdfTUlQSV9ORUVEU19HUkZfQ0xLKSB7CisJCWRz aS0+Z3JmX2NsayA9IGRldm1fY2xrX2dldChkZXYsICJncmYiKTsKKwkJaWYgKElTX0VSUihkc2kt PmdyZl9jbGspKSB7CisJCQlyZXQgPSBQVFJfRVJSKGRzaS0+Z3JmX2Nsayk7CisJCQlEUk1fREVW X0VSUk9SKGRldiwgIlVuYWJsZSB0byBnZXQgZ3JmX2NsazogJWRcbiIsIHJldCk7CisJCQlyZXR1 cm4gcmV0OworCQl9CisJfQorCisJZHNpLT5ncmZfcmVnbWFwID0gc3lzY29uX3JlZ21hcF9sb29r dXBfYnlfcGhhbmRsZShucCwgInJvY2tjaGlwLGdyZiIpOworCWlmIChJU19FUlIoZHNpLT5ncmZf cmVnbWFwKSkgeworCQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiVW5hYmxlIHRvIGdldCByb2Nr Y2hpcCxncmZcbiIpOworCQlyZXR1cm4gUFRSX0VSUihkc2ktPmdyZl9yZWdtYXApOworCX0KKwor CWRzaS0+ZGV2ID0gZGV2OworCWRzaS0+cGRhdGEuYmFzZSA9IGRzaS0+YmFzZTsKKwlkc2ktPnBk YXRhLm1heF9kYXRhX2xhbmVzID0gZHNpLT5jZGF0YS0+bWF4X2RhdGFfbGFuZXM7CisJZHNpLT5w ZGF0YS5waHlfb3BzID0gJmR3X21pcGlfZHNpX3JvY2tjaGlwX3BoeV9vcHM7CisJZHNpLT5wZGF0 YS5wcml2X2RhdGEgPSBkc2k7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZHNpKTsKKwor CXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkc2ktPnBsbHJlZl9jbGspOworCWlmIChyZXQpIHsK KwkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gZW5hYmxlIHBsbHJlZl9jbGs6ICVkXG4i LCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRzaS0+ZG1kID0gZHdfbWlwaV9kc2lfcHJv YmUocGRldiwgJmRzaS0+cGRhdGEpOworCWlmIChJU19FUlIoZHNpLT5kbWQpKSB7CisJCXJldCA9 IFBUUl9FUlIoZHNpLT5kbWQpOworCQlpZiAocmV0ICE9IC1FUFJPQkVfREVGRVIpCisJCQlEUk1f REVWX0VSUk9SKGRldiwKKwkJCQkgICAgICAiRmFpbGVkIHRvIHByb2JlIGR3X21pcGlfZHNpOiAl ZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfY2xrZGlzYWJsZTsKKwl9CisKKwlyZXQgPSBjb21wb25l bnRfYWRkKCZwZGV2LT5kZXYsICZkd19taXBpX2RzaV9yb2NrY2hpcF9vcHMpOworCWlmIChyZXQp IHsKKwkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgY29tcG9uZW50OiAl ZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfZHNpcHJvYmU7CisJfQorCisJcmV0dXJuIDA7CisKK2Vy cl9kc2lwcm9iZToKKwlkd19taXBpX2RzaV9yZW1vdmUoZHNpLT5kbWQpOworZXJyX2Nsa2Rpc2Fi bGU6CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+cGxscmVmX2Nsayk7CisJcmV0dXJuIHJl dDsKK30KKworc3RhdGljIGludCBkd19taXBpX2RzaV9yb2NrY2hpcF9yZW1vdmUoc3RydWN0IHBs YXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZHdfbWlwaV9kc2lfcm9ja2NoaXAgKmRz aSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJY29tcG9uZW50X2RlbCgmcGRldi0+ ZGV2LCAmZHdfbWlwaV9kc2lfcm9ja2NoaXBfb3BzKTsKKwlkd19taXBpX2RzaV9yZW1vdmUoZHNp LT5kbWQpOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPnBsbHJlZl9jbGspOworCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgcm9ja2NoaXBfZHdfZHNpX2NoaXBfZGF0 YSByazMyODhfY2hpcF9kYXRhW10gPSB7CisJeworCQkucmVnID0gMHhmZjk2MDAwMCwKKwkJLmxj ZHNlbF9ncmZfcmVnID0gUkszMjg4X0dSRl9TT0NfQ09ONiwKKwkJLmxjZHNlbF9iaWcgPSBISVdP UkRfVVBEQVRFKDAsIFJLMzI4OF9EU0kwX0xDRENfU0VMKSwKKwkJLmxjZHNlbF9saXQgPSBISVdP UkRfVVBEQVRFKFJLMzI4OF9EU0kwX0xDRENfU0VMLCBSSzMyODhfRFNJMF9MQ0RDX1NFTCksCisK KwkJLm1heF9kYXRhX2xhbmVzID0gNCwKKwl9LAorCXsKKwkJLnJlZyA9IDB4ZmY5NjQwMDAsCisJ CS5sY2RzZWxfZ3JmX3JlZyA9IFJLMzI4OF9HUkZfU09DX0NPTjYsCisJCS5sY2RzZWxfYmlnID0g SElXT1JEX1VQREFURSgwLCBSSzMyODhfRFNJMV9MQ0RDX1NFTCksCisJCS5sY2RzZWxfbGl0ID0g SElXT1JEX1VQREFURShSSzMyODhfRFNJMV9MQ0RDX1NFTCwgUkszMjg4X0RTSTFfTENEQ19TRUwp LAorCisJCS5tYXhfZGF0YV9sYW5lcyA9IDQsCisJfSwKKwl7IC8qIHNlbnRpbmVsICovIH0KK307 CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgcm9ja2NoaXBfZHdfZHNpX2NoaXBfZGF0YSByazMzOTlf Y2hpcF9kYXRhW10gPSB7CisJeworCQkucmVnID0gMHhmZjk2MDAwMCwKKwkJLmxjZHNlbF9ncmZf cmVnID0gUkszMzk5X0dSRl9TT0NfQ09OMjAsCisJCS5sY2RzZWxfYmlnID0gSElXT1JEX1VQREFU RSgwLCBSSzMzOTlfRFNJMF9MQ0RDX1NFTCksCisJCS5sY2RzZWxfbGl0ID0gSElXT1JEX1VQREFU RShSSzMzOTlfRFNJMF9MQ0RDX1NFTCwKKwkJCQkJICAgIFJLMzM5OV9EU0kwX0xDRENfU0VMKSwK KworCQkubGFuZWNmZzFfZ3JmX3JlZyA9IFJLMzM5OV9HUkZfU09DX0NPTjIyLAorCQkubGFuZWNm ZzEgPSBISVdPUkRfVVBEQVRFKDAsIFJLMzM5OV9EU0kwX1RVUk5SRVFVRVNUIHwKKwkJCQkJICAg ICBSSzMzOTlfRFNJMF9UVVJORElTQUJMRSB8CisJCQkJCSAgICAgUkszMzk5X0RTSTBfRk9SQ0VU WFNUT1BNT0RFIHwKKwkJCQkJICAgICBSSzMzOTlfRFNJMF9GT1JDRVJYTU9ERSksCisKKwkJLmZs YWdzID0gRFdfTUlQSV9ORUVEU19QSFlfQ0ZHX0NMSyB8IERXX01JUElfTkVFRFNfR1JGX0NMSywK KwkJLm1heF9kYXRhX2xhbmVzID0gNCwKKwl9LAorCXsKKwkJLnJlZyA9IDB4ZmY5NjgwMDAsCisJ CS5sY2RzZWxfZ3JmX3JlZyA9IFJLMzM5OV9HUkZfU09DX0NPTjIwLAorCQkubGNkc2VsX2JpZyA9 IEhJV09SRF9VUERBVEUoMCwgUkszMzk5X0RTSTFfTENEQ19TRUwpLAorCQkubGNkc2VsX2xpdCA9 IEhJV09SRF9VUERBVEUoUkszMzk5X0RTSTFfTENEQ19TRUwsCisJCQkJCSAgICBSSzMzOTlfRFNJ MV9MQ0RDX1NFTCksCisKKwkJLmxhbmVjZmcxX2dyZl9yZWcgPSBSSzMzOTlfR1JGX1NPQ19DT04y MywKKwkJLmxhbmVjZmcxID0gSElXT1JEX1VQREFURSgwLCBSSzMzOTlfRFNJMV9UVVJORElTQUJM RSB8CisJCQkJCSAgICAgUkszMzk5X0RTSTFfRk9SQ0VUWFNUT1BNT0RFIHwKKwkJCQkJICAgICBS SzMzOTlfRFNJMV9GT1JDRVJYTU9ERSB8CisJCQkJCSAgICAgUkszMzk5X0RTSTFfRU5BQkxFKSwK KworCQkubGFuZWNmZzJfZ3JmX3JlZyA9IFJLMzM5OV9HUkZfU09DX0NPTjI0LAorCQkubGFuZWNm ZzIgPSBISVdPUkRfVVBEQVRFKFJLMzM5OV9UWFJYX01BU1RFUlNMQVZFWiB8CisJCQkJCSAgUksz Mzk5X1RYUlhfRU5BQkxFQ0xLLAorCQkJCQkgIFJLMzM5OV9UWFJYX01BU1RFUlNMQVZFWiB8CisJ CQkJCSAgUkszMzk5X1RYUlhfRU5BQkxFQ0xLIHwKKwkJCQkJICBSSzMzOTlfVFhSWF9CQVNFRElS KSwKKworCQkuZW5hYmxlX2dyZl9yZWcgPSBSSzMzOTlfR1JGX1NPQ19DT04yMywKKwkJLmVuYWJs ZSA9IEhJV09SRF9VUERBVEUoUkszMzk5X0RTSTFfRU5BQkxFLCBSSzMzOTlfRFNJMV9FTkFCTEUp LAorCisJCS5mbGFncyA9IERXX01JUElfTkVFRFNfUEhZX0NGR19DTEsgfCBEV19NSVBJX05FRURT X0dSRl9DTEssCisJCS5tYXhfZGF0YV9sYW5lcyA9IDQsCisJfSwKKwl7IC8qIHNlbnRpbmVsICov IH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGR3X21pcGlfZHNpX3Jv Y2tjaGlwX2R0X2lkc1tdID0geworCXsKKwkgLmNvbXBhdGlibGUgPSAicm9ja2NoaXAscmszMjg4 LW1pcGktZHNpIiwKKwkgLmRhdGEgPSAmcmszMjg4X2NoaXBfZGF0YSwKKwl9LCB7CisJIC5jb21w YXRpYmxlID0gInJvY2tjaGlwLHJrMzM5OS1taXBpLWRzaSIsCisJIC5kYXRhID0gJnJrMzM5OV9j aGlwX2RhdGEsCisJfSwKKwl7IC8qIHNlbnRpbmVsICovIH0KK307CitNT0RVTEVfREVWSUNFX1RB QkxFKG9mLCBkd19taXBpX2RzaV9yb2NrY2hpcF9kdF9pZHMpOworCitzdHJ1Y3QgcGxhdGZvcm1f ZHJpdmVyIGR3X21pcGlfZHNpX3JvY2tjaGlwX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gZHdfbWlw aV9kc2lfcm9ja2NoaXBfcHJvYmUsCisJLnJlbW92ZQkJPSBkd19taXBpX2RzaV9yb2NrY2hpcF9y ZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5vZl9tYXRjaF90YWJsZSA9IGR3X21pcGlfZHNpX3Jv Y2tjaGlwX2R0X2lkcywKKwkJLm5hbWUJPSAiZHctbWlwaS1kc2ktcm9ja2NoaXAiLAorCX0sCit9 OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2R3LW1pcGktZHNpLmMgYi9k cml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvZHctbWlwaS1kc2kuYwpkZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggZDUzZDVhMDk1NDdmLi4wMDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL3JvY2tjaGlwL2R3LW1pcGktZHNpLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzQ5ICswLDAg QEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTYsIEZ1emhvdSBSb2NrY2hpcCBFbGVjdHJvbmlj cyBDby4sIEx0ZAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg b3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLSNpbmNsdWRl IDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9jb21wb25lbnQuaD4KLSNpbmNsdWRlIDxs aW51eC9pb3BvbGwuaD4KLSNpbmNsdWRlIDxsaW51eC9tYXRoNjQuaD4KLSNpbmNsdWRlIDxsaW51 eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51 eC9wbV9ydW50aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+Ci0jaW5jbHVkZSA8bGlu dXgvcmVzZXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+Ci0jaW5jbHVkZSA8ZHJt L2RybV9hdG9taWNfaGVscGVyLmg+Ci0jaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+Ci0jaW5jbHVk ZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgotI2luY2x1ZGUgPGRybS9kcm1fbWlwaV9kc2kuaD4K LSNpbmNsdWRlIDxkcm0vZHJtX29mLmg+Ci0jaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgotI2lu Y2x1ZGUgPGRybS9kcm1QLmg+Ci0jaW5jbHVkZSA8dmlkZW8vbWlwaV9kaXNwbGF5Lmg+Ci0KLSNp bmNsdWRlICJyb2NrY2hpcF9kcm1fZHJ2LmgiCi0jaW5jbHVkZSAicm9ja2NoaXBfZHJtX3ZvcC5o IgotCi0jZGVmaW5lIERSSVZFUl9OQU1FICAgICJkdy1taXBpLWRzaSIKLQotI2RlZmluZSBSSzMy ODhfR1JGX1NPQ19DT042CQkweDAyNWMKLSNkZWZpbmUgUkszMjg4X0RTSTBfU0VMX1ZPUF9MSVQJ CUJJVCg2KQotI2RlZmluZSBSSzMyODhfRFNJMV9TRUxfVk9QX0xJVAkJQklUKDkpCi0KLSNkZWZp bmUgUkszMzk5X0dSRl9TT0NfQ09OMjAJCTB4NjI1MAotI2RlZmluZSBSSzMzOTlfRFNJMF9TRUxf Vk9QX0xJVAkJQklUKDApCi0jZGVmaW5lIFJLMzM5OV9EU0kxX1NFTF9WT1BfTElUCQlCSVQoNCkK LQotLyogZGlzYWJsZSB0dXJucmVxdWVzdCwgdHVybmRpc2FibGUsIGZvcmNldHhzdG9wbW9kZSwg Zm9yY2VyeG1vZGUgKi8KLSNkZWZpbmUgUkszMzk5X0dSRl9TT0NfQ09OMjIJCTB4NjI1OAotI2Rl ZmluZSBSSzMzOTlfR1JGX0RTSV9NT0RFCQkweGZmZmYwMDAwCi0KLSNkZWZpbmUgRFNJX1ZFUlNJ T04JCQkweDAwCi0jZGVmaW5lIERTSV9QV1JfVVAJCQkweDA0Ci0jZGVmaW5lIFJFU0VUCQkJCTAK LSNkZWZpbmUgUE9XRVJVUAkJCQlCSVQoMCkKLQotI2RlZmluZSBEU0lfQ0xLTUdSX0NGRwkJCTB4 MDgKLSNkZWZpbmUgVE9fQ0xLX0RJVklEU0lPTihkaXYpCQkoKChkaXYpICYgMHhmZikgPDwgOCkK LSNkZWZpbmUgVFhfRVNDX0NMS19ESVZJRFNJT04oZGl2KQkoKChkaXYpICYgMHhmZikgPDwgMCkK LQotI2RlZmluZSBEU0lfRFBJX1ZDSUQJCQkweDBjCi0jZGVmaW5lIERQSV9WSUQodmlkKQkJCSgo KHZpZCkgJiAweDMpIDw8IDApCi0KLSNkZWZpbmUgRFNJX0RQSV9DT0xPUl9DT0RJTkcJCTB4MTAK LSNkZWZpbmUgRU4xOF9MT09TRUxZCQkJQklUKDgpCi0jZGVmaW5lIERQSV9DT0xPUl9DT0RJTkdf MTZCSVRfMQkweDAKLSNkZWZpbmUgRFBJX0NPTE9SX0NPRElOR18xNkJJVF8yCTB4MQotI2RlZmlu ZSBEUElfQ09MT1JfQ09ESU5HXzE2QklUXzMJMHgyCi0jZGVmaW5lIERQSV9DT0xPUl9DT0RJTkdf MThCSVRfMQkweDMKLSNkZWZpbmUgRFBJX0NPTE9SX0NPRElOR18xOEJJVF8yCTB4NAotI2RlZmlu ZSBEUElfQ09MT1JfQ09ESU5HXzI0QklUCQkweDUKLQotI2RlZmluZSBEU0lfRFBJX0NGR19QT0wJ CQkweDE0Ci0jZGVmaW5lIENPTE9STV9BQ1RJVkVfTE9XCQlCSVQoNCkKLSNkZWZpbmUgU0hVVERf QUNUSVZFX0xPVwkJQklUKDMpCi0jZGVmaW5lIEhTWU5DX0FDVElWRV9MT1cJCUJJVCgyKQotI2Rl ZmluZSBWU1lOQ19BQ1RJVkVfTE9XCQlCSVQoMSkKLSNkZWZpbmUgREFUQUVOX0FDVElWRV9MT1cJ CUJJVCgwKQotCi0jZGVmaW5lIERTSV9EUElfTFBfQ01EX1RJTQkJMHgxOAotI2RlZmluZSBPVVRW QUNUX0xQQ01EX1RJTUUocCkJCSgoKHApICYgMHhmZikgPDwgMTYpCi0jZGVmaW5lIElOVkFDVF9M UENNRF9USU1FKHApCQkoKHApICYgMHhmZikKLQotI2RlZmluZSBEU0lfREJJX0NGRwkJCTB4MjAK LSNkZWZpbmUgRFNJX0RCSV9DTURTSVpFCQkJMHgyOAotCi0jZGVmaW5lIERTSV9QQ0tIRExfQ0ZH CQkJMHgyYwotI2RlZmluZSBFTl9DUkNfUlgJCQlCSVQoNCkKLSNkZWZpbmUgRU5fRUNDX1JYCQkJ QklUKDMpCi0jZGVmaW5lIEVOX0JUQQkJCQlCSVQoMikKLSNkZWZpbmUgRU5fRU9UUF9SWAkJCUJJ VCgxKQotI2RlZmluZSBFTl9FT1RQX1RYCQkJQklUKDApCi0KLSNkZWZpbmUgRFNJX01PREVfQ0ZH CQkJMHgzNAotI2RlZmluZSBFTkFCTEVfVklERU9fTU9ERQkJMAotI2RlZmluZSBFTkFCTEVfQ01E X01PREUJCQlCSVQoMCkKLQotI2RlZmluZSBEU0lfVklEX01PREVfQ0ZHCQkweDM4Ci0jZGVmaW5l IEZSQU1FX0JUQV9BQ0sJCQlCSVQoMTQpCi0jZGVmaW5lIEVOQUJMRV9MT1dfUE9XRVIJCSgweDNm IDw8IDgpCi0jZGVmaW5lIEVOQUJMRV9MT1dfUE9XRVJfTUFTSwkJKDB4M2YgPDwgOCkKLSNkZWZp bmUgVklEX01PREVfVFlQRV9OT05fQlVSU1RfU1lOQ19QVUxTRVMJMHgwCi0jZGVmaW5lIFZJRF9N T0RFX1RZUEVfTk9OX0JVUlNUX1NZTkNfRVZFTlRTCTB4MQotI2RlZmluZSBWSURfTU9ERV9UWVBF X0JVUlNUCQkJMHgyCi0jZGVmaW5lIFZJRF9NT0RFX1RZUEVfTUFTSwkJCTB4MwotCi0jZGVmaW5l IERTSV9WSURfUEtUX1NJWkUJCTB4M2MKLSNkZWZpbmUgVklEX1BLVF9TSVpFKHApCQkJKCgocCkg JiAweDNmZmYpIDw8IDApCi0jZGVmaW5lIFZJRF9QS1RfTUFYX1NJWkUJCTB4M2ZmZgotCi0jZGVm aW5lIERTSV9WSURfSFNBX1RJTUUJCTB4NDgKLSNkZWZpbmUgRFNJX1ZJRF9IQlBfVElNRQkJMHg0 YwotI2RlZmluZSBEU0lfVklEX0hMSU5FX1RJTUUJCTB4NTAKLSNkZWZpbmUgRFNJX1ZJRF9WU0Ff TElORVMJCTB4NTQKLSNkZWZpbmUgRFNJX1ZJRF9WQlBfTElORVMJCTB4NTgKLSNkZWZpbmUgRFNJ X1ZJRF9WRlBfTElORVMJCTB4NWMKLSNkZWZpbmUgRFNJX1ZJRF9WQUNUSVZFX0xJTkVTCQkweDYw Ci0jZGVmaW5lIERTSV9DTURfTU9ERV9DRkcJCTB4NjgKLSNkZWZpbmUgTUFYX1JEX1BLVF9TSVpF X0xQCQlCSVQoMjQpCi0jZGVmaW5lIERDU19MV19UWF9MUAkJCUJJVCgxOSkKLSNkZWZpbmUgRENT X1NSXzBQX1RYX0xQCQkJQklUKDE4KQotI2RlZmluZSBEQ1NfU1dfMVBfVFhfTFAJCQlCSVQoMTcp Ci0jZGVmaW5lIERDU19TV18wUF9UWF9MUAkJCUJJVCgxNikKLSNkZWZpbmUgR0VOX0xXX1RYX0xQ CQkJQklUKDE0KQotI2RlZmluZSBHRU5fU1JfMlBfVFhfTFAJCQlCSVQoMTMpCi0jZGVmaW5lIEdF Tl9TUl8xUF9UWF9MUAkJCUJJVCgxMikKLSNkZWZpbmUgR0VOX1NSXzBQX1RYX0xQCQkJQklUKDEx KQotI2RlZmluZSBHRU5fU1dfMlBfVFhfTFAJCQlCSVQoMTApCi0jZGVmaW5lIEdFTl9TV18xUF9U WF9MUAkJCUJJVCg5KQotI2RlZmluZSBHRU5fU1dfMFBfVFhfTFAJCQlCSVQoOCkKLSNkZWZpbmUg RU5fQUNLX1JRU1QJCQlCSVQoMSkKLSNkZWZpbmUgRU5fVEVBUl9GWAkJCUJJVCgwKQotCi0jZGVm aW5lIENNRF9NT0RFX0FMTF9MUAkJCShNQVhfUkRfUEtUX1NJWkVfTFAgfCBcCi0JCQkJCSBEQ1Nf TFdfVFhfTFAgfCBcCi0JCQkJCSBEQ1NfU1JfMFBfVFhfTFAgfCBcCi0JCQkJCSBEQ1NfU1dfMVBf VFhfTFAgfCBcCi0JCQkJCSBEQ1NfU1dfMFBfVFhfTFAgfCBcCi0JCQkJCSBHRU5fTFdfVFhfTFAg fCBcCi0JCQkJCSBHRU5fU1JfMlBfVFhfTFAgfCBcCi0JCQkJCSBHRU5fU1JfMVBfVFhfTFAgfCBc Ci0JCQkJCSBHRU5fU1JfMFBfVFhfTFAgfCBcCi0JCQkJCSBHRU5fU1dfMlBfVFhfTFAgfCBcCi0J CQkJCSBHRU5fU1dfMVBfVFhfTFAgfCBcCi0JCQkJCSBHRU5fU1dfMFBfVFhfTFApCi0KLSNkZWZp bmUgRFNJX0dFTl9IRFIJCQkweDZjCi0jZGVmaW5lIEdFTl9IREFUQShkYXRhKQkJCSgoKGRhdGEp ICYgMHhmZmZmKSA8PCA4KQotI2RlZmluZSBHRU5fSERBVEFfTUFTSwkJCSgweGZmZmYgPDwgOCkK LSNkZWZpbmUgR0VOX0hUWVBFKHR5cGUpCQkJKCgodHlwZSkgJiAweGZmKSA8PCAwKQotI2RlZmlu ZSBHRU5fSFRZUEVfTUFTSwkJCTB4ZmYKLQotI2RlZmluZSBEU0lfR0VOX1BMRF9EQVRBCQkweDcw Ci0KLSNkZWZpbmUgRFNJX0NNRF9QS1RfU1RBVFVTCQkweDc0Ci0jZGVmaW5lIEdFTl9DTURfRU1Q VFkJCQlCSVQoMCkKLSNkZWZpbmUgR0VOX0NNRF9GVUxMCQkJQklUKDEpCi0jZGVmaW5lIEdFTl9Q TERfV19FTVBUWQkJCUJJVCgyKQotI2RlZmluZSBHRU5fUExEX1dfRlVMTAkJCUJJVCgzKQotI2Rl ZmluZSBHRU5fUExEX1JfRU1QVFkJCQlCSVQoNCkKLSNkZWZpbmUgR0VOX1BMRF9SX0ZVTEwJCQlC SVQoNSkKLSNkZWZpbmUgR0VOX1JEX0NNRF9CVVNZCQkJQklUKDYpCi0KLSNkZWZpbmUgRFNJX1RP X0NOVF9DRkcJCQkweDc4Ci0jZGVmaW5lIEhTVFhfVE9fQ05UKHApCQkJKCgocCkgJiAweGZmZmYp IDw8IDE2KQotI2RlZmluZSBMUFJYX1RPX0NOVChwKQkJCSgocCkgJiAweGZmZmYpCi0KLSNkZWZp bmUgRFNJX0JUQV9UT19DTlQJCQkweDhjCi0jZGVmaW5lIERTSV9MUENMS19DVFJMCQkJMHg5NAot I2RlZmluZSBBVVRPX0NMS0xBTkVfQ1RSTAkJQklUKDEpCi0jZGVmaW5lIFBIWV9UWFJFUVVFU1RD TEtIUwkJQklUKDApCi0KLSNkZWZpbmUgRFNJX1BIWV9UTVJfTFBDTEtfQ0ZHCQkweDk4Ci0jZGVm aW5lIFBIWV9DTEtIUzJMUF9USU1FKGxiY2MpCQkoKChsYmNjKSAmIDB4M2ZmKSA8PCAxNikKLSNk ZWZpbmUgUEhZX0NMS0xQMkhTX1RJTUUobGJjYykJCSgobGJjYykgJiAweDNmZikKLQotI2RlZmlu ZSBEU0lfUEhZX1RNUl9DRkcJCQkweDljCi0jZGVmaW5lIFBIWV9IUzJMUF9USU1FKGxiY2MpCQko KChsYmNjKSAmIDB4ZmYpIDw8IDI0KQotI2RlZmluZSBQSFlfTFAySFNfVElNRShsYmNjKQkJKCgo bGJjYykgJiAweGZmKSA8PCAxNikKLSNkZWZpbmUgTUFYX1JEX1RJTUUobGJjYykJCSgobGJjYykg JiAweDdmZmYpCi0KLSNkZWZpbmUgRFNJX1BIWV9SU1RaCQkJMHhhMAotI2RlZmluZSBQSFlfRElT Rk9SQ0VQTEwJCQkwCi0jZGVmaW5lIFBIWV9FTkZPUkNFUExMCQkJQklUKDMpCi0jZGVmaW5lIFBI WV9ESVNBQkxFQ0xLCQkJMAotI2RlZmluZSBQSFlfRU5BQkxFQ0xLCQkJQklUKDIpCi0jZGVmaW5l IFBIWV9SU1RaCQkJMAotI2RlZmluZSBQSFlfVU5SU1RaCQkJQklUKDEpCi0jZGVmaW5lIFBIWV9T SFVURE9XTloJCQkwCi0jZGVmaW5lIFBIWV9VTlNIVVRET1dOWgkJCUJJVCgwKQotCi0jZGVmaW5l IERTSV9QSFlfSUZfQ0ZHCQkJMHhhNAotI2RlZmluZSBOX0xBTkVTKG4pCQkJKCgoKG4pIC0gMSkg JiAweDMpIDw8IDApCi0jZGVmaW5lIFBIWV9TVE9QX1dBSVRfVElNRShjeWNsZSkJKCgoY3ljbGUp ICYgMHhmZikgPDwgOCkKLQotI2RlZmluZSBEU0lfUEhZX1NUQVRVUwkJCTB4YjAKLSNkZWZpbmUg TE9DSwkJCQlCSVQoMCkKLSNkZWZpbmUgU1RPUF9TVEFURV9DTEtfTEFORQkJQklUKDIpCi0KLSNk ZWZpbmUgRFNJX1BIWV9UU1RfQ1RSTDAJCTB4YjQKLSNkZWZpbmUgUEhZX1RFU1RDTEsJCQlCSVQo MSkKLSNkZWZpbmUgUEhZX1VOVEVTVENMSwkJCTAKLSNkZWZpbmUgUEhZX1RFU1RDTFIJCQlCSVQo MCkKLSNkZWZpbmUgUEhZX1VOVEVTVENMUgkJCTAKLQotI2RlZmluZSBEU0lfUEhZX1RTVF9DVFJM MQkJMHhiOAotI2RlZmluZSBQSFlfVEVTVEVOCQkJQklUKDE2KQotI2RlZmluZSBQSFlfVU5URVNU RU4JCQkwCi0jZGVmaW5lIFBIWV9URVNURE9VVChuKQkJCSgoKG4pICYgMHhmZikgPDwgOCkKLSNk ZWZpbmUgUEhZX1RFU1RESU4obikJCQkoKChuKSAmIDB4ZmYpIDw8IDApCi0KLSNkZWZpbmUgRFNJ X0lOVF9TVDAJCQkweGJjCi0jZGVmaW5lIERTSV9JTlRfU1QxCQkJMHhjMAotI2RlZmluZSBEU0lf SU5UX01TSzAJCQkweGM0Ci0jZGVmaW5lIERTSV9JTlRfTVNLMQkJCTB4YzgKLQotI2RlZmluZSBQ SFlfU1RBVFVTX1RJTUVPVVRfVVMJCTEwMDAwCi0jZGVmaW5lIENNRF9QS1RfU1RBVFVTX1RJTUVP VVRfVVMJMjAwMDAKLQotI2RlZmluZSBCWVBBU1NfVkNPX1JBTkdFCUJJVCg3KQotI2RlZmluZSBW Q09fUkFOR0VfQ09OX1NFTCh2YWwpCSgoKHZhbCkgJiAweDcpIDw8IDMpCi0jZGVmaW5lIFZDT19J Tl9DQVBfQ09OX0RFRkFVTFQJKDB4MCA8PCAxKQotI2RlZmluZSBWQ09fSU5fQ0FQX0NPTl9MT1cJ KDB4MSA8PCAxKQotI2RlZmluZSBWQ09fSU5fQ0FQX0NPTl9ISUdICSgweDIgPDwgMSkKLSNkZWZp bmUgUkVGX0JJQVNfQ1VSX1NFTAlCSVQoMCkKLQotI2RlZmluZSBDUF9DVVJSRU5UXzNNQQkJQklU KDMpCi0jZGVmaW5lIENQX1BST0dSQU1fRU4JCUJJVCg3KQotI2RlZmluZSBMUEZfUFJPR1JBTV9F TgkJQklUKDYpCi0jZGVmaW5lIExQRl9SRVNJU1RPUlNfMjBfS09ITQkwCi0KLSNkZWZpbmUgSFNG UkVRUkFOR0VfU0VMKHZhbCkJKCgodmFsKSAmIDB4M2YpIDw8IDEpCi0KLSNkZWZpbmUgSU5QVVRf RElWSURFUih2YWwpCSgoKHZhbCkgLSAxKSAmIDB4N2YpCi0jZGVmaW5lIExPV19QUk9HUkFNX0VO CQkwCi0jZGVmaW5lIEhJR0hfUFJPR1JBTV9FTgkJQklUKDcpCi0jZGVmaW5lIExPT1BfRElWX0xP V19TRUwodmFsKQkoKCh2YWwpIC0gMSkgJiAweDFmKQotI2RlZmluZSBMT09QX0RJVl9ISUdIX1NF TCh2YWwpCSgoKCh2YWwpIC0gMSkgPj4gNSkgJiAweDFmKQotI2RlZmluZSBQTExfTE9PUF9ESVZf RU4JCUJJVCg1KQotI2RlZmluZSBQTExfSU5QVVRfRElWX0VOCUJJVCg0KQotCi0jZGVmaW5lIFBP V0VSX0NPTlRST0wJCUJJVCg2KQotI2RlZmluZSBJTlRFUk5BTF9SRUdfQ1VSUkVOVAlCSVQoMykK LSNkZWZpbmUgQklBU19CTE9DS19PTgkJQklUKDIpCi0jZGVmaW5lIEJBTkRHQVBfT04JCUJJVCgw KQotCi0jZGVmaW5lIFRFUl9SRVNJU1RPUl9ISUdICUJJVCg3KQotI2RlZmluZQlURVJfUkVTSVNU T1JfTE9XCTAKLSNkZWZpbmUgTEVWRUxfU0hJRlRFUlNfT04JQklUKDYpCi0jZGVmaW5lIFRFUl9D QUxfRE9ORQkJQklUKDUpCi0jZGVmaW5lIFNFVFJEX01BWAkJKDB4NyA8PCAyKQotI2RlZmluZSBQ T1dFUl9NQU5BR0UJCUJJVCgxKQotI2RlZmluZSBURVJfUkVTSVNUT1JTX09OCUJJVCgwKQotCi0j ZGVmaW5lIEJJQVNFWFRSX1NFTCh2YWwpCSgodmFsKSAmIDB4NykKLSNkZWZpbmUgQkFOREdBUF9T RUwodmFsKQkoKHZhbCkgJiAweDcpCi0jZGVmaW5lIFRMUF9QUk9HUkFNX0VOCQlCSVQoNykKLSNk ZWZpbmUgVEhTX1BSRV9QUk9HUkFNX0VOCUJJVCg3KQotI2RlZmluZSBUSFNfWkVST19QUk9HUkFN X0VOCUJJVCg2KQotCi0jZGVmaW5lIERXX01JUElfTkVFRFNfUEhZX0NGR19DTEsJQklUKDApCi0j ZGVmaW5lIERXX01JUElfTkVFRFNfR1JGX0NMSwkJQklUKDEpCi0KLWVudW0gewotCUJBTkRHQVBf OTdfMDcsCi0JQkFOREdBUF85OF8wNSwKLQlCQU5ER0FQXzk5XzAyLAotCUJBTkRHQVBfMTAwXzAw LAotCUJBTkRHQVBfOTNfMTcsCi0JQkFOREdBUF85NF8xNSwKLQlCQU5ER0FQXzk1XzEyLAotCUJB TkRHQVBfOTZfMTAsCi19OwotCi1lbnVtIHsKLQlCSUFTRVhUUl84N18xLAotCUJJQVNFWFRSXzkx XzUsCi0JQklBU0VYVFJfOTVfOSwKLQlCSUFTRVhUUl8xMDAsCi0JQklBU0VYVFJfMTA1Xzk0LAot CUJJQVNFWFRSXzExMV84OCwKLQlCSUFTRVhUUl8xMThfOCwKLQlCSUFTRVhUUl8xMjdfNywKLX07 Ci0KLXN0cnVjdCBkd19taXBpX2RzaV9wbGF0X2RhdGEgewotCXUzMiBkc2kwX2VuX2JpdDsKLQl1 MzIgZHNpMV9lbl9iaXQ7Ci0JdTMyIGdyZl9zd2l0Y2hfcmVnOwotCXUzMiBncmZfZHNpMF9tb2Rl OwotCXUzMiBncmZfZHNpMF9tb2RlX3JlZzsKLQl1bnNpZ25lZCBpbnQgZmxhZ3M7Ci0JdW5zaWdu ZWQgaW50IG1heF9kYXRhX2xhbmVzOwotfTsKLQotc3RydWN0IGR3X21pcGlfZHNpIHsKLQlzdHJ1 Y3QgZHJtX2VuY29kZXIgZW5jb2RlcjsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciBjb25uZWN0b3I7 Ci0Jc3RydWN0IG1pcGlfZHNpX2hvc3QgZHNpX2hvc3Q7Ci0Jc3RydWN0IGRybV9wYW5lbCAqcGFu ZWw7Ci0Jc3RydWN0IGRldmljZSAqZGV2OwotCXN0cnVjdCByZWdtYXAgKmdyZl9yZWdtYXA7Ci0J dm9pZCBfX2lvbWVtICpiYXNlOwotCi0Jc3RydWN0IGNsayAqZ3JmX2NsazsKLQlzdHJ1Y3QgY2xr ICpwbGxyZWZfY2xrOwotCXN0cnVjdCBjbGsgKnBjbGs7Ci0Jc3RydWN0IGNsayAqcGh5X2NmZ19j bGs7Ci0KLQlpbnQgZHBtc19tb2RlOwotCXVuc2lnbmVkIGludCBsYW5lX21icHM7IC8qIHBlciBs YW5lICovCi0JdTMyIGNoYW5uZWw7Ci0JdTMyIGxhbmVzOwotCXUzMiBmb3JtYXQ7Ci0JdTE2IGlu cHV0X2RpdjsKLQl1MTYgZmVlZGJhY2tfZGl2OwotCXVuc2lnbmVkIGxvbmcgbW9kZV9mbGFnczsK LQotCWNvbnN0IHN0cnVjdCBkd19taXBpX2RzaV9wbGF0X2RhdGEgKnBkYXRhOwotfTsKLQotZW51 bSBkd19taXBpX2RzaV9tb2RlIHsKLQlEV19NSVBJX0RTSV9DTURfTU9ERSwKLQlEV19NSVBJX0RT SV9WSURfTU9ERSwKLX07Ci0KLXN0cnVjdCBkcGh5X3BsbF90ZXN0ZGluX21hcCB7Ci0JdW5zaWdu ZWQgaW50IG1heF9tYnBzOwotCXU4IHRlc3RkaW47Ci19OwotCi0vKiBUaGUgdGFibGUgaXMgYmFz ZWQgb24gMjdNSHogRFBIWSBwbGwgcmVmZXJlbmNlIGNsb2NrLiAqLwotc3RhdGljIGNvbnN0IHN0 cnVjdCBkcGh5X3BsbF90ZXN0ZGluX21hcCBkcHRkaW5fbWFwW10gPSB7Ci0JeyAgOTAsIDB4MDB9 LCB7IDEwMCwgMHgxMH0sIHsgMTEwLCAweDIwfSwgeyAxMzAsIDB4MDF9LAotCXsgMTQwLCAweDEx fSwgeyAxNTAsIDB4MjF9LCB7IDE3MCwgMHgwMn0sIHsgMTgwLCAweDEyfSwKLQl7IDIwMCwgMHgy Mn0sIHsgMjIwLCAweDAzfSwgeyAyNDAsIDB4MTN9LCB7IDI1MCwgMHgyM30sCi0JeyAyNzAsIDB4 MDR9LCB7IDMwMCwgMHgxNH0sIHsgMzMwLCAweDA1fSwgeyAzNjAsIDB4MTV9LAotCXsgNDAwLCAw eDI1fSwgeyA0NTAsIDB4MDZ9LCB7IDUwMCwgMHgxNn0sIHsgNTUwLCAweDA3fSwKLQl7IDYwMCwg MHgxN30sIHsgNjUwLCAweDA4fSwgeyA3MDAsIDB4MTh9LCB7IDc1MCwgMHgwOX0sCi0JeyA4MDAs IDB4MTl9LCB7IDg1MCwgMHgyOX0sIHsgOTAwLCAweDM5fSwgeyA5NTAsIDB4MGF9LAotCXsxMDAw LCAweDFhfSwgezEwNTAsIDB4MmF9LCB7MTEwMCwgMHgzYX0sIHsxMTUwLCAweDBifSwKLQl7MTIw MCwgMHgxYn0sIHsxMjUwLCAweDJifSwgezEzMDAsIDB4M2J9LCB7MTM1MCwgMHgwY30sCi0JezE0 MDAsIDB4MWN9LCB7MTQ1MCwgMHgyY30sIHsxNTAwLCAweDNjfQotfTsKLQotc3RhdGljIGludCBt YXhfbWJwc190b190ZXN0ZGluKHVuc2lnbmVkIGludCBtYXhfbWJwcykKLXsKLQlpbnQgaTsKLQot CWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRwdGRpbl9tYXApOyBpKyspCi0JCWlmIChkcHRk aW5fbWFwW2ldLm1heF9tYnBzID4gbWF4X21icHMpCi0JCQlyZXR1cm4gZHB0ZGluX21hcFtpXS50 ZXN0ZGluOwotCi0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLS8qCi0gKiBUaGUgY29udHJvbGxlciBz aG91bGQgZ2VuZXJhdGUgMiBmcmFtZXMgYmVmb3JlCi0gKiBwcmVwYXJpbmcgdGhlIHBlcmlwaGVy YWwuCi0gKi8KLXN0YXRpYyB2b2lkIGR3X21pcGlfZHNpX3dhaXRfZm9yX3R3b19mcmFtZXMoc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCi17Ci0JaW50IHJlZnJlc2gsIHR3b19mcmFtZXM7 Ci0KLQlyZWZyZXNoID0gZHJtX21vZGVfdnJlZnJlc2gobW9kZSk7Ci0JdHdvX2ZyYW1lcyA9IERJ Vl9ST1VORF9VUChNU0VDX1BFUl9TRUMsIHJlZnJlc2gpICogMjsKLQltc2xlZXAodHdvX2ZyYW1l cyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGR3X21pcGlfZHNpICpob3N0X3RvX2RzaShz dHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCkKLXsKLQlyZXR1cm4gY29udGFpbmVyX29mKGhvc3Qs IHN0cnVjdCBkd19taXBpX2RzaSwgZHNpX2hvc3QpOwotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVj dCBkd19taXBpX2RzaSAqY29uX3RvX2RzaShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29uKQotewot CXJldHVybiBjb250YWluZXJfb2YoY29uLCBzdHJ1Y3QgZHdfbWlwaV9kc2ksIGNvbm5lY3Rvcik7 Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGR3X21pcGlfZHNpICplbmNvZGVyX3RvX2RzaShz dHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCi17Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZihlbmNv ZGVyLCBzdHJ1Y3QgZHdfbWlwaV9kc2ksIGVuY29kZXIpOwotfQotCi1zdGF0aWMgaW5saW5lIHZv aWQgZHNpX3dyaXRlKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLCB1MzIgcmVnLCB1MzIgdmFsKQot ewotCXdyaXRlbCh2YWwsIGRzaS0+YmFzZSArIHJlZyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMy IGRzaV9yZWFkKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLCB1MzIgcmVnKQotewotCXJldHVybiBy ZWFkbChkc2ktPmJhc2UgKyByZWcpOwotfQotCi1zdGF0aWMgdm9pZCBkd19taXBpX2RzaV9waHlf d3JpdGUoc3RydWN0IGR3X21pcGlfZHNpICpkc2ksIHU4IHRlc3RfY29kZSwKLQkJCQkgIHU4IHRl c3RfZGF0YSkKLXsKLQkvKgotCSAqIFdpdGggdGhlIGZhbGxpbmcgZWRnZSBvbiBURVNUQ0xLLCB0 aGUgVEVTVERJTls3OjBdIHNpZ25hbCBjb250ZW50Ci0JICogaXMgbGF0Y2hlZCBpbnRlcm5hbGx5 IGFzIHRoZSBjdXJyZW50IHRlc3QgY29kZS4gVGVzdCBkYXRhIGlzCi0JICogcHJvZ3JhbW1lZCBp bnRlcm5hbGx5IGJ5IHJpc2luZyBlZGdlIG9uIFRFU1RDTEsuCi0JICovCi0JZHNpX3dyaXRlKGRz aSwgRFNJX1BIWV9UU1RfQ1RSTDAsIFBIWV9URVNUQ0xLIHwgUEhZX1VOVEVTVENMUik7Ci0KLQlk c2lfd3JpdGUoZHNpLCBEU0lfUEhZX1RTVF9DVFJMMSwgUEhZX1RFU1RFTiB8IFBIWV9URVNURE9V VCgwKSB8Ci0JCQkJCSAgUEhZX1RFU1RESU4odGVzdF9jb2RlKSk7Ci0KLQlkc2lfd3JpdGUoZHNp LCBEU0lfUEhZX1RTVF9DVFJMMCwgUEhZX1VOVEVTVENMSyB8IFBIWV9VTlRFU1RDTFIpOwotCi0J ZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9UU1RfQ1RSTDEsIFBIWV9VTlRFU1RFTiB8IFBIWV9URVNU RE9VVCgwKSB8Ci0JCQkJCSAgUEhZX1RFU1RESU4odGVzdF9kYXRhKSk7Ci0KLQlkc2lfd3JpdGUo ZHNpLCBEU0lfUEhZX1RTVF9DVFJMMCwgUEhZX1RFU1RDTEsgfCBQSFlfVU5URVNUQ0xSKTsKLX0K LQotLyoqCi0gKiBuczJiYyAtIE5hbm9zZWNvbmRzIHRvIGJ5dGUgY2xvY2sgY3ljbGVzCi0gKi8K LXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG5zMmJjKHN0cnVjdCBkd19taXBpX2RzaSAqZHNp LCBpbnQgbnMpCi17Ci0JcmV0dXJuIERJVl9ST1VORF9VUChucyAqIGRzaS0+bGFuZV9tYnBzIC8g OCwgMTAwMCk7Ci19Ci0KLS8qKgotICogbnMydWkgLSBOYW5vc2Vjb25kcyB0byBVSSB0aW1lIHBl cmlvZHMKLSAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbnMydWkoc3RydWN0IGR3X21p cGlfZHNpICpkc2ksIGludCBucykKLXsKLQlyZXR1cm4gRElWX1JPVU5EX1VQKG5zICogZHNpLT5s YW5lX21icHMsIDEwMDApOwotfQotCi1zdGF0aWMgaW50IGR3X21pcGlfZHNpX3BoeV9pbml0KHN0 cnVjdCBkd19taXBpX2RzaSAqZHNpKQotewotCWludCByZXQsIHRlc3RkaW4sIHZjbywgdmFsOwot Ci0JdmNvID0gKGRzaS0+bGFuZV9tYnBzIDwgMjAwKSA/IDAgOiAoZHNpLT5sYW5lX21icHMgKyAx MDApIC8gMjAwOwotCi0JdGVzdGRpbiA9IG1heF9tYnBzX3RvX3Rlc3RkaW4oZHNpLT5sYW5lX21i cHMpOwotCWlmICh0ZXN0ZGluIDwgMCkgewotCQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LAotCQkJ ICAgICAgImZhaWxlZCB0byBnZXQgdGVzdGRpbiBmb3IgJWRtYnBzIGxhbmUgY2xvY2tcbiIsCi0J CQkgICAgICBkc2ktPmxhbmVfbWJwcyk7Ci0JCXJldHVybiB0ZXN0ZGluOwotCX0KLQotCS8qIFN0 YXJ0IGJ5IGNsZWFyaW5nIFBIWSBzdGF0ZSAqLwotCWRzaV93cml0ZShkc2ksIERTSV9QSFlfVFNU X0NUUkwwLCBQSFlfVU5URVNUQ0xSKTsKLQlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX1RTVF9DVFJM MCwgUEhZX1RFU1RDTFIpOwotCWRzaV93cml0ZShkc2ksIERTSV9QSFlfVFNUX0NUUkwwLCBQSFlf VU5URVNUQ0xSKTsKLQotCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkc2ktPnBoeV9jZmdfY2xr KTsKLQlpZiAocmV0KSB7Ci0JCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWlsZWQgdG8gZW5h YmxlIHBoeV9jZmdfY2xrXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlkd19taXBpX2RzaV9w aHlfd3JpdGUoZHNpLCAweDEwLCBCWVBBU1NfVkNPX1JBTkdFIHwKLQkJCQkJIFZDT19SQU5HRV9D T05fU0VMKHZjbykgfAotCQkJCQkgVkNPX0lOX0NBUF9DT05fTE9XIHwKLQkJCQkJIFJFRl9CSUFT X0NVUl9TRUwpOwotCi0JZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgMHgxMSwgQ1BfQ1VSUkVO VF8zTUEpOwotCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4MTIsIENQX1BST0dSQU1fRU4g fCBMUEZfUFJPR1JBTV9FTiB8Ci0JCQkJCSBMUEZfUkVTSVNUT1JTXzIwX0tPSE0pOwotCi0JZHdf bWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgMHg0NCwgSFNGUkVRUkFOR0VfU0VMKHRlc3RkaW4pKTsK LQotCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4MTcsIElOUFVUX0RJVklERVIoZHNpLT5p bnB1dF9kaXYpKTsKLQlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCAweDE4LCBMT09QX0RJVl9M T1dfU0VMKGRzaS0+ZmVlZGJhY2tfZGl2KSB8Ci0JCQkJCSBMT1dfUFJPR1JBTV9FTik7Ci0JZHdf bWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgMHgxOCwgTE9PUF9ESVZfSElHSF9TRUwoZHNpLT5mZWVk YmFja19kaXYpIHwKLQkJCQkJIEhJR0hfUFJPR1JBTV9FTik7Ci0JZHdfbWlwaV9kc2lfcGh5X3dy aXRlKGRzaSwgMHgxOSwgUExMX0xPT1BfRElWX0VOIHwgUExMX0lOUFVUX0RJVl9FTik7Ci0KLQlk d19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCAweDIyLCBMT1dfUFJPR1JBTV9FTiB8Ci0JCQkJCSBC SUFTRVhUUl9TRUwoQklBU0VYVFJfMTI3XzcpKTsKLQlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNp LCAweDIyLCBISUdIX1BST0dSQU1fRU4gfAotCQkJCQkgQkFOREdBUF9TRUwoQkFOREdBUF85Nl8x MCkpOwotCi0JZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgMHgyMCwgUE9XRVJfQ09OVFJPTCB8 IElOVEVSTkFMX1JFR19DVVJSRU5UIHwKLQkJCQkJIEJJQVNfQkxPQ0tfT04gfCBCQU5ER0FQX09O KTsKLQotCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4MjEsIFRFUl9SRVNJU1RPUl9MT1cg fCBURVJfQ0FMX0RPTkUgfAotCQkJCQkgU0VUUkRfTUFYIHwgVEVSX1JFU0lTVE9SU19PTik7Ci0J ZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgMHgyMSwgVEVSX1JFU0lTVE9SX0hJR0ggfCBMRVZF TF9TSElGVEVSU19PTiB8Ci0JCQkJCSBTRVRSRF9NQVggfCBQT1dFUl9NQU5BR0UgfAotCQkJCQkg VEVSX1JFU0lTVE9SU19PTik7Ci0KLQlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCAweDYwLCBU TFBfUFJPR1JBTV9FTiB8IG5zMmJjKGRzaSwgNTAwKSk7Ci0JZHdfbWlwaV9kc2lfcGh5X3dyaXRl KGRzaSwgMHg2MSwgVEhTX1BSRV9QUk9HUkFNX0VOIHwgbnMydWkoZHNpLCA0MCkpOwotCWR3X21p cGlfZHNpX3BoeV93cml0ZShkc2ksIDB4NjIsIFRIU19aRVJPX1BST0dSQU1fRU4gfCBuczJiYyhk c2ksIDMwMCkpOwotCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4NjMsIFRIU19QUkVfUFJP R1JBTV9FTiB8IG5zMnVpKGRzaSwgMTAwKSk7Ci0JZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwg MHg2NCwgQklUKDUpIHwgbnMyYmMoZHNpLCAxMDApKTsKLQlkd19taXBpX2RzaV9waHlfd3JpdGUo ZHNpLCAweDY1LCBCSVQoNSkgfCAobnMyYmMoZHNpLCA2MCkgKyA3KSk7Ci0KLQlkd19taXBpX2Rz aV9waHlfd3JpdGUoZHNpLCAweDcwLCBUTFBfUFJPR1JBTV9FTiB8IG5zMmJjKGRzaSwgNTAwKSk7 Ci0JZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgMHg3MSwKLQkJCSAgICAgIFRIU19QUkVfUFJP R1JBTV9FTiB8IChuczJ1aShkc2ksIDUwKSArIDUpKTsKLQlkd19taXBpX2RzaV9waHlfd3JpdGUo ZHNpLCAweDcyLAotCQkJICAgICAgVEhTX1pFUk9fUFJPR1JBTV9FTiB8IChuczJiYyhkc2ksIDE0 MCkgKyAyKSk7Ci0JZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgMHg3MywKLQkJCSAgICAgIFRI U19QUkVfUFJPR1JBTV9FTiB8IChuczJ1aShkc2ksIDYwKSArIDgpKTsKLQlkd19taXBpX2RzaV9w aHlfd3JpdGUoZHNpLCAweDc0LCBCSVQoNSkgfCBuczJiYyhkc2ksIDEwMCkpOwotCi0JZHNpX3dy aXRlKGRzaSwgRFNJX1BIWV9SU1RaLCBQSFlfRU5GT1JDRVBMTCB8IFBIWV9FTkFCTEVDTEsgfAot CQkJCSAgICAgUEhZX1VOUlNUWiB8IFBIWV9VTlNIVVRET1dOWik7Ci0KLQlyZXQgPSByZWFkbF9w b2xsX3RpbWVvdXQoZHNpLT5iYXNlICsgRFNJX1BIWV9TVEFUVVMsCi0JCQkJIHZhbCwgdmFsICYg TE9DSywgMTAwMCwgUEhZX1NUQVRVU19USU1FT1VUX1VTKTsKLQlpZiAocmV0IDwgMCkgewotCQlE Uk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiZmFpbGVkIHRvIHdhaXQgZm9yIHBoeSBsb2NrIHN0YXRl XG4iKTsKLQkJZ290byBwaHlfaW5pdF9lbmQ7Ci0JfQotCi0JcmV0ID0gcmVhZGxfcG9sbF90aW1l b3V0KGRzaS0+YmFzZSArIERTSV9QSFlfU1RBVFVTLAotCQkJCSB2YWwsIHZhbCAmIFNUT1BfU1RB VEVfQ0xLX0xBTkUsIDEwMDAsCi0JCQkJIFBIWV9TVEFUVVNfVElNRU9VVF9VUyk7Ci0JaWYgKHJl dCA8IDApCi0JCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsCi0JCQkgICAgICAiZmFpbGVkIHRvIHdh aXQgZm9yIHBoeSBjbGsgbGFuZSBzdG9wIHN0YXRlXG4iKTsKLQotcGh5X2luaXRfZW5kOgotCWNs a19kaXNhYmxlX3VucHJlcGFyZShkc2ktPnBoeV9jZmdfY2xrKTsKLQotCXJldHVybiByZXQ7Ci19 Ci0KLXN0YXRpYyBpbnQgZHdfbWlwaV9kc2lfZ2V0X2xhbmVfYnBzKHN0cnVjdCBkd19taXBpX2Rz aSAqZHNpLAotCQkJCSAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKLXsKLQl1bnNp Z25lZCBpbnQgaSwgcHJlOwotCXVuc2lnbmVkIGxvbmcgbXBjbGssIHBsbHJlZiwgdG1wOwotCXVu c2lnbmVkIGludCBtID0gMSwgbiA9IDEsIHRhcmdldF9tYnBzID0gMTAwMDsKLQl1bnNpZ25lZCBp bnQgbWF4X21icHMgPSBkcHRkaW5fbWFwW0FSUkFZX1NJWkUoZHB0ZGluX21hcCkgLSAxXS5tYXhf bWJwczsKLQlpbnQgYnBwOwotCi0JYnBwID0gbWlwaV9kc2lfcGl4ZWxfZm9ybWF0X3RvX2JwcChk c2ktPmZvcm1hdCk7Ci0JaWYgKGJwcCA8IDApIHsKLQkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwK LQkJCSAgICAgICJmYWlsZWQgdG8gZ2V0IGJwcCBmb3IgcGl4ZWwgZm9ybWF0ICVkXG4iLAotCQkJ ICAgICAgZHNpLT5mb3JtYXQpOwotCQlyZXR1cm4gYnBwOwotCX0KLQotCW1wY2xrID0gRElWX1JP VU5EX1VQKG1vZGUtPmNsb2NrLCBNU0VDX1BFUl9TRUMpOwotCWlmIChtcGNsaykgewotCQkvKiB0 YWtlIDEgLyAwLjgsIHNpbmNlIG1icHMgbXVzdCBiaWcgdGhhbiBiYW5kd2lkdGggb2YgUkdCICov Ci0JCXRtcCA9IG1wY2xrICogKGJwcCAvIGRzaS0+bGFuZXMpICogMTAgLyA4OwotCQlpZiAodG1w IDwgbWF4X21icHMpCi0JCQl0YXJnZXRfbWJwcyA9IHRtcDsKLQkJZWxzZQotCQkJRFJNX0RFVl9F UlJPUihkc2ktPmRldiwKLQkJCQkgICAgICAiRFBIWSBjbG9jayBmcmVxdWVuY3kgaXMgb3V0IG9m IHJhbmdlXG4iKTsKLQl9Ci0KLQlwbGxyZWYgPSBESVZfUk9VTkRfVVAoY2xrX2dldF9yYXRlKGRz aS0+cGxscmVmX2NsayksIFVTRUNfUEVSX1NFQyk7Ci0JdG1wID0gcGxscmVmOwotCi0JLyoKLQkg KiBUaGUgbGltaXRzIG9uIHRoZSBQTEwgZGl2aXNvciBhcmU6Ci0JICoKLQkgKgk1TUh6IDw9IChw bGxyZWYgLyBuKSA8PSA0ME1IegotCSAqCi0JICogd2Ugd2FsayBvdmVyIHRoZXNlIHZhbHVlcyBp biBkZXNjcmVhc2luZyBvcmRlciBzbyB0aGF0IGlmIHdlIGhpdAotCSAqIGFuIGV4YWN0IG1hdGNo IGZvciB0YXJnZXRfbWJwcyBpdCBpcyBtb3JlIGxpa2VseSB0aGF0ICJtIiB3aWxsIGJlCi0JICog ZXZlbi4KLQkgKgotCSAqIFRPRE86IGVuc3VyZSB0aGF0ICJtIiBpcyBldmVuIGFmdGVyIHRoaXMg bG9vcC4KLQkgKi8KLQlmb3IgKGkgPSBwbGxyZWYgLyA1OyBpID4gKHBsbHJlZiAvIDQwKTsgaS0t KSB7Ci0JCXByZSA9IHBsbHJlZiAvIGk7Ci0JCWlmICgodG1wID4gKHRhcmdldF9tYnBzICUgcHJl KSkgJiYgKHRhcmdldF9tYnBzIC8gcHJlIDwgNTEyKSkgewotCQkJdG1wID0gdGFyZ2V0X21icHMg JSBwcmU7Ci0JCQluID0gaTsKLQkJCW0gPSB0YXJnZXRfbWJwcyAvIHByZTsKLQkJfQotCQlpZiAo dG1wID09IDApCi0JCQlicmVhazsKLQl9Ci0KLQlkc2ktPmxhbmVfbWJwcyA9IHBsbHJlZiAvIG4g KiBtOwotCWRzaS0+aW5wdXRfZGl2ID0gbjsKLQlkc2ktPmZlZWRiYWNrX2RpdiA9IG07Ci0KLQly ZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkd19taXBpX2RzaV9ob3N0X2F0dGFjaChzdHJ1Y3Qg bWlwaV9kc2lfaG9zdCAqaG9zdCwKLQkJCQkgICBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkZXZp Y2UpCi17Ci0Jc3RydWN0IGR3X21pcGlfZHNpICpkc2kgPSBob3N0X3RvX2RzaShob3N0KTsKLQot CWlmIChkZXZpY2UtPmxhbmVzID4gZHNpLT5wZGF0YS0+bWF4X2RhdGFfbGFuZXMpIHsKLQkJRFJN X0RFVl9FUlJPUihkc2ktPmRldiwKLQkJCSAgICAgICJ0aGUgbnVtYmVyIG9mIGRhdGEgbGFuZXMo JXUpIGlzIHRvbyBtYW55XG4iLAotCQkJICAgICAgZGV2aWNlLT5sYW5lcyk7Ci0JCXJldHVybiAt RUlOVkFMOwotCX0KLQotCWRzaS0+bGFuZXMgPSBkZXZpY2UtPmxhbmVzOwotCWRzaS0+Y2hhbm5l bCA9IGRldmljZS0+Y2hhbm5lbDsKLQlkc2ktPmZvcm1hdCA9IGRldmljZS0+Zm9ybWF0OwotCWRz aS0+bW9kZV9mbGFncyA9IGRldmljZS0+bW9kZV9mbGFnczsKLQlkc2ktPnBhbmVsID0gb2ZfZHJt X2ZpbmRfcGFuZWwoZGV2aWNlLT5kZXYub2Zfbm9kZSk7Ci0JaWYgKGRzaS0+cGFuZWwpCi0JCXJl dHVybiBkcm1fcGFuZWxfYXR0YWNoKGRzaS0+cGFuZWwsICZkc2ktPmNvbm5lY3Rvcik7Ci0KLQly ZXR1cm4gLUVJTlZBTDsKLX0KLQotc3RhdGljIGludCBkd19taXBpX2RzaV9ob3N0X2RldGFjaChz dHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCwKLQkJCQkgICBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNl ICpkZXZpY2UpCi17Ci0Jc3RydWN0IGR3X21pcGlfZHNpICpkc2kgPSBob3N0X3RvX2RzaShob3N0 KTsKLQotCWRybV9wYW5lbF9kZXRhY2goZHNpLT5wYW5lbCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQot c3RhdGljIHZvaWQgZHdfbWlwaV9tZXNzYWdlX2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRz aSwKLQkJCQkgICBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfbXNnICptc2cpCi17Ci0JYm9vbCBscG0g PSBtc2ctPmZsYWdzICYgTUlQSV9EU0lfTVNHX1VTRV9MUE07Ci0JdTMyIHZhbCA9IDA7Ci0KLQlp ZiAobXNnLT5mbGFncyAmIE1JUElfRFNJX01TR19SRVFfQUNLKQotCQl2YWwgfD0gRU5fQUNLX1JR U1Q7Ci0JaWYgKGxwbSkKLQkJdmFsIHw9IENNRF9NT0RFX0FMTF9MUDsKLQotCWRzaV93cml0ZShk c2ksIERTSV9MUENMS19DVFJMLCBscG0gPyAwIDogUEhZX1RYUkVRVUVTVENMS0hTKTsKLQlkc2lf d3JpdGUoZHNpLCBEU0lfQ01EX01PREVfQ0ZHLCB2YWwpOwotfQotCi1zdGF0aWMgaW50IGR3X21p cGlfZHNpX2dlbl9wa3RfaGRyX3dyaXRlKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLCB1MzIgaGRy X3ZhbCkKLXsKLQlpbnQgcmV0OwotCXUzMiB2YWwsIG1hc2s7Ci0KLQlyZXQgPSByZWFkbF9wb2xs X3RpbWVvdXQoZHNpLT5iYXNlICsgRFNJX0NNRF9QS1RfU1RBVFVTLAotCQkJCSB2YWwsICEodmFs ICYgR0VOX0NNRF9GVUxMKSwgMTAwMCwKLQkJCQkgQ01EX1BLVF9TVEFUVVNfVElNRU9VVF9VUyk7 Ci0JaWYgKHJldCA8IDApIHsKLQkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwKLQkJCSAgICAgICJm YWlsZWQgdG8gZ2V0IGF2YWlsYWJsZSBjb21tYW5kIEZJRk9cbiIpOwotCQlyZXR1cm4gcmV0Owot CX0KLQotCWRzaV93cml0ZShkc2ksIERTSV9HRU5fSERSLCBoZHJfdmFsKTsKLQotCW1hc2sgPSBH RU5fQ01EX0VNUFRZIHwgR0VOX1BMRF9XX0VNUFRZOwotCXJldCA9IHJlYWRsX3BvbGxfdGltZW91 dChkc2ktPmJhc2UgKyBEU0lfQ01EX1BLVF9TVEFUVVMsCi0JCQkJIHZhbCwgKHZhbCAmIG1hc2sp ID09IG1hc2ssCi0JCQkJIDEwMDAsIENNRF9QS1RfU1RBVFVTX1RJTUVPVVRfVVMpOwotCWlmIChy ZXQgPCAwKSB7Ci0JCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJmYWlsZWQgdG8gd3JpdGUgY29t bWFuZCBGSUZPXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3Rh dGljIGludCBkd19taXBpX2RzaV9kY3Nfc2hvcnRfd3JpdGUoc3RydWN0IGR3X21pcGlfZHNpICpk c2ksCi0JCQkJICAgICAgIGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9tc2cgKm1zZykKLXsKLQljb25z dCB1OCAqdHhfYnVmID0gbXNnLT50eF9idWY7Ci0JdTE2IGRhdGEgPSAwOwotCXUzMiB2YWw7Ci0K LQlpZiAobXNnLT50eF9sZW4gPiAwKQotCQlkYXRhIHw9IHR4X2J1ZlswXTsKLQlpZiAobXNnLT50 eF9sZW4gPiAxKQotCQlkYXRhIHw9IHR4X2J1ZlsxXSA8PCA4OwotCi0JaWYgKG1zZy0+dHhfbGVu ID4gMikgewotCQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LAotCQkJICAgICAgInRvbyBsb25nIHR4 IGJ1ZiBsZW5ndGggJXp1IGZvciBzaG9ydCB3cml0ZVxuIiwKLQkJCSAgICAgIG1zZy0+dHhfbGVu KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JdmFsID0gR0VOX0hEQVRBKGRhdGEpIHwgR0VO X0hUWVBFKG1zZy0+dHlwZSk7Ci0JcmV0dXJuIGR3X21pcGlfZHNpX2dlbl9wa3RfaGRyX3dyaXRl KGRzaSwgdmFsKTsKLX0KLQotc3RhdGljIGludCBkd19taXBpX2RzaV9kY3NfbG9uZ193cml0ZShz dHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwKLQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lf bXNnICptc2cpCi17Ci0JY29uc3QgdTggKnR4X2J1ZiA9IG1zZy0+dHhfYnVmOwotCWludCBsZW4g PSBtc2ctPnR4X2xlbiwgcGxkX2RhdGFfYnl0ZXMgPSBzaXplb2YodTMyKSwgcmV0OwotCXUzMiBo ZHJfdmFsID0gR0VOX0hEQVRBKG1zZy0+dHhfbGVuKSB8IEdFTl9IVFlQRShtc2ctPnR5cGUpOwot CXUzMiByZW1haW5kZXI7Ci0JdTMyIHZhbDsKLQotCWlmIChtc2ctPnR4X2xlbiA8IDMpIHsKLQkJ RFJNX0RFVl9FUlJPUihkc2ktPmRldiwKLQkJCSAgICAgICJ3cm9uZyB0eCBidWYgbGVuZ3RoICV6 dSBmb3IgbG9uZyB3cml0ZVxuIiwKLQkJCSAgICAgIG1zZy0+dHhfbGVuKTsKLQkJcmV0dXJuIC1F SU5WQUw7Ci0JfQotCi0Jd2hpbGUgKERJVl9ST1VORF9VUChsZW4sIHBsZF9kYXRhX2J5dGVzKSkg ewotCQlpZiAobGVuIDwgcGxkX2RhdGFfYnl0ZXMpIHsKLQkJCXJlbWFpbmRlciA9IDA7Ci0JCQlt ZW1jcHkoJnJlbWFpbmRlciwgdHhfYnVmLCBsZW4pOwotCQkJZHNpX3dyaXRlKGRzaSwgRFNJX0dF Tl9QTERfREFUQSwgcmVtYWluZGVyKTsKLQkJCWxlbiA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQltZW1j cHkoJnJlbWFpbmRlciwgdHhfYnVmLCBwbGRfZGF0YV9ieXRlcyk7Ci0JCQlkc2lfd3JpdGUoZHNp LCBEU0lfR0VOX1BMRF9EQVRBLCByZW1haW5kZXIpOwotCQkJdHhfYnVmICs9IHBsZF9kYXRhX2J5 dGVzOwotCQkJbGVuIC09IHBsZF9kYXRhX2J5dGVzOwotCQl9Ci0KLQkJcmV0ID0gcmVhZGxfcG9s bF90aW1lb3V0KGRzaS0+YmFzZSArIERTSV9DTURfUEtUX1NUQVRVUywKLQkJCQkJIHZhbCwgISh2 YWwgJiBHRU5fUExEX1dfRlVMTCksIDEwMDAsCi0JCQkJCSBDTURfUEtUX1NUQVRVU19USU1FT1VU X1VTKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsCi0JCQkJ ICAgICAgImZhaWxlZCB0byBnZXQgYXZhaWxhYmxlIHdyaXRlIHBheWxvYWQgRklGT1xuIik7Ci0J CQlyZXR1cm4gcmV0OwotCQl9Ci0JfQotCi0JcmV0dXJuIGR3X21pcGlfZHNpX2dlbl9wa3RfaGRy X3dyaXRlKGRzaSwgaGRyX3ZhbCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGR3X21pcGlfZHNpX2hv c3RfdHJhbnNmZXIoc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsCi0JCQkJCSBjb25zdCBzdHJ1 Y3QgbWlwaV9kc2lfbXNnICptc2cpCi17Ci0Jc3RydWN0IGR3X21pcGlfZHNpICpkc2kgPSBob3N0 X3RvX2RzaShob3N0KTsKLQlpbnQgcmV0OwotCi0JZHdfbWlwaV9tZXNzYWdlX2NvbmZpZyhkc2ks IG1zZyk7Ci0KLQlzd2l0Y2ggKG1zZy0+dHlwZSkgewotCWNhc2UgTUlQSV9EU0lfRENTX1NIT1JU X1dSSVRFOgotCWNhc2UgTUlQSV9EU0lfRENTX1NIT1JUX1dSSVRFX1BBUkFNOgotCWNhc2UgTUlQ SV9EU0lfU0VUX01BWElNVU1fUkVUVVJOX1BBQ0tFVF9TSVpFOgotCQlyZXQgPSBkd19taXBpX2Rz aV9kY3Nfc2hvcnRfd3JpdGUoZHNpLCBtc2cpOwotCQlicmVhazsKLQljYXNlIE1JUElfRFNJX0RD U19MT05HX1dSSVRFOgotCQlyZXQgPSBkd19taXBpX2RzaV9kY3NfbG9uZ193cml0ZShkc2ksIG1z Zyk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJ1bnN1 cHBvcnRlZCBtZXNzYWdlIHR5cGUgMHglMDJ4XG4iLAotCQkJICAgICAgbXNnLT50eXBlKTsKLQkJ cmV0ID0gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgY29uc3Qgc3Ry dWN0IG1pcGlfZHNpX2hvc3Rfb3BzIGR3X21pcGlfZHNpX2hvc3Rfb3BzID0gewotCS5hdHRhY2gg PSBkd19taXBpX2RzaV9ob3N0X2F0dGFjaCwKLQkuZGV0YWNoID0gZHdfbWlwaV9kc2lfaG9zdF9k ZXRhY2gsCi0JLnRyYW5zZmVyID0gZHdfbWlwaV9kc2lfaG9zdF90cmFuc2ZlciwKLX07Ci0KLXN0 YXRpYyB2b2lkIGR3X21pcGlfZHNpX3ZpZGVvX21vZGVfY29uZmlnKHN0cnVjdCBkd19taXBpX2Rz aSAqZHNpKQotewotCXUzMiB2YWw7Ci0KLQl2YWwgPSBFTkFCTEVfTE9XX1BPV0VSOwotCi0JaWYg KGRzaS0+bW9kZV9mbGFncyAmIE1JUElfRFNJX01PREVfVklERU9fQlVSU1QpCi0JCXZhbCB8PSBW SURfTU9ERV9UWVBFX0JVUlNUOwotCWVsc2UgaWYgKGRzaS0+bW9kZV9mbGFncyAmIE1JUElfRFNJ X01PREVfVklERU9fU1lOQ19QVUxTRSkKLQkJdmFsIHw9IFZJRF9NT0RFX1RZUEVfTk9OX0JVUlNU X1NZTkNfUFVMU0VTOwotCWVsc2UKLQkJdmFsIHw9IFZJRF9NT0RFX1RZUEVfTk9OX0JVUlNUX1NZ TkNfRVZFTlRTOwotCi0JZHNpX3dyaXRlKGRzaSwgRFNJX1ZJRF9NT0RFX0NGRywgdmFsKTsKLX0K LQotc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfc2V0X21vZGUoc3RydWN0IGR3X21pcGlfZHNpICpk c2ksCi0JCQkJIGVudW0gZHdfbWlwaV9kc2lfbW9kZSBtb2RlKQotewotCWlmIChtb2RlID09IERX X01JUElfRFNJX0NNRF9NT0RFKSB7Ci0JCWRzaV93cml0ZShkc2ksIERTSV9QV1JfVVAsIFJFU0VU KTsKLQkJZHNpX3dyaXRlKGRzaSwgRFNJX01PREVfQ0ZHLCBFTkFCTEVfQ01EX01PREUpOwotCQlk c2lfd3JpdGUoZHNpLCBEU0lfUFdSX1VQLCBQT1dFUlVQKTsKLQl9IGVsc2UgewotCQlkc2lfd3Jp dGUoZHNpLCBEU0lfUFdSX1VQLCBSRVNFVCk7Ci0JCWRzaV93cml0ZShkc2ksIERTSV9NT0RFX0NG RywgRU5BQkxFX1ZJREVPX01PREUpOwotCQlkd19taXBpX2RzaV92aWRlb19tb2RlX2NvbmZpZyhk c2kpOwotCQlkc2lfd3JpdGUoZHNpLCBEU0lfTFBDTEtfQ1RSTCwgUEhZX1RYUkVRVUVTVENMS0hT KTsKLQkJZHNpX3dyaXRlKGRzaSwgRFNJX1BXUl9VUCwgUE9XRVJVUCk7Ci0JfQotfQotCi1zdGF0 aWMgdm9pZCBkd19taXBpX2RzaV9kaXNhYmxlKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQotewot CWRzaV93cml0ZShkc2ksIERTSV9QV1JfVVAsIFJFU0VUKTsKLQlkc2lfd3JpdGUoZHNpLCBEU0lf UEhZX1JTVFosIFBIWV9SU1RaKTsKLX0KLQotc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfaW5pdChz dHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKLXsKLQkvKgotCSAqIFRoZSBtYXhpbXVtIHBlcm1pdHRl ZCBlc2NhcGUgY2xvY2sgaXMgMjBNSHogYW5kIGl0IGlzIGRlcml2ZWQgZnJvbQotCSAqIGxhbmVi eXRlY2xrLCB3aGljaCBpcyBydW5uaW5nIGF0ICJsYW5lX21icHMgLyA4Ii4gIFRodXMgd2Ugd2Fu dDoKLQkgKgotCSAqICAgICAobGFuZV9tYnBzID4+IDMpIC8gZXNjX2Nsa19kaXZpc2lvbiA8IDIw Ci0JICogd2hpY2ggaXM6Ci0JICogICAgIChsYW5lX21icHMgPj4gMykgLyAyMCA+IGVzY19jbGtf ZGl2aXNpb24KLQkgKi8KLQl1MzIgZXNjX2Nsa19kaXZpc2lvbiA9IChkc2ktPmxhbmVfbWJwcyA+ PiAzKSAvIDIwICsgMTsKLQotCWRzaV93cml0ZShkc2ksIERTSV9QV1JfVVAsIFJFU0VUKTsKLQlk c2lfd3JpdGUoZHNpLCBEU0lfUEhZX1JTVFosIFBIWV9ESVNGT1JDRVBMTCB8IFBIWV9ESVNBQkxF Q0xLCi0JCSAgfCBQSFlfUlNUWiB8IFBIWV9TSFVURE9XTlopOwotCWRzaV93cml0ZShkc2ksIERT SV9DTEtNR1JfQ0ZHLCBUT19DTEtfRElWSURTSU9OKDEwKSB8Ci0JCSAgVFhfRVNDX0NMS19ESVZJ RFNJT04oZXNjX2Nsa19kaXZpc2lvbikpOwotfQotCi1zdGF0aWMgdm9pZCBkd19taXBpX2RzaV9k cGlfY29uZmlnKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLAotCQkJCSAgIHN0cnVjdCBkcm1fZGlz cGxheV9tb2RlICptb2RlKQotewotCXUzMiB2YWwgPSAwLCBjb2xvciA9IDA7Ci0KLQlzd2l0Y2gg KGRzaS0+Zm9ybWF0KSB7Ci0JY2FzZSBNSVBJX0RTSV9GTVRfUkdCODg4OgotCQljb2xvciA9IERQ SV9DT0xPUl9DT0RJTkdfMjRCSVQ7Ci0JCWJyZWFrOwotCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjY2 NjoKLQkJY29sb3IgPSBEUElfQ09MT1JfQ09ESU5HXzE4QklUXzIgfCBFTjE4X0xPT1NFTFk7Ci0J CWJyZWFrOwotCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjY2Nl9QQUNLRUQ6Ci0JCWNvbG9yID0gRFBJ X0NPTE9SX0NPRElOR18xOEJJVF8xOwotCQlicmVhazsKLQljYXNlIE1JUElfRFNJX0ZNVF9SR0I1 NjU6Ci0JCWNvbG9yID0gRFBJX0NPTE9SX0NPRElOR18xNkJJVF8xOwotCQlicmVhazsKLQl9Ci0K LQlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX05WU1lOQykKLQkJdmFsIHw9IFZTWU5D X0FDVElWRV9MT1c7Ci0JaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OSFNZTkMpCi0J CXZhbCB8PSBIU1lOQ19BQ1RJVkVfTE9XOwotCi0JZHNpX3dyaXRlKGRzaSwgRFNJX0RQSV9WQ0lE LCBEUElfVklEKGRzaS0+Y2hhbm5lbCkpOwotCWRzaV93cml0ZShkc2ksIERTSV9EUElfQ09MT1Jf Q09ESU5HLCBjb2xvcik7Ci0JZHNpX3dyaXRlKGRzaSwgRFNJX0RQSV9DRkdfUE9MLCB2YWwpOwot CWRzaV93cml0ZShkc2ksIERTSV9EUElfTFBfQ01EX1RJTSwgT1VUVkFDVF9MUENNRF9USU1FKDQp Ci0JCSAgfCBJTlZBQ1RfTFBDTURfVElNRSg0KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGR3X21pcGlf ZHNpX3BhY2tldF9oYW5kbGVyX2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKLXsKLQlk c2lfd3JpdGUoZHNpLCBEU0lfUENLSERMX0NGRywgRU5fQ1JDX1JYIHwgRU5fRUNDX1JYIHwgRU5f QlRBKTsKLX0KLQotc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfdmlkZW9fcGFja2V0X2NvbmZpZyhz dHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwKLQkJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICptb2RlKQotewotCWRzaV93cml0ZShkc2ksIERTSV9WSURfUEtUX1NJWkUsIFZJRF9QS1RfU0la RShtb2RlLT5oZGlzcGxheSkpOwotfQotCi1zdGF0aWMgdm9pZCBkd19taXBpX2RzaV9jb21tYW5k X21vZGVfY29uZmlnKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQotewotCWRzaV93cml0ZShkc2ks IERTSV9UT19DTlRfQ0ZHLCBIU1RYX1RPX0NOVCgxMDAwKSB8IExQUlhfVE9fQ05UKDEwMDApKTsK LQlkc2lfd3JpdGUoZHNpLCBEU0lfQlRBX1RPX0NOVCwgMHhkMDApOwotCWRzaV93cml0ZShkc2ks IERTSV9NT0RFX0NGRywgRU5BQkxFX0NNRF9NT0RFKTsKLX0KLQotLyogR2V0IGxhbmUgYnl0ZSBj bG9jayBjeWNsZXMuICovCi1zdGF0aWMgdTMyIGR3X21pcGlfZHNpX2dldF9oY29tcG9uZW50X2xi Y2Moc3RydWN0IGR3X21pcGlfZHNpICpkc2ksCi0JCQkJCSAgIHN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICptb2RlLAotCQkJCQkgICB1MzIgaGNvbXBvbmVudCkKLXsKLQl1MzIgZnJhYywgbGJjYzsK LQotCWxiY2MgPSBoY29tcG9uZW50ICogZHNpLT5sYW5lX21icHMgKiBNU0VDX1BFUl9TRUMgLyA4 OwotCi0JZnJhYyA9IGxiY2MgJSBtb2RlLT5jbG9jazsKLQlsYmNjID0gbGJjYyAvIG1vZGUtPmNs b2NrOwotCWlmIChmcmFjKQotCQlsYmNjKys7Ci0KLQlyZXR1cm4gbGJjYzsKLX0KLQotc3RhdGlj IHZvaWQgZHdfbWlwaV9kc2lfbGluZV90aW1lcl9jb25maWcoc3RydWN0IGR3X21pcGlfZHNpICpk c2ksCi0JCQkJCSAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCi17Ci0JdTMyIGh0b3Rh bCwgaHNhLCBoYnAsIGxiY2M7Ci0KLQlodG90YWwgPSBtb2RlLT5odG90YWw7Ci0JaHNhID0gbW9k ZS0+aHN5bmNfZW5kIC0gbW9kZS0+aHN5bmNfc3RhcnQ7Ci0JaGJwID0gbW9kZS0+aHRvdGFsIC0g bW9kZS0+aHN5bmNfZW5kOwotCi0JbGJjYyA9IGR3X21pcGlfZHNpX2dldF9oY29tcG9uZW50X2xi Y2MoZHNpLCBtb2RlLCBodG90YWwpOwotCWRzaV93cml0ZShkc2ksIERTSV9WSURfSExJTkVfVElN RSwgbGJjYyk7Ci0KLQlsYmNjID0gZHdfbWlwaV9kc2lfZ2V0X2hjb21wb25lbnRfbGJjYyhkc2ks IG1vZGUsIGhzYSk7Ci0JZHNpX3dyaXRlKGRzaSwgRFNJX1ZJRF9IU0FfVElNRSwgbGJjYyk7Ci0K LQlsYmNjID0gZHdfbWlwaV9kc2lfZ2V0X2hjb21wb25lbnRfbGJjYyhkc2ksIG1vZGUsIGhicCk7 Ci0JZHNpX3dyaXRlKGRzaSwgRFNJX1ZJRF9IQlBfVElNRSwgbGJjYyk7Ci19Ci0KLXN0YXRpYyB2 b2lkIGR3X21pcGlfZHNpX3ZlcnRpY2FsX3RpbWluZ19jb25maWcoc3RydWN0IGR3X21pcGlfZHNp ICpkc2ksCi0JCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKLXsKLQl1 MzIgdmFjdGl2ZSwgdnNhLCB2ZnAsIHZicDsKLQotCXZhY3RpdmUgPSBtb2RlLT52ZGlzcGxheTsK LQl2c2EgPSBtb2RlLT52c3luY19lbmQgLSBtb2RlLT52c3luY19zdGFydDsKLQl2ZnAgPSBtb2Rl LT52c3luY19zdGFydCAtIG1vZGUtPnZkaXNwbGF5OwotCXZicCA9IG1vZGUtPnZ0b3RhbCAtIG1v ZGUtPnZzeW5jX2VuZDsKLQotCWRzaV93cml0ZShkc2ksIERTSV9WSURfVkFDVElWRV9MSU5FUywg dmFjdGl2ZSk7Ci0JZHNpX3dyaXRlKGRzaSwgRFNJX1ZJRF9WU0FfTElORVMsIHZzYSk7Ci0JZHNp X3dyaXRlKGRzaSwgRFNJX1ZJRF9WRlBfTElORVMsIHZmcCk7Ci0JZHNpX3dyaXRlKGRzaSwgRFNJ X1ZJRF9WQlBfTElORVMsIHZicCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2RwaHlf dGltaW5nX2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKLXsKLQlkc2lfd3JpdGUoZHNp LCBEU0lfUEhZX1RNUl9DRkcsIFBIWV9IUzJMUF9USU1FKDB4NDApCi0JCSAgfCBQSFlfTFAySFNf VElNRSgweDQwKSB8IE1BWF9SRF9USU1FKDEwMDAwKSk7Ci0KLQlkc2lfd3JpdGUoZHNpLCBEU0lf UEhZX1RNUl9MUENMS19DRkcsIFBIWV9DTEtIUzJMUF9USU1FKDB4NDApCi0JCSAgfCBQSFlfQ0xL TFAySFNfVElNRSgweDQwKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2RwaHlfaW50 ZXJmYWNlX2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKLXsKLQlkc2lfd3JpdGUoZHNp LCBEU0lfUEhZX0lGX0NGRywgUEhZX1NUT1BfV0FJVF9USU1FKDB4MjApIHwKLQkJICBOX0xBTkVT KGRzaS0+bGFuZXMpKTsKLX0KLQotc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfY2xlYXJfZXJyKHN0 cnVjdCBkd19taXBpX2RzaSAqZHNpKQotewotCWRzaV9yZWFkKGRzaSwgRFNJX0lOVF9TVDApOwot CWRzaV9yZWFkKGRzaSwgRFNJX0lOVF9TVDEpOwotCWRzaV93cml0ZShkc2ksIERTSV9JTlRfTVNL MCwgMCk7Ci0JZHNpX3dyaXRlKGRzaSwgRFNJX0lOVF9NU0sxLCAwKTsKLX0KLQotc3RhdGljIHZv aWQgZHdfbWlwaV9kc2lfZW5jb2Rlcl9kaXNhYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rl cikKLXsKLQlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGVuY29kZXJfdG9fZHNpKGVuY29kZXIp OwotCi0JaWYgKGRzaS0+ZHBtc19tb2RlICE9IERSTV9NT0RFX0RQTVNfT04pCi0JCXJldHVybjsK LQotCWlmIChjbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5wY2xrKSkgewotCQlEUk1fREVWX0VSUk9S KGRzaS0+ZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBwY2xrXG4iKTsKLQkJcmV0dXJuOwotCX0KLQot CWRybV9wYW5lbF9kaXNhYmxlKGRzaS0+cGFuZWwpOwotCi0JZHdfbWlwaV9kc2lfc2V0X21vZGUo ZHNpLCBEV19NSVBJX0RTSV9DTURfTU9ERSk7Ci0JZHJtX3BhbmVsX3VucHJlcGFyZShkc2ktPnBh bmVsKTsKLQotCWR3X21pcGlfZHNpX2Rpc2FibGUoZHNpKTsKLQlwbV9ydW50aW1lX3B1dChkc2kt PmRldik7Ci0JY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+cGNsayk7Ci0JZHNpLT5kcG1zX21v ZGUgPSBEUk1fTU9ERV9EUE1TX09GRjsKLX0KLQotc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfZW5j b2Rlcl9lbmFibGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQotewotCXN0cnVjdCBkd19t aXBpX2RzaSAqZHNpID0gZW5jb2Rlcl90b19kc2koZW5jb2Rlcik7Ci0Jc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKm1vZGUgPSAmZW5jb2Rlci0+Y3J0Yy0+c3RhdGUtPmFkanVzdGVkX21vZGU7Ci0J Y29uc3Qgc3RydWN0IGR3X21pcGlfZHNpX3BsYXRfZGF0YSAqcGRhdGEgPSBkc2ktPnBkYXRhOwot CWludCBtdXggPSBkcm1fb2ZfZW5jb2Rlcl9hY3RpdmVfZW5kcG9pbnRfaWQoZHNpLT5kZXYtPm9m X25vZGUsIGVuY29kZXIpOwotCXUzMiB2YWw7Ci0JaW50IHJldDsKLQotCXJldCA9IGR3X21pcGlf ZHNpX2dldF9sYW5lX2Jwcyhkc2ksIG1vZGUpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm47Ci0K LQlpZiAoZHNpLT5kcG1zX21vZGUgPT0gRFJNX01PREVfRFBNU19PTikKLQkJcmV0dXJuOwotCi0J aWYgKGNsa19wcmVwYXJlX2VuYWJsZShkc2ktPnBjbGspKSB7Ci0JCURSTV9ERVZfRVJST1IoZHNp LT5kZXYsICJGYWlsZWQgdG8gZW5hYmxlIHBjbGtcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JcG1f cnVudGltZV9nZXRfc3luYyhkc2ktPmRldik7Ci0JZHdfbWlwaV9kc2lfaW5pdChkc2kpOwotCWR3 X21pcGlfZHNpX2RwaV9jb25maWcoZHNpLCBtb2RlKTsKLQlkd19taXBpX2RzaV9wYWNrZXRfaGFu ZGxlcl9jb25maWcoZHNpKTsKLQlkd19taXBpX2RzaV92aWRlb19tb2RlX2NvbmZpZyhkc2kpOwot CWR3X21pcGlfZHNpX3ZpZGVvX3BhY2tldF9jb25maWcoZHNpLCBtb2RlKTsKLQlkd19taXBpX2Rz aV9jb21tYW5kX21vZGVfY29uZmlnKGRzaSk7Ci0JZHdfbWlwaV9kc2lfbGluZV90aW1lcl9jb25m aWcoZHNpLCBtb2RlKTsKLQlkd19taXBpX2RzaV92ZXJ0aWNhbF90aW1pbmdfY29uZmlnKGRzaSwg bW9kZSk7Ci0JZHdfbWlwaV9kc2lfZHBoeV90aW1pbmdfY29uZmlnKGRzaSk7Ci0JZHdfbWlwaV9k c2lfZHBoeV9pbnRlcmZhY2VfY29uZmlnKGRzaSk7Ci0JZHdfbWlwaV9kc2lfY2xlYXJfZXJyKGRz aSk7Ci0KLQkvKgotCSAqIEZvciB0aGUgUkszMzk5LCB0aGUgY2xrIG9mIGdyZiBtdXN0IGJlIGVu YWJsZWQgYmVmb3JlIHdyaXRpbmcgZ3JmCi0JICogcmVnaXN0ZXIuIEFuZCBmb3IgUkszMjg4IG9y IG90aGVyIHNvYywgdGhpcyBncmZfY2xrIG11c3QgYmUgTlVMTCwKLQkgKiB0aGUgY2xrX3ByZXBh cmVfZW5hYmxlIHJldHVybiB0cnVlIGRpcmVjdGx5LgotCSAqLwotCXJldCA9IGNsa19wcmVwYXJl X2VuYWJsZShkc2ktPmdyZl9jbGspOwotCWlmIChyZXQpIHsKLQkJRFJNX0RFVl9FUlJPUihkc2kt PmRldiwgIkZhaWxlZCB0byBlbmFibGUgZ3JmX2NsazogJWRcbiIsIHJldCk7Ci0JCXJldHVybjsK LQl9Ci0KLQlpZiAocGRhdGEtPmdyZl9kc2kwX21vZGVfcmVnKQotCQlyZWdtYXBfd3JpdGUoZHNp LT5ncmZfcmVnbWFwLCBwZGF0YS0+Z3JmX2RzaTBfbW9kZV9yZWcsCi0JCQkgICAgIHBkYXRhLT5n cmZfZHNpMF9tb2RlKTsKLQotCWR3X21pcGlfZHNpX3BoeV9pbml0KGRzaSk7Ci0JZHdfbWlwaV9k c2lfd2FpdF9mb3JfdHdvX2ZyYW1lcyhtb2RlKTsKLQotCWR3X21pcGlfZHNpX3NldF9tb2RlKGRz aSwgRFdfTUlQSV9EU0lfQ01EX01PREUpOwotCWlmIChkcm1fcGFuZWxfcHJlcGFyZShkc2ktPnBh bmVsKSkKLQkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgImZhaWxlZCB0byBwcmVwYXJlIHBhbmVs XG4iKTsKLQotCWR3X21pcGlfZHNpX3NldF9tb2RlKGRzaSwgRFdfTUlQSV9EU0lfVklEX01PREUp OwotCWRybV9wYW5lbF9lbmFibGUoZHNpLT5wYW5lbCk7Ci0KLQljbGtfZGlzYWJsZV91bnByZXBh cmUoZHNpLT5wY2xrKTsKLQotCWlmIChtdXgpCi0JCXZhbCA9IHBkYXRhLT5kc2kwX2VuX2JpdCB8 IChwZGF0YS0+ZHNpMF9lbl9iaXQgPDwgMTYpOwotCWVsc2UKLQkJdmFsID0gcGRhdGEtPmRzaTBf ZW5fYml0IDw8IDE2OwotCi0JcmVnbWFwX3dyaXRlKGRzaS0+Z3JmX3JlZ21hcCwgcGRhdGEtPmdy Zl9zd2l0Y2hfcmVnLCB2YWwpOwotCURSTV9ERVZfREVCVUcoZHNpLT5kZXYsCi0JCSAgICAgICJ2 b3AgJXMgb3V0cHV0IHRvIGRzaTBcbiIsIChtdXgpID8gIkxJVCIgOiAiQklHIik7Ci0JZHNpLT5k cG1zX21vZGUgPSBEUk1fTU9ERV9EUE1TX09OOwotCi0JY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRz aS0+Z3JmX2Nsayk7Ci19Ci0KLXN0YXRpYyBpbnQKLWR3X21pcGlfZHNpX2VuY29kZXJfYXRvbWlj X2NoZWNrKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKLQkJCQkgc3RydWN0IGRybV9jcnRj X3N0YXRlICpjcnRjX3N0YXRlLAotCQkJCSBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29u bl9zdGF0ZSkKLXsKLQlzdHJ1Y3Qgcm9ja2NoaXBfY3J0Y19zdGF0ZSAqcyA9IHRvX3JvY2tjaGlw X2NydGNfc3RhdGUoY3J0Y19zdGF0ZSk7Ci0Jc3RydWN0IGR3X21pcGlfZHNpICpkc2kgPSBlbmNv ZGVyX3RvX2RzaShlbmNvZGVyKTsKLQotCXN3aXRjaCAoZHNpLT5mb3JtYXQpIHsKLQljYXNlIE1J UElfRFNJX0ZNVF9SR0I4ODg6Ci0JCXMtPm91dHB1dF9tb2RlID0gUk9DS0NISVBfT1VUX01PREVf UDg4ODsKLQkJYnJlYWs7Ci0JY2FzZSBNSVBJX0RTSV9GTVRfUkdCNjY2OgotCQlzLT5vdXRwdXRf bW9kZSA9IFJPQ0tDSElQX09VVF9NT0RFX1A2NjY7Ci0JCWJyZWFrOwotCWNhc2UgTUlQSV9EU0lf Rk1UX1JHQjU2NToKLQkJcy0+b3V0cHV0X21vZGUgPSBST0NLQ0hJUF9PVVRfTU9ERV9QNTY1Owot CQlicmVhazsKLQlkZWZhdWx0OgotCQlXQVJOX09OKDEpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9 Ci0KLQlzLT5vdXRwdXRfdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9EU0k7Ci0KLQlyZXR1cm4g MDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MKLWR3 X21pcGlfZHNpX2VuY29kZXJfaGVscGVyX2Z1bmNzID0gewotCS5lbmFibGUgPSBkd19taXBpX2Rz aV9lbmNvZGVyX2VuYWJsZSwKLQkuZGlzYWJsZSA9IGR3X21pcGlfZHNpX2VuY29kZXJfZGlzYWJs ZSwKLQkuYXRvbWljX2NoZWNrID0gZHdfbWlwaV9kc2lfZW5jb2Rlcl9hdG9taWNfY2hlY2ssCi19 OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2Z1bmNzIGR3X21pcGlfZHNpX2Vu Y29kZXJfZnVuY3MgPSB7Ci0JLmRlc3Ryb3kgPSBkcm1fZW5jb2Rlcl9jbGVhbnVwLAotfTsKLQot c3RhdGljIGludCBkd19taXBpX2RzaV9jb25uZWN0b3JfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uZWN0b3IpCi17Ci0Jc3RydWN0IGR3X21pcGlfZHNpICpkc2kgPSBjb25fdG9f ZHNpKGNvbm5lY3Rvcik7Ci0KLQlyZXR1cm4gZHJtX3BhbmVsX2dldF9tb2Rlcyhkc2ktPnBhbmVs KTsKLX0KLQotc3RhdGljIHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcyBkd19taXBp X2RzaV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0gewotCS5nZXRfbW9kZXMgPSBkd19taXBpX2Rz aV9jb25uZWN0b3JfZ2V0X21vZGVzLAotfTsKLQotc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfZHJt X2Nvbm5lY3Rvcl9kZXN0cm95KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCi17Ci0J ZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyKGNvbm5lY3Rvcik7Ci0JZHJtX2Nvbm5lY3Rvcl9jbGVh bnVwKGNvbm5lY3Rvcik7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9m dW5jcyBkd19taXBpX2RzaV9hdG9taWNfY29ubmVjdG9yX2Z1bmNzID0gewotCS5maWxsX21vZGVz ID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAotCS5kZXN0cm95ID0g ZHdfbWlwaV9kc2lfZHJtX2Nvbm5lY3Rvcl9kZXN0cm95LAotCS5yZXNldCA9IGRybV9hdG9taWNf aGVscGVyX2Nvbm5lY3Rvcl9yZXNldCwKLQkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9h dG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUsCi0JLmF0b21pY19kZXN0cm95 X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUsCi19Owot Ci1zdGF0aWMgaW50IGR3X21pcGlfZHNpX3JlZ2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0s Ci0JCQkJc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCi17Ci0Jc3RydWN0IGRybV9lbmNvZGVyICpl bmNvZGVyID0gJmRzaS0+ZW5jb2RlcjsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y ID0gJmRzaS0+Y29ubmVjdG9yOwotCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRzaS0+ZGV2OwotCWlu dCByZXQ7Ci0KLQllbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9IGRybV9vZl9maW5kX3Bvc3NpYmxl X2NydGNzKGRybSwKLQkJCQkJCQkgICAgIGRldi0+b2Zfbm9kZSk7Ci0JLyoKLQkgKiBJZiB3ZSBm YWlsZWQgdG8gZmluZCB0aGUgQ1JUQyhzKSB3aGljaCB0aGlzIGVuY29kZXIgaXMKLQkgKiBzdXBw b3NlZCB0byBiZSBjb25uZWN0ZWQgdG8sIGl0J3MgYmVjYXVzZSB0aGUgQ1JUQyBoYXMKLQkgKiBu b3QgYmVlbiByZWdpc3RlcmVkIHlldC4gIERlZmVyIHByb2JpbmcsIGFuZCBob3BlIHRoYXQKLQkg KiB0aGUgcmVxdWlyZWQgQ1JUQyBpcyBhZGRlZCBsYXRlci4KLQkgKi8KLQlpZiAoZW5jb2Rlci0+ cG9zc2libGVfY3J0Y3MgPT0gMCkKLQkJcmV0dXJuIC1FUFJPQkVfREVGRVI7Ci0KLQlkcm1fZW5j b2Rlcl9oZWxwZXJfYWRkKCZkc2ktPmVuY29kZXIsCi0JCQkgICAgICAgJmR3X21pcGlfZHNpX2Vu Y29kZXJfaGVscGVyX2Z1bmNzKTsKLQlyZXQgPSBkcm1fZW5jb2Rlcl9pbml0KGRybSwgJmRzaS0+ ZW5jb2RlciwgJmR3X21pcGlfZHNpX2VuY29kZXJfZnVuY3MsCi0JCQkgICAgICAgRFJNX01PREVf RU5DT0RFUl9EU0ksIE5VTEwpOwotCWlmIChyZXQpIHsKLQkJRFJNX0RFVl9FUlJPUihkZXYsICJG YWlsZWQgdG8gaW5pdGlhbGl6ZSBlbmNvZGVyIHdpdGggZHJtXG4iKTsKLQkJcmV0dXJuIHJldDsK LQl9Ci0KLQlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoY29ubmVjdG9yLAotCQkJCSAmZHdfbWlw aV9kc2lfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7Ci0KLQlkcm1fY29ubmVjdG9yX2luaXQoZHJt LCAmZHNpLT5jb25uZWN0b3IsCi0JCQkgICAmZHdfbWlwaV9kc2lfYXRvbWljX2Nvbm5lY3Rvcl9m dW5jcywKLQkJCSAgIERSTV9NT0RFX0NPTk5FQ1RPUl9EU0kpOwotCi0JZHJtX21vZGVfY29ubmVj dG9yX2F0dGFjaF9lbmNvZGVyKGNvbm5lY3RvciwgZW5jb2Rlcik7Ci0KLQlyZXR1cm4gMDsKLX0K LQotc3RhdGljIGludCByb2NrY2hpcF9taXBpX3BhcnNlX2R0KHN0cnVjdCBkd19taXBpX2RzaSAq ZHNpKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkc2ktPmRldi0+b2Zfbm9kZTsKLQot CWRzaS0+Z3JmX3JlZ21hcCA9IHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGUobnAsICJy b2NrY2hpcCxncmYiKTsKLQlpZiAoSVNfRVJSKGRzaS0+Z3JmX3JlZ21hcCkpIHsKLQkJRFJNX0RF Vl9FUlJPUihkc2ktPmRldiwgIlVuYWJsZSB0byBnZXQgcm9ja2NoaXAsZ3JmXG4iKTsKLQkJcmV0 dXJuIFBUUl9FUlIoZHNpLT5ncmZfcmVnbWFwKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3Rh dGljIHN0cnVjdCBkd19taXBpX2RzaV9wbGF0X2RhdGEgcmszMjg4X21pcGlfZHNpX2Rydl9kYXRh ID0gewotCS5kc2kwX2VuX2JpdCA9IFJLMzI4OF9EU0kwX1NFTF9WT1BfTElULAotCS5kc2kxX2Vu X2JpdCA9IFJLMzI4OF9EU0kxX1NFTF9WT1BfTElULAotCS5ncmZfc3dpdGNoX3JlZyA9IFJLMzI4 OF9HUkZfU09DX0NPTjYsCi0JLm1heF9kYXRhX2xhbmVzID0gNCwKLX07Ci0KLXN0YXRpYyBzdHJ1 Y3QgZHdfbWlwaV9kc2lfcGxhdF9kYXRhIHJrMzM5OV9taXBpX2RzaV9kcnZfZGF0YSA9IHsKLQku ZHNpMF9lbl9iaXQgPSBSSzMzOTlfRFNJMF9TRUxfVk9QX0xJVCwKLQkuZHNpMV9lbl9iaXQgPSBS SzMzOTlfRFNJMV9TRUxfVk9QX0xJVCwKLQkuZ3JmX3N3aXRjaF9yZWcgPSBSSzMzOTlfR1JGX1NP Q19DT04yMCwKLQkuZ3JmX2RzaTBfbW9kZSA9IFJLMzM5OV9HUkZfRFNJX01PREUsCi0JLmdyZl9k c2kwX21vZGVfcmVnID0gUkszMzk5X0dSRl9TT0NfQ09OMjIsCi0JLmZsYWdzID0gRFdfTUlQSV9O RUVEU19QSFlfQ0ZHX0NMSyB8IERXX01JUElfTkVFRFNfR1JGX0NMSywKLQkubWF4X2RhdGFfbGFu ZXMgPSA0LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZHdfbWlwaV9k c2lfZHRfaWRzW10gPSB7Ci0JewotCSAuY29tcGF0aWJsZSA9ICJyb2NrY2hpcCxyazMyODgtbWlw aS1kc2kiLAotCSAuZGF0YSA9ICZyazMyODhfbWlwaV9kc2lfZHJ2X2RhdGEsCi0JfSwgewotCSAu Y29tcGF0aWJsZSA9ICJyb2NrY2hpcCxyazMzOTktbWlwaS1kc2kiLAotCSAuZGF0YSA9ICZyazMz OTlfbWlwaV9kc2lfZHJ2X2RhdGEsCi0JfSwKLQl7IC8qIHNlbnRpbmVsICovIH0KLX07Ci1NT0RV TEVfREVWSUNFX1RBQkxFKG9mLCBkd19taXBpX2RzaV9kdF9pZHMpOwotCi1zdGF0aWMgaW50IGR3 X21pcGlfZHNpX2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIs Ci0JCQkgICAgdm9pZCAqZGF0YSkKLXsKLQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpvZl9p ZCA9Ci0JCQlvZl9tYXRjaF9kZXZpY2UoZHdfbWlwaV9kc2lfZHRfaWRzLCBkZXYpOwotCWNvbnN0 IHN0cnVjdCBkd19taXBpX2RzaV9wbGF0X2RhdGEgKnBkYXRhID0gb2ZfaWQtPmRhdGE7Ci0Jc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0 cnVjdCByZXNldF9jb250cm9sICphcGJfcnN0OwotCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBk YXRhOwotCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpOwotCXN0cnVjdCByZXNvdXJjZSAqcmVzOwot CWludCByZXQ7Ci0KLQlkc2kgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmRzaSksIEdGUF9L RVJORUwpOwotCWlmICghZHNpKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWRzaS0+ZGV2ID0gZGV2 OwotCWRzaS0+cGRhdGEgPSBwZGF0YTsKLQlkc2ktPmRwbXNfbW9kZSA9IERSTV9NT0RFX0RQTVNf T0ZGOwotCi0JcmV0ID0gcm9ja2NoaXBfbWlwaV9wYXJzZV9kdChkc2kpOwotCWlmIChyZXQpCi0J CXJldHVybiByZXQ7Ci0KLQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNP VVJDRV9NRU0sIDApOwotCWRzaS0+YmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJl cyk7Ci0JaWYgKElTX0VSUihkc2ktPmJhc2UpKQotCQlyZXR1cm4gUFRSX0VSUihkc2ktPmJhc2Up OwotCi0JZHNpLT5wbGxyZWZfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgInJlZiIpOwotCWlmIChJ U19FUlIoZHNpLT5wbGxyZWZfY2xrKSkgewotCQlyZXQgPSBQVFJfRVJSKGRzaS0+cGxscmVmX2Ns ayk7Ci0JCURSTV9ERVZfRVJST1IoZGV2LAotCQkJICAgICAgIlVuYWJsZSB0byBnZXQgcGxsIHJl ZmVyZW5jZSBjbG9jazogJWRcbiIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JZHNpLT5w Y2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgInBjbGsiKTsKLQlpZiAoSVNfRVJSKGRzaS0+cGNsaykp IHsKLQkJcmV0ID0gUFRSX0VSUihkc2ktPnBjbGspOwotCQlEUk1fREVWX0VSUk9SKGRldiwgIlVu YWJsZSB0byBnZXQgcGNsazogJWRcbiIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JLyoK LQkgKiBOb3RlIHRoYXQgdGhlIHJlc2V0IHdhcyBub3QgZGVmaW5lZCBpbiB0aGUgaW5pdGlhbCBk ZXZpY2UgdHJlZSwgc28KLQkgKiB3ZSBoYXZlIHRvIGJlIHByZXBhcmVkIGZvciBpdCBub3QgYmVp bmcgZm91bmQuCi0JICovCi0JYXBiX3JzdCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXQoZGV2LCAi YXBiIik7Ci0JaWYgKElTX0VSUihhcGJfcnN0KSkgewotCQlyZXQgPSBQVFJfRVJSKGFwYl9yc3Qp OwotCQlpZiAocmV0ID09IC1FTk9FTlQpIHsKLQkJCWFwYl9yc3QgPSBOVUxMOwotCQl9IGVsc2Ug ewotCQkJRFJNX0RFVl9FUlJPUihkZXYsCi0JCQkJICAgICAgIlVuYWJsZSB0byBnZXQgcmVzZXQg Y29udHJvbDogJWRcbiIsIHJldCk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JfQotCi0JaWYgKGFw Yl9yc3QpIHsKLQkJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+cGNsayk7Ci0JCWlmIChy ZXQpIHsKLQkJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBwY2xrXG4iKTsK LQkJCXJldHVybiByZXQ7Ci0JCX0KLQotCQlyZXNldF9jb250cm9sX2Fzc2VydChhcGJfcnN0KTsK LQkJdXNsZWVwX3JhbmdlKDEwLCAyMCk7Ci0JCXJlc2V0X2NvbnRyb2xfZGVhc3NlcnQoYXBiX3Jz dCk7Ci0KLQkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+cGNsayk7Ci0JfQotCi0JaWYgKHBk YXRhLT5mbGFncyAmIERXX01JUElfTkVFRFNfUEhZX0NGR19DTEspIHsKLQkJZHNpLT5waHlfY2Zn X2NsayA9IGRldm1fY2xrX2dldChkZXYsICJwaHlfY2ZnIik7Ci0JCWlmIChJU19FUlIoZHNpLT5w aHlfY2ZnX2NsaykpIHsKLQkJCXJldCA9IFBUUl9FUlIoZHNpLT5waHlfY2ZnX2Nsayk7Ci0JCQlE Uk1fREVWX0VSUk9SKGRldiwKLQkJCQkgICAgICAiVW5hYmxlIHRvIGdldCBwaHlfY2ZnX2Nsazog JWRcbiIsIHJldCk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JfQotCi0JaWYgKHBkYXRhLT5mbGFn cyAmIERXX01JUElfTkVFRFNfR1JGX0NMSykgewotCQlkc2ktPmdyZl9jbGsgPSBkZXZtX2Nsa19n ZXQoZGV2LCAiZ3JmIik7Ci0JCWlmIChJU19FUlIoZHNpLT5ncmZfY2xrKSkgewotCQkJcmV0ID0g UFRSX0VSUihkc2ktPmdyZl9jbGspOwotCQkJRFJNX0RFVl9FUlJPUihkZXYsICJVbmFibGUgdG8g Z2V0IGdyZl9jbGs6ICVkXG4iLCByZXQpOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCX0KLQotCXJl dCA9IGNsa19wcmVwYXJlX2VuYWJsZShkc2ktPnBsbHJlZl9jbGspOwotCWlmIChyZXQpIHsKLQkJ RFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gZW5hYmxlIHBsbHJlZl9jbGtcbiIpOwotCQly ZXR1cm4gcmV0OwotCX0KLQotCXJldCA9IGR3X21pcGlfZHNpX3JlZ2lzdGVyKGRybSwgZHNpKTsK LQlpZiAocmV0KSB7Ci0JCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIG1p cGlfZHNpOiAlZFxuIiwgcmV0KTsKLQkJZ290byBlcnJfcGxscmVmOwotCX0KLQotCWRzaS0+ZHNp X2hvc3Qub3BzID0gJmR3X21pcGlfZHNpX2hvc3Rfb3BzOwotCWRzaS0+ZHNpX2hvc3QuZGV2ID0g ZGV2OwotCXJldCA9IG1pcGlfZHNpX2hvc3RfcmVnaXN0ZXIoJmRzaS0+ZHNpX2hvc3QpOwotCWlm IChyZXQpIHsKLQkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgTUlQSSBo b3N0OiAlZFxuIiwgcmV0KTsKLQkJZ290byBlcnJfY2xlYW51cDsKLQl9Ci0KLQlpZiAoIWRzaS0+ cGFuZWwpIHsKLQkJcmV0ID0gLUVQUk9CRV9ERUZFUjsKLQkJZ290byBlcnJfbWlwaV9kc2lfaG9z dDsKLQl9Ci0KLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBkc2kpOwotCXBtX3J1bnRpbWVfZW5hYmxl KGRldik7Ci0JcmV0dXJuIDA7Ci0KLWVycl9taXBpX2RzaV9ob3N0OgotCW1pcGlfZHNpX2hvc3Rf dW5yZWdpc3RlcigmZHNpLT5kc2lfaG9zdCk7Ci1lcnJfY2xlYW51cDoKLQlkc2ktPmNvbm5lY3Rv ci5mdW5jcy0+ZGVzdHJveSgmZHNpLT5jb25uZWN0b3IpOwotCWRzaS0+ZW5jb2Rlci5mdW5jcy0+ ZGVzdHJveSgmZHNpLT5lbmNvZGVyKTsKLWVycl9wbGxyZWY6Ci0JY2xrX2Rpc2FibGVfdW5wcmVw YXJlKGRzaS0+cGxscmVmX2Nsayk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgZHdf bWlwaV9kc2lfdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVy LAotCQkJICAgICAgIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGR3X21pcGlfZHNpICpkc2kgPSBk ZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQotCW1pcGlfZHNpX2hvc3RfdW5yZWdpc3RlcigmZHNpLT5k c2lfaG9zdCk7Ci0JcG1fcnVudGltZV9kaXNhYmxlKGRldik7Ci0KLQlkc2ktPmNvbm5lY3Rvci5m dW5jcy0+ZGVzdHJveSgmZHNpLT5jb25uZWN0b3IpOwotCWRzaS0+ZW5jb2Rlci5mdW5jcy0+ZGVz dHJveSgmZHNpLT5lbmNvZGVyKTsKLQotCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPnBsbHJl Zl9jbGspOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBvbmVudF9vcHMgZHdfbWlwaV9k c2lfb3BzID0gewotCS5iaW5kCT0gZHdfbWlwaV9kc2lfYmluZCwKLQkudW5iaW5kCT0gZHdfbWlw aV9kc2lfdW5iaW5kLAotfTsKLQotc3RhdGljIGludCBkd19taXBpX2RzaV9wcm9iZShzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXJldHVybiBjb21wb25lbnRfYWRkKCZwZGV2LT5k ZXYsICZkd19taXBpX2RzaV9vcHMpOwotfQotCi1zdGF0aWMgaW50IGR3X21pcGlfZHNpX3JlbW92 ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCWNvbXBvbmVudF9kZWwoJnBkZXYt PmRldiwgJmR3X21pcGlfZHNpX29wcyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0cnVjdCBwbGF0Zm9y bV9kcml2ZXIgZHdfbWlwaV9kc2lfZHJpdmVyID0gewotCS5wcm9iZQkJPSBkd19taXBpX2RzaV9w cm9iZSwKLQkucmVtb3ZlCQk9IGR3X21pcGlfZHNpX3JlbW92ZSwKLQkuZHJpdmVyCQk9IHsKLQkJ Lm9mX21hdGNoX3RhYmxlID0gZHdfbWlwaV9kc2lfZHRfaWRzLAotCQkubmFtZQk9IERSSVZFUl9O QU1FLAotCX0sCi19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tj aGlwX2RybV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fZHJ2 LmMKaW5kZXggZjgxNGQzN2IxZGIyLi42MjNjY2U3N2ViYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJt L3JvY2tjaGlwL3JvY2tjaGlwX2RybV9kcnYuYwpAQCAtNDc3LDcgKzQ3Nyw3IEBAIHN0YXRpYyBp bnQgX19pbml0IHJvY2tjaGlwX2RybV9pbml0KHZvaWQpCiAJQUREX1JPQ0tDSElQX1NVQl9EUklW RVIoY2RuX2RwX2RyaXZlciwgQ09ORklHX1JPQ0tDSElQX0NETl9EUCk7CiAJQUREX1JPQ0tDSElQ X1NVQl9EUklWRVIoZHdfaGRtaV9yb2NrY2hpcF9wbHRmbV9kcml2ZXIsCiAJCQkJQ09ORklHX1JP Q0tDSElQX0RXX0hETUkpOwotCUFERF9ST0NLQ0hJUF9TVUJfRFJJVkVSKGR3X21pcGlfZHNpX2Ry aXZlciwKKwlBRERfUk9DS0NISVBfU1VCX0RSSVZFUihkd19taXBpX2RzaV9yb2NrY2hpcF9kcml2 ZXIsCiAJCQkJQ09ORklHX1JPQ0tDSElQX0RXX01JUElfRFNJKTsKIAlBRERfUk9DS0NISVBfU1VC X0RSSVZFUihpbm5vX2hkbWlfZHJpdmVyLCBDT05GSUdfUk9DS0NISVBfSU5OT19IRE1JKTsKIApk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9kcnYuaCBi L2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fZHJ2LmgKaW5kZXggOWMwNjRh NDA0NThiLi4zMDEzOTkyZDA4OGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hp cC9yb2NrY2hpcF9kcm1fZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tj aGlwX2RybV9kcnYuaApAQCAtNjYsNyArNjYsNyBAQCBpbnQgcm9ja2NoaXBfZHJtX3dhaXRfdmFj dF9lbmQoc3RydWN0IGRybV9jcnRjICpjcnRjLCB1bnNpZ25lZCBpbnQgbXN0aW1lb3V0KTsKIAog ZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgY2RuX2RwX2RyaXZlcjsKIGV4dGVybiBzdHJ1 Y3QgcGxhdGZvcm1fZHJpdmVyIGR3X2hkbWlfcm9ja2NoaXBfcGx0Zm1fZHJpdmVyOwotZXh0ZXJu IHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZHdfbWlwaV9kc2lfZHJpdmVyOworZXh0ZXJuIHN0cnVj dCBwbGF0Zm9ybV9kcml2ZXIgZHdfbWlwaV9kc2lfcm9ja2NoaXBfZHJpdmVyOwogZXh0ZXJuIHN0 cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaW5ub19oZG1pX2RyaXZlcjsKIGV4dGVybiBzdHJ1Y3QgcGxh dGZvcm1fZHJpdmVyIHJvY2tjaGlwX2RwX2RyaXZlcjsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1f ZHJpdmVyIHJvY2tjaGlwX2x2ZHNfZHJpdmVyOwotLSAKMi4xNy4wCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRy aS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK