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=-10.7 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 51758C433DB for ; Thu, 21 Jan 2021 04:26:02 +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 E2FA22368A for ; Thu, 21 Jan 2021 04:26:01 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E2FA22368A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.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 666C56E4F9; Thu, 21 Jan 2021 04:26:01 +0000 (UTC) Received: from us-smtp-delivery-44.mimecast.com (us-smtp-delivery-44.mimecast.com [205.139.111.44]) by gabe.freedesktop.org (Postfix) with ESMTPS id 302F76E4F9 for ; Thu, 21 Jan 2021 04:25:55 +0000 (UTC) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-500-TOtdc4gLOpmGO-rtCYrRDg-1; Wed, 20 Jan 2021 23:25:46 -0500 X-MC-Unique: TOtdc4gLOpmGO-rtCYrRDg-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id BE42E10054FF; Thu, 21 Jan 2021 04:25:45 +0000 (UTC) Received: from dreadlord-bne-redhat-com.bne.redhat.com (unknown [10.64.32.209]) by smtp.corp.redhat.com (Postfix) with ESMTP id 2EF5110016F5; Thu, 21 Jan 2021 04:25:43 +0000 (UTC) From: Dave Airlie To: intel-gfx@lists.freedesktop.org Date: Thu, 21 Jan 2021 14:25:27 +1000 Message-Id: <20210121042532.9057-4-airlied@gmail.com> In-Reply-To: <20210121042532.9057-1-airlied@gmail.com> References: <20210121042532.9057-1-airlied@gmail.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=airlied@gmail.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: gmail.com Subject: [Intel-gfx] [PATCH 3/8] drm/i915: migrate skl planes code new file (v4) 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: Jani Nikula , Dave Airlie , Dan Carpenter Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" RnJvbTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KClJld29yayB0aGUgcGxhbmUg aW5pdCBjYWxscyB0byBkbyB0aGUgZ2VuIHRlc3Qgb25lIGxldmVsIGhpZ2hlci4KClJld29yayBz b21lIG9mIHRoZSBwbGFuZSBoZWxwZXJzIHNvIHRoZXkgY2FuIGxpdmUgaW4gbmV3IGZpbGUsCnRo ZXJlIGlzIHN0aWxsIHNvbWUgc2NvcGUgdG8gY2xlYW4gdXAgdGhlIHBsYW5lL2ZiIGludGVyYWN0 aW9ucwpsYXRlci4KCnYyOiBkcm9wIGF0b21pYyBjb2RlIGJhY2ssIHJlbmFtZSBmaWxlIHRvIFZp bGxlIHN1Z2dlc3Rpb25zLAphZGQgaGVhZGVyIGZpbGUuCnYzOiBtb3ZlIHNjYWxlciBiaXRzIGJh Y2sKdjQ6IGRyb3Agd3JvbmcgbmV3IGluY2x1ZGVzIChWaWxsZSkKClNpZ25lZC1vZmYtYnk6IERh dmUgQWlybGllIDxhaXJsaWVkQHJlZGhhdC5jb20+CltKYW5pOiBmaXhlZCB1cCBzcGFyc2Ugd2Fy bmluZ3MuXQpTaWduZWQtb2ZmLWJ5OiBKYW5pIE5pa3VsYSA8amFuaS5uaWt1bGFAaW50ZWwuY29t PgpSZXBvcnRlZC1ieToga2VybmVsIHRlc3Qgcm9ib3QgPGxrcEBpbnRlbC5jb20+ClJlcG9ydGVk LWJ5OiBEYW4gQ2FycGVudGVyIDxkYW4uY2FycGVudGVyQG9yYWNsZS5jb20+Ci0tLQogZHJpdmVy cy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAgICAgICAgICAgICAgIHwgICAgMyArLQogZHJpdmVy cy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pOXh4X3BsYW5lLmMgICAgIHwgICAgNCAtCiBkcml2ZXJz L2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ljbF9kc2kuYyAgICAgICAgfCAgICAxICsKIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfY3J0Yy5jICAgICB8ICAgMTMgKy0KIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGRpLmMgICAgICB8ICAgIDEgKwogZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMgIHwgIDk1MyArLS0tLS0tCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuaCAgfCAgIDI3ICstCiAuLi4v ZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3R5cGVzLmggICAgfCAgIDIxICsKIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHNyLmMgICAgICB8ICAgIDEgKwogZHJpdmVy cy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9zcHJpdGUuYyAgIHwgMTM5OSArLS0tLS0tLS0t CiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Nwcml0ZS5oICAgfCAgICA2ICst CiAuLi4vZHJtL2k5MTUvZGlzcGxheS9za2xfdW5pdmVyc2FsX3BsYW5lLmMgICAgfCAyMjkyICsr KysrKysrKysrKysrKysrCiAuLi4vZHJtL2k5MTUvZGlzcGxheS9za2xfdW5pdmVyc2FsX3BsYW5l LmggICAgfCAgIDMzICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMgICAgICAgICAg ICAgICB8ICAgIDEgKwogMTQgZmlsZXMgY2hhbmdlZCwgMjQyMiBpbnNlcnRpb25zKCspLCAyMzMz IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rp c3BsYXkvc2tsX3VuaXZlcnNhbF9wbGFuZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9za2xfdW5pdmVyc2FsX3BsYW5lLmgKCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2Vm aWxlCmluZGV4IDllMTkzOTVjOGM4ZS4uYzExOGZkNTE2Y2RjIDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmls ZQpAQCAtMjIzLDcgKzIyMyw4IEBAIGk5MTUteSArPSBcCiAJZGlzcGxheS9pbnRlbF9zcHJpdGUu byBcCiAJZGlzcGxheS9pbnRlbF90Yy5vIFwKIAlkaXNwbGF5L2ludGVsX3ZnYS5vIFwKLQlkaXNw bGF5L2k5eHhfcGxhbmUubworCWRpc3BsYXkvaTl4eF9wbGFuZS5vIFwKKwlkaXNwbGF5L3NrbF91 bml2ZXJzYWxfcGxhbmUubwogaTkxNS0kKENPTkZJR19BQ1BJKSArPSBcCiAJZGlzcGxheS9pbnRl bF9hY3BpLm8gXAogCWRpc3BsYXkvaW50ZWxfb3ByZWdpb24ubwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pOXh4X3BsYW5lLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9kaXNwbGF5L2k5eHhfcGxhbmUuYwppbmRleCBiNzg5ODVjODU1YTUuLjZjNTY4MDc5ZjQ5MiAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pOXh4X3BsYW5lLmMKKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pOXh4X3BsYW5lLmMKQEAgLTU3OCwxMCAr NTc4LDYgQEAgaW50ZWxfcHJpbWFyeV9wbGFuZV9jcmVhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LCBlbnVtIHBpcGUgcGlwZSkKIAlpbnQgbnVtX2Zvcm1hdHM7CiAJaW50IHJl dCwgenBvczsKIAotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDkpCi0JCXJldHVybiBza2xf dW5pdmVyc2FsX3BsYW5lX2NyZWF0ZShkZXZfcHJpdiwgcGlwZSwKLQkJCQkJCSAgUExBTkVfUFJJ TUFSWSk7Ci0KIAlwbGFuZSA9IGludGVsX3BsYW5lX2FsbG9jKCk7CiAJaWYgKElTX0VSUihwbGFu ZSkpCiAJCXJldHVybiBwbGFuZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rp c3BsYXkvaWNsX2RzaS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pY2xfZHNpLmMK aW5kZXggOWQyNDVhNjg5MzIzLi45ZWVlYzZmYWRlYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2Rpc3BsYXkvaWNsX2RzaS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rp c3BsYXkvaWNsX2RzaS5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiaW50ZWxfZHNpLmgi CiAjaW5jbHVkZSAiaW50ZWxfcGFuZWwuaCIKICNpbmNsdWRlICJpbnRlbF92ZHNjLmgiCisjaW5j bHVkZSAic2tsX3VuaXZlcnNhbF9wbGFuZS5oIgogCiBzdGF0aWMgaW50IGhlYWRlcl9jcmVkaXRz X2F2YWlsYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCQkJICAgIGVu dW0gdHJhbnNjb2RlciBkc2lfdHJhbnMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9kaXNwbGF5L2ludGVsX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50 ZWxfY3J0Yy5jCmluZGV4IDU3YjBhM2ViZTkwOC4uZWI0Nzg3MTJjMzgxIDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2NydGMuYworKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2NydGMuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1 ZGUgImludGVsX3BpcGVfY3JjLmgiCiAjaW5jbHVkZSAiaW50ZWxfc3ByaXRlLmgiCiAjaW5jbHVk ZSAiaTl4eF9wbGFuZS5oIgorI2luY2x1ZGUgInNrbF91bml2ZXJzYWxfcGxhbmUuaCIKIAogc3Rh dGljIHZvaWQgYXNzZXJ0X3ZibGFua19kaXNhYmxlZChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiB7 CkBAIC0yNDMsNyArMjQ0LDExIEBAIGludCBpbnRlbF9jcnRjX2luaXQoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LCBlbnVtIHBpcGUgcGlwZSkKIAljcnRjLT5waXBlID0gcGlwZTsK IAljcnRjLT5udW1fc2NhbGVycyA9IFJVTlRJTUVfSU5GTyhkZXZfcHJpdiktPm51bV9zY2FsZXJz W3BpcGVdOwogCi0JcHJpbWFyeSA9IGludGVsX3ByaW1hcnlfcGxhbmVfY3JlYXRlKGRldl9wcml2 LCBwaXBlKTsKKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA5KQorCQlwcmltYXJ5ID0gc2ts X3VuaXZlcnNhbF9wbGFuZV9jcmVhdGUoZGV2X3ByaXYsIHBpcGUsCisJCQkJCQkgICAgIFBMQU5F X1BSSU1BUlkpOworCWVsc2UKKwkJcHJpbWFyeSA9IGludGVsX3ByaW1hcnlfcGxhbmVfY3JlYXRl KGRldl9wcml2LCBwaXBlKTsKIAlpZiAoSVNfRVJSKHByaW1hcnkpKSB7CiAJCXJldCA9IFBUUl9F UlIocHJpbWFyeSk7CiAJCWdvdG8gZmFpbDsKQEAgLTI1Myw3ICsyNTgsMTEgQEAgaW50IGludGVs X2NydGNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcGlwZSBw aXBlKQogCWZvcl9lYWNoX3Nwcml0ZShkZXZfcHJpdiwgcGlwZSwgc3ByaXRlKSB7CiAJCXN0cnVj dCBpbnRlbF9wbGFuZSAqcGxhbmU7CiAKLQkJcGxhbmUgPSBpbnRlbF9zcHJpdGVfcGxhbmVfY3Jl YXRlKGRldl9wcml2LCBwaXBlLCBzcHJpdGUpOworCQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+ PSA5KQorCQkJcGxhbmUgPSBza2xfdW5pdmVyc2FsX3BsYW5lX2NyZWF0ZShkZXZfcHJpdiwgcGlw ZSwKKwkJCQkJCQkgICBQTEFORV9TUFJJVEUwICsgc3ByaXRlKTsKKwkJZWxzZQorCQkJcGxhbmUg PSBpbnRlbF9zcHJpdGVfcGxhbmVfY3JlYXRlKGRldl9wcml2LCBwaXBlLCBzcHJpdGUpOwogCQlp ZiAoSVNfRVJSKHBsYW5lKSkgewogCQkJcmV0ID0gUFRSX0VSUihwbGFuZSk7CiAJCQlnb3RvIGZh aWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RkaS5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kZGkuYwppbmRleCA1YmVkNmZh MWZmNTcuLmZhZTdjY2M1Zjk1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlz cGxheS9pbnRlbF9kZGkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVs X2RkaS5jCkBAIC01Myw2ICs1Myw3IEBACiAjaW5jbHVkZSAiaW50ZWxfc3ByaXRlLmgiCiAjaW5j bHVkZSAiaW50ZWxfdGMuaCIKICNpbmNsdWRlICJpbnRlbF92ZHNjLmgiCisjaW5jbHVkZSAic2ts X3VuaXZlcnNhbF9wbGFuZS5oIgogCiBzdGF0aWMgY29uc3QgdTggaW5kZXhfdG9fZHBfc2lnbmFs X2xldmVsc1tdID0gewogCVswXSA9IERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMCB8IERQ X1RSQUlOX1BSRV9FTVBIX0xFVkVMXzAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkv aW50ZWxfZGlzcGxheS5jCmluZGV4IDMyZmY5ZDIwMWFlYi4uNmQyOTc4MTc5YWMwIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYworKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYwpAQCAtOTAsNiArOTAs NyBAQAogI2luY2x1ZGUgImludGVsX3RjLmgiCiAjaW5jbHVkZSAiaW50ZWxfdmdhLmgiCiAjaW5j bHVkZSAiaTl4eF9wbGFuZS5oIgorI2luY2x1ZGUgInNrbF91bml2ZXJzYWxfcGxhbmUuaCIKIAog c3RhdGljIHZvaWQgaTl4eF9jcnRjX2Nsb2NrX2dldChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywK IAkJCQlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpOwpAQCAtMTEyLDcgKzEx Myw2IEBAIHN0YXRpYyB2b2lkIHZsdl9wcmVwYXJlX3BsbChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0 YywKIAkJCSAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpOwog c3RhdGljIHZvaWQgY2h2X3ByZXBhcmVfcGxsKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAogCQkJ ICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZyk7Ci1zdGF0aWMg dm9pZCBza2xfcGZpdF9lbmFibGUoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNf c3RhdGUpOwogc3RhdGljIHZvaWQgaWxrX3BmaXRfZW5hYmxlKGNvbnN0IHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpjcnRjX3N0YXRlKTsKIHN0YXRpYyB2b2lkIGludGVsX21vZGVzZXRfc2V0dXBf aHdfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkJIHN0cnVjdCBkcm1fbW9kZXNl dF9hY3F1aXJlX2N0eCAqY3R4KTsKQEAgLTEwNzgsMjYgKzEwNzgsNiBAQCBzdGF0aWMgdW5zaWdu ZWQgaW50IGludGVsX3RpbGVfc2l6ZShjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpCiAJcmV0dXJuIElTX0dFTihkZXZfcHJpdiwgMikgPyAyMDQ4IDogNDA5NjsKIH0KIAot c3RhdGljIGJvb2wgaXNfY2NzX3BsYW5lKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZi LCBpbnQgcGxhbmUpCi17Ci0JaWYgKCFpc19jY3NfbW9kaWZpZXIoZmItPm1vZGlmaWVyKSkKLQkJ cmV0dXJuIGZhbHNlOwotCi0JcmV0dXJuIHBsYW5lID49IGZiLT5mb3JtYXQtPm51bV9wbGFuZXMg LyAyOwotfQotCi1zdGF0aWMgYm9vbCBpc19nZW4xMl9jY3NfbW9kaWZpZXIodTY0IG1vZGlmaWVy KQotewotCXJldHVybiBtb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9S Q19DQ1MgfHwKLQkgICAgICAgbW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VO MTJfTUNfQ0NTOwotCi19Ci0KLXN0YXRpYyBib29sIGlzX2dlbjEyX2Njc19wbGFuZShjb25zdCBz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IHBsYW5lKQotewotCXJldHVybiBpc19nZW4x Ml9jY3NfbW9kaWZpZXIoZmItPm1vZGlmaWVyKSAmJiBpc19jY3NfcGxhbmUoZmIsIHBsYW5lKTsK LX0KLQogc3RhdGljIGJvb2wgaXNfYXV4X3BsYW5lKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiLCBpbnQgcGxhbmUpCiB7CiAJaWYgKGlzX2Njc19tb2RpZmllcihmYi0+bW9kaWZpZXIp KQpAQCAtMTEwNiwzNSArMTA4Niw2IEBAIHN0YXRpYyBib29sIGlzX2F1eF9wbGFuZShjb25zdCBz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IHBsYW5lKQogCXJldHVybiBwbGFuZSA9PSAx OwogfQogCi1zdGF0aWMgaW50IG1haW5fdG9fY2NzX3BsYW5lKGNvbnN0IHN0cnVjdCBkcm1fZnJh bWVidWZmZXIgKmZiLCBpbnQgbWFpbl9wbGFuZSkKLXsKLQlkcm1fV0FSTl9PTihmYi0+ZGV2LCAh aXNfY2NzX21vZGlmaWVyKGZiLT5tb2RpZmllcikgfHwKLQkJICAgIChtYWluX3BsYW5lICYmIG1h aW5fcGxhbmUgPj0gZmItPmZvcm1hdC0+bnVtX3BsYW5lcyAvIDIpKTsKLQotCXJldHVybiBmYi0+ Zm9ybWF0LT5udW1fcGxhbmVzIC8gMiArIG1haW5fcGxhbmU7Ci19Ci0KLXN0YXRpYyBpbnQgY2Nz X3RvX21haW5fcGxhbmUoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBjY3Nf cGxhbmUpCi17Ci0JZHJtX1dBUk5fT04oZmItPmRldiwgIWlzX2Njc19tb2RpZmllcihmYi0+bW9k aWZpZXIpIHx8Ci0JCSAgICBjY3NfcGxhbmUgPCBmYi0+Zm9ybWF0LT5udW1fcGxhbmVzIC8gMik7 Ci0KLQlyZXR1cm4gY2NzX3BsYW5lIC0gZmItPmZvcm1hdC0+bnVtX3BsYW5lcyAvIDI7Ci19Ci0K LWludCBpbnRlbF9tYWluX3RvX2F1eF9wbGFuZShjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYiwgaW50IG1haW5fcGxhbmUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUg PSB0b19pOTE1KGZiLT5kZXYpOwotCi0JaWYgKGlzX2Njc19tb2RpZmllcihmYi0+bW9kaWZpZXIp KQotCQlyZXR1cm4gbWFpbl90b19jY3NfcGxhbmUoZmIsIG1haW5fcGxhbmUpOwotCWVsc2UgaWYg KElOVEVMX0dFTihpOTE1KSA8IDExICYmCi0JCSBpbnRlbF9mb3JtYXRfaW5mb19pc195dXZfc2Vt aXBsYW5hcihmYi0+Zm9ybWF0LCBmYi0+bW9kaWZpZXIpKQotCQlyZXR1cm4gMTsKLQllbHNlCi0J CXJldHVybiAwOwotfQotCiBib29sCiBpbnRlbF9mb3JtYXRfaW5mb19pc195dXZfc2VtaXBsYW5h cihjb25zdCBzdHJ1Y3QgZHJtX2Zvcm1hdF9pbmZvICppbmZvLAogCQkJCSAgICB1NjQgbW9kaWZp ZXIpCkBAIC0xMTUwLDcgKzExMDEsNyBAQCBzdGF0aWMgYm9vbCBpc19zZW1pcGxhbmFyX3V2X3Bs YW5lKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAogCSAgICAgICBjb2xvcl9wbGFu ZSA9PSAxOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50Cit1bnNpZ25lZCBpbnQKIGludGVsX3Rp bGVfd2lkdGhfYnl0ZXMoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBjb2xv cl9wbGFuZSkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1 KGZiLT5kZXYpOwpAQCAtMTIwMyw3ICsxMTU0LDcgQEAgaW50ZWxfdGlsZV93aWR0aF9ieXRlcyhj b25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IGNvbG9yX3BsYW5lKQogCX0KIH0K IAotc3RhdGljIHVuc2lnbmVkIGludAordW5zaWduZWQgaW50CiBpbnRlbF90aWxlX2hlaWdodChj b25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IGNvbG9yX3BsYW5lKQogewogCWlm IChpc19nZW4xMl9jY3NfcGxhbmUoZmIsIGNvbG9yX3BsYW5lKSkKQEAgLTEzMDMsOCArMTI1NCw4 IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgaW50ZWxfbGluZWFyX2FsaWdubWVudChjb25zdCBzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByCiAJCXJldHVybiAwOwogfQogCi1zdGF0aWMgdW5z aWduZWQgaW50IGludGVsX3N1cmZfYWxpZ25tZW50KGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiLAotCQkJCQkgaW50IGNvbG9yX3BsYW5lKQordW5zaWduZWQgaW50IGludGVsX3N1cmZf YWxpZ25tZW50KGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAorCQkJCSAgaW50IGNv bG9yX3BsYW5lKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5 MTUoZmItPmRldik7CiAKQEAgLTE1NzMsMTAgKzE1MjQsMTAgQEAgc3RhdGljIHUzMiBpbnRlbF9h ZGp1c3RfYWxpZ25lZF9vZmZzZXQoaW50ICp4LCBpbnQgKnksCiAgKiBBZGp1c3QgdGhlIHRpbGUg b2Zmc2V0IGJ5IG1vdmluZyB0aGUgZGlmZmVyZW5jZSBpbnRvCiAgKiB0aGUgeC95IG9mZnNldHMu CiAgKi8KLXN0YXRpYyB1MzIgaW50ZWxfcGxhbmVfYWRqdXN0X2FsaWduZWRfb2Zmc2V0KGludCAq eCwgaW50ICp5LAotCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqc3Rh dGUsCi0JCQkJCSAgICAgaW50IGNvbG9yX3BsYW5lLAotCQkJCQkgICAgIHUzMiBvbGRfb2Zmc2V0 LCB1MzIgbmV3X29mZnNldCkKK3UzMiBpbnRlbF9wbGFuZV9hZGp1c3RfYWxpZ25lZF9vZmZzZXQo aW50ICp4LCBpbnQgKnksCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRl ICpzdGF0ZSwKKwkJCQkgICAgICBpbnQgY29sb3JfcGxhbmUsCisJCQkJICAgICAgdTMyIG9sZF9v ZmZzZXQsIHUzMiBuZXdfb2Zmc2V0KQogewogCXJldHVybiBpbnRlbF9hZGp1c3RfYWxpZ25lZF9v ZmZzZXQoeCwgeSwgc3RhdGUtPmh3LmZiLCBjb2xvcl9wbGFuZSwKIAkJCQkJICAgc3RhdGUtPmh3 LnJvdGF0aW9uLApAQCAtMTg1MCw3ICsxODAxLDcgQEAgYm9vbCBpc19jY3NfbW9kaWZpZXIodTY0 IG1vZGlmaWVyKQogCiBzdGF0aWMgaW50IGdlbjEyX2Njc19hdXhfc3RyaWRlKHN0cnVjdCBkcm1f ZnJhbWVidWZmZXIgKmZiLCBpbnQgY2NzX3BsYW5lKQogewotCXJldHVybiBESVZfUk9VTkRfVVAo ZmItPnBpdGNoZXNbY2NzX3RvX21haW5fcGxhbmUoZmIsIGNjc19wbGFuZSldLAorCXJldHVybiBE SVZfUk9VTkRfVVAoZmItPnBpdGNoZXNbc2tsX2Njc190b19tYWluX3BsYW5lKGZiLCBjY3NfcGxh bmUpXSwKIAkJCSAgICA1MTIpICogNjQ7CiB9CiAKQEAgLTIwMDgsNyArMTk1OSw3IEBAIHN0YXRp YyBib29sIGludGVsX3BsYW5lX25lZWRzX3JlbWFwKGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9z dGF0ZSAqcGxhbmVfc3RhdGUpCiAJcmV0dXJuIHN0cmlkZSA+IG1heF9zdHJpZGU7CiB9CiAKLXN0 YXRpYyB2b2lkCit2b2lkCiBpbnRlbF9mYl9wbGFuZV9nZXRfc3Vic2FtcGxpbmcoaW50ICpoc3Vi LCBpbnQgKnZzdWIsCiAJCQkgICAgICAgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIs CiAJCQkgICAgICAgaW50IGNvbG9yX3BsYW5lKQpAQCAtMjAzMyw3ICsxOTg0LDcgQEAgaW50ZWxf ZmJfcGxhbmVfZ2V0X3N1YnNhbXBsaW5nKGludCAqaHN1YiwgaW50ICp2c3ViLAogCQlyZXR1cm47 CiAJfQogCi0JbWFpbl9wbGFuZSA9IGNjc190b19tYWluX3BsYW5lKGZiLCBjb2xvcl9wbGFuZSk7 CisJbWFpbl9wbGFuZSA9IHNrbF9jY3NfdG9fbWFpbl9wbGFuZShmYiwgY29sb3JfcGxhbmUpOwog CSpoc3ViID0gZHJtX2Zvcm1hdF9pbmZvX2Jsb2NrX3dpZHRoKGZiLT5mb3JtYXQsIGNvbG9yX3Bs YW5lKSAvCiAJCWRybV9mb3JtYXRfaW5mb19ibG9ja193aWR0aChmYi0+Zm9ybWF0LCBtYWluX3Bs YW5lKTsKIApAQCAtMjA3Myw3ICsyMDI0LDcgQEAgaW50ZWxfZmJfY2hlY2tfY2NzX3h5KHN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgY2NzX3BsYW5lLCBpbnQgeCwgaW50IHkpCiAJY2Nz X3ggPSAoeCAqIGhzdWIpICUgdGlsZV93aWR0aDsKIAljY3NfeSA9ICh5ICogdnN1YikgJSB0aWxl X2hlaWdodDsKIAotCW1haW5fcGxhbmUgPSBjY3NfdG9fbWFpbl9wbGFuZShmYiwgY2NzX3BsYW5l KTsKKwltYWluX3BsYW5lID0gc2tsX2Njc190b19tYWluX3BsYW5lKGZiLCBjY3NfcGxhbmUpOwog CW1haW5feCA9IGludGVsX2ZiLT5ub3JtYWxbbWFpbl9wbGFuZV0ueCAlIHRpbGVfd2lkdGg7CiAJ bWFpbl95ID0gaW50ZWxfZmItPm5vcm1hbFttYWluX3BsYW5lXS55ICUgdGlsZV9oZWlnaHQ7CiAK QEAgLTIwOTksNyArMjA1MCw3IEBAIHN0YXRpYyB2b2lkCiBpbnRlbF9mYl9wbGFuZV9kaW1zKGlu dCAqdywgaW50ICpoLCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IGNvbG9yX3BsYW5l KQogewogCWludCBtYWluX3BsYW5lID0gaXNfY2NzX3BsYW5lKGZiLCBjb2xvcl9wbGFuZSkgPwot CQkJIGNjc190b19tYWluX3BsYW5lKGZiLCBjb2xvcl9wbGFuZSkgOiAwOworCQkJIHNrbF9jY3Nf dG9fbWFpbl9wbGFuZShmYiwgY29sb3JfcGxhbmUpIDogMDsKIAlpbnQgbWFpbl9oc3ViLCBtYWlu X3ZzdWI7CiAJaW50IGhzdWIsIHZzdWI7CiAKQEAgLTI0NzQsNzMgKzI0MjUsNiBAQCBzdGF0aWMg aW50IGk5eHhfZm9ybWF0X3RvX2ZvdXJjYyhpbnQgZm9ybWF0KQogCX0KIH0KIAotaW50IHNrbF9m b3JtYXRfdG9fZm91cmNjKGludCBmb3JtYXQsIGJvb2wgcmdiX29yZGVyLCBib29sIGFscGhhKQot ewotCXN3aXRjaCAoZm9ybWF0KSB7Ci0JY2FzZSBQTEFORV9DVExfRk9STUFUX1JHQl81NjU6Ci0J CXJldHVybiBEUk1fRk9STUFUX1JHQjU2NTsKLQljYXNlIFBMQU5FX0NUTF9GT1JNQVRfTlYxMjoK LQkJcmV0dXJuIERSTV9GT1JNQVRfTlYxMjsKLQljYXNlIFBMQU5FX0NUTF9GT1JNQVRfWFlVVjoK LQkJcmV0dXJuIERSTV9GT1JNQVRfWFlVVjg4ODg7Ci0JY2FzZSBQTEFORV9DVExfRk9STUFUX1Aw MTA6Ci0JCXJldHVybiBEUk1fRk9STUFUX1AwMTA7Ci0JY2FzZSBQTEFORV9DVExfRk9STUFUX1Aw MTI6Ci0JCXJldHVybiBEUk1fRk9STUFUX1AwMTI7Ci0JY2FzZSBQTEFORV9DVExfRk9STUFUX1Aw MTY6Ci0JCXJldHVybiBEUk1fRk9STUFUX1AwMTY7Ci0JY2FzZSBQTEFORV9DVExfRk9STUFUX1ky MTA6Ci0JCXJldHVybiBEUk1fRk9STUFUX1kyMTA7Ci0JY2FzZSBQTEFORV9DVExfRk9STUFUX1ky MTI6Ci0JCXJldHVybiBEUk1fRk9STUFUX1kyMTI7Ci0JY2FzZSBQTEFORV9DVExfRk9STUFUX1ky MTY6Ci0JCXJldHVybiBEUk1fRk9STUFUX1kyMTY7Ci0JY2FzZSBQTEFORV9DVExfRk9STUFUX1k0 MTA6Ci0JCXJldHVybiBEUk1fRk9STUFUX1hWWVUyMTAxMDEwOwotCWNhc2UgUExBTkVfQ1RMX0ZP Uk1BVF9ZNDEyOgotCQlyZXR1cm4gRFJNX0ZPUk1BVF9YVllVMTJfMTYxNjE2MTY7Ci0JY2FzZSBQ TEFORV9DVExfRk9STUFUX1k0MTY6Ci0JCXJldHVybiBEUk1fRk9STUFUX1hWWVUxNjE2MTYxNjsK LQlkZWZhdWx0OgotCWNhc2UgUExBTkVfQ1RMX0ZPUk1BVF9YUkdCXzg4ODg6Ci0JCWlmIChyZ2Jf b3JkZXIpIHsKLQkJCWlmIChhbHBoYSkKLQkJCQlyZXR1cm4gRFJNX0ZPUk1BVF9BQkdSODg4ODsK LQkJCWVsc2UKLQkJCQlyZXR1cm4gRFJNX0ZPUk1BVF9YQkdSODg4ODsKLQkJfSBlbHNlIHsKLQkJ CWlmIChhbHBoYSkKLQkJCQlyZXR1cm4gRFJNX0ZPUk1BVF9BUkdCODg4ODsKLQkJCWVsc2UKLQkJ CQlyZXR1cm4gRFJNX0ZPUk1BVF9YUkdCODg4ODsKLQkJfQotCWNhc2UgUExBTkVfQ1RMX0ZPUk1B VF9YUkdCXzIxMDEwMTA6Ci0JCWlmIChyZ2Jfb3JkZXIpIHsKLQkJCWlmIChhbHBoYSkKLQkJCQly ZXR1cm4gRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMDsKLQkJCWVsc2UKLQkJCQlyZXR1cm4gRFJNX0ZP Uk1BVF9YQkdSMjEwMTAxMDsKLQkJfSBlbHNlIHsKLQkJCWlmIChhbHBoYSkKLQkJCQlyZXR1cm4g RFJNX0ZPUk1BVF9BUkdCMjEwMTAxMDsKLQkJCWVsc2UKLQkJCQlyZXR1cm4gRFJNX0ZPUk1BVF9Y UkdCMjEwMTAxMDsKLQkJfQotCWNhc2UgUExBTkVfQ1RMX0ZPUk1BVF9YUkdCXzE2MTYxNjE2RjoK LQkJaWYgKHJnYl9vcmRlcikgewotCQkJaWYgKGFscGhhKQotCQkJCXJldHVybiBEUk1fRk9STUFU X0FCR1IxNjE2MTYxNkY7Ci0JCQllbHNlCi0JCQkJcmV0dXJuIERSTV9GT1JNQVRfWEJHUjE2MTYx NjE2RjsKLQkJfSBlbHNlIHsKLQkJCWlmIChhbHBoYSkKLQkJCQlyZXR1cm4gRFJNX0ZPUk1BVF9B UkdCMTYxNjE2MTZGOwotCQkJZWxzZQotCQkJCXJldHVybiBEUk1fRk9STUFUX1hSR0IxNjE2MTYx NkY7Ci0JCX0KLQl9Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgaTkxNV92bWEgKgogaW5pdGlhbF9wbGFu ZV92bWEoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCiAJCSAgc3RydWN0IGludGVsX2lu aXRpYWxfcGxhbmVfY29uZmlnICpwbGFuZV9jb25maWcpCkBAIC0yODQ1LDM2MiArMjcyOSw2IEBA IGludGVsX2ZpbmRfaW5pdGlhbF9wbGFuZV9vYmooc3RydWN0IGludGVsX2NydGMgKmludGVsX2Ny dGMsCiAJCSAgJnRvX2ludGVsX2Zyb250YnVmZmVyKGZiKS0+Yml0cyk7CiB9CiAKLQotc3RhdGlj IGJvb2wKLXNrbF9jaGVja19tYWluX2Njc19jb29yZGluYXRlcyhzdHJ1Y3QgaW50ZWxfcGxhbmVf c3RhdGUgKnBsYW5lX3N0YXRlLAotCQkJICAgICAgIGludCBtYWluX3gsIGludCBtYWluX3ksIHUz MiBtYWluX29mZnNldCwKLQkJCSAgICAgICBpbnQgY2NzX3BsYW5lKQotewotCWNvbnN0IHN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwotCWludCBhdXhfeCA9 IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjY3NfcGxhbmVdLng7Ci0JaW50IGF1eF95ID0gcGxh bmVfc3RhdGUtPmNvbG9yX3BsYW5lW2Njc19wbGFuZV0ueTsKLQl1MzIgYXV4X29mZnNldCA9IHBs YW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjY3NfcGxhbmVdLm9mZnNldDsKLQl1MzIgYWxpZ25tZW50 ID0gaW50ZWxfc3VyZl9hbGlnbm1lbnQoZmIsIGNjc19wbGFuZSk7Ci0JaW50IGhzdWI7Ci0JaW50 IHZzdWI7Ci0KLQlpbnRlbF9mYl9wbGFuZV9nZXRfc3Vic2FtcGxpbmcoJmhzdWIsICZ2c3ViLCBm YiwgY2NzX3BsYW5lKTsKLQl3aGlsZSAoYXV4X29mZnNldCA+PSBtYWluX29mZnNldCAmJiBhdXhf eSA8PSBtYWluX3kpIHsKLQkJaW50IHgsIHk7Ci0KLQkJaWYgKGF1eF94ID09IG1haW5feCAmJiBh dXhfeSA9PSBtYWluX3kpCi0JCQlicmVhazsKLQotCQlpZiAoYXV4X29mZnNldCA9PSAwKQotCQkJ YnJlYWs7Ci0KLQkJeCA9IGF1eF94IC8gaHN1YjsKLQkJeSA9IGF1eF95IC8gdnN1YjsKLQkJYXV4 X29mZnNldCA9IGludGVsX3BsYW5lX2FkanVzdF9hbGlnbmVkX29mZnNldCgmeCwgJnksCi0JCQkJ CQkJICAgICAgIHBsYW5lX3N0YXRlLAotCQkJCQkJCSAgICAgICBjY3NfcGxhbmUsCi0JCQkJCQkJ ICAgICAgIGF1eF9vZmZzZXQsCi0JCQkJCQkJICAgICAgIGF1eF9vZmZzZXQgLQotCQkJCQkJCQlh bGlnbm1lbnQpOwotCQlhdXhfeCA9IHggKiBoc3ViICsgYXV4X3ggJSBoc3ViOwotCQlhdXhfeSA9 IHkgKiB2c3ViICsgYXV4X3kgJSB2c3ViOwotCX0KLQotCWlmIChhdXhfeCAhPSBtYWluX3ggfHwg YXV4X3kgIT0gbWFpbl95KQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlwbGFuZV9zdGF0ZS0+Y29sb3Jf cGxhbmVbY2NzX3BsYW5lXS5vZmZzZXQgPSBhdXhfb2Zmc2V0OwotCXBsYW5lX3N0YXRlLT5jb2xv cl9wbGFuZVtjY3NfcGxhbmVdLnggPSBhdXhfeDsKLQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVb Y2NzX3BsYW5lXS55ID0gYXV4X3k7Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotdW5zaWduZWQgaW50 Ci1pbnRlbF9wbGFuZV9mZW5jZV95X29mZnNldChjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3Rh dGUgKnBsYW5lX3N0YXRlKQotewotCWludCB4ID0gMCwgeSA9IDA7Ci0KLQlpbnRlbF9wbGFuZV9h ZGp1c3RfYWxpZ25lZF9vZmZzZXQoJngsICZ5LCBwbGFuZV9zdGF0ZSwgMCwKLQkJCQkJICBwbGFu ZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0ub2Zmc2V0LCAwKTsKLQotCXJldHVybiB5OwotfQotCi1z dGF0aWMgaW50IGludGVsX3BsYW5lX21pbl93aWR0aChzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5l LAotCQkJCSBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKLQkJCQkgaW50IGNvbG9y X3BsYW5lLAotCQkJCSB1bnNpZ25lZCBpbnQgcm90YXRpb24pCi17Ci0JaWYgKHBsYW5lLT5taW5f d2lkdGgpCi0JCXJldHVybiBwbGFuZS0+bWluX3dpZHRoKGZiLCBjb2xvcl9wbGFuZSwgcm90YXRp b24pOwotCWVsc2UKLQkJcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbnQgaW50ZWxfcGxhbmVfbWF4 X3dpZHRoKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCi0JCQkJIGNvbnN0IHN0cnVjdCBkcm1f ZnJhbWVidWZmZXIgKmZiLAotCQkJCSBpbnQgY29sb3JfcGxhbmUsCi0JCQkJIHVuc2lnbmVkIGlu dCByb3RhdGlvbikKLXsKLQlpZiAocGxhbmUtPm1heF93aWR0aCkKLQkJcmV0dXJuIHBsYW5lLT5t YXhfd2lkdGgoZmIsIGNvbG9yX3BsYW5lLCByb3RhdGlvbik7Ci0JZWxzZQotCQlyZXR1cm4gSU5U X01BWDsKLX0KLQotc3RhdGljIGludCBpbnRlbF9wbGFuZV9tYXhfaGVpZ2h0KHN0cnVjdCBpbnRl bF9wbGFuZSAqcGxhbmUsCi0JCQkJICBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwK LQkJCQkgIGludCBjb2xvcl9wbGFuZSwKLQkJCQkgIHVuc2lnbmVkIGludCByb3RhdGlvbikKLXsK LQlpZiAocGxhbmUtPm1heF9oZWlnaHQpCi0JCXJldHVybiBwbGFuZS0+bWF4X2hlaWdodChmYiwg Y29sb3JfcGxhbmUsIHJvdGF0aW9uKTsKLQllbHNlCi0JCXJldHVybiBJTlRfTUFYOwotfQotCi1p bnQgc2tsX2NhbGNfbWFpbl9zdXJmYWNlX29mZnNldChjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVf c3RhdGUgKnBsYW5lX3N0YXRlLAotCQkJCSBpbnQgKngsIGludCAqeSwgdTMyICpvZmZzZXQpCi17 Ci0Jc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSA9IHRvX2ludGVsX3BsYW5lKHBsYW5lX3N0YXRl LT51YXBpLnBsYW5lKTsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19p OTE1KHBsYW5lLT5iYXNlLmRldik7Ci0JY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIg PSBwbGFuZV9zdGF0ZS0+aHcuZmI7Ci0JY29uc3QgaW50IGF1eF9wbGFuZSA9IGludGVsX21haW5f dG9fYXV4X3BsYW5lKGZiLCAwKTsKLQljb25zdCB1MzIgYXV4X29mZnNldCA9IHBsYW5lX3N0YXRl LT5jb2xvcl9wbGFuZVthdXhfcGxhbmVdLm9mZnNldDsKLQljb25zdCB1MzIgYWxpZ25tZW50ID0g aW50ZWxfc3VyZl9hbGlnbm1lbnQoZmIsIDApOwotCWNvbnN0IGludCB3ID0gZHJtX3JlY3Rfd2lk dGgoJnBsYW5lX3N0YXRlLT51YXBpLnNyYykgPj4gMTY7Ci0KLQlpbnRlbF9hZGRfZmJfb2Zmc2V0 cyh4LCB5LCBwbGFuZV9zdGF0ZSwgMCk7Ci0JKm9mZnNldCA9IGludGVsX3BsYW5lX2NvbXB1dGVf YWxpZ25lZF9vZmZzZXQoeCwgeSwgcGxhbmVfc3RhdGUsIDApOwotCWlmIChkcm1fV0FSTl9PTigm ZGV2X3ByaXYtPmRybSwgYWxpZ25tZW50ICYmICFpc19wb3dlcl9vZl8yKGFsaWdubWVudCkpKQot CQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qCi0JICogQVVYIHN1cmZhY2Ugb2Zmc2V0IGlzIHNwZWNp ZmllZCBhcyB0aGUgZGlzdGFuY2UgZnJvbSB0aGUKLQkgKiBtYWluIHN1cmZhY2Ugb2Zmc2V0LCBh bmQgaXQgbXVzdCBiZSBub24tbmVnYXRpdmUuIE1ha2UKLQkgKiBzdXJlIHRoYXQgaXMgd2hhdCB3 ZSB3aWxsIGdldC4KLQkgKi8KLQlpZiAoYXV4X3BsYW5lICYmICpvZmZzZXQgPiBhdXhfb2Zmc2V0 KQotCQkqb2Zmc2V0ID0gaW50ZWxfcGxhbmVfYWRqdXN0X2FsaWduZWRfb2Zmc2V0KHgsIHksIHBs YW5lX3N0YXRlLCAwLAotCQkJCQkJCSAgICAqb2Zmc2V0LAotCQkJCQkJCSAgICBhdXhfb2Zmc2V0 ICYgfihhbGlnbm1lbnQgLSAxKSk7Ci0KLQkvKgotCSAqIFdoZW4gdXNpbmcgYW4gWC10aWxlZCBz dXJmYWNlLCB0aGUgcGxhbmUgYmxvd3MgdXAKLQkgKiBpZiB0aGUgeCBvZmZzZXQgKyB3aWR0aCBl eGNlZWQgdGhlIHN0cmlkZS4KLQkgKgotCSAqIFRPRE86IGxpbmVhciBhbmQgWS10aWxlZCBzZWVt IGZpbmUsIFlmIHVudGVzdGVkLAotCSAqLwotCWlmIChmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JN QVRfTU9EX1hfVElMRUQpIHsKLQkJaW50IGNwcCA9IGZiLT5mb3JtYXQtPmNwcFswXTsKLQotCQl3 aGlsZSAoKCp4ICsgdykgKiBjcHAgPiBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0uc3RyaWRl KSB7Ci0JCQlpZiAoKm9mZnNldCA9PSAwKSB7Ci0JCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5k cm0sCi0JCQkJCSAgICAiVW5hYmxlIHRvIGZpbmQgc3VpdGFibGUgZGlzcGxheSBzdXJmYWNlIG9m ZnNldCBkdWUgdG8gWC10aWxpbmdcbiIpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCi0J CQkqb2Zmc2V0ID0gaW50ZWxfcGxhbmVfYWRqdXN0X2FsaWduZWRfb2Zmc2V0KHgsIHksIHBsYW5l X3N0YXRlLCAwLAotCQkJCQkJCQkgICAgKm9mZnNldCwKLQkJCQkJCQkJICAgICpvZmZzZXQgLSBh bGlnbm1lbnQpOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2tsX2No ZWNrX21haW5fc3VyZmFjZShzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQot ewotCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0b19pbnRlbF9wbGFuZShwbGFuZV9zdGF0 ZS0+dWFwaS5wbGFuZSk7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9f aTkxNShwbGFuZS0+YmFzZS5kZXYpOwotCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZi ID0gcGxhbmVfc3RhdGUtPmh3LmZiOwotCWNvbnN0IHVuc2lnbmVkIGludCByb3RhdGlvbiA9IHBs YW5lX3N0YXRlLT5ody5yb3RhdGlvbjsKLQlpbnQgeCA9IHBsYW5lX3N0YXRlLT51YXBpLnNyYy54 MSA+PiAxNjsKLQlpbnQgeSA9IHBsYW5lX3N0YXRlLT51YXBpLnNyYy55MSA+PiAxNjsKLQljb25z dCBpbnQgdyA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5zcmMpID4+IDE2Owot CWNvbnN0IGludCBoID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+dWFwaS5zcmMpID4+ IDE2OwotCWNvbnN0IGludCBtaW5fd2lkdGggPSBpbnRlbF9wbGFuZV9taW5fd2lkdGgocGxhbmUs IGZiLCAwLCByb3RhdGlvbik7Ci0JY29uc3QgaW50IG1heF93aWR0aCA9IGludGVsX3BsYW5lX21h eF93aWR0aChwbGFuZSwgZmIsIDAsIHJvdGF0aW9uKTsKLQljb25zdCBpbnQgbWF4X2hlaWdodCA9 IGludGVsX3BsYW5lX21heF9oZWlnaHQocGxhbmUsIGZiLCAwLCByb3RhdGlvbik7Ci0JY29uc3Qg aW50IGF1eF9wbGFuZSA9IGludGVsX21haW5fdG9fYXV4X3BsYW5lKGZiLCAwKTsKLQljb25zdCB1 MzIgYWxpZ25tZW50ID0gaW50ZWxfc3VyZl9hbGlnbm1lbnQoZmIsIDApOwotCXUzMiBvZmZzZXQ7 Ci0JaW50IHJldDsKLQotCWlmICh3ID4gbWF4X3dpZHRoIHx8IHcgPCBtaW5fd2lkdGggfHwgaCA+ IG1heF9oZWlnaHQpIHsKLQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0JCQkgICAgInJl cXVlc3RlZCBZL1JHQiBzb3VyY2Ugc2l6ZSAlZHglZCBvdXRzaWRlIGxpbWl0cyAobWluOiAlZHgx IG1heDogJWR4JWQpXG4iLAotCQkJICAgIHcsIGgsIG1pbl93aWR0aCwgbWF4X3dpZHRoLCBtYXhf aGVpZ2h0KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0ID0gc2tsX2NhbGNfbWFpbl9z dXJmYWNlX29mZnNldChwbGFuZV9zdGF0ZSwgJngsICZ5LCAmb2Zmc2V0KTsKLQlpZiAocmV0KQot CQlyZXR1cm4gcmV0OwotCi0JLyoKLQkgKiBDQ1MgQVVYIHN1cmZhY2UgZG9lc24ndCBoYXZlIGl0 cyBvd24geC95IG9mZnNldHMsIHdlIG11c3QgbWFrZSBzdXJlCi0JICogdGhleSBtYXRjaCB3aXRo IHRoZSBtYWluIHN1cmZhY2UgeC95IG9mZnNldHMuCi0JICovCi0JaWYgKGlzX2Njc19tb2RpZmll cihmYi0+bW9kaWZpZXIpKSB7Ci0JCXdoaWxlICghc2tsX2NoZWNrX21haW5fY2NzX2Nvb3JkaW5h dGVzKHBsYW5lX3N0YXRlLCB4LCB5LAotCQkJCQkJICAgICAgIG9mZnNldCwgYXV4X3BsYW5lKSkg ewotCQkJaWYgKG9mZnNldCA9PSAwKQotCQkJCWJyZWFrOwotCi0JCQlvZmZzZXQgPSBpbnRlbF9w bGFuZV9hZGp1c3RfYWxpZ25lZF9vZmZzZXQoJngsICZ5LCBwbGFuZV9zdGF0ZSwgMCwKLQkJCQkJ CQkJICAgb2Zmc2V0LCBvZmZzZXQgLSBhbGlnbm1lbnQpOwotCQl9Ci0KLQkJaWYgKHggIT0gcGxh bmVfc3RhdGUtPmNvbG9yX3BsYW5lW2F1eF9wbGFuZV0ueCB8fAotCQkgICAgeSAhPSBwbGFuZV9z dGF0ZS0+Y29sb3JfcGxhbmVbYXV4X3BsYW5lXS55KSB7Ci0JCQlkcm1fZGJnX2ttcygmZGV2X3By aXYtPmRybSwKLQkJCQkgICAgIlVuYWJsZSB0byBmaW5kIHN1aXRhYmxlIGRpc3BsYXkgc3VyZmFj ZSBvZmZzZXQgZHVlIHRvIENDU1xuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KLQot CXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS5vZmZzZXQgPSBvZmZzZXQ7Ci0JcGxhbmVfc3Rh dGUtPmNvbG9yX3BsYW5lWzBdLnggPSB4OwotCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS55 ID0geTsKLQotCS8qCi0JICogUHV0IHRoZSBmaW5hbCBjb29yZGluYXRlcyBiYWNrIHNvIHRoYXQg dGhlIHNyYwotCSAqIGNvb3JkaW5hdGUgY2hlY2tzIHdpbGwgc2VlIHRoZSByaWdodCB2YWx1ZXMu Ci0JICovCi0JZHJtX3JlY3RfdHJhbnNsYXRlX3RvKCZwbGFuZV9zdGF0ZS0+dWFwaS5zcmMsCi0J CQkgICAgICB4IDw8IDE2LCB5IDw8IDE2KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50 IHNrbF9jaGVja19udjEyX2F1eF9zdXJmYWNlKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxh bmVfc3RhdGUpCi17Ci0Jc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSA9IHRvX2ludGVsX3BsYW5l KHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lKTsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKLQljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKLQl1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBw bGFuZV9zdGF0ZS0+aHcucm90YXRpb247Ci0JaW50IHV2X3BsYW5lID0gMTsKLQlpbnQgbWF4X3dp ZHRoID0gaW50ZWxfcGxhbmVfbWF4X3dpZHRoKHBsYW5lLCBmYiwgdXZfcGxhbmUsIHJvdGF0aW9u KTsKLQlpbnQgbWF4X2hlaWdodCA9IGludGVsX3BsYW5lX21heF9oZWlnaHQocGxhbmUsIGZiLCB1 dl9wbGFuZSwgcm90YXRpb24pOwotCWludCB4ID0gcGxhbmVfc3RhdGUtPnVhcGkuc3JjLngxID4+ IDE3OwotCWludCB5ID0gcGxhbmVfc3RhdGUtPnVhcGkuc3JjLnkxID4+IDE3OwotCWludCB3ID0g ZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLnNyYykgPj4gMTc7Ci0JaW50IGggPSBk cm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0YXRlLT51YXBpLnNyYykgPj4gMTc7Ci0JdTMyIG9mZnNl dDsKLQotCS8qIEZJWE1FIG5vdCBxdWl0ZSBzdXJlIGhvdy9pZiB0aGVzZSBhcHBseSB0byB0aGUg Y2hyb21hIHBsYW5lICovCi0JaWYgKHcgPiBtYXhfd2lkdGggfHwgaCA+IG1heF9oZWlnaHQpIHsK LQkJZHJtX2RiZ19rbXMoJmk5MTUtPmRybSwKLQkJCSAgICAiQ2JDciBzb3VyY2Ugc2l6ZSAlZHgl ZCB0b28gYmlnIChsaW1pdCAlZHglZClcbiIsCi0JCQkgICAgdywgaCwgbWF4X3dpZHRoLCBtYXhf aGVpZ2h0KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaW50ZWxfYWRkX2ZiX29mZnNldHMo JngsICZ5LCBwbGFuZV9zdGF0ZSwgdXZfcGxhbmUpOwotCW9mZnNldCA9IGludGVsX3BsYW5lX2Nv bXB1dGVfYWxpZ25lZF9vZmZzZXQoJngsICZ5LAotCQkJCQkJICAgIHBsYW5lX3N0YXRlLCB1dl9w bGFuZSk7Ci0KLQlpZiAoaXNfY2NzX21vZGlmaWVyKGZiLT5tb2RpZmllcikpIHsKLQkJaW50IGNj c19wbGFuZSA9IG1haW5fdG9fY2NzX3BsYW5lKGZiLCB1dl9wbGFuZSk7Ci0JCXUzMiBhdXhfb2Zm c2V0ID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2Njc19wbGFuZV0ub2Zmc2V0OwotCQl1MzIg YWxpZ25tZW50ID0gaW50ZWxfc3VyZl9hbGlnbm1lbnQoZmIsIHV2X3BsYW5lKTsKLQotCQlpZiAo b2Zmc2V0ID4gYXV4X29mZnNldCkKLQkJCW9mZnNldCA9IGludGVsX3BsYW5lX2FkanVzdF9hbGln bmVkX29mZnNldCgmeCwgJnksCi0JCQkJCQkJCSAgIHBsYW5lX3N0YXRlLAotCQkJCQkJCQkgICB1 dl9wbGFuZSwKLQkJCQkJCQkJICAgb2Zmc2V0LAotCQkJCQkJCQkgICBhdXhfb2Zmc2V0ICYgfihh bGlnbm1lbnQgLSAxKSk7Ci0KLQkJd2hpbGUgKCFza2xfY2hlY2tfbWFpbl9jY3NfY29vcmRpbmF0 ZXMocGxhbmVfc3RhdGUsIHgsIHksCi0JCQkJCQkgICAgICAgb2Zmc2V0LCBjY3NfcGxhbmUpKSB7 Ci0JCQlpZiAob2Zmc2V0ID09IDApCi0JCQkJYnJlYWs7Ci0KLQkJCW9mZnNldCA9IGludGVsX3Bs YW5lX2FkanVzdF9hbGlnbmVkX29mZnNldCgmeCwgJnksCi0JCQkJCQkJCSAgIHBsYW5lX3N0YXRl LAotCQkJCQkJCQkgICB1dl9wbGFuZSwKLQkJCQkJCQkJICAgb2Zmc2V0LCBvZmZzZXQgLSBhbGln bm1lbnQpOwotCQl9Ci0KLQkJaWYgKHggIT0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2Njc19w bGFuZV0ueCB8fAotCQkgICAgeSAhPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbY2NzX3BsYW5l XS55KSB7Ci0JCQlkcm1fZGJnX2ttcygmaTkxNS0+ZHJtLAotCQkJCSAgICAiVW5hYmxlIHRvIGZp bmQgc3VpdGFibGUgZGlzcGxheSBzdXJmYWNlIG9mZnNldCBkdWUgdG8gQ0NTXG4iKTsKLQkJCXJl dHVybiAtRUlOVkFMOwotCQl9Ci0JfQotCi0JcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW3V2X3Bs YW5lXS5vZmZzZXQgPSBvZmZzZXQ7Ci0JcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW3V2X3BsYW5l XS54ID0geDsKLQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbdXZfcGxhbmVdLnkgPSB5OwotCi0J cmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2tsX2NoZWNrX2Njc19hdXhfc3VyZmFjZShzdHJ1 Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQotewotCWNvbnN0IHN0cnVjdCBkcm1f ZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwotCWludCBzcmNfeCA9IHBsYW5l X3N0YXRlLT51YXBpLnNyYy54MSA+PiAxNjsKLQlpbnQgc3JjX3kgPSBwbGFuZV9zdGF0ZS0+dWFw aS5zcmMueTEgPj4gMTY7Ci0JdTMyIG9mZnNldDsKLQlpbnQgY2NzX3BsYW5lOwotCi0JZm9yIChj Y3NfcGxhbmUgPSAwOyBjY3NfcGxhbmUgPCBmYi0+Zm9ybWF0LT5udW1fcGxhbmVzOyBjY3NfcGxh bmUrKykgewotCQlpbnQgbWFpbl9oc3ViLCBtYWluX3ZzdWI7Ci0JCWludCBoc3ViLCB2c3ViOwot CQlpbnQgeCwgeTsKLQotCQlpZiAoIWlzX2Njc19wbGFuZShmYiwgY2NzX3BsYW5lKSkKLQkJCWNv bnRpbnVlOwotCi0JCWludGVsX2ZiX3BsYW5lX2dldF9zdWJzYW1wbGluZygmbWFpbl9oc3ViLCAm bWFpbl92c3ViLCBmYiwKLQkJCQkJICAgICAgIGNjc190b19tYWluX3BsYW5lKGZiLCBjY3NfcGxh bmUpKTsKLQkJaW50ZWxfZmJfcGxhbmVfZ2V0X3N1YnNhbXBsaW5nKCZoc3ViLCAmdnN1YiwgZmIs IGNjc19wbGFuZSk7Ci0KLQkJaHN1YiAqPSBtYWluX2hzdWI7Ci0JCXZzdWIgKj0gbWFpbl92c3Vi OwotCQl4ID0gc3JjX3ggLyBoc3ViOwotCQl5ID0gc3JjX3kgLyB2c3ViOwotCi0JCWludGVsX2Fk ZF9mYl9vZmZzZXRzKCZ4LCAmeSwgcGxhbmVfc3RhdGUsIGNjc19wbGFuZSk7Ci0KLQkJb2Zmc2V0 ID0gaW50ZWxfcGxhbmVfY29tcHV0ZV9hbGlnbmVkX29mZnNldCgmeCwgJnksCi0JCQkJCQkJICAg IHBsYW5lX3N0YXRlLAotCQkJCQkJCSAgICBjY3NfcGxhbmUpOwotCi0JCXBsYW5lX3N0YXRlLT5j b2xvcl9wbGFuZVtjY3NfcGxhbmVdLm9mZnNldCA9IG9mZnNldDsKLQkJcGxhbmVfc3RhdGUtPmNv bG9yX3BsYW5lW2Njc19wbGFuZV0ueCA9ICh4ICogaHN1YiArCi0JCQkJCQkJIHNyY194ICUgaHN1 YikgLwotCQkJCQkJCW1haW5faHN1YjsKLQkJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2Njc19w bGFuZV0ueSA9ICh5ICogdnN1YiArCi0JCQkJCQkJIHNyY195ICUgdnN1YikgLwotCQkJCQkJCW1h aW5fdnN1YjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHNrbF9jaGVja19wbGFuZV9zdXJm YWNlKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCi17Ci0JY29uc3Qgc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7Ci0JaW50IHJldCwg aTsKLQotCXJldCA9IGludGVsX3BsYW5lX2NvbXB1dGVfZ3R0KHBsYW5lX3N0YXRlKTsKLQlpZiAo cmV0KQotCQlyZXR1cm4gcmV0OwotCi0JaWYgKCFwbGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxlKQot CQlyZXR1cm4gMDsKLQotCS8qCi0JICogSGFuZGxlIHRoZSBBVVggc3VyZmFjZSBmaXJzdCBzaW5j ZSB0aGUgbWFpbiBzdXJmYWNlIHNldHVwIGRlcGVuZHMgb24KLQkgKiBpdC4KLQkgKi8KLQlpZiAo aXNfY2NzX21vZGlmaWVyKGZiLT5tb2RpZmllcikpIHsKLQkJcmV0ID0gc2tsX2NoZWNrX2Njc19h dXhfc3VyZmFjZShwbGFuZV9zdGF0ZSk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCX0K LQotCWlmIChpbnRlbF9mb3JtYXRfaW5mb19pc195dXZfc2VtaXBsYW5hcihmYi0+Zm9ybWF0LAot CQkJCQkJZmItPm1vZGlmaWVyKSkgewotCQlyZXQgPSBza2xfY2hlY2tfbnYxMl9hdXhfc3VyZmFj ZShwbGFuZV9zdGF0ZSk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCX0KLQotCWZvciAo aSA9IGZiLT5mb3JtYXQtPm51bV9wbGFuZXM7IGkgPCBBUlJBWV9TSVpFKHBsYW5lX3N0YXRlLT5j b2xvcl9wbGFuZSk7IGkrKykgewotCQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbaV0ub2Zmc2V0 ID0gMDsKLQkJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2ldLnggPSAwOwotCQlwbGFuZV9zdGF0 ZS0+Y29sb3JfcGxhbmVbaV0ueSA9IDA7Ci0JfQotCi0JcmV0ID0gc2tsX2NoZWNrX21haW5fc3Vy ZmFjZShwbGFuZV9zdGF0ZSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiAw OwotfQotCiBzdGF0aWMgdm9pZCBza2xfZGV0YWNoX3NjYWxlcihzdHJ1Y3QgaW50ZWxfY3J0YyAq aW50ZWxfY3J0YywgaW50IGlkKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBpbnRlbF9j cnRjLT5iYXNlLmRldjsKQEAgLTMyMzMsMzAyICsyNzYxLDI0IEBAIHN0YXRpYyB2b2lkIHNrbF9k ZXRhY2hfc2NhbGVycyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkK IAl9CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgc2tsX3BsYW5lX3N0cmlkZV9tdWx0KGNvbnN0 IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAotCQkJCQkgIGludCBjb2xvcl9wbGFuZSwgdW5z aWduZWQgaW50IHJvdGF0aW9uKQotewotCS8qCi0JICogVGhlIHN0cmlkZSBpcyBlaXRoZXIgZXhw cmVzc2VkIGFzIGEgbXVsdGlwbGUgb2YgNjQgYnl0ZXMgY2h1bmtzIGZvcgotCSAqIGxpbmVhciBi dWZmZXJzIG9yIGluIG51bWJlciBvZiB0aWxlcyBmb3IgdGlsZWQgYnVmZmVycy4KLQkgKi8KLQlp ZiAoaXNfc3VyZmFjZV9saW5lYXIoZmIsIGNvbG9yX3BsYW5lKSkKLQkJcmV0dXJuIDY0OwotCWVs c2UgaWYgKGRybV9yb3RhdGlvbl85MF9vcl8yNzAocm90YXRpb24pKQotCQlyZXR1cm4gaW50ZWxf dGlsZV9oZWlnaHQoZmIsIGNvbG9yX3BsYW5lKTsKLQllbHNlCi0JCXJldHVybiBpbnRlbF90aWxl X3dpZHRoX2J5dGVzKGZiLCBjb2xvcl9wbGFuZSk7Ci19Ci0KLXUzMiBza2xfcGxhbmVfc3RyaWRl KGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUsCi0JCSAgICAgaW50 IGNvbG9yX3BsYW5lKQotewotCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxh bmVfc3RhdGUtPmh3LmZiOwotCXVuc2lnbmVkIGludCByb3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5o dy5yb3RhdGlvbjsKLQl1MzIgc3RyaWRlID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2NvbG9y X3BsYW5lXS5zdHJpZGU7Ci0KLQlpZiAoY29sb3JfcGxhbmUgPj0gZmItPmZvcm1hdC0+bnVtX3Bs YW5lcykKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gc3RyaWRlIC8gc2tsX3BsYW5lX3N0cmlkZV9t dWx0KGZiLCBjb2xvcl9wbGFuZSwgcm90YXRpb24pOwotfQotCi1zdGF0aWMgdTMyIHNrbF9wbGFu ZV9jdGxfZm9ybWF0KHUzMiBwaXhlbF9mb3JtYXQpCi17Ci0Jc3dpdGNoIChwaXhlbF9mb3JtYXQp IHsKLQljYXNlIERSTV9GT1JNQVRfQzg6Ci0JCXJldHVybiBQTEFORV9DVExfRk9STUFUX0lOREVY RUQ7Ci0JY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKLQkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRf UkdCXzU2NTsKLQljYXNlIERSTV9GT1JNQVRfWEJHUjg4ODg6Ci0JY2FzZSBEUk1fRk9STUFUX0FC R1I4ODg4OgotCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9YUkdCXzg4ODggfCBQTEFORV9DVExf T1JERVJfUkdCWDsKLQljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6Ci0JY2FzZSBEUk1fRk9STUFU X0FSR0I4ODg4OgotCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9YUkdCXzg4ODg7Ci0JY2FzZSBE Uk1fRk9STUFUX1hCR1IyMTAxMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMDoKLQkJ cmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfWFJHQl8yMTAxMDEwIHwgUExBTkVfQ1RMX09SREVSX1JH Qlg7Ci0JY2FzZSBEUk1fRk9STUFUX1hSR0IyMTAxMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9BUkdC MjEwMTAxMDoKLQkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfWFJHQl8yMTAxMDEwOwotCWNhc2Ug RFJNX0ZPUk1BVF9YQkdSMTYxNjE2MTZGOgotCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMTYxNjE2MTZG OgotCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9YUkdCXzE2MTYxNjE2RiB8IFBMQU5FX0NUTF9P UkRFUl9SR0JYOwotCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMTYxNjE2MTZGOgotCWNhc2UgRFJNX0ZP Uk1BVF9BUkdCMTYxNjE2MTZGOgotCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9YUkdCXzE2MTYx NjE2RjsKLQljYXNlIERSTV9GT1JNQVRfWFlVVjg4ODg6Ci0JCXJldHVybiBQTEFORV9DVExfRk9S TUFUX1hZVVY7Ci0JY2FzZSBEUk1fRk9STUFUX1lVWVY6Ci0JCXJldHVybiBQTEFORV9DVExfRk9S TUFUX1lVVjQyMiB8IFBMQU5FX0NUTF9ZVVY0MjJfWVVZVjsKLQljYXNlIERSTV9GT1JNQVRfWVZZ VToKLQkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfWVVWNDIyIHwgUExBTkVfQ1RMX1lVVjQyMl9Z VllVOwotCWNhc2UgRFJNX0ZPUk1BVF9VWVZZOgotCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9Z VVY0MjIgfCBQTEFORV9DVExfWVVWNDIyX1VZVlk7Ci0JY2FzZSBEUk1fRk9STUFUX1ZZVVk6Ci0J CXJldHVybiBQTEFORV9DVExfRk9STUFUX1lVVjQyMiB8IFBMQU5FX0NUTF9ZVVY0MjJfVllVWTsK LQljYXNlIERSTV9GT1JNQVRfTlYxMjoKLQkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfTlYxMjsK LQljYXNlIERSTV9GT1JNQVRfUDAxMDoKLQkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfUDAxMDsK LQljYXNlIERSTV9GT1JNQVRfUDAxMjoKLQkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfUDAxMjsK LQljYXNlIERSTV9GT1JNQVRfUDAxNjoKLQkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfUDAxNjsK LQljYXNlIERSTV9GT1JNQVRfWTIxMDoKLQkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfWTIxMDsK LQljYXNlIERSTV9GT1JNQVRfWTIxMjoKLQkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfWTIxMjsK LQljYXNlIERSTV9GT1JNQVRfWTIxNjoKLQkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfWTIxNjsK LQljYXNlIERSTV9GT1JNQVRfWFZZVTIxMDEwMTA6Ci0JCXJldHVybiBQTEFORV9DVExfRk9STUFU X1k0MTA7Ci0JY2FzZSBEUk1fRk9STUFUX1hWWVUxMl8xNjE2MTYxNjoKLQkJcmV0dXJuIFBMQU5F X0NUTF9GT1JNQVRfWTQxMjsKLQljYXNlIERSTV9GT1JNQVRfWFZZVTE2MTYxNjE2OgotCQlyZXR1 cm4gUExBTkVfQ1RMX0ZPUk1BVF9ZNDE2OwotCWRlZmF1bHQ6Ci0JCU1JU1NJTkdfQ0FTRShwaXhl bF9mb3JtYXQpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdTMyIHNrbF9wbGFuZV9j dGxfYWxwaGEoY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKLXsK LQlpZiAoIXBsYW5lX3N0YXRlLT5ody5mYi0+Zm9ybWF0LT5oYXNfYWxwaGEpCi0JCXJldHVybiBQ TEFORV9DVExfQUxQSEFfRElTQUJMRTsKLQotCXN3aXRjaCAocGxhbmVfc3RhdGUtPmh3LnBpeGVs X2JsZW5kX21vZGUpIHsKLQljYXNlIERSTV9NT0RFX0JMRU5EX1BJWEVMX05PTkU6Ci0JCXJldHVy biBQTEFORV9DVExfQUxQSEFfRElTQUJMRTsKLQljYXNlIERSTV9NT0RFX0JMRU5EX1BSRU1VTFRJ OgotCQlyZXR1cm4gUExBTkVfQ1RMX0FMUEhBX1NXX1BSRU1VTFRJUExZOwotCWNhc2UgRFJNX01P REVfQkxFTkRfQ09WRVJBR0U6Ci0JCXJldHVybiBQTEFORV9DVExfQUxQSEFfSFdfUFJFTVVMVElQ TFk7Ci0JZGVmYXVsdDoKLQkJTUlTU0lOR19DQVNFKHBsYW5lX3N0YXRlLT5ody5waXhlbF9ibGVu ZF9tb2RlKTsKLQkJcmV0dXJuIFBMQU5FX0NUTF9BTFBIQV9ESVNBQkxFOwotCX0KLX0KLQotc3Rh dGljIHUzMiBnbGtfcGxhbmVfY29sb3JfY3RsX2FscGhhKGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFu ZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCi17Ci0JaWYgKCFwbGFuZV9zdGF0ZS0+aHcuZmItPmZvcm1h dC0+aGFzX2FscGhhKQotCQlyZXR1cm4gUExBTkVfQ09MT1JfQUxQSEFfRElTQUJMRTsKLQotCXN3 aXRjaCAocGxhbmVfc3RhdGUtPmh3LnBpeGVsX2JsZW5kX21vZGUpIHsKLQljYXNlIERSTV9NT0RF X0JMRU5EX1BJWEVMX05PTkU6Ci0JCXJldHVybiBQTEFORV9DT0xPUl9BTFBIQV9ESVNBQkxFOwot CWNhc2UgRFJNX01PREVfQkxFTkRfUFJFTVVMVEk6Ci0JCXJldHVybiBQTEFORV9DT0xPUl9BTFBI QV9TV19QUkVNVUxUSVBMWTsKLQljYXNlIERSTV9NT0RFX0JMRU5EX0NPVkVSQUdFOgotCQlyZXR1 cm4gUExBTkVfQ09MT1JfQUxQSEFfSFdfUFJFTVVMVElQTFk7Ci0JZGVmYXVsdDoKLQkJTUlTU0lO R19DQVNFKHBsYW5lX3N0YXRlLT5ody5waXhlbF9ibGVuZF9tb2RlKTsKLQkJcmV0dXJuIFBMQU5F X0NPTE9SX0FMUEhBX0RJU0FCTEU7Ci0JfQotfQotCi1zdGF0aWMgdTMyIHNrbF9wbGFuZV9jdGxf dGlsaW5nKHU2NCBmYl9tb2RpZmllcikKLXsKLQlzd2l0Y2ggKGZiX21vZGlmaWVyKSB7Ci0JY2Fz ZSBEUk1fRk9STUFUX01PRF9MSU5FQVI6Ci0JCWJyZWFrOwotCWNhc2UgSTkxNV9GT1JNQVRfTU9E X1hfVElMRUQ6Ci0JCXJldHVybiBQTEFORV9DVExfVElMRURfWDsKLQljYXNlIEk5MTVfRk9STUFU X01PRF9ZX1RJTEVEOgotCQlyZXR1cm4gUExBTkVfQ1RMX1RJTEVEX1k7Ci0JY2FzZSBJOTE1X0ZP Uk1BVF9NT0RfWV9USUxFRF9DQ1M6Ci0JCXJldHVybiBQTEFORV9DVExfVElMRURfWSB8IFBMQU5F X0NUTF9SRU5ERVJfREVDT01QUkVTU0lPTl9FTkFCTEU7Ci0JY2FzZSBJOTE1X0ZPUk1BVF9NT0Rf WV9USUxFRF9HRU4xMl9SQ19DQ1M6Ci0JCXJldHVybiBQTEFORV9DVExfVElMRURfWSB8Ci0JCSAg ICAgICBQTEFORV9DVExfUkVOREVSX0RFQ09NUFJFU1NJT05fRU5BQkxFIHwKLQkJICAgICAgIFBM QU5FX0NUTF9DTEVBUl9DT0xPUl9ESVNBQkxFOwotCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElM RURfR0VOMTJfTUNfQ0NTOgotCQlyZXR1cm4gUExBTkVfQ1RMX1RJTEVEX1kgfCBQTEFORV9DVExf TUVESUFfREVDT01QUkVTU0lPTl9FTkFCTEU7Ci0JY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElM RUQ6Ci0JCXJldHVybiBQTEFORV9DVExfVElMRURfWUY7Ci0JY2FzZSBJOTE1X0ZPUk1BVF9NT0Rf WWZfVElMRURfQ0NTOgotCQlyZXR1cm4gUExBTkVfQ1RMX1RJTEVEX1lGIHwgUExBTkVfQ1RMX1JF TkRFUl9ERUNPTVBSRVNTSU9OX0VOQUJMRTsKLQlkZWZhdWx0OgotCQlNSVNTSU5HX0NBU0UoZmJf bW9kaWZpZXIpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdTMyIHNrbF9wbGFuZV9j dGxfcm90YXRlKHVuc2lnbmVkIGludCByb3RhdGUpCi17Ci0Jc3dpdGNoIChyb3RhdGUpIHsKLQlj YXNlIERSTV9NT0RFX1JPVEFURV8wOgotCQlicmVhazsKLQkvKgotCSAqIERSTV9NT0RFX1JPVEFU RV8gaXMgY291bnRlciBjbG9ja3dpc2UgdG8gc3RheSBjb21wYXRpYmxlIHdpdGggWHJhbmRyCi0J ICogd2hpbGUgaTkxNSBIVyByb3RhdGlvbiBpcyBjbG9ja3dpc2UsIHRoYXRzIHdoeSB0aGlzIHN3 YXBwaW5nLgotCSAqLwotCWNhc2UgRFJNX01PREVfUk9UQVRFXzkwOgotCQlyZXR1cm4gUExBTkVf Q1RMX1JPVEFURV8yNzA7Ci0JY2FzZSBEUk1fTU9ERV9ST1RBVEVfMTgwOgotCQlyZXR1cm4gUExB TkVfQ1RMX1JPVEFURV8xODA7Ci0JY2FzZSBEUk1fTU9ERV9ST1RBVEVfMjcwOgotCQlyZXR1cm4g UExBTkVfQ1RMX1JPVEFURV85MDsKLQlkZWZhdWx0OgotCQlNSVNTSU5HX0NBU0Uocm90YXRlKTsK LQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHUzMiBjbmxfcGxhbmVfY3RsX2ZsaXAodW5z aWduZWQgaW50IHJlZmxlY3QpCi17Ci0Jc3dpdGNoIChyZWZsZWN0KSB7Ci0JY2FzZSAwOgotCQli cmVhazsKLQljYXNlIERSTV9NT0RFX1JFRkxFQ1RfWDoKLQkJcmV0dXJuIFBMQU5FX0NUTF9GTElQ X0hPUklaT05UQUw7Ci0JY2FzZSBEUk1fTU9ERV9SRUZMRUNUX1k6Ci0JZGVmYXVsdDoKLQkJTUlT U0lOR19DQVNFKHJlZmxlY3QpOwotCX0KLQotCXJldHVybiAwOwotfQotCi11MzIgc2tsX3BsYW5l X2N0bF9jcnRjKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQotewot CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Y19zdGF0ZS0+ dWFwaS5jcnRjLT5kZXYpOwotCXUzMiBwbGFuZV9jdGwgPSAwOwotCi0JaWYgKElOVEVMX0dFTihk ZXZfcHJpdikgPj0gMTAgfHwgSVNfR0VNSU5JTEFLRShkZXZfcHJpdikpCi0JCXJldHVybiBwbGFu ZV9jdGw7Ci0KLQlpZiAoY3J0Y19zdGF0ZS0+Z2FtbWFfZW5hYmxlKQotCQlwbGFuZV9jdGwgfD0g UExBTkVfQ1RMX1BJUEVfR0FNTUFfRU5BQkxFOwotCi0JaWYgKGNydGNfc3RhdGUtPmNzY19lbmFi bGUpCi0JCXBsYW5lX2N0bCB8PSBQTEFORV9DVExfUElQRV9DU0NfRU5BQkxFOwotCi0JcmV0dXJu IHBsYW5lX2N0bDsKLX0KLQotdTMyIHNrbF9wbGFuZV9jdGwoY29uc3Qgc3RydWN0IGludGVsX2Ny dGNfc3RhdGUgKmNydGNfc3RhdGUsCi0JCSAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRl ICpwbGFuZV9zdGF0ZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPQot CQl0b19pOTE1KHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lLT5kZXYpOwotCWNvbnN0IHN0cnVjdCBk cm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwotCXVuc2lnbmVkIGludCBy b3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5ody5yb3RhdGlvbjsKLQljb25zdCBzdHJ1Y3QgZHJtX2lu dGVsX3Nwcml0ZV9jb2xvcmtleSAqa2V5ID0gJnBsYW5lX3N0YXRlLT5ja2V5OwotCXUzMiBwbGFu ZV9jdGw7Ci0KLQlwbGFuZV9jdGwgPSBQTEFORV9DVExfRU5BQkxFOwotCi0JaWYgKElOVEVMX0dF TihkZXZfcHJpdikgPCAxMCAmJiAhSVNfR0VNSU5JTEFLRShkZXZfcHJpdikpIHsKLQkJcGxhbmVf Y3RsIHw9IHNrbF9wbGFuZV9jdGxfYWxwaGEocGxhbmVfc3RhdGUpOwotCQlwbGFuZV9jdGwgfD0g UExBTkVfQ1RMX1BMQU5FX0dBTU1BX0RJU0FCTEU7Ci0KLQkJaWYgKHBsYW5lX3N0YXRlLT5ody5j b2xvcl9lbmNvZGluZyA9PSBEUk1fQ09MT1JfWUNCQ1JfQlQ3MDkpCi0JCQlwbGFuZV9jdGwgfD0g UExBTkVfQ1RMX1lVVl9UT19SR0JfQ1NDX0ZPUk1BVF9CVDcwOTsKLQotCQlpZiAocGxhbmVfc3Rh dGUtPmh3LmNvbG9yX3JhbmdlID09IERSTV9DT0xPUl9ZQ0JDUl9GVUxMX1JBTkdFKQotCQkJcGxh bmVfY3RsIHw9IFBMQU5FX0NUTF9ZVVZfUkFOR0VfQ09SUkVDVElPTl9ESVNBQkxFOwotCX0KLQot CXBsYW5lX2N0bCB8PSBza2xfcGxhbmVfY3RsX2Zvcm1hdChmYi0+Zm9ybWF0LT5mb3JtYXQpOwot CXBsYW5lX2N0bCB8PSBza2xfcGxhbmVfY3RsX3RpbGluZyhmYi0+bW9kaWZpZXIpOwotCXBsYW5l X2N0bCB8PSBza2xfcGxhbmVfY3RsX3JvdGF0ZShyb3RhdGlvbiAmIERSTV9NT0RFX1JPVEFURV9N QVNLKTsKLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwKQotCQlwbGFuZV9jdGwgfD0g Y25sX3BsYW5lX2N0bF9mbGlwKHJvdGF0aW9uICYKLQkJCQkJCURSTV9NT0RFX1JFRkxFQ1RfTUFT Syk7Ci0KLQlpZiAoa2V5LT5mbGFncyAmIEk5MTVfU0VUX0NPTE9SS0VZX0RFU1RJTkFUSU9OKQot CQlwbGFuZV9jdGwgfD0gUExBTkVfQ1RMX0tFWV9FTkFCTEVfREVTVElOQVRJT047Ci0JZWxzZSBp ZiAoa2V5LT5mbGFncyAmIEk5MTVfU0VUX0NPTE9SS0VZX1NPVVJDRSkKLQkJcGxhbmVfY3RsIHw9 IFBMQU5FX0NUTF9LRVlfRU5BQkxFX1NPVVJDRTsKLQotCXJldHVybiBwbGFuZV9jdGw7Ci19Ci0K LXUzMiBnbGtfcGxhbmVfY29sb3JfY3RsX2NydGMoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKmNydGNfc3RhdGUpCit2b2lkIHNrbF9zY2FsZXJfZGlzYWJsZShjb25zdCBzdHJ1Y3QgaW50 ZWxfY3J0Y19zdGF0ZSAqb2xkX2NydGNfc3RhdGUpCiB7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjX3N0YXRlLT51YXBpLmNydGMtPmRldik7Ci0JdTMy IHBsYW5lX2NvbG9yX2N0bCA9IDA7Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMSkK LQkJcmV0dXJuIHBsYW5lX2NvbG9yX2N0bDsKLQotCWlmIChjcnRjX3N0YXRlLT5nYW1tYV9lbmFi bGUpCi0JCXBsYW5lX2NvbG9yX2N0bCB8PSBQTEFORV9DT0xPUl9QSVBFX0dBTU1BX0VOQUJMRTsK LQotCWlmIChjcnRjX3N0YXRlLT5jc2NfZW5hYmxlKQotCQlwbGFuZV9jb2xvcl9jdGwgfD0gUExB TkVfQ09MT1JfUElQRV9DU0NfRU5BQkxFOworCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9f aW50ZWxfY3J0YyhvbGRfY3J0Y19zdGF0ZS0+dWFwaS5jcnRjKTsKKwlpbnQgaTsKIAotCXJldHVy biBwbGFuZV9jb2xvcl9jdGw7CisJZm9yIChpID0gMDsgaSA8IGNydGMtPm51bV9zY2FsZXJzOyBp KyspCisJCXNrbF9kZXRhY2hfc2NhbGVyKGNydGMsIGkpOwogfQogCi11MzIgZ2xrX3BsYW5lX2Nv bG9yX2N0bChjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKLQkJCWNv bnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit1bnNpZ25lZCBpbnQK K2ludGVsX3BsYW5lX2ZlbmNlX3lfb2Zmc2V0KGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0 ZSAqcGxhbmVfc3RhdGUpCiB7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0K LQkJdG9faTkxNShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZS0+ZGV2KTsKLQljb25zdCBzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKLQlzdHJ1Y3QgaW50ZWxf cGxhbmUgKnBsYW5lID0gdG9faW50ZWxfcGxhbmUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUpOwot CXUzMiBwbGFuZV9jb2xvcl9jdGwgPSAwOwotCi0JcGxhbmVfY29sb3JfY3RsIHw9IFBMQU5FX0NP TE9SX1BMQU5FX0dBTU1BX0RJU0FCTEU7Ci0JcGxhbmVfY29sb3JfY3RsIHw9IGdsa19wbGFuZV9j b2xvcl9jdGxfYWxwaGEocGxhbmVfc3RhdGUpOworCWludCB4ID0gMCwgeSA9IDA7CiAKLQlpZiAo ZmItPmZvcm1hdC0+aXNfeXV2ICYmICFpY2xfaXNfaGRyX3BsYW5lKGRldl9wcml2LCBwbGFuZS0+ aWQpKSB7Ci0JCXN3aXRjaCAocGxhbmVfc3RhdGUtPmh3LmNvbG9yX2VuY29kaW5nKSB7Ci0JCWNh c2UgRFJNX0NPTE9SX1lDQkNSX0JUNzA5OgotCQkJcGxhbmVfY29sb3JfY3RsIHw9IFBMQU5FX0NP TE9SX0NTQ19NT0RFX1lVVjcwOV9UT19SR0I3MDk7Ci0JCQlicmVhazsKLQkJY2FzZSBEUk1fQ09M T1JfWUNCQ1JfQlQyMDIwOgotCQkJcGxhbmVfY29sb3JfY3RsIHw9Ci0JCQkJUExBTkVfQ09MT1Jf Q1NDX01PREVfWVVWMjAyMF9UT19SR0IyMDIwOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlw bGFuZV9jb2xvcl9jdGwgfD0KLQkJCQlQTEFORV9DT0xPUl9DU0NfTU9ERV9ZVVY2MDFfVE9fUkdC NjAxOwotCQl9Ci0JCWlmIChwbGFuZV9zdGF0ZS0+aHcuY29sb3JfcmFuZ2UgPT0gRFJNX0NPTE9S X1lDQkNSX0ZVTExfUkFOR0UpCi0JCQlwbGFuZV9jb2xvcl9jdGwgfD0gUExBTkVfQ09MT1JfWVVW X1JBTkdFX0NPUlJFQ1RJT05fRElTQUJMRTsKLQl9IGVsc2UgaWYgKGZiLT5mb3JtYXQtPmlzX3l1 dikgewotCQlwbGFuZV9jb2xvcl9jdGwgfD0gUExBTkVfQ09MT1JfSU5QVVRfQ1NDX0VOQUJMRTsK LQl9CisJaW50ZWxfcGxhbmVfYWRqdXN0X2FsaWduZWRfb2Zmc2V0KCZ4LCAmeSwgcGxhbmVfc3Rh dGUsIDAsCisJCQkJCSAgcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLm9mZnNldCwgMCk7CiAK LQlyZXR1cm4gcGxhbmVfY29sb3JfY3RsOworCXJldHVybiB5OwogfQogCiBzdGF0aWMgaW50CkBA IC00MzgzLDE1ICszNjMzLDYgQEAgc3RhdGljIGludCBza2xfdXBkYXRlX3NjYWxlcl9wbGFuZShz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKIAlyZXR1cm4gMDsKIH0KIAotdm9p ZCBza2xfc2NhbGVyX2Rpc2FibGUoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm9sZF9j cnRjX3N0YXRlKQotewotCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0Yyhv bGRfY3J0Y19zdGF0ZS0+dWFwaS5jcnRjKTsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBj cnRjLT5udW1fc2NhbGVyczsgaSsrKQotCQlza2xfZGV0YWNoX3NjYWxlcihjcnRjLCBpKTsKLX0K LQogc3RhdGljIGludCBjbmxfY29lZl90YXAoaW50IGkpCiB7CiAJcmV0dXJuIGkgJSA3OwpAQCAt ODIxMywxNTAgKzc0NTQsNiBAQCBzdGF0aWMgdm9pZCBza2xfZ2V0X3BmaXRfY29uZmlnKHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQogCQlzY2FsZXJfc3RhdGUtPnNjYWxlcl91 c2VycyAmPSB+KDEgPDwgU0tMX0NSVENfSU5ERVgpOwogfQogCi1zdGF0aWMgdm9pZAotc2tsX2dl dF9pbml0aWFsX3BsYW5lX2NvbmZpZyhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKLQkJCSAgICAg c3RydWN0IGludGVsX2luaXRpYWxfcGxhbmVfY29uZmlnICpwbGFuZV9jb25maWcpCi17Ci0Jc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUgPSB0b19pbnRlbF9jcnRjX3N0YXRlKGNy dGMtPmJhc2Uuc3RhdGUpOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNlLmRl djsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Ci0J c3RydWN0IGludGVsX3BsYW5lICpwbGFuZSA9IHRvX2ludGVsX3BsYW5lKGNydGMtPmJhc2UucHJp bWFyeSk7Ci0JZW51bSBwbGFuZV9pZCBwbGFuZV9pZCA9IHBsYW5lLT5pZDsKLQllbnVtIHBpcGUg cGlwZTsKLQl1MzIgdmFsLCBiYXNlLCBvZmZzZXQsIHN0cmlkZV9tdWx0LCB0aWxpbmcsIGFscGhh OwotCWludCBmb3VyY2MsIHBpeGVsX2Zvcm1hdDsKLQl1bnNpZ25lZCBpbnQgYWxpZ25lZF9oZWln aHQ7Ci0Jc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7Ci0Jc3RydWN0IGludGVsX2ZyYW1lYnVm ZmVyICppbnRlbF9mYjsKLQotCWlmICghcGxhbmUtPmdldF9od19zdGF0ZShwbGFuZSwgJnBpcGUp KQotCQlyZXR1cm47Ci0KLQlkcm1fV0FSTl9PTihkZXYsIHBpcGUgIT0gY3J0Yy0+cGlwZSk7Ci0K LQlpZiAoY3J0Y19zdGF0ZS0+Ymlnam9pbmVyKSB7Ci0JCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ ZHJtLAotCQkJICAgICJVbnN1cHBvcnRlZCBiaWdqb2luZXIgY29uZmlndXJhdGlvbiBmb3IgaW5p dGlhbCBGQlxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpbnRlbF9mYiA9IGt6YWxsb2Moc2l6ZW9m KCppbnRlbF9mYiksIEdGUF9LRVJORUwpOwotCWlmICghaW50ZWxfZmIpIHsKLQkJZHJtX2RiZ19r bXMoJmRldl9wcml2LT5kcm0sICJmYWlsZWQgdG8gYWxsb2MgZmJcbiIpOwotCQlyZXR1cm47Ci0J fQotCi0JZmIgPSAmaW50ZWxfZmItPmJhc2U7Ci0KLQlmYi0+ZGV2ID0gZGV2OwotCi0JdmFsID0g aW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgUExBTkVfQ1RMKHBpcGUsIHBsYW5lX2lkKSk7Ci0KLQlp ZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMSkKLQkJcGl4ZWxfZm9ybWF0ID0gdmFsICYgSUNM X1BMQU5FX0NUTF9GT1JNQVRfTUFTSzsKLQllbHNlCi0JCXBpeGVsX2Zvcm1hdCA9IHZhbCAmIFBM QU5FX0NUTF9GT1JNQVRfTUFTSzsKLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwIHx8 IElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpKSB7Ci0JCWFscGhhID0gaW50ZWxfZGVfcmVhZChkZXZf cHJpdiwKLQkJCQkgICAgICBQTEFORV9DT0xPUl9DVEwocGlwZSwgcGxhbmVfaWQpKTsKLQkJYWxw aGEgJj0gUExBTkVfQ09MT1JfQUxQSEFfTUFTSzsKLQl9IGVsc2UgewotCQlhbHBoYSA9IHZhbCAm IFBMQU5FX0NUTF9BTFBIQV9NQVNLOwotCX0KLQotCWZvdXJjYyA9IHNrbF9mb3JtYXRfdG9fZm91 cmNjKHBpeGVsX2Zvcm1hdCwKLQkJCQkgICAgICB2YWwgJiBQTEFORV9DVExfT1JERVJfUkdCWCwg YWxwaGEpOwotCWZiLT5mb3JtYXQgPSBkcm1fZm9ybWF0X2luZm8oZm91cmNjKTsKLQotCXRpbGlu ZyA9IHZhbCAmIFBMQU5FX0NUTF9USUxFRF9NQVNLOwotCXN3aXRjaCAodGlsaW5nKSB7Ci0JY2Fz ZSBQTEFORV9DVExfVElMRURfTElORUFSOgotCQlmYi0+bW9kaWZpZXIgPSBEUk1fRk9STUFUX01P RF9MSU5FQVI7Ci0JCWJyZWFrOwotCWNhc2UgUExBTkVfQ1RMX1RJTEVEX1g6Ci0JCXBsYW5lX2Nv bmZpZy0+dGlsaW5nID0gSTkxNV9USUxJTkdfWDsKLQkJZmItPm1vZGlmaWVyID0gSTkxNV9GT1JN QVRfTU9EX1hfVElMRUQ7Ci0JCWJyZWFrOwotCWNhc2UgUExBTkVfQ1RMX1RJTEVEX1k6Ci0JCXBs YW5lX2NvbmZpZy0+dGlsaW5nID0gSTkxNV9USUxJTkdfWTsKLQkJaWYgKHZhbCAmIFBMQU5FX0NU TF9SRU5ERVJfREVDT01QUkVTU0lPTl9FTkFCTEUpCi0JCQlmYi0+bW9kaWZpZXIgPSBJTlRFTF9H RU4oZGV2X3ByaXYpID49IDEyID8KLQkJCQlJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9S Q19DQ1MgOgotCQkJCUk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUzsKLQkJZWxzZSBpZiAodmFs ICYgUExBTkVfQ1RMX01FRElBX0RFQ09NUFJFU1NJT05fRU5BQkxFKQotCQkJZmItPm1vZGlmaWVy ID0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfTUNfQ0NTOwotCQllbHNlCi0JCQlmYi0+ bW9kaWZpZXIgPSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRDsKLQkJYnJlYWs7Ci0JY2FzZSBQTEFO RV9DVExfVElMRURfWUY6Ci0JCWlmICh2YWwgJiBQTEFORV9DVExfUkVOREVSX0RFQ09NUFJFU1NJ T05fRU5BQkxFKQotCQkJZmItPm1vZGlmaWVyID0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0ND UzsKLQkJZWxzZQotCQkJZmItPm1vZGlmaWVyID0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEOwot CQlicmVhazsKLQlkZWZhdWx0OgotCQlNSVNTSU5HX0NBU0UodGlsaW5nKTsKLQkJZ290byBlcnJv cjsKLQl9Ci0KLQkvKgotCSAqIERSTV9NT0RFX1JPVEFURV8gaXMgY291bnRlciBjbG9ja3dpc2Ug dG8gc3RheSBjb21wYXRpYmxlIHdpdGggWHJhbmRyCi0JICogd2hpbGUgaTkxNSBIVyByb3RhdGlv biBpcyBjbG9ja3dpc2UsIHRoYXRzIHdoeSB0aGlzIHN3YXBwaW5nLgotCSAqLwotCXN3aXRjaCAo dmFsICYgUExBTkVfQ1RMX1JPVEFURV9NQVNLKSB7Ci0JY2FzZSBQTEFORV9DVExfUk9UQVRFXzA6 Ci0JCXBsYW5lX2NvbmZpZy0+cm90YXRpb24gPSBEUk1fTU9ERV9ST1RBVEVfMDsKLQkJYnJlYWs7 Ci0JY2FzZSBQTEFORV9DVExfUk9UQVRFXzkwOgotCQlwbGFuZV9jb25maWctPnJvdGF0aW9uID0g RFJNX01PREVfUk9UQVRFXzI3MDsKLQkJYnJlYWs7Ci0JY2FzZSBQTEFORV9DVExfUk9UQVRFXzE4 MDoKLQkJcGxhbmVfY29uZmlnLT5yb3RhdGlvbiA9IERSTV9NT0RFX1JPVEFURV8xODA7Ci0JCWJy ZWFrOwotCWNhc2UgUExBTkVfQ1RMX1JPVEFURV8yNzA6Ci0JCXBsYW5lX2NvbmZpZy0+cm90YXRp b24gPSBEUk1fTU9ERV9ST1RBVEVfOTA7Ci0JCWJyZWFrOwotCX0KLQotCWlmIChJTlRFTF9HRU4o ZGV2X3ByaXYpID49IDEwICYmCi0JICAgIHZhbCAmIFBMQU5FX0NUTF9GTElQX0hPUklaT05UQUwp Ci0JCXBsYW5lX2NvbmZpZy0+cm90YXRpb24gfD0gRFJNX01PREVfUkVGTEVDVF9YOwotCi0JLyog OTAvMjcwIGRlZ3JlZSByb3RhdGlvbiB3b3VsZCByZXF1aXJlIGV4dHJhIHdvcmsgKi8KLQlpZiAo ZHJtX3JvdGF0aW9uXzkwX29yXzI3MChwbGFuZV9jb25maWctPnJvdGF0aW9uKSkKLQkJZ290byBl cnJvcjsKLQotCWJhc2UgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBQTEFORV9TVVJGKHBpcGUs IHBsYW5lX2lkKSkgJiAweGZmZmZmMDAwOwotCXBsYW5lX2NvbmZpZy0+YmFzZSA9IGJhc2U7Ci0K LQlvZmZzZXQgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBQTEFORV9PRkZTRVQocGlwZSwgcGxh bmVfaWQpKTsKLQotCXZhbCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIFBMQU5FX1NJWkUocGlw ZSwgcGxhbmVfaWQpKTsKLQlmYi0+aGVpZ2h0ID0gKCh2YWwgPj4gMTYpICYgMHhmZmZmKSArIDE7 Ci0JZmItPndpZHRoID0gKCh2YWwgPj4gMCkgJiAweGZmZmYpICsgMTsKLQotCXZhbCA9IGludGVs X2RlX3JlYWQoZGV2X3ByaXYsIFBMQU5FX1NUUklERShwaXBlLCBwbGFuZV9pZCkpOwotCXN0cmlk ZV9tdWx0ID0gc2tsX3BsYW5lX3N0cmlkZV9tdWx0KGZiLCAwLCBEUk1fTU9ERV9ST1RBVEVfMCk7 Ci0JZmItPnBpdGNoZXNbMF0gPSAodmFsICYgMHgzZmYpICogc3RyaWRlX211bHQ7Ci0KLQlhbGln bmVkX2hlaWdodCA9IGludGVsX2ZiX2FsaWduX2hlaWdodChmYiwgMCwgZmItPmhlaWdodCk7Ci0K LQlwbGFuZV9jb25maWctPnNpemUgPSBmYi0+cGl0Y2hlc1swXSAqIGFsaWduZWRfaGVpZ2h0Owot Ci0JZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0JCSAgICAiJXMvJXMgd2l0aCBmYjogc2l6 ZT0lZHglZEAlZCwgb2Zmc2V0PSV4LCBwaXRjaCAlZCwgc2l6ZSAweCV4XG4iLAotCQkgICAgY3J0 Yy0+YmFzZS5uYW1lLCBwbGFuZS0+YmFzZS5uYW1lLCBmYi0+d2lkdGgsIGZiLT5oZWlnaHQsCi0J CSAgICBmYi0+Zm9ybWF0LT5jcHBbMF0gKiA4LCBiYXNlLCBmYi0+cGl0Y2hlc1swXSwKLQkJICAg IHBsYW5lX2NvbmZpZy0+c2l6ZSk7Ci0KLQlwbGFuZV9jb25maWctPmZiID0gaW50ZWxfZmI7Ci0J cmV0dXJuOwotCi1lcnJvcjoKLQlrZnJlZShpbnRlbF9mYik7Ci19Ci0KIHN0YXRpYyB2b2lkIGls a19nZXRfcGZpdF9jb25maWcoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCiB7 CiAJc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKGNydGNfc3RhdGUtPnVh cGkuY3J0Yyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVs X2Rpc3BsYXkuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5o CmluZGV4IGJiNzJkZTE1Mjk0OS4uMGIyZmVkNThiYWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuaApAQCAtNTIsNiArNTIsNyBAQCBzdHJ1Y3QgaW50 ZWxfY3J0Y19zdGF0ZTsKIHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQ7CiBzdHJ1Y3QgaW50ZWxf ZHA7CiBzdHJ1Y3QgaW50ZWxfZW5jb2RlcjsKK3N0cnVjdCBpbnRlbF9pbml0aWFsX3BsYW5lX2Nv bmZpZzsKIHN0cnVjdCBpbnRlbF9sb2FkX2RldGVjdF9waXBlOwogc3RydWN0IGludGVsX3BsYW5l Owogc3RydWN0IGludGVsX3BsYW5lX3N0YXRlOwpAQCAtNTA4LDcgKzUwOSw2IEBAIHZvaWQgaW50 ZWxfbGlua19jb21wdXRlX21fbih1MTYgYnBwLCBpbnQgbmxhbmVzLAogCQkJICAgIHN0cnVjdCBp bnRlbF9saW5rX21fbiAqbV9uLAogCQkJICAgIGJvb2wgY29uc3RhbnRfbiwgYm9vbCBmZWNfZW5h YmxlKTsKIGJvb2wgaXNfY2NzX21vZGlmaWVyKHU2NCBtb2RpZmllcik7Ci1pbnQgaW50ZWxfbWFp bl90b19hdXhfcGxhbmUoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBtYWlu X3BsYW5lKTsKIHZvaWQgbHB0X2Rpc2FibGVfY2xrb3V0X2RwKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdik7CiB1MzIgaW50ZWxfcGxhbmVfZmJfbWF4X3N0cmlkZShzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCQkgICAgICB1MzIgcGl4ZWxfZm9ybWF0LCB1NjQg bW9kaWZpZXIpOwpAQCAtNjIxLDE4ICs2MjEsNyBAQCB1MzIgc2tsX3NjYWxlcl9nZXRfZmlsdGVy X3NlbGVjdChlbnVtIGRybV9zY2FsaW5nX2ZpbHRlciBmaWx0ZXIsIGludCBzZXQpOwogdm9pZCBz a2xfc2NhbGVyX3NldHVwX2ZpbHRlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs IGVudW0gcGlwZSBwaXBlLAogCQkJICAgICBpbnQgaWQsIGludCBzZXQsIGVudW0gZHJtX3NjYWxp bmdfZmlsdGVyIGZpbHRlcik7CiB2b2lkIGlsa19wZml0X2Rpc2FibGUoY29uc3Qgc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlKTsKLXUzMiBnbGtfcGxhbmVfY29sb3JfY3Rs KGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAotCQkJY29uc3Qgc3Ry dWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSk7Ci11MzIgZ2xrX3BsYW5lX2NvbG9y X2N0bF9jcnRjKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKTsKLXUz MiBza2xfcGxhbmVfY3RsKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRl LAotCQkgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpOwotdTMy IHNrbF9wbGFuZV9jdGxfY3J0Yyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19z dGF0ZSk7Ci11MzIgc2tsX3BsYW5lX3N0cmlkZShjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3Rh dGUgKnBsYW5lX3N0YXRlLAotCQkgICAgIGludCBwbGFuZSk7Ci1pbnQgc2tsX2NoZWNrX3BsYW5l X3N1cmZhY2Uoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSk7Ci1pbnQgc2ts X2NhbGNfbWFpbl9zdXJmYWNlX29mZnNldChjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUg KnBsYW5lX3N0YXRlLAotCQkJCSBpbnQgKngsIGludCAqeSwgdTMyICpvZmZzZXQpOwotaW50IHNr bF9mb3JtYXRfdG9fZm91cmNjKGludCBmb3JtYXQsIGJvb2wgcmdiX29yZGVyLCBib29sIGFscGhh KTsKKwogaW50IGJkd19nZXRfcGlwZW1pc2NfYnBwKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKTsK IHVuc2lnbmVkIGludCBpbnRlbF9wbGFuZV9mZW5jZV95X29mZnNldChjb25zdCBzdHJ1Y3QgaW50 ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKTsKIApAQCAtNjU1LDYgKzY0NCwxOCBAQCBzdHJ1 Y3QgaW50ZWxfZW5jb2RlciAqCiBpbnRlbF9nZXRfY3J0Y19uZXdfZW5jb2Rlcihjb25zdCBzdHJ1 Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSwKIAkJCSAgIGNvbnN0IHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpjcnRjX3N0YXRlKTsKIAordW5zaWduZWQgaW50IGludGVsX3N1cmZfYWxpZ25t ZW50KGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAorCQkJCSAgaW50IGNvbG9yX3Bs YW5lKTsKK3ZvaWQgaW50ZWxfZmJfcGxhbmVfZ2V0X3N1YnNhbXBsaW5nKGludCAqaHN1YiwgaW50 ICp2c3ViLAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwkJCQkg ICAgaW50IGNvbG9yX3BsYW5lKTsKK3UzMiBpbnRlbF9wbGFuZV9hZGp1c3RfYWxpZ25lZF9vZmZz ZXQoaW50ICp4LCBpbnQgKnksCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0 YXRlICpzdGF0ZSwKKwkJCQkgICAgICBpbnQgY29sb3JfcGxhbmUsCisJCQkJICAgICAgdTMyIG9s ZF9vZmZzZXQsIHUzMiBuZXdfb2Zmc2V0KTsKK3Vuc2lnbmVkIGludCBpbnRlbF90aWxlX3dpZHRo X2J5dGVzKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgY29sb3JfcGxhbmUp OwordW5zaWduZWQgaW50IGludGVsX3RpbGVfaGVpZ2h0KGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmZiLCBpbnQgY29sb3JfcGxhbmUpOworCiAvKiBtb2Rlc2V0dGluZyAqLwogdm9pZCBp bnRlbF9tb2Rlc2V0X2luaXRfaHcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOwogaW50 IGludGVsX21vZGVzZXRfaW5pdF9ub2lycShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7 CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlf dHlwZXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBl cy5oCmluZGV4IGI2MDFlODA0Zjg1NC4uNThjZWM1OWZkNGY3IDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfdHlwZXMuaAorKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfdHlwZXMuaApAQCAtMzcsNiArMzcs NyBAQAogI2luY2x1ZGUgPGRybS9kcm1fZHBfbXN0X2hlbHBlci5oPgogI2luY2x1ZGUgPGRybS9k cm1fZW5jb2Rlci5oPgogI2luY2x1ZGUgPGRybS9kcm1fZmJfaGVscGVyLmg+CisjaW5jbHVkZSA8 ZHJtL2RybV9mb3VyY2MuaD4KICNpbmNsdWRlIDxkcm0vZHJtX3Byb2JlX2hlbHBlci5oPgogI2lu Y2x1ZGUgPGRybS9kcm1fcmVjdC5oPgogI2luY2x1ZGUgPGRybS9kcm1fdmJsYW5rLmg+CkBAIC0x ODc1LDQgKzE4NzYsMjQgQEAgc3RhdGljIGlubGluZSB1MzIgaW50ZWxfZmRpX2xpbmtfZnJlcShz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCXJldHVybiBkZXZfcHJpdi0+ZmRp X3BsbF9mcmVxOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfY2NzX3BsYW5lKGNvbnN0IHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgcGxhbmUpCit7CisJaWYgKCFpc19jY3NfbW9k aWZpZXIoZmItPm1vZGlmaWVyKSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHBsYW5lID49 IGZiLT5mb3JtYXQtPm51bV9wbGFuZXMgLyAyOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNf Z2VuMTJfY2NzX21vZGlmaWVyKHU2NCBtb2RpZmllcikKK3sKKwlyZXR1cm4gbW9kaWZpZXIgPT0g STkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfUkNfQ0NTIHx8CisJICAgICAgIG1vZGlmaWVy ID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX01DX0NDUzsKKworfQorCitzdGF0aWMg aW5saW5lIGJvb2wgaXNfZ2VuMTJfY2NzX3BsYW5lKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiLCBpbnQgcGxhbmUpCit7CisJcmV0dXJuIGlzX2dlbjEyX2Njc19tb2RpZmllcihmYi0+ bW9kaWZpZXIpICYmIGlzX2Njc19wbGFuZShmYiwgcGxhbmUpOworfQorCiAjZW5kaWYgLyogIF9f SU5URUxfRElTUExBWV9UWVBFU19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2Rpc3BsYXkvaW50ZWxfcHNyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2lu dGVsX3Bzci5jCmluZGV4IDFlNmMxZmE1OWQ0YS4uNTY4OGVkZDRkZDY0IDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Bzci5jCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHNyLmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRl ICJpbnRlbF9wc3IuaCIKICNpbmNsdWRlICJpbnRlbF9zcHJpdGUuaCIKICNpbmNsdWRlICJpbnRl bF9oZG1pLmgiCisjaW5jbHVkZSAic2tsX3VuaXZlcnNhbF9wbGFuZS5oIgogCiAvKioKICAqIERP QzogUGFuZWwgU2VsZiBSZWZyZXNoIChQU1IvU1JEKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9zcHJpdGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rp c3BsYXkvaW50ZWxfc3ByaXRlLmMKaW5kZXggYWRjNWYwODhkNDU4Li44M2U3MzMxZjc5ZDUgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfc3ByaXRlLmMKKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9zcHJpdGUuYwpAQCAtMzY1LDIx MiArMzY1LDcgQEAgaW50IGludGVsX3BsYW5lX2NoZWNrX3NyY19jb29yZGluYXRlcyhzdHJ1Y3Qg aW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQogCXJldHVybiAwOwogfQogCi1zdGF0aWMg dTggaWNsX252MTJfeV9wbGFuZV9tYXNrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQot ewotCWlmIChJU19ST0NLRVRMQUtFKGk5MTUpKQotCQlyZXR1cm4gQklUKFBMQU5FX1NQUklURTIp IHwgQklUKFBMQU5FX1NQUklURTMpOwotCWVsc2UKLQkJcmV0dXJuIEJJVChQTEFORV9TUFJJVEU0 KSB8IEJJVChQTEFORV9TUFJJVEU1KTsKLX0KLQotYm9vbCBpY2xfaXNfbnYxMl95X3BsYW5lKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCSBlbnVtIHBsYW5lX2lkIHBsYW5l X2lkKQotewotCXJldHVybiBJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExICYmCi0JCWljbF9udjEy X3lfcGxhbmVfbWFzayhkZXZfcHJpdikgJiBCSVQocGxhbmVfaWQpOwotfQotCi1ib29sIGljbF9p c19oZHJfcGxhbmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBlbnVtIHBsYW5l X2lkIHBsYW5lX2lkKQotewotCXJldHVybiBJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExICYmCi0J CWljbF9oZHJfcGxhbmVfbWFzaygpICYgQklUKHBsYW5lX2lkKTsKLX0KLQotc3RhdGljIHZvaWQK LXNrbF9wbGFuZV9yYXRpbyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0 ZSwKLQkJY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSwKLQkJdW5z aWduZWQgaW50ICpudW0sIHVuc2lnbmVkIGludCAqZGVuKQotewotCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRldik7 Ci0JY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7 Ci0KLQlpZiAoZmItPmZvcm1hdC0+Y3BwWzBdID09IDgpIHsKLQkJaWYgKElOVEVMX0dFTihkZXZf cHJpdikgPj0gMTAgfHwgSVNfR0VNSU5JTEFLRShkZXZfcHJpdikpIHsKLQkJCSpudW0gPSAxMDsK LQkJCSpkZW4gPSA4OwotCQl9IGVsc2UgewotCQkJKm51bSA9IDk7Ci0JCQkqZGVuID0gODsKLQkJ fQotCX0gZWxzZSB7Ci0JCSpudW0gPSAxOwotCQkqZGVuID0gMTsKLQl9Ci19Ci0KLXN0YXRpYyBp bnQgc2tsX3BsYW5lX21pbl9jZGNsayhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZSwKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5l X3N0YXRlKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUo cGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRldik7Ci0JdW5zaWduZWQgaW50IG51bSwgZGVuOwot CXVuc2lnbmVkIGludCBwaXhlbF9yYXRlID0gaW50ZWxfcGxhbmVfcGl4ZWxfcmF0ZShjcnRjX3N0 YXRlLCBwbGFuZV9zdGF0ZSk7Ci0KLQlza2xfcGxhbmVfcmF0aW8oY3J0Y19zdGF0ZSwgcGxhbmVf c3RhdGUsICZudW0sICZkZW4pOwotCi0JLyogdHdvIHBpeGVscyBwZXIgY2xvY2sgb24gZ2xrKyAq LwotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwIHx8IElTX0dFTUlOSUxBS0UoZGV2X3By aXYpKQotCQlkZW4gKj0gMjsKLQotCXJldHVybiBESVZfUk9VTkRfVVAocGl4ZWxfcmF0ZSAqIG51 bSwgZGVuKTsKLX0KLQotc3RhdGljIGludCBza2xfcGxhbmVfbWF4X3dpZHRoKGNvbnN0IHN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKmZiLAotCQkJICAgICAgIGludCBjb2xvcl9wbGFuZSwKLQkJCSAg ICAgICB1bnNpZ25lZCBpbnQgcm90YXRpb24pCi17Ci0JaW50IGNwcCA9IGZiLT5mb3JtYXQtPmNw cFtjb2xvcl9wbGFuZV07Ci0KLQlzd2l0Y2ggKGZiLT5tb2RpZmllcikgewotCWNhc2UgRFJNX0ZP Uk1BVF9NT0RfTElORUFSOgotCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ6Ci0JCS8qCi0J CSAqIFZhbGlkYXRlZCBsaW1pdCBpcyA0aywgYnV0IGhhcyA1ayBzaG91bGQKLQkJICogd29yayBh cGFydCBmcm9tIHRoZSBmb2xsb3dpbmcgZmVhdHVyZXM6Ci0JCSAqIC0gWXRpbGUgKGFscmVhZHkg bGltaXRlZCB0byA0aykKLQkJICogLSBGUDE2IChhbHJlYWR5IGxpbWl0ZWQgdG8gNGspCi0JCSAq IC0gcmVuZGVyIGNvbXByZXNzaW9uIChhbHJlYWR5IGxpbWl0ZWQgdG8gNGspCi0JCSAqIC0gS1ZN UiBzcHJpdGUgYW5kIGN1cnNvciAoZG9uJ3QgY2FyZSkKLQkJICogLSBob3Jpem9udGFsIHBhbm5p bmcgKFRPRE8gdmVyaWZ5IHRoaXMpCi0JCSAqIC0gcGlwZSBhbmQgcGxhbmUgc2NhbGluZyAoVE9E TyB2ZXJpZnkgdGhpcykKLQkJICovCi0JCWlmIChjcHAgPT0gOCkKLQkJCXJldHVybiA0MDk2Owot CQllbHNlCi0JCQlyZXR1cm4gNTEyMDsKLQljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0ND UzoKLQljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1M6Ci0JY2FzZSBJOTE1X0ZPUk1B VF9NT0RfWV9USUxFRF9HRU4xMl9NQ19DQ1M6Ci0JCS8qIEZJWE1FIEFVWCBwbGFuZT8gKi8KLQlj YXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEOgotCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJ TEVEOgotCQlpZiAoY3BwID09IDgpCi0JCQlyZXR1cm4gMjA0ODsKLQkJZWxzZQotCQkJcmV0dXJu IDQwOTY7Ci0JZGVmYXVsdDoKLQkJTUlTU0lOR19DQVNFKGZiLT5tb2RpZmllcik7Ci0JCXJldHVy biAyMDQ4OwotCX0KLX0KLQotc3RhdGljIGludCBnbGtfcGxhbmVfbWF4X3dpZHRoKGNvbnN0IHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAotCQkJICAgICAgIGludCBjb2xvcl9wbGFuZSwKLQkJ CSAgICAgICB1bnNpZ25lZCBpbnQgcm90YXRpb24pCi17Ci0JaW50IGNwcCA9IGZiLT5mb3JtYXQt PmNwcFtjb2xvcl9wbGFuZV07Ci0KLQlzd2l0Y2ggKGZiLT5tb2RpZmllcikgewotCWNhc2UgRFJN X0ZPUk1BVF9NT0RfTElORUFSOgotCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ6Ci0JCWlm IChjcHAgPT0gOCkKLQkJCXJldHVybiA0MDk2OwotCQllbHNlCi0JCQlyZXR1cm4gNTEyMDsKLQlj YXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUzoKLQljYXNlIEk5MTVfRk9STUFUX01PRF9Z Zl9USUxFRF9DQ1M6Ci0JCS8qIEZJWE1FIEFVWCBwbGFuZT8gKi8KLQljYXNlIEk5MTVfRk9STUFU X01PRF9ZX1RJTEVEOgotCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEOgotCQlpZiAoY3Bw ID09IDgpCi0JCQlyZXR1cm4gMjA0ODsKLQkJZWxzZQotCQkJcmV0dXJuIDUxMjA7Ci0JZGVmYXVs dDoKLQkJTUlTU0lOR19DQVNFKGZiLT5tb2RpZmllcik7Ci0JCXJldHVybiAyMDQ4OwotCX0KLX0K LQotc3RhdGljIGludCBpY2xfcGxhbmVfbWluX3dpZHRoKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmZiLAotCQkJICAgICAgIGludCBjb2xvcl9wbGFuZSwKLQkJCSAgICAgICB1bnNpZ25l ZCBpbnQgcm90YXRpb24pCi17Ci0JLyogV2FfMTQwMTEyNjQ2NTcsIFdhXzE0MDExMDUwNTYzOiBn ZW4xMSsgKi8KLQlzd2l0Y2ggKGZiLT5mb3JtYXQtPmZvcm1hdCkgewotCWNhc2UgRFJNX0ZPUk1B VF9DODoKLQkJcmV0dXJuIDE4OwotCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6Ci0JCXJldHVybiAx MDsKLQljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6Ci0JY2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4 OgotCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoKLQljYXNlIERSTV9GT1JNQVRfQUJHUjg4ODg6 Ci0JY2FzZSBEUk1fRk9STUFUX1hSR0IyMTAxMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMjEw MTAxMDoKLQljYXNlIERSTV9GT1JNQVRfQVJHQjIxMDEwMTA6Ci0JY2FzZSBEUk1fRk9STUFUX0FC R1IyMTAxMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9YVllVMjEwMTAxMDoKLQljYXNlIERSTV9GT1JN QVRfWTIxMjoKLQljYXNlIERSTV9GT1JNQVRfWTIxNjoKLQkJcmV0dXJuIDY7Ci0JY2FzZSBEUk1f Rk9STUFUX05WMTI6Ci0JCXJldHVybiAyMDsKLQljYXNlIERSTV9GT1JNQVRfUDAxMDoKLQljYXNl IERSTV9GT1JNQVRfUDAxMjoKLQljYXNlIERSTV9GT1JNQVRfUDAxNjoKLQkJcmV0dXJuIDEyOwot CWNhc2UgRFJNX0ZPUk1BVF9YUkdCMTYxNjE2MTZGOgotCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMTYx NjE2MTZGOgotCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMTYxNjE2MTZGOgotCWNhc2UgRFJNX0ZPUk1B VF9BQkdSMTYxNjE2MTZGOgotCWNhc2UgRFJNX0ZPUk1BVF9YVllVMTJfMTYxNjE2MTY6Ci0JY2Fz ZSBEUk1fRk9STUFUX1hWWVUxNjE2MTYxNjoKLQkJcmV0dXJuIDQ7Ci0JZGVmYXVsdDoKLQkJcmV0 dXJuIDE7Ci0JfQotfQotCi1zdGF0aWMgaW50IGljbF9wbGFuZV9tYXhfd2lkdGgoY29uc3Qgc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCi0JCQkgICAgICAgaW50IGNvbG9yX3BsYW5lLAotCQkJ ICAgICAgIHVuc2lnbmVkIGludCByb3RhdGlvbikKLXsKLQlyZXR1cm4gNTEyMDsKLX0KLQotc3Rh dGljIGludCBza2xfcGxhbmVfbWF4X2hlaWdodChjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYiwKLQkJCQlpbnQgY29sb3JfcGxhbmUsCi0JCQkJdW5zaWduZWQgaW50IHJvdGF0aW9uKQot ewotCXJldHVybiA0MDk2OwotfQotCi1zdGF0aWMgaW50IGljbF9wbGFuZV9tYXhfaGVpZ2h0KGNv bnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAotCQkJCWludCBjb2xvcl9wbGFuZSwKLQkJ CQl1bnNpZ25lZCBpbnQgcm90YXRpb24pCi17Ci0JcmV0dXJuIDQzMjA7Ci19Ci0KLXN0YXRpYyB1 bnNpZ25lZCBpbnQKLXNrbF9wbGFuZV9tYXhfc3RyaWRlKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxh bmUsCi0JCSAgICAgdTMyIHBpeGVsX2Zvcm1hdCwgdTY0IG1vZGlmaWVyLAotCQkgICAgIHVuc2ln bmVkIGludCByb3RhdGlvbikKLXsKLQljb25zdCBzdHJ1Y3QgZHJtX2Zvcm1hdF9pbmZvICppbmZv ID0gZHJtX2Zvcm1hdF9pbmZvKHBpeGVsX2Zvcm1hdCk7Ci0JaW50IGNwcCA9IGluZm8tPmNwcFsw XTsKLQotCS8qCi0JICogIlRoZSBzdHJpZGUgaW4gYnl0ZXMgbXVzdCBub3QgZXhjZWVkIHRoZQot CSAqIG9mIHRoZSBzaXplIG9mIDhLIHBpeGVscyBhbmQgMzJLIGJ5dGVzLiIKLQkgKi8KLQlpZiAo ZHJtX3JvdGF0aW9uXzkwX29yXzI3MChyb3RhdGlvbikpCi0JCXJldHVybiBtaW4oODE5MiwgMzI3 NjggLyBjcHApOwotCWVsc2UKLQkJcmV0dXJuIG1pbig4MTkyICogY3BwLCAzMjc2OCk7Ci19Ci0K LXN0YXRpYyB2b2lkCit2b2lkCiBza2xfcHJvZ3JhbV9zY2FsZXIoc3RydWN0IGludGVsX3BsYW5l ICpwbGFuZSwKIAkJICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUs CiAJCSAgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCkBAIC02 MzIsMzU4ICs0MjcsNiBAQCBza2xfcHJvZ3JhbV9zY2FsZXIoc3RydWN0IGludGVsX3BsYW5lICpw bGFuZSwKIAkJCSAgKGNydGNfdyA8PCAxNikgfCBjcnRjX2gpOwogfQogCi0vKiBQcmVvZmZzZXQg dmFsdWVzIGZvciBZVVYgdG8gUkdCIENvbnZlcnNpb24gKi8KLSNkZWZpbmUgUFJFT0ZGX1lVVl9U T19SR0JfSEkJCTB4MTgwMAotI2RlZmluZSBQUkVPRkZfWVVWX1RPX1JHQl9NRQkJMHgxRjAwCi0j ZGVmaW5lIFBSRU9GRl9ZVVZfVE9fUkdCX0xPCQkweDE4MDAKLQotI2RlZmluZSAgUk9GRih4KSAg ICAgICAgICAoKCh4KSAmIDB4ZmZmZikgPDwgMTYpCi0jZGVmaW5lICBHT0ZGKHgpICAgICAgICAg ICgoKHgpICYgMHhmZmZmKSA8PCAwKQotI2RlZmluZSAgQk9GRih4KSAgICAgICAgICAoKCh4KSAm IDB4ZmZmZikgPDwgMTYpCi0KLXN0YXRpYyB2b2lkCi1pY2xfcHJvZ3JhbV9pbnB1dF9jc2Moc3Ry dWN0IGludGVsX3BsYW5lICpwbGFuZSwKLQkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNydGNfc3RhdGUsCi0JCSAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0 ZSAqcGxhbmVfc3RhdGUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g dG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOwotCWVudW0gcGlwZSBwaXBlID0gcGxhbmUtPnBpcGU7 Ci0JZW51bSBwbGFuZV9pZCBwbGFuZV9pZCA9IHBsYW5lLT5pZDsKLQotCXN0YXRpYyBjb25zdCB1 MTYgaW5wdXRfY3NjX21hdHJpeFtdWzldID0gewotCQkvKgotCQkgKiBCVC42MDEgZnVsbCByYW5n ZSBZQ2JDciAtPiBmdWxsIHJhbmdlIFJHQgotCQkgKiBUaGUgbWF0cml4IHJlcXVpcmVkIGlzIDoK LQkJICogWzEuMDAwLCAwLjAwMCwgMS4zNzEsCi0JCSAqICAxLjAwMCwgLTAuMzM2LCAtMC42OTgs Ci0JCSAqICAxLjAwMCwgMS43MzIsIDAuMDAwMF0KLQkJICovCi0JCVtEUk1fQ09MT1JfWUNCQ1Jf QlQ2MDFdID0gewotCQkJMHg3QUY4LCAweDc4MDAsIDB4MCwKLQkJCTB4OEIyOCwgMHg3ODAwLCAw eDlBQzAsCi0JCQkweDAsIDB4NzgwMCwgMHg3REQ4LAotCQl9LAotCQkvKgotCQkgKiBCVC43MDkg ZnVsbCByYW5nZSBZQ2JDciAtPiBmdWxsIHJhbmdlIFJHQgotCQkgKiBUaGUgbWF0cml4IHJlcXVp cmVkIGlzIDoKLQkJICogWzEuMDAwLCAwLjAwMCwgMS41NzQsCi0JCSAqICAxLjAwMCwgLTAuMTg3 LCAtMC40NjgsCi0JCSAqICAxLjAwMCwgMS44NTUsIDAuMDAwMF0KLQkJICovCi0JCVtEUk1fQ09M T1JfWUNCQ1JfQlQ3MDldID0gewotCQkJMHg3Qzk4LCAweDc4MDAsIDB4MCwKLQkJCTB4OUVGOCwg MHg3ODAwLCAweEFDMDAsCi0JCQkweDAsIDB4NzgwMCwgIDB4N0VEOCwKLQkJfSwKLQkJLyoKLQkJ ICogQlQuMjAyMCBmdWxsIHJhbmdlIFlDYkNyIC0+IGZ1bGwgcmFuZ2UgUkdCCi0JCSAqIFRoZSBt YXRyaXggcmVxdWlyZWQgaXMgOgotCQkgKiBbMS4wMDAsIDAuMDAwLCAxLjQ3NCwKLQkJICogIDEu MDAwLCAtMC4xNjQ1LCAtMC41NzEzLAotCQkgKiAgMS4wMDAsIDEuODgxNCwgMC4wMDAwXQotCQkg Ki8KLQkJW0RSTV9DT0xPUl9ZQ0JDUl9CVDIwMjBdID0gewotCQkJMHg3QkM4LCAweDc4MDAsIDB4 MCwKLQkJCTB4ODkyOCwgMHg3ODAwLCAweEFBODgsCi0JCQkweDAsIDB4NzgwMCwgMHg3RjEwLAot CQl9LAotCX07Ci0KLQkvKiBNYXRyaXggZm9yIExpbWl0ZWQgUmFuZ2UgdG8gRnVsbCBSYW5nZSBD b252ZXJzaW9uICovCi0Jc3RhdGljIGNvbnN0IHUxNiBpbnB1dF9jc2NfbWF0cml4X2xyW11bOV0g PSB7Ci0JCS8qCi0JCSAqIEJULjYwMSBMaW10ZWQgcmFuZ2UgWUNiQ3IgLT4gZnVsbCByYW5nZSBS R0IKLQkJICogVGhlIG1hdHJpeCByZXF1aXJlZCBpcyA6Ci0JCSAqIFsxLjE2NDM4NCwgMC4wMDAs IDEuNTk2MDI3LAotCQkgKiAgMS4xNjQzODQsIC0wLjM5MTc1LCAtMC44MTI4MTMsCi0JCSAqICAx LjE2NDM4NCwgMi4wMTcyMzIsIDAuMDAwMF0KLQkJICovCi0JCVtEUk1fQ09MT1JfWUNCQ1JfQlQ2 MDFdID0gewotCQkJMHg3Q0M4LCAweDc5NTAsIDB4MCwKLQkJCTB4OEQwMCwgMHg3OTUwLCAweDlD ODgsCi0JCQkweDAsIDB4Nzk1MCwgMHg2ODEwLAotCQl9LAotCQkvKgotCQkgKiBCVC43MDkgTGlt aXRlZCByYW5nZSBZQ2JDciAtPiBmdWxsIHJhbmdlIFJHQgotCQkgKiBUaGUgbWF0cml4IHJlcXVp cmVkIGlzIDoKLQkJICogWzEuMTY0Mzg0LCAwLjAwMCwgMS43OTI3NDEsCi0JCSAqICAxLjE2NDM4 NCwgLTAuMjEzMjQ5LCAtMC41MzI5MDksCi0JCSAqICAxLjE2NDM4NCwgMi4xMTI0MDIsIDAuMDAw MF0KLQkJICovCi0JCVtEUk1fQ09MT1JfWUNCQ1JfQlQ3MDldID0gewotCQkJMHg3RTU4LCAweDc5 NTAsIDB4MCwKLQkJCTB4ODg4OCwgMHg3OTUwLCAweEFEQTgsCi0JCQkweDAsIDB4Nzk1MCwgIDB4 Njg3MCwKLQkJfSwKLQkJLyoKLQkJICogQlQuMjAyMCBMaW1pdGVkIHJhbmdlIFlDYkNyIC0+IGZ1 bGwgcmFuZ2UgUkdCCi0JCSAqIFRoZSBtYXRyaXggcmVxdWlyZWQgaXMgOgotCQkgKiBbMS4xNjQs IDAuMDAwLCAxLjY3OCwKLQkJICogIDEuMTY0LCAtMC4xODczLCAtMC42NTA0LAotCQkgKiAgMS4x NjQsIDIuMTQxNywgMC4wMDAwXQotCQkgKi8KLQkJW0RSTV9DT0xPUl9ZQ0JDUl9CVDIwMjBdID0g ewotCQkJMHg3RDcwLCAweDc5NTAsIDB4MCwKLQkJCTB4OEE2OCwgMHg3OTUwLCAweEFDMDAsCi0J CQkweDAsIDB4Nzk1MCwgMHg2ODkwLAotCQl9LAotCX07Ci0JY29uc3QgdTE2ICpjc2M7Ci0KLQlp ZiAocGxhbmVfc3RhdGUtPmh3LmNvbG9yX3JhbmdlID09IERSTV9DT0xPUl9ZQ0JDUl9GVUxMX1JB TkdFKQotCQljc2MgPSBpbnB1dF9jc2NfbWF0cml4W3BsYW5lX3N0YXRlLT5ody5jb2xvcl9lbmNv ZGluZ107Ci0JZWxzZQotCQljc2MgPSBpbnB1dF9jc2NfbWF0cml4X2xyW3BsYW5lX3N0YXRlLT5o dy5jb2xvcl9lbmNvZGluZ107Ci0KLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVf SU5QVVRfQ1NDX0NPRUZGKHBpcGUsIHBsYW5lX2lkLCAwKSwKLQkJCSAgUk9GRihjc2NbMF0pIHwg R09GRihjc2NbMV0pKTsKLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfSU5QVVRf Q1NDX0NPRUZGKHBpcGUsIHBsYW5lX2lkLCAxKSwKLQkJCSAgQk9GRihjc2NbMl0pKTsKLQlpbnRl bF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfSU5QVVRfQ1NDX0NPRUZGKHBpcGUsIHBsYW5l X2lkLCAyKSwKLQkJCSAgUk9GRihjc2NbM10pIHwgR09GRihjc2NbNF0pKTsKLQlpbnRlbF9kZV93 cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfSU5QVVRfQ1NDX0NPRUZGKHBpcGUsIHBsYW5lX2lkLCAz KSwKLQkJCSAgQk9GRihjc2NbNV0pKTsKLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExB TkVfSU5QVVRfQ1NDX0NPRUZGKHBpcGUsIHBsYW5lX2lkLCA0KSwKLQkJCSAgUk9GRihjc2NbNl0p IHwgR09GRihjc2NbN10pKTsKLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfSU5Q VVRfQ1NDX0NPRUZGKHBpcGUsIHBsYW5lX2lkLCA1KSwKLQkJCSAgQk9GRihjc2NbOF0pKTsKLQot CWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9JTlBVVF9DU0NfUFJFT0ZGKHBpcGUs IHBsYW5lX2lkLCAwKSwKLQkJCSAgUFJFT0ZGX1lVVl9UT19SR0JfSEkpOwotCWlmIChwbGFuZV9z dGF0ZS0+aHcuY29sb3JfcmFuZ2UgPT0gRFJNX0NPTE9SX1lDQkNSX0ZVTExfUkFOR0UpCi0JCWlu dGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LAotCQkJCSAgUExBTkVfSU5QVVRfQ1NDX1BSRU9GRihw aXBlLCBwbGFuZV9pZCwgMSksCi0JCQkJICAwKTsKLQllbHNlCi0JCWludGVsX2RlX3dyaXRlX2Z3 KGRldl9wcml2LAotCQkJCSAgUExBTkVfSU5QVVRfQ1NDX1BSRU9GRihwaXBlLCBwbGFuZV9pZCwg MSksCi0JCQkJICBQUkVPRkZfWVVWX1RPX1JHQl9NRSk7Ci0JaW50ZWxfZGVfd3JpdGVfZncoZGV2 X3ByaXYsIFBMQU5FX0lOUFVUX0NTQ19QUkVPRkYocGlwZSwgcGxhbmVfaWQsIDIpLAotCQkJICBQ UkVPRkZfWVVWX1RPX1JHQl9MTyk7Ci0JaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsCi0JCQkg IFBMQU5FX0lOUFVUX0NTQ19QT1NUT0ZGKHBpcGUsIHBsYW5lX2lkLCAwKSwgMHgwKTsKLQlpbnRl bF9kZV93cml0ZV9mdyhkZXZfcHJpdiwKLQkJCSAgUExBTkVfSU5QVVRfQ1NDX1BPU1RPRkYocGlw ZSwgcGxhbmVfaWQsIDEpLCAweDApOwotCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LAotCQkJ ICBQTEFORV9JTlBVVF9DU0NfUE9TVE9GRihwaXBlLCBwbGFuZV9pZCwgMiksIDB4MCk7Ci19Ci0K LXN0YXRpYyB2b2lkCi1za2xfcGxhbmVfYXN5bmNfZmxpcChzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBs YW5lLAotCQkgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAot CQkgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUsCi0JCSAg ICAgYm9vbCBhc3luY19mbGlwKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKLQl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwot CWVudW0gcGxhbmVfaWQgcGxhbmVfaWQgPSBwbGFuZS0+aWQ7Ci0JZW51bSBwaXBlIHBpcGUgPSBw bGFuZS0+cGlwZTsKLQl1MzIgc3VyZl9hZGRyID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBd Lm9mZnNldDsKLQl1MzIgcGxhbmVfY3RsID0gcGxhbmVfc3RhdGUtPmN0bDsKLQotCXBsYW5lX2N0 bCB8PSBza2xfcGxhbmVfY3RsX2NydGMoY3J0Y19zdGF0ZSk7Ci0KLQlpZiAoYXN5bmNfZmxpcCkK LQkJcGxhbmVfY3RsIHw9IFBMQU5FX0NUTF9BU1lOQ19GTElQOwotCi0Jc3Bpbl9sb2NrX2lycXNh dmUoJmRldl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOwotCi0JaW50ZWxfZGVfd3JpdGVf ZncoZGV2X3ByaXYsIFBMQU5FX0NUTChwaXBlLCBwbGFuZV9pZCksIHBsYW5lX2N0bCk7Ci0JaW50 ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX1NVUkYocGlwZSwgcGxhbmVfaWQpLAotCQkJ ICBpbnRlbF9wbGFuZV9nZ3R0X29mZnNldChwbGFuZV9zdGF0ZSkgKyBzdXJmX2FkZHIpOwotCi0J c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7 Ci19Ci0KLXN0YXRpYyB2b2lkCi1za2xfcHJvZ3JhbV9wbGFuZShzdHJ1Y3QgaW50ZWxfcGxhbmUg KnBsYW5lLAotCQkgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAot CQkgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUsCi0JCSAgaW50 IGNvbG9yX3BsYW5lKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRv X2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKLQllbnVtIHBsYW5lX2lkIHBsYW5lX2lkID0gcGxhbmUt PmlkOwotCWVudW0gcGlwZSBwaXBlID0gcGxhbmUtPnBpcGU7Ci0JY29uc3Qgc3RydWN0IGRybV9p bnRlbF9zcHJpdGVfY29sb3JrZXkgKmtleSA9ICZwbGFuZV9zdGF0ZS0+Y2tleTsKLQl1MzIgc3Vy Zl9hZGRyID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2NvbG9yX3BsYW5lXS5vZmZzZXQ7Ci0J dTMyIHN0cmlkZSA9IHNrbF9wbGFuZV9zdHJpZGUocGxhbmVfc3RhdGUsIGNvbG9yX3BsYW5lKTsK LQljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsK LQlpbnQgYXV4X3BsYW5lID0gaW50ZWxfbWFpbl90b19hdXhfcGxhbmUoZmIsIGNvbG9yX3BsYW5l KTsKLQlpbnQgY3J0Y194ID0gcGxhbmVfc3RhdGUtPnVhcGkuZHN0LngxOwotCWludCBjcnRjX3kg PSBwbGFuZV9zdGF0ZS0+dWFwaS5kc3QueTE7Ci0JdTMyIHggPSBwbGFuZV9zdGF0ZS0+Y29sb3Jf cGxhbmVbY29sb3JfcGxhbmVdLng7Ci0JdTMyIHkgPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVb Y29sb3JfcGxhbmVdLnk7Ci0JdTMyIHNyY193ID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRl LT51YXBpLnNyYykgPj4gMTY7Ci0JdTMyIHNyY19oID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9z dGF0ZS0+dWFwaS5zcmMpID4+IDE2OwotCXU4IGFscGhhID0gcGxhbmVfc3RhdGUtPmh3LmFscGhh ID4+IDg7Ci0JdTMyIHBsYW5lX2NvbG9yX2N0bCA9IDAsIGF1eF9kaXN0ID0gMDsKLQl1bnNpZ25l ZCBsb25nIGlycWZsYWdzOwotCXUzMiBrZXltc2ssIGtleW1heDsKLQl1MzIgcGxhbmVfY3RsID0g cGxhbmVfc3RhdGUtPmN0bDsKLQotCXBsYW5lX2N0bCB8PSBza2xfcGxhbmVfY3RsX2NydGMoY3J0 Y19zdGF0ZSk7Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCB8fCBJU19HRU1JTklM QUtFKGRldl9wcml2KSkKLQkJcGxhbmVfY29sb3JfY3RsID0gcGxhbmVfc3RhdGUtPmNvbG9yX2N0 bCB8Ci0JCQlnbGtfcGxhbmVfY29sb3JfY3RsX2NydGMoY3J0Y19zdGF0ZSk7Ci0KLQkvKiBTaXpl cyBhcmUgMCBiYXNlZCAqLwotCXNyY193LS07Ci0Jc3JjX2gtLTsKLQotCWtleW1heCA9IChrZXkt Pm1heF92YWx1ZSAmIDB4ZmZmZmZmKSB8IFBMQU5FX0tFWU1BWF9BTFBIQShhbHBoYSk7Ci0KLQlr ZXltc2sgPSBrZXktPmNoYW5uZWxfbWFzayAmIDB4N2ZmZmZmZjsKLQlpZiAoYWxwaGEgPCAweGZm KQotCQlrZXltc2sgfD0gUExBTkVfS0VZTVNLX0FMUEhBX0VOQUJMRTsKLQotCS8qIFRoZSBzY2Fs ZXIgd2lsbCBoYW5kbGUgdGhlIG91dHB1dCBwb3NpdGlvbiAqLwotCWlmIChwbGFuZV9zdGF0ZS0+ c2NhbGVyX2lkID49IDApIHsKLQkJY3J0Y194ID0gMDsKLQkJY3J0Y195ID0gMDsKLQl9Ci0KLQlp ZiAoYXV4X3BsYW5lKSB7Ci0JCWF1eF9kaXN0ID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2F1 eF9wbGFuZV0ub2Zmc2V0IC0gc3VyZl9hZGRyOwotCi0JCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYp IDwgMTIpCi0JCQlhdXhfZGlzdCB8PSBza2xfcGxhbmVfc3RyaWRlKHBsYW5lX3N0YXRlLCBhdXhf cGxhbmUpOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ss IGlycWZsYWdzKTsKLQotCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9TVFJJREUo cGlwZSwgcGxhbmVfaWQpLCBzdHJpZGUpOwotCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQ TEFORV9QT1MocGlwZSwgcGxhbmVfaWQpLAotCQkJICAoY3J0Y195IDw8IDE2KSB8IGNydGNfeCk7 Ci0JaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX1NJWkUocGlwZSwgcGxhbmVfaWQp LAotCQkJICAoc3JjX2ggPDwgMTYpIHwgc3JjX3cpOwotCi0JaW50ZWxfZGVfd3JpdGVfZncoZGV2 X3ByaXYsIFBMQU5FX0FVWF9ESVNUKHBpcGUsIHBsYW5lX2lkKSwgYXV4X2Rpc3QpOwotCi0JaWYg KGljbF9pc19oZHJfcGxhbmUoZGV2X3ByaXYsIHBsYW5lX2lkKSkKLQkJaW50ZWxfZGVfd3JpdGVf ZncoZGV2X3ByaXYsIFBMQU5FX0NVU19DVEwocGlwZSwgcGxhbmVfaWQpLAotCQkJCSAgcGxhbmVf c3RhdGUtPmN1c19jdGwpOwotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTAgfHwgSVNf R0VNSU5JTEFLRShkZXZfcHJpdikpCi0JCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFO RV9DT0xPUl9DVEwocGlwZSwgcGxhbmVfaWQpLAotCQkJCSAgcGxhbmVfY29sb3JfY3RsKTsKLQot CWlmIChmYi0+Zm9ybWF0LT5pc195dXYgJiYgaWNsX2lzX2hkcl9wbGFuZShkZXZfcHJpdiwgcGxh bmVfaWQpKQotCQlpY2xfcHJvZ3JhbV9pbnB1dF9jc2MocGxhbmUsIGNydGNfc3RhdGUsIHBsYW5l X3N0YXRlKTsKLQotCXNrbF93cml0ZV9wbGFuZV93bShwbGFuZSwgY3J0Y19zdGF0ZSk7Ci0KLQlp bnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfS0VZVkFMKHBpcGUsIHBsYW5lX2lkKSwK LQkJCSAga2V5LT5taW5fdmFsdWUpOwotCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFO RV9LRVlNU0socGlwZSwgcGxhbmVfaWQpLCBrZXltc2spOwotCWludGVsX2RlX3dyaXRlX2Z3KGRl dl9wcml2LCBQTEFORV9LRVlNQVgocGlwZSwgcGxhbmVfaWQpLCBrZXltYXgpOwotCi0JaW50ZWxf ZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX09GRlNFVChwaXBlLCBwbGFuZV9pZCksCi0JCQkg ICh5IDw8IDE2KSB8IHgpOwotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPCAxMSkKLQkJaW50 ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX0FVWF9PRkZTRVQocGlwZSwgcGxhbmVfaWQp LAotCQkJCSAgKHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVsxXS55IDw8IDE2KSB8IHBsYW5lX3N0 YXRlLT5jb2xvcl9wbGFuZVsxXS54KTsKLQotCWlmICghZHJtX2F0b21pY19jcnRjX25lZWRzX21v ZGVzZXQoJmNydGNfc3RhdGUtPnVhcGkpKQotCQlpbnRlbF9wc3IyX3Byb2dyYW1fcGxhbmVfc2Vs X2ZldGNoKHBsYW5lLCBjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSwgY29sb3JfcGxhbmUpOwotCi0J LyoKLQkgKiBUaGUgY29udHJvbCByZWdpc3RlciBzZWxmLWFybXMgaWYgdGhlIHBsYW5lIHdhcyBw cmV2aW91c2x5Ci0JICogZGlzYWJsZWQuIFRyeSB0byBtYWtlIHRoZSBwbGFuZSBlbmFibGUgYXRv bWljIGJ5IHdyaXRpbmcKLQkgKiB0aGUgY29udHJvbCByZWdpc3RlciBqdXN0IGJlZm9yZSB0aGUg c3VyZmFjZSByZWdpc3Rlci4KLQkgKi8KLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExB TkVfQ1RMKHBpcGUsIHBsYW5lX2lkKSwgcGxhbmVfY3RsKTsKLQlpbnRlbF9kZV93cml0ZV9mdyhk ZXZfcHJpdiwgUExBTkVfU1VSRihwaXBlLCBwbGFuZV9pZCksCi0JCQkgIGludGVsX3BsYW5lX2dn dHRfb2Zmc2V0KHBsYW5lX3N0YXRlKSArIHN1cmZfYWRkcik7Ci0KLQlpZiAocGxhbmVfc3RhdGUt PnNjYWxlcl9pZCA+PSAwKQotCQlza2xfcHJvZ3JhbV9zY2FsZXIocGxhbmUsIGNydGNfc3RhdGUs IHBsYW5lX3N0YXRlKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT51bmNv cmUubG9jaywgaXJxZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZAotc2tsX3VwZGF0ZV9wbGFuZShz dHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAotCQkgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKmNydGNfc3RhdGUsCi0JCSBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5l X3N0YXRlKQotewotCWludCBjb2xvcl9wbGFuZSA9IDA7Ci0KLQlpZiAocGxhbmVfc3RhdGUtPnBs YW5hcl9saW5rZWRfcGxhbmUgJiYgIXBsYW5lX3N0YXRlLT5wbGFuYXJfc2xhdmUpCi0JCS8qIFBy b2dyYW0gdGhlIFVWIHBsYW5lIG9uIHBsYW5hciBtYXN0ZXIgKi8KLQkJY29sb3JfcGxhbmUgPSAx OwotCi0Jc2tsX3Byb2dyYW1fcGxhbmUocGxhbmUsIGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlLCBj b2xvcl9wbGFuZSk7Ci19Ci1zdGF0aWMgdm9pZAotc2tsX2Rpc2FibGVfcGxhbmUoc3RydWN0IGlu dGVsX3BsYW5lICpwbGFuZSwKLQkJICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1 KHBsYW5lLT5iYXNlLmRldik7Ci0JZW51bSBwbGFuZV9pZCBwbGFuZV9pZCA9IHBsYW5lLT5pZDsK LQllbnVtIHBpcGUgcGlwZSA9IHBsYW5lLT5waXBlOwotCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7 Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7 Ci0KLQlpZiAoaWNsX2lzX2hkcl9wbGFuZShkZXZfcHJpdiwgcGxhbmVfaWQpKQotCQlpbnRlbF9k ZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfQ1VTX0NUTChwaXBlLCBwbGFuZV9pZCksIDApOwot Ci0Jc2tsX3dyaXRlX3BsYW5lX3dtKHBsYW5lLCBjcnRjX3N0YXRlKTsKLQotCWludGVsX2RlX3dy aXRlX2Z3KGRldl9wcml2LCBQTEFORV9DVEwocGlwZSwgcGxhbmVfaWQpLCAwKTsKLQlpbnRlbF9k ZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfU1VSRihwaXBlLCBwbGFuZV9pZCksIDApOwotCi0J c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7 Ci19Ci0KLXN0YXRpYyBib29sCi1za2xfcGxhbmVfZ2V0X2h3X3N0YXRlKHN0cnVjdCBpbnRlbF9w bGFuZSAqcGxhbmUsCi0JCSAgICAgICBlbnVtIHBpcGUgKnBpcGUpCi17Ci0Jc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOwotCWVudW0g aW50ZWxfZGlzcGxheV9wb3dlcl9kb21haW4gcG93ZXJfZG9tYWluOwotCWVudW0gcGxhbmVfaWQg cGxhbmVfaWQgPSBwbGFuZS0+aWQ7Ci0JaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Ci0JYm9vbCBy ZXQ7Ci0KLQlwb3dlcl9kb21haW4gPSBQT1dFUl9ET01BSU5fUElQRShwbGFuZS0+cGlwZSk7Ci0J d2FrZXJlZiA9IGludGVsX2Rpc3BsYXlfcG93ZXJfZ2V0X2lmX2VuYWJsZWQoZGV2X3ByaXYsIHBv d2VyX2RvbWFpbik7Ci0JaWYgKCF3YWtlcmVmKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlyZXQgPSBp bnRlbF9kZV9yZWFkKGRldl9wcml2LCBQTEFORV9DVEwocGxhbmUtPnBpcGUsIHBsYW5lX2lkKSkg JiBQTEFORV9DVExfRU5BQkxFOwotCi0JKnBpcGUgPSBwbGFuZS0+cGlwZTsKLQotCWludGVsX2Rp c3BsYXlfcG93ZXJfcHV0KGRldl9wcml2LCBwb3dlcl9kb21haW4sIHdha2VyZWYpOwotCi0JcmV0 dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQKLXNrbF9wbGFuZV9lbmFibGVfZmxpcF9kb25lKHN0 cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTUgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7Ci0JZW51bSBwaXBlIHBpcGUgPSBwbGFuZS0+ cGlwZTsKLQotCXNwaW5fbG9ja19pcnEoJmk5MTUtPmlycV9sb2NrKTsKLQliZHdfZW5hYmxlX3Bp cGVfaXJxKGk5MTUsIHBpcGUsIEdFTjlfUElQRV9QTEFORV9GTElQX0RPTkUocGxhbmUtPmlkKSk7 Ci0Jc3Bpbl91bmxvY2tfaXJxKCZpOTE1LT5pcnFfbG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1z a2xfcGxhbmVfZGlzYWJsZV9mbGlwX2RvbmUoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSkKLXsK LQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2 KTsKLQllbnVtIHBpcGUgcGlwZSA9IHBsYW5lLT5waXBlOwotCi0Jc3Bpbl9sb2NrX2lycSgmaTkx NS0+aXJxX2xvY2spOwotCWJkd19kaXNhYmxlX3BpcGVfaXJxKGk5MTUsIHBpcGUsIEdFTjlfUElQ RV9QTEFORV9GTElQX0RPTkUocGxhbmUtPmlkKSk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZpOTE1LT5p cnFfbG9jayk7Ci19Ci0KIHN0YXRpYyB2b2lkIGk5eHhfcGxhbmVfbGluZWFyX2dhbW1hKHUxNiBn YW1tYVs4XSkKIHsKIAkvKiBUaGUgcG9pbnRzIGFyZSBub3QgZXZlbmx5IHNwYWNlZC4gKi8KQEAg LTIzMDgsMjM5ICsxNzUxLDYgQEAgdmx2X3Nwcml0ZV9jaGVjayhzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqY3J0Y19zdGF0ZSwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGJvb2wgaW50ZWxfZm9y bWF0X2lzX3AwMXgodTMyIGZvcm1hdCkKLXsKLQlzd2l0Y2ggKGZvcm1hdCkgewotCWNhc2UgRFJN X0ZPUk1BVF9QMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9QMDEyOgotCWNhc2UgRFJNX0ZPUk1BVF9Q MDE2OgotCQlyZXR1cm4gdHJ1ZTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gZmFsc2U7Ci0JfQotfQot Ci1zdGF0aWMgaW50IHNrbF9wbGFuZV9jaGVja19mYihjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqY3J0Y19zdGF0ZSwKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0 ZSAqcGxhbmVfc3RhdGUpCi17Ci0Jc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSA9IHRvX2ludGVs X3BsYW5lKHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lKTsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7Ci0JY29uc3Qgc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7Ci0JdW5zaWduZWQgaW50IHJv dGF0aW9uID0gcGxhbmVfc3RhdGUtPmh3LnJvdGF0aW9uOwotCXN0cnVjdCBkcm1fZm9ybWF0X25h bWVfYnVmIGZvcm1hdF9uYW1lOwotCi0JaWYgKCFmYikKLQkJcmV0dXJuIDA7Ci0KLQlpZiAocm90 YXRpb24gJiB+KERSTV9NT0RFX1JPVEFURV8wIHwgRFJNX01PREVfUk9UQVRFXzE4MCkgJiYKLQkg ICAgaXNfY2NzX21vZGlmaWVyKGZiLT5tb2RpZmllcikpIHsKLQkJZHJtX2RiZ19rbXMoJmRldl9w cml2LT5kcm0sCi0JCQkgICAgIlJDIHN1cHBvcnQgb25seSB3aXRoIDAvMTgwIGRlZ3JlZSByb3Rh dGlvbiAoJXgpXG4iLAotCQkJICAgIHJvdGF0aW9uKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQot Ci0JaWYgKHJvdGF0aW9uICYgRFJNX01PREVfUkVGTEVDVF9YICYmCi0JICAgIGZiLT5tb2RpZmll ciA9PSBEUk1fRk9STUFUX01PRF9MSU5FQVIpIHsKLQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5k cm0sCi0JCQkgICAgImhvcml6b250YWwgZmxpcCBpcyBub3Qgc3VwcG9ydGVkIHdpdGggbGluZWFy IHN1cmZhY2UgZm9ybWF0c1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChkcm1f cm90YXRpb25fOTBfb3JfMjcwKHJvdGF0aW9uKSkgewotCQlpZiAoZmItPm1vZGlmaWVyICE9IEk5 MTVfRk9STUFUX01PRF9ZX1RJTEVEICYmCi0JCSAgICBmYi0+bW9kaWZpZXIgIT0gSTkxNV9GT1JN QVRfTU9EX1lmX1RJTEVEKSB7Ci0JCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKLQkJCQkg ICAgIlkvWWYgdGlsaW5nIHJlcXVpcmVkIGZvciA5MC8yNzAhXG4iKTsKLQkJCXJldHVybiAtRUlO VkFMOwotCQl9Ci0KLQkJLyoKLQkJICogOTAvMjcwIGlzIG5vdCBhbGxvd2VkIHdpdGggUkdCNjQg MTY6MTY6MTY6MTYgYW5kCi0JCSAqIEluZGV4ZWQgOC1iaXQuIFJHQiAxNi1iaXQgNTo2OjUgaXMg YWxsb3dlZCBnZW4xMSBvbndhcmRzLgotCQkgKi8KLQkJc3dpdGNoIChmYi0+Zm9ybWF0LT5mb3Jt YXQpIHsKLQkJY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKLQkJCWlmIChJTlRFTF9HRU4oZGV2X3By aXYpID49IDExKQotCQkJCWJyZWFrOwotCQkJZmFsbHRocm91Z2g7Ci0JCWNhc2UgRFJNX0ZPUk1B VF9DODoKLQkJY2FzZSBEUk1fRk9STUFUX1hSR0IxNjE2MTYxNkY6Ci0JCWNhc2UgRFJNX0ZPUk1B VF9YQkdSMTYxNjE2MTZGOgotCQljYXNlIERSTV9GT1JNQVRfQVJHQjE2MTYxNjE2RjoKLQkJY2Fz ZSBEUk1fRk9STUFUX0FCR1IxNjE2MTYxNkY6Ci0JCWNhc2UgRFJNX0ZPUk1BVF9ZMjEwOgotCQlj YXNlIERSTV9GT1JNQVRfWTIxMjoKLQkJY2FzZSBEUk1fRk9STUFUX1kyMTY6Ci0JCWNhc2UgRFJN X0ZPUk1BVF9YVllVMTJfMTYxNjE2MTY6Ci0JCWNhc2UgRFJNX0ZPUk1BVF9YVllVMTYxNjE2MTY6 Ci0JCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKLQkJCQkgICAgIlVuc3VwcG9ydGVkIHBp eGVsIGZvcm1hdCAlcyBmb3IgOTAvMjcwIVxuIiwKLQkJCQkgICAgZHJtX2dldF9mb3JtYXRfbmFt ZShmYi0+Zm9ybWF0LT5mb3JtYXQsCi0JCQkJCQkJJmZvcm1hdF9uYW1lKSk7Ci0JCQlyZXR1cm4g LUVJTlZBTDsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JLyogWS10aWxpbmcg aXMgbm90IHN1cHBvcnRlZCBpbiBJRi1JRCBJbnRlcmxhY2UgbW9kZSAqLwotCWlmIChjcnRjX3N0 YXRlLT5ody5lbmFibGUgJiYKLQkgICAgY3J0Y19zdGF0ZS0+aHcuYWRqdXN0ZWRfbW9kZS5mbGFn cyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFICYmCi0JICAgIChmYi0+bW9kaWZpZXIgPT0gSTkx NV9GT1JNQVRfTU9EX1lfVElMRUQgfHwKLQkgICAgIGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1B VF9NT0RfWWZfVElMRUQgfHwKLQkgICAgIGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0Rf WV9USUxFRF9DQ1MgfHwKLQkgICAgIGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWWZf VElMRURfQ0NTIHx8Ci0JICAgICBmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElM RURfR0VOMTJfUkNfQ0NTIHx8Ci0JICAgICBmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9E X1lfVElMRURfR0VOMTJfTUNfQ0NTKSkgewotCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwK LQkJCSAgICAiWS9ZZiB0aWxpbmcgbm90IHN1cHBvcnRlZCBpbiBJRi1JRCBtb2RlXG4iKTsKLQkJ cmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogV2FfMTYwNjA1NDE4ODp0Z2wgKi8KLQlpZiAoSVNf VElHRVJMQUtFKGRldl9wcml2KSAmJgotCSAgICBwbGFuZV9zdGF0ZS0+Y2tleS5mbGFncyAmIEk5 MTVfU0VUX0NPTE9SS0VZX1NPVVJDRSAmJgotCSAgICBpbnRlbF9mb3JtYXRfaXNfcDAxeChmYi0+ Zm9ybWF0LT5mb3JtYXQpKSB7Ci0JCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAotCQkJICAg ICJTb3VyY2UgY29sb3Iga2V5aW5nIG5vdCBzdXBwb3J0ZWQgd2l0aCBQMDF4IGZvcm1hdHNcbiIp OwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBz a2xfcGxhbmVfY2hlY2tfZHN0X2Nvb3JkaW5hdGVzKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpjcnRjX3N0YXRlLAotCQkJCQkgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUg KnBsYW5lX3N0YXRlKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9Ci0J CXRvX2k5MTUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRldik7Ci0JaW50IGNydGNfeCA9IHBs YW5lX3N0YXRlLT51YXBpLmRzdC54MTsKLQlpbnQgY3J0Y193ID0gZHJtX3JlY3Rfd2lkdGgoJnBs YW5lX3N0YXRlLT51YXBpLmRzdCk7Ci0JaW50IHBpcGVfc3JjX3cgPSBjcnRjX3N0YXRlLT5waXBl X3NyY193OwotCi0JLyoKLQkgKiBEaXNwbGF5IFdBICMxMTc1OiBjbmwsZ2xrCi0JICogUGxhbmVz IG90aGVyIHRoYW4gdGhlIGN1cnNvciBtYXkgY2F1c2UgRklGTyB1bmRlcmZsb3cgYW5kIGRpc3Bs YXkKLQkgKiBjb3JydXB0aW9uIGlmIHN0YXJ0aW5nIGxlc3MgdGhhbiA0IHBpeGVscyBmcm9tIHRo ZSByaWdodCBlZGdlIG9mCi0JICogdGhlIHNjcmVlbi4KLQkgKiBCZXNpZGVzIHRoZSBhYm92ZSBX QSBmaXggdGhlIHNpbWlsYXIgcHJvYmxlbSwgd2hlcmUgcGxhbmVzIG90aGVyCi0JICogdGhhbiB0 aGUgY3Vyc29yIGVuZGluZyBsZXNzIHRoYW4gNCBwaXhlbHMgZnJvbSB0aGUgbGVmdCBlZGdlIG9m IHRoZQotCSAqIHNjcmVlbiBtYXkgY2F1c2UgRklGTyB1bmRlcmZsb3cgYW5kIGRpc3BsYXkgY29y cnVwdGlvbi4KLQkgKi8KLQlpZiAoKElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpIHx8IElTX0NBTk5P TkxBS0UoZGV2X3ByaXYpKSAmJgotCSAgICAoY3J0Y194ICsgY3J0Y193IDwgNCB8fCBjcnRjX3gg PiBwaXBlX3NyY193IC0gNCkpIHsKLQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0JCQkg ICAgInJlcXVlc3RlZCBwbGFuZSBYICVzIHBvc2l0aW9uICVkIGludmFsaWQgKHZhbGlkIHJhbmdl ICVkLSVkKVxuIiwKLQkJCSAgICBjcnRjX3ggKyBjcnRjX3cgPCA0ID8gImVuZCIgOiAic3RhcnQi LAotCQkJICAgIGNydGNfeCArIGNydGNfdyA8IDQgPyBjcnRjX3ggKyBjcnRjX3cgOiBjcnRjX3gs Ci0JCQkgICAgNCwgcGlwZV9zcmNfdyAtIDQpOwotCQlyZXR1cm4gLUVSQU5HRTsKLQl9Ci0KLQly ZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBza2xfcGxhbmVfY2hlY2tfbnYxMl9yb3RhdGlvbihj b25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQotewotCWNvbnN0IHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwotCXVuc2lnbmVk IGludCByb3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5ody5yb3RhdGlvbjsKLQlpbnQgc3JjX3cgPSBk cm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuc3JjKSA+PiAxNjsKLQotCS8qIERpc3Bs YXkgV0EgIzExMDYgKi8KLQlpZiAoaW50ZWxfZm9ybWF0X2luZm9faXNfeXV2X3NlbWlwbGFuYXIo ZmItPmZvcm1hdCwgZmItPm1vZGlmaWVyKSAmJgotCSAgICBzcmNfdyAmIDMgJiYKLQkgICAgKHJv dGF0aW9uID09IERSTV9NT0RFX1JPVEFURV8yNzAgfHwKLQkgICAgIHJvdGF0aW9uID09IChEUk1f TU9ERV9SRUZMRUNUX1ggfCBEUk1fTU9ERV9ST1RBVEVfOTApKSkgewotCQlEUk1fREVCVUdfS01T KCJzcmMgd2lkdGggbXVzdCBiZSBtdWx0aXBsZSBvZiA0IGZvciByb3RhdGVkIHBsYW5hciBZVVZc biIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlu dCBza2xfcGxhbmVfbWF4X3NjYWxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwK LQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKLXsKLQkvKgotCSAq IFdlIGRvbid0IHlldCBrbm93IHRoZSBmaW5hbCBzb3VyY2Ugd2lkdGggbm9yCi0JICogd2hldGhl ciB3ZSBjYW4gdXNlIHRoZSBIUSBzY2FsZXIgbW9kZS4gQXNzdW1lCi0JICogdGhlIGJlc3QgY2Fz ZS4KLQkgKiBGSVhNRSBuZWVkIHRvIHByb3Blcmx5IGNoZWNrIHRoaXMgbGF0ZXIuCi0JICovCi0J aWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTAgfHwgSVNfR0VNSU5JTEFLRShkZXZfcHJpdikg fHwKLQkgICAgIWludGVsX2Zvcm1hdF9pbmZvX2lzX3l1dl9zZW1pcGxhbmFyKGZiLT5mb3JtYXQs IGZiLT5tb2RpZmllcikpCi0JCXJldHVybiAweDMwMDAwIC0gMTsKLQllbHNlCi0JCXJldHVybiAw eDIwMDAwIC0gMTsKLX0KLQotc3RhdGljIGludCBza2xfcGxhbmVfY2hlY2soc3RydWN0IGludGVs X2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCi0JCQkgICBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUg KnBsYW5lX3N0YXRlKQotewotCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0b19pbnRlbF9w bGFuZShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZSk7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOwotCWNvbnN0IHN0cnVjdCBkcm1f ZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwotCWludCBtaW5fc2NhbGUgPSBE Uk1fUExBTkVfSEVMUEVSX05PX1NDQUxJTkc7Ci0JaW50IG1heF9zY2FsZSA9IERSTV9QTEFORV9I RUxQRVJfTk9fU0NBTElORzsKLQlpbnQgcmV0OwotCi0JcmV0ID0gc2tsX3BsYW5lX2NoZWNrX2Zi KGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0J LyogdXNlIHNjYWxlciB3aGVuIGNvbG9ya2V5IGlzIG5vdCByZXF1aXJlZCAqLwotCWlmICghcGxh bmVfc3RhdGUtPmNrZXkuZmxhZ3MgJiYgaW50ZWxfZmJfc2NhbGFibGUoZmIpKSB7Ci0JCW1pbl9z Y2FsZSA9IDE7Ci0JCW1heF9zY2FsZSA9IHNrbF9wbGFuZV9tYXhfc2NhbGUoZGV2X3ByaXYsIGZi KTsKLQl9Ci0KLQlyZXQgPSBpbnRlbF9hdG9taWNfcGxhbmVfY2hlY2tfY2xpcHBpbmcocGxhbmVf c3RhdGUsIGNydGNfc3RhdGUsCi0JCQkJCQltaW5fc2NhbGUsIG1heF9zY2FsZSwgdHJ1ZSk7Ci0J aWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHNrbF9jaGVja19wbGFuZV9zdXJmYWNl KHBsYW5lX3N0YXRlKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JaWYgKCFwbGFuZV9z dGF0ZS0+dWFwaS52aXNpYmxlKQotCQlyZXR1cm4gMDsKLQotCXJldCA9IHNrbF9wbGFuZV9jaGVj a19kc3RfY29vcmRpbmF0ZXMoY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUpOwotCWlmIChyZXQpCi0J CXJldHVybiByZXQ7Ci0KLQlyZXQgPSBpbnRlbF9wbGFuZV9jaGVja19zcmNfY29vcmRpbmF0ZXMo cGxhbmVfc3RhdGUpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSBza2xfcGxh bmVfY2hlY2tfbnYxMl9yb3RhdGlvbihwbGFuZV9zdGF0ZSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJu IHJldDsKLQotCS8qIEhXIG9ubHkgaGFzIDggYml0cyBwaXhlbCBwcmVjaXNpb24sIGRpc2FibGUg cGxhbmUgaWYgaW52aXNpYmxlICovCi0JaWYgKCEocGxhbmVfc3RhdGUtPmh3LmFscGhhID4+IDgp KQotCQlwbGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxlID0gZmFsc2U7Ci0KLQlwbGFuZV9zdGF0ZS0+ Y3RsID0gc2tsX3BsYW5lX2N0bChjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSk7Ci0KLQlpZiAoSU5U RUxfR0VOKGRldl9wcml2KSA+PSAxMCB8fCBJU19HRU1JTklMQUtFKGRldl9wcml2KSkKLQkJcGxh bmVfc3RhdGUtPmNvbG9yX2N0bCA9IGdsa19wbGFuZV9jb2xvcl9jdGwoY3J0Y19zdGF0ZSwKLQkJ CQkJCQkgICAgIHBsYW5lX3N0YXRlKTsKLQotCWlmIChpbnRlbF9mb3JtYXRfaW5mb19pc195dXZf c2VtaXBsYW5hcihmYi0+Zm9ybWF0LCBmYi0+bW9kaWZpZXIpICYmCi0JICAgIGljbF9pc19oZHJf cGxhbmUoZGV2X3ByaXYsIHBsYW5lLT5pZCkpCi0JCS8qIEVuYWJsZSBhbmQgdXNlIE1QRUctMiBj aHJvbWEgc2l0aW5nICovCi0JCXBsYW5lX3N0YXRlLT5jdXNfY3RsID0gUExBTkVfQ1VTX0VOQUJM RSB8Ci0JCQlQTEFORV9DVVNfSFBIQVNFXzAgfAotCQkJUExBTkVfQ1VTX1ZQSEFTRV9TSUdOX05F R0FUSVZFIHwgUExBTkVfQ1VTX1ZQSEFTRV8wXzI1OwotCWVsc2UKLQkJcGxhbmVfc3RhdGUtPmN1 c19jdGwgPSAwOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBib29sIGhhc19kc3Rfa2V5X2lu X3ByaW1hcnlfcGxhbmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogewogCXJl dHVybiBJTlRFTF9HRU4oZGV2X3ByaXYpID49IDk7CkBAIC0yNjU2LDE4MCArMTg2Niw1MiBAQCBp bnQgaW50ZWxfc3ByaXRlX3NldF9jb2xvcmtleV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LCB2b2lkICpkYXRhLAogb3V0OgogCWRybV9tb2Rlc2V0X2Ryb3BfbG9ja3MoJmN0eCk7CiAJZHJt X21vZGVzZXRfYWNxdWlyZV9maW5pKCZjdHgpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBj b25zdCB1MzIgZzR4X3BsYW5lX2Zvcm1hdHNbXSA9IHsKLQlEUk1fRk9STUFUX1hSR0I4ODg4LAot CURSTV9GT1JNQVRfWVVZViwKLQlEUk1fRk9STUFUX1lWWVUsCi0JRFJNX0ZPUk1BVF9VWVZZLAot CURSTV9GT1JNQVRfVllVWSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1NjQgaTl4eF9wbGFuZV9mb3Jt YXRfbW9kaWZpZXJzW10gPSB7Ci0JSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQsCi0JRFJNX0ZPUk1B VF9NT0RfTElORUFSLAotCURSTV9GT1JNQVRfTU9EX0lOVkFMSUQKLX07Ci0KLXN0YXRpYyBjb25z dCB1MzIgc25iX3BsYW5lX2Zvcm1hdHNbXSA9IHsKLQlEUk1fRk9STUFUX1hSR0I4ODg4LAotCURS TV9GT1JNQVRfWEJHUjg4ODgsCi0JRFJNX0ZPUk1BVF9YUkdCMjEwMTAxMCwKLQlEUk1fRk9STUFU X1hCR1IyMTAxMDEwLAotCURSTV9GT1JNQVRfWFJHQjE2MTYxNjE2RiwKLQlEUk1fRk9STUFUX1hC R1IxNjE2MTYxNkYsCi0JRFJNX0ZPUk1BVF9ZVVlWLAotCURSTV9GT1JNQVRfWVZZVSwKLQlEUk1f Rk9STUFUX1VZVlksCi0JRFJNX0ZPUk1BVF9WWVVZLAotfTsKLQotc3RhdGljIGNvbnN0IHUzMiB2 bHZfcGxhbmVfZm9ybWF0c1tdID0gewotCURSTV9GT1JNQVRfQzgsCi0JRFJNX0ZPUk1BVF9SR0I1 NjUsCi0JRFJNX0ZPUk1BVF9YUkdCODg4OCwKLQlEUk1fRk9STUFUX1hCR1I4ODg4LAotCURSTV9G T1JNQVRfQVJHQjg4ODgsCi0JRFJNX0ZPUk1BVF9BQkdSODg4OCwKLQlEUk1fRk9STUFUX1hCR1Iy MTAxMDEwLAotCURSTV9GT1JNQVRfQUJHUjIxMDEwMTAsCi0JRFJNX0ZPUk1BVF9ZVVlWLAotCURS TV9GT1JNQVRfWVZZVSwKLQlEUk1fRk9STUFUX1VZVlksCi0JRFJNX0ZPUk1BVF9WWVVZLAotfTsK LQotc3RhdGljIGNvbnN0IHUzMiBjaHZfcGlwZV9iX3Nwcml0ZV9mb3JtYXRzW10gPSB7Ci0JRFJN X0ZPUk1BVF9DOCwKLQlEUk1fRk9STUFUX1JHQjU2NSwKLQlEUk1fRk9STUFUX1hSR0I4ODg4LAot CURSTV9GT1JNQVRfWEJHUjg4ODgsCi0JRFJNX0ZPUk1BVF9BUkdCODg4OCwKLQlEUk1fRk9STUFU X0FCR1I4ODg4LAotCURSTV9GT1JNQVRfWFJHQjIxMDEwMTAsCi0JRFJNX0ZPUk1BVF9YQkdSMjEw MTAxMCwKLQlEUk1fRk9STUFUX0FSR0IyMTAxMDEwLAotCURSTV9GT1JNQVRfQUJHUjIxMDEwMTAs Ci0JRFJNX0ZPUk1BVF9ZVVlWLAotCURSTV9GT1JNQVRfWVZZVSwKLQlEUk1fRk9STUFUX1VZVlks Ci0JRFJNX0ZPUk1BVF9WWVVZLAotfTsKLQotc3RhdGljIGNvbnN0IHUzMiBza2xfcGxhbmVfZm9y bWF0c1tdID0gewotCURSTV9GT1JNQVRfQzgsCi0JRFJNX0ZPUk1BVF9SR0I1NjUsCi0JRFJNX0ZP Uk1BVF9YUkdCODg4OCwKLQlEUk1fRk9STUFUX1hCR1I4ODg4LAotCURSTV9GT1JNQVRfQVJHQjg4 ODgsCi0JRFJNX0ZPUk1BVF9BQkdSODg4OCwKLQlEUk1fRk9STUFUX1hSR0IyMTAxMDEwLAotCURS TV9GT1JNQVRfWEJHUjIxMDEwMTAsCi0JRFJNX0ZPUk1BVF9YUkdCMTYxNjE2MTZGLAotCURSTV9G T1JNQVRfWEJHUjE2MTYxNjE2RiwKLQlEUk1fRk9STUFUX1lVWVYsCi0JRFJNX0ZPUk1BVF9ZVllV LAotCURSTV9GT1JNQVRfVVlWWSwKLQlEUk1fRk9STUFUX1ZZVVksCi0JRFJNX0ZPUk1BVF9YWVVW ODg4OCwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgc2tsX3BsYW5hcl9mb3JtYXRzW10gPSB7Ci0J RFJNX0ZPUk1BVF9DOCwKLQlEUk1fRk9STUFUX1JHQjU2NSwKLQlEUk1fRk9STUFUX1hSR0I4ODg4 LAotCURSTV9GT1JNQVRfWEJHUjg4ODgsCi0JRFJNX0ZPUk1BVF9BUkdCODg4OCwKLQlEUk1fRk9S TUFUX0FCR1I4ODg4LAotCURSTV9GT1JNQVRfWFJHQjIxMDEwMTAsCi0JRFJNX0ZPUk1BVF9YQkdS MjEwMTAxMCwKLQlEUk1fRk9STUFUX1hSR0IxNjE2MTYxNkYsCi0JRFJNX0ZPUk1BVF9YQkdSMTYx NjE2MTZGLAotCURSTV9GT1JNQVRfWVVZViwKLQlEUk1fRk9STUFUX1lWWVUsCi0JRFJNX0ZPUk1B VF9VWVZZLAotCURSTV9GT1JNQVRfVllVWSwKLQlEUk1fRk9STUFUX05WMTIsCi0JRFJNX0ZPUk1B VF9YWVVWODg4OCwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgZ2xrX3BsYW5hcl9mb3JtYXRzW10g PSB7Ci0JRFJNX0ZPUk1BVF9DOCwKLQlEUk1fRk9STUFUX1JHQjU2NSwKLQlEUk1fRk9STUFUX1hS R0I4ODg4LAotCURSTV9GT1JNQVRfWEJHUjg4ODgsCi0JRFJNX0ZPUk1BVF9BUkdCODg4OCwKLQlE Uk1fRk9STUFUX0FCR1I4ODg4LAotCURSTV9GT1JNQVRfWFJHQjIxMDEwMTAsCi0JRFJNX0ZPUk1B VF9YQkdSMjEwMTAxMCwKLQlEUk1fRk9STUFUX1hSR0IxNjE2MTYxNkYsCi0JRFJNX0ZPUk1BVF9Y QkdSMTYxNjE2MTZGLAorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCB1MzIgZzR4X3Bs YW5lX2Zvcm1hdHNbXSA9IHsKKwlEUk1fRk9STUFUX1hSR0I4ODg4LAogCURSTV9GT1JNQVRfWVVZ ViwKIAlEUk1fRk9STUFUX1lWWVUsCiAJRFJNX0ZPUk1BVF9VWVZZLAogCURSTV9GT1JNQVRfVllV WSwKLQlEUk1fRk9STUFUX05WMTIsCi0JRFJNX0ZPUk1BVF9YWVVWODg4OCwKLQlEUk1fRk9STUFU X1AwMTAsCi0JRFJNX0ZPUk1BVF9QMDEyLAotCURSTV9GT1JNQVRfUDAxNiwKIH07CiAKLXN0YXRp YyBjb25zdCB1MzIgaWNsX3Nkcl95X3BsYW5lX2Zvcm1hdHNbXSA9IHsKLQlEUk1fRk9STUFUX0M4 LAotCURSTV9GT1JNQVRfUkdCNTY1LAorc3RhdGljIGNvbnN0IHU2NCBpOXh4X3BsYW5lX2Zvcm1h dF9tb2RpZmllcnNbXSA9IHsKKwlJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCwKKwlEUk1fRk9STUFU X01PRF9MSU5FQVIsCisJRFJNX0ZPUk1BVF9NT0RfSU5WQUxJRAorfTsKKworc3RhdGljIGNvbnN0 IHUzMiBzbmJfcGxhbmVfZm9ybWF0c1tdID0gewogCURSTV9GT1JNQVRfWFJHQjg4ODgsCiAJRFJN X0ZPUk1BVF9YQkdSODg4OCwKLQlEUk1fRk9STUFUX0FSR0I4ODg4LAotCURSTV9GT1JNQVRfQUJH Ujg4ODgsCiAJRFJNX0ZPUk1BVF9YUkdCMjEwMTAxMCwKIAlEUk1fRk9STUFUX1hCR1IyMTAxMDEw LAotCURSTV9GT1JNQVRfQVJHQjIxMDEwMTAsCi0JRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMCwKKwlE Uk1fRk9STUFUX1hSR0IxNjE2MTYxNkYsCisJRFJNX0ZPUk1BVF9YQkdSMTYxNjE2MTZGLAogCURS TV9GT1JNQVRfWVVZViwKIAlEUk1fRk9STUFUX1lWWVUsCiAJRFJNX0ZPUk1BVF9VWVZZLAogCURS TV9GT1JNQVRfVllVWSwKLQlEUk1fRk9STUFUX1kyMTAsCi0JRFJNX0ZPUk1BVF9ZMjEyLAotCURS TV9GT1JNQVRfWTIxNiwKLQlEUk1fRk9STUFUX1hZVVY4ODg4LAotCURSTV9GT1JNQVRfWFZZVTIx MDEwMTAsCi0JRFJNX0ZPUk1BVF9YVllVMTJfMTYxNjE2MTYsCi0JRFJNX0ZPUk1BVF9YVllVMTYx NjE2MTYsCiB9OwogCi1zdGF0aWMgY29uc3QgdTMyIGljbF9zZHJfdXZfcGxhbmVfZm9ybWF0c1td ID0geworc3RhdGljIGNvbnN0IHUzMiB2bHZfcGxhbmVfZm9ybWF0c1tdID0gewogCURSTV9GT1JN QVRfQzgsCiAJRFJNX0ZPUk1BVF9SR0I1NjUsCiAJRFJNX0ZPUk1BVF9YUkdCODg4OCwKIAlEUk1f Rk9STUFUX1hCR1I4ODg4LAogCURSTV9GT1JNQVRfQVJHQjg4ODgsCiAJRFJNX0ZPUk1BVF9BQkdS ODg4OCwKLQlEUk1fRk9STUFUX1hSR0IyMTAxMDEwLAogCURSTV9GT1JNQVRfWEJHUjIxMDEwMTAs Ci0JRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMCwKIAlEUk1fRk9STUFUX0FCR1IyMTAxMDEwLAogCURS TV9GT1JNQVRfWVVZViwKIAlEUk1fRk9STUFUX1lWWVUsCiAJRFJNX0ZPUk1BVF9VWVZZLAogCURS TV9GT1JNQVRfVllVWSwKLQlEUk1fRk9STUFUX05WMTIsCi0JRFJNX0ZPUk1BVF9QMDEwLAotCURS TV9GT1JNQVRfUDAxMiwKLQlEUk1fRk9STUFUX1AwMTYsCi0JRFJNX0ZPUk1BVF9ZMjEwLAotCURS TV9GT1JNQVRfWTIxMiwKLQlEUk1fRk9STUFUX1kyMTYsCi0JRFJNX0ZPUk1BVF9YWVVWODg4OCwK LQlEUk1fRk9STUFUX1hWWVUyMTAxMDEwLAotCURSTV9GT1JNQVRfWFZZVTEyXzE2MTYxNjE2LAot CURSTV9GT1JNQVRfWFZZVTE2MTYxNjE2LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBpY2xfaGRy X3BsYW5lX2Zvcm1hdHNbXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgY2h2X3BpcGVfYl9zcHJpdGVf Zm9ybWF0c1tdID0gewogCURSTV9GT1JNQVRfQzgsCiAJRFJNX0ZPUk1BVF9SR0I1NjUsCiAJRFJN X0ZPUk1BVF9YUkdCODg4OCwKQEAgLTI4NDAsNjAgKzE5MjIsMTAgQEAgc3RhdGljIGNvbnN0IHUz MiBpY2xfaGRyX3BsYW5lX2Zvcm1hdHNbXSA9IHsKIAlEUk1fRk9STUFUX1hCR1IyMTAxMDEwLAog CURSTV9GT1JNQVRfQVJHQjIxMDEwMTAsCiAJRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMCwKLQlEUk1f Rk9STUFUX1hSR0IxNjE2MTYxNkYsCi0JRFJNX0ZPUk1BVF9YQkdSMTYxNjE2MTZGLAotCURSTV9G T1JNQVRfQVJHQjE2MTYxNjE2RiwKLQlEUk1fRk9STUFUX0FCR1IxNjE2MTYxNkYsCiAJRFJNX0ZP Uk1BVF9ZVVlWLAogCURSTV9GT1JNQVRfWVZZVSwKIAlEUk1fRk9STUFUX1VZVlksCiAJRFJNX0ZP Uk1BVF9WWVVZLAotCURSTV9GT1JNQVRfTlYxMiwKLQlEUk1fRk9STUFUX1AwMTAsCi0JRFJNX0ZP Uk1BVF9QMDEyLAotCURSTV9GT1JNQVRfUDAxNiwKLQlEUk1fRk9STUFUX1kyMTAsCi0JRFJNX0ZP Uk1BVF9ZMjEyLAotCURSTV9GT1JNQVRfWTIxNiwKLQlEUk1fRk9STUFUX1hZVVY4ODg4LAotCURS TV9GT1JNQVRfWFZZVTIxMDEwMTAsCi0JRFJNX0ZPUk1BVF9YVllVMTJfMTYxNjE2MTYsCi0JRFJN X0ZPUk1BVF9YVllVMTYxNjE2MTYsCi19OwotCi1zdGF0aWMgY29uc3QgdTY0IHNrbF9wbGFuZV9m b3JtYXRfbW9kaWZpZXJzX25vY2NzW10gPSB7Ci0JSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVELAot CUk5MTVfRk9STUFUX01PRF9ZX1RJTEVELAotCUk5MTVfRk9STUFUX01PRF9YX1RJTEVELAotCURS TV9GT1JNQVRfTU9EX0xJTkVBUiwKLQlEUk1fRk9STUFUX01PRF9JTlZBTElECi19OwotCi1zdGF0 aWMgY29uc3QgdTY0IHNrbF9wbGFuZV9mb3JtYXRfbW9kaWZpZXJzX2Njc1tdID0gewotCUk5MTVf Rk9STUFUX01PRF9ZZl9USUxFRF9DQ1MsCi0JSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NTLAot CUk5MTVfRk9STUFUX01PRF9ZZl9USUxFRCwKLQlJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCwKLQlJ OTE1X0ZPUk1BVF9NT0RfWF9USUxFRCwKLQlEUk1fRk9STUFUX01PRF9MSU5FQVIsCi0JRFJNX0ZP Uk1BVF9NT0RfSU5WQUxJRAotfTsKLQotc3RhdGljIGNvbnN0IHU2NCBnZW4xMl9wbGFuZV9mb3Jt YXRfbW9kaWZpZXJzX21jX2Njc1tdID0gewotCUk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEy X01DX0NDUywKLQlJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9SQ19DQ1MsCi0JSTkxNV9G T1JNQVRfTU9EX1lfVElMRUQsCi0JSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQsCi0JRFJNX0ZPUk1B VF9NT0RfTElORUFSLAotCURSTV9GT1JNQVRfTU9EX0lOVkFMSUQKLX07Ci0KLXN0YXRpYyBjb25z dCB1NjQgZ2VuMTJfcGxhbmVfZm9ybWF0X21vZGlmaWVyc19yY19jY3NbXSA9IHsKLQlJOTE1X0ZP Uk1BVF9NT0RfWV9USUxFRF9HRU4xMl9SQ19DQ1MsCi0JSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQs Ci0JSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQsCi0JRFJNX0ZPUk1BVF9NT0RfTElORUFSLAotCURS TV9GT1JNQVRfTU9EX0lOVkFMSUQKIH07CiAKIHN0YXRpYyBib29sIGc0eF9zcHJpdGVfZm9ybWF0 X21vZF9zdXBwb3J0ZWQoc3RydWN0IGRybV9wbGFuZSAqX3BsYW5lLApAQCAtMjk4OCwxNDggKzIw MjAsNiBAQCBzdGF0aWMgYm9vbCB2bHZfc3ByaXRlX2Zvcm1hdF9tb2Rfc3VwcG9ydGVkKHN0cnVj dCBkcm1fcGxhbmUgKl9wbGFuZSwKIAl9CiB9CiAKLXN0YXRpYyBib29sIHNrbF9wbGFuZV9mb3Jt YXRfbW9kX3N1cHBvcnRlZChzdHJ1Y3QgZHJtX3BsYW5lICpfcGxhbmUsCi0JCQkJCSAgIHUzMiBm b3JtYXQsIHU2NCBtb2RpZmllcikKLXsKLQlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lID0gdG9f aW50ZWxfcGxhbmUoX3BsYW5lKTsKLQotCXN3aXRjaCAobW9kaWZpZXIpIHsKLQljYXNlIERSTV9G T1JNQVRfTU9EX0xJTkVBUjoKLQljYXNlIEk5MTVfRk9STUFUX01PRF9YX1RJTEVEOgotCWNhc2Ug STkxNV9GT1JNQVRfTU9EX1lfVElMRUQ6Ci0JY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQ6 Ci0JCWJyZWFrOwotCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NTOgotCWNhc2UgSTkx NV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUzoKLQkJaWYgKCFwbGFuZS0+aGFzX2NjcykKLQkJCXJl dHVybiBmYWxzZTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQot CXN3aXRjaCAoZm9ybWF0KSB7Ci0JY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4OgotCWNhc2UgRFJN X0ZPUk1BVF9YQkdSODg4ODoKLQljYXNlIERSTV9GT1JNQVRfQVJHQjg4ODg6Ci0JY2FzZSBEUk1f Rk9STUFUX0FCR1I4ODg4OgotCQlpZiAoaXNfY2NzX21vZGlmaWVyKG1vZGlmaWVyKSkKLQkJCXJl dHVybiB0cnVlOwotCQlmYWxsdGhyb3VnaDsKLQljYXNlIERSTV9GT1JNQVRfUkdCNTY1OgotCWNh c2UgRFJNX0ZPUk1BVF9YUkdCMjEwMTAxMDoKLQljYXNlIERSTV9GT1JNQVRfWEJHUjIxMDEwMTA6 Ci0JY2FzZSBEUk1fRk9STUFUX0FSR0IyMTAxMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMjEw MTAxMDoKLQljYXNlIERSTV9GT1JNQVRfWVVZVjoKLQljYXNlIERSTV9GT1JNQVRfWVZZVToKLQlj YXNlIERSTV9GT1JNQVRfVVlWWToKLQljYXNlIERSTV9GT1JNQVRfVllVWToKLQljYXNlIERSTV9G T1JNQVRfTlYxMjoKLQljYXNlIERSTV9GT1JNQVRfWFlVVjg4ODg6Ci0JY2FzZSBEUk1fRk9STUFU X1AwMTA6Ci0JY2FzZSBEUk1fRk9STUFUX1AwMTI6Ci0JY2FzZSBEUk1fRk9STUFUX1AwMTY6Ci0J Y2FzZSBEUk1fRk9STUFUX1hWWVUyMTAxMDEwOgotCQlpZiAobW9kaWZpZXIgPT0gSTkxNV9GT1JN QVRfTU9EX1lmX1RJTEVEKQotCQkJcmV0dXJuIHRydWU7Ci0JCWZhbGx0aHJvdWdoOwotCWNhc2Ug RFJNX0ZPUk1BVF9DODoKLQljYXNlIERSTV9GT1JNQVRfWEJHUjE2MTYxNjE2RjoKLQljYXNlIERS TV9GT1JNQVRfQUJHUjE2MTYxNjE2RjoKLQljYXNlIERSTV9GT1JNQVRfWFJHQjE2MTYxNjE2RjoK LQljYXNlIERSTV9GT1JNQVRfQVJHQjE2MTYxNjE2RjoKLQljYXNlIERSTV9GT1JNQVRfWTIxMDoK LQljYXNlIERSTV9GT1JNQVRfWTIxMjoKLQljYXNlIERSTV9GT1JNQVRfWTIxNjoKLQljYXNlIERS TV9GT1JNQVRfWFZZVTEyXzE2MTYxNjE2OgotCWNhc2UgRFJNX0ZPUk1BVF9YVllVMTYxNjE2MTY6 Ci0JCWlmIChtb2RpZmllciA9PSBEUk1fRk9STUFUX01PRF9MSU5FQVIgfHwKLQkJICAgIG1vZGlm aWVyID09IEk5MTVfRk9STUFUX01PRF9YX1RJTEVEIHx8Ci0JCSAgICBtb2RpZmllciA9PSBJOTE1 X0ZPUk1BVF9NT0RfWV9USUxFRCkKLQkJCXJldHVybiB0cnVlOwotCQlmYWxsdGhyb3VnaDsKLQlk ZWZhdWx0OgotCQlyZXR1cm4gZmFsc2U7Ci0JfQotfQotCi1zdGF0aWMgYm9vbCBnZW4xMl9wbGFu ZV9zdXBwb3J0c19tY19jY3Moc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJ CQllbnVtIHBsYW5lX2lkIHBsYW5lX2lkKQotewotCS8qIFdhXzE0MDEwNDc3MDA4OnRnbFthMC4u YzBdLHJrbFthbGxdLGRnMVthbGxdICovCi0JaWYgKElTX0RHMShkZXZfcHJpdikgfHwgSVNfUk9D S0VUTEFLRShkZXZfcHJpdikgfHwKLQkgICAgSVNfVEdMX0RJU1BfUkVWSUQoZGV2X3ByaXYsIFRH TF9SRVZJRF9BMCwgVEdMX1JFVklEX0MwKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JcmV0dXJuIHBs YW5lX2lkIDwgUExBTkVfU1BSSVRFNDsKLX0KLQotc3RhdGljIGJvb2wgZ2VuMTJfcGxhbmVfZm9y bWF0X21vZF9zdXBwb3J0ZWQoc3RydWN0IGRybV9wbGFuZSAqX3BsYW5lLAotCQkJCQkgICAgIHUz MiBmb3JtYXQsIHU2NCBtb2RpZmllcikKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSB0b19pOTE1KF9wbGFuZS0+ZGV2KTsKLQlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5l ID0gdG9faW50ZWxfcGxhbmUoX3BsYW5lKTsKLQotCXN3aXRjaCAobW9kaWZpZXIpIHsKLQljYXNl IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX01DX0NDUzoKLQkJaWYgKCFnZW4xMl9wbGFu ZV9zdXBwb3J0c19tY19jY3MoZGV2X3ByaXYsIHBsYW5lLT5pZCkpCi0JCQlyZXR1cm4gZmFsc2U7 Ci0JCWZhbGx0aHJvdWdoOwotCWNhc2UgRFJNX0ZPUk1BVF9NT0RfTElORUFSOgotCWNhc2UgSTkx NV9GT1JNQVRfTU9EX1hfVElMRUQ6Ci0JY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRDoKLQlj YXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX1JDX0NDUzoKLQkJYnJlYWs7Ci0JZGVm YXVsdDoKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXN3aXRjaCAoZm9ybWF0KSB7Ci0JY2FzZSBE Uk1fRk9STUFUX1hSR0I4ODg4OgotCWNhc2UgRFJNX0ZPUk1BVF9YQkdSODg4ODoKLQljYXNlIERS TV9GT1JNQVRfQVJHQjg4ODg6Ci0JY2FzZSBEUk1fRk9STUFUX0FCR1I4ODg4OgotCQlpZiAoaXNf Y2NzX21vZGlmaWVyKG1vZGlmaWVyKSkKLQkJCXJldHVybiB0cnVlOwotCQlmYWxsdGhyb3VnaDsK LQljYXNlIERSTV9GT1JNQVRfWVVZVjoKLQljYXNlIERSTV9GT1JNQVRfWVZZVToKLQljYXNlIERS TV9GT1JNQVRfVVlWWToKLQljYXNlIERSTV9GT1JNQVRfVllVWToKLQljYXNlIERSTV9GT1JNQVRf TlYxMjoKLQljYXNlIERSTV9GT1JNQVRfWFlVVjg4ODg6Ci0JY2FzZSBEUk1fRk9STUFUX1AwMTA6 Ci0JY2FzZSBEUk1fRk9STUFUX1AwMTI6Ci0JY2FzZSBEUk1fRk9STUFUX1AwMTY6Ci0JCWlmICht b2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9NQ19DQ1MpCi0JCQlyZXR1 cm4gdHJ1ZTsKLQkJZmFsbHRocm91Z2g7Ci0JY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKLQljYXNl IERSTV9GT1JNQVRfWFJHQjIxMDEwMTA6Ci0JY2FzZSBEUk1fRk9STUFUX1hCR1IyMTAxMDEwOgot CWNhc2UgRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMDoKLQljYXNlIERSTV9GT1JNQVRfQUJHUjIxMDEw MTA6Ci0JY2FzZSBEUk1fRk9STUFUX1hWWVUyMTAxMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9DODoK LQljYXNlIERSTV9GT1JNQVRfWEJHUjE2MTYxNjE2RjoKLQljYXNlIERSTV9GT1JNQVRfQUJHUjE2 MTYxNjE2RjoKLQljYXNlIERSTV9GT1JNQVRfWFJHQjE2MTYxNjE2RjoKLQljYXNlIERSTV9GT1JN QVRfQVJHQjE2MTYxNjE2RjoKLQljYXNlIERSTV9GT1JNQVRfWTIxMDoKLQljYXNlIERSTV9GT1JN QVRfWTIxMjoKLQljYXNlIERSTV9GT1JNQVRfWTIxNjoKLQljYXNlIERSTV9GT1JNQVRfWFZZVTEy XzE2MTYxNjE2OgotCWNhc2UgRFJNX0ZPUk1BVF9YVllVMTYxNjE2MTY6Ci0JCWlmIChtb2RpZmll ciA9PSBEUk1fRk9STUFUX01PRF9MSU5FQVIgfHwKLQkJICAgIG1vZGlmaWVyID09IEk5MTVfRk9S TUFUX01PRF9YX1RJTEVEIHx8Ci0JCSAgICBtb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWV9U SUxFRCkKLQkJCXJldHVybiB0cnVlOwotCQlmYWxsdGhyb3VnaDsKLQlkZWZhdWx0OgotCQlyZXR1 cm4gZmFsc2U7Ci0JfQotfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9mdW5jcyBn NHhfc3ByaXRlX2Z1bmNzID0gewogCS51cGRhdGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl91 cGRhdGVfcGxhbmUsCkBAIC0zMTU4LDI1NyArMjA0OCw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg ZHJtX3BsYW5lX2Z1bmNzIHZsdl9zcHJpdGVfZnVuY3MgPSB7CiAJLmZvcm1hdF9tb2Rfc3VwcG9y dGVkID0gdmx2X3Nwcml0ZV9mb3JtYXRfbW9kX3N1cHBvcnRlZCwKIH07CiAKLXN0YXRpYyBjb25z dCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIHNrbF9wbGFuZV9mdW5jcyA9IHsKLQkudXBkYXRlX3Bs YW5lID0gZHJtX2F0b21pY19oZWxwZXJfdXBkYXRlX3BsYW5lLAotCS5kaXNhYmxlX3BsYW5lID0g ZHJtX2F0b21pY19oZWxwZXJfZGlzYWJsZV9wbGFuZSwKLQkuZGVzdHJveSA9IGludGVsX3BsYW5l X2Rlc3Ryb3ksCi0JLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBpbnRlbF9wbGFuZV9kdXBsaWNh dGVfc3RhdGUsCi0JLmF0b21pY19kZXN0cm95X3N0YXRlID0gaW50ZWxfcGxhbmVfZGVzdHJveV9z dGF0ZSwKLQkuZm9ybWF0X21vZF9zdXBwb3J0ZWQgPSBza2xfcGxhbmVfZm9ybWF0X21vZF9zdXBw b3J0ZWQsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9mdW5jcyBnZW4xMl9w bGFuZV9mdW5jcyA9IHsKLQkudXBkYXRlX3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfdXBkYXRl X3BsYW5lLAotCS5kaXNhYmxlX3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfZGlzYWJsZV9wbGFu ZSwKLQkuZGVzdHJveSA9IGludGVsX3BsYW5lX2Rlc3Ryb3ksCi0JLmF0b21pY19kdXBsaWNhdGVf c3RhdGUgPSBpbnRlbF9wbGFuZV9kdXBsaWNhdGVfc3RhdGUsCi0JLmF0b21pY19kZXN0cm95X3N0 YXRlID0gaW50ZWxfcGxhbmVfZGVzdHJveV9zdGF0ZSwKLQkuZm9ybWF0X21vZF9zdXBwb3J0ZWQg PSBnZW4xMl9wbGFuZV9mb3JtYXRfbW9kX3N1cHBvcnRlZCwKLX07Ci0KLXN0YXRpYyBib29sIHNr bF9wbGFuZV9oYXNfZmJjKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCSAg ICAgIGVudW0gcGlwZSBwaXBlLCBlbnVtIHBsYW5lX2lkIHBsYW5lX2lkKQotewotCWlmICghSEFT X0ZCQyhkZXZfcHJpdikpCi0JCXJldHVybiBmYWxzZTsKLQotCXJldHVybiBwaXBlID09IFBJUEVf QSAmJiBwbGFuZV9pZCA9PSBQTEFORV9QUklNQVJZOwotfQotCi1zdGF0aWMgYm9vbCBza2xfcGxh bmVfaGFzX3BsYW5hcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkJIGVu dW0gcGlwZSBwaXBlLCBlbnVtIHBsYW5lX2lkIHBsYW5lX2lkKQotewotCS8qIERpc3BsYXkgV0Eg IzA4NzA6IHNrbCwgYnh0ICovCi0JaWYgKElTX1NLWUxBS0UoZGV2X3ByaXYpIHx8IElTX0JST1hU T04oZGV2X3ByaXYpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlpZiAoSVNfR0VOKGRldl9wcml2LCA5 KSAmJiAhSVNfR0VNSU5JTEFLRShkZXZfcHJpdikgJiYgcGlwZSA9PSBQSVBFX0MpCi0JCXJldHVy biBmYWxzZTsKLQotCWlmIChwbGFuZV9pZCAhPSBQTEFORV9QUklNQVJZICYmIHBsYW5lX2lkICE9 IFBMQU5FX1NQUklURTApCi0JCXJldHVybiBmYWxzZTsKLQotCXJldHVybiB0cnVlOwotfQotCi1z dGF0aWMgY29uc3QgdTMyICpza2xfZ2V0X3BsYW5lX2Zvcm1hdHMoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LAotCQkJCQllbnVtIHBpcGUgcGlwZSwgZW51bSBwbGFuZV9pZCBwbGFu ZV9pZCwKLQkJCQkJaW50ICpudW1fZm9ybWF0cykKLXsKLQlpZiAoc2tsX3BsYW5lX2hhc19wbGFu YXIoZGV2X3ByaXYsIHBpcGUsIHBsYW5lX2lkKSkgewotCQkqbnVtX2Zvcm1hdHMgPSBBUlJBWV9T SVpFKHNrbF9wbGFuYXJfZm9ybWF0cyk7Ci0JCXJldHVybiBza2xfcGxhbmFyX2Zvcm1hdHM7Ci0J fSBlbHNlIHsKLQkJKm51bV9mb3JtYXRzID0gQVJSQVlfU0laRShza2xfcGxhbmVfZm9ybWF0cyk7 Ci0JCXJldHVybiBza2xfcGxhbmVfZm9ybWF0czsKLQl9Ci19Ci0KLXN0YXRpYyBjb25zdCB1MzIg Kmdsa19nZXRfcGxhbmVfZm9ybWF0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs Ci0JCQkJCWVudW0gcGlwZSBwaXBlLCBlbnVtIHBsYW5lX2lkIHBsYW5lX2lkLAotCQkJCQlpbnQg Km51bV9mb3JtYXRzKQotewotCWlmIChza2xfcGxhbmVfaGFzX3BsYW5hcihkZXZfcHJpdiwgcGlw ZSwgcGxhbmVfaWQpKSB7Ci0JCSpudW1fZm9ybWF0cyA9IEFSUkFZX1NJWkUoZ2xrX3BsYW5hcl9m b3JtYXRzKTsKLQkJcmV0dXJuIGdsa19wbGFuYXJfZm9ybWF0czsKLQl9IGVsc2UgewotCQkqbnVt X2Zvcm1hdHMgPSBBUlJBWV9TSVpFKHNrbF9wbGFuZV9mb3JtYXRzKTsKLQkJcmV0dXJuIHNrbF9w bGFuZV9mb3JtYXRzOwotCX0KLX0KLQotc3RhdGljIGNvbnN0IHUzMiAqaWNsX2dldF9wbGFuZV9m b3JtYXRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCQkJZW51bSBwaXBl IHBpcGUsIGVudW0gcGxhbmVfaWQgcGxhbmVfaWQsCi0JCQkJCWludCAqbnVtX2Zvcm1hdHMpCi17 Ci0JaWYgKGljbF9pc19oZHJfcGxhbmUoZGV2X3ByaXYsIHBsYW5lX2lkKSkgewotCQkqbnVtX2Zv cm1hdHMgPSBBUlJBWV9TSVpFKGljbF9oZHJfcGxhbmVfZm9ybWF0cyk7Ci0JCXJldHVybiBpY2xf aGRyX3BsYW5lX2Zvcm1hdHM7Ci0JfSBlbHNlIGlmIChpY2xfaXNfbnYxMl95X3BsYW5lKGRldl9w cml2LCBwbGFuZV9pZCkpIHsKLQkJKm51bV9mb3JtYXRzID0gQVJSQVlfU0laRShpY2xfc2RyX3lf cGxhbmVfZm9ybWF0cyk7Ci0JCXJldHVybiBpY2xfc2RyX3lfcGxhbmVfZm9ybWF0czsKLQl9IGVs c2UgewotCQkqbnVtX2Zvcm1hdHMgPSBBUlJBWV9TSVpFKGljbF9zZHJfdXZfcGxhbmVfZm9ybWF0 cyk7Ci0JCXJldHVybiBpY2xfc2RyX3V2X3BsYW5lX2Zvcm1hdHM7Ci0JfQotfQotCi1zdGF0aWMg Y29uc3QgdTY0ICpnZW4xMl9nZXRfcGxhbmVfbW9kaWZpZXJzKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwKLQkJCQkJICAgIGVudW0gcGxhbmVfaWQgcGxhbmVfaWQpCi17Ci0JaWYg KGdlbjEyX3BsYW5lX3N1cHBvcnRzX21jX2NjcyhkZXZfcHJpdiwgcGxhbmVfaWQpKQotCQlyZXR1 cm4gZ2VuMTJfcGxhbmVfZm9ybWF0X21vZGlmaWVyc19tY19jY3M7Ci0JZWxzZQotCQlyZXR1cm4g Z2VuMTJfcGxhbmVfZm9ybWF0X21vZGlmaWVyc19yY19jY3M7Ci19Ci0KLXN0YXRpYyBib29sIHNr bF9wbGFuZV9oYXNfY2NzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCSAg ICAgIGVudW0gcGlwZSBwaXBlLCBlbnVtIHBsYW5lX2lkIHBsYW5lX2lkKQotewotCWlmIChwbGFu ZV9pZCA9PSBQTEFORV9DVVJTT1IpCi0JCXJldHVybiBmYWxzZTsKLQotCWlmIChJTlRFTF9HRU4o ZGV2X3ByaXYpID49IDEwKQotCQlyZXR1cm4gdHJ1ZTsKLQotCWlmIChJU19HRU1JTklMQUtFKGRl dl9wcml2KSkKLQkJcmV0dXJuIHBpcGUgIT0gUElQRV9DOwotCi0JcmV0dXJuIHBpcGUgIT0gUElQ RV9DICYmCi0JCShwbGFuZV9pZCA9PSBQTEFORV9QUklNQVJZIHx8Ci0JCSBwbGFuZV9pZCA9PSBQ TEFORV9TUFJJVEUwKTsKLX0KLQotc3RydWN0IGludGVsX3BsYW5lICoKLXNrbF91bml2ZXJzYWxf cGxhbmVfY3JlYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCSAgIGVu dW0gcGlwZSBwaXBlLCBlbnVtIHBsYW5lX2lkIHBsYW5lX2lkKQotewotCWNvbnN0IHN0cnVjdCBk cm1fcGxhbmVfZnVuY3MgKnBsYW5lX2Z1bmNzOwotCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmU7 Ci0JZW51bSBkcm1fcGxhbmVfdHlwZSBwbGFuZV90eXBlOwotCXVuc2lnbmVkIGludCBzdXBwb3J0 ZWRfcm90YXRpb25zOwotCXVuc2lnbmVkIGludCBzdXBwb3J0ZWRfY3NjOwotCWNvbnN0IHU2NCAq bW9kaWZpZXJzOwotCWNvbnN0IHUzMiAqZm9ybWF0czsKLQlpbnQgbnVtX2Zvcm1hdHM7Ci0JaW50 IHJldDsKLQotCXBsYW5lID0gaW50ZWxfcGxhbmVfYWxsb2MoKTsKLQlpZiAoSVNfRVJSKHBsYW5l KSkKLQkJcmV0dXJuIHBsYW5lOwotCi0JcGxhbmUtPnBpcGUgPSBwaXBlOwotCXBsYW5lLT5pZCA9 IHBsYW5lX2lkOwotCXBsYW5lLT5mcm9udGJ1ZmZlcl9iaXQgPSBJTlRFTF9GUk9OVEJVRkZFUihw aXBlLCBwbGFuZV9pZCk7Ci0KLQlwbGFuZS0+aGFzX2ZiYyA9IHNrbF9wbGFuZV9oYXNfZmJjKGRl dl9wcml2LCBwaXBlLCBwbGFuZV9pZCk7Ci0JaWYgKHBsYW5lLT5oYXNfZmJjKSB7Ci0JCXN0cnVj dCBpbnRlbF9mYmMgKmZiYyA9ICZkZXZfcHJpdi0+ZmJjOwotCi0JCWZiYy0+cG9zc2libGVfZnJh bWVidWZmZXJfYml0cyB8PSBwbGFuZS0+ZnJvbnRidWZmZXJfYml0OwotCX0KLQotCWlmIChJTlRF TF9HRU4oZGV2X3ByaXYpID49IDExKSB7Ci0JCXBsYW5lLT5taW5fd2lkdGggPSBpY2xfcGxhbmVf bWluX3dpZHRoOwotCQlwbGFuZS0+bWF4X3dpZHRoID0gaWNsX3BsYW5lX21heF93aWR0aDsKLQkJ cGxhbmUtPm1heF9oZWlnaHQgPSBpY2xfcGxhbmVfbWF4X2hlaWdodDsKLQl9IGVsc2UgaWYgKElO VEVMX0dFTihkZXZfcHJpdikgPj0gMTAgfHwgSVNfR0VNSU5JTEFLRShkZXZfcHJpdikpIHsKLQkJ cGxhbmUtPm1heF93aWR0aCA9IGdsa19wbGFuZV9tYXhfd2lkdGg7Ci0JCXBsYW5lLT5tYXhfaGVp Z2h0ID0gc2tsX3BsYW5lX21heF9oZWlnaHQ7Ci0JfSBlbHNlIHsKLQkJcGxhbmUtPm1heF93aWR0 aCA9IHNrbF9wbGFuZV9tYXhfd2lkdGg7Ci0JCXBsYW5lLT5tYXhfaGVpZ2h0ID0gc2tsX3BsYW5l X21heF9oZWlnaHQ7Ci0JfQotCi0JcGxhbmUtPm1heF9zdHJpZGUgPSBza2xfcGxhbmVfbWF4X3N0 cmlkZTsKLQlwbGFuZS0+dXBkYXRlX3BsYW5lID0gc2tsX3VwZGF0ZV9wbGFuZTsKLQlwbGFuZS0+ ZGlzYWJsZV9wbGFuZSA9IHNrbF9kaXNhYmxlX3BsYW5lOwotCXBsYW5lLT5nZXRfaHdfc3RhdGUg PSBza2xfcGxhbmVfZ2V0X2h3X3N0YXRlOwotCXBsYW5lLT5jaGVja19wbGFuZSA9IHNrbF9wbGFu ZV9jaGVjazsKLQlwbGFuZS0+bWluX2NkY2xrID0gc2tsX3BsYW5lX21pbl9jZGNsazsKLQotCWlm IChwbGFuZV9pZCA9PSBQTEFORV9QUklNQVJZKSB7Ci0JCXBsYW5lLT5uZWVkX2FzeW5jX2ZsaXBf ZGlzYWJsZV93YSA9IElTX0dFTl9SQU5HRShkZXZfcHJpdiwgOSwgMTApOwotCQlwbGFuZS0+YXN5 bmNfZmxpcCA9IHNrbF9wbGFuZV9hc3luY19mbGlwOwotCQlwbGFuZS0+ZW5hYmxlX2ZsaXBfZG9u ZSA9IHNrbF9wbGFuZV9lbmFibGVfZmxpcF9kb25lOwotCQlwbGFuZS0+ZGlzYWJsZV9mbGlwX2Rv bmUgPSBza2xfcGxhbmVfZGlzYWJsZV9mbGlwX2RvbmU7Ci0JfQotCi0JaWYgKElOVEVMX0dFTihk ZXZfcHJpdikgPj0gMTEpCi0JCWZvcm1hdHMgPSBpY2xfZ2V0X3BsYW5lX2Zvcm1hdHMoZGV2X3By aXYsIHBpcGUsCi0JCQkJCQlwbGFuZV9pZCwgJm51bV9mb3JtYXRzKTsKLQllbHNlIGlmIChJTlRF TF9HRU4oZGV2X3ByaXYpID49IDEwIHx8IElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpKQotCQlmb3Jt YXRzID0gZ2xrX2dldF9wbGFuZV9mb3JtYXRzKGRldl9wcml2LCBwaXBlLAotCQkJCQkJcGxhbmVf aWQsICZudW1fZm9ybWF0cyk7Ci0JZWxzZQotCQlmb3JtYXRzID0gc2tsX2dldF9wbGFuZV9mb3Jt YXRzKGRldl9wcml2LCBwaXBlLAotCQkJCQkJcGxhbmVfaWQsICZudW1fZm9ybWF0cyk7Ci0KLQlw bGFuZS0+aGFzX2NjcyA9IHNrbF9wbGFuZV9oYXNfY2NzKGRldl9wcml2LCBwaXBlLCBwbGFuZV9p ZCk7Ci0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTIpIHsKLQkJbW9kaWZpZXJzID0gZ2Vu MTJfZ2V0X3BsYW5lX21vZGlmaWVycyhkZXZfcHJpdiwgcGxhbmVfaWQpOwotCQlwbGFuZV9mdW5j cyA9ICZnZW4xMl9wbGFuZV9mdW5jczsKLQl9IGVsc2UgewotCQlpZiAocGxhbmUtPmhhc19jY3Mp Ci0JCQltb2RpZmllcnMgPSBza2xfcGxhbmVfZm9ybWF0X21vZGlmaWVyc19jY3M7Ci0JCWVsc2UK LQkJCW1vZGlmaWVycyA9IHNrbF9wbGFuZV9mb3JtYXRfbW9kaWZpZXJzX25vY2NzOwotCQlwbGFu ZV9mdW5jcyA9ICZza2xfcGxhbmVfZnVuY3M7Ci0JfQotCi0JaWYgKHBsYW5lX2lkID09IFBMQU5F X1BSSU1BUlkpCi0JCXBsYW5lX3R5cGUgPSBEUk1fUExBTkVfVFlQRV9QUklNQVJZOwotCWVsc2UK LQkJcGxhbmVfdHlwZSA9IERSTV9QTEFORV9UWVBFX09WRVJMQVk7Ci0KLQlyZXQgPSBkcm1fdW5p dmVyc2FsX3BsYW5lX2luaXQoJmRldl9wcml2LT5kcm0sICZwbGFuZS0+YmFzZSwKLQkJCQkgICAg ICAgMCwgcGxhbmVfZnVuY3MsCi0JCQkJICAgICAgIGZvcm1hdHMsIG51bV9mb3JtYXRzLCBtb2Rp ZmllcnMsCi0JCQkJICAgICAgIHBsYW5lX3R5cGUsCi0JCQkJICAgICAgICJwbGFuZSAlZCVjIiwg cGxhbmVfaWQgKyAxLAotCQkJCSAgICAgICBwaXBlX25hbWUocGlwZSkpOwotCWlmIChyZXQpCi0J CWdvdG8gZmFpbDsKLQotCXN1cHBvcnRlZF9yb3RhdGlvbnMgPQotCQlEUk1fTU9ERV9ST1RBVEVf MCB8IERSTV9NT0RFX1JPVEFURV85MCB8Ci0JCURSTV9NT0RFX1JPVEFURV8xODAgfCBEUk1fTU9E RV9ST1RBVEVfMjcwOwotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTApCi0JCXN1cHBv cnRlZF9yb3RhdGlvbnMgfD0gRFJNX01PREVfUkVGTEVDVF9YOwotCi0JZHJtX3BsYW5lX2NyZWF0 ZV9yb3RhdGlvbl9wcm9wZXJ0eSgmcGxhbmUtPmJhc2UsCi0JCQkJCSAgIERSTV9NT0RFX1JPVEFU RV8wLAotCQkJCQkgICBzdXBwb3J0ZWRfcm90YXRpb25zKTsKLQotCXN1cHBvcnRlZF9jc2MgPSBC SVQoRFJNX0NPTE9SX1lDQkNSX0JUNjAxKSB8IEJJVChEUk1fQ09MT1JfWUNCQ1JfQlQ3MDkpOwot Ci0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTAgfHwgSVNfR0VNSU5JTEFLRShkZXZfcHJp dikpCi0JCXN1cHBvcnRlZF9jc2MgfD0gQklUKERSTV9DT0xPUl9ZQ0JDUl9CVDIwMjApOwotCi0J ZHJtX3BsYW5lX2NyZWF0ZV9jb2xvcl9wcm9wZXJ0aWVzKCZwbGFuZS0+YmFzZSwKLQkJCQkJICBz dXBwb3J0ZWRfY3NjLAotCQkJCQkgIEJJVChEUk1fQ09MT1JfWUNCQ1JfTElNSVRFRF9SQU5HRSkg fAotCQkJCQkgIEJJVChEUk1fQ09MT1JfWUNCQ1JfRlVMTF9SQU5HRSksCi0JCQkJCSAgRFJNX0NP TE9SX1lDQkNSX0JUNzA5LAotCQkJCQkgIERSTV9DT0xPUl9ZQ0JDUl9MSU1JVEVEX1JBTkdFKTsK LQotCWRybV9wbGFuZV9jcmVhdGVfYWxwaGFfcHJvcGVydHkoJnBsYW5lLT5iYXNlKTsKLQlkcm1f cGxhbmVfY3JlYXRlX2JsZW5kX21vZGVfcHJvcGVydHkoJnBsYW5lLT5iYXNlLAotCQkJCQkgICAg IEJJVChEUk1fTU9ERV9CTEVORF9QSVhFTF9OT05FKSB8Ci0JCQkJCSAgICAgQklUKERSTV9NT0RF X0JMRU5EX1BSRU1VTFRJKSB8Ci0JCQkJCSAgICAgQklUKERSTV9NT0RFX0JMRU5EX0NPVkVSQUdF KSk7Ci0KLQlkcm1fcGxhbmVfY3JlYXRlX3pwb3NfaW1tdXRhYmxlX3Byb3BlcnR5KCZwbGFuZS0+ YmFzZSwgcGxhbmVfaWQpOwotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTIpCi0JCWRy bV9wbGFuZV9lbmFibGVfZmJfZGFtYWdlX2NsaXBzKCZwbGFuZS0+YmFzZSk7Ci0KLQlpZiAoSU5U RUxfR0VOKGRldl9wcml2KSA+PSAxMCkKLQkJZHJtX3BsYW5lX2NyZWF0ZV9zY2FsaW5nX2ZpbHRl cl9wcm9wZXJ0eSgmcGxhbmUtPmJhc2UsCi0JCQkJCQlCSVQoRFJNX1NDQUxJTkdfRklMVEVSX0RF RkFVTFQpIHwKLQkJCQkJCUJJVChEUk1fU0NBTElOR19GSUxURVJfTkVBUkVTVF9ORUlHSEJPUikp OwotCi0JZHJtX3BsYW5lX2hlbHBlcl9hZGQoJnBsYW5lLT5iYXNlLCAmaW50ZWxfcGxhbmVfaGVs cGVyX2Z1bmNzKTsKLQotCXJldHVybiBwbGFuZTsKLQotZmFpbDoKLQlpbnRlbF9wbGFuZV9mcmVl KHBsYW5lKTsKLQotCXJldHVybiBFUlJfUFRSKHJldCk7Ci19Ci0KIHN0cnVjdCBpbnRlbF9wbGFu ZSAqCiBpbnRlbF9zcHJpdGVfcGxhbmVfY3JlYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwKIAkJCSAgZW51bSBwaXBlIHBpcGUsIGludCBzcHJpdGUpCkBAIC0zNDIxLDEwICsy MDYwLDYgQEAgaW50ZWxfc3ByaXRlX3BsYW5lX2NyZWF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYsCiAJaW50IG51bV9mb3JtYXRzOwogCWludCByZXQsIHpwb3M7CiAKLQlpZiAo SU5URUxfR0VOKGRldl9wcml2KSA+PSA5KQotCQlyZXR1cm4gc2tsX3VuaXZlcnNhbF9wbGFuZV9j cmVhdGUoZGV2X3ByaXYsIHBpcGUsCi0JCQkJCQkgIFBMQU5FX1NQUklURTAgKyBzcHJpdGUpOwot CiAJcGxhbmUgPSBpbnRlbF9wbGFuZV9hbGxvYygpOwogCWlmIChJU19FUlIocGxhbmUpKQogCQly ZXR1cm4gcGxhbmU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2lu dGVsX3Nwcml0ZS5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9zcHJpdGUu aAppbmRleCA3NjEyNmRkOGQ1ODQuLjQxODg5N2Y5NTNmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9zcHJpdGUuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9kaXNwbGF5L2ludGVsX3Nwcml0ZS5oCkBAIC0zOCw5ICszOCw2IEBAIHZvaWQgaW50ZWxf cGlwZV91cGRhdGVfZW5kKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpuZXdfY3J0Y19zdGF0ZSk7 CiBpbnQgaW50ZWxfcGxhbmVfY2hlY2tfc3RyaWRlKGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9z dGF0ZSAqcGxhbmVfc3RhdGUpOwogaW50IGludGVsX3BsYW5lX2NoZWNrX3NyY19jb29yZGluYXRl cyhzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKTsKIGludCBjaHZfcGxhbmVf Y2hlY2tfcm90YXRpb24oY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0 ZSk7Ci1zdHJ1Y3QgaW50ZWxfcGxhbmUgKgotc2tsX3VuaXZlcnNhbF9wbGFuZV9jcmVhdGUoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJICAgZW51bSBwaXBlIHBpcGUsIGVu dW0gcGxhbmVfaWQgcGxhbmVfaWQpOwogCiBzdGF0aWMgaW5saW5lIHU4IGljbF9oZHJfcGxhbmVf bWFzayh2b2lkKQogewpAQCAtNTksNCArNTYsNyBAQCBpbnQgaHN3X3BsYW5lX21pbl9jZGNsayhj b25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKIGludCB2bHZfcGxhbmVf bWluX2NkY2xrKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAogCQkJ Y29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSk7CiAKK3ZvaWQgc2ts X3Byb2dyYW1fc2NhbGVyKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCisJCQljb25zdCBzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJCWNvbnN0IHN0cnVjdCBpbnRlbF9w bGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpOwogI2VuZGlmIC8qIF9fSU5URUxfU1BSSVRFX0hfXyAq LwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9za2xfdW5pdmVyc2Fs X3BsYW5lLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L3NrbF91bml2ZXJzYWxfcGxh bmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjk4ZDMxYmRjOTNi YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvc2tsX3Vu aXZlcnNhbF9wbGFuZS5jCkBAIC0wLDAgKzEsMjI5MiBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IE1JVAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDIwIEludGVsIENvcnBvcmF0aW9uCisg Ki8KKworI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9k cm1fZGFtYWdlX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZm91cmNjLmg+CisjaW5jbHVk ZSA8ZHJtL2RybV9wbGFuZV9oZWxwZXIuaD4KKworI2luY2x1ZGUgImk5MTVfZHJ2LmgiCisjaW5j bHVkZSAiaW50ZWxfYXRvbWljX3BsYW5lLmgiCisjaW5jbHVkZSAiaW50ZWxfZGlzcGxheV90eXBl cy5oIgorI2luY2x1ZGUgImludGVsX3BtLmgiCisjaW5jbHVkZSAiaW50ZWxfcHNyLmgiCisjaW5j bHVkZSAiaW50ZWxfc3ByaXRlLmgiCisjaW5jbHVkZSAic2tsX3VuaXZlcnNhbF9wbGFuZS5oIgor CitzdGF0aWMgY29uc3QgdTMyIHNrbF9wbGFuZV9mb3JtYXRzW10gPSB7CisJRFJNX0ZPUk1BVF9D OCwKKwlEUk1fRk9STUFUX1JHQjU2NSwKKwlEUk1fRk9STUFUX1hSR0I4ODg4LAorCURSTV9GT1JN QVRfWEJHUjg4ODgsCisJRFJNX0ZPUk1BVF9BUkdCODg4OCwKKwlEUk1fRk9STUFUX0FCR1I4ODg4 LAorCURSTV9GT1JNQVRfWFJHQjIxMDEwMTAsCisJRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMCwKKwlE Uk1fRk9STUFUX1hSR0IxNjE2MTYxNkYsCisJRFJNX0ZPUk1BVF9YQkdSMTYxNjE2MTZGLAorCURS TV9GT1JNQVRfWVVZViwKKwlEUk1fRk9STUFUX1lWWVUsCisJRFJNX0ZPUk1BVF9VWVZZLAorCURS TV9GT1JNQVRfVllVWSwKKwlEUk1fRk9STUFUX1hZVVY4ODg4LAorfTsKKworc3RhdGljIGNvbnN0 IHUzMiBza2xfcGxhbmFyX2Zvcm1hdHNbXSA9IHsKKwlEUk1fRk9STUFUX0M4LAorCURSTV9GT1JN QVRfUkdCNTY1LAorCURSTV9GT1JNQVRfWFJHQjg4ODgsCisJRFJNX0ZPUk1BVF9YQkdSODg4OCwK KwlEUk1fRk9STUFUX0FSR0I4ODg4LAorCURSTV9GT1JNQVRfQUJHUjg4ODgsCisJRFJNX0ZPUk1B VF9YUkdCMjEwMTAxMCwKKwlEUk1fRk9STUFUX1hCR1IyMTAxMDEwLAorCURSTV9GT1JNQVRfWFJH QjE2MTYxNjE2RiwKKwlEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkYsCisJRFJNX0ZPUk1BVF9ZVVlW LAorCURSTV9GT1JNQVRfWVZZVSwKKwlEUk1fRk9STUFUX1VZVlksCisJRFJNX0ZPUk1BVF9WWVVZ LAorCURSTV9GT1JNQVRfTlYxMiwKKwlEUk1fRk9STUFUX1hZVVY4ODg4LAorfTsKKworc3RhdGlj IGNvbnN0IHUzMiBnbGtfcGxhbmFyX2Zvcm1hdHNbXSA9IHsKKwlEUk1fRk9STUFUX0M4LAorCURS TV9GT1JNQVRfUkdCNTY1LAorCURSTV9GT1JNQVRfWFJHQjg4ODgsCisJRFJNX0ZPUk1BVF9YQkdS ODg4OCwKKwlEUk1fRk9STUFUX0FSR0I4ODg4LAorCURSTV9GT1JNQVRfQUJHUjg4ODgsCisJRFJN X0ZPUk1BVF9YUkdCMjEwMTAxMCwKKwlEUk1fRk9STUFUX1hCR1IyMTAxMDEwLAorCURSTV9GT1JN QVRfWFJHQjE2MTYxNjE2RiwKKwlEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkYsCisJRFJNX0ZPUk1B VF9ZVVlWLAorCURSTV9GT1JNQVRfWVZZVSwKKwlEUk1fRk9STUFUX1VZVlksCisJRFJNX0ZPUk1B VF9WWVVZLAorCURSTV9GT1JNQVRfTlYxMiwKKwlEUk1fRk9STUFUX1hZVVY4ODg4LAorCURSTV9G T1JNQVRfUDAxMCwKKwlEUk1fRk9STUFUX1AwMTIsCisJRFJNX0ZPUk1BVF9QMDE2LAorfTsKKwor c3RhdGljIGNvbnN0IHUzMiBpY2xfc2RyX3lfcGxhbmVfZm9ybWF0c1tdID0geworCURSTV9GT1JN QVRfQzgsCisJRFJNX0ZPUk1BVF9SR0I1NjUsCisJRFJNX0ZPUk1BVF9YUkdCODg4OCwKKwlEUk1f Rk9STUFUX1hCR1I4ODg4LAorCURSTV9GT1JNQVRfQVJHQjg4ODgsCisJRFJNX0ZPUk1BVF9BQkdS ODg4OCwKKwlEUk1fRk9STUFUX1hSR0IyMTAxMDEwLAorCURSTV9GT1JNQVRfWEJHUjIxMDEwMTAs CisJRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMCwKKwlEUk1fRk9STUFUX0FCR1IyMTAxMDEwLAorCURS TV9GT1JNQVRfWVVZViwKKwlEUk1fRk9STUFUX1lWWVUsCisJRFJNX0ZPUk1BVF9VWVZZLAorCURS TV9GT1JNQVRfVllVWSwKKwlEUk1fRk9STUFUX1kyMTAsCisJRFJNX0ZPUk1BVF9ZMjEyLAorCURS TV9GT1JNQVRfWTIxNiwKKwlEUk1fRk9STUFUX1hZVVY4ODg4LAorCURSTV9GT1JNQVRfWFZZVTIx MDEwMTAsCisJRFJNX0ZPUk1BVF9YVllVMTJfMTYxNjE2MTYsCisJRFJNX0ZPUk1BVF9YVllVMTYx NjE2MTYsCit9OworCitzdGF0aWMgY29uc3QgdTMyIGljbF9zZHJfdXZfcGxhbmVfZm9ybWF0c1td ID0geworCURSTV9GT1JNQVRfQzgsCisJRFJNX0ZPUk1BVF9SR0I1NjUsCisJRFJNX0ZPUk1BVF9Y UkdCODg4OCwKKwlEUk1fRk9STUFUX1hCR1I4ODg4LAorCURSTV9GT1JNQVRfQVJHQjg4ODgsCisJ RFJNX0ZPUk1BVF9BQkdSODg4OCwKKwlEUk1fRk9STUFUX1hSR0IyMTAxMDEwLAorCURSTV9GT1JN QVRfWEJHUjIxMDEwMTAsCisJRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMCwKKwlEUk1fRk9STUFUX0FC R1IyMTAxMDEwLAorCURSTV9GT1JNQVRfWVVZViwKKwlEUk1fRk9STUFUX1lWWVUsCisJRFJNX0ZP Uk1BVF9VWVZZLAorCURSTV9GT1JNQVRfVllVWSwKKwlEUk1fRk9STUFUX05WMTIsCisJRFJNX0ZP Uk1BVF9QMDEwLAorCURSTV9GT1JNQVRfUDAxMiwKKwlEUk1fRk9STUFUX1AwMTYsCisJRFJNX0ZP Uk1BVF9ZMjEwLAorCURSTV9GT1JNQVRfWTIxMiwKKwlEUk1fRk9STUFUX1kyMTYsCisJRFJNX0ZP Uk1BVF9YWVVWODg4OCwKKwlEUk1fRk9STUFUX1hWWVUyMTAxMDEwLAorCURSTV9GT1JNQVRfWFZZ VTEyXzE2MTYxNjE2LAorCURSTV9GT1JNQVRfWFZZVTE2MTYxNjE2LAorfTsKKworc3RhdGljIGNv bnN0IHUzMiBpY2xfaGRyX3BsYW5lX2Zvcm1hdHNbXSA9IHsKKwlEUk1fRk9STUFUX0M4LAorCURS TV9GT1JNQVRfUkdCNTY1LAorCURSTV9GT1JNQVRfWFJHQjg4ODgsCisJRFJNX0ZPUk1BVF9YQkdS ODg4OCwKKwlEUk1fRk9STUFUX0FSR0I4ODg4LAorCURSTV9GT1JNQVRfQUJHUjg4ODgsCisJRFJN X0ZPUk1BVF9YUkdCMjEwMTAxMCwKKwlEUk1fRk9STUFUX1hCR1IyMTAxMDEwLAorCURSTV9GT1JN QVRfQVJHQjIxMDEwMTAsCisJRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMCwKKwlEUk1fRk9STUFUX1hS R0IxNjE2MTYxNkYsCisJRFJNX0ZPUk1BVF9YQkdSMTYxNjE2MTZGLAorCURSTV9GT1JNQVRfQVJH QjE2MTYxNjE2RiwKKwlEUk1fRk9STUFUX0FCR1IxNjE2MTYxNkYsCisJRFJNX0ZPUk1BVF9ZVVlW LAorCURSTV9GT1JNQVRfWVZZVSwKKwlEUk1fRk9STUFUX1VZVlksCisJRFJNX0ZPUk1BVF9WWVVZ LAorCURSTV9GT1JNQVRfTlYxMiwKKwlEUk1fRk9STUFUX1AwMTAsCisJRFJNX0ZPUk1BVF9QMDEy LAorCURSTV9GT1JNQVRfUDAxNiwKKwlEUk1fRk9STUFUX1kyMTAsCisJRFJNX0ZPUk1BVF9ZMjEy LAorCURSTV9GT1JNQVRfWTIxNiwKKwlEUk1fRk9STUFUX1hZVVY4ODg4LAorCURSTV9GT1JNQVRf WFZZVTIxMDEwMTAsCisJRFJNX0ZPUk1BVF9YVllVMTJfMTYxNjE2MTYsCisJRFJNX0ZPUk1BVF9Y VllVMTYxNjE2MTYsCit9OworCitzdGF0aWMgY29uc3QgdTY0IHNrbF9wbGFuZV9mb3JtYXRfbW9k aWZpZXJzX25vY2NzW10gPSB7CisJSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVELAorCUk5MTVfRk9S TUFUX01PRF9ZX1RJTEVELAorCUk5MTVfRk9STUFUX01PRF9YX1RJTEVELAorCURSTV9GT1JNQVRf TU9EX0xJTkVBUiwKKwlEUk1fRk9STUFUX01PRF9JTlZBTElECit9OworCitzdGF0aWMgY29uc3Qg dTY0IHNrbF9wbGFuZV9mb3JtYXRfbW9kaWZpZXJzX2Njc1tdID0geworCUk5MTVfRk9STUFUX01P RF9ZZl9USUxFRF9DQ1MsCisJSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NTLAorCUk5MTVfRk9S TUFUX01PRF9ZZl9USUxFRCwKKwlJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCwKKwlJOTE1X0ZPUk1B VF9NT0RfWF9USUxFRCwKKwlEUk1fRk9STUFUX01PRF9MSU5FQVIsCisJRFJNX0ZPUk1BVF9NT0Rf SU5WQUxJRAorfTsKKworc3RhdGljIGNvbnN0IHU2NCBnZW4xMl9wbGFuZV9mb3JtYXRfbW9kaWZp ZXJzX21jX2Njc1tdID0geworCUk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX01DX0NDUywK KwlJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9SQ19DQ1MsCisJSTkxNV9GT1JNQVRfTU9E X1lfVElMRUQsCisJSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQsCisJRFJNX0ZPUk1BVF9NT0RfTElO RUFSLAorCURSTV9GT1JNQVRfTU9EX0lOVkFMSUQKK307CisKK3N0YXRpYyBjb25zdCB1NjQgZ2Vu MTJfcGxhbmVfZm9ybWF0X21vZGlmaWVyc19yY19jY3NbXSA9IHsKKwlJOTE1X0ZPUk1BVF9NT0Rf WV9USUxFRF9HRU4xMl9SQ19DQ1MsCisJSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQsCisJSTkxNV9G T1JNQVRfTU9EX1hfVElMRUQsCisJRFJNX0ZPUk1BVF9NT0RfTElORUFSLAorCURSTV9GT1JNQVRf TU9EX0lOVkFMSUQKK307CisKK2ludCBza2xfZm9ybWF0X3RvX2ZvdXJjYyhpbnQgZm9ybWF0LCBi b29sIHJnYl9vcmRlciwgYm9vbCBhbHBoYSkKK3sKKwlzd2l0Y2ggKGZvcm1hdCkgeworCWNhc2Ug UExBTkVfQ1RMX0ZPUk1BVF9SR0JfNTY1OgorCQlyZXR1cm4gRFJNX0ZPUk1BVF9SR0I1NjU7CisJ Y2FzZSBQTEFORV9DVExfRk9STUFUX05WMTI6CisJCXJldHVybiBEUk1fRk9STUFUX05WMTI7CisJ Y2FzZSBQTEFORV9DVExfRk9STUFUX1hZVVY6CisJCXJldHVybiBEUk1fRk9STUFUX1hZVVY4ODg4 OworCWNhc2UgUExBTkVfQ1RMX0ZPUk1BVF9QMDEwOgorCQlyZXR1cm4gRFJNX0ZPUk1BVF9QMDEw OworCWNhc2UgUExBTkVfQ1RMX0ZPUk1BVF9QMDEyOgorCQlyZXR1cm4gRFJNX0ZPUk1BVF9QMDEy OworCWNhc2UgUExBTkVfQ1RMX0ZPUk1BVF9QMDE2OgorCQlyZXR1cm4gRFJNX0ZPUk1BVF9QMDE2 OworCWNhc2UgUExBTkVfQ1RMX0ZPUk1BVF9ZMjEwOgorCQlyZXR1cm4gRFJNX0ZPUk1BVF9ZMjEw OworCWNhc2UgUExBTkVfQ1RMX0ZPUk1BVF9ZMjEyOgorCQlyZXR1cm4gRFJNX0ZPUk1BVF9ZMjEy OworCWNhc2UgUExBTkVfQ1RMX0ZPUk1BVF9ZMjE2OgorCQlyZXR1cm4gRFJNX0ZPUk1BVF9ZMjE2 OworCWNhc2UgUExBTkVfQ1RMX0ZPUk1BVF9ZNDEwOgorCQlyZXR1cm4gRFJNX0ZPUk1BVF9YVllV MjEwMTAxMDsKKwljYXNlIFBMQU5FX0NUTF9GT1JNQVRfWTQxMjoKKwkJcmV0dXJuIERSTV9GT1JN QVRfWFZZVTEyXzE2MTYxNjE2OworCWNhc2UgUExBTkVfQ1RMX0ZPUk1BVF9ZNDE2OgorCQlyZXR1 cm4gRFJNX0ZPUk1BVF9YVllVMTYxNjE2MTY7CisJZGVmYXVsdDoKKwljYXNlIFBMQU5FX0NUTF9G T1JNQVRfWFJHQl84ODg4OgorCQlpZiAocmdiX29yZGVyKSB7CisJCQlpZiAoYWxwaGEpCisJCQkJ cmV0dXJuIERSTV9GT1JNQVRfQUJHUjg4ODg7CisJCQllbHNlCisJCQkJcmV0dXJuIERSTV9GT1JN QVRfWEJHUjg4ODg7CisJCX0gZWxzZSB7CisJCQlpZiAoYWxwaGEpCisJCQkJcmV0dXJuIERSTV9G T1JNQVRfQVJHQjg4ODg7CisJCQllbHNlCisJCQkJcmV0dXJuIERSTV9GT1JNQVRfWFJHQjg4ODg7 CisJCX0KKwljYXNlIFBMQU5FX0NUTF9GT1JNQVRfWFJHQl8yMTAxMDEwOgorCQlpZiAocmdiX29y ZGVyKSB7CisJCQlpZiAoYWxwaGEpCisJCQkJcmV0dXJuIERSTV9GT1JNQVRfQUJHUjIxMDEwMTA7 CisJCQllbHNlCisJCQkJcmV0dXJuIERSTV9GT1JNQVRfWEJHUjIxMDEwMTA7CisJCX0gZWxzZSB7 CisJCQlpZiAoYWxwaGEpCisJCQkJcmV0dXJuIERSTV9GT1JNQVRfQVJHQjIxMDEwMTA7CisJCQll bHNlCisJCQkJcmV0dXJuIERSTV9GT1JNQVRfWFJHQjIxMDEwMTA7CisJCX0KKwljYXNlIFBMQU5F X0NUTF9GT1JNQVRfWFJHQl8xNjE2MTYxNkY6CisJCWlmIChyZ2Jfb3JkZXIpIHsKKwkJCWlmIChh bHBoYSkKKwkJCQlyZXR1cm4gRFJNX0ZPUk1BVF9BQkdSMTYxNjE2MTZGOworCQkJZWxzZQorCQkJ CXJldHVybiBEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkY7CisJCX0gZWxzZSB7CisJCQlpZiAoYWxw aGEpCisJCQkJcmV0dXJuIERSTV9GT1JNQVRfQVJHQjE2MTYxNjE2RjsKKwkJCWVsc2UKKwkJCQly ZXR1cm4gRFJNX0ZPUk1BVF9YUkdCMTYxNjE2MTZGOworCQl9CisJfQorfQorCitzdGF0aWMgdTgg aWNsX252MTJfeV9wbGFuZV9tYXNrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQorewor CWlmIChJU19ST0NLRVRMQUtFKGk5MTUpKQorCQlyZXR1cm4gQklUKFBMQU5FX1NQUklURTIpIHwg QklUKFBMQU5FX1NQUklURTMpOworCWVsc2UKKwkJcmV0dXJuIEJJVChQTEFORV9TUFJJVEU0KSB8 IEJJVChQTEFORV9TUFJJVEU1KTsKK30KKworYm9vbCBpY2xfaXNfbnYxMl95X3BsYW5lKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCSBlbnVtIHBsYW5lX2lkIHBsYW5lX2lk KQoreworCXJldHVybiBJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExICYmCisJCWljbF9udjEyX3lf cGxhbmVfbWFzayhkZXZfcHJpdikgJiBCSVQocGxhbmVfaWQpOworfQorCitib29sIGljbF9pc19o ZHJfcGxhbmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBlbnVtIHBsYW5lX2lk IHBsYW5lX2lkKQoreworCXJldHVybiBJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExICYmCisJCWlj bF9oZHJfcGxhbmVfbWFzaygpICYgQklUKHBsYW5lX2lkKTsKK30KKworc3RhdGljIHZvaWQKK3Nr bF9wbGFuZV9yYXRpbyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwK KwkJY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSwKKwkJdW5zaWdu ZWQgaW50ICpudW0sIHVuc2lnbmVkIGludCAqZGVuKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRldik7CisJ Y29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7CisK KwlpZiAoZmItPmZvcm1hdC0+Y3BwWzBdID09IDgpIHsKKwkJaWYgKElOVEVMX0dFTihkZXZfcHJp dikgPj0gMTAgfHwgSVNfR0VNSU5JTEFLRShkZXZfcHJpdikpIHsKKwkJCSpudW0gPSAxMDsKKwkJ CSpkZW4gPSA4OworCQl9IGVsc2UgeworCQkJKm51bSA9IDk7CisJCQkqZGVuID0gODsKKwkJfQor CX0gZWxzZSB7CisJCSpudW0gPSAxOworCQkqZGVuID0gMTsKKwl9Cit9CisKK3N0YXRpYyBpbnQg c2tsX3BsYW5lX21pbl9jZGNsayhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19z dGF0ZSwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0 YXRlKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxh bmVfc3RhdGUtPnVhcGkucGxhbmUtPmRldik7CisJdW5zaWduZWQgaW50IG51bSwgZGVuOworCXVu c2lnbmVkIGludCBwaXhlbF9yYXRlID0gaW50ZWxfcGxhbmVfcGl4ZWxfcmF0ZShjcnRjX3N0YXRl LCBwbGFuZV9zdGF0ZSk7CisKKwlza2xfcGxhbmVfcmF0aW8oY3J0Y19zdGF0ZSwgcGxhbmVfc3Rh dGUsICZudW0sICZkZW4pOworCisJLyogdHdvIHBpeGVscyBwZXIgY2xvY2sgb24gZ2xrKyAqLwor CWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwIHx8IElTX0dFTUlOSUxBS0UoZGV2X3ByaXYp KQorCQlkZW4gKj0gMjsKKworCXJldHVybiBESVZfUk9VTkRfVVAocGl4ZWxfcmF0ZSAqIG51bSwg ZGVuKTsKK30KKworc3RhdGljIGludCBza2xfcGxhbmVfbWF4X3dpZHRoKGNvbnN0IHN0cnVjdCBk cm1fZnJhbWVidWZmZXIgKmZiLAorCQkJICAgICAgIGludCBjb2xvcl9wbGFuZSwKKwkJCSAgICAg ICB1bnNpZ25lZCBpbnQgcm90YXRpb24pCit7CisJaW50IGNwcCA9IGZiLT5mb3JtYXQtPmNwcFtj b2xvcl9wbGFuZV07CisKKwlzd2l0Y2ggKGZiLT5tb2RpZmllcikgeworCWNhc2UgRFJNX0ZPUk1B VF9NT0RfTElORUFSOgorCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ6CisJCS8qCisJCSAq IFZhbGlkYXRlZCBsaW1pdCBpcyA0aywgYnV0IGhhcyA1ayBzaG91bGQKKwkJICogd29yayBhcGFy dCBmcm9tIHRoZSBmb2xsb3dpbmcgZmVhdHVyZXM6CisJCSAqIC0gWXRpbGUgKGFscmVhZHkgbGlt aXRlZCB0byA0aykKKwkJICogLSBGUDE2IChhbHJlYWR5IGxpbWl0ZWQgdG8gNGspCisJCSAqIC0g cmVuZGVyIGNvbXByZXNzaW9uIChhbHJlYWR5IGxpbWl0ZWQgdG8gNGspCisJCSAqIC0gS1ZNUiBz cHJpdGUgYW5kIGN1cnNvciAoZG9uJ3QgY2FyZSkKKwkJICogLSBob3Jpem9udGFsIHBhbm5pbmcg KFRPRE8gdmVyaWZ5IHRoaXMpCisJCSAqIC0gcGlwZSBhbmQgcGxhbmUgc2NhbGluZyAoVE9ETyB2 ZXJpZnkgdGhpcykKKwkJICovCisJCWlmIChjcHAgPT0gOCkKKwkJCXJldHVybiA0MDk2OworCQll bHNlCisJCQlyZXR1cm4gNTEyMDsKKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUzoK KwljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1M6CisJY2FzZSBJOTE1X0ZPUk1BVF9N T0RfWV9USUxFRF9HRU4xMl9NQ19DQ1M6CisJCS8qIEZJWE1FIEFVWCBwbGFuZT8gKi8KKwljYXNl IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEOgorCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVE OgorCQlpZiAoY3BwID09IDgpCisJCQlyZXR1cm4gMjA0ODsKKwkJZWxzZQorCQkJcmV0dXJuIDQw OTY7CisJZGVmYXVsdDoKKwkJTUlTU0lOR19DQVNFKGZiLT5tb2RpZmllcik7CisJCXJldHVybiAy MDQ4OworCX0KK30KKworc3RhdGljIGludCBnbGtfcGxhbmVfbWF4X3dpZHRoKGNvbnN0IHN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKmZiLAorCQkJICAgICAgIGludCBjb2xvcl9wbGFuZSwKKwkJCSAg ICAgICB1bnNpZ25lZCBpbnQgcm90YXRpb24pCit7CisJaW50IGNwcCA9IGZiLT5mb3JtYXQtPmNw cFtjb2xvcl9wbGFuZV07CisKKwlzd2l0Y2ggKGZiLT5tb2RpZmllcikgeworCWNhc2UgRFJNX0ZP Uk1BVF9NT0RfTElORUFSOgorCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ6CisJCWlmIChj cHAgPT0gOCkKKwkJCXJldHVybiA0MDk2OworCQllbHNlCisJCQlyZXR1cm4gNTEyMDsKKwljYXNl IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUzoKKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9U SUxFRF9DQ1M6CisJCS8qIEZJWE1FIEFVWCBwbGFuZT8gKi8KKwljYXNlIEk5MTVfRk9STUFUX01P RF9ZX1RJTEVEOgorCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEOgorCQlpZiAoY3BwID09 IDgpCisJCQlyZXR1cm4gMjA0ODsKKwkJZWxzZQorCQkJcmV0dXJuIDUxMjA7CisJZGVmYXVsdDoK KwkJTUlTU0lOR19DQVNFKGZiLT5tb2RpZmllcik7CisJCXJldHVybiAyMDQ4OworCX0KK30KKwor c3RhdGljIGludCBpY2xfcGxhbmVfbWluX3dpZHRoKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiLAorCQkJICAgICAgIGludCBjb2xvcl9wbGFuZSwKKwkJCSAgICAgICB1bnNpZ25lZCBp bnQgcm90YXRpb24pCit7CisJLyogV2FfMTQwMTEyNjQ2NTcsIFdhXzE0MDExMDUwNTYzOiBnZW4x MSsgKi8KKwlzd2l0Y2ggKGZiLT5mb3JtYXQtPmZvcm1hdCkgeworCWNhc2UgRFJNX0ZPUk1BVF9D ODoKKwkJcmV0dXJuIDE4OworCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6CisJCXJldHVybiAxMDsK KwljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6CisJY2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4Ogor CWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoKKwljYXNlIERSTV9GT1JNQVRfQUJHUjg4ODg6CisJ Y2FzZSBEUk1fRk9STUFUX1hSR0IyMTAxMDEwOgorCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMjEwMTAx MDoKKwljYXNlIERSTV9GT1JNQVRfQVJHQjIxMDEwMTA6CisJY2FzZSBEUk1fRk9STUFUX0FCR1Iy MTAxMDEwOgorCWNhc2UgRFJNX0ZPUk1BVF9YVllVMjEwMTAxMDoKKwljYXNlIERSTV9GT1JNQVRf WTIxMjoKKwljYXNlIERSTV9GT1JNQVRfWTIxNjoKKwkJcmV0dXJuIDY7CisJY2FzZSBEUk1fRk9S TUFUX05WMTI6CisJCXJldHVybiAyMDsKKwljYXNlIERSTV9GT1JNQVRfUDAxMDoKKwljYXNlIERS TV9GT1JNQVRfUDAxMjoKKwljYXNlIERSTV9GT1JNQVRfUDAxNjoKKwkJcmV0dXJuIDEyOworCWNh c2UgRFJNX0ZPUk1BVF9YUkdCMTYxNjE2MTZGOgorCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMTYxNjE2 MTZGOgorCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMTYxNjE2MTZGOgorCWNhc2UgRFJNX0ZPUk1BVF9B QkdSMTYxNjE2MTZGOgorCWNhc2UgRFJNX0ZPUk1BVF9YVllVMTJfMTYxNjE2MTY6CisJY2FzZSBE Uk1fRk9STUFUX1hWWVUxNjE2MTYxNjoKKwkJcmV0dXJuIDQ7CisJZGVmYXVsdDoKKwkJcmV0dXJu IDE7CisJfQorfQorCitzdGF0aWMgaW50IGljbF9wbGFuZV9tYXhfd2lkdGgoY29uc3Qgc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJCQkgICAgICAgaW50IGNvbG9yX3BsYW5lLAorCQkJICAg ICAgIHVuc2lnbmVkIGludCByb3RhdGlvbikKK3sKKwlyZXR1cm4gNTEyMDsKK30KKworc3RhdGlj IGludCBza2xfcGxhbmVfbWF4X2hlaWdodChjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpm YiwKKwkJCQlpbnQgY29sb3JfcGxhbmUsCisJCQkJdW5zaWduZWQgaW50IHJvdGF0aW9uKQorewor CXJldHVybiA0MDk2OworfQorCitzdGF0aWMgaW50IGljbF9wbGFuZV9tYXhfaGVpZ2h0KGNvbnN0 IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAorCQkJCWludCBjb2xvcl9wbGFuZSwKKwkJCQl1 bnNpZ25lZCBpbnQgcm90YXRpb24pCit7CisJcmV0dXJuIDQzMjA7Cit9CisKK3N0YXRpYyB1bnNp Z25lZCBpbnQKK3NrbF9wbGFuZV9tYXhfc3RyaWRlKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUs CisJCSAgICAgdTMyIHBpeGVsX2Zvcm1hdCwgdTY0IG1vZGlmaWVyLAorCQkgICAgIHVuc2lnbmVk IGludCByb3RhdGlvbikKK3sKKwljb25zdCBzdHJ1Y3QgZHJtX2Zvcm1hdF9pbmZvICppbmZvID0g ZHJtX2Zvcm1hdF9pbmZvKHBpeGVsX2Zvcm1hdCk7CisJaW50IGNwcCA9IGluZm8tPmNwcFswXTsK KworCS8qCisJICogIlRoZSBzdHJpZGUgaW4gYnl0ZXMgbXVzdCBub3QgZXhjZWVkIHRoZQorCSAq IG9mIHRoZSBzaXplIG9mIDhLIHBpeGVscyBhbmQgMzJLIGJ5dGVzLiIKKwkgKi8KKwlpZiAoZHJt X3JvdGF0aW9uXzkwX29yXzI3MChyb3RhdGlvbikpCisJCXJldHVybiBtaW4oODE5MiwgMzI3Njgg LyBjcHApOworCWVsc2UKKwkJcmV0dXJuIG1pbig4MTkyICogY3BwLCAzMjc2OCk7Cit9CisKKwor LyogUHJlb2Zmc2V0IHZhbHVlcyBmb3IgWVVWIHRvIFJHQiBDb252ZXJzaW9uICovCisjZGVmaW5l IFBSRU9GRl9ZVVZfVE9fUkdCX0hJCQkweDE4MDAKKyNkZWZpbmUgUFJFT0ZGX1lVVl9UT19SR0Jf TUUJCTB4MUYwMAorI2RlZmluZSBQUkVPRkZfWVVWX1RPX1JHQl9MTwkJMHgxODAwCisKKyNkZWZp bmUgIFJPRkYoeCkgICAgICAgICAgKCgoeCkgJiAweGZmZmYpIDw8IDE2KQorI2RlZmluZSAgR09G Rih4KSAgICAgICAgICAoKCh4KSAmIDB4ZmZmZikgPDwgMCkKKyNkZWZpbmUgIEJPRkYoeCkgICAg ICAgICAgKCgoeCkgJiAweGZmZmYpIDw8IDE2KQorCitzdGF0aWMgdm9pZAoraWNsX3Byb2dyYW1f aW5wdXRfY3NjKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCisJCSAgICAgIGNvbnN0IHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgaW50 ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKKwllbnVtIHBpcGUgcGlwZSA9 IHBsYW5lLT5waXBlOworCWVudW0gcGxhbmVfaWQgcGxhbmVfaWQgPSBwbGFuZS0+aWQ7CisKKwlz dGF0aWMgY29uc3QgdTE2IGlucHV0X2NzY19tYXRyaXhbXVs5XSA9IHsKKwkJLyoKKwkJICogQlQu NjAxIGZ1bGwgcmFuZ2UgWUNiQ3IgLT4gZnVsbCByYW5nZSBSR0IKKwkJICogVGhlIG1hdHJpeCBy ZXF1aXJlZCBpcyA6CisJCSAqIFsxLjAwMCwgMC4wMDAsIDEuMzcxLAorCQkgKiAgMS4wMDAsIC0w LjMzNiwgLTAuNjk4LAorCQkgKiAgMS4wMDAsIDEuNzMyLCAwLjAwMDBdCisJCSAqLworCQlbRFJN X0NPTE9SX1lDQkNSX0JUNjAxXSA9IHsKKwkJCTB4N0FGOCwgMHg3ODAwLCAweDAsCisJCQkweDhC MjgsIDB4NzgwMCwgMHg5QUMwLAorCQkJMHgwLCAweDc4MDAsIDB4N0REOCwKKwkJfSwKKwkJLyoK KwkJICogQlQuNzA5IGZ1bGwgcmFuZ2UgWUNiQ3IgLT4gZnVsbCByYW5nZSBSR0IKKwkJICogVGhl IG1hdHJpeCByZXF1aXJlZCBpcyA6CisJCSAqIFsxLjAwMCwgMC4wMDAsIDEuNTc0LAorCQkgKiAg MS4wMDAsIC0wLjE4NywgLTAuNDY4LAorCQkgKiAgMS4wMDAsIDEuODU1LCAwLjAwMDBdCisJCSAq LworCQlbRFJNX0NPTE9SX1lDQkNSX0JUNzA5XSA9IHsKKwkJCTB4N0M5OCwgMHg3ODAwLCAweDAs CisJCQkweDlFRjgsIDB4NzgwMCwgMHhBQzAwLAorCQkJMHgwLCAweDc4MDAsICAweDdFRDgsCisJ CX0sCisJCS8qCisJCSAqIEJULjIwMjAgZnVsbCByYW5nZSBZQ2JDciAtPiBmdWxsIHJhbmdlIFJH QgorCQkgKiBUaGUgbWF0cml4IHJlcXVpcmVkIGlzIDoKKwkJICogWzEuMDAwLCAwLjAwMCwgMS40 NzQsCisJCSAqICAxLjAwMCwgLTAuMTY0NSwgLTAuNTcxMywKKwkJICogIDEuMDAwLCAxLjg4MTQs IDAuMDAwMF0KKwkJICovCisJCVtEUk1fQ09MT1JfWUNCQ1JfQlQyMDIwXSA9IHsKKwkJCTB4N0JD OCwgMHg3ODAwLCAweDAsCisJCQkweDg5MjgsIDB4NzgwMCwgMHhBQTg4LAorCQkJMHgwLCAweDc4 MDAsIDB4N0YxMCwKKwkJfSwKKwl9OworCisJLyogTWF0cml4IGZvciBMaW1pdGVkIFJhbmdlIHRv IEZ1bGwgUmFuZ2UgQ29udmVyc2lvbiAqLworCXN0YXRpYyBjb25zdCB1MTYgaW5wdXRfY3NjX21h dHJpeF9scltdWzldID0geworCQkvKgorCQkgKiBCVC42MDEgTGltdGVkIHJhbmdlIFlDYkNyIC0+ IGZ1bGwgcmFuZ2UgUkdCCisJCSAqIFRoZSBtYXRyaXggcmVxdWlyZWQgaXMgOgorCQkgKiBbMS4x NjQzODQsIDAuMDAwLCAxLjU5NjAyNywKKwkJICogIDEuMTY0Mzg0LCAtMC4zOTE3NSwgLTAuODEy ODEzLAorCQkgKiAgMS4xNjQzODQsIDIuMDE3MjMyLCAwLjAwMDBdCisJCSAqLworCQlbRFJNX0NP TE9SX1lDQkNSX0JUNjAxXSA9IHsKKwkJCTB4N0NDOCwgMHg3OTUwLCAweDAsCisJCQkweDhEMDAs IDB4Nzk1MCwgMHg5Qzg4LAorCQkJMHgwLCAweDc5NTAsIDB4NjgxMCwKKwkJfSwKKwkJLyoKKwkJ ICogQlQuNzA5IExpbWl0ZWQgcmFuZ2UgWUNiQ3IgLT4gZnVsbCByYW5nZSBSR0IKKwkJICogVGhl IG1hdHJpeCByZXF1aXJlZCBpcyA6CisJCSAqIFsxLjE2NDM4NCwgMC4wMDAsIDEuNzkyNzQxLAor CQkgKiAgMS4xNjQzODQsIC0wLjIxMzI0OSwgLTAuNTMyOTA5LAorCQkgKiAgMS4xNjQzODQsIDIu MTEyNDAyLCAwLjAwMDBdCisJCSAqLworCQlbRFJNX0NPTE9SX1lDQkNSX0JUNzA5XSA9IHsKKwkJ CTB4N0U1OCwgMHg3OTUwLCAweDAsCisJCQkweDg4ODgsIDB4Nzk1MCwgMHhBREE4LAorCQkJMHgw LCAweDc5NTAsICAweDY4NzAsCisJCX0sCisJCS8qCisJCSAqIEJULjIwMjAgTGltaXRlZCByYW5n ZSBZQ2JDciAtPiBmdWxsIHJhbmdlIFJHQgorCQkgKiBUaGUgbWF0cml4IHJlcXVpcmVkIGlzIDoK KwkJICogWzEuMTY0LCAwLjAwMCwgMS42NzgsCisJCSAqICAxLjE2NCwgLTAuMTg3MywgLTAuNjUw NCwKKwkJICogIDEuMTY0LCAyLjE0MTcsIDAuMDAwMF0KKwkJICovCisJCVtEUk1fQ09MT1JfWUNC Q1JfQlQyMDIwXSA9IHsKKwkJCTB4N0Q3MCwgMHg3OTUwLCAweDAsCisJCQkweDhBNjgsIDB4Nzk1 MCwgMHhBQzAwLAorCQkJMHgwLCAweDc5NTAsIDB4Njg5MCwKKwkJfSwKKwl9OworCWNvbnN0IHUx NiAqY3NjOworCisJaWYgKHBsYW5lX3N0YXRlLT5ody5jb2xvcl9yYW5nZSA9PSBEUk1fQ09MT1Jf WUNCQ1JfRlVMTF9SQU5HRSkKKwkJY3NjID0gaW5wdXRfY3NjX21hdHJpeFtwbGFuZV9zdGF0ZS0+ aHcuY29sb3JfZW5jb2RpbmddOworCWVsc2UKKwkJY3NjID0gaW5wdXRfY3NjX21hdHJpeF9scltw bGFuZV9zdGF0ZS0+aHcuY29sb3JfZW5jb2RpbmddOworCisJaW50ZWxfZGVfd3JpdGVfZncoZGV2 X3ByaXYsIFBMQU5FX0lOUFVUX0NTQ19DT0VGRihwaXBlLCBwbGFuZV9pZCwgMCksCisJCQkgIFJP RkYoY3NjWzBdKSB8IEdPRkYoY3NjWzFdKSk7CisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYs IFBMQU5FX0lOUFVUX0NTQ19DT0VGRihwaXBlLCBwbGFuZV9pZCwgMSksCisJCQkgIEJPRkYoY3Nj WzJdKSk7CisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX0lOUFVUX0NTQ19DT0VG RihwaXBlLCBwbGFuZV9pZCwgMiksCisJCQkgIFJPRkYoY3NjWzNdKSB8IEdPRkYoY3NjWzRdKSk7 CisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX0lOUFVUX0NTQ19DT0VGRihwaXBl LCBwbGFuZV9pZCwgMyksCisJCQkgIEJPRkYoY3NjWzVdKSk7CisJaW50ZWxfZGVfd3JpdGVfZnco ZGV2X3ByaXYsIFBMQU5FX0lOUFVUX0NTQ19DT0VGRihwaXBlLCBwbGFuZV9pZCwgNCksCisJCQkg IFJPRkYoY3NjWzZdKSB8IEdPRkYoY3NjWzddKSk7CisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3By aXYsIFBMQU5FX0lOUFVUX0NTQ19DT0VGRihwaXBlLCBwbGFuZV9pZCwgNSksCisJCQkgIEJPRkYo Y3NjWzhdKSk7CisKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfSU5QVVRfQ1ND X1BSRU9GRihwaXBlLCBwbGFuZV9pZCwgMCksCisJCQkgIFBSRU9GRl9ZVVZfVE9fUkdCX0hJKTsK KwlpZiAocGxhbmVfc3RhdGUtPmh3LmNvbG9yX3JhbmdlID09IERSTV9DT0xPUl9ZQ0JDUl9GVUxM X1JBTkdFKQorCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwKKwkJCQkgIFBMQU5FX0lOUFVU X0NTQ19QUkVPRkYocGlwZSwgcGxhbmVfaWQsIDEpLAorCQkJCSAgMCk7CisJZWxzZQorCQlpbnRl bF9kZV93cml0ZV9mdyhkZXZfcHJpdiwKKwkJCQkgIFBMQU5FX0lOUFVUX0NTQ19QUkVPRkYocGlw ZSwgcGxhbmVfaWQsIDEpLAorCQkJCSAgUFJFT0ZGX1lVVl9UT19SR0JfTUUpOworCWludGVsX2Rl X3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9JTlBVVF9DU0NfUFJFT0ZGKHBpcGUsIHBsYW5lX2lk LCAyKSwKKwkJCSAgUFJFT0ZGX1lVVl9UT19SR0JfTE8pOworCWludGVsX2RlX3dyaXRlX2Z3KGRl dl9wcml2LAorCQkJICBQTEFORV9JTlBVVF9DU0NfUE9TVE9GRihwaXBlLCBwbGFuZV9pZCwgMCks IDB4MCk7CisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsCisJCQkgIFBMQU5FX0lOUFVUX0NT Q19QT1NUT0ZGKHBpcGUsIHBsYW5lX2lkLCAxKSwgMHgwKTsKKwlpbnRlbF9kZV93cml0ZV9mdyhk ZXZfcHJpdiwKKwkJCSAgUExBTkVfSU5QVVRfQ1NDX1BPU1RPRkYocGlwZSwgcGxhbmVfaWQsIDIp LCAweDApOworfQorCitzdGF0aWMgYm9vbCBpc19zdXJmYWNlX2xpbmVhcihjb25zdCBzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IGNvbG9yX3BsYW5lKQoreworCXJldHVybiBmYi0+bW9k aWZpZXIgPT0gRFJNX0ZPUk1BVF9NT0RfTElORUFSIHx8CisJICAgICAgIGlzX2dlbjEyX2Njc19w bGFuZShmYiwgY29sb3JfcGxhbmUpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHNrbF9wbGFu ZV9zdHJpZGVfbXVsdChjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwkJCQkJICBp bnQgY29sb3JfcGxhbmUsIHVuc2lnbmVkIGludCByb3RhdGlvbikKK3sKKwkvKgorCSAqIFRoZSBz dHJpZGUgaXMgZWl0aGVyIGV4cHJlc3NlZCBhcyBhIG11bHRpcGxlIG9mIDY0IGJ5dGVzIGNodW5r cyBmb3IKKwkgKiBsaW5lYXIgYnVmZmVycyBvciBpbiBudW1iZXIgb2YgdGlsZXMgZm9yIHRpbGVk IGJ1ZmZlcnMuCisJICovCisJaWYgKGlzX3N1cmZhY2VfbGluZWFyKGZiLCBjb2xvcl9wbGFuZSkp CisJCXJldHVybiA2NDsKKwllbHNlIGlmIChkcm1fcm90YXRpb25fOTBfb3JfMjcwKHJvdGF0aW9u KSkKKwkJcmV0dXJuIGludGVsX3RpbGVfaGVpZ2h0KGZiLCBjb2xvcl9wbGFuZSk7CisJZWxzZQor CQlyZXR1cm4gaW50ZWxfdGlsZV93aWR0aF9ieXRlcyhmYiwgY29sb3JfcGxhbmUpOworfQorCitz dGF0aWMgdTMyIHNrbF9wbGFuZV9zdHJpZGUoY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRl ICpwbGFuZV9zdGF0ZSwKKwkJCSAgICBpbnQgY29sb3JfcGxhbmUpCit7CisJY29uc3Qgc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7CisJdW5zaWduZWQgaW50 IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmh3LnJvdGF0aW9uOworCXUzMiBzdHJpZGUgPSBwbGFu ZV9zdGF0ZS0+Y29sb3JfcGxhbmVbY29sb3JfcGxhbmVdLnN0cmlkZTsKKworCWlmIChjb2xvcl9w bGFuZSA+PSBmYi0+Zm9ybWF0LT5udW1fcGxhbmVzKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBz dHJpZGUgLyBza2xfcGxhbmVfc3RyaWRlX211bHQoZmIsIGNvbG9yX3BsYW5lLCByb3RhdGlvbik7 Cit9CisKK3N0YXRpYyB2b2lkCitza2xfZGlzYWJsZV9wbGFuZShzdHJ1Y3QgaW50ZWxfcGxhbmUg KnBsYW5lLAorCQkgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQor eworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmJh c2UuZGV2KTsKKwllbnVtIHBsYW5lX2lkIHBsYW5lX2lkID0gcGxhbmUtPmlkOworCWVudW0gcGlw ZSBwaXBlID0gcGxhbmUtPnBpcGU7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKworCXNwaW5f bG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ssIGlycWZsYWdzKTsKKworCWlmIChp Y2xfaXNfaGRyX3BsYW5lKGRldl9wcml2LCBwbGFuZV9pZCkpCisJCWludGVsX2RlX3dyaXRlX2Z3 KGRldl9wcml2LCBQTEFORV9DVVNfQ1RMKHBpcGUsIHBsYW5lX2lkKSwgMCk7CisKKwlza2xfd3Jp dGVfcGxhbmVfd20ocGxhbmUsIGNydGNfc3RhdGUpOworCisJaW50ZWxfZGVfd3JpdGVfZncoZGV2 X3ByaXYsIFBMQU5FX0NUTChwaXBlLCBwbGFuZV9pZCksIDApOworCWludGVsX2RlX3dyaXRlX2Z3 KGRldl9wcml2LCBQTEFORV9TVVJGKHBpcGUsIHBsYW5lX2lkKSwgMCk7CisKKwlzcGluX3VubG9j a19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ssIGlycWZsYWdzKTsKK30KKworc3Rh dGljIGJvb2wKK3NrbF9wbGFuZV9nZXRfaHdfc3RhdGUoc3RydWN0IGludGVsX3BsYW5lICpwbGFu ZSwKKwkJICAgICAgIGVudW0gcGlwZSAqcGlwZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7CisJZW51bSBpbnRlbF9kaXNw bGF5X3Bvd2VyX2RvbWFpbiBwb3dlcl9kb21haW47CisJZW51bSBwbGFuZV9pZCBwbGFuZV9pZCA9 IHBsYW5lLT5pZDsKKwlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKKwlib29sIHJldDsKKworCXBv d2VyX2RvbWFpbiA9IFBPV0VSX0RPTUFJTl9QSVBFKHBsYW5lLT5waXBlKTsKKwl3YWtlcmVmID0g aW50ZWxfZGlzcGxheV9wb3dlcl9nZXRfaWZfZW5hYmxlZChkZXZfcHJpdiwgcG93ZXJfZG9tYWlu KTsKKwlpZiAoIXdha2VyZWYpCisJCXJldHVybiBmYWxzZTsKKworCXJldCA9IGludGVsX2RlX3Jl YWQoZGV2X3ByaXYsIFBMQU5FX0NUTChwbGFuZS0+cGlwZSwgcGxhbmVfaWQpKSAmIFBMQU5FX0NU TF9FTkFCTEU7CisKKwkqcGlwZSA9IHBsYW5lLT5waXBlOworCisJaW50ZWxfZGlzcGxheV9wb3dl cl9wdXQoZGV2X3ByaXYsIHBvd2VyX2RvbWFpbiwgd2FrZXJlZik7CisKKwlyZXR1cm4gcmV0Owor fQorCitzdGF0aWMgdTMyIHNrbF9wbGFuZV9jdGxfZm9ybWF0KHUzMiBwaXhlbF9mb3JtYXQpCit7 CisJc3dpdGNoIChwaXhlbF9mb3JtYXQpIHsKKwljYXNlIERSTV9GT1JNQVRfQzg6CisJCXJldHVy biBQTEFORV9DVExfRk9STUFUX0lOREVYRUQ7CisJY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKKwkJ cmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfUkdCXzU2NTsKKwljYXNlIERSTV9GT1JNQVRfWEJHUjg4 ODg6CisJY2FzZSBEUk1fRk9STUFUX0FCR1I4ODg4OgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1B VF9YUkdCXzg4ODggfCBQTEFORV9DVExfT1JERVJfUkdCWDsKKwljYXNlIERSTV9GT1JNQVRfWFJH Qjg4ODg6CisJY2FzZSBEUk1fRk9STUFUX0FSR0I4ODg4OgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZP Uk1BVF9YUkdCXzg4ODg7CisJY2FzZSBEUk1fRk9STUFUX1hCR1IyMTAxMDEwOgorCWNhc2UgRFJN X0ZPUk1BVF9BQkdSMjEwMTAxMDoKKwkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfWFJHQl8yMTAx MDEwIHwgUExBTkVfQ1RMX09SREVSX1JHQlg7CisJY2FzZSBEUk1fRk9STUFUX1hSR0IyMTAxMDEw OgorCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMDoKKwkJcmV0dXJuIFBMQU5FX0NUTF9GT1JN QVRfWFJHQl8yMTAxMDEwOworCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMTYxNjE2MTZGOgorCWNhc2Ug RFJNX0ZPUk1BVF9BQkdSMTYxNjE2MTZGOgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9YUkdC XzE2MTYxNjE2RiB8IFBMQU5FX0NUTF9PUkRFUl9SR0JYOworCWNhc2UgRFJNX0ZPUk1BVF9YUkdC MTYxNjE2MTZGOgorCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMTYxNjE2MTZGOgorCQlyZXR1cm4gUExB TkVfQ1RMX0ZPUk1BVF9YUkdCXzE2MTYxNjE2RjsKKwljYXNlIERSTV9GT1JNQVRfWFlVVjg4ODg6 CisJCXJldHVybiBQTEFORV9DVExfRk9STUFUX1hZVVY7CisJY2FzZSBEUk1fRk9STUFUX1lVWVY6 CisJCXJldHVybiBQTEFORV9DVExfRk9STUFUX1lVVjQyMiB8IFBMQU5FX0NUTF9ZVVY0MjJfWVVZ VjsKKwljYXNlIERSTV9GT1JNQVRfWVZZVToKKwkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfWVVW NDIyIHwgUExBTkVfQ1RMX1lVVjQyMl9ZVllVOworCWNhc2UgRFJNX0ZPUk1BVF9VWVZZOgorCQly ZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9ZVVY0MjIgfCBQTEFORV9DVExfWVVWNDIyX1VZVlk7CisJ Y2FzZSBEUk1fRk9STUFUX1ZZVVk6CisJCXJldHVybiBQTEFORV9DVExfRk9STUFUX1lVVjQyMiB8 IFBMQU5FX0NUTF9ZVVY0MjJfVllVWTsKKwljYXNlIERSTV9GT1JNQVRfTlYxMjoKKwkJcmV0dXJu IFBMQU5FX0NUTF9GT1JNQVRfTlYxMjsKKwljYXNlIERSTV9GT1JNQVRfUDAxMDoKKwkJcmV0dXJu IFBMQU5FX0NUTF9GT1JNQVRfUDAxMDsKKwljYXNlIERSTV9GT1JNQVRfUDAxMjoKKwkJcmV0dXJu IFBMQU5FX0NUTF9GT1JNQVRfUDAxMjsKKwljYXNlIERSTV9GT1JNQVRfUDAxNjoKKwkJcmV0dXJu IFBMQU5FX0NUTF9GT1JNQVRfUDAxNjsKKwljYXNlIERSTV9GT1JNQVRfWTIxMDoKKwkJcmV0dXJu IFBMQU5FX0NUTF9GT1JNQVRfWTIxMDsKKwljYXNlIERSTV9GT1JNQVRfWTIxMjoKKwkJcmV0dXJu IFBMQU5FX0NUTF9GT1JNQVRfWTIxMjsKKwljYXNlIERSTV9GT1JNQVRfWTIxNjoKKwkJcmV0dXJu IFBMQU5FX0NUTF9GT1JNQVRfWTIxNjsKKwljYXNlIERSTV9GT1JNQVRfWFZZVTIxMDEwMTA6CisJ CXJldHVybiBQTEFORV9DVExfRk9STUFUX1k0MTA7CisJY2FzZSBEUk1fRk9STUFUX1hWWVUxMl8x NjE2MTYxNjoKKwkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfWTQxMjsKKwljYXNlIERSTV9GT1JN QVRfWFZZVTE2MTYxNjE2OgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9ZNDE2OworCWRlZmF1 bHQ6CisJCU1JU1NJTkdfQ0FTRShwaXhlbF9mb3JtYXQpOworCX0KKworCXJldHVybiAwOworfQor CitzdGF0aWMgdTMyIHNrbF9wbGFuZV9jdGxfYWxwaGEoY29uc3Qgc3RydWN0IGludGVsX3BsYW5l X3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwlpZiAoIXBsYW5lX3N0YXRlLT5ody5mYi0+Zm9ybWF0 LT5oYXNfYWxwaGEpCisJCXJldHVybiBQTEFORV9DVExfQUxQSEFfRElTQUJMRTsKKworCXN3aXRj aCAocGxhbmVfc3RhdGUtPmh3LnBpeGVsX2JsZW5kX21vZGUpIHsKKwljYXNlIERSTV9NT0RFX0JM RU5EX1BJWEVMX05PTkU6CisJCXJldHVybiBQTEFORV9DVExfQUxQSEFfRElTQUJMRTsKKwljYXNl IERSTV9NT0RFX0JMRU5EX1BSRU1VTFRJOgorCQlyZXR1cm4gUExBTkVfQ1RMX0FMUEhBX1NXX1BS RU1VTFRJUExZOworCWNhc2UgRFJNX01PREVfQkxFTkRfQ09WRVJBR0U6CisJCXJldHVybiBQTEFO RV9DVExfQUxQSEFfSFdfUFJFTVVMVElQTFk7CisJZGVmYXVsdDoKKwkJTUlTU0lOR19DQVNFKHBs YW5lX3N0YXRlLT5ody5waXhlbF9ibGVuZF9tb2RlKTsKKwkJcmV0dXJuIFBMQU5FX0NUTF9BTFBI QV9ESVNBQkxFOworCX0KK30KKworc3RhdGljIHUzMiBnbGtfcGxhbmVfY29sb3JfY3RsX2FscGhh KGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJaWYgKCFw bGFuZV9zdGF0ZS0+aHcuZmItPmZvcm1hdC0+aGFzX2FscGhhKQorCQlyZXR1cm4gUExBTkVfQ09M T1JfQUxQSEFfRElTQUJMRTsKKworCXN3aXRjaCAocGxhbmVfc3RhdGUtPmh3LnBpeGVsX2JsZW5k X21vZGUpIHsKKwljYXNlIERSTV9NT0RFX0JMRU5EX1BJWEVMX05PTkU6CisJCXJldHVybiBQTEFO RV9DT0xPUl9BTFBIQV9ESVNBQkxFOworCWNhc2UgRFJNX01PREVfQkxFTkRfUFJFTVVMVEk6CisJ CXJldHVybiBQTEFORV9DT0xPUl9BTFBIQV9TV19QUkVNVUxUSVBMWTsKKwljYXNlIERSTV9NT0RF X0JMRU5EX0NPVkVSQUdFOgorCQlyZXR1cm4gUExBTkVfQ09MT1JfQUxQSEFfSFdfUFJFTVVMVElQ TFk7CisJZGVmYXVsdDoKKwkJTUlTU0lOR19DQVNFKHBsYW5lX3N0YXRlLT5ody5waXhlbF9ibGVu ZF9tb2RlKTsKKwkJcmV0dXJuIFBMQU5FX0NPTE9SX0FMUEhBX0RJU0FCTEU7CisJfQorfQorCitz dGF0aWMgdTMyIHNrbF9wbGFuZV9jdGxfdGlsaW5nKHU2NCBmYl9tb2RpZmllcikKK3sKKwlzd2l0 Y2ggKGZiX21vZGlmaWVyKSB7CisJY2FzZSBEUk1fRk9STUFUX01PRF9MSU5FQVI6CisJCWJyZWFr OworCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ6CisJCXJldHVybiBQTEFORV9DVExfVElM RURfWDsKKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEOgorCQlyZXR1cm4gUExBTkVfQ1RM X1RJTEVEX1k7CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1M6CisJCXJldHVybiBQ TEFORV9DVExfVElMRURfWSB8IFBMQU5FX0NUTF9SRU5ERVJfREVDT01QUkVTU0lPTl9FTkFCTEU7 CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9SQ19DQ1M6CisJCXJldHVybiBQ TEFORV9DVExfVElMRURfWSB8CisJCSAgICAgICBQTEFORV9DVExfUkVOREVSX0RFQ09NUFJFU1NJ T05fRU5BQkxFIHwKKwkJICAgICAgIFBMQU5FX0NUTF9DTEVBUl9DT0xPUl9ESVNBQkxFOworCWNh c2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfTUNfQ0NTOgorCQlyZXR1cm4gUExBTkVf Q1RMX1RJTEVEX1kgfCBQTEFORV9DVExfTUVESUFfREVDT01QUkVTU0lPTl9FTkFCTEU7CisJY2Fz ZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQ6CisJCXJldHVybiBQTEFORV9DVExfVElMRURfWUY7 CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NTOgorCQlyZXR1cm4gUExBTkVfQ1RM X1RJTEVEX1lGIHwgUExBTkVfQ1RMX1JFTkRFUl9ERUNPTVBSRVNTSU9OX0VOQUJMRTsKKwlkZWZh dWx0OgorCQlNSVNTSU5HX0NBU0UoZmJfbW9kaWZpZXIpOworCX0KKworCXJldHVybiAwOworfQor CitzdGF0aWMgdTMyIHNrbF9wbGFuZV9jdGxfcm90YXRlKHVuc2lnbmVkIGludCByb3RhdGUpCit7 CisJc3dpdGNoIChyb3RhdGUpIHsKKwljYXNlIERSTV9NT0RFX1JPVEFURV8wOgorCQlicmVhazsK KwkvKgorCSAqIERSTV9NT0RFX1JPVEFURV8gaXMgY291bnRlciBjbG9ja3dpc2UgdG8gc3RheSBj b21wYXRpYmxlIHdpdGggWHJhbmRyCisJICogd2hpbGUgaTkxNSBIVyByb3RhdGlvbiBpcyBjbG9j a3dpc2UsIHRoYXRzIHdoeSB0aGlzIHN3YXBwaW5nLgorCSAqLworCWNhc2UgRFJNX01PREVfUk9U QVRFXzkwOgorCQlyZXR1cm4gUExBTkVfQ1RMX1JPVEFURV8yNzA7CisJY2FzZSBEUk1fTU9ERV9S T1RBVEVfMTgwOgorCQlyZXR1cm4gUExBTkVfQ1RMX1JPVEFURV8xODA7CisJY2FzZSBEUk1fTU9E RV9ST1RBVEVfMjcwOgorCQlyZXR1cm4gUExBTkVfQ1RMX1JPVEFURV85MDsKKwlkZWZhdWx0Ogor CQlNSVNTSU5HX0NBU0Uocm90YXRlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUz MiBjbmxfcGxhbmVfY3RsX2ZsaXAodW5zaWduZWQgaW50IHJlZmxlY3QpCit7CisJc3dpdGNoIChy ZWZsZWN0KSB7CisJY2FzZSAwOgorCQlicmVhazsKKwljYXNlIERSTV9NT0RFX1JFRkxFQ1RfWDoK KwkJcmV0dXJuIFBMQU5FX0NUTF9GTElQX0hPUklaT05UQUw7CisJY2FzZSBEUk1fTU9ERV9SRUZM RUNUX1k6CisJZGVmYXVsdDoKKwkJTUlTU0lOR19DQVNFKHJlZmxlY3QpOworCX0KKworCXJldHVy biAwOworfQorCitzdGF0aWMgdTMyIHNrbF9wbGFuZV9jdGxfY3J0Yyhjb25zdCBzdHJ1Y3QgaW50 ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSB0b19pOTE1KGNydGNfc3RhdGUtPnVhcGkuY3J0Yy0+ZGV2KTsKKwl1MzIgcGxh bmVfY3RsID0gMDsKKworCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwIHx8IElTX0dFTUlO SUxBS0UoZGV2X3ByaXYpKQorCQlyZXR1cm4gcGxhbmVfY3RsOworCisJaWYgKGNydGNfc3RhdGUt PmdhbW1hX2VuYWJsZSkKKwkJcGxhbmVfY3RsIHw9IFBMQU5FX0NUTF9QSVBFX0dBTU1BX0VOQUJM RTsKKworCWlmIChjcnRjX3N0YXRlLT5jc2NfZW5hYmxlKQorCQlwbGFuZV9jdGwgfD0gUExBTkVf Q1RMX1BJUEVfQ1NDX0VOQUJMRTsKKworCXJldHVybiBwbGFuZV9jdGw7Cit9CisKK3N0YXRpYyB1 MzIgc2tsX3BsYW5lX2N0bChjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0 ZSwKKwkJCSBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQorewor CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9CisJCXRvX2k5MTUocGxhbmVfc3Rh dGUtPnVhcGkucGxhbmUtPmRldik7CisJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIg PSBwbGFuZV9zdGF0ZS0+aHcuZmI7CisJdW5zaWduZWQgaW50IHJvdGF0aW9uID0gcGxhbmVfc3Rh dGUtPmh3LnJvdGF0aW9uOworCWNvbnN0IHN0cnVjdCBkcm1faW50ZWxfc3ByaXRlX2NvbG9ya2V5 ICprZXkgPSAmcGxhbmVfc3RhdGUtPmNrZXk7CisJdTMyIHBsYW5lX2N0bDsKKworCXBsYW5lX2N0 bCA9IFBMQU5FX0NUTF9FTkFCTEU7CisKKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDEwICYm ICFJU19HRU1JTklMQUtFKGRldl9wcml2KSkgeworCQlwbGFuZV9jdGwgfD0gc2tsX3BsYW5lX2N0 bF9hbHBoYShwbGFuZV9zdGF0ZSk7CisJCXBsYW5lX2N0bCB8PSBQTEFORV9DVExfUExBTkVfR0FN TUFfRElTQUJMRTsKKworCQlpZiAocGxhbmVfc3RhdGUtPmh3LmNvbG9yX2VuY29kaW5nID09IERS TV9DT0xPUl9ZQ0JDUl9CVDcwOSkKKwkJCXBsYW5lX2N0bCB8PSBQTEFORV9DVExfWVVWX1RPX1JH Ql9DU0NfRk9STUFUX0JUNzA5OworCisJCWlmIChwbGFuZV9zdGF0ZS0+aHcuY29sb3JfcmFuZ2Ug PT0gRFJNX0NPTE9SX1lDQkNSX0ZVTExfUkFOR0UpCisJCQlwbGFuZV9jdGwgfD0gUExBTkVfQ1RM X1lVVl9SQU5HRV9DT1JSRUNUSU9OX0RJU0FCTEU7CisJfQorCisJcGxhbmVfY3RsIHw9IHNrbF9w bGFuZV9jdGxfZm9ybWF0KGZiLT5mb3JtYXQtPmZvcm1hdCk7CisJcGxhbmVfY3RsIHw9IHNrbF9w bGFuZV9jdGxfdGlsaW5nKGZiLT5tb2RpZmllcik7CisJcGxhbmVfY3RsIHw9IHNrbF9wbGFuZV9j dGxfcm90YXRlKHJvdGF0aW9uICYgRFJNX01PREVfUk9UQVRFX01BU0spOworCisJaWYgKElOVEVM X0dFTihkZXZfcHJpdikgPj0gMTApCisJCXBsYW5lX2N0bCB8PSBjbmxfcGxhbmVfY3RsX2ZsaXAo cm90YXRpb24gJgorCQkJCQkJRFJNX01PREVfUkVGTEVDVF9NQVNLKTsKKworCWlmIChrZXktPmZs YWdzICYgSTkxNV9TRVRfQ09MT1JLRVlfREVTVElOQVRJT04pCisJCXBsYW5lX2N0bCB8PSBQTEFO RV9DVExfS0VZX0VOQUJMRV9ERVNUSU5BVElPTjsKKwllbHNlIGlmIChrZXktPmZsYWdzICYgSTkx NV9TRVRfQ09MT1JLRVlfU09VUkNFKQorCQlwbGFuZV9jdGwgfD0gUExBTkVfQ1RMX0tFWV9FTkFC TEVfU09VUkNFOworCisJcmV0dXJuIHBsYW5lX2N0bDsKK30KKworc3RhdGljIHUzMiBnbGtfcGxh bmVfY29sb3JfY3RsX2NydGMoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3Rh dGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRj X3N0YXRlLT51YXBpLmNydGMtPmRldik7CisJdTMyIHBsYW5lX2NvbG9yX2N0bCA9IDA7CisKKwlp ZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMSkKKwkJcmV0dXJuIHBsYW5lX2NvbG9yX2N0bDsK KworCWlmIChjcnRjX3N0YXRlLT5nYW1tYV9lbmFibGUpCisJCXBsYW5lX2NvbG9yX2N0bCB8PSBQ TEFORV9DT0xPUl9QSVBFX0dBTU1BX0VOQUJMRTsKKworCWlmIChjcnRjX3N0YXRlLT5jc2NfZW5h YmxlKQorCQlwbGFuZV9jb2xvcl9jdGwgfD0gUExBTkVfQ09MT1JfUElQRV9DU0NfRU5BQkxFOwor CisJcmV0dXJuIHBsYW5lX2NvbG9yX2N0bDsKK30KKworc3RhdGljIHUzMiBnbGtfcGxhbmVfY29s b3JfY3RsKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkJICAg ICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0KKwkJdG9faTkxNShwbGFuZV9zdGF0ZS0+ dWFwaS5wbGFuZS0+ZGV2KTsKKwljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBs YW5lX3N0YXRlLT5ody5mYjsKKwlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lID0gdG9faW50ZWxf cGxhbmUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUpOworCXUzMiBwbGFuZV9jb2xvcl9jdGwgPSAw OworCisJcGxhbmVfY29sb3JfY3RsIHw9IFBMQU5FX0NPTE9SX1BMQU5FX0dBTU1BX0RJU0FCTEU7 CisJcGxhbmVfY29sb3JfY3RsIHw9IGdsa19wbGFuZV9jb2xvcl9jdGxfYWxwaGEocGxhbmVfc3Rh dGUpOworCisJaWYgKGZiLT5mb3JtYXQtPmlzX3l1diAmJiAhaWNsX2lzX2hkcl9wbGFuZShkZXZf cHJpdiwgcGxhbmUtPmlkKSkgeworCQlzd2l0Y2ggKHBsYW5lX3N0YXRlLT5ody5jb2xvcl9lbmNv ZGluZykgeworCQljYXNlIERSTV9DT0xPUl9ZQ0JDUl9CVDcwOToKKwkJCXBsYW5lX2NvbG9yX2N0 bCB8PSBQTEFORV9DT0xPUl9DU0NfTU9ERV9ZVVY3MDlfVE9fUkdCNzA5OworCQkJYnJlYWs7CisJ CWNhc2UgRFJNX0NPTE9SX1lDQkNSX0JUMjAyMDoKKwkJCXBsYW5lX2NvbG9yX2N0bCB8PQorCQkJ CVBMQU5FX0NPTE9SX0NTQ19NT0RFX1lVVjIwMjBfVE9fUkdCMjAyMDsKKwkJCWJyZWFrOworCQlk ZWZhdWx0OgorCQkJcGxhbmVfY29sb3JfY3RsIHw9CisJCQkJUExBTkVfQ09MT1JfQ1NDX01PREVf WVVWNjAxX1RPX1JHQjYwMTsKKwkJfQorCQlpZiAocGxhbmVfc3RhdGUtPmh3LmNvbG9yX3Jhbmdl ID09IERSTV9DT0xPUl9ZQ0JDUl9GVUxMX1JBTkdFKQorCQkJcGxhbmVfY29sb3JfY3RsIHw9IFBM QU5FX0NPTE9SX1lVVl9SQU5HRV9DT1JSRUNUSU9OX0RJU0FCTEU7CisJfSBlbHNlIGlmIChmYi0+ Zm9ybWF0LT5pc195dXYpIHsKKwkJcGxhbmVfY29sb3JfY3RsIHw9IFBMQU5FX0NPTE9SX0lOUFVU X0NTQ19FTkFCTEU7CisJfQorCisJcmV0dXJuIHBsYW5lX2NvbG9yX2N0bDsKK30KKworc3RhdGlj IGludAorbWFpbl90b19jY3NfcGxhbmUoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIs IGludCBtYWluX3BsYW5lKQoreworCWRybV9XQVJOX09OKGZiLT5kZXYsICFpc19jY3NfbW9kaWZp ZXIoZmItPm1vZGlmaWVyKSB8fAorCQkgICAgKG1haW5fcGxhbmUgJiYgbWFpbl9wbGFuZSA+PSBm Yi0+Zm9ybWF0LT5udW1fcGxhbmVzIC8gMikpOworCisJcmV0dXJuIGZiLT5mb3JtYXQtPm51bV9w bGFuZXMgLyAyICsgbWFpbl9wbGFuZTsKK30KKworaW50IHNrbF9jY3NfdG9fbWFpbl9wbGFuZShj b25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IGNjc19wbGFuZSkKK3sKKwlkcm1f V0FSTl9PTihmYi0+ZGV2LCAhaXNfY2NzX21vZGlmaWVyKGZiLT5tb2RpZmllcikgfHwKKwkJICAg IGNjc19wbGFuZSA8IGZiLT5mb3JtYXQtPm51bV9wbGFuZXMgLyAyKTsKKworCXJldHVybiBjY3Nf cGxhbmUgLSBmYi0+Zm9ybWF0LT5udW1fcGxhbmVzIC8gMjsKK30KKworCitzdGF0aWMgaW50Citz a2xfbWFpbl90b19hdXhfcGxhbmUoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGlu dCBtYWluX3BsYW5lKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkx NShmYi0+ZGV2KTsKKworCWlmIChpc19jY3NfbW9kaWZpZXIoZmItPm1vZGlmaWVyKSkKKwkJcmV0 dXJuIG1haW5fdG9fY2NzX3BsYW5lKGZiLCBtYWluX3BsYW5lKTsKKwllbHNlIGlmIChJTlRFTF9H RU4oaTkxNSkgPCAxMSAmJgorCQkgaW50ZWxfZm9ybWF0X2luZm9faXNfeXV2X3NlbWlwbGFuYXIo ZmItPmZvcm1hdCwgZmItPm1vZGlmaWVyKSkKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlyZXR1cm4g MDsKK30KKworc3RhdGljIHZvaWQKK3NrbF9wcm9ncmFtX3BsYW5lKHN0cnVjdCBpbnRlbF9wbGFu ZSAqcGxhbmUsCisJCSAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUs CisJCSAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSwKKwkJICBp bnQgY29sb3JfcGxhbmUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g dG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOworCWVudW0gcGxhbmVfaWQgcGxhbmVfaWQgPSBwbGFu ZS0+aWQ7CisJZW51bSBwaXBlIHBpcGUgPSBwbGFuZS0+cGlwZTsKKwljb25zdCBzdHJ1Y3QgZHJt X2ludGVsX3Nwcml0ZV9jb2xvcmtleSAqa2V5ID0gJnBsYW5lX3N0YXRlLT5ja2V5OworCXUzMiBz dXJmX2FkZHIgPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbY29sb3JfcGxhbmVdLm9mZnNldDsK Kwl1MzIgc3RyaWRlID0gc2tsX3BsYW5lX3N0cmlkZShwbGFuZV9zdGF0ZSwgY29sb3JfcGxhbmUp OworCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZi OworCWludCBhdXhfcGxhbmUgPSBza2xfbWFpbl90b19hdXhfcGxhbmUoZmIsIGNvbG9yX3BsYW5l KTsKKwlpbnQgY3J0Y194ID0gcGxhbmVfc3RhdGUtPnVhcGkuZHN0LngxOworCWludCBjcnRjX3kg PSBwbGFuZV9zdGF0ZS0+dWFwaS5kc3QueTE7CisJdTMyIHggPSBwbGFuZV9zdGF0ZS0+Y29sb3Jf cGxhbmVbY29sb3JfcGxhbmVdLng7CisJdTMyIHkgPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVb Y29sb3JfcGxhbmVdLnk7CisJdTMyIHNyY193ID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRl LT51YXBpLnNyYykgPj4gMTY7CisJdTMyIHNyY19oID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9z dGF0ZS0+dWFwaS5zcmMpID4+IDE2OworCXU4IGFscGhhID0gcGxhbmVfc3RhdGUtPmh3LmFscGhh ID4+IDg7CisJdTMyIHBsYW5lX2NvbG9yX2N0bCA9IDAsIGF1eF9kaXN0ID0gMDsKKwl1bnNpZ25l ZCBsb25nIGlycWZsYWdzOworCXUzMiBrZXltc2ssIGtleW1heDsKKwl1MzIgcGxhbmVfY3RsID0g cGxhbmVfc3RhdGUtPmN0bDsKKworCXBsYW5lX2N0bCB8PSBza2xfcGxhbmVfY3RsX2NydGMoY3J0 Y19zdGF0ZSk7CisKKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCB8fCBJU19HRU1JTklM QUtFKGRldl9wcml2KSkKKwkJcGxhbmVfY29sb3JfY3RsID0gcGxhbmVfc3RhdGUtPmNvbG9yX2N0 bCB8CisJCQlnbGtfcGxhbmVfY29sb3JfY3RsX2NydGMoY3J0Y19zdGF0ZSk7CisKKwkvKiBTaXpl cyBhcmUgMCBiYXNlZCAqLworCXNyY193LS07CisJc3JjX2gtLTsKKworCWtleW1heCA9IChrZXkt Pm1heF92YWx1ZSAmIDB4ZmZmZmZmKSB8IFBMQU5FX0tFWU1BWF9BTFBIQShhbHBoYSk7CisKKwlr ZXltc2sgPSBrZXktPmNoYW5uZWxfbWFzayAmIDB4N2ZmZmZmZjsKKwlpZiAoYWxwaGEgPCAweGZm KQorCQlrZXltc2sgfD0gUExBTkVfS0VZTVNLX0FMUEhBX0VOQUJMRTsKKworCS8qIFRoZSBzY2Fs ZXIgd2lsbCBoYW5kbGUgdGhlIG91dHB1dCBwb3NpdGlvbiAqLworCWlmIChwbGFuZV9zdGF0ZS0+ c2NhbGVyX2lkID49IDApIHsKKwkJY3J0Y194ID0gMDsKKwkJY3J0Y195ID0gMDsKKwl9CisKKwlp ZiAoYXV4X3BsYW5lKSB7CisJCWF1eF9kaXN0ID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2F1 eF9wbGFuZV0ub2Zmc2V0IC0gc3VyZl9hZGRyOworCisJCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYp IDwgMTIpCisJCQlhdXhfZGlzdCB8PSBza2xfcGxhbmVfc3RyaWRlKHBsYW5lX3N0YXRlLCBhdXhf cGxhbmUpOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ss IGlycWZsYWdzKTsKKworCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9TVFJJREUo cGlwZSwgcGxhbmVfaWQpLCBzdHJpZGUpOworCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQ TEFORV9QT1MocGlwZSwgcGxhbmVfaWQpLAorCQkJICAoY3J0Y195IDw8IDE2KSB8IGNydGNfeCk7 CisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX1NJWkUocGlwZSwgcGxhbmVfaWQp LAorCQkJICAoc3JjX2ggPDwgMTYpIHwgc3JjX3cpOworCisJaW50ZWxfZGVfd3JpdGVfZncoZGV2 X3ByaXYsIFBMQU5FX0FVWF9ESVNUKHBpcGUsIHBsYW5lX2lkKSwgYXV4X2Rpc3QpOworCisJaWYg KGljbF9pc19oZHJfcGxhbmUoZGV2X3ByaXYsIHBsYW5lX2lkKSkKKwkJaW50ZWxfZGVfd3JpdGVf ZncoZGV2X3ByaXYsIFBMQU5FX0NVU19DVEwocGlwZSwgcGxhbmVfaWQpLAorCQkJCSAgcGxhbmVf c3RhdGUtPmN1c19jdGwpOworCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTAgfHwgSVNf R0VNSU5JTEFLRShkZXZfcHJpdikpCisJCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFO RV9DT0xPUl9DVEwocGlwZSwgcGxhbmVfaWQpLAorCQkJCSAgcGxhbmVfY29sb3JfY3RsKTsKKwor CWlmIChmYi0+Zm9ybWF0LT5pc195dXYgJiYgaWNsX2lzX2hkcl9wbGFuZShkZXZfcHJpdiwgcGxh bmVfaWQpKQorCQlpY2xfcHJvZ3JhbV9pbnB1dF9jc2MocGxhbmUsIGNydGNfc3RhdGUsIHBsYW5l X3N0YXRlKTsKKworCXNrbF93cml0ZV9wbGFuZV93bShwbGFuZSwgY3J0Y19zdGF0ZSk7CisKKwlp bnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfS0VZVkFMKHBpcGUsIHBsYW5lX2lkKSwK KwkJCSAga2V5LT5taW5fdmFsdWUpOworCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFO RV9LRVlNU0socGlwZSwgcGxhbmVfaWQpLCBrZXltc2spOworCWludGVsX2RlX3dyaXRlX2Z3KGRl dl9wcml2LCBQTEFORV9LRVlNQVgocGlwZSwgcGxhbmVfaWQpLCBrZXltYXgpOworCisJaW50ZWxf ZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX09GRlNFVChwaXBlLCBwbGFuZV9pZCksCisJCQkg ICh5IDw8IDE2KSB8IHgpOworCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPCAxMSkKKwkJaW50 ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX0FVWF9PRkZTRVQocGlwZSwgcGxhbmVfaWQp LAorCQkJCSAgKHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVsxXS55IDw8IDE2KSB8IHBsYW5lX3N0 YXRlLT5jb2xvcl9wbGFuZVsxXS54KTsKKworCWlmICghZHJtX2F0b21pY19jcnRjX25lZWRzX21v ZGVzZXQoJmNydGNfc3RhdGUtPnVhcGkpKQorCQlpbnRlbF9wc3IyX3Byb2dyYW1fcGxhbmVfc2Vs X2ZldGNoKHBsYW5lLCBjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSwgY29sb3JfcGxhbmUpOworCisJ LyoKKwkgKiBUaGUgY29udHJvbCByZWdpc3RlciBzZWxmLWFybXMgaWYgdGhlIHBsYW5lIHdhcyBw cmV2aW91c2x5CisJICogZGlzYWJsZWQuIFRyeSB0byBtYWtlIHRoZSBwbGFuZSBlbmFibGUgYXRv bWljIGJ5IHdyaXRpbmcKKwkgKiB0aGUgY29udHJvbCByZWdpc3RlciBqdXN0IGJlZm9yZSB0aGUg c3VyZmFjZSByZWdpc3Rlci4KKwkgKi8KKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExB TkVfQ1RMKHBpcGUsIHBsYW5lX2lkKSwgcGxhbmVfY3RsKTsKKwlpbnRlbF9kZV93cml0ZV9mdyhk ZXZfcHJpdiwgUExBTkVfU1VSRihwaXBlLCBwbGFuZV9pZCksCisJCQkgIGludGVsX3BsYW5lX2dn dHRfb2Zmc2V0KHBsYW5lX3N0YXRlKSArIHN1cmZfYWRkcik7CisKKwlpZiAocGxhbmVfc3RhdGUt PnNjYWxlcl9pZCA+PSAwKQorCQlza2xfcHJvZ3JhbV9zY2FsZXIocGxhbmUsIGNydGNfc3RhdGUs IHBsYW5lX3N0YXRlKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT51bmNv cmUubG9jaywgaXJxZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZAorc2tsX3BsYW5lX2FzeW5jX2Zs aXAoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKKwkJICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVf c3RhdGUgKnBsYW5lX3N0YXRlLAorCQkgICAgIGJvb2wgYXN5bmNfZmxpcCkKK3sKKwlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7CisJ dW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKwllbnVtIHBsYW5lX2lkIHBsYW5lX2lkID0gcGxhbmUt PmlkOworCWVudW0gcGlwZSBwaXBlID0gcGxhbmUtPnBpcGU7CisJdTMyIHN1cmZfYWRkciA9IHBs YW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS5vZmZzZXQ7CisJdTMyIHBsYW5lX2N0bCA9IHBsYW5l X3N0YXRlLT5jdGw7CisKKwlwbGFuZV9jdGwgfD0gc2tsX3BsYW5lX2N0bF9jcnRjKGNydGNfc3Rh dGUpOworCisJaWYgKGFzeW5jX2ZsaXApCisJCXBsYW5lX2N0bCB8PSBQTEFORV9DVExfQVNZTkNf RkxJUDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ssIGlycWZs YWdzKTsKKworCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9DVEwocGlwZSwgcGxh bmVfaWQpLCBwbGFuZV9jdGwpOworCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9T VVJGKHBpcGUsIHBsYW5lX2lkKSwKKwkJCSAgaW50ZWxfcGxhbmVfZ2d0dF9vZmZzZXQocGxhbmVf c3RhdGUpICsgc3VyZl9hZGRyKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2 LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZAorc2tsX3VwZGF0ZV9w bGFuZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAorCQkgY29uc3Qgc3RydWN0IGludGVsX2Ny dGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCSBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUg KnBsYW5lX3N0YXRlKQoreworCWludCBjb2xvcl9wbGFuZSA9IDA7CisKKwlpZiAocGxhbmVfc3Rh dGUtPnBsYW5hcl9saW5rZWRfcGxhbmUgJiYgIXBsYW5lX3N0YXRlLT5wbGFuYXJfc2xhdmUpCisJ CS8qIFByb2dyYW0gdGhlIFVWIHBsYW5lIG9uIHBsYW5hciBtYXN0ZXIgKi8KKwkJY29sb3JfcGxh bmUgPSAxOworCisJc2tsX3Byb2dyYW1fcGxhbmUocGxhbmUsIGNydGNfc3RhdGUsIHBsYW5lX3N0 YXRlLCBjb2xvcl9wbGFuZSk7Cit9CisKK3N0YXRpYyBib29sIGludGVsX2Zvcm1hdF9pc19wMDF4 KHUzMiBmb3JtYXQpCit7CisJc3dpdGNoIChmb3JtYXQpIHsKKwljYXNlIERSTV9GT1JNQVRfUDAx MDoKKwljYXNlIERSTV9GT1JNQVRfUDAxMjoKKwljYXNlIERSTV9GT1JNQVRfUDAxNjoKKwkJcmV0 dXJuIHRydWU7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KKworc3RhdGljIGlu dCBza2xfcGxhbmVfY2hlY2tfZmIoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNf c3RhdGUsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0 YXRlKQoreworCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0b19pbnRlbF9wbGFuZShwbGFu ZV9zdGF0ZS0+dWFwaS5wbGFuZSk7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOworCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOworCXVuc2lnbmVkIGludCByb3RhdGlvbiA9IHBs YW5lX3N0YXRlLT5ody5yb3RhdGlvbjsKKwlzdHJ1Y3QgZHJtX2Zvcm1hdF9uYW1lX2J1ZiBmb3Jt YXRfbmFtZTsKKworCWlmICghZmIpCisJCXJldHVybiAwOworCisJaWYgKHJvdGF0aW9uICYgfihE Uk1fTU9ERV9ST1RBVEVfMCB8IERSTV9NT0RFX1JPVEFURV8xODApICYmCisJICAgIGlzX2Njc19t b2RpZmllcihmYi0+bW9kaWZpZXIpKSB7CisJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAor CQkJICAgICJSQyBzdXBwb3J0IG9ubHkgd2l0aCAwLzE4MCBkZWdyZWUgcm90YXRpb24gKCV4KVxu IiwKKwkJCSAgICByb3RhdGlvbik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChyb3Rh dGlvbiAmIERSTV9NT0RFX1JFRkxFQ1RfWCAmJgorCSAgICBmYi0+bW9kaWZpZXIgPT0gRFJNX0ZP Uk1BVF9NT0RfTElORUFSKSB7CisJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAorCQkJICAg ICJob3Jpem9udGFsIGZsaXAgaXMgbm90IHN1cHBvcnRlZCB3aXRoIGxpbmVhciBzdXJmYWNlIGZv cm1hdHNcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoZHJtX3JvdGF0aW9uXzkw X29yXzI3MChyb3RhdGlvbikpIHsKKwkJaWYgKGZiLT5tb2RpZmllciAhPSBJOTE1X0ZPUk1BVF9N T0RfWV9USUxFRCAmJgorCQkgICAgZmItPm1vZGlmaWVyICE9IEk5MTVfRk9STUFUX01PRF9ZZl9U SUxFRCkgeworCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCisJCQkJICAgICJZL1lmIHRp bGluZyByZXF1aXJlZCBmb3IgOTAvMjcwIVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQor CisJCS8qCisJCSAqIDkwLzI3MCBpcyBub3QgYWxsb3dlZCB3aXRoIFJHQjY0IDE2OjE2OjE2OjE2 IGFuZAorCQkgKiBJbmRleGVkIDgtYml0LiBSR0IgMTYtYml0IDU6Njo1IGlzIGFsbG93ZWQgZ2Vu MTEgb253YXJkcy4KKwkJICovCisJCXN3aXRjaCAoZmItPmZvcm1hdC0+Zm9ybWF0KSB7CisJCWNh c2UgRFJNX0ZPUk1BVF9SR0I1NjU6CisJCQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMSkK KwkJCQlicmVhazsKKwkJCWZhbGx0aHJvdWdoOworCQljYXNlIERSTV9GT1JNQVRfQzg6CisJCWNh c2UgRFJNX0ZPUk1BVF9YUkdCMTYxNjE2MTZGOgorCQljYXNlIERSTV9GT1JNQVRfWEJHUjE2MTYx NjE2RjoKKwkJY2FzZSBEUk1fRk9STUFUX0FSR0IxNjE2MTYxNkY6CisJCWNhc2UgRFJNX0ZPUk1B VF9BQkdSMTYxNjE2MTZGOgorCQljYXNlIERSTV9GT1JNQVRfWTIxMDoKKwkJY2FzZSBEUk1fRk9S TUFUX1kyMTI6CisJCWNhc2UgRFJNX0ZPUk1BVF9ZMjE2OgorCQljYXNlIERSTV9GT1JNQVRfWFZZ VTEyXzE2MTYxNjE2OgorCQljYXNlIERSTV9GT1JNQVRfWFZZVTE2MTYxNjE2OgorCQkJZHJtX2Ri Z19rbXMoJmRldl9wcml2LT5kcm0sCisJCQkJICAgICJVbnN1cHBvcnRlZCBwaXhlbCBmb3JtYXQg JXMgZm9yIDkwLzI3MCFcbiIsCisJCQkJICAgIGRybV9nZXRfZm9ybWF0X25hbWUoZmItPmZvcm1h dC0+Zm9ybWF0LAorCQkJCQkJCSZmb3JtYXRfbmFtZSkpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJ CWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIFktdGlsaW5nIGlzIG5vdCBzdXBw b3J0ZWQgaW4gSUYtSUQgSW50ZXJsYWNlIG1vZGUgKi8KKwlpZiAoY3J0Y19zdGF0ZS0+aHcuZW5h YmxlICYmCisJICAgIGNydGNfc3RhdGUtPmh3LmFkanVzdGVkX21vZGUuZmxhZ3MgJiBEUk1fTU9E RV9GTEFHX0lOVEVSTEFDRSAmJgorCSAgICAoZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01P RF9ZX1RJTEVEIHx8CisJICAgICBmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJ TEVEIHx8CisJICAgICBmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NT IHx8CisJICAgICBmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUyB8 fAorCSAgICAgZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX1JD X0NDUyB8fAorCSAgICAgZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dF TjEyX01DX0NDUykpIHsKKwkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCisJCQkgICAgIlkv WWYgdGlsaW5nIG5vdCBzdXBwb3J0ZWQgaW4gSUYtSUQgbW9kZVxuIik7CisJCXJldHVybiAtRUlO VkFMOworCX0KKworCS8qIFdhXzE2MDYwNTQxODg6dGdsICovCisJaWYgKElTX1RJR0VSTEFLRShk ZXZfcHJpdikgJiYKKwkgICAgcGxhbmVfc3RhdGUtPmNrZXkuZmxhZ3MgJiBJOTE1X1NFVF9DT0xP UktFWV9TT1VSQ0UgJiYKKwkgICAgaW50ZWxfZm9ybWF0X2lzX3AwMXgoZmItPmZvcm1hdC0+Zm9y bWF0KSkgeworCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKKwkJCSAgICAiU291cmNlIGNv bG9yIGtleWluZyBub3Qgc3VwcG9ydGVkIHdpdGggUDAxeCBmb3JtYXRzXG4iKTsKKwkJcmV0dXJu IC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2tsX3BsYW5lX2No ZWNrX2RzdF9jb29yZGluYXRlcyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19z dGF0ZSwKKwkJCQkJICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0 ZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPQorCQl0b19pOTE1KHBs YW5lX3N0YXRlLT51YXBpLnBsYW5lLT5kZXYpOworCWludCBjcnRjX3ggPSBwbGFuZV9zdGF0ZS0+ dWFwaS5kc3QueDE7CisJaW50IGNydGNfdyA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+ dWFwaS5kc3QpOworCWludCBwaXBlX3NyY193ID0gY3J0Y19zdGF0ZS0+cGlwZV9zcmNfdzsKKwor CS8qCisJICogRGlzcGxheSBXQSAjMTE3NTogY25sLGdsaworCSAqIFBsYW5lcyBvdGhlciB0aGFu IHRoZSBjdXJzb3IgbWF5IGNhdXNlIEZJRk8gdW5kZXJmbG93IGFuZCBkaXNwbGF5CisJICogY29y cnVwdGlvbiBpZiBzdGFydGluZyBsZXNzIHRoYW4gNCBwaXhlbHMgZnJvbSB0aGUgcmlnaHQgZWRn ZSBvZgorCSAqIHRoZSBzY3JlZW4uCisJICogQmVzaWRlcyB0aGUgYWJvdmUgV0EgZml4IHRoZSBz aW1pbGFyIHByb2JsZW0sIHdoZXJlIHBsYW5lcyBvdGhlcgorCSAqIHRoYW4gdGhlIGN1cnNvciBl bmRpbmcgbGVzcyB0aGFuIDQgcGl4ZWxzIGZyb20gdGhlIGxlZnQgZWRnZSBvZiB0aGUKKwkgKiBz Y3JlZW4gbWF5IGNhdXNlIEZJRk8gdW5kZXJmbG93IGFuZCBkaXNwbGF5IGNvcnJ1cHRpb24uCisJ ICovCisJaWYgKChJU19HRU1JTklMQUtFKGRldl9wcml2KSB8fCBJU19DQU5OT05MQUtFKGRldl9w cml2KSkgJiYKKwkgICAgKGNydGNfeCArIGNydGNfdyA8IDQgfHwgY3J0Y194ID4gcGlwZV9zcmNf dyAtIDQpKSB7CisJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAorCQkJICAgICJyZXF1ZXN0 ZWQgcGxhbmUgWCAlcyBwb3NpdGlvbiAlZCBpbnZhbGlkICh2YWxpZCByYW5nZSAlZC0lZClcbiIs CisJCQkgICAgY3J0Y194ICsgY3J0Y193IDwgNCA/ICJlbmQiIDogInN0YXJ0IiwKKwkJCSAgICBj cnRjX3ggKyBjcnRjX3cgPCA0ID8gY3J0Y194ICsgY3J0Y193IDogY3J0Y194LAorCQkJICAgIDQs IHBpcGVfc3JjX3cgLSA0KTsKKwkJcmV0dXJuIC1FUkFOR0U7CisJfQorCisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQgc2tsX3BsYW5lX2NoZWNrX252MTJfcm90YXRpb24oY29uc3Qgc3RydWN0 IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwljb25zdCBzdHJ1Y3QgZHJtX2Zy YW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKKwl1bnNpZ25lZCBpbnQgcm90YXRp b24gPSBwbGFuZV9zdGF0ZS0+aHcucm90YXRpb247CisJaW50IHNyY193ID0gZHJtX3JlY3Rfd2lk dGgoJnBsYW5lX3N0YXRlLT51YXBpLnNyYykgPj4gMTY7CisKKwkvKiBEaXNwbGF5IFdBICMxMTA2 ICovCisJaWYgKGludGVsX2Zvcm1hdF9pbmZvX2lzX3l1dl9zZW1pcGxhbmFyKGZiLT5mb3JtYXQs IGZiLT5tb2RpZmllcikgJiYKKwkgICAgc3JjX3cgJiAzICYmCisJICAgIChyb3RhdGlvbiA9PSBE Uk1fTU9ERV9ST1RBVEVfMjcwIHx8CisJICAgICByb3RhdGlvbiA9PSAoRFJNX01PREVfUkVGTEVD VF9YIHwgRFJNX01PREVfUk9UQVRFXzkwKSkpIHsKKwkJRFJNX0RFQlVHX0tNUygic3JjIHdpZHRo IG11c3QgYmUgbXVsdGlwbGUgb2YgNCBmb3Igcm90YXRlZCBwbGFuYXIgWVVWXG4iKTsKKwkJcmV0 dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2tsX3BsYW5l X21heF9zY2FsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkgICAgICAg Y29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpCit7CisJLyoKKwkgKiBXZSBkb24ndCB5 ZXQga25vdyB0aGUgZmluYWwgc291cmNlIHdpZHRoIG5vcgorCSAqIHdoZXRoZXIgd2UgY2FuIHVz ZSB0aGUgSFEgc2NhbGVyIG1vZGUuIEFzc3VtZQorCSAqIHRoZSBiZXN0IGNhc2UuCisJICogRklY TUUgbmVlZCB0byBwcm9wZXJseSBjaGVjayB0aGlzIGxhdGVyLgorCSAqLworCWlmIChJTlRFTF9H RU4oZGV2X3ByaXYpID49IDEwIHx8IElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpIHx8CisJICAgICFp bnRlbF9mb3JtYXRfaW5mb19pc195dXZfc2VtaXBsYW5hcihmYi0+Zm9ybWF0LCBmYi0+bW9kaWZp ZXIpKQorCQlyZXR1cm4gMHgzMDAwMCAtIDE7CisJZWxzZQorCQlyZXR1cm4gMHgyMDAwMCAtIDE7 Cit9CisKK3N0YXRpYyBpbnQgaW50ZWxfcGxhbmVfbWluX3dpZHRoKHN0cnVjdCBpbnRlbF9wbGFu ZSAqcGxhbmUsCisJCQkJIGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAorCQkJCSBp bnQgY29sb3JfcGxhbmUsCisJCQkJIHVuc2lnbmVkIGludCByb3RhdGlvbikKK3sKKwlpZiAocGxh bmUtPm1pbl93aWR0aCkKKwkJcmV0dXJuIHBsYW5lLT5taW5fd2lkdGgoZmIsIGNvbG9yX3BsYW5l LCByb3RhdGlvbik7CisJZWxzZQorCQlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBpbnRlbF9w bGFuZV9tYXhfd2lkdGgoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKKwkJCQkgY29uc3Qgc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJCQkJIGludCBjb2xvcl9wbGFuZSwKKwkJCQkgdW5z aWduZWQgaW50IHJvdGF0aW9uKQoreworCWlmIChwbGFuZS0+bWF4X3dpZHRoKQorCQlyZXR1cm4g cGxhbmUtPm1heF93aWR0aChmYiwgY29sb3JfcGxhbmUsIHJvdGF0aW9uKTsKKwllbHNlCisJCXJl dHVybiBJTlRfTUFYOworfQorCitzdGF0aWMgaW50IGludGVsX3BsYW5lX21heF9oZWlnaHQoc3Ry dWN0IGludGVsX3BsYW5lICpwbGFuZSwKKwkJCQkgIGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiLAorCQkJCSAgaW50IGNvbG9yX3BsYW5lLAorCQkJCSAgdW5zaWduZWQgaW50IHJvdGF0 aW9uKQoreworCWlmIChwbGFuZS0+bWF4X2hlaWdodCkKKwkJcmV0dXJuIHBsYW5lLT5tYXhfaGVp Z2h0KGZiLCBjb2xvcl9wbGFuZSwgcm90YXRpb24pOworCWVsc2UKKwkJcmV0dXJuIElOVF9NQVg7 Cit9CisKK3N0YXRpYyBib29sCitza2xfY2hlY2tfbWFpbl9jY3NfY29vcmRpbmF0ZXMoc3RydWN0 IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSwKKwkJCSAgICAgICBpbnQgbWFpbl94LCBp bnQgbWFpbl95LCB1MzIgbWFpbl9vZmZzZXQsCisJCQkgICAgICAgaW50IGNjc19wbGFuZSkKK3sK Kwljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsK KwlpbnQgYXV4X3ggPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbY2NzX3BsYW5lXS54OworCWlu dCBhdXhfeSA9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjY3NfcGxhbmVdLnk7CisJdTMyIGF1 eF9vZmZzZXQgPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbY2NzX3BsYW5lXS5vZmZzZXQ7CisJ dTMyIGFsaWdubWVudCA9IGludGVsX3N1cmZfYWxpZ25tZW50KGZiLCBjY3NfcGxhbmUpOworCWlu dCBoc3ViOworCWludCB2c3ViOworCisJaW50ZWxfZmJfcGxhbmVfZ2V0X3N1YnNhbXBsaW5nKCZo c3ViLCAmdnN1YiwgZmIsIGNjc19wbGFuZSk7CisJd2hpbGUgKGF1eF9vZmZzZXQgPj0gbWFpbl9v ZmZzZXQgJiYgYXV4X3kgPD0gbWFpbl95KSB7CisJCWludCB4LCB5OworCisJCWlmIChhdXhfeCA9 PSBtYWluX3ggJiYgYXV4X3kgPT0gbWFpbl95KQorCQkJYnJlYWs7CisKKwkJaWYgKGF1eF9vZmZz ZXQgPT0gMCkKKwkJCWJyZWFrOworCisJCXggPSBhdXhfeCAvIGhzdWI7CisJCXkgPSBhdXhfeSAv IHZzdWI7CisJCWF1eF9vZmZzZXQgPSBpbnRlbF9wbGFuZV9hZGp1c3RfYWxpZ25lZF9vZmZzZXQo JngsICZ5LAorCQkJCQkJCSAgICAgICBwbGFuZV9zdGF0ZSwKKwkJCQkJCQkgICAgICAgY2NzX3Bs YW5lLAorCQkJCQkJCSAgICAgICBhdXhfb2Zmc2V0LAorCQkJCQkJCSAgICAgICBhdXhfb2Zmc2V0 IC0KKwkJCQkJCQkJYWxpZ25tZW50KTsKKwkJYXV4X3ggPSB4ICogaHN1YiArIGF1eF94ICUgaHN1 YjsKKwkJYXV4X3kgPSB5ICogdnN1YiArIGF1eF95ICUgdnN1YjsKKwl9CisKKwlpZiAoYXV4X3gg IT0gbWFpbl94IHx8IGF1eF95ICE9IG1haW5feSkKKwkJcmV0dXJuIGZhbHNlOworCisJcGxhbmVf c3RhdGUtPmNvbG9yX3BsYW5lW2Njc19wbGFuZV0ub2Zmc2V0ID0gYXV4X29mZnNldDsKKwlwbGFu ZV9zdGF0ZS0+Y29sb3JfcGxhbmVbY2NzX3BsYW5lXS54ID0gYXV4X3g7CisJcGxhbmVfc3RhdGUt PmNvbG9yX3BsYW5lW2Njc19wbGFuZV0ueSA9IGF1eF95OworCisJcmV0dXJuIHRydWU7Cit9CisK KworaW50IHNrbF9jYWxjX21haW5fc3VyZmFjZV9vZmZzZXQoY29uc3Qgc3RydWN0IGludGVsX3Bs YW5lX3N0YXRlICpwbGFuZV9zdGF0ZSwKKwkJCQkgaW50ICp4LCBpbnQgKnksIHUzMiAqb2Zmc2V0 KQoreworCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0b19pbnRlbF9wbGFuZShwbGFuZV9z dGF0ZS0+dWFwaS5wbGFuZSk7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g dG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOworCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIg KmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOworCWNvbnN0IGludCBhdXhfcGxhbmUgPSBza2xfbWFp bl90b19hdXhfcGxhbmUoZmIsIDApOworCWNvbnN0IHUzMiBhdXhfb2Zmc2V0ID0gcGxhbmVfc3Rh dGUtPmNvbG9yX3BsYW5lW2F1eF9wbGFuZV0ub2Zmc2V0OworCWNvbnN0IHUzMiBhbGlnbm1lbnQg PSBpbnRlbF9zdXJmX2FsaWdubWVudChmYiwgMCk7CisJY29uc3QgaW50IHcgPSBkcm1fcmVjdF93 aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuc3JjKSA+PiAxNjsKKworCWludGVsX2FkZF9mYl9vZmZz ZXRzKHgsIHksIHBsYW5lX3N0YXRlLCAwKTsKKwkqb2Zmc2V0ID0gaW50ZWxfcGxhbmVfY29tcHV0 ZV9hbGlnbmVkX29mZnNldCh4LCB5LCBwbGFuZV9zdGF0ZSwgMCk7CisJaWYgKGRybV9XQVJOX09O KCZkZXZfcHJpdi0+ZHJtLCBhbGlnbm1lbnQgJiYgIWlzX3Bvd2VyX29mXzIoYWxpZ25tZW50KSkp CisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKiBBVVggc3VyZmFjZSBvZmZzZXQgaXMgc3Bl Y2lmaWVkIGFzIHRoZSBkaXN0YW5jZSBmcm9tIHRoZQorCSAqIG1haW4gc3VyZmFjZSBvZmZzZXQs IGFuZCBpdCBtdXN0IGJlIG5vbi1uZWdhdGl2ZS4gTWFrZQorCSAqIHN1cmUgdGhhdCBpcyB3aGF0 IHdlIHdpbGwgZ2V0LgorCSAqLworCWlmIChhdXhfcGxhbmUgJiYgKm9mZnNldCA+IGF1eF9vZmZz ZXQpCisJCSpvZmZzZXQgPSBpbnRlbF9wbGFuZV9hZGp1c3RfYWxpZ25lZF9vZmZzZXQoeCwgeSwg cGxhbmVfc3RhdGUsIDAsCisJCQkJCQkJICAgICpvZmZzZXQsCisJCQkJCQkJICAgIGF1eF9vZmZz ZXQgJiB+KGFsaWdubWVudCAtIDEpKTsKKworCS8qCisJICogV2hlbiB1c2luZyBhbiBYLXRpbGVk IHN1cmZhY2UsIHRoZSBwbGFuZSBibG93cyB1cAorCSAqIGlmIHRoZSB4IG9mZnNldCArIHdpZHRo IGV4Y2VlZCB0aGUgc3RyaWRlLgorCSAqCisJICogVE9ETzogbGluZWFyIGFuZCBZLXRpbGVkIHNl ZW0gZmluZSwgWWYgdW50ZXN0ZWQsCisJICovCisJaWYgKGZiLT5tb2RpZmllciA9PSBJOTE1X0ZP Uk1BVF9NT0RfWF9USUxFRCkgeworCQlpbnQgY3BwID0gZmItPmZvcm1hdC0+Y3BwWzBdOworCisJ CXdoaWxlICgoKnggKyB3KSAqIGNwcCA+IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS5zdHJp ZGUpIHsKKwkJCWlmICgqb2Zmc2V0ID09IDApIHsKKwkJCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYt PmRybSwKKwkJCQkJICAgICJVbmFibGUgdG8gZmluZCBzdWl0YWJsZSBkaXNwbGF5IHN1cmZhY2Ug b2Zmc2V0IGR1ZSB0byBYLXRpbGluZ1xuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisK KwkJCSpvZmZzZXQgPSBpbnRlbF9wbGFuZV9hZGp1c3RfYWxpZ25lZF9vZmZzZXQoeCwgeSwgcGxh bmVfc3RhdGUsIDAsCisJCQkJCQkJCSAgICAqb2Zmc2V0LAorCQkJCQkJCQkgICAgKm9mZnNldCAt IGFsaWdubWVudCk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBza2xf Y2hlY2tfbWFpbl9zdXJmYWNlKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUp Cit7CisJc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSA9IHRvX2ludGVsX3BsYW5lKHBsYW5lX3N0 YXRlLT51YXBpLnBsYW5lKTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0 b19pOTE1KHBsYW5lLT5iYXNlLmRldik7CisJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAq ZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7CisJY29uc3QgdW5zaWduZWQgaW50IHJvdGF0aW9uID0g cGxhbmVfc3RhdGUtPmh3LnJvdGF0aW9uOworCWludCB4ID0gcGxhbmVfc3RhdGUtPnVhcGkuc3Jj LngxID4+IDE2OworCWludCB5ID0gcGxhbmVfc3RhdGUtPnVhcGkuc3JjLnkxID4+IDE2OworCWNv bnN0IGludCB3ID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLnNyYykgPj4gMTY7 CisJY29uc3QgaW50IGggPSBkcm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0YXRlLT51YXBpLnNyYykg Pj4gMTY7CisJY29uc3QgaW50IG1pbl93aWR0aCA9IGludGVsX3BsYW5lX21pbl93aWR0aChwbGFu ZSwgZmIsIDAsIHJvdGF0aW9uKTsKKwljb25zdCBpbnQgbWF4X3dpZHRoID0gaW50ZWxfcGxhbmVf bWF4X3dpZHRoKHBsYW5lLCBmYiwgMCwgcm90YXRpb24pOworCWNvbnN0IGludCBtYXhfaGVpZ2h0 ID0gaW50ZWxfcGxhbmVfbWF4X2hlaWdodChwbGFuZSwgZmIsIDAsIHJvdGF0aW9uKTsKKwljb25z dCBpbnQgYXV4X3BsYW5lID0gc2tsX21haW5fdG9fYXV4X3BsYW5lKGZiLCAwKTsKKwljb25zdCB1 MzIgYWxpZ25tZW50ID0gaW50ZWxfc3VyZl9hbGlnbm1lbnQoZmIsIDApOworCXUzMiBvZmZzZXQ7 CisJaW50IHJldDsKKworCWlmICh3ID4gbWF4X3dpZHRoIHx8IHcgPCBtaW5fd2lkdGggfHwgaCA+ IG1heF9oZWlnaHQpIHsKKwkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCisJCQkgICAgInJl cXVlc3RlZCBZL1JHQiBzb3VyY2Ugc2l6ZSAlZHglZCBvdXRzaWRlIGxpbWl0cyAobWluOiAlZHgx IG1heDogJWR4JWQpXG4iLAorCQkJICAgIHcsIGgsIG1pbl93aWR0aCwgbWF4X3dpZHRoLCBtYXhf aGVpZ2h0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0gc2tsX2NhbGNfbWFpbl9z dXJmYWNlX29mZnNldChwbGFuZV9zdGF0ZSwgJngsICZ5LCAmb2Zmc2V0KTsKKwlpZiAocmV0KQor CQlyZXR1cm4gcmV0OworCisJLyoKKwkgKiBDQ1MgQVVYIHN1cmZhY2UgZG9lc24ndCBoYXZlIGl0 cyBvd24geC95IG9mZnNldHMsIHdlIG11c3QgbWFrZSBzdXJlCisJICogdGhleSBtYXRjaCB3aXRo IHRoZSBtYWluIHN1cmZhY2UgeC95IG9mZnNldHMuCisJICovCisJaWYgKGlzX2Njc19tb2RpZmll cihmYi0+bW9kaWZpZXIpKSB7CisJCXdoaWxlICghc2tsX2NoZWNrX21haW5fY2NzX2Nvb3JkaW5h dGVzKHBsYW5lX3N0YXRlLCB4LCB5LAorCQkJCQkJICAgICAgIG9mZnNldCwgYXV4X3BsYW5lKSkg eworCQkJaWYgKG9mZnNldCA9PSAwKQorCQkJCWJyZWFrOworCisJCQlvZmZzZXQgPSBpbnRlbF9w bGFuZV9hZGp1c3RfYWxpZ25lZF9vZmZzZXQoJngsICZ5LCBwbGFuZV9zdGF0ZSwgMCwKKwkJCQkJ CQkJICAgb2Zmc2V0LCBvZmZzZXQgLSBhbGlnbm1lbnQpOworCQl9CisKKwkJaWYgKHggIT0gcGxh bmVfc3RhdGUtPmNvbG9yX3BsYW5lW2F1eF9wbGFuZV0ueCB8fAorCQkgICAgeSAhPSBwbGFuZV9z dGF0ZS0+Y29sb3JfcGxhbmVbYXV4X3BsYW5lXS55KSB7CisJCQlkcm1fZGJnX2ttcygmZGV2X3By aXYtPmRybSwKKwkJCQkgICAgIlVuYWJsZSB0byBmaW5kIHN1aXRhYmxlIGRpc3BsYXkgc3VyZmFj ZSBvZmZzZXQgZHVlIHRvIENDU1xuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKwor CXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS5vZmZzZXQgPSBvZmZzZXQ7CisJcGxhbmVfc3Rh dGUtPmNvbG9yX3BsYW5lWzBdLnggPSB4OworCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS55 ID0geTsKKworCS8qCisJICogUHV0IHRoZSBmaW5hbCBjb29yZGluYXRlcyBiYWNrIHNvIHRoYXQg dGhlIHNyYworCSAqIGNvb3JkaW5hdGUgY2hlY2tzIHdpbGwgc2VlIHRoZSByaWdodCB2YWx1ZXMu CisJICovCisJZHJtX3JlY3RfdHJhbnNsYXRlX3RvKCZwbGFuZV9zdGF0ZS0+dWFwaS5zcmMsCisJ CQkgICAgICB4IDw8IDE2LCB5IDw8IDE2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50 IHNrbF9jaGVja19udjEyX2F1eF9zdXJmYWNlKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxh bmVfc3RhdGUpCit7CisJc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSA9IHRvX2ludGVsX3BsYW5l KHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lKTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKKwljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKKwl1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBw bGFuZV9zdGF0ZS0+aHcucm90YXRpb247CisJaW50IHV2X3BsYW5lID0gMTsKKwlpbnQgbWF4X3dp ZHRoID0gaW50ZWxfcGxhbmVfbWF4X3dpZHRoKHBsYW5lLCBmYiwgdXZfcGxhbmUsIHJvdGF0aW9u KTsKKwlpbnQgbWF4X2hlaWdodCA9IGludGVsX3BsYW5lX21heF9oZWlnaHQocGxhbmUsIGZiLCB1 dl9wbGFuZSwgcm90YXRpb24pOworCWludCB4ID0gcGxhbmVfc3RhdGUtPnVhcGkuc3JjLngxID4+ IDE3OworCWludCB5ID0gcGxhbmVfc3RhdGUtPnVhcGkuc3JjLnkxID4+IDE3OworCWludCB3ID0g ZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLnNyYykgPj4gMTc7CisJaW50IGggPSBk cm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0YXRlLT51YXBpLnNyYykgPj4gMTc7CisJdTMyIG9mZnNl dDsKKworCS8qIEZJWE1FIG5vdCBxdWl0ZSBzdXJlIGhvdy9pZiB0aGVzZSBhcHBseSB0byB0aGUg Y2hyb21hIHBsYW5lICovCisJaWYgKHcgPiBtYXhfd2lkdGggfHwgaCA+IG1heF9oZWlnaHQpIHsK KwkJZHJtX2RiZ19rbXMoJmk5MTUtPmRybSwKKwkJCSAgICAiQ2JDciBzb3VyY2Ugc2l6ZSAlZHgl ZCB0b28gYmlnIChsaW1pdCAlZHglZClcbiIsCisJCQkgICAgdywgaCwgbWF4X3dpZHRoLCBtYXhf aGVpZ2h0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaW50ZWxfYWRkX2ZiX29mZnNldHMo JngsICZ5LCBwbGFuZV9zdGF0ZSwgdXZfcGxhbmUpOworCW9mZnNldCA9IGludGVsX3BsYW5lX2Nv bXB1dGVfYWxpZ25lZF9vZmZzZXQoJngsICZ5LAorCQkJCQkJICAgIHBsYW5lX3N0YXRlLCB1dl9w bGFuZSk7CisKKwlpZiAoaXNfY2NzX21vZGlmaWVyKGZiLT5tb2RpZmllcikpIHsKKwkJaW50IGNj c19wbGFuZSA9IG1haW5fdG9fY2NzX3BsYW5lKGZiLCB1dl9wbGFuZSk7CisJCXUzMiBhdXhfb2Zm c2V0ID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2Njc19wbGFuZV0ub2Zmc2V0OworCQl1MzIg YWxpZ25tZW50ID0gaW50ZWxfc3VyZl9hbGlnbm1lbnQoZmIsIHV2X3BsYW5lKTsKKworCQlpZiAo b2Zmc2V0ID4gYXV4X29mZnNldCkKKwkJCW9mZnNldCA9IGludGVsX3BsYW5lX2FkanVzdF9hbGln bmVkX29mZnNldCgmeCwgJnksCisJCQkJCQkJCSAgIHBsYW5lX3N0YXRlLAorCQkJCQkJCQkgICB1 dl9wbGFuZSwKKwkJCQkJCQkJICAgb2Zmc2V0LAorCQkJCQkJCQkgICBhdXhfb2Zmc2V0ICYgfihh bGlnbm1lbnQgLSAxKSk7CisKKwkJd2hpbGUgKCFza2xfY2hlY2tfbWFpbl9jY3NfY29vcmRpbmF0 ZXMocGxhbmVfc3RhdGUsIHgsIHksCisJCQkJCQkgICAgICAgb2Zmc2V0LCBjY3NfcGxhbmUpKSB7 CisJCQlpZiAob2Zmc2V0ID09IDApCisJCQkJYnJlYWs7CisKKwkJCW9mZnNldCA9IGludGVsX3Bs YW5lX2FkanVzdF9hbGlnbmVkX29mZnNldCgmeCwgJnksCisJCQkJCQkJCSAgIHBsYW5lX3N0YXRl LAorCQkJCQkJCQkgICB1dl9wbGFuZSwKKwkJCQkJCQkJICAgb2Zmc2V0LCBvZmZzZXQgLSBhbGln bm1lbnQpOworCQl9CisKKwkJaWYgKHggIT0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2Njc19w bGFuZV0ueCB8fAorCQkgICAgeSAhPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbY2NzX3BsYW5l XS55KSB7CisJCQlkcm1fZGJnX2ttcygmaTkxNS0+ZHJtLAorCQkJCSAgICAiVW5hYmxlIHRvIGZp bmQgc3VpdGFibGUgZGlzcGxheSBzdXJmYWNlIG9mZnNldCBkdWUgdG8gQ0NTXG4iKTsKKwkJCXJl dHVybiAtRUlOVkFMOworCQl9CisJfQorCisJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW3V2X3Bs YW5lXS5vZmZzZXQgPSBvZmZzZXQ7CisJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW3V2X3BsYW5l XS54ID0geDsKKwlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbdXZfcGxhbmVdLnkgPSB5OworCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2tsX2NoZWNrX2Njc19hdXhfc3VyZmFjZShzdHJ1 Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQoreworCWNvbnN0IHN0cnVjdCBkcm1f ZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOworCWludCBzcmNfeCA9IHBsYW5l X3N0YXRlLT51YXBpLnNyYy54MSA+PiAxNjsKKwlpbnQgc3JjX3kgPSBwbGFuZV9zdGF0ZS0+dWFw aS5zcmMueTEgPj4gMTY7CisJdTMyIG9mZnNldDsKKwlpbnQgY2NzX3BsYW5lOworCisJZm9yIChj Y3NfcGxhbmUgPSAwOyBjY3NfcGxhbmUgPCBmYi0+Zm9ybWF0LT5udW1fcGxhbmVzOyBjY3NfcGxh bmUrKykgeworCQlpbnQgbWFpbl9oc3ViLCBtYWluX3ZzdWI7CisJCWludCBoc3ViLCB2c3ViOwor CQlpbnQgeCwgeTsKKworCQlpZiAoIWlzX2Njc19wbGFuZShmYiwgY2NzX3BsYW5lKSkKKwkJCWNv bnRpbnVlOworCisJCWludGVsX2ZiX3BsYW5lX2dldF9zdWJzYW1wbGluZygmbWFpbl9oc3ViLCAm bWFpbl92c3ViLCBmYiwKKwkJCQkJICAgICAgIHNrbF9jY3NfdG9fbWFpbl9wbGFuZShmYiwgY2Nz X3BsYW5lKSk7CisJCWludGVsX2ZiX3BsYW5lX2dldF9zdWJzYW1wbGluZygmaHN1YiwgJnZzdWIs IGZiLCBjY3NfcGxhbmUpOworCisJCWhzdWIgKj0gbWFpbl9oc3ViOworCQl2c3ViICo9IG1haW5f dnN1YjsKKwkJeCA9IHNyY194IC8gaHN1YjsKKwkJeSA9IHNyY195IC8gdnN1YjsKKworCQlpbnRl bF9hZGRfZmJfb2Zmc2V0cygmeCwgJnksIHBsYW5lX3N0YXRlLCBjY3NfcGxhbmUpOworCisJCW9m ZnNldCA9IGludGVsX3BsYW5lX2NvbXB1dGVfYWxpZ25lZF9vZmZzZXQoJngsICZ5LAorCQkJCQkJ CSAgICBwbGFuZV9zdGF0ZSwKKwkJCQkJCQkgICAgY2NzX3BsYW5lKTsKKworCQlwbGFuZV9zdGF0 ZS0+Y29sb3JfcGxhbmVbY2NzX3BsYW5lXS5vZmZzZXQgPSBvZmZzZXQ7CisJCXBsYW5lX3N0YXRl LT5jb2xvcl9wbGFuZVtjY3NfcGxhbmVdLnggPSAoeCAqIGhzdWIgKworCQkJCQkJCSBzcmNfeCAl IGhzdWIpIC8KKwkJCQkJCQltYWluX2hzdWI7CisJCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtj Y3NfcGxhbmVdLnkgPSAoeSAqIHZzdWIgKworCQkJCQkJCSBzcmNfeSAlIHZzdWIpIC8KKwkJCQkJ CQltYWluX3ZzdWI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2tsX2NoZWNr X3BsYW5lX3N1cmZhY2Uoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sK Kwljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsK KwlpbnQgcmV0LCBpOworCisJcmV0ID0gaW50ZWxfcGxhbmVfY29tcHV0ZV9ndHQocGxhbmVfc3Rh dGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoIXBsYW5lX3N0YXRlLT51YXBp LnZpc2libGUpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBIYW5kbGUgdGhlIEFVWCBzdXJmYWNl IGZpcnN0IHNpbmNlIHRoZSBtYWluIHN1cmZhY2Ugc2V0dXAgZGVwZW5kcyBvbgorCSAqIGl0Lgor CSAqLworCWlmIChpc19jY3NfbW9kaWZpZXIoZmItPm1vZGlmaWVyKSkgeworCQlyZXQgPSBza2xf Y2hlY2tfY2NzX2F1eF9zdXJmYWNlKHBsYW5lX3N0YXRlKTsKKwkJaWYgKHJldCkKKwkJCXJldHVy biByZXQ7CisJfQorCisJaWYgKGludGVsX2Zvcm1hdF9pbmZvX2lzX3l1dl9zZW1pcGxhbmFyKGZi LT5mb3JtYXQsCisJCQkJCQlmYi0+bW9kaWZpZXIpKSB7CisJCXJldCA9IHNrbF9jaGVja19udjEy X2F1eF9zdXJmYWNlKHBsYW5lX3N0YXRlKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJ fQorCisJZm9yIChpID0gZmItPmZvcm1hdC0+bnVtX3BsYW5lczsgaSA8IEFSUkFZX1NJWkUocGxh bmVfc3RhdGUtPmNvbG9yX3BsYW5lKTsgaSsrKSB7CisJCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFu ZVtpXS5vZmZzZXQgPSAwOworCQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbaV0ueCA9IDA7CisJ CXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtpXS55ID0gMDsKKwl9CisKKwlyZXQgPSBza2xfY2hl Y2tfbWFpbl9zdXJmYWNlKHBsYW5lX3N0YXRlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0Owor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBib29sIGludGVsX2ZiX3NjYWxhYmxlKGNvbnN0IHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKQoreworCWlmICghZmIpCisJCXJldHVybiBmYWxzZTsK KworCXN3aXRjaCAoZmItPmZvcm1hdC0+Zm9ybWF0KSB7CisJY2FzZSBEUk1fRk9STUFUX0M4Ogor CQlyZXR1cm4gZmFsc2U7CisJY2FzZSBEUk1fRk9STUFUX1hSR0IxNjE2MTYxNkY6CisJY2FzZSBE Uk1fRk9STUFUX0FSR0IxNjE2MTYxNkY6CisJY2FzZSBEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkY6 CisJY2FzZSBEUk1fRk9STUFUX0FCR1IxNjE2MTYxNkY6CisJCXJldHVybiBJTlRFTF9HRU4odG9f aTkxNShmYi0+ZGV2KSkgPj0gMTE7CisJZGVmYXVsdDoKKwkJcmV0dXJuIHRydWU7CisJfQorfQor CitzdGF0aWMgaW50IHNrbF9wbGFuZV9jaGVjayhzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZSwKKwkJCSAgIHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7 CisJc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSA9IHRvX2ludGVsX3BsYW5lKHBsYW5lX3N0YXRl LT51YXBpLnBsYW5lKTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19p OTE1KHBsYW5lLT5iYXNlLmRldik7CisJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIg PSBwbGFuZV9zdGF0ZS0+aHcuZmI7CisJaW50IG1pbl9zY2FsZSA9IERSTV9QTEFORV9IRUxQRVJf Tk9fU0NBTElORzsKKwlpbnQgbWF4X3NjYWxlID0gRFJNX1BMQU5FX0hFTFBFUl9OT19TQ0FMSU5H OworCWludCByZXQ7CisKKwlyZXQgPSBza2xfcGxhbmVfY2hlY2tfZmIoY3J0Y19zdGF0ZSwgcGxh bmVfc3RhdGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiB1c2Ugc2NhbGVyIHdo ZW4gY29sb3JrZXkgaXMgbm90IHJlcXVpcmVkICovCisJaWYgKCFwbGFuZV9zdGF0ZS0+Y2tleS5m bGFncyAmJiBpbnRlbF9mYl9zY2FsYWJsZShmYikpIHsKKwkJbWluX3NjYWxlID0gMTsKKwkJbWF4 X3NjYWxlID0gc2tsX3BsYW5lX21heF9zY2FsZShkZXZfcHJpdiwgZmIpOworCX0KKworCXJldCA9 IGludGVsX2F0b21pY19wbGFuZV9jaGVja19jbGlwcGluZyhwbGFuZV9zdGF0ZSwgY3J0Y19zdGF0 ZSwKKwkJCQkJCW1pbl9zY2FsZSwgbWF4X3NjYWxlLCB0cnVlKTsKKwlpZiAocmV0KQorCQlyZXR1 cm4gcmV0OworCisJcmV0ID0gc2tsX2NoZWNrX3BsYW5lX3N1cmZhY2UocGxhbmVfc3RhdGUpOwor CWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoIXBsYW5lX3N0YXRlLT51YXBpLnZpc2li bGUpCisJCXJldHVybiAwOworCisJcmV0ID0gc2tsX3BsYW5lX2NoZWNrX2RzdF9jb29yZGluYXRl cyhjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwor CXJldCA9IGludGVsX3BsYW5lX2NoZWNrX3NyY19jb29yZGluYXRlcyhwbGFuZV9zdGF0ZSk7CisJ aWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHNrbF9wbGFuZV9jaGVja19udjEyX3Jv dGF0aW9uKHBsYW5lX3N0YXRlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogSFcg b25seSBoYXMgOCBiaXRzIHBpeGVsIHByZWNpc2lvbiwgZGlzYWJsZSBwbGFuZSBpZiBpbnZpc2li bGUgKi8KKwlpZiAoIShwbGFuZV9zdGF0ZS0+aHcuYWxwaGEgPj4gOCkpCisJCXBsYW5lX3N0YXRl LT51YXBpLnZpc2libGUgPSBmYWxzZTsKKworCXBsYW5lX3N0YXRlLT5jdGwgPSBza2xfcGxhbmVf Y3RsKGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlKTsKKworCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYp ID49IDEwIHx8IElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpKQorCQlwbGFuZV9zdGF0ZS0+Y29sb3Jf Y3RsID0gZ2xrX3BsYW5lX2NvbG9yX2N0bChjcnRjX3N0YXRlLAorCQkJCQkJCSAgICAgcGxhbmVf c3RhdGUpOworCisJaWYgKGludGVsX2Zvcm1hdF9pbmZvX2lzX3l1dl9zZW1pcGxhbmFyKGZiLT5m b3JtYXQsIGZiLT5tb2RpZmllcikgJiYKKwkgICAgaWNsX2lzX2hkcl9wbGFuZShkZXZfcHJpdiwg cGxhbmUtPmlkKSkKKwkJLyogRW5hYmxlIGFuZCB1c2UgTVBFRy0yIGNocm9tYSBzaXRpbmcgKi8K KwkJcGxhbmVfc3RhdGUtPmN1c19jdGwgPSBQTEFORV9DVVNfRU5BQkxFIHwKKwkJCVBMQU5FX0NV U19IUEhBU0VfMCB8CisJCQlQTEFORV9DVVNfVlBIQVNFX1NJR05fTkVHQVRJVkUgfCBQTEFORV9D VVNfVlBIQVNFXzBfMjU7CisJZWxzZQorCQlwbGFuZV9zdGF0ZS0+Y3VzX2N0bCA9IDA7CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGJvb2wgc2tsX3BsYW5lX2hhc19mYmMoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJICAgICAgZW51bSBwaXBlIHBpcGUsIGVudW0gcGxh bmVfaWQgcGxhbmVfaWQpCit7CisJaWYgKCFIQVNfRkJDKGRldl9wcml2KSkKKwkJcmV0dXJuIGZh bHNlOworCisJcmV0dXJuIHBpcGUgPT0gUElQRV9BICYmIHBsYW5lX2lkID09IFBMQU5FX1BSSU1B Ulk7Cit9CisKK3N0YXRpYyBib29sIHNrbF9wbGFuZV9oYXNfcGxhbmFyKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkgZW51bSBwaXBlIHBpcGUsIGVudW0gcGxhbmVfaWQg cGxhbmVfaWQpCit7CisJLyogRGlzcGxheSBXQSAjMDg3MDogc2tsLCBieHQgKi8KKwlpZiAoSVNf U0tZTEFLRShkZXZfcHJpdikgfHwgSVNfQlJPWFRPTihkZXZfcHJpdikpCisJCXJldHVybiBmYWxz ZTsKKworCWlmIChJU19HRU4oZGV2X3ByaXYsIDkpICYmICFJU19HRU1JTklMQUtFKGRldl9wcml2 KSAmJiBwaXBlID09IFBJUEVfQykKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKHBsYW5lX2lkICE9 IFBMQU5FX1BSSU1BUlkgJiYgcGxhbmVfaWQgIT0gUExBTkVfU1BSSVRFMCkKKwkJcmV0dXJuIGZh bHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBjb25zdCB1MzIgKnNrbF9nZXRfcGxh bmVfZm9ybWF0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJCWVudW0g cGlwZSBwaXBlLCBlbnVtIHBsYW5lX2lkIHBsYW5lX2lkLAorCQkJCQlpbnQgKm51bV9mb3JtYXRz KQoreworCWlmIChza2xfcGxhbmVfaGFzX3BsYW5hcihkZXZfcHJpdiwgcGlwZSwgcGxhbmVfaWQp KSB7CisJCSpudW1fZm9ybWF0cyA9IEFSUkFZX1NJWkUoc2tsX3BsYW5hcl9mb3JtYXRzKTsKKwkJ cmV0dXJuIHNrbF9wbGFuYXJfZm9ybWF0czsKKwl9IGVsc2UgeworCQkqbnVtX2Zvcm1hdHMgPSBB UlJBWV9TSVpFKHNrbF9wbGFuZV9mb3JtYXRzKTsKKwkJcmV0dXJuIHNrbF9wbGFuZV9mb3JtYXRz OworCX0KK30KKworc3RhdGljIGNvbnN0IHUzMiAqZ2xrX2dldF9wbGFuZV9mb3JtYXRzKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkJZW51bSBwaXBlIHBpcGUsIGVudW0g cGxhbmVfaWQgcGxhbmVfaWQsCisJCQkJCWludCAqbnVtX2Zvcm1hdHMpCit7CisJaWYgKHNrbF9w bGFuZV9oYXNfcGxhbmFyKGRldl9wcml2LCBwaXBlLCBwbGFuZV9pZCkpIHsKKwkJKm51bV9mb3Jt YXRzID0gQVJSQVlfU0laRShnbGtfcGxhbmFyX2Zvcm1hdHMpOworCQlyZXR1cm4gZ2xrX3BsYW5h cl9mb3JtYXRzOworCX0gZWxzZSB7CisJCSpudW1fZm9ybWF0cyA9IEFSUkFZX1NJWkUoc2tsX3Bs YW5lX2Zvcm1hdHMpOworCQlyZXR1cm4gc2tsX3BsYW5lX2Zvcm1hdHM7CisJfQorfQorCitzdGF0 aWMgY29uc3QgdTMyICppY2xfZ2V0X3BsYW5lX2Zvcm1hdHMoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LAorCQkJCQllbnVtIHBpcGUgcGlwZSwgZW51bSBwbGFuZV9pZCBwbGFuZV9p ZCwKKwkJCQkJaW50ICpudW1fZm9ybWF0cykKK3sKKwlpZiAoaWNsX2lzX2hkcl9wbGFuZShkZXZf cHJpdiwgcGxhbmVfaWQpKSB7CisJCSpudW1fZm9ybWF0cyA9IEFSUkFZX1NJWkUoaWNsX2hkcl9w bGFuZV9mb3JtYXRzKTsKKwkJcmV0dXJuIGljbF9oZHJfcGxhbmVfZm9ybWF0czsKKwl9IGVsc2Ug aWYgKGljbF9pc19udjEyX3lfcGxhbmUoZGV2X3ByaXYsIHBsYW5lX2lkKSkgeworCQkqbnVtX2Zv cm1hdHMgPSBBUlJBWV9TSVpFKGljbF9zZHJfeV9wbGFuZV9mb3JtYXRzKTsKKwkJcmV0dXJuIGlj bF9zZHJfeV9wbGFuZV9mb3JtYXRzOworCX0gZWxzZSB7CisJCSpudW1fZm9ybWF0cyA9IEFSUkFZ X1NJWkUoaWNsX3Nkcl91dl9wbGFuZV9mb3JtYXRzKTsKKwkJcmV0dXJuIGljbF9zZHJfdXZfcGxh bmVfZm9ybWF0czsKKwl9Cit9CisKK3N0YXRpYyBib29sIHNrbF9wbGFuZV9oYXNfY2NzKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCSAgICAgIGVudW0gcGlwZSBwaXBlLCBl bnVtIHBsYW5lX2lkIHBsYW5lX2lkKQoreworCWlmIChwbGFuZV9pZCA9PSBQTEFORV9DVVJTT1Ip CisJCXJldHVybiBmYWxzZTsKKworCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwKQorCQly ZXR1cm4gdHJ1ZTsKKworCWlmIChJU19HRU1JTklMQUtFKGRldl9wcml2KSkKKwkJcmV0dXJuIHBp cGUgIT0gUElQRV9DOworCisJcmV0dXJuIHBpcGUgIT0gUElQRV9DICYmCisJCShwbGFuZV9pZCA9 PSBQTEFORV9QUklNQVJZIHx8CisJCSBwbGFuZV9pZCA9PSBQTEFORV9TUFJJVEUwKTsKK30KKwor c3RhdGljIGJvb2wgc2tsX3BsYW5lX2Zvcm1hdF9tb2Rfc3VwcG9ydGVkKHN0cnVjdCBkcm1fcGxh bmUgKl9wbGFuZSwKKwkJCQkJICAgdTMyIGZvcm1hdCwgdTY0IG1vZGlmaWVyKQoreworCXN0cnVj dCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0b19pbnRlbF9wbGFuZShfcGxhbmUpOworCisJc3dpdGNo IChtb2RpZmllcikgeworCWNhc2UgRFJNX0ZPUk1BVF9NT0RfTElORUFSOgorCWNhc2UgSTkxNV9G T1JNQVRfTU9EX1hfVElMRUQ6CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRDoKKwljYXNl IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRDoKKwkJYnJlYWs7CisJY2FzZSBJOTE1X0ZPUk1BVF9N T0RfWV9USUxFRF9DQ1M6CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NTOgorCQlp ZiAoIXBsYW5lLT5oYXNfY2NzKQorCQkJcmV0dXJuIGZhbHNlOworCQlicmVhazsKKwlkZWZhdWx0 OgorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJc3dpdGNoIChmb3JtYXQpIHsKKwljYXNlIERSTV9G T1JNQVRfWFJHQjg4ODg6CisJY2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4OgorCWNhc2UgRFJNX0ZP Uk1BVF9BUkdCODg4ODoKKwljYXNlIERSTV9GT1JNQVRfQUJHUjg4ODg6CisJCWlmIChpc19jY3Nf bW9kaWZpZXIobW9kaWZpZXIpKQorCQkJcmV0dXJuIHRydWU7CisJCWZhbGx0aHJvdWdoOworCWNh c2UgRFJNX0ZPUk1BVF9SR0I1NjU6CisJY2FzZSBEUk1fRk9STUFUX1hSR0IyMTAxMDEwOgorCWNh c2UgRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMDoKKwljYXNlIERSTV9GT1JNQVRfQVJHQjIxMDEwMTA6 CisJY2FzZSBEUk1fRk9STUFUX0FCR1IyMTAxMDEwOgorCWNhc2UgRFJNX0ZPUk1BVF9ZVVlWOgor CWNhc2UgRFJNX0ZPUk1BVF9ZVllVOgorCWNhc2UgRFJNX0ZPUk1BVF9VWVZZOgorCWNhc2UgRFJN X0ZPUk1BVF9WWVVZOgorCWNhc2UgRFJNX0ZPUk1BVF9OVjEyOgorCWNhc2UgRFJNX0ZPUk1BVF9Y WVVWODg4ODoKKwljYXNlIERSTV9GT1JNQVRfUDAxMDoKKwljYXNlIERSTV9GT1JNQVRfUDAxMjoK KwljYXNlIERSTV9GT1JNQVRfUDAxNjoKKwljYXNlIERSTV9GT1JNQVRfWFZZVTIxMDEwMTA6CisJ CWlmIChtb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQpCisJCQlyZXR1cm4gdHJ1 ZTsKKwkJZmFsbHRocm91Z2g7CisJY2FzZSBEUk1fRk9STUFUX0M4OgorCWNhc2UgRFJNX0ZPUk1B VF9YQkdSMTYxNjE2MTZGOgorCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMTYxNjE2MTZGOgorCWNhc2Ug RFJNX0ZPUk1BVF9YUkdCMTYxNjE2MTZGOgorCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMTYxNjE2MTZG OgorCWNhc2UgRFJNX0ZPUk1BVF9ZMjEwOgorCWNhc2UgRFJNX0ZPUk1BVF9ZMjEyOgorCWNhc2Ug RFJNX0ZPUk1BVF9ZMjE2OgorCWNhc2UgRFJNX0ZPUk1BVF9YVllVMTJfMTYxNjE2MTY6CisJY2Fz ZSBEUk1fRk9STUFUX1hWWVUxNjE2MTYxNjoKKwkJaWYgKG1vZGlmaWVyID09IERSTV9GT1JNQVRf TU9EX0xJTkVBUiB8fAorCQkgICAgbW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQg fHwKKwkJICAgIG1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEKQorCQkJcmV0dXJu IHRydWU7CisJCWZhbGx0aHJvdWdoOworCWRlZmF1bHQ6CisJCXJldHVybiBmYWxzZTsKKwl9Cit9 CisKK3N0YXRpYyBib29sIGdlbjEyX3BsYW5lX3N1cHBvcnRzX21jX2NjcyhzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJCWVudW0gcGxhbmVfaWQgcGxhbmVfaWQpCit7CisJ LyogV2FfMTQwMTA0NzcwMDg6dGdsW2EwLi5jMF0scmtsW2FsbF0sZGcxW2FsbF0gKi8KKwlpZiAo SVNfREcxKGRldl9wcml2KSB8fCBJU19ST0NLRVRMQUtFKGRldl9wcml2KSB8fAorCSAgICBJU19U R0xfRElTUF9SRVZJRChkZXZfcHJpdiwgVEdMX1JFVklEX0EwLCBUR0xfUkVWSURfQzApKQorCQly ZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gcGxhbmVfaWQgPCBQTEFORV9TUFJJVEU0OworfQorCitz dGF0aWMgYm9vbCBnZW4xMl9wbGFuZV9mb3JtYXRfbW9kX3N1cHBvcnRlZChzdHJ1Y3QgZHJtX3Bs YW5lICpfcGxhbmUsCisJCQkJCSAgICAgdTMyIGZvcm1hdCwgdTY0IG1vZGlmaWVyKQoreworCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoX3BsYW5lLT5kZXYpOwor CXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0b19pbnRlbF9wbGFuZShfcGxhbmUpOworCisJ c3dpdGNoIChtb2RpZmllcikgeworCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJf TUNfQ0NTOgorCQlpZiAoIWdlbjEyX3BsYW5lX3N1cHBvcnRzX21jX2NjcyhkZXZfcHJpdiwgcGxh bmUtPmlkKSkKKwkJCXJldHVybiBmYWxzZTsKKwkJZmFsbHRocm91Z2g7CisJY2FzZSBEUk1fRk9S TUFUX01PRF9MSU5FQVI6CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRDoKKwljYXNlIEk5 MTVfRk9STUFUX01PRF9ZX1RJTEVEOgorCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VO MTJfUkNfQ0NTOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJ c3dpdGNoIChmb3JtYXQpIHsKKwljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6CisJY2FzZSBEUk1f Rk9STUFUX1hCR1I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoKKwljYXNlIERSTV9G T1JNQVRfQUJHUjg4ODg6CisJCWlmIChpc19jY3NfbW9kaWZpZXIobW9kaWZpZXIpKQorCQkJcmV0 dXJuIHRydWU7CisJCWZhbGx0aHJvdWdoOworCWNhc2UgRFJNX0ZPUk1BVF9ZVVlWOgorCWNhc2Ug RFJNX0ZPUk1BVF9ZVllVOgorCWNhc2UgRFJNX0ZPUk1BVF9VWVZZOgorCWNhc2UgRFJNX0ZPUk1B VF9WWVVZOgorCWNhc2UgRFJNX0ZPUk1BVF9OVjEyOgorCWNhc2UgRFJNX0ZPUk1BVF9YWVVWODg4 ODoKKwljYXNlIERSTV9GT1JNQVRfUDAxMDoKKwljYXNlIERSTV9GT1JNQVRfUDAxMjoKKwljYXNl IERSTV9GT1JNQVRfUDAxNjoKKwkJaWYgKG1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZX1RJ TEVEX0dFTjEyX01DX0NDUykKKwkJCXJldHVybiB0cnVlOworCQlmYWxsdGhyb3VnaDsKKwljYXNl IERSTV9GT1JNQVRfUkdCNTY1OgorCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMjEwMTAxMDoKKwljYXNl IERSTV9GT1JNQVRfWEJHUjIxMDEwMTA6CisJY2FzZSBEUk1fRk9STUFUX0FSR0IyMTAxMDEwOgor CWNhc2UgRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMDoKKwljYXNlIERSTV9GT1JNQVRfWFZZVTIxMDEw MTA6CisJY2FzZSBEUk1fRk9STUFUX0M4OgorCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMTYxNjE2MTZG OgorCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMTYxNjE2MTZGOgorCWNhc2UgRFJNX0ZPUk1BVF9YUkdC MTYxNjE2MTZGOgorCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMTYxNjE2MTZGOgorCWNhc2UgRFJNX0ZP Uk1BVF9ZMjEwOgorCWNhc2UgRFJNX0ZPUk1BVF9ZMjEyOgorCWNhc2UgRFJNX0ZPUk1BVF9ZMjE2 OgorCWNhc2UgRFJNX0ZPUk1BVF9YVllVMTJfMTYxNjE2MTY6CisJY2FzZSBEUk1fRk9STUFUX1hW WVUxNjE2MTYxNjoKKwkJaWYgKG1vZGlmaWVyID09IERSTV9GT1JNQVRfTU9EX0xJTkVBUiB8fAor CQkgICAgbW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQgfHwKKwkJICAgIG1vZGlm aWVyID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEKQorCQkJcmV0dXJuIHRydWU7CisJCWZhbGx0 aHJvdWdoOworCWRlZmF1bHQ6CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CisKK3N0YXRpYyBjb25z dCB1NjQgKmdlbjEyX2dldF9wbGFuZV9tb2RpZmllcnMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LAorCQkJCQkgICAgZW51bSBwbGFuZV9pZCBwbGFuZV9pZCkKK3sKKwlpZiAoZ2Vu MTJfcGxhbmVfc3VwcG9ydHNfbWNfY2NzKGRldl9wcml2LCBwbGFuZV9pZCkpCisJCXJldHVybiBn ZW4xMl9wbGFuZV9mb3JtYXRfbW9kaWZpZXJzX21jX2NjczsKKwllbHNlCisJCXJldHVybiBnZW4x Ml9wbGFuZV9mb3JtYXRfbW9kaWZpZXJzX3JjX2NjczsKK30KKworc3RhdGljIGNvbnN0IHN0cnVj dCBkcm1fcGxhbmVfZnVuY3Mgc2tsX3BsYW5lX2Z1bmNzID0geworCS51cGRhdGVfcGxhbmUgPSBk cm1fYXRvbWljX2hlbHBlcl91cGRhdGVfcGxhbmUsCisJLmRpc2FibGVfcGxhbmUgPSBkcm1fYXRv bWljX2hlbHBlcl9kaXNhYmxlX3BsYW5lLAorCS5kZXN0cm95ID0gaW50ZWxfcGxhbmVfZGVzdHJv eSwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGludGVsX3BsYW5lX2R1cGxpY2F0ZV9zdGF0 ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBpbnRlbF9wbGFuZV9kZXN0cm95X3N0YXRlLAor CS5mb3JtYXRfbW9kX3N1cHBvcnRlZCA9IHNrbF9wbGFuZV9mb3JtYXRfbW9kX3N1cHBvcnRlZCwK K307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIGdlbjEyX3BsYW5lX2Z1 bmNzID0geworCS51cGRhdGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl91cGRhdGVfcGxhbmUs CisJLmRpc2FibGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl9kaXNhYmxlX3BsYW5lLAorCS5k ZXN0cm95ID0gaW50ZWxfcGxhbmVfZGVzdHJveSwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9 IGludGVsX3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBp bnRlbF9wbGFuZV9kZXN0cm95X3N0YXRlLAorCS5mb3JtYXRfbW9kX3N1cHBvcnRlZCA9IGdlbjEy X3BsYW5lX2Zvcm1hdF9tb2Rfc3VwcG9ydGVkLAorfTsKKworc3RhdGljIHZvaWQKK3NrbF9wbGFu ZV9lbmFibGVfZmxpcF9kb25lKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUpCit7CisJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7CisJZW51 bSBwaXBlIHBpcGUgPSBwbGFuZS0+cGlwZTsKKworCXNwaW5fbG9ja19pcnEoJmk5MTUtPmlycV9s b2NrKTsKKwliZHdfZW5hYmxlX3BpcGVfaXJxKGk5MTUsIHBpcGUsIEdFTjlfUElQRV9QTEFORV9G TElQX0RPTkUocGxhbmUtPmlkKSk7CisJc3Bpbl91bmxvY2tfaXJxKCZpOTE1LT5pcnFfbG9jayk7 Cit9CisKK3N0YXRpYyB2b2lkCitza2xfcGxhbmVfZGlzYWJsZV9mbGlwX2RvbmUoc3RydWN0IGlu dGVsX3BsYW5lICpwbGFuZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRv X2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKKwllbnVtIHBpcGUgcGlwZSA9IHBsYW5lLT5waXBlOwor CisJc3Bpbl9sb2NrX2lycSgmaTkxNS0+aXJxX2xvY2spOworCWJkd19kaXNhYmxlX3BpcGVfaXJx KGk5MTUsIHBpcGUsIEdFTjlfUElQRV9QTEFORV9GTElQX0RPTkUocGxhbmUtPmlkKSk7CisJc3Bp bl91bmxvY2tfaXJxKCZpOTE1LT5pcnFfbG9jayk7Cit9CisKK3N0cnVjdCBpbnRlbF9wbGFuZSAq Citza2xfdW5pdmVyc2FsX3BsYW5lX2NyZWF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYsCisJCQkgICBlbnVtIHBpcGUgcGlwZSwgZW51bSBwbGFuZV9pZCBwbGFuZV9pZCkKK3sK Kwljb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzICpwbGFuZV9mdW5jczsKKwlzdHJ1Y3QgaW50 ZWxfcGxhbmUgKnBsYW5lOworCWVudW0gZHJtX3BsYW5lX3R5cGUgcGxhbmVfdHlwZTsKKwl1bnNp Z25lZCBpbnQgc3VwcG9ydGVkX3JvdGF0aW9uczsKKwl1bnNpZ25lZCBpbnQgc3VwcG9ydGVkX2Nz YzsKKwljb25zdCB1NjQgKm1vZGlmaWVyczsKKwljb25zdCB1MzIgKmZvcm1hdHM7CisJaW50IG51 bV9mb3JtYXRzOworCWludCByZXQ7CisKKwlwbGFuZSA9IGludGVsX3BsYW5lX2FsbG9jKCk7CisJ aWYgKElTX0VSUihwbGFuZSkpCisJCXJldHVybiBwbGFuZTsKKworCXBsYW5lLT5waXBlID0gcGlw ZTsKKwlwbGFuZS0+aWQgPSBwbGFuZV9pZDsKKwlwbGFuZS0+ZnJvbnRidWZmZXJfYml0ID0gSU5U RUxfRlJPTlRCVUZGRVIocGlwZSwgcGxhbmVfaWQpOworCisJcGxhbmUtPmhhc19mYmMgPSBza2xf cGxhbmVfaGFzX2ZiYyhkZXZfcHJpdiwgcGlwZSwgcGxhbmVfaWQpOworCWlmIChwbGFuZS0+aGFz X2ZiYykgeworCQlzdHJ1Y3QgaW50ZWxfZmJjICpmYmMgPSAmZGV2X3ByaXYtPmZiYzsKKworCQlm YmMtPnBvc3NpYmxlX2ZyYW1lYnVmZmVyX2JpdHMgfD0gcGxhbmUtPmZyb250YnVmZmVyX2JpdDsK Kwl9CisKKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMSkgeworCQlwbGFuZS0+bWluX3dp ZHRoID0gaWNsX3BsYW5lX21pbl93aWR0aDsKKwkJcGxhbmUtPm1heF93aWR0aCA9IGljbF9wbGFu ZV9tYXhfd2lkdGg7CisJCXBsYW5lLT5tYXhfaGVpZ2h0ID0gaWNsX3BsYW5lX21heF9oZWlnaHQ7 CisJfSBlbHNlIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwIHx8IElTX0dFTUlOSUxBS0Uo ZGV2X3ByaXYpKSB7CisJCXBsYW5lLT5tYXhfd2lkdGggPSBnbGtfcGxhbmVfbWF4X3dpZHRoOwor CQlwbGFuZS0+bWF4X2hlaWdodCA9IHNrbF9wbGFuZV9tYXhfaGVpZ2h0OworCX0gZWxzZSB7CisJ CXBsYW5lLT5tYXhfd2lkdGggPSBza2xfcGxhbmVfbWF4X3dpZHRoOworCQlwbGFuZS0+bWF4X2hl aWdodCA9IHNrbF9wbGFuZV9tYXhfaGVpZ2h0OworCX0KKworCXBsYW5lLT5tYXhfc3RyaWRlID0g c2tsX3BsYW5lX21heF9zdHJpZGU7CisJcGxhbmUtPnVwZGF0ZV9wbGFuZSA9IHNrbF91cGRhdGVf cGxhbmU7CisJcGxhbmUtPmRpc2FibGVfcGxhbmUgPSBza2xfZGlzYWJsZV9wbGFuZTsKKwlwbGFu ZS0+Z2V0X2h3X3N0YXRlID0gc2tsX3BsYW5lX2dldF9od19zdGF0ZTsKKwlwbGFuZS0+Y2hlY2tf cGxhbmUgPSBza2xfcGxhbmVfY2hlY2s7CisJcGxhbmUtPm1pbl9jZGNsayA9IHNrbF9wbGFuZV9t aW5fY2RjbGs7CisKKwlpZiAocGxhbmVfaWQgPT0gUExBTkVfUFJJTUFSWSkgeworCQlwbGFuZS0+ bmVlZF9hc3luY19mbGlwX2Rpc2FibGVfd2EgPSBJU19HRU5fUkFOR0UoZGV2X3ByaXYsIDksIDEw KTsKKwkJcGxhbmUtPmFzeW5jX2ZsaXAgPSBza2xfcGxhbmVfYXN5bmNfZmxpcDsKKwkJcGxhbmUt PmVuYWJsZV9mbGlwX2RvbmUgPSBza2xfcGxhbmVfZW5hYmxlX2ZsaXBfZG9uZTsKKwkJcGxhbmUt PmRpc2FibGVfZmxpcF9kb25lID0gc2tsX3BsYW5lX2Rpc2FibGVfZmxpcF9kb25lOworCX0KKwor CWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExKQorCQlmb3JtYXRzID0gaWNsX2dldF9wbGFu ZV9mb3JtYXRzKGRldl9wcml2LCBwaXBlLAorCQkJCQkJcGxhbmVfaWQsICZudW1fZm9ybWF0cyk7 CisJZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCB8fCBJU19HRU1JTklMQUtFKGRl dl9wcml2KSkKKwkJZm9ybWF0cyA9IGdsa19nZXRfcGxhbmVfZm9ybWF0cyhkZXZfcHJpdiwgcGlw ZSwKKwkJCQkJCXBsYW5lX2lkLCAmbnVtX2Zvcm1hdHMpOworCWVsc2UKKwkJZm9ybWF0cyA9IHNr bF9nZXRfcGxhbmVfZm9ybWF0cyhkZXZfcHJpdiwgcGlwZSwKKwkJCQkJCXBsYW5lX2lkLCAmbnVt X2Zvcm1hdHMpOworCisJcGxhbmUtPmhhc19jY3MgPSBza2xfcGxhbmVfaGFzX2NjcyhkZXZfcHJp diwgcGlwZSwgcGxhbmVfaWQpOworCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEyKSB7CisJ CW1vZGlmaWVycyA9IGdlbjEyX2dldF9wbGFuZV9tb2RpZmllcnMoZGV2X3ByaXYsIHBsYW5lX2lk KTsKKwkJcGxhbmVfZnVuY3MgPSAmZ2VuMTJfcGxhbmVfZnVuY3M7CisJfSBlbHNlIHsKKwkJaWYg KHBsYW5lLT5oYXNfY2NzKQorCQkJbW9kaWZpZXJzID0gc2tsX3BsYW5lX2Zvcm1hdF9tb2RpZmll cnNfY2NzOworCQllbHNlCisJCQltb2RpZmllcnMgPSBza2xfcGxhbmVfZm9ybWF0X21vZGlmaWVy c19ub2NjczsKKwkJcGxhbmVfZnVuY3MgPSAmc2tsX3BsYW5lX2Z1bmNzOworCX0KKworCWlmIChw bGFuZV9pZCA9PSBQTEFORV9QUklNQVJZKQorCQlwbGFuZV90eXBlID0gRFJNX1BMQU5FX1RZUEVf UFJJTUFSWTsKKwllbHNlCisJCXBsYW5lX3R5cGUgPSBEUk1fUExBTkVfVFlQRV9PVkVSTEFZOwor CisJcmV0ID0gZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KCZkZXZfcHJpdi0+ZHJtLCAmcGxhbmUt PmJhc2UsCisJCQkJICAgICAgIDAsIHBsYW5lX2Z1bmNzLAorCQkJCSAgICAgICBmb3JtYXRzLCBu dW1fZm9ybWF0cywgbW9kaWZpZXJzLAorCQkJCSAgICAgICBwbGFuZV90eXBlLAorCQkJCSAgICAg ICAicGxhbmUgJWQlYyIsIHBsYW5lX2lkICsgMSwKKwkJCQkgICAgICAgcGlwZV9uYW1lKHBpcGUp KTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWw7CisKKwlzdXBwb3J0ZWRfcm90YXRpb25zID0KKwkJ RFJNX01PREVfUk9UQVRFXzAgfCBEUk1fTU9ERV9ST1RBVEVfOTAgfAorCQlEUk1fTU9ERV9ST1RB VEVfMTgwIHwgRFJNX01PREVfUk9UQVRFXzI3MDsKKworCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYp ID49IDEwKQorCQlzdXBwb3J0ZWRfcm90YXRpb25zIHw9IERSTV9NT0RFX1JFRkxFQ1RfWDsKKwor CWRybV9wbGFuZV9jcmVhdGVfcm90YXRpb25fcHJvcGVydHkoJnBsYW5lLT5iYXNlLAorCQkJCQkg ICBEUk1fTU9ERV9ST1RBVEVfMCwKKwkJCQkJICAgc3VwcG9ydGVkX3JvdGF0aW9ucyk7CisKKwlz dXBwb3J0ZWRfY3NjID0gQklUKERSTV9DT0xPUl9ZQ0JDUl9CVDYwMSkgfCBCSVQoRFJNX0NPTE9S X1lDQkNSX0JUNzA5KTsKKworCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwIHx8IElTX0dF TUlOSUxBS0UoZGV2X3ByaXYpKQorCQlzdXBwb3J0ZWRfY3NjIHw9IEJJVChEUk1fQ09MT1JfWUNC Q1JfQlQyMDIwKTsKKworCWRybV9wbGFuZV9jcmVhdGVfY29sb3JfcHJvcGVydGllcygmcGxhbmUt PmJhc2UsCisJCQkJCSAgc3VwcG9ydGVkX2NzYywKKwkJCQkJICBCSVQoRFJNX0NPTE9SX1lDQkNS X0xJTUlURURfUkFOR0UpIHwKKwkJCQkJICBCSVQoRFJNX0NPTE9SX1lDQkNSX0ZVTExfUkFOR0Up LAorCQkJCQkgIERSTV9DT0xPUl9ZQ0JDUl9CVDcwOSwKKwkJCQkJICBEUk1fQ09MT1JfWUNCQ1Jf TElNSVRFRF9SQU5HRSk7CisKKwlkcm1fcGxhbmVfY3JlYXRlX2FscGhhX3Byb3BlcnR5KCZwbGFu ZS0+YmFzZSk7CisJZHJtX3BsYW5lX2NyZWF0ZV9ibGVuZF9tb2RlX3Byb3BlcnR5KCZwbGFuZS0+ YmFzZSwKKwkJCQkJICAgICBCSVQoRFJNX01PREVfQkxFTkRfUElYRUxfTk9ORSkgfAorCQkJCQkg ICAgIEJJVChEUk1fTU9ERV9CTEVORF9QUkVNVUxUSSkgfAorCQkJCQkgICAgIEJJVChEUk1fTU9E RV9CTEVORF9DT1ZFUkFHRSkpOworCisJZHJtX3BsYW5lX2NyZWF0ZV96cG9zX2ltbXV0YWJsZV9w cm9wZXJ0eSgmcGxhbmUtPmJhc2UsIHBsYW5lX2lkKTsKKworCWlmIChJTlRFTF9HRU4oZGV2X3By aXYpID49IDEyKQorCQlkcm1fcGxhbmVfZW5hYmxlX2ZiX2RhbWFnZV9jbGlwcygmcGxhbmUtPmJh c2UpOworCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTApCisJCWRybV9wbGFuZV9jcmVh dGVfc2NhbGluZ19maWx0ZXJfcHJvcGVydHkoJnBsYW5lLT5iYXNlLAorCQkJCQkJQklUKERSTV9T Q0FMSU5HX0ZJTFRFUl9ERUZBVUxUKSB8CisJCQkJCQlCSVQoRFJNX1NDQUxJTkdfRklMVEVSX05F QVJFU1RfTkVJR0hCT1IpKTsKKworCWRybV9wbGFuZV9oZWxwZXJfYWRkKCZwbGFuZS0+YmFzZSwg JmludGVsX3BsYW5lX2hlbHBlcl9mdW5jcyk7CisKKwlyZXR1cm4gcGxhbmU7CisKK2ZhaWw6CisJ aW50ZWxfcGxhbmVfZnJlZShwbGFuZSk7CisKKwlyZXR1cm4gRVJSX1BUUihyZXQpOworfQorCit2 b2lkCitza2xfZ2V0X2luaXRpYWxfcGxhbmVfY29uZmlnKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRj LAorCQkJICAgICBzdHJ1Y3QgaW50ZWxfaW5pdGlhbF9wbGFuZV9jb25maWcgKnBsYW5lX2NvbmZp ZykKK3sKKwlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSA9IHRvX2ludGVsX2Ny dGNfc3RhdGUoY3J0Yy0+YmFzZS5zdGF0ZSk7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNy dGMtPmJhc2UuZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5 MTUoZGV2KTsKKwlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lID0gdG9faW50ZWxfcGxhbmUoY3J0 Yy0+YmFzZS5wcmltYXJ5KTsKKwllbnVtIHBsYW5lX2lkIHBsYW5lX2lkID0gcGxhbmUtPmlkOwor CWVudW0gcGlwZSBwaXBlOworCXUzMiB2YWwsIGJhc2UsIG9mZnNldCwgc3RyaWRlX211bHQsIHRp bGluZywgYWxwaGE7CisJaW50IGZvdXJjYywgcGl4ZWxfZm9ybWF0OworCXVuc2lnbmVkIGludCBh bGlnbmVkX2hlaWdodDsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKKwlzdHJ1Y3QgaW50 ZWxfZnJhbWVidWZmZXIgKmludGVsX2ZiOworCisJaWYgKCFwbGFuZS0+Z2V0X2h3X3N0YXRlKHBs YW5lLCAmcGlwZSkpCisJCXJldHVybjsKKworCWRybV9XQVJOX09OKGRldiwgcGlwZSAhPSBjcnRj LT5waXBlKTsKKworCWlmIChjcnRjX3N0YXRlLT5iaWdqb2luZXIpIHsKKwkJZHJtX2RiZ19rbXMo JmRldl9wcml2LT5kcm0sCisJCQkgICAgIlVuc3VwcG9ydGVkIGJpZ2pvaW5lciBjb25maWd1cmF0 aW9uIGZvciBpbml0aWFsIEZCXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWludGVsX2ZiID0ga3ph bGxvYyhzaXplb2YoKmludGVsX2ZiKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbnRlbF9mYikgewor CQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgImZhaWxlZCB0byBhbGxvYyBmYlxuIik7CisJ CXJldHVybjsKKwl9CisKKwlmYiA9ICZpbnRlbF9mYi0+YmFzZTsKKworCWZiLT5kZXYgPSBkZXY7 CisKKwl2YWwgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBQTEFORV9DVEwocGlwZSwgcGxhbmVf aWQpKTsKKworCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExKQorCQlwaXhlbF9mb3JtYXQg PSB2YWwgJiBJQ0xfUExBTkVfQ1RMX0ZPUk1BVF9NQVNLOworCWVsc2UKKwkJcGl4ZWxfZm9ybWF0 ID0gdmFsICYgUExBTkVfQ1RMX0ZPUk1BVF9NQVNLOworCisJaWYgKElOVEVMX0dFTihkZXZfcHJp dikgPj0gMTAgfHwgSVNfR0VNSU5JTEFLRShkZXZfcHJpdikpIHsKKwkJYWxwaGEgPSBpbnRlbF9k ZV9yZWFkKGRldl9wcml2LAorCQkJCSAgICAgIFBMQU5FX0NPTE9SX0NUTChwaXBlLCBwbGFuZV9p ZCkpOworCQlhbHBoYSAmPSBQTEFORV9DT0xPUl9BTFBIQV9NQVNLOworCX0gZWxzZSB7CisJCWFs cGhhID0gdmFsICYgUExBTkVfQ1RMX0FMUEhBX01BU0s7CisJfQorCisJZm91cmNjID0gc2tsX2Zv cm1hdF90b19mb3VyY2MocGl4ZWxfZm9ybWF0LAorCQkJCSAgICAgIHZhbCAmIFBMQU5FX0NUTF9P UkRFUl9SR0JYLCBhbHBoYSk7CisJZmItPmZvcm1hdCA9IGRybV9mb3JtYXRfaW5mbyhmb3VyY2Mp OworCisJdGlsaW5nID0gdmFsICYgUExBTkVfQ1RMX1RJTEVEX01BU0s7CisJc3dpdGNoICh0aWxp bmcpIHsKKwljYXNlIFBMQU5FX0NUTF9USUxFRF9MSU5FQVI6CisJCWZiLT5tb2RpZmllciA9IERS TV9GT1JNQVRfTU9EX0xJTkVBUjsKKwkJYnJlYWs7CisJY2FzZSBQTEFORV9DVExfVElMRURfWDoK KwkJcGxhbmVfY29uZmlnLT50aWxpbmcgPSBJOTE1X1RJTElOR19YOworCQlmYi0+bW9kaWZpZXIg PSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRDsKKwkJYnJlYWs7CisJY2FzZSBQTEFORV9DVExfVElM RURfWToKKwkJcGxhbmVfY29uZmlnLT50aWxpbmcgPSBJOTE1X1RJTElOR19ZOworCQlpZiAodmFs ICYgUExBTkVfQ1RMX1JFTkRFUl9ERUNPTVBSRVNTSU9OX0VOQUJMRSkKKwkJCWZiLT5tb2RpZmll ciA9IElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTIgPworCQkJCUk5MTVfRk9STUFUX01PRF9ZX1RJ TEVEX0dFTjEyX1JDX0NDUyA6CisJCQkJSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NTOworCQll bHNlIGlmICh2YWwgJiBQTEFORV9DVExfTUVESUFfREVDT01QUkVTU0lPTl9FTkFCTEUpCisJCQlm Yi0+bW9kaWZpZXIgPSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9NQ19DQ1M7CisJCWVs c2UKKwkJCWZiLT5tb2RpZmllciA9IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEOworCQlicmVhazsK KwljYXNlIFBMQU5FX0NUTF9USUxFRF9ZRjoKKwkJaWYgKHZhbCAmIFBMQU5FX0NUTF9SRU5ERVJf REVDT01QUkVTU0lPTl9FTkFCTEUpCisJCQlmYi0+bW9kaWZpZXIgPSBJOTE1X0ZPUk1BVF9NT0Rf WWZfVElMRURfQ0NTOworCQllbHNlCisJCQlmYi0+bW9kaWZpZXIgPSBJOTE1X0ZPUk1BVF9NT0Rf WWZfVElMRUQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCU1JU1NJTkdfQ0FTRSh0aWxpbmcpOwor CQlnb3RvIGVycm9yOworCX0KKworCS8qCisJICogRFJNX01PREVfUk9UQVRFXyBpcyBjb3VudGVy IGNsb2Nrd2lzZSB0byBzdGF5IGNvbXBhdGlibGUgd2l0aCBYcmFuZHIKKwkgKiB3aGlsZSBpOTE1 IEhXIHJvdGF0aW9uIGlzIGNsb2Nrd2lzZSwgdGhhdHMgd2h5IHRoaXMgc3dhcHBpbmcuCisJICov CisJc3dpdGNoICh2YWwgJiBQTEFORV9DVExfUk9UQVRFX01BU0spIHsKKwljYXNlIFBMQU5FX0NU TF9ST1RBVEVfMDoKKwkJcGxhbmVfY29uZmlnLT5yb3RhdGlvbiA9IERSTV9NT0RFX1JPVEFURV8w OworCQlicmVhazsKKwljYXNlIFBMQU5FX0NUTF9ST1RBVEVfOTA6CisJCXBsYW5lX2NvbmZpZy0+ cm90YXRpb24gPSBEUk1fTU9ERV9ST1RBVEVfMjcwOworCQlicmVhazsKKwljYXNlIFBMQU5FX0NU TF9ST1RBVEVfMTgwOgorCQlwbGFuZV9jb25maWctPnJvdGF0aW9uID0gRFJNX01PREVfUk9UQVRF XzE4MDsKKwkJYnJlYWs7CisJY2FzZSBQTEFORV9DVExfUk9UQVRFXzI3MDoKKwkJcGxhbmVfY29u ZmlnLT5yb3RhdGlvbiA9IERSTV9NT0RFX1JPVEFURV85MDsKKwkJYnJlYWs7CisJfQorCisJaWYg KElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTAgJiYKKwkgICAgdmFsICYgUExBTkVfQ1RMX0ZMSVBf SE9SSVpPTlRBTCkKKwkJcGxhbmVfY29uZmlnLT5yb3RhdGlvbiB8PSBEUk1fTU9ERV9SRUZMRUNU X1g7CisKKwkvKiA5MC8yNzAgZGVncmVlIHJvdGF0aW9uIHdvdWxkIHJlcXVpcmUgZXh0cmEgd29y ayAqLworCWlmIChkcm1fcm90YXRpb25fOTBfb3JfMjcwKHBsYW5lX2NvbmZpZy0+cm90YXRpb24p KQorCQlnb3RvIGVycm9yOworCisJYmFzZSA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIFBMQU5F X1NVUkYocGlwZSwgcGxhbmVfaWQpKSAmIDB4ZmZmZmYwMDA7CisJcGxhbmVfY29uZmlnLT5iYXNl ID0gYmFzZTsKKworCW9mZnNldCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIFBMQU5FX09GRlNF VChwaXBlLCBwbGFuZV9pZCkpOworCisJdmFsID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgUExB TkVfU0laRShwaXBlLCBwbGFuZV9pZCkpOworCWZiLT5oZWlnaHQgPSAoKHZhbCA+PiAxNikgJiAw eGZmZmYpICsgMTsKKwlmYi0+d2lkdGggPSAoKHZhbCA+PiAwKSAmIDB4ZmZmZikgKyAxOworCisJ dmFsID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgUExBTkVfU1RSSURFKHBpcGUsIHBsYW5lX2lk KSk7CisJc3RyaWRlX211bHQgPSBza2xfcGxhbmVfc3RyaWRlX211bHQoZmIsIDAsIERSTV9NT0RF X1JPVEFURV8wKTsKKwlmYi0+cGl0Y2hlc1swXSA9ICh2YWwgJiAweDNmZikgKiBzdHJpZGVfbXVs dDsKKworCWFsaWduZWRfaGVpZ2h0ID0gaW50ZWxfZmJfYWxpZ25faGVpZ2h0KGZiLCAwLCBmYi0+ aGVpZ2h0KTsKKworCXBsYW5lX2NvbmZpZy0+c2l6ZSA9IGZiLT5waXRjaGVzWzBdICogYWxpZ25l ZF9oZWlnaHQ7CisKKwlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKKwkJICAgICIlcy8lcyB3 aXRoIGZiOiBzaXplPSVkeCVkQCVkLCBvZmZzZXQ9JXgsIHBpdGNoICVkLCBzaXplIDB4JXhcbiIs CisJCSAgICBjcnRjLT5iYXNlLm5hbWUsIHBsYW5lLT5iYXNlLm5hbWUsIGZiLT53aWR0aCwgZmIt PmhlaWdodCwKKwkJICAgIGZiLT5mb3JtYXQtPmNwcFswXSAqIDgsIGJhc2UsIGZiLT5waXRjaGVz WzBdLAorCQkgICAgcGxhbmVfY29uZmlnLT5zaXplKTsKKworCXBsYW5lX2NvbmZpZy0+ZmIgPSBp bnRlbF9mYjsKKwlyZXR1cm47CisKK2Vycm9yOgorCWtmcmVlKGludGVsX2ZiKTsKK30KKwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9za2xfdW5pdmVyc2FsX3BsYW5l LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L3NrbF91bml2ZXJzYWxfcGxhbmUuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjcwZWI1MDEwY2QyOAotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvc2tsX3VuaXZlcnNh bF9wbGFuZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBN SVQgKi8KKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAyMCBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisK KyNpZm5kZWYgX1NLTF9VTklWRVJTQUxfUExBTkVfSF8KKyNkZWZpbmUgX1NLTF9VTklWRVJTQUxf UExBTkVfSF8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBkcm1fZnJhbWVi dWZmZXI7CitzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZTsKK3N0cnVjdCBpbnRlbF9jcnRjOworc3Ry dWN0IGludGVsX2luaXRpYWxfcGxhbmVfY29uZmlnOworc3RydWN0IGludGVsX3BsYW5lX3N0YXRl OworCitlbnVtIHBpcGU7CitlbnVtIHBsYW5lX2lkOworCitzdHJ1Y3QgaW50ZWxfcGxhbmUgKgor c2tsX3VuaXZlcnNhbF9wbGFuZV9jcmVhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LAorCQkJICAgZW51bSBwaXBlIHBpcGUsIGVudW0gcGxhbmVfaWQgcGxhbmVfaWQpOworCit2 b2lkIHNrbF9nZXRfaW5pdGlhbF9wbGFuZV9jb25maWcoc3RydWN0IGludGVsX2NydGMgKmNydGMs CisJCQkJICBzdHJ1Y3QgaW50ZWxfaW5pdGlhbF9wbGFuZV9jb25maWcgKnBsYW5lX2NvbmZpZyk7 CisKK2ludCBza2xfZm9ybWF0X3RvX2ZvdXJjYyhpbnQgZm9ybWF0LCBib29sIHJnYl9vcmRlciwg Ym9vbCBhbHBoYSk7CisKK2ludCBza2xfY2NzX3RvX21haW5fcGxhbmUoY29uc3Qgc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciAqZmIsIGludCBjY3NfcGxhbmUpOworaW50IHNrbF9jYWxjX21haW5fc3Vy ZmFjZV9vZmZzZXQoY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSwK KwkJCQkgaW50ICp4LCBpbnQgKnksIHUzMiAqb2Zmc2V0KTsKKworI2VuZGlmCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfcG0uYwppbmRleCA5OTJmY2U4YjhkMTMuLmRhOGY1ODdmMjk1ZiAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9wbS5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiZGlzcGxheS9pbnRlbF9k aXNwbGF5X3R5cGVzLmgiCiAjaW5jbHVkZSAiZGlzcGxheS9pbnRlbF9mYmMuaCIKICNpbmNsdWRl ICJkaXNwbGF5L2ludGVsX3Nwcml0ZS5oIgorI2luY2x1ZGUgImRpc3BsYXkvc2tsX3VuaXZlcnNh bF9wbGFuZS5oIgogCiAjaW5jbHVkZSAiZ3QvaW50ZWxfbGxjLmgiCiAKLS0gCjIuMjcuMAoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1h aWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==