From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Zhong Subject: [v7 PATCH 6/6] drm/rockchip: cdn-dp: add cdn DP support for rk3399 Date: Wed, 27 Jul 2016 21:07:16 +0800 Message-ID: <1469624836-22792-7-git-send-email-zyw@rock-chips.com> References: <1469624836-22792-1-git-send-email-zyw@rock-chips.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1469624836-22792-1-git-send-email-zyw@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, Chris Zhong , 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 Q2hhbmdlcyBpbiB2NzoKLSBzdXBwb3J0IGZpcm13YXJlIHN0YW5kYnkgd2hlbiBubyBkcHR4IGNv bm5lY3Rpb24KLSBvcHRpbWl6YXRpb24gdGhlIGNhbGN1bGF0aW9uIG9mIHR1IHNpemUgYW5kIHZh bGlkIHN5bWJvbAoKQ2hhbmdlcyBpbiB2NjoKLSBhZGQgYSBwb3J0IHN0cnVjdAotIHNlbGVjdCBT TkRfU09DX0hETUlfQ09ERUMKLSBmb3JjZSByZXNldCB0aGUgcGh5IHdoZW4gaHBkIGRldGVjdGVk CgpDaGFuZ2VzIGluIHY1OgotIGFscGhhYmV0aWNhbCBvcmRlcgotIGRvIG5vdCB1c2UgbG9uZywg dXNlIHUzMiBvciB1NjQKLSByZXR1cm4gTU9ERV9DTE9DS19ISUdIIHdoZW4gcmVxdWVzdGVkID4g YWN0dWFsCi0gT3B0aW1pemVkIENvZGluZyBTdHlsZQotIGFkZCBhIGZvcm11bGEgdG8gZ2V0IGJl dHRlciB0dSBzaXplIGFuZCBzeW1ib2wgdmFsdWUuCi0gbW9kaWZ5IGFjY29yZGluZyB0byBTZWFu IFBhdWwncyBjb21tZW50cwotIGZpeGVkIHRoZSBmd193YWl0IGFsd2F5cyAwCgpDaGFuZ2VzIGlu IHY0OgotIHVzZSBwaHkgZnJhbWV3b3JrIHRvIGNvbnRyb2wgRFAgcGh5Ci0gc3VwcG9ydCAyIHBo eXMKCkNoYW5nZXMgaW4gdjM6Ci0gdXNlIEVYVENPTl9ESVNQX0RQIGFuZCBFWFRDT05fRElTUF9E UF9BTFQgY2FibGUgdG8gZ2V0IGRwIHBvcnQgc3RhdGUuCi0gcmVzZXQgc3BkaWYgYmVmb3JlIGNv bmZpZyBpdAotIG1vZGlmeSB0aGUgZmlybXdhcmUgY2xrIHRvIDEwME1oegotIHJldHJ5IGxvYWQg ZmlybXdhcmUgaWYgZncgZmlsZSBpcyByZXF1ZXN0ZWQgdG9vIGVhcmx5CgpDaGFuZ2VzIGluIHYy OgotIEFscGhhYmV0aWMgb3JkZXIKLSByZW1vdmUgZXhjZXNzIGVycm9yIG1lc3NhZ2UKLSB1c2Ug ZGVmaW5lIGNsa19yYXRlCi0gY2hlY2sgYWxsIHJldHVybiB2YWx1ZQotIHJlbW92ZSBkZXZfc2V0 X25hbWUoZHAtPmRldiwgImNkbi1kcCIpOwotIHVzZSBzY2hlZHVsZV9kZWxheWVkX3dvcmsKLSBy ZW1vdmUgbmV2ZXItY2FsbGVkIGZ1bmN0aW9ucwotIHJlbW92ZSBzb21lIHVubmVjZXNzYXJ5ICgp CgpDaGFuZ2VzIGluIHYxOgotIHVzZSBleHRjb24gQVBJCi0gdXNlIGhkbWktY29kZWMgZm9yIHRo ZSBEUCBBc29jCi0gZG8gbm90IGluaXRpYWxpemUgdGhlICJyZXQiCi0gcHJpbnRrIGEgZXJyIGxv ZyB3aGVuIGRybV9vZl9lbmNvZGVyX2FjdGl2ZV9lbmRwb2ludF9pZAotIG1vZGlmeSB0aGUgZGNs ayBwaW5fcG9sIHRvIGEgc2luZ2xlIGxpbmUKCiBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvS2Nv bmZpZyAgICAgICAgICAgIHwgIDEwICsKIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9NYWtlZmls ZSAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1jb3Jl LmMgICAgICB8IDg3NyArKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJt L3JvY2tjaGlwL2Nkbi1kcC1jb3JlLmggICAgICB8IDEwMyArKysrCiBkcml2ZXJzL2dwdS9kcm0v cm9ja2NoaXAvY2RuLWRwLXJlZy5jICAgICAgIHwgOTE2ICsrKysrKysrKysrKysrKysrKysrKysr KysrKysKIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAtcmVnLmggICAgICAgfCA0ODIg KysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3Zv cC5jIHwgIDEzICstCiBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5o IHwgICA5ICsKIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF92b3BfcmVnLmMgfCAg IDIgKwogOSBmaWxlcyBjaGFuZ2VkLCAyNDEwIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0p CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1jb3Jl LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRwLWNv cmUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAt cmVnLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRw LXJlZy5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL0tjb25maWcgYi9k cml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvS2NvbmZpZwppbmRleCBkMzBiZGMzLi4yMGFhYWZlIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvS2NvbmZpZworKysgYi9kcml2ZXJz L2dwdS9kcm0vcm9ja2NoaXAvS2NvbmZpZwpAQCAtMjUsNiArMjUsMTYgQEAgY29uZmlnIFJPQ0tD SElQX0FOQUxPR0lYX0RQCiAJICBmb3IgdGhlIEFuYWxvZ2l4IENvcmUgRFAgZHJpdmVyLiBJZiB5 b3Ugd2FudCB0byBlbmFibGUgRFAKIAkgIG9uIFJLMzI4OCBiYXNlZCBTb0MsIHlvdSBzaG91bGQg c2VsZXQgdGhpcyBvcHRpb24uCiAKK2NvbmZpZyBST0NLQ0hJUF9DRE5fRFAKKyAgICAgICAgdHJp c3RhdGUgIlJvY2tjaGlwIGNkbiBEUCIKKyAgICAgICAgZGVwZW5kcyBvbiBEUk1fUk9DS0NISVAK KwlzZWxlY3QgU05EX1NPQ19IRE1JX0NPREVDIGlmIFNORF9TT0MKKyAgICAgICAgaGVscAorCSAg VGhpcyBzZWxlY3RzIHN1cHBvcnQgZm9yIFJvY2tjaGlwIFNvQyBzcGVjaWZpYyBleHRlbnNpb25z CisJICBmb3IgdGhlIGNkbiBEUCBkcml2ZXIuIElmIHlvdSB3YW50IHRvIGVuYWJsZSBEcCBvbgor CSAgUkszMzk5IGJhc2VkIFNvQywgeW91IHNob3VsZCBzZWxlY3QgdGhpcworCSAgb3B0aW9uLgor CiBjb25maWcgUk9DS0NISVBfRFdfSERNSQogICAgICAgICB0cmlzdGF0ZSAiUm9ja2NoaXAgc3Bl Y2lmaWMgZXh0ZW5zaW9ucyBmb3IgU3lub3BzeXMgRFcgSERNSSIKICAgICAgICAgZGVwZW5kcyBv biBEUk1fUk9DS0NISVAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9NYWtl ZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9NYWtlZmlsZQppbmRleCAwNWQwNzEzLi5h YmRlY2Q1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvTWFrZWZpbGUKKysr IGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL01ha2VmaWxlCkBAIC03LDYgKzcsNyBAQCByb2Nr Y2hpcGRybS15IDo9IHJvY2tjaGlwX2RybV9kcnYubyByb2NrY2hpcF9kcm1fZmIubyBcCiByb2Nr Y2hpcGRybS0kKENPTkZJR19EUk1fRkJERVZfRU1VTEFUSU9OKSArPSByb2NrY2hpcF9kcm1fZmJk ZXYubwogCiBvYmotJChDT05GSUdfUk9DS0NISVBfQU5BTE9HSVhfRFApICs9IGFuYWxvZ2l4X2Rw LXJvY2tjaGlwLm8KK29iai0kKENPTkZJR19ST0NLQ0hJUF9DRE5fRFApICs9IGNkbi1kcC1jb3Jl Lm8gY2RuLWRwLXJlZy5vCiBvYmotJChDT05GSUdfUk9DS0NISVBfRFdfSERNSSkgKz0gZHdfaGRt aS1yb2NrY2hpcC5vCiBvYmotJChDT05GSUdfUk9DS0NISVBfRFdfTUlQSV9EU0kpICs9IGR3LW1p cGktZHNpLm8KIG9iai0kKENPTkZJR19ST0NLQ0hJUF9JTk5PX0hETUkpICs9IGlubm9faGRtaS5v CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRwLWNvcmUuYyBiL2Ry aXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAtY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLjMxZDE0NmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9k cm0vcm9ja2NoaXAvY2RuLWRwLWNvcmUuYwpAQCAtMCwwICsxLDg3NyBAQAorLyoKKyAqIENvcHly aWdodCAoQykgRnV6aG91IFJvY2tjaGlwIEVsZWN0cm9uaWNzIENvLkx0ZAorICogQXV0aG9yOiBD aHJpcyBaaG9uZyA8enl3QHJvY2stY2hpcHMuY29tPgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMg bGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExp Y2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVu ZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1 ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5j bHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZHBfaGVscGVy Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9lZGlkLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9vZi5oPgor CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY29tcG9uZW50Lmg+Cisj aW5jbHVkZSA8bGludXgvZXh0Y29uLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNp bmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9yZXNldC5oPgorI2luY2x1 ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KKyNpbmNsdWRlIDxsaW51eC9waHkvcGh5Lmg+CisKKyNp bmNsdWRlIDxzb3VuZC9oZG1pLWNvZGVjLmg+CisKKyNpbmNsdWRlICJjZG4tZHAtY29yZS5oIgor I2luY2x1ZGUgImNkbi1kcC1yZWcuaCIKKyNpbmNsdWRlICJyb2NrY2hpcF9kcm1fdm9wLmgiCisK KyNkZWZpbmUgY29ubmVjdG9yX3RvX2RwKGMpIFwKKwkJY29udGFpbmVyX29mKGMsIHN0cnVjdCBj ZG5fZHBfZGV2aWNlLCBjb25uZWN0b3IpCisKKyNkZWZpbmUgZW5jb2Rlcl90b19kcChjKSBcCisJ CWNvbnRhaW5lcl9vZihjLCBzdHJ1Y3QgY2RuX2RwX2RldmljZSwgZW5jb2RlcikKKworLyogZHAg Z3JmIHJlZ2lzdGVyIG9mZnNldCAqLworI2RlZmluZSBEUF9WT1BfU0VMCQkweDYyMjQKKyNkZWZp bmUgRFBfU0VMX1ZPUF9MSVQJCUJJVCgxMikKKyNkZWZpbmUgTUFYX0ZXX1dBSVRfU0VDUwk2NAor I2RlZmluZSBDRE5fRFBfRklSTVdBUkUJCSJyb2NrY2hpcC9kcHR4LmJpbiIKKworc3RydWN0IGNk bl9kcF9kYXRhIHsKKwl1OCBtYXhfcGh5OworfTsKKworc3RydWN0IGNkbl9kcF9kYXRhIHJrMzM5 OV9jZG5fZHAgPSB7CisJLm1heF9waHkgPSAyLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBv Zl9kZXZpY2VfaWQgY2RuX2RwX2R0X2lkc1tdID0geworCXsgLmNvbXBhdGlibGUgPSAicm9ja2No aXAscmszMzk5LWNkbi1kcCIsCisJCS5kYXRhID0gKHZvaWQgKikmcmszMzk5X2Nkbl9kcCB9LAor CXt9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBjZG5fZHBfZHRfaWRzKTsKKworc3Rh dGljIGludCBjZG5fZHBfY2xrX2VuYWJsZShzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApCit7CisJ aW50IHJldDsKKwl1MzIgcmF0ZTsKKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkcC0+cGNs ayk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkcC0+ZGV2LCAiY2Fubm90IGVuYWJsZSBk cCBwY2xrICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9wY2xrOworCX0KKworCXJldCA9IGNsa19w cmVwYXJlX2VuYWJsZShkcC0+Y29yZV9jbGspOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIo ZHAtPmRldiwgImNhbm5vdCBlbmFibGUgY29yZV9jbGsgJWRcbiIsIHJldCk7CisJCWdvdG8gZXJy X2NvcmVfY2xrOworCX0KKworCXJhdGUgPSBjbGtfZ2V0X3JhdGUoZHAtPmNvcmVfY2xrKTsKKwlp ZiAocmF0ZSA8IDApIHsKKwkJZGV2X2VycihkcC0+ZGV2LCAiZ2V0IGNsayByYXRlIGZhaWxlZDog JWRcbiIsIHJhdGUpOworCQlnb3RvIGVycl9zZXRfcmF0ZTsKKwl9CisKKwljZG5fZHBfc2V0X2Z3 X2NsayhkcCwgcmF0ZSk7CisKKwlyZXR1cm4gMDsKKworZXJyX3NldF9yYXRlOgorCWNsa19kaXNh YmxlX3VucHJlcGFyZShkcC0+Y29yZV9jbGspOworZXJyX2NvcmVfY2xrOgorCWNsa19kaXNhYmxl X3VucHJlcGFyZShkcC0+cGNsayk7CitlcnJfcGNsazoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0 aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cworY2RuX2RwX2Nvbm5lY3Rvcl9kZXRlY3Qoc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgYm9vbCBmb3JjZSkKK3sKKwlzdHJ1Y3QgY2Ru X2RwX2RldmljZSAqZHAgPSBjb25uZWN0b3JfdG9fZHAoY29ubmVjdG9yKTsKKworCXJldHVybiBk cC0+aHBkX3N0YXR1czsKK30KKworc3RhdGljIHZvaWQgY2RuX2RwX2Nvbm5lY3Rvcl9kZXN0cm95 KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJZHJtX2Nvbm5lY3Rvcl91bnJl Z2lzdGVyKGNvbm5lY3Rvcik7CisJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rvcik7Cit9 CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyBjZG5fZHBfYXRvbWljX2Nvbm5l Y3Rvcl9mdW5jcyA9IHsKKwkuZHBtcyA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kcG1z LAorCS5kZXRlY3QgPSBjZG5fZHBfY29ubmVjdG9yX2RldGVjdCwKKwkuZGVzdHJveSA9IGNkbl9k cF9jb25uZWN0b3JfZGVzdHJveSwKKwkuZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2lu Z2xlX2Nvbm5lY3Rvcl9tb2RlcywKKwkucmVzZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0 b3JfcmVzZXQsCisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9j b25uZWN0b3JfZHVwbGljYXRlX3N0YXRlLAorCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGRybV9h dG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlLAorfTsKKworc3RhdGljIGludCBj ZG5fZHBfY29ubmVjdG9yX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y KQoreworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCA9IGNvbm5lY3Rvcl90b19kcChjb25uZWN0 b3IpOworCXN0cnVjdCBlZGlkICplZGlkOworCWludCByZXQgPSAwOworCisJZWRpZCA9IGRybV9k b19nZXRfZWRpZChjb25uZWN0b3IsIGNkbl9kcF9nZXRfZWRpZF9ibG9jaywgZHApOworCWlmIChl ZGlkKSB7CisJCWRldl9kYmcoZHAtPmRldiwgImdvdCBlZGlkOiB3aWR0aFslZF0geCBoZWlnaHRb JWRdXG4iLAorCQkJZWRpZC0+d2lkdGhfY20sIGVkaWQtPmhlaWdodF9jbSk7CisKKwkJZHAtPnNp bmtfaGFzX2F1ZGlvID0gZHJtX2RldGVjdF9tb25pdG9yX2F1ZGlvKGVkaWQpOworCQlyZXQgPSBk cm1fYWRkX2VkaWRfbW9kZXMoY29ubmVjdG9yLCBlZGlkKTsKKwkJaWYgKHJldCkgeworCQkJZHJt X21vZGVfY29ubmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KGNvbm5lY3RvciwKKwkJCQkJCQkJ ZWRpZCk7CisJCQlkcm1fZWRpZF90b19lbGQoY29ubmVjdG9yLCBlZGlkKTsKKwkJfQorCQlrZnJl ZShlZGlkKTsKKwl9IGVsc2UgeworCQlkZXZfd2FybihkcC0+ZGV2LCAiZmFpbGVkIHRvIGdldCBl ZGlkXG4iKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IGRybV9lbmNv ZGVyICoKKwljZG5fZHBfY29ubmVjdG9yX2Jlc3RfZW5jb2RlcihzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCA9IGNvbm5lY3Rvcl90 b19kcChjb25uZWN0b3IpOworCisJcmV0dXJuICZkcC0+ZW5jb2RlcjsKK30KKworc3RhdGljIGlu dCBjZG5fZHBfY29ubmVjdG9yX21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvciwKKwkJCQkgICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJc3Ry dWN0IGNkbl9kcF9kZXZpY2UgKmRwID0gY29ubmVjdG9yX3RvX2RwKGNvbm5lY3Rvcik7CisJc3Ry dWN0IGRybV9kaXNwbGF5X2luZm8gKmRpc3BsYXlfaW5mbyA9ICZkcC0+Y29ubmVjdG9yLmRpc3Bs YXlfaW5mbzsKKwl1MzIgcmVxdWVzdGVkID0gbW9kZS0+Y2xvY2sgKiBkaXNwbGF5X2luZm8tPmJw YyAqIDMgLyAxMDAwOworCXUzMiBzaW5rX21heCwgc291cmNlX21heCwgcmF0ZTsKKwl1OCBsYW5l cywgaTsKKwl1MzIgYWN0dWFsOworCisJLyogZmluZCB0aGUgcnVubmluZyBwb3J0ICovCisJZm9y IChpID0gMDsgaSA8IGRwLT5wb3J0czsgaSsrKSB7CisJCWlmIChkcC0+cG9ydFtpXS0+cGh5X3N0 YXR1cyA9PSAxKSB7CisJCQlzb3VyY2VfbWF4ID0gZHAtPnBvcnRbaV0tPmNhcF9sYW5lczsKKwkJ CWJyZWFrOworCQl9CisJfQorCisJc2lua19tYXggPSBkcm1fZHBfbWF4X2xhbmVfY291bnQoZHAt PmRwY2QpOworCWxhbmVzID0gbWluKHNvdXJjZV9tYXgsIHNpbmtfbWF4KTsKKworCXNvdXJjZV9t YXggPSBkcm1fZHBfYndfY29kZV90b19saW5rX3JhdGUoQ0ROX0RQX01BWF9MSU5LX1JBVEUpOwor CXNpbmtfbWF4ID0gZHJtX2RwX21heF9saW5rX3JhdGUoZHAtPmRwY2QpOworCXJhdGUgPSBtaW4o c291cmNlX21heCwgc2lua19tYXgpOworCisJYWN0dWFsID0gcmF0ZSAqIGxhbmVzIC8gMTAwOwor CisJLyogZWZmaWNpZW5jeSBpcyBhYm91dCAwLjggKi8KKwlhY3R1YWwgPSBhY3R1YWwgKiA4IC8g MTA7CisKKwlpZiAocmVxdWVzdGVkID4gYWN0dWFsKSB7CisJCWRldl9kYmcoZHAtPmRldiwgInJl cXVlc3RlZD0lZCwgYWN0dWFsPSVkLCBjbG9jaz0lZFxuIiwKKwkJCXJlcXVlc3RlZCwgYWN0dWFs LCBtb2RlLT5jbG9jayk7CisJCXJldHVybiBNT0RFX0NMT0NLX0hJR0g7CisJfQorCisJcmV0dXJu IE1PREVfT0s7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3Mg Y2RuX2RwX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgPSB7CisJLmdldF9tb2RlcyA9IGNkbl9kcF9j b25uZWN0b3JfZ2V0X21vZGVzLAorCS5iZXN0X2VuY29kZXIgPSBjZG5fZHBfY29ubmVjdG9yX2Jl c3RfZW5jb2RlciwKKwkubW9kZV92YWxpZCA9IGNkbl9kcF9jb25uZWN0b3JfbW9kZV92YWxpZCwK K307CisKK3N0YXRpYyB2b2lkIGNkbl9kcF9jb21taXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNv ZGVyKQoreworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCA9IGVuY29kZXJfdG9fZHAoZW5jb2Rl cik7CisJaW50IHJldDsKKworCXJldCA9IGNkbl9kcF90cmFpbmluZ19zdGFydChkcCk7CisJaWYg KHJldCkgeworCQlkZXZfZXJyKGRwLT5kZXYsICJsaW5rIHRyYWluaW5nIGZhaWxlZDogJWRcbiIs IHJldCk7CisJCXJldHVybjsKKwl9CisKKwlyZXQgPSBjZG5fZHBfZ2V0X3RyYWluaW5nX3N0YXR1 cyhkcCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRwLT5kZXYsICJnZXQgbGluayB0cmFpbmlu ZyBzdGF0dXMgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuOworCX0KKworCWRldl9pbmZv KGRwLT5kZXYsICJyYXRlOjB4JXgsIGxhbmVzOiVkXG4iLAorCQkgZHAtPmxpbmsucmF0ZSwgZHAt PmxpbmsubnVtX2xhbmVzKTsKKworCWlmIChjZG5fZHBfc2V0X3ZpZGVvX3N0YXR1cyhkcCwgQ09O VFJPTF9WSURFT19JRExFKSkKKwkJcmV0dXJuOworCisJaWYgKGNkbl9kcF9jb25maWdfdmlkZW8o ZHApKSB7CisJCWRldl9lcnIoZHAtPmRldiwgInVuYWJsZSB0byBjb25maWcgdmlkZW9cbiIpOwor CQlyZXR1cm47CisJfQorCisJaWYgKGNkbl9kcF9zZXRfdmlkZW9fc3RhdHVzKGRwLCBDT05UUk9M X1ZJREVPX1ZBTElEKSkKKwkJcmV0dXJuOworCisJZHAtPmRwbXNfbW9kZSA9IERSTV9NT0RFX0RQ TVNfT047Cit9CisKK3N0YXRpYyB2b2lkIGNkbl9kcF9lbmNvZGVyX21vZGVfc2V0KHN0cnVjdCBk cm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1v ZGUsCisJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZCkKK3sKKwlzdHJ1 Y3QgY2RuX2RwX2RldmljZSAqZHAgPSBlbmNvZGVyX3RvX2RwKGVuY29kZXIpOworCXN0cnVjdCBk cm1fZGlzcGxheV9pbmZvICpkaXNwbGF5X2luZm8gPSAmZHAtPmNvbm5lY3Rvci5kaXNwbGF5X2lu Zm87CisJc3RydWN0IHJvY2tjaGlwX2NydGNfc3RhdGUgKnN0YXRlOworCXN0cnVjdCB2aWRlb19p bmZvICp2aWRlbyA9ICZkcC0+dmlkZW9faW5mbzsKKwlpbnQgcmV0LCB2YWw7CisKKwlzd2l0Y2gg KGRpc3BsYXlfaW5mby0+YnBjKSB7CisJY2FzZSAxNjoKKwljYXNlIDEyOgorCWNhc2UgMTA6CisJ CXZpZGVvLT5jb2xvcl9kZXB0aCA9IDEwOworCQlicmVhazsKKwljYXNlIDY6CisJCXZpZGVvLT5j b2xvcl9kZXB0aCA9IDY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXZpZGVvLT5jb2xvcl9kZXB0 aCA9IDg7CisJCWJyZWFrOworCX0KKworCXZpZGVvLT5jb2xvcl9mbXQgPSBQWExfUkdCOworCisJ dmlkZW8tPnZfc3luY19wb2xhcml0eSA9ICEhKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19O VlNZTkMpOworCXZpZGVvLT5oX3N5bmNfcG9sYXJpdHkgPSAhIShtb2RlLT5mbGFncyAmIERSTV9N T0RFX0ZMQUdfTkhTWU5DKTsKKworCXJldCA9IGRybV9vZl9lbmNvZGVyX2FjdGl2ZV9lbmRwb2lu dF9pZChkcC0+ZGV2LT5vZl9ub2RlLCBlbmNvZGVyKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZf ZXJyKGRwLT5kZXYsICJDb3VsZCBub3QgZ2V0IHZvcCBpZCwgJWQiLCByZXQpOworCQlyZXR1cm47 CisJfQorCisJZGV2X2RiZyhkcC0+ZGV2LCAidm9wICVzIG91dHB1dCB0byBjZG4tZHBcbiIsIChy ZXQpID8gIkxJVCIgOiAiQklHIik7CisJc3RhdGUgPSB0b19yb2NrY2hpcF9jcnRjX3N0YXRlKGVu Y29kZXItPmNydGMtPnN0YXRlKTsKKwlpZiAocmV0KSB7CisJCXZhbCA9IERQX1NFTF9WT1BfTElU IHwgKERQX1NFTF9WT1BfTElUIDw8IDE2KTsKKwkJc3RhdGUtPm91dHB1dF9tb2RlID0gUk9DS0NI SVBfT1VUX01PREVfUDg4ODsKKwl9IGVsc2UgeworCQl2YWwgPSBEUF9TRUxfVk9QX0xJVCA8PCAx NjsKKwkJc3RhdGUtPm91dHB1dF9tb2RlID0gUk9DS0NISVBfT1VUX01PREVfQUFBQTsKKwl9CisJ cmV0ID0gcmVnbWFwX3dyaXRlKGRwLT5ncmYsIERQX1ZPUF9TRUwsIHZhbCk7CisJaWYgKHJldCAh PSAwKQorCQlkZXZfZXJyKGRwLT5kZXYsICJDb3VsZCBub3Qgd3JpdGUgdG8gR1JGOiAlZFxuIiwg cmV0KTsKKworCW1lbWNweSgmZHAtPm1vZGUsIGFkanVzdGVkLCBzaXplb2YoKm1vZGUpKTsKK30K Kworc3RhdGljIHZvaWQgY2RuX2RwX2VuY29kZXJfZW5hYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAq ZW5jb2RlcikKK3sKKwlzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAgPSBlbmNvZGVyX3RvX2RwKGVu Y29kZXIpOworCisJaWYgKGRwLT5kcG1zX21vZGUgIT0gRFJNX01PREVfRFBNU19PTikKKwkJY2Ru X2RwX2NvbW1pdChlbmNvZGVyKTsKK30KKworc3RhdGljIHZvaWQgY2RuX2RwX2VuY29kZXJfZGlz YWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IGNkbl9kcF9kZXZp Y2UgKmRwID0gZW5jb2Rlcl90b19kcChlbmNvZGVyKTsKKworCWlmIChkcC0+ZHBtc19tb2RlICE9 IERSTV9NT0RFX0RQTVNfT0ZGKSB7CisJCWNkbl9kcF9zZXRfdmlkZW9fc3RhdHVzKGRwLCBDT05U Uk9MX1ZJREVPX0lETEUpOworCQlkcC0+ZHBtc19tb2RlID0gRFJNX01PREVfRFBNU19PRkY7CisJ fQorfQorCitzdGF0aWMgaW50CitjZG5fZHBfZW5jb2Rlcl9hdG9taWNfY2hlY2soc3RydWN0IGRy bV9lbmNvZGVyICplbmNvZGVyLAorCQkJICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19z dGF0ZSwKKwkJCSAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSkKK3sK KwlzdHJ1Y3Qgcm9ja2NoaXBfY3J0Y19zdGF0ZSAqcyA9IHRvX3JvY2tjaGlwX2NydGNfc3RhdGUo Y3J0Y19zdGF0ZSk7CisKKwlzLT5vdXRwdXRfbW9kZSA9IFJPQ0tDSElQX09VVF9NT0RFX0FBQUE7 CisJcy0+b3V0cHV0X3R5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQ7CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MgY2Ru X2RwX2VuY29kZXJfaGVscGVyX2Z1bmNzID0geworCS5tb2RlX3NldCA9IGNkbl9kcF9lbmNvZGVy X21vZGVfc2V0LAorCS5lbmFibGUgPSBjZG5fZHBfZW5jb2Rlcl9lbmFibGUsCisJLmRpc2FibGUg PSBjZG5fZHBfZW5jb2Rlcl9kaXNhYmxlLAorCS5hdG9taWNfY2hlY2sgPSBjZG5fZHBfZW5jb2Rl cl9hdG9taWNfY2hlY2ssCit9OworCitzdGF0aWMgc3RydWN0IGRybV9lbmNvZGVyX2Z1bmNzIGNk bl9kcF9lbmNvZGVyX2Z1bmNzID0geworCS5kZXN0cm95ID0gZHJtX2VuY29kZXJfY2xlYW51cCwK K307CisKK3N0YXRpYyBpbnQgY2RuX2RwX2Zpcm13YXJlX2luaXQoc3RydWN0IGNkbl9kcF9kZXZp Y2UgKmRwKQoreworCWludCByZXQ7CisJY29uc3QgdTMyICppcmFtX2RhdGEsICpkcmFtX2RhdGE7 CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyA9IGRwLT5mdzsKKwljb25zdCBzdHJ1Y3QgY2Ru X2Zpcm13YXJlX2hlYWRlciAqaGRyOworCisJaGRyID0gKHN0cnVjdCBjZG5fZmlybXdhcmVfaGVh ZGVyICopZnctPmRhdGE7CisJaWYgKGZ3LT5zaXplICE9IGxlMzJfdG9fY3B1KGhkci0+c2l6ZV9i eXRlcykpIHsKKwkJZGV2X2VycihkcC0+ZGV2LCAiZmlybXdhcmUgaXMgaW52YWxpZFxuIik7CisJ CXJldHVybiAtRUlOVkFMOworCX0KKworCWlyYW1fZGF0YSA9IChjb25zdCB1MzIgKikoZnctPmRh dGEgKyBoZHItPmhlYWRlcl9zaXplKTsKKwlkcmFtX2RhdGEgPSAoY29uc3QgdTMyICopKGZ3LT5k YXRhICsgaGRyLT5oZWFkZXJfc2l6ZSArIGhkci0+aXJhbV9zaXplKTsKKworCXJldCA9IGNkbl9k cF9sb2FkX2Zpcm13YXJlKGRwLCBpcmFtX2RhdGEsIGhkci0+aXJhbV9zaXplLAorCQkJCSAgIGRy YW1fZGF0YSwgaGRyLT5kcmFtX3NpemUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwly ZXQgPSBjZG5fZHBfYWN0aXZlKGRwLCB0cnVlKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZHAt PmRldiwgImFjdGl2ZSB1Y3B1IGZhaWxlZDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJ fQorCisJZHAtPmZ3X2xvYWRlZCA9IDE7CisKKwlyZXR1cm4gY2RuX2RwX2V2ZW50X2NvbmZpZyhk cCk7Cit9CisKK3N0YXRpYyBpbnQgY2RuX2RwX2luaXQoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRw KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRwLT5kZXY7CisJc3RydWN0IGRldmljZV9ub2Rl ICpucCA9IGRldi0+b2Zfbm9kZTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9f cGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IHJldDsK KworCWRwLT5ncmYgPSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKG5wLCAicm9ja2No aXAsZ3JmIik7CisJaWYgKElTX0VSUihkcC0+Z3JmKSkgeworCQlkZXZfZXJyKGRldiwgImNkbi1k cCBuZWVkcyByb2NrY2hpcCxncmYgcHJvcGVydHlcbiIpOworCQlyZXR1cm4gUFRSX0VSUihkcC0+ Z3JmKTsKKwl9CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJD RV9NRU0sIDApOworCWRwLT5yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsK KwlpZiAoSVNfRVJSKGRwLT5yZWdzKSkgeworCQlkZXZfZXJyKGRldiwgImlvcmVtYXAgcmVnIGZh aWxlZFxuIik7CisJCXJldHVybiBQVFJfRVJSKGRwLT5yZWdzKTsKKwl9CisKKwlkcC0+Y29yZV9j bGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAiY29yZS1jbGsiKTsKKwlpZiAoSVNfRVJSKGRwLT5jb3Jl X2NsaykpIHsKKwkJZGV2X2VycihkZXYsICJjYW5ub3QgZ2V0IGNvcmVfY2xrX2RwXG4iKTsKKwkJ cmV0dXJuIFBUUl9FUlIoZHAtPmNvcmVfY2xrKTsKKwl9CisKKwlkcC0+cGNsayA9IGRldm1fY2xr X2dldChkZXYsICJwY2xrIik7CisJaWYgKElTX0VSUihkcC0+cGNsaykpIHsKKwkJZGV2X2Vycihk ZXYsICJjYW5ub3QgZ2V0IHBjbGtcbiIpOworCQlyZXR1cm4gUFRSX0VSUihkcC0+cGNsayk7CisJ fQorCisJZHAtPnNwZGlmX2NsayA9IGRldm1fY2xrX2dldChkZXYsICJzcGRpZiIpOworCWlmIChJ U19FUlIoZHAtPnNwZGlmX2NsaykpIHsKKwkJZGV2X2VycihkZXYsICJjYW5ub3QgZ2V0IHNwZGlm X2Nsa1xuIik7CisJCXJldHVybiBQVFJfRVJSKGRwLT5zcGRpZl9jbGspOworCX0KKworCWRwLT5z cGRpZl9yc3QgPSBkZXZtX3Jlc2V0X2NvbnRyb2xfZ2V0KGRldiwgInNwZGlmIik7CisJaWYgKElT X0VSUihkcC0+c3BkaWZfcnN0KSkgeworCQlkZXZfZXJyKGRldiwgIm5vIHNwZGlmIHJlc2V0IGNv bnRyb2wgZm91bmRcbiIpOworCQlyZXR1cm4gUFRSX0VSUihkcC0+c3BkaWZfcnN0KTsKKwl9CisK KwlkcC0+ZHBtc19tb2RlID0gRFJNX01PREVfRFBNU19PRkY7CisKKwlyZXQgPSBjZG5fZHBfY2xr X2VuYWJsZShkcCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwljZG5fZHBfY2xv Y2tfcmVzZXQoZHApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2RuX2RwX2F1ZGlv X2h3X3BhcmFtcyhzdHJ1Y3QgZGV2aWNlICpkZXYsICB2b2lkICpkYXRhLAorCQkJCSAgc3RydWN0 IGhkbWlfY29kZWNfZGFpZm10ICpkYWlmbXQsCisJCQkJICBzdHJ1Y3QgaGRtaV9jb2RlY19wYXJh bXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAgPSBkZXZfZ2V0X2RydmRh dGEoZGV2KTsKKwlzdHJ1Y3QgYXVkaW9faW5mbyBhdWRpbyA9IHsKKwkJLnNhbXBsZV93aWR0aCA9 IHBhcmFtcy0+c2FtcGxlX3dpZHRoLAorCQkuc2FtcGxlX3JhdGUgPSBwYXJhbXMtPnNhbXBsZV9y YXRlLAorCQkuY2hhbm5lbHMgPSBwYXJhbXMtPmNoYW5uZWxzLAorCX07CisJaW50IHJldDsKKwor CWlmICghZHAtPmVuY29kZXIuY3J0YykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzd2l0Y2ggKGRh aWZtdC0+Zm10KSB7CisJY2FzZSBIRE1JX0kyUzoKKwkJYXVkaW8uZm9ybWF0ID0gQUZNVF9JMlM7 CisJCWJyZWFrOworCWNhc2UgSERNSV9TUERJRjoKKwkJYXVkaW8uZm9ybWF0ID0gQUZNVF9TUERJ RjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycihkZXYsICIlczogSW52YWxpZCBmb3Jt YXQgJWRcbiIsIF9fZnVuY19fLCBkYWlmbXQtPmZtdCk7CisJCXJldHVybiAtRUlOVkFMOworCX0K KworCXJldCA9IGNkbl9kcF9hdWRpb19jb25maWdfc2V0KGRwLCAmYXVkaW8pOworCWlmICghcmV0 KQorCQlkcC0+YXVkaW9faW5mbyA9IGF1ZGlvOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGlj IHZvaWQgY2RuX2RwX2F1ZGlvX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0 YSkKK3sKKwlzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsK KwlpbnQgcmV0ID0gY2RuX2RwX2F1ZGlvX3N0b3AoZHAsICZkcC0+YXVkaW9faW5mbyk7CisKKwlp ZiAoIXJldCkKKwkJZHAtPmF1ZGlvX2luZm8uZm9ybWF0ID0gQUZNVF9VTlVTRUQ7Cit9CisKK3N0 YXRpYyBpbnQgY2RuX2RwX2F1ZGlvX2RpZ2l0YWxfbXV0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZv aWQgKmRhdGEsCisJCQkJICAgICBib29sIGVuYWJsZSkKK3sKKwlzdHJ1Y3QgY2RuX2RwX2Rldmlj ZSAqZHAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiBjZG5fZHBfYXVkaW9fbXV0 ZShkcCwgZW5hYmxlKTsKK30KKworc3RhdGljIGludCBjZG5fZHBfYXVkaW9fZ2V0X2VsZChzdHJ1 Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkJdWludDhfdCAqYnVmLCBzaXplX3QgbGVu KQoreworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwor CXN0cnVjdCBkcm1fbW9kZV9jb25maWcgKmNvbmZpZyA9ICZkcC0+ZW5jb2Rlci5kZXYtPm1vZGVf Y29uZmlnOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJaW50IHJldCA9IC1F Tk9ERVY7CisKKwltdXRleF9sb2NrKCZjb25maWctPm11dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2Vu dHJ5KGNvbm5lY3RvciwgJmNvbmZpZy0+Y29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKKwkJaWYgKCZk cC0+ZW5jb2RlciA9PSBjb25uZWN0b3ItPmVuY29kZXIpIHsKKwkJCW1lbWNweShidWYsIGNvbm5l Y3Rvci0+ZWxkLAorCQkJICAgICAgIG1pbihzaXplb2YoY29ubmVjdG9yLT5lbGQpLCBsZW4pKTsK KwkJCXJldCA9IDA7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZjb25maWctPm11dGV4KTsKKwor CXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRtaV9jb2RlY19vcHMgYXVk aW9fY29kZWNfb3BzID0geworCS5od19wYXJhbXMgPSBjZG5fZHBfYXVkaW9faHdfcGFyYW1zLAor CS5hdWRpb19zaHV0ZG93biA9IGNkbl9kcF9hdWRpb19zaHV0ZG93biwKKwkuZGlnaXRhbF9tdXRl ID0gY2RuX2RwX2F1ZGlvX2RpZ2l0YWxfbXV0ZSwKKwkuZ2V0X2VsZCA9IGNkbl9kcF9hdWRpb19n ZXRfZWxkLAorfTsKKworc3RhdGljIGludCBjZG5fZHBfYXVkaW9fY29kZWNfaW5pdChzdHJ1Y3Qg Y2RuX2RwX2RldmljZSAqZHAsCisJCQkJICAgc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVj dCBoZG1pX2NvZGVjX3BkYXRhIGNvZGVjX2RhdGEgPSB7CisJCS5pMnMgPSAxLAorCQkuc3BkaWYg PSAxLAorCQkub3BzID0gJmF1ZGlvX2NvZGVjX29wcywKKwkJLm1heF9pMnNfY2hhbm5lbHMgPSA4 LAorCX07CisKKwlkcC0+YXVkaW9fcGRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9kYXRh KAorCQkJIGRldiwgSERNSV9DT0RFQ19EUlZfTkFNRSwgUExBVEZPUk1fREVWSURfQVVUTywKKwkJ CSAmY29kZWNfZGF0YSwgc2l6ZW9mKGNvZGVjX2RhdGEpKTsKKworCXJldHVybiBQVFJfRVJSX09S X1pFUk8oZHAtPmF1ZGlvX3BkZXYpOworfQorCitzdGF0aWMgaW50IGNkbl9kcF9nZXRfY2FwX2xh bmVzKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwKKwkJCQlzdHJ1Y3QgZXh0Y29uX2RldiAqZWRl dikKK3sKKwlib29sIGRmcCwgZHB0eDsKKwl1OCBsYW5lczsKKworCWRmcCA9IGV4dGNvbl9nZXRf Y2FibGVfc3RhdGVfKGVkZXYsIEVYVENPTl9VU0JfSE9TVCk7CisJZHB0eCA9IGV4dGNvbl9nZXRf Y2FibGVfc3RhdGVfKGVkZXYsIEVYVENPTl9ESVNQX0RQKTsKKworCWlmIChkZnAgJiYgZHB0eCkK KwkJbGFuZXMgPSAyOworCWVsc2UgaWYgKGRwdHgpCisJCWxhbmVzID0gNDsKKwllbHNlCisJCWxh bmVzID0gMDsKKworCXJldHVybiBsYW5lczsKK30KKworc3RhdGljIGludCBjZG5fZHBfcGh5X3Bv d2VyX2N0cmwoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLAorCQkJCSBzdHJ1Y3QgY2RuX2RwX3Bv cnQgKnBvcnQsIGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCBwaHkgKnBoeSA9IHBvcnQtPnBoeTsK KwlpbnQgcmV0OworCWludCBjb3VudCA9IDA7CisKKwl3aGlsZSAocGh5LT5wb3dlcl9jb3VudCA+ IDApIHsKKwkJcmV0ID0gcGh5X3Bvd2VyX29mZihwaHkpOworCQlpZiAocmV0KQorCQkJcmV0dXJu IHJldDsKKwkJY291bnQrKzsKKwl9CisKKwljb3VudCA9IGVuYWJsZSA/IGNvdW50ICsgMSA6IGNv dW50IC0gMTsKKwl3aGlsZSAoY291bnQtLSA+IDApIHsKKwkJcmV0ID0gcGh5X3Bvd2VyX29uKHBo eSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXBvcnQtPnBoeV9zdGF0dXMg PSBlbmFibGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2RuX2RwX3BkX2V2ZW50KHN0 cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCQkgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lk ICpwcml2KQoreworCXN0cnVjdCBjZG5fZHBfcG9ydCAqcG9ydDsKKworCXBvcnQgPSBjb250YWlu ZXJfb2YobmIsIHN0cnVjdCBjZG5fZHBfcG9ydCwgZXZlbnRfbmIpOworCisJc2NoZWR1bGVfZGVs YXllZF93b3JrKCZwb3J0LT5ldmVudF93cSwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IHZvaWQgY2RuX2RwX3BkX2V2ZW50X3dxKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlz dHJ1Y3QgY2RuX2RwX3BvcnQgKnBvcnQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGNkbl9k cF9wb3J0LAorCQkJCQkJZXZlbnRfd3Eud29yayk7CisJc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRw ID0gcG9ydC0+ZHA7CisJdTggbmV3X2NhcF9sYW5lczsKKwlpbnQgcmV0OworCXU4IGk7CisKKwlu ZXdfY2FwX2xhbmVzID0gY2RuX2RwX2dldF9jYXBfbGFuZXMoZHAsIHBvcnQtPmV4dGNvbik7CisK KwlpZiAobmV3X2NhcF9sYW5lcyA9PSBwb3J0LT5jYXBfbGFuZXMpIHsKKwkJZGV2X3dhcm4oZHAt PmRldiwgImxhbmVzIGNvdW50IGRvZXMgbm90IGNoYW5nZTogJWRcbiIsCisJCQkgbmV3X2NhcF9s YW5lcyk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIW5ld19jYXBfbGFuZXMpIHsKKwkJcmV0ID0g Y2RuX2RwX3BoeV9wb3dlcl9jdHJsKGRwLCBwb3J0LCAwKTsKKwkJaWYgKHJldCkgeworCQkJZGV2 X2VycihkcC0+ZGV2LCAicGh5IHBvd2VyIG9mZiBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJCXJldHVy bjsKKwkJfQorCQlwb3J0LT5waHlfc3RhdHVzID0gMDsKKwkJcG9ydC0+Y2FwX2xhbmVzID0gbmV3 X2NhcF9sYW5lczsKKwkJZm9yIChpID0gMDsgaSA8IGRwLT5wb3J0czsgaSsrKSB7CisJCQlpZiAo ZHAtPnBvcnRbaV0tPnBoeV9zdGF0dXMgPT0gMSkKKwkJCQlyZXR1cm47CisJCX0KKworCQlkcC0+ aHBkX3N0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOworCQlkcm1faGVscGVy X2hwZF9pcnFfZXZlbnQoZHAtPmRybV9kZXYpOworCQljZG5fZHBfYWN0aXZlKGRwLCBmYWxzZSk7 CisJCXJldHVybjsKKwl9CisKKwkvKiBpZiBvdGhlciBwaHkgaXMgcnVubmluZywgZG8gbm90IHRv dWNoIHRoZSBocGRfc3RhdHVzLCBhbmQgcmV0dXJuICovCisJZm9yIChpID0gMDsgaSA8IGRwLT5w b3J0czsgaSsrKSB7CisJCWlmIChkcC0+cG9ydFtpXS0+cGh5X3N0YXR1cyA9PSAxKSB7CisJCQlk ZXZfd2FybihkcC0+ZGV2LCAiYnVzeSwgcGh5WyVkXSBpcyBydW5uaW5nIiwKKwkJCQkgZHAtPnBv cnRbaV0tPmlkKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWlmICghZHAtPmZ3X2xvYWRlZCkg eworCQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZkcC0+ZncsIENETl9EUF9GSVJNV0FSRSwgZHAt PmRldik7CisJCWlmIChyZXQgPT0gLUVOT0VOVCAmJiBkcC0+Zndfd2FpdCA8PSBNQVhfRldfV0FJ VF9TRUNTKSB7CisJCQl1bnNpZ25lZCBsb25nIHRpbWUgPSBtc2Vjc190b19qaWZmaWVzKGRwLT5m d193YWl0ICogSFopOworCisJCQkvKgorCQkJICogSWYgY2FuIG5vdCBmaW5kIHRoZSBmaWxlLCBy ZXRyeSB0byBsb2FkIHRoZSBmaXJtd2FyZQorCQkJICogaW4gMSBzZWNvbmQsIGlmIHN0aWxsIGZh aWxlZCBhZnRlciAxIG1pbnV0ZSwgZ2l2ZSB1cC4KKwkJCSAqLworCQkJc2NoZWR1bGVfZGVsYXll ZF93b3JrKCZwb3J0LT5ldmVudF93cSwgdGltZSk7CisJCQlkZXZfd2FybihkcC0+ZGV2LCAicmV0 cnkgdG8gcmVxdWVzdCBmaXJtd2FyZSBpbiAlZFNcbiIsCisJCQkJIGRwLT5md193YWl0KTsKKwkJ CWRwLT5md193YWl0ICo9IDI7CisJCQlyZXR1cm47CisJCX0gZWxzZSBpZiAocmV0KSB7CisJCQlk ZXZfZXJyKGRwLT5kZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBmaXJtd2FyZTogJWRcbiIsCisJCQkJ cmV0KTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWlmIChkcC0+ZndfbG9hZGVkKQorCQljZG5f ZHBfYWN0aXZlKGRwLCB0cnVlKTsKKworCXJldCA9IGNkbl9kcF9waHlfcG93ZXJfY3RybChkcCwg cG9ydCwgMSk7CisJaWYgKHJldCkgeworCQlpZiAoIWRwLT5md19sb2FkZWQpCisJCQlyZWxlYXNl X2Zpcm13YXJlKGRwLT5mdyk7CisJCWRldl9lcnIoZHAtPmRldiwgInBoeSBwb3dlciBvbiBmYWls ZWQ6ICVkXG4iLCByZXQpOworCQlyZXR1cm47CisJfQorCisJaWYgKCFkcC0+ZndfbG9hZGVkKSB7 CisJCXJldCA9IGNkbl9kcF9maXJtd2FyZV9pbml0KGRwKTsKKwkJcmVsZWFzZV9maXJtd2FyZShk cC0+ZncpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKGRwLT5kZXYsICJmaXJtd2FyZSBpbml0 IGZhaWxlZDogJWQiLCByZXQpOworCQkJZ290byBlcnJfZmlybXdhcmU7CisJCX0KKwl9CisKKwkv KiByZWFkIGhwZCBzdGF0dXMgZmFpbGVkLCBvciB0aGUgaHBkIGRvZXMgbm90IGV4aXN0LiAqLwor CXJldCA9IGNkbl9kcF9nZXRfaHBkX3N0YXR1cyhkcCk7CisJaWYgKHJldCA8PSAwKSB7CisJCWRl dl9lcnIoZHAtPmRldiwgImdldCBocGQgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gZXJyX2Zp cm13YXJlOworCX0KKworCXJldCA9IGNkbl9kcF9zZXRfaG9zdF9jYXAoZHAsIG5ld19jYXBfbGFu ZXMpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkcC0+ZGV2LCAic2V0IGhvc3QgY2FwYWJpbGl0 aWVzIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2Zpcm13YXJlOworCX0KKworCS8q CisJICogTmF0aXZlIHJlYWQgd2l0aCByZXRyeSBmb3IgbGluayBzdGF0dXMgYW5kIHJlY2VpdmVy IGNhcGFiaWxpdHkgcmVhZHMKKwkgKiBmb3IgY2FzZXMgd2hlcmUgdGhlIHNpbmsgbWF5IHN0aWxs IGJlIGFzbGVlcC4KKwkgKgorCSAqIFNpbmtzIGFyZSAqc3VwcG9zZWQqIHRvIGNvbWUgdXAgd2l0 aGluIDFtcyBmcm9tIGFuIG9mZiBzdGF0ZSwgYnV0CisJICogd2UncmUgYWxzbyBzdXBwb3NlZCB0 byByZXRyeSAzIHRpbWVzIHBlciB0aGUgc3BlYy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzsg aSsrKSB7CisJCXJldCA9IGNkbl9kcF9kcGNkX3JlYWQoZHAsIDB4MDAwLCBkcC0+ZHBjZCwKKwkJ CQkgICAgICAgRFBfUkVDRUlWRVJfQ0FQX1NJWkUpOworCQlpZiAoIXJldCkgeworCQkJZGV2X2Ri ZyhkcC0+ZGV2LCAiZ2V0IGRwY2Qgc3VjY2VzcyFcbiIpOworCQkJcG9ydC0+Y2FwX2xhbmVzID0g bmV3X2NhcF9sYW5lczsKKwkJCWRwLT5ocGRfc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c19jb25u ZWN0ZWQ7CisJCQlkcm1faGVscGVyX2hwZF9pcnFfZXZlbnQoZHAtPmRybV9kZXYpOworCQkJcmV0 dXJuOworCQl9CisJCXVzbGVlcF9yYW5nZSgxMDAwLCAxMDUwKTsKKwl9CisKKwlkZXZfZXJyKGRw LT5kZXYsICJnZXQgZHBjZCBmYWlsZWQ6ICVkIiwgcmV0KTsKKworZXJyX2Zpcm13YXJlOgorCXJl dCA9IGNkbl9kcF9waHlfcG93ZXJfY3RybChkcCwgcG9ydCwgMCk7CisJaWYgKHJldCkKKwkJZGV2 X2VycihkcC0+ZGV2LCAicGh5IHBvd2VyIG9mZiBmYWlsZWQ6ICVkIiwgcmV0KTsKKwlpZiAoZHAt PmZ3X2xvYWRlZCkKKwkJY2RuX2RwX2FjdGl2ZShkcCwgZmFsc2UpOworfQorCitzdGF0aWMgaW50 IGNkbl9kcF9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAor CQkgICAgICAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAgPSBkZXZf Z2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CisJc3RydWN0 IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKwlzdHJ1Y3QgY2RuX2RwX3BvcnQgKnBvcnQ7CisJ c3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYgPSBkYXRhOworCWludCByZXQsIGk7CisKKwlyZXQg PSBjZG5fZHBfaW5pdChkcCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlkcC0+ ZHJtX2RldiA9IGRybV9kZXY7CisJZHAtPmhwZF9zdGF0dXMgPSBjb25uZWN0b3Jfc3RhdHVzX2Rp c2Nvbm5lY3RlZDsKKwlkcC0+Zndfd2FpdCA9IDE7CisKKwllbmNvZGVyID0gJmRwLT5lbmNvZGVy OworCisJZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MgPSBkcm1fb2ZfZmluZF9wb3NzaWJsZV9jcnRj cyhkcm1fZGV2LAorCQkJCQkJCSAgICAgZGV2LT5vZl9ub2RlKTsKKwlEUk1fREVCVUdfS01TKCJw b3NzaWJsZV9jcnRjcyA9IDB4JXhcbiIsIGVuY29kZXItPnBvc3NpYmxlX2NydGNzKTsKKworCXJl dCA9IGRybV9lbmNvZGVyX2luaXQoZHJtX2RldiwgZW5jb2RlciwgJmNkbl9kcF9lbmNvZGVyX2Z1 bmNzLAorCQkJICAgICAgIERSTV9NT0RFX0VOQ09ERVJfVE1EUywgTlVMTCk7CisJaWYgKHJldCkg eworCQlEUk1fRVJST1IoImZhaWxlZCB0byBpbml0aWFsaXplIGVuY29kZXIgd2l0aCBkcm1cbiIp OworCQlyZXR1cm4gcmV0OworCX0KKworCWRybV9lbmNvZGVyX2hlbHBlcl9hZGQoZW5jb2Rlciwg JmNkbl9kcF9lbmNvZGVyX2hlbHBlcl9mdW5jcyk7CisKKwljb25uZWN0b3IgPSAmZHAtPmNvbm5l Y3RvcjsKKwljb25uZWN0b3ItPnBvbGxlZCA9IERSTV9DT05ORUNUT1JfUE9MTF9IUEQ7CisJY29u bmVjdG9yLT5kcG1zID0gRFJNX01PREVfRFBNU19PRkY7CisKKwlyZXQgPSBkcm1fY29ubmVjdG9y X2luaXQoZHJtX2RldiwgY29ubmVjdG9yLAorCQkJCSAmY2RuX2RwX2F0b21pY19jb25uZWN0b3Jf ZnVuY3MsCisJCQkJIERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydCk7CisJaWYgKHJldCkg eworCQlEUk1fRVJST1IoImZhaWxlZCB0byBpbml0aWFsaXplIGNvbm5lY3RvciB3aXRoIGRybVxu Iik7CisJCWdvdG8gZXJyX2ZyZWVfZW5jb2RlcjsKKwl9CisKKwlkcm1fY29ubmVjdG9yX2hlbHBl cl9hZGQoY29ubmVjdG9yLCAmY2RuX2RwX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCisJcmV0 ID0gZHJtX21vZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKGNvbm5lY3RvciwgZW5jb2Rlcik7 CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBhdHRhY2ggY29ubmVjdG9yIGFu ZCBlbmNvZGVyXG4iKTsKKwkJZ290byBlcnJfZnJlZV9jb25uZWN0b3I7CisJfQorCisJY2RuX2Rw X2F1ZGlvX2NvZGVjX2luaXQoZHAsIGRldik7CisKKworCWZvciAoaSA9IDA7IGkgPCBkcC0+cG9y dHM7IGkrKykgeworCQlwb3J0ID0gZHAtPnBvcnRbaV07CisKKwkJcG9ydC0+ZXZlbnRfbmIubm90 aWZpZXJfY2FsbCA9IGNkbl9kcF9wZF9ldmVudDsKKwkJSU5JVF9ERUxBWUVEX1dPUksoJnBvcnQt PmV2ZW50X3dxLCBjZG5fZHBfcGRfZXZlbnRfd3EpOworCQlyZXQgPSBleHRjb25fcmVnaXN0ZXJf bm90aWZpZXIocG9ydC0+ZXh0Y29uLCBFWFRDT05fRElTUF9EUCwKKwkJCQkJICAgICAgICZwb3J0 LT5ldmVudF9uYik7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoZGV2LCAicmVnaXRzdGVyIEVY VENPTl9ESVNQX0RQIG5vdGlmaWVyIGVyclxuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJ aWYgKGV4dGNvbl9nZXRfY2FibGVfc3RhdGVfKHBvcnQtPmV4dGNvbiwgRVhUQ09OX0RJU1BfRFAp KQorCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwb3J0LT5ldmVudF93cSwgMCk7CisJfQorCisJ cmV0dXJuIDA7CisKK2Vycl9mcmVlX2Nvbm5lY3RvcjoKKwlkcm1fY29ubmVjdG9yX2NsZWFudXAo Y29ubmVjdG9yKTsKK2Vycl9mcmVlX2VuY29kZXI6CisJZHJtX2VuY29kZXJfY2xlYW51cChlbmNv ZGVyKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBjZG5fZHBfdW5iaW5kKHN0cnVj dCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLCB2b2lkICpkYXRhKQoreworCXN0 cnVjdCBjZG5fZHBfZGV2aWNlICpkcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBk cm1fZW5jb2RlciAqZW5jb2RlciA9ICZkcC0+ZW5jb2RlcjsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yID0gJmRwLT5jb25uZWN0b3I7CisJc3RydWN0IGNkbl9kcF9wb3J0ICpwb3J0 OworCWludCBpOworCisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZHAtPmF1ZGlvX3BkZXYp OworCWNkbl9kcF9lbmNvZGVyX2Rpc2FibGUoZW5jb2Rlcik7CisJZW5jb2Rlci0+ZnVuY3MtPmRl c3Ryb3koZW5jb2Rlcik7CisJY29ubmVjdG9yLT5mdW5jcy0+ZGVzdHJveShjb25uZWN0b3IpOwor CisJZm9yIChpID0gMDsgaSA8IGRwLT5wb3J0czsgaSsrKSB7CisJCXBvcnQgPSBkcC0+cG9ydFtp XTsKKwkJZXh0Y29uX3VucmVnaXN0ZXJfbm90aWZpZXIocG9ydC0+ZXh0Y29uLCBFWFRDT05fRElT UF9EUCwKKwkJCQkJICAgJnBvcnQtPmV2ZW50X25iKTsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgY29tcG9uZW50X29wcyBjZG5fZHBfY29tcG9uZW50X29wcyA9IHsKKwkuYmluZCA9IGNk bl9kcF9iaW5kLAorCS51bmJpbmQgPSBjZG5fZHBfdW5iaW5kLAorfTsKKworc3RhdGljIGludCBj ZG5fZHBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2 aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNo OworCXN0cnVjdCBjZG5fZHBfZGF0YSAqZHBfZGF0YTsKKwlzdHJ1Y3QgY2RuX2RwX3BvcnQgKnBv cnQ7CisJc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwOworCXN0cnVjdCBleHRjb25fZGV2ICpleHRj b247CisJc3RydWN0IHBoeSAqcGh5OworCWludCBpOworCisJZHAgPSBkZXZtX2t6YWxsb2MoZGV2 LCBzaXplb2YoKmRwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkcCkKKwkJcmV0dXJuIC1FTk9NRU07 CisJZHAtPmRldiA9IGRldjsKKworCW1hdGNoID0gb2ZfbWF0Y2hfbm9kZShjZG5fZHBfZHRfaWRz LCBwZGV2LT5kZXYub2Zfbm9kZSk7CisJZHBfZGF0YSA9IChzdHJ1Y3QgY2RuX2RwX2RhdGEgKilt YXRjaC0+ZGF0YTsKKworCWZvciAoaSA9IDA7IGkgPCBkcF9kYXRhLT5tYXhfcGh5OyBpKyspIHsK KwkJZXh0Y29uID0gZXh0Y29uX2dldF9lZGV2X2J5X3BoYW5kbGUoZGV2LCBpKTsKKwkJcGh5ID0g ZGV2bV9vZl9waHlfZ2V0X2J5X2luZGV4KGRldiwgZGV2LT5vZl9ub2RlLCBpKTsKKworCQlpZiAo UFRSX0VSUihleHRjb24pID09IC1FUFJPQkVfREVGRVIgfHwKKwkJICAgIFBUUl9FUlIocGh5KSA9 PSAtRVBST0JFX0RFRkVSKQorCQkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisKKwkJaWYgKElTX0VS UihleHRjb24pIHx8IElTX0VSUihwaHkpKQorCQkJY29udGludWU7CisKKwkJcG9ydCA9IGRldm1f a3phbGxvYyhkZXYsIHNpemVvZigqcG9ydCksIEdGUF9LRVJORUwpOworCQlpZiAoIWRwKQorCQkJ cmV0dXJuIC1FTk9NRU07CisKKwkJcG9ydC0+ZXh0Y29uID0gZXh0Y29uOworCQlwb3J0LT5waHkg PSBwaHk7CisJCXBvcnQtPmRwID0gZHA7CisJCXBvcnQtPmlkID0gaTsKKwkJZHAtPnBvcnRbZHAt PnBvcnRzKytdID0gcG9ydDsKKwl9CisKKwlpZiAoIWRwLT5wb3J0cykgeworCQlkZXZfZXJyKGRl diwgIm1pc3NpbmcgZXh0Y29uIG9yIHBoeVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwor CWRldl9zZXRfZHJ2ZGF0YShkZXYsIGRwKTsKKworCXJldHVybiBjb21wb25lbnRfYWRkKGRldiwg JmNkbl9kcF9jb21wb25lbnRfb3BzKTsKK30KKworc3RhdGljIGludCBjZG5fZHBfcmVtb3ZlKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY29tcG9uZW50X2RlbCgmcGRldi0+ZGV2 LCAmY2RuX2RwX2NvbXBvbmVudF9vcHMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1 Y3QgcGxhdGZvcm1fZHJpdmVyIGNkbl9kcF9kcml2ZXIgPSB7CisJLnByb2JlID0gY2RuX2RwX3By b2JlLAorCS5yZW1vdmUgPSBjZG5fZHBfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCSAgIC5uYW1l ID0gImNkbi1kcCIsCisJCSAgIC5vd25lciA9IFRISVNfTU9EVUxFLAorCQkgICAub2ZfbWF0Y2hf dGFibGUgPSBvZl9tYXRjaF9wdHIoY2RuX2RwX2R0X2lkcyksCisJfSwKK307CisKK21vZHVsZV9w bGF0Zm9ybV9kcml2ZXIoY2RuX2RwX2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1IoIkNocmlzIFpo b25nIDx6eXdAcm9jay1jaGlwcy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oImNkbiBEUCBE cml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9yb2NrY2hpcC9jZG4tZHAtY29yZS5oIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlw L2Nkbi1kcC1jb3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg0MjRm OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAtY29y ZS5oCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IENocmlzIFpo b25nIDx6eXdAcm9jay1jaGlwcy5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgUk9DS0NISVAs IEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgor ICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9DRE5fRFBfQ09SRV9ICisjZGVm aW5lIF9DRE5fRFBfQ09SRV9ICisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRy bS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2RwX2hlbHBlci5oPgorI2lu Y2x1ZGUgPGRybS9kcm1fcGFuZWwuaD4KKyNpbmNsdWRlICJyb2NrY2hpcF9kcm1fZHJ2LmgiCisK KyNkZWZpbmUgTUFYX1BIWQkJMgorCitlbnVtIGF1ZGlvX2Zvcm1hdCB7CisJQUZNVF9JMlMgPSAw LAorCUFGTVRfU1BESUYgPSAxLAorCUFGTVRfVU5VU0VELAorfTsKKworc3RydWN0IGF1ZGlvX2lu Zm8geworCWVudW0gYXVkaW9fZm9ybWF0IGZvcm1hdDsKKwlpbnQgc2FtcGxlX3JhdGU7CisJaW50 IGNoYW5uZWxzOworCWludCBzYW1wbGVfd2lkdGg7Cit9OworCitlbnVtIHZpY19weGxfZW5jb2Rp bmdfZm9ybWF0IHsKKwlQWExfUkdCID0gMHgxLAorCVlDQkNSXzRfNF80ID0gMHgyLAorCVlDQkNS XzRfMl8yID0gMHg0LAorCVlDQkNSXzRfMl8wID0gMHg4LAorCVlfT05MWSA9IDB4MTAsCit9Owor CitzdHJ1Y3QgdmlkZW9faW5mbyB7CisJYm9vbCBoX3N5bmNfcG9sYXJpdHk7CisJYm9vbCB2X3N5 bmNfcG9sYXJpdHk7CisJYm9vbCBpbnRlcmxhY2VkOworCWludCBjb2xvcl9kZXB0aDsKKwllbnVt IHZpY19weGxfZW5jb2RpbmdfZm9ybWF0IGNvbG9yX2ZtdDsKK307CisKK3N0cnVjdCBjZG5fZmly bXdhcmVfaGVhZGVyIHsKKwl1MzIgc2l6ZV9ieXRlczsgLyogc2l6ZSBvZiB0aGUgZW50aXJlIGhl YWRlcitpbWFnZShzKSBpbiBieXRlcyAqLworCXUzMiBoZWFkZXJfc2l6ZTsgLyogc2l6ZSBvZiBq dXN0IHRoZSBoZWFkZXIgaW4gYnl0ZXMgKi8KKwl1MzIgaXJhbV9zaXplOyAvKiBzaXplIG9mIGly YW0gKi8KKwl1MzIgZHJhbV9zaXplOyAvKiBzaXplIG9mIGRyYW0gKi8KK307CisKK3N0cnVjdCBj ZG5fZHBfcG9ydCB7CisJc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwOworCXN0cnVjdCBub3RpZmll cl9ibG9jayBldmVudF9uYjsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIGV2ZW50X3dxOworCXN0cnVj dCBleHRjb25fZGV2ICpleHRjb247CisJc3RydWN0IHBoeSAqcGh5OworCXU4IGNhcF9sYW5lczsK Kwlib29sIHBoeV9zdGF0dXM7CisJdTggaWQ7Cit9OworCitzdHJ1Y3QgY2RuX2RwX2RldmljZSB7 CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2OworCXN0 cnVjdCBkcm1fY29ubmVjdG9yIGNvbm5lY3RvcjsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgZW5jb2Rl cjsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBtb2RlOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKmF1ZGlvX3BkZXY7CisKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OwkvKiBjZG4gZHAg ZmlybXdhcmUgKi8KKwl1bnNpZ25lZCBpbnQgZndfdmVyc2lvbjsJLyogY2RuIGZ3IHZlcnNpb24g Ki8KKwl1MzIgZndfd2FpdDsKKwlib29sIGZ3X2xvYWRlZDsKKwlib29sIGZ3X2FjdGl2ZWQ7CisJ dm9pZCBfX2lvbWVtICpyZWdzOworCXN0cnVjdCByZWdtYXAgKmdyZjsKKwlzdHJ1Y3QgY2xrICpj b3JlX2NsazsKKwlzdHJ1Y3QgY2xrICpwY2xrOworCXN0cnVjdCBjbGsgKnNwZGlmX2NsazsKKwlz dHJ1Y3QgcmVzZXRfY29udHJvbCAqc3BkaWZfcnN0OworCXN0cnVjdCBhdWRpb19pbmZvIGF1ZGlv X2luZm87CisJc3RydWN0IHZpZGVvX2luZm8gdmlkZW9faW5mbzsKKwlzdHJ1Y3QgZHJtX2RwX2xp bmsgbGluazsKKwlzdHJ1Y3QgY2RuX2RwX3BvcnQgKnBvcnRbTUFYX1BIWV07CisJdTggcG9ydHM7 CisKKwl1OCBkcGNkW0RQX1JFQ0VJVkVSX0NBUF9TSVpFXTsKKwllbnVtIGRybV9jb25uZWN0b3Jf c3RhdHVzIGhwZF9zdGF0dXM7CisJaW50IGRwbXNfbW9kZTsKKwlib29sIHNpbmtfaGFzX2F1ZGlv OworfTsKKyNlbmRpZiAgLyogX0NETl9EUF9DT1JFX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9yb2NrY2hpcC9jZG4tZHAtcmVnLmMgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAv Y2RuLWRwLXJlZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNTVkYWMK LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRwLXJlZy5j CkBAIC0wLDAgKzEsOTE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSBGdXpob3UgUm9ja2NoaXAg RWxlY3Ryb25pY3MgQ28uTHRkCisgKiBBdXRob3I6IENocmlzIFpob25nIDx6eXdAcm9jay1jaGlw cy5jb20+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3Bp ZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICog VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVk ZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxs aW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3Jl c2V0Lmg+CisKKyNpbmNsdWRlICJjZG4tZHAtY29yZS5oIgorI2luY2x1ZGUgImNkbi1kcC1yZWcu aCIKKworI2RlZmluZSBDRE5fRFBfU1BESUZfQ0xLCQkyMDAwMDAwMDAKKyNkZWZpbmUgRldfQUxJ VkVfVElNRU9VVF9VUwkJMTAwMDAwMAorI2RlZmluZSBNQUlMQk9YX1JFVFJZX1VTCQkxMDAwCisj ZGVmaW5lIE1BSUxCT1hfVElNRU9VVF9VUwkJNTAwMDAwMAorI2RlZmluZSBMSU5LX1RSQUlOSU5H X1JFVFJZX01TCQkyMAorI2RlZmluZSBMSU5LX1RSQUlOSU5HX1RJTUVPVVRfTVMJNTAwCisKK3Zv aWQgY2RuX2RwX3NldF9md19jbGsoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCB1MzIgY2xrKQor eworCXdyaXRlbChjbGsgLyAxMDAwMDAwLCBkcC0+cmVncyArIFNXX0NMS19IKTsKK30KKwordm9p ZCBjZG5fZHBfY2xvY2tfcmVzZXQoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKQoreworCXUzMiB2 YWw7CisKKwl2YWwgPSBEUFRYX0ZSTVJfREFUQV9DTEtfUlNUTl9FTiB8CisJICAgICAgRFBUWF9G Uk1SX0RBVEFfQ0xLX0VOIHwKKwkgICAgICBEUFRYX1BIWV9EQVRBX1JTVE5fRU4gfAorCSAgICAg IERQVFhfUEhZX0RBVEFfQ0xLX0VOIHwKKwkgICAgICBEUFRYX1BIWV9DSEFSX1JTVE5fRU4gfAor CSAgICAgIERQVFhfUEhZX0NIQVJfQ0xLX0VOIHwKKwkgICAgICBTT1VSQ0VfQVVYX1NZU19DTEtf UlNUTl9FTiB8CisJICAgICAgU09VUkNFX0FVWF9TWVNfQ0xLX0VOIHwKKwkgICAgICBEUFRYX1NZ U19DTEtfUlNUTl9FTiB8CisJICAgICAgRFBUWF9TWVNfQ0xLX0VOIHwKKwkgICAgICBDRkdfRFBU WF9WSUZfQ0xLX1JTVE5fRU4gfAorCSAgICAgIENGR19EUFRYX1ZJRl9DTEtfRU47CisJd3JpdGVs KHZhbCwgZHAtPnJlZ3MgKyBTT1VSQ0VfRFBUWF9DQVIpOworCisJdmFsID0gU09VUkNFX1BIWV9S U1ROX0VOIHwgU09VUkNFX1BIWV9DTEtfRU47CisJd3JpdGVsKHZhbCwgZHAtPnJlZ3MgKyBTT1VS Q0VfUEhZX0NBUik7CisKKwl2YWwgPSBTT1VSQ0VfUEtUX1NZU19SU1ROX0VOIHwKKwkgICAgICBT T1VSQ0VfUEtUX1NZU19DTEtfRU4gfAorCSAgICAgIFNPVVJDRV9QS1RfREFUQV9SU1ROX0VOIHwK KwkgICAgICBTT1VSQ0VfUEtUX0RBVEFfQ0xLX0VOOworCXdyaXRlbCh2YWwsIGRwLT5yZWdzICsg U09VUkNFX1BLVF9DQVIpOworCisJdmFsID0gU1BESUZfQ0RSX0NMS19SU1ROX0VOIHwKKwkgICAg ICBTUERJRl9DRFJfQ0xLX0VOIHwKKwkgICAgICBTT1VSQ0VfQUlGX1NZU19SU1ROX0VOIHwKKwkg ICAgICBTT1VSQ0VfQUlGX1NZU19DTEtfRU4gfAorCSAgICAgIFNPVVJDRV9BSUZfQ0xLX1JTVE5f RU4gfAorCSAgICAgIFNPVVJDRV9BSUZfQ0xLX0VOOworCXdyaXRlbCh2YWwsIGRwLT5yZWdzICsg U09VUkNFX0FJRl9DQVIpOworCisJdmFsID0gU09VUkNFX0NJUEhFUl9TWVNURU1fQ0xLX1JTVE5f RU4gfAorCSAgICAgIFNPVVJDRV9DSVBIRVJfU1lTX0NMS19FTiB8CisJICAgICAgU09VUkNFX0NJ UEhFUl9DSEFSX0NMS19SU1ROX0VOIHwKKwkgICAgICBTT1VSQ0VfQ0lQSEVSX0NIQVJfQ0xLX0VO OworCXdyaXRlbCh2YWwsIGRwLT5yZWdzICsgU09VUkNFX0NJUEhFUl9DQVIpOworCisJdmFsID0g U09VUkNFX0NSWVBUT19TWVNfQ0xLX1JTVE5fRU4gfAorCSAgICAgIFNPVVJDRV9DUllQVE9fU1lT X0NMS19FTjsKKwl3cml0ZWwodmFsLCBkcC0+cmVncyArIFNPVVJDRV9DUllQVE9fQ0FSKTsKKwor CXZhbCA9IH4oTUFJTEJPWF9JTlRfTUFTS19CSVQgfCBQSUZfSU5UX01BU0tfQklUKSAmIEFMTF9J TlRfTUFTSzsKKwl3cml0ZWwodmFsLCBkcC0+cmVncyArIEFQQl9JTlRfTUFTSyk7Cit9CisKK3N0 YXRpYyBpbnQgY2RuX2RwX21haWxib3hfcmVhZChzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIGJv b2wgZm9yY2UpCit7CisJaW50IHZhbCwgcmV0OworCisJaWYgKCFkcC0+ZndfYWN0aXZlZCAmJiAh Zm9yY2UpCisJCXJldHVybiAtRVBFUk07CisKKwlyZXQgPSByZWFkeF9wb2xsX3RpbWVvdXQocmVh ZGwsIGRwLT5yZWdzICsgTUFJTEJPWF9FTVBUWV9BRERSLAorCQkJCSB2YWwsICF2YWwsIE1BSUxC T1hfUkVUUllfVVMsCisJCQkJIE1BSUxCT1hfVElNRU9VVF9VUyk7CisJaWYgKHJldCA8IDApIHsK KwkJZGV2X2VycihkcC0+ZGV2LCAiZmFpbGVkIHRvIHJlYWQgbWFpbGJveCwga2VlcCBhbGl2ZSA9 ICV4XG4iLAorCQkJcmVhZGwoZHAtPnJlZ3MgKyBLRUVQX0FMSVZFKSk7CisJCXJldHVybiByZXQ7 CisJfQorCisJcmV0dXJuIHJlYWRsKGRwLT5yZWdzICsgTUFJTEJPWDBfUkRfREFUQSkgJiAweGZm OworfQorCitzdGF0aWMgaW50IGNkcF9kcF9tYWlsYm94X3dyaXRlKHN0cnVjdCBjZG5fZHBfZGV2 aWNlICpkcCwgdTggdmFsLCBib29sIGZvcmNlKQoreworCWludCByZXQsIGZ1bGw7CisKKwlpZiAo IWRwLT5md19hY3RpdmVkICYmICFmb3JjZSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCXJldCA9IHJl YWR4X3BvbGxfdGltZW91dChyZWFkbCwgZHAtPnJlZ3MgKyBNQUlMQk9YX0ZVTExfQUREUiwKKwkJ CQkgZnVsbCwgIWZ1bGwsIE1BSUxCT1hfUkVUUllfVVMsCisJCQkJIE1BSUxCT1hfVElNRU9VVF9V Uyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkcC0+ZGV2LCAibWFpbGJveCBpcyBmdWxs LCBrZWVwIGFsaXZlID0gJXhcbiIsCisJCQlyZWFkbChkcC0+cmVncyArIEtFRVBfQUxJVkUpKTsK KwkJcmV0dXJuIHJldDsKKwl9CisKKwl3cml0ZWwodmFsLCBkcC0+cmVncyArIE1BSUxCT1gwX1dS X0RBVEEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2RuX2RwX21haWxib3hfdmFs aWRhdGVfcmVjZWl2ZShzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsCisJCQkJCSAgIHU4IG1vZHVs ZV9pZCwgdTggb3Bjb2RlLAorCQkJCQkgICB1OCByZXFfc2l6ZSkKK3sKKwl1MzIgbWJveF9zaXpl LCBpOworCXU4IGhlYWRlcls0XTsKKwlpbnQgcmV0OworCisJLyogcmVhZCB0aGUgaGVhZGVyIG9m IHRoZSBtZXNzYWdlICovCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgIHsKKwkJcmV0ID0gY2Ru X2RwX21haWxib3hfcmVhZChkcCwgMCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsK KworCQloZWFkZXJbaV0gPSByZXQ7CisJfQorCisJbWJveF9zaXplID0gKGhlYWRlclsyXSA8PCA4 KSB8IGhlYWRlclszXTsKKworCWlmIChvcGNvZGUgIT0gaGVhZGVyWzBdIHx8IG1vZHVsZV9pZCAh PSBoZWFkZXJbMV0gfHwKKwkgICAgcmVxX3NpemUgIT0gbWJveF9zaXplKSB7CisJCWRldl9lcnIo ZHAtPmRldiwgIm1haWxib3ggdmFsaWRhdGUgZmFpbGVkIik7CisKKwkJLyoKKwkJICogSWYgdGhl IG1lc3NhZ2UgaW4gbWFpbGJveCBpcyBub3Qgd2hhdCB3ZSB3YW50LCB3ZSBuZWVkIHRvCisJCSAq IGNsZWFyIHRoZSBtYWlsYm94IGJ5IHJlYWQuCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgbWJv eF9zaXplOyBpKyspCisJCQlpZiAoY2RuX2RwX21haWxib3hfcmVhZChkcCwgMCkgPCAwKQorCQkJ CWJyZWFrOworCisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50IGNkbl9kcF9tYWlsYm94X3JlYWRfcmVjZWl2ZShzdHJ1Y3QgY2RuX2RwX2RldmljZSAq ZHAsCisJCQkJICAgICAgIHU4ICpidWZmLCB1OCBidWZmX3NpemUpCit7CisJdTMyIGk7CisJaW50 IHJldDsKKworCWZvciAoaSA9IDA7IGkgPCBidWZmX3NpemU7IGkrKykgeworCQlyZXQgPSBjZG5f ZHBfbWFpbGJveF9yZWFkKGRwLCAwKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0Owor CisJCWJ1ZmZbaV0gPSByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2Ru X2RwX21haWxib3hfc2VuZChzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIHU4IG1vZHVsZV9pZCwK KwkJCSAgICAgICB1OCBvcGNvZGUsIHUxNiBzaXplLCB1OCAqbWVzc2FnZSkKK3sKKwl1OCBoZWFk ZXJbNF07CisJaW50IHJldCwgaTsKKworCWhlYWRlclswXSA9IG9wY29kZTsKKwloZWFkZXJbMV0g PSBtb2R1bGVfaWQ7CisJaGVhZGVyWzJdID0gKHNpemUgPj4gOCkgJiAweGZmOworCWhlYWRlclsz XSA9IHNpemUgJiAweGZmOworCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlyZXQgPSBj ZHBfZHBfbWFpbGJveF93cml0ZShkcCwgaGVhZGVyW2ldLCAwKTsKKwkJaWYgKHJldCkKKwkJCXJl dHVybiByZXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQlyZXQgPSBj ZHBfZHBfbWFpbGJveF93cml0ZShkcCwgbWVzc2FnZVtpXSwgMCk7CisJCWlmIChyZXQpIHsKKwkJ CWRldl9lcnIoZHAtPmRldiwgIm1haWxib3ggc2VuZCBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJCXJl dHVybiByZXQ7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjZG5fZHBf cmVnX3dyaXRlKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgdTE2IGFkZHIsIHUzMiB2YWwpCit7 CisJdTggbXNnWzZdOworCisJbXNnWzBdID0gKGFkZHIgPj4gOCkgJiAweGZmOworCW1zZ1sxXSA9 IGFkZHIgJiAweGZmOworCW1zZ1syXSA9ICh2YWwgPj4gMjQpICYgMHhmZjsKKwltc2dbM10gPSAo dmFsID4+IDE2KSAmIDB4ZmY7CisJbXNnWzRdID0gKHZhbCA+PiA4KSAmIDB4ZmY7CisJbXNnWzVd ID0gdmFsICYgMHhmZjsKKwlyZXR1cm4gY2RuX2RwX21haWxib3hfc2VuZChkcCwgTUJfTU9EVUxF X0lEX0RQX1RYLCBEUFRYX1dSSVRFX1JFR0lTVEVSLAorCQkJCSAgIHNpemVvZihtc2cpLCBtc2cp OworfQorCitpbnQgY2RuX2RwX2RwY2RfcmVhZChzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIHUz MiBhZGRyLCB1OCAqZGF0YSwgdTE2IGxlbikKK3sKKwl1OCBtc2dbNV0sIHJlZ1s1XTsKKwlpbnQg cmV0OworCisJbXNnWzBdID0gKGxlbiA+PiA4KSAmIDB4ZmY7CisJbXNnWzFdID0gbGVuICYgMHhm ZjsKKwltc2dbMl0gPSAoYWRkciA+PiAxNikgJiAweGZmOworCW1zZ1szXSA9IChhZGRyID4+IDgp ICYgMHhmZjsKKwltc2dbNF0gPSBhZGRyICYgMHhmZjsKKwljZG5fZHBfbWFpbGJveF9zZW5kKGRw LCBNQl9NT0RVTEVfSURfRFBfVFgsIERQVFhfUkVBRF9EUENELAorCQkJICAgIHNpemVvZihtc2cp LCBtc2cpOworCisJcmV0ID0gY2RuX2RwX21haWxib3hfdmFsaWRhdGVfcmVjZWl2ZShkcCwgTUJf TU9EVUxFX0lEX0RQX1RYLAorCQkJCQkgICAgICBEUFRYX1JFQURfRFBDRCwKKwkJCQkJICAgICAg c2l6ZW9mKHJlZykgKyBsZW4pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBj ZG5fZHBfbWFpbGJveF9yZWFkX3JlY2VpdmUoZHAsIHJlZywgc2l6ZW9mKHJlZykpOworCWlmIChy ZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gY2RuX2RwX21haWxib3hfcmVhZF9yZWNlaXZl KGRwLCBkYXRhLCBsZW4pOworfQorCitpbnQgY2RuX2RwX2RwY2Rfd3JpdGUoc3RydWN0IGNkbl9k cF9kZXZpY2UgKmRwLCB1MzIgYWRkciwgdTggdmFsdWUpCit7CisJdTggbXNnWzZdLCByZWdbNV07 CisJaW50IHJldDsKKworCW1zZ1swXSA9IDA7CisJbXNnWzFdID0gMTsKKwltc2dbMl0gPSAoYWRk ciA+PiAxNikgJiAweGZmOworCW1zZ1szXSA9IChhZGRyID4+IDgpICYgMHhmZjsKKwltc2dbNF0g PSBhZGRyICYgMHhmZjsKKwltc2dbNV0gPSB2YWx1ZTsKKwljZG5fZHBfbWFpbGJveF9zZW5kKGRw LCBNQl9NT0RVTEVfSURfRFBfVFgsIERQVFhfV1JJVEVfRFBDRCwKKwkJCSAgICBzaXplb2YobXNn KSwgbXNnKTsKKworCXJldCA9IGNkbl9kcF9tYWlsYm94X3ZhbGlkYXRlX3JlY2VpdmUoZHAsIE1C X01PRFVMRV9JRF9EUF9UWCwKKwkJCQkJICAgICAgRFBUWF9XUklURV9EUENELCBzaXplb2YocmVn KSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGNkbl9kcF9tYWlsYm94X3Jl YWRfcmVjZWl2ZShkcCwgcmVnLCBzaXplb2YocmVnKSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJl dDsKKworCWlmIChhZGRyICE9IChyZWdbMl0gPDwgMTYgfCByZWdbM10gPDwgOCB8IHJlZ1s0XSkp IHsKKwkJZGV2X2VycihkcC0+ZGV2LCAid3JpdGUgZHBjZCBmYWlsZWRcbiIpOworCQlyZXR1cm4g LUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGNkbl9kcF9sb2FkX2Zpcm13YXJl KHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgY29uc3QgdTMyICppX21lbSwKKwkJCSB1MzIgaV9z aXplLCBjb25zdCB1MzIgKmRfbWVtLCB1MzIgZF9zaXplKQoreworCWludCBpLCByZXQ7CisJdTMy IHJlZzsKKworCS8qIHJlc2V0IHVjcHUgYmVmb3JlIGxvYWQgZmlybXdhcmUqLworCXdyaXRlbChB UEJfSVJBTV9QQVRIIHwgQVBCX0RSQU1fUEFUSCB8IEFQQl9YVF9SRVNFVCwKKwkgICAgICAgZHAt PnJlZ3MgKyBBUEJfQ1RSTCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaV9zaXplOyBpICs9IDQpCisJ CXdyaXRlbCgqaV9tZW0rKywgZHAtPnJlZ3MgKyBBRERSX0lNRU0gKyBpKTsKKworCWZvciAoaSA9 IDA7IGkgPCBkX3NpemU7IGkgKz0gNCkKKwkJd3JpdGVsKCpkX21lbSsrLCBkcC0+cmVncyArIEFE RFJfRE1FTSArIGkpOworCisJLyogdW4tcmVzZXQgdWNwdSAqLworCXdyaXRlbCgwLCBkcC0+cmVn cyArIEFQQl9DVFJMKTsKKworCS8qIGNoZWNrIHRoZSBrZWVwIGFsaXZlIHJlZ2lzdGVyIHRvIG1h a2Ugc3VyZSBmdyB3b3JraW5nICovCisJcmV0ID0gcmVhZHhfcG9sbF90aW1lb3V0KHJlYWRsLCBk cC0+cmVncyArIEtFRVBfQUxJVkUsCisJCQkJIHJlZywgcmVnLCAyMDAwLCBGV19BTElWRV9USU1F T1VUX1VTKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRwLT5kZXYsICJmYWlsZWQgdG8g bG9hZGVkIHRoZSBGVyByZWcgPSAleFxuIiwgcmVnKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQor CisJcmVnID0gcmVhZGwoZHAtPnJlZ3MgKyBWRVJfTCkgJiAweGZmOworCWRwLT5md192ZXJzaW9u ID0gcmVnOworCXJlZyA9IHJlYWRsKGRwLT5yZWdzICsgVkVSX0gpICYgMHhmZjsKKwlkcC0+Zndf dmVyc2lvbiB8PSByZWcgPDwgODsKKwlyZWcgPSByZWFkbChkcC0+cmVncyArIFZFUl9MSUJfTF9B RERSKSAmIDB4ZmY7CisJZHAtPmZ3X3ZlcnNpb24gfD0gcmVnIDw8IDE2OworCXJlZyA9IHJlYWRs KGRwLT5yZWdzICsgVkVSX0xJQl9IX0FERFIpICYgMHhmZjsKKwlkcC0+ZndfdmVyc2lvbiB8PSBy ZWcgPDwgMjQ7CisKKwlkZXZfZGJnKGRwLT5kZXYsICJmaXJtd2FyZSB2ZXJzaW9uOiAleFxuIiwg ZHAtPmZ3X3ZlcnNpb24pOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBjZG5fZHBfYWN0aXZlKHN0 cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgYm9vbCBlbmFibGUpCit7CisJdTggbXNnWzVdOworCWlu dCByZXQsIGk7CisKKwltc2dbMF0gPSBHRU5FUkFMX01BSU5fQ09OVFJPTDsKKwltc2dbMV0gPSBN Ql9NT0RVTEVfSURfR0VORVJBTDsKKwltc2dbMl0gPSAwOworCW1zZ1szXSA9IDE7CisJbXNnWzRd ID0gZW5hYmxlID8gRldfQUNUSVZFIDogRldfU1RBTkRCWTsKKworCWZvciAoaSA9IDA7IGkgPCBz aXplb2YobXNnKTsgaSsrKSB7CisJCXJldCA9IGNkcF9kcF9tYWlsYm94X3dyaXRlKGRwLCBtc2db aV0sIDEpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiByZWFkIHRoZSBm aXJtd2FyZSBzdGF0ZSAqLworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YobXNnKTsgaSsrKSAgewor CQlyZXQgPSBjZG5fZHBfbWFpbGJveF9yZWFkKGRwLCAxKTsKKwkJaWYgKHJldCA8IDApCisJCQly ZXR1cm4gcmV0OworCisJCW1zZ1tpXSA9IHJldDsKKwl9CisKKwlkcC0+ZndfYWN0aXZlZCA9ICht c2dbNF0gPT0gRldfQUNUSVZFKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGNkbl9kcF9yZWdfd3Jp dGVfYml0KHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgdTE2IGFkZHIsIHU4IHN0YXJ0X2JpdCwK KwkJCSB1OCBiaXRzX25vLCB1MzIgdmFsKQoreworCXU4IGZpZWxkWzhdOworCisJZmllbGRbMF0g PSAoYWRkciA+PiA4KSAmIDB4ZmY7CisJZmllbGRbMV0gPSBhZGRyICYgMHhmZjsKKwlmaWVsZFsy XSA9IHN0YXJ0X2JpdDsKKwlmaWVsZFszXSA9IGJpdHNfbm87CisJZmllbGRbNF0gPSAodmFsID4+ IDI0KSAmIDB4ZmY7CisJZmllbGRbNV0gPSAodmFsID4+IDE2KSAmIDB4ZmY7CisJZmllbGRbNl0g PSAodmFsID4+IDgpICYgMHhmZjsKKwlmaWVsZFs3XSA9IHZhbCAmIDB4ZmY7CisKKwlyZXR1cm4g Y2RuX2RwX21haWxib3hfc2VuZChkcCwgTUJfTU9EVUxFX0lEX0RQX1RYLCBEUFRYX1dSSVRFX0ZJ RUxELAorCQkJCSAgIHNpemVvZihmaWVsZCksIGZpZWxkKTsKK30KKworaW50IGNkbl9kcF9zZXRf aG9zdF9jYXAoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCB1OCBsYW5lcykKK3sKKwl1OCBtc2db OF07CisJaW50IHJldDsKKworCW1zZ1swXSA9IENETl9EUF9NQVhfTElOS19SQVRFOworCW1zZ1sx XSA9IGxhbmVzOworCW1zZ1syXSA9IFZPTFRBR0VfTEVWRUxfMjsKKwltc2dbM10gPSBQUkVfRU1Q SEFTSVNfTEVWRUxfMzsKKwltc2dbNF0gPSBQVFMxIHwgUFRTMiB8IFBUUzMgfCBQVFM0OworCW1z Z1s1XSA9IEZBU1RfTFRfTk9UX1NVUFBPUlQ7CisJbXNnWzZdID0gTEFORV9NQVBQSU5HX05PUk1B TDsKKwltc2dbN10gPSBFTkhBTkNFRDsKKworCXJldCA9IGNkbl9kcF9tYWlsYm94X3NlbmQoZHAs IE1CX01PRFVMRV9JRF9EUF9UWCwKKwkJCQkgIERQVFhfU0VUX0hPU1RfQ0FQQUJJTElUSUVTLAor CQkJCSAgc2l6ZW9mKG1zZyksIG1zZyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJl dCA9IGNkbl9kcF9yZWdfd3JpdGUoZHAsIERQX0FVWF9TV0FQX0lOVkVSU0lPTl9DT05UUk9MLAor CQkJICAgICAgIEFVWF9IT1NUX0lOVkVSVCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwor CXJldHVybiAwOworfQorCitpbnQgY2RuX2RwX2V2ZW50X2NvbmZpZyhzdHJ1Y3QgY2RuX2RwX2Rl dmljZSAqZHApCit7CisJdTggbXNnWzVdOworCisJbWVtc2V0KG1zZywgMCwgc2l6ZW9mKG1zZykp OworCisJbXNnWzBdID0gRFBUWF9FVkVOVF9FTkFCTEVfSFBEIHwgRFBUWF9FVkVOVF9FTkFCTEVf VFJBSU5JTkc7CisKKwlyZXR1cm4gY2RuX2RwX21haWxib3hfc2VuZChkcCwgTUJfTU9EVUxFX0lE X0RQX1RYLCBEUFRYX0VOQUJMRV9FVkVOVCwKKwkJCQkgICBzaXplb2YobXNnKSwgbXNnKTsKK30K KwordTMyIGNkbl9kcF9nZXRfZXZlbnQoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKQoreworCXJl dHVybiByZWFkbChkcC0+cmVncyArIFNXX0VWRU5UUzApOworfQorCitpbnQgY2RuX2RwX2dldF9o cGRfc3RhdHVzKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCkKK3sKKwl1OCBzdGF0dXM7CisJaW50 IHJldDsKKworCXJldCA9IGNkbl9kcF9tYWlsYm94X3NlbmQoZHAsIE1CX01PRFVMRV9JRF9EUF9U WCwgRFBUWF9IUERfU1RBVEUsCisJCQkJICAwLCBOVUxMKTsKKwlpZiAocmV0KQorCQlyZXR1cm4g cmV0OworCisJcmV0ID0gY2RuX2RwX21haWxib3hfdmFsaWRhdGVfcmVjZWl2ZShkcCwgTUJfTU9E VUxFX0lEX0RQX1RYLAorCQkJCQkgICAgICBEUFRYX0hQRF9TVEFURSwgc2l6ZW9mKHN0YXR1cykp OworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBjZG5fZHBfbWFpbGJveF9yZWFk X3JlY2VpdmUoZHAsICZzdGF0dXMsIHNpemVvZihzdGF0dXMpKTsKKwlpZiAocmV0KQorCQlyZXR1 cm4gcmV0OworCisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IGNkbl9kcF9nZXRfZWRpZF9ibG9j ayh2b2lkICpkYXRhLCB1OCAqZWRpZCwKKwkJCSAgdW5zaWduZWQgaW50IGJsb2NrLCBzaXplX3Qg bGVuZ3RoKQoreworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCA9IGRhdGE7CisJdTggbXNnWzJd LCByZWdbMl07CisJaW50IHJldDsKKworCW1zZ1swXSA9IGJsb2NrIC8gMjsKKwltc2dbMV0gPSBi bG9jayAlIDI7CisKKwlyZXQgPSBjZG5fZHBfbWFpbGJveF9zZW5kKGRwLCBNQl9NT0RVTEVfSURf RFBfVFgsIERQVFhfR0VUX0VESUQsCisJCQkJICBzaXplb2YobXNnKSwgbXNnKTsKKwlpZiAocmV0 KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gY2RuX2RwX21haWxib3hfdmFsaWRhdGVfcmVjZWl2 ZShkcCwgTUJfTU9EVUxFX0lEX0RQX1RYLAorCQkJCQkgICAgICBEUFRYX0dFVF9FRElELAorCQkJ CQkgICAgICBzaXplb2YocmVnKSArIGxlbmd0aCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsK KworCXJldCA9IGNkbl9kcF9tYWlsYm94X3JlYWRfcmVjZWl2ZShkcCwgcmVnLCBzaXplb2YocmVn KSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGNkbl9kcF9tYWlsYm94X3Jl YWRfcmVjZWl2ZShkcCwgZWRpZCwgbGVuZ3RoKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0Owor CisJaWYgKHJlZ1swXSAhPSBsZW5ndGggfHwgcmVnWzFdICE9IGJsb2NrIC8gMikgeworCQlkZXZf ZXJyKGRwLT5kZXYsICJlZGlkIGJsb2NrIHNpemUgZXJyXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7 CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBjZG5fZHBfdHJhaW5pbmdfc3RhcnQoc3RydWN0 IGNkbl9kcF9kZXZpY2UgKmRwKQoreworCXU4IG1zZywgZXZlbnRbMl07CisJdW5zaWduZWQgbG9u ZyB0aW1lb3V0OworCWludCByZXQ7CisKKwltc2cgPSBMSU5LX1RSQUlOSU5HX1JVTjsKKworCS8q IHN0YXJ0IHRyYWluaW5nICovCisJcmV0ID0gY2RuX2RwX21haWxib3hfc2VuZChkcCwgTUJfTU9E VUxFX0lEX0RQX1RYLCBEUFRYX1RSQUlOSU5HX0NPTlRST0wsCisJCQkJICBzaXplb2YobXNnKSwg Jm1zZyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXRpbWVvdXQgPSBqaWZmaWVzICsg bXNlY3NfdG9famlmZmllcyhMSU5LX1RSQUlOSU5HX1RJTUVPVVRfTVMpOworCXdoaWxlICh0aW1l X2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkgeworCQltc2xlZXAoTElOS19UUkFJTklOR19SRVRS WV9NUyk7CisJCXJldCA9IGNkbl9kcF9tYWlsYm94X3NlbmQoZHAsIE1CX01PRFVMRV9JRF9EUF9U WCwKKwkJCQkJICBEUFRYX1JFQURfRVZFTlQsIDAsIE5VTEwpOworCQlpZiAocmV0KQorCQkJcmV0 dXJuIHJldDsKKworCQlyZXQgPSBjZG5fZHBfbWFpbGJveF92YWxpZGF0ZV9yZWNlaXZlKGRwLCBN Ql9NT0RVTEVfSURfRFBfVFgsCisJCQkJCQkgICAgICBEUFRYX1JFQURfRVZFTlQsCisJCQkJCQkg ICAgICBzaXplb2YoZXZlbnQpKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0 ID0gY2RuX2RwX21haWxib3hfcmVhZF9yZWNlaXZlKGRwLCBldmVudCwgc2l6ZW9mKGV2ZW50KSk7 CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCWlmIChldmVudFsxXSAmIEVRX1BIQVNF X0ZJTklTSEVEKQorCQkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC1FVElNRURPVVQ7Cit9CisK K2ludCBjZG5fZHBfZ2V0X3RyYWluaW5nX3N0YXR1cyhzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAp Cit7CisJdTggc3RhdHVzWzEwXTsKKwlpbnQgcmV0OworCisJcmV0ID0gY2RuX2RwX21haWxib3hf c2VuZChkcCwgTUJfTU9EVUxFX0lEX0RQX1RYLCBEUFRYX1JFQURfTElOS19TVEFULAorCQkJCSAg MCwgTlVMTCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGNkbl9kcF9tYWls Ym94X3ZhbGlkYXRlX3JlY2VpdmUoZHAsIE1CX01PRFVMRV9JRF9EUF9UWCwKKwkJCQkJICAgICAg RFBUWF9SRUFEX0xJTktfU1RBVCwKKwkJCQkJICAgICAgc2l6ZW9mKHN0YXR1cykpOworCWlmIChy ZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBjZG5fZHBfbWFpbGJveF9yZWFkX3JlY2VpdmUo ZHAsIHN0YXR1cywgc2l6ZW9mKHN0YXR1cykpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisK KwlkcC0+bGluay5yYXRlID0gc3RhdHVzWzBdOworCWRwLT5saW5rLm51bV9sYW5lcyA9IHN0YXR1 c1sxXTsKKworCXJldHVybiAwOworfQorCitpbnQgY2RuX2RwX3NldF92aWRlb19zdGF0dXMoc3Ry dWN0IGNkbl9kcF9kZXZpY2UgKmRwLCBpbnQgYWN0aXZlKQoreworCXU4IG1zZzsKKworCW1zZyA9 ICEhYWN0aXZlOworCisJcmV0dXJuIGNkbl9kcF9tYWlsYm94X3NlbmQoZHAsIE1CX01PRFVMRV9J RF9EUF9UWCwgRFBUWF9TRVRfVklERU8sCisJCQkJICAgc2l6ZW9mKG1zZyksICZtc2cpOworfQor CitzdGF0aWMgaW50IGNkbl9kcF9nZXRfbXNhX21pc2Moc3RydWN0IHZpZGVvX2luZm8gKnZpZGVv LAorCQkJICAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCXU4IHZhbFsy XTsKKwl1MzIgbXNhX21pc2M7CisKKwlzd2l0Y2ggKHZpZGVvLT5jb2xvcl9mbXQpIHsKKwljYXNl IFBYTF9SR0I6CisJY2FzZSBZX09OTFk6CisJCXZhbFswXSA9IDA7CisJCWJyZWFrOworCS8qIHNl dCBZVVYgZGVmYXVsdCBjb2xvciBzcGFjZSBjb252ZXJzaW9uIHRvIEJUNjAxICovCisJY2FzZSBZ Q0JDUl80XzRfNDoKKwkJdmFsWzBdID0gNiArIEJUXzYwMSAqIDg7CisJCWJyZWFrOworCWNhc2Ug WUNCQ1JfNF8yXzI6CisJCXZhbFswXSA9IDUgKyBCVF82MDEgKiA4OworCQlicmVhazsKKwljYXNl IFlDQkNSXzRfMl8wOgorCQl2YWxbMF0gPSA1OworCQlicmVhazsKKwl9OworCisJc3dpdGNoICh2 aWRlby0+Y29sb3JfZGVwdGgpIHsKKwljYXNlIDY6CisJCXZhbFsxXSA9IDA7CisJCWJyZWFrOwor CWNhc2UgODoKKwkJdmFsWzFdID0gMTsKKwkJYnJlYWs7CisJY2FzZSAxMDoKKwkJdmFsWzFdID0g MjsKKwkJYnJlYWs7CisJY2FzZSAxMjoKKwkJdmFsWzFdID0gMzsKKwkJYnJlYWs7CisJY2FzZSAx NjoKKwkJdmFsWzFdID0gNDsKKwkJYnJlYWs7CisJfTsKKworCW1zYV9taXNjID0gMiAqIHZhbFsw XSArIDMyICogdmFsWzFdICsKKwkJICAgKCh2aWRlby0+Y29sb3JfZm10ID09IFlfT05MWSkgPyAo MSA8PCAxNCkgOiAwKTsKKworCXJldHVybiBtc2FfbWlzYzsKK30KKworaW50IGNkbl9kcF9jb25m aWdfdmlkZW8oc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKQoreworCXN0cnVjdCB2aWRlb19pbmZv ICp2aWRlbyA9ICZkcC0+dmlkZW9faW5mbzsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9k ZSA9ICZkcC0+bW9kZTsKKwl1NjQgc3ltYm9sLCB0bXA7CisJdTMyIHZhbCwgbGlua19yYXRlOwor CXU4IGJpdF9wZXJfcGl4OworCXU4IHR1X3NpemVfcmVnID0gVFVfU0laRTsKKwlpbnQgcmV0Owor CisJYml0X3Blcl9waXggPSAodmlkZW8tPmNvbG9yX2ZtdCA9PSBZQ0JDUl80XzJfMikgPworCQkg ICAgICAodmlkZW8tPmNvbG9yX2RlcHRoICogMikgOiAodmlkZW8tPmNvbG9yX2RlcHRoICogMyk7 CisKKwlsaW5rX3JhdGUgPSBkcm1fZHBfYndfY29kZV90b19saW5rX3JhdGUoZHAtPmxpbmsucmF0 ZSkgLyAxMDAwOworCisJdmFsID0gVklGX0JZUEFTU19JTlRFUkxBQ0U7CisJcmV0ID0gY2RuX2Rw X3JlZ193cml0ZShkcCwgQk5EX0hTWU5DMlZTWU5DLCB2YWwpOworCWlmIChyZXQpCisJCXJldHVy biByZXQ7CisKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBIU1lOQzJWU1lOQ19QT0xfQ1RS TCwgMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qCisJICogZ2V0IGEgYmVzdCB0 dV9zaXplIGFuZCB2YWxpZCBzeW1ib2w6CisJICogMS4gY2hvc2UgTGNsayBmcmVxKDE2Mk1oeiwg MjcwTWh6LCA1NDBNaHopLCBzZXQgVFUgdG8gMzIKKwkgKiAyLiBjYWxjdWxhdGUgVlModmFsaWQg c3ltYm9sKSA9IFRVICogUGNsayAqIEJwcCAvIChMY2xrICogTGFuZXMpCisJICogMy4gaWYgVlMg PiAqLjg1IG9yIFZTIDwgKi4xIG9yIFZTIDwgMiBvciBUVSA8IFZTICsgNCwgdGhlbiBzZXQKKwkg KiAgICBUVSArPSAyIGFuZCByZXBlYXQgMm5kIHN0ZXAuCisJICovCisJZG8geworCQl0dV9zaXpl X3JlZyArPSAyOworCQl0bXAgPSB0dV9zaXplX3JlZyAqIG1vZGUtPmNsb2NrICogYml0X3Blcl9w aXg7CisJCXRtcCAvPSBkcC0+bGluay5udW1fbGFuZXMgKiBsaW5rX3JhdGUgKiA4OworCQlzeW1i b2wgPSB0bXAgLyAxMDAwOworCX0gd2hpbGUgKChzeW1ib2wgPD0gMSkgfHwgKHR1X3NpemVfcmVn IC0gc3ltYm9sIDwgNCkgfHwKKwkJICh0bXAgJSAxMDAwID4gODUwKSB8fCAodG1wICUgMTAwMCA8 IDEwMCkpOworCisJdmFsID0gc3ltYm9sICsgKHR1X3NpemVfcmVnIDw8IDgpOworCXJldCA9IGNk bl9kcF9yZWdfd3JpdGUoZHAsIERQX0ZSQU1FUl9UVSwgdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1 cm4gcmV0OworCisJLyogc2V0IHRoZSBGSUZPIEJ1ZmZlciBzaXplICovCisJdmFsID0gKChtb2Rl LT5jbG9jayAqIChzeW1ib2wgKyAxKSAvIDEwMDApICsgbGlua19yYXRlKTsKKwl2YWwgLz0gKGRw LT5saW5rLm51bV9sYW5lcyAqIGxpbmtfcmF0ZSk7CisJdmFsID0gOCAqIChzeW1ib2wgKyAxKSAv IGJpdF9wZXJfcGl4IC0gdmFsOworCXZhbCArPSAyOworCXJldCA9IGNkbl9kcF9yZWdfd3JpdGUo ZHAsIERQX1ZDX1RBQkxFKDE1KSwgdmFsKTsKKworCXN3aXRjaCAodmlkZW8tPmNvbG9yX2RlcHRo KSB7CisJY2FzZSA2OgorCQl2YWwgPSBCQ1NfNjsKKwkJYnJlYWs7CisJY2FzZSA4OgorCQl2YWwg PSBCQ1NfODsKKwkJYnJlYWs7CisJY2FzZSAxMDoKKwkJdmFsID0gQkNTXzEwOworCQlicmVhazsK KwljYXNlIDEyOgorCQl2YWwgPSBCQ1NfMTI7CisJCWJyZWFrOworCWNhc2UgMTY6CisJCXZhbCA9 IEJDU18xNjsKKwkJYnJlYWs7CisJfTsKKworCXZhbCArPSB2aWRlby0+Y29sb3JfZm10IDw8IDg7 CisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZShkcCwgRFBfRlJBTUVSX1BYTF9SRVBSLCB2YWwpOwor CWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwl2YWwgPSB2aWRlby0+aF9zeW5jX3BvbGFyaXR5 ID8gRFBfRlJBTUVSX1NQX0hTUCA6IDA7CisJdmFsIHw9IHZpZGVvLT52X3N5bmNfcG9sYXJpdHkg PyBEUF9GUkFNRVJfU1BfVlNQIDogMDsKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBEUF9G UkFNRVJfU1AsIHZhbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXZhbCA9IChtb2Rl LT5oc3luY19zdGFydCAtIG1vZGUtPmhkaXNwbGF5KSA8PCAxNjsKKwl2YWwgfD0gbW9kZS0+aHRv dGFsIC0gbW9kZS0+aHN5bmNfZW5kOworCXJldCA9IGNkbl9kcF9yZWdfd3JpdGUoZHAsIERQX0ZS T05UX0JBQ0tfUE9SQ0gsIHZhbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXZhbCA9 IG1vZGUtPmhkaXNwbGF5ICogYml0X3Blcl9waXggLyA4OworCXJldCA9IGNkbl9kcF9yZWdfd3Jp dGUoZHAsIERQX0JZVEVfQ09VTlQsIHZhbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwor CXZhbCA9IG1vZGUtPmh0b3RhbCB8ICgobW9kZS0+aHRvdGFsIC0gbW9kZS0+aHN5bmNfc3RhcnQp IDw8IDE2KTsKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBNU0FfSE9SSVpPTlRBTF8wLCB2 YWwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwl2YWwgPSBtb2RlLT5oc3luY19lbmQg LSBtb2RlLT5oc3luY19zdGFydDsKKwl2YWwgfD0gKG1vZGUtPmhkaXNwbGF5IDw8IDE2KSB8ICh2 aWRlby0+aF9zeW5jX3BvbGFyaXR5IDw8IDE1KTsKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRw LCBNU0FfSE9SSVpPTlRBTF8xLCB2YWwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwl2 YWwgPSBtb2RlLT52dG90YWw7CisJdmFsIHw9ICgobW9kZS0+dnRvdGFsIC0gbW9kZS0+dnN5bmNf c3RhcnQpIDw8IDE2KTsKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBNU0FfVkVSVElDQUxf MCwgdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJdmFsID0gbW9kZS0+dnN5bmNf ZW5kIC0gbW9kZS0+dnN5bmNfc3RhcnQ7CisJdmFsIHw9IG1vZGUtPnZkaXNwbGF5IDw8IDE2IHwg KHZpZGVvLT52X3N5bmNfcG9sYXJpdHkgPDwgMTUpOworCXJldCA9IGNkbl9kcF9yZWdfd3JpdGUo ZHAsIE1TQV9WRVJUSUNBTF8xLCB2YWwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwl2 YWwgPSBjZG5fZHBfZ2V0X21zYV9taXNjKHZpZGVvLCBtb2RlKTsKKwlyZXQgPSBjZG5fZHBfcmVn X3dyaXRlKGRwLCBNU0FfTUlTQywgdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJ cmV0ID0gY2RuX2RwX3JlZ193cml0ZShkcCwgU1RSRUFNX0NPTkZJRywgMSk7CisJaWYgKHJldCkK KwkJcmV0dXJuIHJldDsKKworCXZhbCA9IG1vZGUtPmhzeW5jX2VuZCAtIG1vZGUtPmhzeW5jX3N0 YXJ0OworCXZhbCB8PSAobW9kZS0+aGRpc3BsYXkgPDwgMTYpOworCXJldCA9IGNkbl9kcF9yZWdf d3JpdGUoZHAsIERQX0hPUklaT05UQUwsIHZhbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsK KworCXZhbCA9IG1vZGUtPnZ0b3RhbDsKKwl2YWwgLT0gKG1vZGUtPnZ0b3RhbCAtIG1vZGUtPnZk aXNwbGF5KTsKKwl2YWwgfD0gKG1vZGUtPnZ0b3RhbCAtIG1vZGUtPnZzeW5jX3N0YXJ0KSA8PCAx NjsKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBEUF9WRVJUSUNBTF8wLCB2YWwpOworCWlm IChyZXQpCisJCXJldHVybiByZXQ7CisKKwl2YWwgPSBtb2RlLT52dG90YWw7CisJcmV0ID0gY2Ru X2RwX3JlZ193cml0ZShkcCwgRFBfVkVSVElDQUxfMSwgdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1 cm4gcmV0OworCisJdmFsID0gIDA7CisJcmV0dXJuIGNkbl9kcF9yZWdfd3JpdGVfYml0KGRwLCBE UF9WQl9JRCwgMiwgMSwgdmFsKTsKK30KKworaW50IGNkbl9kcF9hdWRpb19zdG9wKHN0cnVjdCBj ZG5fZHBfZGV2aWNlICpkcCwgc3RydWN0IGF1ZGlvX2luZm8gKmF1ZGlvKQoreworCXUzMiB2YWw7 CisJaW50IHJldDsKKworCXJldCA9IGNkbl9kcF9yZWdfd3JpdGUoZHAsIEFVRElPX1BBQ0tfQ09O VFJPTCwgMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXZhbCA9IFNQRElGX0FWR19T RUwgfCBTUERJRl9KSVRURVJfQllQQVNTOworCXZhbCB8PSBTUERJRl9GSUZPX01JRF9SQU5HRSgw eGUwKTsKKwl2YWwgfD0gU1BESUZfSklUVEVSX1RIUlNIKDB4ZTApOworCXZhbCB8PSBTUERJRl9K SVRURVJfQVZHX1dJTig3KTsKKwl3cml0ZWwodmFsLCBkcC0+cmVncyArIFNQRElGX0NUUkxfQURE Uik7CisKKwkvKiBjbGVhcm4gdGhlIGF1ZGlvIGNvbmZpZyBhbmQgcmVzZXQgKi8KKwl3cml0ZWwo MCwgZHAtPnJlZ3MgKyBBVURJT19TUkNfQ05UTCk7CisJd3JpdGVsKDAsIGRwLT5yZWdzICsgQVVE SU9fU1JDX0NORkcpOworCXdyaXRlbChBVURJT19TV19SU1QsIGRwLT5yZWdzICsgQVVESU9fU1JD X0NOVEwpOworCXdyaXRlbCgwLCBkcC0+cmVncyArIEFVRElPX1NSQ19DTlRMKTsKKworCS8qIHJl c2V0IHNtcGwycGNrdCBjb21wb25lbnQgICovCisJd3JpdGVsKDAsIGRwLT5yZWdzICsgU01QTDJQ S1RfQ05UTCk7CisJd3JpdGVsKEFVRElPX1NXX1JTVCwgZHAtPnJlZ3MgKyBTTVBMMlBLVF9DTlRM KTsKKwl3cml0ZWwoMCwgZHAtPnJlZ3MgKyBTTVBMMlBLVF9DTlRMKTsKKworCS8qIHJlc2V0IEZJ Rk8gKi8KKwl3cml0ZWwoQVVESU9fU1dfUlNULCBkcC0+cmVncyArIEZJRk9fQ05UTCk7CisJd3Jp dGVsKDAsIGRwLT5yZWdzICsgRklGT19DTlRMKTsKKworCWlmIChhdWRpby0+Zm9ybWF0ID09IEFG TVRfU1BESUYpCisJCWNsa19kaXNhYmxlX3VucHJlcGFyZShkcC0+c3BkaWZfY2xrKTsKKworCXJl dHVybiAwOworfQorCitpbnQgY2RuX2RwX2F1ZGlvX211dGUoc3RydWN0IGNkbl9kcF9kZXZpY2Ug KmRwLCBib29sIGVuYWJsZSkKK3sKKwlyZXR1cm4gY2RuX2RwX3JlZ193cml0ZV9iaXQoZHAsIERQ X1ZCX0lELCA0LCAxLCBlbmFibGUpOworfQorCitzdGF0aWMgdm9pZCBjZG5fZHBfYXVkaW9fY29u ZmlnX2kycyhzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsCisJCQkJICAgIHN0cnVjdCBhdWRpb19p bmZvICphdWRpbykKK3sKKwlpbnQgc3ViX3Bja3RfbnVtID0gMSwgaTJzX3BvcnRfZW5fdmFsID0g MHhmLCBpOworCXUzMiB2YWw7CisKKwlpZiAoYXVkaW8tPmNoYW5uZWxzID09IDIpIHsKKwkJaWYg KGRwLT5saW5rLm51bV9sYW5lcyA9PSAxKQorCQkJc3ViX3Bja3RfbnVtID0gMjsKKwkJZWxzZQor CQkJc3ViX3Bja3RfbnVtID0gNDsKKworCQlpMnNfcG9ydF9lbl92YWwgPSAxOworCX0gZWxzZSBp ZiAoYXVkaW8tPmNoYW5uZWxzID09IDQpIHsKKwkJaTJzX3BvcnRfZW5fdmFsID0gMzsKKwl9CisK Kwl3cml0ZWwoMHgwLCBkcC0+cmVncyArIFNQRElGX0NUUkxfQUREUik7CisKKwl3cml0ZWwoU1lO Q19XUl9UT19DSF9aRVJPLCBkcC0+cmVncyArIEZJRk9fQ05UTCk7CisKKwl2YWwgPSBNQVhfTlVN X0NIKGF1ZGlvLT5jaGFubmVscyk7CisJdmFsIHw9IE5VTV9PRl9JMlNfUE9SVFMoYXVkaW8tPmNo YW5uZWxzKTsKKwl2YWwgfD0gQVVESU9fVFlQRV9MUENNOworCXZhbCB8PSBDRkdfU1VCX1BDS1Rf TlVNKHN1Yl9wY2t0X251bSk7CisJd3JpdGVsKHZhbCwgZHAtPnJlZ3MgKyBTTVBMMlBLVF9DTkZH KTsKKworCWlmIChhdWRpby0+c2FtcGxlX3dpZHRoID09IDE2KQorCQl2YWwgPSAwOworCWVsc2Ug aWYgKGF1ZGlvLT5zYW1wbGVfd2lkdGggPT0gMjQpCisJCXZhbCA9IDEgPDwgOTsKKwllbHNlCisJ CXZhbCA9IDIgPDwgOTsKKworCXZhbCB8PSBBVURJT19DSF9OVU0oYXVkaW8tPmNoYW5uZWxzKTsK Kwl2YWwgfD0gSTJTX0RFQ19QT1JUX0VOKGkyc19wb3J0X2VuX3ZhbCk7CisJdmFsIHw9IFRSQU5T X1NNUExfV0lEVEhfMzI7CisJd3JpdGVsKHZhbCwgZHAtPnJlZ3MgKyBBVURJT19TUkNfQ05GRyk7 CisKKwlmb3IgKGkgPSAwOyBpIDwgKGF1ZGlvLT5jaGFubmVscyArIDEpIC8gMjsgaSsrKSB7CisJ CWlmIChhdWRpby0+c2FtcGxlX3dpZHRoID09IDE2KQorCQkJdmFsID0gKDB4MDggPDwgOCkgfCAo MHgwOCA8PCAyMCk7CisJCWVsc2UgaWYgKGF1ZGlvLT5zYW1wbGVfd2lkdGggPT0gMjQpCisJCQl2 YWwgPSAoMHgwYiA8PCA4KSB8ICgweDBiIDw8IDIwKTsKKworCQl2YWwgfD0gKCgyICogaSkgPDwg NCkgfCAoKDIgKiBpICsgMSkgPDwgMTYpOworCQl3cml0ZWwodmFsLCBkcC0+cmVncyArIFNUVFNf QklUX0NIKGkpKTsKKwl9CisKKwlzd2l0Y2ggKGF1ZGlvLT5zYW1wbGVfcmF0ZSkgeworCWNhc2Ug MzIwMDA6CisJCXZhbCA9IFNBTVBMSU5HX0ZSRVEoMykgfAorCQkgICAgICBPUklHSU5BTF9TQU1Q X0ZSRVEoMHhjKTsKKwkJYnJlYWs7CisJY2FzZSA0NDEwMDoKKwkJdmFsID0gU0FNUExJTkdfRlJF USgwKSB8CisJCSAgICAgIE9SSUdJTkFMX1NBTVBfRlJFUSgweGYpOworCQlicmVhazsKKwljYXNl IDQ4MDAwOgorCQl2YWwgPSBTQU1QTElOR19GUkVRKDIpIHwKKwkJICAgICAgT1JJR0lOQUxfU0FN UF9GUkVRKDB4ZCk7CisJCWJyZWFrOworCWNhc2UgODgyMDA6CisJCXZhbCA9IFNBTVBMSU5HX0ZS RVEoOCkgfAorCQkgICAgICBPUklHSU5BTF9TQU1QX0ZSRVEoMHg3KTsKKwkJYnJlYWs7CisJY2Fz ZSA5NjAwMDoKKwkJdmFsID0gU0FNUExJTkdfRlJFUSgweGEpIHwKKwkJICAgICAgT1JJR0lOQUxf U0FNUF9GUkVRKDUpOworCQlicmVhazsKKwljYXNlIDE3NjQwMDoKKwkJdmFsID0gU0FNUExJTkdf RlJFUSgweGMpIHwKKwkJICAgICAgT1JJR0lOQUxfU0FNUF9GUkVRKDMpOworCQlicmVhazsKKwlj YXNlIDE5MjAwMDoKKwkJdmFsID0gU0FNUExJTkdfRlJFUSgweGUpIHwKKwkJICAgICAgT1JJR0lO QUxfU0FNUF9GUkVRKDEpOworCQlicmVhazsKKwl9CisJdmFsIHw9IDQ7CisJd3JpdGVsKHZhbCwg ZHAtPnJlZ3MgKyBDT01fQ0hfU1RUU19CSVRTKTsKKworCXdyaXRlbChTTVBMMlBLVF9FTiwgZHAt PnJlZ3MgKyBTTVBMMlBLVF9DTlRMKTsKKwl3cml0ZWwoSTJTX0RFQ19TVEFSVCwgZHAtPnJlZ3Mg KyBBVURJT19TUkNfQ05UTCk7Cit9CisKK3N0YXRpYyB2b2lkIGNkbl9kcF9hdWRpb19jb25maWdf c3BkaWYoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKQoreworCXUzMiB2YWw7CisKKwl2YWwgPSBT UERJRl9BVkdfU0VMIHwgU1BESUZfSklUVEVSX0JZUEFTUzsKKwl2YWwgfD0gU1BESUZfRklGT19N SURfUkFOR0UoMHhlMCk7CisJdmFsIHw9IFNQRElGX0pJVFRFUl9USFJTSCgweGUwKTsKKwl2YWwg fD0gU1BESUZfSklUVEVSX0FWR19XSU4oNyk7CisJd3JpdGVsKHZhbCwgZHAtPnJlZ3MgKyBTUERJ Rl9DVFJMX0FERFIpOworCisJd3JpdGVsKFNZTkNfV1JfVE9fQ0hfWkVSTywgZHAtPnJlZ3MgKyBG SUZPX0NOVEwpOworCisJdmFsID0gTUFYX05VTV9DSCgyKSB8IEFVRElPX1RZUEVfTFBDTSB8IENG R19TVUJfUENLVF9OVU0oNCk7CisJd3JpdGVsKHZhbCwgZHAtPnJlZ3MgKyBTTVBMMlBLVF9DTkZH KTsKKwl3cml0ZWwoU01QTDJQS1RfRU4sIGRwLT5yZWdzICsgU01QTDJQS1RfQ05UTCk7CisKKwl2 YWwgPSBTUERJRl9FTkFCTEUgfCBTUERJRl9BVkdfU0VMIHwgU1BESUZfSklUVEVSX0JZUEFTUzsK Kwl2YWwgfD0gU1BESUZfRklGT19NSURfUkFOR0UoMHhlMCk7CisJdmFsIHw9IFNQRElGX0pJVFRF Ul9USFJTSCgweGUwKTsKKwl2YWwgfD0gU1BESUZfSklUVEVSX0FWR19XSU4oNyk7CisJd3JpdGVs KHZhbCwgZHAtPnJlZ3MgKyBTUERJRl9DVFJMX0FERFIpOworCisJY2xrX3ByZXBhcmVfZW5hYmxl KGRwLT5zcGRpZl9jbGspOworCWNsa19zZXRfcmF0ZShkcC0+c3BkaWZfY2xrLCBDRE5fRFBfU1BE SUZfQ0xLKTsKK30KKworaW50IGNkbl9kcF9hdWRpb19jb25maWdfc2V0KHN0cnVjdCBjZG5fZHBf ZGV2aWNlICpkcCwgc3RydWN0IGF1ZGlvX2luZm8gKmF1ZGlvKQoreworCWludCByZXQ7CisKKwkv KiByZXNldCB0aGUgc3BkaWYgY2xrIGJlZm9yZSBjb25maWcgKi8KKwlpZiAoYXVkaW8tPmZvcm1h dCA9PSBBRk1UX1NQRElGKSB7CisJCXJlc2V0X2NvbnRyb2xfYXNzZXJ0KGRwLT5zcGRpZl9yc3Qp OworCQlyZXNldF9jb250cm9sX2RlYXNzZXJ0KGRwLT5zcGRpZl9yc3QpOworCX0KKworCXJldCA9 IGNkbl9kcF9yZWdfd3JpdGUoZHAsIENNX0xBTkVfQ1RSTCwgTEFORV9SRUZfQ1lDKTsKKwlpZiAo cmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZShkcCwgQ01fQ1RS TCwgMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChhdWRpby0+Zm9ybWF0ID09 IEFGTVRfSTJTKQorCQljZG5fZHBfYXVkaW9fY29uZmlnX2kycyhkcCwgYXVkaW8pOworCWVsc2UK KwkJY2RuX2RwX2F1ZGlvX2NvbmZpZ19zcGRpZihkcCk7CisKKwlyZXR1cm4gY2RuX2RwX3JlZ193 cml0ZShkcCwgQVVESU9fUEFDS19DT05UUk9MLCBBVURJT19QQUNLX0VOKTsKK30KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAtcmVnLmggYi9kcml2ZXJzL2dwdS9k cm0vcm9ja2NoaXAvY2RuLWRwLXJlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLmU4M2FlYmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAv Y2RuLWRwLXJlZy5oCkBAIC0wLDAgKzEsNDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSBGdXpo b3UgUm9ja2NoaXAgRWxlY3Ryb25pY3MgQ28uTHRkCisgKiBBdXRob3I6IENocmlzIFpob25nIDx6 eXdAcm9jay1jaGlwcy5jb20+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9u IDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAq IG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVy bXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9DRE5fRFBfUkVH X0gKKyNkZWZpbmUgX0NETl9EUF9SRUdfSAorCisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisK KyNkZWZpbmUgQUREUl9JTUVNCQkweDEwMDAwCisjZGVmaW5lIEFERFJfRE1FTQkJMHgyMDAwMAor CisvKiBBUEIgQ0ZHIGFkZHIgKi8KKyNkZWZpbmUgQVBCX0NUUkwJCQkwCisjZGVmaW5lIFhUX0lO VF9DVFJMCQkJMHgwNAorI2RlZmluZSBNQUlMQk9YX0ZVTExfQUREUgkJMHgwOAorI2RlZmluZSBN QUlMQk9YX0VNUFRZX0FERFIJCTB4MGMKKyNkZWZpbmUgTUFJTEJPWDBfV1JfREFUQQkJMHgxMAor I2RlZmluZSBNQUlMQk9YMF9SRF9EQVRBCQkweDE0CisjZGVmaW5lIEtFRVBfQUxJVkUJCQkweDE4 CisjZGVmaW5lIFZFUl9MCQkJCTB4MWMKKyNkZWZpbmUgVkVSX0gJCQkJMHgyMAorI2RlZmluZSBW RVJfTElCX0xfQUREUgkJCTB4MjQKKyNkZWZpbmUgVkVSX0xJQl9IX0FERFIJCQkweDI4CisjZGVm aW5lIFNXX0RFQlVHX0wJCQkweDJjCisjZGVmaW5lIFNXX0RFQlVHX0gJCQkweDMwCisjZGVmaW5l IE1BSUxCT1hfSU5UX01BU0sJCTB4MzQKKyNkZWZpbmUgTUFJTEJPWF9JTlRfU1RBVFVTCQkweDM4 CisjZGVmaW5lIFNXX0NMS19MCQkJMHgzYworI2RlZmluZSBTV19DTEtfSAkJCTB4NDAKKyNkZWZp bmUgU1dfRVZFTlRTMAkJCTB4NDQKKyNkZWZpbmUgU1dfRVZFTlRTMQkJCTB4NDgKKyNkZWZpbmUg U1dfRVZFTlRTMgkJCTB4NGMKKyNkZWZpbmUgU1dfRVZFTlRTMwkJCTB4NTAKKyNkZWZpbmUgWFRf T0NEX0NUUkwJCQkweDYwCisjZGVmaW5lIEFQQl9JTlRfTUFTSwkJCTB4NmMKKyNkZWZpbmUgQVBC X1NUQVRVU19NQVNLCQkJMHg3MAorCisvKiBhdWRpbyBkZWNvZGVyIGFkZHIgKi8KKyNkZWZpbmUg QVVESU9fU1JDX0NOVEwJCQkweDMwMDAwCisjZGVmaW5lIEFVRElPX1NSQ19DTkZHCQkJMHgzMDAw NAorI2RlZmluZSBDT01fQ0hfU1RUU19CSVRTCQkweDMwMDA4CisjZGVmaW5lIFNUVFNfQklUX0NI KHgpCQkJKDB4MzAwMGMgKyAoKHgpIDw8IDIpKQorI2RlZmluZSBTUERJRl9DVFJMX0FERFIJCQkw eDMwMDRjCisjZGVmaW5lIFNQRElGX0NIMV9DU18zMTAwX0FERFIJCTB4MzAwNTAKKyNkZWZpbmUg U1BESUZfQ0gxX0NTXzYzMzJfQUREUgkJMHgzMDA1NAorI2RlZmluZSBTUERJRl9DSDFfQ1NfOTU2 NF9BRERSCQkweDMwMDU4CisjZGVmaW5lIFNQRElGX0NIMV9DU18xMjc5Nl9BRERSCQkweDMwMDVj CisjZGVmaW5lIFNQRElGX0NIMV9DU18xNTkxMjhfQUREUgkweDMwMDYwCisjZGVmaW5lIFNQRElG X0NIMV9DU18xOTExNjBfQUREUgkweDMwMDY0CisjZGVmaW5lIFNQRElGX0NIMl9DU18zMTAwX0FE RFIJCTB4MzAwNjgKKyNkZWZpbmUgU1BESUZfQ0gyX0NTXzYzMzJfQUREUgkJMHgzMDA2YworI2Rl ZmluZSBTUERJRl9DSDJfQ1NfOTU2NF9BRERSCQkweDMwMDcwCisjZGVmaW5lIFNQRElGX0NIMl9D U18xMjc5Nl9BRERSCQkweDMwMDc0CisjZGVmaW5lIFNQRElGX0NIMl9DU18xNTkxMjhfQUREUgkw eDMwMDc4CisjZGVmaW5lIFNQRElGX0NIMl9DU18xOTExNjBfQUREUgkweDMwMDdjCisjZGVmaW5l IFNNUEwyUEtUX0NOVEwJCQkweDMwMDgwCisjZGVmaW5lIFNNUEwyUEtUX0NORkcJCQkweDMwMDg0 CisjZGVmaW5lIEZJRk9fQ05UTAkJCTB4MzAwODgKKyNkZWZpbmUgRklGT19TVFRTCQkJMHgzMDA4 YworCisvKiBzb3VyY2UgcGlmIGFkZHIgKi8KKyNkZWZpbmUgU09VUkNFX1BJRl9XUl9BRERSCQkw eDMwODAwCisjZGVmaW5lIFNPVVJDRV9QSUZfV1JfUkVRCQkweDMwODA0CisjZGVmaW5lIFNPVVJD RV9QSUZfUkRfQUREUgkJMHgzMDgwOAorI2RlZmluZSBTT1VSQ0VfUElGX1JEX1JFUQkJMHgzMDgw YworI2RlZmluZSBTT1VSQ0VfUElGX0RBVEFfV1IJCTB4MzA4MTAKKyNkZWZpbmUgU09VUkNFX1BJ Rl9EQVRBX1JECQkweDMwODE0CisjZGVmaW5lIFNPVVJDRV9QSUZfRklGTzFfRkxVU0gJCTB4MzA4 MTgKKyNkZWZpbmUgU09VUkNFX1BJRl9GSUZPMl9GTFVTSAkJMHgzMDgxYworI2RlZmluZSBTT1VS Q0VfUElGX1NUQVRVUwkJMHgzMDgyMAorI2RlZmluZSBTT1VSQ0VfUElGX0lOVEVSUlVQVF9TT1VS Q0UJMHgzMDgyNAorI2RlZmluZSBTT1VSQ0VfUElGX0lOVEVSUlVQVF9NQVNLCTB4MzA4MjgKKyNk ZWZpbmUgU09VUkNFX1BJRl9QS1RfQUxMT0NfUkVHCTB4MzA4MmMKKyNkZWZpbmUgU09VUkNFX1BJ Rl9QS1RfQUxMT0NfV1JfRU4JMHgzMDgzMAorI2RlZmluZSBTT1VSQ0VfUElGX1NXX1JFU0VUCQkw eDMwODM0CisKKy8qIGJlbGxvdyByZWdpc3RlcnMgbmVlZCBhY2Nlc3MgYnkgbWFpbGJveCAqLwor Lyogc291cmNlIGNhciBhZGRyICovCisjZGVmaW5lIFNPVVJDRV9IRFRYX0NBUgkJCTB4MDkwMAor I2RlZmluZSBTT1VSQ0VfRFBUWF9DQVIJCQkweDA5MDQKKyNkZWZpbmUgU09VUkNFX1BIWV9DQVIJ CQkweDA5MDgKKyNkZWZpbmUgU09VUkNFX0NFQ19DQVIJCQkweDA5MGMKKyNkZWZpbmUgU09VUkNF X0NCVVNfQ0FSCQkJMHgwOTEwCisjZGVmaW5lIFNPVVJDRV9QS1RfQ0FSCQkJMHgwOTE4CisjZGVm aW5lIFNPVVJDRV9BSUZfQ0FSCQkJMHgwOTFjCisjZGVmaW5lIFNPVVJDRV9DSVBIRVJfQ0FSCQkw eDA5MjAKKyNkZWZpbmUgU09VUkNFX0NSWVBUT19DQVIJCTB4MDkyNAorCisvKiBjbG9jayBtZXRl cnMgYWRkciAqLworI2RlZmluZSBDTV9DVFJMCQkJCTB4MGEwMAorI2RlZmluZSBDTV9JMlNfQ1RS TAkJCTB4MGEwNAorI2RlZmluZSBDTV9TUERJRl9DVFJMCQkJMHgwYTA4CisjZGVmaW5lIENNX1ZJ RF9DVFJMCQkJMHgwYTBjCisjZGVmaW5lIENNX0xBTkVfQ1RSTAkJCTB4MGExMAorI2RlZmluZSBJ MlNfTk1fU1RBQkxFCQkJMHgwYTE0CisjZGVmaW5lIEkyU19OQ1RTX1NUQUJMRQkJCTB4MGExOAor I2RlZmluZSBTUERJRl9OTV9TVEFCTEUJCQkweDBhMWMKKyNkZWZpbmUgU1BESUZfTkNUU19TVEFC TEUJCTB4MGEyMAorI2RlZmluZSBOTVZJRF9NRUFTX1NUQUJMRQkJMHgwYTI0CisjZGVmaW5lIEky U19NRUFTCQkJMHgwYTQwCisjZGVmaW5lIFNQRElGX01FQVMJCQkweDBhODAKKyNkZWZpbmUgTk1W SURfTUVBUwkJCTB4MGFjMAorCisvKiBzb3VyY2UgdmlmIGFkZHIgKi8KKyNkZWZpbmUgQk5EX0hT WU5DMlZTWU5DCQkJMHgwYjAwCisjZGVmaW5lIEhTWU5DMlZTWU5DX0YxX0wxCQkweDBiMDQKKyNk ZWZpbmUgSFNZTkMyVlNZTkNfRjJfTDEJCTB4MGIwOAorI2RlZmluZSBIU1lOQzJWU1lOQ19TVEFU VVMJCTB4MGIwYworI2RlZmluZSBIU1lOQzJWU1lOQ19QT0xfQ1RSTAkJMHgwYjEwCisKKy8qIGRw dHggcGh5IGFkZHIgKi8KKyNkZWZpbmUgRFBfVFhfUEhZX0NPTkZJR19SRUcJCTB4MjAwMAorI2Rl ZmluZSBEUF9UWF9QSFlfU1RBVFVTX1JFRwkJMHgyMDA0CisjZGVmaW5lIERQX1RYX1BIWV9TV19S RVNFVAkJMHgyMDA4CisjZGVmaW5lIERQX1RYX1BIWV9TQ1JBTUJMRVJfU0VFRAkweDIwMGMKKyNk ZWZpbmUgRFBfVFhfUEhZX1RSQUlOSU5HXzAxXzA0CTB4MjAxMAorI2RlZmluZSBEUF9UWF9QSFlf VFJBSU5JTkdfMDVfMDgJMHgyMDE0CisjZGVmaW5lIERQX1RYX1BIWV9UUkFJTklOR18wOV8xMAkw eDIwMTgKKyNkZWZpbmUgVEVTVF9DT1IJCQkweDIzZmMKKworLyogZHB0eCBocGQgYWRkciAqLwor I2RlZmluZSBIUERfSVJRX0RFVF9NSU5fVElNRVIJCTB4MjEwMAorI2RlZmluZSBIUERfSVJRX0RF VF9NQVhfVElNRVIJCTB4MjEwNAorI2RlZmluZSBIUERfVU5QTEdFRF9ERVRfTUlOX1RJTUVSCTB4 MjEwOAorI2RlZmluZSBIUERfU1RBQkxFX1RJTUVSCQkweDIxMGMKKyNkZWZpbmUgSFBEX0ZJTFRF Ul9USU1FUgkJMHgyMTEwCisjZGVmaW5lIEhQRF9FVkVOVF9NQVNLCQkJMHgyMTFjCisjZGVmaW5l IEhQRF9FVkVOVF9ERVQJCQkweDIxMjAKKworLyogZHB5eCBmcmFtZXIgYWRkciAqLworI2RlZmlu ZSBEUF9GUkFNRVJfR0xPQkFMX0NPTkZJRwkJMHgyMjAwCisjZGVmaW5lIERQX1NXX1JFU0VUCQkJ MHgyMjA0CisjZGVmaW5lIERQX0ZSQU1FUl9UVQkJCTB4MjIwOAorI2RlZmluZSBEUF9GUkFNRVJf UFhMX1JFUFIJCTB4MjIwYworI2RlZmluZSBEUF9GUkFNRVJfU1AJCQkweDIyMTAKKyNkZWZpbmUg QVVESU9fUEFDS19DT05UUk9MCQkweDIyMTQKKyNkZWZpbmUgRFBfVkNfVEFCTEUoeCkJCQkoMHgy MjE4ICsgKCh4KSA8PCAyKSkKKyNkZWZpbmUgRFBfVkJfSUQJCQkweDIyNTgKKyNkZWZpbmUgRFBf TVRQSF9MVlBfQ09OVFJPTAkJMHgyMjVjCisjZGVmaW5lIERQX01UUEhfU1lNQk9MX1ZBTFVFUwkJ MHgyMjYwCisjZGVmaW5lIERQX01UUEhfRUNGX0NPTlRST0wJCTB4MjI2NAorI2RlZmluZSBEUF9N VFBIX0FDVF9DT05UUk9MCQkweDIyNjgKKyNkZWZpbmUgRFBfTVRQSF9TVEFUVVMJCQkweDIyNmMK KyNkZWZpbmUgRFBfSU5URVJSVVBUX1NPVVJDRQkJMHgyMjcwCisjZGVmaW5lIERQX0lOVEVSUlVQ VF9NQVNLCQkweDIyNzQKKyNkZWZpbmUgRFBfRlJPTlRfQkFDS19QT1JDSAkJMHgyMjc4CisjZGVm aW5lIERQX0JZVEVfQ09VTlQJCQkweDIyN2MKKworLyogZHB0eCBzdHJlYW0gYWRkciAqLworI2Rl ZmluZSBNU0FfSE9SSVpPTlRBTF8wCQkweDIyODAKKyNkZWZpbmUgTVNBX0hPUklaT05UQUxfMQkJ MHgyMjg0CisjZGVmaW5lIE1TQV9WRVJUSUNBTF8wCQkJMHgyMjg4CisjZGVmaW5lIE1TQV9WRVJU SUNBTF8xCQkJMHgyMjhjCisjZGVmaW5lIE1TQV9NSVNDCQkJMHgyMjkwCisjZGVmaW5lIFNUUkVB TV9DT05GSUcJCQkweDIyOTQKKyNkZWZpbmUgQVVESU9fUEFDS19TVEFUVVMJCTB4MjI5OAorI2Rl ZmluZSBWSUZfU1RBVFVTCQkJMHgyMjljCisjZGVmaW5lIFBDS19TVFVGRl9TVEFUVVNfMAkJMHgy MmEwCisjZGVmaW5lIFBDS19TVFVGRl9TVEFUVVNfMQkJMHgyMmE0CisjZGVmaW5lIElORk9fUEFD S19TVEFUVVMJCTB4MjJhOAorI2RlZmluZSBSQVRFX0dPVkVSTk9SX1NUQVRVUwkJMHgyMmFjCisj ZGVmaW5lIERQX0hPUklaT05UQUwJCQkweDIyYjAKKyNkZWZpbmUgRFBfVkVSVElDQUxfMAkJCTB4 MjJiNAorI2RlZmluZSBEUF9WRVJUSUNBTF8xCQkJMHgyMmI4CisjZGVmaW5lIERQX0JMT0NLX1NE UAkJCTB4MjJiYworCisvKiBkcHR4IGdsYmwgYWRkciAqLworI2RlZmluZSBEUFRYX0xBTkVfRU4J CQkweDIzMDAKKyNkZWZpbmUgRFBUWF9FTkhOQ0QJCQkweDIzMDQKKyNkZWZpbmUgRFBUWF9JTlRf TUFTSwkJCTB4MjMwOAorI2RlZmluZSBEUFRYX0lOVF9TVEFUVVMJCQkweDIzMGMKKworLyogZHAg YXV4IGFkZHIgKi8KKyNkZWZpbmUgRFBfQVVYX0hPU1RfQ09OVFJPTAkJMHgyODAwCisjZGVmaW5l IERQX0FVWF9JTlRFUlJVUFRfU09VUkNFCQkweDI4MDQKKyNkZWZpbmUgRFBfQVVYX0lOVEVSUlVQ VF9NQVNLCQkweDI4MDgKKyNkZWZpbmUgRFBfQVVYX1NXQVBfSU5WRVJTSU9OX0NPTlRST0wJMHgy ODBjCisjZGVmaW5lIERQX0FVWF9TRU5EX05BQ0tfVFJBTlNBQ1RJT04JMHgyODEwCisjZGVmaW5l IERQX0FVWF9DTEVBUl9SWAkJCTB4MjgxNAorI2RlZmluZSBEUF9BVVhfQ0xFQVJfVFgJCQkweDI4 MTgKKyNkZWZpbmUgRFBfQVVYX1RJTUVSX1NUT1AJCTB4MjgxYworI2RlZmluZSBEUF9BVVhfVElN RVJfQ0xFQVIJCTB4MjgyMAorI2RlZmluZSBEUF9BVVhfUkVTRVRfU1cJCQkweDI4MjQKKyNkZWZp bmUgRFBfQVVYX0RJVklERV8yTQkJMHgyODI4CisjZGVmaW5lIERQX0FVWF9UWF9QUkVBQ0hBUkdF X0xFTkdUSAkweDI4MmMKKyNkZWZpbmUgRFBfQVVYX0ZSRVFVRU5DWV8xTV9NQVgJCTB4MjgzMAor I2RlZmluZSBEUF9BVVhfRlJFUVVFTkNZXzFNX01JTgkJMHgyODM0CisjZGVmaW5lIERQX0FVWF9S WF9QUkVfTUlOCQkweDI4MzgKKyNkZWZpbmUgRFBfQVVYX1JYX1BSRV9NQVgJCTB4MjgzYworI2Rl ZmluZSBEUF9BVVhfVElNRVJfUFJFU0VUCQkweDI4NDAKKyNkZWZpbmUgRFBfQVVYX05BQ0tfRk9S TUFUCQkweDI4NDQKKyNkZWZpbmUgRFBfQVVYX1RYX0RBVEEJCQkweDI4NDgKKyNkZWZpbmUgRFBf QVVYX1JYX0RBVEEJCQkweDI4NGMKKyNkZWZpbmUgRFBfQVVYX1RYX1NUQVRVUwkJMHgyODUwCisj ZGVmaW5lIERQX0FVWF9SWF9TVEFUVVMJCTB4Mjg1NAorI2RlZmluZSBEUF9BVVhfUlhfQ1lDTEVf Q09VTlRFUgkJMHgyODU4CisjZGVmaW5lIERQX0FVWF9NQUlOX1NUQVRFUwkJMHgyODVjCisjZGVm aW5lIERQX0FVWF9NQUlOX1RJTUVSCQkweDI4NjAKKyNkZWZpbmUgRFBfQVVYX0FGRV9PVVQJCQkw eDI4NjQKKworLyogY3J5cHRvIGFkZHIgKi8KKyNkZWZpbmUgQ1JZUFRPX0hEQ1BfUkVWSVNJT04J CTB4NTgwMAorI2RlZmluZSBIRENQX0NSWVBUT19DT05GSUcJCTB4NTgwNAorI2RlZmluZSBDUllQ VE9fSU5URVJSVVBUX1NPVVJDRQkJMHg1ODA4CisjZGVmaW5lIENSWVBUT19JTlRFUlJVUFRfTUFT SwkJMHg1ODBjCisjZGVmaW5lIENSWVBUTzIyX0NPTkZJRwkJCTB4NTgxOAorI2RlZmluZSBDUllQ VE8yMl9TVEFUVVMJCQkweDU4MWMKKyNkZWZpbmUgU0hBXzI1Nl9EQVRBX0lOCQkJMHg1ODNjCisj ZGVmaW5lIFNIQV8yNTZfREFUQV9PVVRfKHgpCQkoMHg1ODUwICsgKCh4KSA8PCAyKSkKKyNkZWZp bmUgQUVTXzMyX0tFWV8oeCkJCQkoMHg1ODcwICsgKCh4KSA8PCAyKSkKKyNkZWZpbmUgQUVTXzMy X0RBVEFfSU4JCQkweDU4ODAKKyNkZWZpbmUgQUVTXzMyX0RBVEFfT1VUXyh4KQkJKDB4NTg4NCAr ICgoeCkgPDwgMikpCisjZGVmaW5lIENSWVBUTzE0X0NPTkZJRwkJCTB4NThhMAorI2RlZmluZSBD UllQVE8xNF9TVEFUVVMJCQkweDU4YTQKKyNkZWZpbmUgQ1JZUFRPMTRfUFJOTV9PVVQJCTB4NThh OAorI2RlZmluZSBDUllQVE8xNF9LTV8wCQkJMHg1OGFjCisjZGVmaW5lIENSWVBUTzE0X0tNXzEJ CQkweDU4YjAKKyNkZWZpbmUgQ1JZUFRPMTRfQU5fMAkJCTB4NThiNAorI2RlZmluZSBDUllQVE8x NF9BTl8xCQkJMHg1OGI4CisjZGVmaW5lIENSWVBUTzE0X1lPVVJfS1NWXzAJCTB4NThiYworI2Rl ZmluZSBDUllQVE8xNF9ZT1VSX0tTVl8xCQkweDU4YzAKKyNkZWZpbmUgQ1JZUFRPMTRfTUlfMAkJ CTB4NThjNAorI2RlZmluZSBDUllQVE8xNF9NSV8xCQkJMHg1OGM4CisjZGVmaW5lIENSWVBUTzE0 X1RJXzAJCQkweDU4Y2MKKyNkZWZpbmUgQ1JZUFRPMTRfS0lfMAkJCTB4NThkMAorI2RlZmluZSBD UllQVE8xNF9LSV8xCQkJMHg1OGQ0CisjZGVmaW5lIENSWVBUTzE0X0JMT0NLU19OVU0JCTB4NThk OAorI2RlZmluZSBDUllQVE8xNF9LRVlfTUVNX0RBVEFfMAkJMHg1OGRjCisjZGVmaW5lIENSWVBU TzE0X0tFWV9NRU1fREFUQV8xCQkweDU4ZTAKKyNkZWZpbmUgQ1JZUFRPMTRfU0hBMV9NU0dfREFU QQkJMHg1OGU0CisjZGVmaW5lIENSWVBUTzE0X1NIQTFfVl9WQUxVRV8oeCkJKDB4NThlOCArICgo eCkgPDwgMikpCisjZGVmaW5lIFRSTkdfQ1RSTAkJCTB4NThmYworI2RlZmluZSBUUk5HX0RBVEFf UkRZCQkJMHg1OTAwCisjZGVmaW5lIFRSTkdfREFUQQkJCTB4NTkwNAorCisvKiBjaXBoZXIgYWRk ciAqLworI2RlZmluZSBIRENQX1JFVklTSU9OCQkJMHg2MDAwMAorI2RlZmluZSBJTlRFUlJVUFRf U09VUkNFCQkweDYwMDA0CisjZGVmaW5lIElOVEVSUlVQVF9NQVNLCQkJMHg2MDAwOAorI2RlZmlu ZSBIRENQX0NJUEhFUl9DT05GSUcJCTB4NjAwMGMKKyNkZWZpbmUgQUVTXzEyOF9LRVlfMAkJCTB4 NjAwMTAKKyNkZWZpbmUgQUVTXzEyOF9LRVlfMQkJCTB4NjAwMTQKKyNkZWZpbmUgQUVTXzEyOF9L RVlfMgkJCTB4NjAwMTgKKyNkZWZpbmUgQUVTXzEyOF9LRVlfMwkJCTB4NjAwMWMKKyNkZWZpbmUg QUVTXzEyOF9SQU5ET01fMAkJMHg2MDAyMAorI2RlZmluZSBBRVNfMTI4X1JBTkRPTV8xCQkweDYw MDI0CisjZGVmaW5lIENJUEhFUjE0X0tNXzAJCQkweDYwMDI4CisjZGVmaW5lIENJUEhFUjE0X0tN XzEJCQkweDYwMDJjCisjZGVmaW5lIENJUEhFUjE0X1NUQVRVUwkJCTB4NjAwMzAKKyNkZWZpbmUg Q0lQSEVSMTRfUklfUEpfU1RBVFVTCQkweDYwMDM0CisjZGVmaW5lIENJUEhFUl9NT0RFCQkJMHg2 MDAzOAorI2RlZmluZSBDSVBIRVIxNF9BTl8wCQkJMHg2MDAzYworI2RlZmluZSBDSVBIRVIxNF9B Tl8xCQkJMHg2MDA0MAorI2RlZmluZSBDSVBIRVIyMl9BVVRICQkJMHg2MDA0NAorI2RlZmluZSBD SVBIRVIxNF9SMF9EUF9TVEFUVVMJCTB4NjAwNDgKKyNkZWZpbmUgQ0lQSEVSMTRfQk9PVFNUUkFQ CQkweDYwMDRjCisKKyNkZWZpbmUgRFBUWF9GUk1SX0RBVEFfQ0xLX1JTVE5fRU4JQklUKDExKQor I2RlZmluZSBEUFRYX0ZSTVJfREFUQV9DTEtfRU4JCUJJVCgxMCkKKyNkZWZpbmUgRFBUWF9QSFlf REFUQV9SU1ROX0VOCQlCSVQoOSkKKyNkZWZpbmUgRFBUWF9QSFlfREFUQV9DTEtfRU4JCUJJVCg4 KQorI2RlZmluZSBEUFRYX1BIWV9DSEFSX1JTVE5fRU4JCUJJVCg3KQorI2RlZmluZSBEUFRYX1BI WV9DSEFSX0NMS19FTgkJQklUKDYpCisjZGVmaW5lIFNPVVJDRV9BVVhfU1lTX0NMS19SU1ROX0VO CUJJVCg1KQorI2RlZmluZSBTT1VSQ0VfQVVYX1NZU19DTEtfRU4JCUJJVCg0KQorI2RlZmluZSBE UFRYX1NZU19DTEtfUlNUTl9FTgkJQklUKDMpCisjZGVmaW5lIERQVFhfU1lTX0NMS19FTgkJCUJJ VCgyKQorI2RlZmluZSBDRkdfRFBUWF9WSUZfQ0xLX1JTVE5fRU4JQklUKDEpCisjZGVmaW5lIENG R19EUFRYX1ZJRl9DTEtfRU4JCUJJVCgwKQorCisjZGVmaW5lIFNPVVJDRV9QSFlfUlNUTl9FTgkJ QklUKDEpCisjZGVmaW5lIFNPVVJDRV9QSFlfQ0xLX0VOCQlCSVQoMCkKKworI2RlZmluZSBTT1VS Q0VfUEtUX1NZU19SU1ROX0VOCQlCSVQoMykKKyNkZWZpbmUgU09VUkNFX1BLVF9TWVNfQ0xLX0VO CQlCSVQoMikKKyNkZWZpbmUgU09VUkNFX1BLVF9EQVRBX1JTVE5fRU4JCUJJVCgxKQorI2RlZmlu ZSBTT1VSQ0VfUEtUX0RBVEFfQ0xLX0VOCQlCSVQoMCkKKworI2RlZmluZSBTUERJRl9DRFJfQ0xL X1JTVE5fRU4JCUJJVCg1KQorI2RlZmluZSBTUERJRl9DRFJfQ0xLX0VOCQlCSVQoNCkKKyNkZWZp bmUgU09VUkNFX0FJRl9TWVNfUlNUTl9FTgkJQklUKDMpCisjZGVmaW5lIFNPVVJDRV9BSUZfU1lT X0NMS19FTgkJQklUKDIpCisjZGVmaW5lIFNPVVJDRV9BSUZfQ0xLX1JTVE5fRU4JCUJJVCgxKQor I2RlZmluZSBTT1VSQ0VfQUlGX0NMS19FTgkJQklUKDApCisKKyNkZWZpbmUgU09VUkNFX0NJUEhF Ul9TWVNURU1fQ0xLX1JTVE5fRU4JQklUKDMpCisjZGVmaW5lIFNPVVJDRV9DSVBIRVJfU1lTX0NM S19FTgkJQklUKDIpCisjZGVmaW5lIFNPVVJDRV9DSVBIRVJfQ0hBUl9DTEtfUlNUTl9FTgkJQklU KDEpCisjZGVmaW5lIFNPVVJDRV9DSVBIRVJfQ0hBUl9DTEtfRU4JCUJJVCgwKQorCisjZGVmaW5l IFNPVVJDRV9DUllQVE9fU1lTX0NMS19SU1ROX0VOCUJJVCgxKQorI2RlZmluZSBTT1VSQ0VfQ1JZ UFRPX1NZU19DTEtfRU4JQklUKDApCisKKyNkZWZpbmUgQVBCX0lSQU1fUEFUSAkJCUJJVCgyKQor I2RlZmluZSBBUEJfRFJBTV9QQVRICQkJQklUKDEpCisjZGVmaW5lIEFQQl9YVF9SRVNFVAkJCUJJ VCgwKQorCisjZGVmaW5lIE1BSUxCT1hfSU5UX01BU0tfQklUCQlCSVQoMSkKKyNkZWZpbmUgUElG X0lOVF9NQVNLX0JJVAkJQklUKDApCisjZGVmaW5lIEFMTF9JTlRfTUFTSwkJCTMKKworLyogbWFp bGJveCAqLworI2RlZmluZSBNQl9PUENPREVfSUQJCQkwCisjZGVmaW5lIE1CX01PRFVMRV9JRAkJ CTEKKyNkZWZpbmUgTUJfU0laRV9NU0JfSUQJCQkyCisjZGVmaW5lIE1CX1NJWkVfTFNCX0lECQkJ MworI2RlZmluZSBNQl9EQVRBX0lECQkJNAorCisjZGVmaW5lIE1CX01PRFVMRV9JRF9EUF9UWAkJ MHgwMQorI2RlZmluZSBNQl9NT0RVTEVfSURfSERDUF9UWAkJMHgwNworI2RlZmluZSBNQl9NT0RV TEVfSURfSERDUF9SWAkJMHgwOAorI2RlZmluZSBNQl9NT0RVTEVfSURfSERDUF9HRU5FUkFMCTB4 MDkKKyNkZWZpbmUgTUJfTU9EVUxFX0lEX0dFTkVSQUwJCTB4MGEKKworLyogZ2VuZXJhbCBvcGNv ZGUgKi8KKyNkZWZpbmUgR0VORVJBTF9NQUlOX0NPTlRST0wgICAgICAgICAgICAweDAxCisjZGVm aW5lIEdFTkVSQUxfVEVTVF9FQ0hPICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBHRU5FUkFM X0JVU19TRVRUSU5HUyAgICAgICAgICAgIDB4MDMKKyNkZWZpbmUgR0VORVJBTF9URVNUX0FDQ0VT UyAgICAgICAgICAgICAweDA0CisKKyNkZWZpbmUgRFBUWF9TRVRfUE9XRVJfTU5HCQkJMHgwMAor I2RlZmluZSBEUFRYX1NFVF9IT1NUX0NBUEFCSUxJVElFUwkJMHgwMQorI2RlZmluZSBEUFRYX0dF VF9FRElECQkJCTB4MDIKKyNkZWZpbmUgRFBUWF9SRUFEX0RQQ0QJCQkJMHgwMworI2RlZmluZSBE UFRYX1dSSVRFX0RQQ0QJCQkJMHgwNAorI2RlZmluZSBEUFRYX0VOQUJMRV9FVkVOVAkJCTB4MDUK KyNkZWZpbmUgRFBUWF9XUklURV9SRUdJU1RFUgkJCTB4MDYKKyNkZWZpbmUgRFBUWF9SRUFEX1JF R0lTVEVSCQkJMHgwNworI2RlZmluZSBEUFRYX1dSSVRFX0ZJRUxECQkJMHgwOAorI2RlZmluZSBE UFRYX1RSQUlOSU5HX0NPTlRST0wJCQkweDA5CisjZGVmaW5lIERQVFhfUkVBRF9FVkVOVAkJCQkw eDBhCisjZGVmaW5lIERQVFhfUkVBRF9MSU5LX1NUQVQJCQkweDBiCisjZGVmaW5lIERQVFhfU0VU X1ZJREVPCQkJCTB4MGMKKyNkZWZpbmUgRFBUWF9TRVRfQVVESU8JCQkJMHgwZAorI2RlZmluZSBE UFRYX0dFVF9MQVNUX0FVWF9TVEFVUwkJCTB4MGUKKyNkZWZpbmUgRFBUWF9TRVRfTElOS19CUkVB S19QT0lOVAkJMHgwZgorI2RlZmluZSBEUFRYX0ZPUkNFX0xBTkVTCQkJMHgxMAorI2RlZmluZSBE UFRYX0hQRF9TVEFURQkJCQkweDExCisKKyNkZWZpbmUgRldfU1RBTkRCWQkJCQkwCisjZGVmaW5l IEZXX0FDVElWRQkJCQkxCisKKyNkZWZpbmUgRFBUWF9FVkVOVF9FTkFCTEVfSFBECQkJQklUKDAp CisjZGVmaW5lIERQVFhfRVZFTlRfRU5BQkxFX1RSQUlOSU5HCQlCSVQoMSkKKworI2RlZmluZSBM SU5LX1RSQUlOSU5HX05PVF9BQ1RJVkUJCTAKKyNkZWZpbmUgTElOS19UUkFJTklOR19SVU4JCQkx CisjZGVmaW5lIExJTktfVFJBSU5JTkdfUkVTVEFSVAkJCTIKKworI2RlZmluZSBDT05UUk9MX1ZJ REVPX0lETEUJCQkwCisjZGVmaW5lIENPTlRST0xfVklERU9fVkFMSUQJCQkxCisKKyNkZWZpbmUg VklGX0JZUEFTU19JTlRFUkxBQ0UJCQlCSVQoMTMpCisjZGVmaW5lIElOVEVSTEFDRV9GTVRfREVU CQkJQklUKDEyKQorI2RlZmluZSBJTlRFUkxBQ0VfRFRDVF9XSU4JCQkweDIwCisKKyNkZWZpbmUg RFBfRlJBTUVSX1NQX0lOVEVSTEFDRV9FTgkJQklUKDIpCisjZGVmaW5lIERQX0ZSQU1FUl9TUF9I U1AJCQlCSVQoMSkKKyNkZWZpbmUgRFBfRlJBTUVSX1NQX1ZTUAkJCUJJVCgwKQorCisvKiBjYXBh YmlsaXR5ICovCisjZGVmaW5lIEFVWF9IT1NUX0lOVkVSVAkJCQkzCisjZGVmaW5lCUZBU1RfTFRf U1VQUE9SVAkJCQkxCisjZGVmaW5lIEZBU1RfTFRfTk9UX1NVUFBPUlQJCQkwCisjZGVmaW5lIExB TkVfTUFQUElOR19OT1JNQUwJCQkweGU0CisjZGVmaW5lIExBTkVfTUFQUElOR19GTElQUEVECQkJ MHgxYgorI2RlZmluZSBFTkhBTkNFRAkJCQkxCisKKyNkZWZpbmUJRlVMTF9MVF9TVEFSVEVECQkJ CUJJVCgwKQorI2RlZmluZSBGQVNFX0xUX1NUQVJURUQJCQkJQklUKDEpCisjZGVmaW5lIENMS19S RUNPVkVSWV9GSU5JU0hFRAkJCUJJVCgyKQorI2RlZmluZSBFUV9QSEFTRV9GSU5JU0hFRAkJCUJJ VCgzKQorI2RlZmluZSBGQVNFX0xUX1NUQVJUX0ZJTklTSEVECQkJQklUKDQpCisjZGVmaW5lIENM S19SRUNPVkVSWV9GQUlMRUQJCQlCSVQoNSkKKyNkZWZpbmUgRVFfUEhBU0VfRkFJTEVECQkJCUJJ VCg2KQorI2RlZmluZSBGQVNFX0xUX0ZBSUxFRAkJCQlCSVQoNykKKworI2RlZmluZSBEUFRYX0hQ RF9FVkVOVAkJCQlCSVQoMCkKKyNkZWZpbmUgRFBUWF9UUkFJTklOR19FVkVOVAkJCUJJVCgxKQor I2RlZmluZSBIRENQX1RYX1NUQVRVU19FVkVOVAkJCUJJVCg0KQorI2RlZmluZSBIRENQMl9UWF9J U19LTV9TVE9SRURfRVZFTlQJCUJJVCg1KQorI2RlZmluZSBIRENQMl9UWF9TVE9SRV9LTV9FVkVO VAkJCUJJVCg2KQorI2RlZmluZSBIRENQX1RYX0lTX1JFQ0VJVkVSX0lEX1ZBTElEX0VWRU5UCUJJ VCg3KQorCisjZGVmaW5lIFRVX1NJWkUJCQkJCTMwCisjZGVmaW5lIENETl9EUF9NQVhfTElOS19S QVRFCQkJRFBfTElOS19CV181XzQKKworLyogYXVkaW8gKi8KKyNkZWZpbmUgQVVESU9fUEFDS19F TgkJCQlCSVQoOCkKKyNkZWZpbmUgU0FNUExJTkdfRlJFUSh4KQkJCSgoKHgpICYgMHhmKSA8PCAx NikKKyNkZWZpbmUgT1JJR0lOQUxfU0FNUF9GUkVRKHgpCQkJKCgoeCkgJiAweGYpIDw8IDI0KQor I2RlZmluZSBTWU5DX1dSX1RPX0NIX1pFUk8JCQlCSVQoMSkKKyNkZWZpbmUgSTJTX0RFQ19TVEFS VAkJCQlCSVQoMSkKKyNkZWZpbmUgQVVESU9fU1dfUlNUCQkJCUJJVCgwKQorI2RlZmluZSBTTVBM MlBLVF9FTgkJCQlCSVQoMSkKKyNkZWZpbmUgTUFYX05VTV9DSCh4KQkJCQkoKCh4KSAmIDB4MWYp IC0gMSkKKyNkZWZpbmUgTlVNX09GX0kyU19QT1JUUyh4KQkJCSgoKCh4KSAvIDIgLSAxKSAmIDB4 MykgPDwgNSkKKyNkZWZpbmUgQVVESU9fVFlQRV9MUENNCQkJCSgyIDw8IDcpCisjZGVmaW5lIENG R19TVUJfUENLVF9OVU0oeCkJCQkoKCgoeCkgLSAxKSAmIDB4NykgPDwgMTEpCisjZGVmaW5lIEFV RElPX0NIX05VTSh4KQkJCQkoKCgoeCkgLSAxKSAmIDB4MWYpIDw8IDIpCisjZGVmaW5lIFRSQU5T X1NNUExfV0lEVEhfMTYJCQkwCisjZGVmaW5lIFRSQU5TX1NNUExfV0lEVEhfMjQJCQlCSVQoMTEp CisjZGVmaW5lIFRSQU5TX1NNUExfV0lEVEhfMzIJCQkoMiA8PCAxMSkKKyNkZWZpbmUgSTJTX0RF Q19QT1JUX0VOKHgpCQkJKCgoeCkgJiAweGYpIDw8IDE3KQorI2RlZmluZSBTUERJRl9FTkFCTEUJ CQkJQklUKDIxKQorI2RlZmluZSBTUERJRl9BVkdfU0VMCQkJCUJJVCgyMCkKKyNkZWZpbmUgU1BE SUZfSklUVEVSX0JZUEFTUwkJCUJJVCgxOSkKKyNkZWZpbmUgU1BESUZfRklGT19NSURfUkFOR0Uo eCkJCQkoKCh4KSAmIDB4ZmYpIDw8IDExKQorI2RlZmluZSBTUERJRl9KSVRURVJfVEhSU0goeCkJ CQkoKCh4KSAmIDB4ZmYpIDw8IDMpCisjZGVmaW5lIFNQRElGX0pJVFRFUl9BVkdfV0lOKHgpCQkJ KCh4KSAmIDB4NykKKworLyogUmVmZXJuY2UgY3ljbGVzIHdoZW4gdXNpbmcgbGFuZSBjbG9jayBh cyByZWZlcm5jZSAqLworI2RlZmluZSBMQU5FX1JFRl9DWUMJCQkJMHg4MDAwCisKK2VudW0gdm9s dGFnZV9zd2luZ19sZXZlbCB7CisJVk9MVEFHRV9MRVZFTF8wLAorCVZPTFRBR0VfTEVWRUxfMSwK KwlWT0xUQUdFX0xFVkVMXzIsCisJVk9MVEFHRV9MRVZFTF8zLAorfTsKKworZW51bSBwcmVfZW1w aGFzaXNfbGV2ZWwgeworCVBSRV9FTVBIQVNJU19MRVZFTF8wLAorCVBSRV9FTVBIQVNJU19MRVZF TF8xLAorCVBSRV9FTVBIQVNJU19MRVZFTF8yLAorCVBSRV9FTVBIQVNJU19MRVZFTF8zLAorfTsK KworZW51bSBwYXR0ZXJuX3NldCB7CisJUFRTMQkJPSBCSVQoMCksCisJUFRTMgkJPSBCSVQoMSks CisJUFRTMwkJPSBCSVQoMiksCisJUFRTNAkJPSBCSVQoMyksCisJRFBfTk9ORQkJPSBCSVQoNCkK K307CisKK2VudW0gdmljX2NvbG9yX2RlcHRoIHsKKwlCQ1NfNiA9IDB4MSwKKwlCQ1NfOCA9IDB4 MiwKKwlCQ1NfMTAgPSAweDQsCisJQkNTXzEyID0gMHg4LAorCUJDU18xNiA9IDB4MTAsCit9Owor CitlbnVtIHZpY19idF90eXBlIHsKKwlCVF82MDEgPSAweDAsCisJQlRfNzA5ID0gMHgxLAorfTsK Kwordm9pZCBjZG5fZHBfY2xvY2tfcmVzZXQoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKTsKKwor dm9pZCBjZG5fZHBfc2V0X2Z3X2NsayhzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIHUzMiBjbGsp OworaW50IGNkbl9kcF9sb2FkX2Zpcm13YXJlKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgY29u c3QgdTMyICppX21lbSwKKwkJCSB1MzIgaV9zaXplLCBjb25zdCB1MzIgKmRfbWVtLCB1MzIgZF9z aXplKTsKK2ludCBjZG5fZHBfYWN0aXZlKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgYm9vbCBl bmFibGUpOworaW50IGNkbl9kcF9zZXRfaG9zdF9jYXAoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRw LCB1OCBsYW5lcyk7CitpbnQgY2RuX2RwX2V2ZW50X2NvbmZpZyhzdHJ1Y3QgY2RuX2RwX2Rldmlj ZSAqZHApOwordTMyIGNkbl9kcF9nZXRfZXZlbnQoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKTsK K2ludCBjZG5fZHBfZ2V0X2hwZF9zdGF0dXMoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKTsKK2lu dCBjZG5fZHBfZHBjZF93cml0ZShzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIHUzMiBhZGRyLCB1 OCB2YWx1ZSk7CitpbnQgY2RuX2RwX2RwY2RfcmVhZChzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAs IHUzMiBhZGRyLCB1OCAqZGF0YSwgdTE2IGxlbik7CitpbnQgY2RuX2RwX2dldF9lZGlkX2Jsb2Nr KHZvaWQgKmRwLCB1OCAqZWRpZCwKKwkJCSAgdW5zaWduZWQgaW50IGJsb2NrLCBzaXplX3QgbGVu Z3RoKTsKK2ludCBjZG5fZHBfdHJhaW5pbmdfc3RhcnQoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRw KTsKK2ludCBjZG5fZHBfZ2V0X3RyYWluaW5nX3N0YXR1cyhzdHJ1Y3QgY2RuX2RwX2RldmljZSAq ZHApOworaW50IGNkbl9kcF9zZXRfdmlkZW9fc3RhdHVzKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpk cCwgaW50IGFjdGl2ZSk7CitpbnQgY2RuX2RwX2NvbmZpZ192aWRlbyhzdHJ1Y3QgY2RuX2RwX2Rl dmljZSAqZHApOworaW50IGNkbl9kcF9hdWRpb19zdG9wKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpk cCwgc3RydWN0IGF1ZGlvX2luZm8gKmF1ZGlvKTsKK2ludCBjZG5fZHBfYXVkaW9fbXV0ZShzdHJ1 Y3QgY2RuX2RwX2RldmljZSAqZHAsIGJvb2wgZW5hYmxlKTsKK2ludCBjZG5fZHBfYXVkaW9fY29u ZmlnX3NldChzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIHN0cnVjdCBhdWRpb19pbmZvICphdWRp byk7CisjZW5kaWYgLyogX0NETl9EUF9SRUdfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92b3AuYyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hp cC9yb2NrY2hpcF9kcm1fdm9wLmMKaW5kZXggZWRkN2VjMi4uZDcyM2Q4ZSAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92b3AuYworKysgYi9kcml2ZXJz L2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5jCkBAIC05NjksOSArOTY5LDExIEBA IHN0YXRpYyB2b2lkIHZvcF9jcnRjX2VuYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiAJCXZv cF9kc3BfaG9sZF92YWxpZF9pcnFfZGlzYWJsZSh2b3ApOwogCX0KIAotCXBpbl9wb2wgPSAweDg7 Ci0JcGluX3BvbCB8PSAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX05IU1lO QykgPyAwIDogMTsKLQlwaW5fcG9sIHw9IChhZGp1c3RlZF9tb2RlLT5mbGFncyAmIERSTV9NT0RF X0ZMQUdfTlZTWU5DKSA/IDAgOiAoMSA8PCAxKTsKKwlwaW5fcG9sID0gQklUKERDTEtfSU5WRVJU KTsKKwlwaW5fcG9sIHw9IChhZGp1c3RlZF9tb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfTkhT WU5DKSA/CisJCSAgIDAgOiBCSVQoSFNZTkNfUE9TSVRJVkUpOworCXBpbl9wb2wgfD0gKGFkanVz dGVkX21vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OVlNZTkMpID8KKwkJICAgMCA6IEJJVChW U1lOQ19QT1NJVElWRSk7CiAJVk9QX0NUUkxfU0VUKHZvcCwgcGluX3BvbCwgcGluX3BvbCk7CiAK IAlzd2l0Y2ggKHMtPm91dHB1dF90eXBlKSB7CkBAIC05OTEsNiArOTkzLDExIEBAIHN0YXRpYyB2 b2lkIHZvcF9jcnRjX2VuYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiAJCVZPUF9DVFJMX1NF VCh2b3AsIG1pcGlfcGluX3BvbCwgcGluX3BvbCk7CiAJCVZPUF9DVFJMX1NFVCh2b3AsIG1pcGlf ZW4sIDEpOwogCQlicmVhazsKKwljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydDoK KwkJcGluX3BvbCAmPSB+QklUKERDTEtfSU5WRVJUKTsKKwkJVk9QX0NUUkxfU0VUKHZvcCwgZHBf cGluX3BvbCwgcGluX3BvbCk7CisJCVZPUF9DVFJMX1NFVCh2b3AsIGRwX2VuLCAxKTsKKwkJYnJl YWs7CiAJZGVmYXVsdDoKIAkJRFJNX0VSUk9SKCJ1bnN1cHBvcnQgY29ubmVjdG9yX3R5cGVbJWRd XG4iLCBzLT5vdXRwdXRfdHlwZSk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Jv Y2tjaGlwL3JvY2tjaGlwX2RybV92b3AuaCBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2Nr Y2hpcF9kcm1fdm9wLmgKaW5kZXggZmY0ZjUyZS4uNDgyMGE4YiAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92b3AuaAorKysgYi9kcml2ZXJzL2dwdS9k cm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5oCkBAIC00NSw2ICs0NSw3IEBAIHN0cnVjdCB2 b3BfY3RybCB7CiAJc3RydWN0IHZvcF9yZWcgZWRwX2VuOwogCXN0cnVjdCB2b3BfcmVnIGhkbWlf ZW47CiAJc3RydWN0IHZvcF9yZWcgbWlwaV9lbjsKKwlzdHJ1Y3Qgdm9wX3JlZyBkcF9lbjsKIAlz dHJ1Y3Qgdm9wX3JlZyBvdXRfbW9kZTsKIAlzdHJ1Y3Qgdm9wX3JlZyBkaXRoZXJfZG93bjsKIAlz dHJ1Y3Qgdm9wX3JlZyBkaXRoZXJfdXA7CkBAIC01Myw2ICs1NCw3IEBAIHN0cnVjdCB2b3BfY3Ry bCB7CiAJc3RydWN0IHZvcF9yZWcgaGRtaV9waW5fcG9sOwogCXN0cnVjdCB2b3BfcmVnIGVkcF9w aW5fcG9sOwogCXN0cnVjdCB2b3BfcmVnIG1pcGlfcGluX3BvbDsKKwlzdHJ1Y3Qgdm9wX3JlZyBk cF9waW5fcG9sOwogCiAJc3RydWN0IHZvcF9yZWcgaHRvdGFsX3B3OwogCXN0cnVjdCB2b3BfcmVn IGhhY3Rfc3RfZW5kOwpAQCAtMjQyLDYgKzI0NCwxMyBAQCBlbnVtIHNjYWxlX2Rvd25fbW9kZSB7 CiAJU0NBTEVfRE9XTl9BVkcgPSAweDEKIH07CiAKK2VudW0gdm9wX3BvbCB7CisJSFNZTkNfUE9T SVRJVkUgPSAwLAorCVZTWU5DX1BPU0lUSVZFID0gMSwKKwlERU5fTkVHQVRJVkUgICA9IDIsCisJ RENMS19JTlZFUlQgICAgPSAzCit9OworCiAjZGVmaW5lIEZSQUNfMTZfMTYobXVsdCwgZGl2KSAg ICAoKChtdWx0KSA8PCAxNikgLyAoZGl2KSkKICNkZWZpbmUgU0NMX0ZUX0RFRkFVTFRfRklYUE9J TlRfU0hJRlQJMTIKICNkZWZpbmUgU0NMX01BWF9WU0tJUExJTkVTCQk0CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfdm9wX3JlZy5jIGIvZHJpdmVycy9ncHUv ZHJtL3JvY2tjaGlwL3JvY2tjaGlwX3ZvcF9yZWcuYwppbmRleCA1YjFhZTFmLi5kY2YxNzJlIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfdm9wX3JlZy5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF92b3BfcmVnLmMKQEAgLTI4MSw2 ICsyODEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHZvcF9kYXRhIHJrMzI4OF92b3AgPSB7CiBz dGF0aWMgY29uc3Qgc3RydWN0IHZvcF9jdHJsIHJrMzM5OV9jdHJsX2RhdGEgPSB7CiAJLnN0YW5k YnkgPSBWT1BfUkVHKFJLMzM5OV9TWVNfQ1RSTCwgMHgxLCAyMiksCiAJLmdhdGVfZW4gPSBWT1Bf UkVHKFJLMzM5OV9TWVNfQ1RSTCwgMHgxLCAyMyksCisJLmRwX2VuID0gVk9QX1JFRyhSSzMzOTlf U1lTX0NUUkwsIDB4MSwgMTEpLAogCS5yZ2JfZW4gPSBWT1BfUkVHKFJLMzM5OV9TWVNfQ1RSTCwg MHgxLCAxMiksCiAJLmhkbWlfZW4gPSBWT1BfUkVHKFJLMzM5OV9TWVNfQ1RSTCwgMHgxLCAxMyks CiAJLmVkcF9lbiA9IFZPUF9SRUcoUkszMzk5X1NZU19DVFJMLCAweDEsIDE0KSwKQEAgLTI5MCw2 ICsyOTEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHZvcF9jdHJsIHJrMzM5OV9jdHJsX2RhdGEg PSB7CiAJLmRhdGFfYmxhbmsgPSBWT1BfUkVHKFJLMzM5OV9EU1BfQ1RSTDAsIDB4MSwgMTkpLAog CS5vdXRfbW9kZSA9IFZPUF9SRUcoUkszMzk5X0RTUF9DVFJMMCwgMHhmLCAwKSwKIAkucmdiX3Bp bl9wb2wgPSBWT1BfUkVHKFJLMzM5OV9EU1BfQ1RSTDEsIDB4ZiwgMTYpLAorCS5kcF9waW5fcG9s ID0gVk9QX1JFRyhSSzMzOTlfRFNQX0NUUkwxLCAweGYsIDE2KSwKIAkuaGRtaV9waW5fcG9sID0g Vk9QX1JFRyhSSzMzOTlfRFNQX0NUUkwxLCAweGYsIDIwKSwKIAkuZWRwX3Bpbl9wb2wgPSBWT1Bf UkVHKFJLMzM5OV9EU1BfQ1RSTDEsIDB4ZiwgMjQpLAogCS5taXBpX3Bpbl9wb2wgPSBWT1BfUkVH KFJLMzM5OV9EU1BfQ1RSTDEsIDB4ZiwgMjgpLAotLSAKMi42LjMKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJp LWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=