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 51C2FC4167B for ; Thu, 10 Dec 2020 04:18:11 +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 153D623A02 for ; Thu, 10 Dec 2020 04:18:11 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 153D623A02 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 AF53B6E873; Thu, 10 Dec 2020 04:18:09 +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 E7BA06E841 for ; Thu, 10 Dec 2020 04:18:06 +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-404---DsEuRcNx-3dkVX2MBNPQ-1; Wed, 09 Dec 2020 23:18:03 -0500 X-MC-Unique: --DsEuRcNx-3dkVX2MBNPQ-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id DA281800D62 for ; Thu, 10 Dec 2020 04:18:02 +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 E59045D6A1 for ; Thu, 10 Dec 2020 04:18:01 +0000 (UTC) From: Dave Airlie To: intel-gfx@lists.freedesktop.org Date: Thu, 10 Dec 2020 14:17:50 +1000 Message-Id: <20201210041755.29088-5-airlied@gmail.com> In-Reply-To: <20201210041755.29088-1-airlied@gmail.com> References: <20201210041755.29088-1-airlied@gmail.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: gmail.com Subject: [Intel-gfx] [PATCH 4/9] drm/i915: refactor cursor code out of i915_display.c 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: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" RnJvbTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KClRoaXMgZmlsZSBpcyBhIG1v bnN0ZXIsIGxldCdzIHN0YXJ0IHNpbXBsZSwgdGhlIGN1cnNvciBwbGFuZSBjb2RlCnNlZW1zIHBy ZXR0eSBzdGFuZGFsb25lLCBhbmQgc3BsaXRzIG91dCBlYXNpbHkgZW5vdWdoLgoKU2lnbmVkLW9m Zi1ieTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9k cm0vaTkxNS9NYWtlZmlsZSAgICAgICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0v aTkxNS9kaXNwbGF5L2ludGVsX2N1cnNvci5jICB8IDgwNSArKysrKysrKysrKysrKysrKysrCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYyB8IDc5NiArLS0tLS0t LS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5o IHwgIDEyICsKIDQgZmlsZXMgY2hhbmdlZCwgODI0IGluc2VydGlvbnMoKyksIDc5MCBkZWxldGlv bnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2lu dGVsX2N1cnNvci5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQppbmRleCBlNTU3NGU1MDZhNWMuLjk4YTM1 YjkzOTA1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKQEAgLTE5Nyw2ICsxOTcsNyBAQCBpOTE1LXkg Kz0gXAogCWRpc3BsYXkvaW50ZWxfY29tYm9fcGh5Lm8gXAogCWRpc3BsYXkvaW50ZWxfY29ubmVj dG9yLm8gXAogCWRpc3BsYXkvaW50ZWxfY3NyLm8gXAorCWRpc3BsYXkvaW50ZWxfY3Vyc29yLm8g XAogCWRpc3BsYXkvaW50ZWxfZGlzcGxheS5vIFwKIAlkaXNwbGF5L2ludGVsX2Rpc3BsYXlfcG93 ZXIubyBcCiAJZGlzcGxheS9pbnRlbF9kcGlvX3BoeS5vIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfY3Vyc29yLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9kaXNwbGF5L2ludGVsX2N1cnNvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwMC4uODdhN2E3NGEyNWFjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZGlzcGxheS9pbnRlbF9jdXJzb3IuYwpAQCAtMCwwICsxLDgwNSBAQAorLy8gU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IE1JVAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDIwIEludGVsIENv cnBvcmF0aW9uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgPGRy bS9kcm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX3VhcGkuaD4K KyNpbmNsdWRlIDxkcm0vZHJtX2RhbWFnZV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3Bs YW5lX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZm91cmNjLmg+CisKKyNpbmNsdWRlICJp bnRlbF9hdG9taWMuaCIKKyNpbmNsdWRlICJpbnRlbF9hdG9taWNfcGxhbmUuaCIKKyNpbmNsdWRl ICJpbnRlbF9kaXNwbGF5X3R5cGVzLmgiCisjaW5jbHVkZSAiaW50ZWxfZGlzcGxheS5oIgorCisj aW5jbHVkZSAiaW50ZWxfZnJvbnRidWZmZXIuaCIKKyNpbmNsdWRlICJpbnRlbF9wbS5oIgorI2lu Y2x1ZGUgImludGVsX3Bzci5oIgorI2luY2x1ZGUgImludGVsX3Nwcml0ZS5oIgorCisvKiBDdXJz b3IgZm9ybWF0cyAqLworc3RhdGljIGNvbnN0IHUzMiBpbnRlbF9jdXJzb3JfZm9ybWF0c1tdID0g eworCURSTV9GT1JNQVRfQVJHQjg4ODgsCit9OworCitzdGF0aWMgY29uc3QgdTY0IGN1cnNvcl9m b3JtYXRfbW9kaWZpZXJzW10gPSB7CisJRFJNX0ZPUk1BVF9NT0RfTElORUFSLAorCURSTV9GT1JN QVRfTU9EX0lOVkFMSUQKK307CisKK3N0YXRpYyB1MzIgaW50ZWxfY3Vyc29yX2Jhc2UoY29uc3Qg c3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPQorCQl0b19pOTE1KHBsYW5lX3N0YXRlLT51YXBpLnBsYW5l LT5kZXYpOworCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUt Pmh3LmZiOworCWNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSBpbnRlbF9m Yl9vYmooZmIpOworCXUzMiBiYXNlOworCisJaWYgKElOVEVMX0lORk8oZGV2X3ByaXYpLT5kaXNw bGF5LmN1cnNvcl9uZWVkc19waHlzaWNhbCkKKwkJYmFzZSA9IHNnX2RtYV9hZGRyZXNzKG9iai0+ bW0ucGFnZXMtPnNnbCk7CisJZWxzZQorCQliYXNlID0gaW50ZWxfcGxhbmVfZ2d0dF9vZmZzZXQo cGxhbmVfc3RhdGUpOworCisJcmV0dXJuIGJhc2UgKyBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVb MF0ub2Zmc2V0OworfQorCitzdGF0aWMgdTMyIGludGVsX2N1cnNvcl9wb3NpdGlvbihjb25zdCBz dHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQoreworCWludCB4ID0gcGxhbmVf c3RhdGUtPnVhcGkuZHN0LngxOworCWludCB5ID0gcGxhbmVfc3RhdGUtPnVhcGkuZHN0LnkxOwor CXUzMiBwb3MgPSAwOworCisJaWYgKHggPCAwKSB7CisJCXBvcyB8PSBDVVJTT1JfUE9TX1NJR04g PDwgQ1VSU09SX1hfU0hJRlQ7CisJCXggPSAteDsKKwl9CisJcG9zIHw9IHggPDwgQ1VSU09SX1hf U0hJRlQ7CisKKwlpZiAoeSA8IDApIHsKKwkJcG9zIHw9IENVUlNPUl9QT1NfU0lHTiA8PCBDVVJT T1JfWV9TSElGVDsKKwkJeSA9IC15OworCX0KKwlwb3MgfD0geSA8PCBDVVJTT1JfWV9TSElGVDsK KworCXJldHVybiBwb3M7Cit9CisKK3N0YXRpYyBib29sIGludGVsX2N1cnNvcl9zaXplX29rKGNv bnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJY29uc3Qgc3Ry dWN0IGRybV9tb2RlX2NvbmZpZyAqY29uZmlnID0KKwkJJnBsYW5lX3N0YXRlLT51YXBpLnBsYW5l LT5kZXYtPm1vZGVfY29uZmlnOworCWludCB3aWR0aCA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9z dGF0ZS0+dWFwaS5kc3QpOworCWludCBoZWlnaHQgPSBkcm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0 YXRlLT51YXBpLmRzdCk7CisKKwlyZXR1cm4gd2lkdGggPiAwICYmIHdpZHRoIDw9IGNvbmZpZy0+ Y3Vyc29yX3dpZHRoICYmCisJCWhlaWdodCA+IDAgJiYgaGVpZ2h0IDw9IGNvbmZpZy0+Y3Vyc29y X2hlaWdodDsKK30KKworc3RhdGljIGludCBpbnRlbF9jdXJzb3JfY2hlY2tfc3VyZmFjZShzdHJ1 Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQoreworCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9CisJCXRvX2k5MTUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRl dik7CisJdW5zaWduZWQgaW50IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmh3LnJvdGF0aW9uOwor CWludCBzcmNfeCwgc3JjX3k7CisJdTMyIG9mZnNldDsKKwlpbnQgcmV0OworCisJcmV0ID0gaW50 ZWxfcGxhbmVfY29tcHV0ZV9ndHQocGxhbmVfc3RhdGUpOworCWlmIChyZXQpCisJCXJldHVybiBy ZXQ7CisKKwlpZiAoIXBsYW5lX3N0YXRlLT51YXBpLnZpc2libGUpCisJCXJldHVybiAwOworCisJ c3JjX3ggPSBwbGFuZV9zdGF0ZS0+dWFwaS5zcmMueDEgPj4gMTY7CisJc3JjX3kgPSBwbGFuZV9z dGF0ZS0+dWFwaS5zcmMueTEgPj4gMTY7CisKKwlpbnRlbF9hZGRfZmJfb2Zmc2V0cygmc3JjX3gs ICZzcmNfeSwgcGxhbmVfc3RhdGUsIDApOworCW9mZnNldCA9IGludGVsX3BsYW5lX2NvbXB1dGVf YWxpZ25lZF9vZmZzZXQoJnNyY194LCAmc3JjX3ksCisJCQkJCQkgICAgcGxhbmVfc3RhdGUsIDAp OworCisJaWYgKHNyY194ICE9IDAgfHwgc3JjX3kgIT0gMCkgeworCQlkcm1fZGJnX2ttcygmZGV2 X3ByaXYtPmRybSwKKwkJCSAgICAiQXJiaXRyYXJ5IGN1cnNvciBwYW5uaW5nIG5vdCBzdXBwb3J0 ZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKgorCSAqIFB1dCB0aGUgZmluYWwg Y29vcmRpbmF0ZXMgYmFjayBzbyB0aGF0IHRoZSBzcmMKKwkgKiBjb29yZGluYXRlIGNoZWNrcyB3 aWxsIHNlZSB0aGUgcmlnaHQgdmFsdWVzLgorCSAqLworCWRybV9yZWN0X3RyYW5zbGF0ZV90bygm cGxhbmVfc3RhdGUtPnVhcGkuc3JjLAorCQkJICAgICAgc3JjX3ggPDwgMTYsIHNyY195IDw8IDE2 KTsKKworCS8qIElMSysgZG8gdGhpcyBhdXRvbWFnaWNhbGx5IGluIGhhcmR3YXJlICovCisJaWYg KEhBU19HTUNIKGRldl9wcml2KSAmJiByb3RhdGlvbiAmIERSTV9NT0RFX1JPVEFURV8xODApIHsK KwkJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7 CisJCWludCBzcmNfdyA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5zcmMpID4+ IDE2OworCQlpbnQgc3JjX2ggPSBkcm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0YXRlLT51YXBpLnNy YykgPj4gMTY7CisKKwkJb2Zmc2V0ICs9IChzcmNfaCAqIHNyY193IC0gMSkgKiBmYi0+Zm9ybWF0 LT5jcHBbMF07CisJfQorCisJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLm9mZnNldCA9IG9m ZnNldDsKKwlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0ueCA9IHNyY194OworCXBsYW5lX3N0 YXRlLT5jb2xvcl9wbGFuZVswXS55ID0gc3JjX3k7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBpbnRlbF9jaGVja19jdXJzb3Ioc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3Rh dGUsCisJCQkgICAgICBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQorewor CWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwor CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkxNShwbGFuZV9zdGF0ZS0+dWFw aS5wbGFuZS0+ZGV2KTsKKwljb25zdCBzdHJ1Y3QgZHJtX3JlY3Qgc3JjID0gcGxhbmVfc3RhdGUt PnVhcGkuc3JjOworCWNvbnN0IHN0cnVjdCBkcm1fcmVjdCBkc3QgPSBwbGFuZV9zdGF0ZS0+dWFw aS5kc3Q7CisJaW50IHJldDsKKworCWlmIChmYiAmJiBmYi0+bW9kaWZpZXIgIT0gRFJNX0ZPUk1B VF9NT0RfTElORUFSKSB7CisJCWRybV9kYmdfa21zKCZpOTE1LT5kcm0sICJjdXJzb3IgY2Fubm90 IGJlIHRpbGVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0gaW50ZWxfYXRv bWljX3BsYW5lX2NoZWNrX2NsaXBwaW5nKHBsYW5lX3N0YXRlLCBjcnRjX3N0YXRlLAorCQkJCQkJ RFJNX1BMQU5FX0hFTFBFUl9OT19TQ0FMSU5HLAorCQkJCQkJRFJNX1BMQU5FX0hFTFBFUl9OT19T Q0FMSU5HLAorCQkJCQkJdHJ1ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFVz ZSB0aGUgdW5jbGlwcGVkIHNyYy9kc3QgcmVjdGFuZ2xlcywgd2hpY2ggd2UgcHJvZ3JhbSB0byBo dyAqLworCXBsYW5lX3N0YXRlLT51YXBpLnNyYyA9IHNyYzsKKwlwbGFuZV9zdGF0ZS0+dWFwaS5k c3QgPSBkc3Q7CisKKwlyZXQgPSBpbnRlbF9jdXJzb3JfY2hlY2tfc3VyZmFjZShwbGFuZV9zdGF0 ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmICghcGxhbmVfc3RhdGUtPnVhcGku dmlzaWJsZSkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBpbnRlbF9wbGFuZV9jaGVja19zcmNfY29v cmRpbmF0ZXMocGxhbmVfc3RhdGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAoraTg0NV9jdXJzb3JfbWF4X3N0cmlkZShz dHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAorCQkgICAgICAgdTMyIHBpeGVsX2Zvcm1hdCwgdTY0 IG1vZGlmaWVyLAorCQkgICAgICAgdW5zaWduZWQgaW50IHJvdGF0aW9uKQoreworCXJldHVybiAy MDQ4OworfQorCitzdGF0aWMgdTMyIGk4NDVfY3Vyc29yX2N0bF9jcnRjKGNvbnN0IHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQoreworCXUzMiBjbnRsID0gMDsKKworCWlmIChj cnRjX3N0YXRlLT5nYW1tYV9lbmFibGUpCisJCWNudGwgfD0gQ1VSU09SX0dBTU1BX0VOQUJMRTsK KworCXJldHVybiBjbnRsOworfQorCitzdGF0aWMgdTMyIGk4NDVfY3Vyc29yX2N0bChjb25zdCBz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJCSAgIGNvbnN0IHN0cnVjdCBp bnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJcmV0dXJuIENVUlNPUl9FTkFCTEUg fAorCQlDVVJTT1JfRk9STUFUX0FSR0IgfAorCQlDVVJTT1JfU1RSSURFKHBsYW5lX3N0YXRlLT5j b2xvcl9wbGFuZVswXS5zdHJpZGUpOworfQorCitzdGF0aWMgYm9vbCBpODQ1X2N1cnNvcl9zaXpl X29rKGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJaW50 IHdpZHRoID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCk7CisKKwkvKgor CSAqIDg0NWcvODY1ZyBhcmUgb25seSBsaW1pdGVkIGJ5IHRoZSB3aWR0aCBvZiB0aGVpciBjdXJz b3JzLAorCSAqIHRoZSBoZWlnaHQgaXMgYXJiaXRyYXJ5IHVwIHRvIHRoZSBwcmVjaXNpb24gb2Yg dGhlIHJlZ2lzdGVyLgorCSAqLworCXJldHVybiBpbnRlbF9jdXJzb3Jfc2l6ZV9vayhwbGFuZV9z dGF0ZSkgJiYgSVNfQUxJR05FRCh3aWR0aCwgNjQpOworfQorCitzdGF0aWMgaW50IGk4NDVfY2hl Y2tfY3Vyc29yKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkJICAgICBz dHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQoreworCWNvbnN0IHN0cnVjdCBk cm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOworCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICppOTE1ID0gdG9faTkxNShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZS0+ZGV2KTsK KwlpbnQgcmV0OworCisJcmV0ID0gaW50ZWxfY2hlY2tfY3Vyc29yKGNydGNfc3RhdGUsIHBsYW5l X3N0YXRlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogaWYgd2Ugd2FudCB0byB0 dXJuIG9mZiB0aGUgY3Vyc29yIGlnbm9yZSB3aWR0aCBhbmQgaGVpZ2h0ICovCisJaWYgKCFmYikK KwkJcmV0dXJuIDA7CisKKwkvKiBDaGVjayBmb3Igd2hpY2ggY3Vyc29yIHR5cGVzIHdlIHN1cHBv cnQgKi8KKwlpZiAoIWk4NDVfY3Vyc29yX3NpemVfb2socGxhbmVfc3RhdGUpKSB7CisJCWRybV9k Ymdfa21zKCZpOTE1LT5kcm0sCisJCQkgICAgIkN1cnNvciBkaW1lbnNpb24gJWR4JWQgbm90IHN1 cHBvcnRlZFxuIiwKKwkJCSAgICBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0 KSwKKwkJCSAgICBkcm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCkpOworCQly ZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkcm1fV0FSTl9PTigmaTkxNS0+ZHJtLCBwbGFuZV9zdGF0 ZS0+dWFwaS52aXNpYmxlICYmCisJCSAgICBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0uc3Ry aWRlICE9IGZiLT5waXRjaGVzWzBdKTsKKworCXN3aXRjaCAoZmItPnBpdGNoZXNbMF0pIHsKKwlj YXNlIDI1NjoKKwljYXNlIDUxMjoKKwljYXNlIDEwMjQ6CisJY2FzZSAyMDQ4OgorCQlicmVhazsK KwlkZWZhdWx0OgorCQkgZHJtX2RiZ19rbXMoJmk5MTUtPmRybSwgIkludmFsaWQgY3Vyc29yIHN0 cmlkZSAoJXUpXG4iLAorCQkJICAgICBmYi0+cGl0Y2hlc1swXSk7CisJCXJldHVybiAtRUlOVkFM OworCX0KKworCXBsYW5lX3N0YXRlLT5jdGwgPSBpODQ1X2N1cnNvcl9jdGwoY3J0Y19zdGF0ZSwg cGxhbmVfc3RhdGUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGk4NDVfdXBkYXRl X2N1cnNvcihzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAorCQkJICAgICAgIGNvbnN0IHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBp bnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOworCXUzMiBjbnRsID0gMCwg YmFzZSA9IDAsIHBvcyA9IDAsIHNpemUgPSAwOworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisK KwlpZiAocGxhbmVfc3RhdGUgJiYgcGxhbmVfc3RhdGUtPnVhcGkudmlzaWJsZSkgeworCQl1bnNp Z25lZCBpbnQgd2lkdGggPSBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KTsK KwkJdW5zaWduZWQgaW50IGhlaWdodCA9IGRybV9yZWN0X2hlaWdodCgmcGxhbmVfc3RhdGUtPnVh cGkuZHN0KTsKKworCQljbnRsID0gcGxhbmVfc3RhdGUtPmN0bCB8CisJCQlpODQ1X2N1cnNvcl9j dGxfY3J0YyhjcnRjX3N0YXRlKTsKKworCQlzaXplID0gKGhlaWdodCA8PCAxMikgfCB3aWR0aDsK KworCQliYXNlID0gaW50ZWxfY3Vyc29yX2Jhc2UocGxhbmVfc3RhdGUpOworCQlwb3MgPSBpbnRl bF9jdXJzb3JfcG9zaXRpb24ocGxhbmVfc3RhdGUpOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZl KCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ssIGlycWZsYWdzKTsKKworCS8qIE9uIHRoZXNlIGNoaXBz ZXRzIHdlIGNhbiBvbmx5IG1vZGlmeSB0aGUgYmFzZS9zaXplL3N0cmlkZQorCSAqIHdoaWxzdCB0 aGUgY3Vyc29yIGlzIGRpc2FibGVkLgorCSAqLworCWlmIChwbGFuZS0+Y3Vyc29yLmJhc2UgIT0g YmFzZSB8fAorCSAgICBwbGFuZS0+Y3Vyc29yLnNpemUgIT0gc2l6ZSB8fAorCSAgICBwbGFuZS0+ Y3Vyc29yLmNudGwgIT0gY250bCkgeworCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgQ1VS Q05UUihQSVBFX0EpLCAwKTsKKwkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIENVUkJBU0Uo UElQRV9BKSwgYmFzZSk7CisJCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBDVVJTSVpFLCBz aXplKTsKKwkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIENVUlBPUyhQSVBFX0EpLCBwb3Mp OworCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgQ1VSQ05UUihQSVBFX0EpLCBjbnRsKTsK KworCQlwbGFuZS0+Y3Vyc29yLmJhc2UgPSBiYXNlOworCQlwbGFuZS0+Y3Vyc29yLnNpemUgPSBz aXplOworCQlwbGFuZS0+Y3Vyc29yLmNudGwgPSBjbnRsOworCX0gZWxzZSB7CisJCWludGVsX2Rl X3dyaXRlX2Z3KGRldl9wcml2LCBDVVJQT1MoUElQRV9BKSwgcG9zKTsKKwl9CisKKwlzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ssIGlycWZsYWdzKTsKK30KKwor c3RhdGljIHZvaWQgaTg0NV9kaXNhYmxlX2N1cnNvcihzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5l LAorCQkJCWNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQoreworCWk4 NDVfdXBkYXRlX2N1cnNvcihwbGFuZSwgY3J0Y19zdGF0ZSwgTlVMTCk7Cit9CisKK3N0YXRpYyBi b29sIGk4NDVfY3Vyc29yX2dldF9od19zdGF0ZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAor CQkJCSAgICAgZW51bSBwaXBlICpwaXBlKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKKwllbnVtIGludGVsX2Rpc3BsYXlf cG93ZXJfZG9tYWluIHBvd2VyX2RvbWFpbjsKKwlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKKwli b29sIHJldDsKKworCXBvd2VyX2RvbWFpbiA9IFBPV0VSX0RPTUFJTl9QSVBFKFBJUEVfQSk7CisJ d2FrZXJlZiA9IGludGVsX2Rpc3BsYXlfcG93ZXJfZ2V0X2lmX2VuYWJsZWQoZGV2X3ByaXYsIHBv d2VyX2RvbWFpbik7CisJaWYgKCF3YWtlcmVmKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXQgPSBp bnRlbF9kZV9yZWFkKGRldl9wcml2LCBDVVJDTlRSKFBJUEVfQSkpICYgQ1VSU09SX0VOQUJMRTsK KworCSpwaXBlID0gUElQRV9BOworCisJaW50ZWxfZGlzcGxheV9wb3dlcl9wdXQoZGV2X3ByaXYs IHBvd2VyX2RvbWFpbiwgd2FrZXJlZik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdW5z aWduZWQgaW50CitpOXh4X2N1cnNvcl9tYXhfc3RyaWRlKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxh bmUsCisJCSAgICAgICB1MzIgcGl4ZWxfZm9ybWF0LCB1NjQgbW9kaWZpZXIsCisJCSAgICAgICB1 bnNpZ25lZCBpbnQgcm90YXRpb24pCit7CisJcmV0dXJuIHBsYW5lLT5iYXNlLmRldi0+bW9kZV9j b25maWcuY3Vyc29yX3dpZHRoICogNDsKK30KKworc3RhdGljIHUzMiBpOXh4X2N1cnNvcl9jdGxf Y3J0Yyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKK3sKKwlzdHJ1 Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Y19zdGF0ZS0+dWFwaS5jcnRj KTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGMtPmJh c2UuZGV2KTsKKwl1MzIgY250bCA9IDA7CisKKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAx MSkKKwkJcmV0dXJuIGNudGw7CisKKwlpZiAoY3J0Y19zdGF0ZS0+Z2FtbWFfZW5hYmxlKQorCQlj bnRsID0gTUNVUlNPUl9HQU1NQV9FTkFCTEU7CisKKwlpZiAoY3J0Y19zdGF0ZS0+Y3NjX2VuYWJs ZSkKKwkJY250bCB8PSBNQ1VSU09SX1BJUEVfQ1NDX0VOQUJMRTsKKworCWlmIChJTlRFTF9HRU4o ZGV2X3ByaXYpIDwgNSAmJiAhSVNfRzRYKGRldl9wcml2KSkKKwkJY250bCB8PSBNQ1VSU09SX1BJ UEVfU0VMRUNUKGNydGMtPnBpcGUpOworCisJcmV0dXJuIGNudGw7Cit9CisKK3N0YXRpYyB1MzIg aTl4eF9jdXJzb3JfY3RsKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRl LAorCQkJICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sK KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPQorCQl0b19pOTE1KHBsYW5lX3N0 YXRlLT51YXBpLnBsYW5lLT5kZXYpOworCXUzMiBjbnRsID0gMDsKKworCWlmIChJU19HRU4oZGV2 X3ByaXYsIDYpIHx8IElTX0lWWUJSSURHRShkZXZfcHJpdikpCisJCWNudGwgfD0gTUNVUlNPUl9U UklDS0xFX0ZFRURfRElTQUJMRTsKKworCXN3aXRjaCAoZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0 YXRlLT51YXBpLmRzdCkpIHsKKwljYXNlIDY0OgorCQljbnRsIHw9IE1DVVJTT1JfTU9ERV82NF9B UkdCX0FYOworCQlicmVhazsKKwljYXNlIDEyODoKKwkJY250bCB8PSBNQ1VSU09SX01PREVfMTI4 X0FSR0JfQVg7CisJCWJyZWFrOworCWNhc2UgMjU2OgorCQljbnRsIHw9IE1DVVJTT1JfTU9ERV8y NTZfQVJHQl9BWDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJTUlTU0lOR19DQVNFKGRybV9yZWN0 X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYg KHBsYW5lX3N0YXRlLT5ody5yb3RhdGlvbiAmIERSTV9NT0RFX1JPVEFURV8xODApCisJCWNudGwg fD0gTUNVUlNPUl9ST1RBVEVfMTgwOworCisJcmV0dXJuIGNudGw7Cit9CisKK3N0YXRpYyBib29s IGk5eHhfY3Vyc29yX3NpemVfb2soY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFu ZV9zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPQorCQl0b19p OTE1KHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lLT5kZXYpOworCWludCB3aWR0aCA9IGRybV9yZWN0 X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpOworCWludCBoZWlnaHQgPSBkcm1fcmVjdF9o ZWlnaHQoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCk7CisKKwlpZiAoIWludGVsX2N1cnNvcl9zaXpl X29rKHBsYW5lX3N0YXRlKSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogQ3Vyc29yIHdpZHRoIGlz IGxpbWl0ZWQgdG8gYSBmZXcgcG93ZXItb2YtdHdvIHNpemVzICovCisJc3dpdGNoICh3aWR0aCkg eworCWNhc2UgMjU2OgorCWNhc2UgMTI4OgorCWNhc2UgNjQ6CisJCWJyZWFrOworCWRlZmF1bHQ6 CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKgorCSAqIElWQisgaGF2ZSBDVVJfRkJDX0NUTCB3 aGljaCBhbGxvd3MgYW4gYXJiaXRyYXJ5IGN1cnNvcgorCSAqIGhlaWdodCBmcm9tIDggbGluZXMg dXAgdG8gdGhlIGN1cnNvciB3aWR0aCwgd2hlbiB0aGUKKwkgKiBjdXJzb3IgaXMgbm90IHJvdGF0 ZWQuIEV2ZXJ5dGhpbmcgZWxzZSByZXF1aXJlcyBzcXVhcmUKKwkgKiBjdXJzb3JzLgorCSAqLwor CWlmIChIQVNfQ1VSX0ZCQyhkZXZfcHJpdikgJiYKKwkgICAgcGxhbmVfc3RhdGUtPmh3LnJvdGF0 aW9uICYgRFJNX01PREVfUk9UQVRFXzApIHsKKwkJaWYgKGhlaWdodCA8IDggfHwgaGVpZ2h0ID4g d2lkdGgpCisJCQlyZXR1cm4gZmFsc2U7CisJfSBlbHNlIHsKKwkJaWYgKGhlaWdodCAhPSB3aWR0 aCkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGlu dCBpOXh4X2NoZWNrX2N1cnNvcihzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwK KwkJCSAgICAgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwlzdHJ1 Y3QgaW50ZWxfcGxhbmUgKnBsYW5lID0gdG9faW50ZWxfcGxhbmUocGxhbmVfc3RhdGUtPnVhcGku cGxhbmUpOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxh bmUtPmJhc2UuZGV2KTsKKwljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5l X3N0YXRlLT5ody5mYjsKKwllbnVtIHBpcGUgcGlwZSA9IHBsYW5lLT5waXBlOworCWludCByZXQ7 CisKKwlyZXQgPSBpbnRlbF9jaGVja19jdXJzb3IoY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUpOwor CWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBpZiB3ZSB3YW50IHRvIHR1cm4gb2ZmIHRo ZSBjdXJzb3IgaWdub3JlIHdpZHRoIGFuZCBoZWlnaHQgKi8KKwlpZiAoIWZiKQorCQlyZXR1cm4g MDsKKworCS8qIENoZWNrIGZvciB3aGljaCBjdXJzb3IgdHlwZXMgd2Ugc3VwcG9ydCAqLworCWlm ICghaTl4eF9jdXJzb3Jfc2l6ZV9vayhwbGFuZV9zdGF0ZSkpIHsKKwkJZHJtX2RiZygmZGV2X3By aXYtPmRybSwKKwkJCSJDdXJzb3IgZGltZW5zaW9uICVkeCVkIG5vdCBzdXBwb3J0ZWRcbiIsCisJ CQlkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KSwKKwkJCWRybV9yZWN0X2hl aWdodCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwor CWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLCBwbGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxlICYm CisJCSAgICBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0uc3RyaWRlICE9IGZiLT5waXRjaGVz WzBdKTsKKworCWlmIChmYi0+cGl0Y2hlc1swXSAhPQorCSAgICBkcm1fcmVjdF93aWR0aCgmcGxh bmVfc3RhdGUtPnVhcGkuZHN0KSAqIGZiLT5mb3JtYXQtPmNwcFswXSkgeworCQlkcm1fZGJnX2tt cygmZGV2X3ByaXYtPmRybSwKKwkJCSAgICAiSW52YWxpZCBjdXJzb3Igc3RyaWRlICgldSkgKGN1 cnNvciB3aWR0aCAlZClcbiIsCisJCQkgICAgZmItPnBpdGNoZXNbMF0sCisJCQkgICAgZHJtX3Jl Y3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9 CisKKwkvKgorCSAqIFRoZXJlJ3Mgc29tZXRoaW5nIHdyb25nIHdpdGggdGhlIGN1cnNvciBvbiBD SFYgcGlwZSBDLgorCSAqIElmIGl0IHN0cmFkZGxlcyB0aGUgbGVmdCBlZGdlIG9mIHRoZSBzY3Jl ZW4gdGhlbgorCSAqIG1vdmluZyBpdCBhd2F5IGZyb20gdGhlIGVkZ2Ugb3IgZGlzYWJsaW5nIGl0 IG9mdGVuCisJICogcmVzdWx0cyBpbiBhIHBpcGUgdW5kZXJydW4sIGFuZCBvZnRlbiB0aGF0IGNh biBsZWFkIHRvCisJICogZGVhZCBwaXBlIChjb25zdGFudCB1bmRlcnJ1biByZXBvcnRlZCwgYW5k IGl0IHNjYW5zCisJICogb3V0IGp1c3QgYSBzb2xpZCBjb2xvcikuIFRvIHJlY292ZXIgZnJvbSB0 aGF0LCB0aGUKKwkgKiBkaXNwbGF5IHBvd2VyIHdlbGwgbXVzdCBiZSB0dXJuZWQgb2ZmIGFuZCBv biBhZ2Fpbi4KKwkgKiBSZWZ1c2UgdGhlIHB1dCB0aGUgY3Vyc29yIGludG8gdGhhdCBjb21wcm9t aXNlZCBwb3NpdGlvbi4KKwkgKi8KKwlpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikgJiYgcGlw ZSA9PSBQSVBFX0MgJiYKKwkgICAgcGxhbmVfc3RhdGUtPnVhcGkudmlzaWJsZSAmJiBwbGFuZV9z dGF0ZS0+dWFwaS5kc3QueDEgPCAwKSB7CisJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAor CQkJICAgICJDSFYgY3Vyc29yIEMgbm90IGFsbG93ZWQgdG8gc3RyYWRkbGUgdGhlIGxlZnQgc2Ny ZWVuIGVkZ2VcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwbGFuZV9zdGF0ZS0+Y3Rs ID0gaTl4eF9jdXJzb3JfY3RsKGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlKTsKKworCXJldHVybiAw OworfQorCitzdGF0aWMgdm9pZCBpOXh4X3VwZGF0ZV9jdXJzb3Ioc3RydWN0IGludGVsX3BsYW5l ICpwbGFuZSwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19z dGF0ZSwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0 YXRlKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxh bmUtPmJhc2UuZGV2KTsKKwllbnVtIHBpcGUgcGlwZSA9IHBsYW5lLT5waXBlOworCXUzMiBjbnRs ID0gMCwgYmFzZSA9IDAsIHBvcyA9IDAsIGZiY19jdGwgPSAwOworCXVuc2lnbmVkIGxvbmcgaXJx ZmxhZ3M7CisKKwlpZiAocGxhbmVfc3RhdGUgJiYgcGxhbmVfc3RhdGUtPnVhcGkudmlzaWJsZSkg eworCQl1bnNpZ25lZCB3aWR0aCA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5k c3QpOworCQl1bnNpZ25lZCBoZWlnaHQgPSBkcm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0YXRlLT51 YXBpLmRzdCk7CisKKwkJY250bCA9IHBsYW5lX3N0YXRlLT5jdGwgfAorCQkJaTl4eF9jdXJzb3Jf Y3RsX2NydGMoY3J0Y19zdGF0ZSk7CisKKwkJaWYgKHdpZHRoICE9IGhlaWdodCkKKwkJCWZiY19j dGwgPSBDVVJfRkJDX0NUTF9FTiB8IChoZWlnaHQgLSAxKTsKKworCQliYXNlID0gaW50ZWxfY3Vy c29yX2Jhc2UocGxhbmVfc3RhdGUpOworCQlwb3MgPSBpbnRlbF9jdXJzb3JfcG9zaXRpb24ocGxh bmVfc3RhdGUpOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+dW5jb3JlLmxv Y2ssIGlycWZsYWdzKTsKKworCS8qCisJICogT24gc29tZSBwbGF0Zm9ybXMgd3JpdGluZyBDVVJD TlRSIGZpcnN0IHdpbGwgYWxzbworCSAqIGNhdXNlIENVUlBPUyB0byBiZSBhcm1lZCBieSB0aGUg Q1VSQkFTRSB3cml0ZS4KKwkgKiBXaXRob3V0IHRoZSBDVVJDTlRSIHdyaXRlIHRoZSBDVVJQT1Mg d3JpdGUgd291bGQKKwkgKiBhcm0gaXRzZWxmLiBUaHVzIHdlIGFsd2F5cyB1cGRhdGUgQ1VSQ05U UiBiZWZvcmUKKwkgKiBDVVJQT1MuCisJICoKKwkgKiBPbiBvdGhlciBwbGF0Zm9ybXMgQ1VSUE9T IGFsd2F5cyByZXF1aXJlcyB0aGUKKwkgKiBDVVJCQVNFIHdyaXRlIHRvIGFybSB0aGUgdXBkYXRl LiBBZGRpdG9uYWxseQorCSAqIGEgd3JpdGUgdG8gYW55IG9mIHRoZSBjdXJzb3IgcmVnaXN0ZXIg d2lsbCBjYW5jZWwKKwkgKiBhbiBhbHJlYWR5IGFybWVkIGN1cnNvciB1cGRhdGUuIFRodXMgbGVh dmluZyBvdXQKKwkgKiB0aGUgQ1VSQkFTRSB3cml0ZSBhZnRlciBDVVJQT1MgY291bGQgbGVhZCB0 byBhCisJICogY3Vyc29yIHRoYXQgZG9lc24ndCBhcHBlYXIgdG8gbW92ZSwgb3IgZXZlbiBjaGFu Z2UKKwkgKiBzaGFwZS4gVGh1cyB3ZSBhbHdheXMgd3JpdGUgQ1VSQkFTRS4KKwkgKgorCSAqIFRo ZSBvdGhlciByZWdpc3RlcnMgYXJlIGFybWVkIGJ5IGJ5IHRoZSBDVVJCQVNFIHdyaXRlCisJICog ZXhjZXB0IHdoZW4gdGhlIHBsYW5lIGlzIGdldHRpbmcgZW5hYmxlZCBhdCB3aGljaCB0aW1lCisJ ICogdGhlIENVUkNOVFIgd3JpdGUgYXJtcyB0aGUgdXBkYXRlLgorCSAqLworCisJaWYgKElOVEVM X0dFTihkZXZfcHJpdikgPj0gOSkKKwkJc2tsX3dyaXRlX2N1cnNvcl93bShwbGFuZSwgY3J0Y19z dGF0ZSk7CisKKwlpZiAoIWludGVsX2NydGNfbmVlZHNfbW9kZXNldChjcnRjX3N0YXRlKSkKKwkJ aW50ZWxfcHNyMl9wcm9ncmFtX3BsYW5lX3NlbF9mZXRjaChwbGFuZSwgY3J0Y19zdGF0ZSwgcGxh bmVfc3RhdGUsIDApOworCisJaWYgKHBsYW5lLT5jdXJzb3IuYmFzZSAhPSBiYXNlIHx8CisJICAg IHBsYW5lLT5jdXJzb3Iuc2l6ZSAhPSBmYmNfY3RsIHx8CisJICAgIHBsYW5lLT5jdXJzb3IuY250 bCAhPSBjbnRsKSB7CisJCWlmIChIQVNfQ1VSX0ZCQyhkZXZfcHJpdikpCisJCQlpbnRlbF9kZV93 cml0ZV9mdyhkZXZfcHJpdiwgQ1VSX0ZCQ19DVEwocGlwZSksCisJCQkJCSAgZmJjX2N0bCk7CisJ CWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBDVVJDTlRSKHBpcGUpLCBjbnRsKTsKKwkJaW50 ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIENVUlBPUyhwaXBlKSwgcG9zKTsKKwkJaW50ZWxfZGVf d3JpdGVfZncoZGV2X3ByaXYsIENVUkJBU0UocGlwZSksIGJhc2UpOworCisJCXBsYW5lLT5jdXJz b3IuYmFzZSA9IGJhc2U7CisJCXBsYW5lLT5jdXJzb3Iuc2l6ZSA9IGZiY19jdGw7CisJCXBsYW5l LT5jdXJzb3IuY250bCA9IGNudGw7CisJfSBlbHNlIHsKKwkJaW50ZWxfZGVfd3JpdGVfZncoZGV2 X3ByaXYsIENVUlBPUyhwaXBlKSwgcG9zKTsKKwkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYs IENVUkJBU0UocGlwZSksIGJhc2UpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRl dl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBpOXh4X2Rp c2FibGVfY3Vyc29yKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCisJCQkJY29uc3Qgc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCit7CisJaTl4eF91cGRhdGVfY3Vyc29yKHBs YW5lLCBjcnRjX3N0YXRlLCBOVUxMKTsKK30KKworc3RhdGljIGJvb2wgaTl4eF9jdXJzb3JfZ2V0 X2h3X3N0YXRlKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCisJCQkJICAgICBlbnVtIHBpcGUg KnBpcGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShw bGFuZS0+YmFzZS5kZXYpOworCWVudW0gaW50ZWxfZGlzcGxheV9wb3dlcl9kb21haW4gcG93ZXJf ZG9tYWluOworCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOworCWJvb2wgcmV0OworCXUzMiB2YWw7 CisKKwkvKgorCSAqIE5vdCAxMDAlIGNvcnJlY3QgZm9yIHBsYW5lcyB0aGF0IGNhbiBtb3ZlIGJl dHdlZW4gcGlwZXMsCisJICogYnV0IHRoYXQncyBvbmx5IHRoZSBjYXNlIGZvciBnZW4yLTMgd2hp Y2ggZG9uJ3QgaGF2ZSBhbnkKKwkgKiBkaXNwbGF5IHBvd2VyIHdlbGxzLgorCSAqLworCXBvd2Vy X2RvbWFpbiA9IFBPV0VSX0RPTUFJTl9QSVBFKHBsYW5lLT5waXBlKTsKKwl3YWtlcmVmID0gaW50 ZWxfZGlzcGxheV9wb3dlcl9nZXRfaWZfZW5hYmxlZChkZXZfcHJpdiwgcG93ZXJfZG9tYWluKTsK KwlpZiAoIXdha2VyZWYpCisJCXJldHVybiBmYWxzZTsKKworCXZhbCA9IGludGVsX2RlX3JlYWQo ZGV2X3ByaXYsIENVUkNOVFIocGxhbmUtPnBpcGUpKTsKKworCXJldCA9IHZhbCAmIE1DVVJTT1Jf TU9ERTsKKworCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDUgfHwgSVNfRzRYKGRldl9wcml2 KSkKKwkJKnBpcGUgPSBwbGFuZS0+cGlwZTsKKwllbHNlCisJCSpwaXBlID0gKHZhbCAmIE1DVVJT T1JfUElQRV9TRUxFQ1RfTUFTSykgPj4KKwkJCU1DVVJTT1JfUElQRV9TRUxFQ1RfU0hJRlQ7CisK KwlpbnRlbF9kaXNwbGF5X3Bvd2VyX3B1dChkZXZfcHJpdiwgcG93ZXJfZG9tYWluLCB3YWtlcmVm KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBib29sIGludGVsX2N1cnNvcl9mb3JtYXRf bW9kX3N1cHBvcnRlZChzdHJ1Y3QgZHJtX3BsYW5lICpfcGxhbmUsCisJCQkJCSAgICAgIHUzMiBm b3JtYXQsIHU2NCBtb2RpZmllcikKK3sKKwlyZXR1cm4gbW9kaWZpZXIgPT0gRFJNX0ZPUk1BVF9N T0RfTElORUFSICYmCisJCWZvcm1hdCA9PSBEUk1fRk9STUFUX0FSR0I4ODg4OworfQorCitzdGF0 aWMgaW50CitpbnRlbF9sZWdhY3lfY3Vyc29yX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpfcGxh bmUsCisJCQkgICBzdHJ1Y3QgZHJtX2NydGMgKl9jcnRjLAorCQkJICAgc3RydWN0IGRybV9mcmFt ZWJ1ZmZlciAqZmIsCisJCQkgICBpbnQgY3J0Y194LCBpbnQgY3J0Y195LAorCQkJICAgdW5zaWdu ZWQgaW50IGNydGNfdywgdW5zaWduZWQgaW50IGNydGNfaCwKKwkJCSAgIHUzMiBzcmNfeCwgdTMy IHNyY195LAorCQkJICAgdTMyIHNyY193LCB1MzIgc3JjX2gsCisJCQkgICBzdHJ1Y3QgZHJtX21v ZGVzZXRfYWNxdWlyZV9jdHggKmN0eCkKK3sKKwlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lID0g dG9faW50ZWxfcGxhbmUoX3BsYW5lKTsKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2lu dGVsX2NydGMoX2NydGMpOworCXN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqb2xkX3BsYW5lX3N0 YXRlID0KKwkJdG9faW50ZWxfcGxhbmVfc3RhdGUocGxhbmUtPmJhc2Uuc3RhdGUpOworCXN0cnVj dCBpbnRlbF9wbGFuZV9zdGF0ZSAqbmV3X3BsYW5lX3N0YXRlOworCXN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjcnRjX3N0YXRlID0KKwkJdG9faW50ZWxfY3J0Y19zdGF0ZShjcnRjLT5iYXNlLnN0 YXRlKTsKKwlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqbmV3X2NydGNfc3RhdGU7CisJaW50IHJl dDsKKworCS8qCisJICogV2hlbiBjcnRjIGlzIGluYWN0aXZlIG9yIHRoZXJlIGlzIGEgbW9kZXNl dCBwZW5kaW5nLAorCSAqIHdhaXQgZm9yIGl0IHRvIGNvbXBsZXRlIGluIHRoZSBzbG93cGF0aAor CSAqCisJICogRklYTUUgYmlnam9pbmVyIGZhc3RwYXRoIHdvdWxkIGJlIGdvb2QKKwkgKi8KKwlp ZiAoIWNydGNfc3RhdGUtPmh3LmFjdGl2ZSB8fCBpbnRlbF9jcnRjX25lZWRzX21vZGVzZXQoY3J0 Y19zdGF0ZSkgfHwKKwkgICAgY3J0Y19zdGF0ZS0+dXBkYXRlX3BpcGUgfHwgY3J0Y19zdGF0ZS0+ Ymlnam9pbmVyKQorCQlnb3RvIHNsb3c7CisKKwkvKgorCSAqIERvbid0IGRvIGFuIGFzeW5jIHVw ZGF0ZSBpZiB0aGVyZSBpcyBhbiBvdXRzdGFuZGluZyBjb21taXQgbW9kaWZ5aW5nCisJICogdGhl IHBsYW5lLiAgVGhpcyBwcmV2ZW50cyBvdXIgYXN5bmMgdXBkYXRlJ3MgY2hhbmdlcyBmcm9tIGdl dHRpbmcKKwkgKiBvdmVycmlkZGVuIGJ5IGEgcHJldmlvdXMgc3luY2hyb25vdXMgdXBkYXRlJ3Mg c3RhdGUuCisJICovCisJaWYgKG9sZF9wbGFuZV9zdGF0ZS0+dWFwaS5jb21taXQgJiYKKwkgICAg IXRyeV93YWl0X2Zvcl9jb21wbGV0aW9uKCZvbGRfcGxhbmVfc3RhdGUtPnVhcGkuY29tbWl0LT5o d19kb25lKSkKKwkJZ290byBzbG93OworCisJLyoKKwkgKiBJZiBhbnkgcGFyYW1ldGVycyBjaGFu Z2UgdGhhdCBtYXkgYWZmZWN0IHdhdGVybWFya3MsCisJICogdGFrZSB0aGUgc2xvd3BhdGguIE9u bHkgY2hhbmdpbmcgZmIgb3IgcG9zaXRpb24gc2hvdWxkIGJlCisJICogaW4gdGhlIGZhc3RwYXRo LgorCSAqLworCWlmIChvbGRfcGxhbmVfc3RhdGUtPnVhcGkuY3J0YyAhPSAmY3J0Yy0+YmFzZSB8 fAorCSAgICBvbGRfcGxhbmVfc3RhdGUtPnVhcGkuc3JjX3cgIT0gc3JjX3cgfHwKKwkgICAgb2xk X3BsYW5lX3N0YXRlLT51YXBpLnNyY19oICE9IHNyY19oIHx8CisJICAgIG9sZF9wbGFuZV9zdGF0 ZS0+dWFwaS5jcnRjX3cgIT0gY3J0Y193IHx8CisJICAgIG9sZF9wbGFuZV9zdGF0ZS0+dWFwaS5j cnRjX2ggIT0gY3J0Y19oIHx8CisJICAgICFvbGRfcGxhbmVfc3RhdGUtPnVhcGkuZmIgIT0gIWZi KQorCQlnb3RvIHNsb3c7CisKKwluZXdfcGxhbmVfc3RhdGUgPSB0b19pbnRlbF9wbGFuZV9zdGF0 ZShpbnRlbF9wbGFuZV9kdXBsaWNhdGVfc3RhdGUoJnBsYW5lLT5iYXNlKSk7CisJaWYgKCFuZXdf cGxhbmVfc3RhdGUpCisJCXJldHVybiAtRU5PTUVNOworCisJbmV3X2NydGNfc3RhdGUgPSB0b19p bnRlbF9jcnRjX3N0YXRlKGludGVsX2NydGNfZHVwbGljYXRlX3N0YXRlKCZjcnRjLT5iYXNlKSk7 CisJaWYgKCFuZXdfY3J0Y19zdGF0ZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF9m cmVlOworCX0KKworCWRybV9hdG9taWNfc2V0X2ZiX2Zvcl9wbGFuZSgmbmV3X3BsYW5lX3N0YXRl LT51YXBpLCBmYik7CisKKwluZXdfcGxhbmVfc3RhdGUtPnVhcGkuc3JjX3ggPSBzcmNfeDsKKwlu ZXdfcGxhbmVfc3RhdGUtPnVhcGkuc3JjX3kgPSBzcmNfeTsKKwluZXdfcGxhbmVfc3RhdGUtPnVh cGkuc3JjX3cgPSBzcmNfdzsKKwluZXdfcGxhbmVfc3RhdGUtPnVhcGkuc3JjX2ggPSBzcmNfaDsK KwluZXdfcGxhbmVfc3RhdGUtPnVhcGkuY3J0Y194ID0gY3J0Y194OworCW5ld19wbGFuZV9zdGF0 ZS0+dWFwaS5jcnRjX3kgPSBjcnRjX3k7CisJbmV3X3BsYW5lX3N0YXRlLT51YXBpLmNydGNfdyA9 IGNydGNfdzsKKwluZXdfcGxhbmVfc3RhdGUtPnVhcGkuY3J0Y19oID0gY3J0Y19oOworCisJaW50 ZWxfcGxhbmVfY29weV91YXBpX3RvX2h3X3N0YXRlKG5ld19wbGFuZV9zdGF0ZSwgbmV3X3BsYW5l X3N0YXRlLCBjcnRjKTsKKworCXJldCA9IGludGVsX3BsYW5lX2F0b21pY19jaGVja193aXRoX3N0 YXRlKGNydGNfc3RhdGUsIG5ld19jcnRjX3N0YXRlLAorCQkJCQkJICBvbGRfcGxhbmVfc3RhdGUs IG5ld19wbGFuZV9zdGF0ZSk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZnJlZTsKKworCXJldCA9 IGludGVsX3BsYW5lX3Bpbl9mYihuZXdfcGxhbmVfc3RhdGUpOworCWlmIChyZXQpCisJCWdvdG8g b3V0X2ZyZWU7CisKKwlpbnRlbF9mcm9udGJ1ZmZlcl9mbHVzaCh0b19pbnRlbF9mcm9udGJ1ZmZl cihuZXdfcGxhbmVfc3RhdGUtPmh3LmZiKSwKKwkJCQlPUklHSU5fRkxJUCk7CisJaW50ZWxfZnJv bnRidWZmZXJfdHJhY2sodG9faW50ZWxfZnJvbnRidWZmZXIob2xkX3BsYW5lX3N0YXRlLT5ody5m YiksCisJCQkJdG9faW50ZWxfZnJvbnRidWZmZXIobmV3X3BsYW5lX3N0YXRlLT5ody5mYiksCisJ CQkJcGxhbmUtPmZyb250YnVmZmVyX2JpdCk7CisKKwkvKiBTd2FwIHBsYW5lIHN0YXRlICovCisJ cGxhbmUtPmJhc2Uuc3RhdGUgPSAmbmV3X3BsYW5lX3N0YXRlLT51YXBpOworCisJLyoKKwkgKiBX ZSBjYW5ub3Qgc3dhcCBjcnRjX3N0YXRlIGFzIGl0IG1heSBiZSBpbiB1c2UgYnkgYW4gYXRvbWlj IGNvbW1pdCBvcgorCSAqIHBhZ2UgZmxpcCB0aGF0J3MgcnVubmluZyBzaW11bHRhbmVvdXNseS4g SWYgd2Ugc3dhcCBjcnRjX3N0YXRlIGFuZAorCSAqIGRlc3Ryb3kgdGhlIG9sZCBzdGF0ZSwgd2Ug d2lsbCBjYXVzZSBhIHVzZS1hZnRlci1mcmVlIHRoZXJlLgorCSAqCisJICogT25seSB1cGRhdGUg YWN0aXZlX3BsYW5lcywgd2hpY2ggaXMgbmVlZGVkIGZvciBvdXIgaW50ZXJuYWwKKwkgKiBib29r a2VlcGluZy4gRWl0aGVyIHZhbHVlIHdpbGwgZG8gdGhlIHJpZ2h0IHRoaW5nIHdoZW4gdXBkYXRp bmcKKwkgKiBwbGFuZXMgYXRvbWljYWxseS4gSWYgdGhlIGN1cnNvciB3YXMgcGFydCBvZiB0aGUg YXRvbWljIHVwZGF0ZSB0aGVuCisJICogd2Ugd291bGQgaGF2ZSB0YWtlbiB0aGUgc2xvd3BhdGgu CisJICovCisJY3J0Y19zdGF0ZS0+YWN0aXZlX3BsYW5lcyA9IG5ld19jcnRjX3N0YXRlLT5hY3Rp dmVfcGxhbmVzOworCisJaWYgKG5ld19wbGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxlKQorCQlpbnRl bF91cGRhdGVfcGxhbmUocGxhbmUsIGNydGNfc3RhdGUsIG5ld19wbGFuZV9zdGF0ZSk7CisJZWxz ZQorCQlpbnRlbF9kaXNhYmxlX3BsYW5lKHBsYW5lLCBjcnRjX3N0YXRlKTsKKworCWludGVsX3Bs YW5lX3VucGluX2ZiKG9sZF9wbGFuZV9zdGF0ZSk7CisKK291dF9mcmVlOgorCWlmIChuZXdfY3J0 Y19zdGF0ZSkKKwkJaW50ZWxfY3J0Y19kZXN0cm95X3N0YXRlKCZjcnRjLT5iYXNlLCAmbmV3X2Ny dGNfc3RhdGUtPnVhcGkpOworCWlmIChyZXQpCisJCWludGVsX3BsYW5lX2Rlc3Ryb3lfc3RhdGUo JnBsYW5lLT5iYXNlLCAmbmV3X3BsYW5lX3N0YXRlLT51YXBpKTsKKwllbHNlCisJCWludGVsX3Bs YW5lX2Rlc3Ryb3lfc3RhdGUoJnBsYW5lLT5iYXNlLCAmb2xkX3BsYW5lX3N0YXRlLT51YXBpKTsK KwlyZXR1cm4gcmV0OworCitzbG93OgorCXJldHVybiBkcm1fYXRvbWljX2hlbHBlcl91cGRhdGVf cGxhbmUoJnBsYW5lLT5iYXNlLCAmY3J0Yy0+YmFzZSwgZmIsCisJCQkJCSAgICAgIGNydGNfeCwg Y3J0Y195LCBjcnRjX3csIGNydGNfaCwKKwkJCQkJICAgICAgc3JjX3gsIHNyY195LCBzcmNfdywg c3JjX2gsIGN0eCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIGlu dGVsX2N1cnNvcl9wbGFuZV9mdW5jcyA9IHsKKwkudXBkYXRlX3BsYW5lID0gaW50ZWxfbGVnYWN5 X2N1cnNvcl91cGRhdGUsCisJLmRpc2FibGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl9kaXNh YmxlX3BsYW5lLAorCS5kZXN0cm95ID0gaW50ZWxfcGxhbmVfZGVzdHJveSwKKwkuYXRvbWljX2R1 cGxpY2F0ZV9zdGF0ZSA9IGludGVsX3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rl c3Ryb3lfc3RhdGUgPSBpbnRlbF9wbGFuZV9kZXN0cm95X3N0YXRlLAorCS5mb3JtYXRfbW9kX3N1 cHBvcnRlZCA9IGludGVsX2N1cnNvcl9mb3JtYXRfbW9kX3N1cHBvcnRlZCwKK307CisKK3N0cnVj dCBpbnRlbF9wbGFuZSAqCitpbnRlbF9jdXJzb3JfcGxhbmVfY3JlYXRlKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCSAgZW51bSBwaXBlIHBpcGUpCit7CisJc3RydWN0IGlu dGVsX3BsYW5lICpjdXJzb3I7CisJaW50IHJldCwgenBvczsKKworCWN1cnNvciA9IGludGVsX3Bs YW5lX2FsbG9jKCk7CisJaWYgKElTX0VSUihjdXJzb3IpKQorCQlyZXR1cm4gY3Vyc29yOworCisJ Y3Vyc29yLT5waXBlID0gcGlwZTsKKwljdXJzb3ItPmk5eHhfcGxhbmUgPSAoZW51bSBpOXh4X3Bs YW5lX2lkKSBwaXBlOworCWN1cnNvci0+aWQgPSBQTEFORV9DVVJTT1I7CisJY3Vyc29yLT5mcm9u dGJ1ZmZlcl9iaXQgPSBJTlRFTF9GUk9OVEJVRkZFUihwaXBlLCBjdXJzb3ItPmlkKTsKKworCWlm IChJU19JODQ1RyhkZXZfcHJpdikgfHwgSVNfSTg2NUcoZGV2X3ByaXYpKSB7CisJCWN1cnNvci0+ bWF4X3N0cmlkZSA9IGk4NDVfY3Vyc29yX21heF9zdHJpZGU7CisJCWN1cnNvci0+dXBkYXRlX3Bs YW5lID0gaTg0NV91cGRhdGVfY3Vyc29yOworCQljdXJzb3ItPmRpc2FibGVfcGxhbmUgPSBpODQ1 X2Rpc2FibGVfY3Vyc29yOworCQljdXJzb3ItPmdldF9od19zdGF0ZSA9IGk4NDVfY3Vyc29yX2dl dF9od19zdGF0ZTsKKwkJY3Vyc29yLT5jaGVja19wbGFuZSA9IGk4NDVfY2hlY2tfY3Vyc29yOwor CX0gZWxzZSB7CisJCWN1cnNvci0+bWF4X3N0cmlkZSA9IGk5eHhfY3Vyc29yX21heF9zdHJpZGU7 CisJCWN1cnNvci0+dXBkYXRlX3BsYW5lID0gaTl4eF91cGRhdGVfY3Vyc29yOworCQljdXJzb3It PmRpc2FibGVfcGxhbmUgPSBpOXh4X2Rpc2FibGVfY3Vyc29yOworCQljdXJzb3ItPmdldF9od19z dGF0ZSA9IGk5eHhfY3Vyc29yX2dldF9od19zdGF0ZTsKKwkJY3Vyc29yLT5jaGVja19wbGFuZSA9 IGk5eHhfY2hlY2tfY3Vyc29yOworCX0KKworCWN1cnNvci0+Y3Vyc29yLmJhc2UgPSB+MDsKKwlj dXJzb3ItPmN1cnNvci5jbnRsID0gfjA7CisKKwlpZiAoSVNfSTg0NUcoZGV2X3ByaXYpIHx8IElT X0k4NjVHKGRldl9wcml2KSB8fCBIQVNfQ1VSX0ZCQyhkZXZfcHJpdikpCisJCWN1cnNvci0+Y3Vy c29yLnNpemUgPSB+MDsKKworCXJldCA9IGRybV91bml2ZXJzYWxfcGxhbmVfaW5pdCgmZGV2X3By aXYtPmRybSwgJmN1cnNvci0+YmFzZSwKKwkJCQkgICAgICAgMCwgJmludGVsX2N1cnNvcl9wbGFu ZV9mdW5jcywKKwkJCQkgICAgICAgaW50ZWxfY3Vyc29yX2Zvcm1hdHMsCisJCQkJICAgICAgIEFS UkFZX1NJWkUoaW50ZWxfY3Vyc29yX2Zvcm1hdHMpLAorCQkJCSAgICAgICBjdXJzb3JfZm9ybWF0 X21vZGlmaWVycywKKwkJCQkgICAgICAgRFJNX1BMQU5FX1RZUEVfQ1VSU09SLAorCQkJCSAgICAg ICAiY3Vyc29yICVjIiwgcGlwZV9uYW1lKHBpcGUpKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWw7 CisKKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA0KQorCQlkcm1fcGxhbmVfY3JlYXRlX3Jv dGF0aW9uX3Byb3BlcnR5KCZjdXJzb3ItPmJhc2UsCisJCQkJCQkgICBEUk1fTU9ERV9ST1RBVEVf MCwKKwkJCQkJCSAgIERSTV9NT0RFX1JPVEFURV8wIHwKKwkJCQkJCSAgIERSTV9NT0RFX1JPVEFU RV8xODApOworCisJenBvcyA9IFJVTlRJTUVfSU5GTyhkZXZfcHJpdiktPm51bV9zcHJpdGVzW3Bp cGVdICsgMTsKKwlkcm1fcGxhbmVfY3JlYXRlX3pwb3NfaW1tdXRhYmxlX3Byb3BlcnR5KCZjdXJz b3ItPmJhc2UsIHpwb3MpOworCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTIpCisJCWRy bV9wbGFuZV9lbmFibGVfZmJfZGFtYWdlX2NsaXBzKCZjdXJzb3ItPmJhc2UpOworCisJZHJtX3Bs YW5lX2hlbHBlcl9hZGQoJmN1cnNvci0+YmFzZSwgJmludGVsX3BsYW5lX2hlbHBlcl9mdW5jcyk7 CisKKwlyZXR1cm4gY3Vyc29yOworCitmYWlsOgorCWludGVsX3BsYW5lX2ZyZWUoY3Vyc29yKTsK KworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3Bs YXkvaW50ZWxfZGlzcGxheS5jCmluZGV4IDc5ZDc0NzliZWVkMi4uNzIyYTFjZjYxOTQxIDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYworKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYwpAQCAtMTM3LDE2 ICsxMzcsNiBAQCBzdGF0aWMgY29uc3QgdTY0IGk5eHhfZm9ybWF0X21vZGlmaWVyc1tdID0gewog CURSTV9GT1JNQVRfTU9EX0lOVkFMSUQKIH07CiAKLS8qIEN1cnNvciBmb3JtYXRzICovCi1zdGF0 aWMgY29uc3QgdTMyIGludGVsX2N1cnNvcl9mb3JtYXRzW10gPSB7Ci0JRFJNX0ZPUk1BVF9BUkdC ODg4OCwKLX07Ci0KLXN0YXRpYyBjb25zdCB1NjQgY3Vyc29yX2Zvcm1hdF9tb2RpZmllcnNbXSA9 IHsKLQlEUk1fRk9STUFUX01PRF9MSU5FQVIsCi0JRFJNX0ZPUk1BVF9NT0RfSU5WQUxJRAotfTsK LQogc3RhdGljIHZvaWQgaTl4eF9jcnRjX2Nsb2NrX2dldChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0 YywKIAkJCQlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpOwogc3RhdGljIHZv aWQgaWxrX3BjaF9jbG9ja19nZXQoc3RydWN0IGludGVsX2NydGMgKmNydGMsCkBAIC0yNTI4LDkg KzI1MTgsOSBAQCBzdGF0aWMgdTMyIGludGVsX2NvbXB1dGVfYWxpZ25lZF9vZmZzZXQoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCXJldHVybiBvZmZzZXRfYWxpZ25lZDsKIH0K IAotc3RhdGljIHUzMiBpbnRlbF9wbGFuZV9jb21wdXRlX2FsaWduZWRfb2Zmc2V0KGludCAqeCwg aW50ICp5LAotCQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnN0YXRl LAotCQkJCQkgICAgICBpbnQgY29sb3JfcGxhbmUpCit1MzIgaW50ZWxfcGxhbmVfY29tcHV0ZV9h bGlnbmVkX29mZnNldChpbnQgKngsIGludCAqeSwKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IGlu dGVsX3BsYW5lX3N0YXRlICpzdGF0ZSwKKwkJCQkgICAgICAgaW50IGNvbG9yX3BsYW5lKQogewog CXN0cnVjdCBpbnRlbF9wbGFuZSAqaW50ZWxfcGxhbmUgPSB0b19pbnRlbF9wbGFuZShzdGF0ZS0+ dWFwaS5wbGFuZSk7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkx NShpbnRlbF9wbGFuZS0+YmFzZS5kZXYpOwpAQCAtMzI2Nyw3ICszMjU3LDcgQEAgaW50ZWxfcGxh bmVfcmVtYXBfZ3R0KHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCiAJfQog fQogCi1zdGF0aWMgaW50CitpbnQKIGludGVsX3BsYW5lX2NvbXB1dGVfZ3R0KHN0cnVjdCBpbnRl bF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCiB7CiAJY29uc3Qgc3RydWN0IGludGVsX2ZyYW1l YnVmZmVyICpmYiA9CkBAIC0xMTUzNiw1NjkgKzExNTI2LDYgQEAgc3RhdGljIGJvb2wgaW50ZWxf Y3J0Y19nZXRfcGlwZV9jb25maWcoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUp CiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyB1MzIgaW50ZWxfY3Vyc29yX2Jhc2UoY29uc3Qg c3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPQotCQl0b19pOTE1KHBsYW5lX3N0YXRlLT51YXBpLnBsYW5l LT5kZXYpOwotCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUt Pmh3LmZiOwotCWNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSBpbnRlbF9m Yl9vYmooZmIpOwotCXUzMiBiYXNlOwotCi0JaWYgKElOVEVMX0lORk8oZGV2X3ByaXYpLT5kaXNw bGF5LmN1cnNvcl9uZWVkc19waHlzaWNhbCkKLQkJYmFzZSA9IHNnX2RtYV9hZGRyZXNzKG9iai0+ bW0ucGFnZXMtPnNnbCk7Ci0JZWxzZQotCQliYXNlID0gaW50ZWxfcGxhbmVfZ2d0dF9vZmZzZXQo cGxhbmVfc3RhdGUpOwotCi0JcmV0dXJuIGJhc2UgKyBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVb MF0ub2Zmc2V0OwotfQotCi1zdGF0aWMgdTMyIGludGVsX2N1cnNvcl9wb3NpdGlvbihjb25zdCBz dHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQotewotCWludCB4ID0gcGxhbmVf c3RhdGUtPnVhcGkuZHN0LngxOwotCWludCB5ID0gcGxhbmVfc3RhdGUtPnVhcGkuZHN0LnkxOwot CXUzMiBwb3MgPSAwOwotCi0JaWYgKHggPCAwKSB7Ci0JCXBvcyB8PSBDVVJTT1JfUE9TX1NJR04g PDwgQ1VSU09SX1hfU0hJRlQ7Ci0JCXggPSAteDsKLQl9Ci0JcG9zIHw9IHggPDwgQ1VSU09SX1hf U0hJRlQ7Ci0KLQlpZiAoeSA8IDApIHsKLQkJcG9zIHw9IENVUlNPUl9QT1NfU0lHTiA8PCBDVVJT T1JfWV9TSElGVDsKLQkJeSA9IC15OwotCX0KLQlwb3MgfD0geSA8PCBDVVJTT1JfWV9TSElGVDsK LQotCXJldHVybiBwb3M7Ci19Ci0KLXN0YXRpYyBib29sIGludGVsX2N1cnNvcl9zaXplX29rKGNv bnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCi17Ci0JY29uc3Qgc3Ry dWN0IGRybV9tb2RlX2NvbmZpZyAqY29uZmlnID0KLQkJJnBsYW5lX3N0YXRlLT51YXBpLnBsYW5l LT5kZXYtPm1vZGVfY29uZmlnOwotCWludCB3aWR0aCA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9z dGF0ZS0+dWFwaS5kc3QpOwotCWludCBoZWlnaHQgPSBkcm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0 YXRlLT51YXBpLmRzdCk7Ci0KLQlyZXR1cm4gd2lkdGggPiAwICYmIHdpZHRoIDw9IGNvbmZpZy0+ Y3Vyc29yX3dpZHRoICYmCi0JCWhlaWdodCA+IDAgJiYgaGVpZ2h0IDw9IGNvbmZpZy0+Y3Vyc29y X2hlaWdodDsKLX0KLQotc3RhdGljIGludCBpbnRlbF9jdXJzb3JfY2hlY2tfc3VyZmFjZShzdHJ1 Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQotewotCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9Ci0JCXRvX2k5MTUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRl dik7Ci0JdW5zaWduZWQgaW50IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmh3LnJvdGF0aW9uOwot CWludCBzcmNfeCwgc3JjX3k7Ci0JdTMyIG9mZnNldDsKLQlpbnQgcmV0OwotCi0JcmV0ID0gaW50 ZWxfcGxhbmVfY29tcHV0ZV9ndHQocGxhbmVfc3RhdGUpOwotCWlmIChyZXQpCi0JCXJldHVybiBy ZXQ7Ci0KLQlpZiAoIXBsYW5lX3N0YXRlLT51YXBpLnZpc2libGUpCi0JCXJldHVybiAwOwotCi0J c3JjX3ggPSBwbGFuZV9zdGF0ZS0+dWFwaS5zcmMueDEgPj4gMTY7Ci0Jc3JjX3kgPSBwbGFuZV9z dGF0ZS0+dWFwaS5zcmMueTEgPj4gMTY7Ci0KLQlpbnRlbF9hZGRfZmJfb2Zmc2V0cygmc3JjX3gs ICZzcmNfeSwgcGxhbmVfc3RhdGUsIDApOwotCW9mZnNldCA9IGludGVsX3BsYW5lX2NvbXB1dGVf YWxpZ25lZF9vZmZzZXQoJnNyY194LCAmc3JjX3ksCi0JCQkJCQkgICAgcGxhbmVfc3RhdGUsIDAp OwotCi0JaWYgKHNyY194ICE9IDAgfHwgc3JjX3kgIT0gMCkgewotCQlkcm1fZGJnX2ttcygmZGV2 X3ByaXYtPmRybSwKLQkJCSAgICAiQXJiaXRyYXJ5IGN1cnNvciBwYW5uaW5nIG5vdCBzdXBwb3J0 ZWRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKgotCSAqIFB1dCB0aGUgZmluYWwg Y29vcmRpbmF0ZXMgYmFjayBzbyB0aGF0IHRoZSBzcmMKLQkgKiBjb29yZGluYXRlIGNoZWNrcyB3 aWxsIHNlZSB0aGUgcmlnaHQgdmFsdWVzLgotCSAqLwotCWRybV9yZWN0X3RyYW5zbGF0ZV90bygm cGxhbmVfc3RhdGUtPnVhcGkuc3JjLAotCQkJICAgICAgc3JjX3ggPDwgMTYsIHNyY195IDw8IDE2 KTsKLQotCS8qIElMSysgZG8gdGhpcyBhdXRvbWFnaWNhbGx5IGluIGhhcmR3YXJlICovCi0JaWYg KEhBU19HTUNIKGRldl9wcml2KSAmJiByb3RhdGlvbiAmIERSTV9NT0RFX1JPVEFURV8xODApIHsK LQkJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7 Ci0JCWludCBzcmNfdyA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5zcmMpID4+ IDE2OwotCQlpbnQgc3JjX2ggPSBkcm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0YXRlLT51YXBpLnNy YykgPj4gMTY7Ci0KLQkJb2Zmc2V0ICs9IChzcmNfaCAqIHNyY193IC0gMSkgKiBmYi0+Zm9ybWF0 LT5jcHBbMF07Ci0JfQotCi0JcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLm9mZnNldCA9IG9m ZnNldDsKLQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0ueCA9IHNyY194OwotCXBsYW5lX3N0 YXRlLT5jb2xvcl9wbGFuZVswXS55ID0gc3JjX3k7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGlj IGludCBpbnRlbF9jaGVja19jdXJzb3Ioc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3Rh dGUsCi0JCQkgICAgICBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQotewot CWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwot CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkxNShwbGFuZV9zdGF0ZS0+dWFw aS5wbGFuZS0+ZGV2KTsKLQljb25zdCBzdHJ1Y3QgZHJtX3JlY3Qgc3JjID0gcGxhbmVfc3RhdGUt PnVhcGkuc3JjOwotCWNvbnN0IHN0cnVjdCBkcm1fcmVjdCBkc3QgPSBwbGFuZV9zdGF0ZS0+dWFw aS5kc3Q7Ci0JaW50IHJldDsKLQotCWlmIChmYiAmJiBmYi0+bW9kaWZpZXIgIT0gRFJNX0ZPUk1B VF9NT0RfTElORUFSKSB7Ci0JCWRybV9kYmdfa21zKCZpOTE1LT5kcm0sICJjdXJzb3IgY2Fubm90 IGJlIHRpbGVkXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0ID0gaW50ZWxfYXRv bWljX3BsYW5lX2NoZWNrX2NsaXBwaW5nKHBsYW5lX3N0YXRlLCBjcnRjX3N0YXRlLAotCQkJCQkJ RFJNX1BMQU5FX0hFTFBFUl9OT19TQ0FMSU5HLAotCQkJCQkJRFJNX1BMQU5FX0hFTFBFUl9OT19T Q0FMSU5HLAotCQkJCQkJdHJ1ZSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIFVz ZSB0aGUgdW5jbGlwcGVkIHNyYy9kc3QgcmVjdGFuZ2xlcywgd2hpY2ggd2UgcHJvZ3JhbSB0byBo dyAqLwotCXBsYW5lX3N0YXRlLT51YXBpLnNyYyA9IHNyYzsKLQlwbGFuZV9zdGF0ZS0+dWFwaS5k c3QgPSBkc3Q7Ci0KLQlyZXQgPSBpbnRlbF9jdXJzb3JfY2hlY2tfc3VyZmFjZShwbGFuZV9zdGF0 ZSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCWlmICghcGxhbmVfc3RhdGUtPnVhcGku dmlzaWJsZSkKLQkJcmV0dXJuIDA7Ci0KLQlyZXQgPSBpbnRlbF9wbGFuZV9jaGVja19zcmNfY29v cmRpbmF0ZXMocGxhbmVfc3RhdGUpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1 cm4gMDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludAotaTg0NV9jdXJzb3JfbWF4X3N0cmlkZShz dHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAotCQkgICAgICAgdTMyIHBpeGVsX2Zvcm1hdCwgdTY0 IG1vZGlmaWVyLAotCQkgICAgICAgdW5zaWduZWQgaW50IHJvdGF0aW9uKQotewotCXJldHVybiAy MDQ4OwotfQotCi1zdGF0aWMgdTMyIGk4NDVfY3Vyc29yX2N0bF9jcnRjKGNvbnN0IHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQotewotCXUzMiBjbnRsID0gMDsKLQotCWlmIChj cnRjX3N0YXRlLT5nYW1tYV9lbmFibGUpCi0JCWNudGwgfD0gQ1VSU09SX0dBTU1BX0VOQUJMRTsK LQotCXJldHVybiBjbnRsOwotfQotCi1zdGF0aWMgdTMyIGk4NDVfY3Vyc29yX2N0bChjb25zdCBz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKLQkJCSAgIGNvbnN0IHN0cnVjdCBp bnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCi17Ci0JcmV0dXJuIENVUlNPUl9FTkFCTEUg fAotCQlDVVJTT1JfRk9STUFUX0FSR0IgfAotCQlDVVJTT1JfU1RSSURFKHBsYW5lX3N0YXRlLT5j b2xvcl9wbGFuZVswXS5zdHJpZGUpOwotfQotCi1zdGF0aWMgYm9vbCBpODQ1X2N1cnNvcl9zaXpl X29rKGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCi17Ci0JaW50 IHdpZHRoID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCk7Ci0KLQkvKgot CSAqIDg0NWcvODY1ZyBhcmUgb25seSBsaW1pdGVkIGJ5IHRoZSB3aWR0aCBvZiB0aGVpciBjdXJz b3JzLAotCSAqIHRoZSBoZWlnaHQgaXMgYXJiaXRyYXJ5IHVwIHRvIHRoZSBwcmVjaXNpb24gb2Yg dGhlIHJlZ2lzdGVyLgotCSAqLwotCXJldHVybiBpbnRlbF9jdXJzb3Jfc2l6ZV9vayhwbGFuZV9z dGF0ZSkgJiYgSVNfQUxJR05FRCh3aWR0aCwgNjQpOwotfQotCi1zdGF0aWMgaW50IGk4NDVfY2hl Y2tfY3Vyc29yKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAotCQkJICAgICBz dHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQotewotCWNvbnN0IHN0cnVjdCBk cm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwotCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICppOTE1ID0gdG9faTkxNShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZS0+ZGV2KTsK LQlpbnQgcmV0OwotCi0JcmV0ID0gaW50ZWxfY2hlY2tfY3Vyc29yKGNydGNfc3RhdGUsIHBsYW5l X3N0YXRlKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JLyogaWYgd2Ugd2FudCB0byB0 dXJuIG9mZiB0aGUgY3Vyc29yIGlnbm9yZSB3aWR0aCBhbmQgaGVpZ2h0ICovCi0JaWYgKCFmYikK LQkJcmV0dXJuIDA7Ci0KLQkvKiBDaGVjayBmb3Igd2hpY2ggY3Vyc29yIHR5cGVzIHdlIHN1cHBv cnQgKi8KLQlpZiAoIWk4NDVfY3Vyc29yX3NpemVfb2socGxhbmVfc3RhdGUpKSB7Ci0JCWRybV9k Ymdfa21zKCZpOTE1LT5kcm0sCi0JCQkgICAgIkN1cnNvciBkaW1lbnNpb24gJWR4JWQgbm90IHN1 cHBvcnRlZFxuIiwKLQkJCSAgICBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0 KSwKLQkJCSAgICBkcm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCkpOwotCQly ZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlkcm1fV0FSTl9PTigmaTkxNS0+ZHJtLCBwbGFuZV9zdGF0 ZS0+dWFwaS52aXNpYmxlICYmCi0JCSAgICBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0uc3Ry aWRlICE9IGZiLT5waXRjaGVzWzBdKTsKLQotCXN3aXRjaCAoZmItPnBpdGNoZXNbMF0pIHsKLQlj YXNlIDI1NjoKLQljYXNlIDUxMjoKLQljYXNlIDEwMjQ6Ci0JY2FzZSAyMDQ4OgotCQlicmVhazsK LQlkZWZhdWx0OgotCQkgZHJtX2RiZ19rbXMoJmk5MTUtPmRybSwgIkludmFsaWQgY3Vyc29yIHN0 cmlkZSAoJXUpXG4iLAotCQkJICAgICBmYi0+cGl0Y2hlc1swXSk7Ci0JCXJldHVybiAtRUlOVkFM OwotCX0KLQotCXBsYW5lX3N0YXRlLT5jdGwgPSBpODQ1X2N1cnNvcl9jdGwoY3J0Y19zdGF0ZSwg cGxhbmVfc3RhdGUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGk4NDVfdXBkYXRl X2N1cnNvcihzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAotCQkJICAgICAgIGNvbnN0IHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBp bnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOwotCXUzMiBjbnRsID0gMCwg YmFzZSA9IDAsIHBvcyA9IDAsIHNpemUgPSAwOwotCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7Ci0K LQlpZiAocGxhbmVfc3RhdGUgJiYgcGxhbmVfc3RhdGUtPnVhcGkudmlzaWJsZSkgewotCQl1bnNp Z25lZCBpbnQgd2lkdGggPSBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KTsK LQkJdW5zaWduZWQgaW50IGhlaWdodCA9IGRybV9yZWN0X2hlaWdodCgmcGxhbmVfc3RhdGUtPnVh cGkuZHN0KTsKLQotCQljbnRsID0gcGxhbmVfc3RhdGUtPmN0bCB8Ci0JCQlpODQ1X2N1cnNvcl9j dGxfY3J0YyhjcnRjX3N0YXRlKTsKLQotCQlzaXplID0gKGhlaWdodCA8PCAxMikgfCB3aWR0aDsK LQotCQliYXNlID0gaW50ZWxfY3Vyc29yX2Jhc2UocGxhbmVfc3RhdGUpOwotCQlwb3MgPSBpbnRl bF9jdXJzb3JfcG9zaXRpb24ocGxhbmVfc3RhdGUpOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZl KCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ssIGlycWZsYWdzKTsKLQotCS8qIE9uIHRoZXNlIGNoaXBz ZXRzIHdlIGNhbiBvbmx5IG1vZGlmeSB0aGUgYmFzZS9zaXplL3N0cmlkZQotCSAqIHdoaWxzdCB0 aGUgY3Vyc29yIGlzIGRpc2FibGVkLgotCSAqLwotCWlmIChwbGFuZS0+Y3Vyc29yLmJhc2UgIT0g YmFzZSB8fAotCSAgICBwbGFuZS0+Y3Vyc29yLnNpemUgIT0gc2l6ZSB8fAotCSAgICBwbGFuZS0+ Y3Vyc29yLmNudGwgIT0gY250bCkgewotCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgQ1VS Q05UUihQSVBFX0EpLCAwKTsKLQkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIENVUkJBU0Uo UElQRV9BKSwgYmFzZSk7Ci0JCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBDVVJTSVpFLCBz aXplKTsKLQkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIENVUlBPUyhQSVBFX0EpLCBwb3Mp OwotCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgQ1VSQ05UUihQSVBFX0EpLCBjbnRsKTsK LQotCQlwbGFuZS0+Y3Vyc29yLmJhc2UgPSBiYXNlOwotCQlwbGFuZS0+Y3Vyc29yLnNpemUgPSBz aXplOwotCQlwbGFuZS0+Y3Vyc29yLmNudGwgPSBjbnRsOwotCX0gZWxzZSB7Ci0JCWludGVsX2Rl X3dyaXRlX2Z3KGRldl9wcml2LCBDVVJQT1MoUElQRV9BKSwgcG9zKTsKLQl9Ci0KLQlzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ssIGlycWZsYWdzKTsKLX0KLQot c3RhdGljIHZvaWQgaTg0NV9kaXNhYmxlX2N1cnNvcihzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5l LAotCQkJCWNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQotewotCWk4 NDVfdXBkYXRlX2N1cnNvcihwbGFuZSwgY3J0Y19zdGF0ZSwgTlVMTCk7Ci19Ci0KLXN0YXRpYyBi b29sIGk4NDVfY3Vyc29yX2dldF9od19zdGF0ZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAot CQkJCSAgICAgZW51bSBwaXBlICpwaXBlKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKLQllbnVtIGludGVsX2Rpc3BsYXlf cG93ZXJfZG9tYWluIHBvd2VyX2RvbWFpbjsKLQlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKLQli b29sIHJldDsKLQotCXBvd2VyX2RvbWFpbiA9IFBPV0VSX0RPTUFJTl9QSVBFKFBJUEVfQSk7Ci0J d2FrZXJlZiA9IGludGVsX2Rpc3BsYXlfcG93ZXJfZ2V0X2lmX2VuYWJsZWQoZGV2X3ByaXYsIHBv d2VyX2RvbWFpbik7Ci0JaWYgKCF3YWtlcmVmKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlyZXQgPSBp bnRlbF9kZV9yZWFkKGRldl9wcml2LCBDVVJDTlRSKFBJUEVfQSkpICYgQ1VSU09SX0VOQUJMRTsK LQotCSpwaXBlID0gUElQRV9BOwotCi0JaW50ZWxfZGlzcGxheV9wb3dlcl9wdXQoZGV2X3ByaXYs IHBvd2VyX2RvbWFpbiwgd2FrZXJlZik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdW5z aWduZWQgaW50Ci1pOXh4X2N1cnNvcl9tYXhfc3RyaWRlKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxh bmUsCi0JCSAgICAgICB1MzIgcGl4ZWxfZm9ybWF0LCB1NjQgbW9kaWZpZXIsCi0JCSAgICAgICB1 bnNpZ25lZCBpbnQgcm90YXRpb24pCi17Ci0JcmV0dXJuIHBsYW5lLT5iYXNlLmRldi0+bW9kZV9j b25maWcuY3Vyc29yX3dpZHRoICogNDsKLX0KLQotc3RhdGljIHUzMiBpOXh4X2N1cnNvcl9jdGxf Y3J0Yyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKLXsKLQlzdHJ1 Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Y19zdGF0ZS0+dWFwaS5jcnRj KTsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGMtPmJh c2UuZGV2KTsKLQl1MzIgY250bCA9IDA7Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAx MSkKLQkJcmV0dXJuIGNudGw7Ci0KLQlpZiAoY3J0Y19zdGF0ZS0+Z2FtbWFfZW5hYmxlKQotCQlj bnRsID0gTUNVUlNPUl9HQU1NQV9FTkFCTEU7Ci0KLQlpZiAoY3J0Y19zdGF0ZS0+Y3NjX2VuYWJs ZSkKLQkJY250bCB8PSBNQ1VSU09SX1BJUEVfQ1NDX0VOQUJMRTsKLQotCWlmIChJTlRFTF9HRU4o ZGV2X3ByaXYpIDwgNSAmJiAhSVNfRzRYKGRldl9wcml2KSkKLQkJY250bCB8PSBNQ1VSU09SX1BJ UEVfU0VMRUNUKGNydGMtPnBpcGUpOwotCi0JcmV0dXJuIGNudGw7Ci19Ci0KLXN0YXRpYyB1MzIg aTl4eF9jdXJzb3JfY3RsKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRl LAotCQkJICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKLXsK LQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPQotCQl0b19pOTE1KHBsYW5lX3N0 YXRlLT51YXBpLnBsYW5lLT5kZXYpOwotCXUzMiBjbnRsID0gMDsKLQotCWlmIChJU19HRU4oZGV2 X3ByaXYsIDYpIHx8IElTX0lWWUJSSURHRShkZXZfcHJpdikpCi0JCWNudGwgfD0gTUNVUlNPUl9U UklDS0xFX0ZFRURfRElTQUJMRTsKLQotCXN3aXRjaCAoZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0 YXRlLT51YXBpLmRzdCkpIHsKLQljYXNlIDY0OgotCQljbnRsIHw9IE1DVVJTT1JfTU9ERV82NF9B UkdCX0FYOwotCQlicmVhazsKLQljYXNlIDEyODoKLQkJY250bCB8PSBNQ1VSU09SX01PREVfMTI4 X0FSR0JfQVg7Ci0JCWJyZWFrOwotCWNhc2UgMjU2OgotCQljbnRsIHw9IE1DVVJTT1JfTU9ERV8y NTZfQVJHQl9BWDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJTUlTU0lOR19DQVNFKGRybV9yZWN0 X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYg KHBsYW5lX3N0YXRlLT5ody5yb3RhdGlvbiAmIERSTV9NT0RFX1JPVEFURV8xODApCi0JCWNudGwg fD0gTUNVUlNPUl9ST1RBVEVfMTgwOwotCi0JcmV0dXJuIGNudGw7Ci19Ci0KLXN0YXRpYyBib29s IGk5eHhfY3Vyc29yX3NpemVfb2soY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFu ZV9zdGF0ZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPQotCQl0b19p OTE1KHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lLT5kZXYpOwotCWludCB3aWR0aCA9IGRybV9yZWN0 X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpOwotCWludCBoZWlnaHQgPSBkcm1fcmVjdF9o ZWlnaHQoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCk7Ci0KLQlpZiAoIWludGVsX2N1cnNvcl9zaXpl X29rKHBsYW5lX3N0YXRlKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JLyogQ3Vyc29yIHdpZHRoIGlz IGxpbWl0ZWQgdG8gYSBmZXcgcG93ZXItb2YtdHdvIHNpemVzICovCi0Jc3dpdGNoICh3aWR0aCkg ewotCWNhc2UgMjU2OgotCWNhc2UgMTI4OgotCWNhc2UgNjQ6Ci0JCWJyZWFrOwotCWRlZmF1bHQ6 Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKgotCSAqIElWQisgaGF2ZSBDVVJfRkJDX0NUTCB3 aGljaCBhbGxvd3MgYW4gYXJiaXRyYXJ5IGN1cnNvcgotCSAqIGhlaWdodCBmcm9tIDggbGluZXMg dXAgdG8gdGhlIGN1cnNvciB3aWR0aCwgd2hlbiB0aGUKLQkgKiBjdXJzb3IgaXMgbm90IHJvdGF0 ZWQuIEV2ZXJ5dGhpbmcgZWxzZSByZXF1aXJlcyBzcXVhcmUKLQkgKiBjdXJzb3JzLgotCSAqLwot CWlmIChIQVNfQ1VSX0ZCQyhkZXZfcHJpdikgJiYKLQkgICAgcGxhbmVfc3RhdGUtPmh3LnJvdGF0 aW9uICYgRFJNX01PREVfUk9UQVRFXzApIHsKLQkJaWYgKGhlaWdodCA8IDggfHwgaGVpZ2h0ID4g d2lkdGgpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JfSBlbHNlIHsKLQkJaWYgKGhlaWdodCAhPSB3aWR0 aCkKLQkJCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGlu dCBpOXh4X2NoZWNrX2N1cnNvcihzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwK LQkJCSAgICAgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKLXsKLQlzdHJ1 Y3QgaW50ZWxfcGxhbmUgKnBsYW5lID0gdG9faW50ZWxfcGxhbmUocGxhbmVfc3RhdGUtPnVhcGku cGxhbmUpOwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxh bmUtPmJhc2UuZGV2KTsKLQljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5l X3N0YXRlLT5ody5mYjsKLQllbnVtIHBpcGUgcGlwZSA9IHBsYW5lLT5waXBlOwotCWludCByZXQ7 Ci0KLQlyZXQgPSBpbnRlbF9jaGVja19jdXJzb3IoY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUpOwot CWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBpZiB3ZSB3YW50IHRvIHR1cm4gb2ZmIHRo ZSBjdXJzb3IgaWdub3JlIHdpZHRoIGFuZCBoZWlnaHQgKi8KLQlpZiAoIWZiKQotCQlyZXR1cm4g MDsKLQotCS8qIENoZWNrIGZvciB3aGljaCBjdXJzb3IgdHlwZXMgd2Ugc3VwcG9ydCAqLwotCWlm ICghaTl4eF9jdXJzb3Jfc2l6ZV9vayhwbGFuZV9zdGF0ZSkpIHsKLQkJZHJtX2RiZygmZGV2X3By aXYtPmRybSwKLQkJCSJDdXJzb3IgZGltZW5zaW9uICVkeCVkIG5vdCBzdXBwb3J0ZWRcbiIsCi0J CQlkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KSwKLQkJCWRybV9yZWN0X2hl aWdodCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQot CWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLCBwbGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxlICYm Ci0JCSAgICBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0uc3RyaWRlICE9IGZiLT5waXRjaGVz WzBdKTsKLQotCWlmIChmYi0+cGl0Y2hlc1swXSAhPQotCSAgICBkcm1fcmVjdF93aWR0aCgmcGxh bmVfc3RhdGUtPnVhcGkuZHN0KSAqIGZiLT5mb3JtYXQtPmNwcFswXSkgewotCQlkcm1fZGJnX2tt cygmZGV2X3ByaXYtPmRybSwKLQkJCSAgICAiSW52YWxpZCBjdXJzb3Igc3RyaWRlICgldSkgKGN1 cnNvciB3aWR0aCAlZClcbiIsCi0JCQkgICAgZmItPnBpdGNoZXNbMF0sCi0JCQkgICAgZHJtX3Jl Y3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCkpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9 Ci0KLQkvKgotCSAqIFRoZXJlJ3Mgc29tZXRoaW5nIHdyb25nIHdpdGggdGhlIGN1cnNvciBvbiBD SFYgcGlwZSBDLgotCSAqIElmIGl0IHN0cmFkZGxlcyB0aGUgbGVmdCBlZGdlIG9mIHRoZSBzY3Jl ZW4gdGhlbgotCSAqIG1vdmluZyBpdCBhd2F5IGZyb20gdGhlIGVkZ2Ugb3IgZGlzYWJsaW5nIGl0 IG9mdGVuCi0JICogcmVzdWx0cyBpbiBhIHBpcGUgdW5kZXJydW4sIGFuZCBvZnRlbiB0aGF0IGNh biBsZWFkIHRvCi0JICogZGVhZCBwaXBlIChjb25zdGFudCB1bmRlcnJ1biByZXBvcnRlZCwgYW5k IGl0IHNjYW5zCi0JICogb3V0IGp1c3QgYSBzb2xpZCBjb2xvcikuIFRvIHJlY292ZXIgZnJvbSB0 aGF0LCB0aGUKLQkgKiBkaXNwbGF5IHBvd2VyIHdlbGwgbXVzdCBiZSB0dXJuZWQgb2ZmIGFuZCBv biBhZ2Fpbi4KLQkgKiBSZWZ1c2UgdGhlIHB1dCB0aGUgY3Vyc29yIGludG8gdGhhdCBjb21wcm9t aXNlZCBwb3NpdGlvbi4KLQkgKi8KLQlpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikgJiYgcGlw ZSA9PSBQSVBFX0MgJiYKLQkgICAgcGxhbmVfc3RhdGUtPnVhcGkudmlzaWJsZSAmJiBwbGFuZV9z dGF0ZS0+dWFwaS5kc3QueDEgPCAwKSB7Ci0JCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAot CQkJICAgICJDSFYgY3Vyc29yIEMgbm90IGFsbG93ZWQgdG8gc3RyYWRkbGUgdGhlIGxlZnQgc2Ny ZWVuIGVkZ2VcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlwbGFuZV9zdGF0ZS0+Y3Rs ID0gaTl4eF9jdXJzb3JfY3RsKGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlKTsKLQotCXJldHVybiAw OwotfQotCi1zdGF0aWMgdm9pZCBpOXh4X3VwZGF0ZV9jdXJzb3Ioc3RydWN0IGludGVsX3BsYW5l ICpwbGFuZSwKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19z dGF0ZSwKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0 YXRlKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxh bmUtPmJhc2UuZGV2KTsKLQllbnVtIHBpcGUgcGlwZSA9IHBsYW5lLT5waXBlOwotCXUzMiBjbnRs ID0gMCwgYmFzZSA9IDAsIHBvcyA9IDAsIGZiY19jdGwgPSAwOwotCXVuc2lnbmVkIGxvbmcgaXJx ZmxhZ3M7Ci0KLQlpZiAocGxhbmVfc3RhdGUgJiYgcGxhbmVfc3RhdGUtPnVhcGkudmlzaWJsZSkg ewotCQl1bnNpZ25lZCB3aWR0aCA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5k c3QpOwotCQl1bnNpZ25lZCBoZWlnaHQgPSBkcm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0YXRlLT51 YXBpLmRzdCk7Ci0KLQkJY250bCA9IHBsYW5lX3N0YXRlLT5jdGwgfAotCQkJaTl4eF9jdXJzb3Jf Y3RsX2NydGMoY3J0Y19zdGF0ZSk7Ci0KLQkJaWYgKHdpZHRoICE9IGhlaWdodCkKLQkJCWZiY19j dGwgPSBDVVJfRkJDX0NUTF9FTiB8IChoZWlnaHQgLSAxKTsKLQotCQliYXNlID0gaW50ZWxfY3Vy c29yX2Jhc2UocGxhbmVfc3RhdGUpOwotCQlwb3MgPSBpbnRlbF9jdXJzb3JfcG9zaXRpb24ocGxh bmVfc3RhdGUpOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+dW5jb3JlLmxv Y2ssIGlycWZsYWdzKTsKLQotCS8qCi0JICogT24gc29tZSBwbGF0Zm9ybXMgd3JpdGluZyBDVVJD TlRSIGZpcnN0IHdpbGwgYWxzbwotCSAqIGNhdXNlIENVUlBPUyB0byBiZSBhcm1lZCBieSB0aGUg Q1VSQkFTRSB3cml0ZS4KLQkgKiBXaXRob3V0IHRoZSBDVVJDTlRSIHdyaXRlIHRoZSBDVVJQT1Mg d3JpdGUgd291bGQKLQkgKiBhcm0gaXRzZWxmLiBUaHVzIHdlIGFsd2F5cyB1cGRhdGUgQ1VSQ05U UiBiZWZvcmUKLQkgKiBDVVJQT1MuCi0JICoKLQkgKiBPbiBvdGhlciBwbGF0Zm9ybXMgQ1VSUE9T IGFsd2F5cyByZXF1aXJlcyB0aGUKLQkgKiBDVVJCQVNFIHdyaXRlIHRvIGFybSB0aGUgdXBkYXRl LiBBZGRpdG9uYWxseQotCSAqIGEgd3JpdGUgdG8gYW55IG9mIHRoZSBjdXJzb3IgcmVnaXN0ZXIg d2lsbCBjYW5jZWwKLQkgKiBhbiBhbHJlYWR5IGFybWVkIGN1cnNvciB1cGRhdGUuIFRodXMgbGVh dmluZyBvdXQKLQkgKiB0aGUgQ1VSQkFTRSB3cml0ZSBhZnRlciBDVVJQT1MgY291bGQgbGVhZCB0 byBhCi0JICogY3Vyc29yIHRoYXQgZG9lc24ndCBhcHBlYXIgdG8gbW92ZSwgb3IgZXZlbiBjaGFu Z2UKLQkgKiBzaGFwZS4gVGh1cyB3ZSBhbHdheXMgd3JpdGUgQ1VSQkFTRS4KLQkgKgotCSAqIFRo ZSBvdGhlciByZWdpc3RlcnMgYXJlIGFybWVkIGJ5IGJ5IHRoZSBDVVJCQVNFIHdyaXRlCi0JICog ZXhjZXB0IHdoZW4gdGhlIHBsYW5lIGlzIGdldHRpbmcgZW5hYmxlZCBhdCB3aGljaCB0aW1lCi0J ICogdGhlIENVUkNOVFIgd3JpdGUgYXJtcyB0aGUgdXBkYXRlLgotCSAqLwotCi0JaWYgKElOVEVM X0dFTihkZXZfcHJpdikgPj0gOSkKLQkJc2tsX3dyaXRlX2N1cnNvcl93bShwbGFuZSwgY3J0Y19z dGF0ZSk7Ci0KLQlpZiAoIWludGVsX2NydGNfbmVlZHNfbW9kZXNldChjcnRjX3N0YXRlKSkKLQkJ aW50ZWxfcHNyMl9wcm9ncmFtX3BsYW5lX3NlbF9mZXRjaChwbGFuZSwgY3J0Y19zdGF0ZSwgcGxh bmVfc3RhdGUsIDApOwotCi0JaWYgKHBsYW5lLT5jdXJzb3IuYmFzZSAhPSBiYXNlIHx8Ci0JICAg IHBsYW5lLT5jdXJzb3Iuc2l6ZSAhPSBmYmNfY3RsIHx8Ci0JICAgIHBsYW5lLT5jdXJzb3IuY250 bCAhPSBjbnRsKSB7Ci0JCWlmIChIQVNfQ1VSX0ZCQyhkZXZfcHJpdikpCi0JCQlpbnRlbF9kZV93 cml0ZV9mdyhkZXZfcHJpdiwgQ1VSX0ZCQ19DVEwocGlwZSksCi0JCQkJCSAgZmJjX2N0bCk7Ci0J CWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBDVVJDTlRSKHBpcGUpLCBjbnRsKTsKLQkJaW50 ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIENVUlBPUyhwaXBlKSwgcG9zKTsKLQkJaW50ZWxfZGVf d3JpdGVfZncoZGV2X3ByaXYsIENVUkJBU0UocGlwZSksIGJhc2UpOwotCi0JCXBsYW5lLT5jdXJz b3IuYmFzZSA9IGJhc2U7Ci0JCXBsYW5lLT5jdXJzb3Iuc2l6ZSA9IGZiY19jdGw7Ci0JCXBsYW5l LT5jdXJzb3IuY250bCA9IGNudGw7Ci0JfSBlbHNlIHsKLQkJaW50ZWxfZGVfd3JpdGVfZncoZGV2 X3ByaXYsIENVUlBPUyhwaXBlKSwgcG9zKTsKLQkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYs IENVUkJBU0UocGlwZSksIGJhc2UpOwotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRl dl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBpOXh4X2Rp c2FibGVfY3Vyc29yKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCi0JCQkJY29uc3Qgc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCi17Ci0JaTl4eF91cGRhdGVfY3Vyc29yKHBs YW5lLCBjcnRjX3N0YXRlLCBOVUxMKTsKLX0KLQotc3RhdGljIGJvb2wgaTl4eF9jdXJzb3JfZ2V0 X2h3X3N0YXRlKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCi0JCQkJICAgICBlbnVtIHBpcGUg KnBpcGUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShw bGFuZS0+YmFzZS5kZXYpOwotCWVudW0gaW50ZWxfZGlzcGxheV9wb3dlcl9kb21haW4gcG93ZXJf ZG9tYWluOwotCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwotCWJvb2wgcmV0OwotCXUzMiB2YWw7 Ci0KLQkvKgotCSAqIE5vdCAxMDAlIGNvcnJlY3QgZm9yIHBsYW5lcyB0aGF0IGNhbiBtb3ZlIGJl dHdlZW4gcGlwZXMsCi0JICogYnV0IHRoYXQncyBvbmx5IHRoZSBjYXNlIGZvciBnZW4yLTMgd2hp Y2ggZG9uJ3QgaGF2ZSBhbnkKLQkgKiBkaXNwbGF5IHBvd2VyIHdlbGxzLgotCSAqLwotCXBvd2Vy X2RvbWFpbiA9IFBPV0VSX0RPTUFJTl9QSVBFKHBsYW5lLT5waXBlKTsKLQl3YWtlcmVmID0gaW50 ZWxfZGlzcGxheV9wb3dlcl9nZXRfaWZfZW5hYmxlZChkZXZfcHJpdiwgcG93ZXJfZG9tYWluKTsK LQlpZiAoIXdha2VyZWYpCi0JCXJldHVybiBmYWxzZTsKLQotCXZhbCA9IGludGVsX2RlX3JlYWQo ZGV2X3ByaXYsIENVUkNOVFIocGxhbmUtPnBpcGUpKTsKLQotCXJldCA9IHZhbCAmIE1DVVJTT1Jf TU9ERTsKLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDUgfHwgSVNfRzRYKGRldl9wcml2 KSkKLQkJKnBpcGUgPSBwbGFuZS0+cGlwZTsKLQllbHNlCi0JCSpwaXBlID0gKHZhbCAmIE1DVVJT T1JfUElQRV9TRUxFQ1RfTUFTSykgPj4KLQkJCU1DVVJTT1JfUElQRV9TRUxFQ1RfU0hJRlQ7Ci0K LQlpbnRlbF9kaXNwbGF5X3Bvd2VyX3B1dChkZXZfcHJpdiwgcG93ZXJfZG9tYWluLCB3YWtlcmVm KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KIC8qIFZFU0EgNjQweDQ4MHg3Mkh6IG1vZGUgdG8gc2V0 IG9uIHRoZSBwaXBlICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgbG9h ZF9kZXRlY3RfbW9kZSA9IHsKIAlEUk1fTU9ERSgiNjQweDQ4MCIsIERSTV9NT0RFX1RZUEVfREVG QVVMVCwgMzE1MDAsIDY0MCwgNjY0LApAQCAtMTY2MDksNyArMTYwMzYsNyBAQCBzdGF0aWMgdm9p ZCBhZGRfcnBzX2Jvb3N0X2FmdGVyX3ZibGFuayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJYWRk X3dhaXRfcXVldWUoZHJtX2NydGNfdmJsYW5rX3dhaXRxdWV1ZShjcnRjKSwgJndhaXQtPndhaXQp OwogfQogCi1zdGF0aWMgaW50IGludGVsX3BsYW5lX3Bpbl9mYihzdHJ1Y3QgaW50ZWxfcGxhbmVf c3RhdGUgKnBsYW5lX3N0YXRlKQoraW50IGludGVsX3BsYW5lX3Bpbl9mYihzdHJ1Y3QgaW50ZWxf cGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQogewogCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUg PSB0b19pbnRlbF9wbGFuZShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZSk7CiAJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOwpAQCAtMTY2 MzksNyArMTYwNjYsNyBAQCBzdGF0aWMgaW50IGludGVsX3BsYW5lX3Bpbl9mYihzdHJ1Y3QgaW50 ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9p ZCBpbnRlbF9wbGFuZV91bnBpbl9mYihzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKm9sZF9wbGFu ZV9zdGF0ZSkKK3ZvaWQgaW50ZWxfcGxhbmVfdW5waW5fZmIoc3RydWN0IGludGVsX3BsYW5lX3N0 YXRlICpvbGRfcGxhbmVfc3RhdGUpCiB7CiAJc3RydWN0IGk5MTVfdm1hICp2bWE7CiAKQEAgLTE2 ODc1LDEzICsxNjMwMiw2IEBAIHN0YXRpYyBib29sIGk5NjVfcGxhbmVfZm9ybWF0X21vZF9zdXBw b3J0ZWQoc3RydWN0IGRybV9wbGFuZSAqX3BsYW5lLAogCX0KIH0KIAotc3RhdGljIGJvb2wgaW50 ZWxfY3Vyc29yX2Zvcm1hdF9tb2Rfc3VwcG9ydGVkKHN0cnVjdCBkcm1fcGxhbmUgKl9wbGFuZSwK LQkJCQkJICAgICAgdTMyIGZvcm1hdCwgdTY0IG1vZGlmaWVyKQotewotCXJldHVybiBtb2RpZmll ciA9PSBEUk1fRk9STUFUX01PRF9MSU5FQVIgJiYKLQkJZm9ybWF0ID09IERSTV9GT1JNQVRfQVJH Qjg4ODg7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIGk5NjVfcGxh bmVfZnVuY3MgPSB7CiAJLnVwZGF0ZV9wbGFuZSA9IGRybV9hdG9taWNfaGVscGVyX3VwZGF0ZV9w bGFuZSwKIAkuZGlzYWJsZV9wbGFuZSA9IGRybV9hdG9taWNfaGVscGVyX2Rpc2FibGVfcGxhbmUs CkBAIC0xNjkwMCwxNDIgKzE2MzIwLDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVf ZnVuY3MgaTh4eF9wbGFuZV9mdW5jcyA9IHsKIAkuZm9ybWF0X21vZF9zdXBwb3J0ZWQgPSBpOHh4 X3BsYW5lX2Zvcm1hdF9tb2Rfc3VwcG9ydGVkLAogfTsKIAotc3RhdGljIGludAotaW50ZWxfbGVn YWN5X2N1cnNvcl91cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqX3BsYW5lLAotCQkJICAgc3RydWN0 IGRybV9jcnRjICpfY3J0YywKLQkJCSAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAotCQkJ ICAgaW50IGNydGNfeCwgaW50IGNydGNfeSwKLQkJCSAgIHVuc2lnbmVkIGludCBjcnRjX3csIHVu c2lnbmVkIGludCBjcnRjX2gsCi0JCQkgICB1MzIgc3JjX3gsIHUzMiBzcmNfeSwKLQkJCSAgIHUz MiBzcmNfdywgdTMyIHNyY19oLAotCQkJICAgc3RydWN0IGRybV9tb2Rlc2V0X2FjcXVpcmVfY3R4 ICpjdHgpCi17Ci0Jc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSA9IHRvX2ludGVsX3BsYW5lKF9w bGFuZSk7Ci0Jc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKF9jcnRjKTsK LQlzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKm9sZF9wbGFuZV9zdGF0ZSA9Ci0JCXRvX2ludGVs X3BsYW5lX3N0YXRlKHBsYW5lLT5iYXNlLnN0YXRlKTsKLQlzdHJ1Y3QgaW50ZWxfcGxhbmVfc3Rh dGUgKm5ld19wbGFuZV9zdGF0ZTsKLQlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0 ZSA9Ci0JCXRvX2ludGVsX2NydGNfc3RhdGUoY3J0Yy0+YmFzZS5zdGF0ZSk7Ci0Jc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKm5ld19jcnRjX3N0YXRlOwotCWludCByZXQ7Ci0KLQkvKgotCSAqIFdo ZW4gY3J0YyBpcyBpbmFjdGl2ZSBvciB0aGVyZSBpcyBhIG1vZGVzZXQgcGVuZGluZywKLQkgKiB3 YWl0IGZvciBpdCB0byBjb21wbGV0ZSBpbiB0aGUgc2xvd3BhdGgKLQkgKgotCSAqIEZJWE1FIGJp Z2pvaW5lciBmYXN0cGF0aCB3b3VsZCBiZSBnb29kCi0JICovCi0JaWYgKCFjcnRjX3N0YXRlLT5o dy5hY3RpdmUgfHwgaW50ZWxfY3J0Y19uZWVkc19tb2Rlc2V0KGNydGNfc3RhdGUpIHx8Ci0JICAg IGNydGNfc3RhdGUtPnVwZGF0ZV9waXBlIHx8IGNydGNfc3RhdGUtPmJpZ2pvaW5lcikKLQkJZ290 byBzbG93OwotCi0JLyoKLQkgKiBEb24ndCBkbyBhbiBhc3luYyB1cGRhdGUgaWYgdGhlcmUgaXMg YW4gb3V0c3RhbmRpbmcgY29tbWl0IG1vZGlmeWluZwotCSAqIHRoZSBwbGFuZS4gIFRoaXMgcHJl dmVudHMgb3VyIGFzeW5jIHVwZGF0ZSdzIGNoYW5nZXMgZnJvbSBnZXR0aW5nCi0JICogb3ZlcnJp ZGRlbiBieSBhIHByZXZpb3VzIHN5bmNocm9ub3VzIHVwZGF0ZSdzIHN0YXRlLgotCSAqLwotCWlm IChvbGRfcGxhbmVfc3RhdGUtPnVhcGkuY29tbWl0ICYmCi0JICAgICF0cnlfd2FpdF9mb3JfY29t cGxldGlvbigmb2xkX3BsYW5lX3N0YXRlLT51YXBpLmNvbW1pdC0+aHdfZG9uZSkpCi0JCWdvdG8g c2xvdzsKLQotCS8qCi0JICogSWYgYW55IHBhcmFtZXRlcnMgY2hhbmdlIHRoYXQgbWF5IGFmZmVj dCB3YXRlcm1hcmtzLAotCSAqIHRha2UgdGhlIHNsb3dwYXRoLiBPbmx5IGNoYW5naW5nIGZiIG9y IHBvc2l0aW9uIHNob3VsZCBiZQotCSAqIGluIHRoZSBmYXN0cGF0aC4KLQkgKi8KLQlpZiAob2xk X3BsYW5lX3N0YXRlLT51YXBpLmNydGMgIT0gJmNydGMtPmJhc2UgfHwKLQkgICAgb2xkX3BsYW5l X3N0YXRlLT51YXBpLnNyY193ICE9IHNyY193IHx8Ci0JICAgIG9sZF9wbGFuZV9zdGF0ZS0+dWFw aS5zcmNfaCAhPSBzcmNfaCB8fAotCSAgICBvbGRfcGxhbmVfc3RhdGUtPnVhcGkuY3J0Y193ICE9 IGNydGNfdyB8fAotCSAgICBvbGRfcGxhbmVfc3RhdGUtPnVhcGkuY3J0Y19oICE9IGNydGNfaCB8 fAotCSAgICAhb2xkX3BsYW5lX3N0YXRlLT51YXBpLmZiICE9ICFmYikKLQkJZ290byBzbG93Owot Ci0JbmV3X3BsYW5lX3N0YXRlID0gdG9faW50ZWxfcGxhbmVfc3RhdGUoaW50ZWxfcGxhbmVfZHVw bGljYXRlX3N0YXRlKCZwbGFuZS0+YmFzZSkpOwotCWlmICghbmV3X3BsYW5lX3N0YXRlKQotCQly ZXR1cm4gLUVOT01FTTsKLQotCW5ld19jcnRjX3N0YXRlID0gdG9faW50ZWxfY3J0Y19zdGF0ZShp bnRlbF9jcnRjX2R1cGxpY2F0ZV9zdGF0ZSgmY3J0Yy0+YmFzZSkpOwotCWlmICghbmV3X2NydGNf c3RhdGUpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXRfZnJlZTsKLQl9Ci0KLQlkcm1f YXRvbWljX3NldF9mYl9mb3JfcGxhbmUoJm5ld19wbGFuZV9zdGF0ZS0+dWFwaSwgZmIpOwotCi0J bmV3X3BsYW5lX3N0YXRlLT51YXBpLnNyY194ID0gc3JjX3g7Ci0JbmV3X3BsYW5lX3N0YXRlLT51 YXBpLnNyY195ID0gc3JjX3k7Ci0JbmV3X3BsYW5lX3N0YXRlLT51YXBpLnNyY193ID0gc3JjX3c7 Ci0JbmV3X3BsYW5lX3N0YXRlLT51YXBpLnNyY19oID0gc3JjX2g7Ci0JbmV3X3BsYW5lX3N0YXRl LT51YXBpLmNydGNfeCA9IGNydGNfeDsKLQluZXdfcGxhbmVfc3RhdGUtPnVhcGkuY3J0Y195ID0g Y3J0Y195OwotCW5ld19wbGFuZV9zdGF0ZS0+dWFwaS5jcnRjX3cgPSBjcnRjX3c7Ci0JbmV3X3Bs YW5lX3N0YXRlLT51YXBpLmNydGNfaCA9IGNydGNfaDsKLQotCWludGVsX3BsYW5lX2NvcHlfdWFw aV90b19od19zdGF0ZShuZXdfcGxhbmVfc3RhdGUsIG5ld19wbGFuZV9zdGF0ZSwgY3J0Yyk7Ci0K LQlyZXQgPSBpbnRlbF9wbGFuZV9hdG9taWNfY2hlY2tfd2l0aF9zdGF0ZShjcnRjX3N0YXRlLCBu ZXdfY3J0Y19zdGF0ZSwKLQkJCQkJCSAgb2xkX3BsYW5lX3N0YXRlLCBuZXdfcGxhbmVfc3RhdGUp OwotCWlmIChyZXQpCi0JCWdvdG8gb3V0X2ZyZWU7Ci0KLQlyZXQgPSBpbnRlbF9wbGFuZV9waW5f ZmIobmV3X3BsYW5lX3N0YXRlKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dF9mcmVlOwotCi0JaW50 ZWxfZnJvbnRidWZmZXJfZmx1c2godG9faW50ZWxfZnJvbnRidWZmZXIobmV3X3BsYW5lX3N0YXRl LT5ody5mYiksCi0JCQkJT1JJR0lOX0ZMSVApOwotCWludGVsX2Zyb250YnVmZmVyX3RyYWNrKHRv X2ludGVsX2Zyb250YnVmZmVyKG9sZF9wbGFuZV9zdGF0ZS0+aHcuZmIpLAotCQkJCXRvX2ludGVs X2Zyb250YnVmZmVyKG5ld19wbGFuZV9zdGF0ZS0+aHcuZmIpLAotCQkJCXBsYW5lLT5mcm9udGJ1 ZmZlcl9iaXQpOwotCi0JLyogU3dhcCBwbGFuZSBzdGF0ZSAqLwotCXBsYW5lLT5iYXNlLnN0YXRl ID0gJm5ld19wbGFuZV9zdGF0ZS0+dWFwaTsKLQotCS8qCi0JICogV2UgY2Fubm90IHN3YXAgY3J0 Y19zdGF0ZSBhcyBpdCBtYXkgYmUgaW4gdXNlIGJ5IGFuIGF0b21pYyBjb21taXQgb3IKLQkgKiBw YWdlIGZsaXAgdGhhdCdzIHJ1bm5pbmcgc2ltdWx0YW5lb3VzbHkuIElmIHdlIHN3YXAgY3J0Y19z dGF0ZSBhbmQKLQkgKiBkZXN0cm95IHRoZSBvbGQgc3RhdGUsIHdlIHdpbGwgY2F1c2UgYSB1c2Ut YWZ0ZXItZnJlZSB0aGVyZS4KLQkgKgotCSAqIE9ubHkgdXBkYXRlIGFjdGl2ZV9wbGFuZXMsIHdo aWNoIGlzIG5lZWRlZCBmb3Igb3VyIGludGVybmFsCi0JICogYm9va2tlZXBpbmcuIEVpdGhlciB2 YWx1ZSB3aWxsIGRvIHRoZSByaWdodCB0aGluZyB3aGVuIHVwZGF0aW5nCi0JICogcGxhbmVzIGF0 b21pY2FsbHkuIElmIHRoZSBjdXJzb3Igd2FzIHBhcnQgb2YgdGhlIGF0b21pYyB1cGRhdGUgdGhl bgotCSAqIHdlIHdvdWxkIGhhdmUgdGFrZW4gdGhlIHNsb3dwYXRoLgotCSAqLwotCWNydGNfc3Rh dGUtPmFjdGl2ZV9wbGFuZXMgPSBuZXdfY3J0Y19zdGF0ZS0+YWN0aXZlX3BsYW5lczsKLQotCWlm IChuZXdfcGxhbmVfc3RhdGUtPnVhcGkudmlzaWJsZSkKLQkJaW50ZWxfdXBkYXRlX3BsYW5lKHBs YW5lLCBjcnRjX3N0YXRlLCBuZXdfcGxhbmVfc3RhdGUpOwotCWVsc2UKLQkJaW50ZWxfZGlzYWJs ZV9wbGFuZShwbGFuZSwgY3J0Y19zdGF0ZSk7Ci0KLQlpbnRlbF9wbGFuZV91bnBpbl9mYihvbGRf cGxhbmVfc3RhdGUpOwotCi1vdXRfZnJlZToKLQlpZiAobmV3X2NydGNfc3RhdGUpCi0JCWludGVs X2NydGNfZGVzdHJveV9zdGF0ZSgmY3J0Yy0+YmFzZSwgJm5ld19jcnRjX3N0YXRlLT51YXBpKTsK LQlpZiAocmV0KQotCQlpbnRlbF9wbGFuZV9kZXN0cm95X3N0YXRlKCZwbGFuZS0+YmFzZSwgJm5l d19wbGFuZV9zdGF0ZS0+dWFwaSk7Ci0JZWxzZQotCQlpbnRlbF9wbGFuZV9kZXN0cm95X3N0YXRl KCZwbGFuZS0+YmFzZSwgJm9sZF9wbGFuZV9zdGF0ZS0+dWFwaSk7Ci0JcmV0dXJuIHJldDsKLQot c2xvdzoKLQlyZXR1cm4gZHJtX2F0b21pY19oZWxwZXJfdXBkYXRlX3BsYW5lKCZwbGFuZS0+YmFz ZSwgJmNydGMtPmJhc2UsIGZiLAotCQkJCQkgICAgICBjcnRjX3gsIGNydGNfeSwgY3J0Y193LCBj cnRjX2gsCi0JCQkJCSAgICAgIHNyY194LCBzcmNfeSwgc3JjX3csIHNyY19oLCBjdHgpOwotfQot Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9mdW5jcyBpbnRlbF9jdXJzb3JfcGxhbmVf ZnVuY3MgPSB7Ci0JLnVwZGF0ZV9wbGFuZSA9IGludGVsX2xlZ2FjeV9jdXJzb3JfdXBkYXRlLAot CS5kaXNhYmxlX3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfZGlzYWJsZV9wbGFuZSwKLQkuZGVz dHJveSA9IGludGVsX3BsYW5lX2Rlc3Ryb3ksCi0JLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBp bnRlbF9wbGFuZV9kdXBsaWNhdGVfc3RhdGUsCi0JLmF0b21pY19kZXN0cm95X3N0YXRlID0gaW50 ZWxfcGxhbmVfZGVzdHJveV9zdGF0ZSwKLQkuZm9ybWF0X21vZF9zdXBwb3J0ZWQgPSBpbnRlbF9j dXJzb3JfZm9ybWF0X21vZF9zdXBwb3J0ZWQsCi19OwotCiBzdGF0aWMgYm9vbCBpOXh4X3BsYW5l X2hhc19mYmMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCQkJICAgICAgIGVu dW0gaTl4eF9wbGFuZV9pZCBpOXh4X3BsYW5lKQogewpAQCAtMTcxODcsNzQgKzE2NDcxLDYgQEAg aW50ZWxfcHJpbWFyeV9wbGFuZV9jcmVhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LCBlbnVtIHBpcGUgcGlwZSkKIAlyZXR1cm4gRVJSX1BUUihyZXQpOwogfQogCi1zdGF0aWMg c3RydWN0IGludGVsX3BsYW5lICoKLWludGVsX2N1cnNvcl9wbGFuZV9jcmVhdGUoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJICBlbnVtIHBpcGUgcGlwZSkKLXsKLQlzdHJ1 Y3QgaW50ZWxfcGxhbmUgKmN1cnNvcjsKLQlpbnQgcmV0LCB6cG9zOwotCi0JY3Vyc29yID0gaW50 ZWxfcGxhbmVfYWxsb2MoKTsKLQlpZiAoSVNfRVJSKGN1cnNvcikpCi0JCXJldHVybiBjdXJzb3I7 Ci0KLQljdXJzb3ItPnBpcGUgPSBwaXBlOwotCWN1cnNvci0+aTl4eF9wbGFuZSA9IChlbnVtIGk5 eHhfcGxhbmVfaWQpIHBpcGU7Ci0JY3Vyc29yLT5pZCA9IFBMQU5FX0NVUlNPUjsKLQljdXJzb3It PmZyb250YnVmZmVyX2JpdCA9IElOVEVMX0ZST05UQlVGRkVSKHBpcGUsIGN1cnNvci0+aWQpOwot Ci0JaWYgKElTX0k4NDVHKGRldl9wcml2KSB8fCBJU19JODY1RyhkZXZfcHJpdikpIHsKLQkJY3Vy c29yLT5tYXhfc3RyaWRlID0gaTg0NV9jdXJzb3JfbWF4X3N0cmlkZTsKLQkJY3Vyc29yLT51cGRh dGVfcGxhbmUgPSBpODQ1X3VwZGF0ZV9jdXJzb3I7Ci0JCWN1cnNvci0+ZGlzYWJsZV9wbGFuZSA9 IGk4NDVfZGlzYWJsZV9jdXJzb3I7Ci0JCWN1cnNvci0+Z2V0X2h3X3N0YXRlID0gaTg0NV9jdXJz b3JfZ2V0X2h3X3N0YXRlOwotCQljdXJzb3ItPmNoZWNrX3BsYW5lID0gaTg0NV9jaGVja19jdXJz b3I7Ci0JfSBlbHNlIHsKLQkJY3Vyc29yLT5tYXhfc3RyaWRlID0gaTl4eF9jdXJzb3JfbWF4X3N0 cmlkZTsKLQkJY3Vyc29yLT51cGRhdGVfcGxhbmUgPSBpOXh4X3VwZGF0ZV9jdXJzb3I7Ci0JCWN1 cnNvci0+ZGlzYWJsZV9wbGFuZSA9IGk5eHhfZGlzYWJsZV9jdXJzb3I7Ci0JCWN1cnNvci0+Z2V0 X2h3X3N0YXRlID0gaTl4eF9jdXJzb3JfZ2V0X2h3X3N0YXRlOwotCQljdXJzb3ItPmNoZWNrX3Bs YW5lID0gaTl4eF9jaGVja19jdXJzb3I7Ci0JfQotCi0JY3Vyc29yLT5jdXJzb3IuYmFzZSA9IH4w OwotCWN1cnNvci0+Y3Vyc29yLmNudGwgPSB+MDsKLQotCWlmIChJU19JODQ1RyhkZXZfcHJpdikg fHwgSVNfSTg2NUcoZGV2X3ByaXYpIHx8IEhBU19DVVJfRkJDKGRldl9wcml2KSkKLQkJY3Vyc29y LT5jdXJzb3Iuc2l6ZSA9IH4wOwotCi0JcmV0ID0gZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KCZk ZXZfcHJpdi0+ZHJtLCAmY3Vyc29yLT5iYXNlLAotCQkJCSAgICAgICAwLCAmaW50ZWxfY3Vyc29y X3BsYW5lX2Z1bmNzLAotCQkJCSAgICAgICBpbnRlbF9jdXJzb3JfZm9ybWF0cywKLQkJCQkgICAg ICAgQVJSQVlfU0laRShpbnRlbF9jdXJzb3JfZm9ybWF0cyksCi0JCQkJICAgICAgIGN1cnNvcl9m b3JtYXRfbW9kaWZpZXJzLAotCQkJCSAgICAgICBEUk1fUExBTkVfVFlQRV9DVVJTT1IsCi0JCQkJ ICAgICAgICJjdXJzb3IgJWMiLCBwaXBlX25hbWUocGlwZSkpOwotCWlmIChyZXQpCi0JCWdvdG8g ZmFpbDsKLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDQpCi0JCWRybV9wbGFuZV9jcmVh dGVfcm90YXRpb25fcHJvcGVydHkoJmN1cnNvci0+YmFzZSwKLQkJCQkJCSAgIERSTV9NT0RFX1JP VEFURV8wLAotCQkJCQkJICAgRFJNX01PREVfUk9UQVRFXzAgfAotCQkJCQkJICAgRFJNX01PREVf Uk9UQVRFXzE4MCk7Ci0KLQl6cG9zID0gUlVOVElNRV9JTkZPKGRldl9wcml2KS0+bnVtX3Nwcml0 ZXNbcGlwZV0gKyAxOwotCWRybV9wbGFuZV9jcmVhdGVfenBvc19pbW11dGFibGVfcHJvcGVydHko JmN1cnNvci0+YmFzZSwgenBvcyk7Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMikK LQkJZHJtX3BsYW5lX2VuYWJsZV9mYl9kYW1hZ2VfY2xpcHMoJmN1cnNvci0+YmFzZSk7Ci0KLQlk cm1fcGxhbmVfaGVscGVyX2FkZCgmY3Vyc29yLT5iYXNlLCAmaW50ZWxfcGxhbmVfaGVscGVyX2Z1 bmNzKTsKLQotCXJldHVybiBjdXJzb3I7Ci0KLWZhaWw6Ci0JaW50ZWxfcGxhbmVfZnJlZShjdXJz b3IpOwotCi0JcmV0dXJuIEVSUl9QVFIocmV0KTsKLX0KLQogc3RhdGljIGludCBpbnRlbF9jcnRj X2xhdGVfcmVnaXN0ZXIoc3RydWN0IGRybV9jcnRjICpjcnRjKQogewogCWludGVsX2NydGNfZGVi dWdmc19hZGQoY3J0Yyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5 L2ludGVsX2Rpc3BsYXkuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlz cGxheS5oCmluZGV4IGE1NzcxYmZlY2JhNi4uZjBhNWJmNjk2NTZmIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuaAorKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuaApAQCAtNjQ3LDYgKzY0NywxOCBAQCBi b29sCiBpbnRlbF9mb3JtYXRfaW5mb19pc195dXZfc2VtaXBsYW5hcihjb25zdCBzdHJ1Y3QgZHJt X2Zvcm1hdF9pbmZvICppbmZvLAogCQkJCSAgICB1aW50NjRfdCBtb2RpZmllcik7CiAKK2ludCBp bnRlbF9wbGFuZV9jb21wdXRlX2d0dChzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0 YXRlKTsKK3UzMiBpbnRlbF9wbGFuZV9jb21wdXRlX2FsaWduZWRfb2Zmc2V0KGludCAqeCwgaW50 ICp5LAorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnN0YXRlLAor CQkJCSAgICAgICBpbnQgY29sb3JfcGxhbmUpOworaW50IGludGVsX3BsYW5lX3Bpbl9mYihzdHJ1 Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKTsKK3ZvaWQgaW50ZWxfcGxhbmVfdW5w aW5fZmIoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpvbGRfcGxhbmVfc3RhdGUpOworCisvKiBj dXJzb3IgKi8KK3N0cnVjdCBpbnRlbF9wbGFuZSAqCitpbnRlbF9jdXJzb3JfcGxhbmVfY3JlYXRl KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCSAgZW51bSBwaXBlIHBpcGUp OworCiAvKiBtb2Rlc2V0dGluZyAqLwogdm9pZCBpbnRlbF9tb2Rlc2V0X2luaXRfaHcoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOwogaW50IGludGVsX21vZGVzZXRfaW5pdF9ub2lycShz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7Ci0tIAoyLjI3LjAKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QK SW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=