From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rob Herring Subject: [RFC PATCH] drm/panfrost: Add initial panfrost driver Date: Thu, 7 Mar 2019 18:24:08 -0600 Message-ID: <20190308002408.32682-1-robh@kernel.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ot1-f66.google.com (mail-ot1-f66.google.com [209.85.210.66]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6BB086E24A for ; Fri, 8 Mar 2019 00:24:12 +0000 (UTC) Received: by mail-ot1-f66.google.com with SMTP id v62so15905001otb.3 for ; Thu, 07 Mar 2019 16:24:12 -0800 (PST) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Tomeu Vizoso , Maxime Ripard , David Airlie , "Marty E. Plummer" , Sean Paul , Alyssa Rosenzweig List-Id: dri-devel@lists.freedesktop.org RnJvbTogIk1hcnR5IEUuIFBsdW1tZXIiIDxoYW5ldHplckBzdGFydG1haWwuY29tPgoKVGhpcyBh ZGRzIHRoZSBpbml0aWFsIGRyaXZlciBmb3IgcGFuZnJvc3Qgd2hpY2ggc3VwcG9ydHMgQXJtIE1h bGkKTWlkZ2FyZCBhbmQgQmlmcm9zdCBmYW1pbHkgb2YgR1BVcy4gQ3VycmVudGx5LCBvbmx5IHRo ZSBUODYwIE1pZGdhcmQgR1BVCmhhcyBiZWVuIHRlc3RlZC4KCkNjOiBNYWFydGVuIExhbmtob3Jz dCA8bWFhcnRlbi5sYW5raG9yc3RAbGludXguaW50ZWwuY29tPgpDYzogTWF4aW1lIFJpcGFyZCA8 bWF4aW1lLnJpcGFyZEBib290bGluLmNvbT4KQ2M6IFNlYW4gUGF1bCA8c2VhbkBwb29ybHkucnVu PgpDYzogRGF2aWQgQWlybGllIDxhaXJsaWVkQGxpbnV4LmllPgpDYzogRGFuaWVsIFZldHRlciA8 ZGFuaWVsQGZmd2xsLmNoPgpDYzogQWx5c3NhIFJvc2VuendlaWcgPGFseXNzYUByb3Nlbnp3ZWln LmlvPgpDYzogTHl1ZGUgUGF1bCA8bHl1ZGVAcmVkaGF0LmNvbT4KQ2M6IEVyaWMgQW5ob2x0IDxl cmljQGFuaG9sdC5uZXQ+ClNpZ25lZC1vZmYtYnk6IE1hcnR5IEUuIFBsdW1tZXIgPGhhbmV0emVy QHN0YXJ0bWFpbC5jb20+ClNpZ25lZC1vZmYtYnk6IFRvbWV1IFZpem9zbyA8dG9tZXUudml6b3Nv QGNvbGxhYm9yYS5jb20+ClNpZ25lZC1vZmYtYnk6IFJvYiBIZXJyaW5nIDxyb2JoQGtlcm5lbC5v cmc+Ci0tLQpTZW5kaW5nIHRoaXMgb3V0IGluIHRoZSBzcGlyaXQgb2YgcmVsZWFzZSBlYXJseSwg cmVsZWFzZSBvZnRlbi4gV2UncmUgCmNsb3NlIHRvIHBhcml0eSBjb21wYXJlZCB0byBtZXNhICsg dGhlIHZlbmRvciBkcml2ZXIuIFRoZXJlJ3MgYSBmZXcgCmlzc3VlcyBUb21ldSBpcyBjaGFzaW5n LiAKClRoZXJlJ3Mgc3RpbGwgc29tZSBwaWVjZXMgb2YgdGhlIGgvdyBzZXR1cCB3ZSd2ZSBqdXN0 IGhhcmRjb2RlZC4gTG9ja2luZyAKaW4gdmFyaW91cyBwbGFjZXMgaXMgcHJvYmFibHkgbWlzc2lu Zy4gRXJyb3IgcmVjb3ZlcnkgaXMgbm9uLWV4aXN0ZW50IAoob3RoZXIgdGhhbiBtb2R1bGUgdW5s b2FkL2xvYWQpLiBUaGVyZSdzIHNvbWUgd29yayB0byBhZGQgdHJhY2Vwb2ludHMgCmFuZCBwZXJm IGNvdW50ZXJzIHRoYXQncyBub3QgaGVyZSB5ZXQuIEJpZnJvc3QgR1BVcyBhcmUgZGVmaW5pdGVs eSBub3QgCnN1cHBvcnRlZCB5ZXQgb3RoZXIgdGhhbiBpZGVudGlmeWluZyB0aGVtLiBQcmltYXJp bHkgdGhlIE1NVSBzZXR1cCBpcyAKbWlzc2luZy4KCkhvdydzIHBlcmZvcm1hbmNlPyBHcmVhdCwg YmVjYXVzZSBJIGhhdmVuJ3QgbWVhc3VyZWQgaXQuCgpUaGlzIHBhdGNoIGFuZCBpdHMgZGVwZW5k ZW5jaWVzIGFyZSBhdmFpbGFibGUgaGVyZVsxXS4gVGhlIG1lc2Egc3VwcG9ydCAKaXMgaGVyZVsy XS4gQm90aCBhcmUgbGlrZWx5IHRvIGNoYW5nZSAoZGFpbHkpLgoKUm9iCgpbMV0gaHR0cHM6Ly9n aXRsYWIuZnJlZWRlc2t0b3Aub3JnL3JvYmgvbGludXgtcGFuZnJvc3QuZ2l0IHBhbmZyb3N0LXJl YmFzZQpbMl0gaHR0cHM6Ly9naXRsYWIuZnJlZWRlc2t0b3Aub3JnL3RvbWV1L21lc2EuZ2l0IG1h aW5saW5lLWRyaXZlcgoKIGRyaXZlcnMvZ3B1L2RybS9LY29uZmlnICAgICAgICAgICAgICAgICAg ICAgIHwgICAyICsKIGRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAg IHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9LY29uZmlnICAgICAgICAgICAgIHwg IDE0ICsKIGRyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9NYWtlZmlsZSAgICAgICAgICAgIHwgIDEx ICsKIGRyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9kZXZpY2UuYyAgIHwgMTI3ICsr KysKIGRyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9kZXZpY2UuaCAgIHwgIDgzICsr KwogZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2Rydi5jICAgICAgfCA0MTkgKysr KysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfZmVhdHVyZXMuaCB8 IDMwOCArKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9nZW0uYyAg ICAgIHwgIDkyICsrKwogZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2dlbS5oICAg ICAgfCAgMjkgKwogZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2dwdS5jICAgICAg fCA0NjQgKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2dw dS5oICAgICAgfCAgMTUgKwogZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2lzc3Vl cy5oICAgfCAxNzUgKysrKysKIGRyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9qb2Iu YyAgICAgIHwgNjYyICsrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9wYW5mcm9z dC9wYW5mcm9zdF9qb2IuaCAgICAgIHwgIDQ3ICsrCiBkcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3Qv cGFuZnJvc3RfbW11LmMgICAgICB8IDQwOSArKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9w YW5mcm9zdC9wYW5mcm9zdF9tbXUuaCAgICAgIHwgIDE1ICsKIGluY2x1ZGUvdWFwaS9kcm0vcGFu ZnJvc3RfZHJtLmggICAgICAgICAgICAgIHwgMTM4ICsrKysKIDE4IGZpbGVzIGNoYW5nZWQsIDMw MTEgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9wYW5m cm9zdC9LY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0 L01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3Bh bmZyb3N0X2RldmljZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3BhbmZy b3N0L3BhbmZyb3N0X2RldmljZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L3BhbmZyb3N0L3BhbmZyb3N0X2Rydi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2ZlYXR1cmVzLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfZ2VtLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfZ2VtLmgKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfZ3B1LmMKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfZ3B1LmgKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfaXNzdWVzLmgKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3Rfam9iLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3Rfam9iLmgK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfbW11 LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3Rf bW11LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3VhcGkvZHJtL3BhbmZyb3N0X2RybS5o CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0v S2NvbmZpZwppbmRleCBmZWJkYzEwMmI3NWMuLmNkYWZlMzVmMDU3NiAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKQEAgLTMz NSw2ICszMzUsOCBAQCBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS90dmUyMDAvS2NvbmZpZyIKIAog c291cmNlICJkcml2ZXJzL2dwdS9kcm0veGVuL0tjb25maWciCiAKK3NvdXJjZSAiZHJpdmVycy9n cHUvZHJtL3BhbmZyb3N0L0tjb25maWciCisKICMgS2VlcCBsZWdhY3kgZHJpdmVycyBsYXN0CiAK IG1lbnVjb25maWcgRFJNX0xFR0FDWQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL01ha2Vm aWxlIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCmluZGV4IDc0NzZlZDk0NWUzMC4uNjZmZDY5 NmFlNjBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKKysrIGIvZHJpdmVy cy9ncHUvZHJtL01ha2VmaWxlCkBAIC0xMTAsMyArMTEwLDQgQEAgb2JqLSQoQ09ORklHX0RSTV9U SU5ZRFJNKSArPSB0aW55ZHJtLwogb2JqLSQoQ09ORklHX0RSTV9QTDExMSkgKz0gcGwxMTEvCiBv YmotJChDT05GSUdfRFJNX1RWRTIwMCkgKz0gdHZlMjAwLwogb2JqLSQoQ09ORklHX0RSTV9YRU4p ICs9IHhlbi8KK29iai0kKENPTkZJR19EUk1fUEFORlJPU1QpICs9IHBhbmZyb3N0LwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0v cGFuZnJvc3QvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu LmViNzI4MzE0OTM1NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9z dC9LY29uZmlnCkBAIC0wLDAgKzEsMTQgQEAKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ TC0yLjAKKworY29uZmlnIERSTV9QQU5GUk9TVAorCXRyaXN0YXRlICJQYW5mcm9zdCAoRFJNIHN1 cHBvcnQgZm9yIEFSTSBNYWxpIE1pZGdhcmQvQmlmcm9zdCBHUFVzKSIKKwlkZXBlbmRzIG9uIERS TQorCWRlcGVuZHMgb24gQVJDSF9ST0NLQ0hJUAorCWRlcGVuZHMgb24gTU1VCisJc2VsZWN0IERS TV9TQ0hFRAorCXNlbGVjdCBJT01NVV9TVVBQT1JUCisJc2VsZWN0IElPTU1VX0lPX1BHVEFCTEVf TFBBRQorCXNlbGVjdCBEUk1fR0VNX1NITUVNX0hFTFBFUgorCWhlbHAKKwkgIERSTSBkcml2ZXIg Zm9yIEFSTSBNYWxpIE1pZGdhcmQgKHQ2eHgsIHQ3eHgsIHQ4eHgpIGFuZAorCSAgQmlmcm9zdCAo RzN4LCBHNXgsIEc3eCkgR1BVcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9z dC9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9NYWtlZmlsZQpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmQwN2UwOTcxYjY4NwotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9NYWtlZmlsZQpAQCAtMCwwICsxLDExIEBA CisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisKK3BhbmZyb3N0LXkgOj0gXAor CXBhbmZyb3N0X2Rydi5vIFwKKwlwYW5mcm9zdF9kZXZpY2UubyBcCisJcGFuZnJvc3RfZ2VtLm8g XAorCXBhbmZyb3N0X2dwdS5vIFwKKwlwYW5mcm9zdF9qb2IubyBcCisJcGFuZnJvc3RfbW11Lm8K Kworb2JqLSQoQ09ORklHX0RSTV9QQU5GUk9TVCkgKz0gcGFuZnJvc3QubwpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2RldmljZS5jIGIvZHJpdmVycy9ncHUv ZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2RldmljZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwMC4uY2VhMzEwOGQxNmNiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9n cHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2RldmljZS5jCkBAIC0wLDAgKzEsMTI3IEBACisvLyBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyogQ29weXJpZ2h0IDIwMTggTWFydHkg RS4gUGx1bW1lciA8aGFuZXR6ZXJAc3RhcnRtYWlsLmNvbT4gKi8KKy8qIENvcHlyaWdodCAyMDE5 IExpbmFybywgTHRkLCBSb2IgSGVycmluZyA8cm9iaEBrZXJuZWwub3JnPiAqLworCisjaW5jbHVk ZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5j bHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CisKKyNpbmNsdWRlICJwYW5mcm9zdF9k ZXZpY2UuaCIKKyNpbmNsdWRlICJwYW5mcm9zdF9ncHUuaCIKKyNpbmNsdWRlICJwYW5mcm9zdF9q b2IuaCIKKyNpbmNsdWRlICJwYW5mcm9zdF9tbXUuaCIKKworc3RhdGljIGludCBwYW5mcm9zdF9j bGtfaW5pdChzdHJ1Y3QgcGFuZnJvc3RfZGV2aWNlICpwZmRldikKK3sKKwlpbnQgZXJyOworCXVu c2lnbmVkIGxvbmcgcmF0ZTsKKworCXBmZGV2LT5jbG9jayA9IGRldm1fY2xrX2dldChwZmRldi0+ ZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKHBmZGV2LT5jbG9jaykpIHsKKwkJZGV2X2VycihwZmRl di0+ZGV2LCAiZ2V0IGNsb2NrIGZhaWxlZCAlbGRcbiIsIFBUUl9FUlIocGZkZXYtPmNsb2NrKSk7 CisJCXJldHVybiBQVFJfRVJSKHBmZGV2LT5jbG9jayk7CisJfQorCisJcmF0ZSA9IGNsa19nZXRf cmF0ZShwZmRldi0+Y2xvY2spOworCWRldl9pbmZvKHBmZGV2LT5kZXYsICJjbG9jayByYXRlID0g JWx1XG4iLCByYXRlKTsKKworCWlmICgoZXJyID0gY2xrX3ByZXBhcmVfZW5hYmxlKHBmZGV2LT5j bG9jaykpKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBh bmZyb3N0X2Nsa19maW5pKHN0cnVjdCBwYW5mcm9zdF9kZXZpY2UgKnBmZGV2KQoreworCWNsa19k aXNhYmxlX3VucHJlcGFyZShwZmRldi0+Y2xvY2spOworfQorCitzdGF0aWMgaW50IHBhbmZyb3N0 X3JlZ3VsYXRvcl9pbml0KHN0cnVjdCBwYW5mcm9zdF9kZXZpY2UgKnBmZGV2KQoreworCWludCBy ZXQ7CisJcGZkZXYtPnJlZ3VsYXRvciA9IGRldm1fcmVndWxhdG9yX2dldF9vcHRpb25hbChwZmRl di0+ZGV2LCAibWFsaSIpOworCWlmIChJU19FUlIocGZkZXYtPnJlZ3VsYXRvcikpIHsKKwkJcmV0 ID0gUFRSX0VSUihwZmRldi0+cmVndWxhdG9yKTsKKwkJcGZkZXYtPnJlZ3VsYXRvciA9IE5VTEw7 CisJCWlmIChyZXQgPT0gLUVOT0RFVikKKwkJCXJldHVybiAwOworCQlkZXZfZXJyKHBmZGV2LT5k ZXYsICJmYWlsZWQgdG8gZ2V0IHJlZ3VsYXRvcjogJWxkXG4iLCBQVFJfRVJSKHBmZGV2LT5yZWd1 bGF0b3IpKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSByZWd1bGF0b3JfZW5hYmxlKHBm ZGV2LT5yZWd1bGF0b3IpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIocGZkZXYtPmRldiwg ImZhaWxlZCB0byBlbmFibGUgcmVndWxhdG9yOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsK Kwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGFuZnJvc3RfcmVndWxhdG9yX2Zp bmkoc3RydWN0IHBhbmZyb3N0X2RldmljZSAqcGZkZXYpCit7CisJaWYgKHBmZGV2LT5yZWd1bGF0 b3IpCisJCXJlZ3VsYXRvcl9kaXNhYmxlKHBmZGV2LT5yZWd1bGF0b3IpOworfQorCisKK2ludCBw YW5mcm9zdF9kZXZpY2VfaW5pdChzdHJ1Y3QgcGFuZnJvc3RfZGV2aWNlICpwZmRldikKK3sKKwlp bnQgZXJyOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCisJbXV0ZXhfaW5pdCgmcGZkZXYtPnNj aGVkX2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZwZmRldi0+c2NoZWR1bGVkX2pvYnMpOworCisJ ZXJyID0gcGFuZnJvc3RfY2xrX2luaXQocGZkZXYpOworCWlmIChlcnIpIHsKKwkJZGV2X2Vycihw ZmRldi0+ZGV2LCAiY2xrIGluaXQgZmFpbGVkICVkXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOwor CX0KKworCWlmICgoZXJyID0gcGFuZnJvc3RfcmVndWxhdG9yX2luaXQocGZkZXYpKSkgeworCQlk ZXZfZXJyKHBmZGV2LT5kZXYsICJyZWd1bGF0b3IgaW5pdCBmYWlsZWQgJWRcbiIsIGVycik7CisJ CWdvdG8gZXJyX291dDA7CisJfQorCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBmZGV2 LT5wZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJcGZkZXYtPmlvbWVtID0gZGV2bV9pb3JlbWFw X3Jlc291cmNlKHBmZGV2LT5kZXYsIHJlcyk7CisJaWYgKElTX0VSUihwZmRldi0+aW9tZW0pKSB7 CisJCWRldl9lcnIocGZkZXYtPmRldiwgImZhaWxlZCB0byBpb3JlbWFwIGlvbWVtXG4iKTsKKwkJ ZXJyID0gUFRSX0VSUihwZmRldi0+aW9tZW0pOworCQlnb3RvIGVycl9vdXQxOworCX0KKworCWVy ciA9IHBhbmZyb3N0X2dwdV9pbml0KHBmZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXQx OworCisJZXJyID0gcGFuZnJvc3RfbW11X2luaXQocGZkZXYpOworCWlmIChlcnIpCisJCWdvdG8g ZXJyX291dDI7CisKKwllcnIgPSBwYW5mcm9zdF9qb2JfaW5pdChwZmRldik7CisJaWYgKGVycikK KwkJZ290byBlcnJfb3V0MzsKKworCXJldHVybiAwOworZXJyX291dDM6CisJcGFuZnJvc3RfbW11 X2ZpbmkocGZkZXYpOworZXJyX291dDI6CisJcGFuZnJvc3RfZ3B1X2ZpbmkocGZkZXYpOworZXJy X291dDE6CisJcGFuZnJvc3RfcmVndWxhdG9yX2ZpbmkocGZkZXYpOworZXJyX291dDA6CisJcGFu ZnJvc3RfY2xrX2ZpbmkocGZkZXYpOworCXJldHVybiBlcnI7Cit9CisKK3ZvaWQgcGFuZnJvc3Rf ZGV2aWNlX2Zpbmkoc3RydWN0IHBhbmZyb3N0X2RldmljZSAqcGZkZXYpCit7CisJcGFuZnJvc3Rf am9iX2ZpbmkocGZkZXYpOworCXBhbmZyb3N0X21tdV9maW5pKHBmZGV2KTsKKwlwYW5mcm9zdF9n cHVfZmluaShwZmRldik7CisJcGFuZnJvc3RfcmVndWxhdG9yX2ZpbmkocGZkZXYpOworCisJcGFu ZnJvc3RfY2xrX2ZpbmkocGZkZXYpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Bh bmZyb3N0L3BhbmZyb3N0X2RldmljZS5oIGIvZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZy b3N0X2RldmljZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uM2My MGM2Y2YyNzljCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3Bh bmZyb3N0X2RldmljZS5oCkBAIC0wLDAgKzEsODMgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMi4wICovCisvKiBDb3B5cmlnaHQgMjAxOCBNYXJ0eSBFLiBQbHVtbWVyIDxoYW5l dHplckBzdGFydG1haWwuY29tPiAqLworLyogQ29weXJpZ2h0IDIwMTkgTGluYXJvLCBMdGQsIFJv YiBIZXJyaW5nIDxyb2JoQGtlcm5lbC5vcmc+ICovCisKKyNpZm5kZWYgX19QQU5GUk9TVF9ERVZJ Q0VfSF9fCisjZGVmaW5lIF9fUEFORlJPU1RfREVWSUNFX0hfXworCisjaW5jbHVkZSA8bGludXgv c3BpbmxvY2suaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2RldmljZS5oPgorI2luY2x1ZGUgPGRybS9k cm1fbW0uaD4KKworI2luY2x1ZGUgInBhbmZyb3N0X2pvYi5oIgorCitzdHJ1Y3QgcGFuZnJvc3Rf ZGV2aWNlOworc3RydWN0IHBhbmZyb3N0X21tdTsKK3N0cnVjdCBwYW5mcm9zdF9qb2Jfc2xvdDsK Kworc3RydWN0IHBhbmZyb3N0X2ZlYXR1cmVzIHsKKwl1MTYgaWQ7CisJdTE2IHJldmlzaW9uOwor CisJdTY0IHNoYWRlcl9wcmVzZW50OworCXU2NCB0aWxlcl9wcmVzZW50OworCXU2NCBsMl9wcmVz ZW50OworCXU2NCBzdGFja19wcmVzZW50OworCXUzMiBhc19wcmVzZW50OworCXUzMiBqc19wcmVz ZW50OworCisJdTMyIGwyX2ZlYXR1cmVzOworCXUzMiBjb3JlX2ZlYXR1cmVzOworCXUzMiB0aWxl cl9mZWF0dXJlczsKKwl1MzIgbWVtX2ZlYXR1cmVzOworCXUzMiBtbXVfZmVhdHVyZXM7CisJdTMy IHRocmVhZF9mZWF0dXJlczsKKwl1MzIgbWF4X3RocmVhZHM7CisJdTMyIHRocmVhZF9tYXhfd29y a2dyb3VwX3N6OworCXUzMiB0aHJlYWRfbWF4X2JhcnJpZXJfc3o7CisJdTMyIGNvaGVyZW5jeV9m ZWF0dXJlczsKKwl1MzIgdGV4dHVyZV9mZWF0dXJlc1s0XTsKKwl1MzIganNfZmVhdHVyZXNbMTZd OworCisJdW5zaWduZWQgbG9uZyBiYXNlX2h3X2ZlYXR1cmVzWzY0IC8gQklUU19QRVJfTE9OR107 CisJdW5zaWduZWQgbG9uZyBod19pc3N1ZXNbNjQgLyBCSVRTX1BFUl9MT05HXTsKK307CisKK3N0 cnVjdCBwYW5mcm9zdF9kZXZpY2UgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZHJt X2RldmljZSAqZGRldjsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCisJc3RydWN0 IGRybV9tbSBtbTsKKwlzcGlubG9ja190IG1tX2xvY2s7CisKKwl2b2lkIF9faW9tZW0gKmlvbWVt OworCXN0cnVjdCBjbGsgKmNsb2NrOworCXN0cnVjdCByZWd1bGF0b3IgKnJlZ3VsYXRvcjsKKwor CXN0cnVjdCBwYW5mcm9zdF9mZWF0dXJlcyBmZWF0dXJlczsKKworCXN0cnVjdCBwYW5mcm9zdF9t bXUgKm1tdTsKKwlzdHJ1Y3QgcGFuZnJvc3Rfam9iX3Nsb3QgKmpzOworCisJc3RydWN0IHBhbmZy b3N0X2pvYiAqam9ic1szXTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHNjaGVkdWxlZF9qb2JzOworCisJ c3RydWN0IG11dGV4IHNjaGVkX2xvY2s7Cit9OworCitzdHJ1Y3QgcGFuZnJvc3RfZmlsZV9wcml2 IHsKKwlzdHJ1Y3QgcGFuZnJvc3RfZGV2aWNlICpwZmRldjsKKworCXN0cnVjdCBkcm1fc2NoZWRf ZW50aXR5IHNjaGVkX2VudGl0eVtOVU1fSk9CX1NMT1RTXTsKK307CisKK3N0YXRpYyBpbmxpbmUg c3RydWN0IHBhbmZyb3N0X2RldmljZSAqdG9fcGFuZnJvc3RfZGV2aWNlKHN0cnVjdCBkcm1fZGV2 aWNlICpkZGV2KQoreworCXJldHVybiBkZGV2LT5kZXZfcHJpdmF0ZTsKK30KKworaW50IHBhbmZy b3N0X2RldmljZV9pbml0KHN0cnVjdCBwYW5mcm9zdF9kZXZpY2UgKnBmZGV2KTsKK3ZvaWQgcGFu ZnJvc3RfZGV2aWNlX2Zpbmkoc3RydWN0IHBhbmZyb3N0X2RldmljZSAqcGZkZXYpOworCisjZW5k aWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9kcnYuYyBi L2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9kcnYuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjk1ZWI4NWZhOGYwNAotLS0gL2Rldi9udWxsCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9kcnYuYwpAQCAtMCwwICsxLDQxOSBA QAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qIENvcHlyaWdodCAyMDE4 IE1hcnR5IEUuIFBsdW1tZXIgPGhhbmV0emVyQHN0YXJ0bWFpbC5jb20+ICovCisvKiBDb3B5cmln aHQgMjAxOSBMaW5hcm8sIEx0ZC4sIFJvYiBIZXJyaW5nIDxyb2JoQGtlcm5lbC5vcmc+ICovCisv KiBDb3B5cmlnaHQgMjAxOSBDb2xsYWJvcmEgbHRkLiAqLworCisjaW5jbHVkZSA8bGludXgvZG1h LW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9v Zl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxkcm0v cGFuZnJvc3RfZHJtLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9kcnYuaD4KKyNpbmNsdWRlIDxkcm0v ZHJtX2lvY3RsLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9zeW5jb2JqLmg+CisjaW5jbHVkZSA8ZHJt L2RybV91dGlscy5oPgorCisjaW5jbHVkZSAicGFuZnJvc3RfZGV2aWNlLmgiCisjaW5jbHVkZSAi cGFuZnJvc3RfZ2VtLmgiCisjaW5jbHVkZSAicGFuZnJvc3RfbW11LmgiCisjaW5jbHVkZSAicGFu ZnJvc3Rfam9iLmgiCisjaW5jbHVkZSAicGFuZnJvc3RfZ3B1LmgiCisKK3N0YXRpYyBpbnQgcGFu ZnJvc3RfaW9jdGxfZ2V0X3BhcmFtKHN0cnVjdCBkcm1fZGV2aWNlICpkZGV2LCB2b2lkICpkYXRh LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCit7CisJc3RydWN0IGRybV9wYW5mcm9zdF9nZXRfcGFy YW0gKnBhcmFtID0gZGF0YTsKKwlzdHJ1Y3QgcGFuZnJvc3RfZGV2aWNlICpwZmRldiA9IGRkZXYt PmRldl9wcml2YXRlOworCisJaWYgKHBhcmFtLT5wYWQgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7 CisKKwlzd2l0Y2gocGFyYW0tPnBhcmFtKSB7CisJY2FzZSBEUk1fUEFORlJPU1RfUEFSQU1fR1BV X0lEOgorCQlwYXJhbS0+dmFsdWUgPSBwZmRldi0+ZmVhdHVyZXMuaWQ7CisJCWJyZWFrOworCWRl ZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMg aW50IHBhbmZyb3N0X2lvY3RsX2NyZWF0ZV9ibyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lk ICpkYXRhLAorCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qg ZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtOworCXN0cnVjdCBkcm1fcGFuZnJvc3RfY3JlYXRl X2JvICphcmdzID0gZGF0YTsKKworCWlmICghYXJncy0+c2l6ZSB8fCBhcmdzLT5mbGFncykKKwkJ cmV0dXJuIC1FSU5WQUw7CisKKwlzaG1lbSA9IGRybV9nZW1fc2htZW1fY3JlYXRlX3dpdGhfaGFu ZGxlKGZpbGUsIGRldiwgYXJncy0+c2l6ZSwgJmFyZ3MtPmhhbmRsZSk7CisJaWYgKElTX0VSUihz aG1lbSkpCisJCXJldHVybiBQVFJfRVJSKHNobWVtKTsKKworCXJldCA9IHBhbmZyb3N0X21tdV9t YXAodG9fcGFuZnJvc3RfYm8oJnNobWVtLT5iYXNlKSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJf ZnJlZTsKKworCWFyZ3MtPm9mZnNldCA9IHRvX3BhbmZyb3N0X2JvKCZzaG1lbS0+YmFzZSktPm5v ZGUuc3RhcnQgPDwgUEFHRV9TSElGVDsKKworCXJldHVybiAwOworCitlcnJfZnJlZToKKwlkcm1f Z2VtX29iamVjdF9wdXRfdW5sb2NrZWQoJnNobWVtLT5iYXNlKTsKKwlyZXR1cm4gcmV0OworfQor CisvKioKKyAqIHBhbmZyb3N0X2xvb2t1cF9ib3MoKSAtIFNldHMgdXAgam9iLT5ib1tdIHdpdGgg dGhlIEdFTSBvYmplY3RzCisgKiByZWZlcmVuY2VkIGJ5IHRoZSBqb2IuCisgKiBAZGV2OiBEUk0g ZGV2aWNlCisgKiBAZmlsZV9wcml2OiBEUk0gZmlsZSBmb3IgdGhpcyBmZAorICogQGFyZ3M6IElP Q1RMIGFyZ3MKKyAqIEBqb2I6IGpvYiBiZWluZyBzZXQgdXAKKyAqCisgKiBSZXNvbHZlIGhhbmRs ZXMgZnJvbSB1c2Vyc3BhY2UgdG8gQk9zIGFuZCBhdHRhY2ggdGhlbSB0byBqb2IuCisgKgorICog Tm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gZG9lc24ndCBuZWVkIHRvIHVucmVmZXJlbmNlIHRoZSBC T3Mgb24KKyAqIGZhaWx1cmUsIGJlY2F1c2UgdGhhdCB3aWxsIGhhcHBlbiBhdCBwYW5mcm9zdF9q b2JfY2xlYW51cCgpIHRpbWUuCisgKi8KK3N0YXRpYyBpbnQKK3BhbmZyb3N0X2xvb2t1cF9ib3Mo c3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwK KwkJICBzdHJ1Y3QgZHJtX3BhbmZyb3N0X3N1Ym1pdCAqYXJncywKKwkJICBzdHJ1Y3QgcGFuZnJv c3Rfam9iICpqb2IpCit7CisJdTMyICpoYW5kbGVzOworCWludCByZXQgPSAwOworCWludCBpOwor CisJam9iLT5ib19jb3VudCA9IGFyZ3MtPmJvX2hhbmRsZV9jb3VudDsKKworCWlmICgham9iLT5i b19jb3VudCkKKwkJcmV0dXJuIDA7CisKKwlqb2ItPmJvcyA9IGt2bWFsbG9jX2FycmF5KGpvYi0+ Ym9fY291bnQsCisJCQkJICBzaXplb2Yoc3RydWN0IGRybV9wYW5mcm9zdF9nZW1fb2JqZWN0ICop LAorCQkJCSAgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOworCWlmICgham9iLT5ib3MpIHsKKwkJ RFJNX0RFQlVHKCJGYWlsZWQgdG8gYWxsb2NhdGUgdmFsaWRhdGVkIEJPIHBvaW50ZXJzXG4iKTsK KwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaGFuZGxlcyA9IGt2bWFsbG9jX2FycmF5KGpvYi0+ Ym9fY291bnQsIHNpemVvZih1MzIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWhhbmRsZXMpIHsKKwkJ cmV0ID0gLUVOT01FTTsKKwkJRFJNX0RFQlVHKCJGYWlsZWQgdG8gYWxsb2NhdGUgaW5jb21pbmcg R0VNIGhhbmRsZXNcbiIpOworCQlnb3RvIGZhaWw7CisJfQorCisJaWYgKGNvcHlfZnJvbV91c2Vy KGhhbmRsZXMsCisJCQkgICAodm9pZCBfX3VzZXIgKikodWludHB0cl90KWFyZ3MtPmJvX2hhbmRs ZXMsCisJCQkgICBqb2ItPmJvX2NvdW50ICogc2l6ZW9mKHUzMikpKSB7CisJCXJldCA9IC1FRkFV TFQ7CisJCURSTV9ERUJVRygiRmFpbGVkIHRvIGNvcHkgaW4gR0VNIGhhbmRsZXNcbiIpOworCQln b3RvIGZhaWw7CisJfQorCisJc3Bpbl9sb2NrKCZmaWxlX3ByaXYtPnRhYmxlX2xvY2spOworCWZv ciAoaSA9IDA7IGkgPCBqb2ItPmJvX2NvdW50OyBpKyspIHsKKwkJc3RydWN0IGRybV9nZW1fb2Jq ZWN0ICpibyA9IGlkcl9maW5kKCZmaWxlX3ByaXYtPm9iamVjdF9pZHIsCisJCQkJCQkgICAgIGhh bmRsZXNbaV0pOworCQlpZiAoIWJvKSB7CisJCQlEUk1fREVCVUcoIkZhaWxlZCB0byBsb29rIHVw IEdFTSBCTyAlZDogJWRcbiIsCisJCQkJICBpLCBoYW5kbGVzW2ldKTsKKwkJCXJldCA9IC1FTk9F TlQ7CisJCQlzcGluX3VubG9jaygmZmlsZV9wcml2LT50YWJsZV9sb2NrKTsKKwkJCWdvdG8gZmFp bDsKKwkJfQorCQlkcm1fZ2VtX29iamVjdF9nZXQoYm8pOworCQlqb2ItPmJvc1tpXSA9IGJvOwor CX0KKwlzcGluX3VubG9jaygmZmlsZV9wcml2LT50YWJsZV9sb2NrKTsKKworZmFpbDoKKwlrdmZy ZWUoaGFuZGxlcyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwYW5mcm9zdF9pb2N0 bF9zdWJtaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJc3RydWN0IGRy bV9maWxlICpmaWxlKQoreworCXN0cnVjdCBwYW5mcm9zdF9kZXZpY2UgKnBmZGV2ID0gZGV2LT5k ZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX3BhbmZyb3N0X3N1Ym1pdCAqYXJncyA9IGRhdGE7CisJ c3RydWN0IGRybV9zeW5jb2JqICpzeW5jX291dDsKKwlzdHJ1Y3QgcGFuZnJvc3Rfam9iICpqb2I7 CisJaW50IHJldCA9IDA7CisKKwlqb2IgPSBrY2FsbG9jKDEsIHNpemVvZigqam9iKSwgR0ZQX0tF Uk5FTCk7CisJaWYgKCFqb2IpCisJCXJldHVybiAtRU5PTUVNOworCisJa3JlZl9pbml0KCZqb2It PnJlZmNvdW50KTsKKworCXJldCA9IGRybV9zeW5jb2JqX2ZpbmRfZmVuY2UoZmlsZSwgYXJncy0+ aW5fc3luYywgMCwgMCwKKwkJCQkgICAgICZqb2ItPmluX2ZlbmNlKTsKKwlpZiAocmV0ID09IC1F SU5WQUwpCisJCWdvdG8gZmFpbDsKKworCWpvYi0+cGZkZXYgPSBwZmRldjsKKwlqb2ItPmpjID0g YXJncy0+amM7CisJam9iLT5yZXF1aXJlbWVudHMgPSBhcmdzLT5yZXF1aXJlbWVudHM7CisJam9i LT5mbHVzaF9pZCA9IHBhbmZyb3N0X2dwdV9nZXRfbGF0ZXN0X2ZsdXNoX2lkKHBmZGV2KTsKKwlq b2ItPmZpbGVfcHJpdiA9IGZpbGUtPmRyaXZlcl9wcml2OworCisJcmV0ID0gcGFuZnJvc3RfbG9v a3VwX2JvcyhkZXYsIGZpbGUsIGFyZ3MsIGpvYik7CisJaWYgKHJldCkKKwkJZ290byBmYWlsOwor CisJcmV0ID0gcGFuZnJvc3Rfam9iX3B1c2goam9iKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWw7 CisKKwkvKiBVcGRhdGUgdGhlIHJldHVybiBzeW5jIG9iamVjdCBmb3IgdGhlIGpvYiAqLworCXN5 bmNfb3V0ID0gZHJtX3N5bmNvYmpfZmluZChmaWxlLCBhcmdzLT5vdXRfc3luYyk7CisJaWYgKHN5 bmNfb3V0KSB7CisJCWRybV9zeW5jb2JqX3JlcGxhY2VfZmVuY2Uoc3luY19vdXQsIGpvYi0+cmVu ZGVyX2RvbmVfZmVuY2UpOworCQlkcm1fc3luY29ial9wdXQoc3luY19vdXQpOworCX0KKworZmFp bDoKKwlwYW5mcm9zdF9qb2JfcHV0KGpvYik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMg aW50CitwYW5mcm9zdF9pb2N0bF93YWl0X2JvKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQg KmRhdGEsCisJCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlsb25nIHJl dDsKKwlzdHJ1Y3QgZHJtX3BhbmZyb3N0X3dhaXRfYm8gKmFyZ3MgPSBkYXRhOworCXN0cnVjdCBk cm1fZ2VtX29iamVjdCAqZ2VtX29iajsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBkcm1fdGlt ZW91dF9hYnNfdG9famlmZmllcyhhcmdzLT50aW1lb3V0X25zKTsKKworCWlmIChhcmdzLT5wYWQp CisJCXJldHVybiAtRUlOVkFMOworCisJZ2VtX29iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChm aWxlX3ByaXYsIGFyZ3MtPmhhbmRsZSk7CisJaWYgKCFnZW1fb2JqKQorCQlyZXR1cm4gLUVOT0VO VDsKKworCXJldCA9IHJlc2VydmF0aW9uX29iamVjdF93YWl0X3RpbWVvdXRfcmN1KGdlbV9vYmot PnJlc3YsIHRydWUsCisJCQkJCQkgIHRydWUsIHRpbWVvdXQpOworCWlmICghcmV0KQorCQlyZXQg PSB0aW1lb3V0ID8gLUVUSU1FRE9VVCA6IC1FQlVTWTsKKworCWRybV9nZW1fb2JqZWN0X3B1dF91 bmxvY2tlZChnZW1fb2JqKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcGFuZnJv c3RfaW9jdGxfbW1hcF9ibyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkg ICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX3BhbmZyb3N0 X21tYXBfYm8gKmFyZ3MgPSBkYXRhOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtX29iajsK KwlpbnQgcmV0OworCisJaWYgKGFyZ3MtPmZsYWdzICE9IDApIHsKKwkJRFJNX0lORk8oInVua25v d24gbW1hcF9ibyBmbGFnczogJWRcbiIsIGFyZ3MtPmZsYWdzKTsKKwkJcmV0dXJuIC1FSU5WQUw7 CisJfQorCisJZ2VtX29iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChmaWxlX3ByaXYsIGFyZ3Mt PmhhbmRsZSk7CisJaWYgKCFnZW1fb2JqKSB7CisJCURSTV9ERUJVRygiRmFpbGVkIHRvIGxvb2sg dXAgR0VNIEJPICVkXG4iLCBhcmdzLT5oYW5kbGUpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisK KwlyZXQgPSBkcm1fZ2VtX2NyZWF0ZV9tbWFwX29mZnNldChnZW1fb2JqKTsKKwlpZiAocmV0ID09 IDApCisJCWFyZ3MtPm9mZnNldCA9IGRybV92bWFfbm9kZV9vZmZzZXRfYWRkcigmZ2VtX29iai0+ dm1hX25vZGUpOworCWRybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZChnZW1fb2JqKTsKKworCXJl dHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcGFuZnJvc3RfaW9jdGxfZ2V0X2JvX29mZnNldChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJICAgIHN0cnVjdCBkcm1fZmls ZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1fcGFuZnJvc3RfZ2V0X2JvX29mZnNldCAqYXJn cyA9IGRhdGE7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqOworCXN0cnVjdCBwYW5m cm9zdF9nZW1fb2JqZWN0ICpibzsKKworCWdlbV9vYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAo ZmlsZV9wcml2LCBhcmdzLT5oYW5kbGUpOworCWlmICghZ2VtX29iaikgeworCQlEUk1fREVCVUco IkZhaWxlZCB0byBsb29rIHVwIEdFTSBCTyAlZFxuIiwgYXJncy0+aGFuZGxlKTsKKwkJcmV0dXJu IC1FTk9FTlQ7CisJfQorCWJvID0gdG9fcGFuZnJvc3RfYm8oZ2VtX29iaik7CisKKwlhcmdzLT5v ZmZzZXQgPSBiby0+bm9kZS5zdGFydCA8PCBQQUdFX1NISUZUOworCisJZHJtX2dlbV9vYmplY3Rf cHV0X3VubG9ja2VkKGdlbV9vYmopOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitwYW5m cm9zdF9vcGVuKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkK K3sKKwlzdHJ1Y3QgcGFuZnJvc3RfZGV2aWNlICpwZmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJ c3RydWN0IHBhbmZyb3N0X2ZpbGVfcHJpdiAqcGFuZnJvc3RfcHJpdjsKKworCXBhbmZyb3N0X3By aXYgPSBremFsbG9jKHNpemVvZigqcGFuZnJvc3RfcHJpdiksIEdGUF9LRVJORUwpOworCWlmICgh cGFuZnJvc3RfcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwYW5mcm9zdF9wcml2LT5wZmRl diA9IHBmZGV2OworCWZpbGUtPmRyaXZlcl9wcml2ID0gcGFuZnJvc3RfcHJpdjsKKworCXBhbmZy b3N0X2pvYl9vcGVuKHBhbmZyb3N0X3ByaXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2 b2lkCitwYW5mcm9zdF9wb3N0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRy bV9maWxlICpmaWxlKQoreworCXN0cnVjdCBwYW5mcm9zdF9maWxlX3ByaXYgKnBhbmZyb3N0X3By aXYgPSBmaWxlLT5kcml2ZXJfcHJpdjsKKworCXBhbmZyb3N0X2pvYl9jbG9zZShwYW5mcm9zdF9w cml2KTsKKworCWtmcmVlKHBhbmZyb3N0X3ByaXYpOworfQorCisvKiBEUk1fQVVUSCBpcyByZXF1 aXJlZCBvbiBTVUJNSVQgZm9yIG5vdywgd2hpbGUgYWxsIGNsaWVudHMgc2hhcmUgYSBzaW5nbGUK KyAqIGFkZHJlc3Mgc3BhY2UuICBOb3RlIHRoYXQgcmVuZGVyIG5vZGVzIHdvdWxkIGJlIGFibGUg dG8gc3VibWl0IGpvYnMgdGhhdAorICogY291bGQgYWNjZXNzIEJPcyBmcm9tIGNsaWVudHMgYXV0 aGVudGljYXRlZCB3aXRoIHRoZSBtYXN0ZXIgbm9kZS4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVj dCBkcm1faW9jdGxfZGVzYyBwYW5mcm9zdF9kcm1fZHJpdmVyX2lvY3Rsc1tdID0geworI2RlZmlu ZSBQQU5GUk9TVF9JT0NUTChuLCBmdW5jLCBmbGFncykgXAorCURSTV9JT0NUTF9ERUZfRFJWKFBB TkZST1NUXyMjbiwgcGFuZnJvc3RfaW9jdGxfIyNmdW5jLCBmbGFncykKKworCVBBTkZST1NUX0lP Q1RMKFNVQk1JVCwJCXN1Ym1pdCwJCURSTV9SRU5ERVJfQUxMT1cgfCBEUk1fQVVUSCksCisJUEFO RlJPU1RfSU9DVEwoV0FJVF9CTywJCXdhaXRfYm8sCURSTV9SRU5ERVJfQUxMT1cpLAorCVBBTkZS T1NUX0lPQ1RMKENSRUFURV9CTywJY3JlYXRlX2JvLAlEUk1fUkVOREVSX0FMTE9XKSwKKwlQQU5G Uk9TVF9JT0NUTChNTUFQX0JPLAkJbW1hcF9ibywJRFJNX1JFTkRFUl9BTExPVyksCisJUEFORlJP U1RfSU9DVEwoR0VUX1BBUkFNLAlnZXRfcGFyYW0sCURSTV9SRU5ERVJfQUxMT1cpLAorCVBBTkZS T1NUX0lPQ1RMKEdFVF9CT19PRkZTRVQsCWdldF9ib19vZmZzZXQsCURSTV9SRU5ERVJfQUxMT1cp LAorfTsKKworREVGSU5FX0RSTV9HRU1fU0hNRU1fRk9QUyhwYW5mcm9zdF9kcm1fZHJpdmVyX2Zv cHMpOworCitzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgcGFuZnJvc3RfZHJtX2RyaXZlciA9IHsK KwkuZHJpdmVyX2ZlYXR1cmVzCT0gRFJJVkVSX1JFTkRFUiB8IERSSVZFUl9HRU0gfCBEUklWRVJf UFJJTUUgfCBEUklWRVJfU1lOQ09CSiwKKwkub3BlbgkJCT0gcGFuZnJvc3Rfb3BlbiwKKwkucG9z dGNsb3NlCQk9IHBhbmZyb3N0X3Bvc3RjbG9zZSwKKwkuaW9jdGxzCQkJPSBwYW5mcm9zdF9kcm1f ZHJpdmVyX2lvY3RscywKKwkubnVtX2lvY3RscwkJPSBBUlJBWV9TSVpFKHBhbmZyb3N0X2RybV9k cml2ZXJfaW9jdGxzKSwKKwkuZm9wcwkJCT0gJnBhbmZyb3N0X2RybV9kcml2ZXJfZm9wcywKKwku bmFtZQkJCT0gInBhbmZyb3N0IiwKKwkuZGVzYwkJCT0gInBhbmZyb3N0IERSTSIsCisJLmRhdGUJ CQk9ICIyMDE4MDkwOCIsCisJLm1ham9yCQkJPSAxLAorCS5taW5vcgkJCT0gMCwKKworCS5nZW1f Y3JlYXRlX29iamVjdAk9IHBhbmZyb3N0X2dlbV9jcmVhdGVfb2JqZWN0LAorCS5wcmltZV9oYW5k bGVfdG9fZmQJPSBkcm1fZ2VtX3ByaW1lX2hhbmRsZV90b19mZCwKKwkucHJpbWVfZmRfdG9faGFu ZGxlCT0gZHJtX2dlbV9wcmltZV9mZF90b19oYW5kbGUsCisJLmdlbV9wcmltZV9pbXBvcnRfc2df dGFibGUgPSBwYW5mcm9zdF9nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlLAorCS5nZW1fcHJpbWVf bW1hcAkJPSBkcm1fZ2VtX3ByaW1lX21tYXAsCit9OworCitzdGF0aWMgaW50IHBhbmZyb3N0X3Bk ZXZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcGFuZnJv c3RfZGV2aWNlICpwZmRldjsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldjsKKwlpbnQgZXJyOwor CisJcGZkZXYgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpwZmRldiksIEdGUF9L RVJORUwpOworCWlmICghcGZkZXYpCisJCXJldHVybiAtRU5PTUVNOworCisJcGZkZXYtPnBkZXYg PSBwZGV2OworCXBmZGV2LT5kZXYgPSAmcGRldi0+ZGV2OworCisJcGxhdGZvcm1fc2V0X2RydmRh dGEocGRldiwgcGZkZXYpOworCisJLyogQWxsb2NhdGUgYW5kIGluaXRpYWx6ZSB0aGUgRFJNIGRl dmljZS4gKi8KKwlkZGV2ID0gZHJtX2Rldl9hbGxvYygmcGFuZnJvc3RfZHJtX2RyaXZlciwgJnBk ZXYtPmRldik7CisJaWYgKElTX0VSUihkZGV2KSkKKwkJcmV0dXJuIFBUUl9FUlIoZGRldik7CisK KwlkZGV2LT5kZXZfcHJpdmF0ZSA9IHBmZGV2OworCXBmZGV2LT5kZGV2ID0gZGRldjsKKworCXNw aW5fbG9ja19pbml0KCZwZmRldi0+bW1fbG9jayk7CisJZHJtX21tX2luaXQoJnBmZGV2LT5tbSwg MCwgU1pfNEcpOyAvLyA0RyBlbm91Z2ggZm9yIG5vdy4gY2FuIGJlIDQ4LWJpdAorCisJZXJyID0g cGFuZnJvc3RfZGV2aWNlX2luaXQocGZkZXYpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRl di0+ZGV2LCAiRmF0YWwgZXJyb3IgZHVyaW5nIEdQVSBpbml0XG4iKTsKKwkJZ290byBlcnJfb3V0 MDsKKwl9CisKKwkvKgorCSAqIFJlZ2lzdGVyIHRoZSBEUk0gZGV2aWNlIHdpdGggdGhlIGNvcmUg YW5kIHRoZSBjb25uZWN0b3JzIHdpdGgKKwkgKiBzeXNmcworCSAqLworCWVyciA9IGRybV9kZXZf cmVnaXN0ZXIoZGRldiwgMCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyX291dDE7CisKKwly ZXR1cm4gMDsKKworZXJyX291dDE6CisJcGFuZnJvc3RfZGV2aWNlX2ZpbmkocGZkZXYpOworZXJy X291dDA6CisJZHJtX2Rldl9wdXQoZGRldik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGlu dCBwYW5mcm9zdF9wZGV2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorewor CXN0cnVjdCBwYW5mcm9zdF9kZXZpY2UgKnBmZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRl dik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRkZXYgPSBwZmRldi0+ZGRldjsKKworCWRybV9kZXZf dW5yZWdpc3RlcihkZGV2KTsKKwlwYW5mcm9zdF9kZXZpY2VfZmluaShwZmRldik7CisJZHJtX2Rl dl9wdXQoZGRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2 aWNlX2lkIGR0X21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJhcm0sbWFsaS10NzYwIiB9 LAorCXsgLmNvbXBhdGlibGUgPSAiYXJtLG1hbGktdDg2MCIgfSwKKwl7fQorfTsKK01PRFVMRV9E RVZJQ0VfVEFCTEUob2YsIGR0X21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2 ZXIgcGFuZnJvc3RfcGxhdGZvcm1fZHJpdmVyID0geworCS5wcm9iZQkJPSBwYW5mcm9zdF9wZGV2 X3Byb2JlLAorCS5yZW1vdmUJCT0gcGFuZnJvc3RfcGRldl9yZW1vdmUsCisJLmRyaXZlcgkJPSB7 CisJCS5uYW1lCT0gInBhbmZyb3N0IiwKKwkJLm9mX21hdGNoX3RhYmxlID0gZHRfbWF0Y2gsCisJ fSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHBhbmZyb3N0X2luaXQodm9pZCkKK3sKKwlpbnQg cmV0OworCisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZwYW5mcm9zdF9wbGF0Zm9y bV9kcml2ZXIpOworCisJcmV0dXJuIHJldDsKK30KK21vZHVsZV9pbml0KHBhbmZyb3N0X2luaXQp OworCitzdGF0aWMgdm9pZCBfX2V4aXQgcGFuZnJvc3RfZXhpdCh2b2lkKQoreworCXBsYXRmb3Jt X2RyaXZlcl91bnJlZ2lzdGVyKCZwYW5mcm9zdF9wbGF0Zm9ybV9kcml2ZXIpOworfQorbW9kdWxl X2V4aXQocGFuZnJvc3RfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlBhbmZyb3N0IFByb2plY3Qg RGV2ZWxvcGVycyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQYW5mcm9zdCBEUk0gRHJpdmVyIik7 CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v cGFuZnJvc3QvcGFuZnJvc3RfZmVhdHVyZXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9w YW5mcm9zdF9mZWF0dXJlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw MC4uMGYxMzU4ZWUxYTRlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmZy b3N0L3BhbmZyb3N0X2ZlYXR1cmVzLmgKQEAgLTAsMCArMSwzMDggQEAKKy8qIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCisvKiAoQykgQ09QWVJJR0hUIDIwMTQtMjAxOCBBUk0g TGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKi8KKy8qIENvcHlyaWdodCAyMDE5IExpbmFy bywgTHRkLiwgUm9iIEhlcnJpbmcgPHJvYmhAa2VybmVsLm9yZz4gKi8KKyNpZm5kZWYgX19QQU5G Uk9TVF9GRUFUVVJFU19IX18KKyNkZWZpbmUgX19QQU5GUk9TVF9GRUFUVVJFU19IX18KKworI2lu Y2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorCisjaW5jbHVkZSAicGFuZnJvc3RfZGV2aWNlLmgiCisK K2VudW0gYmFzZV9od19mZWF0dXJlIHsKKwlIV19GRUFUVVJFX0pPQkNIQUlOX0RJU0FNQklHVUFU SU9OLAorCUhXX0ZFQVRVUkVfUFdST05fRFVSSU5HX1BXUk9GRl9UUkFOUywKKwlIV19GRUFUVVJF X1hBRkZJTklUWSwKKwlIV19GRUFUVVJFX09VVF9PRl9PUkRFUl9FWEVDLAorCUhXX0ZFQVRVUkVf TVJULAorCUhXX0ZFQVRVUkVfQlJORE9VVF9DQywKKwlIV19GRUFUVVJFX0lOVEVSUElQRV9SRUdf QUxJQVNJTkcsCisJSFdfRkVBVFVSRV9MRF9TVF9USUxFQlVGRkVSLAorCUhXX0ZFQVRVUkVfTVNB QV8xNlgsCisJSFdfRkVBVFVSRV8zMl9CSVRfVU5JRk9STV9BRERSRVNTLAorCUhXX0ZFQVRVUkVf QVRUUl9BVVRPX1RZUEVfSU5GRVJSQUwsCisJSFdfRkVBVFVSRV9PUFRJTUlaRURfQ09WRVJBR0Vf TUFTSywKKwlIV19GRUFUVVJFX1Q3WFhfUEFJUklOR19SVUxFUywKKwlIV19GRUFUVVJFX0xEX1NU X0xFQV9URVgsCisJSFdfRkVBVFVSRV9MSU5FQVJfRklMVEVSX0ZMT0FULAorCUhXX0ZFQVRVUkVf V09SS0dST1VQX1JPVU5EX01VTFRJUExFX09GXzQsCisJSFdfRkVBVFVSRV9JTUFHRVNfSU5fRlJB R01FTlRfU0hBREVSUywKKwlIV19GRUFUVVJFX1RFU1Q0X0RBVFVNX01PREUsCisJSFdfRkVBVFVS RV9ORVhUX0lOU1RSVUNUSU9OX1RZUEUsCisJSFdfRkVBVFVSRV9CUk5ET1VUX0tJTEwsCisJSFdf RkVBVFVSRV9XQVJQSU5HLAorCUhXX0ZFQVRVUkVfVjQsCisJSFdfRkVBVFVSRV9GTFVTSF9SRURV Q1RJT04sCisJSFdfRkVBVFVSRV9QUk9URUNURURfTU9ERSwKKwlIV19GRUFUVVJFX0NPSEVSRU5D WV9SRUcsCisJSFdfRkVBVFVSRV9QUk9URUNURURfREVCVUdfTU9ERSwKKwlIV19GRUFUVVJFX0FB UkNINjRfTU1VLAorCUhXX0ZFQVRVUkVfVExTX0hBU0hJTkcsCisJSFdfRkVBVFVSRV9USFJFQURf R1JPVVBfU1BMSVQsCisJSFdfRkVBVFVSRV8zQklUX0VYVF9SV19MMl9NTVVfQ09ORklHLAorfTsK KworI2RlZmluZSBod19mZWF0dXJlc190NjAwIChcCisJQklUX1VMTChIV19GRUFUVVJFX0xEX1NU X0xFQV9URVgpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9MSU5FQVJfRklMVEVSX0ZMT0FUKSB8 IFwKKwlCSVRfVUxMKEhXX0ZFQVRVUkVfVEhSRUFEX0dST1VQX1NQTElUKSB8IFwKKwlCSVRfVUxM KEhXX0ZFQVRVUkVfVjQpKQorCisjZGVmaW5lIGh3X2ZlYXR1cmVzX3Q2MjAgKFwKKwlCSVRfVUxM KEhXX0ZFQVRVUkVfTERfU1RfTEVBX1RFWCkgfCBcCisJQklUX1VMTChIV19GRUFUVVJFX0xJTkVB Ul9GSUxURVJfRkxPQVQpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9BVFRSX0FVVE9fVFlQRV9J TkZFUlJBTCkgfCBcCisJQklUX1VMTChIV19GRUFUVVJFX1RIUkVBRF9HUk9VUF9TUExJVCkgfCBc CisJQklUX1VMTChIV19GRUFUVVJFX1Y0KSkKKworI2RlZmluZSBod19mZWF0dXJlc190NzIwIChc CisJQklUX1VMTChIV19GRUFUVVJFXzMyX0JJVF9VTklGT1JNX0FERFJFU1MpIHwgXAorCUJJVF9V TEwoSFdfRkVBVFVSRV9BVFRSX0FVVE9fVFlQRV9JTkZFUlJBTCkgfCBcCisJQklUX1VMTChIV19G RUFUVVJFX0lOVEVSUElQRV9SRUdfQUxJQVNJTkcpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9P UFRJTUlaRURfQ09WRVJBR0VfTUFTSykgfCBcCisJQklUX1VMTChIV19GRUFUVVJFX1Q3WFhfUEFJ UklOR19SVUxFUykgfCBcCisJQklUX1VMTChIV19GRUFUVVJFX1RIUkVBRF9HUk9VUF9TUExJVCkg fCBcCisJQklUX1VMTChIV19GRUFUVVJFX1dPUktHUk9VUF9ST1VORF9NVUxUSVBMRV9PRl80KSB8 IFwKKwlCSVRfVUxMKEhXX0ZFQVRVUkVfV0FSUElORykgfCBcCisJQklUX1VMTChIV19GRUFUVVJF X1Y0KSkKKworCisjZGVmaW5lIGh3X2ZlYXR1cmVzX3Q3NjAgKFwKKwlCSVRfVUxMKEhXX0ZFQVRV UkVfSk9CQ0hBSU5fRElTQU1CSUdVQVRJT04pIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9QV1JP Tl9EVVJJTkdfUFdST0ZGX1RSQU5TKSB8IFwKKwlCSVRfVUxMKEhXX0ZFQVRVUkVfWEFGRklOSVRZ KSB8IFwKKwlCSVRfVUxMKEhXX0ZFQVRVUkVfMzJfQklUX1VOSUZPUk1fQUREUkVTUykgfCBcCisJ QklUX1VMTChIV19GRUFUVVJFX0FUVFJfQVVUT19UWVBFX0lORkVSUkFMKSB8IFwKKwlCSVRfVUxM KEhXX0ZFQVRVUkVfQlJORE9VVF9DQykgfCBcCisJQklUX1VMTChIV19GRUFUVVJFX0xEX1NUX0xF QV9URVgpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9MRF9TVF9USUxFQlVGRkVSKSB8IFwKKwlC SVRfVUxMKEhXX0ZFQVRVUkVfTElORUFSX0ZJTFRFUl9GTE9BVCkgfCBcCisJQklUX1VMTChIV19G RUFUVVJFX01SVCkgfCBcCisJQklUX1VMTChIV19GRUFUVVJFX01TQUFfMTZYKSB8IFwKKwlCSVRf VUxMKEhXX0ZFQVRVUkVfT1VUX09GX09SREVSX0VYRUMpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVS RV9UN1hYX1BBSVJJTkdfUlVMRVMpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9URVNUNF9EQVRV TV9NT0RFKSB8IFwKKwlCSVRfVUxMKEhXX0ZFQVRVUkVfVEhSRUFEX0dST1VQX1NQTElUKSkKKwor Ly8gVDg2MAorI2RlZmluZSBod19mZWF0dXJlc190ODYwIChcCisJQklUX1VMTChIV19GRUFUVVJF X0pPQkNIQUlOX0RJU0FNQklHVUFUSU9OKSB8IFwKKwlCSVRfVUxMKEhXX0ZFQVRVUkVfUFdST05f RFVSSU5HX1BXUk9GRl9UUkFOUykgfCBcCisJQklUX1VMTChIV19GRUFUVVJFX1hBRkZJTklUWSkg fCBcCisJQklUX1VMTChIV19GRUFUVVJFXzMyX0JJVF9VTklGT1JNX0FERFJFU1MpIHwgXAorCUJJ VF9VTEwoSFdfRkVBVFVSRV9BVFRSX0FVVE9fVFlQRV9JTkZFUlJBTCkgfCBcCisJQklUX1VMTChI V19GRUFUVVJFX0JSTkRPVVRfQ0MpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9CUk5ET1VUX0tJ TEwpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9MRF9TVF9MRUFfVEVYKSB8IFwKKwlCSVRfVUxM KEhXX0ZFQVRVUkVfTERfU1RfVElMRUJVRkZFUikgfCBcCisJQklUX1VMTChIV19GRUFUVVJFX0xJ TkVBUl9GSUxURVJfRkxPQVQpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9NUlQpIHwgXAorCUJJ VF9VTEwoSFdfRkVBVFVSRV9NU0FBXzE2WCkgfCBcCisJQklUX1VMTChIV19GRUFUVVJFX05FWFRf SU5TVFJVQ1RJT05fVFlQRSkgfCBcCisJQklUX1VMTChIV19GRUFUVVJFX09VVF9PRl9PUkRFUl9F WEVDKSB8IFwKKwlCSVRfVUxMKEhXX0ZFQVRVUkVfVDdYWF9QQUlSSU5HX1JVTEVTKSB8IFwKKwlC SVRfVUxMKEhXX0ZFQVRVUkVfVEVTVDRfREFUVU1fTU9ERSkgfCBcCisJQklUX1VMTChIV19GRUFU VVJFX1RIUkVBRF9HUk9VUF9TUExJVCkpCisKKyNkZWZpbmUgaHdfZmVhdHVyZXNfdDg4MCBod19m ZWF0dXJlc190ODYwCisKKyNkZWZpbmUgaHdfZmVhdHVyZXNfdDgzMCAoXAorCUJJVF9VTEwoSFdf RkVBVFVSRV9KT0JDSEFJTl9ESVNBTUJJR1VBVElPTikgfCBcCisJQklUX1VMTChIV19GRUFUVVJF X1BXUk9OX0RVUklOR19QV1JPRkZfVFJBTlMpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9YQUZG SU5JVFkpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9XQVJQSU5HKSB8IFwKKwlCSVRfVUxMKEhX X0ZFQVRVUkVfSU5URVJQSVBFX1JFR19BTElBU0lORykgfCBcCisJQklUX1VMTChIV19GRUFUVVJF XzMyX0JJVF9VTklGT1JNX0FERFJFU1MpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9BVFRSX0FV VE9fVFlQRV9JTkZFUlJBTCkgfCBcCisJQklUX1VMTChIV19GRUFUVVJFX0JSTkRPVVRfQ0MpIHwg XAorCUJJVF9VTEwoSFdfRkVBVFVSRV9CUk5ET1VUX0tJTEwpIHwgXAorCUJJVF9VTEwoSFdfRkVB VFVSRV9MRF9TVF9MRUFfVEVYKSB8IFwKKwlCSVRfVUxMKEhXX0ZFQVRVUkVfTERfU1RfVElMRUJV RkZFUikgfCBcCisJQklUX1VMTChIV19GRUFUVVJFX0xJTkVBUl9GSUxURVJfRkxPQVQpIHwgXAor CUJJVF9VTEwoSFdfRkVBVFVSRV9NUlQpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9ORVhUX0lO U1RSVUNUSU9OX1RZUEUpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9PVVRfT0ZfT1JERVJfRVhF QykgfCBcCisJQklUX1VMTChIV19GRUFUVVJFX1Q3WFhfUEFJUklOR19SVUxFUykgfCBcCisJQklU X1VMTChIV19GRUFUVVJFX1RFU1Q0X0RBVFVNX01PREUpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVS RV9USFJFQURfR1JPVVBfU1BMSVQpKQorCisjZGVmaW5lIGh3X2ZlYXR1cmVzX3Q4MjAgKFwKKwlC SVRfVUxMKEhXX0ZFQVRVUkVfSk9CQ0hBSU5fRElTQU1CSUdVQVRJT04pIHwgXAorCUJJVF9VTEwo SFdfRkVBVFVSRV9QV1JPTl9EVVJJTkdfUFdST0ZGX1RSQU5TKSB8IFwKKwlCSVRfVUxMKEhXX0ZF QVRVUkVfWEFGRklOSVRZKSB8IFwKKwlCSVRfVUxMKEhXX0ZFQVRVUkVfV0FSUElORykgfCBcCisJ QklUX1VMTChIV19GRUFUVVJFX0lOVEVSUElQRV9SRUdfQUxJQVNJTkcpIHwgXAorCUJJVF9VTEwo SFdfRkVBVFVSRV8zMl9CSVRfVU5JRk9STV9BRERSRVNTKSB8IFwKKwlCSVRfVUxMKEhXX0ZFQVRV UkVfQVRUUl9BVVRPX1RZUEVfSU5GRVJSQUwpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9CUk5E T1VUX0NDKSB8IFwKKwlCSVRfVUxMKEhXX0ZFQVRVUkVfQlJORE9VVF9LSUxMKSB8IFwKKwlCSVRf VUxMKEhXX0ZFQVRVUkVfTERfU1RfTEVBX1RFWCkgfCBcCisJQklUX1VMTChIV19GRUFUVVJFX0xE X1NUX1RJTEVCVUZGRVIpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9MSU5FQVJfRklMVEVSX0ZM T0FUKSB8IFwKKwlCSVRfVUxMKEhXX0ZFQVRVUkVfTVJUKSB8IFwKKwlCSVRfVUxMKEhXX0ZFQVRV UkVfTkVYVF9JTlNUUlVDVElPTl9UWVBFKSB8IFwKKwlCSVRfVUxMKEhXX0ZFQVRVUkVfT1VUX09G X09SREVSX0VYRUMpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9UN1hYX1BBSVJJTkdfUlVMRVMp IHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9URVNUNF9EQVRVTV9NT0RFKSB8IFwKKwlCSVRfVUxM KEhXX0ZFQVRVUkVfVEhSRUFEX0dST1VQX1NQTElUKSkKKworI2RlZmluZSBod19mZWF0dXJlc19n NzEgKFwKKwlCSVRfVUxMKEhXX0ZFQVRVUkVfSk9CQ0hBSU5fRElTQU1CSUdVQVRJT04pIHwgXAor CUJJVF9VTEwoSFdfRkVBVFVSRV9QV1JPTl9EVVJJTkdfUFdST0ZGX1RSQU5TKSB8IFwKKwlCSVRf VUxMKEhXX0ZFQVRVUkVfWEFGRklOSVRZKSB8IFwKKwlCSVRfVUxMKEhXX0ZFQVRVUkVfV0FSUElO RykgfCBcCisJQklUX1VMTChIV19GRUFUVVJFX0lOVEVSUElQRV9SRUdfQUxJQVNJTkcpIHwgXAor CUJJVF9VTEwoSFdfRkVBVFVSRV8zMl9CSVRfVU5JRk9STV9BRERSRVNTKSB8IFwKKwlCSVRfVUxM KEhXX0ZFQVRVUkVfQVRUUl9BVVRPX1RZUEVfSU5GRVJSQUwpIHwgXAorCUJJVF9VTEwoSFdfRkVB VFVSRV9CUk5ET1VUX0NDKSB8IFwKKwlCSVRfVUxMKEhXX0ZFQVRVUkVfQlJORE9VVF9LSUxMKSB8 IFwKKwlCSVRfVUxMKEhXX0ZFQVRVUkVfTERfU1RfTEVBX1RFWCkgfCBcCisJQklUX1VMTChIV19G RUFUVVJFX0xEX1NUX1RJTEVCVUZGRVIpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9MSU5FQVJf RklMVEVSX0ZMT0FUKSB8IFwKKwlCSVRfVUxMKEhXX0ZFQVRVUkVfTVJUKSB8IFwKKwlCSVRfVUxM KEhXX0ZFQVRVUkVfTVNBQV8xNlgpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9ORVhUX0lOU1RS VUNUSU9OX1RZUEUpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9PVVRfT0ZfT1JERVJfRVhFQykg fCBcCisJQklUX1VMTChIV19GRUFUVVJFX1Q3WFhfUEFJUklOR19SVUxFUykgfCBcCisJQklUX1VM TChIV19GRUFUVVJFX1RFU1Q0X0RBVFVNX01PREUpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9U SFJFQURfR1JPVVBfU1BMSVQpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9GTFVTSF9SRURVQ1RJ T04pIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9QUk9URUNURURfTU9ERSkgfCBcCisJQklUX1VM TChIV19GRUFUVVJFX0NPSEVSRU5DWV9SRUcpKQorCisjZGVmaW5lIGh3X2ZlYXR1cmVzX2c3MiAo XAorCUJJVF9VTEwoSFdfRkVBVFVSRV9KT0JDSEFJTl9ESVNBTUJJR1VBVElPTikgfCBcCisJQklU X1VMTChIV19GRUFUVVJFX1BXUk9OX0RVUklOR19QV1JPRkZfVFJBTlMpIHwgXAorCUJJVF9VTEwo SFdfRkVBVFVSRV9YQUZGSU5JVFkpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9XQVJQSU5HKSB8 IFwKKwlCSVRfVUxMKEhXX0ZFQVRVUkVfSU5URVJQSVBFX1JFR19BTElBU0lORykgfCBcCisJQklU X1VMTChIV19GRUFUVVJFXzMyX0JJVF9VTklGT1JNX0FERFJFU1MpIHwgXAorCUJJVF9VTEwoSFdf RkVBVFVSRV9BVFRSX0FVVE9fVFlQRV9JTkZFUlJBTCkgfCBcCisJQklUX1VMTChIV19GRUFUVVJF X0JSTkRPVVRfQ0MpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9CUk5ET1VUX0tJTEwpIHwgXAor CUJJVF9VTEwoSFdfRkVBVFVSRV9MRF9TVF9MRUFfVEVYKSB8IFwKKwlCSVRfVUxMKEhXX0ZFQVRV UkVfTERfU1RfVElMRUJVRkZFUikgfCBcCisJQklUX1VMTChIV19GRUFUVVJFX0xJTkVBUl9GSUxU RVJfRkxPQVQpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9NUlQpIHwgXAorCUJJVF9VTEwoSFdf RkVBVFVSRV9NU0FBXzE2WCkgfCBcCisJQklUX1VMTChIV19GRUFUVVJFX05FWFRfSU5TVFJVQ1RJ T05fVFlQRSkgfCBcCisJQklUX1VMTChIV19GRUFUVVJFX09VVF9PRl9PUkRFUl9FWEVDKSB8IFwK KwlCSVRfVUxMKEhXX0ZFQVRVUkVfVDdYWF9QQUlSSU5HX1JVTEVTKSB8IFwKKwlCSVRfVUxMKEhX X0ZFQVRVUkVfVEVTVDRfREFUVU1fTU9ERSkgfCBcCisJQklUX1VMTChIV19GRUFUVVJFX1RIUkVB RF9HUk9VUF9TUExJVCkgfCBcCisJQklUX1VMTChIV19GRUFUVVJFX0ZMVVNIX1JFRFVDVElPTikg fCBcCisJQklUX1VMTChIV19GRUFUVVJFX1BST1RFQ1RFRF9NT0RFKSB8IFwKKwlCSVRfVUxMKEhX X0ZFQVRVUkVfUFJPVEVDVEVEX0RFQlVHX01PREUpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9D T0hFUkVOQ1lfUkVHKSkKKworI2RlZmluZSBod19mZWF0dXJlc19nNTEgKFwKKwlCSVRfVUxMKEhX X0ZFQVRVUkVfSk9CQ0hBSU5fRElTQU1CSUdVQVRJT04pIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVS RV9QV1JPTl9EVVJJTkdfUFdST0ZGX1RSQU5TKSB8IFwKKwlCSVRfVUxMKEhXX0ZFQVRVUkVfWEFG RklOSVRZKSB8IFwKKwlCSVRfVUxMKEhXX0ZFQVRVUkVfV0FSUElORykgfCBcCisJQklUX1VMTChI V19GRUFUVVJFX0lOVEVSUElQRV9SRUdfQUxJQVNJTkcpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVS RV8zMl9CSVRfVU5JRk9STV9BRERSRVNTKSB8IFwKKwlCSVRfVUxMKEhXX0ZFQVRVUkVfQVRUUl9B VVRPX1RZUEVfSU5GRVJSQUwpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9CUk5ET1VUX0NDKSB8 IFwKKwlCSVRfVUxMKEhXX0ZFQVRVUkVfQlJORE9VVF9LSUxMKSB8IFwKKwlCSVRfVUxMKEhXX0ZF QVRVUkVfTERfU1RfTEVBX1RFWCkgfCBcCisJQklUX1VMTChIV19GRUFUVVJFX0xEX1NUX1RJTEVC VUZGRVIpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9MSU5FQVJfRklMVEVSX0ZMT0FUKSB8IFwK KwlCSVRfVUxMKEhXX0ZFQVRVUkVfTVJUKSB8IFwKKwlCSVRfVUxMKEhXX0ZFQVRVUkVfTVNBQV8x NlgpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9ORVhUX0lOU1RSVUNUSU9OX1RZUEUpIHwgXAor CUJJVF9VTEwoSFdfRkVBVFVSRV9PVVRfT0ZfT1JERVJfRVhFQykgfCBcCisJQklUX1VMTChIV19G RUFUVVJFX1Q3WFhfUEFJUklOR19SVUxFUykgfCBcCisJQklUX1VMTChIV19GRUFUVVJFX1RFU1Q0 X0RBVFVNX01PREUpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9USFJFQURfR1JPVVBfU1BMSVQp IHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9GTFVTSF9SRURVQ1RJT04pIHwgXAorCUJJVF9VTEwo SFdfRkVBVFVSRV9QUk9URUNURURfTU9ERSkgfCBcCisJQklUX1VMTChIV19GRUFUVVJFX1BST1RF Q1RFRF9ERUJVR19NT0RFKSB8IFwKKwlCSVRfVUxMKEhXX0ZFQVRVUkVfQ09IRVJFTkNZX1JFRykp CisKKyNkZWZpbmUgaHdfZmVhdHVyZXNfZzUyIChcCisJQklUX1VMTChIV19GRUFUVVJFX0pPQkNI QUlOX0RJU0FNQklHVUFUSU9OKSB8IFwKKwlCSVRfVUxMKEhXX0ZFQVRVUkVfUFdST05fRFVSSU5H X1BXUk9GRl9UUkFOUykgfCBcCisJQklUX1VMTChIV19GRUFUVVJFX1hBRkZJTklUWSkgfCBcCisJ QklUX1VMTChIV19GRUFUVVJFX1dBUlBJTkcpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9JTlRF UlBJUEVfUkVHX0FMSUFTSU5HKSB8IFwKKwlCSVRfVUxMKEhXX0ZFQVRVUkVfMzJfQklUX1VOSUZP Uk1fQUREUkVTUykgfCBcCisJQklUX1VMTChIV19GRUFUVVJFX0FUVFJfQVVUT19UWVBFX0lORkVS UkFMKSB8IFwKKwlCSVRfVUxMKEhXX0ZFQVRVUkVfQlJORE9VVF9DQykgfCBcCisJQklUX1VMTChI V19GRUFUVVJFX0JSTkRPVVRfS0lMTCkgfCBcCisJQklUX1VMTChIV19GRUFUVVJFX0xEX1NUX0xF QV9URVgpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9MRF9TVF9USUxFQlVGRkVSKSB8IFwKKwlC SVRfVUxMKEhXX0ZFQVRVUkVfTElORUFSX0ZJTFRFUl9GTE9BVCkgfCBcCisJQklUX1VMTChIV19G RUFUVVJFX01SVCkgfCBcCisJQklUX1VMTChIV19GRUFUVVJFX01TQUFfMTZYKSB8IFwKKwlCSVRf VUxMKEhXX0ZFQVRVUkVfTkVYVF9JTlNUUlVDVElPTl9UWVBFKSB8IFwKKwlCSVRfVUxMKEhXX0ZF QVRVUkVfT1VUX09GX09SREVSX0VYRUMpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9UN1hYX1BB SVJJTkdfUlVMRVMpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9URVNUNF9EQVRVTV9NT0RFKSB8 IFwKKwlCSVRfVUxMKEhXX0ZFQVRVUkVfVEhSRUFEX0dST1VQX1NQTElUKSB8IFwKKwlCSVRfVUxM KEhXX0ZFQVRVUkVfRkxVU0hfUkVEVUNUSU9OKSB8IFwKKwlCSVRfVUxMKEhXX0ZFQVRVUkVfUFJP VEVDVEVEX01PREUpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9QUk9URUNURURfREVCVUdfTU9E RSkgfCBcCisJQklUX1VMTChIV19GRUFUVVJFX0NPSEVSRU5DWV9SRUcpKQorCisjZGVmaW5lIGh3 X2ZlYXR1cmVzX2c3NiAoXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9KT0JDSEFJTl9ESVNBTUJJR1VB VElPTikgfCBcCisJQklUX1VMTChIV19GRUFUVVJFX1BXUk9OX0RVUklOR19QV1JPRkZfVFJBTlMp IHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9YQUZGSU5JVFkpIHwgXAorCUJJVF9VTEwoSFdfRkVB VFVSRV9XQVJQSU5HKSB8IFwKKwlCSVRfVUxMKEhXX0ZFQVRVUkVfSU5URVJQSVBFX1JFR19BTElB U0lORykgfCBcCisJQklUX1VMTChIV19GRUFUVVJFXzMyX0JJVF9VTklGT1JNX0FERFJFU1MpIHwg XAorCUJJVF9VTEwoSFdfRkVBVFVSRV9BVFRSX0FVVE9fVFlQRV9JTkZFUlJBTCkgfCBcCisJQklU X1VMTChIV19GRUFUVVJFX0JSTkRPVVRfQ0MpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9CUk5E T1VUX0tJTEwpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9MRF9TVF9MRUFfVEVYKSB8IFwKKwlC SVRfVUxMKEhXX0ZFQVRVUkVfTERfU1RfVElMRUJVRkZFUikgfCBcCisJQklUX1VMTChIV19GRUFU VVJFX0xJTkVBUl9GSUxURVJfRkxPQVQpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9NUlQpIHwg XAorCUJJVF9VTEwoSFdfRkVBVFVSRV9NU0FBXzE2WCkgfCBcCisJQklUX1VMTChIV19GRUFUVVJF X05FWFRfSU5TVFJVQ1RJT05fVFlQRSkgfCBcCisJQklUX1VMTChIV19GRUFUVVJFX09VVF9PRl9P UkRFUl9FWEVDKSB8IFwKKwlCSVRfVUxMKEhXX0ZFQVRVUkVfVDdYWF9QQUlSSU5HX1JVTEVTKSB8 IFwKKwlCSVRfVUxMKEhXX0ZFQVRVUkVfVEVTVDRfREFUVU1fTU9ERSkgfCBcCisJQklUX1VMTChI V19GRUFUVVJFX1RIUkVBRF9HUk9VUF9TUExJVCkgfCBcCisJQklUX1VMTChIV19GRUFUVVJFX0ZM VVNIX1JFRFVDVElPTikgfCBcCisJQklUX1VMTChIV19GRUFUVVJFX1BST1RFQ1RFRF9NT0RFKSB8 IFwKKwlCSVRfVUxMKEhXX0ZFQVRVUkVfUFJPVEVDVEVEX0RFQlVHX01PREUpIHwgXAorCUJJVF9V TEwoSFdfRkVBVFVSRV9DT0hFUkVOQ1lfUkVHKSB8IFwKKwlCSVRfVUxMKEhXX0ZFQVRVUkVfQUFS Q0g2NF9NTVUpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9UTFNfSEFTSElORykgfCBcCisJQklU X1VMTChIV19GRUFUVVJFXzNCSVRfRVhUX1JXX0wyX01NVV9DT05GSUcpKQorCisjZGVmaW5lIGh3 X2ZlYXR1cmVzX2czMSAoXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9KT0JDSEFJTl9ESVNBTUJJR1VB VElPTikgfCBcCisJQklUX1VMTChIV19GRUFUVVJFX1BXUk9OX0RVUklOR19QV1JPRkZfVFJBTlMp IHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9YQUZGSU5JVFkpIHwgXAorCUJJVF9VTEwoSFdfRkVB VFVSRV9XQVJQSU5HKSB8IFwKKwlCSVRfVUxMKEhXX0ZFQVRVUkVfSU5URVJQSVBFX1JFR19BTElB U0lORykgfCBcCisJQklUX1VMTChIV19GRUFUVVJFXzMyX0JJVF9VTklGT1JNX0FERFJFU1MpIHwg XAorCUJJVF9VTEwoSFdfRkVBVFVSRV9BVFRSX0FVVE9fVFlQRV9JTkZFUlJBTCkgfCBcCisJQklU X1VMTChIV19GRUFUVVJFX0JSTkRPVVRfQ0MpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9CUk5E T1VUX0tJTEwpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9MRF9TVF9MRUFfVEVYKSB8IFwKKwlC SVRfVUxMKEhXX0ZFQVRVUkVfTERfU1RfVElMRUJVRkZFUikgfCBcCisJQklUX1VMTChIV19GRUFU VVJFX0xJTkVBUl9GSUxURVJfRkxPQVQpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9NUlQpIHwg XAorCUJJVF9VTEwoSFdfRkVBVFVSRV9NU0FBXzE2WCkgfCBcCisJQklUX1VMTChIV19GRUFUVVJF X05FWFRfSU5TVFJVQ1RJT05fVFlQRSkgfCBcCisJQklUX1VMTChIV19GRUFUVVJFX09VVF9PRl9P UkRFUl9FWEVDKSB8IFwKKwlCSVRfVUxMKEhXX0ZFQVRVUkVfVDdYWF9QQUlSSU5HX1JVTEVTKSB8 IFwKKwlCSVRfVUxMKEhXX0ZFQVRVUkVfVEVTVDRfREFUVU1fTU9ERSkgfCBcCisJQklUX1VMTChI V19GRUFUVVJFX1RIUkVBRF9HUk9VUF9TUExJVCkgfCBcCisJQklUX1VMTChIV19GRUFUVVJFX0ZM VVNIX1JFRFVDVElPTikgfCBcCisJQklUX1VMTChIV19GRUFUVVJFX1BST1RFQ1RFRF9NT0RFKSB8 IFwKKwlCSVRfVUxMKEhXX0ZFQVRVUkVfUFJPVEVDVEVEX0RFQlVHX01PREUpIHwgXAorCUJJVF9V TEwoSFdfRkVBVFVSRV9DT0hFUkVOQ1lfUkVHKSB8IFwKKwlCSVRfVUxMKEhXX0ZFQVRVUkVfQUFS Q0g2NF9NTVUpIHwgXAorCUJJVF9VTEwoSFdfRkVBVFVSRV9UTFNfSEFTSElORykgfCBcCisJQklU X1VMTChIV19GRUFUVVJFXzNCSVRfRVhUX1JXX0wyX01NVV9DT05GSUcpKQorCitzdGF0aWMgaW5s aW5lIGJvb2wgcGFuZnJvc3RfaGFzX2h3X2ZlYXR1cmUoc3RydWN0IHBhbmZyb3N0X2RldmljZSAq cGZkZXYsIGVudW0gYmFzZV9od19mZWF0dXJlIGZlYXQpCit7CisJcmV0dXJuIHRlc3RfYml0KGZl YXQsIHBmZGV2LT5mZWF0dXJlcy5iYXNlX2h3X2ZlYXR1cmVzKTsKK30KKworI2VuZGlmCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfZ2VtLmMgYi9kcml2ZXJz L2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfZ2VtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAwLi4zMWYxM2Y0OTI3N2EKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfZ2VtLmMKQEAgLTAsMCArMSw5MiBAQAorLy8gU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qIENvcHlyaWdodCAyMDE5IExpbmFybywg THRkLCBSb2IgSGVycmluZyA8cm9iaEBrZXJuZWwub3JnPiAqLworCisjaW5jbHVkZSA8bGludXgv ZXJyLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1idWYu aD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorCisjaW5jbHVkZSA8ZHJtL3BhbmZy b3N0X2RybS5oPgorI2luY2x1ZGUgInBhbmZyb3N0X2RldmljZS5oIgorI2luY2x1ZGUgInBhbmZy b3N0X2dlbS5oIgorI2luY2x1ZGUgInBhbmZyb3N0X21tdS5oIgorCisvKiBDYWxsZWQgRFJNIGNv cmUgb24gdGhlIGxhc3QgdXNlcnNwYWNlL2tlcm5lbCB1bnJlZmVyZW5jZSBvZiB0aGUKKyAqIEJP LgorICovCit2b2lkIHBhbmZyb3N0X2dlbV9mcmVlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaikKK3sKKwlzdHJ1Y3QgcGFuZnJvc3RfZ2VtX29iamVjdCAqYm8gPSB0b19wYW5mcm9z dF9ibyhvYmopOworCXN0cnVjdCBwYW5mcm9zdF9kZXZpY2UgKnBmZGV2ID0gb2JqLT5kZXYtPmRl dl9wcml2YXRlOworCisJcGFuZnJvc3RfbW11X3VubWFwKGJvKTsKKworCXNwaW5fbG9jaygmcGZk ZXYtPm1tX2xvY2spOworCWRybV9tbV9yZW1vdmVfbm9kZSgmYm8tPm5vZGUpOworCXNwaW5fdW5s b2NrKCZwZmRldi0+bW1fbG9jayk7CisKKwlkcm1fZ2VtX3NobWVtX2ZyZWVfb2JqZWN0KG9iaik7 Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3RfZnVuY3MgcGFuZnJvc3Rf Z2VtX2Z1bmNzID0geworCS5mcmVlID0gcGFuZnJvc3RfZ2VtX2ZyZWVfb2JqZWN0LAorCS5wcmlu dF9pbmZvID0gZHJtX2dlbV9zaG1lbV9wcmludF9pbmZvLAorCS5waW4gPSBkcm1fZ2VtX3NobWVt X3BpbiwKKwkudW5waW4gPSBkcm1fZ2VtX3NobWVtX3VucGluLAorCS5nZXRfc2dfdGFibGUgPSBk cm1fZ2VtX3NobWVtX2dldF9zZ190YWJsZSwKKwkudm1hcCA9IGRybV9nZW1fc2htZW1fdm1hcCwK KwkudnVubWFwID0gZHJtX2dlbV9zaG1lbV92dW5tYXAsCisJLnZtX29wcyA9ICZkcm1fZ2VtX3No bWVtX3ZtX29wcywKK307CisKKy8qKgorICogcGFuZnJvc3RfZ2VtX2NyZWF0ZV9vYmplY3QgLSBJ bXBsZW1lbnRhdGlvbiBvZiBkcml2ZXItPmdlbV9jcmVhdGVfb2JqZWN0LgorICogQGRldjogRFJN IGRldmljZQorICogQHNpemU6IFNpemUgaW4gYnl0ZXMgb2YgdGhlIG1lbW9yeSB0aGUgb2JqZWN0 IHdpbGwgcmVmZXJlbmNlCisgKgorICogVGhpcyBsZXRzIHRoZSBHRU0gaGVscGVycyBhbGxvY2F0 ZSBvYmplY3Qgc3RydWN0cyBmb3IgdXMsIGFuZCBrZWVwCisgKiBvdXIgQk8gc3RhdHMgY29ycmVj dC4KKyAqLworc3RydWN0IGRybV9nZW1fb2JqZWN0ICpwYW5mcm9zdF9nZW1fY3JlYXRlX29iamVj dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSkKK3sKKwlpbnQgcmV0OworCXN0 cnVjdCBwYW5mcm9zdF9kZXZpY2UgKnBmZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qg cGFuZnJvc3RfZ2VtX29iamVjdCAqb2JqOworCisJb2JqID0ga3phbGxvYyhzaXplb2YoKm9iaiks IEdGUF9LRVJORUwpOworCWlmICghb2JqKQorCQlyZXR1cm4gTlVMTDsKKworCW9iai0+YmFzZS5i YXNlLmZ1bmNzID0gJnBhbmZyb3N0X2dlbV9mdW5jczsKKworCXNwaW5fbG9jaygmcGZkZXYtPm1t X2xvY2spOworCXJldCA9IGRybV9tbV9pbnNlcnRfbm9kZSgmcGZkZXYtPm1tLCAmb2JqLT5ub2Rl LAorCQkJCSByb3VuZHVwKHNpemUsIFBBR0VfU0laRSkgPj4gUEFHRV9TSElGVCk7CisJc3Bpbl91 bmxvY2soJnBmZGV2LT5tbV9sb2NrKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWVfb2JqOworCisJ cmV0dXJuICZvYmotPmJhc2UuYmFzZTsKKworZnJlZV9vYmo6CisJa2ZyZWUob2JqKTsKKwlyZXR1 cm4gRVJSX1BUUihyZXQpOworfQorCitzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKgorcGFuZnJvc3Rf Z2VtX3ByaW1lX2ltcG9ydF9zZ190YWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCSAg IHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCwKKwkJCQkgICBzdHJ1Y3Qgc2dfdGFi bGUgKnNndCkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgcGFuZnJv c3RfZ2VtX29iamVjdCAqcG9iajsKKworCW9iaiA9IGRybV9nZW1fc2htZW1fcHJpbWVfaW1wb3J0 X3NnX3RhYmxlKGRldiwgYXR0YWNoLCBzZ3QpOworCXBvYmogPSB0b19wYW5mcm9zdF9ibyhvYmop OworCisJb2JqLT5yZXN2ID0gYXR0YWNoLT5kbWFidWYtPnJlc3Y7CisKKwlwYW5mcm9zdF9tbXVf bWFwKHBvYmopOworCisJcmV0dXJuIG9iajsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9wYW5mcm9zdC9wYW5mcm9zdF9nZW0uaCBiL2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5m cm9zdF9nZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjA0NTAw MGViNWZjZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5m cm9zdF9nZW0uaApAQCAtMCwwICsxLDI5IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMCAqLworLyogQ29weXJpZ2h0IDIwMTkgTGluYXJvLCBMdGQsIFJvYiBIZXJyaW5nIDxy b2JoQGtlcm5lbC5vcmc+ICovCisKKyNpZm5kZWYgX19QQU5GUk9TVF9HRU1fSF9fCisjZGVmaW5l IF9fUEFORlJPU1RfR0VNX0hfXworCisjaW5jbHVkZSA8ZHJtL2RybV9nZW1fc2htZW1faGVscGVy Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9tbS5oPgorCitzdHJ1Y3QgcGFuZnJvc3RfZ2VtX29iamVj dCB7CisJc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0IGJhc2U7CisKKwlzdHJ1Y3QgZHJtX21t X25vZGUgbm9kZTsKK307CisKK3N0YXRpYyBpbmxpbmUKK3N0cnVjdCAgcGFuZnJvc3RfZ2VtX29i amVjdCAqdG9fcGFuZnJvc3RfYm8oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJcmV0 dXJuIGNvbnRhaW5lcl9vZih0b19kcm1fZ2VtX3NobWVtX29iaihvYmopLCBzdHJ1Y3QgcGFuZnJv c3RfZ2VtX29iamVjdCwgYmFzZSk7Cit9CisKK3N0cnVjdCBkcm1fZ2VtX29iamVjdCAqcGFuZnJv c3RfZ2VtX2NyZWF0ZV9vYmplY3Qoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc2l6ZV90IHNpemUp OworCitzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKgorcGFuZnJvc3RfZ2VtX3ByaW1lX2ltcG9ydF9z Z190YWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBkbWFfYnVmX2F0 dGFjaG1lbnQgKmF0dGFjaCwKKwkJCQkgICBzdHJ1Y3Qgc2dfdGFibGUgKnNndCk7CisKKyNlbmRp ZiAvKiBfX1BBTkZST1NUX0dFTV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9w YW5mcm9zdC9wYW5mcm9zdF9ncHUuYyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9z dF9ncHUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmI3MWZhYTU4 MzE0NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9z dF9ncHUuYwpAQCAtMCwwICsxLDQ2NCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ TC0yLjAKKy8qIENvcHlyaWdodCAyMDE4IE1hcnR5IEUuIFBsdW1tZXIgPGhhbmV0emVyQHN0YXJ0 bWFpbC5jb20+ICovCisvKiBDb3B5cmlnaHQgMjAxOSBMaW5hcm8sIEx0ZC4sIFJvYiBIZXJyaW5n IDxyb2JoQGtlcm5lbC5vcmc+ICovCisvKiBDb3B5cmlnaHQgMjAxOSBDb2xsYWJvcmEgbHRkLiAq LworCisjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4K KyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2lu Y2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSAicGFuZnJvc3RfZGV2 aWNlLmgiCisjaW5jbHVkZSAicGFuZnJvc3RfZmVhdHVyZXMuaCIKKyNpbmNsdWRlICJwYW5mcm9z dF9pc3N1ZXMuaCIKKyNpbmNsdWRlICJwYW5mcm9zdF9ncHUuaCIKKworI2RlZmluZSBHUFVfSUQJ CQkJMHgwMAorI2RlZmluZSBHUFVfTDJfRkVBVFVSRVMJCQkweDAwNAkvKiAoUk8pIExldmVsIDIg Y2FjaGUgZmVhdHVyZXMgKi8KKyNkZWZpbmUgR1BVX0NPUkVfRkVBVFVSRVMJCTB4MDA4CS8qIChS TykgU2hhZGVyIENvcmUgRmVhdHVyZXMgKi8KKyNkZWZpbmUgR1BVX1RJTEVSX0ZFQVRVUkVTCQkw eDAwQwkvKiAoUk8pIFRpbGVyIEZlYXR1cmVzICovCisjZGVmaW5lIEdQVV9NRU1fRkVBVFVSRVMJ CTB4MDEwCS8qIChSTykgTWVtb3J5IHN5c3RlbSBmZWF0dXJlcyAqLworI2RlZmluZSAgIEdST1VQ U19MMl9DT0hFUkVOVAkJQklUKDApCS8qIENvcmVzIGdyb3VwcyBhcmUgbDIgY29oZXJlbnQgKi8K KworI2RlZmluZSBHUFVfTU1VX0ZFQVRVUkVTCQkweDAxNAkvKiAoUk8pIE1NVSBmZWF0dXJlcyAq LworI2RlZmluZSBHUFVfQVNfUFJFU0VOVAkJCTB4MDE4CS8qIChSTykgQWRkcmVzcyBzcGFjZSBz bG90cyBwcmVzZW50ICovCisjZGVmaW5lIEdQVV9KU19QUkVTRU5UCQkJMHgwMUMJLyogKFJPKSBK b2Igc2xvdHMgcHJlc2VudCAqLworCisKKyNkZWZpbmUgR1BVX0lOVF9SQVdTVEFUCQkJMHgyMAor I2RlZmluZSBHUFVfSU5UX0NMRUFSCQkJMHgyNAorI2RlZmluZSBHUFVfSU5UX01BU0sJCQkweDI4 CisjZGVmaW5lIEdQVV9JTlRfU1RBVAkJCTB4MmMKKyNkZWZpbmUgICBHUFVfSVJRX0ZBVUxUCQkJ QklUKDApCisjZGVmaW5lICAgR1BVX0lSUV9NVUxUSVBMRV9GQVVMVAlCSVQoNykKKyNkZWZpbmUg ICBHUFVfSVJRX1JFU0VUX0NPTVBMRVRFRAlCSVQoOCkKKyNkZWZpbmUgICBHUFVfSVJRX1BPV0VS X0NIQU5HRUQJCUJJVCg5KQorI2RlZmluZSAgIEdQVV9JUlFfUE9XRVJfQ0hBTkdFRF9BTEwJQklU KDEwKQorI2RlZmluZSAgIEdQVV9JUlFfUEVSRkNOVF9TQU1QTEVfQ09NUExFVEVEIEJJVCgxNikK KyNkZWZpbmUgICBHUFVfSVJRX0NMRUFOX0NBQ0hFU19DT01QTEVURUQgQklUKDE3KQorI2RlZmlu ZSAgIEdQVV9JUlFfTUFTS19BTEwJCQkgXAorCSAgKAkJCQkJIFwKKwkgICBHUFVfSVJRX0ZBVUxU CQkJfFwKKwkgICBHUFVfSVJRX01VTFRJUExFX0ZBVUxUCQl8XAorCSAgIEdQVV9JUlFfUkVTRVRf Q09NUExFVEVECQl8XAorCSAgIEdQVV9JUlFfUE9XRVJfQ0hBTkdFRAkJfFwKKwkgICBHUFVfSVJR X1BPV0VSX0NIQU5HRURfQUxMCQl8XAorCSAgIEdQVV9JUlFfUEVSRkNOVF9TQU1QTEVfQ09NUExF VEVECXxcCisJICAgR1BVX0lSUV9DTEVBTl9DQUNIRVNfQ09NUExFVEVEICkKKyNkZWZpbmUgR1BV X0lSUV9NQVNLX0VSUk9SCSAgIAkJXAorCSgJCQkJCVwKKwkgR1BVX0lSUV9GQVVMVAkJCQl8XAor CSBHUFVfSVJRX01VTFRJUExFX0ZBVUxUKQorI2RlZmluZSBHUFVfQ01ECQkJCTB4MzAKKyNkZWZp bmUgICBHUFVfQ01EX1NPRlRfUkVTRVQJCTB4MDEKKyNkZWZpbmUgR1BVX1NUQVRVUwkJCTB4MzQK KyNkZWZpbmUgR1BVX0xBVEVTVF9GTFVTSF9JRAkJMHgzOAorCisKKyNkZWZpbmUgR1BVX1RIUkVB RF9NQVhfVEhSRUFEUwkJMHgwQTAJLyogKFJPKSBNYXhpbXVtIG51bWJlciBvZiB0aHJlYWRzIHBl ciBjb3JlICovCisjZGVmaW5lIEdQVV9USFJFQURfTUFYX1dPUktHUk9VUF9TSVpFCTB4MEE0CS8q IChSTykgTWF4aW11bSB3b3JrZ3JvdXAgc2l6ZSAqLworI2RlZmluZSBHUFVfVEhSRUFEX01BWF9C QVJSSUVSX1NJWkUJMHgwQTgJLyogKFJPKSBNYXhpbXVtIHRocmVhZHMgd2FpdGluZyBhdCBhIGJh cnJpZXIgKi8KKyNkZWZpbmUgR1BVX1RIUkVBRF9GRUFUVVJFUwkJMHgwQUMJLyogKFJPKSBUaHJl YWQgZmVhdHVyZXMgKi8KKyNkZWZpbmUgR1BVX1RIUkVBRF9UTFNfQUxMT0MJCTB4MzEwICAgLyog KFJPKSBOdW1iZXIgb2YgdGhyZWFkcyBwZXIgY29yZSB0aGF0CisJCQkJCQkgKiBUTFMgbXVzdCBi ZSBhbGxvY2F0ZWQgZm9yICovCisKKyNkZWZpbmUgR1BVX1RFWFRVUkVfRkVBVFVSRVMobikJCSgw eDBCMCArICgobikgKiA0KSkKKyNkZWZpbmUgR1BVX0pTX0ZFQVRVUkVTKG4pCQkoMHgwQzAgKyAo KG4pICogNCkpCisKKyNkZWZpbmUgR1BVX1NIQURFUl9QUkVTRU5UX0xPCQkweDEwMAkvKiAoUk8p IFNoYWRlciBjb3JlIHByZXNlbnQgYml0bWFwLCBsb3cgd29yZCAqLworI2RlZmluZSBHUFVfU0hB REVSX1BSRVNFTlRfSEkJCTB4MTA0CS8qIChSTykgU2hhZGVyIGNvcmUgcHJlc2VudCBiaXRtYXAs IGhpZ2ggd29yZCAqLworI2RlZmluZSBHUFVfVElMRVJfUFJFU0VOVF9MTwkJMHgxMTAJLyogKFJP KSBUaWxlciBjb3JlIHByZXNlbnQgYml0bWFwLCBsb3cgd29yZCAqLworI2RlZmluZSBHUFVfVElM RVJfUFJFU0VOVF9ISQkJMHgxMTQJLyogKFJPKSBUaWxlciBjb3JlIHByZXNlbnQgYml0bWFwLCBo aWdoIHdvcmQgKi8KKworI2RlZmluZSBHUFVfTDJfUFJFU0VOVF9MTwkJMHgxMjAJLyogKFJPKSBM ZXZlbCAyIGNhY2hlIHByZXNlbnQgYml0bWFwLCBsb3cgd29yZCAqLworI2RlZmluZSBHUFVfTDJf UFJFU0VOVF9ISQkJMHgxMjQJLyogKFJPKSBMZXZlbCAyIGNhY2hlIHByZXNlbnQgYml0bWFwLCBo aWdoIHdvcmQgKi8KKworI2RlZmluZSBHUFVfQ09IRVJFTkNZX0ZFQVRVUkVTCQkweDMwMAkvKiAo Uk8pIENvaGVyZW5jeSBmZWF0dXJlcyBwcmVzZW50ICovCisKKyNkZWZpbmUgR1BVX1NUQUNLX1BS RVNFTlRfTE8JCTB4RTAwICAgLyogKFJPKSBDb3JlIHN0YWNrIHByZXNlbnQgYml0bWFwLCBsb3cg d29yZCAqLworI2RlZmluZSBHUFVfU1RBQ0tfUFJFU0VOVF9ISQkJMHhFMDQgICAvKiAoUk8pIENv cmUgc3RhY2sgcHJlc2VudCBiaXRtYXAsIGhpZ2ggd29yZCAqLworCisjZGVmaW5lIFNIQURFUl9S RUFEWV9MTyAgICAgICAgIDB4MTQwCS8qIChSTykgU2hhZGVyIGNvcmUgcmVhZHkgYml0bWFwLCBs b3cgd29yZCAqLworI2RlZmluZSBTSEFERVJfUkVBRFlfSEkgICAgICAgICAweDE0NAkvKiAoUk8p IFNoYWRlciBjb3JlIHJlYWR5IGJpdG1hcCwgaGlnaCB3b3JkICovCisKKyNkZWZpbmUgVElMRVJf UkVBRFlfTE8gICAgICAgICAgMHgxNTAJLyogKFJPKSBUaWxlciBjb3JlIHJlYWR5IGJpdG1hcCwg bG93IHdvcmQgKi8KKyNkZWZpbmUgVElMRVJfUkVBRFlfSEkgICAgICAgICAgMHgxNTQJLyogKFJP KSBUaWxlciBjb3JlIHJlYWR5IGJpdG1hcCwgaGlnaCB3b3JkICovCisKKyNkZWZpbmUgTDJfUkVB RFlfTE8gICAgICAgICAgICAgMHgxNjAJLyogKFJPKSBMZXZlbCAyIGNhY2hlIHJlYWR5IGJpdG1h cCwgbG93IHdvcmQgKi8KKyNkZWZpbmUgTDJfUkVBRFlfSEkgICAgICAgICAgICAgMHgxNjQJLyog KFJPKSBMZXZlbCAyIGNhY2hlIHJlYWR5IGJpdG1hcCwgaGlnaCB3b3JkICovCisKKyNkZWZpbmUg U1RBQ0tfUkVBRFlfTE8gICAgICAgICAgMHhFMTAgICAvKiAoUk8pIENvcmUgc3RhY2sgcmVhZHkg Yml0bWFwLCBsb3cgd29yZCAqLworI2RlZmluZSBTVEFDS19SRUFEWV9ISSAgICAgICAgICAweEUx NCAgIC8qIChSTykgQ29yZSBzdGFjayByZWFkeSBiaXRtYXAsIGhpZ2ggd29yZCAqLworCisKKyNk ZWZpbmUgU0hBREVSX1BXUk9OX0xPICAgICAgICAgMHgxODAJLyogKFdPKSBTaGFkZXIgY29yZSBw b3dlciBvbiBiaXRtYXAsIGxvdyB3b3JkICovCisjZGVmaW5lIFNIQURFUl9QV1JPTl9ISSAgICAg ICAgIDB4MTg0CS8qIChXTykgU2hhZGVyIGNvcmUgcG93ZXIgb24gYml0bWFwLCBoaWdoIHdvcmQg Ki8KKworI2RlZmluZSBUSUxFUl9QV1JPTl9MTyAgICAgICAgICAweDE5MAkvKiAoV08pIFRpbGVy IGNvcmUgcG93ZXIgb24gYml0bWFwLCBsb3cgd29yZCAqLworI2RlZmluZSBUSUxFUl9QV1JPTl9I SSAgICAgICAgICAweDE5NAkvKiAoV08pIFRpbGVyIGNvcmUgcG93ZXIgb24gYml0bWFwLCBoaWdo IHdvcmQgKi8KKworI2RlZmluZSBMMl9QV1JPTl9MTyAgICAgICAgICAgICAweDFBMAkvKiAoV08p IExldmVsIDIgY2FjaGUgcG93ZXIgb24gYml0bWFwLCBsb3cgd29yZCAqLworI2RlZmluZSBMMl9Q V1JPTl9ISSAgICAgICAgICAgICAweDFBNAkvKiAoV08pIExldmVsIDIgY2FjaGUgcG93ZXIgb24g Yml0bWFwLCBoaWdoIHdvcmQgKi8KKworI2RlZmluZSBTVEFDS19QV1JPTl9MTyAgICAgICAgICAw eEUyMCAgIC8qIChSTykgQ29yZSBzdGFjayBwb3dlciBvbiBiaXRtYXAsIGxvdyB3b3JkICovCisj ZGVmaW5lIFNUQUNLX1BXUk9OX0hJICAgICAgICAgIDB4RTI0ICAgLyogKFJPKSBDb3JlIHN0YWNr IHBvd2VyIG9uIGJpdG1hcCwgaGlnaCB3b3JkICovCisKKworI2RlZmluZSBTSEFERVJfUFdST0ZG X0xPICAgICAgICAweDFDMAkvKiAoV08pIFNoYWRlciBjb3JlIHBvd2VyIG9mZiBiaXRtYXAsIGxv dyB3b3JkICovCisjZGVmaW5lIFNIQURFUl9QV1JPRkZfSEkgICAgICAgIDB4MUM0CS8qIChXTykg U2hhZGVyIGNvcmUgcG93ZXIgb2ZmIGJpdG1hcCwgaGlnaCB3b3JkICovCisKKyNkZWZpbmUgVElM RVJfUFdST0ZGX0xPICAgICAgICAgMHgxRDAJLyogKFdPKSBUaWxlciBjb3JlIHBvd2VyIG9mZiBi aXRtYXAsIGxvdyB3b3JkICovCisjZGVmaW5lIFRJTEVSX1BXUk9GRl9ISSAgICAgICAgIDB4MUQ0 CS8qIChXTykgVGlsZXIgY29yZSBwb3dlciBvZmYgYml0bWFwLCBoaWdoIHdvcmQgKi8KKworI2Rl ZmluZSBMMl9QV1JPRkZfTE8gICAgICAgICAgICAweDFFMAkvKiAoV08pIExldmVsIDIgY2FjaGUg cG93ZXIgb2ZmIGJpdG1hcCwgbG93IHdvcmQgKi8KKyNkZWZpbmUgTDJfUFdST0ZGX0hJICAgICAg ICAgICAgMHgxRTQJLyogKFdPKSBMZXZlbCAyIGNhY2hlIHBvd2VyIG9mZiBiaXRtYXAsIGhpZ2gg d29yZCAqLworCisjZGVmaW5lIFNUQUNLX1BXUk9GRl9MTyAgICAgICAgIDB4RTMwICAgLyogKFJP KSBDb3JlIHN0YWNrIHBvd2VyIG9mZiBiaXRtYXAsIGxvdyB3b3JkICovCisjZGVmaW5lIFNUQUNL X1BXUk9GRl9ISSAgICAgICAgIDB4RTM0ICAgLyogKFJPKSBDb3JlIHN0YWNrIHBvd2VyIG9mZiBi aXRtYXAsIGhpZ2ggd29yZCAqLworCisKKyNkZWZpbmUgU0hBREVSX1BXUlRSQU5TX0xPICAgICAg MHgyMDAJLyogKFJPKSBTaGFkZXIgY29yZSBwb3dlciB0cmFuc2l0aW9uIGJpdG1hcCwgbG93IHdv cmQgKi8KKyNkZWZpbmUgU0hBREVSX1BXUlRSQU5TX0hJICAgICAgMHgyMDQJLyogKFJPKSBTaGFk ZXIgY29yZSBwb3dlciB0cmFuc2l0aW9uIGJpdG1hcCwgaGlnaCB3b3JkICovCisKKyNkZWZpbmUg VElMRVJfUFdSVFJBTlNfTE8gICAgICAgMHgyMTAJLyogKFJPKSBUaWxlciBjb3JlIHBvd2VyIHRy YW5zaXRpb24gYml0bWFwLCBsb3cgd29yZCAqLworI2RlZmluZSBUSUxFUl9QV1JUUkFOU19ISSAg ICAgICAweDIxNAkvKiAoUk8pIFRpbGVyIGNvcmUgcG93ZXIgdHJhbnNpdGlvbiBiaXRtYXAsIGhp Z2ggd29yZCAqLworCisjZGVmaW5lIEwyX1BXUlRSQU5TX0xPICAgICAgICAgIDB4MjIwCS8qIChS TykgTGV2ZWwgMiBjYWNoZSBwb3dlciB0cmFuc2l0aW9uIGJpdG1hcCwgbG93IHdvcmQgKi8KKyNk ZWZpbmUgTDJfUFdSVFJBTlNfSEkgICAgICAgICAgMHgyMjQJLyogKFJPKSBMZXZlbCAyIGNhY2hl IHBvd2VyIHRyYW5zaXRpb24gYml0bWFwLCBoaWdoIHdvcmQgKi8KKworI2RlZmluZSBTVEFDS19Q V1JUUkFOU19MTyAgICAgICAweEU0MCAgIC8qIChSTykgQ29yZSBzdGFjayBwb3dlciB0cmFuc2l0 aW9uIGJpdG1hcCwgbG93IHdvcmQgKi8KKyNkZWZpbmUgU1RBQ0tfUFdSVFJBTlNfSEkgICAgICAg MHhFNDQgICAvKiAoUk8pIENvcmUgc3RhY2sgcG93ZXIgdHJhbnNpdGlvbiBiaXRtYXAsIGhpZ2gg d29yZCAqLworCisKKyNkZWZpbmUgU0hBREVSX1BXUkFDVElWRV9MTyAgICAgMHgyNDAJLyogKFJP KSBTaGFkZXIgY29yZSBhY3RpdmUgYml0bWFwLCBsb3cgd29yZCAqLworI2RlZmluZSBTSEFERVJf UFdSQUNUSVZFX0hJICAgICAweDI0NAkvKiAoUk8pIFNoYWRlciBjb3JlIGFjdGl2ZSBiaXRtYXAs IGhpZ2ggd29yZCAqLworCisjZGVmaW5lIFRJTEVSX1BXUkFDVElWRV9MTyAgICAgIDB4MjUwCS8q IChSTykgVGlsZXIgY29yZSBhY3RpdmUgYml0bWFwLCBsb3cgd29yZCAqLworI2RlZmluZSBUSUxF Ul9QV1JBQ1RJVkVfSEkgICAgICAweDI1NAkvKiAoUk8pIFRpbGVyIGNvcmUgYWN0aXZlIGJpdG1h cCwgaGlnaCB3b3JkICovCisKKyNkZWZpbmUgTDJfUFdSQUNUSVZFX0xPICAgICAgICAgMHgyNjAJ LyogKFJPKSBMZXZlbCAyIGNhY2hlIGFjdGl2ZSBiaXRtYXAsIGxvdyB3b3JkICovCisjZGVmaW5l IEwyX1BXUkFDVElWRV9ISSAgICAgICAgIDB4MjY0CS8qIChSTykgTGV2ZWwgMiBjYWNoZSBhY3Rp dmUgYml0bWFwLCBoaWdoIHdvcmQgKi8KKworI2RlZmluZSBHUFVfSk1fQ09ORklHCQkweEYwMCAg IC8qIChSVykgSm9iIE1hbmFnZXIgY29uZmlndXJhdGlvbiByZWdpc3RlciAoSW1wbGVtZW50YXRp b24gc3BlY2lmaWMgcmVnaXN0ZXIpICovCisjZGVmaW5lIEdQVV9TSEFERVJfQ09ORklHCTB4RjA0 CS8qIChSVykgU2hhZGVyIGNvcmUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyAoSW1wbGVtZW50YXRp b24gc3BlY2lmaWMgcmVnaXN0ZXIpICovCisjZGVmaW5lIEdQVV9USUxFUl9DT05GSUcJMHhGMDgg ICAvKiAoUlcpIFRpbGVyIGNvcmUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyAoSW1wbGVtZW50YXRp b24gc3BlY2lmaWMgcmVnaXN0ZXIpICovCisjZGVmaW5lIEdQVV9MMl9NTVVfQ09ORklHCTB4RjBD CS8qIChSVykgQ29uZmlndXJhdGlvbiBvZiB0aGUgTDIgY2FjaGUgYW5kIE1NVSAoSW1wbGVtZW50 YXRpb24gc3BlY2lmaWMgcmVnaXN0ZXIpICovCisKKy8qIEwyX01NVV9DT05GSUcgcmVnaXN0ZXIg Ki8KKyNkZWZpbmUgTDJfTU1VX0NPTkZJR19BTExPV19TTk9PUF9ESVNQQVJJVFlfU0hJRlQgICAg ICAgKDIzKQorI2RlZmluZSBMMl9NTVVfQ09ORklHX0FMTE9XX1NOT09QX0RJU1BBUklUWSAgICAg ICAgICAgICAoMHgxIDw8IEwyX01NVV9DT05GSUdfQUxMT1dfU05PT1BfRElTUEFSSVRZX1NISUZU KQorI2RlZmluZSBMMl9NTVVfQ09ORklHX0xJTUlUX0VYVEVSTkFMX1JFQURTX1NISUZUICAgICAg ICAoMjQpCisjZGVmaW5lIEwyX01NVV9DT05GSUdfTElNSVRfRVhURVJOQUxfUkVBRFMgICAgICAg ICAgICAgICgweDMgPDwgTDJfTU1VX0NPTkZJR19MSU1JVF9FWFRFUk5BTF9SRUFEU19TSElGVCkK KyNkZWZpbmUgTDJfTU1VX0NPTkZJR19MSU1JVF9FWFRFUk5BTF9SRUFEU19PQ1RBTlQgICAgICAg KDB4MSA8PCBMMl9NTVVfQ09ORklHX0xJTUlUX0VYVEVSTkFMX1JFQURTX1NISUZUKQorI2RlZmlu ZSBMMl9NTVVfQ09ORklHX0xJTUlUX0VYVEVSTkFMX1JFQURTX1FVQVJURVIgICAgICAoMHgyIDw8 IEwyX01NVV9DT05GSUdfTElNSVRfRVhURVJOQUxfUkVBRFNfU0hJRlQpCisjZGVmaW5lIEwyX01N VV9DT05GSUdfTElNSVRfRVhURVJOQUxfUkVBRFNfSEFMRiAgICAgICAgICgweDMgPDwgTDJfTU1V X0NPTkZJR19MSU1JVF9FWFRFUk5BTF9SRUFEU19TSElGVCkKKworI2RlZmluZSBMMl9NTVVfQ09O RklHX0xJTUlUX0VYVEVSTkFMX1dSSVRFU19TSElGVCAgICAgICAoMjYpCisjZGVmaW5lIEwyX01N VV9DT05GSUdfTElNSVRfRVhURVJOQUxfV1JJVEVTICAgICAgICAgICAgICgweDMgPDwgTDJfTU1V X0NPTkZJR19MSU1JVF9FWFRFUk5BTF9XUklURVNfU0hJRlQpCisjZGVmaW5lIEwyX01NVV9DT05G SUdfTElNSVRfRVhURVJOQUxfV1JJVEVTX09DVEFOVCAgICAgICgweDEgPDwgTDJfTU1VX0NPTkZJ R19MSU1JVF9FWFRFUk5BTF9XUklURVNfU0hJRlQpCisjZGVmaW5lIEwyX01NVV9DT05GSUdfTElN SVRfRVhURVJOQUxfV1JJVEVTX1FVQVJURVIgICAgICgweDIgPDwgTDJfTU1VX0NPTkZJR19MSU1J VF9FWFRFUk5BTF9XUklURVNfU0hJRlQpCisjZGVmaW5lIEwyX01NVV9DT05GSUdfTElNSVRfRVhU RVJOQUxfV1JJVEVTX0hBTEYgICAgICAgICgweDMgPDwgTDJfTU1VX0NPTkZJR19MSU1JVF9FWFRF Uk5BTF9XUklURVNfU0hJRlQpCisKKyNkZWZpbmUgTDJfTU1VX0NPTkZJR18zQklUX0xJTUlUX0VY VEVSTkFMX1JFQURTX1NISUZUICAgICAgKDEyKQorI2RlZmluZSBMMl9NTVVfQ09ORklHXzNCSVRf TElNSVRfRVhURVJOQUxfUkVBRFMgICAgICAgICAgICAoMHg3IDw8IEwyX01NVV9DT05GSUdfTElN SVRfRVhURVJOQUxfUkVBRFNfU0hJRlQpCisKKyNkZWZpbmUgTDJfTU1VX0NPTkZJR18zQklUX0xJ TUlUX0VYVEVSTkFMX1dSSVRFU19TSElGVCAgICAgKDE1KQorI2RlZmluZSBMMl9NTVVfQ09ORklH XzNCSVRfTElNSVRfRVhURVJOQUxfV1JJVEVTICAgICAgICAgICAoMHg3IDw8IEwyX01NVV9DT05G SUdfTElNSVRfRVhURVJOQUxfV1JJVEVTX1NISUZUKQorCisvKiBTSEFERVJfQ09ORklHIHJlZ2lz dGVyICovCisKKyNkZWZpbmUgU0NfQUxUX0NPVU5URVJTICAgICAgICAgICAgICgxdWwgPDwgMykK KyNkZWZpbmUgU0NfT1ZFUlJJREVfRldEX1BJWEVMX0tJTEwgICgxdWwgPDwgNCkKKyNkZWZpbmUg U0NfU0RDX0RJU0FCTEVfT1FfRElTQ0FSRCAgICgxdWwgPDwgNikKKyNkZWZpbmUgU0NfTFNfQUxM T1dfQVRUUl9UWVBFUyAgICAgICgxdWwgPDwgMTYpCisjZGVmaW5lIFNDX0xTX1BBVVNFQlVGRkVS X0RJU0FCTEUgICAoMXVsIDw8IDE2KQorI2RlZmluZSBTQ19UTFNfSEFTSF9FTkFCTEUgICAgICAg ICAgKDF1bCA8PCAxNykKKyNkZWZpbmUgU0NfTFNfQVRUUl9DSEVDS19ESVNBQkxFICAgICgxdWwg PDwgMTgpCisjZGVmaW5lIFNDX0VOQUJMRV9URVhHUkRfRkxBR1MgICAgICAoMXVsIDw8IDI1KQor LyogRW5kIFNIQURFUl9DT05GSUcgcmVnaXN0ZXIgKi8KKworLyogVElMRVJfQ09ORklHIHJlZ2lz dGVyICovCisKKyNkZWZpbmUgVENfQ0xPQ0tfR0FURV9PVkVSUklERSAgICAgICgxdWwgPDwgMCkK KworLyogSk1fQ09ORklHIHJlZ2lzdGVyICovCisKKyNkZWZpbmUgSk1fVElNRVNUQU1QX09WRVJS SURFICAoMXVsIDw8IDApCisjZGVmaW5lIEpNX0NMT0NLX0dBVEVfT1ZFUlJJREUgKDF1bCA8PCAx KQorI2RlZmluZSBKTV9KT0JfVEhST1RUTEVfRU5BQkxFICgxdWwgPDwgMikKKyNkZWZpbmUgSk1f Sk9CX1RIUk9UVExFX0xJTUlUX1NISUZUICgzKQorI2RlZmluZSBKTV9NQVhfSk9CX1RIUk9UVExF X0xJTUlUICgweDNGKQorI2RlZmluZSBKTV9GT1JDRV9DT0hFUkVOQ1lfRkVBVFVSRVNfU0hJRlQg KDIpCisjZGVmaW5lIEpNX0lEVlNfR1JPVVBfU0laRV9TSElGVCAoMTYpCisjZGVmaW5lIEpNX01B WF9JRFZTX0dST1VQX1NJWkUgKDB4M0YpCisKKworI2RlZmluZSBncHVfd3JpdGUoZGV2LCByZWcs IGRhdGEpIHdyaXRlbChkYXRhLCBkZXYtPmlvbWVtICsgcmVnKQorI2RlZmluZSBncHVfcmVhZChk ZXYsIHJlZykgcmVhZGwoZGV2LT5pb21lbSArIHJlZykKKworc3RhdGljIGlycXJldHVybl90IHBh bmZyb3N0X2dwdV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBw YW5mcm9zdF9kZXZpY2UgKnBmZGV2ID0gZGF0YTsKKwl1MzIgc3RhdGUgPSBncHVfcmVhZChwZmRl diwgR1BVX0lOVF9TVEFUKTsKKwl1MzIgc3RhdHVzID0gZ3B1X3JlYWQocGZkZXYsIEdQVV9TVEFU VVMpOworCWJvb2wgZG9uZSA9IGZhbHNlOworCisJaWYgKCFzdGF0ZSkKKwkJcmV0dXJuIElSUV9O T05FOworCisJaWYgKHN0YXRlICYgR1BVX0lSUV9NQVNLX0VSUk9SKSB7CisJCWRldl9lcnIocGZk ZXYtPmRldiwgImdwdSBlcnJvciBpcnEgc3RhdGU9JXggc3RhdHVzPSV4XG4iLAorCQkJc3RhdGUs IHN0YXR1cyk7CisKKwkJZ3B1X3dyaXRlKHBmZGV2LCBHUFVfSU5UX01BU0ssIDApOworCisJCWRv bmUgPSB0cnVlOworCX0KKworCWdwdV93cml0ZShwZmRldiwgR1BVX0lOVF9DTEVBUiwgc3RhdGUp OworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBwYW5mcm9zdF9ncHVf c29mdF9yZXNldF9hc3luYyhzdHJ1Y3QgcGFuZnJvc3RfZGV2aWNlICpwZmRldikKK3sKKwlncHVf d3JpdGUocGZkZXYsIEdQVV9JTlRfTUFTSywgMCk7CisJZ3B1X3dyaXRlKHBmZGV2LCBHUFVfSU5U X0NMRUFSLCBHUFVfSVJRX1JFU0VUX0NPTVBMRVRFRCk7CisJZ3B1X3dyaXRlKHBmZGV2LCBHUFVf Q01ELCBHUFVfQ01EX1NPRlRfUkVTRVQpOworfQorCitzdGF0aWMgaW50IHBhbmZyb3N0X2dwdV9z b2Z0X3Jlc2V0X2FzeW5jX3dhaXQoc3RydWN0IHBhbmZyb3N0X2RldmljZSAqcGZkZXYpCit7CisJ aW50IHRpbWVvdXQ7CisKKwlmb3IgKHRpbWVvdXQgPSA1MDA7IHRpbWVvdXQgPiAwOyB0aW1lb3V0 LS0pIHsKKwkJaWYgKGdwdV9yZWFkKHBmZGV2LCBHUFVfSU5UX1JBV1NUQVQpICYgR1BVX0lSUV9S RVNFVF9DT01QTEVURUQpCisJCQlicmVhazsKKwl9CisKKwlpZiAoIXRpbWVvdXQpIHsKKwkJZGV2 X2VycihwZmRldi0+ZGV2LCAiZ3B1IHNvZnQgcmVzZXQgdGltZWQgb3V0XG4iKTsKKwkJcmV0dXJu IC1FVElNRURPVVQ7CisJfQorCisJZ3B1X3dyaXRlKHBmZGV2LCBHUFVfSU5UX0NMRUFSLCBHUFVf SVJRX01BU0tfQUxMKTsKKwlncHVfd3JpdGUocGZkZXYsIEdQVV9JTlRfTUFTSywgR1BVX0lSUV9N QVNLX0FMTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGFuZnJvc3RfZ3B1X2lu aXRfcXVpcmtzKHN0cnVjdCBwYW5mcm9zdF9kZXZpY2UgKnBmZGV2KQoreworCXUzMiBzYyA9IDAs IHRpbGVyID0gMCwgam0gPSAwLCBtbXUgPSAwOworCisJbW11ID0gZ3B1X3JlYWQocGZkZXYsIEdQ VV9MMl9NTVVfQ09ORklHKTsKKworCS8vIE5lZWQgbW9yZSB2ZXJzaW9uIGRldGVjdGlvbgorCWlm IChwZmRldi0+ZmVhdHVyZXMuaWQgPT0gMHgwODYwKSB7CisJCXNjID0gU0NfTFNfQUxMT1dfQVRU Ul9UWVBFUzsKKwkJdGlsZXIgPSBUQ19DTE9DS19HQVRFX09WRVJSSURFOworCQlqbSA9IEpNX01B WF9KT0JfVEhST1RUTEVfTElNSVQgPDwgSk1fSk9CX1RIUk9UVExFX0xJTUlUX1NISUZUOworCQlt bXUgJj0gfihMMl9NTVVfQ09ORklHX0xJTUlUX0VYVEVSTkFMX1JFQURTIHwgTDJfTU1VX0NPTkZJ R19MSU1JVF9FWFRFUk5BTF9XUklURVMpOworCX0KKworCWdwdV93cml0ZShwZmRldiwgR1BVX1NI QURFUl9DT05GSUcsIHNjKTsKKwlncHVfd3JpdGUocGZkZXYsIEdQVV9USUxFUl9DT05GSUcsIHRp bGVyKTsKKwlncHVfd3JpdGUocGZkZXYsIEdQVV9MMl9NTVVfQ09ORklHLCBtbXUpOworCWdwdV93 cml0ZShwZmRldiwgR1BVX0pNX0NPTkZJRywgam0pOworfQorCisjZGVmaW5lIE1BWF9IV19SRVZT IDYKKworc3RydWN0IHBhbmZyb3N0X21vZGVsIHsKKwljb25zdCBjaGFyICpuYW1lOworCXUzMiBp ZDsKKwl1MzIgaWRfbWFzazsKKwl1NjQgZmVhdHVyZXM7CisJdTY0IGlzc3VlczsKKwlzdHJ1Y3Qg eworCQl1MzIgcmV2aXNpb247CisJCXU2NCBpc3N1ZXM7CisJfSByZXZzW01BWF9IV19SRVZTXTsK K307CisKKyNkZWZpbmUgR1BVX01PREVMKF9uYW1lLCBfaWQsIF9tYXNrLCAuLi4pIFwKK3tcCisJ Lm5hbWUgPSBfX3N0cmluZ2lmeShfbmFtZSksCQkJCVwKKwkuaWQgPSBfaWQsCQkJCQkJXAorCS5p ZF9tYXNrID0gX21hc2ssCQkJCQlcCisJLmZlYXR1cmVzID0gaHdfZmVhdHVyZXNfIyNfbmFtZSwJ CQlcCisJLmlzc3VlcyA9IGh3X2lzc3Vlc18jI19uYW1lLAkJCVwKKwkucmV2cyA9IHsgX19WQV9B UkdTX18gfSwJCQkJXAorfQorI2RlZmluZSBHUFVfTU9ERUxfTUlER0FSRChuYW1lLCBpZCwgLi4u KSBHUFVfTU9ERUwobmFtZSwgaWQsIDB4ZmZmLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgR1BVX01P REVMX0JJRlJPU1QobmFtZSwgaWQsIC4uLikgR1BVX01PREVMKG5hbWUsIGlkLCAweGYwMGYsIF9f VkFfQVJHU19fKQorCisjZGVmaW5lIEdQVV9SRVZfRVhUKG5hbWUsIF9yZXYsIF9wLCBfcywgc3Rh dCkgXAore1wKKwkucmV2aXNpb24gPSAoX3JldikgPDwgMTIgfCAoX3ApIDw8IDQgfCAoX3MpLAkJ XAorCS5pc3N1ZXMgPSBod19pc3N1ZXNfIyNuYW1lIyNfciMjX3JldiMjcCMjX3AjI3N0YXQsCVwK K30KKyNkZWZpbmUgR1BVX1JFVihuYW1lLCByLCBwKSBHUFVfUkVWX0VYVChuYW1lLCByLCBwLCAw LCApCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGFuZnJvc3RfbW9kZWwgZ3B1X21vZGVsc1tdID0g eworCS8qIFQ2MHggaGFzIGFuIG9kZGJhbGwgdmVyc2lvbiAqLworCUdQVV9NT0RFTCh0NjAwLCAw eDY5NTYsIDB4ZmZmZiwKKwkJR1BVX1JFVl9FWFQodDYwMCwgMCwgMCwgMSwgXzE1ZGV2MCkpLAor CUdQVV9NT0RFTF9NSURHQVJEKHQ2MjAsIDB4NjIwLAorCQlHUFVfUkVWKHQ2MjAsIDAsIDEpLCBH UFVfUkVWKHQ2MjAsIDEsIDApKSwKKwlHUFVfTU9ERUxfTUlER0FSRCh0NzIwLCAweDcyMCksCisJ R1BVX01PREVMX01JREdBUkQodDc2MCwgMHg3NTAsCisJCUdQVV9SRVYodDc2MCwgMCwgMCksIEdQ VV9SRVYodDc2MCwgMCwgMSksCisJCUdQVV9SRVZfRVhUKHQ3NjAsIDAsIDEsIDAsIF81MHJlbDAp LAorCQlHUFVfUkVWKHQ3NjAsIDAsIDIpLCBHUFVfUkVWKHQ3NjAsIDAsIDMpKSwKKwlHUFVfTU9E RUxfTUlER0FSRCh0ODIwLCAweDgyMCksCisJR1BVX01PREVMX01JREdBUkQodDgzMCwgMHg4MzAp LAorCUdQVV9NT0RFTF9NSURHQVJEKHQ4NjAsIDB4ODYwKSwKKwlHUFVfTU9ERUxfTUlER0FSRCh0 ODgwLCAweDg4MCksCisKKwlHUFVfTU9ERUxfQklGUk9TVChnNzEsIDB4NjAwMCwKKwkJR1BVX1JF Vl9FWFQoZzcxLCAwLCAwLCAxLCBfMDVkZXYwKSksCisJR1BVX01PREVMX0JJRlJPU1QoZzcyLCAw eDYwMDEpLAorCUdQVV9NT0RFTF9CSUZST1NUKGc1MSwgMHg3MDAwKSwKKwlHUFVfTU9ERUxfQklG Uk9TVChnNzYsIDB4NzAwMSksCisJR1BVX01PREVMX0JJRlJPU1QoZzUyLCAweDcwMDIpLAorCUdQ VV9NT0RFTF9CSUZST1NUKGczMSwgMHg3MDAzLAorCQlHUFVfUkVWKGczMSwgMSwgMCkpLAorfTsK Kworc3RhdGljIHZvaWQgcGFuZnJvc3RfZ3B1X2luaXRfZmVhdHVyZXMoc3RydWN0IHBhbmZyb3N0 X2RldmljZSAqcGZkZXYpCit7CisJdTMyIGdwdV9pZCwgbnVtX2pzLCBtYWpvciwgbWlub3IsIHN0 YXR1cywgcmV2OworCWNvbnN0IGNoYXIgKm5hbWUgPSAidW5rbm93biI7CisJdTY0IGh3X2ZlYXQg PSAwOworCXU2NCBod19pc3N1ZXMgPSBod19pc3N1ZXNfYWxsOworCWNvbnN0IHN0cnVjdCBwYW5m cm9zdF9tb2RlbCAqbW9kZWw7CisJaW50IGk7CisKKwlwZmRldi0+ZmVhdHVyZXMubDJfZmVhdHVy ZXMgPSBncHVfcmVhZChwZmRldiwgR1BVX0wyX0ZFQVRVUkVTKTsKKwlwZmRldi0+ZmVhdHVyZXMu Y29yZV9mZWF0dXJlcyA9IGdwdV9yZWFkKHBmZGV2LCBHUFVfQ09SRV9GRUFUVVJFUyk7CisJcGZk ZXYtPmZlYXR1cmVzLnRpbGVyX2ZlYXR1cmVzID0gZ3B1X3JlYWQocGZkZXYsIEdQVV9USUxFUl9G RUFUVVJFUyk7CisJcGZkZXYtPmZlYXR1cmVzLm1lbV9mZWF0dXJlcyA9IGdwdV9yZWFkKHBmZGV2 LCBHUFVfTUVNX0ZFQVRVUkVTKTsKKwlwZmRldi0+ZmVhdHVyZXMubW11X2ZlYXR1cmVzID0gZ3B1 X3JlYWQocGZkZXYsIEdQVV9NTVVfRkVBVFVSRVMpOworCXBmZGV2LT5mZWF0dXJlcy50aHJlYWRf ZmVhdHVyZXMgPSBncHVfcmVhZChwZmRldiwgR1BVX1RIUkVBRF9GRUFUVVJFUyk7CisJcGZkZXYt PmZlYXR1cmVzLmNvaGVyZW5jeV9mZWF0dXJlcyA9IGdwdV9yZWFkKHBmZGV2LCBHUFVfQ09IRVJF TkNZX0ZFQVRVUkVTKTsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQlwZmRldi0+ZmVhdHVy ZXMudGV4dHVyZV9mZWF0dXJlc1tpXSA9IGdwdV9yZWFkKHBmZGV2LCBHUFVfVEVYVFVSRV9GRUFU VVJFUyhpKSk7CisKKwlwZmRldi0+ZmVhdHVyZXMuYXNfcHJlc2VudCA9IGdwdV9yZWFkKHBmZGV2 LCBHUFVfQVNfUFJFU0VOVCk7CisKKwlwZmRldi0+ZmVhdHVyZXMuanNfcHJlc2VudCA9IGdwdV9y ZWFkKHBmZGV2LCBHUFVfSlNfUFJFU0VOVCk7CisJbnVtX2pzID0gaHdlaWdodDMyKHBmZGV2LT5m ZWF0dXJlcy5qc19wcmVzZW50KTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2pzOyBpKyspCisJCXBm ZGV2LT5mZWF0dXJlcy5qc19mZWF0dXJlc1tpXSA9IGdwdV9yZWFkKHBmZGV2LCBHUFVfSlNfRkVB VFVSRVMoaSkpOworCisJcGZkZXYtPmZlYXR1cmVzLnNoYWRlcl9wcmVzZW50ID0gZ3B1X3JlYWQo cGZkZXYsIEdQVV9TSEFERVJfUFJFU0VOVF9MTyk7CisJcGZkZXYtPmZlYXR1cmVzLnNoYWRlcl9w cmVzZW50IHw9ICh1NjQpZ3B1X3JlYWQocGZkZXYsIEdQVV9TSEFERVJfUFJFU0VOVF9ISSkgPDwg MzI7CisKKwlwZmRldi0+ZmVhdHVyZXMudGlsZXJfcHJlc2VudCA9IGdwdV9yZWFkKHBmZGV2LCBH UFVfVElMRVJfUFJFU0VOVF9MTyk7CisJcGZkZXYtPmZlYXR1cmVzLnRpbGVyX3ByZXNlbnQgfD0g KHU2NClncHVfcmVhZChwZmRldiwgR1BVX1RJTEVSX1BSRVNFTlRfSEkpIDw8IDMyOworCisJcGZk ZXYtPmZlYXR1cmVzLmwyX3ByZXNlbnQgPSBncHVfcmVhZChwZmRldiwgR1BVX0wyX1BSRVNFTlRf TE8pOworCXBmZGV2LT5mZWF0dXJlcy5sMl9wcmVzZW50IHw9ICh1NjQpZ3B1X3JlYWQocGZkZXYs IEdQVV9MMl9QUkVTRU5UX0hJKSA8PCAzMjsKKworCXBmZGV2LT5mZWF0dXJlcy5zdGFja19wcmVz ZW50ID0gZ3B1X3JlYWQocGZkZXYsIEdQVV9TVEFDS19QUkVTRU5UX0xPKTsKKwlwZmRldi0+ZmVh dHVyZXMuc3RhY2tfcHJlc2VudCB8PSAodTY0KWdwdV9yZWFkKHBmZGV2LCBHUFVfU1RBQ0tfUFJF U0VOVF9ISSkgPDwgMzI7CisKKwlncHVfaWQgPSBncHVfcmVhZChwZmRldiwgR1BVX0lEKTsKKwlw ZmRldi0+ZmVhdHVyZXMuaWQgPSBncHVfaWQgPj4gMTY7CisJcGZkZXYtPmZlYXR1cmVzLnJldmlz aW9uID0gZ3B1X2lkICYgMHhmZmZmOworCisJbWFqb3IgPSAocGZkZXYtPmZlYXR1cmVzLnJldmlz aW9uID4+IDEyKSAmIDB4ZjsKKwltaW5vciA9IChwZmRldi0+ZmVhdHVyZXMucmV2aXNpb24gPj4g NCkgJiAweGZmOworCXN0YXR1cyA9IHBmZGV2LT5mZWF0dXJlcy5yZXZpc2lvbiAmIDB4ZjsKKwly ZXYgPSBwZmRldi0+ZmVhdHVyZXMucmV2aXNpb247CisKKwlncHVfaWQgPSBwZmRldi0+ZmVhdHVy ZXMuaWQ7CisKKwlmb3IgKG1vZGVsID0gZ3B1X21vZGVsczsgbW9kZWwtPm5hbWU7IG1vZGVsKysp IHsKKwkJaWYgKChncHVfaWQgJiBtb2RlbC0+aWRfbWFzaykgIT0gbW9kZWwtPmlkKQorCQkJY29u dGludWU7CisKKwkJbmFtZSA9IG1vZGVsLT5uYW1lOworCQlod19mZWF0ID0gbW9kZWwtPmZlYXR1 cmVzOworCQlod19pc3N1ZXMgfD0gbW9kZWwtPmlzc3VlczsKKwkJZm9yIChpID0gMDsgaSA8IE1B WF9IV19SRVZTOyBpKyspIHsKKwkJCWlmICgobW9kZWwtPnJldnNbaV0ucmV2aXNpb24gIT0gcmV2 KSAmJgorCQkJICAgIChtb2RlbC0+cmV2c1tpXS5yZXZpc2lvbiAhPSAocmV2ICYgfjB4ZikpKQor CQkJCWNvbnRpbnVlOworCQkJaHdfaXNzdWVzIHw9IG1vZGVsLT5yZXZzW2ldLmlzc3VlczsKKwkJ CWJyZWFrOworCQl9CisKKwkJYnJlYWs7CisJfQorCisJYml0bWFwX2Zyb21fdTY0KHBmZGV2LT5m ZWF0dXJlcy5iYXNlX2h3X2ZlYXR1cmVzLCBod19mZWF0KTsKKwliaXRtYXBfZnJvbV91NjQocGZk ZXYtPmZlYXR1cmVzLmh3X2lzc3VlcywgaHdfaXNzdWVzKTsKKworCWRldl9pbmZvKHBmZGV2LT5k ZXYsICJtYWxpLSVzIGlkIDB4JXggbWFqb3IgMHgleCBtaW5vciAweCV4IHN0YXR1cyAweCV4IiwK KwkJIG5hbWUsIGdwdV9pZCwgbWFqb3IsIG1pbm9yLCBzdGF0dXMpOworCWRldl9pbmZvKHBmZGV2 LT5kZXYsICJmZWF0dXJlczogJTY0cGIsIGlzc3VlczogJTY0cGIiLAorCQkgcGZkZXYtPmZlYXR1 cmVzLmJhc2VfaHdfZmVhdHVyZXMsCisJCSBwZmRldi0+ZmVhdHVyZXMuaHdfaXNzdWVzKTsKKwor CWRldl9pbmZvKHBmZGV2LT5kZXYsICJGZWF0dXJlczogTDI6MHglMDh4IFNoYWRlcjoweCUwOHgg VGlsZXI6MHglMDh4IE1lbToweCUweCBNTVU6MHglMDh4IEFTOjB4JXggSlM6MHgleCIsCisJCSBn cHVfcmVhZChwZmRldiwgR1BVX0wyX0ZFQVRVUkVTKSwKKwkJIGdwdV9yZWFkKHBmZGV2LCBHUFVf Q09SRV9GRUFUVVJFUyksCisJCSBncHVfcmVhZChwZmRldiwgR1BVX1RJTEVSX0ZFQVRVUkVTKSwK KwkJIGdwdV9yZWFkKHBmZGV2LCBHUFVfTUVNX0ZFQVRVUkVTKSwKKwkJIGdwdV9yZWFkKHBmZGV2 LCBHUFVfTU1VX0ZFQVRVUkVTKSwKKwkJIGdwdV9yZWFkKHBmZGV2LCBHUFVfQVNfUFJFU0VOVCks CisJCSBncHVfcmVhZChwZmRldiwgR1BVX0pTX1BSRVNFTlQpKTsKKworCWRldl9pbmZvKHBmZGV2 LT5kZXYsICJzaGFkZXJfcHJlc2VudD0weCUwbGx4IiwgcGZkZXYtPmZlYXR1cmVzLnNoYWRlcl9w cmVzZW50KTsKK30KKworaW50IHBhbmZyb3N0X2dwdV9pbml0KHN0cnVjdCBwYW5mcm9zdF9kZXZp Y2UgKnBmZGV2KQoreworCWludCBlcnIsIGlycTsKKworCXBhbmZyb3N0X2dwdV9pbml0X2ZlYXR1 cmVzKHBmZGV2KTsKKworCXBhbmZyb3N0X2dwdV9zb2Z0X3Jlc2V0X2FzeW5jKHBmZGV2KTsKKwll cnIgPSBwYW5mcm9zdF9ncHVfc29mdF9yZXNldF9hc3luY193YWl0KHBmZGV2KTsKKwlpZiAoZXJy KQorCQlyZXR1cm4gZXJyOworCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUodG9fcGxh dGZvcm1fZGV2aWNlKHBmZGV2LT5kZXYpLCAiZ3B1Iik7CisJaWYgKGlycSA8PSAwKQorCQlyZXR1 cm4gLUVOT0RFVjsKKworCWVyciA9IGRldm1fcmVxdWVzdF9pcnEocGZkZXYtPmRldiwgaXJxLCBw YW5mcm9zdF9ncHVfaXJxX2hhbmRsZXIsCisJCQkgICAgICAgSVJRRl9TSEFSRUQsICJncHUiLCBw ZmRldik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKHBmZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVx dWVzdCBncHUgaXJxIik7CisJCXJldHVybiBlcnI7CisJfQorCisJcGFuZnJvc3RfZ3B1X2luaXRf cXVpcmtzKHBmZGV2KTsKKworCWdwdV93cml0ZShwZmRldiwgU0hBREVSX1BXUk9OX0xPLCBwZmRl di0+ZmVhdHVyZXMuc2hhZGVyX3ByZXNlbnQpOworCWdwdV93cml0ZShwZmRldiwgVElMRVJfUFdS T05fTE8sIHBmZGV2LT5mZWF0dXJlcy50aWxlcl9wcmVzZW50KTsKKwlncHVfd3JpdGUocGZkZXYs IEwyX1BXUk9OX0xPLCBwZmRldi0+ZmVhdHVyZXMubDJfcHJlc2VudCk7CisJZ3B1X3dyaXRlKHBm ZGV2LCBTVEFDS19QV1JPTl9MTywgcGZkZXYtPmZlYXR1cmVzLnN0YWNrX3ByZXNlbnQpOworCW1z bGVlcCgxMCk7CisKKwlkZXZfaW5mbyhwZmRldi0+ZGV2LCAic2hhZGVyIHB3cj0leCIsIGdwdV9y ZWFkKHBmZGV2LCBTSEFERVJfUkVBRFlfTE8pKTsKKwlkZXZfaW5mbyhwZmRldi0+ZGV2LCAidGls ZXIgcHdyPSV4IiwgZ3B1X3JlYWQocGZkZXYsIFRJTEVSX1JFQURZX0xPKSk7CisKKwlyZXR1cm4g MDsKK30KKwordm9pZCBwYW5mcm9zdF9ncHVfZmluaShzdHJ1Y3QgcGFuZnJvc3RfZGV2aWNlICpw ZmRldikKK3sKKworfQorCit1MzIgcGFuZnJvc3RfZ3B1X2dldF9sYXRlc3RfZmx1c2hfaWQoc3Ry dWN0IHBhbmZyb3N0X2RldmljZSAqcGZkZXYpCit7CisJaWYgKHBhbmZyb3N0X2hhc19od19mZWF0 dXJlKHBmZGV2LCBIV19GRUFUVVJFX0ZMVVNIX1JFRFVDVElPTikpCisJCXJldHVybiBncHVfcmVh ZChwZmRldiwgR1BVX0xBVEVTVF9GTFVTSF9JRCk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfZ3B1LmggYi9kcml2ZXJzL2dwdS9k cm0vcGFuZnJvc3QvcGFuZnJvc3RfZ3B1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAwLi45ODk1OGRhZmI0M2IKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9k cm0vcGFuZnJvc3QvcGFuZnJvc3RfZ3B1LmgKQEAgLTAsMCArMSwxNSBAQAorLyogU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKy8qIENvcHlyaWdodCAyMDE4IE1hcnR5IEUuIFBs dW1tZXIgPGhhbmV0emVyQHN0YXJ0bWFpbC5jb20+ICovCisvKiBDb3B5cmlnaHQgMjAxOSBDb2xs YWJvcmEgbHRkLiAqLworCisjaWZuZGVmIF9fUEFORlJPU1RfR1BVX0hfXworI2RlZmluZSBfX1BB TkZST1NUX0dQVV9IX18KKworc3RydWN0IHBhbmZyb3N0X2RldmljZTsKKworaW50IHBhbmZyb3N0 X2dwdV9pbml0KHN0cnVjdCBwYW5mcm9zdF9kZXZpY2UgKnBmZGV2KTsKK3ZvaWQgcGFuZnJvc3Rf Z3B1X2Zpbmkoc3RydWN0IHBhbmZyb3N0X2RldmljZSAqcGZkZXYpOworCit1MzIgcGFuZnJvc3Rf Z3B1X2dldF9sYXRlc3RfZmx1c2hfaWQoc3RydWN0IHBhbmZyb3N0X2RldmljZSAqcGZkZXYpOwor CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9p c3N1ZXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9pc3N1ZXMuaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjdhNWRiMTIzZThmOQotLS0gL2Rl di9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9pc3N1ZXMuaApA QCAtMCwwICsxLDE3NSBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8K Ky8qIChDKSBDT1BZUklHSFQgMjAxNC0yMDE4IEFSTSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2Vy dmVkLiAqLworLyogQ29weXJpZ2h0IDIwMTkgTGluYXJvLCBMdGQuLCBSb2IgSGVycmluZyA8cm9i aEBrZXJuZWwub3JnPiAqLworI2lmbmRlZiBfX1BBTkZST1NUX0lTU1VFU19IX18KKyNkZWZpbmUg X19QQU5GUk9TVF9JU1NVRVNfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKworI2lu Y2x1ZGUgInBhbmZyb3N0X2RldmljZS5oIgorCisvKgorICogVGhpcyBpcyBub3QgYSBjb21wbGV0 ZSBsaXN0IG9mIGlzc3VlcywgYnV0IG9ubHkgdGhlIG9uZXMgdGhlIGRyaXZlciBuZWVkcworICog dG8gY2FyZSBhYm91dC4KKyAqLworZW51bSBiYXNlX2h3X2lzc3VlIHsKKwlIV19JU1NVRV82MzY3 LAorCUhXX0lTU1VFXzY3ODcsCisJSFdfSVNTVUVfODE4NiwKKwlIV19JU1NVRV84MjQ1LAorCUhX X0lTU1VFXzgzMTYsCisJSFdfSVNTVUVfODM5NCwKKwlIV19JU1NVRV84NDAxLAorCUhXX0lTU1VF Xzg0MDgsCisJSFdfSVNTVUVfODQ0MywKKwlIV19JU1NVRV84OTg3LAorCUhXX0lTU1VFXzk0MzUs CisJSFdfSVNTVUVfOTUxMCwKKwlIV19JU1NVRV85NjMwLAorCUhXX0lTU1VFXzEwMzI3LAorCUhX X0lTU1VFXzEwNjQ5LAorCUhXX0lTU1VFXzEwNjc2LAorCUhXX0lTU1VFXzEwNzk3LAorCUhXX0lT U1VFXzEwODE3LAorCUhXX0lTU1VFXzEwODgzLAorCUhXX0lTU1VFXzEwOTU5LAorCUhXX0lTU1VF XzEwOTY5LAorCUhXX0lTU1VFXzExMDIwLAorCUhXX0lTU1VFXzExMDI0LAorCUhXX0lTU1VFXzEx MDM1LAorCUhXX0lTU1VFXzExMDU2LAorCUhXX0lTU1VFX1Q3NlhfMzU0MiwKKwlIV19JU1NVRV9U NzZYXzM5NTMsCisJSFdfSVNTVUVfVE1JWF84NDYzLAorCUdQVUNPUkVfMTYxOSwKKwlIV19JU1NV RV9UTUlYXzg0MzgsCisJSFdfSVNTVUVfVEdPWF9SMV8xMjM0LAorCUhXX0lTU1VFX0VORAorfTsK KworI2RlZmluZSBod19pc3N1ZXNfYWxsIChcCisJQklUX1VMTChIV19JU1NVRV85NDM1KSkKKwor I2RlZmluZSBod19pc3N1ZXNfdDYwMCAoXAorCUJJVF9VTEwoSFdfSVNTVUVfNjM2NykgfCBcCisJ QklUX1VMTChIV19JU1NVRV82Nzg3KSB8IFwKKwlCSVRfVUxMKEhXX0lTU1VFXzg0MDgpIHwgXAor CUJJVF9VTEwoSFdfSVNTVUVfOTUxMCkgfCBcCisJQklUX1VMTChIV19JU1NVRV8xMDY0OSkgfCBc CisJQklUX1VMTChIV19JU1NVRV8xMDY3NikgfCBcCisJQklUX1VMTChIV19JU1NVRV8xMDg4Mykg fCBcCisJQklUX1VMTChIV19JU1NVRV8xMTAyMCkgfCBcCisJQklUX1VMTChIV19JU1NVRV8xMTAz NSkgfCBcCisJQklUX1VMTChIV19JU1NVRV8xMTA1NikgfCBcCisJQklUX1VMTChIV19JU1NVRV9U TUlYXzg0MzgpKQorCisjZGVmaW5lIGh3X2lzc3Vlc190NjAwX3IwcDBfMTVkZXYwIChcCisJQklU X1VMTChIV19JU1NVRV84MTg2KSB8IFwKKwlCSVRfVUxMKEhXX0lTU1VFXzgyNDUpIHwgXAorCUJJ VF9VTEwoSFdfSVNTVUVfODMxNikgfCBcCisJQklUX1VMTChIV19JU1NVRV84Mzk0KSB8IFwKKwlC SVRfVUxMKEhXX0lTU1VFXzg0MDEpIHwgXAorCUJJVF9VTEwoSFdfSVNTVUVfODQ0MykgfCBcCisJ QklUX1VMTChIV19JU1NVRV84OTg3KSB8IFwKKwlCSVRfVUxMKEhXX0lTU1VFXzk2MzApIHwgXAor CUJJVF9VTEwoSFdfSVNTVUVfMTA5NjkpIHwgXAorCUJJVF9VTEwoR1BVQ09SRV8xNjE5KSkKKwor I2RlZmluZSBod19pc3N1ZXNfdDYyMCAoXAorCUJJVF9VTEwoSFdfSVNTVUVfMTA2NDkpIHwgXAor CUJJVF9VTEwoSFdfSVNTVUVfMTA4ODMpIHwgXAorCUJJVF9VTEwoSFdfSVNTVUVfMTA5NTkpIHwg XAorCUJJVF9VTEwoSFdfSVNTVUVfMTEwNTYpIHwgXAorCUJJVF9VTEwoSFdfSVNTVUVfVE1JWF84 NDM4KSkKKworI2RlZmluZSBod19pc3N1ZXNfdDYyMF9yMHAxIChcCisJQklUX1VMTChIV19JU1NV RV8xMDMyNykgfCBcCisJQklUX1VMTChIV19JU1NVRV8xMDY3NikgfCBcCisJQklUX1VMTChIV19J U1NVRV8xMDgxNykgfCBcCisJQklUX1VMTChIV19JU1NVRV8xMTAyMCkgfCBcCisJQklUX1VMTChI V19JU1NVRV8xMTAyNCkgfCBcCisJQklUX1VMTChIV19JU1NVRV8xMTAzNSkpCisKKyNkZWZpbmUg aHdfaXNzdWVzX3Q2MjBfcjFwMCAoXAorCUJJVF9VTEwoSFdfSVNTVUVfMTEwMjApIHwgXAorCUJJ VF9VTEwoSFdfSVNTVUVfMTEwMjQpKQorCisjZGVmaW5lIGh3X2lzc3Vlc190NzIwIChcCisJQklU X1VMTChIV19JU1NVRV8xMDY0OSkgfCBcCisJQklUX1VMTChIV19JU1NVRV8xMDc5NykgfCBcCisJ QklUX1VMTChIV19JU1NVRV8xMDg4MykgfCBcCisJQklUX1VMTChIV19JU1NVRV8xMTA1NikgfCBc CisJQklUX1VMTChIV19JU1NVRV9UTUlYXzg0MzgpKQorCisjZGVmaW5lIGh3X2lzc3Vlc190NzYw IChcCisJQklUX1VMTChIV19JU1NVRV8xMDg4MykgfCBcCisJQklUX1VMTChIV19JU1NVRV9UNzZY XzM5NTMpIHwgXAorCUJJVF9VTEwoSFdfSVNTVUVfVE1JWF84NDM4KSkKKworI2RlZmluZSBod19p c3N1ZXNfdDc2MF9yMHAwIChcCisJQklUX1VMTChIV19JU1NVRV8xMTAyMCkgfCBcCisJQklUX1VM TChIV19JU1NVRV8xMTAyNCkgfCBcCisJQklUX1VMTChIV19JU1NVRV9UNzZYXzM1NDIpKQorCisj ZGVmaW5lIGh3X2lzc3Vlc190NzYwX3IwcDEgKFwKKwlCSVRfVUxMKEhXX0lTU1VFXzExMDIwKSB8 IFwKKwlCSVRfVUxMKEhXX0lTU1VFXzExMDI0KSB8IFwKKwlCSVRfVUxMKEhXX0lTU1VFX1Q3Nlhf MzU0MikpCisKKyNkZWZpbmUgaHdfaXNzdWVzX3Q3NjBfcjBwMV81MHJlbDAgKFwKKwlCSVRfVUxM KEhXX0lTU1VFX1Q3NlhfMzU0MikpCisKKyNkZWZpbmUgaHdfaXNzdWVzX3Q3NjBfcjBwMiAoXAor CUJJVF9VTEwoSFdfSVNTVUVfMTEwMjApIHwgXAorCUJJVF9VTEwoSFdfSVNTVUVfMTEwMjQpIHwg XAorCUJJVF9VTEwoSFdfSVNTVUVfVDc2WF8zNTQyKSkKKworI2RlZmluZSBod19pc3N1ZXNfdDc2 MF9yMHAzIChcCisJQklUX1VMTChIV19JU1NVRV9UNzZYXzM1NDIpKQorCisjZGVmaW5lIGh3X2lz c3Vlc190ODIwIChcCisJQklUX1VMTChIV19JU1NVRV8xMDg4MykgfCBcCisJQklUX1VMTChIV19J U1NVRV9UNzZYXzM5NTMpIHwgXAorCUJJVF9VTEwoSFdfSVNTVUVfVE1JWF84NDM4KSkKKworI2Rl ZmluZSBod19pc3N1ZXNfdDgzMCAoXAorCUJJVF9VTEwoSFdfSVNTVUVfMTA4ODMpIHwgXAorCUJJ VF9VTEwoSFdfSVNTVUVfVDc2WF8zOTUzKSB8IFwKKwlCSVRfVUxMKEhXX0lTU1VFX1RNSVhfODQz OCkpCisKKyNkZWZpbmUgaHdfaXNzdWVzX3Q4NjAgKFwKKwlCSVRfVUxMKEhXX0lTU1VFXzEwODgz KSB8IFwKKwlCSVRfVUxMKEhXX0lTU1VFX1Q3NlhfMzk1MykgfCBcCisJQklUX1VMTChIV19JU1NV RV9UTUlYXzg0MzgpKQorCisjZGVmaW5lIGh3X2lzc3Vlc190ODgwIChcCisJQklUX1VMTChIV19J U1NVRV8xMDg4MykgfCBcCisJQklUX1VMTChIV19JU1NVRV9UNzZYXzM5NTMpIHwgXAorCUJJVF9V TEwoSFdfSVNTVUVfVE1JWF84NDM4KSkKKworI2RlZmluZSBod19pc3N1ZXNfZzMxIDAKKworI2Rl ZmluZSBod19pc3N1ZXNfZzMxX3IxcDAgKFwKKwlCSVRfVUxMKEhXX0lTU1VFX1RHT1hfUjFfMTIz NCkpCisKKyNkZWZpbmUgaHdfaXNzdWVzX2c1MSAwCisKKyNkZWZpbmUgaHdfaXNzdWVzX2c1MiAw CisKKyNkZWZpbmUgaHdfaXNzdWVzX2c3MSAoXAorCUJJVF9VTEwoSFdfSVNTVUVfVE1JWF84NDYz KSB8IFwKKwlCSVRfVUxMKEhXX0lTU1VFX1RNSVhfODQzOCkpCisKKyNkZWZpbmUgaHdfaXNzdWVz X2c3MV9yMHAwXzA1ZGV2MCAoXAorCUJJVF9VTEwoSFdfSVNTVUVfVDc2WF8zOTUzKSkKKworI2Rl ZmluZSBod19pc3N1ZXNfZzcyIDAKKworI2RlZmluZSBod19pc3N1ZXNfZzc2IDAKKworc3RhdGlj IGlubGluZSBib29sIHBhbmZyb3N0X2hhc19od19pc3N1ZShzdHJ1Y3QgcGFuZnJvc3RfZGV2aWNl ICpwZmRldiwgZW51bSBiYXNlX2h3X2lzc3VlIGZlYXQpCit7CisJcmV0dXJuIHRlc3RfYml0KGZl YXQsIHBmZGV2LT5mZWF0dXJlcy5od19pc3N1ZXMpOworfQorCisjZW5kaWYgLyogX0hXQ09ORklH X0lTU1VFU19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZy b3N0X2pvYi5jIGIvZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2pvYi5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uY2E5NTQ0OTc2MzE3Ci0tLSAvZGV2 L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2pvYi5jCkBAIC0w LDAgKzEsNjYyIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyogQ29w eXJpZ2h0IDIwMTkgTGluYXJvLCBMdGQsIFJvYiBIZXJyaW5nIDxyb2JoQGtlcm5lbC5vcmc+ICov CisvKiBDb3B5cmlnaHQgMjAxOSBDb2xsYWJvcmEgbHRkLiAqLworCisjaW5jbHVkZSA8bGludXgv ZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9p by5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4 L3Jlc2VydmF0aW9uLmg+CisjaW5jbHVkZSA8ZHJtL2dwdV9zY2hlZHVsZXIuaD4KKyNpbmNsdWRl IDxkcm0vcGFuZnJvc3RfZHJtLmg+CisKKyNpbmNsdWRlICJwYW5mcm9zdF9kZXZpY2UuaCIKKyNp bmNsdWRlICJwYW5mcm9zdF9qb2IuaCIKKyNpbmNsdWRlICJwYW5mcm9zdF9mZWF0dXJlcy5oIgor I2luY2x1ZGUgInBhbmZyb3N0X2dlbS5oIgorCisjZGVmaW5lIEpPQl9CQVNFIDB4MTAwMAorCisv KiBKb2IgQ29udHJvbCByZWdzICovCisjZGVmaW5lIEpPQl9JTlRfUkFXU1RBVAkJMHgwMDAKKyNk ZWZpbmUgSk9CX0lOVF9DTEVBUgkJMHgwMDQKKyNkZWZpbmUgSk9CX0lOVF9NQVNLCQkweDAwOAor I2RlZmluZSBKT0JfSU5UX1NUQVQJCTB4MDBjCisjZGVmaW5lIEpPQl9JTlRfSlNfU1RBVEUJMHgw MTAKKyNkZWZpbmUgSk9CX0lOVF9USFJPVFRMRQkweDAxNAorCisjZGVmaW5lIEpTX0JBU0UJCQkw eDgwMAorI2RlZmluZSBKU19IRUFEX0xPKG4pCQkoSlNfQkFTRSArICgobikgKiAweDgwKSArIDB4 MDApCisjZGVmaW5lIEpTX0hFQURfSEkobikJCShKU19CQVNFICsgKChuKSAqIDB4ODApICsgMHgw NCkKKyNkZWZpbmUgSlNfVEFJTF9MTyhuKQkJKEpTX0JBU0UgKyAoKG4pICogMHg4MCkgKyAweDA4 KQorI2RlZmluZSBKU19UQUlMX0hJKG4pCQkoSlNfQkFTRSArICgobikgKiAweDgwKSArIDB4MGMp CisjZGVmaW5lIEpTX0FGRklOSVRZX0xPKG4pCShKU19CQVNFICsgKChuKSAqIDB4ODApICsgMHgx MCkKKyNkZWZpbmUgSlNfQUZGSU5JVFlfSEkobikJKEpTX0JBU0UgKyAoKG4pICogMHg4MCkgKyAw eDE0KQorI2RlZmluZSBKU19DT05GSUcobikJCShKU19CQVNFICsgKChuKSAqIDB4ODApICsgMHgx OCkKKyNkZWZpbmUgSlNfWEFGRklOSVRZKG4pCQkoSlNfQkFTRSArICgobikgKiAweDgwKSArIDB4 MWMpCisjZGVmaW5lIEpTX0NPTU1BTkQobikJCShKU19CQVNFICsgKChuKSAqIDB4ODApICsgMHgy MCkKKyNkZWZpbmUgSlNfU1RBVFVTKG4pCQkoSlNfQkFTRSArICgobikgKiAweDgwKSArIDB4MjQp CisjZGVmaW5lIEpTX0hFQURfTkVYVF9MTyhuKQkoSlNfQkFTRSArICgobikgKiAweDgwKSArIDB4 NDApCisjZGVmaW5lIEpTX0hFQURfTkVYVF9ISShuKQkoSlNfQkFTRSArICgobikgKiAweDgwKSAr IDB4NDQpCisjZGVmaW5lIEpTX0FGRklOSVRZX05FWFRfTE8obikJKEpTX0JBU0UgKyAoKG4pICog MHg4MCkgKyAweDUwKQorI2RlZmluZSBKU19BRkZJTklUWV9ORVhUX0hJKG4pCShKU19CQVNFICsg KChuKSAqIDB4ODApICsgMHg1NCkKKyNkZWZpbmUgSlNfQ09ORklHX05FWFQobikJKEpTX0JBU0Ug KyAoKG4pICogMHg4MCkgKyAweDU4KQorI2RlZmluZSBKU19DT01NQU5EX05FWFQobikJKEpTX0JB U0UgKyAoKG4pICogMHg4MCkgKyAweDYwKQorI2RlZmluZSBKU19GTFVTSF9JRF9ORVhUKG4pCShK U19CQVNFICsgKChuKSAqIDB4ODApICsgMHg3MCkKKworLyogUG9zc2libGUgdmFsdWVzIG9mIEpT X0NPTkZJRyBhbmQgSlNfQ09ORklHX05FWFQgcmVnaXN0ZXJzICovCisjZGVmaW5lIEpTX0NPTkZJ R19TVEFSVF9GTFVTSF9OT19BQ1RJT04gICAgICAgICgwdSA8PCAwKQorI2RlZmluZSBKU19DT05G SUdfU1RBUlRfRkxVU0hfQ0xFQU4gICAgICAgICAgICAoMXUgPDwgOCkKKyNkZWZpbmUgSlNfQ09O RklHX1NUQVJUX0ZMVVNIX0NMRUFOX0lOVkFMSURBVEUgKDN1IDw8IDgpCisjZGVmaW5lIEpTX0NP TkZJR19TVEFSVF9NTVUgICAgICAgICAgICAgICAgICAgICgxdSA8PCAxMCkKKyNkZWZpbmUgSlNf Q09ORklHX0pPQl9DSEFJTl9GTEFHICAgICAgICAgICAgICAgKDF1IDw8IDExKQorI2RlZmluZSBK U19DT05GSUdfRU5EX0ZMVVNIX05PX0FDVElPTiAgICAgICAgICBKU19DT05GSUdfU1RBUlRfRkxV U0hfTk9fQUNUSU9OCisjZGVmaW5lIEpTX0NPTkZJR19FTkRfRkxVU0hfQ0xFQU4gICAgICAgICAg ICAgICgxdSA8PCAxMikKKyNkZWZpbmUgSlNfQ09ORklHX0VORF9GTFVTSF9DTEVBTl9JTlZBTElE QVRFICAgKDN1IDw8IDEyKQorI2RlZmluZSBKU19DT05GSUdfRU5BQkxFX0ZMVVNIX1JFRFVDVElP TiAgICAgICAoMXUgPDwgMTQpCisjZGVmaW5lIEpTX0NPTkZJR19ESVNBQkxFX0RFU0NSSVBUT1Jf V1JfQksgICAgICgxdSA8PCAxNSkKKyNkZWZpbmUgSlNfQ09ORklHX1RIUkVBRF9QUkkobikgICAg ICAgICAgICAgICAgKChuKSA8PCAxNikKKworI2RlZmluZSBKU19DT01NQU5EX05PUAkJCTB4MDAK KyNkZWZpbmUgSlNfQ09NTUFORF9TVEFSVAkJCTB4MDEKKyNkZWZpbmUgSlNfQ09NTUFORF9TT0ZU X1NUT1AgICAweDAyCS8qIEdlbnRseSBzdG9wIHByb2Nlc3NpbmcgYSBqb2IgY2hhaW4gKi8KKyNk ZWZpbmUgSlNfQ09NTUFORF9IQVJEX1NUT1AgICAweDAzCS8qIFJ1ZGVseSBzdG9wIHByb2Nlc3Np bmcgYSBqb2IgY2hhaW4gKi8KKyNkZWZpbmUgSlNfQ09NTUFORF9TT0ZUX1NUT1BfMCAweDA0CS8q IEV4ZWN1dGUgU09GVF9TVE9QIGlmIEpPQl9DSEFJTl9GTEFHIGlzIDAgKi8KKyNkZWZpbmUgSlNf Q09NTUFORF9IQVJEX1NUT1BfMCAweDA1CS8qIEV4ZWN1dGUgSEFSRF9TVE9QIGlmIEpPQl9DSEFJ Tl9GTEFHIGlzIDAgKi8KKyNkZWZpbmUgSlNfQ09NTUFORF9TT0ZUX1NUT1BfMSAweDA2CS8qIEV4 ZWN1dGUgU09GVF9TVE9QIGlmIEpPQl9DSEFJTl9GTEFHIGlzIDEgKi8KKyNkZWZpbmUgSlNfQ09N TUFORF9IQVJEX1NUT1BfMSAweDA3CS8qIEV4ZWN1dGUgSEFSRF9TVE9QIGlmIEpPQl9DSEFJTl9G TEFHIGlzIDEgKi8KKworI2RlZmluZSBqb2Jfd3JpdGUoZGV2LCByZWcsIGRhdGEpIHdyaXRlbChk YXRhLCBkZXYtPmlvbWVtICsgSk9CX0JBU0UgKyAocmVnKSkKKyNkZWZpbmUgam9iX3JlYWQoZGV2 LCByZWcpIHJlYWRsKGRldi0+aW9tZW0gKyBKT0JfQkFTRSArIChyZWcpKQorCitzdHJ1Y3QgcGFu ZnJvc3RfcXVldWVfc3RhdGUgeworCXN0cnVjdCBkcm1fZ3B1X3NjaGVkdWxlciBzY2hlZDsKKwor CXU2NCBmZW5jZV9jb250ZXh0OworCXU2NCBlbWl0X3NlcW5vOworfTsKKworc3RydWN0IHBhbmZy b3N0X2pvYl9zbG90IHsKKwlzdHJ1Y3QgcGFuZnJvc3RfcXVldWVfc3RhdGUgcXVldWVbTlVNX0pP Ql9TTE9UU107CisJc3BpbmxvY2tfdCBqb2JfbG9jazsKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGFu ZnJvc3Rfam9iICoKK3RvX3BhbmZyb3N0X2pvYihzdHJ1Y3QgZHJtX3NjaGVkX2pvYiAqc2NoZWRf am9iKQoreworCXJldHVybiBjb250YWluZXJfb2Yoc2NoZWRfam9iLCBzdHJ1Y3QgcGFuZnJvc3Rf am9iLCBiYXNlKTsKK30KKworc3RydWN0IHBhbmZyb3N0X2ZlbmNlIHsKKwlzdHJ1Y3QgZG1hX2Zl bmNlIGJhc2U7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKKwkvKiBwYW5mcm9zdCBzZXFubyBm b3Igc2lnbmFsZWQoKSB0ZXN0ICovCisJdTY0IHNlcW5vOworCWludCBxdWV1ZTsKK307CisKK3N0 YXRpYyBpbmxpbmUgc3RydWN0IHBhbmZyb3N0X2ZlbmNlICoKK3RvX3BhbmZyb3N0X2ZlbmNlKHN0 cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQoreworCXJldHVybiAoc3RydWN0IHBhbmZyb3N0X2ZlbmNl ICopZmVuY2U7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpwYW5mcm9zdF9mZW5jZV9nZXRfZHJp dmVyX25hbWUoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpCit7CisJcmV0dXJuICJwYW5mcm9zdCI7 Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpwYW5mcm9zdF9mZW5jZV9nZXRfdGltZWxpbmVfbmFt ZShzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSkKK3sKKwlzdHJ1Y3QgcGFuZnJvc3RfZmVuY2UgKmYg PSB0b19wYW5mcm9zdF9mZW5jZShmZW5jZSk7CisKKwlzd2l0Y2ggKGYtPnF1ZXVlKSB7CisJY2Fz ZSAwOgorCQlyZXR1cm4gInBhbmZyb3N0LWpzLTAiOworCWNhc2UgMToKKwkJcmV0dXJuICJwYW5m cm9zdC1qcy0xIjsKKwljYXNlIDI6CisJCXJldHVybiAicGFuZnJvc3QtanMtMiI7CisJZGVmYXVs dDoKKwkJcmV0dXJuIE5VTEw7CisJfQorfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRtYV9mZW5j ZV9vcHMgcGFuZnJvc3RfZmVuY2Vfb3BzID0geworCS5nZXRfZHJpdmVyX25hbWUgPSBwYW5mcm9z dF9mZW5jZV9nZXRfZHJpdmVyX25hbWUsCisJLmdldF90aW1lbGluZV9uYW1lID0gcGFuZnJvc3Rf ZmVuY2VfZ2V0X3RpbWVsaW5lX25hbWUsCit9OworCitzdGF0aWMgc3RydWN0IGRtYV9mZW5jZSAq cGFuZnJvc3RfZmVuY2VfY3JlYXRlKHN0cnVjdCBwYW5mcm9zdF9kZXZpY2UgKnBmZGV2LCBpbnQg anNfbnVtKQoreworCXN0cnVjdCBwYW5mcm9zdF9mZW5jZSAqZmVuY2U7CisJc3RydWN0IHBhbmZy b3N0X2pvYl9zbG90ICpqcyA9IHBmZGV2LT5qczsKKworCWZlbmNlID0ga3phbGxvYyhzaXplb2Yo KmZlbmNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmZW5jZSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVO T01FTSk7CisKKwlmZW5jZS0+ZGV2ID0gcGZkZXYtPmRkZXY7CisJZmVuY2UtPnF1ZXVlID0ganNf bnVtOworCWZlbmNlLT5zZXFubyA9ICsranMtPnF1ZXVlW2pzX251bV0uZW1pdF9zZXFubzsKKwlk bWFfZmVuY2VfaW5pdCgmZmVuY2UtPmJhc2UsICZwYW5mcm9zdF9mZW5jZV9vcHMsICZqcy0+am9i X2xvY2ssCisJCSAgICAgICBqcy0+cXVldWVbanNfbnVtXS5mZW5jZV9jb250ZXh0LCBmZW5jZS0+ c2Vxbm8pOworCisJcmV0dXJuICZmZW5jZS0+YmFzZTsKK30KKworc3RhdGljIGludCBwYW5mcm9z dF9qb2JfZ2V0X3Nsb3Qoc3RydWN0IHBhbmZyb3N0X2pvYiAqam9iKQoreworCWlmIChqb2ItPnJl cXVpcmVtZW50cyAmIFBBTkZST1NUX0pEX1JFUV9GUykKKwkJcmV0dXJuIDA7CisKKyNpZiAwCisv LyBJZ25vcmUgY29tcHV0ZSBmb3Igbm93CisJaWYgKGpvYi0+cmVxdWlyZW1lbnRzICYgQkFTRV9K RF9SRVFfT05MWV9DT01QVVRFKSB7CisJCWlmIChqb2ItPmRldmljZV9uciA9PSAxICYmCisJCQkJ a2JkZXYtPmdwdV9wcm9wcy5udW1fY29yZV9ncm91cHMgPT0gMikKKwkJCXJldHVybiAyOworCQlp ZiAoa2Jhc2VfaHdfaGFzX2lzc3VlKGtiZGV2LCBCQVNFX0hXX0lTU1VFXzg5ODcpKQorCQkJcmV0 dXJuIDI7CisJfQorI2VuZGlmCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIHBhbmZyb3N0 X2pvYl93cml0ZV9hZmZpbml0eShzdHJ1Y3QgcGFuZnJvc3RfZGV2aWNlICpwZmRldiwKKwkJCQkJ dTMyIHJlcXVpcmVtZW50cywKKwkJCQkJaW50IGpzKQoreworCXU2NCBhZmZpbml0eSA9IDB4ZjsK KyNpZiAwCisJaWYgKChyZXF1aXJlbWVudHMgJiAoQkFTRV9KRF9SRVFfRlMgfCBCQVNFX0pEX1JF UV9DUyB8IEJBU0VfSkRfUkVRX1QpKSA9PQorCQkJQkFTRV9KRF9SRVFfVCkgeworCQkvKiBUaWxl ci1vbmx5IGF0b20gKi8KKwkJLyogSWYgdGhlIGhhcmR3YXJlIHN1cHBvcnRzIFhBRkZJTklUWSB0 aGVuIHdlJ2xsIG9ubHkgZW5hYmxlCisJCSAqIHRoZSB0aWxlciAod2hpY2ggaXMgdGhlIGRlZmF1 bHQgc28gdGhpcyBpcyBhIG5vLW9wKSwKKwkJICogb3RoZXJ3aXNlIGVuYWJsZSBzaGFkZXIgY29y ZSAwLgorCQkgKi8KKwkJaWYgKCFwYW5mcm9zdF9oYXNfaHdfZmVhdHVyZShrYmRldiwgQkFTRV9I V19GRUFUVVJFX1hBRkZJTklUWSkpCisJCQlhZmZpbml0eSA9IDE7CisJCWVsc2UKKwkJCWFmZmlu aXR5ID0gMDsKKwl9IGVsc2UgaWYgKChyZXF1aXJlbWVudHMgJiAoQkFTRV9KRF9SRVFfQ09IRVJF TlRfR1JPVVAgfAorCQkJQkFTRV9KRF9SRVFfU1BFQ0lGSUNfQ09IRVJFTlRfR1JPVVApKSkgewor CQl1bnNpZ25lZCBpbnQgbnVtX2NvcmVfZ3JvdXBzID0ga2JkZXYtPmdwdV9wcm9wcy5udW1fY29y ZV9ncm91cHM7CisJCXN0cnVjdCBtYWxpX2Jhc2VfZ3B1X2NvaGVyZW50X2dyb3VwX2luZm8gKmNv aGVyZW5jeV9pbmZvID0KKwkJCSZrYmRldi0+Z3B1X3Byb3BzLnByb3BzLmNvaGVyZW5jeV9pbmZv OworCisJCWFmZmluaXR5ID0ga2Jhc2VfcG1fY2FfZ2V0X2NvcmVfbWFzayhrYmRldikgJgorCQkJ CWtiZGV2LT5wbS5kZWJ1Z19jb3JlX21hc2tbanNdOworCisJCS8qIEpTMiBvbiBhIGR1YWwgY29y ZSBncm91cCBzeXN0ZW0gdGFyZ2V0cyBjb3JlIGdyb3VwIDEuIEFsbAorCQkgKiBvdGhlciBjYXNl cyB0YXJnZXQgY29yZSBncm91cCAwLgorCQkgKi8KKwkJaWYgKGpzID09IDIgJiYgbnVtX2NvcmVf Z3JvdXBzID4gMSkKKwkJCWFmZmluaXR5ICY9IGNvaGVyZW5jeV9pbmZvLT5ncm91cFsxXS5jb3Jl X21hc2s7CisJCWVsc2UKKwkJCWFmZmluaXR5ICY9IGNvaGVyZW5jeV9pbmZvLT5ncm91cFswXS5j b3JlX21hc2s7CisJfSBlbHNlIHsKKwkJLyogVXNlIGFsbCBjb3JlcyAqLworCQlhZmZpbml0eSA9 IGtiYXNlX3BtX2NhX2dldF9jb3JlX21hc2soa2JkZXYpICYKKwkJCQlrYmRldi0+cG0uZGVidWdf Y29yZV9tYXNrW2pzXTsKKwl9CisjZW5kaWYKKwlqb2Jfd3JpdGUocGZkZXYsIEpTX0FGRklOSVRZ X05FWFRfTE8oanMpLCBhZmZpbml0eSAmIDB4RkZGRkZGRkYpOworCWpvYl93cml0ZShwZmRldiwg SlNfQUZGSU5JVFlfTkVYVF9ISShqcyksIGFmZmluaXR5ID4+IDMyKTsKK30KKworc3RhdGljIHZv aWQgcGFuZnJvc3Rfam9iX2h3X3N1Ym1pdChzdHJ1Y3QgcGFuZnJvc3Rfam9iICpqb2IsIGludCBq cykKK3sKKwlzdHJ1Y3QgcGFuZnJvc3RfZGV2aWNlICpwZmRldiA9IGpvYi0+cGZkZXY7CisJdTMy IGNmZzsKKwl1NjQgamNfaGVhZCA9IGpvYi0+amM7CisJaW50IHRpbWVvdXQgPSAxMDA7CisKKwlk byB7CisJCWlmICgham9iX3JlYWQocGZkZXYsIEpTX0NPTU1BTkRfTkVYVChqcykpKQorCQkJYnJl YWs7CisJCXVkZWxheSgxMDApOworCX0gd2hpbGUgKHRpbWVvdXQtLSk7CisJaWYgKCF0aW1lb3V0 KSB7CisJCWRldl9lcnIocGZkZXYtPmRldiwgIkpTJWQgYnVzeSIsIGpzKTsKKwkJcmV0dXJuOwor CX0KKworCisJam9iX3dyaXRlKHBmZGV2LCBKU19IRUFEX05FWFRfTE8oanMpLCBqY19oZWFkICYg MHhGRkZGRkZGRik7CisJam9iX3dyaXRlKHBmZGV2LCBKU19IRUFEX05FWFRfSEkoanMpLCBqY19o ZWFkID4+IDMyKTsKKworCXBhbmZyb3N0X2pvYl93cml0ZV9hZmZpbml0eShwZmRldiwgam9iLT5y ZXF1aXJlbWVudHMsIGpzKTsKKworCS8qIHN0YXJ0IE1NVSwgbWVkaXVtIHByaW9yaXR5LCBjYWNo ZSBjbGVhbi9mbHVzaCBvbiBlbmQsIGNsZWFuL2ZsdXNoIG9uCisJICogc3RhcnQgKi8KKwkvLyBU T0RPOiBkaWZmZXJlbnQgYWRkcmVzcyBzcGFjZXMKKwljZmcgPSBKU19DT05GSUdfVEhSRUFEX1BS SSg4KSB8CisJCUpTX0NPTkZJR19TVEFSVF9GTFVTSF9DTEVBTl9JTlZBTElEQVRFIHwKKwkJSlNf Q09ORklHX0VORF9GTFVTSF9DTEVBTl9JTlZBTElEQVRFOworCisJaWYgKHBhbmZyb3N0X2hhc19o d19mZWF0dXJlKHBmZGV2LCBIV19GRUFUVVJFX0ZMVVNIX1JFRFVDVElPTikpCisJCWNmZyB8PSBK U19DT05GSUdfRU5BQkxFX0ZMVVNIX1JFRFVDVElPTjsKKworI2lmIDAKKwlpZiAoa2Jhc2VfaHdf aGFzX2lzc3VlKGtiZGV2LCBCQVNFX0hXX0lTU1VFXzEwNjQ5KSkKKwkJY2ZnIHw9IEpTX0NPTkZJ R19TVEFSVF9NTVU7CisKKwlpZiAocGFuZnJvc3RfaGFzX2h3X2ZlYXR1cmUoa2JkZXYsCisJCQkJ QkFTRV9IV19GRUFUVVJFX0pPQkNIQUlOX0RJU0FNQklHVUFUSU9OKSkgeworCQlpZiAoIWtiZGV2 LT5od2FjY2Vzcy5iYWNrZW5kLnNsb3RfcmJbanNdLmpvYl9jaGFpbl9mbGFnKSB7CisJCQljZmcg fD0gSlNfQ09ORklHX0pPQl9DSEFJTl9GTEFHOworCQkJa2F0b20tPmF0b21fZmxhZ3MgfD0gS0JB U0VfS0FUT01fRkxBR1NfSk9CQ0hBSU47CisJCQlrYmRldi0+aHdhY2Nlc3MuYmFja2VuZC5zbG90 X3JiW2pzXS5qb2JfY2hhaW5fZmxhZyA9CisJCQkJCQkJCXRydWU7CisJCX0gZWxzZSB7CisJCQlr YXRvbS0+YXRvbV9mbGFncyAmPSB+S0JBU0VfS0FUT01fRkxBR1NfSk9CQ0hBSU47CisJCQlrYmRl di0+aHdhY2Nlc3MuYmFja2VuZC5zbG90X3JiW2pzXS5qb2JfY2hhaW5fZmxhZyA9CisJCQkJCQkJ CWZhbHNlOworCQl9CisJfQorI2VuZGlmCisJam9iX3dyaXRlKHBmZGV2LCBKU19DT05GSUdfTkVY VChqcyksIGNmZyk7CisKKwlpZiAocGFuZnJvc3RfaGFzX2h3X2ZlYXR1cmUocGZkZXYsIEhXX0ZF QVRVUkVfRkxVU0hfUkVEVUNUSU9OKSkKKwkJam9iX3dyaXRlKHBmZGV2LCBKU19GTFVTSF9JRF9O RVhUKGpzKSwgam9iLT5mbHVzaF9pZCk7CisKKwkvKiBHTyAhICovCisJZGV2X2RiZyhwZmRldi0+ ZGV2LCAiSlM6IFN1Ym1pdHRpbmcgYXRvbSAlcCB0byBqc1slZF0gd2l0aCBoZWFkPTB4JWxseCIs CisJCQkJam9iLCBqcywgamNfaGVhZCk7CisKKwlqb2Jfd3JpdGUocGZkZXYsIEpTX0NPTU1BTkRf TkVYVChqcyksIEpTX0NPTU1BTkRfU1RBUlQpOworfQorCisKK3N0YXRpYyB2b2lkIHBhbmZyb3N0 X3VubG9ja19ib19yZXNlcnZhdGlvbnMoc3RydWN0IGRybV9nZW1fb2JqZWN0ICoqYm9zLAorCQkJ CQkgICAgaW50IGJvX2NvdW50LAorCQkJCQkgICAgc3RydWN0IHd3X2FjcXVpcmVfY3R4ICphY3F1 aXJlX2N0eCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBib19jb3VudDsgaSsrKSB7 CisJCXd3X211dGV4X3VubG9jaygmYm9zW2ldLT5yZXN2LT5sb2NrKTsKKwl9CisJd3dfYWNxdWly ZV9maW5pKGFjcXVpcmVfY3R4KTsKK30KKworLyogVGFrZXMgdGhlIHJlc2VydmF0aW9uIGxvY2sg b24gYWxsIHRoZSBCT3MgYmVpbmcgcmVmZXJlbmNlZCwgc28gdGhhdAorICogYXQgcXVldWUgc3Vi bWl0IHRpbWUgd2UgY2FuIHVwZGF0ZSB0aGUgcmVzZXJ2YXRpb25zLgorICoKKyAqIFdlIGRvbid0 IGxvY2sgdGhlIFJDTCB0aGUgdGlsZSBhbGxvYy9zdGF0ZSBCT3MsIG9yIG92ZXJmbG93IG1lbW9y eQorICogKGFsbCBvZiB3aGljaCBhcmUgb24gZXhlYy0+dW5yZWZfbGlzdCkuICBUaGV5J3JlIGVu dGlyZWx5IHByaXZhdGUKKyAqIHRvIHBhbmZyb3N0LCBzbyB3ZSBkb24ndCBhdHRhY2ggZG1hLWJ1 ZiBmZW5jZXMgdG8gdGhlbS4KKyAqLworc3RhdGljIGludCBwYW5mcm9zdF9sb2NrX2JvX3Jlc2Vy dmF0aW9ucyhzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKipib3MsCisJCQkJCSBpbnQgYm9fY291bnQs CisJCQkJCSBzdHJ1Y3Qgd3dfYWNxdWlyZV9jdHggKmFjcXVpcmVfY3R4KQoreworCWludCBjb250 ZW5kZWRfbG9jayA9IC0xOworCWludCBpLCByZXQ7CisKKwl3d19hY3F1aXJlX2luaXQoYWNxdWly ZV9jdHgsICZyZXNlcnZhdGlvbl93d19jbGFzcyk7CisKK3JldHJ5OgorCWlmIChjb250ZW5kZWRf bG9jayAhPSAtMSkgeworCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmJvID0gYm9zW2NvbnRlbmRl ZF9sb2NrXTsKKworCQlyZXQgPSB3d19tdXRleF9sb2NrX3Nsb3dfaW50ZXJydXB0aWJsZSgmYm8t PnJlc3YtPmxvY2ssCisJCQkJCQkgICAgICAgYWNxdWlyZV9jdHgpOworCQlpZiAocmV0KSB7CisJ CQl3d19hY3F1aXJlX2RvbmUoYWNxdWlyZV9jdHgpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0K KworCWZvciAoaSA9IDA7IGkgPCBib19jb3VudDsgaSsrKSB7CisJCWlmIChpID09IGNvbnRlbmRl ZF9sb2NrKQorCQkJY29udGludWU7CisKKwkJcmV0ID0gd3dfbXV0ZXhfbG9ja19pbnRlcnJ1cHRp YmxlKCZib3NbaV0tPnJlc3YtPmxvY2ssCisJCQkJCQkgIGFjcXVpcmVfY3R4KTsKKwkJaWYgKHJl dCkgeworCQkJaW50IGo7CisKKwkJCWZvciAoaiA9IDA7IGogPCBpOyBqKyspCisJCQkJd3dfbXV0 ZXhfdW5sb2NrKCZib3Nbal0tPnJlc3YtPmxvY2spOworCisJCQlpZiAoY29udGVuZGVkX2xvY2sg IT0gLTEgJiYgY29udGVuZGVkX2xvY2sgPj0gaSkgeworCQkJCXN0cnVjdCBkcm1fZ2VtX29iamVj dCAqYm8gPSBib3NbY29udGVuZGVkX2xvY2tdOworCisJCQkJd3dfbXV0ZXhfdW5sb2NrKCZiby0+ cmVzdi0+bG9jayk7CisJCQl9CisKKwkJCWlmIChyZXQgPT0gLUVERUFETEspIHsKKwkJCQljb250 ZW5kZWRfbG9jayA9IGk7CisJCQkJZ290byByZXRyeTsKKwkJCX0KKworCQkJd3dfYWNxdWlyZV9k b25lKGFjcXVpcmVfY3R4KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwl3d19hY3F1aXJl X2RvbmUoYWNxdWlyZV9jdHgpOworCisJLyogUmVzZXJ2ZSBzcGFjZSBmb3Igb3VyIHNoYXJlZCAo cmVhZC1vbmx5KSBmZW5jZSByZWZlcmVuY2VzLAorCSAqIGJlZm9yZSB3ZSBjb21taXQgdGhlIGpv YiB0byB0aGUgaGFyZHdhcmUuCisJICovCisJZm9yIChpID0gMDsgaSA8IGJvX2NvdW50OyBpKysp IHsKKwkJcmV0ID0gcmVzZXJ2YXRpb25fb2JqZWN0X3Jlc2VydmVfc2hhcmVkKGJvc1tpXS0+cmVz diwgMSk7CisJCWlmIChyZXQpIHsKKwkJCXBhbmZyb3N0X3VubG9ja19ib19yZXNlcnZhdGlvbnMo Ym9zLCBib19jb3VudCwKKwkJCQkJCSAgIGFjcXVpcmVfY3R4KTsKKwkJCXJldHVybiByZXQ7CisJ CX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGFuZnJvc3RfYXR0YWNoX29i amVjdF9mZW5jZXMoc3RydWN0IGRybV9nZW1fb2JqZWN0ICoqYm9zLAorCQkJCQkgIGludCBib19j b3VudCwKKwkJCQkJICBzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSkKK3sKKwlpbnQgaTsKKworCWZv ciAoaSA9IDA7IGkgPCBib19jb3VudDsgaSsrKQorCQkvKiBYWFg6IFVzZSBzaGFyZWQgZmVuY2Vz IGZvciByZWFkLW9ubHkgb2JqZWN0cy4gKi8KKwkJcmVzZXJ2YXRpb25fb2JqZWN0X2FkZF9leGNs X2ZlbmNlKGJvc1tpXS0+cmVzdiwgZmVuY2UpOworfQorCitpbnQgcGFuZnJvc3Rfam9iX3B1c2go c3RydWN0IHBhbmZyb3N0X2pvYiAqam9iKQoreworCXN0cnVjdCBwYW5mcm9zdF9kZXZpY2UgKnBm ZGV2ID0gam9iLT5wZmRldjsKKwlpbnQgc2xvdCA9IHBhbmZyb3N0X2pvYl9nZXRfc2xvdChqb2Ip OworCXN0cnVjdCBkcm1fc2NoZWRfZW50aXR5ICplbnRpdHkgPSAmam9iLT5maWxlX3ByaXYtPnNj aGVkX2VudGl0eVtzbG90XTsKKwlzdHJ1Y3Qgd3dfYWNxdWlyZV9jdHggYWNxdWlyZV9jdHg7CisJ aW50IHJldCA9IDA7CisKKwltdXRleF9sb2NrKCZwZmRldi0+c2NoZWRfbG9jayk7CisKKwlyZXQg PSBwYW5mcm9zdF9sb2NrX2JvX3Jlc2VydmF0aW9ucyhqb2ItPmJvcywgam9iLT5ib19jb3VudCwK KwkJCQkJICAgICZhY3F1aXJlX2N0eCk7CisJaWYgKHJldCkgeworCQltdXRleF91bmxvY2soJnBm ZGV2LT5zY2hlZF9sb2NrKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBkcm1fc2NoZWRf am9iX2luaXQoJmpvYi0+YmFzZSwgZW50aXR5LCBOVUxMKTsKKwlpZiAocmV0KSB7CisJCW11dGV4 X3VubG9jaygmcGZkZXYtPnNjaGVkX2xvY2spOworCQlnb3RvIHVubG9jazsKKwl9CisKKwlqb2It PnJlbmRlcl9kb25lX2ZlbmNlID0gZG1hX2ZlbmNlX2dldCgmam9iLT5iYXNlLnNfZmVuY2UtPmZp bmlzaGVkKTsKKworCWtyZWZfZ2V0KCZqb2ItPnJlZmNvdW50KTsgLyogcHV0IGJ5IHNjaGVkdWxl ciBqb2IgY29tcGxldGlvbiAqLworCisJZHJtX3NjaGVkX2VudGl0eV9wdXNoX2pvYigmam9iLT5i YXNlLCBlbnRpdHkpOworCisJbXV0ZXhfdW5sb2NrKCZwZmRldi0+c2NoZWRfbG9jayk7CisKKwlw YW5mcm9zdF9hdHRhY2hfb2JqZWN0X2ZlbmNlcyhqb2ItPmJvcywgam9iLT5ib19jb3VudCwKKwkJ CQkgam9iLT5yZW5kZXJfZG9uZV9mZW5jZSk7CisKK3VubG9jazoKKwlwYW5mcm9zdF91bmxvY2tf Ym9fcmVzZXJ2YXRpb25zKGpvYi0+Ym9zLCBqb2ItPmJvX2NvdW50LCAmYWNxdWlyZV9jdHgpOwor CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcGFuZnJvc3Rfam9iX2NsZWFudXAoc3Ry dWN0IGtyZWYgKnJlZikKK3sKKwlzdHJ1Y3QgcGFuZnJvc3Rfam9iICpqb2IgPSBjb250YWluZXJf b2YocmVmLCBzdHJ1Y3QgcGFuZnJvc3Rfam9iLAorCQkJCQkJcmVmY291bnQpOworCXVuc2lnbmVk IGludCBpOworCisJZG1hX2ZlbmNlX3B1dChqb2ItPmluX2ZlbmNlKTsKKwlkbWFfZmVuY2VfcHV0 KGpvYi0+ZG9uZV9mZW5jZSk7CisJZG1hX2ZlbmNlX3B1dChqb2ItPnJlbmRlcl9kb25lX2ZlbmNl KTsKKworCWZvciAoaSA9IDA7IGkgPCBqb2ItPmJvX2NvdW50OyBpKyspCisJCWRybV9nZW1fb2Jq ZWN0X3B1dF91bmxvY2tlZChqb2ItPmJvc1tpXSk7CisJa3ZmcmVlKGpvYi0+Ym9zKTsKKworCWtm cmVlKGpvYik7Cit9CisKK3ZvaWQgcGFuZnJvc3Rfam9iX3B1dChzdHJ1Y3QgcGFuZnJvc3Rfam9i ICpqb2IpCit7CisJa3JlZl9wdXQoJmpvYi0+cmVmY291bnQsIHBhbmZyb3N0X2pvYl9jbGVhbnVw KTsKK30KKworc3RhdGljIHZvaWQgcGFuZnJvc3Rfam9iX2ZyZWUoc3RydWN0IGRybV9zY2hlZF9q b2IgKnNjaGVkX2pvYikKK3sKKwlzdHJ1Y3QgcGFuZnJvc3Rfam9iICpqb2IgPSB0b19wYW5mcm9z dF9qb2Ioc2NoZWRfam9iKTsKKworCWRybV9zY2hlZF9qb2JfY2xlYW51cChzY2hlZF9qb2IpOwor CisJcGFuZnJvc3Rfam9iX3B1dChqb2IpOworfQorCitzdGF0aWMgc3RydWN0IGRtYV9mZW5jZSAq cGFuZnJvc3Rfam9iX2RlcGVuZGVuY3koc3RydWN0IGRybV9zY2hlZF9qb2IgKnNjaGVkX2pvYiwK KwkJCQkJCSBzdHJ1Y3QgZHJtX3NjaGVkX2VudGl0eSAqc19lbnRpdHkpCit7CisJc3RydWN0IHBh bmZyb3N0X2pvYiAqam9iID0gdG9fcGFuZnJvc3Rfam9iKHNjaGVkX2pvYik7CisJc3RydWN0IGRt YV9mZW5jZSAqZmVuY2U7CisKKwlmZW5jZSA9IGpvYi0+aW5fZmVuY2U7CisJaWYgKGZlbmNlKSB7 CisJCWpvYi0+aW5fZmVuY2UgPSBOVUxMOworCQlyZXR1cm4gZmVuY2U7CisJfQorCisJcmV0dXJu IE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZG1hX2ZlbmNlICpwYW5mcm9zdF9qb2JfcnVuKHN0 cnVjdCBkcm1fc2NoZWRfam9iICpzY2hlZF9qb2IpCit7CisJc3RydWN0IHBhbmZyb3N0X2pvYiAq am9iID0gdG9fcGFuZnJvc3Rfam9iKHNjaGVkX2pvYik7CisJc3RydWN0IHBhbmZyb3N0X2Rldmlj ZSAqcGZkZXYgPSBqb2ItPnBmZGV2OworCWludCBzbG90ID0gcGFuZnJvc3Rfam9iX2dldF9zbG90 KGpvYik7CisJc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UgPSBOVUxMOworCisJaWYgKHVubGlrZWx5 KGpvYi0+YmFzZS5zX2ZlbmNlLT5maW5pc2hlZC5lcnJvcikpCisJCXJldHVybiBOVUxMOworCisJ cGZkZXYtPmpvYnNbc2xvdF0gPSBqb2I7CisKKwlmZW5jZSA9IHBhbmZyb3N0X2ZlbmNlX2NyZWF0 ZShwZmRldiwgc2xvdCk7CisJaWYgKElTX0VSUihmZW5jZSkpCisJCXJldHVybiBOVUxMOworCisJ aWYgKGpvYi0+ZG9uZV9mZW5jZSkKKwkJZG1hX2ZlbmNlX3B1dChqb2ItPmRvbmVfZmVuY2UpOwor CWpvYi0+ZG9uZV9mZW5jZSA9IGRtYV9mZW5jZV9nZXQoZmVuY2UpOworCisJcGFuZnJvc3Rfam9i X2h3X3N1Ym1pdChqb2IsIHNsb3QpOworCisJcmV0dXJuIGZlbmNlOworfQorCitzdGF0aWMgdm9p ZCBwYW5mcm9zdF9qb2JfdGltZWRvdXQoc3RydWN0IGRybV9zY2hlZF9qb2IgKnNjaGVkX2pvYikK K3sKKwlzdHJ1Y3QgcGFuZnJvc3Rfam9iICpqb2IgPSB0b19wYW5mcm9zdF9qb2Ioc2NoZWRfam9i KTsKKwlzdHJ1Y3QgcGFuZnJvc3RfZGV2aWNlICpwZmRldiA9IGpvYi0+cGZkZXY7CisJaW50IGpz ID0gcGFuZnJvc3Rfam9iX2dldF9zbG90KGpvYik7CisKKwlqb2Jfd3JpdGUocGZkZXYsIEpTX0NP TU1BTkRfTkVYVChqcyksIEpTX0NPTU1BTkRfTk9QKTsKKworCWpvYl93cml0ZShwZmRldiwgSlNf Q09NTUFORChqcyksIEpTX0NPTU1BTkRfSEFSRF9TVE9QXzApOworCWRldl9lcnIocGZkZXYtPmRl diwgImdwdSBzY2hlZCB0aW1lb3V0LCBqcz0lZCwgc3RhdHVzPTB4JXgsIGhlYWQ9MHgleCwgdGFp bD0weCV4IiwKKwkJanMsCisJCWpvYl9yZWFkKHBmZGV2LCBKU19TVEFUVVMoanMpKSwKKwkJam9i X3JlYWQocGZkZXYsIEpTX0hFQURfTE8oanMpKSwKKwkJam9iX3JlYWQocGZkZXYsIEpTX1RBSUxf TE8oanMpKSk7CisKKwlpZiAoam9iX3JlYWQocGZkZXYsIEpTX1NUQVRVUyhqcykpID09IDgpIHsK Ky8vCQlkZXZfZXJyKHBmZGV2LT5kZXYsICJyZXNldGluZyBncHUiKTsKKy8vCQlwYW5mcm9zdF9n cHVfcmVzZXQocGZkZXYpOworCX0KKworCS8qIEZvciBub3csIGp1c3Qgc2F5IHdlJ3JlIGRvbmUu IE5vIHJlc2V0IGFuZCByZXRyeS4gKi8KKy8vCWpvYl93cml0ZShwZmRldiwgSlNfQ09NTUFORChq cyksIEpTX0NPTU1BTkRfSEFSRF9TVE9QKTsKKwlkbWFfZmVuY2Vfc2lnbmFsKGpvYi0+ZG9uZV9m ZW5jZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3NjaGVkX2JhY2tlbmRfb3BzIHBh bmZyb3N0X3NjaGVkX29wcyA9IHsKKwkuZGVwZW5kZW5jeSA9IHBhbmZyb3N0X2pvYl9kZXBlbmRl bmN5LAorCS5ydW5fam9iID0gcGFuZnJvc3Rfam9iX3J1biwKKwkudGltZWRvdXRfam9iID0gcGFu ZnJvc3Rfam9iX3RpbWVkb3V0LAorCS5mcmVlX2pvYiA9IHBhbmZyb3N0X2pvYl9mcmVlCit9Owor CitzdGF0aWMgY29uc3QgY2hhciAqam9iX2V4Y2VwdGlvbl9uYW1lKHUzMiBleGNlcHRpb25fY29k ZSkKK3sKKwlzd2l0Y2ggKGV4Y2VwdGlvbl9jb2RlKSB7CisJCS8qIE5vbi1GYXVsdCBTdGF0dXMg Y29kZSAqLworCWNhc2UgMHgwMDogcmV0dXJuICJOT1RfU1RBUlRFRC9JRExFL09LIjsKKwljYXNl IDB4MDE6IHJldHVybiAiRE9ORSI7CisJY2FzZSAweDAyOiByZXR1cm4gIklOVEVSUlVQVEVEIjsK KwljYXNlIDB4MDM6IHJldHVybiAiU1RPUFBFRCI7CisJY2FzZSAweDA0OiByZXR1cm4gIlRFUk1J TkFURUQiOworCWNhc2UgMHgwODogcmV0dXJuICJBQ1RJVkUiOworCQkvKiBKb2IgZXhjZXB0aW9u cyAqLworCWNhc2UgMHg0MDogcmV0dXJuICJKT0JfQ09ORklHX0ZBVUxUIjsKKwljYXNlIDB4NDE6 IHJldHVybiAiSk9CX1BPV0VSX0ZBVUxUIjsKKwljYXNlIDB4NDI6IHJldHVybiAiSk9CX1JFQURf RkFVTFQiOworCWNhc2UgMHg0MzogcmV0dXJuICJKT0JfV1JJVEVfRkFVTFQiOworCWNhc2UgMHg0 NDogcmV0dXJuICJKT0JfQUZGSU5JVFlfRkFVTFQiOworCWNhc2UgMHg0ODogcmV0dXJuICJKT0Jf QlVTX0ZBVUxUIjsKKwljYXNlIDB4NTA6IHJldHVybiAiSU5TVFJfSU5WQUxJRF9QQyI7CisJY2Fz ZSAweDUxOiByZXR1cm4gIklOU1RSX0lOVkFMSURfRU5DIjsKKwljYXNlIDB4NTI6IHJldHVybiAi SU5TVFJfVFlQRV9NSVNNQVRDSCI7CisJY2FzZSAweDUzOiByZXR1cm4gIklOU1RSX09QRVJBTkRf RkFVTFQiOworCWNhc2UgMHg1NDogcmV0dXJuICJJTlNUUl9UTFNfRkFVTFQiOworCWNhc2UgMHg1 NTogcmV0dXJuICJJTlNUUl9CQVJSSUVSX0ZBVUxUIjsKKwljYXNlIDB4NTY6IHJldHVybiAiSU5T VFJfQUxJR05fRkFVTFQiOworCWNhc2UgMHg1ODogcmV0dXJuICJEQVRBX0lOVkFMSURfRkFVTFQi OworCWNhc2UgMHg1OTogcmV0dXJuICJUSUxFX1JBTkdFX0ZBVUxUIjsKKwljYXNlIDB4NUE6IHJl dHVybiAiQUREUl9SQU5HRV9GQVVMVCI7CisJY2FzZSAweDYwOiByZXR1cm4gIk9VVF9PRl9NRU1P UlkiOworCX0KKworCXJldHVybiAiVU5LTk9XTiI7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBw YW5mcm9zdF9qb2JfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qg cGFuZnJvc3RfZGV2aWNlICpwZmRldiA9IGRhdGE7CisJdTMyIHN0YXR1cyA9IGpvYl9yZWFkKHBm ZGV2LCBKT0JfSU5UX1NUQVQpOworCWludCBqOworCisJZGV2X2RiZyhwZmRldi0+ZGV2LCAiam9i c2xvdCBpcnEgc3RhdHVzPSV4XG4iLCBzdGF0dXMpOworCisJaWYgKCFzdGF0dXMpCisJCXJldHVy biBJUlFfTk9ORTsKKworCWZvciAoaiA9IDA7IHN0YXR1czsgaisrKSB7CisJCXUzMiBtYXNrID0g KDEgPDwgaikgfCAoMSA8PCAoaiArIDE2KSk7CisKKwkJaWYgKCEoc3RhdHVzICYgbWFzaykpCisJ CQljb250aW51ZTsKKworCQlqb2Jfd3JpdGUocGZkZXYsIEpPQl9JTlRfQ0xFQVIsIG1hc2spOwor CisJCWlmIChzdGF0dXMgJiBCSVQoaiArIDE2KSkgeworCQkJam9iX3dyaXRlKHBmZGV2LCBKU19D T01NQU5EX05FWFQoaiksIEpTX0NPTU1BTkRfTk9QKTsKKwkJCWpvYl93cml0ZShwZmRldiwgSlNf Q09NTUFORChqKSwgSlNfQ09NTUFORF9IQVJEX1NUT1BfMCk7CisKKwkJCWRldl9lcnIocGZkZXYt PmRldiwgImpzIGZhdWx0LCBqcz0lZCwgc3RhdHVzPSVzLCBoZWFkPTB4JXgsIHRhaWw9MHgleCIs CisJCQkJaiwKKwkJCQlqb2JfZXhjZXB0aW9uX25hbWUoam9iX3JlYWQocGZkZXYsIEpTX1NUQVRV UyhqKSkpLAorCQkJCWpvYl9yZWFkKHBmZGV2LCBKU19IRUFEX0xPKGopKSwKKwkJCQlqb2JfcmVh ZChwZmRldiwgSlNfVEFJTF9MTyhqKSkpOworCQl9CisKKwkJaWYgKHN0YXR1cyAmIEJJVChqKSkg eworCQkJZG1hX2ZlbmNlX3NpZ25hbChwZmRldi0+am9ic1tqXS0+ZG9uZV9mZW5jZSk7CisJCX0K KworCQlzdGF0dXMgJj0gfm1hc2s7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitp bnQgcGFuZnJvc3Rfam9iX2luaXQoc3RydWN0IHBhbmZyb3N0X2RldmljZSAqcGZkZXYpCit7CisJ c3RydWN0IHBhbmZyb3N0X2pvYl9zbG90ICpqczsKKwlpbnQgcmV0LCBqLCBpcnE7CisKKwlwZmRl di0+anMgPSBqcyA9IGRldm1fa3phbGxvYyhwZmRldi0+ZGV2LCBzaXplb2YoKmpzKSwgR0ZQX0tF Uk5FTCk7CisJaWYgKCFqcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcGluX2xvY2tfaW5pdCgm anMtPmpvYl9sb2NrKTsKKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHRvX3BsYXRm b3JtX2RldmljZShwZmRldi0+ZGV2KSwgImpvYiIpOworCWlmIChpcnEgPD0gMCkKKwkJcmV0dXJu IC1FTk9ERVY7CisKKwlyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKHBmZGV2LT5kZXYsIGlycSwgcGFu ZnJvc3Rfam9iX2lycV9oYW5kbGVyLAorCQkJICAgICAgIElSUUZfU0hBUkVELCAiam9iIiwgcGZk ZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihwZmRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlcXVl c3Qgam9iIGlycSIpOworCQlyZXR1cm4gcmV0OworCX0KKwlqb2Jfd3JpdGUocGZkZXYsIEpPQl9J TlRfQ0xFQVIsIDB4NzAwMDcpOworCWpvYl93cml0ZShwZmRldiwgSk9CX0lOVF9NQVNLLCAweDcw MDA3KTsKKworCWZvciAoaiA9IDA7IGogPCBOVU1fSk9CX1NMT1RTOyBqKyspIHsKKwkJanMtPnF1 ZXVlW2pdLmZlbmNlX2NvbnRleHQgPSBkbWFfZmVuY2VfY29udGV4dF9hbGxvYygxKTsKKworCQly ZXQgPSBkcm1fc2NoZWRfaW5pdCgmanMtPnF1ZXVlW2pdLnNjaGVkLAorCQkJCSAgICAgJnBhbmZy b3N0X3NjaGVkX29wcywKKwkJCQkgICAgIDEsIDAsIG1zZWNzX3RvX2ppZmZpZXMoNTAwKSwKKwkJ CQkgICAgICJwYW5fanMiKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycihwZmRldi0+ZGV2LCAi RmFpbGVkIHRvIGNyZWF0ZSBzY2hlZHVsZXI6ICVkLiIsIHJldCk7CisJCQlnb3RvIGVycl9zY2hl ZDsKKwkJfQorCX0KKworCXJldHVybiAwOworCitlcnJfc2NoZWQ6CisJZm9yIChqLS07IGogPj0g MDsgai0tKQorCQlkcm1fc2NoZWRfZmluaSgmanMtPnF1ZXVlW2pdLnNjaGVkKTsKKworCXJldHVy biByZXQ7Cit9CisKK3ZvaWQgcGFuZnJvc3Rfam9iX2Zpbmkoc3RydWN0IHBhbmZyb3N0X2Rldmlj ZSAqcGZkZXYpCit7CisJc3RydWN0IHBhbmZyb3N0X2pvYl9zbG90ICpqcyA9IHBmZGV2LT5qczsK KwlpbnQgajsKKworCWZvciAoaiA9IDA7IGogPCBOVU1fSk9CX1NMT1RTOyBqKyspCisJCWRybV9z Y2hlZF9maW5pKCZqcy0+cXVldWVbal0uc2NoZWQpOworCit9CisKK3ZvaWQgcGFuZnJvc3Rfam9i X29wZW4oc3RydWN0IHBhbmZyb3N0X2ZpbGVfcHJpdiAqcGFuZnJvc3RfcHJpdikKK3sKKwlzdHJ1 Y3QgcGFuZnJvc3RfZGV2aWNlICpwZmRldiA9IHBhbmZyb3N0X3ByaXYtPnBmZGV2OworCXN0cnVj dCBwYW5mcm9zdF9qb2Jfc2xvdCAqanMgPSBwZmRldi0+anM7CisJc3RydWN0IGRybV9zY2hlZF9y cSAqcnE7CisJaW50IHJldCwgaTsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fSk9CX1NMT1RTOyBp KyspIHsKKwkJcnEgPSAmanMtPnF1ZXVlW2ldLnNjaGVkLnNjaGVkX3JxW0RSTV9TQ0hFRF9QUklP UklUWV9OT1JNQUxdOworCQlyZXQgPSBkcm1fc2NoZWRfZW50aXR5X2luaXQoJnBhbmZyb3N0X3By aXYtPnNjaGVkX2VudGl0eVtpXSwgJnJxLCAxLCBOVUxMKTsKKwkJV0FSTl9PTihyZXQpOworCX0K K30KKwordm9pZCBwYW5mcm9zdF9qb2JfY2xvc2Uoc3RydWN0IHBhbmZyb3N0X2ZpbGVfcHJpdiAq cGFuZnJvc3RfcHJpdikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fSk9CX1NM T1RTOyBpKyspIHsKKwkJZHJtX3NjaGVkX2VudGl0eV9kZXN0cm95KCZwYW5mcm9zdF9wcml2LT5z Y2hlZF9lbnRpdHlbaV0pOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wYW5m cm9zdC9wYW5mcm9zdF9qb2IuaCBiL2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9q b2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmNjZWI2ZTY1NWU0 YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9q b2IuaApAQCAtMCwwICsxLDQ3IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MCAqLworLyogQ29weXJpZ2h0IDIwMTkgQ29sbGFib3JhIGx0ZC4gKi8KKworI2lmbmRlZiBfX1BB TkZST1NUX0pPQl9IX18KKyNkZWZpbmUgX19QQU5GUk9TVF9KT0JfSF9fCisKKyNpbmNsdWRlIDx1 YXBpL2RybS9wYW5mcm9zdF9kcm0uaD4KKyNpbmNsdWRlIDxkcm0vZ3B1X3NjaGVkdWxlci5oPgor CisjZGVmaW5lIE5VTV9KT0JfU0xPVFMJMgkvKiBEb24ndCBuZWVkIDNyZCBvbmUgdW50aWwgd2Ug aGF2ZSBjb21wdXRlIHN1cHBvcnQgKi8KKworc3RydWN0IHBhbmZyb3N0X2RldmljZTsKK3N0cnVj dCBwYW5mcm9zdF9nZW1fb2JqZWN0Oworc3RydWN0IHBhbmZyb3N0X2ZpbGVfcHJpdjsKKworc3Ry dWN0IHBhbmZyb3N0X2pvYiB7CisJc3RydWN0IGRybV9zY2hlZF9qb2IgYmFzZTsKKworCXN0cnVj dCBrcmVmIHJlZmNvdW50OworCisJc3RydWN0IHBhbmZyb3N0X2RldmljZSAqcGZkZXY7CisJc3Ry dWN0IHBhbmZyb3N0X2ZpbGVfcHJpdiAqZmlsZV9wcml2OworCisJLyogQW4gb3B0aW9uYWwgZmVu Y2UgdXNlcnNwYWNlIGNhbiBwYXNzIGluIGZvciB0aGUgam9iIHRvIGRlcGVuZCBvbi4gKi8KKwlz dHJ1Y3QgZG1hX2ZlbmNlICppbl9mZW5jZTsKKworCS8qIGZlbmNlIHRvIGJlIHNpZ25hbGVkIGJ5 IElSUSBoYW5kbGVyIHdoZW4gdGhlIGpvYiBpcyBjb21wbGV0ZS4gKi8KKwlzdHJ1Y3QgZG1hX2Zl bmNlICpkb25lX2ZlbmNlOworCisJX191NjQgamM7CisJX191MzIgcmVxdWlyZW1lbnRzOworCV9f dTMyIGZsdXNoX2lkOworCisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICoqYm9zOworCXUzMiBib19j b3VudDsKKworCXN0cnVjdCBkbWFfZmVuY2UgKnJlbmRlcl9kb25lX2ZlbmNlOworfTsKKworaW50 IHBhbmZyb3N0X2pvYl9pbml0KHN0cnVjdCBwYW5mcm9zdF9kZXZpY2UgKnBmZGV2KTsKK3ZvaWQg cGFuZnJvc3Rfam9iX2Zpbmkoc3RydWN0IHBhbmZyb3N0X2RldmljZSAqcGZkZXYpOwordm9pZCBw YW5mcm9zdF9qb2Jfb3BlbihzdHJ1Y3QgcGFuZnJvc3RfZmlsZV9wcml2ICpwYW5mcm9zdF9wcml2 KTsKK3ZvaWQgcGFuZnJvc3Rfam9iX2Nsb3NlKHN0cnVjdCBwYW5mcm9zdF9maWxlX3ByaXYgKnBh bmZyb3N0X3ByaXYpOworaW50IHBhbmZyb3N0X2pvYl9wdXNoKHN0cnVjdCBwYW5mcm9zdF9qb2Ig KmpvYik7Cit2b2lkIHBhbmZyb3N0X2pvYl9wdXQoc3RydWN0IHBhbmZyb3N0X2pvYiAqam9iKTsK KworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3Rf bW11LmMgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfbW11LmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4xMDdkNzM0MDUwZjMKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfbW11LmMKQEAgLTAsMCAr MSw0MDkgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wCisvKiBDb3B5cmln aHQgMjAxOSBMaW5hcm8sIEx0ZCwgUm9iIEhlcnJpbmcgPHJvYmhAa2VybmVsLm9yZz4gKi8KKwor I2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Cisj aW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby1wZ3RhYmxlLmg+CisjaW5j bHVkZSA8bGludXgvaW9tbXUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4K KworI2luY2x1ZGUgInBhbmZyb3N0X2RldmljZS5oIgorI2luY2x1ZGUgInBhbmZyb3N0X21tdS5o IgorI2luY2x1ZGUgInBhbmZyb3N0X2dlbS5oIgorI2luY2x1ZGUgInBhbmZyb3N0X2ZlYXR1cmVz LmgiCisKKyNkZWZpbmUgTU1VX0JBU0UgMHgyMDAwCisKKy8qIE1NVSByZWdzICovCisjZGVmaW5l IE1NVV9JTlRfUkFXU1RBVAkJCTB4MDAKKyNkZWZpbmUgTU1VX0lOVF9DTEVBUgkJCTB4MDQKKyNk ZWZpbmUgTU1VX0lOVF9NQVNLCQkJMHgwOAorI2RlZmluZSBNTVVfSU5UX1NUQVQJCQkweDBjCisK Ky8qIEFTX0NPTU1BTkQgcmVnaXN0ZXIgY29tbWFuZHMgKi8KKyNkZWZpbmUgQVNfQ09NTUFORF9O T1AgICAgICAgICAweDAwCS8qIE5PUCBPcGVyYXRpb24gKi8KKyNkZWZpbmUgQVNfQ09NTUFORF9V UERBVEUgICAgICAweDAxCS8qIEJyb2FkY2FzdHMgdGhlIHZhbHVlcyBpbiBBU19UUkFOU1RBQiBh bmQgQVNuX01FTUFUVFIgdG8gYWxsIE1NVXMgKi8KKyNkZWZpbmUgQVNfQ09NTUFORF9MT0NLICAg ICAgICAweDAyCS8qIElzc3VlIGEgbG9jayByZWdpb24gY29tbWFuZCB0byBhbGwgTU1VcyAqLwor I2RlZmluZSBBU19DT01NQU5EX1VOTE9DSyAgICAgIDB4MDMJLyogSXNzdWUgYSBmbHVzaCByZWdp b24gY29tbWFuZCB0byBhbGwgTU1VcyAqLworI2RlZmluZSBBU19DT01NQU5EX0ZMVVNIICAgICAg IDB4MDQJLyogRmx1c2ggYWxsIEwyIGNhY2hlcyB0aGVuIGlzc3VlIGEgZmx1c2ggcmVnaW9uIGNv bW1hbmQgdG8gYWxsIE1NVXMKKwkJCQkJICAgKGRlcHJlY2F0ZWQgLSBvbmx5IGZvciB1c2Ugd2l0 aCBUNjB4KSAqLworI2RlZmluZSBBU19DT01NQU5EX0ZMVVNIX1BUICAgIDB4MDQJLyogRmx1c2gg YWxsIEwyIGNhY2hlcyB0aGVuIGlzc3VlIGEgZmx1c2ggcmVnaW9uIGNvbW1hbmQgdG8gYWxsIE1N VXMgKi8KKyNkZWZpbmUgQVNfQ09NTUFORF9GTFVTSF9NRU0gICAweDA1CS8qIFdhaXQgZm9yIG1l bW9yeSBhY2Nlc3NlcyB0byBjb21wbGV0ZSwgZmx1c2ggYWxsIHRoZSBMMXMgY2FjaGUgdGhlbgor CQkJCQkgICBmbHVzaCBhbGwgTDIgY2FjaGVzIHRoZW4gaXNzdWUgYSBmbHVzaCByZWdpb24gY29t bWFuZCB0byBhbGwgTU1VcyAqLworCisjZGVmaW5lIE1NVV9BUyhhcykJCQkoMHg0MDAgKyAoKGFz KSA8PCA2KSkKKworI2RlZmluZSBBU19UUkFOU1RBQl9MTyhhcykJCShNTVVfQVMoYXMpICsgMHgw MCkgLyogKFJXKSBUcmFuc2xhdGlvbiBUYWJsZSBCYXNlIEFkZHJlc3MgZm9yIGFkZHJlc3Mgc3Bh Y2UgbiwgbG93IHdvcmQgKi8KKyNkZWZpbmUgQVNfVFJBTlNUQUJfSEkoYXMpCQkoTU1VX0FTKGFz KSArIDB4MDQpIC8qIChSVykgVHJhbnNsYXRpb24gVGFibGUgQmFzZSBBZGRyZXNzIGZvciBhZGRy ZXNzIHNwYWNlIG4sIGhpZ2ggd29yZCAqLworI2RlZmluZSBBU19NRU1BVFRSX0xPKGFzKQkJKE1N VV9BUyhhcykgKyAweDA4KSAvKiAoUlcpIE1lbW9yeSBhdHRyaWJ1dGVzIGZvciBhZGRyZXNzIHNw YWNlIG4sIGxvdyB3b3JkLiAqLworI2RlZmluZSBBU19NRU1BVFRSX0hJKGFzKQkJKE1NVV9BUyhh cykgKyAweDBDKSAvKiAoUlcpIE1lbW9yeSBhdHRyaWJ1dGVzIGZvciBhZGRyZXNzIHNwYWNlIG4s IGhpZ2ggd29yZC4gKi8KKyNkZWZpbmUgQVNfTE9DS0FERFJfTE8oYXMpCQkoTU1VX0FTKGFzKSAr IDB4MTApIC8qIChSVykgTG9jayByZWdpb24gYWRkcmVzcyBmb3IgYWRkcmVzcyBzcGFjZSBuLCBs b3cgd29yZCAqLworI2RlZmluZSBBU19MT0NLQUREUl9ISShhcykJCShNTVVfQVMoYXMpICsgMHgx NCkgLyogKFJXKSBMb2NrIHJlZ2lvbiBhZGRyZXNzIGZvciBhZGRyZXNzIHNwYWNlIG4sIGhpZ2gg d29yZCAqLworI2RlZmluZSBBU19DT01NQU5EKGFzKQkJCShNTVVfQVMoYXMpICsgMHgxOCkgLyog KFdPKSBNTVUgY29tbWFuZCByZWdpc3RlciBmb3IgYWRkcmVzcyBzcGFjZSBuICovCisjZGVmaW5l IEFTX0ZBVUxUU1RBVFVTKGFzKQkJKE1NVV9BUyhhcykgKyAweDFDKSAvKiAoUk8pIE1NVSBmYXVs dCBzdGF0dXMgcmVnaXN0ZXIgZm9yIGFkZHJlc3Mgc3BhY2UgbiAqLworI2RlZmluZSBBU19GQVVM VEFERFJFU1NfTE8oYXMpCQkoTU1VX0FTKGFzKSArIDB4MjApIC8qIChSTykgRmF1bHQgQWRkcmVz cyBmb3IgYWRkcmVzcyBzcGFjZSBuLCBsb3cgd29yZCAqLworI2RlZmluZSBBU19GQVVMVEFERFJF U1NfSEkoYXMpCQkoTU1VX0FTKGFzKSArIDB4MjQpIC8qIChSTykgRmF1bHQgQWRkcmVzcyBmb3Ig YWRkcmVzcyBzcGFjZSBuLCBoaWdoIHdvcmQgKi8KKyNkZWZpbmUgQVNfU1RBVFVTKGFzKQkJCShN TVVfQVMoYXMpICsgMHgyOCkgLyogKFJPKSBTdGF0dXMgZmxhZ3MgZm9yIGFkZHJlc3Mgc3BhY2Ug biAqLworCisvKiAoUlcpIFRyYW5zbGF0aW9uIHRhYmxlIGNvbmZpZ3VyYXRpb24gZm9yIGFkZHJl c3Mgc3BhY2UgbiwgbG93IHdvcmQgKi8KKyNkZWZpbmUgQVNfVFJBTlNDRkdfTE8gICAgICAgICAw eDMwCisvKiAoUlcpIFRyYW5zbGF0aW9uIHRhYmxlIGNvbmZpZ3VyYXRpb24gZm9yIGFkZHJlc3Mg c3BhY2UgbiwgaGlnaCB3b3JkICovCisjZGVmaW5lIEFTX1RSQU5TQ0ZHX0hJICAgICAgICAgMHgz NAorLyogKFJPKSBTZWNvbmRhcnkgZmF1bHQgYWRkcmVzcyBmb3IgYWRkcmVzcyBzcGFjZSBuLCBs b3cgd29yZCAqLworI2RlZmluZSBBU19GQVVMVEVYVFJBX0xPICAgICAgIDB4MzgKKy8qIChSTykg U2Vjb25kYXJ5IGZhdWx0IGFkZHJlc3MgZm9yIGFkZHJlc3Mgc3BhY2UgbiwgaGlnaCB3b3JkICov CisjZGVmaW5lIEFTX0ZBVUxURVhUUkFfSEkgICAgICAgMHgzQworCisvKgorICogQmVnaW4gTFBB RSBNTVUgVFJBTlNUQUIgcmVnaXN0ZXIgdmFsdWVzCisgKi8KKyNkZWZpbmUgQVNfVFJBTlNUQUJf TFBBRV9BRERSX1NQQUNFX01BU0sgICAweGZmZmZmZmZmZmZmZmYwMDAKKyNkZWZpbmUgQVNfVFJB TlNUQUJfTFBBRV9BRFJNT0RFX1VOTUFQUEVEICAoMHUgPDwgMCkKKyNkZWZpbmUgQVNfVFJBTlNU QUJfTFBBRV9BRFJNT0RFX0lERU5USVRZICAoMXUgPDwgMSkKKyNkZWZpbmUgQVNfVFJBTlNUQUJf TFBBRV9BRFJNT0RFX1RBQkxFICAgICAoM3UgPDwgMCkKKyNkZWZpbmUgQVNfVFJBTlNUQUJfTFBB RV9SRUFEX0lOTkVSICAgICAgICAoMXUgPDwgMikKKyNkZWZpbmUgQVNfVFJBTlNUQUJfTFBBRV9T SEFSRV9PVVRFUiAgICAgICAoMXUgPDwgNCkKKworI2RlZmluZSBBU19UUkFOU1RBQl9MUEFFX0FE Uk1PREVfTUFTSyAgICAgIDB4MDAwMDAwMDMKKworI2RlZmluZSBBU19TVEFUVVNfQVNfQUNUSVZF IDB4MDEKKworI2RlZmluZSBBU19GQVVMVFNUQVRVU19BQ0NFU1NfVFlQRV9NQVNLICAgICAgICAg ICAgICAgICAgKDB4Mzw8OCkKKyNkZWZpbmUgQVNfRkFVTFRTVEFUVVNfQUNDRVNTX1RZUEVfQVRP TUlDICAgICAgICAgICAgICAgICgweDA8PDgpCisjZGVmaW5lIEFTX0ZBVUxUU1RBVFVTX0FDQ0VT U19UWVBFX0VYICAgICAgICAgICAgICAgICAgICAoMHgxPDw4KQorI2RlZmluZSBBU19GQVVMVFNU QVRVU19BQ0NFU1NfVFlQRV9SRUFEICAgICAgICAgICAgICAgICAgKDB4Mjw8OCkKKyNkZWZpbmUg QVNfRkFVTFRTVEFUVVNfQUNDRVNTX1RZUEVfV1JJVEUgICAgICAgICAgICAgICAgICgweDM8PDgp CisKKworI2RlZmluZSBtbXVfd3JpdGUoZGV2LCByZWcsIGRhdGEpIHdyaXRlbChkYXRhLCBkZXYt PmlvbWVtICsgTU1VX0JBU0UgKyByZWcpCisjZGVmaW5lIG1tdV9yZWFkKGRldiwgcmVnKSByZWFk bChkZXYtPmlvbWVtICsgTU1VX0JBU0UgKyByZWcpCisKK3N0cnVjdCBwYW5mcm9zdF9tbXUgewor CXN0cnVjdCBpb19wZ3RhYmxlX29wcyAqcGd0Ymxfb3BzOworCXN0cnVjdCBtdXRleCBsb2NrOwor fTsKKworc3RhdGljIGludCB3YWl0X3JlYWR5KHN0cnVjdCBwYW5mcm9zdF9kZXZpY2UgKnBmZGV2 LCB1MzIgYXNfbnIpCit7CisJdW5zaWduZWQgaW50IG1heF9sb29wcyA9IDEwMDAwOworCXUzMiB2 YWw7CisKKwkvKiBXYWl0IGZvciB0aGUgTU1VIHN0YXR1cyB0byBpbmRpY2F0ZSB0aGVyZSBpcyBu byBhY3RpdmUgY29tbWFuZCwgaW4KKwkgKiBjYXNlIG9uZSBpcyBwZW5kaW5nLiBEbyBub3QgbG9n IHJlbWFpbmluZyByZWdpc3RlciBhY2Nlc3Nlcy4gKi8KKwlkbyB7CisJCXZhbCA9IG1tdV9yZWFk KHBmZGV2LCBBU19TVEFUVVMoYXNfbnIpKTsKKwkJaWYgKCEodmFsICYgQVNfU1RBVFVTX0FTX0FD VElWRSkpCisJCQlicmVhazsKKworCQl1ZGVsYXkoMSk7CisJfSB3aGlsZSAoLS1tYXhfbG9vcHMp OworCisJaWYgKG1heF9sb29wcyA9PSAwKSB7CisJCWRldl9lcnIocGZkZXYtPmRldiwgIkFTX0FD VElWRSBiaXQgc3R1Y2tcbiIpOworCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwl9CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludCB3cml0ZV9jbWQoc3RydWN0IHBhbmZyb3N0X2RldmljZSAqcGZk ZXYsIHUzMiBhc19uciwgdTMyIGNtZCkKK3sKKwlpbnQgc3RhdHVzOworCisJLyogd3JpdGUgQVNf Q09NTUFORCB3aGVuIE1NVSBpcyByZWFkeSB0byBhY2NlcHQgYW5vdGhlciBjb21tYW5kICovCisJ c3RhdHVzID0gd2FpdF9yZWFkeShwZmRldiwgYXNfbnIpOworCWlmICghc3RhdHVzKQorCQltbXVf d3JpdGUocGZkZXYsIEFTX0NPTU1BTkQoYXNfbnIpLCBjbWQpOworCisJcmV0dXJuIHN0YXR1czsK K30KKworc3RhdGljIHZvaWQgbG9ja19yZWdpb24oc3RydWN0IHBhbmZyb3N0X2RldmljZSAqcGZk ZXYsIHUzMiBhc19uciwKKwkJCXU2NCBpb3ZhLCBzaXplX3Qgc2l6ZSkKK3sKKwl1OCByZWdpb25f d2lkdGg7CisJdTY0IHJlZ2lvbiA9IGlvdmEgJiBQQUdFX01BU0s7CisJLyoKKwkgKiBmbHMgcmV0 dXJucyAoZ2l2ZW4gdGhlIEFTU0VSVCBhYm92ZSk6CisJICogMSAuLiAzMgorCSAqCisJICogMTAg KyBmbHMobnVtX3BhZ2VzKQorCSAqIHJlc3VsdHMgaW4gdGhlIHJhbmdlICgxMSAuLiA0MikKKwkg Ki8KKworCXNpemUgPSByb3VuZF91cChzaXplLCBQQUdFX1NJWkUpOworCisJcmVnaW9uX3dpZHRo ID0gMTAgKyBmbHMoc2l6ZSA+PiBQQUdFX1NISUZUKTsKKwlpZiAoKHNpemUgPj4gUEFHRV9TSElG VCkgIT0gKDF1bCA8PCAocmVnaW9uX3dpZHRoIC0gMTEpKSkgeworCQkvKiBub3QgcG93Miwgc28g bXVzdCBnbyB1cCB0byB0aGUgbmV4dCBwb3cyICovCisJCXJlZ2lvbl93aWR0aCArPSAxOworCX0K KwlyZWdpb24gfD0gcmVnaW9uX3dpZHRoOworCisJLyogTG9jayB0aGUgcmVnaW9uIHRoYXQgbmVl ZHMgdG8gYmUgdXBkYXRlZCAqLworCW1tdV93cml0ZShwZmRldiwgQVNfTE9DS0FERFJfTE8oYXNf bnIpLCByZWdpb24gJiAweEZGRkZGRkZGVUwpOworCW1tdV93cml0ZShwZmRldiwgQVNfTE9DS0FE RFJfSEkoYXNfbnIpLCAocmVnaW9uID4+IDMyKSAmIDB4RkZGRkZGRkZVTCk7CisJd3JpdGVfY21k KHBmZGV2LCBhc19uciwgQVNfQ09NTUFORF9MT0NLKTsKK30KKworCitzdGF0aWMgaW50IG1tdV9o d19kb19vcGVyYXRpb24oc3RydWN0IHBhbmZyb3N0X2RldmljZSAqcGZkZXYsIHUzMiBhc19uciwK KwkJdTY0IGlvdmEsIHNpemVfdCBzaXplLCB1MzIgb3ApCit7CisJaWYgKG9wICE9IEFTX0NPTU1B TkRfVU5MT0NLKQorCQlsb2NrX3JlZ2lvbihwZmRldiwgYXNfbnIsIGlvdmEsIHNpemUpOworCisJ LyogUnVuIHRoZSBNTVUgb3BlcmF0aW9uICovCisJd3JpdGVfY21kKHBmZGV2LCBhc19uciwgb3Ap OworCisJLyogV2FpdCBmb3IgdGhlIGZsdXNoIHRvIGNvbXBsZXRlICovCisJcmV0dXJuIHdhaXRf cmVhZHkocGZkZXYsIGFzX25yKTsKK30KKworc3RhdGljIHZvaWQgbW11X2VuYWJsZShzdHJ1Y3Qg cGFuZnJvc3RfZGV2aWNlICpwZmRldiwgdTMyIGFzX25yLCB1NjQgcGd0X2Jhc2UsIHU2NCBtZW1f YXR0cikKK3sKKy8vCWlmIChrYmRldi0+c3lzdGVtX2NvaGVyZW5jeSA9PSBDT0hFUkVOQ1lfQUNF KQorLy8JCWN1cnJlbnRfc2V0dXAtPnRyYW5zdGFiIHw9IEFTX1RSQU5TVEFCX0xQQUVfU0hBUkVf T1VURVI7CisKKwlwZ3RfYmFzZSAmPSBBU19UUkFOU1RBQl9MUEFFX0FERFJfU1BBQ0VfTUFTSzsK KwlwZ3RfYmFzZSB8PSBBU19UUkFOU1RBQl9MUEFFX0FEUk1PREVfVEFCTEUgfCBBU19UUkFOU1RB Ql9MUEFFX1JFQURfSU5ORVI7CisJbW11X3dyaXRlKHBmZGV2LCBBU19UUkFOU1RBQl9MTyhhc19u ciksIHBndF9iYXNlICYgMHhmZmZmZmZmZlVMKTsKKwltbXVfd3JpdGUocGZkZXYsIEFTX1RSQU5T VEFCX0hJKGFzX25yKSwgcGd0X2Jhc2UgPj4gMzIpOworCisJbW11X3dyaXRlKHBmZGV2LCBBU19N RU1BVFRSX0xPKGFzX25yKSwgbWVtX2F0dHIgJiAweGZmZmZmZmZmVUwpOworCW1tdV93cml0ZShw ZmRldiwgQVNfTUVNQVRUUl9ISShhc19uciksIG1lbV9hdHRyID4+IDMyKTsKKworCXdyaXRlX2Nt ZChwZmRldiwgYXNfbnIsIEFTX0NPTU1BTkRfVVBEQVRFKTsKK30KKworCitpbnQgcGFuZnJvc3Rf bW11X21hcChzdHJ1Y3QgcGFuZnJvc3RfZ2VtX29iamVjdCAqYm8pCit7CisJc3RydWN0IGRybV9n ZW1fb2JqZWN0ICpvYmogPSAmYm8tPmJhc2UuYmFzZTsKKwlzdHJ1Y3QgcGFuZnJvc3RfZGV2aWNl ICpwZmRldiA9IHRvX3BhbmZyb3N0X2RldmljZShvYmotPmRldik7CisJc3RydWN0IGlvX3BndGFi bGVfb3BzICpvcHMgPSBwZmRldi0+bW11LT5wZ3RibF9vcHM7CisJdTY0IGlvdmEgPSBiby0+bm9k ZS5zdGFydCA8PCBQQUdFX1NISUZUOworCXVuc2lnbmVkIGludCBjb3VudDsKKwlzdHJ1Y3Qgc2Nh dHRlcmxpc3QgKnNnbDsKKwlzdHJ1Y3Qgc2dfdGFibGUgKnNndDsKKworCXNndCA9IGRybV9nZW1f c2htZW1fZ2V0X3BhZ2VzX3NndChvYmopOworCWlmIChXQVJOX09OKElTX0VSUihzZ3QpKSkKKwkJ cmV0dXJuIFBUUl9FUlIoc2d0KTsKKworCW11dGV4X2xvY2soJnBmZGV2LT5tbXUtPmxvY2spOwor CisJZm9yX2VhY2hfc2coc2d0LT5zZ2wsIHNnbCwgc2d0LT5uZW50cywgY291bnQpIHsKKwkJdW5z aWduZWQgbG9uZyBwYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnbCk7CisJCXNpemVfdCBsZW4gPSBz Z19kbWFfbGVuKHNnbCk7CisKKwkJd2hpbGUgKGxlbikgeworCQkJZGV2X2RiZyhwZmRldi0+ZGV2 LCAibWFwOiBpb3ZhPSVsbHgsIHBhZGRyPSVseCwgbGVuPSV6eCIsIGlvdmEsIHBhZGRyLCBsZW4p OworCQkJb3BzLT5tYXAob3BzLCBpb3ZhLCBwYWRkciwgU1pfNEssIElPTU1VX1dSSVRFIHwgSU9N TVVfUkVBRCk7CisJCQlpb3ZhICs9IFNaXzRLOworCQkJcGFkZHIgKz0gU1pfNEs7CisJCQlsZW4g LT0gU1pfNEs7CisJCX0KKwl9CisKKwltdXRleF91bmxvY2soJnBmZGV2LT5tbXUtPmxvY2spOwor CXJldHVybiAwOworfQorCit2b2lkIHBhbmZyb3N0X21tdV91bm1hcChzdHJ1Y3QgcGFuZnJvc3Rf Z2VtX29iamVjdCAqYm8pCit7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSAmYm8tPmJh c2UuYmFzZTsKKwlzdHJ1Y3QgcGFuZnJvc3RfZGV2aWNlICpwZmRldiA9IHRvX3BhbmZyb3N0X2Rl dmljZShvYmotPmRldik7CisJc3RydWN0IGlvX3BndGFibGVfb3BzICpvcHMgPSBwZmRldi0+bW11 LT5wZ3RibF9vcHM7CisJdTY0IGlvdmEgPSBiby0+bm9kZS5zdGFydCA8PCBQQUdFX1NISUZUOwor CXNpemVfdCBsZW4gPSBiby0+bm9kZS5zaXplIDw8IFBBR0VfU0hJRlQ7CisJc2l6ZV90IHVubWFw cGVkX2xlbiA9IDA7CisKKwltdXRleF9sb2NrKCZwZmRldi0+bW11LT5sb2NrKTsKKworCXdoaWxl ICh1bm1hcHBlZF9sZW4gPCBsZW4pIHsKKwkJb3BzLT51bm1hcChvcHMsIGlvdmEsIFNaXzRLKTsK KwkJaW92YSArPSBTWl80SzsKKwkJdW5tYXBwZWRfbGVuICs9IFNaXzRLOworCX0KKworCW11dGV4 X3VubG9jaygmcGZkZXYtPm1tdS0+bG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIG1tdV90bGJfaW52 X2NvbnRleHRfczEodm9pZCAqY29va2llKQoreworCXN0cnVjdCBwYW5mcm9zdF9kZXZpY2UgKnBm ZGV2ID0gY29va2llOworCisJbW11X2h3X2RvX29wZXJhdGlvbihwZmRldiwgMCwgMCwgfjBVTCwg QVNfQ09NTUFORF9GTFVTSF9NRU0pOworfQorCitzdGF0aWMgdm9pZCBtbXVfdGxiX2ludl9yYW5n ZV9ub3N5bmModW5zaWduZWQgbG9uZyBpb3ZhLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IGdyYW51bGUs CisJCSAgICAgIGJvb2wgbGVhZiwgdm9pZCAqY29va2llKQoreworCXN0cnVjdCBwYW5mcm9zdF9k ZXZpY2UgKnBmZGV2ID0gY29va2llOworCisJZGV2X2RiZyhwZmRldi0+ZGV2LCAiaW52X3Jhbmdl OiBpb3ZhPSVseCwgc2l6ZT0lengsIGdyYW51bGU9JXp4LCBsZWFmPSVkIiwKKwkJaW92YSwgc2l6 ZSwgZ3JhbnVsZSwgbGVhZik7CisJbW11X2h3X2RvX29wZXJhdGlvbihwZmRldiwgMCwgaW92YSwg c2l6ZSwgQVNfQ09NTUFORF9GTFVTSF9QVCk7Cit9CitzdGF0aWMgdm9pZCBtbXVfdGxiX3N5bmNf Y29udGV4dCh2b2lkICpjb29raWUpCit7CisJLy9zdHJ1Y3QgcGFuZnJvc3RfZGV2aWNlICpwZmRl diA9IGNvb2tpZTsKKwkvLyBXYWl0IDEwMDAgR1BVIGN5Y2xlcyE/Cit9CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgaW9tbXVfZ2F0aGVyX29wcyBtbXVfdGxiX29wcyA9IHsKKwkudGxiX2ZsdXNoX2Fs bAk9IG1tdV90bGJfaW52X2NvbnRleHRfczEsCisJLnRsYl9hZGRfZmx1c2gJPSBtbXVfdGxiX2lu dl9yYW5nZV9ub3N5bmMsCisJLnRsYl9zeW5jCT0gbW11X3RsYl9zeW5jX2NvbnRleHQsCit9Owor Citjb25zdCBjaGFyICptbXVfZXhjZXB0aW9uX25hbWUoc3RydWN0IHBhbmZyb3N0X2RldmljZSAq cGZkZXYsIHUzMiBleGNlcHRpb25fY29kZSkKK3sKKwlzd2l0Y2ggKGV4Y2VwdGlvbl9jb2RlKSB7 CisJY2FzZSAweEMwIC4uLiAweEM3OiByZXR1cm4gIlRSQU5TTEFUSU9OX0ZBVUxUIjsKKwljYXNl IDB4Qzg6IHJldHVybiAiUEVSTUlTU0lPTl9GQVVMVCI7CisJY2FzZSAweEQwIC4uLiAweEQ3OiBy ZXR1cm4gIlRSQU5TVEFCX0JVU19GQVVMVCI7CisJY2FzZSAweEQ4OiByZXR1cm4gIkFDQ0VTU19G TEFHIjsKKwl9CisKKwlpZiAocGFuZnJvc3RfaGFzX2h3X2ZlYXR1cmUocGZkZXYsIEhXX0ZFQVRV UkVfQUFSQ0g2NF9NTVUpKSB7CisJCXN3aXRjaCAoZXhjZXB0aW9uX2NvZGUpIHsKKwkJY2FzZSAw eEM5IC4uLiAweENGOiByZXR1cm4gIlBFUk1JU1NJT05fRkFVTFQiOworCQljYXNlIDB4RDkgLi4u IDB4REY6IHJldHVybiAiQUNDRVNTX0ZMQUciOworCQljYXNlIDB4RTAgLi4uIDB4RTc6IHJldHVy biAiQUREUkVTU19TSVpFX0ZBVUxUIjsKKwkJY2FzZSAweEU4IC4uLiAweEVGOiByZXR1cm4gIk1F TU9SWV9BVFRSSUJVVEVTX0ZBVUxUIjsKKwkJfTsKKwl9CisJcmV0dXJuICJVTktOT1dOIjsKK30K Kworc3RhdGljIGNvbnN0IGNoYXIgKmFjY2Vzc190eXBlX25hbWUoc3RydWN0IHBhbmZyb3N0X2Rl dmljZSAqcGZkZXYsCisJCXUzMiBmYXVsdF9zdGF0dXMpCit7CisJc3dpdGNoIChmYXVsdF9zdGF0 dXMgJiBBU19GQVVMVFNUQVRVU19BQ0NFU1NfVFlQRV9NQVNLKSB7CisJY2FzZSBBU19GQVVMVFNU QVRVU19BQ0NFU1NfVFlQRV9BVE9NSUM6CisJCWlmIChwYW5mcm9zdF9oYXNfaHdfZmVhdHVyZShw ZmRldiwgSFdfRkVBVFVSRV9BQVJDSDY0X01NVSkpCisJCQlyZXR1cm4gIkFUT01JQyI7CisJCWVs c2UKKwkJCXJldHVybiAiVU5LTk9XTiI7CisJY2FzZSBBU19GQVVMVFNUQVRVU19BQ0NFU1NfVFlQ RV9SRUFEOgorCQlyZXR1cm4gIlJFQUQiOworCWNhc2UgQVNfRkFVTFRTVEFUVVNfQUNDRVNTX1RZ UEVfV1JJVEU6CisJCXJldHVybiAiV1JJVEUiOworCWNhc2UgQVNfRkFVTFRTVEFUVVNfQUNDRVNT X1RZUEVfRVg6CisJCXJldHVybiAiRVhFQ1VURSI7CisJZGVmYXVsdDoKKwkJV0FSTl9PTigxKTsK KwkJcmV0dXJuIE5VTEw7CisJfQorfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgcGFuZnJvc3RfbW11 X2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHBhbmZyb3N0X2Rl dmljZSAqcGZkZXYgPSBkYXRhOworCXUzMiBzdGF0dXMgPSBtbXVfcmVhZChwZmRldiwgTU1VX0lO VF9TVEFUKTsKKwlpbnQgaTsKKworCWlmICghc3RhdHVzKQorCQlyZXR1cm4gSVJRX05PTkU7CisK KwlkZXZfZXJyKHBmZGV2LT5kZXYsICJtbXUgaXJxIHN0YXR1cz0leFxuIiwgc3RhdHVzKTsKKwor CWZvciAoaSA9IDA7IHN0YXR1czsgaSsrKSB7CisJCXUzMiBtYXNrID0gQklUKGkpIHwgQklUKGkg KyAxNik7CisJCXU2NCBhZGRyOworCQl1MzIgZmF1bHRfc3RhdHVzOworCQl1MzIgZXhjZXB0aW9u X3R5cGU7CisJCXUzMiBhY2Nlc3NfdHlwZTsKKwkJdTMyIHNvdXJjZV9pZDsKKworCQlpZiAoIShz dGF0dXMgJiBtYXNrKSkKKwkJCWNvbnRpbnVlOworCisJCWZhdWx0X3N0YXR1cyA9IG1tdV9yZWFk KHBmZGV2LCBBU19GQVVMVFNUQVRVUyhpKSk7CisJCWFkZHIgPSBtbXVfcmVhZChwZmRldiwgQVNf RkFVTFRBRERSRVNTX0xPKGkpKTsKKwkJYWRkciB8PSAodTY0KW1tdV9yZWFkKHBmZGV2LCBBU19G QVVMVEFERFJFU1NfSEkoaSkpIDw8IDMyOworCisJCS8qIGRlY29kZSB0aGUgZmF1bHQgc3RhdHVz ICovCisJCWV4Y2VwdGlvbl90eXBlID0gZmF1bHRfc3RhdHVzICYgMHhGRjsKKwkJYWNjZXNzX3R5 cGUgPSAoZmF1bHRfc3RhdHVzID4+IDgpICYgMHgzOworCQlzb3VyY2VfaWQgPSAoZmF1bHRfc3Rh dHVzID4+IDE2KTsKKworCQkvKiB0ZXJtaW5hbCBmYXVsdCwgcHJpbnQgaW5mbyBhYm91dCB0aGUg ZmF1bHQgKi8KKwkJZGV2X2VycihwZmRldi0+ZGV2LAorCQkJIlVuaGFuZGxlZCBQYWdlIGZhdWx0 IGluIEFTJWQgYXQgVkEgMHglMDE2bGxYXG4iCisJCQkiUmVhc29uOiAlc1xuIgorCQkJInJhdyBm YXVsdCBzdGF0dXM6IDB4JVhcbiIKKwkJCSJkZWNvZGVkIGZhdWx0IHN0YXR1czogJXNcbiIKKwkJ CSJleGNlcHRpb24gdHlwZSAweCVYOiAlc1xuIgorCQkJImFjY2VzcyB0eXBlIDB4JVg6ICVzXG4i CisJCQkic291cmNlIGlkIDB4JVhcbiIsCisJCQlpLCBhZGRyLAorCQkJIlRPRE8iLAorCQkJZmF1 bHRfc3RhdHVzLAorCQkJKGZhdWx0X3N0YXR1cyAmICgxIDw8IDEwKSA/ICJERUNPREVSIEZBVUxU IiA6ICJTTEFWRSBGQVVMVCIpLAorCQkJZXhjZXB0aW9uX3R5cGUsIG1tdV9leGNlcHRpb25fbmFt ZShwZmRldiwgZXhjZXB0aW9uX3R5cGUpLAorCQkJYWNjZXNzX3R5cGUsIGFjY2Vzc190eXBlX25h bWUocGZkZXYsIGZhdWx0X3N0YXR1cyksCisJCQlzb3VyY2VfaWQpOworCisJCW1tdV93cml0ZShw ZmRldiwgTU1VX0lOVF9DTEVBUiwgbWFzayk7CisKKwkJc3RhdHVzICY9IH5tYXNrOworCX0KKwor CXJldHVybiBJUlFfSEFORExFRDsKK307CisKK2ludCBwYW5mcm9zdF9tbXVfaW5pdChzdHJ1Y3Qg cGFuZnJvc3RfZGV2aWNlICpwZmRldikKK3sKKwlzdHJ1Y3QgaW9fcGd0YWJsZV9vcHMgKnBndGJs X29wczsKKwlzdHJ1Y3QgaW9fcGd0YWJsZV9jZmcgcGd0YmxfY2ZnOworCWludCBlcnIsIGlycTsK KworCXBmZGV2LT5tbXUgPSBkZXZtX2t6YWxsb2MocGZkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBw YW5mcm9zdF9tbXUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBmZGV2LT5tbXUpCisJCXJldHVybiAt RU5PTUVNOworCisJbXV0ZXhfaW5pdCgmcGZkZXYtPm1tdS0+bG9jayk7CisKKwlpcnEgPSBwbGF0 Zm9ybV9nZXRfaXJxX2J5bmFtZSh0b19wbGF0Zm9ybV9kZXZpY2UocGZkZXYtPmRldiksICJtbXUi KTsKKwlpZiAoaXJxIDw9IDApCisJCXJldHVybiAtRU5PREVWOworCisJZXJyID0gZGV2bV9yZXF1 ZXN0X2lycShwZmRldi0+ZGV2LCBpcnEsIHBhbmZyb3N0X21tdV9pcnFfaGFuZGxlciwKKwkJCSAg ICAgICBJUlFGX1NIQVJFRCwgIm1tdSIsIHBmZGV2KTsKKworCWlmIChlcnIpIHsKKwkJZGV2X2Vy cihwZmRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgbW11IGlycSIpOworCQlyZXR1cm4gZXJy OworCX0KKwltbXVfd3JpdGUocGZkZXYsIE1NVV9JTlRfQ0xFQVIsIH4wKTsKKwltbXVfd3JpdGUo cGZkZXYsIE1NVV9JTlRfTUFTSywgfjApOworCisJcGd0YmxfY2ZnID0gKHN0cnVjdCBpb19wZ3Rh YmxlX2NmZykgeworCQkucGdzaXplX2JpdG1hcAk9IFNaXzRLLCAvLyB8IFNaXzJNIHwgU1pfMUcp LAorCQkuaWFzCQk9IDQ4LAorCQkub2FzCQk9IDQwLAkvLyBTaG91bGQgY29tZSBmcm9tIGRtYSBt YXNrPworCQkudGxiCQk9ICZtbXVfdGxiX29wcywKKwkJLmlvbW11X2Rldgk9IHBmZGV2LT5kZXYs CisJfTsKKworCXBndGJsX29wcyA9IGFsbG9jX2lvX3BndGFibGVfb3BzKEFSTV9NQUxJX0xQQUUs ICZwZ3RibF9jZmcsIHBmZGV2KTsKKwlpZiAoIXBndGJsX29wcykKKwkJcmV0dXJuIC1FTk9NRU07 CisKKwlwZmRldi0+bW11LT5wZ3RibF9vcHMgPSBwZ3RibF9vcHM7CisKKwkvLyBOZWVkIHRvIHJl dmlzaXQgbWVtIGF0dHJzLiBOQyBpcyB0aGUgZGVmYXVsdCwgTWFsaSBkcml2ZXIgaXMgaW5uZXIg V1QKKwltbXVfZW5hYmxlKHBmZGV2LCAwLCBwZ3RibF9jZmcuYXJtX2xwYWVfczFfY2ZnLnR0YnJb MF0sCisJCSAgIHBndGJsX2NmZy5hcm1fbHBhZV9zMV9jZmcubWFpclswXSk7CisKKwlyZXR1cm4g MDsKK30KKwordm9pZCBwYW5mcm9zdF9tbXVfZmluaShzdHJ1Y3QgcGFuZnJvc3RfZGV2aWNlICpw ZmRldikKK3sKKworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZy b3N0X21tdS5oIGIvZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X21tdS5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMzJkMDFhYWEzMDk3Ci0tLSAvZGV2 L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X21tdS5oCkBAIC0w LDAgKzEsMTUgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wCisvKiBDb3B5 cmlnaHQgMjAxOSBMaW5hcm8sIEx0ZCwgUm9iIEhlcnJpbmcgPHJvYmhAa2VybmVsLm9yZz4gKi8K KworI2lmbmRlZiBfX1BBTkZST1NUX01NVV9IX18KKyNkZWZpbmUgX19QQU5GUk9TVF9NTVVfSF9f CisKK3N0cnVjdCBwYW5mcm9zdF9nZW1fb2JqZWN0OworCitpbnQgcGFuZnJvc3RfbW11X21hcChz dHJ1Y3QgcGFuZnJvc3RfZ2VtX29iamVjdCAqYm8pOwordm9pZCBwYW5mcm9zdF9tbXVfdW5tYXAo c3RydWN0IHBhbmZyb3N0X2dlbV9vYmplY3QgKmJvKTsKKworaW50IHBhbmZyb3N0X21tdV9pbml0 KHN0cnVjdCBwYW5mcm9zdF9kZXZpY2UgKnBmZGV2KTsKK3ZvaWQgcGFuZnJvc3RfbW11X2Zpbmko c3RydWN0IHBhbmZyb3N0X2RldmljZSAqcGZkZXYpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2lu Y2x1ZGUvdWFwaS9kcm0vcGFuZnJvc3RfZHJtLmggYi9pbmNsdWRlL3VhcGkvZHJtL3BhbmZyb3N0 X2RybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNDllYjZiZTgz NjBkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS91YXBpL2RybS9wYW5mcm9zdF9kcm0uaApA QCAtMCwwICsxLDEzOCBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVCAqLworLyoK KyAqIENvcHlyaWdodCDCqSAyMDE0LTIwMTggQnJvYWRjb20KKyAqIENvcHlyaWdodCDCqSAyMDE5 IENvbGxhYm9yYSBsdGQuCisgKi8KKyNpZm5kZWYgX1BBTkZST1NUX0RSTV9IXworI2RlZmluZSBf UEFORlJPU1RfRFJNX0hfCisKKyNpbmNsdWRlICJkcm0uaCIKKworI2lmIGRlZmluZWQoX19jcGx1 c3BsdXMpCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjZGVmaW5lIERSTV9QQU5GUk9TVF9TVUJN SVQJCQkweDAwCisjZGVmaW5lIERSTV9QQU5GUk9TVF9XQUlUX0JPCQkJMHgwMQorI2RlZmluZSBE Uk1fUEFORlJPU1RfQ1JFQVRFX0JPCQkJMHgwMgorI2RlZmluZSBEUk1fUEFORlJPU1RfTU1BUF9C TwkJCTB4MDMKKyNkZWZpbmUgRFJNX1BBTkZST1NUX0dFVF9QQVJBTQkJCTB4MDQKKyNkZWZpbmUg RFJNX1BBTkZST1NUX0dFVF9CT19PRkZTRVQJCTB4MDUKKworI2RlZmluZSBEUk1fSU9DVExfUEFO RlJPU1RfU1VCTUlUCQlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1BBTkZST1NUX1NV Qk1JVCwgc3RydWN0IGRybV9wYW5mcm9zdF9zdWJtaXQpCisjZGVmaW5lIERSTV9JT0NUTF9QQU5G Uk9TVF9XQUlUX0JPCQlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1BBTkZST1NUX1dB SVRfQk8sIHN0cnVjdCBkcm1fcGFuZnJvc3Rfd2FpdF9ibykKKyNkZWZpbmUgRFJNX0lPQ1RMX1BB TkZST1NUX0NSRUFURV9CTwkJRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9QQU5GUk9T VF9DUkVBVEVfQk8sIHN0cnVjdCBkcm1fcGFuZnJvc3RfY3JlYXRlX2JvKQorI2RlZmluZSBEUk1f SU9DVExfUEFORlJPU1RfTU1BUF9CTwkJRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9Q QU5GUk9TVF9NTUFQX0JPLCBzdHJ1Y3QgZHJtX3BhbmZyb3N0X21tYXBfYm8pCisjZGVmaW5lIERS TV9JT0NUTF9QQU5GUk9TVF9HRVRfUEFSQU0JCURSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBE Uk1fUEFORlJPU1RfR0VUX1BBUkFNLCBzdHJ1Y3QgZHJtX3BhbmZyb3N0X2dldF9wYXJhbSkKKyNk ZWZpbmUgRFJNX0lPQ1RMX1BBTkZST1NUX0dFVF9CT19PRkZTRVQJRFJNX0lPV1IoRFJNX0NPTU1B TkRfQkFTRSArIERSTV9QQU5GUk9TVF9HRVRfQk9fT0ZGU0VULCBzdHJ1Y3QgZHJtX3BhbmZyb3N0 X2dldF9ib19vZmZzZXQpCisKKyNkZWZpbmUgUEFORlJPU1RfSkRfUkVRX0ZTICgxIDw8IDApCisK Ky8qKgorICogc3RydWN0IGRybV9wYW5mcm9zdF9zdWJtaXQgLSBpb2N0bCBhcmd1bWVudCBmb3Ig c3VibWl0dGluZyBjb21tYW5kcyB0byB0aGUgM0QKKyAqIGVuZ2luZS4KKyAqCisgKiBUaGlzIGFz a3MgdGhlIGtlcm5lbCB0byBoYXZlIHRoZSBHUFUgZXhlY3V0ZSBhIHJlbmRlciBjb21tYW5kIGxp c3QuCisgKi8KK3N0cnVjdCBkcm1fcGFuZnJvc3Rfc3VibWl0IHsKKworCS8qKiBBZGRyZXNzIHRv IEdQVSBtYXBwaW5nIG9mIGpvYiBkZXNjcmlwdG9yICovCisJX191NjQgamM7CisKKwkvKiogQW4g b3B0aW9uYWwgc3luYyBvYmplY3QgdG8gd2FpdCBvbiBiZWZvcmUgc3RhcnRpbmcgdGhpcyBqb2Iu ICovCisJX191MzIgaW5fc3luYzsKKworCS8qKiBBbiBvcHRpb25hbCBzeW5jIG9iamVjdCB0byBw bGFjZSB0aGUgY29tcGxldGlvbiBmZW5jZSBpbi4gKi8KKwlfX3UzMiBvdXRfc3luYzsKKworCS8q KiBQb2ludGVyIHRvIGEgdTMyIGFycmF5IG9mIHRoZSBCT3MgdGhhdCBhcmUgcmVmZXJlbmNlZCBi eSB0aGUgam9iLiAqLworCV9fdTY0IGJvX2hhbmRsZXM7CisKKwkvKiogTnVtYmVyIG9mIEJPIGhh bmRsZXMgcGFzc2VkIGluIChzaXplIGlzIHRoYXQgdGltZXMgNCkuICovCisJX191MzIgYm9faGFu ZGxlX2NvdW50OworCisJLyoqIEEgY29tYmluYXRpb24gb2YgUEFORlJPU1RfSkRfUkVRXyogKi8K KwlfX3UzMiByZXF1aXJlbWVudHM7Cit9OworCisvKioKKyAqIHN0cnVjdCBkcm1fcGFuZnJvc3Rf d2FpdF9ibyAtIGlvY3RsIGFyZ3VtZW50IGZvciB3YWl0aW5nIGZvcgorICogY29tcGxldGlvbiBv ZiB0aGUgbGFzdCBEUk1fUEFORlJPU1RfU1VCTUlUX0NMIG9uIGEgQk8uCisgKgorICogVGhpcyBp cyB1c2VmdWwgZm9yIGNhc2VzIHdoZXJlIG11bHRpcGxlIHByb2Nlc3NlcyBtaWdodCBiZQorICog cmVuZGVyaW5nIHRvIGEgQk8gYW5kIHlvdSB3YW50IHRvIHdhaXQgZm9yIGFsbCByZW5kZXJpbmcg dG8gYmUKKyAqIGNvbXBsZXRlZC4KKyAqLworc3RydWN0IGRybV9wYW5mcm9zdF93YWl0X2JvIHsK KwlfX3UzMiBoYW5kbGU7CisJX191MzIgcGFkOworCV9fczY0IHRpbWVvdXRfbnM7CS8qIGFic29s dXRlICovCit9OworCisvKioKKyAqIHN0cnVjdCBkcm1fcGFuZnJvc3RfY3JlYXRlX2JvIC0gaW9j dGwgYXJndW1lbnQgZm9yIGNyZWF0aW5nIFBhbmZyb3N0IEJPcy4KKyAqCisgKiBUaGVyZSBhcmUg Y3VycmVudGx5IG5vIHZhbHVlcyBmb3IgdGhlIGZsYWdzIGFyZ3VtZW50LCBidXQgaXQgbWF5IGJl CisgKiB1c2VkIGluIGEgZnV0dXJlIGV4dGVuc2lvbi4KKyAqLworc3RydWN0IGRybV9wYW5mcm9z dF9jcmVhdGVfYm8geworCV9fdTMyIHNpemU7CisJX191MzIgZmxhZ3M7CisJLyoqIFJldHVybmVk IEdFTSBoYW5kbGUgZm9yIHRoZSBCTy4gKi8KKwlfX3UzMiBoYW5kbGU7CisJLyoqCisJICogUmV0 dXJuZWQgb2Zmc2V0IGZvciB0aGUgQk8gaW4gdGhlIEdQVSBhZGRyZXNzIHNwYWNlLiAgVGhpcyBv ZmZzZXQKKwkgKiBpcyBwcml2YXRlIHRvIHRoZSBEUk0gZmQgYW5kIGlzIHZhbGlkIGZvciB0aGUg bGlmZXRpbWUgb2YgdGhlIEdFTQorCSAqIGhhbmRsZS4KKwkgKgorCSAqIFRoaXMgb2Zmc2V0IHZh bHVlIHdpbGwgYWx3YXlzIGJlIG5vbnplcm8sIHNpbmNlIHZhcmlvdXMgSFcKKwkgKiB1bml0cyB0 cmVhdCAwIHNwZWNpYWxseS4KKwkgKi8KKwlfX3UzMiBvZmZzZXQ7Cit9OworCisvKioKKyAqIHN0 cnVjdCBkcm1fcGFuZnJvc3RfbW1hcF9ibyAtIGlvY3RsIGFyZ3VtZW50IGZvciBtYXBwaW5nIFBh bmZyb3N0IEJPcy4KKyAqCisgKiBUaGlzIGRvZXNuJ3QgYWN0dWFsbHkgcGVyZm9ybSBhbiBtbWFw LiAgSW5zdGVhZCwgaXQgcmV0dXJucyB0aGUKKyAqIG9mZnNldCB5b3UgbmVlZCB0byB1c2UgaW4g YW4gbW1hcCBvbiB0aGUgRFJNIGRldmljZSBub2RlLiAgVGhpcworICogbWVhbnMgdGhhdCB0b29s cyBsaWtlIHZhbGdyaW5kIGVuZCB1cCBrbm93aW5nIGFib3V0IHRoZSBtYXBwZWQKKyAqIG1lbW9y eS4KKyAqCisgKiBUaGVyZSBhcmUgY3VycmVudGx5IG5vIHZhbHVlcyBmb3IgdGhlIGZsYWdzIGFy Z3VtZW50LCBidXQgaXQgbWF5IGJlCisgKiB1c2VkIGluIGEgZnV0dXJlIGV4dGVuc2lvbi4KKyAq Lworc3RydWN0IGRybV9wYW5mcm9zdF9tbWFwX2JvIHsKKwkvKiogSGFuZGxlIGZvciB0aGUgb2Jq ZWN0IGJlaW5nIG1hcHBlZC4gKi8KKwlfX3UzMiBoYW5kbGU7CisJX191MzIgZmxhZ3M7CisJLyoq IG9mZnNldCBpbnRvIHRoZSBkcm0gbm9kZSB0byB1c2UgZm9yIHN1YnNlcXVlbnQgbW1hcCBjYWxs LiAqLworCV9fdTY0IG9mZnNldDsKK307CisKK2VudW0gZHJtX3BhbmZyb3N0X3BhcmFtIHsKKwlE Uk1fUEFORlJPU1RfUEFSQU1fR1BVX0lELAorfTsKKworc3RydWN0IGRybV9wYW5mcm9zdF9nZXRf cGFyYW0geworCV9fdTMyIHBhcmFtOworCV9fdTMyIHBhZDsKKwlfX3U2NCB2YWx1ZTsKK307CisK Ky8qKgorICogUmV0dXJucyB0aGUgb2Zmc2V0IGZvciB0aGUgQk8gaW4gdGhlIEdQVSBhZGRyZXNz IHNwYWNlIGZvciB0aGlzIERSTSBmZC4KKyAqIFRoaXMgaXMgdGhlIHNhbWUgdmFsdWUgcmV0dXJu ZWQgYnkgZHJtX3BhbmZyb3N0X2NyZWF0ZV9ibywgaWYgdGhhdCB3YXMgY2FsbGVkCisgKiBmcm9t IHRoaXMgRFJNIGZkLgorICovCitzdHJ1Y3QgZHJtX3BhbmZyb3N0X2dldF9ib19vZmZzZXQgewor CV9fdTMyIGhhbmRsZTsKKwlfX3UzMiBwYWQ7CisJX191NjQgb2Zmc2V0OworfTsKKworI2lmIGRl ZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9QQU5GUk9TVF9EUk1f SF8gKi8KLS0gCjIuMTkuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJp LWRldmVs