From owner-freebsd-arm@FreeBSD.ORG Fri Mar 6 17:38:05 2015 Return-Path: Delivered-To: freebsd-arm@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 7C99AE70; Fri, 6 Mar 2015 17:38:05 +0000 (UTC) Received: from mail-ie0-x22c.google.com (mail-ie0-x22c.google.com [IPv6:2607:f8b0:4001:c03::22c]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 21FAB8C4; Fri, 6 Mar 2015 17:38:05 +0000 (UTC) Received: by iecrl12 with SMTP id rl12so4629730iec.8; Fri, 06 Mar 2015 09:38:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=+a1a7Rga+vVduiCF0TQCaHO9ebkgL9H0fHXTBtnPXko=; b=W+i+VnK8bCF1jovak6tw8Zb21X0isTRnCF7Tol5EV+X1mDjeXl1qNJa7FbB90lg+Wq Kpj5F/9z4t12dN+/vWD2U6ecrjGu3Ap20hHeqwKUvKYPqQgMYC9mwLTVkXM7rNLnoEmR irnniwWAx/8TpsjVM+NjYuCqLTzLSFUC6mu9Kz88zOnWph/aeXfNm4WGQS27JrOHZs25 Wqd6oeOXps7l3f/ezQ+czV2RMlAxZSrplQYWAiimQ/X1jNTSpgsA9OP2uAAp9E0P08vF rRq5wFhRGO9gFYU7OhQXOw3CUAkLWbPn1wEOT2HdPWkRO2AE9elVuOTdpkHZk2h413mm 0Yiw== MIME-Version: 1.0 X-Received: by 10.42.51.68 with SMTP id d4mr11438343icg.26.1425663484335; Fri, 06 Mar 2015 09:38:04 -0800 (PST) Received: by 10.64.224.237 with HTTP; Fri, 6 Mar 2015 09:38:04 -0800 (PST) In-Reply-To: References: Date: Fri, 6 Mar 2015 18:38:04 +0100 Message-ID: Subject: Re: interrupt framework From: Svatopluk Kraus To: freebsd-arm@freebsd.org Content-Type: multipart/mixed; boundary=20cf30223fb18e26520510a22522 X-BeenThere: freebsd-arm@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: "Porting FreeBSD to ARM processors." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 06 Mar 2015 17:38:05 -0000 --20cf30223fb18e26520510a22522 Content-Type: text/plain; charset=UTF-8 Hi, I have finished work on new interrupt framework. The state is reflected in intrng_full_01.diff. ARM_INTRNG define is used in all files so old and new framework can live together until all controllers will be reworked. I have reworked GIC controller and tested it on panda. I have reworked AINTC controller and tested it on BBB. As more platforms use these controllers, I use ARM_INTRNG define as well. The codes are not clean up yet. The patches are intrng_gic_panda.diff and intrng_aintc_01.diff. I have rework TI_GPIO controller and tested it on panda and BBB. Only panda and BBB use this code so ARM_INTRNG is not used. The patch is intrng_ti_gpio_panda_bbb_01.diff. The code is not clean up yet too and moreover there is test module left in diff. For panda, gpio_113 button is printing some message. For BBB, pin 12 on P9 interface is doing same. I have reworked and tested controller for RPI-B, however I want to rework its gpio controller before I will present it. As we must decribe interrupts by controller name (due to cascaded controllers), system tools and MI interrupt code does not work well with now longer decriptions. The interrupt.h.diff could help a little bit. I would appreciate more testing of GIC on platforms I haven't got. And some feedback would be nice too. Svatopluk Kraus --20cf30223fb18e26520510a22522 Content-Type: text/plain; charset=US-ASCII; name="intrng_full_01.diff" Content-Disposition: attachment; filename="intrng_full_01.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_i6xu3gw53 SW5kZXg6IHN5cy9hcm0vYXJtL2ludHJuZy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9hcm0vYXJtL2lu dHJuZy5jCShyZXZpc2lvbiAwKQorKysgc3lzL2FybS9hcm0vaW50cm5nLmMJKHdvcmtpbmcgY29w eSkKQEAgLTAsMCArMSwxNDQyIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxMi0yMDE0IEph a3ViIFdvamNpZWNoIEtsYW1hIDxqY2VlbEBGcmVlQlNELm9yZz4uCisgKiBBbGwgcmlnaHRzIHJl c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9u aW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkg dGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IE1hcmsgQnJpbmljb21iZQorICoJZm9yIHRoZSBOZXRCU0Qg UHJvamVjdC4KKyAqIDQuIFRoZSBuYW1lIG9mIHRoZSBjb21wYW55IG5vciB0aGUgbmFtZSBvZiB0 aGUgYXV0aG9yIG1heSBiZSB1c2VkIHRvCisgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYworICogICAgcHJp b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg QlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdB UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS QU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhP UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1Qs IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJ QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT SU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAq LworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKy8q CisgKglBUk0gSW50ZXJydXB0IEZyYW1ld29yaworICoKKyAqICBUT0RPOiAtIGhvdyB0byB1bm1h c2sgUFBJIG9uIG90aGVyIENQVXMgaWYgYWxyZWFkeSBzdGFydGVkID8KKyAqICAgICAgICAtIGNv bXBsZXRlIHRoaW5ncyBmb3IgcmVtb3ZhYmxlIFBJQ3MKKyAqLworCisjaW5jbHVkZSAib3B0X2Rk Yi5oIgorI2luY2x1ZGUgIm9wdF9wbGF0Zm9ybS5oIgorCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+ CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPgorI2luY2x1 ZGUgPHN5cy9zeXNsb2cuaD4KKyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CisjaW5jbHVkZSA8c3lz L3Byb2MuaD4KKyNpbmNsdWRlIDxzeXMvcXVldWUuaD4KKyNpbmNsdWRlIDxzeXMvYnVzLmg+Cisj aW5jbHVkZSA8c3lzL2ludGVycnVwdC5oPgorI2luY2x1ZGUgPHN5cy9jb25mLmg+CisjaW5jbHVk ZSA8c3lzL2NwdXNldC5oPgorI2luY2x1ZGUgPHN5cy9zbXAuaD4KKyNpbmNsdWRlIDxtYWNoaW5l L2F0b21pYy5oPgorI2luY2x1ZGUgPG1hY2hpbmUvaW50ci5oPgorI2luY2x1ZGUgPG1hY2hpbmUv Y3B1Lmg+CisjaW5jbHVkZSA8bWFjaGluZS9zbXAuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL3N0ZGFy Zy5oPgorCisjaW5jbHVkZSA8ZGV2L29mdy9vcGVuZmlybS5oPgorI2luY2x1ZGUgPGRldi9vZncv b2Z3X2J1cy5oPgorI2luY2x1ZGUgPGRldi9vZncvb2Z3X2J1c19zdWJyLmg+CisKKyNpbmNsdWRl IDxkZXYvZmR0L2ZkdF9jb21tb24uaD4KKworI2lmZGVmIEREQgorI2luY2x1ZGUgPGRkYi9kZGIu aD4KKyNlbmRpZgorCisjaW5jbHVkZSAicGljX2lmLmgiCisKKyNkZWZpbmUJSU5UUk5BTUVfTEVO CSgyKk1BWENPTUxFTiArIDEpCisKKyNpZmRlZiBERUJVRworI2RlZmluZSBkZWJ1Z2YoZm10LCBh cmdzLi4uKSBkbyB7IHByaW50ZigiJXMoKTogIiwgX19mdW5jX18pOwlcCisgICAgcHJpbnRmKGZt dCwjI2FyZ3MpOyB9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgZGVidWdmKGZtdCwgYXJncy4u LikKKyNlbmRpZgorCitNQUxMT0NfREVDTEFSRShNX0lOVFJORyk7CitNQUxMT0NfREVGSU5FKE1f SU5UUk5HLCAiaW50cm5nIiwgIkFSTSBpbnRlcnJ1cHQgaGFuZGxpbmciKTsKKworLyogTWFpbiBB Uk0gaW50ZXJydXB0IGhhbmRsZXIgY2FsbGVkIGZyb20gYXNzZW1ibGVyIC0+ICdoaWRkZW4nIGZv ciBDIGNvZGUuICovCit2b2lkIGFybV9pcnFfaGFuZGxlcihzdHJ1Y3QgdHJhcGZyYW1lICp0Zik7 CisKKy8qIFJvb3QgaW50ZXJydXB0IGNvbnRyb2xsZXIgc3R1ZmYuICovCitzdGF0aWMgZGV2aWNl X3QgaXJxX3Jvb3RfZGV2Oworc3RhdGljIGFybV9pcnFfZmlsdGVyX3QgKmlycV9yb290X2ZpbHRl cjsKK3N0YXRpYyB2b2lkICppcnFfcm9vdF9hcmc7CitzdGF0aWMgdV9pbnQgaXJxX3Jvb3RfaXBp Y291bnQ7CisKKy8qIEludGVycnVwdCBjb250cm9sbGVyIGRlZmluaXRpb24uICovCitzdHJ1Y3Qg YXJtX3BpYyB7CisJU0xJU1RfRU5UUlkoYXJtX3BpYykJcGljX25leHQ7CisJaW50cHRyX3QJCXBp Y194cmVmOwkvKiBoYXJkd2FyZSBpZGVudGlmaWNhdGlvbiAqLworCWRldmljZV90CQlwaWNfZGV2 OworfTsKKworc3RhdGljIHN0cnVjdCBtdHggcGljX2xpc3RfbG9jazsKK3N0YXRpYyBTTElTVF9I RUFEKCwgYXJtX3BpYykgcGljX2xpc3Q7CisKK3N0YXRpYyBzdHJ1Y3QgYXJtX3BpYyAqcGljX2xv b2t1cChkZXZpY2VfdCBkZXYsIGludHB0cl90IHhyZWYpOworCisvKiBJbnRlcnJ1cHQgc291cmNl IGRlZmluaXRpb24uICovCisjZGVmaW5lIElTUkNGX1JFR0lTVEVSRUQJMHgwMQkvKiByZWdpc3Rl cmVkIGluIGEgY29udHJvbGxlciAqLworI2RlZmluZSBJU1JDRl9QRVJDUFUJCTB4MDIJLyogcGVy IENQVSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVNSQ0ZfQk9VTkQJCTB4MDQJLyogYm91bmQgdG8g YSBDUFUgKi8KKworc3RhdGljIHN0cnVjdCBtdHggaXNyY190YWJsZV9sb2NrOworc3RhdGljIHN0 cnVjdCBhcm1faXJxc3JjICppcnFfc291cmNlc1tOSVJRXTsKK3VfaW50IGlycV9uZXh0X2ZyZWU7 CisKKyNkZWZpbmUgSVJRX0lOVkFMSUQJbml0ZW1zKGlycV9zb3VyY2VzKQorCisjaWZkZWYgU01Q CitzdGF0aWMgYm9vbGVhbl90IGlycV9hc3NpZ25fY3B1ID0gRkFMU0U7CisKK3N0YXRpYyBzdHJ1 Y3QgYXJtX2lycXNyYyBpcGlfc291cmNlc1tBUk1fSVBJX0NPVU5UXTsKK3N0YXRpYyB1X2ludCBp cGlfbmV4dF9udW07CisjZW5kaWYKKworLyoKKyAqIC0gMiBjb3VudGVycyBmb3IgZWFjaCBJL08g aW50ZXJydXB0LgorICogLSBNQVhDUFUgY291bnRlcnMgZm9yIGVhY2ggSVBJIGNvdW50ZXJzIGZv ciBTTVAuCisgKi8KKyNpZmRlZiBTTVAKKyNkZWZpbmUgSU5UUkNOVF9DT1VOVCAgIChOSVJRICog MiArIEFSTV9JUElfQ09VTlQgKiBNQVhDUFUpCisjZWxzZQorI2RlZmluZSBJTlRSQ05UX0NPVU5U ICAgKE5JUlEgKiAyKQorI2VuZGlmCisKKy8qIERhdGEgZm9yIE1JIHN0YXRpc3RpY3MgcmVwb3J0 aW5nLiAqLwordV9sb25nIGludHJjbnRbSU5UUkNOVF9DT1VOVF07CitjaGFyIGludHJuYW1lc1tJ TlRSQ05UX0NPVU5UICogSU5UUk5BTUVfTEVOXTsKK3NpemVfdCBzaW50cmNudCA9IHNpemVvZihp bnRyY250KTsKK3NpemVfdCBzaW50cm5hbWVzID0gc2l6ZW9mKGludHJuYW1lcyk7CitzdGF0aWMg dV9pbnQgaW50cmNudF9pbmRleDsKKworLyoKKyAqICBJbnRlcnJ1cHQgZnJhbWV3b3JrIGluaXRp YWxpemF0aW9uIHJvdXRpbmUuCisgKi8KK3N0YXRpYyB2b2lkCithcm1faXJxX2luaXQodm9pZCAq ZHVtbXkgX191bnVzZWQpCit7CisKKwlTTElTVF9JTklUKCZwaWNfbGlzdCk7CisJbXR4X2luaXQo JnBpY19saXN0X2xvY2ssICJhcm0gcGljIGxpc3QiLCBOVUxMLCBNVFhfREVGKTsKKwltdHhfaW5p dCgmaXNyY190YWJsZV9sb2NrLCAiYXJtIGlzcmMgdGFibGUiLCBOVUxMLCBNVFhfREVGKTsKK30K K1NZU0lOSVQoYXJtX2lycV9pbml0LCBTSV9TVUJfSU5UUiwgU0lfT1JERVJfRklSU1QsIGFybV9p cnFfaW5pdCwgTlVMTCk7CisKK3N0YXRpYyB2b2lkCitpbnRyY250X3NldG5hbWUoY29uc3QgY2hh ciAqbmFtZSwgaW50IGluZGV4KQoreworCisJc25wcmludGYoaW50cm5hbWVzICsgSU5UUk5BTUVf TEVOICogaW5kZXgsIElOVFJOQU1FX0xFTiwgIiUtKnMiLAorCSAgICBJTlRSTkFNRV9MRU4gLSAx LCBuYW1lKTsKK30KKworLyoKKyAqICBVcGRhdGUgbmFtZSBmb3IgaW50ZXJydXB0IHNvdXJjZSB3 aXRoIGludGVycnVwdCBldmVudC4KKyAqLworc3RhdGljIHZvaWQKK2ludHJjbnRfdXBkYXRlbmFt ZShzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYykKK3sKKworCS8qIFFRUTogV2hhdCBhYm91dCBzdHJh eSBjb3VudGVyIG5hbWU/ICovCisJbXR4X2Fzc2VydCgmaXNyY190YWJsZV9sb2NrLCBNQV9PV05F RCk7CisJaW50cmNudF9zZXRuYW1lKGlzcmMtPmlzcmNfZXZlbnQtPmllX2Z1bGxuYW1lLCBpc3Jj LT5pc3JjX2luZGV4KTsKK30KKworLyoKKyAqICBWaXJ0dWFsaXphdGlvbiBmb3IgaW50ZXJydXB0 IHNvdXJjZSBpbnRlcnJ1cHQgY291bnRlciBpbmNyZW1lbnQuCisgKi8KK3N0YXRpYyBpbmxpbmUg dm9pZAoraXNyY19pbmNyZW1lbnRfY291bnQoc3RydWN0IGFybV9pcnFzcmMgKmlzcmMpCit7CisK KwkvKgorCSAqIFhYWCAtIEl0IHNob3VsZCBiZSBhdG9taWMgZm9yIFBQSSBpbnRlcnJ1cHRzLiBJ dCB3YXMgcHJvdmVuIHRoYXQKKwkgKiAgICAgICBmb3IgdGltZXIgUFBJIGludGVycnVwdHMgdGhl IGxvc3QgaXMgbWVhc3VyYWJsZSBlYXNpbHkuCisJICovCisJaXNyYy0+aXNyY19jb3VudFswXSsr OworCS8qYXRvbWljX2FkZF9sb25nKCZpc3JjLT5pc3JjX2NvdW50WzBdLCAxKTsqLworfQorCisv KgorICogIFZpcnR1YWxpemF0aW9uIGZvciBpbnRlcnJ1cHQgc291cmNlIGludGVycnVwdCBzdHJh eSBjb3VudGVyIGluY3JlbWVudC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitpc3JjX2luY3Jl bWVudF9zdHJheWNvdW50KHN0cnVjdCBhcm1faXJxc3JjICppc3JjKQoreworCisJaXNyYy0+aXNy Y19jb3VudFsxXSsrOworfQorCisvKgorICogIFZpcnR1YWxpemF0aW9uIGZvciBpbnRlcnJ1cHQg c291cmNlIGludGVycnVwdCBuYW1lIHVwZGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK2lzcmNfdXBk YXRlX25hbWUoc3RydWN0IGFybV9pcnFzcmMgKmlzcmMsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJ Y2hhciBzdHJbSU5UUk5BTUVfTEVOXTsKKworCW10eF9hc3NlcnQoJmlzcmNfdGFibGVfbG9jaywg TUFfT1dORUQpOworCisJaWYgKG5hbWUgIT0gTlVMTCkgeworCQlzbnByaW50ZihzdHIsIElOVFJO QU1FX0xFTiwgIiVzOiAlcyIsIGlzcmMtPmlzcmNfbmFtZSwgbmFtZSk7CisJCWludHJjbnRfc2V0 bmFtZShzdHIsIGlzcmMtPmlzcmNfaW5kZXgpOworCQlzbnByaW50ZihzdHIsIElOVFJOQU1FX0xF TiwgInN0cmF5ICVzOiAlcyIsIGlzcmMtPmlzcmNfbmFtZSwKKwkJICAgIG5hbWUpOworCQlpbnRy Y250X3NldG5hbWUoc3RyLCBpc3JjLT5pc3JjX2luZGV4ICsgMSk7CisJfSBlbHNlIHsKKwkJc25w cmludGYoc3RyLCBJTlRSTkFNRV9MRU4sICIlczoiLCBpc3JjLT5pc3JjX25hbWUpOworCQlpbnRy Y250X3NldG5hbWUoc3RyLCBpc3JjLT5pc3JjX2luZGV4KTsKKwkJc25wcmludGYoc3RyLCBJTlRS TkFNRV9MRU4sICJzdHJheSAlczoiLCBpc3JjLT5pc3JjX25hbWUpOworCQlpbnRyY250X3NldG5h bWUoc3RyLCBpc3JjLT5pc3JjX2luZGV4ICsgMSk7CisJfQorfQorCisvKgorICogIFZpcnR1YWxp emF0aW9uIGZvciBpbnRlcnJ1cHQgc291cmNlIGludGVycnVwdCBjb3VudGVycyBzZXR1cC4KKyAq Lworc3RhdGljIHZvaWQKK2lzcmNfc2V0dXBfY291bnRlcnMoc3RydWN0IGFybV9pcnFzcmMgKmlz cmMpCit7CisJdV9pbnQgaW5kZXg7CisKKwkvKgorCSAqICBYWFggLSBpdCBkb2VzIG5vdCB3b3Jr IHdlbGwgd2l0aCByZW1vdmFibGUgY29udHJvbGxlcnMgYW5kCisJICogICAgICAgIGludGVycnVw dCBzb3VyY2VzICEhIQorCSAqLworCWluZGV4ID0gYXRvbWljX2ZldGNoYWRkX2ludCgmaW50cmNu dF9pbmRleCwgMik7CisJaXNyYy0+aXNyY19pbmRleCA9IGluZGV4OworCWlzcmMtPmlzcmNfY291 bnQgPSAmaW50cmNudFtpbmRleF07CisJaXNyY191cGRhdGVfbmFtZShpc3JjLCBOVUxMKTsKK30K KworI2lmZGVmIFNNUAorLyoKKyAqICBWaXJ0dWFsaXphdGlvbiBmb3IgaW50ZXJydXB0IHNvdXJj ZSBJUEkgY291bnRlciBpbmNyZW1lbnQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAoraXNyY19p bmNyZW1lbnRfaXBpX2NvdW50KHN0cnVjdCBhcm1faXJxc3JjICppc3JjLCB1X2ludCBjcHUpCit7 CisKKwlpc3JjLT5pc3JjX2NvdW50W2NwdV0rKzsKK30KKworLyoKKyAqICBWaXJ0dWFsaXphdGlv biBmb3IgaW50ZXJydXB0IHNvdXJjZSBJUEkgY291bnRlcnMgc2V0dXAuCisgKi8KK3N0YXRpYyB2 b2lkCitpc3JjX3NldHVwX2lwaV9jb3VudGVycyhzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYywgY29u c3QgY2hhciAqbmFtZSkKK3sKKwl1X2ludCBpbmRleCwgaTsKKwljaGFyIHN0cltJTlRSTkFNRV9M RU5dOworCisJaW5kZXggPSBhdG9taWNfZmV0Y2hhZGRfaW50KCZpbnRyY250X2luZGV4LCBNQVhD UFUpOworCWlzcmMtPmlzcmNfaW5kZXggPSBpbmRleDsKKwlpc3JjLT5pc3JjX2NvdW50ID0gJmlu dHJjbnRbaW5kZXhdOworCisJZm9yIChpID0gMDsgaSA8IE1BWENQVTsgaSsrKSB7CisJCS8qCisJ CSAqIFdlIGRvIG5vdCBleHBlY3QgYW55IHJhY2UgaW4gSVBJIGNhc2UgaGVyZSwKKwkJICogc28g bG9ja2luZyBpcyBub3QgbmVlZGVkLgorCQkgKi8KKwkJc25wcmludGYoc3RyLCBJTlRSTkFNRV9M RU4sICJjcHUlZDolcyIsIGksIG5hbWUpOworCQlpbnRyY250X3NldG5hbWUoc3RyLCBpbmRleCAr IGkpOworCX0KK30KKyNlbmRpZgorCisvKgorICogIE1haW4gQVJNIGludGVycnVwdCBkaXNwYXRj aCBoYW5kbGVyLiBJdCdzIGNhbGxlZCBzdHJhaWdodAorICogIGZyb20gdGhlIGFzc2VtYmxlciwg d2hlcmUgQ1BVIGludGVycnVwdCBpcyBzZXJ2ZWQuCisgKi8KK3ZvaWQKK2FybV9pcnFfaGFuZGxl cihzdHJ1Y3QgdHJhcGZyYW1lICp0ZikKK3sKKworCUtBU1NFUlQoaXJxX3Jvb3RfZmlsdGVyICE9 IE5VTEwsICgiJXM6IG5vIGZpbHRlciIsIF9fZnVuY19fKSk7CisKKwlQQ1BVX0lOQyhjbnQudl9p bnRyKTsKKwlpcnFfcm9vdF9maWx0ZXIoaXJxX3Jvb3RfYXJnLCB0Zik7Cit9CisKKy8qCisgKiAg QVJNIGludGVycnVwdCBjb250cm9sbGVyIGRpc3BhdGNoIGZ1bmN0aW9uIGZvciBpbnRlcnJ1cHRz LiBJdCBzaG91bGQKKyAqICBiZSBjYWxsZWQgc3RyYWlnaHQgZnJvbSB0aGUgaW50ZXJydXB0IGNv bnRyb2xsZXIsIHdoZW4gYXNzb2NpYXRlZCBpbnRlcnJ1cHQKKyAqICBzb3VyY2UgaXMgbGVhcm5l ZC4KKyAqLwordm9pZAorYXJtX2lycV9kaXNwYXRjaChzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYywg c3RydWN0IHRyYXBmcmFtZSAqdGYpCit7CisJaW50IGVycm9yOworCisJS0FTU0VSVChpc3JjICE9 IE5VTEwsICgiJXM6IG5vIHNvdXJjZSIsIF9fZnVuY19fKSk7CisKKwlpc3JjX2luY3JlbWVudF9j b3VudChpc3JjKTsKKworCWlmIChpc3JjLT5pc3JjX2ZpbHRlciAhPSBOVUxMKSB7CisJCWVycm9y ID0gaXNyYy0+aXNyY19maWx0ZXIoaXNyYy0+aXNyY19hcmcsIHRmKTsKKwkJUElDX1BPU1RfRklM VEVSKGlzcmMtPmlzcmNfZGV2LCBpc3JjKTsKKwkJaWYgKGVycm9yID09IEZJTFRFUl9IQU5ETEVE KQorCQkJcmV0dXJuOworCX0gZWxzZSBpZiAoaXNyYy0+aXNyY19ldmVudCAhPSBOVUxMKSB7CisJ CWlmIChpbnRyX2V2ZW50X2hhbmRsZShpc3JjLT5pc3JjX2V2ZW50LCB0ZikgPT0gMCkKKwkJCXJl dHVybjsKKwl9CisKKwlpc3JjX2luY3JlbWVudF9zdHJheWNvdW50KGlzcmMpOworCVBJQ19ESVNB QkxFX1NPVVJDRShpc3JjLT5pc3JjX2RldiwgaXNyYyk7CisKKwlkZXZpY2VfcHJpbnRmKGlzcmMt PmlzcmNfZGV2LCAic3RyYXkgaXJxIDwlcz4gZGlzYWJsZWQiLAorCSAgICBpc3JjLT5pc3JjX25h bWUpOworfQorCisvKgorICogIEFsbG9jYXRlIGludGVycnVwdCBzb3VyY2UuCisgKi8KK3N0YXRp YyBzdHJ1Y3QgYXJtX2lycXNyYyAqCitpc3JjX2FsbG9jKHVfaW50IHR5cGUsIHVfaW50IGV4dHNp emUpCit7CisJc3RydWN0IGFybV9pcnFzcmMgKmlzcmM7CisKKwlpc3JjID0gbWFsbG9jKHNpemVv ZigqaXNyYykgKyBleHRzaXplLCBNX0lOVFJORywgTV9XQUlUT0sgfCBNX1pFUk8pOworCWlzcmMt PmlzcmNfaXJxID0gSVJRX0lOVkFMSUQ7CS8qIGp1c3QgdG8gYmUgc2FmZSAqLworCWlzcmMtPmlz cmNfdHlwZSA9IHR5cGU7CisJaXNyYy0+aXNyY19uc3BjX3R5cGUgPSBBUk1fSVJRX05TUENfTk9O RTsKKwlpc3JjLT5pc3JjX3RyaWcgPSBJTlRSX1RSSUdHRVJfQ09ORk9STTsKKwlpc3JjLT5pc3Jj X3BvbCA9IElOVFJfUE9MQVJJVFlfQ09ORk9STTsKKwlDUFVfWkVSTygmaXNyYy0+aXNyY19jcHUp OworCXJldHVybiAoaXNyYyk7Cit9CisKKy8qCisgKiAgRnJlZSBpbnRlcnJ1cHQgc291cmNlLgor ICovCitzdGF0aWMgdm9pZAoraXNyY19mcmVlKHN0cnVjdCBhcm1faXJxc3JjICppc3JjKQorewor CisJZnJlZShpc3JjLCBNX0lOVFJORyk7Cit9CisKK3ZvaWQKK2FybV9pcnFfc2V0X25hbWUoc3Ry dWN0IGFybV9pcnFzcmMgKmlzcmMsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3Qg YXA7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwl2c25wcmludGYoaXNyYy0+aXNyY19uYW1lLCBB Uk1fSVNSQ19OQU1FTEVOLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworfQorCisvKgorICogIEFs bG9jIHVuaXF1ZSBpbnRlcnJ1cHQgbnVtYmVyIChyZXNvdXJjZSBoYW5kbGUpIGZvciBpbnRlcnJ1 cHQgc291cmNlLgorICoKKyAqICBUaGVyZSBjb3VsZCBiZSB2YXJpb3VzIHN0cmF0ZWdpZXMgaG93 IHRvIGFsbG9jYXRlIGZyZWUgaW50ZXJydXB0IG51bWJlcgorICogIChyZXNvdXJjZSBoYW5kbGUp IGZvciBuZXcgaW50ZXJydXB0IHNvdXJjZS4KKyAqCisgKiAgMS4gSGFuZGxlcyBhcmUgYWx3YXlz IGFsbG9jYXRlZCBmb3J3YXJkLCBzbyBoYW5kbGVzIGFyZSBub3QgcmVjeWNsZWQKKyAqICAgICBp bW1lZGlhdGVseS4gSG93ZXZlciwgaWYgb25seSBvbmUgZnJlZSBoYW5kbGUgbGVmdCB3aGljaCBp cyByZXVzZWQKKyAqICAgICBjb25zdGFudGx5Li4uCisgKi8KK3N0YXRpYyBpbnQKK2lzcmNfYWxs b2NfaXJxX2xvY2tlZChzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYykKK3sKKwl1X2ludCBtYXhpcnFz LCBpcnE7CisKKwltdHhfYXNzZXJ0KCZpc3JjX3RhYmxlX2xvY2ssIE1BX09XTkVEKTsKKworCW1h eGlycXMgPSBuaXRlbXMoaXJxX3NvdXJjZXMpOworCWlmIChpcnFfbmV4dF9mcmVlID49IG1heGly cXMpCisJCXJldHVybiAoRU5PU1BDKTsKKworCWZvciAoaXJxID0gaXJxX25leHRfZnJlZTsgaXJx IDwgbWF4aXJxczsgaXJxKyspIHsKKwkJaWYgKGlycV9zb3VyY2VzW2lycV0gPT0gTlVMTCkKKwkJ CWdvdG8gZm91bmQ7CisJfQorCWZvciAoaXJxID0gMDsgaXJxIDwgaXJxX25leHRfZnJlZTsgaXJx KyspIHsKKwkJaWYgKGlycV9zb3VyY2VzW2lycV0gPT0gTlVMTCkKKwkJCWdvdG8gZm91bmQ7CisJ fQorCisJaXJxX25leHRfZnJlZSA9IG1heGlycXM7CisJcmV0dXJuIChFTk9TUEMpOworCitmb3Vu ZDoKKwlpc3JjLT5pc3JjX2lycSA9IGlycTsKKwlpcnFfc291cmNlc1tpcnFdID0gaXNyYzsKKwor CWFybV9pcnFfc2V0X25hbWUoaXNyYywgImlycSV1IiwgaXJxKTsKKwlpc3JjX3NldHVwX2NvdW50 ZXJzKGlzcmMpOworCisJaXJxX25leHRfZnJlZSA9IGlycSArIDE7CisJaWYgKGlycV9uZXh0X2Zy ZWUgPj0gbWF4aXJxcykKKwkJaXJxX25leHRfZnJlZSA9IDA7CisJcmV0dXJuICgwKTsKK30KKyNp ZmRlZiBub3R5ZXQKKy8qCisgKiAgRnJlZSB1bmlxdWUgaW50ZXJydXB0IG51bWJlciAocmVzb3Vy Y2UgaGFuZGxlKSBmcm9tIGludGVycnVwdCBzb3VyY2UuCisgKi8KK3N0YXRpYyBpbnQKK2lzcmNf ZnJlZV9pcnEoc3RydWN0IGFybV9pcnFzcmMgKmlzcmMpCit7CisJdV9pbnQgbWF4aXJxczsKKwor CW10eF9hc3NlcnQoJmlzcmNfdGFibGVfbG9jaywgTUFfTk9UT1dORUQpOworCisJbWF4aXJxcyA9 IG5pdGVtcyhpcnFfc291cmNlcyk7CisJaWYgKGlzcmMtPmlzcmNfaXJxID49IG1heGlycXMpCisJ CXJldHVybiAoRUlOVkFMKTsKKworCW10eF9sb2NrKCZpc3JjX3RhYmxlX2xvY2spOworCWlmIChp cnFfc291cmNlc1tpc3JjLT5pc3JjX2lycV0gIT0gaXNyYykgeworCQltdHhfdW5sb2NrKCZpc3Jj X3RhYmxlX2xvY2spOworCQlyZXR1cm4gKEVJTlZBTCk7CisJfQorCisJaXJxX3NvdXJjZXNbaXNy Yy0+aXNyY19pcnFdID0gTlVMTDsKKwlpc3JjLT5pc3JjX2lycSA9IElSUV9JTlZBTElEOwkvKiBq dXN0IHRvIGJlIHNhZmUgKi8KKwltdHhfdW5sb2NrKCZpc3JjX3RhYmxlX2xvY2spOworCisJcmV0 dXJuICgwKTsKK30KKyNlbmRpZgorLyoKKyAqICBMb29rdXAgaW50ZXJydXB0IHNvdXJjZSBieSBp bnRlcnJ1cHQgbnVtYmVyIChyZXNvdXJjZSBoYW5kbGUpLgorICovCitzdGF0aWMgc3RydWN0IGFy bV9pcnFzcmMgKgoraXNyY19sb29rdXAodV9pbnQgaXJxKQoreworCisJaWYgKGlycSA8IG5pdGVt cyhpcnFfc291cmNlcykpCisJCXJldHVybiAoaXJxX3NvdXJjZXNbaXJxXSk7CisJcmV0dXJuIChO VUxMKTsKK30KKworLyoKKyAqICBMb29rdXAgaW50ZXJydXB0IHNvdXJjZSBieSBuYW1lc3BhY2Ug ZGF0YS4KKyAqLworc3RhdGljIHN0cnVjdCBhcm1faXJxc3JjICoKK2lzcmNfbmFtZXNwYWNlX2xv b2t1cChkZXZpY2VfdCBkZXYsIHVpbnQxNl90IHR5cGUsIHVpbnQxNl90IG51bSkKK3sKKwl1X2lu dCBpcnE7CisJc3RydWN0IGFybV9pcnFzcmMgKmlzcmM7CisKKwltdHhfYXNzZXJ0KCZpc3JjX3Rh YmxlX2xvY2ssIE1BX09XTkVEKTsKKworCWZvciAoaXJxID0gMDsgaXJxIDwgbml0ZW1zKGlycV9z b3VyY2VzKTsgaXJxKyspIHsKKwkJaXNyYyA9IGlycV9zb3VyY2VzW2lycV07CisJCWlmIChpc3Jj ICE9IE5VTEwgJiYgaXNyYy0+aXNyY19kZXYgPT0gZGV2ICYmCisJCSAgICBpc3JjLT5pc3JjX25z cGNfdHlwZSA9PSB0eXBlICYmIGlzcmMtPmlzcmNfbnNwY19udW0gPT0gbnVtKQorCQkJcmV0dXJu IChpc3JjKTsKKwl9CisJcmV0dXJuIChOVUxMKTsKK30KKworLyoKKyAqICBNYXAgaW50ZXJydXB0 IHNvdXJjZSBhY2NvcmRpbmcgdG8gbmFtZXNwYWNlIGludG8gZnJhbWV3b3JrLiBJZiBzdWNoIG1h cHBpbmcKKyAqICBkb2VzIG5vdCBleGlzdCwgY3JlYXRlIGl0LiBSZXR1cm4gdW5pcXVlIGludGVy cnVwdCBudW1iZXIgKHJlc291cmNlIGhhbmRsZSkKKyAqICBhc3NvY2lhdGVkIHdpdGggbWFwcGVk IGludGVycnVwdCBzb3VyY2UuCisgKi8KK3VfaW50Cithcm1fbmFtZXNwYWNlX21hcF9pcnEoZGV2 aWNlX3QgZGV2LCB1aW50MTZfdCB0eXBlLCB1aW50MTZfdCBudW0pCit7CisJc3RydWN0IGFybV9p cnFzcmMgKmlzcmMsICpuZXdfaXNyYzsKKwlpbnQgZXJyb3I7CisKKwluZXdfaXNyYyA9IGlzcmNf YWxsb2MoQVJNX0lTUkNUX05BTUVTUEFDRSwgMCk7CisKKwltdHhfbG9jaygmaXNyY190YWJsZV9s b2NrKTsKKwlpc3JjID0gaXNyY19uYW1lc3BhY2VfbG9va3VwKGRldiwgdHlwZSwgbnVtKTsKKwlp ZiAoaXNyYyAhPSBOVUxMKSB7CisJCW10eF91bmxvY2soJmlzcmNfdGFibGVfbG9jayk7CisJCWlz cmNfZnJlZShuZXdfaXNyYyk7CisJCXJldHVybiAoaXNyYy0+aXNyY19pcnEpOwkvKiBhbHJlYWR5 IG1hcHBlZCAqLworCX0KKworCWVycm9yID0gaXNyY19hbGxvY19pcnFfbG9ja2VkKG5ld19pc3Jj KTsKKwlpZiAoZXJyb3IgIT0gMCkgeworCQltdHhfdW5sb2NrKCZpc3JjX3RhYmxlX2xvY2spOwor CQlpc3JjX2ZyZWUobmV3X2lzcmMpOworCQlyZXR1cm4gKElSUV9JTlZBTElEKTsJCS8qIG5vIHNw YWNlIGxlZnQgKi8KKwl9CisKKwluZXdfaXNyYy0+aXNyY19kZXYgPSBkZXY7CisJbmV3X2lzcmMt PmlzcmNfbnNwY190eXBlID0gdHlwZTsKKwluZXdfaXNyYy0+aXNyY19uc3BjX251bSA9IG51bTsK KwltdHhfdW5sb2NrKCZpc3JjX3RhYmxlX2xvY2spOworCisJcmV0dXJuIChuZXdfaXNyYy0+aXNy Y19pcnEpOworfQorCisjaWZkZWYgRkRUCisvKgorICogIExvb2t1cCBpbnRlcnJ1cHQgc291cmNl IGJ5IEZEVCBkYXRhLgorICovCitzdGF0aWMgc3RydWN0IGFybV9pcnFzcmMgKgoraXNyY19mZHRf bG9va3VwKGludHB0cl90IHhyZWYsIHBjZWxsX3QgKmNlbGxzLCB1X2ludCBuY2VsbHMpCit7CisJ dV9pbnQgaXJxLCBjZWxsc2l6ZTsKKwlzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYzsKKworCW10eF9h c3NlcnQoJmlzcmNfdGFibGVfbG9jaywgTUFfT1dORUQpOworCisJY2VsbHNpemUgPSBuY2VsbHMg KiBzaXplb2YoKmNlbGxzKTsKKwlmb3IgKGlycSA9IDA7IGlycSA8IG5pdGVtcyhpcnFfc291cmNl cyk7IGlycSsrKSB7CisJCWlzcmMgPSBpcnFfc291cmNlc1tpcnFdOworCQlpZiAoaXNyYyAhPSBO VUxMICYmIGlzcmMtPmlzcmNfdHlwZSA9PSBBUk1fSVNSQ1RfRkRUICYmCisJCSAgICBpc3JjLT5p c3JjX3hyZWYgPT0geHJlZiAmJiBpc3JjLT5pc3JjX25jZWxscyA9PSBuY2VsbHMgJiYKKwkJICAg IG1lbWNtcChpc3JjLT5pc3JjX2NlbGxzLCBjZWxscywgY2VsbHNpemUpID09IDApCisJCQlyZXR1 cm4gKGlzcmMpOworCX0KKwlyZXR1cm4gKE5VTEwpOworfQorCisvKgorICogIE1hcCBpbnRlcnJ1 cHQgc291cmNlIGFjY29yZGluZyB0byBGRFQgZGF0YSBpbnRvIGZyYW1ld29yay4gSWYgc3VjaCBt YXBwaW5nCisgKiAgZG9lcyBub3QgZXhpc3QsIGNyZWF0ZSBpdC4gUmV0dXJuIHVuaXF1ZSBpbnRl cnJ1cHQgbnVtYmVyIChyZXNvdXJjZSBoYW5kbGUpCisgKiAgYXNzb2NpYXRlZCB3aXRoIG1hcHBl ZCBpbnRlcnJ1cHQgc291cmNlLgorICovCit1X2ludAorYXJtX2ZkdF9tYXBfaXJxKHBoYW5kbGVf dCBub2RlLCBwY2VsbF90ICpjZWxscywgdV9pbnQgbmNlbGxzKQoreworCXN0cnVjdCBhcm1faXJx c3JjICppc3JjLCAqbmV3X2lzcmM7CisJdV9pbnQgY2VsbHNpemU7CisJaW50cHRyX3QgeHJlZjsK KwlpbnQgZXJyb3I7CisKKwl4cmVmID0gKGludHB0cl90KW5vZGU7CS8qIEl0J3Mgc28gc2ltcGxl IGZvciBub3cuICovCisKKwljZWxsc2l6ZSA9IG5jZWxscyAqIHNpemVvZigqY2VsbHMpOworCW5l d19pc3JjID0gaXNyY19hbGxvYyhBUk1fSVNSQ1RfRkRULCBjZWxsc2l6ZSk7CisKKwltdHhfbG9j aygmaXNyY190YWJsZV9sb2NrKTsKKwlpc3JjID0gaXNyY19mZHRfbG9va3VwKHhyZWYsIGNlbGxz LCBuY2VsbHMpOworCWlmIChpc3JjICE9IE5VTEwpIHsKKwkJbXR4X3VubG9jaygmaXNyY190YWJs ZV9sb2NrKTsKKwkJaXNyY19mcmVlKG5ld19pc3JjKTsKKwkJcmV0dXJuIChpc3JjLT5pc3JjX2ly cSk7CS8qIGFscmVhZHkgbWFwcGVkICovCisJfQorCisJZXJyb3IgPSBpc3JjX2FsbG9jX2lycV9s b2NrZWQobmV3X2lzcmMpOworCWlmIChlcnJvciAhPSAwKSB7CisJCW10eF91bmxvY2soJmlzcmNf dGFibGVfbG9jayk7CisJCWlzcmNfZnJlZShuZXdfaXNyYyk7CisJCXJldHVybiAoSVJRX0lOVkFM SUQpOwkJLyogbm8gc3BhY2UgbGVmdCAqLworCX0KKworCW5ld19pc3JjLT5pc3JjX3hyZWYgPSB4 cmVmOworCW5ld19pc3JjLT5pc3JjX25jZWxscyA9IG5jZWxsczsKKwltZW1jcHkobmV3X2lzcmMt PmlzcmNfY2VsbHMsIGNlbGxzLCBjZWxsc2l6ZSk7CisJbXR4X3VubG9jaygmaXNyY190YWJsZV9s b2NrKTsKKworCXJldHVybiAobmV3X2lzcmMtPmlzcmNfaXJxKTsKK30KKyNlbmRpZgorCisvKgor ICogIFJlZ2lzdGVyIGludGVycnVwdCBzb3VyY2UgaW50byBpbnRlcnJ1cHQgY29udHJvbGxlci4K KyAqLworc3RhdGljIGludAoraXNyY19yZWdpc3RlcihzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYykK K3sKKwlzdHJ1Y3QgYXJtX3BpYyAqcGljOworCWJvb2xlYW5fdCBpc19wZXJjcHU7CisJaW50IGVy cm9yOworCisJaWYgKGlzcmMtPmlzcmNfZmxhZ3MgJiBJU1JDRl9SRUdJU1RFUkVEKQorCQlyZXR1 cm4gKDApOworCisJaWYgKGlzcmMtPmlzcmNfZGV2ID09IE5VTEwpIHsKKwkJcGljID0gcGljX2xv b2t1cChOVUxMLCBpc3JjLT5pc3JjX3hyZWYpOworCQlpZiAocGljID09IE5VTEwgfHwgcGljLT5w aWNfZGV2ID09IE5VTEwpCisJCQlyZXR1cm4gKEVTUkNIKTsKKwkJaXNyYy0+aXNyY19kZXYgPSBw aWMtPnBpY19kZXY7CisJfQorCisJZXJyb3IgPSBQSUNfUkVHSVNURVIoaXNyYy0+aXNyY19kZXYs IGlzcmMsICZpc19wZXJjcHUpOworCWlmIChlcnJvciAhPSAwKQorCQlyZXR1cm4gKGVycm9yKTsK KworCW10eF9sb2NrKCZpc3JjX3RhYmxlX2xvY2spOworCWlzcmMtPmlzcmNfZmxhZ3MgfD0gSVNS Q0ZfUkVHSVNURVJFRDsKKwlpZiAoaXNfcGVyY3B1KQorCQlpc3JjLT5pc3JjX2ZsYWdzIHw9IElT UkNGX1BFUkNQVTsKKwlpc3JjX3VwZGF0ZV9uYW1lKGlzcmMsIE5VTEwpOworCW10eF91bmxvY2so JmlzcmNfdGFibGVfbG9jayk7CisJcmV0dXJuICgwKTsKK30KKworLyoKKyAqICBTZXR1cCBmaWx0 ZXIgaW50byBpbnRlcnJ1cHQgc291cmNlLgorICovCitzdGF0aWMgaW50Citpc2NyX3NldHVwX2Zp bHRlcihzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYywgY29uc3QgY2hhciAqbmFtZSwKKyAgICBhcm1f aXJxX2ZpbHRlcl90ICpmaWx0ZXIsIHZvaWQgKmFyZywgdm9pZCAqKmNvb2tpZXApCit7CisKKwlp ZiAoZmlsdGVyID09IE5VTEwpCisJCXJldHVybiAoRUlOVkFMKTsKKworCW10eF9sb2NrKCZpc3Jj X3RhYmxlX2xvY2spOworCS8qCisJICogTWFrZSBzdXJlIHRoYXQgd2UgZG8gbm90IG1peCB0aGUg dHdvIHdheXMKKwkgKiBob3cgd2UgaGFuZGxlIGludGVycnVwdCBzb3VyY2VzLgorCSAqLworCWlm IChpc3JjLT5pc3JjX2ZpbHRlciAhPSBOVUxMIHx8IGlzcmMtPmlzcmNfZXZlbnQgIT0gTlVMTCkg eworCQltdHhfdW5sb2NrKCZpc3JjX3RhYmxlX2xvY2spOworCQlyZXR1cm4gKEVCVVNZKTsKKwl9 CisJaXNyYy0+aXNyY19maWx0ZXIgPSBmaWx0ZXI7CisJaXNyYy0+aXNyY19hcmcgPSBhcmc7CisJ aXNyY191cGRhdGVfbmFtZShpc3JjLCBuYW1lKTsKKwltdHhfdW5sb2NrKCZpc3JjX3RhYmxlX2xv Y2spOworCisJKmNvb2tpZXAgPSBpc3JjOworCXJldHVybiAoMCk7Cit9CisKKy8qCisgKiAgSW50 ZXJydXB0IHNvdXJjZSBwcmVfaXRocmVhZCBtZXRob2QgZm9yIE1JIGludGVycnVwdCBmcmFtZXdv cmsuCisgKi8KK3N0YXRpYyB2b2lkCithcm1faXNyY19wcmVfaXRocmVhZCh2b2lkICphcmcpCit7 CisJc3RydWN0IGFybV9pcnFzcmMgKmlzcmMgPSBhcmc7CisKKwlQSUNfUFJFX0lUSFJFQUQoaXNy Yy0+aXNyY19kZXYsIGlzcmMpOworfQorCisvKgorICogIEludGVycnVwdCBzb3VyY2UgcG9zdF9p dGhyZWFkIG1ldGhvZCBmb3IgTUkgaW50ZXJydXB0IGZyYW1ld29yay4KKyAqLworc3RhdGljIHZv aWQKK2FybV9pc3JjX3Bvc3RfaXRocmVhZCh2b2lkICphcmcpCit7CisJc3RydWN0IGFybV9pcnFz cmMgKmlzcmMgPSBhcmc7CisKKwlQSUNfUE9TVF9JVEhSRUFEKGlzcmMtPmlzcmNfZGV2LCBpc3Jj KTsKK30KKworLyoKKyAqICBJbnRlcnJ1cHQgc291cmNlIHBvc3RfZmlsdGVyIG1ldGhvZCBmb3Ig TUkgaW50ZXJydXB0IGZyYW1ld29yay4KKyAqLworc3RhdGljIHZvaWQKK2FybV9pc3JjX3Bvc3Rf ZmlsdGVyKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYyA9IGFyZzsKKwor CVBJQ19QT1NUX0ZJTFRFUihpc3JjLT5pc3JjX2RldiwgaXNyYyk7Cit9CisKKy8qCisgKiAgSW50 ZXJydXB0IHNvdXJjZSBhc3NpZ25fY3B1IG1ldGhvZCBmb3IgTUkgaW50ZXJydXB0IGZyYW1ld29y ay4KKyAqLworc3RhdGljIGludAorYXJtX2lzcmNfYXNzaWduX2NwdSh2b2lkICphcmcsIGludCBj cHUpCit7CisjaWZkZWYgU01QCisJc3RydWN0IGFybV9pcnFzcmMgKmlzcmMgPSBhcmc7CisJaW50 IGVycm9yOworCisJaWYgKGlzcmMtPmlzcmNfZGV2ICE9IGlycV9yb290X2RldikKKwkJcmV0dXJu IChFSU5WQUwpOworCisJbXR4X2xvY2soJmlzcmNfdGFibGVfbG9jayk7CisJaWYgKGNwdSA9PSBO T0NQVSkgeworCQlDUFVfWkVSTygmaXNyYy0+aXNyY19jcHUpOworCQlpc3JjLT5pc3JjX2ZsYWdz ICY9IH5JU1JDRl9CT1VORDsKKwl9IGVsc2UgeworCQlDUFVfU0VUT0YoY3B1LCAmaXNyYy0+aXNy Y19jcHUpOworCQlpc3JjLT5pc3JjX2ZsYWdzIHw9IElTUkNGX0JPVU5EOworCX0KKworCS8qCisJ ICogSW4gTk9DUFUgY2FzZSwgaXQncyB1cCB0byBQSUMgdG8gbGVhdmUgSVNSQyBlaXRoZXIgb24g c2FtZSBDUFUgb3IKKwkgKiByZS1iYWxhbmNlIGl0IHRvIGFub3RoZXIgQ1BVIG9yIGVuYWJsZSBp dCBvbiBtb3JlIENQVXMuIEhvd2V2ZXIsCisJICogUElDIGlzIGV4cGVjdGVkIHRvIGNoYW5nZSBp c3JjX2NwdSBhcHByb3ByaWF0ZWx5IHRvIGtlZXAgdXMgd2VsbAorCSAqIGluZm9ybWVkIGlmIHRo ZSBjYWxsIGlzIHN1Y2Nlc3NmdWxsLgorCSAqLworCWlmIChpcnFfYXNzaWduX2NwdSkgeworCQll cnJvciA9IFBJQ19CSU5EKGlzcmMtPmlzcmNfZGV2LCBpc3JjKTsKKwkJaWYgKGVycm9yKSB7CisJ CQlDUFVfWkVSTygmaXNyYy0+aXNyY19jcHUpOworCQkJbXR4X3VubG9jaygmaXNyY190YWJsZV9s b2NrKTsKKwkJCXJldHVybiAoZXJyb3IpOworCQl9CisJfQorCW10eF91bmxvY2soJmlzcmNfdGFi bGVfbG9jayk7CisJcmV0dXJuICgwKTsKKyNlbHNlCisJcmV0dXJuIChFT1BOT1RTVVBQKTsKKyNl bmRpZgorfQorCisvKgorICogIENyZWF0ZSBpbnRlcnJ1cHQgZXZlbnQgZm9yIGludGVycnVwdCBz b3VyY2UuCisgKi8KK3N0YXRpYyBpbnQKK2lzcmNfZXZlbnRfY3JlYXRlKHN0cnVjdCBhcm1faXJx c3JjICppc3JjKQoreworCXN0cnVjdCBpbnRyX2V2ZW50ICppZTsKKwlpbnQgZXJyb3I7CisKKwll cnJvciA9IGludHJfZXZlbnRfY3JlYXRlKCZpZSwgaXNyYywgMCwgaXNyYy0+aXNyY19pcnEsCisJ ICAgIGFybV9pc3JjX3ByZV9pdGhyZWFkLCBhcm1faXNyY19wb3N0X2l0aHJlYWQsIGFybV9pc3Jj X3Bvc3RfZmlsdGVyLAorCSAgICBhcm1faXNyY19hc3NpZ25fY3B1LCAiJXM6IiwgaXNyYy0+aXNy Y19uYW1lKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiAoZXJyb3IpOworCisJbXR4X2xvY2soJmlz cmNfdGFibGVfbG9jayk7CisJLyoKKwkgKiBNYWtlIHN1cmUgdGhhdCB3ZSBkbyBub3QgbWl4IHRo ZSB0d28gd2F5cworCSAqIGhvdyB3ZSBoYW5kbGUgaW50ZXJydXB0IHNvdXJjZXMuIExldCBjb250 ZXN0ZWQgZXZlbnQgd2lucy4KKwkgKi8KKwlpZiAoaXNyYy0+aXNyY19maWx0ZXIgIT0gTlVMTCB8 fCBpc3JjLT5pc3JjX2V2ZW50ICE9IE5VTEwpIHsKKwkJbXR4X3VubG9jaygmaXNyY190YWJsZV9s b2NrKTsKKwkJaW50cl9ldmVudF9kZXN0cm95KGllKTsKKwkJcmV0dXJuIChpc3JjLT5pc3JjX2V2 ZW50ICE9IE5VTEwgPyBFQlVTWSA6IDApOworCX0KKwlpc3JjLT5pc3JjX2V2ZW50ID0gaWU7CisJ bXR4X3VubG9jaygmaXNyY190YWJsZV9sb2NrKTsKKworCXJldHVybiAoMCk7Cit9CisjaWZkZWYg bm90eWV0CisvKgorICogIERlc3Ryb3kgaW50ZXJydXB0IGV2ZW50IGZvciBpbnRlcnJ1cHQgc291 cmNlLgorICovCitzdGF0aWMgdm9pZAoraXNyY19ldmVudF9kZXN0cm95KHN0cnVjdCBhcm1faXJx c3JjICppc3JjKQoreworCXN0cnVjdCBpbnRyX2V2ZW50ICppZTsKKworCW10eF9sb2NrKCZpc3Jj X3RhYmxlX2xvY2spOworCWllID0gaXNyYy0+aXNyY19ldmVudDsKKwlpc3JjLT5pc3JjX2V2ZW50 ID0gTlVMTDsKKwltdHhfdW5sb2NrKCZpc3JjX3RhYmxlX2xvY2spOworCisJaWYgKGllICE9IE5V TEwpCisJCWludHJfZXZlbnRfZGVzdHJveShpZSk7Cit9CisjZW5kaWYKKy8qCisgKiAgQWRkIGhh bmRsZXIgdG8gaW50ZXJydXB0IHNvdXJjZS4KKyAqLworc3RhdGljIGludAoraXNyY19hZGRfaGFu ZGxlcihzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYywgY29uc3QgY2hhciAqbmFtZSwKKyAgICBkcml2 ZXJfZmlsdGVyX3QgZmlsdGVyLCBkcml2ZXJfaW50cl90IGhhbmRsZXIsIHZvaWQgKmFyZywKKyAg ICBlbnVtIGludHJfdHlwZSBmbGFncywgdm9pZCAqKmNvb2tpZXApCit7CisJaW50IGVycm9yOwor CisJaWYgKGlzcmMtPmlzcmNfZXZlbnQgPT0gTlVMTCkgeworCQllcnJvciA9IGlzcmNfZXZlbnRf Y3JlYXRlKGlzcmMpOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gKGVycm9yKTsKKwl9CisKKwll cnJvciA9IGludHJfZXZlbnRfYWRkX2hhbmRsZXIoaXNyYy0+aXNyY19ldmVudCwgbmFtZSwgZmls dGVyLCBoYW5kbGVyLAorCSAgICBhcmcsIGludHJfcHJpb3JpdHkoZmxhZ3MpLCBmbGFncywgY29v a2llcCk7CisJaWYgKGVycm9yID09IDApIHsKKwkJbXR4X2xvY2soJmlzcmNfdGFibGVfbG9jayk7 CisJCWludHJjbnRfdXBkYXRlbmFtZShpc3JjKTsKKwkJbXR4X3VubG9jaygmaXNyY190YWJsZV9s b2NrKTsKKwl9CisKKwlyZXR1cm4gKGVycm9yKTsKK30KKworLyoKKyAqICBMb29rdXAgaW50ZXJy dXB0IGNvbnRyb2xsZXIgbG9ja2VkLgorICovCitzdGF0aWMgc3RydWN0IGFybV9waWMgKgorcGlj X2xvb2t1cF9sb2NrZWQoZGV2aWNlX3QgZGV2LCBpbnRwdHJfdCB4cmVmKQoreworCXN0cnVjdCBh cm1fcGljICpwaWM7CisKKwltdHhfYXNzZXJ0KCZwaWNfbGlzdF9sb2NrLCBNQV9PV05FRCk7CisK KwlTTElTVF9GT1JFQUNIKHBpYywgJnBpY19saXN0LCBwaWNfbmV4dCkgeworCQlpZiAocGljLT5w aWNfeHJlZiAhPSB4cmVmKQorCQkJY29udGludWU7CisJCWlmIChwaWMtPnBpY194cmVmICE9IDAg fHwgcGljLT5waWNfZGV2ID09IGRldikKKwkJCXJldHVybiAocGljKTsKKwl9CisJcmV0dXJuIChO VUxMKTsKK30KKworLyoKKyAqICBMb29rdXAgaW50ZXJydXB0IGNvbnRyb2xsZXIuCisgKi8KK3N0 YXRpYyBzdHJ1Y3QgYXJtX3BpYyAqCitwaWNfbG9va3VwKGRldmljZV90IGRldiwgaW50cHRyX3Qg eHJlZikKK3sKKwlzdHJ1Y3QgYXJtX3BpYyAqcGljOworCisJbXR4X2xvY2soJnBpY19saXN0X2xv Y2spOworCXBpYyA9IHBpY19sb29rdXBfbG9ja2VkKGRldiwgeHJlZik7CisJbXR4X3VubG9jaygm cGljX2xpc3RfbG9jayk7CisKKwlyZXR1cm4gKHBpYyk7Cit9CisKKy8qCisgKiAgQ3JlYXRlIGlu dGVycnVwdCBjb250cm9sbGVyLgorICovCitzdGF0aWMgc3RydWN0IGFybV9waWMgKgorcGljX2Ny ZWF0ZShkZXZpY2VfdCBkZXYsIGludHB0cl90IHhyZWYpCit7CisJc3RydWN0IGFybV9waWMgKnBp YzsKKworCW10eF9sb2NrKCZwaWNfbGlzdF9sb2NrKTsKKwlwaWMgPSBwaWNfbG9va3VwX2xvY2tl ZChkZXYsIHhyZWYpOworCWlmIChwaWMgIT0gTlVMTCkgeworCQltdHhfdW5sb2NrKCZwaWNfbGlz dF9sb2NrKTsKKwkJcmV0dXJuIChwaWMpOworCX0KKwlwaWMgPSBtYWxsb2Moc2l6ZW9mKCpwaWMp LCBNX0lOVFJORywgTV9OT1dBSVQgfCBNX1pFUk8pOworCXBpYy0+cGljX3hyZWYgPSB4cmVmOwor CXBpYy0+cGljX2RldiA9IGRldjsKKwlTTElTVF9JTlNFUlRfSEVBRCgmcGljX2xpc3QsIHBpYywg cGljX25leHQpOworCW10eF91bmxvY2soJnBpY19saXN0X2xvY2spOworCisJcmV0dXJuIChwaWMp OworfQorI2lmZGVmIG5vdHlldAorLyoKKyAqICBEZXN0cm95IGludGVycnVwdCBjb250cm9sbGVy LgorICovCitzdGF0aWMgdm9pZAorcGljX2Rlc3Ryb3koZGV2aWNlX3QgZGV2LCBpbnRwdHJfdCB4 cmVmKQoreworCXN0cnVjdCBhcm1fcGljICpwaWM7CisKKwltdHhfbG9jaygmcGljX2xpc3RfbG9j ayk7CisJcGljID0gcGljX2xvb2t1cF9sb2NrZWQoZGV2LCB4cmVmKTsKKwlpZiAocGljID09IE5V TEwpIHsKKwkJbXR4X3VubG9jaygmcGljX2xpc3RfbG9jayk7CisJCXJldHVybjsKKwl9CisJU0xJ U1RfUkVNT1ZFKCZwaWNfbGlzdCwgcGljLCBhcm1fcGljLCBwaWNfbmV4dCk7CisJbXR4X3VubG9j aygmcGljX2xpc3RfbG9jayk7CisKKwlmcmVlKHBpYywgTV9JTlRSTkcpOworfQorI2VuZGlmCisv KgorICogIFJlZ2lzdGVyIGludGVycnVwdCBjb250cm9sbGVyLgorICovCitpbnQKK2FybV9waWNf cmVnaXN0ZXIoZGV2aWNlX3QgZGV2LCBpbnRwdHJfdCB4cmVmKQoreworCXN0cnVjdCBhcm1fcGlj ICpwaWM7CisKKwlwaWMgPSBwaWNfY3JlYXRlKGRldiwgeHJlZik7CisJaWYgKHBpYyA9PSBOVUxM KQorCQlyZXR1cm4gKEVOT01FTSk7CisJaWYgKHBpYy0+cGljX2RldiAhPSBkZXYpCisJCXJldHVy biAoRUlOVkFMKTsJLyogWFhYIGl0IGNvdWxkIGJlIG1hbnkgdGhpbmdzLiAqLworCisJZGVidWdm KCJQSUMgJXAgcmVnaXN0ZXJlZCBmb3IgJXMgPHhyZWYgJXg+XG4iLCBwaWMsCisJICAgIGRldmlj ZV9nZXRfbmFtZXVuaXQoZGV2KSwgeHJlZik7CisJcmV0dXJuICgwKTsKK30KKworLyoKKyAqICBV bnJlZ2lzdGVyIGludGVycnVwdCBjb250cm9sbGVyLgorICovCitpbnQKK2FybV9waWNfdW5yZWdp c3RlcihkZXZpY2VfdCBkZXYsIGludHB0cl90IHhyZWYpCit7CisKKwlwYW5pYygiJXM6IG5vdCBp bXBsZW1lbnRlZCIsIF9fZnVuY19fKTsKK30KKworLyoKKyAqICBNYXJrIGludGVycnVwdCBjb250 cm9sbGVyIChpdHNlbGYpIGFzIGEgcm9vdCBvbmUuCisgKgorICogIE5vdGUgdGhhdCBvbmx5IGFu IGludGVycnVwdCBjb250cm9sbGVyIGNhbiByZWFsbHkga25vdyBpdHMgcG9zaXRpb24KKyAqICBp biBpbnRlcnJ1cHQgY29udHJvbGxlcidzIHRyZWUuIFNvIHJvb3QgUElDIG11c3QgY2xhaW0gaXRz ZWxmIGFzIGEgcm9vdC4KKyAqCisgKiAgSW4gRkRUIGNhc2UsIGFjY29yZGluZyB0byBlUEFQUiBh cHByb3ZlZCB2ZXJzaW9uIDEuMSBmcm9tIDA4IEFwcmlsIDIwMTEsCisgKiAgcGFnZSAzMDoKKyAq ICAgICJUaGUgcm9vdCBvZiB0aGUgaW50ZXJydXB0IHRyZWUgaXMgZGV0ZXJtaW5lZCB3aGVuIHRy YXZlcnNhbAorICogICAgIG9mIHRoZSBpbnRlcnJ1cHQgdHJlZSByZWFjaGVzIGFuIGludGVycnVw dCBjb250cm9sbGVyIG5vZGUgd2l0aG91dAorICogICAgIGFuIGludGVycnVwdHMgcHJvcGVydHkg YW5kIHRodXMgbm8gZXhwbGljaXQgaW50ZXJydXB0IHBhcmVudC4iCisgKi8KK2ludAorYXJtX3Bp Y19jbGFpbV9yb290KGRldmljZV90IGRldiwgaW50cHRyX3QgeHJlZiwgYXJtX2lycV9maWx0ZXJf dCAqZmlsdGVyLAorICAgIHZvaWQgKmFyZywgdV9pbnQgaXBpY291bnQpCit7CisKKwlpZiAocGlj X2xvb2t1cChkZXYsIHhyZWYpID09IE5VTEwpIHsKKwkJZGV2aWNlX3ByaW50ZihkZXYsICJub3Qg cmVnaXN0ZXJlZFxuIik7CisJCXJldHVybiAoRUlOVkFMKTsKKwl9CisJaWYgKGZpbHRlciA9PSBO VUxMKSB7CisJCWRldmljZV9wcmludGYoZGV2LCAiZmlsdGVyIG1pc3NpbmdcbiIpOworCQlyZXR1 cm4gKEVJTlZBTCk7CisJfQorCisJLyoKKwkgKiBPbmx5IG9uZSBpbnRlcnJ1cHQgY29udHJvbGxl cnMgY291bGQgYmUgb24gdGhlIHJvb3QgZm9yIG5vdy4KKwkgKiBGdXJ0aGVyLCB3ZSBzdXBwb3Nl IHRoYXQgdGhlcmUgaXMgbm90IHRocmVhZGVkIGludGVycnVwdAorCSAqIHJvdXRpbmUgKGhhbmRs ZXIpIG9uIHRoZSByb290LiBTZWUgYXJtX2lycV9oYW5kbGVyKCkuCisJICovCisJaWYgKGlycV9y b290X2RldiAhPSBOVUxMKSB7CisJCWRldmljZV9wcmludGYoZGV2LCAiYW5vdGhlciByb290IGFs cmVhZHkgc2V0XG4iKTsKKwkJcmV0dXJuIChFQlVTWSk7CisJfQorCisJaXJxX3Jvb3RfZGV2ID0g ZGV2OworCWlycV9yb290X2ZpbHRlciA9IGZpbHRlcjsKKwlpcnFfcm9vdF9hcmcgPSBhcmc7CisJ aXJxX3Jvb3RfaXBpY291bnQgPSBpcGljb3VudDsKKworCWRlYnVnZigiaXJxIHJvb3Qgc2V0IHRv ICVzXG4iLCBkZXZpY2VfZ2V0X25hbWV1bml0KGRldikpOworCXJldHVybiAoMCk7Cit9CisKK2lu dAorYXJtX2lycV9hZGRfaGFuZGxlcihkZXZpY2VfdCBkZXYsIGRyaXZlcl9maWx0ZXJfdCBmaWx0 LCBkcml2ZXJfaW50cl90IGhhbmQsCisgICAgdm9pZCAqYXJnLCB1X2ludCBpcnEsIGludCBmbGFn cywgdm9pZCAqKmNvb2tpZXApCit7CisJY29uc3QgY2hhciAqbmFtZTsKKwlzdHJ1Y3QgYXJtX2ly cXNyYyAqaXNyYzsKKwlpbnQgZXJyb3I7CisKKwluYW1lID0gZGV2aWNlX2dldF9uYW1ldW5pdChk ZXYpOworCisJLyoKKwkgKiBTdGFuZGFyZCBoYW5kbGluZyBpcyBkb25lIHRocnUgTUkgaW50ZXJy dXB0IGZyYW1ld29yay4gSG93ZXZlciwKKwkgKiBzb21lIGludGVycnVwdHMgY291bGQgcmVxdWVz dCBzb2xlbHkgb3duIHNwZWNpYWwgaGFuZGxpbmcuIFRoaXMKKwkgKiBub24gc3RhbmRhcmQgaGFu ZGxpbmcgY2FuIGJlIHVzZWQgZm9yIGludGVycnVwdCBjb250cm9sbGVycyB3aXRob3V0CisJICog aGFuZGxlciAoZmlsdGVyIG9ubHkpLCBzbyBpbiBjYXNlIHRoYXQgaW50ZXJydXB0IGNvbnRyb2xs ZXJzIGFyZQorCSAqIGNoYWluZWQsIE1JIGludGVycnVwdCBmcmFtZXdvcmsgaXMgY2FsbGVkIG9u bHkgaW4gbGVhZiBjb250cm9sbGVyLgorCSAqCisJICogTm90ZSB0aGF0IHJvb3QgaW50ZXJydXB0 IGNvbnRyb2xsZXIgcm91dGluZSBpcyBzZXJ2ZWQgYXMgd2VsbCwKKwkgKiBob3dldmVyIGluIG1h aW4gc3lzdGVtIGRpc3BhdGNoIHJvdXRpbmUuCisJICovCisJaWYgKGZsYWdzICYgSU5UUl9TT0xP ICYmIGhhbmQgIT0gTlVMTCkgeworCQlkZWJ1Z2YoImlycSAldSBjYW5ub3Qgc29sbyBvbiAlc1xu IiwgaXJxLCBuYW1lKTsKKwkJcmV0dXJuIChFSU5WQUwpOworCX0KKworCWlzcmMgPSBpc3JjX2xv b2t1cChpcnEpOworCWlmIChpc3JjID09IE5VTEwpIHsKKwkJZGVidWdmKCJpcnEgJXUgd2l0aG91 dCBzb3VyY2Ugb24gJXNcbiIsIGlycSwgbmFtZSk7CisJCXJldHVybiAoRUlOVkFMKTsKKwl9CisK KwllcnJvciA9IGlzcmNfcmVnaXN0ZXIoaXNyYyk7CisJaWYgKGVycm9yICE9IDApIHsKKwkJZGVi dWdmKCJpcnEgJXUgbWFwIGVycm9yICVkIG9uICVzXG4iLCBpcnEsIGVycm9yLCBuYW1lKTsKKwkJ cmV0dXJuIChlcnJvcik7CisJfQorCisJaWYgKGZsYWdzICYgSU5UUl9TT0xPKSB7CisJCWVycm9y ID0gaXNjcl9zZXR1cF9maWx0ZXIoaXNyYywgbmFtZSwgKGFybV9pcnFfZmlsdGVyX3QgKilmaWx0 LAorCQkgICAgYXJnLCBjb29raWVwKTsKKwkJZGVidWdmKCJpcnEgJXUgc2V0dXAgZmlsdGVyIGVy cm9yICVkIG9uICVzXG4iLCBpcnEsIGVycm9yLAorCQkgICAgbmFtZSk7CisJfSBlbHNlIHsKKwkJ ZXJyb3IgPSBpc3JjX2FkZF9oYW5kbGVyKGlzcmMsIG5hbWUsIGZpbHQsIGhhbmQsIGFyZywgZmxh Z3MsCisJCSAgICBjb29raWVwKTsKKwkJZGVidWdmKCJpcnEgJXUgYWRkIGhhbmRsZXIgZXJyb3Ig JWQgb24gJXNcbiIsIGlycSwgZXJyb3IsIG5hbWUpOworCX0KKwlpZiAoZXJyb3IgIT0gMCkKKwkJ cmV0dXJuIChlcnJvcik7CisKKwltdHhfbG9jaygmaXNyY190YWJsZV9sb2NrKTsKKwlpc3JjLT5p c3JjX2hhbmRsZXJzKys7CisJaWYgKGlzcmMtPmlzcmNfaGFuZGxlcnMgPT0gMSkgeworCQlQSUNf RU5BQkxFX0lOVFIoaXNyYy0+aXNyY19kZXYsIGlzcmMpOworCQlQSUNfRU5BQkxFX1NPVVJDRShp c3JjLT5pc3JjX2RldiwgaXNyYyk7CisJfQorCW10eF91bmxvY2soJmlzcmNfdGFibGVfbG9jayk7 CisJcmV0dXJuICgwKTsKK30KKworaW50Cithcm1faXJxX3JlbW92ZV9oYW5kbGVyKGRldmljZV90 IGRldiwgdV9pbnQgaXJxLCB2b2lkICpjb29raWUpCit7CisJc3RydWN0IGFybV9pcnFzcmMgKmlz cmM7CisJaW50IGVycm9yOworCisJaXNyYyA9IGlzcmNfbG9va3VwKGlycSk7CisJaWYgKGlzcmMg PT0gTlVMTCB8fCBpc3JjLT5pc3JjX2hhbmRsZXJzID09IDApCisJCXJldHVybiAoRUlOVkFMKTsK KworCWlmIChpc3JjLT5pc3JjX2ZpbHRlciAhPSBOVUxMKSB7CisJCWlmIChpc3JjICE9IGNvb2tp ZSkKKwkJCXJldHVybiAoRUlOVkFMKTsKKworCQltdHhfbG9jaygmaXNyY190YWJsZV9sb2NrKTsK KwkJaXNyYy0+aXNyY19maWx0ZXIgPSBOVUxMOworCQlpc3JjLT5pc3JjX2FyZyA9IE5VTEw7CisJ CWlzcmMtPmlzcmNfaGFuZGxlcnMgPSAwOworCQlQSUNfRElTQUJMRV9TT1VSQ0UoaXNyYy0+aXNy Y19kZXYsIGlzcmMpOworCQlQSUNfRElTQUJMRV9JTlRSKGlzcmMtPmlzcmNfZGV2LCBpc3JjKTsK KwkJaXNyY191cGRhdGVfbmFtZShpc3JjLCBOVUxMKTsKKwkJbXR4X3VubG9jaygmaXNyY190YWJs ZV9sb2NrKTsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwlpZiAoaXNyYyAhPSBpbnRyX2hhbmRsZXJf c291cmNlKGNvb2tpZSkpCisJCXJldHVybiAoRUlOVkFMKTsKKworCWVycm9yID0gaW50cl9ldmVu dF9yZW1vdmVfaGFuZGxlcihjb29raWUpOworCWlmIChlcnJvciA9PSAwKSB7CisJCW10eF9sb2Nr KCZpc3JjX3RhYmxlX2xvY2spOworCQlpc3JjLT5pc3JjX2hhbmRsZXJzLS07CisJCWlmIChpc3Jj LT5pc3JjX2hhbmRsZXJzID09IDApIHsKKwkJCVBJQ19ESVNBQkxFX1NPVVJDRShpc3JjLT5pc3Jj X2RldiwgaXNyYyk7CisJCQlQSUNfRElTQUJMRV9JTlRSKGlzcmMtPmlzcmNfZGV2LCBpc3JjKTsK KwkJfQorCQlpbnRyY250X3VwZGF0ZW5hbWUoaXNyYyk7CisJCW10eF91bmxvY2soJmlzcmNfdGFi bGVfbG9jayk7CisJfQorCXJldHVybiAoZXJyb3IpOworfQorCitpbnQKK2FybV9pcnFfY29uZmln KHVfaW50IGlycSwgZW51bSBpbnRyX3RyaWdnZXIgdHJpZywgZW51bSBpbnRyX3BvbGFyaXR5IHBv bCkKK3sKKwlzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYzsKKworCWlzcmMgPSBpc3JjX2xvb2t1cChp cnEpOworCWlmIChpc3JjID09IE5VTEwpCisJCXJldHVybiAoRUlOVkFMKTsKKworCWlmIChpc3Jj LT5pc3JjX2hhbmRsZXJzICE9IDApCisJCXJldHVybiAoRUJVU1kpOwkvKiBpbnRlcnJydXB0IGlz IGVuYWJsZWQgKGFjdGl2ZSkgKi8KKworCS8qCisJICogT25jZSBhbiBpbnRlcnJ1cHQgaXMgZW5h YmxlZCwgd2UgZG8gbm90IGNoYW5nZSBpdHMgY29uZmlndXJhdGlvbi4KKwkgKiBBIGNvbnRyb2xs ZXIgUElDX0VOQUJMRV9JTlRSKCkgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIGFuIGludGVycnVwdAor CSAqIGlzIGdvaW50IHRvIGJlIGVuYWJsZWQuIEluIHRoaXMgbWV0aG9kLCBhIGNvbnRyb2xsZXIg c2hvdWxkIHNldHVwCisJICogdGhlIGludGVycnVwdCBhY2NvcmRpbmcgdG8gc2F2ZWQgY29uZmln dXJhdGlvbiBwYXJhbWV0ZXJzLgorCSAqLworCWlzcmMtPmlzcmNfdHJpZyA9IHRyaWc7CisJaXNy Yy0+aXNyY19wb2wgPSBwb2w7CisKKwlyZXR1cm4gKDApOworfQorCitpbnQKK2FybV9pcnFfZGVz Y3JpYmUodV9pbnQgaXJxLCB2b2lkICpjb29raWUsIGNvbnN0IGNoYXIgKmRlc2NyKQoreworCXN0 cnVjdCBhcm1faXJxc3JjICppc3JjOworCWludCBlcnJvcjsKKworCWlzcmMgPSBpc3JjX2xvb2t1 cChpcnEpOworCWlmIChpc3JjID09IE5VTEwgfHwgaXNyYy0+aXNyY19oYW5kbGVycyA9PSAwKQor CQlyZXR1cm4gKEVJTlZBTCk7CisKKwlpZiAoaXNyYy0+aXNyY19maWx0ZXIgIT0gTlVMTCkgewor CQlpZiAoaXNyYyAhPSBjb29raWUpCisJCQlyZXR1cm4gKEVJTlZBTCk7CisKKwkJbXR4X2xvY2so JmlzcmNfdGFibGVfbG9jayk7CisJCWlzcmNfdXBkYXRlX25hbWUoaXNyYywgZGVzY3IpOworCQlt dHhfdW5sb2NrKCZpc3JjX3RhYmxlX2xvY2spOworCQlyZXR1cm4gKDApOworCX0KKworCWVycm9y ID0gaW50cl9ldmVudF9kZXNjcmliZV9oYW5kbGVyKGlzcmMtPmlzcmNfZXZlbnQsIGNvb2tpZSwg ZGVzY3IpOworCWlmIChlcnJvciA9PSAwKSB7CisJCW10eF9sb2NrKCZpc3JjX3RhYmxlX2xvY2sp OworCQlpbnRyY250X3VwZGF0ZW5hbWUoaXNyYyk7CisJCW10eF91bmxvY2soJmlzcmNfdGFibGVf bG9jayk7CisJfQorCXJldHVybiAoZXJyb3IpOworfQorCisjaWZkZWYgU01QCitpbnQKK2FybV9p cnFfYmluZCh1X2ludCBpcnEsIGludCBjcHUpCit7CisJc3RydWN0IGFybV9pcnFzcmMgKmlzcmM7 CisKKwlpc3JjID0gaXNyY19sb29rdXAoaXJxKTsKKwlpZiAoaXNyYyA9PSBOVUxMIHx8IGlzcmMt PmlzcmNfaGFuZGxlcnMgPT0gMCkKKwkJcmV0dXJuIChFSU5WQUwpOworCisJaWYgKGlzcmMtPmlz cmNfZmlsdGVyICE9IE5VTEwpCisJCXJldHVybiAoYXJtX2lzcmNfYXNzaWduX2NwdShpc3JjLCBj cHUpKTsKKworCXJldHVybiAoaW50cl9ldmVudF9iaW5kKGlzcmMtPmlzcmNfZXZlbnQsIGNwdSkp OworfQorCisvKgorICogUmV0dXJuIHRoZSBDUFUgdGhhdCB0aGUgbmV4dCBpbnRlcnJ1cHQgc291 cmNlIHNob3VsZCB1c2UuCisgKiBGb3Igbm93IGp1c3QgcmV0dXJucyB0aGUgbmV4dCBDUFUgYWNj b3JkaW5nIHRvIHJvdW5kLXJvYmluLgorICovCit1X2ludAorYXJtX2lycV9uZXh0X2NwdSh1X2lu dCBsYXN0X2NwdSwgY3B1c2V0X3QgKmNwdW1hc2spCit7CisKKwlpZiAoIWlycV9hc3NpZ25fY3B1 IHx8IG1wX25jcHVzID09IDEpCisJCXJldHVybiAoUENQVV9HRVQoY3B1aWQpKTsKKworCWRvIHsK KwkJbGFzdF9jcHUrKzsKKwkJaWYgKGxhc3RfY3B1ID4gbXBfbWF4aWQpCisJCQlsYXN0X2NwdSA9 IDA7CisJfSB3aGlsZSAoIUNQVV9JU1NFVChsYXN0X2NwdSwgY3B1bWFzaykpOworCXJldHVybiAo bGFzdF9jcHUpOworfQorCisvKgorICogIERpc3RyaWJ1dGUgYWxsIHRoZSBpbnRlcnJ1cHQgc291 cmNlcyBhbW9uZyB0aGUgYXZhaWxhYmxlCisgKiAgQ1BVcyBvbmNlIHRoZSBBUCdzIGhhdmUgYmVl biBsYXVuY2hlZC4KKyAqLworc3RhdGljIHZvaWQKK2FybV9pcnFfc2h1ZmZsZSh2b2lkICphcmcg X191bnVzZWQpCit7CisJc3RydWN0IGFybV9pcnFzcmMgKmlzcmM7CisJdV9pbnQgaTsKKworCWlm IChtcF9uY3B1cyA9PSAxKQorCQlyZXR1cm47CisKKwltdHhfbG9jaygmaXNyY190YWJsZV9sb2Nr KTsKKwlpcnFfYXNzaWduX2NwdSA9IFRSVUU7CisJZm9yIChpID0gMDsgaSA8IE5JUlE7IGkrKykg eworCQlpc3JjID0gaXJxX3NvdXJjZXNbaV07CisJCWlmIChpc3JjID09IE5VTEwgfHwgaXNyYy0+ aXNyY19oYW5kbGVycyA9PSAwIHx8CisJCSAgICBpc3JjLT5pc3JjX2ZsYWdzICYgSVNSQ0ZfUEVS Q1BVKQorCQkJY29udGludWU7CisKKwkJaWYgKGlzcmMtPmlzcmNfZXZlbnQgIT0gTlVMTCAmJiBp c3JjLT5pc3JjX2ZsYWdzICYgSVNSQ0ZfQk9VTkQgJiYKKwkJICAgIGlzcmMtPmlzcmNfZXZlbnQt PmllX2NwdSAhPSBDUFVfRkZTKCZpc3JjLT5pc3JjX2NwdSkgLSAxKQorCQkJcGFuaWMoIiVzOiBD UFUgaW5jb25zaXN0ZW5jeSIsIF9fZnVuY19fKTsKKworCQlpZiAoKGlzcmMtPmlzcmNfZmxhZ3Mg JiBJU1JDRl9CT1VORCkgPT0gMCkKKwkJCUNQVV9aRVJPKCZpc3JjLT5pc3JjX2NwdSk7IC8qIHN0 YXJ0IGFnYWluICovCisKKwkJLyoKKwkJICogV2UgYXJlIGluIHdpY2tlZCBwb3NpdGlvbiBoZXJl IGlmIHRoZSBmb2xsb3dpbmcgY2FsbCBmYWlscworCQkgKiBmb3IgYm91bmQgSVNSQy4gVGhlIGJl c3QgdGhpbmcgd2UgY2FuIGRvIGlzIHRvIGNsZWFyCisJCSAqIGlzcmNfY3B1IHNvIGluY29uc2lz dGVuY3kgd2l0aCBpZV9jcHUgd2lsbCBiZSBkZXRlY3RhYmxlLgorCQkgKi8KKwkJaWYgKFBJQ19C SU5EKGlzcmMtPmlzcmNfZGV2LCBpc3JjKSAhPSAwKQorCQkJQ1BVX1pFUk8oJmlzcmMtPmlzcmNf Y3B1KTsKKwl9CisJbXR4X3VubG9jaygmaXNyY190YWJsZV9sb2NrKTsKK30KK1NZU0lOSVQoYXJt X2lycV9zaHVmZmxlLCBTSV9TVUJfU01QLCBTSV9PUkRFUl9TRUNPTkQsIGFybV9pcnFfc2h1ZmZs ZSwgTlVMTCk7CisKKyNlbHNlCit1X2ludAorYXJtX2lycV9uZXh0X2NwdSh1X2ludCBjdXJyZW50 X2NwdSwgY3B1c2V0X3QgKmNwdW1hc2spCit7CisKKwlyZXR1cm4gKFBDUFVfR0VUKGNwdWlkKSk7 Cit9CisjZW5kaWYKKworI2lmZGVmIEZEVAorLyoKKyAqICBEZXNjcmliZSBpbnRlcnJ1cHQgc291 cmNlIGZvciBGRFQuCisgKi8KK2ludAorZmR0X2Rlc2NyaWJlX2lycShjaGFyICpidWYsIHVfaW50 IGxlbiwgdV9pbnQgaXJxKQoreworCXN0cnVjdCBhcm1faXJxc3JjICppc3JjOworCWludCBydjsK KworCWlzcmMgPSBpc3JjX2xvb2t1cChpcnEpOworCWlmIChpc3JjID09IE5VTEwpIHsKKwkJcmV0 dXJuIChzbnByaW50ZihidWYsIGxlbiwgIm5vIGlycSBzb3VyY2UiKSk7CisJfQorCisJKHZvaWQp aXNyY19yZWdpc3Rlcihpc3JjKTsKKwlpZiAoKGlzcmMtPmlzcmNfZmxhZ3MgJiBJU1JDRl9SRUdJ U1RFUkVEKSA9PSAwKSB7CisJCXJ2ID0gc25wcmludGYoYnVmLCBsZW4sICJpcnEldShub3QgbWFw cGVkKSIsIGlycSk7CisJfSBlbHNlIHsKKwkJcnYgPSBzbnByaW50ZihidWYsIGxlbiwgImlycSV1 KCVzKSIsIGlycSwgaXNyYy0+aXNyY19uYW1lKTsKKwl9CisJcmV0dXJuIChydik7Cit9CisjZW5k aWYKKwordm9pZCBkb3NvZnRpbnRzKHZvaWQpOwordm9pZAorZG9zb2Z0aW50cyh2b2lkKQorewor fQorCisvKgorICogYXJtX2lycV9tZW1vcnlfYmFycmllcigpCisgKgorICogRW5zdXJlIGFsbCB3 cml0ZXMgdG8gZGV2aWNlIG1lbW9yeSBoYXZlIHJlYWNoZWQgZGV2aWNlcyBiZWZvcmUgcHJvY2Vl ZGluZy4KKyAqCisgKiBUaGlzIGlzIGludGVuZGVkIHRvIGJlIGNhbGxlZCBmcm9tIHRoZSBwb3N0 LWZpbHRlciBhbmQgcG9zdC10aHJlYWQgcm91dGluZXMKKyAqIG9mIGFuIGludGVycnVwdCBjb250 cm9sbGVyIGltcGxlbWVudGF0aW9uLiAgQSBwZXJpcGhlcmFsIGRldmljZSBkcml2ZXIgc2hvdWxk CisgKiB1c2UgYnVzX3NwYWNlX2JhcnJpZXIoKSBpZiBpdCBuZWVkcyB0byBlbnN1cmUgYSB3cml0 ZSBoYXMgcmVhY2hlZCB0aGUKKyAqIGhhcmR3YXJlIGZvciBzb21lIHJlYXNvbiBvdGhlciB0aGFu IGNsZWFyaW5nIGludGVycnVwdCBjb25kaXRpb25zLgorICoKKyAqIFRoZSBuZWVkIGZvciB0aGlz IGZ1bmN0aW9uIGFyaXNlcyBmcm9tIHRoZSBBUk0gd2VhayBtZW1vcnkgb3JkZXJpbmcgbW9kZWwu CisgKiBXcml0ZXMgdG8gbG9jYXRpb25zIG1hcHBlZCB3aXRoIHRoZSBEZXZpY2UgYXR0cmlidXRl IGJ5cGFzcyBhbnkgY2FjaGVzLCBidXQKKyAqIGFyZSBidWZmZXJlZC4gIE11bHRpcGxlIHdyaXRl cyB0byB0aGUgc2FtZSBkZXZpY2Ugd2lsbCBiZSBvYnNlcnZlZCBieSB0aGF0CisgKiBkZXZpY2Ug aW4gdGhlIG9yZGVyIGlzc3VlZCBieSB0aGUgY3B1LiAgV3JpdGVzIHRvIGRpZmZlcmVudCBkZXZp Y2VzIG1heQorICogYXBwZWFyIGF0IHRob3NlIGRldmljZXMgaW4gYSBkaWZmZXJlbnQgb3JkZXIg dGhhbiBpc3N1ZWQgYnkgdGhlIGNwdS4gIFRoYXQKKyAqIGlzLCBpZiB0aGUgY3B1IHdyaXRlcyB0 byBkZXZpY2UgQSB0aGVuIGRldmljZSBCLCB0aGUgd3JpdGUgdG8gZGV2aWNlIEIgY291bGQKKyAq IGNvbXBsZXRlIGJlZm9yZSB0aGUgd3JpdGUgdG8gZGV2aWNlIEEuCisgKgorICogQ29uc2lkZXIg YSB0eXBpY2FsIGRldmljZSBpbnRlcnJ1cHQgaGFuZGxlciB3aGljaCBzZXJ2aWNlcyB0aGUgaW50 ZXJydXB0IGFuZAorICogd3JpdGVzIHRvIGEgZGV2aWNlIHN0YXR1cy1hY2tub3dsZWRnZSByZWdp c3RlciB0byBjbGVhciB0aGUgaW50ZXJydXB0IGJlZm9yZQorICogcmV0dXJuaW5nLiAgVGhhdCB3 cml0ZSBpcyBwb3N0ZWQgdG8gdGhlIEwyIGNvbnRyb2xsZXIgd2hpY2ggImltbWVkaWF0ZWx5Igor ICogcGxhY2VzIGl0IGluIGEgc3RvcmUgYnVmZmVyIGFuZCBhdXRvbWF0aWNhbGx5IGRyYWlucyB0 aGF0IGJ1ZmZlci4gIFRoaXMgY2FuCisgKiBiZSBsZXNzIGltbWVkaWF0ZSB0aGFuIHlvdSdkIHRo aW5rLi4uIFRoZXJlIG1heSBiZSBubyBmcmVlIHNsb3RzIGluIHRoZSBzdG9yZQorICogYnVmZmVy cywgc28gYW4gZXhpc3RpbmcgYnVmZmVyIGhhcyB0byBiZSBkcmFpbmVkIGZpcnN0IHRvIG1ha2Ug cm9vbS4gIFRoZQorICogdGFyZ2V0IGJ1cyBtYXkgYmUgYnVzeSB3aXRoIG90aGVyIHRyYWZmaWMg KHN1Y2ggYXMgRE1BIGZvciB2YXJpb3VzIGRldmljZXMpLAorICogZGVsYXlpbmcgdGhlIGRyYWlu IG9mIHRoZSBzdG9yZSBidWZmZXIgZm9yIHNvbWUgaW5kZXRlcm1pbmF0ZSB0aW1lLiAgV2hpbGUK KyAqIGFsbCB0aGlzIGRlbGF5IGlzIGhhcHBlbmluZywgZXhlY3V0aW9uIHByb2NlZWRzIG9uIHRo ZSBDUFUsIHVud2luZGluZyBpdHMgd2F5CisgKiBvdXQgb2YgdGhlIGludGVycnVwdCBjYWxsIHN0 YWNrIHRvIHRoZSBwb2ludCB3aGVyZSB0aGUgaW50ZXJydXB0IGRyaXZlciBjb2RlCisgKiBpcyBy ZWFkeSB0byBFT0kgYW5kIHVubWFzayB0aGUgaW50ZXJydXB0LiAgVGhlIGludGVycnVwdCBjb250 cm9sbGVyIG1heSBiZQorICogYWNjZXNzZWQgdmlhIGEgZmFzdGVyIGJ1cyB0aGFuIHRoZSBoYXJk d2FyZSB3aG9zZSBoYW5kbGVyIGp1c3QgcmFuOyB0aGUgd3JpdGUKKyAqIHRvIHVubWFzayBhbmQg RU9JIHRoZSBpbnRlcnJ1cHQgbWF5IGNvbXBsZXRlIHF1aWNrbHkgd2hpbGUgdGhlIGRldmljZSB3 cml0ZQorICogdG8gYWNrIGFuZCBjbGVhciB0aGUgaW50ZXJydXB0IHNvdXJjZSBpcyBzdGlsbCBs aW5nZXJpbmcgaW4gYSBzdG9yZSBidWZmZXIKKyAqIHdhaXRpbmcgZm9yIGFjY2VzcyB0byBhIHNs b3dlciBidXMuICBXaXRoIHRoZSBpbnRlcnJ1cHQgdW5tYXNrZWQgYXQgdGhlCisgKiBpbnRlcnJ1 cHQgY29udHJvbGxlciBidXQgc3RpbGwgYWN0aXZlIGF0IHRoZSBkZXZpY2UsIGFzIHNvb24gYXMg aW50ZXJydXB0cworICogYXJlIGVuYWJsZWQgb24gdGhlIGNvcmUgdGhlIGRldmljZSByZS1pbnRl cnJ1cHRzIGltbWVkaWF0ZWx5OiBub3cgeW91J3ZlIGdvdAorICogYSBzcHVyaW91cyBpbnRlcnJ1 cHQgb24geW91ciBoYW5kcy4KKyAqCisgKiBUaGUgcmlnaHQgd2F5IHRvIGZpeCB0aGlzIHByb2Js ZW0gaXMgZm9yIGV2ZXJ5IGRldmljZSBkcml2ZXIgdG8gdXNlIHRoZQorICogcHJvcGVyIGJ1c19z cGFjZV9iYXJyaWVyKCkgY2FsbHMgaW4gaXRzIGludGVycnVwdCBoYW5kbGVyLiAgRm9yIEFSTSBh IHNpbmdsZQorICogYmFycmllciBjYWxsIGF0IHRoZSBlbmQgb2YgdGhlIGhhbmRsZXIgd291bGQg d29yay4gIFRoaXMgd291bGQgaGF2ZSB0byBiZQorICogZG9uZSB0byBldmVyeSBkcml2ZXIgaW4g dGhlIHN5c3RlbSwgbm90IGp1c3QgYXJtLXNwZWNpZmljIGRyaXZlcnMuCisgKgorICogQW5vdGhl ciBwb3RlbnRpYWwgZml4IGlzIHRvIG1hcCBhbGwgZGV2aWNlIG1lbW9yeSBhcyBTdHJvbmdseS1P cmRlcmVkIHJhdGhlcgorICogdGhhbiBEZXZpY2UgbWVtb3J5LCB3aGljaCB0YWtlcyB0aGUgc3Rv cmUgYnVmZmVycyBvdXQgb2YgdGhlIHBpY3R1cmUuICBUaGlzCisgKiBoYXMgYSBwcmV0dHkgYmln IGltcGFjdCBvbiBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZSwgYmVjYXVzZSBlYWNoIHN0cm9u Z2x5CisgKiBvcmRlcmVkIG1lbW9yeSBhY2Nlc3MgY2F1c2VzIGFsbCBMMiBzdG9yZSBidWZmZXJz IHRvIGJlIGRyYWluZWQuCisgKgorICogQSBjb21wcm9taXNlIHNvbHV0aW9uIGlzIHRvIGhhdmUg dGhlIGludGVycnVwdCBjb250cm9sbGVyIGltcGxlbWVudGF0aW9uIGNhbGwKKyAqIHRoaXMgZnVu Y3Rpb24gdG8gZXN0YWJsaXNoIGEgYmFycmllciBiZXR3ZWVuIHdyaXRlcyB0byB0aGUgaW50ZXJy dXB0LXNvdXJjZQorICogZGV2aWNlIGFuZCB3cml0ZXMgdG8gdGhlIGludGVycnVwdCBjb250cm9s bGVyIGRldmljZS4KKyAqCisgKiBUaGlzIHRha2VzIHRoZSBpbnRlcnJ1cHQgbnVtYmVyIGFzIGFu IGFyZ3VtZW50LCBhbmQgY3VycmVudGx5IGRvZXNuJ3QgdXNlIGl0LgorICogVGhlIHBsYW4gaXMg dGhhdCBtYXliZSBzb21lIGRheSB0aGVyZSBpcyBhIHdheSB0byBmbGFnIGNlcnRhaW4gaW50ZXJy dXB0cyBhcworICogIm1lbW9yeSBiYXJyaWVyIHNhZmUiIGFuZCB3ZSBjYW4gYXZvaWQgdGhpcyBv dmVyaGVhZCB3aXRoIHRoZW0uCisgKi8KK3ZvaWQKK2FybV9pcnFfbWVtb3J5X2JhcnJpZXIodWlu dHB0cl90IGlycSkKK3sKKworCWRzYigpOworCWNwdV9sMmNhY2hlX2RyYWluX3dyaXRlYnVmKCk7 Cit9CisKKyNpZmRlZiBTTVAKKy8qCisgKiAgTG9va3VwIElQSSBzb3VyY2UuCisgKi8KK3N0YXRp YyBzdHJ1Y3QgYXJtX2lycXNyYyAqCithcm1faXBpX2xvb2t1cCh1X2ludCBpcGkpCit7CisKKwlp ZiAoaXBpID49IEFSTV9JUElfQ09VTlQpCisJCXBhbmljKCIlczogbm8gc3VjaCBJUEkgJXUiLCBf X2Z1bmNfXywgaXBpKTsKKworCXJldHVybiAoJmlwaV9zb3VyY2VzW2lwaV0pOworfQorCisvKgor ICogIEFSTSBpbnRlcnJ1cHQgY29udHJvbGxlciBkaXNwYXRjaCBmdW5jdGlvbiBmb3IgSVBJcy4g SXQgc2hvdWxkCisgKiAgYmUgY2FsbGVkIHN0cmFpZ2h0IGZyb20gdGhlIGludGVycnVwdCBjb250 cm9sbGVyLCB3aGVuIGFzc29jaWF0ZWQKKyAqICBpbnRlcnJ1cHQgc291cmNlIGlzIGxlYXJuZWQu IE9yIGZyb20gYW55Ym9keSB3aG8gaGFzIGFhbiBpbnRlcnJ1cHQKKyAqICBzb3VyY2UgbWFwcGVk LgorICovCit2b2lkCithcm1faXBpX2Rpc3BhdGNoKHN0cnVjdCBhcm1faXJxc3JjICppc3JjLCBz dHJ1Y3QgdHJhcGZyYW1lICp0ZikKK3sKKwl2b2lkICphcmc7CisKKwlLQVNTRVJUKGlzcmMgIT0g TlVMTCwgKCIlczogbm8gc291cmNlIiwgX19mdW5jX18pKTsKKworCWlzcmNfaW5jcmVtZW50X2lw aV9jb3VudChpc3JjLCBQQ1BVX0dFVChjcHVpZCkpOworCisJLyoKKwkgKiBTdXBwbHkgaXBpIGZp bHRlciB3aXRoIHRyYXBmcmFtZSBhcmd1bWVudAorCSAqIGlmIG5vbmUgaXMgcmVnaXN0ZXJlZC4K KwkgKi8KKwlhcmcgPSBpc3JjLT5pc3JjX2FyZyAhPSBOVUxMID8gaXNyYy0+aXNyY19hcmcgOiB0 ZjsKKwlpc3JjLT5pc3JjX2lwaWZpbHRlcihhcmcpOworfQorCisvKgorICogIE1hcCBJUEkgaW50 byBpbnRlcnJ1cHQgY29udHJvbGxlci4KKyAqCisgKiAgTm90IFNNUCBjb2hlcmVudC4KKyAqLwor c3RhdGljIGludAoraXBpX21hcChzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYywgdV9pbnQgaXBpKQor eworCWJvb2xlYW5fdCBpc19wZXJjcHU7CisJaW50IGVycm9yOworCisJaWYgKGlwaSA+PSBBUk1f SVBJX0NPVU5UKQorCQlwYW5pYygiJXM6IG5vIHN1Y2ggSVBJICV1IiwgX19mdW5jX18sIGlwaSk7 CisKKwlLQVNTRVJUKGlycV9yb290X2RldiAhPSBOVUxMLCAoIiVzOiBubyByb290IGF0dGFjaGVk IiwgX19mdW5jX18pKTsKKworCWlzcmMtPmlzcmNfdHlwZSA9IEFSTV9JU1JDVF9OQU1FU1BBQ0U7 CisJaXNyYy0+aXNyY19uc3BjX3R5cGUgPSBBUk1fSVJRX05TUENfSVBJOworCWlzcmMtPmlzcmNf bnNwY19udW0gPSBpcGlfbmV4dF9udW07CisKKwllcnJvciA9IFBJQ19SRUdJU1RFUihpcnFfcm9v dF9kZXYsIGlzcmMsICZpc19wZXJjcHUpOworCisJZGVidWdmKCJpcGkgJXUgbWFwcGVkIHRvICV1 IG9uICVzIC0gZXJyb3IgJWRcbiIsIGlwaSwgaXBpX25leHRfbnVtLAorCSAgICBkZXZpY2VfZ2V0 X25hbWV1bml0KGlycV9yb290X2RldiksIGVycm9yKTsKKworCWlmIChlcnJvciA9PSAwKQorCQlp cGlfbmV4dF9udW0rKzsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworLyoKKyAqICBTZXR1cCBJUEkg aGFuZGxlciB0byBpbnRlcnJ1cHQgc291cmNlLgorICoKKyAqICBOb3RlIHRoYXQgdGhlcmUgY291 bGQgYmUgbW9yZSB3YXlzIGhvdyB0byBzZW5kIGFuZCByZWNlaXZlIElQSXMKKyAqICBvbiBhIHBs YXRmb3JtIGxpa2UgZmFzdCBpbnRlcnJ1cHRzIGZvciBleGFtcGxlLiBJbiB0aGF0IGNhc2UsCisg KiAgb25lIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCBBU0lGX05PQUxMT0MgZmxhZyBzZXQg YW5kIHRoZW4KKyAqICBjYWxsIGFybV9pcGlfZGlzcGF0Y2goKSB3aGVuIGFwcHJvcHJpYXRlLgor ICoKKyAqICBOb3QgU01QIGNvaGVyZW50LgorICovCitpbnQKK2FybV9pcGlfc2V0X2hhbmRsZXIo dV9pbnQgaXBpLCBjb25zdCBjaGFyICpuYW1lLCBhcm1faXBpX2ZpbHRlcl90ICpmaWx0ZXIsCisg ICAgdm9pZCAqYXJnLCB1X2ludCBmbGFncykKK3sKKwlzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYzsK KwlpbnQgZXJyb3I7CisKKwlpZiAoZmlsdGVyID09IE5VTEwpCisJCXJldHVybihFSU5WQUwpOwor CisJaXNyYyA9IGFybV9pcGlfbG9va3VwKGlwaSk7CisJaWYgKGlzcmMtPmlzcmNfaXBpZmlsdGVy ICE9IE5VTEwpCisJCXJldHVybiAoRUVYSVNUKTsKKworCWlmICgoZmxhZ3MgJiBBSVNIRl9OT0FM TE9DKSA9PSAwKSB7CisJCWVycm9yID0gaXBpX21hcChpc3JjLCBpcGkpOworCQlpZiAoZXJyb3Ig IT0gMCkKKwkJCXJldHVybiAoZXJyb3IpOworCX0KKworCWlzcmMtPmlzcmNfaXBpZmlsdGVyID0g ZmlsdGVyOworCWlzcmMtPmlzcmNfYXJnID0gYXJnOworCisJaXNyY19zZXR1cF9pcGlfY291bnRl cnMoaXNyYywgbmFtZSk7CisJcmV0dXJuICgwKTsKK30KKworLyoKKyAqICBTZW5kIElQSSB0aHJ1 IGludGVycnVwdCBjb250cm9sbGVyLgorICovCit2b2lkCitwaWNfaXBpX3NlbmQoY3B1c2V0X3Qg Y3B1cywgdV9pbnQgaXBpKQoreworCXN0cnVjdCBhcm1faXJxc3JjICppc3JjOworCisJaXNyYyA9 IGFybV9pcGlfbG9va3VwKGlwaSk7CisKKwlLQVNTRVJUKGlycV9yb290X2RldiAhPSBOVUxMLCAo IiVzOiBubyByb290IGF0dGFjaGVkIiwgX19mdW5jX18pKTsKKwlQSUNfSVBJX1NFTkQoaXJxX3Jv b3RfZGV2LCBpc3JjLCBjcHVzKTsKK30KKworLyoKKyAqICBJbml0IGludGVycnVwdCBjb250cm9s bGVyIG9uIGFub3RoZXIgQ1BVLgorICovCit2b2lkCithcm1fcGljX2luaXRfc2Vjb25kYXJ5KHZv aWQpCit7CisKKwkvKgorCSAqIFFRUTogT25seSByb290IFBJQyBpcyBhd2FyZSBvZiBvdGhlciBD UFVzID8/PworCSAqLworCUtBU1NFUlQoaXJxX3Jvb3RfZGV2ICE9IE5VTEwsICgiJXM6IG5vIHJv b3QgYXR0YWNoZWQiLCBfX2Z1bmNfXykpOworCisJbXR4X2xvY2soJmlzcmNfdGFibGVfbG9jayk7 CisJUElDX0lOSVRfU0VDT05EQVJZKGlycV9yb290X2Rldik7CisJbXR4X3VubG9jaygmaXNyY190 YWJsZV9sb2NrKTsKK30KKyNlbmRpZgorCisjaWZkZWYgRERCCitEQl9TSE9XX0NPTU1BTkQoaXJx LCBkYl9zaG93X2lycSkKK3sKKwl1X2ludCBpLCBpcnFzdW07CisJc3RydWN0IGFybV9pcnFzcmMg KmlzcmM7CisKKyNpZmRlZiBTTVAKKwlmb3IgKGkgPSAwOyBpIDw9IG1wX21heGlkOyBpKyspIHsK KwkJc3RydWN0IHBjcHUgKnBjOworCQl1X2ludCBpcGksIGlwaXN1bTsKKworCQlwYyA9IHBjcHVf ZmluZChpKTsKKwkJaWYgKHBjICE9IE5VTEwpIHsKKwkJCWZvciAoaXBpc3VtID0gMCwgaXBpID0g MDsgaXBpIDwgQVJNX0lQSV9DT1VOVDsgaXBpKyspIHsKKwkJCQlpc3JjID0gYXJtX2lwaV9sb29r dXAoaXBpKTsKKwkJCQlpZiAoaXNyYy0+aXNyY19jb3VudCAhPSBOVUxMKQorCQkJCQlpcGlzdW0g Kz0gaXNyYy0+aXNyY19jb3VudFtpXTsKKwkJCX0KKwkJCXByaW50ZiAoImNwdSV1OiB0b3RhbCAl dSBpcGlzICV1XG4iLCBpLAorCQkJICAgIHBjLT5wY19jbnQudl9pbnRyLCBpcGlzdW0pOworICAg IAkJfQorCX0KKwlkYl9wcmludGYoIlxuIik7CisjZW5kaWYKKworCWZvciAoaXJxc3VtID0gMCwg aSA9IDA7IGkgPCBOSVJROyBpKyspIHsKKwkJaXNyYyA9IGlycV9zb3VyY2VzW2ldOworCQlpZiAo aXNyYyA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJZGJfcHJpbnRmKCJpcnElLTN1IDwlcz46 IGNwdSAlMDJseCVzIGNudCAlbHVcbiIsIGksCisJCSAgICBpc3JjLT5pc3JjX25hbWUsIGlzcmMt PmlzcmNfY3B1Ll9fYml0c1swXSwKKwkJICAgIGlzcmMtPmlzcmNfZmxhZ3MgJiBJU1JDRl9CT1VO RCA/ICIgKGJvdW5kKSIgOiAiIiwKKwkJICAgIGlzcmMtPmlzcmNfY291bnRbMF0pOworCQlpcnFz dW0gKz0gaXNyYy0+aXNyY19jb3VudFswXTsKKwl9CisJZGJfcHJpbnRmKCJpcnEgdG90YWwgJXVc biIsIGlycXN1bSk7CisKK30KKyNlbmRpZgpJbmRleDogc3lzL2FybS9hcm0vbXBfbWFjaGRlcC5j Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLS0tIHN5cy9hcm0vYXJtL21wX21hY2hkZXAuYwkocmV2aXNpb24gMjc5Njg1 KQorKysgc3lzL2FybS9hcm0vbXBfbWFjaGRlcC5jCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3 Myw5IEBACiAvKiBTZXQgdG8gMSBvbmNlIHdlJ3JlIHJlYWR5IHRvIGxldCB0aGUgQVBzIG91dCBv ZiB0aGUgcGVuLiAqLwogdm9sYXRpbGUgaW50IGFwc19yZWFkeSA9IDA7CiAKKyNpZm5kZWYgQVJN X0lOVFJORwogc3RhdGljIGludCBpcGlfaGFuZGxlcih2b2lkICphcmcpOworI2VuZGlmCiB2b2lk IHNldF9zdGFja3B0cnMoaW50IGNwdSk7CiAKIC8qIFRlbXBvcmFyeSB2YXJpYWJsZXMgZm9yIGlu aXRfc2Vjb25kYXJ5KCkgICovCkBAIC0xMzMsNyArMTM1LDYgQEAKIAllbHNlCiAJCWZvciAoaSA9 IDE7IGkgPCBtcF9uY3B1czsgaSsrKQogCQkJQ1BVX1NFVChpLCAmYWxsX2NwdXMpOwotCiB9CiAK IC8qIEludHJvZHVjZSByZXN0IG9mIGNvcmVzIHRvIHRoZSB3b3JsZCAqLwpAQCAtMTQ5LDcgKzE1 MCw2IEBACiB7CiAJc3RydWN0IHBjcHUgKnBjOwogCXVpbnQzMl90IGxvb3BfY291bnRlcjsKLQlp bnQgc3RhcnQgPSAwLCBlbmQgPSAwOwogCiAJY3B1X3NldHVwKE5VTEwpOwogCXNldHR0YihwbWFw X3BhKTsKQEAgLTE5OSwxOCArMTk5LDYgQEAKIAogCW10eF91bmxvY2tfc3BpbigmYXBfYm9vdF9t dHgpOwogCi0JLyogRW5hYmxlIGlwaSAqLwotI2lmZGVmIElQSV9JUlFfU1RBUlQKLQlzdGFydCA9 IElQSV9JUlFfU1RBUlQ7Ci0jaWZkZWYgSVBJX0lSUV9FTkQKLSAgCWVuZCA9IElQSV9JUlFfRU5E OwotI2Vsc2UKLQllbmQgPSBJUElfSVJRX1NUQVJUOwotI2VuZGlmCi0jZW5kaWYKLQkJCQkKLQlm b3IgKGludCBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspCi0JCWFybV91bm1hc2tfaXJxKGkpOwog CWVuYWJsZV9pbnRlcnJ1cHRzKFBTUl9JKTsKIAogCWxvb3BfY291bnRlciA9IDA7CkBAIC0yMzMs NiArMjIxLDEwOCBAQAogCS8qIE5PVFJFQUNIRUQgKi8KIH0KIAorI2lmZGVmIEFSTV9JTlRSTkcK K3N0YXRpYyB2b2lkCitpcGlfcmVuZGV6dm91cyh2b2lkICpkdW1teSBfX3VudXNlZCkKK3sKKwor CUNUUjAoS1RSX1NNUCwgIklQSV9SRU5ERVpWT1VTIik7CisJc21wX3JlbmRlenZvdXNfYWN0aW9u KCk7Cit9CisKK3N0YXRpYyB2b2lkCitpcGlfYXN0KHZvaWQgKmR1bW15IF9fdW51c2VkKQorewor CisJQ1RSMChLVFJfU01QLCAiSVBJX0FTVCIpOworfQorCitzdGF0aWMgdm9pZAoraXBpX3N0b3Ao dm9pZCAqZHVtbXkgX191bnVzZWQpCit7CisJdV9pbnQgY3B1OworCisJLyoKKwkgKiBJUElfU1RP UF9IQVJEIGlzIG1hcHBlZCB0byBJUElfU1RPUC4KKwkgKi8KKwlDVFIwKEtUUl9TTVAsICJJUElf U1RPUCBvciBJUElfU1RPUF9IQVJEIik7CisKKwljcHUgPSBQQ1BVX0dFVChjcHVpZCk7CisJc2F2 ZWN0eCgmc3RvcHBjYnNbY3B1XSk7CisKKwkvKgorCSAqIENQVXMgYXJlIHN0b3BwZWQgd2hlbiBl bnRlcmluZyB0aGUgZGVidWdnZXIgYW5kIGF0CisJICogc3lzdGVtIHNodXRkb3duLCBib3RoIGV2 ZW50cyB3aGljaCBjYW4gcHJlY2VkZSBhCisJICogcGFuaWMgZHVtcC4gIEZvciB0aGUgZHVtcCB0 byBiZSBjb3JyZWN0LCBhbGwgY2FjaGVzCisJICogbXVzdCBiZSBmbHVzaGVkIGFuZCBpbnZhbGlk YXRlZCwgYnV0IG9uIEFSTSB0aGVyZSdzCisJICogbm8gd2F5IHRvIGJyb2FkY2FzdCBhIHdiaW52 X2FsbCB0byBvdGhlciBjb3Jlcy4KKwkgKiBJbnN0ZWFkLCB3ZSBoYXZlIGVhY2ggY29yZSBkbyB0 aGUgbG9jYWwgd2JpbnZfYWxsIGFzCisJICogcGFydCBvZiBzdG9wcGluZyB0aGUgY29yZS4gIFRo ZSBjb3JlIHJlcXVlc3RpbmcgdGhlCisJICogc3RvcCB3aWxsIGRvIHRoZSBsMiBjYWNoZSBmbHVz aCBhZnRlciBhbGwgb3RoZXIgY29yZXMKKwkgKiBoYXZlIGRvbmUgdGhlaXIgbDEgZmx1c2hlcyBh bmQgc3RvcHBlZC4KKwkgKi8KKwljcHVfaWRjYWNoZV93Ymludl9hbGwoKTsKKworCS8qIEluZGlj YXRlIHdlIGFyZSBzdG9wcGVkICovCisJQ1BVX1NFVF9BVE9NSUMoY3B1LCAmc3RvcHBlZF9jcHVz KTsKKworCS8qIFdhaXQgZm9yIHJlc3RhcnQgKi8KKwl3aGlsZSAoIUNQVV9JU1NFVChjcHUsICZz dGFydGVkX2NwdXMpKQorCQljcHVfc3BpbndhaXQoKTsKKworCUNQVV9DTFJfQVRPTUlDKGNwdSwg JnN0YXJ0ZWRfY3B1cyk7CisJQ1BVX0NMUl9BVE9NSUMoY3B1LCAmc3RvcHBlZF9jcHVzKTsKKwlD VFIwKEtUUl9TTVAsICJJUElfU1RPUCAocmVzdGFydCkiKTsKK30KKworc3RhdGljIHZvaWQKK2lw aV9wcmVlbXB0KHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgdHJhcGZyYW1lICpvbGRmcmFtZTsKKwlz dHJ1Y3QgdGhyZWFkICp0ZDsKKworCWNyaXRpY2FsX2VudGVyKCk7CisJdGQgPSBjdXJ0aHJlYWQ7 CisJdGQtPnRkX2ludHJfbmVzdGluZ19sZXZlbCsrOworCW9sZGZyYW1lID0gdGQtPnRkX2ludHJf ZnJhbWU7CisJdGQtPnRkX2ludHJfZnJhbWUgPSAoc3RydWN0IHRyYXBmcmFtZSAqKWFyZzsKKwor CUNUUjEoS1RSX1NNUCwgIiVzOiBJUElfUFJFRU1QVCIsIF9fZnVuY19fKTsKKwlzY2hlZF9wcmVl bXB0KHRkKTsKKworCXRkLT50ZF9pbnRyX2ZyYW1lID0gb2xkZnJhbWU7CisJdGQtPnRkX2ludHJf bmVzdGluZ19sZXZlbC0tOworCWNyaXRpY2FsX2V4aXQoKTsKK30KKworc3RhdGljIHZvaWQKK2lw aV9oYXJkY2xvY2sodm9pZCAqYXJnKQoreworCXN0cnVjdCB0cmFwZnJhbWUgKm9sZGZyYW1lOwor CXN0cnVjdCB0aHJlYWQgKnRkOworCisJY3JpdGljYWxfZW50ZXIoKTsKKwl0ZCA9IGN1cnRocmVh ZDsKKwl0ZC0+dGRfaW50cl9uZXN0aW5nX2xldmVsKys7CisJb2xkZnJhbWUgPSB0ZC0+dGRfaW50 cl9mcmFtZTsKKwl0ZC0+dGRfaW50cl9mcmFtZSA9IChzdHJ1Y3QgdHJhcGZyYW1lICopYXJnOwor CisJQ1RSMShLVFJfU01QLCAiJXM6IElQSV9IQVJEQ0xPQ0siLCBfX2Z1bmNfXyk7CisJaGFyZGNs b2NraW50cigpOworCisJdGQtPnRkX2ludHJfZnJhbWUgPSBvbGRmcmFtZTsKKwl0ZC0+dGRfaW50 cl9uZXN0aW5nX2xldmVsLS07CisJY3JpdGljYWxfZXhpdCgpOworfQorCitzdGF0aWMgdm9pZAor aXBpX3RsYih2b2lkICpkdW1teSBfX3VudXNlZCkKK3sKKworCUNUUjEoS1RSX1NNUCwgIiVzOiBJ UElfVExCIiwgX19mdW5jX18pOworCWNwdWZ1bmNzLmNmX3RsYl9mbHVzaElEKCk7Cit9CisjZWxz ZQogc3RhdGljIGludAogaXBpX2hhbmRsZXIodm9pZCAqYXJnKQogewpAQCAtMzA4LDE1ICszOTgs MjggQEAKIAogCXJldHVybiAoRklMVEVSX0hBTkRMRUQpOwogfQorI2VuZGlmCiAKIHN0YXRpYyB2 b2lkCiByZWxlYXNlX2Fwcyh2b2lkICpkdW1teSBfX3VudXNlZCkKIHsKIAl1aW50MzJfdCBsb29w X2NvdW50ZXI7CisjaWZuZGVmIEFSTV9JTlRSTkcKIAlpbnQgc3RhcnQgPSAwLCBlbmQgPSAwOwor I2VuZGlmCiAKIAlpZiAobXBfbmNwdXMgPT0gMSkKIAkJcmV0dXJuOworCisjaWZkZWYgQVJNX0lO VFJORworCWFybV9pcGlfc2V0X2hhbmRsZXIoSVBJX1JFTkRFWlZPVVMsICJyZW5kZXp2b3VzIiwg aXBpX3JlbmRlenZvdXMsIE5VTEwsIDApOworCWFybV9pcGlfc2V0X2hhbmRsZXIoSVBJX0FTVCwg ImFzdCIsIGlwaV9hc3QsIE5VTEwsIDApOworCWFybV9pcGlfc2V0X2hhbmRsZXIoSVBJX1NUT1As ICJzdG9wIiwgaXBpX3N0b3AsIE5VTEwsIDApOworCWFybV9pcGlfc2V0X2hhbmRsZXIoSVBJX1BS RUVNUFQsICJwcmVlbXB0IiwgaXBpX3ByZWVtcHQsIE5VTEwsIDApOworCWFybV9pcGlfc2V0X2hh bmRsZXIoSVBJX0hBUkRDTE9DSywgImhhcmRjbG9jayIsIGlwaV9oYXJkY2xvY2ssIE5VTEwsIDAp OworCWFybV9pcGlfc2V0X2hhbmRsZXIoSVBJX1RMQiwgInRsYiIsIGlwaV90bGIsIE5VTEwsIDAp OworCisjZWxzZQogI2lmZGVmIElQSV9JUlFfU1RBUlQKIAlzdGFydCA9IElQSV9JUlFfU1RBUlQ7 CiAjaWZkZWYgSVBJX0lSUV9FTkQKQEAgLTM0MSw2ICs0NDQsNyBAQAogCQkvKiBFbmFibGUgaXBp ICovCiAJCWFybV91bm1hc2tfaXJxKGkpOwogCX0KKyNlbmRpZgogCWF0b21pY19zdG9yZV9yZWxf aW50KCZhcHNfcmVhZHksIDEpOwogCiAJcHJpbnRmKCJSZWxlYXNlIEFQc1xuIik7CkluZGV4OiBz eXMvYXJtL2FybS9uZXh1cy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9hcm0vYXJtL25leHVzLmMJKHJl dmlzaW9uIDI3OTY4NSkKKysrIHN5cy9hcm0vYXJtL25leHVzLmMJKHdvcmtpbmcgY29weSkKQEAg LTg1LDggKzg1LDEzIEBACiAgICAgdV9sb25nLCB1X2xvbmcsIHVfbG9uZywgdV9pbnQpOwogc3Rh dGljCWludCBuZXh1c19hY3RpdmF0ZV9yZXNvdXJjZShkZXZpY2VfdCwgZGV2aWNlX3QsIGludCwg aW50LAogICAgIHN0cnVjdCByZXNvdXJjZSAqKTsKKyNpZmRlZiBTTVAKK3N0YXRpYwlpbnQgbmV4 dXNfYmluZF9pbnRyKGRldmljZV90LCBkZXZpY2VfdCwgc3RydWN0IHJlc291cmNlICosIGludCk7 CisjZW5kaWYKIHN0YXRpYyBpbnQgbmV4dXNfY29uZmlnX2ludHIoZGV2aWNlX3QgZGV2LCBpbnQg aXJxLCBlbnVtIGludHJfdHJpZ2dlciB0cmlnLAogICAgIGVudW0gaW50cl9wb2xhcml0eSBwb2wp Oworc3RhdGljCWludCBuZXh1c19kZXNjcmliZV9pbnRyKGRldmljZV90IGRldiwgZGV2aWNlX3Qg Y2hpbGQsCisgICAgc3RydWN0IHJlc291cmNlICppcnEsIHZvaWQgKmNvb2tpZSwgY29uc3QgY2hh ciAqZGVzY3IpOwogc3RhdGljCWludCBuZXh1c19kZWFjdGl2YXRlX3Jlc291cmNlKGRldmljZV90 LCBkZXZpY2VfdCwgaW50LCBpbnQsCiAgICAgc3RydWN0IHJlc291cmNlICopOwogc3RhdGljIGlu dCBuZXh1c19yZWxlYXNlX3Jlc291cmNlKGRldmljZV90LCBkZXZpY2VfdCwgaW50LCBpbnQsCkBA IC0xMTUsNiArMTIwLDEyIEBACiAJREVWTUVUSE9EKGJ1c19yZWxlYXNlX3Jlc291cmNlLAluZXh1 c19yZWxlYXNlX3Jlc291cmNlKSwKIAlERVZNRVRIT0QoYnVzX3NldHVwX2ludHIsCW5leHVzX3Nl dHVwX2ludHIpLAogCURFVk1FVEhPRChidXNfdGVhcmRvd25faW50ciwJbmV4dXNfdGVhcmRvd25f aW50ciksCisjaWZkZWYgQVJNX0lOVFJORworCURFVk1FVEhPRChidXNfZGVzY3JpYmVfaW50ciwJ bmV4dXNfZGVzY3JpYmVfaW50ciksCisjaWZkZWYgU01QCisJREVWTUVUSE9EKGJ1c19iaW5kX2lu dHIsCW5leHVzX2JpbmRfaW50ciksCisjZW5kaWYKKyNlbmRpZgogI2lmZGVmIEZEVAogCURFVk1F VEhPRChvZndfYnVzX21hcF9pbnRyLAluZXh1c19vZndfbWFwX2ludHIpLAogI2VuZGlmCkBAIC0y NTEsOSArMjYyLDEyIEBACiB7CiAJaW50IHJldCA9IEVOT0RFVjsKIAorI2lmZGVmIEFSTV9JTlRS TkcKKwlyZXQgPSBhcm1faXJxX2NvbmZpZyhpcnEsIHRyaWcsIHBvbCk7CisjZWxzZQogCWlmIChh cm1fY29uZmlnX2lycSkKIAkJcmV0ID0gKCphcm1fY29uZmlnX2lycSkoaXJxLCB0cmlnLCBwb2wp OwotCisjZW5kaWYKIAlyZXR1cm4gKHJldCk7CiB9CiAKQEAgLTI2Nyw5ICsyODEsMTQgQEAKIAkJ ZmxhZ3MgfD0gSU5UUl9FWENMOwogCiAJZm9yIChpcnEgPSBybWFuX2dldF9zdGFydChyZXMpOyBp cnEgPD0gcm1hbl9nZXRfZW5kKHJlcyk7IGlycSsrKSB7CisjaWYgZGVmaW5lZChBUk1fSU5UUk5H KQorCQlhcm1faXJxX2FkZF9oYW5kbGVyKGNoaWxkLCBmaWx0LCBpbnRyLCBhcmcsIGlycSwgZmxh Z3MsCisJCSAgICBjb29raWVwKTsKKyNlbHNlCiAJCWFybV9zZXR1cF9pcnFoYW5kbGVyKGRldmlj ZV9nZXRfbmFtZXVuaXQoY2hpbGQpLAogCQkgICAgZmlsdCwgaW50ciwgYXJnLCBpcnEsIGZsYWdz LCBjb29raWVwKTsKIAkJYXJtX3VubWFza19pcnEoaXJxKTsKKyNlbmRpZgogCX0KIAlyZXR1cm4g KDApOwogfQpAQCAtMjc4LDExICsyOTcsMzMgQEAKIG5leHVzX3RlYXJkb3duX2ludHIoZGV2aWNl X3QgZGV2LCBkZXZpY2VfdCBjaGlsZCwgc3RydWN0IHJlc291cmNlICpyLCB2b2lkICppaCkKIHsK IAorI2lmIGRlZmluZWQoQVJNX0lOVFJORykKKwlyZXR1cm4gKGFybV9pcnFfcmVtb3ZlX2hhbmRs ZXIoY2hpbGQsIHJtYW5fZ2V0X3N0YXJ0KHIpLCBpaCkpOworI2Vsc2UKIAlyZXR1cm4gKGFybV9y ZW1vdmVfaXJxaGFuZGxlcihybWFuX2dldF9zdGFydChyKSwgaWgpKTsKKyNlbmRpZgogfQogCisj aWZkZWYgQVJNX0lOVFJORworc3RhdGljIGludAorbmV4dXNfZGVzY3JpYmVfaW50cihkZXZpY2Vf dCBkZXYsIGRldmljZV90IGNoaWxkLCBzdHJ1Y3QgcmVzb3VyY2UgKmlycSwKKyAgICB2b2lkICpj b29raWUsIGNvbnN0IGNoYXIgKmRlc2NyKQorewogCisJcmV0dXJuIChhcm1faXJxX2Rlc2NyaWJl KHJtYW5fZ2V0X3N0YXJ0KGlycSksIGNvb2tpZSwgZGVzY3IpKTsKK30KKworI2lmZGVmIFNNUAog c3RhdGljIGludAorbmV4dXNfYmluZF9pbnRyKGRldmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQs IHN0cnVjdCByZXNvdXJjZSAqaXJxLCBpbnQgY3B1KQoreworCisJcmV0dXJuIChhcm1faXJxX2Jp bmQocm1hbl9nZXRfc3RhcnQoaXJxKSwgY3B1KSk7Cit9CisjZW5kaWYKKyNlbmRpZgorCitzdGF0 aWMgaW50CiBuZXh1c19hY3RpdmF0ZV9yZXNvdXJjZShkZXZpY2VfdCBidXMsIGRldmljZV90IGNo aWxkLCBpbnQgdHlwZSwgaW50IHJpZCwKICAgICBzdHJ1Y3QgcmVzb3VyY2UgKnIpCiB7CkluZGV4 OiBzeXMvYXJtL2FybS9waWNfaWYubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvYXJtL2FybS9waWNfaWYu bQkocmV2aXNpb24gMCkKKysrIHN5cy9hcm0vYXJtL3BpY19pZi5tCSh3b3JraW5nIGNvcHkpCkBA IC0wLDAgKzEsMTI2IEBACisjLQorIyBDb3B5cmlnaHQgKGMpIDIwMTIgSmFrdWIgV29qY2llY2gg S2xhbWEgPGpjZWVsQEZyZWVCU0Qub3JnPgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl IGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBv ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K KyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9v ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBg YEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUg RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JT IEJFIExJQUJMRQorIyBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworIyBPUiBT RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS UlVQVElPTikKKyMgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyMgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorIyBPVVQg T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ QklMSVRZIE9GCisjIFNVQ0ggREFNQUdFLgorIworIyAkRnJlZUJTRCQKKyMKKworI2luY2x1ZGUg Im9wdF9wbGF0Zm9ybS5oIgorCisjaW5jbHVkZSA8c3lzL2J1cy5oPgorI2luY2x1ZGUgPHN5cy9j cHVzZXQuaD4KKyNpbmNsdWRlIDxkZXYvb2Z3L29wZW5maXJtLmg+CisjaW5jbHVkZSA8bWFjaGlu ZS9mcmFtZS5oPgorI2luY2x1ZGUgPG1hY2hpbmUvaW50ci5oPgorCitJTlRFUkZBQ0UgcGljOwor CitDT0RFIHsKKwlzdGF0aWMgaW50IG51bGxfcGljX2JpbmQoZGV2aWNlX3QgZGV2LCBzdHJ1Y3Qg YXJtX2lycXNyYyAqaXNyYykKKwl7CisJCXJldHVybiAoRU9QTk9UU1VQUCk7CisJfQorCisJc3Rh dGljIHZvaWQgbnVsbF9waWNfZGlzYWJsZV9pbnRyKGRldmljZV90IGRldiwgIHN0cnVjdCBhcm1f aXJxc3JjICppc3JjKQorCXsKKwkJcmV0dXJuOworCX0KKworCXN0YXRpYyB2b2lkIG51bGxfcGlj X2VuYWJsZV9pbnRyKGRldmljZV90IGRldiwgIHN0cnVjdCBhcm1faXJxc3JjICppc3JjKQorCXsK KwkJcmV0dXJuOworCX0KKworCXN0YXRpYyB2b2lkIG51bGxfcGljX2luaXRfc2Vjb25kYXJ5KGRl dmljZV90IGRldikKKwl7CisJCXJldHVybjsKKwl9CisKKwlzdGF0aWMgdm9pZCBudWxsX3BpY19p cGlfc2VuZChkZXZpY2VfdCBkZXYsIGNwdXNldF90IGNwdXMsIHVfaW50IGlwaSkKKwl7CisJCXJl dHVybjsKKwl9Cit9OworCitNRVRIT0QgaW50IHJlZ2lzdGVyIHsKKwlkZXZpY2VfdAkJZGV2Owor CXN0cnVjdCBhcm1faXJxc3JjCSppc3JjOworCWJvb2xlYW5fdAkJKmlzX3BlcmNwdTsKK307CisK K01FVEhPRCBpbnQgdW5yZWdpc3RlciB7CisJZGV2aWNlX3QJCWRldjsKKwlzdHJ1Y3QgYXJtX2ly cXNyYwkqaXNyYzsKK307CisKK01FVEhPRCB2b2lkIGRpc2FibGVfaW50ciB7CisJZGV2aWNlX3QJ CWRldjsKKwlzdHJ1Y3QgYXJtX2lycXNyYwkqaXNyYzsKK30gREVGQVVMVCBudWxsX3BpY19kaXNh YmxlX2ludHI7CisKK01FVEhPRCB2b2lkIGRpc2FibGVfc291cmNlIHsKKwlkZXZpY2VfdAkJZGV2 OworCXN0cnVjdCBhcm1faXJxc3JjCSppc3JjOworfTsKKworTUVUSE9EIHZvaWQgZW5hYmxlX3Nv dXJjZSB7CisJZGV2aWNlX3QJCWRldjsKKwlzdHJ1Y3QgYXJtX2lycXNyYwkqaXNyYzsKK307CisK K01FVEhPRCB2b2lkIGVuYWJsZV9pbnRyIHsKKwlkZXZpY2VfdAkJZGV2OworCXN0cnVjdCBhcm1f aXJxc3JjCSppc3JjOworfSBERUZBVUxUIG51bGxfcGljX2VuYWJsZV9pbnRyOworCitNRVRIT0Qg dm9pZCBwcmVfaXRocmVhZCB7CisJZGV2aWNlX3QJCWRldjsKKwlzdHJ1Y3QgYXJtX2lycXNyYwkq aXNyYzsKK307CisKK01FVEhPRCB2b2lkIHBvc3RfaXRocmVhZCB7CisJZGV2aWNlX3QJCWRldjsK KwlzdHJ1Y3QgYXJtX2lycXNyYwkqaXNyYzsKK307CisKK01FVEhPRCB2b2lkIHBvc3RfZmlsdGVy IHsKKwlkZXZpY2VfdAkJZGV2OworCXN0cnVjdCBhcm1faXJxc3JjCSppc3JjOworfTsKKworTUVU SE9EIGludCBiaW5kIHsKKwlkZXZpY2VfdAkJZGV2OworCXN0cnVjdCBhcm1faXJxc3JjCSppc3Jj OworfSBERUZBVUxUIG51bGxfcGljX2JpbmQ7CisKK01FVEhPRCB2b2lkIGluaXRfc2Vjb25kYXJ5 IHsKKwlkZXZpY2VfdAlkZXY7Cit9IERFRkFVTFQgbnVsbF9waWNfaW5pdF9zZWNvbmRhcnk7CisK K01FVEhPRCB2b2lkIGlwaV9zZW5kIHsKKwlkZXZpY2VfdAkJZGV2OworCXN0cnVjdCBhcm1faXJx c3JjCSppc3JjOworCWNwdXNldF90CQljcHVzOworfSBERUZBVUxUIG51bGxfcGljX2lwaV9zZW5k OworCkluZGV4OiBzeXMvYXJtL2luY2x1ZGUvZmR0LmgKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2FybS9p bmNsdWRlL2ZkdC5oCShyZXZpc2lvbiAyNzk2ODUpCisrKyBzeXMvYXJtL2luY2x1ZGUvZmR0LmgJ KHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpZm5kZWYgX01BQ0hJTkVfRkRUX0hf CiAjZGVmaW5lIF9NQUNISU5FX0ZEVF9IXwogCisjaW5jbHVkZSAib3B0X3BsYXRmb3JtLmgiCiAj aW5jbHVkZSA8ZGV2L29mdy9vcGVuZmlybS5oPgogCiAjaW5jbHVkZSA8dm0vdm0uaD4KQEAgLTQw LDEyICs0MSwyNCBAQAogI2luY2x1ZGUgPG1hY2hpbmUvYnVzLmg+CiAjaW5jbHVkZSA8bWFjaGlu ZS9pbnRyLmg+CiAKKyNpZmRlZiBBUk1fSU5UUk5HCisKIC8qIE1heCBpbnRlcnJ1cHQgbnVtYmVy ICovCisjZGVmaW5lCUZEVF9JTlRSX01BWAkoMHhmZmZmKQorCisvKiBNYXAgcGhhbmRsZS9pbnRw aW4gcGFpciB0byBnbG9iYWwgSVJRIG51bWJlciAqLworI2RlZmluZQlGRFRfTUFQX0lSUShub2Rl LCBwaW4pCShhcm1fZmR0X21hcF9pcnEobm9kZSwgcGluKSkKKworI2Vsc2UKKworLyogTWF4IGlu dGVycnVwdCBudW1iZXIgKi8KICNkZWZpbmUgRkRUX0lOVFJfTUFYCU5JUlEKIAogLyogTWFwIHBo YW5kbGUvaW50cGluIHBhaXIgdG8gZ2xvYmFsIElSUSBudW1iZXIgKi8KICNkZWZpbmUJRkRUX01B UF9JUlEobm9kZSwgcGluKQkocGluKQogCisjZW5kaWYgLyogQVJNX0lOVFJORyAqLworCiAvKgog ICogQnVzIHNwYWNlIHRhZy4gWFhYIGVuZGlhbmVzcyBpbmZvIG5lZWRzIHRvIGJlIGRlcml2ZWQg ZnJvbSB0aGUgYmxvYi4KICAqLwpJbmRleDogc3lzL2FybS9pbmNsdWRlL2ludHIuaAo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0tLSBzeXMvYXJtL2luY2x1ZGUvaW50ci5oCShyZXZpc2lvbiAyNzk2ODUpCisrKyBzeXMv YXJtL2luY2x1ZGUvaW50ci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw5NCBAQAogI2lu Y2x1ZGUgPGRldi9vZncvb3BlbmZpcm0uaD4KICNlbmRpZgogCisjaWZkZWYgQVJNX0lOVFJORwor CisjaWZuZGVmIE5JUlEKKyNkZWZpbmUJTklSUQkJMTAyNAkvKiBYWFggLSBJdCBzaG91bGQgYmUg YW4gb3B0aW9uLiAqLworI2VuZGlmCisKKyNkZWZpbmUJSU5UUl9TT0xPCUlOVFJfTUQxCisKKyNk ZWZpbmUgQVJNX0lTUkNfTkFNRUxFTgkoTUFYQ09NTEVOICsgMSkKKwordHlwZWRlZiBpbnQgYXJt X2lycV9maWx0ZXJfdCh2b2lkICphcmcsIHN0cnVjdCB0cmFwZnJhbWUgKnRmKTsKK3R5cGVkZWYg dm9pZCBhcm1faXBpX2ZpbHRlcl90KHZvaWQgKmFyZyk7CisKK2VudW0gYXJtX2lzcmNfdHlwZSB7 CisJQVJNX0lTUkNUX05BTUVTUEFDRSwKKwlBUk1fSVNSQ1RfRkRUCit9OworCisvKiBJbnRlcnJ1 cHQgc291cmNlIGRlZmluaXRpb24uICovCitzdHJ1Y3QgYXJtX2lycXNyYyB7CisJZGV2aWNlX3QJ CWlzcmNfZGV2OwkvKiB3aGVyZSBpc3JjIGlzIG1hcHBlZCAqLworCWludHB0cl90CQlpc3JjX3hy ZWY7CS8qIGRldmljZSByZWZlcmVuY2Uga2V5ICovCisJdm9pZCAqCQkJaXNyY19kYXRhOwkvKiBk ZXZpY2UgZGF0YSBmb3IgaXNyYyAqLworCXVfaW50CQkJaXNyY19pcnE7CS8qIHVuaXF1ZSBpZGVu dGlmaWNhdG9yICovCisJZW51bSBhcm1faXNyY190eXBlCWlzcmNfdHlwZTsJLyogaG93IGlzIGlz cmMgZGVjcmliZWQgKi8KKwl1X2ludAkJCWlzcmNfZmxhZ3M7CisJY2hhcgkJCWlzcmNfbmFtZVtB Uk1fSVNSQ19OQU1FTEVOXTsKKwl1aW50MTZfdAkJaXNyY19uc3BjX3R5cGU7CisJdWludDE2X3QJ CWlzcmNfbnNwY19udW07CisJZW51bSBpbnRyX3RyaWdnZXIJaXNyY190cmlnOworCWVudW0gaW50 cl9wb2xhcml0eQlpc3JjX3BvbDsKKwljcHVzZXRfdAkJaXNyY19jcHU7CS8qIG9uIHdoaWNoIENQ VXMgaXMgZW5hYmxlZCAqLworCXVfaW50CQkJaXNyY19pbmRleDsKKwl1X2xvbmcgKgkJaXNyY19j b3VudDsKKwl1X2ludAkJCWlzcmNfaGFuZGxlcnM7CisJc3RydWN0IGludHJfZXZlbnQgKglpc3Jj X2V2ZW50OworCWFybV9pcnFfZmlsdGVyX3QgKglpc3JjX2ZpbHRlcjsKKwlhcm1faXBpX2ZpbHRl cl90ICoJaXNyY19pcGlmaWx0ZXI7CisJdm9pZCAqCQkJaXNyY19hcmc7CisjaWZkZWYgRkRUCisJ dV9pbnQJCQlpc3JjX25jZWxsczsKKwlwY2VsbF90CQkJaXNyY19jZWxsc1tdOwkvKiBsZWF2ZSBp dCBsYXN0ICovCisjZW5kaWYKK307CisKK3ZvaWQgYXJtX2lycV9zZXRfbmFtZShzdHJ1Y3QgYXJt X2lycXNyYyAqaXNyYywgY29uc3QgY2hhciAqZm10LCAuLi4pCisgICAgX19wcmludGZsaWtlKDIs IDMpOworCit2b2lkIGFybV9pcnFfZGlzcGF0Y2goc3RydWN0IGFybV9pcnFzcmMgKmlzcmMsIHN0 cnVjdCB0cmFwZnJhbWUgKnRmKTsKKworI2RlZmluZSBBUk1fSVJRX05TUENfTk9ORQkwCisjZGVm aW5lIEFSTV9JUlFfTlNQQ19QTEFJTgkxCisjZGVmaW5lIEFSTV9JUlFfTlNQQ19JUlEJMgorI2Rl ZmluZSBBUk1fSVJRX05TUENfSVBJCTMKKwordV9pbnQgYXJtX25hbWVzcGFjZV9tYXBfaXJxKGRl dmljZV90IGRldiwgdWludDE2X3QgdHlwZSwgdWludDE2X3QgbnVtKTsKKyNpZmRlZiBGRFQKK3Vf aW50IGFybV9mZHRfbWFwX2lycShwaGFuZGxlX3QsIHBjZWxsX3QgKiwgdV9pbnQpOworI2VuZGlm CisKK2ludCBhcm1fcGljX3JlZ2lzdGVyKGRldmljZV90IGRldiwgaW50cHRyX3QgeHJlZik7Citp bnQgYXJtX3BpY191bnJlZ2lzdGVyKGRldmljZV90IGRldiwgaW50cHRyX3QgeHJlZik7CitpbnQg YXJtX3BpY19jbGFpbV9yb290KGRldmljZV90IGRldiwgaW50cHRyX3QgeHJlZiwgYXJtX2lycV9m aWx0ZXJfdCAqZmlsdGVyLAorICAgIHZvaWQgKmFyZywgdV9pbnQgaXBpY291bnQpOworCitpbnQg YXJtX2lycV9hZGRfaGFuZGxlcihkZXZpY2VfdCBkZXYsIGRyaXZlcl9maWx0ZXJfdCwgZHJpdmVy X2ludHJfdCwgdm9pZCAqLAorICAgIHVfaW50LCBpbnQsIHZvaWQgKiopOworaW50IGFybV9pcnFf cmVtb3ZlX2hhbmRsZXIoZGV2aWNlX3QgZGV2LCB1X2ludCwgdm9pZCAqKTsKK2ludCBhcm1faXJx X2NvbmZpZyh1X2ludCwgZW51bSBpbnRyX3RyaWdnZXIsIGVudW0gaW50cl9wb2xhcml0eSk7Citp bnQgYXJtX2lycV9kZXNjcmliZSh1X2ludCwgdm9pZCAqLCBjb25zdCBjaGFyICopOworCit1X2lu dCBhcm1faXJxX25leHRfY3B1KHVfaW50IGN1cnJlbnRfY3B1LCBjcHVzZXRfdCAqY3B1bWFzayk7 CisKKyNpZmRlZiBTTVAKK2ludCBhcm1faXJxX2JpbmQodV9pbnQsIGludCk7CisKK3ZvaWQgYXJt X2lwaV9kaXNwYXRjaChzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYywgc3RydWN0IHRyYXBmcmFtZSAq dGYpOworCisjZGVmaW5lIEFJU0hGX05PQUxMT0MJMHgwMDAxCisKK2ludCBhcm1faXBpX3NldF9o YW5kbGVyKHVfaW50IGlwaSwgY29uc3QgY2hhciAqbmFtZSwgYXJtX2lwaV9maWx0ZXJfdCAqZmls dGVyLAorICAgIHZvaWQgKmFyZywgdV9pbnQgZmxhZ3MpOworICAgIAordm9pZCBhcm1fcGljX2lu aXRfc2Vjb25kYXJ5KHZvaWQpOworI2VuZGlmCisKKyNlbHNlIC8qIEFSTV9JTlRSTkcgKi8KKwog LyogWFhYIG1vdmUgdG8gc3RkLiogZmlsZXM/ICovCiAjaWZkZWYgQ1BVX1hTQ0FMRV84MTM0Mgog I2RlZmluZSBOSVJRCQkxMjgKQEAgLTcxLDcgKzE1OSw2IEBACiAjZGVmaW5lIE5JUlEJCTMyCiAj ZW5kaWYKIAotCiBpbnQgYXJtX2dldF9uZXh0X2lycShpbnQpOwogdm9pZCBhcm1fbWFza19pcnEo dWludHB0cl90KTsKIHZvaWQgYXJtX3VubWFza19pcnEodWludHB0cl90KTsKQEAgLTgzLDggKzE3 MCw2IEBACiBleHRlcm4gaW50ICgqYXJtX2NvbmZpZ19pcnEpKGludCBpcnEsIGVudW0gaW50cl90 cmlnZ2VyIHRyaWcsCiAgICAgZW51bSBpbnRyX3BvbGFyaXR5IHBvbCk7CiAKLXZvaWQgYXJtX2ly cV9tZW1vcnlfYmFycmllcih1aW50cHRyX3QpOwotCiB2b2lkIGFybV9pbml0X3NlY29uZGFyeV9p Yyh2b2lkKTsKIGludCAgZ2ljX2RlY29kZV9mZHQodWludDMyX3QgaXBhcmVudG5vZGUsIHVpbnQz Ml90ICppbnRyY2VsbHMsIGludCAqaW50ZXJydXB0LAogICAgIGludCAqdHJpZywgaW50ICpwb2wp OwpAQCAtOTMsNCArMTc4LDggQEAKIGludCBhcm1fZmR0X21hcF9pcnEocGhhbmRsZV90LCBwY2Vs bF90ICosIGludCk7CiAjZW5kaWYKIAorI2VuZGlmIC8qIEFSTV9JTlRSTkcgKi8KKwordm9pZCBh cm1faXJxX21lbW9yeV9iYXJyaWVyKHVpbnRwdHJfdCk7CisKICNlbmRpZgkvKiBfTUFDSElORV9J TlRSX0ggKi8KSW5kZXg6IHN5cy9hcm0vaW5jbHVkZS9zbXAuaAo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMv YXJtL2luY2x1ZGUvc21wLmgJKHJldmlzaW9uIDI3OTY4NSkKKysrIHN5cy9hcm0vaW5jbHVkZS9z bXAuaAkod29ya2luZyBjb3B5KQpAQCAtNiw2ICs2LDE4IEBACiAjaW5jbHVkZSA8c3lzL19jcHVz ZXQuaD4KICNpbmNsdWRlIDxtYWNoaW5lL3BjYi5oPgogCisjaWZkZWYgQVJNX0lOVFJORworZW51 bSB7CisJSVBJX0FTVCwKKwlJUElfUFJFRU1QVCwKKwlJUElfUkVOREVaVk9VUywKKwlJUElfU1RP UCwKKwlJUElfU1RPUF9IQVJEID0gSVBJX1NUT1AsIC8qIFRoZXNlIGFyZSBzeW5vbnltcyBvbiBh cm0uICovCisJSVBJX0hBUkRDTE9DSywKKwlJUElfVExCLAorCUFSTV9JUElfQ09VTlQKK307Cisj ZWxzZQogI2RlZmluZSBJUElfQVNUCQkwCiAjZGVmaW5lIElQSV9QUkVFTVBUCTIKICNkZWZpbmUg SVBJX1JFTkRFWlZPVVMJMwpAQCAtMTMsNiArMjUsNyBAQAogI2RlZmluZSBJUElfU1RPUF9IQVJE CTQKICNkZWZpbmUgSVBJX0hBUkRDTE9DSwk2CiAjZGVmaW5lIElQSV9UTEIJCTcKKyNlbmRpZgog CiB2b2lkCWluaXRfc2Vjb25kYXJ5KGludCBjcHUpOwogdm9pZAltcGVudHJ5KHZvaWQpOwpAQCAt MjMsOCArMzYsMTAgQEAKIAogLyogUElDIGludGVyZmFjZSAqLwogdm9pZAlwaWNfaXBpX3NlbmQo Y3B1c2V0X3QgY3B1cywgdV9pbnQgaXBpKTsKKyNpZm5kZWYgQVJNX0lOVFJORwogdm9pZAlwaWNf aXBpX2NsZWFyKGludCBpcGkpOwogaW50CXBpY19pcGlfcmVhZChpbnQgYXJnKTsKKyNlbmRpZgog CiAvKiBQbGF0Zm9ybSBpbnRlcmZhY2UgKi8KIHZvaWQJcGxhdGZvcm1fbXBfc2V0bWF4aWQodm9p ZCk7CkluZGV4OiBzeXMvY29uZi9maWxlcy5hcm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2NvbmYvZmls ZXMuYXJtCShyZXZpc2lvbiAyNzk2ODUpCisrKyBzeXMvY29uZi9maWxlcy5hcm0JKHdvcmtpbmcg Y29weSkKQEAgLTI5LDcgKzI5LDggQEAKIGFybS9hcm0vaWRlbnRjcHUuYwkJc3RhbmRhcmQKIGFy bS9hcm0vaW5fY2tzdW0uYwkJb3B0aW9uYWwJaW5ldCB8IGluZXQ2CiBhcm0vYXJtL2luX2Nrc3Vt X2FybS5TCQlvcHRpb25hbAlpbmV0IHwgaW5ldDYKLWFybS9hcm0vaW50ci5jCQkJc3RhbmRhcmQK K2FybS9hcm0vaW50ci5jCQkJb3B0aW9uYWwJIWFybV9pbnRybmcKK2FybS9hcm0vaW50cm5nLmMJ CW9wdGlvbmFsCWFybV9pbnRybmcKIGFybS9hcm0vbG9jb3JlLlMJCXN0YW5kYXJkCW5vLW9iagog YXJtL2FybS9tYWNoZGVwLmMJCXN0YW5kYXJkCiBhcm0vYXJtL21lbS5jCQkJb3B0aW9uYWwJbWVt CkBAIC0zNyw2ICszOCw3IEBACiBhcm0vYXJtL21wX21hY2hkZXAuYwkJb3B0aW9uYWwJc21wCiBh cm0vYXJtL25leHVzLmMJCQlzdGFuZGFyZAogYXJtL2FybS9waHlzbWVtLmMJCXN0YW5kYXJkCith cm0vYXJtL3BpY19pZi5tCQlvcHRpb25hbAlhcm1faW50cm5nCiBhcm0vYXJtL3BsMTkwLmMJCQlv cHRpb25hbAlwbDE5MAogYXJtL2FybS9wbDMxMC5jCQkJb3B0aW9uYWwJcGwzMTAKIGFybS9hcm0v cGxhdGZvcm0uYwkJb3B0aW9uYWwJcGxhdGZvcm0KSW5kZXg6IHN5cy9jb25mL29wdGlvbnMuYXJt Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLS0tIHN5cy9jb25mL29wdGlvbnMuYXJtCShyZXZpc2lvbiAyNzk2ODUpCisr KyBzeXMvY29uZi9vcHRpb25zLmFybQkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDcgQEAKIEFS TTlfQ0FDSEVfV1JJVEVfVEhST1VHSAlvcHRfZ2xvYmFsLmgKIEFSTVY2CQkJb3B0X2dsb2JhbC5o CiBBUk1fQ0FDSEVfTE9DS19FTkFCTEUJb3B0X2dsb2JhbC5oCitBUk1fSU5UUk5HCQlvcHRfZ2xv YmFsLmgKIEFSTV9LRVJOX0RJUkVDVE1BUAlvcHRfdm0uaAogQVJNX0wyX1BJUFQJCW9wdF9nbG9i YWwuaAogQVJNX01BTllfQk9BUkQJCW9wdF9nbG9iYWwuaApJbmRleDogc3lzL2Rldi9mZHQvZmR0 X2NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9kZXYvZmR0L2ZkdF9jb21tb24uaAkocmV2aXNp b24gMjc5Njg1KQorKysgc3lzL2Rldi9mZHQvZmR0X2NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBA IC03OSw2ICs3OSw3IEBACiBpbnQgZmR0X2FkZHJzaXplX2NlbGxzKHBoYW5kbGVfdCwgaW50ICos IGludCAqKTsKIHVfbG9uZyBmZHRfZGF0YV9nZXQodm9pZCAqLCBpbnQpOwogaW50IGZkdF9kYXRh X3RvX3JlcyhwY2VsbF90ICosIGludCwgaW50LCB1X2xvbmcgKiwgdV9sb25nICopOworaW50IGZk dF9kZXNjcmliZV9pcnEoY2hhciAqLCB1X2ludCwgdV9pbnQpOwogcGhhbmRsZV90IGZkdF9maW5k X2NvbXBhdGlibGUocGhhbmRsZV90LCBjb25zdCBjaGFyICosIGludCk7CiBwaGFuZGxlX3QgZmR0 X2RlcHRoX3NlYXJjaF9jb21wYXRpYmxlKHBoYW5kbGVfdCwgY29uc3QgY2hhciAqLCBpbnQpOwog aW50IGZkdF9nZXRfbWVtX3JlZ2lvbnMoc3RydWN0IG1lbV9yZWdpb24gKiwgaW50ICosIHVpbnQz Ml90ICopOwpJbmRleDogc3lzL2Rldi9mZHQvc2ltcGxlYnVzLmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lz L2Rldi9mZHQvc2ltcGxlYnVzLmMJKHJldmlzaW9uIDI3OTY4NSkKKysrIHN5cy9kZXYvZmR0L3Np bXBsZWJ1cy5jCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8ZGV2 L29mdy9vZndfYnVzLmg+CiAjaW5jbHVkZSA8ZGV2L29mdy9vZndfYnVzX3N1YnIuaD4KIAorI2lu Y2x1ZGUgPGRldi9mZHQvZmR0X2NvbW1vbi5oPgogI2luY2x1ZGUgPGRldi9mZHQvc2ltcGxlYnVz Lmg+CiAKIC8qCkBAIC00OSw2ICs1MCw5IEBACiAgICAgaW50ICosIHVfbG9uZywgdV9sb25nLCB1 X2xvbmcsIHVfaW50KTsKIHN0YXRpYyB2b2lkCQlzaW1wbGVidXNfcHJvYmVfbm9tYXRjaChkZXZp Y2VfdCBidXMsIGRldmljZV90IGNoaWxkKTsKIHN0YXRpYyBpbnQJCXNpbXBsZWJ1c19wcmludF9j aGlsZChkZXZpY2VfdCBidXMsIGRldmljZV90IGNoaWxkKTsKKyNpZmRlZiBBUk1fSU5UUk5HCitz dGF0aWMgaW50CQlzaW1wbGVidXNfcHJpbnRfaXJxcyhzdHJ1Y3QgcmVzb3VyY2VfbGlzdCAqcmwp OworI2VuZGlmCiAKIC8qCiAgKiBvZndfYnVzIGludGVyZmFjZQpAQCAtMzIzLDcgKzMyNywxMSBA QAogCiAJcnYgPSAwOwogCXJ2ICs9IHJlc291cmNlX2xpc3RfcHJpbnRfdHlwZSgmZGktPnJsLCAi bWVtIiwgU1lTX1JFU19NRU1PUlksICIlI2x4Iik7CisjaWZkZWYgQVJNX0lOVFJORworCXJ2ICs9 IHNpbXBsZWJ1c19wcmludF9pcnFzKCZkaS0+cmwpOworI2Vsc2UKIAlydiArPSByZXNvdXJjZV9s aXN0X3ByaW50X3R5cGUoJmRpLT5ybCwgImlycSIsIFNZU19SRVNfSVJRLCAiJWxkIik7CisjZW5k aWYKIAlyZXR1cm4gKHJ2KTsKIH0KIApAQCAtMzYyLDMgKzM3MCwzMCBAQAogCXJ2ICs9IGJ1c19w cmludF9jaGlsZF9mb290ZXIoYnVzLCBjaGlsZCk7CiAJcmV0dXJuIChydik7CiB9CisKKyNpZmRl ZiBBUk1fSU5UUk5HCitzdGF0aWMgaW50CitzaW1wbGVidXNfcHJpbnRfaXJxcyhzdHJ1Y3QgcmVz b3VyY2VfbGlzdCAqcmwpCit7CisJc3RydWN0IHJlc291cmNlX2xpc3RfZW50cnkgKnJsZTsKKwlp bnQgZXJyLCBwcmludGVkLCByZXR2YWw7CisJY2hhciBidWZbMzJdOworCisJcHJpbnRlZCA9IDA7 CisJcmV0dmFsID0gMDsKKworCVNUQUlMUV9GT1JFQUNIKHJsZSwgcmwsIGxpbmspIHsKKwkJaWYg KHJsZS0+dHlwZSAhPSBTWVNfUkVTX0lSUSkKKwkJCWNvbnRpbnVlOworCisJCWVyciA9IGZkdF9k ZXNjcmliZV9pcnEoYnVmLCBzaXplb2YoYnVmKSwgcmxlLT5zdGFydCk7CisJCWlmIChlcnIgPCAw KQorCQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIj8/PyIpOworCisJCXJldHZhbCArPSBw cmludGYoIiVzJXMiLCBwcmludGVkID8gIiwiIDogIiBpcnEgIiwgYnVmKTsKKwkJcHJpbnRlZCsr OworCX0KKworCXJldHVybiAocmV0dmFsKTsKK30KKyNlbmRpZgo= --20cf30223fb18e26520510a22522 Content-Type: text/plain; charset=US-ASCII; name="intrng_gic_panda_01.diff" Content-Disposition: attachment; filename="intrng_gic_panda_01.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_i6xu3s494 SW5kZXg6IHN5cy9hcm0vYXJtL2dpYy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9hcm0vYXJtL2dpYy5j CShyZXZpc2lvbiAyNzk2ODUpCisrKyBzeXMvYXJtL2FybS9naWMuYwkod29ya2luZyBjb3B5KQpA QCAtMzQsNiArMzQsOCBAQAogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgogX19GQlNESUQoIiRGcmVl QlNEJCIpOwogCisjaW5jbHVkZSAib3B0X3BsYXRmb3JtLmgiCisKICNpbmNsdWRlIDxzeXMvcGFy YW0uaD4KICNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KICNpbmNsdWRlIDxzeXMvYnVzLmg+CkBAIC00 MCw2ICs0Miw3IEBACiAjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPgogI2luY2x1ZGUgPHN5cy9rdHIu aD4KICNpbmNsdWRlIDxzeXMvbW9kdWxlLmg+CisjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgogI2lu Y2x1ZGUgPHN5cy9ybWFuLmg+CiAjaW5jbHVkZSA8c3lzL3BjcHUuaD4KICNpbmNsdWRlIDxzeXMv cHJvYy5oPgpAQCAtNDYsNiArNDksNyBAQAogI2luY2x1ZGUgPHN5cy9jcHVzZXQuaD4KICNpbmNs dWRlIDxzeXMvbG9jay5oPgogI2luY2x1ZGUgPHN5cy9tdXRleC5oPgorI2luY2x1ZGUgPHN5cy9z bXAuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2J1cy5oPgogI2luY2x1ZGUgPG1hY2hpbmUvaW50ci5o PgogI2luY2x1ZGUgPG1hY2hpbmUvc21wLmg+CkBAIC01NSw2ICs1OSwxMSBAQAogI2luY2x1ZGUg PGRldi9vZncvb2Z3X2J1cy5oPgogI2luY2x1ZGUgPGRldi9vZncvb2Z3X2J1c19zdWJyLmg+CiAK KyNpZmRlZiBBUk1fSU5UUk5HCisjaW5jbHVkZSA8c3lzL3NjaGVkLmg+CisjaW5jbHVkZSAicGlj X2lmLmgiCisjZW5kaWYKKwogLyogV2UgYXJlIHVzaW5nIEdJQ3YyIHJlZ2lzdGVyIG5hbWluZyAq LwogCiAvKiBEaXN0cmlidXRvciBSZWdpc3RlcnMgKi8KQEAgLTgzLDggKzkyLDggQEAKICNkZWZp bmUgR0lDQ19BQlBSCQkweDAwMUMJCQkvKiB2MSBJQ0NBQlBSICovCiAjZGVmaW5lIEdJQ0NfSUlE UgkJMHgwMEZDCQkJLyogdjEgSUNDSUlEUiovCiAKLSNkZWZpbmUJR0lDX0ZJUlNUX0lQSQkJIDAJ LyogSXJxcyAwLTE1IGFyZSBTR0lzL0lQSXMuICovCi0jZGVmaW5lCUdJQ19MQVNUX0lQSQkJMTUK KyNkZWZpbmUJR0lDX0ZJUlNUX1NHSQkJIDAJLyogSXJxcyAwLTE1IGFyZSBTR0lzL0lQSXMuICov CisjZGVmaW5lCUdJQ19MQVNUX1NHSQkJMTUKICNkZWZpbmUJR0lDX0ZJUlNUX1BQSQkJMTYJLyog SXJxcyAxNi0zMSBhcmUgcHJpdmF0ZSAocGVyICovCiAjZGVmaW5lCUdJQ19MQVNUX1BQSQkJMzEJ LyogY29yZSkgcGVyaXBoZXJhbCBpbnRlcnJ1cHRzLiAqLwogI2RlZmluZQlHSUNfRklSU1RfU1BJ CQkzMgkvKiBJcnFzIDMyKyBhcmUgc2hhcmVkIHBlcmlwaGVyYWxzLiAqLwpAQCAtOTgsOCArMTA3 LDE3IEBACiAjZGVmaW5lIEdJQ0RfSUNGR1JfVFJJR19FREdFCSgxIDw8IDEpCiAjZGVmaW5lIEdJ Q0RfSUNGR1JfVFJJR19NQVNLCTB4MgogCisjaWZkZWYgQVJNX0lOVFJORworc3RhdGljIHVfaW50 IGdpY19pcnFfY3B1Oworc3RhdGljIGludCBhcm1fZ2ljX2ludHIodm9pZCAqLCBzdHJ1Y3QgdHJh cGZyYW1lICopOworI2VuZGlmCisKIHN0cnVjdCBhcm1fZ2ljX3NvZnRjIHsKIAlkZXZpY2VfdAkJ Z2ljX2RldjsKKyNpZmRlZiBBUk1fSU5UUk5HCisJdm9pZCAqCQkJZ2ljX2ludHJoYW5kOworCXN0 cnVjdCBhcm1faXJxc3JjICoqCWdpY19pcnFzOworI2VuZGlmCiAJc3RydWN0IHJlc291cmNlICoJ Z2ljX3Jlc1szXTsKIAlidXNfc3BhY2VfdGFnX3QJCWdpY19jX2JzdDsKIAlidXNfc3BhY2VfdGFn X3QJCWdpY19kX2JzdDsKQEAgLTExMywxMCArMTMxLDEzIEBACiBzdGF0aWMgc3RydWN0IHJlc291 cmNlX3NwZWMgYXJtX2dpY19zcGVjW10gPSB7CiAJeyBTWVNfUkVTX01FTU9SWSwJMCwJUkZfQUNU SVZFIH0sCS8qIERpc3RyaWJ1dG9yIHJlZ2lzdGVycyAqLwogCXsgU1lTX1JFU19NRU1PUlksCTEs CVJGX0FDVElWRSB9LAkvKiBDUFUgSW50ZXJydXB0IEludGYuIHJlZ2lzdGVycyAqLworI2lmZGVm IEFSTV9JTlRSTkcKKwl7IFNZU19SRVNfSVJRLAkgIDAsIFJGX0FDVElWRSB8IFJGX09QVElPTkFM IH0sIC8qIFBhcmVudCBpbnRlcnJ1cHQgKi8KKyNlbmRpZgogCXsgLTEsIDAgfQogfTsKIAotc3Rh dGljIHN0cnVjdCBhcm1fZ2ljX3NvZnRjICphcm1fZ2ljX3NjID0gTlVMTDsKK3N0YXRpYyBzdHJ1 Y3QgYXJtX2dpY19zb2Z0YyAqZ2ljX3NjID0gTlVMTDsKIAogI2RlZmluZQlnaWNfY19yZWFkXzQo X3NjLCBfcmVnKQkJXAogICAgIGJ1c19zcGFjZV9yZWFkXzQoKF9zYyktPmdpY19jX2JzdCwgKF9z YyktPmdpY19jX2JzaCwgKF9yZWcpKQpAQCAtMTI3LDkgKzE0OCwxMSBAQAogI2RlZmluZQlnaWNf ZF93cml0ZV80KF9zYywgX3JlZywgX3ZhbCkJCVwKICAgICBidXNfc3BhY2Vfd3JpdGVfNCgoX3Nj KS0+Z2ljX2RfYnN0LCAoX3NjKS0+Z2ljX2RfYnNoLCAoX3JlZyksIChfdmFsKSkKIAorI2lmbmRl ZiBBUk1fSU5UUk5HCiBzdGF0aWMgaW50IGdpY19jb25maWdfaXJxKGludCBpcnEsIGVudW0gaW50 cl90cmlnZ2VyIHRyaWcsCiAgICAgZW51bSBpbnRyX3BvbGFyaXR5IHBvbCk7CiBzdGF0aWMgdm9p ZCBnaWNfcG9zdF9maWx0ZXIodm9pZCAqKTsKKyNlbmRpZgogCiBzdGF0aWMgc3RydWN0IG9md19j b21wYXRfZGF0YSBjb21wYXRfZGF0YVtdID0gewogCXsiYXJtLGdpYyIsCQl0cnVlfSwJLyogTm9u LXN0YW5kYXJkLCB1c2VkIGluIEZyZWVCU0QgZHRzLiAqLwpAQCAtMTU1LDEwICsxNzgsNjIgQEAK IAlyZXR1cm4gKEJVU19QUk9CRV9ERUZBVUxUKTsKIH0KIAorI2lmZGVmIEFSTV9JTlRSTkcKK3N0 YXRpYyBpbmxpbmUgdm9pZAorZ2ljX2lycV91bm1hc2soc3RydWN0IGFybV9naWNfc29mdGMgKnNj LCB1X2ludCBpcnEpCit7CisKKwlnaWNfZF93cml0ZV80KHNjLCBHSUNEX0lTRU5BQkxFUihpcnEg Pj4gNSksICgxVUwgPDwgKGlycSAmIDB4MUYpKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAor Z2ljX2lycV9tYXNrKHN0cnVjdCBhcm1fZ2ljX3NvZnRjICpzYywgdV9pbnQgaXJxKQoreworCisJ Z2ljX2Rfd3JpdGVfNChzYywgR0lDRF9JQ0VOQUJMRVIoaXJxID4+IDUpLCAoMVVMIDw8IChpcnEg JiAweDFGKSkpOworfQorI2VuZGlmCisKKyNpZmRlZiBTTVAKKyNpZmRlZiBBUk1fSU5UUk5HCiBz dGF0aWMgdm9pZAogYXJtX2dpY19pbml0X3NlY29uZGFyeShkZXZpY2VfdCBkZXYpCiB7CiAJc3Ry dWN0IGFybV9naWNfc29mdGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCXN0cnVjdCBh cm1faXJxc3JjICppc3JjOworCXVfaW50IGlycTsKKworCWZvciAoaXJxID0gMDsgaXJxIDwgc2Mt Pm5pcnFzOyBpcnEgKz0gNCkKKwkJZ2ljX2Rfd3JpdGVfNChzYywgR0lDRF9JUFJJT1JJVFlSKGly cSA+PiAyKSwgMCk7CisKKwkvKiBTZXQgYWxsIHRoZSBpbnRlcnJ1cHRzIHRvIGJlIGluIEdyb3Vw IDAgKHNlY3VyZSkgKi8KKwlmb3IgKGlycSA9IDA7IGlycSA8IHNjLT5uaXJxczsgaXJxICs9IDMy KSB7CisJCWdpY19kX3dyaXRlXzQoc2MsIEdJQ0RfSUdST1VQUihpcnEgPj4gNSksIDApOworCX0K KworCS8qIEVuYWJsZSBDUFUgaW50ZXJmYWNlICovCisJZ2ljX2Nfd3JpdGVfNChzYywgR0lDQ19D VExSLCAxKTsKKworCS8qIFNldCBwcmlvcml0eSBtYXNrIHJlZ2lzdGVyLiAqLworCWdpY19jX3dy aXRlXzQoc2MsIEdJQ0NfUE1SLCAweGZmKTsKKworCS8qIEVuYWJsZSBpbnRlcnJ1cHQgZGlzdHJp YnV0aW9uICovCisJZ2ljX2Rfd3JpdGVfNChzYywgR0lDRF9DVExSLCAweDAxKTsKKworCS8qIFVu bWFzayBhdHRhY2hlZCBQUEkgaW50ZXJydXB0cy4gKi8KKwlmb3IgKGlycSA9IEdJQ19GSVJTVF9Q UEk7IGlycSA8PSBHSUNfTEFTVF9QUEk7IGlycSsrKSB7CisJCWlzcmMgPSBzYy0+Z2ljX2lycXNb aXJxXTsKKwkJaWYgKGlzcmMgIT0gTlVMTCkgeworCQkJQ1BVX1NFVChQQ1BVX0dFVChjcHVpZCks ICZpc3JjLT5pc3JjX2NwdSk7CisJCQlnaWNfaXJxX3VubWFzayhzYywgaXJxKTsKKwkJfQorCX0K K30KKyNlbHNlCitzdGF0aWMgdm9pZAorYXJtX2dpY19pbml0X3NlY29uZGFyeShkZXZpY2VfdCBk ZXYpCit7CisJc3RydWN0IGFybV9naWNfc29mdGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYp OwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IHNjLT5uaXJxczsgaSArPSA0KQpAQCAtMTg1 LDcgKzI2MCwxMCBAQAogCWdpY19kX3dyaXRlXzQoc2MsIEdJQ0RfSVNFTkFCTEVSKDI5ID4+IDUp LCAoMVVMIDw8ICgyOSAmIDB4MUYpKSk7CiAJZ2ljX2Rfd3JpdGVfNChzYywgR0lDRF9JU0VOQUJM RVIoMzAgPj4gNSksICgxVUwgPDwgKDMwICYgMHgxRikpKTsKIH0KKyNlbmRpZiAvKiBBUk1fSU5U Uk5HICovCisjZW5kaWYgLyogU01QICovCiAKKyNpZm5kZWYgQVJNX0lOVFJORwogaW50CiBnaWNf ZGVjb2RlX2ZkdCh1aW50MzJfdCBpcGFyZW50LCB1aW50MzJfdCAqaW50ciwgaW50ICppbnRlcnJ1 cHQsCiAgICAgaW50ICp0cmlnLCBpbnQgKnBvbCkKQEAgLTIzMCw3ICszMDgsMTggQEAKIAl9CiAJ cmV0dXJuICgwKTsKIH0KKyNlbmRpZgogCitzdGF0aWMgaW5saW5lIGludHB0cl90CitnaWNfeHJl ZihkZXZpY2VfdCBkZXYpCit7CisjaWZkZWYgRkRUCisJcmV0dXJuIChPRl94cmVmX2Zyb21fbm9k ZShvZndfYnVzX2dldF9ub2RlKGRldikpKTsKKyNlbHNlCisJcmV0dXJuICgwKTsKKyNlbmRpZgor fQorCiBzdGF0aWMgaW50CiBhcm1fZ2ljX2F0dGFjaChkZXZpY2VfdCBkZXYpCiB7CkBAIC0yMzcs OCArMzI2LDExIEBACiAJc3RydWN0CQlhcm1fZ2ljX3NvZnRjICpzYzsKIAlpbnQJCWk7CiAJdWlu dDMyX3QJaWNjaWlkcjsKKyNpZmRlZiBBUk1fSU5UUk5HCisJaW50cHRyX3QJeHJlZiA9IGdpY194 cmVmKGRldik7CisjZW5kaWYKIAotCWlmIChhcm1fZ2ljX3NjKQorCWlmIChnaWNfc2MpCiAJCXJl dHVybiAoRU5YSU8pOwogCiAJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CkBAIC0yNDksNyAr MzQxLDcgQEAKIAl9CiAKIAlzYy0+Z2ljX2RldiA9IGRldjsKLQlhcm1fZ2ljX3NjID0gc2M7CisJ Z2ljX3NjID0gc2M7CiAKIAkvKiBJbml0aWFsaXplIG11dGV4ICovCiAJbXR4X2luaXQoJnNjLT5t dXRleCwgIkdJQyBsb2NrIiwgIiIsIE1UWF9TUElOKTsKQEAgLTI2OSw5ICszNjEsMTQgQEAKIAlz Yy0+bmlycXMgPSBnaWNfZF9yZWFkXzQoc2MsIEdJQ0RfVFlQRVIpOwogCXNjLT5uaXJxcyA9IDMy ICogKChzYy0+bmlycXMgJiAweDFmKSArIDEpOwogCisjaWZkZWYgQVJNX0lOVFJORworCXNjLT5n aWNfaXJxcyA9IG1hbGxvYyhzYy0+bmlycXMgKiBzaXplb2YgKCpzYy0+Z2ljX2lycXMpLCBNX0RF VkJVRiwKKwkgICAgTV9XQUlUT0sgfCBNX1pFUk8pOworI2Vsc2UKIAkvKiBTZXQgdXAgZnVuY3Rp b24gcG9pbnRlcnMgKi8KIAlhcm1fcG9zdF9maWx0ZXIgPSBnaWNfcG9zdF9maWx0ZXI7CiAJYXJt X2NvbmZpZ19pcnEgPSBnaWNfY29uZmlnX2lycTsKKyNlbmRpZgogCiAJaWNjaWlkciA9IGdpY19j X3JlYWRfNChzYywgR0lDQ19JSURSKTsKIAlkZXZpY2VfcHJpbnRmKGRldiwicG4gMHgleCwgYXJj aCAweCV4LCByZXYgMHgleCwgaW1wbGVtZW50ZXIgMHgleCBpcnFzICV1XG4iLApAQCAtMzA3LDEx ICs0MDQsNDYzIEBACiAKIAkvKiBFbmFibGUgaW50ZXJydXB0IGRpc3RyaWJ1dGlvbiAqLwogCWdp Y19kX3dyaXRlXzQoc2MsIEdJQ0RfQ1RMUiwgMHgwMSk7CisjaWZuZGVmIEFSTV9JTlRSTkcKKwly ZXR1cm4gKDApOworI2Vsc2UKKwkvKgorCSAqIE5vdywgd2hlbiBldmVyeXRoaW5nIGlzIGluaXRp YWxpemVkLCBpdCdzIHJpZ2h0IHRpbWUgdG8KKwkgKiByZWdpc3RlciBpbnRlcnJ1cHQgY29udHJv bGxlciB0byBpbnRlcnJ1cHQgZnJhbWVmb3JrLgorCSAqLworCWlmIChhcm1fcGljX3JlZ2lzdGVy KGRldiwgeHJlZikgIT0gMCkgeworCQlkZXZpY2VfcHJpbnRmKGRldiwgImNvdWxkIG5vdCByZWdp c3RlciBQSUNcbiIpOworCQlnb3RvIGNsZWFudXA7CisJfQogCisJaWYgKHNjLT5naWNfcmVzWzJd ID09IE5VTEwpIHsKKwkJaWYgKGFybV9waWNfY2xhaW1fcm9vdChkZXYsIHhyZWYsIGFybV9naWNf aW50ciwgc2MsCisJCSAgICBHSUNfTEFTVF9TR0kgLSBHSUNfRklSU1RfU0dJICsgMSkgIT0gMCkg eworCQkJZGV2aWNlX3ByaW50ZihkZXYsICJjb3VsZCBub3Qgc2V0IFBJQyBhcyBhIHJvb3RcbiIp OworCQkJYXJtX3BpY191bnJlZ2lzdGVyKGRldiwgeHJlZik7CisJCQlnb3RvIGNsZWFudXA7CisJ CX0KKwl9IGVsc2UgeworCQlpZiAoYnVzX3NldHVwX2ludHIoZGV2LCBzYy0+Z2ljX3Jlc1syXSwg SU5UUl9UWVBFX01JU0MgfAorCQkgICAgSU5UUl9TT0xPLCAodm9pZCopYXJtX2dpY19pbnRyLCBO VUxMLCBzYywKKwkJICAgICZzYy0+Z2ljX2ludHJoYW5kKSkgeworCQkJZGV2aWNlX3ByaW50Zihk ZXYsICJjb3VsZCBub3Qgc2V0dXAgaXJxIGhhbmRsZXJcbiIpOworCQkJYXJtX3BpY191bnJlZ2lz dGVyKGRldiwgeHJlZik7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwl9CisKIAlyZXR1cm4gKDAp OworCitjbGVhbnVwOgorCS8qCisJICogWFhYIC0gbm90IGltcGxlbWVudGVkIGFybV9naWNfZGV0 YWNoKCkgc2hvdWxkIGJlIGNhbGxlZCAhCisJICovCisJaWYgKHNjLT5naWNfaXJxcyAhPSBOVUxM KQorCQlmcmVlKHNjLT5naWNfaXJxcywgTV9ERVZCVUYpOworCWJ1c19yZWxlYXNlX3Jlc291cmNl cyhkZXYsIGFybV9naWNfc3BlYywgc2MtPmdpY19yZXMpOworCXJldHVybihFTlhJTyk7CisjZW5k aWYKIH0KIAorI2lmZGVmIEFSTV9JTlRSTkcKIHN0YXRpYyBpbnQKK2FybV9naWNfaW50cih2b2lk ICphcmcsIHN0cnVjdCB0cmFwZnJhbWUgKnRmKQoreworCXN0cnVjdCBhcm1fZ2ljX3NvZnRjICpz YyA9IGFyZzsKKwlzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYzsKKwl1aW50MzJfdCBpcnFfYWN0aXZl X3JlZywgaXJxOworCisJaXJxX2FjdGl2ZV9yZWcgPSBnaWNfY19yZWFkXzQoc2MsIEdJQ0NfSUFS KTsKKwlpcnEgPSBpcnFfYWN0aXZlX3JlZyAmIDB4M0ZGOworCisJLyoKKwkgKiAxLiBXZSBkbyBF T0kgaGVyZSBiZWNhdXNlIHJlY2VudCByZWFkIHZhbHVlIGZyb20gYWN0aXZlIGludGVycnVwdAor CSAqICAgIHJlZ2lzdGVyIG11c3QgYmUgdXNlZCBmb3IgaXQuIEFub3RoZXIgYXBwcm9hY2ggaXMg dG8gc2F2ZSB0aGlzCisJICogICAgdmFsdWUgaW50byBhc3NvY2lhdGVkIGludGVycnVwdCBzb3Vy Y2UuCisJICogMi4gRU9JIG11c3QgYmUgZG9uZSBvbiBzYW1lIENQVSB3aGVyZSBpbnRlcnJ1cHQg aGFzIGZpcmVkLiBUaHVzCisJICogICAgd2UgbXVzdCBlbnN1cmUgdGhhdCBpbnRlcnJ1cHRlZCB0 aHJlYWQgZG9lcyBub3QgbWlncmF0ZSB0bworCSAqICAgIGFub3RoZXIgQ1BVLgorCSAqIDMuIEVP SSBjYW5ub3QgYmUgZGVsYXllZCBieSBhbnkgcHJlZW1wdGlvbiB3aGljaCBjb3VsZCBoYXBwZW4g b24KKwkgKiAgICBjcml0aWNhbF9leGl0KCkgdXNlZCBpbiBNSSBpbnRyIGNvZGUsIHdoZW4gaW50 ZXJydXB0IHRocmVhZCBpcworCSAqICAgIHNjaGVkdWxlZC4gU2VlIG5leHQgcG9pbnQuCisJICog NC4gSVBJX1JFTkRFWlZPVVMgYXNzdW1lcyB0aGF0IG5vIHByZWVtcHRpb24gaXMgcGVybWl0dGVk IGR1cmluZworCSAqICAgIGFuIGFjdGlvbiBhbmQgYW55IHVzZSBvZiBjcml0aWNhbF9leGl0KCkg Y291bGQgYnJlYWsgdGhpcworCSAqICAgIGFzc3VtcHRpb24uIFNlZSBjb21tZW50cyB3aXRoaW4g c21wX3JlbmRlenZvdXNfYWN0aW9uKCkuCisJICogNS4gV2UgYWx3YXlzIHJldHVybiBGSUxURVJf SEFORExFRCBhcyB0aGlzIGlzIGFuIGludGVycnVwdAorCSAqICAgIGNvbnRyb2xsZXIgZGlzcGF0 Y2ggZnVuY3Rpb24uIE90aGVyd2lzZSwgaW4gY2FzY2FkZWQgaW50ZXJydXB0CisJICogICAgY2Fz ZSwgdGhlIHdob2xlIGludGVycnVwdCBzdWJ0cmVlIHdvdWxkIGJlIG1hc2tlZC4KKwkgKi8KKwor CWlmIChpcnEgPj0gc2MtPm5pcnFzKSB7CisJCWRldmljZV9wcmludGYoc2MtPmdpY19kZXYsICJT cHVyaW91cyBpbnRlcnJ1cHQgZGV0ZWN0ZWRcbiIpOworCQlnaWNfY193cml0ZV80KHNjLCBHSUND X0VPSVIsIGlycV9hY3RpdmVfcmVnKTsKKwkJcmV0dXJuIChGSUxURVJfSEFORExFRCk7CisJfQor CitkaXNwYXRjaF9pcnE6CisJaXNyYyA9IHNjLT5naWNfaXJxc1tpcnFdOworCWlmIChpc3JjID09 IE5VTEwpIHsKKwkJZGV2aWNlX3ByaW50ZihzYy0+Z2ljX2RldiwgIlN0cmF5IGludGVycnVwdCAl dSBkZXRlY3RlZFxuIiwgaXJxKTsKKwkJZ2ljX2lycV9tYXNrKHNjLCBpcnEpOworCQlnaWNfY193 cml0ZV80KHNjLCBHSUNDX0VPSVIsIGlycV9hY3RpdmVfcmVnKTsKKwkJZ290byBuZXh0X2lycTsK Kwl9CisKKwkvKgorCSAqIE5vdGUgdGhhdCBHSUNfRklSU1RfU0dJIGlzIHplcm8gYW5kIGlzIG5v dCB1c2VkIGluICdpZicgc3RhdGVtZW50CisJICogYXMgY29tcGlsZXIgY29tcGxhaW5zIHRoYXQg Y29tcGFyaW5nIHVfaW50ID49IDAgaXMgYWx3YXlzIHRydWUuCisJICovCisJaWYgKGlycSA8PSBH SUNfTEFTVF9TR0kpIHsKKyNpZmRlZiBTTVAKKwkJLyogQ2FsbCBFT0kgZm9yIGFsbCBJUEkgYmVm b3JlIGRpc3BhdGNoLiAqLworCQlnaWNfY193cml0ZV80KHNjLCBHSUNDX0VPSVIsIGlycV9hY3Rp dmVfcmVnKTsKKwkJYXJtX2lwaV9kaXNwYXRjaChpc3JjLCB0Zik7CisJCWdvdG8gbmV4dF9pcnE7 CisjZWxzZQorCQlwcmludGYoIlNHSSAldSBvbiBVUCBzeXN0ZW0gZGV0ZWN0ZWRcbiIsIGlycSAt IEdJQ19GSVJTVF9TR0kpOworCQlnaWNfY193cml0ZV80KHNjLCBHSUNDX0VPSVIsIGlycV9hY3Rp dmVfcmVnKTsKKwkJZ290byBuZXh0X2lycTsKKyNlbmRpZgorCX0KKworCWlmIChpc3JjLT5pc3Jj X3RyaWcgPT0gSU5UUl9UUklHR0VSX0xFVkVMKSB7CisJCWNyaXRpY2FsX2VudGVyKCk7CisJCWFy bV9pcnFfZGlzcGF0Y2goaXNyYywgdGYpOworCQlnaWNfY193cml0ZV80KHNjLCBHSUNDX0VPSVIs IGlycV9hY3RpdmVfcmVnKTsKKwkJY3JpdGljYWxfZXhpdCgpOworCX0gZWxzZSB7CisJCWdpY19j X3dyaXRlXzQoc2MsIEdJQ0NfRU9JUiwgaXJxX2FjdGl2ZV9yZWcpOworCQlhcm1faXJxX2Rpc3Bh dGNoKGlzcmMsIHRmKTsKKwl9CisKK25leHRfaXJxOgorCWFybV9pcnFfbWVtb3J5X2JhcnJpZXIo aXJxKTsgLyogWFhYICovCisJaXJxX2FjdGl2ZV9yZWcgPSBnaWNfY19yZWFkXzQoc2MsIEdJQ0Nf SUFSKTsKKwlpcnEgPSBpcnFfYWN0aXZlX3JlZyAmIDB4M0ZGOworCWlmIChpcnEgPCBzYy0+bmly cXMpCisJCWdvdG8gZGlzcGF0Y2hfaXJxOworCisJcmV0dXJuIChGSUxURVJfSEFORExFRCk7Cit9 CisKK3N0YXRpYyBpbnQKK2dpY19hdHRhY2hfaXNyYyhzdHJ1Y3QgYXJtX2dpY19zb2Z0YyAqc2Ms IHN0cnVjdCBhcm1faXJxc3JjICppc3JjLCB1X2ludCBpcnEpCit7CisJY29uc3QgY2hhciAqbmFt ZTsKKworCS8qCisJICogMS4gVGhlIGxpbmsgYmV0d2VlbiBJU1JDIGFuZCBjb250cm9sbGVyIG11 c3QgYmUgc2V0IGF0b21pY2FsbHkuCisJICogMi4gSnVzdCBkbyB0aGluZ3Mgb25seSBvbmNlIGlu IHJhcmUgY2FzZSB3aGVuIGNvbnN1bWVycworCSAqICAgIG9mIHNoYXJlZCBpbnRlcnJ1cHQgY2Ft ZSBoZXJlIGF0IHRoZSBzYW1lIG1vbWVudC4KKwkgKi8KKwltdHhfbG9ja19zcGluKCZzYy0+bXV0 ZXgpOworCWlmIChzYy0+Z2ljX2lycXNbaXJxXSAhPSBOVUxMKSB7CisJCW10eF91bmxvY2tfc3Bp bigmc2MtPm11dGV4KTsKKwkJcmV0dXJuIChzYy0+Z2ljX2lycXNbaXJxXSA9PSBpc3JjID8gMCA6 IEVFWElTVCk7CisJfQorCXNjLT5naWNfaXJxc1tpcnFdID0gaXNyYzsKKwlpc3JjLT5pc3JjX2Rh dGEgPSAodm9pZCAqKWlycTsKKwltdHhfdW5sb2NrX3NwaW4oJnNjLT5tdXRleCk7CisKKwluYW1l ID0gZGV2aWNlX2dldF9uYW1ldW5pdChzYy0+Z2ljX2Rldik7CisJaWYgKGlycSA8PSBHSUNfTEFT VF9TR0kpCisJCWFybV9pcnFfc2V0X25hbWUoaXNyYywgIiVzLGkldSIsIG5hbWUsIGlycSAtIEdJ Q19GSVJTVF9TR0kpOworCWVsc2UgaWYgKGlycSA8PSBHSUNfTEFTVF9QUEkpCisJCWFybV9pcnFf c2V0X25hbWUoaXNyYywgIiVzLHAldSIsIG5hbWUsIGlycSAtIEdJQ19GSVJTVF9QUEkpOworCWVs c2UKKwkJYXJtX2lycV9zZXRfbmFtZShpc3JjLCAiJXMscyV1IiwgbmFtZSwgaXJxIC0gR0lDX0ZJ UlNUX1NQSSk7CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorZ2ljX2RldGFjaF9pc3Jj KHN0cnVjdCBhcm1fZ2ljX3NvZnRjICpzYywgc3RydWN0IGFybV9pcnFzcmMgKmlzcmMsIHVfaW50 IGlycSkKK3sKKworCW10eF9sb2NrX3NwaW4oJnNjLT5tdXRleCk7CisJaWYgKHNjLT5naWNfaXJx c1tpcnFdICE9IGlzcmMpIHsKKwkJbXR4X3VubG9ja19zcGluKCZzYy0+bXV0ZXgpOworCQlyZXR1 cm4gKHNjLT5naWNfaXJxc1tpcnFdID09IE5VTEwgPyAwIDogRUlOVkFMKTsKKwl9CisJc2MtPmdp Y19pcnFzW2lycV0gPSBOVUxMOworCWlzcmMtPmlzcmNfZGF0YSA9IE5VTEw7CisJbXR4X3VubG9j a19zcGluKCZzYy0+bXV0ZXgpOworCisJYXJtX2lycV9zZXRfbmFtZShpc3JjLCAiIik7CisJcmV0 dXJuICgwKTsKK30KKworc3RhdGljIHZvaWQKK2dpY19jb25maWcoc3RydWN0IGFybV9naWNfc29m dGMgKnNjLCB1X2ludCBpcnEsIGVudW0gaW50cl90cmlnZ2VyIHRyaWcsCisgICAgZW51bSBpbnRy X3BvbGFyaXR5IHBvbCkKK3sKKwl1aW50MzJfdCByZWc7CisJdWludDMyX3QgbWFzazsKKworCWlm IChpcnEgPCBHSUNfRklSU1RfU1BJKQorCQlyZXR1cm47CisKKwltdHhfbG9ja19zcGluKCZzYy0+ bXV0ZXgpOworCisJcmVnID0gZ2ljX2RfcmVhZF80KHNjLCBHSUNEX0lDRkdSKGlycSA+PiA0KSk7 CisJbWFzayA9IChyZWcgPj4gMiooaXJxICUgMTYpKSAmIDB4MzsKKworCWlmIChwb2wgPT0gSU5U Ul9QT0xBUklUWV9MT1cpIHsKKwkJbWFzayAmPSB+R0lDRF9JQ0ZHUl9QT0xfTUFTSzsKKwkJbWFz ayB8PSBHSUNEX0lDRkdSX1BPTF9MT1c7CisJfSBlbHNlIGlmIChwb2wgPT0gSU5UUl9QT0xBUklU WV9ISUdIKSB7CisJCW1hc2sgJj0gfkdJQ0RfSUNGR1JfUE9MX01BU0s7CisJCW1hc2sgfD0gR0lD RF9JQ0ZHUl9QT0xfSElHSDsKKwl9CisKKwlpZiAodHJpZyA9PSBJTlRSX1RSSUdHRVJfTEVWRUwp IHsKKwkJbWFzayAmPSB+R0lDRF9JQ0ZHUl9UUklHX01BU0s7CisJCW1hc2sgfD0gR0lDRF9JQ0ZH Ul9UUklHX0xWTDsKKwl9IGVsc2UgaWYgKHRyaWcgPT0gSU5UUl9UUklHR0VSX0VER0UpIHsKKwkJ bWFzayAmPSB+R0lDRF9JQ0ZHUl9UUklHX01BU0s7CisJCW1hc2sgfD0gR0lDRF9JQ0ZHUl9UUklH X0VER0U7CisJfQorCisJLyogU2V0IG1hc2sgKi8KKwlyZWcgPSByZWcgJiB+KDB4MyA8PCAyKihp cnEgJSAxNikpOworCXJlZyA9IHJlZyB8IChtYXNrIDw8IDIqKGlycSAlIDE2KSk7CisJZ2ljX2Rf d3JpdGVfNChzYywgR0lDRF9JQ0ZHUihpcnEgPj4gNCksIHJlZyk7CisKKwltdHhfdW5sb2NrX3Nw aW4oJnNjLT5tdXRleCk7Cit9CisKK3N0YXRpYyBpbnQKK2dpY19iaW5kKHN0cnVjdCBhcm1fZ2lj X3NvZnRjICpzYywgdV9pbnQgaXJxLCBjcHVzZXRfdCAqY3B1cykKK3sKKwl1aW50MzJfdCBjcHUs IGVuZCwgbWFzaywgcmVnOworCisJZW5kID0gbWluKG1wX25jcHVzLCA4KTsKKwlmb3IgKGNwdSA9 IGVuZDsgY3B1IDwgTUFYQ1BVOyBjcHUrKykKKwkJaWYgKENQVV9JU1NFVChjcHUsIGNwdXMpKQor CQkJcmV0dXJuIChFSU5WQUwpOworCisJZm9yIChtYXNrID0gMCwgY3B1ID0gMDsgY3B1IDwgZW5k OyBjcHUrKykKKwkJaWYgKENQVV9JU1NFVChjcHUsIGNwdXMpKQorCQkJbWFzayB8PSAxIDw8IGNw dTsKKworCW10eF9sb2NrX3NwaW4oJnNjLT5tdXRleCk7CisJcmVnID0gZ2ljX2RfcmVhZF80KHNj LCBHSUNEX0lUQVJHRVRTUihpcnEgLyA0KSk7CisJcmVnICY9IH4oMHhGRiA8PCAoOCAqIChpcnEg JSA0KSkpOworCXJlZyB8PSBtYXNrIDw8ICg4ICogKGlycSAlIDQpKTsKKwlnaWNfZF93cml0ZV80 KHNjLCBHSUNEX0lUQVJHRVRTUihpcnEgLyA0KSwgcmVnKTsKKwltdHhfdW5sb2NrX3NwaW4oJnNj LT5tdXRleCk7CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorZ2ljX2lycV9mcm9tX25z cGMoc3RydWN0IGFybV9naWNfc29mdGMgKnNjLCB1X2ludCB0eXBlLCB1X2ludCBudW0sIHVfaW50 ICppcnFwKQoreworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBBUk1fSVJRX05TUENfUExBSU46 CisJCSppcnFwID0gbnVtOworCQlyZXR1cm4gKCppcnFwIDwgc2MtPm5pcnFzID8gMCA6IEVJTlZB TCk7CisKKwljYXNlIEFSTV9JUlFfTlNQQ19JUlE6CisJCSppcnFwID0gbnVtICsgR0lDX0ZJUlNU X1BQSTsKKwkJcmV0dXJuICgqaXJxcCA8IHNjLT5uaXJxcyA/IDAgOiBFSU5WQUwpOworCisJY2Fz ZSBBUk1fSVJRX05TUENfSVBJOgorCQkqaXJxcCA9IG51bSArIEdJQ19GSVJTVF9TR0k7CisJCXJl dHVybiAoKmlycXAgPCBHSUNfTEFTVF9TR0kgPyAwIDogRUlOVkFMKTsKKworCWRlZmF1bHQ6CisJ CXJldHVybiAoRUlOVkFMKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK2dpY19tYXBfbnNwYyhzdHJ1 Y3QgYXJtX2dpY19zb2Z0YyAqc2MsIHN0cnVjdCBhcm1faXJxc3JjICppc3JjLCB1X2ludCAqaXJx cCkKK3sKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IGdpY19pcnFfZnJvbV9uc3BjKHNjLCBpc3Jj LT5pc3JjX25zcGNfdHlwZSwgaXNyYy0+aXNyY19uc3BjX251bSwKKwkgICAgaXJxcCk7CisJaWYg KGVycm9yICE9IDApCisJCXJldHVybiAoZXJyb3IpOworCXJldHVybiAoZ2ljX2F0dGFjaF9pc3Jj KHNjLCBpc3JjLCAqaXJxcCkpOworfQorCisjaWZkZWYgRkRUCitzdGF0aWMgaW50CitnaWNfbWFw X2ZkdChzdHJ1Y3QgYXJtX2dpY19zb2Z0YyAqc2MsIHN0cnVjdCBhcm1faXJxc3JjICppc3JjLCB1 X2ludCAqaXJxcCkKK3sKKwl1X2ludCBpcnEsIHRyaXBvbDsKKwllbnVtIGludHJfdHJpZ2dlciB0 cmlnOworCWVudW0gaW50cl9wb2xhcml0eSBwb2w7CisJaW50IGVycm9yOworCisJaWYgKGlzcmMt PmlzcmNfbmNlbGxzID09IDEpIHsKKwkJaXJxID0gaXNyYy0+aXNyY19jZWxsc1swXTsKKwkJcG9s ID0gSU5UUl9QT0xBUklUWV9DT05GT1JNOworCQl0cmlnID0gSU5UUl9UUklHR0VSX0NPTkZPUk07 CisJfSBlbHNlIGlmIChpc3JjLT5pc3JjX25jZWxscyA9PSAzKSB7CisJCWlmIChpc3JjLT5pc3Jj X2NlbGxzWzBdID09IDApCisJCQlpcnEgPSBpc3JjLT5pc3JjX2NlbGxzWzFdICsgR0lDX0ZJUlNU X1BQSTsKKwkJZWxzZQorCQkJaXJxID0gaXNyYy0+aXNyY19jZWxsc1sxXSArIEdJQ19GSVJTVF9T UEk7CisKKwkJLyoKKwkJICogSW4gaW50clsyXSwgYml0c1szOjBdIGFyZSB0cmlnZ2VyIHR5cGUg YW5kIGxldmVsIGZsYWdzLgorCQkgKiAgIDEgPSBsb3ctdG8taGlnaCBlZGdlIHRyaWdnZXJlZAor CQkgKiAgIDIgPSBoaWdoLXRvLWxvdyBlZGdlIHRyaWdnZXJlZAorCQkgKiAgIDQgPSBhY3RpdmUg aGlnaCBsZXZlbC1zZW5zaXRpdmUKKwkJICogICA4ID0gYWN0aXZlIGxvdyBsZXZlbC1zZW5zaXRp dmUKKwkJICogVGhlIGhhcmR3YXJlIG9ubHkgc3VwcG9ydHMgYWN0aXZlLWhpZ2gtbGV2ZWwgb3Ig cmlzaW5nLWVkZ2UuCisJCSAqLworCQl0cmlwb2wgPSBpc3JjLT5pc3JjX2NlbGxzWzJdOworCQlp ZiAodHJpcG9sICYgMHgwYSkgeworCQkJcHJpbnRmKCJ1bnN1cHBvcnRlZCB0cmlnZ2VyL3BvbGFy aXR5IGNvbmZpZ3VyYXRpb24gIgorCQkJICAgICIweCUyeFxuIiwgdHJpcG9sICYgMHgwZik7CisJ CQlyZXR1cm4gKEVOT1RTVVApOworCQl9CisJCXBvbCA9IElOVFJfUE9MQVJJVFlfQ09ORk9STTsK KwkJaWYgKHRyaXBvbCAmIDB4MDEpCisJCQl0cmlnID0gSU5UUl9UUklHR0VSX0VER0U7CisJCWVs c2UKKwkJCXRyaWcgPSBJTlRSX1RSSUdHRVJfTEVWRUw7CisJfSBlbHNlCisJCXJldHVybiAoRUlO VkFMKTsKKworCWlmIChpcnEgPj0gc2MtPm5pcnFzKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwll cnJvciA9IGdpY19hdHRhY2hfaXNyYyhzYywgaXNyYywgaXJxKTsKKwlpZiAoZXJyb3IgIT0gMCkK KwkJcmV0dXJuIChlcnJvcik7CisKKwlpc3JjLT5pc3JjX25zcGNfdHlwZSA9IEFSTV9JUlFfTlNQ Q19QTEFJTjsKKwlpc3JjLT5pc3JjX25zcGNfbnVtID0gaXJxOworCWlzcmMtPmlzcmNfdHJpZyA9 IHRyaWc7CisJaXNyYy0+aXNyY19wb2wgPSBwb2w7CisKKwkqaXJxcCA9IGlycTsKKwlyZXR1cm4g KDApOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQKK2FybV9naWNfcmVnaXN0ZXIoZGV2aWNlX3Qg ZGV2LCBzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYywgYm9vbGVhbl90ICppc19wZXJjcHUpCit7CisJ c3RydWN0IGFybV9naWNfc29mdGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCXVfaW50 IGlycTsKKwlpbnQgZXJyb3I7CisKKwlpZiAoaXNyYy0+aXNyY190eXBlID09IEFSTV9JU1JDVF9O QU1FU1BBQ0UpCisJCWVycm9yID0gZ2ljX21hcF9uc3BjKHNjLCBpc3JjLCAmaXJxKTsKKyNpZmRl ZiBGRFQKKwllbHNlIGlmIChpc3JjLT5pc3JjX3R5cGUgPT0gQVJNX0lTUkNUX0ZEVCkKKwkJZXJy b3IgPSBnaWNfbWFwX2ZkdChzYywgaXNyYywgJmlycSk7CisjZW5kaWYKKwllbHNlCisJCXJldHVy biAoRUlOVkFMKTsKKworCWlmIChlcnJvciA9PSAwKQorCQkqaXNfcGVyY3B1ID0gaXJxIDwgR0lD X0ZJUlNUX1NQSSA/IFRSVUUgOiBGQUxTRTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworc3RhdGlj IHZvaWQKK2FybV9naWNfZW5hYmxlX2ludHIoZGV2aWNlX3QgZGV2LCBzdHJ1Y3QgYXJtX2lycXNy YyAqaXNyYykKK3sKKwlzdHJ1Y3QgYXJtX2dpY19zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRj KGRldik7CisJdV9pbnQgaXJxID0gKHVfaW50KWlzcmMtPmlzcmNfZGF0YTsKKworCWlmIChpc3Jj LT5pc3JjX3RyaWcgPT0gSU5UUl9UUklHR0VSX0NPTkZPUk0pCisJCWlzcmMtPmlzcmNfdHJpZyA9 IElOVFJfVFJJR0dFUl9MRVZFTDsKKworCWdpY19jb25maWcoc2MsIGlycSwgaXNyYy0+aXNyY190 cmlnLCBpc3JjLT5pc3JjX3BvbCk7CisKKwlpZiAoQ1BVX0VNUFRZKCZpc3JjLT5pc3JjX2NwdSkp IHsKKwkJZ2ljX2lycV9jcHUgPSBhcm1faXJxX25leHRfY3B1KGdpY19pcnFfY3B1LCAmYWxsX2Nw dXMpOworCQlDUFVfU0VUT0YoZ2ljX2lycV9jcHUsICZpc3JjLT5pc3JjX2NwdSk7CisJfQorCWlm IChnaWNfYmluZChzYywgaXJxLCAmaXNyYy0+aXNyY19jcHUpICE9IDApCisJCUNQVV9aRVJPKCZp c3JjLT5pc3JjX2NwdSk7Cit9CisKK3N0YXRpYyB2b2lkCithcm1fZ2ljX2VuYWJsZV9zb3VyY2Uo ZGV2aWNlX3QgZGV2LCBzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYykKK3sKKwlzdHJ1Y3QgYXJtX2dp Y19zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJdV9pbnQgaXJxID0gKHVfaW50 KWlzcmMtPmlzcmNfZGF0YTsKKworCWlmIChpcnEgPD0gR0lDX0xBU1RfU0dJKQorCQlyZXR1cm47 IC8qIHYyIElNUExFTUVOVEFUSU9OIERFRklORUQgKi8KKworCWFybV9pcnFfbWVtb3J5X2JhcnJp ZXIoaXJxKTsKKwlnaWNfaXJxX3VubWFzayhzYywgaXJxKTsKK30KKworc3RhdGljIHZvaWQKK2Fy bV9naWNfZGlzYWJsZV9zb3VyY2UoZGV2aWNlX3QgZGV2LCBzdHJ1Y3QgYXJtX2lycXNyYyAqaXNy YykKK3sKKwlzdHJ1Y3QgYXJtX2dpY19zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7 CisJdV9pbnQgaXJxID0gKHVfaW50KWlzcmMtPmlzcmNfZGF0YTsKKworCWlmIChpcnEgPD0gR0lD X0xBU1RfU0dJKQorCQlyZXR1cm47IC8qIHYyIElNUExFTUVOVEFUSU9OIERFRklORUQgKi8KKwor CWdpY19pcnFfbWFzayhzYywgaXJxKTsKK30KKworc3RhdGljIHZvaWQKK2FybV9naWNfZGlzYWJs ZV9pbnRyKGRldmljZV90IGRldiwgc3RydWN0IGFybV9pcnFzcmMgKmlzcmMpCit7Cit9CisKK3N0 YXRpYyBpbnQKK2FybV9naWNfdW5yZWdpc3RlcihkZXZpY2VfdCBkZXYsIHN0cnVjdCBhcm1faXJx c3JjICppc3JjKQoreworCXN0cnVjdCBhcm1fZ2ljX3NvZnRjICpzYyA9IGRldmljZV9nZXRfc29m dGMoZGV2KTsKKwl1X2ludCBpcnEgPSAodV9pbnQpaXNyYy0+aXNyY19kYXRhOworCisJcmV0dXJu IChnaWNfZGV0YWNoX2lzcmMoc2MsIGlzcmMsIGlycSkpOworfQorCitzdGF0aWMgdm9pZAorYXJt X2dpY19wcmVfaXRocmVhZChkZXZpY2VfdCBkZXYsIHN0cnVjdCBhcm1faXJxc3JjICppc3JjKQor eworCisJYXJtX2dpY19kaXNhYmxlX3NvdXJjZShkZXYsIGlzcmMpOworfQorCitzdGF0aWMgdm9p ZAorYXJtX2dpY19wb3N0X2l0aHJlYWQoZGV2aWNlX3QgZGV2LCBzdHJ1Y3QgYXJtX2lycXNyYyAq aXNyYykKK3sKKworCWFybV9naWNfZW5hYmxlX3NvdXJjZShkZXYsIGlzcmMpOworfQorCitzdGF0 aWMgdm9pZAorYXJtX2dpY19wb3N0X2ZpbHRlcihkZXZpY2VfdCBkZXYsIHN0cnVjdCBhcm1faXJx c3JjICppc3JjKQoreworCisJLyogRU9JIG11c3QgYmUgZG9uZSBpbiBjb250cm9sbGVyJ3MgaW50 ZXJydXB0IHJvdXRpbmUuICovCit9CisKKyNpZmRlZiBTTVAKK3N0YXRpYyBpbnQKK2FybV9naWNf YmluZChkZXZpY2VfdCBkZXYsIHN0cnVjdCBhcm1faXJxc3JjICppc3JjKQoreworCXN0cnVjdCBh cm1fZ2ljX3NvZnRjICpzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKwl1aW50MzJfdCBpcnEg PSAodV9pbnQpaXNyYy0+aXNyY19kYXRhOworCisJaWYgKGlycSA8IEdJQ19GSVJTVF9TUEkpCisJ CXJldHVybiAoRUlOVkFMKTsKKworCWlmIChDUFVfRU1QVFkoJmlzcmMtPmlzcmNfY3B1KSkgewor CQlnaWNfaXJxX2NwdSA9IGFybV9pcnFfbmV4dF9jcHUoZ2ljX2lycV9jcHUsICZhbGxfY3B1cyk7 CisJCUNQVV9TRVRPRihnaWNfaXJxX2NwdSwgJmlzcmMtPmlzcmNfY3B1KTsKKwl9CisJcmV0dXJu IChnaWNfYmluZChzYywgaXJxLCAmaXNyYy0+aXNyY19jcHUpKTsKK30KKworc3RhdGljIHZvaWQK K2FybV9naWNfaXBpX3NlbmQoZGV2aWNlX3QgZGV2LCBzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYywg Y3B1c2V0X3QgY3B1cykKK3sKKwlzdHJ1Y3QgYXJtX2dpY19zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0 X3NvZnRjKGRldik7CisJdWludDMyX3QgaXJxLCB2YWwgPSAwLCBpOworCisJaXJxID0gKHVfaW50 KWlzcmMtPmlzcmNfZGF0YTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhDUFU7IGkrKykKKwkJaWYg KENQVV9JU1NFVChpLCAmY3B1cykpCisJCQl2YWwgfD0gMSA8PCAoMTYgKyBpKTsKKworCWdpY19k X3dyaXRlXzQoc2MsIEdJQ0RfU0dJUigwKSwgdmFsIHwgaXJxKTsKK30KKyNlbmRpZgorI2Vsc2UK K3N0YXRpYyBpbnQKIGFybV9naWNfbmV4dF9pcnEoc3RydWN0IGFybV9naWNfc29mdGMgKnNjLCBp bnQgbGFzdF9pcnEpCiB7CiAJdWludDMyX3QgYWN0aXZlX2lycTsKQEAgLTMyMyw3ICs4NzIsNyBA QAogCSAqIGJpdHMgKGllIENQVSBudW1iZXIpLCBub3QganVzdCB0aGUgSVJRIG51bWJlciwgYW5k IHdlIGRvIG5vdAogCSAqIGhhdmUgdGhpcyBpbmZvcm1hdGlvbiBsYXRlci4KIAkgKi8KLQlpZiAo KGFjdGl2ZV9pcnEgJiAweDNmZikgPD0gR0lDX0xBU1RfSVBJKQorCWlmICgoYWN0aXZlX2lycSAm IDB4M2ZmKSA8PSBHSUNfTEFTVF9TR0kpCiAJCWdpY19jX3dyaXRlXzQoc2MsIEdJQ0NfRU9JUiwg YWN0aXZlX2lycSk7CiAJYWN0aXZlX2lycSAmPSAweDNGRjsKIApAQCAtMzk2LDcgKzk0NSw3IEBA CiAJc3RydWN0IGFybV9naWNfc29mdGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwogCiAJ Z2ljX2Rfd3JpdGVfNChzYywgR0lDRF9JQ0VOQUJMRVIoaXJxID4+IDUpLCAoMVVMIDw8IChpcnEg JiAweDFGKSkpOwotCWdpY19jX3dyaXRlXzQoc2MsIEdJQ0NfRU9JUiwgaXJxKTsKKwlnaWNfY193 cml0ZV80KHNjLCBHSUNDX0VPSVIsIGlycSk7IC8qIFhYWCAtIG5vdCBhbGxvd2VkICovCiB9CiAK IHN0YXRpYyB2b2lkCkBAIC00MDQsNyArOTUzLDcgQEAKIHsKIAlzdHJ1Y3QgYXJtX2dpY19zb2Z0 YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CiAKLQlpZiAoaXJxID4gR0lDX0xBU1RfSVBJ KQorCWlmIChpcnEgPiBHSUNfTEFTVF9TR0kpCiAJCWFybV9pcnFfbWVtb3J5X2JhcnJpZXIoaXJx KTsKIAogCWdpY19kX3dyaXRlXzQoc2MsIEdJQ0RfSVNFTkFCTEVSKGlycSA+PiA1KSwgKDFVTCA8 PCAoaXJxICYgMHgxRikpKTsKQEAgLTQ1MSwxMCArMTAwMCwxMCBAQAogc3RhdGljIHZvaWQKIGdp Y19wb3N0X2ZpbHRlcih2b2lkICphcmcpCiB7Ci0Jc3RydWN0IGFybV9naWNfc29mdGMgKnNjID0g YXJtX2dpY19zYzsKKwlzdHJ1Y3QgYXJtX2dpY19zb2Z0YyAqc2MgPSBnaWNfc2M7CiAJdWludHB0 cl90IGlycSA9ICh1aW50cHRyX3QpIGFyZzsKIAotCWlmIChpcnEgPiBHSUNfTEFTVF9JUEkpCisJ aWYgKGlycSA+IEdJQ19MQVNUX1NHSSkKIAkJYXJtX2lycV9tZW1vcnlfYmFycmllcihpcnEpOwog CWdpY19jX3dyaXRlXzQoc2MsIEdJQ0NfRU9JUiwgaXJxKTsKIH0KQEAgLTQ2Myw3ICsxMDEyLDcg QEAKIGdpY19jb25maWdfaXJxKGludCBpcnEsIGVudW0gaW50cl90cmlnZ2VyIHRyaWcsIGVudW0g aW50cl9wb2xhcml0eSBwb2wpCiB7CiAKLQlyZXR1cm4gKGFybV9naWNfY29uZmlnKGFybV9naWNf c2MtPmdpY19kZXYsIGlycSwgdHJpZywgcG9sKSk7CisJcmV0dXJuIChhcm1fZ2ljX2NvbmZpZyhn aWNfc2MtPmdpY19kZXYsIGlycSwgdHJpZywgcG9sKSk7CiB9CiAKIHZvaWQKQEAgLTQ3MCw3ICsx MDE5LDcgQEAKIGFybV9tYXNrX2lycSh1aW50cHRyX3QgbmIpCiB7CiAKLQlhcm1fZ2ljX21hc2so YXJtX2dpY19zYy0+Z2ljX2RldiwgbmIpOworCWFybV9naWNfbWFzayhnaWNfc2MtPmdpY19kZXYs IG5iKTsKIH0KIAogdm9pZApAQCAtNDc3LDcgKzEwMjYsNyBAQAogYXJtX3VubWFza19pcnEodWlu dHB0cl90IG5iKQogewogCi0JYXJtX2dpY191bm1hc2soYXJtX2dpY19zYy0+Z2ljX2RldiwgbmIp OworCWFybV9naWNfdW5tYXNrKGdpY19zYy0+Z2ljX2RldiwgbmIpOwogfQogCiBpbnQKQEAgLTQ4 NCw3ICsxMDMzLDcgQEAKIGFybV9nZXRfbmV4dF9pcnEoaW50IGxhc3RfaXJxKQogewogCi0JcmV0 dXJuIChhcm1fZ2ljX25leHRfaXJxKGFybV9naWNfc2MsIGxhc3RfaXJxKSk7CisJcmV0dXJuIChh cm1fZ2ljX25leHRfaXJxKGdpY19zYywgbGFzdF9pcnEpKTsKIH0KIAogdm9pZApAQCAtNDkxLDcg KzEwNDAsNyBAQAogYXJtX2luaXRfc2Vjb25kYXJ5X2ljKHZvaWQpCiB7CiAKLQlhcm1fZ2ljX2lu aXRfc2Vjb25kYXJ5KGFybV9naWNfc2MtPmdpY19kZXYpOworCWFybV9naWNfaW5pdF9zZWNvbmRh cnkoZ2ljX3NjLT5naWNfZGV2KTsKIH0KIAogI2lmZGVmIFNNUApAQCAtNDk5LDcgKzEwNDgsNyBA QAogcGljX2lwaV9zZW5kKGNwdXNldF90IGNwdXMsIHVfaW50IGlwaSkKIHsKIAotCWFybV9naWNf aXBpX3NlbmQoYXJtX2dpY19zYy0+Z2ljX2RldiwgY3B1cywgaXBpKTsKKwlhcm1fZ2ljX2lwaV9z ZW5kKGdpY19zYy0+Z2ljX2RldiwgY3B1cywgaXBpKTsKIH0KIAogaW50CkBAIC01MDYsNyArMTA1 NSw3IEBACiBwaWNfaXBpX3JlYWQoaW50IGkpCiB7CiAKLQlyZXR1cm4gKGFybV9naWNfaXBpX3Jl YWQoYXJtX2dpY19zYy0+Z2ljX2RldiwgaSkpOworCXJldHVybiAoYXJtX2dpY19pcGlfcmVhZChn aWNfc2MtPmdpY19kZXYsIGkpKTsKIH0KIAogdm9pZApAQCAtNTEzLDE0ICsxMDYyLDMyIEBACiBw aWNfaXBpX2NsZWFyKGludCBpcGkpCiB7CiAKLQlhcm1fZ2ljX2lwaV9jbGVhcihhcm1fZ2ljX3Nj LT5naWNfZGV2LCBpcGkpOworCWFybV9naWNfaXBpX2NsZWFyKGdpY19zYy0+Z2ljX2RldiwgaXBp KTsKIH0KICNlbmRpZgorI2VuZGlmIC8qIEFSTV9JTlRSTkcgKi8KIAogc3RhdGljIGRldmljZV9t ZXRob2RfdCBhcm1fZ2ljX21ldGhvZHNbXSA9IHsKIAkvKiBEZXZpY2UgaW50ZXJmYWNlICovCiAJ REVWTUVUSE9EKGRldmljZV9wcm9iZSwJCWFybV9naWNfcHJvYmUpLAogCURFVk1FVEhPRChkZXZp Y2VfYXR0YWNoLAlhcm1fZ2ljX2F0dGFjaCksCisjaWZkZWYgQVJNX0lOVFJORworCS8qIEludGVy cnVwdCBjb250cm9sbGVyIGludGVyZmFjZSAqLworCURFVk1FVEhPRChwaWNfZGlzYWJsZV9pbnRy LAlhcm1fZ2ljX2Rpc2FibGVfaW50ciksCisJREVWTUVUSE9EKHBpY19kaXNhYmxlX3NvdXJjZSwJ YXJtX2dpY19kaXNhYmxlX3NvdXJjZSksCisJREVWTUVUSE9EKHBpY19lbmFibGVfaW50ciwJYXJt X2dpY19lbmFibGVfaW50ciksCisJREVWTUVUSE9EKHBpY19lbmFibGVfc291cmNlLAlhcm1fZ2lj X2VuYWJsZV9zb3VyY2UpLAorCURFVk1FVEhPRChwaWNfcG9zdF9maWx0ZXIsCWFybV9naWNfcG9z dF9maWx0ZXIpLAorCURFVk1FVEhPRChwaWNfcG9zdF9pdGhyZWFkLAlhcm1fZ2ljX3Bvc3RfaXRo cmVhZCksCisJREVWTUVUSE9EKHBpY19wcmVfaXRocmVhZCwJYXJtX2dpY19wcmVfaXRocmVhZCks CisJREVWTUVUSE9EKHBpY19yZWdpc3RlciwJCWFybV9naWNfcmVnaXN0ZXIpLAorCURFVk1FVEhP RChwaWNfdW5yZWdpc3RlciwJYXJtX2dpY191bnJlZ2lzdGVyKSwKKyNpZmRlZiBTTVAKKwlERVZN RVRIT0QocGljX2JpbmQsCQlhcm1fZ2ljX2JpbmQpLAorCURFVk1FVEhPRChwaWNfaW5pdF9zZWNv bmRhcnksCWFybV9naWNfaW5pdF9zZWNvbmRhcnkpLAorCURFVk1FVEhPRChwaWNfaXBpX3NlbmQs CQlhcm1fZ2ljX2lwaV9zZW5kKSwKKyNlbmRpZgorI2VuZGlmCiAJeyAwLCAwIH0KIH07CiAKSW5k ZXg6IHN5cy9hcm0vY29uZi9QQU5EQUJPQVJECj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9hcm0vY29uZi9Q QU5EQUJPQVJECShyZXZpc2lvbiAyNzk2ODUpCisrKyBzeXMvYXJtL2NvbmYvUEFOREFCT0FSRAko d29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsOCBAQAogbWFrZW9wdGlvbnMJTU9EVUxFU19PVkVS UklERT0iIgogbWFrZW9wdGlvbnMJV0lUSE9VVF9NT0RVTEVTPSJhaGMiCiAKK29wdGlvbnMJCUFS TV9JTlRSTkcJCSMgbmV3IGludGVycnVwdCBmcmFtZXdvcmsKKwogb3B0aW9ucyAJSFo9MTAwCiBv cHRpb25zIAlTQ0hFRF9VTEUJCSMgVUxFIHNjaGVkdWxlcgogb3B0aW9ucyAJUFJFRU1QVElPTgkJ IyBFbmFibGUga2VybmVsIHRocmVhZCBwcmVlbXB0aW9uCkluZGV4OiBzeXMvYXJtL3RpL29tYXA0 L29tYXA0X21wLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2FybS90aS9vbWFwNC9vbWFwNF9tcC5jCShy ZXZpc2lvbiAyNzk2ODUpCisrKyBzeXMvYXJtL3RpL29tYXA0L29tYXA0X21wLmMJKHdvcmtpbmcg Y29weSkKQEAgLTQxLDcgKzQxLDggQEAKIHZvaWQKIHBsYXRmb3JtX21wX2luaXRfc2Vjb25kYXJ5 KHZvaWQpCiB7Ci0JYXJtX2luaXRfc2Vjb25kYXJ5X2ljKCk7CisKKwlhcm1fcGljX2luaXRfc2Vj b25kYXJ5KCk7CiB9CiAKIHZvaWQKSW5kZXg6IHN5cy9hcm0vdGkvb21hcDQvc3RkLm9tYXA0Cj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tIHN5cy9hcm0vdGkvb21hcDQvc3RkLm9tYXA0CShyZXZpc2lvbiAyNzk2ODUp CisrKyBzeXMvYXJtL3RpL29tYXA0L3N0ZC5vbWFwNAkod29ya2luZyBjb3B5KQpAQCAtMTcsNyAr MTcsMyBAQAogb3B0aW9ucwkJU09DX09NQVA0CiAKIG9wdGlvbnMJCUFSTV9MMl9QSVBUCi0KLW9w dGlvbnMJCUlQSV9JUlFfU1RBUlQ9MAotb3B0aW9ucwkJSVBJX0lSUV9FTkQ9MTUKLQo= --20cf30223fb18e26520510a22522 Content-Type: text/plain; charset=US-ASCII; name="intrng_aintc_01.diff" Content-Disposition: attachment; filename="intrng_aintc_01.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_i6xu3yn25 SW5kZXg6IHN5cy9hcm0vY29uZi9CRUFHTEVCT05FCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9hcm0vY29u Zi9CRUFHTEVCT05FCShyZXZpc2lvbiAyNzk2ODUpCisrKyBzeXMvYXJtL2NvbmYvQkVBR0xFQk9O RQkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsOCBAQAogbWFrZW9wdGlvbnMgICAgICAgICBX SVRIX0NURj0xCiBtYWtlb3B0aW9ucyAgICAgTU9EVUxFU19PVkVSUklERT0ib3BlbnNvbGFyaXMg ZHRyYWNlIGR0cmFjZS9sb2Nrc3RhdCBkdHJhY2UvcHJvZmlsZSBkdHJhY2UvZmJ0IgoKK29wdGlv bnMJCUFSTV9JTlRSTkcKKwogb3B0aW9ucyAJSFo9MTAwCiBvcHRpb25zIAlTQ0hFRF80QlNECQkj IDRCU0Qgc2NoZWR1bGVyCiBvcHRpb25zIAlQUkVFTVBUSU9OCQkjIEVuYWJsZSBrZXJuZWwgdGhy ZWFkIHByZWVtcHRpb24KSW5kZXg6IHN5cy9hcm0vdGkvYWludGMuYwo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBz eXMvYXJtL3RpL2FpbnRjLmMJKHJldmlzaW9uIDI3OTY4NSkKKysrIHN5cy9hcm0vdGkvYWludGMu Ywkod29ya2luZyBjb3B5KQpAQCAtMjYsMTAgKzI2LDExIEBACiAgKiBTVUNIIERBTUFHRS4KICAq LwoKLQogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgogX19GQlNESUQoIiRGcmVlQlNEJCIpOwoKKyNp bmNsdWRlICJvcHRfcGxhdGZvcm0uaCIKKwogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgogI2luY2x1 ZGUgPHN5cy9zeXN0bS5oPgogI2luY2x1ZGUgPHN5cy9idXMuaD4KQEAgLTQ1LDYgKzQ2LDEwIEBA CiAjaW5jbHVkZSA8ZGV2L29mdy9vZndfYnVzLmg+CiAjaW5jbHVkZSA8ZGV2L29mdy9vZndfYnVz X3N1YnIuaD4KCisjaWZkZWYgQVJNX0lOVFJORworI2luY2x1ZGUgInBpY19pZi5oIgorI2VuZGlm CisKICNkZWZpbmUgSU5UQ19SRVZJU0lPTgkJMHgwMAogI2RlZmluZSBJTlRDX1NZU0NPTkZJRwkJ MHgxMAogI2RlZmluZSBJTlRDX1NZU1NUQVRVUwkJMHgxNApAQCAtNTYsOCArNjEsMTcgQEAKICNk ZWZpbmUgSU5UQ19JU1JfU0VUKHgpCQkoMHg5MCArICgoeCkgKiAweDIwKSkKICNkZWZpbmUgSU5U Q19JU1JfQ0xFQVIoeCkJKDB4OTQgKyAoKHgpICogMHgyMCkpCgorI2lmZGVmIEFSTV9JTlRSTkcK K3N0YXRpYyBpbnQgdGlfYWludGNfaW50cih2b2lkICosIHN0cnVjdCB0cmFwZnJhbWUgKik7Cisj ZW5kaWYKKwogc3RydWN0IHRpX2FpbnRjX3NvZnRjIHsKLQlkZXZpY2VfdAkJc2NfZGV2OworCWRl dmljZV90CQlhaW50Y19kZXY7CisjaWZkZWYgQVJNX0lOVFJORworCXN0cnVjdCBhcm1faXJxc3Jj ICoqCWFpbnRjX2lycXM7CisJdWludDMyX3QJCWFpbnRjX25pcnFzOworCXZvaWQgKgkJCWFpbnRj X2ludHJoYW5kOworI2VuZGlmCiAJc3RydWN0IHJlc291cmNlICoJYWludGNfcmVzWzNdOwogCWJ1 c19zcGFjZV90YWdfdAkJYWludGNfYnN0OwogCWJ1c19zcGFjZV9oYW5kbGVfdAlhaW50Y19ic2g7 CkBAIC02NiwxMCArODAsMTIgQEAKCiBzdGF0aWMgc3RydWN0IHJlc291cmNlX3NwZWMgdGlfYWlu dGNfc3BlY1tdID0gewogCXsgU1lTX1JFU19NRU1PUlksCTAsCVJGX0FDVElWRSB9LAorI2lmZGVm IEFSTV9JTlRSTkcKKwl7IFNZU19SRVNfSVJRLAkgIDAsIFJGX0FDVElWRSB8IFJGX09QVElPTkFM IH0sIC8qIFBhcmVudCBpbnRlcnJ1cHQgKi8KKyNlbmRpZgogCXsgLTEsIDAgfQogfTsKCi0KIHN0 YXRpYyBzdHJ1Y3QgdGlfYWludGNfc29mdGMgKnRpX2FpbnRjX3NjID0gTlVMTDsKCiAjZGVmaW5l CWFpbnRjX3JlYWRfNChfc2MsIHJlZykJCVwKQEAgLTc3LDggKzkzLDIxNyBAQAogI2RlZmluZQlh aW50Y193cml0ZV80KF9zYywgcmVnLCB2YWwpCQlcCiAgICAgYnVzX3NwYWNlX3dyaXRlXzQoKF9z YyktPmFpbnRjX2JzdCwgKF9zYyktPmFpbnRjX2JzaCwgKHJlZyksICh2YWwpKQoKKyNpZmRlZiBB Uk1fSU5UUk5HCitzdGF0aWMgaW5saW5lIHZvaWQKK3RpX2FpbnRjX2lycV9lb2koc3RydWN0IHRp X2FpbnRjX3NvZnRjICpzYykKK3sKCisJYWludGNfd3JpdGVfNChzYywgSU5UQ19DT05UUk9MLCAx KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit0aV9haW50Y19pcnFfbWFzayhzdHJ1Y3QgdGlf YWludGNfc29mdGMgKnNjLCB1X2ludCBpcnEpCit7CisKKwlhaW50Y193cml0ZV80KHNjLCBJTlRD X01JUl9TRVQoaXJxID4+IDUpLCAoMVVMIDw8IChpcnEgJiAweDFGKSkpOworfQorCitzdGF0aWMg aW5saW5lIHZvaWQKK3RpX2FpbnRjX2lycV91bm1hc2soc3RydWN0IHRpX2FpbnRjX3NvZnRjICpz YywgdV9pbnQgaXJxKQoreworCisJYWludGNfd3JpdGVfNChzYywgSU5UQ19NSVJfQ0xFQVIoaXJx ID4+IDUpLCAoMVVMIDw8IChpcnEgJiAweDFGKSkpOworfQorCiBzdGF0aWMgaW50Cit0aV9haW50 Y19pbnRyKHZvaWQgKmFyZywgc3RydWN0IHRyYXBmcmFtZSAqdGYpCit7CisJc3RydWN0IHRpX2Fp bnRjX3NvZnRjICpzYyA9IGFyZzsKKwlzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYzsKKwl1aW50MzJf dCBhY3RpdmVfaXJxLCBsYXN0X2lycTsKKworCS8qIEdldCBhY3RpdmUgaW50ZXJydXB0ICovCisJ YWN0aXZlX2lycSA9IGFpbnRjX3JlYWRfNChzYywgSU5UQ19TSVJfSVJRKTsKKworCS8qIENoZWNr IGZvciBzcHVyaW91cyBpbnRlcnJ1cHQgKi8KKwlpZiAoKGFjdGl2ZV9pcnEgJiAweGZmZmZmZjgw KSkgeworCQlkZXZpY2VfcHJpbnRmKHNjLT5haW50Y19kZXYsCisJCSAgICAiU3B1cmlvdXMgaW50 ZXJydXB0IGRldGVjdGVkICgweCUwOHgpXG4iLCBhY3RpdmVfaXJxKTsKKwkJYWludGNfd3JpdGVf NChzYywgSU5UQ19TSVJfSVJRLCAwKTsgLyogUVFRICovCisJCXJldHVybiAoRklMVEVSX0hBTkRM RUQpOworCX0KKworZGlzcGF0Y2hfaXJxOgorCS8qIENoZWNrIGZvciByZWdpc3RlcmVkIHNvdXJj ZSAqLworCWlzcmMgPSBzYy0+YWludGNfaXJxc1thY3RpdmVfaXJxXTsKKwlpZiAoaXNyYyA9PSBO VUxMKSB7CisJCWRldmljZV9wcmludGYoc2MtPmFpbnRjX2RldiwgIlN0cmF5IGludGVycnVwdCAl dSBkZXRlY3RlZFxuIiwKKwkJICAgIGFjdGl2ZV9pcnEpOworCQl0aV9haW50Y19pcnFfbWFzayhz YywgYWN0aXZlX2lycSk7CisJCXRpX2FpbnRjX2lycV9lb2koc2MpOworCQlnb3RvIG5leHRfaXJx OworCX0KKworCS8qIE9ubHkgbGV2ZWwtc2Vuc2l0aXZlIGludGVycnVwdHMgZGV0ZWN0aW9uIGlz IHN1cHBvcnRlZC4gKi8KKwlhcm1faXJxX2Rpc3BhdGNoKGlzcmMsIHRmKTsKKworbmV4dF9pcnE6 CisJYXJtX2lycV9tZW1vcnlfYmFycmllcihhY3RpdmVfaXJxKTsgLyogWFhYICovCisJbGFzdF9p cnEgPSBhY3RpdmVfaXJxOworCWFjdGl2ZV9pcnEgPSBhaW50Y19yZWFkXzQoc2MsIElOVENfU0lS X0lSUSk7CisJaWYgKCgoYWN0aXZlX2lycSAmIDB4ZmZmZmZmODApID09IDApICYmIChsYXN0X2ly cSAhPSBhY3RpdmVfaXJxKSkKKwkJZ290byBkaXNwYXRjaF9pcnE7CisKKwlyZXR1cm4gKEZJTFRF Ul9IQU5ETEVEKTsKK30KKworc3RhdGljIGludAordGlfYWludGNfYXR0YWNoX2lzcmMoc3RydWN0 IHRpX2FpbnRjX3NvZnRjICpzYywgc3RydWN0IGFybV9pcnFzcmMgKmlzcmMsCisgICAgdV9pbnQg aXJxKQoreworCWNvbnN0IGNoYXIgKm5hbWU7CisKKwkvKgorCSAqIDEuIFRoZSBsaW5rIGJldHdl ZW4gSVNSQyBhbmQgY29udHJvbGxlciBtdXN0IGJlIHNldCBhdG9taWNhbGx5LgorCSAqIDIuIEp1 c3QgZG8gdGhpbmdzIG9ubHkgb25jZSBpbiByYXJlIGNhc2Ugd2hlbiBjb25zdW1lcnMKKwkgKiAg ICBvZiBzaGFyZWQgaW50ZXJydXB0IGNhbWUgaGVyZSBhdCB0aGUgc2FtZSBtb21lbnQuCisJICov CisJaWYgKCFhdG9taWNfY21wc2V0X2FjcV9wdHIoKHZvaWQgKikmc2MtPmFpbnRjX2lycXNbaXJx XSwgMCwKKwkgICAgKGludHB0cl90KWlzcmMpKQorCQlyZXR1cm4gKHNjLT5haW50Y19pcnFzW2ly cV0gPT0gaXNyYyA/IDAgOiBFRVhJU1QpOworCWlzcmMtPmlzcmNfZGF0YSA9ICh2b2lkICopaXJx OworCisJbmFtZSA9IGRldmljZV9nZXRfbmFtZXVuaXQoc2MtPmFpbnRjX2Rldik7CisJYXJtX2ly cV9zZXRfbmFtZShpc3JjLCAiJXMscyV1IiwgbmFtZSwgaXJxKTsKKwlyZXR1cm4gKDApOworfQor CitzdGF0aWMgaW50Cit0aV9haW50Y19kZXRhY2hfaXNyYyhzdHJ1Y3QgdGlfYWludGNfc29mdGMg KnNjLCBzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYywKKyAgICB1X2ludCBpcnEpCit7CisKKwlpZiAo IWF0b21pY19jbXBzZXRfYWNxX3B0cigodm9pZCAqKSZzYy0+YWludGNfaXJxc1tpcnFdLAorCSAg ICAoaW50cHRyX3QpaXNyYywgMCkpCisJCXJldHVybiAoRUlOVkFMKTsKKwlpc3JjLT5pc3JjX2Rh dGEgPSBOVUxMOworCisJYXJtX2lycV9zZXRfbmFtZShpc3JjLCAiIik7CisJcmV0dXJuICgwKTsK K30KKworc3RhdGljIGludAordGlfYWludGNfbWFwX25zcGMoc3RydWN0IHRpX2FpbnRjX3NvZnRj ICpzYywgc3RydWN0IGFybV9pcnFzcmMgKmlzcmMpCit7CisJdV9pbnQgaXJxOworCisJaWYgKGlz cmMtPmlzcmNfbnNwY190eXBlICE9IEFSTV9JUlFfTlNQQ19QTEFJTiAmJgorCSAgICBpc3JjLT5p c3JjX25zcGNfdHlwZSAhPSBBUk1fSVJRX05TUENfSVJRKQorCQlyZXR1cm4gKEVJTlZBTCk7CisK KwlpcnEgPSBpc3JjLT5pc3JjX25zcGNfbnVtOworCWlmIChpcnEgPj0gc2MtPmFpbnRjX25pcnFz KQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwlyZXR1cm4gKHRpX2FpbnRjX2F0dGFjaF9pc3JjKHNj LCBpc3JjLCBpcnEpKTsKK30KKworI2lmZGVmIEZEVAorc3RhdGljIGludAordGlfYWludGNfbWFw X2ZkdChzdHJ1Y3QgdGlfYWludGNfc29mdGMgKnNjLCBzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYykK K3sKKwl1X2ludCBpcnE7CisJaW50IGVycm9yOworCisJaWYgKGlzcmMtPmlzcmNfbmNlbGxzICE9 IDEpCisJCXJldHVybiAoRUlOVkFMKTsKKworCWlycSA9IGlzcmMtPmlzcmNfY2VsbHNbMF07CisJ aWYgKGlycSA+PSBzYy0+YWludGNfbmlycXMpCisJCXJldHVybiAoRUlOVkFMKTsKKworCWVycm9y ID0gdGlfYWludGNfYXR0YWNoX2lzcmMoc2MsIGlzcmMsIGlycSk7CisJaWYgKGVycm9yICE9IDAp CisJCXJldHVybiAoZXJyb3IpOworCisJaXNyYy0+aXNyY19uc3BjX3R5cGUgPSBBUk1fSVJRX05T UENfUExBSU47CisJaXNyYy0+aXNyY19uc3BjX251bSA9IGlycTsKKwlyZXR1cm4gKDApOworfQor I2VuZGlmCisKK3N0YXRpYyBpbnQKK3RpX2FpbnRjX3JlZ2lzdGVyKGRldmljZV90IGRldiwgc3Ry dWN0IGFybV9pcnFzcmMgKmlzcmMsIGJvb2xlYW5fdCAqaXNfcGVyY3B1KQoreworCXN0cnVjdCB0 aV9haW50Y19zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisKKwkqaXNfcGVyY3B1 ID0gRkFMU0U7CisKKwlpZiAoaXNyYy0+aXNyY190eXBlID09IEFSTV9JU1JDVF9OQU1FU1BBQ0Up CisJCXJldHVybiAodGlfYWludGNfbWFwX25zcGMoc2MsIGlzcmMpKTsKKyNpZmRlZiBGRFQKKwll bHNlIGlmIChpc3JjLT5pc3JjX3R5cGUgPT0gQVJNX0lTUkNUX0ZEVCkKKwkJcmV0dXJuICh0aV9h aW50Y19tYXBfZmR0KHNjLCBpc3JjKSk7CisjZW5kaWYKKwllbHNlCisJCXJldHVybiAoRUlOVkFM KTsKK30KKworc3RhdGljIHZvaWQKK3RpX2FpbnRjX2VuYWJsZV9zb3VyY2UoZGV2aWNlX3QgZGV2 LCBzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYykKK3sKKwlzdHJ1Y3QgdGlfYWludGNfc29mdGMgKnNj ID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCXVfaW50IGlycSA9ICh1X2ludClpc3JjLT5pc3Jj X2RhdGE7CisKKwlhcm1faXJxX21lbW9yeV9iYXJyaWVyKGlycSk7CisJdGlfYWludGNfaXJxX3Vu bWFzayhzYywgaXJxKTsKK30KKworc3RhdGljIHZvaWQKK3RpX2FpbnRjX2Rpc2FibGVfc291cmNl KGRldmljZV90IGRldiwgc3RydWN0IGFybV9pcnFzcmMgKmlzcmMpCit7CisJc3RydWN0IHRpX2Fp bnRjX3NvZnRjICpzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKwl1X2ludCBpcnEgPSAodV9p bnQpaXNyYy0+aXNyY19kYXRhOworCisJdGlfYWludGNfaXJxX21hc2soc2MsIGlycSk7Cit9CisK K3N0YXRpYyBpbnQKK3RpX2FpbnRjX3VucmVnaXN0ZXIoZGV2aWNlX3QgZGV2LCBzdHJ1Y3QgYXJt X2lycXNyYyAqaXNyYykKK3sKKwlzdHJ1Y3QgdGlfYWludGNfc29mdGMgKnNjID0gZGV2aWNlX2dl dF9zb2Z0YyhkZXYpOworCXVfaW50IGlycSA9ICh1X2ludClpc3JjLT5pc3JjX2RhdGE7CisKKwly ZXR1cm4gKHRpX2FpbnRjX2RldGFjaF9pc3JjKHNjLCBpc3JjLCBpcnEpKTsKK30KKworc3RhdGlj IHZvaWQKK3RpX2FpbnRjX3ByZV9pdGhyZWFkKGRldmljZV90IGRldiwgc3RydWN0IGFybV9pcnFz cmMgKmlzcmMpCit7CisJc3RydWN0IHRpX2FpbnRjX3NvZnRjICpzYyA9IGRldmljZV9nZXRfc29m dGMoZGV2KTsKKwl1X2ludCBpcnEgPSAodV9pbnQpaXNyYy0+aXNyY19kYXRhOworCisJdGlfYWlu dGNfaXJxX21hc2soc2MsIGlycSk7CisJdGlfYWludGNfaXJxX2VvaShzYyk7Cit9CisKK3N0YXRp YyB2b2lkCit0aV9haW50Y19wb3N0X2l0aHJlYWQoZGV2aWNlX3QgZGV2LCBzdHJ1Y3QgYXJtX2ly cXNyYyAqaXNyYykKK3sKKworCXRpX2FpbnRjX2VuYWJsZV9zb3VyY2UoZGV2LCBpc3JjKTsKK30K Kworc3RhdGljIHZvaWQKK3RpX2FpbnRjX3Bvc3RfZmlsdGVyKGRldmljZV90IGRldiwgc3RydWN0 IGFybV9pcnFzcmMgKmlzcmMpCit7CisJc3RydWN0IHRpX2FpbnRjX3NvZnRjICpzYyA9IGRldmlj ZV9nZXRfc29mdGMoZGV2KTsKKworCXRpX2FpbnRjX2lycV9lb2koc2MpOworfQorI2VuZGlmCisK K3N0YXRpYyBpbnQKIHRpX2FpbnRjX3Byb2JlKGRldmljZV90IGRldikKIHsKIAlpZiAoIW9md19i dXNfc3RhdHVzX29rYXkoZGV2KSkKQEAgLTkxLDEzICszMTYsMjYgQEAKIAlyZXR1cm4gKEJVU19Q Uk9CRV9ERUZBVUxUKTsKIH0KCitzdGF0aWMgaW5saW5lIGludHB0cl90Cit0aV9haW50Y194cmVm KGRldmljZV90IGRldikKK3sKKyNpZmRlZiBGRFQKKwlyZXR1cm4gKE9GX3hyZWZfZnJvbV9ub2Rl KG9md19idXNfZ2V0X25vZGUoZGV2KSkpOworI2Vsc2UKKwlyZXR1cm4gKDApOworI2VuZGlmCit9 CisKIHN0YXRpYyBpbnQKIHRpX2FpbnRjX2F0dGFjaChkZXZpY2VfdCBkZXYpCiB7CiAJc3RydWN0 CQl0aV9haW50Y19zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CiAJdWludDMyX3Qg eDsKKyNpZmRlZiBBUk1fSU5UUk5HCisJaW50cHRyX3QJeHJlZiA9IHRpX2FpbnRjX3hyZWYoZGV2 KTsKKyNlbmRpZgoKLQlzYy0+c2NfZGV2ID0gZGV2OworCXNjLT5haW50Y19kZXYgPSBkZXY7Cgog CWlmICh0aV9haW50Y19zYykKIAkJcmV0dXJuIChFTlhJTyk7CkBAIC0xMTAsNiArMzQ4LDExIEBA CiAJc2MtPmFpbnRjX2JzdCA9IHJtYW5fZ2V0X2J1c3RhZyhzYy0+YWludGNfcmVzWzBdKTsKIAlz Yy0+YWludGNfYnNoID0gcm1hbl9nZXRfYnVzaGFuZGxlKHNjLT5haW50Y19yZXNbMF0pOwoKKyNp ZmRlZiBBUk1fSU5UUk5HCisJc2MtPmFpbnRjX25pcnFzID0gMTI4OworCXNjLT5haW50Y19pcnFz ID0gbWFsbG9jKHNjLT5haW50Y19uaXJxcyAqIHNpemVvZiAoKnNjLT5haW50Y19pcnFzKSwKKwkg ICAgTV9ERVZCVUYsIE1fV0FJVE9LIHwgTV9aRVJPKTsKKyNlbmRpZgogCXRpX2FpbnRjX3NjID0g c2M7CgogCXggPSBhaW50Y19yZWFkXzQoc2MsIElOVENfUkVWSVNJT04pOwpAQCAtMTI0LDEyICsz NjcsNjAgQEAKIAkvKlNldCBQcmlvcml0eSBUaHJlc2hvbGQgKi8KIAlhaW50Y193cml0ZV80KHNj LCBJTlRDX1RIUkVTSE9MRCwgMHhGRik7CgorI2lmbmRlZiBBUk1fSU5UUk5HCiAJcmV0dXJuICgw KTsKKyNlbHNlCisJLyoKKwkgKiBOb3csIHdoZW4gZXZlcnl0aGluZyBpcyBpbml0aWFsaXplZCwg aXQncyByaWdodCB0aW1lIHRvCisJICogcmVnaXN0ZXIgaW50ZXJydXB0IGNvbnRyb2xsZXIgdG8g aW50ZXJydXB0IGZyYW1lZm9yay4KKwkgKi8KKwlpZiAoYXJtX3BpY19yZWdpc3RlcihkZXYsIHhy ZWYpICE9IDApIHsKKwkJZGV2aWNlX3ByaW50ZihkZXYsICJjb3VsZCBub3QgcmVnaXN0ZXIgUElD XG4iKTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCWlmIChzYy0+YWludGNfcmVzWzFdID09IE5V TEwpIHsKKwkJaWYgKGFybV9waWNfY2xhaW1fcm9vdChkZXYsIHhyZWYsIHRpX2FpbnRjX2ludHIs IHNjLCAwKSAhPSAwKSB7CisJCQlkZXZpY2VfcHJpbnRmKGRldiwgImNvdWxkIG5vdCBzZXQgUElD IGFzIGEgcm9vdFxuIik7CisJCQlhcm1fcGljX3VucmVnaXN0ZXIoZGV2LCB4cmVmKTsKKwkJCWdv dG8gY2xlYW51cDsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChidXNfc2V0dXBfaW50cihkZXYsIHNj LT5haW50Y19yZXNbMV0sIElOVFJfVFlQRV9NSVNDIHwKKwkJICAgIElOVFJfU09MTywgKHZvaWQq KXRpX2FpbnRjX2ludHIsIE5VTEwsIHNjLAorCQkgICAgJnNjLT5haW50Y19pbnRyaGFuZCkpIHsK KwkJCWRldmljZV9wcmludGYoZGV2LCAiY291bGQgbm90IHNldHVwIGlycSBoYW5kbGVyXG4iKTsK KwkJCWFybV9waWNfdW5yZWdpc3RlcihkZXYsIHhyZWYpOworCQkJZ290byBjbGVhbnVwOworCQl9 CisJfQorCisJcmV0dXJuICgwKTsKKworY2xlYW51cDoKKwkvKgorCSAqIFhYWCAtIG5vdCBpbXBs ZW1lbnRlZCB0aV9haW50Y19kZXRhY2goKSBzaG91bGQgYmUgY2FsbGVkICEKKwkgKi8KKwlpZiAo c2MtPmFpbnRjX2lycXMgIT0gTlVMTCkKKwkJZnJlZShzYy0+YWludGNfaXJxcywgTV9ERVZCVUYp OworCWJ1c19yZWxlYXNlX3Jlc291cmNlcyhkZXYsIHRpX2FpbnRjX3NwZWMsIHNjLT5haW50Y19y ZXMpOworCXJldHVybihFTlhJTyk7CisjZW5kaWYKIH0KCiBzdGF0aWMgZGV2aWNlX21ldGhvZF90 IHRpX2FpbnRjX21ldGhvZHNbXSA9IHsKIAlERVZNRVRIT0QoZGV2aWNlX3Byb2JlLAkJdGlfYWlu dGNfcHJvYmUpLAogCURFVk1FVEhPRChkZXZpY2VfYXR0YWNoLAl0aV9haW50Y19hdHRhY2gpLAor I2lmZGVmIEFSTV9JTlRSTkcKKwkvKiBJbnRlcnJ1cHQgY29udHJvbGxlciBpbnRlcmZhY2UgKi8K KwlERVZNRVRIT0QocGljX2Rpc2FibGVfc291cmNlLAl0aV9haW50Y19kaXNhYmxlX3NvdXJjZSks CisJREVWTUVUSE9EKHBpY19lbmFibGVfc291cmNlLAl0aV9haW50Y19lbmFibGVfc291cmNlKSwK KwlERVZNRVRIT0QocGljX3Bvc3RfZmlsdGVyLAl0aV9haW50Y19wb3N0X2ZpbHRlciksCisJREVW TUVUSE9EKHBpY19wb3N0X2l0aHJlYWQsCXRpX2FpbnRjX3Bvc3RfaXRocmVhZCksCisJREVWTUVU SE9EKHBpY19wcmVfaXRocmVhZCwJdGlfYWludGNfcHJlX2l0aHJlYWQpLAorCURFVk1FVEhPRChw aWNfcmVnaXN0ZXIsCQl0aV9haW50Y19yZWdpc3RlciksCisJREVWTUVUSE9EKHBpY191bnJlZ2lz dGVyLAl0aV9haW50Y191bnJlZ2lzdGVyKSwKKyNlbmRpZgogCXsgMCwgMCB9CiB9OwoKQEAgLTE0 Myw2ICs0MzQsNyBAQAoKIERSSVZFUl9NT0RVTEUoYWludGMsIHNpbXBsZWJ1cywgdGlfYWludGNf ZHJpdmVyLCB0aV9haW50Y19kZXZjbGFzcywgMCwgMCk7CgorI2lmbmRlZiBBUk1fSU5UUk5HCiBp bnQKIGFybV9nZXRfbmV4dF9pcnEoaW50IGxhc3RfaXJxKQogewpAQCAtMTYwLDcgKzQ1Miw3IEBA CgogCS8qIENoZWNrIGZvciBzcHVyaW91cyBpbnRlcnJ1cHQgKi8KIAlpZiAoKGFjdGl2ZV9pcnEg JiAweGZmZmZmZjgwKSkgewotCQlkZXZpY2VfcHJpbnRmKHNjLT5zY19kZXYsCisJCWRldmljZV9w cmludGYoc2MtPmFpbnRjX2RldiwKIAkJICAgICJTcHVyaW91cyBpbnRlcnJ1cHQgZGV0ZWN0ZWQg KDB4JTA4eClcbiIsIGFjdGl2ZV9pcnEpOwogCQlhaW50Y193cml0ZV80KHNjLCBJTlRDX1NJUl9J UlEsIDApOwogCQlyZXR1cm4gLTE7CkBAIC0xODgsMyArNDgwLDQgQEAKIAlhcm1faXJxX21lbW9y eV9iYXJyaWVyKG5iKTsKIAlhaW50Y193cml0ZV80KHNjLCBJTlRDX01JUl9DTEVBUihuYiA+PiA1 KSwgKDFVTCA8PCAobmIgJiAweDFGKSkpOwogfQorI2VuZGlmCg== --20cf30223fb18e26520510a22522 Content-Type: text/plain; charset=US-ASCII; name="intrng_ti_gpio_panda_bbb_01.diff" Content-Disposition: attachment; filename="intrng_ti_gpio_panda_bbb_01.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_i6xu4d896 SW5kZXg6IHN5cy9hcm0vdGkvdGlfZ3Bpby5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9hcm0vdGkvdGlf Z3Bpby5jCShyZXZpc2lvbiAyNzk2ODUpCisrKyBzeXMvYXJtL3RpL3RpX2dwaW8uYwkod29ya2lu ZyBjb3B5KQpAQCAtMzMsNiArMzMsOCBAQAogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgogX19GQlNE SUQoIiRGcmVlQlNEJCIpOwogCisjaW5jbHVkZSAib3B0X3BsYXRmb3JtLmgiCisKICNpbmNsdWRl IDxzeXMvcGFyYW0uaD4KICNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KICNpbmNsdWRlIDxzeXMvYnVz Lmg+CkBAIC00Nyw2ICs0OSw3IEBACiAKICNpbmNsdWRlIDxtYWNoaW5lL2J1cy5oPgogI2luY2x1 ZGUgPG1hY2hpbmUvcmVzb3VyY2UuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2ludHIuaD4KIAogI2lu Y2x1ZGUgPGFybS90aS90aV9jcHVpZC5oPgogI2luY2x1ZGUgPGFybS90aS90aV9ncGlvLmg+CkBA IC01OSw2ICs2Miw3IEBACiAjaW5jbHVkZSA8ZGV2L29mdy9vZndfYnVzLmg+CiAjaW5jbHVkZSA8 ZGV2L29mdy9vZndfYnVzX3N1YnIuaD4KIAorI2luY2x1ZGUgInBpY19pZi5oIgogI2luY2x1ZGUg ImdwaW9faWYuaCIKICNpbmNsdWRlICJ0aV9ncGlvX2lmLmgiCiAKQEAgLTEzMyw2ICsxMzcsMjIg QEAKIH0KIAogc3RhdGljIHVfaW50Cit0aV9pbnRyX3Blcl9iYW5rKHZvaWQpCit7CisJc3dpdGNo KHRpX2NoaXAoKSkgeworI2lmZGVmIFNPQ19PTUFQNAorCWNhc2UgQ0hJUF9PTUFQXzQ6CisJCXJl dHVybiAoT01BUDRfSU5UUl9QRVJfQkFOSyk7CisjZW5kaWYKKyNpZmRlZiBTT0NfVElfQU0zMzVY CisJY2FzZSBDSElQX0FNMzM1WDoKKwkJcmV0dXJuIChBTTMzNVhfSU5UUl9QRVJfQkFOSyk7Cisj ZW5kaWYKKwl9CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIHVfaW50CiB0aV9tYXhfZ3Bpb19p bnRycyh2b2lkKQogewogCXN3aXRjaCh0aV9jaGlwKCkpIHsKQEAgLTI2Nyw2ICsyODcsMjggQEAK IH0KIAogc3RhdGljIGlubGluZSB2b2lkCit0aV9ncGlvX2NmZ19pbnRyX3NldChzdHJ1Y3QgdGlf Z3Bpb19zb2Z0YyAqc2MsIHVuc2lnbmVkIGludCBiYW5rLCB1aW50MzJfdCByZWcsCisgICAgdWlu dDMyX3QgbWFzaykKK3sKKwl1aW50MzJfdCB2YWw7CisKKwl2YWwgPSB0aV9ncGlvX3JlYWRfNChz YywgYmFuaywgcmVnKTsKKwl2YWwgfD0gbWFzazsKKwl0aV9ncGlvX3dyaXRlXzQoc2MsIGJhbmss IHJlZywgdmFsKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit0aV9ncGlvX2NmZ19pbnRyX2Ns cihzdHJ1Y3QgdGlfZ3Bpb19zb2Z0YyAqc2MsIHVuc2lnbmVkIGludCBiYW5rLCB1aW50MzJfdCBy ZWcsCisgICAgdWludDMyX3QgbWFzaykKK3sKKwl1aW50MzJfdCB2YWw7CisKKwl2YWwgPSB0aV9n cGlvX3JlYWRfNChzYywgYmFuaywgcmVnKTsKKwl2YWwgJj0gfm1hc2s7CisJdGlfZ3Bpb193cml0 ZV80KHNjLCBiYW5rLCByZWcsIHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAogdGlfZ3Bp b19pbnRyX2NscihzdHJ1Y3QgdGlfZ3Bpb19zb2Z0YyAqc2MsIHVuc2lnbmVkIGludCBiYW5rLCB1 aW50MzJfdCBtYXNrKQogewogCkBAIC00OTYsNyArNTM4LDcgQEAKIAkJb2UgJj0gflRJX0dQSU9f TUFTSyhwaW4pOwogCXRpX2dwaW9fd3JpdGVfNChzYywgVElfR1BJT19CQU5LKHBpbiksIFRJX0dQ SU9fT0UsIG9lKTsKIAlUSV9HUElPX1VOTE9DSyhzYyk7Ci0JCisKIAlyZXR1cm4gKDApOwogfQog CkBAIC01NjEsNyArNjAzLDcgQEAKIAkJcmV0dXJuIChFSU5WQUwpOwogCiAJLyoKLQkgKiBSZXR1 cm4gZGF0YSBmcm9tIG91dHB1dCBsYXRjaCB3aGVuIHNldCBhcyBvdXRwdXQgYW5kIGZyb20gdGhl IAorCSAqIFJldHVybiBkYXRhIGZyb20gb3V0cHV0IGxhdGNoIHdoZW4gc2V0IGFzIG91dHB1dCBh bmQgZnJvbSB0aGUKIAkgKiBpbnB1dCByZWdpc3RlciBvdGhlcndpc2UuCiAJICovCiAJVElfR1BJ T19MT0NLKHNjKTsKQEAgLTYyMSwzNCArNjYzLDUyIEBACiAgKgogICovCiBzdGF0aWMgaW50Ci10 aV9ncGlvX2ludHIodm9pZCAqYXJnKQordGlfZ3Bpb19pbnRyKHZvaWQgKmFyZywgIHN0cnVjdCB0 cmFwZnJhbWUgKnRmKQogewotCWludCBiYW5rX2xhc3QsIGlycTsKLQlzdHJ1Y3QgaW50cl9ldmVu dCAqZXZlbnQ7Ci0Jc3RydWN0IHRpX2dwaW9fc29mdGMgKnNjOwotCXVpbnQzMl90IHJlZzsKKwlz dHJ1Y3QgdGlfZ3Bpb19pcnFfYXJnICppYSA9IGFyZzsKKwlzdHJ1Y3QgdGlfZ3Bpb19zb2Z0YyAq c2MgPSBpYS0+aWFfc2M7CisJdV9pbnQgcmVnLCBiaXQsIGlycSwgbWFzazsKKwlzdHJ1Y3QgYXJt X2lycXNyYyAqaXNyYzsKIAotCXNjID0gKHN0cnVjdCB0aV9ncGlvX3NvZnRjICopYXJnOwotCWJh bmtfbGFzdCA9IC0xOwotCXJlZyA9IDA7IC8qIHNxdWVsY2ggYm9ndXMgZ2NjIHdhcm5pbmcgKi8K LQlmb3IgKGlycSA9IDA7IGlycSA8IHNjLT5zY19tYXhwaW47IGlycSsrKSB7CisJcmVnID0gdGlf Z3Bpb19pbnRyX3N0YXR1cyhzYywgaWEtPmlhX2JhbmspOworCWlmIChyZWcgPT0gMCkgeworCQkv KgorCQkgKiBJdCBjb3VsZCBoYXBwZW4gZXNwZWNpYWxseSBmb3IgYWN0aXZlIGhpZ2ggaW50ZXJy dXB0cworCQkgKiB3aGljaCBjb3VsZCBkcm9wIGxldmVsIGJlZm9yZSBzdGF0dXMgaXMgcmVhZCBo ZXJlLgorCQkgKiBJbiBvdGhlciB3b3JkcywgaXQncyBHUElPIGFuZCBpbnRlcnJ1cHQgc291cmNl cyBjb3VsZCBiZQorCQkgKiB2ZXJ5IGlycmVndWxhciBsaWtlIGh1bWFuIGRyaXZlbiBpbnRlcmZh Y2UuCisJCSAqLworCQlkZXZpY2VfcHJpbnRmKHNjLT5zY19kZXYsICJTcHVyaW91cyBpbnRlcnJ1 cHQgZGV0ZWN0ZWRcbiIpOworCQlyZXR1cm4gKEZJTFRFUl9IQU5ETEVEKTsKKwl9CiAKLQkJLyog UmVhZCBpbnRlcnJ1cHQgc3RhdHVzIG9ubHkgb25jZSBmb3IgZWFjaCBiYW5rLiAqLwotCQlpZiAo VElfR1BJT19CQU5LKGlycSkgIT0gYmFua19sYXN0KSB7Ci0JCQlyZWcgPSB0aV9ncGlvX2ludHJf c3RhdHVzKHNjLCBUSV9HUElPX0JBTksoaXJxKSk7Ci0JCQliYW5rX2xhc3QgPSBUSV9HUElPX0JB TksoaXJxKTsKK2Rpc3BhdGNoX2lycToKKwlkbyB7CisJCWJpdCA9IGZmcyhyZWcpIC0gMTsKKwkJ bWFzayA9ICgxIDw8IGJpdCk7CisKKwkJaXJxID0gaWEtPmlhX2JhbmsgKiBQSU5TX1BFUl9CQU5L ICsgYml0OworCisJCS8qIENoZWNrIGZvciByZWdpc3RlcmVkIHNvdXJjZSAqLworCQlpc3JjID0g c2MtPnNjX2lycXNbaXJxXTsKKwkJaWYgKGlzcmMgIT0gTlVMTCkgeworCQkJaWYgKGlzcmMtPmlz cmNfdHJpZyAhPSBJTlRSX1RSSUdHRVJfTEVWRUwpCisJCQkJIHRpX2dwaW9faW50cl9hY2soc2Ms IGlhLT5pYV9iYW5rLCBtYXNrKTsKKwkJCWFybV9pcnFfZGlzcGF0Y2goaXNyYywgdGYpOworCQl9 IGVsc2UgeworCQkJZGV2aWNlX3ByaW50ZihzYy0+c2NfZGV2LAorCQkJICAgICJTdHJheSBpbnRl cnJ1cHQgJXUgZGV0ZWN0ZWRcbiIsIGlycSk7CisJCQl0aV9ncGlvX2ludHJfY2xyKHNjLCBpYS0+ aWFfYmFuaywgbWFzayk7CisJCQl0aV9ncGlvX2ludHJfYWNrKHNjLCBpYS0+aWFfYmFuaywgbWFz ayk7CiAJCX0KLQkJaWYgKChyZWcgJiBUSV9HUElPX01BU0soaXJxKSkgPT0gMCkKLQkJCWNvbnRp bnVlOwotCQlldmVudCA9IHNjLT5zY19ldmVudHNbaXJxXTsKLQkJaWYgKGV2ZW50ICE9IE5VTEwg JiYgIVRBSUxRX0VNUFRZKCZldmVudC0+aWVfaGFuZGxlcnMpKQotCQkJaW50cl9ldmVudF9oYW5k bGUoZXZlbnQsIE5VTEwpOwotCQllbHNlCi0JCQlkZXZpY2VfcHJpbnRmKHNjLT5zY19kZXYsICJT dHJheSBJUlEgJWRcbiIsIGlycSk7Ci0JCS8qIEFjayB0aGUgSVJRIFN0YXR1cyBiaXQuICovCi0J CXRpX2dwaW9faW50cl9hY2soc2MsIFRJX0dQSU9fQkFOSyhpcnEpLCBUSV9HUElPX01BU0soaXJx KSk7Ci0JfQogCisJCXJlZyAmPSB+bWFzazsKKwl9IHdoaWxlIChyZWcgIT0gMCk7CisKKwlyZWcg PSB0aV9ncGlvX2ludHJfc3RhdHVzKHNjLCBpYS0+aWFfYmFuayk7CisJaWYgKHJlZyAhPSAwKQor CQlnb3RvIGRpc3BhdGNoX2lycTsKKwogCXJldHVybiAoRklMVEVSX0hBTkRMRUQpOwogfQogCkBA IC02NTUsMjAgKzcxNSwzMCBAQAogc3RhdGljIGludAogdGlfZ3Bpb19hdHRhY2hfaW50cihkZXZp Y2VfdCBkZXYpCiB7Ci0JaW50IGk7Ci0Jc3RydWN0IHRpX2dwaW9fc29mdGMgKnNjOworCXVfaW50 IGksIGJhbmssIGlkeDsKKwlzdHJ1Y3QgdGlfZ3Bpb19zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3Nv ZnRjKGRldik7CiAKLQlzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKwkvKgorCSAqIFByZXBh cmUgYXJndW1lbnRzIGZvciBvdXIgaW50ZXJydXB0IHJvdXRpbmVzLgorCSAqLworCWZvciAoaSA9 IDAsIGJhbmsgPSAwOyBiYW5rIDwgdGlfbWF4X2dwaW9fYmFua3MoKTsgYmFuaysrKSB7CisJCWZv ciAoaWR4ID0gMDsgaWR4IDwgdGlfaW50cl9wZXJfYmFuaygpOyBpZHgrKywgaSsrKSB7CisJCQlz Yy0+c2NfaXJxX2FyZ1tpXS5pYV9zYyA9IHNjOworCQkJc2MtPnNjX2lycV9hcmdbaV0uaWFfYmFu ayA9IGJhbms7CisJCQlzYy0+c2NfaXJxX2FyZ1tpXS5pYV9pZHggPSBpZHg7CisJCX0KKwl9CisK KwkvKgorCSAqIFJlZ2lzdGVyIG91ciBpbnRlcnJ1cHQgcm91dGluZSBmb3IgZWFjaCBvZiB0aGUg SVJRIHJlc291cmNlcy4KKwkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgdGlfbWF4X2dwaW9faW50cnMo KTsgaSsrKSB7CiAJCWlmIChzYy0+c2NfaXJxX3Jlc1tpXSA9PSBOVUxMKQogCQkJYnJlYWs7CiAK LQkJLyoKLQkJICogUmVnaXN0ZXIgb3VyIGludGVycnVwdCBmaWx0ZXIgZm9yIGVhY2ggb2YgdGhl IElSUSByZXNvdXJjZXMuCi0JCSAqLwotCQlpZiAoYnVzX3NldHVwX2ludHIoZGV2LCBzYy0+c2Nf aXJxX3Jlc1tpXSwKLQkJICAgIElOVFJfVFlQRV9NSVNDIHwgSU5UUl9NUFNBRkUsIHRpX2dwaW9f aW50ciwgTlVMTCwgc2MsCi0JCSAgICAmc2MtPnNjX2lycV9oZGxbaV0pICE9IDApIHsKKwkJaWYg KGJ1c19zZXR1cF9pbnRyKGRldiwgc2MtPnNjX2lycV9yZXNbaV0sIElOVFJfVFlQRV9NSVNDIHwK KwkJICAgIElOVFJfTVBTQUZFIHwgSU5UUl9TT0xPLCAodm9pZCAqKXRpX2dwaW9faW50ciwgTlVM TCwKKwkJICAgICZzYy0+c2NfaXJxX2FyZ1tpXSwgJnNjLT5zY19pcnFfaGRsW2ldKSAhPSAwKSB7 CiAJCQlkZXZpY2VfcHJpbnRmKGRldiwKIAkJCSAgICAiV0FSTklORzogdW5hYmxlIHRvIHJlZ2lz dGVyIGludGVycnVwdCBmaWx0ZXJcbiIpOwogCQkJcmV0dXJuICgtMSk7CkBAIC03NDAsNiArODEw LDE2IEBACiAJcmV0dXJuICgwKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnRwdHJfdAordGlfZ3Bp b194cmVmKGRldmljZV90IGRldikKK3sKKyNpZmRlZiBGRFQKKwlyZXR1cm4gKE9GX3hyZWZfZnJv bV9ub2RlKG9md19idXNfZ2V0X25vZGUoZGV2KSkpOworI2Vsc2UKKwlyZXR1cm4gKE5VTEwpOwor I2VuZGlmCit9CisKIC8qKgogICoJdGlfZ3Bpb19hdHRhY2ggLSBhdHRhY2ggZnVuY3Rpb24gZm9y IHRoZSBkcml2ZXIKICAqCUBkZXY6IGdwaW8gZGV2aWNlIGhhbmRsZQpAQCAtNzg2LDM1ICs4NjYs MTAgQEAKIAkJcmV0dXJuIChFTlhJTyk7CiAJfQogCi0JLyogU2V0dXAgdGhlIElSUSByZXNvdXJj ZXMgKi8KLQlpZiAodGlfZ3Bpb19hdHRhY2hfaW50cihkZXYpICE9IDApIHsKLQkJZGV2aWNlX3By aW50ZihkZXYsICJFcnJvcjogY291bGQgbm90IHNldHVwIGlycSBoYW5kbGVyc1xuIik7Ci0JCXRp X2dwaW9fZGV0YWNoKGRldik7Ci0JCXJldHVybiAoRU5YSU8pOwotCX0KLQotCS8qCi0JICogSW5p dGlhbGl6ZSB0aGUgaW50ZXJydXB0IHNldHRpbmdzLiAgVGhlIGRlZmF1bHQgaXMgYWN0aXZlLWxv dwotCSAqIGludGVycnVwdHMuCi0JICovCi0Jc2MtPnNjX2lycV90cmlnZ2VyID0gbWFsbG9jKAot CSAgICBzaXplb2YoKnNjLT5zY19pcnFfdHJpZ2dlcikgKiBzYy0+c2NfbWF4cGluLAotCSAgICBN X0RFVkJVRiwgTV9XQUlUT0sgfCBNX1pFUk8pOwotCXNjLT5zY19pcnFfcG9sYXJpdHkgPSBtYWxs b2MoCi0JICAgIHNpemVvZigqc2MtPnNjX2lycV9wb2xhcml0eSkgKiBzYy0+c2NfbWF4cGluLAot CSAgICBNX0RFVkJVRiwgTV9XQUlUT0sgfCBNX1pFUk8pOwotCWZvciAoaSA9IDA7IGkgPCBzYy0+ c2NfbWF4cGluOyBpKyspIHsKLQkJc2MtPnNjX2lycV90cmlnZ2VyW2ldID0gSU5UUl9UUklHR0VS X0xFVkVMOwotCQlzYy0+c2NfaXJxX3BvbGFyaXR5W2ldID0gSU5UUl9QT0xBUklUWV9MT1c7Ci0J fQotCi0Jc2MtPnNjX2V2ZW50cyA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGludHJfZXZlbnQgKikg KiBzYy0+c2NfbWF4cGluLAotCSAgICBNX0RFVkJVRiwgTV9XQUlUT0sgfCBNX1pFUk8pOwotCiAJ LyogV2UgbmVlZCB0byBnbyB0aHJvdWdoIGVhY2ggYmxvY2sgYW5kIGVuc3VyZSB0aGUgY2xvY2tz IGFyZSBydW5uaW5nIGFuZAogCSAqIHRoZSBtb2R1bGUgaXMgZW5hYmxlZC4gIEl0IG1pZ2h0IGJl IGJldHRlciB0byBkbyB0aGlzIG9ubHkgd2hlbiB0aGUKIAkgKiBwaW5zIGFyZSBjb25maWd1cmVk IHdoaWNoIHdvdWxkIHJlc3VsdCBpbiBsZXNzIHBvd2VyIHVzZWQgaWYgdGhlIEdQSU8KLQkgKiBw aW5zIHdlcmVuJ3QgdXNlZCAuLi4gCisJICogcGlucyB3ZXJlbid0IHVzZWQgLi4uCiAJICovCiAJ Zm9yIChpID0gMDsgaSA8IHRpX21heF9ncGlvX2JhbmtzKCk7IGkrKykgewogCQlpZiAoc2MtPnNj X21lbV9yZXNbaV0gIT0gTlVMTCkgewpAQCAtODMyLDYgKzg4NywyNCBAQAogCQlyZXR1cm4gKEVO WElPKTsKIAl9CiAKKwkvKiBJbml0aWFsaXplIHN0dWZmIGZvciBpbnRlcnJ1cHQgY29udHJvbGxl ci4qLworCXNjLT5zY19pcnFzID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgYXJtX2lycXNyYyAqKSAq IHNjLT5zY19tYXhwaW4sCisJICAgIE1fREVWQlVGLCBNX1dBSVRPSyB8IE1fWkVSTyk7CisKKwkv KiBTZXR1cCB0aGUgSVJRIHJlc291cmNlcyAqLworCWlmICh0aV9ncGlvX2F0dGFjaF9pbnRyKGRl dikgIT0gMCkgeworCQlkZXZpY2VfcHJpbnRmKGRldiwgIkVycm9yOiBjb3VsZCBub3Qgc2V0dXAg aXJxIGhhbmRsZXJzXG4iKTsKKwkJdGlfZ3Bpb19kZXRhY2goZGV2KTsKKwkJcmV0dXJuIChFTlhJ Tyk7CisJfQorCisJLyogUmVnaXN0ZXIgdXMgYXMgaW50ZXJydXB0IGNvbnRyb2xsZXIuKi8KKwlp ZiAoYXJtX3BpY19yZWdpc3RlcihkZXYsIHRpX2dwaW9feHJlZihkZXYpKSAhPSAwKSB7CisJCWRl dmljZV9wcmludGYoZGV2LCAiRXJyb3I6IGNvdWxkIG5vdCByZWdpc3RlciBQSUNcbiIpOworCQl0 aV9ncGlvX2RldGFjaChkZXYpOworCQlyZXR1cm4gKEVOWElPKTsKKwl9CisKIAlyZXR1cm4gKDAp OwogfQogCkBAIC04NjIsMTQgKzkzNSwxMiBAQAogCQkJdGlfZ3Bpb19pbnRyX2NscihzYywgaSwg MHhmZmZmZmZmZik7CiAJfQogCWdwaW9idXNfZGV0YWNoX2J1cyhkZXYpOwotCWlmIChzYy0+c2Nf ZXZlbnRzKQotCQlmcmVlKHNjLT5zY19ldmVudHMsIE1fREVWQlVGKTsKLQlpZiAoc2MtPnNjX2ly cV9wb2xhcml0eSkKLQkJZnJlZShzYy0+c2NfaXJxX3BvbGFyaXR5LCBNX0RFVkJVRik7Ci0JaWYg KHNjLT5zY19pcnFfdHJpZ2dlcikKLQkJZnJlZShzYy0+c2NfaXJxX3RyaWdnZXIsIE1fREVWQlVG KTsKKwkvKiBDbGVhbiB1cCBpbnRlcnJ1cHQgY29udHJvbGxlciBzdHVmZi4gKi8KKwl0aV9ncGlv X2RldGFjaF9pbnRyKGRldik7CisJYXJtX3BpY191bnJlZ2lzdGVyKGRldiwgdGlfZ3Bpb194cmVm KGRldikpOworCWlmIChzYy0+c2NfaXJxcykKKwkJZnJlZShzYy0+c2NfaXJxcywgTV9ERVZCVUYp OwogCS8qIFJlbGVhc2UgdGhlIG1lbW9yeSBhbmQgSVJRIHJlc291cmNlcy4gKi8KLQl0aV9ncGlv X2RldGFjaF9pbnRyKGRldik7CiAJYnVzX3JlbGVhc2VfcmVzb3VyY2VzKGRldiwgdGlfZ3Bpb19p cnFfc3BlYywgc2MtPnNjX2lycV9yZXMpOwogCWJ1c19yZWxlYXNlX3Jlc291cmNlcyhkZXYsIHRp X2dwaW9fbWVtX3NwZWMsIHNjLT5zY19tZW1fcmVzKTsKIAlUSV9HUElPX0xPQ0tfREVTVFJPWShz Yyk7CkBAIC04NzcsMTkzICs5NDgsMzEwIEBACiAJcmV0dXJuICgwKTsKIH0KIAotc3RhdGljIHVp bnQzMl90Ci10aV9ncGlvX2ludHJfcmVnKHN0cnVjdCB0aV9ncGlvX3NvZnRjICpzYywgaW50IGly cSkKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QKK3RpX2dwaW9faXJxX2NvbmZpZ19yZWcoZW51bSBp bnRyX3RyaWdnZXIgdHJpZywgZW51bSBpbnRyX3BvbGFyaXR5IHBvbCkKIHsKIAotCWlmICh0aV9n cGlvX3ZhbGlkX3BpbihzYywgaXJxKSAhPSAwKQotCQlyZXR1cm4gKDApOwotCi0JaWYgKHNjLT5z Y19pcnFfdHJpZ2dlcltpcnFdID09IElOVFJfVFJJR0dFUl9MRVZFTCkgewotCQlpZiAoc2MtPnNj X2lycV9wb2xhcml0eVtpcnFdID09IElOVFJfUE9MQVJJVFlfTE9XKQorCWlmICh0cmlnID09IElO VFJfVFJJR0dFUl9MRVZFTCkgeworCQlpZiAocG9sID09IElOVFJfUE9MQVJJVFlfTE9XKQogCQkJ cmV0dXJuIChUSV9HUElPX0xFVkVMREVURUNUMCk7Ci0JCWVsc2UgaWYgKHNjLT5zY19pcnFfcG9s YXJpdHlbaXJxXSA9PSBJTlRSX1BPTEFSSVRZX0hJR0gpCisJCWVsc2UgaWYgKHBvbCA9PSBJTlRS X1BPTEFSSVRZX0hJR0gpCiAJCQlyZXR1cm4gKFRJX0dQSU9fTEVWRUxERVRFQ1QxKTsKLQl9IGVs c2UgaWYgKHNjLT5zY19pcnFfdHJpZ2dlcltpcnFdID09IElOVFJfVFJJR0dFUl9FREdFKSB7Ci0J CWlmIChzYy0+c2NfaXJxX3BvbGFyaXR5W2lycV0gPT0gSU5UUl9QT0xBUklUWV9MT1cpCisJfSBl bHNlIGlmICh0cmlnID09IElOVFJfVFJJR0dFUl9FREdFKSB7CisJCWlmIChwb2wgPT0gSU5UUl9Q T0xBUklUWV9MT1cpCiAJCQlyZXR1cm4gKFRJX0dQSU9fRkFMTElOR0RFVEVDVCk7Ci0JCWVsc2Ug aWYgKHNjLT5zY19pcnFfcG9sYXJpdHlbaXJxXSA9PSBJTlRSX1BPTEFSSVRZX0hJR0gpCisJCWVs c2UgaWYgKHBvbCA9PSBJTlRSX1BPTEFSSVRZX0hJR0gpCiAJCQlyZXR1cm4gKFRJX0dQSU9fUklT SU5HREVURUNUKTsKIAl9Ci0KIAlyZXR1cm4gKDApOwogfQogCiBzdGF0aWMgdm9pZAotdGlfZ3Bp b19tYXNrX2lycSh2b2lkICpzb3VyY2UpCit0aV9ncGlvX2lycV9jb25maWcoc3RydWN0IHRpX2dw aW9fc29mdGMgKnNjLCB1X2ludCBpcnEsIGVudW0gaW50cl90cmlnZ2VyIHRyaWcsCisgICAgZW51 bSBpbnRyX3BvbGFyaXR5IHBvbCkKIHsKLQlpbnQgaXJxOwotCXVpbnQzMl90IHJlZywgdmFsOwor CXVpbnQzMl90IHJlZywgYmFuaywgbWFzazsKIAotCWlycSA9IChpbnQpc291cmNlOwotCWlmICh0 aV9ncGlvX3ZhbGlkX3Bpbih0aV9ncGlvX3NjLCBpcnEpICE9IDApCisJaWYgKHRpX2dwaW9fdmFs aWRfcGluKHNjLCBpcnEpICE9IDApCiAJCXJldHVybjsKIAotCVRJX0dQSU9fTE9DSyh0aV9ncGlv X3NjKTsKLQl0aV9ncGlvX2ludHJfY2xyKHRpX2dwaW9fc2MsIFRJX0dQSU9fQkFOSyhpcnEpLCBU SV9HUElPX01BU0soaXJxKSk7Ci0JcmVnID0gdGlfZ3Bpb19pbnRyX3JlZyh0aV9ncGlvX3NjLCBp cnEpOwotCWlmIChyZWcgIT0gMCkgewotCQl2YWwgPSB0aV9ncGlvX3JlYWRfNCh0aV9ncGlvX3Nj LCBUSV9HUElPX0JBTksoaXJxKSwgcmVnKTsKLQkJdmFsICY9IH5USV9HUElPX01BU0soaXJxKTsK LQkJdGlfZ3Bpb193cml0ZV80KHRpX2dwaW9fc2MsIFRJX0dQSU9fQkFOSyhpcnEpLCByZWcsIHZh bCk7Ci0JfQorCWlmICgocmVnID0gdGlfZ3Bpb19pcnFfY29uZmlnX3JlZyh0cmlnLCBwb2wpKSA9 PSAwKQorCQlyZXR1cm47CisKKwliYW5rID0gVElfR1BJT19CQU5LKGlycSk7CisJbWFzayA9IFRJ X0dQSU9fTUFTSyhpcnEpOworCisJLyoKKwkgKiBJbnRlcnJ1cHQgY29uZmlndXJhdGlvbiBpcyBu b3QgYWxsb3dlZCBieSBpbnRlcnJ1cHQgZnJhbWV3b3JrIG5vdworCSAqIGlmIHRoZSBpbnRlcnJ1 cHQgaXMgZW5hYmxlZC4gVGh1cyBubyBpbnRlcnJ1cHQgY291bGQgYmUgbWlzc2VkIGhlcmUKKwkg KiBkdXJpbmcgY29uZmlndXJhdGlvbi4KKwkgKi8KKwlUSV9HUElPX0xPQ0soc2MpOworCXRpX2dw aW9fY2ZnX2ludHJfY2xyKHNjLCBiYW5rLCBUSV9HUElPX0xFVkVMREVURUNUMCwgbWFzayk7CisJ dGlfZ3Bpb19jZmdfaW50cl9jbHIoc2MsIGJhbmssIFRJX0dQSU9fTEVWRUxERVRFQ1QxLCBtYXNr KTsKKwl0aV9ncGlvX2NmZ19pbnRyX2NscihzYywgYmFuaywgVElfR1BJT19GQUxMSU5HREVURUNU LCBtYXNrKTsKKwl0aV9ncGlvX2NmZ19pbnRyX2NscihzYywgYmFuaywgVElfR1BJT19SSVNJTkdE RVRFQ1QsIG1hc2spOworCisJdGlfZ3Bpb19jZmdfaW50cl9zZXQoc2MsIGJhbmssIHJlZywgbWFz ayk7CiAJVElfR1BJT19VTkxPQ0sodGlfZ3Bpb19zYyk7CiB9CiAKIHN0YXRpYyB2b2lkCi10aV9n cGlvX3VubWFza19pcnEodm9pZCAqc291cmNlKQordGlfZ3Bpb19pcnFfbWFzayhzdHJ1Y3QgdGlf Z3Bpb19zb2Z0YyAqc2MsIHVfaW50IGlycSwgYm9vbGVhbl90IGRvX2VvaSkKIHsKLQlpbnQgaXJx OwotCXVpbnQzMl90IHJlZywgdmFsOworCXVfaW50IGJhbmssIG1hc2s7CiAKLQlpcnEgPSAoaW50 KXNvdXJjZTsKLQlpZiAodGlfZ3Bpb192YWxpZF9waW4odGlfZ3Bpb19zYywgaXJxKSAhPSAwKQor CWlmICh0aV9ncGlvX3ZhbGlkX3BpbihzYywgaXJxKSAhPSAwKQogCQlyZXR1cm47CiAKLQlUSV9H UElPX0xPQ0sodGlfZ3Bpb19zYyk7Ci0JcmVnID0gdGlfZ3Bpb19pbnRyX3JlZyh0aV9ncGlvX3Nj LCBpcnEpOwotCWlmIChyZWcgIT0gMCkgewotCQl2YWwgPSB0aV9ncGlvX3JlYWRfNCh0aV9ncGlv X3NjLCBUSV9HUElPX0JBTksoaXJxKSwgcmVnKTsKLQkJdmFsIHw9IFRJX0dQSU9fTUFTSyhpcnEp OwotCQl0aV9ncGlvX3dyaXRlXzQodGlfZ3Bpb19zYywgVElfR1BJT19CQU5LKGlycSksIHJlZywg dmFsKTsKLQkJdGlfZ3Bpb19pbnRyX3NldCh0aV9ncGlvX3NjLCBUSV9HUElPX0JBTksoaXJxKSwK LQkJICAgIFRJX0dQSU9fTUFTSyhpcnEpKTsKLQl9CisJYmFuayA9IFRJX0dQSU9fQkFOSyhpcnEp OworCW1hc2sgPSBUSV9HUElPX01BU0soaXJxKTsKKworCVRJX0dQSU9fTE9DSyhzYyk7CisJdGlf Z3Bpb19pbnRyX2NscihzYywgYmFuaywgbWFzayk7CisJaWYgKGRvX2VvaSkKKwkJdGlfZ3Bpb19p bnRyX2FjayhzYywgYmFuaywgbWFzayk7CisJVElfR1BJT19VTkxPQ0soc2MpOworfQorCitzdGF0 aWMgdm9pZAordGlfZ3Bpb19pcnFfdW5tYXNrKHN0cnVjdCB0aV9ncGlvX3NvZnRjICpzYywgdV9p bnQgaXJxKQoreworCisJaWYgKHRpX2dwaW9fdmFsaWRfcGluKHNjLCBpcnEpICE9IDApCisJCXJl dHVybjsKKworCVRJX0dQSU9fTE9DSyhzYyk7CisJdGlfZ3Bpb19pbnRyX3NldChzYywgVElfR1BJ T19CQU5LKGlycSksIFRJX0dQSU9fTUFTSyhpcnEpKTsKIAlUSV9HUElPX1VOTE9DSyh0aV9ncGlv X3NjKTsKIH0KIAorc3RhdGljIHZvaWQKK3RpX2dwaW9faXJxX2VvaShzdHJ1Y3QgdGlfZ3Bpb19z b2Z0YyAqc2MsIHVfaW50IGlycSkKK3sKKworCWlmICh0aV9ncGlvX3ZhbGlkX3BpbihzYywgaXJx KSAhPSAwKQorCQlyZXR1cm47CisKKwlUSV9HUElPX0xPQ0soc2MpOworCXRpX2dwaW9faW50cl9h Y2soc2MsIFRJX0dQSU9fQkFOSyhpcnEpLCBUSV9HUElPX01BU0soaXJxKSk7CisJVElfR1BJT19V TkxPQ0sodGlfZ3Bpb19zYyk7Cit9CisKIHN0YXRpYyBpbnQKLXRpX2dwaW9fYWN0aXZhdGVfcmVz b3VyY2UoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGlsZCwgaW50IHR5cGUsIGludCByaWQsCi0J c3RydWN0IHJlc291cmNlICpyZXMpCit0aV9ncGlvX2F0dGFjaF9pc3JjKHN0cnVjdCB0aV9ncGlv X3NvZnRjICpzYywgc3RydWN0IGFybV9pcnFzcmMgKmlzcmMsCisgICAgdV9pbnQgaXJxKQogewot CWludCBwaW47CiAKLQlpZiAodHlwZSAhPSBTWVNfUkVTX0lSUSkKLQkJcmV0dXJuIChFTlhJTyk7 CisJLyoKKwkgKiAxLiBUaGUgbGluayBiZXR3ZWVuIElTUkMgYW5kIGNvbnRyb2xsZXIgbXVzdCBi ZSBzZXQgYXRvbWljYWxseS4KKwkgKiAyLiBKdXN0IGRvIHRoaW5ncyBvbmx5IG9uY2UgaW4gcmFy ZSBjYXNlIHdoZW4gY29uc3VtZXJzCisJICogICAgb2Ygc2hhcmVkIGludGVycnVwdCBjYW1lIGhl cmUgYXQgdGhlIHNhbWUgbW9tZW50LgorCSAqLworCVRJX0dQSU9fTE9DSyhzYyk7CisJaWYgKHNj LT5zY19pcnFzW2lycV0gIT0gTlVMTCkgeworCQlUSV9HUElPX1VOTE9DSyhzYyk7CisJCXJldHVy biAoc2MtPnNjX2lycXNbaXJxXSA9PSBpc3JjID8gMCA6IEVFWElTVCk7CisJfQorCXNjLT5zY19p cnFzW2lycV0gPSBpc3JjOworCWlzcmMtPmlzcmNfZGF0YSA9ICh2b2lkICopaXJxOworCVRJX0dQ SU9fVU5MT0NLKHNjKTsKIAotCS8qIFVubWFzayB0aGUgaW50ZXJydXB0LiAqLwotCXBpbiA9IHJt YW5fZ2V0X3N0YXJ0KHJlcyk7Ci0JdGlfZ3Bpb191bm1hc2tfaXJxKCh2b2lkICopKHVpbnRwdHJf dClwaW4pOworCWFybV9pcnFfc2V0X25hbWUoaXNyYywgIiVzLHMldSIsIGRldmljZV9nZXRfbmFt ZXVuaXQoc2MtPnNjX2RldiksIGlycSk7CisJcmV0dXJuICgwKTsKK30KIAorc3RhdGljIGludAor dGlfZ3Bpb19kZXRhY2hfaXNyYyhzdHJ1Y3QgdGlfZ3Bpb19zb2Z0YyAqc2MsIHN0cnVjdCBhcm1f aXJxc3JjICppc3JjLAorICAgIHVfaW50IGlycSkKK3sKKworCVRJX0dQSU9fTE9DSyhzYyk7CisJ aWYgKHNjLT5zY19pcnFzW2lycV0gIT0gaXNyYykgeworCQlUSV9HUElPX1VOTE9DSyhzYyk7CisJ CXJldHVybiAoc2MtPnNjX2lycXNbaXJxXSA9PSBOVUxMID8gMCA6IEVJTlZBTCk7CisJfQorCXNj LT5zY19pcnFzW2lycV0gPSBOVUxMOworCWlzcmMtPmlzcmNfZGF0YSA9IE5VTEw7CisJVElfR1BJ T19VTkxPQ0soc2MpOworCisJYXJtX2lycV9zZXRfbmFtZShpc3JjLCAiIik7CiAJcmV0dXJuICgw KTsKIH0KIAogc3RhdGljIGludAotdGlfZ3Bpb19kZWFjdGl2YXRlX3Jlc291cmNlKGRldmljZV90 IGRldiwgZGV2aWNlX3QgY2hpbGQsIGludCB0eXBlLCBpbnQgcmlkLAotCXN0cnVjdCByZXNvdXJj ZSAqcmVzKQordGlfZ3Bpb19tYXBfbnNwYyhzdHJ1Y3QgdGlfZ3Bpb19zb2Z0YyAqc2MsIHN0cnVj dCBhcm1faXJxc3JjICppc3JjKQogewotCWludCBwaW47CisJdV9pbnQgaXJxOwogCi0JaWYgKHR5 cGUgIT0gU1lTX1JFU19JUlEpCi0JCXJldHVybiAoRU5YSU8pOworCWlmIChpc3JjLT5pc3JjX25z cGNfdHlwZSAhPSBBUk1fSVJRX05TUENfUExBSU4gJiYKKwkgICAgaXNyYy0+aXNyY19uc3BjX3R5 cGUgIT0gQVJNX0lSUV9OU1BDX0lSUSkKKwkJcmV0dXJuIChFSU5WQUwpOwogCi0JLyogTWFzayB0 aGUgaW50ZXJydXB0LiAqLwotCXBpbiA9IHJtYW5fZ2V0X3N0YXJ0KHJlcyk7Ci0JdGlfZ3Bpb19t YXNrX2lycSgodm9pZCAqKSh1aW50cHRyX3QpcGluKTsKKwlpcnEgPSBpc3JjLT5pc3JjX25zcGNf bnVtOworCWlmIChpcnEgPj0gc2MtPnNjX21heHBpbikKKwkJcmV0dXJuIChFSU5WQUwpOwogCi0J cmV0dXJuICgwKTsKKwlyZXR1cm4gKHRpX2dwaW9fYXR0YWNoX2lzcmMoc2MsIGlzcmMsIGlycSkp OwogfQogCisjaWZkZWYgRkRUCiBzdGF0aWMgaW50Ci10aV9ncGlvX2NvbmZpZ19pbnRyKGRldmlj ZV90IGRldiwgaW50IGlycSwgZW51bSBpbnRyX3RyaWdnZXIgdHJpZywKLQllbnVtIGludHJfcG9s YXJpdHkgcG9sKQordGlfZ3Bpb19tYXBfZmR0KHN0cnVjdCB0aV9ncGlvX3NvZnRjICpzYywgc3Ry dWN0IGFybV9pcnFzcmMgKmlzcmMpCiB7Ci0Jc3RydWN0IHRpX2dwaW9fc29mdGMgKnNjOwotCXVp bnQzMl90IG9sZHJlZywgcmVnLCB2YWw7CisJdV9pbnQgaXJxOworCWVudW0gaW50cl90cmlnZ2Vy IHRyaWc7CisJZW51bSBpbnRyX3BvbGFyaXR5IHBvbDsKKwlpbnQgZXJyb3I7CiAKLQlzYyA9IGRl dmljZV9nZXRfc29mdGMoZGV2KTsKLQlpZiAodGlfZ3Bpb192YWxpZF9waW4oc2MsIGlycSkgIT0g MCkKKwkvKiBUaGUgZmlyc3QgY2VsbCBpcyB0aGUgaW50ZXJydXB0IG51bWJlci4KKwkgKiBUaGUg c2Vjb25kIGNlbGwgaXMgdXNlZCB0byBzcGVjaWZ5IGZsYWdzOgorCSAqCWJpdHNbMzowXSB0cmln Z2VyIHR5cGUgYW5kIGxldmVsIGZsYWdzOgorCSAqCQkxID0gbG93LXRvLWhpZ2ggZWRnZSB0cmln Z2VyZWQuCisJICoJCTIgPSBoaWdoLXRvLWxvdyBlZGdlIHRyaWdnZXJlZC4KKwkgKgkJNCA9IGFj dGl2ZSBoaWdoIGxldmVsLXNlbnNpdGl2ZS4KKwkgKgkJOCA9IGFjdGl2ZSBsb3cgbGV2ZWwtc2Vu c2l0aXZlLgorCSAqLworCWlmIChpc3JjLT5pc3JjX25jZWxscyAhPSAyKQogCQlyZXR1cm4gKEVJ TlZBTCk7CiAKLQkvKiBUaGVyZSBpcyBubyBzdGFuZGFyZCB0cmlnZ2VyIG9yIHBvbGFyaXR5LiAq LwotCWlmICh0cmlnID09IElOVFJfVFJJR0dFUl9DT05GT1JNIHx8IHBvbCA9PSBJTlRSX1BPTEFS SVRZX0NPTkZPUk0pCisJaXJxID0gaXNyYy0+aXNyY19jZWxsc1swXTsKKwlpZiAoaXJxID49IHNj LT5zY19tYXhwaW4pCiAJCXJldHVybiAoRUlOVkFMKTsKIAotCVRJX0dQSU9fTE9DSyhzYyk7CiAJ LyoKLQkgKiBUUk0gcmVjb21tZW5kcyBhZGQgdGhlIG5ldyBldmVudCBiZWZvcmUgcmVtb3ZlIHRo ZSBvbGQgb25lIHRvCi0JICogYXZvaWQgbG9zaW5nIGludGVycnVwdHMuCisJICogQWxsIGludGVy cnVwdCB0eXBlcyBjb3VsZCBiZSBzZXQgZm9yIGFuIGludGVycnVwdCBhdCBvbmUgbW9tZW50CisJ ICogaW4gdGhpcyBjb250cm9sbGVyLiBBdCBsZWFzdCwgdGhlIGNvbWJpbmF0aW9uIG9mICdsb3ct dG8taGlnaCcgYW5kCisJICogJ2hpZ2gtdG8tbG93JyBlZGdlIHRyaWdnZXJlZCBpbnRlcnJ1cHQg dHlwZXMgY2FuIG1ha2UgYSBzZW5zZS4KKwkgKiBIb3dldmVyIGl0J3Mgbm90IHBvc3NpYmxlIGR1 ZSB0byB0aGUgd2F5IGhvdyBpbnRyX3RyaWdnZXIgYW5kCisJICogaW50cl9wb2xhcml0eSBlbnVt cyBhcmUgZGVmaW5lZC4KKwkgKgorCSAqIEFueWhvdywgd2UgY291bGQgaW1wbGVtZW50ZWQgaXQg aW50ZXJuYWxseSBpbiBGRFQgY2FzZSBpZiBuZWVkZWQuCiAJICovCi0Jb2xkcmVnID0gdGlfZ3Bp b19pbnRyX3JlZyhzYywgaXJxKTsKLQlzYy0+c2NfaXJxX3RyaWdnZXJbaXJxXSA9IHRyaWc7Ci0J c2MtPnNjX2lycV9wb2xhcml0eVtpcnFdID0gcG9sOwotCXJlZyA9IHRpX2dwaW9faW50cl9yZWco c2MsIGlycSk7Ci0JaWYgKHJlZyAhPSAwKSB7Ci0JCS8qIEFwcGx5IHRoZSBuZXcgc2V0dGluZ3Mu ICovCi0JCXZhbCA9IHRpX2dwaW9fcmVhZF80KHNjLCBUSV9HUElPX0JBTksoaXJxKSwgcmVnKTsK LQkJdmFsIHw9IFRJX0dQSU9fTUFTSyhpcnEpOwotCQl0aV9ncGlvX3dyaXRlXzQoc2MsIFRJX0dQ SU9fQkFOSyhpcnEpLCByZWcsIHZhbCk7CisJc3dpdGNoIChpc3JjLT5pc3JjX2NlbGxzWzFdKSB7 CisJY2FzZSAxOgorCQl0cmlnID0gSU5UUl9UUklHR0VSX0VER0U7CisJCXBvbCA9IElOVFJfUE9M QVJJVFlfSElHSDsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQl0cmlnID0gSU5UUl9UUklHR0VSX0VE R0U7CisJCXBvbCA9IElOVFJfUE9MQVJJVFlfTE9XOworCQlicmVhazsKKwljYXNlIDQ6CisJCXRy aWcgPSBJTlRSX1RSSUdHRVJfTEVWRUw7CisJCXBvbCA9IElOVFJfUE9MQVJJVFlfSElHSDsKKwkJ YnJlYWs7CisJY2FzZSA4OgorCQl0cmlnID0gSU5UUl9UUklHR0VSX0xFVkVMOworCQlwb2wgPSBJ TlRSX1BPTEFSSVRZX0xPVzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIChFSU5WQUwp OwogCX0KLQlpZiAocmVnICE9IG9sZHJlZyAmJiBvbGRyZWcgIT0gMCkgewotCQkvKiBSZW1vdmUg dGhlIG9sZCBzZXR0aW5ncy4gKi8KLQkJdmFsID0gdGlfZ3Bpb19yZWFkXzQoc2MsIFRJX0dQSU9f QkFOSyhpcnEpLCBvbGRyZWcpOwotCQl2YWwgJj0gflRJX0dQSU9fTUFTSyhpcnEpOwotCQl0aV9n cGlvX3dyaXRlXzQoc2MsIFRJX0dQSU9fQkFOSyhpcnEpLCBvbGRyZWcsIHZhbCk7Ci0JfQotCVRJ X0dQSU9fVU5MT0NLKHNjKTsKIAorCWVycm9yID0gdGlfZ3Bpb19hdHRhY2hfaXNyYyhzYywgaXNy YywgaXJxKTsKKwlpZiAoZXJyb3IgIT0gMCkKKwkJcmV0dXJuIChlcnJvcik7CisKKwlpc3JjLT5p c3JjX25zcGNfdHlwZSA9IEFSTV9JUlFfTlNQQ19QTEFJTjsKKwlpc3JjLT5pc3JjX25zcGNfbnVt ID0gaXJxOworCWlzcmMtPmlzcmNfdHJpZyA9IHRyaWc7CisJaXNyYy0+aXNyY19wb2wgPSBwb2w7 CisKIAlyZXR1cm4gKDApOwogfQorI2VuZGlmCiAKIHN0YXRpYyBpbnQKLXRpX2dwaW9fc2V0dXBf aW50cihkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkLCBzdHJ1Y3QgcmVzb3VyY2UgKmlyZXMs Ci0JaW50IGZsYWdzLCBkcml2ZXJfZmlsdGVyX3QgKmZpbHQsIGRyaXZlcl9pbnRyX3QgKmhhbmRs ZXIsCi0Jdm9pZCAqYXJnLCB2b2lkICoqY29va2llcCkKK3RpX2dwaW9fcGljX3JlZ2lzdGVyKGRl dmljZV90IGRldiwgc3RydWN0IGFybV9pcnFzcmMgKmlzcmMsCisgICAgYm9vbGVhbl90ICppc19w ZXJjcHUpCiB7Ci0Jc3RydWN0IHRpX2dwaW9fc29mdGMgKnNjOwotCXN0cnVjdCBpbnRyX2V2ZW50 ICpldmVudDsKLQlpbnQgcGluLCBlcnJvcjsKKwlzdHJ1Y3QgdGlfZ3Bpb19zb2Z0YyAqc2MgPSBk ZXZpY2VfZ2V0X3NvZnRjKGRldik7CiAKLQlzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKLQlw aW4gPSBybWFuX2dldF9zdGFydChpcmVzKTsKLQlpZiAodGlfZ3Bpb192YWxpZF9waW4oc2MsIHBp bikgIT0gMCkKLQkJcGFuaWMoIiVzOiBiYWQgcGluICVkIiwgX19mdW5jX18sIHBpbik7CisJKmlz X3BlcmNwdSA9IEZBTFNFOwogCi0JZXZlbnQgPSBzYy0+c2NfZXZlbnRzW3Bpbl07Ci0JaWYgKGV2 ZW50ID09IE5VTEwpIHsKLQkJZXJyb3IgPSBpbnRyX2V2ZW50X2NyZWF0ZSgmZXZlbnQsICh2b2lk ICopKHVpbnRwdHJfdClwaW4sIDAsCi0JCSAgICBwaW4sIHRpX2dwaW9fbWFza19pcnEsIHRpX2dw aW9fdW5tYXNrX2lycSwgTlVMTCwgTlVMTCwKLQkJICAgICJncGlvJWQgcGluJWQ6IiwgZGV2aWNl X2dldF91bml0KGRldiksIHBpbik7Ci0JCWlmIChlcnJvciAhPSAwKQotCQkJcmV0dXJuIChlcnJv cik7Ci0JCXNjLT5zY19ldmVudHNbcGluXSA9IGV2ZW50OwotCX0KLQlpbnRyX2V2ZW50X2FkZF9o YW5kbGVyKGV2ZW50LCBkZXZpY2VfZ2V0X25hbWV1bml0KGNoaWxkKSwgZmlsdCwKLQkgICAgaGFu ZGxlciwgYXJnLCBpbnRyX3ByaW9yaXR5KGZsYWdzKSwgZmxhZ3MsIGNvb2tpZXApOworCWlmIChp c3JjLT5pc3JjX3R5cGUgPT0gQVJNX0lTUkNUX05BTUVTUEFDRSkKKwkJcmV0dXJuICh0aV9ncGlv X21hcF9uc3BjKHNjLCBpc3JjKSk7CisjaWZkZWYgRkRUCisJZWxzZSBpZiAoaXNyYy0+aXNyY190 eXBlID09IEFSTV9JU1JDVF9GRFQpCisJCXJldHVybiAodGlfZ3Bpb19tYXBfZmR0KHNjLCBpc3Jj KSk7CisjZW5kaWYKKwllbHNlCisJCXJldHVybiAoRUlOVkFMKTsKK30KIAotCXJldHVybiAoMCk7 CitzdGF0aWMgdm9pZAordGlfZ3Bpb19waWNfZW5hYmxlX2ludHIoZGV2aWNlX3QgZGV2LCBzdHJ1 Y3QgYXJtX2lycXNyYyAqaXNyYykKK3sKKwlzdHJ1Y3QgdGlfZ3Bpb19zb2Z0YyAqc2MgPSBkZXZp Y2VfZ2V0X3NvZnRjKGRldik7CisJdV9pbnQgaXJxID0gKHVfaW50KWlzcmMtPmlzcmNfZGF0YTsK KworCS8qIFRoZSBkZWZhdWx0IGlzIGFjdGl2ZS1sb3cgaW50ZXJydXB0cy4gKi8KKwlpZiAoaXNy Yy0+aXNyY190cmlnID09IElOVFJfVFJJR0dFUl9DT05GT1JNKQorCQlpc3JjLT5pc3JjX3RyaWcg PSBJTlRSX1RSSUdHRVJfTEVWRUw7CisJaWYgKGlzcmMtPmlzcmNfcG9sID09IElOVFJfUE9MQVJJ VFlfQ09ORk9STSkKKwkJaXNyYy0+aXNyY19wb2wgPSBJTlRSX1BPTEFSSVRZX0xPVzsKKworCXRp X2dwaW9faXJxX2NvbmZpZyhzYywgaXJxLCBpc3JjLT5pc3JjX3RyaWcsIGlzcmMtPmlzcmNfcG9s KTsKIH0KIAorc3RhdGljIHZvaWQKK3RpX2dwaW9fcGljX2VuYWJsZV9zb3VyY2UoZGV2aWNlX3Qg ZGV2LCBzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYykKK3sKKwlzdHJ1Y3QgdGlfZ3Bpb19zb2Z0YyAq c2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJdV9pbnQgaXJxID0gKHVfaW50KWlzcmMtPmlz cmNfZGF0YTsKKworCWFybV9pcnFfbWVtb3J5X2JhcnJpZXIoaXJxKTsKKwl0aV9ncGlvX2lycV91 bm1hc2soc2MsIGlycSk7Cit9CisKK3N0YXRpYyB2b2lkCit0aV9ncGlvX3BpY19kaXNhYmxlX3Nv dXJjZShkZXZpY2VfdCBkZXYsIHN0cnVjdCBhcm1faXJxc3JjICppc3JjKQoreworCXN0cnVjdCB0 aV9ncGlvX3NvZnRjICpzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKwl1X2ludCBpcnEgPSAo dV9pbnQpaXNyYy0+aXNyY19kYXRhOworCisJdGlfZ3Bpb19pcnFfbWFzayhzYywgaXJxLCBGQUxT RSk7Cit9CisKIHN0YXRpYyBpbnQKLXRpX2dwaW9fdGVhcmRvd25faW50cihkZXZpY2VfdCBkZXYs IGRldmljZV90IGNoaWxkLCBzdHJ1Y3QgcmVzb3VyY2UgKmlyZXMsCi0Jdm9pZCAqY29va2llKQor dGlfZ3Bpb19waWNfdW5yZWdpc3RlcihkZXZpY2VfdCBkZXYsIHN0cnVjdCBhcm1faXJxc3JjICpp c3JjKQogewotCXN0cnVjdCB0aV9ncGlvX3NvZnRjICpzYzsKLQlpbnQgcGluLCBlcnI7CisJc3Ry dWN0IHRpX2dwaW9fc29mdGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCXVfaW50IGly cSA9ICh1X2ludClpc3JjLT5pc3JjX2RhdGE7CiAKLQlzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2 KTsKLQlwaW4gPSBybWFuX2dldF9zdGFydChpcmVzKTsKLQlpZiAodGlfZ3Bpb192YWxpZF9waW4o c2MsIHBpbikgIT0gMCkKLQkJcGFuaWMoIiVzOiBiYWQgcGluICVkIiwgX19mdW5jX18sIHBpbik7 Ci0JaWYgKHNjLT5zY19ldmVudHNbcGluXSA9PSBOVUxMKQotCQlwYW5pYygiVHJ5aW5nIHRvIHRl YXJkb3duIHVub2NjdXBpZWQgSVJRIik7Ci0JZXJyID0gaW50cl9ldmVudF9yZW1vdmVfaGFuZGxl cihjb29raWUpOwotCWlmICghZXJyKQotCQlzYy0+c2NfZXZlbnRzW3Bpbl0gPSBOVUxMOworCXJl dHVybiAodGlfZ3Bpb19kZXRhY2hfaXNyYyhzYywgaXNyYywgaXJxKSk7Cit9CiAKLQlyZXR1cm4g KGVycik7CitzdGF0aWMgdm9pZAordGlfZ3Bpb19waWNfcHJlX2l0aHJlYWQoZGV2aWNlX3QgZGV2 LCBzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYykKK3sKKwlzdHJ1Y3QgdGlfZ3Bpb19zb2Z0YyAqc2Mg PSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJdV9pbnQgaXJxID0gKHVfaW50KWlzcmMtPmlzcmNf ZGF0YTsKKworCWlmIChpc3JjLT5pc3JjX3RyaWcgPT0gSU5UUl9UUklHR0VSX0xFVkVMKQorCQl0 aV9ncGlvX2lycV9tYXNrKHNjLCBpcnEsIFRSVUUpOworCWVsc2UKKwkJdGlfZ3Bpb19pcnFfbWFz ayhzYywgaXJxLCBGQUxTRSk7CiB9CiAKK3N0YXRpYyB2b2lkCit0aV9ncGlvX3BpY19wb3N0X2l0 aHJlYWQoZGV2aWNlX3QgZGV2LCBzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYykKK3sKKworCXRpX2dw aW9fcGljX2VuYWJsZV9zb3VyY2UoZGV2LCBpc3JjKTsKK30KKworc3RhdGljIHZvaWQKK3RpX2dw aW9fcGljX3Bvc3RfZmlsdGVyKGRldmljZV90IGRldiwgc3RydWN0IGFybV9pcnFzcmMgKmlzcmMp Cit7CisJc3RydWN0IHRpX2dwaW9fc29mdGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwor CXVfaW50IGlycSA9ICh1X2ludClpc3JjLT5pc3JjX2RhdGE7CisKKwlpZiAoaXNyYy0+aXNyY190 cmlnID09IElOVFJfVFJJR0dFUl9MRVZFTCkKKwkJdGlfZ3Bpb19pcnFfZW9pKHNjLCBpcnEpOwor fQorCiBzdGF0aWMgcGhhbmRsZV90CiB0aV9ncGlvX2dldF9ub2RlKGRldmljZV90IGJ1cywgZGV2 aWNlX3QgZGV2KQogewpAQCAtMTA4NywxMiArMTI3NSwxOSBAQAogCURFVk1FVEhPRChncGlvX3Bp bl9zZXQsIHRpX2dwaW9fcGluX3NldCksCiAJREVWTUVUSE9EKGdwaW9fcGluX3RvZ2dsZSwgdGlf Z3Bpb19waW5fdG9nZ2xlKSwKIAorCS8qIEludGVycnVwdCBjb250cm9sbGVyIGludGVyZmFjZSAq LworCURFVk1FVEhPRChwaWNfZGlzYWJsZV9zb3VyY2UsCXRpX2dwaW9fcGljX2Rpc2FibGVfc291 cmNlKSwKKwlERVZNRVRIT0QocGljX2VuYWJsZV9pbnRyLAl0aV9ncGlvX3BpY19lbmFibGVfaW50 ciksCisJREVWTUVUSE9EKHBpY19lbmFibGVfc291cmNlLAl0aV9ncGlvX3BpY19lbmFibGVfc291 cmNlKSwKKwlERVZNRVRIT0QocGljX3Bvc3RfZmlsdGVyLAl0aV9ncGlvX3BpY19wb3N0X2ZpbHRl ciksCisJREVWTUVUSE9EKHBpY19wb3N0X2l0aHJlYWQsCXRpX2dwaW9fcGljX3Bvc3RfaXRocmVh ZCksCisJREVWTUVUSE9EKHBpY19wcmVfaXRocmVhZCwJdGlfZ3Bpb19waWNfcHJlX2l0aHJlYWQp LAorCURFVk1FVEhPRChwaWNfcmVnaXN0ZXIsCQl0aV9ncGlvX3BpY19yZWdpc3RlciksCisJREVW TUVUSE9EKHBpY191bnJlZ2lzdGVyLAl0aV9ncGlvX3BpY191bnJlZ2lzdGVyKSwKKwogCS8qIEJ1 cyBpbnRlcmZhY2UgKi8KLQlERVZNRVRIT0QoYnVzX2FjdGl2YXRlX3Jlc291cmNlLCB0aV9ncGlv X2FjdGl2YXRlX3Jlc291cmNlKSwKLQlERVZNRVRIT0QoYnVzX2RlYWN0aXZhdGVfcmVzb3VyY2Us IHRpX2dwaW9fZGVhY3RpdmF0ZV9yZXNvdXJjZSksCi0JREVWTUVUSE9EKGJ1c19jb25maWdfaW50 ciwgdGlfZ3Bpb19jb25maWdfaW50ciksCi0JREVWTUVUSE9EKGJ1c19zZXR1cF9pbnRyLCB0aV9n cGlvX3NldHVwX2ludHIpLAotCURFVk1FVEhPRChidXNfdGVhcmRvd25faW50ciwgdGlfZ3Bpb190 ZWFyZG93bl9pbnRyKSwKKwlERVZNRVRIT0QoYnVzX3NldHVwX2ludHIsIGJ1c19nZW5lcmljX3Nl dHVwX2ludHIpLAorCURFVk1FVEhPRChidXNfdGVhcmRvd25faW50ciwgYnVzX2dlbmVyaWNfdGVh cmRvd25faW50ciksCiAKIAkvKiBvZndfYnVzIGludGVyZmFjZSAqLwogCURFVk1FVEhPRChvZndf YnVzX2dldF9ub2RlLCB0aV9ncGlvX2dldF9ub2RlKSwKQEAgLTExMDUsMyArMTMwMCw5NiBAQAog CXRpX2dwaW9fbWV0aG9kcywKIAlzaXplb2Yoc3RydWN0IHRpX2dwaW9fc29mdGMpLAogfTsKKwor CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqICAgICBURVNUIE1PRFVMRQorICoKKyAqIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0cnVjdCB0ZXN0X2dwaW9fc29mdGMgeworCXN0cnVjdCBy ZXNvdXJjZQkqc2NfaXJxX3JlczsKKwl2b2lkCQkqc2NfaXJxX2hkbDsKK307CisKK3N0YXRpYyBp bnQKK3Rlc3RfZ3Bpb19pbnRyKHZvaWQgKmFyZykKK3sKKwkvL3N0cnVjdCB0ZXN0X2dwaW9fc29m dGMgKnNjID0gYXJnOworCisJcHJpbnRmKCIlczogZ290IGludGVycnVwdFxuIiwgX19mdW5jX18p OworCXJldHVybiAoRklMVEVSX0hBTkRMRUQpOworfQorCitzdGF0aWMgaW50Cit0ZXN0X2dwaW9f cHJvYmUoZGV2aWNlX3QgZGV2KQoreworCWlmICghb2Z3X2J1c19pc19jb21wYXRpYmxlKGRldiwg ImdwaW8tdGVzdCIpKQorCQlyZXR1cm4gKEVOWElPKTsKKworCWRldmljZV9zZXRfZGVzYyhkZXYs ICJUZXN0IEdQSU8gTW9kdWxlIik7CisJcmV0dXJuKEJVU19QUk9CRV9ERUZBVUxUKTsKK30KKwor c3RhdGljIGludAordGVzdF9ncGlvX2F0dGFjaChkZXZpY2VfdCBkZXYpCit7CisJc3RydWN0IHRl c3RfZ3Bpb19zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJaW50IHJpZCwgZXJy OworCisJcmlkID0gMDsKKwlzYy0+c2NfaXJxX3JlcyA9IGJ1c19hbGxvY19yZXNvdXJjZV9hbnko ZGV2LCBTWVNfUkVTX0lSUSwgJnJpZCwKKwkgICAgUkZfQUNUSVZFKTsKKwlpZiAoc2MtPnNjX2ly cV9yZXMgPT0gTlVMTCkgeworCQlkZXZpY2VfcHJpbnRmKGRldiwgIkNvdWxkIG5vdCBhbGxvY2F0 ZSBpcnFcbiIpOworCQlyZXR1cm4gKEVOWElPKTsKKwl9CisKKyNpZiAwCisjaWZkZWYgU09DX1RJ X0FNMzM1WAorCWVyciA9IEJVU19DT05GSUdfSU5UUihkZXYsIHJtYW5fZ2V0X3N0YXJ0KHNjLT5z Y19pcnFfcmVzKSwKKwkgICAgSU5UUl9UUklHR0VSX0xFVkVMLCBJTlRSX1BPTEFSSVRZX0hJR0gp OworCWlmIChlcnIpCisJCWRldmljZV9wcmludGYoZGV2LCAiQ291bGQgbm90IGNvbmZpZyBpcnEs ICVkXG4iLCBlcnIpOworI2VuZGlmCisjaWZkZWYgU09DX09NQVA0CisJZXJyID0gQlVTX0NPTkZJ R19JTlRSKGRldiwgcm1hbl9nZXRfc3RhcnQoc2MtPnNjX2lycV9yZXMpLAorCSAgICBJTlRSX1RS SUdHRVJfRURHRSwgSU5UUl9QT0xBUklUWV9MT1cpOworCWlmIChlcnIpCisJCWRldmljZV9wcmlu dGYoZGV2LCAiQ291bGQgbm90IGNvbmZpZyBpcnEsICVkXG4iLCBlcnIpOworI2VuZGlmCisjZW5k aWYKKwllcnIgPSBidXNfc2V0dXBfaW50cihkZXYsIHNjLT5zY19pcnFfcmVzLCBJTlRSX1RZUEVf TUlTQyB8IElOVFJfTVBTQUZFLAorCSAgICB0ZXN0X2dwaW9faW50ciwgTlVMTCwgc2MsICZzYy0+ c2NfaXJxX2hkbCk7CisJaWYgKGVycikgeworCQlkZXZpY2VfcHJpbnRmKGRldiwgIkNvdWxkIG5v dCBzZXR1cCBpcnEsICVkXG4iLCBlcnIpOworCQlidXNfcmVsZWFzZV9yZXNvdXJjZShkZXYsIFNZ U19SRVNfSVJRLCAwLCBzYy0+c2NfaXJxX3Jlcyk7CisJCXJldHVybiAoRU5YSU8pOworCX0KKwor CWVyciA9IGJ1c19kZXNjcmliZV9pbnRyKGRldiwgc2MtPnNjX2lycV9yZXMsIHNjLT5zY19pcnFf aGRsLCAiWFgiKTsKKwlpZiAoZXJyKQorCQlkZXZpY2VfcHJpbnRmKGRldiwgIkNvdWxkIG5vdCBk ZXNjcmliZSBpcnEsICVkXG4iLCBlcnIpOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGRl dmljZV9tZXRob2RfdCB0ZXN0X2dwaW9fbWV0aG9kc1tdID0geworCS8qIGJ1cyBpbnRlcmZhY2Ug Ki8KKwlERVZNRVRIT0QoZGV2aWNlX3Byb2JlLCB0ZXN0X2dwaW9fcHJvYmUpLAorCURFVk1FVEhP RChkZXZpY2VfYXR0YWNoLCB0ZXN0X2dwaW9fYXR0YWNoKSwKKworCXswLCAwfSwKK307CisKK2Ry aXZlcl90IHRlc3RfZ3Bpb19kcml2ZXIgPSB7CisJInRlc3RfZ3BpbyIsCisJdGVzdF9ncGlvX21l dGhvZHMsCisJc2l6ZW9mKHN0cnVjdCB0ZXN0X2dwaW9fc29mdGMpLAorfTsKKworc3RhdGljIGRl dmNsYXNzX3QgdGVzdF9ncGlvX2RldmNsYXNzOworCitEUklWRVJfTU9EVUxFKHRlc3RfZ3Bpbywg c2ltcGxlYnVzLCB0ZXN0X2dwaW9fZHJpdmVyLCB0ZXN0X2dwaW9fZGV2Y2xhc3MsCisgICAgMCwg MCk7CkluZGV4OiBzeXMvYXJtL3RpL3RpX2dwaW8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvYXJtL3Rp L3RpX2dwaW8uaAkocmV2aXNpb24gMjc5Njg1KQorKysgc3lzL2FybS90aS90aV9ncGlvLmgJKHdv cmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDEyIEBACiAgKi8KICNkZWZpbmUJTUFYX0dQSU9fSU5U UlMJCQk4CiAKK3N0cnVjdCB0aV9ncGlvX2lycV9hcmcgeworCXN0cnVjdCB0aV9ncGlvX3NvZnRj CSppYV9zYzsKKwl1aW50MTZfdAkJaWFfYmFuazsJLyogR1BJTyBiYW5rICovCisJdWludDE2X3QJ CWlhX2lkeDsJCS8qIGlycSBvbiB0aGUgYmFuayAqLworfTsKKwogLyoqCiAgKglTdHJ1Y3R1cmUg dGhhdCBzdG9yZXMgdGhlIGRyaXZlciBjb250ZXh0LgogICoKQEAgLTQ4LDEwICs1NCw2IEBACiAJ ZGV2aWNlX3QJCXNjX2RldjsKIAlkZXZpY2VfdAkJc2NfYnVzZGV2OwogCi0JLyogSW50ZXJydXB0 IHRyaWdnZXIgdHlwZSBhbmQgbGV2ZWwuICovCi0JZW51bSBpbnRyX3RyaWdnZXIJKnNjX2lycV90 cmlnZ2VyOwotCWVudW0gaW50cl9wb2xhcml0eQkqc2NfaXJxX3BvbGFyaXR5OwotCiAJaW50CQkJ c2NfbWF4cGluOwogCXN0cnVjdCBtdHgJCXNjX210eDsKIApAQCAtNjMsMTAgKzY1LDExIEBACiAJ c3RydWN0IHJlc291cmNlCQkqc2NfbWVtX3Jlc1tNQVhfR1BJT19CQU5LU107CiAJc3RydWN0IHJl c291cmNlCQkqc2NfaXJxX3Jlc1tNQVhfR1BJT19JTlRSU107CiAKLQkvKiBJbnRlcnJ1cHQgZXZl bnRzLiAqLwotCXN0cnVjdCBpbnRyX2V2ZW50CSoqc2NfZXZlbnRzOworCS8qIEludGVycnVwdCBz b3VyY2VzIHJlZ2lzdGVyZWQgaW4gaW50ZXJydXB0IGNvbnRyb2xsZXIuICovCisJc3RydWN0IGFy bV9pcnFzcmMJKipzY19pcnFzOwogCi0JLyogVGhlIGhhbmRsZSBmb3IgdGhlIHJlZ2lzdGVyIElS USBoYW5kbGVycy4gKi8KKwkvKiBUaGUgaGFuZGxlIGFuZCBhcmd1bWVudCBmb3IgdGhlIHJlZ2lz dGVyIElSUSBoYW5kbGVycy4gKi8KKwlzdHJ1Y3QgdGlfZ3Bpb19pcnFfYXJnCXNjX2lycV9hcmdb TUFYX0dQSU9fSU5UUlNdOwogCXZvaWQJCQkqc2NfaXJxX2hkbFtNQVhfR1BJT19JTlRSU107CiB9 OwogCkluZGV4OiBzeXMvYm9vdC9mZHQvZHRzL2FybS9hbTMzNXguZHRzaQo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t LSBzeXMvYm9vdC9mZHQvZHRzL2FybS9hbTMzNXguZHRzaQkocmV2aXNpb24gMjc5Njg1KQorKysg c3lzL2Jvb3QvZmR0L2R0cy9hcm0vYW0zMzV4LmR0c2kJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcg KzIyLDcgQEAKICAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKICAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKICAqIFNVQ0gg REFNQUdFLgotICogCisgKgogICogJEZyZWVCU0QkCiAgKi8KIApAQCAtMTAwLDcgKzEwMCw3IEBA CiAJCQlpbnRlcnJ1cHRzID0gPDkxPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JkFJTlRDPjsK IAkJfTsKLSAJCQorCiAJCUdQSU86IGdwaW8gewogCQkJI2dwaW8tY2VsbHMgPSA8Mz47CiAJCQlj b21wYXRpYmxlID0gInRpLGdwaW8iOwpAQCAtMTEyLDcgKzExMiw3IEBACiAJCQlpbnRlcnJ1cHRz ID0gPCA5NiA5NyA5OCA5OSAzMiAzMyA2MiA2MyA+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwm QUlOVEM+OwogCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7Ci0JCQkjaW50ZXJydXB0LWNlbGxzID0g PDE+OworCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKIAkJfTsKIAogCQl1YXJ0MDogc2VyaWFs QDQ0RTA5MDAwIHsKQEAgLTEyNCw3ICsxMjQsNyBAQAogIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwg NDgwMDAwMDAgPjsKIAkJCXVhcnQtZGV2aWNlLWlkID0gPCAwID47CiAgCQl9OwotIAkJCisKICAJ CXVhcnQxOiBzZXJpYWxANDgwMjIwMDAgewogIAkJCWNvbXBhdGlibGUgPSAidGksbnMxNjU1MCI7 CiAgCQkJcmVnID0gPDB4NDgwMjIwMDAgMHgxMDAwPjsKQEAgLTEzMSwxMSArMTMxLDExIEBACiAg CQkJcmVnLXNoaWZ0ID0gPDI+OwogIAkJCWludGVycnVwdHMgPSA8IDczID47CiAgCQkJaW50ZXJy dXB0LXBhcmVudCA9IDwmQUlOVEM+OwotIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwgNDgwMDAwMDAg PjsgCisgCQkJY2xvY2stZnJlcXVlbmN5ID0gPCA0ODAwMDAwMCA+OwogCQkJdWFydC1kZXZpY2Ut aWQgPSA8IDEgPjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAgCQl9OwotIAkJCisKICAJCXVh cnQyOiBzZXJpYWxANDgwMjQwMDAgewogIAkJCWNvbXBhdGlibGUgPSAidGksbnMxNjU1MCI7CiAg CQkJcmVnID0gPDB4NDgwMjQwMDAgMHgxMDAwPjsKQEAgLTE0MiwxMSArMTQyLDExIEBACiAgCQkJ cmVnLXNoaWZ0ID0gPDI+OwogIAkJCWludGVycnVwdHMgPSA8IDc0ID47CiAgCQkJaW50ZXJydXB0 LXBhcmVudCA9IDwmQUlOVEM+OwotIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwgNDgwMDAwMDAgPjsg CisgCQkJY2xvY2stZnJlcXVlbmN5ID0gPCA0ODAwMDAwMCA+OwogCQkJdWFydC1kZXZpY2UtaWQg PSA8IDIgPjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAgCQl9OwotIAkJCisKICAJCXVhcnQz OiBzZXJpYWxANDgxYTYwMDAgewogIAkJCWNvbXBhdGlibGUgPSAidGksbnMxNjU1MCI7CiAgCQkJ cmVnID0gPDB4NDgxQTYwMDAgMHgxMDAwPjsKQEAgLTE1MywxMSArMTUzLDExIEBACiAgCQkJcmVn LXNoaWZ0ID0gPDI+OwogIAkJCWludGVycnVwdHMgPSA8IDQ0ID47CiAgCQkJaW50ZXJydXB0LXBh cmVudCA9IDwmQUlOVEM+OwotIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwgNDgwMDAwMDAgPjsgCisg CQkJY2xvY2stZnJlcXVlbmN5ID0gPCA0ODAwMDAwMCA+OwogCQkJdWFydC1kZXZpY2UtaWQgPSA8 IDMgPjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAgCQl9OwotIAorCiAgCQl1YXJ0NDogc2Vy aWFsQDQ4MWE4MDAwIHsKICAJCQljb21wYXRpYmxlID0gInRpLG5zMTY1NTAiOwogIAkJCXJlZyA9 IDwweDQ4MUE4MDAwIDB4MTAwMD47CkBAIC0xNjQsMTEgKzE2NCwxMSBAQAogIAkJCXJlZy1zaGlm dCA9IDwyPjsKICAJCQlpbnRlcnJ1cHRzID0gPCA0NSA+OwogIAkJCWludGVycnVwdC1wYXJlbnQg PSA8JkFJTlRDPjsKLSAJCQljbG9jay1mcmVxdWVuY3kgPSA8IDQ4MDAwMDAwID47IAorIAkJCWNs b2NrLWZyZXF1ZW5jeSA9IDwgNDgwMDAwMDAgPjsKIAkJCXVhcnQtZGV2aWNlLWlkID0gPCA0ID47 CiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogIAkJfTsKLSAKKwogIAkJdWFydDU6IHNlcmlhbEA0 ODFhYTAwMCB7CiAgCQkJY29tcGF0aWJsZSA9ICJ0aSxuczE2NTUwIjsKICAJCQlyZWcgPSA8MHg0 ODFBQTAwMCAweDEwMDA+OwpAQCAtMTc1LDcgKzE3NSw3IEBACiAgCQkJcmVnLXNoaWZ0ID0gPDI+ OwogIAkJCWludGVycnVwdHMgPSA8IDQ2ID47CiAgCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmQUlO VEM+OwotIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwgNDgwMDAwMDAgPjsgCisgCQkJY2xvY2stZnJl cXVlbmN5ID0gPCA0ODAwMDAwMCA+OwogCQkJdWFydC1kZXZpY2UtaWQgPSA8IDUgPjsKIAkJCXN0 YXR1cyA9ICJkaXNhYmxlZCI7CiAgIAkJfTsKSW5kZXg6IHN5cy9ib290L2ZkdC9kdHMvYXJtL2Jl YWdsZWJvbmUtYmxhY2suZHRzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9ib290L2ZkdC9kdHMvYXJtL2Jl YWdsZWJvbmUtYmxhY2suZHRzCShyZXZpc2lvbiAyNzk2ODUpCisrKyBzeXMvYm9vdC9mZHQvZHRz L2FybS9iZWFnbGVib25lLWJsYWNrLmR0cwkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBA QAogICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQogICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgogICogU1VDSCBEQU1BR0Uu Ci0gKiAKKyAqCiAgKiAkRnJlZUJTRCQKICAqLwogCkBAIC0xMTAsMTQgKzExMCwxNCBAQAogCQkJ CSJHUE1DX0JFbjEiLCAiZ3BpbzFfMjgiLCAiaW5wdXRfcHVsbGRvd24iLAogCQkJCSJHUE1DX0NT bjAiLCAiZ3BpbzFfMjkiLCAiaW5wdXRfcHVsbGRvd24iLAogCQkJCSJHUE1DX0NMSyIsICJncGlv Ml8xIiwgImlucHV0X3B1bGxkb3duIiwKLQkJCQkiTENEX0RBVEEwIiwgImdwaW8yXzYiLCAiaW5w dXRfcHVsbGRvd24iLCAKLQkJCQkiTENEX0RBVEExIiwgImdwaW8yXzciLCAiaW5wdXRfcHVsbGRv d24iLCAKLQkJCQkiTENEX0RBVEEyIiwgImdwaW8yXzgiLCAiaW5wdXRfcHVsbGRvd24iLCAKLQkJ CQkiTENEX0RBVEEzIiwgImdwaW8yXzkiLCAiaW5wdXRfcHVsbGRvd24iLCAKLQkJCQkiTENEX0RB VEE0IiwgImdwaW8yXzEwIiwgImlucHV0X3B1bGxkb3duIiwgCi0JCQkJIkxDRF9EQVRBNSIsICJn cGlvMl8xMSIsICJpbnB1dF9wdWxsZG93biIsIAotCQkJCSJMQ0RfREFUQTYiLCAiZ3BpbzJfMTIi LCAiaW5wdXRfcHVsbGRvd24iLCAKLQkJCQkiTENEX0RBVEE3IiwgImdwaW8yXzEzIiwgImlucHV0 X3B1bGxkb3duIiwgCisJCQkJIkxDRF9EQVRBMCIsICJncGlvMl82IiwgImlucHV0X3B1bGxkb3du IiwKKwkJCQkiTENEX0RBVEExIiwgImdwaW8yXzciLCAiaW5wdXRfcHVsbGRvd24iLAorCQkJCSJM Q0RfREFUQTIiLCAiZ3BpbzJfOCIsICJpbnB1dF9wdWxsZG93biIsCisJCQkJIkxDRF9EQVRBMyIs ICJncGlvMl85IiwgImlucHV0X3B1bGxkb3duIiwKKwkJCQkiTENEX0RBVEE0IiwgImdwaW8yXzEw IiwgImlucHV0X3B1bGxkb3duIiwKKwkJCQkiTENEX0RBVEE1IiwgImdwaW8yXzExIiwgImlucHV0 X3B1bGxkb3duIiwKKwkJCQkiTENEX0RBVEE2IiwgImdwaW8yXzEyIiwgImlucHV0X3B1bGxkb3du IiwKKwkJCQkiTENEX0RBVEE3IiwgImdwaW8yXzEzIiwgImlucHV0X3B1bGxkb3duIiwKIAkJCQki TENEX1ZTWU5DIiwgImdwaW8yXzIyIiwgImlucHV0X3B1bGxkb3duIiwKIAkJCQkiTENEX0hTWU5D IiwgImdwaW8yXzIzIiwgImlucHV0X3B1bGxkb3duIiwKIAkJCQkiTENEX1BDTEsiLCAiZ3BpbzJf MjQiLCAiaW5wdXRfcHVsbGRvd24iLApAQCAtMTQ0LDcgKzE0NCw3IEBACiAJCQlzdGF0dXMgPSAi b2theSI7CiAJCQlub24tcmVtb3ZhYmxlOwogCQl9OwotIAorCiAJCWkyY0A0NGUwYjAwMCB7CiAJ CQlwbWljQDQ4IHsKIAkJCQljb21wYXRpYmxlID0gInRpLGFtMzM1eC1wbWljIjsKQEAgLTE1MSw2 ICsxNTEsMTMgQEAKIAkJCQlyZWcgPSA8MHg0OD47CiAJCQl9OwogCQl9OworCisJCXRlc3RAMCB7 CisJCQljb21wYXRpYmxlID0gImdwaW8tdGVzdCI7CisJCQlyZWcgPSA8MHgwPjsKKwkJCWludGVy cnVwdC1wYXJlbnQgPSA8JkdQSU8+OworCQkJaW50ZXJydXB0cyA9IDw2MCAweDQ+OworCQl9Owog CX07CiAKIAlsZWRzIHsKSW5kZXg6IHN5cy9ib290L2ZkdC9kdHMvYXJtL3BhbmRhYm9hcmQuZHRz Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLS0tIHN5cy9ib290L2ZkdC9kdHMvYXJtL3BhbmRhYm9hcmQuZHRzCShyZXZp c2lvbiAyNzk2ODUpCisrKyBzeXMvYm9vdC9mZHQvZHRzL2FybS9wYW5kYWJvYXJkLmR0cwkod29y a2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNM VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQogICogT1VU IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT SUJJTElUWSBPRgogICogU1VDSCBEQU1BR0UuCi0gKiAKKyAqCiAgKiAkRnJlZUJTRCQKICAqLwog CkBAIC03MCw3ICs3MCw3IEBACiAJCQkgICAgMHg0YTAwNDAwMCAweDEwMDAKIAkJCSAgICAweDRh MDA4MDAwIDB4ODAwMD47CiAJCX07Ci0JCQkJICAgICAKKwogCQlwbDMxMEA0ODI0MjAwMCB7CiAJ CQljb21wYXRpYmxlID0gImFybSxwbDMxMCI7CiAJCQlyZWcgPSA8IDB4NDgyNDIwMDAgMHgxMDAw ID47CkBAIC0xMDEsNyArMTAxLDcgQEAKIAkJCWNvbXBhdGlibGUgPSAidGksc2NtIjsKIAkJCXJl ZyA9CTwgMHg0YTEwMDAwMCAweDEwMDAgPjsKIAkJCS8qIFNldCBvZiB0cmlwbGV0cyA8IHBhZG5h bWUsIG11eG5hbWUsIHBhZHN0YXRlPiAqLwotCQkJc2NtLXBhZC1jb25maWcgPSAKKwkJCXNjbS1w YWQtY29uZmlnID0KIAkJCQkiYWcxOSIsICJ1c2JiMV91bHBpcGh5X3N0cCIsICJvdXRwdXQiLAog CQkJCSJhZTE4IiwgInVzYmIxX3VscGlwaHlfY2xrIiwgImlucHV0X3B1bGxkb3duIiwKIAkJCQki YWYxOSIsICJ1c2JiMV91bHBpcGh5X2RpciIsICJpbnB1dF9wdWxsZG93biIsCkBAIC0xMTMsNyAr MTEzLDggQEAKIAkJCQkiYWgxNyIsICJ1c2JiMV91bHBpcGh5X2RhdDQiLCAiaW5wdXRfcHVsbGRv d24iLAogCQkJCSJhZTE2IiwgInVzYmIxX3VscGlwaHlfZGF0NSIsICJpbnB1dF9wdWxsZG93biIs CiAJCQkJImFmMTYiLCAidXNiYjFfdWxwaXBoeV9kYXQ2IiwgImlucHV0X3B1bGxkb3duIiwKLQkJ CQkiYWcxNiIsICJ1c2JiMV91bHBpcGh5X2RhdDciLCAiaW5wdXRfcHVsbGRvd24iOworCQkJCSJh ZzE2IiwgInVzYmIxX3VscGlwaHlfZGF0NyIsICJpbnB1dF9wdWxsZG93biIsCisJCQkJImFjMjgi LCAiZ3Bpb18xMTMiLCAiaW5wdXRfcHVsbHVwIjsKIAkJfTsKIAogCQlHUElPOiBncGlvIHsKQEAg LTEyOCwxMSArMTI5LDEzIEBACiAJCQkJMHg0ODA1ZDAwMCAweDEwMDA+OwogCQkJaW50ZXJydXB0 cyA9IDw2MSA2MiA2MyA2NCA2NSA2Nj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZHSUM+Owor CQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwogCQl9 OwogCiAJCWVoY2kgewogCQkJY29tcGF0aWJsZSA9ICJ0aSx1c2ItZWhjaSIsICJ1c2ItZWhjaSI7 Ci0JCQkvKiAKKwkJCS8qCiAJCQkgKiBVU0IgcG9ydCBQSFkgY29uZmlndXJhdGlvbiBpcyBhIHR1 cGxlOiA8bW9kZSwgcmVzZXQsIGdwaW9fcGluPgogCQkJICogbW9kZSBpcyBvbmUgb2YgdGhlIGZv bGxvd2luZyB2YWx1ZXM6CiAJCQkgKiAgIDAgLSB1bmtub3duCkBAIC0xNDAsNyArMTQzLDcgQEAK IAkJCSAqICAgMiAtIFRMTAogCQkJICogICAzIC0gSFNJQwogCQkJICoKLQkJCSAqIHJlc2V0IGlu ZGljYXRlcyAoaWYgbm9uLXplcm8pIGlmIHBvcnQgcmVzZXQgaXMgcmVxdWlyZWQgCisJCQkgKiBy ZXNldCBpbmRpY2F0ZXMgKGlmIG5vbi16ZXJvKSBpZiBwb3J0IHJlc2V0IGlzIHJlcXVpcmVkCiAJ CQkgKiBncGlvX3BpbiAtIEdQSU8gcGluIHRoYXQgaXMgdXNlZCB0byBwZXJmb3JtIHJlc2V0CiAJ CQkgKi8KIAkJCXBoeS1jb25maWcgPSA8ICAxIDAgMApAQCAtMTc3LDggKzE4MCwxNSBAQAogCQkJ bm9uLXJlbW92YWJsZTsgLyogWFhYIG5lZWQgcmVhbCBzb2x1dGlvbiAqLwogCQl9OwogCisJCXRl c3RAMCB7CisJCQljb21wYXRpYmxlID0gImdwaW8tdGVzdCI7CisJCQlyZWcgPSA8MHgwPjsKKwkJ CWludGVycnVwdC1wYXJlbnQgPSA8JkdQSU8+OworCQkJaW50ZXJydXB0cyA9IDwxMTMgMHgyPjsK IAl9OwogCisJfTsKKwogCWNob3NlbiB7CiAJCXN0ZGluID0gInVhcnQzIjsKIAkJc3Rkb3V0ID0g InVhcnQzIjsK --20cf30223fb18e26520510a22522 Content-Type: text/plain; charset=US-ASCII; name="interrupt.h.diff" Content-Disposition: attachment; filename="interrupt.h.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_i6xu4hn47 SW5kZXg6IHN5cy9zeXMvaW50ZXJydXB0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL3N5cy9pbnRlcnJ1 cHQuaAkocmV2aXNpb24gMjc5Njg1KQorKysgc3lzL3N5cy9pbnRlcnJ1cHQuaAkod29ya2luZyBj b3B5KQpAQCAtMTA1LDcgKzEwNSw3IEBACiAJVEFJTFFfRU5UUlkoaW50cl9ldmVudCkgaWVfbGlz dDsKIAlUQUlMUV9IRUFEKCwgaW50cl9oYW5kbGVyKSBpZV9oYW5kbGVyczsgLyogSW50ZXJydXB0 IGhhbmRsZXJzLiAqLwogCWNoYXIJCWllX25hbWVbTUFYQ09NTEVOICsgMV07IC8qIEluZGl2aWR1 YWwgZXZlbnQgbmFtZS4gKi8KLQljaGFyCQlpZV9mdWxsbmFtZVtNQVhDT01MRU4gKyAxXTsKKwlj aGFyCQlpZV9mdWxsbmFtZVsyKk1BWENPTUxFTiArIDFdOwogCXN0cnVjdCBtdHgJaWVfbG9jazsK IAl2b2lkCQkqaWVfc291cmNlOwkvKiBDb29raWUgdXNlZCBieSBNRCBjb2RlLiAqLwogCXN0cnVj dCBpbnRyX3RocmVhZCAqaWVfdGhyZWFkOwkvKiBUaHJlYWQgd2UgYXJlIGNvbm5lY3RlZCB0by4g Ki8K --20cf30223fb18e26520510a22522--