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 42346C433E6 for ; Mon, 21 Dec 2020 04:04:39 +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 00E2B22C7E for ; Mon, 21 Dec 2020 04:04:38 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 00E2B22C7E 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 699C66E463; Mon, 21 Dec 2020 04:04:38 +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 805276E47E for ; Mon, 21 Dec 2020 04:04:27 +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-42-qkOMaKQfOD60Ny8kahFfVQ-1; Sun, 20 Dec 2020 23:04:23 -0500 X-MC-Unique: qkOMaKQfOD60Ny8kahFfVQ-1 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 37E2D107ACE3; Mon, 21 Dec 2020 04:04:22 +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 AE45E5D9CA; Mon, 21 Dec 2020 04:04:20 +0000 (UTC) From: Dave Airlie To: intel-gfx@lists.freedesktop.org Date: Mon, 21 Dec 2020 14:03:52 +1000 Message-Id: <20201221040357.4928-12-airlied@gmail.com> In-Reply-To: <20201221040357.4928-1-airlied@gmail.com> References: <20201221040357.4928-1-airlied@gmail.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 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 11/16] drm/i915: migrate skl planes code new file (v3) 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 Y2sKClNpZ25lZC1vZmYtYnk6IERhdmUgQWlybGllIDxhaXJsaWVkQHJlZGhhdC5jb20+CltKYW5p OiBmaXhlZCB1cCBzcGFyc2Ugd2FybmluZ3MuXQpTaWduZWQtb2ZmLWJ5OiBKYW5pIE5pa3VsYSA8 amFuaS5uaWt1bGFAaW50ZWwuY29tPgpSZXBvcnRlZC1ieToga2VybmVsIHRlc3Qgcm9ib3QgPGxr cEBpbnRlbC5jb20+ClJlcG9ydGVkLWJ5OiBEYW4gQ2FycGVudGVyIDxkYW4uY2FycGVudGVyQG9y YWNsZS5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAgICAgICAgICAg ICAgIHwgICAgMyArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pOXh4X3BsYW5lLmMg ICAgIHwgICAgNCAtCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ljbF9kc2kuYyAgICAg ICAgfCAgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfY3J0Yy5jICAg ICB8ICAgMTMgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGRpLmMgICAg ICB8ICAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMg IHwgIDkzNiArLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3Bs YXkuaCAgfCAgIDI0ICstCiAuLi4vZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3R5cGVz LmggICAgfCAgIDIxICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHBfbXN0 LmMgICB8ICAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9zcHJpdGUu YyAgIHwgMTM0MyArLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVs X3Nwcml0ZS5oICAgfCAgICA2ICstCiAuLi4vZHJtL2k5MTUvZGlzcGxheS9za2xfdW5pdmVyc2Fs X3BsYW5lLmMgICAgfCAyMjQyICsrKysrKysrKysrKysrKysrCiAuLi4vZHJtL2k5MTUvZGlzcGxh eS9za2xfdW5pdmVyc2FsX3BsYW5lLmggICAgfCAgIDMwICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2Rpc3BsYXkvdmx2X2RzaS5jICAgICAgICB8ICAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfcG0uYyAgICAgICAgICAgICAgIHwgICAgMSArCiAxNSBmaWxlcyBjaGFuZ2VkLCAyMzU3 IGluc2VydGlvbnMoKyksIDIyNzAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9za2xfdW5pdmVyc2FsX3BsYW5lLmMKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L3NrbF91bml2ZXJzYWxfcGxh bmUuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKaW5kZXggNmZlOTBiMWZlNjk0Li4wNzBiYzhiZjIyZDMg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L01ha2VmaWxlCkBAIC0yMTksNyArMjE5LDggQEAgaTkxNS15ICs9IFwKIAlk aXNwbGF5L2ludGVsX3Nwcml0ZS5vIFwKIAlkaXNwbGF5L2ludGVsX3RjLm8gXAogCWRpc3BsYXkv aW50ZWxfdmdhLm8gXAotCWRpc3BsYXkvaTl4eF9wbGFuZS5vCisJZGlzcGxheS9pOXh4X3BsYW5l Lm8gXAorCWRpc3BsYXkvc2tsX3VuaXZlcnNhbF9wbGFuZS5vCiBpOTE1LSQoQ09ORklHX0FDUEkp ICs9IFwKIAlkaXNwbGF5L2ludGVsX2FjcGkubyBcCiAJZGlzcGxheS9pbnRlbF9vcHJlZ2lvbi5v CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2k5eHhfcGxhbmUuYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaTl4eF9wbGFuZS5jCmluZGV4IGI3ODk4NWM4 NTVhNS4uNmM1NjgwNzlmNDkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNw bGF5L2k5eHhfcGxhbmUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2k5eHhf cGxhbmUuYwpAQCAtNTc4LDEwICs1NzgsNiBAQCBpbnRlbF9wcmltYXJ5X3BsYW5lX2NyZWF0ZShz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcGlwZSBwaXBlKQogCWludCBu dW1fZm9ybWF0czsKIAlpbnQgcmV0LCB6cG9zOwogCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikg Pj0gOSkKLQkJcmV0dXJuIHNrbF91bml2ZXJzYWxfcGxhbmVfY3JlYXRlKGRldl9wcml2LCBwaXBl LAotCQkJCQkJICBQTEFORV9QUklNQVJZKTsKLQogCXBsYW5lID0gaW50ZWxfcGxhbmVfYWxsb2Mo KTsKIAlpZiAoSVNfRVJSKHBsYW5lKSkKIAkJcmV0dXJuIHBsYW5lOwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pY2xfZHNpLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9kaXNwbGF5L2ljbF9kc2kuYwppbmRleCA5ZDI0NWE2ODkzMjMuLjllZWVjNmZhZGVjNyAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pY2xfZHNpLmMKKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pY2xfZHNpLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNp bmNsdWRlICJpbnRlbF9kc2kuaCIKICNpbmNsdWRlICJpbnRlbF9wYW5lbC5oIgogI2luY2x1ZGUg ImludGVsX3Zkc2MuaCIKKyNpbmNsdWRlICJza2xfdW5pdmVyc2FsX3BsYW5lLmgiCiAKIHN0YXRp YyBpbnQgaGVhZGVyX2NyZWRpdHNfYXZhaWxhYmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwKIAkJCQkgICAgZW51bSB0cmFuc2NvZGVyIGRzaV90cmFucykKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfY3J0Yy5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9jcnRjLmMKaW5kZXggYWQ2M2RmMTYzODUwLi5kODljZjZm MmQ5N2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfY3J0 Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfY3J0Yy5jCkBAIC0y MCw2ICsyMCw3IEBACiAjaW5jbHVkZSAiaW50ZWxfcGlwZV9jcmMuaCIKICNpbmNsdWRlICJpbnRl bF9zcHJpdGUuaCIKICNpbmNsdWRlICJpOXh4X3BsYW5lLmgiCisjaW5jbHVkZSAic2tsX3VuaXZl cnNhbF9wbGFuZS5oIgogCiBzdGF0aWMgdm9pZCBhc3NlcnRfdmJsYW5rX2Rpc2FibGVkKHN0cnVj dCBkcm1fY3J0YyAqY3J0YykKIHsKQEAgLTI0NCw3ICsyNDUsMTEgQEAgaW50IGludGVsX2NydGNf aW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcGlwZSBwaXBlKQog CWNydGMtPnBpcGUgPSBwaXBlOwogCWNydGMtPm51bV9zY2FsZXJzID0gUlVOVElNRV9JTkZPKGRl dl9wcml2KS0+bnVtX3NjYWxlcnNbcGlwZV07CiAKLQlwcmltYXJ5ID0gaW50ZWxfcHJpbWFyeV9w bGFuZV9jcmVhdGUoZGV2X3ByaXYsIHBpcGUpOworCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49 IDkpCisJCXByaW1hcnkgPSBza2xfdW5pdmVyc2FsX3BsYW5lX2NyZWF0ZShkZXZfcHJpdiwgcGlw ZSwKKwkJCQkJCSAgICAgUExBTkVfUFJJTUFSWSk7CisJZWxzZQorCQlwcmltYXJ5ID0gaW50ZWxf cHJpbWFyeV9wbGFuZV9jcmVhdGUoZGV2X3ByaXYsIHBpcGUpOwogCWlmIChJU19FUlIocHJpbWFy eSkpIHsKIAkJcmV0ID0gUFRSX0VSUihwcmltYXJ5KTsKIAkJZ290byBmYWlsOwpAQCAtMjU0LDcg KzI1OSwxMSBAQCBpbnQgaW50ZWxfY3J0Y19pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwgZW51bSBwaXBlIHBpcGUpCiAJZm9yX2VhY2hfc3ByaXRlKGRldl9wcml2LCBwaXBl LCBzcHJpdGUpIHsKIAkJc3RydWN0IGludGVsX3BsYW5lICpwbGFuZTsKIAotCQlwbGFuZSA9IGlu dGVsX3Nwcml0ZV9wbGFuZV9jcmVhdGUoZGV2X3ByaXYsIHBpcGUsIHNwcml0ZSk7CisJCWlmIChJ TlRFTF9HRU4oZGV2X3ByaXYpID49IDkpCisJCQlwbGFuZSA9IHNrbF91bml2ZXJzYWxfcGxhbmVf Y3JlYXRlKGRldl9wcml2LCBwaXBlLAorCQkJCQkJCSAgIFBMQU5FX1NQUklURTAgKyBzcHJpdGUp OworCQllbHNlCisJCQlwbGFuZSA9IGludGVsX3Nwcml0ZV9wbGFuZV9jcmVhdGUoZGV2X3ByaXYs IHBpcGUsIHNwcml0ZSk7CiAJCWlmIChJU19FUlIocGxhbmUpKSB7CiAJCQlyZXQgPSBQVFJfRVJS KHBsYW5lKTsKIAkJCWdvdG8gZmFpbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2Rpc3BsYXkvaW50ZWxfZGRpLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVs X2RkaS5jCmluZGV4IGY3OTkxNDNmOTdjZi4uODRmMGU0MGMxZWFjIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RkaS5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGRpLmMKQEAgLTUyLDYgKzUyLDcgQEAKICNpbmNsdWRlICJp bnRlbF9zcHJpdGUuaCIKICNpbmNsdWRlICJpbnRlbF90Yy5oIgogI2luY2x1ZGUgImludGVsX3Zk c2MuaCIKKyNpbmNsdWRlICJza2xfdW5pdmVyc2FsX3BsYW5lLmgiCiAKIHN0YXRpYyBjb25zdCB1 OCBpbmRleF90b19kcF9zaWduYWxfbGV2ZWxzW10gPSB7CiAJWzBdID0gRFBfVFJBSU5fVk9MVEFH RV9TV0lOR19MRVZFTF8wIHwgRFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMCwKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMKaW5kZXggNTg5NWRkMDE3ODg4Li5i YzNlZmIwMjM0ZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50 ZWxfZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlz cGxheS5jCkBAIC05MCw2ICs5MCw3IEBACiAjaW5jbHVkZSAiaW50ZWxfdGMuaCIKICNpbmNsdWRl ICJpbnRlbF92Z2EuaCIKICNpbmNsdWRlICJpOXh4X3BsYW5lLmgiCisjaW5jbHVkZSAic2tsX3Vu aXZlcnNhbF9wbGFuZS5oIgogCiBzdGF0aWMgdm9pZCBpOXh4X2NydGNfY2xvY2tfZ2V0KHN0cnVj dCBpbnRlbF9jcnRjICpjcnRjLAogCQkJCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2Nv bmZpZyk7CkBAIC0xMTIsNyArMTEzLDYgQEAgc3RhdGljIHZvaWQgdmx2X3ByZXBhcmVfcGxsKHN0 cnVjdCBpbnRlbF9jcnRjICpjcnRjLAogCQkJICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpwaXBlX2NvbmZpZyk7CiBzdGF0aWMgdm9pZCBjaHZfcHJlcGFyZV9wbGwoc3RydWN0IGlu dGVsX2NydGMgKmNydGMsCiAJCQkgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBp cGVfY29uZmlnKTsKLXN0YXRpYyB2b2lkIHNrbF9wZml0X2VuYWJsZShjb25zdCBzdHJ1Y3QgaW50 ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSk7CiBzdGF0aWMgdm9pZCBpbGtfcGZpdF9lbmFibGUo Y29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpOwogc3RhdGljIHZvaWQg aW50ZWxfbW9kZXNldF9zZXR1cF9od19zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJ CQkgc3RydWN0IGRybV9tb2Rlc2V0X2FjcXVpcmVfY3R4ICpjdHgpOwpAQCAtMTA3OCwyNiArMTA3 OCw2IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgaW50ZWxfdGlsZV9zaXplKGNvbnN0IHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAlyZXR1cm4gSVNfR0VOKGRldl9wcml2LCAyKSA/ IDIwNDggOiA0MDk2OwogfQogCi1zdGF0aWMgYm9vbCBpc19jY3NfcGxhbmUoY29uc3Qgc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBwbGFuZSkKLXsKLQlpZiAoIWlzX2Njc19tb2RpZmll cihmYi0+bW9kaWZpZXIpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlyZXR1cm4gcGxhbmUgPj0gZmIt PmZvcm1hdC0+bnVtX3BsYW5lcyAvIDI7Ci19Ci0KLXN0YXRpYyBib29sIGlzX2dlbjEyX2Njc19t b2RpZmllcih1NjQgbW9kaWZpZXIpCi17Ci0JcmV0dXJuIG1vZGlmaWVyID09IEk5MTVfRk9STUFU X01PRF9ZX1RJTEVEX0dFTjEyX1JDX0NDUyB8fAotCSAgICAgICBtb2RpZmllciA9PSBJOTE1X0ZP Uk1BVF9NT0RfWV9USUxFRF9HRU4xMl9NQ19DQ1M7Ci0KLX0KLQotc3RhdGljIGJvb2wgaXNfZ2Vu MTJfY2NzX3BsYW5lKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgcGxhbmUp Ci17Ci0JcmV0dXJuIGlzX2dlbjEyX2Njc19tb2RpZmllcihmYi0+bW9kaWZpZXIpICYmIGlzX2Nj c19wbGFuZShmYiwgcGxhbmUpOwotfQotCiBzdGF0aWMgYm9vbCBpc19hdXhfcGxhbmUoY29uc3Qg c3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBwbGFuZSkKIHsKIAlpZiAoaXNfY2NzX21v ZGlmaWVyKGZiLT5tb2RpZmllcikpCkBAIC0xMTA2LDM1ICsxMDg2LDYgQEAgc3RhdGljIGJvb2wg aXNfYXV4X3BsYW5lKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgcGxhbmUp CiAJcmV0dXJuIHBsYW5lID09IDE7CiB9CiAKLXN0YXRpYyBpbnQgbWFpbl90b19jY3NfcGxhbmUo Y29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBtYWluX3BsYW5lKQotewotCWRy bV9XQVJOX09OKGZiLT5kZXYsICFpc19jY3NfbW9kaWZpZXIoZmItPm1vZGlmaWVyKSB8fAotCQkg ICAgKG1haW5fcGxhbmUgJiYgbWFpbl9wbGFuZSA+PSBmYi0+Zm9ybWF0LT5udW1fcGxhbmVzIC8g MikpOwotCi0JcmV0dXJuIGZiLT5mb3JtYXQtPm51bV9wbGFuZXMgLyAyICsgbWFpbl9wbGFuZTsK LX0KLQotc3RhdGljIGludCBjY3NfdG9fbWFpbl9wbGFuZShjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1l YnVmZmVyICpmYiwgaW50IGNjc19wbGFuZSkKLXsKLQlkcm1fV0FSTl9PTihmYi0+ZGV2LCAhaXNf Y2NzX21vZGlmaWVyKGZiLT5tb2RpZmllcikgfHwKLQkJICAgIGNjc19wbGFuZSA8IGZiLT5mb3Jt YXQtPm51bV9wbGFuZXMgLyAyKTsKLQotCXJldHVybiBjY3NfcGxhbmUgLSBmYi0+Zm9ybWF0LT5u dW1fcGxhbmVzIC8gMjsKLX0KLQotaW50IGludGVsX21haW5fdG9fYXV4X3BsYW5lKGNvbnN0IHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgbWFpbl9wbGFuZSkKLXsKLQlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUoZmItPmRldik7Ci0KLQlpZiAoaXNfY2NzX21v ZGlmaWVyKGZiLT5tb2RpZmllcikpCi0JCXJldHVybiBtYWluX3RvX2Njc19wbGFuZShmYiwgbWFp bl9wbGFuZSk7Ci0JZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpIDwgMTEgJiYKLQkJIGludGVsX2Zv cm1hdF9pbmZvX2lzX3l1dl9zZW1pcGxhbmFyKGZiLT5mb3JtYXQsIGZiLT5tb2RpZmllcikpCi0J CXJldHVybiAxOwotCWVsc2UKLQkJcmV0dXJuIDA7Ci19Ci0KIGJvb2wKIGludGVsX2Zvcm1hdF9p bmZvX2lzX3l1dl9zZW1pcGxhbmFyKGNvbnN0IHN0cnVjdCBkcm1fZm9ybWF0X2luZm8gKmluZm8s CiAJCQkJICAgIHVpbnQ2NF90IG1vZGlmaWVyKQpAQCAtMTE1MCw3ICsxMTAxLDcgQEAgc3RhdGlj IGJvb2wgaXNfc2VtaXBsYW5hcl91dl9wbGFuZShjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYiwKIAkgICAgICAgY29sb3JfcGxhbmUgPT0gMTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGlu dAordW5zaWduZWQgaW50CiBpbnRlbF90aWxlX3dpZHRoX2J5dGVzKGNvbnN0IHN0cnVjdCBkcm1f ZnJhbWVidWZmZXIgKmZiLCBpbnQgY29sb3JfcGxhbmUpCiB7CiAJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShmYi0+ZGV2KTsKQEAgLTEyMDMsNyArMTE1NCw3IEBA IGludGVsX3RpbGVfd2lkdGhfYnl0ZXMoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIs IGludCBjb2xvcl9wbGFuZSkKIAl9CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQKK3Vuc2lnbmVk IGludAogaW50ZWxfdGlsZV9oZWlnaHQoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIs IGludCBjb2xvcl9wbGFuZSkKIHsKIAlpZiAoaXNfZ2VuMTJfY2NzX3BsYW5lKGZiLCBjb2xvcl9w bGFuZSkpCkBAIC0xMzAzLDggKzEyNTQsOCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGludGVsX2xp bmVhcl9hbGlnbm1lbnQoY29uc3Qgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcgogCQly ZXR1cm4gMDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbnRlbF9zdXJmX2FsaWdubWVudChj b25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKLQkJCQkJIGludCBjb2xvcl9wbGFuZSkK K3Vuc2lnbmVkIGludCBpbnRlbF9zdXJmX2FsaWdubWVudChjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1l YnVmZmVyICpmYiwKKwkJCQkgIGludCBjb2xvcl9wbGFuZSkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGZiLT5kZXYpOwogCkBAIC0xNTczLDEwICsxNTI0 LDEwIEBAIHN0YXRpYyB1MzIgaW50ZWxfYWRqdXN0X2FsaWduZWRfb2Zmc2V0KGludCAqeCwgaW50 ICp5LAogICogQWRqdXN0IHRoZSB0aWxlIG9mZnNldCBieSBtb3ZpbmcgdGhlIGRpZmZlcmVuY2Ug aW50bwogICogdGhlIHgveSBvZmZzZXRzLgogICovCi1zdGF0aWMgdTMyIGludGVsX3BsYW5lX2Fk anVzdF9hbGlnbmVkX29mZnNldChpbnQgKngsIGludCAqeSwKLQkJCQkJICAgICBjb25zdCBzdHJ1 Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnN0YXRlLAotCQkJCQkgICAgIGludCBjb2xvcl9wbGFuZSwK LQkJCQkJICAgICB1MzIgb2xkX29mZnNldCwgdTMyIG5ld19vZmZzZXQpCit1MzIgaW50ZWxfcGxh bmVfYWRqdXN0X2FsaWduZWRfb2Zmc2V0KGludCAqeCwgaW50ICp5LAorCQkJCSAgICAgIGNvbnN0 IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqc3RhdGUsCisJCQkJICAgICAgaW50IGNvbG9yX3Bs YW5lLAorCQkJCSAgICAgIHUzMiBvbGRfb2Zmc2V0LCB1MzIgbmV3X29mZnNldCkKIHsKIAlyZXR1 cm4gaW50ZWxfYWRqdXN0X2FsaWduZWRfb2Zmc2V0KHgsIHksIHN0YXRlLT5ody5mYiwgY29sb3Jf cGxhbmUsCiAJCQkJCSAgIHN0YXRlLT5ody5yb3RhdGlvbiwKQEAgLTE4NTAsNyArMTgwMSw3IEBA IGJvb2wgaXNfY2NzX21vZGlmaWVyKHU2NCBtb2RpZmllcikKIAogc3RhdGljIGludCBnZW4xMl9j Y3NfYXV4X3N0cmlkZShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IGNjc19wbGFuZSkK IHsKLQlyZXR1cm4gRElWX1JPVU5EX1VQKGZiLT5waXRjaGVzW2Njc190b19tYWluX3BsYW5lKGZi LCBjY3NfcGxhbmUpXSwKKwlyZXR1cm4gRElWX1JPVU5EX1VQKGZiLT5waXRjaGVzW3NrbF9jY3Nf dG9fbWFpbl9wbGFuZShmYiwgY2NzX3BsYW5lKV0sCiAJCQkgICAgNTEyKSAqIDY0OwogfQogCkBA IC0yMDA4LDcgKzE5NTksNyBAQCBzdGF0aWMgYm9vbCBpbnRlbF9wbGFuZV9uZWVkc19yZW1hcChj b25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQogCXJldHVybiBzdHJp ZGUgPiBtYXhfc3RyaWRlOwogfQogCi1zdGF0aWMgdm9pZAordm9pZAogaW50ZWxfZmJfcGxhbmVf Z2V0X3N1YnNhbXBsaW5nKGludCAqaHN1YiwgaW50ICp2c3ViLAogCQkJICAgICAgIGNvbnN0IHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAogCQkJICAgICAgIGludCBjb2xvcl9wbGFuZSkKQEAg LTIwMzMsNyArMTk4NCw3IEBAIGludGVsX2ZiX3BsYW5lX2dldF9zdWJzYW1wbGluZyhpbnQgKmhz dWIsIGludCAqdnN1YiwKIAkJcmV0dXJuOwogCX0KIAotCW1haW5fcGxhbmUgPSBjY3NfdG9fbWFp bl9wbGFuZShmYiwgY29sb3JfcGxhbmUpOworCW1haW5fcGxhbmUgPSBza2xfY2NzX3RvX21haW5f cGxhbmUoZmIsIGNvbG9yX3BsYW5lKTsKIAkqaHN1YiA9IGRybV9mb3JtYXRfaW5mb19ibG9ja193 aWR0aChmYi0+Zm9ybWF0LCBjb2xvcl9wbGFuZSkgLwogCQlkcm1fZm9ybWF0X2luZm9fYmxvY2tf d2lkdGgoZmItPmZvcm1hdCwgbWFpbl9wbGFuZSk7CiAKQEAgLTIwNzMsNyArMjAyNCw3IEBAIGlu dGVsX2ZiX2NoZWNrX2Njc194eShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IGNjc19w bGFuZSwgaW50IHgsIGludCB5KQogCWNjc194ID0gKHggKiBoc3ViKSAlIHRpbGVfd2lkdGg7CiAJ Y2NzX3kgPSAoeSAqIHZzdWIpICUgdGlsZV9oZWlnaHQ7CiAKLQltYWluX3BsYW5lID0gY2NzX3Rv X21haW5fcGxhbmUoZmIsIGNjc19wbGFuZSk7CisJbWFpbl9wbGFuZSA9IHNrbF9jY3NfdG9fbWFp bl9wbGFuZShmYiwgY2NzX3BsYW5lKTsKIAltYWluX3ggPSBpbnRlbF9mYi0+bm9ybWFsW21haW5f cGxhbmVdLnggJSB0aWxlX3dpZHRoOwogCW1haW5feSA9IGludGVsX2ZiLT5ub3JtYWxbbWFpbl9w bGFuZV0ueSAlIHRpbGVfaGVpZ2h0OwogCkBAIC0yMDk5LDcgKzIwNTAsNyBAQCBzdGF0aWMgdm9p ZAogaW50ZWxfZmJfcGxhbmVfZGltcyhpbnQgKncsIGludCAqaCwgc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqZmIsIGludCBjb2xvcl9wbGFuZSkKIHsKIAlpbnQgbWFpbl9wbGFuZSA9IGlzX2Njc19w bGFuZShmYiwgY29sb3JfcGxhbmUpID8KLQkJCSBjY3NfdG9fbWFpbl9wbGFuZShmYiwgY29sb3Jf cGxhbmUpIDogMDsKKwkJCSBza2xfY2NzX3RvX21haW5fcGxhbmUoZmIsIGNvbG9yX3BsYW5lKSA6 IDA7CiAJaW50IG1haW5faHN1YiwgbWFpbl92c3ViOwogCWludCBoc3ViLCB2c3ViOwogCkBAIC0y NDc0LDczICsyNDI1LDYgQEAgc3RhdGljIGludCBpOXh4X2Zvcm1hdF90b19mb3VyY2MoaW50IGZv cm1hdCkKIAl9CiB9CiAKLWludCBza2xfZm9ybWF0X3RvX2ZvdXJjYyhpbnQgZm9ybWF0LCBib29s IHJnYl9vcmRlciwgYm9vbCBhbHBoYSkKLXsKLQlzd2l0Y2ggKGZvcm1hdCkgewotCWNhc2UgUExB TkVfQ1RMX0ZPUk1BVF9SR0JfNTY1OgotCQlyZXR1cm4gRFJNX0ZPUk1BVF9SR0I1NjU7Ci0JY2Fz ZSBQTEFORV9DVExfRk9STUFUX05WMTI6Ci0JCXJldHVybiBEUk1fRk9STUFUX05WMTI7Ci0JY2Fz ZSBQTEFORV9DVExfRk9STUFUX1hZVVY6Ci0JCXJldHVybiBEUk1fRk9STUFUX1hZVVY4ODg4Owot CWNhc2UgUExBTkVfQ1RMX0ZPUk1BVF9QMDEwOgotCQlyZXR1cm4gRFJNX0ZPUk1BVF9QMDEwOwot CWNhc2UgUExBTkVfQ1RMX0ZPUk1BVF9QMDEyOgotCQlyZXR1cm4gRFJNX0ZPUk1BVF9QMDEyOwot CWNhc2UgUExBTkVfQ1RMX0ZPUk1BVF9QMDE2OgotCQlyZXR1cm4gRFJNX0ZPUk1BVF9QMDE2Owot CWNhc2UgUExBTkVfQ1RMX0ZPUk1BVF9ZMjEwOgotCQlyZXR1cm4gRFJNX0ZPUk1BVF9ZMjEwOwot CWNhc2UgUExBTkVfQ1RMX0ZPUk1BVF9ZMjEyOgotCQlyZXR1cm4gRFJNX0ZPUk1BVF9ZMjEyOwot CWNhc2UgUExBTkVfQ1RMX0ZPUk1BVF9ZMjE2OgotCQlyZXR1cm4gRFJNX0ZPUk1BVF9ZMjE2Owot CWNhc2UgUExBTkVfQ1RMX0ZPUk1BVF9ZNDEwOgotCQlyZXR1cm4gRFJNX0ZPUk1BVF9YVllVMjEw MTAxMDsKLQljYXNlIFBMQU5FX0NUTF9GT1JNQVRfWTQxMjoKLQkJcmV0dXJuIERSTV9GT1JNQVRf WFZZVTEyXzE2MTYxNjE2OwotCWNhc2UgUExBTkVfQ1RMX0ZPUk1BVF9ZNDE2OgotCQlyZXR1cm4g RFJNX0ZPUk1BVF9YVllVMTYxNjE2MTY7Ci0JZGVmYXVsdDoKLQljYXNlIFBMQU5FX0NUTF9GT1JN QVRfWFJHQl84ODg4OgotCQlpZiAocmdiX29yZGVyKSB7Ci0JCQlpZiAoYWxwaGEpCi0JCQkJcmV0 dXJuIERSTV9GT1JNQVRfQUJHUjg4ODg7Ci0JCQllbHNlCi0JCQkJcmV0dXJuIERSTV9GT1JNQVRf WEJHUjg4ODg7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoYWxwaGEpCi0JCQkJcmV0dXJuIERSTV9GT1JN QVRfQVJHQjg4ODg7Ci0JCQllbHNlCi0JCQkJcmV0dXJuIERSTV9GT1JNQVRfWFJHQjg4ODg7Ci0J CX0KLQljYXNlIFBMQU5FX0NUTF9GT1JNQVRfWFJHQl8yMTAxMDEwOgotCQlpZiAocmdiX29yZGVy KSB7Ci0JCQlpZiAoYWxwaGEpCi0JCQkJcmV0dXJuIERSTV9GT1JNQVRfQUJHUjIxMDEwMTA7Ci0J CQllbHNlCi0JCQkJcmV0dXJuIERSTV9GT1JNQVRfWEJHUjIxMDEwMTA7Ci0JCX0gZWxzZSB7Ci0J CQlpZiAoYWxwaGEpCi0JCQkJcmV0dXJuIERSTV9GT1JNQVRfQVJHQjIxMDEwMTA7Ci0JCQllbHNl Ci0JCQkJcmV0dXJuIERSTV9GT1JNQVRfWFJHQjIxMDEwMTA7Ci0JCX0KLQljYXNlIFBMQU5FX0NU TF9GT1JNQVRfWFJHQl8xNjE2MTYxNkY6Ci0JCWlmIChyZ2Jfb3JkZXIpIHsKLQkJCWlmIChhbHBo YSkKLQkJCQlyZXR1cm4gRFJNX0ZPUk1BVF9BQkdSMTYxNjE2MTZGOwotCQkJZWxzZQotCQkJCXJl dHVybiBEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkY7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoYWxwaGEp Ci0JCQkJcmV0dXJuIERSTV9GT1JNQVRfQVJHQjE2MTYxNjE2RjsKLQkJCWVsc2UKLQkJCQlyZXR1 cm4gRFJNX0ZPUk1BVF9YUkdCMTYxNjE2MTZGOwotCQl9Ci0JfQotfQotCiBzdGF0aWMgc3RydWN0 IGk5MTVfdm1hICoKIGluaXRpYWxfcGxhbmVfdm1hKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1LAogCQkgIHN0cnVjdCBpbnRlbF9pbml0aWFsX3BsYW5lX2NvbmZpZyAqcGxhbmVfY29uZmln KQpAQCAtMjg0NSwzNDIgKzI3MjksNiBAQCBpbnRlbF9maW5kX2luaXRpYWxfcGxhbmVfb2JqKHN0 cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjLAogCQkgICZ0b19pbnRlbF9mcm9udGJ1ZmZlcihm YiktPmJpdHMpOwogfQogCi0KLXN0YXRpYyBib29sCi1za2xfY2hlY2tfbWFpbl9jY3NfY29vcmRp bmF0ZXMoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSwKLQkJCSAgICAgICBp bnQgbWFpbl94LCBpbnQgbWFpbl95LCB1MzIgbWFpbl9vZmZzZXQsCi0JCQkgICAgICAgaW50IGNj c19wbGFuZSkKLXsKLQljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0 YXRlLT5ody5mYjsKLQlpbnQgYXV4X3ggPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbY2NzX3Bs YW5lXS54OwotCWludCBhdXhfeSA9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjY3NfcGxhbmVd Lnk7Ci0JdTMyIGF1eF9vZmZzZXQgPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbY2NzX3BsYW5l XS5vZmZzZXQ7Ci0JdTMyIGFsaWdubWVudCA9IGludGVsX3N1cmZfYWxpZ25tZW50KGZiLCBjY3Nf cGxhbmUpOwotCWludCBoc3ViOwotCWludCB2c3ViOwotCi0JaW50ZWxfZmJfcGxhbmVfZ2V0X3N1 YnNhbXBsaW5nKCZoc3ViLCAmdnN1YiwgZmIsIGNjc19wbGFuZSk7Ci0Jd2hpbGUgKGF1eF9vZmZz ZXQgPj0gbWFpbl9vZmZzZXQgJiYgYXV4X3kgPD0gbWFpbl95KSB7Ci0JCWludCB4LCB5OwotCi0J CWlmIChhdXhfeCA9PSBtYWluX3ggJiYgYXV4X3kgPT0gbWFpbl95KQotCQkJYnJlYWs7Ci0KLQkJ aWYgKGF1eF9vZmZzZXQgPT0gMCkKLQkJCWJyZWFrOwotCi0JCXggPSBhdXhfeCAvIGhzdWI7Ci0J CXkgPSBhdXhfeSAvIHZzdWI7Ci0JCWF1eF9vZmZzZXQgPSBpbnRlbF9wbGFuZV9hZGp1c3RfYWxp Z25lZF9vZmZzZXQoJngsICZ5LAotCQkJCQkJCSAgICAgICBwbGFuZV9zdGF0ZSwKLQkJCQkJCQkg ICAgICAgY2NzX3BsYW5lLAotCQkJCQkJCSAgICAgICBhdXhfb2Zmc2V0LAotCQkJCQkJCSAgICAg ICBhdXhfb2Zmc2V0IC0KLQkJCQkJCQkJYWxpZ25tZW50KTsKLQkJYXV4X3ggPSB4ICogaHN1YiAr IGF1eF94ICUgaHN1YjsKLQkJYXV4X3kgPSB5ICogdnN1YiArIGF1eF95ICUgdnN1YjsKLQl9Ci0K LQlpZiAoYXV4X3ggIT0gbWFpbl94IHx8IGF1eF95ICE9IG1haW5feSkKLQkJcmV0dXJuIGZhbHNl OwotCi0JcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2Njc19wbGFuZV0ub2Zmc2V0ID0gYXV4X29m ZnNldDsKLQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbY2NzX3BsYW5lXS54ID0gYXV4X3g7Ci0J cGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2Njc19wbGFuZV0ueSA9IGF1eF95OwotCi0JcmV0dXJu IHRydWU7Ci19Ci0KLXVuc2lnbmVkIGludAotaW50ZWxfcGxhbmVfZmVuY2VfeV9vZmZzZXQoY29u c3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKLXsKLQlpbnQgeCA9IDAs IHkgPSAwOwotCi0JaW50ZWxfcGxhbmVfYWRqdXN0X2FsaWduZWRfb2Zmc2V0KCZ4LCAmeSwgcGxh bmVfc3RhdGUsIDAsCi0JCQkJCSAgcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLm9mZnNldCwg MCk7Ci0KLQlyZXR1cm4geTsKLX0KLQotc3RhdGljIGludCBpbnRlbF9wbGFuZV9taW5fd2lkdGgo c3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKLQkJCQkgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqZmIsCi0JCQkJIGludCBjb2xvcl9wbGFuZSwKLQkJCQkgdW5zaWduZWQgaW50IHJvdGF0 aW9uKQotewotCWlmIChwbGFuZS0+bWluX3dpZHRoKQotCQlyZXR1cm4gcGxhbmUtPm1pbl93aWR0 aChmYiwgY29sb3JfcGxhbmUsIHJvdGF0aW9uKTsKLQllbHNlCi0JCXJldHVybiAxOwotfQotCi1z dGF0aWMgaW50IGludGVsX3BsYW5lX21heF93aWR0aChzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5l LAotCQkJCSBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKLQkJCQkgaW50IGNvbG9y X3BsYW5lLAotCQkJCSB1bnNpZ25lZCBpbnQgcm90YXRpb24pCi17Ci0JaWYgKHBsYW5lLT5tYXhf d2lkdGgpCi0JCXJldHVybiBwbGFuZS0+bWF4X3dpZHRoKGZiLCBjb2xvcl9wbGFuZSwgcm90YXRp b24pOwotCWVsc2UKLQkJcmV0dXJuIElOVF9NQVg7Ci19Ci0KLXN0YXRpYyBpbnQgaW50ZWxfcGxh bmVfbWF4X2hlaWdodChzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAotCQkJCSAgY29uc3Qgc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCi0JCQkJICBpbnQgY29sb3JfcGxhbmUsCi0JCQkJICB1 bnNpZ25lZCBpbnQgcm90YXRpb24pCi17Ci0JaWYgKHBsYW5lLT5tYXhfaGVpZ2h0KQotCQlyZXR1 cm4gcGxhbmUtPm1heF9oZWlnaHQoZmIsIGNvbG9yX3BsYW5lLCByb3RhdGlvbik7Ci0JZWxzZQot CQlyZXR1cm4gSU5UX01BWDsKLX0KLQotc3RhdGljIGludCBza2xfY2hlY2tfbWFpbl9zdXJmYWNl KHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCi17Ci0Jc3RydWN0IGludGVs X3BsYW5lICpwbGFuZSA9IHRvX2ludGVsX3BsYW5lKHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lKTsK LQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNl LmRldik7Ci0JY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+ aHcuZmI7Ci0JdW5zaWduZWQgaW50IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmh3LnJvdGF0aW9u OwotCWludCB4ID0gcGxhbmVfc3RhdGUtPnVhcGkuc3JjLngxID4+IDE2OwotCWludCB5ID0gcGxh bmVfc3RhdGUtPnVhcGkuc3JjLnkxID4+IDE2OwotCWludCB3ID0gZHJtX3JlY3Rfd2lkdGgoJnBs YW5lX3N0YXRlLT51YXBpLnNyYykgPj4gMTY7Ci0JaW50IGggPSBkcm1fcmVjdF9oZWlnaHQoJnBs YW5lX3N0YXRlLT51YXBpLnNyYykgPj4gMTY7Ci0JaW50IG1pbl93aWR0aCA9IGludGVsX3BsYW5l X21pbl93aWR0aChwbGFuZSwgZmIsIDAsIHJvdGF0aW9uKTsKLQlpbnQgbWF4X3dpZHRoID0gaW50 ZWxfcGxhbmVfbWF4X3dpZHRoKHBsYW5lLCBmYiwgMCwgcm90YXRpb24pOwotCWludCBtYXhfaGVp Z2h0ID0gaW50ZWxfcGxhbmVfbWF4X2hlaWdodChwbGFuZSwgZmIsIDAsIHJvdGF0aW9uKTsKLQlp bnQgYXV4X3BsYW5lID0gaW50ZWxfbWFpbl90b19hdXhfcGxhbmUoZmIsIDApOwotCXUzMiBhdXhf b2Zmc2V0ID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2F1eF9wbGFuZV0ub2Zmc2V0OwotCXUz MiBhbGlnbm1lbnQsIG9mZnNldDsKLQotCWlmICh3ID4gbWF4X3dpZHRoIHx8IHcgPCBtaW5fd2lk dGggfHwgaCA+IG1heF9oZWlnaHQpIHsKLQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0J CQkgICAgInJlcXVlc3RlZCBZL1JHQiBzb3VyY2Ugc2l6ZSAlZHglZCBvdXRzaWRlIGxpbWl0cyAo bWluOiAlZHgxIG1heDogJWR4JWQpXG4iLAotCQkJICAgIHcsIGgsIG1pbl93aWR0aCwgbWF4X3dp ZHRoLCBtYXhfaGVpZ2h0KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaW50ZWxfYWRkX2Zi X29mZnNldHMoJngsICZ5LCBwbGFuZV9zdGF0ZSwgMCk7Ci0Jb2Zmc2V0ID0gaW50ZWxfcGxhbmVf Y29tcHV0ZV9hbGlnbmVkX29mZnNldCgmeCwgJnksIHBsYW5lX3N0YXRlLCAwKTsKLQlhbGlnbm1l bnQgPSBpbnRlbF9zdXJmX2FsaWdubWVudChmYiwgMCk7Ci0JaWYgKGRybV9XQVJOX09OKCZkZXZf cHJpdi0+ZHJtLCBhbGlnbm1lbnQgJiYgIWlzX3Bvd2VyX29mXzIoYWxpZ25tZW50KSkpCi0JCXJl dHVybiAtRUlOVkFMOwotCi0JLyoKLQkgKiBBVVggc3VyZmFjZSBvZmZzZXQgaXMgc3BlY2lmaWVk IGFzIHRoZSBkaXN0YW5jZSBmcm9tIHRoZQotCSAqIG1haW4gc3VyZmFjZSBvZmZzZXQsIGFuZCBp dCBtdXN0IGJlIG5vbi1uZWdhdGl2ZS4gTWFrZQotCSAqIHN1cmUgdGhhdCBpcyB3aGF0IHdlIHdp bGwgZ2V0LgotCSAqLwotCWlmIChhdXhfcGxhbmUgJiYgb2Zmc2V0ID4gYXV4X29mZnNldCkKLQkJ b2Zmc2V0ID0gaW50ZWxfcGxhbmVfYWRqdXN0X2FsaWduZWRfb2Zmc2V0KCZ4LCAmeSwgcGxhbmVf c3RhdGUsIDAsCi0JCQkJCQkJICAgb2Zmc2V0LCBhdXhfb2Zmc2V0ICYgfihhbGlnbm1lbnQgLSAx KSk7Ci0KLQkvKgotCSAqIFdoZW4gdXNpbmcgYW4gWC10aWxlZCBzdXJmYWNlLCB0aGUgcGxhbmUg Ymxvd3MgdXAKLQkgKiBpZiB0aGUgeCBvZmZzZXQgKyB3aWR0aCBleGNlZWQgdGhlIHN0cmlkZS4K LQkgKgotCSAqIFRPRE86IGxpbmVhciBhbmQgWS10aWxlZCBzZWVtIGZpbmUsIFlmIHVudGVzdGVk LAotCSAqLwotCWlmIChmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQpIHsK LQkJaW50IGNwcCA9IGZiLT5mb3JtYXQtPmNwcFswXTsKLQotCQl3aGlsZSAoKHggKyB3KSAqIGNw cCA+IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS5zdHJpZGUpIHsKLQkJCWlmIChvZmZzZXQg PT0gMCkgewotCQkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAotCQkJCQkgICAgIlVuYWJs ZSB0byBmaW5kIHN1aXRhYmxlIGRpc3BsYXkgc3VyZmFjZSBvZmZzZXQgZHVlIHRvIFgtdGlsaW5n XG4iKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQotCQkJb2Zmc2V0ID0gaW50ZWxfcGxh bmVfYWRqdXN0X2FsaWduZWRfb2Zmc2V0KCZ4LCAmeSwgcGxhbmVfc3RhdGUsIDAsCi0JCQkJCQkJ CSAgIG9mZnNldCwgb2Zmc2V0IC0gYWxpZ25tZW50KTsKLQkJfQotCX0KLQotCS8qCi0JICogQ0NT IEFVWCBzdXJmYWNlIGRvZXNuJ3QgaGF2ZSBpdHMgb3duIHgveSBvZmZzZXRzLCB3ZSBtdXN0IG1h a2Ugc3VyZQotCSAqIHRoZXkgbWF0Y2ggd2l0aCB0aGUgbWFpbiBzdXJmYWNlIHgveSBvZmZzZXRz LgotCSAqLwotCWlmIChpc19jY3NfbW9kaWZpZXIoZmItPm1vZGlmaWVyKSkgewotCQl3aGlsZSAo IXNrbF9jaGVja19tYWluX2Njc19jb29yZGluYXRlcyhwbGFuZV9zdGF0ZSwgeCwgeSwKLQkJCQkJ CSAgICAgICBvZmZzZXQsIGF1eF9wbGFuZSkpIHsKLQkJCWlmIChvZmZzZXQgPT0gMCkKLQkJCQli cmVhazsKLQotCQkJb2Zmc2V0ID0gaW50ZWxfcGxhbmVfYWRqdXN0X2FsaWduZWRfb2Zmc2V0KCZ4 LCAmeSwgcGxhbmVfc3RhdGUsIDAsCi0JCQkJCQkJCSAgIG9mZnNldCwgb2Zmc2V0IC0gYWxpZ25t ZW50KTsKLQkJfQotCi0JCWlmICh4ICE9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVthdXhfcGxh bmVdLnggfHwKLQkJICAgIHkgIT0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2F1eF9wbGFuZV0u eSkgewotCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0JCQkJICAgICJVbmFibGUgdG8g ZmluZCBzdWl0YWJsZSBkaXNwbGF5IHN1cmZhY2Ugb2Zmc2V0IGR1ZSB0byBDQ1NcbiIpOwotCQkJ cmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9Ci0KLQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0u b2Zmc2V0ID0gb2Zmc2V0OwotCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS54ID0geDsKLQlw bGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0ueSA9IHk7Ci0KLQkvKgotCSAqIFB1dCB0aGUgZmlu YWwgY29vcmRpbmF0ZXMgYmFjayBzbyB0aGF0IHRoZSBzcmMKLQkgKiBjb29yZGluYXRlIGNoZWNr cyB3aWxsIHNlZSB0aGUgcmlnaHQgdmFsdWVzLgotCSAqLwotCWRybV9yZWN0X3RyYW5zbGF0ZV90 bygmcGxhbmVfc3RhdGUtPnVhcGkuc3JjLAotCQkJICAgICAgeCA8PCAxNiwgeSA8PCAxNik7Ci0K LQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBza2xfY2hlY2tfbnYxMl9hdXhfc3VyZmFjZShz dHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQotewotCXN0cnVjdCBpbnRlbF9w bGFuZSAqcGxhbmUgPSB0b19pbnRlbF9wbGFuZShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZSk7Ci0J c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7 Ci0JY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7 Ci0JdW5zaWduZWQgaW50IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmh3LnJvdGF0aW9uOwotCWlu dCB1dl9wbGFuZSA9IDE7Ci0JaW50IG1heF93aWR0aCA9IGludGVsX3BsYW5lX21heF93aWR0aChw bGFuZSwgZmIsIHV2X3BsYW5lLCByb3RhdGlvbik7Ci0JaW50IG1heF9oZWlnaHQgPSBpbnRlbF9w bGFuZV9tYXhfaGVpZ2h0KHBsYW5lLCBmYiwgdXZfcGxhbmUsIHJvdGF0aW9uKTsKLQlpbnQgeCA9 IHBsYW5lX3N0YXRlLT51YXBpLnNyYy54MSA+PiAxNzsKLQlpbnQgeSA9IHBsYW5lX3N0YXRlLT51 YXBpLnNyYy55MSA+PiAxNzsKLQlpbnQgdyA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+ dWFwaS5zcmMpID4+IDE3OwotCWludCBoID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+ dWFwaS5zcmMpID4+IDE3OwotCXUzMiBvZmZzZXQ7Ci0KLQkvKiBGSVhNRSBub3QgcXVpdGUgc3Vy ZSBob3cvaWYgdGhlc2UgYXBwbHkgdG8gdGhlIGNocm9tYSBwbGFuZSAqLwotCWlmICh3ID4gbWF4 X3dpZHRoIHx8IGggPiBtYXhfaGVpZ2h0KSB7Ci0JCWRybV9kYmdfa21zKCZpOTE1LT5kcm0sCi0J CQkgICAgIkNiQ3Igc291cmNlIHNpemUgJWR4JWQgdG9vIGJpZyAobGltaXQgJWR4JWQpXG4iLAot CQkJICAgIHcsIGgsIG1heF93aWR0aCwgbWF4X2hlaWdodCk7Ci0JCXJldHVybiAtRUlOVkFMOwot CX0KLQotCWludGVsX2FkZF9mYl9vZmZzZXRzKCZ4LCAmeSwgcGxhbmVfc3RhdGUsIHV2X3BsYW5l KTsKLQlvZmZzZXQgPSBpbnRlbF9wbGFuZV9jb21wdXRlX2FsaWduZWRfb2Zmc2V0KCZ4LCAmeSwK LQkJCQkJCSAgICBwbGFuZV9zdGF0ZSwgdXZfcGxhbmUpOwotCi0JaWYgKGlzX2Njc19tb2RpZmll cihmYi0+bW9kaWZpZXIpKSB7Ci0JCWludCBjY3NfcGxhbmUgPSBtYWluX3RvX2Njc19wbGFuZShm YiwgdXZfcGxhbmUpOwotCQl1MzIgYXV4X29mZnNldCA9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFu ZVtjY3NfcGxhbmVdLm9mZnNldDsKLQkJdTMyIGFsaWdubWVudCA9IGludGVsX3N1cmZfYWxpZ25t ZW50KGZiLCB1dl9wbGFuZSk7Ci0KLQkJaWYgKG9mZnNldCA+IGF1eF9vZmZzZXQpCi0JCQlvZmZz ZXQgPSBpbnRlbF9wbGFuZV9hZGp1c3RfYWxpZ25lZF9vZmZzZXQoJngsICZ5LAotCQkJCQkJCQkg ICBwbGFuZV9zdGF0ZSwKLQkJCQkJCQkJICAgdXZfcGxhbmUsCi0JCQkJCQkJCSAgIG9mZnNldCwK LQkJCQkJCQkJICAgYXV4X29mZnNldCAmIH4oYWxpZ25tZW50IC0gMSkpOwotCi0JCXdoaWxlICgh c2tsX2NoZWNrX21haW5fY2NzX2Nvb3JkaW5hdGVzKHBsYW5lX3N0YXRlLCB4LCB5LAotCQkJCQkJ ICAgICAgIG9mZnNldCwgY2NzX3BsYW5lKSkgewotCQkJaWYgKG9mZnNldCA9PSAwKQotCQkJCWJy ZWFrOwotCi0JCQlvZmZzZXQgPSBpbnRlbF9wbGFuZV9hZGp1c3RfYWxpZ25lZF9vZmZzZXQoJngs ICZ5LAotCQkJCQkJCQkgICBwbGFuZV9zdGF0ZSwKLQkJCQkJCQkJICAgdXZfcGxhbmUsCi0JCQkJ CQkJCSAgIG9mZnNldCwgb2Zmc2V0IC0gYWxpZ25tZW50KTsKLQkJfQotCi0JCWlmICh4ICE9IHBs YW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjY3NfcGxhbmVdLnggfHwKLQkJICAgIHkgIT0gcGxhbmVf c3RhdGUtPmNvbG9yX3BsYW5lW2Njc19wbGFuZV0ueSkgewotCQkJZHJtX2RiZ19rbXMoJmk5MTUt PmRybSwKLQkJCQkgICAgIlVuYWJsZSB0byBmaW5kIHN1aXRhYmxlIGRpc3BsYXkgc3VyZmFjZSBv ZmZzZXQgZHVlIHRvIENDU1xuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KLQotCXBs YW5lX3N0YXRlLT5jb2xvcl9wbGFuZVt1dl9wbGFuZV0ub2Zmc2V0ID0gb2Zmc2V0OwotCXBsYW5l X3N0YXRlLT5jb2xvcl9wbGFuZVt1dl9wbGFuZV0ueCA9IHg7Ci0JcGxhbmVfc3RhdGUtPmNvbG9y X3BsYW5lW3V2X3BsYW5lXS55ID0geTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNr bF9jaGVja19jY3NfYXV4X3N1cmZhY2Uoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9z dGF0ZSkKLXsKLQljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRl LT5ody5mYjsKLQlpbnQgc3JjX3ggPSBwbGFuZV9zdGF0ZS0+dWFwaS5zcmMueDEgPj4gMTY7Ci0J aW50IHNyY195ID0gcGxhbmVfc3RhdGUtPnVhcGkuc3JjLnkxID4+IDE2OwotCXUzMiBvZmZzZXQ7 Ci0JaW50IGNjc19wbGFuZTsKLQotCWZvciAoY2NzX3BsYW5lID0gMDsgY2NzX3BsYW5lIDwgZmIt PmZvcm1hdC0+bnVtX3BsYW5lczsgY2NzX3BsYW5lKyspIHsKLQkJaW50IG1haW5faHN1YiwgbWFp bl92c3ViOwotCQlpbnQgaHN1YiwgdnN1YjsKLQkJaW50IHgsIHk7Ci0KLQkJaWYgKCFpc19jY3Nf cGxhbmUoZmIsIGNjc19wbGFuZSkpCi0JCQljb250aW51ZTsKLQotCQlpbnRlbF9mYl9wbGFuZV9n ZXRfc3Vic2FtcGxpbmcoJm1haW5faHN1YiwgJm1haW5fdnN1YiwgZmIsCi0JCQkJCSAgICAgICBj Y3NfdG9fbWFpbl9wbGFuZShmYiwgY2NzX3BsYW5lKSk7Ci0JCWludGVsX2ZiX3BsYW5lX2dldF9z dWJzYW1wbGluZygmaHN1YiwgJnZzdWIsIGZiLCBjY3NfcGxhbmUpOwotCi0JCWhzdWIgKj0gbWFp bl9oc3ViOwotCQl2c3ViICo9IG1haW5fdnN1YjsKLQkJeCA9IHNyY194IC8gaHN1YjsKLQkJeSA9 IHNyY195IC8gdnN1YjsKLQotCQlpbnRlbF9hZGRfZmJfb2Zmc2V0cygmeCwgJnksIHBsYW5lX3N0 YXRlLCBjY3NfcGxhbmUpOwotCi0JCW9mZnNldCA9IGludGVsX3BsYW5lX2NvbXB1dGVfYWxpZ25l ZF9vZmZzZXQoJngsICZ5LAotCQkJCQkJCSAgICBwbGFuZV9zdGF0ZSwKLQkJCQkJCQkgICAgY2Nz X3BsYW5lKTsKLQotCQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbY2NzX3BsYW5lXS5vZmZzZXQg PSBvZmZzZXQ7Ci0JCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjY3NfcGxhbmVdLnggPSAoeCAq IGhzdWIgKwotCQkJCQkJCSBzcmNfeCAlIGhzdWIpIC8KLQkJCQkJCQltYWluX2hzdWI7Ci0JCXBs YW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjY3NfcGxhbmVdLnkgPSAoeSAqIHZzdWIgKwotCQkJCQkJ CSBzcmNfeSAlIHZzdWIpIC8KLQkJCQkJCQltYWluX3ZzdWI7Ci0JfQotCi0JcmV0dXJuIDA7Ci19 Ci0KLWludCBza2xfY2hlY2tfcGxhbmVfc3VyZmFjZShzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUg KnBsYW5lX3N0YXRlKQotewotCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxh bmVfc3RhdGUtPmh3LmZiOwotCWludCByZXQsIGk7Ci0KLQlyZXQgPSBpbnRlbF9wbGFuZV9jb21w dXRlX2d0dChwbGFuZV9zdGF0ZSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCWlmICgh cGxhbmVfc3RhdGUtPnVhcGkudmlzaWJsZSkKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIEhhbmRs ZSB0aGUgQVVYIHN1cmZhY2UgZmlyc3Qgc2luY2UgdGhlIG1haW4gc3VyZmFjZSBzZXR1cCBkZXBl bmRzIG9uCi0JICogaXQuCi0JICovCi0JaWYgKGlzX2Njc19tb2RpZmllcihmYi0+bW9kaWZpZXIp KSB7Ci0JCXJldCA9IHNrbF9jaGVja19jY3NfYXV4X3N1cmZhY2UocGxhbmVfc3RhdGUpOwotCQlp ZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlpZiAoaW50ZWxfZm9ybWF0X2luZm9faXNf eXV2X3NlbWlwbGFuYXIoZmItPmZvcm1hdCwKLQkJCQkJCWZiLT5tb2RpZmllcikpIHsKLQkJcmV0 ID0gc2tsX2NoZWNrX252MTJfYXV4X3N1cmZhY2UocGxhbmVfc3RhdGUpOwotCQlpZiAocmV0KQot CQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlmb3IgKGkgPSBmYi0+Zm9ybWF0LT5udW1fcGxhbmVzOyBp IDwgQVJSQVlfU0laRShwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmUpOyBpKyspIHsKLQkJcGxhbmVf c3RhdGUtPmNvbG9yX3BsYW5lW2ldLm9mZnNldCA9IDA7Ci0JCXBsYW5lX3N0YXRlLT5jb2xvcl9w bGFuZVtpXS54ID0gMDsKLQkJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2ldLnkgPSAwOwotCX0K LQotCXJldCA9IHNrbF9jaGVja19tYWluX3N1cmZhY2UocGxhbmVfc3RhdGUpOwotCWlmIChyZXQp Ci0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQgc2tsX2RldGFj aF9zY2FsZXIoc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMsIGludCBpZCkKIHsKIAlzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2ID0gaW50ZWxfY3J0Yy0+YmFzZS5kZXY7CkBAIC0zMjEzLDMwNSAr Mjc2MSwyNCBAQCBzdGF0aWMgdm9pZCBza2xfZGV0YWNoX3NjYWxlcnMoY29uc3Qgc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCiAJfQogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50 IHNrbF9wbGFuZV9zdHJpZGVfbXVsdChjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwK LQkJCQkJICBpbnQgY29sb3JfcGxhbmUsIHVuc2lnbmVkIGludCByb3RhdGlvbikKLXsKLQkvKgot CSAqIFRoZSBzdHJpZGUgaXMgZWl0aGVyIGV4cHJlc3NlZCBhcyBhIG11bHRpcGxlIG9mIDY0IGJ5 dGVzIGNodW5rcyBmb3IKLQkgKiBsaW5lYXIgYnVmZmVycyBvciBpbiBudW1iZXIgb2YgdGlsZXMg Zm9yIHRpbGVkIGJ1ZmZlcnMuCi0JICovCi0JaWYgKGlzX3N1cmZhY2VfbGluZWFyKGZiLCBjb2xv cl9wbGFuZSkpCi0JCXJldHVybiA2NDsKLQllbHNlIGlmIChkcm1fcm90YXRpb25fOTBfb3JfMjcw KHJvdGF0aW9uKSkKLQkJcmV0dXJuIGludGVsX3RpbGVfaGVpZ2h0KGZiLCBjb2xvcl9wbGFuZSk7 Ci0JZWxzZQotCQlyZXR1cm4gaW50ZWxfdGlsZV93aWR0aF9ieXRlcyhmYiwgY29sb3JfcGxhbmUp OwotfQotCi11MzIgc2tsX3BsYW5lX3N0cmlkZShjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3Rh dGUgKnBsYW5lX3N0YXRlLAotCQkgICAgIGludCBjb2xvcl9wbGFuZSkKLXsKLQljb25zdCBzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKLQl1bnNpZ25lZCBp bnQgcm90YXRpb24gPSBwbGFuZV9zdGF0ZS0+aHcucm90YXRpb247Ci0JdTMyIHN0cmlkZSA9IHBs YW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjb2xvcl9wbGFuZV0uc3RyaWRlOwotCi0JaWYgKGNvbG9y X3BsYW5lID49IGZiLT5mb3JtYXQtPm51bV9wbGFuZXMpCi0JCXJldHVybiAwOwotCi0JcmV0dXJu IHN0cmlkZSAvIHNrbF9wbGFuZV9zdHJpZGVfbXVsdChmYiwgY29sb3JfcGxhbmUsIHJvdGF0aW9u KTsKLX0KLQotc3RhdGljIHUzMiBza2xfcGxhbmVfY3RsX2Zvcm1hdCh1MzIgcGl4ZWxfZm9ybWF0 KQotewotCXN3aXRjaCAocGl4ZWxfZm9ybWF0KSB7Ci0JY2FzZSBEUk1fRk9STUFUX0M4OgotCQly ZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9JTkRFWEVEOwotCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6 Ci0JCXJldHVybiBQTEFORV9DVExfRk9STUFUX1JHQl81NjU7Ci0JY2FzZSBEUk1fRk9STUFUX1hC R1I4ODg4OgotCWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoKLQkJcmV0dXJuIFBMQU5FX0NUTF9G T1JNQVRfWFJHQl84ODg4IHwgUExBTkVfQ1RMX09SREVSX1JHQlg7Ci0JY2FzZSBEUk1fRk9STUFU X1hSR0I4ODg4OgotCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoKLQkJcmV0dXJuIFBMQU5FX0NU TF9GT1JNQVRfWFJHQl84ODg4OwotCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMDoKLQljYXNl IERSTV9GT1JNQVRfQUJHUjIxMDEwMTA6Ci0JCXJldHVybiBQTEFORV9DVExfRk9STUFUX1hSR0Jf MjEwMTAxMCB8IFBMQU5FX0NUTF9PUkRFUl9SR0JYOwotCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMjEw MTAxMDoKLQljYXNlIERSTV9GT1JNQVRfQVJHQjIxMDEwMTA6Ci0JCXJldHVybiBQTEFORV9DVExf Rk9STUFUX1hSR0JfMjEwMTAxMDsKLQljYXNlIERSTV9GT1JNQVRfWEJHUjE2MTYxNjE2RjoKLQlj YXNlIERSTV9GT1JNQVRfQUJHUjE2MTYxNjE2RjoKLQkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRf WFJHQl8xNjE2MTYxNkYgfCBQTEFORV9DVExfT1JERVJfUkdCWDsKLQljYXNlIERSTV9GT1JNQVRf WFJHQjE2MTYxNjE2RjoKLQljYXNlIERSTV9GT1JNQVRfQVJHQjE2MTYxNjE2RjoKLQkJcmV0dXJu IFBMQU5FX0NUTF9GT1JNQVRfWFJHQl8xNjE2MTYxNkY7Ci0JY2FzZSBEUk1fRk9STUFUX1hZVVY4 ODg4OgotCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9YWVVWOwotCWNhc2UgRFJNX0ZPUk1BVF9Z VVlWOgotCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9ZVVY0MjIgfCBQTEFORV9DVExfWVVWNDIy X1lVWVY7Ci0JY2FzZSBEUk1fRk9STUFUX1lWWVU6Ci0JCXJldHVybiBQTEFORV9DVExfRk9STUFU X1lVVjQyMiB8IFBMQU5FX0NUTF9ZVVY0MjJfWVZZVTsKLQljYXNlIERSTV9GT1JNQVRfVVlWWToK LQkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfWVVWNDIyIHwgUExBTkVfQ1RMX1lVVjQyMl9VWVZZ OwotCWNhc2UgRFJNX0ZPUk1BVF9WWVVZOgotCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9ZVVY0 MjIgfCBQTEFORV9DVExfWVVWNDIyX1ZZVVk7Ci0JY2FzZSBEUk1fRk9STUFUX05WMTI6Ci0JCXJl dHVybiBQTEFORV9DVExfRk9STUFUX05WMTI7Ci0JY2FzZSBEUk1fRk9STUFUX1AwMTA6Ci0JCXJl dHVybiBQTEFORV9DVExfRk9STUFUX1AwMTA7Ci0JY2FzZSBEUk1fRk9STUFUX1AwMTI6Ci0JCXJl dHVybiBQTEFORV9DVExfRk9STUFUX1AwMTI7Ci0JY2FzZSBEUk1fRk9STUFUX1AwMTY6Ci0JCXJl dHVybiBQTEFORV9DVExfRk9STUFUX1AwMTY7Ci0JY2FzZSBEUk1fRk9STUFUX1kyMTA6Ci0JCXJl dHVybiBQTEFORV9DVExfRk9STUFUX1kyMTA7Ci0JY2FzZSBEUk1fRk9STUFUX1kyMTI6Ci0JCXJl dHVybiBQTEFORV9DVExfRk9STUFUX1kyMTI7Ci0JY2FzZSBEUk1fRk9STUFUX1kyMTY6Ci0JCXJl dHVybiBQTEFORV9DVExfRk9STUFUX1kyMTY7Ci0JY2FzZSBEUk1fRk9STUFUX1hWWVUyMTAxMDEw OgotCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9ZNDEwOwotCWNhc2UgRFJNX0ZPUk1BVF9YVllV MTJfMTYxNjE2MTY6Ci0JCXJldHVybiBQTEFORV9DVExfRk9STUFUX1k0MTI7Ci0JY2FzZSBEUk1f Rk9STUFUX1hWWVUxNjE2MTYxNjoKLQkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfWTQxNjsKLQlk ZWZhdWx0OgotCQlNSVNTSU5HX0NBU0UocGl4ZWxfZm9ybWF0KTsKLQl9Ci0KLQlyZXR1cm4gMDsK LX0KLQotc3RhdGljIHUzMiBza2xfcGxhbmVfY3RsX2FscGhhKGNvbnN0IHN0cnVjdCBpbnRlbF9w bGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCi17Ci0JaWYgKCFwbGFuZV9zdGF0ZS0+aHcuZmItPmZv cm1hdC0+aGFzX2FscGhhKQotCQlyZXR1cm4gUExBTkVfQ1RMX0FMUEhBX0RJU0FCTEU7Ci0KLQlz d2l0Y2ggKHBsYW5lX3N0YXRlLT5ody5waXhlbF9ibGVuZF9tb2RlKSB7Ci0JY2FzZSBEUk1fTU9E RV9CTEVORF9QSVhFTF9OT05FOgotCQlyZXR1cm4gUExBTkVfQ1RMX0FMUEhBX0RJU0FCTEU7Ci0J Y2FzZSBEUk1fTU9ERV9CTEVORF9QUkVNVUxUSToKLQkJcmV0dXJuIFBMQU5FX0NUTF9BTFBIQV9T V19QUkVNVUxUSVBMWTsKLQljYXNlIERSTV9NT0RFX0JMRU5EX0NPVkVSQUdFOgotCQlyZXR1cm4g UExBTkVfQ1RMX0FMUEhBX0hXX1BSRU1VTFRJUExZOwotCWRlZmF1bHQ6Ci0JCU1JU1NJTkdfQ0FT RShwbGFuZV9zdGF0ZS0+aHcucGl4ZWxfYmxlbmRfbW9kZSk7Ci0JCXJldHVybiBQTEFORV9DVExf QUxQSEFfRElTQUJMRTsKLQl9Ci19Ci0KLXN0YXRpYyB1MzIgZ2xrX3BsYW5lX2NvbG9yX2N0bF9h bHBoYShjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQotewotCWlm ICghcGxhbmVfc3RhdGUtPmh3LmZiLT5mb3JtYXQtPmhhc19hbHBoYSkKLQkJcmV0dXJuIFBMQU5F X0NPTE9SX0FMUEhBX0RJU0FCTEU7Ci0KLQlzd2l0Y2ggKHBsYW5lX3N0YXRlLT5ody5waXhlbF9i bGVuZF9tb2RlKSB7Ci0JY2FzZSBEUk1fTU9ERV9CTEVORF9QSVhFTF9OT05FOgotCQlyZXR1cm4g UExBTkVfQ09MT1JfQUxQSEFfRElTQUJMRTsKLQljYXNlIERSTV9NT0RFX0JMRU5EX1BSRU1VTFRJ OgotCQlyZXR1cm4gUExBTkVfQ09MT1JfQUxQSEFfU1dfUFJFTVVMVElQTFk7Ci0JY2FzZSBEUk1f TU9ERV9CTEVORF9DT1ZFUkFHRToKLQkJcmV0dXJuIFBMQU5FX0NPTE9SX0FMUEhBX0hXX1BSRU1V TFRJUExZOwotCWRlZmF1bHQ6Ci0JCU1JU1NJTkdfQ0FTRShwbGFuZV9zdGF0ZS0+aHcucGl4ZWxf YmxlbmRfbW9kZSk7Ci0JCXJldHVybiBQTEFORV9DT0xPUl9BTFBIQV9ESVNBQkxFOwotCX0KLX0K LQotc3RhdGljIHUzMiBza2xfcGxhbmVfY3RsX3RpbGluZyh1NjQgZmJfbW9kaWZpZXIpCi17Ci0J c3dpdGNoIChmYl9tb2RpZmllcikgewotCWNhc2UgRFJNX0ZPUk1BVF9NT0RfTElORUFSOgotCQli cmVhazsKLQljYXNlIEk5MTVfRk9STUFUX01PRF9YX1RJTEVEOgotCQlyZXR1cm4gUExBTkVfQ1RM X1RJTEVEX1g7Ci0JY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRDoKLQkJcmV0dXJuIFBMQU5F X0NUTF9USUxFRF9ZOwotCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NTOgotCQlyZXR1 cm4gUExBTkVfQ1RMX1RJTEVEX1kgfCBQTEFORV9DVExfUkVOREVSX0RFQ09NUFJFU1NJT05fRU5B QkxFOwotCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfUkNfQ0NTOgotCQlyZXR1 cm4gUExBTkVfQ1RMX1RJTEVEX1kgfAotCQkgICAgICAgUExBTkVfQ1RMX1JFTkRFUl9ERUNPTVBS RVNTSU9OX0VOQUJMRSB8Ci0JCSAgICAgICBQTEFORV9DVExfQ0xFQVJfQ09MT1JfRElTQUJMRTsK LQljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX01DX0NDUzoKLQkJcmV0dXJuIFBM QU5FX0NUTF9USUxFRF9ZIHwgUExBTkVfQ1RMX01FRElBX0RFQ09NUFJFU1NJT05fRU5BQkxFOwot CWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEOgotCQlyZXR1cm4gUExBTkVfQ1RMX1RJTEVE X1lGOwotCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUzoKLQkJcmV0dXJuIFBMQU5F X0NUTF9USUxFRF9ZRiB8IFBMQU5FX0NUTF9SRU5ERVJfREVDT01QUkVTU0lPTl9FTkFCTEU7Ci0J ZGVmYXVsdDoKLQkJTUlTU0lOR19DQVNFKGZiX21vZGlmaWVyKTsKLQl9Ci0KLQlyZXR1cm4gMDsK LX0KLQotc3RhdGljIHUzMiBza2xfcGxhbmVfY3RsX3JvdGF0ZSh1bnNpZ25lZCBpbnQgcm90YXRl KQotewotCXN3aXRjaCAocm90YXRlKSB7Ci0JY2FzZSBEUk1fTU9ERV9ST1RBVEVfMDoKLQkJYnJl YWs7Ci0JLyoKLQkgKiBEUk1fTU9ERV9ST1RBVEVfIGlzIGNvdW50ZXIgY2xvY2t3aXNlIHRvIHN0 YXkgY29tcGF0aWJsZSB3aXRoIFhyYW5kcgotCSAqIHdoaWxlIGk5MTUgSFcgcm90YXRpb24gaXMg Y2xvY2t3aXNlLCB0aGF0cyB3aHkgdGhpcyBzd2FwcGluZy4KLQkgKi8KLQljYXNlIERSTV9NT0RF X1JPVEFURV85MDoKLQkJcmV0dXJuIFBMQU5FX0NUTF9ST1RBVEVfMjcwOwotCWNhc2UgRFJNX01P REVfUk9UQVRFXzE4MDoKLQkJcmV0dXJuIFBMQU5FX0NUTF9ST1RBVEVfMTgwOwotCWNhc2UgRFJN X01PREVfUk9UQVRFXzI3MDoKLQkJcmV0dXJuIFBMQU5FX0NUTF9ST1RBVEVfOTA7Ci0JZGVmYXVs dDoKLQkJTUlTU0lOR19DQVNFKHJvdGF0ZSk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRp YyB1MzIgY25sX3BsYW5lX2N0bF9mbGlwKHVuc2lnbmVkIGludCByZWZsZWN0KQotewotCXN3aXRj aCAocmVmbGVjdCkgewotCWNhc2UgMDoKLQkJYnJlYWs7Ci0JY2FzZSBEUk1fTU9ERV9SRUZMRUNU X1g6Ci0JCXJldHVybiBQTEFORV9DVExfRkxJUF9IT1JJWk9OVEFMOwotCWNhc2UgRFJNX01PREVf UkVGTEVDVF9ZOgotCWRlZmF1bHQ6Ci0JCU1JU1NJTkdfQ0FTRShyZWZsZWN0KTsKLQl9Ci0KLQly ZXR1cm4gMDsKLX0KLQotdTMyIHNrbF9wbGFuZV9jdGxfY3J0Yyhjb25zdCBzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSB0b19pOTE1KGNydGNfc3RhdGUtPnVhcGkuY3J0Yy0+ZGV2KTsKLQl1MzIgcGxhbmVf Y3RsID0gMDsKLQotCWlmIChjcnRjX3N0YXRlLT51YXBpLmFzeW5jX2ZsaXApCi0JCXBsYW5lX2N0 bCB8PSBQTEFORV9DVExfQVNZTkNfRkxJUDsKLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49 IDEwIHx8IElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpKQotCQlyZXR1cm4gcGxhbmVfY3RsOwotCi0J aWYgKGNydGNfc3RhdGUtPmdhbW1hX2VuYWJsZSkKLQkJcGxhbmVfY3RsIHw9IFBMQU5FX0NUTF9Q SVBFX0dBTU1BX0VOQUJMRTsKLQotCWlmIChjcnRjX3N0YXRlLT5jc2NfZW5hYmxlKQotCQlwbGFu ZV9jdGwgfD0gUExBTkVfQ1RMX1BJUEVfQ1NDX0VOQUJMRTsKLQotCXJldHVybiBwbGFuZV9jdGw7 Ci19Ci0KLXUzMiBza2xfcGxhbmVfY3RsKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpj cnRjX3N0YXRlLAotCQkgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3Rh dGUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0KLQkJdG9faTkxNShw bGFuZV9zdGF0ZS0+dWFwaS5wbGFuZS0+ZGV2KTsKLQljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKLQl1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBw bGFuZV9zdGF0ZS0+aHcucm90YXRpb247Ci0JY29uc3Qgc3RydWN0IGRybV9pbnRlbF9zcHJpdGVf Y29sb3JrZXkgKmtleSA9ICZwbGFuZV9zdGF0ZS0+Y2tleTsKLQl1MzIgcGxhbmVfY3RsOwotCi0J cGxhbmVfY3RsID0gUExBTkVfQ1RMX0VOQUJMRTsKLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYp IDwgMTAgJiYgIUlTX0dFTUlOSUxBS0UoZGV2X3ByaXYpKSB7Ci0JCXBsYW5lX2N0bCB8PSBza2xf cGxhbmVfY3RsX2FscGhhKHBsYW5lX3N0YXRlKTsKLQkJcGxhbmVfY3RsIHw9IFBMQU5FX0NUTF9Q TEFORV9HQU1NQV9ESVNBQkxFOwotCi0JCWlmIChwbGFuZV9zdGF0ZS0+aHcuY29sb3JfZW5jb2Rp bmcgPT0gRFJNX0NPTE9SX1lDQkNSX0JUNzA5KQotCQkJcGxhbmVfY3RsIHw9IFBMQU5FX0NUTF9Z VVZfVE9fUkdCX0NTQ19GT1JNQVRfQlQ3MDk7Ci0KLQkJaWYgKHBsYW5lX3N0YXRlLT5ody5jb2xv cl9yYW5nZSA9PSBEUk1fQ09MT1JfWUNCQ1JfRlVMTF9SQU5HRSkKLQkJCXBsYW5lX2N0bCB8PSBQ TEFORV9DVExfWVVWX1JBTkdFX0NPUlJFQ1RJT05fRElTQUJMRTsKLQl9Ci0KLQlwbGFuZV9jdGwg fD0gc2tsX3BsYW5lX2N0bF9mb3JtYXQoZmItPmZvcm1hdC0+Zm9ybWF0KTsKLQlwbGFuZV9jdGwg fD0gc2tsX3BsYW5lX2N0bF90aWxpbmcoZmItPm1vZGlmaWVyKTsKLQlwbGFuZV9jdGwgfD0gc2ts X3BsYW5lX2N0bF9yb3RhdGUocm90YXRpb24gJiBEUk1fTU9ERV9ST1RBVEVfTUFTSyk7Ci0KLQlp ZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCkKLQkJcGxhbmVfY3RsIHw9IGNubF9wbGFuZV9j dGxfZmxpcChyb3RhdGlvbiAmCi0JCQkJCQlEUk1fTU9ERV9SRUZMRUNUX01BU0spOwotCi0JaWYg KGtleS0+ZmxhZ3MgJiBJOTE1X1NFVF9DT0xPUktFWV9ERVNUSU5BVElPTikKLQkJcGxhbmVfY3Rs IHw9IFBMQU5FX0NUTF9LRVlfRU5BQkxFX0RFU1RJTkFUSU9OOwotCWVsc2UgaWYgKGtleS0+Zmxh Z3MgJiBJOTE1X1NFVF9DT0xPUktFWV9TT1VSQ0UpCi0JCXBsYW5lX2N0bCB8PSBQTEFORV9DVExf S0VZX0VOQUJMRV9TT1VSQ0U7Ci0KLQlyZXR1cm4gcGxhbmVfY3RsOwotfQotCi11MzIgZ2xrX3Bs YW5lX2NvbG9yX2N0bF9jcnRjKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0 YXRlKQordm9pZCBza2xfc2NhbGVyX2Rpc2FibGUoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKm9sZF9jcnRjX3N0YXRlKQogewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IHRvX2k5MTUoY3J0Y19zdGF0ZS0+dWFwaS5jcnRjLT5kZXYpOwotCXUzMiBwbGFuZV9jb2xv cl9jdGwgPSAwOwotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTEpCi0JCXJldHVybiBw bGFuZV9jb2xvcl9jdGw7Ci0KLQlpZiAoY3J0Y19zdGF0ZS0+Z2FtbWFfZW5hYmxlKQotCQlwbGFu ZV9jb2xvcl9jdGwgfD0gUExBTkVfQ09MT1JfUElQRV9HQU1NQV9FTkFCTEU7Ci0KLQlpZiAoY3J0 Y19zdGF0ZS0+Y3NjX2VuYWJsZSkKLQkJcGxhbmVfY29sb3JfY3RsIHw9IFBMQU5FX0NPTE9SX1BJ UEVfQ1NDX0VOQUJMRTsKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMo b2xkX2NydGNfc3RhdGUtPnVhcGkuY3J0Yyk7CisJaW50IGk7CiAKLQlyZXR1cm4gcGxhbmVfY29s b3JfY3RsOworCWZvciAoaSA9IDA7IGkgPCBjcnRjLT5udW1fc2NhbGVyczsgaSsrKQorCQlza2xf ZGV0YWNoX3NjYWxlcihjcnRjLCBpKTsKIH0KIAotdTMyIGdsa19wbGFuZV9jb2xvcl9jdGwoY29u c3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCi0JCQljb25zdCBzdHJ1Y3Qg aW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQordW5zaWduZWQgaW50CitpbnRlbF9wbGFu ZV9mZW5jZV95X29mZnNldChjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0 YXRlKQogewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9Ci0JCXRvX2k5MTUo cGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRldik7Ci0JY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7Ci0Jc3RydWN0IGludGVsX3BsYW5lICpwbGFu ZSA9IHRvX2ludGVsX3BsYW5lKHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lKTsKLQl1MzIgcGxhbmVf Y29sb3JfY3RsID0gMDsKLQotCXBsYW5lX2NvbG9yX2N0bCB8PSBQTEFORV9DT0xPUl9QTEFORV9H QU1NQV9ESVNBQkxFOwotCXBsYW5lX2NvbG9yX2N0bCB8PSBnbGtfcGxhbmVfY29sb3JfY3RsX2Fs cGhhKHBsYW5lX3N0YXRlKTsKKwlpbnQgeCA9IDAsIHkgPSAwOwogCi0JaWYgKGZiLT5mb3JtYXQt PmlzX3l1diAmJiAhaWNsX2lzX2hkcl9wbGFuZShkZXZfcHJpdiwgcGxhbmUtPmlkKSkgewotCQlz d2l0Y2ggKHBsYW5lX3N0YXRlLT5ody5jb2xvcl9lbmNvZGluZykgewotCQljYXNlIERSTV9DT0xP Ul9ZQ0JDUl9CVDcwOToKLQkJCXBsYW5lX2NvbG9yX2N0bCB8PSBQTEFORV9DT0xPUl9DU0NfTU9E RV9ZVVY3MDlfVE9fUkdCNzA5OwotCQkJYnJlYWs7Ci0JCWNhc2UgRFJNX0NPTE9SX1lDQkNSX0JU MjAyMDoKLQkJCXBsYW5lX2NvbG9yX2N0bCB8PQotCQkJCVBMQU5FX0NPTE9SX0NTQ19NT0RFX1lV VjIwMjBfVE9fUkdCMjAyMDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcGxhbmVfY29sb3Jf Y3RsIHw9Ci0JCQkJUExBTkVfQ09MT1JfQ1NDX01PREVfWVVWNjAxX1RPX1JHQjYwMTsKLQkJfQot CQlpZiAocGxhbmVfc3RhdGUtPmh3LmNvbG9yX3JhbmdlID09IERSTV9DT0xPUl9ZQ0JDUl9GVUxM X1JBTkdFKQotCQkJcGxhbmVfY29sb3JfY3RsIHw9IFBMQU5FX0NPTE9SX1lVVl9SQU5HRV9DT1JS RUNUSU9OX0RJU0FCTEU7Ci0JfSBlbHNlIGlmIChmYi0+Zm9ybWF0LT5pc195dXYpIHsKLQkJcGxh bmVfY29sb3JfY3RsIHw9IFBMQU5FX0NPTE9SX0lOUFVUX0NTQ19FTkFCTEU7Ci0JfQorCWludGVs X3BsYW5lX2FkanVzdF9hbGlnbmVkX29mZnNldCgmeCwgJnksIHBsYW5lX3N0YXRlLCAwLAorCQkJ CQkgIHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS5vZmZzZXQsIDApOwogCi0JcmV0dXJuIHBs YW5lX2NvbG9yX2N0bDsKKwlyZXR1cm4geTsKIH0KIAogc3RhdGljIGludApAQCAtNDM2NiwxNSAr MzYzMyw2IEBAIHN0YXRpYyBpbnQgc2tsX3VwZGF0ZV9zY2FsZXJfcGxhbmUoc3RydWN0IGludGVs X2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgc2tsX3NjYWxl cl9kaXNhYmxlKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSkK LXsKLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMob2xkX2NydGNfc3Rh dGUtPnVhcGkuY3J0Yyk7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY3J0Yy0+bnVtX3Nj YWxlcnM7IGkrKykKLQkJc2tsX2RldGFjaF9zY2FsZXIoY3J0YywgaSk7Ci19Ci0KIHN0YXRpYyBp bnQgY25sX2NvZWZfdGFwKGludCBpKQogewogCXJldHVybiBpICUgNzsKQEAgLTgxODAsMTUwICs3 NDM4LDYgQEAgc3RhdGljIHZvaWQgc2tsX2dldF9wZml0X2NvbmZpZyhzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKIAkJc2NhbGVyX3N0YXRlLT5zY2FsZXJfdXNlcnMgJj0gfigx IDw8IFNLTF9DUlRDX0lOREVYKTsKIH0KIAotc3RhdGljIHZvaWQKLXNrbF9nZXRfaW5pdGlhbF9w bGFuZV9jb25maWcoc3RydWN0IGludGVsX2NydGMgKmNydGMsCi0JCQkgICAgIHN0cnVjdCBpbnRl bF9pbml0aWFsX3BsYW5lX2NvbmZpZyAqcGxhbmVfY29uZmlnKQotewotCXN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpjcnRjX3N0YXRlID0gdG9faW50ZWxfY3J0Y19zdGF0ZShjcnRjLT5iYXNlLnN0 YXRlKTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+YmFzZS5kZXY7Ci0Jc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwotCXN0cnVjdCBpbnRl bF9wbGFuZSAqcGxhbmUgPSB0b19pbnRlbF9wbGFuZShjcnRjLT5iYXNlLnByaW1hcnkpOwotCWVu dW0gcGxhbmVfaWQgcGxhbmVfaWQgPSBwbGFuZS0+aWQ7Ci0JZW51bSBwaXBlIHBpcGU7Ci0JdTMy IHZhbCwgYmFzZSwgb2Zmc2V0LCBzdHJpZGVfbXVsdCwgdGlsaW5nLCBhbHBoYTsKLQlpbnQgZm91 cmNjLCBwaXhlbF9mb3JtYXQ7Ci0JdW5zaWduZWQgaW50IGFsaWduZWRfaGVpZ2h0OwotCXN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKmZiOwotCXN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqaW50ZWxf ZmI7Ci0KLQlpZiAoIXBsYW5lLT5nZXRfaHdfc3RhdGUocGxhbmUsICZwaXBlKSkKLQkJcmV0dXJu OwotCi0JZHJtX1dBUk5fT04oZGV2LCBwaXBlICE9IGNydGMtPnBpcGUpOwotCi0JaWYgKGNydGNf c3RhdGUtPmJpZ2pvaW5lcikgewotCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKLQkJCSAg ICAiVW5zdXBwb3J0ZWQgYmlnam9pbmVyIGNvbmZpZ3VyYXRpb24gZm9yIGluaXRpYWwgRkJcbiIp OwotCQlyZXR1cm47Ci0JfQotCi0JaW50ZWxfZmIgPSBremFsbG9jKHNpemVvZigqaW50ZWxfZmIp LCBHRlBfS0VSTkVMKTsKLQlpZiAoIWludGVsX2ZiKSB7Ci0JCWRybV9kYmdfa21zKCZkZXZfcHJp di0+ZHJtLCAiZmFpbGVkIHRvIGFsbG9jIGZiXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWZiID0g JmludGVsX2ZiLT5iYXNlOwotCi0JZmItPmRldiA9IGRldjsKLQotCXZhbCA9IGludGVsX2RlX3Jl YWQoZGV2X3ByaXYsIFBMQU5FX0NUTChwaXBlLCBwbGFuZV9pZCkpOwotCi0JaWYgKElOVEVMX0dF TihkZXZfcHJpdikgPj0gMTEpCi0JCXBpeGVsX2Zvcm1hdCA9IHZhbCAmIElDTF9QTEFORV9DVExf Rk9STUFUX01BU0s7Ci0JZWxzZQotCQlwaXhlbF9mb3JtYXQgPSB2YWwgJiBQTEFORV9DVExfRk9S TUFUX01BU0s7Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCB8fCBJU19HRU1JTklM QUtFKGRldl9wcml2KSkgewotCQlhbHBoYSA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsCi0JCQkJ ICAgICAgUExBTkVfQ09MT1JfQ1RMKHBpcGUsIHBsYW5lX2lkKSk7Ci0JCWFscGhhICY9IFBMQU5F X0NPTE9SX0FMUEhBX01BU0s7Ci0JfSBlbHNlIHsKLQkJYWxwaGEgPSB2YWwgJiBQTEFORV9DVExf QUxQSEFfTUFTSzsKLQl9Ci0KLQlmb3VyY2MgPSBza2xfZm9ybWF0X3RvX2ZvdXJjYyhwaXhlbF9m b3JtYXQsCi0JCQkJICAgICAgdmFsICYgUExBTkVfQ1RMX09SREVSX1JHQlgsIGFscGhhKTsKLQlm Yi0+Zm9ybWF0ID0gZHJtX2Zvcm1hdF9pbmZvKGZvdXJjYyk7Ci0KLQl0aWxpbmcgPSB2YWwgJiBQ TEFORV9DVExfVElMRURfTUFTSzsKLQlzd2l0Y2ggKHRpbGluZykgewotCWNhc2UgUExBTkVfQ1RM X1RJTEVEX0xJTkVBUjoKLQkJZmItPm1vZGlmaWVyID0gRFJNX0ZPUk1BVF9NT0RfTElORUFSOwot CQlicmVhazsKLQljYXNlIFBMQU5FX0NUTF9USUxFRF9YOgotCQlwbGFuZV9jb25maWctPnRpbGlu ZyA9IEk5MTVfVElMSU5HX1g7Ci0JCWZiLT5tb2RpZmllciA9IEk5MTVfRk9STUFUX01PRF9YX1RJ TEVEOwotCQlicmVhazsKLQljYXNlIFBMQU5FX0NUTF9USUxFRF9ZOgotCQlwbGFuZV9jb25maWct PnRpbGluZyA9IEk5MTVfVElMSU5HX1k7Ci0JCWlmICh2YWwgJiBQTEFORV9DVExfUkVOREVSX0RF Q09NUFJFU1NJT05fRU5BQkxFKQotCQkJZmItPm1vZGlmaWVyID0gSU5URUxfR0VOKGRldl9wcml2 KSA+PSAxMiA/Ci0JCQkJSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfUkNfQ0NTIDoKLQkJ CQlJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1M7Ci0JCWVsc2UgaWYgKHZhbCAmIFBMQU5FX0NU TF9NRURJQV9ERUNPTVBSRVNTSU9OX0VOQUJMRSkKLQkJCWZiLT5tb2RpZmllciA9IEk5MTVfRk9S TUFUX01PRF9ZX1RJTEVEX0dFTjEyX01DX0NDUzsKLQkJZWxzZQotCQkJZmItPm1vZGlmaWVyID0g STkxNV9GT1JNQVRfTU9EX1lfVElMRUQ7Ci0JCWJyZWFrOwotCWNhc2UgUExBTkVfQ1RMX1RJTEVE X1lGOgotCQlpZiAodmFsICYgUExBTkVfQ1RMX1JFTkRFUl9ERUNPTVBSRVNTSU9OX0VOQUJMRSkK LQkJCWZiLT5tb2RpZmllciA9IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1M7Ci0JCWVsc2UK LQkJCWZiLT5tb2RpZmllciA9IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRDsKLQkJYnJlYWs7Ci0J ZGVmYXVsdDoKLQkJTUlTU0lOR19DQVNFKHRpbGluZyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0J LyoKLQkgKiBEUk1fTU9ERV9ST1RBVEVfIGlzIGNvdW50ZXIgY2xvY2t3aXNlIHRvIHN0YXkgY29t cGF0aWJsZSB3aXRoIFhyYW5kcgotCSAqIHdoaWxlIGk5MTUgSFcgcm90YXRpb24gaXMgY2xvY2t3 aXNlLCB0aGF0cyB3aHkgdGhpcyBzd2FwcGluZy4KLQkgKi8KLQlzd2l0Y2ggKHZhbCAmIFBMQU5F X0NUTF9ST1RBVEVfTUFTSykgewotCWNhc2UgUExBTkVfQ1RMX1JPVEFURV8wOgotCQlwbGFuZV9j b25maWctPnJvdGF0aW9uID0gRFJNX01PREVfUk9UQVRFXzA7Ci0JCWJyZWFrOwotCWNhc2UgUExB TkVfQ1RMX1JPVEFURV85MDoKLQkJcGxhbmVfY29uZmlnLT5yb3RhdGlvbiA9IERSTV9NT0RFX1JP VEFURV8yNzA7Ci0JCWJyZWFrOwotCWNhc2UgUExBTkVfQ1RMX1JPVEFURV8xODA6Ci0JCXBsYW5l X2NvbmZpZy0+cm90YXRpb24gPSBEUk1fTU9ERV9ST1RBVEVfMTgwOwotCQlicmVhazsKLQljYXNl IFBMQU5FX0NUTF9ST1RBVEVfMjcwOgotCQlwbGFuZV9jb25maWctPnJvdGF0aW9uID0gRFJNX01P REVfUk9UQVRFXzkwOwotCQlicmVhazsKLQl9Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+ PSAxMCAmJgotCSAgICB2YWwgJiBQTEFORV9DVExfRkxJUF9IT1JJWk9OVEFMKQotCQlwbGFuZV9j b25maWctPnJvdGF0aW9uIHw9IERSTV9NT0RFX1JFRkxFQ1RfWDsKLQotCS8qIDkwLzI3MCBkZWdy ZWUgcm90YXRpb24gd291bGQgcmVxdWlyZSBleHRyYSB3b3JrICovCi0JaWYgKGRybV9yb3RhdGlv bl85MF9vcl8yNzAocGxhbmVfY29uZmlnLT5yb3RhdGlvbikpCi0JCWdvdG8gZXJyb3I7Ci0KLQli YXNlID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgUExBTkVfU1VSRihwaXBlLCBwbGFuZV9pZCkp ICYgMHhmZmZmZjAwMDsKLQlwbGFuZV9jb25maWctPmJhc2UgPSBiYXNlOwotCi0Jb2Zmc2V0ID0g aW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgUExBTkVfT0ZGU0VUKHBpcGUsIHBsYW5lX2lkKSk7Ci0K LQl2YWwgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBQTEFORV9TSVpFKHBpcGUsIHBsYW5lX2lk KSk7Ci0JZmItPmhlaWdodCA9ICgodmFsID4+IDE2KSAmIDB4ZmZmZikgKyAxOwotCWZiLT53aWR0 aCA9ICgodmFsID4+IDApICYgMHhmZmZmKSArIDE7Ci0KLQl2YWwgPSBpbnRlbF9kZV9yZWFkKGRl dl9wcml2LCBQTEFORV9TVFJJREUocGlwZSwgcGxhbmVfaWQpKTsKLQlzdHJpZGVfbXVsdCA9IHNr bF9wbGFuZV9zdHJpZGVfbXVsdChmYiwgMCwgRFJNX01PREVfUk9UQVRFXzApOwotCWZiLT5waXRj aGVzWzBdID0gKHZhbCAmIDB4M2ZmKSAqIHN0cmlkZV9tdWx0OwotCi0JYWxpZ25lZF9oZWlnaHQg PSBpbnRlbF9mYl9hbGlnbl9oZWlnaHQoZmIsIDAsIGZiLT5oZWlnaHQpOwotCi0JcGxhbmVfY29u ZmlnLT5zaXplID0gZmItPnBpdGNoZXNbMF0gKiBhbGlnbmVkX2hlaWdodDsKLQotCWRybV9kYmdf a21zKCZkZXZfcHJpdi0+ZHJtLAotCQkgICAgIiVzLyVzIHdpdGggZmI6IHNpemU9JWR4JWRAJWQs IG9mZnNldD0leCwgcGl0Y2ggJWQsIHNpemUgMHgleFxuIiwKLQkJICAgIGNydGMtPmJhc2UubmFt ZSwgcGxhbmUtPmJhc2UubmFtZSwgZmItPndpZHRoLCBmYi0+aGVpZ2h0LAotCQkgICAgZmItPmZv cm1hdC0+Y3BwWzBdICogOCwgYmFzZSwgZmItPnBpdGNoZXNbMF0sCi0JCSAgICBwbGFuZV9jb25m aWctPnNpemUpOwotCi0JcGxhbmVfY29uZmlnLT5mYiA9IGludGVsX2ZiOwotCXJldHVybjsKLQot ZXJyb3I6Ci0Ja2ZyZWUoaW50ZWxfZmIpOwotfQotCiBzdGF0aWMgdm9pZCBpbGtfZ2V0X3BmaXRf Y29uZmlnKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQogewogCXN0cnVjdCBp bnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjX3N0YXRlLT51YXBpLmNydGMpOwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5Lmgg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuaAppbmRleCAyZTIw N2EyZjdhNjYuLmZlMDllODEyNTViYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS9pbnRlbF9kaXNwbGF5LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxh eS9pbnRlbF9kaXNwbGF5LmgKQEAgLTUyLDYgKzUyLDcgQEAgc3RydWN0IGludGVsX2NydGNfc3Rh dGU7CiBzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0Owogc3RydWN0IGludGVsX2RwOwogc3RydWN0 IGludGVsX2VuY29kZXI7CitzdHJ1Y3QgaW50ZWxfaW5pdGlhbF9wbGFuZV9jb25maWc7CiBzdHJ1 Y3QgaW50ZWxfbG9hZF9kZXRlY3RfcGlwZTsKIHN0cnVjdCBpbnRlbF9wbGFuZTsKIHN0cnVjdCBp bnRlbF9wbGFuZV9zdGF0ZTsKQEAgLTUwOCw3ICs1MDksNiBAQCB2b2lkIGludGVsX2xpbmtfY29t cHV0ZV9tX24odTE2IGJwcCwgaW50IG5sYW5lcywKIAkJCSAgICBzdHJ1Y3QgaW50ZWxfbGlua19t X24gKm1fbiwKIAkJCSAgICBib29sIGNvbnN0YW50X24sIGJvb2wgZmVjX2VuYWJsZSk7CiBib29s IGlzX2Njc19tb2RpZmllcih1NjQgbW9kaWZpZXIpOwotaW50IGludGVsX21haW5fdG9fYXV4X3Bs YW5lKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgbWFpbl9wbGFuZSk7CiB2 b2lkIGxwdF9kaXNhYmxlX2Nsa291dF9kcChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpOwogdTMyIGludGVsX3BsYW5lX2ZiX21heF9zdHJpZGUoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LAogCQkJICAgICAgdTMyIHBpeGVsX2Zvcm1hdCwgdTY0IG1vZGlmaWVyKTsK QEAgLTYyMSwxNiArNjIxLDYgQEAgdTMyIHNrbF9zY2FsZXJfZ2V0X2ZpbHRlcl9zZWxlY3QoZW51 bSBkcm1fc2NhbGluZ19maWx0ZXIgZmlsdGVyLCBpbnQgc2V0KTsKIHZvaWQgc2tsX3NjYWxlcl9z ZXR1cF9maWx0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBlbnVtIHBpcGUg cGlwZSwKIAkJCSAgICAgaW50IGlkLCBpbnQgc2V0LCBlbnVtIGRybV9zY2FsaW5nX2ZpbHRlciBm aWx0ZXIpOwogdm9pZCBpbGtfcGZpdF9kaXNhYmxlKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpvbGRfY3J0Y19zdGF0ZSk7Ci11MzIgZ2xrX3BsYW5lX2NvbG9yX2N0bChjb25zdCBzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKLQkJCWNvbnN0IHN0cnVjdCBpbnRlbF9w bGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpOwotdTMyIGdsa19wbGFuZV9jb2xvcl9jdGxfY3J0Yyhj b25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSk7Ci11MzIgc2tsX3BsYW5l X2N0bChjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKLQkJICBjb25z dCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKTsKLXUzMiBza2xfcGxhbmVf Y3RsX2NydGMoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpOwotdTMy IHNrbF9wbGFuZV9zdHJpZGUoY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9z dGF0ZSwKLQkJICAgICBpbnQgcGxhbmUpOwotaW50IHNrbF9jaGVja19wbGFuZV9zdXJmYWNlKHN0 cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpOwotaW50IHNrbF9mb3JtYXRfdG9f Zm91cmNjKGludCBmb3JtYXQsIGJvb2wgcmdiX29yZGVyLCBib29sIGFscGhhKTsKIGludCBiZHdf Z2V0X3BpcGVtaXNjX2JwcChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0Yyk7CiB1bnNpZ25lZCBpbnQg aW50ZWxfcGxhbmVfZmVuY2VfeV9vZmZzZXQoY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRl ICpwbGFuZV9zdGF0ZSk7CiAKQEAgLTY1Myw2ICs2NDMsMTggQEAgc3RydWN0IGludGVsX2VuY29k ZXIgKgogaW50ZWxfZ2V0X2NydGNfbmV3X2VuY29kZXIoY29uc3Qgc3RydWN0IGludGVsX2F0b21p Y19zdGF0ZSAqc3RhdGUsCiAJCQkgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZSk7CiAKK3Vuc2lnbmVkIGludCBpbnRlbF9zdXJmX2FsaWdubWVudChjb25zdCBzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwkJCQkgIGludCBjb2xvcl9wbGFuZSk7Cit2b2lkIGlu dGVsX2ZiX3BsYW5lX2dldF9zdWJzYW1wbGluZyhpbnQgKmhzdWIsIGludCAqdnN1YiwKKwkJCQkg ICAgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJCQkJICAgIGludCBjb2xvcl9w bGFuZSk7Cit1MzIgaW50ZWxfcGxhbmVfYWRqdXN0X2FsaWduZWRfb2Zmc2V0KGludCAqeCwgaW50 ICp5LAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqc3RhdGUsCisJ CQkJICAgICAgaW50IGNvbG9yX3BsYW5lLAorCQkJCSAgICAgIHUzMiBvbGRfb2Zmc2V0LCB1MzIg bmV3X29mZnNldCk7Cit1bnNpZ25lZCBpbnQgaW50ZWxfdGlsZV93aWR0aF9ieXRlcyhjb25zdCBz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IGNvbG9yX3BsYW5lKTsKK3Vuc2lnbmVkIGlu dCBpbnRlbF90aWxlX2hlaWdodChjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50 IGNvbG9yX3BsYW5lKTsKKwogLyogbW9kZXNldHRpbmcgKi8KIHZvaWQgaW50ZWxfbW9kZXNldF9p bml0X2h3KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsKIGludCBpbnRlbF9tb2Rlc2V0 X2luaXRfbm9pcnEoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOwpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3R5cGVzLmggYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfdHlwZXMuaAppbmRleCA0NGEy ODM2M2YzMjkuLjI2MmMzNzJjZWM3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS9pbnRlbF9kaXNwbGF5X3R5cGVzLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS9pbnRlbF9kaXNwbGF5X3R5cGVzLmgKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRl IDxkcm0vZHJtX2RwX21zdF9oZWxwZXIuaD4KICNpbmNsdWRlIDxkcm0vZHJtX2VuY29kZXIuaD4K ICNpbmNsdWRlIDxkcm0vZHJtX2ZiX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZm91cmNj Lmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9wcm9iZV9oZWxwZXIuaD4KICNpbmNsdWRlIDxkcm0vZHJt X3JlY3QuaD4KICNpbmNsdWRlIDxkcm0vZHJtX3ZibGFuay5oPgpAQCAtMTgzMyw0ICsxODM0LDI0 IEBAIHN0YXRpYyBpbmxpbmUgdTMyIGludGVsX2ZkaV9saW5rX2ZyZXEoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LAogCQlyZXR1cm4gZGV2X3ByaXYtPmZkaV9wbGxfZnJlcTsKIH0K IAorc3RhdGljIGlubGluZSBib29sIGlzX2Njc19wbGFuZShjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1l YnVmZmVyICpmYiwgaW50IHBsYW5lKQoreworCWlmICghaXNfY2NzX21vZGlmaWVyKGZiLT5tb2Rp ZmllcikpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiBwbGFuZSA+PSBmYi0+Zm9ybWF0LT5u dW1fcGxhbmVzIC8gMjsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzX2dlbjEyX2Njc19tb2Rp Zmllcih1NjQgbW9kaWZpZXIpCit7CisJcmV0dXJuIG1vZGlmaWVyID09IEk5MTVfRk9STUFUX01P RF9ZX1RJTEVEX0dFTjEyX1JDX0NDUyB8fAorCSAgICAgICBtb2RpZmllciA9PSBJOTE1X0ZPUk1B VF9NT0RfWV9USUxFRF9HRU4xMl9NQ19DQ1M7CisKK30KKworc3RhdGljIGlubGluZSBib29sIGlz X2dlbjEyX2Njc19wbGFuZShjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IHBs YW5lKQoreworCXJldHVybiBpc19nZW4xMl9jY3NfbW9kaWZpZXIoZmItPm1vZGlmaWVyKSAmJiBp c19jY3NfcGxhbmUoZmIsIHBsYW5lKTsKK30KKwogI2VuZGlmIC8qICBfX0lOVEVMX0RJU1BMQVlf VFlQRVNfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2lu dGVsX2RwX21zdC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcF9tc3Qu YwppbmRleCAwYzg2ODQ2MzRmY2EuLjYyM2JkZGMwYzQ1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcF9tc3QuYworKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9kaXNwbGF5L2ludGVsX2RwX21zdC5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAi aW50ZWxfZHBfbXN0LmgiCiAjaW5jbHVkZSAiaW50ZWxfZHBpb19waHkuaCIKICNpbmNsdWRlICJp bnRlbF9oZGNwLmgiCisjaW5jbHVkZSAic2tsX3VuaXZlcnNhbF9wbGFuZS5oIgogCiBzdGF0aWMg aW50IGludGVsX2RwX21zdF9jb21wdXRlX2xpbmtfY29uZmlnKHN0cnVjdCBpbnRlbF9lbmNvZGVy ICplbmNvZGVyLAogCQkJCQkgICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUs CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Nwcml0ZS5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9zcHJpdGUuYwppbmRleCBjZjM1 ODlmZDBkZGIuLjgzZTczMzFmNzlkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS9pbnRlbF9zcHJpdGUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5 L2ludGVsX3Nwcml0ZS5jCkBAIC0zNjUsMjEyICszNjUsNyBAQCBpbnQgaW50ZWxfcGxhbmVfY2hl Y2tfc3JjX2Nvb3JkaW5hdGVzKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUp CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1OCBpY2xfbnYxMl95X3BsYW5lX21hc2soc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCi17Ci0JaWYgKElTX1JPQ0tFVExBS0UoaTkxNSkpCi0J CXJldHVybiBCSVQoUExBTkVfU1BSSVRFMikgfCBCSVQoUExBTkVfU1BSSVRFMyk7Ci0JZWxzZQot CQlyZXR1cm4gQklUKFBMQU5FX1NQUklURTQpIHwgQklUKFBMQU5FX1NQUklURTUpOwotfQotCi1i b29sIGljbF9pc19udjEyX3lfcGxhbmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 LAotCQkJIGVudW0gcGxhbmVfaWQgcGxhbmVfaWQpCi17Ci0JcmV0dXJuIElOVEVMX0dFTihkZXZf cHJpdikgPj0gMTEgJiYKLQkJaWNsX252MTJfeV9wbGFuZV9tYXNrKGRldl9wcml2KSAmIEJJVChw bGFuZV9pZCk7Ci19Ci0KLWJvb2wgaWNsX2lzX2hkcl9wbGFuZShzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsIGVudW0gcGxhbmVfaWQgcGxhbmVfaWQpCi17Ci0JcmV0dXJuIElOVEVM X0dFTihkZXZfcHJpdikgPj0gMTEgJiYKLQkJaWNsX2hkcl9wbGFuZV9tYXNrKCkgJiBCSVQocGxh bmVfaWQpOwotfQotCi1zdGF0aWMgdm9pZAotc2tsX3BsYW5lX3JhdGlvKGNvbnN0IHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAotCQljb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVf c3RhdGUgKnBsYW5lX3N0YXRlLAotCQl1bnNpZ25lZCBpbnQgKm51bSwgdW5zaWduZWQgaW50ICpk ZW4pCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFu ZV9zdGF0ZS0+dWFwaS5wbGFuZS0+ZGV2KTsKLQljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKLQotCWlmIChmYi0+Zm9ybWF0LT5jcHBbMF0gPT0g OCkgewotCQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCB8fCBJU19HRU1JTklMQUtFKGRl dl9wcml2KSkgewotCQkJKm51bSA9IDEwOwotCQkJKmRlbiA9IDg7Ci0JCX0gZWxzZSB7Ci0JCQkq bnVtID0gOTsKLQkJCSpkZW4gPSA4OwotCQl9Ci0JfSBlbHNlIHsKLQkJKm51bSA9IDE7Ci0JCSpk ZW4gPSAxOwotCX0KLX0KLQotc3RhdGljIGludCBza2xfcGxhbmVfbWluX2NkY2xrKGNvbnN0IHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAotCQkJICAgICAgIGNvbnN0IHN0cnVj dCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZS0+ZGV2KTsK LQl1bnNpZ25lZCBpbnQgbnVtLCBkZW47Ci0JdW5zaWduZWQgaW50IHBpeGVsX3JhdGUgPSBpbnRl bF9wbGFuZV9waXhlbF9yYXRlKGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlKTsKLQotCXNrbF9wbGFu ZV9yYXRpbyhjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSwgJm51bSwgJmRlbik7Ci0KLQkvKiB0d28g cGl4ZWxzIHBlciBjbG9jayBvbiBnbGsrICovCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0g MTAgfHwgSVNfR0VNSU5JTEFLRShkZXZfcHJpdikpCi0JCWRlbiAqPSAyOwotCi0JcmV0dXJuIERJ Vl9ST1VORF9VUChwaXhlbF9yYXRlICogbnVtLCBkZW4pOwotfQotCi1zdGF0aWMgaW50IHNrbF9w bGFuZV9tYXhfd2lkdGgoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCi0JCQkgICAg ICAgaW50IGNvbG9yX3BsYW5lLAotCQkJICAgICAgIHVuc2lnbmVkIGludCByb3RhdGlvbikKLXsK LQlpbnQgY3BwID0gZmItPmZvcm1hdC0+Y3BwW2NvbG9yX3BsYW5lXTsKLQotCXN3aXRjaCAoZmIt Pm1vZGlmaWVyKSB7Ci0JY2FzZSBEUk1fRk9STUFUX01PRF9MSU5FQVI6Ci0JY2FzZSBJOTE1X0ZP Uk1BVF9NT0RfWF9USUxFRDoKLQkJLyoKLQkJICogVmFsaWRhdGVkIGxpbWl0IGlzIDRrLCBidXQg aGFzIDVrIHNob3VsZAotCQkgKiB3b3JrIGFwYXJ0IGZyb20gdGhlIGZvbGxvd2luZyBmZWF0dXJl czoKLQkJICogLSBZdGlsZSAoYWxyZWFkeSBsaW1pdGVkIHRvIDRrKQotCQkgKiAtIEZQMTYgKGFs cmVhZHkgbGltaXRlZCB0byA0aykKLQkJICogLSByZW5kZXIgY29tcHJlc3Npb24gKGFscmVhZHkg bGltaXRlZCB0byA0aykKLQkJICogLSBLVk1SIHNwcml0ZSBhbmQgY3Vyc29yIChkb24ndCBjYXJl KQotCQkgKiAtIGhvcml6b250YWwgcGFubmluZyAoVE9ETyB2ZXJpZnkgdGhpcykKLQkJICogLSBw aXBlIGFuZCBwbGFuZSBzY2FsaW5nIChUT0RPIHZlcmlmeSB0aGlzKQotCQkgKi8KLQkJaWYgKGNw cCA9PSA4KQotCQkJcmV0dXJuIDQwOTY7Ci0JCWVsc2UKLQkJCXJldHVybiA1MTIwOwotCWNhc2Ug STkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NTOgotCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJ TEVEX0NDUzoKLQljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX01DX0NDUzoKLQkJ LyogRklYTUUgQVVYIHBsYW5lPyAqLwotCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQ6Ci0J Y2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQ6Ci0JCWlmIChjcHAgPT0gOCkKLQkJCXJldHVy biAyMDQ4OwotCQllbHNlCi0JCQlyZXR1cm4gNDA5NjsKLQlkZWZhdWx0OgotCQlNSVNTSU5HX0NB U0UoZmItPm1vZGlmaWVyKTsKLQkJcmV0dXJuIDIwNDg7Ci0JfQotfQotCi1zdGF0aWMgaW50IGds a19wbGFuZV9tYXhfd2lkdGgoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCi0JCQkg ICAgICAgaW50IGNvbG9yX3BsYW5lLAotCQkJICAgICAgIHVuc2lnbmVkIGludCByb3RhdGlvbikK LXsKLQlpbnQgY3BwID0gZmItPmZvcm1hdC0+Y3BwW2NvbG9yX3BsYW5lXTsKLQotCXN3aXRjaCAo ZmItPm1vZGlmaWVyKSB7Ci0JY2FzZSBEUk1fRk9STUFUX01PRF9MSU5FQVI6Ci0JY2FzZSBJOTE1 X0ZPUk1BVF9NT0RfWF9USUxFRDoKLQkJaWYgKGNwcCA9PSA4KQotCQkJcmV0dXJuIDQwOTY7Ci0J CWVsc2UKLQkJCXJldHVybiA1MTIwOwotCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NT OgotCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUzoKLQkJLyogRklYTUUgQVVYIHBs YW5lPyAqLwotCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQ6Ci0JY2FzZSBJOTE1X0ZPUk1B VF9NT0RfWWZfVElMRUQ6Ci0JCWlmIChjcHAgPT0gOCkKLQkJCXJldHVybiAyMDQ4OwotCQllbHNl Ci0JCQlyZXR1cm4gNTEyMDsKLQlkZWZhdWx0OgotCQlNSVNTSU5HX0NBU0UoZmItPm1vZGlmaWVy KTsKLQkJcmV0dXJuIDIwNDg7Ci0JfQotfQotCi1zdGF0aWMgaW50IGljbF9wbGFuZV9taW5fd2lk dGgoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCi0JCQkgICAgICAgaW50IGNvbG9y X3BsYW5lLAotCQkJICAgICAgIHVuc2lnbmVkIGludCByb3RhdGlvbikKLXsKLQkvKiBXYV8xNDAx MTI2NDY1NywgV2FfMTQwMTEwNTA1NjM6IGdlbjExKyAqLwotCXN3aXRjaCAoZmItPmZvcm1hdC0+ Zm9ybWF0KSB7Ci0JY2FzZSBEUk1fRk9STUFUX0M4OgotCQlyZXR1cm4gMTg7Ci0JY2FzZSBEUk1f Rk9STUFUX1JHQjU2NToKLQkJcmV0dXJuIDEwOwotCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoK LQljYXNlIERSTV9GT1JNQVRfWEJHUjg4ODg6Ci0JY2FzZSBEUk1fRk9STUFUX0FSR0I4ODg4Ogot CWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoKLQljYXNlIERSTV9GT1JNQVRfWFJHQjIxMDEwMTA6 Ci0JY2FzZSBEUk1fRk9STUFUX1hCR1IyMTAxMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMjEw MTAxMDoKLQljYXNlIERSTV9GT1JNQVRfQUJHUjIxMDEwMTA6Ci0JY2FzZSBEUk1fRk9STUFUX1hW WVUyMTAxMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9ZMjEyOgotCWNhc2UgRFJNX0ZPUk1BVF9ZMjE2 OgotCQlyZXR1cm4gNjsKLQljYXNlIERSTV9GT1JNQVRfTlYxMjoKLQkJcmV0dXJuIDIwOwotCWNh c2UgRFJNX0ZPUk1BVF9QMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9QMDEyOgotCWNhc2UgRFJNX0ZP Uk1BVF9QMDE2OgotCQlyZXR1cm4gMTI7Ci0JY2FzZSBEUk1fRk9STUFUX1hSR0IxNjE2MTYxNkY6 Ci0JY2FzZSBEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkY6Ci0JY2FzZSBEUk1fRk9STUFUX0FSR0Ix NjE2MTYxNkY6Ci0JY2FzZSBEUk1fRk9STUFUX0FCR1IxNjE2MTYxNkY6Ci0JY2FzZSBEUk1fRk9S TUFUX1hWWVUxMl8xNjE2MTYxNjoKLQljYXNlIERSTV9GT1JNQVRfWFZZVTE2MTYxNjE2OgotCQly ZXR1cm4gNDsKLQlkZWZhdWx0OgotCQlyZXR1cm4gMTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgaWNs X3BsYW5lX21heF93aWR0aChjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKLQkJCSAg ICAgICBpbnQgY29sb3JfcGxhbmUsCi0JCQkgICAgICAgdW5zaWduZWQgaW50IHJvdGF0aW9uKQot ewotCXJldHVybiA1MTIwOwotfQotCi1zdGF0aWMgaW50IHNrbF9wbGFuZV9tYXhfaGVpZ2h0KGNv bnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAotCQkJCWludCBjb2xvcl9wbGFuZSwKLQkJ CQl1bnNpZ25lZCBpbnQgcm90YXRpb24pCi17Ci0JcmV0dXJuIDQwOTY7Ci19Ci0KLXN0YXRpYyBp bnQgaWNsX3BsYW5lX21heF9oZWlnaHQoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIs Ci0JCQkJaW50IGNvbG9yX3BsYW5lLAotCQkJCXVuc2lnbmVkIGludCByb3RhdGlvbikKLXsKLQly ZXR1cm4gNDMyMDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludAotc2tsX3BsYW5lX21heF9zdHJp ZGUoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKLQkJICAgICB1MzIgcGl4ZWxfZm9ybWF0LCB1 NjQgbW9kaWZpZXIsCi0JCSAgICAgdW5zaWduZWQgaW50IHJvdGF0aW9uKQotewotCWNvbnN0IHN0 cnVjdCBkcm1fZm9ybWF0X2luZm8gKmluZm8gPSBkcm1fZm9ybWF0X2luZm8ocGl4ZWxfZm9ybWF0 KTsKLQlpbnQgY3BwID0gaW5mby0+Y3BwWzBdOwotCi0JLyoKLQkgKiAiVGhlIHN0cmlkZSBpbiBi eXRlcyBtdXN0IG5vdCBleGNlZWQgdGhlCi0JICogb2YgdGhlIHNpemUgb2YgOEsgcGl4ZWxzIGFu ZCAzMksgYnl0ZXMuIgotCSAqLwotCWlmIChkcm1fcm90YXRpb25fOTBfb3JfMjcwKHJvdGF0aW9u KSkKLQkJcmV0dXJuIG1pbig4MTkyLCAzMjc2OCAvIGNwcCk7Ci0JZWxzZQotCQlyZXR1cm4gbWlu KDgxOTIgKiBjcHAsIDMyNzY4KTsKLX0KLQotc3RhdGljIHZvaWQKK3ZvaWQKIHNrbF9wcm9ncmFt X3NjYWxlcihzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAogCQkgICBjb25zdCBzdHJ1Y3QgaW50 ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKIAkJICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5l X3N0YXRlICpwbGFuZV9zdGF0ZSkKQEAgLTYzMiwzMzIgKzQyNyw2IEBAIHNrbF9wcm9ncmFtX3Nj YWxlcihzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAogCQkJICAoY3J0Y193IDw8IDE2KSB8IGNy dGNfaCk7CiB9CiAKLS8qIFByZW9mZnNldCB2YWx1ZXMgZm9yIFlVViB0byBSR0IgQ29udmVyc2lv biAqLwotI2RlZmluZSBQUkVPRkZfWVVWX1RPX1JHQl9ISQkJMHgxODAwCi0jZGVmaW5lIFBSRU9G Rl9ZVVZfVE9fUkdCX01FCQkweDFGMDAKLSNkZWZpbmUgUFJFT0ZGX1lVVl9UT19SR0JfTE8JCTB4 MTgwMAotCi0jZGVmaW5lICBST0ZGKHgpICAgICAgICAgICgoKHgpICYgMHhmZmZmKSA8PCAxNikK LSNkZWZpbmUgIEdPRkYoeCkgICAgICAgICAgKCgoeCkgJiAweGZmZmYpIDw8IDApCi0jZGVmaW5l ICBCT0ZGKHgpICAgICAgICAgICgoKHgpICYgMHhmZmZmKSA8PCAxNikKLQotc3RhdGljIHZvaWQK LWljbF9wcm9ncmFtX2lucHV0X2NzYyhzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAotCQkgICAg ICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKLQkJICAgICAgY29u c3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKLXsKLQlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7Ci0JZW51 bSBwaXBlIHBpcGUgPSBwbGFuZS0+cGlwZTsKLQllbnVtIHBsYW5lX2lkIHBsYW5lX2lkID0gcGxh bmUtPmlkOwotCi0Jc3RhdGljIGNvbnN0IHUxNiBpbnB1dF9jc2NfbWF0cml4W11bOV0gPSB7Ci0J CS8qCi0JCSAqIEJULjYwMSBmdWxsIHJhbmdlIFlDYkNyIC0+IGZ1bGwgcmFuZ2UgUkdCCi0JCSAq IFRoZSBtYXRyaXggcmVxdWlyZWQgaXMgOgotCQkgKiBbMS4wMDAsIDAuMDAwLCAxLjM3MSwKLQkJ ICogIDEuMDAwLCAtMC4zMzYsIC0wLjY5OCwKLQkJICogIDEuMDAwLCAxLjczMiwgMC4wMDAwXQot CQkgKi8KLQkJW0RSTV9DT0xPUl9ZQ0JDUl9CVDYwMV0gPSB7Ci0JCQkweDdBRjgsIDB4NzgwMCwg MHgwLAotCQkJMHg4QjI4LCAweDc4MDAsIDB4OUFDMCwKLQkJCTB4MCwgMHg3ODAwLCAweDdERDgs Ci0JCX0sCi0JCS8qCi0JCSAqIEJULjcwOSBmdWxsIHJhbmdlIFlDYkNyIC0+IGZ1bGwgcmFuZ2Ug UkdCCi0JCSAqIFRoZSBtYXRyaXggcmVxdWlyZWQgaXMgOgotCQkgKiBbMS4wMDAsIDAuMDAwLCAx LjU3NCwKLQkJICogIDEuMDAwLCAtMC4xODcsIC0wLjQ2OCwKLQkJICogIDEuMDAwLCAxLjg1NSwg MC4wMDAwXQotCQkgKi8KLQkJW0RSTV9DT0xPUl9ZQ0JDUl9CVDcwOV0gPSB7Ci0JCQkweDdDOTgs IDB4NzgwMCwgMHgwLAotCQkJMHg5RUY4LCAweDc4MDAsIDB4QUMwMCwKLQkJCTB4MCwgMHg3ODAw LCAgMHg3RUQ4LAotCQl9LAotCQkvKgotCQkgKiBCVC4yMDIwIGZ1bGwgcmFuZ2UgWUNiQ3IgLT4g ZnVsbCByYW5nZSBSR0IKLQkJICogVGhlIG1hdHJpeCByZXF1aXJlZCBpcyA6Ci0JCSAqIFsxLjAw MCwgMC4wMDAsIDEuNDc0LAotCQkgKiAgMS4wMDAsIC0wLjE2NDUsIC0wLjU3MTMsCi0JCSAqICAx LjAwMCwgMS44ODE0LCAwLjAwMDBdCi0JCSAqLwotCQlbRFJNX0NPTE9SX1lDQkNSX0JUMjAyMF0g PSB7Ci0JCQkweDdCQzgsIDB4NzgwMCwgMHgwLAotCQkJMHg4OTI4LCAweDc4MDAsIDB4QUE4OCwK LQkJCTB4MCwgMHg3ODAwLCAweDdGMTAsCi0JCX0sCi0JfTsKLQotCS8qIE1hdHJpeCBmb3IgTGlt aXRlZCBSYW5nZSB0byBGdWxsIFJhbmdlIENvbnZlcnNpb24gKi8KLQlzdGF0aWMgY29uc3QgdTE2 IGlucHV0X2NzY19tYXRyaXhfbHJbXVs5XSA9IHsKLQkJLyoKLQkJICogQlQuNjAxIExpbXRlZCBy YW5nZSBZQ2JDciAtPiBmdWxsIHJhbmdlIFJHQgotCQkgKiBUaGUgbWF0cml4IHJlcXVpcmVkIGlz IDoKLQkJICogWzEuMTY0Mzg0LCAwLjAwMCwgMS41OTYwMjcsCi0JCSAqICAxLjE2NDM4NCwgLTAu MzkxNzUsIC0wLjgxMjgxMywKLQkJICogIDEuMTY0Mzg0LCAyLjAxNzIzMiwgMC4wMDAwXQotCQkg Ki8KLQkJW0RSTV9DT0xPUl9ZQ0JDUl9CVDYwMV0gPSB7Ci0JCQkweDdDQzgsIDB4Nzk1MCwgMHgw LAotCQkJMHg4RDAwLCAweDc5NTAsIDB4OUM4OCwKLQkJCTB4MCwgMHg3OTUwLCAweDY4MTAsCi0J CX0sCi0JCS8qCi0JCSAqIEJULjcwOSBMaW1pdGVkIHJhbmdlIFlDYkNyIC0+IGZ1bGwgcmFuZ2Ug UkdCCi0JCSAqIFRoZSBtYXRyaXggcmVxdWlyZWQgaXMgOgotCQkgKiBbMS4xNjQzODQsIDAuMDAw LCAxLjc5Mjc0MSwKLQkJICogIDEuMTY0Mzg0LCAtMC4yMTMyNDksIC0wLjUzMjkwOSwKLQkJICog IDEuMTY0Mzg0LCAyLjExMjQwMiwgMC4wMDAwXQotCQkgKi8KLQkJW0RSTV9DT0xPUl9ZQ0JDUl9C VDcwOV0gPSB7Ci0JCQkweDdFNTgsIDB4Nzk1MCwgMHgwLAotCQkJMHg4ODg4LCAweDc5NTAsIDB4 QURBOCwKLQkJCTB4MCwgMHg3OTUwLCAgMHg2ODcwLAotCQl9LAotCQkvKgotCQkgKiBCVC4yMDIw IExpbWl0ZWQgcmFuZ2UgWUNiQ3IgLT4gZnVsbCByYW5nZSBSR0IKLQkJICogVGhlIG1hdHJpeCBy ZXF1aXJlZCBpcyA6Ci0JCSAqIFsxLjE2NCwgMC4wMDAsIDEuNjc4LAotCQkgKiAgMS4xNjQsIC0w LjE4NzMsIC0wLjY1MDQsCi0JCSAqICAxLjE2NCwgMi4xNDE3LCAwLjAwMDBdCi0JCSAqLwotCQlb RFJNX0NPTE9SX1lDQkNSX0JUMjAyMF0gPSB7Ci0JCQkweDdENzAsIDB4Nzk1MCwgMHgwLAotCQkJ MHg4QTY4LCAweDc5NTAsIDB4QUMwMCwKLQkJCTB4MCwgMHg3OTUwLCAweDY4OTAsCi0JCX0sCi0J fTsKLQljb25zdCB1MTYgKmNzYzsKLQotCWlmIChwbGFuZV9zdGF0ZS0+aHcuY29sb3JfcmFuZ2Ug PT0gRFJNX0NPTE9SX1lDQkNSX0ZVTExfUkFOR0UpCi0JCWNzYyA9IGlucHV0X2NzY19tYXRyaXhb cGxhbmVfc3RhdGUtPmh3LmNvbG9yX2VuY29kaW5nXTsKLQllbHNlCi0JCWNzYyA9IGlucHV0X2Nz Y19tYXRyaXhfbHJbcGxhbmVfc3RhdGUtPmh3LmNvbG9yX2VuY29kaW5nXTsKLQotCWludGVsX2Rl X3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9JTlBVVF9DU0NfQ09FRkYocGlwZSwgcGxhbmVfaWQs IDApLAotCQkJICBST0ZGKGNzY1swXSkgfCBHT0ZGKGNzY1sxXSkpOwotCWludGVsX2RlX3dyaXRl X2Z3KGRldl9wcml2LCBQTEFORV9JTlBVVF9DU0NfQ09FRkYocGlwZSwgcGxhbmVfaWQsIDEpLAot CQkJICBCT0ZGKGNzY1syXSkpOwotCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9J TlBVVF9DU0NfQ09FRkYocGlwZSwgcGxhbmVfaWQsIDIpLAotCQkJICBST0ZGKGNzY1szXSkgfCBH T0ZGKGNzY1s0XSkpOwotCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9JTlBVVF9D U0NfQ09FRkYocGlwZSwgcGxhbmVfaWQsIDMpLAotCQkJICBCT0ZGKGNzY1s1XSkpOwotCWludGVs X2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9JTlBVVF9DU0NfQ09FRkYocGlwZSwgcGxhbmVf aWQsIDQpLAotCQkJICBST0ZGKGNzY1s2XSkgfCBHT0ZGKGNzY1s3XSkpOwotCWludGVsX2RlX3dy aXRlX2Z3KGRldl9wcml2LCBQTEFORV9JTlBVVF9DU0NfQ09FRkYocGlwZSwgcGxhbmVfaWQsIDUp LAotCQkJICBCT0ZGKGNzY1s4XSkpOwotCi0JaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBM QU5FX0lOUFVUX0NTQ19QUkVPRkYocGlwZSwgcGxhbmVfaWQsIDApLAotCQkJICBQUkVPRkZfWVVW X1RPX1JHQl9ISSk7Ci0JaWYgKHBsYW5lX3N0YXRlLT5ody5jb2xvcl9yYW5nZSA9PSBEUk1fQ09M T1JfWUNCQ1JfRlVMTF9SQU5HRSkKLQkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsCi0JCQkJ ICBQTEFORV9JTlBVVF9DU0NfUFJFT0ZGKHBpcGUsIHBsYW5lX2lkLCAxKSwKLQkJCQkgIDApOwot CWVsc2UKLQkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsCi0JCQkJICBQTEFORV9JTlBVVF9D U0NfUFJFT0ZGKHBpcGUsIHBsYW5lX2lkLCAxKSwKLQkJCQkgIFBSRU9GRl9ZVVZfVE9fUkdCX01F KTsKLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfSU5QVVRfQ1NDX1BSRU9GRihw aXBlLCBwbGFuZV9pZCwgMiksCi0JCQkgIFBSRU9GRl9ZVVZfVE9fUkdCX0xPKTsKLQlpbnRlbF9k ZV93cml0ZV9mdyhkZXZfcHJpdiwKLQkJCSAgUExBTkVfSU5QVVRfQ1NDX1BPU1RPRkYocGlwZSwg cGxhbmVfaWQsIDApLCAweDApOwotCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LAotCQkJICBQ TEFORV9JTlBVVF9DU0NfUE9TVE9GRihwaXBlLCBwbGFuZV9pZCwgMSksIDB4MCk7Ci0JaW50ZWxf ZGVfd3JpdGVfZncoZGV2X3ByaXYsCi0JCQkgIFBMQU5FX0lOUFVUX0NTQ19QT1NUT0ZGKHBpcGUs IHBsYW5lX2lkLCAyKSwgMHgwKTsKLX0KLQotc3RhdGljIHZvaWQKLXNrbF9wbGFuZV9hc3luY19m bGlwKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCi0JCSAgICAgY29uc3Qgc3RydWN0IGludGVs X2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCi0JCSAgICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5l X3N0YXRlICpwbGFuZV9zdGF0ZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7Ci0JdW5zaWduZWQgbG9uZyBpcnFmbGFnczsK LQllbnVtIHBsYW5lX2lkIHBsYW5lX2lkID0gcGxhbmUtPmlkOwotCWVudW0gcGlwZSBwaXBlID0g cGxhbmUtPnBpcGU7Ci0JdTMyIHN1cmZfYWRkciA9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVsw XS5vZmZzZXQ7Ci0JdTMyIHBsYW5lX2N0bCA9IHBsYW5lX3N0YXRlLT5jdGw7Ci0KLQlwbGFuZV9j dGwgfD0gc2tsX3BsYW5lX2N0bF9jcnRjKGNydGNfc3RhdGUpOwotCi0Jc3Bpbl9sb2NrX2lycXNh 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 dXJuIHJldDsKLX0KLQogc3RhdGljIHZvaWQgaTl4eF9wbGFuZV9saW5lYXJfZ2FtbWEodTE2IGdh bW1hWzhdKQogewogCS8qIFRoZSBwb2ludHMgYXJlIG5vdCBldmVubHkgc3BhY2VkLiAqLwpAQCAt MjI4MiwyNDYgKzE3NTEsMTMgQEAgdmx2X3Nwcml0ZV9jaGVjayhzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqY3J0Y19zdGF0ZSwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGJvb2wgaW50ZWxfZm9y bWF0X2lzX3AwMXgodTMyIGZvcm1hdCkKK3N0YXRpYyBib29sIGhhc19kc3Rfa2V5X2luX3ByaW1h cnlfcGxhbmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogewotCXN3aXRjaCAo Zm9ybWF0KSB7Ci0JY2FzZSBEUk1fRk9STUFUX1AwMTA6Ci0JY2FzZSBEUk1fRk9STUFUX1AwMTI6 Ci0JY2FzZSBEUk1fRk9STUFUX1AwMTY6Ci0JCXJldHVybiB0cnVlOwotCWRlZmF1bHQ6Ci0JCXJl dHVybiBmYWxzZTsKLQl9CisJcmV0dXJuIElOVEVMX0dFTihkZXZfcHJpdikgPj0gOTsKIH0KIAot c3RhdGljIGludCBza2xfcGxhbmVfY2hlY2tfZmIoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKmNydGNfc3RhdGUsCi0JCQkgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUg KnBsYW5lX3N0YXRlKQotewotCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0b19pbnRlbF9w bGFuZShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZSk7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOwotCWNvbnN0IHN0cnVjdCBkcm1f ZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwotCXVuc2lnbmVkIGludCByb3Rh dGlvbiA9IHBsYW5lX3N0YXRlLT5ody5yb3RhdGlvbjsKLQlzdHJ1Y3QgZHJtX2Zvcm1hdF9uYW1l X2J1ZiBmb3JtYXRfbmFtZTsKLQotCWlmICghZmIpCi0JCXJldHVybiAwOwotCi0JaWYgKHJvdGF0 aW9uICYgfihEUk1fTU9ERV9ST1RBVEVfMCB8IERSTV9NT0RFX1JPVEFURV8xODApICYmCi0JICAg IGlzX2Njc19tb2RpZmllcihmYi0+bW9kaWZpZXIpKSB7Ci0JCWRybV9kYmdfa21zKCZkZXZfcHJp di0+ZHJtLAotCQkJICAgICJSQyBzdXBwb3J0IG9ubHkgd2l0aCAwLzE4MCBkZWdyZWUgcm90YXRp b24gKCV4KVxuIiwKLQkJCSAgICByb3RhdGlvbik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQot CWlmIChyb3RhdGlvbiAmIERSTV9NT0RFX1JFRkxFQ1RfWCAmJgotCSAgICBmYi0+bW9kaWZpZXIg PT0gRFJNX0ZPUk1BVF9NT0RfTElORUFSKSB7Ci0JCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJt LAotCQkJICAgICJob3Jpem9udGFsIGZsaXAgaXMgbm90IHN1cHBvcnRlZCB3aXRoIGxpbmVhciBz dXJmYWNlIGZvcm1hdHNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoZHJtX3Jv dGF0aW9uXzkwX29yXzI3MChyb3RhdGlvbikpIHsKLQkJaWYgKGZiLT5tb2RpZmllciAhPSBJOTE1 X0ZPUk1BVF9NT0RfWV9USUxFRCAmJgotCQkgICAgZmItPm1vZGlmaWVyICE9IEk5MTVfRk9STUFU X01PRF9ZZl9USUxFRCkgewotCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0JCQkJICAg ICJZL1lmIHRpbGluZyByZXF1aXJlZCBmb3IgOTAvMjcwIVxuIik7Ci0JCQlyZXR1cm4gLUVJTlZB TDsKLQkJfQotCi0JCS8qCi0JCSAqIDkwLzI3MCBpcyBub3QgYWxsb3dlZCB3aXRoIFJHQjY0IDE2 OjE2OjE2OjE2IGFuZAotCQkgKiBJbmRleGVkIDgtYml0LiBSR0IgMTYtYml0IDU6Njo1IGlzIGFs bG93ZWQgZ2VuMTEgb253YXJkcy4KLQkJICovCi0JCXN3aXRjaCAoZmItPmZvcm1hdC0+Zm9ybWF0 KSB7Ci0JCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6Ci0JCQlpZiAoSU5URUxfR0VOKGRldl9wcml2 KSA+PSAxMSkKLQkJCQlicmVhazsKLQkJCWZhbGx0aHJvdWdoOwotCQljYXNlIERSTV9GT1JNQVRf Qzg6Ci0JCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMTYxNjE2MTZGOgotCQljYXNlIERSTV9GT1JNQVRf WEJHUjE2MTYxNjE2RjoKLQkJY2FzZSBEUk1fRk9STUFUX0FSR0IxNjE2MTYxNkY6Ci0JCWNhc2Ug RFJNX0ZPUk1BVF9BQkdSMTYxNjE2MTZGOgotCQljYXNlIERSTV9GT1JNQVRfWTIxMDoKLQkJY2Fz ZSBEUk1fRk9STUFUX1kyMTI6Ci0JCWNhc2UgRFJNX0ZPUk1BVF9ZMjE2OgotCQljYXNlIERSTV9G T1JNQVRfWFZZVTEyXzE2MTYxNjE2OgotCQljYXNlIERSTV9GT1JNQVRfWFZZVTE2MTYxNjE2Ogot CQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0JCQkJICAgICJVbnN1cHBvcnRlZCBwaXhl bCBmb3JtYXQgJXMgZm9yIDkwLzI3MCFcbiIsCi0JCQkJICAgIGRybV9nZXRfZm9ybWF0X25hbWUo ZmItPmZvcm1hdC0+Zm9ybWF0LAotCQkJCQkJCSZmb3JtYXRfbmFtZSkpOwotCQkJcmV0dXJuIC1F SU5WQUw7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCS8qIFktdGlsaW5nIGlz IG5vdCBzdXBwb3J0ZWQgaW4gSUYtSUQgSW50ZXJsYWNlIG1vZGUgKi8KLQlpZiAoY3J0Y19zdGF0 ZS0+aHcuZW5hYmxlICYmCi0JICAgIGNydGNfc3RhdGUtPmh3LmFkanVzdGVkX21vZGUuZmxhZ3Mg JiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSAmJgotCSAgICAoZmItPm1vZGlmaWVyID09IEk5MTVf Rk9STUFUX01PRF9ZX1RJTEVEIHx8Ci0JICAgICBmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRf TU9EX1lmX1RJTEVEIHx8Ci0JICAgICBmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lf VElMRURfQ0NTIHx8Ci0JICAgICBmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJ TEVEX0NDUyB8fAotCSAgICAgZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVE X0dFTjEyX1JDX0NDUyB8fAotCSAgICAgZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9Z X1RJTEVEX0dFTjEyX01DX0NDUykpIHsKLQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0J CQkgICAgIlkvWWYgdGlsaW5nIG5vdCBzdXBwb3J0ZWQgaW4gSUYtSUQgbW9kZVxuIik7Ci0JCXJl dHVybiAtRUlOVkFMOwotCX0KLQotCS8qIFdhXzE2MDYwNTQxODg6dGdsICovCi0JaWYgKElTX1RJ R0VSTEFLRShkZXZfcHJpdikgJiYKLQkgICAgcGxhbmVfc3RhdGUtPmNrZXkuZmxhZ3MgJiBJOTE1 X1NFVF9DT0xPUktFWV9TT1VSQ0UgJiYKLQkgICAgaW50ZWxfZm9ybWF0X2lzX3AwMXgoZmItPmZv cm1hdC0+Zm9ybWF0KSkgewotCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKLQkJCSAgICAi U291cmNlIGNvbG9yIGtleWluZyBub3Qgc3VwcG9ydGVkIHdpdGggUDAxeCBmb3JtYXRzXG4iKTsK LQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2ts X3BsYW5lX2NoZWNrX2RzdF9jb29yZGluYXRlcyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0 ZSAqY3J0Y19zdGF0ZSwKLQkJCQkJICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpw bGFuZV9zdGF0ZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPQotCQl0 b19pOTE1KHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lLT5kZXYpOwotCWludCBjcnRjX3ggPSBwbGFu ZV9zdGF0ZS0+dWFwaS5kc3QueDE7Ci0JaW50IGNydGNfdyA9IGRybV9yZWN0X3dpZHRoKCZwbGFu ZV9zdGF0ZS0+dWFwaS5kc3QpOwotCWludCBwaXBlX3NyY193ID0gY3J0Y19zdGF0ZS0+cGlwZV9z cmNfdzsKLQotCS8qCi0JICogRGlzcGxheSBXQSAjMTE3NTogY25sLGdsawotCSAqIFBsYW5lcyBv dGhlciB0aGFuIHRoZSBjdXJzb3IgbWF5IGNhdXNlIEZJRk8gdW5kZXJmbG93IGFuZCBkaXNwbGF5 Ci0JICogY29ycnVwdGlvbiBpZiBzdGFydGluZyBsZXNzIHRoYW4gNCBwaXhlbHMgZnJvbSB0aGUg cmlnaHQgZWRnZSBvZgotCSAqIHRoZSBzY3JlZW4uCi0JICogQmVzaWRlcyB0aGUgYWJvdmUgV0Eg Zml4IHRoZSBzaW1pbGFyIHByb2JsZW0sIHdoZXJlIHBsYW5lcyBvdGhlcgotCSAqIHRoYW4gdGhl IGN1cnNvciBlbmRpbmcgbGVzcyB0aGFuIDQgcGl4ZWxzIGZyb20gdGhlIGxlZnQgZWRnZSBvZiB0 aGUKLQkgKiBzY3JlZW4gbWF5IGNhdXNlIEZJRk8gdW5kZXJmbG93IGFuZCBkaXNwbGF5IGNvcnJ1 cHRpb24uCi0JICovCi0JaWYgKChJU19HRU1JTklMQUtFKGRldl9wcml2KSB8fCBJU19DQU5OT05M QUtFKGRldl9wcml2KSkgJiYKLQkgICAgKGNydGNfeCArIGNydGNfdyA8IDQgfHwgY3J0Y194ID4g cGlwZV9zcmNfdyAtIDQpKSB7Ci0JCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAotCQkJICAg ICJyZXF1ZXN0ZWQgcGxhbmUgWCAlcyBwb3NpdGlvbiAlZCBpbnZhbGlkICh2YWxpZCByYW5nZSAl ZC0lZClcbiIsCi0JCQkgICAgY3J0Y194ICsgY3J0Y193IDwgNCA/ICJlbmQiIDogInN0YXJ0IiwK LQkJCSAgICBjcnRjX3ggKyBjcnRjX3cgPCA0ID8gY3J0Y194ICsgY3J0Y193IDogY3J0Y194LAot CQkJICAgIDQsIHBpcGVfc3JjX3cgLSA0KTsKLQkJcmV0dXJuIC1FUkFOR0U7Ci0JfQotCi0JcmV0 dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2tsX3BsYW5lX2NoZWNrX252MTJfcm90YXRpb24oY29u c3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKLXsKLQljb25zdCBzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKLQl1bnNpZ25lZCBp bnQgcm90YXRpb24gPSBwbGFuZV9zdGF0ZS0+aHcucm90YXRpb247Ci0JaW50IHNyY193ID0gZHJt X3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLnNyYykgPj4gMTY7Ci0KLQkvKiBEaXNwbGF5 IFdBICMxMTA2ICovCi0JaWYgKGludGVsX2Zvcm1hdF9pbmZvX2lzX3l1dl9zZW1pcGxhbmFyKGZi LT5mb3JtYXQsIGZiLT5tb2RpZmllcikgJiYKLQkgICAgc3JjX3cgJiAzICYmCi0JICAgIChyb3Rh dGlvbiA9PSBEUk1fTU9ERV9ST1RBVEVfMjcwIHx8Ci0JICAgICByb3RhdGlvbiA9PSAoRFJNX01P REVfUkVGTEVDVF9YIHwgRFJNX01PREVfUk9UQVRFXzkwKSkpIHsKLQkJRFJNX0RFQlVHX0tNUygi c3JjIHdpZHRoIG11c3QgYmUgbXVsdGlwbGUgb2YgNCBmb3Igcm90YXRlZCBwbGFuYXIgWVVWXG4i KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQg c2tsX3BsYW5lX21heF9zY2FsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCi0J CQkgICAgICAgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpCi17Ci0JLyoKLQkgKiBX ZSBkb24ndCB5ZXQga25vdyB0aGUgZmluYWwgc291cmNlIHdpZHRoIG5vcgotCSAqIHdoZXRoZXIg d2UgY2FuIHVzZSB0aGUgSFEgc2NhbGVyIG1vZGUuIEFzc3VtZQotCSAqIHRoZSBiZXN0IGNhc2Uu Ci0JICogRklYTUUgbmVlZCB0byBwcm9wZXJseSBjaGVjayB0aGlzIGxhdGVyLgotCSAqLwotCWlm IChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwIHx8IElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpIHx8 Ci0JICAgICFpbnRlbF9mb3JtYXRfaW5mb19pc195dXZfc2VtaXBsYW5hcihmYi0+Zm9ybWF0LCBm Yi0+bW9kaWZpZXIpKQotCQlyZXR1cm4gMHgzMDAwMCAtIDE7Ci0JZWxzZQotCQlyZXR1cm4gMHgy MDAwMCAtIDE7Ci19Ci0KLXN0YXRpYyBpbnQgc2tsX3BsYW5lX2NoZWNrKHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpjcnRjX3N0YXRlLAotCQkJICAgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpw bGFuZV9zdGF0ZSkKLXsKLQlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lID0gdG9faW50ZWxfcGxh bmUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUpOwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKLQljb25zdCBzdHJ1Y3QgZHJtX2Zy YW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKLQlpbnQgbWluX3NjYWxlID0gRFJN X1BMQU5FX0hFTFBFUl9OT19TQ0FMSU5HOwotCWludCBtYXhfc2NhbGUgPSBEUk1fUExBTkVfSEVM UEVSX05PX1NDQUxJTkc7Ci0JaW50IHJldDsKLQotCXJldCA9IHNrbF9wbGFuZV9jaGVja19mYihj cnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCS8q IHVzZSBzY2FsZXIgd2hlbiBjb2xvcmtleSBpcyBub3QgcmVxdWlyZWQgKi8KLQlpZiAoIXBsYW5l X3N0YXRlLT5ja2V5LmZsYWdzICYmIGludGVsX2ZiX3NjYWxhYmxlKGZiKSkgewotCQltaW5fc2Nh bGUgPSAxOwotCQltYXhfc2NhbGUgPSBza2xfcGxhbmVfbWF4X3NjYWxlKGRldl9wcml2LCBmYik7 Ci0JfQotCi0JcmV0ID0gaW50ZWxfYXRvbWljX3BsYW5lX2NoZWNrX2NsaXBwaW5nKHBsYW5lX3N0 YXRlLCBjcnRjX3N0YXRlLAotCQkJCQkJbWluX3NjYWxlLCBtYXhfc2NhbGUsIHRydWUpOwotCWlm IChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSBza2xfY2hlY2tfcGxhbmVfc3VyZmFjZShw bGFuZV9zdGF0ZSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCWlmICghcGxhbmVfc3Rh dGUtPnVhcGkudmlzaWJsZSkKLQkJcmV0dXJuIDA7Ci0KLQlyZXQgPSBza2xfcGxhbmVfY2hlY2tf ZHN0X2Nvb3JkaW5hdGVzKGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlKTsKLQlpZiAocmV0KQotCQly ZXR1cm4gcmV0OwotCi0JcmV0ID0gaW50ZWxfcGxhbmVfY2hlY2tfc3JjX2Nvb3JkaW5hdGVzKHBs YW5lX3N0YXRlKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gc2tsX3BsYW5l X2NoZWNrX252MTJfcm90YXRpb24ocGxhbmVfc3RhdGUpOwotCWlmIChyZXQpCi0JCXJldHVybiBy ZXQ7Ci0KLQkvKiBIVyBvbmx5IGhhcyA4IGJpdHMgcGl4ZWwgcHJlY2lzaW9uLCBkaXNhYmxlIHBs YW5lIGlmIGludmlzaWJsZSAqLwotCWlmICghKHBsYW5lX3N0YXRlLT5ody5hbHBoYSA+PiA4KSkK LQkJcGxhbmVfc3RhdGUtPnVhcGkudmlzaWJsZSA9IGZhbHNlOwotCi0JcGxhbmVfc3RhdGUtPmN0 bCA9IHNrbF9wbGFuZV9jdGwoY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUpOwotCi0JaWYgKElOVEVM X0dFTihkZXZfcHJpdikgPj0gMTAgfHwgSVNfR0VNSU5JTEFLRShkZXZfcHJpdikpCi0JCXBsYW5l X3N0YXRlLT5jb2xvcl9jdGwgPSBnbGtfcGxhbmVfY29sb3JfY3RsKGNydGNfc3RhdGUsCi0JCQkJ CQkJICAgICBwbGFuZV9zdGF0ZSk7Ci0KLQlpZiAoaW50ZWxfZm9ybWF0X2luZm9faXNfeXV2X3Nl bWlwbGFuYXIoZmItPmZvcm1hdCwgZmItPm1vZGlmaWVyKSAmJgotCSAgICBpY2xfaXNfaGRyX3Bs YW5lKGRldl9wcml2LCBwbGFuZS0+aWQpKQotCQkvKiBFbmFibGUgYW5kIHVzZSBNUEVHLTIgY2hy b21hIHNpdGluZyAqLwotCQlwbGFuZV9zdGF0ZS0+Y3VzX2N0bCA9IFBMQU5FX0NVU19FTkFCTEUg fAotCQkJUExBTkVfQ1VTX0hQSEFTRV8wIHwKLQkJCVBMQU5FX0NVU19WUEhBU0VfU0lHTl9ORUdB VElWRSB8IFBMQU5FX0NVU19WUEhBU0VfMF8yNTsKLQllbHNlCi0JCXBsYW5lX3N0YXRlLT5jdXNf Y3RsID0gMDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgYm9vbCBoYXNfZHN0X2tleV9pbl9w cmltYXJ5X3BsYW5lKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQlyZXR1 cm4gSU5URUxfR0VOKGRldl9wcml2KSA+PSA5OwotfQotCi1zdGF0aWMgdm9pZCBpbnRlbF9wbGFu ZV9zZXRfY2tleShzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAotCQkJCSBj b25zdCBzdHJ1Y3QgZHJtX2ludGVsX3Nwcml0ZV9jb2xvcmtleSAqc2V0KQorc3RhdGljIHZvaWQg aW50ZWxfcGxhbmVfc2V0X2NrZXkoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0 ZSwKKwkJCQkgY29uc3Qgc3RydWN0IGRybV9pbnRlbF9zcHJpdGVfY29sb3JrZXkgKnNldCkKIHsK IAlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lID0gdG9faW50ZWxfcGxhbmUocGxhbmVfc3RhdGUt PnVhcGkucGxhbmUpOwogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5 MTUocGxhbmUtPmJhc2UuZGV2KTsKQEAgLTI2OTIsMTg0ICsxOTI4LDYgQEAgc3RhdGljIGNvbnN0 IHUzMiBjaHZfcGlwZV9iX3Nwcml0ZV9mb3JtYXRzW10gPSB7CiAJRFJNX0ZPUk1BVF9WWVVZLAog fTsKIAotc3RhdGljIGNvbnN0IHUzMiBza2xfcGxhbmVfZm9ybWF0c1tdID0gewotCURSTV9GT1JN QVRfQzgsCi0JRFJNX0ZPUk1BVF9SR0I1NjUsCi0JRFJNX0ZPUk1BVF9YUkdCODg4OCwKLQlEUk1f Rk9STUFUX1hCR1I4ODg4LAotCURSTV9GT1JNQVRfQVJHQjg4ODgsCi0JRFJNX0ZPUk1BVF9BQkdS ODg4OCwKLQlEUk1fRk9STUFUX1hSR0IyMTAxMDEwLAotCURSTV9GT1JNQVRfWEJHUjIxMDEwMTAs Ci0JRFJNX0ZPUk1BVF9YUkdCMTYxNjE2MTZGLAotCURSTV9GT1JNQVRfWEJHUjE2MTYxNjE2RiwK LQlEUk1fRk9STUFUX1lVWVYsCi0JRFJNX0ZPUk1BVF9ZVllVLAotCURSTV9GT1JNQVRfVVlWWSwK LQlEUk1fRk9STUFUX1ZZVVksCi0JRFJNX0ZPUk1BVF9YWVVWODg4OCwKLX07Ci0KLXN0YXRpYyBj b25zdCB1MzIgc2tsX3BsYW5hcl9mb3JtYXRzW10gPSB7Ci0JRFJNX0ZPUk1BVF9DOCwKLQlEUk1f Rk9STUFUX1JHQjU2NSwKLQlEUk1fRk9STUFUX1hSR0I4ODg4LAotCURSTV9GT1JNQVRfWEJHUjg4 ODgsCi0JRFJNX0ZPUk1BVF9BUkdCODg4OCwKLQlEUk1fRk9STUFUX0FCR1I4ODg4LAotCURSTV9G T1JNQVRfWFJHQjIxMDEwMTAsCi0JRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMCwKLQlEUk1fRk9STUFU X1hSR0IxNjE2MTYxNkYsCi0JRFJNX0ZPUk1BVF9YQkdSMTYxNjE2MTZGLAotCURSTV9GT1JNQVRf WVVZViwKLQlEUk1fRk9STUFUX1lWWVUsCi0JRFJNX0ZPUk1BVF9VWVZZLAotCURSTV9GT1JNQVRf VllVWSwKLQlEUk1fRk9STUFUX05WMTIsCi0JRFJNX0ZPUk1BVF9YWVVWODg4OCwKLX07Ci0KLXN0 YXRpYyBjb25zdCB1MzIgZ2xrX3BsYW5hcl9mb3JtYXRzW10gPSB7Ci0JRFJNX0ZPUk1BVF9DOCwK LQlEUk1fRk9STUFUX1JHQjU2NSwKLQlEUk1fRk9STUFUX1hSR0I4ODg4LAotCURSTV9GT1JNQVRf WEJHUjg4ODgsCi0JRFJNX0ZPUk1BVF9BUkdCODg4OCwKLQlEUk1fRk9STUFUX0FCR1I4ODg4LAot CURSTV9GT1JNQVRfWFJHQjIxMDEwMTAsCi0JRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMCwKLQlEUk1f Rk9STUFUX1hSR0IxNjE2MTYxNkYsCi0JRFJNX0ZPUk1BVF9YQkdSMTYxNjE2MTZGLAotCURSTV9G T1JNQVRfWVVZViwKLQlEUk1fRk9STUFUX1lWWVUsCi0JRFJNX0ZPUk1BVF9VWVZZLAotCURSTV9G T1JNQVRfVllVWSwKLQlEUk1fRk9STUFUX05WMTIsCi0JRFJNX0ZPUk1BVF9YWVVWODg4OCwKLQlE Uk1fRk9STUFUX1AwMTAsCi0JRFJNX0ZPUk1BVF9QMDEyLAotCURSTV9GT1JNQVRfUDAxNiwKLX07 Ci0KLXN0YXRpYyBjb25zdCB1MzIgaWNsX3Nkcl95X3BsYW5lX2Zvcm1hdHNbXSA9IHsKLQlEUk1f Rk9STUFUX0M4LAotCURSTV9GT1JNQVRfUkdCNTY1LAotCURSTV9GT1JNQVRfWFJHQjg4ODgsCi0J RFJNX0ZPUk1BVF9YQkdSODg4OCwKLQlEUk1fRk9STUFUX0FSR0I4ODg4LAotCURSTV9GT1JNQVRf QUJHUjg4ODgsCi0JRFJNX0ZPUk1BVF9YUkdCMjEwMTAxMCwKLQlEUk1fRk9STUFUX1hCR1IyMTAx MDEwLAotCURSTV9GT1JNQVRfQVJHQjIxMDEwMTAsCi0JRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMCwK LQlEUk1fRk9STUFUX1lVWVYsCi0JRFJNX0ZPUk1BVF9ZVllVLAotCURSTV9GT1JNQVRfVVlWWSwK LQlEUk1fRk9STUFUX1ZZVVksCi0JRFJNX0ZPUk1BVF9ZMjEwLAotCURSTV9GT1JNQVRfWTIxMiwK LQlEUk1fRk9STUFUX1kyMTYsCi0JRFJNX0ZPUk1BVF9YWVVWODg4OCwKLQlEUk1fRk9STUFUX1hW WVUyMTAxMDEwLAotCURSTV9GT1JNQVRfWFZZVTEyXzE2MTYxNjE2LAotCURSTV9GT1JNQVRfWFZZ VTE2MTYxNjE2LAotfTsKLQotc3RhdGljIGNvbnN0IHUzMiBpY2xfc2RyX3V2X3BsYW5lX2Zvcm1h dHNbXSA9IHsKLQlEUk1fRk9STUFUX0M4LAotCURSTV9GT1JNQVRfUkdCNTY1LAotCURSTV9GT1JN QVRfWFJHQjg4ODgsCi0JRFJNX0ZPUk1BVF9YQkdSODg4OCwKLQlEUk1fRk9STUFUX0FSR0I4ODg4 LAotCURSTV9GT1JNQVRfQUJHUjg4ODgsCi0JRFJNX0ZPUk1BVF9YUkdCMjEwMTAxMCwKLQlEUk1f Rk9STUFUX1hCR1IyMTAxMDEwLAotCURSTV9GT1JNQVRfQVJHQjIxMDEwMTAsCi0JRFJNX0ZPUk1B VF9BQkdSMjEwMTAxMCwKLQlEUk1fRk9STUFUX1lVWVYsCi0JRFJNX0ZPUk1BVF9ZVllVLAotCURS TV9GT1JNQVRfVVlWWSwKLQlEUk1fRk9STUFUX1ZZVVksCi0JRFJNX0ZPUk1BVF9OVjEyLAotCURS TV9GT1JNQVRfUDAxMCwKLQlEUk1fRk9STUFUX1AwMTIsCi0JRFJNX0ZPUk1BVF9QMDE2LAotCURS TV9GT1JNQVRfWTIxMCwKLQlEUk1fRk9STUFUX1kyMTIsCi0JRFJNX0ZPUk1BVF9ZMjE2LAotCURS TV9GT1JNQVRfWFlVVjg4ODgsCi0JRFJNX0ZPUk1BVF9YVllVMjEwMTAxMCwKLQlEUk1fRk9STUFU X1hWWVUxMl8xNjE2MTYxNiwKLQlEUk1fRk9STUFUX1hWWVUxNjE2MTYxNiwKLX07Ci0KLXN0YXRp YyBjb25zdCB1MzIgaWNsX2hkcl9wbGFuZV9mb3JtYXRzW10gPSB7Ci0JRFJNX0ZPUk1BVF9DOCwK LQlEUk1fRk9STUFUX1JHQjU2NSwKLQlEUk1fRk9STUFUX1hSR0I4ODg4LAotCURSTV9GT1JNQVRf WEJHUjg4ODgsCi0JRFJNX0ZPUk1BVF9BUkdCODg4OCwKLQlEUk1fRk9STUFUX0FCR1I4ODg4LAot CURSTV9GT1JNQVRfWFJHQjIxMDEwMTAsCi0JRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMCwKLQlEUk1f Rk9STUFUX0FSR0IyMTAxMDEwLAotCURSTV9GT1JNQVRfQUJHUjIxMDEwMTAsCi0JRFJNX0ZPUk1B VF9YUkdCMTYxNjE2MTZGLAotCURSTV9GT1JNQVRfWEJHUjE2MTYxNjE2RiwKLQlEUk1fRk9STUFU X0FSR0IxNjE2MTYxNkYsCi0JRFJNX0ZPUk1BVF9BQkdSMTYxNjE2MTZGLAotCURSTV9GT1JNQVRf WVVZViwKLQlEUk1fRk9STUFUX1lWWVUsCi0JRFJNX0ZPUk1BVF9VWVZZLAotCURSTV9GT1JNQVRf VllVWSwKLQlEUk1fRk9STUFUX05WMTIsCi0JRFJNX0ZPUk1BVF9QMDEwLAotCURSTV9GT1JNQVRf UDAxMiwKLQlEUk1fRk9STUFUX1AwMTYsCi0JRFJNX0ZPUk1BVF9ZMjEwLAotCURSTV9GT1JNQVRf WTIxMiwKLQlEUk1fRk9STUFUX1kyMTYsCi0JRFJNX0ZPUk1BVF9YWVVWODg4OCwKLQlEUk1fRk9S TUFUX1hWWVUyMTAxMDEwLAotCURSTV9GT1JNQVRfWFZZVTEyXzE2MTYxNjE2LAotCURSTV9GT1JN QVRfWFZZVTE2MTYxNjE2LAotfTsKLQotc3RhdGljIGNvbnN0IHU2NCBza2xfcGxhbmVfZm9ybWF0 X21vZGlmaWVyc19ub2Njc1tdID0gewotCUk5MTVfRk9STUFUX01PRF9ZZl9USUxFRCwKLQlJOTE1 X0ZPUk1BVF9NT0RfWV9USUxFRCwKLQlJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCwKLQlEUk1fRk9S TUFUX01PRF9MSU5FQVIsCi0JRFJNX0ZPUk1BVF9NT0RfSU5WQUxJRAotfTsKLQotc3RhdGljIGNv bnN0IHU2NCBza2xfcGxhbmVfZm9ybWF0X21vZGlmaWVyc19jY3NbXSA9IHsKLQlJOTE1X0ZPUk1B VF9NT0RfWWZfVElMRURfQ0NTLAotCUk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUywKLQlJOTE1 X0ZPUk1BVF9NT0RfWWZfVElMRUQsCi0JSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQsCi0JSTkxNV9G T1JNQVRfTU9EX1hfVElMRUQsCi0JRFJNX0ZPUk1BVF9NT0RfTElORUFSLAotCURSTV9GT1JNQVRf TU9EX0lOVkFMSUQKLX07Ci0KLXN0YXRpYyBjb25zdCB1NjQgZ2VuMTJfcGxhbmVfZm9ybWF0X21v ZGlmaWVyc19tY19jY3NbXSA9IHsKLQlJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9NQ19D Q1MsCi0JSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfUkNfQ0NTLAotCUk5MTVfRk9STUFU X01PRF9ZX1RJTEVELAotCUk5MTVfRk9STUFUX01PRF9YX1RJTEVELAotCURSTV9GT1JNQVRfTU9E X0xJTkVBUiwKLQlEUk1fRk9STUFUX01PRF9JTlZBTElECi19OwotCi1zdGF0aWMgY29uc3QgdTY0 IGdlbjEyX3BsYW5lX2Zvcm1hdF9tb2RpZmllcnNfcmNfY2NzW10gPSB7Ci0JSTkxNV9GT1JNQVRf TU9EX1lfVElMRURfR0VOMTJfUkNfQ0NTLAotCUk5MTVfRk9STUFUX01PRF9ZX1RJTEVELAotCUk5 MTVfRk9STUFUX01PRF9YX1RJTEVELAotCURSTV9GT1JNQVRfTU9EX0xJTkVBUiwKLQlEUk1fRk9S TUFUX01PRF9JTlZBTElECi19OwotCiBzdGF0aWMgYm9vbCBnNHhfc3ByaXRlX2Zvcm1hdF9tb2Rf c3VwcG9ydGVkKHN0cnVjdCBkcm1fcGxhbmUgKl9wbGFuZSwKIAkJCQkJICAgIHUzMiBmb3JtYXQs IHU2NCBtb2RpZmllcikKIHsKQEAgLTI5NjIsMTQ4ICsyMDIwLDYgQEAgc3RhdGljIGJvb2wgdmx2 X3Nwcml0ZV9mb3JtYXRfbW9kX3N1cHBvcnRlZChzdHJ1Y3QgZHJtX3BsYW5lICpfcGxhbmUsCiAJ fQogfQogCi1zdGF0aWMgYm9vbCBza2xfcGxhbmVfZm9ybWF0X21vZF9zdXBwb3J0ZWQoc3RydWN0 IGRybV9wbGFuZSAqX3BsYW5lLAotCQkJCQkgICB1MzIgZm9ybWF0LCB1NjQgbW9kaWZpZXIpCi17 Ci0Jc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSA9IHRvX2ludGVsX3BsYW5lKF9wbGFuZSk7Ci0K LQlzd2l0Y2ggKG1vZGlmaWVyKSB7Ci0JY2FzZSBEUk1fRk9STUFUX01PRF9MSU5FQVI6Ci0JY2Fz ZSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRDoKLQljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVE OgotCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEOgotCQlicmVhazsKLQljYXNlIEk5MTVf Rk9STUFUX01PRF9ZX1RJTEVEX0NDUzoKLQljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9D Q1M6Ci0JCWlmICghcGxhbmUtPmhhc19jY3MpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCWJyZWFrOwot CWRlZmF1bHQ6Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlzd2l0Y2ggKGZvcm1hdCkgewotCWNh c2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKLQljYXNlIERSTV9GT1JNQVRfWEJHUjg4ODg6Ci0JY2Fz ZSBEUk1fRk9STUFUX0FSR0I4ODg4OgotCWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoKLQkJaWYg KGlzX2Njc19tb2RpZmllcihtb2RpZmllcikpCi0JCQlyZXR1cm4gdHJ1ZTsKLQkJZmFsbHRocm91 Z2g7Ci0JY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKLQljYXNlIERSTV9GT1JNQVRfWFJHQjIxMDEw MTA6Ci0JY2FzZSBEUk1fRk9STUFUX1hCR1IyMTAxMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9BUkdC MjEwMTAxMDoKLQljYXNlIERSTV9GT1JNQVRfQUJHUjIxMDEwMTA6Ci0JY2FzZSBEUk1fRk9STUFU X1lVWVY6Ci0JY2FzZSBEUk1fRk9STUFUX1lWWVU6Ci0JY2FzZSBEUk1fRk9STUFUX1VZVlk6Ci0J Y2FzZSBEUk1fRk9STUFUX1ZZVVk6Ci0JY2FzZSBEUk1fRk9STUFUX05WMTI6Ci0JY2FzZSBEUk1f Rk9STUFUX1hZVVY4ODg4OgotCWNhc2UgRFJNX0ZPUk1BVF9QMDEwOgotCWNhc2UgRFJNX0ZPUk1B VF9QMDEyOgotCWNhc2UgRFJNX0ZPUk1BVF9QMDE2OgotCWNhc2UgRFJNX0ZPUk1BVF9YVllVMjEw MTAxMDoKLQkJaWYgKG1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRCkKLQkJCXJl dHVybiB0cnVlOwotCQlmYWxsdGhyb3VnaDsKLQljYXNlIERSTV9GT1JNQVRfQzg6Ci0JY2FzZSBE Uk1fRk9STUFUX1hCR1IxNjE2MTYxNkY6Ci0JY2FzZSBEUk1fRk9STUFUX0FCR1IxNjE2MTYxNkY6 Ci0JY2FzZSBEUk1fRk9STUFUX1hSR0IxNjE2MTYxNkY6Ci0JY2FzZSBEUk1fRk9STUFUX0FSR0Ix NjE2MTYxNkY6Ci0JY2FzZSBEUk1fRk9STUFUX1kyMTA6Ci0JY2FzZSBEUk1fRk9STUFUX1kyMTI6 Ci0JY2FzZSBEUk1fRk9STUFUX1kyMTY6Ci0JY2FzZSBEUk1fRk9STUFUX1hWWVUxMl8xNjE2MTYx NjoKLQljYXNlIERSTV9GT1JNQVRfWFZZVTE2MTYxNjE2OgotCQlpZiAobW9kaWZpZXIgPT0gRFJN X0ZPUk1BVF9NT0RfTElORUFSIHx8Ci0JCSAgICBtb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0Rf WF9USUxFRCB8fAotCQkgICAgbW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQpCi0J CQlyZXR1cm4gdHJ1ZTsKLQkJZmFsbHRocm91Z2g7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIGZhbHNl OwotCX0KLX0KLQotc3RhdGljIGJvb2wgZ2VuMTJfcGxhbmVfc3VwcG9ydHNfbWNfY2NzKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCQkJZW51bSBwbGFuZV9pZCBwbGFuZV9p ZCkKLXsKLQkvKiBXYV8xNDAxMDQ3NzAwODp0Z2xbYTAuLmMwXSxya2xbYWxsXSxkZzFbYWxsXSAq LwotCWlmIChJU19ERzEoZGV2X3ByaXYpIHx8IElTX1JPQ0tFVExBS0UoZGV2X3ByaXYpIHx8Ci0J ICAgIElTX1RHTF9ESVNQX1JFVklEKGRldl9wcml2LCBUR0xfUkVWSURfQTAsIFRHTF9SRVZJRF9D MCkpCi0JCXJldHVybiBmYWxzZTsKLQotCXJldHVybiBwbGFuZV9pZCA8IFBMQU5FX1NQUklURTQ7 Ci19Ci0KLXN0YXRpYyBib29sIGdlbjEyX3BsYW5lX2Zvcm1hdF9tb2Rfc3VwcG9ydGVkKHN0cnVj dCBkcm1fcGxhbmUgKl9wbGFuZSwKLQkJCQkJICAgICB1MzIgZm9ybWF0LCB1NjQgbW9kaWZpZXIp Ci17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShfcGxhbmUt PmRldik7Ci0Jc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSA9IHRvX2ludGVsX3BsYW5lKF9wbGFu ZSk7Ci0KLQlzd2l0Y2ggKG1vZGlmaWVyKSB7Ci0JY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxF RF9HRU4xMl9NQ19DQ1M6Ci0JCWlmICghZ2VuMTJfcGxhbmVfc3VwcG9ydHNfbWNfY2NzKGRldl9w cml2LCBwbGFuZS0+aWQpKQotCQkJcmV0dXJuIGZhbHNlOwotCQlmYWxsdGhyb3VnaDsKLQljYXNl IERSTV9GT1JNQVRfTU9EX0xJTkVBUjoKLQljYXNlIEk5MTVfRk9STUFUX01PRF9YX1RJTEVEOgot CWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQ6Ci0JY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9U SUxFRF9HRU4xMl9SQ19DQ1M6Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBmYWxzZTsK LQl9Ci0KLQlzd2l0Y2ggKGZvcm1hdCkgewotCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKLQlj YXNlIERSTV9GT1JNQVRfWEJHUjg4ODg6Ci0JY2FzZSBEUk1fRk9STUFUX0FSR0I4ODg4OgotCWNh c2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoKLQkJaWYgKGlzX2Njc19tb2RpZmllcihtb2RpZmllcikp Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJZmFsbHRocm91Z2g7Ci0JY2FzZSBEUk1fRk9STUFUX1lVWVY6 Ci0JY2FzZSBEUk1fRk9STUFUX1lWWVU6Ci0JY2FzZSBEUk1fRk9STUFUX1VZVlk6Ci0JY2FzZSBE Uk1fRk9STUFUX1ZZVVk6Ci0JY2FzZSBEUk1fRk9STUFUX05WMTI6Ci0JY2FzZSBEUk1fRk9STUFU X1hZVVY4ODg4OgotCWNhc2UgRFJNX0ZPUk1BVF9QMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9QMDEy OgotCWNhc2UgRFJNX0ZPUk1BVF9QMDE2OgotCQlpZiAobW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRf TU9EX1lfVElMRURfR0VOMTJfTUNfQ0NTKQotCQkJcmV0dXJuIHRydWU7Ci0JCWZhbGx0aHJvdWdo OwotCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6Ci0JY2FzZSBEUk1fRk9STUFUX1hSR0IyMTAxMDEw OgotCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMDoKLQljYXNlIERSTV9GT1JNQVRfQVJHQjIx MDEwMTA6Ci0JY2FzZSBEUk1fRk9STUFUX0FCR1IyMTAxMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9Y VllVMjEwMTAxMDoKLQljYXNlIERSTV9GT1JNQVRfQzg6Ci0JY2FzZSBEUk1fRk9STUFUX1hCR1Ix NjE2MTYxNkY6Ci0JY2FzZSBEUk1fRk9STUFUX0FCR1IxNjE2MTYxNkY6Ci0JY2FzZSBEUk1fRk9S TUFUX1hSR0IxNjE2MTYxNkY6Ci0JY2FzZSBEUk1fRk9STUFUX0FSR0IxNjE2MTYxNkY6Ci0JY2Fz ZSBEUk1fRk9STUFUX1kyMTA6Ci0JY2FzZSBEUk1fRk9STUFUX1kyMTI6Ci0JY2FzZSBEUk1fRk9S TUFUX1kyMTY6Ci0JY2FzZSBEUk1fRk9STUFUX1hWWVUxMl8xNjE2MTYxNjoKLQljYXNlIERSTV9G T1JNQVRfWFZZVTE2MTYxNjE2OgotCQlpZiAobW9kaWZpZXIgPT0gRFJNX0ZPUk1BVF9NT0RfTElO RUFSIHx8Ci0JCSAgICBtb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCB8fAotCQkg ICAgbW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQpCi0JCQlyZXR1cm4gdHJ1ZTsK LQkJZmFsbHRocm91Z2g7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIGZhbHNlOwotCX0KLX0KIAogc3Rh dGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfZnVuY3MgZzR4X3Nwcml0ZV9mdW5jcyA9IHsKIAku dXBkYXRlX3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfdXBkYXRlX3BsYW5lLApAQCAtMzEzMiwy NTEgKzIwNDgsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9mdW5jcyB2bHZfc3By aXRlX2Z1bmNzID0gewogCS5mb3JtYXRfbW9kX3N1cHBvcnRlZCA9IHZsdl9zcHJpdGVfZm9ybWF0 X21vZF9zdXBwb3J0ZWQsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9mdW5j cyBza2xfcGxhbmVfZnVuY3MgPSB7Ci0JLnVwZGF0ZV9wbGFuZSA9IGRybV9hdG9taWNfaGVscGVy X3VwZGF0ZV9wbGFuZSwKLQkuZGlzYWJsZV9wbGFuZSA9IGRybV9hdG9taWNfaGVscGVyX2Rpc2Fi bGVfcGxhbmUsCi0JLmRlc3Ryb3kgPSBpbnRlbF9wbGFuZV9kZXN0cm95LAotCS5hdG9taWNfZHVw bGljYXRlX3N0YXRlID0gaW50ZWxfcGxhbmVfZHVwbGljYXRlX3N0YXRlLAotCS5hdG9taWNfZGVz dHJveV9zdGF0ZSA9IGludGVsX3BsYW5lX2Rlc3Ryb3lfc3RhdGUsCi0JLmZvcm1hdF9tb2Rfc3Vw cG9ydGVkID0gc2tsX3BsYW5lX2Zvcm1hdF9tb2Rfc3VwcG9ydGVkLAotfTsKLQotc3RhdGljIGNv bnN0IHN0cnVjdCBkcm1fcGxhbmVfZnVuY3MgZ2VuMTJfcGxhbmVfZnVuY3MgPSB7Ci0JLnVwZGF0 ZV9wbGFuZSA9IGRybV9hdG9taWNfaGVscGVyX3VwZGF0ZV9wbGFuZSwKLQkuZGlzYWJsZV9wbGFu ZSA9IGRybV9hdG9taWNfaGVscGVyX2Rpc2FibGVfcGxhbmUsCi0JLmRlc3Ryb3kgPSBpbnRlbF9w bGFuZV9kZXN0cm95LAotCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gaW50ZWxfcGxhbmVfZHVw bGljYXRlX3N0YXRlLAotCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGludGVsX3BsYW5lX2Rlc3Ry b3lfc3RhdGUsCi0JLmZvcm1hdF9tb2Rfc3VwcG9ydGVkID0gZ2VuMTJfcGxhbmVfZm9ybWF0X21v ZF9zdXBwb3J0ZWQsCi19OwotCi1zdGF0aWMgYm9vbCBza2xfcGxhbmVfaGFzX2ZiYyhzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkgICAgICBlbnVtIHBpcGUgcGlwZSwgZW51 bSBwbGFuZV9pZCBwbGFuZV9pZCkKLXsKLQlpZiAoIUhBU19GQkMoZGV2X3ByaXYpKQotCQlyZXR1 cm4gZmFsc2U7Ci0KLQlyZXR1cm4gcGlwZSA9PSBQSVBFX0EgJiYgcGxhbmVfaWQgPT0gUExBTkVf UFJJTUFSWTsKLX0KLQotc3RhdGljIGJvb2wgc2tsX3BsYW5lX2hhc19wbGFuYXIoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJCSBlbnVtIHBpcGUgcGlwZSwgZW51bSBwbGFu ZV9pZCBwbGFuZV9pZCkKLXsKLQkvKiBEaXNwbGF5IFdBICMwODcwOiBza2wsIGJ4dCAqLwotCWlm IChJU19TS1lMQUtFKGRldl9wcml2KSB8fCBJU19CUk9YVE9OKGRldl9wcml2KSkKLQkJcmV0dXJu IGZhbHNlOwotCi0JaWYgKElTX0dFTihkZXZfcHJpdiwgOSkgJiYgIUlTX0dFTUlOSUxBS0UoZGV2 X3ByaXYpICYmIHBpcGUgPT0gUElQRV9DKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlpZiAocGxhbmVf aWQgIT0gUExBTkVfUFJJTUFSWSAmJiBwbGFuZV9pZCAhPSBQTEFORV9TUFJJVEUwKQotCQlyZXR1 cm4gZmFsc2U7Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGNvbnN0IHUzMiAqc2tsX2dl dF9wbGFuZV9mb3JtYXRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCQkJ ZW51bSBwaXBlIHBpcGUsIGVudW0gcGxhbmVfaWQgcGxhbmVfaWQsCi0JCQkJCWludCAqbnVtX2Zv cm1hdHMpCi17Ci0JaWYgKHNrbF9wbGFuZV9oYXNfcGxhbmFyKGRldl9wcml2LCBwaXBlLCBwbGFu ZV9pZCkpIHsKLQkJKm51bV9mb3JtYXRzID0gQVJSQVlfU0laRShza2xfcGxhbmFyX2Zvcm1hdHMp OwotCQlyZXR1cm4gc2tsX3BsYW5hcl9mb3JtYXRzOwotCX0gZWxzZSB7Ci0JCSpudW1fZm9ybWF0 cyA9IEFSUkFZX1NJWkUoc2tsX3BsYW5lX2Zvcm1hdHMpOwotCQlyZXR1cm4gc2tsX3BsYW5lX2Zv cm1hdHM7Ci0JfQotfQotCi1zdGF0aWMgY29uc3QgdTMyICpnbGtfZ2V0X3BsYW5lX2Zvcm1hdHMo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJCQllbnVtIHBpcGUgcGlwZSwg ZW51bSBwbGFuZV9pZCBwbGFuZV9pZCwKLQkJCQkJaW50ICpudW1fZm9ybWF0cykKLXsKLQlpZiAo c2tsX3BsYW5lX2hhc19wbGFuYXIoZGV2X3ByaXYsIHBpcGUsIHBsYW5lX2lkKSkgewotCQkqbnVt X2Zvcm1hdHMgPSBBUlJBWV9TSVpFKGdsa19wbGFuYXJfZm9ybWF0cyk7Ci0JCXJldHVybiBnbGtf cGxhbmFyX2Zvcm1hdHM7Ci0JfSBlbHNlIHsKLQkJKm51bV9mb3JtYXRzID0gQVJSQVlfU0laRShz a2xfcGxhbmVfZm9ybWF0cyk7Ci0JCXJldHVybiBza2xfcGxhbmVfZm9ybWF0czsKLQl9Ci19Ci0K LXN0YXRpYyBjb25zdCB1MzIgKmljbF9nZXRfcGxhbmVfZm9ybWF0cyhzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkJCWVudW0gcGlwZSBwaXBlLCBlbnVtIHBsYW5lX2lkIHBs YW5lX2lkLAotCQkJCQlpbnQgKm51bV9mb3JtYXRzKQotewotCWlmIChpY2xfaXNfaGRyX3BsYW5l KGRldl9wcml2LCBwbGFuZV9pZCkpIHsKLQkJKm51bV9mb3JtYXRzID0gQVJSQVlfU0laRShpY2xf aGRyX3BsYW5lX2Zvcm1hdHMpOwotCQlyZXR1cm4gaWNsX2hkcl9wbGFuZV9mb3JtYXRzOwotCX0g ZWxzZSBpZiAoaWNsX2lzX252MTJfeV9wbGFuZShkZXZfcHJpdiwgcGxhbmVfaWQpKSB7Ci0JCSpu dW1fZm9ybWF0cyA9IEFSUkFZX1NJWkUoaWNsX3Nkcl95X3BsYW5lX2Zvcm1hdHMpOwotCQlyZXR1 cm4gaWNsX3Nkcl95X3BsYW5lX2Zvcm1hdHM7Ci0JfSBlbHNlIHsKLQkJKm51bV9mb3JtYXRzID0g QVJSQVlfU0laRShpY2xfc2RyX3V2X3BsYW5lX2Zvcm1hdHMpOwotCQlyZXR1cm4gaWNsX3Nkcl91 dl9wbGFuZV9mb3JtYXRzOwotCX0KLX0KLQotc3RhdGljIGNvbnN0IHU2NCAqZ2VuMTJfZ2V0X3Bs YW5lX21vZGlmaWVycyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkJCSAg ICBlbnVtIHBsYW5lX2lkIHBsYW5lX2lkKQotewotCWlmIChnZW4xMl9wbGFuZV9zdXBwb3J0c19t Y19jY3MoZGV2X3ByaXYsIHBsYW5lX2lkKSkKLQkJcmV0dXJuIGdlbjEyX3BsYW5lX2Zvcm1hdF9t b2RpZmllcnNfbWNfY2NzOwotCWVsc2UKLQkJcmV0dXJuIGdlbjEyX3BsYW5lX2Zvcm1hdF9tb2Rp ZmllcnNfcmNfY2NzOwotfQotCi1zdGF0aWMgYm9vbCBza2xfcGxhbmVfaGFzX2NjcyhzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkgICAgICBlbnVtIHBpcGUgcGlwZSwgZW51 bSBwbGFuZV9pZCBwbGFuZV9pZCkKLXsKLQlpZiAocGxhbmVfaWQgPT0gUExBTkVfQ1VSU09SKQot CQlyZXR1cm4gZmFsc2U7Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCkKLQkJcmV0 dXJuIHRydWU7Ci0KLQlpZiAoSVNfR0VNSU5JTEFLRShkZXZfcHJpdikpCi0JCXJldHVybiBwaXBl ICE9IFBJUEVfQzsKLQotCXJldHVybiBwaXBlICE9IFBJUEVfQyAmJgotCQkocGxhbmVfaWQgPT0g UExBTkVfUFJJTUFSWSB8fAotCQkgcGxhbmVfaWQgPT0gUExBTkVfU1BSSVRFMCk7Ci19Ci0KLXN0 cnVjdCBpbnRlbF9wbGFuZSAqCi1za2xfdW5pdmVyc2FsX3BsYW5lX2NyZWF0ZShzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkgICBlbnVtIHBpcGUgcGlwZSwgZW51bSBwbGFu ZV9pZCBwbGFuZV9pZCkKLXsKLQljb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzICpwbGFuZV9m dW5jczsKLQlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lOwotCWVudW0gZHJtX3BsYW5lX3R5cGUg cGxhbmVfdHlwZTsKLQl1bnNpZ25lZCBpbnQgc3VwcG9ydGVkX3JvdGF0aW9uczsKLQl1bnNpZ25l ZCBpbnQgc3VwcG9ydGVkX2NzYzsKLQljb25zdCB1NjQgKm1vZGlmaWVyczsKLQljb25zdCB1MzIg KmZvcm1hdHM7Ci0JaW50IG51bV9mb3JtYXRzOwotCWludCByZXQ7Ci0KLQlwbGFuZSA9IGludGVs X3BsYW5lX2FsbG9jKCk7Ci0JaWYgKElTX0VSUihwbGFuZSkpCi0JCXJldHVybiBwbGFuZTsKLQot CXBsYW5lLT5waXBlID0gcGlwZTsKLQlwbGFuZS0+aWQgPSBwbGFuZV9pZDsKLQlwbGFuZS0+ZnJv bnRidWZmZXJfYml0ID0gSU5URUxfRlJPTlRCVUZGRVIocGlwZSwgcGxhbmVfaWQpOwotCi0JcGxh bmUtPmhhc19mYmMgPSBza2xfcGxhbmVfaGFzX2ZiYyhkZXZfcHJpdiwgcGlwZSwgcGxhbmVfaWQp OwotCWlmIChwbGFuZS0+aGFzX2ZiYykgewotCQlzdHJ1Y3QgaW50ZWxfZmJjICpmYmMgPSAmZGV2 X3ByaXYtPmZiYzsKLQotCQlmYmMtPnBvc3NpYmxlX2ZyYW1lYnVmZmVyX2JpdHMgfD0gcGxhbmUt PmZyb250YnVmZmVyX2JpdDsKLQl9Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMSkg ewotCQlwbGFuZS0+bWluX3dpZHRoID0gaWNsX3BsYW5lX21pbl93aWR0aDsKLQkJcGxhbmUtPm1h eF93aWR0aCA9IGljbF9wbGFuZV9tYXhfd2lkdGg7Ci0JCXBsYW5lLT5tYXhfaGVpZ2h0ID0gaWNs X3BsYW5lX21heF9oZWlnaHQ7Ci0JfSBlbHNlIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEw IHx8IElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpKSB7Ci0JCXBsYW5lLT5tYXhfd2lkdGggPSBnbGtf cGxhbmVfbWF4X3dpZHRoOwotCQlwbGFuZS0+bWF4X2hlaWdodCA9IHNrbF9wbGFuZV9tYXhfaGVp Z2h0OwotCX0gZWxzZSB7Ci0JCXBsYW5lLT5tYXhfd2lkdGggPSBza2xfcGxhbmVfbWF4X3dpZHRo OwotCQlwbGFuZS0+bWF4X2hlaWdodCA9IHNrbF9wbGFuZV9tYXhfaGVpZ2h0OwotCX0KLQotCXBs YW5lLT5tYXhfc3RyaWRlID0gc2tsX3BsYW5lX21heF9zdHJpZGU7Ci0JcGxhbmUtPnVwZGF0ZV9w bGFuZSA9IHNrbF91cGRhdGVfcGxhbmU7Ci0JcGxhbmUtPmRpc2FibGVfcGxhbmUgPSBza2xfZGlz YWJsZV9wbGFuZTsKLQlwbGFuZS0+Z2V0X2h3X3N0YXRlID0gc2tsX3BsYW5lX2dldF9od19zdGF0 ZTsKLQlwbGFuZS0+Y2hlY2tfcGxhbmUgPSBza2xfcGxhbmVfY2hlY2s7Ci0JcGxhbmUtPm1pbl9j ZGNsayA9IHNrbF9wbGFuZV9taW5fY2RjbGs7Ci0JcGxhbmUtPmFzeW5jX2ZsaXAgPSBza2xfcGxh bmVfYXN5bmNfZmxpcDsKLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExKQotCQlmb3Jt YXRzID0gaWNsX2dldF9wbGFuZV9mb3JtYXRzKGRldl9wcml2LCBwaXBlLAotCQkJCQkJcGxhbmVf aWQsICZudW1fZm9ybWF0cyk7Ci0JZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCB8 fCBJU19HRU1JTklMQUtFKGRldl9wcml2KSkKLQkJZm9ybWF0cyA9IGdsa19nZXRfcGxhbmVfZm9y bWF0cyhkZXZfcHJpdiwgcGlwZSwKLQkJCQkJCXBsYW5lX2lkLCAmbnVtX2Zvcm1hdHMpOwotCWVs c2UKLQkJZm9ybWF0cyA9IHNrbF9nZXRfcGxhbmVfZm9ybWF0cyhkZXZfcHJpdiwgcGlwZSwKLQkJ CQkJCXBsYW5lX2lkLCAmbnVtX2Zvcm1hdHMpOwotCi0JcGxhbmUtPmhhc19jY3MgPSBza2xfcGxh bmVfaGFzX2NjcyhkZXZfcHJpdiwgcGlwZSwgcGxhbmVfaWQpOwotCWlmIChJTlRFTF9HRU4oZGV2 X3ByaXYpID49IDEyKSB7Ci0JCW1vZGlmaWVycyA9IGdlbjEyX2dldF9wbGFuZV9tb2RpZmllcnMo ZGV2X3ByaXYsIHBsYW5lX2lkKTsKLQkJcGxhbmVfZnVuY3MgPSAmZ2VuMTJfcGxhbmVfZnVuY3M7 Ci0JfSBlbHNlIHsKLQkJaWYgKHBsYW5lLT5oYXNfY2NzKQotCQkJbW9kaWZpZXJzID0gc2tsX3Bs YW5lX2Zvcm1hdF9tb2RpZmllcnNfY2NzOwotCQllbHNlCi0JCQltb2RpZmllcnMgPSBza2xfcGxh bmVfZm9ybWF0X21vZGlmaWVyc19ub2NjczsKLQkJcGxhbmVfZnVuY3MgPSAmc2tsX3BsYW5lX2Z1 bmNzOwotCX0KLQotCWlmIChwbGFuZV9pZCA9PSBQTEFORV9QUklNQVJZKQotCQlwbGFuZV90eXBl ID0gRFJNX1BMQU5FX1RZUEVfUFJJTUFSWTsKLQllbHNlCi0JCXBsYW5lX3R5cGUgPSBEUk1fUExB TkVfVFlQRV9PVkVSTEFZOwotCi0JcmV0ID0gZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KCZkZXZf cHJpdi0+ZHJtLCAmcGxhbmUtPmJhc2UsCi0JCQkJICAgICAgIDAsIHBsYW5lX2Z1bmNzLAotCQkJ CSAgICAgICBmb3JtYXRzLCBudW1fZm9ybWF0cywgbW9kaWZpZXJzLAotCQkJCSAgICAgICBwbGFu ZV90eXBlLAotCQkJCSAgICAgICAicGxhbmUgJWQlYyIsIHBsYW5lX2lkICsgMSwKLQkJCQkgICAg ICAgcGlwZV9uYW1lKHBpcGUpKTsKLQlpZiAocmV0KQotCQlnb3RvIGZhaWw7Ci0KLQlzdXBwb3J0 ZWRfcm90YXRpb25zID0KLQkJRFJNX01PREVfUk9UQVRFXzAgfCBEUk1fTU9ERV9ST1RBVEVfOTAg fAotCQlEUk1fTU9ERV9ST1RBVEVfMTgwIHwgRFJNX01PREVfUk9UQVRFXzI3MDsKLQotCWlmIChJ TlRFTF9HRU4oZGV2X3ByaXYpID49IDEwKQotCQlzdXBwb3J0ZWRfcm90YXRpb25zIHw9IERSTV9N T0RFX1JFRkxFQ1RfWDsKLQotCWRybV9wbGFuZV9jcmVhdGVfcm90YXRpb25fcHJvcGVydHkoJnBs YW5lLT5iYXNlLAotCQkJCQkgICBEUk1fTU9ERV9ST1RBVEVfMCwKLQkJCQkJICAgc3VwcG9ydGVk X3JvdGF0aW9ucyk7Ci0KLQlzdXBwb3J0ZWRfY3NjID0gQklUKERSTV9DT0xPUl9ZQ0JDUl9CVDYw MSkgfCBCSVQoRFJNX0NPTE9SX1lDQkNSX0JUNzA5KTsKLQotCWlmIChJTlRFTF9HRU4oZGV2X3By aXYpID49IDEwIHx8IElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpKQotCQlzdXBwb3J0ZWRfY3NjIHw9 IEJJVChEUk1fQ09MT1JfWUNCQ1JfQlQyMDIwKTsKLQotCWRybV9wbGFuZV9jcmVhdGVfY29sb3Jf cHJvcGVydGllcygmcGxhbmUtPmJhc2UsCi0JCQkJCSAgc3VwcG9ydGVkX2NzYywKLQkJCQkJICBC SVQoRFJNX0NPTE9SX1lDQkNSX0xJTUlURURfUkFOR0UpIHwKLQkJCQkJICBCSVQoRFJNX0NPTE9S X1lDQkNSX0ZVTExfUkFOR0UpLAotCQkJCQkgIERSTV9DT0xPUl9ZQ0JDUl9CVDcwOSwKLQkJCQkJ ICBEUk1fQ09MT1JfWUNCQ1JfTElNSVRFRF9SQU5HRSk7Ci0KLQlkcm1fcGxhbmVfY3JlYXRlX2Fs cGhhX3Byb3BlcnR5KCZwbGFuZS0+YmFzZSk7Ci0JZHJtX3BsYW5lX2NyZWF0ZV9ibGVuZF9tb2Rl X3Byb3BlcnR5KCZwbGFuZS0+YmFzZSwKLQkJCQkJICAgICBCSVQoRFJNX01PREVfQkxFTkRfUElY RUxfTk9ORSkgfAotCQkJCQkgICAgIEJJVChEUk1fTU9ERV9CTEVORF9QUkVNVUxUSSkgfAotCQkJ CQkgICAgIEJJVChEUk1fTU9ERV9CTEVORF9DT1ZFUkFHRSkpOwotCi0JZHJtX3BsYW5lX2NyZWF0 ZV96cG9zX2ltbXV0YWJsZV9wcm9wZXJ0eSgmcGxhbmUtPmJhc2UsIHBsYW5lX2lkKTsKLQotCWlm IChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEyKQotCQlkcm1fcGxhbmVfZW5hYmxlX2ZiX2RhbWFn ZV9jbGlwcygmcGxhbmUtPmJhc2UpOwotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTAp Ci0JCWRybV9wbGFuZV9jcmVhdGVfc2NhbGluZ19maWx0ZXJfcHJvcGVydHkoJnBsYW5lLT5iYXNl LAotCQkJCQkJQklUKERSTV9TQ0FMSU5HX0ZJTFRFUl9ERUZBVUxUKSB8Ci0JCQkJCQlCSVQoRFJN X1NDQUxJTkdfRklMVEVSX05FQVJFU1RfTkVJR0hCT1IpKTsKLQotCWRybV9wbGFuZV9oZWxwZXJf YWRkKCZwbGFuZS0+YmFzZSwgJmludGVsX3BsYW5lX2hlbHBlcl9mdW5jcyk7Ci0KLQlyZXR1cm4g cGxhbmU7Ci0KLWZhaWw6Ci0JaW50ZWxfcGxhbmVfZnJlZShwbGFuZSk7Ci0KLQlyZXR1cm4gRVJS X1BUUihyZXQpOwotfQotCiBzdHJ1Y3QgaW50ZWxfcGxhbmUgKgogaW50ZWxfc3ByaXRlX3BsYW5l X2NyZWF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCQkgIGVudW0gcGlw ZSBwaXBlLCBpbnQgc3ByaXRlKQpAQCAtMzM4OSwxMCArMjA2MCw2IEBAIGludGVsX3Nwcml0ZV9w bGFuZV9jcmVhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCWludCBudW1f Zm9ybWF0czsKIAlpbnQgcmV0LCB6cG9zOwogCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0g OSkKLQkJcmV0dXJuIHNrbF91bml2ZXJzYWxfcGxhbmVfY3JlYXRlKGRldl9wcml2LCBwaXBlLAot CQkJCQkJICBQTEFORV9TUFJJVEUwICsgc3ByaXRlKTsKLQogCXBsYW5lID0gaW50ZWxfcGxhbmVf YWxsb2MoKTsKIAlpZiAoSVNfRVJSKHBsYW5lKSkKIAkJcmV0dXJuIHBsYW5lOwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9zcHJpdGUuaCBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfc3ByaXRlLmgKaW5kZXggNzYxMjZkZDhkNTg0Li40 MTg4OTdmOTUzZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50 ZWxfc3ByaXRlLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9zcHJp dGUuaApAQCAtMzgsOSArMzgsNiBAQCB2b2lkIGludGVsX3BpcGVfdXBkYXRlX2VuZChzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqbmV3X2NydGNfc3RhdGUpOwogaW50IGludGVsX3BsYW5lX2NoZWNr X3N0cmlkZShjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKTsKIGlu dCBpbnRlbF9wbGFuZV9jaGVja19zcmNfY29vcmRpbmF0ZXMoc3RydWN0IGludGVsX3BsYW5lX3N0 YXRlICpwbGFuZV9zdGF0ZSk7CiBpbnQgY2h2X3BsYW5lX2NoZWNrX3JvdGF0aW9uKGNvbnN0IHN0 cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpOwotc3RydWN0IGludGVsX3BsYW5l ICoKLXNrbF91bml2ZXJzYWxfcGxhbmVfY3JlYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwKLQkJCSAgIGVudW0gcGlwZSBwaXBlLCBlbnVtIHBsYW5lX2lkIHBsYW5lX2lkKTsK IAogc3RhdGljIGlubGluZSB1OCBpY2xfaGRyX3BsYW5lX21hc2sodm9pZCkKIHsKQEAgLTU5LDQg KzU2LDcgQEAgaW50IGhzd19wbGFuZV9taW5fY2RjbGsoY29uc3Qgc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNydGNfc3RhdGUsCiBpbnQgdmx2X3BsYW5lX21pbl9jZGNsayhjb25zdCBzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKIAkJCWNvbnN0IHN0cnVjdCBpbnRlbF9wbGFu ZV9zdGF0ZSAqcGxhbmVfc3RhdGUpOwogCit2b2lkIHNrbF9wcm9ncmFtX3NjYWxlcihzdHJ1Y3Qg aW50ZWxfcGxhbmUgKnBsYW5lLAorCQkJY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNy dGNfc3RhdGUsCisJCQljb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRl KTsKICNlbmRpZiAvKiBfX0lOVEVMX1NQUklURV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvc2tsX3VuaXZlcnNhbF9wbGFuZS5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZGlzcGxheS9za2xfdW5pdmVyc2FsX3BsYW5lLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAwLi42OGM4Yzg4ZDBhY2QKLS0tIC9kZXYvbnVsbAorKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L3NrbF91bml2ZXJzYWxfcGxhbmUuYwpAQCAtMCww ICsxLDIyNDIgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKKy8qCisgKiBDb3B5 cmlnaHQgwqkgMjAyMCBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJt X2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2RhbWFnZV9oZWxwZXIuaD4KKyNp bmNsdWRlIDxkcm0vZHJtX2ZvdXJjYy5oPgorI2luY2x1ZGUgPGRybS9kcm1fcGxhbmVfaGVscGVy Lmg+CisKKyNpbmNsdWRlICJpOTE1X2Rydi5oIgorI2luY2x1ZGUgImludGVsX2F0b21pY19wbGFu ZS5oIgorI2luY2x1ZGUgImludGVsX2Rpc3BsYXlfdHlwZXMuaCIKKyNpbmNsdWRlICJpbnRlbF9w bS5oIgorI2luY2x1ZGUgImludGVsX3Bzci5oIgorI2luY2x1ZGUgImludGVsX3Nwcml0ZS5oIgor I2luY2x1ZGUgInNrbF91bml2ZXJzYWxfcGxhbmUuaCIKKworc3RhdGljIGNvbnN0IHUzMiBza2xf cGxhbmVfZm9ybWF0c1tdID0geworCURSTV9GT1JNQVRfQzgsCisJRFJNX0ZPUk1BVF9SR0I1NjUs CisJRFJNX0ZPUk1BVF9YUkdCODg4OCwKKwlEUk1fRk9STUFUX1hCR1I4ODg4LAorCURSTV9GT1JN QVRfQVJHQjg4ODgsCisJRFJNX0ZPUk1BVF9BQkdSODg4OCwKKwlEUk1fRk9STUFUX1hSR0IyMTAx MDEwLAorCURSTV9GT1JNQVRfWEJHUjIxMDEwMTAsCisJRFJNX0ZPUk1BVF9YUkdCMTYxNjE2MTZG LAorCURSTV9GT1JNQVRfWEJHUjE2MTYxNjE2RiwKKwlEUk1fRk9STUFUX1lVWVYsCisJRFJNX0ZP Uk1BVF9ZVllVLAorCURSTV9GT1JNQVRfVVlWWSwKKwlEUk1fRk9STUFUX1ZZVVksCisJRFJNX0ZP Uk1BVF9YWVVWODg4OCwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgc2tsX3BsYW5hcl9mb3JtYXRz W10gPSB7CisJRFJNX0ZPUk1BVF9DOCwKKwlEUk1fRk9STUFUX1JHQjU2NSwKKwlEUk1fRk9STUFU X1hSR0I4ODg4LAorCURSTV9GT1JNQVRfWEJHUjg4ODgsCisJRFJNX0ZPUk1BVF9BUkdCODg4OCwK KwlEUk1fRk9STUFUX0FCR1I4ODg4LAorCURSTV9GT1JNQVRfWFJHQjIxMDEwMTAsCisJRFJNX0ZP Uk1BVF9YQkdSMjEwMTAxMCwKKwlEUk1fRk9STUFUX1hSR0IxNjE2MTYxNkYsCisJRFJNX0ZPUk1B VF9YQkdSMTYxNjE2MTZGLAorCURSTV9GT1JNQVRfWVVZViwKKwlEUk1fRk9STUFUX1lWWVUsCisJ RFJNX0ZPUk1BVF9VWVZZLAorCURSTV9GT1JNQVRfVllVWSwKKwlEUk1fRk9STUFUX05WMTIsCisJ RFJNX0ZPUk1BVF9YWVVWODg4OCwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgZ2xrX3BsYW5hcl9m b3JtYXRzW10gPSB7CisJRFJNX0ZPUk1BVF9DOCwKKwlEUk1fRk9STUFUX1JHQjU2NSwKKwlEUk1f Rk9STUFUX1hSR0I4ODg4LAorCURSTV9GT1JNQVRfWEJHUjg4ODgsCisJRFJNX0ZPUk1BVF9BUkdC ODg4OCwKKwlEUk1fRk9STUFUX0FCR1I4ODg4LAorCURSTV9GT1JNQVRfWFJHQjIxMDEwMTAsCisJ RFJNX0ZPUk1BVF9YQkdSMjEwMTAxMCwKKwlEUk1fRk9STUFUX1hSR0IxNjE2MTYxNkYsCisJRFJN X0ZPUk1BVF9YQkdSMTYxNjE2MTZGLAorCURSTV9GT1JNQVRfWVVZViwKKwlEUk1fRk9STUFUX1lW WVUsCisJRFJNX0ZPUk1BVF9VWVZZLAorCURSTV9GT1JNQVRfVllVWSwKKwlEUk1fRk9STUFUX05W MTIsCisJRFJNX0ZPUk1BVF9YWVVWODg4OCwKKwlEUk1fRk9STUFUX1AwMTAsCisJRFJNX0ZPUk1B VF9QMDEyLAorCURSTV9GT1JNQVRfUDAxNiwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgaWNsX3Nk cl95X3BsYW5lX2Zvcm1hdHNbXSA9IHsKKwlEUk1fRk9STUFUX0M4LAorCURSTV9GT1JNQVRfUkdC NTY1LAorCURSTV9GT1JNQVRfWFJHQjg4ODgsCisJRFJNX0ZPUk1BVF9YQkdSODg4OCwKKwlEUk1f Rk9STUFUX0FSR0I4ODg4LAorCURSTV9GT1JNQVRfQUJHUjg4ODgsCisJRFJNX0ZPUk1BVF9YUkdC MjEwMTAxMCwKKwlEUk1fRk9STUFUX1hCR1IyMTAxMDEwLAorCURSTV9GT1JNQVRfQVJHQjIxMDEw MTAsCisJRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMCwKKwlEUk1fRk9STUFUX1lVWVYsCisJRFJNX0ZP Uk1BVF9ZVllVLAorCURSTV9GT1JNQVRfVVlWWSwKKwlEUk1fRk9STUFUX1ZZVVksCisJRFJNX0ZP Uk1BVF9ZMjEwLAorCURSTV9GT1JNQVRfWTIxMiwKKwlEUk1fRk9STUFUX1kyMTYsCisJRFJNX0ZP Uk1BVF9YWVVWODg4OCwKKwlEUk1fRk9STUFUX1hWWVUyMTAxMDEwLAorCURSTV9GT1JNQVRfWFZZ VTEyXzE2MTYxNjE2LAorCURSTV9GT1JNQVRfWFZZVTE2MTYxNjE2LAorfTsKKworc3RhdGljIGNv bnN0IHUzMiBpY2xfc2RyX3V2X3BsYW5lX2Zvcm1hdHNbXSA9IHsKKwlEUk1fRk9STUFUX0M4LAor CURSTV9GT1JNQVRfUkdCNTY1LAorCURSTV9GT1JNQVRfWFJHQjg4ODgsCisJRFJNX0ZPUk1BVF9Y QkdSODg4OCwKKwlEUk1fRk9STUFUX0FSR0I4ODg4LAorCURSTV9GT1JNQVRfQUJHUjg4ODgsCisJ RFJNX0ZPUk1BVF9YUkdCMjEwMTAxMCwKKwlEUk1fRk9STUFUX1hCR1IyMTAxMDEwLAorCURSTV9G T1JNQVRfQVJHQjIxMDEwMTAsCisJRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMCwKKwlEUk1fRk9STUFU X1lVWVYsCisJRFJNX0ZPUk1BVF9ZVllVLAorCURSTV9GT1JNQVRfVVlWWSwKKwlEUk1fRk9STUFU X1ZZVVksCisJRFJNX0ZPUk1BVF9OVjEyLAorCURSTV9GT1JNQVRfUDAxMCwKKwlEUk1fRk9STUFU X1AwMTIsCisJRFJNX0ZPUk1BVF9QMDE2LAorCURSTV9GT1JNQVRfWTIxMCwKKwlEUk1fRk9STUFU X1kyMTIsCisJRFJNX0ZPUk1BVF9ZMjE2LAorCURSTV9GT1JNQVRfWFlVVjg4ODgsCisJRFJNX0ZP Uk1BVF9YVllVMjEwMTAxMCwKKwlEUk1fRk9STUFUX1hWWVUxMl8xNjE2MTYxNiwKKwlEUk1fRk9S TUFUX1hWWVUxNjE2MTYxNiwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgaWNsX2hkcl9wbGFuZV9m b3JtYXRzW10gPSB7CisJRFJNX0ZPUk1BVF9DOCwKKwlEUk1fRk9STUFUX1JHQjU2NSwKKwlEUk1f Rk9STUFUX1hSR0I4ODg4LAorCURSTV9GT1JNQVRfWEJHUjg4ODgsCisJRFJNX0ZPUk1BVF9BUkdC ODg4OCwKKwlEUk1fRk9STUFUX0FCR1I4ODg4LAorCURSTV9GT1JNQVRfWFJHQjIxMDEwMTAsCisJ RFJNX0ZPUk1BVF9YQkdSMjEwMTAxMCwKKwlEUk1fRk9STUFUX0FSR0IyMTAxMDEwLAorCURSTV9G T1JNQVRfQUJHUjIxMDEwMTAsCisJRFJNX0ZPUk1BVF9YUkdCMTYxNjE2MTZGLAorCURSTV9GT1JN QVRfWEJHUjE2MTYxNjE2RiwKKwlEUk1fRk9STUFUX0FSR0IxNjE2MTYxNkYsCisJRFJNX0ZPUk1B VF9BQkdSMTYxNjE2MTZGLAorCURSTV9GT1JNQVRfWVVZViwKKwlEUk1fRk9STUFUX1lWWVUsCisJ RFJNX0ZPUk1BVF9VWVZZLAorCURSTV9GT1JNQVRfVllVWSwKKwlEUk1fRk9STUFUX05WMTIsCisJ RFJNX0ZPUk1BVF9QMDEwLAorCURSTV9GT1JNQVRfUDAxMiwKKwlEUk1fRk9STUFUX1AwMTYsCisJ RFJNX0ZPUk1BVF9ZMjEwLAorCURSTV9GT1JNQVRfWTIxMiwKKwlEUk1fRk9STUFUX1kyMTYsCisJ RFJNX0ZPUk1BVF9YWVVWODg4OCwKKwlEUk1fRk9STUFUX1hWWVUyMTAxMDEwLAorCURSTV9GT1JN QVRfWFZZVTEyXzE2MTYxNjE2LAorCURSTV9GT1JNQVRfWFZZVTE2MTYxNjE2LAorfTsKKworc3Rh dGljIGNvbnN0IHU2NCBza2xfcGxhbmVfZm9ybWF0X21vZGlmaWVyc19ub2Njc1tdID0geworCUk5 MTVfRk9STUFUX01PRF9ZZl9USUxFRCwKKwlJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCwKKwlJOTE1 X0ZPUk1BVF9NT0RfWF9USUxFRCwKKwlEUk1fRk9STUFUX01PRF9MSU5FQVIsCisJRFJNX0ZPUk1B VF9NT0RfSU5WQUxJRAorfTsKKworc3RhdGljIGNvbnN0IHU2NCBza2xfcGxhbmVfZm9ybWF0X21v ZGlmaWVyc19jY3NbXSA9IHsKKwlJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NTLAorCUk5MTVf Rk9STUFUX01PRF9ZX1RJTEVEX0NDUywKKwlJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQsCisJSTkx NV9GT1JNQVRfTU9EX1lfVElMRUQsCisJSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQsCisJRFJNX0ZP Uk1BVF9NT0RfTElORUFSLAorCURSTV9GT1JNQVRfTU9EX0lOVkFMSUQKK307CisKK3N0YXRpYyBj b25zdCB1NjQgZ2VuMTJfcGxhbmVfZm9ybWF0X21vZGlmaWVyc19tY19jY3NbXSA9IHsKKwlJOTE1 X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9NQ19DQ1MsCisJSTkxNV9GT1JNQVRfTU9EX1lfVElM RURfR0VOMTJfUkNfQ0NTLAorCUk5MTVfRk9STUFUX01PRF9ZX1RJTEVELAorCUk5MTVfRk9STUFU X01PRF9YX1RJTEVELAorCURSTV9GT1JNQVRfTU9EX0xJTkVBUiwKKwlEUk1fRk9STUFUX01PRF9J TlZBTElECit9OworCitzdGF0aWMgY29uc3QgdTY0IGdlbjEyX3BsYW5lX2Zvcm1hdF9tb2RpZmll cnNfcmNfY2NzW10gPSB7CisJSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfUkNfQ0NTLAor CUk5MTVfRk9STUFUX01PRF9ZX1RJTEVELAorCUk5MTVfRk9STUFUX01PRF9YX1RJTEVELAorCURS TV9GT1JNQVRfTU9EX0xJTkVBUiwKKwlEUk1fRk9STUFUX01PRF9JTlZBTElECit9OworCitpbnQg c2tsX2Zvcm1hdF90b19mb3VyY2MoaW50IGZvcm1hdCwgYm9vbCByZ2Jfb3JkZXIsIGJvb2wgYWxw aGEpCit7CisJc3dpdGNoIChmb3JtYXQpIHsKKwljYXNlIFBMQU5FX0NUTF9GT1JNQVRfUkdCXzU2 NToKKwkJcmV0dXJuIERSTV9GT1JNQVRfUkdCNTY1OworCWNhc2UgUExBTkVfQ1RMX0ZPUk1BVF9O VjEyOgorCQlyZXR1cm4gRFJNX0ZPUk1BVF9OVjEyOworCWNhc2UgUExBTkVfQ1RMX0ZPUk1BVF9Y WVVWOgorCQlyZXR1cm4gRFJNX0ZPUk1BVF9YWVVWODg4ODsKKwljYXNlIFBMQU5FX0NUTF9GT1JN QVRfUDAxMDoKKwkJcmV0dXJuIERSTV9GT1JNQVRfUDAxMDsKKwljYXNlIFBMQU5FX0NUTF9GT1JN QVRfUDAxMjoKKwkJcmV0dXJuIERSTV9GT1JNQVRfUDAxMjsKKwljYXNlIFBMQU5FX0NUTF9GT1JN QVRfUDAxNjoKKwkJcmV0dXJuIERSTV9GT1JNQVRfUDAxNjsKKwljYXNlIFBMQU5FX0NUTF9GT1JN QVRfWTIxMDoKKwkJcmV0dXJuIERSTV9GT1JNQVRfWTIxMDsKKwljYXNlIFBMQU5FX0NUTF9GT1JN QVRfWTIxMjoKKwkJcmV0dXJuIERSTV9GT1JNQVRfWTIxMjsKKwljYXNlIFBMQU5FX0NUTF9GT1JN QVRfWTIxNjoKKwkJcmV0dXJuIERSTV9GT1JNQVRfWTIxNjsKKwljYXNlIFBMQU5FX0NUTF9GT1JN QVRfWTQxMDoKKwkJcmV0dXJuIERSTV9GT1JNQVRfWFZZVTIxMDEwMTA7CisJY2FzZSBQTEFORV9D VExfRk9STUFUX1k0MTI6CisJCXJldHVybiBEUk1fRk9STUFUX1hWWVUxMl8xNjE2MTYxNjsKKwlj YXNlIFBMQU5FX0NUTF9GT1JNQVRfWTQxNjoKKwkJcmV0dXJuIERSTV9GT1JNQVRfWFZZVTE2MTYx NjE2OworCWRlZmF1bHQ6CisJY2FzZSBQTEFORV9DVExfRk9STUFUX1hSR0JfODg4ODoKKwkJaWYg KHJnYl9vcmRlcikgeworCQkJaWYgKGFscGhhKQorCQkJCXJldHVybiBEUk1fRk9STUFUX0FCR1I4 ODg4OworCQkJZWxzZQorCQkJCXJldHVybiBEUk1fRk9STUFUX1hCR1I4ODg4OworCQl9IGVsc2Ug eworCQkJaWYgKGFscGhhKQorCQkJCXJldHVybiBEUk1fRk9STUFUX0FSR0I4ODg4OworCQkJZWxz ZQorCQkJCXJldHVybiBEUk1fRk9STUFUX1hSR0I4ODg4OworCQl9CisJY2FzZSBQTEFORV9DVExf Rk9STUFUX1hSR0JfMjEwMTAxMDoKKwkJaWYgKHJnYl9vcmRlcikgeworCQkJaWYgKGFscGhhKQor CQkJCXJldHVybiBEUk1fRk9STUFUX0FCR1IyMTAxMDEwOworCQkJZWxzZQorCQkJCXJldHVybiBE Uk1fRk9STUFUX1hCR1IyMTAxMDEwOworCQl9IGVsc2UgeworCQkJaWYgKGFscGhhKQorCQkJCXJl dHVybiBEUk1fRk9STUFUX0FSR0IyMTAxMDEwOworCQkJZWxzZQorCQkJCXJldHVybiBEUk1fRk9S TUFUX1hSR0IyMTAxMDEwOworCQl9CisJY2FzZSBQTEFORV9DVExfRk9STUFUX1hSR0JfMTYxNjE2 MTZGOgorCQlpZiAocmdiX29yZGVyKSB7CisJCQlpZiAoYWxwaGEpCisJCQkJcmV0dXJuIERSTV9G T1JNQVRfQUJHUjE2MTYxNjE2RjsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gRFJNX0ZPUk1BVF9YQkdS MTYxNjE2MTZGOworCQl9IGVsc2UgeworCQkJaWYgKGFscGhhKQorCQkJCXJldHVybiBEUk1fRk9S TUFUX0FSR0IxNjE2MTYxNkY7CisJCQllbHNlCisJCQkJcmV0dXJuIERSTV9GT1JNQVRfWFJHQjE2 MTYxNjE2RjsKKwkJfQorCX0KK30KKworc3RhdGljIHU4IGljbF9udjEyX3lfcGxhbmVfbWFzayhz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKK3sKKwlpZiAoSVNfUk9DS0VUTEFLRShpOTE1 KSkKKwkJcmV0dXJuIEJJVChQTEFORV9TUFJJVEUyKSB8IEJJVChQTEFORV9TUFJJVEUzKTsKKwll bHNlCisJCXJldHVybiBCSVQoUExBTkVfU1BSSVRFNCkgfCBCSVQoUExBTkVfU1BSSVRFNSk7Cit9 CisKK2Jvb2wgaWNsX2lzX252MTJfeV9wbGFuZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYsCisJCQkgZW51bSBwbGFuZV9pZCBwbGFuZV9pZCkKK3sKKwlyZXR1cm4gSU5URUxfR0VO KGRldl9wcml2KSA+PSAxMSAmJgorCQlpY2xfbnYxMl95X3BsYW5lX21hc2soZGV2X3ByaXYpICYg QklUKHBsYW5lX2lkKTsKK30KKworYm9vbCBpY2xfaXNfaGRyX3BsYW5lKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiwgZW51bSBwbGFuZV9pZCBwbGFuZV9pZCkKK3sKKwlyZXR1cm4g SU5URUxfR0VOKGRldl9wcml2KSA+PSAxMSAmJgorCQlpY2xfaGRyX3BsYW5lX21hc2soKSAmIEJJ VChwbGFuZV9pZCk7Cit9CisKK3N0YXRpYyB2b2lkCitza2xfcGxhbmVfcmF0aW8oY29uc3Qgc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCWNvbnN0IHN0cnVjdCBpbnRlbF9w bGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUsCisJCXVuc2lnbmVkIGludCAqbnVtLCB1bnNpZ25lZCBp bnQgKmRlbikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1 KHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lLT5kZXYpOworCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOworCisJaWYgKGZiLT5mb3JtYXQtPmNwcFsw XSA9PSA4KSB7CisJCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwIHx8IElTX0dFTUlOSUxB S0UoZGV2X3ByaXYpKSB7CisJCQkqbnVtID0gMTA7CisJCQkqZGVuID0gODsKKwkJfSBlbHNlIHsK KwkJCSpudW0gPSA5OworCQkJKmRlbiA9IDg7CisJCX0KKwl9IGVsc2UgeworCQkqbnVtID0gMTsK KwkJKmRlbiA9IDE7CisJfQorfQorCitzdGF0aWMgaW50IHNrbF9wbGFuZV9taW5fY2RjbGsoY29u c3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCQkgICAgICAgY29uc3Qg c3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lLT5k ZXYpOworCXVuc2lnbmVkIGludCBudW0sIGRlbjsKKwl1bnNpZ25lZCBpbnQgcGl4ZWxfcmF0ZSA9 IGludGVsX3BsYW5lX3BpeGVsX3JhdGUoY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUpOworCisJc2ts X3BsYW5lX3JhdGlvKGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlLCAmbnVtLCAmZGVuKTsKKworCS8q IHR3byBwaXhlbHMgcGVyIGNsb2NrIG9uIGdsaysgKi8KKwlpZiAoSU5URUxfR0VOKGRldl9wcml2 KSA+PSAxMCB8fCBJU19HRU1JTklMQUtFKGRldl9wcml2KSkKKwkJZGVuICo9IDI7CisKKwlyZXR1 cm4gRElWX1JPVU5EX1VQKHBpeGVsX3JhdGUgKiBudW0sIGRlbik7Cit9CisKK3N0YXRpYyBpbnQg c2tsX3BsYW5lX21heF93aWR0aChjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwkJ CSAgICAgICBpbnQgY29sb3JfcGxhbmUsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHJvdGF0aW9u KQoreworCWludCBjcHAgPSBmYi0+Zm9ybWF0LT5jcHBbY29sb3JfcGxhbmVdOworCisJc3dpdGNo IChmYi0+bW9kaWZpZXIpIHsKKwljYXNlIERSTV9GT1JNQVRfTU9EX0xJTkVBUjoKKwljYXNlIEk5 MTVfRk9STUFUX01PRF9YX1RJTEVEOgorCQkvKgorCQkgKiBWYWxpZGF0ZWQgbGltaXQgaXMgNGss IGJ1dCBoYXMgNWsgc2hvdWxkCisJCSAqIHdvcmsgYXBhcnQgZnJvbSB0aGUgZm9sbG93aW5nIGZl YXR1cmVzOgorCQkgKiAtIFl0aWxlIChhbHJlYWR5IGxpbWl0ZWQgdG8gNGspCisJCSAqIC0gRlAx NiAoYWxyZWFkeSBsaW1pdGVkIHRvIDRrKQorCQkgKiAtIHJlbmRlciBjb21wcmVzc2lvbiAoYWxy ZWFkeSBsaW1pdGVkIHRvIDRrKQorCQkgKiAtIEtWTVIgc3ByaXRlIGFuZCBjdXJzb3IgKGRvbid0 IGNhcmUpCisJCSAqIC0gaG9yaXpvbnRhbCBwYW5uaW5nIChUT0RPIHZlcmlmeSB0aGlzKQorCQkg KiAtIHBpcGUgYW5kIHBsYW5lIHNjYWxpbmcgKFRPRE8gdmVyaWZ5IHRoaXMpCisJCSAqLworCQlp ZiAoY3BwID09IDgpCisJCQlyZXR1cm4gNDA5NjsKKwkJZWxzZQorCQkJcmV0dXJuIDUxMjA7CisJ Y2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1M6CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0Rf WWZfVElMRURfQ0NTOgorCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfTUNfQ0NT OgorCQkvKiBGSVhNRSBBVVggcGxhbmU/ICovCisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxF RDoKKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRDoKKwkJaWYgKGNwcCA9PSA4KQorCQkJ cmV0dXJuIDIwNDg7CisJCWVsc2UKKwkJCXJldHVybiA0MDk2OworCWRlZmF1bHQ6CisJCU1JU1NJ TkdfQ0FTRShmYi0+bW9kaWZpZXIpOworCQlyZXR1cm4gMjA0ODsKKwl9Cit9CisKK3N0YXRpYyBp bnQgZ2xrX3BsYW5lX21heF93aWR0aChjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwK KwkJCSAgICAgICBpbnQgY29sb3JfcGxhbmUsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHJvdGF0 aW9uKQoreworCWludCBjcHAgPSBmYi0+Zm9ybWF0LT5jcHBbY29sb3JfcGxhbmVdOworCisJc3dp dGNoIChmYi0+bW9kaWZpZXIpIHsKKwljYXNlIERSTV9GT1JNQVRfTU9EX0xJTkVBUjoKKwljYXNl IEk5MTVfRk9STUFUX01PRF9YX1RJTEVEOgorCQlpZiAoY3BwID09IDgpCisJCQlyZXR1cm4gNDA5 NjsKKwkJZWxzZQorCQkJcmV0dXJuIDUxMjA7CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxF RF9DQ1M6CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NTOgorCQkvKiBGSVhNRSBB VVggcGxhbmU/ICovCisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRDoKKwljYXNlIEk5MTVf Rk9STUFUX01PRF9ZZl9USUxFRDoKKwkJaWYgKGNwcCA9PSA4KQorCQkJcmV0dXJuIDIwNDg7CisJ CWVsc2UKKwkJCXJldHVybiA1MTIwOworCWRlZmF1bHQ6CisJCU1JU1NJTkdfQ0FTRShmYi0+bW9k aWZpZXIpOworCQlyZXR1cm4gMjA0ODsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaWNsX3BsYW5lX21p bl93aWR0aChjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwkJCSAgICAgICBpbnQg Y29sb3JfcGxhbmUsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHJvdGF0aW9uKQoreworCS8qIFdh XzE0MDExMjY0NjU3LCBXYV8xNDAxMTA1MDU2MzogZ2VuMTErICovCisJc3dpdGNoIChmYi0+Zm9y bWF0LT5mb3JtYXQpIHsKKwljYXNlIERSTV9GT1JNQVRfQzg6CisJCXJldHVybiAxODsKKwljYXNl IERSTV9GT1JNQVRfUkdCNTY1OgorCQlyZXR1cm4gMTA7CisJY2FzZSBEUk1fRk9STUFUX1hSR0I4 ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9YQkdSODg4ODoKKwljYXNlIERSTV9GT1JNQVRfQVJHQjg4 ODg6CisJY2FzZSBEUk1fRk9STUFUX0FCR1I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMjEw MTAxMDoKKwljYXNlIERSTV9GT1JNQVRfWEJHUjIxMDEwMTA6CisJY2FzZSBEUk1fRk9STUFUX0FS R0IyMTAxMDEwOgorCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMDoKKwljYXNlIERSTV9GT1JN QVRfWFZZVTIxMDEwMTA6CisJY2FzZSBEUk1fRk9STUFUX1kyMTI6CisJY2FzZSBEUk1fRk9STUFU X1kyMTY6CisJCXJldHVybiA2OworCWNhc2UgRFJNX0ZPUk1BVF9OVjEyOgorCQlyZXR1cm4gMjA7 CisJY2FzZSBEUk1fRk9STUFUX1AwMTA6CisJY2FzZSBEUk1fRk9STUFUX1AwMTI6CisJY2FzZSBE Uk1fRk9STUFUX1AwMTY6CisJCXJldHVybiAxMjsKKwljYXNlIERSTV9GT1JNQVRfWFJHQjE2MTYx NjE2RjoKKwljYXNlIERSTV9GT1JNQVRfWEJHUjE2MTYxNjE2RjoKKwljYXNlIERSTV9GT1JNQVRf QVJHQjE2MTYxNjE2RjoKKwljYXNlIERSTV9GT1JNQVRfQUJHUjE2MTYxNjE2RjoKKwljYXNlIERS TV9GT1JNQVRfWFZZVTEyXzE2MTYxNjE2OgorCWNhc2UgRFJNX0ZPUk1BVF9YVllVMTYxNjE2MTY6 CisJCXJldHVybiA0OworCWRlZmF1bHQ6CisJCXJldHVybiAxOworCX0KK30KKworc3RhdGljIGlu dCBpY2xfcGxhbmVfbWF4X3dpZHRoKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAor CQkJICAgICAgIGludCBjb2xvcl9wbGFuZSwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgcm90YXRp b24pCit7CisJcmV0dXJuIDUxMjA7Cit9CisKK3N0YXRpYyBpbnQgc2tsX3BsYW5lX21heF9oZWln aHQoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJCQkJaW50IGNvbG9yX3BsYW5l LAorCQkJCXVuc2lnbmVkIGludCByb3RhdGlvbikKK3sKKwlyZXR1cm4gNDA5NjsKK30KKworc3Rh dGljIGludCBpY2xfcGxhbmVfbWF4X2hlaWdodChjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYiwKKwkJCQlpbnQgY29sb3JfcGxhbmUsCisJCQkJdW5zaWduZWQgaW50IHJvdGF0aW9uKQor eworCXJldHVybiA0MzIwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50Citza2xfcGxhbmVfbWF4 X3N0cmlkZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAorCQkgICAgIHUzMiBwaXhlbF9mb3Jt YXQsIHU2NCBtb2RpZmllciwKKwkJICAgICB1bnNpZ25lZCBpbnQgcm90YXRpb24pCit7CisJY29u c3Qgc3RydWN0IGRybV9mb3JtYXRfaW5mbyAqaW5mbyA9IGRybV9mb3JtYXRfaW5mbyhwaXhlbF9m b3JtYXQpOworCWludCBjcHAgPSBpbmZvLT5jcHBbMF07CisKKwkvKgorCSAqICJUaGUgc3RyaWRl IGluIGJ5dGVzIG11c3Qgbm90IGV4Y2VlZCB0aGUKKwkgKiBvZiB0aGUgc2l6ZSBvZiA4SyBwaXhl bHMgYW5kIDMySyBieXRlcy4iCisJICovCisJaWYgKGRybV9yb3RhdGlvbl85MF9vcl8yNzAocm90 YXRpb24pKQorCQlyZXR1cm4gbWluKDgxOTIsIDMyNzY4IC8gY3BwKTsKKwllbHNlCisJCXJldHVy biBtaW4oODE5MiAqIGNwcCwgMzI3NjgpOworfQorCisKKy8qIFByZW9mZnNldCB2YWx1ZXMgZm9y IFlVViB0byBSR0IgQ29udmVyc2lvbiAqLworI2RlZmluZSBQUkVPRkZfWVVWX1RPX1JHQl9ISQkJ MHgxODAwCisjZGVmaW5lIFBSRU9GRl9ZVVZfVE9fUkdCX01FCQkweDFGMDAKKyNkZWZpbmUgUFJF T0ZGX1lVVl9UT19SR0JfTE8JCTB4MTgwMAorCisjZGVmaW5lICBST0ZGKHgpICAgICAgICAgICgo KHgpICYgMHhmZmZmKSA8PCAxNikKKyNkZWZpbmUgIEdPRkYoeCkgICAgICAgICAgKCgoeCkgJiAw eGZmZmYpIDw8IDApCisjZGVmaW5lICBCT0ZGKHgpICAgICAgICAgICgoKHgpICYgMHhmZmZmKSA8 PCAxNikKKworc3RhdGljIHZvaWQKK2ljbF9wcm9ncmFtX2lucHV0X2NzYyhzdHJ1Y3QgaW50ZWxf cGxhbmUgKnBsYW5lLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZSwKKwkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9z dGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBs YW5lLT5iYXNlLmRldik7CisJZW51bSBwaXBlIHBpcGUgPSBwbGFuZS0+cGlwZTsKKwllbnVtIHBs YW5lX2lkIHBsYW5lX2lkID0gcGxhbmUtPmlkOworCisJc3RhdGljIGNvbnN0IHUxNiBpbnB1dF9j c2NfbWF0cml4W11bOV0gPSB7CisJCS8qCisJCSAqIEJULjYwMSBmdWxsIHJhbmdlIFlDYkNyIC0+ IGZ1bGwgcmFuZ2UgUkdCCisJCSAqIFRoZSBtYXRyaXggcmVxdWlyZWQgaXMgOgorCQkgKiBbMS4w MDAsIDAuMDAwLCAxLjM3MSwKKwkJICogIDEuMDAwLCAtMC4zMzYsIC0wLjY5OCwKKwkJICogIDEu MDAwLCAxLjczMiwgMC4wMDAwXQorCQkgKi8KKwkJW0RSTV9DT0xPUl9ZQ0JDUl9CVDYwMV0gPSB7 CisJCQkweDdBRjgsIDB4NzgwMCwgMHgwLAorCQkJMHg4QjI4LCAweDc4MDAsIDB4OUFDMCwKKwkJ CTB4MCwgMHg3ODAwLCAweDdERDgsCisJCX0sCisJCS8qCisJCSAqIEJULjcwOSBmdWxsIHJhbmdl IFlDYkNyIC0+IGZ1bGwgcmFuZ2UgUkdCCisJCSAqIFRoZSBtYXRyaXggcmVxdWlyZWQgaXMgOgor CQkgKiBbMS4wMDAsIDAuMDAwLCAxLjU3NCwKKwkJICogIDEuMDAwLCAtMC4xODcsIC0wLjQ2OCwK KwkJICogIDEuMDAwLCAxLjg1NSwgMC4wMDAwXQorCQkgKi8KKwkJW0RSTV9DT0xPUl9ZQ0JDUl9C VDcwOV0gPSB7CisJCQkweDdDOTgsIDB4NzgwMCwgMHgwLAorCQkJMHg5RUY4LCAweDc4MDAsIDB4 QUMwMCwKKwkJCTB4MCwgMHg3ODAwLCAgMHg3RUQ4LAorCQl9LAorCQkvKgorCQkgKiBCVC4yMDIw IGZ1bGwgcmFuZ2UgWUNiQ3IgLT4gZnVsbCByYW5nZSBSR0IKKwkJICogVGhlIG1hdHJpeCByZXF1 aXJlZCBpcyA6CisJCSAqIFsxLjAwMCwgMC4wMDAsIDEuNDc0LAorCQkgKiAgMS4wMDAsIC0wLjE2 NDUsIC0wLjU3MTMsCisJCSAqICAxLjAwMCwgMS44ODE0LCAwLjAwMDBdCisJCSAqLworCQlbRFJN X0NPTE9SX1lDQkNSX0JUMjAyMF0gPSB7CisJCQkweDdCQzgsIDB4NzgwMCwgMHgwLAorCQkJMHg4 OTI4LCAweDc4MDAsIDB4QUE4OCwKKwkJCTB4MCwgMHg3ODAwLCAweDdGMTAsCisJCX0sCisJfTsK KworCS8qIE1hdHJpeCBmb3IgTGltaXRlZCBSYW5nZSB0byBGdWxsIFJhbmdlIENvbnZlcnNpb24g Ki8KKwlzdGF0aWMgY29uc3QgdTE2IGlucHV0X2NzY19tYXRyaXhfbHJbXVs5XSA9IHsKKwkJLyoK KwkJICogQlQuNjAxIExpbXRlZCByYW5nZSBZQ2JDciAtPiBmdWxsIHJhbmdlIFJHQgorCQkgKiBU aGUgbWF0cml4IHJlcXVpcmVkIGlzIDoKKwkJICogWzEuMTY0Mzg0LCAwLjAwMCwgMS41OTYwMjcs CisJCSAqICAxLjE2NDM4NCwgLTAuMzkxNzUsIC0wLjgxMjgxMywKKwkJICogIDEuMTY0Mzg0LCAy LjAxNzIzMiwgMC4wMDAwXQorCQkgKi8KKwkJW0RSTV9DT0xPUl9ZQ0JDUl9CVDYwMV0gPSB7CisJ CQkweDdDQzgsIDB4Nzk1MCwgMHgwLAorCQkJMHg4RDAwLCAweDc5NTAsIDB4OUM4OCwKKwkJCTB4 MCwgMHg3OTUwLCAweDY4MTAsCisJCX0sCisJCS8qCisJCSAqIEJULjcwOSBMaW1pdGVkIHJhbmdl IFlDYkNyIC0+IGZ1bGwgcmFuZ2UgUkdCCisJCSAqIFRoZSBtYXRyaXggcmVxdWlyZWQgaXMgOgor CQkgKiBbMS4xNjQzODQsIDAuMDAwLCAxLjc5Mjc0MSwKKwkJICogIDEuMTY0Mzg0LCAtMC4yMTMy NDksIC0wLjUzMjkwOSwKKwkJICogIDEuMTY0Mzg0LCAyLjExMjQwMiwgMC4wMDAwXQorCQkgKi8K KwkJW0RSTV9DT0xPUl9ZQ0JDUl9CVDcwOV0gPSB7CisJCQkweDdFNTgsIDB4Nzk1MCwgMHgwLAor CQkJMHg4ODg4LCAweDc5NTAsIDB4QURBOCwKKwkJCTB4MCwgMHg3OTUwLCAgMHg2ODcwLAorCQl9 LAorCQkvKgorCQkgKiBCVC4yMDIwIExpbWl0ZWQgcmFuZ2UgWUNiQ3IgLT4gZnVsbCByYW5nZSBS R0IKKwkJICogVGhlIG1hdHJpeCByZXF1aXJlZCBpcyA6CisJCSAqIFsxLjE2NCwgMC4wMDAsIDEu Njc4LAorCQkgKiAgMS4xNjQsIC0wLjE4NzMsIC0wLjY1MDQsCisJCSAqICAxLjE2NCwgMi4xNDE3 LCAwLjAwMDBdCisJCSAqLworCQlbRFJNX0NPTE9SX1lDQkNSX0JUMjAyMF0gPSB7CisJCQkweDdE NzAsIDB4Nzk1MCwgMHgwLAorCQkJMHg4QTY4LCAweDc5NTAsIDB4QUMwMCwKKwkJCTB4MCwgMHg3 OTUwLCAweDY4OTAsCisJCX0sCisJfTsKKwljb25zdCB1MTYgKmNzYzsKKworCWlmIChwbGFuZV9z dGF0ZS0+aHcuY29sb3JfcmFuZ2UgPT0gRFJNX0NPTE9SX1lDQkNSX0ZVTExfUkFOR0UpCisJCWNz YyA9IGlucHV0X2NzY19tYXRyaXhbcGxhbmVfc3RhdGUtPmh3LmNvbG9yX2VuY29kaW5nXTsKKwll bHNlCisJCWNzYyA9IGlucHV0X2NzY19tYXRyaXhfbHJbcGxhbmVfc3RhdGUtPmh3LmNvbG9yX2Vu Y29kaW5nXTsKKworCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9JTlBVVF9DU0Nf Q09FRkYocGlwZSwgcGxhbmVfaWQsIDApLAorCQkJICBST0ZGKGNzY1swXSkgfCBHT0ZGKGNzY1sx XSkpOworCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9JTlBVVF9DU0NfQ09FRkYo cGlwZSwgcGxhbmVfaWQsIDEpLAorCQkJICBCT0ZGKGNzY1syXSkpOworCWludGVsX2RlX3dyaXRl X2Z3KGRldl9wcml2LCBQTEFORV9JTlBVVF9DU0NfQ09FRkYocGlwZSwgcGxhbmVfaWQsIDIpLAor CQkJICBST0ZGKGNzY1szXSkgfCBHT0ZGKGNzY1s0XSkpOworCWludGVsX2RlX3dyaXRlX2Z3KGRl dl9wcml2LCBQTEFORV9JTlBVVF9DU0NfQ09FRkYocGlwZSwgcGxhbmVfaWQsIDMpLAorCQkJICBC T0ZGKGNzY1s1XSkpOworCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9JTlBVVF9D U0NfQ09FRkYocGlwZSwgcGxhbmVfaWQsIDQpLAorCQkJICBST0ZGKGNzY1s2XSkgfCBHT0ZGKGNz Y1s3XSkpOworCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9JTlBVVF9DU0NfQ09F RkYocGlwZSwgcGxhbmVfaWQsIDUpLAorCQkJICBCT0ZGKGNzY1s4XSkpOworCisJaW50ZWxfZGVf d3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX0lOUFVUX0NTQ19QUkVPRkYocGlwZSwgcGxhbmVfaWQs IDApLAorCQkJICBQUkVPRkZfWVVWX1RPX1JHQl9ISSk7CisJaWYgKHBsYW5lX3N0YXRlLT5ody5j b2xvcl9yYW5nZSA9PSBEUk1fQ09MT1JfWUNCQ1JfRlVMTF9SQU5HRSkKKwkJaW50ZWxfZGVfd3Jp dGVfZncoZGV2X3ByaXYsCisJCQkJICBQTEFORV9JTlBVVF9DU0NfUFJFT0ZGKHBpcGUsIHBsYW5l X2lkLCAxKSwKKwkJCQkgIDApOworCWVsc2UKKwkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYs CisJCQkJICBQTEFORV9JTlBVVF9DU0NfUFJFT0ZGKHBpcGUsIHBsYW5lX2lkLCAxKSwKKwkJCQkg IFBSRU9GRl9ZVVZfVE9fUkdCX01FKTsKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExB TkVfSU5QVVRfQ1NDX1BSRU9GRihwaXBlLCBwbGFuZV9pZCwgMiksCisJCQkgIFBSRU9GRl9ZVVZf VE9fUkdCX0xPKTsKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwKKwkJCSAgUExBTkVfSU5Q VVRfQ1NDX1BPU1RPRkYocGlwZSwgcGxhbmVfaWQsIDApLCAweDApOworCWludGVsX2RlX3dyaXRl X2Z3KGRldl9wcml2LAorCQkJICBQTEFORV9JTlBVVF9DU0NfUE9TVE9GRihwaXBlLCBwbGFuZV9p ZCwgMSksIDB4MCk7CisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsCisJCQkgIFBMQU5FX0lO UFVUX0NTQ19QT1NUT0ZGKHBpcGUsIHBsYW5lX2lkLCAyKSwgMHgwKTsKK30KKworc3RhdGljIGJv b2wgaXNfc3VyZmFjZV9saW5lYXIoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGlu dCBjb2xvcl9wbGFuZSkKK3sKKwlyZXR1cm4gZmItPm1vZGlmaWVyID09IERSTV9GT1JNQVRfTU9E X0xJTkVBUiB8fAorCSAgICAgICBpc19nZW4xMl9jY3NfcGxhbmUoZmIsIGNvbG9yX3BsYW5lKTsK K30KKworc3RhdGljIHVuc2lnbmVkIGludCBza2xfcGxhbmVfc3RyaWRlX211bHQoY29uc3Qgc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJCQkJCSAgaW50IGNvbG9yX3BsYW5lLCB1bnNpZ25l ZCBpbnQgcm90YXRpb24pCit7CisJLyoKKwkgKiBUaGUgc3RyaWRlIGlzIGVpdGhlciBleHByZXNz ZWQgYXMgYSBtdWx0aXBsZSBvZiA2NCBieXRlcyBjaHVua3MgZm9yCisJICogbGluZWFyIGJ1ZmZl cnMgb3IgaW4gbnVtYmVyIG9mIHRpbGVzIGZvciB0aWxlZCBidWZmZXJzLgorCSAqLworCWlmIChp c19zdXJmYWNlX2xpbmVhcihmYiwgY29sb3JfcGxhbmUpKQorCQlyZXR1cm4gNjQ7CisJZWxzZSBp ZiAoZHJtX3JvdGF0aW9uXzkwX29yXzI3MChyb3RhdGlvbikpCisJCXJldHVybiBpbnRlbF90aWxl X2hlaWdodChmYiwgY29sb3JfcGxhbmUpOworCWVsc2UKKwkJcmV0dXJuIGludGVsX3RpbGVfd2lk dGhfYnl0ZXMoZmIsIGNvbG9yX3BsYW5lKTsKK30KKworc3RhdGljIHUzMiBza2xfcGxhbmVfc3Ry aWRlKGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUsCisJCQkgICAg aW50IGNvbG9yX3BsYW5lKQoreworCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0g cGxhbmVfc3RhdGUtPmh3LmZiOworCXVuc2lnbmVkIGludCByb3RhdGlvbiA9IHBsYW5lX3N0YXRl LT5ody5yb3RhdGlvbjsKKwl1MzIgc3RyaWRlID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2Nv bG9yX3BsYW5lXS5zdHJpZGU7CisKKwlpZiAoY29sb3JfcGxhbmUgPj0gZmItPmZvcm1hdC0+bnVt X3BsYW5lcykKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gc3RyaWRlIC8gc2tsX3BsYW5lX3N0cmlk ZV9tdWx0KGZiLCBjb2xvcl9wbGFuZSwgcm90YXRpb24pOworfQorCitzdGF0aWMgdm9pZAorc2ts X2Rpc2FibGVfcGxhbmUoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKKwkJICBjb25zdCBzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7CisJZW51bSBwbGFuZV9p ZCBwbGFuZV9pZCA9IHBsYW5lLT5pZDsKKwllbnVtIHBpcGUgcGlwZSA9IHBsYW5lLT5waXBlOwor CXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYt PnVuY29yZS5sb2NrLCBpcnFmbGFncyk7CisKKwlpZiAoaWNsX2lzX2hkcl9wbGFuZShkZXZfcHJp diwgcGxhbmVfaWQpKQorCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfQ1VTX0NU TChwaXBlLCBwbGFuZV9pZCksIDApOworCisJc2tsX3dyaXRlX3BsYW5lX3dtKHBsYW5lLCBjcnRj X3N0YXRlKTsKKworCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9DVEwocGlwZSwg cGxhbmVfaWQpLCAwKTsKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfU1VSRihw aXBlLCBwbGFuZV9pZCksIDApOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYt PnVuY29yZS5sb2NrLCBpcnFmbGFncyk7Cit9CisKK3N0YXRpYyBib29sCitza2xfcGxhbmVfZ2V0 X2h3X3N0YXRlKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCisJCSAgICAgICBlbnVtIHBpcGUg KnBpcGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShw bGFuZS0+YmFzZS5kZXYpOworCWVudW0gaW50ZWxfZGlzcGxheV9wb3dlcl9kb21haW4gcG93ZXJf ZG9tYWluOworCWVudW0gcGxhbmVfaWQgcGxhbmVfaWQgPSBwbGFuZS0+aWQ7CisJaW50ZWxfd2Fr ZXJlZl90IHdha2VyZWY7CisJYm9vbCByZXQ7CisKKwlwb3dlcl9kb21haW4gPSBQT1dFUl9ET01B SU5fUElQRShwbGFuZS0+cGlwZSk7CisJd2FrZXJlZiA9IGludGVsX2Rpc3BsYXlfcG93ZXJfZ2V0 X2lmX2VuYWJsZWQoZGV2X3ByaXYsIHBvd2VyX2RvbWFpbik7CisJaWYgKCF3YWtlcmVmKQorCQly ZXR1cm4gZmFsc2U7CisKKwlyZXQgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBQTEFORV9DVEwo cGxhbmUtPnBpcGUsIHBsYW5lX2lkKSkgJiBQTEFORV9DVExfRU5BQkxFOworCisJKnBpcGUgPSBw bGFuZS0+cGlwZTsKKworCWludGVsX2Rpc3BsYXlfcG93ZXJfcHV0KGRldl9wcml2LCBwb3dlcl9k b21haW4sIHdha2VyZWYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHUzMiBza2xfcGxh bmVfY3RsX2Zvcm1hdCh1MzIgcGl4ZWxfZm9ybWF0KQoreworCXN3aXRjaCAocGl4ZWxfZm9ybWF0 KSB7CisJY2FzZSBEUk1fRk9STUFUX0M4OgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9JTkRF WEVEOworCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6CisJCXJldHVybiBQTEFORV9DVExfRk9STUFU X1JHQl81NjU7CisJY2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9B QkdSODg4ODoKKwkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfWFJHQl84ODg4IHwgUExBTkVfQ1RM X09SREVSX1JHQlg7CisJY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4OgorCWNhc2UgRFJNX0ZPUk1B VF9BUkdCODg4ODoKKwkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfWFJHQl84ODg4OworCWNhc2Ug RFJNX0ZPUk1BVF9YQkdSMjEwMTAxMDoKKwljYXNlIERSTV9GT1JNQVRfQUJHUjIxMDEwMTA6CisJ CXJldHVybiBQTEFORV9DVExfRk9STUFUX1hSR0JfMjEwMTAxMCB8IFBMQU5FX0NUTF9PUkRFUl9S R0JYOworCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMjEwMTAxMDoKKwljYXNlIERSTV9GT1JNQVRfQVJH QjIxMDEwMTA6CisJCXJldHVybiBQTEFORV9DVExfRk9STUFUX1hSR0JfMjEwMTAxMDsKKwljYXNl IERSTV9GT1JNQVRfWEJHUjE2MTYxNjE2RjoKKwljYXNlIERSTV9GT1JNQVRfQUJHUjE2MTYxNjE2 RjoKKwkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfWFJHQl8xNjE2MTYxNkYgfCBQTEFORV9DVExf T1JERVJfUkdCWDsKKwljYXNlIERSTV9GT1JNQVRfWFJHQjE2MTYxNjE2RjoKKwljYXNlIERSTV9G T1JNQVRfQVJHQjE2MTYxNjE2RjoKKwkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfWFJHQl8xNjE2 MTYxNkY7CisJY2FzZSBEUk1fRk9STUFUX1hZVVY4ODg4OgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZP Uk1BVF9YWVVWOworCWNhc2UgRFJNX0ZPUk1BVF9ZVVlWOgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZP Uk1BVF9ZVVY0MjIgfCBQTEFORV9DVExfWVVWNDIyX1lVWVY7CisJY2FzZSBEUk1fRk9STUFUX1lW WVU6CisJCXJldHVybiBQTEFORV9DVExfRk9STUFUX1lVVjQyMiB8IFBMQU5FX0NUTF9ZVVY0MjJf WVZZVTsKKwljYXNlIERSTV9GT1JNQVRfVVlWWToKKwkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRf WVVWNDIyIHwgUExBTkVfQ1RMX1lVVjQyMl9VWVZZOworCWNhc2UgRFJNX0ZPUk1BVF9WWVVZOgor CQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9ZVVY0MjIgfCBQTEFORV9DVExfWVVWNDIyX1ZZVVk7 CisJY2FzZSBEUk1fRk9STUFUX05WMTI6CisJCXJldHVybiBQTEFORV9DVExfRk9STUFUX05WMTI7 CisJY2FzZSBEUk1fRk9STUFUX1AwMTA6CisJCXJldHVybiBQTEFORV9DVExfRk9STUFUX1AwMTA7 CisJY2FzZSBEUk1fRk9STUFUX1AwMTI6CisJCXJldHVybiBQTEFORV9DVExfRk9STUFUX1AwMTI7 CisJY2FzZSBEUk1fRk9STUFUX1AwMTY6CisJCXJldHVybiBQTEFORV9DVExfRk9STUFUX1AwMTY7 CisJY2FzZSBEUk1fRk9STUFUX1kyMTA6CisJCXJldHVybiBQTEFORV9DVExfRk9STUFUX1kyMTA7 CisJY2FzZSBEUk1fRk9STUFUX1kyMTI6CisJCXJldHVybiBQTEFORV9DVExfRk9STUFUX1kyMTI7 CisJY2FzZSBEUk1fRk9STUFUX1kyMTY6CisJCXJldHVybiBQTEFORV9DVExfRk9STUFUX1kyMTY7 CisJY2FzZSBEUk1fRk9STUFUX1hWWVUyMTAxMDEwOgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1B VF9ZNDEwOworCWNhc2UgRFJNX0ZPUk1BVF9YVllVMTJfMTYxNjE2MTY6CisJCXJldHVybiBQTEFO RV9DVExfRk9STUFUX1k0MTI7CisJY2FzZSBEUk1fRk9STUFUX1hWWVUxNjE2MTYxNjoKKwkJcmV0 dXJuIFBMQU5FX0NUTF9GT1JNQVRfWTQxNjsKKwlkZWZhdWx0OgorCQlNSVNTSU5HX0NBU0UocGl4 ZWxfZm9ybWF0KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBza2xfcGxhbmVf Y3RsX2FscGhhKGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7 CisJaWYgKCFwbGFuZV9zdGF0ZS0+aHcuZmItPmZvcm1hdC0+aGFzX2FscGhhKQorCQlyZXR1cm4g UExBTkVfQ1RMX0FMUEhBX0RJU0FCTEU7CisKKwlzd2l0Y2ggKHBsYW5lX3N0YXRlLT5ody5waXhl bF9ibGVuZF9tb2RlKSB7CisJY2FzZSBEUk1fTU9ERV9CTEVORF9QSVhFTF9OT05FOgorCQlyZXR1 cm4gUExBTkVfQ1RMX0FMUEhBX0RJU0FCTEU7CisJY2FzZSBEUk1fTU9ERV9CTEVORF9QUkVNVUxU SToKKwkJcmV0dXJuIFBMQU5FX0NUTF9BTFBIQV9TV19QUkVNVUxUSVBMWTsKKwljYXNlIERSTV9N T0RFX0JMRU5EX0NPVkVSQUdFOgorCQlyZXR1cm4gUExBTkVfQ1RMX0FMUEhBX0hXX1BSRU1VTFRJ UExZOworCWRlZmF1bHQ6CisJCU1JU1NJTkdfQ0FTRShwbGFuZV9zdGF0ZS0+aHcucGl4ZWxfYmxl bmRfbW9kZSk7CisJCXJldHVybiBQTEFORV9DVExfQUxQSEFfRElTQUJMRTsKKwl9Cit9CisKK3N0 YXRpYyB1MzIgZ2xrX3BsYW5lX2NvbG9yX2N0bF9hbHBoYShjb25zdCBzdHJ1Y3QgaW50ZWxfcGxh bmVfc3RhdGUgKnBsYW5lX3N0YXRlKQoreworCWlmICghcGxhbmVfc3RhdGUtPmh3LmZiLT5mb3Jt YXQtPmhhc19hbHBoYSkKKwkJcmV0dXJuIFBMQU5FX0NPTE9SX0FMUEhBX0RJU0FCTEU7CisKKwlz d2l0Y2ggKHBsYW5lX3N0YXRlLT5ody5waXhlbF9ibGVuZF9tb2RlKSB7CisJY2FzZSBEUk1fTU9E RV9CTEVORF9QSVhFTF9OT05FOgorCQlyZXR1cm4gUExBTkVfQ09MT1JfQUxQSEFfRElTQUJMRTsK KwljYXNlIERSTV9NT0RFX0JMRU5EX1BSRU1VTFRJOgorCQlyZXR1cm4gUExBTkVfQ09MT1JfQUxQ SEFfU1dfUFJFTVVMVElQTFk7CisJY2FzZSBEUk1fTU9ERV9CTEVORF9DT1ZFUkFHRToKKwkJcmV0 dXJuIFBMQU5FX0NPTE9SX0FMUEhBX0hXX1BSRU1VTFRJUExZOworCWRlZmF1bHQ6CisJCU1JU1NJ TkdfQ0FTRShwbGFuZV9zdGF0ZS0+aHcucGl4ZWxfYmxlbmRfbW9kZSk7CisJCXJldHVybiBQTEFO RV9DT0xPUl9BTFBIQV9ESVNBQkxFOworCX0KK30KKworc3RhdGljIHUzMiBza2xfcGxhbmVfY3Rs X3RpbGluZyh1NjQgZmJfbW9kaWZpZXIpCit7CisJc3dpdGNoIChmYl9tb2RpZmllcikgeworCWNh c2UgRFJNX0ZPUk1BVF9NT0RfTElORUFSOgorCQlicmVhazsKKwljYXNlIEk5MTVfRk9STUFUX01P RF9YX1RJTEVEOgorCQlyZXR1cm4gUExBTkVfQ1RMX1RJTEVEX1g7CisJY2FzZSBJOTE1X0ZPUk1B VF9NT0RfWV9USUxFRDoKKwkJcmV0dXJuIFBMQU5FX0NUTF9USUxFRF9ZOworCWNhc2UgSTkxNV9G T1JNQVRfTU9EX1lfVElMRURfQ0NTOgorCQlyZXR1cm4gUExBTkVfQ1RMX1RJTEVEX1kgfCBQTEFO RV9DVExfUkVOREVSX0RFQ09NUFJFU1NJT05fRU5BQkxFOworCWNhc2UgSTkxNV9GT1JNQVRfTU9E X1lfVElMRURfR0VOMTJfUkNfQ0NTOgorCQlyZXR1cm4gUExBTkVfQ1RMX1RJTEVEX1kgfAorCQkg ICAgICAgUExBTkVfQ1RMX1JFTkRFUl9ERUNPTVBSRVNTSU9OX0VOQUJMRSB8CisJCSAgICAgICBQ TEFORV9DVExfQ0xFQVJfQ09MT1JfRElTQUJMRTsKKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJ TEVEX0dFTjEyX01DX0NDUzoKKwkJcmV0dXJuIFBMQU5FX0NUTF9USUxFRF9ZIHwgUExBTkVfQ1RM X01FRElBX0RFQ09NUFJFU1NJT05fRU5BQkxFOworCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJ TEVEOgorCQlyZXR1cm4gUExBTkVfQ1RMX1RJTEVEX1lGOworCWNhc2UgSTkxNV9GT1JNQVRfTU9E X1lmX1RJTEVEX0NDUzoKKwkJcmV0dXJuIFBMQU5FX0NUTF9USUxFRF9ZRiB8IFBMQU5FX0NUTF9S RU5ERVJfREVDT01QUkVTU0lPTl9FTkFCTEU7CisJZGVmYXVsdDoKKwkJTUlTU0lOR19DQVNFKGZi X21vZGlmaWVyKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBza2xfcGxhbmVf Y3RsX3JvdGF0ZSh1bnNpZ25lZCBpbnQgcm90YXRlKQoreworCXN3aXRjaCAocm90YXRlKSB7CisJ Y2FzZSBEUk1fTU9ERV9ST1RBVEVfMDoKKwkJYnJlYWs7CisJLyoKKwkgKiBEUk1fTU9ERV9ST1RB VEVfIGlzIGNvdW50ZXIgY2xvY2t3aXNlIHRvIHN0YXkgY29tcGF0aWJsZSB3aXRoIFhyYW5kcgor CSAqIHdoaWxlIGk5MTUgSFcgcm90YXRpb24gaXMgY2xvY2t3aXNlLCB0aGF0cyB3aHkgdGhpcyBz d2FwcGluZy4KKwkgKi8KKwljYXNlIERSTV9NT0RFX1JPVEFURV85MDoKKwkJcmV0dXJuIFBMQU5F X0NUTF9ST1RBVEVfMjcwOworCWNhc2UgRFJNX01PREVfUk9UQVRFXzE4MDoKKwkJcmV0dXJuIFBM QU5FX0NUTF9ST1RBVEVfMTgwOworCWNhc2UgRFJNX01PREVfUk9UQVRFXzI3MDoKKwkJcmV0dXJu IFBMQU5FX0NUTF9ST1RBVEVfOTA7CisJZGVmYXVsdDoKKwkJTUlTU0lOR19DQVNFKHJvdGF0ZSk7 CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgY25sX3BsYW5lX2N0bF9mbGlwKHVu c2lnbmVkIGludCByZWZsZWN0KQoreworCXN3aXRjaCAocmVmbGVjdCkgeworCWNhc2UgMDoKKwkJ YnJlYWs7CisJY2FzZSBEUk1fTU9ERV9SRUZMRUNUX1g6CisJCXJldHVybiBQTEFORV9DVExfRkxJ UF9IT1JJWk9OVEFMOworCWNhc2UgRFJNX01PREVfUkVGTEVDVF9ZOgorCWRlZmF1bHQ6CisJCU1J U1NJTkdfQ0FTRShyZWZsZWN0KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBz a2xfcGxhbmVfY3RsX2NydGMoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3Rh dGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRj X3N0YXRlLT51YXBpLmNydGMtPmRldik7CisJdTMyIHBsYW5lX2N0bCA9IDA7CisKKwlpZiAoY3J0 Y19zdGF0ZS0+dWFwaS5hc3luY19mbGlwKQorCQlwbGFuZV9jdGwgfD0gUExBTkVfQ1RMX0FTWU5D X0ZMSVA7CisKKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCB8fCBJU19HRU1JTklMQUtF KGRldl9wcml2KSkKKwkJcmV0dXJuIHBsYW5lX2N0bDsKKworCWlmIChjcnRjX3N0YXRlLT5nYW1t YV9lbmFibGUpCisJCXBsYW5lX2N0bCB8PSBQTEFORV9DVExfUElQRV9HQU1NQV9FTkFCTEU7CisK KwlpZiAoY3J0Y19zdGF0ZS0+Y3NjX2VuYWJsZSkKKwkJcGxhbmVfY3RsIHw9IFBMQU5FX0NUTF9Q SVBFX0NTQ19FTkFCTEU7CisKKwlyZXR1cm4gcGxhbmVfY3RsOworfQorCitzdGF0aWMgdTMyIHNr bF9wbGFuZV9jdGwoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJ CQkgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPQorCQl0b19pOTE1KHBsYW5lX3N0YXRlLT51 YXBpLnBsYW5lLT5kZXYpOworCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxh bmVfc3RhdGUtPmh3LmZiOworCXVuc2lnbmVkIGludCByb3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5o dy5yb3RhdGlvbjsKKwljb25zdCBzdHJ1Y3QgZHJtX2ludGVsX3Nwcml0ZV9jb2xvcmtleSAqa2V5 ID0gJnBsYW5lX3N0YXRlLT5ja2V5OworCXUzMiBwbGFuZV9jdGw7CisKKwlwbGFuZV9jdGwgPSBQ TEFORV9DVExfRU5BQkxFOworCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPCAxMCAmJiAhSVNf R0VNSU5JTEFLRShkZXZfcHJpdikpIHsKKwkJcGxhbmVfY3RsIHw9IHNrbF9wbGFuZV9jdGxfYWxw aGEocGxhbmVfc3RhdGUpOworCQlwbGFuZV9jdGwgfD0gUExBTkVfQ1RMX1BMQU5FX0dBTU1BX0RJ U0FCTEU7CisKKwkJaWYgKHBsYW5lX3N0YXRlLT5ody5jb2xvcl9lbmNvZGluZyA9PSBEUk1fQ09M T1JfWUNCQ1JfQlQ3MDkpCisJCQlwbGFuZV9jdGwgfD0gUExBTkVfQ1RMX1lVVl9UT19SR0JfQ1ND X0ZPUk1BVF9CVDcwOTsKKworCQlpZiAocGxhbmVfc3RhdGUtPmh3LmNvbG9yX3JhbmdlID09IERS TV9DT0xPUl9ZQ0JDUl9GVUxMX1JBTkdFKQorCQkJcGxhbmVfY3RsIHw9IFBMQU5FX0NUTF9ZVVZf UkFOR0VfQ09SUkVDVElPTl9ESVNBQkxFOworCX0KKworCXBsYW5lX2N0bCB8PSBza2xfcGxhbmVf Y3RsX2Zvcm1hdChmYi0+Zm9ybWF0LT5mb3JtYXQpOworCXBsYW5lX2N0bCB8PSBza2xfcGxhbmVf Y3RsX3RpbGluZyhmYi0+bW9kaWZpZXIpOworCXBsYW5lX2N0bCB8PSBza2xfcGxhbmVfY3RsX3Jv dGF0ZShyb3RhdGlvbiAmIERSTV9NT0RFX1JPVEFURV9NQVNLKTsKKworCWlmIChJTlRFTF9HRU4o ZGV2X3ByaXYpID49IDEwKQorCQlwbGFuZV9jdGwgfD0gY25sX3BsYW5lX2N0bF9mbGlwKHJvdGF0 aW9uICYKKwkJCQkJCURSTV9NT0RFX1JFRkxFQ1RfTUFTSyk7CisKKwlpZiAoa2V5LT5mbGFncyAm IEk5MTVfU0VUX0NPTE9SS0VZX0RFU1RJTkFUSU9OKQorCQlwbGFuZV9jdGwgfD0gUExBTkVfQ1RM X0tFWV9FTkFCTEVfREVTVElOQVRJT047CisJZWxzZSBpZiAoa2V5LT5mbGFncyAmIEk5MTVfU0VU X0NPTE9SS0VZX1NPVVJDRSkKKwkJcGxhbmVfY3RsIHw9IFBMQU5FX0NUTF9LRVlfRU5BQkxFX1NP VVJDRTsKKworCXJldHVybiBwbGFuZV9jdGw7Cit9CisKK3N0YXRpYyB1MzIgZ2xrX3BsYW5lX2Nv bG9yX2N0bF9jcnRjKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQor eworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Y19zdGF0 ZS0+dWFwaS5jcnRjLT5kZXYpOworCXUzMiBwbGFuZV9jb2xvcl9jdGwgPSAwOworCisJaWYgKElO VEVMX0dFTihkZXZfcHJpdikgPj0gMTEpCisJCXJldHVybiBwbGFuZV9jb2xvcl9jdGw7CisKKwlp ZiAoY3J0Y19zdGF0ZS0+Z2FtbWFfZW5hYmxlKQorCQlwbGFuZV9jb2xvcl9jdGwgfD0gUExBTkVf Q09MT1JfUElQRV9HQU1NQV9FTkFCTEU7CisKKwlpZiAoY3J0Y19zdGF0ZS0+Y3NjX2VuYWJsZSkK KwkJcGxhbmVfY29sb3JfY3RsIHw9IFBMQU5FX0NPTE9SX1BJUEVfQ1NDX0VOQUJMRTsKKworCXJl dHVybiBwbGFuZV9jb2xvcl9jdGw7Cit9CisKK3N0YXRpYyB1MzIgZ2xrX3BsYW5lX2NvbG9yX2N0 bChjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJCSAgICAgICBj b25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQoreworCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9CisJCXRvX2k5MTUocGxhbmVfc3RhdGUtPnVhcGku cGxhbmUtPmRldik7CisJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9z dGF0ZS0+aHcuZmI7CisJc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSA9IHRvX2ludGVsX3BsYW5l KHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lKTsKKwl1MzIgcGxhbmVfY29sb3JfY3RsID0gMDsKKwor CXBsYW5lX2NvbG9yX2N0bCB8PSBQTEFORV9DT0xPUl9QTEFORV9HQU1NQV9ESVNBQkxFOworCXBs YW5lX2NvbG9yX2N0bCB8PSBnbGtfcGxhbmVfY29sb3JfY3RsX2FscGhhKHBsYW5lX3N0YXRlKTsK KworCWlmIChmYi0+Zm9ybWF0LT5pc195dXYgJiYgIWljbF9pc19oZHJfcGxhbmUoZGV2X3ByaXYs IHBsYW5lLT5pZCkpIHsKKwkJc3dpdGNoIChwbGFuZV9zdGF0ZS0+aHcuY29sb3JfZW5jb2Rpbmcp IHsKKwkJY2FzZSBEUk1fQ09MT1JfWUNCQ1JfQlQ3MDk6CisJCQlwbGFuZV9jb2xvcl9jdGwgfD0g UExBTkVfQ09MT1JfQ1NDX01PREVfWVVWNzA5X1RPX1JHQjcwOTsKKwkJCWJyZWFrOworCQljYXNl IERSTV9DT0xPUl9ZQ0JDUl9CVDIwMjA6CisJCQlwbGFuZV9jb2xvcl9jdGwgfD0KKwkJCQlQTEFO RV9DT0xPUl9DU0NfTU9ERV9ZVVYyMDIwX1RPX1JHQjIwMjA7CisJCQlicmVhazsKKwkJZGVmYXVs dDoKKwkJCXBsYW5lX2NvbG9yX2N0bCB8PQorCQkJCVBMQU5FX0NPTE9SX0NTQ19NT0RFX1lVVjYw MV9UT19SR0I2MDE7CisJCX0KKwkJaWYgKHBsYW5lX3N0YXRlLT5ody5jb2xvcl9yYW5nZSA9PSBE Uk1fQ09MT1JfWUNCQ1JfRlVMTF9SQU5HRSkKKwkJCXBsYW5lX2NvbG9yX2N0bCB8PSBQTEFORV9D T0xPUl9ZVVZfUkFOR0VfQ09SUkVDVElPTl9ESVNBQkxFOworCX0gZWxzZSBpZiAoZmItPmZvcm1h dC0+aXNfeXV2KSB7CisJCXBsYW5lX2NvbG9yX2N0bCB8PSBQTEFORV9DT0xPUl9JTlBVVF9DU0Nf RU5BQkxFOworCX0KKworCXJldHVybiBwbGFuZV9jb2xvcl9jdGw7Cit9CisKK3N0YXRpYyBpbnQK K21haW5fdG9fY2NzX3BsYW5lKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQg bWFpbl9wbGFuZSkKK3sKKwlkcm1fV0FSTl9PTihmYi0+ZGV2LCAhaXNfY2NzX21vZGlmaWVyKGZi LT5tb2RpZmllcikgfHwKKwkJICAgIChtYWluX3BsYW5lICYmIG1haW5fcGxhbmUgPj0gZmItPmZv cm1hdC0+bnVtX3BsYW5lcyAvIDIpKTsKKworCXJldHVybiBmYi0+Zm9ybWF0LT5udW1fcGxhbmVz IC8gMiArIG1haW5fcGxhbmU7Cit9CisKK2ludCBza2xfY2NzX3RvX21haW5fcGxhbmUoY29uc3Qg c3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBjY3NfcGxhbmUpCit7CisJZHJtX1dBUk5f T04oZmItPmRldiwgIWlzX2Njc19tb2RpZmllcihmYi0+bW9kaWZpZXIpIHx8CisJCSAgICBjY3Nf cGxhbmUgPCBmYi0+Zm9ybWF0LT5udW1fcGxhbmVzIC8gMik7CisKKwlyZXR1cm4gY2NzX3BsYW5l IC0gZmItPmZvcm1hdC0+bnVtX3BsYW5lcyAvIDI7Cit9CisKKworc3RhdGljIGludAorc2tsX21h aW5fdG9fYXV4X3BsYW5lKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgbWFp bl9wbGFuZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUoZmIt PmRldik7CisKKwlpZiAoaXNfY2NzX21vZGlmaWVyKGZiLT5tb2RpZmllcikpCisJCXJldHVybiBt YWluX3RvX2Njc19wbGFuZShmYiwgbWFpbl9wbGFuZSk7CisJZWxzZSBpZiAoSU5URUxfR0VOKGk5 MTUpIDwgMTEgJiYKKwkJIGludGVsX2Zvcm1hdF9pbmZvX2lzX3l1dl9zZW1pcGxhbmFyKGZiLT5m b3JtYXQsIGZiLT5tb2RpZmllcikpCisJCXJldHVybiAxOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyB2b2lkCitza2xfcHJvZ3JhbV9wbGFuZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBs YW5lLAorCQkgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkg IGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUsCisJCSAgaW50IGNv bG9yX3BsYW5lKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5 MTUocGxhbmUtPmJhc2UuZGV2KTsKKwllbnVtIHBsYW5lX2lkIHBsYW5lX2lkID0gcGxhbmUtPmlk OworCWVudW0gcGlwZSBwaXBlID0gcGxhbmUtPnBpcGU7CisJY29uc3Qgc3RydWN0IGRybV9pbnRl bF9zcHJpdGVfY29sb3JrZXkgKmtleSA9ICZwbGFuZV9zdGF0ZS0+Y2tleTsKKwl1MzIgc3VyZl9h ZGRyID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2NvbG9yX3BsYW5lXS5vZmZzZXQ7CisJdTMy IHN0cmlkZSA9IHNrbF9wbGFuZV9zdHJpZGUocGxhbmVfc3RhdGUsIGNvbG9yX3BsYW5lKTsKKwlj b25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKKwlp bnQgYXV4X3BsYW5lID0gc2tsX21haW5fdG9fYXV4X3BsYW5lKGZiLCBjb2xvcl9wbGFuZSk7CisJ aW50IGNydGNfeCA9IHBsYW5lX3N0YXRlLT51YXBpLmRzdC54MTsKKwlpbnQgY3J0Y195ID0gcGxh bmVfc3RhdGUtPnVhcGkuZHN0LnkxOworCXUzMiB4ID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5l W2NvbG9yX3BsYW5lXS54OworCXUzMiB5ID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2NvbG9y X3BsYW5lXS55OworCXUzMiBzcmNfdyA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFw aS5zcmMpID4+IDE2OworCXUzMiBzcmNfaCA9IGRybV9yZWN0X2hlaWdodCgmcGxhbmVfc3RhdGUt PnVhcGkuc3JjKSA+PiAxNjsKKwl1OCBhbHBoYSA9IHBsYW5lX3N0YXRlLT5ody5hbHBoYSA+PiA4 OworCXUzMiBwbGFuZV9jb2xvcl9jdGwgPSAwLCBhdXhfZGlzdCA9IDA7CisJdW5zaWduZWQgbG9u ZyBpcnFmbGFnczsKKwl1MzIga2V5bXNrLCBrZXltYXg7CisJdTMyIHBsYW5lX2N0bCA9IHBsYW5l X3N0YXRlLT5jdGw7CisKKwlwbGFuZV9jdGwgfD0gc2tsX3BsYW5lX2N0bF9jcnRjKGNydGNfc3Rh dGUpOworCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTAgfHwgSVNfR0VNSU5JTEFLRShk ZXZfcHJpdikpCisJCXBsYW5lX2NvbG9yX2N0bCA9IHBsYW5lX3N0YXRlLT5jb2xvcl9jdGwgfAor CQkJZ2xrX3BsYW5lX2NvbG9yX2N0bF9jcnRjKGNydGNfc3RhdGUpOworCisJLyogU2l6ZXMgYXJl IDAgYmFzZWQgKi8KKwlzcmNfdy0tOworCXNyY19oLS07CisKKwlrZXltYXggPSAoa2V5LT5tYXhf dmFsdWUgJiAweGZmZmZmZikgfCBQTEFORV9LRVlNQVhfQUxQSEEoYWxwaGEpOworCisJa2V5bXNr ID0ga2V5LT5jaGFubmVsX21hc2sgJiAweDdmZmZmZmY7CisJaWYgKGFscGhhIDwgMHhmZikKKwkJ a2V5bXNrIHw9IFBMQU5FX0tFWU1TS19BTFBIQV9FTkFCTEU7CisKKwkvKiBUaGUgc2NhbGVyIHdp bGwgaGFuZGxlIHRoZSBvdXRwdXQgcG9zaXRpb24gKi8KKwlpZiAocGxhbmVfc3RhdGUtPnNjYWxl cl9pZCA+PSAwKSB7CisJCWNydGNfeCA9IDA7CisJCWNydGNfeSA9IDA7CisJfQorCisJaWYgKGF1 eF9wbGFuZSkgeworCQlhdXhfZGlzdCA9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVthdXhfcGxh bmVdLm9mZnNldCAtIHN1cmZfYWRkcjsKKworCQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDEy KQorCQkJYXV4X2Rpc3QgfD0gc2tsX3BsYW5lX3N0cmlkZShwbGFuZV9zdGF0ZSwgYXV4X3BsYW5l KTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFm bGFncyk7CisKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfU1RSSURFKHBpcGUs IHBsYW5lX2lkKSwgc3RyaWRlKTsKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVf UE9TKHBpcGUsIHBsYW5lX2lkKSwKKwkJCSAgKGNydGNfeSA8PCAxNikgfCBjcnRjX3gpOworCWlu dGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9TSVpFKHBpcGUsIHBsYW5lX2lkKSwKKwkJ CSAgKHNyY19oIDw8IDE2KSB8IHNyY193KTsKKworCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2 LCBQTEFORV9BVVhfRElTVChwaXBlLCBwbGFuZV9pZCksIGF1eF9kaXN0KTsKKworCWlmIChpY2xf aXNfaGRyX3BsYW5lKGRldl9wcml2LCBwbGFuZV9pZCkpCisJCWludGVsX2RlX3dyaXRlX2Z3KGRl dl9wcml2LCBQTEFORV9DVVNfQ1RMKHBpcGUsIHBsYW5lX2lkKSwKKwkJCQkgIHBsYW5lX3N0YXRl LT5jdXNfY3RsKTsKKworCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwIHx8IElTX0dFTUlO SUxBS0UoZGV2X3ByaXYpKQorCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfQ09M T1JfQ1RMKHBpcGUsIHBsYW5lX2lkKSwKKwkJCQkgIHBsYW5lX2NvbG9yX2N0bCk7CisKKwlpZiAo ZmItPmZvcm1hdC0+aXNfeXV2ICYmIGljbF9pc19oZHJfcGxhbmUoZGV2X3ByaXYsIHBsYW5lX2lk KSkKKwkJaWNsX3Byb2dyYW1faW5wdXRfY3NjKHBsYW5lLCBjcnRjX3N0YXRlLCBwbGFuZV9zdGF0 ZSk7CisKKwlza2xfd3JpdGVfcGxhbmVfd20ocGxhbmUsIGNydGNfc3RhdGUpOworCisJaW50ZWxf ZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX0tFWVZBTChwaXBlLCBwbGFuZV9pZCksCisJCQkg IGtleS0+bWluX3ZhbHVlKTsKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfS0VZ TVNLKHBpcGUsIHBsYW5lX2lkKSwga2V5bXNrKTsKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJp diwgUExBTkVfS0VZTUFYKHBpcGUsIHBsYW5lX2lkKSwga2V5bWF4KTsKKworCWludGVsX2RlX3dy aXRlX2Z3KGRldl9wcml2LCBQTEFORV9PRkZTRVQocGlwZSwgcGxhbmVfaWQpLAorCQkJICAoeSA8 PCAxNikgfCB4KTsKKworCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgMTEpCisJCWludGVsX2Rl X3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9BVVhfT0ZGU0VUKHBpcGUsIHBsYW5lX2lkKSwKKwkJ CQkgIChwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMV0ueSA8PCAxNikgfCBwbGFuZV9zdGF0ZS0+ Y29sb3JfcGxhbmVbMV0ueCk7CisKKwlpZiAoIWRybV9hdG9taWNfY3J0Y19uZWVkc19tb2Rlc2V0 KCZjcnRjX3N0YXRlLT51YXBpKSkKKwkJaW50ZWxfcHNyMl9wcm9ncmFtX3BsYW5lX3NlbF9mZXRj aChwbGFuZSwgY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUsIGNvbG9yX3BsYW5lKTsKKworCS8qCisJ ICogVGhlIGNvbnRyb2wgcmVnaXN0ZXIgc2VsZi1hcm1zIGlmIHRoZSBwbGFuZSB3YXMgcHJldmlv dXNseQorCSAqIGRpc2FibGVkLiBUcnkgdG8gbWFrZSB0aGUgcGxhbmUgZW5hYmxlIGF0b21pYyBi eSB3cml0aW5nCisJICogdGhlIGNvbnRyb2wgcmVnaXN0ZXIganVzdCBiZWZvcmUgdGhlIHN1cmZh Y2UgcmVnaXN0ZXIuCisJICovCisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX0NU TChwaXBlLCBwbGFuZV9pZCksIHBsYW5lX2N0bCk7CisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3By aXYsIFBMQU5FX1NVUkYocGlwZSwgcGxhbmVfaWQpLAorCQkJICBpbnRlbF9wbGFuZV9nZ3R0X29m ZnNldChwbGFuZV9zdGF0ZSkgKyBzdXJmX2FkZHIpOworCisJaWYgKHBsYW5lX3N0YXRlLT5zY2Fs ZXJfaWQgPj0gMCkKKwkJc2tsX3Byb2dyYW1fc2NhbGVyKHBsYW5lLCBjcnRjX3N0YXRlLCBwbGFu ZV9zdGF0ZSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+dW5jb3JlLmxv Y2ssIGlycWZsYWdzKTsKK30KKworc3RhdGljIHZvaWQKK3NrbF9wbGFuZV9hc3luY19mbGlwKHN0 cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCisJCSAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNydGNfc3RhdGUsCisJCSAgICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRl ICpwbGFuZV9zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0 b19pOTE1KHBsYW5lLT5iYXNlLmRldik7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKwllbnVt IHBsYW5lX2lkIHBsYW5lX2lkID0gcGxhbmUtPmlkOworCWVudW0gcGlwZSBwaXBlID0gcGxhbmUt PnBpcGU7CisJdTMyIHN1cmZfYWRkciA9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS5vZmZz ZXQ7CisJdTMyIHBsYW5lX2N0bCA9IHBsYW5lX3N0YXRlLT5jdGw7CisKKwlwbGFuZV9jdGwgfD0g c2tsX3BsYW5lX2N0bF9jcnRjKGNydGNfc3RhdGUpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRl dl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOworCisJaW50ZWxfZGVfd3JpdGVfZncoZGV2 X3ByaXYsIFBMQU5FX0NUTChwaXBlLCBwbGFuZV9pZCksIHBsYW5lX2N0bCk7CisJaW50ZWxfZGVf d3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX1NVUkYocGlwZSwgcGxhbmVfaWQpLAorCQkJICBpbnRl bF9wbGFuZV9nZ3R0X29mZnNldChwbGFuZV9zdGF0ZSkgKyBzdXJmX2FkZHIpOworCisJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7Cit9CisK K3N0YXRpYyB2b2lkCitza2xfdXBkYXRlX3BsYW5lKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUs CisJCSBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJIGNvbnN0 IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJaW50IGNvbG9yX3Bs YW5lID0gMDsKKworCWlmIChwbGFuZV9zdGF0ZS0+cGxhbmFyX2xpbmtlZF9wbGFuZSAmJiAhcGxh bmVfc3RhdGUtPnBsYW5hcl9zbGF2ZSkKKwkJLyogUHJvZ3JhbSB0aGUgVVYgcGxhbmUgb24gcGxh bmFyIG1hc3RlciAqLworCQljb2xvcl9wbGFuZSA9IDE7CisKKwlza2xfcHJvZ3JhbV9wbGFuZShw bGFuZSwgY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUsIGNvbG9yX3BsYW5lKTsKK30KKworc3RhdGlj IGJvb2wgaW50ZWxfZm9ybWF0X2lzX3AwMXgodTMyIGZvcm1hdCkKK3sKKwlzd2l0Y2ggKGZvcm1h dCkgeworCWNhc2UgRFJNX0ZPUk1BVF9QMDEwOgorCWNhc2UgRFJNX0ZPUk1BVF9QMDEyOgorCWNh c2UgRFJNX0ZPUk1BVF9QMDE2OgorCQlyZXR1cm4gdHJ1ZTsKKwlkZWZhdWx0OgorCQlyZXR1cm4g ZmFsc2U7CisJfQorfQorCitzdGF0aWMgaW50IHNrbF9wbGFuZV9jaGVja19mYihjb25zdCBzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBp bnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJc3RydWN0IGludGVsX3BsYW5lICpw bGFuZSA9IHRvX2ludGVsX3BsYW5lKHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lKTsKKwlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7CisJ Y29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7CisJ dW5zaWduZWQgaW50IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmh3LnJvdGF0aW9uOworCXN0cnVj dCBkcm1fZm9ybWF0X25hbWVfYnVmIGZvcm1hdF9uYW1lOworCisJaWYgKCFmYikKKwkJcmV0dXJu IDA7CisKKwlpZiAocm90YXRpb24gJiB+KERSTV9NT0RFX1JPVEFURV8wIHwgRFJNX01PREVfUk9U QVRFXzE4MCkgJiYKKwkgICAgaXNfY2NzX21vZGlmaWVyKGZiLT5tb2RpZmllcikpIHsKKwkJZHJt X2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCisJCQkgICAgIlJDIHN1cHBvcnQgb25seSB3aXRoIDAv MTgwIGRlZ3JlZSByb3RhdGlvbiAoJXgpXG4iLAorCQkJICAgIHJvdGF0aW9uKTsKKwkJcmV0dXJu IC1FSU5WQUw7CisJfQorCisJaWYgKHJvdGF0aW9uICYgRFJNX01PREVfUkVGTEVDVF9YICYmCisJ ICAgIGZiLT5tb2RpZmllciA9PSBEUk1fRk9STUFUX01PRF9MSU5FQVIpIHsKKwkJZHJtX2RiZ19r bXMoJmRldl9wcml2LT5kcm0sCisJCQkgICAgImhvcml6b250YWwgZmxpcCBpcyBub3Qgc3VwcG9y dGVkIHdpdGggbGluZWFyIHN1cmZhY2UgZm9ybWF0c1xuIik7CisJCXJldHVybiAtRUlOVkFMOwor CX0KKworCWlmIChkcm1fcm90YXRpb25fOTBfb3JfMjcwKHJvdGF0aW9uKSkgeworCQlpZiAoZmIt Pm1vZGlmaWVyICE9IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEICYmCisJCSAgICBmYi0+bW9kaWZp ZXIgIT0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEKSB7CisJCQlkcm1fZGJnX2ttcygmZGV2X3By aXYtPmRybSwKKwkJCQkgICAgIlkvWWYgdGlsaW5nIHJlcXVpcmVkIGZvciA5MC8yNzAhXG4iKTsK KwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJLyoKKwkJICogOTAvMjcwIGlzIG5vdCBhbGxv d2VkIHdpdGggUkdCNjQgMTY6MTY6MTY6MTYgYW5kCisJCSAqIEluZGV4ZWQgOC1iaXQuIFJHQiAx Ni1iaXQgNTo2OjUgaXMgYWxsb3dlZCBnZW4xMSBvbndhcmRzLgorCQkgKi8KKwkJc3dpdGNoIChm Yi0+Zm9ybWF0LT5mb3JtYXQpIHsKKwkJY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKKwkJCWlmIChJ TlRFTF9HRU4oZGV2X3ByaXYpID49IDExKQorCQkJCWJyZWFrOworCQkJZmFsbHRocm91Z2g7CisJ CWNhc2UgRFJNX0ZPUk1BVF9DODoKKwkJY2FzZSBEUk1fRk9STUFUX1hSR0IxNjE2MTYxNkY6CisJ CWNhc2UgRFJNX0ZPUk1BVF9YQkdSMTYxNjE2MTZGOgorCQljYXNlIERSTV9GT1JNQVRfQVJHQjE2 MTYxNjE2RjoKKwkJY2FzZSBEUk1fRk9STUFUX0FCR1IxNjE2MTYxNkY6CisJCWNhc2UgRFJNX0ZP Uk1BVF9ZMjEwOgorCQljYXNlIERSTV9GT1JNQVRfWTIxMjoKKwkJY2FzZSBEUk1fRk9STUFUX1ky MTY6CisJCWNhc2UgRFJNX0ZPUk1BVF9YVllVMTJfMTYxNjE2MTY6CisJCWNhc2UgRFJNX0ZPUk1B VF9YVllVMTYxNjE2MTY6CisJCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKKwkJCQkgICAg IlVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdCAlcyBmb3IgOTAvMjcwIVxuIiwKKwkJCQkgICAgZHJt X2dldF9mb3JtYXRfbmFtZShmYi0+Zm9ybWF0LT5mb3JtYXQsCisJCQkJCQkJJmZvcm1hdF9uYW1l KSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQor CisJLyogWS10aWxpbmcgaXMgbm90IHN1cHBvcnRlZCBpbiBJRi1JRCBJbnRlcmxhY2UgbW9kZSAq LworCWlmIChjcnRjX3N0YXRlLT5ody5lbmFibGUgJiYKKwkgICAgY3J0Y19zdGF0ZS0+aHcuYWRq dXN0ZWRfbW9kZS5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFICYmCisJICAgIChmYi0+ bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQgfHwKKwkgICAgIGZiLT5tb2RpZmll ciA9PSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQgfHwKKwkgICAgIGZiLT5tb2RpZmllciA9PSBJ OTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1MgfHwKKwkgICAgIGZiLT5tb2RpZmllciA9PSBJOTE1 X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NTIHx8CisJICAgICBmYi0+bW9kaWZpZXIgPT0gSTkxNV9G T1JNQVRfTU9EX1lfVElMRURfR0VOMTJfUkNfQ0NTIHx8CisJICAgICBmYi0+bW9kaWZpZXIgPT0g STkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfTUNfQ0NTKSkgeworCQlkcm1fZGJnX2ttcygm ZGV2X3ByaXYtPmRybSwKKwkJCSAgICAiWS9ZZiB0aWxpbmcgbm90IHN1cHBvcnRlZCBpbiBJRi1J RCBtb2RlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogV2FfMTYwNjA1NDE4ODp0 Z2wgKi8KKwlpZiAoSVNfVElHRVJMQUtFKGRldl9wcml2KSAmJgorCSAgICBwbGFuZV9zdGF0ZS0+ Y2tleS5mbGFncyAmIEk5MTVfU0VUX0NPTE9SS0VZX1NPVVJDRSAmJgorCSAgICBpbnRlbF9mb3Jt YXRfaXNfcDAxeChmYi0+Zm9ybWF0LT5mb3JtYXQpKSB7CisJCWRybV9kYmdfa21zKCZkZXZfcHJp di0+ZHJtLAorCQkJICAgICJTb3VyY2UgY29sb3Iga2V5aW5nIG5vdCBzdXBwb3J0ZWQgd2l0aCBQ MDF4IGZvcm1hdHNcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIGludCBza2xfcGxhbmVfY2hlY2tfZHN0X2Nvb3JkaW5hdGVzKGNvbnN0IHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkJCQkgICBjb25zdCBzdHJ1Y3QgaW50 ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9CisJCXRvX2k5MTUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRldik7CisJ aW50IGNydGNfeCA9IHBsYW5lX3N0YXRlLT51YXBpLmRzdC54MTsKKwlpbnQgY3J0Y193ID0gZHJt X3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCk7CisJaW50IHBpcGVfc3JjX3cgPSBj cnRjX3N0YXRlLT5waXBlX3NyY193OworCisJLyoKKwkgKiBEaXNwbGF5IFdBICMxMTc1OiBjbmws Z2xrCisJICogUGxhbmVzIG90aGVyIHRoYW4gdGhlIGN1cnNvciBtYXkgY2F1c2UgRklGTyB1bmRl cmZsb3cgYW5kIGRpc3BsYXkKKwkgKiBjb3JydXB0aW9uIGlmIHN0YXJ0aW5nIGxlc3MgdGhhbiA0 IHBpeGVscyBmcm9tIHRoZSByaWdodCBlZGdlIG9mCisJICogdGhlIHNjcmVlbi4KKwkgKiBCZXNp ZGVzIHRoZSBhYm92ZSBXQSBmaXggdGhlIHNpbWlsYXIgcHJvYmxlbSwgd2hlcmUgcGxhbmVzIG90 aGVyCisJICogdGhhbiB0aGUgY3Vyc29yIGVuZGluZyBsZXNzIHRoYW4gNCBwaXhlbHMgZnJvbSB0 aGUgbGVmdCBlZGdlIG9mIHRoZQorCSAqIHNjcmVlbiBtYXkgY2F1c2UgRklGTyB1bmRlcmZsb3cg YW5kIGRpc3BsYXkgY29ycnVwdGlvbi4KKwkgKi8KKwlpZiAoKElTX0dFTUlOSUxBS0UoZGV2X3By aXYpIHx8IElTX0NBTk5PTkxBS0UoZGV2X3ByaXYpKSAmJgorCSAgICAoY3J0Y194ICsgY3J0Y193 IDwgNCB8fCBjcnRjX3ggPiBwaXBlX3NyY193IC0gNCkpIHsKKwkJZHJtX2RiZ19rbXMoJmRldl9w cml2LT5kcm0sCisJCQkgICAgInJlcXVlc3RlZCBwbGFuZSBYICVzIHBvc2l0aW9uICVkIGludmFs aWQgKHZhbGlkIHJhbmdlICVkLSVkKVxuIiwKKwkJCSAgICBjcnRjX3ggKyBjcnRjX3cgPCA0ID8g ImVuZCIgOiAic3RhcnQiLAorCQkJICAgIGNydGNfeCArIGNydGNfdyA8IDQgPyBjcnRjX3ggKyBj cnRjX3cgOiBjcnRjX3gsCisJCQkgICAgNCwgcGlwZV9zcmNfdyAtIDQpOworCQlyZXR1cm4gLUVS QU5HRTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBza2xfcGxhbmVfY2hlY2tf bnYxMl9yb3RhdGlvbihjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRl KQoreworCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3 LmZiOworCXVuc2lnbmVkIGludCByb3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5ody5yb3RhdGlvbjsK KwlpbnQgc3JjX3cgPSBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuc3JjKSA+PiAx NjsKKworCS8qIERpc3BsYXkgV0EgIzExMDYgKi8KKwlpZiAoaW50ZWxfZm9ybWF0X2luZm9faXNf eXV2X3NlbWlwbGFuYXIoZmItPmZvcm1hdCwgZmItPm1vZGlmaWVyKSAmJgorCSAgICBzcmNfdyAm IDMgJiYKKwkgICAgKHJvdGF0aW9uID09IERSTV9NT0RFX1JPVEFURV8yNzAgfHwKKwkgICAgIHJv dGF0aW9uID09IChEUk1fTU9ERV9SRUZMRUNUX1ggfCBEUk1fTU9ERV9ST1RBVEVfOTApKSkgewor CQlEUk1fREVCVUdfS01TKCJzcmMgd2lkdGggbXVzdCBiZSBtdWx0aXBsZSBvZiA0IGZvciByb3Rh dGVkIHBsYW5hciBZVVZcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCBza2xfcGxhbmVfbWF4X3NjYWxlKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpm YikKK3sKKwkvKgorCSAqIFdlIGRvbid0IHlldCBrbm93IHRoZSBmaW5hbCBzb3VyY2Ugd2lkdGgg bm9yCisJICogd2hldGhlciB3ZSBjYW4gdXNlIHRoZSBIUSBzY2FsZXIgbW9kZS4gQXNzdW1lCisJ ICogdGhlIGJlc3QgY2FzZS4KKwkgKiBGSVhNRSBuZWVkIHRvIHByb3Blcmx5IGNoZWNrIHRoaXMg bGF0ZXIuCisJICovCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTAgfHwgSVNfR0VNSU5J TEFLRShkZXZfcHJpdikgfHwKKwkgICAgIWludGVsX2Zvcm1hdF9pbmZvX2lzX3l1dl9zZW1pcGxh bmFyKGZiLT5mb3JtYXQsIGZiLT5tb2RpZmllcikpCisJCXJldHVybiAweDMwMDAwIC0gMTsKKwll bHNlCisJCXJldHVybiAweDIwMDAwIC0gMTsKK30KKworc3RhdGljIGludCBpbnRlbF9wbGFuZV9t aW5fd2lkdGgoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKKwkJCQkgY29uc3Qgc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciAqZmIsCisJCQkJIGludCBjb2xvcl9wbGFuZSwKKwkJCQkgdW5zaWduZWQg aW50IHJvdGF0aW9uKQoreworCWlmIChwbGFuZS0+bWluX3dpZHRoKQorCQlyZXR1cm4gcGxhbmUt Pm1pbl93aWR0aChmYiwgY29sb3JfcGxhbmUsIHJvdGF0aW9uKTsKKwllbHNlCisJCXJldHVybiAx OworfQorCitzdGF0aWMgaW50IGludGVsX3BsYW5lX21heF93aWR0aChzdHJ1Y3QgaW50ZWxfcGxh bmUgKnBsYW5lLAorCQkJCSBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwkJCQkg aW50IGNvbG9yX3BsYW5lLAorCQkJCSB1bnNpZ25lZCBpbnQgcm90YXRpb24pCit7CisJaWYgKHBs YW5lLT5tYXhfd2lkdGgpCisJCXJldHVybiBwbGFuZS0+bWF4X3dpZHRoKGZiLCBjb2xvcl9wbGFu ZSwgcm90YXRpb24pOworCWVsc2UKKwkJcmV0dXJuIElOVF9NQVg7Cit9CisKK3N0YXRpYyBpbnQg aW50ZWxfcGxhbmVfbWF4X2hlaWdodChzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAorCQkJCSAg Y29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJCQkJICBpbnQgY29sb3JfcGxhbmUs CisJCQkJICB1bnNpZ25lZCBpbnQgcm90YXRpb24pCit7CisJaWYgKHBsYW5lLT5tYXhfaGVpZ2h0 KQorCQlyZXR1cm4gcGxhbmUtPm1heF9oZWlnaHQoZmIsIGNvbG9yX3BsYW5lLCByb3RhdGlvbik7 CisJZWxzZQorCQlyZXR1cm4gSU5UX01BWDsKK30KKworc3RhdGljIGJvb2wKK3NrbF9jaGVja19t YWluX2Njc19jb29yZGluYXRlcyhzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRl LAorCQkJICAgICAgIGludCBtYWluX3gsIGludCBtYWluX3ksIHUzMiBtYWluX29mZnNldCwKKwkJ CSAgICAgICBpbnQgY2NzX3BsYW5lKQoreworCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIg KmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOworCWludCBhdXhfeCA9IHBsYW5lX3N0YXRlLT5jb2xv cl9wbGFuZVtjY3NfcGxhbmVdLng7CisJaW50IGF1eF95ID0gcGxhbmVfc3RhdGUtPmNvbG9yX3Bs YW5lW2Njc19wbGFuZV0ueTsKKwl1MzIgYXV4X29mZnNldCA9IHBsYW5lX3N0YXRlLT5jb2xvcl9w bGFuZVtjY3NfcGxhbmVdLm9mZnNldDsKKwl1MzIgYWxpZ25tZW50ID0gaW50ZWxfc3VyZl9hbGln bm1lbnQoZmIsIGNjc19wbGFuZSk7CisJaW50IGhzdWI7CisJaW50IHZzdWI7CisKKwlpbnRlbF9m Yl9wbGFuZV9nZXRfc3Vic2FtcGxpbmcoJmhzdWIsICZ2c3ViLCBmYiwgY2NzX3BsYW5lKTsKKwl3 aGlsZSAoYXV4X29mZnNldCA+PSBtYWluX29mZnNldCAmJiBhdXhfeSA8PSBtYWluX3kpIHsKKwkJ aW50IHgsIHk7CisKKwkJaWYgKGF1eF94ID09IG1haW5feCAmJiBhdXhfeSA9PSBtYWluX3kpCisJ CQlicmVhazsKKworCQlpZiAoYXV4X29mZnNldCA9PSAwKQorCQkJYnJlYWs7CisKKwkJeCA9IGF1 eF94IC8gaHN1YjsKKwkJeSA9IGF1eF95IC8gdnN1YjsKKwkJYXV4X29mZnNldCA9IGludGVsX3Bs YW5lX2FkanVzdF9hbGlnbmVkX29mZnNldCgmeCwgJnksCisJCQkJCQkJICAgICAgIHBsYW5lX3N0 YXRlLAorCQkJCQkJCSAgICAgICBjY3NfcGxhbmUsCisJCQkJCQkJICAgICAgIGF1eF9vZmZzZXQs CisJCQkJCQkJICAgICAgIGF1eF9vZmZzZXQgLQorCQkJCQkJCQlhbGlnbm1lbnQpOworCQlhdXhf eCA9IHggKiBoc3ViICsgYXV4X3ggJSBoc3ViOworCQlhdXhfeSA9IHkgKiB2c3ViICsgYXV4X3kg JSB2c3ViOworCX0KKworCWlmIChhdXhfeCAhPSBtYWluX3ggfHwgYXV4X3kgIT0gbWFpbl95KQor CQlyZXR1cm4gZmFsc2U7CisKKwlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbY2NzX3BsYW5lXS5v ZmZzZXQgPSBhdXhfb2Zmc2V0OworCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjY3NfcGxhbmVd LnggPSBhdXhfeDsKKwlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbY2NzX3BsYW5lXS55ID0gYXV4 X3k7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGludCBza2xfY2hlY2tfbWFpbl9zdXJm YWNlKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJc3RydWN0IGlu dGVsX3BsYW5lICpwbGFuZSA9IHRvX2ludGVsX3BsYW5lKHBsYW5lX3N0YXRlLT51YXBpLnBsYW5l KTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5i YXNlLmRldik7CisJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0 ZS0+aHcuZmI7CisJdW5zaWduZWQgaW50IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmh3LnJvdGF0 aW9uOworCWludCB4ID0gcGxhbmVfc3RhdGUtPnVhcGkuc3JjLngxID4+IDE2OworCWludCB5ID0g cGxhbmVfc3RhdGUtPnVhcGkuc3JjLnkxID4+IDE2OworCWludCB3ID0gZHJtX3JlY3Rfd2lkdGgo JnBsYW5lX3N0YXRlLT51YXBpLnNyYykgPj4gMTY7CisJaW50IGggPSBkcm1fcmVjdF9oZWlnaHQo JnBsYW5lX3N0YXRlLT51YXBpLnNyYykgPj4gMTY7CisJaW50IG1pbl93aWR0aCA9IGludGVsX3Bs YW5lX21pbl93aWR0aChwbGFuZSwgZmIsIDAsIHJvdGF0aW9uKTsKKwlpbnQgbWF4X3dpZHRoID0g aW50ZWxfcGxhbmVfbWF4X3dpZHRoKHBsYW5lLCBmYiwgMCwgcm90YXRpb24pOworCWludCBtYXhf aGVpZ2h0ID0gaW50ZWxfcGxhbmVfbWF4X2hlaWdodChwbGFuZSwgZmIsIDAsIHJvdGF0aW9uKTsK KwlpbnQgYXV4X3BsYW5lID0gc2tsX21haW5fdG9fYXV4X3BsYW5lKGZiLCAwKTsKKwl1MzIgYXV4 X29mZnNldCA9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVthdXhfcGxhbmVdLm9mZnNldDsKKwl1 MzIgYWxpZ25tZW50LCBvZmZzZXQ7CisKKwlpZiAodyA+IG1heF93aWR0aCB8fCB3IDwgbWluX3dp ZHRoIHx8IGggPiBtYXhfaGVpZ2h0KSB7CisJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAor CQkJICAgICJyZXF1ZXN0ZWQgWS9SR0Igc291cmNlIHNpemUgJWR4JWQgb3V0c2lkZSBsaW1pdHMg KG1pbjogJWR4MSBtYXg6ICVkeCVkKVxuIiwKKwkJCSAgICB3LCBoLCBtaW5fd2lkdGgsIG1heF93 aWR0aCwgbWF4X2hlaWdodCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWludGVsX2FkZF9m Yl9vZmZzZXRzKCZ4LCAmeSwgcGxhbmVfc3RhdGUsIDApOworCW9mZnNldCA9IGludGVsX3BsYW5l X2NvbXB1dGVfYWxpZ25lZF9vZmZzZXQoJngsICZ5LCBwbGFuZV9zdGF0ZSwgMCk7CisJYWxpZ25t ZW50ID0gaW50ZWxfc3VyZl9hbGlnbm1lbnQoZmIsIDApOworCWlmIChkcm1fV0FSTl9PTigmZGV2 X3ByaXYtPmRybSwgYWxpZ25tZW50ICYmICFpc19wb3dlcl9vZl8yKGFsaWdubWVudCkpKQorCQly ZXR1cm4gLUVJTlZBTDsKKworCS8qCisJICogQVVYIHN1cmZhY2Ugb2Zmc2V0IGlzIHNwZWNpZmll ZCBhcyB0aGUgZGlzdGFuY2UgZnJvbSB0aGUKKwkgKiBtYWluIHN1cmZhY2Ugb2Zmc2V0LCBhbmQg aXQgbXVzdCBiZSBub24tbmVnYXRpdmUuIE1ha2UKKwkgKiBzdXJlIHRoYXQgaXMgd2hhdCB3ZSB3 aWxsIGdldC4KKwkgKi8KKwlpZiAoYXV4X3BsYW5lICYmIG9mZnNldCA+IGF1eF9vZmZzZXQpCisJ CW9mZnNldCA9IGludGVsX3BsYW5lX2FkanVzdF9hbGlnbmVkX29mZnNldCgmeCwgJnksIHBsYW5l X3N0YXRlLCAwLAorCQkJCQkJCSAgIG9mZnNldCwgYXV4X29mZnNldCAmIH4oYWxpZ25tZW50IC0g MSkpOworCisJLyoKKwkgKiBXaGVuIHVzaW5nIGFuIFgtdGlsZWQgc3VyZmFjZSwgdGhlIHBsYW5l IGJsb3dzIHVwCisJICogaWYgdGhlIHggb2Zmc2V0ICsgd2lkdGggZXhjZWVkIHRoZSBzdHJpZGUu CisJICoKKwkgKiBUT0RPOiBsaW5lYXIgYW5kIFktdGlsZWQgc2VlbSBmaW5lLCBZZiB1bnRlc3Rl ZCwKKwkgKi8KKwlpZiAoZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9YX1RJTEVEKSB7 CisJCWludCBjcHAgPSBmYi0+Zm9ybWF0LT5jcHBbMF07CisKKwkJd2hpbGUgKCh4ICsgdykgKiBj cHAgPiBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0uc3RyaWRlKSB7CisJCQlpZiAob2Zmc2V0 ID09IDApIHsKKwkJCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKKwkJCQkJICAgICJVbmFi bGUgdG8gZmluZCBzdWl0YWJsZSBkaXNwbGF5IHN1cmZhY2Ugb2Zmc2V0IGR1ZSB0byBYLXRpbGlu Z1xuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisKKwkJCW9mZnNldCA9IGludGVsX3Bs YW5lX2FkanVzdF9hbGlnbmVkX29mZnNldCgmeCwgJnksIHBsYW5lX3N0YXRlLCAwLAorCQkJCQkJ CQkgICBvZmZzZXQsIG9mZnNldCAtIGFsaWdubWVudCk7CisJCX0KKwl9CisKKwkvKgorCSAqIEND UyBBVVggc3VyZmFjZSBkb2Vzbid0IGhhdmUgaXRzIG93biB4L3kgb2Zmc2V0cywgd2UgbXVzdCBt YWtlIHN1cmUKKwkgKiB0aGV5IG1hdGNoIHdpdGggdGhlIG1haW4gc3VyZmFjZSB4L3kgb2Zmc2V0 cy4KKwkgKi8KKwlpZiAoaXNfY2NzX21vZGlmaWVyKGZiLT5tb2RpZmllcikpIHsKKwkJd2hpbGUg KCFza2xfY2hlY2tfbWFpbl9jY3NfY29vcmRpbmF0ZXMocGxhbmVfc3RhdGUsIHgsIHksCisJCQkJ CQkgICAgICAgb2Zmc2V0LCBhdXhfcGxhbmUpKSB7CisJCQlpZiAob2Zmc2V0ID09IDApCisJCQkJ YnJlYWs7CisKKwkJCW9mZnNldCA9IGludGVsX3BsYW5lX2FkanVzdF9hbGlnbmVkX29mZnNldCgm eCwgJnksIHBsYW5lX3N0YXRlLCAwLAorCQkJCQkJCQkgICBvZmZzZXQsIG9mZnNldCAtIGFsaWdu bWVudCk7CisJCX0KKworCQlpZiAoeCAhPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbYXV4X3Bs YW5lXS54IHx8CisJCSAgICB5ICE9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVthdXhfcGxhbmVd LnkpIHsKKwkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAorCQkJCSAgICAiVW5hYmxlIHRv IGZpbmQgc3VpdGFibGUgZGlzcGxheSBzdXJmYWNlIG9mZnNldCBkdWUgdG8gQ0NTXG4iKTsKKwkJ CXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBd Lm9mZnNldCA9IG9mZnNldDsKKwlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0ueCA9IHg7CisJ cGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLnkgPSB5OworCisJLyoKKwkgKiBQdXQgdGhlIGZp bmFsIGNvb3JkaW5hdGVzIGJhY2sgc28gdGhhdCB0aGUgc3JjCisJICogY29vcmRpbmF0ZSBjaGVj a3Mgd2lsbCBzZWUgdGhlIHJpZ2h0IHZhbHVlcy4KKwkgKi8KKwlkcm1fcmVjdF90cmFuc2xhdGVf dG8oJnBsYW5lX3N0YXRlLT51YXBpLnNyYywKKwkJCSAgICAgIHggPDwgMTYsIHkgPDwgMTYpOwor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2tsX2NoZWNrX252MTJfYXV4X3N1cmZhY2Uo c3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwlzdHJ1Y3QgaW50ZWxf cGxhbmUgKnBsYW5lID0gdG9faW50ZWxfcGxhbmUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUpOwor CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYp OworCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZi OworCXVuc2lnbmVkIGludCByb3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5ody5yb3RhdGlvbjsKKwlp bnQgdXZfcGxhbmUgPSAxOworCWludCBtYXhfd2lkdGggPSBpbnRlbF9wbGFuZV9tYXhfd2lkdGgo cGxhbmUsIGZiLCB1dl9wbGFuZSwgcm90YXRpb24pOworCWludCBtYXhfaGVpZ2h0ID0gaW50ZWxf cGxhbmVfbWF4X2hlaWdodChwbGFuZSwgZmIsIHV2X3BsYW5lLCByb3RhdGlvbik7CisJaW50IHgg PSBwbGFuZV9zdGF0ZS0+dWFwaS5zcmMueDEgPj4gMTc7CisJaW50IHkgPSBwbGFuZV9zdGF0ZS0+ dWFwaS5zcmMueTEgPj4gMTc7CisJaW50IHcgPSBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUt PnVhcGkuc3JjKSA+PiAxNzsKKwlpbnQgaCA9IGRybV9yZWN0X2hlaWdodCgmcGxhbmVfc3RhdGUt PnVhcGkuc3JjKSA+PiAxNzsKKwl1MzIgb2Zmc2V0OworCisJLyogRklYTUUgbm90IHF1aXRlIHN1 cmUgaG93L2lmIHRoZXNlIGFwcGx5IHRvIHRoZSBjaHJvbWEgcGxhbmUgKi8KKwlpZiAodyA+IG1h eF93aWR0aCB8fCBoID4gbWF4X2hlaWdodCkgeworCQlkcm1fZGJnX2ttcygmaTkxNS0+ZHJtLAor CQkJICAgICJDYkNyIHNvdXJjZSBzaXplICVkeCVkIHRvbyBiaWcgKGxpbWl0ICVkeCVkKVxuIiwK KwkJCSAgICB3LCBoLCBtYXhfd2lkdGgsIG1heF9oZWlnaHQpOworCQlyZXR1cm4gLUVJTlZBTDsK Kwl9CisKKwlpbnRlbF9hZGRfZmJfb2Zmc2V0cygmeCwgJnksIHBsYW5lX3N0YXRlLCB1dl9wbGFu ZSk7CisJb2Zmc2V0ID0gaW50ZWxfcGxhbmVfY29tcHV0ZV9hbGlnbmVkX29mZnNldCgmeCwgJnks CisJCQkJCQkgICAgcGxhbmVfc3RhdGUsIHV2X3BsYW5lKTsKKworCWlmIChpc19jY3NfbW9kaWZp ZXIoZmItPm1vZGlmaWVyKSkgeworCQlpbnQgY2NzX3BsYW5lID0gbWFpbl90b19jY3NfcGxhbmUo ZmIsIHV2X3BsYW5lKTsKKwkJdTMyIGF1eF9vZmZzZXQgPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxh bmVbY2NzX3BsYW5lXS5vZmZzZXQ7CisJCXUzMiBhbGlnbm1lbnQgPSBpbnRlbF9zdXJmX2FsaWdu bWVudChmYiwgdXZfcGxhbmUpOworCisJCWlmIChvZmZzZXQgPiBhdXhfb2Zmc2V0KQorCQkJb2Zm c2V0ID0gaW50ZWxfcGxhbmVfYWRqdXN0X2FsaWduZWRfb2Zmc2V0KCZ4LCAmeSwKKwkJCQkJCQkJ ICAgcGxhbmVfc3RhdGUsCisJCQkJCQkJCSAgIHV2X3BsYW5lLAorCQkJCQkJCQkgICBvZmZzZXQs CisJCQkJCQkJCSAgIGF1eF9vZmZzZXQgJiB+KGFsaWdubWVudCAtIDEpKTsKKworCQl3aGlsZSAo IXNrbF9jaGVja19tYWluX2Njc19jb29yZGluYXRlcyhwbGFuZV9zdGF0ZSwgeCwgeSwKKwkJCQkJ CSAgICAgICBvZmZzZXQsIGNjc19wbGFuZSkpIHsKKwkJCWlmIChvZmZzZXQgPT0gMCkKKwkJCQli cmVhazsKKworCQkJb2Zmc2V0ID0gaW50ZWxfcGxhbmVfYWRqdXN0X2FsaWduZWRfb2Zmc2V0KCZ4 LCAmeSwKKwkJCQkJCQkJICAgcGxhbmVfc3RhdGUsCisJCQkJCQkJCSAgIHV2X3BsYW5lLAorCQkJ CQkJCQkgICBvZmZzZXQsIG9mZnNldCAtIGFsaWdubWVudCk7CisJCX0KKworCQlpZiAoeCAhPSBw bGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbY2NzX3BsYW5lXS54IHx8CisJCSAgICB5ICE9IHBsYW5l X3N0YXRlLT5jb2xvcl9wbGFuZVtjY3NfcGxhbmVdLnkpIHsKKwkJCWRybV9kYmdfa21zKCZpOTE1 LT5kcm0sCisJCQkJICAgICJVbmFibGUgdG8gZmluZCBzdWl0YWJsZSBkaXNwbGF5IHN1cmZhY2Ug b2Zmc2V0IGR1ZSB0byBDQ1NcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlw bGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbdXZfcGxhbmVdLm9mZnNldCA9IG9mZnNldDsKKwlwbGFu ZV9zdGF0ZS0+Y29sb3JfcGxhbmVbdXZfcGxhbmVdLnggPSB4OworCXBsYW5lX3N0YXRlLT5jb2xv cl9wbGFuZVt1dl9wbGFuZV0ueSA9IHk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBz a2xfY2hlY2tfY2NzX2F1eF9zdXJmYWNlKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVf c3RhdGUpCit7CisJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0 ZS0+aHcuZmI7CisJaW50IHNyY194ID0gcGxhbmVfc3RhdGUtPnVhcGkuc3JjLngxID4+IDE2Owor CWludCBzcmNfeSA9IHBsYW5lX3N0YXRlLT51YXBpLnNyYy55MSA+PiAxNjsKKwl1MzIgb2Zmc2V0 OworCWludCBjY3NfcGxhbmU7CisKKwlmb3IgKGNjc19wbGFuZSA9IDA7IGNjc19wbGFuZSA8IGZi LT5mb3JtYXQtPm51bV9wbGFuZXM7IGNjc19wbGFuZSsrKSB7CisJCWludCBtYWluX2hzdWIsIG1h aW5fdnN1YjsKKwkJaW50IGhzdWIsIHZzdWI7CisJCWludCB4LCB5OworCisJCWlmICghaXNfY2Nz X3BsYW5lKGZiLCBjY3NfcGxhbmUpKQorCQkJY29udGludWU7CisKKwkJaW50ZWxfZmJfcGxhbmVf Z2V0X3N1YnNhbXBsaW5nKCZtYWluX2hzdWIsICZtYWluX3ZzdWIsIGZiLAorCQkJCQkgICAgICAg c2tsX2Njc190b19tYWluX3BsYW5lKGZiLCBjY3NfcGxhbmUpKTsKKwkJaW50ZWxfZmJfcGxhbmVf Z2V0X3N1YnNhbXBsaW5nKCZoc3ViLCAmdnN1YiwgZmIsIGNjc19wbGFuZSk7CisKKwkJaHN1YiAq PSBtYWluX2hzdWI7CisJCXZzdWIgKj0gbWFpbl92c3ViOworCQl4ID0gc3JjX3ggLyBoc3ViOwor CQl5ID0gc3JjX3kgLyB2c3ViOworCisJCWludGVsX2FkZF9mYl9vZmZzZXRzKCZ4LCAmeSwgcGxh bmVfc3RhdGUsIGNjc19wbGFuZSk7CisKKwkJb2Zmc2V0ID0gaW50ZWxfcGxhbmVfY29tcHV0ZV9h bGlnbmVkX29mZnNldCgmeCwgJnksCisJCQkJCQkJICAgIHBsYW5lX3N0YXRlLAorCQkJCQkJCSAg ICBjY3NfcGxhbmUpOworCisJCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjY3NfcGxhbmVdLm9m ZnNldCA9IG9mZnNldDsKKwkJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2Njc19wbGFuZV0ueCA9 ICh4ICogaHN1YiArCisJCQkJCQkJIHNyY194ICUgaHN1YikgLworCQkJCQkJCW1haW5faHN1YjsK KwkJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2Njc19wbGFuZV0ueSA9ICh5ICogdnN1YiArCisJ CQkJCQkJIHNyY195ICUgdnN1YikgLworCQkJCQkJCW1haW5fdnN1YjsKKwl9CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludCBza2xfY2hlY2tfcGxhbmVfc3VyZmFjZShzdHJ1Y3QgaW50ZWxf cGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQoreworCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOworCWludCByZXQsIGk7CisKKwlyZXQgPSBpbnRl bF9wbGFuZV9jb21wdXRlX2d0dChwbGFuZV9zdGF0ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJl dDsKKworCWlmICghcGxhbmVfc3RhdGUtPnVhcGkudmlzaWJsZSkKKwkJcmV0dXJuIDA7CisKKwkv KgorCSAqIEhhbmRsZSB0aGUgQVVYIHN1cmZhY2UgZmlyc3Qgc2luY2UgdGhlIG1haW4gc3VyZmFj ZSBzZXR1cCBkZXBlbmRzIG9uCisJICogaXQuCisJICovCisJaWYgKGlzX2Njc19tb2RpZmllcihm Yi0+bW9kaWZpZXIpKSB7CisJCXJldCA9IHNrbF9jaGVja19jY3NfYXV4X3N1cmZhY2UocGxhbmVf c3RhdGUpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAoaW50ZWxfZm9y bWF0X2luZm9faXNfeXV2X3NlbWlwbGFuYXIoZmItPmZvcm1hdCwKKwkJCQkJCWZiLT5tb2RpZmll cikpIHsKKwkJcmV0ID0gc2tsX2NoZWNrX252MTJfYXV4X3N1cmZhY2UocGxhbmVfc3RhdGUpOwor CQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlmb3IgKGkgPSBmYi0+Zm9ybWF0LT5u dW1fcGxhbmVzOyBpIDwgQVJSQVlfU0laRShwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmUpOyBpKysp IHsKKwkJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2ldLm9mZnNldCA9IDA7CisJCXBsYW5lX3N0 YXRlLT5jb2xvcl9wbGFuZVtpXS54ID0gMDsKKwkJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2ld LnkgPSAwOworCX0KKworCXJldCA9IHNrbF9jaGVja19tYWluX3N1cmZhY2UocGxhbmVfc3RhdGUp OworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGJv b2wgaW50ZWxfZmJfc2NhbGFibGUoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpCit7 CisJaWYgKCFmYikKKwkJcmV0dXJuIGZhbHNlOworCisJc3dpdGNoIChmYi0+Zm9ybWF0LT5mb3Jt YXQpIHsKKwljYXNlIERSTV9GT1JNQVRfQzg6CisJCXJldHVybiBmYWxzZTsKKwljYXNlIERSTV9G T1JNQVRfWFJHQjE2MTYxNjE2RjoKKwljYXNlIERSTV9GT1JNQVRfQVJHQjE2MTYxNjE2RjoKKwlj YXNlIERSTV9GT1JNQVRfWEJHUjE2MTYxNjE2RjoKKwljYXNlIERSTV9GT1JNQVRfQUJHUjE2MTYx NjE2RjoKKwkJcmV0dXJuIElOVEVMX0dFTih0b19pOTE1KGZiLT5kZXYpKSA+PSAxMTsKKwlkZWZh dWx0OgorCQlyZXR1cm4gdHJ1ZTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc2tsX3BsYW5lX2NoZWNr KHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkJICAgc3RydWN0IGludGVs X3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5l ID0gdG9faW50ZWxfcGxhbmUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUpOworCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKKwljb25z dCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKKwlpbnQg bWluX3NjYWxlID0gRFJNX1BMQU5FX0hFTFBFUl9OT19TQ0FMSU5HOworCWludCBtYXhfc2NhbGUg PSBEUk1fUExBTkVfSEVMUEVSX05PX1NDQUxJTkc7CisJaW50IHJldDsKKworCXJldCA9IHNrbF9w bGFuZV9jaGVja19mYihjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSk7CisJaWYgKHJldCkKKwkJcmV0 dXJuIHJldDsKKworCS8qIHVzZSBzY2FsZXIgd2hlbiBjb2xvcmtleSBpcyBub3QgcmVxdWlyZWQg Ki8KKwlpZiAoIXBsYW5lX3N0YXRlLT5ja2V5LmZsYWdzICYmIGludGVsX2ZiX3NjYWxhYmxlKGZi KSkgeworCQltaW5fc2NhbGUgPSAxOworCQltYXhfc2NhbGUgPSBza2xfcGxhbmVfbWF4X3NjYWxl KGRldl9wcml2LCBmYik7CisJfQorCisJcmV0ID0gaW50ZWxfYXRvbWljX3BsYW5lX2NoZWNrX2Ns aXBwaW5nKHBsYW5lX3N0YXRlLCBjcnRjX3N0YXRlLAorCQkJCQkJbWluX3NjYWxlLCBtYXhfc2Nh bGUsIHRydWUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBza2xfY2hlY2tf cGxhbmVfc3VyZmFjZShwbGFuZV9zdGF0ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwor CWlmICghcGxhbmVfc3RhdGUtPnVhcGkudmlzaWJsZSkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBz a2xfcGxhbmVfY2hlY2tfZHN0X2Nvb3JkaW5hdGVzKGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlKTsK KwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gaW50ZWxfcGxhbmVfY2hlY2tfc3Jj X2Nvb3JkaW5hdGVzKHBsYW5lX3N0YXRlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJ cmV0ID0gc2tsX3BsYW5lX2NoZWNrX252MTJfcm90YXRpb24ocGxhbmVfc3RhdGUpOworCWlmIChy ZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBIVyBvbmx5IGhhcyA4IGJpdHMgcGl4ZWwgcHJlY2lz aW9uLCBkaXNhYmxlIHBsYW5lIGlmIGludmlzaWJsZSAqLworCWlmICghKHBsYW5lX3N0YXRlLT5o dy5hbHBoYSA+PiA4KSkKKwkJcGxhbmVfc3RhdGUtPnVhcGkudmlzaWJsZSA9IGZhbHNlOworCisJ cGxhbmVfc3RhdGUtPmN0bCA9IHNrbF9wbGFuZV9jdGwoY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUp OworCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTAgfHwgSVNfR0VNSU5JTEFLRShkZXZf cHJpdikpCisJCXBsYW5lX3N0YXRlLT5jb2xvcl9jdGwgPSBnbGtfcGxhbmVfY29sb3JfY3RsKGNy dGNfc3RhdGUsCisJCQkJCQkJICAgICBwbGFuZV9zdGF0ZSk7CisKKwlpZiAoaW50ZWxfZm9ybWF0 X2luZm9faXNfeXV2X3NlbWlwbGFuYXIoZmItPmZvcm1hdCwgZmItPm1vZGlmaWVyKSAmJgorCSAg ICBpY2xfaXNfaGRyX3BsYW5lKGRldl9wcml2LCBwbGFuZS0+aWQpKQorCQkvKiBFbmFibGUgYW5k IHVzZSBNUEVHLTIgY2hyb21hIHNpdGluZyAqLworCQlwbGFuZV9zdGF0ZS0+Y3VzX2N0bCA9IFBM QU5FX0NVU19FTkFCTEUgfAorCQkJUExBTkVfQ1VTX0hQSEFTRV8wIHwKKwkJCVBMQU5FX0NVU19W UEhBU0VfU0lHTl9ORUdBVElWRSB8IFBMQU5FX0NVU19WUEhBU0VfMF8yNTsKKwllbHNlCisJCXBs YW5lX3N0YXRlLT5jdXNfY3RsID0gMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgYm9vbCBz a2xfcGxhbmVfaGFzX2ZiYyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkg ICAgICBlbnVtIHBpcGUgcGlwZSwgZW51bSBwbGFuZV9pZCBwbGFuZV9pZCkKK3sKKwlpZiAoIUhB U19GQkMoZGV2X3ByaXYpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gcGlwZSA9PSBQSVBF X0EgJiYgcGxhbmVfaWQgPT0gUExBTkVfUFJJTUFSWTsKK30KKworc3RhdGljIGJvb2wgc2tsX3Bs YW5lX2hhc19wbGFuYXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCSBl bnVtIHBpcGUgcGlwZSwgZW51bSBwbGFuZV9pZCBwbGFuZV9pZCkKK3sKKwkvKiBEaXNwbGF5IFdB ICMwODcwOiBza2wsIGJ4dCAqLworCWlmIChJU19TS1lMQUtFKGRldl9wcml2KSB8fCBJU19CUk9Y VE9OKGRldl9wcml2KSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKElTX0dFTihkZXZfcHJpdiwg OSkgJiYgIUlTX0dFTUlOSUxBS0UoZGV2X3ByaXYpICYmIHBpcGUgPT0gUElQRV9DKQorCQlyZXR1 cm4gZmFsc2U7CisKKwlpZiAocGxhbmVfaWQgIT0gUExBTkVfUFJJTUFSWSAmJiBwbGFuZV9pZCAh PSBQTEFORV9TUFJJVEUwKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwor c3RhdGljIGNvbnN0IHUzMiAqc2tsX2dldF9wbGFuZV9mb3JtYXRzKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwKKwkJCQkJZW51bSBwaXBlIHBpcGUsIGVudW0gcGxhbmVfaWQgcGxh bmVfaWQsCisJCQkJCWludCAqbnVtX2Zvcm1hdHMpCit7CisJaWYgKHNrbF9wbGFuZV9oYXNfcGxh bmFyKGRldl9wcml2LCBwaXBlLCBwbGFuZV9pZCkpIHsKKwkJKm51bV9mb3JtYXRzID0gQVJSQVlf U0laRShza2xfcGxhbmFyX2Zvcm1hdHMpOworCQlyZXR1cm4gc2tsX3BsYW5hcl9mb3JtYXRzOwor CX0gZWxzZSB7CisJCSpudW1fZm9ybWF0cyA9IEFSUkFZX1NJWkUoc2tsX3BsYW5lX2Zvcm1hdHMp OworCQlyZXR1cm4gc2tsX3BsYW5lX2Zvcm1hdHM7CisJfQorfQorCitzdGF0aWMgY29uc3QgdTMy ICpnbGtfZ2V0X3BsYW5lX2Zvcm1hdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 LAorCQkJCQllbnVtIHBpcGUgcGlwZSwgZW51bSBwbGFuZV9pZCBwbGFuZV9pZCwKKwkJCQkJaW50 ICpudW1fZm9ybWF0cykKK3sKKwlpZiAoc2tsX3BsYW5lX2hhc19wbGFuYXIoZGV2X3ByaXYsIHBp cGUsIHBsYW5lX2lkKSkgeworCQkqbnVtX2Zvcm1hdHMgPSBBUlJBWV9TSVpFKGdsa19wbGFuYXJf Zm9ybWF0cyk7CisJCXJldHVybiBnbGtfcGxhbmFyX2Zvcm1hdHM7CisJfSBlbHNlIHsKKwkJKm51 bV9mb3JtYXRzID0gQVJSQVlfU0laRShza2xfcGxhbmVfZm9ybWF0cyk7CisJCXJldHVybiBza2xf cGxhbmVfZm9ybWF0czsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCB1MzIgKmljbF9nZXRfcGxhbmVf Zm9ybWF0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJCWVudW0gcGlw ZSBwaXBlLCBlbnVtIHBsYW5lX2lkIHBsYW5lX2lkLAorCQkJCQlpbnQgKm51bV9mb3JtYXRzKQor eworCWlmIChpY2xfaXNfaGRyX3BsYW5lKGRldl9wcml2LCBwbGFuZV9pZCkpIHsKKwkJKm51bV9m b3JtYXRzID0gQVJSQVlfU0laRShpY2xfaGRyX3BsYW5lX2Zvcm1hdHMpOworCQlyZXR1cm4gaWNs X2hkcl9wbGFuZV9mb3JtYXRzOworCX0gZWxzZSBpZiAoaWNsX2lzX252MTJfeV9wbGFuZShkZXZf cHJpdiwgcGxhbmVfaWQpKSB7CisJCSpudW1fZm9ybWF0cyA9IEFSUkFZX1NJWkUoaWNsX3Nkcl95 X3BsYW5lX2Zvcm1hdHMpOworCQlyZXR1cm4gaWNsX3Nkcl95X3BsYW5lX2Zvcm1hdHM7CisJfSBl bHNlIHsKKwkJKm51bV9mb3JtYXRzID0gQVJSQVlfU0laRShpY2xfc2RyX3V2X3BsYW5lX2Zvcm1h dHMpOworCQlyZXR1cm4gaWNsX3Nkcl91dl9wbGFuZV9mb3JtYXRzOworCX0KK30KKworc3RhdGlj IGJvb2wgc2tsX3BsYW5lX2hhc19jY3Moc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 LAorCQkJICAgICAgZW51bSBwaXBlIHBpcGUsIGVudW0gcGxhbmVfaWQgcGxhbmVfaWQpCit7CisJ aWYgKHBsYW5lX2lkID09IFBMQU5FX0NVUlNPUikKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKElO VEVMX0dFTihkZXZfcHJpdikgPj0gMTApCisJCXJldHVybiB0cnVlOworCisJaWYgKElTX0dFTUlO SUxBS0UoZGV2X3ByaXYpKQorCQlyZXR1cm4gcGlwZSAhPSBQSVBFX0M7CisKKwlyZXR1cm4gcGlw ZSAhPSBQSVBFX0MgJiYKKwkJKHBsYW5lX2lkID09IFBMQU5FX1BSSU1BUlkgfHwKKwkJIHBsYW5l X2lkID09IFBMQU5FX1NQUklURTApOworfQorCitzdGF0aWMgYm9vbCBza2xfcGxhbmVfZm9ybWF0 X21vZF9zdXBwb3J0ZWQoc3RydWN0IGRybV9wbGFuZSAqX3BsYW5lLAorCQkJCQkgICB1MzIgZm9y bWF0LCB1NjQgbW9kaWZpZXIpCit7CisJc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSA9IHRvX2lu dGVsX3BsYW5lKF9wbGFuZSk7CisKKwlzd2l0Y2ggKG1vZGlmaWVyKSB7CisJY2FzZSBEUk1fRk9S TUFUX01PRF9MSU5FQVI6CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRDoKKwljYXNlIEk5 MTVfRk9STUFUX01PRF9ZX1RJTEVEOgorCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEOgor CQlicmVhazsKKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUzoKKwljYXNlIEk5MTVf Rk9STUFUX01PRF9ZZl9USUxFRF9DQ1M6CisJCWlmICghcGxhbmUtPmhhc19jY3MpCisJCQlyZXR1 cm4gZmFsc2U7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlz d2l0Y2ggKGZvcm1hdCkgeworCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKKwljYXNlIERSTV9G T1JNQVRfWEJHUjg4ODg6CisJY2FzZSBEUk1fRk9STUFUX0FSR0I4ODg4OgorCWNhc2UgRFJNX0ZP Uk1BVF9BQkdSODg4ODoKKwkJaWYgKGlzX2Njc19tb2RpZmllcihtb2RpZmllcikpCisJCQlyZXR1 cm4gdHJ1ZTsKKwkJZmFsbHRocm91Z2g7CisJY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKKwljYXNl IERSTV9GT1JNQVRfWFJHQjIxMDEwMTA6CisJY2FzZSBEUk1fRk9STUFUX1hCR1IyMTAxMDEwOgor CWNhc2UgRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMDoKKwljYXNlIERSTV9GT1JNQVRfQUJHUjIxMDEw MTA6CisJY2FzZSBEUk1fRk9STUFUX1lVWVY6CisJY2FzZSBEUk1fRk9STUFUX1lWWVU6CisJY2Fz ZSBEUk1fRk9STUFUX1VZVlk6CisJY2FzZSBEUk1fRk9STUFUX1ZZVVk6CisJY2FzZSBEUk1fRk9S TUFUX05WMTI6CisJY2FzZSBEUk1fRk9STUFUX1hZVVY4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9Q MDEwOgorCWNhc2UgRFJNX0ZPUk1BVF9QMDEyOgorCWNhc2UgRFJNX0ZPUk1BVF9QMDE2OgorCWNh c2UgRFJNX0ZPUk1BVF9YVllVMjEwMTAxMDoKKwkJaWYgKG1vZGlmaWVyID09IEk5MTVfRk9STUFU X01PRF9ZZl9USUxFRCkKKwkJCXJldHVybiB0cnVlOworCQlmYWxsdGhyb3VnaDsKKwljYXNlIERS TV9GT1JNQVRfQzg6CisJY2FzZSBEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkY6CisJY2FzZSBEUk1f Rk9STUFUX0FCR1IxNjE2MTYxNkY6CisJY2FzZSBEUk1fRk9STUFUX1hSR0IxNjE2MTYxNkY6CisJ Y2FzZSBEUk1fRk9STUFUX0FSR0IxNjE2MTYxNkY6CisJY2FzZSBEUk1fRk9STUFUX1kyMTA6CisJ Y2FzZSBEUk1fRk9STUFUX1kyMTI6CisJY2FzZSBEUk1fRk9STUFUX1kyMTY6CisJY2FzZSBEUk1f Rk9STUFUX1hWWVUxMl8xNjE2MTYxNjoKKwljYXNlIERSTV9GT1JNQVRfWFZZVTE2MTYxNjE2Ogor CQlpZiAobW9kaWZpZXIgPT0gRFJNX0ZPUk1BVF9NT0RfTElORUFSIHx8CisJCSAgICBtb2RpZmll ciA9PSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCB8fAorCQkgICAgbW9kaWZpZXIgPT0gSTkxNV9G T1JNQVRfTU9EX1lfVElMRUQpCisJCQlyZXR1cm4gdHJ1ZTsKKwkJZmFsbHRocm91Z2g7CisJZGVm YXVsdDoKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KKworc3RhdGljIGJvb2wgZ2VuMTJfcGxhbmVf c3VwcG9ydHNfbWNfY2NzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkJ ZW51bSBwbGFuZV9pZCBwbGFuZV9pZCkKK3sKKwkvKiBXYV8xNDAxMDQ3NzAwODp0Z2xbYTAuLmMw XSxya2xbYWxsXSxkZzFbYWxsXSAqLworCWlmIChJU19ERzEoZGV2X3ByaXYpIHx8IElTX1JPQ0tF VExBS0UoZGV2X3ByaXYpIHx8CisJICAgIElTX1RHTF9ESVNQX1JFVklEKGRldl9wcml2LCBUR0xf UkVWSURfQTAsIFRHTF9SRVZJRF9DMCkpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiBwbGFu ZV9pZCA8IFBMQU5FX1NQUklURTQ7Cit9CisKK3N0YXRpYyBib29sIGdlbjEyX3BsYW5lX2Zvcm1h dF9tb2Rfc3VwcG9ydGVkKHN0cnVjdCBkcm1fcGxhbmUgKl9wbGFuZSwKKwkJCQkJICAgICB1MzIg Zm9ybWF0LCB1NjQgbW9kaWZpZXIpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gdG9faTkxNShfcGxhbmUtPmRldik7CisJc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSA9 IHRvX2ludGVsX3BsYW5lKF9wbGFuZSk7CisKKwlzd2l0Y2ggKG1vZGlmaWVyKSB7CisJY2FzZSBJ OTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9NQ19DQ1M6CisJCWlmICghZ2VuMTJfcGxhbmVf c3VwcG9ydHNfbWNfY2NzKGRldl9wcml2LCBwbGFuZS0+aWQpKQorCQkJcmV0dXJuIGZhbHNlOwor CQlmYWxsdGhyb3VnaDsKKwljYXNlIERSTV9GT1JNQVRfTU9EX0xJTkVBUjoKKwljYXNlIEk5MTVf Rk9STUFUX01PRF9YX1RJTEVEOgorCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQ6CisJY2Fz ZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9SQ19DQ1M6CisJCWJyZWFrOworCWRlZmF1 bHQ6CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlzd2l0Y2ggKGZvcm1hdCkgeworCWNhc2UgRFJN X0ZPUk1BVF9YUkdCODg4ODoKKwljYXNlIERSTV9GT1JNQVRfWEJHUjg4ODg6CisJY2FzZSBEUk1f Rk9STUFUX0FSR0I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoKKwkJaWYgKGlzX2Nj c19tb2RpZmllcihtb2RpZmllcikpCisJCQlyZXR1cm4gdHJ1ZTsKKwkJZmFsbHRocm91Z2g7CisJ Y2FzZSBEUk1fRk9STUFUX1lVWVY6CisJY2FzZSBEUk1fRk9STUFUX1lWWVU6CisJY2FzZSBEUk1f Rk9STUFUX1VZVlk6CisJY2FzZSBEUk1fRk9STUFUX1ZZVVk6CisJY2FzZSBEUk1fRk9STUFUX05W MTI6CisJY2FzZSBEUk1fRk9STUFUX1hZVVY4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9QMDEwOgor CWNhc2UgRFJNX0ZPUk1BVF9QMDEyOgorCWNhc2UgRFJNX0ZPUk1BVF9QMDE2OgorCQlpZiAobW9k aWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfTUNfQ0NTKQorCQkJcmV0dXJu IHRydWU7CisJCWZhbGx0aHJvdWdoOworCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6CisJY2FzZSBE Uk1fRk9STUFUX1hSR0IyMTAxMDEwOgorCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMDoKKwlj YXNlIERSTV9GT1JNQVRfQVJHQjIxMDEwMTA6CisJY2FzZSBEUk1fRk9STUFUX0FCR1IyMTAxMDEw OgorCWNhc2UgRFJNX0ZPUk1BVF9YVllVMjEwMTAxMDoKKwljYXNlIERSTV9GT1JNQVRfQzg6CisJ Y2FzZSBEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkY6CisJY2FzZSBEUk1fRk9STUFUX0FCR1IxNjE2 MTYxNkY6CisJY2FzZSBEUk1fRk9STUFUX1hSR0IxNjE2MTYxNkY6CisJY2FzZSBEUk1fRk9STUFU X0FSR0IxNjE2MTYxNkY6CisJY2FzZSBEUk1fRk9STUFUX1kyMTA6CisJY2FzZSBEUk1fRk9STUFU X1kyMTI6CisJY2FzZSBEUk1fRk9STUFUX1kyMTY6CisJY2FzZSBEUk1fRk9STUFUX1hWWVUxMl8x NjE2MTYxNjoKKwljYXNlIERSTV9GT1JNQVRfWFZZVTE2MTYxNjE2OgorCQlpZiAobW9kaWZpZXIg PT0gRFJNX0ZPUk1BVF9NT0RfTElORUFSIHx8CisJCSAgICBtb2RpZmllciA9PSBJOTE1X0ZPUk1B VF9NT0RfWF9USUxFRCB8fAorCQkgICAgbW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElM RUQpCisJCQlyZXR1cm4gdHJ1ZTsKKwkJZmFsbHRocm91Z2g7CisJZGVmYXVsdDoKKwkJcmV0dXJu IGZhbHNlOworCX0KK30KKworc3RhdGljIGNvbnN0IHU2NCAqZ2VuMTJfZ2V0X3BsYW5lX21vZGlm aWVycyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJCSAgICBlbnVtIHBs YW5lX2lkIHBsYW5lX2lkKQoreworCWlmIChnZW4xMl9wbGFuZV9zdXBwb3J0c19tY19jY3MoZGV2 X3ByaXYsIHBsYW5lX2lkKSkKKwkJcmV0dXJuIGdlbjEyX3BsYW5lX2Zvcm1hdF9tb2RpZmllcnNf bWNfY2NzOworCWVsc2UKKwkJcmV0dXJuIGdlbjEyX3BsYW5lX2Zvcm1hdF9tb2RpZmllcnNfcmNf Y2NzOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9mdW5jcyBza2xfcGxhbmVf ZnVuY3MgPSB7CisJLnVwZGF0ZV9wbGFuZSA9IGRybV9hdG9taWNfaGVscGVyX3VwZGF0ZV9wbGFu ZSwKKwkuZGlzYWJsZV9wbGFuZSA9IGRybV9hdG9taWNfaGVscGVyX2Rpc2FibGVfcGxhbmUsCisJ LmRlc3Ryb3kgPSBpbnRlbF9wbGFuZV9kZXN0cm95LAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRl ID0gaW50ZWxfcGxhbmVfZHVwbGljYXRlX3N0YXRlLAorCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9 IGludGVsX3BsYW5lX2Rlc3Ryb3lfc3RhdGUsCisJLmZvcm1hdF9tb2Rfc3VwcG9ydGVkID0gc2ts X3BsYW5lX2Zvcm1hdF9tb2Rfc3VwcG9ydGVkLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBk cm1fcGxhbmVfZnVuY3MgZ2VuMTJfcGxhbmVfZnVuY3MgPSB7CisJLnVwZGF0ZV9wbGFuZSA9IGRy bV9hdG9taWNfaGVscGVyX3VwZGF0ZV9wbGFuZSwKKwkuZGlzYWJsZV9wbGFuZSA9IGRybV9hdG9t aWNfaGVscGVyX2Rpc2FibGVfcGxhbmUsCisJLmRlc3Ryb3kgPSBpbnRlbF9wbGFuZV9kZXN0cm95 LAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gaW50ZWxfcGxhbmVfZHVwbGljYXRlX3N0YXRl LAorCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGludGVsX3BsYW5lX2Rlc3Ryb3lfc3RhdGUsCisJ LmZvcm1hdF9tb2Rfc3VwcG9ydGVkID0gZ2VuMTJfcGxhbmVfZm9ybWF0X21vZF9zdXBwb3J0ZWQs Cit9OworCitzdHJ1Y3QgaW50ZWxfcGxhbmUgKgorc2tsX3VuaXZlcnNhbF9wbGFuZV9jcmVhdGUo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJICAgZW51bSBwaXBlIHBpcGUs IGVudW0gcGxhbmVfaWQgcGxhbmVfaWQpCit7CisJY29uc3Qgc3RydWN0IGRybV9wbGFuZV9mdW5j cyAqcGxhbmVfZnVuY3M7CisJc3RydWN0IGludGVsX3BsYW5lICpwbGFuZTsKKwllbnVtIGRybV9w bGFuZV90eXBlIHBsYW5lX3R5cGU7CisJdW5zaWduZWQgaW50IHN1cHBvcnRlZF9yb3RhdGlvbnM7 CisJdW5zaWduZWQgaW50IHN1cHBvcnRlZF9jc2M7CisJY29uc3QgdTY0ICptb2RpZmllcnM7CisJ Y29uc3QgdTMyICpmb3JtYXRzOworCWludCBudW1fZm9ybWF0czsKKwlpbnQgcmV0OworCisJcGxh bmUgPSBpbnRlbF9wbGFuZV9hbGxvYygpOworCWlmIChJU19FUlIocGxhbmUpKQorCQlyZXR1cm4g cGxhbmU7CisKKwlwbGFuZS0+cGlwZSA9IHBpcGU7CisJcGxhbmUtPmlkID0gcGxhbmVfaWQ7CisJ cGxhbmUtPmZyb250YnVmZmVyX2JpdCA9IElOVEVMX0ZST05UQlVGRkVSKHBpcGUsIHBsYW5lX2lk KTsKKworCXBsYW5lLT5oYXNfZmJjID0gc2tsX3BsYW5lX2hhc19mYmMoZGV2X3ByaXYsIHBpcGUs IHBsYW5lX2lkKTsKKwlpZiAocGxhbmUtPmhhc19mYmMpIHsKKwkJc3RydWN0IGludGVsX2ZiYyAq ZmJjID0gJmRldl9wcml2LT5mYmM7CisKKwkJZmJjLT5wb3NzaWJsZV9mcmFtZWJ1ZmZlcl9iaXRz IHw9IHBsYW5lLT5mcm9udGJ1ZmZlcl9iaXQ7CisJfQorCisJaWYgKElOVEVMX0dFTihkZXZfcHJp dikgPj0gMTEpIHsKKwkJcGxhbmUtPm1pbl93aWR0aCA9IGljbF9wbGFuZV9taW5fd2lkdGg7CisJ CXBsYW5lLT5tYXhfd2lkdGggPSBpY2xfcGxhbmVfbWF4X3dpZHRoOworCQlwbGFuZS0+bWF4X2hl aWdodCA9IGljbF9wbGFuZV9tYXhfaGVpZ2h0OworCX0gZWxzZSBpZiAoSU5URUxfR0VOKGRldl9w cml2KSA+PSAxMCB8fCBJU19HRU1JTklMQUtFKGRldl9wcml2KSkgeworCQlwbGFuZS0+bWF4X3dp ZHRoID0gZ2xrX3BsYW5lX21heF93aWR0aDsKKwkJcGxhbmUtPm1heF9oZWlnaHQgPSBza2xfcGxh bmVfbWF4X2hlaWdodDsKKwl9IGVsc2UgeworCQlwbGFuZS0+bWF4X3dpZHRoID0gc2tsX3BsYW5l X21heF93aWR0aDsKKwkJcGxhbmUtPm1heF9oZWlnaHQgPSBza2xfcGxhbmVfbWF4X2hlaWdodDsK Kwl9CisKKwlwbGFuZS0+bWF4X3N0cmlkZSA9IHNrbF9wbGFuZV9tYXhfc3RyaWRlOworCXBsYW5l LT51cGRhdGVfcGxhbmUgPSBza2xfdXBkYXRlX3BsYW5lOworCXBsYW5lLT5kaXNhYmxlX3BsYW5l ID0gc2tsX2Rpc2FibGVfcGxhbmU7CisJcGxhbmUtPmdldF9od19zdGF0ZSA9IHNrbF9wbGFuZV9n ZXRfaHdfc3RhdGU7CisJcGxhbmUtPmNoZWNrX3BsYW5lID0gc2tsX3BsYW5lX2NoZWNrOworCXBs YW5lLT5taW5fY2RjbGsgPSBza2xfcGxhbmVfbWluX2NkY2xrOworCXBsYW5lLT5hc3luY19mbGlw ID0gc2tsX3BsYW5lX2FzeW5jX2ZsaXA7CisKKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAx MSkKKwkJZm9ybWF0cyA9IGljbF9nZXRfcGxhbmVfZm9ybWF0cyhkZXZfcHJpdiwgcGlwZSwKKwkJ CQkJCXBsYW5lX2lkLCAmbnVtX2Zvcm1hdHMpOworCWVsc2UgaWYgKElOVEVMX0dFTihkZXZfcHJp dikgPj0gMTAgfHwgSVNfR0VNSU5JTEFLRShkZXZfcHJpdikpCisJCWZvcm1hdHMgPSBnbGtfZ2V0 X3BsYW5lX2Zvcm1hdHMoZGV2X3ByaXYsIHBpcGUsCisJCQkJCQlwbGFuZV9pZCwgJm51bV9mb3Jt YXRzKTsKKwllbHNlCisJCWZvcm1hdHMgPSBza2xfZ2V0X3BsYW5lX2Zvcm1hdHMoZGV2X3ByaXYs IHBpcGUsCisJCQkJCQlwbGFuZV9pZCwgJm51bV9mb3JtYXRzKTsKKworCXBsYW5lLT5oYXNfY2Nz ID0gc2tsX3BsYW5lX2hhc19jY3MoZGV2X3ByaXYsIHBpcGUsIHBsYW5lX2lkKTsKKwlpZiAoSU5U RUxfR0VOKGRldl9wcml2KSA+PSAxMikgeworCQltb2RpZmllcnMgPSBnZW4xMl9nZXRfcGxhbmVf bW9kaWZpZXJzKGRldl9wcml2LCBwbGFuZV9pZCk7CisJCXBsYW5lX2Z1bmNzID0gJmdlbjEyX3Bs YW5lX2Z1bmNzOworCX0gZWxzZSB7CisJCWlmIChwbGFuZS0+aGFzX2NjcykKKwkJCW1vZGlmaWVy cyA9IHNrbF9wbGFuZV9mb3JtYXRfbW9kaWZpZXJzX2NjczsKKwkJZWxzZQorCQkJbW9kaWZpZXJz ID0gc2tsX3BsYW5lX2Zvcm1hdF9tb2RpZmllcnNfbm9jY3M7CisJCXBsYW5lX2Z1bmNzID0gJnNr bF9wbGFuZV9mdW5jczsKKwl9CisKKwlpZiAocGxhbmVfaWQgPT0gUExBTkVfUFJJTUFSWSkKKwkJ cGxhbmVfdHlwZSA9IERSTV9QTEFORV9UWVBFX1BSSU1BUlk7CisJZWxzZQorCQlwbGFuZV90eXBl ID0gRFJNX1BMQU5FX1RZUEVfT1ZFUkxBWTsKKworCXJldCA9IGRybV91bml2ZXJzYWxfcGxhbmVf aW5pdCgmZGV2X3ByaXYtPmRybSwgJnBsYW5lLT5iYXNlLAorCQkJCSAgICAgICAwLCBwbGFuZV9m dW5jcywKKwkJCQkgICAgICAgZm9ybWF0cywgbnVtX2Zvcm1hdHMsIG1vZGlmaWVycywKKwkJCQkg ICAgICAgcGxhbmVfdHlwZSwKKwkJCQkgICAgICAgInBsYW5lICVkJWMiLCBwbGFuZV9pZCArIDEs CisJCQkJICAgICAgIHBpcGVfbmFtZShwaXBlKSk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsOwor CisJc3VwcG9ydGVkX3JvdGF0aW9ucyA9CisJCURSTV9NT0RFX1JPVEFURV8wIHwgRFJNX01PREVf Uk9UQVRFXzkwIHwKKwkJRFJNX01PREVfUk9UQVRFXzE4MCB8IERSTV9NT0RFX1JPVEFURV8yNzA7 CisKKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCkKKwkJc3VwcG9ydGVkX3JvdGF0aW9u cyB8PSBEUk1fTU9ERV9SRUZMRUNUX1g7CisKKwlkcm1fcGxhbmVfY3JlYXRlX3JvdGF0aW9uX3By b3BlcnR5KCZwbGFuZS0+YmFzZSwKKwkJCQkJICAgRFJNX01PREVfUk9UQVRFXzAsCisJCQkJCSAg IHN1cHBvcnRlZF9yb3RhdGlvbnMpOworCisJc3VwcG9ydGVkX2NzYyA9IEJJVChEUk1fQ09MT1Jf WUNCQ1JfQlQ2MDEpIHwgQklUKERSTV9DT0xPUl9ZQ0JDUl9CVDcwOSk7CisKKwlpZiAoSU5URUxf R0VOKGRldl9wcml2KSA+PSAxMCB8fCBJU19HRU1JTklMQUtFKGRldl9wcml2KSkKKwkJc3VwcG9y dGVkX2NzYyB8PSBCSVQoRFJNX0NPTE9SX1lDQkNSX0JUMjAyMCk7CisKKwlkcm1fcGxhbmVfY3Jl YXRlX2NvbG9yX3Byb3BlcnRpZXMoJnBsYW5lLT5iYXNlLAorCQkJCQkgIHN1cHBvcnRlZF9jc2Ms CisJCQkJCSAgQklUKERSTV9DT0xPUl9ZQ0JDUl9MSU1JVEVEX1JBTkdFKSB8CisJCQkJCSAgQklU KERSTV9DT0xPUl9ZQ0JDUl9GVUxMX1JBTkdFKSwKKwkJCQkJICBEUk1fQ09MT1JfWUNCQ1JfQlQ3 MDksCisJCQkJCSAgRFJNX0NPTE9SX1lDQkNSX0xJTUlURURfUkFOR0UpOworCisJZHJtX3BsYW5l X2NyZWF0ZV9hbHBoYV9wcm9wZXJ0eSgmcGxhbmUtPmJhc2UpOworCWRybV9wbGFuZV9jcmVhdGVf YmxlbmRfbW9kZV9wcm9wZXJ0eSgmcGxhbmUtPmJhc2UsCisJCQkJCSAgICAgQklUKERSTV9NT0RF X0JMRU5EX1BJWEVMX05PTkUpIHwKKwkJCQkJICAgICBCSVQoRFJNX01PREVfQkxFTkRfUFJFTVVM VEkpIHwKKwkJCQkJICAgICBCSVQoRFJNX01PREVfQkxFTkRfQ09WRVJBR0UpKTsKKworCWRybV9w bGFuZV9jcmVhdGVfenBvc19pbW11dGFibGVfcHJvcGVydHkoJnBsYW5lLT5iYXNlLCBwbGFuZV9p ZCk7CisKKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMikKKwkJZHJtX3BsYW5lX2VuYWJs ZV9mYl9kYW1hZ2VfY2xpcHMoJnBsYW5lLT5iYXNlKTsKKworCWlmIChJTlRFTF9HRU4oZGV2X3By aXYpID49IDEwKQorCQlkcm1fcGxhbmVfY3JlYXRlX3NjYWxpbmdfZmlsdGVyX3Byb3BlcnR5KCZw bGFuZS0+YmFzZSwKKwkJCQkJCUJJVChEUk1fU0NBTElOR19GSUxURVJfREVGQVVMVCkgfAorCQkJ CQkJQklUKERSTV9TQ0FMSU5HX0ZJTFRFUl9ORUFSRVNUX05FSUdIQk9SKSk7CisKKwlkcm1fcGxh bmVfaGVscGVyX2FkZCgmcGxhbmUtPmJhc2UsICZpbnRlbF9wbGFuZV9oZWxwZXJfZnVuY3MpOwor CisJcmV0dXJuIHBsYW5lOworCitmYWlsOgorCWludGVsX3BsYW5lX2ZyZWUocGxhbmUpOworCisJ cmV0dXJuIEVSUl9QVFIocmV0KTsKK30KKwordm9pZAorc2tsX2dldF9pbml0aWFsX3BsYW5lX2Nv bmZpZyhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKKwkJCSAgICAgc3RydWN0IGludGVsX2luaXRp YWxfcGxhbmVfY29uZmlnICpwbGFuZV9jb25maWcpCit7CisJc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKmNydGNfc3RhdGUgPSB0b19pbnRlbF9jcnRjX3N0YXRlKGNydGMtPmJhc2Uuc3RhdGUpOwor CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNlLmRldjsKKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7CisJc3RydWN0IGludGVsX3BsYW5l ICpwbGFuZSA9IHRvX2ludGVsX3BsYW5lKGNydGMtPmJhc2UucHJpbWFyeSk7CisJZW51bSBwbGFu ZV9pZCBwbGFuZV9pZCA9IHBsYW5lLT5pZDsKKwllbnVtIHBpcGUgcGlwZTsKKwl1MzIgdmFsLCBi YXNlLCBvZmZzZXQsIHN0cmlkZV9tdWx0LCB0aWxpbmcsIGFscGhhOworCWludCBmb3VyY2MsIHBp eGVsX2Zvcm1hdDsKKwl1bnNpZ25lZCBpbnQgYWxpZ25lZF9oZWlnaHQ7CisJc3RydWN0IGRybV9m cmFtZWJ1ZmZlciAqZmI7CisJc3RydWN0IGludGVsX2ZyYW1lYnVmZmVyICppbnRlbF9mYjsKKwor CWlmICghcGxhbmUtPmdldF9od19zdGF0ZShwbGFuZSwgJnBpcGUpKQorCQlyZXR1cm47CisKKwlk cm1fV0FSTl9PTihkZXYsIHBpcGUgIT0gY3J0Yy0+cGlwZSk7CisKKwlpZiAoY3J0Y19zdGF0ZS0+ Ymlnam9pbmVyKSB7CisJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAorCQkJICAgICJVbnN1 cHBvcnRlZCBiaWdqb2luZXIgY29uZmlndXJhdGlvbiBmb3IgaW5pdGlhbCBGQlxuIik7CisJCXJl dHVybjsKKwl9CisKKwlpbnRlbF9mYiA9IGt6YWxsb2Moc2l6ZW9mKCppbnRlbF9mYiksIEdGUF9L RVJORUwpOworCWlmICghaW50ZWxfZmIpIHsKKwkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0s ICJmYWlsZWQgdG8gYWxsb2MgZmJcbiIpOworCQlyZXR1cm47CisJfQorCisJZmIgPSAmaW50ZWxf ZmItPmJhc2U7CisKKwlmYi0+ZGV2ID0gZGV2OworCisJdmFsID0gaW50ZWxfZGVfcmVhZChkZXZf cHJpdiwgUExBTkVfQ1RMKHBpcGUsIHBsYW5lX2lkKSk7CisKKwlpZiAoSU5URUxfR0VOKGRldl9w cml2KSA+PSAxMSkKKwkJcGl4ZWxfZm9ybWF0ID0gdmFsICYgSUNMX1BMQU5FX0NUTF9GT1JNQVRf TUFTSzsKKwllbHNlCisJCXBpeGVsX2Zvcm1hdCA9IHZhbCAmIFBMQU5FX0NUTF9GT1JNQVRfTUFT SzsKKworCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwIHx8IElTX0dFTUlOSUxBS0UoZGV2 X3ByaXYpKSB7CisJCWFscGhhID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwKKwkJCQkgICAgICBQ TEFORV9DT0xPUl9DVEwocGlwZSwgcGxhbmVfaWQpKTsKKwkJYWxwaGEgJj0gUExBTkVfQ09MT1Jf QUxQSEFfTUFTSzsKKwl9IGVsc2UgeworCQlhbHBoYSA9IHZhbCAmIFBMQU5FX0NUTF9BTFBIQV9N QVNLOworCX0KKworCWZvdXJjYyA9IHNrbF9mb3JtYXRfdG9fZm91cmNjKHBpeGVsX2Zvcm1hdCwK KwkJCQkgICAgICB2YWwgJiBQTEFORV9DVExfT1JERVJfUkdCWCwgYWxwaGEpOworCWZiLT5mb3Jt YXQgPSBkcm1fZm9ybWF0X2luZm8oZm91cmNjKTsKKworCXRpbGluZyA9IHZhbCAmIFBMQU5FX0NU TF9USUxFRF9NQVNLOworCXN3aXRjaCAodGlsaW5nKSB7CisJY2FzZSBQTEFORV9DVExfVElMRURf TElORUFSOgorCQlmYi0+bW9kaWZpZXIgPSBEUk1fRk9STUFUX01PRF9MSU5FQVI7CisJCWJyZWFr OworCWNhc2UgUExBTkVfQ1RMX1RJTEVEX1g6CisJCXBsYW5lX2NvbmZpZy0+dGlsaW5nID0gSTkx NV9USUxJTkdfWDsKKwkJZmItPm1vZGlmaWVyID0gSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ7CisJ CWJyZWFrOworCWNhc2UgUExBTkVfQ1RMX1RJTEVEX1k6CisJCXBsYW5lX2NvbmZpZy0+dGlsaW5n ID0gSTkxNV9USUxJTkdfWTsKKwkJaWYgKHZhbCAmIFBMQU5FX0NUTF9SRU5ERVJfREVDT01QUkVT U0lPTl9FTkFCTEUpCisJCQlmYi0+bW9kaWZpZXIgPSBJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEy ID8KKwkJCQlJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9SQ19DQ1MgOgorCQkJCUk5MTVf Rk9STUFUX01PRF9ZX1RJTEVEX0NDUzsKKwkJZWxzZSBpZiAodmFsICYgUExBTkVfQ1RMX01FRElB X0RFQ09NUFJFU1NJT05fRU5BQkxFKQorCQkJZmItPm1vZGlmaWVyID0gSTkxNV9GT1JNQVRfTU9E X1lfVElMRURfR0VOMTJfTUNfQ0NTOworCQllbHNlCisJCQlmYi0+bW9kaWZpZXIgPSBJOTE1X0ZP Uk1BVF9NT0RfWV9USUxFRDsKKwkJYnJlYWs7CisJY2FzZSBQTEFORV9DVExfVElMRURfWUY6CisJ CWlmICh2YWwgJiBQTEFORV9DVExfUkVOREVSX0RFQ09NUFJFU1NJT05fRU5BQkxFKQorCQkJZmIt Pm1vZGlmaWVyID0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUzsKKwkJZWxzZQorCQkJZmIt Pm1vZGlmaWVyID0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEOworCQlicmVhazsKKwlkZWZhdWx0 OgorCQlNSVNTSU5HX0NBU0UodGlsaW5nKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKgorCSAq IERSTV9NT0RFX1JPVEFURV8gaXMgY291bnRlciBjbG9ja3dpc2UgdG8gc3RheSBjb21wYXRpYmxl IHdpdGggWHJhbmRyCisJICogd2hpbGUgaTkxNSBIVyByb3RhdGlvbiBpcyBjbG9ja3dpc2UsIHRo YXRzIHdoeSB0aGlzIHN3YXBwaW5nLgorCSAqLworCXN3aXRjaCAodmFsICYgUExBTkVfQ1RMX1JP VEFURV9NQVNLKSB7CisJY2FzZSBQTEFORV9DVExfUk9UQVRFXzA6CisJCXBsYW5lX2NvbmZpZy0+ cm90YXRpb24gPSBEUk1fTU9ERV9ST1RBVEVfMDsKKwkJYnJlYWs7CisJY2FzZSBQTEFORV9DVExf Uk9UQVRFXzkwOgorCQlwbGFuZV9jb25maWctPnJvdGF0aW9uID0gRFJNX01PREVfUk9UQVRFXzI3 MDsKKwkJYnJlYWs7CisJY2FzZSBQTEFORV9DVExfUk9UQVRFXzE4MDoKKwkJcGxhbmVfY29uZmln LT5yb3RhdGlvbiA9IERSTV9NT0RFX1JPVEFURV8xODA7CisJCWJyZWFrOworCWNhc2UgUExBTkVf Q1RMX1JPVEFURV8yNzA6CisJCXBsYW5lX2NvbmZpZy0+cm90YXRpb24gPSBEUk1fTU9ERV9ST1RB VEVfOTA7CisJCWJyZWFrOworCX0KKworCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwICYm CisJICAgIHZhbCAmIFBMQU5FX0NUTF9GTElQX0hPUklaT05UQUwpCisJCXBsYW5lX2NvbmZpZy0+ cm90YXRpb24gfD0gRFJNX01PREVfUkVGTEVDVF9YOworCisJLyogOTAvMjcwIGRlZ3JlZSByb3Rh dGlvbiB3b3VsZCByZXF1aXJlIGV4dHJhIHdvcmsgKi8KKwlpZiAoZHJtX3JvdGF0aW9uXzkwX29y XzI3MChwbGFuZV9jb25maWctPnJvdGF0aW9uKSkKKwkJZ290byBlcnJvcjsKKworCWJhc2UgPSBp bnRlbF9kZV9yZWFkKGRldl9wcml2LCBQTEFORV9TVVJGKHBpcGUsIHBsYW5lX2lkKSkgJiAweGZm ZmZmMDAwOworCXBsYW5lX2NvbmZpZy0+YmFzZSA9IGJhc2U7CisKKwlvZmZzZXQgPSBpbnRlbF9k ZV9yZWFkKGRldl9wcml2LCBQTEFORV9PRkZTRVQocGlwZSwgcGxhbmVfaWQpKTsKKworCXZhbCA9 IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIFBMQU5FX1NJWkUocGlwZSwgcGxhbmVfaWQpKTsKKwlm Yi0+aGVpZ2h0ID0gKCh2YWwgPj4gMTYpICYgMHhmZmZmKSArIDE7CisJZmItPndpZHRoID0gKCh2 YWwgPj4gMCkgJiAweGZmZmYpICsgMTsKKworCXZhbCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYs IFBMQU5FX1NUUklERShwaXBlLCBwbGFuZV9pZCkpOworCXN0cmlkZV9tdWx0ID0gc2tsX3BsYW5l X3N0cmlkZV9tdWx0KGZiLCAwLCBEUk1fTU9ERV9ST1RBVEVfMCk7CisJZmItPnBpdGNoZXNbMF0g PSAodmFsICYgMHgzZmYpICogc3RyaWRlX211bHQ7CisKKwlhbGlnbmVkX2hlaWdodCA9IGludGVs X2ZiX2FsaWduX2hlaWdodChmYiwgMCwgZmItPmhlaWdodCk7CisKKwlwbGFuZV9jb25maWctPnNp emUgPSBmYi0+cGl0Y2hlc1swXSAqIGFsaWduZWRfaGVpZ2h0OworCisJZHJtX2RiZ19rbXMoJmRl dl9wcml2LT5kcm0sCisJCSAgICAiJXMvJXMgd2l0aCBmYjogc2l6ZT0lZHglZEAlZCwgb2Zmc2V0 PSV4LCBwaXRjaCAlZCwgc2l6ZSAweCV4XG4iLAorCQkgICAgY3J0Yy0+YmFzZS5uYW1lLCBwbGFu ZS0+YmFzZS5uYW1lLCBmYi0+d2lkdGgsIGZiLT5oZWlnaHQsCisJCSAgICBmYi0+Zm9ybWF0LT5j cHBbMF0gKiA4LCBiYXNlLCBmYi0+cGl0Y2hlc1swXSwKKwkJICAgIHBsYW5lX2NvbmZpZy0+c2l6 ZSk7CisKKwlwbGFuZV9jb25maWctPmZiID0gaW50ZWxfZmI7CisJcmV0dXJuOworCitlcnJvcjoK KwlrZnJlZShpbnRlbF9mYik7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2Rpc3BsYXkvc2tsX3VuaXZlcnNhbF9wbGFuZS5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlz cGxheS9za2xfdW5pdmVyc2FsX3BsYW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAwLi5mNzMwZWMyYWQwOTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9kaXNwbGF5L3NrbF91bml2ZXJzYWxfcGxhbmUuaApAQCAtMCwwICsxLDMwIEBACisv KiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUICovCisvKgorICogQ29weXJpZ2h0IMKpIDIw MjAgSW50ZWwgQ29ycG9yYXRpb24KKyAqLworCisjaWZuZGVmIF9TS0xfVU5JVkVSU0FMX1BMQU5F X0hfCisjZGVmaW5lIF9TS0xfVU5JVkVSU0FMX1BMQU5FX0hfCisKK3N0cnVjdCBkcm1fZnJhbWVi dWZmZXI7CitzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlOworc3RydWN0IGludGVsX2NydGM7Citz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZTsKK3N0cnVjdCBpbnRlbF9pbml0aWFsX3BsYW5lX2NvbmZp ZzsKK3N0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZTsKKworZW51bSBwaXBlOworZW51bSBwbGFuZV9p ZDsKKworc3RydWN0IGludGVsX3BsYW5lICoKK3NrbF91bml2ZXJzYWxfcGxhbmVfY3JlYXRlKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCSAgIGVudW0gcGlwZSBwaXBlLCBl bnVtIHBsYW5lX2lkIHBsYW5lX2lkKTsKKwordm9pZCBza2xfZ2V0X2luaXRpYWxfcGxhbmVfY29u ZmlnKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAorCQkJCSAgc3RydWN0IGludGVsX2luaXRpYWxf cGxhbmVfY29uZmlnICpwbGFuZV9jb25maWcpOworCitpbnQgc2tsX2Zvcm1hdF90b19mb3VyY2Mo aW50IGZvcm1hdCwgYm9vbCByZ2Jfb3JkZXIsIGJvb2wgYWxwaGEpOworCitpbnQgc2tsX2Njc190 b19tYWluX3BsYW5lKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgY2NzX3Bs YW5lKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5 L3Zsdl9kc2kuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvdmx2X2RzaS5jCmluZGV4 IGQ1MmY5YzE3NzkwOC4uYjM0M2NlODcyMTE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9kaXNwbGF5L3Zsdl9kc2kuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5 L3Zsdl9kc2kuYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgImludGVsX2ZpZm9fdW5kZXJy dW4uaCIKICNpbmNsdWRlICJpbnRlbF9wYW5lbC5oIgogI2luY2x1ZGUgImludGVsX3NpZGViYW5k LmgiCisjaW5jbHVkZSAic2tsX3VuaXZlcnNhbF9wbGFuZS5oIgogCiAvKiByZXR1cm4gcGl4ZWxz IGluIHRlcm1zIG9mIHR4Ynl0ZWNsa2hzICovCiBzdGF0aWMgdTE2IHR4Ynl0ZWNsa2hzKHUxNiBw aXhlbHMsIGludCBicHAsIGludCBsYW5lX2NvdW50LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfcG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMKaW5k ZXggNTdkYjU0ODY3M2RkLi45ZTI3OWZmNTYzYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX3BtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwpA QCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgImRpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBlcy5o IgogI2luY2x1ZGUgImRpc3BsYXkvaW50ZWxfZmJjLmgiCiAjaW5jbHVkZSAiZGlzcGxheS9pbnRl bF9zcHJpdGUuaCIKKyNpbmNsdWRlICJkaXNwbGF5L3NrbF91bml2ZXJzYWxfcGxhbmUuaCIKIAog I2luY2x1ZGUgImd0L2ludGVsX2xsYy5oIgogCi0tIAoyLjI3LjAKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50 ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=