From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Zhong Subject: [v5 PATCH 5/5] drm/rockchip: cdn-dp: add cdn DP support for rk3399 Date: Tue, 12 Jul 2016 23:09:48 +0800 Message-ID: <1468336188-565-6-git-send-email-zyw@rock-chips.com> References: <1468336188-565-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: Received: from mail-pa0-f66.google.com (mail-pa0-f66.google.com [209.85.220.66]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6028A6E59D for ; Tue, 12 Jul 2016 15:10:22 +0000 (UTC) Received: by mail-pa0-f66.google.com with SMTP id ib6so1195719pad.3 for ; Tue, 12 Jul 2016 08:10:22 -0700 (PDT) In-Reply-To: <1468336188-565-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: dri-devel@lists.freedesktop.org QWRkIHN1cHBvcnQgZm9yIGNkbiBEUCBjb250cm9sbGVyIHdoaWNoIGlzIGVtYmVkZGVkIGluIHRo ZSByazMzOTkKU29Dcy4gVGhlIERQIGlzIGNvbXBsaWFudCB3aXRoIERpc3BsYXlQb3J0IFNwZWNp ZmljYXRpb24sClZlcnNpb24gMS4zLCBUaGlzIElQIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgcm9j a2NoaXAgdHlwZS1jIFBIWSBJUC4KVGhlcmUgaXMgYSB1Q1BVIGluIERQIGNvbnRyb2xsZXIsIGl0 IG5lZWQgYSBmaXJtd2FyZSB0byB3b3JrLApwbGVhc2UgcHV0IHRoZSBmaXJtd2FyZSBmaWxlIHRv IC9saWIvZmlybXdhcmUvY2RuL2RwdHguYmluLiBUaGUKdUNQVSBpbiBjaGFyZ2Ugb2YgYXV4IGNv bW11bmljYXRpb24gYW5kIGxpbmsgdHJhaW5pbmcsIHRoZSBob3N0IHVzZQptYWlsYm94IHRvIGNv bW11bmljYXRlIHdpdGggdGhlIHVjcHUuClRoZSBkY2xrIHBpbl9wb2wgb2Ygdm9wIG11c3Qgbm90 IGJlIGludmVydCBmb3IgRFAuCgpTaWduZWQtb2ZmLWJ5OiBDaHJpcyBaaG9uZyA8enl3QHJvY2st Y2hpcHMuY29tPgoKLS0tCgpDaGFuZ2VzIGluIHY1OgotIGFscGhhYmV0aWNhbCBvcmRlcgotIGRv IG5vdCB1c2UgbG9uZywgdXNlIHUzMiBvciB1NjQKLSByZXR1cm4gTU9ERV9DTE9DS19ISUdIIHdo ZW4gcmVxdWVzdGVkID4gYWN0dWFsCi0gT3B0aW1pemVkIENvZGluZyBTdHlsZQotIGFkZCBhIGZv cm11bGEgdG8gZ2V0IGJldHRlciB0dSBzaXplIGFuZCBzeW1ib2wgdmFsdWUuCgpDaGFuZ2VzIGlu IHY0OgotIHVzZSBwaHkgZnJhbWV3b3JrIHRvIGNvbnRyb2wgRFAgcGh5Ci0gc3VwcG9ydCAyIHBo eXMKCkNoYW5nZXMgaW4gdjM6Ci0gdXNlIEVYVENPTl9ESVNQX0RQIGFuZCBFWFRDT05fRElTUF9E UF9BTFQgY2FibGUgdG8gZ2V0IGRwIHBvcnQgc3RhdGUuCi0gcmVzZXQgc3BkaWYgYmVmb3JlIGNv bmZpZyBpdAotIG1vZGlmeSB0aGUgZmlybXdhcmUgY2xrIHRvIDEwME1oegotIHJldHJ5IGxvYWQg ZmlybXdhcmUgaWYgZncgZmlsZSBpcyByZXF1ZXN0ZWQgdG9vIGVhcmx5CgpDaGFuZ2VzIGluIHYy OgotIEFscGhhYmV0aWMgb3JkZXIKLSByZW1vdmUgZXhjZXNzIGVycm9yIG1lc3NhZ2UKLSB1c2Ug ZGVmaW5lIGNsa19yYXRlCi0gY2hlY2sgYWxsIHJldHVybiB2YWx1ZQotIHJlbW92ZSBkZXZfc2V0 X25hbWUoZHAtPmRldiwgImNkbi1kcCIpOwotIHVzZSBzY2hlZHVsZV9kZWxheWVkX3dvcmsKLSBy ZW1vdmUgbmV2ZXItY2FsbGVkIGZ1bmN0aW9ucwotIHJlbW92ZSBzb21lIHVubmVjZXNzYXJ5ICgp CgpDaGFuZ2VzIGluIHYxOgotIHVzZSBleHRjb24gQVBJCi0gdXNlIGhkbWktY29kZWMgZm9yIHRo ZSBEUCBBc29jCi0gZG8gbm90IGluaXRpYWxpemUgdGhlICJyZXQiCi0gcHJpbnRrIGEgZXJyIGxv ZyB3aGVuIGRybV9vZl9lbmNvZGVyX2FjdGl2ZV9lbmRwb2ludF9pZAotIG1vZGlmeSB0aGUgZGNs ayBwaW5fcG9sIHRvIGEgc2luZ2xlIGxpbmUKCiBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvS2Nv bmZpZyAgICAgICAgICAgIHwgICA5ICsKIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9NYWtlZmls ZSAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1jb3Jl LmMgICAgICB8IDc2MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9k cm0vcm9ja2NoaXAvY2RuLWRwLWNvcmUuaCAgICAgIHwgMTEzICsrKysrCiBkcml2ZXJzL2dwdS9k cm0vcm9ja2NoaXAvY2RuLWRwLXJlZy5jICAgICAgIHwgNzQwICsrKysrKysrKysrKysrKysrKysr KysrKysrKwogZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1yZWcuaCAgICAgICB8IDQw OSArKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1f dm9wLmMgfCAgIDYgKy0KIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9w LmggfCAgIDIgKwogZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX3ZvcF9yZWcuYyB8 ICAgMiArCiA5IGZpbGVzIGNoYW5nZWQsIDIwNDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigt KQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAtY29y ZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1j b3JlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRw LXJlZy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1k cC1yZWcuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9LY29uZmlnIGIv ZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL0tjb25maWcKaW5kZXggZDMwYmRjMy4uMjBkYTlhOCAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL0tjb25maWcKKysrIGIvZHJpdmVy cy9ncHUvZHJtL3JvY2tjaGlwL0tjb25maWcKQEAgLTI1LDYgKzI1LDE1IEBAIGNvbmZpZyBST0NL Q0hJUF9BTkFMT0dJWF9EUAogCSAgZm9yIHRoZSBBbmFsb2dpeCBDb3JlIERQIGRyaXZlci4gSWYg eW91IHdhbnQgdG8gZW5hYmxlIERQCiAJICBvbiBSSzMyODggYmFzZWQgU29DLCB5b3Ugc2hvdWxk IHNlbGV0IHRoaXMgb3B0aW9uLgogCitjb25maWcgUk9DS0NISVBfQ0ROX0RQCisgICAgICAgIHRy aXN0YXRlICJSb2NrY2hpcCBjZG4gRFAiCisgICAgICAgIGRlcGVuZHMgb24gRFJNX1JPQ0tDSElQ CisgICAgICAgIGhlbHAKKwkgIFRoaXMgc2VsZWN0cyBzdXBwb3J0IGZvciBSb2NrY2hpcCBTb0Mg c3BlY2lmaWMgZXh0ZW5zaW9ucworCSAgZm9yIHRoZSBjZG4gRHAgZHJpdmVyLiBJZiB5b3Ugd2Fu dCB0byBlbmFibGUgRHAgb24KKwkgIFJLMzM5OSBiYXNlZCBTb0MsIHlvdSBzaG91bGQgc2VsZXQg dGhpcworCSAgb3B0aW9uLgorCiBjb25maWcgUk9DS0NISVBfRFdfSERNSQogICAgICAgICB0cmlz dGF0ZSAiUm9ja2NoaXAgc3BlY2lmaWMgZXh0ZW5zaW9ucyBmb3IgU3lub3BzeXMgRFcgSERNSSIK ICAgICAgICAgZGVwZW5kcyBvbiBEUk1fUk9DS0NISVAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9yb2NrY2hpcC9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9NYWtlZmls ZQppbmRleCAwNWQwNzEzLi5hYmRlY2Q1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcm9j a2NoaXAvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL01ha2VmaWxlCkBA IC03LDYgKzcsNyBAQCByb2NrY2hpcGRybS15IDo9IHJvY2tjaGlwX2RybV9kcnYubyByb2NrY2hp cF9kcm1fZmIubyBcCiByb2NrY2hpcGRybS0kKENPTkZJR19EUk1fRkJERVZfRU1VTEFUSU9OKSAr PSByb2NrY2hpcF9kcm1fZmJkZXYubwogCiBvYmotJChDT05GSUdfUk9DS0NISVBfQU5BTE9HSVhf RFApICs9IGFuYWxvZ2l4X2RwLXJvY2tjaGlwLm8KK29iai0kKENPTkZJR19ST0NLQ0hJUF9DRE5f RFApICs9IGNkbi1kcC1jb3JlLm8gY2RuLWRwLXJlZy5vCiBvYmotJChDT05GSUdfUk9DS0NISVBf RFdfSERNSSkgKz0gZHdfaGRtaS1yb2NrY2hpcC5vCiBvYmotJChDT05GSUdfUk9DS0NISVBfRFdf TUlQSV9EU0kpICs9IGR3LW1pcGktZHNpLm8KIG9iai0kKENPTkZJR19ST0NLQ0hJUF9JTk5PX0hE TUkpICs9IGlubm9faGRtaS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAv Y2RuLWRwLWNvcmUuYyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAtY29yZS5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViOGExNWUKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRwLWNvcmUuYwpAQCAtMCwwICsxLDc2 MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgRnV6aG91IFJvY2tjaGlwIEVsZWN0cm9uaWNzIENv Lkx0ZAorICogQXV0aG9yOiBDaHJpcyBaaG9uZyA8enl3QHJvY2stY2hpcHMuY29tPgorICoKKyAq IFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRl ZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9t aWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUg PGRybS9kcm1fZHBfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9lZGlkLmg+CisjaW5jbHVk ZSA8ZHJtL2RybV9vZi5oPgorCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGlu dXgvY29tcG9uZW50Lmg+CisjaW5jbHVkZSA8bGludXgvZXh0Y29uLmg+CisjaW5jbHVkZSA8bGlu dXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKyNpbmNsdWRlIDxsaW51 eC9yZXNldC5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KKyNpbmNsdWRlIDxsaW51 eC9waHkvcGh5Lmg+CisKKyNpbmNsdWRlIDxzb3VuZC9oZG1pLWNvZGVjLmg+CisKKyNpbmNsdWRl IDx2aWRlby9vZl92aWRlb21vZGUuaD4KKyNpbmNsdWRlIDx2aWRlby92aWRlb21vZGUuaD4KKwor I2luY2x1ZGUgImNkbi1kcC1jb3JlLmgiCisjaW5jbHVkZSAiY2RuLWRwLXJlZy5oIgorI2luY2x1 ZGUgInJvY2tjaGlwX2RybV92b3AuaCIKKworI2RlZmluZSBjb25uZWN0b3JfdG9fZHAoYykgXAor CQljb250YWluZXJfb2YoYywgc3RydWN0IGNkbl9kcF9kZXZpY2UsIGNvbm5lY3RvcikKKworI2Rl ZmluZSBlbmNvZGVyX3RvX2RwKGMpIFwKKwkJY29udGFpbmVyX29mKGMsIHN0cnVjdCBjZG5fZHBf ZGV2aWNlLCBlbmNvZGVyKQorCisvKiBkcCBncmYgcmVnaXN0ZXIgb2Zmc2V0ICovCisjZGVmaW5l IERQX1ZPUF9TRUwJCTB4NjIyNAorI2RlZmluZSBEUF9TRUxfVk9QX0xJVAkJQklUKDEyKQorI2Rl ZmluZSBEUF9DTEtfUkFURQkJMTAwMDAwMDAwCisjZGVmaW5lIFdBSVRfSFBEX1NUQUJMRQkJMzAw CisKK3N0YXRpYyBpbnQgY2RuX2RwX2Nsa19lbmFibGUoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRw KQoreworCWludCByZXQ7CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZHAtPnBjbGspOwor CWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZHAtPmRldiwgImNhbm5vdCBlbmFibGUgZHAgcGNs ayAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfcGNsazsKKwl9CisKKwlyZXQgPSBjbGtfcHJlcGFy ZV9lbmFibGUoZHAtPmNvcmVfY2xrKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRwLT5k ZXYsICJjYW5ub3QgZW5hYmxlIGNvcmVfY2xrICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9jb3Jl X2NsazsKKwl9CisKKwlyZXQgPSBjbGtfc2V0X3JhdGUoZHAtPmNvcmVfY2xrLCBEUF9DTEtfUkFU RSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkcC0+ZGV2LCAiY2Fubm90IHNldCBkcCBj b3JlIGNsayB0byAlZCAlZFxuIiwKKwkJCURQX0NMS19SQVRFLCByZXQpOworCQlnb3RvIGVycl9z ZXRfcmF0ZTsKKwl9CisKKwkvKiBub3RpY2UgZncgdGhlIGNsayBmcmVxIHZhbHVlICovCisJY2Ru X2RwX3NldF9md19jbGsoZHAsIERQX0NMS19SQVRFKTsKKworCXJldHVybiAwOworCitlcnJfc2V0 X3JhdGU6CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRwLT5jb3JlX2Nsayk7CitlcnJfY29yZV9j bGs6CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRwLT5wY2xrKTsKK2Vycl9wY2xrOgorCXJldHVy biByZXQ7Cit9CisKK3N0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzCitjZG5fZHBfY29u bmVjdG9yX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBib29sIGZvcmNl KQoreworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCA9IGNvbm5lY3Rvcl90b19kcChjb25uZWN0 b3IpOworCisJcmV0dXJuIGRwLT5ocGRfc3RhdHVzID8gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0 ZWQgOgorCQkJCWNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOworfQorCitzdGF0aWMgdm9p ZCBjZG5fZHBfY29ubmVjdG9yX2Rlc3Ryb3koc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv cikKK3sKKwlkcm1fY29ubmVjdG9yX3VucmVnaXN0ZXIoY29ubmVjdG9yKTsKKwlkcm1fY29ubmVj dG9yX2NsZWFudXAoY29ubmVjdG9yKTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fY29ubmVjdG9y X2Z1bmNzIGNkbl9kcF9hdG9taWNfY29ubmVjdG9yX2Z1bmNzID0geworCS5kcG1zID0gZHJtX2F0 b21pY19oZWxwZXJfY29ubmVjdG9yX2RwbXMsCisJLmRldGVjdCA9IGNkbl9kcF9jb25uZWN0b3Jf ZGV0ZWN0LAorCS5kZXN0cm95ID0gY2RuX2RwX2Nvbm5lY3Rvcl9kZXN0cm95LAorCS5maWxsX21v ZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAorCS5yZXNldCA9 IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldCwKKwkuYXRvbWljX2R1cGxpY2F0ZV9z dGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUsCisJLmF0 b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lf c3RhdGUsCit9OworCitzdGF0aWMgaW50IGNkbl9kcF9jb25uZWN0b3JfZ2V0X21vZGVzKHN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRw ID0gY29ubmVjdG9yX3RvX2RwKGNvbm5lY3Rvcik7CisJc3RydWN0IGVkaWQgKmVkaWQ7CisKKwlp ZiAoIWRwLT5md19sb2FkZWQpCisJCXJldHVybiAwOworCisJZWRpZCA9IGRybV9kb19nZXRfZWRp ZChjb25uZWN0b3IsIGNkbl9kcF9nZXRfZWRpZF9ibG9jaywgZHApOworCWlmIChlZGlkKSB7CisJ CWRldl9kYmcoZHAtPmRldiwgImdvdCBlZGlkOiB3aWR0aFslZF0geCBoZWlnaHRbJWRdXG4iLAor CQkJZWRpZC0+d2lkdGhfY20sIGVkaWQtPmhlaWdodF9jbSk7CisKKwkJZHAtPnNpbmtfaGFzX2F1 ZGlvID0gZHJtX2RldGVjdF9tb25pdG9yX2F1ZGlvKGVkaWQpOworCQlkcm1fbW9kZV9jb25uZWN0 b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoY29ubmVjdG9yLCBlZGlkKTsKKwkJZHJtX2FkZF9lZGlk X21vZGVzKGNvbm5lY3RvciwgZWRpZCk7CisJCS8qIFN0b3JlIHRoZSBFTEQgKi8KKwkJZHJtX2Vk aWRfdG9fZWxkKGNvbm5lY3RvciwgZWRpZCk7CisJCWtmcmVlKGVkaWQpOworCX0gZWxzZSB7CisJ CWRldl9kYmcoZHAtPmRldiwgImZhaWxlZCB0byBnZXQgZWRpZFxuIik7CisJfQorCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2VuY29kZXIgKgorCWNkbl9kcF9jb25uZWN0b3Jf YmVzdF9lbmNvZGVyKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0 IGNkbl9kcF9kZXZpY2UgKmRwID0gY29ubmVjdG9yX3RvX2RwKGNvbm5lY3Rvcik7CisKKwlyZXR1 cm4gJmRwLT5lbmNvZGVyOworfQorCitzdGF0aWMgaW50IGNkbl9kcF9jb25uZWN0b3JfbW9kZV92 YWxpZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJCSAgICAgICBzdHJ1Y3Qg ZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAgPSBj b25uZWN0b3JfdG9fZHAoY29ubmVjdG9yKTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfaW5mbyAqZGlz cGxheV9pbmZvID0gJmRwLT5jb25uZWN0b3IuZGlzcGxheV9pbmZvOworCXUzMiByZXF1ZXN0ZWQg PSBtb2RlLT5jbG9jayAqIGRpc3BsYXlfaW5mby0+YnBjICogMyAvIDEwMDA7CisJdTMyIGFjdHVh bCwgcmF0ZTsKKworCXJhdGUgPSBkcm1fZHBfYndfY29kZV90b19saW5rX3JhdGUoZHAtPmxpbmsu cmF0ZSk7CisJYWN0dWFsID0gcmF0ZSAqIGRwLT5saW5rLm51bV9sYW5lcyAvIDEwMDsKKworCS8q IGVmZmljaWVuY3kgaXMgYWJvdXQgMC44ICovCisJYWN0dWFsID0gYWN0dWFsICogOCAvIDEwOwor CisJaWYgKHJlcXVlc3RlZCA+IGFjdHVhbCkgeworCQlkZXZfZGJnKGRwLT5kZXYsICJyZXF1ZXN0 ZWQ9JWQsIGFjdHVhbD0lZCwgY2xvY2s9JWRcbiIsCisJCQlyZXF1ZXN0ZWQsIGFjdHVhbCwgbW9k ZS0+Y2xvY2spOworCQlyZXR1cm4gTU9ERV9DTE9DS19ISUdIOworCX0KKworCXJldHVybiBNT0RF X09LOworfQorCitzdGF0aWMgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzIGNkbl9k cF9jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0geworCS5nZXRfbW9kZXMgPSBjZG5fZHBfY29ubmVj dG9yX2dldF9tb2RlcywKKwkuYmVzdF9lbmNvZGVyID0gY2RuX2RwX2Nvbm5lY3Rvcl9iZXN0X2Vu Y29kZXIsCisJLm1vZGVfdmFsaWQgPSBjZG5fZHBfY29ubmVjdG9yX21vZGVfdmFsaWQsCit9Owor CitzdGF0aWMgdm9pZCBjZG5fZHBfY29tbWl0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikK K3sKKwlzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAgPSBlbmNvZGVyX3RvX2RwKGVuY29kZXIpOwor CisJaWYgKGNkbl9kcF9zZXRfdmlkZW9fc3RhdHVzKGRwLCBDT05UUk9MX1ZJREVPX0lETEUpKQor CQlyZXR1cm47CisKKwlpZiAoY2RuX2RwX2NvbmZpZ192aWRlbyhkcCkpIHsKKwkJZGV2X2Vycihk cC0+ZGV2LCAidW5hYmxlIHRvIGNvbmZpZyB2aWRlb1xuIik7CisJCXJldHVybjsKKwl9CisKKwlp ZiAoY2RuX2RwX3NldF92aWRlb19zdGF0dXMoZHAsIENPTlRST0xfVklERU9fVkFMSUQpKQorCQly ZXR1cm47CisKKwlkcC0+ZHBtc19tb2RlID0gRFJNX01PREVfRFBNU19PTjsKK30KKworc3RhdGlj IHZvaWQgY2RuX2RwX2VuY29kZXJfbW9kZV9zZXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVy LAorCQkJCSAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCQkgICAgc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkKQoreworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpk cCA9IGVuY29kZXJfdG9fZHAoZW5jb2Rlcik7CisJc3RydWN0IGRybV9kaXNwbGF5X2luZm8gKmRp c3BsYXlfaW5mbyA9ICZkcC0+Y29ubmVjdG9yLmRpc3BsYXlfaW5mbzsKKwlzdHJ1Y3Qgcm9ja2No aXBfY3J0Y19zdGF0ZSAqc3RhdGU7CisJc3RydWN0IHZpZGVvX2luZm8gKnZpZGVvID0gJmRwLT52 aWRlb19pbmZvOworCWludCByZXQsIHZhbDsKKworCXN3aXRjaCAoZGlzcGxheV9pbmZvLT5icGMp IHsKKwljYXNlIDE2OgorCWNhc2UgMTI6CisJY2FzZSAxMDoKKwkJdmlkZW8tPmNvbG9yX2RlcHRo ID0gMTA7CisJCWJyZWFrOworCWNhc2UgNjoKKwkJdmlkZW8tPmNvbG9yX2RlcHRoID0gNjsKKwkJ YnJlYWs7CisJZGVmYXVsdDoKKwkJdmlkZW8tPmNvbG9yX2RlcHRoID0gODsKKwkJYnJlYWs7CisJ fQorCisJdmlkZW8tPmNvbG9yX2ZtdCA9IFBYTF9SR0I7CisKKwl2aWRlby0+dl9zeW5jX3BvbGFy aXR5ID0gISEobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX05WU1lOQyk7CisJdmlkZW8tPmhf c3luY19wb2xhcml0eSA9ICEhKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OSFNZTkMpOwor CisJcmV0ID0gZHJtX29mX2VuY29kZXJfYWN0aXZlX2VuZHBvaW50X2lkKGRwLT5kZXYtPm9mX25v ZGUsIGVuY29kZXIpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZHAtPmRldiwgIkNvdWxk IG5vdCBnZXQgdm9wIGlkLCAlZCIsIHJldCk7CisJCXJldHVybjsKKwl9CisKKwlzdGF0ZSA9IHRv X3JvY2tjaGlwX2NydGNfc3RhdGUoZW5jb2Rlci0+Y3J0Yy0+c3RhdGUpOworCWlmIChyZXQpIHsK KwkJdmFsID0gRFBfU0VMX1ZPUF9MSVQgfCAoRFBfU0VMX1ZPUF9MSVQgPDwgMTYpOworCQlzdGF0 ZS0+b3V0cHV0X21vZGUgPSBST0NLQ0hJUF9PVVRfTU9ERV9QODg4OworCX0gZWxzZSB7CisJCXZh bCA9IERQX1NFTF9WT1BfTElUIDw8IDE2OworCQlzdGF0ZS0+b3V0cHV0X21vZGUgPSBST0NLQ0hJ UF9PVVRfTU9ERV9BQUFBOworCX0KKwlyZXQgPSByZWdtYXBfd3JpdGUoZHAtPmdyZiwgRFBfVk9Q X1NFTCwgdmFsKTsKKwlpZiAocmV0ICE9IDApCisJCWRldl9lcnIoZHAtPmRldiwgIkNvdWxkIG5v dCB3cml0ZSB0byBHUkY6ICVkXG4iLCByZXQpOworCisJbWVtY3B5KCZkcC0+bW9kZSwgYWRqdXN0 ZWQsIHNpemVvZigqbW9kZSkpOworfQorCitzdGF0aWMgdm9pZCBjZG5fZHBfZW5jb2Rlcl9lbmFi bGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBjZG5fZHBfZGV2aWNl ICpkcCA9IGVuY29kZXJfdG9fZHAoZW5jb2Rlcik7CisKKwlpZiAoZHAtPmRwbXNfbW9kZSAhPSBE Uk1fTU9ERV9EUE1TX09OKQorCQljZG5fZHBfY29tbWl0KGVuY29kZXIpOworfQorCitzdGF0aWMg dm9pZCBjZG5fZHBfZW5jb2Rlcl9kaXNhYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikK K3sKKwlzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAgPSBlbmNvZGVyX3RvX2RwKGVuY29kZXIpOwor CisJaWYgKGRwLT5kcG1zX21vZGUgIT0gRFJNX01PREVfRFBNU19PRkYpIHsKKwkJY2RuX2RwX3Nl dF92aWRlb19zdGF0dXMoZHAsIENPTlRST0xfVklERU9fSURMRSk7CisJCWRwLT5kcG1zX21vZGUg PSBEUk1fTU9ERV9EUE1TX09GRjsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK2Nkbl9kcF9lbmNvZGVy X2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkgICAgc3RydWN0 IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkJICAgIHN0cnVjdCBkcm1fY29ubmVjdG9y X3N0YXRlICpjb25uX3N0YXRlKQoreworCXN0cnVjdCByb2NrY2hpcF9jcnRjX3N0YXRlICpzID0g dG9fcm9ja2NoaXBfY3J0Y19zdGF0ZShjcnRjX3N0YXRlKTsKKworCXMtPm91dHB1dF9tb2RlID0g Uk9DS0NISVBfT1VUX01PREVfQUFBQTsKKwlzLT5vdXRwdXRfdHlwZSA9IERSTV9NT0RFX0NPTk5F Q1RPUl9EaXNwbGF5UG9ydDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRybV9l bmNvZGVyX2hlbHBlcl9mdW5jcyBjZG5fZHBfZW5jb2Rlcl9oZWxwZXJfZnVuY3MgPSB7CisJLm1v ZGVfc2V0ID0gY2RuX2RwX2VuY29kZXJfbW9kZV9zZXQsCisJLmVuYWJsZSA9IGNkbl9kcF9lbmNv ZGVyX2VuYWJsZSwKKwkuZGlzYWJsZSA9IGNkbl9kcF9lbmNvZGVyX2Rpc2FibGUsCisJLmF0b21p Y19jaGVjayA9IGNkbl9kcF9lbmNvZGVyX2F0b21pY19jaGVjaywKK307CisKK3N0YXRpYyBzdHJ1 Y3QgZHJtX2VuY29kZXJfZnVuY3MgY2RuX2RwX2VuY29kZXJfZnVuY3MgPSB7CisJLmRlc3Ryb3kg PSBkcm1fZW5jb2Rlcl9jbGVhbnVwLAorfTsKKworc3RhdGljIGludCBjZG5fZHBfZmlybXdhcmVf aW5pdChzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApCit7CisJaW50IHJldDsKKwljb25zdCB1MzIg KmlyYW1fZGF0YSwgKmRyYW1fZGF0YTsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3ID0gZHAt PmZ3OworCWNvbnN0IHN0cnVjdCBjZG5fZmlybXdhcmVfaGVhZGVyICpoZHI7CisKKwlpZiAoZHAt PmZ3X2xvYWRlZCkKKwkJcmV0dXJuIDA7CisKKwloZHIgPSAoc3RydWN0IGNkbl9maXJtd2FyZV9o ZWFkZXIgKilmdy0+ZGF0YTsKKwlpZiAoZnctPnNpemUgIT0gbGUzMl90b19jcHUoaGRyLT5zaXpl X2J5dGVzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpcmFtX2RhdGEgPSAoY29uc3QgdTMyICop KGZ3LT5kYXRhICsgaGRyLT5oZWFkZXJfc2l6ZSk7CisJZHJhbV9kYXRhID0gKGNvbnN0IHUzMiAq KShmdy0+ZGF0YSArIGhkci0+aGVhZGVyX3NpemUgKyBoZHItPmlyYW1fc2l6ZSk7CisKKwlyZXQg PSBjZG5fZHBfbG9hZF9maXJtd2FyZShkcCwgaXJhbV9kYXRhLCBoZHItPmlyYW1fc2l6ZSwKKwkJ CQkgICBkcmFtX2RhdGEsIGhkci0+ZHJhbV9zaXplKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0 OworCisJcmVsZWFzZV9maXJtd2FyZShmdyk7CisKKwlyZXQgPSBjZG5fZHBfYWN0aXZlKGRwLCB0 cnVlKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZHAtPmRldiwgImFjdGl2ZSB1Y3B1IGZhaWxl ZDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIGNkbl9kcF9ldmVu dF9jb25maWcoZHApOworfQorCitzdGF0aWMgaW50IGNkbl9kcF9pbml0KHN0cnVjdCBjZG5fZHBf ZGV2aWNlICpkcCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkcC0+ZGV2OworCXN0cnVjdCBk ZXZpY2Vfbm9kZSAqbnAgPSBkZXYtPm9mX25vZGU7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOwor CWludCByZXQ7CisKKwlkcC0+Z3JmID0gc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZShu cCwgInJvY2tjaGlwLGdyZiIpOworCWlmIChJU19FUlIoZHAtPmdyZikpIHsKKwkJZGV2X2Vycihk ZXYsICJjZG4tZHAgbmVlZHMgcm9ja2NoaXAsZ3JmIHByb3BlcnR5XG4iKTsKKwkJcmV0dXJuIFBU Ul9FUlIoZHAtPmdyZik7CisJfQorCisJZHAtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwg MCk7CisJaWYgKGRwLT5pcnEgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiY2RuLWRwIGNhbiBub3Qg Z2V0IGlycVxuIik7CisJCXJldHVybiBkcC0+aXJxOworCX0KKworCXJlcyA9IHBsYXRmb3JtX2dl dF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJZHAtPnJlZ3MgPSBkZXZtX2lv cmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOworCWlmIChJU19FUlIoZHAtPnJlZ3MpKSB7CisJCWRl dl9lcnIoZGV2LCAiaW9yZW1hcCByZWcgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoZHAt PnJlZ3MpOworCX0KKworCWRwLT5jb3JlX2NsayA9IGRldm1fY2xrX2dldChkZXYsICJjb3JlLWNs ayIpOworCWlmIChJU19FUlIoZHAtPmNvcmVfY2xrKSkgeworCQlkZXZfZXJyKGRldiwgImNhbm5v dCBnZXQgY29yZV9jbGtfZHBcbiIpOworCQlyZXR1cm4gUFRSX0VSUihkcC0+Y29yZV9jbGspOwor CX0KKworCWRwLT5wY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgInBjbGsiKTsKKwlpZiAoSVNfRVJS KGRwLT5wY2xrKSkgeworCQlkZXZfZXJyKGRldiwgImNhbm5vdCBnZXQgcGNsa1xuIik7CisJCXJl dHVybiBQVFJfRVJSKGRwLT5wY2xrKTsKKwl9CisKKwlkcC0+c3BkaWZfY2xrID0gZGV2bV9jbGtf Z2V0KGRldiwgInNwZGlmIik7CisJaWYgKElTX0VSUihkcC0+c3BkaWZfY2xrKSkgeworCQlkZXZf ZXJyKGRldiwgImNhbm5vdCBnZXQgc3BkaWZfY2xrXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoZHAt PnNwZGlmX2Nsayk7CisJfQorCisJZHAtPnNwZGlmX3JzdCA9IGRldm1fcmVzZXRfY29udHJvbF9n ZXQoZGV2LCAic3BkaWYiKTsKKwlpZiAoSVNfRVJSKGRwLT5zcGRpZl9yc3QpKSB7CisJCWRldl9l cnIoZGV2LCAibm8gc3BkaWYgcmVzZXQgY29udHJvbCBmb3VuZFxuIik7CisJCXJldHVybiBQVFJf RVJSKGRwLT5zcGRpZl9yc3QpOworCX0KKworCWRwLT5kcG1zX21vZGUgPSBEUk1fTU9ERV9EUE1T X09GRjsKKworCXJldCA9IGNkbl9kcF9jbGtfZW5hYmxlKGRwKTsKKwlpZiAocmV0IDwgMCkKKwkJ cmV0dXJuIHJldDsKKworCWRwX2Nsb2NrX3Jlc2V0X3NlcShkcCk7CisKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIGludCBjZG5fZHBfYXVkaW9faHdfcGFyYW1zKHN0cnVjdCBkZXZpY2UgKmRldiwK KwkJCQkgIHN0cnVjdCBoZG1pX2NvZGVjX2RhaWZtdCAqZGFpZm10LAorCQkJCSAgc3RydWN0IGhk bWlfY29kZWNfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwID0g ZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGF1ZGlvX2luZm8gYXVkaW8gPSB7CisJCS5z YW1wbGVfd2lkdGggPSBwYXJhbXMtPnNhbXBsZV93aWR0aCwKKwkJLnNhbXBsZV9yYXRlID0gcGFy YW1zLT5zYW1wbGVfcmF0ZSwKKwkJLmNoYW5uZWxzID0gcGFyYW1zLT5jaGFubmVscywKKwl9Owor CWludCByZXQ7CisKKwlpZiAoIWRwLT5lbmNvZGVyLmNydGMpCisJCXJldHVybiAtRU5PREVWOwor CisJc3dpdGNoIChkYWlmbXQtPmZtdCkgeworCWNhc2UgSERNSV9JMlM6CisJCWF1ZGlvLmZvcm1h dCA9IEFGTVRfSTJTOworCQlicmVhazsKKwljYXNlIEhETUlfU1BESUY6CisJCWF1ZGlvLmZvcm1h dCA9IEFGTVRfU1BESUY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoZGV2LCAiJXM6 IEludmFsaWQgZm9ybWF0ICVkXG4iLCBfX2Z1bmNfXywgZGFpZm10LT5mbXQpOworCQlyZXR1cm4g LUVJTlZBTDsKKwl9CisKKwlyZXQgPSBjZG5fZHBfYXVkaW9fY29uZmlnX3NldChkcCwgJmF1ZGlv KTsKKwlpZiAoIXJldCkKKwkJZHAtPmF1ZGlvX2luZm8gPSBhdWRpbzsKKworCXJldHVybiByZXQ7 Cit9CisKK3N0YXRpYyB2b2lkIGNkbl9kcF9hdWRpb19zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpk ZXYpCit7CisJc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwID0gZGV2X2dldF9kcnZkYXRhKGRldik7 CisJaW50IHJldCA9IGNkbl9kcF9hdWRpb19zdG9wKGRwLCAmZHAtPmF1ZGlvX2luZm8pOworCisJ aWYgKCFyZXQpCisJCWRwLT5hdWRpb19pbmZvLmZvcm1hdCA9IEFGTVRfVU5VU0VEOworfQorCitz dGF0aWMgaW50IGNkbl9kcF9hdWRpb19kaWdpdGFsX211dGUoc3RydWN0IGRldmljZSAqZGV2LCBi b29sIGVuYWJsZSkKK3sKKwlzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAgPSBkZXZfZ2V0X2RydmRh dGEoZGV2KTsKKworCXJldHVybiBjZG5fZHBfYXVkaW9fbXV0ZShkcCwgZW5hYmxlKTsKK30KKwor c3RhdGljIGludCBjZG5fZHBfYXVkaW9fZ2V0X2VsZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVpbnQ4 X3QgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAgPSBkZXZf Z2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZHJtX21vZGVfY29uZmlnICpjb25maWcgPSAmZHAt PmVuY29kZXIuZGV2LT5tb2RlX2NvbmZpZzsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yOworCWludCByZXQgPSAtRU5PREVWOworCisJbXV0ZXhfbG9jaygmY29uZmlnLT5tdXRleCk7 CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZjb25maWctPmNvbm5lY3Rvcl9saXN0 LCBoZWFkKSB7CisJCWlmICgmZHAtPmVuY29kZXIgPT0gY29ubmVjdG9yLT5lbmNvZGVyKSB7CisJ CQltZW1jcHkoYnVmLCBjb25uZWN0b3ItPmVsZCwKKwkJCSAgICAgICBtaW4oc2l6ZW9mKGNvbm5l Y3Rvci0+ZWxkKSwgbGVuKSk7CisJCQlyZXQgPSAwOworCQl9CisJfQorCW11dGV4X3VubG9jaygm Y29uZmlnLT5tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0 IGhkbWlfY29kZWNfb3BzIGF1ZGlvX2NvZGVjX29wcyA9IHsKKwkuaHdfcGFyYW1zID0gY2RuX2Rw X2F1ZGlvX2h3X3BhcmFtcywKKwkuYXVkaW9fc2h1dGRvd24gPSBjZG5fZHBfYXVkaW9fc2h1dGRv d24sCisJLmRpZ2l0YWxfbXV0ZSA9IGNkbl9kcF9hdWRpb19kaWdpdGFsX211dGUsCisJLmdldF9l bGQgPSBjZG5fZHBfYXVkaW9fZ2V0X2VsZCwKK307CisKK3N0YXRpYyBpbnQgY2RuX2RwX2F1ZGlv X2NvZGVjX2luaXQoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLAorCQkJCSAgIHN0cnVjdCBkZXZp Y2UgKmRldikKK3sKKwlzdHJ1Y3QgaGRtaV9jb2RlY19wZGF0YSBjb2RlY19kYXRhID0geworCQku aTJzID0gMSwKKwkJLnNwZGlmID0gMSwKKwkJLm9wcyA9ICZhdWRpb19jb2RlY19vcHMsCisJCS5t YXhfaTJzX2NoYW5uZWxzID0gOCwKKwl9OworCisJZHAtPmF1ZGlvX3BkZXYgPSBwbGF0Zm9ybV9k ZXZpY2VfcmVnaXN0ZXJfZGF0YSgKKwkJCSBkZXYsIEhETUlfQ09ERUNfRFJWX05BTUUsIFBMQVRG T1JNX0RFVklEX0FVVE8sCisJCQkgJmNvZGVjX2RhdGEsIHNpemVvZihjb2RlY19kYXRhKSk7CisK KwlyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKGRwLT5hdWRpb19wZGV2KTsKK30KKworc3RhdGljIHZv aWQgY2RuX2RwX2dldF9zdGF0ZShzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIHN0cnVjdCBleHRj b25fZGV2ICplZGV2KQoreworCWJvb2wgZGZwLCBkcHR4OworCXU4IGNhcF9sYW5lczsKKworCWRm cCA9IGV4dGNvbl9nZXRfY2FibGVfc3RhdGVfKGVkZXYsIEVYVENPTl9VU0JfSE9TVCk7CisJZHB0 eCA9IGV4dGNvbl9nZXRfY2FibGVfc3RhdGVfKGVkZXYsIEVYVENPTl9ESVNQX0RQKTsKKworCWlm IChkZnAgJiYgZHB0eCkKKwkJY2FwX2xhbmVzID0gMjsKKwllbHNlIGlmIChkcHR4KQorCQljYXBf bGFuZXMgPSA0OworCWVsc2UKKwkJY2FwX2xhbmVzID0gMDsKKworCWlmIChjYXBfbGFuZXMgIT0g ZHAtPmNhcF9sYW5lcykgeworCQlkcC0+Y2FwX2xhbmVzID0gY2FwX2xhbmVzOworCQlzY2hlZHVs ZV9kZWxheWVkX3dvcmsoJmRwLT5ldmVudF93cSwgMCk7CisJfQorfQorCitzdGF0aWMgaW50IGNk bl9kcF9wZF9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAorCQkJICAgdW5zaWduZWQg bG9uZyBldmVudCwgdm9pZCAqcHJpdikKK3sKKwlzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHA7CisJ c3RydWN0IGV4dGNvbl9kZXYgKmVkZXYgPSBwcml2OworCXU4IGk7CisKKwlkcCA9IGNvbnRhaW5l cl9vZihuYiwgc3RydWN0IGNkbl9kcF9kZXZpY2UsIGV2ZW50X25iKTsKKworCWZvciAoaSA9IDA7 IGkgPCBNQVhfUEhZOyBpKyspIHsKKwkJaWYgKGVkZXYgPT0gZHAtPmV4dGNvbltpXSkgeworCQkJ ZHAtPnBvcnRfaWQgPSBpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwljZG5fZHBfZ2V0X3N0YXRl KGRwLCBlZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjZG5fZHBfcGRfZXZl bnRfd3Eoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBjZG5fZHBfZGV2aWNl ICpkcDsKKwlpbnQgcmV0OworCisJZHAgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGNkbl9k cF9kZXZpY2UsIGV2ZW50X3dxLndvcmspOworCisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZHAt PmZ3LCAiY2RuL2RwdHguYmluIiwgZHAtPmRldik7CisJaWYgKHJldCA9PSAtRU5PRU5UICYmICFk cC0+ZndfbG9hZGVkKSB7CisJCS8qCisJCSAqIElmIGNhbiBub3QgZmluZCB0aGUgZmlsZSwgcmV0 cnkgdG8gbG9hZCB0aGUgZmlybXdhcmUgaW4gMQorCQkgKiBzZWNvbmQsIGlmIHN0aWxsIGZhaWxl ZCBhZnRlciAxIG1pbnV0ZSwgZ2l2ZSB1cC4KKwkJICovCisJCWlmIChkcC0+ZndfcmV0cnkrKyA8 IDYwKSB7CisJCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRwLT5ldmVudF93cSwKKwkJCQkJICAg ICAgbXNlY3NfdG9famlmZmllcyhIWikpOworCQl9CisKKwkJZGV2X2VycihkcC0+ZGV2LCAiZmFp bGVkIHRvIHJlcXVlc3QgZmlybXdhcmUgJWRcbiIsIHJldCk7CisJCXJldHVybjsKKwl9CisKKwlp ZiAoIWRwLT5jYXBfbGFuZXMpIHsKKwkJaWYgKGRwLT5waHlfc3RhdHVzW2RwLT5wb3J0X2lkXSkK KwkJCXBoeV9wb3dlcl9vZmYoZHAtPnBoeVtkcC0+cG9ydF9pZF0pOworCQlkcC0+cGh5X3N0YXR1 c1tkcC0+cG9ydF9pZF0gPSAwOworCQlkcC0+aHBkX3N0YXR1cyA9IGZhbHNlOworCQlkcm1faGVs cGVyX2hwZF9pcnFfZXZlbnQoZHAtPmRybV9kZXYpOworCQlyZXR1cm47CisJfQorCisJaWYgKCFk cC0+cGh5X3N0YXR1c1tkcC0+cG9ydF9pZF0pIHsKKwkJcmV0ID0gcGh5X3Bvd2VyX29uKGRwLT5w aHlbZHAtPnBvcnRfaWRdKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybjsKKworCQltc2xlZXAoV0FJ VF9IUERfU1RBQkxFKTsKKwl9CisKKwlkcC0+cGh5X3N0YXR1c1tkcC0+cG9ydF9pZF0gPSAxOwor CisJcmV0ID0gY2RuX2RwX2Zpcm13YXJlX2luaXQoZHApOworCWlmIChyZXQpCisJCXJldHVybjsK KworCS8qIHJlYWQgaHBkIHN0YXR1cyBmYWlsZWQsIG9yIHRoZSBocGQgZG9lcyBub3QgZXhpc3Qu ICovCisJcmV0ID0gY2RuX2RwX2dldF9ocGRfc3RhdHVzKGRwKTsKKwlpZiAocmV0IDw9IDApCisJ CXJldHVybjsKKworCS8qCisJICogU2V0IHRoZSBjYXBhYmlsaXR5IGFuZCBzdGFydCB0aGUgdHJh aW5pbmcgcHJvY2VzcyBvbmNlCisJICogdGhlIGhwZCBpcyBkZXRlY3RlZC4KKwkgKi8KKwlyZXQg PSBjZG5fZHBfc2V0X2hvc3RfY2FwKGRwKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZHAtPmRl diwgInNldCBob3N0IGNhcGFiaWxpdGllcyBmYWlsZWRcbiIpOworCQlyZXR1cm47CisJfQorCisJ cmV0ID0gY2RuX2RwX3RyYWluaW5nX3N0YXJ0KGRwKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIo ZHAtPmRldiwgImh3IGx0IGVycjolZFxuIiwgcmV0KTsKKwkJcmV0dXJuOworCX0KKworCXJldCA9 IGNkbl9kcF9nZXRfbHRfc3RhdHVzKGRwKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZHAtPmRl diwgImh3IGx0IGdldCBzdGF0dXMgZmFpbGVkXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWRldl9p bmZvKGRwLT5kZXYsICJyYXRlOiVkLCBsYW5lczolZFxuIiwKKwkJIGRwLT5saW5rLnJhdGUsIGRw LT5saW5rLm51bV9sYW5lcyk7CisKKwlkcC0+aHBkX3N0YXR1cyA9IHRydWU7CisJZHJtX2hlbHBl cl9ocGRfaXJxX2V2ZW50KGRwLT5kcm1fZGV2KTsKK30KKworc3RhdGljIGludCBjZG5fZHBfYmlu ZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKKwkJICAgICAgIHZv aWQgKmRhdGEpCit7CisJc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwID0gZGV2X2dldF9kcnZkYXRh KGRldik7CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOworCXN0cnVjdCBkcm1fY29ubmVj dG9yICpjb25uZWN0b3I7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYgPSBkYXRhOworCWlu dCByZXQsIGk7CisKKwlyZXQgPSBjZG5fZHBfaW5pdChkcCk7CisJaWYgKHJldCA8IDApCisJCXJl dHVybiByZXQ7CisKKwlkcC0+ZHJtX2RldiA9IGRybV9kZXY7CisKKwllbmNvZGVyID0gJmRwLT5l bmNvZGVyOworCisJZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MgPSBkcm1fb2ZfZmluZF9wb3NzaWJs ZV9jcnRjcyhkcm1fZGV2LAorCQkJCQkJCSAgICAgZGV2LT5vZl9ub2RlKTsKKwlEUk1fREVCVUdf S01TKCJwb3NzaWJsZV9jcnRjcyA9IDB4JXhcbiIsIGVuY29kZXItPnBvc3NpYmxlX2NydGNzKTsK KworCXJldCA9IGRybV9lbmNvZGVyX2luaXQoZHJtX2RldiwgZW5jb2RlciwgJmNkbl9kcF9lbmNv ZGVyX2Z1bmNzLAorCQkJICAgICAgIERSTV9NT0RFX0VOQ09ERVJfVE1EUywgTlVMTCk7CisJaWYg KHJldCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBpbml0aWFsaXplIGVuY29kZXIgd2l0aCBk cm1cbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRybV9lbmNvZGVyX2hlbHBlcl9hZGQoZW5j b2RlciwgJmNkbl9kcF9lbmNvZGVyX2hlbHBlcl9mdW5jcyk7CisKKwljb25uZWN0b3IgPSAmZHAt PmNvbm5lY3RvcjsKKwljb25uZWN0b3ItPnBvbGxlZCA9IERSTV9DT05ORUNUT1JfUE9MTF9IUEQ7 CisJY29ubmVjdG9yLT5kcG1zID0gRFJNX01PREVfRFBNU19PRkY7CisKKwlyZXQgPSBkcm1fY29u bmVjdG9yX2luaXQoZHJtX2RldiwgY29ubmVjdG9yLAorCQkJCSAmY2RuX2RwX2F0b21pY19jb25u ZWN0b3JfZnVuY3MsCisJCQkJIERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydCk7CisJaWYg KHJldCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBpbml0aWFsaXplIGNvbm5lY3RvciB3aXRo IGRybVxuIik7CisJCWdvdG8gZXJyX2ZyZWVfZW5jb2RlcjsKKwl9CisKKwlkcm1fY29ubmVjdG9y X2hlbHBlcl9hZGQoY29ubmVjdG9yLCAmY2RuX2RwX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOwor CisJcmV0ID0gZHJtX21vZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKGNvbm5lY3RvciwgZW5j b2Rlcik7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBhdHRhY2ggY29ubmVj dG9yIGFuZCBlbmNvZGVyXG4iKTsKKwkJZ290byBlcnJfZnJlZV9jb25uZWN0b3I7CisJfQorCisJ Y2RuX2RwX2F1ZGlvX2NvZGVjX2luaXQoZHAsIGRldik7CisKKwlkcC0+ZXZlbnRfbmIubm90aWZp ZXJfY2FsbCA9IGNkbl9kcF9wZF9ldmVudDsKKwlJTklUX0RFTEFZRURfV09SSygmZHAtPmV2ZW50 X3dxLCBjZG5fZHBfcGRfZXZlbnRfd3EpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9QSFk7IGkr KykgeworCQlpZiAoSVNfRVJSKGRwLT5leHRjb25baV0pKQorCQkJY29udGludWU7CisKKwkJcmV0 ID0gZXh0Y29uX3JlZ2lzdGVyX25vdGlmaWVyKGRwLT5leHRjb25baV0sIEVYVENPTl9ESVNQX0RQ LAorCQkJCQkgICAgICAgJmRwLT5ldmVudF9uYik7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIo ZGV2LCAicmVnaXRzdGVyIEVYVENPTl9ESVNQX0RQIG5vdGlmaWVyIGVyclxuIik7CisJCQlyZXR1 cm4gcmV0OworCQl9CisKKwkJY2RuX2RwX2dldF9zdGF0ZShkcCwgZHAtPmV4dGNvbltpXSk7CisJ fQorCisJcmV0dXJuIDA7CisKK2Vycl9mcmVlX2Nvbm5lY3RvcjoKKwlkcm1fY29ubmVjdG9yX2Ns ZWFudXAoY29ubmVjdG9yKTsKK2Vycl9mcmVlX2VuY29kZXI6CisJZHJtX2VuY29kZXJfY2xlYW51 cChlbmNvZGVyKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBjZG5fZHBfdW5iaW5k KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLCB2b2lkICpkYXRhKQor eworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0 cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9ICZkcC0+ZW5jb2RlcjsKKwlpbnQgaTsKKworCXBs YXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRwLT5hdWRpb19wZGV2KTsKKwljZG5fZHBfZW5jb2Rl cl9kaXNhYmxlKGVuY29kZXIpOworCWVuY29kZXItPmZ1bmNzLT5kZXN0cm95KGVuY29kZXIpOwor CWRybV9jb25uZWN0b3JfdW5yZWdpc3RlcigmZHAtPmNvbm5lY3Rvcik7CisJZHJtX2Nvbm5lY3Rv cl9jbGVhbnVwKCZkcC0+Y29ubmVjdG9yKTsKKwlkcm1fZW5jb2Rlcl9jbGVhbnVwKGVuY29kZXIp OworCisJZm9yIChpID0gMDsgaSA8IE1BWF9QSFk7IGkrKykgeworCQlpZiAoIUlTX0VSUihkcC0+ ZXh0Y29uW2ldKSkKKwkJCWV4dGNvbl91bnJlZ2lzdGVyX25vdGlmaWVyKGRwLT5leHRjb25baV0s IEVYVENPTl9VU0IsCisJCQkJCQkgICAmZHAtPmV2ZW50X25iKTsKKwl9Cit9CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgY29tcG9uZW50X29wcyBjZG5fZHBfY29tcG9uZW50X29wcyA9IHsKKwkuYmlu ZCA9IGNkbl9kcF9iaW5kLAorCS51bmJpbmQgPSBjZG5fZHBfdW5iaW5kLAorfTsKKworc3RhdGlj IGludCBjZG5fZHBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcDsK Kwl1OCBjb3VudCA9IDA7CisJaW50IGk7CisKKwlkcCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVv ZigqZHApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRwKQorCQlyZXR1cm4gLUVOT01FTTsKKwlkcC0+ ZGV2ID0gZGV2OworCisJZm9yIChpID0gMDsgaSA8IE1BWF9QSFk7IGkrKykgeworCQlkcC0+ZXh0 Y29uW2ldID0gZXh0Y29uX2dldF9lZGV2X2J5X3BoYW5kbGUoZGV2LCBpKTsKKwkJZHAtPnBoeVtp XSA9IGRldm1fb2ZfcGh5X2dldF9ieV9pbmRleChkZXYsIGRldi0+b2Zfbm9kZSwgaSk7CisKKwkJ aWYgKCFJU19FUlIoZHAtPmV4dGNvbltpXSkgJiYgIUlTX0VSUihkcC0+cGh5W2ldKSkKKwkJCWNv dW50Kys7CisKKwkJaWYgKFBUUl9FUlIoZHAtPmV4dGNvbltpXSkgPT0gLUVQUk9CRV9ERUZFUiB8 fAorCQkgICAgUFRSX0VSUihkcC0+cGh5W2ldKSA9PSAtRVBST0JFX0RFRkVSKQorCQkJcmV0dXJu IC1FUFJPQkVfREVGRVI7CisJfQorCisJaWYgKCFjb3VudCkgeworCQlkZXZfZXJyKGRldiwgIm1p c3NpbmcgZXh0Y29uIG9yIHBoeVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRldl9z ZXRfZHJ2ZGF0YShkZXYsIGRwKTsKKworCXJldHVybiBjb21wb25lbnRfYWRkKGRldiwgJmNkbl9k cF9jb21wb25lbnRfb3BzKTsKK30KKworc3RhdGljIGludCBjZG5fZHBfcmVtb3ZlKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY29tcG9uZW50X2RlbCgmcGRldi0+ZGV2LCAmY2Ru X2RwX2NvbXBvbmVudF9vcHMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3Qgb2ZfZGV2aWNlX2lkIGNkbl9kcF9kdF9pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gInJv Y2tjaGlwLHJrMzM5OS1jZG4tZHAiIH0sCisJe30KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUo b2YsIGNkbl9kcF9kdF9pZHMpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBjZG5f ZHBfZHJpdmVyID0geworCS5wcm9iZSA9IGNkbl9kcF9wcm9iZSwKKwkucmVtb3ZlID0gY2RuX2Rw X3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkgICAubmFtZSA9ICJjZG4tZHAiLAorCQkgICAub3du ZXIgPSBUSElTX01PRFVMRSwKKwkJICAgLm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKGNk bl9kcF9kdF9pZHMpLAorCX0sCit9OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGNkbl9kcF9k cml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJDaHJpcyBaaG9uZyA8enl3QHJvY2stY2hpcHMuY29t PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJjZG4gRFAgRHJpdmVyIik7CitNT0RVTEVfTElDRU5T RSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRw LWNvcmUuaCBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAtY29yZS5oCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxYmEyMmQKLS0tIC9kZXYvbnVsbAorKysgYi9k cml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRwLWNvcmUuaApAQCAtMCwwICsxLDExMyBAQAor LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBDaHJpcyBaaG9uZyA8enl3QHJvY2stY2hpcHMuY29t PgorICogQ29weXJpZ2h0IChDKSAyMDE2IFJPQ0tDSElQLCBJbmMuCisgKgorICogVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg Ki8KKworI2lmbmRlZiBfUk9DS0NISVBfRURQX0NPUkVfSAorI2RlZmluZSBfUk9DS0NISVBfRURQ X0NPUkVfSAorCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNf aGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9kcF9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0v ZHJtX3BhbmVsLmg+CisjaW5jbHVkZSAicm9ja2NoaXBfZHJtX2Rydi5oIgorI2luY2x1ZGUgImNk bi1kcC1yZWcuaCIKKworI2RlZmluZSBNQVhfUEhZCQkyCisKK2VudW0gQVVESU9fRk9STUFUIHsK KwlBRk1UX0kyUyA9IDAsCisJQUZNVF9TUERJRiA9IDEsCisJQUZNVF9VTlVTRUQsCit9OworCitz dHJ1Y3QgYXVkaW9faW5mbyB7CisJZW51bSBBVURJT19GT1JNQVQgZm9ybWF0OworCWludCBzYW1w bGVfcmF0ZTsKKwlpbnQgY2hhbm5lbHM7CisJaW50IHNhbXBsZV93aWR0aDsKK307CisKK3N0cnVj dCB2aWRlb19pbmZvIHsKKwlib29sIGhfc3luY19wb2xhcml0eTsKKwlib29sIHZfc3luY19wb2xh cml0eTsKKwlib29sIGludGVybGFjZWQ7CisJaW50IGNvbG9yX2RlcHRoOworCWVudW0gVklDX1BY TF9FTkNPRElOR19GT1JNQVQgY29sb3JfZm10OworfTsKKworc3RydWN0IGNkbl9maXJtd2FyZV9o ZWFkZXIgeworCXUzMiBzaXplX2J5dGVzOyAvKiBzaXplIG9mIHRoZSBlbnRpcmUgaGVhZGVyK2lt YWdlKHMpIGluIGJ5dGVzICovCisJdTMyIGhlYWRlcl9zaXplOyAvKiBzaXplIG9mIGp1c3QgdGhl IGhlYWRlciBpbiBieXRlcyAqLworCXUzMiBpcmFtX3NpemU7IC8qIHNpemUgb2YgaXJhbSAqLwor CXUzMiBkcmFtX3NpemU7IC8qIHNpemUgb2YgZHJhbSAqLworfTsKKworc3RydWN0IGNkbl9kcF9k ZXZpY2UgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2Rl djsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciBjb25uZWN0b3I7CisJc3RydWN0IGRybV9lbmNvZGVy IGVuY29kZXI7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgbW9kZTsKKwlzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICphdWRpb19wZGV2OworCisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsJLyog Y2RuIGRwIGZpcm13YXJlICovCisJdW5zaWduZWQgaW50IGZ3X3ZlcnNpb247CS8qIGNkbiBmdyB2 ZXJzaW9uICovCisJdTMyIGZ3X3JldHJ5OworCWJvb2wgZndfbG9hZGVkOworCXZvaWQgX19pb21l bSAqcmVnczsKKwlzdHJ1Y3QgcmVnbWFwICpncmY7CisJdW5zaWduZWQgaW50IGlycTsKKwlzdHJ1 Y3QgY2xrICpjb3JlX2NsazsKKwlzdHJ1Y3QgY2xrICpwY2xrOworCXN0cnVjdCBjbGsgKnNwZGlm X2NsazsKKwlzdHJ1Y3QgcmVzZXRfY29udHJvbCAqc3BkaWZfcnN0OworCXN0cnVjdCBhdWRpb19p bmZvIGF1ZGlvX2luZm87CisJc3RydWN0IHZpZGVvX2luZm8gdmlkZW9faW5mbzsKKwlzdHJ1Y3Qg ZXh0Y29uX2RldiAqZXh0Y29uW01BWF9QSFldOworCXN0cnVjdCBwaHkgKnBoeVtNQVhfUEhZXTsK KwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZXZlbnRfbmI7CisJc3RydWN0IGRlbGF5ZWRfd29yayBl dmVudF93cTsKKworCXU4IHBvcnRfaWQ7CisJdTggY2FwX2xhbmVzOworCWJvb2wgaHBkX3N0YXR1 czsKKwlib29sIHBoeV9zdGF0dXNbTUFYX1BIWV07CisKKwlpbnQgZHBtc19tb2RlOworCXN0cnVj dCBkcm1fZHBfbGluayBsaW5rOworCWJvb2wgc2lua19oYXNfYXVkaW87Cit9OworCit2b2lkIGRw X2Nsb2NrX3Jlc2V0X3NlcShzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApOworCit2b2lkIGNkbl9k cF9zZXRfZndfY2xrKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgaW50IGNsayk7CitpbnQgY2Ru X2RwX2xvYWRfZmlybXdhcmUoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCBjb25zdCB1MzIgKmlf bWVtLAorCQkJIHUzMiBpX3NpemUsIGNvbnN0IHUzMiAqZF9tZW0sIHUzMiBkX3NpemUpOworaW50 IGNkbl9kcF9hY3RpdmUoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCBib29sIGVuYWJsZSk7Citp bnQgY2RuX2RwX3NldF9ob3N0X2NhcChzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApOworaW50IGNk bl9kcF9ldmVudF9jb25maWcoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKTsKK2ludCBjZG5fZHBf Z2V0X2V2ZW50KHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCk7CitpbnQgY2RuX2RwX2dldF9ocGRf c3RhdHVzKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCk7CitpbnQgY2RuX2RwX2RwY2Rfd3JpdGUo c3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCB1MzIgYWRkciwgdTggdmFsdWUpOworaW50IGNkbl9k cF9kcGNkX3JlYWQoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCB1MzIgYWRkcik7CitpbnQgY2Ru X2RwX2dldF9lZGlkX2Jsb2NrKHZvaWQgKmRwLCB1OCAqZWRpZCwKKwkJCSAgdW5zaWduZWQgaW50 IGJsb2NrLCBzaXplX3QgbGVuZ3RoKTsKK2ludCBjZG5fZHBfdHJhaW5pbmdfc3RhcnQoc3RydWN0 IGNkbl9kcF9kZXZpY2UgKmRwKTsKK2ludCBjZG5fZHBfZ2V0X2x0X3N0YXR1cyhzdHJ1Y3QgY2Ru X2RwX2RldmljZSAqZHApOworaW50IGNkbl9kcF9zZXRfdmlkZW9fc3RhdHVzKHN0cnVjdCBjZG5f ZHBfZGV2aWNlICpkcCwgaW50IGFjdGl2ZSk7CitpbnQgY2RuX2RwX2NvbmZpZ192aWRlbyhzdHJ1 Y3QgY2RuX2RwX2RldmljZSAqZHApOworaW50IGNkbl9kcF9hdWRpb19zdG9wKHN0cnVjdCBjZG5f ZHBfZGV2aWNlICpkcCwgc3RydWN0IGF1ZGlvX2luZm8gKmF1ZGlvKTsKK2ludCBjZG5fZHBfYXVk aW9fbXV0ZShzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIGJvb2wgZW5hYmxlKTsKK2ludCBjZG5f ZHBfYXVkaW9fY29uZmlnX3NldChzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIHN0cnVjdCBhdWRp b19pbmZvICphdWRpbyk7CisKKyNlbmRpZiAgLyogX1JPQ0tDSElQX0VEUF9DT1JFX0ggKi8KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAtcmVnLmMgYi9kcml2ZXJz L2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRwLXJlZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjhkNWJlY2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9j a2NoaXAvY2RuLWRwLXJlZy5jCkBAIC0wLDAgKzEsNzQwIEBACisvKgorICogQ29weXJpZ2h0IChD KSBGdXpob3UgUm9ja2NoaXAgRWxlY3Ryb25pY3MgQ28uTHRkCisgKiBBdXRob3I6IENocmlzIFpo b25nIDx6eXdAcm9jay1jaGlwcy5jb20+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNl ZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2 ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBh bmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhv c2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGlu dXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVs YXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9sbC5oPgor I2luY2x1ZGUgPGxpbnV4L3Jlc2V0Lmg+CisKKyNpbmNsdWRlICJjZG4tZHAtY29yZS5oIgorI2lu Y2x1ZGUgImNkbi1kcC1yZWcuaCIKKworI2RlZmluZSBDRE5fRFBfU1BESUZfQ0xLCQkyMDAwMDAw MDAKKyNkZWZpbmUgRldfQUxJVkVfVElNRU9VVF9VUwkJMTAwMDAwMAorI2RlZmluZSBNQUlMQk9Y X1RJTUVPVVRfVVMJCTUwMDAwMDAKKwordm9pZCBjZG5fZHBfc2V0X2Z3X2NsayhzdHJ1Y3QgY2Ru X2RwX2RldmljZSAqZHAsIGludCBjbGspCit7CisJd3JpdGVsKGNsayAvIDEwMDAwMDAsIGRwLT5y ZWdzICsgU1dfQ0xLX0gpOworfQorCit2b2lkIGRwX2Nsb2NrX3Jlc2V0X3NlcShzdHJ1Y3QgY2Ru X2RwX2RldmljZSAqZHApCit7CisJd3JpdGVsKDB4ZmZmLCBkcC0+cmVncyArIFNPVVJDRV9EUFRY X0NBUik7CisJd3JpdGVsKDB4NywgZHAtPnJlZ3MgKyBTT1VSQ0VfUEhZX0NBUik7CisJd3JpdGVs KDB4ZiwgZHAtPnJlZ3MgKyBTT1VSQ0VfUEtUX0NBUik7CisJd3JpdGVsKDB4ZmYsIGRwLT5yZWdz ICsgU09VUkNFX0FJRl9DQVIpOworCXdyaXRlbCgweGYsIGRwLT5yZWdzICsgU09VUkNFX0NJUEhF Ul9DQVIpOworCXdyaXRlbCgweDMsIGRwLT5yZWdzICsgU09VUkNFX0NSWVBUT19DQVIpOworCXdy aXRlbCgwLCBkcC0+cmVncyArIEFQQl9JTlRfTUFTSyk7Cit9CisKK3N0YXRpYyBpbnQgY2RuX2Rw X21haWxib3hfcmVhZChzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApCit7CisJaW50IHZhbCwgcmV0 OworCisJaWYgKCFkcC0+ZndfbG9hZGVkKQorCQlyZXR1cm4gMDsKKworCXJldCA9IHJlYWR4X3Bv bGxfdGltZW91dChyZWFkbCwgZHAtPnJlZ3MgKyBNQUlMQk9YX0VNUFRZX0FERFIsCisJCQkJIHZh bCwgIXZhbCwgMTAwMCwgTUFJTEJPWF9USU1FT1VUX1VTKTsKKwlpZiAocmV0IDwgMCkgeworCQlk ZXZfZXJyKGRwLT5kZXYsICJmYWlsZWQgdG8gcmVhZCBtYWlsYm94LCBrZWVwIGFsaXZlID0gJXhc biIsCisJCQlyZWFkbChkcC0+cmVncyArIEtFRVBfQUxJVkUpKTsKKwkJcmV0dXJuIHJldDsKKwl9 CisKKwlyZXR1cm4gcmVhZGwoZHAtPnJlZ3MgKyBNQUlMQk9YMF9SRF9EQVRBKSAmIDB4ZmY7Cit9 CisKK3N0YXRpYyBpbnQgY2RwX2RwX21haWxib3hfd3JpdGUoc3RydWN0IGNkbl9kcF9kZXZpY2Ug KmRwLCB1OCB2YWwpCit7CisJaW50IHJldCwgZnVsbDsKKworCWlmICghZHAtPmZ3X2xvYWRlZCkK KwkJcmV0dXJuIDA7CisKKwlyZXQgPSByZWFkeF9wb2xsX3RpbWVvdXQocmVhZGwsIGRwLT5yZWdz ICsgTUFJTEJPWF9GVUxMX0FERFIsCisJCQkJIGZ1bGwsICFmdWxsLCAxMDAwLCBNQUlMQk9YX1RJ TUVPVVRfVVMpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZHAtPmRldiwgIm1haWxib3gg aXMgZnVsbCwga2VlcCBhbGl2ZSA9ICV4XG4iLAorCQkJcmVhZGwoZHAtPnJlZ3MgKyBLRUVQX0FM SVZFKSk7CisJCXJldHVybiByZXQ7CisJfQorCisJd3JpdGVsKHZhbCwgZHAtPnJlZ3MgKyBNQUlM Qk9YMF9XUl9EQVRBKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNkbl9kcF9tYWls Ym94X3Jlc3BvbnNlKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgdTggbW9kdWxlX2lkLAorCQkJ CSAgIHU4IG9wY29kZSwgdTggKmJ1ZmYsIHU4IGJ1ZmZfc2l6ZSkKK3sKKwlpbnQgcmV0LCBpID0g MDsKKwl1OCBoZWFkZXJbNF07CisKKwkvKiByZWFkIHRoZSBoZWFkZXIgb2YgdGhlIG1lc3NhZ2Ug Ki8KKwl3aGlsZSAoaSA8IDQpIHsKKwkJcmV0ID0gY2RuX2RwX21haWxib3hfcmVhZChkcCk7CisJ CWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQloZWFkZXJbaSsrXSA9IHJldDsKKwl9 CisKKwlpZiAob3Bjb2RlICE9IGhlYWRlclswXSB8fCBtb2R1bGVfaWQgIT0gaGVhZGVyWzFdIHx8 CisJICAgIGJ1ZmZfc2l6ZSAhPSAoKGhlYWRlclsyXSA8PCA4KSB8IGhlYWRlclszXSkpIHsKKwkJ ZGV2X2VycihkcC0+ZGV2LCAibWFpbGJveCByZXNwb25zZSBmYWlsZWQiKTsKKworCQkvKgorCQkg KiBJZiB0aGUgbWVzc2FnZSBpbiBtYWlsYm94IGlzIG5vdCB3aGF0IHdlIHdhbnQsIHdlIG5lZWQg dG8KKwkJICogY2xlYXIgdGhlIG1haWxib3ggYnkgcmVhZC4KKwkJICovCisJCWkgPSAoaGVhZGVy WzJdIDw8IDgpIHwgaGVhZGVyWzNdOworCQl3aGlsZSAoaS0tKQorCQkJaWYgKGNkbl9kcF9tYWls Ym94X3JlYWQoZHApIDwgMCkKKwkJCQlicmVhazsKKworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisK KwlpID0gMDsKKwl3aGlsZSAoaSA8IGJ1ZmZfc2l6ZSkgeworCQlyZXQgPSBjZG5fZHBfbWFpbGJv eF9yZWFkKGRwKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCWJ1ZmZbaSsr XSA9IHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjZG5fZHBfbWFpbGJv eF9zZW5kKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgdTggbW9kdWxlX2lkLAorCQkJICAgICAg IHU4IG9wY29kZSwgdTE2IHNpemUsIHU4ICptZXNzYWdlKQoreworCXU4IGhlYWRlcls0XTsKKwlp bnQgcmV0LCBpOworCisJaGVhZGVyWzBdID0gb3Bjb2RlOworCWhlYWRlclsxXSA9IG1vZHVsZV9p ZDsKKwloZWFkZXJbMl0gPSBzaXplID4+IDg7CisJaGVhZGVyWzNdID0gc2l6ZSAmIDB4ZmY7CisK Kwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCXJldCA9IGNkcF9kcF9tYWlsYm94X3dyaXRl KGRwLCBoZWFkZXJbaV0pOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwl3aGls ZSAoc2l6ZS0tKSB7CisJCXJldCA9IGNkcF9kcF9tYWlsYm94X3dyaXRlKGRwLCAqbWVzc2FnZSsr KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBpbnQgY2RuX2RwX3JlZ193cml0ZShzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIHUxNiBh ZGRyLCB1MzIgdmFsKQoreworCXU4IG1zZ1s2XTsKKworCW1zZ1swXSA9IChhZGRyID4+IDgpICYg MHhmZjsKKwltc2dbMV0gPSBhZGRyICYgMHhmZjsKKwltc2dbMl0gPSAodmFsID4+IDI0KSAmIDB4 ZmY7CisJbXNnWzNdID0gKHZhbCA+PiAxNikgJiAweGZmOworCW1zZ1s0XSA9ICh2YWwgPj4gOCkg JiAweGZmOworCW1zZ1s1XSA9IHZhbCAmIDB4ZmY7CisJcmV0dXJuIGNkbl9kcF9tYWlsYm94X3Nl bmQoZHAsIE1CX01PRFVMRV9JRF9EUF9UWCwgRFBUWF9XUklURV9SRUdJU1RFUiwKKwkJCQkgICBB UlJBWV9TSVpFKG1zZyksIG1zZyk7Cit9CisKK2ludCBjZG5fZHBfbG9hZF9maXJtd2FyZShzdHJ1 Y3QgY2RuX2RwX2RldmljZSAqZHAsIGNvbnN0IHUzMiAqaV9tZW0sCisJCQkgdTMyIGlfc2l6ZSwg Y29uc3QgdTMyICpkX21lbSwgdTMyIGRfc2l6ZSkKK3sKKwlpbnQgaSwgcmVnLCByZXQ7CisKKwkv KiByZXNldCB1Y3B1IGJlZm9yZSBsb2FkIGZpcm13YXJlKi8KKwl3cml0ZWwoQVBCX0lSQU1fUEFU SCB8IEFQQl9EUkFNX1BBVEggfCBBUEJfWFRfUkVTRVQsCisJICAgICAgIGRwLT5yZWdzICsgQVBC X0NUUkwpOworCisJZm9yIChpID0gMDsgaSA8IGlfc2l6ZTsgaSArPSA0KQorCQl3cml0ZWwoKmlf bWVtKyssIGRwLT5yZWdzICsgQUREUl9JTUVNICsgaSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZF9z aXplOyBpICs9IDQpCisJCXdyaXRlbCgqZF9tZW0rKywgZHAtPnJlZ3MgKyBBRERSX0RNRU0gKyBp KTsKKworCS8qIHVuLXJlc2V0IHVjcHUgKi8KKwl3cml0ZWwoMCwgZHAtPnJlZ3MgKyBBUEJfQ1RS TCk7CisKKwkvKiBjaGVjayB0aGUga2VlcCBhbGl2ZSByZWdpc3RlciB0byBtYWtlIHN1cmUgZncg d29ya2luZyAqLworCXJldCA9IHJlYWR4X3BvbGxfdGltZW91dChyZWFkbCwgZHAtPnJlZ3MgKyBL RUVQX0FMSVZFLAorCQkJCSByZWcsIHJlZywgMjAwMCwgRldfQUxJVkVfVElNRU9VVF9VUyk7CisJ aWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkcC0+ZGV2LCAiZmFpbGVkIHRvIGxvYWRlZCB0aGUg RlcgcmVnID0gJXhcbiIsIHJlZyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJlZyA9IHJl YWRsKGRwLT5yZWdzICsgVkVSX0wpICYgMHhmZjsKKwlkcC0+ZndfdmVyc2lvbiA9IHJlZzsKKwly ZWcgPSByZWFkbChkcC0+cmVncyArIFZFUl9IKSAmIDB4ZmY7CisJZHAtPmZ3X3ZlcnNpb24gfD0g cmVnIDw8IDg7CisJcmVnID0gcmVhZGwoZHAtPnJlZ3MgKyBWRVJfTElCX0xfQUREUikgJiAweGZm OworCWRwLT5md192ZXJzaW9uIHw9IHJlZyA8PCAxNjsKKwlyZWcgPSByZWFkbChkcC0+cmVncyAr IFZFUl9MSUJfSF9BRERSKSAmIDB4ZmY7CisJZHAtPmZ3X3ZlcnNpb24gfD0gcmVnIDw8IDI0Owor CisJZHAtPmZ3X2xvYWRlZCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGNkbl9kcF9yZWdf d3JpdGVfYml0KHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgdTE2IGFkZHIsIHU4IHN0YXJ0X2Jp dCwKKwkJCSB1OCBiaXRzX25vLCB1MzIgdmFsKQoreworCXU4IGZpZWxkWzhdOworCisJZmllbGRb MF0gPSAoYWRkciA+PiA4KSAmIDB4ZmY7CisJZmllbGRbMV0gPSBhZGRyICYgMHhmZjsKKwlmaWVs ZFsyXSA9IHN0YXJ0X2JpdDsKKwlmaWVsZFszXSA9IGJpdHNfbm87CisJZmllbGRbNF0gPSAodmFs ID4+IDI0KSAmIDB4ZmY7CisJZmllbGRbNV0gPSAodmFsID4+IDE2KSAmIDB4ZmY7CisJZmllbGRb Nl0gPSAodmFsID4+IDgpICYgMHhmZjsKKwlmaWVsZFs3XSA9IHZhbCAmIDB4ZmY7CisKKwlyZXR1 cm4gY2RuX2RwX21haWxib3hfc2VuZChkcCwgTUJfTU9EVUxFX0lEX0RQX1RYLCBEUFRYX1dSSVRF X0ZJRUxELAorCQkJICAgIHNpemVvZihmaWVsZCksIGZpZWxkKTsKK30KKworaW50IGNkbl9kcF9h Y3RpdmUoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCBib29sIGVuYWJsZSkKK3sKKwl1OCBhY3Rp dmUgPSBlbmFibGUgPyAxIDogMDsKKwl1OCByZXNwOworCWludCByZXQ7CisKKwkvKiBzZXQgZmly bXdhcmUgc3RhdHVzLCAxOiBhdnRpdmU7IDA6IHN0YW5kYnkgKi8KKwlyZXQgPSBjZG5fZHBfbWFp bGJveF9zZW5kKGRwLCBNQl9NT0RVTEVfSURfR0VORVJBTCwKKwkJCQkgIEdFTkVSQUxfTUFJTl9D T05UUk9MLCAxLCAmYWN0aXZlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0g Y2RuX2RwX21haWxib3hfcmVzcG9uc2UoZHAsIE1CX01PRFVMRV9JRF9HRU5FUkFMLAorCQkJCSAg ICAgIEdFTkVSQUxfTUFJTl9DT05UUk9MLCAmcmVzcCwgMSk7CisJaWYgKHJldCkKKwkJcmV0dXJu IHJldDsKKworCXJldHVybiByZXNwID8gMCA6IC1FSU5WQUw7Cit9CisKK2ludCBjZG5fZHBfc2V0 X2hvc3RfY2FwKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCkKK3sKKwl1OCBtc2dbOF07CisJaW50 IHJldDsKKworCW1zZ1swXSA9IERQX0xJTktfQldfNV80OworCW1zZ1sxXSA9IGRwLT5jYXBfbGFu ZXM7CisJbXNnWzJdID0gVk9MVEFHRV9MRVZFTF8yOworCW1zZ1szXSA9IFBSRV9FTVBIQVNJU19M RVZFTF8zOworCW1zZ1s0XSA9IFBSQlM3IHwgRDEwXzIgfCBUUkFJTklOR19QVE4xIHwgVFJBSU5J TkdfUFROMjsKKwltc2dbNV0gPSBGQVNUX0xUX05PVF9TVVBQT1JUOworCW1zZ1s2XSA9IExBTkVf TUFQUElOR19OT1JNQUw7CisJbXNnWzddID0gRU5IQU5DRUQ7CisKKwlyZXQgPSBjZG5fZHBfbWFp bGJveF9zZW5kKGRwLCBNQl9NT0RVTEVfSURfRFBfVFgsCisJCQkJICBEUFRYX1NFVF9IT1NUX0NB UEFCSUxJVElFUywKKwkJCQkgIEFSUkFZX1NJWkUobXNnKSwgbXNnKTsKKwlpZiAocmV0KQorCQly ZXR1cm4gcmV0OworCisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZShkcCwgRFBfQVVYX1NXQVBfSU5W RVJTSU9OX0NPTlRST0wsCisJCQkgICAgICAgQVVYX0hPU1RfSU5WRVJUKTsKKwlpZiAocmV0KQor CQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK2ludCBjZG5fZHBfZXZlbnRfY29uZmln KHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCkKK3sKKwl1OCBtc2dbNV0gPSB7MCwgMCwgMCwgMCwg MH07CisKKwltc2dbMF0gPSBEUFRYX0VWRU5UX0VOQUJMRV9IUEQgfCBEUFRYX0VWRU5UX0VOQUJM RV9UUkFJTklORzsKKworCXJldHVybiBjZG5fZHBfbWFpbGJveF9zZW5kKGRwLCBNQl9NT0RVTEVf SURfRFBfVFgsIERQVFhfRU5BQkxFX0VWRU5ULAorCQkJCSAgICBBUlJBWV9TSVpFKG1zZyksIG1z Zyk7Cit9CisKK2ludCBjZG5fZHBfZ2V0X2V2ZW50KHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCkK K3sKKwlyZXR1cm4gcmVhZGwoZHAtPnJlZ3MgKyBTV19FVkVOVFMwKTsKK30KKworaW50IGNkbl9k cF9nZXRfaHBkX3N0YXR1cyhzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApCit7CisJdTggc3RhdHVz OworCWludCByZXQ7CisKKwlyZXQgPSBjZG5fZHBfbWFpbGJveF9zZW5kKGRwLCBNQl9NT0RVTEVf SURfRFBfVFgsIERQVFhfSFBEX1NUQVRFLAorCQkJCSAgMCwgTlVMTCk7CisJaWYgKHJldCkKKwkJ cmV0dXJuIHJldDsKKworCXJldCA9IGNkbl9kcF9tYWlsYm94X3Jlc3BvbnNlKGRwLCBNQl9NT0RV TEVfSURfRFBfVFgsCisJCQkJICAgICAgRFBUWF9IUERfU1RBVEUsICZzdGF0dXMsIDEpOworCWlm IChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitpbnQgY2RuX2Rw X2dldF9lZGlkX2Jsb2NrKHZvaWQgKmRhdGEsIHU4ICplZGlkLAorCQkJICB1bnNpZ25lZCBpbnQg YmxvY2ssIHNpemVfdCBsZW5ndGgpCit7CisJc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwID0gZGF0 YTsKKwl1OCBtc2dbMl0sIHJlZ1tFRElEX0RBVEEgKyBFRElEX0JMT0NLX1NJWkVdOworCWludCBy ZXQ7CisKKwlpZiAobGVuZ3RoICE9IEVESURfQkxPQ0tfU0laRSkKKwkJcmV0dXJuIC1FSU5WQUw7 CisKKwltc2dbMF0gPSBibG9jayAvIDI7CisJbXNnWzFdID0gYmxvY2sgJSAyOworCisJcmV0ID0g Y2RuX2RwX21haWxib3hfc2VuZChkcCwgTUJfTU9EVUxFX0lEX0RQX1RYLCBEUFRYX0dFVF9FRElE LAorCQkJCSAgMiwgbXNnKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gY2Ru X2RwX21haWxib3hfcmVzcG9uc2UoZHAsIE1CX01PRFVMRV9JRF9EUF9UWCwKKwkJCQkgICAgICBE UFRYX0dFVF9FRElELCByZWcsCisJCQkJICAgICAgRURJRF9EQVRBICsgRURJRF9CTE9DS19TSVpF KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKHJlZ1tFRElEX0xFTkdUSF9CWVRF XSAhPSBFRElEX0JMT0NLX1NJWkUgfHwKKwkgICAgcmVnW0VESURfU0VHTUVOVF9CVU1CRVJdICE9 IGJsb2NrIC8gMikgeworCQlkZXZfZXJyKGRwLT5kZXYsICJlZGlkIGJsb2NrIHNpemUgZXJyXG4i KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbWVtY3B5KGVkaWQsICZyZWdbRURJRF9EQVRB XSwgRURJRF9CTE9DS19TSVpFKTsKKworCXJldHVybiAwOworfQorCitpbnQgY2RuX2RwX3RyYWlu aW5nX3N0YXJ0KHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCkKK3sKKwl1OCBtc2csIGV2ZW50WzJd OworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwlpbnQgcmV0OworCisJbXNnID0gTElOS19UUkFJ TklOR19SVU47CisKKwkvKiBzdGFydCB0cmFpbmluZyAqLworCXJldCA9IGNkbl9kcF9tYWlsYm94 X3NlbmQoZHAsIE1CX01PRFVMRV9JRF9EUF9UWCwgRFBUWF9UUkFJTklOR19DT05UUk9MLAorCQkJ CSAgMSwgJm1zZyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIHRoZSB3aG9sZSB0 cmFpbmluZyBzaG91bGQgZmluaXNoIGluIDUwMG1zICovCisJdGltZW91dCA9IGppZmZpZXMgKyBt c2Vjc190b19qaWZmaWVzKDUwMCk7CisJd2hpbGUgKDEpIHsKKwkJbXNsZWVwKDIwKTsKKwkJcmV0 ID0gY2RuX2RwX21haWxib3hfc2VuZChkcCwgTUJfTU9EVUxFX0lEX0RQX1RYLAorCQkJCQkgIERQ VFhfUkVBRF9FVkVOVCwgMCwgTlVMTCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJ CXJldCA9IGNkbl9kcF9tYWlsYm94X3Jlc3BvbnNlKGRwLCBNQl9NT0RVTEVfSURfRFBfVFgsCisJ CQkJCSAgICAgIERQVFhfUkVBRF9FVkVOVCwgZXZlbnQsIDIpOworCQlpZiAocmV0KQorCQkJcmV0 dXJuIHJldDsKKworCQlpZiAoZXZlbnRbMV0gJiBFUV9QSEFTRV9GSU5JU0hFRCkKKwkJCWJyZWFr OworCisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKQorCQkJcmV0dXJuIC1FVElN RURPVVQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBjZG5fZHBfZ2V0X2x0X3N0YXR1cyhz dHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApCit7CisJdTggc3RhdHVzWzEwXTsKKwlpbnQgcmV0Owor CisJcmV0ID0gY2RuX2RwX21haWxib3hfc2VuZChkcCwgTUJfTU9EVUxFX0lEX0RQX1RYLCBEUFRY X1JFQURfTElOS19TVEFULAorCQkJCSAgMCwgTlVMTCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJl dDsKKworCXJldCA9IGNkbl9kcF9tYWlsYm94X3Jlc3BvbnNlKGRwLCBNQl9NT0RVTEVfSURfRFBf VFgsCisJCQkJICAgICAgRFBUWF9SRUFEX0xJTktfU1RBVCwgc3RhdHVzLCAxMCk7CisJaWYgKHJl dCkKKwkJcmV0dXJuIHJldDsKKworCWRwLT5saW5rLnJhdGUgPSBzdGF0dXNbMF07CisJZHAtPmxp bmsubnVtX2xhbmVzID0gc3RhdHVzWzFdOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBjZG5fZHBf c2V0X3ZpZGVvX3N0YXR1cyhzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIGludCBhY3RpdmUpCit7 CisJdTggbXNnOworCisJbXNnID0gISFhY3RpdmU7CisKKwlyZXR1cm4gY2RuX2RwX21haWxib3hf c2VuZChkcCwgTUJfTU9EVUxFX0lEX0RQX1RYLCBEUFRYX1NFVF9WSURFTywKKwkJCQkgICAxLCAm bXNnKTsKK30KKworc3RhdGljIGludCBjZG5fZHBfZ2V0X21zYV9taXNjKHN0cnVjdCB2aWRlb19p bmZvICp2aWRlbywKKwkJCSAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sK Kwl1OCB2YWwwLCB2YWwxOworCXUzMiBtc2FfbWlzYzsKKworCXN3aXRjaCAodmlkZW8tPmNvbG9y X2ZtdCkgeworCWNhc2UgUFhMX1JHQjoKKwljYXNlIFlfT05MWToKKwkJdmFsMCA9IDA7CisJCWJy ZWFrOworCWNhc2UgWUNCQ1JfNF80XzQ6CisJCS8qIHNldCBkZWZhdWx0IGNvbG9yIHNwYWNlIGNv bnZlcnNpb24gdG8gQlQ2MDEgKi8KKwkJdmFsMCA9IDYgKyBCVF82MDEgKiA4OworCQlicmVhazsK KwljYXNlIFlDQkNSXzRfMl8yOgorCQkvKiBzZXQgZGVmYXVsdCBjb2xvciBzcGFjZSBjb252ZXJz aW9uIHRvIEJUNjAxICovCisJCXZhbDAgPSA1ICsgQlRfNjAxICogODsKKwkJYnJlYWs7CisJY2Fz ZSBZQ0JDUl80XzJfMDoKKwkJdmFsMCA9IDU7CisJCWJyZWFrOworCX07CisKKwlzd2l0Y2ggKHZp ZGVvLT5jb2xvcl9kZXB0aCkgeworCWNhc2UgNjoKKwkJdmFsMSA9IDA7CisJCWJyZWFrOworCWNh c2UgODoKKwkJdmFsMSA9IDE7CisJCWJyZWFrOworCWNhc2UgMTA6CisJCXZhbDEgPSAyOworCQli cmVhazsKKwljYXNlIDEyOgorCQl2YWwxID0gMzsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJdmFs MSA9IDQ7CisJCWJyZWFrOworCX07CisKKwltc2FfbWlzYyA9IDIgKiB2YWwwICsgMzIgKiB2YWwx ICsKKwkJICAgKCh2aWRlby0+Y29sb3JfZm10ID09IFlfT05MWSkgPyAoMSA8PCAxNCkgOiAwKTsK KworCXJldHVybiBtc2FfbWlzYzsKK30KKworaW50IGNkbl9kcF9jb25maWdfdmlkZW8oc3RydWN0 IGNkbl9kcF9kZXZpY2UgKmRwKQoreworCXN0cnVjdCB2aWRlb19pbmZvICp2aWRlbyA9ICZkcC0+ dmlkZW9faW5mbzsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9ICZkcC0+bW9kZTsK Kwl1NjQgc3ltYm9sOworCXUzMiB2YWwsIGxpbmtfcmF0ZTsKKwl1OCBiaXRfcGVyX3BpeDsKKwl1 OCB0dV9zaXplX3JlZyA9IFRVX1NJWkU7CisJaW50IHJldDsKKworCWJpdF9wZXJfcGl4ID0gKHZp ZGVvLT5jb2xvcl9mbXQgPT0gWUNCQ1JfNF8yXzIpID8KKwkJICAgICAgKHZpZGVvLT5jb2xvcl9k ZXB0aCAqIDIpIDogKHZpZGVvLT5jb2xvcl9kZXB0aCAqIDMpOworCisJbGlua19yYXRlID0gZHJt X2RwX2J3X2NvZGVfdG9fbGlua19yYXRlKGRwLT5saW5rLnJhdGUpOworCisJdmFsID0gVklGX0JZ UEFTU19JTlRFUkxBQ0U7CisKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBCTkRfSFNZTkMy VlNZTkMsIHZhbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGNkbl9kcF9y ZWdfd3JpdGUoZHAsIEhTWU5DMlZTWU5DX1BPTF9DVFJMLCAwKTsKKwlpZiAocmV0KQorCQlyZXR1 cm4gcmV0OworCisJLyogZ2V0IGEgYmVzdCB0dV9zaXplIGFuZCBzeW1ib2wgKi8KKwlkbyB7CisJ CXR1X3NpemVfcmVnICs9IDI7CisJCXN5bWJvbCA9IHR1X3NpemVfcmVnICogbW9kZS0+Y2xvY2sg KiBiaXRfcGVyX3BpeDsKKwkJc3ltYm9sIC89IGRwLT5saW5rLm51bV9sYW5lcyAqIGxpbmtfcmF0 ZSAqIDg7CisJfSB3aGlsZSAoKHN5bWJvbCA9PSAxKSB8fCAodHVfc2l6ZV9yZWcgLSBzeW1ib2wg PCA0KSk7CisKKwl2YWwgPSBzeW1ib2wgKyAodHVfc2l6ZV9yZWcgPDwgOCk7CisKKwlyZXQgPSBj ZG5fZHBfcmVnX3dyaXRlKGRwLCBEUF9GUkFNRVJfVFUsIHZhbCk7CisJaWYgKHJldCkKKwkJcmV0 dXJuIHJldDsKKworCXN3aXRjaCAodmlkZW8tPmNvbG9yX2RlcHRoKSB7CisJY2FzZSA2OgorCQl2 YWwgPSBCQ1NfNjsKKwkJYnJlYWs7CisJY2FzZSA4OgorCQl2YWwgPSBCQ1NfODsKKwkJYnJlYWs7 CisJY2FzZSAxMDoKKwkJdmFsID0gQkNTXzEwOworCQlicmVhazsKKwljYXNlIDEyOgorCQl2YWwg PSBCQ1NfMTI7CisJCWJyZWFrOworCWNhc2UgMTY6CisJCXZhbCA9IEJDU18xNjsKKwkJYnJlYWs7 CisJfTsKKworCXZhbCArPSB2aWRlby0+Y29sb3JfZm10IDw8IDg7CisJcmV0ID0gY2RuX2RwX3Jl Z193cml0ZShkcCwgRFBfRlJBTUVSX1BYTF9SRVBSLCB2YWwpOworCWlmIChyZXQpCisJCXJldHVy biByZXQ7CisKKwl2YWwgPSB2aWRlby0+aF9zeW5jX3BvbGFyaXR5ID8gRFBfRlJBTUVSX1NQX0hT UCA6IDA7CisJdmFsIHw9IHZpZGVvLT52X3N5bmNfcG9sYXJpdHkgPyBEUF9GUkFNRVJfU1BfVlNQ IDogMDsKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBEUF9GUkFNRVJfU1AsIHZhbCk7CisJ aWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXZhbCA9IChtb2RlLT5oc3luY19zdGFydCAtIG1v ZGUtPmhkaXNwbGF5KSA8PCAxNjsKKwl2YWwgfD0gbW9kZS0+aHRvdGFsIC0gbW9kZS0+aHN5bmNf ZW5kOworCXJldCA9IGNkbl9kcF9yZWdfd3JpdGUoZHAsIERQX0ZST05UX0JBQ0tfUE9SQ0gsIHZh bCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXZhbCA9IG1vZGUtPmhkaXNwbGF5ICog Yml0X3Blcl9waXggLyA4OworCXJldCA9IGNkbl9kcF9yZWdfd3JpdGUoZHAsIERQX0JZVEVfQ09V TlQsIHZhbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXZhbCA9IG1vZGUtPmh0b3Rh bCB8ICgobW9kZS0+aHRvdGFsIC0gbW9kZS0+aHN5bmNfc3RhcnQpIDw8IDE2KTsKKwlyZXQgPSBj ZG5fZHBfcmVnX3dyaXRlKGRwLCBNU0FfSE9SSVpPTlRBTF8wLCB2YWwpOworCWlmIChyZXQpCisJ CXJldHVybiByZXQ7CisKKwl2YWwgPSBtb2RlLT5oc3luY19lbmQgLSBtb2RlLT5oc3luY19zdGFy dDsKKwl2YWwgfD0gKG1vZGUtPmhkaXNwbGF5IDw8IDE2KSB8ICh2aWRlby0+aF9zeW5jX3BvbGFy aXR5IDw8IDE1KTsKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBNU0FfSE9SSVpPTlRBTF8x LCB2YWwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwl2YWwgPSBtb2RlLT52dG90YWw7 CisJdmFsIHw9ICgobW9kZS0+dnRvdGFsIC0gbW9kZS0+dnN5bmNfc3RhcnQpIDw8IDE2KTsKKwor CXJldCA9IGNkbl9kcF9yZWdfd3JpdGUoZHAsIE1TQV9WRVJUSUNBTF8wLCB2YWwpOworCWlmIChy ZXQpCisJCXJldHVybiByZXQ7CisKKwl2YWwgPSBtb2RlLT52c3luY19lbmQgLSBtb2RlLT52c3lu Y19zdGFydDsKKwl2YWwgfD0gbW9kZS0+dmRpc3BsYXkgPDwgMTY7CisJdmFsIHw9ICh2aWRlby0+ dl9zeW5jX3BvbGFyaXR5IDw8IDE1KTsKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBNU0Ff VkVSVElDQUxfMSwgdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJdmFsID0gY2Ru X2RwX2dldF9tc2FfbWlzYyh2aWRlbywgbW9kZSk7CisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZShk cCwgTVNBX01JU0MsIHZhbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGNk bl9kcF9yZWdfd3JpdGUoZHAsIFNUUkVBTV9DT05GSUcsIDEpOworCWlmIChyZXQpCisJCXJldHVy biByZXQ7CisKKwl2YWwgPSBtb2RlLT5oc3luY19lbmQgLSBtb2RlLT5oc3luY19zdGFydDsKKwl2 YWwgfD0gKG1vZGUtPmhkaXNwbGF5IDw8IDE2KTsKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRw LCBEUF9IT1JJWk9OVEFMLCB2YWwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwl2YWwg PSBtb2RlLT52dG90YWw7CisJdmFsIC09IChtb2RlLT52dG90YWwgLSBtb2RlLT52ZGlzcGxheSk7 CisJdmFsIHw9IChtb2RlLT52dG90YWwgLSBtb2RlLT52c3luY19zdGFydCkgPDwgMTY7CisKKwly ZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBEUF9WRVJUSUNBTF8wLCB2YWwpOworCWlmIChyZXQp CisJCXJldHVybiByZXQ7CisKKwl2YWwgPSBtb2RlLT52dG90YWw7CisJcmV0ID0gY2RuX2RwX3Jl Z193cml0ZShkcCwgRFBfVkVSVElDQUxfMSwgdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0 OworCisJdmFsID0gIDA7CisJcmV0dXJuIGNkbl9kcF9yZWdfd3JpdGVfYml0KGRwLCBEUF9WQl9J RCwgMiwgMSwgdmFsKTsKK30KKworaW50IGNkbl9kcF9hdWRpb19zdG9wKHN0cnVjdCBjZG5fZHBf ZGV2aWNlICpkcCwgc3RydWN0IGF1ZGlvX2luZm8gKmF1ZGlvKQoreworCWludCByZXQgPSBjZG5f ZHBfcmVnX3dyaXRlKGRwLCBBVURJT19QQUNLX0NPTlRST0wsIEFVRElPX1BBQ0tfRU4oMCkpOwor CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwl3cml0ZWwoMHgxRjA3MDcsIGRwLT5yZWdzICsg U1BESUZfQ1RSTF9BRERSKTsKKwl3cml0ZWwoMCwgZHAtPnJlZ3MgKyBBVURJT19TUkNfQ05UTCk7 CisJd3JpdGVsKDAsIGRwLT5yZWdzICsgQVVESU9fU1JDX0NORkcpOworCXdyaXRlbCgxLCBkcC0+ cmVncyArIEFVRElPX1NSQ19DTlRMKTsKKwl3cml0ZWwoMCwgZHAtPnJlZ3MgKyBBVURJT19TUkNf Q05UTCk7CisKKwl3cml0ZWwoMCwgZHAtPnJlZ3MgKyBTTVBMMlBLVF9DTlRMKTsKKwl3cml0ZWwo MSwgZHAtPnJlZ3MgKyBTTVBMMlBLVF9DTlRMKTsKKwl3cml0ZWwoMCwgZHAtPnJlZ3MgKyBTTVBM MlBLVF9DTlRMKTsKKworCXdyaXRlbCgxLCBkcC0+cmVncyArIEZJRk9fQ05UTCk7CisJd3JpdGVs KDAsIGRwLT5yZWdzICsgRklGT19DTlRMKTsKKworCWlmIChhdWRpby0+Zm9ybWF0ID09IEFGTVRf U1BESUYpCisJCWNsa19kaXNhYmxlX3VucHJlcGFyZShkcC0+c3BkaWZfY2xrKTsKKworCXJldHVy biAwOworfQorCitpbnQgY2RuX2RwX2F1ZGlvX211dGUoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRw LCBib29sIGVuYWJsZSkKK3sKKwlyZXR1cm4gY2RuX2RwX3JlZ193cml0ZV9iaXQoZHAsIERQX1ZC X0lELCA0LCAxLCBlbmFibGUpOworfQorCitpbnQgY2RuX2RwX2F1ZGlvX2NvbmZpZ19zZXQoc3Ry dWN0IGNkbl9kcF9kZXZpY2UgKmRwLCBzdHJ1Y3QgYXVkaW9faW5mbyAqYXVkaW8pCit7CisJaW50 IGxhbmVzX3BhcmFtLCBpMnNfcG9ydF9lbl92YWwsIHZhbCwgaTsKKwlpbnQgcmV0OworCisJaWYg KGF1ZGlvLT5jaGFubmVscyA9PSAyICYmIGRwLT5saW5rLm51bV9sYW5lcyA9PSAxKQorCQlsYW5l c19wYXJhbSA9IDE7CisJZWxzZSBpZiAoYXVkaW8tPmNoYW5uZWxzID09IDIpCisJCWxhbmVzX3Bh cmFtID0gMzsKKwllbHNlCisJCWxhbmVzX3BhcmFtID0gMDsKKworCWlmIChhdWRpby0+Y2hhbm5l bHMgPT0gMikKKwkJaTJzX3BvcnRfZW5fdmFsID0gMTsKKwllbHNlIGlmIChhdWRpby0+Y2hhbm5l bHMgPT0gNCkKKwkJaTJzX3BvcnRfZW5fdmFsID0gMzsKKwllbHNlCisJCWkyc19wb3J0X2VuX3Zh bCA9IDB4ZjsKKworCWlmIChhdWRpby0+Zm9ybWF0ID09IEFGTVRfU1BESUYpIHsKKwkJcmVzZXRf Y29udHJvbF9hc3NlcnQoZHAtPnNwZGlmX3JzdCk7CisJCXJlc2V0X2NvbnRyb2xfZGVhc3NlcnQo ZHAtPnNwZGlmX3JzdCk7CisJfQorCisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZShkcCwgQ01fTEFO RV9DVFJMLCAweDgwMDApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBjZG5f ZHBfcmVnX3dyaXRlKGRwLCBDTV9DVFJMLCAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0Owor CisJaWYgKGF1ZGlvLT5mb3JtYXQgPT0gQUZNVF9JMlMpIHsKKwkJd3JpdGVsKDB4MCwgZHAtPnJl Z3MgKyBTUERJRl9DVFJMX0FERFIpOworCisJCXdyaXRlbChTWU5DX1dSX1RPX0NIX1pFUk8sIGRw LT5yZWdzICsgRklGT19DTlRMKTsKKworCQl2YWwgPSBhdWRpby0+Y2hhbm5lbHMgLSAxOworCQl2 YWwgfD0gKGF1ZGlvLT5jaGFubmVscyAvIDIgLSAxKSA8PCA1OworCQl2YWwgfD0gQklUKDgpOwor CQl2YWwgfD0gbGFuZXNfcGFyYW0gPDwgMTE7CisJCXdyaXRlbCh2YWwsIGRwLT5yZWdzICsgU01Q TDJQS1RfQ05GRyk7CisKKwkJaWYgKGF1ZGlvLT5zYW1wbGVfd2lkdGggPT0gMTYpCisJCQl2YWwg PSAwOworCQllbHNlIGlmIChhdWRpby0+c2FtcGxlX3dpZHRoID09IDI0KQorCQkJdmFsID0gMSA8 PCA5OworCQllbHNlCisJCQl2YWwgPSAyIDw8IDk7CisKKwkJdmFsIHw9IChhdWRpby0+Y2hhbm5l bHMgLSAxKSA8PCAyOworCQl2YWwgfD0gaTJzX3BvcnRfZW5fdmFsIDw8IDE3OworCQl2YWwgfD0g MiA8PCAxMTsKKwkJd3JpdGVsKHZhbCwgZHAtPnJlZ3MgKyBBVURJT19TUkNfQ05GRyk7CisKKwkJ Zm9yIChpID0gMDsgaSA8IChhdWRpby0+Y2hhbm5lbHMgKyAxKSAvIDI7IGkrKykgeworCQkJaWYg KGF1ZGlvLT5zYW1wbGVfd2lkdGggPT0gMTYpCisJCQkJdmFsID0gKDB4MDggPDwgOCkgfCAoMHgw OCA8PCAyMCk7CisJCQllbHNlIGlmIChhdWRpby0+c2FtcGxlX3dpZHRoID09IDI0KQorCQkJCXZh bCA9ICgweDBiIDw8IDgpIHwgKDB4MGIgPDwgMjApOworCisJCQl2YWwgfD0gKCgyICogaSkgPDwg NCkgfCAoKDIgKiBpICsgMSkgPDwgMTYpOworCQkJd3JpdGVsKHZhbCwgZHAtPnJlZ3MgKyBTVFRT X0JJVF9DSChpKSk7CisJCX0KKworCQlzd2l0Y2ggKGF1ZGlvLT5zYW1wbGVfcmF0ZSkgeworCQlj YXNlIDMyMDAwOgorCQkJdmFsID0gU0FNUExJTkdfRlJFUSgzKSB8CisJCQkgICAgICBPUklHSU5B TF9TQU1QX0ZSRVEoMHhjKTsKKwkJCWJyZWFrOworCQljYXNlIDQ0MTAwOgorCQkJdmFsID0gU0FN UExJTkdfRlJFUSgwKSB8CisJCQkgICAgICBPUklHSU5BTF9TQU1QX0ZSRVEoMHhmKTsKKwkJCWJy ZWFrOworCQljYXNlIDQ4MDAwOgorCQkJdmFsID0gU0FNUExJTkdfRlJFUSgyKSB8CisJCQkgICAg ICBPUklHSU5BTF9TQU1QX0ZSRVEoMHhkKTsKKwkJCWJyZWFrOworCQljYXNlIDg4MjAwOgorCQkJ dmFsID0gU0FNUExJTkdfRlJFUSg4KSB8CisJCQkgICAgICBPUklHSU5BTF9TQU1QX0ZSRVEoMHg3 KTsKKwkJCWJyZWFrOworCQljYXNlIDk2MDAwOgorCQkJdmFsID0gU0FNUExJTkdfRlJFUSgweGEp IHwKKwkJCSAgICAgIE9SSUdJTkFMX1NBTVBfRlJFUSg1KTsKKwkJCWJyZWFrOworCQljYXNlIDE3 NjQwMDoKKwkJCXZhbCA9IFNBTVBMSU5HX0ZSRVEoMHhjKSB8CisJCQkgICAgICBPUklHSU5BTF9T QU1QX0ZSRVEoMyk7CisJCQlicmVhazsKKwkJY2FzZSAxOTIwMDA6CisJCQl2YWwgPSBTQU1QTElO R19GUkVRKDB4ZSkgfAorCQkJICAgICAgT1JJR0lOQUxfU0FNUF9GUkVRKDEpOworCQkJYnJlYWs7 CisJCX0KKwkJdmFsIHw9IDQ7CisJCXdyaXRlbCh2YWwsIGRwLT5yZWdzICsgQ09NX0NIX1NUVFNf QklUUyk7CisKKwkJd3JpdGVsKDIsIGRwLT5yZWdzICsgU01QTDJQS1RfQ05UTCk7CisJCXdyaXRl bCgyLCBkcC0+cmVncyArIEFVRElPX1NSQ19DTlRMKTsKKwl9IGVsc2UgeworCQl2YWwgPSAweDFG MDcwNzsKKwkJd3JpdGVsKHZhbCwgZHAtPnJlZ3MgKyBTUERJRl9DVFJMX0FERFIpOworCisJCXdy aXRlbChTWU5DX1dSX1RPX0NIX1pFUk8sIGRwLT5yZWdzICsgRklGT19DTlRMKTsKKworCQl2YWwg PSAweDEwMSB8ICgzIDw8IDExKTsKKwkJd3JpdGVsKHZhbCwgZHAtPnJlZ3MgKyBTTVBMMlBLVF9D TkZHKTsKKwkJd3JpdGVsKDIsIGRwLT5yZWdzICsgU01QTDJQS1RfQ05UTCk7CisKKwkJdmFsID0g MHgzRjA3MDc7CisJCXdyaXRlbCh2YWwsIGRwLT5yZWdzICsgU1BESUZfQ1RSTF9BRERSKTsKKwor CQljbGtfcHJlcGFyZV9lbmFibGUoZHAtPnNwZGlmX2Nsayk7CisJCWNsa19zZXRfcmF0ZShkcC0+ c3BkaWZfY2xrLCBDRE5fRFBfU1BESUZfQ0xLKTsKKwl9CisKKwlyZXR1cm4gY2RuX2RwX3JlZ193 cml0ZShkcCwgQVVESU9fUEFDS19DT05UUk9MLCBBVURJT19QQUNLX0VOKDEpKTsKK30KZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAtcmVnLmggYi9kcml2ZXJzL2dw dS9kcm0vcm9ja2NoaXAvY2RuLWRwLXJlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLmIzMzc5M2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2No aXAvY2RuLWRwLXJlZy5oCkBAIC0wLDAgKzEsNDA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSBG dXpob3UgUm9ja2NoaXAgRWxlY3Ryb25pY3MgQ28uTHRkCisgKiBBdXRob3I6IENocmlzIFpob25n IDx6eXdAcm9jay1jaGlwcy5jb20+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJz aW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQK KyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2Ug dGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9DRE5fRFBf UkVHX0gKKyNkZWZpbmUgX0NETl9EUF9SRUdfSAorCisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+ CisKKyNkZWZpbmUgQUREUl9JTUVNCQkweDEwMDAwCisjZGVmaW5lIEFERFJfRE1FTQkJMHgyMDAw MAorCisvKiBBUEIgQ0ZHIGFkZHIgKi8KKyNkZWZpbmUgQVBCX0NUUkwJCQkwCisjZGVmaW5lIFhU X0lOVF9DVFJMCQkJMHgwNAorI2RlZmluZSBNQUlMQk9YX0ZVTExfQUREUgkJMHgwOAorI2RlZmlu ZSBNQUlMQk9YX0VNUFRZX0FERFIJCTB4MGMKKyNkZWZpbmUgTUFJTEJPWDBfV1JfREFUQQkJMHgx MAorI2RlZmluZSBNQUlMQk9YMF9SRF9EQVRBCQkweDE0CisjZGVmaW5lIEtFRVBfQUxJVkUJCQkw eDE4CisjZGVmaW5lIFZFUl9MCQkJCTB4MWMKKyNkZWZpbmUgVkVSX0gJCQkJMHgyMAorI2RlZmlu ZSBWRVJfTElCX0xfQUREUgkJCTB4MjQKKyNkZWZpbmUgVkVSX0xJQl9IX0FERFIJCQkweDI4Cisj ZGVmaW5lIFNXX0RFQlVHX0wJCQkweDJjCisjZGVmaW5lIFNXX0RFQlVHX0gJCQkweDMwCisjZGVm aW5lIE1BSUxCT1hfSU5UX01BU0sJCTB4MzQKKyNkZWZpbmUgTUFJTEJPWF9JTlRfU1RBVFVTCQkw eDM4CisjZGVmaW5lIFNXX0NMS19MCQkJMHgzYworI2RlZmluZSBTV19DTEtfSAkJCTB4NDAKKyNk ZWZpbmUgU1dfRVZFTlRTMAkJCTB4NDQKKyNkZWZpbmUgU1dfRVZFTlRTMQkJCTB4NDgKKyNkZWZp bmUgU1dfRVZFTlRTMgkJCTB4NGMKKyNkZWZpbmUgU1dfRVZFTlRTMwkJCTB4NTAKKyNkZWZpbmUg WFRfT0NEX0NUUkwJCQkweDYwCisjZGVmaW5lIEFQQl9JTlRfTUFTSwkJCTB4NmMKKyNkZWZpbmUg QVBCX1NUQVRVU19NQVNLCQkJMHg3MAorCisvKiBhdWRpbyBkZWNvZGVyIGFkZHIgKi8KKyNkZWZp bmUgQVVESU9fU1JDX0NOVEwJCQkweDMwMDAwCisjZGVmaW5lIEFVRElPX1NSQ19DTkZHCQkJMHgz MDAwNAorI2RlZmluZSBDT01fQ0hfU1RUU19CSVRTCQkweDMwMDA4CisjZGVmaW5lIFNUVFNfQklU X0NIKHgpCQkJKDB4MzAwMGMgKyAoKHgpIDw8IDIpKQorI2RlZmluZSBTUERJRl9DVFJMX0FERFIJ CQkweDMwMDRjCisjZGVmaW5lIFNQRElGX0NIMV9DU18zMTAwX0FERFIJCTB4MzAwNTAKKyNkZWZp bmUgU1BESUZfQ0gxX0NTXzYzMzJfQUREUgkJMHgzMDA1NAorI2RlZmluZSBTUERJRl9DSDFfQ1Nf OTU2NF9BRERSCQkweDMwMDU4CisjZGVmaW5lIFNQRElGX0NIMV9DU18xMjc5Nl9BRERSCQkweDMw MDVjCisjZGVmaW5lIFNQRElGX0NIMV9DU18xNTkxMjhfQUREUgkweDMwMDYwCisjZGVmaW5lIFNQ RElGX0NIMV9DU18xOTExNjBfQUREUgkweDMwMDY0CisjZGVmaW5lIFNQRElGX0NIMl9DU18zMTAw X0FERFIJCTB4MzAwNjgKKyNkZWZpbmUgU1BESUZfQ0gyX0NTXzYzMzJfQUREUgkJMHgzMDA2Ywor I2RlZmluZSBTUERJRl9DSDJfQ1NfOTU2NF9BRERSCQkweDMwMDcwCisjZGVmaW5lIFNQRElGX0NI Ml9DU18xMjc5Nl9BRERSCQkweDMwMDc0CisjZGVmaW5lIFNQRElGX0NIMl9DU18xNTkxMjhfQURE UgkweDMwMDc4CisjZGVmaW5lIFNQRElGX0NIMl9DU18xOTExNjBfQUREUgkweDMwMDdjCisjZGVm aW5lIFNNUEwyUEtUX0NOVEwJCQkweDMwMDgwCisjZGVmaW5lIFNNUEwyUEtUX0NORkcJCQkweDMw MDg0CisjZGVmaW5lIEZJRk9fQ05UTAkJCTB4MzAwODgKKyNkZWZpbmUgRklGT19TVFRTCQkJMHgz MDA4YworCisvKiBzb3VyY2UgcGlmIGFkZHIgKi8KKyNkZWZpbmUgU09VUkNFX1BJRl9XUl9BRERS CQkweDMwODAwCisjZGVmaW5lIFNPVVJDRV9QSUZfV1JfUkVRCQkweDMwODA0CisjZGVmaW5lIFNP VVJDRV9QSUZfUkRfQUREUgkJMHgzMDgwOAorI2RlZmluZSBTT1VSQ0VfUElGX1JEX1JFUQkJMHgz MDgwYworI2RlZmluZSBTT1VSQ0VfUElGX0RBVEFfV1IJCTB4MzA4MTAKKyNkZWZpbmUgU09VUkNF X1BJRl9EQVRBX1JECQkweDMwODE0CisjZGVmaW5lIFNPVVJDRV9QSUZfRklGTzFfRkxVU0gJCTB4 MzA4MTgKKyNkZWZpbmUgU09VUkNFX1BJRl9GSUZPMl9GTFVTSAkJMHgzMDgxYworI2RlZmluZSBT T1VSQ0VfUElGX1NUQVRVUwkJMHgzMDgyMAorI2RlZmluZSBTT1VSQ0VfUElGX0lOVEVSUlVQVF9T T1VSQ0UJMHgzMDgyNAorI2RlZmluZSBTT1VSQ0VfUElGX0lOVEVSUlVQVF9NQVNLCTB4MzA4MjgK KyNkZWZpbmUgU09VUkNFX1BJRl9QS1RfQUxMT0NfUkVHCTB4MzA4MmMKKyNkZWZpbmUgU09VUkNF X1BJRl9QS1RfQUxMT0NfV1JfRU4JMHgzMDgzMAorI2RlZmluZSBTT1VSQ0VfUElGX1NXX1JFU0VU CQkweDMwODM0CisKKy8qIGJlbGxvdyByZWdpc3RlcnMgbmVlZCBhY2Nlc3MgYnkgbWFpbGJveCAq LworLyogc291cmNlIGNhciBhZGRyICovCisjZGVmaW5lIFNPVVJDRV9IRFRYX0NBUgkJCTB4MDkw MAorI2RlZmluZSBTT1VSQ0VfRFBUWF9DQVIJCQkweDA5MDQKKyNkZWZpbmUgU09VUkNFX1BIWV9D QVIJCQkweDA5MDgKKyNkZWZpbmUgU09VUkNFX0NFQ19DQVIJCQkweDA5MGMKKyNkZWZpbmUgU09V UkNFX0NCVVNfQ0FSCQkJMHgwOTEwCisjZGVmaW5lIFNPVVJDRV9QS1RfQ0FSCQkJMHgwOTE4Cisj ZGVmaW5lIFNPVVJDRV9BSUZfQ0FSCQkJMHgwOTFjCisjZGVmaW5lIFNPVVJDRV9DSVBIRVJfQ0FS CQkweDA5MjAKKyNkZWZpbmUgU09VUkNFX0NSWVBUT19DQVIJCTB4MDkyNAorCisvKiBjbG9jayBt ZXRlcnMgYWRkciAqLworI2RlZmluZSBDTV9DVFJMCQkJCTB4MGEwMAorI2RlZmluZSBDTV9JMlNf Q1RSTAkJCTB4MGEwNAorI2RlZmluZSBDTV9TUERJRl9DVFJMCQkJMHgwYTA4CisjZGVmaW5lIENN X1ZJRF9DVFJMCQkJMHgwYTBjCisjZGVmaW5lIENNX0xBTkVfQ1RSTAkJCTB4MGExMAorI2RlZmlu ZSBJMlNfTk1fU1RBQkxFCQkJMHgwYTE0CisjZGVmaW5lIEkyU19OQ1RTX1NUQUJMRQkJCTB4MGEx OAorI2RlZmluZSBTUERJRl9OTV9TVEFCTEUJCQkweDBhMWMKKyNkZWZpbmUgU1BESUZfTkNUU19T VEFCTEUJCTB4MGEyMAorI2RlZmluZSBOTVZJRF9NRUFTX1NUQUJMRQkJMHgwYTI0CisjZGVmaW5l IEkyU19NRUFTCQkJMHgwYTQwCisjZGVmaW5lIFNQRElGX01FQVMJCQkweDBhODAKKyNkZWZpbmUg Tk1WSURfTUVBUwkJCTB4MGFjMAorCisvKiBzb3VyY2UgdmlmIGFkZHIgKi8KKyNkZWZpbmUgQk5E X0hTWU5DMlZTWU5DCQkJMHgwYjAwCisjZGVmaW5lIEhTWU5DMlZTWU5DX0YxX0wxCQkweDBiMDQK KyNkZWZpbmUgSFNZTkMyVlNZTkNfRjJfTDEJCTB4MGIwOAorI2RlZmluZSBIU1lOQzJWU1lOQ19T VEFUVVMJCTB4MGIwYworI2RlZmluZSBIU1lOQzJWU1lOQ19QT0xfQ1RSTAkJMHgwYjEwCisKKy8q IGRwdHggcGh5IGFkZHIgKi8KKyNkZWZpbmUgRFBfVFhfUEhZX0NPTkZJR19SRUcJCTB4MjAwMAor I2RlZmluZSBEUF9UWF9QSFlfU1RBVFVTX1JFRwkJMHgyMDA0CisjZGVmaW5lIERQX1RYX1BIWV9T V19SRVNFVAkJMHgyMDA4CisjZGVmaW5lIERQX1RYX1BIWV9TQ1JBTUJMRVJfU0VFRAkweDIwMGMK KyNkZWZpbmUgRFBfVFhfUEhZX1RSQUlOSU5HXzAxXzA0CTB4MjAxMAorI2RlZmluZSBEUF9UWF9Q SFlfVFJBSU5JTkdfMDVfMDgJMHgyMDE0CisjZGVmaW5lIERQX1RYX1BIWV9UUkFJTklOR18wOV8x MAkweDIwMTgKKyNkZWZpbmUgVEVTVF9DT1IJCQkweDIzZmMKKworLyogZHB0eCBocGQgYWRkciAq LworI2RlZmluZSBIUERfSVJRX0RFVF9NSU5fVElNRVIJCTB4MjEwMAorI2RlZmluZSBIUERfSVJR X0RFVF9NQVhfVElNRVIJCTB4MjEwNAorI2RlZmluZSBIUERfVU5QTEdFRF9ERVRfTUlOX1RJTUVS CTB4MjEwOAorI2RlZmluZSBIUERfU1RBQkxFX1RJTUVSCQkweDIxMGMKKyNkZWZpbmUgSFBEX0ZJ TFRFUl9USU1FUgkJMHgyMTEwCisjZGVmaW5lIEhQRF9FVkVOVF9NQVNLCQkJMHgyMTFjCisjZGVm aW5lIEhQRF9FVkVOVF9ERVQJCQkweDIxMjAKKworLyogZHB5eCBmcmFtZXIgYWRkciAqLworI2Rl ZmluZSBEUF9GUkFNRVJfR0xPQkFMX0NPTkZJRwkJMHgyMjAwCisjZGVmaW5lIERQX1NXX1JFU0VU CQkJMHgyMjA0CisjZGVmaW5lIERQX0ZSQU1FUl9UVQkJCTB4MjIwOAorI2RlZmluZSBEUF9GUkFN RVJfUFhMX1JFUFIJCTB4MjIwYworI2RlZmluZSBEUF9GUkFNRVJfU1AJCQkweDIyMTAKKyNkZWZp bmUgQVVESU9fUEFDS19DT05UUk9MCQkweDIyMTQKKyNkZWZpbmUgRFBfVkNfVEFCTEUoeCkJCQko MHgyMjE4ICsgKCh4KSA8PCAyKSkKKyNkZWZpbmUgRFBfVkJfSUQJCQkweDIyNTgKKyNkZWZpbmUg RFBfTVRQSF9MVlBfQ09OVFJPTAkJMHgyMjVjCisjZGVmaW5lIERQX01UUEhfU1lNQk9MX1ZBTFVF UwkJMHgyMjYwCisjZGVmaW5lIERQX01UUEhfRUNGX0NPTlRST0wJCTB4MjI2NAorI2RlZmluZSBE UF9NVFBIX0FDVF9DT05UUk9MCQkweDIyNjgKKyNkZWZpbmUgRFBfTVRQSF9TVEFUVVMJCQkweDIy NmMKKyNkZWZpbmUgRFBfSU5URVJSVVBUX1NPVVJDRQkJMHgyMjcwCisjZGVmaW5lIERQX0lOVEVS UlVQVF9NQVNLCQkweDIyNzQKKyNkZWZpbmUgRFBfRlJPTlRfQkFDS19QT1JDSAkJMHgyMjc4Cisj ZGVmaW5lIERQX0JZVEVfQ09VTlQJCQkweDIyN2MKKworLyogZHB0eCBzdHJlYW0gYWRkciAqLwor I2RlZmluZSBNU0FfSE9SSVpPTlRBTF8wCQkweDIyODAKKyNkZWZpbmUgTVNBX0hPUklaT05UQUxf MQkJMHgyMjg0CisjZGVmaW5lIE1TQV9WRVJUSUNBTF8wCQkJMHgyMjg4CisjZGVmaW5lIE1TQV9W RVJUSUNBTF8xCQkJMHgyMjhjCisjZGVmaW5lIE1TQV9NSVNDCQkJMHgyMjkwCisjZGVmaW5lIFNU UkVBTV9DT05GSUcJCQkweDIyOTQKKyNkZWZpbmUgQVVESU9fUEFDS19TVEFUVVMJCTB4MjI5OAor I2RlZmluZSBWSUZfU1RBVFVTCQkJMHgyMjljCisjZGVmaW5lIFBDS19TVFVGRl9TVEFUVVNfMAkJ MHgyMmEwCisjZGVmaW5lIFBDS19TVFVGRl9TVEFUVVNfMQkJMHgyMmE0CisjZGVmaW5lIElORk9f UEFDS19TVEFUVVMJCTB4MjJhOAorI2RlZmluZSBSQVRFX0dPVkVSTk9SX1NUQVRVUwkJMHgyMmFj CisjZGVmaW5lIERQX0hPUklaT05UQUwJCQkweDIyYjAKKyNkZWZpbmUgRFBfVkVSVElDQUxfMAkJ CTB4MjJiNAorI2RlZmluZSBEUF9WRVJUSUNBTF8xCQkJMHgyMmI4CisjZGVmaW5lIERQX0JMT0NL X1NEUAkJCTB4MjJiYworCisvKiBkcHR4IGdsYmwgYWRkciAqLworI2RlZmluZSBEUFRYX0xBTkVf RU4JCQkweDIzMDAKKyNkZWZpbmUgRFBUWF9FTkhOQ0QJCQkweDIzMDQKKyNkZWZpbmUgRFBUWF9J TlRfTUFTSwkJCTB4MjMwOAorI2RlZmluZSBEUFRYX0lOVF9TVEFUVVMJCQkweDIzMGMKKworLyog ZHAgYXV4IGFkZHIgKi8KKyNkZWZpbmUgRFBfQVVYX0hPU1RfQ09OVFJPTAkJMHgyODAwCisjZGVm aW5lIERQX0FVWF9JTlRFUlJVUFRfU09VUkNFCQkweDI4MDQKKyNkZWZpbmUgRFBfQVVYX0lOVEVS UlVQVF9NQVNLCQkweDI4MDgKKyNkZWZpbmUgRFBfQVVYX1NXQVBfSU5WRVJTSU9OX0NPTlRST0wJ MHgyODBjCisjZGVmaW5lIERQX0FVWF9TRU5EX05BQ0tfVFJBTlNBQ1RJT04JMHgyODEwCisjZGVm aW5lIERQX0FVWF9DTEVBUl9SWAkJCTB4MjgxNAorI2RlZmluZSBEUF9BVVhfQ0xFQVJfVFgJCQkw eDI4MTgKKyNkZWZpbmUgRFBfQVVYX1RJTUVSX1NUT1AJCTB4MjgxYworI2RlZmluZSBEUF9BVVhf VElNRVJfQ0xFQVIJCTB4MjgyMAorI2RlZmluZSBEUF9BVVhfUkVTRVRfU1cJCQkweDI4MjQKKyNk ZWZpbmUgRFBfQVVYX0RJVklERV8yTQkJMHgyODI4CisjZGVmaW5lIERQX0FVWF9UWF9QUkVBQ0hB UkdFX0xFTkdUSAkweDI4MmMKKyNkZWZpbmUgRFBfQVVYX0ZSRVFVRU5DWV8xTV9NQVgJCTB4Mjgz MAorI2RlZmluZSBEUF9BVVhfRlJFUVVFTkNZXzFNX01JTgkJMHgyODM0CisjZGVmaW5lIERQX0FV WF9SWF9QUkVfTUlOCQkweDI4MzgKKyNkZWZpbmUgRFBfQVVYX1JYX1BSRV9NQVgJCTB4MjgzYwor I2RlZmluZSBEUF9BVVhfVElNRVJfUFJFU0VUCQkweDI4NDAKKyNkZWZpbmUgRFBfQVVYX05BQ0tf Rk9STUFUCQkweDI4NDQKKyNkZWZpbmUgRFBfQVVYX1RYX0RBVEEJCQkweDI4NDgKKyNkZWZpbmUg RFBfQVVYX1JYX0RBVEEJCQkweDI4NGMKKyNkZWZpbmUgRFBfQVVYX1RYX1NUQVRVUwkJMHgyODUw CisjZGVmaW5lIERQX0FVWF9SWF9TVEFUVVMJCTB4Mjg1NAorI2RlZmluZSBEUF9BVVhfUlhfQ1lD TEVfQ09VTlRFUgkJMHgyODU4CisjZGVmaW5lIERQX0FVWF9NQUlOX1NUQVRFUwkJMHgyODVjCisj ZGVmaW5lIERQX0FVWF9NQUlOX1RJTUVSCQkweDI4NjAKKyNkZWZpbmUgRFBfQVVYX0FGRV9PVVQJ CQkweDI4NjQKKworLyogY3J5cHRvIGFkZHIgKi8KKyNkZWZpbmUgQ1JZUFRPX0hEQ1BfUkVWSVNJ T04JCTB4NTgwMAorI2RlZmluZSBIRENQX0NSWVBUT19DT05GSUcJCTB4NTgwNAorI2RlZmluZSBD UllQVE9fSU5URVJSVVBUX1NPVVJDRQkJMHg1ODA4CisjZGVmaW5lIENSWVBUT19JTlRFUlJVUFRf TUFTSwkJMHg1ODBjCisjZGVmaW5lIENSWVBUTzIyX0NPTkZJRwkJCTB4NTgxOAorI2RlZmluZSBD UllQVE8yMl9TVEFUVVMJCQkweDU4MWMKKyNkZWZpbmUgU0hBXzI1Nl9EQVRBX0lOCQkJMHg1ODNj CisjZGVmaW5lIFNIQV8yNTZfREFUQV9PVVRfKHgpCQkoMHg1ODUwICsgKCh4KSA8PCAyKSkKKyNk ZWZpbmUgQUVTXzMyX0tFWV8oeCkJCQkoMHg1ODcwICsgKCh4KSA8PCAyKSkKKyNkZWZpbmUgQUVT XzMyX0RBVEFfSU4JCQkweDU4ODAKKyNkZWZpbmUgQUVTXzMyX0RBVEFfT1VUXyh4KQkJKDB4NTg4 NCArICgoeCkgPDwgMikpCisjZGVmaW5lIENSWVBUTzE0X0NPTkZJRwkJCTB4NThhMAorI2RlZmlu ZSBDUllQVE8xNF9TVEFUVVMJCQkweDU4YTQKKyNkZWZpbmUgQ1JZUFRPMTRfUFJOTV9PVVQJCTB4 NThhOAorI2RlZmluZSBDUllQVE8xNF9LTV8wCQkJMHg1OGFjCisjZGVmaW5lIENSWVBUTzE0X0tN XzEJCQkweDU4YjAKKyNkZWZpbmUgQ1JZUFRPMTRfQU5fMAkJCTB4NThiNAorI2RlZmluZSBDUllQ VE8xNF9BTl8xCQkJMHg1OGI4CisjZGVmaW5lIENSWVBUTzE0X1lPVVJfS1NWXzAJCTB4NThiYwor I2RlZmluZSBDUllQVE8xNF9ZT1VSX0tTVl8xCQkweDU4YzAKKyNkZWZpbmUgQ1JZUFRPMTRfTUlf MAkJCTB4NThjNAorI2RlZmluZSBDUllQVE8xNF9NSV8xCQkJMHg1OGM4CisjZGVmaW5lIENSWVBU TzE0X1RJXzAJCQkweDU4Y2MKKyNkZWZpbmUgQ1JZUFRPMTRfS0lfMAkJCTB4NThkMAorI2RlZmlu ZSBDUllQVE8xNF9LSV8xCQkJMHg1OGQ0CisjZGVmaW5lIENSWVBUTzE0X0JMT0NLU19OVU0JCTB4 NThkOAorI2RlZmluZSBDUllQVE8xNF9LRVlfTUVNX0RBVEFfMAkJMHg1OGRjCisjZGVmaW5lIENS WVBUTzE0X0tFWV9NRU1fREFUQV8xCQkweDU4ZTAKKyNkZWZpbmUgQ1JZUFRPMTRfU0hBMV9NU0df REFUQQkJMHg1OGU0CisjZGVmaW5lIENSWVBUTzE0X1NIQTFfVl9WQUxVRV8oeCkJKDB4NThlOCAr ICgoeCkgPDwgMikpCisjZGVmaW5lIFRSTkdfQ1RSTAkJCTB4NThmYworI2RlZmluZSBUUk5HX0RB VEFfUkRZCQkJMHg1OTAwCisjZGVmaW5lIFRSTkdfREFUQQkJCTB4NTkwNAorCisvKiBjaXBoZXIg YWRkciAqLworI2RlZmluZSBIRENQX1JFVklTSU9OCQkJMHg2MDAwMAorI2RlZmluZSBJTlRFUlJV UFRfU09VUkNFCQkweDYwMDA0CisjZGVmaW5lIElOVEVSUlVQVF9NQVNLCQkJMHg2MDAwOAorI2Rl ZmluZSBIRENQX0NJUEhFUl9DT05GSUcJCTB4NjAwMGMKKyNkZWZpbmUgQUVTXzEyOF9LRVlfMAkJ CTB4NjAwMTAKKyNkZWZpbmUgQUVTXzEyOF9LRVlfMQkJCTB4NjAwMTQKKyNkZWZpbmUgQUVTXzEy OF9LRVlfMgkJCTB4NjAwMTgKKyNkZWZpbmUgQUVTXzEyOF9LRVlfMwkJCTB4NjAwMWMKKyNkZWZp bmUgQUVTXzEyOF9SQU5ET01fMAkJMHg2MDAyMAorI2RlZmluZSBBRVNfMTI4X1JBTkRPTV8xCQkw eDYwMDI0CisjZGVmaW5lIENJUEhFUjE0X0tNXzAJCQkweDYwMDI4CisjZGVmaW5lIENJUEhFUjE0 X0tNXzEJCQkweDYwMDJjCisjZGVmaW5lIENJUEhFUjE0X1NUQVRVUwkJCTB4NjAwMzAKKyNkZWZp bmUgQ0lQSEVSMTRfUklfUEpfU1RBVFVTCQkweDYwMDM0CisjZGVmaW5lIENJUEhFUl9NT0RFCQkJ MHg2MDAzOAorI2RlZmluZSBDSVBIRVIxNF9BTl8wCQkJMHg2MDAzYworI2RlZmluZSBDSVBIRVIx NF9BTl8xCQkJMHg2MDA0MAorI2RlZmluZSBDSVBIRVIyMl9BVVRICQkJMHg2MDA0NAorI2RlZmlu ZSBDSVBIRVIxNF9SMF9EUF9TVEFUVVMJCTB4NjAwNDgKKyNkZWZpbmUgQ0lQSEVSMTRfQk9PVFNU UkFQCQkweDYwMDRjCisKKyNkZWZpbmUgQVBCX0lSQU1fUEFUSAkJCUJJVCgyKQorI2RlZmluZSBB UEJfRFJBTV9QQVRICQkJQklUKDEpCisjZGVmaW5lIEFQQl9YVF9SRVNFVAkJCUJJVCgwKQorCisv KiBtYWlsYm94ICovCisjZGVmaW5lIE1CX09QQ09ERV9JRAkJCTAKKyNkZWZpbmUgTUJfTU9EVUxF X0lECQkJMQorI2RlZmluZSBNQl9TSVpFX01TQl9JRAkJCTIKKyNkZWZpbmUgTUJfU0laRV9MU0Jf SUQJCQkzCisjZGVmaW5lIE1CX0RBVEFfSUQJCQk0CisKKyNkZWZpbmUgTUJfTU9EVUxFX0lEX0RQ X1RYCQkweDAxCisjZGVmaW5lIE1CX01PRFVMRV9JRF9IRENQX1RYCQkweDA3CisjZGVmaW5lIE1C X01PRFVMRV9JRF9IRENQX1JYCQkweDA4CisjZGVmaW5lIE1CX01PRFVMRV9JRF9IRENQX0dFTkVS QUwJMHgwOQorI2RlZmluZSBNQl9NT0RVTEVfSURfR0VORVJBTAkJMHgwYQorCisvKiBnZW5lcmFs IG9wY29kZSAqLworI2RlZmluZSBHRU5FUkFMX01BSU5fQ09OVFJPTCAgICAgICAgICAgIDB4MDEK KyNkZWZpbmUgR0VORVJBTF9URVNUX0VDSE8gICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIEdF TkVSQUxfQlVTX1NFVFRJTkdTICAgICAgICAgICAgMHgwMworI2RlZmluZSBHRU5FUkFMX1RFU1Rf QUNDRVNTICAgICAgICAgICAgIDB4MDQKKworI2RlZmluZSBEUFRYX1NFVF9QT1dFUl9NTkcJCQkw eDAwCisjZGVmaW5lIERQVFhfU0VUX0hPU1RfQ0FQQUJJTElUSUVTCQkweDAxCisjZGVmaW5lIERQ VFhfR0VUX0VESUQJCQkJMHgwMgorI2RlZmluZSBEUFRYX1JFQURfRFBDRAkJCQkweDAzCisjZGVm aW5lIERQVFhfV1JJVEVfRFBDRAkJCQkweDA0CisjZGVmaW5lIERQVFhfRU5BQkxFX0VWRU5UCQkJ MHgwNQorI2RlZmluZSBEUFRYX1dSSVRFX1JFR0lTVEVSCQkJMHgwNgorI2RlZmluZSBEUFRYX1JF QURfUkVHSVNURVIJCQkweDA3CisjZGVmaW5lIERQVFhfV1JJVEVfRklFTEQJCQkweDA4CisjZGVm aW5lIERQVFhfVFJBSU5JTkdfQ09OVFJPTAkJCTB4MDkKKyNkZWZpbmUgRFBUWF9SRUFEX0VWRU5U CQkJCTB4MGEKKyNkZWZpbmUgRFBUWF9SRUFEX0xJTktfU1RBVAkJCTB4MGIKKyNkZWZpbmUgRFBU WF9TRVRfVklERU8JCQkJMHgwYworI2RlZmluZSBEUFRYX1NFVF9BVURJTwkJCQkweDBkCisjZGVm aW5lIERQVFhfR0VUX0xBU1RfQVVYX1NUQVVTCQkJMHgwZQorI2RlZmluZSBEUFRYX1NFVF9MSU5L X0JSRUFLX1BPSU5UCQkweDBmCisjZGVmaW5lIERQVFhfRk9SQ0VfTEFORVMJCQkweDEwCisjZGVm aW5lIERQVFhfSFBEX1NUQVRFCQkJCTB4MTEKKworI2RlZmluZSBEUFRYX0VWRU5UX0VOQUJMRV9I UEQJCQlCSVQoMCkKKyNkZWZpbmUgRFBUWF9FVkVOVF9FTkFCTEVfVFJBSU5JTkcJCUJJVCgxKQor CisjZGVmaW5lIExJTktfVFJBSU5JTkdfTk9UX0FDVElWRQkJMAorI2RlZmluZSBMSU5LX1RSQUlO SU5HX1JVTgkJCTEKKyNkZWZpbmUgTElOS19UUkFJTklOR19SRVNUQVJUCQkJMgorCisjZGVmaW5l IENPTlRST0xfVklERU9fSURMRQkJCTAKKyNkZWZpbmUgQ09OVFJPTF9WSURFT19WQUxJRAkJCTEK KworI2RlZmluZSBWSUZfQllQQVNTX0lOVEVSTEFDRQkJCUJJVCgxMykKKyNkZWZpbmUgSU5URVJM QUNFX0ZNVF9ERVQJCQlCSVQoMTIpCisjZGVmaW5lIElOVEVSTEFDRV9EVENUX1dJTgkJCTB4MjAK KworI2RlZmluZSBEUF9GUkFNRVJfU1BfSU5URVJMQUNFX0VOCQlCSVQoMikKKyNkZWZpbmUgRFBf RlJBTUVSX1NQX0hTUAkJCUJJVCgxKQorI2RlZmluZSBEUF9GUkFNRVJfU1BfVlNQCQkJQklUKDAp CisKKy8qIGNhcGFiaWxpdHkgKi8KKyNkZWZpbmUgQVVYX0hPU1RfSU5WRVJUCQkJCTMKKyNkZWZp bmUJRkFTVF9MVF9TVVBQT1JUCQkJCTEKKyNkZWZpbmUgRkFTVF9MVF9OT1RfU1VQUE9SVAkJCTAK KyNkZWZpbmUgTEFORV9NQVBQSU5HX05PUk1BTAkJCTB4ZTQKKyNkZWZpbmUgTEFORV9NQVBQSU5H X0ZMSVBQRUQJCQkweDFiCisjZGVmaW5lIEVOSEFOQ0VECQkJCTEKKworI2RlZmluZQlGVUxMX0xU X1NUQVJURUQJCQkJQklUKDApCisjZGVmaW5lIEZBU0VfTFRfU1RBUlRFRAkJCQlCSVQoMSkKKyNk ZWZpbmUgQ0xLX1JFQ09WRVJZX0ZJTklTSEVECQkJQklUKDIpCisjZGVmaW5lIEVRX1BIQVNFX0ZJ TklTSEVECQkJQklUKDMpCisjZGVmaW5lIEZBU0VfTFRfU1RBUlRfRklOSVNIRUQJCQlCSVQoNCkK KyNkZWZpbmUgQ0xLX1JFQ09WRVJZX0ZBSUxFRAkJCUJJVCg1KQorI2RlZmluZSBFUV9QSEFTRV9G QUlMRUQJCQkJQklUKDYpCisjZGVmaW5lIEZBU0VfTFRfRkFJTEVECQkJCUJJVCg3KQorCisjZGVm aW5lIERQVFhfSFBEX0VWRU5UCQkJCUJJVCgwKQorI2RlZmluZSBEUFRYX1RSQUlOSU5HX0VWRU5U CQkJQklUKDEpCisjZGVmaW5lIEhEQ1BfVFhfU1RBVFVTX0VWRU5UCQkJQklUKDQpCisjZGVmaW5l IEhEQ1AyX1RYX0lTX0tNX1NUT1JFRF9FVkVOVAkJQklUKDUpCisjZGVmaW5lIEhEQ1AyX1RYX1NU T1JFX0tNX0VWRU5UCQkJQklUKDYpCisjZGVmaW5lIEhEQ1BfVFhfSVNfUkVDRUlWRVJfSURfVkFM SURfRVZFTlQJQklUKDcpCisKKyNkZWZpbmUgRURJRF9MRU5HVEhfQllURQkJCTAKKyNkZWZpbmUg RURJRF9TRUdNRU5UX0JVTUJFUgkJCTEKKyNkZWZpbmUgRURJRF9EQVRBCQkJCTIKKyNkZWZpbmUg RURJRF9CTE9DS19TSVpFCQkJCTEyOAorCisjZGVmaW5lIFRVX1NJWkUJCQkJCTMwCisKKy8qIGF1 ZGlvICovCisjZGVmaW5lIEFVRElPX1BBQ0tfRU4oeCkJCQkoKHgpIDw8IDgpCisjZGVmaW5lIFNB TVBMSU5HX0ZSRVEoeCkJCQkoKHgpIDw8IDE2KQorI2RlZmluZSBPUklHSU5BTF9TQU1QX0ZSRVEo eCkJCQkoKHgpIDw8IDI0KQorI2RlZmluZSBTWU5DX1dSX1RPX0NIX1pFUk8JCQlCSVQoMSkKKwor ZW51bSB2b2x0YWdlX3N3aW5nX2xldmVsIHsKKwlWT0xUQUdFX0xFVkVMXzAsCisJVk9MVEFHRV9M RVZFTF8xLAorCVZPTFRBR0VfTEVWRUxfMiwKKwlWT0xUQUdFX0xFVkVMXzMsCit9OworCitlbnVt IHByZV9lbXBoYXNpc19sZXZlbCB7CisJUFJFX0VNUEhBU0lTX0xFVkVMXzAsCisJUFJFX0VNUEhB U0lTX0xFVkVMXzEsCisJUFJFX0VNUEhBU0lTX0xFVkVMXzIsCisJUFJFX0VNUEhBU0lTX0xFVkVM XzMsCit9OworCitlbnVtIHBhdHRlcm5fc2V0IHsKKwlQUkJTNwkJPSBCSVQoMCksCisJRDEwXzIJ CT0gQklUKDEpLAorCVRSQUlOSU5HX1BUTjEJPSBCSVQoMiksCisJVFJBSU5JTkdfUFROMgk9IEJJ VCgzKSwKKwlEUF9OT05FCQk9IEJJVCg0KQorfTsKKworZW51bSBWSUNfUFhMX0VOQ09ESU5HX0ZP Uk1BVCB7CisJUFhMX1JHQiA9IDB4MSwKKwlZQ0JDUl80XzRfNCA9IDB4MiwKKwlZQ0JDUl80XzJf MiA9IDB4NCwKKwlZQ0JDUl80XzJfMCA9IDB4OCwKKwlZX09OTFkgPSAweDEwLAorfTsKKworZW51 bSBWSUNfQ09MT1JfREVQVEggeworCUJDU182ID0gMHgxLAorCUJDU184ID0gMHgyLAorCUJDU18x MCA9IDB4NCwKKwlCQ1NfMTIgPSAweDgsCisJQkNTXzE2ID0gMHgxMCwKK307CisKK2VudW0gVklD X0JUX1RZUEUgeworCUJUXzYwMSA9IDB4MCwKKwlCVF83MDkgPSAweDEsCit9OworCisjZW5kaWYg LyogX0NETl9EUF9SRUdfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlw L3JvY2tjaGlwX2RybV92b3AuYyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9k cm1fdm9wLmMKaW5kZXggZWRkN2VjMi4uOTgzMDJiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92b3AuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9j a2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5jCkBAIC05NjksNyArOTY5LDcgQEAgc3RhdGljIHZvaWQg dm9wX2NydGNfZW5hYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIAkJdm9wX2RzcF9ob2xkX3Zh bGlkX2lycV9kaXNhYmxlKHZvcCk7CiAJfQogCi0JcGluX3BvbCA9IDB4ODsKKwlwaW5fcG9sID0g KHMtPm91dHB1dF90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydCkgPyAwIDog MHg4OwogCXBpbl9wb2wgfD0gKGFkanVzdGVkX21vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19O SFNZTkMpID8gMCA6IDE7CiAJcGluX3BvbCB8PSAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1f TU9ERV9GTEFHX05WU1lOQykgPyAwIDogKDEgPDwgMSk7CiAJVk9QX0NUUkxfU0VUKHZvcCwgcGlu X3BvbCwgcGluX3BvbCk7CkBAIC05OTEsNiArOTkxLDEwIEBAIHN0YXRpYyB2b2lkIHZvcF9jcnRj X2VuYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiAJCVZPUF9DVFJMX1NFVCh2b3AsIG1pcGlf cGluX3BvbCwgcGluX3BvbCk7CiAJCVZPUF9DVFJMX1NFVCh2b3AsIG1pcGlfZW4sIDEpOwogCQli cmVhazsKKwljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydDoKKwkJVk9QX0NUUkxf U0VUKHZvcCwgZHBfcGluX3BvbCwgcGluX3BvbCk7CisJCVZPUF9DVFJMX1NFVCh2b3AsIGRwX2Vu LCAxKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJRFJNX0VSUk9SKCJ1bnN1cHBvcnQgY29ubmVj dG9yX3R5cGVbJWRdXG4iLCBzLT5vdXRwdXRfdHlwZSk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92b3AuaCBiL2RyaXZlcnMvZ3B1L2RybS9y b2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9wLmgKaW5kZXggZmY0ZjUyZS4uNTBhMDQ1YyAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92b3AuaAorKysgYi9k cml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5oCkBAIC00NSw2ICs0NSw3 IEBAIHN0cnVjdCB2b3BfY3RybCB7CiAJc3RydWN0IHZvcF9yZWcgZWRwX2VuOwogCXN0cnVjdCB2 b3BfcmVnIGhkbWlfZW47CiAJc3RydWN0IHZvcF9yZWcgbWlwaV9lbjsKKwlzdHJ1Y3Qgdm9wX3Jl ZyBkcF9lbjsKIAlzdHJ1Y3Qgdm9wX3JlZyBvdXRfbW9kZTsKIAlzdHJ1Y3Qgdm9wX3JlZyBkaXRo ZXJfZG93bjsKIAlzdHJ1Y3Qgdm9wX3JlZyBkaXRoZXJfdXA7CkBAIC01Myw2ICs1NCw3IEBAIHN0 cnVjdCB2b3BfY3RybCB7CiAJc3RydWN0IHZvcF9yZWcgaGRtaV9waW5fcG9sOwogCXN0cnVjdCB2 b3BfcmVnIGVkcF9waW5fcG9sOwogCXN0cnVjdCB2b3BfcmVnIG1pcGlfcGluX3BvbDsKKwlzdHJ1 Y3Qgdm9wX3JlZyBkcF9waW5fcG9sOwogCiAJc3RydWN0IHZvcF9yZWcgaHRvdGFsX3B3OwogCXN0 cnVjdCB2b3BfcmVnIGhhY3Rfc3RfZW5kOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Jv Y2tjaGlwL3JvY2tjaGlwX3ZvcF9yZWcuYyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2Nr Y2hpcF92b3BfcmVnLmMKaW5kZXggNWIxYWUxZi4uZGNmMTcyZSAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX3ZvcF9yZWcuYworKysgYi9kcml2ZXJzL2dwdS9k cm0vcm9ja2NoaXAvcm9ja2NoaXBfdm9wX3JlZy5jCkBAIC0yODEsNiArMjgxLDcgQEAgc3RhdGlj IGNvbnN0IHN0cnVjdCB2b3BfZGF0YSByazMyODhfdm9wID0gewogc3RhdGljIGNvbnN0IHN0cnVj dCB2b3BfY3RybCByazMzOTlfY3RybF9kYXRhID0gewogCS5zdGFuZGJ5ID0gVk9QX1JFRyhSSzMz OTlfU1lTX0NUUkwsIDB4MSwgMjIpLAogCS5nYXRlX2VuID0gVk9QX1JFRyhSSzMzOTlfU1lTX0NU UkwsIDB4MSwgMjMpLAorCS5kcF9lbiA9IFZPUF9SRUcoUkszMzk5X1NZU19DVFJMLCAweDEsIDEx KSwKIAkucmdiX2VuID0gVk9QX1JFRyhSSzMzOTlfU1lTX0NUUkwsIDB4MSwgMTIpLAogCS5oZG1p X2VuID0gVk9QX1JFRyhSSzMzOTlfU1lTX0NUUkwsIDB4MSwgMTMpLAogCS5lZHBfZW4gPSBWT1Bf UkVHKFJLMzM5OV9TWVNfQ1RSTCwgMHgxLCAxNCksCkBAIC0yOTAsNiArMjkxLDcgQEAgc3RhdGlj IGNvbnN0IHN0cnVjdCB2b3BfY3RybCByazMzOTlfY3RybF9kYXRhID0gewogCS5kYXRhX2JsYW5r ID0gVk9QX1JFRyhSSzMzOTlfRFNQX0NUUkwwLCAweDEsIDE5KSwKIAkub3V0X21vZGUgPSBWT1Bf UkVHKFJLMzM5OV9EU1BfQ1RSTDAsIDB4ZiwgMCksCiAJLnJnYl9waW5fcG9sID0gVk9QX1JFRyhS SzMzOTlfRFNQX0NUUkwxLCAweGYsIDE2KSwKKwkuZHBfcGluX3BvbCA9IFZPUF9SRUcoUkszMzk5 X0RTUF9DVFJMMSwgMHhmLCAxNiksCiAJLmhkbWlfcGluX3BvbCA9IFZPUF9SRUcoUkszMzk5X0RT UF9DVFJMMSwgMHhmLCAyMCksCiAJLmVkcF9waW5fcG9sID0gVk9QX1JFRyhSSzMzOTlfRFNQX0NU UkwxLCAweGYsIDI0KSwKIAkubWlwaV9waW5fcG9sID0gVk9QX1JFRyhSSzMzOTlfRFNQX0NUUkwx LCAweGYsIDI4KSwKLS0gCjIuNi4zCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9kcmktZGV2ZWwK