From mboxrd@z Thu Jan 1 00:00:00 1970 From: Enric Balletbo i Serra Subject: [PATCHv5 3/3] drm: bridge: anx78xx: Add anx78xx driver support by analogix. Date: Fri, 13 Nov 2015 13:01:04 +0100 Message-ID: <1447416064-24989-4-git-send-email-enric.balletbo@collabora.com> References: <1447416064-24989-1-git-send-email-enric.balletbo@collabora.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1447416064-24989-1-git-send-email-enric.balletbo@collabora.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, devel@driverdev.osuosl.org Cc: mark.rutland@arm.com, drinkcat@chromium.org, laurent.pinchart@ideasonboard.com, pawel.moll@arm.com, ijc+devicetree@hellion.org.uk, gregkh@linuxfoundation.org, cawa.cheng@mediatek.com, jb.tsai@mediatek.com, sjoerd.simons@collabora.co.uk, robh+dt@kernel.org, span@analogixsemi.com, galak@codeaurora.org, javier@dowhile0.org, eddie.huang@mediatek.com, cjiao@analogixsemi.com, dan.carpenter@oracle.com, nathan.chung@mediatek.com List-Id: devicetree@vger.kernel.org QXQgdGhlIG1vbWVudCBpdCBvbmx5IHN1cHBvcnRzIEFOWDc4MTQuCgpUaGUgQU5YNzgxNCBpcyBh biB1bHRyYS1sb3cgcG93ZXIgRnVsbC1IRCAoMTA4MHA2MCkgU2xpbVBvcnQgdHJhbnNtaXR0ZXIK ZGVzaWduZWQgZm9yIHBvcnRhYmxlIGRldmljZXMuCgpUaGlzIGRyaXZlciBhZGRzIGluaXRpYWwg c3VwcG9ydCBhbmQgc3VwcG9ydHMgSERNSSB0byBEUCBwYXNzLXRocm91Z2ggbW9kZS4KClNpZ25l ZC1vZmYtYnk6IEVucmljIEJhbGxldGJvIGkgU2VycmEgPGVucmljLmJhbGxldGJvQGNvbGxhYm9y YS5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnICAgICAgICAgICAgICAg ICAgIHwgICAgMiArCiBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlICAgICAgICAgICAg ICAgICAgfCAgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW54Nzh4eC9LY29uZmlnICAg ICAgICAgICB8ICAgIDUgKwogZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbng3OHh4L01ha2VmaWxl ICAgICAgICAgIHwgICAgNCArCiBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FueDc4eHgvYW54Nzh4 eC5oICAgICAgICAgfCAgIDQ1ICsKIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW54Nzh4eC9hbng3 OHh4X21haW4uYyAgICB8ICAzNDcgKysrCiBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FueDc4eHgv c2xpbXBvcnRfdHhfZHJ2LmMgfCAzMjI2ICsrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMv Z3B1L2RybS9icmlkZ2UvYW54Nzh4eC9zbGltcG9ydF90eF9kcnYuaCB8ICAxNDkgKwogZHJpdmVy cy9ncHUvZHJtL2JyaWRnZS9hbng3OHh4L3NsaW1wb3J0X3R4X3JlZy5oIHwgIDc1NCArKysrKwog OSBmaWxlcyBjaGFuZ2VkLCA0NTMzIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FueDc4eHgvS2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW54Nzh4eC9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW54Nzh4eC9hbng3OHh4LmgKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FueDc4eHgvYW54Nzh4eF9tYWluLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FueDc4eHgvc2xpbXBvcnRf dHhfZHJ2LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FueDc4 eHgvc2xpbXBvcnRfdHhfZHJ2LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v YnJpZGdlL2FueDc4eHgvc2xpbXBvcnRfdHhfcmVnLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vYnJpZGdlL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcKaW5k ZXggMmRlNTJhNS4uYWE2ZmUxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9L Y29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZwpAQCAtMjksNCArMjks NiBAQCBjb25maWcgRFJNX1BBUkFERV9QUzg2MjIKIAktLS1oZWxwLS0tCiAJICBQYXJhZGUgZURQ LUxWRFMgYnJpZGdlIGNoaXAgZHJpdmVyLgogCitzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9icmlk Z2UvYW54Nzh4eC9LY29uZmlnIgorCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vYnJpZGdlL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZQppbmRl eCBlMmVlZjFjLi5lNWJkMzhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01h a2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUKQEAgLTMsMyArMyw0 IEBAIGNjZmxhZ3MteSA6PSAtSWluY2x1ZGUvZHJtCiBvYmotJChDT05GSUdfRFJNX0RXX0hETUkp ICs9IGR3X2hkbWkubwogb2JqLSQoQ09ORklHX0RSTV9OWFBfUFROMzQ2MCkgKz0gbnhwLXB0bjM0 NjAubwogb2JqLSQoQ09ORklHX0RSTV9QQVJBREVfUFM4NjIyKSArPSBwYXJhZGUtcHM4NjIyLm8K K29iai0kKENPTkZJR19EUk1fQU5YNzhYWCkgKz0gYW54Nzh4eC8KZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9icmlkZ2UvYW54Nzh4eC9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRn ZS9hbng3OHh4L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUz NzY3MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW54Nzh4eC9L Y29uZmlnCkBAIC0wLDAgKzEsNSBAQAorY29uZmlnIERSTV9BTlg3OFhYCisJdHJpc3RhdGUgIkFu YWxvZ2l4IEFOWDc4WFggYnJpZGdlIgorCWhlbHAKKyAgICAgICAgCUFOWDc4WFggaXMgYSBIRCB2 aWRlbyB0cmFuc21pdHRlciBjaGlwIG92ZXIgbWljcm8tVVNCCisJCWNvbm5lY3RvciBmb3Igc21h cnRwaG9uZSBkZXZpY2UuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FueDc4 eHgvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FueDc4eHgvTWFrZWZpbGUKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg0MzczMwotLS0gL2Rldi9udWxsCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW54Nzh4eC9NYWtlZmlsZQpAQCAtMCwwICsxLDQg QEAKK29iai0ke0NPTkZJR19EUk1fQU5YNzhYWH0gOj0gIGFueDc4eHgubworCithbng3OHh4LXkg Kz0gYW54Nzh4eF9tYWluLm8KK2FueDc4eHgteSArPSBzbGltcG9ydF90eF9kcnYubwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbng3OHh4L2FueDc4eHguaCBiL2RyaXZlcnMv Z3B1L2RybS9icmlkZ2UvYW54Nzh4eC9hbng3OHh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uZmY4YmJlOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9i cmlkZ2UvYW54Nzh4eC9hbng3OHh4LmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdo dChjKSAyMDE1LCBBbmFsb2dpeCBTZW1pY29uZHVjdG9yLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisgKgorICovCisKKyNpZm5kZWYgX19BTlg3OHh4X0gKKyNkZWZpbmUgX19BTlg3 OHh4X0gKKworI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+ CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgor I2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIuaD4KKworI2luY2x1ZGUgPGRybS9kcm1fY3J0 Yy5oPgorCitzdHJ1Y3QgYW54Nzh4eF9wbGF0Zm9ybV9kYXRhIHsKKwlzdHJ1Y3QgZ3Bpb19kZXNj ICpncGlvZF9jYWJsZV9kZXQ7CisJc3RydWN0IGdwaW9fZGVzYyAqZ3Bpb2RfcGQ7CisJc3RydWN0 IGdwaW9fZGVzYyAqZ3Bpb2RfcmVzZXQ7CisJc3RydWN0IGdwaW9fZGVzYyAqZ3Bpb2RfdjEwOwor fTsKKworc3RydWN0IGFueDc4eHggeworCXN0cnVjdCBkcm1fYnJpZGdlIGJyaWRnZTsKKwlzdHJ1 Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCBhbng3OHh4X3BsYXRmb3JtX2RhdGEgKnBk YXRhOworCXN0cnVjdCBkZWxheWVkX3dvcmsgd29yazsKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVj dCAqd29ya3F1ZXVlOworfTsKKwordm9pZCBhbng3OHh4X3Bvd2Vyb24oc3RydWN0IGFueDc4eHgg KmRhdGEpOwordm9pZCBhbng3OHh4X3Bvd2Vyb2ZmKHN0cnVjdCBhbng3OHh4ICpkYXRhKTsKK2Jv b2wgYW54Nzh4eF9jYWJsZV9pc19kZXRlY3RlZChzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCk7CisK KyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbng3OHh4L2FueDc4 eHhfbWFpbi5jIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbng3OHh4L2FueDc4eHhfbWFpbi5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlYTEyNzQKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FueDc4eHgvYW54Nzh4eF9tYWluLmMKQEAg LTAsMCArMSwzNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQoYykgMjAxNSwgQW5hbG9naXggU2VtaWNv bmR1Y3Rvci4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9u IDIgYW5kCisgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworI2luY2x1 ZGUgPGxpbnV4L2FzeW5jLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxs aW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51 eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9v Zl9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51 eC90eXBlcy5oPgorCisjaW5jbHVkZSAiYW54Nzh4eC5oIgorI2luY2x1ZGUgInNsaW1wb3J0X3R4 X2Rydi5oIgorCit2b2lkIGFueDc4eHhfcG93ZXJvbihzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCkK K3sKKwlzdHJ1Y3QgYW54Nzh4eF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGFueDc4eHgtPnBkYXRh OworCisJaWYgKHBkYXRhLT5ncGlvZF92MTApIHsKKwkJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVw KHBkYXRhLT5ncGlvZF92MTAsIDEpOworCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7CisJfQor CisJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKHBkYXRhLT5ncGlvZF9yZXNldCwgMCk7CisJdXNs ZWVwX3JhbmdlKDEwMDAsIDIwMDApOworCisJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKHBkYXRh LT5ncGlvZF9wZCwgMCk7CisJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOworCisJZ3Bpb2Rfc2V0 X3ZhbHVlX2NhbnNsZWVwKHBkYXRhLT5ncGlvZF9yZXNldCwgMSk7Cit9CisKK3ZvaWQgYW54Nzh4 eF9wb3dlcm9mZihzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCkKK3sKKwlzdHJ1Y3QgYW54Nzh4eF9w bGF0Zm9ybV9kYXRhICpwZGF0YSA9IGFueDc4eHgtPnBkYXRhOworCisJaWYgKHBkYXRhLT5ncGlv ZF92MTApIHsKKwkJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKHBkYXRhLT5ncGlvZF92MTAsIDAp OworCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7CisJfQorCisJZ3Bpb2Rfc2V0X3ZhbHVlX2Nh bnNsZWVwKHBkYXRhLT5ncGlvZF9yZXNldCwgMCk7CisJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDAp OworCisJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKHBkYXRhLT5ncGlvZF9wZCwgMSk7CisJdXNs ZWVwX3JhbmdlKDEwMDAsIDIwMDApOworfQorCitzdGF0aWMgaW50IGFueDc4eHhfaW5pdF9ncGlv KHN0cnVjdCBhbng3OHh4ICphbng3OHh4KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbng3 OHh4LT5jbGllbnQtPmRldjsKKwlzdHJ1Y3QgYW54Nzh4eF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9 IGFueDc4eHgtPnBkYXRhOworCisJLyogZ3BpbyBmb3IgY2FibGUgZGV0ZWN0aW9uICovCisJcGRh dGEtPmdwaW9kX2NhYmxlX2RldCA9IGRldm1fZ3Bpb2RfZ2V0KGRldiwgImNhYmxlLWRldCIsIEdQ SU9EX0lOKTsKKwlpZiAoSVNfRVJSKHBkYXRhLT5ncGlvZF9jYWJsZV9kZXQpKSB7CisJCWRldl9l cnIoZGV2LCAidW5hYmxlIHRvIGNsYWltIGNhYmxlLWRldCBncGlvXG4iKTsKKwkJcmV0dXJuIFBU Ul9FUlIocGRhdGEtPmdwaW9kX2NhYmxlX2RldCk7CisJfQorCisJLyogZ3BpbyBmb3IgY2hpcCBw b3dlciBkb3duICovCisJcGRhdGEtPmdwaW9kX3BkID0gZGV2bV9ncGlvZF9nZXQoZGV2LCAicGQi LCBHUElPRF9PVVRfSElHSCk7CisJaWYgKElTX0VSUihwZGF0YS0+Z3Bpb2RfcGQpKSB7CisJCWRl dl9lcnIoZGV2LCAidW5hYmxlIHRvIGNsYWltIHBkIGdwaW9cbiIpOworCQlyZXR1cm4gUFRSX0VS UihwZGF0YS0+Z3Bpb2RfcGQpOworCX0KKworCS8qIGdwaW8gZm9yIGNoaXAgcmVzZXQgKi8KKwlw ZGF0YS0+Z3Bpb2RfcmVzZXQgPSBkZXZtX2dwaW9kX2dldChkZXYsICJyZXNldCIsIEdQSU9EX09V VF9MT1cpOworCWlmIChJU19FUlIocGRhdGEtPmdwaW9kX3Jlc2V0KSkgeworCQlkZXZfZXJyKGRl diwgInVuYWJsZSB0byBjbGFpbSByZXNldCBncGlvXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIocGRh dGEtPmdwaW9kX3Jlc2V0KTsKKwl9CisKKwkvKiBncGlvIGZvciBWMTAgcG93ZXIgY29udHJvbCAq LworCXBkYXRhLT5ncGlvZF92MTAgPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChkZXYsICJ2MTAi LCBHUElPRF9PVVRfTE9XKTsKKwlpZiAoSVNfRVJSKHBkYXRhLT5ncGlvZF92MTApKSB7CisJCWRl dl9lcnIoZGV2LCAidW5hYmxlIHRvIGNsYWltIHYxMCBncGlvXG4iKTsKKwkJcmV0dXJuIFBUUl9F UlIocGRhdGEtPmdwaW9kX3YxMCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2Jvb2wgYW54Nzh4 eF9jYWJsZV9pc19kZXRlY3RlZChzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCkKK3sKKwlpbnQgaSwg Y291bnQgPSAwOworCisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJaWYgKGdwaW9kX2dl dF92YWx1ZShhbng3OHh4LT5wZGF0YS0+Z3Bpb2RfY2FibGVfZGV0KSkKKwkJCWNvdW50Kys7CisJ CW1kZWxheSg1KTsKKwl9CisKKwlyZXR1cm4gKGNvdW50ID4gNSk7Cit9CisKKy8qCisgKiBIUEQg SVJRIEV2ZW50OiBIUEQgcHVsc2Ugd2lkdGggZ3JlYXRlciB0aGFuIDAuMjVtcyBidXQgbmFycm93 ZXIgdGhhbiAybXMKKyAqIEhvdCBVbnBsdWcgRXZlbnQ6IEhQRCBwdWxzZSBzdGF5cyBsb3cgbG9u Z2VyIHRoYW4gMm1zLgorICoKKyAqIEFQIGp1c3QgbW9uaXRvciBIUEQgcHVsc2UgaGlnaCBpbiB0 aGlzIGlycS4gSWYgSFBEIGlzIGhpZ2gsIHRoZSBkcml2ZXIKKyAqIHdpbGwgcG93ZXIgb24gdGhl IGNoaXAsIGFuZCB0aGVuIHRoZSBkcml2ZXIgY29udHJvbHMgd2hlbiB0byBwb3dlciBkb3duCisg KiB0aGUgY2hpcCwgaWYgSFBEIGV2ZW50IGlzIEhQRCBJUlEsIHRoZSBkcml2ZXIgZGVhbHMgd2l0 aCBJUlEgZXZlbnQgZnJvbQorICogZG93bnN0cmVhbSwgZmluYWxseSwgaWYgSFBEIGV2ZW50IGlz IEhvdCBQbHVnLCB0aGUgZHJpdmVyIHBvd2VyIGRvd24gdGhlCisgKiBjaGlwLgorICovCitzdGF0 aWMgaXJxcmV0dXJuX3QgYW54Nzh4eF9jYWJsZV9pc3IoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sK KwlzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCA9IGRhdGE7CisKKwlxdWV1ZV9kZWxheWVkX3dvcmso YW54Nzh4eC0+d29ya3F1ZXVlLCAmYW54Nzh4eC0+d29yaywgMCk7CisKKwlyZXR1cm4gSVJRX0hB TkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIGFueDc4eHhfd29ya19mdW5jKHN0cnVjdCB3b3JrX3N0 cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCA9IGNvbnRhaW5lcl9vZih3 b3JrLCBzdHJ1Y3QgYW54Nzh4eCwKKwkJCQkJICAgICAgIHdvcmsud29yayk7CisKKwlpZiAoc3Bf bWFpbl9wcm9jZXNzKGFueDc4eHgpKQorCQlxdWV1ZV9kZWxheWVkX3dvcmsoYW54Nzh4eC0+d29y a3F1ZXVlLCAmYW54Nzh4eC0+d29yaywKKwkJCQkgICBtc2Vjc190b19qaWZmaWVzKDUwMCkpOwor CWVsc2UKKwkJY2FuY2VsX2RlbGF5ZWRfd29yaygmYW54Nzh4eC0+d29yayk7Cit9CisKK3N0YXRp YyBpbmxpbmUgc3RydWN0IGFueDc4eHggKmJyaWRnZV90b19hbng3OHh4KHN0cnVjdCBkcm1fYnJp ZGdlICpicmlkZ2UpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihicmlkZ2UsIHN0cnVjdCBhbng3 OHh4LCBicmlkZ2UpOworfQorCitzdGF0aWMgaW50IGFueDc4eHhfYnJpZGdlX2F0dGFjaChzdHJ1 Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgYm9vbCBh bng3OHh4X2JyaWRnZV9tb2RlX2ZpeHVwKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCisJCQkJ ICAgICAgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJICAgICAgc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCit7CisJc3RydWN0IGFueDc4eHgg KmFueDc4eHggPSBicmlkZ2VfdG9fYW54Nzh4eChicmlkZ2UpOworCisJZGV2X2RiZygmYW54Nzh4 eC0+Y2xpZW50LT5kZXYsICJtb2RlX2ZpeHVwICVkPCVkOyAlZDsgJWRcbiIsCisJCXNwX2dldF9s aW5rX2JhbmR3aWR0aChhbng3OHh4KSwgU1BfTElOS181UDRHLAorCQltb2RlLT5jbG9jaywgbW9k ZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSk7CisKKwlpZiAobW9kZS0+ZmxhZ3Mg JiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogTWF4IDcy MHAgYXQgMi43IEdoeiwgb25lIGxhbmUgKi8KKwlpZiAoc3BfZ2V0X2xpbmtfYmFuZHdpZHRoKGFu eDc4eHgpIDwgU1BfTElOS181UDRHICYmCisJICAgIG1vZGUtPmNsb2NrID4gNzQyNTApCisJCXJl dHVybiBmYWxzZTsKKworCS8qIE1heCAxMjAwcCBhdCA1LjQgR2h6LCBvbmUgbGFuZSAqLworCWlm IChtb2RlLT5jbG9jayA+IDE1NDAwMCkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7 Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2JyaWRnZV9mdW5jcyBhbng3OHh4X2JyaWRn ZV9mdW5jcyA9IHsKKwkuYXR0YWNoCQk9IGFueDc4eHhfYnJpZGdlX2F0dGFjaCwKKwkubW9kZV9m aXh1cAk9IGFueDc4eHhfYnJpZGdlX21vZGVfZml4dXAsCit9OworCitzdGF0aWMgaW50IGFueDc4 eHhfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkgICAgIGNvbnN0IHN0 cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eDsKKwlp bnQgcmV0OworCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIs CisJCQkJICAgICBJMkNfRlVOQ19TTUJVU19JMkNfQkxPQ0spKSB7CisJCWRldl9lcnIoJmNsaWVu dC0+ZGV2LCAiaTJjIGJ1cyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBkZXZpY2VcbiIpOworCQlyZXR1 cm4gLUVOT0RFVjsKKwl9CisKKwlhbng3OHh4ID0gZGV2bV9remFsbG9jKCZjbGllbnQtPmRldiwg c2l6ZW9mKCphbng3OHh4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhbng3OHh4KQorCQlyZXR1cm4g LUVOT01FTTsKKworCWFueDc4eHgtPnBkYXRhID0gZGV2bV9remFsbG9jKCZjbGllbnQtPmRldiwK KwkJCQkgICAgICBzaXplb2Yoc3RydWN0IGFueDc4eHhfcGxhdGZvcm1fZGF0YSksCisJCQkJICAg ICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFhbng3OHh4LT5wZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07 CisKKwlhbng3OHh4LT5icmlkZ2Uub2Zfbm9kZSA9IGNsaWVudC0+ZGV2Lm9mX25vZGU7CisJYW54 Nzh4eC0+YnJpZGdlLmZ1bmNzID0gJmFueDc4eHhfYnJpZGdlX2Z1bmNzOworCXJldCA9IGRybV9i cmlkZ2VfYWRkKCZhbng3OHh4LT5icmlkZ2UpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIo JmNsaWVudC0+ZGV2LCAiYWRkIGRybSBicmlkZ2UgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIHJldDsK Kwl9CisKKwlhbng3OHh4LT5jbGllbnQgPSBjbGllbnQ7CisKKwlpMmNfc2V0X2NsaWVudGRhdGEo Y2xpZW50LCBhbng3OHh4KTsKKworCXJldCA9IGFueDc4eHhfaW5pdF9ncGlvKGFueDc4eHgpOwor CWlmIChyZXQpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYWlsZWQgdG8gaW5pdGlhbGl6 ZSBncGlvc1xuIik7CisJCWdvdG8gZmFpbF9yZW1vdmVfYnJpZGdlOworCX0KKworCUlOSVRfREVM QVlFRF9XT1JLKCZhbng3OHh4LT53b3JrLCBhbng3OHh4X3dvcmtfZnVuYyk7CisKKwlhbng3OHh4 LT53b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgiYW54Nzh4eF93b3Jr Iik7CisJaWYgKCFhbng3OHh4LT53b3JrcXVldWUpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYs ICJmYWlsZWQgdG8gY3JlYXRlIHdvcmsgcXVldWVcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQln b3RvIGZhaWxfcmVtb3ZlX2JyaWRnZTsKKwl9CisKKwlyZXQgPSBzcF9zeXN0ZW1faW5pdChhbng3 OHh4KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFpbGVkIHRvIGlu aXRpYWxpemUgYW54Nzh4eFxuIik7CisJCWdvdG8gZmFpbF9mcmVlX3dxOworCX0KKworCWNsaWVu dC0+aXJxID0gZ3Bpb2RfdG9faXJxKGFueDc4eHgtPnBkYXRhLT5ncGlvZF9jYWJsZV9kZXQpOwor CWlmIChjbGllbnQtPmlycSA8IDApIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYWlsZWQg dG8gZ2V0IGlycTogJWRcbiIsIGNsaWVudC0+aXJxKTsKKwkJcmV0ID0gY2xpZW50LT5pcnE7CisJ CWdvdG8gZmFpbF9mcmVlX3dxOworCX0KKworCXJldCA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKGNs aWVudC0+aXJxLCBOVUxMLCBhbng3OHh4X2NhYmxlX2lzciwKKwkJCQkgICBJUlFGX1RSSUdHRVJf UklTSU5HIHwKKwkJCQkgICBJUlFGX1RSSUdHRVJfRkFMTElORyB8CisJCQkJICAgSVJRRl9PTkVT SE9ULCAiYW54Nzh4eCIsIGFueDc4eHgpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmY2xpZW50 LT5kZXYsICJmYWlsZWQgdG8gcmVxdWVzdCB0aHJlYWRlZCBpcnFcbiIpOworCQlnb3RvIGZhaWxf ZnJlZV93cTsKKwl9CisKKwlyZXQgPSBpcnFfc2V0X2lycV93YWtlKGNsaWVudC0+aXJxLCAxKTsK KwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFpbGVkIHRvIHNldCBpcnEg d2FrZVxuIik7CisJCWdvdG8gZmFpbF9mcmVlX3dxOworCX0KKworCXJldCA9IGVuYWJsZV9pcnFf d2FrZShjbGllbnQtPmlycSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwg ImZhaWxlZCB0byBlbmFibGUgaXJxIHdha2VcbiIpOworCQlnb3RvIGZhaWxfZnJlZV93cTsKKwl9 CisKKwkvKiBlbmFibGUgZHJpdmVyICovCisJcXVldWVfZGVsYXllZF93b3JrKGFueDc4eHgtPndv cmtxdWV1ZSwgJmFueDc4eHgtPndvcmssIDApOworCisJcmV0dXJuIDA7CisKK2ZhaWxfZnJlZV93 cToKKwlkZXN0cm95X3dvcmtxdWV1ZShhbng3OHh4LT53b3JrcXVldWUpOworZmFpbF9yZW1vdmVf YnJpZGdlOgorCWRybV9icmlkZ2VfcmVtb3ZlKCZhbng3OHh4LT5icmlkZ2UpOworCXJldHVybiBy ZXQ7Cit9CisKK3N0YXRpYyBpbnQgYW54Nzh4eF9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50 ICpjbGllbnQpCit7CisJc3RydWN0IGFueDc4eHggKmFueDc4eHggPSBpMmNfZ2V0X2NsaWVudGRh dGEoY2xpZW50KTsKKworCWRlc3Ryb3lfd29ya3F1ZXVlKGFueDc4eHgtPndvcmtxdWV1ZSk7CisJ ZHJtX2JyaWRnZV9yZW1vdmUoJmFueDc4eHgtPmJyaWRnZSk7CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIGludCBhbng3OHh4X2kyY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlz dHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGkyY19j bGllbnQsIGRldik7CisJc3RydWN0IGFueDc4eHggKmFueDc4eHggPSBpMmNfZ2V0X2NsaWVudGRh dGEoY2xpZW50KTsKKworCWlmIChhbng3OHh4X2NhYmxlX2lzX2RldGVjdGVkKGFueDc4eHgpKSB7 CisJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYW54Nzh4eC0+d29yayk7CisJCWZsdXNoX3dv cmtxdWV1ZShhbng3OHh4LT53b3JrcXVldWUpOworCQlhbng3OHh4X3Bvd2Vyb2ZmKGFueDc4eHgp OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFueDc4eHhfaTJjX3Jlc3VtZShz dHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGNvbnRh aW5lcl9vZihkZXYsIHN0cnVjdCBpMmNfY2xpZW50LCBkZXYpOworCXN0cnVjdCBhbng3OHh4ICph bng3OHh4ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlpZiAoYW54Nzh4eF9jYWJs ZV9pc19kZXRlY3RlZChhbng3OHh4KSkKKwkJcXVldWVfZGVsYXllZF93b3JrKGFueDc4eHgtPndv cmtxdWV1ZSwgJmFueDc4eHgtPndvcmssIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBT SU1QTEVfREVWX1BNX09QUyhhbng3OHh4X2kyY19wbV9vcHMsCisJCQlhbng3OHh4X2kyY19zdXNw ZW5kLCBhbng3OHh4X2kyY19yZXN1bWUpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZp Y2VfaWQgYW54Nzh4eF9pZFtdID0geworCXsiYW54NzgxNCIsIDB9LAorCXsgLyogc2VudGluZWwg Ki8gfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGFueDc4eHhfaWQpOworCisjaWZk ZWYgQ09ORklHX09GCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBhbng3OHh4X21h dGNoX3RhYmxlW10gPSB7CisJey5jb21wYXRpYmxlID0gImFuYWxvZ2l4LGFueDc4MTQiLH0sCisJ eyAvKiBzZW50aW5lbCAqLyB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGFueDc4eHhf bWF0Y2hfdGFibGUpOworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBhbng3OHh4 X2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkgICAubmFtZSA9ICJhbng3ODE0IiwKKwkJICAg LnBtID0gJmFueDc4eHhfaTJjX3BtX29wcywKKyNpZmRlZiBDT05GSUdfT0YKKwkJICAgLm9mX21h dGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKGFueDc4eHhfbWF0Y2hfdGFibGUpLAorI2VuZGlmCisJ CSAgIH0sCisJLnByb2JlID0gYW54Nzh4eF9pMmNfcHJvYmUsCisJLnJlbW92ZSA9IGFueDc4eHhf aTJjX3JlbW92ZSwKKwkuaWRfdGFibGUgPSBhbng3OHh4X2lkLAorfTsKKworbW9kdWxlX2kyY19k cml2ZXIoYW54Nzh4eF9kcml2ZXIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlNsaW1wb3J0IHRy YW5zbWl0dGVyIEFOWDc4WFggZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJKdW5odWEgWGlhIDxq eGlhQGFuYWxvZ2l4c2VtaS5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RV TEVfVkVSU0lPTigiMS4xIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2Fu eDc4eHgvc2xpbXBvcnRfdHhfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FueDc4eHgv c2xpbXBvcnRfdHhfZHJ2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ5 ZWMwZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW54Nzh4eC9z bGltcG9ydF90eF9kcnYuYwpAQCAtMCwwICsxLDMyMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQoYykg MjAxNSwgQW5hbG9naXggU2VtaWNvbmR1Y3Rvci4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg KiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCisgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNo ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorICoKKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+CisjaW5jbHVkZSA8ZHJt L2RybV9lZGlkLmg+CisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4 L3R5cGVzLmg+CisKKyNpbmNsdWRlICJhbng3OHh4LmgiCisjaW5jbHVkZSAic2xpbXBvcnRfdHhf ZHJ2LmgiCisKKyNkZWZpbmUgWFRBTF8yN00JMjcwCisjZGVmaW5lIFhUQUxfQ0xLCVhUQUxfMjdN CisKK3N0cnVjdCBzbGltcG9ydCB7CisJYm9vbAloZGNwX2VuYWJsZWQ7CS8qIEhEQ1AgY29udHJv bCBlbmFibGUvIGRpc2FibGUgZnJvbSBBUCAqLworCisJdTgJdHhfdGVzdF9idzsKKwlib29sCXR4 X3Rlc3RfbHQ7CisJYm9vbAl0eF90ZXN0X2VkaWQ7CisKKwl1OAljaGFuZ2VkX2JhbmR3aWR0aDsK KworCWJvb2wJbmVlZF9jbGVhbl9zdGF0dXM7CisKKwl1OAloZGNwX2Vycm9yX2NvdW50OworCXU4 CWhkY3BfZmFpbF9jb3VudDsKKwl1OAlhdWRpb19zdGFibGVfY291bnQ7CS8qIEF1ZGlvIHN0YWJs ZSBjb3VudGVyICovCisKKwl1OAllZGlkX2Jsb2Nrc1tFRElEX0xFTkdUSF07CisKKwlib29sCXJl YWRfZWRpZF9mbGFnOworCisJYm9vbAlkb3duX3NhbXBsZV9lbjsKKworCXN0cnVjdCBwYWNrZXRf YXVkaW8JdHhfcGFja2V0X2F1ZGlvOworCXN0cnVjdCBwYWNrZXRfYXZpCXR4X3BhY2tldF9hdmk7 CisJc3RydWN0IHBhY2tldF9tcGVnCXR4X3BhY2tldF9tcGVnOworCXN0cnVjdCBwYWNrZXRfdnNp CXR4X3BhY2tldF92c2k7CisKKwkvKiBJbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVycyAqLworCXU4 CWNvbW1vbl9pbnRbNF07CisJdTgJZHBfaW50OworCXU4CXNwX2hkbWlfaW50WzddOworCisJZW51 bSBzcF90eF9zdGF0ZQkJdHhfc3lzdGVtX3N0YXRlOworCWVudW0gYXVkaW9fb3V0cHV0X3N0YXR1 cwl0eF9hb19zdGF0ZTsKKwllbnVtIHZpZGVvX291dHB1dF9zdGF0dXMJdHhfdm9fc3RhdGU7CisJ ZW51bSBzcF90eF9sdF9zdGF0dXMJCXR4X2x0X3N0YXRlOworCWVudW0gaGRjcF9zdGF0dXMJCWhk Y3Bfc3RhdGU7CisJZW51bSByZXBlYXRlcl9zdGF0dXMJCXJlcGVhdGVyX3N0YXRlOworfTsKKwor c3RhdGljIHN0cnVjdCBzbGltcG9ydCBzcDsKKworc3RhdGljIGNvbnN0IHUxNiBjaGlwaWRfbGlz dFtdID0geworCTB4NzgwMiwKKwkweDc4MDYsCisJMHg3ODEwLAorCTB4NzgxMiwKKwkweDc4MTQs CisJMHg3ODE2LAorCTB4NzgxOCwKK307CisKK3N0YXRpYyB2b2lkIHNwX2hkbWlfbmV3X3ZzaV9p bnQoc3RydWN0IGFueDc4eHggKmFueDc4eHgpOworc3RhdGljIHZvaWQgc3BfcHJpbnRfc3lzdGVt X3N0YXRlKHN0cnVjdCBhbng3OHh4ICphbng3OHh4LAorCQkJCSAgZW51bSBzcF90eF9zdGF0ZSBz dGF0ZSk7CitzdGF0aWMgdm9pZCBzcF9zaG93X2luZm9ybWF0aW9uKHN0cnVjdCBhbng3OHh4ICph bng3OHh4KTsKK3N0YXRpYyB2b2lkIHNwX3ZhcmlhYmxlX2luaXQodm9pZCk7CisKKy8qKgorICog c3BfcmVnX3JlYWQ6IFJlYWQgYWkgdmFsdWUgZnJvbSBhIHNpbmdsZSByZWdpc3Rlci4KKyAqCisg KiBAYW54Nzh4eDogRGV2aWNlIHRvIHJlYWQgZnJvbS4KKyAqIEBhZGRyOiBBZGRyZXNzIHRvIHJl YWQgZnJvbS4KKyAqIEByZWc6IFJlZ2lzdGVyIHRvIGJlIHJlYWQgZnJvbS4KKyAqIEB2YWw6IFBv aW50ZXIgdG8gc3RvcmUgcmVhZCB2YWx1ZS4KKyAqCisgKiBBIHZhbHVlIG9mIHplcm8gd2lsbCBi ZSByZXR1cm5lZCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5vIHdpbGwKKyAqIGJlIHJldHVy bmVkIGluIGVycm9yIGNhc2VzLgorICovCitzdGF0aWMgaW50IHNwX3JlZ19yZWFkKHN0cnVjdCBh bng3OHh4ICphbng3OHh4LCB1OCBhZGRyLCB1OCBvZmZzZXQsIHU4ICp2YWwpCit7CisJaW50IHJl dDsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gYW54Nzh4eC0+Y2xpZW50OworCisJY2xp ZW50LT5hZGRyID0gYWRkciA+PiAxOworCisJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRh KGNsaWVudCwgb2Zmc2V0KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRl diwgImZhaWxlZCB0byByZWFkIGkyYyBhZGRyPSV4XG4iLCBhZGRyKTsKKwkJcmV0dXJuIHJldDsK Kwl9CisKKwkqdmFsID0gcmV0OworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogc3BfcmVnX3dy aXRlKCk6IFdyaXRlIGEgdmFsdWUgdG8gYSBzaW5nbGUgcmVnaXN0ZXIKKyAqCisgKiBAYW54Nzh4 eDogRGV2aWNlIHRvIHJlYWQgZnJvbS4KKyAqIEBhZGRyOiBBZGRyZXNzIHRvIHdyaXRlIHRvLgor ICogQG9mZnNldDogQnl0ZSBpbnRlcnByZXRlZCBieSBzbGF2ZS4KKyAqIEB2YWw6IFZhbHVlIHRv IGJlIHdyaXR0ZW4uCisgKgorICogQSB2YWx1ZSBvZiB6ZXJvIHdpbGwgYmUgcmV0dXJuZWQgb24g c3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJubyB3aWxsCisgKiBiZSByZXR1cm5lZCBpbiBlcnJvciBj YXNlcy4KKyAqLworc3RhdGljIGludCBzcF9yZWdfd3JpdGUoc3RydWN0IGFueDc4eHggKmFueDc4 eHgsIHU4IGFkZHIsIHU4IG9mZnNldCwgdTggdmFsKQoreworCWludCByZXQ7CisJc3RydWN0IGky Y19jbGllbnQgKmNsaWVudCA9IGFueDc4eHgtPmNsaWVudDsKKworCWNsaWVudC0+YWRkciA9IGFk ZHIgPj4gMTsKKworCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBvZmZz ZXQsIHZhbCk7CisJaWYgKHJldCA8IDApCisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFpbGVk IHRvIHdyaXRlIGkyYyBhZGRyPSV4XG4iLCBhZGRyKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8q KgorICogc3BfcmVnX3VwZGF0ZV9iaXRzOiBQZXJmb3JtIGEgcmVhZC9tb2RpZnkvd3JpdGUgY3lj bGUgb24gdGhlIHJlZ2lzdGVyLgorICoKKyAqIEBhbng3OHh4OiBEZXZpY2UgdG8gcmVhZCBmcm9t LgorICogQGFkZHI6IEFkZHJlc3MgdG8gd3JpdGUgdG8uCisgKiBAb2Zmc2V0OiBCeXRlIGludGVy cHJldGVkIGJ5IHNsYXZlLgorICogQG1hc2s6IEJpdG1hc2sgdG8gY2hhbmdlLgorICogQHZhbDog TmV3IHZhbHVlIGZvciBiaXRtYXNrLgorICoKKyAqIFJldHVybnMgemVybyBmb3Igc3VjY2Vzcywg YSBuZWdhdGl2ZSBudW1iZXIgb24gZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQgc3BfcmVnX3VwZGF0 ZV9iaXRzKHN0cnVjdCBhbng3OHh4ICphbng3OHh4LCB1OCBhZGRyLCB1OCBvZmZzZXQsCisJCQkg ICAgICB1OCBtYXNrLCB1OCB2YWwpCit7CisJaW50IHJldDsKKwl1OCBvcmlnLCB0bXA7CisKKwly ZXQgPSBzcF9yZWdfcmVhZChhbng3OHh4LCBhZGRyLCBvZmZzZXQsICZvcmlnKTsKKwlpZiAocmV0 IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXRtcCA9IG9yaWcgJiB+bWFzazsKKwl0bXAgfD0gdmFs ICYgbWFzazsKKworCXJldHVybiBzcF9yZWdfd3JpdGUoYW54Nzh4eCwgYWRkciwgb2Zmc2V0LCB0 bXApOworfQorCisvKioKKyAqIHNwX3JlZ19zZXRfYml0czogUGVyZm9ybSBhIHJlYWQvd3JpdGUg Y3ljbGUgdG8gc2V0IGJpdHMgaW4gcmVnaXN0ZXIuCisgKgorICogQGFueDc4eHg6IERldmljZSB0 byByZWFkIGZyb20uCisgKiBAYWRkcjogQWRkcmVzcyB0byB3cml0ZSB0by4KKyAqIEBvZmZzZXQ6 IEJ5dGUgaW50ZXJwcmV0ZWQgYnkgc2xhdmUuCisgKiBAbWFzazogQml0bWFzayB0byBjaGFuZ2Uu CisgKgorICogUmV0dXJucyB6ZXJvIGZvciBzdWNjZXNzLCBhIG5lZ2F0aXZlIG51bWJlciBvbiBl cnJvci4KKyAqLworc3RhdGljIGlubGluZSBpbnQgc3BfcmVnX3NldF9iaXRzKHN0cnVjdCBhbng3 OHh4ICphbng3OHh4LCB1OCBhZGRyLAorCQkJCSAgdTggb2Zmc2V0LCB1OCBtYXNrKQoreworCXJl dHVybiBzcF9yZWdfdXBkYXRlX2JpdHMoYW54Nzh4eCwgYWRkciwgb2Zmc2V0LCBtYXNrLCBtYXNr KTsKK30KKworLyoqCisgKiBzcF9yZWdfY2xlYXJfYml0czogUGVyZm9ybSBhIHJlYWQvd3JpdGUg Y3ljbGUgdG8gY2xlYXIgYml0cyBpbiByZWdpc3Rlci4KKyAqCisgKiBAYW54Nzh4eDogRGV2aWNl IHRvIHJlYWQgZnJvbS4KKyAqIEBhZGRyOiBBZGRyZXNzIHRvIHdyaXRlIHRvLgorICogQG9mZnNl dDogQnl0ZSBpbnRlcnByZXRlZCBieSBzbGF2ZS4KKyAqIEBtYXNrOiBCaXRtYXNrIHRvIGNoYW5n ZS4KKyAqCisgKiBSZXR1cm5zIHplcm8gZm9yIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgbnVtYmVyIG9u IGVycm9yLgorICovCitzdGF0aWMgaW5saW5lIGludCBzcF9yZWdfY2xlYXJfYml0cyhzdHJ1Y3Qg YW54Nzh4eCAqYW54Nzh4eCwgdTggYWRkciwKKwkJCQkgICAgdTggb2Zmc2V0LCB1OCBtYXNrKQor eworCXJldHVybiBzcF9yZWdfdXBkYXRlX2JpdHMoYW54Nzh4eCwgYWRkciwgb2Zmc2V0LCBtYXNr LCAwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNwX3ZpZGVvX211dGUoc3RydWN0IGFueDc4 eHggKmFueDc4eHgsIGJvb2wgZW5hYmxlKQoreworCWlmIChlbmFibGUpCisJCXNwX3JlZ19zZXRf Yml0cyhhbng3OHh4LCBUWF9QMiwgU1BfVklEX0NUUkwxX1JFRywKKwkJCQlTUF9WSURFT19NVVRF KTsKKwllbHNlCisJCXNwX3JlZ19jbGVhcl9iaXRzKGFueDc4eHgsIFRYX1AyLCBTUF9WSURfQ1RS TDFfUkVHLAorCQkJCSAgU1BfVklERU9fTVVURSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBz cF9oZG1pX211dGVfYXVkaW8oc3RydWN0IGFueDc4eHggKmFueDc4eHgsIGJvb2wgZW5hYmxlKQor eworCWlmIChlbmFibGUpCisJCXNwX3JlZ19zZXRfYml0cyhhbng3OHh4LCBSWF9QMCwgU1BfSERN SV9NVVRFX0NUUkxfUkVHLAorCQkJCVNQX0FVRF9NVVRFKTsKKwllbHNlCisJCXNwX3JlZ19jbGVh cl9iaXRzKGFueDc4eHgsIFJYX1AwLCBTUF9IRE1JX01VVEVfQ1RSTF9SRUcsCisJCQkJICBTUF9B VURfTVVURSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzcF9oZG1pX211dGVfdmlkZW8oc3Ry dWN0IGFueDc4eHggKmFueDc4eHgsIGJvb2wgZW5hYmxlKQoreworCWlmIChlbmFibGUpCisJCXNw X3JlZ19zZXRfYml0cyhhbng3OHh4LCBSWF9QMCwgU1BfSERNSV9NVVRFX0NUUkxfUkVHLAorCQkJ CVNQX1ZJRF9NVVRFKTsKKwllbHNlCisJCXNwX3JlZ19jbGVhcl9iaXRzKGFueDc4eHgsIFJYX1Aw LCBTUF9IRE1JX01VVEVfQ1RSTF9SRUcsCisJCQkJICBTUF9WSURfTVVURSk7Cit9CisKK3N0YXRp YyBpbmxpbmUgdm9pZCBzcF9hZGRyb25seV9zZXQoc3RydWN0IGFueDc4eHggKmFueDc4eHgsIGJv b2wgZW5hYmxlKQoreworCWlmIChlbmFibGUpCisJCXNwX3JlZ19zZXRfYml0cyhhbng3OHh4LCBU WF9QMCwgU1BfRFBfQVVYX0NIX0NUUkwyX1JFRywKKwkJCQlTUF9BRERSX09OTFkpOworCWVsc2UK KwkJc3BfcmVnX2NsZWFyX2JpdHMoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX0FVWF9DSF9DVFJMMl9S RUcsCisJCQkJICBTUF9BRERSX09OTFkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3Bfc2V0 X2xpbmtfYncoc3RydWN0IGFueDc4eHggKmFueDc4eHgsIHU4IGJ3KQoreworCXNwX3JlZ193cml0 ZShhbng3OHh4LCBUWF9QMCwgU1BfRFBfTUFJTl9MSU5LX0JXX1NFVF9SRUcsIGJ3KTsKK30KKwor c3RhdGljIGlubGluZSB1OCBzcF9nZXRfbGlua19idyhzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCkK K3sKKwl1OCB2YWw7CisKKwlzcF9yZWdfcmVhZChhbng3OHh4LCBUWF9QMCwgU1BfRFBfTUFJTl9M SU5LX0JXX1NFVF9SRUcsICZ2YWwpOworCisJcmV0dXJuIHZhbCAmIFNQX0xJTktfQldfU0VUX01B U0s7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzcF9nZXRfcGxsX2xvY2tfc3RhdHVzKHN0cnVj dCBhbng3OHh4ICphbng3OHh4KQoreworCXU4IHZhbDsKKworCXNwX3JlZ19yZWFkKGFueDc4eHgs IFRYX1AwLCBTUF9EUF9ERUJVRzFfUkVHLCAmdmFsKTsKKworCXJldHVybiAodmFsICYgU1BfREVC VUdfUExMX0xPQ0spICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzcF9nZW5fbV9jbGtf d2l0aF9kb3duc3ByZWFkaW5nKHN0cnVjdCBhbng3OHh4ICphbng3OHh4KQoreworCXNwX3JlZ19z ZXRfYml0cyhhbng3OHh4LCBUWF9QMCwgU1BfRFBfTV9DQUxDVUxBVElPTl9DVFJMX1JFRywKKwkJ CVNQX01fR0VOX0NMS19TRUwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3BfZ2VuX21fY2xr X3dpdGhvdXRfZG93bnNwcmVhZGluZyhzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCkKK3sKKwlzcF9y ZWdfY2xlYXJfYml0cyhhbng3OHh4LCBUWF9QMCwgU1BfRFBfTV9DQUxDVUxBVElPTl9DVFJMX1JF RywKKwkJCSAgU1BfTV9HRU5fQ0xLX1NFTCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzcF9o ZG1pX3NldF9ocGQoc3RydWN0IGFueDc4eHggKmFueDc4eHgsIGJvb2wgZW5hYmxlKQoreworCWlm IChlbmFibGUpCisJCXNwX3JlZ19zZXRfYml0cyhhbng3OHh4LCBUWF9QMiwgU1BfVklEX0NUUkwz X1JFRywgU1BfSFBEX09VVCk7CisJZWxzZQorCQlzcF9yZWdfY2xlYXJfYml0cyhhbng3OHh4LCBU WF9QMiwgU1BfVklEX0NUUkwzX1JFRywKKwkJCQkgIFNQX0hQRF9PVVQpOworfQorCitzdGF0aWMg aW5saW5lIHZvaWQgc3BfaGRtaV9zZXRfdGVybWluYXRpb24oc3RydWN0IGFueDc4eHggKmFueDc4 eHgsCisJCQkJCSAgIGJvb2wgZW5hYmxlKQoreworCWlmIChlbmFibGUpCisJCXNwX3JlZ19jbGVh cl9iaXRzKGFueDc4eHgsIFJYX1AwLCBTUF9UTURTX0NUUkxfQkFTRSArIDcsCisJCQkJICBTUF9Q RF9SVCk7CisJZWxzZQorCQlzcF9yZWdfc2V0X2JpdHMoYW54Nzh4eCwgUlhfUDAsIFNQX1RNRFNf Q1RSTF9CQVNFICsgNywKKwkJCQlTUF9QRF9SVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBz cF9oZGNwX3JlcGVhdGVyX21vZGUoc3RydWN0IGFueDc4eHggKmFueDc4eHgpCit7CisJdTggdmFs OworCisJc3BfcmVnX3JlYWQoYW54Nzh4eCwgUlhfUDEsIFNQX0hEQ1BfQkNBUFNfU0hBRE9XX1JF RywgJnZhbCk7CisKKwlyZXR1cm4gKHZhbCAmIFNQX0JDQVBTX1JFUEVBVEVSKTsKK30KKworc3Rh dGljIGlubGluZSB2b2lkIHNwX2NsZWFuX2hkY3Bfc3RhdHVzKHN0cnVjdCBhbng3OHh4ICphbng3 OHh4KQoreworCXNwX3JlZ193cml0ZShhbng3OHh4LCBUWF9QMCwgU1BfSERDUF9DVFJMMF9SRUcs CisJCSAgICAgU1BfQktTVl9TUk1fUEFTUyB8IFNQX0tTVkxJU1RfVkxEKTsKKwlzcF9yZWdfc2V0 X2JpdHMoYW54Nzh4eCwgVFhfUDAsIFNQX0hEQ1BfQ1RSTDBfUkVHLCBTUF9SRV9BVVRIKTsKKwl1 c2xlZXBfcmFuZ2UoMjAwMCwgNDAwMCk7Cit9CisKK3N0YXRpYyBjb25zdCB1OCBkcF90eF9vdXRw dXRfcHJlY2lzZV90dW5lX2JpdHNbMjBdID0geworCTB4MDEsIDB4MDMsIDB4MDcsIDB4N2YsIDB4 NzEsIDB4NmIsIDB4N2YsCisJMHg3MywgMHg3ZiwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw MCwKKwkweDBjLCAweDQyLCAweDFlLCAweDNlLCAweDcyLCAweDdlLAorfTsKKworc3RhdGljIHZv aWQgc3BfbGlua19waHlfaW5pdGlhbGl6YXRpb24oc3RydWN0IGFueDc4eHggKmFueDc4eHgpCit7 CisJaW50IGk7CisKKwkvKgorCSAqIFJFVklTSVQgOiBJdCBpcyB3cml0aW5nIHRvIGEgUkVTRVJW RUQgYml0cyBpbiBBbmFsb2cgQ29udHJvbCAwCisJICogcmVnaXN0ZXIuCisJICovCisJc3BfcmVn X3dyaXRlKGFueDc4eHgsIFRYX1AyLCBTUF9BTkFMT0dfQ1RSTDBfUkVHLCAweDAyKTsKKworCS8q CisJICogV3JpdGUgRFAgVFggb3V0cHV0IGVtcGhhc2lzIHByZWNpc2UgdHVuZSBiaXRzLgorCSAq LworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRwX3R4X291dHB1dF9wcmVjaXNlX3R1bmVf Yml0cyk7IGkrKykKKwkJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFRYX1AxLCBTUF9EUF9UWF9MVF9D VFJMMF9SRUcgKyBpLAorCQkJICAgICBkcF90eF9vdXRwdXRfcHJlY2lzZV90dW5lX2JpdHNbaV0p OworfQorCitzdGF0aWMgdm9pZCBzcF9zZXRfc3lzdGVtX3N0YXRlKHN0cnVjdCBhbng3OHh4ICph bng3OHh4LAorCQkJCWVudW0gc3BfdHhfc3RhdGUgbmV3X3N0YXRlKQoreworCXU4IHZhbDsKKwlz dHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW54Nzh4eC0+Y2xpZW50LT5kZXY7CisKKwlpZiAoKHNwLnR4 X3N5c3RlbV9zdGF0ZSA+PSBTVEFURV9MSU5LX1RSQUlOSU5HKSAmJgorCSAgICAobmV3X3N0YXRl IDwgU1RBVEVfTElOS19UUkFJTklORykpCisJCXNwX3JlZ19zZXRfYml0cyhhbng3OHh4LCBUWF9Q MCwgU1BfRFBfQU5BTE9HX1BPV0VSX0RPV05fUkVHLAorCQkJCVNQX0NIMF9QRCk7CisKKwlkZXZf ZGJnKGRldiwgIjw8IFN5c3RlbSBTdGF0ZSBUcmFuc2l0b24gQSAtPiBCOlxuIik7CisJZGV2X2Ri ZyhkZXYsICI8PCBBOlxuIik7CisJc3BfcHJpbnRfc3lzdGVtX3N0YXRlKGFueDc4eHgsIHNwLnR4 X3N5c3RlbV9zdGF0ZSk7CisJZGV2X2RiZyhkZXYsICI8PCBCOlxuIik7CisJc3BfcHJpbnRfc3lz dGVtX3N0YXRlKGFueDc4eHgsIG5ld19zdGF0ZSk7CisKKwlpZiAoc3AudHhfc3lzdGVtX3N0YXRl ID49IFNUQVRFX0xJTktfVFJBSU5JTkcpIHsKKwkJaWYgKG5ld19zdGF0ZSA+PSBTVEFURV9BVURJ T19PVVRQVVQpIHsKKwkJCXNwX2hkbWlfbXV0ZV9hdWRpbyhhbng3OHh4LCB0cnVlKTsKKwkJfSBl bHNlIHsKKwkJCXNwX2hkbWlfbXV0ZV92aWRlbyhhbng3OHh4LCB0cnVlKTsKKwkJCXNwX3ZpZGVv X211dGUoYW54Nzh4eCwgdHJ1ZSk7CisJCX0KKwl9CisKKwlpZiAoIXNwX2hkY3BfcmVwZWF0ZXJf bW9kZShhbng3OHh4KSkgeworCQlpZiAoc3AudHhfc3lzdGVtX3N0YXRlID49IFNUQVRFX0hEQ1Bf QVVUSCAmJgorCQkgICAgbmV3X3N0YXRlIDw9IFNUQVRFX0hEQ1BfQVVUSCkgeworCQkJc3BfcmVn X3JlYWQoYW54Nzh4eCwgVFhfUDAsIFNQX0hEQ1BfQ1RSTDBfUkVHLCAmdmFsKTsKKwkJCWlmICh2 YWwgJiB+KFNQX0tTVkxJU1RfVkxEIHwgU1BfQktTVl9TUk1fUEFTUykpCisJCQkJc3BfY2xlYW5f aGRjcF9zdGF0dXMoYW54Nzh4eCk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoc3AudHhfc3lzdGVt X3N0YXRlID4gU1RBVEVfTElOS19UUkFJTklORyAmJgorCQkgICAgbmV3X3N0YXRlIDw9IFNUQVRF X0xJTktfVFJBSU5JTkcpIHsKKwkJCS8qIEluZm9ybSBBUCB0byByZS1hdXRoICovCisJCQlzcF9o ZG1pX3NldF9ocGQoYW54Nzh4eCwgZmFsc2UpOworCQkJc3BfaGRtaV9zZXRfdGVybWluYXRpb24o YW54Nzh4eCwgZmFsc2UpOworCQkJbXNsZWVwKDUwKTsKKwkJfQorCX0KKworCXNwLnR4X3N5c3Rl bV9zdGF0ZSA9IG5ld19zdGF0ZTsKKwlzcC5oZGNwX3N0YXRlID0gSERDUF9DQVBBQkxFX0NIRUNL OworCXNwLnR4X2x0X3N0YXRlID0gTFRfSU5JVDsKKwlzcC50eF92b19zdGF0ZSA9IFZPX1dBSVRf VklERU9fU1RBQkxFOworCS8qIFJlc2V0IGF1ZGlvIHN0YWJsZSBjb3VudGVyICovCisJc3AuYXVk aW9fc3RhYmxlX2NvdW50ID0gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNwX3JlZ19oYXJk d2FyZV9yZXNldChzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCkKK3sKKwlzcF9yZWdfc2V0X2JpdHMo YW54Nzh4eCwgVFhfUDIsIFNQX1JFU0VUX0NUUkwxX1JFRywgU1BfSFdfUlNUKTsKKwlzcF92YXJp YWJsZV9pbml0KCk7CisJc3Bfc2V0X3N5c3RlbV9zdGF0ZShhbng3OHh4LCBTVEFURV9TUF9JTklU SUFMSVpFRCk7CisJbXNsZWVwKDUwMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzcF93cml0 ZV9kcGNkX2FkZHIoc3RydWN0IGFueDc4eHggKmFueDc4eHgsIHU4IGFkZHJoLAorCQkJCSAgICAg IHU4IGFkZHJtLCB1OCBhZGRybCkKK3sKKwlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDAsIFNQ X0FVWF9BRERSXzdfMF9SRUcsIGFkZHJsKTsKKwlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDAs IFNQX0FVWF9BRERSXzE1XzhfUkVHLCBhZGRybSk7CisKKwkvKgorCSAqIERQIEFVWCBDSCBBZGRy ZXNzIFJlZ2lzdGVyICMyLCBvbmx5IHVwZGF0ZSBiaXRzWzM6MF0KKwkgKiBbNzo0XSBSRVNFUlZF RAorCSAqIFszOjBdIEFVWF9BRERSWzE5OjE2XSwgUmVnaXN0ZXIgY29udHJvbCBBVVggQ0ggYWRk cmVzcy4KKwkgKi8KKwlzcF9yZWdfdXBkYXRlX2JpdHMoYW54Nzh4eCwgVFhfUDAsIFNQX0FVWF9B RERSXzE5XzE2X1JFRywKKwkJCSAgIFNQX0FVWF9BRERSXzE5XzE2X01BU0ssIGFkZHJoKTsKK30K Kworc3RhdGljIGludCBzcF93YWl0X2F1eF9vcF9maW5pc2goc3RydWN0IGFueDc4eHggKmFueDc4 eHgpCit7CisJdTggZXJyY250OworCXU4IHZhbDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW54 Nzh4eC0+Y2xpZW50LT5kZXY7CisKKwllcnJjbnQgPSAxNTA7CisJd2hpbGUgKGVycmNudC0tKSB7 CisJCXNwX3JlZ19yZWFkKGFueDc4eHgsIFRYX1AwLCBTUF9EUF9BVVhfQ0hfQ1RSTDJfUkVHLCAm dmFsKTsKKwkJaWYgKCEodmFsICYgU1BfQVVYX0VOKSkKKwkJCWJyZWFrOworCQl1c2xlZXBfcmFu Z2UoMjAwMCwgNDAwMCk7CisJfQorCisJaWYgKCFlcnJjbnQpIHsKKwkJZGV2X2VycihkZXYsICJh dXggb3BlcmF0ZSBmYWlsZWQhXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXNwX3JlZ19yZWFk KGFueDc4eHgsIFRYX1AwLCBTUF9BVVhfQ0hfU1RBVFVTX1JFRywgJnZhbCk7CisJaWYgKHZhbCAm IFNQX0FVWF9TVEFUVVMpIHsKKwkJZGV2X2VycihkZXYsICJ3YWl0IGF1eCBvcGVyYXRpb24gc3Rh dHVzICUuMnhcbiIsIHZhbCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIHZvaWQgc3BfcHJpbnRfc3lzdGVtX3N0YXRlKHN0cnVjdCBhbng3OHh4ICphbng3OHh4 LAorCQkJCSAgZW51bSBzcF90eF9zdGF0ZSBzdGF0ZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYg PSAmYW54Nzh4eC0+Y2xpZW50LT5kZXY7CisKKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBTVEFU RV9XQUlUSU5HX0NBQkxFX1BMVUc6CisJCWRldl9kYmcoZGV2LCAiLS0gV0FJVElORyBDQUJMRSBQ TFVHIC0tXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBTVEFURV9TUF9JTklUSUFMSVpFRDoKKwkJZGV2 X2RiZyhkZXYsICItLSBTUCBJTklUSUFMSVpFRCAtLVxuIik7CisJCWJyZWFrOworCWNhc2UgU1RB VEVfU0lOS19DT05ORUNUSU9OOgorCQlkZXZfZGJnKGRldiwgIi0tIFNJTksgQ09OTkVDVElPTiAt LVxuIik7CisJCWJyZWFrOworCWNhc2UgU1RBVEVfUEFSU0VfRURJRDoKKwkJZGV2X2RiZyhkZXYs ICItLSBQQVJTRSBFRElEIC0tXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBTVEFURV9MSU5LX1RSQUlO SU5HOgorCQlkZXZfZGJnKGRldiwgIi0tIExJTksgVFJBSU5JTkcgLS1cbiIpOworCQlicmVhazsK KwljYXNlIFNUQVRFX1ZJREVPX09VVFBVVDoKKwkJZGV2X2RiZyhkZXYsICItLSBWSURFTyBPVVRQ VVQgLS1cbiIpOworCQlicmVhazsKKwljYXNlIFNUQVRFX0hEQ1BfQVVUSDoKKwkJZGV2X2RiZyhk ZXYsICItLSBIRENQIEFVVEggLS1cbiIpOworCQlicmVhazsKKwljYXNlIFNUQVRFX0FVRElPX09V VFBVVDoKKwkJZGV2X2RiZyhkZXYsICItLSBBVURJTyBPVVRQVVQgLS1cbiIpOworCQlicmVhazsK KwljYXNlIFNUQVRFX1BMQVlfQkFDSzoKKwkJZGV2X2RiZyhkZXYsICItLSBQTEFZIEJBQ0sgLS1c biIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGRldiwgIi0tIFVOS05PV04hIC0t XG4iKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBzcF9yZXNldF9hdXgoc3RydWN0 IGFueDc4eHggKmFueDc4eHgpCit7CisJc3BfcmVnX3NldF9iaXRzKGFueDc4eHgsIFRYX1AyLCBT UF9SRVNFVF9DVFJMMl9SRUcsIFNQX0FVWF9SU1QpOworCXNwX3JlZ19jbGVhcl9iaXRzKGFueDc4 eHgsIFRYX1AyLCBTUF9SRVNFVF9DVFJMMl9SRUcsIFNQX0FVWF9SU1QpOworfQorCitzdGF0aWMg dTggc3BfYXV4X2RwY2RyZWFkX2J5dGVzKHN0cnVjdCBhbng3OHh4ICphbng3OHh4LCB1OCBhZGRy aCwKKwkJCQl1OCBhZGRybSwgdTggYWRkcmwsIHU4IGNvdW50LCB1OCAqYnVmKQoreworCXU4IHZh bCwgdmFsMSwgaTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW54Nzh4eC0+Y2xpZW50LT5kZXY7 CisKKwlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDAsIFNQX0JVRl9EQVRBX0NPVU5UX1JFRywg U1BfQlVGX0NMUik7CisKKwlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX0FVWF9D SF9DVFJMMV9SRUcsCisJCSAgICAgKChjb3VudCAtIDEpIDw8IFNQX0FVWF9MRU5HVEhfU0hJRlQp IHwgMHgwOSk7CisJc3Bfd3JpdGVfZHBjZF9hZGRyKGFueDc4eHgsIGFkZHJoLCBhZGRybSwgYWRk cmwpOworCXNwX3JlZ19zZXRfYml0cyhhbng3OHh4LCBUWF9QMCwgU1BfRFBfQVVYX0NIX0NUUkwy X1JFRywgU1BfQVVYX0VOKTsKKwl1c2xlZXBfcmFuZ2UoMjAwMCwgNDAwMCk7CisKKwlpZiAoc3Bf d2FpdF9hdXhfb3BfZmluaXNoKGFueDc4eHgpKSB7CisJCWRldl9lcnIoZGV2LCAiYXV4IHJlYWQg ZmFpbGVkXG4iKTsKKwkJc3BfcmVnX3JlYWQoYW54Nzh4eCwgVFhfUDIsIFNQX0RQX0lOVF9TVEFU VVNfUkVHLCAmdmFsKTsKKwkJc3BfcmVnX3JlYWQoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX0RFQlVH MV9SRUcsICZ2YWwxKTsKKwkJaWYgKCEodmFsMSAmIFNQX1BPTExJTkdfRU4pIHx8ICh2YWwgJiBT UF9QT0xMSU5HX0VSUikpCisJCQlzcF9yZXNldF9hdXgoYW54Nzh4eCk7CisJCXJldHVybiAtMTsK Kwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlzcF9yZWdfcmVhZChhbng3 OHh4LCBUWF9QMCwgU1BfRFBfQlVGX0RBVEEwX1JFRyArIGksICZ2YWwpOworCQlidWZbaV0gPSB2 YWw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3BfYXV4X2RwY2R3cml0ZV9i eXRlcyhzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCwgdTggYWRkcmgsCisJCQkJICB1OCBhZGRybSwg dTggYWRkcmwsIHU4IGNvdW50LCB1OCAqYnVmKQoreworCWludCBpOworCisJc3BfcmVnX3dyaXRl KGFueDc4eHgsIFRYX1AwLCBTUF9EUF9BVVhfQ0hfQ1RSTDFfUkVHLAorCQkgICAgICgoY291bnQg LSAxKSA8PCBTUF9BVVhfTEVOR1RIX1NISUZUKSB8IDB4MDgpOworCXNwX3dyaXRlX2RwY2RfYWRk cihhbng3OHh4LCBhZGRyaCwgYWRkcm0sIGFkZHJsKTsKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQg JiYgaSA8IDE2OyBpKyspCisJCXNwX3JlZ193cml0ZShhbng3OHh4LCBUWF9QMCwgU1BfRFBfQlVG X0RBVEEwX1JFRyArIGksIGJ1ZltpXSk7CisKKwlzcF9yZWdfc2V0X2JpdHMoYW54Nzh4eCwgVFhf UDAsIFNQX0RQX0FVWF9DSF9DVFJMMl9SRUcsIFNQX0FVWF9FTik7CisJcmV0dXJuIHNwX3dhaXRf YXV4X29wX2ZpbmlzaChhbng3OHh4KTsKK30KKworc3RhdGljIHZvaWQgc3BfYmxvY2tfcG93ZXJf Y3RybChzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCwKKwkJCQllbnVtIHNwX3R4X3Bvd2VyX2Jsb2Nr IHNwX3R4X3BkX2Jsb2NrLAorCQkJCWJvb2wgcG93ZXIpCit7CisJaWYgKHBvd2VyKQorCQlzcF9y ZWdfY2xlYXJfYml0cyhhbng3OHh4LCBUWF9QMiwgU1BfUE9XRVJET1dOX0NUUkxfUkVHLAorCQkJ CSAgc3BfdHhfcGRfYmxvY2spOworCWVsc2UKKwkJc3BfcmVnX3NldF9iaXRzKGFueDc4eHgsIFRY X1AyLCBTUF9QT1dFUkRPV05fQ1RSTF9SRUcsCisJCQkJc3BfdHhfcGRfYmxvY2spOworCisJZGV2 X2RiZygmYW54Nzh4eC0+Y2xpZW50LT5kZXYsCisJCSJzcF90eF9wb3dlcl9vbjogJS4yeFxuIiwg c3BfdHhfcGRfYmxvY2spOworfQorCitzdGF0aWMgdm9pZCBzcF92YXJpYWJsZV9pbml0KHZvaWQp Cit7CisJc3AuaGRjcF9lbmFibGVkID0gZmFsc2U7CisKKwlzcC50eF9zeXN0ZW1fc3RhdGUgPSBT VEFURV9XQUlUSU5HX0NBQkxFX1BMVUc7CisKKwlzcC5yZWFkX2VkaWRfZmxhZyA9IGZhbHNlOwor CisJbWVtc2V0KHNwLmVkaWRfYmxvY2tzLCAwLCBzaXplb2YoKnNwLmVkaWRfYmxvY2tzKSk7CisK KwlzcC50eF9sdF9zdGF0ZSA9IExUX0lOSVQ7CisJc3AuaGRjcF9zdGF0ZSA9IEhEQ1BfQ0FQQUJM RV9DSEVDSzsKKwlzcC5yZXBlYXRlcl9zdGF0ZSA9IEhEQ1BfRE9ORTsKKwlzcC50eF92b19zdGF0 ZSA9IFZPX1dBSVRfVklERU9fU1RBQkxFOworCXNwLnR4X2FvX3N0YXRlID0gQU9fSU5JVDsKKwlz cC5jaGFuZ2VkX2JhbmR3aWR0aCA9IFNQX0xJTktfNVA0RzsKKworCXNwLmhkY3BfZXJyb3JfY291 bnQgPSAwOworCXNwLmhkY3BfZmFpbF9jb3VudCA9IDA7CisJc3AuYXVkaW9fc3RhYmxlX2NvdW50 ID0gMDsKKworCXNwLnR4X3Rlc3RfbHQgPSBmYWxzZTsKKwlzcC50eF90ZXN0X2J3ID0gMDsKKwlz cC50eF90ZXN0X2VkaWQgPSBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgc3BfaGRtaV90bWRzX3Bo eV9pbml0aWFsaXphdGlvbihzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCkKK3sKKwlzcF9yZWdfd3Jp dGUoYW54Nzh4eCwgUlhfUDAsIFNQX1RNRFNfQ1RSTF9CQVNFICsgMSwgMHg5MCk7CisJc3BfcmVn X3dyaXRlKGFueDc4eHgsIFJYX1AwLCBTUF9UTURTX0NUUkxfQkFTRSArIDIsIDB4YTkpOworCXNw X3JlZ193cml0ZShhbng3OHh4LCBSWF9QMCwgU1BfVE1EU19DVFJMX0JBU0UgKyA2LCAweDkyKTsK KwlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgUlhfUDAsIFNQX1RNRFNfQ1RSTF9CQVNFICsgNywgMHg4 MCk7CisJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFJYX1AwLCBTUF9UTURTX0NUUkxfQkFTRSArIDIw LCAweGYyKTsKK30KKworc3RhdGljIHZvaWQgc3BfaGRtaV9pbml0aWFsaXphdGlvbihzdHJ1Y3Qg YW54Nzh4eCAqYW54Nzh4eCkKK3sKKwlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgUlhfUDAsIFNQX0hE TUlfTVVURV9DVFJMX1JFRywgU1BfQVVEX01VVEUgfAorCQkgICAgIFNQX1ZJRF9NVVRFKTsKKwlz cF9yZWdfc2V0X2JpdHMoYW54Nzh4eCwgUlhfUDAsIFNQX0NISVBfQ1RSTF9SRUcsIFNQX01BTl9I RE1JNVZfREVUIHwKKwkJCVNQX1BMTExPQ0tfQ0tEVF9FTiB8IFNQX0RJR0lUQUxfQ0tEVF9FTik7 CisKKwlzcF9yZWdfc2V0X2JpdHMoYW54Nzh4eCwgUlhfUDAsIFNQX1NPRlRXQVJFX1JFU0VUMV9S RUcsCisJCQlTUF9IRENQX01BTl9SU1QgfCBTUF9TV19NQU5fUlNUIHwgU1BfVE1EU19SU1QgfAor CQkJU1BfVklERU9fUlNUKTsKKwlzcF9yZWdfY2xlYXJfYml0cyhhbng3OHh4LCBSWF9QMCwgU1Bf U09GVFdBUkVfUkVTRVQxX1JFRywKKwkJCSAgU1BfSERDUF9NQU5fUlNUIHwgU1BfU1dfTUFOX1JT VCB8IFNQX1RNRFNfUlNUIHwKKwkJCSAgU1BfVklERU9fUlNUKTsKKworCS8qIFN5bmMgZGV0ZWN0 IGNoYW5nZSwgR1Agc2V0IG11dGUgKi8KKwlzcF9yZWdfc2V0X2JpdHMoYW54Nzh4eCwgUlhfUDAs IFNQX0FVRF9FWENFUFRJT05fRU5BQkxFX0JBU0UgKyAxLAorCQkJQklUKDUpIHwgQklUKDYpKTsK KwlzcF9yZWdfc2V0X2JpdHMoYW54Nzh4eCwgUlhfUDAsIFNQX0FVRF9FWENFUFRJT05fRU5BQkxF X0JBU0UgKyAzLAorCQkJU1BfQUVDX0VOMjEpOworCXNwX3JlZ19zZXRfYml0cyhhbng3OHh4LCBS WF9QMCwgU1BfQVVEVklEX0NUUkxfUkVHLCBTUF9BVkNfRU4gfAorCQkJU1BfQUFDX09FIHwgU1Bf QUFDX0VOKTsKKworCXNwX3JlZ19jbGVhcl9iaXRzKGFueDc4eHgsIFJYX1AwLCBTUF9TWVNURU1f UE9XRVJfRE9XTjFfUkVHLAorCQkJICBTUF9QV0ROX0NUUkwpOworCisJc3BfcmVnX3NldF9iaXRz KGFueDc4eHgsIFJYX1AwLCBTUF9WSURfREFUQV9SQU5HRV9DVFJMX1JFRywKKwkJCVNQX1IyWV9J TlBVVF9MSU1JVCk7CisJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFJYX1AwLCBTUF9UTURTX0NUUkxf QkFTRSArIDIyLCAweGM0KTsKKwlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgUlhfUDAsIFNQX1RNRFNf Q1RSTF9CQVNFICsgMjMsIDB4MTgpOworCisJLyogRW5hYmxlIEREQyBzdHJldGNoICovCisJc3Bf cmVnX3dyaXRlKGFueDc4eHgsIFRYX1AwLCBTUF9EUF9FWFRSQV9JMkNfREVWX0FERFJfUkVHLAor CQkgICAgIFNQX0kyQ19FWFRSQV9BRERSKTsKKworCXNwX2hkbWlfdG1kc19waHlfaW5pdGlhbGl6 YXRpb24oYW54Nzh4eCk7CisJc3BfaGRtaV9zZXRfaHBkKGFueDc4eHgsIGZhbHNlKTsKKwlzcF9o ZG1pX3NldF90ZXJtaW5hdGlvbihhbng3OHh4LCBmYWxzZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNw X3h0YWxfY2xrX3NlbChzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCkKK3sKKwl1OCB2YWw7CisKKwlz cF9yZWdfdXBkYXRlX2JpdHMoYW54Nzh4eCwgVFhfUDIsIFNQX0FOQUxPR19ERUJVRzJfUkVHLAor CQkJICAgU1BfWFRBTF9GUlEgfCBTUF9GT1JDRV9TV19PRkZfQllQQVNTLAorCQkJICAgU1BfWFRB TF9GUlFfMjdNKTsKKworCXNwX3JlZ193cml0ZShhbng3OHh4LCBUWF9QMCwgU1BfRFBfQVVYX0NI X0NUUkwzX1JFRywKKwkJICAgICBYVEFMX0NMSyAmIFNQX1dBSVRfQ09VTlRFUl83XzBfTUFTSyk7 CisJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFRYX1AwLCBTUF9EUF9BVVhfQ0hfQ1RSTDRfUkVHLAor CQkgICAgICgoWFRBTF9DTEsgJiAweGZmMDApID4+IDIpIHwgKFhUQUxfQ0xLIC8gMTApKTsKKwor CXNwX3JlZ193cml0ZShhbng3OHh4LCBUWF9QMCwgU1BfSTJDX0dFTl8xMFVTX1RJTUVSMF9SRUcs CisJCSAgICAgWFRBTF9DTEsgJiAweGZmKTsKKwlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDAs IFNQX0kyQ19HRU5fMTBVU19USU1FUjFfUkVHLAorCQkgICAgIChYVEFMX0NMSyAmIDB4ZmYwMCkg Pj4gOCk7CisJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFRYX1AwLCBTUF9BVVhfTUlTQ19DVFJMX1JF RywKKwkJICAgICBYVEFMX0NMSyAvIDEwIC0gMSk7CisKKwlzcF9yZWdfcmVhZChhbng3OHh4LCBS WF9QMCwgU1BfSERNSV9VU19USU1FUl9DVFJMX1JFRywgJnZhbCk7CisJc3BfcmVnX3dyaXRlKGFu eDc4eHgsIFJYX1AwLCBTUF9IRE1JX1VTX1RJTUVSX0NUUkxfUkVHLAorCQkgICAgICh2YWwgJiBT UF9NU19USU1FUl9NQVJHSU5fMTBfOF9NQVNLKSB8CisJCSAgICAgKCgoKFhUQUxfQ0xLIC8gMTAp ID4+IDEpIC0gMikgPDwgMykpOworfQorCit2b2lkIHNwX3R4X2luaXRpYWxpemF0aW9uKHN0cnVj dCBhbng3OHh4ICphbng3OHh4KQoreworCS8qIHNldCB0ZXJtaW5hbCByZXNpc3RvciB0byA1MCBv aG0gKi8KKwlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX0FVWF9DSF9DVFJMMl9S RUcsIDB4MzApOworCS8qIGVuYWJsZSBhdXggZG91YmxlIGRpZmYgb3V0cHV0ICovCisJc3BfcmVn X3NldF9iaXRzKGFueDc4eHgsIFRYX1AwLCBTUF9EUF9BVVhfQ0hfQ1RSTDJfUkVHLCAweDA4KTsK KworCWlmICghc3BfaGRjcF9yZXBlYXRlcl9tb2RlKGFueDc4eHgpKSB7CisJCXNwX3JlZ19jbGVh cl9iaXRzKGFueDc4eHgsIFRYX1AwLCBTUF9EUF9IRENQX0NUUkxfUkVHLAorCQkJCSAgU1BfQVVU T19FTiB8IFNQX0FVVE9fU1RBUlQpOworCQlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDAsIFNQ X09UUF9LRVlfUFJPVEVDVDFfUkVHLAorCQkJICAgICBTUF9PVFBfUFNXMSk7CisJCXNwX3JlZ193 cml0ZShhbng3OHh4LCBUWF9QMCwgU1BfT1RQX0tFWV9QUk9URUNUMl9SRUcsCisJCQkgICAgIFNQ X09UUF9QU1cyKTsKKwkJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFRYX1AwLCBTUF9PVFBfS0VZX1BS T1RFQ1QzX1JFRywKKwkJCSAgICAgU1BfT1RQX1BTVzMpOworCQlzcF9yZWdfc2V0X2JpdHMoYW54 Nzh4eCwgVFhfUDAsIFNQX0hEQ1BfS0VZX0NPTU1BTkRfUkVHLAorCQkJCVNQX0RJU0FCTEVfU1lO Q19IRENQKTsKKwl9CisKKwlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDIsIFNQX1ZJRF9DVFJM OF9SRUcsIFNQX1ZJRF9WUkVTX1RIKTsKKworCS8qCisJICogRFAgSERDUCBhdXRvIGF1dGhlbnRp Y2F0aW9uIHdhaSB0aW1lciAod2hlbiBkb3duc3RyZWFtIHN0YXJ0cyB0bworCSAqIGF1dGgsIERQ IHNpZGUgd2lsbCB3YWl0IGZvciB0aGlzIHBlcmlvZCB0aGVuIGRvIGF1dGggYXV0b21hdGljYWxs eSkKKwkgKi8KKwlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDAsIFNQX0hEQ1BfQVVUT19USU1F Ul9SRUcsIDB4MDApOworCisJc3BfcmVnX3NldF9iaXRzKGFueDc4eHgsIFRYX1AwLCBTUF9EUF9I RENQX0NUUkxfUkVHLCBTUF9MSU5LX1BPTExJTkcpOworCisJc3BfcmVnX3NldF9iaXRzKGFueDc4 eHgsIFRYX1AwLCBTUF9EUF9MSU5LX0RFQlVHX0NUUkxfUkVHLAorCQkJU1BfTV9WSURfREVCVUcp OworCXNwX3JlZ19zZXRfYml0cyhhbng3OHh4LCBUWF9QMiwgU1BfQU5BTE9HX0RFQlVHMl9SRUcs CisJCQlTUF9QT1dFUk9OX1RJTUVfMVA1TVMpOworCisJc3BfeHRhbF9jbGtfc2VsKGFueDc4eHgp OworCXNwX3JlZ193cml0ZShhbng3OHh4LCBUWF9QMCwgU1BfQVVYX0RFRkVSX0NUUkxfUkVHLAor CQkgICAgIFNQX0RFRkVSX0NUUkxfRU4gfCAweDBjKTsKKworCXNwX3JlZ19zZXRfYml0cyhhbng3 OHh4LCBUWF9QMCwgU1BfRFBfUE9MTElOR19DVFJMX1JFRywKKwkJCVNQX0FVVE9fUE9MTElOR19E SVNBQkxFKTsKKwkvKgorCSAqIFNob3J0IHRoZSBsaW5rIGludGVncml0eSBjaGVjayB0aW1lciB0 byBzcGVlZCB1cCBic3RhdHVzCisJICogcG9sbGluZyBmb3IgSERDUCBDVFMgaXRlbSAxQS0wNwor CSAqLworCXNwX3JlZ193cml0ZShhbng3OHh4LCBUWF9QMCwgU1BfSERDUF9MSU5LX0NIRUNLX1RJ TUVSX1JFRywgMHgxZCk7CisJc3BfcmVnX3NldF9iaXRzKGFueDc4eHgsIFRYX1AwLCBTUF9EUF9N SVNDX0NUUkxfUkVHLAorCQkJU1BfRVFfVFJBSU5JTkdfTE9PUCk7CisKKwkvKiBwb3dlciBkb3du IHRoZSBtYWluIGxpbmsgYnkgZGVmYXVsdCAqLworCXNwX3JlZ19zZXRfYml0cyhhbng3OHh4LCBU WF9QMCwgU1BfRFBfQU5BTE9HX1BPV0VSX0RPV05fUkVHLAorCQkJU1BfQ0gwX1BEKTsKKworCXNw X3JlZ193cml0ZShhbng3OHh4LCBUWF9QMiwgU1BfSU5UX0NUUkxfUkVHLCAweDAxKTsKKworCXNw X2xpbmtfcGh5X2luaXRpYWxpemF0aW9uKGFueDc4eHgpOworCXNwX2dlbl9tX2Nsa193aXRoX2Rv d25zcHJlYWRpbmcoYW54Nzh4eCk7CisKKwlzcC5kb3duX3NhbXBsZV9lbiA9IGZhbHNlOworfQor CisvKgorICogQ2hlY2sgaWYgaXQgaXMgQU5BTE9HSVggZG9uZ2xlLgorICovCitzdGF0aWMgY29u c3QgdTggYW54X291aVszXSA9IHsweDAwLCAweDIyLCAweGI5fTsKKworc3RhdGljIGJvb2wgaXNf YW54X2RvbmdsZShzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCkKK3sKKwl1OCBidWZbM107CisKKwkv KiBEUENEIDQwMCBzaG93IEFOWC1kb25nbGUgKi8KKwlzcF9hdXhfZHBjZHJlYWRfYnl0ZXMoYW54 Nzh4eCwgMHgwMCwgMHgwNCwgMHgwMCwgMywgYnVmKTsKKwlpZiAoIW1lbWNtcChidWYsIGFueF9v dWksIDMpKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qIDB4MDUwMH4weDA1MDI6IEJSQU5DSF9JRUVF X09VSSAqLworCXNwX2F1eF9kcGNkcmVhZF9ieXRlcyhhbng3OHh4LCAweDAwLCAweDA1LCAweDAw LCAzLCBidWYpOworCWlmICghbWVtY21wKGJ1ZiwgYW54X291aSwgMykpCisJCXJldHVybiB0cnVl OworCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgY29uc3QgdTggYW54Nzc1MFs0XSA9IHsw eDM3LCAweDM3LCAweDM1LCAweDMwfTsKKworc3RhdGljIHU4IHNwX2dldF9yeF9idyhzdHJ1Y3Qg YW54Nzh4eCAqYW54Nzh4eCkKK3sKKwl1OCBiYW5kd2lkdGgsIG1heF9saW5rX3JhdGU7CisJdTgg YnVmWzRdOworCisJYmFuZHdpZHRoID0gMDsKKwkvKgorCSAqIFdoZW4gQU5YIGRvbmdsZSBpcyBj b25uZWN0ZWQsIGlmIENISVBfSUQ9MHg3NzUwIHRoZSBiYW5kd2lkdGggaXMKKwkgKiA2Ljc1RyBi ZWNhdXNlIEFOWDc3NTAgRFBDRCAweDA1MnggaXMgbm90IGF2YWlsYWJsZS4KKwkgKi8KKwlpZiAo aXNfYW54X2RvbmdsZShhbng3OHh4KSkgeworCQlzcF9hdXhfZHBjZHJlYWRfYnl0ZXMoYW54Nzh4 eCwgMHgwMCwgMHgwNSwgMHgwMywgNCwgYnVmKTsKKwkJaWYgKCFtZW1jbXAoYnVmLCBhbng3NzUw LCBzaXplb2YoYW54Nzc1MCkpKQorCQkJYmFuZHdpZHRoID0gU1BfTElOS182UDc1RzsKKwkJZWxz ZQorCQkJc3BfYXV4X2RwY2RyZWFkX2J5dGVzKGFueDc4eHgsIDB4MDAsIDB4MDUsIDB4MjEsCisJ CQkJCSAgICAgIDEsICZiYW5kd2lkdGgpOworCX0KKworCXNwX2F1eF9kcGNkcmVhZF9ieXRlcyhh bng3OHh4LCAweDAwLCAweDAwLCBTUF9EUENEX01BWF9MSU5LX1JBVEUsCisJCQkgICAgICAxLCAm bWF4X2xpbmtfcmF0ZSk7CisJaWYgKGJhbmR3aWR0aCA8IG1heF9saW5rX3JhdGUpCisJCWJhbmR3 aWR0aCA9IG1heF9saW5rX3JhdGU7CisKKwlyZXR1cm4gYmFuZHdpZHRoOworfQorCitzdGF0aWMg Ym9vbCBzcF9nZXRfZHBfY29ubmVjdGlvbihzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCkKK3sKKwl1 OCB2YWw7CisKKwlpZiAoc3BfYXV4X2RwY2RyZWFkX2J5dGVzKGFueDc4eHgsIDB4MDAsIDB4MDIs IFNQX0RQQ0RfU0lOS19DT1VOVCwgMSwKKwkJCQkgICZ2YWwpKQorCQlyZXR1cm4gZmFsc2U7CisK KwlpZiAoISh2YWwgJiAweDFmKSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKHNwX2F1eF9kcGNk cmVhZF9ieXRlcyhhbng3OHh4LCAweDAwLCAweDAwLCAweDA0LCAxLCAmdmFsKSkKKwkJcmV0dXJu IGZhbHNlOworCisJaWYgKHZhbCAmIDB4MjApIHsKKwkJc3BfYXV4X2RwY2RyZWFkX2J5dGVzKGFu eDc4eHgsIDB4MDAsIDB4MDYsIDB4MDAsIDEsICZ2YWwpOworCQkvKgorCQkgKiBCaXQgNSA9IFNF VF9ETl9ERVZJQ0VfRFBfUFdSXzVWCisJCSAqIEJpdCA2ID0gU0VUX0ROX0RFVklDRV9EUF9QV1Jf MTJWCisJCSAqIEJpdCA3ID0gU0VUX0ROX0RFVklDRV9EUF9QV1JfMThWCisJCSAqLworCQl2YWwg Jj0gMHgxZjsKKwkJdmFsIHw9IDB4MjA7CisJCXNwX2F1eF9kcGNkd3JpdGVfYnl0ZXMoYW54Nzh4 eCwgMHgwMCwgMHgwNiwgMHgwMCwgMSwgJnZhbCk7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisK Ky8qKioqKioqKioqKioqKioqKipzdGFydCBFRElEIHByb2Nlc3MqKioqKioqKioqKioqKioqKioq Ki8KK3N0YXRpYyB2b2lkIHNwX2VuYWJsZV92aWRlb19pbnB1dChzdHJ1Y3QgYW54Nzh4eCAqYW54 Nzh4eCwgYm9vbCBlbmFibGUpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmFueDc4eHgtPmNs aWVudC0+ZGV2OworCXU4IHZhbDsKKworCXNwX3JlZ19yZWFkKGFueDc4eHgsIFRYX1AyLCBTUF9W SURfQ1RSTDFfUkVHLCAmdmFsKTsKKwlpZiAoZW5hYmxlKSB7CisJCXNwX3JlZ19zZXRfYml0cyhh bng3OHh4LCBUWF9QMiwgU1BfVklEX0NUUkwxX1JFRywgU1BfVklERU9fRU4pOworCQlkZXZfZGJn KGRldiwgIlNsaW1wb3J0IHZpZGVvIGlzIGVuYWJsZWQhXG4iKTsKKwl9IGVsc2UgeworCQlzcF9y ZWdfY2xlYXJfYml0cyhhbng3OHh4LCBUWF9QMiwgU1BfVklEX0NUUkwxX1JFRywKKwkJCQkgIFNQ X1ZJREVPX0VOKTsKKwkJZGV2X2RiZyhkZXYsICJTbGltcG9ydCB2aWRlbyBpcyBkaXNhYmxlZCFc biIpOworCX0KK30KKworc3RhdGljIHU4IHNwX2dldF9lZGlkX2JhbmR3aWR0aCh1OCAqZGF0YSkK K3sKKwl1MTYgcGNsazsKKworCXBjbGsgPSAoKHUxNilkYXRhWzFdIDw8IDgpIHwgKCh1MTYpZGF0 YVswXSAmIDB4ZmYpOworCWlmIChwY2xrIDw9IDUzMDApCisJCXJldHVybiBTUF9MSU5LXzFQNjJH OworCWVsc2UgaWYgKHBjbGsgPD0gODkwMCkKKwkJcmV0dXJuIFNQX0xJTktfMlA3RzsKKwllbHNl IGlmIChwY2xrIDw9IDE4MDAwKQorCQlyZXR1cm4gU1BfTElOS181UDRHOworCWVsc2UKKwkJcmV0 dXJuIFNQX0xJTktfNlA3NUc7Cit9CisKK3N0YXRpYyB1OCBzcF9wYXJzZV9lZGlkX3RvX2dldF9i YW5kd2lkdGgoc3RydWN0IGFueDc4eHggKmFueDc4eHgpCit7CisJaW50IGk7CisJdTggYmFuZHdp ZHRoLCB0ZW1wOworCisJYmFuZHdpZHRoID0gU1BfTElOS18xUDYyRzsKKwlmb3IgKGkgPSAwOyBp IDwgNDsgaSsrKSB7CisJCWlmIChzcC5lZGlkX2Jsb2Nrc1sweDM2ICsgMHgxMiAqIGldID09IDAp CisJCQlicmVhazsKKwkJdGVtcCA9IHNwX2dldF9lZGlkX2JhbmR3aWR0aChzcC5lZGlkX2Jsb2Nr cyArIDB4MzYgKyAweDEyICogaSk7CisJCWRldl9kYmcoJmFueDc4eHgtPmNsaWVudC0+ZGV2LCAi YmFuZHdpZHRoIHZpYSBFRElEIDogJXhcbiIsCisJCQl0ZW1wKTsKKwkJaWYgKGJhbmR3aWR0aCA8 IHRlbXApCisJCQliYW5kd2lkdGggPSB0ZW1wOworCQlpZiAoYmFuZHdpZHRoID49IFNQX0xJTktf NlA3NUcpCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gYmFuZHdpZHRoOworfQorCit1OCBzcF9n ZXRfbGlua19iYW5kd2lkdGgoc3RydWN0IGFueDc4eHggKmFueDc4eHgpCit7CisJdTggYmFuZHdp ZHRoLCBtYXhfYmFuZHdpZHRoOworCisJYmFuZHdpZHRoID0gc3BfZ2V0X3J4X2J3KGFueDc4eHgp OworCW1heF9iYW5kd2lkdGggPSBzcF9wYXJzZV9lZGlkX3RvX2dldF9iYW5kd2lkdGgoYW54Nzh4 eCk7CisJaWYgKGJhbmR3aWR0aCA+IG1heF9iYW5kd2lkdGgpCisJCXJldHVybiBtYXhfYmFuZHdp ZHRoOworCisJcmV0dXJuIGJhbmR3aWR0aDsKK30KKworc3RhdGljIGludCBzcF90eF9hdXhfd3Io c3RydWN0IGFueDc4eHggKmFueDc4eHgsIHU4IG9mZnNldCkKK3sKKwlzcF9yZWdfd3JpdGUoYW54 Nzh4eCwgVFhfUDAsIFNQX0RQX0JVRl9EQVRBMF9SRUcsIG9mZnNldCk7CisJc3BfcmVnX3dyaXRl KGFueDc4eHgsIFRYX1AwLCBTUF9EUF9BVVhfQ0hfQ1RSTDFfUkVHLCAweDA0KTsKKwlzcF9yZWdf c2V0X2JpdHMoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX0FVWF9DSF9DVFJMMl9SRUcsIFNQX0FVWF9F Tik7CisKKwlyZXR1cm4gc3Bfd2FpdF9hdXhfb3BfZmluaXNoKGFueDc4eHgpOworfQorCitzdGF0 aWMgaW50IHNwX3R4X2F1eF9yZChzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCwgdTggbGVuKQorewor CXNwX3JlZ193cml0ZShhbng3OHh4LCBUWF9QMCwgU1BfRFBfQVVYX0NIX0NUUkwxX1JFRywgbGVu KTsKKwlzcF9yZWdfc2V0X2JpdHMoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX0FVWF9DSF9DVFJMMl9S RUcsIFNQX0FVWF9FTik7CisKKwlyZXR1cm4gc3Bfd2FpdF9hdXhfb3BfZmluaXNoKGFueDc4eHgp OworfQorCitzdGF0aWMgdTggc3BfdHhfZ2V0X2VkaWRfYmxvY2soc3RydWN0IGFueDc4eHggKmFu eDc4eHgpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmFueDc4eHgtPmNsaWVudC0+ZGV2Owor CXU4IHZhbDsKKworCXNwX3R4X2F1eF93cihhbng3OHh4LCAweDdlKTsKKwlzcF90eF9hdXhfcmQo YW54Nzh4eCwgMHgwMSk7CisJc3BfcmVnX3JlYWQoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX0JVRl9E QVRBMF9SRUcsICZ2YWwpOworCWRldl9kYmcoZGV2LCAiRURJRCBCbG9jayA9ICVkXG4iLCB2YWwg KyAxKTsKKworCWlmICh2YWwgPiAzKQorCQl2YWwgPSAxOworCXJldHVybiB2YWw7Cit9CisKK3N0 YXRpYyBpbnQgc3BfZWRpZF9yZWFkKHN0cnVjdCBhbng3OHh4ICphbng3OHh4LCB1OCBvZmZzZXQs CisJCQl1OCAqYnVmKQoreworCXU4IGRhdGFfY250LCBlcnJjbnQ7CisJdTggdmFsLCByZXQ7CisK KwlzcF90eF9hdXhfd3IoYW54Nzh4eCwgb2Zmc2V0KTsKKwlzcF90eF9hdXhfcmQoYW54Nzh4eCwg MHhmNSk7CisJZGF0YV9jbnQgPSAwOworCWVycmNudCA9IDA7CisKKwl3aGlsZSAoZGF0YV9jbnQg PCAxNikgeworCQlzcF9yZWdfcmVhZChhbng3OHh4LCBUWF9QMCwgU1BfQlVGX0RBVEFfQ09VTlRf UkVHLCAmdmFsKTsKKworCQlpZiAodmFsICYgMHgxZikgeworCQkJZGF0YV9jbnQgPSBkYXRhX2Nu dCArICh2YWwgJiAweDFmKTsKKwkJCWRvIHsKKwkJCQlzcF9yZWdfcmVhZChhbng3OHh4LCBUWF9Q MCwKKwkJCQkJICAgIFNQX0RQX0JVRl9EQVRBMF9SRUcgKyB2YWwgLSAxLAorCQkJCQkgICAgJmJ1 Zlt2YWwgLSAxXSk7CisJCQl9IHdoaWxlICgtLXZhbCk7CisJCX0gZWxzZSB7CisJCQlpZiAoZXJy Y250KysgPD0gMikgeworCQkJCXNwX3Jlc2V0X2F1eChhbng3OHh4KTsKKwkJCQl2YWwgPSAweDA1 IHwgKCgweDBmIC0gZGF0YV9jbnQpIDw8IDQpOworCQkJCXNwX3R4X2F1eF9yZChhbng3OHh4LCB2 YWwpOworCQkJfSBlbHNlIHsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCX0KKwl9CisJc3BfcmVn X3dyaXRlKGFueDc4eHgsIFRYX1AwLCBTUF9EUF9BVVhfQ0hfQ1RSTDFfUkVHLCAweDAxKTsKKwlz cF9yZWdfc2V0X2JpdHMoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX0FVWF9DSF9DVFJMMl9SRUcsCisJ CQlTUF9BRERSX09OTFkgfCBTUF9BVVhfRU4pOworCXJldCA9IHNwX3dhaXRfYXV4X29wX2Zpbmlz aChhbng3OHh4KTsKKwlzcF9hZGRyb25seV9zZXQoYW54Nzh4eCwgZmFsc2UpOworCisJcmV0dXJu IHJldDsKK30KKworc3RhdGljIHZvaWQgc3BfdHhfZWRpZF9yZWFkX2luaXRpYWwoc3RydWN0IGFu eDc4eHggKmFueDc4eHgpCit7CisJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFRYX1AwLCBTUF9BVVhf QUREUl83XzBfUkVHLCAweDUwKTsKKwlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDAsIFNQX0FV WF9BRERSXzE1XzhfUkVHLCAwKTsKKwlzcF9yZWdfY2xlYXJfYml0cyhhbng3OHh4LCBUWF9QMCwg U1BfQVVYX0FERFJfMTlfMTZfUkVHLCAweGYwKTsKK30KKworc3RhdGljIGludCBzcF9zZWdfZWRp ZF9yZWFkKHN0cnVjdCBhbng3OHh4ICphbng3OHh4LAorCQkJICAgIHU4IHNlZ21lbnQsIHU4IG9m ZnNldCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW54Nzh4eC0+Y2xpZW50LT5kZXY7CisJ dTggdmFsLCBlcnJjbnQ7CisJaW50IGk7CisKKwlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDAs IFNQX0RQX0FVWF9DSF9DVFJMMV9SRUcsIDB4MDQpOworCXNwX3JlZ193cml0ZShhbng3OHh4LCBU WF9QMCwgU1BfQVVYX0FERFJfN18wX1JFRywgMHgzMCk7CisKKwlzcF9yZWdfc2V0X2JpdHMoYW54 Nzh4eCwgVFhfUDAsIFNQX0RQX0FVWF9DSF9DVFJMMl9SRUcsCisJCQlTUF9BRERSX09OTFkgfCBT UF9BVVhfRU4pOworCisJaWYgKHNwX3dhaXRfYXV4X29wX2ZpbmlzaChhbng3OHh4KSkKKwkJcmV0 dXJuIC0xOworCisJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFRYX1AwLCBTUF9EUF9CVUZfREFUQTBf UkVHLCBzZWdtZW50KTsKKwlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX0FVWF9D SF9DVFJMMV9SRUcsIDB4MDQpOworCisJc3BfcmVnX3VwZGF0ZV9iaXRzKGFueDc4eHgsIFRYX1Aw LCBTUF9EUF9BVVhfQ0hfQ1RSTDJfUkVHLAorCQkJICAgU1BfQUREUl9PTkxZIHwgU1BfQVVYX0VO LCBTUF9BVVhfRU4pOworCisJZXJyY250ID0gMTA7CisJd2hpbGUgKGVycmNudC0tKSB7CisJCXNw X3JlZ19yZWFkKGFueDc4eHgsIFRYX1AwLCBTUF9EUF9BVVhfQ0hfQ1RSTDJfUkVHLCAmdmFsKTsK KwkJaWYgKCEodmFsICYgU1BfQVVYX0VOKSkKKwkJCWJyZWFrOworCQl1c2xlZXBfcmFuZ2UoMTAw MCwgMjAwMCk7CisJfQorCisJaWYgKCFlcnJjbnQpIHsKKwkJZGV2X2VycihkZXYsICJyZWFkIFNQ X0RQX0FVWF9DSF9DVFJMMl9SRUcgZmFpbGVkLlxuIik7CisJCXNwX3Jlc2V0X2F1eChhbng3OHh4 KTsKKwkJcmV0dXJuIC0xOworCX0KKworCXNwX3JlZ193cml0ZShhbng3OHh4LCBUWF9QMCwgU1Bf QVVYX0FERFJfN18wX1JFRywgMHg1MCk7CisJc3BfdHhfYXV4X3dyKGFueDc4eHgsIG9mZnNldCk7 CisJc3BfdHhfYXV4X3JkKGFueDc4eHgsIDB4ZjUpOworCisJZm9yIChpID0gMDsgaSA8IDE2OyBp KyspIHsKKwkJZXJyY250ID0gMTA7CisJCXdoaWxlIChlcnJjbnQtLSkgeworCQkJc3BfcmVnX3Jl YWQoYW54Nzh4eCwgVFhfUDAsIFNQX0JVRl9EQVRBX0NPVU5UX1JFRywKKwkJCQkgICAgJnZhbCk7 CisJCQlpZiAodmFsICYgMHgxZikKKwkJCQlicmVhazsKKwkJCXVzbGVlcF9yYW5nZSgyMDAwLCA0 MDAwKTsKKwkJfQorCisJCWlmICghZXJyY250KSB7CisJCQlkZXZfZXJyKGRldiwgInJlYWQgU1Bf QlVGX0RBVEFfQ09VTlRfUkVHIGZhaWxlZC5cbiIpOworCQkJc3BfcmVzZXRfYXV4KGFueDc4eHgp OworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJc3BfcmVnX3JlYWQoYW54Nzh4eCwgVFhfUDAsIFNQ X0RQX0JVRl9EQVRBMF9SRUcgKyBpLCAmdmFsKTsKKwl9CisKKwlzcF9yZWdfd3JpdGUoYW54Nzh4 eCwgVFhfUDAsIFNQX0RQX0FVWF9DSF9DVFJMMV9SRUcsIDB4MDEpOworCXNwX3JlZ19zZXRfYml0 cyhhbng3OHh4LCBUWF9QMCwgU1BfRFBfQVVYX0NIX0NUUkwyX1JFRywKKwkJCVNQX0FERFJfT05M WSB8IFNQX0FVWF9FTik7CisJc3BfcmVnX2NsZWFyX2JpdHMoYW54Nzh4eCwgVFhfUDAsIFNQX0RQ X0FVWF9DSF9DVFJMMl9SRUcsCisJCQkgIFNQX0FERFJfT05MWSk7CisJc3BfcmVnX3JlYWQoYW54 Nzh4eCwgVFhfUDAsIFNQX0RQX0FVWF9DSF9DVFJMMl9SRUcsICZ2YWwpOworCisJZXJyY250ID0g MTA7CisJd2hpbGUgKGVycmNudC0tKSB7CisJCXNwX3JlZ19yZWFkKGFueDc4eHgsIFRYX1AwLCBT UF9EUF9BVVhfQ0hfQ1RSTDJfUkVHLCAmdmFsKTsKKwkJaWYgKCEodmFsICYgU1BfQVVYX0VOKSkK KwkJCWJyZWFrOworCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7CisJfQorCisJaWYgKCFlcnJj bnQpIHsKKwkJZGV2X2VycihkZXYsICJyZWFkIFNQX0RQX0FVWF9DSF9DVFJMMl9SRUcgZmFpbGVk LlxuIik7CisJCXNwX3Jlc2V0X2F1eChhbng3OHh4KTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJl dHVybiAwOworfQorCitzdGF0aWMgaW50IHNwX2VkaWRfYmxvY2tfY2hlY2tzdW0oY29uc3QgdTgg KnJhd19lZGlkKQoreworCWludCBpOworCXU4IGNzdW0gPSAwOworCisJZm9yIChpID0gMDsgaSA8 IEVESURfTEVOR1RIOyBpKyspCisJCWNzdW0gKz0gcmF3X2VkaWRbaV07CisKKwlyZXR1cm4gY3N1 bTsKK30KKworc3RhdGljIGludCBzcF90eF9lZGlkX3JlYWQoc3RydWN0IGFueDc4eHggKmFueDc4 eHgpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmFueDc4eHgtPmNsaWVudC0+ZGV2OworCXU4 IHZhbCwgYmxvY2tzLCBvZmZzZXQgPSAwOworCXU4IGJ1ZlsxNl07CisJaW50IGksIGosIGNvdW50 OworCisJc3BfdHhfZWRpZF9yZWFkX2luaXRpYWwoYW54Nzh4eCk7CisJc3BfcmVnX3dyaXRlKGFu eDc4eHgsIFRYX1AwLCBTUF9EUF9BVVhfQ0hfQ1RSTDFfUkVHLCAweDA0KTsKKwlzcF9yZWdfc2V0 X2JpdHMoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX0FVWF9DSF9DVFJMMl9SRUcsIDB4MDMpOworCisJ aWYgKHNwX3dhaXRfYXV4X29wX2ZpbmlzaChhbng3OHh4KSkKKwkJcmV0dXJuIC0xOworCisJc3Bf YWRkcm9ubHlfc2V0KGFueDc4eHgsIGZhbHNlKTsKKworCWJsb2NrcyA9IHNwX3R4X2dldF9lZGlk X2Jsb2NrKGFueDc4eHgpOworCS8qIGZvciBldmVyeSBibG9jayAqLworCWZvciAoY291bnQgPSAw OyBjb3VudCA8IGJsb2NrczsgY291bnQrKykgeworCQlzd2l0Y2ggKGNvdW50KSB7CisJCWNhc2Ug MDoKKwkJY2FzZSAxOgorCQkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQkJCW9mZnNldCA9 IChpICsgY291bnQgKiA4KSAqIDE2OworCQkJCWlmIChzcF9lZGlkX3JlYWQoYW54Nzh4eCwgb2Zm c2V0LCBidWYpKQorCQkJCQlyZXR1cm4gLTE7CisJCQkJZm9yIChqID0gMDsgaiA8IDE2OyBqKysp CisJCQkJCXNwLmVkaWRfYmxvY2tzW29mZnNldCArIGpdID0gYnVmW2pdOworCQkJfQorCQkJYnJl YWs7CisJCWNhc2UgMjoKKwkJY2FzZSAzOgorCQkJb2Zmc2V0ID0gKGNvdW50ID09IDIpID8gMHgw MCA6IDB4ODA7CisJCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKSB7CisJCQkJaWYgKHNwX3NlZ19l ZGlkX3JlYWQoYW54Nzh4eCwgY291bnQgLyAyLAorCQkJCQkJICAgICBvZmZzZXQpKQorCQkJCQly ZXR1cm4gLTE7CisJCQkJb2Zmc2V0ID0gb2Zmc2V0ICsgMHgxMDsKKwkJCX0KKwkJCWJyZWFrOwor CQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9CisKKwlzcF9yZXNldF9hdXgoYW54Nzh4eCk7 CisKKwlpZiAoIWRybV9lZGlkX2Jsb2NrX3ZhbGlkKHNwLmVkaWRfYmxvY2tzLCAwLCB0cnVlLCBO VUxMKSkgeworCQlkZXZfZXJyKGRldiwgIkVESUQgYmxvY2sgaXMgaW52YWxpZFxuIik7CisJCXJl dHVybiAtMTsKKwl9CisKKwlzcF9hdXhfZHBjZHJlYWRfYnl0ZXMoYW54Nzh4eCwgMHgwMCwgMHgw MiwgMHgxOCwgMSwgJnZhbCk7CisJaWYgKHZhbCAmIDB4MDQpIHsKKwkJdmFsID0gc3BfZWRpZF9i bG9ja19jaGVja3N1bShzcC5lZGlkX2Jsb2Nrcyk7CisJCWRldl9kYmcoZGV2LCAiRURJRCBjaGVj a3N1bSBpcyAlZFxuIiwgdmFsKTsKKwkJc3BfYXV4X2RwY2R3cml0ZV9ieXRlcyhhbng3OHh4LCAw eDAwLCAweDAyLCAweDYxLCAxLCAmdmFsKTsKKwkJc3AudHhfdGVzdF9lZGlkID0gdHJ1ZTsKKwkJ dmFsID0gMHgwNDsKKwkJc3BfYXV4X2RwY2R3cml0ZV9ieXRlcyhhbng3OHh4LCAweDAwLCAweDAy LCAweDYwLCAxLCAmdmFsKTsKKwkJZGV2X2RiZyhkZXYsICJ0ZXN0IEVESUQgZG9uZVxuIik7CisJ fQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBib29sIHNwX2NoZWNrX3dpdGhfcHJlX2VkaWQo c3RydWN0IGFueDc4eHggKmFueDc4eHgpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmFueDc4 eHgtPmNsaWVudC0+ZGV2OworCXU4IGk7CisJdTggYnVmWzE2XTsKKwlib29sIHJldCA9IGZhbHNl OworCisJc3BfdHhfZWRpZF9yZWFkX2luaXRpYWwoYW54Nzh4eCk7CisJc3BfcmVnX3dyaXRlKGFu eDc4eHgsIFRYX1AwLCBTUF9EUF9BVVhfQ0hfQ1RSTDFfUkVHLCAweDA0KTsKKwlzcF9yZWdfc2V0 X2JpdHMoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX0FVWF9DSF9DVFJMMl9SRUcsIDB4MDMpOworCisJ aWYgKHNwX3dhaXRfYXV4X29wX2ZpbmlzaChhbng3OHh4KSkKKwkJZ290byByZXR1cm5fcG9pbnQ7 CisKKwlzcF9hZGRyb25seV9zZXQoYW54Nzh4eCwgZmFsc2UpOworCisJaWYgKHNwX2VkaWRfcmVh ZChhbng3OHh4LCAweDcwLCBidWYpKQorCQlnb3RvIHJldHVybl9wb2ludDsKKworCWZvciAoaSA9 IDA7IGkgPCAxNjsgaSsrKSB7CisJCWlmIChzcC5lZGlkX2Jsb2Nrc1sweDcwICsgaV0gIT0gYnVm W2ldKSB7CisJCQlkZXZfZGJnKGRldiwgIiVzXG4iLAorCQkJCSJkaWZmZXJlbnQgY2hlY2tzdW0g YW5kIGJsb2NrcyBudW1cbiIpOworCQkJZ290byByZXR1cm5fcG9pbnQ7CisJCX0KKwl9CisKKwlp ZiAoc3BfZWRpZF9yZWFkKGFueDc4eHgsIDB4MDgsIGJ1ZikpCisJCWdvdG8gcmV0dXJuX3BvaW50 OworCisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJaWYgKHNwLmVkaWRfYmxvY2tzW2kg KyA4XSAhPSBidWZbaV0pIHsKKwkJCWRldl9kYmcoZGV2LCAiZGlmZmVyZW50IGVkaWQgaW5mb3Jt YXRpb25cbiIpOworCQkJZ290byByZXR1cm5fcG9pbnQ7CisJCX0KKwl9CisKKwlyZXQgPSB0cnVl OworcmV0dXJuX3BvaW50OgorCXNwX3Jlc2V0X2F1eChhbng3OHh4KTsKKworCXJldHVybiByZXQ7 Cit9CisKK3N0YXRpYyBib29sIHNwX2VkaWRfcHJvY2VzcyhzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4 eCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW54Nzh4eC0+Y2xpZW50LT5kZXY7CisJdTgg YncsIGVkaWRfYncsIHZhbDsKKwlpbnQgaTsKKworCWlmIChzcC5yZWFkX2VkaWRfZmxhZykgewor CQlpZiAoIXNwX2NoZWNrX3dpdGhfcHJlX2VkaWQoYW54Nzh4eCkpCisJCQlzcC5yZWFkX2VkaWRf ZmxhZyA9IGZhbHNlOworCX0gZWxzZSB7CisJCWlmIChzcF90eF9lZGlkX3JlYWQoYW54Nzh4eCkp IHsKKwkJCWRldl9lcnIoZGV2LCAiRURJRCBjb3JydXB0aW9uIVxuIik7CisJCQlyZXR1cm4gZmFs c2U7CisJCX0KKwl9CisKKwkvKiBSZWxlYXNlIHRoZSBIUEQgYWZ0ZXIgdGhlIE9UUCBsb2FkZG93 biAqLworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCXNwX3JlZ19yZWFkKGFueDc4eHgs IFRYX1AwLCBTUF9IRENQX0tFWV9TVEFUVVNfUkVHLCAmdmFsKTsKKwkJaWYgKHZhbCAmIDB4MDEp CisJCQlicmVhazsKKworCQlkZXZfZGJnKGRldiwgIndhaXRpbmcgSERDUCBLRVkgbG9hZGRvd25c biIpOworCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7CisJfQorCisJc3BfcmVnX3dyaXRlKGFu eDc4eHgsIFJYX1AwLCBTUF9JTlRfTUFTS19CQVNFICsgMSwKKwkJICAgICBTUF9IRE1JX0RWSSB8 IFNQX0NLRFRfQ0hHIHwgU1BfU0NEVF9DSEcgfAorCQkgICAgIFNQX0NBQkxFX1BMVUdfQ0hHKTsK KworCWlmICghc3BfaGRjcF9yZXBlYXRlcl9tb2RlKGFueDc4eHgpKSB7CisJCXNwX2hkbWlfc2V0 X2hwZChhbng3OHh4LCB0cnVlKTsKKwkJc3BfaGRtaV9zZXRfdGVybWluYXRpb24oYW54Nzh4eCwg dHJ1ZSk7CisJfQorCisJYncgPSBzcF9nZXRfcnhfYncoYW54Nzh4eCk7CisJZGV2X2RiZyhkZXYs ICJSWCBCVyAleFxuIiwgYncpOworCisJZWRpZF9idyA9IHNwX3BhcnNlX2VkaWRfdG9fZ2V0X2Jh bmR3aWR0aChhbng3OHh4KTsKKwlpZiAoYncgPD0gZWRpZF9idykKKwkJZWRpZF9idyA9IGJ3Owor CisJZGV2X2RiZyhkZXYsICJzZXQgbGluayBidyBpbiBlZGlkICV4XG4iLCBlZGlkX2J3KTsKKwlz cC5jaGFuZ2VkX2JhbmR3aWR0aCA9IGVkaWRfYnc7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoq KioqKioqKioqKioqKioqKkVuZCBFRElEIHByb2Nlc3MqKioqKioqKioqKioqKioqKioqKi8KKwor LyoqKioqKioqKioqKioqKioqKnN0YXJ0IExpbmsgdHJhaW5pbmcgcHJvY2VzcyoqKioqKioqKioq KioqKioqKioqLworc3RhdGljIHZvaWQgc3BfbHZ0dGxfYml0X21hcHBpbmcoc3RydWN0IGFueDc4 eHggKmFueDc4eHgpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmFueDc4eHgtPmNsaWVudC0+ ZGV2OworCXU4IHZhbCwgY29sb3JzcGFjZTsKKwl1OCB2aWRfYml0OworCisJdmlkX2JpdCA9IDA7 CisJc3BfcmVnX3JlYWQoYW54Nzh4eCwgUlhfUDEsIFNQX0FWSV9JTkZPRlJBTUVfREFUQV9CQVNF LCAmY29sb3JzcGFjZSk7CisJY29sb3JzcGFjZSAmPSBTUF9BVklfQ09MT1JfRl9NQVNLOworCWNv bG9yc3BhY2UgPj49IFNQX0FWSV9DT0xPUl9GX1NISUZUOworCisJc3BfcmVnX3JlYWQoYW54Nzh4 eCwgUlhfUDAsIFNQX1ZJREVPX1NUQVRVU19SRUcsICZ2YWwpOworCXN3aXRjaCAoKHZhbCAmIFNQ X0NPTE9SX0RFUFRIX01BU0spID4+IFNQX0NPTE9SX0RFUFRIX1NISUZUKSB7CisJZGVmYXVsdDoK KwljYXNlIEhETUlfTEVHQUNZOgorCQl2YWwgPSBTUF9JTl9CUENfOEJJVDsKKwkJdmlkX2JpdCA9 IDA7CisJCWJyZWFrOworCWNhc2UgSERNSV8yNEJJVDoKKwkJdmFsID0gU1BfSU5fQlBDXzhCSVQ7 CisJCWlmIChjb2xvcnNwYWNlID09IFNQX0NPTE9SU1BBQ0VfWUNCQ1I0MjIpCisJCQl2aWRfYml0 ID0gNTsKKwkJZWxzZQorCQkJdmlkX2JpdCA9IDE7CisJCWJyZWFrOworCWNhc2UgSERNSV8zMEJJ VDoKKwkJdmFsID0gU1BfSU5fQlBDXzEwQklUOworCQlpZiAoY29sb3JzcGFjZSA9PSBTUF9DT0xP UlNQQUNFX1lDQkNSNDIyKQorCQkJdmlkX2JpdCA9IDY7CisJCWVsc2UKKwkJCXZpZF9iaXQgPSAy OworCQkvKgorCQkgKiBGb3IgMTBiaXQgdmlkZW8gbXVzdCBiZSBzZXQgdGhpcyB2YWx1ZSB0byAx MmJpdCBieQorCQkgKiBzb21lb25lCisJCSAqLworCQlpZiAoc3AuZG93bl9zYW1wbGVfZW4pCisJ CQl2aWRfYml0ID0gMzsKKwkJYnJlYWs7CisJY2FzZSBIRE1JXzM2QklUOgorCQl2YWwgPSBTUF9J Tl9CUENfMTJCSVQ7CisJCWlmIChjb2xvcnNwYWNlID09IFNQX0NPTE9SU1BBQ0VfWUNCQ1I0MjIp CisJCQl2aWRfYml0ID0gNjsKKwkJZWxzZQorCQkJdmlkX2JpdCA9IDM7CisJCWJyZWFrOworCX0K KworCS8qCisJICogRm9yIGRvd24gc2FtcGxlIHZpZGVvICgxMmJpdCwgMTBiaXQgLS0tPiA4Yml0 KSwKKwkgKiB0aGlzIHJlZ2lzdGVyIGRvZXNuJ3QgY2hhbmdlCisJICovCisJaWYgKCFzcC5kb3du X3NhbXBsZV9lbikKKwkJc3BfcmVnX3VwZGF0ZV9iaXRzKGFueDc4eHgsIFRYX1AyLCBTUF9WSURf Q1RSTDJfUkVHLAorCQkJCSAgIFNQX0lOX0JQQ19NQVNLIHwgU1BfSU5fQ09MT1JfRl9NQVNLLAor CQkJCSAgICh2YWwgPDwgU1BfSU5fQlBDX1NISUZUKSB8IGNvbG9yc3BhY2UpOworCisJc3BfcmVn X3dyaXRlKGFueDc4eHgsIFRYX1AyLCBTUF9CSVRfQ1RSTF9TUEVDSUZJQ19SRUcsCisJCSAgICAg U1BfRU5BQkxFX0JJVF9DVFJMIHwgdmlkX2JpdCA8PCBTUF9CSVRfQ1RSTF9TRUxFQ1RfU0hJRlQp OworCisJaWYgKHNwLnR4X3Rlc3RfZWRpZCkgeworCQkvKiBTZXQgY29sb3IgZGVwdGggdG8gNiBi cGMgKDE4IGJwcCkgZm9yIGxpbmsgY3RzICovCisJCXNwX3JlZ191cGRhdGVfYml0cyhhbng3OHh4 LCBUWF9QMiwgU1BfVklEX0NUUkwyX1JFRywKKwkJCQkgICBTUF9JTl9CUENfTUFTSywgU1BfSU5f QlBDXzZCSVQpOworCQlzcC50eF90ZXN0X2VkaWQgPSBmYWxzZTsKKwkJZGV2X2RiZyhkZXYsICJj b2xvciBzcGFjZSBpcyBzZXQgdG8gNiBicGMgKDE4IGJwcClcbiIpOworCX0KKworCWlmIChjb2xv cnNwYWNlKSB7CisJCS8qCisJCSAqIFNldCB2aWRlbyB2YWx1ZXMgdG8gZGVmYXVsdCBvZiBjaGFu bmVsIDAsIDEgYW5kIDIgZm9yIEhEQ1AKKwkJICogZW1iZWRkZWQgImJsdWUgc2NyZWVuIiB3aGVu IEhEQ1AgYXV0aGVudGljYXRpb24gZmFpbGVkLgorCQkgKi8KKwkJc3BfcmVnX3dyaXRlKGFueDc4 eHgsIFRYX1AwLCBTUF9IRENQX1ZJRDBfQkxVRV9TQ1JFRU5fUkVHLAorCQkJICAgICAweDgwKTsK KwkJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFRYX1AwLCBTUF9IRENQX1ZJRDFfQkxVRV9TQ1JFRU5f UkVHLAorCQkJICAgICAweDAwKTsKKwkJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFRYX1AwLCBTUF9I RENQX1ZJRDJfQkxVRV9TQ1JFRU5fUkVHLAorCQkJICAgICAweDgwKTsKKwl9IGVsc2UgeworCQlz cF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDAsIFNQX0hEQ1BfVklEMF9CTFVFX1NDUkVFTl9SRUcs CisJCQkgICAgIDB4MDApOworCQlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDAsIFNQX0hEQ1Bf VklEMF9CTFVFX1NDUkVFTl9SRUcsCisJCQkgICAgIDB4MDApOworCQlzcF9yZWdfd3JpdGUoYW54 Nzh4eCwgVFhfUDAsIFNQX0hEQ1BfVklEMF9CTFVFX1NDUkVFTl9SRUcsCisJCQkgICAgIDB4MDAp OworCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgc3BfcGNsa19jYWxjKHN0cnVjdCBhbng3 OHh4ICphbng3OHh4KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbng3OHh4LT5jbGllbnQt PmRldjsKKwl1bnNpZ25lZCBsb25nIHN0cl9wbGNrOworCXUxNiB2aWRfY291bnRlcjsKKwl1OCB2 YWw7CisKKwlzcF9yZWdfcmVhZChhbng3OHh4LCBSWF9QMCwgU1BfUENMS19ISUdIUkVTX0NOVF9C QVNFICsgMiwgJnZhbCk7CisJdmlkX2NvdW50ZXIgPSB2YWwgPDwgODsKKwlzcF9yZWdfcmVhZChh bng3OHh4LCBSWF9QMCwgU1BfUENMS19ISUdIUkVTX0NOVF9CQVNFICsgMSwgJnZhbCk7CisJdmlk X2NvdW50ZXIgfD0gdmFsOworCXN0cl9wbGNrID0gKHZpZF9jb3VudGVyICogWFRBTF9DTEspID4+ IDEyOworCWRldl9kYmcoZGV2LCAicGl4ZWwgY2xvY2sgaXMgJWxkLiVsZFxuIiwgc3RyX3BsY2sg LyAxMCwgc3RyX3BsY2sgJSAxMCk7CisJcmV0dXJuIHN0cl9wbGNrOworfQorCitzdGF0aWMgdTgg c3BfdHhfYndfbGNfc2VsKHN0cnVjdCBhbng3OHh4ICphbng3OHh4KQoreworCXN0cnVjdCBkZXZp Y2UgKmRldiA9ICZhbng3OHh4LT5jbGllbnQtPmRldjsKKwl1bnNpZ25lZCBsb25nIHBpeGVsX2Ns azsKKwl1OCBsaW5rLCB2YWw7CisKKwlwaXhlbF9jbGsgPSBzcF9wY2xrX2NhbGMoYW54Nzh4eCk7 CisKKwlzcF9yZWdfcmVhZChhbng3OHh4LCBSWF9QMCwgU1BfVklERU9fU1RBVFVTX1JFRywgJnZh bCk7CisJc3dpdGNoICgodmFsICYgU1BfQ09MT1JfREVQVEhfTUFTSykgPj4gU1BfQ09MT1JfREVQ VEhfU0hJRlQpIHsKKwljYXNlIEhETUlfTEVHQUNZOgorCWNhc2UgSERNSV8yNEJJVDoKKwlkZWZh dWx0OgorCQlicmVhazsKKwljYXNlIEhETUlfMzBCSVQ6CisJCXBpeGVsX2NsayA9IChwaXhlbF9j bGsgKiA1KSA+PiAyOworCQlicmVhazsKKwljYXNlIEhETUlfMzZCSVQ6CisJCXBpeGVsX2NsayA9 IChwaXhlbF9jbGsgKiAzKSA+PiAxOworCQlicmVhazsKKwl9CisKKwlkZXZfZGJnKGRldiwgInBp eGVsIGNsb2NrIGlzICVsZC4lbGRcbiIsIHBpeGVsX2NsayAvIDEwLAorCQlwaXhlbF9jbGsgJSAx MCk7CisKKwlzcC5kb3duX3NhbXBsZV9lbiA9IGZhbHNlOworCWlmIChwaXhlbF9jbGsgPD0gNTMw KSB7CisJCWxpbmsgPSBTUF9MSU5LXzFQNjJHOworCX0gZWxzZSBpZiAocGl4ZWxfY2xrIDw9IDg5 MCkgeworCQlsaW5rID0gU1BfTElOS18yUDdHOworCX0gZWxzZSBpZiAocGl4ZWxfY2xrIDw9IDE4 MDApIHsKKwkJbGluayA9IFNQX0xJTktfNVA0RzsKKwl9IGVsc2UgeworCQlsaW5rID0gU1BfTElO S182UDc1RzsKKwkJaWYgKHBpeGVsX2NsayA+IDIyNDApCisJCQlzcC5kb3duX3NhbXBsZV9lbiA9 IHRydWU7CisJfQorCisJaWYgKHNwX2dldF9saW5rX2J3KGFueDc4eHgpICE9IGxpbmspIHsKKwkJ c3AuY2hhbmdlZF9iYW5kd2lkdGggPSBsaW5rOworCQlkZXZfZGJnKGRldiwKKwkJCSJkaWZmZXJl bnQgYmFuZHdpZHRoIGJldHdlZW4gc2luayBhbmQgdmlkZW8gJS4yeCIsCisJCQlsaW5rKTsKKwkJ cmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3BfZG93bnNwZWFk aW5nX2VuYWJsZShzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCwgYm9vbCBlbmFibGUpCit7CisJdTgg dmFsOworCisJc3BfcmVnX3JlYWQoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX0RPV05TUFJFQURJTkdf Q1RSTDFfUkVHLCAmdmFsKTsKKworCWlmIChlbmFibGUpIHsKKwkJdmFsIHw9IFNQX1RYX1NTQ19E T1dOU1BSRUFESU5HOworCQlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX0RPV05T UFJFQURJTkdfQ1RSTDFfUkVHLAorCQkJICAgICB2YWwpOworCisJCXNwX2F1eF9kcGNkcmVhZF9i eXRlcyhhbng3OHh4LCAweDAwLCAweDAxLAorCQkJCSAgICAgIFNQX0RQQ0RfRE9XTlNQUkVBRElO R19DVFJMLCAxLCAmdmFsKTsKKwkJdmFsIHw9IFNQX1NQUkVBRF9BTVBMSVRVREU7CisJCXNwX2F1 eF9kcGNkd3JpdGVfYnl0ZXMoYW54Nzh4eCwgMHgwMCwgMHgwMSwKKwkJCQkgICAgICAgU1BfRFBD RF9ET1dOU1BSRUFESU5HX0NUUkwsIDEsICZ2YWwpOworCX0gZWxzZSB7CisJCXZhbCAmPSB+U1Bf VFhfU1NDX0RJU0FCTEU7CisJCXNwX3JlZ193cml0ZShhbng3OHh4LCBUWF9QMCwgU1BfRFBfRE9X TlNQUkVBRElOR19DVFJMMV9SRUcsCisJCQkgICAgIHZhbCk7CisKKwkJc3BfYXV4X2RwY2RyZWFk X2J5dGVzKGFueDc4eHgsIDB4MDAsIDB4MDEsCisJCQkJICAgICAgU1BfRFBDRF9ET1dOU1BSRUFE SU5HX0NUUkwsIDEsICZ2YWwpOworCQl2YWwgJj0gflNQX1NQUkVBRF9BTVBMSVRVREU7CisJCXNw X2F1eF9kcGNkd3JpdGVfYnl0ZXMoYW54Nzh4eCwgMHgwMCwgMHgwMSwKKwkJCQkgICAgICAgU1Bf RFBDRF9ET1dOU1BSRUFESU5HX0NUUkwsIDEsICZ2YWwpOworCX0KK30KKworc3RhdGljIHZvaWQg c3BfY29uZmlnX3NzYyhzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCwKKwkJCSAgZW51bSBzcF9zc2Nf ZGVwIHNzY2RlcCkKK3sKKwlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX0RPV05T UFJFQURJTkdfQ1RSTDFfUkVHLCAweDApOworCXNwX3JlZ193cml0ZShhbng3OHh4LCBUWF9QMCwg U1BfRFBfRE9XTlNQUkVBRElOR19DVFJMMV9SRUcsIHNzY2RlcCk7CisJc3BfZG93bnNwZWFkaW5n X2VuYWJsZShhbng3OHh4LCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgc3BfZW5oYW5jZW1vZGVf c2V0KHN0cnVjdCBhbng3OHh4ICphbng3OHh4KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZh bng3OHh4LT5jbGllbnQtPmRldjsKKwl1OCB2YWw7CisKKwlzcF9hdXhfZHBjZHJlYWRfYnl0ZXMo YW54Nzh4eCwgMHgwMCwgMHgwMCwgU1BfRFBDRF9NQVhfTEFORV9DT1VOVCwgMSwKKwkJCSAgICAg ICZ2YWwpOworCisJaWYgKHZhbCAmIFNQX0VOSEFOQ0VEX0ZSQU1FX0NBUCkgeworCQlzcF9yZWdf c2V0X2JpdHMoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX1NZU1RFTV9DVFJMX0JBU0UgKyA0LAorCQkJ CVNQX0VOSEFOQ0VEX01PREUpOworCisJCXNwX2F1eF9kcGNkcmVhZF9ieXRlcyhhbng3OHh4LCAw eDAwLCAweDAxLAorCQkJCSAgICAgIFNQX0RQQ0RfTEFORV9DT1VOVF9TRVQsIDEsICZ2YWwpOwor CQl2YWwgfD0gU1BfRU5IQU5DRURfRlJBTUVfRU47CisJCXNwX2F1eF9kcGNkd3JpdGVfYnl0ZXMo YW54Nzh4eCwgMHgwMCwgMHgwMSwKKwkJCQkgICAgICAgU1BfRFBDRF9MQU5FX0NPVU5UX1NFVCwg MSwgJnZhbCk7CisKKwkJZGV2X2RiZyhkZXYsICJlbmhhbmNlIG1vZGUgZW5hYmxlZFxuIik7CisJ fSBlbHNlIHsKKwkJc3BfcmVnX2NsZWFyX2JpdHMoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX1NZU1RF TV9DVFJMX0JBU0UgKyA0LAorCQkJCSAgU1BfRU5IQU5DRURfTU9ERSk7CisKKwkJc3BfYXV4X2Rw Y2RyZWFkX2J5dGVzKGFueDc4eHgsIDB4MDAsIDB4MDEsCisJCQkJICAgICAgU1BfRFBDRF9MQU5F X0NPVU5UX1NFVCwgMSwgJnZhbCk7CisKKwkJdmFsICY9IH5TUF9FTkhBTkNFRF9GUkFNRV9FTjsK KwkJc3BfYXV4X2RwY2R3cml0ZV9ieXRlcyhhbng3OHh4LCAweDAwLCAweDAxLAorCQkJCSAgICAg ICBTUF9EUENEX0xBTkVfQ09VTlRfU0VULCAxLCAmdmFsKTsKKworCQlkZXZfZGJnKGRldiwgImVu aGFuY2UgbW9kZSBkaXNhYmxlZFxuIik7CisJfQorfQorCitzdGF0aWMgdTE2IHNwX2xpbmtfZXJy X2NoZWNrKHN0cnVjdCBhbng3OHh4ICphbng3OHh4KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9 ICZhbng3OHh4LT5jbGllbnQtPmRldjsKKwl1MTYgZXJyOworCXU4IGJ1ZlsyXTsKKworCXNwX2F1 eF9kcGNkcmVhZF9ieXRlcyhhbng3OHh4LCAweDAwLCAweDAyLCAweDEwLCAyLCBidWYpOworCXVz bGVlcF9yYW5nZSg1MDAwLCAxMDAwMCk7CisJc3BfYXV4X2RwY2RyZWFkX2J5dGVzKGFueDc4eHgs IDB4MDAsIDB4MDIsIDB4MTAsIDIsIGJ1Zik7CisKKwlpZiAoYnVmWzFdICYgMHg4MCkgeworCQll cnIgPSAoKGJ1ZlsxXSAmIDB4N2YpIDw8IDgpICsgYnVmWzBdOworCQlkZXZfZXJyKGRldiwgImVy cm9yIG9mIExhbmUgJWRcbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBib29sIHNwX2x0X2ZpbmlzaChzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCkK K3sKKwl1OCB2YWw7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmFueDc4eHgtPmNsaWVudC0+ZGV2 OworCisJc3BfYXV4X2RwY2RyZWFkX2J5dGVzKGFueDc4eHgsIDB4MDAsIDB4MDIsIDB4MDIsIDEs ICZ2YWwpOworCisJaWYgKCh2YWwgJiAweDA3KSAhPSAweDA3KSB7CisJCWRldl9kYmcoZGV2LCAi TGFuZTAgc3RhdHVzIGVycm9yICUuMnhcbiIsIHZhbCAmIDB4MDcpOworCQlzcC50eF9sdF9zdGF0 ZSA9IExUX0VSUk9SOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoKKwkgKiBJZiB0aGVyZSBp cyBsaW5rIGVycm9yLCBhZGp1c3QgcHJlLWVtcGhhc2lzIHRvIGNoZWNrIGVycm9yCisJICogYWdh aW4uIElmIHRoZXJlIGlzIG5vIGVycm9yLCBrZWVwIHRoZSBzZXR0aW5nLCBvdGhlcndpc2UKKwkg KiB1c2UgNDAwbXYwZGIKKwkgKi8KKwlpZiAoc3AudHhfdGVzdF9sdCkgeworCQlzcC50eF90ZXN0 X2x0ID0gZmFsc2U7CisJCXNwLnR4X2x0X3N0YXRlID0gTFRfSU5JVDsKKwkJcmV0dXJuIHRydWU7 CisJfQorCisJaWYgKHNwX2xpbmtfZXJyX2NoZWNrKGFueDc4eHgpKSB7CisJCXNwX3JlZ19yZWFk KGFueDc4eHgsIFRYX1AwLCBTUF9EUF9MQU5FMF9MVF9DVFJMX1JFRywgJnZhbCk7CisJCWlmICgh KHZhbCAmIFNQX01BWF9QUkVfUkVBQ0gpKSB7CisJCQkvKiBJbmNyZWFzZSBvbmUgcHJlLWxldmVs ICovCisJCQlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX0xBTkUwX0xUX0NUUkxf UkVHLAorCQkJCSAgICAgdmFsICsgMHgwOCk7CisJCQkvKgorCQkJICogSWYgZXJyb3Igc3RpbGwg ZXhpc3RzLCByZXR1cm4gdG8gdGhlIGxpbmsgdHJhaW5pbmcKKwkJCSAqIHZhbHVlCisJCQkgKi8K KwkJCWlmIChzcF9saW5rX2Vycl9jaGVjayhhbng3OHh4KSkKKwkJCQlzcF9yZWdfd3JpdGUoYW54 Nzh4eCwgVFhfUDAsCisJCQkJCSAgICAgU1BfRFBfTEFORTBfTFRfQ1RSTF9SRUcsIHZhbCk7CisJ CX0KKwl9CisKKwl2YWwgPSBzcF9nZXRfbGlua19idyhhbng3OHh4KTsKKwlpZiAodmFsICE9IHNw LmNoYW5nZWRfYmFuZHdpZHRoKSB7CisJCWRldl9kYmcoZGV2LCAiYmFuZHdpZHRoIGNoYW5nZWQs IGN1cjolLjJ4LCBwZXI6JS4yeFxuIiwgdmFsLAorCQkJc3AuY2hhbmdlZF9iYW5kd2lkdGgpOwor CQlzcC50eF9sdF9zdGF0ZSA9IExUX0VSUk9SOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJZGV2 X2RiZyhkZXYsICJMVCBzdWNjZWVkLCBiYW5kd2lkdGg6ICUuMngiLCB2YWwpOworCXNwX3JlZ19y ZWFkKGFueDc4eHgsIFRYX1AwLCBTUF9EUF9MQU5FMF9MVF9DVFJMX1JFRywgJnZhbCk7CisJZGV2 X2RiZyhkZXYsICJMYW5lMCBzZXQgdG8gJS4yeFxuIiwgdmFsKTsKKwlzcC50eF9sdF9zdGF0ZSA9 IExUX0lOSVQ7CisKKwlpZiAoc3BfaGRjcF9yZXBlYXRlcl9tb2RlKGFueDc4eHgpKSB7CisJCWRl dl9kYmcoZGV2LCAiSFBEIHNldCB0byAxIVxuIik7CisJCXNwX2hkbWlfc2V0X2hwZChhbng3OHh4 LCB0cnVlKTsKKwkJc3BfaGRtaV9zZXRfdGVybWluYXRpb24oYW54Nzh4eCwgdHJ1ZSk7CisJfQor CisJLyoKKwkgKiBVbmRlciBsb3cgdm9sdGFnZSAoRFZEMTAgPSAwLjk3ViksIHNvbWUgY2hpcHMg Y2Fubm90IG91dHB1dCB2aWRlbywKKwkgKiBsaW5rIGRvd24gaW50ZXJydXB0IGFsd2F5cyBoYXBw ZW5zLgorCSAqLworCWlmIChzcF9saW5rX2Vycl9jaGVjayhhbng3OHh4KSA+IDIwMCkgeworCQlk ZXZfZGJnKGRldiwgIm5lZWQgdG8gcmVzZXQgU2VyZGVzIEZJRk8iKTsKKwkJc3AudHhfbHRfc3Rh dGUgPSBMVF9FUlJPUjsKKwl9IGVsc2UgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4g ZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIHNwX2xpbmtfdHJhaW5pbmcoc3RydWN0IGFueDc4eHgg KmFueDc4eHgpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmFueDc4eHgtPmNsaWVudC0+ZGV2 OworCXU4IHZhbCwgdmVyc2lvbjsKKworCXN3aXRjaCAoc3AudHhfbHRfc3RhdGUpIHsKKwljYXNl IExUX0lOSVQ6CisJCXNwX2Jsb2NrX3Bvd2VyX2N0cmwoYW54Nzh4eCwgU1BfVFhfUFdSX1ZJREVP LCAxKTsKKwkJc3BfdmlkZW9fbXV0ZShhbng3OHh4LCB0cnVlKTsKKwkJc3BfZW5hYmxlX3ZpZGVv X2lucHV0KGFueDc4eHgsIGZhbHNlKTsKKwkJc3AudHhfbHRfc3RhdGUgPSBMVF9XQUlUX1BMTF9M T0NLOworCS8qIGZhbGx0aHJvdWdoICovCisJY2FzZSBMVF9XQUlUX1BMTF9MT0NLOgorCQlpZiAo IXNwX2dldF9wbGxfbG9ja19zdGF0dXMoYW54Nzh4eCkpIHsKKwkJCXNwX3JlZ19yZWFkKGFueDc4 eHgsIFRYX1AwLCBTUF9EUF9QTExfQ1RSTF9SRUcsCisJCQkJICAgICZ2YWwpOworCisJCQl2YWwg fD0gU1BfUExMX1JTVDsKKwkJCXNwX3JlZ193cml0ZShhbng3OHh4LCBUWF9QMCwgU1BfRFBfUExM X0NUUkxfUkVHLAorCQkJCSAgICAgdmFsKTsKKworCQkJdmFsICY9IH5TUF9QTExfUlNUOworCQkJ c3BfcmVnX3dyaXRlKGFueDc4eHgsIFRYX1AwLCBTUF9EUF9QTExfQ1RSTF9SRUcsCisJCQkJICAg ICB2YWwpOworCisJCQlkZXZfZGJnKGRldiwgIlBMTCBub3QgbG9jayFcbiIpOworCQkJYnJlYWs7 CisJCX0gZWxzZSB7CisJCQlzcC50eF9sdF9zdGF0ZSA9IExUX0NIRUNLX0xJTktfQlc7CisJCX0K KwkvKiBmYWxsdGhyb3VnaCAqLworCWNhc2UgTFRfQ0hFQ0tfTElOS19CVzoKKwkJdmFsID0gc3Bf Z2V0X3J4X2J3KGFueDc4eHgpOworCQlpZiAodmFsIDwgc3AuY2hhbmdlZF9iYW5kd2lkdGgpIHsK KwkJCWRldl9kYmcoZGV2LCAib3ZlciBiYW5kd2lkdGghXG4iKTsKKwkJCXNwLmNoYW5nZWRfYmFu ZHdpZHRoID0gdmFsOworCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQlzcC50eF9sdF9zdGF0ZSA9 IExUX1NUQVJUOworCQl9CisJLyogZmFsbHRocm91Z2ggKi8KKwljYXNlIExUX1NUQVJUOgorCQlp ZiAoc3AudHhfdGVzdF9sdCkgeworCQkJc3AuY2hhbmdlZF9iYW5kd2lkdGggPSBzcC50eF90ZXN0 X2J3OworCQkJc3BfcmVnX2NsZWFyX2JpdHMoYW54Nzh4eCwgVFhfUDIsIFNQX1ZJRF9DVFJMMl9S RUcsCisJCQkJCSAgMHg3MCk7CisJCX0gZWxzZSB7CisJCQlzcF9yZWdfd3JpdGUoYW54Nzh4eCwg VFhfUDAsIFNQX0RQX0xBTkUwX0xUX0NUUkxfUkVHLAorCQkJCSAgICAgMHgwMCk7CisJCX0KKwor CQlzcF9yZWdfY2xlYXJfYml0cyhhbng3OHh4LCBUWF9QMCwgU1BfRFBfQU5BTE9HX1BPV0VSX0RP V05fUkVHLAorCQkJCSAgU1BfQ0gwX1BEKTsKKworCQlzcF9jb25maWdfc3NjKGFueDc4eHgsIFNT Q19ERVBfNDAwMFBQTSk7CisJCXNwX3NldF9saW5rX2J3KGFueDc4eHgsIHNwLmNoYW5nZWRfYmFu ZHdpZHRoKTsKKwkJc3BfZW5oYW5jZW1vZGVfc2V0KGFueDc4eHgpOworCisJCXNwX2F1eF9kcGNk cmVhZF9ieXRlcyhhbng3OHh4LCAweDAwLCAweDAwLCAweDAwLCAxLAorCQkJCSAgICAgICZ2ZXJz aW9uKTsKKwkJc3BfYXV4X2RwY2RyZWFkX2J5dGVzKGFueDc4eHgsIDB4MDAsIDB4MDYsIDB4MDAs IDEsCisJCQkJICAgICAgJnZhbCk7CisJCWlmICh2ZXJzaW9uID49IDB4MTIpCisJCQl2YWwgJj0g MHhmODsKKwkJZWxzZQorCQkJdmFsICY9IDB4ZmM7CisJCXZhbCB8PSAweDAxOworCQlzcF9hdXhf ZHBjZHdyaXRlX2J5dGVzKGFueDc4eHgsIDB4MDAsIDB4MDYsIDB4MDAsIDEsCisJCQkJICAgICAg ICZ2YWwpOworCisJCXNwX3JlZ193cml0ZShhbng3OHh4LCBUWF9QMCwgU1BfRFBfTFRfQ1RSTF9S RUcsIFNQX0xUX0VOKTsKKwkJc3AudHhfbHRfc3RhdGUgPSBMVF9XQUlUSU5HX0ZJTklTSDsKKwkv KiBmYWxsdGhyb3VnaCAqLworCWNhc2UgTFRfV0FJVElOR19GSU5JU0g6CisJCS8qIFdhaXRpbmcg aW50ZXJydXB0IHRvIGNoYW5nZSB0cmFpbmluZyBzdGF0ZS4gKi8KKwkJYnJlYWs7CisJY2FzZSBM VF9FUlJPUjoKKwkJc3BfcmVnX3NldF9iaXRzKGFueDc4eHgsIFRYX1AyLCBTUF9SRVNFVF9DVFJM Ml9SRUcsCisJCQkJU1BfU0VSREVTX0ZJRk9fUlNUKTsKKwkJbXNsZWVwKDIwKTsKKwkJc3BfcmVn X2NsZWFyX2JpdHMoYW54Nzh4eCwgVFhfUDIsIFNQX1JFU0VUX0NUUkwyX1JFRywKKwkJCQkgIFNQ X1NFUkRFU19GSUZPX1JTVCk7CisJCWRldl9lcnIoZGV2LCAiTFQgRVJST1IgcmVzZXQgU0VSREVT IEZJRk8iKTsKKwkJc3AudHhfbHRfc3RhdGUgPSBMVF9JTklUOworCQlicmVhazsKKwljYXNlIExU X0ZJTklTSDoKKwkJaWYgKHNwX2x0X2ZpbmlzaChhbng3OHh4KSkKKwkJCXJldHVybiB0cnVlOwor CQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisK Ky8qKioqKioqKioqKioqKioqKipFbmQgTGluayB0cmFpbmluZyBwcm9jZXNzKioqKioqKioqKioq KioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKipTdGFydCBPdXRwdXQgdmlkZW8gcHJvY2Vz cyoqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGJvb2wgc3BfbWF0Y2hfdmljX2Zvcl9idDcw OSh1OCB2aWMpCit7CisJLyogVmlkZW8gSWRlbnRpZmljYXRpb24gQ29kZSAoVklDKSBmb3IgQlQ3 MDkgKi8KKwlyZXR1cm4gKCh2aWMgPT0gMHgwNCkgfHwgKHZpYyA9PSAweDA1KSB8fCAodmljID09 IDB4MTApIHx8CisJCSh2aWMgPT0gMHgxMykgfHwgKHZpYyA9PSAweDE0KSB8fCAodmljID09IDB4 MWYpIHx8CisJCSh2aWMgPT0gMHgyMCkgfHwgKHZpYyA9PSAweDIxKSB8fCAodmljID09IDB4MjIp IHx8CisJCSh2aWMgPT0gMHgyNykgfHwgKHZpYyA9PSAweDI4KSB8fCAodmljID09IDB4MjkpIHx8 CisJCSh2aWMgPT0gMHgyZSkgfHwgKHZpYyA9PSAweDJmKSB8fCAodmljID09IDB4M2MpIHx8CisJ CSh2aWMgPT0gMHgzZCkgfHwgKHZpYyA9PSAweDNlKSB8fCAodmljID09IDB4M2YpIHx8CisJCSh2 aWMgPT0gMHg0MCkpOworfQorCitzdGF0aWMgdm9pZCBzcF9zZXRfY29sb3JzcGFjZShzdHJ1Y3Qg YW54Nzh4eCAqYW54Nzh4eCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW54Nzh4eC0+Y2xp ZW50LT5kZXY7CisJdTggY29sb3JzcGFjZSwgdmFsOworCisJaWYgKHNwLmRvd25fc2FtcGxlX2Vu KSB7CisJCXNwX3JlZ19yZWFkKGFueDc4eHgsIFJYX1AxLCBTUF9BVklfSU5GT0ZSQU1FX0RBVEFf QkFTRSwKKwkJCSAgICAmY29sb3JzcGFjZSk7CisJCWNvbG9yc3BhY2UgJj0gU1BfQVZJX0NPTE9S X0ZfTUFTSzsKKwkJY29sb3JzcGFjZSA+Pj0gU1BfQVZJX0NPTE9SX0ZfU0hJRlQ7CisJCWlmIChj b2xvcnNwYWNlID09IFNQX0NPTE9SU1BBQ0VfWUNCQ1I0MjIpIHsKKwkJCWRldl9kYmcoZGV2LCAi WUNiQ3I0OjI6MiAtLS0+IFBBU1MgVEhST1VHSC5cbiIpOworCQkJc3BfcmVnX3dyaXRlKGFueDc4 eHgsIFRYX1AyLCBTUF9WSURfQ1RSTDZfUkVHLCAweDAwKTsKKwkJCXNwX3JlZ193cml0ZShhbng3 OHh4LCBUWF9QMiwgU1BfVklEX0NUUkw1X1JFRywgMHgwMCk7CisJCX0gZWxzZSBpZiAoY29sb3Jz cGFjZSA9PSBTUF9DT0xPUlNQQUNFX1lDQkNSNDQ0KSB7CisJCQlkZXZfZGJnKGRldiwgIllDYkNy NDo0OjQgLS0tPiBZQ2JDcjQ6MjoyXG4iKTsKKwkJCXNwX3JlZ193cml0ZShhbng3OHh4LCBUWF9Q MiwgU1BfVklEX0NUUkw2X1JFRywKKwkJCQkgICAgIFNQX1ZJREVPX1BST0NFU1NfRU4gfCBTUF9V UF9TQU1QTEUpOworCQkJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFRYX1AyLCBTUF9WSURfQ1RSTDVf UkVHLCAweDAwKTsKKwkJfSBlbHNlIGlmIChjb2xvcnNwYWNlID09IFNQX0NPTE9SU1BBQ0VfUkdC KSB7CisJCQlkZXZfZGJnKGRldiwgIlJHQjQ6NDo0IC0tLT4gWUNiQ3I0OjI6MlxuIik7CisJCQlz cF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDIsIFNQX1ZJRF9DVFJMNl9SRUcsCisJCQkJICAgICBT UF9WSURFT19QUk9DRVNTX0VOIHwgU1BfVVBfU0FNUExFKTsKKwkJCXNwX3JlZ193cml0ZShhbng3 OHh4LCBUWF9QMiwgU1BfVklEX0NUUkw1X1JFRywKKwkJCQkgICAgIFNQX0NTQ19TVERfU0VMIHwg U1BfUkFOR0VfUjJZIHwKKwkJCQkgICAgIFNQX0NTUEFDRV9SMlkpOworCQl9CisJCXNwX3JlZ193 cml0ZShhbng3OHh4LCBUWF9QMiwgU1BfVklEX0NUUkwyX1JFRywKKwkJCSAgICAgKFNQX0lOX0JQ Q184QklUIDw8IFNQX0lOX0JQQ19TSElGVCkgfCBjb2xvcnNwYWNlKTsKKwl9IGVsc2UgeworCQlz cF9yZWdfcmVhZChhbng3OHh4LCBUWF9QMiwgU1BfVklEX0NUUkwyX1JFRywgJmNvbG9yc3BhY2Up OworCQljb2xvcnNwYWNlICY9IFNQX0lOX0NPTE9SX0ZfTUFTSzsKKworCQkvKgorCQkgKiBUbyBj aGFuZ2UgdGhlIENTQ19TVERfU0VMIGJpdCB3ZSBuZWVkIHRvIHNldAorCQkgKiBDU1BBQ0VfWTJS IGFuZCBDU1BBQ0VfIFIyWSwgb3RoZXJ3aXNlIGhhcyBubworCQkgKiBlZmZlY3Qgb3IgaXMgdW5k ZXRlcm1pbmVkLgorCQkgKi8KKwkJaWYgKGNvbG9yc3BhY2UgPT0gU1BfQ09MT1JTUEFDRV9SR0Ip IHsKKwkJCXNwX3JlZ19jbGVhcl9iaXRzKGFueDc4eHgsIFRYX1AyLCBTUF9WSURfQ1RSTDVfUkVH LAorCQkJCQkgIFNQX1JBTkdFX1kyUiB8IFNQX0NTUEFDRV9ZMlIgfAorCQkJCQkgIFNQX0NTQ19T VERfU0VMKTsKKwkJCXNwX3JlZ19jbGVhcl9iaXRzKGFueDc4eHgsIFRYX1AyLCBTUF9WSURfQ1RS TDZfUkVHLAorCQkJCQkgIFNQX1ZJREVPX1BST0NFU1NfRU4gfCBTUF9VUF9TQU1QTEUpOworCQl9 IGVsc2UgeworCQkJLyoKKwkJCSAqIENvbG9yaW1ldHJpYyBmb3JtYXQgb2YgaW5wdXQgdmlkZW8g aXMgWUNiQ3I0MjIKKwkJCSAqIG9yIFlDYkNyNDQ0CisJCQkgKi8KKwkJCXNwX3JlZ19zZXRfYml0 cyhhbng3OHh4LCBUWF9QMiwgU1BfVklEX0NUUkw1X1JFRywKKwkJCQkJU1BfUkFOR0VfWTJSIHwg U1BfQ1NQQUNFX1kyUik7CisKKwkJCXNwX3JlZ19yZWFkKGFueDc4eHgsIFJYX1AxLAorCQkJCSAg ICBTUF9BVklfSU5GT0ZSQU1FX0RBVEFfQkFTRSArIDMsCisJCQkJICAgICZ2YWwpOworCisJCQlp ZiAoc3BfbWF0Y2hfdmljX2Zvcl9idDcwOSh2YWwpKQorCQkJCXNwX3JlZ19zZXRfYml0cyhhbng3 OHh4LCBUWF9QMiwKKwkJCQkJCVNQX1ZJRF9DVFJMNV9SRUcsCisJCQkJCQlTUF9DU0NfU1REX1NF TCk7CisJCQllbHNlCS8qIENvbnZlcnQgYmFzZWQgb24gQlQ2MDEgKi8KKwkJCQlzcF9yZWdfY2xl YXJfYml0cyhhbng3OHh4LCBUWF9QMiwKKwkJCQkJCSAgU1BfVklEX0NUUkw1X1JFRywKKwkJCQkJ CSAgU1BfQ1NDX1NURF9TRUwpOworCQkJLyoKKwkJCSAqIEVuYWJsZSA0OjI6MiB0byA0OjQ6NCB1 cCBzYW1wbGUgd2hlbiBpcyByZXF1aXJlZAorCQkJICogYW5kIGVuYWJsZSB2aWRlbyBwcm9jZXNz IGZ1bmN0aW9uLgorCQkJICovCisJCQlpZiAoY29sb3JzcGFjZSA9PSBTUF9DT0xPUlNQQUNFX1lD QkNSNDIyKQorCQkJCXNwX3JlZ19zZXRfYml0cyhhbng3OHh4LCBUWF9QMiwKKwkJCQkJCVNQX1ZJ RF9DVFJMNl9SRUcsCisJCQkJCQlTUF9WSURFT19QUk9DRVNTX0VOIHwKKwkJCQkJCVNQX1VQX1NB TVBMRSk7CisJCQllbHNlCS8qIFlDQkNSNDQ0ICovCisJCQkJc3BfcmVnX3VwZGF0ZV9iaXRzKGFu eDc4eHgsIFRYX1AyLAorCQkJCQkJICAgU1BfVklEX0NUUkw2X1JFRywKKwkJCQkJCSAgIFNQX1ZJ REVPX1BST0NFU1NfRU4gfAorCQkJCQkJICAgU1BfVVBfU0FNUExFLAorCQkJCQkJICAgU1BfVklE RU9fUFJPQ0VTU19FTik7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNwX3BhY2tldF9hdmlf aW5pdChzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCkKK3sKKwl1OCB2YWw7CisJaW50IGk7CisKKwlz cC50eF9wYWNrZXRfYXZpLmluZm9mcmFtZS50eXBlID0gSERNSV9JTkZPRlJBTUVfVFlQRV9BVkk7 CisJc3AudHhfcGFja2V0X2F2aS5pbmZvZnJhbWUudmVyc2lvbiA9IDI7CisJc3AudHhfcGFja2V0 X2F2aS5pbmZvZnJhbWUubGVuZ3RoID0gSERNSV9BVklfSU5GT0ZSQU1FX1NJWkU7CisKKwlmb3Ig KGkgPSAwOyBpIDwgc3AudHhfcGFja2V0X2F2aS5pbmZvZnJhbWUubGVuZ3RoOyBpKyspIHsKKwkJ c3BfcmVnX3JlYWQoYW54Nzh4eCwgUlhfUDEsIFNQX0FWSV9JTkZPRlJBTUVfREFUQV9CQVNFICsg aSwKKwkJCSAgICAmdmFsKTsKKwkJc3AudHhfcGFja2V0X2F2aS5kYXRhW2ldID0gdmFsOworCX0K KworCXNwLnR4X3BhY2tldF9hdmkuZGF0YVswXSAmPSB+U1BfQVZJX0NPTE9SX0ZfTUFTSzsKK30K Kworc3RhdGljIHZvaWQgc3BfbG9hZF9wYWNrZXQoc3RydWN0IGFueDc4eHggKmFueDc4eHgsIGVu dW0gcGFja2V0c190eXBlIHR5cGUpCit7CisJaW50IGk7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwlj YXNlIEFWSV9QQUNLRVRTOgorCQlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDIsIFNQX0lORk9G UkFNRV9BVklfVFlQRV9SRUcsCisJCQkgICAgIHNwLnR4X3BhY2tldF9hdmkuaW5mb2ZyYW1lLnR5 cGUpOworCQlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDIsIFNQX0lORk9GUkFNRV9BVklfVkVS X1JFRywKKwkJCSAgICAgc3AudHhfcGFja2V0X2F2aS5pbmZvZnJhbWUudmVyc2lvbik7CisJCXNw X3JlZ193cml0ZShhbng3OHh4LCBUWF9QMiwgU1BfSU5GT0ZSQU1FX0FWSV9MRU5fUkVHLAorCQkJ ICAgICBzcC50eF9wYWNrZXRfYXZpLmluZm9mcmFtZS5sZW5ndGgpOworCisJCWZvciAoaSA9IDA7 IGkgPCBzcC50eF9wYWNrZXRfYXZpLmluZm9mcmFtZS5sZW5ndGg7IGkrKykgeworCQkJc3BfcmVn X3dyaXRlKGFueDc4eHgsIFRYX1AyLAorCQkJCSAgICAgU1BfSU5GT0ZSQU1FX0FWSV9EQjBfUkVH ICsgaSwKKwkJCQkgICAgIHNwLnR4X3BhY2tldF9hdmkuZGF0YVtpXSk7CisJCX0KKworCQlicmVh azsKKwljYXNlIFZTSV9QQUNLRVRTOgorCQlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDIsIFNQ X0lORk9GUkFNRV9NUEVHX1RZUEVfUkVHLAorCQkJICAgICBzcC50eF9wYWNrZXRfdnNpLmluZm9m cmFtZS50eXBlKTsKKwkJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFRYX1AyLCBTUF9JTkZPRlJBTUVf TVBFR19WRVJfUkVHLAorCQkJICAgICBzcC50eF9wYWNrZXRfdnNpLmluZm9mcmFtZS52ZXJzaW9u KTsKKwkJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFRYX1AyLCBTUF9JTkZPRlJBTUVfTVBFR19MRU5f UkVHLAorCQkJICAgICBzcC50eF9wYWNrZXRfdnNpLmluZm9mcmFtZS5sZW5ndGgpOworCisJCWZv ciAoaSA9IDA7IGkgPCBzcC50eF9wYWNrZXRfdnNpLmluZm9mcmFtZS5sZW5ndGg7IGkrKykgewor CQkJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFRYX1AyLAorCQkJCSAgICAgU1BfSU5GT0ZSQU1FX01Q RUdfREIwX1JFRyArIGksCisJCQkJICAgICBzcC50eF9wYWNrZXRfdnNpLmRhdGFbaV0pOworCQl9 CisJCWJyZWFrOworCWNhc2UgTVBFR19QQUNLRVRTOgorCQlzcF9yZWdfd3JpdGUoYW54Nzh4eCwg VFhfUDIsIFNQX0lORk9GUkFNRV9NUEVHX1RZUEVfUkVHLAorCQkJICAgICBzcC50eF9wYWNrZXRf bXBlZy5pbmZvZnJhbWUudHlwZSk7CisJCXNwX3JlZ193cml0ZShhbng3OHh4LCBUWF9QMiwgU1Bf SU5GT0ZSQU1FX01QRUdfVkVSX1JFRywKKwkJCSAgICAgc3AudHhfcGFja2V0X21wZWcuaW5mb2Zy YW1lLnZlcnNpb24pOworCQlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDIsIFNQX0lORk9GUkFN RV9NUEVHX0xFTl9SRUcsCisJCQkgICAgIHNwLnR4X3BhY2tldF9tcGVnLmluZm9mcmFtZS5sZW5n dGgpOworCisJCWZvciAoaSA9IDA7IGkgPCBzcC50eF9wYWNrZXRfbXBlZy5pbmZvZnJhbWUubGVu Z3RoOyBpKyspIHsKKwkJCXNwX3JlZ193cml0ZShhbng3OHh4LCBUWF9QMiwKKwkJCQkgICAgIFNQ X0lORk9GUkFNRV9NUEVHX0RCMF9SRUcgKyBpLAorCQkJCSAgICAgc3AudHhfcGFja2V0X21wZWcu ZGF0YVtpXSk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBBVURJRl9QQUNLRVRTOgorCQlzcF9yZWdf d3JpdGUoYW54Nzh4eCwgVFhfUDIsIFNQX0lORk9GUkFNRV9BVURfVFlQRV9SRUcsCisJCQkgICAg IHNwLnR4X3BhY2tldF9hdWRpby5pbmZvZnJhbWUudHlwZSk7CisJCXNwX3JlZ193cml0ZShhbng3 OHh4LCBUWF9QMiwgU1BfSU5GT0ZSQU1FX0FVRF9WRVJfUkVHLAorCQkJICAgICBzcC50eF9wYWNr ZXRfYXVkaW8uaW5mb2ZyYW1lLnZlcnNpb24pOworCQlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhf UDIsIFNQX0lORk9GUkFNRV9BVURfTEVOX1JFRywKKwkJCSAgICAgc3AudHhfcGFja2V0X2F1ZGlv LmluZm9mcmFtZS5sZW5ndGgpOworCQlmb3IgKGkgPSAwOyBpIDwgc3AudHhfcGFja2V0X2F1ZGlv LmluZm9mcmFtZS5sZW5ndGg7IGkrKykgeworCQkJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFRYX1Ay LAorCQkJCSAgICAgU1BfSU5GT0ZSQU1FX0FVRF9EQjBfUkVHICsgaSwKKwkJCQkgICAgIHNwLnR4 X3BhY2tldF9hdWRpby5kYXRhW2ldKTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVh azsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNwX2NvbmZpZ19wYWNrZXRzKHN0cnVjdCBhbng3OHh4 ICphbng3OHh4LCBlbnVtIHBhY2tldHNfdHlwZSB0eXBlKQoreworCXN3aXRjaCAodHlwZSkgewor CWNhc2UgQVZJX1BBQ0tFVFM6CisJCXNwX3JlZ19jbGVhcl9iaXRzKGFueDc4eHgsIFRYX1AwLCBT UF9QQUNLRVRfU0VORF9DVFJMX1JFRywKKwkJCQkgIFNQX0FWSV9JRl9FTik7CisJCXNwX2xvYWRf cGFja2V0KGFueDc4eHgsIEFWSV9QQUNLRVRTKTsKKwkJc3BfcmVnX3NldF9iaXRzKGFueDc4eHgs IFRYX1AwLCBTUF9QQUNLRVRfU0VORF9DVFJMX1JFRywKKwkJCQlTUF9BVklfSUZfVUQpOworCQlz cF9yZWdfc2V0X2JpdHMoYW54Nzh4eCwgVFhfUDAsIFNQX1BBQ0tFVF9TRU5EX0NUUkxfUkVHLAor CQkJCVNQX0FWSV9JRl9FTik7CisJCWJyZWFrOworCWNhc2UgVlNJX1BBQ0tFVFM6CisJCXNwX3Jl Z19jbGVhcl9iaXRzKGFueDc4eHgsIFRYX1AwLCBTUF9QQUNLRVRfU0VORF9DVFJMX1JFRywKKwkJ CQkgIFNQX01QRUdfSUZfRU4pOworCQlzcF9sb2FkX3BhY2tldChhbng3OHh4LCBWU0lfUEFDS0VU Uyk7CisJCXNwX3JlZ19zZXRfYml0cyhhbng3OHh4LCBUWF9QMCwgU1BfUEFDS0VUX1NFTkRfQ1RS TF9SRUcsCisJCQkJU1BfTVBFR19JRl9VRCk7CisJCXNwX3JlZ19zZXRfYml0cyhhbng3OHh4LCBU WF9QMCwgU1BfUEFDS0VUX1NFTkRfQ1RSTF9SRUcsCisJCQkJU1BfTVBFR19JRl9FTik7CisJCWJy ZWFrOworCWNhc2UgTVBFR19QQUNLRVRTOgorCQlzcF9yZWdfY2xlYXJfYml0cyhhbng3OHh4LCBU WF9QMCwgU1BfUEFDS0VUX1NFTkRfQ1RSTF9SRUcsCisJCQkJICBTUF9NUEVHX0lGX0VOKTsKKwkJ c3BfbG9hZF9wYWNrZXQoYW54Nzh4eCwgTVBFR19QQUNLRVRTKTsKKwkJc3BfcmVnX3NldF9iaXRz KGFueDc4eHgsIFRYX1AwLCBTUF9QQUNLRVRfU0VORF9DVFJMX1JFRywKKwkJCQlTUF9NUEVHX0lG X1VEKTsKKwkJc3BfcmVnX3NldF9iaXRzKGFueDc4eHgsIFRYX1AwLCBTUF9QQUNLRVRfU0VORF9D VFJMX1JFRywKKwkJCQlTUF9NUEVHX0lGX0VOKTsKKwkJYnJlYWs7CisJY2FzZSBBVURJRl9QQUNL RVRTOgorCQlzcF9yZWdfY2xlYXJfYml0cyhhbng3OHh4LCBUWF9QMCwgU1BfUEFDS0VUX1NFTkRf Q1RSTF9SRUcsCisJCQkJICBTUF9BVURfSUZfRU4pOworCQlzcF9sb2FkX3BhY2tldChhbng3OHh4 LCBBVURJRl9QQUNLRVRTKTsKKwkJc3BfcmVnX3NldF9iaXRzKGFueDc4eHgsIFRYX1AwLCBTUF9Q QUNLRVRfU0VORF9DVFJMX1JFRywKKwkJCQlTUF9BVURfSUZfVVApOworCQlzcF9yZWdfc2V0X2Jp dHMoYW54Nzh4eCwgVFhfUDAsIFNQX1BBQ0tFVF9TRU5EX0NUUkxfUkVHLAorCQkJCVNQX0FVRF9J Rl9FTik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGJv b2wgc3BfY29uZmlnX3ZpZGVvX291dHB1dChzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCkKK3sKKwlz dHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW54Nzh4eC0+Y2xpZW50LT5kZXY7CisJdTggdmFsOworCisJ c3dpdGNoIChzcC50eF92b19zdGF0ZSkgeworCWRlZmF1bHQ6CisJY2FzZSBWT19XQUlUX1ZJREVP X1NUQUJMRToKKwkJc3BfcmVnX3JlYWQoYW54Nzh4eCwgUlhfUDAsIFNQX1NZU1RFTV9TVEFUVVNf UkVHLCAmdmFsKTsKKwkJaWYgKCh2YWwgJiBTUF9UTURTX0RFX0RFVCkgJiYgKHZhbCAmIFNQX1RN RFNfQ0xPQ0tfREVUKSkgeworCQkJc3BfdHhfYndfbGNfc2VsKGFueDc4eHgpOworCQkJc3BfZW5h YmxlX3ZpZGVvX2lucHV0KGFueDc4eHgsIGZhbHNlKTsKKwkJCXNwX3BhY2tldF9hdmlfaW5pdChh bng3OHh4KTsKKwkJCXNwX2NvbmZpZ19wYWNrZXRzKGFueDc4eHgsIEFWSV9QQUNLRVRTKTsKKwkJ CXNwX3NldF9jb2xvcnNwYWNlKGFueDc4eHgpOworCQkJc3BfbHZ0dGxfYml0X21hcHBpbmcoYW54 Nzh4eCk7CisJCQlzcF9yZWdfcmVhZChhbng3OHh4LCBSWF9QMCwKKwkJCQkgICAgU1BfUEFDS0VU X1JFQ0VJVklOR19TVEFUVVNfUkVHLCAmdmFsKTsKKwkJCWlmICh2YWwgJiBTUF9WU0lfUkNWRCkK KwkJCQlzcF9oZG1pX25ld192c2lfaW50KGFueDc4eHgpOworCQkJc3BfZW5hYmxlX3ZpZGVvX2lu cHV0KGFueDc4eHgsIHRydWUpOworCQkJc3AudHhfdm9fc3RhdGUgPSBWT19XQUlUX1RYX1ZJREVP X1NUQUJMRTsKKwkJfSBlbHNlIHsKKwkJCWRldl9kYmcoZGV2LCAiSERNSSBpbnB1dCB2aWRlbyBu b3Qgc3RhYmxlIVxuIik7CisJCQlicmVhazsKKwkJfQorCS8qIGZhbGx0aHJvdWdoICovCisJY2Fz ZSBWT19XQUlUX1RYX1ZJREVPX1NUQUJMRToKKwkJLyoKKwkJICogVGhlIGZsYWcgaXMgd3JpdGUg Y2xlYXIgYW5kIGNhbiBiZSBsYXRjaGVkIGZyb20gbGFzdAorCQkgKiBzdGF0dXMuIFNvIHRoZSBm aXJzdCByZWFkIGFuZCB3cml0ZSBpcyB0byBjbGVhciB0aGUKKwkJICogcHJldmlvdXMgc3RhdHVz LgorCQkgKi8KKwkJc3BfcmVnX3JlYWQoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX1NZU1RFTV9DVFJM X0JBU0UgKyAyLCAmdmFsKTsKKwkJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFRYX1AwLCBTUF9EUF9T WVNURU1fQ1RSTF9CQVNFICsgMiwgdmFsKTsKKworCQlzcF9yZWdfcmVhZChhbng3OHh4LCBUWF9Q MCwgU1BfRFBfU1lTVEVNX0NUUkxfQkFTRSArIDIsICZ2YWwpOworCQlpZiAodmFsICYgU1BfQ0hB X1NUQSkgeworCQkJZGV2X2RiZyhkZXYsICJzdHJlYW0gY2xvY2sgbm90IHN0YWJsZSFcbiIpOwor CQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogVGhlIGZsYWcgaXMgd3JpdGUgY2xl YXIgYW5kIGNhbiBiZSBsYXRjaGVkIGZyb20KKwkJCSAqIGxhc3Qgc3RhdHVzLiBTbyB0aGUgZmly c3QgcmVhZCBhbmQgd3JpdGUgaXMgdG8KKwkJCSAqIGNsZWFyIHRoZSBwcmV2aW91cyBzdGF0dXMu CisJCQkgKi8KKwkJCXNwX3JlZ19yZWFkKGFueDc4eHgsIFRYX1AwLAorCQkJCSAgICBTUF9EUF9T WVNURU1fQ1RSTF9CQVNFICsgMywKKwkJCQkgICAgJnZhbCk7CisJCQlzcF9yZWdfd3JpdGUoYW54 Nzh4eCwgVFhfUDAsCisJCQkJICAgICBTUF9EUF9TWVNURU1fQ1RSTF9CQVNFICsgMywKKwkJCQkg ICAgIHZhbCk7CisKKwkJCXNwX3JlZ19yZWFkKGFueDc4eHgsIFRYX1AwLAorCQkJCSAgICBTUF9E UF9TWVNURU1fQ1RSTF9CQVNFICsgMywKKwkJCQkgICAgJnZhbCk7CisJCQlpZiAodmFsICYgU1Bf U1RSTV9WQUxJRCkgeworCQkJCWlmIChzcC50eF90ZXN0X2x0KQorCQkJCQlzcC50eF90ZXN0X2x0 ID0gZmFsc2U7CisJCQkJc3AudHhfdm9fc3RhdGUgPSBWT19GSU5JU0g7CisJCQl9IGVsc2Ugewor CQkJCWRldl9lcnIoZGV2LCAidmlkZW8gc3RyZWFtIG5vdCB2YWxpZCFcbiIpOworCQkJCWJyZWFr OworCQkJfQorCQl9CisJLyogZmFsbHRocm91Z2ggKi8KKwljYXNlIFZPX0ZJTklTSDoKKwkJc3Bf YmxvY2tfcG93ZXJfY3RybChhbng3OHh4LCBTUF9UWF9QV1JfQVVESU8sIGZhbHNlKTsKKwkJc3Bf aGRtaV9tdXRlX3ZpZGVvKGFueDc4eHgsIGZhbHNlKTsKKwkJc3BfdmlkZW9fbXV0ZShhbng3OHh4 LCBmYWxzZSk7CisJCXNwX3Nob3dfaW5mb3JtYXRpb24oYW54Nzh4eCk7CisJCXJldHVybiB0cnVl OworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyoqKioqKioqKioqKioqKioqKkVuZCBPdXRw dXQgdmlkZW8gcHJvY2VzcyoqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioq KioqU3RhcnQgSERDUCBwcm9jZXNzKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5l IHZvaWQgc3BfaGRjcF9lbmNyeXB0aW9uX2Rpc2FibGUoc3RydWN0IGFueDc4eHggKmFueDc4eHgp Cit7CisJc3BfcmVnX2NsZWFyX2JpdHMoYW54Nzh4eCwgVFhfUDAsIFNQX0hEQ1BfQ1RSTDBfUkVH LCBTUF9IRENQX0VOQ19FTik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzcF9oZGNwX2VuY3J5 cHRpb25fZW5hYmxlKHN0cnVjdCBhbng3OHh4ICphbng3OHh4KQoreworCXNwX3JlZ19zZXRfYml0 cyhhbng3OHh4LCBUWF9QMCwgU1BfSERDUF9DVFJMMF9SRUcsIFNQX0hEQ1BfRU5DX0VOKTsKK30K Kworc3RhdGljIHZvaWQgc3BfaHdfaGRjcF9lbmFibGUoc3RydWN0IGFueDc4eHggKmFueDc4eHgp Cit7CisJc3BfcmVnX2NsZWFyX2JpdHMoYW54Nzh4eCwgVFhfUDAsIFNQX0hEQ1BfQ1RSTDBfUkVH LAorCQkJICBTUF9IRENQX0VOQ19FTiB8IFNQX0hBUkRfQVVUSF9FTik7CisJc3BfcmVnX3NldF9i aXRzKGFueDc4eHgsIFRYX1AwLCBTUF9IRENQX0NUUkwwX1JFRywKKwkJCVNQX0hBUkRfQVVUSF9F TiB8IFNQX0JLU1ZfU1JNX1BBU1MgfAorCQkJU1BfS1NWTElTVF9WTEQgfCBTUF9IRENQX0VOQ19F Tik7CisKKwkvKgorCSAqIFNldCB0aGUgd2FpdCB0aW1pbmcgdmFsdWUgZm9yIFIwIGNoZWNraW5n IG9mIEhEQ1AgZmlyc3Qgc3RlcAorCSAqIGF1dGhlbnRpY2F0aW9uIGFmdGVyIHdyaXRlIEFLU1Yg dG8gcmVjZWl2ZXIuIERlZmF1bHQgdmFsdWUgaXMKKwkgKiAweDY0ICgxMDBtcykuCisJICovCisJ c3BfcmVnX3dyaXRlKGFueDc4eHgsIFRYX1AwLCBTUF9IRENQX1dBSVRfUjBfVElNRV9SRUcsIDB4 YjApOworCisJLyoKKwkgKiBTZXQgdGhlIHdhaXQgdGltaW5nIHZhbHVlIGZvciByZXBlYXRlciBL U1ZGSUZPIHJlYWR5IGluIEhEQ1AgZmlyc3QKKwkgKiBzdGVwIGF1dGhlbnRpY2F0aW9uLiBEZWZh dWx0IHZhbHVlIGlzIDB4OWMgKDQuMnMpCisJICovCisJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFRY X1AwLCBTUF9IRENQX1JQVFJfUkRZX1dBSVRfVElNRV9SRUcsIDB4YzgpOworfQorCitzdGF0aWMg Ym9vbCBzcF9oZGNwX3Byb2Nlc3Moc3RydWN0IGFueDc4eHggKmFueDc4eHgpCit7CisJc3RydWN0 IGRldmljZSAqZGV2ID0gJmFueDc4eHgtPmNsaWVudC0+ZGV2OworCisJc3dpdGNoIChzcC5oZGNw X3N0YXRlKSB7CisJY2FzZSBIRENQX0NBUEFCTEVfQ0hFQ0s6CisJCXNwLmhkY3BfZmFpbF9jb3Vu dCA9IDA7CisJCWlmIChpc19hbnhfZG9uZ2xlKGFueDc4eHgpKQorCQkJc3AuaGRjcF9zdGF0ZSA9 IEhEQ1BfV0FJVElOR19WSURfU1RCOworCQllbHNlCisJCQlzcC5oZGNwX3N0YXRlID0gSERDUF9I V19FTkFCTEU7CisJCWlmICghc3AuaGRjcF9lbmFibGVkKQorCQkJc3AuaGRjcF9zdGF0ZSA9IEhE Q1BfTk9UX1NVUFBPUlRFRDsKKwkJaWYgKHNwLmhkY3Bfc3RhdGUgIT0gSERDUF9XQUlUSU5HX1ZJ RF9TVEIpCisJCQlicmVhazsKKwkvKiBmYWxsdGhyb3VnaCAqLworCWNhc2UgSERDUF9XQUlUSU5H X1ZJRF9TVEI6CisJCW1zbGVlcCgxMDApOworCQlzcC5oZGNwX3N0YXRlID0gSERDUF9IV19FTkFC TEU7CisJLyogZmFsbHRocm91Z2ggKi8KKwljYXNlIEhEQ1BfSFdfRU5BQkxFOgorCQlzcF92aWRl b19tdXRlKGFueDc4eHgsIHRydWUpOworCQlzcF9jbGVhbl9oZGNwX3N0YXR1cyhhbng3OHh4KTsK KwkJc3BfYmxvY2tfcG93ZXJfY3RybChhbng3OHh4LCBTUF9UWF9QV1JfSERDUCwgZmFsc2UpOwor CQltc2xlZXAoMjApOworCQlzcF9ibG9ja19wb3dlcl9jdHJsKGFueDc4eHgsIFNQX1RYX1BXUl9I RENQLCB0cnVlKTsKKwkJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFRYX1AyLCBTUF9DT01NT05fSU5U X01BU0tfQkFTRSArIDIsCisJCQkgICAgIDB4MDEpOworCQltc2xlZXAoNTApOworCQlzcF9od19o ZGNwX2VuYWJsZShhbng3OHh4KTsKKwkJc3AuaGRjcF9zdGF0ZSA9IEhEQ1BfV0FJVElOR19GSU5J U0g7CisJLyogZmFsbHRocm91Z2ggKi8KKwljYXNlIEhEQ1BfV0FJVElOR19GSU5JU0g6CisJCWJy ZWFrOworCWNhc2UgSERDUF9GSU5JU0g6CisJCXNwX2hkY3BfZW5jcnlwdGlvbl9lbmFibGUoYW54 Nzh4eCk7CisJCXNwX2hkbWlfbXV0ZV92aWRlbyhhbng3OHh4LCBmYWxzZSk7CisJCXNwX3ZpZGVv X211dGUoYW54Nzh4eCwgZmFsc2UpOworCQlzcC5oZGNwX3N0YXRlID0gSERDUF9DQVBBQkxFX0NI RUNLOworCQlkZXZfZGJnKGRldiwgIkhEQ1AgYXV0aGVudGljYXRpb24gcGFzc1xuIik7CisJCXJl dHVybiB0cnVlOworCWNhc2UgSERDUF9GQUlMRUQ6CisJCWlmIChzcC5oZGNwX2ZhaWxfY291bnQg PiA1KSB7CisJCQlzcF9yZWdfaGFyZHdhcmVfcmVzZXQoYW54Nzh4eCk7CisJCQlzcC5oZGNwX3N0 YXRlID0gSERDUF9DQVBBQkxFX0NIRUNLOworCQkJc3AuaGRjcF9mYWlsX2NvdW50ID0gMDsKKwkJ CWRldl9kYmcoZGV2LCAiSERDUCBhdXRoZW50aWNhdGlvbiBmYWlsZWRcbiIpOworCQl9IGVsc2Ug eworCQkJc3AuaGRjcF9mYWlsX2NvdW50Kys7CisJCQlzcC5oZGNwX3N0YXRlID0gSERDUF9XQUlU SU5HX1ZJRF9TVEI7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwljYXNlIEhEQ1BfTk9UX1NV UFBPUlRFRDoKKwkJZGV2X2RiZyhkZXYsICJzaW5rIGlzIG5vdCBjYXBhYmxlIEhEQ1BcbiIpOwor CQlzcF9ibG9ja19wb3dlcl9jdHJsKGFueDc4eHgsIFNQX1RYX1BXUl9IRENQLCBmYWxzZSk7CisJ CXNwX3ZpZGVvX211dGUoYW54Nzh4eCwgZmFsc2UpOworCQlzcC5oZGNwX3N0YXRlID0gSERDUF9D QVBBQkxFX0NIRUNLOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisK Ky8qKioqKioqKioqKioqKioqKipFbmQgSERDUCBwcm9jZXNzKioqKioqKioqKioqKioqKioqKiov CisKKy8qKioqKioqKioqKioqKioqKipTdGFydCBBdWRpbyBwcm9jZXNzKioqKioqKioqKioqKioq KioqKiovCitzdGF0aWMgdm9pZCBzcF9wYWNrZXRfYXVkaW9faW5pdChzdHJ1Y3QgYW54Nzh4eCAq YW54Nzh4eCkKK3sKKwlpbnQgaTsKKwl1OCB2YWw7CisKKwlzcC50eF9wYWNrZXRfYXVkaW8uaW5m b2ZyYW1lLnR5cGUgPSBIRE1JX0lORk9GUkFNRV9UWVBFX0FVRElPOworCXNwLnR4X3BhY2tldF9h dWRpby5pbmZvZnJhbWUudmVyc2lvbiA9IDE7CisJc3AudHhfcGFja2V0X2F1ZGlvLmluZm9mcmFt ZS5sZW5ndGggPSBIRE1JX0FVRElPX0lORk9GUkFNRV9TSVpFOworCisJZm9yIChpID0gMDsgaSA8 IHNwLnR4X3BhY2tldF9hdWRpby5pbmZvZnJhbWUubGVuZ3RoOyBpKyspIHsKKwkJc3BfcmVnX3Jl YWQoYW54Nzh4eCwgUlhfUDEsIFNQX0FVRF9JTkZPRlJBTUVfREFUQV9CQVNFICsgaSwKKwkJCSAg ICAmdmFsKTsKKwkJc3AudHhfcGFja2V0X2F1ZGlvLmRhdGFbaV0gPSB2YWw7CisJfQorfQorCitz dGF0aWMgdm9pZCBzcF9lbmFibGVfYXVkaW9fb3V0cHV0KHN0cnVjdCBhbng3OHh4ICphbng3OHh4 LCBib29sIGVuYWJsZSkKK3sKKwl1OCB2YWw7CisKKwlzcF9yZWdfY2xlYXJfYml0cyhhbng3OHh4 LCBUWF9QMCwgU1BfRFBfQVVESU9fQ1RSTF9SRUcsIFNQX0FVRF9FTik7CisJaWYgKGVuYWJsZSkg eworCQlzcF9wYWNrZXRfYXVkaW9faW5pdChhbng3OHh4KTsKKwkJc3BfY29uZmlnX3BhY2tldHMo YW54Nzh4eCwgQVVESUZfUEFDS0VUUyk7CisKKwkJc3BfcmVnX3JlYWQoYW54Nzh4eCwgUlhfUDAs IFNQX0hETUlfU1RBVFVTX1JFRywgJnZhbCk7CisJCWlmICh2YWwgJiBTUF9IRE1JX0FVRF9MQVlP VVQpIHsKKwkJCXNwX3JlZ19yZWFkKGFueDc4eHgsIFJYX1AxLCBTUF9BVURfSU5GT0ZSQU1FX0RB VEFfQkFTRSwKKwkJCQkgICAgJnZhbCk7CisJCQlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDIs IFNQX0FVRF9DSF9TVEFUVVNfQkFTRSArIDUsCisJCQkJICAgICAodmFsICYgMHgwNykgPDwgNSB8 IFNQX0FVRElPX0xBWU9VVCk7CisJCX0gZWxzZSB7CisJCQlzcF9yZWdfd3JpdGUoYW54Nzh4eCwg VFhfUDIsIFNQX0FVRF9DSF9TVEFUVVNfQkFTRSArIDUsCisJCQkJICAgICBTUF9JMlNfQ0hfTlVN XzIgJiB+U1BfQVVESU9fTEFZT1VUKTsKKwkJfQorCQlzcF9yZWdfc2V0X2JpdHMoYW54Nzh4eCwg VFhfUDAsIFNQX0RQX0FVRElPX0NUUkxfUkVHLAorCQkJCVNQX0FVRF9FTik7CisJfSBlbHNlIHsK KwkJc3BfcmVnX2NsZWFyX2JpdHMoYW54Nzh4eCwgVFhfUDAsIFNQX1BBQ0tFVF9TRU5EX0NUUkxf UkVHLAorCQkJCSAgU1BfQVVEX0lGX0VOKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc3BfY2FsY3Vs YXRlX2F1ZGlvX21fdmFsdWUoc3RydWN0IGFueDc4eHggKmFueDc4eHgpCit7CisJdTggdmFsOwor CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbng3OHh4LT5jbGllbnQtPmRldjsKKwl1bnNpZ25lZCBs b25nIG1fYXVkLCBsc19jbGsgPSAwOworCXVuc2lnbmVkIGxvbmcgYXVkX2ZyZXEgPSAwOworCisJ c3BfcmVnX3JlYWQoYW54Nzh4eCwgUlhfUDAsIFNQX0FVRF9TUERJRl9DSF9TVEFUVVNfQkFTRSAr IDQsICZ2YWwpOworCisJc3dpdGNoICh2YWwgJiBTUF9GU19GUkVRX01BU0spIHsKKwljYXNlIFNQ X0ZTX0ZSRVFfNDQxMDBIWjoKKwkJYXVkX2ZyZXEgPSA0NDEwMDsKKwkJYnJlYWs7CisJY2FzZSBT UF9GU19GUkVRXzQ4MDAwSFo6CisJCWF1ZF9mcmVxID0gNDgwMDA7CisJCWJyZWFrOworCWNhc2Ug U1BfRlNfRlJFUV8zMjAwMEhaOgorCQlhdWRfZnJlcSA9IDMyMDAwOworCQlicmVhazsKKwljYXNl IFNQX0ZTX0ZSRVFfODgyMDBIWjoKKwkJYXVkX2ZyZXEgPSA4ODIwMDsKKwkJYnJlYWs7CisJY2Fz ZSBTUF9GU19GUkVRXzk2MDAwSFo6CisJCWF1ZF9mcmVxID0gOTYwMDA7CisJCWJyZWFrOworCWNh c2UgU1BfRlNfRlJFUV8xNzY0MDBIWjoKKwkJYXVkX2ZyZXEgPSAxNzY0MDA7CisJCWJyZWFrOwor CWNhc2UgU1BfRlNfRlJFUV8xOTIwMDBIWjoKKwkJYXVkX2ZyZXEgPSAxOTIwMDA7CisJCWJyZWFr OworCWRlZmF1bHQ6CisJCWRldl9lcnIoZGV2LCAiaW52YWxpZCBzYW1wbGluZyBjbG9jayBmcmVx dWVuY3kgJWRcbiIsCisJCQl2YWwgJiBTUF9GU19GUkVRX01BU0spOworCQlyZXR1cm4gLTE7CisJ fQorCisJc3dpdGNoIChzcF9nZXRfbGlua19idyhhbng3OHh4KSkgeworCWNhc2UgU1BfTElOS18x UDYyRzoKKwkJbHNfY2xrID0gMTYyMDAwOworCQlicmVhazsKKwljYXNlIFNQX0xJTktfMlA3RzoK KwkJbHNfY2xrID0gMjcwMDAwOworCQlicmVhazsKKwljYXNlIFNQX0xJTktfNVA0RzoKKwkJbHNf Y2xrID0gNTQwMDAwOworCQlicmVhazsKKwljYXNlIFNQX0xJTktfNlA3NUc6CisJCWxzX2NsayA9 IDY3NTAwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycihkZXYsICJpbnZhbGlkIG1h aW4gbGluayBiYW5kd2lkdGggc2V0dGluZ1xuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlkZXZf ZGJnKGRldiwgImF1ZF9mcmVxID0gJWxkICwgTFNfQ0xLID0gJWxkXG4iLCBhdWRfZnJlcSwgbHNf Y2xrKTsKKworCW1fYXVkID0gKCgoNTEyICogYXVkX2ZyZXEpIC8gbHNfY2xrKSAqIDMyNzY4KSAv IDEwMDA7CisJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFRYX1AxLCBTUF9BVURfSU5URVJGQUNFX0NU Ukw0X1JFRywgbV9hdWQgJiAweGZmKTsKKwltX2F1ZCA9IG1fYXVkID4+IDg7CisJc3BfcmVnX3dy aXRlKGFueDc4eHgsIFRYX1AxLCBTUF9BVURfSU5URVJGQUNFX0NUUkw1X1JFRywgbV9hdWQgJiAw eGZmKTsKKwlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDEsIFNQX0FVRF9JTlRFUkZBQ0VfQ1RS TDZfUkVHLCAweDAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzcF9jb25maWdf YXVkaW8oc3RydWN0IGFueDc4eHggKmFueDc4eHgpCit7CisJaW50IGk7CisJdTggdmFsOworCisJ c3BfYmxvY2tfcG93ZXJfY3RybChhbng3OHh4LCBTUF9UWF9QV1JfQVVESU8sIHRydWUpOworCisJ c3BfcmVnX3JlYWQoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX01BSU5fTElOS19CV19TRVRfUkVHLCAm dmFsKTsKKwlpZiAodmFsICYgU1BfSU5JVElBTF9TTElNX01fQVVEX1NFTCkKKwkJaWYgKHNwX2Nh bGN1bGF0ZV9hdWRpb19tX3ZhbHVlKGFueDc4eHgpKQorCQkJcmV0dXJuOworCisJc3BfcmVnX2Ns ZWFyX2JpdHMoYW54Nzh4eCwgVFhfUDEsIFNQX0FVRF9JTlRFUkZBQ0VfQ1RSTDBfUkVHLAorCQkJ ICBTUF9BVURfSU5URVJGQUNFX0RJU0FCTEUpOworCisJc3BfcmVnX3NldF9iaXRzKGFueDc4eHgs IFRYX1AxLCBTUF9BVURfSU5URVJGQUNFX0NUUkwyX1JFRywKKwkJCVNQX01fQVVEX0FESlVTVF9T VCk7CisKKwlzcF9yZWdfcmVhZChhbng3OHh4LCBSWF9QMCwgU1BfSERNSV9TVEFUVVNfUkVHLCAm dmFsKTsKKwlpZiAodmFsICYgU1BfSERNSV9BVURfTEFZT1VUKQorCQlzcF9yZWdfc2V0X2JpdHMo YW54Nzh4eCwgVFhfUDIsIFNQX0FVRF9DSF9TVEFUVVNfQkFTRSArIDUsCisJCQkJU1BfSTJTX0NI X05VTV84IHwgU1BfQVVESU9fTEFZT1VUKTsKKwllbHNlCisJCXNwX3JlZ19jbGVhcl9iaXRzKGFu eDc4eHgsIFRYX1AyLCBTUF9BVURfQ0hfU1RBVFVTX0JBU0UgKyA1LAorCQkJCSAgU1BfSTJTX0NI QU5ORUxfTlVNX01BU0sgfCBTUF9BVURJT19MQVlPVVQpOworCisJLyogdHJhbnNmZXIgYXVkaW8g Y2hhbm5lbCBzdGF0dXMgZnJvbSBIRE1JIFJ4IHRvIFNsaW1wb3J0IFR4ICovCisJZm9yIChpID0g MTsgaSA8PSBTUF9BVURfQ0hfU1RBVFVTX1JFR19OVU07IGkrKykgeworCQlzcF9yZWdfcmVhZChh bng3OHh4LCBSWF9QMCwgU1BfQVVEX1NQRElGX0NIX1NUQVRVU19CQVNFICsgaSwKKwkJCSAgICAm dmFsKTsKKwkJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFRYX1AyLCBTUF9BVURfQ0hfU1RBVFVTX0JB U0UgKyBpLAorCQkJICAgICB2YWwpOworCX0KKworCS8qIGVuYWJsZSBhdWRpbyAqLworCXNwX2Vu YWJsZV9hdWRpb19vdXRwdXQoYW54Nzh4eCwgdHJ1ZSk7Cit9CisKK3N0YXRpYyBib29sIHNwX2Nv bmZpZ19hdWRpb19vdXRwdXQoc3RydWN0IGFueDc4eHggKmFueDc4eHgpCit7CisJdTggdmFsOwor CisJc3dpdGNoIChzcC50eF9hb19zdGF0ZSkgeworCWRlZmF1bHQ6CisJY2FzZSBBT19JTklUOgor CWNhc2UgQU9fQ1RTX1JDVl9JTlQ6CisJY2FzZSBBT19BVURJT19SQ1ZfSU5UOgorCQlzcF9yZWdf cmVhZChhbng3OHh4LCBSWF9QMCwgU1BfSERNSV9TVEFUVVNfUkVHLCAmdmFsKTsKKwkJaWYgKCF2 YWwgJiBTUF9IRE1JX01PREUpIHsKKwkJCXNwLnR4X2FvX3N0YXRlID0gQU9fSU5JVDsKKwkJCXJl dHVybiB0cnVlOworCQl9CisJCWJyZWFrOworCWNhc2UgQU9fUkNWX0lOVF9GSU5JU0g6CisJCWlm IChzcC5hdWRpb19zdGFibGVfY291bnQrKyA+IDIpIHsKKwkJCXNwLnR4X2FvX3N0YXRlID0gQU9f T1VUUFVUOworCQl9IGVsc2UgeworCQkJc3AudHhfYW9fc3RhdGUgPSBBT19JTklUOworCQkJYnJl YWs7CisJCX0KKwkvKiBmYWxsdGhyb3VnaCAqLworCWNhc2UgQU9fT1VUUFVUOgorCQlzcC5hdWRp b19zdGFibGVfY291bnQgPSAwOworCQlzcC50eF9hb19zdGF0ZSA9IEFPX0lOSVQ7CisJCXNwX3Zp ZGVvX211dGUoYW54Nzh4eCwgZmFsc2UpOworCQlzcF9oZG1pX211dGVfYXVkaW8oYW54Nzh4eCwg ZmFsc2UpOworCQlzcF9jb25maWdfYXVkaW8oYW54Nzh4eCk7CisJCXJldHVybiB0cnVlOworCX0K KworCXJldHVybiBmYWxzZTsKK30KKworLyoqKioqKioqKioqKioqKioqKkVuZCBBdWRpbyBwcm9j ZXNzKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIHNwX2luaXRpYWxpemF0aW9u KHN0cnVjdCBhbng3OHh4ICphbng3OHh4KQoreworCXNwLnJlYWRfZWRpZF9mbGFnID0gZmFsc2U7 CisKKwkvKiBQb3dlciBvbiBhbGwgbW9kdWxlcyAqLworCXNwX3JlZ193cml0ZShhbng3OHh4LCBU WF9QMiwgU1BfUE9XRVJET1dOX0NUUkxfUkVHLCAweDAwKTsKKwkvKiBEcml2ZXIgVmVyc2lvbiAq LworCXNwX3JlZ193cml0ZShhbng3OHh4LCBUWF9QMSwgU1BfRldfVkVSX1JFRywgRldfVkVSU0lP Tik7CisJc3BfaGRtaV9pbml0aWFsaXphdGlvbihhbng3OHh4KTsKKwlzcF90eF9pbml0aWFsaXph dGlvbihhbng3OHh4KTsKKwltc2xlZXAoMjAwKTsKK30KKworLyoKKyAqIEludGVycnVwdCByZWNl aXZlciBmdW5jdGlvbiwgZ2V0cyB0aGUgc2VydmljZSBpbnRlcnJ1cHRzIGFuZCB1cGRhdGVzIHRo ZQorICogc3RhdHVzIG9mIHRoZSBpbnRlcnJ1cHRzIHNvIHRoYXQgY29ycmVjdCBpbnRlcnJ1cHQg c2VydmljZSByb3V0aW5lcyBjYW4KKyAqIGJlIGNhbGxlZCBpbiB0aGUgU2xpbVBvcnQgdGFzayBo YW5kbGVyIGZ1bmN0aW9uLgorICovCitzdGF0aWMgdm9pZCBzcF9pbnRfcmVjZWl2ZXIoc3RydWN0 IGFueDc4eHggKmFueDc4eHgpCit7CisJaW50IGk7CisKKwkvKiBDb21tb24gSW50ZXJydXB0IFN0 YXR1cyBSZWdpc3RlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzcC5jb21tb25f aW50KTsgaSsrKSB7CisJCXNwX3JlZ19yZWFkKGFueDc4eHgsIFRYX1AyLCBTUF9DT01NT05fSU5U X1NUQVRVU19CQVNFICsgMSArIGksCisJCQkgICAgJnNwLmNvbW1vbl9pbnRbaV0pOworCQlzcF9y ZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDIsIFNQX0NPTU1PTl9JTlRfU1RBVFVTX0JBU0UgKyAxICsg aSwKKwkJCSAgICAgc3AuY29tbW9uX2ludFtpXSk7CisJfQorCisJLyogRGlzcGxheSBQb3J0IElu dGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8KKwlzcF9yZWdfcmVhZChhbng3OHh4LCBUWF9QMiwg U1BfRFBfSU5UX1NUQVRVU19SRUcsICZzcC5kcF9pbnQpOworCXNwX3JlZ193cml0ZShhbng3OHh4 LCBUWF9QMiwgU1BfRFBfSU5UX1NUQVRVU19SRUcsIHNwLmRwX2ludCk7CisKKwkvKiBJbnRlcnJ1 cHQgU3RhdHVzIFJlZ2lzdGVycyAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNwLnNw X2hkbWlfaW50KTsgaSsrKSB7CisJCXNwX3JlZ19yZWFkKGFueDc4eHgsIFJYX1AwLCBTUF9JTlRf U1RBVFVTMV9SRUcgKyBpLAorCQkJICAgICZzcC5zcF9oZG1pX2ludFtpXSk7CisJCXNwX3JlZ193 cml0ZShhbng3OHh4LCBSWF9QMCwgU1BfSU5UX1NUQVRVUzFfUkVHICsgaSwKKwkJCSAgICAgc3Au c3BfaGRtaV9pbnRbaV0pOworCX0KK30KKworLyoqKioqKioqKioqKioqKioqKlN0YXJ0IHRhc2sg cHJvY2VzcyoqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgc3BfcGxsX2NoYW5nZWRf aW50X2hhbmRsZXIoc3RydWN0IGFueDc4eHggKmFueDc4eHgpCit7CisJc3RydWN0IGRldmljZSAq ZGV2ID0gJmFueDc4eHgtPmNsaWVudC0+ZGV2OworCisJaWYgKHNwLnR4X3N5c3RlbV9zdGF0ZSA+ PSBTVEFURV9MSU5LX1RSQUlOSU5HKSB7CisJCWlmICghc3BfZ2V0X3BsbF9sb2NrX3N0YXR1cyhh bng3OHh4KSkgeworCQkJZGV2X2RiZyhkZXYsICJQTEwgbm90IGxvY2shXG4iKTsKKwkJCXNwX3Nl dF9zeXN0ZW1fc3RhdGUoYW54Nzh4eCwgU1RBVEVfTElOS19UUkFJTklORyk7CisJCX0KKwl9Cit9 CisKK3N0YXRpYyB2b2lkIHNwX3BoeV9hdXRvX3Rlc3Qoc3RydWN0IGFueDc4eHggKmFueDc4eHgp Cit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmFueDc4eHgtPmNsaWVudC0+ZGV2OworCXU4IGJf c3c7CisJdTggYnVmWzE2XTsKKwlpbnQgaTsKKworCS8qIERQQ0QgMHgyMTkgVEVTVF9MSU5LX1JB VEUgKi8KKwlzcF9hdXhfZHBjZHJlYWRfYnl0ZXMoYW54Nzh4eCwgMHgwLCAweDAyLCAweDE5LCAx LCBidWYpOworCWRldl9kYmcoZGV2LCAiRFBDRDogMHgwMDIxOSA9ICUuMnhcbiIsIGJ1ZlswXSk7 CisJc3dpdGNoIChidWZbMF0pIHsKKwljYXNlIFNQX0xJTktfMVA2Mkc6CisJY2FzZSBTUF9MSU5L XzJQN0c6CisJY2FzZSBTUF9MSU5LXzVQNEc6CisJY2FzZSBTUF9MSU5LXzZQNzVHOgorCQlzcF9z ZXRfbGlua19idyhhbng3OHh4LCBidWZbMF0pOworCQlzcC50eF90ZXN0X2J3ID0gYnVmWzBdOwor CQlicmVhazsKKwlkZWZhdWx0OgorCQlzcF9zZXRfbGlua19idyhhbng3OHh4LCBTUF9MSU5LXzZQ NzVHKTsKKwkJc3AudHhfdGVzdF9idyA9IFNQX0xJTktfNlA3NUc7CisJCWJyZWFrOworCX0KKwor CS8qIERQQ0QgMHgyNDggUEhZX1RFU1RfUEFUVEVSTiAqLworCXNwX2F1eF9kcGNkcmVhZF9ieXRl cyhhbng3OHh4LCAweDAsIDB4MDIsIDB4NDgsIDEsIGJ1Zik7CisJZGV2X2RiZyhkZXYsICJEUENE OiAweDAwMjQ4ID0gJS4yeFxuIiwgYnVmWzBdKTsKKwlzd2l0Y2ggKGJ1ZlswXSkgeworCWNhc2Ug MDoKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDAsIFNQ X0RQX1RSQUlOSU5HX1BBVFRFUk5fU0VUX1JFRywKKwkJCSAgICAgMHgwNCk7CisJCWJyZWFrOwor CWNhc2UgMjoKKwkJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFRYX1AwLCBTUF9EUF9UUkFJTklOR19Q QVRURVJOX1NFVF9SRUcsCisJCQkgICAgIDB4MDgpOworCQlicmVhazsKKwljYXNlIDM6CisJCXNw X3JlZ193cml0ZShhbng3OHh4LCBUWF9QMCwgU1BfRFBfVFJBSU5JTkdfUEFUVEVSTl9TRVRfUkVH LAorCQkJICAgICAweDBjKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlzcF9hdXhfZHBjZHJlYWRf Ynl0ZXMoYW54Nzh4eCwgMHgwMCwgMHgwMiwgMHg1MCwgMTAsCisJCQkJICAgICAgYnVmKTsKKwkJ Zm9yIChpID0gMDsgaSA8IFNQX0RQX0xUXzgwQklUX1BBVFRFUk5fUkVHX05VTTsgaSsrKSB7CisJ CQlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDEsCisJCQkJICAgICBTUF9EUF9MVF84MEJJVF9Q QVRURVJOMF9SRUcgKyBpLAorCQkJCSAgICAgYnVmWzBdKTsKKwkJfQorCQlzcF9yZWdfd3JpdGUo YW54Nzh4eCwgVFhfUDAsIFNQX0RQX1RSQUlOSU5HX1BBVFRFUk5fU0VUX1JFRywKKwkJCSAgICAg MHgzMCk7CisJCWJyZWFrOworCWNhc2UgNToKKwkJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFRYX1Aw LCBTUF9EUF9DRVBfVFJBSU5JTkdfQ1RSTDBfUkVHLAorCQkJICAgICAweDAwKTsKKwkJc3BfcmVn X3dyaXRlKGFueDc4eHgsIFRYX1AwLCBTUF9EUF9DRVBfVFJBSU5JTkdfQ1RSTDFfUkVHLAorCQkJ ICAgICAweDAxKTsKKwkJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFRYX1AwLCBTUF9EUF9UUkFJTklO R19QQVRURVJOX1NFVF9SRUcsCisJCQkgICAgIDB4MTQpOworCQlicmVhazsKKwl9CisKKwlzcF9h dXhfZHBjZHJlYWRfYnl0ZXMoYW54Nzh4eCwgMHgwMCwgMHgwMCwgMHgwMywgMSwgYnVmKTsKKwlk ZXZfZGJnKGRldiwgIkRQQ0Q6IDB4MDAwMDMgPSAlLjJ4XG4iLCBidWZbMF0pOworCWlmIChidWZb MF0gJiAweDAxKQorCQlzcF9jb25maWdfc3NjKGFueDc4eHgsIFNTQ19ERVBfNDAwMFBQTSk7CisJ ZWxzZQorCQlzcF9kb3duc3BlYWRpbmdfZW5hYmxlKGFueDc4eHgsIGZhbHNlKTsKKworCS8qIGdl dCBzd2luZyBhbmQgZW1waGFzaXMgYWRqdXN0IHJlcXVlc3QgKi8KKwlzcF9yZWdfcmVhZChhbng3 OHh4LCBUWF9QMCwgU1BfRFBfTEFORTBfTFRfQ1RSTF9SRUcsICZiX3N3KTsKKworCXNwX2F1eF9k cGNkcmVhZF9ieXRlcyhhbng3OHh4LCAweDAwLCAweDAyLCAweDA2LCAxLCBidWYpOworCWRldl9k YmcoZGV2LCAiRFBDRDogMHgwMDIwNiA9ICUuMnhcbiIsIGJ1ZlswXSk7CisJc3dpdGNoIChidWZb MF0gJiAweDBmKSB7CisJY2FzZSAweDAwOgorCWNhc2UgMHgwMToKKwljYXNlIDB4MDI6CisJY2Fz ZSAweDAzOgorCQlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX0xBTkUwX0xUX0NU UkxfUkVHLAorCQkJICAgICAoYl9zdyAmIH5TUF9UWF9TV19TRVRfTUFTSykgfCAoYnVmWzBdICYg MHgwZikpOworCQlicmVhazsKKwljYXNlIDB4MDQ6CisJY2FzZSAweDA1OgorCWNhc2UgMHgwNjoK KwkJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFRYX1AwLCBTUF9EUF9MQU5FMF9MVF9DVFJMX1JFRywK KwkJCSAgICAgKGJfc3cgJiB+U1BfVFhfU1dfU0VUX01BU0spIHwKKwkJCSAgICAgKChidWZbMF0g JiAweDBmKSArIDQpKTsKKwkJYnJlYWs7CisJY2FzZSAweDA4OgorCQlzcF9yZWdfd3JpdGUoYW54 Nzh4eCwgVFhfUDAsIFNQX0RQX0xBTkUwX0xUX0NUUkxfUkVHLAorCQkJICAgICAoYl9zdyAmIH5T UF9UWF9TV19TRVRfTUFTSykgfCAweDEwKTsKKwkJYnJlYWs7CisJY2FzZSAweDA5OgorCQlzcF9y ZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX0xBTkUwX0xUX0NUUkxfUkVHLAorCQkJICAg ICAoYl9zdyAmIH5TUF9UWF9TV19TRVRfTUFTSykgfCAweDExKTsKKwkJYnJlYWs7CisJY2FzZSAw eDBjOgorCQlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX0xBTkUwX0xUX0NUUkxf UkVHLAorCQkJICAgICAoYl9zdyAmIH5TUF9UWF9TV19TRVRfTUFTSykgfCAweDE4KTsKKwkJYnJl YWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBzcF9ocGRfaXJx X3Byb2Nlc3Moc3RydWN0IGFueDc4eHggKmFueDc4eHgpCit7CisJc3RydWN0IGRldmljZSAqZGV2 ID0gJmFueDc4eHgtPmNsaWVudC0+ZGV2OworCXU4IHZhbDsKKwl1OCB0ZXN0X3ZlY3RvcjsKKwl1 OCBidWZbNl07CisKKwlzcF9hdXhfZHBjZHJlYWRfYnl0ZXMoYW54Nzh4eCwgMHgwMCwgMHgwMiwg MHgwMCwgNiwgYnVmKTsKKwlkZXZfZGJnKGRldiwgImdldCBIUEQgSVJRICV4XG4iLCBidWZbMV0p OworCisJaWYgKGJ1ZlsxXSAhPSAwKQorCQlzcF9hdXhfZHBjZHdyaXRlX2J5dGVzKGFueDc4eHgs IDB4MDAsIDB4MDIsCisJCQkJICAgICAgIFNQX0RQQ0RfU0VSVklDRV9JUlFfVkVDVE9SLCAxLAor CQkJCSAgICAgICAmYnVmWzFdKTsKKworCS8qIEhEQ1AgSVJRICovCisJaWYgKChidWZbMV0gJiBT UF9DUF9JUlEpICYmCisJICAgIChzcC5oZGNwX3N0YXRlID4gSERDUF9XQUlUSU5HX0ZJTklTSCB8 fAorCSAgICAgc3AudHhfc3lzdGVtX3N0YXRlID49IFNUQVRFX0hEQ1BfQVVUSCkpIHsKKwkJc3Bf YXV4X2RwY2RyZWFkX2J5dGVzKGFueDc4eHgsIDB4MDYsIDB4ODAsIDB4MjksIDEsCisJCQkJICAg ICAgJnZhbCk7CisJCWlmICh2YWwgJiAweDA0KSB7CisJCQlpZiAoIXNwX2hkY3BfcmVwZWF0ZXJf bW9kZShhbng3OHh4KSkgeworCQkJCXNwX3NldF9zeXN0ZW1fc3RhdGUoYW54Nzh4eCwgU1RBVEVf SERDUF9BVVRIKTsKKwkJCQlzcF9jbGVhbl9oZGNwX3N0YXR1cyhhbng3OHh4KTsKKwkJCX0gZWxz ZSB7CisJCQkJc3AucmVwZWF0ZXJfc3RhdGUgPSBIRENQX0VSUk9SOworCQkJfQorCQkJZGV2X2Ri ZyhkZXYsICJDUF9JUlEsIEhEQ1Agc3luYyBsb3N0LlxuIik7CisJCX0KKwl9CisKKwkvKiBQSFkg YW5kIExpbmsgQ1RTIHRlc3QgKi8KKwlpZiAoYnVmWzFdICYgU1BfVEVTVF9JUlEpIHsKKwkJc3Bf YXV4X2RwY2RyZWFkX2J5dGVzKGFueDc4eHgsIDB4MDAsIDB4MDIsIDB4MTgsIDEsCisJCQkJICAg ICAgJnRlc3RfdmVjdG9yKTsKKworCQlpZiAodGVzdF92ZWN0b3IgJiAweDAxKSB7CisJCQlzcC50 eF90ZXN0X2x0ID0gdHJ1ZTsKKworCQkJc3BfYXV4X2RwY2RyZWFkX2J5dGVzKGFueDc4eHgsIDB4 MDAsIDB4MDIsIDB4MTksIDEsCisJCQkJCSAgICAgICZ2YWwpOworCQkJc3dpdGNoICh2YWwpIHsK KwkJCWNhc2UgU1BfTElOS18xUDYyRzoKKwkJCWNhc2UgU1BfTElOS18yUDdHOgorCQkJY2FzZSBT UF9MSU5LXzVQNEc6CisJCQljYXNlIFNQX0xJTktfNlA3NUc6CisJCQkJc3Bfc2V0X2xpbmtfYnco YW54Nzh4eCwgdmFsKTsKKwkJCQlzcC50eF90ZXN0X2J3ID0gdmFsOworCQkJCWJyZWFrOworCQkJ ZGVmYXVsdDoKKwkJCQlzcF9zZXRfbGlua19idyhhbng3OHh4LCBTUF9MSU5LXzZQNzVHKTsKKwkJ CQlzcC50eF90ZXN0X2J3ID0gU1BfTElOS182UDc1RzsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJ ZGV2X2RiZyhkZXYsICJUZXN0IGJhbmR3aWR0aCAlLjJ4XG4iLCBzcC50eF90ZXN0X2J3KTsKKwor CQkJc3BfYXV4X2RwY2RyZWFkX2J5dGVzKGFueDc4eHgsIDB4MDAsIDB4MDIsIDB4NjAsIDEsCisJ CQkJCSAgICAgICZ2YWwpOworCQkJdmFsID0gdmFsIHwgU1BfVEVTVF9BQ0s7CisJCQlzcF9hdXhf ZHBjZHdyaXRlX2J5dGVzKGFueDc4eHgsIDB4MDAsIDB4MDIsIDB4NjAsIDEsCisJCQkJCSAgICAg ICAmdmFsKTsKKworCQkJZGV2X2RiZyhkZXYsICJTZXQgVEVTVF9BQ0shXG4iKTsKKwkJCWlmIChz cC50eF9zeXN0ZW1fc3RhdGUgPj0gU1RBVEVfTElOS19UUkFJTklORykgeworCQkJCXNwLnR4X2x0 X3N0YXRlID0gTFRfSU5JVDsKKwkJCQlzcF9zZXRfc3lzdGVtX3N0YXRlKGFueDc4eHgsCisJCQkJ CQkgICAgU1RBVEVfTElOS19UUkFJTklORyk7CisJCQl9CisJCQlkZXZfZGJnKGRldiwgIklSUTog dGVzdC1MVCByZXF1ZXN0IVxuIik7CisJCX0KKworCQlpZiAodGVzdF92ZWN0b3IgJiAweDAyKSB7 CisJCQlzcF9hdXhfZHBjZHJlYWRfYnl0ZXMoYW54Nzh4eCwgMHgwMCwgMHgwMiwgMHg2MCwgMSwK KwkJCQkJICAgICAgJnZhbCk7CisJCQl2YWwgPSB2YWwgfCBTUF9URVNUX0FDSzsKKwkJCXNwX2F1 eF9kcGNkd3JpdGVfYnl0ZXMoYW54Nzh4eCwgMHgwMCwgMHgwMiwgMHg2MCwgMSwKKwkJCQkJICAg ICAgICZ2YWwpOworCQl9CisJCWlmICh0ZXN0X3ZlY3RvciAmIDB4MDQpIHsKKwkJCWlmIChzcC50 eF9zeXN0ZW1fc3RhdGUgPiBTVEFURV9QQVJTRV9FRElEKQorCQkJCXNwX3NldF9zeXN0ZW1fc3Rh dGUoYW54Nzh4eCwgU1RBVEVfUEFSU0VfRURJRCk7CisJCQlzcC50eF90ZXN0X2VkaWQgPSB0cnVl OworCQkJZGV2X2RiZyhkZXYsICJ0ZXN0IEVESUQgUmVxdWVzdGVkIVxuIik7CisJCX0KKworCQlp ZiAodGVzdF92ZWN0b3IgJiAweDA4KSB7CisJCQlzcC50eF90ZXN0X2x0ID0gdHJ1ZTsKKworCQkJ c3BfcGh5X2F1dG9fdGVzdChhbng3OHh4KTsKKworCQkJc3BfYXV4X2RwY2RyZWFkX2J5dGVzKGFu eDc4eHgsIDB4MDAsIDB4MDIsIDB4NjAsIDEsCisJCQkJCSAgICAgICZ2YWwpOworCQkJdmFsID0g dmFsIHwgMHgwMTsKKwkJCXNwX2F1eF9kcGNkd3JpdGVfYnl0ZXMoYW54Nzh4eCwgMHgwMCwgMHgw MiwgMHg2MCwgMSwKKwkJCQkJICAgICAgICZ2YWwpOworCQl9CisJfQorCisJaWYgKHNwLnR4X3N5 c3RlbV9zdGF0ZSA+IFNUQVRFX0xJTktfVFJBSU5JTkcpIHsKKwkJaWYgKChzcC50eF9zeXN0ZW1f c3RhdGUgPT0gU1RBVEVfSERDUF9BVVRIKSAmJgorCQkgICAgKGJ1ZlsxXSAmIFNQX0NQX0lSUSkp IHsKKwkJCWRldl9kYmcoZGV2LCAiQ1AgSVJRIVxuIik7CisJCX0gZWxzZSBpZiAoIShidWZbNF0g JiAweDAxKSB8fCAoKGJ1ZlsyXSAmIDB4MDUpICE9IDB4MDUpKSB7CisJCQlzcF9zZXRfc3lzdGVt X3N0YXRlKGFueDc4eHgsIFNUQVRFX0xJTktfVFJBSU5JTkcpOworCQkJZGV2X2RiZyhkZXYsICJJ UlE6IHJlLUxUIHJlcXVlc3QhXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWRldl9kYmcoZGV2 LCAibGFuZSBhbGlnbiAleFxuIiwgYnVmWzRdKTsKKwkJZGV2X2RiZyhkZXYsICJsYW5lIGNsb2Nr IHJlY292ZXJ5ICV4XG4iLCBidWZbMl0pOworCX0KK30KKworc3RhdGljIHZvaWQgc3BfcGFja2V0 X3ZzaV9pbml0KHN0cnVjdCBhbng3OHh4ICphbng3OHh4KQoreworCXU4IHZhbDsKKwlpbnQgaTsK KworCXNwLnR4X3BhY2tldF92c2kuaW5mb2ZyYW1lLnR5cGUgPSBIRE1JX0lORk9GUkFNRV9UWVBF X1ZFTkRPUjsKKwlzcC50eF9wYWNrZXRfdnNpLmluZm9mcmFtZS52ZXJzaW9uID0gMTsKKwlzcC50 eF9wYWNrZXRfdnNpLmluZm9mcmFtZS5sZW5ndGggPSBIRE1JX1ZTSV9JTkZPRlJBTUVfU0laRTsK KworCWZvciAoaSA9IDA7IGkgPCBzcC50eF9wYWNrZXRfdnNpLmluZm9mcmFtZS5sZW5ndGg7IGkr KykgeworCQlzcF9yZWdfcmVhZChhbng3OHh4LCBSWF9QMSwgU1BfTVBFR19WU19JTkZPRlJBTUVf REFUQV9CQVNFICsgaSwKKwkJCSAgICAmdmFsKTsKKwkJc3AudHhfcGFja2V0X21wZWcuZGF0YVtp XSA9IHZhbDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNwX3BhY2tldF9tcGVnX2luaXQoc3RydWN0 IGFueDc4eHggKmFueDc4eHgpCit7CisJdTggdmFsOworCWludCBpOworCisJc3AudHhfcGFja2V0 X21wZWcuaW5mb2ZyYW1lLnR5cGUgPSBIRE1JX0lORk9GUkFNRV9UWVBFX01QRUc7CisJc3AudHhf cGFja2V0X21wZWcuaW5mb2ZyYW1lLnZlcnNpb24gPSAxOworCXNwLnR4X3BhY2tldF9tcGVnLmlu Zm9mcmFtZS5sZW5ndGggPSBIRE1JX01QRUdfSU5GT0ZSQU1FX1NJWkU7CisKKwlmb3IgKGkgPSAw OyBpIDwgc3AudHhfcGFja2V0X21wZWcuaW5mb2ZyYW1lLmxlbmd0aDsgaSsrKSB7CisJCXNwX3Jl Z19yZWFkKGFueDc4eHgsIFJYX1AxLCBTUF9NUEVHX1ZTX0lORk9GUkFNRV9EQVRBX0JBU0UgKyBp LAorCQkJICAgICZ2YWwpOworCQlzcC50eF9wYWNrZXRfbXBlZy5kYXRhW2ldID0gdmFsOworCX0K K30KKworc3RhdGljIHZvaWQgc3BfYXV0aF9kb25lX2ludF9oYW5kbGVyKHN0cnVjdCBhbng3OHh4 ICphbng3OHh4KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbng3OHh4LT5jbGllbnQtPmRl djsKKwl1OCBidWZbMl07CisKKwlpZiAoc3BfaGRjcF9yZXBlYXRlcl9tb2RlKGFueDc4eHgpKSB7 CisJCXNwX3JlZ19yZWFkKGFueDc4eHgsIFRYX1AwLCBTUF9UWF9IRENQX1NUQVRVU19SRUcsICZi dWZbMF0pOworCQlpZiAoKGJ1ZlswXSAmIFNQX0FVVEhFTl9QQVNTKSAmJgorCQkgICAgKHNwLnJl cGVhdGVyX3N0YXRlID09IEhEQ1BfRE9JTkcpKQorCQkJc3AucmVwZWF0ZXJfc3RhdGUgPSBIRENQ X0RPTkU7CisJCWVsc2UKKwkJCXNwLnJlcGVhdGVyX3N0YXRlID0gSERDUF9FUlJPUjsKKworCQly ZXR1cm47CisJfQorCisJaWYgKHNwLmhkY3Bfc3RhdGUgPiBIRENQX0hXX0VOQUJMRSAmJgorCSAg ICBzcC50eF9zeXN0ZW1fc3RhdGUgPT0gU1RBVEVfSERDUF9BVVRIKSB7CisJCXNwX3JlZ19yZWFk KGFueDc4eHgsIFRYX1AwLCBTUF9IRENQX1JYX0JTVEFUVVMwX1JFRywgJmJ1ZlswXSk7CisJCXNw X3JlZ19yZWFkKGFueDc4eHgsIFRYX1AwLCBTUF9IRENQX1JYX0JTVEFUVVMxX1JFRywgJmJ1Zlsx XSk7CisJCWlmICgoYnVmWzBdICYgMHgwOCkgfHwgKGJ1ZlsxXSAmIDB4ODApKSB7CisJCQlkZXZf ZGJnKGRldiwgIm1heCBjYXNjYWRlL2RldnMgZXhjZWVkZWQhXG4iKTsKKwkJCXNwX2hkY3BfZW5j cnlwdGlvbl9kaXNhYmxlKGFueDc4eHgpOworCQkJc3AuaGRjcF9zdGF0ZSA9IEhEQ1BfRklOSVNI OworCQl9IGVsc2UgeworCQkJc3BfcmVnX3JlYWQoYW54Nzh4eCwgVFhfUDAsIFNQX1RYX0hEQ1Bf U1RBVFVTX1JFRywKKwkJCQkgICAgYnVmKTsKKwkJfQorCisJCWlmIChidWZbMF0gJiBTUF9BVVRI RU5fUEFTUykgeworCQkJc3BfYXV4X2RwY2RyZWFkX2J5dGVzKGFueDc4eHgsIDB4MDYsIDB4ODAs IDB4MmEsIDIsCisJCQkJCSAgICAgIGJ1Zik7CisJCQlpZiAoKGJ1ZlswXSAmIDB4MDgpIHx8IChi dWZbMV0gJiAweDgwKSkgeworCQkJCWRldl9kYmcoZGV2LCAibWF4IGNhc2NhZGUvZGV2cyBleGNl ZWRlZCFcbiIpOworCQkJCXNwX2hkY3BfZW5jcnlwdGlvbl9kaXNhYmxlKGFueDc4eHgpOworCQkJ fSBlbHNlCisJCQkJZGV2X2RiZyhkZXYsICIlc1xuIiwKKwkJCQkJImF1dGhlbnRpY2F0aW9uIHBh c3MgaW4gQXV0aCBEb25lIik7CisKKwkJCXNwLmhkY3Bfc3RhdGUgPSBIRENQX0ZJTklTSDsKKwkJ fSBlbHNlIHsKKwkJCWRldl9lcnIoZGV2LCAiYXV0aGVudGljYXRpb24gZmFpbGVkIGluIEF1dGgg RG9uZVxuIik7CisJCQlzcF92aWRlb19tdXRlKGFueDc4eHgsIHRydWUpOworCQkJc3BfY2xlYW5f aGRjcF9zdGF0dXMoYW54Nzh4eCk7CisJCQlzcC5oZGNwX3N0YXRlID0gSERDUF9GQUlMRUQ7CisJ CX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNwX2x0X2RvbmVfaW50X2hhbmRsZXIoc3RydWN0IGFu eDc4eHggKmFueDc4eHgpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmFueDc4eHgtPmNsaWVu dC0+ZGV2OworCXU4IHZhbDsKKworCWlmIChzcC50eF9sdF9zdGF0ZSA9PSBMVF9XQUlUSU5HX0ZJ TklTSCAmJgorCSAgICBzcC50eF9zeXN0ZW1fc3RhdGUgPT0gU1RBVEVfTElOS19UUkFJTklORykg eworCQlzcF9yZWdfcmVhZChhbng3OHh4LCBUWF9QMCwgU1BfRFBfTFRfQ1RSTF9SRUcsICZ2YWwp OworCQlpZiAodmFsICYgU1BfTFRfRVJST1JfVFlQRV9NQVNLKSB7CisJCQl2YWwgPSAodmFsICYg U1BfTFRfRVJST1JfVFlQRV9NQVNLKSA+PiA0OworCQkJZGV2X2RiZyhkZXYsICJMVCBmYWlsZWQg aW4gaW50ZXJydXB0ICUuMnhcbiIsCisJCQkJdmFsKTsKKwkJCXNwLnR4X2x0X3N0YXRlID0gTFRf RVJST1I7CisJCX0gZWxzZSB7CisJCQlkZXZfZGJnKGRldiwgIkxUIGZpbmlzaFxuIik7CisJCQlz cC50eF9sdF9zdGF0ZSA9IExUX0ZJTklTSDsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgc3Bf aGRtaV9jbGtfZGV0X2ludChzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCkKK3sKKwlzdHJ1Y3QgZGV2 aWNlICpkZXYgPSAmYW54Nzh4eC0+Y2xpZW50LT5kZXY7CisKKwlkZXZfZGJnKGRldiwgInBpeGVs IGNsb2NrIGNoYW5nZVxuIik7CisJaWYgKHNwLnR4X3N5c3RlbV9zdGF0ZSA+IFNUQVRFX1ZJREVP X09VVFBVVCkgeworCQlzcF92aWRlb19tdXRlKGFueDc4eHgsIHRydWUpOworCQlzcF9lbmFibGVf YXVkaW9fb3V0cHV0KGFueDc4eHgsIGZhbHNlKTsKKwkJc3Bfc2V0X3N5c3RlbV9zdGF0ZShhbng3 OHh4LCBTVEFURV9WSURFT19PVVRQVVQpOworCX0KK30KKworc3RhdGljIHZvaWQgc3BfaGRtaV9k dmlfaW50KHN0cnVjdCBhbng3OHh4ICphbng3OHh4KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9 ICZhbng3OHh4LT5jbGllbnQtPmRldjsKKwl1OCB2YWw7CisKKwlzcF9yZWdfcmVhZChhbng3OHh4 LCBSWF9QMCwgU1BfSERNSV9TVEFUVVNfUkVHLCAmdmFsKTsKKwlpZiAoKHZhbCAmIFNQX0hETUlf REVUKSA9PSBTUF9EVklfTU9ERSkgeworCQlkZXZfZGJnKGRldiwgImRldGVjdGVkIERWSSBNT0RF IC0+IG11dGUgYXVkaW9cbiIpOworCQlzcF9oZG1pX211dGVfYXVkaW8oYW54Nzh4eCwgdHJ1ZSk7 CisJCXNwX3NldF9zeXN0ZW1fc3RhdGUoYW54Nzh4eCwgU1RBVEVfTElOS19UUkFJTklORyk7CisJ fQorfQorCitzdGF0aWMgdm9pZCBzcF9oZG1pX25ld19hdmlfaW50KHN0cnVjdCBhbng3OHh4ICph bng3OHh4KQoreworCXNwX2x2dHRsX2JpdF9tYXBwaW5nKGFueDc4eHgpOworCXNwX3NldF9jb2xv cnNwYWNlKGFueDc4eHgpOworCXNwX3BhY2tldF9hdmlfaW5pdChhbng3OHh4KTsKKwlzcF9jb25m aWdfcGFja2V0cyhhbng3OHh4LCBBVklfUEFDS0VUUyk7Cit9CisKK3N0YXRpYyB2b2lkIHNwX2hk bWlfbmV3X3ZzaV9pbnQoc3RydWN0IGFueDc4eHggKmFueDc4eHgpCit7CisJc3RydWN0IGRldmlj ZSAqZGV2ID0gJmFueDc4eHgtPmNsaWVudC0+ZGV2OworCXU4IGhkbWlfdmlkZW9fZm9ybWF0LCB2 M2Rfc3RydWN0dXJlLCBtcGVnX3R5cGUsIG1wZWdfdmVyOworCisJc3BfcmVnX2NsZWFyX2JpdHMo YW54Nzh4eCwgVFhfUDAsIFNQX0RQXzNEX1ZTQ19DVFJMX1JFRywKKwkJCSAgU1BfSU5GT19GUkFN RV9WU0NfRU4pOworCisJLyogVlNJIHBhY2thZ2UgaGVhZGVyICovCisJc3BfcmVnX3JlYWQoYW54 Nzh4eCwgUlhfUDEsIFNQX01QRUdfVlNfSU5GT0ZSQU1FX1RZUEVfUkVHLCAmbXBlZ190eXBlKTsK KwlzcF9yZWdfcmVhZChhbng3OHh4LCBSWF9QMSwgU1BfTVBFR19WU19JTkZPRlJBTUVfVkVSX1JF RywgJm1wZWdfdmVyKTsKKwlpZiAoKG1wZWdfdHlwZSB8fCBtcGVnX3ZlcikgIT0gMHgwMSkKKwkJ cmV0dXJuOworCisJZGV2X2RiZyhkZXYsICJzZXR1cCBWU0kgcGFja2FnZSFcbiIpOworCisJc3Bf cGFja2V0X3ZzaV9pbml0KGFueDc4eHgpOworCXNwX2NvbmZpZ19wYWNrZXRzKGFueDc4eHgsIFZT SV9QQUNLRVRTKTsKKworCXNwX3JlZ19yZWFkKGFueDc4eHgsIFJYX1AxLCBTUF9NUEVHX1ZTX0lO Rk9GUkFNRV9EQVRBX0JBU0UgKyAzLAorCQkgICAgJmhkbWlfdmlkZW9fZm9ybWF0KTsKKworCWlm ICgoaGRtaV92aWRlb19mb3JtYXQgJiAweGUwKSA9PSAweDQwKSB7CisJCWRldl9kYmcoZGV2LCAi M0QgVlNJIHBhY2tldCBkZXRlY3RlZC4gQ29uZmlnIFZTQyBwYWNrZXRcbiIpOworCisJCXNwX3Jl Z19yZWFkKGFueDc4eHgsIFJYX1AxLCBTUF9NUEVHX1ZTX0lORk9GUkFNRV9EQVRBX0JBU0UgKyA1 LAorCQkJICAgICZ2M2Rfc3RydWN0dXJlKTsKKworCQlzd2l0Y2ggKHYzZF9zdHJ1Y3R1cmUgJiAw eGYwKSB7CisJCWNhc2UgMHgwMDoKKwkJCXYzZF9zdHJ1Y3R1cmUgPSAweDAyOworCQkJYnJlYWs7 CisJCWNhc2UgMHgyMDoKKwkJCXYzZF9zdHJ1Y3R1cmUgPSAweDAzOworCQkJYnJlYWs7CisJCWNh c2UgMHgzMDoKKwkJCXYzZF9zdHJ1Y3R1cmUgPSAweDA0OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6 CisJCQl2M2Rfc3RydWN0dXJlID0gMHgwMDsKKwkJCWRldl9kYmcoZGV2LCAiM0Qgc3RydWN0dXJl IGlzIG5vdCBzdXBwb3J0ZWRcbiIpOworCQkJYnJlYWs7CisJCX0KKwkJc3BfcmVnX3dyaXRlKGFu eDc4eHgsIFRYX1AwLCBTUF9EUF9WU0NfREIxX1JFRywgdjNkX3N0cnVjdHVyZSk7CisJfQorCXNw X3JlZ19zZXRfYml0cyhhbng3OHh4LCBUWF9QMCwgU1BfRFBfM0RfVlNDX0NUUkxfUkVHLAorCQkJ U1BfSU5GT19GUkFNRV9WU0NfRU4pOworCXNwX3JlZ19jbGVhcl9iaXRzKGFueDc4eHgsIFRYX1Aw LCBTUF9QQUNLRVRfU0VORF9DVFJMX1JFRywKKwkJCSAgU1BfU1BEX0lGX0VOKTsKKwlzcF9yZWdf c2V0X2JpdHMoYW54Nzh4eCwgVFhfUDAsIFNQX1BBQ0tFVF9TRU5EX0NUUkxfUkVHLCBTUF9TUERf SUZfVUQpOworCXNwX3JlZ19zZXRfYml0cyhhbng3OHh4LCBUWF9QMCwgU1BfUEFDS0VUX1NFTkRf Q1RSTF9SRUcsIFNQX1NQRF9JRl9FTik7Cit9CisKK3N0YXRpYyB2b2lkIHNwX2hkbWlfbm9fdnNp X2ludChzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAm YW54Nzh4eC0+Y2xpZW50LT5kZXY7CisJdTggdmFsOworCisJc3BfcmVnX3JlYWQoYW54Nzh4eCwg VFhfUDAsIFNQX0RQXzNEX1ZTQ19DVFJMX1JFRywgJnZhbCk7CisJaWYgKHZhbCAmIFNQX0lORk9f RlJBTUVfVlNDX0VOKSB7CisJCWRldl9kYmcoZGV2LCAibm8gbmV3IFZTSSBpcyByZWNlaXZlZCwg ZGlzYWJsZSBWU0MgcGFja2V0XG4iKTsKKwkJdmFsICY9IH5TUF9JTkZPX0ZSQU1FX1ZTQ19FTjsK KwkJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFRYX1AwLCBTUF9EUF8zRF9WU0NfQ1RSTF9SRUcsIHZh bCk7CisJCXNwX3BhY2tldF9tcGVnX2luaXQoYW54Nzh4eCk7CisJCXNwX2NvbmZpZ19wYWNrZXRz KGFueDc4eHgsIE1QRUdfUEFDS0VUUyk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3Bf aGRtaV9yZXN0YXJ0X2F1ZGlvX2NoayhzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCkKK3sKKwlzcF9z ZXRfc3lzdGVtX3N0YXRlKGFueDc4eHgsIFNUQVRFX0FVRElPX09VVFBVVCk7Cit9CisKK3N0YXRp YyB2b2lkIHNwX2hkbWlfY3RzX3Jjdl9pbnQoc3RydWN0IGFueDc4eHggKmFueDc4eHgpCit7CisJ aWYgKHNwLnR4X2FvX3N0YXRlID09IEFPX0lOSVQpCisJCXNwLnR4X2FvX3N0YXRlID0gQU9fQ1RT X1JDVl9JTlQ7CisJZWxzZSBpZiAoc3AudHhfYW9fc3RhdGUgPT0gQU9fQVVESU9fUkNWX0lOVCkK KwkJc3AudHhfYW9fc3RhdGUgPSBBT19SQ1ZfSU5UX0ZJTklTSDsKK30KKworc3RhdGljIHZvaWQg c3BfaGRtaV9hdWRpb19yY3ZfaW50KHN0cnVjdCBhbng3OHh4ICphbng3OHh4KQoreworCWlmIChz cC50eF9hb19zdGF0ZSA9PSBBT19JTklUKQorCQlzcC50eF9hb19zdGF0ZSA9IEFPX0FVRElPX1JD Vl9JTlQ7CisJZWxzZSBpZiAoc3AudHhfYW9fc3RhdGUgPT0gQU9fQ1RTX1JDVl9JTlQpCisJCXNw LnR4X2FvX3N0YXRlID0gQU9fUkNWX0lOVF9GSU5JU0g7Cit9CisKK3N0YXRpYyB2b2lkIHNwX2hk bWlfYXVkaW9fc2FtcGxlY2hnX2ludChzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCkKK3sKKwl1MTYg aTsKKwl1OCB2YWw7CisKKwkvKiB0cmFuc2ZlciBhdWRpbyBjaGFubmVsIHN0YXR1cyBmcm9tIEhE TUkgUnggdG8gU2xpbXBvcnQgVHggKi8KKwlmb3IgKGkgPSAwOyBpIDwgU1BfQVVEX0NIX1NUQVRV U19SRUdfTlVNOyBpKyspIHsKKwkJc3BfcmVnX3JlYWQoYW54Nzh4eCwgUlhfUDAsIFNQX0FVRF9T UERJRl9DSF9TVEFUVVNfQkFTRSArIGksCisJCQkgICAgJnZhbCk7CisJCXNwX3JlZ193cml0ZShh bng3OHh4LCBUWF9QMiwgU1BfQVVEX0NIX1NUQVRVU19CQVNFICsgaSwKKwkJCSAgICAgdmFsKTsK Kwl9Cit9CisKK3N0YXRpYyB2b2lkIHNwX2hkbWlfaGRjcF9lcnJvcl9pbnQoc3RydWN0IGFueDc4 eHggKmFueDc4eHgpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmFueDc4eHgtPmNsaWVudC0+ ZGV2OworCisJaWYgKHNwLmhkY3BfZXJyb3JfY291bnQgPj0gNDApIHsKKwkJc3AuaGRjcF9lcnJv cl9jb3VudCA9IDA7CisJCWRldl9kYmcoZGV2LCAibG90cyBvZiBoZGNwIGVycm9yIG9jY3VycmVk IVxuIik7CisJCXNwX2hkbWlfbXV0ZV9hdWRpbyhhbng3OHh4LCB0cnVlKTsKKwkJc3BfaGRtaV9t dXRlX3ZpZGVvKGFueDc4eHgsIHRydWUpOworCQlzcF9oZG1pX3NldF9ocGQoYW54Nzh4eCwgZmFs c2UpOworCQl1c2xlZXBfcmFuZ2UoMTAwMDAsIDExMDAwKTsKKwkJc3BfaGRtaV9zZXRfaHBkKGFu eDc4eHgsIHRydWUpOworCX0gZWxzZSB7CisJCXNwLmhkY3BfZXJyb3JfY291bnQrKzsKKwl9Cit9 CisKK3N0YXRpYyB2b2lkIHNwX2hkbWlfbmV3X2djcF9pbnQoc3RydWN0IGFueDc4eHggKmFueDc4 eHgpCit7CisJdTggdmFsOworCisJc3BfcmVnX3JlYWQoYW54Nzh4eCwgUlhfUDEsIFNQX0dFTkVS QUxfQ1RSTF9QQUNLRVRfUkVHLCAmdmFsKTsKKwlpZiAodmFsICYgU1BfU0VUX0FWTVVURSkgewor CQlzcF9oZG1pX211dGVfdmlkZW8oYW54Nzh4eCwgdHJ1ZSk7CisJCXNwX2hkbWlfbXV0ZV9hdWRp byhhbng3OHh4LCB0cnVlKTsKKwl9IGVsc2UgaWYgKHZhbCAmIFNQX0NMRUFSX0FWTVVURSkgewor CQlzcF9oZG1pX211dGVfdmlkZW8oYW54Nzh4eCwgZmFsc2UpOworCQlzcF9oZG1pX211dGVfYXVk aW8oYW54Nzh4eCwgZmFsc2UpOworCX0KK30KKworc3RhdGljIHZvaWQgc3BfaHBkX2ludF9oYW5k bGVyKHN0cnVjdCBhbng3OHh4ICphbng3OHh4LCB1OCBocGRfc291cmNlKQoreworCXU4IHZhbDsK KwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW54Nzh4eC0+Y2xpZW50LT5kZXY7CisKKwlzd2l0Y2gg KGhwZF9zb3VyY2UpIHsKKwljYXNlIFNQX0hQRF9MT1NUOgorCQlzcF9oZG1pX3NldF9ocGQoYW54 Nzh4eCwgZmFsc2UpOworCQlzcF9zZXRfc3lzdGVtX3N0YXRlKGFueDc4eHgsIFNUQVRFX1dBSVRJ TkdfQ0FCTEVfUExVRyk7CisJCWJyZWFrOworCWNhc2UgU1BfSFBEX0NIRzoKKwkJZGV2X2RiZyhk ZXYsICJIUEQgY2hhbmdlZCFcbiIpOworCQl1c2xlZXBfcmFuZ2UoMjAwMCwgNDAwMCk7CisJCWlm IChzcC5jb21tb25faW50WzNdICYgU1BfSFBEX0lSUSkKKwkJCXNwX2hwZF9pcnFfcHJvY2Vzcyhh bng3OHh4KTsKKworCQlzcF9yZWdfcmVhZChhbng3OHh4LCBUWF9QMCwgU1BfRFBfU1lTVEVNX0NU UkxfQkFTRSArIDMsICZ2YWwpOworCQlpZiAodmFsICYgU1BfSFBEX1NUQVRVUykgeworCQkJaWYg KHNwLmNvbW1vbl9pbnRbM10gJiBTUF9IUERfSVJRKQorCQkJCXNwX2hwZF9pcnFfcHJvY2Vzcyhh bng3OHh4KTsKKwkJfSBlbHNlIHsKKwkJCXNwX3JlZ19yZWFkKGFueDc4eHgsIFRYX1AwLAorCQkJ CSAgICBTUF9EUF9TWVNURU1fQ1RSTF9CQVNFICsgMywKKwkJCQkgICAgJnZhbCk7CisJCQlpZiAo dmFsICYgU1BfSFBEX1NUQVRVUykgeworCQkJCXNwX2hkbWlfc2V0X2hwZChhbng3OHh4LCBmYWxz ZSk7CisJCQkJc3Bfc2V0X3N5c3RlbV9zdGF0ZShhbng3OHh4LAorCQkJCQkJICAgIFNUQVRFX1dB SVRJTkdfQ0FCTEVfUExVRyk7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJl YWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBzcF9zeXN0ZW1faXNyX2hhbmRsZXIoc3RydWN0IGFu eDc4eHggKmFueDc4eHgpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmFueDc4eHgtPmNsaWVu dC0+ZGV2OworCisJaWYgKHNwLnR4X3N5c3RlbV9zdGF0ZSA9PSBTVEFURV9XQUlUSU5HX0NBQkxF X1BMVUcpIHsKKwkJaWYgKHNwLmNvbW1vbl9pbnRbM10gJiBTUF9IUERfUExVRykKKwkJCXNwX2hw ZF9pbnRfaGFuZGxlcihhbng3OHh4LCBTUF9IUERfUExVRyk7CisJfSBlbHNlICB7CisJCWlmIChz cC5jb21tb25faW50WzNdICYgU1BfSFBEX0NIRykKKwkJCXNwX2hwZF9pbnRfaGFuZGxlcihhbng3 OHh4LCBTUF9IUERfQ0hHKTsKKwkJZWxzZSBpZiAoc3AuY29tbW9uX2ludFszXSAmIFNQX0hQRF9M T1NUKQorCQkJc3BfaHBkX2ludF9oYW5kbGVyKGFueDc4eHgsIFNQX0hQRF9MT1NUKTsKKwl9CisK KwlpZiAoc3AuY29tbW9uX2ludFswXSAmIFNQX1BMTF9MT0NLX0NIRykKKwkJc3BfcGxsX2NoYW5n ZWRfaW50X2hhbmRsZXIoYW54Nzh4eCk7CisKKwlpZiAoc3AuY29tbW9uX2ludFsxXSAmIFNQX0hE Q1BfQVVUSF9ET05FKQorCQlzcF9hdXRoX2RvbmVfaW50X2hhbmRsZXIoYW54Nzh4eCk7CisKKwlp ZiAoKHNwLmNvbW1vbl9pbnRbMl0gJiBTUF9IRENQX0xJTktfQ0hFQ0tfRkFJTCkgJiYKKwkgICAg IXNwX2hkY3BfcmVwZWF0ZXJfbW9kZShhbng3OHh4KSkgeworCQlzcF9zZXRfc3lzdGVtX3N0YXRl KGFueDc4eHgsIFNUQVRFX0xJTktfVFJBSU5JTkcpOworCQlkZXZfZGJnKGRldiwgIkhEQ1AgU3lu YyBMb3N0IVxuIik7CisJfQorCisJaWYgKHNwLmRwX2ludCAmIFNQX1RSQUlOSU5HX0ZJTklTSCkK KwkJc3BfbHRfZG9uZV9pbnRfaGFuZGxlcihhbng3OHh4KTsKKworCWlmIChzcC50eF9zeXN0ZW1f c3RhdGUgPiBTVEFURV9TSU5LX0NPTk5FQ1RJT04pIHsKKwkJaWYgKHNwLnNwX2hkbWlfaW50WzVd ICYgU1BfTkVXX0FWSV9QS1QpCisJCQlzcF9oZG1pX25ld19hdmlfaW50KGFueDc4eHgpOworCX0K KworCWlmIChzcC50eF9zeXN0ZW1fc3RhdGUgPiBTVEFURV9WSURFT19PVVRQVVQpIHsKKwkJaWYg KHNwLnNwX2hkbWlfaW50WzZdICYgU1BfTkVXX1ZTKSB7CisJCQlzcC5zcF9oZG1pX2ludFs2XSAm PSB+U1BfTk9fVlNJOworCQkJc3BfaGRtaV9uZXdfdnNpX2ludChhbng3OHh4KTsKKwkJfQorCQlp ZiAoc3Auc3BfaGRtaV9pbnRbNl0gJiBTUF9OT19WU0kpCisJCQlzcF9oZG1pX25vX3ZzaV9pbnQo YW54Nzh4eCk7CisJfQorCisJaWYgKHNwLnR4X3N5c3RlbV9zdGF0ZSA+PSBTVEFURV9WSURFT19P VVRQVVQpIHsKKwkJaWYgKHNwLnNwX2hkbWlfaW50WzBdICYgU1BfQ0tEVF9DSEcpCisJCQlzcF9o ZG1pX2Nsa19kZXRfaW50KGFueDc4eHgpOworCisJCWlmIChzcC5zcF9oZG1pX2ludFswXSAmIFNQ X1NDRFRfQ0hHKQorCQkJZGV2X2RiZyhkZXYsICJIRENQIFN5bmMgRGV0ZWN0ZWRcbiIpOworCisJ CWlmIChzcC5zcF9oZG1pX2ludFswXSAmIFNQX0hETUlfRFZJKQorCQkJc3BfaGRtaV9kdmlfaW50 KGFueDc4eHgpOworCisJCWlmICgoc3Auc3BfaGRtaV9pbnRbNV0gJiBTUF9ORVdfQVVEX1BLVCkg fHwKKwkJICAgIChzcC5zcF9oZG1pX2ludFsyXSAmIFNQX0FVRF9NT0RFX0NIRykpCisJCQlzcF9o ZG1pX3Jlc3RhcnRfYXVkaW9fY2hrKGFueDc4eHgpOworCisJCWlmIChzcC5zcF9oZG1pX2ludFs1 XSAmIFNQX0NUU19SQ1YpCisJCQlzcF9oZG1pX2N0c19yY3ZfaW50KGFueDc4eHgpOworCisJCWlm IChzcC5zcF9oZG1pX2ludFs0XSAmIFNQX0FVRElPX1JDVikKKwkJCXNwX2hkbWlfYXVkaW9fcmN2 X2ludChhbng3OHh4KTsKKworCQlpZiAoc3Auc3BfaGRtaV9pbnRbMV0gJiBTUF9IRENQX0VSUikK KwkJCXNwX2hkbWlfaGRjcF9lcnJvcl9pbnQoYW54Nzh4eCk7CisKKwkJaWYgKHNwLnNwX2hkbWlf aW50WzVdICYgU1BfTkVXX0NQX1BLVCkKKwkJCXNwX2hkbWlfbmV3X2djcF9pbnQoYW54Nzh4eCk7 CisKKwkJaWYgKHNwLnNwX2hkbWlfaW50WzFdICYgU1BfQVVESU9fU0FNUExFX0NIRykKKwkJCXNw X2hkbWlfYXVkaW9fc2FtcGxlY2hnX2ludChhbng3OHh4KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lk IHNwX3Nob3dfaW5mb3JtYXRpb24oc3RydWN0IGFueDc4eHggKmFueDc4eHgpCit7CisJc3RydWN0 IGRldmljZSAqZGV2ID0gJmFueDc4eHgtPmNsaWVudC0+ZGV2OworCXU4IHZhbCwgdmFsMTsKKwl1 MTYgaF9yZXMsIGhfYWN0LCB2X3Jlcywgdl9hY3Q7CisJdTE2IGhfZnAsIGhfc3csIGhfYnAsIHZf ZnAsIHZfc3csIHZfYnA7CisJdW5zaWduZWQgbG9uZyByZWZyZXNoOworCXVuc2lnbmVkIGxvbmcg cGNsazsKKworCWRldl9kYmcoZGV2LCAiXG4qKioqKioqKioqKioqIFNQIFZpZGVvIEluZm9ybWF0 aW9uICoqKioqKioqKioqKioqXG4iKTsKKworCXN3aXRjaCAoc3BfZ2V0X2xpbmtfYncoYW54Nzh4 eCkpIHsKKwljYXNlIFNQX0xJTktfMVA2Mkc6CisJCWRldl9kYmcoZGV2LCAiQlcgPSAxLjYyR1xu Iik7CisJCWJyZWFrOworCWNhc2UgU1BfTElOS18yUDdHOgorCQlkZXZfZGJnKGRldiwgIkJXID0g Mi43R1xuIik7CisJCWJyZWFrOworCWNhc2UgU1BfTElOS181UDRHOgorCQlkZXZfZGJnKGRldiwg IkJXID0gNS40R1xuIik7CisJCWJyZWFrOworCWNhc2UgU1BfTElOS182UDc1RzoKKwkJZGV2X2Ri ZyhkZXYsICJCVyA9IDYuNzVHXG4iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJ fQorCisJcGNsayA9IHNwX3BjbGtfY2FsYyhhbng3OHh4KTsKKwlwY2xrID0gcGNsayAvIDEwOwor CisJc3BfcmVnX3JlYWQoYW54Nzh4eCwgVFhfUDIsIFNQX1RPVEFMX0xJTkVfU1RBTF9SRUcsICZ2 YWwpOworCXNwX3JlZ19yZWFkKGFueDc4eHgsIFRYX1AyLCBTUF9UT1RBTF9MSU5FX1NUQUhfUkVH LCAmdmFsMSk7CisKKwl2X3JlcyA9IHZhbDE7CisJdl9yZXMgPSB2X3JlcyA8PCA4OworCXZfcmVz ID0gdl9yZXMgKyB2YWw7CisKKwlzcF9yZWdfcmVhZChhbng3OHh4LCBUWF9QMiwgU1BfQUNUX0xJ TkVfU1RBTF9SRUcsICZ2YWwpOworCXNwX3JlZ19yZWFkKGFueDc4eHgsIFRYX1AyLCBTUF9BQ1Rf TElORV9TVEFIX1JFRywgJnZhbDEpOworCisJdl9hY3QgPSB2YWwxOworCXZfYWN0ID0gdl9hY3Qg PDwgODsKKwl2X2FjdCA9IHZfYWN0ICsgdmFsOworCisJc3BfcmVnX3JlYWQoYW54Nzh4eCwgVFhf UDIsIFNQX1RPVEFMX1BJWEVMX1NUQUxfUkVHLCAmdmFsKTsKKwlzcF9yZWdfcmVhZChhbng3OHh4 LCBUWF9QMiwgU1BfVE9UQUxfUElYRUxfU1RBSF9SRUcsICZ2YWwxKTsKKworCWhfcmVzID0gdmFs MTsKKwloX3JlcyA9IGhfcmVzIDw8IDg7CisJaF9yZXMgPSBoX3JlcyArIHZhbDsKKworCXNwX3Jl Z19yZWFkKGFueDc4eHgsIFRYX1AyLCBTUF9BQ1RfUElYRUxfU1RBTF9SRUcsICZ2YWwpOworCXNw X3JlZ19yZWFkKGFueDc4eHgsIFRYX1AyLCBTUF9BQ1RfUElYRUxfU1RBSF9SRUcsICZ2YWwxKTsK KworCWhfYWN0ID0gdmFsMTsKKwloX2FjdCA9IGhfYWN0IDw8IDg7CisJaF9hY3QgPSBoX2FjdCAr IHZhbDsKKworCXNwX3JlZ19yZWFkKGFueDc4eHgsIFRYX1AyLCBTUF9IX0ZfUE9SQ0hfU1RBTF9S RUcsICZ2YWwpOworCXNwX3JlZ19yZWFkKGFueDc4eHgsIFRYX1AyLCBTUF9IX0ZfUE9SQ0hfU1RB SF9SRUcsICZ2YWwxKTsKKworCWhfZnAgPSB2YWwxOworCWhfZnAgPSBoX2ZwIDw8IDg7CisJaF9m cCA9IGhfZnAgKyB2YWw7CisKKwlzcF9yZWdfcmVhZChhbng3OHh4LCBUWF9QMiwgU1BfSF9TWU5D X1NUQUxfUkVHLCAmdmFsKTsKKwlzcF9yZWdfcmVhZChhbng3OHh4LCBUWF9QMiwgU1BfSF9TWU5D X1NUQUhfUkVHLCAmdmFsMSk7CisKKwloX3N3ID0gdmFsMTsKKwloX3N3ID0gaF9zdyA8PCA4Owor CWhfc3cgPSBoX3N3ICsgdmFsOworCisJc3BfcmVnX3JlYWQoYW54Nzh4eCwgVFhfUDIsIFNQX0hf Ql9QT1JDSF9TVEFMX1JFRywgJnZhbCk7CisJc3BfcmVnX3JlYWQoYW54Nzh4eCwgVFhfUDIsIFNQ X0hfQl9QT1JDSF9TVEFIX1JFRywgJnZhbDEpOworCisJaF9icCA9IHZhbDE7CisJaF9icCA9IGhf YnAgPDwgODsKKwloX2JwID0gaF9icCArIHZhbDsKKworCXNwX3JlZ19yZWFkKGFueDc4eHgsIFRY X1AyLCBTUF9WX0ZfUE9SQ0hfU1RBX1JFRywgJnZhbCk7CisJdl9mcCA9IHZhbDsKKworCXNwX3Jl Z19yZWFkKGFueDc4eHgsIFRYX1AyLCBTUF9WX1NZTkNfU1RBX1JFRywgJnZhbCk7CisJdl9zdyA9 IHZhbDsKKworCXNwX3JlZ19yZWFkKGFueDc4eHgsIFRYX1AyLCBTUF9WX0JfUE9SQ0hfU1RBX1JF RywgJnZhbCk7CisJdl9icCA9IHZhbDsKKworCWRldl9kYmcoZGV2LCAiVG90YWwgcmVzb2x1dGlv biBpcyAlZCAqICVkXG4iLCBoX3Jlcywgdl9yZXMpOworCisJZGV2X2RiZyhkZXYsICJIRj0lZCwg SFNXPSVkLCBIQlA9JWRcbiIsIGhfZnAsIGhfc3csIGhfYnApOworCWRldl9kYmcoZGV2LCAiVkY9 JWQsIFZTVz0lZCwgVkJQPSVkXG4iLCB2X2ZwLCB2X3N3LCB2X2JwKTsKKworCWlmIChoX3JlcyA9 PSAwIHx8IHZfcmVzID09IDApIHsKKwkJcmVmcmVzaCA9IDA7CisJfSBlbHNlIHsKKwkJcmVmcmVz aCA9IHBjbGsgKiAxMDAwOworCQlyZWZyZXNoID0gcmVmcmVzaCAvIGhfcmVzOworCQlyZWZyZXNo ID0gcmVmcmVzaCAqIDEwMDA7CisJCXJlZnJlc2ggPSByZWZyZXNoIC8gdl9yZXM7CisJfQorCisJ ZGV2X2RiZyhkZXYsICJBY3RpdmUgcmVzb2x1dGlvbiBpcyAlZCAqICVkIEAgJWxkSHpcbiIsIGhf YWN0LCB2X2FjdCwKKwkJcmVmcmVzaCk7CisKKwlzcF9yZWdfcmVhZChhbng3OHh4LCBUWF9QMCwg U1BfRFBfVklERU9fQ1RSTF9SRUcsICZ2YWwpOworCisJdmFsICY9IFNQX0NPTE9SX0ZfTUFTSzsK Kwl2YWwgPj49IFNQX0NPTE9SX0ZfU0hJRlQ7CisJaWYgKHZhbCA9PSBTUF9DT0xPUlNQQUNFX1JH QikKKwkJZGV2X2RiZyhkZXYsICJDb2xvclNwYWNlOiBSR0IiKTsKKwllbHNlIGlmICh2YWwgPT0g U1BfQ09MT1JTUEFDRV9ZQ0JDUjQyMikKKwkJZGV2X2RiZyhkZXYsICJDb2xvclNwYWNlOiBZQ2JD cjQyMiIpOworCWVsc2UgaWYgKHZhbCA9PSBTUF9DT0xPUlNQQUNFX1lDQkNSNDQ0KQorCQlkZXZf ZGJnKGRldiwgIkNvbG9yU3BhY2U6IFlDYkNyNDQ0Iik7CisKKwlzcF9yZWdfcmVhZChhbng3OHh4 LCBUWF9QMCwgU1BfRFBfVklERU9fQ1RSTF9SRUcsICZ2YWwpOworCisJdmFsICY9IFNQX0JQQ19N QVNLOworCXZhbCA+Pj0gU1BfQlBDX1NISUZUOworCWlmICh2YWwgID09IFNQX0JQQ182QklUUykK KwkJZGV2X2RiZyhkZXYsICI2IEJQQ1xuIik7CisJZWxzZSBpZiAodmFsID09IFNQX0JQQ184QklU UykKKwkJZGV2X2RiZyhkZXYsICI4IEJQQ1xuIik7CisJZWxzZSBpZiAodmFsID09IFNQX0JQQ18x MEJJVFMpCisJCWRldl9kYmcoZGV2LCAiMTAgQlBDXG4iKTsKKwllbHNlIGlmICh2YWwgPT0gU1Bf QlBDXzEyQklUUykKKwkJZGV2X2RiZyhkZXYsICIxMiBCUENcbiIpOworCisJaWYgKGlzX2FueF9k b25nbGUoYW54Nzh4eCkpIHsKKwkJc3BfYXV4X2RwY2RyZWFkX2J5dGVzKGFueDc4eHgsIDB4MDAs IDB4MDUsIDB4MjMsIDEsICZ2YWwpOworCQlkZXZfZGJnKGRldiwgIkFuYWxvZ2l4IERvbmdsZSBG VyBWZXIgJS4yeFxuIiwgdmFsICYgMHg3Zik7CisJfQorCisJZGV2X2RiZyhkZXYsICJcbioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKTsKK30KKwor c3RhdGljIHZvaWQgc3BfYXV4X21vbml0b3Ioc3RydWN0IGFueDc4eHggKmFueDc4eHgpCit7CisJ aW50IGk7CisJdTggdmFsOworCisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworCQlpZiAoc3Bf YXV4X2RwY2RyZWFkX2J5dGVzKGFueDc4eHgsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJCSAgMSwg JnZhbCkgPCAwKSB7CisJCQlhbng3OHh4X3Bvd2Vyb2ZmKGFueDc4eHgpOworCQkJc3Bfc2V0X3N5 c3RlbV9zdGF0ZShhbng3OHh4LCBTVEFURV9XQUlUSU5HX0NBQkxFX1BMVUcpOworCQl9IGVsc2Ug eworCQkJcmV0dXJuOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBzcF9oZGNwX3JlcGVhdGVy X3JlYXV0aChzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCkKK3sKKwl1OCB2YWwsIGN0cmwsIHN0YXR1 czsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW54Nzh4eC0+Y2xpZW50LT5kZXY7CisKKwltc2xl ZXAoNTApOworCXNwX3JlZ19yZWFkKGFueDc4eHgsIFJYX1AxLCBTUF9SWF9IRENQX1NUQVRVU19S RUcsICZ2YWwpOworCisJaWYgKHZhbCAmIFNQX0FVVEhfRU4pIHsKKwkJc3BfcmVnX3JlYWQoYW54 Nzh4eCwgVFhfUDAsIFNQX0hEQ1BfQ1RSTDBfUkVHLCAmY3RybCk7CisJCWlmIChjdHJsICYgU1Bf SEFSRF9BVVRIX0VOKSB7CisJCQlzcF9yZWdfcmVhZChhbng3OHh4LCBUWF9QMCwgU1BfVFhfSERD UF9TVEFUVVNfUkVHLAorCQkJCSAgICAmc3RhdHVzKTsKKwkJCWlmICghKHN0YXR1cyAmIFNQX0FV VEhFTl9QQVNTKSAmJgorCQkJICAgIChzdGF0dXMgJiBTUF9BVVRIX0ZBSUwpKSB7CisJCQkJZGV2 X2RiZyhkZXYsICJjbGVhbiBIRENQIGFuZCByZS1hdXRoXG4iKTsKKwkJCQlzcC5yZXBlYXRlcl9z dGF0ZSA9IEhEQ1BfRVJST1I7CisJCQl9CisJCX0gZWxzZSB7CisJCQlkZXZfZGJnKGRldiwgInJl cGVhdGVyIG1vZGUsIGVuYWJsZSBIVyBIRENQXG4iKTsKKwkJCXNwLnJlcGVhdGVyX3N0YXRlID0g SERDUF9FUlJPUjsKKwkJfQorCX0KKworCXNwX3JlZ19yZWFkKGFueDc4eHgsIFRYX1AwLCBTUF9I RENQX0NUUkwwX1JFRywgJmN0cmwpOworCXNwX3JlZ19yZWFkKGFueDc4eHgsIFRYX1AwLCBTUF9U WF9IRENQX1NUQVRVU19SRUcsICZzdGF0dXMpOworCisJaWYgKChjdHJsID09IFNQX0hEQ1BfRlVO Q1RJT05fRU5BQkxFRCkgJiYgKHN0YXR1cyAmIFNQX0FVVEhfRkFJTCkpIHsKKwkJZGV2X2RiZyhk ZXYsICJIRENQIGVuY3J5cHRpb24gZmFpbHVyZSAweCUwMnhcbiIsIHN0YXR1cyk7CisJCXNwLnJl cGVhdGVyX3N0YXRlID0gSERDUF9FUlJPUjsKKwl9CisKKwlpZiAoc3AucmVwZWF0ZXJfc3RhdGUg PT0gSERDUF9FUlJPUikgeworCQlzcF9jbGVhbl9oZGNwX3N0YXR1cyhhbng3OHh4KTsKKwkJbXNs ZWVwKDUwKTsKKwkJLyogQ2xlYXIgSERDUCBBVVRIIGludGVycnVwdCAqLworCQlzcF9yZWdfc2V0 X2JpdHMoYW54Nzh4eCwgVFhfUDIsIFNQX0NPTU1PTl9JTlRfU1RBVFVTX0JBU0UgKyAyLAorCQkJ CVNQX0hEQ1BfQVVUSF9ET05FKTsKKwkJc3BfaHdfaGRjcF9lbmFibGUoYW54Nzh4eCk7CisJCXNw LnJlcGVhdGVyX3N0YXRlID0gSERDUF9ET0lORzsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNwX3Rh c2tfaGFuZGxlcihzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCkKK3sKKwlzcF9hdXhfbW9uaXRvcihh bng3OHh4KTsKKworCWlmIChzcC50eF9zeXN0ZW1fc3RhdGUgPiBTVEFURV9XQUlUSU5HX0NBQkxF X1BMVUcpCisJCXNwX3N5c3RlbV9pc3JfaGFuZGxlcihhbng3OHh4KTsKKworCS8qIElmIGRldmlj ZSBzdXBwb3J0cyBIRENQIHJlcGVhdGVyIGZ1bmN0aW9uIHJlLWF1dGggKi8KKwlpZiAoc3BfaGRj cF9yZXBlYXRlcl9tb2RlKGFueDc4eHgpKQorCQlzcF9oZGNwX3JlcGVhdGVyX3JlYXV0aChhbng3 OHh4KTsKK30KKworLyoqKioqKioqKioqKioqKioqKkVuZCB0YXNrIHByb2Nlc3MqKioqKioqKioq KioqKioqKioqKi8KKworLyoqCisgKiBzcF9tYWluX3Byb2Nlc3MoKTogU2xpbVBvcnQgTWFpbiBQ cm9jZXNzCisgKgorICogU2xpbVBvcnQgTWFpbiBQcm9jZXNzIFN0YXRlczoKKyAqIDEuIFNsaW1Q b3J0IHBsdWcKKyAqICAgIC0gSWYgYSBTbGltUG9ydCBjYWJsZSBwbHVnIGlzIGRldGVjdGVkOgor ICogICAgICAtIFBvd2VyIG9uIGRldmljZQorICogICAgLSBJZiBhIFNsaW1Qb3J0IGNhYmxlIHBs dWcgaXMgbm90IGRldGVjdGVkOgorICogICAgICAtIFBvd2VyIGRvd24gZGV2aWNlCisgKiAyLiBT bGltUG9ydCBpbml0aWFsaXphdGlvbgorICogICAgLSBFbmFibGUgdGhlIHBvd2VyIHN1cHBseSBm b3IgZG93bnN0cmVhbQorICogICAgLSBQb3dlciBvbiB0aGUgcmVnaXN0ZXIgYWNjZXNzCisgKiAg ICAtIEluaXRpYWxpemUgdGhlIHJlbGF0ZWQgcmVnaXN0ZXJzCisgKiAzLiBTaW5rIGNvbm5lY3Rp b24KKyAqICAgICAtIEdldCB0aGUgY2FibGUgdHlwZSAoSERNSSwgVkdBIG9yIE15RFApCisgKiAg ICAgLSBDaGVjayB0aGUgY29ubmVjdGlvbiB3aXRoIGRvd25zdHJlYW0KKyAqIDQuIFJlYWQgRURJ RAorICogICAgLSBSZWFkIHBhcnRpYWwgRURJRCBkYXRhIHRvIGRlY2lkZSB3aGV0aGVyIHRvIHJl LXJlYWQgZW50aXJlIEVESUQKKyAqICAgIC0gRURJRCByZWFkCisgKiAgICAtIFBhcnNlIEVESUQg dG8gZ2V0IHRoZSB2aWRlbyBiYW5kd2lkdGgKKyAqIDUuIExpbmsgdHJhaW5pbmcKKyAqICAgIC0g Q2hlY2sgdGhlIGRvd25zdHJlYW0gYmFuZHdpZHRoCisgKiAgICAtIEhhcmR3YXJlIGxpbmsgdHJh aW5pbmcKKyAqIDYuIFZpZGVvIG91dHB1dAorICogICAgLSBWZXJpZnkgdGhhdCBpbnB1dCB2aWRl byBpcyBzdGFibGUKKyAqICAgIC0gT3JkZXIgYnkgdGhlIGlucHV0IHZpZGVvIHRvIGNhbGN1bGF0 ZSB0aGUgYmFuZHdpZHRoCisgKiAgICAtIFNldCBBVkkgcGFja2V0LCBiaXQtbWFwcGluZywgY29s b3IgZGVwdGgsIGV0Yy4KKyAqIDcuIEhEQ1AgYXV0aGVudGljYXRpb24KKyAqICAgIC0gVmVyaWZ5 IHRoYXQgSERDUCBpcyBzdXBwb3J0ZWQKKyAqICAgIC0gRW5hYmxlIGhhcmR3YXJlIEhEQ1AKKyAq IDguIEF1ZGlvIG91dHB1dAorICogICAgLSBBdXRvbWF0aWMgYXVkaW8gTSB2YWx1IGFkanVzdG1l bnQKKyAqICAgIC0gQ29uZmlndXJlIGF1ZGlvIG11bHRpY2hhbm5lbAorICogICAgLSBTZXQgYXVk aW8gcGFja2V0CisgKiA5LiBQbGF5YmFjaworICogICAgLSBUaGUgbm9ybWFsIHN5c3RlbSB3b3Jr aW5nIHN0YXRlCisgKgorICovCitib29sIHNwX21haW5fcHJvY2VzcyhzdHJ1Y3QgYW54Nzh4eCAq YW54Nzh4eCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW54Nzh4eC0+Y2xpZW50LT5kZXY7 CisKKwkvKgorCSAqIFNsaW1Qb3J0IFN0YXRlIFByb2Nlc3MKKwkgKi8KKwlzd2l0Y2ggKHNwLnR4 X3N5c3RlbV9zdGF0ZSkgeworCWNhc2UgU1RBVEVfV0FJVElOR19DQUJMRV9QTFVHOgorCQlzcF92 YXJpYWJsZV9pbml0KCk7CisJCWlmIChhbng3OHh4X2NhYmxlX2lzX2RldGVjdGVkKGFueDc4eHgp KSB7CisJCQlhbng3OHh4X3Bvd2Vyb24oYW54Nzh4eCk7CisJCQlzcC50eF9zeXN0ZW1fc3RhdGUg PSBTVEFURV9TUF9JTklUSUFMSVpFRDsKKwkJCWRldl9kYmcoZGV2LCAiPj4gU3lzdGVtIFN0YXRl IFRyYW5zaXRpb25cbiIpOworCQkJc3BfcHJpbnRfc3lzdGVtX3N0YXRlKGFueDc4eHgsIHNwLnR4 X3N5c3RlbV9zdGF0ZSk7CisJCX0gZWxzZSB7CisJCQlhbng3OHh4X3Bvd2Vyb2ZmKGFueDc4eHgp OworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJLyogZmFsbHRocm91Z2ggKi8KKwljYXNlIFNUQVRF X1NQX0lOSVRJQUxJWkVEOgorCQlzcF9pbml0aWFsaXphdGlvbihhbng3OHh4KTsKKwkJc3AudHhf c3lzdGVtX3N0YXRlID0gU1RBVEVfU0lOS19DT05ORUNUSU9OOworCQlkZXZfZGJnKGRldiwgIj4+ IFN5c3RlbSBTdGF0ZSBUcmFuc2l0aW9uXG4iKTsKKwkJc3BfcHJpbnRfc3lzdGVtX3N0YXRlKGFu eDc4eHgsIHNwLnR4X3N5c3RlbV9zdGF0ZSk7CisJLyogZmFsbHRocm91Z2ggKi8KKwljYXNlIFNU QVRFX1NJTktfQ09OTkVDVElPTjoKKwkJaWYgKHNwX2dldF9kcF9jb25uZWN0aW9uKGFueDc4eHgp KSB7CisJCQlzcC50eF9zeXN0ZW1fc3RhdGUgPSBTVEFURV9QQVJTRV9FRElEOworCQkJZGV2X2Ri ZyhkZXYsICI+PiBTeXN0ZW0gU3RhdGUgVHJhbnNpdGlvblxuIik7CisJCQlzcF9wcmludF9zeXN0 ZW1fc3RhdGUoYW54Nzh4eCwgc3AudHhfc3lzdGVtX3N0YXRlKTsKKwkJfSBlbHNlIHsKKwkJCWJy ZWFrOworCQl9CisJLyogZmFsbHRocm91Z2ggKi8KKwljYXNlIFNUQVRFX1BBUlNFX0VESUQ6CisJ CWlmIChzcF9lZGlkX3Byb2Nlc3MoYW54Nzh4eCkpIHsKKwkJCXNwLnR4X3N5c3RlbV9zdGF0ZSA9 IFNUQVRFX0xJTktfVFJBSU5JTkc7CisJCQlkZXZfZGJnKGRldiwgIj4+IFN5c3RlbSBTdGF0ZSBU cmFuc2l0aW9uXG4iKTsKKwkJCXNwX3ByaW50X3N5c3RlbV9zdGF0ZShhbng3OHh4LCBzcC50eF9z eXN0ZW1fc3RhdGUpOworCQl9IGVsc2UgeworCQkJYnJlYWs7CisJCX0KKwkvKiBmYWxsdGhyb3Vn aCAqLworCWNhc2UgU1RBVEVfTElOS19UUkFJTklORzoKKwkJaWYgKHNwX2xpbmtfdHJhaW5pbmco YW54Nzh4eCkpIHsKKwkJCXNwLnR4X3N5c3RlbV9zdGF0ZSA9IFNUQVRFX1ZJREVPX09VVFBVVDsK KwkJCWRldl9kYmcoZGV2LCAiPj4gU3lzdGVtIFN0YXRlIFRyYW5zaXRpb25cbiIpOworCQkJc3Bf cHJpbnRfc3lzdGVtX3N0YXRlKGFueDc4eHgsIHNwLnR4X3N5c3RlbV9zdGF0ZSk7CisJCX0gZWxz ZSB7CisJCQlicmVhazsKKwkJfQorCS8qIGZhbGx0aHJvdWdoICovCisJY2FzZSBTVEFURV9WSURF T19PVVRQVVQ6CisJCWlmIChzcF9jb25maWdfdmlkZW9fb3V0cHV0KGFueDc4eHgpKSB7CisJCQlz cC50eF9zeXN0ZW1fc3RhdGUgPSBTVEFURV9IRENQX0FVVEg7CisJCQlkZXZfZGJnKGRldiwgIj4+ IFN5c3RlbSBTdGF0ZSBUcmFuc2l0aW9uXG4iKTsKKwkJCXNwX3ByaW50X3N5c3RlbV9zdGF0ZShh bng3OHh4LCBzcC50eF9zeXN0ZW1fc3RhdGUpOworCQl9IGVsc2UgeworCQkJYnJlYWs7CisJCX0K KwkvKiBmYWxsdGhyb3VnaCAqLworCWNhc2UgU1RBVEVfSERDUF9BVVRIOgorCQlpZiAoIXNwX2hk Y3BfcmVwZWF0ZXJfbW9kZShhbng3OHh4KSkgeworCQkJaWYgKHNwX2hkY3BfcHJvY2Vzcyhhbng3 OHh4KSkgeworCQkJCXNwLnR4X3N5c3RlbV9zdGF0ZSA9IFNUQVRFX0FVRElPX09VVFBVVDsKKwkJ CQlkZXZfZGJnKGRldiwgIj4+IFN5c3RlbSBTdGF0ZSBUcmFuc2l0aW9uXG4iKTsKKwkJCQlzcF9w cmludF9zeXN0ZW1fc3RhdGUoYW54Nzh4eCwKKwkJCQkJCSAgICAgIHNwLnR4X3N5c3RlbV9zdGF0 ZSk7CisJCQl9IGVsc2UgeworCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UgeworCQkJc3AudHhf c3lzdGVtX3N0YXRlID0gU1RBVEVfQVVESU9fT1VUUFVUOworCQl9CisJLyogZmFsbHRocm91Z2gg Ki8KKwljYXNlIFNUQVRFX0FVRElPX09VVFBVVDoKKwkJaWYgKHNwX2NvbmZpZ19hdWRpb19vdXRw dXQoYW54Nzh4eCkpIHsKKwkJCXNwLnR4X3N5c3RlbV9zdGF0ZSA9IFNUQVRFX1BMQVlfQkFDSzsK KwkJCWRldl9kYmcoZGV2LCAiPj4gU3lzdGVtIFN0YXRlIFRyYW5zaXRpb25cbiIpOworCQkJc3Bf cHJpbnRfc3lzdGVtX3N0YXRlKGFueDc4eHgsIHNwLnR4X3N5c3RlbV9zdGF0ZSk7CisJCX0gZWxz ZSB7CisJCQlicmVhazsKKwkJfQorCS8qIGZhbGx0aHJvdWdoICovCisJY2FzZSBTVEFURV9QTEFZ X0JBQ0s6CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJLyogUHJvY2VzcyB0aGUgaW50ZXJy dXB0cyAqLworCWlmIChzcC50eF9zeXN0ZW1fc3RhdGUgPiBTVEFURV9XQUlUSU5HX0NBQkxFX1BM VUcpIHsKKwkJLyoKKwkJICogSW50ZXJydXB0IHJlY2VpdmVyCisJCSAqLworCQlzcF9pbnRfcmVj ZWl2ZXIoYW54Nzh4eCk7CisKKwkJLyoKKwkJICogVGFzayBoYW5kbGVyCisJCSAqLworCQlzcF90 YXNrX2hhbmRsZXIoYW54Nzh4eCk7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKy8qKgorICog c3Bfc3lzdGVtX2luaXQoKTogU3lzdGVtIGluaXRpYWxpemF0aW9uCisgKgorICogQGFueDc4eHg6 IFNsaW1Qb3J0IGRldmljZS4KKyAqCisgKiBBIHZhbHVlIG9mIHplcm8gd2lsbCBiZSByZXR1cm5l ZCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5vIHdpbGwKKyAqIGJlIHJldHVybmVkIGluIGVy cm9yIGNhc2VzLgorICovCitpbnQgc3Bfc3lzdGVtX2luaXQoc3RydWN0IGFueDc4eHggKmFueDc4 eHgpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmFueDc4eHgtPmNsaWVudC0+ZGV2OworCXUx NiBpZDsKKwl1OCBpZGggPSAwLCBpZGwgPSAwOworCWludCBpOworCisJYW54Nzh4eF9wb3dlcm9u KGFueDc4eHgpOworCisJLyogY2hlY2sgY2hpcCBpZCAqLworCXNwX3JlZ19yZWFkKGFueDc4eHgs IFRYX1AyLCBTUF9ERVZJQ0VfSURMX1JFRywgJmlkbCk7CisJc3BfcmVnX3JlYWQoYW54Nzh4eCwg VFhfUDIsIFNQX0RFVklDRV9JREhfUkVHLCAmaWRoKTsKKwlpZCA9IGlkbCB8IChpZGggPDwgOCk7 CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjaGlwaWRfbGlzdCk7IGkrKykgeworCQlp ZiAoaWQgPT0gY2hpcGlkX2xpc3RbaV0pIHsKKwkJCXNwX3ZhcmlhYmxlX2luaXQoKTsKKwkJCXJl dHVybiAwOworCQl9CisJfQorCisJYW54Nzh4eF9wb3dlcm9mZihhbng3OHh4KTsKKworCWRldl9l cnIoZGV2LCAiZmFpbGVkIHRvIGRldGVjdCBBTlgleFxuIiwgaWQpOworCisJcmV0dXJuIC1FTk9E RVY7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FueDc4eHgvc2xpbXBv cnRfdHhfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FueDc4eHgvc2xpbXBvcnRfdHhf ZHJ2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVlZTY5OAotLS0gL2Rl di9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW54Nzh4eC9zbGltcG9ydF90eF9k cnYuaApAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIENvcHlyaWdodChjKSAyMDE1LCBBbmFsb2dp eCBTZW1pY29uZHVjdG9yLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK KyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICov CisKKyNpZm5kZWYgX19TTElNUE9SVF9UWF9EUlZfSAorI2RlZmluZSBfX1NMSU1QT1JUX1RYX0RS Vl9ICisKKyNpbmNsdWRlIDxsaW51eC9oZG1pLmg+CisKKyNpbmNsdWRlICJhbng3OHh4LmgiCisj aW5jbHVkZSAic2xpbXBvcnRfdHhfcmVnLmgiCisKKyNkZWZpbmUgRldfVkVSU0lPTgkweDIzCisK KyNkZWZpbmUgSERNSV9JTkZPRlJBTUVfVFlQRV9NUEVHCTB4ODUKKyNkZWZpbmUgSERNSV9NUEVH X0lORk9GUkFNRV9TSVpFCTEwCisjZGVmaW5lIEhETUlfVlNJX0lORk9GUkFNRV9TSVpFCQkxMAor CitlbnVtIHNwX3R4X3N0YXRlIHsKKwlTVEFURV9XQUlUSU5HX0NBQkxFX1BMVUcsCisJU1RBVEVf U1BfSU5JVElBTElaRUQsCisJU1RBVEVfU0lOS19DT05ORUNUSU9OLAorCVNUQVRFX1BBUlNFX0VE SUQsCisJU1RBVEVfTElOS19UUkFJTklORywKKwlTVEFURV9WSURFT19PVVRQVVQsCisJU1RBVEVf SERDUF9BVVRILAorCVNUQVRFX0FVRElPX09VVFBVVCwKKwlTVEFURV9QTEFZX0JBQ0sKK307CisK K2VudW0gc3BfdHhfcG93ZXJfYmxvY2sgeworCVNQX1RYX1BXUl9SRUcgPSBTUF9SRUdJU1RFUl9Q RCwKKwlTUF9UWF9QV1JfSERDUCA9IFNQX0hEQ1BfUEQsCisJU1BfVFhfUFdSX0FVRElPID0gU1Bf QVVESU9fUEQsCisJU1BfVFhfUFdSX1ZJREVPID0gU1BfVklERU9fUEQsCisJU1BfVFhfUFdSX0xJ TksgPSBTUF9MSU5LX1BELAorCVNQX1RYX1BXUl9UT1RBTCA9IFNQX1RPVEFMX1BELAorCVNQX1RY X1BXUl9OVU1TCit9OworCitlbnVtIGhkbWlfY29sb3JfZGVwdGggeworCUhETUlfTEVHQUNZID0g MHgwMCwKKwlIRE1JXzI0QklUID0gMHgwNCwKKwlIRE1JXzMwQklUID0gMHgwNSwKKwlIRE1JXzM2 QklUID0gMHgwNiwKKwlIRE1JXzQ4QklUID0gMHgwNywKK307CisKK2VudW0gc3BfdHhfbHRfc3Rh dHVzIHsKKwlMVF9JTklULAorCUxUX1dBSVRfUExMX0xPQ0ssCisJTFRfQ0hFQ0tfTElOS19CVywK KwlMVF9TVEFSVCwKKwlMVF9XQUlUSU5HX0ZJTklTSCwKKwlMVF9FUlJPUiwKKwlMVF9GSU5JU0gs Cit9OworCitlbnVtIGhkY3Bfc3RhdHVzIHsKKwlIRENQX0NBUEFCTEVfQ0hFQ0ssCisJSERDUF9X QUlUSU5HX1ZJRF9TVEIsCisJSERDUF9IV19FTkFCTEUsCisJSERDUF9XQUlUSU5HX0ZJTklTSCwK KwlIRENQX0ZJTklTSCwKKwlIRENQX0ZBSUxFRCwKKwlIRENQX05PVF9TVVBQT1JURUQsCit9Owor CitlbnVtIHJlcGVhdGVyX3N0YXR1cyB7CisJSERDUF9ET05FLAorCUhEQ1BfRE9JTkcsCisJSERD UF9FUlJPUiwKK307CisKK2VudW0gdmlkZW9fb3V0cHV0X3N0YXR1cyB7CisJVk9fV0FJVF9WSURF T19TVEFCTEUsCisJVk9fV0FJVF9UWF9WSURFT19TVEFCTEUsCisJVk9fQ0hFQ0tfVklERU9fSU5G TywKKwlWT19GSU5JU0gsCit9OworCitlbnVtIGF1ZGlvX291dHB1dF9zdGF0dXMgeworCUFPX0lO SVQsCisJQU9fQ1RTX1JDVl9JTlQsCisJQU9fQVVESU9fUkNWX0lOVCwKKwlBT19SQ1ZfSU5UX0ZJ TklTSCwKKwlBT19PVVRQVVQsCit9OworCitzdHJ1Y3QgcGFja2V0X2F1ZGlvIHsKKwlzdHJ1Y3Qg aGRtaV9hbnlfaW5mb2ZyYW1lIGluZm9mcmFtZTsKKwl1OCBkYXRhW0hETUlfQVVESU9fSU5GT0ZS QU1FX1NJWkVdOworfTsKKworc3RydWN0IHBhY2tldF9hdmkgeworCXN0cnVjdCBoZG1pX2FueV9p bmZvZnJhbWUgaW5mb2ZyYW1lOworCXU4IGRhdGFbSERNSV9BVklfSU5GT0ZSQU1FX1NJWkVdOwor fTsKKworc3RydWN0IHBhY2tldF9tcGVnIHsKKwlzdHJ1Y3QgaGRtaV9hbnlfaW5mb2ZyYW1lIGlu Zm9mcmFtZTsKKwl1OCBkYXRhW0hETUlfTVBFR19JTkZPRlJBTUVfU0laRV07Cit9OworCitzdHJ1 Y3QgcGFja2V0X3ZzaSB7CisJc3RydWN0IGhkbWlfYW55X2luZm9mcmFtZSBpbmZvZnJhbWU7CisJ dTggZGF0YVtIRE1JX1ZTSV9JTkZPRlJBTUVfU0laRV07Cit9OworCitlbnVtIHBhY2tldHNfdHlw ZSB7CisJQVZJX1BBQ0tFVFMsCisJTVBFR19QQUNLRVRTLAorCVZTSV9QQUNLRVRTLAorCUFVRElG X1BBQ0tFVFMKK307CisKK2VudW0gc3Bfc3NjX2RlcCB7CisJU1NDX0RFUF9ESVNBQkxFID0gMHgw LAorCVNTQ19ERVBfNTAwUFBNLAorCVNTQ19ERVBfMTAwMFBQTSwKKwlTU0NfREVQXzE1MDBQUE0s CisJU1NDX0RFUF8yMDAwUFBNLAorCVNTQ19ERVBfMjUwMFBQTSwKKwlTU0NfREVQXzMwMDBQUE0s CisJU1NDX0RFUF8zNTAwUFBNLAorCVNTQ19ERVBfNDAwMFBQTSwKKwlTU0NfREVQXzQ1MDBQUE0s CisJU1NDX0RFUF81MDAwUFBNLAorCVNTQ19ERVBfNTUwMFBQTSwKKwlTU0NfREVQXzYwMDBQUE0K K307CisKK2Jvb2wgc3BfbWFpbl9wcm9jZXNzKHN0cnVjdCBhbng3OHh4ICphbng3OHh4KTsKKwor aW50IHNwX3N5c3RlbV9pbml0KHN0cnVjdCBhbng3OHh4ICphbng3OHh4KTsKKwordTggc3BfZ2V0 X2xpbmtfYmFuZHdpZHRoKHN0cnVjdCBhbng3OHh4ICphbng3OHh4KTsKKworI2VuZGlmCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FueDc4eHgvc2xpbXBvcnRfdHhfcmVnLmgg Yi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FueDc4eHgvc2xpbXBvcnRfdHhfcmVnLmgKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjExMGY4NAotLS0gL2Rldi9udWxsCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW54Nzh4eC9zbGltcG9ydF90eF9yZWcuaApAQCAtMCww ICsxLDc1NCBAQAorLyoKKyAqIENvcHlyaWdodChjKSAyMDE1LCBBbmFsb2dpeCBTZW1pY29uZHVj dG9yLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBh bmQKKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpZm5kZWYg X19TTElNUE9SVF9UWF9SRUdfREVGX0gKKyNkZWZpbmUgX19TTElNUE9SVF9UWF9SRUdfREVGX0gK KworI2RlZmluZSBUWF9QMAkJCQkweDcwCisjZGVmaW5lIFRYX1AxCQkJCTB4N2EKKyNkZWZpbmUg VFhfUDIJCQkJMHg3MgorCisjZGVmaW5lIFJYX1AwCQkJCTB4N2UKKyNkZWZpbmUgUlhfUDEJCQkJ MHg4MAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLworLyogUmVnaXN0ZXIgZGVmaW5pdGlvbiBvZiBkZXZpY2UgYWRkcmVz cyAweDdlICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBTeXN0ZW0gQ29u dHJvbCBhbmQgU3RhdHVzCisgKi8KKworLyogU29mdHdhcmUgUmVzZXQgUmVnaXN0ZXIgMSAqLwor I2RlZmluZSBTUF9TT0ZUV0FSRV9SRVNFVDFfUkVHCQkweDExCisjZGVmaW5lIFNQX1ZJREVPX1JT VAkJCUJJVCg0KQorI2RlZmluZSBTUF9IRENQX01BTl9SU1QJCQlCSVQoMikKKyNkZWZpbmUgU1Bf VE1EU19SU1QJCQlCSVQoMSkKKyNkZWZpbmUgU1BfU1dfTUFOX1JTVAkJCUJJVCgwKQorCisvKiBT eXN0ZW0gU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQX1NZU1RFTV9TVEFUVVNfUkVHCQkw eDE0CisjZGVmaW5lIFNQX1RNRFNfQ0xPQ0tfREVUCQlCSVQoMSkKKyNkZWZpbmUgU1BfVE1EU19E RV9ERVQJCQlCSVQoMCkKKworLyogSERNSSBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1Bf SERNSV9TVEFUVVNfUkVHCQkweDE1CisjZGVmaW5lIFNQX0hETUlfQVVEX0xBWU9VVAkJQklUKDMp CisjZGVmaW5lIFNQX0hETUlfREVUCQkJQklUKDApCisjICBkZWZpbmUgU1BfRFZJX01PREUJCQkw CisjICBkZWZpbmUgU1BfSERNSV9NT0RFCQkJMQorCisvKiBIRE1JIE11dGUgQ29udHJvbCBSZWdp c3RlciAqLworI2RlZmluZSBTUF9IRE1JX01VVEVfQ1RSTF9SRUcJCTB4MTYKKyNkZWZpbmUgU1Bf QVVEX01VVEUJCQlCSVQoMSkKKyNkZWZpbmUgU1BfVklEX01VVEUJCQlCSVQoMCkKKworLyogU3lz dGVtIFBvd2VyIERvd24gUmVnaXN0ZXIgMSAqLworI2RlZmluZSBTUF9TWVNURU1fUE9XRVJfRE9X TjFfUkVHCTB4MTgKKyNkZWZpbmUgU1BfUFdETl9DVFJMCQkJQklUKDApCisKKy8qCisgKiBBdWRp byBhbmQgVmlkZW8gQXV0byBDb250cm9sCisgKi8KKworLyogQXV0byBBdWRpbyBhbmQgVmlkZW8g Q29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBTUF9BVURWSURfQ1RSTF9SRUcJCTB4MjAKKyNk ZWZpbmUgU1BfQVZDX09FCQkJQklUKDcpCisjZGVmaW5lIFNQX0FBQ19PRQkJCUJJVCg2KQorI2Rl ZmluZSBTUF9BVkNfRU4JCQlCSVQoMSkKKyNkZWZpbmUgU1BfQUFDX0VOCQkJQklUKDApCisKKy8q IEF1ZGlvIEV4Y2VwdGlvbiBFbmFibGUgUmVnaXN0ZXJzICovCisjZGVmaW5lIFNQX0FVRF9FWENF UFRJT05fRU5BQkxFX0JBU0UJKDB4MjQgLSAxKQorLyogQml0cyBmb3IgQXVkaW8gRXhjZXB0aW9u IEVuYWJsZSBSZWdpc3RlciAzICovCisjZGVmaW5lIFNQX0FFQ19FTjIxCQkJQklUKDUpCisKKy8q CisgKiBJbnRlcnJ1cHQKKyAqLworCisvKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIDEgKi8K KyNkZWZpbmUgU1BfSU5UX1NUQVRVUzFfUkVHCQkweDMxCisvKiBCaXRzIGZvciBJbnRlcnJ1cHQg U3RhdHVzIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgU1BfSERNSV9EVkkJCQlCSVQoNykKKyNkZWZp bmUgU1BfQ0tEVF9DSEcJCQlCSVQoNikKKyNkZWZpbmUgU1BfU0NEVF9DSEcJCQlCSVQoNSkKKyNk ZWZpbmUgU1BfUENMS19DSEcJCQlCSVQoNCkKKyNkZWZpbmUgU1BfUExMX1VOTE9DSwkJCUJJVCgz KQorI2RlZmluZSBTUF9DQUJMRV9QTFVHX0NIRwkJQklUKDIpCisjZGVmaW5lIFNQX1NFVF9NVVRF CQkJQklUKDEpCisjZGVmaW5lIFNQX1NXX0lOVFIJCQlCSVQoMCkKKy8qIEJpdHMgZm9yIEludGVy cnVwdCBTdGF0dXMgUmVnaXN0ZXIgMiAqLworI2RlZmluZSBTUF9IRENQX0VSUgkJCUJJVCg1KQor I2RlZmluZSBTUF9BVURJT19TQU1QTEVfQ0hHCQlCSVQoMCkJLyogdW5kb2N1bWVudGVkICovCisv KiBCaXRzIGZvciBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIDMgKi8KKyNkZWZpbmUgU1BfQVVE X01PREVfQ0hHCQkJQklUKDApCisvKiBCaXRzIGZvciBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVy IDUgKi8KKyNkZWZpbmUgU1BfQVVESU9fUkNWCQkJQklUKDApCisvKiBCaXRzIGZvciBJbnRlcnJ1 cHQgU3RhdHVzIFJlZ2lzdGVyIDYgKi8KKyNkZWZpbmUgU1BfQ1RTX1JDVgkJCUJJVCg3KQorI2Rl ZmluZSBTUF9ORVdfQVVEX1BLVAkJCUJJVCg0KQorI2RlZmluZSBTUF9ORVdfQVZJX1BLVAkJCUJJ VCgxKQorI2RlZmluZSBTUF9ORVdfQ1BfUEtUCQkJQklUKDApCisvKiBCaXRzIGZvciBJbnRlcnJ1 cHQgU3RhdHVzIFJlZ2lzdGVyIDcgKi8KKyNkZWZpbmUgU1BfTk9fVlNJCQkJQklUKDcpCisjZGVm aW5lIFNQX05FV19WUwkJCUJJVCg0KQorCisvKiBJbnRlcnJ1cHQgTWFzayBTdGF0dXMgUmVnaXN0 ZXJzICovCisjZGVmaW5lIFNQX0lOVF9NQVNLX0JBU0UJCSgweDQxIC0gMSkKKworLyogSERNSSBV UyBUSU1FUiBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQX0hETUlfVVNfVElNRVJfQ1RS TF9SRUcJMHg0OQorI2RlZmluZSBTUF9NU19USU1FUl9NQVJHSU5fMTBfOF9NQVNLCTB4MDcKKwor LyoKKyAqIFRNRFMgQ29udHJvbAorICovCisKKy8qIFRNRFMgQ29udHJvbCBSZWdpc3RlcnMgKi8K KyNkZWZpbmUgU1BfVE1EU19DVFJMX0JBU0UJCSgweDUwIC0gMSkKKy8qIEJpdHMgZm9yIFRNRFMg Q29udHJvbCBSZWdpc3RlciA3ICovCisjZGVmaW5lIFNQX1BEX1JUCQkJQklUKDApCisKKy8qCisg KiBWaWRlbyBDb250cm9sCisgKi8KKworLyogVmlkZW8gU3RhdHVzIFJlZ2lzdGVyICovCisjZGVm aW5lIFNQX1ZJREVPX1NUQVRVU19SRUcJCTB4NzAKKyNkZWZpbmUgU1BfQ09MT1JfREVQVEhfTUFT SwkJMHhmMAorI2RlZmluZSBTUF9DT0xPUl9ERVBUSF9TSElGVAkJNAorCisvKiBWaWRlbyBEYXRh IFJhbmdlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BfVklEX0RBVEFfUkFOR0VfQ1RS TF9SRUcJMHg4MworI2RlZmluZSBTUF9SMllfSU5QVVRfTElNSVQJCUJJVCgxKQorCisvKiBQaXhl bCBDbG9jayBIaWdoIFJlc29sdXRpb24gQ291bnRlciBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgU1Bf UENMS19ISUdIUkVTX0NOVF9CQVNFCSgweDhjIC0gMSkKKworLyoKKyAqIEF1ZGlvIENvbnRyb2wK KyAqLworCisvKiBOdW1iZXIgb2YgQXVkaW8gQ2hhbm5lbHMgU3RhdHVzIFJlZ2lzdGVycyAqLwor I2RlZmluZSBTUF9BVURfQ0hfU1RBVFVTX1JFR19OVU0JNQorCisvKiBBdWRpbyBJTiBTL1BESUYg Q2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXJzICovCisjZGVmaW5lIFNQX0FVRF9TUERJRl9DSF9TVEFU VVNfQkFTRQkweGM3CisKKy8qIEF1ZGlvIElOIFMvUERJRiBDaGFubmVsIFN0YXR1cyBSZWdpc3Rl ciA0ICovCisjZGVmaW5lIFNQX0ZTX0ZSRVFfTUFTSwkJCTB4MGYKKyMgIGRlZmluZSBTUF9GU19G UkVRXzQ0MTAwSFoJCTB4MDAKKyMgIGRlZmluZSBTUF9GU19GUkVRXzQ4MDAwSFoJCTB4MDIKKyMg IGRlZmluZSBTUF9GU19GUkVRXzMyMDAwSFoJCTB4MDMKKyMgIGRlZmluZSBTUF9GU19GUkVRXzg4 MjAwSFoJCTB4MDgKKyMgIGRlZmluZSBTUF9GU19GUkVRXzk2MDAwSFoJCTB4MGEKKyMgIGRlZmlu ZSBTUF9GU19GUkVRXzE3NjQwMEhaCQkweDBjCisjICBkZWZpbmUgU1BfRlNfRlJFUV8xOTIwMDBI WgkJMHgwZQorCisvKgorICogTWljZWxsYW5lb3VzIENvbnRyb2wgQmxvY2sKKyAqLworCisvKiBD SElQIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BfQ0hJUF9DVFJMX1JFRwkJMHhlMwor I2RlZmluZSBTUF9NQU5fSERNSTVWX0RFVAkJQklUKDMpCisjZGVmaW5lIFNQX1BMTExPQ0tfQ0tE VF9FTgkJQklUKDIpCisjZGVmaW5lIFNQX0FOQUxPR19DS0RUX0VOCQlCSVQoMSkKKyNkZWZpbmUg U1BfRElHSVRBTF9DS0RUX0VOCQlCSVQoMCkKKworLyogUGFja2V0IFJlY2VpdmluZyBTdGF0dXMg UmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BfUEFDS0VUX1JFQ0VJVklOR19TVEFUVVNfUkVHCTB4ZjMK KyNkZWZpbmUgU1BfQVZJX1JDVkQJCQlCSVQoNSkKKyNkZWZpbmUgU1BfVlNJX1JDVkQJCQlCSVQo MSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KKy8qIFJlZ2lzdGVyIGRlZmluaXRpb24gb2YgZGV2aWNlIGFkZHJlc3Mg MHg4MCAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBIRENQIEJDQVBTIFNoYWRv dyBSZWdpc3RlciAqLworI2RlZmluZSBTUF9IRENQX0JDQVBTX1NIQURPV19SRUcJMHgyYQorI2Rl ZmluZSBTUF9CQ0FQU19SRVBFQVRFUgkJQklUKDUpCisKKy8qIEhEQ1AgU3RhdHVzIFJlZ2lzdGVy ICovCisjZGVmaW5lIFNQX1JYX0hEQ1BfU1RBVFVTX1JFRwkJMHgzZgorI2RlZmluZSBTUF9BVVRI X0VOCQkJQklUKDQpCisKKy8qCisgKiBJbmZvRnJhbWUgYW5kIENvbnRyb2wgUGFja2V0IFJlZ2lz dGVycworICovCisKKyNkZWZpbmUgU1BfQ09MT1JTUEFDRV9SR0IJCTB4MDAKKyNkZWZpbmUgU1Bf Q09MT1JTUEFDRV9ZQ0JDUjQyMgkJMHgwMQorI2RlZmluZSBTUF9DT0xPUlNQQUNFX1lDQkNSNDQ0 CQkweDAyCisKKy8qIEFWSSBJbmZvRnJhbWUgUmVnaXN0ZXJzICovCisjZGVmaW5lIFNQX0FWSV9J TkZPRlJBTUVfREFUQV9CQVNFCTB4YTQKKworI2RlZmluZSBTUF9BVklfQ09MT1JfRl9NQVNLCQkw eDYwCisjZGVmaW5lIFNQX0FWSV9DT0xPUl9GX1NISUZUCQk1CisKKy8qIEF1ZGlvIEluZm9GcmFt ZSBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgU1BfQVVEX0lORk9GUkFNRV9EQVRBX0JBU0UJMHhjNAor I2RlZmluZSBTUF9BVURfSU5GT0ZSQU1FX0xBWU9VVF9NQVNLCTB4MGYKKworLyogTVBFRy9IRE1J IFZlbmRvciBTcGVjaWZpYyBJbmZvRnJhbWUgUGFja2V0IHR5cGUgY29kZSAqLworI2RlZmluZSBT UF9NUEVHX1ZTX0lORk9GUkFNRV9UWVBFX1JFRwkweGUwCisKKy8qIE1QRUcvSERNSSBWZW5kb3Ig U3BlY2lmaWMgSW5mb0ZyYW1lIFBhY2tldCB2ZXJzaW9uIG51bWJlciAqLworI2RlZmluZSBTUF9N UEVHX1ZTX0lORk9GUkFNRV9WRVJfUkVHCTB4ZTEKKworLyogTVBFRy9IRE1JIFZlbmRvciBTcGVj aWZpYyBJbmZvRnJhbWUgUGFja2V0IGNvbnRlbnQgKi8KKyNkZWZpbmUgU1BfTVBFR19WU19JTkZP RlJBTUVfREFUQV9CQVNFCTB4ZTQKKworLyogR2VuZXJhbCBDb250cm9sIFBhY2tldCBSZWdpc3Rl ciAqLworI2RlZmluZSBTUF9HRU5FUkFMX0NUUkxfUEFDS0VUX1JFRwkweDlmCisjZGVmaW5lIFNQ X0NMRUFSX0FWTVVURQkJCUJJVCg0KQorI2RlZmluZSBTUF9TRVRfQVZNVVRFCQkJQklUKDApCisK Ky8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCisvKiBSZWdpc3RlciBkZWZpbml0aW9uIG9mIGRldmljZSBhZGRyZXNzIDB4NzAg ICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogSERDUCBTdGF0dXMgUmVnaXN0ZXIg Ki8KKyNkZWZpbmUgU1BfVFhfSERDUF9TVEFUVVNfUkVHCQkweDAwCisjZGVmaW5lIFNQX0FVVEhf RkFJTAkJCUJJVCg1KQorI2RlZmluZSBTUF9BVVRIRU5fUEFTUwkJCUJJVCgxKQorCisvKiBIRENQ IENvbnRyb2wgUmVnaXN0ZXIgMCAqLworI2RlZmluZSBTUF9IRENQX0NUUkwwX1JFRwkJMHgwMQor I2RlZmluZSBTUF9SWF9SRVBFQVRFUgkJCUJJVCg2KQorI2RlZmluZSBTUF9SRV9BVVRICQkJQklU KDUpCisjZGVmaW5lIFNQX1NXX0FVVEhfT0sJCQlCSVQoNCkKKyNkZWZpbmUgU1BfSEFSRF9BVVRI X0VOCQkJQklUKDMpCisjZGVmaW5lIFNQX0hEQ1BfRU5DX0VOCQkJQklUKDIpCisjZGVmaW5lIFNQ X0JLU1ZfU1JNX1BBU1MJCUJJVCgxKQorI2RlZmluZSBTUF9LU1ZMSVNUX1ZMRAkJCUJJVCgwKQor LyogSERDUCBGdW5jdGlvbiBFbmFibGVkICovCisjZGVmaW5lIFNQX0hEQ1BfRlVOQ1RJT05fRU5B QkxFRAkoQklUKDApIHwgQklUKDEpIHwgQklUKDIpIHwgQklUKDMpKQorCisvKiBIRENQIFJlY2Vp dmVyIEJTVEFUVVMgUmVnaXN0ZXIgMCAqLworI2RlZmluZQlTUF9IRENQX1JYX0JTVEFUVVMwX1JF RwkJMHgxYgorLyogSERDUCBSZWNlaXZlciBCU1RBVFVTIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUJ U1BfSERDUF9SWF9CU1RBVFVTMV9SRUcJCTB4MWMKKworLyogSERDUCBFbWJlZGRlZCAiQmx1ZSBT Y3JlZW4iIENvbnRlbnQgUmVnaXN0ZXJzICovCisjZGVmaW5lIFNQX0hEQ1BfVklEMF9CTFVFX1ND UkVFTl9SRUcJMHgyYworI2RlZmluZSBTUF9IRENQX1ZJRDFfQkxVRV9TQ1JFRU5fUkVHCTB4MmQK KyNkZWZpbmUgU1BfSERDUF9WSUQyX0JMVUVfU0NSRUVOX1JFRwkweDJlCisKKy8qIEhEQ1AgV2Fp dCBSMCBUaW1pbmcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BfSERDUF9XQUlUX1IwX1RJTUVfUkVH CTB4NDAKKworLyogSERDUCBMaW5rIEludGVncml0eSBDaGVjayBUaW1lciBSZWdpc3RlciAqLwor I2RlZmluZSBTUF9IRENQX0xJTktfQ0hFQ0tfVElNRVJfUkVHCTB4NDEKKworLyogSERDUCBSZXBl YXRlciBSZWFkeSBXYWl0IFRpbWVyIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQX0hEQ1BfUlBUUl9S RFlfV0FJVF9USU1FX1JFRwkweDQyCisKKy8qIEhEQ1AgQXV0byBUaW1lciBSZWdpc3RlciAqLwor I2RlZmluZSBTUF9IRENQX0FVVE9fVElNRVJfUkVHCQkweDUxCisKKy8qIEhEQ1AgS2V5IFN0YXR1 cyBSZWdpc3RlciAqLworI2RlZmluZSBTUF9IRENQX0tFWV9TVEFUVVNfUkVHCQkweDVlCisKKy8q IEhEQ1AgS2V5IENvbW1hbmQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BfSERDUF9LRVlfQ09NTUFO RF9SRUcJCTB4NWYKKyNkZWZpbmUgU1BfRElTQUJMRV9TWU5DX0hEQ1AJCUJJVCgyKQorCisvKiBP VFAgTWVtb3J5IEtleSBQcm90ZWN0aW9uIFJlZ2lzdGVycyAqLworI2RlZmluZSBTUF9PVFBfS0VZ X1BST1RFQ1QxX1JFRwkJMHg2MAorI2RlZmluZSBTUF9PVFBfS0VZX1BST1RFQ1QyX1JFRwkJMHg2 MQorI2RlZmluZSBTUF9PVFBfS0VZX1BST1RFQ1QzX1JFRwkJMHg2MgorI2RlZmluZSBTUF9PVFBf UFNXMQkJCTB4YTIKKyNkZWZpbmUgU1BfT1RQX1BTVzIJCQkweDdlCisjZGVmaW5lIFNQX09UUF9Q U1czCQkJMHhjNgorCisvKiBEUCBTeXN0ZW0gQ29udHJvbCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUg U1BfRFBfU1lTVEVNX0NUUkxfQkFTRQkJKDB4ODAgLSAxKQorLyogQml0cyBmb3IgRFAgU3lzdGVt IENvbnRyb2wgUmVnaXN0ZXIgMiAqLworI2RlZmluZSBTUF9DSEFfU1RBCQkJQklUKDIpCisvKiBC aXRzIGZvciBEUCBTeXN0ZW0gQ29udHJvbCBSZWdpc3RlciAzICovCisjZGVmaW5lIFNQX0hQRF9T VEFUVVMJCQlCSVQoNikKKyNkZWZpbmUgU1BfU1RSTV9WQUxJRAkJCUJJVCgyKQorLyogQml0cyBm b3IgRFAgU3lzdGVtIENvbnRyb2wgUmVnaXN0ZXIgNCAqLworI2RlZmluZSBTUF9FTkhBTkNFRF9N T0RFCQlCSVQoMykKKworLyogRFAgVmlkZW8gQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBT UF9EUF9WSURFT19DVFJMX1JFRwkJMHg4NAorI2RlZmluZSBTUF9DT0xPUl9GX01BU0sJCQkweDA2 CisjZGVmaW5lIFNQX0NPTE9SX0ZfU0hJRlQJCTEKKyNkZWZpbmUgU1BfQlBDX01BU0sJCQkweGUw CisjZGVmaW5lIFNQX0JQQ19TSElGVAkJCTUKKyMgIGRlZmluZSBTUF9CUENfNkJJVFMJCQkweDAw CisjICBkZWZpbmUgU1BfQlBDXzhCSVRTCQkJMHgwMQorIyAgZGVmaW5lIFNQX0JQQ18xMEJJVFMJ CQkweDAyCisjICBkZWZpbmUgU1BfQlBDXzEyQklUUwkJCTB4MDMKKworLyogRFAgQXVkaW8gQ29u dHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBTUF9EUF9BVURJT19DVFJMX1JFRwkJMHg4NworI2Rl ZmluZSBTUF9BVURfRU4JCQlCSVQoMCkKKworLyogMTB1cyBQdWxzZSBHZW5lcmF0ZSBUaW1lciBS ZWdpc3RlcnMgKi8KKyNkZWZpbmUgU1BfSTJDX0dFTl8xMFVTX1RJTUVSMF9SRUcJMHg4OAorI2Rl ZmluZSBTUF9JMkNfR0VOXzEwVVNfVElNRVIxX1JFRwkweDg5CisKKy8qIFBhY2tldCBTZW5kIENv bnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BfUEFDS0VUX1NFTkRfQ1RSTF9SRUcJCTB4OTAK KyNkZWZpbmUgU1BfQVVEX0lGX1VQCQkJQklUKDcpCisjZGVmaW5lIFNQX0FWSV9JRl9VRAkJCUJJ VCg2KQorI2RlZmluZSBTUF9NUEVHX0lGX1VECQkJQklUKDUpCisjZGVmaW5lIFNQX1NQRF9JRl9V RAkJCUJJVCg0KQorI2RlZmluZSBTUF9BVURfSUZfRU4JCQlCSVQoMykKKyNkZWZpbmUgU1BfQVZJ X0lGX0VOCQkJQklUKDIpCisjZGVmaW5lIFNQX01QRUdfSUZfRU4JCQlCSVQoMSkKKyNkZWZpbmUg U1BfU1BEX0lGX0VOCQkJQklUKDApCisKKy8qIERQIEhEQ1AgQ29udHJvbCBSZWdpc3RlciAqLwor I2RlZmluZSBTUF9EUF9IRENQX0NUUkxfUkVHCQkweDkyCisjZGVmaW5lIFNQX0FVVE9fRU4JCQlC SVQoNykKKyNkZWZpbmUgU1BfQVVUT19TVEFSVAkJCUJJVCg1KQorI2RlZmluZSBTUF9MSU5LX1BP TExJTkcJCQlCSVQoMSkKKworLyogRFAgTWFpbiBMaW5rIEJhbmR3aWR0aCBTZXR0aW5nIFJlZ2lz dGVyICovCisjZGVmaW5lIFNQX0RQX01BSU5fTElOS19CV19TRVRfUkVHCTB4YTAKKyNkZWZpbmUg U1BfTElOS19CV19TRVRfTUFTSwkJMHgxZgorIyAgZGVmaW5lIFNQX0xJTktfNlA3NUcJCQkweDE5 CisjICBkZWZpbmUgU1BfTElOS181UDRHCQkJMHgxNAorIyAgZGVmaW5lIFNQX0xJTktfMlA3RwkJ CTB4MGEKKyMgIGRlZmluZSBTUF9MSU5LXzFQNjJHCQkJMHgwNgorI2RlZmluZSBTUF9JTklUSUFM X1NMSU1fTV9BVURfU0VMCUJJVCg1KQorCisvKiBEUCBUcmFpbmluZyBQYXR0ZXJuIFNldCBSZWdp c3RlciAqLworI2RlZmluZSBTUF9EUF9UUkFJTklOR19QQVRURVJOX1NFVF9SRUcJMHhhMgorCisv KiBEUCBMYW5lIDAgTGluayBUcmFpbmluZyBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQ X0RQX0xBTkUwX0xUX0NUUkxfUkVHCQkweGEzCisjZGVmaW5lIFNQX1RYX1NXX1NFVF9NQVNLCQkw eDFiCisjZGVmaW5lIFNQX01BWF9QUkVfUkVBQ0gJCUJJVCg1KQorI2RlZmluZSBTUF9NQVhfRFJJ VkVfUkVBQ0gJCUJJVCg0KQorI2RlZmluZSBTUF9QUkVfRU1QX0xFVkVMMQkJQklUKDMpCisjZGVm aW5lIFNQX0RSVklFX0NVUlJFTlRfTEVWRUwxCQlCSVQoMCkKKworLyogRFAgTGluayBUcmFpbmlu ZyBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQX0RQX0xUX0NUUkxfUkVHCQkweGE4Cisj ZGVmaW5lIFNQX0xUX0VSUk9SX1RZUEVfTUFTSwkJMHg3MAorIyAgZGVmaW5lIFNQX0xUX05PX0VS Uk9SCQkweDAwCisjICBkZWZpbmUgU1BfTFRfQVVYX1dSSVRFX0VSUk9SCQkweDAxCisjICBkZWZp bmUgU1BfTFRfTUFYX0RSSVZFX1JFQUNIRUQJMHgwMgorIyAgZGVmaW5lIFNQX0xUX1dST05HX0xB TkVfQ09VTlRfU0VUCTB4MDMKKyMgIGRlZmluZSBTUF9MVF9MT09QX1NBTUVfNV9USU1FCTB4MDQK KyMgIGRlZmluZSBTUF9MVF9DUl9GQUlMX0lOX0VRCQkweDA1CisjICBkZWZpbmUgU1BfTFRfRVFf TE9PUF81X1RJTUUJCTB4MDYKKyNkZWZpbmUgU1BfTFRfRU4JCQlCSVQoMCkKKworLyogRFAgQ0VQ IFRyYWluaW5nIENvbnRyb2wgUmVnaXN0ZXJzICovCisjZGVmaW5lIFNQX0RQX0NFUF9UUkFJTklO R19DVFJMMF9SRUcJMHhhOQorI2RlZmluZSBTUF9EUF9DRVBfVFJBSU5JTkdfQ1RSTDFfUkVHCTB4 YWEKKworLyogRFAgRGVidWcgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBTUF9EUF9ERUJVRzFfUkVH CQkweGIwCisjZGVmaW5lIFNQX0RFQlVHX1BMTF9MT0NLCQlCSVQoNCkKKyNkZWZpbmUgU1BfUE9M TElOR19FTgkJCUJJVCgxKQorCisvKiBEUCBQb2xsaW5nIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNk ZWZpbmUgU1BfRFBfUE9MTElOR19DVFJMX1JFRwkJMHhiNAorI2RlZmluZSBTUF9BVVRPX1BPTExJ TkdfRElTQUJMRQkJQklUKDApCisKKy8qIERQIExpbmsgRGVidWcgQ29udHJvbCBSZWdpc3RlciAq LworI2RlZmluZSBTUF9EUF9MSU5LX0RFQlVHX0NUUkxfUkVHCTB4YjgKKyNkZWZpbmUgU1BfTV9W SURfREVCVUcJCQlCSVQoNSkKKyNkZWZpbmUgU1BfTkVXX1BSQlM3CQkJQklUKDQpCisjZGVmaW5l IFNQX0lOU0VSVF9FUgkJCUJJVCgxKQorI2RlZmluZSBTUF9QUkJTMzFfRU4JCQlCSVQoMCkKKwor LyogQVVYIE1pc2MgY29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBTUF9BVVhfTUlTQ19DVFJM X1JFRwkJMHhiZgorCisvKiBEUCBQTEwgY29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBTUF9E UF9QTExfQ1RSTF9SRUcJCTB4YzcKKyNkZWZpbmUgU1BfUExMX1JTVAkJCUJJVCg2KQorCisvKiBE UCBBbmFsb2cgUG93ZXIgRG93biBSZWdpc3RlciAqLworI2RlZmluZSBTUF9EUF9BTkFMT0dfUE9X RVJfRE9XTl9SRUcJMHhjOAorI2RlZmluZSBTUF9DSDBfUEQJCQlCSVQoMCkKKworLyogRFAgTWlz YyBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQX0RQX01JU0NfQ1RSTF9SRUcJCTB4Y2QK KyNkZWZpbmUgU1BfRVFfVFJBSU5JTkdfTE9PUAkJQklUKDYpCisKKy8qIERQIEV4dHJhIEkyQyBE ZXZpY2UgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSBTUF9EUF9FWFRSQV9JMkNfREVWX0FE RFJfUkVHCTB4Y2UKKyNkZWZpbmUgU1BfSTJDX1NUUkVUQ0hfRElTQUJMRQkJQklUKDcpCisKKyNk ZWZpbmUgU1BfSTJDX0VYVFJBX0FERFIJCTB4NTAKKworLyogRFAgRG93blNwcmVhZGluZyBDb250 cm9sIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgU1BfRFBfRE9XTlNQUkVBRElOR19DVFJMMV9SRUcJ MHhkMAorI2RlZmluZSBTUF9UWF9TU0NfRElTQUJMRQkJMHhjMAorI2RlZmluZSBTUF9UWF9TU0Nf RE9XTlNQUkVBRElORwkJQklUKDYpCisKKy8qIERQIE0gVmFsdWUgQ2FsY3VsYXRpb24gQ29udHJv bCBSZWdpc3RlciAqLworI2RlZmluZSBTUF9EUF9NX0NBTENVTEFUSU9OX0NUUkxfUkVHCTB4ZDkK KyNkZWZpbmUgU1BfTV9HRU5fQ0xLX1NFTAkJQklUKDApCisKKy8qIEFVWCBDaGFubmVsIEFjY2Vz cyBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BfQVVYX0NIX1NUQVRVU19SRUcJCTB4ZTAK KyNkZWZpbmUgU1BfQVVYX1NUQVRVUwkJCTB4MGYKKworLyogQVVYIENoYW5uZWwgREVGRVIgQ29u dHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBTUF9BVVhfREVGRVJfQ1RSTF9SRUcJCTB4ZTIKKyNk ZWZpbmUgU1BfREVGRVJfQ1RSTF9FTgkJQklUKDcpCisKKy8qIERQIEJ1ZmZlciBEYXRhIENvdW50 IFJlZ2lzdGVyICovCisjZGVmaW5lIFNQX0JVRl9EQVRBX0NPVU5UX1JFRwkJMHhlNAorI2RlZmlu ZSBTUF9CVUZfQ0xSCQkJQklUKDcpCisKKy8qIERQIEFVWCBDaGFubmVsIENvbnRyb2wgUmVnaXN0 ZXIgMSAqLworI2RlZmluZSBTUF9EUF9BVVhfQ0hfQ1RSTDFfUkVHCQkweGU1CisjZGVmaW5lIFNQ X0FVWF9UWF9DT01NX01BU0sJCTB4MGYKKyNkZWZpbmUgU1BfQVVYX0xFTkdUSF9NQVNLCQkweGYw CisjZGVmaW5lIFNQX0FVWF9MRU5HVEhfU0hJRlQJCTQKKworLyogRFAgQVVYIENIIEFkZHJlc3Mg UmVnaXN0ZXIgMCAqLworI2RlZmluZSBTUF9BVVhfQUREUl83XzBfUkVHCQkweGU2CisKKy8qIERQ IEFVWCBDSCBBZGRyZXNzIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgU1BfQVVYX0FERFJfMTVfOF9S RUcJCTB4ZTcKKworLyogRFAgQVVYIENIIEFkZHJlc3MgUmVnaXN0ZXIgMiAqLworI2RlZmluZSBT UF9BVVhfQUREUl8xOV8xNl9SRUcJCTB4ZTgKKyNkZWZpbmUgU1BfQVVYX0FERFJfMTlfMTZfTUFT SwkJMHgwZgorCisvKiBEUCBBVVggQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyIDIgKi8KKyNkZWZp bmUgU1BfRFBfQVVYX0NIX0NUUkwyX1JFRwkJMHhlOQorI2RlZmluZSBTUF9BVVhfU0VMX1JYQ00J CQlCSVQoNikKKyNkZWZpbmUgU1BfQVVYX0NIU0VMCQkJQklUKDMpCisjZGVmaW5lIFNQX0FVWF9Q Tl9JTlYJCQlCSVQoMikKKyNkZWZpbmUgU1BfQUREUl9PTkxZCQkJQklUKDEpCisjZGVmaW5lIFNQ X0FVWF9FTgkJCUJJVCgwKQorCisvKiBEUCBWaWRlbyBTdHJlYW0gQ29udHJvbCBJbmZvRnJhbWUg UmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BfRFBfM0RfVlNDX0NUUkxfUkVHCQkweGVhCisjZGVmaW5l IFNQX0lORk9fRlJBTUVfVlNDX0VOCQlCSVQoMCkKKworLyogRFAgVmlkZW8gU3RyZWFtIERhdGEg Qnl0ZSAxIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQX0RQX1ZTQ19EQjFfUkVHCQkweGViCisKKy8q IERQIEFVWCBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXIgMyAqLworI2RlZmluZSBTUF9EUF9BVVhf Q0hfQ1RSTDNfUkVHCQkweGVjCisjZGVmaW5lIFNQX1dBSVRfQ09VTlRFUl83XzBfTUFTSwkweGZm CisKKy8qIERQIEFVWCBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXIgNCAqLworI2RlZmluZSBTUF9E UF9BVVhfQ0hfQ1RSTDRfUkVHCQkweGVkCisKKy8qIERQIEFVWCBCdWZmZXIgRGF0YSBSZWdpc3Rl cnMgKi8KKyNkZWZpbmUgU1BfRFBfQlVGX0RBVEEwX1JFRwkJMHhmMAorCisvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyog UmVnaXN0ZXIgZGVmaW5pdGlvbiBvZiBkZXZpY2UgYWRkcmVzcyAweDcyICAgICAgICAgICAgICAg ICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCisKKy8qCisgKiBDb3JlIFJlZ2lzdGVyIERlZmluaXRpb25zCisgKi8K KworLyogRGV2aWNlIElEIExvdyBCeXRlIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQX0RFVklDRV9J RExfUkVHCQkweDAyCisKKy8qIERldmljZSBJRCBIaWdoIEJ5dGUgUmVnaXN0ZXIgKi8KKyNkZWZp bmUgU1BfREVWSUNFX0lESF9SRUcJCTB4MDMKKworLyogUG93ZXIgRG93biBDb250cm9sIFJlZ2lz dGVyICovCisjZGVmaW5lIFNQX1BPV0VSRE9XTl9DVFJMX1JFRwkJMHgwNQorI2RlZmluZSBTUF9S RUdJU1RFUl9QRAkJCUJJVCg3KQorI2RlZmluZSBTUF9IRENQX1BECQkJQklUKDUpCisjZGVmaW5l IFNQX0FVRElPX1BECQkJQklUKDQpCisjZGVmaW5lIFNQX1ZJREVPX1BECQkJQklUKDMpCisjZGVm aW5lIFNQX0xJTktfUEQJCQlCSVQoMikKKyNkZWZpbmUgU1BfVE9UQUxfUEQJCQlCSVQoMSkKKwor LyogUmVzZXQgQ29udHJvbCBSZWdpc3RlciAxICovCisjZGVmaW5lIFNQX1JFU0VUX0NUUkwxX1JF RwkJMHgwNgorI2RlZmluZSBTUF9NSVNDX1JTVAkJCUJJVCg3KQorI2RlZmluZSBTUF9WSURDQVBf UlNUCQkJQklUKDYpCisjZGVmaW5lIFNQX1ZJREZJRl9SU1QJCQlCSVQoNSkKKyNkZWZpbmUgU1Bf QVVERklGX1JTVAkJCUJJVCg0KQorI2RlZmluZSBTUF9BVURDQVBfUlNUCQkJQklUKDMpCisjZGVm aW5lIFNQX0hEQ1BfUlNUCQkJQklUKDIpCisjZGVmaW5lIFNQX1NXX1JTVAkJCUJJVCgxKQorI2Rl ZmluZSBTUF9IV19SU1QJCQlCSVQoMCkKKworLyogUmVzZXQgQ29udHJvbCBSZWdpc3RlciAyICov CisjZGVmaW5lIFNQX1JFU0VUX0NUUkwyX1JFRwkJMHgwNworI2RlZmluZSBTUF9BVVhfUlNUCQkJ QklUKDIpCisjZGVmaW5lIFNQX1NFUkRFU19GSUZPX1JTVAkJQklUKDEpCisjZGVmaW5lIFNQX0ky Q19SRUdfUlNUCQkJQklUKDApCisKKy8qIFZpZGVvIENvbnRyb2wgUmVnaXN0ZXIgMSAqLworI2Rl ZmluZSBTUF9WSURfQ1RSTDFfUkVHCQkweDA4CisjZGVmaW5lIFNQX1ZJREVPX0VOCQkJQklUKDcp CisjZGVmaW5lIFNQX1ZJREVPX01VVEUJCQlCSVQoMikKKyNkZWZpbmUgU1BfREVfR0VOCQkJQklU KDEpCisjZGVmaW5lIFNQX0RFTVVYCQkJQklUKDApCisKKy8qIFZpZGVvIENvbnRyb2wgUmVnaXN0 ZXIgMiAqLworI2RlZmluZSBTUF9WSURfQ1RSTDJfUkVHCQkweDA5CisjZGVmaW5lIFNQX0lOX0NP TE9SX0ZfTUFTSwkJMHgwMworI2RlZmluZSBTUF9JTl9ZQ19CSVRfU0VMCQlCSVQoMikKKyNkZWZp bmUgU1BfSU5fQlBDX01BU0sJCQkweDcwCisjZGVmaW5lIFNQX0lOX0JQQ19TSElGVAkJCTQKKyMg IGRlZmluZSBTUF9JTl9CUENfMTJCSVQJCTB4MDMKKyMgIGRlZmluZSBTUF9JTl9CUENfMTBCSVQJ CTB4MDIKKyMgIGRlZmluZSBTUF9JTl9CUENfOEJJVAkJMHgwMQorIyAgZGVmaW5lIFNQX0lOX0JQ Q182QklUCQkweDAwCisjZGVmaW5lIFNQX0lOX0RfUkFOR0UJCQlCSVQoNykKKworLyogVmlkZW8g Q29udHJvbCBSZWdpc3RlciAzICovCisjZGVmaW5lIFNQX1ZJRF9DVFJMM19SRUcJCTB4MGEKKyNk ZWZpbmUgU1BfSFBEX09VVAkJCUJJVCg2KQorCisvKiBWaWRlbyBDb250cm9sIFJlZ2lzdGVyIDUg Ki8KKyNkZWZpbmUgU1BfVklEX0NUUkw1X1JFRwkJMHgwYworI2RlZmluZSBTUF9DU0NfU1REX1NF TAkJCUJJVCg3KQorI2RlZmluZSBTUF9YVllDQ19STkdfTE1UCQlCSVQoNikKKyNkZWZpbmUgU1Bf UkFOR0VfWTJSCQkJQklUKDUpCisjZGVmaW5lIFNQX0NTUEFDRV9ZMlIJCQlCSVQoNCkKKyNkZWZp bmUgU1BfUkdCX1JOR19MTVQJCQlCSVQoMykKKyNkZWZpbmUgU1BfWV9STkdfTE1UCQkJQklUKDIp CisjZGVmaW5lIFNQX1JBTkdFX1IyWQkJCUJJVCgxKQorI2RlZmluZSBTUF9DU1BBQ0VfUjJZCQkJ QklUKDApCisKKy8qIFZpZGVvIENvbnRyb2wgUmVnaXN0ZXIgNiAqLworI2RlZmluZSBTUF9WSURf Q1RSTDZfUkVHCQkweDBkCisjZGVmaW5lIFNQX1RFU1RfUEFUVEVSTl9FTgkJQklUKDcpCisjZGVm aW5lIFNQX1ZJREVPX1BST0NFU1NfRU4JCUJJVCg2KQorI2RlZmluZSBTUF9WSURfVVNfTU9ERQkJ CUJJVCgzKQorI2RlZmluZSBTUF9WSURfRFNfTU9ERQkJCUJJVCgyKQorI2RlZmluZSBTUF9VUF9T QU1QTEUJCQlCSVQoMSkKKyNkZWZpbmUgU1BfRE9XTl9TQU1QTEUJCQlCSVQoMCkKKworLyogVmlk ZW8gQ29udHJvbCBSZWdpc3RlciA4ICovCisjZGVmaW5lIFNQX1ZJRF9DVFJMOF9SRUcJCTB4MGYK KyNkZWZpbmUgU1BfVklEX1ZSRVNfVEgJCQlCSVQoMCkKKworLyogVG90YWwgTGluZSBTdGF0dXMg TG93IEJ5dGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BfVE9UQUxfTElORV9TVEFMX1JFRwkJMHgy NAorCisvKiBUb3RhbCBMaW5lIFN0YXR1cyBIaWdoIEJ5dGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUg U1BfVE9UQUxfTElORV9TVEFIX1JFRwkJMHgyNQorCisvKiBBY3RpdmUgTGluZSBTdGF0dXMgTG93 IEJ5dGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BfQUNUX0xJTkVfU1RBTF9SRUcJCTB4MjYKKwor LyogQWN0aXZlIExpbmUgU3RhdHVzIEhpZ2ggQnl0ZSBSZWdpc3RlciAqLworI2RlZmluZSBTUF9B Q1RfTElORV9TVEFIX1JFRwkJMHgyNworCisvKiBWZXJ0aWNhbCBGcm9udCBQb3JjaCBTdGF0dXMg UmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BfVl9GX1BPUkNIX1NUQV9SRUcJCTB4MjgKKworLyogVmVy dGljYWwgU1lOQyBXaWR0aCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BfVl9TWU5DX1NU QV9SRUcJCTB4MjkKKworLyogVmVydGljYWwgQmFjayBQb3JjaCBTdGF0dXMgUmVnaXN0ZXIgKi8K KyNkZWZpbmUgU1BfVl9CX1BPUkNIX1NUQV9SRUcJCTB4MmEKKworLyogVG90YWwgUGl4ZWwgU3Rh dHVzIExvdyBCeXRlIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQX1RPVEFMX1BJWEVMX1NUQUxfUkVH CQkweDJiCisKKy8qIFRvdGFsIFBpeGVsIFN0YXR1cyBIaWdoIEJ5dGUgUmVnaXN0ZXIgKi8KKyNk ZWZpbmUgU1BfVE9UQUxfUElYRUxfU1RBSF9SRUcJCTB4MmMKKworLyogQWN0aXZlIFBpeGVsIFN0 YXR1cyBMb3cgQnl0ZSBSZWdpc3RlciAqLworI2RlZmluZSBTUF9BQ1RfUElYRUxfU1RBTF9SRUcJ CTB4MmQKKworLyogQWN0aXZlIFBpeGVsIFN0YXR1cyBIaWdoIEJ5dGUgUmVnaXN0ZXIgKi8KKyNk ZWZpbmUgU1BfQUNUX1BJWEVMX1NUQUhfUkVHCQkweDJlCisKKy8qIEhvcml6b250YWwgRnJvbnQg UG9yY2ggU3RhdHVzIExvdyBCeXRlIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQX0hfRl9QT1JDSF9T VEFMX1JFRwkJMHgyZgorCisvKiBIb3Jpem9udGFsIEZyb250IFBvcmNoIFN0YXR5cyBIaWdoIEJ5 dGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BfSF9GX1BPUkNIX1NUQUhfUkVHCQkweDMwCisKKy8q IEhvcml6b250YWwgU1lOQyBXaWR0aCBTdGF0dXMgTG93IEJ5dGUgUmVnaXN0ZXIgKi8KKyNkZWZp bmUgU1BfSF9TWU5DX1NUQUxfUkVHCQkweDMxCisKKy8qIEhvcml6b250YWwgU1lOQyBXaWR0aCBT dGF0dXMgSGlnaCBCeXRlIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQX0hfU1lOQ19TVEFIX1JFRwkJ MHgzMgorCisvKiBIb3Jpem9udGFsIEJhY2sgUG9yY2ggU3RhdHVzIExvdyBCeXRlIFJlZ2lzdGVy ICovCisjZGVmaW5lIFNQX0hfQl9QT1JDSF9TVEFMX1JFRwkJMHgzMworCisvKiBIb3Jpem9udGFs IEJhY2sgUG9yY2ggU3RhdHVzIEhpZ2ggQnl0ZSBSZWdpc3RlciAqLworI2RlZmluZSBTUF9IX0Jf UE9SQ0hfU1RBSF9SRUcJCTB4MzQKKworLyogSW5mb0ZyYW1lIEFWSSBQYWNrZXQgVHlwZSBSZWdp c3RlciAqLworI2RlZmluZSBTUF9JTkZPRlJBTUVfQVZJX1RZUEVfUkVHCTB4NzAKKworLyogSW5m b0ZyYW1lIEFWSSBQYWNrZXQgVmVyc2lvbiBSZWdpc3RlciAqLworI2RlZmluZSBTUF9JTkZPRlJB TUVfQVZJX1ZFUl9SRUcJMHg3MQorCisvKiBJbmZvRnJhbWUgQVZJIFBhY2tldCBMZW5ndGggUmVn aXN0ZXIgKi8KKyNkZWZpbmUgU1BfSU5GT0ZSQU1FX0FWSV9MRU5fUkVHCTB4NzIKKworLyogSW5m b0ZyYW1lIEFWSSBQYWNrZXQgREIwIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQX0lORk9GUkFNRV9B VklfREIwX1JFRwkweDczCisKKy8qIEJpdCBDb250cm9sIFNwZWNpZmljIFJlZ2lzdGVyICovCisj ZGVmaW5lIFNQX0JJVF9DVFJMX1NQRUNJRklDX1JFRwkweDgwCisjZGVmaW5lIFNQX0JJVF9DVFJM X1NFTEVDVF9TSElGVAkxCisjZGVmaW5lIFNQX0VOQUJMRV9CSVRfQ1RSTAkJQklUKDApCisKKy8q IEluZm9GcmFtZSBBdWRpbyBQYWNrZXQgVHlwZSBSZWdpc3RlciAqLworI2RlZmluZSBTUF9JTkZP RlJBTUVfQVVEX1RZUEVfUkVHCTB4ODMKKworLyogSW5mb0ZyYW1lIEF1ZGlvIFBhY2tldCBWZXJz aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQX0lORk9GUkFNRV9BVURfVkVSX1JFRwkweDg0CisK Ky8qIEluZm9GcmFtZSBBdWRpbyBQYWNrZXQgTGVuZ3RoIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQ X0lORk9GUkFNRV9BVURfTEVOX1JFRwkweDg1CisKKy8qIEluZm9GcmFtZSBBdWRpbyBQYWNrZXQg REIwIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQX0lORk9GUkFNRV9BVURfREIwX1JFRwkweDg2CisK Ky8qIEluZm9GcmFtZSBNUEVHIFBhY2tldCBUeXBlIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQX0lO Rk9GUkFNRV9NUEVHX1RZUEVfUkVHCTB4YjAKKworLyogSW5mb0ZyYW1lIE1QRUcgUGFja2V0IFZl cnNpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BfSU5GT0ZSQU1FX01QRUdfVkVSX1JFRwkweGIx CisKKy8qIEluZm9GcmFtZSBNUEVHIFBhY2tldCBMZW5ndGggUmVnaXN0ZXIgKi8KKyNkZWZpbmUg U1BfSU5GT0ZSQU1FX01QRUdfTEVOX1JFRwkweGIyCisKKy8qIEluZm9GcmFtZSBNUEVHIFBhY2tl dCBEQjAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BfSU5GT0ZSQU1FX01QRUdfREIwX1JFRwkweGIz CisKKy8qIEF1ZGlvIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVycyAqLworI2RlZmluZSBTUF9BVURf Q0hfU1RBVFVTX0JBU0UJCSgweGQwIC0gMSkKKworLyogQXVkaW8gQ2hhbm5lbCBOdW0gUmVnaXN0 ZXIgNSAqLworI2RlZmluZSBTUF9JMlNfQ0hBTk5FTF9OVU1fTUFTSwkJMHhlMAorIyAgZGVmaW5l IFNQX0kyU19DSF9OVU1fMQkJKDB4MDAgPDwgNSkKKyMgIGRlZmluZSBTUF9JMlNfQ0hfTlVNXzIJ CSgweDAxIDw8IDUpCisjICBkZWZpbmUgU1BfSTJTX0NIX05VTV8zCQkoMHgwMiA8PCA1KQorIyAg ZGVmaW5lIFNQX0kyU19DSF9OVU1fNAkJKDB4MDMgPDwgNSkKKyMgIGRlZmluZSBTUF9JMlNfQ0hf TlVNXzUJCSgweDA0IDw8IDUpCisjICBkZWZpbmUgU1BfSTJTX0NIX05VTV82CQkoMHgwNSA8PCA1 KQorIyAgZGVmaW5lIFNQX0kyU19DSF9OVU1fNwkJKDB4MDYgPDwgNSkKKyMgIGRlZmluZSBTUF9J MlNfQ0hfTlVNXzgJCSgweDA3IDw8IDUpCisjZGVmaW5lIFNQX0VYVF9WVUNQCQkJQklUKDIpCisj ZGVmaW5lIFNQX1ZCSVQJCQkJQklUKDEpCisjZGVmaW5lIFNQX0FVRElPX0xBWU9VVAkJCUJJVCgw KQorCisvKiBBbmFsb2cgRGVidWcgUmVnaXN0ZXIgMiAqLworI2RlZmluZSBTUF9BTkFMT0dfREVC VUcyX1JFRwkJMHhkZAorI2RlZmluZSBTUF9GT1JDRV9TV19PRkZfQllQQVNTCQkweDIwCisjZGVm aW5lIFNQX1hUQUxfRlJRCQkJMHgxYworIyAgZGVmaW5lIFNQX1hUQUxfRlJRXzE5TTIJCSgweDAw IDw8IDIpCisjICBkZWZpbmUgU1BfWFRBTF9GUlFfMjRNCQkoMHgwMSA8PCAyKQorIyAgZGVmaW5l IFNQX1hUQUxfRlJRXzI1TQkJKDB4MDIgPDwgMikKKyMgIGRlZmluZSBTUF9YVEFMX0ZSUV8yNk0J CSgweDAzIDw8IDIpCisjICBkZWZpbmUgU1BfWFRBTF9GUlFfMjdNCQkoMHgwNCA8PCAyKQorIyAg ZGVmaW5lIFNQX1hUQUxfRlJRXzM4TTQJCSgweDA1IDw8IDIpCisjICBkZWZpbmUgU1BfWFRBTF9G UlFfNTJNCQkoMHgwNiA8PCAyKQorI2RlZmluZSBTUF9QT1dFUk9OX1RJTUVfMVA1TVMJCTB4MDMK KworLyogQW5hbG9nIENvbnRyb2wgMCBSZWdpc3RlciAqLworI2RlZmluZSBTUF9BTkFMT0dfQ1RS TDBfUkVHCQkweGUxCisKKy8qIENvbW1vbiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIDEgKi8K KyNkZWZpbmUgU1BfQ09NTU9OX0lOVF9TVEFUVVNfQkFTRQkoMHhmMSAtIDEpCisjZGVmaW5lIFNQ X1BMTF9MT0NLX0NIRwkJCTB4NDAKKworLyogQ29tbW9uIEludGVycnVwdCBTdGF0dXMgUmVnaXN0 ZXIgMiAqLworI2RlZmluZSBTUF9DT01NT05fSU5UX1NUQVRVUzIJCTB4ZjIKKyNkZWZpbmUgU1Bf SERDUF9BVVRIX0NIRwkJQklUKDEpCisjZGVmaW5lIFNQX0hEQ1BfQVVUSF9ET05FCQlCSVQoMCkK KworI2RlZmluZSBTUF9IRENQX0xJTktfQ0hFQ0tfRkFJTAkJQklUKDApCisKKyNkZWZpbmUgU1Bf SFBEX0lSUQkJCUJJVCg2KQorI2RlZmluZSBTUF9IUERfRVNZTkNfRVJSCQlCSVQoNCkKKyNkZWZp bmUgU1BfSFBEX0NIRwkJCUJJVCgyKQorI2RlZmluZSBTUF9IUERfTE9TVAkJCUJJVCgxKQorI2Rl ZmluZSBTUF9IUERfUExVRwkJCUJJVCgwKQorCisvKiBEUCBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lz dGVyICovCisjZGVmaW5lIFNQX0RQX0lOVF9TVEFUVVNfUkVHCQkweGY3CisjZGVmaW5lIFNQX1RS QUlOSU5HX0ZJTklTSAkJQklUKDUpCisjZGVmaW5lIFNQX1BPTExJTkdfRVJSCQkJQklUKDQpCisK Ky8qIENvbW1vbiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLworI2RlZmluZSBTUF9DT01NT05f SU5UX01BU0tfQkFTRQkJKDB4ZjggLSAxKQorCisvKiBJbnRlcnJ1cHQgQ29udHJvbCBSZWdpc3Rl ciAqLworI2RlZmluZSBTUF9JTlRfQ1RSTF9SRUcJCQkweGZmCisKKy8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBSZWdp c3RlciBkZWZpbml0aW9uIG9mIGRldmljZSBhZGRyZXNzIDB4N2EgICAgICAgICAgICAgICAgICAq LworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KKworLyogRFAgVFggTGluayBUcmFpbmluZyBDb250cm9sIFJlZ2lzdGVyICov CisjZGVmaW5lIFNQX0RQX1RYX0xUX0NUUkwwX1JFRwkJMHgzMAorCisvKiBQRCAxLjIgTGludCBU cmFpbmluZyA4MGJpdCBQYXR0ZXJuIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQX0RQX0xUXzgwQklU X1BBVFRFUk4wX1JFRwkweDgwCisjZGVmaW5lIFNQX0RQX0xUXzgwQklUX1BBVFRFUk5fUkVHX05V TQkxMAorCisvKiBBdWRpbyBJbnRlcmZhY2UgQ29udHJvbCBSZWdpc3RlciAwICovCisjZGVmaW5l IFNQX0FVRF9JTlRFUkZBQ0VfQ1RSTDBfUkVHCTB4NWYKKyNkZWZpbmUgU1BfQVVEX0lOVEVSRkFD RV9ESVNBQkxFCTB4ODAKKworLyogQXVkaW8gSW50ZXJmYWNlIENvbnRyb2wgUmVnaXN0ZXIgMiAq LworI2RlZmluZSBTUF9BVURfSU5URVJGQUNFX0NUUkwyX1JFRwkweDYwCisjZGVmaW5lIFNQX01f QVVEX0FESlVTVF9TVAkJMHgwNAorCisvKiBBdWRpbyBJbnRlcmZhY2UgQ29udHJvbCBSZWdpc3Rl ciAzICovCisjZGVmaW5lIFNQX0FVRF9JTlRFUkZBQ0VfQ1RSTDNfUkVHCTB4NjIKKworLyogQXVk aW8gSW50ZXJmYWNlIENvbnRyb2wgUmVnaXN0ZXIgNCAqLworI2RlZmluZSBTUF9BVURfSU5URVJG QUNFX0NUUkw0X1JFRwkweDY3CisKKy8qIEF1ZGlvIEludGVyZmFjZSBDb250cm9sIFJlZ2lzdGVy IDUgKi8KKyNkZWZpbmUgU1BfQVVEX0lOVEVSRkFDRV9DVFJMNV9SRUcJMHg2OAorCisvKiBBdWRp byBJbnRlcmZhY2UgQ29udHJvbCBSZWdpc3RlciA2ICovCisjZGVmaW5lIFNQX0FVRF9JTlRFUkZB Q0VfQ1RSTDZfUkVHCTB4NjkKKworLyogRmlybXdhcmUgVmVyc2lvbiBSZWdpc3RlciAqLworI2Rl ZmluZSBTUF9GV19WRVJfUkVHCQkJMHhiNworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRGVmaW5pdGlvbiBvZiBE UENEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov CisjZGVmaW5lIFNQX0RQQ0RfTUFYX0xJTktfUkFURQkJMHgwMQorCisjZGVmaW5lIFNQX0RQQ0Rf TUFYX0xBTkVfQ09VTlQJCTB4MDIKKyNkZWZpbmUgU1BfRU5IQU5DRURfRlJBTUVfQ0FQCQkweDgw CisKKyNkZWZpbmUgU1BfRFBDRF9MQU5FX0NPVU5UX1NFVAkJMHgwMQorI2RlZmluZSBTUF9FTkhB TkNFRF9GUkFNRV9FTgkJMHg4MAorCisjZGVmaW5lIFNQX0RQQ0RfRE9XTlNQUkVBRElOR19DVFJM CTB4MDcKKyNkZWZpbmUgU1BfU1BSRUFEX0FNUExJVFVERQkJMHgxMAorCisjZGVmaW5lIFNQX0RQ Q0RfU0lOS19DT1VOVAkJMHgwMAorI2RlZmluZSBTUF9EUENEX1NFUlZJQ0VfSVJRX1ZFQ1RPUgkw eDAxCisjZGVmaW5lIFNQX1RFU1RfSVJRCQkJMHgwMgorI2RlZmluZSBTUF9DUF9JUlEJCQkweDA0 CisKKyNkZWZpbmUgU1BfVEVTVF9BQ0sJCQkweDAxCisKKyNlbmRpZgotLSAKMi4xLjAKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWls aW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==