From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Zhong Subject: [v10.2 PATCH 5/5] drm/rockchip: cdn-dp: add cdn DP support for rk3399 Date: Thu, 11 Aug 2016 20:10:46 -0700 Message-ID: <1470971446-23159-1-git-send-email-zyw@rock-chips.com> References: <57AD2F30.9050408@rock-chips.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <57AD2F30.9050408@rock-chips.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dianders@chromium.org, tfiga@chromium.org, heiko@sntech.de, yzq@rock-chips.com, groeck@chromium.org, myungjoo.ham@samsung.com, cw00.choi@samsung.com, wulf@rock-chips.com, marcheu@chromium.org Cc: linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org, zyw@rock-chips.com, linux-arm-kernel@lists.infradead.org List-Id: linux-rockchip.vger.kernel.org QWRkIHN1cHBvcnQgZm9yIGNkbiBEUCBjb250cm9sbGVyIHdoaWNoIGlzIGVtYmVkZGVkIGluIHRo ZSByazMzOTkKU29Dcy4gVGhlIERQIGlzIGNvbXBsaWFudCB3aXRoIERpc3BsYXlQb3J0IFNwZWNp ZmljYXRpb24sClZlcnNpb24gMS4zLCBUaGlzIElQIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgcm9j a2NoaXAgdHlwZS1jIFBIWSBJUC4KVGhlcmUgaXMgYSB1Q1BVIGluIERQIGNvbnRyb2xsZXIsIGl0 IG5lZWQgYSBmaXJtd2FyZSB0byB3b3JrLApwbGVhc2UgcHV0IHRoZSBmaXJtd2FyZSBmaWxlIHRv IC9saWIvZmlybXdhcmUvcm9ja2NoaXAvZHB0eC5iaW4uIFRoZQp1Q1BVIGluIGNoYXJnZSBvZiBh dXggY29tbXVuaWNhdGlvbiBhbmQgbGluayB0cmFpbmluZywgdGhlIGhvc3QgdXNlCm1haWxib3gg dG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgdWNwdS4KVGhlIGRjbGsgcGluX3BvbCBvZiB2b3AgbXVz dCBub3QgYmUgaW52ZXJ0IGZvciBEUC4KClNpZ25lZC1vZmYtYnk6IENocmlzIFpob25nIDx6eXdA cm9jay1jaGlwcy5jb20+ClJldmlld2VkLWJ5OiBTZWFuIFBhdWwgPHNlYW5wYXVsQGNocm9taXVt Lm9yZz4KQWNrZWQtYnk6IE1hcmsgWWFvIDxtYXJrLnlhb0Byb2NrLWNoaXBzLmNvbT4KCi0tLQoK Q2hhbmdlcyBpbiB2MTAuMjoKLSByZW1vdmUgYmVzdF9lbmNvZGVyIG9wcwoKQ2hhbmdlcyBpbiB2 MTAuMToKLSBzdXBwb3J0IHJlYWQgc2luayBjb3VudCBmcm9tIERQQ0QKCkNoYW5nZXMgaW4gdjEw OgotIGNvbnRyb2wgdGhlIGdyZl9jbGsgaW4gRFAKCkNoYW5nZXMgaW4gdjk6Ci0gZG8gbm90IG5l ZWQgcmVzZXQgdGhlIHBoeSBiZWZvcmUgcG93ZXJfb24KLSBhZGQgYSBvcmllbnRhdGlvbiBpbmZv cm1hdGlvbiBmb3Igc2V0X2NhcGFiaWxpdHkKLSByZXRyeSB0byByZWFkIGRwY2QgaW4gMTAgc2Vj b25kcwoKQ2hhbmdlcyBpbiB2ODoKLSBvcHRpbWl6YXRpb24gdGhlIGVyciBsb2cKCkNoYW5nZXMg aW4gdjc6Ci0gc3VwcG9ydCBmaXJtd2FyZSBzdGFuZGJ5IHdoZW4gbm8gZHB0eCBjb25uZWN0aW9u Ci0gb3B0aW1pemF0aW9uIHRoZSBjYWxjdWxhdGlvbiBvZiB0dSBzaXplIGFuZCB2YWxpZCBzeW1i b2wKCkNoYW5nZXMgaW4gdjY6Ci0gYWRkIGEgcG9ydCBzdHJ1Y3QKLSBzZWxlY3QgU05EX1NPQ19I RE1JX0NPREVDCi0gZm9yY2UgcmVzZXQgdGhlIHBoeSB3aGVuIGhwZCBkZXRlY3RlZAoKQ2hhbmdl cyBpbiB2NToKLSBhbHBoYWJldGljYWwgb3JkZXIKLSBkbyBub3QgdXNlIGxvbmcsIHVzZSB1MzIg b3IgdTY0Ci0gcmV0dXJuIE1PREVfQ0xPQ0tfSElHSCB3aGVuIHJlcXVlc3RlZCA+IGFjdHVhbAot IE9wdGltaXplZCBDb2RpbmcgU3R5bGUKLSBhZGQgYSBmb3JtdWxhIHRvIGdldCBiZXR0ZXIgdHUg c2l6ZSBhbmQgc3ltYm9sIHZhbHVlLgotIG1vZGlmeSBhY2NvcmRpbmcgdG8gU2VhbiBQYXVsJ3Mg Y29tbWVudHMKLSBmaXhlZCB0aGUgZndfd2FpdCBhbHdheXMgMAoKQ2hhbmdlcyBpbiB2NDoKLSB1 c2UgcGh5IGZyYW1ld29yayB0byBjb250cm9sIERQIHBoeQotIHN1cHBvcnQgMiBwaHlzCgpDaGFu Z2VzIGluIHYzOgotIHVzZSBFWFRDT05fRElTUF9EUCBhbmQgRVhUQ09OX0RJU1BfRFBfQUxUIGNh YmxlIHRvIGdldCBkcCBwb3J0IHN0YXRlLgotIHJlc2V0IHNwZGlmIGJlZm9yZSBjb25maWcgaXQK LSBtb2RpZnkgdGhlIGZpcm13YXJlIGNsayB0byAxMDBNaHoKLSByZXRyeSBsb2FkIGZpcm13YXJl IGlmIGZ3IGZpbGUgaXMgcmVxdWVzdGVkIHRvbyBlYXJseQoKQ2hhbmdlcyBpbiB2MjoKLSBBbHBo YWJldGljIG9yZGVyCi0gcmVtb3ZlIGV4Y2VzcyBlcnJvciBtZXNzYWdlCi0gdXNlIGRlZmluZSBj bGtfcmF0ZQotIGNoZWNrIGFsbCByZXR1cm4gdmFsdWUKLSByZW1vdmUgZGV2X3NldF9uYW1lKGRw LT5kZXYsICJjZG4tZHAiKTsKLSB1c2Ugc2NoZWR1bGVfZGVsYXllZF93b3JrCi0gcmVtb3ZlIG5l dmVyLWNhbGxlZCBmdW5jdGlvbnMKLSByZW1vdmUgc29tZSB1bm5lY2Vzc2FyeSAoKQoKQ2hhbmdl cyBpbiB2MToKLSB1c2UgZXh0Y29uIEFQSQotIHVzZSBoZG1pLWNvZGVjIGZvciB0aGUgRFAgQXNv YwotIGRvIG5vdCBpbml0aWFsaXplIHRoZSAicmV0IgotIHByaW50ayBhIGVyciBsb2cgd2hlbiBk cm1fb2ZfZW5jb2Rlcl9hY3RpdmVfZW5kcG9pbnRfaWQKLSBtb2RpZnkgdGhlIGRjbGsgcGluX3Bv bCB0byBhIHNpbmdsZSBsaW5lCgogZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL0tjb25maWcgICAg ICAgICAgICB8ICAxMCArCiBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvTWFrZWZpbGUgICAgICAg ICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAtY29yZS5jICAgICAg fCA5MjcgKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vcm9ja2No aXAvY2RuLWRwLWNvcmUuaCAgICAgIHwgMTA0ICsrKwogZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlw L2Nkbi1kcC1yZWcuYyAgICAgICB8IDk1OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBk cml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRwLXJlZy5oICAgICAgIHwgNDgyICsrKysrKysr KysrKysrCiBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5jIHwgIDEz ICstCiBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5oIHwgICA5ICsK IGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF92b3BfcmVnLmMgfCAgIDIgKwogOSBm aWxlcyBjaGFuZ2VkLCAyNTA0IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1jb3JlLmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRwLWNvcmUuaAogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAtcmVnLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRwLXJlZy5oCgpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL0tjb25maWcgYi9kcml2ZXJzL2dw dS9kcm0vcm9ja2NoaXAvS2NvbmZpZwppbmRleCBkMzBiZGMzLi4yMGFhYWZlIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0v cm9ja2NoaXAvS2NvbmZpZwpAQCAtMjUsNiArMjUsMTYgQEAgY29uZmlnIFJPQ0tDSElQX0FOQUxP R0lYX0RQCiAJICBmb3IgdGhlIEFuYWxvZ2l4IENvcmUgRFAgZHJpdmVyLiBJZiB5b3Ugd2FudCB0 byBlbmFibGUgRFAKIAkgIG9uIFJLMzI4OCBiYXNlZCBTb0MsIHlvdSBzaG91bGQgc2VsZXQgdGhp cyBvcHRpb24uCiAKK2NvbmZpZyBST0NLQ0hJUF9DRE5fRFAKKyAgICAgICAgdHJpc3RhdGUgIlJv Y2tjaGlwIGNkbiBEUCIKKyAgICAgICAgZGVwZW5kcyBvbiBEUk1fUk9DS0NISVAKKwlzZWxlY3Qg U05EX1NPQ19IRE1JX0NPREVDIGlmIFNORF9TT0MKKyAgICAgICAgaGVscAorCSAgVGhpcyBzZWxl Y3RzIHN1cHBvcnQgZm9yIFJvY2tjaGlwIFNvQyBzcGVjaWZpYyBleHRlbnNpb25zCisJICBmb3Ig dGhlIGNkbiBEUCBkcml2ZXIuIElmIHlvdSB3YW50IHRvIGVuYWJsZSBEcCBvbgorCSAgUkszMzk5 IGJhc2VkIFNvQywgeW91IHNob3VsZCBzZWxlY3QgdGhpcworCSAgb3B0aW9uLgorCiBjb25maWcg Uk9DS0NISVBfRFdfSERNSQogICAgICAgICB0cmlzdGF0ZSAiUm9ja2NoaXAgc3BlY2lmaWMgZXh0 ZW5zaW9ucyBmb3IgU3lub3BzeXMgRFcgSERNSSIKICAgICAgICAgZGVwZW5kcyBvbiBEUk1fUk9D S0NISVAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9NYWtlZmlsZSBiL2Ry aXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9NYWtlZmlsZQppbmRleCAwNWQwNzEzLi5hYmRlY2Q1IDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvTWFrZWZpbGUKKysrIGIvZHJpdmVy cy9ncHUvZHJtL3JvY2tjaGlwL01ha2VmaWxlCkBAIC03LDYgKzcsNyBAQCByb2NrY2hpcGRybS15 IDo9IHJvY2tjaGlwX2RybV9kcnYubyByb2NrY2hpcF9kcm1fZmIubyBcCiByb2NrY2hpcGRybS0k KENPTkZJR19EUk1fRkJERVZfRU1VTEFUSU9OKSArPSByb2NrY2hpcF9kcm1fZmJkZXYubwogCiBv YmotJChDT05GSUdfUk9DS0NISVBfQU5BTE9HSVhfRFApICs9IGFuYWxvZ2l4X2RwLXJvY2tjaGlw Lm8KK29iai0kKENPTkZJR19ST0NLQ0hJUF9DRE5fRFApICs9IGNkbi1kcC1jb3JlLm8gY2RuLWRw LXJlZy5vCiBvYmotJChDT05GSUdfUk9DS0NISVBfRFdfSERNSSkgKz0gZHdfaGRtaS1yb2NrY2hp cC5vCiBvYmotJChDT05GSUdfUk9DS0NISVBfRFdfTUlQSV9EU0kpICs9IGR3LW1pcGktZHNpLm8K IG9iai0kKENPTkZJR19ST0NLQ0hJUF9JTk5PX0hETUkpICs9IGlubm9faGRtaS5vCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRwLWNvcmUuYyBiL2RyaXZlcnMvZ3B1 L2RybS9yb2NrY2hpcC9jZG4tZHAtY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjJmMDY4YjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2No aXAvY2RuLWRwLWNvcmUuYwpAQCAtMCwwICsxLDkyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg RnV6aG91IFJvY2tjaGlwIEVsZWN0cm9uaWNzIENvLkx0ZAorICogQXV0aG9yOiBDaHJpcyBaaG9u ZyA8enl3QHJvY2stY2hpcHMuY29tPgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVy c2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5k CisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3Nl IHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGRybS9k cm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJt L2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZHBfaGVscGVyLmg+CisjaW5j bHVkZSA8ZHJtL2RybV9lZGlkLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9vZi5oPgorCisjaW5jbHVk ZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY29tcG9uZW50Lmg+CisjaW5jbHVkZSA8 bGludXgvZXh0Y29uLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxs aW51eC9yZWdtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9yZXNldC5oPgorCisjaW5jbHVkZSA8bGlu dXgvbWZkL3N5c2Nvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KKworI2luY2x1ZGUg PHNvdW5kL2hkbWktY29kZWMuaD4KKworI2luY2x1ZGUgImNkbi1kcC1jb3JlLmgiCisjaW5jbHVk ZSAiY2RuLWRwLXJlZy5oIgorI2luY2x1ZGUgInJvY2tjaGlwX2RybV92b3AuaCIKKworI2RlZmlu ZSBjb25uZWN0b3JfdG9fZHAoYykgXAorCQljb250YWluZXJfb2YoYywgc3RydWN0IGNkbl9kcF9k ZXZpY2UsIGNvbm5lY3RvcikKKworI2RlZmluZSBlbmNvZGVyX3RvX2RwKGMpIFwKKwkJY29udGFp bmVyX29mKGMsIHN0cnVjdCBjZG5fZHBfZGV2aWNlLCBlbmNvZGVyKQorCisvKiBkcCBncmYgcmVn aXN0ZXIgb2Zmc2V0ICovCisjZGVmaW5lIEdSRl9TT0NfQ09OOQkJMHg2MjI0CisjZGVmaW5lIERQ X1NFTF9WT1BfTElUCQlCSVQoMTIpCisjZGVmaW5lIEdSRl9TT0NfQ09OMjYJCTB4NjI2OAorI2Rl ZmluZSBVUEhZX1NFTF9CSVQJCTMKKyNkZWZpbmUgVVBIWV9TRUxfTUFTSwkJQklUKDE5KQorI2Rl ZmluZSBEUFRYX0hQRF9TRUwJCSgzIDw8IDEyKQorI2RlZmluZSBEUFRYX0hQRF9ERUwJCSgyIDw8 IDEyKQorI2RlZmluZSBEUFRYX0hQRF9TRUxfTUFTSwkoMyA8PCAyOCkKKworI2RlZmluZSBNQVhf RldfV0FJVF9TRUNTCTY0CisjZGVmaW5lIENETl9EUF9GSVJNV0FSRQkJInJvY2tjaGlwL2RwdHgu YmluIgorCitzdHJ1Y3QgY2RuX2RwX2RhdGEgeworCXU4IG1heF9waHk7Cit9OworCitzdHJ1Y3Qg Y2RuX2RwX2RhdGEgcmszMzk5X2Nkbl9kcCA9IHsKKwkubWF4X3BoeSA9IDIsCit9OworCitzdGF0 aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBjZG5fZHBfZHRfaWRzW10gPSB7CisJeyAuY29t cGF0aWJsZSA9ICJyb2NrY2hpcCxyazMzOTktY2RuLWRwIiwKKwkJLmRhdGEgPSAodm9pZCAqKSZy azMzOTlfY2RuX2RwIH0sCisJe30KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGNkbl9k cF9kdF9pZHMpOworCitzdGF0aWMgaW50IGNkbl9kcF9ncmZfd3JpdGUoc3RydWN0IGNkbl9kcF9k ZXZpY2UgKmRwLAorCQkJICAgIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCB2YWwpCit7 CisJaW50IHJldDsKKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkcC0+Z3JmX2Nsayk7CisJ aWYgKHJldCkgeworCQlkZXZfZXJyKGRwLT5kZXYsICJGYWlsZWQgdG8gcHJlcGFyZV9lbmFibGUg Z3JmIGNsb2NrXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSByZWdtYXBfd3JpdGUo ZHAtPmdyZiwgcmVnLCB2YWwpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkcC0+ZGV2LCAiQ291 bGQgbm90IHdyaXRlIHRvIEdSRjogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJ Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRwLT5ncmZfY2xrKTsKKworCXJldHVybiAwOworfQorCitz dGF0aWMgaW50IGNkbl9kcF9jbGtfZW5hYmxlKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCkKK3sK KwlpbnQgcmV0OworCXUzMiByYXRlOworCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGRwLT5w Y2xrKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRwLT5kZXYsICJjYW5ub3QgZW5hYmxl IGRwIHBjbGsgJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX3BjbGs7CisJfQorCisJcmV0ID0gY2xr X3ByZXBhcmVfZW5hYmxlKGRwLT5jb3JlX2Nsayk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vy cihkcC0+ZGV2LCAiY2Fubm90IGVuYWJsZSBjb3JlX2NsayAlZFxuIiwgcmV0KTsKKwkJZ290byBl cnJfY29yZV9jbGs7CisJfQorCisJcmF0ZSA9IGNsa19nZXRfcmF0ZShkcC0+Y29yZV9jbGspOwor CWlmIChyYXRlIDwgMCkgeworCQlkZXZfZXJyKGRwLT5kZXYsICJnZXQgY2xrIHJhdGUgZmFpbGVk OiAlZFxuIiwgcmF0ZSk7CisJCWdvdG8gZXJyX3NldF9yYXRlOworCX0KKworCWNkbl9kcF9zZXRf ZndfY2xrKGRwLCByYXRlKTsKKworCXJldHVybiAwOworCitlcnJfc2V0X3JhdGU6CisJY2xrX2Rp c2FibGVfdW5wcmVwYXJlKGRwLT5jb3JlX2Nsayk7CitlcnJfY29yZV9jbGs6CisJY2xrX2Rpc2Fi bGVfdW5wcmVwYXJlKGRwLT5wY2xrKTsKK2Vycl9wY2xrOgorCXJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzCitjZG5fZHBfY29ubmVjdG9yX2RldGVjdChz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBib29sIGZvcmNlKQoreworCXN0cnVjdCBj ZG5fZHBfZGV2aWNlICpkcCA9IGNvbm5lY3Rvcl90b19kcChjb25uZWN0b3IpOworCisJcmV0dXJu IGRwLT5ocGRfc3RhdHVzOworfQorCitzdGF0aWMgdm9pZCBjZG5fZHBfY29ubmVjdG9yX2Rlc3Ry b3koc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlkcm1fY29ubmVjdG9yX3Vu cmVnaXN0ZXIoY29ubmVjdG9yKTsKKwlkcm1fY29ubmVjdG9yX2NsZWFudXAoY29ubmVjdG9yKTsK K30KKworc3RhdGljIHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIGNkbl9kcF9hdG9taWNfY29u bmVjdG9yX2Z1bmNzID0geworCS5kcG1zID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rw bXMsCisJLmRldGVjdCA9IGNkbl9kcF9jb25uZWN0b3JfZGV0ZWN0LAorCS5kZXN0cm95ID0gY2Ru X2RwX2Nvbm5lY3Rvcl9kZXN0cm95LAorCS5maWxsX21vZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9z aW5nbGVfY29ubmVjdG9yX21vZGVzLAorCS5yZXNldCA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5l Y3Rvcl9yZXNldCwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVy X2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJt X2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUsCit9OworCitzdGF0aWMgaW50 IGNkbl9kcF9jb25uZWN0b3JfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3IpCit7CisJc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwID0gY29ubmVjdG9yX3RvX2RwKGNvbm5l Y3Rvcik7CisJc3RydWN0IGVkaWQgKmVkaWQ7CisJaW50IHJldCA9IDA7CisKKwllZGlkID0gZHJt X2RvX2dldF9lZGlkKGNvbm5lY3RvciwgY2RuX2RwX2dldF9lZGlkX2Jsb2NrLCBkcCk7CisJaWYg KGVkaWQpIHsKKwkJZGV2X2RiZyhkcC0+ZGV2LCAiZ290IGVkaWQ6IHdpZHRoWyVkXSB4IGhlaWdo dFslZF1cbiIsCisJCQllZGlkLT53aWR0aF9jbSwgZWRpZC0+aGVpZ2h0X2NtKTsKKworCQlkcC0+ c2lua19oYXNfYXVkaW8gPSBkcm1fZGV0ZWN0X21vbml0b3JfYXVkaW8oZWRpZCk7CisJCXJldCA9 IGRybV9hZGRfZWRpZF9tb2Rlcyhjb25uZWN0b3IsIGVkaWQpOworCQlpZiAocmV0KSB7CisJCQlk cm1fbW9kZV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoY29ubmVjdG9yLAorCQkJCQkJ CQllZGlkKTsKKwkJCWRybV9lZGlkX3RvX2VsZChjb25uZWN0b3IsIGVkaWQpOworCQl9CisJCWtm cmVlKGVkaWQpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY2RuX2RwX2Nv bm5lY3Rvcl9tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQkJ ICAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCXN0cnVjdCBjZG5fZHBf ZGV2aWNlICpkcCA9IGNvbm5lY3Rvcl90b19kcChjb25uZWN0b3IpOworCXN0cnVjdCBkcm1fZGlz cGxheV9pbmZvICpkaXNwbGF5X2luZm8gPSAmZHAtPmNvbm5lY3Rvci5kaXNwbGF5X2luZm87CisJ dTMyIHJlcXVlc3RlZCA9IG1vZGUtPmNsb2NrICogZGlzcGxheV9pbmZvLT5icGMgKiAzIC8gMTAw MDsKKwl1MzIgYWN0dWFsLCByYXRlLCBzaW5rX21heCwgc291cmNlX21heCA9IDA7CisJdTggbGFu ZXMsIGk7CisKKwkvKiBmaW5kIHRoZSBydW5uaW5nIHBvcnQgKi8KKwlmb3IgKGkgPSAwOyBpIDwg ZHAtPnBvcnRzOyBpKyspIHsKKwkJaWYgKGRwLT5wb3J0W2ldLT5waHlfc3RhdHVzKSB7CisJCQlz b3VyY2VfbWF4ID0gZHAtPnBvcnRbaV0tPmNhcF9sYW5lczsKKwkJCWJyZWFrOworCQl9CisJfQor CisJc2lua19tYXggPSBkcm1fZHBfbWF4X2xhbmVfY291bnQoZHAtPmRwY2QpOworCWxhbmVzID0g bWluKHNvdXJjZV9tYXgsIHNpbmtfbWF4KTsKKworCXNvdXJjZV9tYXggPSBkcm1fZHBfYndfY29k ZV90b19saW5rX3JhdGUoQ0ROX0RQX01BWF9MSU5LX1JBVEUpOworCXNpbmtfbWF4ID0gZHJtX2Rw X21heF9saW5rX3JhdGUoZHAtPmRwY2QpOworCXJhdGUgPSBtaW4oc291cmNlX21heCwgc2lua19t YXgpOworCisJYWN0dWFsID0gcmF0ZSAqIGxhbmVzIC8gMTAwOworCisJLyogZWZmaWNpZW5jeSBp cyBhYm91dCAwLjggKi8KKwlhY3R1YWwgPSBhY3R1YWwgKiA4IC8gMTA7CisKKwlpZiAocmVxdWVz dGVkID4gYWN0dWFsKSB7CisJCWRldl9kYmcoZHAtPmRldiwgInJlcXVlc3RlZD0lZCwgYWN0dWFs PSVkLCBjbG9jaz0lZFxuIiwKKwkJCXJlcXVlc3RlZCwgYWN0dWFsLCBtb2RlLT5jbG9jayk7CisJ CXJldHVybiBNT0RFX0NMT0NLX0hJR0g7CisJfQorCisJcmV0dXJuIE1PREVfT0s7Cit9CisKK3N0 YXRpYyBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgY2RuX2RwX2Nvbm5lY3Rvcl9o ZWxwZXJfZnVuY3MgPSB7CisJLmdldF9tb2RlcyA9IGNkbl9kcF9jb25uZWN0b3JfZ2V0X21vZGVz LAorCS5tb2RlX3ZhbGlkID0gY2RuX2RwX2Nvbm5lY3Rvcl9tb2RlX3ZhbGlkLAorfTsKKworc3Rh dGljIHZvaWQgY2RuX2RwX2NvbW1pdChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJ c3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwID0gZW5jb2Rlcl90b19kcChlbmNvZGVyKTsKKwlpbnQg cmV0OworCisJcmV0ID0gY2RuX2RwX3RyYWluaW5nX3N0YXJ0KGRwKTsKKwlpZiAocmV0KQorCQly ZXR1cm47CisKKwlyZXQgPSBjZG5fZHBfZ2V0X3RyYWluaW5nX3N0YXR1cyhkcCk7CisJaWYgKHJl dCkKKwkJcmV0dXJuOworCisJZGV2X2luZm8oZHAtPmRldiwgInJhdGU6MHgleCwgbGFuZXM6JWRc biIsCisJCSBkcC0+bGluay5yYXRlLCBkcC0+bGluay5udW1fbGFuZXMpOworCisJaWYgKGNkbl9k cF9zZXRfdmlkZW9fc3RhdHVzKGRwLCBDT05UUk9MX1ZJREVPX0lETEUpKQorCQlyZXR1cm47CisK KwlpZiAoY2RuX2RwX2NvbmZpZ192aWRlbyhkcCkpCisJCXJldHVybjsKKworCWlmIChjZG5fZHBf c2V0X3ZpZGVvX3N0YXR1cyhkcCwgQ09OVFJPTF9WSURFT19WQUxJRCkpCisJCXJldHVybjsKKwor CWRwLT5kcG1zX21vZGUgPSBEUk1fTU9ERV9EUE1TX09OOworfQorCitzdGF0aWMgdm9pZCBjZG5f ZHBfZW5jb2Rlcl9tb2RlX3NldChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkJICAg IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJCSAgICBzdHJ1Y3QgZHJtX2Rpc3Bs YXlfbW9kZSAqYWRqdXN0ZWQpCit7CisJc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwID0gZW5jb2Rl cl90b19kcChlbmNvZGVyKTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfaW5mbyAqZGlzcGxheV9pbmZv ID0gJmRwLT5jb25uZWN0b3IuZGlzcGxheV9pbmZvOworCXN0cnVjdCByb2NrY2hpcF9jcnRjX3N0 YXRlICpzdGF0ZTsKKwlzdHJ1Y3QgdmlkZW9faW5mbyAqdmlkZW8gPSAmZHAtPnZpZGVvX2luZm87 CisJaW50IHJldCwgdmFsOworCisJc3dpdGNoIChkaXNwbGF5X2luZm8tPmJwYykgeworCWNhc2Ug MTY6CisJY2FzZSAxMjoKKwljYXNlIDEwOgorCQl2aWRlby0+Y29sb3JfZGVwdGggPSAxMDsKKwkJ YnJlYWs7CisJY2FzZSA2OgorCQl2aWRlby0+Y29sb3JfZGVwdGggPSA2OworCQlicmVhazsKKwlk ZWZhdWx0OgorCQl2aWRlby0+Y29sb3JfZGVwdGggPSA4OworCQlicmVhazsKKwl9CisKKwl2aWRl by0+Y29sb3JfZm10ID0gUFhMX1JHQjsKKworCXZpZGVvLT52X3N5bmNfcG9sYXJpdHkgPSAhISht b2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfTlZTWU5DKTsKKwl2aWRlby0+aF9zeW5jX3BvbGFy aXR5ID0gISEobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX05IU1lOQyk7CisKKwlyZXQgPSBk cm1fb2ZfZW5jb2Rlcl9hY3RpdmVfZW5kcG9pbnRfaWQoZHAtPmRldi0+b2Zfbm9kZSwgZW5jb2Rl cik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkcC0+ZGV2LCAiQ291bGQgbm90IGdldCB2 b3AgaWQsICVkIiwgcmV0KTsKKwkJcmV0dXJuOworCX0KKworCWRldl9kYmcoZHAtPmRldiwgInZv cCAlcyBvdXRwdXQgdG8gY2RuLWRwXG4iLCAocmV0KSA/ICJMSVQiIDogIkJJRyIpOworCXN0YXRl ID0gdG9fcm9ja2NoaXBfY3J0Y19zdGF0ZShlbmNvZGVyLT5jcnRjLT5zdGF0ZSk7CisJaWYgKHJl dCkgeworCQl2YWwgPSBEUF9TRUxfVk9QX0xJVCB8IChEUF9TRUxfVk9QX0xJVCA8PCAxNik7CisJ CXN0YXRlLT5vdXRwdXRfbW9kZSA9IFJPQ0tDSElQX09VVF9NT0RFX1A4ODg7CisJfSBlbHNlIHsK KwkJdmFsID0gRFBfU0VMX1ZPUF9MSVQgPDwgMTY7CisJCXN0YXRlLT5vdXRwdXRfbW9kZSA9IFJP Q0tDSElQX09VVF9NT0RFX0FBQUE7CisJfQorCisJcmV0ID0gY2RuX2RwX2dyZl93cml0ZShkcCwg R1JGX1NPQ19DT045LCB2YWwpOworCWlmIChyZXQpCisJCXJldHVybjsKKworCW1lbWNweSgmZHAt Pm1vZGUsIGFkanVzdGVkLCBzaXplb2YoKm1vZGUpKTsKK30KKworc3RhdGljIHZvaWQgY2RuX2Rw X2VuY29kZXJfZW5hYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3Qg Y2RuX2RwX2RldmljZSAqZHAgPSBlbmNvZGVyX3RvX2RwKGVuY29kZXIpOworCisJaWYgKGRwLT5k cG1zX21vZGUgIT0gRFJNX01PREVfRFBNU19PTikKKwkJY2RuX2RwX2NvbW1pdChlbmNvZGVyKTsK K30KKworc3RhdGljIHZvaWQgY2RuX2RwX2VuY29kZXJfZGlzYWJsZShzdHJ1Y3QgZHJtX2VuY29k ZXIgKmVuY29kZXIpCit7CisJc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwID0gZW5jb2Rlcl90b19k cChlbmNvZGVyKTsKKworCWRwLT5kcG1zX21vZGUgPSBEUk1fTU9ERV9EUE1TX09GRjsKK30KKwor c3RhdGljIGludAorY2RuX2RwX2VuY29kZXJfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fZW5jb2Rl ciAqZW5jb2RlciwKKwkJCSAgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJ CQkgICAgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUpCit7CisJc3RydWN0 IHJvY2tjaGlwX2NydGNfc3RhdGUgKnMgPSB0b19yb2NrY2hpcF9jcnRjX3N0YXRlKGNydGNfc3Rh dGUpOworCisJcy0+b3V0cHV0X21vZGUgPSBST0NLQ0hJUF9PVVRfTU9ERV9BQUFBOworCXMtPm91 dHB1dF90eXBlID0gRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0OworCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzIGNkbl9kcF9lbmNv ZGVyX2hlbHBlcl9mdW5jcyA9IHsKKwkubW9kZV9zZXQgPSBjZG5fZHBfZW5jb2Rlcl9tb2RlX3Nl dCwKKwkuZW5hYmxlID0gY2RuX2RwX2VuY29kZXJfZW5hYmxlLAorCS5kaXNhYmxlID0gY2RuX2Rw X2VuY29kZXJfZGlzYWJsZSwKKwkuYXRvbWljX2NoZWNrID0gY2RuX2RwX2VuY29kZXJfYXRvbWlj X2NoZWNrLAorfTsKKworc3RhdGljIHN0cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyBjZG5fZHBfZW5j b2Rlcl9mdW5jcyA9IHsKKwkuZGVzdHJveSA9IGRybV9lbmNvZGVyX2NsZWFudXAsCit9OworCitz dGF0aWMgaW50IGNkbl9kcF9maXJtd2FyZV9pbml0KHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCkK K3sKKwlpbnQgcmV0OworCWNvbnN0IHUzMiAqaXJhbV9kYXRhLCAqZHJhbV9kYXRhOworCWNvbnN0 IHN0cnVjdCBmaXJtd2FyZSAqZncgPSBkcC0+Znc7CisJY29uc3Qgc3RydWN0IGNkbl9maXJtd2Fy ZV9oZWFkZXIgKmhkcjsKKworCWhkciA9IChzdHJ1Y3QgY2RuX2Zpcm13YXJlX2hlYWRlciAqKWZ3 LT5kYXRhOworCWlmIChmdy0+c2l6ZSAhPSBsZTMyX3RvX2NwdShoZHItPnNpemVfYnl0ZXMpKSB7 CisJCWRldl9lcnIoZHAtPmRldiwgImZpcm13YXJlIGlzIGludmFsaWRcbiIpOworCQlyZXR1cm4g LUVJTlZBTDsKKwl9CisKKwlpcmFtX2RhdGEgPSAoY29uc3QgdTMyICopKGZ3LT5kYXRhICsgaGRy LT5oZWFkZXJfc2l6ZSk7CisJZHJhbV9kYXRhID0gKGNvbnN0IHUzMiAqKShmdy0+ZGF0YSArIGhk ci0+aGVhZGVyX3NpemUgKyBoZHItPmlyYW1fc2l6ZSk7CisKKwlyZXQgPSBjZG5fZHBfbG9hZF9m aXJtd2FyZShkcCwgaXJhbV9kYXRhLCBoZHItPmlyYW1fc2l6ZSwKKwkJCQkgICBkcmFtX2RhdGEs IGhkci0+ZHJhbV9zaXplKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gY2Ru X2RwX3NldF9maXJtd2FyZV9hY3RpdmUoZHAsIHRydWUpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vy cihkcC0+ZGV2LCAiYWN0aXZlIHVjcHUgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJl dDsKKwl9CisKKwlyZXR1cm4gY2RuX2RwX2V2ZW50X2NvbmZpZyhkcCk7Cit9CisKK3N0YXRpYyBp bnQgY2RuX2RwX2luaXQoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKQoreworCXN0cnVjdCBkZXZp Y2UgKmRldiA9IGRwLT5kZXY7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+b2Zfbm9k ZTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRl dik7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IHJldDsKKworCWRwLT5ncmYgPSBzeXNj b25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKG5wLCAicm9ja2NoaXAsZ3JmIik7CisJaWYgKElT X0VSUihkcC0+Z3JmKSkgeworCQlkZXZfZXJyKGRldiwgImNkbi1kcCBuZWVkcyByb2NrY2hpcCxn cmYgcHJvcGVydHlcbiIpOworCQlyZXR1cm4gUFRSX0VSUihkcC0+Z3JmKTsKKwl9CisKKwlyZXMg PSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWRwLT5y ZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKGRwLT5y ZWdzKSkgeworCQlkZXZfZXJyKGRldiwgImlvcmVtYXAgcmVnIGZhaWxlZFxuIik7CisJCXJldHVy biBQVFJfRVJSKGRwLT5yZWdzKTsKKwl9CisKKwlkcC0+Y29yZV9jbGsgPSBkZXZtX2Nsa19nZXQo ZGV2LCAiY29yZS1jbGsiKTsKKwlpZiAoSVNfRVJSKGRwLT5jb3JlX2NsaykpIHsKKwkJZGV2X2Vy cihkZXYsICJjYW5ub3QgZ2V0IGNvcmVfY2xrX2RwXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoZHAt PmNvcmVfY2xrKTsKKwl9CisKKwlkcC0+cGNsayA9IGRldm1fY2xrX2dldChkZXYsICJwY2xrIik7 CisJaWYgKElTX0VSUihkcC0+cGNsaykpIHsKKwkJZGV2X2VycihkZXYsICJjYW5ub3QgZ2V0IHBj bGtcbiIpOworCQlyZXR1cm4gUFRSX0VSUihkcC0+cGNsayk7CisJfQorCisJZHAtPnNwZGlmX2Ns ayA9IGRldm1fY2xrX2dldChkZXYsICJzcGRpZiIpOworCWlmIChJU19FUlIoZHAtPnNwZGlmX2Ns aykpIHsKKwkJZGV2X2VycihkZXYsICJjYW5ub3QgZ2V0IHNwZGlmX2Nsa1xuIik7CisJCXJldHVy biBQVFJfRVJSKGRwLT5zcGRpZl9jbGspOworCX0KKworCWRwLT5ncmZfY2xrID0gZGV2bV9jbGtf Z2V0KGRldiwgImdyZiIpOworCWlmIChJU19FUlIoZHAtPmdyZl9jbGspKSB7CisJCWRldl9lcnIo ZGV2LCAiY2Fubm90IGdldCBncmYgY2xrXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoZHAtPmdyZl9j bGspOworCX0KKworCWRwLT5zcGRpZl9yc3QgPSBkZXZtX3Jlc2V0X2NvbnRyb2xfZ2V0KGRldiwg InNwZGlmIik7CisJaWYgKElTX0VSUihkcC0+c3BkaWZfcnN0KSkgeworCQlkZXZfZXJyKGRldiwg Im5vIHNwZGlmIHJlc2V0IGNvbnRyb2wgZm91bmRcbiIpOworCQlyZXR1cm4gUFRSX0VSUihkcC0+ c3BkaWZfcnN0KTsKKwl9CisKKwlkcC0+ZHBtc19tb2RlID0gRFJNX01PREVfRFBNU19PRkY7CisK KwlyZXQgPSBjZG5fZHBfY2xrX2VuYWJsZShkcCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiBy ZXQ7CisKKwljZG5fZHBfY2xvY2tfcmVzZXQoZHApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBpbnQgY2RuX2RwX2F1ZGlvX2h3X3BhcmFtcyhzdHJ1Y3QgZGV2aWNlICpkZXYsICB2b2lkICpk YXRhLAorCQkJCSAgc3RydWN0IGhkbWlfY29kZWNfZGFpZm10ICpkYWlmbXQsCisJCQkJICBzdHJ1 Y3QgaGRtaV9jb2RlY19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3QgY2RuX2RwX2RldmljZSAq ZHAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgYXVkaW9faW5mbyBhdWRpbyA9IHsK KwkJLnNhbXBsZV93aWR0aCA9IHBhcmFtcy0+c2FtcGxlX3dpZHRoLAorCQkuc2FtcGxlX3JhdGUg PSBwYXJhbXMtPnNhbXBsZV9yYXRlLAorCQkuY2hhbm5lbHMgPSBwYXJhbXMtPmNoYW5uZWxzLAor CX07CisJaW50IHJldDsKKworCWlmICghZHAtPmVuY29kZXIuY3J0YykKKwkJcmV0dXJuIC1FTk9E RVY7CisKKwlzd2l0Y2ggKGRhaWZtdC0+Zm10KSB7CisJY2FzZSBIRE1JX0kyUzoKKwkJYXVkaW8u Zm9ybWF0ID0gQUZNVF9JMlM7CisJCWJyZWFrOworCWNhc2UgSERNSV9TUERJRjoKKwkJYXVkaW8u Zm9ybWF0ID0gQUZNVF9TUERJRjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycihkZXYs ICIlczogSW52YWxpZCBmb3JtYXQgJWRcbiIsIF9fZnVuY19fLCBkYWlmbXQtPmZtdCk7CisJCXJl dHVybiAtRUlOVkFMOworCX0KKworCXJldCA9IGNkbl9kcF9hdWRpb19jb25maWcoZHAsICZhdWRp byk7CisJaWYgKCFyZXQpCisJCWRwLT5hdWRpb19pbmZvID0gYXVkaW87CisKKwlyZXR1cm4gcmV0 OworfQorCitzdGF0aWMgdm9pZCBjZG5fZHBfYXVkaW9fc2h1dGRvd24oc3RydWN0IGRldmljZSAq ZGV2LCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCA9IGRldl9nZXRf ZHJ2ZGF0YShkZXYpOworCWludCByZXQ7CisKKwlpZiAoIWRwLT5lbmNvZGVyLmNydGMpCisJCXJl dHVybjsKKworCXJldCA9IGNkbl9kcF9hdWRpb19zdG9wKGRwLCAmZHAtPmF1ZGlvX2luZm8pOwor CWlmICghcmV0KQorCQlkcC0+YXVkaW9faW5mby5mb3JtYXQgPSBBRk1UX1VOVVNFRDsKK30KKwor c3RhdGljIGludCBjZG5fZHBfYXVkaW9fZGlnaXRhbF9tdXRlKHN0cnVjdCBkZXZpY2UgKmRldiwg dm9pZCAqZGF0YSwKKwkJCQkgICAgIGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCBjZG5fZHBfZGV2 aWNlICpkcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKCFkcC0+ZW5jb2Rlci5jcnRj KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiBjZG5fZHBfYXVkaW9fbXV0ZShkcCwgZW5h YmxlKTsKK30KKworc3RhdGljIGludCBjZG5fZHBfYXVkaW9fZ2V0X2VsZChzdHJ1Y3QgZGV2aWNl ICpkZXYsIHZvaWQgKmRhdGEsCisJCQkJdTggKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3Qg Y2RuX2RwX2RldmljZSAqZHAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZHJtX21v ZGVfY29uZmlnICpjb25maWcgPSAmZHAtPmVuY29kZXIuZGV2LT5tb2RlX2NvbmZpZzsKKwlzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOworCWludCByZXQgPSAtRU5PREVWOworCisJbXV0 ZXhfbG9jaygmY29uZmlnLT5tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3Is ICZjb25maWctPmNvbm5lY3Rvcl9saXN0LCBoZWFkKSB7CisJCWlmICgmZHAtPmVuY29kZXIgPT0g Y29ubmVjdG9yLT5lbmNvZGVyKSB7CisJCQltZW1jcHkoYnVmLCBjb25uZWN0b3ItPmVsZCwKKwkJ CSAgICAgICBtaW4oc2l6ZW9mKGNvbm5lY3Rvci0+ZWxkKSwgbGVuKSk7CisJCQlyZXQgPSAwOwor CQl9CisJfQorCW11dGV4X3VubG9jaygmY29uZmlnLT5tdXRleCk7CisKKwlyZXR1cm4gcmV0Owor fQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGhkbWlfY29kZWNfb3BzIGF1ZGlvX2NvZGVjX29wcyA9 IHsKKwkuaHdfcGFyYW1zID0gY2RuX2RwX2F1ZGlvX2h3X3BhcmFtcywKKwkuYXVkaW9fc2h1dGRv d24gPSBjZG5fZHBfYXVkaW9fc2h1dGRvd24sCisJLmRpZ2l0YWxfbXV0ZSA9IGNkbl9kcF9hdWRp b19kaWdpdGFsX211dGUsCisJLmdldF9lbGQgPSBjZG5fZHBfYXVkaW9fZ2V0X2VsZCwKK307CisK K3N0YXRpYyBpbnQgY2RuX2RwX2F1ZGlvX2NvZGVjX2luaXQoc3RydWN0IGNkbl9kcF9kZXZpY2Ug KmRwLAorCQkJCSAgIHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaGRtaV9jb2RlY19w ZGF0YSBjb2RlY19kYXRhID0geworCQkuaTJzID0gMSwKKwkJLnNwZGlmID0gMSwKKwkJLm9wcyA9 ICZhdWRpb19jb2RlY19vcHMsCisJCS5tYXhfaTJzX2NoYW5uZWxzID0gOCwKKwl9OworCisJZHAt PmF1ZGlvX3BkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZGF0YSgKKwkJCSBkZXYsIEhE TUlfQ09ERUNfRFJWX05BTUUsIFBMQVRGT1JNX0RFVklEX0FVVE8sCisJCQkgJmNvZGVjX2RhdGEs IHNpemVvZihjb2RlY19kYXRhKSk7CisKKwlyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKGRwLT5hdWRp b19wZGV2KTsKK30KKworc3RhdGljIGludCBjZG5fZHBfZ2V0X2NhcF9sYW5lcyhzdHJ1Y3QgY2Ru X2RwX2RldmljZSAqZHAsCisJCQkJc3RydWN0IGV4dGNvbl9kZXYgKmVkZXYpCit7CisJYm9vbCBk ZnAsIGRwdHg7CisJdTggbGFuZXM7CisKKwlkZnAgPSBleHRjb25fZ2V0X3N0YXRlKGVkZXYsIEVY VENPTl9VU0JfSE9TVCk7CisJZHB0eCA9IGV4dGNvbl9nZXRfc3RhdGUoZWRldiwgRVhUQ09OX0RJ U1BfRFApOworCisJaWYgKGRmcCAmJiBkcHR4KQorCQlsYW5lcyA9IDI7CisJZWxzZSBpZiAoZHB0 eCkKKwkJbGFuZXMgPSA0OworCWVsc2UKKwkJbGFuZXMgPSAwOworCisJcmV0dXJuIGxhbmVzOwor fQorCitzdGF0aWMgaW50IGNkbl9kcF9wZF9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5i LAorCQkJICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHJpdikKK3sKKwlzdHJ1Y3QgY2Ru X2RwX3BvcnQgKnBvcnQ7CisKKwlwb3J0ID0gY29udGFpbmVyX29mKG5iLCBzdHJ1Y3QgY2RuX2Rw X3BvcnQsIGV2ZW50X25iKTsKKworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcG9ydC0+ZXZlbnRf d3EsIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNkbl9kcF9wZF9ldmVudF93 cShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGNkbl9kcF9wb3J0ICpwb3J0 ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjZG5fZHBfcG9ydCwKKwkJCQkJCWV2ZW50X3dx LndvcmspOworCXVuaW9uIGV4dGNvbl9wcm9wZXJ0eV92YWx1ZSBwcm9wZXJ0eTsKKwlzdHJ1Y3Qg Y2RuX2RwX2RldmljZSAqZHAgPSBwb3J0LT5kcDsKKwl1OCBuZXdfY2FwX2xhbmVzLCBzaW5rX2Nv dW50LCBpOworCWludCByZXQ7CisKKwluZXdfY2FwX2xhbmVzID0gY2RuX2RwX2dldF9jYXBfbGFu ZXMoZHAsIHBvcnQtPmV4dGNvbik7CisKKwlpZiAobmV3X2NhcF9sYW5lcyA9PSBwb3J0LT5jYXBf bGFuZXMpIHsKKwkJZGV2X2RiZyhkcC0+ZGV2LCAibGFuZXMgY291bnQgZG9lcyBub3QgY2hhbmdl OiAlZFxuIiwKKwkJCW5ld19jYXBfbGFuZXMpOworCisJCWlmICghbmV3X2NhcF9sYW5lcykKKwkJ CXJldHVybjsKKworCQkvKgorCQkgKiBSZWFkIHRoZSBzaW5rIGNvdW50IGZyb20gRFBDRCwgaWYg c2luayBjb3VudCBiZWNvbWUgMCwgdGhpcworCQkgKiBwaHkgY291bGQgYmUgcG93ZXIgb2ZmLgor CQkgKi8KKwkJcmV0ID0gY2RuX2RwX2RwY2RfcmVhZChkcCwgRFBfU0lOS19DT1VOVCwgJnNpbmtf Y291bnQsIDEpOworCQlpZiAocmV0IHx8IHNpbmtfY291bnQpCisJCQlyZXR1cm47CisKKwkJbmV3 X2NhcF9sYW5lcyA9IDA7CisJfQorCisJaWYgKCFuZXdfY2FwX2xhbmVzKSB7CisJCXJldCA9IHBo eV9wb3dlcl9vZmYocG9ydC0+cGh5KTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycihkcC0+ZGV2 LCAicGh5IHBvd2VyIG9mZiBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJCXJldHVybjsKKwkJfQorCQlw b3J0LT5waHlfc3RhdHVzID0gZmFsc2U7CisJCXBvcnQtPmNhcF9sYW5lcyA9IDA7CisJCWZvciAo aSA9IDA7IGkgPCBkcC0+cG9ydHM7IGkrKykgeworCQkJaWYgKGRwLT5wb3J0W2ldLT5waHlfc3Rh dHVzKQorCQkJCXJldHVybjsKKwkJfQorCisJCXJldCA9IGNkbl9kcF9ncmZfd3JpdGUoZHAsIEdS Rl9TT0NfQ09OMjYsCisJCQkJICAgICAgIERQVFhfSFBEX1NFTF9NQVNLIHwgRFBUWF9IUERfREVM KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybjsKKworCQlkcC0+aHBkX3N0YXR1cyA9IGNvbm5lY3Rv cl9zdGF0dXNfZGlzY29ubmVjdGVkOworCQlkcm1faGVscGVyX2hwZF9pcnFfZXZlbnQoZHAtPmRy bV9kZXYpOworCQljZG5fZHBfc2V0X2Zpcm13YXJlX2FjdGl2ZShkcCwgZmFsc2UpOworCQlyZXR1 cm47CisJfQorCisJLyogaWYgb3RoZXIgcGh5IGlzIHJ1bm5pbmcsIGRvIG5vdCB0b3VjaCB0aGUg aHBkX3N0YXR1cywgYW5kIHJldHVybiAqLworCWZvciAoaSA9IDA7IGkgPCBkcC0+cG9ydHM7IGkr KykgeworCQlpZiAoZHAtPnBvcnRbaV0tPnBoeV9zdGF0dXMpIHsKKwkJCWRldl93YXJuKGRwLT5k ZXYsICJidXN5LCBwaHlbJWRdIGlzIHJ1bm5pbmciLAorCQkJCSBkcC0+cG9ydFtpXS0+aWQpOwor CQkJcmV0dXJuOworCQl9CisJfQorCisJaWYgKCFkcC0+ZndfbG9hZGVkKSB7CisJCXJldCA9IHJl cXVlc3RfZmlybXdhcmUoJmRwLT5mdywgQ0ROX0RQX0ZJUk1XQVJFLCBkcC0+ZGV2KTsKKwkJaWYg KHJldCA9PSAtRU5PRU5UICYmIGRwLT5md193YWl0IDw9IE1BWF9GV19XQUlUX1NFQ1MpIHsKKwkJ CXVuc2lnbmVkIGxvbmcgdGltZSA9IG1zZWNzX3RvX2ppZmZpZXMoZHAtPmZ3X3dhaXQgKiBIWik7 CisKKwkJCS8qCisJCQkgKiBJZiBjYW4gbm90IGZpbmQgdGhlIGZpbGUsIHJldHJ5IHRvIGxvYWQg dGhlIGZpcm13YXJlCisJCQkgKiBpbiBzZXZlcmFsIHNlY29uZHMsIGlmIHN0aWxsIGZhaWxlZCBh ZnRlciAxIG1pbnV0ZSwKKwkJCSAqIGdpdmUgdXAuCisJCQkgKi8KKwkJCXNjaGVkdWxlX2RlbGF5 ZWRfd29yaygmcG9ydC0+ZXZlbnRfd3EsIHRpbWUpOworCQkJZHAtPmZ3X3dhaXQgKj0gMjsKKwkJ CXJldHVybjsKKwkJfSBlbHNlIGlmIChyZXQpIHsKKwkJCWRldl9lcnIoZHAtPmRldiwgImZhaWxl ZCB0byByZXF1ZXN0IGZpcm13YXJlOiAlZFxuIiwKKwkJCQlyZXQpOworCQkJcmV0dXJuOworCQl9 CisJfSBlbHNlIHsKKwkJY2RuX2RwX3NldF9maXJtd2FyZV9hY3RpdmUoZHAsIHRydWUpOworCX0K KworCXJldCA9IGNkbl9kcF9ncmZfd3JpdGUoZHAsIEdSRl9TT0NfQ09OMjYsCisJCQkgICAgICAg KHBvcnQtPmlkIDw8IFVQSFlfU0VMX0JJVCkgfCBVUEhZX1NFTF9NQVNLKTsKKwlpZiAocmV0KQor CQlnb3RvIGVycl9waHk7CisKKwlyZXQgPSBwaHlfcG93ZXJfb24ocG9ydC0+cGh5KTsKKwlpZiAo cmV0KSB7CisJCWRldl9lcnIoZHAtPmRldiwgInBoeSBwb3dlciBvbiBmYWlsZWQ6ICVkXG4iLCBy ZXQpOworCQlnb3RvIGVycl9waHk7CisJfQorCisJcG9ydC0+cGh5X3N0YXR1cyA9IHRydWU7CisK KwlpZiAoIWRwLT5md19sb2FkZWQpIHsKKwkJcmV0ID0gY2RuX2RwX2Zpcm13YXJlX2luaXQoZHAp OworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKGRwLT5kZXYsICJmaXJtd2FyZSBpbml0IGZhaWxl ZDogJWQiLCByZXQpOworCQkJZ290byBlcnJfZmlybXdhcmU7CisJCX0KKwkJcmVsZWFzZV9maXJt d2FyZShkcC0+ZncpOworCQlkcC0+ZndfbG9hZGVkID0gMTsKKwl9CisKKwlyZXQgPSBjZG5fZHBf Z3JmX3dyaXRlKGRwLCBHUkZfU09DX0NPTjI2LAorCQkJICAgICAgIERQVFhfSFBEX1NFTF9NQVNL IHwgRFBUWF9IUERfU0VMKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9maXJtd2FyZTsKKworCXJl dCA9IGNkbl9kcF9nZXRfaHBkX3N0YXR1cyhkcCk7CisJaWYgKHJldCA8PSAwKSB7CisJCWlmICgh cmV0KQorCQkJZGV2X2VycihkcC0+ZGV2LCAiaHBkIGRvZXMgbm90IGV4aXN0XG4iKTsKKwkJZ290 byBlcnJfZmlybXdhcmU7CisJfQorCisJcmV0ID0gZXh0Y29uX2dldF9wcm9wZXJ0eShwb3J0LT5l eHRjb24sIEVYVENPTl9ESVNQX0RQLAorCQkJCSAgRVhUQ09OX1BST1BfVVNCX1RZUEVDX1BPTEFS SVRZLCAmcHJvcGVydHkpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkcC0+ZGV2LCAiZ2V0IHBy b3BlcnR5IGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX2Zpcm13YXJlOworCX0KKworCXJldCA9IGNk bl9kcF9zZXRfaG9zdF9jYXAoZHAsIG5ld19jYXBfbGFuZXMsIHByb3BlcnR5LmludHZhbCk7CisJ aWYgKHJldCkgeworCQlkZXZfZXJyKGRwLT5kZXYsICJzZXQgaG9zdCBjYXBhYmlsaXRpZXMgZmFp bGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfZmlybXdhcmU7CisJfQorCisJLyoKKwkgKiBO YXRpdmUgcmVhZCB3aXRoIHJldHJ5IGZvciBsaW5rIHN0YXR1cyBhbmQgcmVjZWl2ZXIgY2FwYWJp bGl0eSByZWFkcworCSAqIGZvciBjYXNlcyB3aGVyZSB0aGUgc2luayBtYXkgc3RpbGwgbm90IGJl IHJlYWR5LgorCSAqCisJICogU2lua3MgYXJlICpzdXBwb3NlZCogdG8gY29tZSB1cCB3aXRoaW4g MW1zIGZyb20gYW4gb2ZmIHN0YXRlLCBidXQKKwkgKiBzb21lIERPQ0tzIG5lZWQgYWJvdXQgNSBz ZWNvbmRzIHRvIHBvd2VyIHVwLCBzbyByZWFkIHRoZSBkcGNkIGV2ZXJ5CisJICogMTAwbXMsIGlm IGNhbiBub3QgZ2V0IGEgZ29vZCBkcGNkIGluIDEwIHNlY29uZHMsIGdpdmUgdXAuCisJICovCisJ Zm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisJCXJldCA9IGNkbl9kcF9kcGNkX3JlYWQoZHAs IDB4MDAwLCBkcC0+ZHBjZCwKKwkJCQkgICAgICAgRFBfUkVDRUlWRVJfQ0FQX1NJWkUpOworCQlp ZiAoIXJldCkgeworCQkJZGV2X2RiZyhkcC0+ZGV2LCAiZ2V0IGRwY2Qgc3VjY2VzcyFcbiIpOwor CisJCQkvKgorCQkJICogQ2hlY2sgc2luayBjb3VudCBoZXJlLiBUaGVuIGdvdG8gcG93ZXIgb2Zm IHBoeSwKKwkJCSAqIGlmIHNpbmsgY291bnQgaXMgMC4KKwkJCSAqLworCQkJcmV0ID0gY2RuX2Rw X2RwY2RfcmVhZChkcCwgRFBfU0lOS19DT1VOVCwKKwkJCQkJICAgICAgICZzaW5rX2NvdW50LCAx KTsKKwkJCWlmIChyZXQpCisJCQkJY29udGludWU7CisKKwkJCXNpbmtfY291bnQgPSBEUF9HRVRf U0lOS19DT1VOVChzaW5rX2NvdW50KTsKKwkJCWlmICghc2lua19jb3VudCkKKwkJCQlnb3RvIGVy cl9maXJtd2FyZTsKKworCQkJcG9ydC0+Y2FwX2xhbmVzID0gbmV3X2NhcF9sYW5lczsKKwkJCWRw LT5ocGRfc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CisJCQlkcm1faGVscGVy X2hwZF9pcnFfZXZlbnQoZHAtPmRybV9kZXYpOworCQkJcmV0dXJuOworCQl9IGVsc2UgaWYgKCFl eHRjb25fZ2V0X3N0YXRlKHBvcnQtPmV4dGNvbiwgRVhUQ09OX0RJU1BfRFApKSB7CisJCQlicmVh azsKKwkJfQorCQltc2xlZXAoMTAwKTsKKwl9CisKKwlkZXZfZXJyKGRwLT5kZXYsICJnZXQgZHBj ZCBmYWlsZWQhXG4iKTsKKworZXJyX2Zpcm13YXJlOgorCXJldCA9IHBoeV9wb3dlcl9vZmYocG9y dC0+cGh5KTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKGRwLT5kZXYsICJwaHkgcG93ZXIgb2ZmIGZh aWxlZDogJWQiLCByZXQpOworCWVsc2UKKwkJcG9ydC0+cGh5X3N0YXR1cyA9IGZhbHNlOworCitl cnJfcGh5OgorCWlmIChkcC0+ZndfbG9hZGVkKQorCQljZG5fZHBfc2V0X2Zpcm13YXJlX2FjdGl2 ZShkcCwgZmFsc2UpOworCWVsc2UKKwkJcmVsZWFzZV9maXJtd2FyZShkcC0+ZncpOworfQorCitz dGF0aWMgaW50IGNkbl9kcF9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAq bWFzdGVyLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCA9IGRldl9n ZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKKwlzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOworCXN0cnVjdCBjZG5fZHBfcG9ydCAqcG9ydDsKKwlz dHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldiA9IGRhdGE7CisJaW50IHJldCwgaTsKKworCXJldCA9 IGNkbl9kcF9pbml0KGRwKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWRwLT5k cm1fZGV2ID0gZHJtX2RldjsKKwlkcC0+aHBkX3N0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfZGlz Y29ubmVjdGVkOworCWRwLT5md193YWl0ID0gMTsKKworCWVuY29kZXIgPSAmZHAtPmVuY29kZXI7 CisKKwllbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9IGRybV9vZl9maW5kX3Bvc3NpYmxlX2NydGNz KGRybV9kZXYsCisJCQkJCQkJICAgICBkZXYtPm9mX25vZGUpOworCURSTV9ERUJVR19LTVMoInBv c3NpYmxlX2NydGNzID0gMHgleFxuIiwgZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MpOworCisJcmV0 ID0gZHJtX2VuY29kZXJfaW5pdChkcm1fZGV2LCBlbmNvZGVyLCAmY2RuX2RwX2VuY29kZXJfZnVu Y3MsCisJCQkgICAgICAgRFJNX01PREVfRU5DT0RFUl9UTURTLCBOVUxMKTsKKwlpZiAocmV0KSB7 CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGluaXRpYWxpemUgZW5jb2RlciB3aXRoIGRybVxuIik7 CisJCXJldHVybiByZXQ7CisJfQorCisJZHJtX2VuY29kZXJfaGVscGVyX2FkZChlbmNvZGVyLCAm Y2RuX2RwX2VuY29kZXJfaGVscGVyX2Z1bmNzKTsKKworCWNvbm5lY3RvciA9ICZkcC0+Y29ubmVj dG9yOworCWNvbm5lY3Rvci0+cG9sbGVkID0gRFJNX0NPTk5FQ1RPUl9QT0xMX0hQRDsKKwljb25u ZWN0b3ItPmRwbXMgPSBEUk1fTU9ERV9EUE1TX09GRjsKKworCXJldCA9IGRybV9jb25uZWN0b3Jf aW5pdChkcm1fZGV2LCBjb25uZWN0b3IsCisJCQkJICZjZG5fZHBfYXRvbWljX2Nvbm5lY3Rvcl9m dW5jcywKKwkJCQkgRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0KTsKKwlpZiAocmV0KSB7 CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGluaXRpYWxpemUgY29ubmVjdG9yIHdpdGggZHJtXG4i KTsKKwkJZ290byBlcnJfZnJlZV9lbmNvZGVyOworCX0KKworCWRybV9jb25uZWN0b3JfaGVscGVy X2FkZChjb25uZWN0b3IsICZjZG5fZHBfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisKKwlyZXQg PSBkcm1fbW9kZV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIoY29ubmVjdG9yLCBlbmNvZGVyKTsK KwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGF0dGFjaCBjb25uZWN0b3IgYW5k IGVuY29kZXJcbiIpOworCQlnb3RvIGVycl9mcmVlX2Nvbm5lY3RvcjsKKwl9CisKKwljZG5fZHBf YXVkaW9fY29kZWNfaW5pdChkcCwgZGV2KTsKKworCWZvciAoaSA9IDA7IGkgPCBkcC0+cG9ydHM7 IGkrKykgeworCQlwb3J0ID0gZHAtPnBvcnRbaV07CisKKwkJcG9ydC0+ZXZlbnRfbmIubm90aWZp ZXJfY2FsbCA9IGNkbl9kcF9wZF9ldmVudDsKKwkJSU5JVF9ERUxBWUVEX1dPUksoJnBvcnQtPmV2 ZW50X3dxLCBjZG5fZHBfcGRfZXZlbnRfd3EpOworCQlyZXQgPSBleHRjb25fcmVnaXN0ZXJfbm90 aWZpZXIocG9ydC0+ZXh0Y29uLCBFWFRDT05fRElTUF9EUCwKKwkJCQkJICAgICAgICZwb3J0LT5l dmVudF9uYik7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoZGV2LCAicmVnaXN0ZXIgRVhUQ09O X0RJU1BfRFAgbm90aWZpZXIgZXJyXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlpZiAo ZXh0Y29uX2dldF9zdGF0ZShwb3J0LT5leHRjb24sIEVYVENPTl9ESVNQX0RQKSkKKwkJCXNjaGVk dWxlX2RlbGF5ZWRfd29yaygmcG9ydC0+ZXZlbnRfd3EsIDApOworCX0KKworCXJldHVybiAwOwor CitlcnJfZnJlZV9jb25uZWN0b3I6CisJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rvcik7 CitlcnJfZnJlZV9lbmNvZGVyOgorCWRybV9lbmNvZGVyX2NsZWFudXAoZW5jb2Rlcik7CisJcmV0 dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgY2RuX2RwX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpk ZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3Rlciwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgY2RuX2Rw X2RldmljZSAqZHAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIg KmVuY29kZXIgPSAmZHAtPmVuY29kZXI7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv ciA9ICZkcC0+Y29ubmVjdG9yOworCXN0cnVjdCBjZG5fZHBfcG9ydCAqcG9ydDsKKwlpbnQgaTsK KworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRwLT5hdWRpb19wZGV2KTsKKwljZG5fZHBf ZW5jb2Rlcl9kaXNhYmxlKGVuY29kZXIpOworCWVuY29kZXItPmZ1bmNzLT5kZXN0cm95KGVuY29k ZXIpOworCWNvbm5lY3Rvci0+ZnVuY3MtPmRlc3Ryb3koY29ubmVjdG9yKTsKKworCWZvciAoaSA9 IDA7IGkgPCBkcC0+cG9ydHM7IGkrKykgeworCQlwb3J0ID0gZHAtPnBvcnRbaV07CisJCWV4dGNv bl91bnJlZ2lzdGVyX25vdGlmaWVyKHBvcnQtPmV4dGNvbiwgRVhUQ09OX0RJU1BfRFAsCisJCQkJ CSAgICZwb3J0LT5ldmVudF9uYik7CisJfQorfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBv bmVudF9vcHMgY2RuX2RwX2NvbXBvbmVudF9vcHMgPSB7CisJLmJpbmQgPSBjZG5fZHBfYmluZCwK KwkudW5iaW5kID0gY2RuX2RwX3VuYmluZCwKK307CisKK3N0YXRpYyBpbnQgY2RuX2RwX3Byb2Jl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0g JnBkZXYtPmRldjsKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKKwlzdHJ1Y3Qg Y2RuX2RwX2RhdGEgKmRwX2RhdGE7CisJc3RydWN0IGNkbl9kcF9wb3J0ICpwb3J0OworCXN0cnVj dCBjZG5fZHBfZGV2aWNlICpkcDsKKwlzdHJ1Y3QgZXh0Y29uX2RldiAqZXh0Y29uOworCXN0cnVj dCBwaHkgKnBoeTsKKwlpbnQgaTsKKworCWRwID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpk cCksIEdGUF9LRVJORUwpOworCWlmICghZHApCisJCXJldHVybiAtRU5PTUVNOworCWRwLT5kZXYg PSBkZXY7CisKKwltYXRjaCA9IG9mX21hdGNoX25vZGUoY2RuX2RwX2R0X2lkcywgcGRldi0+ZGV2 Lm9mX25vZGUpOworCWRwX2RhdGEgPSAoc3RydWN0IGNkbl9kcF9kYXRhICopbWF0Y2gtPmRhdGE7 CisKKwlmb3IgKGkgPSAwOyBpIDwgZHBfZGF0YS0+bWF4X3BoeTsgaSsrKSB7CisJCWV4dGNvbiA9 IGV4dGNvbl9nZXRfZWRldl9ieV9waGFuZGxlKGRldiwgaSk7CisJCXBoeSA9IGRldm1fb2ZfcGh5 X2dldF9ieV9pbmRleChkZXYsIGRldi0+b2Zfbm9kZSwgaSk7CisKKwkJaWYgKFBUUl9FUlIoZXh0 Y29uKSA9PSAtRVBST0JFX0RFRkVSIHx8CisJCSAgICBQVFJfRVJSKHBoeSkgPT0gLUVQUk9CRV9E RUZFUikKKwkJCXJldHVybiAtRVBST0JFX0RFRkVSOworCisJCWlmIChJU19FUlIoZXh0Y29uKSB8 fCBJU19FUlIocGh5KSkKKwkJCWNvbnRpbnVlOworCisJCXBvcnQgPSBkZXZtX2t6YWxsb2MoZGV2 LCBzaXplb2YoKnBvcnQpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFkcCkKKwkJCXJldHVybiAtRU5P TUVNOworCisJCXBvcnQtPmV4dGNvbiA9IGV4dGNvbjsKKwkJcG9ydC0+cGh5ID0gcGh5OworCQlw b3J0LT5kcCA9IGRwOworCQlwb3J0LT5pZCA9IGk7CisJCWRwLT5wb3J0W2RwLT5wb3J0cysrXSA9 IHBvcnQ7CisJfQorCisJaWYgKCFkcC0+cG9ydHMpIHsKKwkJZGV2X2VycihkZXYsICJtaXNzaW5n IGV4dGNvbiBvciBwaHlcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkZXZfc2V0X2Ry dmRhdGEoZGV2LCBkcCk7CisKKwlyZXR1cm4gY29tcG9uZW50X2FkZChkZXYsICZjZG5fZHBfY29t cG9uZW50X29wcyk7Cit9CisKK3N0YXRpYyBpbnQgY2RuX2RwX3JlbW92ZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQoreworCWNvbXBvbmVudF9kZWwoJnBkZXYtPmRldiwgJmNkbl9kcF9j b21wb25lbnRfb3BzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3Jt X2RyaXZlciBjZG5fZHBfZHJpdmVyID0geworCS5wcm9iZSA9IGNkbl9kcF9wcm9iZSwKKwkucmVt b3ZlID0gY2RuX2RwX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkgICAubmFtZSA9ICJjZG4tZHAi LAorCQkgICAub3duZXIgPSBUSElTX01PRFVMRSwKKwkJICAgLm9mX21hdGNoX3RhYmxlID0gb2Zf bWF0Y2hfcHRyKGNkbl9kcF9kdF9pZHMpLAorCX0sCit9OworCittb2R1bGVfcGxhdGZvcm1fZHJp dmVyKGNkbl9kcF9kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJDaHJpcyBaaG9uZyA8enl3QHJv Y2stY2hpcHMuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJjZG4gRFAgRHJpdmVyIik7CitN T0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9j a2NoaXAvY2RuLWRwLWNvcmUuaCBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAtY29y ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjZjIzZGIKLS0tIC9kZXYv bnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRwLWNvcmUuaApAQCAtMCww ICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBDaHJpcyBaaG9uZyA8enl3QHJv Y2stY2hpcHMuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDE2IFJPQ0tDSElQLCBJbmMuCisgKgor ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQ0ROX0RQX0NPUkVfSAorI2RlZmluZSBfQ0ROX0RQ X0NPUkVfSAorCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNf aGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9kcF9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0v ZHJtX3BhbmVsLmg+CisjaW5jbHVkZSAicm9ja2NoaXBfZHJtX2Rydi5oIgorCisjZGVmaW5lIE1B WF9QSFkJCTIKKworZW51bSBhdWRpb19mb3JtYXQgeworCUFGTVRfSTJTID0gMCwKKwlBRk1UX1NQ RElGID0gMSwKKwlBRk1UX1VOVVNFRCwKK307CisKK3N0cnVjdCBhdWRpb19pbmZvIHsKKwllbnVt IGF1ZGlvX2Zvcm1hdCBmb3JtYXQ7CisJaW50IHNhbXBsZV9yYXRlOworCWludCBjaGFubmVsczsK KwlpbnQgc2FtcGxlX3dpZHRoOworfTsKKworZW51bSB2aWNfcHhsX2VuY29kaW5nX2Zvcm1hdCB7 CisJUFhMX1JHQiA9IDB4MSwKKwlZQ0JDUl80XzRfNCA9IDB4MiwKKwlZQ0JDUl80XzJfMiA9IDB4 NCwKKwlZQ0JDUl80XzJfMCA9IDB4OCwKKwlZX09OTFkgPSAweDEwLAorfTsKKworc3RydWN0IHZp ZGVvX2luZm8geworCWJvb2wgaF9zeW5jX3BvbGFyaXR5OworCWJvb2wgdl9zeW5jX3BvbGFyaXR5 OworCWJvb2wgaW50ZXJsYWNlZDsKKwlpbnQgY29sb3JfZGVwdGg7CisJZW51bSB2aWNfcHhsX2Vu Y29kaW5nX2Zvcm1hdCBjb2xvcl9mbXQ7Cit9OworCitzdHJ1Y3QgY2RuX2Zpcm13YXJlX2hlYWRl ciB7CisJdTMyIHNpemVfYnl0ZXM7IC8qIHNpemUgb2YgdGhlIGVudGlyZSBoZWFkZXIraW1hZ2Uo cykgaW4gYnl0ZXMgKi8KKwl1MzIgaGVhZGVyX3NpemU7IC8qIHNpemUgb2YganVzdCB0aGUgaGVh ZGVyIGluIGJ5dGVzICovCisJdTMyIGlyYW1fc2l6ZTsgLyogc2l6ZSBvZiBpcmFtICovCisJdTMy IGRyYW1fc2l6ZTsgLyogc2l6ZSBvZiBkcmFtICovCit9OworCitzdHJ1Y3QgY2RuX2RwX3BvcnQg eworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcDsKKwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZXZl bnRfbmI7CisJc3RydWN0IGRlbGF5ZWRfd29yayBldmVudF93cTsKKwlzdHJ1Y3QgZXh0Y29uX2Rl diAqZXh0Y29uOworCXN0cnVjdCBwaHkgKnBoeTsKKwl1OCBjYXBfbGFuZXM7CisJYm9vbCBwaHlf c3RhdHVzOworCXU4IGlkOworfTsKKworc3RydWN0IGNkbl9kcF9kZXZpY2UgeworCXN0cnVjdCBk ZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldjsKKwlzdHJ1Y3QgZHJtX2Nv bm5lY3RvciBjb25uZWN0b3I7CisJc3RydWN0IGRybV9lbmNvZGVyIGVuY29kZXI7CisJc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgbW9kZTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICphdWRpb19w ZGV2OworCisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsJLyogY2RuIGRwIGZpcm13YXJlICov CisJdW5zaWduZWQgaW50IGZ3X3ZlcnNpb247CS8qIGNkbiBmdyB2ZXJzaW9uICovCisJdTMyIGZ3 X3dhaXQ7CisJYm9vbCBmd19sb2FkZWQ7CisJYm9vbCBmd19hY3RpdmVkOworCXZvaWQgX19pb21l bSAqcmVnczsKKwlzdHJ1Y3QgcmVnbWFwICpncmY7CisJc3RydWN0IGNsayAqY29yZV9jbGs7CisJ c3RydWN0IGNsayAqcGNsazsKKwlzdHJ1Y3QgY2xrICpzcGRpZl9jbGs7CisJc3RydWN0IGNsayAq Z3JmX2NsazsKKwlzdHJ1Y3QgcmVzZXRfY29udHJvbCAqc3BkaWZfcnN0OworCXN0cnVjdCBhdWRp b19pbmZvIGF1ZGlvX2luZm87CisJc3RydWN0IHZpZGVvX2luZm8gdmlkZW9faW5mbzsKKwlzdHJ1 Y3QgZHJtX2RwX2xpbmsgbGluazsKKwlzdHJ1Y3QgY2RuX2RwX3BvcnQgKnBvcnRbTUFYX1BIWV07 CisJdTggcG9ydHM7CisKKwl1OCBkcGNkW0RQX1JFQ0VJVkVSX0NBUF9TSVpFXTsKKwllbnVtIGRy bV9jb25uZWN0b3Jfc3RhdHVzIGhwZF9zdGF0dXM7CisJaW50IGRwbXNfbW9kZTsKKwlib29sIHNp bmtfaGFzX2F1ZGlvOworfTsKKyNlbmRpZiAgLyogX0NETl9EUF9DT1JFX0ggKi8KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAtcmVnLmMgYi9kcml2ZXJzL2dwdS9k cm0vcm9ja2NoaXAvY2RuLWRwLXJlZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjJlYTcwMmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAv Y2RuLWRwLXJlZy5jCkBAIC0wLDAgKzEsOTU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSBGdXpo b3UgUm9ja2NoaXAgRWxlY3Ryb25pY3MgQ28uTHRkCisgKiBBdXRob3I6IENocmlzIFpob25nIDx6 eXdAcm9jay1jaGlwcy5jb20+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9u IDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAq IG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVy bXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xr Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4K KyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9sbC5oPgorI2luY2x1 ZGUgPGxpbnV4L3Jlc2V0Lmg+CisKKyNpbmNsdWRlICJjZG4tZHAtY29yZS5oIgorI2luY2x1ZGUg ImNkbi1kcC1yZWcuaCIKKworI2RlZmluZSBDRE5fRFBfU1BESUZfQ0xLCQkyMDAwMDAwMDAKKyNk ZWZpbmUgRldfQUxJVkVfVElNRU9VVF9VUwkJMTAwMDAwMAorI2RlZmluZSBNQUlMQk9YX1JFVFJZ X1VTCQkxMDAwCisjZGVmaW5lIE1BSUxCT1hfVElNRU9VVF9VUwkJNTAwMDAwMAorI2RlZmluZSBM SU5LX1RSQUlOSU5HX1JFVFJZX01TCQkyMAorI2RlZmluZSBMSU5LX1RSQUlOSU5HX1RJTUVPVVRf TVMJNTAwCisKK3ZvaWQgY2RuX2RwX3NldF9md19jbGsoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRw LCB1MzIgY2xrKQoreworCXdyaXRlbChjbGsgLyAxMDAwMDAwLCBkcC0+cmVncyArIFNXX0NMS19I KTsKK30KKwordm9pZCBjZG5fZHBfY2xvY2tfcmVzZXQoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRw KQoreworCXUzMiB2YWw7CisKKwl2YWwgPSBEUFRYX0ZSTVJfREFUQV9DTEtfUlNUTl9FTiB8CisJ ICAgICAgRFBUWF9GUk1SX0RBVEFfQ0xLX0VOIHwKKwkgICAgICBEUFRYX1BIWV9EQVRBX1JTVE5f RU4gfAorCSAgICAgIERQVFhfUEhZX0RBVEFfQ0xLX0VOIHwKKwkgICAgICBEUFRYX1BIWV9DSEFS X1JTVE5fRU4gfAorCSAgICAgIERQVFhfUEhZX0NIQVJfQ0xLX0VOIHwKKwkgICAgICBTT1VSQ0Vf QVVYX1NZU19DTEtfUlNUTl9FTiB8CisJICAgICAgU09VUkNFX0FVWF9TWVNfQ0xLX0VOIHwKKwkg ICAgICBEUFRYX1NZU19DTEtfUlNUTl9FTiB8CisJICAgICAgRFBUWF9TWVNfQ0xLX0VOIHwKKwkg ICAgICBDRkdfRFBUWF9WSUZfQ0xLX1JTVE5fRU4gfAorCSAgICAgIENGR19EUFRYX1ZJRl9DTEtf RU47CisJd3JpdGVsKHZhbCwgZHAtPnJlZ3MgKyBTT1VSQ0VfRFBUWF9DQVIpOworCisJdmFsID0g U09VUkNFX1BIWV9SU1ROX0VOIHwgU09VUkNFX1BIWV9DTEtfRU47CisJd3JpdGVsKHZhbCwgZHAt PnJlZ3MgKyBTT1VSQ0VfUEhZX0NBUik7CisKKwl2YWwgPSBTT1VSQ0VfUEtUX1NZU19SU1ROX0VO IHwKKwkgICAgICBTT1VSQ0VfUEtUX1NZU19DTEtfRU4gfAorCSAgICAgIFNPVVJDRV9QS1RfREFU QV9SU1ROX0VOIHwKKwkgICAgICBTT1VSQ0VfUEtUX0RBVEFfQ0xLX0VOOworCXdyaXRlbCh2YWws IGRwLT5yZWdzICsgU09VUkNFX1BLVF9DQVIpOworCisJdmFsID0gU1BESUZfQ0RSX0NMS19SU1RO X0VOIHwKKwkgICAgICBTUERJRl9DRFJfQ0xLX0VOIHwKKwkgICAgICBTT1VSQ0VfQUlGX1NZU19S U1ROX0VOIHwKKwkgICAgICBTT1VSQ0VfQUlGX1NZU19DTEtfRU4gfAorCSAgICAgIFNPVVJDRV9B SUZfQ0xLX1JTVE5fRU4gfAorCSAgICAgIFNPVVJDRV9BSUZfQ0xLX0VOOworCXdyaXRlbCh2YWws IGRwLT5yZWdzICsgU09VUkNFX0FJRl9DQVIpOworCisJdmFsID0gU09VUkNFX0NJUEhFUl9TWVNU RU1fQ0xLX1JTVE5fRU4gfAorCSAgICAgIFNPVVJDRV9DSVBIRVJfU1lTX0NMS19FTiB8CisJICAg ICAgU09VUkNFX0NJUEhFUl9DSEFSX0NMS19SU1ROX0VOIHwKKwkgICAgICBTT1VSQ0VfQ0lQSEVS X0NIQVJfQ0xLX0VOOworCXdyaXRlbCh2YWwsIGRwLT5yZWdzICsgU09VUkNFX0NJUEhFUl9DQVIp OworCisJdmFsID0gU09VUkNFX0NSWVBUT19TWVNfQ0xLX1JTVE5fRU4gfAorCSAgICAgIFNPVVJD RV9DUllQVE9fU1lTX0NMS19FTjsKKwl3cml0ZWwodmFsLCBkcC0+cmVncyArIFNPVVJDRV9DUllQ VE9fQ0FSKTsKKworCXZhbCA9IH4oTUFJTEJPWF9JTlRfTUFTS19CSVQgfCBQSUZfSU5UX01BU0tf QklUKSAmIEFMTF9JTlRfTUFTSzsKKwl3cml0ZWwodmFsLCBkcC0+cmVncyArIEFQQl9JTlRfTUFT Syk7Cit9CisKK3N0YXRpYyBpbnQgY2RuX2RwX21haWxib3hfcmVhZChzdHJ1Y3QgY2RuX2RwX2Rl dmljZSAqZHAsIGJvb2wgZm9yY2UpCit7CisJaW50IHZhbCwgcmV0OworCisJaWYgKCFkcC0+Zndf YWN0aXZlZCAmJiAhZm9yY2UpCisJCXJldHVybiAtRVBFUk07CisKKwlyZXQgPSByZWFkeF9wb2xs X3RpbWVvdXQocmVhZGwsIGRwLT5yZWdzICsgTUFJTEJPWF9FTVBUWV9BRERSLAorCQkJCSB2YWws ICF2YWwsIE1BSUxCT1hfUkVUUllfVVMsCisJCQkJIE1BSUxCT1hfVElNRU9VVF9VUyk7CisJaWYg KHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gcmVhZGwoZHAtPnJlZ3MgKyBNQUlM Qk9YMF9SRF9EQVRBKSAmIDB4ZmY7Cit9CisKK3N0YXRpYyBpbnQgY2RwX2RwX21haWxib3hfd3Jp dGUoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCB1OCB2YWwsIGJvb2wgZm9yY2UpCit7CisJaW50 IHJldCwgZnVsbDsKKworCWlmICghZHAtPmZ3X2FjdGl2ZWQgJiYgIWZvcmNlKQorCQlyZXR1cm4g LUVQRVJNOworCisJcmV0ID0gcmVhZHhfcG9sbF90aW1lb3V0KHJlYWRsLCBkcC0+cmVncyArIE1B SUxCT1hfRlVMTF9BRERSLAorCQkJCSBmdWxsLCAhZnVsbCwgTUFJTEJPWF9SRVRSWV9VUywKKwkJ CQkgTUFJTEJPWF9USU1FT1VUX1VTKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwor CXdyaXRlbCh2YWwsIGRwLT5yZWdzICsgTUFJTEJPWDBfV1JfREFUQSk7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCBjZG5fZHBfbWFpbGJveF92YWxpZGF0ZV9yZWNlaXZlKHN0cnVjdCBj ZG5fZHBfZGV2aWNlICpkcCwKKwkJCQkJICAgdTggbW9kdWxlX2lkLCB1OCBvcGNvZGUsCisJCQkJ CSAgIHU4IHJlcV9zaXplKQoreworCXUzMiBtYm94X3NpemUsIGk7CisJdTggaGVhZGVyWzRdOwor CWludCByZXQ7CisKKwkvKiByZWFkIHRoZSBoZWFkZXIgb2YgdGhlIG1lc3NhZ2UgKi8KKwlmb3Ig KGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCXJldCA9IGNkbl9kcF9tYWlsYm94X3JlYWQoZHAsIDAp OworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJaGVhZGVyW2ldID0gcmV0Owor CX0KKworCW1ib3hfc2l6ZSA9IChoZWFkZXJbMl0gPDwgOCkgfCBoZWFkZXJbM107CisKKwlpZiAo b3Bjb2RlICE9IGhlYWRlclswXSB8fCBtb2R1bGVfaWQgIT0gaGVhZGVyWzFdIHx8CisJICAgIHJl cV9zaXplICE9IG1ib3hfc2l6ZSkgeworCQkvKgorCQkgKiBJZiB0aGUgbWVzc2FnZSBpbiBtYWls Ym94IGlzIG5vdCB3aGF0IHdlIHdhbnQsIHdlIG5lZWQgdG8KKwkJICogY2xlYXIgdGhlIG1haWxi b3ggYnkgcmVhZC4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBtYm94X3NpemU7IGkrKykKKwkJ CWlmIChjZG5fZHBfbWFpbGJveF9yZWFkKGRwLCAwKSA8IDApCisJCQkJYnJlYWs7CisKKwkJcmV0 dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2RuX2RwX21h aWxib3hfcmVhZF9yZWNlaXZlKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwKKwkJCQkgICAgICAg dTggKmJ1ZmYsIHU4IGJ1ZmZfc2l6ZSkKK3sKKwl1MzIgaTsKKwlpbnQgcmV0OworCisJZm9yIChp ID0gMDsgaSA8IGJ1ZmZfc2l6ZTsgaSsrKSB7CisJCXJldCA9IGNkbl9kcF9tYWlsYm94X3JlYWQo ZHAsIDApOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJYnVmZltpXSA9IHJl dDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjZG5fZHBfbWFpbGJveF9zZW5k KHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgdTggbW9kdWxlX2lkLAorCQkJICAgICAgIHU4IG9w Y29kZSwgdTE2IHNpemUsIHU4ICptZXNzYWdlKQoreworCXU4IGhlYWRlcls0XTsKKwlpbnQgcmV0 LCBpOworCisJaGVhZGVyWzBdID0gb3Bjb2RlOworCWhlYWRlclsxXSA9IG1vZHVsZV9pZDsKKwlo ZWFkZXJbMl0gPSAoc2l6ZSA+PiA4KSAmIDB4ZmY7CisJaGVhZGVyWzNdID0gc2l6ZSAmIDB4ZmY7 CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCXJldCA9IGNkcF9kcF9tYWlsYm94X3dy aXRlKGRwLCBoZWFkZXJbaV0sIDApOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisK Kwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCXJldCA9IGNkcF9kcF9tYWlsYm94X3dy aXRlKGRwLCBtZXNzYWdlW2ldLCAwKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2RuX2RwX3JlZ193cml0ZShzdHJ1Y3QgY2Ru X2RwX2RldmljZSAqZHAsIHUxNiBhZGRyLCB1MzIgdmFsKQoreworCXU4IG1zZ1s2XTsKKworCW1z Z1swXSA9IChhZGRyID4+IDgpICYgMHhmZjsKKwltc2dbMV0gPSBhZGRyICYgMHhmZjsKKwltc2db Ml0gPSAodmFsID4+IDI0KSAmIDB4ZmY7CisJbXNnWzNdID0gKHZhbCA+PiAxNikgJiAweGZmOwor CW1zZ1s0XSA9ICh2YWwgPj4gOCkgJiAweGZmOworCW1zZ1s1XSA9IHZhbCAmIDB4ZmY7CisJcmV0 dXJuIGNkbl9kcF9tYWlsYm94X3NlbmQoZHAsIE1CX01PRFVMRV9JRF9EUF9UWCwgRFBUWF9XUklU RV9SRUdJU1RFUiwKKwkJCQkgICBzaXplb2YobXNnKSwgbXNnKTsKK30KKworc3RhdGljIGludCBj ZG5fZHBfcmVnX3dyaXRlX2JpdChzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIHUxNiBhZGRyLAor CQkJCXU4IHN0YXJ0X2JpdCwgdTggYml0c19ubywgdTMyIHZhbCkKK3sKKwl1OCBmaWVsZFs4XTsK KworCWZpZWxkWzBdID0gKGFkZHIgPj4gOCkgJiAweGZmOworCWZpZWxkWzFdID0gYWRkciAmIDB4 ZmY7CisJZmllbGRbMl0gPSBzdGFydF9iaXQ7CisJZmllbGRbM10gPSBiaXRzX25vOworCWZpZWxk WzRdID0gKHZhbCA+PiAyNCkgJiAweGZmOworCWZpZWxkWzVdID0gKHZhbCA+PiAxNikgJiAweGZm OworCWZpZWxkWzZdID0gKHZhbCA+PiA4KSAmIDB4ZmY7CisJZmllbGRbN10gPSB2YWwgJiAweGZm OworCisJcmV0dXJuIGNkbl9kcF9tYWlsYm94X3NlbmQoZHAsIE1CX01PRFVMRV9JRF9EUF9UWCwg RFBUWF9XUklURV9GSUVMRCwKKwkJCQkgICBzaXplb2YoZmllbGQpLCBmaWVsZCk7Cit9CisKK2lu dCBjZG5fZHBfZHBjZF9yZWFkKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgdTMyIGFkZHIsIHU4 ICpkYXRhLCB1MTYgbGVuKQoreworCXU4IG1zZ1s1XSwgcmVnWzVdOworCWludCByZXQ7CisKKwlt c2dbMF0gPSAobGVuID4+IDgpICYgMHhmZjsKKwltc2dbMV0gPSBsZW4gJiAweGZmOworCW1zZ1sy XSA9IChhZGRyID4+IDE2KSAmIDB4ZmY7CisJbXNnWzNdID0gKGFkZHIgPj4gOCkgJiAweGZmOwor CW1zZ1s0XSA9IGFkZHIgJiAweGZmOworCXJldCA9IGNkbl9kcF9tYWlsYm94X3NlbmQoZHAsIE1C X01PRFVMRV9JRF9EUF9UWCwgRFBUWF9SRUFEX0RQQ0QsCisJCQkJICBzaXplb2YobXNnKSwgbXNn KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9kcGNkX3JlYWQ7CisKKwlyZXQgPSBjZG5fZHBfbWFp bGJveF92YWxpZGF0ZV9yZWNlaXZlKGRwLCBNQl9NT0RVTEVfSURfRFBfVFgsCisJCQkJCSAgICAg IERQVFhfUkVBRF9EUENELAorCQkJCQkgICAgICBzaXplb2YocmVnKSArIGxlbik7CisJaWYgKHJl dCkKKwkJZ290byBlcnJfZHBjZF9yZWFkOworCisJcmV0ID0gY2RuX2RwX21haWxib3hfcmVhZF9y ZWNlaXZlKGRwLCByZWcsIHNpemVvZihyZWcpKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9kcGNk X3JlYWQ7CisKKwlyZXQgPSBjZG5fZHBfbWFpbGJveF9yZWFkX3JlY2VpdmUoZHAsIGRhdGEsIGxl bik7CisKK2Vycl9kcGNkX3JlYWQ6CisJcmV0dXJuIHJldDsKK30KKworaW50IGNkbl9kcF9kcGNk X3dyaXRlKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgdTMyIGFkZHIsIHU4IHZhbHVlKQorewor CXU4IG1zZ1s2XSwgcmVnWzVdOworCWludCByZXQ7CisKKwltc2dbMF0gPSAwOworCW1zZ1sxXSA9 IDE7CisJbXNnWzJdID0gKGFkZHIgPj4gMTYpICYgMHhmZjsKKwltc2dbM10gPSAoYWRkciA+PiA4 KSAmIDB4ZmY7CisJbXNnWzRdID0gYWRkciAmIDB4ZmY7CisJbXNnWzVdID0gdmFsdWU7CisJcmV0 ID0gY2RuX2RwX21haWxib3hfc2VuZChkcCwgTUJfTU9EVUxFX0lEX0RQX1RYLCBEUFRYX1dSSVRF X0RQQ0QsCisJCQkJICBzaXplb2YobXNnKSwgbXNnKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9k cGNkX3dyaXRlOworCisJcmV0ID0gY2RuX2RwX21haWxib3hfdmFsaWRhdGVfcmVjZWl2ZShkcCwg TUJfTU9EVUxFX0lEX0RQX1RYLAorCQkJCQkgICAgICBEUFRYX1dSSVRFX0RQQ0QsIHNpemVvZihy ZWcpKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9kcGNkX3dyaXRlOworCisJcmV0ID0gY2RuX2Rw X21haWxib3hfcmVhZF9yZWNlaXZlKGRwLCByZWcsIHNpemVvZihyZWcpKTsKKwlpZiAocmV0KQor CQlnb3RvIGVycl9kcGNkX3dyaXRlOworCisJaWYgKGFkZHIgIT0gKHJlZ1syXSA8PCAxNiB8IHJl Z1szXSA8PCA4IHwgcmVnWzRdKSkKKwkJcmV0ID0gLUVJTlZBTDsKKworZXJyX2RwY2Rfd3JpdGU6 CisJaWYgKHJldCkKKwkJZGV2X2VycihkcC0+ZGV2LCAiZHBjZCB3cml0ZSBmYWlsZWQ6ICVkXG4i LCByZXQpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBjZG5fZHBfbG9hZF9maXJtd2FyZShzdHJ1 Y3QgY2RuX2RwX2RldmljZSAqZHAsIGNvbnN0IHUzMiAqaV9tZW0sCisJCQkgdTMyIGlfc2l6ZSwg Y29uc3QgdTMyICpkX21lbSwgdTMyIGRfc2l6ZSkKK3sKKwl1MzIgcmVnOworCWludCBpLCByZXQ7 CisKKwkvKiByZXNldCB1Y3B1IGJlZm9yZSBsb2FkIGZpcm13YXJlKi8KKwl3cml0ZWwoQVBCX0lS QU1fUEFUSCB8IEFQQl9EUkFNX1BBVEggfCBBUEJfWFRfUkVTRVQsCisJICAgICAgIGRwLT5yZWdz ICsgQVBCX0NUUkwpOworCisJZm9yIChpID0gMDsgaSA8IGlfc2l6ZTsgaSArPSA0KQorCQl3cml0 ZWwoKmlfbWVtKyssIGRwLT5yZWdzICsgQUREUl9JTUVNICsgaSk7CisKKwlmb3IgKGkgPSAwOyBp IDwgZF9zaXplOyBpICs9IDQpCisJCXdyaXRlbCgqZF9tZW0rKywgZHAtPnJlZ3MgKyBBRERSX0RN RU0gKyBpKTsKKworCS8qIHVuLXJlc2V0IHVjcHUgKi8KKwl3cml0ZWwoMCwgZHAtPnJlZ3MgKyBB UEJfQ1RSTCk7CisKKwkvKiBjaGVjayB0aGUga2VlcCBhbGl2ZSByZWdpc3RlciB0byBtYWtlIHN1 cmUgZncgd29ya2luZyAqLworCXJldCA9IHJlYWR4X3BvbGxfdGltZW91dChyZWFkbCwgZHAtPnJl Z3MgKyBLRUVQX0FMSVZFLAorCQkJCSByZWcsIHJlZywgMjAwMCwgRldfQUxJVkVfVElNRU9VVF9V Uyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkcC0+ZGV2LCAiZmFpbGVkIHRvIGxvYWRl ZCB0aGUgRlcgcmVnID0gJXhcbiIsIHJlZyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJl ZyA9IHJlYWRsKGRwLT5yZWdzICsgVkVSX0wpICYgMHhmZjsKKwlkcC0+ZndfdmVyc2lvbiA9IHJl ZzsKKwlyZWcgPSByZWFkbChkcC0+cmVncyArIFZFUl9IKSAmIDB4ZmY7CisJZHAtPmZ3X3ZlcnNp b24gfD0gcmVnIDw8IDg7CisJcmVnID0gcmVhZGwoZHAtPnJlZ3MgKyBWRVJfTElCX0xfQUREUikg JiAweGZmOworCWRwLT5md192ZXJzaW9uIHw9IHJlZyA8PCAxNjsKKwlyZWcgPSByZWFkbChkcC0+ cmVncyArIFZFUl9MSUJfSF9BRERSKSAmIDB4ZmY7CisJZHAtPmZ3X3ZlcnNpb24gfD0gcmVnIDw8 IDI0OworCisJZGV2X2RiZyhkcC0+ZGV2LCAiZmlybXdhcmUgdmVyc2lvbjogJXhcbiIsIGRwLT5m d192ZXJzaW9uKTsKKworCXJldHVybiAwOworfQorCitpbnQgY2RuX2RwX3NldF9maXJtd2FyZV9h Y3RpdmUoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCBib29sIGVuYWJsZSkKK3sKKwl1OCBtc2db NV07CisJaW50IHJldCwgaTsKKworCW1zZ1swXSA9IEdFTkVSQUxfTUFJTl9DT05UUk9MOworCW1z Z1sxXSA9IE1CX01PRFVMRV9JRF9HRU5FUkFMOworCW1zZ1syXSA9IDA7CisJbXNnWzNdID0gMTsK Kwltc2dbNF0gPSBlbmFibGUgPyBGV19BQ1RJVkUgOiBGV19TVEFOREJZOworCisJZm9yIChpID0g MDsgaSA8IHNpemVvZihtc2cpOyBpKyspIHsKKwkJcmV0ID0gY2RwX2RwX21haWxib3hfd3JpdGUo ZHAsIG1zZ1tpXSwgMSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycl9zZXRfZmlybXdhcmVfYWN0 aXZlOworCX0KKworCS8qIHJlYWQgdGhlIGZpcm13YXJlIHN0YXRlICovCisJZm9yIChpID0gMDsg aSA8IHNpemVvZihtc2cpOyBpKyspICB7CisJCXJldCA9IGNkbl9kcF9tYWlsYm94X3JlYWQoZHAs IDEpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZXJyX3NldF9maXJtd2FyZV9hY3RpdmU7CisK KwkJbXNnW2ldID0gcmV0OworCX0KKworCWRwLT5md19hY3RpdmVkID0gKG1zZ1s0XSA9PSBGV19B Q1RJVkUpOworCXJldCA9IDA7CisKK2Vycl9zZXRfZmlybXdhcmVfYWN0aXZlOgorCWlmIChyZXQg PCAwKQorCQlkZXZfZXJyKGRwLT5kZXYsICJzZXQgZmlybXdhcmUgYWN0aXZlIGZhaWxlZFxuIik7 CisJcmV0dXJuIHJldDsKK30KKworaW50IGNkbl9kcF9zZXRfaG9zdF9jYXAoc3RydWN0IGNkbl9k cF9kZXZpY2UgKmRwLCB1OCBsYW5lcywgYm9vbCBmbGlwKQoreworCXU4IG1zZ1s4XTsKKwlpbnQg cmV0OworCisJbXNnWzBdID0gQ0ROX0RQX01BWF9MSU5LX1JBVEU7CisJbXNnWzFdID0gbGFuZXM7 CisJbXNnWzJdID0gVk9MVEFHRV9MRVZFTF8yOworCW1zZ1szXSA9IFBSRV9FTVBIQVNJU19MRVZF TF8zOworCW1zZ1s0XSA9IFBUUzEgfCBQVFMyIHwgUFRTMyB8IFBUUzQ7CisJbXNnWzVdID0gRkFT VF9MVF9OT1RfU1VQUE9SVDsKKwltc2dbNl0gPSBmbGlwID8gTEFORV9NQVBQSU5HX0ZMSVBQRUQg OiBMQU5FX01BUFBJTkdfTk9STUFMOworCW1zZ1s3XSA9IEVOSEFOQ0VEOworCisJcmV0ID0gY2Ru X2RwX21haWxib3hfc2VuZChkcCwgTUJfTU9EVUxFX0lEX0RQX1RYLAorCQkJCSAgRFBUWF9TRVRf SE9TVF9DQVBBQklMSVRJRVMsCisJCQkJICBzaXplb2YobXNnKSwgbXNnKTsKKwlpZiAocmV0KQor CQlnb3RvIGVycl9zZXRfaG9zdF9jYXA7CisKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBE UF9BVVhfU1dBUF9JTlZFUlNJT05fQ09OVFJPTCwKKwkJCSAgICAgICBBVVhfSE9TVF9JTlZFUlQp OworCitlcnJfc2V0X2hvc3RfY2FwOgorCWlmIChyZXQpCisJCWRldl9lcnIoZHAtPmRldiwgInNl dCBob3N0IGNhcCBmYWlsZWQ6ICVkXG4iLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBj ZG5fZHBfZXZlbnRfY29uZmlnKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCkKK3sKKwl1OCBtc2db NV07CisJaW50IHJldDsKKworCW1lbXNldChtc2csIDAsIHNpemVvZihtc2cpKTsKKworCW1zZ1sw XSA9IERQVFhfRVZFTlRfRU5BQkxFX0hQRCB8IERQVFhfRVZFTlRfRU5BQkxFX1RSQUlOSU5HOwor CisJcmV0ID0gY2RuX2RwX21haWxib3hfc2VuZChkcCwgTUJfTU9EVUxFX0lEX0RQX1RYLCBEUFRY X0VOQUJMRV9FVkVOVCwKKwkJCQkgIHNpemVvZihtc2cpLCBtc2cpOworCWlmIChyZXQpCisJCWRl dl9lcnIoZHAtPmRldiwgInNldCBldmVudCBjb25maWcgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwor CXJldHVybiByZXQ7Cit9CisKK3UzMiBjZG5fZHBfZ2V0X2V2ZW50KHN0cnVjdCBjZG5fZHBfZGV2 aWNlICpkcCkKK3sKKwlyZXR1cm4gcmVhZGwoZHAtPnJlZ3MgKyBTV19FVkVOVFMwKTsKK30KKwor aW50IGNkbl9kcF9nZXRfaHBkX3N0YXR1cyhzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApCit7CisJ dTggc3RhdHVzOworCWludCByZXQ7CisKKwlyZXQgPSBjZG5fZHBfbWFpbGJveF9zZW5kKGRwLCBN Ql9NT0RVTEVfSURfRFBfVFgsIERQVFhfSFBEX1NUQVRFLAorCQkJCSAgMCwgTlVMTCk7CisJaWYg KHJldCkKKwkJZ290byBlcnJfZ2V0X2hwZDsKKworCXJldCA9IGNkbl9kcF9tYWlsYm94X3ZhbGlk YXRlX3JlY2VpdmUoZHAsIE1CX01PRFVMRV9JRF9EUF9UWCwKKwkJCQkJICAgICAgRFBUWF9IUERf U1RBVEUsIHNpemVvZihzdGF0dXMpKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9nZXRfaHBkOwor CisJcmV0ID0gY2RuX2RwX21haWxib3hfcmVhZF9yZWNlaXZlKGRwLCAmc3RhdHVzLCBzaXplb2Yo c3RhdHVzKSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZ2V0X2hwZDsKKworCXJldHVybiBzdGF0 dXM7CisKK2Vycl9nZXRfaHBkOgorCWRldl9lcnIoZHAtPmRldiwgImdldCBocGQgc3RhdHVzIGZh aWxlZDogJWRcbiIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGNkbl9kcF9nZXRfZWRp ZF9ibG9jayh2b2lkICpkYXRhLCB1OCAqZWRpZCwKKwkJCSAgdW5zaWduZWQgaW50IGJsb2NrLCBz aXplX3QgbGVuZ3RoKQoreworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCA9IGRhdGE7CisJdTgg bXNnWzJdLCByZWdbMl07CisJaW50IHJldDsKKworCW1zZ1swXSA9IGJsb2NrIC8gMjsKKwltc2db MV0gPSBibG9jayAlIDI7CisKKwlyZXQgPSBjZG5fZHBfbWFpbGJveF9zZW5kKGRwLCBNQl9NT0RV TEVfSURfRFBfVFgsIERQVFhfR0VUX0VESUQsCisJCQkJICBzaXplb2YobXNnKSwgbXNnKTsKKwlp ZiAocmV0KQorCQlnb3RvIGVycl9nZXRfZWRpZDsKKworCXJldCA9IGNkbl9kcF9tYWlsYm94X3Zh bGlkYXRlX3JlY2VpdmUoZHAsIE1CX01PRFVMRV9JRF9EUF9UWCwKKwkJCQkJICAgICAgRFBUWF9H RVRfRURJRCwKKwkJCQkJICAgICAgc2l6ZW9mKHJlZykgKyBsZW5ndGgpOworCWlmIChyZXQpCisJ CWdvdG8gZXJyX2dldF9lZGlkOworCisJcmV0ID0gY2RuX2RwX21haWxib3hfcmVhZF9yZWNlaXZl KGRwLCByZWcsIHNpemVvZihyZWcpKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9nZXRfZWRpZDsK KworCXJldCA9IGNkbl9kcF9tYWlsYm94X3JlYWRfcmVjZWl2ZShkcCwgZWRpZCwgbGVuZ3RoKTsK KwlpZiAocmV0KQorCQlnb3RvIGVycl9nZXRfZWRpZDsKKworCWlmIChyZWdbMF0gIT0gbGVuZ3Ro IHx8IHJlZ1sxXSAhPSBibG9jayAvIDIpCisJCXJldCA9IC1FSU5WQUw7CisKK2Vycl9nZXRfZWRp ZDoKKwlpZiAocmV0KQorCQlkZXZfZXJyKGRwLT5kZXYsICJnZXQgYmxvY2tbJWRdIGVkaWQgZmFp bGVkOiAlZFxuIiwgYmxvY2ssIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGNkbl9kcF90 cmFpbmluZ19zdGFydChzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApCit7CisJdW5zaWduZWQgbG9u ZyB0aW1lb3V0OworCXU4IG1zZywgZXZlbnRbMl07CisJaW50IHJldDsKKworCW1zZyA9IExJTktf VFJBSU5JTkdfUlVOOworCisJLyogc3RhcnQgdHJhaW5pbmcgKi8KKwlyZXQgPSBjZG5fZHBfbWFp bGJveF9zZW5kKGRwLCBNQl9NT0RVTEVfSURfRFBfVFgsIERQVFhfVFJBSU5JTkdfQ09OVFJPTCwK KwkJCQkgIHNpemVvZihtc2cpLCAmbXNnKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl90cmFpbmlu Z19zdGFydDsKKworCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhMSU5LX1RS QUlOSU5HX1RJTUVPVVRfTVMpOworCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0 KSkgeworCQltc2xlZXAoTElOS19UUkFJTklOR19SRVRSWV9NUyk7CisJCXJldCA9IGNkbl9kcF9t YWlsYm94X3NlbmQoZHAsIE1CX01PRFVMRV9JRF9EUF9UWCwKKwkJCQkJICBEUFRYX1JFQURfRVZF TlQsIDAsIE5VTEwpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJfdHJhaW5pbmdfc3RhcnQ7CisK KwkJcmV0ID0gY2RuX2RwX21haWxib3hfdmFsaWRhdGVfcmVjZWl2ZShkcCwgTUJfTU9EVUxFX0lE X0RQX1RYLAorCQkJCQkJICAgICAgRFBUWF9SRUFEX0VWRU5ULAorCQkJCQkJICAgICAgc2l6ZW9m KGV2ZW50KSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycl90cmFpbmluZ19zdGFydDsKKworCQly ZXQgPSBjZG5fZHBfbWFpbGJveF9yZWFkX3JlY2VpdmUoZHAsIGV2ZW50LCBzaXplb2YoZXZlbnQp KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyX3RyYWluaW5nX3N0YXJ0OworCisJCWlmIChldmVu dFsxXSAmIEVRX1BIQVNFX0ZJTklTSEVEKQorCQkJcmV0dXJuIDA7CisJfQorCisJcmV0ID0gLUVU SU1FRE9VVDsKKworZXJyX3RyYWluaW5nX3N0YXJ0OgorCWRldl9lcnIoZHAtPmRldiwgInRyYWlu aW5nIGZhaWxlZDogJWRcbiIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGNkbl9kcF9n ZXRfdHJhaW5pbmdfc3RhdHVzKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCkKK3sKKwl1OCBzdGF0 dXNbMTBdOworCWludCByZXQ7CisKKwlyZXQgPSBjZG5fZHBfbWFpbGJveF9zZW5kKGRwLCBNQl9N T0RVTEVfSURfRFBfVFgsIERQVFhfUkVBRF9MSU5LX1NUQVQsCisJCQkJICAwLCBOVUxMKTsKKwlp ZiAocmV0KQorCQlnb3RvIGVycl9nZXRfdHJhaW5pbmdfc3RhdHVzOworCisJcmV0ID0gY2RuX2Rw X21haWxib3hfdmFsaWRhdGVfcmVjZWl2ZShkcCwgTUJfTU9EVUxFX0lEX0RQX1RYLAorCQkJCQkg ICAgICBEUFRYX1JFQURfTElOS19TVEFULAorCQkJCQkgICAgICBzaXplb2Yoc3RhdHVzKSk7CisJ aWYgKHJldCkKKwkJZ290byBlcnJfZ2V0X3RyYWluaW5nX3N0YXR1czsKKworCXJldCA9IGNkbl9k cF9tYWlsYm94X3JlYWRfcmVjZWl2ZShkcCwgc3RhdHVzLCBzaXplb2Yoc3RhdHVzKSk7CisJaWYg KHJldCkKKwkJZ290byBlcnJfZ2V0X3RyYWluaW5nX3N0YXR1czsKKworCWRwLT5saW5rLnJhdGUg PSBzdGF0dXNbMF07CisJZHAtPmxpbmsubnVtX2xhbmVzID0gc3RhdHVzWzFdOworCitlcnJfZ2V0 X3RyYWluaW5nX3N0YXR1czoKKwlpZiAocmV0KQorCQlkZXZfZXJyKGRwLT5kZXYsICJnZXQgdHJh aW5pbmcgc3RhdHVzIGZhaWxlZDogJWRcbiIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworaW50 IGNkbl9kcF9zZXRfdmlkZW9fc3RhdHVzKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgaW50IGFj dGl2ZSkKK3sKKwl1OCBtc2c7CisJaW50IHJldDsKKworCW1zZyA9ICEhYWN0aXZlOworCisJcmV0 ID0gY2RuX2RwX21haWxib3hfc2VuZChkcCwgTUJfTU9EVUxFX0lEX0RQX1RYLCBEUFRYX1NFVF9W SURFTywKKwkJCQkgIHNpemVvZihtc2cpLCAmbXNnKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKGRw LT5kZXYsICJzZXQgdmlkZW8gc3RhdHVzIGZhaWxlZDogJWRcbiIsIHJldCk7CisKKwlyZXR1cm4g cmV0OworfQorCitzdGF0aWMgaW50IGNkbl9kcF9nZXRfbXNhX21pc2Moc3RydWN0IHZpZGVvX2lu Zm8gKnZpZGVvLAorCQkJICAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQorewor CXUzMiBtc2FfbWlzYzsKKwl1OCB2YWxbMl07CisKKwlzd2l0Y2ggKHZpZGVvLT5jb2xvcl9mbXQp IHsKKwljYXNlIFBYTF9SR0I6CisJY2FzZSBZX09OTFk6CisJCXZhbFswXSA9IDA7CisJCWJyZWFr OworCS8qIHNldCBZVVYgZGVmYXVsdCBjb2xvciBzcGFjZSBjb252ZXJzaW9uIHRvIEJUNjAxICov CisJY2FzZSBZQ0JDUl80XzRfNDoKKwkJdmFsWzBdID0gNiArIEJUXzYwMSAqIDg7CisJCWJyZWFr OworCWNhc2UgWUNCQ1JfNF8yXzI6CisJCXZhbFswXSA9IDUgKyBCVF82MDEgKiA4OworCQlicmVh azsKKwljYXNlIFlDQkNSXzRfMl8wOgorCQl2YWxbMF0gPSA1OworCQlicmVhazsKKwl9OworCisJ c3dpdGNoICh2aWRlby0+Y29sb3JfZGVwdGgpIHsKKwljYXNlIDY6CisJCXZhbFsxXSA9IDA7CisJ CWJyZWFrOworCWNhc2UgODoKKwkJdmFsWzFdID0gMTsKKwkJYnJlYWs7CisJY2FzZSAxMDoKKwkJ dmFsWzFdID0gMjsKKwkJYnJlYWs7CisJY2FzZSAxMjoKKwkJdmFsWzFdID0gMzsKKwkJYnJlYWs7 CisJY2FzZSAxNjoKKwkJdmFsWzFdID0gNDsKKwkJYnJlYWs7CisJfTsKKworCW1zYV9taXNjID0g MiAqIHZhbFswXSArIDMyICogdmFsWzFdICsKKwkJICAgKCh2aWRlby0+Y29sb3JfZm10ID09IFlf T05MWSkgPyAoMSA8PCAxNCkgOiAwKTsKKworCXJldHVybiBtc2FfbWlzYzsKK30KKworaW50IGNk bl9kcF9jb25maWdfdmlkZW8oc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKQoreworCXN0cnVjdCB2 aWRlb19pbmZvICp2aWRlbyA9ICZkcC0+dmlkZW9faW5mbzsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSAqbW9kZSA9ICZkcC0+bW9kZTsKKwl1NjQgc3ltYm9sLCB0bXA7CisJdTMyIHZhbCwgbGlu a19yYXRlOworCXU4IGJpdF9wZXJfcGl4LCB0dV9zaXplX3JlZyA9IFRVX1NJWkU7CisJaW50IHJl dDsKKworCWJpdF9wZXJfcGl4ID0gKHZpZGVvLT5jb2xvcl9mbXQgPT0gWUNCQ1JfNF8yXzIpID8K KwkJICAgICAgKHZpZGVvLT5jb2xvcl9kZXB0aCAqIDIpIDogKHZpZGVvLT5jb2xvcl9kZXB0aCAq IDMpOworCisJbGlua19yYXRlID0gZHJtX2RwX2J3X2NvZGVfdG9fbGlua19yYXRlKGRwLT5saW5r LnJhdGUpIC8gMTAwMDsKKworCXZhbCA9IFZJRl9CWVBBU1NfSU5URVJMQUNFOworCXJldCA9IGNk bl9kcF9yZWdfd3JpdGUoZHAsIEJORF9IU1lOQzJWU1lOQywgdmFsKTsKKwlpZiAocmV0KQorCQln b3RvIGVycl9jb25maWdfdmlkZW87CisKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBIU1lO QzJWU1lOQ19QT0xfQ1RSTCwgMCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfY29uZmlnX3ZpZGVv OworCisJLyoKKwkgKiBnZXQgYSBiZXN0IHR1X3NpemUgYW5kIHZhbGlkIHN5bWJvbDoKKwkgKiAx LiBjaG9zZSBMY2xrIGZyZXEoMTYyTWh6LCAyNzBNaHosIDU0ME1oeiksIHNldCBUVSB0byAzMgor CSAqIDIuIGNhbGN1bGF0ZSBWUyh2YWxpZCBzeW1ib2wpID0gVFUgKiBQY2xrICogQnBwIC8gKExj bGsgKiBMYW5lcykKKwkgKiAzLiBpZiBWUyA+ICouODUgb3IgVlMgPCAqLjEgb3IgVlMgPCAyIG9y IFRVIDwgVlMgKyA0LCB0aGVuIHNldAorCSAqICAgIFRVICs9IDIgYW5kIHJlcGVhdCAybmQgc3Rl cC4KKwkgKi8KKwlkbyB7CisJCXR1X3NpemVfcmVnICs9IDI7CisJCXRtcCA9IHR1X3NpemVfcmVn ICogbW9kZS0+Y2xvY2sgKiBiaXRfcGVyX3BpeDsKKwkJdG1wIC89IGRwLT5saW5rLm51bV9sYW5l cyAqIGxpbmtfcmF0ZSAqIDg7CisJCXN5bWJvbCA9IHRtcCAvIDEwMDA7CisJfSB3aGlsZSAoKHN5 bWJvbCA8PSAxKSB8fCAodHVfc2l6ZV9yZWcgLSBzeW1ib2wgPCA0KSB8fAorCQkgKHRtcCAlIDEw MDAgPiA4NTApIHx8ICh0bXAgJSAxMDAwIDwgMTAwKSk7CisKKwl2YWwgPSBzeW1ib2wgKyAodHVf c2l6ZV9yZWcgPDwgOCk7CisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZShkcCwgRFBfRlJBTUVSX1RV LCB2YWwpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2NvbmZpZ192aWRlbzsKKworCS8qIHNldCB0 aGUgRklGTyBCdWZmZXIgc2l6ZSAqLworCXZhbCA9ICgobW9kZS0+Y2xvY2sgKiAoc3ltYm9sICsg MSkgLyAxMDAwKSArIGxpbmtfcmF0ZSk7CisJdmFsIC89IChkcC0+bGluay5udW1fbGFuZXMgKiBs aW5rX3JhdGUpOworCXZhbCA9IDggKiAoc3ltYm9sICsgMSkgLyBiaXRfcGVyX3BpeCAtIHZhbDsK Kwl2YWwgKz0gMjsKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBEUF9WQ19UQUJMRSgxNSks IHZhbCk7CisKKwlzd2l0Y2ggKHZpZGVvLT5jb2xvcl9kZXB0aCkgeworCWNhc2UgNjoKKwkJdmFs ID0gQkNTXzY7CisJCWJyZWFrOworCWNhc2UgODoKKwkJdmFsID0gQkNTXzg7CisJCWJyZWFrOwor CWNhc2UgMTA6CisJCXZhbCA9IEJDU18xMDsKKwkJYnJlYWs7CisJY2FzZSAxMjoKKwkJdmFsID0g QkNTXzEyOworCQlicmVhazsKKwljYXNlIDE2OgorCQl2YWwgPSBCQ1NfMTY7CisJCWJyZWFrOwor CX07CisKKwl2YWwgKz0gdmlkZW8tPmNvbG9yX2ZtdCA8PCA4OworCXJldCA9IGNkbl9kcF9yZWdf d3JpdGUoZHAsIERQX0ZSQU1FUl9QWExfUkVQUiwgdmFsKTsKKwlpZiAocmV0KQorCQlnb3RvIGVy cl9jb25maWdfdmlkZW87CisKKwl2YWwgPSB2aWRlby0+aF9zeW5jX3BvbGFyaXR5ID8gRFBfRlJB TUVSX1NQX0hTUCA6IDA7CisJdmFsIHw9IHZpZGVvLT52X3N5bmNfcG9sYXJpdHkgPyBEUF9GUkFN RVJfU1BfVlNQIDogMDsKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBEUF9GUkFNRVJfU1As IHZhbCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfY29uZmlnX3ZpZGVvOworCisJdmFsID0gKG1v ZGUtPmhzeW5jX3N0YXJ0IC0gbW9kZS0+aGRpc3BsYXkpIDw8IDE2OworCXZhbCB8PSBtb2RlLT5o dG90YWwgLSBtb2RlLT5oc3luY19lbmQ7CisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZShkcCwgRFBf RlJPTlRfQkFDS19QT1JDSCwgdmFsKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9jb25maWdfdmlk ZW87CisKKwl2YWwgPSBtb2RlLT5oZGlzcGxheSAqIGJpdF9wZXJfcGl4IC8gODsKKwlyZXQgPSBj ZG5fZHBfcmVnX3dyaXRlKGRwLCBEUF9CWVRFX0NPVU5ULCB2YWwpOworCWlmIChyZXQpCisJCWdv dG8gZXJyX2NvbmZpZ192aWRlbzsKKworCXZhbCA9IG1vZGUtPmh0b3RhbCB8ICgobW9kZS0+aHRv dGFsIC0gbW9kZS0+aHN5bmNfc3RhcnQpIDw8IDE2KTsKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRl KGRwLCBNU0FfSE9SSVpPTlRBTF8wLCB2YWwpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2NvbmZp Z192aWRlbzsKKworCXZhbCA9IG1vZGUtPmhzeW5jX2VuZCAtIG1vZGUtPmhzeW5jX3N0YXJ0Owor CXZhbCB8PSAobW9kZS0+aGRpc3BsYXkgPDwgMTYpIHwgKHZpZGVvLT5oX3N5bmNfcG9sYXJpdHkg PDwgMTUpOworCXJldCA9IGNkbl9kcF9yZWdfd3JpdGUoZHAsIE1TQV9IT1JJWk9OVEFMXzEsIHZh bCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfY29uZmlnX3ZpZGVvOworCisJdmFsID0gbW9kZS0+ dnRvdGFsOworCXZhbCB8PSAoKG1vZGUtPnZ0b3RhbCAtIG1vZGUtPnZzeW5jX3N0YXJ0KSA8PCAx Nik7CisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZShkcCwgTVNBX1ZFUlRJQ0FMXzAsIHZhbCk7CisJ aWYgKHJldCkKKwkJZ290byBlcnJfY29uZmlnX3ZpZGVvOworCisJdmFsID0gbW9kZS0+dnN5bmNf ZW5kIC0gbW9kZS0+dnN5bmNfc3RhcnQ7CisJdmFsIHw9IG1vZGUtPnZkaXNwbGF5IDw8IDE2IHwg KHZpZGVvLT52X3N5bmNfcG9sYXJpdHkgPDwgMTUpOworCXJldCA9IGNkbl9kcF9yZWdfd3JpdGUo ZHAsIE1TQV9WRVJUSUNBTF8xLCB2YWwpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2NvbmZpZ192 aWRlbzsKKworCXZhbCA9IGNkbl9kcF9nZXRfbXNhX21pc2ModmlkZW8sIG1vZGUpOworCXJldCA9 IGNkbl9kcF9yZWdfd3JpdGUoZHAsIE1TQV9NSVNDLCB2YWwpOworCWlmIChyZXQpCisJCWdvdG8g ZXJyX2NvbmZpZ192aWRlbzsKKworCXJldCA9IGNkbl9kcF9yZWdfd3JpdGUoZHAsIFNUUkVBTV9D T05GSUcsIDEpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2NvbmZpZ192aWRlbzsKKworCXZhbCA9 IG1vZGUtPmhzeW5jX2VuZCAtIG1vZGUtPmhzeW5jX3N0YXJ0OworCXZhbCB8PSAobW9kZS0+aGRp c3BsYXkgPDwgMTYpOworCXJldCA9IGNkbl9kcF9yZWdfd3JpdGUoZHAsIERQX0hPUklaT05UQUws IHZhbCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfY29uZmlnX3ZpZGVvOworCisJdmFsID0gbW9k ZS0+dnRvdGFsOworCXZhbCAtPSAobW9kZS0+dnRvdGFsIC0gbW9kZS0+dmRpc3BsYXkpOworCXZh bCB8PSAobW9kZS0+dnRvdGFsIC0gbW9kZS0+dnN5bmNfc3RhcnQpIDw8IDE2OworCXJldCA9IGNk bl9kcF9yZWdfd3JpdGUoZHAsIERQX1ZFUlRJQ0FMXzAsIHZhbCk7CisJaWYgKHJldCkKKwkJZ290 byBlcnJfY29uZmlnX3ZpZGVvOworCisJdmFsID0gbW9kZS0+dnRvdGFsOworCXJldCA9IGNkbl9k cF9yZWdfd3JpdGUoZHAsIERQX1ZFUlRJQ0FMXzEsIHZhbCk7CisJaWYgKHJldCkKKwkJZ290byBl cnJfY29uZmlnX3ZpZGVvOworCisJdmFsID0gIDA7CisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZV9i aXQoZHAsIERQX1ZCX0lELCAyLCAxLCB2YWwpOworCitlcnJfY29uZmlnX3ZpZGVvOgorCWlmIChy ZXQpCisJCWRldl9lcnIoZHAtPmRldiwgImNvbmZpZyB2aWRlbyBmYWlsZWQ6ICVkXG4iLCByZXQp OworCXJldHVybiByZXQ7Cit9CisKK2ludCBjZG5fZHBfYXVkaW9fc3RvcChzdHJ1Y3QgY2RuX2Rw X2RldmljZSAqZHAsIHN0cnVjdCBhdWRpb19pbmZvICphdWRpbykKK3sKKwl1MzIgdmFsOworCWlu dCByZXQ7CisKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBBVURJT19QQUNLX0NPTlRST0ws IDApOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkcC0+ZGV2LCAiYXVkaW8gc3RvcCBmYWlsZWQ6 ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXZhbCA9IFNQRElGX0FWR19TRUwg fCBTUERJRl9KSVRURVJfQllQQVNTOworCXZhbCB8PSBTUERJRl9GSUZPX01JRF9SQU5HRSgweGUw KTsKKwl2YWwgfD0gU1BESUZfSklUVEVSX1RIUlNIKDB4ZTApOworCXZhbCB8PSBTUERJRl9KSVRU RVJfQVZHX1dJTig3KTsKKwl3cml0ZWwodmFsLCBkcC0+cmVncyArIFNQRElGX0NUUkxfQUREUik7 CisKKwkvKiBjbGVhcm4gdGhlIGF1ZGlvIGNvbmZpZyBhbmQgcmVzZXQgKi8KKwl3cml0ZWwoMCwg ZHAtPnJlZ3MgKyBBVURJT19TUkNfQ05UTCk7CisJd3JpdGVsKDAsIGRwLT5yZWdzICsgQVVESU9f U1JDX0NORkcpOworCXdyaXRlbChBVURJT19TV19SU1QsIGRwLT5yZWdzICsgQVVESU9fU1JDX0NO VEwpOworCXdyaXRlbCgwLCBkcC0+cmVncyArIEFVRElPX1NSQ19DTlRMKTsKKworCS8qIHJlc2V0 IHNtcGwycGNrdCBjb21wb25lbnQgICovCisJd3JpdGVsKDAsIGRwLT5yZWdzICsgU01QTDJQS1Rf Q05UTCk7CisJd3JpdGVsKEFVRElPX1NXX1JTVCwgZHAtPnJlZ3MgKyBTTVBMMlBLVF9DTlRMKTsK Kwl3cml0ZWwoMCwgZHAtPnJlZ3MgKyBTTVBMMlBLVF9DTlRMKTsKKworCS8qIHJlc2V0IEZJRk8g Ki8KKwl3cml0ZWwoQVVESU9fU1dfUlNULCBkcC0+cmVncyArIEZJRk9fQ05UTCk7CisJd3JpdGVs KDAsIGRwLT5yZWdzICsgRklGT19DTlRMKTsKKworCWlmIChhdWRpby0+Zm9ybWF0ID09IEFGTVRf U1BESUYpCisJCWNsa19kaXNhYmxlX3VucHJlcGFyZShkcC0+c3BkaWZfY2xrKTsKKworCXJldHVy biAwOworfQorCitpbnQgY2RuX2RwX2F1ZGlvX211dGUoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRw LCBib29sIGVuYWJsZSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZV9i aXQoZHAsIERQX1ZCX0lELCA0LCAxLCBlbmFibGUpOworCWlmIChyZXQpCisJCWRldl9lcnIoZHAt PmRldiwgImF1ZGlvIG11dGUgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9 CisKK3N0YXRpYyB2b2lkIGNkbl9kcF9hdWRpb19jb25maWdfaTJzKHN0cnVjdCBjZG5fZHBfZGV2 aWNlICpkcCwKKwkJCQkgICAgc3RydWN0IGF1ZGlvX2luZm8gKmF1ZGlvKQoreworCWludCBzdWJf cGNrdF9udW0gPSAxLCBpMnNfcG9ydF9lbl92YWwgPSAweGYsIGk7CisJdTMyIHZhbDsKKworCWlm IChhdWRpby0+Y2hhbm5lbHMgPT0gMikgeworCQlpZiAoZHAtPmxpbmsubnVtX2xhbmVzID09IDEp CisJCQlzdWJfcGNrdF9udW0gPSAyOworCQllbHNlCisJCQlzdWJfcGNrdF9udW0gPSA0OworCisJ CWkyc19wb3J0X2VuX3ZhbCA9IDE7CisJfSBlbHNlIGlmIChhdWRpby0+Y2hhbm5lbHMgPT0gNCkg eworCQlpMnNfcG9ydF9lbl92YWwgPSAzOworCX0KKworCXdyaXRlbCgweDAsIGRwLT5yZWdzICsg U1BESUZfQ1RSTF9BRERSKTsKKworCXdyaXRlbChTWU5DX1dSX1RPX0NIX1pFUk8sIGRwLT5yZWdz ICsgRklGT19DTlRMKTsKKworCXZhbCA9IE1BWF9OVU1fQ0goYXVkaW8tPmNoYW5uZWxzKTsKKwl2 YWwgfD0gTlVNX09GX0kyU19QT1JUUyhhdWRpby0+Y2hhbm5lbHMpOworCXZhbCB8PSBBVURJT19U WVBFX0xQQ007CisJdmFsIHw9IENGR19TVUJfUENLVF9OVU0oc3ViX3Bja3RfbnVtKTsKKwl3cml0 ZWwodmFsLCBkcC0+cmVncyArIFNNUEwyUEtUX0NORkcpOworCisJaWYgKGF1ZGlvLT5zYW1wbGVf d2lkdGggPT0gMTYpCisJCXZhbCA9IDA7CisJZWxzZSBpZiAoYXVkaW8tPnNhbXBsZV93aWR0aCA9 PSAyNCkKKwkJdmFsID0gMSA8PCA5OworCWVsc2UKKwkJdmFsID0gMiA8PCA5OworCisJdmFsIHw9 IEFVRElPX0NIX05VTShhdWRpby0+Y2hhbm5lbHMpOworCXZhbCB8PSBJMlNfREVDX1BPUlRfRU4o aTJzX3BvcnRfZW5fdmFsKTsKKwl2YWwgfD0gVFJBTlNfU01QTF9XSURUSF8zMjsKKwl3cml0ZWwo dmFsLCBkcC0+cmVncyArIEFVRElPX1NSQ19DTkZHKTsKKworCWZvciAoaSA9IDA7IGkgPCAoYXVk aW8tPmNoYW5uZWxzICsgMSkgLyAyOyBpKyspIHsKKwkJaWYgKGF1ZGlvLT5zYW1wbGVfd2lkdGgg PT0gMTYpCisJCQl2YWwgPSAoMHgwOCA8PCA4KSB8ICgweDA4IDw8IDIwKTsKKwkJZWxzZSBpZiAo YXVkaW8tPnNhbXBsZV93aWR0aCA9PSAyNCkKKwkJCXZhbCA9ICgweDBiIDw8IDgpIHwgKDB4MGIg PDwgMjApOworCisJCXZhbCB8PSAoKDIgKiBpKSA8PCA0KSB8ICgoMiAqIGkgKyAxKSA8PCAxNik7 CisJCXdyaXRlbCh2YWwsIGRwLT5yZWdzICsgU1RUU19CSVRfQ0goaSkpOworCX0KKworCXN3aXRj aCAoYXVkaW8tPnNhbXBsZV9yYXRlKSB7CisJY2FzZSAzMjAwMDoKKwkJdmFsID0gU0FNUExJTkdf RlJFUSgzKSB8CisJCSAgICAgIE9SSUdJTkFMX1NBTVBfRlJFUSgweGMpOworCQlicmVhazsKKwlj YXNlIDQ0MTAwOgorCQl2YWwgPSBTQU1QTElOR19GUkVRKDApIHwKKwkJICAgICAgT1JJR0lOQUxf U0FNUF9GUkVRKDB4Zik7CisJCWJyZWFrOworCWNhc2UgNDgwMDA6CisJCXZhbCA9IFNBTVBMSU5H X0ZSRVEoMikgfAorCQkgICAgICBPUklHSU5BTF9TQU1QX0ZSRVEoMHhkKTsKKwkJYnJlYWs7CisJ Y2FzZSA4ODIwMDoKKwkJdmFsID0gU0FNUExJTkdfRlJFUSg4KSB8CisJCSAgICAgIE9SSUdJTkFM X1NBTVBfRlJFUSgweDcpOworCQlicmVhazsKKwljYXNlIDk2MDAwOgorCQl2YWwgPSBTQU1QTElO R19GUkVRKDB4YSkgfAorCQkgICAgICBPUklHSU5BTF9TQU1QX0ZSRVEoNSk7CisJCWJyZWFrOwor CWNhc2UgMTc2NDAwOgorCQl2YWwgPSBTQU1QTElOR19GUkVRKDB4YykgfAorCQkgICAgICBPUklH SU5BTF9TQU1QX0ZSRVEoMyk7CisJCWJyZWFrOworCWNhc2UgMTkyMDAwOgorCQl2YWwgPSBTQU1Q TElOR19GUkVRKDB4ZSkgfAorCQkgICAgICBPUklHSU5BTF9TQU1QX0ZSRVEoMSk7CisJCWJyZWFr OworCX0KKwl2YWwgfD0gNDsKKwl3cml0ZWwodmFsLCBkcC0+cmVncyArIENPTV9DSF9TVFRTX0JJ VFMpOworCisJd3JpdGVsKFNNUEwyUEtUX0VOLCBkcC0+cmVncyArIFNNUEwyUEtUX0NOVEwpOwor CXdyaXRlbChJMlNfREVDX1NUQVJULCBkcC0+cmVncyArIEFVRElPX1NSQ19DTlRMKTsKK30KKwor c3RhdGljIHZvaWQgY2RuX2RwX2F1ZGlvX2NvbmZpZ19zcGRpZihzdHJ1Y3QgY2RuX2RwX2Rldmlj ZSAqZHApCit7CisJdTMyIHZhbDsKKworCXZhbCA9IFNQRElGX0FWR19TRUwgfCBTUERJRl9KSVRU RVJfQllQQVNTOworCXZhbCB8PSBTUERJRl9GSUZPX01JRF9SQU5HRSgweGUwKTsKKwl2YWwgfD0g U1BESUZfSklUVEVSX1RIUlNIKDB4ZTApOworCXZhbCB8PSBTUERJRl9KSVRURVJfQVZHX1dJTig3 KTsKKwl3cml0ZWwodmFsLCBkcC0+cmVncyArIFNQRElGX0NUUkxfQUREUik7CisKKwl3cml0ZWwo U1lOQ19XUl9UT19DSF9aRVJPLCBkcC0+cmVncyArIEZJRk9fQ05UTCk7CisKKwl2YWwgPSBNQVhf TlVNX0NIKDIpIHwgQVVESU9fVFlQRV9MUENNIHwgQ0ZHX1NVQl9QQ0tUX05VTSg0KTsKKwl3cml0 ZWwodmFsLCBkcC0+cmVncyArIFNNUEwyUEtUX0NORkcpOworCXdyaXRlbChTTVBMMlBLVF9FTiwg ZHAtPnJlZ3MgKyBTTVBMMlBLVF9DTlRMKTsKKworCXZhbCA9IFNQRElGX0VOQUJMRSB8IFNQRElG X0FWR19TRUwgfCBTUERJRl9KSVRURVJfQllQQVNTOworCXZhbCB8PSBTUERJRl9GSUZPX01JRF9S QU5HRSgweGUwKTsKKwl2YWwgfD0gU1BESUZfSklUVEVSX1RIUlNIKDB4ZTApOworCXZhbCB8PSBT UERJRl9KSVRURVJfQVZHX1dJTig3KTsKKwl3cml0ZWwodmFsLCBkcC0+cmVncyArIFNQRElGX0NU UkxfQUREUik7CisKKwljbGtfcHJlcGFyZV9lbmFibGUoZHAtPnNwZGlmX2Nsayk7CisJY2xrX3Nl dF9yYXRlKGRwLT5zcGRpZl9jbGssIENETl9EUF9TUERJRl9DTEspOworfQorCitpbnQgY2RuX2Rw X2F1ZGlvX2NvbmZpZyhzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIHN0cnVjdCBhdWRpb19pbmZv ICphdWRpbykKK3sKKwlpbnQgcmV0OworCisJLyogcmVzZXQgdGhlIHNwZGlmIGNsayBiZWZvcmUg Y29uZmlnICovCisJaWYgKGF1ZGlvLT5mb3JtYXQgPT0gQUZNVF9TUERJRikgeworCQlyZXNldF9j b250cm9sX2Fzc2VydChkcC0+c3BkaWZfcnN0KTsKKwkJcmVzZXRfY29udHJvbF9kZWFzc2VydChk cC0+c3BkaWZfcnN0KTsKKwl9CisKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBDTV9MQU5F X0NUUkwsIExBTkVfUkVGX0NZQyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfYXVkaW9fY29uZmln OworCisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZShkcCwgQ01fQ1RSTCwgMCk7CisJaWYgKHJldCkK KwkJZ290byBlcnJfYXVkaW9fY29uZmlnOworCisJaWYgKGF1ZGlvLT5mb3JtYXQgPT0gQUZNVF9J MlMpCisJCWNkbl9kcF9hdWRpb19jb25maWdfaTJzKGRwLCBhdWRpbyk7CisJZWxzZQorCQljZG5f ZHBfYXVkaW9fY29uZmlnX3NwZGlmKGRwKTsKKworCXJldCA9IGNkbl9kcF9yZWdfd3JpdGUoZHAs IEFVRElPX1BBQ0tfQ09OVFJPTCwgQVVESU9fUEFDS19FTik7CisKK2Vycl9hdWRpb19jb25maWc6 CisJaWYgKHJldCkKKwkJZGV2X2VycihkcC0+ZGV2LCAiYXVkaW8gY29uZmlnIGZhaWxlZDogJWRc biIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9y b2NrY2hpcC9jZG4tZHAtcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRwLXJl Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhYzM2NzQKLS0tIC9kZXYv bnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRwLXJlZy5oCkBAIC0wLDAg KzEsNDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSBGdXpob3UgUm9ja2NoaXAgRWxlY3Ryb25p Y3MgQ28uTHRkCisgKiBBdXRob3I6IENocmlzIFpob25nIDx6eXdAcm9jay1jaGlwcy5jb20+Cisg KgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3Ry aWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9DRE5fRFBfUkVHX0gKKyNkZWZpbmUgX0NETl9EUF9S RUdfSAorCisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisKKyNkZWZpbmUgQUREUl9JTUVNCQkw eDEwMDAwCisjZGVmaW5lIEFERFJfRE1FTQkJMHgyMDAwMAorCisvKiBBUEIgQ0ZHIGFkZHIgKi8K KyNkZWZpbmUgQVBCX0NUUkwJCQkwCisjZGVmaW5lIFhUX0lOVF9DVFJMCQkJMHgwNAorI2RlZmlu ZSBNQUlMQk9YX0ZVTExfQUREUgkJMHgwOAorI2RlZmluZSBNQUlMQk9YX0VNUFRZX0FERFIJCTB4 MGMKKyNkZWZpbmUgTUFJTEJPWDBfV1JfREFUQQkJMHgxMAorI2RlZmluZSBNQUlMQk9YMF9SRF9E QVRBCQkweDE0CisjZGVmaW5lIEtFRVBfQUxJVkUJCQkweDE4CisjZGVmaW5lIFZFUl9MCQkJCTB4 MWMKKyNkZWZpbmUgVkVSX0gJCQkJMHgyMAorI2RlZmluZSBWRVJfTElCX0xfQUREUgkJCTB4MjQK KyNkZWZpbmUgVkVSX0xJQl9IX0FERFIJCQkweDI4CisjZGVmaW5lIFNXX0RFQlVHX0wJCQkweDJj CisjZGVmaW5lIFNXX0RFQlVHX0gJCQkweDMwCisjZGVmaW5lIE1BSUxCT1hfSU5UX01BU0sJCTB4 MzQKKyNkZWZpbmUgTUFJTEJPWF9JTlRfU1RBVFVTCQkweDM4CisjZGVmaW5lIFNXX0NMS19MCQkJ MHgzYworI2RlZmluZSBTV19DTEtfSAkJCTB4NDAKKyNkZWZpbmUgU1dfRVZFTlRTMAkJCTB4NDQK KyNkZWZpbmUgU1dfRVZFTlRTMQkJCTB4NDgKKyNkZWZpbmUgU1dfRVZFTlRTMgkJCTB4NGMKKyNk ZWZpbmUgU1dfRVZFTlRTMwkJCTB4NTAKKyNkZWZpbmUgWFRfT0NEX0NUUkwJCQkweDYwCisjZGVm aW5lIEFQQl9JTlRfTUFTSwkJCTB4NmMKKyNkZWZpbmUgQVBCX1NUQVRVU19NQVNLCQkJMHg3MAor CisvKiBhdWRpbyBkZWNvZGVyIGFkZHIgKi8KKyNkZWZpbmUgQVVESU9fU1JDX0NOVEwJCQkweDMw MDAwCisjZGVmaW5lIEFVRElPX1NSQ19DTkZHCQkJMHgzMDAwNAorI2RlZmluZSBDT01fQ0hfU1RU U19CSVRTCQkweDMwMDA4CisjZGVmaW5lIFNUVFNfQklUX0NIKHgpCQkJKDB4MzAwMGMgKyAoKHgp IDw8IDIpKQorI2RlZmluZSBTUERJRl9DVFJMX0FERFIJCQkweDMwMDRjCisjZGVmaW5lIFNQRElG X0NIMV9DU18zMTAwX0FERFIJCTB4MzAwNTAKKyNkZWZpbmUgU1BESUZfQ0gxX0NTXzYzMzJfQURE UgkJMHgzMDA1NAorI2RlZmluZSBTUERJRl9DSDFfQ1NfOTU2NF9BRERSCQkweDMwMDU4CisjZGVm aW5lIFNQRElGX0NIMV9DU18xMjc5Nl9BRERSCQkweDMwMDVjCisjZGVmaW5lIFNQRElGX0NIMV9D U18xNTkxMjhfQUREUgkweDMwMDYwCisjZGVmaW5lIFNQRElGX0NIMV9DU18xOTExNjBfQUREUgkw eDMwMDY0CisjZGVmaW5lIFNQRElGX0NIMl9DU18zMTAwX0FERFIJCTB4MzAwNjgKKyNkZWZpbmUg U1BESUZfQ0gyX0NTXzYzMzJfQUREUgkJMHgzMDA2YworI2RlZmluZSBTUERJRl9DSDJfQ1NfOTU2 NF9BRERSCQkweDMwMDcwCisjZGVmaW5lIFNQRElGX0NIMl9DU18xMjc5Nl9BRERSCQkweDMwMDc0 CisjZGVmaW5lIFNQRElGX0NIMl9DU18xNTkxMjhfQUREUgkweDMwMDc4CisjZGVmaW5lIFNQRElG X0NIMl9DU18xOTExNjBfQUREUgkweDMwMDdjCisjZGVmaW5lIFNNUEwyUEtUX0NOVEwJCQkweDMw MDgwCisjZGVmaW5lIFNNUEwyUEtUX0NORkcJCQkweDMwMDg0CisjZGVmaW5lIEZJRk9fQ05UTAkJ CTB4MzAwODgKKyNkZWZpbmUgRklGT19TVFRTCQkJMHgzMDA4YworCisvKiBzb3VyY2UgcGlmIGFk ZHIgKi8KKyNkZWZpbmUgU09VUkNFX1BJRl9XUl9BRERSCQkweDMwODAwCisjZGVmaW5lIFNPVVJD RV9QSUZfV1JfUkVRCQkweDMwODA0CisjZGVmaW5lIFNPVVJDRV9QSUZfUkRfQUREUgkJMHgzMDgw OAorI2RlZmluZSBTT1VSQ0VfUElGX1JEX1JFUQkJMHgzMDgwYworI2RlZmluZSBTT1VSQ0VfUElG X0RBVEFfV1IJCTB4MzA4MTAKKyNkZWZpbmUgU09VUkNFX1BJRl9EQVRBX1JECQkweDMwODE0Cisj ZGVmaW5lIFNPVVJDRV9QSUZfRklGTzFfRkxVU0gJCTB4MzA4MTgKKyNkZWZpbmUgU09VUkNFX1BJ Rl9GSUZPMl9GTFVTSAkJMHgzMDgxYworI2RlZmluZSBTT1VSQ0VfUElGX1NUQVRVUwkJMHgzMDgy MAorI2RlZmluZSBTT1VSQ0VfUElGX0lOVEVSUlVQVF9TT1VSQ0UJMHgzMDgyNAorI2RlZmluZSBT T1VSQ0VfUElGX0lOVEVSUlVQVF9NQVNLCTB4MzA4MjgKKyNkZWZpbmUgU09VUkNFX1BJRl9QS1Rf QUxMT0NfUkVHCTB4MzA4MmMKKyNkZWZpbmUgU09VUkNFX1BJRl9QS1RfQUxMT0NfV1JfRU4JMHgz MDgzMAorI2RlZmluZSBTT1VSQ0VfUElGX1NXX1JFU0VUCQkweDMwODM0CisKKy8qIGJlbGxvdyBy ZWdpc3RlcnMgbmVlZCBhY2Nlc3MgYnkgbWFpbGJveCAqLworLyogc291cmNlIGNhciBhZGRyICov CisjZGVmaW5lIFNPVVJDRV9IRFRYX0NBUgkJCTB4MDkwMAorI2RlZmluZSBTT1VSQ0VfRFBUWF9D QVIJCQkweDA5MDQKKyNkZWZpbmUgU09VUkNFX1BIWV9DQVIJCQkweDA5MDgKKyNkZWZpbmUgU09V UkNFX0NFQ19DQVIJCQkweDA5MGMKKyNkZWZpbmUgU09VUkNFX0NCVVNfQ0FSCQkJMHgwOTEwCisj ZGVmaW5lIFNPVVJDRV9QS1RfQ0FSCQkJMHgwOTE4CisjZGVmaW5lIFNPVVJDRV9BSUZfQ0FSCQkJ MHgwOTFjCisjZGVmaW5lIFNPVVJDRV9DSVBIRVJfQ0FSCQkweDA5MjAKKyNkZWZpbmUgU09VUkNF X0NSWVBUT19DQVIJCTB4MDkyNAorCisvKiBjbG9jayBtZXRlcnMgYWRkciAqLworI2RlZmluZSBD TV9DVFJMCQkJCTB4MGEwMAorI2RlZmluZSBDTV9JMlNfQ1RSTAkJCTB4MGEwNAorI2RlZmluZSBD TV9TUERJRl9DVFJMCQkJMHgwYTA4CisjZGVmaW5lIENNX1ZJRF9DVFJMCQkJMHgwYTBjCisjZGVm aW5lIENNX0xBTkVfQ1RSTAkJCTB4MGExMAorI2RlZmluZSBJMlNfTk1fU1RBQkxFCQkJMHgwYTE0 CisjZGVmaW5lIEkyU19OQ1RTX1NUQUJMRQkJCTB4MGExOAorI2RlZmluZSBTUERJRl9OTV9TVEFC TEUJCQkweDBhMWMKKyNkZWZpbmUgU1BESUZfTkNUU19TVEFCTEUJCTB4MGEyMAorI2RlZmluZSBO TVZJRF9NRUFTX1NUQUJMRQkJMHgwYTI0CisjZGVmaW5lIEkyU19NRUFTCQkJMHgwYTQwCisjZGVm aW5lIFNQRElGX01FQVMJCQkweDBhODAKKyNkZWZpbmUgTk1WSURfTUVBUwkJCTB4MGFjMAorCisv KiBzb3VyY2UgdmlmIGFkZHIgKi8KKyNkZWZpbmUgQk5EX0hTWU5DMlZTWU5DCQkJMHgwYjAwCisj ZGVmaW5lIEhTWU5DMlZTWU5DX0YxX0wxCQkweDBiMDQKKyNkZWZpbmUgSFNZTkMyVlNZTkNfRjJf TDEJCTB4MGIwOAorI2RlZmluZSBIU1lOQzJWU1lOQ19TVEFUVVMJCTB4MGIwYworI2RlZmluZSBI U1lOQzJWU1lOQ19QT0xfQ1RSTAkJMHgwYjEwCisKKy8qIGRwdHggcGh5IGFkZHIgKi8KKyNkZWZp bmUgRFBfVFhfUEhZX0NPTkZJR19SRUcJCTB4MjAwMAorI2RlZmluZSBEUF9UWF9QSFlfU1RBVFVT X1JFRwkJMHgyMDA0CisjZGVmaW5lIERQX1RYX1BIWV9TV19SRVNFVAkJMHgyMDA4CisjZGVmaW5l IERQX1RYX1BIWV9TQ1JBTUJMRVJfU0VFRAkweDIwMGMKKyNkZWZpbmUgRFBfVFhfUEhZX1RSQUlO SU5HXzAxXzA0CTB4MjAxMAorI2RlZmluZSBEUF9UWF9QSFlfVFJBSU5JTkdfMDVfMDgJMHgyMDE0 CisjZGVmaW5lIERQX1RYX1BIWV9UUkFJTklOR18wOV8xMAkweDIwMTgKKyNkZWZpbmUgVEVTVF9D T1IJCQkweDIzZmMKKworLyogZHB0eCBocGQgYWRkciAqLworI2RlZmluZSBIUERfSVJRX0RFVF9N SU5fVElNRVIJCTB4MjEwMAorI2RlZmluZSBIUERfSVJRX0RFVF9NQVhfVElNRVIJCTB4MjEwNAor I2RlZmluZSBIUERfVU5QTEdFRF9ERVRfTUlOX1RJTUVSCTB4MjEwOAorI2RlZmluZSBIUERfU1RB QkxFX1RJTUVSCQkweDIxMGMKKyNkZWZpbmUgSFBEX0ZJTFRFUl9USU1FUgkJMHgyMTEwCisjZGVm aW5lIEhQRF9FVkVOVF9NQVNLCQkJMHgyMTFjCisjZGVmaW5lIEhQRF9FVkVOVF9ERVQJCQkweDIx MjAKKworLyogZHB5eCBmcmFtZXIgYWRkciAqLworI2RlZmluZSBEUF9GUkFNRVJfR0xPQkFMX0NP TkZJRwkJMHgyMjAwCisjZGVmaW5lIERQX1NXX1JFU0VUCQkJMHgyMjA0CisjZGVmaW5lIERQX0ZS QU1FUl9UVQkJCTB4MjIwOAorI2RlZmluZSBEUF9GUkFNRVJfUFhMX1JFUFIJCTB4MjIwYworI2Rl ZmluZSBEUF9GUkFNRVJfU1AJCQkweDIyMTAKKyNkZWZpbmUgQVVESU9fUEFDS19DT05UUk9MCQkw eDIyMTQKKyNkZWZpbmUgRFBfVkNfVEFCTEUoeCkJCQkoMHgyMjE4ICsgKCh4KSA8PCAyKSkKKyNk ZWZpbmUgRFBfVkJfSUQJCQkweDIyNTgKKyNkZWZpbmUgRFBfTVRQSF9MVlBfQ09OVFJPTAkJMHgy MjVjCisjZGVmaW5lIERQX01UUEhfU1lNQk9MX1ZBTFVFUwkJMHgyMjYwCisjZGVmaW5lIERQX01U UEhfRUNGX0NPTlRST0wJCTB4MjI2NAorI2RlZmluZSBEUF9NVFBIX0FDVF9DT05UUk9MCQkweDIy NjgKKyNkZWZpbmUgRFBfTVRQSF9TVEFUVVMJCQkweDIyNmMKKyNkZWZpbmUgRFBfSU5URVJSVVBU X1NPVVJDRQkJMHgyMjcwCisjZGVmaW5lIERQX0lOVEVSUlVQVF9NQVNLCQkweDIyNzQKKyNkZWZp bmUgRFBfRlJPTlRfQkFDS19QT1JDSAkJMHgyMjc4CisjZGVmaW5lIERQX0JZVEVfQ09VTlQJCQkw eDIyN2MKKworLyogZHB0eCBzdHJlYW0gYWRkciAqLworI2RlZmluZSBNU0FfSE9SSVpPTlRBTF8w CQkweDIyODAKKyNkZWZpbmUgTVNBX0hPUklaT05UQUxfMQkJMHgyMjg0CisjZGVmaW5lIE1TQV9W RVJUSUNBTF8wCQkJMHgyMjg4CisjZGVmaW5lIE1TQV9WRVJUSUNBTF8xCQkJMHgyMjhjCisjZGVm aW5lIE1TQV9NSVNDCQkJMHgyMjkwCisjZGVmaW5lIFNUUkVBTV9DT05GSUcJCQkweDIyOTQKKyNk ZWZpbmUgQVVESU9fUEFDS19TVEFUVVMJCTB4MjI5OAorI2RlZmluZSBWSUZfU1RBVFVTCQkJMHgy MjljCisjZGVmaW5lIFBDS19TVFVGRl9TVEFUVVNfMAkJMHgyMmEwCisjZGVmaW5lIFBDS19TVFVG Rl9TVEFUVVNfMQkJMHgyMmE0CisjZGVmaW5lIElORk9fUEFDS19TVEFUVVMJCTB4MjJhOAorI2Rl ZmluZSBSQVRFX0dPVkVSTk9SX1NUQVRVUwkJMHgyMmFjCisjZGVmaW5lIERQX0hPUklaT05UQUwJ CQkweDIyYjAKKyNkZWZpbmUgRFBfVkVSVElDQUxfMAkJCTB4MjJiNAorI2RlZmluZSBEUF9WRVJU SUNBTF8xCQkJMHgyMmI4CisjZGVmaW5lIERQX0JMT0NLX1NEUAkJCTB4MjJiYworCisvKiBkcHR4 IGdsYmwgYWRkciAqLworI2RlZmluZSBEUFRYX0xBTkVfRU4JCQkweDIzMDAKKyNkZWZpbmUgRFBU WF9FTkhOQ0QJCQkweDIzMDQKKyNkZWZpbmUgRFBUWF9JTlRfTUFTSwkJCTB4MjMwOAorI2RlZmlu ZSBEUFRYX0lOVF9TVEFUVVMJCQkweDIzMGMKKworLyogZHAgYXV4IGFkZHIgKi8KKyNkZWZpbmUg RFBfQVVYX0hPU1RfQ09OVFJPTAkJMHgyODAwCisjZGVmaW5lIERQX0FVWF9JTlRFUlJVUFRfU09V UkNFCQkweDI4MDQKKyNkZWZpbmUgRFBfQVVYX0lOVEVSUlVQVF9NQVNLCQkweDI4MDgKKyNkZWZp bmUgRFBfQVVYX1NXQVBfSU5WRVJTSU9OX0NPTlRST0wJMHgyODBjCisjZGVmaW5lIERQX0FVWF9T RU5EX05BQ0tfVFJBTlNBQ1RJT04JMHgyODEwCisjZGVmaW5lIERQX0FVWF9DTEVBUl9SWAkJCTB4 MjgxNAorI2RlZmluZSBEUF9BVVhfQ0xFQVJfVFgJCQkweDI4MTgKKyNkZWZpbmUgRFBfQVVYX1RJ TUVSX1NUT1AJCTB4MjgxYworI2RlZmluZSBEUF9BVVhfVElNRVJfQ0xFQVIJCTB4MjgyMAorI2Rl ZmluZSBEUF9BVVhfUkVTRVRfU1cJCQkweDI4MjQKKyNkZWZpbmUgRFBfQVVYX0RJVklERV8yTQkJ MHgyODI4CisjZGVmaW5lIERQX0FVWF9UWF9QUkVBQ0hBUkdFX0xFTkdUSAkweDI4MmMKKyNkZWZp bmUgRFBfQVVYX0ZSRVFVRU5DWV8xTV9NQVgJCTB4MjgzMAorI2RlZmluZSBEUF9BVVhfRlJFUVVF TkNZXzFNX01JTgkJMHgyODM0CisjZGVmaW5lIERQX0FVWF9SWF9QUkVfTUlOCQkweDI4MzgKKyNk ZWZpbmUgRFBfQVVYX1JYX1BSRV9NQVgJCTB4MjgzYworI2RlZmluZSBEUF9BVVhfVElNRVJfUFJF U0VUCQkweDI4NDAKKyNkZWZpbmUgRFBfQVVYX05BQ0tfRk9STUFUCQkweDI4NDQKKyNkZWZpbmUg RFBfQVVYX1RYX0RBVEEJCQkweDI4NDgKKyNkZWZpbmUgRFBfQVVYX1JYX0RBVEEJCQkweDI4NGMK KyNkZWZpbmUgRFBfQVVYX1RYX1NUQVRVUwkJMHgyODUwCisjZGVmaW5lIERQX0FVWF9SWF9TVEFU VVMJCTB4Mjg1NAorI2RlZmluZSBEUF9BVVhfUlhfQ1lDTEVfQ09VTlRFUgkJMHgyODU4CisjZGVm aW5lIERQX0FVWF9NQUlOX1NUQVRFUwkJMHgyODVjCisjZGVmaW5lIERQX0FVWF9NQUlOX1RJTUVS CQkweDI4NjAKKyNkZWZpbmUgRFBfQVVYX0FGRV9PVVQJCQkweDI4NjQKKworLyogY3J5cHRvIGFk ZHIgKi8KKyNkZWZpbmUgQ1JZUFRPX0hEQ1BfUkVWSVNJT04JCTB4NTgwMAorI2RlZmluZSBIRENQ X0NSWVBUT19DT05GSUcJCTB4NTgwNAorI2RlZmluZSBDUllQVE9fSU5URVJSVVBUX1NPVVJDRQkJ MHg1ODA4CisjZGVmaW5lIENSWVBUT19JTlRFUlJVUFRfTUFTSwkJMHg1ODBjCisjZGVmaW5lIENS WVBUTzIyX0NPTkZJRwkJCTB4NTgxOAorI2RlZmluZSBDUllQVE8yMl9TVEFUVVMJCQkweDU4MWMK KyNkZWZpbmUgU0hBXzI1Nl9EQVRBX0lOCQkJMHg1ODNjCisjZGVmaW5lIFNIQV8yNTZfREFUQV9P VVRfKHgpCQkoMHg1ODUwICsgKCh4KSA8PCAyKSkKKyNkZWZpbmUgQUVTXzMyX0tFWV8oeCkJCQko MHg1ODcwICsgKCh4KSA8PCAyKSkKKyNkZWZpbmUgQUVTXzMyX0RBVEFfSU4JCQkweDU4ODAKKyNk ZWZpbmUgQUVTXzMyX0RBVEFfT1VUXyh4KQkJKDB4NTg4NCArICgoeCkgPDwgMikpCisjZGVmaW5l IENSWVBUTzE0X0NPTkZJRwkJCTB4NThhMAorI2RlZmluZSBDUllQVE8xNF9TVEFUVVMJCQkweDU4 YTQKKyNkZWZpbmUgQ1JZUFRPMTRfUFJOTV9PVVQJCTB4NThhOAorI2RlZmluZSBDUllQVE8xNF9L TV8wCQkJMHg1OGFjCisjZGVmaW5lIENSWVBUTzE0X0tNXzEJCQkweDU4YjAKKyNkZWZpbmUgQ1JZ UFRPMTRfQU5fMAkJCTB4NThiNAorI2RlZmluZSBDUllQVE8xNF9BTl8xCQkJMHg1OGI4CisjZGVm aW5lIENSWVBUTzE0X1lPVVJfS1NWXzAJCTB4NThiYworI2RlZmluZSBDUllQVE8xNF9ZT1VSX0tT Vl8xCQkweDU4YzAKKyNkZWZpbmUgQ1JZUFRPMTRfTUlfMAkJCTB4NThjNAorI2RlZmluZSBDUllQ VE8xNF9NSV8xCQkJMHg1OGM4CisjZGVmaW5lIENSWVBUTzE0X1RJXzAJCQkweDU4Y2MKKyNkZWZp bmUgQ1JZUFRPMTRfS0lfMAkJCTB4NThkMAorI2RlZmluZSBDUllQVE8xNF9LSV8xCQkJMHg1OGQ0 CisjZGVmaW5lIENSWVBUTzE0X0JMT0NLU19OVU0JCTB4NThkOAorI2RlZmluZSBDUllQVE8xNF9L RVlfTUVNX0RBVEFfMAkJMHg1OGRjCisjZGVmaW5lIENSWVBUTzE0X0tFWV9NRU1fREFUQV8xCQkw eDU4ZTAKKyNkZWZpbmUgQ1JZUFRPMTRfU0hBMV9NU0dfREFUQQkJMHg1OGU0CisjZGVmaW5lIENS WVBUTzE0X1NIQTFfVl9WQUxVRV8oeCkJKDB4NThlOCArICgoeCkgPDwgMikpCisjZGVmaW5lIFRS TkdfQ1RSTAkJCTB4NThmYworI2RlZmluZSBUUk5HX0RBVEFfUkRZCQkJMHg1OTAwCisjZGVmaW5l IFRSTkdfREFUQQkJCTB4NTkwNAorCisvKiBjaXBoZXIgYWRkciAqLworI2RlZmluZSBIRENQX1JF VklTSU9OCQkJMHg2MDAwMAorI2RlZmluZSBJTlRFUlJVUFRfU09VUkNFCQkweDYwMDA0CisjZGVm aW5lIElOVEVSUlVQVF9NQVNLCQkJMHg2MDAwOAorI2RlZmluZSBIRENQX0NJUEhFUl9DT05GSUcJ CTB4NjAwMGMKKyNkZWZpbmUgQUVTXzEyOF9LRVlfMAkJCTB4NjAwMTAKKyNkZWZpbmUgQUVTXzEy OF9LRVlfMQkJCTB4NjAwMTQKKyNkZWZpbmUgQUVTXzEyOF9LRVlfMgkJCTB4NjAwMTgKKyNkZWZp bmUgQUVTXzEyOF9LRVlfMwkJCTB4NjAwMWMKKyNkZWZpbmUgQUVTXzEyOF9SQU5ET01fMAkJMHg2 MDAyMAorI2RlZmluZSBBRVNfMTI4X1JBTkRPTV8xCQkweDYwMDI0CisjZGVmaW5lIENJUEhFUjE0 X0tNXzAJCQkweDYwMDI4CisjZGVmaW5lIENJUEhFUjE0X0tNXzEJCQkweDYwMDJjCisjZGVmaW5l IENJUEhFUjE0X1NUQVRVUwkJCTB4NjAwMzAKKyNkZWZpbmUgQ0lQSEVSMTRfUklfUEpfU1RBVFVT CQkweDYwMDM0CisjZGVmaW5lIENJUEhFUl9NT0RFCQkJMHg2MDAzOAorI2RlZmluZSBDSVBIRVIx NF9BTl8wCQkJMHg2MDAzYworI2RlZmluZSBDSVBIRVIxNF9BTl8xCQkJMHg2MDA0MAorI2RlZmlu ZSBDSVBIRVIyMl9BVVRICQkJMHg2MDA0NAorI2RlZmluZSBDSVBIRVIxNF9SMF9EUF9TVEFUVVMJ CTB4NjAwNDgKKyNkZWZpbmUgQ0lQSEVSMTRfQk9PVFNUUkFQCQkweDYwMDRjCisKKyNkZWZpbmUg RFBUWF9GUk1SX0RBVEFfQ0xLX1JTVE5fRU4JQklUKDExKQorI2RlZmluZSBEUFRYX0ZSTVJfREFU QV9DTEtfRU4JCUJJVCgxMCkKKyNkZWZpbmUgRFBUWF9QSFlfREFUQV9SU1ROX0VOCQlCSVQoOSkK KyNkZWZpbmUgRFBUWF9QSFlfREFUQV9DTEtfRU4JCUJJVCg4KQorI2RlZmluZSBEUFRYX1BIWV9D SEFSX1JTVE5fRU4JCUJJVCg3KQorI2RlZmluZSBEUFRYX1BIWV9DSEFSX0NMS19FTgkJQklUKDYp CisjZGVmaW5lIFNPVVJDRV9BVVhfU1lTX0NMS19SU1ROX0VOCUJJVCg1KQorI2RlZmluZSBTT1VS Q0VfQVVYX1NZU19DTEtfRU4JCUJJVCg0KQorI2RlZmluZSBEUFRYX1NZU19DTEtfUlNUTl9FTgkJ QklUKDMpCisjZGVmaW5lIERQVFhfU1lTX0NMS19FTgkJCUJJVCgyKQorI2RlZmluZSBDRkdfRFBU WF9WSUZfQ0xLX1JTVE5fRU4JQklUKDEpCisjZGVmaW5lIENGR19EUFRYX1ZJRl9DTEtfRU4JCUJJ VCgwKQorCisjZGVmaW5lIFNPVVJDRV9QSFlfUlNUTl9FTgkJQklUKDEpCisjZGVmaW5lIFNPVVJD RV9QSFlfQ0xLX0VOCQlCSVQoMCkKKworI2RlZmluZSBTT1VSQ0VfUEtUX1NZU19SU1ROX0VOCQlC SVQoMykKKyNkZWZpbmUgU09VUkNFX1BLVF9TWVNfQ0xLX0VOCQlCSVQoMikKKyNkZWZpbmUgU09V UkNFX1BLVF9EQVRBX1JTVE5fRU4JCUJJVCgxKQorI2RlZmluZSBTT1VSQ0VfUEtUX0RBVEFfQ0xL X0VOCQlCSVQoMCkKKworI2RlZmluZSBTUERJRl9DRFJfQ0xLX1JTVE5fRU4JCUJJVCg1KQorI2Rl ZmluZSBTUERJRl9DRFJfQ0xLX0VOCQlCSVQoNCkKKyNkZWZpbmUgU09VUkNFX0FJRl9TWVNfUlNU Tl9FTgkJQklUKDMpCisjZGVmaW5lIFNPVVJDRV9BSUZfU1lTX0NMS19FTgkJQklUKDIpCisjZGVm aW5lIFNPVVJDRV9BSUZfQ0xLX1JTVE5fRU4JCUJJVCgxKQorI2RlZmluZSBTT1VSQ0VfQUlGX0NM S19FTgkJQklUKDApCisKKyNkZWZpbmUgU09VUkNFX0NJUEhFUl9TWVNURU1fQ0xLX1JTVE5fRU4J QklUKDMpCisjZGVmaW5lIFNPVVJDRV9DSVBIRVJfU1lTX0NMS19FTgkJQklUKDIpCisjZGVmaW5l IFNPVVJDRV9DSVBIRVJfQ0hBUl9DTEtfUlNUTl9FTgkJQklUKDEpCisjZGVmaW5lIFNPVVJDRV9D SVBIRVJfQ0hBUl9DTEtfRU4JCUJJVCgwKQorCisjZGVmaW5lIFNPVVJDRV9DUllQVE9fU1lTX0NM S19SU1ROX0VOCUJJVCgxKQorI2RlZmluZSBTT1VSQ0VfQ1JZUFRPX1NZU19DTEtfRU4JQklUKDAp CisKKyNkZWZpbmUgQVBCX0lSQU1fUEFUSAkJCUJJVCgyKQorI2RlZmluZSBBUEJfRFJBTV9QQVRI CQkJQklUKDEpCisjZGVmaW5lIEFQQl9YVF9SRVNFVAkJCUJJVCgwKQorCisjZGVmaW5lIE1BSUxC T1hfSU5UX01BU0tfQklUCQlCSVQoMSkKKyNkZWZpbmUgUElGX0lOVF9NQVNLX0JJVAkJQklUKDAp CisjZGVmaW5lIEFMTF9JTlRfTUFTSwkJCTMKKworLyogbWFpbGJveCAqLworI2RlZmluZSBNQl9P UENPREVfSUQJCQkwCisjZGVmaW5lIE1CX01PRFVMRV9JRAkJCTEKKyNkZWZpbmUgTUJfU0laRV9N U0JfSUQJCQkyCisjZGVmaW5lIE1CX1NJWkVfTFNCX0lECQkJMworI2RlZmluZSBNQl9EQVRBX0lE CQkJNAorCisjZGVmaW5lIE1CX01PRFVMRV9JRF9EUF9UWAkJMHgwMQorI2RlZmluZSBNQl9NT0RV TEVfSURfSERDUF9UWAkJMHgwNworI2RlZmluZSBNQl9NT0RVTEVfSURfSERDUF9SWAkJMHgwOAor I2RlZmluZSBNQl9NT0RVTEVfSURfSERDUF9HRU5FUkFMCTB4MDkKKyNkZWZpbmUgTUJfTU9EVUxF X0lEX0dFTkVSQUwJCTB4MGEKKworLyogZ2VuZXJhbCBvcGNvZGUgKi8KKyNkZWZpbmUgR0VORVJB TF9NQUlOX0NPTlRST0wgICAgICAgICAgICAweDAxCisjZGVmaW5lIEdFTkVSQUxfVEVTVF9FQ0hP ICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBHRU5FUkFMX0JVU19TRVRUSU5HUyAgICAgICAg ICAgIDB4MDMKKyNkZWZpbmUgR0VORVJBTF9URVNUX0FDQ0VTUyAgICAgICAgICAgICAweDA0CisK KyNkZWZpbmUgRFBUWF9TRVRfUE9XRVJfTU5HCQkJMHgwMAorI2RlZmluZSBEUFRYX1NFVF9IT1NU X0NBUEFCSUxJVElFUwkJMHgwMQorI2RlZmluZSBEUFRYX0dFVF9FRElECQkJCTB4MDIKKyNkZWZp bmUgRFBUWF9SRUFEX0RQQ0QJCQkJMHgwMworI2RlZmluZSBEUFRYX1dSSVRFX0RQQ0QJCQkJMHgw NAorI2RlZmluZSBEUFRYX0VOQUJMRV9FVkVOVAkJCTB4MDUKKyNkZWZpbmUgRFBUWF9XUklURV9S RUdJU1RFUgkJCTB4MDYKKyNkZWZpbmUgRFBUWF9SRUFEX1JFR0lTVEVSCQkJMHgwNworI2RlZmlu ZSBEUFRYX1dSSVRFX0ZJRUxECQkJMHgwOAorI2RlZmluZSBEUFRYX1RSQUlOSU5HX0NPTlRST0wJ CQkweDA5CisjZGVmaW5lIERQVFhfUkVBRF9FVkVOVAkJCQkweDBhCisjZGVmaW5lIERQVFhfUkVB RF9MSU5LX1NUQVQJCQkweDBiCisjZGVmaW5lIERQVFhfU0VUX1ZJREVPCQkJCTB4MGMKKyNkZWZp bmUgRFBUWF9TRVRfQVVESU8JCQkJMHgwZAorI2RlZmluZSBEUFRYX0dFVF9MQVNUX0FVWF9TVEFV UwkJCTB4MGUKKyNkZWZpbmUgRFBUWF9TRVRfTElOS19CUkVBS19QT0lOVAkJMHgwZgorI2RlZmlu ZSBEUFRYX0ZPUkNFX0xBTkVTCQkJMHgxMAorI2RlZmluZSBEUFRYX0hQRF9TVEFURQkJCQkweDEx CisKKyNkZWZpbmUgRldfU1RBTkRCWQkJCQkwCisjZGVmaW5lIEZXX0FDVElWRQkJCQkxCisKKyNk ZWZpbmUgRFBUWF9FVkVOVF9FTkFCTEVfSFBECQkJQklUKDApCisjZGVmaW5lIERQVFhfRVZFTlRf RU5BQkxFX1RSQUlOSU5HCQlCSVQoMSkKKworI2RlZmluZSBMSU5LX1RSQUlOSU5HX05PVF9BQ1RJ VkUJCTAKKyNkZWZpbmUgTElOS19UUkFJTklOR19SVU4JCQkxCisjZGVmaW5lIExJTktfVFJBSU5J TkdfUkVTVEFSVAkJCTIKKworI2RlZmluZSBDT05UUk9MX1ZJREVPX0lETEUJCQkwCisjZGVmaW5l IENPTlRST0xfVklERU9fVkFMSUQJCQkxCisKKyNkZWZpbmUgVklGX0JZUEFTU19JTlRFUkxBQ0UJ CQlCSVQoMTMpCisjZGVmaW5lIElOVEVSTEFDRV9GTVRfREVUCQkJQklUKDEyKQorI2RlZmluZSBJ TlRFUkxBQ0VfRFRDVF9XSU4JCQkweDIwCisKKyNkZWZpbmUgRFBfRlJBTUVSX1NQX0lOVEVSTEFD RV9FTgkJQklUKDIpCisjZGVmaW5lIERQX0ZSQU1FUl9TUF9IU1AJCQlCSVQoMSkKKyNkZWZpbmUg RFBfRlJBTUVSX1NQX1ZTUAkJCUJJVCgwKQorCisvKiBjYXBhYmlsaXR5ICovCisjZGVmaW5lIEFV WF9IT1NUX0lOVkVSVAkJCQkzCisjZGVmaW5lCUZBU1RfTFRfU1VQUE9SVAkJCQkxCisjZGVmaW5l IEZBU1RfTFRfTk9UX1NVUFBPUlQJCQkwCisjZGVmaW5lIExBTkVfTUFQUElOR19OT1JNQUwJCQkw eDFiCisjZGVmaW5lIExBTkVfTUFQUElOR19GTElQUEVECQkJMHhlNAorI2RlZmluZSBFTkhBTkNF RAkJCQkxCisKKyNkZWZpbmUJRlVMTF9MVF9TVEFSVEVECQkJCUJJVCgwKQorI2RlZmluZSBGQVNF X0xUX1NUQVJURUQJCQkJQklUKDEpCisjZGVmaW5lIENMS19SRUNPVkVSWV9GSU5JU0hFRAkJCUJJ VCgyKQorI2RlZmluZSBFUV9QSEFTRV9GSU5JU0hFRAkJCUJJVCgzKQorI2RlZmluZSBGQVNFX0xU X1NUQVJUX0ZJTklTSEVECQkJQklUKDQpCisjZGVmaW5lIENMS19SRUNPVkVSWV9GQUlMRUQJCQlC SVQoNSkKKyNkZWZpbmUgRVFfUEhBU0VfRkFJTEVECQkJCUJJVCg2KQorI2RlZmluZSBGQVNFX0xU X0ZBSUxFRAkJCQlCSVQoNykKKworI2RlZmluZSBEUFRYX0hQRF9FVkVOVAkJCQlCSVQoMCkKKyNk ZWZpbmUgRFBUWF9UUkFJTklOR19FVkVOVAkJCUJJVCgxKQorI2RlZmluZSBIRENQX1RYX1NUQVRV U19FVkVOVAkJCUJJVCg0KQorI2RlZmluZSBIRENQMl9UWF9JU19LTV9TVE9SRURfRVZFTlQJCUJJ VCg1KQorI2RlZmluZSBIRENQMl9UWF9TVE9SRV9LTV9FVkVOVAkJCUJJVCg2KQorI2RlZmluZSBI RENQX1RYX0lTX1JFQ0VJVkVSX0lEX1ZBTElEX0VWRU5UCUJJVCg3KQorCisjZGVmaW5lIFRVX1NJ WkUJCQkJCTMwCisjZGVmaW5lIENETl9EUF9NQVhfTElOS19SQVRFCQkJRFBfTElOS19CV181XzQK KworLyogYXVkaW8gKi8KKyNkZWZpbmUgQVVESU9fUEFDS19FTgkJCQlCSVQoOCkKKyNkZWZpbmUg U0FNUExJTkdfRlJFUSh4KQkJCSgoKHgpICYgMHhmKSA8PCAxNikKKyNkZWZpbmUgT1JJR0lOQUxf U0FNUF9GUkVRKHgpCQkJKCgoeCkgJiAweGYpIDw8IDI0KQorI2RlZmluZSBTWU5DX1dSX1RPX0NI X1pFUk8JCQlCSVQoMSkKKyNkZWZpbmUgSTJTX0RFQ19TVEFSVAkJCQlCSVQoMSkKKyNkZWZpbmUg QVVESU9fU1dfUlNUCQkJCUJJVCgwKQorI2RlZmluZSBTTVBMMlBLVF9FTgkJCQlCSVQoMSkKKyNk ZWZpbmUgTUFYX05VTV9DSCh4KQkJCQkoKCh4KSAmIDB4MWYpIC0gMSkKKyNkZWZpbmUgTlVNX09G X0kyU19QT1JUUyh4KQkJCSgoKCh4KSAvIDIgLSAxKSAmIDB4MykgPDwgNSkKKyNkZWZpbmUgQVVE SU9fVFlQRV9MUENNCQkJCSgyIDw8IDcpCisjZGVmaW5lIENGR19TVUJfUENLVF9OVU0oeCkJCQko KCgoeCkgLSAxKSAmIDB4NykgPDwgMTEpCisjZGVmaW5lIEFVRElPX0NIX05VTSh4KQkJCQkoKCgo eCkgLSAxKSAmIDB4MWYpIDw8IDIpCisjZGVmaW5lIFRSQU5TX1NNUExfV0lEVEhfMTYJCQkwCisj ZGVmaW5lIFRSQU5TX1NNUExfV0lEVEhfMjQJCQlCSVQoMTEpCisjZGVmaW5lIFRSQU5TX1NNUExf V0lEVEhfMzIJCQkoMiA8PCAxMSkKKyNkZWZpbmUgSTJTX0RFQ19QT1JUX0VOKHgpCQkJKCgoeCkg JiAweGYpIDw8IDE3KQorI2RlZmluZSBTUERJRl9FTkFCTEUJCQkJQklUKDIxKQorI2RlZmluZSBT UERJRl9BVkdfU0VMCQkJCUJJVCgyMCkKKyNkZWZpbmUgU1BESUZfSklUVEVSX0JZUEFTUwkJCUJJ VCgxOSkKKyNkZWZpbmUgU1BESUZfRklGT19NSURfUkFOR0UoeCkJCQkoKCh4KSAmIDB4ZmYpIDw8 IDExKQorI2RlZmluZSBTUERJRl9KSVRURVJfVEhSU0goeCkJCQkoKCh4KSAmIDB4ZmYpIDw8IDMp CisjZGVmaW5lIFNQRElGX0pJVFRFUl9BVkdfV0lOKHgpCQkJKCh4KSAmIDB4NykKKworLyogUmVm ZXJuY2UgY3ljbGVzIHdoZW4gdXNpbmcgbGFuZSBjbG9jayBhcyByZWZlcm5jZSAqLworI2RlZmlu ZSBMQU5FX1JFRl9DWUMJCQkJMHg4MDAwCisKK2VudW0gdm9sdGFnZV9zd2luZ19sZXZlbCB7CisJ Vk9MVEFHRV9MRVZFTF8wLAorCVZPTFRBR0VfTEVWRUxfMSwKKwlWT0xUQUdFX0xFVkVMXzIsCisJ Vk9MVEFHRV9MRVZFTF8zLAorfTsKKworZW51bSBwcmVfZW1waGFzaXNfbGV2ZWwgeworCVBSRV9F TVBIQVNJU19MRVZFTF8wLAorCVBSRV9FTVBIQVNJU19MRVZFTF8xLAorCVBSRV9FTVBIQVNJU19M RVZFTF8yLAorCVBSRV9FTVBIQVNJU19MRVZFTF8zLAorfTsKKworZW51bSBwYXR0ZXJuX3NldCB7 CisJUFRTMQkJPSBCSVQoMCksCisJUFRTMgkJPSBCSVQoMSksCisJUFRTMwkJPSBCSVQoMiksCisJ UFRTNAkJPSBCSVQoMyksCisJRFBfTk9ORQkJPSBCSVQoNCkKK307CisKK2VudW0gdmljX2NvbG9y X2RlcHRoIHsKKwlCQ1NfNiA9IDB4MSwKKwlCQ1NfOCA9IDB4MiwKKwlCQ1NfMTAgPSAweDQsCisJ QkNTXzEyID0gMHg4LAorCUJDU18xNiA9IDB4MTAsCit9OworCitlbnVtIHZpY19idF90eXBlIHsK KwlCVF82MDEgPSAweDAsCisJQlRfNzA5ID0gMHgxLAorfTsKKwordm9pZCBjZG5fZHBfY2xvY2tf cmVzZXQoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKTsKKwordm9pZCBjZG5fZHBfc2V0X2Z3X2Ns ayhzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIHUzMiBjbGspOworaW50IGNkbl9kcF9sb2FkX2Zp cm13YXJlKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgY29uc3QgdTMyICppX21lbSwKKwkJCSB1 MzIgaV9zaXplLCBjb25zdCB1MzIgKmRfbWVtLCB1MzIgZF9zaXplKTsKK2ludCBjZG5fZHBfc2V0 X2Zpcm13YXJlX2FjdGl2ZShzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIGJvb2wgZW5hYmxlKTsK K2ludCBjZG5fZHBfc2V0X2hvc3RfY2FwKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgdTggbGFu ZXMsIGJvb2wgZmxpcCk7CitpbnQgY2RuX2RwX2V2ZW50X2NvbmZpZyhzdHJ1Y3QgY2RuX2RwX2Rl dmljZSAqZHApOwordTMyIGNkbl9kcF9nZXRfZXZlbnQoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRw KTsKK2ludCBjZG5fZHBfZ2V0X2hwZF9zdGF0dXMoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKTsK K2ludCBjZG5fZHBfZHBjZF93cml0ZShzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIHUzMiBhZGRy LCB1OCB2YWx1ZSk7CitpbnQgY2RuX2RwX2RwY2RfcmVhZChzdHJ1Y3QgY2RuX2RwX2RldmljZSAq ZHAsIHUzMiBhZGRyLCB1OCAqZGF0YSwgdTE2IGxlbik7CitpbnQgY2RuX2RwX2dldF9lZGlkX2Js b2NrKHZvaWQgKmRwLCB1OCAqZWRpZCwKKwkJCSAgdW5zaWduZWQgaW50IGJsb2NrLCBzaXplX3Qg bGVuZ3RoKTsKK2ludCBjZG5fZHBfdHJhaW5pbmdfc3RhcnQoc3RydWN0IGNkbl9kcF9kZXZpY2Ug KmRwKTsKK2ludCBjZG5fZHBfZ2V0X3RyYWluaW5nX3N0YXR1cyhzdHJ1Y3QgY2RuX2RwX2Rldmlj ZSAqZHApOworaW50IGNkbl9kcF9zZXRfdmlkZW9fc3RhdHVzKHN0cnVjdCBjZG5fZHBfZGV2aWNl ICpkcCwgaW50IGFjdGl2ZSk7CitpbnQgY2RuX2RwX2NvbmZpZ192aWRlbyhzdHJ1Y3QgY2RuX2Rw X2RldmljZSAqZHApOworaW50IGNkbl9kcF9hdWRpb19zdG9wKHN0cnVjdCBjZG5fZHBfZGV2aWNl ICpkcCwgc3RydWN0IGF1ZGlvX2luZm8gKmF1ZGlvKTsKK2ludCBjZG5fZHBfYXVkaW9fbXV0ZShz dHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIGJvb2wgZW5hYmxlKTsKK2ludCBjZG5fZHBfYXVkaW9f Y29uZmlnKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgc3RydWN0IGF1ZGlvX2luZm8gKmF1ZGlv KTsKKyNlbmRpZiAvKiBfQ0ROX0RQX1JFR19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5jIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlw L3JvY2tjaGlwX2RybV92b3AuYwppbmRleCBlZGQ3ZWMyLi5kNzIzZDhlIDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9wLmMKQEAgLTk2OSw5ICs5NjksMTEgQEAg c3RhdGljIHZvaWQgdm9wX2NydGNfZW5hYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIAkJdm9w X2RzcF9ob2xkX3ZhbGlkX2lycV9kaXNhYmxlKHZvcCk7CiAJfQogCi0JcGluX3BvbCA9IDB4ODsK LQlwaW5fcG9sIHw9IChhZGp1c3RlZF9tb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfTkhTWU5D KSA/IDAgOiAxOwotCXBpbl9wb2wgfD0gKGFkanVzdGVkX21vZGUtPmZsYWdzICYgRFJNX01PREVf RkxBR19OVlNZTkMpID8gMCA6ICgxIDw8IDEpOworCXBpbl9wb2wgPSBCSVQoRENMS19JTlZFUlQp OworCXBpbl9wb2wgfD0gKGFkanVzdGVkX21vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OSFNZ TkMpID8KKwkJICAgMCA6IEJJVChIU1lOQ19QT1NJVElWRSk7CisJcGluX3BvbCB8PSAoYWRqdXN0 ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX05WU1lOQykgPworCQkgICAwIDogQklUKFZT WU5DX1BPU0lUSVZFKTsKIAlWT1BfQ1RSTF9TRVQodm9wLCBwaW5fcG9sLCBwaW5fcG9sKTsKIAog CXN3aXRjaCAocy0+b3V0cHV0X3R5cGUpIHsKQEAgLTk5MSw2ICs5OTMsMTEgQEAgc3RhdGljIHZv aWQgdm9wX2NydGNfZW5hYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIAkJVk9QX0NUUkxfU0VU KHZvcCwgbWlwaV9waW5fcG9sLCBwaW5fcG9sKTsKIAkJVk9QX0NUUkxfU0VUKHZvcCwgbWlwaV9l biwgMSk7CiAJCWJyZWFrOworCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0Ogor CQlwaW5fcG9sICY9IH5CSVQoRENMS19JTlZFUlQpOworCQlWT1BfQ1RSTF9TRVQodm9wLCBkcF9w aW5fcG9sLCBwaW5fcG9sKTsKKwkJVk9QX0NUUkxfU0VUKHZvcCwgZHBfZW4sIDEpOworCQlicmVh azsKIAlkZWZhdWx0OgogCQlEUk1fRVJST1IoInVuc3VwcG9ydCBjb25uZWN0b3JfdHlwZVslZF1c biIsIHMtPm91dHB1dF90eXBlKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9j a2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5oIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tj aGlwX2RybV92b3AuaAppbmRleCBmZjRmNTJlLi40ODIwYThiIDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5oCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9wLmgKQEAgLTQ1LDYgKzQ1LDcgQEAgc3RydWN0IHZv cF9jdHJsIHsKIAlzdHJ1Y3Qgdm9wX3JlZyBlZHBfZW47CiAJc3RydWN0IHZvcF9yZWcgaGRtaV9l bjsKIAlzdHJ1Y3Qgdm9wX3JlZyBtaXBpX2VuOworCXN0cnVjdCB2b3BfcmVnIGRwX2VuOwogCXN0 cnVjdCB2b3BfcmVnIG91dF9tb2RlOwogCXN0cnVjdCB2b3BfcmVnIGRpdGhlcl9kb3duOwogCXN0 cnVjdCB2b3BfcmVnIGRpdGhlcl91cDsKQEAgLTUzLDYgKzU0LDcgQEAgc3RydWN0IHZvcF9jdHJs IHsKIAlzdHJ1Y3Qgdm9wX3JlZyBoZG1pX3Bpbl9wb2w7CiAJc3RydWN0IHZvcF9yZWcgZWRwX3Bp bl9wb2w7CiAJc3RydWN0IHZvcF9yZWcgbWlwaV9waW5fcG9sOworCXN0cnVjdCB2b3BfcmVnIGRw X3Bpbl9wb2w7CiAKIAlzdHJ1Y3Qgdm9wX3JlZyBodG90YWxfcHc7CiAJc3RydWN0IHZvcF9yZWcg aGFjdF9zdF9lbmQ7CkBAIC0yNDIsNiArMjQ0LDEzIEBAIGVudW0gc2NhbGVfZG93bl9tb2RlIHsK IAlTQ0FMRV9ET1dOX0FWRyA9IDB4MQogfTsKIAorZW51bSB2b3BfcG9sIHsKKwlIU1lOQ19QT1NJ VElWRSA9IDAsCisJVlNZTkNfUE9TSVRJVkUgPSAxLAorCURFTl9ORUdBVElWRSAgID0gMiwKKwlE Q0xLX0lOVkVSVCAgICA9IDMKK307CisKICNkZWZpbmUgRlJBQ18xNl8xNihtdWx0LCBkaXYpICAg ICgoKG11bHQpIDw8IDE2KSAvIChkaXYpKQogI2RlZmluZSBTQ0xfRlRfREVGQVVMVF9GSVhQT0lO VF9TSElGVAkxMgogI2RlZmluZSBTQ0xfTUFYX1ZTS0lQTElORVMJCTQKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF92b3BfcmVnLmMgYi9kcml2ZXJzL2dwdS9k cm0vcm9ja2NoaXAvcm9ja2NoaXBfdm9wX3JlZy5jCmluZGV4IDViMWFlMWYuLmRjZjE3MmUgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF92b3BfcmVnLmMKKysr IGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX3ZvcF9yZWcuYwpAQCAtMjgxLDYg KzI4MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm9wX2RhdGEgcmszMjg4X3ZvcCA9IHsKIHN0 YXRpYyBjb25zdCBzdHJ1Y3Qgdm9wX2N0cmwgcmszMzk5X2N0cmxfZGF0YSA9IHsKIAkuc3RhbmRi eSA9IFZPUF9SRUcoUkszMzk5X1NZU19DVFJMLCAweDEsIDIyKSwKIAkuZ2F0ZV9lbiA9IFZPUF9S RUcoUkszMzk5X1NZU19DVFJMLCAweDEsIDIzKSwKKwkuZHBfZW4gPSBWT1BfUkVHKFJLMzM5OV9T WVNfQ1RSTCwgMHgxLCAxMSksCiAJLnJnYl9lbiA9IFZPUF9SRUcoUkszMzk5X1NZU19DVFJMLCAw eDEsIDEyKSwKIAkuaGRtaV9lbiA9IFZPUF9SRUcoUkszMzk5X1NZU19DVFJMLCAweDEsIDEzKSwK IAkuZWRwX2VuID0gVk9QX1JFRyhSSzMzOTlfU1lTX0NUUkwsIDB4MSwgMTQpLApAQCAtMjkwLDYg KzI5MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm9wX2N0cmwgcmszMzk5X2N0cmxfZGF0YSA9 IHsKIAkuZGF0YV9ibGFuayA9IFZPUF9SRUcoUkszMzk5X0RTUF9DVFJMMCwgMHgxLCAxOSksCiAJ Lm91dF9tb2RlID0gVk9QX1JFRyhSSzMzOTlfRFNQX0NUUkwwLCAweGYsIDApLAogCS5yZ2JfcGlu X3BvbCA9IFZPUF9SRUcoUkszMzk5X0RTUF9DVFJMMSwgMHhmLCAxNiksCisJLmRwX3Bpbl9wb2wg PSBWT1BfUkVHKFJLMzM5OV9EU1BfQ1RSTDEsIDB4ZiwgMTYpLAogCS5oZG1pX3Bpbl9wb2wgPSBW T1BfUkVHKFJLMzM5OV9EU1BfQ1RSTDEsIDB4ZiwgMjApLAogCS5lZHBfcGluX3BvbCA9IFZPUF9S RUcoUkszMzk5X0RTUF9DVFJMMSwgMHhmLCAyNCksCiAJLm1pcGlfcGluX3BvbCA9IFZPUF9SRUco UkszMzk5X0RTUF9DVFJMMSwgMHhmLCAyOCksCi0tIAoxLjkuMQoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmkt ZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==