From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.0 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 479A1C433E0 for ; Mon, 3 Aug 2020 20:56:46 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 5581822C9F for ; Mon, 3 Aug 2020 20:56:46 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5581822C9F Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 5E8CF6E2D8; Mon, 3 Aug 2020 20:56:41 +0000 (UTC) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0DC226E2CF; Mon, 3 Aug 2020 20:56:40 +0000 (UTC) IronPort-SDR: 6hbZNnlEt1XDXFo6I5AUtZ0JxXtkXQNIxKIrGZopQhBZkzyytEJy+h4QF2gRW0OvuPzSekrwju FH2vK/Hqqi2w== X-IronPort-AV: E=McAfee;i="6000,8403,9702"; a="213742267" X-IronPort-AV: E=Sophos;i="5.75,431,1589266800"; d="scan'208";a="213742267" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Aug 2020 13:56:35 -0700 IronPort-SDR: JoL6nyakGJLv8ilD0OfsCPQO1ixXsEfFHb+Q1mqwqSO5MtAjiY/u4gFosmiVqE0vBBkgKFv/J1 pM6ZXv6J7MVg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.75,431,1589266800"; d="scan'208";a="324300108" Received: from unknown (HELO achrisan-DESK2.amr.corp.intel.com) ([10.254.186.200]) by fmsmga002.fm.intel.com with ESMTP; 03 Aug 2020 13:56:34 -0700 From: Anitha Chrisanthus To: dri-devel@lists.freedesktop.org, anitha.chrisanthus@intel.com, bob.j.paauwe@intel.com, edmund.j.dea@intel.com Date: Mon, 3 Aug 2020 13:56:23 -0700 Message-Id: <1596488183-9030-2-git-send-email-anitha.chrisanthus@intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1596488183-9030-1-git-send-email-anitha.chrisanthus@intel.com> References: <1596488183-9030-1-git-send-email-anitha.chrisanthus@intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH v5] drm/kmb: Add support for KeemBay Display X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: daniel.vetter@intel.com, intel-gfx@lists.freedesktop.org, sam@ravnborg.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" VGhpcyBpcyBhIGJhc2ljIEtNUyBhdG9taWMgbW9kZXNldHRpbmcgZGlzcGxheSBkcml2ZXIgZm9y IEtlZW1CYXkgZmFtaWx5IG9mClNPQ3MuIERyaXZlciBoYXMgbm8gMkQgb3IgM0QgZ3JhcGhpY3Mu SXQgY2FsbHMgaW50byB0aGUgQURWIGJyaWRnZQpkcml2ZXIgYXQgdGhlIGNvbm5lY3RvciBsZXZl bC4KClNpbmdsZSBDUlRDIHdpdGggTENEIGNvbnRyb2xsZXItPm1pcGkgRFNJLT4gQURWIGJyaWRn ZQoKT25seSAxMDgwcCByZXNvbHV0aW9uIGFuZCBzaW5nbGUgcGxhbmUgaXMgc3VwcG9ydGVkIGF0 IHRoaXMgdGltZS4KCnYyOiBtb3ZlZCBleHRlcm4gdG8gLmgsIHJlbW92ZWQgbGljZW5zZSB0ZXh0 CiAgICB1c2UgZHJtX2Rldl9pbml0LCB1cGNsYXNzZWQgZGV2X3ByaXZhdGUsIHJlbW92ZWQgSEFW RV9JUlEuCgp2MzogU3F1YXNoZWQgYWxsIDU5IGNvbW1pdHMgdG8gb25lCgp2NDogcmV2aWV3IGNo YW5nZXMgZnJvbSBTYW0gUmF2bmJvcmcKCXJlbmFtZWQgZGV2X3AgdG8ga21iCgltb3ZlZCBjbG9j a3MgdW5kZXIga21iX2Nsb2NrLCBjb25zb2xpZGF0ZWQgY2xrIGluaXRpYWxpemF0aW9ucwoJdXNl IGRybW0gZnVuY3Rpb25zCgl1c2UgRFJNX0dFTV9DTUFfRFJJVkVSX09QU19WTUFQCgp2NTogY29y cmVjdGVkIHNwZWxsaW5ncwoKQ2M6IFNhbSBSYXZuYm9yZyA8c2FtQHJhdm5ib3JnLm9yZz4KU2ln bmVkLW9mZi1ieTogQW5pdGhhIENocmlzYW50aHVzIDxhbml0aGEuY2hyaXNhbnRodXNAaW50ZWwu Y29tPgpSZXZpZXdlZC1ieTogQm9iIFBhYXV3ZSA8Ym9iLmoucGFhdXdlQGludGVsLmNvbT4KLS0t CiBkcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyAgICAgICAgIHwgICAgMiArCiBkcml2ZXJzL2dwdS9k cm0vTWFrZWZpbGUgICAgICAgIHwgICAgMSArCiBkcml2ZXJzL2dwdS9kcm0va21iL0tjb25maWcg ICAgIHwgICAxMyArCiBkcml2ZXJzL2dwdS9kcm0va21iL01ha2VmaWxlICAgIHwgICAgMiArCiBk cml2ZXJzL2dwdS9kcm0va21iL2ttYl9jcnRjLmMgIHwgIDIxNyArKysrKwogZHJpdmVycy9ncHUv ZHJtL2ttYi9rbWJfY3J0Yy5oICB8ICAgMzYgKwogZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfZHJ2 LmMgICB8ICA3MjggKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfZHJ2 LmggICB8ICAxNzIgKysrKwogZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfZHNpLmMgICB8IDE4MzQg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0v a21iL2ttYl9kc2kuaCAgIHwgIDM3MCArKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJf cGxhbmUuYyB8ICA1MTggKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9rbWIva21iX3BsYW5l LmggfCAgMTI0ICsrKwogZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfcmVncy5oICB8ICA3MzggKysr KysrKysrKysrKysrKwogMTMgZmlsZXMgY2hhbmdlZCwgNDc1NSBpbnNlcnRpb25zKCspCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2ttYi9LY29uZmlnCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL2ttYi9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9rbWIva21iX2NydGMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9rbWIva21iX2NydGMuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9rbWIva21iX2Rydi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2ttYi9r bWJfZHJ2LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0va21iL2ttYl9kc2ku YwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9rbWIva21iX2RzaS5oCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfcGxhbmUuYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9rbWIva21iX3BsYW5lLmgKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0va21iL2ttYl9yZWdzLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCmluZGV4IDE0N2Q2MWIu Ljk3YTE2MzFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZworKysgYi9kcml2 ZXJzL2dwdS9kcm0vS2NvbmZpZwpAQCAtMjc1LDYgKzI3NSw4IEBAIHNvdXJjZSAiZHJpdmVycy9n cHUvZHJtL25vdXZlYXUvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL2dwdS9kcm0vaTkxNS9L Y29uZmlnIgogCitzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9rbWIvS2NvbmZpZyIKKwogY29uZmln IERSTV9WR0VNCiAJdHJpc3RhdGUgIlZpcnR1YWwgR0VNIHByb3ZpZGVyIgogCWRlcGVuZHMgb24g RFJNCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9k cm0vTWFrZWZpbGUKaW5kZXggMmYzMTU3OS4uMjE0NmZmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQpAQCAtNzEsNiAr NzEsNyBAQCBvYmotJChDT05GSUdfRFJNX0FNREdQVSkrPSBhbWQvYW1kZ3B1Lwogb2JqLSQoQ09O RklHX0RSTV9NR0EpCSs9IG1nYS8KIG9iai0kKENPTkZJR19EUk1fSTgxMCkJKz0gaTgxMC8KIG9i ai0kKENPTkZJR19EUk1fSTkxNSkJKz0gaTkxNS8KK29iai0kKENPTkZJR19EUk1fS01CX0RJU1BM QVkpICArPSBrbWIvCiBvYmotJChDT05GSUdfRFJNX01HQUcyMDApICs9IG1nYWcyMDAvCiBvYmot JChDT05GSUdfRFJNX1YzRCkgICs9IHYzZC8KIG9iai0kKENPTkZJR19EUk1fVkM0KSAgKz0gdmM0 LwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2ttYi9LY29uZmlnIGIvZHJpdmVycy9ncHUv ZHJtL2ttYi9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxOGI3 NGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0va21iL0tjb25maWcKQEAgLTAs MCArMSwxMyBAQAorY29uZmlnIERSTV9LTUJfRElTUExBWQorCXRyaXN0YXRlICJJTlRFTCBLRUVN QkFZIERJU1BMQVkiCisJZGVwZW5kcyBvbiBEUk0gJiYgT0YgJiYgKEFSTSB8fCBBUk02NCkKKwlk ZXBlbmRzIG9uIENPTU1PTl9DTEsKKwlzZWxlY3QgRFJNX0tNU19IRUxQRVIKKwlzZWxlY3QgRFJN X0tNU19DTUFfSEVMUEVSCisJc2VsZWN0IERSTV9HRU1fQ01BX0hFTFBFUgorCXNlbGVjdCBWSURF T01PREVfSEVMUEVSUworCWhlbHAKKwlDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUgSW50 ZWwncyBLZWVtQmF5IFNPQyB3aGljaCBpbnRlZ3JhdGVzCisJYW4gQVJNIENvcnRleCBBNTMgQ1BV IHdpdGggYW4gSW50ZWwgTW92aWRpdXMgVlBVLgorCisJSWYgTSBpcyBzZWxlY3RlZCB0aGUgbW9k dWxlIHdpbGwgYmUgY2FsbGVkIGttYi1kcm0uCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v a21iL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2ttYi9NYWtlZmlsZQpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjdkNzM3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2ttYi9NYWtlZmlsZQpAQCAtMCwwICsxLDIgQEAKK2ttYi1kcm0teSA6PSBrbWJf Y3J0Yy5vIGttYl9kcnYubyBrbWJfcGxhbmUubyBrbWJfZHNpLm8KK29iai0kKENPTkZJR19EUk1f S01CX0RJU1BMQVkpCSs9IGttYi1kcm0ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2tt Yi9rbWJfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfY3J0Yy5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNTUxMWE4MQotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9rbWIva21iX2NydGMuYwpAQCAtMCwwICsxLDIxNyBAQAorLy8gU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE4 LTIwMjAgSW50ZWwgQ29ycG9yYXRpb24KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+Cisj aW5jbHVkZSA8bGludXgvb2ZfZ3JhcGguaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRh L3NpbXBsZWZiLmg+CisKKyNpbmNsdWRlIDx2aWRlby92aWRlb21vZGUuaD4KKworI2luY2x1ZGUg PGRybS9kcm1fYXRvbWljLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+Cisj aW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5o PgorI2luY2x1ZGUgPGRybS9kcm1fZmJfY21hX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1f ZmJfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9nZW1fY21hX2hlbHBlci5oPgorI2luY2x1 ZGUgPGRybS9kcm1fb2YuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BsYW5lX2hlbHBlci5oPgorCisj aW5jbHVkZSAia21iX2NydGMuaCIKKyNpbmNsdWRlICJrbWJfZHJ2LmgiCisjaW5jbHVkZSAia21i X3BsYW5lLmgiCisjaW5jbHVkZSAia21iX3JlZ3MuaCIKKyNpbmNsdWRlICJrbWJfZHNpLmgiCisK K3N0YXRpYyB2b2lkIGttYl9jcnRjX2NsZWFudXAoc3RydWN0IGRybV9jcnRjICpjcnRjKQorewor CWRybV9jcnRjX2NsZWFudXAoY3J0Yyk7Cit9CisKK3N0YXRpYyBpbnQga21iX2NydGNfZW5hYmxl X3ZibGFuayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRl diA9IGNydGMtPmRldjsKKwlzdHJ1Y3Qga21iX2RybV9wcml2YXRlICprbWIgPSB0b19rbWIoZGV2 KTsKKworCS8qIENsZWFyIGludGVycnVwdCAqLworCWttYl93cml0ZV9sY2Qoa21iLCBMQ0RfSU5U X0NMRUFSLCBMQ0RfSU5UX1ZFUlRfQ09NUCk7CisJLyogU2V0IHdoaWNoIGludGVydmFsIHRvIGdl bmVyYXRlIHZlcnRpY2FsIGludGVycnVwdCAqLworCWttYl93cml0ZV9sY2Qoa21iLCBMQ0RfVlNU QVRVU19DT01QQVJFLAorCQkgICAgICBMQ0RfVlNUQVRVU19DT01QQVJFX1ZTWU5DKTsKKwkvKiBF bmFibGUgdmVydGljYWwgaW50ZXJydXB0ICovCisJa21iX3NldF9iaXRtYXNrX2xjZChrbWIsIExD RF9JTlRfRU5BQkxFLAorCQkJICAgIExDRF9JTlRfVkVSVF9DT01QKTsKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIHZvaWQga21iX2NydGNfZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRybV9jcnRjICpj cnRjKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0IGtt Yl9kcm1fcHJpdmF0ZSAqa21iID0gdG9fa21iKGRldik7CisKKwkvKiBDbGVhciBpbnRlcnJ1cHQg Ki8KKwlrbWJfd3JpdGVfbGNkKGttYiwgTENEX0lOVF9DTEVBUiwgTENEX0lOVF9WRVJUX0NPTVAp OworCS8qIERpc2FibGUgdmVydGljYWwgaW50ZXJydXB0ICovCisJa21iX2Nscl9iaXRtYXNrX2xj ZChrbWIsIExDRF9JTlRfRU5BQkxFLAorCQkJTENEX0lOVF9WRVJUX0NPTVApOworfQorCitzdGF0 aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIGttYl9jcnRjX2Z1bmNzID0geworCS5kZXN0 cm95ID0ga21iX2NydGNfY2xlYW51cCwKKwkuc2V0X2NvbmZpZyA9IGRybV9hdG9taWNfaGVscGVy X3NldF9jb25maWcsCisJLnBhZ2VfZmxpcCA9IGRybV9hdG9taWNfaGVscGVyX3BhZ2VfZmxpcCwK KwkucmVzZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9jcnRjX3Jlc2V0LAorCS5hdG9taWNfZHVwbGlj YXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kdXBsaWNhdGVfc3RhdGUsCisJLmF0 b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kZXN0cm95X3N0YXRl LAorCS5lbmFibGVfdmJsYW5rID0ga21iX2NydGNfZW5hYmxlX3ZibGFuaywKKwkuZGlzYWJsZV92 YmxhbmsgPSBrbWJfY3J0Y19kaXNhYmxlX3ZibGFuaywKK307CisKK3N0YXRpYyB2b2lkIGttYl9j cnRjX21vZGVfc2V0X25vZmIoc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm0gPSAm Y3J0Yy0+c3RhdGUtPmFkanVzdGVkX21vZGU7CisJc3RydWN0IGttYl9jcnRjX3RpbWluZyB2bTsK KwlpbnQgdnN5bmNfc3RhcnRfb2Zmc2V0OworCWludCB2c3luY19lbmRfb2Zmc2V0OworCXN0cnVj dCBrbWJfZHJtX3ByaXZhdGUgKmttYiA9IHRvX2ttYihkZXYpOworCXVuc2lnbmVkIGludCB2YWwg PSAwOworCisJLyogSW5pdGlhbGl6ZSBtaXBpICovCisJa21iX2RzaV9od19pbml0KGRldiwgbSk7 CisJZHJtX2luZm8oZGV2LAorCQkidmZwPSAlZCB2YnA9ICVkIHZzeWNfbGVuPSVkIGhmcD0lZCBo YnA9JWQgaHN5bmNfbGVuPSVkXG4iLAorCQkgbS0+Y3J0Y192c3luY19zdGFydCAtIG0tPmNydGNf dmRpc3BsYXksCisJCSBtLT5jcnRjX3Z0b3RhbCAtIG0tPmNydGNfdnN5bmNfZW5kLAorCQkgbS0+ Y3J0Y192c3luY19lbmQgLSBtLT5jcnRjX3ZzeW5jX3N0YXJ0LAorCQkgbS0+Y3J0Y19oc3luY19z dGFydCAtIG0tPmNydGNfaGRpc3BsYXksCisJCSBtLT5jcnRjX2h0b3RhbCAtIG0tPmNydGNfaHN5 bmNfZW5kLAorCQkgbS0+Y3J0Y19oc3luY19lbmQgLSBtLT5jcnRjX2hzeW5jX3N0YXJ0KTsKKwl2 YWwgPSBrbWJfcmVhZF9sY2Qoa21iLCBMQ0RfSU5UX0VOQUJMRSk7CisJa21iX2Nscl9iaXRtYXNr X2xjZChrbWIsIExDRF9JTlRfRU5BQkxFLCB2YWwpOworCWttYl9zZXRfYml0bWFza19sY2Qoa21i LCBMQ0RfSU5UX0NMRUFSLCB+MHgwKTsKKwl2bS52ZnJvbnRfcG9yY2ggPSAyOworCXZtLnZiYWNr X3BvcmNoID0gMjsKKwl2bS52c3luY19sZW4gPSA4OworCXZtLmhmcm9udF9wb3JjaCA9IDA7CisJ dm0uaGJhY2tfcG9yY2ggPSAwOworCXZtLmhzeW5jX2xlbiA9IDI4OworCisJdnN5bmNfc3RhcnRf b2Zmc2V0ID0gIG0tPmNydGNfdnN5bmNfc3RhcnQgLSAgbS0+Y3J0Y19oc3luY19zdGFydDsKKwl2 c3luY19lbmRfb2Zmc2V0ID0gIG0tPmNydGNfdnN5bmNfZW5kIC0gbS0+Y3J0Y19oc3luY19lbmQ7 CisKKwlkcm1fZGJnKGRldiwgIiVzIDogJWRhY3RpdmUgaGVpZ2h0PSAlZCB2YnA9JWQgdmZwPSVk IHZzeW5jLXc9JWQgaC1hY3RpdmU9JWQgaC1icD0lZCBoLWZwPSVkIGh5c25jLWw9JWQiLAorCQkJ X19mdW5jX18sIF9fTElORV9fLAorCQkJbS0+Y3J0Y192ZGlzcGxheSwgdm0udmJhY2tfcG9yY2gs IHZtLnZmcm9udF9wb3JjaCwKKwkJCXZtLnZzeW5jX2xlbiwgbS0+Y3J0Y19oZGlzcGxheSwgdm0u aGJhY2tfcG9yY2gsCisJCQl2bS5oZnJvbnRfcG9yY2gsIHZtLmhzeW5jX2xlbik7CisJa21iX3dy aXRlX2xjZChrbWIsIExDRF9WX0FDVElWRUhFSUdIVCwKKwkJCW0tPmNydGNfdmRpc3BsYXkgLSAx KTsKKwlrbWJfd3JpdGVfbGNkKGttYiwgTENEX1ZfQkFDS1BPUkNILCB2bS52YmFja19wb3JjaCk7 CisJa21iX3dyaXRlX2xjZChrbWIsIExDRF9WX0ZST05UUE9SQ0gsIHZtLnZmcm9udF9wb3JjaCk7 CisJa21iX3dyaXRlX2xjZChrbWIsIExDRF9WU1lOQ19XSURUSCwgdm0udnN5bmNfbGVuIC0gMSk7 CisJa21iX3dyaXRlX2xjZChrbWIsIExDRF9IX0FDVElWRVdJRFRILAorCQkJbS0+Y3J0Y19oZGlz cGxheSAtIDEpOworCWttYl93cml0ZV9sY2Qoa21iLCBMQ0RfSF9CQUNLUE9SQ0gsIHZtLmhiYWNr X3BvcmNoKTsKKwlrbWJfd3JpdGVfbGNkKGttYiwgTENEX0hfRlJPTlRQT1JDSCwgdm0uaGZyb250 X3BvcmNoKTsKKwlrbWJfd3JpdGVfbGNkKGttYiwgTENEX0hTWU5DX1dJRFRILCB2bS5oc3luY19s ZW4gLSAxKTsKKwkvKiBUaGlzIGlzIGhhcmRjb2RlZCBhcyAwIGluIHRoZSBNeXJpYWR4IGNvZGUg Ki8KKwlrbWJfd3JpdGVfbGNkKGttYiwgTENEX1ZTWU5DX1NUQVJULCAwKTsKKwlrbWJfd3JpdGVf bGNkKGttYiwgTENEX1ZTWU5DX0VORCwgMCk7CisJLyogQmFjayBncm91bmQgY29sb3IgKi8KKwlr bWJfd3JpdGVfbGNkKGttYiwgTENEX0JHX0NPTE9VUl9MUywgMHg0KTsKKwlpZiAobS0+ZmxhZ3Mg PT0gRFJNX01PREVfRkxBR19JTlRFUkxBQ0UpIHsKKwkJa21iX3dyaXRlX2xjZChrbWIsCisJCQkg ICAgICBMQ0RfVlNZTkNfV0lEVEhfRVZFTiwgdm0udnN5bmNfbGVuIC0gMSk7CisJCWttYl93cml0 ZV9sY2Qoa21iLAorCQkJCUxDRF9WX0JBQ0tQT1JDSF9FVkVOLCB2bS52YmFja19wb3JjaCk7CisJ CWttYl93cml0ZV9sY2Qoa21iLAorCQkJCUxDRF9WX0ZST05UUE9SQ0hfRVZFTiwgdm0udmZyb250 X3BvcmNoKTsKKwkJa21iX3dyaXRlX2xjZChrbWIsIExDRF9WX0FDVElWRUhFSUdIVF9FVkVOLAor CQkJICAgICAgbS0+Y3J0Y192ZGlzcGxheSAtIDEpOworCQkvKiBUaGlzIGlzIGhhcmRjb2RlZCBh cyAxMCBpbiB0aGUgTXlyaWFkeCBjb2RlICovCisJCWttYl93cml0ZV9sY2Qoa21iLCBMQ0RfVlNZ TkNfU1RBUlRfRVZFTiwgMTApOworCQlrbWJfd3JpdGVfbGNkKGttYiwgTENEX1ZTWU5DX0VORF9F VkVOLCAxMCk7CisJfQorCWttYl93cml0ZV9sY2Qoa21iLCBMQ0RfVElNSU5HX0dFTl9UUklHLCBF TkFCTEUpOworCWttYl9zZXRfYml0bWFza19sY2Qoa21iLCBMQ0RfQ09OVFJPTCwgTENEX0NUUkxf RU5BQkxFKTsKKwlrbWJfc2V0X2JpdG1hc2tfbGNkKGttYiwgTENEX0lOVF9FTkFCTEUsIHZhbCk7 Cit9CisKK3N0YXRpYyB2b2lkIGttYl9jcnRjX2F0b21pY19lbmFibGUoc3RydWN0IGRybV9jcnRj ICpjcnRjLAorCQkJCSAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqb2xkX3N0YXRlKQoreworCXN0 cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmxjZCA9IGNydGNfdG9fa21iX3ByaXYoY3J0Yyk7CisKKwlj bGtfcHJlcGFyZV9lbmFibGUobGNkLT5jbGspOworCWttYl9jcnRjX21vZGVfc2V0X25vZmIoY3J0 Yyk7CisJZHJtX2NydGNfdmJsYW5rX29uKGNydGMpOworfQorCitzdGF0aWMgdm9pZCBrbWJfY3J0 Y19hdG9taWNfZGlzYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJICAgIHN0cnVjdCBk cm1fY3J0Y19zdGF0ZSAqb2xkX3N0YXRlKQoreworCXN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmxj ZCA9IGNydGNfdG9fa21iX3ByaXYoY3J0Yyk7CisKKwkvKiBBbHdheXMgZGlzYWJsZSBwbGFuZXMg b24gdGhlIENSVEMgdGhhdCBpcyBiZWluZyB0dXJuZWQgb2ZmICovCisJZHJtX2F0b21pY19oZWxw ZXJfZGlzYWJsZV9wbGFuZXNfb25fY3J0YyhvbGRfc3RhdGUsIGZhbHNlKTsKKworCWRybV9jcnRj X3ZibGFua19vZmYoY3J0Yyk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGxjZC0+Y2xrKTsKK30K Kworc3RhdGljIHZvaWQga21iX2NydGNfYXRvbWljX2JlZ2luKHN0cnVjdCBkcm1fY3J0YyAqY3J0 YywKKwkJCQkgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGRybV9k ZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3Qga21iX2RybV9wcml2YXRlICprbWIgPSB0 b19rbWIoZGV2KTsKKworCWttYl9jbHJfYml0bWFza19sY2Qoa21iLCBMQ0RfSU5UX0VOQUJMRSwK KwkJCSAgICBMQ0RfSU5UX1ZFUlRfQ09NUCk7Cit9CisKK3N0YXRpYyB2b2lkIGttYl9jcnRjX2F0 b21pY19mbHVzaChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJICBzdHJ1Y3QgZHJtX2NydGNf c3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJ c3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqa21iID0gdG9fa21iKGRldik7CisKKwlrbWJfc2V0X2Jp dG1hc2tfbGNkKGttYiwgTENEX0lOVF9FTkFCTEUsCisJCQkgICAgTENEX0lOVF9WRVJUX0NPTVAp OworCisJc3Bpbl9sb2NrX2lycSgmY3J0Yy0+ZGV2LT5ldmVudF9sb2NrKTsKKwlpZiAoY3J0Yy0+ c3RhdGUtPmV2ZW50KQorCQlkcm1fY3J0Y19zZW5kX3ZibGFua19ldmVudChjcnRjLCBjcnRjLT5z dGF0ZS0+ZXZlbnQpOworCWNydGMtPnN0YXRlLT5ldmVudCA9IE5VTEw7CisJc3Bpbl91bmxvY2tf aXJxKCZjcnRjLT5kZXYtPmV2ZW50X2xvY2spOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRy bV9jcnRjX2hlbHBlcl9mdW5jcyBrbWJfY3J0Y19oZWxwZXJfZnVuY3MgPSB7CisJLmF0b21pY19i ZWdpbiA9IGttYl9jcnRjX2F0b21pY19iZWdpbiwKKwkuYXRvbWljX2VuYWJsZSA9IGttYl9jcnRj X2F0b21pY19lbmFibGUsCisJLmF0b21pY19kaXNhYmxlID0ga21iX2NydGNfYXRvbWljX2Rpc2Fi bGUsCisJLmF0b21pY19mbHVzaCA9IGttYl9jcnRjX2F0b21pY19mbHVzaCwKK307CisKK2ludCBr bWJfc2V0dXBfY3J0YyhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQoreworCXN0cnVjdCBrbWJfZHJt X3ByaXZhdGUgKmttYiA9IHRvX2ttYihkcm0pOworCXN0cnVjdCBrbWJfcGxhbmUgKnByaW1hcnk7 CisJaW50IHJldDsKKworCXByaW1hcnkgPSBrbWJfcGxhbmVfaW5pdChkcm0pOworCWlmIChJU19F UlIocHJpbWFyeSkpCisJCXJldHVybiBQVFJfRVJSKHByaW1hcnkpOworCisJcmV0ID0gZHJtX2Ny dGNfaW5pdF93aXRoX3BsYW5lcyhkcm0sICZrbWItPmNydGMsICZwcmltYXJ5LT5iYXNlX3BsYW5l LAorCQkJCQlOVUxMLCAma21iX2NydGNfZnVuY3MsIE5VTEwpOworCWlmIChyZXQpIHsKKwkJa21i X3BsYW5lX2Rlc3Ryb3koJnByaW1hcnktPmJhc2VfcGxhbmUpOworCQlyZXR1cm4gcmV0OworCX0K KworCWRybV9jcnRjX2hlbHBlcl9hZGQoJmttYi0+Y3J0YywgJmttYl9jcnRjX2hlbHBlcl9mdW5j cyk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0va21iL2ttYl9j cnRjLmggYi9kcml2ZXJzL2dwdS9kcm0va21iL2ttYl9jcnRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uZDM2MzA2NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9rbWIva21iX2NydGMuaApAQCAtMCwwICsxLDM2IEBACisvKiBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMC1vbmx5CisgKgorICogQ29weXJpZ2h0IMKpIDIwMTgtMjAyMCBJbnRl bCBDb3Jwb3JhdGlvbgorICovCisKKyNpZm5kZWYgX19LTUJfQ1JUQ19IX18KKyNkZWZpbmUgX19L TUJfQ1JUQ19IX18KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L29m X2dyYXBoLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9zaW1wbGVmYi5oPgorI2lu Y2x1ZGUgPHZpZGVvL3ZpZGVvbW9kZS5oPgorI2luY2x1ZGUgPGRybS9kcm1fZGVidWdmcy5oPgor I2luY2x1ZGUgPGRybS9kcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9kcnYuaD4KKyNp bmNsdWRlIDxkcm0vZHJtX2ZiX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZmlsZS5oPgor I2luY2x1ZGUgPGRybS9kcm1fZm91cmNjLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wcmludC5oPgor I2luY2x1ZGUgPGRybS9kcm1fcHJvYmVfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV92Ymxh bmsuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3Jt X2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlICJrbWJfZHJ2Lmgi CisKK3N0cnVjdCBrbWJfY3J0Y190aW1pbmcgeworCXUzMiB2ZnJvbnRfcG9yY2g7CisJdTMyIHZi YWNrX3BvcmNoOworCXUzMiB2c3luY19sZW47CisJdTMyIGhmcm9udF9wb3JjaDsKKwl1MzIgaGJh Y2tfcG9yY2g7CisJdTMyIGhzeW5jX2xlbjsKK307CisKKyNlbmRpZiAvKiBfX0tNQl9DUlRDX0hf XyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfZHJ2LmMgYi9kcml2ZXJz L2dwdS9kcm0va21iL2ttYl9kcnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li40ZDVhNGUxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfZHJ2 LmMKQEAgLTAsMCArMSw3MjggQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w LW9ubHkKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxOC0yMDIwIEludGVsIENvcnBvcmF0aW9uCisg Ki8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4K KyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5j bHVkZSA8bGludXgvb2ZfZ3JhcGguaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9yZXNlcnZlZF9tZW0u aD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8bGludXgvc3Bpbmxv Y2suaD4KKworI2luY2x1ZGUgPGRybS9kcm0uaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5o PgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1f Y3J0Yy5oPgorI2luY2x1ZGUgPGRybS9kcm1fZmJfY21hX2hlbHBlci5oPgorI2luY2x1ZGUgPGRy bS9kcm1fZmJfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9nZW1fY21hX2hlbHBlci5oPgor I2luY2x1ZGUgPGRybS9kcm1fZ2VtX2ZyYW1lYnVmZmVyX2hlbHBlci5oPgorI2luY2x1ZGUgPGRy bS9kcm1faW9jdGwuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2lycS5oPgorI2luY2x1ZGUgPGRybS9k cm1fb2YuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3Byb2JlX2hlbHBlci5oPgorCisjaW5jbHVkZSAi a21iX2NydGMuaCIKKyNpbmNsdWRlICJrbWJfZHJ2LmgiCisjaW5jbHVkZSAia21iX2RzaS5oIgor I2luY2x1ZGUgImttYl9wbGFuZS5oIgorI2luY2x1ZGUgImttYl9yZWdzLmgiCisKKy8qICNkZWZp bmUgREVCVUcgKi8KKworaW50IGttYl91bmRlcl9mbG93ID0gMCwga21iX2ZsdXNoX2RvbmUgPSAw LCBsYXllcl9ubyA9IDA7CitzdGF0aWMgc3RydWN0IGttYl9jbG9jayBrbWJfY2xrOworCitzdGF0 aWMgc3RydWN0IGRybV9icmlkZ2UgKmFkdl9icmlkZ2U7CisKK2ludCBrbWJfZGlzcGxheV9jbGtf ZW5hYmxlKHN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmttYikKK3sKKwlpbnQgcmV0ID0gMDsKKwor CXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShrbWJfY2xrLmNsa19sY2QpOworCWlmIChyZXQpIHsK KwkJZHJtX2Vycigma21iLT5kcm0sICJGYWlsZWQgdG8gZW5hYmxlIExDRCBjbG9jazogJWRcbiIs IHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGtt Yl9jbGsuY2xrX21pcGkpOworCWlmIChyZXQpIHsKKwkJZHJtX2Vycigma21iLT5kcm0sICJGYWls ZWQgdG8gZW5hYmxlIE1JUEkgY2xvY2s6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0K KworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShrbWJfY2xrLmNsa19taXBpX2VjZmcpOworCWlm IChyZXQpIHsKKwkJZHJtX2Vycigma21iLT5kcm0sCisJCQkJIkZhaWxlZCB0byBlbmFibGUgTUlQ SV9FQ0ZHIGNsb2NrOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBj bGtfcHJlcGFyZV9lbmFibGUoa21iX2Nsay5jbGtfbWlwaV9jZmcpOworCWlmIChyZXQpIHsKKwkJ ZHJtX2Vycigma21iLT5kcm0sCisJCQkJIkZhaWxlZCB0byBlbmFibGUgTUlQSV9DRkcgY2xvY2s6 ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlEUk1fSU5GTygiU1VDQ0VTUyA6IGVu YWJsZWQgTENEIE1JUEkgY2xvY2tzXG4iKTsKKwlyZXR1cm4gMDsKK30KKworCitpbnQga21iX2lu aXRpYWxpemVfY2xvY2tzKHN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmttYiwgc3RydWN0IGRldmlj ZSAqZGV2KQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqdnB1X2RldjsKKwl1bnNpZ25lZCBsb25n IGNsazsKKwlpbnQgcmV0ID0gMDsKKworCWttYl9jbGsuY2xrX2xjZCA9IGNsa19nZXQoZGV2LCAi Y2xrX2xjZCIpOworCWlmIChJU19FUlIoa21iX2Nsay5jbGtfbGNkKSkgeworCQlkcm1fZXJyKCZr bWItPmRybSwgImNsa19nZXQoKSBmYWlsZWQgY2xrX2xjZFxuIik7CisJCXJldHVybiBQVFJfRVJS KGttYl9jbGsuY2xrX2xjZCk7CisJfQorCisJa21iX2Nsay5jbGtfbWlwaSA9IGNsa19nZXQoZGV2 LCAiY2xrX21pcGkiKTsKKwlpZiAoSVNfRVJSKGttYl9jbGsuY2xrX21pcGkpKSB7CisJCWRybV9l cnIoJmttYi0+ZHJtLCAiY2xrX2dldCgpIGZhaWxlZCBjbGtfbWlwaVxuIik7CisJCXJldHVybiBQ VFJfRVJSKGttYl9jbGsuY2xrX21pcGkpOworCX0KKworCWttYl9jbGsuY2xrX21pcGlfZWNmZyA9 IGNsa19nZXQoZGV2LCAiY2xrX21pcGlfZWNmZyIpOworCWlmIChJU19FUlIoa21iX2Nsay5jbGtf bWlwaV9lY2ZnKSkgeworCQlkcm1fZXJyKCZrbWItPmRybSwgImNsa19nZXQoKSBmYWlsZWQgY2xr X21pcGlfZWNmZ1xuIik7CisJCXJldHVybiBQVFJfRVJSKGttYl9jbGsuY2xrX21pcGlfZWNmZyk7 CisJfQorCisJa21iX2Nsay5jbGtfbWlwaV9jZmcgPSBjbGtfZ2V0KGRldiwgImNsa19taXBpX2Nm ZyIpOworCWlmIChJU19FUlIoa21iX2Nsay5jbGtfbWlwaV9jZmcpKSB7CisJCWRybV9lcnIoJmtt Yi0+ZHJtLCAiY2xrX2dldCgpIGZhaWxlZCBjbGtfbWlwaV9jZmdcbiIpOworCQlyZXR1cm4gUFRS X0VSUihrbWJfY2xrLmNsa19taXBpX2NmZyk7CisJfQorCXZwdV9kZXYgPSBvZl9maW5kX25vZGVf YnlfcGF0aCgiL3NvYy92cHUtaXBjIik7CisJa21iX2Nsay5jbGtfcGxsMCA9IG9mX2Nsa19nZXRf YnlfbmFtZSh2cHVfZGV2LCAicGxsXzBfb3V0XzAiKTsKKwlpZiAoSVNfRVJSKGttYl9jbGsuY2xr X3BsbDApKSB7CisJCWRybV9lcnIoJmttYi0+ZHJtLCAiY2xrX2dldCgpIGZhaWxlZCBjbGtfcGxs MCAiKTsKKwkJcmV0dXJuIFBUUl9FUlIoa21iX2Nsay5jbGtfcGxsMCk7CisJfQorCWttYi0+c3lz X2Nsa19taHogPSBjbGtfZ2V0X3JhdGUoa21iX2Nsay5jbGtfcGxsMCkvMTAwMDAwMDsKKwlkcm1f aW5mbygma21iLT5kcm0sICJzeXN0ZW0gY2xrID0gJWQgTWh6Iiwga21iLT5zeXNfY2xrX21oeik7 CisKKwkvKiBTZXQgTENEIGNsb2NrIHRvIDIwMCBNaHogKi8KKwljbGtfc2V0X3JhdGUoa21iX2Ns ay5jbGtfbGNkLCBLTUJfTENEX0RFRkFVTFRfQ0xLKTsKKwlpZiAoY2xrX2dldF9yYXRlKGttYl9j bGsuY2xrX2xjZCkgIT0gS01CX0xDRF9ERUZBVUxUX0NMSykgeworCQlkcm1fZXJyKCZrbWItPmRy bSwgImZhaWxlZCB0byBzZXQgdG8gY2xrX2xjZCB0byAlZFxuIiwKKwkJCSAgS01CX0xDRF9ERUZB VUxUX0NMSyk7CisJCXJldHVybiAtMTsKKwl9CisJZHJtX2luZm8oJmttYi0+ZHJtLCAiY2xrX2xj ZCA9ICVsZFxuIiwgY2xrX2dldF9yYXRlKGttYl9jbGsuY2xrX2xjZCkpOworCisJLyogU2V0IE1J UEkgY2xvY2sgdG8gMjQgTWh6ICovCisJY2xrX3NldF9yYXRlKGttYl9jbGsuY2xrX21pcGksIEtN Ql9NSVBJX0RFRkFVTFRfQ0xLKTsKKwlpZiAoY2xrX2dldF9yYXRlKGttYl9jbGsuY2xrX21pcGkp ICE9IEtNQl9NSVBJX0RFRkFVTFRfQ0xLKSB7CisJCWRybV9lcnIoJmttYi0+ZHJtLCAiZmFpbGVk IHRvIHNldCB0byBjbGtfbWlwaSB0byAlZFxuIiwKKwkJCSAgS01CX01JUElfREVGQVVMVF9DTEsp OworCQlyZXR1cm4gLTE7CisJfQorCWRybV9pbmZvKCZrbWItPmRybSwgImNsa19taXBpID0gJWxk XG4iLCBjbGtfZ2V0X3JhdGUoa21iX2Nsay5jbGtfbWlwaSkpOworCisJY2xrID0gY2xrX2dldF9y YXRlKGttYl9jbGsuY2xrX21pcGlfZWNmZyk7CisJaWYgKGNsayAhPSBLTUJfTUlQSV9ERUZBVUxU X0NGR19DTEspIHsKKwkJLyogU2V0IE1JUElfRUNGRyBjbG9jayB0byAyNCBNaHogKi8KKwkJY2xr X3NldF9yYXRlKGttYl9jbGsuY2xrX21pcGlfZWNmZywgS01CX01JUElfREVGQVVMVF9DRkdfQ0xL KTsKKwkJY2xrID0gY2xrX2dldF9yYXRlKGttYl9jbGsuY2xrX21pcGlfZWNmZyk7CisJCWlmIChj bGsgIT0gS01CX01JUElfREVGQVVMVF9DRkdfQ0xLKSB7CisJCQlkcm1fZXJyKCZrbWItPmRybSwK KwkJCQkiZmFpbGVkIHRvIHNldCB0byBjbGtfbWlwaV9lY2ZnIHRvICVkXG4iLAorCQkJCSBLTUJf TUlQSV9ERUZBVUxUX0NGR19DTEspOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJZHJtX2luZm8o JmttYi0+ZHJtLCAiY2xrX21pcGlfZWNmZyBhZnRlciBzZXQgPSAlbGRcbiIsIGNsayk7CisJfQor CisJY2xrID0gY2xrX2dldF9yYXRlKGttYl9jbGsuY2xrX21pcGlfY2ZnKTsKKwlpZiAoY2xrICE9 IEtNQl9NSVBJX0RFRkFVTFRfQ0ZHX0NMSykgeworCQkvKiBTZXQgTUlQSV9DRkcgY2xvY2sgdG8g MjQgTWh6ICovCisJCWNsa19zZXRfcmF0ZShrbWJfY2xrLmNsa19taXBpX2NmZywgMjQwMDAwMDAp OworCQljbGsgPSBjbGtfZ2V0X3JhdGUoa21iX2Nsay5jbGtfbWlwaV9jZmcpOworCQlpZiAoY2xr ICE9IEtNQl9NSVBJX0RFRkFVTFRfQ0ZHX0NMSykgeworCQkJZHJtX2Vycigma21iLT5kcm0sCisJ CQkJCSJmYWlsZWQgdG8gc2V0IGNsa19taXBpX2NmZyB0byAlZFxuIiwKKwkJCQkgIEtNQl9NSVBJ X0RFRkFVTFRfQ0ZHX0NMSyk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJZHJtX2luZm8oJmttYi0+ ZHJtLAorCQkJCSJHZXQgY2xrX21pcGlfY2ZnIGFmdGVyIHNldCA9ICVsZFxuIiwgY2xrKTsKKwl9 CisKKwlyZXQgPSBrbWJfZGlzcGxheV9jbGtfZW5hYmxlKGttYik7CisJaWYgKHJldCkKKwkJcmV0 dXJuIHJldDsKKworCS8qIEVuYWJsZSBNU1NfQ0FNX0NMS19DVFJMIGZvciBNSVBJIFRYIGFuZCBM Q0QgKi8KKwlrbWJfc2V0X2JpdG1hc2tfbXNzY2FtKGttYiwgTVNTX0NBTV9DTEtfQ1RSTCwgMHgx ZmZmKTsKKwlrbWJfc2V0X2JpdG1hc2tfbXNzY2FtKGttYiwgTVNTX0NBTV9SU1ROX0NUUkwsIDB4 ZmZmZmZmZmYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGttYl9kaXNwbGF5X2Nsa19k aXNhYmxlKHZvaWQpCit7CisJaWYgKGttYl9jbGsuY2xrX2xjZCkKKwkJY2xrX2Rpc2FibGVfdW5w cmVwYXJlKGttYl9jbGsuY2xrX2xjZCk7CisJaWYgKGttYl9jbGsuY2xrX21pcGkpCisJCWNsa19k aXNhYmxlX3VucHJlcGFyZShrbWJfY2xrLmNsa19taXBpKTsKKwlpZiAoa21iX2Nsay5jbGtfbWlw aV9lY2ZnKQorCQljbGtfZGlzYWJsZV91bnByZXBhcmUoa21iX2Nsay5jbGtfbWlwaV9lY2ZnKTsK KwlpZiAoa21iX2Nsay5jbGtfbWlwaV9jZmcpCisJCWNsa19kaXNhYmxlX3VucHJlcGFyZShrbWJf Y2xrLmNsa19taXBpX2NmZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9faW9tZW0g KmttYl9tYXBfbW1pbyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKm5hbWUpCit7CisJc3RydWN0 IHJlc291cmNlICpyZXM7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRm b3JtX2RldmljZShkZXYpOworCXZvaWQgX19pb21lbSAqbWVtOworCisJcmVzID0gcGxhdGZvcm1f Z2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgbmFtZSk7CisJaWYgKCFy ZXMpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZ2V0IHJlc291cmNlIGZvciAlc1xuIiwgbmFt ZSk7CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCX0KKwltZW0gPSBkZXZtX2lvcmVtYXBf cmVzb3VyY2UoZGV2LCByZXMpOworCWlmIChJU19FUlIobWVtKSkKKwkJRFJNX0VSUk9SKCJmYWls ZWQgdG8gaW9yZW1hcCAlcyByZWdpc3RlcnNcbiIsIG5hbWUpOworCXJldHVybiBtZW07Cit9CisK K3N0YXRpYyBpbnQga21iX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgdW5zaWduZWQgbG9u ZyBmbGFncykKK3sKKwlzdHJ1Y3Qga21iX2RybV9wcml2YXRlICprbWIgPSB0b19rbWIoZHJtKTsK KwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRybS0+ ZGV2KTsKKwlpbnQgaXJxX2xjZDsKKwlpbnQgcmV0ID0gMDsKKworCisJLyogTWFwIExDRCBNTUlP IHJlZ2lzdGVycyAqLworCWttYi0+bGNkX21taW8gPSBrbWJfbWFwX21taW8oZHJtLT5kZXYsICJs Y2RfcmVncyIpOworCWlmIChJU19FUlIoa21iLT5sY2RfbW1pbykpIHsKKwkJZHJtX2Vycigma21i LT5kcm0sICJmYWlsZWQgdG8gbWFwIExDRCByZWdpc3RlcnNcbiIpOworCQlyZXR1cm4gLUVOT01F TTsKKwl9CisKKwkvKiBNYXAgTUlQSSBNTUlPIHJlZ2lzdGVycyAqLworCWttYi0+bWlwaV9tbWlv ID0ga21iX21hcF9tbWlvKGRybS0+ZGV2LCAibWlwaV9yZWdzIik7CisJaWYgKElTX0VSUihrbWIt Pm1pcGlfbW1pbykpIHsKKwkJZHJtX2Vycigma21iLT5kcm0sICJmYWlsZWQgdG8gbWFwIE1JUEkg cmVnaXN0ZXJzXG4iKTsKKwkJaW91bm1hcChrbWItPmxjZF9tbWlvKTsKKwkJcmV0dXJuIC1FTk9N RU07CisJfQorCisJLyogVGhpcyBpcyBvbmx5IGZvciBNSVBJX1RYX01TU19MQ0RfTUlQSV9DRkcg YW5kCisJICogTVNTX0NBTV9DTEtfQ1RSTCByZWdpc3RlcgorCSAqLworCWttYi0+bXNzY2FtX21t aW8gPSBrbWJfbWFwX21taW8oZHJtLT5kZXYsICJtc3NjYW1fcmVncyIpOworCWlmIChJU19FUlIo a21iLT5tc3NjYW1fbW1pbykpIHsKKwkJZHJtX2Vycigma21iLT5kcm0sICJmYWlsZWQgdG8gbWFw IE1TU0NBTSByZWdpc3RlcnNcbiIpOworCQlpb3VubWFwKGttYi0+bGNkX21taW8pOworCQlpb3Vu bWFwKGttYi0+bWlwaV9tbWlvKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaWYgKElTX0VS UihrbWItPm1zc2NhbV9tbWlvKSkgeworCQlkcm1fZXJyKCZrbWItPmRybSwgImZhaWxlZCB0byBt YXAgTVNTQ0FNIHJlZ2lzdGVyc1xuIik7CisJCWlvdW5tYXAoa21iLT5sY2RfbW1pbyk7CisJCWlv dW5tYXAoa21iLT5taXBpX21taW8pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJLyogRW5hYmxl IGRpc3BsYXkgY2xvY2tzICovCisJa21iX2luaXRpYWxpemVfY2xvY2tzKGttYiwgJnBkZXYtPmRl dik7CisKKwkvKiBSZWdpc3RlciBpcnFzIGhlcmUgLSBzZWN0aW9uIDE3LjMgaW4gZGF0YWJvb2sK KwkgKiBsaXN0cyBMQ0QgYXQgNzkgYW5kIDgyIGZvciBNSVBJIHVuZGVyIE1TUyBDUFUgLQorCSAq IGZpcm13YXJlIGhhcyByZWRpcmVjdGVkIDc5IHRvIEE1MyBJUlEgMzMKKwkgKi8KKworCS8qIEFs bG9jYXRlIExDRCBpbnRlcnJ1cHQgcmVzb3VyY2VzLCBlbmFibGUgaW50ZXJydXB0IGxpbmUsCisJ ICogYW5kIHNldHVwIElSUSBoYW5kbGluZworCSAqLworCWlycV9sY2QgPSBwbGF0Zm9ybV9nZXRf aXJxX2J5bmFtZShwZGV2LCAiaXJxX2xjZCIpOworCWlmIChpcnFfbGNkIDwgMCkgeworCQlkcm1f ZXJyKCZrbWItPmRybSwgImlycV9sY2Qgbm90IGZvdW5kIik7CisJCWdvdG8gc2V0dXBfZmFpbDsK Kwl9CisKKwkvKiBHZXQgdGhlIG9wdGlvbmFsIGZyYW1lYnVmZmVyIG1lbW9yeSByZXNvdXJjZSAq LworCXJldCA9IG9mX3Jlc2VydmVkX21lbV9kZXZpY2VfaW5pdChkcm0tPmRldik7CisJaWYgKHJl dCAmJiByZXQgIT0gLUVOT0RFVikKKwkJcmV0dXJuIHJldDsKKworCXNwaW5fbG9ja19pbml0KCZr bWItPmlycV9sb2NrKTsKKworCXJldCA9IGttYl9zZXR1cF9jcnRjKGRybSk7CisJaWYgKHJldCA8 IDApIHsKKwkJZHJtX2Vycigma21iLT5kcm0sICJmYWlsZWQgdG8gY3JlYXRlIGNydGNcbiIpOwor CQlnb3RvIHNldHVwX2ZhaWw7CisJfQorCisJLyogSW5pdGlhbGl6ZSBNSVBJIERTSSAqLworCXJl dCA9IGttYl9kc2lfaW5pdChkcm0sIGFkdl9icmlkZ2UpOworCWlmIChyZXQpIHsKKwkJZHJtX2Vy cigma21iLT5kcm0sICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBEU0lcbiIpOworCQlnb3RvIHNldHVw X2ZhaWw7CisJfQorCisJcmV0ID0gZHJtX2lycV9pbnN0YWxsKGRybSwgaXJxX2xjZCk7CisJaWYg KHJldCA8IDApIHsKKwkJZHJtX2Vycigma21iLT5kcm0sICJmYWlsZWQgdG8gaW5zdGFsbCBJUlEg aGFuZGxlclxuIik7CisJCWdvdG8gaXJxX2ZhaWw7CisJfQorCisJa21iLT5pcnFfbGNkID0gaXJx X2xjZDsKKworCXJldHVybiAwOworCisgaXJxX2ZhaWw6CisJZHJtX2NydGNfY2xlYW51cCgma21i LT5jcnRjKTsKKyBzZXR1cF9mYWlsOgorCW9mX3Jlc2VydmVkX21lbV9kZXZpY2VfcmVsZWFzZShk cm0tPmRldik7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQga21iX2F0b21pY19oZWxwZXJfY2hl Y2soc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0 ZSAqc3RhdGUpCit7CisJaWYgKCFzdGF0ZSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gZHJtX2F0 b21pY19oZWxwZXJfY2hlY2soZGV2LCBzdGF0ZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg ZHJtX21vZGVfY29uZmlnX2Z1bmNzIGttYl9tb2RlX2NvbmZpZ19mdW5jcyA9IHsKKwkuZmJfY3Jl YXRlID0gZHJtX2dlbV9mYl9jcmVhdGUsCisJLmF0b21pY19jaGVjayA9IGttYl9hdG9taWNfaGVs cGVyX2NoZWNrLAorCS5hdG9taWNfY29tbWl0ID0gZHJtX2F0b21pY19oZWxwZXJfY29tbWl0LAor fTsKKworc3RhdGljIGludCBrbWJfc2V0dXBfbW9kZV9jb25maWcoc3RydWN0IGRybV9kZXZpY2Ug KmRybSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZHJtbV9tb2RlX2NvbmZpZ19pbml0KGRybSk7 CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlkcm0tPm1vZGVfY29uZmlnLm1pbl93aWR0aCA9 IEtNQl9NSU5fV0lEVEg7CisJZHJtLT5tb2RlX2NvbmZpZy5taW5faGVpZ2h0ID0gS01CX01JTl9I RUlHSFQ7CisJZHJtLT5tb2RlX2NvbmZpZy5tYXhfd2lkdGggPSBLTUJfTUFYX1dJRFRIOworCWRy bS0+bW9kZV9jb25maWcubWF4X2hlaWdodCA9IEtNQl9NQVhfSEVJR0hUOworCWRybS0+bW9kZV9j b25maWcuZnVuY3MgPSAma21iX21vZGVfY29uZmlnX2Z1bmNzOworCXJldHVybiAwOworfQorCitz dGF0aWMgaXJxcmV0dXJuX3QgaGFuZGxlX2xjZF9pcnEoc3RydWN0IGRybV9kZXZpY2UgKmRldikK K3sKKwl1bnNpZ25lZCBsb25nIHN0YXR1cywgdmFsLCB2YWwxOworCWludCBwbGFuZV9pZCwgZG1h MF9zdGF0ZSwgZG1hMV9zdGF0ZTsKKwlzdHJ1Y3Qga21iX2RybV9wcml2YXRlICprbWIgPSB0b19r bWIoZGV2KTsKKworCXN0YXR1cyA9IGttYl9yZWFkX2xjZChrbWIsIExDRF9JTlRfU1RBVFVTKTsK KworCWlmIChzdGF0dXMgJiBMQ0RfSU5UX0VPRikgeworCisJCWttYl93cml0ZV9sY2Qoa21iLCBM Q0RfSU5UX0NMRUFSLCBMQ0RfSU5UX0VPRik7CisKKwkJLyogV2hlbiBkaXNhYmxpbmcvZW5hYmxp bmcgTENEIGxheWVycywgdGhlIGNoYW5nZSB0YWtlcyBlZmZlY3QKKwkJICogaW1tZWRpYXRlbHkg YW5kIGRvZXMgbm90IHdhaXQgZm9yIEVPRiAoZW5kIG9mIGZyYW1lKS4KKwkJICogV2hlbiBrbWJf cGxhbmVfYXRvbWljX2Rpc2FibGUgaXMgY2FsbGVkLCBtYXJrIHRoZSBwbGFuZSBhcworCQkgKiBk aXNhYmxlZCBidXQgYWN0dWFsbHkgZGlzYWJsZSB0aGUgcGxhbmUgd2hlbiBFT0YgaXJxIGlzCisJ CSAqIGJlaW5nIGhhbmRsZWQuCisJCSAqLworCQlmb3IgKHBsYW5lX2lkID0gTEFZRVJfMDsKKwkJ CQlwbGFuZV9pZCA8IGttYi0+bl9sYXllcnM7IHBsYW5lX2lkKyspIHsKKwkJCWlmIChwbGFuZV9z dGF0dXNbcGxhbmVfaWRdLmRpc2FibGUpIHsKKwkJCQlrbWJfY2xyX2JpdG1hc2tfbGNkKGttYiwK KwkJCQkJCSAgICBMQ0RfTEFZRVJuX0RNQV9DRkcKKwkJCQkJCSAgICAocGxhbmVfaWQpLAorCQkJ CQkJICAgIExDRF9ETUFfTEFZRVJfRU5BQkxFKTsKKworCQkJCWttYl9jbHJfYml0bWFza19sY2Qo a21iLCBMQ0RfQ09OVFJPTCwKKwkJCQkJICAgIHBsYW5lX3N0YXR1c1twbGFuZV9pZF0uY3RybCk7 CisKKwkJCQlwbGFuZV9zdGF0dXNbcGxhbmVfaWRdLmRpc2FibGUgPSBmYWxzZTsKKwkJCX0KKwkJ fQorCQlpZiAoa21iX3VuZGVyX2Zsb3cpIHsKKwkJCS8qIERNQSBSZWNvdmVyeSBhZnRlciB1bmRl cmZsb3cgKi8KKwkJCWRtYTBfc3RhdGUgPSAobGF5ZXJfbm8gPT0gMCkgPworCQkJICAgIExDRF9W SURFTzBfRE1BMF9TVEFURSA6IExDRF9WSURFTzFfRE1BMF9TVEFURTsKKwkJCWRtYTFfc3RhdGUg PSAobGF5ZXJfbm8gPT0gMCkgPworCQkJICAgIExDRF9WSURFTzBfRE1BMV9TVEFURSA6IExDRF9W SURFTzFfRE1BMV9TVEFURTsKKworCQkJZG8geworCQkJCWttYl93cml0ZV9sY2Qoa21iLCBMQ0Rf RklGT19GTFVTSCwgMSk7CisJCQkJdmFsID0ga21iX3JlYWRfbGNkKGttYiwgZG1hMF9zdGF0ZSkK KwkJCQkgICAgJiBMQ0RfRE1BX1NUQVRFX0FDVElWRTsKKwkJCQl2YWwxID0ga21iX3JlYWRfbGNk KGttYiwgZG1hMV9zdGF0ZSkKKwkJCQkgICAgJiBMQ0RfRE1BX1NUQVRFX0FDVElWRTsKKwkJCX0g d2hpbGUgKCh2YWwgfHwgdmFsMSkpOworCQkJLyogZGlzYWJsZSBkbWEgKi8KKwkJCWttYl9jbHJf Yml0bWFza19sY2Qoa21iLCBMQ0RfTEFZRVJuX0RNQV9DRkcobGF5ZXJfbm8pLAorCQkJCQkgICAg TENEX0RNQV9MQVlFUl9FTkFCTEUpOworCQkJa21iX3dyaXRlX2xjZChrbWIsIExDRF9GSUZPX0ZM VVNILCAxKTsKKwkJCWttYl9mbHVzaF9kb25lID0gMTsKKwkJCWttYl91bmRlcl9mbG93ID0gMDsK KwkJfQorCisJfQorCisJaWYgKHN0YXR1cyAmIExDRF9JTlRfTElORV9DTVApIHsKKwkJLyogY2xl YXIgbGluZSBjb21wYXJlIGludGVycnVwdCAqLworCQlrbWJfd3JpdGVfbGNkKGttYiwgTENEX0lO VF9DTEVBUiwgTENEX0lOVF9MSU5FX0NNUCk7CisJfQorCisJaWYgKHN0YXR1cyAmIExDRF9JTlRf VkVSVF9DT01QKSB7CisJCS8qIFJlYWQgVlNUQVRVUyAqLworCQl2YWwgPSBrbWJfcmVhZF9sY2Qo a21iLCBMQ0RfVlNUQVRVUyk7CisJCXZhbCA9ICh2YWwgJiBMQ0RfVlNUQVRVU19WRVJUSUNBTF9T VEFUVVNfTUFTSyk7CisJCXN3aXRjaCAodmFsKSB7CisJCWNhc2UgTENEX1ZTVEFUVVNfQ09NUEFS RV9WU1lOQzoKKwkJCS8qIENsZWFyIHZlcnRpY2FsIGNvbXBhcmUgaW50ZXJydXB0ICovCisJCQlr bWJfd3JpdGVfbGNkKGttYiwgTENEX0lOVF9DTEVBUiwgTENEX0lOVF9WRVJUX0NPTVApOworCQkJ aWYgKGttYl9mbHVzaF9kb25lKSB7CisJCQkJa21iX3NldF9iaXRtYXNrX2xjZChrbWIsCisJCQkJ CQkgICAgTENEX0xBWUVSbl9ETUFfQ0ZHCisJCQkJCQkgICAgKGxheWVyX25vKSwKKwkJCQkJCSAg ICBMQ0RfRE1BX0xBWUVSX0VOQUJMRSk7CisJCQkJa21iX2ZsdXNoX2RvbmUgPSAwOworCQkJfQor CQkJZHJtX2hhbmRsZV92YmxhbmsoZGV2LCAwKTsKKwkJCWJyZWFrOworCQljYXNlIExDRF9WU1RB VFVTX0NPTVBBUkVfQkFDS1BPUkNIOgorCQljYXNlIExDRF9WU1RBVFVTX0NPTVBBUkVfQUNUSVZF OgorCQljYXNlIExDRF9WU1RBVFVTX0NPTVBBUkVfRlJPTlRfUE9SQ0g6CisJCQlrbWJfd3JpdGVf bGNkKGttYiwgTENEX0lOVF9DTEVBUiwgTENEX0lOVF9WRVJUX0NPTVApOworCQkJYnJlYWs7CisJ CX0KKwl9CisJaWYgKHN0YXR1cyAmIExDRF9JTlRfRE1BX0VSUikgeworCQl2YWwgPQorCQkgICAg KHN0YXR1cyAmIExDRF9JTlRfRE1BX0VSUiAmCisJCSAgICAga21iX3JlYWRfbGNkKGttYiwgTENE X0lOVF9FTkFCTEUpKTsKKwkJLyogTEFZRVIwIC0gVkwwICovCisJCWlmICh2YWwgJiAoTEFZRVIw X0RNQV9GSUZPX1VOREVSRkxPVyB8CisJCQkgICBMQVlFUjBfRE1BX0NCX0ZJRk9fVU5ERVJGTE9X IHwKKwkJCSAgIExBWUVSMF9ETUFfQ1JfRklGT19VTkRFUkZMT1cpKSB7CisJCQlrbWJfdW5kZXJf ZmxvdysrOworCQkJZHJtX2luZm8oJmttYi0+ZHJtLAorCQkJICAgICIhTEFZRVIwOlZMMCBETUEg VU5ERVJGTE9XIHZhbCA9IDB4JWx4LHVuZGVyX2Zsb3c9JWQiLAorCQkJICAgICB2YWwsIGttYl91 bmRlcl9mbG93KTsKKwkJCS8qIGRpc2FibGUgdW5kZXJmbG93IGludGVycnVwdCAqLworCQkJa21i X2Nscl9iaXRtYXNrX2xjZChrbWIsIExDRF9JTlRfRU5BQkxFLAorCQkJCQkgICAgTEFZRVIwX0RN QV9GSUZPX1VOREVSRkxPVyB8CisJCQkJCSAgICBMQVlFUjBfRE1BX0NCX0ZJRk9fVU5ERVJGTE9X IHwKKwkJCQkJICAgIExBWUVSMF9ETUFfQ1JfRklGT19VTkRFUkZMT1cpOworCQkJa21iX3NldF9i aXRtYXNrX2xjZChrbWIsIExDRF9JTlRfQ0xFQVIsCisJCQkJCSAgICBMQVlFUjBfRE1BX0NCX0ZJ Rk9fVU5ERVJGTE9XIHwKKwkJCQkJICAgIExBWUVSMF9ETUFfRklGT19VTkRFUkZMT1cgfAorCQkJ CQkgICAgTEFZRVIwX0RNQV9DUl9GSUZPX1VOREVSRkxPVyk7CisJCQkvKiBkaXNhYmxlIGF1dG8g cmVzdGFydCBtb2RlICovCisJCQlrbWJfY2xyX2JpdG1hc2tfbGNkKGttYiwgTENEX0xBWUVSbl9E TUFfQ0ZHKDApLAorCQkJCSAgICBMQ0RfRE1BX0xBWUVSX0NPTlRfUElOR19QT05HX1VQREFURSk7 CisJCQlsYXllcl9ubyA9IDA7CisJCX0KKworCQlpZiAodmFsICYgTEFZRVIwX0RNQV9GSUZPX09W RVJGTE9XKQorCQkJZHJtX2luZm8oJmttYi0+ZHJtLAorCQkJCSJMQVlFUjA6VkwwIERNQSBPVkVS RkxPVyB2YWwgPSAweCVseCIsIHZhbCk7CisJCWlmICh2YWwgJiBMQVlFUjBfRE1BX0NCX0ZJRk9f T1ZFUkZMT1cpCisJCQlkcm1faW5mbygma21iLT5kcm0sCisJCQkJIkxBWUVSMDpWTDAgRE1BIENC IE9WRVJGTE9XIHZhbCA9IDB4JWx4IiwgdmFsKTsKKwkJaWYgKHZhbCAmIExBWUVSMF9ETUFfQ1Jf RklGT19PVkVSRkxPVykKKwkJCWRybV9pbmZvKCZrbWItPmRybSwKKwkJCQkiTEFZRVIwOlZMMCBE TUEgQ1IgT1ZFUkZMT1cgdmFsID0gMHglbHgiLCB2YWwpOworCisJCS8qIExBWUVSMSAtIFZMMSAq LworCQlpZiAodmFsICYgKExBWUVSMV9ETUFfRklGT19VTkRFUkZMT1cgfAorCQkJICAgTEFZRVIx X0RNQV9DQl9GSUZPX1VOREVSRkxPVyB8CisJCQkgICBMQVlFUjFfRE1BX0NSX0ZJRk9fVU5ERVJG TE9XKSkgeworCQkJa21iX3VuZGVyX2Zsb3crKzsKKwkJCWRybV9pbmZvKCZrbWItPmRybSwKKwkJ CSAgICAiIUxBWUVSMTpWTDEgRE1BIFVOREVSRkxPVyB2YWwgPSAweCVseCwgdW5kZXJfZmxvdz0l ZCIsCisJCQkgICAgIHZhbCwga21iX3VuZGVyX2Zsb3cpOworCQkJLyogZGlzYWJsZSB1bmRlcmZs b3cgaW50ZXJydXB0ICovCisJCQlrbWJfY2xyX2JpdG1hc2tfbGNkKGttYiwgTENEX0lOVF9FTkFC TEUsCisJCQkJCSAgICBMQVlFUjFfRE1BX0ZJRk9fVU5ERVJGTE9XIHwKKwkJCQkJICAgIExBWUVS MV9ETUFfQ0JfRklGT19VTkRFUkZMT1cgfAorCQkJCQkgICAgTEFZRVIxX0RNQV9DUl9GSUZPX1VO REVSRkxPVyk7CisJCQlrbWJfc2V0X2JpdG1hc2tfbGNkKGttYiwgTENEX0lOVF9DTEVBUiwKKwkJ CQkJICAgIExBWUVSMV9ETUFfQ0JfRklGT19VTkRFUkZMT1cgfAorCQkJCQkgICAgTEFZRVIxX0RN QV9GSUZPX1VOREVSRkxPVyB8CisJCQkJCSAgICBMQVlFUjFfRE1BX0NSX0ZJRk9fVU5ERVJGTE9X KTsKKwkJCS8qIGRpc2FibGUgYXV0byByZXN0YXJ0IG1vZGUgKi8KKwkJCWttYl9jbHJfYml0bWFz a19sY2Qoa21iLCBMQ0RfTEFZRVJuX0RNQV9DRkcoMSksCisJCQkJICAgIExDRF9ETUFfTEFZRVJf Q09OVF9QSU5HX1BPTkdfVVBEQVRFKTsKKwkJCWxheWVyX25vID0gMTsKKwkJfQorCisJCS8qIExB WUVSMSAtIFZMMSAqLworCQlpZiAodmFsICYgTEFZRVIxX0RNQV9GSUZPX09WRVJGTE9XKQorCQkJ ZHJtX2luZm8oJmttYi0+ZHJtLAorCQkJCSJMQVlFUjE6VkwxIERNQSBPVkVSRkxPVyB2YWwgPSAw eCVseCIsIHZhbCk7CisJCWlmICh2YWwgJiBMQVlFUjFfRE1BX0NCX0ZJRk9fT1ZFUkZMT1cpCisJ CQlkcm1faW5mbygma21iLT5kcm0sCisJCQkJIkxBWUVSMTpWTDEgRE1BIENCIE9WRVJGTE9XIHZh bCA9IDB4JWx4IiwgdmFsKTsKKwkJaWYgKHZhbCAmIExBWUVSMV9ETUFfQ1JfRklGT19PVkVSRkxP VykKKwkJCWRybV9pbmZvKCZrbWItPmRybSwKKwkJCQkiTEFZRVIxOlZMMSBETUEgQ1IgT1ZFUkZM T1cgdmFsID0gMHglbHgiLCB2YWwpOworCisJCS8qIExBWUVSMiAtIEdMMCAqLworCQlpZiAodmFs ICYgTEFZRVIyX0RNQV9GSUZPX1VOREVSRkxPVykKKwkJCWRybV9pbmZvKCZrbWItPmRybSwKKwkJ CQkiTEFZRVIyOkdMMCBETUEgVU5ERVJGTE9XIHZhbCA9IDB4JWx4IiwgdmFsKTsKKwkJaWYgKHZh bCAmIExBWUVSMl9ETUFfRklGT19PVkVSRkxPVykKKwkJCWRybV9pbmZvKCZrbWItPmRybSwKKwkJ CQkiTEFZRVIyOkdMMCBETUEgT1ZFUkZMT1cgdmFsID0gMHglbHgiLCB2YWwpOworCisJCS8qIExB WUVSMyAtIEdMMSAqLworCQlpZiAodmFsICYgTEFZRVIzX0RNQV9GSUZPX1VOREVSRkxPVykKKwkJ CWRybV9pbmZvKCZrbWItPmRybSwKKwkJCQkiTEFZRVIzOkdMMSBETUEgVU5ERVJGTE9XIHZhbCA9 IDB4JWx4IiwgdmFsKTsKKwkJaWYgKHZhbCAmIExBWUVSM19ETUFfRklGT19VTkRFUkZMT1cpCisJ CQlkcm1faW5mbygma21iLT5kcm0sCisJCQkJIkxBWUVSMzpHTDEgRE1BIE9WRVJGTE9XIHZhbCA9 IDB4JWx4IiwgdmFsKTsKKwl9CisKKwlpZiAoc3RhdHVzICYgTENEX0lOVF9MQVlFUikgeworCQkv KiBDbGVhciBsYXllciBpbnRlcnJ1cHRzICovCisJCWttYl93cml0ZV9sY2Qoa21iLCBMQ0RfSU5U X0NMRUFSLCBMQ0RfSU5UX0xBWUVSKTsKKwl9CisKKwkvKiBDbGVhciBhbGwgaW50ZXJydXB0cyAq LworCWttYl9zZXRfYml0bWFza19sY2Qoa21iLCBMQ0RfSU5UX0NMRUFSLCAxKTsKKwlyZXR1cm4g SVJRX0hBTkRMRUQ7Cit9CisKKy8qIElSUSBoYW5kbGVyICovCitzdGF0aWMgaXJxcmV0dXJuX3Qg a21iX2lzcihpbnQgaXJxLCB2b2lkICphcmcpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9 IChzdHJ1Y3QgZHJtX2RldmljZSAqKWFyZzsKKwlpcnFyZXR1cm5fdCByZXQgPSBJUlFfTk9ORTsK KworCXJldCA9IGhhbmRsZV9sY2RfaXJxKGRldik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGlj IHZvaWQga21iX2lycV9yZXNldChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQoreworCWttYl93cml0 ZV9sY2QodG9fa21iKGRybSksIExDRF9JTlRfQ0xFQVIsIDB4RkZGRik7CisJa21iX3dyaXRlX2xj ZCh0b19rbWIoZHJtKSwgTENEX0lOVF9FTkFCTEUsIDApOworfQorCitERUZJTkVfRFJNX0dFTV9D TUFfRk9QUyhmb3BzKTsKKworc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIGttYl9kcml2ZXIgPSB7 CisJLmRyaXZlcl9mZWF0dXJlcyA9IERSSVZFUl9HRU0gfAorCSAgICBEUklWRVJfTU9ERVNFVCB8 IERSSVZFUl9BVE9NSUMsCisJLmlycV9oYW5kbGVyID0ga21iX2lzciwKKwkuaXJxX3ByZWluc3Rh bGwgPSBrbWJfaXJxX3Jlc2V0LAorCS5pcnFfdW5pbnN0YWxsID0ga21iX2lycV9yZXNldCwKKwkv KiBHRU0gT3BlcmF0aW9ucyAqLworCS5mb3BzID0gJmZvcHMsCisJRFJNX0dFTV9DTUFfRFJJVkVS X09QU19WTUFQLAorCS5uYW1lID0gImttYi1kcm0iLAorCS5kZXNjID0gIktFRU1CQVkgRElTUExB WSBEUklWRVIgIiwKKwkuZGF0ZSA9ICIyMDE5MDEyMiIsCisJLm1ham9yID0gMSwKKwkubWlub3Ig PSAwLAorfTsKKworc3RhdGljIHZvaWQga21iX2RybV91bmxvYWQoc3RydWN0IGRldmljZSAqZGV2 KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlz dHJ1Y3Qga21iX2RybV9wcml2YXRlICprbWIgPSB0b19rbWIoZHJtKTsKKworI2lmZGVmIERFQlVH CisJZHVtcF9zdGFjaygpOworI2VuZGlmCisJZHJtX2Rldl91bnJlZ2lzdGVyKGRybSk7CisJZHJt X2ttc19oZWxwZXJfcG9sbF9maW5pKGRybSk7CisJb2Zfbm9kZV9wdXQoa21iLT5jcnRjLnBvcnQp OworCWttYi0+Y3J0Yy5wb3J0ID0gTlVMTDsKKwlwbV9ydW50aW1lX2dldF9zeW5jKGRybS0+ZGV2 KTsKKwlkcm1faXJxX3VuaW5zdGFsbChkcm0pOworCXBtX3J1bnRpbWVfcHV0X3N5bmMoZHJtLT5k ZXYpOworCXBtX3J1bnRpbWVfZGlzYWJsZShkcm0tPmRldik7CisKKwlpZiAoa21iLT5sY2RfbW1p bykgeworCQlpb3VubWFwKGttYi0+bGNkX21taW8pOworCQlyZWxlYXNlX21lbV9yZWdpb24oTENE X0JBU0VfQUREUiwgTENEX01NSU9fU0laRSk7CisJfQorCisJaWYgKGttYi0+bWlwaV9tbWlvKSB7 CisJCWlvdW5tYXAoa21iLT5taXBpX21taW8pOworCQlyZWxlYXNlX21lbV9yZWdpb24oTUlQSV9C QVNFX0FERFIsIE1JUElfTU1JT19TSVpFKTsKKwl9CisKKwlpZiAoa21iLT5tc3NjYW1fbW1pbykg eworCQlpb3VubWFwKGttYi0+bXNzY2FtX21taW8pOworCQlyZWxlYXNlX21lbV9yZWdpb24oTVNT X0NBTV9CQVNFX0FERFIsIE1TU19DQU1fTU1JT19TSVpFKTsKKwl9CisKKwlvZl9yZXNlcnZlZF9t ZW1fZGV2aWNlX3JlbGVhc2UoZHJtLT5kZXYpOworCWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRy bSk7CisKKwkvKiBSZWxlYXNlIGNsa3MgKi8KKwlrbWJfZGlzcGxheV9jbGtfZGlzYWJsZSgpOwor CWNsa19wdXQoa21iX2Nsay5jbGtfbGNkKTsKKwljbGtfcHV0KGttYl9jbGsuY2xrX21pcGkpOwor CisJZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisKKwkvKiBVbnJlZ2lzdGVyIERTSSBob3N0 ICovCisJa21iX2RzaV9ob3N0X3VucmVnaXN0ZXIoKTsKK30KKworc3RhdGljIGludCBrbWJfcHJv YmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYg PSBnZXRfZGV2aWNlKCZwZGV2LT5kZXYpOworCXN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmttYjsK KwlpbnQgcmV0ID0gMDsKKworCS8qIFRoZSBicmlkZ2UgKEFEViA3NTM1KSB3aWxsIHJldHVybiAt RVBST0JFX0RFRkVSIHVudGlsIGl0CisJICogaGFzIGEgbWlwaV9kc2lfaG9zdCB0byByZWdpc3Rl ciBpdHMgZGV2aWNlIHRvLiBTbywgd2UKKwkgKiBmaXJzdCByZWdpc3RlciB0aGUgRFNJIGhvc3Qg ZHVyaW5nIHByb2JlIHRpbWUsIGFuZCB0aGVuIHJldHVybgorCSAqIC1FUFJPQkVfREVGRVIgdW50 aWwgdGhlIGJyaWRnZSBpcyBsb2FkZWQuIFByb2JlIHdpbGwgYmUgY2FsbGVkIGFnYWluCisJICog IGFuZCB0aGVuIHRoZSByZXN0IG9mIHRoZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24gY2FuIHByb2Nl ZWQKKwkgKiAgYWZ0ZXJ3YXJkcyBhbmQgdGhlIGJyaWRnZSBjYW4gYmUgc3VjY2Vzc2Z1bGx5IGF0 dGFjaGVkLgorCSAqLworCWFkdl9icmlkZ2UgPSBrbWJfZHNpX2hvc3RfYnJpZGdlX2luaXQoZGV2 KTsKKworCWlmIChhZHZfYnJpZGdlID09IEVSUl9QVFIoLUVQUk9CRV9ERUZFUikpCisJCXJldHVy biAtRVBST0JFX0RFRkVSOworCWVsc2UgaWYgKElTX0VSUihhZHZfYnJpZGdlKSkgeworCQlEUk1f RVJST1IoInByb2JlIGZhaWxlZCB0byBpbml0aWFsaXplIERTSSBob3N0IGJyaWRnZVxuIik7CisJ CXJldHVybiBQVFJfRVJSKGFkdl9icmlkZ2UpOworCX0KKworCS8qIENyZWF0ZSBEUk0gZGV2aWNl ICovCisJa21iID0gZGV2bV9kcm1fZGV2X2FsbG9jKGRldiwgJmttYl9kcml2ZXIsCisJCQlzdHJ1 Y3Qga21iX2RybV9wcml2YXRlLCBkcm0pOworCWlmIChJU19FUlIoa21iKSkKKwkJcmV0dXJuIFBU Ul9FUlIoa21iKTsKKworCWRldl9zZXRfZHJ2ZGF0YShkZXYsICZrbWItPmRybSk7CisKKwlyZXQg PSBrbWJfc2V0dXBfbW9kZV9jb25maWcoJmttYi0+ZHJtKTsKKwlpZiAocmV0KQorCQlnb3RvIGVy cl9mcmVlOworCWRldl9zZXRfZHJ2ZGF0YShkZXYsICZrbWItPmRybSk7CisKKwkvKiBMb2FkIGRy aXZlciAqLworCWttYi0+bl9sYXllcnMgPSBLTUJfTUFYX1BMQU5FUzsKKwlyZXQgPSBrbWJfbG9h ZCgma21iLT5kcm0sIDApOworCWlmIChyZXQgPT0gLUVQUk9CRV9ERUZFUikgeworCQlkcm1faW5m bygma21iLT5kcm0sICJ3YWl0IGZvciBleHRlcm5hbCBicmlkZ2UgZHJpdmVyIERUXG4iKTsKKwkJ cmV0dXJuIC1FUFJPQkVfREVGRVI7CisJfSBlbHNlIGlmIChyZXQpCisJCWdvdG8gZXJyX2ZyZWU7 CisKKwkvKiBTZXQgdGhlIENSVEMncyBwb3J0IHNvIHRoYXQgdGhlIGVuY29kZXIgY29tcG9uZW50 IGNhbiBmaW5kIGl0ICovCisJa21iLT5jcnRjLnBvcnQgPSBvZl9ncmFwaF9nZXRfcG9ydF9ieV9p ZChkZXYtPm9mX25vZGUsIDApOworCXJldCA9IGRybV92YmxhbmtfaW5pdCgma21iLT5kcm0sIGtt Yi0+ZHJtLm1vZGVfY29uZmlnLm51bV9jcnRjKTsKKwlkcm1faW5mbygma21iLT5kcm0sICJtb2Rl X2NvbmZpZy5udW1fY3J0Yz0lZFxuIiwKKwkJCWttYi0+ZHJtLm1vZGVfY29uZmlnLm51bV9jcnRj KTsKKwlpZiAocmV0IDwgMCkgeworCQlkcm1fZXJyKCZrbWItPmRybSwgImZhaWxlZCB0byBpbml0 aWFsaXplIHZibGFua1xuIik7CisJCWdvdG8gZXJyX3ZibGFuazsKKwl9CisKKwlkcm1fbW9kZV9j b25maWdfcmVzZXQoJmttYi0+ZHJtKTsKKwlkcm1fa21zX2hlbHBlcl9wb2xsX2luaXQoJmttYi0+ ZHJtKTsKKworCS8qIFJlZ2lzdGVyIGdyYXBoaWNzIGRldmljZSB3aXRoIHRoZSBrZXJuZWwgKi8K KwlyZXQgPSBkcm1fZGV2X3JlZ2lzdGVyKCZrbWItPmRybSwgMCk7CisKKwlpZiAocmV0KQorCQln b3RvIGVycl9yZWdpc3RlcjsKKworCXJldHVybiAwOworCisgZXJyX3JlZ2lzdGVyOgorCWRybV9r bXNfaGVscGVyX3BvbGxfZmluaSgma21iLT5kcm0pOworIGVycl92Ymxhbms6CisJcG1fcnVudGlt ZV9kaXNhYmxlKGttYi0+ZHJtLmRldik7CisgZXJyX2ZyZWU6CisJZHJtX21vZGVfY29uZmlnX2Ns ZWFudXAoJmttYi0+ZHJtKTsKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlrbWJfZHNp X2hvc3RfdW5yZWdpc3RlcigpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBrbWJf cmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJa21iX2RybV91bmxvYWQo JnBkZXYtPmRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2 aWNlX2lkIGttYl9vZl9tYXRjaFtdID0geworCXsuY29tcGF0aWJsZSA9ICJpbnRlbCxrbWJfZGlz cGxheSJ9LAorCXt9LAorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwga21iX29mX21hdGNo KTsKKworc3RhdGljIGludCBfX21heWJlX3VudXNlZCBrbWJfcG1fc3VzcGVuZChzdHJ1Y3QgZGV2 aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGRldl9nZXRfZHJ2ZGF0YShk ZXYpOworCXN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmttYiA9IGRybSA/IHRvX2ttYihkcm0pIDog TlVMTDsKKworCWlmICgha21iKQorCQlyZXR1cm4gMDsKKworCWRybV9rbXNfaGVscGVyX3BvbGxf ZGlzYWJsZShkcm0pOworCisJa21iLT5zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX3N1c3BlbmQo ZHJtKTsKKwlpZiAoSVNfRVJSKGttYi0+c3RhdGUpKSB7CisJCWRybV9rbXNfaGVscGVyX3BvbGxf ZW5hYmxlKGRybSk7CisJCXJldHVybiBQVFJfRVJSKGttYi0+c3RhdGUpOworCX0KKworCXJldHVy biAwOworfQorCitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIGttYl9wbV9yZXN1bWUoc3RydWN0 IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBkZXZfZ2V0X2RydmRh dGEoZGV2KTsKKwlzdHJ1Y3Qga21iX2RybV9wcml2YXRlICprbWIgPSBkcm0gPyB0b19rbWIoZHJt KSA6IE5VTEw7CisKKwlpZiAoIWttYikKKwkJcmV0dXJuIDA7CisKKwlkcm1fYXRvbWljX2hlbHBl cl9yZXN1bWUoZHJtLCBrbWItPnN0YXRlKTsKKwlkcm1fa21zX2hlbHBlcl9wb2xsX2VuYWJsZShk cm0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBTSU1QTEVfREVWX1BNX09QUyhrbWJfcG1f b3BzLCBrbWJfcG1fc3VzcGVuZCwga21iX3BtX3Jlc3VtZSk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxh dGZvcm1fZHJpdmVyIGttYl9wbGF0Zm9ybV9kcml2ZXIgPSB7CisJLnByb2JlID0ga21iX3Byb2Jl LAorCS5yZW1vdmUgPSBrbWJfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCSAgIC5uYW1lID0gImtt Yi1kcm0iLAorCQkgICAucG0gPSAma21iX3BtX29wcywKKwkJICAgLm9mX21hdGNoX3RhYmxlID0g a21iX29mX21hdGNoLAorCQkgICB9LAorfTsKKworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihrbWJf cGxhdGZvcm1fZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiSW50ZWwgQ29ycG9yYXRpb24iKTsK K01PRFVMRV9ERVNDUklQVElPTigiS2VlbWJheSBEaXNwbGF5IGRyaXZlciIpOworTU9EVUxFX0xJ Q0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfZHJ2 LmggYi9kcml2ZXJzL2dwdS9kcm0va21iL2ttYl9kcnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi4yMmEyOTNlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJt L2ttYi9rbWJfZHJ2LmgKQEAgLTAsMCArMSwxNzIgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMi4wLW9ubHkKKyAqCisgKiBDb3B5cmlnaHQgwqkgMjAxOC0yMDIwIEludGVsIENv cnBvcmF0aW9uCisgKi8KKworI2lmbmRlZiBfX0tNQl9EUlZfSF9fCisjZGVmaW5lIF9fS01CX0RS Vl9IX18KKworI2luY2x1ZGUgImttYl9yZWdzLmgiCisKKyNkZWZpbmUgS01CX01BWF9XSURUSAkJ CTE5MjAgLyptYXggd2lkdGggaW4gcGl4ZWxzICovCisjZGVmaW5lIEtNQl9NQVhfSEVJR0hUCQkJ MTA4MCAvKm1heCBoZWlnaHQgaW4gcGl4ZWxzICovCisjZGVmaW5lIEtNQl9NSU5fV0lEVEggICAg ICAgICAgICAgICAgICAgMTkyMCAvKm1heCB3aWR0aCBpbiBwaXhlbHMgKi8KKyNkZWZpbmUgS01C X01JTl9IRUlHSFQgICAgICAgICAgICAgICAgICAxMDgwIC8qbWF4IGhlaWdodCBpbiBwaXhlbHMg Ki8KKyNkZWZpbmUgS01CX0xDRF9ERUZBVUxUX0NMSwkJMjAwMDAwMDAwCisjZGVmaW5lIEtNQl9N SVBJX0RFRkFVTFRfQ0xLCQkyNDAwMDAwMAorI2RlZmluZSBLTUJfTUlQSV9ERUZBVUxUX0NGR19D TEsJMjQwMDAwMDAKKyNkZWZpbmUgS01CX1NZU19DTEtfTUhaCQkJNTAwCisKKyNkZWZpbmUgY3J0 Y190b19rbWJfcHJpdih4KQljb250YWluZXJfb2YoeCwgc3RydWN0IGttYl9kcm1fcHJpdmF0ZSwg Y3J0YykKKworI2RlZmluZSBJQ0FNX01NSU8JCTB4M2IxMDAwMDAKKyNkZWZpbmUgSUNBTV9MQ0Rf T0ZGU0VUCQkweDEwODAKKyNkZWZpbmUgSUNBTV9NTUlPX1NJWkUJCTB4MjAwMAorc3RydWN0IGtt Yl9kcm1fcHJpdmF0ZSB7CisJc3RydWN0IGRybV9kZXZpY2UJCWRybTsKKwl2b2lkIF9faW9tZW0J CQkqbGNkX21taW87CisJdm9pZCBfX2lvbWVtCQkJKm1pcGlfbW1pbzsKKwl2b2lkIF9faW9tZW0J CQkqbXNzY2FtX21taW87CisJdW5zaWduZWQgY2hhcgkJCW5fbGF5ZXJzOworCXN0cnVjdCBjbGsJ CQkqY2xrOworCXN0cnVjdCBkcm1fY3J0YwkJCWNydGM7CisJc3RydWN0IGttYl9wbGFuZQkJKnBs YW5lOworCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlCQkqc3RhdGU7CisJc3BpbmxvY2tfdAkJCWly cV9sb2NrOworCWludAkJCQlpcnFfbGNkOworCWludAkJCQlpcnFfbWlwaTsKKwlpbnQJCQkJc3lz X2Nsa19taHo7CisJZG1hX2FkZHJfdAkJCWZiX2FkZHI7Cit9OworCitzdHJ1Y3Qga21iX2Nsb2Nr IHsKKwlzdHJ1Y3QgY2xrICpjbGtfbGNkOworCXN0cnVjdCBjbGsgKmNsa19taXBpOworCXN0cnVj dCBjbGsgKmNsa19taXBpX2VjZmc7CisJc3RydWN0IGNsayAqY2xrX21pcGlfY2ZnOworCXN0cnVj dCBjbGsgKmNsa19wbGwwOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3Qga21iX2RybV9wcml2 YXRlICp0b19rbWIoY29uc3Qgc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gY29u dGFpbmVyX29mKGRldiwgc3RydWN0IGttYl9kcm1fcHJpdmF0ZSwgZHJtKTsKK30KKworc3RydWN0 IGJsdF9sYXllcl9jb25maWcgeworCXVuc2lnbmVkIGNoYXIgbGF5ZXJfZm9ybWF0OworfTsKKwor c3RhdGljIGlubGluZSB2b2lkIGttYl93cml0ZV9sY2Qoc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAq ZGV2X3AsCisJCQkJIHVuc2lnbmVkIGludCByZWcsIHUzMiB2YWx1ZSkKK3sKKwl3cml0ZWwodmFs dWUsIChkZXZfcC0+bGNkX21taW8gKyByZWcpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGtt Yl93cml0ZV9taXBpKHN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmRldl9wLAorCQkJCSAgdW5zaWdu ZWQgaW50IHJlZywgdTMyIHZhbHVlKQoreworCXdyaXRlbCh2YWx1ZSwgKGRldl9wLT5taXBpX21t aW8gKyByZWcpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGttYl93cml0ZV9tc3NjYW0oc3Ry dWN0IGttYl9kcm1fcHJpdmF0ZSAqZGV2X3AsCisJCQkJICAgIHVuc2lnbmVkIGludCByZWcsIHUz MiB2YWx1ZSkKK3sKKwl3cml0ZWwodmFsdWUsIChkZXZfcC0+bXNzY2FtX21taW8gKyByZWcpKTsK K30KKworc3RhdGljIGlubGluZSB1MzIga21iX3JlYWRfbXNzY2FtKHN0cnVjdCBrbWJfZHJtX3By aXZhdGUgKmRldl9wLAorCQkJCSAgdW5zaWduZWQgaW50IHJlZykKK3sKKwlyZXR1cm4gcmVhZGwo ZGV2X3AtPm1zc2NhbV9tbWlvICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGttYl9z ZXRfYml0bWFza19tc3NjYW0oc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqZGV2X3AsCisJCQkJCSAg dW5zaWduZWQgaW50IHJlZywgdTMyIG1hc2spCit7CisJdTMyIHJlZ192YWwgPSBrbWJfcmVhZF9t c3NjYW0oZGV2X3AsIHJlZyk7CisKKwlrbWJfd3JpdGVfbXNzY2FtKGRldl9wLCByZWcsIChyZWdf dmFsIHwgbWFzaykpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBrbWJfcmVhZF9sY2Qoc3RydWN0 IGttYl9kcm1fcHJpdmF0ZSAqZGV2X3AsIHVuc2lnbmVkIGludCByZWcpCit7CisJcmV0dXJuIHJl YWRsKGRldl9wLT5sY2RfbW1pbyArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrbWJf c2V0X2JpdG1hc2tfbGNkKHN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmRldl9wLAorCQkJCSAgICAg ICB1bnNpZ25lZCBpbnQgcmVnLCB1MzIgbWFzaykKK3sKKwl1MzIgcmVnX3ZhbCA9IGttYl9yZWFk X2xjZChkZXZfcCwgcmVnKTsKKworCWttYl93cml0ZV9sY2QoZGV2X3AsIHJlZywgKHJlZ192YWwg fCBtYXNrKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrbWJfY2xyX2JpdG1hc2tfbGNkKHN0 cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmRldl9wLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgcmVn LCB1MzIgbWFzaykKK3sKKwl1MzIgcmVnX3ZhbCA9IGttYl9yZWFkX2xjZChkZXZfcCwgcmVnKTsK KworCWttYl93cml0ZV9sY2QoZGV2X3AsIHJlZywgKHJlZ192YWwgJiAofm1hc2spKSk7Cit9CisK K3N0YXRpYyBpbmxpbmUgdTMyIGttYl9yZWFkX21pcGkoc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAq ZGV2X3AsIHVuc2lnbmVkIGludCByZWcpCit7CisJcmV0dXJuIHJlYWRsKGRldl9wLT5taXBpX21t aW8gKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQga21iX3dyaXRlX2JpdHNfbWlwaShz dHJ1Y3Qga21iX2RybV9wcml2YXRlICpkZXZfcCwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IHJl ZywgdTMyIG9mZnNldCwKKwkJCQkgICAgICAgdTMyIG51bV9iaXRzLCB1MzIgdmFsdWUpCit7CisJ dTMyIHJlZ192YWwgPSBrbWJfcmVhZF9taXBpKGRldl9wLCByZWcpOworCXUzMiBtYXNrID0gKDEg PDwgbnVtX2JpdHMpIC0gMTsKKworCXZhbHVlICY9IG1hc2s7CisJbWFzayA8PD0gb2Zmc2V0Owor CXJlZ192YWwgJj0gKH5tYXNrKTsKKwlyZWdfdmFsIHw9ICh2YWx1ZSA8PCBvZmZzZXQpOworI2lm ZGVmIERFQlVHCisJaWYgKHJlZyA9PSBEUEhZX0ZSRVFfQ1RSTDBfMyArIDQpIHsKKwkJRFJNX0lO Rk8oIiVzIDogJWQgIHJlZz0weCV4IG9mZnNldD0lZCBudW1fYml0cz0lZCB2YWw9MHgleFxuIiwK KwkJCSBfX2Z1bmNfXywgX19MSU5FX18sIHJlZywgb2Zmc2V0LCBudW1fYml0cywKKwkJCSByZWdf dmFsKTsKKwl9CisjZW5kaWYKKwlrbWJfd3JpdGVfbWlwaShkZXZfcCwgcmVnLCByZWdfdmFsKTsK K30KKworc3RhdGljIGlubGluZSB2b2lkIGttYl9zZXRfYml0X21pcGkoc3RydWN0IGttYl9kcm1f cHJpdmF0ZSAqZGV2X3AsCisJCQkJICAgIHVuc2lnbmVkIGludCByZWcsIHUzMiBvZmZzZXQpCit7 CisJdTMyIHJlZ192YWwgPSBrbWJfcmVhZF9taXBpKGRldl9wLCByZWcpOworCisJa21iX3dyaXRl X21pcGkoZGV2X3AsIHJlZywgcmVnX3ZhbCB8ICgxIDw8IG9mZnNldCkpOworfQorCitzdGF0aWMg aW5saW5lIHZvaWQga21iX2Nscl9iaXRfbWlwaShzdHJ1Y3Qga21iX2RybV9wcml2YXRlICpkZXZf cCwKKwkJCQkgICAgdW5zaWduZWQgaW50IHJlZywgdTMyIG9mZnNldCkKK3sKKwl1MzIgcmVnX3Zh bCA9IGttYl9yZWFkX21pcGkoZGV2X3AsIHJlZyk7CisKKwlrbWJfd3JpdGVfbWlwaShkZXZfcCwg cmVnLCByZWdfdmFsICYgKH4oMSA8PCBvZmZzZXQpKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9p ZCBrbWJfc2V0X2JpdG1hc2tfbWlwaShzdHJ1Y3Qga21iX2RybV9wcml2YXRlICpkZXZfcCwKKwkJ CQkJdW5zaWduZWQgaW50IHJlZywgdTMyIG1hc2spCit7CisJdTMyIHJlZ192YWwgPSBrbWJfcmVh ZF9taXBpKGRldl9wLCByZWcpOworCisJa21iX3dyaXRlX21pcGkoZGV2X3AsIHJlZywgKHJlZ192 YWwgfCBtYXNrKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrbWJfY2xyX2JpdG1hc2tfbWlw aShzdHJ1Y3Qga21iX2RybV9wcml2YXRlICpkZXZfcCwKKwkJCQkJdW5zaWduZWQgaW50IHJlZywg dTMyIG1hc2spCit7CisJdTMyIHJlZ192YWwgPSBrbWJfcmVhZF9taXBpKGRldl9wLCByZWcpOwor CisJa21iX3dyaXRlX21pcGkoZGV2X3AsIHJlZywgKHJlZ192YWwgJiAofm1hc2spKSk7Cit9CisK K2ludCBrbWJfc2V0dXBfY3J0YyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK3ZvaWQga21iX3Nl dF9zY2Fub3V0KHN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmxjZCk7CisjZW5kaWYgLyogX19LTUJf RFJWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfZHNpLmMgYi9k cml2ZXJzL2dwdS9kcm0va21iL2ttYl9kc2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi44MTllZTY2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2ttYi9r bWJfZHNpLmMKQEAgLTAsMCArMSwxODM0IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMC1vbmx5CisvKgorICogQ29weXJpZ2h0IMKpIDIwMTktMjAyMCBJbnRlbCBDb3Jwb3Jh dGlvbgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2dw aW8vY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgv c3BpbmxvY2suaD4KKworI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1 ZGUgPGRybS9kcm1fYnJpZGdlLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jb25uZWN0b3IuaD4KKyNp bmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+ CisjaW5jbHVkZSA8ZHJtL2RybV9lZGlkLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9taXBpX2RzaS5o PgorI2luY2x1ZGUgPGRybS9kcm1fcHJpbnQuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3Byb2JlX2hl bHBlci5oPgorCisjaW5jbHVkZSAia21iX2Rydi5oIgorI2luY2x1ZGUgImttYl9kc2kuaCIKKyNp bmNsdWRlICJrbWJfcmVncy5oIgorCitzdGF0aWMgaW50IGh3X2luaXRpYWxpemVkOworLyogI2Rl ZmluZSBNSVBJX1RYX1RFU1RfUEFUVEVSTl9HRU5FUkFUSU9OICovCisvKiAjZGVmaW5lIERQSFlf R0VUX0ZTTSAqLworLyogI2RlZmluZSBEUEhZX1JFQURfVEVTVENPREUgKi8KKworc3RhdGljIHN0 cnVjdCBtaXBpX2RzaV9ob3N0ICpkc2lfaG9zdDsKK3N0YXRpYyBzdHJ1Y3QgbWlwaV9kc2lfZGV2 aWNlICpkc2lfZGV2aWNlOworCisvKiBEZWZhdWx0IHNldHRpbmcgaXMgMTA4MHAsIDQgbGFuZXMg Ki8KKyNkZWZpbmUgSU1HX0hFSUdIVF9MSU5FUyAgMTA4MAorI2RlZmluZSBJTUdfV0lEVEhfUFgg ICAgICAxOTIwCisjZGVmaW5lIE1JUElfVFhfQUNUSVZFX0xBTkVTIDQKKworc3RydWN0IG1pcGlf dHhfZnJhbWVfc2VjdGlvbl9jZmcgbWlwaV90eF9mcmFtZTBfc2VjdF9jZmcgPSB7CisJLndpZHRo X3BpeGVscyA9IElNR19XSURUSF9QWCwKKwkuaGVpZ2h0X2xpbmVzID0gSU1HX0hFSUdIVF9MSU5F UywKKwkuZGF0YV90eXBlID0gRFNJX0xQX0RUX1BQU19SR0I4ODhfMjRCLAorCS5kYXRhX21vZGUg PSBNSVBJX0RBVEFfTU9ERTEsCisJLmRtYV9wYWNrZWQgPSAwCit9OworCitzdHJ1Y3QgbWlwaV90 eF9mcmFtZV9jZmcgbWlwaXR4X2ZyYW1lMF9jZmcgPSB7CisJLnNlY3Rpb25zWzBdID0gJm1pcGlf dHhfZnJhbWUwX3NlY3RfY2ZnLAorCS5zZWN0aW9uc1sxXSA9IE5VTEwsCisJLnNlY3Rpb25zWzJd ID0gTlVMTCwKKwkuc2VjdGlvbnNbM10gPSBOVUxMLAorCS52c3luY193aWR0aCA9IDUsCisJLnZf YmFja3BvcmNoID0gMzYsCisJLnZfZnJvbnRwb3JjaCA9IDQsCisJLmhzeW5jX3dpZHRoID0gNDQs CisJLmhfYmFja3BvcmNoID0gMTQ4LAorCS5oX2Zyb250cG9yY2ggPSA4OAorfTsKKworc3RydWN0 IG1pcGlfdHhfZHNpX2NmZyBtaXBpdHhfZHNpX2NmZyA9IHsKKwkuaGZwX2JsYW5rX2VuID0gMCwK KwkuZW90cF9lbiA9IDAsCisJLmxwbV9sYXN0X3ZmcF9saW5lID0gMCwKKwkubHBtX2ZpcnN0X3Zz YV9saW5lID0gMCwKKwkuc3luY19wdWxzZV9ldmVudG4gPSBEU0lfVklERU9fTU9ERV9OT19CVVJT VF9FVkVOVCwKKwkuaGZwX2JsYW5raW5nID0gU0VORF9CTEFOS19QQUNLRVQsCisJLmhicF9ibGFu a2luZyA9IFNFTkRfQkxBTktfUEFDS0VULAorCS5oc2FfYmxhbmtpbmcgPSBTRU5EX0JMQU5LX1BB Q0tFVCwKKwkudl9ibGFua2luZyA9IFNFTkRfQkxBTktfUEFDS0VULAorfTsKKworc3RydWN0IG1p cGlfY3RybF9jZmcgbWlwaV90eF9pbml0X2NmZyA9IHsKKwkuaW5kZXggPSBNSVBJX0NUUkw2LAor CS50eXBlID0gTUlQSV9EU0ksCisJLmRpciA9IE1JUElfVFgsCisJLmFjdGl2ZV9sYW5lcyA9IE1J UElfVFhfQUNUSVZFX0xBTkVTLAorCS5sYW5lX3JhdGVfbWJwcyA9IE1JUElfVFhfTEFORV9EQVRB X1JBVEVfTUJQUywKKwkucmVmX2Nsa19raHogPSBNSVBJX1RYX1JFRl9DTEtfS0haLAorCS5jZmdf Y2xrX2toeiA9IE1JUElfVFhfQ0ZHX0NMS19LSFosCisJLmRhdGFfaWYgPSBNSVBJX0lGX1BBUkFM TEVMLAorCS50eF9jdHJsX2NmZyA9IHsKKwkJCS5mcmFtZXNbMF0gPSAmbWlwaXR4X2ZyYW1lMF9j ZmcsCisJCQkuZnJhbWVzWzFdID0gTlVMTCwKKwkJCS5mcmFtZXNbMl0gPSBOVUxMLAorCQkJLmZy YW1lc1szXSA9IE5VTEwsCisJCQkudHhfZHNpX2NmZyA9ICZtaXBpdHhfZHNpX2NmZywKKwkJCS5s aW5lX3N5bmNfcGt0X2VuID0gMCwKKwkJCS5saW5lX2NvdW50ZXJfYWN0aXZlID0gMCwKKwkJCS5m cmFtZV9jb3VudGVyX2FjdGl2ZSA9IDAsCisJCQkudHhfYWx3YXlzX3VzZV9oYWN0ID0gMSwKKwkJ CS50eF9oYWN0X3dhaXRfc3RvcCA9IDEsCisJCQl9Cit9OworCitzdHJ1Y3QgIG1pcGlfaHNfZnJl cV9yYW5nZV9jZmcgeworCXVpbnQxNl90IGRlZmF1bHRfYml0X3JhdGVfbWJwczsKKwl1aW50OF90 IGhzZnJlcXJhbmdlX2NvZGU7Cit9OworCitzdHJ1Y3QgdmNvX3BhcmFtcyB7CisJdTMyIGZyZXE7 CisJdTMyIHJhbmdlOworCXUzMiBkaXZpZGVyOworfTsKKworc3RhdGljIHN0cnVjdCB2Y29fcGFy YW1zIHZjb190YWJsZVtdID0geworCXs1MiwgMHgzZiwgOH0sCisJezgwLCAweDM5LCA4fSwKKwl7 MTA1LCAweDJmLCA0fSwKKwl7MTYwLCAweDI5LCA0fSwKKwl7MjEwLCAweDFmLCAyfSwKKwl7MzIw LCAweDE5LCAyfSwKKwl7NDIwLCAweDBmLCAxfSwKKwl7NjMwLCAweDA5LCAxfSwKKwl7MTEwMCwg MHgwMywgMX0sCisJezB4ZmZmZiwgMHgwMSwgMX0sCit9OworCitzdGF0aWMgc3RydWN0IG1pcGlf aHNfZnJlcV9yYW5nZV9jZmcKK21pcGlfaHNfZnJlcV9yYW5nZVtNSVBJX0RQSFlfREVGQVVMVF9C SVRfUkFURVNdID0geworCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gODAsIC5oc2ZyZXFyYW5n ZV9jb2RlID0gMHgwMH0sCisJey5kZWZhdWx0X2JpdF9yYXRlX21icHMgPSA5MCwgLmhzZnJlcXJh bmdlX2NvZGUgPSAweDEwfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDEwMCwgLmhzZnJl cXJhbmdlX2NvZGUgPSAweDIwfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDExMCwgLmhz ZnJlcXJhbmdlX2NvZGUgPSAweDMwfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDEyMCwg LmhzZnJlcXJhbmdlX2NvZGUgPSAweDAxfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDEz MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDExfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9 IDE0MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDIxfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJw cyA9IDE1MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDMxfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVf bWJwcyA9IDE2MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDAyfSwKKwl7LmRlZmF1bHRfYml0X3Jh dGVfbWJwcyA9IDE3MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDEyfSwKKwl7LmRlZmF1bHRfYml0 X3JhdGVfbWJwcyA9IDE4MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDIyfSwKKwl7LmRlZmF1bHRf Yml0X3JhdGVfbWJwcyA9IDE5MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDMyfSwKKwl7LmRlZmF1 bHRfYml0X3JhdGVfbWJwcyA9IDIwNSwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDAzfSwKKwl7LmRl ZmF1bHRfYml0X3JhdGVfbWJwcyA9IDIyMCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDEzfSwKKwl7 LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDIzNSwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDIzfSwK Kwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDI1MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDMz fSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDI3NSwgLmhzZnJlcXJhbmdlX2NvZGUgPSAw eDA0fSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDMwMCwgLmhzZnJlcXJhbmdlX2NvZGUg PSAweDE0fSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDMyNSwgLmhzZnJlcXJhbmdlX2Nv ZGUgPSAweDI1fSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDM1MCwgLmhzZnJlcXJhbmdl X2NvZGUgPSAweDM1fSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDQwMCwgLmhzZnJlcXJh bmdlX2NvZGUgPSAweDA1fSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDQ1MCwgLmhzZnJl cXJhbmdlX2NvZGUgPSAweDE2fSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDUwMCwgLmhz ZnJlcXJhbmdlX2NvZGUgPSAweDI2fSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDU1MCwg LmhzZnJlcXJhbmdlX2NvZGUgPSAweDM3fSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDYw MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDA3fSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9 IDY1MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDE4fSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJw cyA9IDcwMCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDI4fSwKKwl7LmRlZmF1bHRfYml0X3JhdGVf bWJwcyA9IDc1MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDM5fSwKKwl7LmRlZmF1bHRfYml0X3Jh dGVfbWJwcyA9IDgwMCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDA5fSwKKwl7LmRlZmF1bHRfYml0 X3JhdGVfbWJwcyA9IDg1MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDE5fSwKKwl7LmRlZmF1bHRf Yml0X3JhdGVfbWJwcyA9IDkwMCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDI5fSwKKwl7LmRlZmF1 bHRfYml0X3JhdGVfbWJwcyA9IDEwMDAsIC5oc2ZyZXFyYW5nZV9jb2RlID0gMHgwQX0sCisJey5k ZWZhdWx0X2JpdF9yYXRlX21icHMgPSAxMDUwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MUF9LAor CXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMTEwMCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDJB fSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDExNTAsIC5oc2ZyZXFyYW5nZV9jb2RlID0g MHgzQn0sCisJey5kZWZhdWx0X2JpdF9yYXRlX21icHMgPSAxMjAwLCAuaHNmcmVxcmFuZ2VfY29k ZSA9IDB4MEJ9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMTI1MCwgLmhzZnJlcXJhbmdl X2NvZGUgPSAweDFCfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDEzMDAsIC5oc2ZyZXFy YW5nZV9jb2RlID0gMHgyQn0sCisJey5kZWZhdWx0X2JpdF9yYXRlX21icHMgPSAxMzUwLCAuaHNm cmVxcmFuZ2VfY29kZSA9IDB4M0N9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMTQwMCwg LmhzZnJlcXJhbmdlX2NvZGUgPSAweDBDfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDE0 NTAsIC5oc2ZyZXFyYW5nZV9jb2RlID0gMHgxQ30sCisJey5kZWZhdWx0X2JpdF9yYXRlX21icHMg PSAxNTAwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MkN9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9t YnBzID0gMTU1MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDNEfSwKKwl7LmRlZmF1bHRfYml0X3Jh dGVfbWJwcyA9IDE2MDAsIC5oc2ZyZXFyYW5nZV9jb2RlID0gMHgwRH0sCisJey5kZWZhdWx0X2Jp dF9yYXRlX21icHMgPSAxNjUwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MUR9LAorCXsuZGVmYXVs dF9iaXRfcmF0ZV9tYnBzID0gMTcwMCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDJFfSwKKwl7LmRl ZmF1bHRfYml0X3JhdGVfbWJwcyA9IDE3NTAsIC5oc2ZyZXFyYW5nZV9jb2RlID0gMHgzRX0sCisJ ey5kZWZhdWx0X2JpdF9yYXRlX21icHMgPSAxODAwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MEV9 LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMTg1MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAw eDFFfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDE5MDAsIC5oc2ZyZXFyYW5nZV9jb2Rl ID0gMHgyRn0sCisJey5kZWZhdWx0X2JpdF9yYXRlX21icHMgPSAxOTUwLCAuaHNmcmVxcmFuZ2Vf Y29kZSA9IDB4M0Z9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMjAwMCwgLmhzZnJlcXJh bmdlX2NvZGUgPSAweDBGfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDIwNTAsIC5oc2Zy ZXFyYW5nZV9jb2RlID0gMHg0MH0sCisJey5kZWZhdWx0X2JpdF9yYXRlX21icHMgPSAyMTAwLCAu aHNmcmVxcmFuZ2VfY29kZSA9IDB4NDF9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMjE1 MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDQyfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9 IDIyMDAsIC5oc2ZyZXFyYW5nZV9jb2RlID0gMHg0M30sCisJey5kZWZhdWx0X2JpdF9yYXRlX21i cHMgPSAyMjUwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4NDR9LAorCXsuZGVmYXVsdF9iaXRfcmF0 ZV9tYnBzID0gMjMwMCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDQ1fSwKKwl7LmRlZmF1bHRfYml0 X3JhdGVfbWJwcyA9IDIzNTAsIC5oc2ZyZXFyYW5nZV9jb2RlID0gMHg0Nn0sCisJey5kZWZhdWx0 X2JpdF9yYXRlX21icHMgPSAyNDAwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4NDd9LAorCXsuZGVm YXVsdF9iaXRfcmF0ZV9tYnBzID0gMjQ1MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDQ4fSwKKwl7 LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDI1MDAsIC5oc2ZyZXFyYW5nZV9jb2RlID0gMHg0OX0K K307CisKK3VuaW9uIG1pcGlfaXJxX2NmZyBpbnRfY2ZnID0geworCS5pcnFfY2ZnLmZyYW1lX2Rv bmUgPSAxLAorCS5pcnFfY2ZnLmN0cmxfZXJyb3IgPSAxLAorfTsKKworc3RhdGljIGVudW0gZHJt X21vZGVfc3RhdHVzCitrbWJfZHNpX21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvciwKKwkJICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OworCXN0cnVjdCBkcm1fbW9kZV9jb25m aWcgKm1vZGVfY29uZmlnID0gJmRldi0+bW9kZV9jb25maWc7CisKKwlpZiAobW9kZS0+aGRpc3Bs YXkgPCBtb2RlX2NvbmZpZy0+bWluX3dpZHRoIHx8CisJCQltb2RlLT5oZGlzcGxheSA+IG1vZGVf Y29uZmlnLT5tYXhfd2lkdGgpCisJCXJldHVybiBNT0RFX0JBRF9IVkFMVUU7CisKKwlpZiAobW9k ZS0+dmRpc3BsYXkgPCBtb2RlX2NvbmZpZy0+bWluX2hlaWdodCB8fAorCQkJbW9kZS0+dmRpc3Bs YXkgPiBtb2RlX2NvbmZpZy0+bWF4X2hlaWdodCkKKwkJcmV0dXJuIE1PREVfQkFEX1ZWQUxVRTsK KworCXJldHVybiBNT0RFX09LOworfQorCitzdGF0aWMgaW50IGttYl9kc2lfZ2V0X21vZGVzKHN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJaW50IG51bV9tb2RlcyA9IDA7CisK KwludW1fbW9kZXMgPSBkcm1fYWRkX21vZGVzX25vZWRpZChjb25uZWN0b3IsCisJCQkgY29ubmVj dG9yLT5kZXYtPm1vZGVfY29uZmlnLm1heF93aWR0aCwKKwkJCSBjb25uZWN0b3ItPmRldi0+bW9k ZV9jb25maWcubWF4X2hlaWdodCk7CisKKwlEUk1fSU5GTygid2lkdGg9JWQgaGVpZ2h0PSVkXG4i LAorCQkgY29ubmVjdG9yLT5kZXYtPm1vZGVfY29uZmlnLm1heF93aWR0aCwKKwkJIGNvbm5lY3Rv ci0+ZGV2LT5tb2RlX2NvbmZpZy5tYXhfaGVpZ2h0KTsKKwlEUk1fSU5GTygibnVtIG1vZGVzPSVk XG4iLCBudW1fbW9kZXMpOworCisJcmV0dXJuIG51bV9tb2RlczsKK30KKwordm9pZCBrbWJfZHNp X2hvc3RfdW5yZWdpc3Rlcih2b2lkKQoreworCW1pcGlfZHNpX2hvc3RfdW5yZWdpc3Rlcihkc2lf aG9zdCk7CisJa2ZyZWUoZHNpX2hvc3QpOworfQorCitzdGF0aWMgdm9pZCBrbWJfZHNpX2Nvbm5l Y3Rvcl9kZXN0cm95KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0 IGttYl9jb25uZWN0b3IgKmttYl9jb25uZWN0b3IgPSB0b19rbWJfY29ubmVjdG9yKGNvbm5lY3Rv cik7CisKKwlkcm1fY29ubmVjdG9yX2NsZWFudXAoY29ubmVjdG9yKTsKKwlrZnJlZShrbWJfY29u bmVjdG9yKTsKK30KKworc3RhdGljIHZvaWQga21iX2RzaV9lbmNvZGVyX2Rlc3Ryb3koc3RydWN0 IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBrbWJfZHNpICprbWJfZHNpID0gdG9f a21iX2RzaShlbmNvZGVyKTsKKworCWlmICgha21iX2RzaSkKKwkJcmV0dXJuOworCisJa2ZyZWUo a21iX2RzaS0+ZHNpX2hvc3QpOworCisJZHJtX2VuY29kZXJfY2xlYW51cChlbmNvZGVyKTsKKwor CWttYl9kc2lfY29ubmVjdG9yX2Rlc3Ryb3koJmttYl9kc2ktPmF0dGFjaGVkX2Nvbm5lY3Rvci0+ YmFzZSk7CisKKwlrZnJlZShrbWJfZHNpKTsKKwlpZiAoIWRzaV9kZXZpY2UpCisJCWtmcmVlKGRz aV9kZXZpY2UpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2Z1bmNzIGtt Yl9kc2lfZnVuY3MgPSB7CisJLmRlc3Ryb3kgPSBrbWJfZHNpX2VuY29kZXJfZGVzdHJveSwKK307 CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QKK2RybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzIGttYl9k c2lfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKKwkuZ2V0X21vZGVzID0ga21iX2RzaV9nZXRf bW9kZXMsCisJLm1vZGVfdmFsaWQgPSBrbWJfZHNpX21vZGVfdmFsaWQsCit9OworCitzdGF0aWMg Y29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3Mga21iX2RzaV9jb25uZWN0b3JfZnVuY3Mg PSB7CisJLmRlc3Ryb3kgPSBrbWJfZHNpX2Nvbm5lY3Rvcl9kZXN0cm95LAorCS5maWxsX21vZGVz ID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAorCS5yZXNldCA9IGRy bV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldCwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUg PSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZSwKKwkuYXRvbWljX2R1 cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3Rh dGUsCit9OworCitzdGF0aWMgc3NpemVfdCBrbWJfZHNpX2hvc3RfdHJhbnNmZXIoc3RydWN0IG1p cGlfZHNpX2hvc3QgKmhvc3QsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfbXNnICpt c2cpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQga21iX2RzaV9ob3N0X2F0dGFjaChz dHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCwKKwkJCSAgICAgICBzdHJ1Y3QgbWlwaV9kc2lfZGV2 aWNlICpkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQga21iX2RzaV9ob3N0X2Rl dGFjaChzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCwKKwkJCSAgICAgICBzdHJ1Y3QgbWlwaV9k c2lfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg bWlwaV9kc2lfaG9zdF9vcHMga21iX2RzaV9ob3N0X29wcyA9IHsKKwkuYXR0YWNoID0ga21iX2Rz aV9ob3N0X2F0dGFjaCwKKwkuZGV0YWNoID0ga21iX2RzaV9ob3N0X2RldGFjaCwKKwkudHJhbnNm ZXIgPSBrbWJfZHNpX2hvc3RfdHJhbnNmZXIsCit9OworCitzdGF0aWMgc3RydWN0IGttYl9kc2lf aG9zdCAqa21iX2RzaV9ob3N0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwKKwkJCQkJICAg ICAgc3RydWN0IGttYl9kc2kgKmttYl9kc2kpCit7CisJc3RydWN0IGttYl9kc2lfaG9zdCAqaG9z dDsKKworCWhvc3QgPSBremFsbG9jKHNpemVvZigqaG9zdCksIEdGUF9LRVJORUwpOworCWlmICgh aG9zdCkKKwkJcmV0dXJuIE5VTEw7CisKKwlob3N0LT5iYXNlID0gZHNpX2hvc3Q7CisJaG9zdC0+ YmFzZS0+b3BzID0gJmttYl9kc2lfaG9zdF9vcHM7CisJaG9zdC0+a21iX2RzaSA9IGttYl9kc2k7 CisKKwlob3N0LT5iYXNlLT5kZXYgPSBkcm0tPmRldjsKKworCWRzaV9kZXZpY2UtPmhvc3QgPSBo b3N0LT5iYXNlOworCWhvc3QtPmRldmljZSA9IGRzaV9kZXZpY2U7CisJcmV0dXJuIGhvc3Q7Cit9 CisKK3N0cnVjdCBkcm1fYnJpZGdlICprbWJfZHNpX2hvc3RfYnJpZGdlX2luaXQoc3RydWN0IGRl dmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UgPSBOVUxMOworCXN0cnVj dCBkZXZpY2Vfbm9kZSAqZW5jb2Rlcl9ub2RlOworCisJLyogQ3JlYXRlIGFuZCByZWdpc3RlciBN SVBJIERTSSBob3N0ICovCisJaWYgKCFkc2lfaG9zdCkgeworCQlkc2lfaG9zdCA9IGt6YWxsb2Mo c2l6ZW9mKCpkc2lfaG9zdCksIEdGUF9LRVJORUwpOworCQlpZiAoIWRzaV9ob3N0KQorCQkJcmV0 dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwkJZHNpX2hvc3QtPm9wcyA9ICZrbWJfZHNpX2hvc3Rf b3BzOworCisJCWlmICghZHNpX2RldmljZSkgeworCQkJZHNpX2RldmljZSA9IGt6YWxsb2Moc2l6 ZW9mKCpkc2lfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIWRzaV9kZXZpY2UpIHsKKwkJ CQlrZnJlZShkc2lfaG9zdCk7CisJCQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJCQl9CisJ CX0KKworCQlkc2lfaG9zdC0+ZGV2ID0gZGV2OworCQltaXBpX2RzaV9ob3N0X3JlZ2lzdGVyKGRz aV9ob3N0KTsKKwl9CisJLyogRmluZCBBRFY3NTM1IG5vZGUgYW5kIGluaXRpYWxpemUgaXQgKi8K KwllbmNvZGVyX25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKGRldi0+b2Zfbm9kZSwgImVuY29kZXIt c2xhdmUiLCAwKTsKKworCWlmICghZW5jb2Rlcl9ub2RlKSB7CisJCURSTV9FUlJPUigiRmFpbGVk IHRvIGdldCBicmlkZ2UgaW5mbyBmcm9tIERUXG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZB TCk7CisJfQorCisJLyogTG9jYXRlIGRybSBicmlkZ2UgZnJvbSB0aGUgaGRtaSBlbmNvZGVyIERU IG5vZGUgKi8KKwlicmlkZ2UgPSBvZl9kcm1fZmluZF9icmlkZ2UoZW5jb2Rlcl9ub2RlKTsKKwlv Zl9ub2RlX3B1dChlbmNvZGVyX25vZGUpOworCWlmICghYnJpZGdlKSB7CisJCURSTV9JTkZPKCJX YWl0IGZvciBleHRlcm5hbCBicmlkZ2UgZHJpdmVyIERUXG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIo LUVQUk9CRV9ERUZFUik7CisJfQorCXJldHVybiBicmlkZ2U7Cit9CisKK3UzMiBtaXBpX2dldF9k YXRhdHlwZV9wYXJhbXModTMyIGRhdGFfdHlwZSwgdTMyIGRhdGFfbW9kZSwKKwkJCSAgICAgc3Ry dWN0IG1pcGlfZGF0YV90eXBlX3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBtaXBpX2RhdGFf dHlwZV9wYXJhbXMgZGF0YV90eXBlX3BhcmFtOworCisJc3dpdGNoIChkYXRhX3R5cGUpIHsKKwlj YXNlIERTSV9MUF9EVF9QUFNfWUNCQ1I0MjBfMTJCOgorCQlkYXRhX3R5cGVfcGFyYW0uc2l6ZV9j b25zdHJhaW50X3BpeGVscyA9IDI7CisJCWRhdGFfdHlwZV9wYXJhbS5zaXplX2NvbnN0cmFpbnRf Ynl0ZXMgPSAzOworCQlzd2l0Y2ggKGRhdGFfbW9kZSkgeworCQkJLyogQ2FzZSAwIG5vdCBzdXBw b3J0ZWQgYWNjb3JkaW5nIHRvIE1ESyAqLworCQljYXNlIDE6CisJCWNhc2UgMjoKKwkJY2FzZSAz OgorCQkJZGF0YV90eXBlX3BhcmFtLnBpeGVsc19wZXJfcGNsayA9IDI7CisJCQlkYXRhX3R5cGVf cGFyYW0uYml0c19wZXJfcGNsayA9IDI0OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlEUk1f RVJST1IoIkRTSTogSW52YWxpZCBkYXRhX21vZGUgJWRcbiIsIGRhdGFfbW9kZSk7CisJCQlyZXR1 cm4gLUVJTlZBTDsKKwkJfTsKKwkJYnJlYWs7CisJY2FzZSBEU0lfTFBfRFRfUFBTX1lDQkNSNDIy XzE2QjoKKwkJZGF0YV90eXBlX3BhcmFtLnNpemVfY29uc3RyYWludF9waXhlbHMgPSAyOworCQlk YXRhX3R5cGVfcGFyYW0uc2l6ZV9jb25zdHJhaW50X2J5dGVzID0gNDsKKwkJc3dpdGNoIChkYXRh X21vZGUpIHsKKwkJCS8qIENhc2UgMCBhbmQgMSBub3Qgc3VwcG9ydGVkIGFjY29yZGluZworCQkJ ICogdG8gTURLCisJCQkgKi8KKwkJY2FzZSAyOgorCQkJZGF0YV90eXBlX3BhcmFtLnBpeGVsc19w ZXJfcGNsayA9IDE7CisJCQlkYXRhX3R5cGVfcGFyYW0uYml0c19wZXJfcGNsayA9IDE2OworCQkJ YnJlYWs7CisJCWNhc2UgMzoKKwkJCWRhdGFfdHlwZV9wYXJhbS5waXhlbHNfcGVyX3BjbGsgPSAy OworCQkJZGF0YV90eXBlX3BhcmFtLmJpdHNfcGVyX3BjbGsgPSAzMjsKKwkJCWJyZWFrOworCQlk ZWZhdWx0OgorCQkJRFJNX0VSUk9SKCJEU0k6IEludmFsaWQgZGF0YV9tb2RlICVkXG4iLCBkYXRh X21vZGUpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX07CisJCWJyZWFrOworCWNhc2UgRFNJX0xQ X0RUX0xQUFNfWUNCQ1I0MjJfMjBCOgorCWNhc2UgRFNJX0xQX0RUX1BQU19ZQ0JDUjQyMl8yNEI6 CisJCWRhdGFfdHlwZV9wYXJhbS5zaXplX2NvbnN0cmFpbnRfcGl4ZWxzID0gMjsKKwkJZGF0YV90 eXBlX3BhcmFtLnNpemVfY29uc3RyYWludF9ieXRlcyA9IDY7CisJCXN3aXRjaCAoZGF0YV9tb2Rl KSB7CisJCQkvKiBDYXNlIDAgbm90IHN1cHBvcnRlZCBhY2NvcmRpbmcgdG8gTURLICovCisJCWNh c2UgMToKKwkJY2FzZSAyOgorCQljYXNlIDM6CisJCQlkYXRhX3R5cGVfcGFyYW0ucGl4ZWxzX3Bl cl9wY2xrID0gMTsKKwkJCWRhdGFfdHlwZV9wYXJhbS5iaXRzX3Blcl9wY2xrID0gMjQ7CisJCQli cmVhazsKKwkJZGVmYXVsdDoKKwkJCURSTV9FUlJPUigiRFNJOiBJbnZhbGlkIGRhdGFfbW9kZSAl ZFxuIiwgZGF0YV9tb2RlKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9OworCQlicmVhazsKKwlj YXNlIERTSV9MUF9EVF9QUFNfUkdCNTY1XzE2QjoKKwkJZGF0YV90eXBlX3BhcmFtLnNpemVfY29u c3RyYWludF9waXhlbHMgPSAxOworCQlkYXRhX3R5cGVfcGFyYW0uc2l6ZV9jb25zdHJhaW50X2J5 dGVzID0gMjsKKwkJc3dpdGNoIChkYXRhX21vZGUpIHsKKwkJY2FzZSAwOgorCQljYXNlIDE6CisJ CQlkYXRhX3R5cGVfcGFyYW0ucGl4ZWxzX3Blcl9wY2xrID0gMTsKKwkJCWRhdGFfdHlwZV9wYXJh bS5iaXRzX3Blcl9wY2xrID0gMTY7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQljYXNlIDM6CisJ CQlkYXRhX3R5cGVfcGFyYW0ucGl4ZWxzX3Blcl9wY2xrID0gMjsKKwkJCWRhdGFfdHlwZV9wYXJh bS5iaXRzX3Blcl9wY2xrID0gMzI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCURSTV9FUlJP UigiRFNJOiBJbnZhbGlkIGRhdGFfbW9kZSAlZFxuIiwgZGF0YV9tb2RlKTsKKwkJCXJldHVybiAt RUlOVkFMOworCQl9OworCQlicmVhazsKKwljYXNlIERTSV9MUF9EVF9QUFNfUkdCNjY2XzE4QjoK KwkJZGF0YV90eXBlX3BhcmFtLnNpemVfY29uc3RyYWludF9waXhlbHMgPSA0OworCQlkYXRhX3R5 cGVfcGFyYW0uc2l6ZV9jb25zdHJhaW50X2J5dGVzID0gOTsKKwkJZGF0YV90eXBlX3BhcmFtLmJp dHNfcGVyX3BjbGsgPSAxODsKKwkJZGF0YV90eXBlX3BhcmFtLnBpeGVsc19wZXJfcGNsayA9IDE7 CisJCWJyZWFrOworCWNhc2UgRFNJX0xQX0RUX0xQUFNfUkdCNjY2XzE4QjoKKwljYXNlIERTSV9M UF9EVF9QUFNfUkdCODg4XzI0QjoKKwkJZGF0YV90eXBlX3BhcmFtLnNpemVfY29uc3RyYWludF9w aXhlbHMgPSAxOworCQlkYXRhX3R5cGVfcGFyYW0uc2l6ZV9jb25zdHJhaW50X2J5dGVzID0gMzsK KwkJZGF0YV90eXBlX3BhcmFtLmJpdHNfcGVyX3BjbGsgPSAyNDsKKwkJZGF0YV90eXBlX3BhcmFt LnBpeGVsc19wZXJfcGNsayA9IDE7CisJCWJyZWFrOworCWNhc2UgRFNJX0xQX0RUX1BQU19SR0Ix MDEwMTBfMzBCOgorCQlkYXRhX3R5cGVfcGFyYW0uc2l6ZV9jb25zdHJhaW50X3BpeGVscyA9IDQ7 CisJCWRhdGFfdHlwZV9wYXJhbS5zaXplX2NvbnN0cmFpbnRfYnl0ZXMgPSAxNTsKKwkJZGF0YV90 eXBlX3BhcmFtLmJpdHNfcGVyX3BjbGsgPSAzMDsKKwkJZGF0YV90eXBlX3BhcmFtLnBpeGVsc19w ZXJfcGNsayA9IDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURSTV9FUlJPUigiRFNJOiBJbnZh bGlkIGRhdGFfdHlwZSAlZFxuIiwgZGF0YV90eXBlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfTsK KworCSpwYXJhbXMgPSBkYXRhX3R5cGVfcGFyYW07CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1 MzIgY29tcHV0ZV93Yyh1MzIgd2lkdGhfcHgsIHU4IHNpemVfY29uc3RyX3AsIHU4IHNpemVfY29u c3RyX2IpCit7CisJLyogQ2FsY3VsYXRlIHRoZSB3b3JkIGNvdW50IGZvciBlYWNoIGxvbmcgcGFj a2V0ICovCisJcmV0dXJuICgoKHdpZHRoX3B4IC8gc2l6ZV9jb25zdHJfcCkgKiBzaXplX2NvbnN0 cl9iKSAmIDB4ZmZmZik7Cit9CisKK3N0YXRpYyB1MzIgY29tcHV0ZV91bnBhY2tlZF9ieXRlcyh1 MzIgd2MsIHU4IGJpdHNfcGVyX3BjbGspCit7CisJLyogTnVtYmVyIG9mIFBDTEsgY3ljbGVzIG5l ZWRlZCB0byB0cmFuc2ZlciBhIGxpbmUKKwkgKiB3aXRoIGVhY2ggUENMSyBjeWNsZSwgNCBCeXRl cyBhcmUgc2VudCB0aHJvdWdoIHRoZSBQUEwgbW9kdWxlCisJICovCisJcmV0dXJuICgod2MgKiA4 KSAvIGJpdHNfcGVyX3BjbGspICogNDsKK30KKworc3RhdGljIHUzMiBtaXBpX3R4X2ZnX3NlY3Rp b25fY2ZnX3JlZ3Moc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqa21iLAorCQkJCSAgICAgICB1OCBm cmFtZV9pZCwgdTggc2VjdGlvbiwKKwkJCQkgICAgICAgdTMyIGhlaWdodF9saW5lcywgdTMyIHVu cGFja2VkX2J5dGVzLAorCQkJCSAgICAgICBzdHJ1Y3QgbWlwaV90eF9mcmFtZV9zZWN0X3BoY2Zn ICpwaF9jZmcpCit7CisJdTMyIGNmZyA9IDA7CisJdTMyIGN0cmxfbm8gPSBNSVBJX0NUUkw2Owor CXUzMiByZWdfYWRyOworCisJLyogRnJhbWUgc2VjdGlvbiBwYWNrZXQgaGVhZGVyICovCisJLyog V29yZCBjb3VudCBiaXRzIFsxNTowXSAqLworCWNmZyA9IChwaF9jZmctPndjICYgTUlQSV9UWF9T RUNUX1dDX01BU0spIDw8IDA7CisKKwkvKiBEYXRhIHR5cGUgKGJpdHMgWzIxOjE2XSkgKi8KKwlj ZmcgfD0gKChwaF9jZmctPmRhdGFfdHlwZSAmIE1JUElfVFhfU0VDVF9EVF9NQVNLKQorCQk8PCBN SVBJX1RYX1NFQ1RfRFRfU0hJRlQpOworCisJLyogVmlydHVhbCBjaGFubmVsIChiaXRzIFsyMzoy Ml0pICovCisJY2ZnIHw9ICgocGhfY2ZnLT52Y2hhbm5lbCAmIE1JUElfVFhfU0VDVF9WQ19NQVNL KQorCQk8PCBNSVBJX1RYX1NFQ1RfVkNfU0hJRlQpOworCisJLyogRGF0YSBtb2RlIChiaXRzIFsy NDoyNV0pICovCisJY2ZnIHw9ICgocGhfY2ZnLT5kYXRhX21vZGUgJiBNSVBJX1RYX1NFQ1RfRE1f TUFTSykKKwkJPDwgTUlQSV9UWF9TRUNUX0RNX1NISUZUKTsKKwlpZiAocGhfY2ZnLT5kbWFfcGFj a2VkKQorCQljZmcgfD0gTUlQSV9UWF9TRUNUX0RNQV9QQUNLRUQ7CisKKwlkcm1fZGJnKCZrbWIt PmRybSwKKwkJICJjdHJsPSVkIGZyYW1lX2lkPSVkIHNlY3Rpb249JWQgY2ZnPSV4IHBhY2tlZD0l ZFxuIiwKKwkJICBjdHJsX25vLCBmcmFtZV9pZCwgc2VjdGlvbiwgY2ZnLCBwaF9jZmctPmRtYV9w YWNrZWQpOworCWttYl93cml0ZV9taXBpKGttYiwKKwkJICAgICAgIChNSVBJX1RYbV9IU19GR25f U0VDVG9fUEgoY3RybF9ubywgZnJhbWVfaWQsIHNlY3Rpb24pKSwKKwkJICAgICAgIGNmZyk7CisK KwkvKiBVbnBhY2tlZCBieXRlcyAqLworCisJLyogVGhlcmUgYXJlIDQgZnJhbWUgZ2VuZXJhdG9y cyBhbmQgZWFjaCBmZyBoYXMgNCBzZWN0aW9ucworCSAqIFRoZXJlIGFyZSAyIHJlZ2lzdGVycyBm b3IgdW5wYWNrZWQgYnl0ZXMgKCMgYnl0ZXMgZWFjaAorCSAqIHNlY3Rpb24gb2NjdXBpZXMgaW4g bWVtb3J5KQorCSAqIFJFR19VTlBBQ0tFRF9CWVRFUzA6IFsxNTowXS1CWVRFUzAsIFszMToxNl0t QllURVMxCisJICogUkVHX1VOUEFDS0VEX0JZVEVTMTogWzE1OjBdLUJZVEVTMiwgWzMxOjE2XS1C WVRFUzMKKwkgKi8KKwlyZWdfYWRyID0KKwkgICAgTUlQSV9UWG1fSFNfRkduX1NFQ1RfVU5QQUNL RURfQllURVMwKGN0cmxfbm8sCisJCQkJCQkgZnJhbWVfaWQpICsgKHNlY3Rpb24gLyAyKSAqIDQ7 CisJa21iX3dyaXRlX2JpdHNfbWlwaShrbWIsIHJlZ19hZHIsIChzZWN0aW9uICUgMikgKiAxNiwg MTYsCisJCQkgICAgdW5wYWNrZWRfYnl0ZXMpOworCWRybV9kYmcoJmttYi0+ZHJtLAorCQkgInVu cGFja2VkX2J5dGVzID0gJWQsIHdvcmRjb3VudCA9ICVkXG4iLCB1bnBhY2tlZF9ieXRlcywKKwkJ ICBwaF9jZmctPndjKTsKKworCS8qIExpbmUgY29uZmlnICovCisJcmVnX2FkciA9IE1JUElfVFht X0hTX0ZHbl9TRUNUb19MSU5FX0NGRyhjdHJsX25vLCBmcmFtZV9pZCwgc2VjdGlvbik7CisJa21i X3dyaXRlX21pcGkoa21iLCByZWdfYWRyLCBoZWlnaHRfbGluZXMpOworCXJldHVybiAwOworfQor CitzdGF0aWMgdTMyIG1pcGlfdHhfZmdfc2VjdGlvbl9jZmcoc3RydWN0IGttYl9kcm1fcHJpdmF0 ZSAqa21iLAorCQkJCSAgdTggZnJhbWVfaWQsIHU4IHNlY3Rpb24sCisJCQkJICBzdHJ1Y3QgbWlw aV90eF9mcmFtZV9zZWN0aW9uX2NmZyAqZnJhbWVfc2NmZywKKwkJCQkgIHUzMiAqYml0c19wZXJf cGNsaywgdTMyICp3YykKK3sKKwl1MzIgcmV0ID0gMDsKKwl1MzIgdW5wYWNrZWRfYnl0ZXM7CisJ c3RydWN0IG1pcGlfZGF0YV90eXBlX3BhcmFtcyBkYXRhX3R5cGVfcGFyYW1ldGVyczsKKwlzdHJ1 Y3QgbWlwaV90eF9mcmFtZV9zZWN0X3BoY2ZnIHBoX2NmZzsKKworCXJldCA9IG1pcGlfZ2V0X2Rh dGF0eXBlX3BhcmFtcyhmcmFtZV9zY2ZnLT5kYXRhX3R5cGUsCisJCQkJICAgICAgIGZyYW1lX3Nj ZmctPmRhdGFfbW9kZSwKKwkJCQkgICAgICAgJmRhdGFfdHlwZV9wYXJhbWV0ZXJzKTsKKwlpZiAo cmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogUGFja2V0IHdpZHRoIGhhcyB0byBiZSBhIG11bHRp cGxlIG9mIHRoZSBtaW5pbXVtIHBhY2tldCB3aWR0aAorCSAqIChpbiBwaXhlbHMpIHNldCBmb3Ig ZWFjaCBkYXRhIHR5cGUKKwkgKi8KKwlpZiAoZnJhbWVfc2NmZy0+d2lkdGhfcGl4ZWxzICUKKwkg ICAgZGF0YV90eXBlX3BhcmFtZXRlcnMuc2l6ZV9jb25zdHJhaW50X3BpeGVscyAhPSAwKQorCQly ZXR1cm4gLUVJTlZBTDsKKworCSp3YyA9IGNvbXB1dGVfd2MoZnJhbWVfc2NmZy0+d2lkdGhfcGl4 ZWxzLAorCQkJIGRhdGFfdHlwZV9wYXJhbWV0ZXJzLnNpemVfY29uc3RyYWludF9waXhlbHMsCisJ CQkgZGF0YV90eXBlX3BhcmFtZXRlcnMuc2l6ZV9jb25zdHJhaW50X2J5dGVzKTsKKwl1bnBhY2tl ZF9ieXRlcyA9IGNvbXB1dGVfdW5wYWNrZWRfYnl0ZXMoKndjLAorCQkJCQlkYXRhX3R5cGVfcGFy YW1ldGVycy5iaXRzX3Blcl9wY2xrKTsKKwlwaF9jZmcud2MgPSAqd2M7CisJcGhfY2ZnLmRhdGFf bW9kZSA9IGZyYW1lX3NjZmctPmRhdGFfbW9kZTsKKwlwaF9jZmcuZGF0YV90eXBlID0gZnJhbWVf c2NmZy0+ZGF0YV90eXBlOworCXBoX2NmZy5kbWFfcGFja2VkID0gZnJhbWVfc2NmZy0+ZG1hX3Bh Y2tlZDsKKwlwaF9jZmcudmNoYW5uZWwgPSBmcmFtZV9pZDsKKworCW1pcGlfdHhfZmdfc2VjdGlv bl9jZmdfcmVncyhrbWIsIGZyYW1lX2lkLCBzZWN0aW9uLAorCQkJCSAgICBmcmFtZV9zY2ZnLT5o ZWlnaHRfbGluZXMsCisJCQkJICAgIHVucGFja2VkX2J5dGVzLCAmcGhfY2ZnKTsKKworCS8qIENh bGxlciBuZWVkcyBiaXRzX3Blcl9jbGsgZm9yIGFkZGl0aW9uYWwgY2FsdWNsYXRpb25zICovCisJ KmJpdHNfcGVyX3BjbGsgPSBkYXRhX3R5cGVfcGFyYW1ldGVycy5iaXRzX3Blcl9wY2xrOworCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG1pcGlfdHhfZmdfY2ZnX3JlZ3Moc3RydWN0IGtt Yl9kcm1fcHJpdmF0ZSAqa21iLCB1OCBmcmFtZV9nZW4sCisJCQkJc3RydWN0IG1pcGlfdHhfZnJh bWVfdGltaW5nX2NmZyAqZmdfY2ZnKQoreworCXUzMiBzeXNjbGs7CisJdTMyIHBwbF9sbHBfcmF0 aW87CisJdTMyIGN0cmxfbm8gPSBNSVBJX0NUUkw2LCByZWdfYWRyLCB2YWwsIG9mZnNldDsKKwor CS8qIDUwMCBNaHogc3lzdGVtIGNsb2NrIG1pbnVzIDUwIHRvIGFjY291bnQgZm9yIHRoZSBkaWZm ZXJlbmNlIGluCisJICogTUlQSSBjbG9jayBzcGVlZCBpbiBSVEwgdGVzdHMKKwkgKi8KKwlzeXNj bGsgPSBrbWItPnN5c19jbGtfbWh6IC0gNTA7CisKKwkvKiBQUEwtUGl4ZWwgUGFja2luZyBMYXll ciwgTExQLUxvdyBMZXZlbCBQcm90b2NvbAorCSAqIEZyYW1lIGdlbmFydG9yIHRpbWluZyBwYXJh bWV0ZXJzIGFyZSBjbG9ja2VkIG9uIHRoZSBzeXN0ZW0gY2xvY2ssCisJICogd2hlcmVhcyBhcyB0 aGUgZXF1aXZhbGVudCBwYXJhbWV0ZXJzIGluIHRoZSBMTFAgYmxvY2tzIGFyZSBjbG9ja2VkCisJ ICogb24gTExQIFR4IGNsb2NrIGZyb20gdGhlIEQtUEhZIC0gQllURSBjbG9jaworCSAqLworCisJ LyogTXVsdGlwbHkgYnkgMTAwMCB0byBtYWludGFpbiBwcmVjaXNpb24gKi8KKwlwcGxfbGxwX3Jh dGlvID0gKChmZ19jZmctPmJwcCAvIDgpICogc3lzY2xrICogMTAwMCkgLworCSAgICAoKGZnX2Nm Zy0+bGFuZV9yYXRlX21icHMgLyA4KSAqIGZnX2NmZy0+YWN0aXZlX2xhbmVzKTsKKworCWRybV9k YmcoJmttYi0+ZHJtLCAicHBsX2xscF9yYXRpbz0lZFxuIiwgcHBsX2xscF9yYXRpbyk7CisJZHJt X2RiZygma21iLT5kcm0sICJicHA9JWQgc3lzY2xrPSVkIGxhbmUtcmF0ZT0lZCBhY3RpdmUtbGFu ZXM9JWRcbiIsCisJCSBmZ19jZmctPmJwcCwgc3lzY2xrLCBmZ19jZmctPmxhbmVfcmF0ZV9tYnBz LAorCQkgZmdfY2ZnLT5hY3RpdmVfbGFuZXMpOworCisJLyogRnJhbWUgZ2VuZXJhdG9yIG51bWJl ciBvZiBsaW5lcyAqLworCXJlZ19hZHIgPSBNSVBJX1RYbV9IU19GR25fTlVNX0xJTkVTKGN0cmxf bm8sIGZyYW1lX2dlbik7CisJa21iX3dyaXRlX21pcGkoa21iLCByZWdfYWRyLCBmZ19jZmctPnZf YWN0aXZlKTsKKworCS8qIHZzeW5jIHdpZHRoCisJICogVGhlcmUgYXJlIDIgcmVnaXN0ZXJzIGZv ciB2c3luYyB3aWR0aCAoVlNBIGluIGxpbmVzIGZvcgorCSAqIGNoYW5uZWxzIDAtMykKKwkgKiBS RUdfVlNZTkNfV0lEVEgwOiBbMTU6MF0tVlNBIGZvciBjaGFubmVsMCwgWzMxOjE2XS1WU0EgZm9y IGNoYW5uZWwxCisJICogUkVHX1ZTWU5DX1dJRFRIMTogWzE1OjBdLVZTQSBmb3IgY2hhbm5lbDIs IFszMToxNl0tVlNBIGZvciBjaGFubmVsMworCSAqLworCW9mZnNldCA9IChmcmFtZV9nZW4gJSAy KSAqIDE2OworCXJlZ19hZHIgPSBNSVBJX1RYbV9IU19WU1lOQ19XSURUSG4oY3RybF9ubywgZnJh bWVfZ2VuIC8gMik7CisJa21iX3dyaXRlX2JpdHNfbWlwaShrbWIsIHJlZ19hZHIsIG9mZnNldCwg MTYsIGZnX2NmZy0+dnN5bmNfd2lkdGgpOworCisJLyogdmVydGljYWwgYmFja3BvcmNoICh2YnAp ICovCisJcmVnX2FkciA9IE1JUElfVFhtX0hTX1ZfQkFDS1BPUkNIRVNuKGN0cmxfbm8sIGZyYW1l X2dlbiAvIDIpOworCWttYl93cml0ZV9iaXRzX21pcGkoa21iLCByZWdfYWRyLCBvZmZzZXQsIDE2 LCBmZ19jZmctPnZfYmFja3BvcmNoKTsKKworCS8qIHZlcnRpY2FsIGZyb250cG9yY2ggKHZmcCkg Ki8KKwlyZWdfYWRyID0gTUlQSV9UWG1fSFNfVl9GUk9OVFBPUkNIRVNuKGN0cmxfbm8sIGZyYW1l X2dlbiAvIDIpOworCWttYl93cml0ZV9iaXRzX21pcGkoa21iLCByZWdfYWRyLCBvZmZzZXQsIDE2 LCBmZ19jZmctPnZfZnJvbnRwb3JjaCk7CisKKwkvKiB2ZXJ0aWNhbCBhY3RpdmUgKHZhY3RpdmUp ICovCisJcmVnX2FkciA9IE1JUElfVFhtX0hTX1ZfQUNUSVZFbihjdHJsX25vLCBmcmFtZV9nZW4g LyAyKTsKKwlrbWJfd3JpdGVfYml0c19taXBpKGttYiwgcmVnX2Fkciwgb2Zmc2V0LCAxNiwgZmdf Y2ZnLT52X2FjdGl2ZSk7CisKKwkvKiBoc3luYyB3aWR0aCAqLworCXJlZ19hZHIgPSBNSVBJX1RY bV9IU19IU1lOQ19XSURUSG4oY3RybF9ubywgZnJhbWVfZ2VuKTsKKwlrbWJfd3JpdGVfbWlwaShr bWIsIHJlZ19hZHIsCisJCSAgICAgICAoZmdfY2ZnLT5oc3luY193aWR0aCAqIHBwbF9sbHBfcmF0 aW8pIC8gMTAwMCk7CisKKwkvKiBob3Jpem9udGFsIGJhY2twb3JjaCAoaGJwKSAqLworCXJlZ19h ZHIgPSBNSVBJX1RYbV9IU19IX0JBQ0tQT1JDSG4oY3RybF9ubywgZnJhbWVfZ2VuKTsKKwlrbWJf d3JpdGVfbWlwaShrbWIsIHJlZ19hZHIsCisJCSAgICAgICAoZmdfY2ZnLT5oX2JhY2twb3JjaCAq IHBwbF9sbHBfcmF0aW8pIC8gMTAwMCk7CisKKwkvKiBob3Jpem9udGFsIGZyb250cG9yY2ggKGhm cCkgKi8KKwlyZWdfYWRyID0gTUlQSV9UWG1fSFNfSF9GUk9OVFBPUkNIbihjdHJsX25vLCBmcmFt ZV9nZW4pOworCWttYl93cml0ZV9taXBpKGttYiwgcmVnX2FkciwKKwkJICAgICAgIChmZ19jZmct PmhfZnJvbnRwb3JjaCAqIHBwbF9sbHBfcmF0aW8pIC8gMTAwMCk7CisKKwkvKiBob3Jpem9udGFs IGFjdGl2ZSAoaGEpICovCisJcmVnX2FkciA9IE1JUElfVFhtX0hTX0hfQUNUSVZFbihjdHJsX25v LCBmcmFtZV9nZW4pOworCisJLyogY29udmVydCBoX2FjdGl2ZSB3aGljaCBpcyB3YyBpbiBieXRl cyB0byBjeWNsZXMgKi8KKwl2YWwgPSAoZmdfY2ZnLT5oX2FjdGl2ZSAqIHN5c2NsayAqIDEwMDAp IC8KKwkgICAgKChmZ19jZmctPmxhbmVfcmF0ZV9tYnBzIC8gOCkgKiBmZ19jZmctPmFjdGl2ZV9s YW5lcyk7CisJdmFsIC89IDEwMDA7CisJa21iX3dyaXRlX21pcGkoa21iLCByZWdfYWRyLCB2YWwp OworCisJLyogbGxwIGhzeW5jIHdpZHRoICovCisJcmVnX2FkciA9IE1JUElfVFhtX0hTX0xMUF9I U1lOQ19XSURUSG4oY3RybF9ubywgZnJhbWVfZ2VuKTsKKwlrbWJfd3JpdGVfbWlwaShrbWIsIHJl Z19hZHIsIGZnX2NmZy0+aHN5bmNfd2lkdGggKiAoZmdfY2ZnLT5icHAgLyA4KSk7CisKKwkvKiBs bHAgaCBiYWNrcG9yY2ggKi8KKwlyZWdfYWRyID0gTUlQSV9UWG1fSFNfTExQX0hfQkFDS1BPUkNI bihjdHJsX25vLCBmcmFtZV9nZW4pOworCWttYl93cml0ZV9taXBpKGttYiwgcmVnX2FkciwgZmdf Y2ZnLT5oX2JhY2twb3JjaCAqIChmZ19jZmctPmJwcCAvIDgpKTsKKworCS8qIGxscCBoIGZyb250 cG9yY2ggKi8KKwlyZWdfYWRyID0gTUlQSV9UWG1fSFNfTExQX0hfRlJPTlRQT1JDSG4oY3RybF9u bywgZnJhbWVfZ2VuKTsKKwlrbWJfd3JpdGVfbWlwaShrbWIsIHJlZ19hZHIsCisJCSAgICAgICBm Z19jZmctPmhfZnJvbnRwb3JjaCAqIChmZ19jZmctPmJwcCAvIDgpKTsKK30KKworc3RhdGljIHZv aWQgbWlwaV90eF9mZ19jZmcoc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqa21iLCB1OCBmcmFtZV9n ZW4sCisJCQkgICB1OCBhY3RpdmVfbGFuZXMsIHUzMiBicHAsIHUzMiB3YywKKwkJCSAgIHUzMiBs YW5lX3JhdGVfbWJwcywgc3RydWN0IG1pcGlfdHhfZnJhbWVfY2ZnICpmZ19jZmcpCit7CisJdTMy IGksIGZnX251bV9saW5lcyA9IDA7CisJc3RydWN0IG1pcGlfdHhfZnJhbWVfdGltaW5nX2NmZyBm Z190X2NmZzsKKworCS8qIENhbGN1bGF0ZSB0aGUgdG90YWwgZnJhbWUgZ2VuZXJhdG9yIG51bWJl ciBvZgorCSAqIGxpbmVzIGJhc2VkIG9uIGl0J3MgYWN0aXZlIHNlY3Rpb25zCisJICovCisJZm9y IChpID0gMDsgaSA8IE1JUElfVFhfRlJBTUVfR0VOX1NFQ1RJT05TOyBpKyspIHsKKwkJaWYgKGZn X2NmZy0+c2VjdGlvbnNbaV0gIT0gTlVMTCkKKwkJCWZnX251bV9saW5lcyArPSBmZ19jZmctPnNl Y3Rpb25zW2ldLT5oZWlnaHRfbGluZXM7CisJfQorCisJZmdfdF9jZmcuYnBwID0gYnBwOworCWZn X3RfY2ZnLmxhbmVfcmF0ZV9tYnBzID0gbGFuZV9yYXRlX21icHM7CisJZmdfdF9jZmcuaHN5bmNf d2lkdGggPSBmZ19jZmctPmhzeW5jX3dpZHRoOworCWZnX3RfY2ZnLmhfYmFja3BvcmNoID0gZmdf Y2ZnLT5oX2JhY2twb3JjaDsKKwlmZ190X2NmZy5oX2Zyb250cG9yY2ggPSBmZ19jZmctPmhfZnJv bnRwb3JjaDsKKwlmZ190X2NmZy5oX2FjdGl2ZSA9IHdjOworCWZnX3RfY2ZnLnZzeW5jX3dpZHRo ID0gZmdfY2ZnLT52c3luY193aWR0aDsKKwlmZ190X2NmZy52X2JhY2twb3JjaCA9IGZnX2NmZy0+ dl9iYWNrcG9yY2g7CisJZmdfdF9jZmcudl9mcm9udHBvcmNoID0gZmdfY2ZnLT52X2Zyb250cG9y Y2g7CisJZmdfdF9jZmcudl9hY3RpdmUgPSBmZ19udW1fbGluZXM7CisJZmdfdF9jZmcuYWN0aXZl X2xhbmVzID0gYWN0aXZlX2xhbmVzOworCisJLyogQXBwbHkgZnJhbWUgZ2VuZXJhdG9yIHRpbWlu ZyBzZXR0aW5nICovCisJbWlwaV90eF9mZ19jZmdfcmVncyhrbWIsIGZyYW1lX2dlbiwgJmZnX3Rf Y2ZnKTsKK30KKworc3RhdGljIHZvaWQgbWlwaV90eF9tdWx0aWNoYW5uZWxfZmlmb19jZmcoc3Ry dWN0IGttYl9kcm1fcHJpdmF0ZSAqa21iLAorCQkJCQkgIHU4IGFjdGl2ZV9sYW5lcywgdTggdmNo YW5uZWxfaWQpCit7CisJdTMyIGZpZm9fc2l6ZSwgZmlmb19ydGhyZXNob2xkOworCXUzMiBjdHJs X25vID0gTUlQSV9DVFJMNjsKKworCS8qIENsZWFyIGFsbCBtYyBmaWZvIGNoYW5uZWwgc2l6ZXMg YW5kIHRocmVzaG9sZHMgKi8KKwlrbWJfd3JpdGVfbWlwaShrbWIsIE1JUElfVFhfSFNfTUNfRklG T19DVFJMX0VOLCAwKTsKKwlrbWJfd3JpdGVfbWlwaShrbWIsIE1JUElfVFhfSFNfTUNfRklGT19D SEFOX0FMTE9DMCwgMCk7CisJa21iX3dyaXRlX21pcGkoa21iLCBNSVBJX1RYX0hTX01DX0ZJRk9f Q0hBTl9BTExPQzEsIDApOworCWttYl93cml0ZV9taXBpKGttYiwgTUlQSV9UWF9IU19NQ19GSUZP X1JUSFJFU0hPTEQwLCAwKTsKKwlrbWJfd3JpdGVfbWlwaShrbWIsIE1JUElfVFhfSFNfTUNfRklG T19SVEhSRVNIT0xEMSwgMCk7CisKKwlmaWZvX3NpemUgPSAoKGFjdGl2ZV9sYW5lcyA+IE1JUElf RF9MQU5FU19QRVJfRFBIWSkgPworCQkgICAgIE1JUElfQ1RSTF80TEFORV9NQVhfTUNfRklGT19M T0MgOgorCQkgICAgIE1JUElfQ1RSTF8yTEFORV9NQVhfTUNfRklGT19MT0MpIC0gMTsKKworCS8q IE1DIGZpZm8gc2l6ZSBmb3IgdmlydHVhbCBjaGFubmVscyAwLTMKKwkgKiBSRUdfTUNfRklGT19D SEFOX0FMTE9DMDogWzg6MF0tY2hhbm5lbDAsIFsyNDoxNl0tY2hhbm5lbDEKKwkgKiBSRUdfTUNf RklGT19DSEFOX0FMTE9DMTogWzg6MF0tMiwgWzI0OjE2XS1jaGFubmVsMworCSAqLworCVNFVF9N Q19GSUZPX0NIQU5fQUxMT0Moa21iLCBjdHJsX25vLCB2Y2hhbm5lbF9pZCwgZmlmb19zaXplKTsK KworCS8qIFNldCB0aHJlc2hvbGQgdG8gaGFsZiB0aGUgZmlmbyBzaXplLCBhY3R1YWwgc2l6ZT1z aXplKjE2ICovCisJZmlmb19ydGhyZXNob2xkID0gKChmaWZvX3NpemUpICogOCkgJiBCSVRfTUFT S18xNjsKKwlTRVRfTUNfRklGT19SVEhSRVNIT0xEKGttYiwgY3RybF9ubywgdmNoYW5uZWxfaWQs IGZpZm9fcnRocmVzaG9sZCk7CisKKwkvKiBFbmFibGUgdGhlIE1DIEZJRk8gY2hhbm5lbCBjb3Jy ZXNwb25kaW5nIHRvIHRoZSBWaXJ0dWFsIENoYW5uZWwgKi8KKwlrbWJfc2V0X2JpdF9taXBpKGtt YiwgTUlQSV9UWG1fSFNfTUNfRklGT19DVFJMX0VOKGN0cmxfbm8pLAorCQkJIHZjaGFubmVsX2lk KTsKK30KKworc3RhdGljIHZvaWQgbWlwaV90eF9jdHJsX2NmZyhzdHJ1Y3Qga21iX2RybV9wcml2 YXRlICprbWIsIHU4IGZnX2lkLAorCQkJICAgICBzdHJ1Y3QgbWlwaV9jdHJsX2NmZyAqY3RybF9j ZmcpCit7CisJdTMyIHN5bmNfY2ZnID0gMCwgY3RybCA9IDAsIGZnX2VuOworCXUzMiBjdHJsX25v ID0gTUlQSV9DVFJMNjsKKworCS8qIE1JUElfVFhfSFNfU1lOQ19DRkcgKi8KKwlpZiAoY3RybF9j ZmctPnR4X2N0cmxfY2ZnLmxpbmVfc3luY19wa3RfZW4pCisJCXN5bmNfY2ZnIHw9IExJTkVfU1lO Q19QS1RfRU5BQkxFOworCWlmIChjdHJsX2NmZy0+dHhfY3RybF9jZmcuZnJhbWVfY291bnRlcl9h Y3RpdmUpCisJCXN5bmNfY2ZnIHw9IEZSQU1FX0NPVU5URVJfQUNUSVZFOworCWlmIChjdHJsX2Nm Zy0+dHhfY3RybF9jZmcubGluZV9jb3VudGVyX2FjdGl2ZSkKKwkJc3luY19jZmcgfD0gTElORV9D T1VOVEVSX0FDVElWRTsKKwlpZiAoY3RybF9jZmctPnR4X2N0cmxfY2ZnLnR4X2RzaV9jZmctPnZf YmxhbmtpbmcpCisJCXN5bmNfY2ZnIHw9IERTSV9WX0JMQU5LSU5HOworCWlmIChjdHJsX2NmZy0+ dHhfY3RybF9jZmcudHhfZHNpX2NmZy0+aHNhX2JsYW5raW5nKQorCQlzeW5jX2NmZyB8PSBEU0lf SFNBX0JMQU5LSU5HOworCWlmIChjdHJsX2NmZy0+dHhfY3RybF9jZmcudHhfZHNpX2NmZy0+aGJw X2JsYW5raW5nKQorCQlzeW5jX2NmZyB8PSBEU0lfSEJQX0JMQU5LSU5HOworCWlmIChjdHJsX2Nm Zy0+dHhfY3RybF9jZmcudHhfZHNpX2NmZy0+aGZwX2JsYW5raW5nKQorCQlzeW5jX2NmZyB8PSBE U0lfSEZQX0JMQU5LSU5HOworCWlmIChjdHJsX2NmZy0+dHhfY3RybF9jZmcudHhfZHNpX2NmZy0+ c3luY19wdWxzZV9ldmVudG4pCisJCXN5bmNfY2ZnIHw9IERTSV9TWU5DX1BVTFNFX0VWRU5UTjsK KwlpZiAoY3RybF9jZmctPnR4X2N0cmxfY2ZnLnR4X2RzaV9jZmctPmxwbV9maXJzdF92c2FfbGlu ZSkKKwkJc3luY19jZmcgfD0gRFNJX0xQTV9GSVJTVF9WU0FfTElORTsKKwlpZiAoY3RybF9jZmct PnR4X2N0cmxfY2ZnLnR4X2RzaV9jZmctPmxwbV9sYXN0X3ZmcF9saW5lKQorCQlzeW5jX2NmZyB8 PSBEU0lfTFBNX0xBU1RfVkZQX0xJTkU7CisKKwkvKiBFbmFibGUgZnJhbWUgZ2VuZXJhdG9yICov CisJZmdfZW4gPSAxIDw8IGZnX2lkOworCXN5bmNfY2ZnIHw9IEZSQU1FX0dFTl9FTihmZ19lbik7 CisKKwlpZiAoY3RybF9jZmctPnR4X2N0cmxfY2ZnLnR4X2Fsd2F5c191c2VfaGFjdCkKKwkJc3lu Y19jZmcgfD0gQUxXQVlTX1VTRV9IQUNUKGZnX2VuKTsKKwlpZiAoY3RybF9jZmctPnR4X2N0cmxf Y2ZnLnR4X2hhY3Rfd2FpdF9zdG9wKQorCQlzeW5jX2NmZyB8PSBIQUNUX1dBSVRfU1RPUChmZ19l bik7CisKKwlkcm1fZGJnKCZrbWItPmRybSwgInN5bmNfY2ZnPSVkIGZnX2VuPSVkXG4iLCBzeW5j X2NmZywgZmdfZW4pOworCisJLyogTUlQSV9UWF9IU19DVFJMICovCisKKwkvKiB0eXBlOkRTSSwg c291cmNlOkxDRCAqLworCWN0cmwgPSBIU19DVFJMX0VOIHwgVFhfU09VUkNFOworCWN0cmwgfD0g TENEX1ZDKGZnX2lkKTsKKwljdHJsIHw9IEFDVElWRV9MQU5FUyhjdHJsX2NmZy0+YWN0aXZlX2xh bmVzIC0gMSk7CisJaWYgKGN0cmxfY2ZnLT50eF9jdHJsX2NmZy50eF9kc2lfY2ZnLT5lb3RwX2Vu KQorCQljdHJsIHw9IERTSV9FT1RQX0VOOworCWlmIChjdHJsX2NmZy0+dHhfY3RybF9jZmcudHhf ZHNpX2NmZy0+aGZwX2JsYW5rX2VuKQorCQljdHJsIHw9IERTSV9DTURfSEZQX0VOOworCisJLyo2 NyBucyBzdG9wIHRpbWUgKi8KKwljdHJsIHw9IEhTRVhJVF9DTlQoMHg0Myk7CisKKwlrbWJfd3Jp dGVfbWlwaShrbWIsIE1JUElfVFhtX0hTX1NZTkNfQ0ZHKGN0cmxfbm8pLCBzeW5jX2NmZyk7CisJ a21iX3dyaXRlX21pcGkoa21iLCBNSVBJX1RYbV9IU19DVFJMKGN0cmxfbm8pLCBjdHJsKTsKK30K KworI2lmZGVmIE1JUElfVFhfVEVTVF9QQVRURVJOX0dFTkVSQVRJT04KK3N0YXRpYyB2b2lkIG1p cGlfdHhfaHNfdHBfZ2VuKHN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmttYiwgaW50IHZjLAorCQkJ ICAgICAgaW50IHRwX3NlbCwgdTMyIHN0cmlwZV93aWR0aCwgdTMyIGNvbG9yMCwKKwkJCSAgICAg IHUzMiBjb2xvcjEsIHUzMiBjdHJsX25vKQoreworCWludCB2YWwgPSAwOworCisJLyogU2VsZWN0 IHRlc3QgcGF0dGVybiBtb2RlIG9uIHRoZSB2aXJ0dWFsIGNoYW5uZWwgKi8KKwl2YWwgPSBUUF9T RUxfVkNtKHZjLCB0cF9zZWwpOworCisJLyogQ29uZmlndXJlIHRlc3QgcGF0dGVybiBjb2xvcnMg Ki8KKwlrbWJfd3JpdGVfbWlwaShrbWIsIE1JUElfVFhtX0hTX1RFU1RfUEFUX0NPTE9SMChjdHJs X25vKSwgY29sb3IwKTsKKwlrbWJfd3JpdGVfbWlwaShrbWIsIE1JUElfVFhtX0hTX1RFU1RfUEFU X0NPTE9SMShjdHJsX25vKSwgY29sb3IxKTsKKworCS8qIEVuYWJsZSB0ZXN0IHBhdHRlcm4gZ2Vu ZXJhdGlvbiBvbiB0aGUgdmlydHVhbCBjaGFubmVsICovCisJdmFsIHw9IFRQX0VOX1ZDbSh2Yyk7 CisJa21iX3dyaXRlX21pcGkoa21iLCBNSVBJX1RYbV9IU19URVNUX1BBVF9DVFJMKGN0cmxfbm8p LCB2YWwpOworCit9CisjZW5kaWYKKworc3RhdGljIHUzMiBtaXBpX3R4X2luaXRfY250cmwoc3Ry dWN0IGttYl9kcm1fcHJpdmF0ZSAqa21iLAorCQkJICAgICAgc3RydWN0IG1pcGlfY3RybF9jZmcg KmN0cmxfY2ZnKQoreworCXUzMiByZXQgPSAwOworCXU4IGFjdGl2ZV92Y2hhbm5lbHMgPSAwOwor CXU4IGZyYW1lX2lkLCBzZWN0OworCXUzMiBiaXRzX3Blcl9wY2xrID0gMDsKKwl1MzIgd29yZF9j b3VudCA9IDA7CisJc3RydWN0IG1pcGlfdHhfZnJhbWVfY2ZnICpmcmFtZTsKKworCS8qIFRoaXMg aXMgdGhlIG9yZGVyIHRvIGluaXRpYWxpemUgTUlQSSBUWDoKKwkgKiAxLiBzZXQgZnJhbWUgc2Vj dGlvbiBwYXJhbWV0ZXJzCisJICogMi4gc2V0IGZyYW1lIHNwZWNpZmljIHBhcmFtZXRlcnMKKwkg KiAzLiBjb25uZWN0IGxjZCB0byBtaXBpCisJICogNC4gbXVsdGkgY2hhbm5lbCBmaWZvIGNmZwor CSAqIDUuIHNldCBtaXBpdHhjY3RybGNmZworCSAqLworCisJZm9yIChmcmFtZV9pZCA9IDA7IGZy YW1lX2lkIDwgNDsgZnJhbWVfaWQrKykgeworCQlmcmFtZSA9IGN0cmxfY2ZnLT50eF9jdHJsX2Nm Zy5mcmFtZXNbZnJhbWVfaWRdOworCisJCS8qIEZpbmQgdmFsaWQgZnJhbWUsIGFzc3VtZSBvbmx5 IG9uZSB2YWxpZCBmcmFtZSAqLworCQlpZiAoZnJhbWUgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOwor CisJCS8qIEZyYW1lIFNlY3Rpb24gY29uZmlndXJhdGlvbiAqLworCQkvKiBUT0RPIC0gYXNzdW1l IHRoZXJlIGlzIG9ubHkgb25lIHZhbGlkIHNlY3Rpb24gaW4gYSBmcmFtZSwKKwkJICogc28gYml0 c19wZXJfcGNsayBhbmQgd29yZF9jb3VudCBhcmUgb25seSBzZXQgb25jZQorCQkgKi8KKwkJZm9y IChzZWN0ID0gMDsgc2VjdCA8IE1JUElfQ1RSTF9WSVJUVUFMX0NIQU5ORUxTOyBzZWN0KyspIHsK KwkJCWlmIChmcmFtZS0+c2VjdGlvbnNbc2VjdF0gPT0gTlVMTCkKKwkJCQljb250aW51ZTsKKwor CQkJcmV0ID0gbWlwaV90eF9mZ19zZWN0aW9uX2NmZyhrbWIsIGZyYW1lX2lkLCBzZWN0LAorCQkJ CQkJICAgICBmcmFtZS0+c2VjdGlvbnNbc2VjdF0sCisJCQkJCQkgICAgICZiaXRzX3Blcl9wY2xr LAorCQkJCQkJICAgICAmd29yZF9jb3VudCk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7 CisKKwkJfQorCisJCS8qIFNldCBmcmFtZSBzcGVjaWZpYyBwYXJhbWV0ZXJzICovCisJCW1pcGlf dHhfZmdfY2ZnKGttYiwgZnJhbWVfaWQsIGN0cmxfY2ZnLT5hY3RpdmVfbGFuZXMsCisJCQkgICAg ICAgYml0c19wZXJfcGNsaywgd29yZF9jb3VudCwKKwkJCSAgICAgICBjdHJsX2NmZy0+bGFuZV9y YXRlX21icHMsIGZyYW1lKTsKKworCQlhY3RpdmVfdmNoYW5uZWxzKys7CisKKwkJLyogU3RvcCBp dGVyYXRpbmcgYXMgb25seSBvbmUgdmlydHVhbCBjaGFubmVsCisJCSAqIHNoYWxsIGJlIHVzZWQg Zm9yIExDRCBjb25uZWN0aW9uCisJCSAqLworCQlicmVhazsKKwl9CisKKwlpZiAoYWN0aXZlX3Zj aGFubmVscyA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkvKiBNdWx0aS1DaGFubmVsIEZJRk8g Q29uZmlndXJhdGlvbiAqLworCW1pcGlfdHhfbXVsdGljaGFubmVsX2ZpZm9fY2ZnKGttYiwgY3Ry bF9jZmctPmFjdGl2ZV9sYW5lcywgZnJhbWVfaWQpOworCisJLyogRnJhbWUgR2VuZXJhdG9yIEVu YWJsZSAqLworCW1pcGlfdHhfY3RybF9jZmcoa21iLCBmcmFtZV9pZCwgY3RybF9jZmcpOworCisj aWZkZWYgTUlQSV9UWF9URVNUX1BBVFRFUk5fR0VORVJBVElPTgorCW1pcGlfdHhfaHNfdHBfZ2Vu KGttYiwgMCwgTUlQSV9UWF9IU19UUF9WX1NUUklQRVMsCisJCQkgIDB4OCwgMHhmZiwgMHhmZjAw LCBNSVBJX0NUUkw2KTsKKyNlbmRpZgorCisJZHJtX2RiZygma21iLT5kcm0sICJJUlFfU1RBVFVT ID0gMHgleFxuIiwKKwkJICBHRVRfTUlQSV9UWF9IU19JUlFfU1RBVFVTKGttYiwgTUlQSV9DVFJM NikpOworCisJcmV0dXJuIHJldDsKK30KKworI2lmZGVmIERQSFlfUkVBRF9URVNUQ09ERQoraW50 IGRwaHlfcmVhZF90ZXN0Y29kZShzdHJ1Y3Qga21iX2RybV9wcml2YXRlICprbWIsIGludCBkcGh5 X3NlbCwKKwkJICAgICAgIGludCB0ZXN0X2NvZGUpCit7CisJdTMyIHJlZ193cl9kYXRhOworCXUz MiByZWdfcmRfZGF0YTsKKwlpbnQgZGF0YTsKKworCXJlZ193cl9kYXRhID0gZHBoeV9zZWw7CisJ a21iX3dyaXRlX21pcGkoa21iLCBEUEhZX1RFU1RfQ1RSTDEsIHJlZ193cl9kYXRhKTsKKworCWRh dGEgPSAwOworCXJlZ193cl9kYXRhID0gMDsKKwlyZWdfcmRfZGF0YSA9IDA7CisKKwlpZiAoKChk cGh5X3NlbCA+PiAwICYgMHgxKSA9PSAxKSB8ICgoZHBoeV9zZWwgPj4gNCAmIDB4MSkgPT0gMSkg fAorCSAgICAoKGRwaHlfc2VsID4+IDggJiAweDEpID09IDEpKQorCQlyZWdfd3JfZGF0YSB8PSBk YXRhIDw8IDA7CisJaWYgKCgoZHBoeV9zZWwgPj4gMSAmIDB4MSkgPT0gMSkgfCAoKGRwaHlfc2Vs ID4+IDUgJiAweDEpID09IDEpIHwKKwkgICAgKChkcGh5X3NlbCA+PiA5ICYgMHgxKSA9PSAxKSkK KwkJcmVnX3dyX2RhdGEgfD0gZGF0YSA8PCA4OworCWlmICgoKGRwaHlfc2VsID4+IDIgJiAweDEp ID09IDEpIHwgKChkcGh5X3NlbCA+PiA2ICYgMHgxKSA9PSAxKSB8CisJICAgICgoZHBoeV9zZWwg Pj4gMTAgJiAweDEpID09IDEpKQorCQlyZWdfd3JfZGF0YSB8PSBkYXRhIDw8IDE2OworCWlmICgo KGRwaHlfc2VsID4+IDMgJiAweDEpID09IDEpIHwgKChkcGh5X3NlbCA+PiA3ICYgMHgxKSA9PSAx KSB8CisJICAgICgoZHBoeV9zZWwgPj4gMTEgJiAweDEpID09IDEpKQorCQlyZWdfd3JfZGF0YSB8 PSBkYXRhIDw8IDI0OworCisJaWYgKChkcGh5X3NlbCA+PiAwICYgMHhmKSA+IDApCisJCWttYl93 cml0ZV9taXBpKGttYiwgRFBIWV9URVNUX0RJTjBfMywgcmVnX3dyX2RhdGEpOworCWlmICgoZHBo eV9zZWwgPj4gNCAmIDB4ZikgPiAwKQorCQlrbWJfd3JpdGVfbWlwaShrbWIsIERQSFlfVEVTVF9E SU40XzcsIHJlZ193cl9kYXRhKTsKKwlpZiAoKGRwaHlfc2VsID4+IDggJiAweDMpID4gMCkKKwkJ a21iX3dyaXRlX21pcGkoa21iLCBEUEhZX1RFU1RfRElOOF85LCByZWdfd3JfZGF0YSk7CisKKwly ZWdfd3JfZGF0YSA9IDA7CisJcmVnX3dyX2RhdGEgPSAoZHBoeV9zZWwgfCBkcGh5X3NlbCA8PCAx Mik7CisJa21iX3dyaXRlX21pcGkoa21iLCBEUEhZX1RFU1RfQ1RSTDEsIHJlZ193cl9kYXRhKTsK KworCXJlZ193cl9kYXRhID0gMDsKKwlyZWdfd3JfZGF0YSA9IGRwaHlfc2VsIDw8IDEyOworCWtt Yl93cml0ZV9taXBpKGttYiwgRFBIWV9URVNUX0NUUkwxLCByZWdfd3JfZGF0YSk7CisKKwlyZWdf d3JfZGF0YSA9IDA7CisJa21iX3dyaXRlX21pcGkoa21iLCBEUEhZX1RFU1RfQ1RSTDEsIHJlZ193 cl9kYXRhKTsKKworCWRhdGEgPSB0ZXN0X2NvZGUgPj4gOCAmIDB4ZjsKKwlyZWdfd3JfZGF0YSA9 IDA7CisKKwlpZiAoKChkcGh5X3NlbCA+PiAwICYgMHgxKSA9PSAxKSB8ICgoZHBoeV9zZWwgPj4g NCAmIDB4MSkgPT0gMSkgfAorCSAgICAoKGRwaHlfc2VsID4+IDggJiAweDEpID09IDEpKQorCQly ZWdfd3JfZGF0YSB8PSBkYXRhIDw8IDA7CisJaWYgKCgoZHBoeV9zZWwgPj4gMSAmIDB4MSkgPT0g MSkgfCAoKGRwaHlfc2VsID4+IDUgJiAweDEpID09IDEpIHwKKwkgICAgKChkcGh5X3NlbCA+PiA5 ICYgMHgxKSA9PSAxKSkKKwkJcmVnX3dyX2RhdGEgfD0gZGF0YSA8PCA4OworCWlmICgoKGRwaHlf c2VsID4+IDIgJiAweDEpID09IDEpIHwgKChkcGh5X3NlbCA+PiA2ICYgMHgxKSA9PSAxKSB8CisJ ICAgICgoZHBoeV9zZWwgPj4gMTAgJiAweDEpID09IDEpKQorCQlyZWdfd3JfZGF0YSB8PSBkYXRh IDw8IDE2OworCWlmICgoKGRwaHlfc2VsID4+IDMgJiAweDEpID09IDEpIHwgKChkcGh5X3NlbCA+ PiA3ICYgMHgxKSA9PSAxKSB8CisJICAgICgoZHBoeV9zZWwgPj4gMTEgJiAweDEpID09IDEpKQor CQlyZWdfd3JfZGF0YSB8PSBkYXRhIDw8IDI0OworCisJaWYgKChkcGh5X3NlbCA+PiAwICYgMHhm KSA+IDApCisJCWttYl93cml0ZV9taXBpKGttYiwgRFBIWV9URVNUX0RJTjBfMywgcmVnX3dyX2Rh dGEpOworCWlmICgoZHBoeV9zZWwgPj4gNCAmIDB4ZikgPiAwKQorCQlrbWJfd3JpdGVfbWlwaShr bWIsIERQSFlfVEVTVF9ESU40XzcsIHJlZ193cl9kYXRhKTsKKwlpZiAoKGRwaHlfc2VsID4+IDgg JiAweDMpID4gMCkKKwkJa21iX3dyaXRlX21pcGkoa21iLCBEUEhZX1RFU1RfRElOOF85LCByZWdf d3JfZGF0YSk7CisKKwlyZWdfd3JfZGF0YSA9IDA7CisJcmVnX3dyX2RhdGEgPSBkcGh5X3NlbDsK KwlrbWJfd3JpdGVfbWlwaShrbWIsIERQSFlfVEVTVF9DVFJMMSwgcmVnX3dyX2RhdGEpOworCisJ ZGF0YSA9IHRlc3RfY29kZSAmIDB4ZmY7CisJcmVnX3dyX2RhdGEgPSAwOworCisJaWYgKCgoZHBo eV9zZWwgPj4gMCAmIDB4MSkgPT0gMSkgfCAoKGRwaHlfc2VsID4+IDQgJiAweDEpID09IDEpIHwK KwkgICAgKChkcGh5X3NlbCA+PiA4ICYgMHgxKSA9PSAxKSkKKwkJcmVnX3dyX2RhdGEgfD0gZGF0 YSA8PCAwOworCWlmICgoKGRwaHlfc2VsID4+IDEgJiAweDEpID09IDEpIHwgKChkcGh5X3NlbCA+ PiA1ICYgMHgxKSA9PSAxKSB8CisJICAgICgoZHBoeV9zZWwgPj4gOSAmIDB4MSkgPT0gMSkpCisJ CXJlZ193cl9kYXRhIHw9IGRhdGEgPDwgODsKKwlpZiAoKChkcGh5X3NlbCA+PiAyICYgMHgxKSA9 PSAxKSB8ICgoZHBoeV9zZWwgPj4gNiAmIDB4MSkgPT0gMSkgfAorCSAgICAoKGRwaHlfc2VsID4+ IDEwICYgMHgxKSA9PSAxKSkKKwkJcmVnX3dyX2RhdGEgfD0gZGF0YSA8PCAxNjsKKwlpZiAoKChk cGh5X3NlbCA+PiAzICYgMHgxKSA9PSAxKSB8ICgoZHBoeV9zZWwgPj4gNyAmIDB4MSkgPT0gMSkg fAorCSAgICAoKGRwaHlfc2VsID4+IDExICYgMHgxKSA9PSAxKSkKKwkJcmVnX3dyX2RhdGEgfD0g ZGF0YSA8PCAyNDsKKworCWlmICgoZHBoeV9zZWwgPj4gMCAmIDB4ZikgPiAwKQorCQlrbWJfd3Jp dGVfbWlwaShrbWIsIERQSFlfVEVTVF9ESU4wXzMsIHJlZ193cl9kYXRhKTsKKwlpZiAoKGRwaHlf c2VsID4+IDQgJiAweGYpID4gMCkKKwkJa21iX3dyaXRlX21pcGkoa21iLCBEUEhZX1RFU1RfRElO NF83LCByZWdfd3JfZGF0YSk7CisJaWYgKChkcGh5X3NlbCA+PiA4ICYgMHgzKSA+IDApCisJCWtt Yl93cml0ZV9taXBpKGttYiwgRFBIWV9URVNUX0RJTjhfOSwgcmVnX3dyX2RhdGEpOworCisJcmVn X3dyX2RhdGEgPSAwOworCXJlZ193cl9kYXRhID0gKGRwaHlfc2VsIHwgZHBoeV9zZWwgPDwgMTIp OworCWttYl93cml0ZV9taXBpKGttYiwgRFBIWV9URVNUX0NUUkwxLCByZWdfd3JfZGF0YSk7CisK KwlyZWdfd3JfZGF0YSA9IDA7CisJcmVnX3dyX2RhdGEgPSBkcGh5X3NlbCA8PCAxMjsKKwlrbWJf d3JpdGVfbWlwaShrbWIsIERQSFlfVEVTVF9DVFJMMSwgcmVnX3dyX2RhdGEpOworCisJcmVnX3dy X2RhdGEgPSAwOworCWttYl93cml0ZV9taXBpKGttYiwgRFBIWV9URVNUX0NUUkwxLCByZWdfd3Jf ZGF0YSk7CisKKwlpZiAoKGRwaHlfc2VsID4+IDAgJiAweGYpID4gMCkKKwkJcmVnX3JkX2RhdGEg PSBrbWJfcmVhZF9taXBpKGttYiwgRFBIWV9URVNUX0RPVVQwXzMpOworCWlmICgoZHBoeV9zZWwg Pj4gNCAmIDB4ZikgPiAwKQorCQlyZWdfcmRfZGF0YSA9IGttYl9yZWFkX21pcGkoa21iLCBEUEhZ X1RFU1RfRE9VVDRfNyk7CisJaWYgKChkcGh5X3NlbCA+PiA4ICYgMHgzKSA+IDApCisJCXJlZ19y ZF9kYXRhID0ga21iX3JlYWRfbWlwaShrbWIsIERQSFlfVEVTVF9ET1VUOF85KTsKKworCWlmICgo KGRwaHlfc2VsID4+IDAgJiAweDEpID09IDEpIHwgKChkcGh5X3NlbCA+PiA0ICYgMHgxKSA9PSAx KSB8CisJICAgICgoZHBoeV9zZWwgPj4gOCAmIDB4MSkgPT0gMSkpCisJCWRhdGEgPSByZWdfcmRf ZGF0YSA+PiAwOworCWlmICgoKGRwaHlfc2VsID4+IDEgJiAweDEpID09IDEpIHwgKChkcGh5X3Nl bCA+PiA1ICYgMHgxKSA9PSAxKSB8CisJICAgICgoZHBoeV9zZWwgPj4gOSAmIDB4MSkgPT0gMSkp CisJCWRhdGEgPSByZWdfcmRfZGF0YSA+PiA4OworCWlmICgoKGRwaHlfc2VsID4+IDIgJiAweDEp ID09IDEpIHwgKChkcGh5X3NlbCA+PiA2ICYgMHgxKSA9PSAxKSB8CisJICAgICgoZHBoeV9zZWwg Pj4gMTAgJiAweDEpID09IDEpKQorCQlkYXRhID0gcmVnX3JkX2RhdGEgPj4gMTY7CisJaWYgKCgo ZHBoeV9zZWwgPj4gMyAmIDB4MSkgPT0gMSkgfCAoKGRwaHlfc2VsID4+IDcgJiAweDEpID09IDEp IHwKKwkgICAgKChkcGh5X3NlbCA+PiAxMSAmIDB4MSkgPT0gMSkpCisJCWRhdGEgPSByZWdfcmRf ZGF0YSA+PiAyNDsKKworCXJldHVybiBkYXRhOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHRl c3RfbW9kZV9zZW5kKHN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmttYiwgdTMyIGRwaHlfbm8sCisJ CQkgICB1MzIgdGVzdF9jb2RlLCB1MzIgdGVzdF9kYXRhKQoreworCWlmICh0ZXN0X2NvZGUgIT0g VEVTVF9DT0RFX0ZTTV9DT05UUk9MKQorCQlkcm1fZGJnKCZrbWItPmRybSwKKwkJCSJ0ZXN0X2Nv ZGUgPSAlMDJ4LCB0ZXN0X2RhdGEgPSAlMDh4XG4iLCB0ZXN0X2NvZGUsCisJCQkgdGVzdF9kYXRh KTsKKwkvKiBTdGVwcyB0byBzZW5kIHRlc3QgY29kZToKKwkgKiAtIHNldCB0ZXN0Y2xrIEhJR0gK KwkgKiAtIHNldCB0ZXN0ZGluIHdpdGggdGVzdCBjb2RlCisJICogLSBzZXQgdGVzdGVuIEhJR0gK KwkgKiAtIHNldCB0ZXN0Y2xrIExPVworCSAqIC0gc2V0IHRlc3RlbiBMT1cKKwkgKi8KKworCS8q IFNldCB0ZXN0Y2xrIGhpZ2ggKi8KKwlTRVRfRFBIWV9URVNUX0NUUkwxX0NMSyhrbWIsIGRwaHlf bm8pOworCisJLyogU2V0IHRlc3RkaW4gKi8KKwlTRVRfVEVTVF9ESU4wXzMoa21iLCBkcGh5X25v LCB0ZXN0X2NvZGUpOworCisJLyogU2V0IHRlc3RlbiBoaWdoICovCisJU0VUX0RQSFlfVEVTVF9D VFJMMV9FTihrbWIsIGRwaHlfbm8pOworCisJLyogU2V0IHRlc3RjbGsgbG93ICovCisJQ0xSX0RQ SFlfVEVTVF9DVFJMMV9DTEsoa21iLCBkcGh5X25vKTsKKworCS8qIFNldCB0ZXN0ZW4gbG93ICov CisJQ0xSX0RQSFlfVEVTVF9DVFJMMV9FTihrbWIsIGRwaHlfbm8pOworCisJaWYgKHRlc3RfY29k ZSkgeworCQkvKiAgU3RlcHMgdG8gc2VuZCB0ZXN0IGRhdGE6CisJCSAqIC0gc2V0IHRlc3RlbiBM T1cKKwkJICogLSBzZXQgdGVzdGNsayBMT1cKKwkJICogLSBzZXQgdGVzdGRpbiB3aXRoIGRhdGEK KwkJICogLSBzZXQgdGVzdGNsayBISUdICisJCSAqLworCisJCS8qIFNldCB0ZXN0ZW4gbG93ICov CisJCUNMUl9EUEhZX1RFU1RfQ1RSTDFfRU4oa21iLCBkcGh5X25vKTsKKworCQkvKiBTZXQgdGVz dGNsayBsb3cgKi8KKwkJQ0xSX0RQSFlfVEVTVF9DVFJMMV9DTEsoa21iLCBkcGh5X25vKTsKKwor CQkvKiBTZXQgZGF0YSBpbiB0ZXN0ZGluICovCisJCWttYl93cml0ZV9taXBpKGttYiwKKwkJCSAg ICAgICBEUEhZX1RFU1RfRElOMF8zICsgKChkcGh5X25vIC8gMHg0KSAqIDB4NCksCisJCQkgICAg ICAgdGVzdF9kYXRhIDw8ICgoZHBoeV9ubyAlIDQpICogOCkpOworCisJCS8qIFNldCB0ZXN0Y2xr IGhpZ2ggKi8KKwkJU0VUX0RQSFlfVEVTVF9DVFJMMV9DTEsoa21iLCBkcGh5X25vKTsKKwl9Cit9 CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfdGVzdF9tb2RlX3NyY19vc2NfZnJlcV90YXJnZXRf bG93X2JpdHMoc3RydWN0CisJCQkJCQkJICAgICAga21iX2RybV9wcml2YXRlCisJCQkJCQkJICAg ICAgKmttYiwKKwkJCQkJCQkgICAgICB1MzIgZHBoeV9ubywKKwkJCQkJCQkgICAgICB1MzIgZnJl cSkKK3sKKwkvKiBUeXBpY2FsIHJpc2UvZmFsbCB0aW1lPTE2NiwgcmVmZXIgVGFibGUgMTIwNyBk YXRhYm9vaywKKwkgKiBzcl9vc2NfZnJlcV90YXJnZXRbNzowXQorCSAqLworCXRlc3RfbW9kZV9z ZW5kKGttYiwgZHBoeV9ubywgVEVTVF9DT0RFX1NMRVdfUkFURV9ERExfQ1lDTEVTLAorCQkgICAg ICAgKGZyZXEgJiAweDdmKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfdGVzdF9tb2Rl X3NyY19vc2NfZnJlcV90YXJnZXRfaGlfYml0cyhzdHJ1Y3QKKwkJCQkJCQkgICAgIGttYl9kcm1f cHJpdmF0ZQorCQkJCQkJCSAgICAgKmttYiwKKwkJCQkJCQkgICAgIHUzMiBkcGh5X25vLAorCQkJ CQkJCSAgICAgdTMyIGZyZXEpCit7CisJdTMyIGRhdGE7CisKKwkvKiBGbGFnIHRoaXMgYXMgaGln aCBuaWJibGUgKi8KKwlkYXRhID0gKChmcmVxID4+IDYpICYgMHgxZikgfCAoMSA8PCA3KTsKKwor CS8qIFR5cGljYWwgcmlzZS9mYWxsIHRpbWU9MTY2LCByZWZlciBUYWJsZSAxMjA3IGRhdGFib29r LAorCSAqIHNyX29zY19mcmVxX3RhcmdldFsxMTo3XQorCSAqLworCXRlc3RfbW9kZV9zZW5kKGtt YiwgZHBoeV9ubywgVEVTVF9DT0RFX1NMRVdfUkFURV9ERExfQ1lDTEVTLCBkYXRhKTsKK30KKwor c3RhdGljIHZvaWQgbWlwaV90eF9nZXRfdmNvX3BhcmFtcyhzdHJ1Y3QgdmNvX3BhcmFtcyAqdmNv KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodmNvX3RhYmxlKTsg aSsrKSB7CisJCWlmICh2Y28tPmZyZXEgPCB2Y29fdGFibGVbaV0uZnJlcSkgeworCQkJKnZjbyA9 IHZjb190YWJsZVtpXTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCVdBUk5fT05DRSgxLCAiSW52 YWxpZCB2Y28gZnJlcSA9ICV1IGZvciBQTEwgc2V0dXBcbiIsIHZjby0+ZnJlcSk7Cit9CisKK3N0 YXRpYyB2b2lkIG1pcGlfdHhfcGxsX3NldHVwKHN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmttYiwg dTMyIGRwaHlfbm8sCisJCQkgICAgICB1MzIgcmVmX2Nsa19taHosIHUzMiB0YXJnZXRfZnJlcV9t aHopCit7CisJdTMyIGJlc3RfbiA9IDAsIGJlc3RfbSA9IDA7CisJdTMyIG4gPSAwLCBtID0gMCwg ZGl2ID0gMCwgZGVsdGEsIGZyZXEgPSAwLCB0X2ZyZXE7CisJdTMyIGJlc3RfZnJlcV9kZWx0YSA9 IDMwMDA7CisKKwkvKiBwbGxfcmVmX2NsazogLSB2YWxpZCByYW5nZTogMn42NCBNSHo7IFR5cGlj YWxseSAyNCBNSHoKKwkgKiBGdmNvOiAtIHZhbGlkIHJhbmdlOiAzMjB+MTI1MCBNSHogKEdlbjMg RC1QSFkpCisJICogRm91dDogLSB2YWxpZCByYW5nZTogNDB+MTI1MCBNSHogKEdlbjMgRC1QSFkp CisJICogbjogLSB2YWxpZCByYW5nZSBbMCAxNV0KKwkgKiBOOiAtIE4gPSBuICsgMQorCSAqICAg ICAgLXZhbGlkIHJhbmdlOiBbMSAxNl0KKwkgKiAgICAgIC1jb25kaXRpb25zOiAtIChwbGxfcmVm X2NsayAvIE4pID49IDIgTUh6CisJICogICAgICAgICAgICAgIC0ocGxsX3JlZl9jbGsgLyBOKSA8 PSA4IE1IegorCSAqIG06IHZhbGlkIHJhbmdlIFs2MiA2MjNdCisJICogTTogLSBNID0gbSArIDIK KwkgKiAgICAgIC12YWxpZCByYW5nZSBbNjQgNjI1XQorCSAqICAgICAgLUZ2Y28gPSAoTS9OKSAq IHBsbF9yZWZfY2xrCisJICovCisJc3RydWN0IHZjb19wYXJhbXMgdmNvX3AgPSB7CisJCS5yYW5n ZSA9IDAsCisJCS5kaXZpZGVyID0gMSwKKwl9OworCisJdmNvX3AuZnJlcSA9IHRhcmdldF9mcmVx X21oejsKKwltaXBpX3R4X2dldF92Y29fcGFyYW1zKCZ2Y29fcCk7CisKKwkvKiBTZWFyY2ggcGxs IG4gcGFyYW1ldGVyICovCisJZm9yIChuID0gUExMX05fTUlOOyBuIDw9IFBMTF9OX01BWDsgbisr KSB7CisJCS8qIENhbGN1bGF0ZSB0aGUgcGxsIGlucHV0IGZyZXF1ZW5jeSBkaXZpc2lvbiByYXRp bworCQkgKiBtdWx0aXBseSBieSAxMDAwIGZvciBwcmVjaXNpb24gLQorCQkgKiBubyBmbG9hdGlu ZyBwb2ludCwgYWRkIG4gZm9yIHJvdW5kaW5nCisJCSAqLworCQlkaXYgPSAoKHJlZl9jbGtfbWh6 ICogMTAwMCkgKyBuKSAvIChuICsgMSk7CisKKwkJLyogRm91bmQgYSB2YWxpZCBuIHBhcmFtZXRl ciAqLworCQlpZiAoKGRpdiA8IDIwMDAgfHwgZGl2ID4gODAwMCkpCisJCQljb250aW51ZTsKKwor CQkvKiBTZWFyY2ggcGxsIG0gcGFyYW1ldGVyICovCisJCWZvciAobSA9IFBMTF9NX01JTjsgbSA8 PSBQTExfTV9NQVg7IG0rKykgeworCQkJLyogQ2FsY3VsYXRlIHRoZSBGdmNvKERQSFkgUExMIG91 dHB1dCBmcmVxdWVuY3kpCisJCQkgKiB1c2luZyB0aGUgY3VycmVudCBuLG0gcGFyYW1zCisJCQkg Ki8KKwkJCWZyZXEgPSBkaXYgKiAobSArIDIpOworCQkJZnJlcSAvPSAxMDAwOworCisJCQkvKiBU cmltIHRoZSBwb3RlbnRpYWwgcGxsIGZyZXEgdG8gbWF4IHN1cHBvcnRlZCAqLworCQkJaWYgKGZy ZXEgPiBQTExfRlZDT19NQVgpCisJCQkJY29udGludWU7CisKKwkJCWRlbHRhID0gYWJzKGZyZXEg LSB0YXJnZXRfZnJlcV9taHopOworCisJCQkvKiBTZWxlY3QgdGhlIGJlc3QgKGNsb3Nlc3QgdG8g dGFyZ2V0IHBsbCBmcmVxKQorCQkJICogbixtIHBhcmFtZXRlcnMgc28gZmFyCisJCQkgKi8KKwkJ CWlmIChkZWx0YSA8IGJlc3RfZnJlcV9kZWx0YSkgeworCQkJCWJlc3RfbiA9IG47CisJCQkJYmVz dF9tID0gbTsKKwkJCQliZXN0X2ZyZXFfZGVsdGEgPSBkZWx0YTsKKwkJCX0KKwkJfQorCX0KKwor CS8qIFByb2dyYW0gdmNvX2NudHJsIHBhcmFtZXRlcgorCSAqIFBMTF9WQ09fQ29udHJvbFs1OjBd ID0gcGxsX3Zjb19jbnRybF9vdnIsCisJICogUExMX1ZDT19Db250cm9sWzZdICAgPSBwbGxfdmNv X2NudHJsX292cl9lbgorCSAqLworCXRlc3RfbW9kZV9zZW5kKGttYiwgZHBoeV9ubywgVEVTVF9D T0RFX1BMTF9WQ09fQ1RSTCwgKHZjb19wLnJhbmdlCisJCQkJCQkJCXwgKDEgPDwgNikpKTsKKwor CS8qIFByb2dyYW0gbSwgbiBwbGwgcGFyYW1ldGVycyAqLworCWRybV9kYmcoJmttYi0+ZHJtLCAi bSA9ICVkIG4gPSAlZFxuIiwgYmVzdF9tLCBiZXN0X24pOworCisJLyogUExMX0lucHV0X0Rpdmlk ZXJfUmF0aW9bMzowXSA9IHBsbF9uX292ciAqLworCXRlc3RfbW9kZV9zZW5kKGttYiwgZHBoeV9u bywgVEVTVF9DT0RFX1BMTF9JTlBVVF9ESVZJREVSLAorCQkgICAgICAgKGJlc3RfbiAmIDB4MGYp KTsKKworCS8qIG0gLSBsb3cgbmliYmxlIFBMTF9Mb29wX0RpdmlkZXJfUmF0aW9bNDowXQorCSAq IHBsbF9tX292cls0OjBdCisJICovCisJdGVzdF9tb2RlX3NlbmQoa21iLCBkcGh5X25vLCBURVNU X0NPREVfUExMX0ZFRURCQUNLX0RJVklERVIsCisJCSAgICAgICAoYmVzdF9tICYgMHgxZikpOwor CisJLyogbSAtIGhpZ2ggbmliYmxlIFBMTF9Mb29wX0RpdmlkZXJfUmF0aW9bNDowXQorCSAqIHBs bF9tX292cls5OjVdCisJICovCisJdGVzdF9tb2RlX3NlbmQoa21iLCBkcGh5X25vLCBURVNUX0NP REVfUExMX0ZFRURCQUNLX0RJVklERVIsCisJCSAgICAgICAoKGJlc3RfbSA+PiA1KSAmIDB4MWYp IHwgUExMX0ZFRURCQUNLX0RJVklERVJfSElHSCk7CisKKwkvKiBFbmFibGUgb3ZlcndyaXRlIG9m IG4sbSBwYXJhbWV0ZXJzIDpwbGxfbl9vdnJfZW4sIHBsbF9tX292cl9lbiAqLworCXRlc3RfbW9k ZV9zZW5kKGttYiwgZHBoeV9ubywgVEVTVF9DT0RFX1BMTF9PVVRQVVRfQ0xLX1NFTCwKKwkJICAg ICAgIChQTExfTl9PVlJfRU4gfCBQTExfTV9PVlJfRU4pKTsKKworCS8qIFByb2dyYW0gQ2hhcmdl LVB1bXAgcGFyYW1ldGVycyAqLworCisJLyogcGxsX3Byb3BfY250cmwtZml4ZWQgdmFsdWVzIGZv ciBwcm9wX2NudHJsIGZyb20gRFBIWSBkb2MgKi8KKwl0X2ZyZXEgPSB0YXJnZXRfZnJlcV9taHog KiB2Y29fcC5kaXZpZGVyOworCXRlc3RfbW9kZV9zZW5kKGttYiwgZHBoeV9ubywKKwkJICAgICAg IFRFU1RfQ09ERV9QTExfUFJPUE9SVElPTkFMX0NIQVJHRV9QVU1QX0NUUkwsCisJCSAgICAgICAo KHRfZnJlcSA+IDExNTApID8gMHgwQyA6IDB4MEIpKTsKKworCS8qIHBsbF9pbnRfY250cmwtZml4 ZWQgdmFsdWUgZm9yIGludF9jbnRybCBmcm9tIERQSFkgZG9jICovCisJdGVzdF9tb2RlX3NlbmQo a21iLCBkcGh5X25vLCBURVNUX0NPREVfUExMX0lOVEVHUkFMX0NIQVJHRV9QVU1QX0NUUkwsCisJ CSAgICAgICAweDAwKTsKKworCS8qIHBsbF9nbXBfY250cmwtZml4ZWQgdmFsdWUgZm9yIGdtcF9j bnRybCBmcm9tIERQSFkgZG9jaSAqLworCXRlc3RfbW9kZV9zZW5kKGttYiwgZHBoeV9ubywgVEVT VF9DT0RFX1BMTF9HTVBfQ1RSTCwgMHgxMCk7CisKKwkvKiBwbGxfY3BiaWFzX2NudHJsLWZpeGVk IHZhbHVlIGZvciBjcGJpYXNfY250cmwgZnJvbSBEUEhZIGRvYyAqLworCXRlc3RfbW9kZV9zZW5k KGttYiwgZHBoeV9ubywgVEVTVF9DT0RFX1BMTF9DSEFSR0VfUFVNUF9CSUFTLCAweDEwKTsKKwor CS8qIHBsbF90aDEgLUxvY2sgRGV0ZWN0b3IgUGhhc2UgZXJyb3IgdGhyZXNob2xkLAorCSAqIGRv Y3VtZW50IGdpdmVzIGZpeGVkIHZhbHVlCisJICovCisJdGVzdF9tb2RlX3NlbmQoa21iLCBkcGh5 X25vLCBURVNUX0NPREVfUExMX1BIQVNFX0VSUl9DVFJMLCAweDAyKTsKKworCS8qIFBMTCBMb2Nr IENvbmZpZ3VyYXRpb24gKi8KKworCS8qIHBsbF90aDIgLSBMb2NrIEZpbHRlciBsZW5ndGgsIGRv Y3VtZW50IGdpdmVzIGZpeGVkIHZhbHVlICovCisJdGVzdF9tb2RlX3NlbmQoa21iLCBkcGh5X25v LCBURVNUX0NPREVfUExMX0xPQ0tfRklMVEVSLCAweDYwKTsKKworCS8qIHBsbF90aDMtIFBMTCBV bmxvY2tpbmcgZmlsdGVyLCBkb2N1bWVudCBnaXZlcyBmaXhlZCB2YWx1ZSAqLworCXRlc3RfbW9k ZV9zZW5kKGttYiwgZHBoeV9ubywgVEVTVF9DT0RFX1BMTF9VTkxPQ0tfRklMVEVSLCAweDAzKTsK KworCS8qIHBsbF9sb2NrX3NlbC1QTEwgTG9jayBEZXRlY3RvciBTZWxlY3Rpb24sCisJICogZG9j dW1lbnQgZ2l2ZXMgZml4ZWQgdmFsdWUKKwkgKi8KKwl0ZXN0X21vZGVfc2VuZChrbWIsIGRwaHlf bm8sIFRFU1RfQ09ERV9QTExfTE9DS19ERVRFQ1RPUiwgMHgwMik7Cit9CisKKyNpZmRlZiBEUEhZ X0dFVF9GU00KK3N0YXRpYyB2b2lkIGRwaHlfZ2V0X2ZzbShzdHJ1Y3Qga21iX2RybV9wcml2YXRl ICprbWIsIHUzMiBkcGh5X25vKQoreworCXRlc3RfbW9kZV9zZW5kKGttYiwgZHBoeV9ubywgVEVT VF9DT0RFX0ZTTV9DT05UUk9MLCAweDgwKTsKKworCWRybV9kYmcoJmttYi0+ZHJtLCAiZHBoeSAl ZCBmc21fc3RhdGUgPSAwJXhcbiIsIGRwaHlfbm8sCisJCSBrbWJfcmVhZF9taXBpKGttYiwgRFBI WV9URVNUX0RPVVQ0XzcpKTsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBkcGh5X2luaXRfc2Vx dWVuY2Uoc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqa21iLAorCQkJICAgICAgIHN0cnVjdCBtaXBp X2N0cmxfY2ZnICpjZmcsIHUzMiBkcGh5X25vLAorCQkJICAgICAgIGludCBhY3RpdmVfbGFuZXMs IGVudW0gZHBoeV9tb2RlIG1vZGUpCit7CisJdTMyIHRlc3RfY29kZSA9IDAsIHRlc3RfZGF0YSA9 IDAsIHZhbDsKKwlpbnQgaSA9IDA7CisKKwlkcm1faW5mbygma21iLT5kcm0sCisJCSJkcGh5PSVk IG1vZGU9JWQgYWN0aXZlX2xhbmVzPSVkXG4iLCBkcGh5X25vLCBtb2RlLAorCQkgYWN0aXZlX2xh bmVzKTsKKwlkcm1fZGJnKCZrbWItPmRybSwgIk1JUElfRFBIWV9TVEFUMF80XzcgPSAweCV4KVxu IiwKKwkJICBrbWJfcmVhZF9taXBpKGttYiwgTUlQSV9EUEhZX1NUQVQ0XzcpKTsKKworCS8qIFNl dCBELVBIWSBpbiBzaHV0ZG93biBtb2RlICovCisJLyogQXNzZXJ0IFJTVFogc2lnbmFsICovCisJ Q0xSX0RQSFlfSU5JVF9DVFJMMChrbWIsIGRwaHlfbm8sIFJFU0VUWik7CisKKwkvKiBBc3NlcnQg U0hVVERPV05aIHNpZ25hbCAqLworCUNMUl9EUEhZX0lOSVRfQ1RSTDAoa21iLCBkcGh5X25vLCBT SFVURE9XTlopOworCXZhbCA9IGttYl9yZWFkX21pcGkoa21iLCBEUEhZX0lOSVRfQ1RSTDApOwor CisJZHJtX2RiZygma21iLT5kcm0sICJEUEhZX0lOSVRfQ1RSTDAgPSAweCV4XG4iLCB2YWwpOwor CisJLyogSW5pdCBELVBIWV9uCisJICogUHVsc2UgdGVzdGNsZWFyIHNpZ25hbCB0byBtYWtlIHN1 cmUgdGhlIGQtcGh5IGNvbmZpZ3VyYXRpb24KKwkgKiBzdGFydHMgZnJvbSBhIGNsZWFuIGJhc2UK KwkgKi8KKwlDTFJfRFBIWV9URVNUX0NUUkwwKGttYiwgZHBoeV9ubyk7CisJbmRlbGF5KDE1KTsK KwlTRVRfRFBIWV9URVNUX0NUUkwwKGttYiwgZHBoeV9ubyk7CisJbmRlbGF5KDE1KTsKKwlDTFJf RFBIWV9URVNUX0NUUkwwKGttYiwgZHBoeV9ubyk7CisJbmRlbGF5KDE1KTsKKworCWRybV9kYmco JmttYi0+ZHJtLCAiRFBIWV9URVNUX0NUUkwwPTB4JXhcbiIsCisJCSAga21iX3JlYWRfbWlwaShr bWIsIERQSFlfVEVTVF9DVFJMMCkpOworCisJLyogU2V0IG1hc3Rlcm1hY3JvIGJpdCAtIE1hc3Rl ciBvciBzbGF2ZSBtb2RlICovCisJdGVzdF9jb2RlID0gVEVTVF9DT0RFX01VTFRJUExFX1BIWV9D VFJMOworCisJLyogRFBIWSBoYXMgaXRzIG93biBjbG9jayBsYW5lIGVuYWJsZWQgKG1hc3Rlcikg Ki8KKwlpZiAobW9kZSA9PSBNSVBJX0RQSFlfTUFTVEVSKQorCQl0ZXN0X2RhdGEgPSAweDAxOwor CWVsc2UKKwkJdGVzdF9kYXRhID0gMHgwMDsKKworCS8qIFNlbmQgdGhlIHRlc3QgY29kZSBhbmQg ZGF0YSAqLworCXRlc3RfbW9kZV9zZW5kKGttYiwgZHBoeV9ubywgdGVzdF9jb2RlLCB0ZXN0X2Rh dGEpOworCisJLyogU2V0IHRoZSBsYW5lIGRhdGEgcmF0ZSAqLworCWZvciAoaSA9IDA7IGkgPCBN SVBJX0RQSFlfREVGQVVMVF9CSVRfUkFURVM7IGkrKykgeworCQlpZiAobWlwaV9oc19mcmVxX3Jh bmdlW2ldLmRlZmF1bHRfYml0X3JhdGVfbWJwcyA8CisJCSAgICBjZmctPmxhbmVfcmF0ZV9tYnBz KQorCQkJY29udGludWU7CisKKwkJLyogU2VuZCB0aGUgdGVzdCBjb2RlIGFuZCBkYXRhICovCisJ CS8qIGJpdFs2OjBdID0gaHNmcmVxcmFuZ2Vfb3ZyIGJpdFs3XSA9IGhzZnJlcXJhbmdlX292cl9l biAqLworCQl0ZXN0X2NvZGUgPSBURVNUX0NPREVfSFNfRlJFUV9SQU5HRV9DRkc7CisJCXRlc3Rf ZGF0YSA9IChtaXBpX2hzX2ZyZXFfcmFuZ2VbaV0uaHNmcmVxcmFuZ2VfY29kZSAmIDB4N2YpIHwK KwkJICAgICgxIDw8IDcpOworCQl0ZXN0X21vZGVfc2VuZChrbWIsIGRwaHlfbm8sIHRlc3RfY29k ZSwgdGVzdF9kYXRhKTsKKwkJYnJlYWs7CisJfQorCisJLyogSGlnaC1TcGVlZCBUeCBTbGV3IFJh dGUgQ2FsaWJyYXRpb24KKwkgKiBCaXRSYXRlOiA+IDEuNSBHYnBzICYmIDw9IDIuNSBHYnBzOiBz bGV3IHJhdGUgY29udHJvbCBPRkYKKwkgKi8KKwlpZiAoY2ZnLT5sYW5lX3JhdGVfbWJwcyA+IDE1 MDApIHsKKwkJLyogQnlwYXNzIHNsZXcgcmF0ZSBjYWxpYnJhdGlvbiBhbGdvcml0aG0KKwkJICog Yml0c1sxOjB9IHNyY2FsX2VuX292cl9lbiwgc3JjYWxfZW5fb3ZyCisJCSAqLworCQl0ZXN0X2Nv ZGUgPSBURVNUX0NPREVfU0xFV19SQVRFX09WRVJSSURFX0NUUkw7CisJCXRlc3RfZGF0YSA9IDB4 MDI7CisJCXRlc3RfbW9kZV9zZW5kKGttYiwgZHBoeV9ubywgdGVzdF9jb2RlLCB0ZXN0X2RhdGEp OworCisJCS8qIERpc2FibGUgc2xldyByYXRlIGNhbGlicmF0aW9uICovCisJCXRlc3RfY29kZSA9 IFRFU1RfQ09ERV9TTEVXX1JBVEVfRERMX0xPT1BfQ1RSTDsKKwkJdGVzdF9kYXRhID0gMHgwMDsK KwkJdGVzdF9tb2RlX3NlbmQoa21iLCBkcGh5X25vLCB0ZXN0X2NvZGUsIHRlc3RfZGF0YSk7CisJ fSBlbHNlIGlmIChjZmctPmxhbmVfcmF0ZV9tYnBzID4gMTAwMCkgeworCQkvKiBCaXRSYXRlOiA+ IDEgR2JwcyAmJiA8PSAxLjUgR2JwczogLSBzbGV3IHJhdGUgY29udHJvbCBPTgorCQkgKiB0eXBp Y2FsIHJpc2UvZmFsbCB0aW1lczogMTY2IHBzCisJCSAqLworCisJCS8qIERvIG5vdCBieXBhc3Mg c2xldyByYXRlIGNhbGlicmF0aW9uIGFsZ29yaXRobQorCQkgKiBiaXRzWzE6MH09c3JjYWxfZW5f b3ZyX2VuLCBzcmNhbF9lbl9vdnIsIGJpdFs2XT1zcl9yYW5nZQorCQkgKi8KKwkJdGVzdF9jb2Rl ID0gVEVTVF9DT0RFX1NMRVdfUkFURV9PVkVSUklERV9DVFJMOworCQl0ZXN0X2RhdGEgPSAoMHgw MyB8ICgxIDw8IDYpKTsKKwkJdGVzdF9tb2RlX3NlbmQoa21iLCBkcGh5X25vLCB0ZXN0X2NvZGUs IHRlc3RfZGF0YSk7CisKKwkJLyogRW5hYmxlIHNsZXcgcmF0ZSBjYWxpYnJhdGlvbiAqLworCQl0 ZXN0X2NvZGUgPSBURVNUX0NPREVfU0xFV19SQVRFX0RETF9MT09QX0NUUkw7CisJCXRlc3RfZGF0 YSA9IDB4MDE7CisJCXRlc3RfbW9kZV9zZW5kKGttYiwgZHBoeV9ubywgdGVzdF9jb2RlLCB0ZXN0 X2RhdGEpOworCisJCS8qIFNldCBzcl9vc2NfZnJlcV90YXJnZXRbNjowXSBsb3cgbmliYmxlCisJ CSAqIHR5cGljYWwgcmlzZS9mYWxsIHRpbWU9MTY2LCByZWZlciBUYWJsZSAxMjA3IGRhdGFib29r CisJCSAqLworCQl0ZXN0X2NvZGUgPSBURVNUX0NPREVfU0xFV19SQVRFX0RETF9DWUNMRVM7CisJ CXRlc3RfZGF0YSA9ICgweDcyZiAmIDB4N2YpOworCQl0ZXN0X21vZGVfc2VuZChrbWIsIGRwaHlf bm8sIHRlc3RfY29kZSwgdGVzdF9kYXRhKTsKKworCQkvKiBTZXQgc3Jfb3NjX2ZyZXFfdGFyZ2V0 WzExOjddIGhpZ2ggbmliYmxlCisJCSAqIFR5cGljYWwgcmlzZS9mYWxsIHRpbWU9MTY2LCByZWZl ciBUYWJsZSAxMjA3IGRhdGFib29rCisJCSAqLworCQl0ZXN0X2NvZGUgPSBURVNUX0NPREVfU0xF V19SQVRFX0RETF9DWUNMRVM7CisJCXRlc3RfZGF0YSA9ICgoMHg3MmYgPj4gNikgJiAweDFmKSB8 ICgxIDw8IDcpOworCQl0ZXN0X21vZGVfc2VuZChrbWIsIGRwaHlfbm8sIHRlc3RfY29kZSwgdGVz dF9kYXRhKTsKKwl9IGVsc2UgeworCQkvKiBsYW5lX3JhdGVfbWJwcyA8PSAxMDAwIE1icHMKKwkJ ICogQml0UmF0ZTogIDw9IDEgR2JwczoKKwkJICogLSBzbGV3IHJhdGUgY29udHJvbCBPTgorCQkg KiAtIHR5cGljYWwgcmlzZS9mYWxsIHRpbWVzOiAyMjUgcHMKKwkJICovCisKKwkJLyogRG8gbm90 IGJ5cGFzcyBzbGV3IHJhdGUgY2FsaWJyYXRpb24gYWxnb3JpdGhtICovCisJCXRlc3RfY29kZSA9 IFRFU1RfQ09ERV9TTEVXX1JBVEVfT1ZFUlJJREVfQ1RSTDsKKwkJdGVzdF9kYXRhID0gKDB4MDMg fCAoMSA8PCA2KSk7CisJCXRlc3RfbW9kZV9zZW5kKGttYiwgZHBoeV9ubywgdGVzdF9jb2RlLCB0 ZXN0X2RhdGEpOworCisJCS8qIEVuYWJsZSBzbGV3IHJhdGUgY2FsaWJyYXRpb24gKi8KKwkJdGVz dF9jb2RlID0gVEVTVF9DT0RFX1NMRVdfUkFURV9ERExfTE9PUF9DVFJMOworCQl0ZXN0X2RhdGEg PSAweDAxOworCQl0ZXN0X21vZGVfc2VuZChrbWIsIGRwaHlfbm8sIHRlc3RfY29kZSwgdGVzdF9k YXRhKTsKKworCQkvKiBUeXBpY2FsIHJpc2UvZmFsbCB0aW1lPTI1NSwgcmVmZXIgVGFibGUgMTIw NyBkYXRhYm9vayAqLworCQl0ZXN0X2NvZGUgPSBURVNUX0NPREVfU0xFV19SQVRFX0RETF9DWUNM RVM7CisJCXRlc3RfZGF0YSA9ICgweDUyMyAmIDB4N2YpOworCQl0ZXN0X21vZGVfc2VuZChrbWIs IGRwaHlfbm8sIHRlc3RfY29kZSwgdGVzdF9kYXRhKTsKKworCQkvKiBTZXQgc3Jfb3NjX2ZyZXFf dGFyZ2V0WzExOjddIGhpZ2ggbmliYmxlICovCisJCXRlc3RfY29kZSA9IFRFU1RfQ09ERV9TTEVX X1JBVEVfRERMX0NZQ0xFUzsKKwkJdGVzdF9kYXRhID0gKCgweDUyMyA+PiA2KSAmIDB4MWYpIHwg KDEgPDwgNyk7CisJCXRlc3RfbW9kZV9zZW5kKGttYiwgZHBoeV9ubywgdGVzdF9jb2RlLCB0ZXN0 X2RhdGEpOworCisJfQorCisJLyogU2V0IGNmZ2Nsa2ZyZXFyYW5nZSAqLworCXZhbCA9ICgoKGNm Zy0+Y2ZnX2Nsa19raHogLyAxMDAwKSAtIDE3KSAqIDQpICYgMHgzZjsKKwlTRVRfRFBIWV9GUkVR X0NUUkwwXzMoa21iLCBkcGh5X25vLCB2YWwpOworCisJZHJtX2RiZygma21iLT5kcm0sICJEUEhZ X0ZSRVEgPSAweCV4XG4iLAorCQkga21iX3JlYWRfbWlwaShrbWIsIERQSFlfRlJFUV9DVFJMMF8z ICsgNCkpOworCWRybV9kYmcoJmttYi0+ZHJtLCAiTUlQSV9EUEhZX1NUQVQwXzRfNyA9IDB4JXgp XG4iLAorCQkgIGttYl9yZWFkX21pcGkoa21iLCBNSVBJX0RQSFlfU1RBVDRfNykpOworCisJLyog RW5hYmxlIGNvbmZpZyBjbGsgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGQtcGh5ICovCisJa21iX3Nl dF9iaXRfbWlwaShrbWIsIERQSFlfQ0ZHX0NMS19FTiwgZHBoeV9ubyk7CisKKwlkcm1fZGJnKCZr bWItPmRybSwgIkRQSFlfQ0ZHX0NMS19FTiA9IDB4JXhcbiIsCisJCSBrbWJfcmVhZF9taXBpKGtt YiwgRFBIWV9DRkdfQ0xLX0VOKSk7CisKKwkvKiBQTEwgc2V0dXAgKi8KKwlpZiAobW9kZSA9PSBN SVBJX0RQSFlfTUFTVEVSKSB7CisJCS8qIFNldCBQTEwgcmVndWxhdG9yIGluIGJ5cGFzcyAqLwor CQl0ZXN0X2NvZGUgPSBURVNUX0NPREVfUExMX0FOQUxPR19QUk9HOworCQl0ZXN0X2RhdGEgPSAw eDAxOworCQl0ZXN0X21vZGVfc2VuZChrbWIsIGRwaHlfbm8sIHRlc3RfY29kZSwgdGVzdF9kYXRh KTsKKworCQkvKiBQTEwgUGFyYW1ldGVycyBTZXR1cCAqLworCQltaXBpX3R4X3BsbF9zZXR1cChr bWIsIGRwaHlfbm8sIGNmZy0+cmVmX2Nsa19raHogLyAxMDAwLAorCQkJCSAgY2ZnLT5sYW5lX3Jh dGVfbWJwcyAvIDIpOworCisJCS8qIFNldCBjbGtzZWwgKi8KKwkJa21iX3dyaXRlX2JpdHNfbWlw aShrbWIsIERQSFlfSU5JVF9DVFJMMSwKKwkJCQkgICAgUExMX0NMS1NFTF8wLCAyLCAweDAxKTsK KworCQkvKiBTZXQgcGxsX3NoYWRvd19jb250cm9sICovCisJCWttYl9zZXRfYml0X21pcGkoa21i LCBEUEhZX0lOSVRfQ1RSTDEsIFBMTF9TSEFET1dfQ1RSTCk7CisKKwkJZHJtX2RiZygma21iLT5k cm0sICJEUEhZX0lOSVRfQ1RSTDEgPSAweCV4XG4iLAorCQkJIGttYl9yZWFkX21pcGkoa21iLCBE UEhZX0lOSVRfQ1RSTDEpKTsKKwl9CisKKwlkcm1fZGJnKCZrbWItPmRybSwgIk1JUElfRFBIWV9T VEFUMF80XzcgPSAweCV4KVxuIiwKKwkJICBrbWJfcmVhZF9taXBpKGttYiwgTUlQSV9EUEhZX1NU QVQ0XzcpKTsKKworLy8jZGVmaW5lIE1JUElfVFhfRk9SQ0VfVk9ECisjaWZkZWYgTUlQSV9UWF9G T1JDRV9WT0QKKyNkZWZpbmUgTUlQSV9UWF9WT0RfTFZMCTQ1MAorI2RlZmluZSBURVNUX0NPREVf QkFOREdBUCAweDI0CisJLyogU2V0IGJhbmRnYXAvVk9EIGxldmVsICovCisJc3dpdGNoIChNSVBJ X1RYX1ZPRF9MVkwpIHsKKwljYXNlIDIwMDoKKwkJdGVzdF9kYXRhID0gMHgwMDsKKwkJYnJlYWs7 CisJY2FzZSAzMDA6CisJCXRlc3RfZGF0YSA9IDB4MjA7CisJCWJyZWFrOworCWNhc2UgMzUwOgor CQl0ZXN0X2RhdGEgPSAweDQwOworCQlicmVhazsKKwljYXNlIDQ1MDoKKwkJdGVzdF9kYXRhID0g MHg2MDsKKwkJYnJlYWs7CisJY2FzZSA0MDA6CisJZGVmYXVsdDoKKwkJdGVzdF9kYXRhID0gMHg3 MDsKKwkJYnJlYWs7CisJfQorCXRlc3RfbW9kZV9zZW5kKGttYiwgZHBoeV9ubywgVEVTVF9DT0RF X0JBTkRHQVAsIHRlc3RfZGF0YSk7CisjZW5kaWYKKworCS8qIFNlbmQgTk9STUFMIE9QRVJBVElP TiB0ZXN0IGNvZGUgKi8KKwl0ZXN0X2NvZGUgPSAweDA7CisJdGVzdF9kYXRhID0gMHgwOworCXRl c3RfbW9kZV9zZW5kKGttYiwgZHBoeV9ubywgdGVzdF9jb2RlLCB0ZXN0X2RhdGEpOworCisJLyog Q29uZmlndXJlIEJBU0VESVIgZm9yIGRhdGEgbGFuZXMKKwkgKiBOT1RFOiBiYXNlZGlyIG9ubHkg YXBwbGllcyB0byBMQU5FXzAgb2YgZWFjaCBELVBIWS4KKwkgKiBUaGUgb3RoZXIgbGFuZXMga2Vl cCB0aGVpciBkaXJlY3Rpb24gYmFzZWQgb24gdGhlIEQtUEhZIHR5cGUsCisJICogZWl0aGVyIFJ4 IG9yIFR4LgorCSAqIGJpdHNbNTowXSAgLSBCYXNlRGlyOiAxID0gUngKKwkgKiBiaXRzWzk6Nl0g LSBCYXNlRGlyOiAwID0gVHgKKwkgKi8KKwlkcm1fZGJnKCZrbWItPmRybSwgIk1JUElfRFBIWV9T VEFUMF80XzcgPSAweCV4KVxuIiwKKwkJICBrbWJfcmVhZF9taXBpKGttYiwgTUlQSV9EUEhZX1NU QVQ0XzcpKTsKKworCWttYl93cml0ZV9iaXRzX21pcGkoa21iLCBEUEhZX0lOSVRfQ1RSTDIsIDAs IDksIDB4MDNmKTsKKwluZGVsYXkoMTUpOworCisJLyogRW5hYmxlIENMT0NLIExBTkUKKwkgKiBD bG9jayBsYW5lIHNob3VsZCBiZSBlbmFibGVkIHJlZ2FyZGxlc3Mgb2YgdGhlIGRpcmVjdGlvbgor CSAqIHNldCBmb3IgdGhlIEQtUEhZIChSeC9UeCkKKwkgKi8KKwlrbWJfc2V0X2JpdF9taXBpKGtt YiwgRFBIWV9JTklUX0NUUkwyLCAxMiArIGRwaHlfbm8pOworCisJZHJtX2RiZygma21iLT5kcm0s ICJEUEhZX0lOSVRfQ1RSTDIgPSAweCV4XG4iLAorCQkga21iX3JlYWRfbWlwaShrbWIsIERQSFlf SU5JVF9DVFJMMikpOworCisJLyogRW5hYmxlIERBVEEgTEFORVMgKi8KKwlrbWJfd3JpdGVfYml0 c19taXBpKGttYiwgRFBIWV9FTkFCTEUsIGRwaHlfbm8gKiAyLCAyLAorCQkJICAgICgoMSA8PCBh Y3RpdmVfbGFuZXMpIC0gMSkpOworCisJZHJtX2RiZygma21iLT5kcm0sCisJCSJEUEhZX0VOQUJM RSA9IDB4JXhcbiIsIGttYl9yZWFkX21pcGkoa21iLCBEUEhZX0VOQUJMRSkpOworCW5kZWxheSgx NSk7CisKKwkvKiBUYWtlIEQtUEhZIG91dCBvZiBzaHV0ZG93biBtb2RlICovCisJLyogRGVhc3Nl cnQgU0hVVERPV05aIHNpZ25hbCAqLworCWRybV9kYmcoJmttYi0+ZHJtLCAiTUlQSV9EUEhZX1NU QVQwXzRfNyA9IDB4JXgpXG4iLAorCQkga21iX3JlYWRfbWlwaShrbWIsIE1JUElfRFBIWV9TVEFU NF83KSk7CisJU0VUX0RQSFlfSU5JVF9DVFJMMChrbWIsIGRwaHlfbm8sIFNIVVRET1dOWik7CisJ bmRlbGF5KDE1KTsKKworCS8qIERlYXNzZXJ0IFJTVFogc2lnbmFsICovCisJU0VUX0RQSFlfSU5J VF9DVFJMMChrbWIsIGRwaHlfbm8sIFJFU0VUWik7CisJZHJtX2RiZygma21iLT5kcm0sICJEUEhZ X0lOSVRfQ1RSTDAgPSAweCV4XG4iLAorCQkga21iX3JlYWRfbWlwaShrbWIsIERQSFlfSU5JVF9D VFJMMCkpOworfQorCitzdGF0aWMgdm9pZCBkcGh5X3dhaXRfZnNtKHN0cnVjdCBrbWJfZHJtX3By aXZhdGUgKmttYiwgdTMyIGRwaHlfbm8sCisJCQkgIGVudW0gZHBoeV90eF9mc20gZnNtX3N0YXRl KQoreworCWVudW0gZHBoeV90eF9mc20gdmFsID0gRFBIWV9UWF9QT1dFUkRXTjsKKwlpbnQgaSA9 IDA7CisJaW50IHN0YXR1cyA9IDE7CisKKwlkbyB7CisJCXRlc3RfbW9kZV9zZW5kKGttYiwgZHBo eV9ubywgVEVTVF9DT0RFX0ZTTV9DT05UUk9MLCAweDgwKTsKKworCQl2YWwgPSBHRVRfVEVTVF9E T1VUNF83KGttYiwgZHBoeV9ubyk7CisJCWkrKzsKKwkJaWYgKGkgPiBUSU1FT1VUKSB7CisJCQlz dGF0dXMgPSAwOworCQkJYnJlYWs7CisJCX0KKwl9IHdoaWxlICh2YWwgIT0gZnNtX3N0YXRlKTsK KworCWRybV9kYmcoJmttYi0+ZHJtLCAiJXM6IGRwaHkgJWQgdmFsID0gJXhcbiIsIF9fZnVuY19f LCBkcGh5X25vLCB2YWwpOworCWRybV9pbmZvKCZrbWItPmRybSwgIioqKioqKioqKiogRFBIWSAl ZCBXQUlUX0ZTTSAlcyAqKioqKioqKioqXG4iLAorCQkgZHBoeV9ubywgc3RhdHVzID8gIlNVQ0NF U1MiIDogIkZBSUxFRCIpOworfQorCitzdGF0aWMgdm9pZCB3YWl0X2luaXRfZG9uZShzdHJ1Y3Qg a21iX2RybV9wcml2YXRlICprbWIsIHUzMiBkcGh5X25vLAorCQkJICAgdTMyIGFjdGl2ZV9sYW5l cykKK3sKKwl1MzIgc3RvcHN0YXRlZGF0YSA9IDA7CisJdTMyIGRhdGFfbGFuZXMgPSAoMSA8PCBh Y3RpdmVfbGFuZXMpIC0gMTsKKwlpbnQgaSA9IDAsIHZhbDsKKwlpbnQgc3RhdHVzID0gMTsKKwor CWRybV9kYmcoJmttYi0+ZHJtLCAiZHBoeT0lZCBhY3RpdmVfbGFuZXM9JWQgZGF0YV9sYW5lcz0l ZFxuIiwgZHBoeV9ubywKKwkJIGFjdGl2ZV9sYW5lcywgZGF0YV9sYW5lcyk7CisKKwlkbyB7CisJ CXZhbCA9IGttYl9yZWFkX21pcGkoa21iLCBNSVBJX0RQSFlfU1RBVDRfNyk7CisJCXN0b3BzdGF0 ZWRhdGEgPSBHRVRfU1RPUFNUQVRFX0RBVEEoa21iLCBkcGh5X25vKSAmIGRhdGFfbGFuZXM7CisK KwkJLyogVE9ETy1uZWVkIHRvIGFkZCBhIHRpbWUgb3V0IGFuZCByZXR1cm4gZmFpbHVyZSAqLwor CQlpKys7CisKKwkJaWYgKGkgPiBUSU1FT1VUKSB7CisJCQlzdGF0dXMgPSAwOworCisJCQlkcm1f aW5mbygma21iLT5kcm0sCisJCQkJIiEgV0FJVF9JTklUX0RPTkU6IFRJTUlORyBPVVQhKGVycl9z dGF0PSVkKSIsCisJCQkJIGttYl9yZWFkX21pcGkoa21iLCBNSVBJX0RQSFlfRVJSX1NUQVQ2Xzcp KTsKKwkJCWRybV9kYmcoJmttYi0+ZHJtLAorCQkJCSJNSVBJX0RQSFlfU1RBVDBfNF83ID0gMHgl eClcbiIsIHZhbCk7CisJCQlkcm1fZGJnKCZrbWItPmRybSwKKwkJCQkic3RvcGRhdGEgPSAweCV4 IGRhdGFfbGFuZXM9MHgleFxuIiwKKwkJCQkgc3RvcHN0YXRlZGF0YSwgZGF0YV9sYW5lcyk7CisK KwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGkgPCAzKSB7CisJCQlkcm1fZGJnKCZrbWItPmRybSwK KwkJCQkic3RvcGRhdGEgPSAweCV4IGRhdGFfbGFuZXM9MHgleFxuIiwKKwkJCQkgc3RvcHN0YXRl ZGF0YSwgZGF0YV9sYW5lcyk7CisJCQlkcm1fZGJnKCZrbWItPmRybSwKKwkJCQkiTUlQSV9EUEhZ X1NUQVQwXzRfNyA9IDB4JXgpXG4iLCB2YWwpOworCQl9CisJfSB3aGlsZSAoc3RvcHN0YXRlZGF0 YSAhPSBkYXRhX2xhbmVzKTsKKworCWRybV9pbmZvKCZrbWItPmRybSwgIioqKioqKioqKiogRFBI WSAlZCBJTklUIC0gJXMgKioqKioqKioqKlxuIiwKKwkJIGRwaHlfbm8sIHN0YXR1cyA/ICJTVUND RVNTIiA6ICJGQUlMRUQiKTsKK30KKworc3RhdGljIHZvaWQgd2FpdF9wbGxfbG9jayhzdHJ1Y3Qg a21iX2RybV9wcml2YXRlICprbWIsIHUzMiBkcGh5X25vKQoreworCWludCBpID0gMDsKKwlpbnQg c3RhdHVzID0gMTsKKworCWRvIHsKKwkJLyogVE9ETy1uZWVkIHRvIGFkZCBhIHRpbWUgb3V0IGFu ZCByZXR1cm4gZmFpbHVyZSAqLworCQlpKys7CisJCWlmIChpID4gVElNRU9VVCkgeworCQkJc3Rh dHVzID0gMDsKKworCQkJZHJtX2luZm8oJmttYi0+ZHJtLCAiJXM6IHRpbWluZyBvdXQiLCBfX2Z1 bmNfXyk7CisJCQlkcm1fZGJnKCZrbWItPmRybSwKKwkJCQkiJXMgOiBQTExfTE9DSyA9IDB4JXgg IiwgX19mdW5jX18sCisJCQkJa21iX3JlYWRfbWlwaShrbWIsIERQSFlfUExMX0xPQ0spKTsKKwor CQkJYnJlYWs7CisJCX0KKworCQlpZiAoKGkgJSAxMDApID09IDApCisJCQlkcm1fZGJnKCZrbWIt PmRybSwKKwkJCQkiJXMgOiBQTExfTE9DSyA9IDB4JXhcbiIsIF9fZnVuY19fLAorCQkJCWttYl9y ZWFkX21pcGkoa21iLCBEUEhZX1BMTF9MT0NLKSk7CisJfSB3aGlsZSAoIUdFVF9QTExfTE9DSyhr bWIsIGRwaHlfbm8pKTsKKworCWRybV9pbmZvKCZrbWItPmRybSwgIioqKioqIFBMTCBMb2NrZWQg Zm9yIERQSFkgJWQgLSAlcyAqKioqKlxuIiwKKwkJIGRwaHlfbm8sIHN0YXR1cyA/ICJTVUNDRVNT IiA6ICJGQUlMRUQiKTsKK30KKworc3RhdGljIHUzMiBtaXBpX3R4X2luaXRfZHBoeShzdHJ1Y3Qg a21iX2RybV9wcml2YXRlICprbWIsCisJCQkgICAgIHN0cnVjdCBtaXBpX2N0cmxfY2ZnICpjZmcp Cit7CisJdTMyIGRwaHlfbm8gPSBNSVBJX0RQSFk2OworCisJZHJtX2luZm8oJmttYi0+ZHJtLAor CQkiYWN0aXZlX2xhbmVzPSVkIGxhbmVfcmF0ZT0lZFxuIiwgY2ZnLT5hY3RpdmVfbGFuZXMsCisJ CU1JUElfVFhfTEFORV9EQVRBX1JBVEVfTUJQUyk7CisKKwkvKiBNdWx0aXBsZSBELVBIWXMgbmVl ZGVkICovCisJaWYgKGNmZy0+YWN0aXZlX2xhbmVzID4gTUlQSV9EUEhZX0RfTEFORVMpIHsKKwkJ LyoKKwkJICpJbml0aWFsaXphdGlvbiBmb3IgVHggYWdncmVnYXRpb24gbW9kZSBpcyBkb25lIGFj Y29yZGluZyB0bworCQkgKmEuIHN0YXJ0IGluaXQgUEhZMQorCQkgKmIuIHBvbGwgZm9yIFBIWTEg RlNNIHN0YXRlIExPQ0sKKwkJICogICBiMS4gcmVnIGFkZHIgMHgwM1szOjBdIC0gc3RhdGVfbWFp blszOjBdID09IDUgKExPQ0spCisJCSAqYy4gcG9sbCBmb3IgUEhZMSBjYWxpYnJhdGlvbnMgZG9u ZSA6CisJCSAqICAgYzEuIHRlcm1pbmF0aW9uIGNhbGlicmF0aW9uIGxvd2VyIHNlY3Rpb246IGFk ZHIgMHgyMls1XQorCQkgKiAgIC0gcmVzY2FsX2RvbmUKKwkJICogICBjMi4gc2xld3JhdGUgY2Fs aWJyYXRpb24gKGlmIGRhdGEgcmF0ZSA8ID0gMTUwMCBNYnBzKToKKwkJICogICAgIGFkZHIgMHhB N1szOjJdIC0gc3JjYWxfZG9uZSwgc3JfZmluaXNoZWQKKwkJICpkLiBzdGFydCBpbml0IFBIWTAK KwkJICplLiBwb2xsIGZvciBQSFkwIHN0b3BzdGF0ZQorCQkgKmYuIHBvbGwgZm9yIFBIWTEgc3Rv cHN0YXRlCisJCSAqLworCQkvKiBQSFkgI04rMSAoJ3NsYXZlJykgKi8KKworCQlkcGh5X2luaXRf c2VxdWVuY2Uoa21iLCBjZmcsIGRwaHlfbm8gKyAxLAorCQkJCSAgIChjZmctPmFjdGl2ZV9sYW5l cyAtIE1JUElfRFBIWV9EX0xBTkVTKSwKKwkJCQkgICBNSVBJX0RQSFlfU0xBVkUpOworCQlkcGh5 X3dhaXRfZnNtKGttYiwgZHBoeV9ubyArIDEsIERQSFlfVFhfTE9DSyk7CisKKwkJLyogUEhZICNO IG1hc3RlciAqLworCQlkcGh5X2luaXRfc2VxdWVuY2Uoa21iLCBjZmcsIGRwaHlfbm8sIE1JUElf RFBIWV9EX0xBTkVTLAorCQkJCSAgIE1JUElfRFBIWV9NQVNURVIpOworCisJCS8qIFdhaXQgZm9y IERQSFkgaW5pdCB0byBjb21wbGV0ZSAqLworCQl3YWl0X2luaXRfZG9uZShrbWIsIGRwaHlfbm8s IE1JUElfRFBIWV9EX0xBTkVTKTsKKwkJd2FpdF9pbml0X2RvbmUoa21iLCBkcGh5X25vICsgMSwK KwkJCSAgICAgICBjZmctPmFjdGl2ZV9sYW5lcyAtIE1JUElfRFBIWV9EX0xBTkVTKTsKKwkJd2Fp dF9wbGxfbG9jayhrbWIsIGRwaHlfbm8pOworCQl3YWl0X3BsbF9sb2NrKGttYiwgZHBoeV9ubyAr IDEpOworCQlkcGh5X3dhaXRfZnNtKGttYiwgZHBoeV9ubywgRFBIWV9UWF9JRExFKTsKKwl9IGVs c2UgewkJLyogU2luZ2xlIERQSFkgKi8KKwkJZHBoeV9pbml0X3NlcXVlbmNlKGttYiwgY2ZnLCBk cGh5X25vLCBjZmctPmFjdGl2ZV9sYW5lcywKKwkJCQkgICBNSVBJX0RQSFlfTUFTVEVSKTsKKwkJ ZHBoeV93YWl0X2ZzbShrbWIsIGRwaHlfbm8sIERQSFlfVFhfSURMRSk7CisJCXdhaXRfaW5pdF9k b25lKGttYiwgZHBoeV9ubywgY2ZnLT5hY3RpdmVfbGFuZXMpOworCQl3YWl0X3BsbF9sb2NrKGtt YiwgZHBoeV9ubyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgY29ubmVjdF9sY2RfdG9f bWlwaShzdHJ1Y3Qga21iX2RybV9wcml2YXRlICprbWIpCit7CisJLyogRElTQUJMRSBNSVBJLT5D SUYgQ09OTkVDVElPTiAqLworCWttYl93cml0ZV9tc3NjYW0oa21iLCBNU1NfTUlQSV9DSUZfQ0ZH LCAwKTsKKworCS8qIEVOQUJMRSBMQ0QtPk1JUEkgQ09OTkVDVElPTiAqLworCWttYl93cml0ZV9t c3NjYW0oa21iLCBNU1NfTENEX01JUElfQ0ZHLCAxKTsKKworCS8qIERJU0FCTEUgTENELT5DSUYg TE9PUEJBQ0sgKi8KKwlrbWJfd3JpdGVfbXNzY2FtKGttYiwgTVNTX0xPT1BCQUNLX0NGRywgMCk7 Cit9CisKK2ludCBrbWJfZHNpX2h3X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqa21i ID0gdG9fa21iKGRldik7CisJdTY0IGRhdGFfcmF0ZTsKKworCW1pcGlfdHhfaW5pdF9jZmcuYWN0 aXZlX2xhbmVzID0gTUlQSV9UWF9BQ1RJVkVfTEFORVM7CisKKwlpZiAobW9kZSAhPSBOVUxMKSB7 CisJCW1pcGlfdHhfZnJhbWUwX3NlY3RfY2ZnLndpZHRoX3BpeGVscyA9IG1vZGUtPmNydGNfaGRp c3BsYXk7CisJCW1pcGlfdHhfZnJhbWUwX3NlY3RfY2ZnLmhlaWdodF9saW5lcyA9IG1vZGUtPmNy dGNfdmRpc3BsYXk7CisJCW1pcGl0eF9mcmFtZTBfY2ZnLnZzeW5jX3dpZHRoID0KKwkJICAgIG1v ZGUtPmNydGNfdnN5bmNfZW5kIC0gbW9kZS0+Y3J0Y192c3luY19zdGFydDsKKwkJbWlwaXR4X2Zy YW1lMF9jZmcudl9iYWNrcG9yY2ggPQorCQkgICAgbW9kZS0+Y3J0Y192dG90YWwgLSBtb2RlLT5j cnRjX3ZzeW5jX2VuZDsKKwkJbWlwaXR4X2ZyYW1lMF9jZmcudl9mcm9udHBvcmNoID0KKwkJICAg IG1vZGUtPmNydGNfdnN5bmNfc3RhcnQgLSBtb2RlLT5jcnRjX3ZkaXNwbGF5OworCQltaXBpdHhf ZnJhbWUwX2NmZy5oc3luY193aWR0aCA9CisJCSAgICBtb2RlLT5jcnRjX2hzeW5jX2VuZCAtIG1v ZGUtPmNydGNfaHN5bmNfc3RhcnQ7CisJCW1pcGl0eF9mcmFtZTBfY2ZnLmhfYmFja3BvcmNoID0K KwkJICAgIG1vZGUtPmNydGNfaHRvdGFsIC0gbW9kZS0+Y3J0Y19oc3luY19lbmQ7CisJCW1pcGl0 eF9mcmFtZTBfY2ZnLmhfZnJvbnRwb3JjaCA9CisJCSAgICBtb2RlLT5jcnRjX2hzeW5jX3N0YXJ0 IC0gbW9kZS0+Y3J0Y19oZGlzcGxheTsKKworCQkvKiBMYW5lIHJhdGUgPSAodnRvdGFsKmh0b3Rh bCpmcHMqYnBwKS80IC8gMTAwMDAwMAorCQkgKiB0byBjb252ZXJ0IHRvIE1icHMKKwkJICovCisJ CWRhdGFfcmF0ZSA9ICgoKCh1MzIpIG1vZGUtPmNydGNfdnRvdGFsICoKKwkJCQkodTMyKSBtb2Rl LT5jcnRjX2h0b3RhbCkgKgorCQkJCSh1MzIpKGRybV9tb2RlX3ZyZWZyZXNoKG1vZGUpKSAqCisJ CQkgICAgICBNSVBJX1RYX0JQUCkgLyBtaXBpX3R4X2luaXRfY2ZnLmFjdGl2ZV9sYW5lcykgLwor CQkgICAgMTAwMDAwMDsKKworCQlkcm1faW5mbygma21iLT5kcm0sICJodG90YWw9JWQgdnRvdGFs PSVkIHJlZnJlc2g9JWRcbiIsCisJCQkgbW9kZS0+Y3J0Y19odG90YWwsIG1vZGUtPmNydGNfdnRv dGFsLAorCQkJIGRybV9tb2RlX3ZyZWZyZXNoKG1vZGUpKTsKKwkJZHJtX2luZm8oJmttYi0+ZHJt LCAiZGF0YV9yYXRlPSV1IGFjdGl2ZV9sYW5lcz0lZFxuIiwKKwkJCSAodTMyKSBkYXRhX3JhdGUs IG1pcGlfdHhfaW5pdF9jZmcuYWN0aXZlX2xhbmVzKTsKKworCQkvKiBXaGVuIGxhdGUgcmF0ZSA8 IDgwMCwgbW9kZXNldCBmYWlscyB3aXRoIDQgbGFuZXMsCisJCSAqIHNvIHN3aXRjaCB0byAyIGxh bmVzCisJCSAqLworCQlpZiAoZGF0YV9yYXRlIDwgODAwKSB7CisJCQltaXBpX3R4X2luaXRfY2Zn LmFjdGl2ZV9sYW5lcyA9IDI7CisJCQltaXBpX3R4X2luaXRfY2ZnLmxhbmVfcmF0ZV9tYnBzID0g ZGF0YV9yYXRlICogMjsKKwkJfSBlbHNlIHsKKwkJCW1pcGlfdHhfaW5pdF9jZmcubGFuZV9yYXRl X21icHMgPSBkYXRhX3JhdGU7CisJCX0KKwkJZHJtX2luZm8oJmttYi0+ZHJtLAorCQkJImxhbmUg cmF0ZT0lZFxuIiwgbWlwaV90eF9pbml0X2NmZy5sYW5lX3JhdGVfbWJwcyk7CisJCWRybV9kYmco JmttYi0+ZHJtLAorCQkgICAgICJ2ZnA9ICVkIHZicD0gJWQgdnN5Y19sZW49JWQgaGZwPSVkIGhi cD0lZCBoc3luY19sZW49JWQgbGFuZS1yYXRlPSVkIiwKKwkJICAgICBtaXBpdHhfZnJhbWUwX2Nm Zy52X2Zyb250cG9yY2gsCisJCSAgICAgbWlwaXR4X2ZyYW1lMF9jZmcudl9iYWNrcG9yY2gsCisJ CSAgICAgbWlwaXR4X2ZyYW1lMF9jZmcudnN5bmNfd2lkdGgsCisJCSAgICAgbWlwaXR4X2ZyYW1l MF9jZmcuaF9mcm9udHBvcmNoLAorCQkgICAgIG1pcGl0eF9mcmFtZTBfY2ZnLmhfYmFja3BvcmNo LAorCQkgICAgIG1pcGl0eF9mcmFtZTBfY2ZnLmhzeW5jX3dpZHRoLAorCQkgICAgIG1pcGlfdHhf aW5pdF9jZmcubGFuZV9yYXRlX21icHMpOworCisJfQorCisJaWYgKGh3X2luaXRpYWxpemVkKQor CQlyZXR1cm4gMDsKKworCWttYl93cml0ZV9taXBpKGttYiwgRFBIWV9FTkFCTEUsIDApOworCWtt Yl93cml0ZV9taXBpKGttYiwgRFBIWV9JTklUX0NUUkwwLCAwKTsKKwlrbWJfd3JpdGVfbWlwaShr bWIsIERQSFlfSU5JVF9DVFJMMSwgMCk7CisJa21iX3dyaXRlX21pcGkoa21iLCBEUEhZX0lOSVRf Q1RSTDIsIDApOworCisJLyogSW5pdGlhbGl6ZSBtaXBpIGNvbnRyb2xsZXIgKi8KKwltaXBpX3R4 X2luaXRfY250cmwoa21iLCAmbWlwaV90eF9pbml0X2NmZyk7CisKKwkvKiBEcGh5IGluaXRpYWxp emF0aW9uICovCisJbWlwaV90eF9pbml0X2RwaHkoa21iLCAmbWlwaV90eF9pbml0X2NmZyk7CisJ ZHJtX2RiZygma21iLT5kcm0sICJJUlFfU1RBVFVTID0gMHgleFxuIiwKKwkJIEdFVF9NSVBJX1RY X0hTX0lSUV9TVEFUVVMoa21iLCBNSVBJX0NUUkw2KSk7CisKKwljb25uZWN0X2xjZF90b19taXBp KGttYik7CisKKyNpZmRlZiBNSVBJX1RYX1RFU1RfUEFUVEVSTl9HRU5FUkFUSU9OCisJbWlwaV90 eF9oc190cF9nZW4oa21iLCAwLCBNSVBJX1RYX0hTX1RQX1ZfU1RSSVBFUywKKwkJCSAgMHgxNSwg MHhmZiwgMHhmZjAwLCBNSVBJX0NUUkw2KTsKKworCWRybV9kYmcoJmttYi0+ZHJtLCAiSVJRX1NU QVRVUyA9IDB4JXhcbiIsCisJCSBHRVRfTUlQSV9UWF9IU19JUlFfU1RBVFVTKGttYiwgTUlQSV9D VFJMNikpOworI2VuZGlmIC8vTUlQSV9UWF9URVNUX1BBVFRFUk5fR0VORVJBVElPTgorCisJaHdf aW5pdGlhbGl6ZWQgPSB0cnVlOworCisJZHJtX2RiZygma21iLT5kcm0sICJNSVBJX1RYbV9IU19D VFJMID0gMHgleFxuIiwKKwkJIGttYl9yZWFkX21pcGkoa21iLCBNSVBJX1RYbV9IU19DVFJMKDYp KSk7CisJZHJtX2RiZygma21iLT5kcm0sICJNSVBJIExPT1AgQkFDSyA9ICV4XG4iLAorCQkga21i X3JlYWRfbWlwaShrbWIsIE1JUElfQ1RSTF9ESUdfTE9PUEJBQ0spKTsKKwlkcm1faW5mbygma21i LT5kcm0sICJtaXBpIGh3X2luaXRpYWxpemVkID0gJWRcbiIsIGh3X2luaXRpYWxpemVkKTsKKwor CXJldHVybiAwOworfQorCitpbnQga21iX2RzaV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs IHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCit7CisJc3RydWN0IGttYl9kc2kgKmttYl9kc2k7 CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOworCXN0cnVjdCBrbWJfY29ubmVjdG9yICpr bWJfY29ubmVjdG9yOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJc3RydWN0 IGttYl9kc2lfaG9zdCAqaG9zdDsKKwlpbnQgcmV0ID0gMDsKKworCWttYl9kc2kgPSBremFsbG9j KHNpemVvZigqa21iX2RzaSksIEdGUF9LRVJORUwpOworCWlmICgha21iX2RzaSkgeworCQlEUk1f RVJST1IoImZhaWxlZCB0byBhbGxvY2F0ZSBrbWJfZHNpXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07 CisJfQorCisJa21iX2Nvbm5lY3RvciA9IGt6YWxsb2Moc2l6ZW9mKCprbWJfY29ubmVjdG9yKSwg R0ZQX0tFUk5FTCk7CisJaWYgKCFrbWJfY29ubmVjdG9yKSB7CisJCWtmcmVlKGttYl9kc2kpOwor CQlEUk1fRVJST1IoImZhaWxlZCB0byBhbGxvY2F0ZSBrbWJfY29ubmVjdG9yXG4iKTsKKwkJcmV0 dXJuIC1FTk9NRU07CisJfQorCisJa21iX2RzaS0+YXR0YWNoZWRfY29ubmVjdG9yID0ga21iX2Nv bm5lY3RvcjsKKworCWhvc3QgPSBrbWJfZHNpX2hvc3RfaW5pdChkZXYsIGttYl9kc2kpOworCWlm ICghaG9zdCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBob3N0XG4iKTsKKwkJ a2ZyZWUoa21iX2RzaSk7CisJCWtmcmVlKGttYl9jb25uZWN0b3IpOworCQlyZXR1cm4gLUVOT01F TTsKKwl9CisKKwlrbWJfZHNpLT5kc2lfaG9zdCA9IGhvc3Q7CisJY29ubmVjdG9yID0gJmttYl9j b25uZWN0b3ItPmJhc2U7CisJZW5jb2RlciA9ICZrbWJfZHNpLT5iYXNlOworCWVuY29kZXItPnBv c3NpYmxlX2NydGNzID0gMTsKKwllbmNvZGVyLT5wb3NzaWJsZV9jbG9uZXMgPSAwOworCisJZHJt X2VuY29kZXJfaW5pdChkZXYsIGVuY29kZXIsICZrbWJfZHNpX2Z1bmNzLCBEUk1fTU9ERV9FTkNP REVSX0RTSSwKKwkJCSAiTUlQSS1EU0kiKTsKKworCWRybV9jb25uZWN0b3JfaW5pdChkZXYsIGNv bm5lY3RvciwgJmttYl9kc2lfY29ubmVjdG9yX2Z1bmNzLAorCQkJICAgRFJNX01PREVfQ09OTkVD VE9SX0RTSSk7CisKKwlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoY29ubmVjdG9yLCAma21iX2Rz aV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKworCWRybV9pbmZvKGRldiwgImNvbm5lY3RvciA9 ICVzIGVuY29kZXIgPSAlc1xuIiwgY29ubmVjdG9yLT5uYW1lLAorCQkgZW5jb2Rlci0+bmFtZSk7 CisKKwlyZXQgPSBkcm1fY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKGNvbm5lY3RvciwgZW5jb2Rl cik7CisJZHJtX2luZm8oZGV2LCAiY29ubmVjdG9yLT5lbmNvZGVyID0gMHglcCByZXQgPSAlZFxu IiwKKwkJIGNvbm5lY3Rvci0+ZW5jb2RlciwKKwkJIHJldCk7CisKKwkvKiBMaW5rIGRybV9icmlk Z2UgdG8gZW5jb2RlciAqLworCXJldCA9IGRybV9icmlkZ2VfYXR0YWNoKGVuY29kZXIsIGJyaWRn ZSwgTlVMTCwgMCk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBhdHRhY2gg YnJpZGdlIHRvIE1JUElcbiIpOworCQlkcm1fZW5jb2Rlcl9jbGVhbnVwKGVuY29kZXIpOworCQly ZXR1cm4gcmV0OworCX0KKwlkcm1faW5mbyhkZXYsICJCcmlkZ2UgYXR0YWNoZWQgOiBTVUNDRVNT XG4iKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9rbWIva21i X2RzaS5oIGIvZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfZHNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uZDJiZWFmNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9rbWIva21iX2RzaS5oCkBAIC0wLDAgKzEsMzcwIEBACisvKiBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMC1vbmx5CisgKgorICogQ29weXJpZ2h0IMKpIDIwMTktMjAyMCBJbnRl bCBDb3Jwb3JhdGlvbgorICovCisKKyNpZm5kZWYgX19LTUJfRFNJX0hfXworI2RlZmluZSBfX0tN Ql9EU0lfSF9fCisKKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KKyNpbmNsdWRlIDxkcm0vZHJt X21pcGlfZHNpLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9tb2Rlcy5oPgorI2luY2x1ZGUgImttYl9k cnYuaCIKKworLyogTUlQSSBUWCBDRkcqLworI2RlZmluZSBNSVBJX1RYX0xBTkVfREFUQV9SQVRF X01CUFMgODkxCisjZGVmaW5lIE1JUElfVFhfUkVGX0NMS19LSFogICAgICAgICAyNDAwMAorI2Rl ZmluZSBNSVBJX1RYX0NGR19DTEtfS0haICAgICAgICAgMjQwMDAKKyNkZWZpbmUgTUlQSV9UWF9C UFAJCSAgICAyNAorCisvKiBEUEhZIFR4IHRlc3QgY29kZXMqLworI2RlZmluZSBURVNUX0NPREVf RlNNX0NPTlRST0wJCQkJMHgwMworI2RlZmluZSBURVNUX0NPREVfTVVMVElQTEVfUEhZX0NUUkwJ CQkweDBDCisjZGVmaW5lIFRFU1RfQ09ERV9QTExfUFJPUE9SVElPTkFMX0NIQVJHRV9QVU1QX0NU UkwJMHgwRQorI2RlZmluZSBURVNUX0NPREVfUExMX0lOVEVHUkFMX0NIQVJHRV9QVU1QX0NUUkwJ CTB4MEYKKyNkZWZpbmUgVEVTVF9DT0RFX1BMTF9WQ09fQ1RSTAkJCQkweDEyCisjZGVmaW5lIFRF U1RfQ09ERV9QTExfR01QX0NUUkwJCQkJMHgxMworI2RlZmluZSBURVNUX0NPREVfUExMX1BIQVNF X0VSUl9DVFJMCQkJMHgxNAorI2RlZmluZSBURVNUX0NPREVfUExMX0xPQ0tfRklMVEVSCQkJMHgx NQorI2RlZmluZSBURVNUX0NPREVfUExMX1VOTE9DS19GSUxURVIJCQkweDE2CisjZGVmaW5lIFRF U1RfQ09ERV9QTExfSU5QVVRfRElWSURFUgkJCTB4MTcKKyNkZWZpbmUgVEVTVF9DT0RFX1BMTF9G RUVEQkFDS19ESVZJREVSCQkJMHgxOAorI2RlZmluZSAgIFBMTF9GRUVEQkFDS19ESVZJREVSX0hJ R0gJCQkoMSA8PCA3KQorI2RlZmluZSBURVNUX0NPREVfUExMX09VVFBVVF9DTEtfU0VMCQkJMHgx OQorI2RlZmluZSAgIFBMTF9OX09WUl9FTgkJCQkJKDEgPDwgNCkKKyNkZWZpbmUgICBQTExfTV9P VlJfRU4JCQkJCSgxIDw8IDUpCisjZGVmaW5lIFRFU1RfQ09ERV9WT0RfTEVWRUwJCQkJMHgyNAor I2RlZmluZSBURVNUX0NPREVfUExMX0NIQVJHRV9QVU1QX0JJQVMJCQkweDFDCisjZGVmaW5lIFRF U1RfQ09ERV9QTExfTE9DS19ERVRFQ1RPUgkJCTB4MUQKKyNkZWZpbmUgVEVTVF9DT0RFX0hTX0ZS RVFfUkFOR0VfQ0ZHCQkJMHg0NAorI2RlZmluZSBURVNUX0NPREVfUExMX0FOQUxPR19QUk9HCQkJ MHgxRgorI2RlZmluZSBURVNUX0NPREVfU0xFV19SQVRFX09WRVJSSURFX0NUUkwJCTB4QTAKKyNk ZWZpbmUgVEVTVF9DT0RFX1NMRVdfUkFURV9ERExfTE9PUF9DVFJMCQkweEEzCisjZGVmaW5lIFRF U1RfQ09ERV9TTEVXX1JBVEVfRERMX0NZQ0xFUwkJCTB4QTQKKworLyogRFBIWSBwYXJhbXMgKi8K KyNkZWZpbmUgUExMX05fTUlOCTAKKyNkZWZpbmUgUExMX05fTUFYCTE1CisjZGVmaW5lIFBMTF9N X01JTgk2MgorI2RlZmluZSBQTExfTV9NQVgJNjIzCisjZGVmaW5lIFBMTF9GVkNPX01BWAkxMjUw CisKKyNkZWZpbmUgVElNRU9VVAkJNjAwCisKKyNkZWZpbmUgTUlQSV9UWF9GUkFNRV9HRU4JCQkJ NAorI2RlZmluZSBNSVBJX1RYX0ZSQU1FX0dFTl9TRUNUSU9OUwkJCTQKKyNkZWZpbmUgTUlQSV9D VFJMX1ZJUlRVQUxfQ0hBTk5FTFMJCQk0CisjZGVmaW5lIE1JUElfRF9MQU5FU19QRVJfRFBIWQkJ CQkyCisjZGVmaW5lIE1JUElfQ1RSTF8yTEFORV9NQVhfTUNfRklGT19MT0MJCQkyNTUKKyNkZWZp bmUgTUlQSV9DVFJMXzRMQU5FX01BWF9NQ19GSUZPX0xPQwkJCTUxMQorLyogMiBEYXRhIExhbmVz IHBlciBELVBIWSAqLworI2RlZmluZSBNSVBJX0RQSFlfRF9MQU5FUwkJCQkyCisjZGVmaW5lIE1J UElfRFBIWV9ERUZBVUxUX0JJVF9SQVRFUwkJCTYzCisKKyNkZWZpbmUgdG9fa21iX2Nvbm5lY3Rv cih4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IGttYl9jb25uZWN0b3IsIGJhc2UpCisjZGVmaW5l IHRvX2ttYl9ob3N0KHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3Qga21iX2RzaV9ob3N0LCBiYXNl KQorI2RlZmluZSB0b19rbWJfZHNpKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3Qga21iX2RzaSwg YmFzZSkKKworc3RydWN0IGttYl9jb25uZWN0b3I7CitzdHJ1Y3Qga21iX2RzaV9ob3N0OworCitz dHJ1Y3Qga21iX2RzaSB7CisJc3RydWN0IGRybV9lbmNvZGVyIGJhc2U7CisJc3RydWN0IGttYl9j b25uZWN0b3IgKmF0dGFjaGVkX2Nvbm5lY3RvcjsKKwlzdHJ1Y3Qga21iX2RzaV9ob3N0ICpkc2lf aG9zdDsKKwlzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlOworfTsKKworc3RydWN0IGttYl9kc2lf aG9zdCB7CisJc3RydWN0IG1pcGlfZHNpX2hvc3QgKmJhc2U7CisJc3RydWN0IGttYl9kc2kgKmtt Yl9kc2k7CisJc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZGV2aWNlOworfTsKKworc3RydWN0IGtt Yl9jb25uZWN0b3IgeworCXN0cnVjdCBkcm1fY29ubmVjdG9yIGJhc2U7CisJc3RydWN0IGRybV9l bmNvZGVyICplbmNvZGVyOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpmaXhlZF9tb2RlOwor fTsKKworLyogRFBIWSBUeCB0ZXN0IGNvZGVzICovCisKK2VudW0gbWlwaV9jdHJsX251bSB7CisJ TUlQSV9DVFJMMCA9IDAsCisJTUlQSV9DVFJMMSwKKwlNSVBJX0NUUkwyLAorCU1JUElfQ1RSTDMs CisJTUlQSV9DVFJMNCwKKwlNSVBJX0NUUkw1LAorCU1JUElfQ1RSTDYsCisJTUlQSV9DVFJMNywK KwlNSVBJX0NUUkw4LAorCU1JUElfQ1RSTDksCisJTUlQSV9DVFJMX05BCit9OworCitlbnVtIG1p cGlfZHBoeV9udW0geworCU1JUElfRFBIWTAgPSAwLAorCU1JUElfRFBIWTEsCisJTUlQSV9EUEhZ MiwKKwlNSVBJX0RQSFkzLAorCU1JUElfRFBIWTQsCisJTUlQSV9EUEhZNSwKKwlNSVBJX0RQSFk2 LAorCU1JUElfRFBIWTcsCisJTUlQSV9EUEhZOCwKKwlNSVBJX0RQSFk5LAorCU1JUElfRFBIWV9O QQorfTsKKworZW51bSBtaXBpX2RpciB7CisJTUlQSV9SWCwKKwlNSVBJX1RYCit9OworCitlbnVt IG1pcGlfY3RybF90eXBlIHsKKwlNSVBJX0RTSSwKKwlNSVBJX0NTSQorfTsKKworZW51bSBtaXBp X2RhdGFfaWYgeworCU1JUElfSUZfRE1BLAorCU1JUElfSUZfUEFSQUxMRUwKK307CisKK2VudW0g bWlwaV9kYXRhX21vZGUgeworCU1JUElfREFUQV9NT0RFMCwKKwlNSVBJX0RBVEFfTU9ERTEsCisJ TUlQSV9EQVRBX01PREUyLAorCU1JUElfREFUQV9NT0RFMworfTsKKworZW51bSBtaXBpX2RzaV92 aWRlb19tb2RlIHsKKwlEU0lfVklERU9fTU9ERV9OT19CVVJTVF9QVUxTRSwKKwlEU0lfVklERU9f TU9ERV9OT19CVVJTVF9FVkVOVCwKKwlEU0lfVklERU9fTU9ERV9CVVJTVAorfTsKKworZW51bSBt aXBpX2RzaV9ibGFua2luZ19tb2RlIHsKKwlUUkFOU0lUSU9OX1RPX0xPV19QT1dFUiwKKwlTRU5E X0JMQU5LX1BBQ0tFVAorfTsKKworZW51bSBtaXBpX2RzaV9lb3RwIHsKKwlEU0lfRU9UUF9ESVNB QkxFRCwKKwlEU0lfRU9UUF9FTkFCTEVTCit9OworCitlbnVtIG1pcGlfZHNpX2RhdGFfdHlwZSB7 CisJRFNJX1NQX0RUX1JFU0VSVkVEXzAwID0gMHgwMCwKKwlEU0lfU1BfRFRfVlNZTkNfU1RBUlQg PSAweDAxLAorCURTSV9TUF9EVF9DT0xPUl9NT0RFX09GRiA9IDB4MDIsCisJRFNJX1NQX0RUX0dF TkVSSUNfU0hPUlRfV1IgPSAweDAzLAorCURTSV9TUF9EVF9HRU5FUklDX1JEID0gMHgwNCwKKwlE U0lfU1BfRFRfRENTX1NIT1JUX1dSID0gMHgwNSwKKwlEU0lfU1BfRFRfRENTX1JEID0gMHgwNiwK KwlEU0lfU1BfRFRfRU9UUCA9IDB4MDgsCisJRFNJX0xQX0RUX05VTEwgPSAweDA5LAorCURTSV9M UF9EVF9SRVNFUlZFRF8wQSA9IDB4MGEsCisJRFNJX0xQX0RUX1JFU0VSVkVEXzBCID0gMHgwYiwK KwlEU0lfTFBfRFRfTFBQU19ZQ0JDUjQyMl8yMEIgPSAweDBjLAorCURTSV9MUF9EVF9QUFNfUkdC MTAxMDEwXzMwQiA9IDB4MGQsCisJRFNJX0xQX0RUX1BQU19SR0I1NjVfMTZCID0gMHgwZSwKKwlE U0lfTFBfRFRfUkVTRVJWRURfMEYgPSAweDBmLAorCisJRFNJX1NQX0RUX1JFU0VSVkVEXzEwID0g MHgxMCwKKwlEU0lfU1BfRFRfVlNZTkNfRU5EID0gMHgxMSwKKwlEU0lfU1BfRFRfQ09MT1JfTU9E RV9PTiA9IDB4MTIsCisJRFNJX1NQX0RUX0dFTkVSSUNfU0hPUlRfV1JfMVBBUiA9IDB4MTMsCisJ RFNJX1NQX0RUX0dFTkVSSUNfUkRfMVBBUiA9IDB4MTQsCisJRFNJX1NQX0RUX0RDU19TSE9SVF9X Ul8xUEFSID0gMHgxNSwKKwlEU0lfU1BfRFRfUkVTRVJWRURfMTYgPSAweDE2LAorCURTSV9TUF9E VF9SRVNFUlZFRF8xNyA9IDB4MTcsCisJRFNJX1NQX0RUX1JFU0VSVkVEXzE4ID0gMHgxOCwKKwlE U0lfTFBfRFRfQkxBTksgPSAweDE5LAorCURTSV9MUF9EVF9SRVNFUlZFRF8xQSA9IDB4MWEsCisJ RFNJX0xQX0RUX1JFU0VSVkVEXzFCID0gMHgxYiwKKwlEU0lfTFBfRFRfUFBTX1lDQkNSNDIyXzI0 QiA9IDB4MWMsCisJRFNJX0xQX0RUX1BQU19SR0IxMjEyMTJfMzZCID0gMHgxZCwKKwlEU0lfTFBf RFRfUFBTX1JHQjY2Nl8xOEIgPSAweDFlLAorCURTSV9MUF9EVF9SRVNFUlZFRF8xRiA9IDB4MWYs CisKKwlEU0lfU1BfRFRfUkVTRVJWRURfMjAgPSAweDIwLAorCURTSV9TUF9EVF9IU1lOQ19TVEFS VCA9IDB4MjEsCisJRFNJX1NQX0RUX1NIVVRfRE9XTl9QRVJJUEhfQ01EID0gMHgyMiwKKwlEU0lf U1BfRFRfR0VORVJJQ19TSE9SVF9XUl8yUEFSID0gMHgyMywKKwlEU0lfU1BfRFRfR0VORVJJQ19S RF8yUEFSID0gMHgyNCwKKwlEU0lfU1BfRFRfUkVTRVJWRURfMjUgPSAweDI1LAorCURTSV9TUF9E VF9SRVNFUlZFRF8yNiA9IDB4MjYsCisJRFNJX1NQX0RUX1JFU0VSVkVEXzI3ID0gMHgyNywKKwlE U0lfU1BfRFRfUkVTRVJWRURfMjggPSAweDI4LAorCURTSV9MUF9EVF9HRU5FUklDX0xPTkdfV1Ig PSAweDI5LAorCURTSV9MUF9EVF9SRVNFUlZFRF8yQSA9IDB4MmEsCisJRFNJX0xQX0RUX1JFU0VS VkVEXzJCID0gMHgyYiwKKwlEU0lfTFBfRFRfUFBTX1lDQkNSNDIyXzE2QiA9IDB4MmMsCisJRFNJ X0xQX0RUX1JFU0VSVkVEXzJEID0gMHgyZCwKKwlEU0lfTFBfRFRfTFBQU19SR0I2NjZfMThCID0g MHgyZSwKKwlEU0lfTFBfRFRfUkVTRVJWRURfMkYgPSAweDJmLAorCisJRFNJX1NQX0RUX1JFU0VS VkVEXzMwID0gMHgzMCwKKwlEU0lfU1BfRFRfSFNZTkNfRU5EID0gMHgzMSwKKwlEU0lfU1BfRFRf VFVSTl9PTl9QRVJJUEhfQ01EID0gMHgzMiwKKwlEU0lfU1BfRFRfUkVTRVJWRURfMzMgPSAweDMz LAorCURTSV9TUF9EVF9SRVNFUlZFRF8zNCA9IDB4MzQsCisJRFNJX1NQX0RUX1JFU0VSVkVEXzM1 ID0gMHgzNSwKKwlEU0lfU1BfRFRfUkVTRVJWRURfMzYgPSAweDM2LAorCURTSV9TUF9EVF9TRVRf TUFYX1JFVFVSTl9QS1RfU0laRSA9IDB4MzcsCisJRFNJX1NQX0RUX1JFU0VSVkVEXzM4ID0gMHgz OCwKKwlEU0lfTFBfRFRfRFNDX0xPTkdfV1IgPSAweDM5LAorCURTSV9MUF9EVF9SRVNFUlZFRF8z QSA9IDB4M2EsCisJRFNJX0xQX0RUX1JFU0VSVkVEXzNCID0gMHgzYiwKKwlEU0lfTFBfRFRfUkVT RVJWRURfM0MgPSAweDNjLAorCURTSV9MUF9EVF9QUFNfWUNCQ1I0MjBfMTJCID0gMHgzZCwKKwlE U0lfTFBfRFRfUFBTX1JHQjg4OF8yNEIgPSAweDNlLAorCURTSV9MUF9EVF9SRVNFUlZFRF8zRiA9 IDB4M2YKK307CisKK2VudW0gbWlwaV90eF9oc190cF9zZWwgeworCU1JUElfVFhfSFNfVFBfV0hP TEVfRlJBTUVfQ09MT1IwID0gMCwKKwlNSVBJX1RYX0hTX1RQX1dIT0xFX0ZSQU1FX0NPTE9SMSwK KwlNSVBJX1RYX0hTX1RQX1ZfU1RSSVBFUywKKwlNSVBJX1RYX0hTX1RQX0hfU1RSSVBFUywKK307 CisKK2VudW0gZHBoeV9tb2RlIHsKKwlNSVBJX0RQSFlfU0xBVkUgPSAwLAorCU1JUElfRFBIWV9N QVNURVIKK307CisKK2VudW0gZHBoeV90eF9mc20geworCURQSFlfVFhfUE9XRVJEV04gPSAwLAor CURQSFlfVFhfQkdQT04sCisJRFBIWV9UWF9URVJNQ0FMLAorCURQSFlfVFhfVEVSTUNBTFVQLAor CURQSFlfVFhfT0ZGU0VUQ0FMLAorCURQSFlfVFhfTE9DSywKKwlEUEhZX1RYX1NSQ0FMLAorCURQ SFlfVFhfSURMRSwKKwlEUEhZX1RYX1VMUCwKKwlEUEhZX1RYX0xBTkVTVEFSVCwKKwlEUEhZX1RY X0NMS0FMSUdOLAorCURQSFlfVFhfRERMVFVOTklORywKKwlEUEhZX1RYX1VMUF9GT1JDRV9QTEws CisJRFBIWV9UWF9MT0NLX0xPU1MKK307CisKK3N0cnVjdCBtaXBpX2RhdGFfdHlwZV9wYXJhbXMg eworCXVpbnQ4X3Qgc2l6ZV9jb25zdHJhaW50X3BpeGVsczsKKwl1aW50OF90IHNpemVfY29uc3Ry YWludF9ieXRlczsKKwl1aW50OF90IHBpeGVsc19wZXJfcGNsazsKKwl1aW50OF90IGJpdHNfcGVy X3BjbGs7Cit9OworCitzdHJ1Y3QgbWlwaV90eF9kc2lfY2ZnIHsKKwl1aW50OF90IGhmcF9ibGFu a19lbjsJLypob3Jpem9udGFsIGZyb250IHBvcmNoIGJsYW5raW5nIGVuYWJsZSAqLworCXVpbnQ4 X3QgZW90cF9lbjsJLypFbmQgb2YgdHJhbnNtaXNzaW9uIHBhY2tldCBlbmFibGUgKi8KKwkvKmxh c3QgdmVydGljYWwgZnJvbnQgcG9yY2ggYmxhbmtpbmcgbW9kZSAqLworCXVpbnQ4X3QgbHBtX2xh c3RfdmZwX2xpbmU7CisJLypmaXJzdCB2ZXJ0aWNhbCBzeW5jIGFjdGl2ZSBibGFua2luZyBtb2Rl ICovCisJdWludDhfdCBscG1fZmlyc3RfdnNhX2xpbmU7CisJdWludDhfdCBzeW5jX3B1bHNlX2V2 ZW50bjsJLypzeW5jIHR5cGUgKi8KKwl1aW50OF90IGhmcF9ibGFua2luZzsJLypob3Jpem9udGFs IGZyb250IHBvcmNoIGJsYW5raW5nIG1vZGUgKi8KKwl1aW50OF90IGhicF9ibGFua2luZzsJLypo b3Jpem9udGFsIGJhY2sgcG9yY2ggYmxhbmtpbmcgbW9kZSAqLworCXVpbnQ4X3QgaHNhX2JsYW5r aW5nOwkvKmhvcml6b250YWwgc3luYyBhY3RpdmUgYmxhbmtpbmcgbW9kZSAqLworCXVpbnQ4X3Qg dl9ibGFua2luZzsJLyp2ZXJ0aWNhbCB0aW1pbmcgYmxhbmtpbmcgbW9kZSAqLworfTsKKworc3Ry dWN0IG1pcGlfdHhfZnJhbWVfc2VjdGlvbl9jZmcgeworCXVpbnQzMl90IGRtYV92X3N0cmlkZTsK Kwl1aW50MTZfdCBkbWFfdl9zY2FsZV9jZmc7CisJdWludDE2X3Qgd2lkdGhfcGl4ZWxzOworCXVp bnQxNl90IGhlaWdodF9saW5lczsKKwl1aW50OF90IGRtYV9wYWNrZWQ7CisJdWludDhfdCBicHA7 CisJdWludDhfdCBicHBfdW5wYWNrZWQ7CisJdWludDhfdCBkbWFfaF9zdHJpZGU7CisJdWludDhf dCBkYXRhX3R5cGU7CisJdWludDhfdCBkYXRhX21vZGU7CisJdWludDhfdCBkbWFfZmxpcF9yb3Rh dGVfc2VsOworfTsKKworc3RydWN0IG1pcGlfdHhfZnJhbWVfdGltaW5nX2NmZyB7CisJdWludDMy X3QgYnBwOworCXVpbnQzMl90IGxhbmVfcmF0ZV9tYnBzOworCXVpbnQzMl90IGhzeW5jX3dpZHRo OworCXVpbnQzMl90IGhfYmFja3BvcmNoOworCXVpbnQzMl90IGhfZnJvbnRwb3JjaDsKKwl1aW50 MzJfdCBoX2FjdGl2ZTsKKwl1aW50MTZfdCB2c3luY193aWR0aDsKKwl1aW50MTZfdCB2X2JhY2tw b3JjaDsKKwl1aW50MTZfdCB2X2Zyb250cG9yY2g7CisJdWludDE2X3Qgdl9hY3RpdmU7CisJdWlu dDhfdCBhY3RpdmVfbGFuZXM7Cit9OworCitzdHJ1Y3QgbWlwaV90eF9mcmFtZV9zZWN0X3BoY2Zn IHsKKwl1aW50MzJfdCB3YzsKKwllbnVtIG1pcGlfZGF0YV9tb2RlIGRhdGFfbW9kZTsKKwllbnVt IG1pcGlfZHNpX2RhdGFfdHlwZSBkYXRhX3R5cGU7CisJdWludDhfdCB2Y2hhbm5lbDsKKwl1aW50 OF90IGRtYV9wYWNrZWQ7Cit9OworCitzdHJ1Y3QgbWlwaV90eF9mcmFtZV9jZmcgeworCXN0cnVj dCBtaXBpX3R4X2ZyYW1lX3NlY3Rpb25fY2ZnICpzZWN0aW9uc1tNSVBJX1RYX0ZSQU1FX0dFTl9T RUNUSU9OU107CisJdWludDMyX3QgaHN5bmNfd2lkdGg7CS8qaW4gcGl4ZWxzICovCisJdWludDMy X3QgaF9iYWNrcG9yY2g7CS8qaW4gcGl4ZWxzICovCisJdWludDMyX3QgaF9mcm9udHBvcmNoOwkv KmluIHBpeGVscyAqLworCXVpbnQxNl90IHZzeW5jX3dpZHRoOwkvKmluIGxpbmVzICovCisJdWlu dDE2X3Qgdl9iYWNrcG9yY2g7CS8qaW4gbGluZXMgKi8KKwl1aW50MTZfdCB2X2Zyb250cG9yY2g7 CS8qaW4gbGluZXMgKi8KK307CisKK3N0cnVjdCBtaXBpX3R4X2N0cmxfY2ZnIHsKKwlzdHJ1Y3Qg bWlwaV90eF9mcmFtZV9jZmcgKmZyYW1lc1tNSVBJX1RYX0ZSQU1FX0dFTl07CisJc3RydWN0IG1p cGlfdHhfZHNpX2NmZyAqdHhfZHNpX2NmZzsKKwl1aW50OF90IGxpbmVfc3luY19wa3RfZW47CisJ dWludDhfdCBsaW5lX2NvdW50ZXJfYWN0aXZlOworCXVpbnQ4X3QgZnJhbWVfY291bnRlcl9hY3Rp dmU7CisJdWludDhfdCB0eF9oc2Nsa2tpZGxlX2NudDsKKwl1aW50OF90IHR4X2hzZXhpdF9jbnQ7 CisJdWludDhfdCB0eF9jcmNfZW47CisJdWludDhfdCB0eF9oYWN0X3dhaXRfc3RvcDsKKwl1aW50 OF90IHR4X2Fsd2F5c191c2VfaGFjdDsKKwl1aW50OF90IHR4X3dhaXRfdHJpZzsKKwl1aW50OF90 IHR4X3dhaXRfYWxsX3NlY3Q7Cit9OworCisvKmNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIGZvciBN SVBJIGNvbnRyb2wgKi8KK3N0cnVjdCBtaXBpX2N0cmxfY2ZnIHsKKwkvKiBjb250cm9sbGVyIGlu ZGV4IDogQ1RSTDYgZm9yIGNvbm5lY3RpbmcgdG8gTENEICovCisJdWludDhfdCBpbmRleDsKKwl1 aW50OF90IHR5cGU7CQkvKiBjb250cm9sbGVyIHR5cGUgOiBNSVBJX0RTSSAqLworCXVpbnQ4X3Qg ZGlyOwkJLyogY29udHJvbGxlciBkaXJlY3Rpb24gOiBNSVBJX1RYICovCisJdWludDhfdCBhY3Rp dmVfbGFuZXM7CS8qICMgYWN0aXZlIGxhbmVzIHBlciBjb250cm9sbGVyIDIvNCAqLworCXVpbnQz Ml90IGxhbmVfcmF0ZV9tYnBzOwkvKk1CUFMgKi8KKwl1aW50MzJfdCByZWZfY2xrX2toejsKKwl1 aW50MzJfdCBjZmdfY2xrX2toejsKKwl1aW50MzJfdCBkYXRhX2lmOwkvKk1JUElfSUZfRE1BIG9y IE1JUElfSUZfUEFSQUxMRUwgKi8KKwlzdHJ1Y3QgbWlwaV90eF9jdHJsX2NmZyB0eF9jdHJsX2Nm ZzsKK307CisKKy8qIFN0cnVjdHVyZSBmb3Igc3RvcmluZyB1c2VyIHNwZWNpZmllZCBpbnRlcnJ1 cHRzIHRoYXQgYXJlIGVuYWJsZWQgKi8KK3VuaW9uIG1pcGlfaXJxX2NmZyB7CisJdWludDhfdCB2 YWx1ZTsKKwlzdHJ1Y3QgeworCQl1aW50OF90IGxpbmVfY29tcGFyZToxOworCQl1aW50OF90IGRt YV9ldmVudDoxOworCQl1aW50OF90IGZyYW1lX2RvbmU6MTsKKwkJdWludDhfdCBjdHJsX2Vycm9y OjE7CisJCXVpbnQ4X3QgZHBoeV9lcnJvcjoxOworCX0gaXJxX2NmZzsKK307CisKK3N0cnVjdCBk cm1fYnJpZGdlICprbWJfZHNpX2hvc3RfYnJpZGdlX2luaXQoc3RydWN0IGRldmljZSAqZGV2KTsK K2ludCBrbWJfZHNpX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9icmlk Z2UgKmJyaWRnZSk7Cit2b2lkIGttYl9wbGFuZV9kZXN0cm95KHN0cnVjdCBkcm1fcGxhbmUgKnBs YW5lKTsKK3ZvaWQgbWlwaV90eF9oYW5kbGVfaXJxcyhzdHJ1Y3Qga21iX2RybV9wcml2YXRlICpk ZXZfcCk7Cit2b2lkIGttYl9kc2lfaG9zdF91bnJlZ2lzdGVyKHZvaWQpOworaW50IGttYl9kc2lf aHdfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq bW9kZSk7CisjZW5kaWYgLyogX19LTUJfRFNJX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2ttYi9rbWJfcGxhbmUuYyBiL2RyaXZlcnMvZ3B1L2RybS9rbWIva21iX3BsYW5lLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEzNjY5NgotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9rbWIva21iX3BsYW5lLmMKQEAgLTAsMCArMSw1MTggQEAK Ky8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKy8qCisgKiBDb3B5cmln aHQgwqkgMjAxOC0yMDIwIEludGVsIENvcnBvcmF0aW9uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4 L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2dyYXBoLmg+CisjaW5jbHVkZSA8bGludXgvcGxh dGZvcm1fZGF0YS9zaW1wbGVmYi5oPgorI2luY2x1ZGUgPHZpZGVvL3ZpZGVvbW9kZS5oPgorCisj aW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxw ZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNf aGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9mYl9jbWFfaGVscGVyLmg+CisjaW5jbHVkZSA8 ZHJtL2RybV9mYl9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9jbWFfaGVscGVyLmg+ CisjaW5jbHVkZSA8ZHJtL2RybV9vZi5oPgorI2luY2x1ZGUgPGRybS9kcm1fcGxhbmVfaGVscGVy Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9tYW5hZ2VkLmg+CisKKyNpbmNsdWRlICJrbWJfY3J0Yy5o IgorI2luY2x1ZGUgImttYl9kcnYuaCIKKyNpbmNsdWRlICJrbWJfcGxhbmUuaCIKKyNpbmNsdWRl ICJrbWJfcmVncy5oIgorCitzdHJ1Y3QgbGF5ZXJfc3RhdHVzIHBsYW5lX3N0YXR1c1tLTUJfTUFY X1BMQU5FU107Citjb25zdCB1aW50MzJfdCBsYXllcl9pcnFzW10gPSB7CisJTENEX0lOVF9WTDAs CisJTENEX0lOVF9WTDEsCisJTENEX0lOVF9HTDAsCisJTENEX0lOVF9HTDEKK307CisKK3N0YXRp YyB1bnNpZ25lZCBpbnQgY2hlY2tfcGl4ZWxfZm9ybWF0KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5l LCB1MzIgZm9ybWF0KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHBsYW5lLT5mb3Jt YXRfY291bnQ7IGkrKykgeworCQlpZiAocGxhbmUtPmZvcm1hdF90eXBlc1tpXSA9PSBmb3JtYXQp CisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQga21i X3BsYW5lX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJCQkgIHN0cnVj dCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZi OworCWludCByZXQ7CisKKwlmYiA9IHN0YXRlLT5mYjsKKwlpZiAoIWZiIHx8ICFzdGF0ZS0+Y3J0 YykKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBjaGVja19waXhlbF9mb3JtYXQocGxhbmUsIGZiLT5m b3JtYXQtPmZvcm1hdCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChzdGF0ZS0+ Y3J0Y193ID4gS01CX01BWF9XSURUSCB8fCBzdGF0ZS0+Y3J0Y19oID4gS01CX01BWF9IRUlHSFQp CisJCXJldHVybiAtRUlOVkFMOworCWlmIChzdGF0ZS0+Y3J0Y193IDwgS01CX01JTl9XSURUSCB8 fCBzdGF0ZS0+Y3J0Y19oIDwgS01CX01JTl9IRUlHSFQpCisJCXJldHVybiAtRUlOVkFMOworCXJl dHVybiAwOworfQorCitzdGF0aWMgdm9pZCBrbWJfcGxhbmVfYXRvbWljX2Rpc2FibGUoc3RydWN0 IGRybV9wbGFuZSAqcGxhbmUsCisJCQkJICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0 ZSkKK3sKKwlzdHJ1Y3Qga21iX3BsYW5lICprbWJfcGxhbmUgPSB0b19rbWJfcGxhbmUocGxhbmUp OworCWludCBwbGFuZV9pZCA9IGttYl9wbGFuZS0+aWQ7CisKKwlzd2l0Y2ggKHBsYW5lX2lkKSB7 CisJY2FzZSBMQVlFUl8wOgorCQlwbGFuZV9zdGF0dXNbcGxhbmVfaWRdLmN0cmwgPSBMQ0RfQ1RS TF9WTDFfRU5BQkxFOworCQlicmVhazsKKwljYXNlIExBWUVSXzE6CisJCXBsYW5lX3N0YXR1c1tw bGFuZV9pZF0uY3RybCA9IExDRF9DVFJMX1ZMMl9FTkFCTEU7CisJCWJyZWFrOworCWNhc2UgTEFZ RVJfMjoKKwkJcGxhbmVfc3RhdHVzW3BsYW5lX2lkXS5jdHJsID0gTENEX0NUUkxfR0wxX0VOQUJM RTsKKwkJYnJlYWs7CisJY2FzZSBMQVlFUl8zOgorCQlwbGFuZV9zdGF0dXNbcGxhbmVfaWRdLmN0 cmwgPSBMQ0RfQ1RSTF9HTDJfRU5BQkxFOworCQlicmVhazsKKwl9CisKKwlwbGFuZV9zdGF0dXNb cGxhbmVfaWRdLmRpc2FibGUgPSB0cnVlOworfQorCit1bnNpZ25lZCBpbnQgc2V0X3BpeGVsX2Zv cm1hdCh1MzIgZm9ybWF0KQoreworCXVuc2lnbmVkIGludCB2YWwgPSAwOworCisJc3dpdGNoIChm b3JtYXQpIHsKKwkJLyogcGxhbmFyIGZvcm1hdHMgKi8KKwljYXNlIERSTV9GT1JNQVRfWVVWNDQ0 OgorCQl2YWwgPSBMQ0RfTEFZRVJfRk9STUFUX1lDQkNSNDQ0UExBTiB8IExDRF9MQVlFUl9QTEFO QVJfU1RPUkFHRTsKKwkJYnJlYWs7CisJY2FzZSBEUk1fRk9STUFUX1lWVTQ0NDoKKwkJdmFsID0g TENEX0xBWUVSX0ZPUk1BVF9ZQ0JDUjQ0NFBMQU4gfCBMQ0RfTEFZRVJfUExBTkFSX1NUT1JBR0UK KwkJICAgIHwgTENEX0xBWUVSX0NSQ0JfT1JERVI7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1B VF9ZVVY0MjI6CisJCXZhbCA9IExDRF9MQVlFUl9GT1JNQVRfWUNCQ1I0MjJQTEFOIHwgTENEX0xB WUVSX1BMQU5BUl9TVE9SQUdFOworCQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfWVZVNDIyOgor CQl2YWwgPSBMQ0RfTEFZRVJfRk9STUFUX1lDQkNSNDIyUExBTiB8IExDRF9MQVlFUl9QTEFOQVJf U1RPUkFHRQorCQkgICAgfCBMQ0RfTEFZRVJfQ1JDQl9PUkRFUjsKKwkJYnJlYWs7CisJY2FzZSBE Uk1fRk9STUFUX1lVVjQyMDoKKwkJdmFsID0gTENEX0xBWUVSX0ZPUk1BVF9ZQ0JDUjQyMFBMQU4g fCBMQ0RfTEFZRVJfUExBTkFSX1NUT1JBR0U7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9Z VlU0MjA6CisJCXZhbCA9IExDRF9MQVlFUl9GT1JNQVRfWUNCQ1I0MjBQTEFOIHwgTENEX0xBWUVS X1BMQU5BUl9TVE9SQUdFCisJCSAgICB8IExDRF9MQVlFUl9DUkNCX09SREVSOworCQlicmVhazsK KwljYXNlIERSTV9GT1JNQVRfTlYxMjoKKwkJdmFsID0gTENEX0xBWUVSX0ZPUk1BVF9OVjEyIHwg TENEX0xBWUVSX1BMQU5BUl9TVE9SQUdFOworCQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfTlYy MToKKwkJdmFsID0gTENEX0xBWUVSX0ZPUk1BVF9OVjEyIHwgTENEX0xBWUVSX1BMQU5BUl9TVE9S QUdFCisJCSAgICB8IExDRF9MQVlFUl9DUkNCX09SREVSOworCQlicmVhazsKKwkJLyogcGFja2Vk IGZvcm1hdHMgKi8KKwkJLyogbG9va3MgaHcgcmVxdWlyZXMgQiAmIEcgdG8gYmUgc3dhcHBlZCB3 aGVuIFJHQiAqLworCWNhc2UgRFJNX0ZPUk1BVF9SR0IzMzI6CisJCXZhbCA9IExDRF9MQVlFUl9G T1JNQVRfUkdCMzMyIHwgTENEX0xBWUVSX0JHUl9PUkRFUjsKKwkJYnJlYWs7CisJY2FzZSBEUk1f Rk9STUFUX1hCR1I0NDQ0OgorCQl2YWwgPSBMQ0RfTEFZRVJfRk9STUFUX1JHQlg0NDQ0OworCQli cmVhazsKKwljYXNlIERSTV9GT1JNQVRfQVJHQjQ0NDQ6CisJCXZhbCA9IExDRF9MQVlFUl9GT1JN QVRfUkdCQTQ0NDQgfCBMQ0RfTEFZRVJfQkdSX09SREVSOworCQlicmVhazsKKwljYXNlIERSTV9G T1JNQVRfQUJHUjQ0NDQ6CisJCXZhbCA9IExDRF9MQVlFUl9GT1JNQVRfUkdCQTQ0NDQ7CisJCWJy ZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMTU1NToKKwkJdmFsID0gTENEX0xBWUVSX0ZPUk1B VF9YUkdCMTU1NSB8IExDRF9MQVlFUl9CR1JfT1JERVI7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZP Uk1BVF9YQkdSMTU1NToKKwkJdmFsID0gTENEX0xBWUVSX0ZPUk1BVF9YUkdCMTU1NTsKKwkJYnJl YWs7CisJY2FzZSBEUk1fRk9STUFUX0FSR0IxNTU1OgorCQl2YWwgPSBMQ0RfTEFZRVJfRk9STUFU X1JHQkExNTU1IHwgTENEX0xBWUVSX0JHUl9PUkRFUjsKKwkJYnJlYWs7CisJY2FzZSBEUk1fRk9S TUFUX0FCR1IxNTU1OgorCQl2YWwgPSBMQ0RfTEFZRVJfRk9STUFUX1JHQkExNTU1OworCQlicmVh azsKKwljYXNlIERSTV9GT1JNQVRfUkdCNTY1OgorCQl2YWwgPSBMQ0RfTEFZRVJfRk9STUFUX1JH QjU2NSB8IExDRF9MQVlFUl9CR1JfT1JERVI7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9C R1I1NjU6CisJCXZhbCA9IExDRF9MQVlFUl9GT1JNQVRfUkdCNTY1OworCQlicmVhazsKKwljYXNl IERSTV9GT1JNQVRfUkdCODg4OgorCQl2YWwgPSBMQ0RfTEFZRVJfRk9STUFUX1JHQjg4OCB8IExD RF9MQVlFUl9CR1JfT1JERVI7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9CR1I4ODg6CisJ CXZhbCA9IExDRF9MQVlFUl9GT1JNQVRfUkdCODg4OworCQlicmVhazsKKwljYXNlIERSTV9GT1JN QVRfWFJHQjg4ODg6CisJCXZhbCA9IExDRF9MQVlFUl9GT1JNQVRfUkdCWDg4ODggfCBMQ0RfTEFZ RVJfQkdSX09SREVSOworCQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfWEJHUjg4ODg6CisJCXZh bCA9IExDRF9MQVlFUl9GT1JNQVRfUkdCWDg4ODg7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1B VF9BUkdCODg4ODoKKwkJdmFsID0gTENEX0xBWUVSX0ZPUk1BVF9SR0JBODg4OCB8IExDRF9MQVlF Ul9CR1JfT1JERVI7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoKKwkJdmFs ID0gTENEX0xBWUVSX0ZPUk1BVF9SR0JBODg4ODsKKwkJYnJlYWs7CisJfQorCURSTV9JTkZPX09O Q0UoIiVzIDogJWQgZm9ybWF0PTB4JXggdmFsPTB4JXhcbiIsCisJCQkgX19mdW5jX18sIF9fTElO RV9fLCBmb3JtYXQsIHZhbCk7CisJcmV0dXJuIHZhbDsKK30KKwordW5zaWduZWQgaW50IHNldF9i aXRzX3Blcl9waXhlbChjb25zdCBzdHJ1Y3QgZHJtX2Zvcm1hdF9pbmZvICpmb3JtYXQpCit7CisJ dTMyIGJwcCA9IDA7CisJdW5zaWduZWQgaW50IHZhbCA9IDA7CisKKwlpZiAoZm9ybWF0LT5udW1f cGxhbmVzID4gMSkgeworCQl2YWwgPSBMQ0RfTEFZRVJfOEJQUDsKKwkJcmV0dXJuIHZhbDsKKwl9 CisKKwlicHAgKz0gOCAqIGZvcm1hdC0+Y3BwWzBdOworCisJc3dpdGNoIChicHApIHsKKwljYXNl IDg6CisJCXZhbCA9IExDRF9MQVlFUl84QlBQOworCQlicmVhazsKKwljYXNlIDE2OgorCQl2YWwg PSBMQ0RfTEFZRVJfMTZCUFA7CisJCWJyZWFrOworCWNhc2UgMjQ6CisJCXZhbCA9IExDRF9MQVlF Ul8yNEJQUDsKKwkJYnJlYWs7CisJY2FzZSAzMjoKKwkJdmFsID0gTENEX0xBWUVSXzMyQlBQOwor CQlicmVhazsKKwl9CisKKwlEUk1fREVCVUcoImJwcD0lZCB2YWw9MHgleFxuIiwgYnBwLCB2YWwp OworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyB2b2lkIGNvbmZpZ19jc2Moc3RydWN0IGttYl9k cm1fcHJpdmF0ZSAqa21iLCBpbnQgcGxhbmVfaWQpCit7CisJLyogWVVWIHRvIFJHQiBjb252ZXJz aW9uIHVzaW5nIHRoZSBmaXhlZCBtYXRyaXggY3NjX2NvZWZfbGNkICovCisJa21iX3dyaXRlX2xj ZChrbWIsIExDRF9MQVlFUm5fQ1NDX0NPRUZGMTEocGxhbmVfaWQpLCBjc2NfY29lZl9sY2RbMF0p OworCWttYl93cml0ZV9sY2Qoa21iLCBMQ0RfTEFZRVJuX0NTQ19DT0VGRjEyKHBsYW5lX2lkKSwg Y3NjX2NvZWZfbGNkWzFdKTsKKwlrbWJfd3JpdGVfbGNkKGttYiwgTENEX0xBWUVSbl9DU0NfQ09F RkYxMyhwbGFuZV9pZCksIGNzY19jb2VmX2xjZFsyXSk7CisJa21iX3dyaXRlX2xjZChrbWIsIExD RF9MQVlFUm5fQ1NDX0NPRUZGMjEocGxhbmVfaWQpLCBjc2NfY29lZl9sY2RbM10pOworCWttYl93 cml0ZV9sY2Qoa21iLCBMQ0RfTEFZRVJuX0NTQ19DT0VGRjIyKHBsYW5lX2lkKSwgY3NjX2NvZWZf bGNkWzRdKTsKKwlrbWJfd3JpdGVfbGNkKGttYiwgTENEX0xBWUVSbl9DU0NfQ09FRkYyMyhwbGFu ZV9pZCksIGNzY19jb2VmX2xjZFs1XSk7CisJa21iX3dyaXRlX2xjZChrbWIsIExDRF9MQVlFUm5f Q1NDX0NPRUZGMzEocGxhbmVfaWQpLCBjc2NfY29lZl9sY2RbNl0pOworCWttYl93cml0ZV9sY2Qo a21iLCBMQ0RfTEFZRVJuX0NTQ19DT0VGRjMyKHBsYW5lX2lkKSwgY3NjX2NvZWZfbGNkWzddKTsK KwlrbWJfd3JpdGVfbGNkKGttYiwgTENEX0xBWUVSbl9DU0NfQ09FRkYzMyhwbGFuZV9pZCksIGNz Y19jb2VmX2xjZFs4XSk7CisJa21iX3dyaXRlX2xjZChrbWIsIExDRF9MQVlFUm5fQ1NDX09GRjEo cGxhbmVfaWQpLCBjc2NfY29lZl9sY2RbOV0pOworCWttYl93cml0ZV9sY2Qoa21iLCBMQ0RfTEFZ RVJuX0NTQ19PRkYyKHBsYW5lX2lkKSwgY3NjX2NvZWZfbGNkWzEwXSk7CisJa21iX3dyaXRlX2xj ZChrbWIsIExDRF9MQVlFUm5fQ1NDX09GRjMocGxhbmVfaWQpLCBjc2NfY29lZl9sY2RbMTFdKTsK K30KKworc3RhdGljIHZvaWQga21iX3BsYW5lX2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFu ZSAqcGxhbmUsCisJCQkJICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQoreworCXN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiOworCXN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmttYjsK Kwl1bnNpZ25lZCBpbnQgd2lkdGg7CisJdW5zaWduZWQgaW50IGhlaWdodDsKKwl1bnNpZ25lZCBp bnQgZG1hX2xlbjsKKwlzdHJ1Y3Qga21iX3BsYW5lICprbWJfcGxhbmU7CisJdW5zaWduZWQgaW50 IGRtYV9jZmc7CisJdW5zaWduZWQgaW50IGN0cmwgPSAwLCB2YWwgPSAwLCBvdXRfZm9ybWF0ID0g MDsKKwl1bnNpZ25lZCBpbnQgc3JjX3csIHNyY19oLCBjcnRjX3gsIGNydGNfeTsKKwl1bnNpZ25l ZCBjaGFyIHBsYW5lX2lkOworCWludCBudW1fcGxhbmVzOworCXN0YXRpYyBkbWFfYWRkcl90IGFk ZHJbTUFYX1NVQl9QTEFORVNdID0geyAwLCAwLCAwIH07CisKKwlpZiAoIXBsYW5lIHx8ICFwbGFu ZS0+c3RhdGUgfHwgIXN0YXRlKQorCQlyZXR1cm47CisKKwlmYiA9IHBsYW5lLT5zdGF0ZS0+ZmI7 CisJaWYgKCFmYikKKwkJcmV0dXJuOworCW51bV9wbGFuZXMgPSBmYi0+Zm9ybWF0LT5udW1fcGxh bmVzOworCWttYl9wbGFuZSA9IHRvX2ttYl9wbGFuZShwbGFuZSk7CisJcGxhbmVfaWQgPSBrbWJf cGxhbmUtPmlkOworCisJa21iID0gdG9fa21iKHBsYW5lLT5kZXYpOworCisJaWYgKGttYl91bmRl cl9mbG93IHx8IGttYl9mbHVzaF9kb25lKSB7CisJCWRybV9kYmcoJmttYi0+ZHJtLCAicGxhbmVf dXBkYXRlOnVuZGVyZmxvdyEhISEgcmV0dXJuaW5nIik7CisJCXJldHVybjsKKwl9CisKKwlzcmNf dyA9IChwbGFuZS0+c3RhdGUtPnNyY193ID4+IDE2KTsKKwlzcmNfaCA9IHBsYW5lLT5zdGF0ZS0+ c3JjX2ggPj4gMTY7CisJY3J0Y194ID0gcGxhbmUtPnN0YXRlLT5jcnRjX3g7CisJY3J0Y195ID0g cGxhbmUtPnN0YXRlLT5jcnRjX3k7CisKKwlkcm1fZGJnKCZrbWItPmRybSwKKwkJInNyY193PSVk IHNyY19oPSVkLCBmYi0+Zm9ybWF0LT5mb3JtYXQ9MHgleCBmYi0+ZmxhZ3M9MHgleFxuIiwKKwkJ ICBzcmNfdywgc3JjX2gsIGZiLT5mb3JtYXQtPmZvcm1hdCwgZmItPmZsYWdzKTsKKworCXdpZHRo ID0gZmItPndpZHRoOworCWhlaWdodCA9IGZiLT5oZWlnaHQ7CisJZG1hX2xlbiA9ICh3aWR0aCAq IGhlaWdodCAqIGZiLT5mb3JtYXQtPmNwcFswXSk7CisJZHJtX2RiZygma21iLT5kcm0sICJkbWFf bGVuPSVkICIsIGRtYV9sZW4pOworCWttYl93cml0ZV9sY2Qoa21iLCBMQ0RfTEFZRVJuX0RNQV9M RU4ocGxhbmVfaWQpLCBkbWFfbGVuKTsKKwlrbWJfd3JpdGVfbGNkKGttYiwgTENEX0xBWUVSbl9E TUFfTEVOX1NIQURPVyhwbGFuZV9pZCksIGRtYV9sZW4pOworCWttYl93cml0ZV9sY2Qoa21iLCBM Q0RfTEFZRVJuX0RNQV9MSU5FX1ZTVFJJREUocGxhbmVfaWQpLAorCQkgICAgICBmYi0+cGl0Y2hl c1swXSk7CisJa21iX3dyaXRlX2xjZChrbWIsIExDRF9MQVlFUm5fRE1BX0xJTkVfV0lEVEgocGxh bmVfaWQpLAorCQkgICAgICAod2lkdGggKiBmYi0+Zm9ybWF0LT5jcHBbMF0pKTsKKworCWFkZHJb WV9QTEFORV0gPSBkcm1fZmJfY21hX2dldF9nZW1fYWRkcihmYiwgcGxhbmUtPnN0YXRlLCAwKTsK KwlrbWItPmZiX2FkZHIgPSBhZGRyW1lfUExBTkVdOworCWttYl93cml0ZV9sY2Qoa21iLCBMQ0Rf TEFZRVJuX0RNQV9TVEFSVF9BRERSKHBsYW5lX2lkKSwKKwkJICAgICAgYWRkcltZX1BMQU5FXSAr IGZiLT5vZmZzZXRzWzBdKTsKKwl2YWwgPSBzZXRfcGl4ZWxfZm9ybWF0KGZiLT5mb3JtYXQtPmZv cm1hdCk7CisJdmFsIHw9IHNldF9iaXRzX3Blcl9waXhlbChmYi0+Zm9ybWF0KTsKKwkvKiBQcm9n cmFtIENiL0NyIGZvciBwbGFuYXIgZm9ybWF0cyAqLworCWlmIChudW1fcGxhbmVzID4gMSkgewor CQlrbWJfd3JpdGVfbGNkKGttYiwgTENEX0xBWUVSbl9ETUFfQ0JfTElORV9WU1RSSURFKHBsYW5l X2lkKSwKKwkJCQl3aWR0aCpmYi0+Zm9ybWF0LT5jcHBbMF0pOworCQlrbWJfd3JpdGVfbGNkKGtt YiwgTENEX0xBWUVSbl9ETUFfQ0JfTElORV9XSURUSChwbGFuZV9pZCksCisJCQkgICAgICAod2lk dGggKiBmYi0+Zm9ybWF0LT5jcHBbMF0pKTsKKworCQlhZGRyW1VfUExBTkVdID0gZHJtX2ZiX2Nt YV9nZXRfZ2VtX2FkZHIoZmIsIHBsYW5lLT5zdGF0ZSwKKwkJCQlVX1BMQU5FKTsKKwkJLyogY2hl Y2sgaWYgQ2IvQ3IgaXMgc3dhcHBlZCovCisJCWlmICgobnVtX3BsYW5lcyA9PSAzKSAmJiAodmFs ICYgTENEX0xBWUVSX0NSQ0JfT1JERVIpKQorCQkJa21iX3dyaXRlX2xjZChrbWIsCisJCQkJCUxD RF9MQVlFUm5fRE1BX1NUQVJUX0NSX0FEUihwbGFuZV9pZCksCisJCQkJCWFkZHJbVV9QTEFORV0p OworCQllbHNlCisJCQlrbWJfd3JpdGVfbGNkKGttYiwKKwkJCQkJTENEX0xBWUVSbl9ETUFfU1RB UlRfQ0JfQURSKHBsYW5lX2lkKSwKKwkJCQkJYWRkcltVX1BMQU5FXSk7CisKKwkJaWYgKG51bV9w bGFuZXMgPT0gMykgeworCQkJa21iX3dyaXRlX2xjZChrbWIsCisJCQkJTENEX0xBWUVSbl9ETUFf Q1JfTElORV9WU1RSSURFKHBsYW5lX2lkKSwKKwkJCQkoKHdpZHRoKSpmYi0+Zm9ybWF0LT5jcHBb MF0pKTsKKworCQkJa21iX3dyaXRlX2xjZChrbWIsCisJCQkJTENEX0xBWUVSbl9ETUFfQ1JfTElO RV9XSURUSChwbGFuZV9pZCksCisJCQkJKCh3aWR0aCkqZmItPmZvcm1hdC0+Y3BwWzBdKSk7CisK KwkJCWFkZHJbVl9QTEFORV0gPSBkcm1fZmJfY21hX2dldF9nZW1fYWRkcihmYiwKKwkJCQkJcGxh bmUtPnN0YXRlLCBWX1BMQU5FKTsKKworCQkJLyogY2hlY2sgaWYgQ2IvQ3IgaXMgc3dhcHBlZCov CisJCQlpZiAodmFsICYgTENEX0xBWUVSX0NSQ0JfT1JERVIpCisJCQkJa21iX3dyaXRlX2xjZChr bWIsCisJCQkJCUxDRF9MQVlFUm5fRE1BX1NUQVJUX0NCX0FEUihwbGFuZV9pZCksCisJCQkJCWFk ZHJbVl9QTEFORV0pOworCQkJZWxzZQorCQkJCWttYl93cml0ZV9sY2Qoa21iLAorCQkJCQlMQ0Rf TEFZRVJuX0RNQV9TVEFSVF9DUl9BRFIocGxhbmVfaWQpLAorCQkJCQlhZGRyW1ZfUExBTkVdKTsK KwkJfQorCX0KKworCWttYl93cml0ZV9sY2Qoa21iLCBMQ0RfTEFZRVJuX1dJRFRIKHBsYW5lX2lk KSwgc3JjX3cgLSAxKTsKKwlrbWJfd3JpdGVfbGNkKGttYiwgTENEX0xBWUVSbl9IRUlHSFQocGxh bmVfaWQpLCBzcmNfaCAtIDEpOworCWttYl93cml0ZV9sY2Qoa21iLCBMQ0RfTEFZRVJuX0NPTF9T VEFSVChwbGFuZV9pZCksIGNydGNfeCk7CisJa21iX3dyaXRlX2xjZChrbWIsIExDRF9MQVlFUm5f Uk9XX1NUQVJUKHBsYW5lX2lkKSwgY3J0Y195KTsKKworCXZhbCB8PSBMQ0RfTEFZRVJfRklGT18x MDA7CisKKwlpZiAodmFsICYgTENEX0xBWUVSX1BMQU5BUl9TVE9SQUdFKSB7CisJCXZhbCB8PSBM Q0RfTEFZRVJfQ1NDX0VOOworCisJCS8qIEVuYWJsZSBDU0MgaWYgaW5wdXQgaXMgcGxhbmFyIGFu ZCBvdXRwdXQgaXMgUkdCICovCisJCWNvbmZpZ19jc2Moa21iLCBwbGFuZV9pZCk7CisJfQorCisJ a21iX3dyaXRlX2xjZChrbWIsIExDRF9MQVlFUm5fQ0ZHKHBsYW5lX2lkKSwgdmFsKTsKKworCXN3 aXRjaCAocGxhbmVfaWQpIHsKKwljYXNlIExBWUVSXzA6CisJCWN0cmwgPSBMQ0RfQ1RSTF9WTDFf RU5BQkxFOworCQlicmVhazsKKwljYXNlIExBWUVSXzE6CisJCWN0cmwgPSBMQ0RfQ1RSTF9WTDJf RU5BQkxFOworCQlicmVhazsKKwljYXNlIExBWUVSXzI6CisJCWN0cmwgPSBMQ0RfQ1RSTF9HTDFf RU5BQkxFOworCQlicmVhazsKKwljYXNlIExBWUVSXzM6CisJCWN0cmwgPSBMQ0RfQ1RSTF9HTDJf RU5BQkxFOworCQlicmVhazsKKwl9CisKKwljdHJsIHw9IExDRF9DVFJMX1BST0dSRVNTSVZFIHwg TENEX0NUUkxfVElNX0dFTl9FTkFCTEUKKwkgICAgfCBMQ0RfQ1RSTF9DT05USU5VT1VTIHwgTENE X0NUUkxfT1VUUFVUX0VOQUJMRUQ7CisKKwkvKiBMQ0QgaXMgY29ubmVjdGVkIHRvIE1JUEkgb24g a21iCisJICogVGhlcmVmb3JlIHRoaXMgYml0IGlzIHJlcXVpcmVkIGZvciBEU0kgVHgKKwkgKi8K KwljdHJsIHw9IExDRF9DVFJMX1ZIU1lOQ19JRExFX0xWTDsKKworCWttYl9zZXRfYml0bWFza19s Y2Qoa21iLCBMQ0RfQ09OVFJPTCwgY3RybCk7CisKKwkvKiBGSVhNRSBubyBkb2Mgb24gaG93IHRv IHNldCBvdXRwdXQgZm9ybWF0LHRoZXNlIHZhbHVlcyBhcmUKKwkgKiB0YWtlbiBmcm9tIHRoZSBN eXJpYWR4IHRlc3RzCisJICovCisJb3V0X2Zvcm1hdCB8PSBMQ0RfT1VURl9GT1JNQVRfUkdCODg4 OworCisJLyogTGVhdmUgUkdCIG9yZGVyLGNvbnZlcnNpb24gbW9kZSBhbmQgY2xpcCBtb2RlIHRv IGRlZmF1bHQgKi8KKwkvKiBkbyBub3QgaW50ZXJsZWF2ZSBSR0IgY2hhbm5lbHMgZm9yIG1pcGkg VHggY29tcGF0aWJpbGl0eSAqLworCW91dF9mb3JtYXQgfD0gTENEX09VVEZfTUlQSV9SR0JfTU9E RTsKKwlrbWJfd3JpdGVfbGNkKGttYiwgTENEX09VVF9GT1JNQVRfQ0ZHLCBvdXRfZm9ybWF0KTsK KworCWRtYV9jZmcgPSBMQ0RfRE1BX0xBWUVSX0VOQUJMRSB8IExDRF9ETUFfTEFZRVJfVlNUUklE RV9FTiB8CisJICAgIExDRF9ETUFfTEFZRVJfQ09OVF9VUERBVEUgfCBMQ0RfRE1BX0xBWUVSX0FY SV9CVVJTVF8xNjsKKworCS8qIEVuYWJsZSBETUEgKi8KKwlrbWJfd3JpdGVfbGNkKGttYiwgTENE X0xBWUVSbl9ETUFfQ0ZHKHBsYW5lX2lkKSwgZG1hX2NmZyk7CisJZHJtX2RiZygma21iLT5kcm0s ICJkbWFfY2ZnPTB4JXggTENEX0RNQV9DRkc9MHgleFxuIiwgZG1hX2NmZywKKwkJICBrbWJfcmVh ZF9sY2Qoa21iLCBMQ0RfTEFZRVJuX0RNQV9DRkcocGxhbmVfaWQpKSk7CisKKwlrbWJfc2V0X2Jp dG1hc2tfbGNkKGttYiwgTENEX0lOVF9DTEVBUiwgTENEX0lOVF9FT0YgfAorCQkJTENEX0lOVF9E TUFfRVJSKTsKKwlrbWJfc2V0X2JpdG1hc2tfbGNkKGttYiwgTENEX0lOVF9FTkFCTEUsIExDRF9J TlRfRU9GIHwKKwkJCUxDRF9JTlRfRE1BX0VSUik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg ZHJtX3BsYW5lX2hlbHBlcl9mdW5jcyBrbWJfcGxhbmVfaGVscGVyX2Z1bmNzID0geworCS5hdG9t aWNfY2hlY2sgPSBrbWJfcGxhbmVfYXRvbWljX2NoZWNrLAorCS5hdG9taWNfdXBkYXRlID0ga21i X3BsYW5lX2F0b21pY191cGRhdGUsCisJLmF0b21pY19kaXNhYmxlID0ga21iX3BsYW5lX2F0b21p Y19kaXNhYmxlCit9OworCit2b2lkIGttYl9wbGFuZV9kZXN0cm95KHN0cnVjdCBkcm1fcGxhbmUg KnBsYW5lKQoreworCXN0cnVjdCBrbWJfcGxhbmUgKmttYl9wbGFuZSA9IHRvX2ttYl9wbGFuZShw bGFuZSk7CisKKwlkcm1fcGxhbmVfY2xlYW51cChwbGFuZSk7CisJa2ZyZWUoa21iX3BsYW5lKTsK K30KKworc3RhdGljIHZvaWQga21iX2Rlc3Ryb3lfcGxhbmVfc3RhdGUoc3RydWN0IGRybV9wbGFu ZSAqcGxhbmUsCisJCQkJICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQoreworCXN0 cnVjdCBrbWJfcGxhbmVfc3RhdGUgKmttYl9zdGF0ZSA9IHRvX2ttYl9wbGFuZV9zdGF0ZShzdGF0 ZSk7CisKKwlfX2RybV9hdG9taWNfaGVscGVyX3BsYW5lX2Rlc3Ryb3lfc3RhdGUoc3RhdGUpOwor CWtmcmVlKGttYl9zdGF0ZSk7Cit9CisKK3N0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKmttYl9wbGFu ZV9kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCit7CisJc3RydWN0IGRy bV9wbGFuZV9zdGF0ZSAqc3RhdGU7CisJc3RydWN0IGttYl9wbGFuZV9zdGF0ZSAqa21iX3N0YXRl OworCisJa21iX3N0YXRlID0ga21lbWR1cChwbGFuZS0+c3RhdGUsIHNpemVvZigqa21iX3N0YXRl KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFrbWJfc3RhdGUpCisJCXJldHVybiBOVUxMOworCisJc3Rh dGUgPSAma21iX3N0YXRlLT5iYXNlX3BsYW5lX3N0YXRlOworCV9fZHJtX2F0b21pY19oZWxwZXJf cGxhbmVfZHVwbGljYXRlX3N0YXRlKHBsYW5lLCBzdGF0ZSk7CisKKwlyZXR1cm4gc3RhdGU7Cit9 CisKK3N0YXRpYyB2b2lkIGttYl9wbGFuZV9yZXNldChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkK K3sKKwlzdHJ1Y3Qga21iX3BsYW5lX3N0YXRlICprbWJfc3RhdGUgPSB0b19rbWJfcGxhbmVfc3Rh dGUocGxhbmUtPnN0YXRlKTsKKworCWlmIChrbWJfc3RhdGUpCisJCV9fZHJtX2F0b21pY19oZWxw ZXJfcGxhbmVfZGVzdHJveV9zdGF0ZQorCQkgICAgKCZrbWJfc3RhdGUtPmJhc2VfcGxhbmVfc3Rh dGUpOworCWtmcmVlKGttYl9zdGF0ZSk7CisKKwlwbGFuZS0+c3RhdGUgPSBOVUxMOworCWttYl9z dGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKCprbWJfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoa21i X3N0YXRlKSB7CisJCWttYl9zdGF0ZS0+YmFzZV9wbGFuZV9zdGF0ZS5wbGFuZSA9IHBsYW5lOwor CQlrbWJfc3RhdGUtPmJhc2VfcGxhbmVfc3RhdGUucm90YXRpb24gPSBEUk1fTU9ERV9ST1RBVEVf MDsKKwkJcGxhbmUtPnN0YXRlID0gJmttYl9zdGF0ZS0+YmFzZV9wbGFuZV9zdGF0ZTsKKwkJa21i X3N0YXRlLT5ub19wbGFuZXMgPSBLTUJfTUFYX1BMQU5FUzsKKwl9Cit9CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIGttYl9wbGFuZV9mdW5jcyA9IHsKKwkudXBkYXRlX3Bs YW5lID0gZHJtX2F0b21pY19oZWxwZXJfdXBkYXRlX3BsYW5lLAorCS5kaXNhYmxlX3BsYW5lID0g ZHJtX2F0b21pY19oZWxwZXJfZGlzYWJsZV9wbGFuZSwKKwkuZGVzdHJveSA9IGttYl9wbGFuZV9k ZXN0cm95LAorCS5yZXNldCA9IGttYl9wbGFuZV9yZXNldCwKKwkuYXRvbWljX2R1cGxpY2F0ZV9z dGF0ZSA9IGttYl9wbGFuZV9kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95X3N0YXRl ID0ga21iX2Rlc3Ryb3lfcGxhbmVfc3RhdGUsCit9OworCitzdHJ1Y3Qga21iX3BsYW5lICprbWJf cGxhbmVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQoreworCXN0cnVjdCBrbWJfZHJtX3By aXZhdGUgKmxjZCA9IHRvX2ttYihkcm0pOworCXN0cnVjdCBrbWJfcGxhbmUgKnBsYW5lID0gTlVM TDsKKwlzdHJ1Y3Qga21iX3BsYW5lICpwcmltYXJ5ID0gTlVMTDsKKwlpbnQgaSA9IDA7CisJaW50 IHJldCA9IDA7CisJZW51bSBkcm1fcGxhbmVfdHlwZSBwbGFuZV90eXBlOworCWNvbnN0IHVpbnQz Ml90ICpwbGFuZV9mb3JtYXRzOworCWludCBudW1fcGxhbmVfZm9ybWF0czsKKworCWZvciAoaSA9 IDA7IGkgPCBsY2QtPm5fbGF5ZXJzOyBpKyspIHsKKwkJcGxhbmUgPSBkcm1tX2t6YWxsb2MoZHJt LCBzaXplb2YoKnBsYW5lKSwgR0ZQX0tFUk5FTCk7CisKKwkJaWYgKCFwbGFuZSkgeworCQkJZHJt X2Vycihkcm0sICJGYWlsZWQgdG8gYWxsb2NhdGUgcGxhbmVcbiIpOworCQkJcmV0dXJuIEVSUl9Q VFIoLUVOT01FTSk7CisJCX0KKworCQlwbGFuZV90eXBlID0gKGkgPT0gMCkgPyBEUk1fUExBTkVf VFlQRV9QUklNQVJZIDoKKwkJICAgIERSTV9QTEFORV9UWVBFX09WRVJMQVk7CisJCWlmIChpIDwg MikgeworCQkJcGxhbmVfZm9ybWF0cyA9IGttYl9mb3JtYXRzX3Y7CisJCQludW1fcGxhbmVfZm9y bWF0cyA9IEFSUkFZX1NJWkUoa21iX2Zvcm1hdHNfdik7CisJCX0gZWxzZSB7CisJCQlwbGFuZV9m b3JtYXRzID0ga21iX2Zvcm1hdHNfZzsKKwkJCW51bV9wbGFuZV9mb3JtYXRzID0gQVJSQVlfU0la RShrbWJfZm9ybWF0c19nKTsKKwkJfQorCisJCXJldCA9IGRybV91bml2ZXJzYWxfcGxhbmVfaW5p dChkcm0sICZwbGFuZS0+YmFzZV9wbGFuZSwKKwkJCQkJICAgICAgIFBPU1NJQkxFX0NSVENTLCAm a21iX3BsYW5lX2Z1bmNzLAorCQkJCQkgICAgICAgcGxhbmVfZm9ybWF0cywgbnVtX3BsYW5lX2Zv cm1hdHMsCisJCQkJCSAgICAgICBOVUxMLCBwbGFuZV90eXBlLCAicGxhbmUgJWQiLCBpKTsKKwkJ aWYgKHJldCA8IDApIHsKKwkJCWRybV9lcnIoZHJtLCAiZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0 IGZhaWxlZCAocmV0PSVkKSIsCisJCQkJICByZXQpOworCQkJZ290byBjbGVhbnVwOworCQl9CisJ CWRybV9kYmcoZHJtLCAiJXMgOiAlZCBpPSVkIHR5cGU9JWQiLAorCQkJICBfX2Z1bmNfXywgX19M SU5FX18sCisJCQkgIGksIHBsYW5lX3R5cGUpOworCQlkcm1fcGxhbmVfaGVscGVyX2FkZCgmcGxh bmUtPmJhc2VfcGxhbmUsCisJCQkJICAgICAma21iX3BsYW5lX2hlbHBlcl9mdW5jcyk7CisJCWlm IChwbGFuZV90eXBlID09IERSTV9QTEFORV9UWVBFX1BSSU1BUlkpIHsKKwkJCXByaW1hcnkgPSBw bGFuZTsKKwkJCWxjZC0+cGxhbmUgPSBwbGFuZTsKKwkJfQorCQlkcm1fZGJnKGRybSwgIiVzIDog JWQgcHJpbWFyeT0lcFxuIiwgX19mdW5jX18sIF9fTElORV9fLAorCQkJICAmcHJpbWFyeS0+YmFz ZV9wbGFuZSk7CisJCXBsYW5lLT5pZCA9IGk7CisJfQorCisJcmV0dXJuIHByaW1hcnk7CitjbGVh bnVwOgorCWtmcmVlKHBsYW5lKTsKKwlyZXR1cm4gRVJSX1BUUihyZXQpOworfQpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfcGxhbmUuaCBiL2RyaXZlcnMvZ3B1L2RybS9rbWIv a21iX3BsYW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhmMjM3Zgot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9rbWIva21iX3BsYW5lLmgKQEAgLTAs MCArMSwxMjQgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKyAq CisgKiBDb3B5cmlnaHQgwqkgMjAxOC0yMDIwIEludGVsIENvcnBvcmF0aW9uCisgKi8KKworI2lm bmRlZiBfX0tNQl9QTEFORV9IX18KKyNkZWZpbmUgX19LTUJfUExBTkVfSF9fCisKKyNpbmNsdWRl ICJrbWJfZHJ2LmgiCisKK2V4dGVybiBpbnQga21iX3VuZGVyX2Zsb3c7CitleHRlcm4gaW50IGtt Yl9mbHVzaF9kb25lOworCisjZGVmaW5lIExDRF9JTlRfVkwwX0VSUiAoKExBWUVSMF9ETUFfRklG T19VTkRFUkZMT1cpIHwgXAorCQkJKExBWUVSMF9ETUFfRklGT19PVkVSRkxPVykgfCBcCisJCQko TEFZRVIwX0RNQV9DQl9GSUZPX09WRVJGTE9XKSB8IFwKKwkJCShMQVlFUjBfRE1BX0NCX0ZJRk9f VU5ERVJGTE9XKSB8IFwKKwkJCShMQVlFUjBfRE1BX0NSX0ZJRk9fT1ZFUkZMT1cpIHwgXAorCQkJ KExBWUVSMF9ETUFfQ1JfRklGT19VTkRFUkZMT1cpKQorCisjZGVmaW5lIExDRF9JTlRfVkwxX0VS UiAoKExBWUVSMV9ETUFfRklGT19VTkRFUkZMT1cpIHwgXAorCQkJKExBWUVSMV9ETUFfRklGT19P VkVSRkxPVykgfCBcCisJCQkoTEFZRVIxX0RNQV9DQl9GSUZPX09WRVJGTE9XKSB8IFwKKwkJCShM QVlFUjFfRE1BX0NCX0ZJRk9fVU5ERVJGTE9XKSB8IFwKKwkJCShMQVlFUjFfRE1BX0NSX0ZJRk9f T1ZFUkZMT1cpIHwgXAorCQkJKExBWUVSMV9ETUFfQ1JfRklGT19VTkRFUkZMT1cpKQorCisjZGVm aW5lIExDRF9JTlRfR0wwX0VSUiAoTEFZRVIyX0RNQV9GSUZPX09WRVJGTE9XIHwgTEFZRVIyX0RN QV9GSUZPX1VOREVSRkxPVykKKyNkZWZpbmUgTENEX0lOVF9HTDFfRVJSIChMQVlFUjNfRE1BX0ZJ Rk9fT1ZFUkZMT1cgfCBMQVlFUjNfRE1BX0ZJRk9fVU5ERVJGTE9XKQorI2RlZmluZSBMQ0RfSU5U X1ZMMCAoTEFZRVIwX0RNQV9ET05FIHwgTEFZRVIwX0RNQV9JRExFIHwgTENEX0lOVF9WTDBfRVJS KQorI2RlZmluZSBMQ0RfSU5UX1ZMMSAoTEFZRVIxX0RNQV9ET05FIHwgTEFZRVIxX0RNQV9JRExF IHwgTENEX0lOVF9WTDFfRVJSKQorI2RlZmluZSBMQ0RfSU5UX0dMMCAoTEFZRVIyX0RNQV9ET05F IHwgTEFZRVIyX0RNQV9JRExFIHwgTENEX0lOVF9HTDBfRVJSKQorI2RlZmluZSBMQ0RfSU5UX0dM MSAoTEFZRVIzX0RNQV9ET05FIHwgTEFZRVIzX0RNQV9JRExFIHwgTENEX0lOVF9HTDFfRVJSKQor I2RlZmluZSBMQ0RfSU5UX0RNQV9FUlIgKExDRF9JTlRfVkwwX0VSUiB8IExDRF9JTlRfVkwxX0VS UiBcCisJCXwgTENEX0lOVF9HTDBfRVJSIHwgTENEX0lOVF9HTDFfRVJSKQorCisjZGVmaW5lIFBP U1NJQkxFX0NSVENTIDEKKyNkZWZpbmUgSU5JVElBTElaRUQgMQorI2RlZmluZSB0b19rbWJfcGxh bmUoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBrbWJfcGxhbmUsIGJhc2VfcGxhbmUpCisKKyNk ZWZpbmUgdG9fa21iX3BsYW5lX3N0YXRlKHgpIFwKKwkJY29udGFpbmVyX29mKHgsIHN0cnVjdCBr bWJfcGxhbmVfc3RhdGUsIGJhc2VfcGxhbmVfc3RhdGUpCisKK2VudW0gbGF5ZXJfaWQgeworCUxB WUVSXzAsCisJTEFZRVJfMSwKKwlMQVlFUl8yLAorCUxBWUVSXzMsCisvLwlLTUJfTUFYX1BMQU5F UywKK307CisKKyNkZWZpbmUgS01CX01BWF9QTEFORVMgMQorCitlbnVtIHN1Yl9wbGFuZV9pZCB7 CisJWV9QTEFORSwKKwlVX1BMQU5FLAorCVZfUExBTkUsCisJTUFYX1NVQl9QTEFORVMsCit9Owor CitzdHJ1Y3Qga21iX3BsYW5lIHsKKwlzdHJ1Y3QgZHJtX3BsYW5lIGJhc2VfcGxhbmU7CisJc3Ry dWN0IGttYl9kcm1fcHJpdmF0ZSBrbWJfZGV2OworCXVuc2lnbmVkIGNoYXIgaWQ7Cit9OworCitz dHJ1Y3Qga21iX3BsYW5lX3N0YXRlIHsKKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIGJhc2VfcGxh bmVfc3RhdGU7CisJdW5zaWduZWQgY2hhciBub19wbGFuZXM7Cit9OworCisvKiBHcmFwaGljcyBs YXllciAobGF5ZXJzIDIgJiAzKSBmb3JtYXRzLCBvbmx5IHBhY2tlZCBmb3JtYXRzICBhcmUgc3Vw cG9ydGVkICovCitzdGF0aWMgY29uc3QgdTMyIGttYl9mb3JtYXRzX2dbXSA9IHsKKwlEUk1fRk9S TUFUX1JHQjMzMiwKKwlEUk1fRk9STUFUX1hSR0I0NDQ0LCBEUk1fRk9STUFUX1hCR1I0NDQ0LAor CURSTV9GT1JNQVRfQVJHQjQ0NDQsIERSTV9GT1JNQVRfQUJHUjQ0NDQsCisJRFJNX0ZPUk1BVF9Y UkdCMTU1NSwgRFJNX0ZPUk1BVF9YQkdSMTU1NSwKKwlEUk1fRk9STUFUX0FSR0IxNTU1LCBEUk1f Rk9STUFUX0FCR1IxNTU1LAorCURSTV9GT1JNQVRfUkdCNTY1LCBEUk1fRk9STUFUX0JHUjU2NSwK KwlEUk1fRk9STUFUX1JHQjg4OCwgRFJNX0ZPUk1BVF9CR1I4ODgsCisJRFJNX0ZPUk1BVF9YUkdC ODg4OCwgRFJNX0ZPUk1BVF9YQkdSODg4OCwKKwlEUk1fRk9STUFUX0FSR0I4ODg4LCBEUk1fRk9S TUFUX0FCR1I4ODg4LAorfTsKKworI2RlZmluZSBNQVhfRk9STUFUX0cJKEFSUkFZX1NJWkUoa21i X2Zvcm1hdHNfZykpCisjZGVmaW5lIE1BWF9GT1JNQVRfVgkoQVJSQVlfU0laRShrbWJfZm9ybWF0 c192KSkKKworLyogVmlkZW8gbGF5ZXIgKCAwICYgMSkgZm9ybWF0cywgcGFja2VkIGFuZCBwbGFu YXIgZm9ybWF0cyBhcmUgc3VwcG9ydGVkICovCitzdGF0aWMgY29uc3QgdTMyIGttYl9mb3JtYXRz X3ZbXSA9IHsKKwkvKiBwYWNrZWQgZm9ybWF0cyAqLworCURSTV9GT1JNQVRfUkdCMzMyLAorCURS TV9GT1JNQVRfWFJHQjQ0NDQsIERSTV9GT1JNQVRfWEJHUjQ0NDQsCisJRFJNX0ZPUk1BVF9BUkdC NDQ0NCwgRFJNX0ZPUk1BVF9BQkdSNDQ0NCwKKwlEUk1fRk9STUFUX1hSR0IxNTU1LCBEUk1fRk9S TUFUX1hCR1IxNTU1LAorCURSTV9GT1JNQVRfQVJHQjE1NTUsIERSTV9GT1JNQVRfQUJHUjE1NTUs CisJRFJNX0ZPUk1BVF9SR0I1NjUsIERSTV9GT1JNQVRfQkdSNTY1LAorCURSTV9GT1JNQVRfUkdC ODg4LCBEUk1fRk9STUFUX0JHUjg4OCwKKwlEUk1fRk9STUFUX1hSR0I4ODg4LCBEUk1fRk9STUFU X1hCR1I4ODg4LAorCURSTV9GT1JNQVRfQVJHQjg4ODgsIERSTV9GT1JNQVRfQUJHUjg4ODgsCisJ LypwbGFuYXIgZm9ybWF0cyAqLworCURSTV9GT1JNQVRfWVVWNDIwLCBEUk1fRk9STUFUX1lWVTQy MCwKKwlEUk1fRk9STUFUX1lVVjQyMiwgRFJNX0ZPUk1BVF9ZVlU0MjIsCisJRFJNX0ZPUk1BVF9Z VVY0NDQsIERSTV9GT1JNQVRfWVZVNDQ0LAorCURSTV9GT1JNQVRfTlYxMiwgRFJNX0ZPUk1BVF9O VjIxLAorfTsKKworLyogQ29udmVyc2lvbiAoeXV2LT5yZ2IpIG1hdHJpeCBmcm9tIG15cmlhZHgg Ki8KK3N0YXRpYyBjb25zdCB1MzIgY3NjX2NvZWZfbGNkW10gPSB7CisJMTAyNCwgMCwgMTQzNiwK KwkxMDI0LCAtMzUyLCAtNzMxLAorCTEwMjQsIDE4MTQsIDAsCisJLTE3OSwgMTI1LCAtMjI2Cit9 OworCitzdHJ1Y3QgbGF5ZXJfc3RhdHVzIHsKKwlib29sIGRpc2FibGU7CisJdTMyIGN0cmw7Cit9 OworCitleHRlcm4gc3RydWN0IGxheWVyX3N0YXR1cyBwbGFuZV9zdGF0dXNbS01CX01BWF9QTEFO RVNdOworCitzdHJ1Y3Qga21iX3BsYW5lICprbWJfcGxhbmVfaW5pdChzdHJ1Y3QgZHJtX2Rldmlj ZSAqZHJtKTsKK3ZvaWQga21iX3BsYW5lX2Rlc3Ryb3koc3RydWN0IGRybV9wbGFuZSAqcGxhbmUp OworI2VuZGlmIC8qIF9fS01CX1BMQU5FX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2ttYi9rbWJfcmVncy5oIGIvZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfcmVncy5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5M2FjZDEKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL2dwdS9kcm0va21iL2ttYl9yZWdzLmgKQEAgLTAsMCArMSw3MzggQEAKKy8qIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKyAqCisgKiBDb3B5cmlnaHQgwqkg MjAxOC0yMDIwIEludGVsIENvcnBvcmF0aW9uCisgKi8KKworI2lmbmRlZiBfX0tNQl9SRUdTX0hf XworI2RlZmluZSBfX0tNQl9SRUdTX0hfXworCisjZGVmaW5lIEVOQUJMRQkJCQkJIDEKKyNkZWZp bmUgRElTQUJMRQkJCQkJIDAKKy8qZnJvbSBEYXRhIEJvb2sgc2VjdGlvbiAxMi41LjguMSBwYWdl IDQzMjIgKi8KKyNkZWZpbmUgQ1BSX0JBU0VfQUREUiAgICAgICAgICAgICAgICAgICAgICAgICAg ICgweDIwODEwMDAwKQorI2RlZmluZSBNSVBJX0JBU0VfQUREUiAgICAgICAgICAgICAgICAgICAg ICAgICAgKDB4MjA5MDAwMDApCisvKmZyb20gRGF0YSBCb29rIHNlY3Rpb24gMTIuMTEuNi4xIHBh Z2UgNDk3MiAqLworI2RlZmluZSBMQ0RfQkFTRV9BRERSICAgICAgICAgICAgICAgICAgICAgICAg ICAgKDB4MjA5MzAwMDApCisjZGVmaW5lIE1TU19DQU1fQkFTRV9BRERSCQkJKE1JUElfQkFTRV9B RERSICsgMHgxMDAwMCkKKyNkZWZpbmUgTENEX01NSU9fU0laRQkJCQkoMHgzMDAwKQorI2RlZmlu ZSBNSVBJX01NSU9fU0laRQkJCQkoMHg0MDAwKQorI2RlZmluZSBNU1NfQ0FNX01NSU9fU0laRQkJ CSgweDMwKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgkJICAgTENEIGNvbnRyb2xsZXIgY29u dHJvbCByZWdpc3RlciBkZWZpbmVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBMQ0Rf Q09OVFJPTAkJCQkoMHg0ICogMHgwMDApCisjZGVmaW5lIExDRF9DVFJMX1BST0dSRVNTSVZFCQkJ ICAoMDw8MCkKKyNkZWZpbmUgTENEX0NUUkxfSU5URVJMQUNFRAkJCSAgKDE8PDApCisjZGVmaW5l IExDRF9DVFJMX0VOQUJMRQkJCQkgICgxPDwxKQorI2RlZmluZSBMQ0RfQ1RSTF9WTDFfRU5BQkxF CQkJICAoMTw8MikKKyNkZWZpbmUgTENEX0NUUkxfVkwyX0VOQUJMRQkJCSAgKDE8PDMpCisjZGVm aW5lIExDRF9DVFJMX0dMMV9FTkFCTEUJCQkgICgxPDw0KQorI2RlZmluZSBMQ0RfQ1RSTF9HTDJf RU5BQkxFCQkJICAoMTw8NSkKKyNkZWZpbmUgTENEX0NUUkxfQUxQSEFfQkxFTkRfVkwxCQkgICgw PDw2KQorI2RlZmluZSBMQ0RfQ1RSTF9BTFBIQV9CTEVORF9WTDIJCSAgKDE8PDYpCisjZGVmaW5l IExDRF9DVFJMX0FMUEhBX0JMRU5EX0dMMQkJICAoMjw8NikKKyNkZWZpbmUgTENEX0NUUkxfQUxQ SEFfQkxFTkRfR0wyCQkgICgzPDw2KQorI2RlZmluZSBMQ0RfQ1RSTF9BTFBIQV9UT1BfVkwxCQkJ ICAoMDw8OCkKKyNkZWZpbmUgTENEX0NUUkxfQUxQSEFfVE9QX1ZMMgkJCSAgKDE8PDgpCisjZGVm aW5lIExDRF9DVFJMX0FMUEhBX1RPUF9HTDEJCQkgICgyPDw4KQorI2RlZmluZSBMQ0RfQ1RSTF9B TFBIQV9UT1BfR0wyCQkJICAoMzw8OCkKKyNkZWZpbmUgTENEX0NUUkxfQUxQSEFfTUlERExFX1ZM MQkJICAoMDw8MTApCisjZGVmaW5lIExDRF9DVFJMX0FMUEhBX01JRERMRV9WTDIJCSAgKDE8PDEw KQorI2RlZmluZSBMQ0RfQ1RSTF9BTFBIQV9NSURETEVfR0wxCQkgICgyPDwxMCkKKyNkZWZpbmUg TENEX0NUUkxfQUxQSEFfTUlERExFX0dMMgkJICAoMzw8MTApCisjZGVmaW5lIExDRF9DVFJMX0FM UEhBX0JPVFRPTV9WTDEJCSAgKDA8PDEyKQorI2RlZmluZSBMQ0RfQ1RSTF9BTFBIQV9CT1RUT01f VkwyCQkgICgxPDwxMikKKyNkZWZpbmUgTENEX0NUUkxfQUxQSEFfQk9UVE9NX0dMMQkJICAoMjw8 MTIpCisjZGVmaW5lIExDRF9DVFJMX0FMUEhBX0JPVFRPTV9HTDIJCSAgKDM8PDEyKQorI2RlZmlu ZSBMQ0RfQ1RSTF9USU1fR0VOX0VOQUJMRQkJCSAgKDE8PDE0KQorI2RlZmluZSBMQ0RfQ1RSTF9D T05USU5VT1VTCQkJICAoMDw8MTUpCisjZGVmaW5lIExDRF9DVFJMX09ORV9TSE9UCQkJICAoMTw8 MTUpCisjZGVmaW5lIExDRF9DVFJMX1BXTTBfRU4JCQkgICgxPDwxNikKKyNkZWZpbmUgTENEX0NU UkxfUFdNMV9FTgkJCSAgKDE8PDE3KQorI2RlZmluZSBMQ0RfQ1RSTF9QV00yX0VOCQkJICAoMTw8 MTgpCisjZGVmaW5lIExDRF9DVFJMX09VVFBVVF9ESVNBQkxFRAkJICAoMDw8MTkpCisjZGVmaW5l IExDRF9DVFJMX09VVFBVVF9FTkFCTEVECQkJICAoMTw8MTkpCisjZGVmaW5lIExDRF9DVFJMX0JQ T1JDSF9FTkFCTEUJCQkgICgxPDwyMSkKKyNkZWZpbmUgTENEX0NUUkxfRlBPUkNIX0VOQUJMRQkJ CSAgKDE8PDIyKQorI2RlZmluZSBMQ0RfQ1RSTF9QSVBFTElORV9ETUEJCQkgICgxPDwyOCkKKyNk ZWZpbmUgTENEX0NUUkxfVkhTWU5DX0lETEVfTFZMCQkgICgxPDwzMSkKKworLyppbnRlcnJ1cHRz ICovCisjZGVmaW5lIExDRF9JTlRfU1RBVFVTCQkJCSgweDQgKiAweDAwMSkKKyNkZWZpbmUgTENE X0lOVF9FT0YJCQkJICAoMTw8MCkKKyNkZWZpbmUgTENEX0lOVF9MSU5FX0NNUAkJCSAgKDE8PDEp CisjZGVmaW5lIExDRF9JTlRfVkVSVF9DT01QCQkJICAoMTw8MikKKyNkZWZpbmUgTEFZRVIwX0RN QV9ET05FCQkJCSAgKDE8PDMpCisjZGVmaW5lIExBWUVSMF9ETUFfSURMRQkJCQkgICgxPDw0KQor I2RlZmluZSBMQVlFUjBfRE1BX0ZJRk9fT1ZFUkZMT1cJCSAgKDE8PDUpCisjZGVmaW5lIExBWUVS MF9ETUFfRklGT19VTkRFUkZMT1cJCSAgKDE8PDYpCisjZGVmaW5lIExBWUVSMF9ETUFfQ0JfRklG T19PVkVSRkxPVwkJICAoMTw8NykKKyNkZWZpbmUgTEFZRVIwX0RNQV9DQl9GSUZPX1VOREVSRkxP VwkJICAoMTw8OCkKKyNkZWZpbmUgTEFZRVIwX0RNQV9DUl9GSUZPX09WRVJGTE9XCQkgICgxPDw5 KQorI2RlZmluZSBMQVlFUjBfRE1BX0NSX0ZJRk9fVU5ERVJGTE9XCQkgICgxPDwxMCkKKyNkZWZp bmUgTEFZRVIxX0RNQV9ET05FCQkJCSAgKDE8PDExKQorI2RlZmluZSBMQVlFUjFfRE1BX0lETEUJ CQkJICAoMTw8MTIpCisjZGVmaW5lIExBWUVSMV9ETUFfRklGT19PVkVSRkxPVwkJICAoMTw8MTMp CisjZGVmaW5lIExBWUVSMV9ETUFfRklGT19VTkRFUkZMT1cJCSAgKDE8PDE0KQorI2RlZmluZSBM QVlFUjFfRE1BX0NCX0ZJRk9fT1ZFUkZMT1cJCSAgKDE8PDE1KQorI2RlZmluZSBMQVlFUjFfRE1B X0NCX0ZJRk9fVU5ERVJGTE9XCQkgICgxPDwxNikKKyNkZWZpbmUgTEFZRVIxX0RNQV9DUl9GSUZP X09WRVJGTE9XCQkgICgxPDwxNykKKyNkZWZpbmUgTEFZRVIxX0RNQV9DUl9GSUZPX1VOREVSRkxP VwkJICAoMTw8MTgpCisjZGVmaW5lIExBWUVSMl9ETUFfRE9ORQkJCQkgICgxPDwxOSkKKyNkZWZp bmUgTEFZRVIyX0RNQV9JRExFCQkJCSAgKDE8PDIwKQorI2RlZmluZSBMQVlFUjJfRE1BX0ZJRk9f T1ZFUkZMT1cJCSAgKDE8PDIxKQorI2RlZmluZSBMQVlFUjJfRE1BX0ZJRk9fVU5ERVJGTE9XCQkg ICgxPDwyMikKKyNkZWZpbmUgTEFZRVIzX0RNQV9ET05FCQkJCSAgKDE8PDIzKQorI2RlZmluZSBM QVlFUjNfRE1BX0lETEUJCQkJICAoMTw8MjQpCisjZGVmaW5lIExBWUVSM19ETUFfRklGT19PVkVS RkxPVwkJICAoMTw8MjUpCisjZGVmaW5lIExBWUVSM19ETUFfRklGT19VTkRFUkZMT1cJCSAgKDE8 PDI2KQorI2RlZmluZSBMQ0RfSU5UX0xBWUVSCQkJCSAgKDB4MDdmZmZmZjgpCisjZGVmaW5lIExD RF9JTlRfRU5BQkxFCQkJCSgweDQgKiAweDAwMikKKyNkZWZpbmUgTENEX0lOVF9DTEVBUgkJCQko MHg0ICogMHgwMDMpCisjZGVmaW5lIExDRF9MSU5FX0NPVU5UCQkJCSgweDQgKiAweDAwNCkKKyNk ZWZpbmUgTENEX0xJTkVfQ09NUEFSRQkJCSgweDQgKiAweDAwNSkKKyNkZWZpbmUgTENEX1ZTVEFU VVMJCQkJKDB4NCAqIDB4MDA2KQorCisvKkxDRF9WU1RBVFVTX0NPTVBBUkUgVmVydGNhbCBpbnRl cnZhbCBpbiB3aGljaCB0byBnZW5lcmF0ZSB2ZXJ0Y2FsCisgKiBpbnRlcnZhbCBpbnRlcnJ1cHQK KyAqLworLyogQklUUyAxMyBhbmQgMTQgKi8KKyNkZWZpbmUgTENEX1ZTVEFUVVNfQ09NUEFSRQkJ CSgweDQgKiAweDAwNykKKyNkZWZpbmUgTENEX1ZTVEFUVVNfVkVSVElDQUxfU1RBVFVTX01BU0sJ ICAoMzw8MTMpCisjZGVmaW5lIExDRF9WU1RBVFVTX0NPTVBBUkVfVlNZTkMJCSAgKDA8PDEzKQor I2RlZmluZSBMQ0RfVlNUQVRVU19DT01QQVJFX0JBQ0tQT1JDSAkJICAoMTw8MTMpCisjZGVmaW5l IExDRF9WU1RBVFVTX0NPTVBBUkVfQUNUSVZFCQkgICgyPDwxMykKKyNkZWZpbmUgTENEX1ZTVEFU VVNfQ09NUEFSRV9GUk9OVF9QT1JDSAkJICAoMzw8MTMpCisKKyNkZWZpbmUgTENEX1NDUkVFTl9X SURUSAkJCSgweDQgKiAweDAwOCkKKyNkZWZpbmUgTENEX1NDUkVFTl9IRUlHSFQJCQkoMHg0ICog MHgwMDkpCisjZGVmaW5lIExDRF9GSUVMRF9JTlRfQ0ZHCQkJKDB4NCAqIDB4MDBhKQorI2RlZmlu ZSBMQ0RfRklGT19GTFVTSAkJCQkoMHg0ICogMHgwMGIpCisjZGVmaW5lIExDRF9CR19DT0xPVVJf TFMJCQkoMHg0ICogMHgwMGMpCisjZGVmaW5lIExDRF9CR19DT0xPVVJfTVMJCQkoMHg0ICogMHgw MGQpCisjZGVmaW5lIExDRF9SQU1fQ0ZHCQkJICAgICAgICAoMHg0ICogMHgwMGUpCisKKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqCisgKgkJICAgTENEIGNvbnRyb2xsZXIgTGF5ZXIgY29uZmlnIHJlZ2lz dGVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisjZGVmaW5lIExDRF9MQVlFUjBfQ0ZHCQkg ICAgICAgICgweDQgKiAweDEwMCkKKyNkZWZpbmUgTENEX0xBWUVSbl9DRkcoTikJCQkoTENEX0xB WUVSMF9DRkcgKyAoMHg0MDAqTikpCisjZGVmaW5lIExDRF9MQVlFUl9TQ0FMRV9ICQkJICAoMTw8 MSkKKyNkZWZpbmUgTENEX0xBWUVSX1NDQUxFX1YJCQkgICgxPDwyKQorI2RlZmluZSBMQ0RfTEFZ RVJfU0NBTEVfSF9WCQkJICAoTENEX0xBWUVSX1NDQUxFX0ggfCBcCisJCQkJCQkJTENEX0xBWUVS X1NDQUxFX1YpCisjZGVmaW5lIExDRF9MQVlFUl9DU0NfRU4JCQkgICgxPDwzKQorI2RlZmluZSBM Q0RfTEFZRVJfQUxQSEFfU1RBVElDCQkJICAoMTw8NCkKKyNkZWZpbmUgTENEX0xBWUVSX0FMUEhB X0VNQkVECQkJICAoMTw8NSkKKyNkZWZpbmUgTENEX0xBWUVSX0FMUEhBX0NPTUJJCQkJICAoTENE X0xBWUVSX0FMUEhBX1NUQVRJQyB8IFwKKwkJCQkJCQlMQ0RfTEFZRVJfQUxQSEFfRU1CRUQpCisv KiBSR0IgbXVsdGlwbGllZCB3aXRoIGFscGhhICovCisjZGVmaW5lIExDRF9MQVlFUl9BTFBIQV9Q UkVNVUxUCQkJICAoMTw8NikKKyNkZWZpbmUgTENEX0xBWUVSX0lOVkVSVF9DT0wJCQkgICgxPDw3 KQorI2RlZmluZSBMQ0RfTEFZRVJfVFJBTlNQQVJFTlRfRU4JCSAgKDE8PDgpCisjZGVmaW5lIExD RF9MQVlFUl9GT1JNQVRfWUNCQ1I0NDRQTEFOCQkgICgwPDw5KQorI2RlZmluZSBMQ0RfTEFZRVJf Rk9STUFUX1lDQkNSNDIyUExBTgkJICAoMTw8OSkKKyNkZWZpbmUgTENEX0xBWUVSX0ZPUk1BVF9Z Q0JDUjQyMFBMQU4JCSAgKDI8PDkpCisjZGVmaW5lIExDRF9MQVlFUl9GT1JNQVRfUkdCODg4UExB TgkJICAoMzw8OSkKKyNkZWZpbmUgTENEX0xBWUVSX0ZPUk1BVF9ZQ0JDUjQ0NExJTgkJICAoNDw8 OSkKKyNkZWZpbmUgTENEX0xBWUVSX0ZPUk1BVF9ZQ0JDUjQyMkxJTgkJICAoNTw8OSkKKyNkZWZp bmUgTENEX0xBWUVSX0ZPUk1BVF9SR0I4ODgJCQkgICg2PDw5KQorI2RlZmluZSBMQ0RfTEFZRVJf Rk9STUFUX1JHQkE4ODg4CQkgICg3PDw5KQorI2RlZmluZSBMQ0RfTEFZRVJfRk9STUFUX1JHQlg4 ODg4CQkgICg4PDw5KQorI2RlZmluZSBMQ0RfTEFZRVJfRk9STUFUX1JHQjU2NQkJCSAgKDk8PDkp CisjZGVmaW5lIExDRF9MQVlFUl9GT1JNQVRfUkdCQTE1NTUJCSAgKDB4YTw8OSkKKyNkZWZpbmUg TENEX0xBWUVSX0ZPUk1BVF9YUkdCMTU1NQkJICAoMHhiPDw5KQorI2RlZmluZSBMQ0RfTEFZRVJf Rk9STUFUX1JHQjQ0NAkJCSAgKDB4Yzw8OSkKKyNkZWZpbmUgTENEX0xBWUVSX0ZPUk1BVF9SR0JB NDQ0NAkJICAoMHhkPDw5KQorI2RlZmluZSBMQ0RfTEFZRVJfRk9STUFUX1JHQlg0NDQ0CQkgICgw eGU8PDkpCisjZGVmaW5lIExDRF9MQVlFUl9GT1JNQVRfUkdCMzMyCQkJICAoMHhmPDw5KQorI2Rl ZmluZSBMQ0RfTEFZRVJfRk9STUFUX1JHQkEzMzI4CQkgICgweDEwPDw5KQorI2RlZmluZSBMQ0Rf TEFZRVJfRk9STUFUX1JHQlgzMzI4CQkgICgweDExPDw5KQorI2RlZmluZSBMQ0RfTEFZRVJfRk9S TUFUX0NMVVQJCQkgICgweDEyPDw5KQorI2RlZmluZSBMQ0RfTEFZRVJfRk9STUFUX05WMTIJCQkg ICgweDFjPDw5KQorI2RlZmluZSBMQ0RfTEFZRVJfUExBTkFSX1NUT1JBR0UJCSAgKDE8PDE0KQor I2RlZmluZSBMQ0RfTEFZRVJfOEJQUAkJCQkgICgwPDwxNSkKKyNkZWZpbmUgTENEX0xBWUVSXzE2 QlBQCQkJCSAgKDE8PDE1KQorI2RlZmluZSBMQ0RfTEFZRVJfMjRCUFAJCQkJICAoMjw8MTUpCisj ZGVmaW5lIExDRF9MQVlFUl8zMkJQUAkJCQkgICgzPDwxNSkKKyNkZWZpbmUgTENEX0xBWUVSX1lf T1JERVIJCQkgICgxPDwxNykKKyNkZWZpbmUgTENEX0xBWUVSX0NSQ0JfT1JERVIJCQkgICgxPDwx OCkKKyNkZWZpbmUgTENEX0xBWUVSX0JHUl9PUkRFUgkJCSAgKDE8PDE5KQorI2RlZmluZSBMQ0Rf TEFZRVJfTFVUXzJFTlQJCQkgICgwPDwyMCkKKyNkZWZpbmUgTENEX0xBWUVSX0xVVF80RU5UCQkJ ICAoMTw8MjApCisjZGVmaW5lIExDRF9MQVlFUl9MVVRfMTZFTlQJCQkgICgyPDwyMCkKKyNkZWZp bmUgTENEX0xBWUVSX05PX0ZMSVAJCQkgICgwPDwyMikKKyNkZWZpbmUgTENEX0xBWUVSX0ZMSVBf VgkJCSAgKDE8PDIyKQorI2RlZmluZSBMQ0RfTEFZRVJfRkxJUF9ICQkJICAoMjw8MjIpCisjZGVm aW5lIExDRF9MQVlFUl9ST1RfUjkwCQkJICAoMzw8MjIpCisjZGVmaW5lIExDRF9MQVlFUl9ST1Rf TDkwCQkJICAoNDw8MjIpCisjZGVmaW5lIExDRF9MQVlFUl9ST1RfMTgwCQkJICAoNTw8MjIpCisj ZGVmaW5lIExDRF9MQVlFUl9GSUZPXzAwCQkJICAoMDw8MjUpCisjZGVmaW5lIExDRF9MQVlFUl9G SUZPXzI1CQkJICAoMTw8MjUpCisjZGVmaW5lIExDRF9MQVlFUl9GSUZPXzUwCQkJICAoMjw8MjUp CisjZGVmaW5lIExDRF9MQVlFUl9GSUZPXzEwMAkJCSAgKDM8PDI1KQorI2RlZmluZSBMQ0RfTEFZ RVJfSU5URVJMRUFWRV9ESVMJCSAgKDA8PDI3KQorI2RlZmluZSBMQ0RfTEFZRVJfSU5URVJMRUFW RV9WCQkJICAoMTw8MjcpCisjZGVmaW5lIExDRF9MQVlFUl9JTlRFUkxFQVZFX0gJCQkgICgyPDwy NykKKyNkZWZpbmUgTENEX0xBWUVSX0lOVEVSTEVBVkVfQ0gJCQkgICgzPDwyNykKKyNkZWZpbmUg TENEX0xBWUVSX0lOVEVSTEVBVkVfVl9TVUIJCSAgKDQ8PDI3KQorI2RlZmluZSBMQ0RfTEFZRVJf SU5URVJMRUFWRV9IX1NVQgkJICAoNTw8MjcpCisjZGVmaW5lIExDRF9MQVlFUl9JTlRFUkxFQVZF X0NIX1NVQgkJICAoNjw8MjcpCisjZGVmaW5lIExDRF9MQVlFUl9JTlRFUl9QT1NfRVZFTgkJICAo MDw8MzApCisjZGVmaW5lIExDRF9MQVlFUl9JTlRFUl9QT1NfT0RECQkJICAoMTw8MzApCisKKyNk ZWZpbmUgTENEX0xBWUVSMF9DT0xfU1RBUlQJCSgweDQgKiAweDEwMSkKKyNkZWZpbmUgTENEX0xB WUVSbl9DT0xfU1RBUlQoTikJCShMQ0RfTEFZRVIwX0NPTF9TVEFSVCArICgweDQwMCpOKSkKKyNk ZWZpbmUgTENEX0xBWUVSMF9ST1dfU1RBUlQJCSgweDQgKiAweDEwMikKKyNkZWZpbmUgTENEX0xB WUVSbl9ST1dfU1RBUlQoTikJCShMQ0RfTEFZRVIwX1JPV19TVEFSVCArICgweDQwMCpOKSkKKyNk ZWZpbmUgTENEX0xBWUVSMF9XSURUSAkJKDB4NCAqIDB4MTAzKQorI2RlZmluZSBMQ0RfTEFZRVJu X1dJRFRIKE4pCQkoTENEX0xBWUVSMF9XSURUSCArICgweDQwMCpOKSkKKyNkZWZpbmUgTENEX0xB WUVSMF9IRUlHSFQJCSgweDQgKiAweDEwNCkKKyNkZWZpbmUgTENEX0xBWUVSbl9IRUlHSFQoTikJ CShMQ0RfTEFZRVIwX0hFSUdIVCArICgweDQwMCpOKSkKKyNkZWZpbmUgTENEX0xBWUVSMF9TQ0FM RV9DRkcJCSgweDQgKiAweDEwNSkKKyNkZWZpbmUgTENEX0xBWUVSbl9TQ0FMRV9DRkcoTikJCShM Q0RfTEFZRVIwX1NDQUxFX0NGRyArICgweDQwMCpOKSkKKyNkZWZpbmUgTENEX0xBWUVSMF9BTFBI QQkJKDB4NCAqIDB4MTA2KQorI2RlZmluZSBMQ0RfTEFZRVJuX0FMUEhBKE4pCQkoTENEX0xBWUVS MF9BTFBIQSArICgweDQwMCpOKSkKKyNkZWZpbmUgTENEX0xBWUVSMF9JTlZfQ09MT1VSX0xTCSgw eDQgKiAweDEwNykKKyNkZWZpbmUgTENEX0xBWUVSbl9JTlZfQ09MT1VSX0xTKE4pCShMQ0RfTEFZ RVIwX0lOVl9DT0xPVVJfTFMgKyAoMHg0MDAqTikpCisjZGVmaW5lIExDRF9MQVlFUjBfSU5WX0NP TE9VUl9NUwkoMHg0ICogMHgxMDgpCisjZGVmaW5lIExDRF9MQVlFUm5fSU5WX0NPTE9VUl9NUyhO KQkoTENEX0xBWUVSMF9JTlZfQ09MT1VSX01TICsgKDB4NDAwKk4pKQorI2RlZmluZSBMQ0RfTEFZ RVIwX1RSQU5TX0NPTE9VUl9MUwkoMHg0ICogMHgxMDkpCisjZGVmaW5lIExDRF9MQVlFUm5fVFJB TlNfQ09MT1VSX0xTKE4pCShMQ0RfTEFZRVIwX1RSQU5TX0NPTE9VUl9MUyArICgweDQwMCpOKSkK KyNkZWZpbmUgTENEX0xBWUVSMF9UUkFOU19DT0xPVVJfTVMJKDB4NCAqIDB4MTBhKQorI2RlZmlu ZSBMQ0RfTEFZRVJuX1RSQU5TX0NPTE9VUl9NUyhOKQkoTENEX0xBWUVSMF9UUkFOU19DT0xPVVJf TVMgKyAoMHg0MDAqTikpCisjZGVmaW5lIExDRF9MQVlFUjBfQ1NDX0NPRUZGMTEJCSgweDQgKiAw eDEwYikKKyNkZWZpbmUgTENEX0xBWUVSbl9DU0NfQ09FRkYxMShOKQkoTENEX0xBWUVSMF9DU0Nf Q09FRkYxMSArICgweDQwMCpOKSkKKyNkZWZpbmUgTENEX0xBWUVSMF9DU0NfQ09FRkYxMgkJKDB4 NCAqIDB4MTBjKQorI2RlZmluZSBMQ0RfTEFZRVJuX0NTQ19DT0VGRjEyKE4pCShMQ0RfTEFZRVIw X0NTQ19DT0VGRjEyICsgKDB4NDAwKk4pKQorI2RlZmluZSBMQ0RfTEFZRVIwX0NTQ19DT0VGRjEz CQkoMHg0ICogMHgxMGQpCisjZGVmaW5lIExDRF9MQVlFUm5fQ1NDX0NPRUZGMTMoTikJKExDRF9M QVlFUjBfQ1NDX0NPRUZGMTMgKyAoMHg0MDAqTikpCisjZGVmaW5lIExDRF9MQVlFUjBfQ1NDX0NP RUZGMjEJCSgweDQgKiAweDEwZSkKKyNkZWZpbmUgTENEX0xBWUVSbl9DU0NfQ09FRkYyMShOKQko TENEX0xBWUVSMF9DU0NfQ09FRkYyMSArICgweDQwMCpOKSkKKyNkZWZpbmUgTENEX0xBWUVSMF9D U0NfQ09FRkYyMgkJKDB4NCAqIDB4MTBmKQorI2RlZmluZSBMQ0RfTEFZRVJuX0NTQ19DT0VGRjIy KE4pCShMQ0RfTEFZRVIwX0NTQ19DT0VGRjIyICsgKDB4NDAwKk4pKQorI2RlZmluZSBMQ0RfTEFZ RVIwX0NTQ19DT0VGRjIzCQkoMHg0ICogMHgxMTApCisjZGVmaW5lIExDRF9MQVlFUm5fQ1NDX0NP RUZGMjMoTikJKExDRF9MQVlFUjBfQ1NDX0NPRUZGMjMgKyAoMHg0MDAqTikpCisjZGVmaW5lIExD RF9MQVlFUjBfQ1NDX0NPRUZGMzEJCSgweDQgKiAweDExMSkKKyNkZWZpbmUgTENEX0xBWUVSbl9D U0NfQ09FRkYzMShOKQkoTENEX0xBWUVSMF9DU0NfQ09FRkYzMSArICgweDQwMCpOKSkKKyNkZWZp bmUgTENEX0xBWUVSMF9DU0NfQ09FRkYzMgkJKDB4NCAqIDB4MTEyKQorI2RlZmluZSBMQ0RfTEFZ RVJuX0NTQ19DT0VGRjMyKE4pCSAgKExDRF9MQVlFUjBfQ1NDX0NPRUZGMzIgKyAoMHg0MDAqTikp CisjZGVmaW5lIExDRF9MQVlFUjBfQ1NDX0NPRUZGMzMJCSgweDQgKiAweDExMykKKyNkZWZpbmUg TENEX0xBWUVSbl9DU0NfQ09FRkYzMyhOKQkoTENEX0xBWUVSMF9DU0NfQ09FRkYzMyArICgweDQw MCpOKSkKKyNkZWZpbmUgTENEX0xBWUVSMF9DU0NfT0ZGMQkJKDB4NCAqIDB4MTE0KQorI2RlZmlu ZSBMQ0RfTEFZRVJuX0NTQ19PRkYxKE4pCQkoTENEX0xBWUVSMF9DU0NfT0ZGMSArICgweDQwMCpO KSkKKyNkZWZpbmUgTENEX0xBWUVSMF9DU0NfT0ZGMgkJKDB4NCAqIDB4MTE1KQorI2RlZmluZSBM Q0RfTEFZRVJuX0NTQ19PRkYyKE4pCQkoTENEX0xBWUVSMF9DU0NfT0ZGMiArICgweDQwMCpOKSkK KyNkZWZpbmUgTENEX0xBWUVSMF9DU0NfT0ZGMwkJKDB4NCAqIDB4MTE2KQorI2RlZmluZSBMQ0Rf TEFZRVJuX0NTQ19PRkYzKE4pCQkoTENEX0xBWUVSMF9DU0NfT0ZGMyArICgweDQwMCpOKSkKKwor LyogIExDRCBjb250cm9sbGVyIExheWVyIERNQSBjb25maWcgcmVnaXN0ZXIgKi8KKyNkZWZpbmUg TENEX0xBWUVSMF9ETUFfQ0ZHCQkJKDB4NCAqIDB4MTE3KQorI2RlZmluZSBMQ0RfTEFZRVJuX0RN QV9DRkcoTikJCQkoTENEX0xBWUVSMF9ETUFfQ0ZHICsgKDB4NDAwKk4pKQorI2RlZmluZSBMQ0Rf RE1BX0xBWUVSX0VOQUJMRQkJCSAgKDE8PDApCisjZGVmaW5lIExDRF9ETUFfTEFZRVJfU1RBVFVT CQkJICAoMTw8MSkKKyNkZWZpbmUgTENEX0RNQV9MQVlFUl9BVVRPX1VQREFURQkJICAoMTw8MikK KyNkZWZpbmUgTENEX0RNQV9MQVlFUl9DT05UX1VQREFURQkJICAoMTw8MykKKyNkZWZpbmUgTENE X0RNQV9MQVlFUl9DT05UX1BJTkdfUE9OR19VUERBVEUJICAoTENEX0RNQV9MQVlFUl9BVVRPX1VQ REFURSBcCisJCQkJCQl8IExDRF9ETUFfTEFZRVJfQ09OVF9VUERBVEUpCisjZGVmaW5lIExDRF9E TUFfTEFZRVJfRklGT19BRFJfTU9ERQkJICAoMTw8NCkKKyNkZWZpbmUgTENEX0RNQV9MQVlFUl9B WElfQlVSU1RfMQkJICAoMTw8NSkKKyNkZWZpbmUgTENEX0RNQV9MQVlFUl9BWElfQlVSU1RfMgkJ ICAoMjw8NSkKKyNkZWZpbmUgTENEX0RNQV9MQVlFUl9BWElfQlVSU1RfMwkJICAoMzw8NSkKKyNk ZWZpbmUgTENEX0RNQV9MQVlFUl9BWElfQlVSU1RfNAkJICAoNDw8NSkKKyNkZWZpbmUgTENEX0RN QV9MQVlFUl9BWElfQlVSU1RfNQkJICAoNTw8NSkKKyNkZWZpbmUgTENEX0RNQV9MQVlFUl9BWElf QlVSU1RfNgkJICAoNjw8NSkKKyNkZWZpbmUgTENEX0RNQV9MQVlFUl9BWElfQlVSU1RfNwkJICAo Nzw8NSkKKyNkZWZpbmUgTENEX0RNQV9MQVlFUl9BWElfQlVSU1RfOAkJICAoODw8NSkKKyNkZWZp bmUgTENEX0RNQV9MQVlFUl9BWElfQlVSU1RfOQkJICAoOTw8NSkKKyNkZWZpbmUgTENEX0RNQV9M QVlFUl9BWElfQlVSU1RfMTAJCSAgKDB4YTw8NSkKKyNkZWZpbmUgTENEX0RNQV9MQVlFUl9BWElf QlVSU1RfMTEJCSAgKDB4Yjw8NSkKKyNkZWZpbmUgTENEX0RNQV9MQVlFUl9BWElfQlVSU1RfMTIJ CSAgKDB4Yzw8NSkKKyNkZWZpbmUgTENEX0RNQV9MQVlFUl9BWElfQlVSU1RfMTMJCSAgKDB4ZDw8 NSkKKyNkZWZpbmUgTENEX0RNQV9MQVlFUl9BWElfQlVSU1RfMTQJCSAgKDB4ZTw8NSkKKyNkZWZp bmUgTENEX0RNQV9MQVlFUl9BWElfQlVSU1RfMTUJCSAgKDB4Zjw8NSkKKyNkZWZpbmUgTENEX0RN QV9MQVlFUl9BWElfQlVSU1RfMTYJCSAgKDB4MTA8PDUpCisjZGVmaW5lIExDRF9ETUFfTEFZRVJf VlNUUklERV9FTgkJICAoMTw8MTApCisKKyNkZWZpbmUgTENEX0xBWUVSMF9ETUFfU1RBUlRfQURS CQkoMHg0ICogMHgxMTgpCisjZGVmaW5lIExDRF9MQVlFUm5fRE1BX1NUQVJUX0FERFIoTikJCShM Q0RfTEFZRVIwX0RNQV9TVEFSVF9BRFIgXAorCQkJCQkJKyAoMHg0MDAqTikpCisjZGVmaW5lIExD RF9MQVlFUjBfRE1BX1NUQVJUX1NIQURPVwkJKDB4NCAqIDB4MTE5KQorI2RlZmluZSBMQ0RfTEFZ RVJuX0RNQV9TVEFSVF9TSEFET1coTikJCShMQ0RfTEFZRVIwX0RNQV9TVEFSVF9TSEFET1cgXAor CQkJCQkJKyAoMHg0MDAqTikpCisjZGVmaW5lIExDRF9MQVlFUjBfRE1BX0xFTgkJCSgweDQgKiAw eDExYSkKKyNkZWZpbmUgTENEX0xBWUVSbl9ETUFfTEVOKE4pCQkJKExDRF9MQVlFUjBfRE1BX0xF TiArIFwKKwkJCQkJCSgweDQwMCpOKSkKKyNkZWZpbmUgTENEX0xBWUVSMF9ETUFfTEVOX1NIQURP VwkJKDB4NCAqIDB4MTFiKQorI2RlZmluZSBMQ0RfTEFZRVJuX0RNQV9MRU5fU0hBRE9XKE4pCQko TENEX0xBWUVSMF9ETUFfTEVOX1NIQURPVyArIFwKKwkJCQkJCSgweDQwMCpOKSkKKyNkZWZpbmUg TENEX0xBWUVSMF9ETUFfU1RBVFVTCQkJKDB4NCAqIDB4MTFjKQorI2RlZmluZSBMQ0RfTEFZRVJu X0RNQV9TVEFUVVMoTikJCShMQ0RfTEFZRVIwX0RNQV9TVEFUVVMgKyBcCisJCQkJCQkoMHg0MDAq TikpCisjZGVmaW5lIExDRF9MQVlFUjBfRE1BX0xJTkVfV0lEVEgJCSgweDQgKiAweDExZCkKKyNk ZWZpbmUgTENEX0xBWUVSbl9ETUFfTElORV9XSURUSChOKQkJKExDRF9MQVlFUjBfRE1BX0xJTkVf V0lEVEggKyBcCisJCQkJCQkoMHg0MDAqTikpCisjZGVmaW5lIExDRF9MQVlFUjBfRE1BX0xJTkVf VlNUUklERQkJKDB4NCAqIDB4MTFlKQorI2RlZmluZSBMQ0RfTEFZRVJuX0RNQV9MSU5FX1ZTVFJJ REUoTikJCShMQ0RfTEFZRVIwX0RNQV9MSU5FX1ZTVFJJREUgK1wKKwkJCQkJCSgweDQwMCpOKSkK KyNkZWZpbmUgTENEX0xBWUVSMF9ETUFfRklGT19TVEFUVVMJCSgweDQgKiAweDExZikKKyNkZWZp bmUgTENEX0xBWUVSbl9ETUFfRklGT19TVEFUVVMoTikJCShMQ0RfTEFZRVIwX0RNQV9GSUZPX1NU QVRVUyArIFwKKwkJCQkJCSgweDQwMCpOKSkKKyNkZWZpbmUgTENEX0xBWUVSMF9DRkcyCQkJCSgw eDQgKiAweDEyMCkKKyNkZWZpbmUgTENEX0xBWUVSbl9DRkcyKE4pCQkJKExDRF9MQVlFUjBfQ0ZH MiArICgweDQwMCpOKSkKKyNkZWZpbmUgTENEX0xBWUVSMF9ETUFfU1RBUlRfQ0JfQURSCQkoMHg0 ICogMHg3MDApCisjZGVmaW5lIExDRF9MQVlFUm5fRE1BX1NUQVJUX0NCX0FEUihOKQkJKExDRF9M QVlFUjBfRE1BX1NUQVJUX0NCX0FEUiArIFwKKwkJCQkJCSgweDIwKk4pKQorI2RlZmluZSBMQ0Rf TEFZRVIwX0RNQV9TVEFSVF9DQl9TSEFET1cJCSgweDQgKiAweDcwMSkKKyNkZWZpbmUgTENEX0xB WUVSbl9ETUFfU1RBUlRfQ0JfU0hBRE9XKE4pCShMQ0RfTEFZRVIwX0RNQV9TVEFSVF9DQl9TSEFE T1dcCisJCQkJCQkrICgweDIwKk4pKQorI2RlZmluZSBMQ0RfTEFZRVIwX0RNQV9DQl9MSU5FX1dJ RFRICQkoMHg0ICogMHg3MDIpCisjZGVmaW5lIExDRF9MQVlFUm5fRE1BX0NCX0xJTkVfV0lEVEgo TikJCShMQ0RfTEFZRVIwX0RNQV9DQl9MSU5FX1dJRFRIICtcCisJCQkJCQkoMHgyMCpOKSkKKyNk ZWZpbmUgTENEX0xBWUVSMF9ETUFfQ0JfTElORV9WU1RSSURFCQkoMHg0ICogMHg3MDMpCisjZGVm aW5lIExDRF9MQVlFUm5fRE1BX0NCX0xJTkVfVlNUUklERShOKQkoTENEX0xBWUVSMF9ETUFfQ0Jf TElORV9WU1RSSURFXAorCQkJCQkJKyAoMHgyMCpOKSkKKyNkZWZpbmUgTENEX0xBWUVSMF9ETUFf U1RBUlRfQ1JfQURSCQkoMHg0ICogMHg3MDQpCisjZGVmaW5lIExDRF9MQVlFUm5fRE1BX1NUQVJU X0NSX0FEUihOKQkJKExDRF9MQVlFUjBfRE1BX1NUQVJUX0NSX0FEUiArIFwKKwkJCQkJCSgweDIw Kk4pKQorI2RlZmluZSBMQ0RfTEFZRVIwX0RNQV9TVEFSVF9DUl9TSEFET1cJCSgweDQgKiAweDcw NSkKKyNkZWZpbmUgTENEX0xBWUVSbl9ETUFfU1RBUlRfQ1JfU0hBRE9XKE4pCVwKKwkJCQkJCShM Q0RfTEFZRVIwX0RNQV9TVEFSVF9DUl9TSEFET1dcCisJCQkJCQkgKyAoMHgyMCpOKSkKKyNkZWZp bmUgTENEX0xBWUVSMF9ETUFfQ1JfTElORV9XSURUSAkJKDB4NCAqIDB4NzA2KQorI2RlZmluZSBM Q0RfTEFZRVJuX0RNQV9DUl9MSU5FX1dJRFRIKE4pCQkoTENEX0xBWUVSMF9ETUFfQ1JfTElORV9X SURUSCArXAorCQkJCQkJKDB4MjAqTikpCisjZGVmaW5lIExDRF9MQVlFUjBfRE1BX0NSX0xJTkVf VlNUUklERQkJKDB4NCAqIDB4NzA3KQorI2RlZmluZSBMQ0RfTEFZRVJuX0RNQV9DUl9MSU5FX1ZT VFJJREUoTikJKExDRF9MQVlFUjBfRE1BX0NSX0xJTkVfVlNUUklERVwKKwkJCQkJCSsgKDB4MjAq TikpCisjZGVmaW5lIExDRF9MQVlFUjFfRE1BX1NUQVJUX0NCX0FEUgkJKDB4NCAqIDB4NzA4KQor I2RlZmluZSBMQ0RfTEFZRVIxX0RNQV9TVEFSVF9DQl9TSEFET1cJCSgweDQgKiAweDcwOSkKKyNk ZWZpbmUgTENEX0xBWUVSMV9ETUFfQ0JfTElORV9XSURUSAkJKDB4NCAqIDB4NzBhKQorI2RlZmlu ZSBMQ0RfTEFZRVIxX0RNQV9DQl9MSU5FX1ZTVFJJREUJCSgweDQgKiAweDcwYikKKyNkZWZpbmUg TENEX0xBWUVSMV9ETUFfU1RBUlRfQ1JfQURSCQkoMHg0ICogMHg3MGMpCisjZGVmaW5lIExDRF9M QVlFUjFfRE1BX1NUQVJUX0NSX1NIQURPVwkJKDB4NCAqIDB4NzBkKQorI2RlZmluZSBMQ0RfTEFZ RVIxX0RNQV9DUl9MSU5FX1dJRFRICQkoMHg0ICogMHg3MGUpCisjZGVmaW5lIExDRF9MQVlFUjFf RE1BX0NSX0xJTkVfVlNUUklERQkJKDB4NCAqIDB4NzBmKQorCisvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KgorICoJCSAgIExDRCBjb250cm9sbGVyIG91dHB1dCBmb3JtYXQgcmVnaXN0ZXIgZGVmaW5lcwor ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIExDRF9PVVRfRk9STUFUX0NGRwkJCSgweDQg KiAweDgwMCkKKyNkZWZpbmUgTENEX09VVEZfRk9STUFUX1JHQjEyMTIxMiAgICAgICAgICAgICAg ICAgKDB4MDApCisjZGVmaW5lIExDRF9PVVRGX0ZPUk1BVF9SR0IxMDEwMTAgICAgICAgICAgICAg ICAgICgweDAxKQorI2RlZmluZSBMQ0RfT1VURl9GT1JNQVRfUkdCODg4ICAgICAgICAgICAgICAg ICAgICAoMHgwMikKKyNkZWZpbmUgTENEX09VVEZfRk9STUFUX1JHQjY2NiAgICAgICAgICAgICAg ICAgICAgKDB4MDMpCisjZGVmaW5lIExDRF9PVVRGX0ZPUk1BVF9SR0I1NjUgICAgICAgICAgICAg ICAgICAgICgweDA0KQorI2RlZmluZSBMQ0RfT1VURl9GT1JNQVRfUkdCNDQ0ICAgICAgICAgICAg ICAgICAgICAoMHgwNSkKKyNkZWZpbmUgTENEX09VVEZfRk9STUFUX01SR0IxMjEyMTIgICAgICAg ICAgICAgICAgKDB4MTApCisjZGVmaW5lIExDRF9PVVRGX0ZPUk1BVF9NUkdCMTAxMDEwICAgICAg ICAgICAgICAgICgweDExKQorI2RlZmluZSBMQ0RfT1VURl9GT1JNQVRfTVJHQjg4OCAgICAgICAg ICAgICAgICAgICAoMHgxMikKKyNkZWZpbmUgTENEX09VVEZfRk9STUFUX01SR0I2NjYgICAgICAg ICAgICAgICAgICAgKDB4MTMpCisjZGVmaW5lIExDRF9PVVRGX0ZPUk1BVF9NUkdCNTY1ICAgICAg ICAgICAgICAgICAgICgweDE0KQorI2RlZmluZSBMQ0RfT1VURl9GT1JNQVRfWUNCQ1I0MjBfOEJf TEVHQUNZICAgICAgICAoMHgwOCkKKyNkZWZpbmUgTENEX09VVEZfRk9STUFUX1lDQkNSNDIwXzhC X0RDSSAgICAgICAgICAgKDB4MDkpCisjZGVmaW5lIExDRF9PVVRGX0ZPUk1BVF9ZQ0JDUjQyMF84 QiAgICAgICAgICAgICAgICgweDBBKQorI2RlZmluZSBMQ0RfT1VURl9GT1JNQVRfWUNCQ1I0MjBf MTBCICAgICAgICAgICAgICAoMHgwQikKKyNkZWZpbmUgTENEX09VVEZfRk9STUFUX1lDQkNSNDIw XzEyQiAgICAgICAgICAgICAgKDB4MEMpCisjZGVmaW5lIExDRF9PVVRGX0ZPUk1BVF9ZQ0JDUjQy Ml84QiAgICAgICAgICAgICAgICgweDBEKQorI2RlZmluZSBMQ0RfT1VURl9GT1JNQVRfWUNCQ1I0 MjJfMTBCICAgICAgICAgICAgICAoMHgwRSkKKyNkZWZpbmUgTENEX09VVEZfRk9STUFUX1lDQkNS NDQ0ICAgICAgICAgICAgICAgICAgKDB4MEYpCisjZGVmaW5lIExDRF9PVVRGX0ZPUk1BVF9NWUNC Q1I0MjBfOEJfTEVHQUNZICAgICAgICgweDE4KQorI2RlZmluZSBMQ0RfT1VURl9GT1JNQVRfTVlD QkNSNDIwXzhCX0RDSSAgICAgICAgICAoMHgxOSkKKyNkZWZpbmUgTENEX09VVEZfRk9STUFUX01Z Q0JDUjQyMF84QiAgICAgICAgICAgICAgKDB4MUEpCisjZGVmaW5lIExDRF9PVVRGX0ZPUk1BVF9N WUNCQ1I0MjBfMTBCICAgICAgICAgICAgICgweDFCKQorI2RlZmluZSBMQ0RfT1VURl9GT1JNQVRf TVlDQkNSNDIwXzEyQiAgICAgICAgICAgICAoMHgxQykKKyNkZWZpbmUgTENEX09VVEZfRk9STUFU X01ZQ0JDUjQyMl84QiAgICAgICAgICAgICAgKDB4MUQpCisjZGVmaW5lIExDRF9PVVRGX0ZPUk1B VF9NWUNCQ1I0MjJfMTBCICAgICAgICAgICAgICgweDFFKQorI2RlZmluZSBMQ0RfT1VURl9GT1JN QVRfTVlDQkNSNDQ0ICAgICAgICAgICAgICAgICAoMHgxRikKKyNkZWZpbmUgTENEX09VVEZfQkdS X09SREVSCQkJICAoMSA8PCA1KQorI2RlZmluZSBMQ0RfT1VURl9ZX09SREVSCQkJICAoMSA8PCA2 KQorI2RlZmluZSBMQ0RfT1VURl9DUkNCX09SREVSCQkJICAoMSA8PCA3KQorI2RlZmluZSBMQ0Rf T1VURl9TWU5DX01PREUJCQkgICgxIDw8IDExKQorI2RlZmluZSBMQ0RfT1VURl9SR0JfQ09OVl9N T0RFCQkJICAoMSA8PCAxNCkKKyNkZWZpbmUgTENEX09VVEZfTUlQSV9SR0JfTU9ERQkJCSAgKDEg PDwgMTgpCisKKyNkZWZpbmUgTENEX0hTWU5DX1dJRFRICQkJCSgweDQgKiAweDgwMSkKKyNkZWZp bmUgTENEX0hfQkFDS1BPUkNICQkJCSgweDQgKiAweDgwMikKKyNkZWZpbmUgTENEX0hfQUNUSVZF V0lEVEgJCQkoMHg0ICogMHg4MDMpCisjZGVmaW5lIExDRF9IX0ZST05UUE9SQ0gJCQkoMHg0ICog MHg4MDQpCisjZGVmaW5lIExDRF9WU1lOQ19XSURUSAkJCQkoMHg0ICogMHg4MDUpCisjZGVmaW5l IExDRF9WX0JBQ0tQT1JDSAkJCQkoMHg0ICogMHg4MDYpCisjZGVmaW5lIExDRF9WX0FDVElWRUhF SUdIVAkJCSgweDQgKiAweDgwNykKKyNkZWZpbmUgTENEX1ZfRlJPTlRQT1JDSAkJCSgweDQgKiAw eDgwOCkKKyNkZWZpbmUgTENEX1ZTWU5DX1NUQVJUCQkJCSgweDQgKiAweDgwOSkKKyNkZWZpbmUg TENEX1ZTWU5DX0VORAkJCQkoMHg0ICogMHg4MGEpCisjZGVmaW5lIExDRF9WX0JBQ0tQT1JDSF9F VkVOCQkJKDB4NCAqIDB4ODBiKQorI2RlZmluZSBMQ0RfVlNZTkNfV0lEVEhfRVZFTgkJCSgweDQg KiAweDgwYykKKyNkZWZpbmUgTENEX1ZfQUNUSVZFSEVJR0hUX0VWRU4JCQkoMHg0ICogMHg4MGQp CisjZGVmaW5lIExDRF9WX0ZST05UUE9SQ0hfRVZFTgkJCSgweDQgKiAweDgwZSkKKyNkZWZpbmUg TENEX1ZTWU5DX1NUQVJUX0VWRU4JCQkoMHg0ICogMHg4MGYpCisjZGVmaW5lIExDRF9WU1lOQ19F TkRfRVZFTgkJCSgweDQgKiAweDgxMCkKKyNkZWZpbmUgTENEX1RJTUlOR19HRU5fVFJJRwkJCSgw eDQgKiAweDgxMSkKKyNkZWZpbmUgTENEX1BXTTBfQ1RSTAkJCQkoMHg0ICogMHg4MTIpCisjZGVm aW5lIExDRF9QV00wX1JQVF9MRUFESU4JCQkoMHg0ICogMHg4MTMpCisjZGVmaW5lIExDRF9QV00w X0hJR0hfTE9XCQkJKDB4NCAqIDB4ODE0KQorI2RlZmluZSBMQ0RfUFdNMV9DVFJMCQkJCSgweDQg KiAweDgxNSkKKyNkZWZpbmUgTENEX1BXTTFfUlBUX0xFQURJTgkJCSgweDQgKiAweDgxNikKKyNk ZWZpbmUgTENEX1BXTTFfSElHSF9MT1cJCQkoMHg0ICogMHg4MTcpCisjZGVmaW5lIExDRF9QV00y X0NUUkwJCQkJKDB4NCAqIDB4ODE4KQorI2RlZmluZSBMQ0RfUFdNMl9SUFRfTEVBRElOCQkJKDB4 NCAqIDB4ODE5KQorI2RlZmluZSBMQ0RfUFdNMl9ISUdIX0xPVwkJCSgweDQgKiAweDgxYSkKKyNk ZWZpbmUgTENEX1ZJREVPMF9ETUEwX0JZVEVTCQkJKDB4NCAqIDB4YjAwKQorI2RlZmluZSBMQ0Rf VklERU8wX0RNQTBfU1RBVEUJCQkoMHg0ICogMHhiMDEpCisjZGVmaW5lIExDRF9ETUFfU1RBVEVf QUNUSVZFCQkJICAoMSA8PCAzKQorI2RlZmluZSBMQ0RfVklERU8wX0RNQTFfQllURVMJCQkoMHg0 ICogMHhiMDIpCisjZGVmaW5lIExDRF9WSURFTzBfRE1BMV9TVEFURQkJCSgweDQgKiAweGIwMykK KyNkZWZpbmUgTENEX1ZJREVPMF9ETUEyX0JZVEVTCQkJKDB4NCAqIDB4YjA0KQorI2RlZmluZSBM Q0RfVklERU8wX0RNQTJfU1RBVEUJCQkoMHg0ICogMHhiMDUpCisjZGVmaW5lIExDRF9WSURFTzFf RE1BMF9CWVRFUwkJCSgweDQgKiAweGIwNikKKyNkZWZpbmUgTENEX1ZJREVPMV9ETUEwX1NUQVRF CQkJKDB4NCAqIDB4YjA3KQorI2RlZmluZSBMQ0RfVklERU8xX0RNQTFfQllURVMJCQkoMHg0ICog MHhiMDgpCisjZGVmaW5lIExDRF9WSURFTzFfRE1BMV9TVEFURQkJCSgweDQgKiAweGIwOSkKKyNk ZWZpbmUgTENEX1ZJREVPMV9ETUEyX0JZVEVTCQkJKDB4NCAqIDB4YjBhKQorI2RlZmluZSBMQ0Rf VklERU8xX0RNQTJfU1RBVEUJCQkoMHg0ICogMHhiMGIpCisjZGVmaW5lIExDRF9HUkFQSElDMF9E TUFfQllURVMJCQkoMHg0ICogMHhiMGMpCisjZGVmaW5lIExDRF9HUkFQSElDMF9ETUFfU1RBVEUJ CQkoMHg0ICogMHhiMGQpCisjZGVmaW5lIExDRF9HUkFQSElDMV9ETUFfQllURVMJCQkoMHg0ICog MHhiMGUpCisjZGVmaW5lIExDRF9HUkFQSElDMV9ETUFfU1RBVEUJCQkoMHg0ICogMHhiMGYpCisK Ky8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioKKyAqCQkgICBNSVBJIGNvbnRyb2xsZXIgY29udHJvbCByZWdp c3RlciBkZWZpbmVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKippKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgTUlQSTBfSFNfQkFT RV9BRERSCQkJKE1JUElfQkFTRV9BRERSICsgMHg0MDApCisjZGVmaW5lIEhTX09GRlNFVChNKQkJ CQkoKE0gKyAxKSAqIDB4NDAwKQorCisjZGVmaW5lIE1JUElfVFhfSFNfQ1RSTAkJCQkoMHgwKQor I2RlZmluZSAgIE1JUElfVFhtX0hTX0NUUkwoTSkJCQkoTUlQSV9UWF9IU19DVFJMICsgSFNfT0ZG U0VUKE0pKQorI2RlZmluZSAgIEhTX0NUUkxfRU4JCQkJKDEgPDwgMCkKKy8qMTpDU0kgMDpEU0kg Ki8KKyNkZWZpbmUgICBIU19DVFJMX0NTSURTSU4JCQkoMSA8PCAyKQorLyoxOkxDRCwgMDpETUEg Ki8KKyNkZWZpbmUgICBUWF9TT1VSQ0UJCQkJKDEgPDwgMykKKyNkZWZpbmUgICBBQ1RJVkVfTEFO RVMobikJCQkoKG4pIDw8IDQpCisjZGVmaW5lICAgTENEX1ZDKGNoKQkJCQkoKGNoKSA8PCA4KQor I2RlZmluZSAgIERTSV9FT1RQX0VOCQkJCSgxIDw8IDExKQorI2RlZmluZSAgIERTSV9DTURfSEZQ X0VOCQkJKDEgPDwgMTIpCisjZGVmaW5lICAgQ1JDX0VOCQkJCSgxIDw8IDE0KQorI2RlZmluZSAg IEhTRVhJVF9DTlQobikJCQkJKChuKSA8PCAxNikKKyNkZWZpbmUgICBIU0NMS0lETEVfQ05UCQkJ CSgxIDw8IDI0KQorI2RlZmluZSBNSVBJX1RYX0hTX1NZTkNfQ0ZHCQkJKDB4OCkKKyNkZWZpbmUg ICBNSVBJX1RYbV9IU19TWU5DX0NGRyhNKQkJKE1JUElfVFhfSFNfU1lOQ19DRkcgXAorCQkJCQkJ KyBIU19PRkZTRVQoTSkpCisjZGVmaW5lICAgTElORV9TWU5DX1BLVF9FTkFCTEUJCQkoMSA8PCAw KQorI2RlZmluZSAgIEZSQU1FX0NPVU5URVJfQUNUSVZFCQkJKDEgPDwgMSkKKyNkZWZpbmUgICBM SU5FX0NPVU5URVJfQUNUSVZFCQkJKDEgPDwgMikKKyNkZWZpbmUgICBEU0lfVl9CTEFOS0lORwkJ CSgxIDw8IDQpCisjZGVmaW5lICAgRFNJX0hTQV9CTEFOS0lORwkJCSgxIDw8IDUpCisjZGVmaW5l ICAgRFNJX0hCUF9CTEFOS0lORwkJCSgxIDw8IDYpCisjZGVmaW5lICAgRFNJX0hGUF9CTEFOS0lO RwkJCSgxIDw8IDcpCisjZGVmaW5lICAgRFNJX1NZTkNfUFVMU0VfRVZFTlROCQkJKDEgPDwgOCkK KyNkZWZpbmUgICBEU0lfTFBNX0ZJUlNUX1ZTQV9MSU5FCQkoMSA8PCA5KQorI2RlZmluZSAgIERT SV9MUE1fTEFTVF9WRlBfTElORQkJCSgxIDw8IDEwKQorI2RlZmluZSAgIFdBSVRfQUxMX1NFQ1QJ CQkJKDEgPDwgMTEpCisjZGVmaW5lICAgV0FJVF9UUklHX1BPUwkJCQkoMSA8PCAxNSkKKyNkZWZp bmUgICBBTFdBWVNfVVNFX0hBQ1QoZikJCQkoKGYpIDw8IDE5KQorI2RlZmluZSAgIEZSQU1FX0dF Tl9FTihmKQkJCSgoZikgPDwgMjMpCisjZGVmaW5lICAgSEFDVF9XQUlUX1NUT1AoZikJCQkoKGYp IDw8IDI4KQorI2RlZmluZSBNSVBJX1RYMF9IU19GRzBfU0VDVDBfUEgJCSgweDQwKQorI2RlZmlu ZSAgIE1JUElfVFhtX0hTX0ZHbl9TRUNUb19QSChNLCBOLCBPKQkoTUlQSV9UWDBfSFNfRkcwX1NF Q1QwX1BIICsgXAorCQkJCQkJSFNfT0ZGU0VUKE0pICsgKDB4MkMqTikgKyAoOCpPKSkKKyNkZWZp bmUgICBNSVBJX1RYX1NFQ1RfV0NfTUFTSwkJCSgweGZmZmYpCisjZGVmaW5lCSAgTUlQSV9UWF9T RUNUX1ZDX01BU0sJCQkoMykKKyNkZWZpbmUgICBNSVBJX1RYX1NFQ1RfVkNfU0hJRlQJCQkoMjIp CisjZGVmaW5lICAgTUlQSV9UWF9TRUNUX0RUX01BU0sJCQkoMHgzZikKKyNkZWZpbmUgICBNSVBJ X1RYX1NFQ1RfRFRfU0hJRlQJCQkoMTYpCisjZGVmaW5lICAgTUlQSV9UWF9TRUNUX0RNX01BU0sJ CQkoMykKKyNkZWZpbmUgICBNSVBJX1RYX1NFQ1RfRE1fU0hJRlQJCQkoMjQpCisjZGVmaW5lICAg TUlQSV9UWF9TRUNUX0RNQV9QQUNLRUQJCSgxPDwyNikKKyNkZWZpbmUgTUlQSV9UWF9IU19GRzBf U0VDVF9VTlBBQ0tFRF9CWVRFUzAJKDB4NjApCisjZGVmaW5lIE1JUElfVFhfSFNfRkcwX1NFQ1Rf VU5QQUNLRURfQllURVMxCSgweDY0KQorI2RlZmluZSAgIE1JUElfVFhtX0hTX0ZHbl9TRUNUX1VO UEFDS0VEX0JZVEVTMChNLCBOKQlcCisJCQkJCShNSVBJX1RYX0hTX0ZHMF9TRUNUX1VOUEFDS0VE X0JZVEVTMCBcCisJCQkJCSsgSFNfT0ZGU0VUKE0pICsgKDB4MkMqTikpCisjZGVmaW5lIE1JUElf VFhfSFNfRkcwX1NFQ1QwX0xJTkVfQ0ZHCQkoMHg0NCkKKyNkZWZpbmUgICBNSVBJX1RYbV9IU19G R25fU0VDVG9fTElORV9DRkcoTSwgTiwgTykJXAorCQkJCShNSVBJX1RYX0hTX0ZHMF9TRUNUMF9M SU5FX0NGRyArIEhTX09GRlNFVChNKSBcCisJCQkJKyAoMHgyQypOKSArICg4Kk8pKQorCisjZGVm aW5lIE1JUElfVFhfSFNfRkcwX05VTV9MSU5FUwkJKDB4NjgpCisjZGVmaW5lICAgTUlQSV9UWG1f SFNfRkduX05VTV9MSU5FUyhNLCBOKQlcCisJCQkJKE1JUElfVFhfSFNfRkcwX05VTV9MSU5FUyAr IEhTX09GRlNFVChNKSBcCisJCQkJKyAoMHgyQypOKSkKKyNkZWZpbmUgTUlQSV9UWF9IU19WU1lO Q19XSURUSFMwCQkoMHgxMDQpCisjZGVmaW5lICAgTUlQSV9UWG1fSFNfVlNZTkNfV0lEVEhuKE0s IE4pCQlcCisJCQkJKE1JUElfVFhfSFNfVlNZTkNfV0lEVEhTMCArIEhTX09GRlNFVChNKSBcCisJ CQkJKyAoMHg0Kk4pKQorI2RlZmluZSBNSVBJX1RYX0hTX1ZfQkFDS1BPUkNIRVMwCQkoMHgxNmMp CisjZGVmaW5lICAgTUlQSV9UWG1fSFNfVl9CQUNLUE9SQ0hFU24oTSwgTikJXAorCQkJCShNSVBJ X1RYX0hTX1ZfQkFDS1BPUkNIRVMwICsgSFNfT0ZGU0VUKE0pIFwKKwkJCQkrICgweDQqTikpCisj ZGVmaW5lIE1JUElfVFhfSFNfVl9GUk9OVFBPUkNIRVMwCQkoMHgxNzQpCisjZGVmaW5lICAgTUlQ SV9UWG1fSFNfVl9GUk9OVFBPUkNIRVNuKE0sIE4pCVwKKwkJCQkoTUlQSV9UWF9IU19WX0ZST05U UE9SQ0hFUzAgKyBIU19PRkZTRVQoTSkgXAorCQkJCSsgKDB4NCpOKSkKKyNkZWZpbmUgTUlQSV9U WF9IU19WX0FDVElWRTAJCQkoMHgxN2MpCisjZGVmaW5lICAgTUlQSV9UWG1fSFNfVl9BQ1RJVkVu KE0sIE4pCQlcCisJCQkJKE1JUElfVFhfSFNfVl9BQ1RJVkUwICsgSFNfT0ZGU0VUKE0pIFwKKwkJ CQkrICgweDQqTikpCisjZGVmaW5lIE1JUElfVFhfSFNfSFNZTkNfV0lEVEgwCQkJKDB4MTBjKQor I2RlZmluZSAgIE1JUElfVFhtX0hTX0hTWU5DX1dJRFRIbihNLCBOKQkJXAorCQkJCShNSVBJX1RY X0hTX0hTWU5DX1dJRFRIMCArIEhTX09GRlNFVChNKSBcCisJCQkJKyAoMHg0Kk4pKQorI2RlZmlu ZSBNSVBJX1RYX0hTX0hfQkFDS1BPUkNIMAkJCSgweDExYykKKyNkZWZpbmUgICBNSVBJX1RYbV9I U19IX0JBQ0tQT1JDSG4oTSwgTikJCVwKKwkJCQkoTUlQSV9UWF9IU19IX0JBQ0tQT1JDSDAgKyBI U19PRkZTRVQoTSkgXAorCQkJCSsgKDB4NCpOKSkKKyNkZWZpbmUgTUlQSV9UWF9IU19IX0ZST05U UE9SQ0gwCQkoMHgxMmMpCisjZGVmaW5lICAgTUlQSV9UWG1fSFNfSF9GUk9OVFBPUkNIbihNLCBO KQlcCisJCQkJKE1JUElfVFhfSFNfSF9GUk9OVFBPUkNIMCArIEhTX09GRlNFVChNKSBcCisJCQkJ KyAoMHg0Kk4pKQorI2RlZmluZSBNSVBJX1RYX0hTX0hfQUNUSVZFMAkJCSgweDE4NCkKKyNkZWZp bmUgICBNSVBJX1RYbV9IU19IX0FDVElWRW4oTSwgTikJCVwKKwkJCQkoTUlQSV9UWF9IU19IX0FD VElWRTAgKyBIU19PRkZTRVQoTSkgXAorCQkJCSsgKDB4NCpOKSkKKyNkZWZpbmUgTUlQSV9UWF9I U19MTFBfSFNZTkNfV0lEVEgwCQkoMHgxM2MpCisjZGVmaW5lICAgTUlQSV9UWG1fSFNfTExQX0hT WU5DX1dJRFRIbihNLCBOKQlcCisJCQkJKE1JUElfVFhfSFNfTExQX0hTWU5DX1dJRFRIMCArIEhT X09GRlNFVChNKSBcCisJCQkJKyAoMHg0Kk4pKQorI2RlZmluZSBNSVBJX1RYX0hTX0xMUF9IX0JB Q0tQT1JDSDAJCSgweDE0YykKKyNkZWZpbmUgICBNSVBJX1RYbV9IU19MTFBfSF9CQUNLUE9SQ0hu KE0sIE4pCVwKKwkJCQkoTUlQSV9UWF9IU19MTFBfSF9CQUNLUE9SQ0gwICsgSFNfT0ZGU0VUKE0p IFwKKwkJCQkrICgweDQqTikpCisjZGVmaW5lIE1JUElfVFhfSFNfTExQX0hfRlJPTlRQT1JDSDAJ CSgweDE1YykKKyNkZWZpbmUgICBNSVBJX1RYbV9IU19MTFBfSF9GUk9OVFBPUkNIbihNLCBOKQlc CisJCQkJKE1JUElfVFhfSFNfTExQX0hfRlJPTlRQT1JDSDAgKyBIU19PRkZTRVQoTSkgXAorCQkJ CSsgKDB4NCpOKSkKKworI2RlZmluZSBNSVBJX1RYX0hTX01DX0ZJRk9fQ1RSTF9FTgkJKDB4MTk0 KQorI2RlZmluZSAgIE1JUElfVFhtX0hTX01DX0ZJRk9fQ1RSTF9FTihNKQlcCisJCQkJKE1JUElf VFhfSFNfTUNfRklGT19DVFJMX0VOICsgSFNfT0ZGU0VUKE0pKQorCisjZGVmaW5lIE1JUElfVFhf SFNfTUNfRklGT19DSEFOX0FMTE9DMAkJKDB4MTk4KQorI2RlZmluZSBNSVBJX1RYX0hTX01DX0ZJ Rk9fQ0hBTl9BTExPQzEJCSgweDE5YykKKyNkZWZpbmUgICBNSVBJX1RYbV9IU19NQ19GSUZPX0NI QU5fQUxMT0NuKE0sIE4pCVwKKwkJCShNSVBJX1RYX0hTX01DX0ZJRk9fQ0hBTl9BTExPQzAgKyBI U19PRkZTRVQoTSkgXAorCQkJKyAoMHg0Kk4pKQorI2RlZmluZSAgIFNFVF9NQ19GSUZPX0NIQU5f QUxMT0MoZGV2LCBjdHJsLCB2Yywgc3opCVwKKwkJa21iX3dyaXRlX2JpdHNfbWlwaShkZXYsIFwK KwkJCQlNSVBJX1RYbV9IU19NQ19GSUZPX0NIQU5fQUxMT0NuKGN0cmwsIFwKKwkJCQl2Yy8yKSwg KHZjICUgMikqMTYsIDE2LCBzeikKKyNkZWZpbmUgTUlQSV9UWF9IU19NQ19GSUZPX1JUSFJFU0hP TEQwCQkoMHgxYTApCisjZGVmaW5lIE1JUElfVFhfSFNfTUNfRklGT19SVEhSRVNIT0xEMQkJKDB4 MWE0KQorI2RlZmluZSAgIE1JUElfVFhtX0hTX01DX0ZJRk9fUlRIUkVTSE9MRG4oTSwgTikJXAor CQkJCShNSVBJX1RYX0hTX01DX0ZJRk9fUlRIUkVTSE9MRDAgKyBIU19PRkZTRVQoTSkgXAorCQkJ CSsgKDB4NCpOKSkKKyNkZWZpbmUgICBTRVRfTUNfRklGT19SVEhSRVNIT0xEKGRldiwgY3RybCwg dmMsIHRoKQlcCisJa21iX3dyaXRlX2JpdHNfbWlwaShkZXYsIE1JUElfVFhtX0hTX01DX0ZJRk9f UlRIUkVTSE9MRG4oY3RybCwgdmMvMiksIFwKKwkJCSh2YyAlIDIpKjE2LCAxNiwgdGgpCisjZGVm aW5lIE1JUElfVFhfSFNfRE1BX0NGRwkJCSgweDFhOCkKKyNkZWZpbmUgTUlQSV9UWF9IU19ETUFf U1RBUlRfQURSX0NIQU4wCQkoMHgxYWMpCisjZGVmaW5lIE1JUElfVFhfSFNfRE1BX0xFTl9DSEFO MAkJKDB4MWI0KQorCisvKiBNSVBJIElSUSAqLworI2RlZmluZSBNSVBJX0NUUkxfSVJRX1NUQVRV UzAJCQkJKDB4MDApCisjZGVmaW5lICAgTUlQSV9EUEhZX0VSUl9JUlEJCQkJMQorI2RlZmluZSAg IE1JUElfRFBIWV9FUlJfTUFTSwkJCQkweDdGRQkvKmJpdHMgMS0xMCAqLworI2RlZmluZSAgIE1J UElfSFNfSVJRCQkJCQkxMworLypiaXRzIDEzLTIyICovCisjZGVmaW5lICAgTUlQSV9IU19JUlFf TUFTSwkJCQkweDdGRTAwMAorI2RlZmluZSAgIE1JUElfTFBfRVZFTlRfSVJRCQkJCTI1CisjZGVm aW5lICAgTUlQSV9HRVRfSVJRX1NUQVQwKGRldikJCWttYl9yZWFkX21pcGkoZGV2LCBcCisJCQkJ CQlNSVBJX0NUUkxfSVJRX1NUQVRVUzApCisjZGVmaW5lIE1JUElfQ1RSTF9JUlFfU1RBVFVTMQkJ CQkoMHgwNCkKKyNkZWZpbmUgICBNSVBJX0hTX1JYX0VWRU5UX0lSUQkJCQkwCisjZGVmaW5lICAg TUlQSV9HRVRfSVJRX1NUQVQxKGRldikJCWttYl9yZWFkX21pcGkoZGV2LCBcCisJCQkJCQlNSVBJ X0NUUkxfSVJRX1NUQVRVUzEpCisjZGVmaW5lIE1JUElfQ1RSTF9JUlFfRU5BQkxFMAkJCQkoMHgw OCkKKyNkZWZpbmUgICBTRVRfTUlQSV9DVFJMX0lSUV9FTkFCTEUwKGRldiwgTSwgTikJa21iX3Nl dF9iaXRfbWlwaShkZXYsIFwKKwkJCQkJCU1JUElfQ1RSTF9JUlFfRU5BQkxFMCwgTStOKQorI2Rl ZmluZSAgIE1JUElfR0VUX0lSUV9FTkFCTEVEMChkZXYpCQlrbWJfcmVhZF9taXBpKGRldiwgXAor CQkJCQkJTUlQSV9DVFJMX0lSUV9FTkFCTEUwKQorI2RlZmluZSBNSVBJX0NUUkxfSVJRX0VOQUJM RTEJCQkJKDB4MGMpCisjZGVmaW5lICAgTUlQSV9HRVRfSVJRX0VOQUJMRUQxKGRldikJCWttYl9y ZWFkX21pcGkoZGV2LCBcCisJCQkJCQlNSVBJX0NUUkxfSVJRX0VOQUJMRTEpCisjZGVmaW5lIE1J UElfQ1RSTF9JUlFfQ0xFQVIwCQkJCSgweDAxMCkKKyNkZWZpbmUgICBTRVRfTUlQSV9DVFJMX0lS UV9DTEVBUjAoZGV2LCBNLCBOKQkJXAorCQlrbWJfc2V0X2JpdF9taXBpKGRldiwgTUlQSV9DVFJM X0lSUV9DTEVBUjAsIE0rTikKKyNkZWZpbmUgTUlQSV9DVFJMX0lSUV9DTEVBUjEJCQkJKDB4MDE0 KQorI2RlZmluZSAgIFNFVF9NSVBJX0NUUkxfSVJRX0NMRUFSMShkZXYsIE0sIE4pCQlcCisJCWtt Yl9zZXRfYml0X21pcGkoZGV2LCBNSVBJX0NUUkxfSVJRX0NMRUFSMSwgTStOKQorI2RlZmluZSBN SVBJX0NUUkxfRElHX0xPT1BCQUNLCQkJCSgweDAxOCkKKyNkZWZpbmUgTUlQSV9UWF9IU19JUlFf U1RBVFVTCQkJCSgweDAxYykKKyNkZWZpbmUgICBNSVBJX1RYX0hTX0lSUV9TVEFUVVNtKE0pCQko TUlQSV9UWF9IU19JUlFfU1RBVFVTICsgXAorCQkJCQkJSFNfT0ZGU0VUKE0pKQorI2RlZmluZSAg IEdFVF9NSVBJX1RYX0hTX0lSUV9TVEFUVVMoZGV2LCBNKQlrbWJfcmVhZF9taXBpKGRldiwgXAor CQkJCQkJTUlQSV9UWF9IU19JUlFfU1RBVFVTbShNKSkKKyNkZWZpbmUgICBNSVBJX1RYX0hTX0lS UV9MSU5FX0NPTVBBUkUJCQkoMTw8MSkKKyNkZWZpbmUgICBNSVBJX1RYX0hTX0lSUV9GUkFNRV9E T05FXzAJCQkoMTw8MikKKyNkZWZpbmUgICBNSVBJX1RYX0hTX0lSUV9GUkFNRV9ET05FXzEJCQko MTw8MykKKyNkZWZpbmUgICBNSVBJX1RYX0hTX0lSUV9GUkFNRV9ET05FXzIJCQkoMTw8NCkKKyNk ZWZpbmUgICBNSVBJX1RYX0hTX0lSUV9GUkFNRV9ET05FXzMJCQkoMTw8NSkKKyNkZWZpbmUgICBN SVBJX1RYX0hTX0lSUV9ETUFfRE9ORV8wCQkJKDE8PDYpCisjZGVmaW5lICAgTUlQSV9UWF9IU19J UlFfRE1BX0lETEVfMAkJCSgxPDw3KQorI2RlZmluZSAgIE1JUElfVFhfSFNfSVJRX0RNQV9ET05F XzEJCQkoMTw8OCkKKyNkZWZpbmUgICBNSVBJX1RYX0hTX0lSUV9ETUFfSURMRV8xCQkJKDE8PDkp CisjZGVmaW5lICAgTUlQSV9UWF9IU19JUlFfRE1BX0RPTkVfMgkJCSgxPDwxMCkKKyNkZWZpbmUg ICBNSVBJX1RYX0hTX0lSUV9ETUFfSURMRV8yCQkJKDE8PDExKQorI2RlZmluZSAgIE1JUElfVFhf SFNfSVJRX0RNQV9ET05FXzMJCQkoMTw8MTIpCisjZGVmaW5lICAgTUlQSV9UWF9IU19JUlFfRE1B X0lETEVfMwkJCSgxPDwxMykKKyNkZWZpbmUgICBNSVBJX1RYX0hTX0lSUV9NQ19GSUZPX1VOREVS RkxPVwkJKDE8PDE0KQorI2RlZmluZSAgIE1JUElfVFhfSFNfSVJRX01DX0ZJRk9fT1ZFUkZMT1cJ CSgxPDwxNSkKKyNkZWZpbmUgICBNSVBJX1RYX0hTX0lSUV9MTFBfRklGT19FTVBUWQkJCSgxPDwx NikKKyNkZWZpbmUgICBNSVBJX1RYX0hTX0lSUV9MTFBfUkVRVUVTVF9RVUVVRV9GVUxMCQkoMTw8 MTcpCisjZGVmaW5lICAgTUlQSV9UWF9IU19JUlFfTExQX1JFUVVFU1RfUVVFVUVfRVJST1IJKDE8 PDE4KQorI2RlZmluZSAgIE1JUElfVFhfSFNfSVJRX0xMUF9XT1JEX0NPVU5UX0VSUk9SCQkoMTw8 MjApCisjZGVmaW5lICAgTUlQSV9UWF9IU19JUlFfRlJBTUVfRE9ORQkJCVwKKwkJCQkoTUlQSV9U WF9IU19JUlFfRlJBTUVfRE9ORV8wIHwgXAorCQkJCU1JUElfVFhfSFNfSVJRX0ZSQU1FX0RPTkVf MSB8IFwKKwkJCQlNSVBJX1RYX0hTX0lSUV9GUkFNRV9ET05FXzIgfCBcCisJCQkJTUlQSV9UWF9I U19JUlFfRlJBTUVfRE9ORV8zKQorCisjZGVmaW5lIE1JUElfVFhfSFNfSVJRX0RNQV9ET05FCQkJ CVwKKwkJCQkoTUlQSV9UWF9IU19JUlFfRE1BX0RPTkVfMCB8IFwKKwkJCQlNSVBJX1RYX0hTX0lS UV9ETUFfRE9ORV8xIHwgXAorCQkJCU1JUElfVFhfSFNfSVJRX0RNQV9ET05FXzIgfCBcCisJCQkJ TUlQSV9UWF9IU19JUlFfRE1BX0RPTkVfMykKKworI2RlZmluZSBNSVBJX1RYX0hTX0lSUV9ETUFf SURMRQkJCQlcCisJCQkJKE1JUElfVFhfSFNfSVJRX0RNQV9JRExFXzAgfCBcCisJCQkJTUlQSV9U WF9IU19JUlFfRE1BX0lETEVfMSB8IFwKKwkJCQlNSVBJX1RYX0hTX0lSUV9ETUFfSURMRV8yIHwg XAorCQkJCU1JUElfVFhfSFNfSVJRX0RNQV9JRExFXzMpCisKKyNkZWZpbmUgTUlQSV9UWF9IU19J UlFfRVJST1IJCQkJXAorCQkJCShNSVBJX1RYX0hTX0lSUV9NQ19GSUZPX1VOREVSRkxPVyB8IFwK KwkJCQlNSVBJX1RYX0hTX0lSUV9NQ19GSUZPX09WRVJGTE9XIHwgXAorCQkJCU1JUElfVFhfSFNf SVJRX0xMUF9GSUZPX0VNUFRZIHwgXAorCQkJCU1JUElfVFhfSFNfSVJRX0xMUF9SRVFVRVNUX1FV RVVFX0ZVTEwgfCBcCisJCQkJTUlQSV9UWF9IU19JUlFfTExQX1JFUVVFU1RfUVVFVUVfRVJST1Ig fCBcCisJCQkJTUlQSV9UWF9IU19JUlFfTExQX1dPUkRfQ09VTlRfRVJST1IpCisKKyNkZWZpbmUg TUlQSV9UWF9IU19JUlFfQUxMCQkJCVwKKwkJCQkoTUlQSV9UWF9IU19JUlFfRlJBTUVfRE9ORSB8 IFwKKwkJCQlNSVBJX1RYX0hTX0lSUV9ETUFfRE9ORSB8IFwKKwkJCQlNSVBJX1RYX0hTX0lSUV9E TUFfSURMRSB8IFwKKwkJCQlNSVBJX1RYX0hTX0lSUV9MSU5FX0NPTVBBUkUgfCBcCisJCQkJTUlQ SV9UWF9IU19JUlFfRVJST1IpCisKKyNkZWZpbmUgTUlQSV9UWF9IU19JUlFfRU5BQkxFCQkJCSgw eDAyMCkKKyNkZWZpbmUgICBTRVRfSFNfSVJRX0VOQUJMRShkZXYsIE0sIHZhbCkJa21iX3NldF9i aXRtYXNrX21pcGkoZGV2LCBcCisJCQkJCQlNSVBJX1RYX0hTX0lSUV9FTkFCTEUgXAorCQkJCQkJ KyBIU19PRkZTRVQoTSksIHZhbCkKKyNkZWZpbmUgICBDTFJfSFNfSVJRX0VOQUJMRShkZXYsIE0s IHZhbCkJa21iX2Nscl9iaXRtYXNrX21pcGkoZGV2LCBcCisJCQkJCQlNSVBJX1RYX0hTX0lSUV9F TkFCTEUgXAorCQkJCQkJKyBIU19PRkZTRVQoTSksIHZhbCkKKyNkZWZpbmUJICBHRVRfSFNfSVJR X0VOQUJMRShkZXYsIE0pCQlrbWJfcmVhZF9taXBpKGRldiwgXAorCQkJCQkJTUlQSV9UWF9IU19J UlFfRU5BQkxFIFwKKwkJCQkJCSsgSFNfT0ZGU0VUKE0pKQorI2RlZmluZSBNSVBJX1RYX0hTX0lS UV9DTEVBUgkJCQkoMHgwMjQpCisjZGVmaW5lICAgU0VUX01JUElfVFhfSFNfSVJRX0NMRUFSKGRl diwgTSwgdmFsKQkJXAorCQkJa21iX3NldF9iaXRtYXNrX21pcGkoZGV2LCBcCisJCQlNSVBJX1RY X0hTX0lSUV9DTEVBUiBcCisJCQkrIEhTX09GRlNFVChNKSwgdmFsKQorCisvKiBNSVBJIFRlc3Qg UGF0dGVybiBHZW5lcmF0aW9uICovCisjZGVmaW5lIE1JUElfVFhfSFNfVEVTVF9QQVRfQ1RSTAkJ CSgweDIzMCkKKyNkZWZpbmUgICBNSVBJX1RYbV9IU19URVNUX1BBVF9DVFJMKE0pCQkJXAorCQkJ CShNSVBJX1RYX0hTX1RFU1RfUEFUX0NUUkwgKyBIU19PRkZTRVQoTSkpCisjZGVmaW5lICAgVFBf RU5fVkNtKE0pCQkJCQkoMSA8PCAoKE0pICogMHgwNCkpCisjZGVmaW5lICAgVFBfU0VMX1ZDbShN LCBOKQkJCQlcCisJCQkJKE4gPDwgKCgoTSkgKiAweDA0KSArIDEpKQorI2RlZmluZSAgIFRQX1NU UklQRV9XSURUSChNKQkJCQkoKE0pIDw8IDE2KQorI2RlZmluZSBNSVBJX1RYX0hTX1RFU1RfUEFU X0NPTE9SMAkJCSgweDIzNCkKKyNkZWZpbmUgICBNSVBJX1RYbV9IU19URVNUX1BBVF9DT0xPUjAo TSkJCVwKKwkJCQkoTUlQSV9UWF9IU19URVNUX1BBVF9DT0xPUjAgKyBIU19PRkZTRVQoTSkpCisj ZGVmaW5lIE1JUElfVFhfSFNfVEVTVF9QQVRfQ09MT1IxCQkJKDB4MjM4KQorI2RlZmluZSAgIE1J UElfVFhtX0hTX1RFU1RfUEFUX0NPTE9SMShNKQkJXAorCQkJCShNSVBJX1RYX0hTX1RFU1RfUEFU X0NPTE9SMSArIEhTX09GRlNFVChNKSkKKworLyogRC1QSFkgcmVncyAqLworI2RlZmluZSBEUEhZ X0VOQUJMRQkJCQkoMHgxMDApCisjZGVmaW5lIERQSFlfSU5JVF9DVFJMMAkJCQkoMHgxMDQpCisj ZGVmaW5lICAgU0hVVERPV05aCQkJCTAKKyNkZWZpbmUgICBSRVNFVFoJCQkJMTIKKyNkZWZpbmUg RFBIWV9JTklUX0NUUkwxCQkJCSgweDEwOCkKKyNkZWZpbmUgICBQTExfQ0xLU0VMXzAJCQkJMTgK KyNkZWZpbmUgICBQTExfU0hBRE9XX0NUUkwJCQkxNgorI2RlZmluZSBEUEhZX0lOSVRfQ1RSTDIJ CQkJKDB4MTBjKQorI2RlZmluZSAgIFNFVF9EUEhZX0lOSVRfQ1RSTDAoZGV2LCBkcGh5LCBvZmZz ZXQpCVwKKwkJCWttYl9zZXRfYml0X21pcGkoZGV2LCBEUEhZX0lOSVRfQ1RSTDAsIChkcGh5K29m ZnNldCkpCisjZGVmaW5lICAgQ0xSX0RQSFlfSU5JVF9DVFJMMChkZXYsIGRwaHksIG9mZnNldCkJ XAorCQkJa21iX2Nscl9iaXRfbWlwaShkZXYsIERQSFlfSU5JVF9DVFJMMCwgKGRwaHkrb2Zmc2V0 KSkKKyNkZWZpbmUgRFBIWV9JTklUX0NUUkwyCQkJCSgweDEwYykKKyNkZWZpbmUgRFBIWV9QTExf T0JTMAkJCQkoMHgxMTApCisjZGVmaW5lIERQSFlfUExMX09CUzEJCQkJKDB4MTE0KQorI2RlZmlu ZSBEUEhZX1BMTF9PQlMyCQkJCSgweDExOCkKKyNkZWZpbmUgRFBIWV9GUkVRX0NUUkwwXzMJCQko MHgxMWMpCisjZGVmaW5lIERQSFlfRlJFUV9DVFJMNF83CQkJKDB4MTIwKQorI2RlZmluZSAgIFNF VF9EUEhZX0ZSRVFfQ1RSTDBfMyhkZXYsIGRwaHksIHZhbCkJXAorCQkJa21iX3dyaXRlX2JpdHNf bWlwaShkZXYsIERQSFlfRlJFUV9DVFJMMF8zIFwKKwkJCSsgKChkcGh5LzQpKjQpLCAoZHBoeSAl IDQpICogOCwgNiwgdmFsKQorCisjZGVmaW5lIERQSFlfRk9SQ0VfQ1RSTDAJCQkoMHgxMjgpCisj ZGVmaW5lIERQSFlfRk9SQ0VfQ1RSTDEJCQkoMHgxMkMpCisjZGVmaW5lIE1JUElfRFBIWV9TVEFU MF8zCQkJKDB4MTM0KQorI2RlZmluZSBNSVBJX0RQSFlfU1RBVDRfNwkJCSgweDEzOCkKKyNkZWZp bmUJICBHRVRfU1RPUFNUQVRFX0RBVEEoZGV2LCBkcGh5KQkJXAorCQkJKCgoa21iX3JlYWRfbWlw aShkZXYsIE1JUElfRFBIWV9TVEFUMF8zICsgKGRwaHkvNCkqNCkpIFwKKwkJCQkJPj4gKCgoZHBo eSAlIDQpKjgpKzQpKSAmIDB4MDMpCisKKyNkZWZpbmUgTUlQSV9EUEhZX0VSUl9TVEFUNl83CQkJ KDB4MTRDKQorCisjZGVmaW5lIERQSFlfVEVTVF9DVFJMMAkJCQkoMHgxNTQpCisjZGVmaW5lICAg U0VUX0RQSFlfVEVTVF9DVFJMMChkZXYsIGRwaHkpCQlcCisJCQlrbWJfc2V0X2JpdF9taXBpKGRl diwgRFBIWV9URVNUX0NUUkwwLCAoZHBoeSkpCisjZGVmaW5lICAgQ0xSX0RQSFlfVEVTVF9DVFJM MChkZXYsIGRwaHkpCQlcCisJCQlrbWJfY2xyX2JpdF9taXBpKGRldiwgRFBIWV9URVNUX0NUUkww LCBcCisJCQkJCQkoZHBoeSkpCisjZGVmaW5lIERQSFlfVEVTVF9DVFJMMQkJCQkoMHgxNTgpCisj ZGVmaW5lICAgU0VUX0RQSFlfVEVTVF9DVFJMMV9DTEsoZGV2LCBkcGh5KQlcCisJCQlrbWJfc2V0 X2JpdF9taXBpKGRldiwgRFBIWV9URVNUX0NUUkwxLCAoZHBoeSkpCisjZGVmaW5lICAgQ0xSX0RQ SFlfVEVTVF9DVFJMMV9DTEsoZGV2LCBkcGh5KQlcCisJCQlrbWJfY2xyX2JpdF9taXBpKGRldiwg RFBIWV9URVNUX0NUUkwxLCAoZHBoeSkpCisjZGVmaW5lICAgU0VUX0RQSFlfVEVTVF9DVFJMMV9F TihkZXYsIGRwaHkpCVwKKwkJCWttYl9zZXRfYml0X21pcGkoZGV2LCBEUEhZX1RFU1RfQ1RSTDEs IChkcGh5KzEyKSkKKyNkZWZpbmUgICBDTFJfRFBIWV9URVNUX0NUUkwxX0VOKGRldiwgZHBoeSkJ XAorCQkJa21iX2Nscl9iaXRfbWlwaShkZXYsIERQSFlfVEVTVF9DVFJMMSwgKGRwaHkrMTIpKQor I2RlZmluZSBEUEhZX1RFU1RfRElOMF8zCQkJKDB4MTVjKQorI2RlZmluZSAgIFNFVF9URVNUX0RJ TjBfMyhkZXYsIGRwaHksIHZhbCkJCVwKKwkJCWttYl93cml0ZV9taXBpKGRldiwgRFBIWV9URVNU X0RJTjBfMyArIFwKKwkJCTQsICgodmFsKSA8PCAoKChkcGh5KSU0KSo4KSkpCisjZGVmaW5lIERQ SFlfVEVTVF9ET1VUMF8zCQkJKDB4MTY4KQorI2RlZmluZSAgIEdFVF9URVNUX0RPVVQwXzMoZGV2 LCBkcGh5KQkJXAorCQkJKGttYl9yZWFkX21pcGkoZGV2LCBEUEhZX1RFU1RfRE9VVDBfMykgXAor CQkJPj4gKCgoZHBoeSklNCkqOCkgJiAweGZmKQorI2RlZmluZSBEUEhZX1RFU1RfRE9VVDRfNwkJ CSgweDE2QykKKyNkZWZpbmUgICBHRVRfVEVTVF9ET1VUNF83KGRldiwgZHBoeSkJCVwKKwkJCShr bWJfcmVhZF9taXBpKGRldiwgRFBIWV9URVNUX0RPVVQ0XzcpIFwKKwkJCT4+ICgoKGRwaHkpJTQp KjgpICYgMHhmZikKKyNkZWZpbmUgRFBIWV9URVNUX0RPVVQ4XzkJCQkoMHgxNzApCisjZGVmaW5l IERQSFlfVEVTVF9ESU40XzcJCQkoMHgxNjApCisjZGVmaW5lIERQSFlfVEVTVF9ESU44XzkJCQko MHgxNjQpCisjZGVmaW5lIERQSFlfUExMX0xPQ0sJCQkJKDB4MTg4KQorI2RlZmluZSAgIEdFVF9Q TExfTE9DSyhkZXYsIGRwaHkpCQlcCisJCQkoa21iX3JlYWRfbWlwaShkZXYsIERQSFlfUExMX0xP Q0spIFwKKwkJCSYgKDEgPDwgKGRwaHkgLSBNSVBJX0RQSFk2KSkpCisjZGVmaW5lIERQSFlfQ0ZH X0NMS19FTgkJCQkoMHgxOGMpCisKKyNkZWZpbmUgTVNTX01JUElfQ0lGX0NGRwkJCSgweDAwKQor I2RlZmluZSBNU1NfTENEX01JUElfQ0ZHCQkJKDB4MDQpCisjZGVmaW5lIE1TU19DQU1fQ0xLX0NU UkwJCQkoMHgxMCkKKyNkZWZpbmUgTVNTX0xPT1BCQUNLX0NGRwkJCSgweDBDKQorI2RlZmluZSAg IExDRAkJCQkJKDE8PDEpCisjZGVmaW5lICAgTUlQSV9DT01NT04JCQkJKDE8PDIpCisjZGVmaW5l ICAgTUlQSV9UWDAJCQkJKDE8PDkpCisjZGVmaW5lIE1TU19DQU1fUlNUTl9DVFJMCQkJKDB4MTQp CisjZGVmaW5lIE1TU19DQU1fUlNUTl9TRVQJCQkoMHgyMCkKKyNkZWZpbmUgTVNTX0NBTV9SU1RO X0NMUgkJCSgweDI0KQorCisjZGVmaW5lIE1TU0NQVV9DUFJfQ0xLX0VOCQkJKDB4MCkKKyNkZWZp bmUgTVNTQ1BVX0NQUl9SU1RfRU4JCQkoMHgxMCkKKyNkZWZpbmUgQklUX01BU0tfMTYJCQkJKDB4 ZmZmZikKKy8qaWNhbSBsY2QgcW9zICovCisjZGVmaW5lIExDRF9RT1NfUFJJT1JJVFkJCQkoMHg4 KQorI2RlZmluZSBMQ0RfUU9TX01PREUJCQkJKDB4QykKKyNkZWZpbmUgTENEX1FPU19CVwkJCQko MHgxMCkKKyNlbmRpZiAvKiBfX0tNQl9SRUdTX0hfXyAqLwotLSAKMi43LjQKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxp c3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=