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 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 0FFB3C2BBCA for ; Wed, 9 Dec 2020 04:22:01 +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 C112A23B5F for ; Wed, 9 Dec 2020 04:22:00 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C112A23B5F 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 5523489BF5; Wed, 9 Dec 2020 04:21:59 +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 5417089BF5 for ; Wed, 9 Dec 2020 04:21:56 +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-452-FcbvVtDhNY6VTn9b5GD0mg-1; Tue, 08 Dec 2020 23:21:53 -0500 X-MC-Unique: FcbvVtDhNY6VTn9b5GD0mg-1 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 3897C180E469 for ; Wed, 9 Dec 2020 04:21:52 +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 709905275D for ; Wed, 9 Dec 2020 04:21:51 +0000 (UTC) From: Dave Airlie To: intel-gfx@lists.freedesktop.org Date: Wed, 9 Dec 2020 14:21:43 +1000 Message-Id: <20201209042144.2281-4-airlied@gmail.com> In-Reply-To: <20201209042144.2281-1-airlied@gmail.com> References: <20201209042144.2281-1-airlied@gmail.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: gmail.com Subject: [Intel-gfx] [PATCH 3/4] drm/i915: refactor pll code out into intel_clock.c X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" RnJvbTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KClRoaXMgcHVsbHMgYSBsYXJn ZSBjaHVuayBvZiB0aGUgcGxsIGNhbGN1bGF0aW9uIGNvZGUgb3V0IG9mCmludGVsX2Rpc3BsYXku YyB0byBhIG5ldyBmaWxlLgoKT25lIGZ1bmN0aW9uIG1ha3NlIHNlbnNlIHRvIGJlIGFuIGlubGlu ZSwgb3RoZXJ3aXNlIHRoaXMKaXMgcHJldHR5IG11Y2ggYSBzdHJhaWdodCBjb3B5IGNvdmVyLiBh bHNvIGFsbCB0aGUKcmVtYWluaW5nIGhvb2tzIGZvciBnNDUgYW5kIG9sZGVyIGVuZCB1cCB0aGUg c2FtZSBub3cuCgpGaXhlZCBvbmUgLCBpbnN0ZWFkIG9mIDsgZXJyb3IgaW4gY2h2X2ZpbmRfYmVz dF9kcGxsLgoKU2lnbmVkLW9mZi1ieTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4K LS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgfCAgICAx ICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfY2xvY2suYyAgICB8IDEzNzAg KysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNw bGF5LmMgIHwgMTM5MiArLS0tLS0tLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlz cGxheS9pbnRlbF9kaXNwbGF5LmggIHwgICAxMyArLQogLi4uL2RybS9pOTE1L2Rpc3BsYXkvaW50 ZWxfZGlzcGxheV90eXBlcy5oICAgIHwgICAgNSArCiA1IGZpbGVzIGNoYW5nZWQsIDEzOTggaW5z ZXJ0aW9ucygrKSwgMTM4MyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Nsb2NrLmMKCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCmlu ZGV4IGZmZWMyNTc3MDJhZi4uOGIzNTdjMjEyYWUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQpAQCAt MTkzLDYgKzE5Myw3IEBAIGk5MTUteSArPSBcCiAJZGlzcGxheS9pbnRlbF9iaW9zLm8gXAogCWRp c3BsYXkvaW50ZWxfYncubyBcCiAJZGlzcGxheS9pbnRlbF9jZGNsay5vIFwKKwlkaXNwbGF5L2lu dGVsX2Nsb2NrLm8gXAogCWRpc3BsYXkvaW50ZWxfY29sb3IubyBcCiAJZGlzcGxheS9pbnRlbF9j b21ib19waHkubyBcCiAJZGlzcGxheS9pbnRlbF9jb25uZWN0b3IubyBcCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Nsb2NrLmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9kaXNwbGF5L2ludGVsX2Nsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAwLi43NTgxOWMxZGEwMzkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Nsb2NrLmMKQEAgLTAsMCArMSwxMzcwIEBACisvLyBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCisvKgorICogQ29weXJpZ2h0IMKpIDIwMjAgSW50 ZWwgQ29ycG9yYXRpb24KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUg ImludGVsX2Rpc3BsYXlfdHlwZXMuaCIKKyNpbmNsdWRlICJpbnRlbF9kaXNwbGF5LmgiCisjaW5j bHVkZSAiaW50ZWxfbHZkcy5oIgorI2luY2x1ZGUgImludGVsX3BhbmVsLmgiCisKK3N0YXRpYyBi b29sIGludGVsX3BhbmVsX3VzZV9zc2Moc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQoreworCWlmIChkZXZfcHJpdi0+cGFyYW1zLnBhbmVsX3VzZV9zc2MgPj0gMCkKKwkJcmV0dXJu IGRldl9wcml2LT5wYXJhbXMucGFuZWxfdXNlX3NzYyAhPSAwOworCXJldHVybiBkZXZfcHJpdi0+ dmJ0Lmx2ZHNfdXNlX3NzYworCQkmJiAhKGRldl9wcml2LT5xdWlya3MgJiBRVUlSS19MVkRTX1NT Q19ESVNBQkxFKTsKK30KKworc3RydWN0IGludGVsX2xpbWl0IHsKKwlzdHJ1Y3QgeworCQlpbnQg bWluLCBtYXg7CisJfSBkb3QsIHZjbywgbiwgbSwgbTEsIG0yLCBwLCBwMTsKKworCXN0cnVjdCB7 CisJCWludCBkb3RfbGltaXQ7CisJCWludCBwMl9zbG93LCBwMl9mYXN0OworCX0gcDI7Cit9Owor c3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCBpbnRlbF9saW1pdHNfaTh4eF9kYWMgPSB7 CisJLmRvdCA9IHsgLm1pbiA9IDI1MDAwLCAubWF4ID0gMzUwMDAwIH0sCisJLnZjbyA9IHsgLm1p biA9IDkwODAwMCwgLm1heCA9IDE1MTIwMDAgfSwKKwkubiA9IHsgLm1pbiA9IDIsIC5tYXggPSAx NiB9LAorCS5tID0geyAubWluID0gOTYsIC5tYXggPSAxNDAgfSwKKwkubTEgPSB7IC5taW4gPSAx OCwgLm1heCA9IDI2IH0sCisJLm0yID0geyAubWluID0gNiwgLm1heCA9IDE2IH0sCisJLnAgPSB7 IC5taW4gPSA0LCAubWF4ID0gMTI4IH0sCisJLnAxID0geyAubWluID0gMiwgLm1heCA9IDMzIH0s CisJLnAyID0geyAuZG90X2xpbWl0ID0gMTY1MDAwLAorCQkucDJfc2xvdyA9IDQsIC5wMl9mYXN0 ID0gMiB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCBpbnRlbF9saW1p dHNfaTh4eF9kdm8gPSB7CisJLmRvdCA9IHsgLm1pbiA9IDI1MDAwLCAubWF4ID0gMzUwMDAwIH0s CisJLnZjbyA9IHsgLm1pbiA9IDkwODAwMCwgLm1heCA9IDE1MTIwMDAgfSwKKwkubiA9IHsgLm1p biA9IDIsIC5tYXggPSAxNiB9LAorCS5tID0geyAubWluID0gOTYsIC5tYXggPSAxNDAgfSwKKwku bTEgPSB7IC5taW4gPSAxOCwgLm1heCA9IDI2IH0sCisJLm0yID0geyAubWluID0gNiwgLm1heCA9 IDE2IH0sCisJLnAgPSB7IC5taW4gPSA0LCAubWF4ID0gMTI4IH0sCisJLnAxID0geyAubWluID0g MiwgLm1heCA9IDMzIH0sCisJLnAyID0geyAuZG90X2xpbWl0ID0gMTY1MDAwLAorCQkucDJfc2xv dyA9IDQsIC5wMl9mYXN0ID0gNCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9s aW1pdCBpbnRlbF9saW1pdHNfaTh4eF9sdmRzID0geworCS5kb3QgPSB7IC5taW4gPSAyNTAwMCwg Lm1heCA9IDM1MDAwMCB9LAorCS52Y28gPSB7IC5taW4gPSA5MDgwMDAsIC5tYXggPSAxNTEyMDAw IH0sCisJLm4gPSB7IC5taW4gPSAyLCAubWF4ID0gMTYgfSwKKwkubSA9IHsgLm1pbiA9IDk2LCAu bWF4ID0gMTQwIH0sCisJLm0xID0geyAubWluID0gMTgsIC5tYXggPSAyNiB9LAorCS5tMiA9IHsg Lm1pbiA9IDYsIC5tYXggPSAxNiB9LAorCS5wID0geyAubWluID0gNCwgLm1heCA9IDEyOCB9LAor CS5wMSA9IHsgLm1pbiA9IDEsIC5tYXggPSA2IH0sCisJLnAyID0geyAuZG90X2xpbWl0ID0gMTY1 MDAwLAorCQkucDJfc2xvdyA9IDE0LCAucDJfZmFzdCA9IDcgfSwKK307CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgaW50ZWxfbGltaXQgaW50ZWxfbGltaXRzX2k5eHhfc2R2byA9IHsKKwkuZG90ID0g eyAubWluID0gMjAwMDAsIC5tYXggPSA0MDAwMDAgfSwKKwkudmNvID0geyAubWluID0gMTQwMDAw MCwgLm1heCA9IDI4MDAwMDAgfSwKKwkubiA9IHsgLm1pbiA9IDEsIC5tYXggPSA2IH0sCisJLm0g PSB7IC5taW4gPSA3MCwgLm1heCA9IDEyMCB9LAorCS5tMSA9IHsgLm1pbiA9IDgsIC5tYXggPSAx OCB9LAorCS5tMiA9IHsgLm1pbiA9IDMsIC5tYXggPSA3IH0sCisJLnAgPSB7IC5taW4gPSA1LCAu bWF4ID0gODAgfSwKKwkucDEgPSB7IC5taW4gPSAxLCAubWF4ID0gOCB9LAorCS5wMiA9IHsgLmRv dF9saW1pdCA9IDIwMDAwMCwKKwkJLnAyX3Nsb3cgPSAxMCwgLnAyX2Zhc3QgPSA1IH0sCit9Owor CitzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2xpbWl0IGludGVsX2xpbWl0c19pOXh4X2x2ZHMg PSB7CisJLmRvdCA9IHsgLm1pbiA9IDIwMDAwLCAubWF4ID0gNDAwMDAwIH0sCisJLnZjbyA9IHsg Lm1pbiA9IDE0MDAwMDAsIC5tYXggPSAyODAwMDAwIH0sCisJLm4gPSB7IC5taW4gPSAxLCAubWF4 ID0gNiB9LAorCS5tID0geyAubWluID0gNzAsIC5tYXggPSAxMjAgfSwKKwkubTEgPSB7IC5taW4g PSA4LCAubWF4ID0gMTggfSwKKwkubTIgPSB7IC5taW4gPSAzLCAubWF4ID0gNyB9LAorCS5wID0g eyAubWluID0gNywgLm1heCA9IDk4IH0sCisJLnAxID0geyAubWluID0gMSwgLm1heCA9IDggfSwK KwkucDIgPSB7IC5kb3RfbGltaXQgPSAxMTIwMDAsCisJCS5wMl9zbG93ID0gMTQsIC5wMl9mYXN0 ID0gNyB9LAorfTsKKworCitzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2xpbWl0IGludGVsX2xp bWl0c19nNHhfc2R2byA9IHsKKwkuZG90ID0geyAubWluID0gMjUwMDAsIC5tYXggPSAyNzAwMDAg fSwKKwkudmNvID0geyAubWluID0gMTc1MDAwMCwgLm1heCA9IDM1MDAwMDB9LAorCS5uID0geyAu bWluID0gMSwgLm1heCA9IDQgfSwKKwkubSA9IHsgLm1pbiA9IDEwNCwgLm1heCA9IDEzOCB9LAor CS5tMSA9IHsgLm1pbiA9IDE3LCAubWF4ID0gMjMgfSwKKwkubTIgPSB7IC5taW4gPSA1LCAubWF4 ID0gMTEgfSwKKwkucCA9IHsgLm1pbiA9IDEwLCAubWF4ID0gMzAgfSwKKwkucDEgPSB7IC5taW4g PSAxLCAubWF4ID0gM30sCisJLnAyID0geyAuZG90X2xpbWl0ID0gMjcwMDAwLAorCQkucDJfc2xv dyA9IDEwLAorCQkucDJfZmFzdCA9IDEwCisJfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg aW50ZWxfbGltaXQgaW50ZWxfbGltaXRzX2c0eF9oZG1pID0geworCS5kb3QgPSB7IC5taW4gPSAy MjAwMCwgLm1heCA9IDQwMDAwMCB9LAorCS52Y28gPSB7IC5taW4gPSAxNzUwMDAwLCAubWF4ID0g MzUwMDAwMH0sCisJLm4gPSB7IC5taW4gPSAxLCAubWF4ID0gNCB9LAorCS5tID0geyAubWluID0g MTA0LCAubWF4ID0gMTM4IH0sCisJLm0xID0geyAubWluID0gMTYsIC5tYXggPSAyMyB9LAorCS5t MiA9IHsgLm1pbiA9IDUsIC5tYXggPSAxMSB9LAorCS5wID0geyAubWluID0gNSwgLm1heCA9IDgw IH0sCisJLnAxID0geyAubWluID0gMSwgLm1heCA9IDh9LAorCS5wMiA9IHsgLmRvdF9saW1pdCA9 IDE2NTAwMCwKKwkJLnAyX3Nsb3cgPSAxMCwgLnAyX2Zhc3QgPSA1IH0sCit9OworCitzdGF0aWMg Y29uc3Qgc3RydWN0IGludGVsX2xpbWl0IGludGVsX2xpbWl0c19nNHhfc2luZ2xlX2NoYW5uZWxf bHZkcyA9IHsKKwkuZG90ID0geyAubWluID0gMjAwMDAsIC5tYXggPSAxMTUwMDAgfSwKKwkudmNv ID0geyAubWluID0gMTc1MDAwMCwgLm1heCA9IDM1MDAwMDAgfSwKKwkubiA9IHsgLm1pbiA9IDEs IC5tYXggPSAzIH0sCisJLm0gPSB7IC5taW4gPSAxMDQsIC5tYXggPSAxMzggfSwKKwkubTEgPSB7 IC5taW4gPSAxNywgLm1heCA9IDIzIH0sCisJLm0yID0geyAubWluID0gNSwgLm1heCA9IDExIH0s CisJLnAgPSB7IC5taW4gPSAyOCwgLm1heCA9IDExMiB9LAorCS5wMSA9IHsgLm1pbiA9IDIsIC5t YXggPSA4IH0sCisJLnAyID0geyAuZG90X2xpbWl0ID0gMCwKKwkJLnAyX3Nsb3cgPSAxNCwgLnAy X2Zhc3QgPSAxNAorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2xpbWl0IGlu dGVsX2xpbWl0c19nNHhfZHVhbF9jaGFubmVsX2x2ZHMgPSB7CisJLmRvdCA9IHsgLm1pbiA9IDgw MDAwLCAubWF4ID0gMjI0MDAwIH0sCisJLnZjbyA9IHsgLm1pbiA9IDE3NTAwMDAsIC5tYXggPSAz NTAwMDAwIH0sCisJLm4gPSB7IC5taW4gPSAxLCAubWF4ID0gMyB9LAorCS5tID0geyAubWluID0g MTA0LCAubWF4ID0gMTM4IH0sCisJLm0xID0geyAubWluID0gMTcsIC5tYXggPSAyMyB9LAorCS5t MiA9IHsgLm1pbiA9IDUsIC5tYXggPSAxMSB9LAorCS5wID0geyAubWluID0gMTQsIC5tYXggPSA0 MiB9LAorCS5wMSA9IHsgLm1pbiA9IDIsIC5tYXggPSA2IH0sCisJLnAyID0geyAuZG90X2xpbWl0 ID0gMCwKKwkJLnAyX3Nsb3cgPSA3LCAucDJfZmFzdCA9IDcKKwl9LAorfTsKKworc3RhdGljIGNv bnN0IHN0cnVjdCBpbnRlbF9saW1pdCBwbnZfbGltaXRzX3Nkdm8gPSB7CisJLmRvdCA9IHsgLm1p biA9IDIwMDAwLCAubWF4ID0gNDAwMDAwfSwKKwkudmNvID0geyAubWluID0gMTcwMDAwMCwgLm1h eCA9IDM1MDAwMDAgfSwKKwkvKiBQaW5ldmlldydzIE5jb3VudGVyIGlzIGEgcmluZyBjb3VudGVy ICovCisJLm4gPSB7IC5taW4gPSAzLCAubWF4ID0gNiB9LAorCS5tID0geyAubWluID0gMiwgLm1h eCA9IDI1NiB9LAorCS8qIFBpbmV2aWV3IG9ubHkgaGFzIG9uZSBjb21iaW5lZCBtIGRpdmlkZXIs IHdoaWNoIHdlIHRyZWF0IGFzIG0yLiAqLworCS5tMSA9IHsgLm1pbiA9IDAsIC5tYXggPSAwIH0s CisJLm0yID0geyAubWluID0gMCwgLm1heCA9IDI1NCB9LAorCS5wID0geyAubWluID0gNSwgLm1h eCA9IDgwIH0sCisJLnAxID0geyAubWluID0gMSwgLm1heCA9IDggfSwKKwkucDIgPSB7IC5kb3Rf bGltaXQgPSAyMDAwMDAsCisJCS5wMl9zbG93ID0gMTAsIC5wMl9mYXN0ID0gNSB9LAorfTsKKwor c3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCBwbnZfbGltaXRzX2x2ZHMgPSB7CisJLmRv dCA9IHsgLm1pbiA9IDIwMDAwLCAubWF4ID0gNDAwMDAwIH0sCisJLnZjbyA9IHsgLm1pbiA9IDE3 MDAwMDAsIC5tYXggPSAzNTAwMDAwIH0sCisJLm4gPSB7IC5taW4gPSAzLCAubWF4ID0gNiB9LAor CS5tID0geyAubWluID0gMiwgLm1heCA9IDI1NiB9LAorCS5tMSA9IHsgLm1pbiA9IDAsIC5tYXgg PSAwIH0sCisJLm0yID0geyAubWluID0gMCwgLm1heCA9IDI1NCB9LAorCS5wID0geyAubWluID0g NywgLm1heCA9IDExMiB9LAorCS5wMSA9IHsgLm1pbiA9IDEsIC5tYXggPSA4IH0sCisJLnAyID0g eyAuZG90X2xpbWl0ID0gMTEyMDAwLAorCQkucDJfc2xvdyA9IDE0LCAucDJfZmFzdCA9IDE0IH0s Cit9OworCisvKiBJcm9ubGFrZSAvIFNhbmR5YnJpZGdlCisgKgorICogV2UgY2FsY3VsYXRlIGNs b2NrIHVzaW5nIChyZWdpc3Rlcl92YWx1ZSArIDIpIGZvciBOL00xL00yLCBzbyBoZXJlCisgKiB0 aGUgcmFuZ2UgdmFsdWUgZm9yIHRoZW0gaXMgKGFjdHVhbF92YWx1ZSAtIDIpLgorICovCitzdGF0 aWMgY29uc3Qgc3RydWN0IGludGVsX2xpbWl0IGlsa19saW1pdHNfZGFjID0geworCS5kb3QgPSB7 IC5taW4gPSAyNTAwMCwgLm1heCA9IDM1MDAwMCB9LAorCS52Y28gPSB7IC5taW4gPSAxNzYwMDAw LCAubWF4ID0gMzUxMDAwMCB9LAorCS5uID0geyAubWluID0gMSwgLm1heCA9IDUgfSwKKwkubSA9 IHsgLm1pbiA9IDc5LCAubWF4ID0gMTI3IH0sCisJLm0xID0geyAubWluID0gMTIsIC5tYXggPSAy MiB9LAorCS5tMiA9IHsgLm1pbiA9IDUsIC5tYXggPSA5IH0sCisJLnAgPSB7IC5taW4gPSA1LCAu bWF4ID0gODAgfSwKKwkucDEgPSB7IC5taW4gPSAxLCAubWF4ID0gOCB9LAorCS5wMiA9IHsgLmRv dF9saW1pdCA9IDIyNTAwMCwKKwkJLnAyX3Nsb3cgPSAxMCwgLnAyX2Zhc3QgPSA1IH0sCit9Owor CitzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2xpbWl0IGlsa19saW1pdHNfc2luZ2xlX2x2ZHMg PSB7CisJLmRvdCA9IHsgLm1pbiA9IDI1MDAwLCAubWF4ID0gMzUwMDAwIH0sCisJLnZjbyA9IHsg Lm1pbiA9IDE3NjAwMDAsIC5tYXggPSAzNTEwMDAwIH0sCisJLm4gPSB7IC5taW4gPSAxLCAubWF4 ID0gMyB9LAorCS5tID0geyAubWluID0gNzksIC5tYXggPSAxMTggfSwKKwkubTEgPSB7IC5taW4g PSAxMiwgLm1heCA9IDIyIH0sCisJLm0yID0geyAubWluID0gNSwgLm1heCA9IDkgfSwKKwkucCA9 IHsgLm1pbiA9IDI4LCAubWF4ID0gMTEyIH0sCisJLnAxID0geyAubWluID0gMiwgLm1heCA9IDgg fSwKKwkucDIgPSB7IC5kb3RfbGltaXQgPSAyMjUwMDAsCisJCS5wMl9zbG93ID0gMTQsIC5wMl9m YXN0ID0gMTQgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgaWxrX2xp bWl0c19kdWFsX2x2ZHMgPSB7CisJLmRvdCA9IHsgLm1pbiA9IDI1MDAwLCAubWF4ID0gMzUwMDAw IH0sCisJLnZjbyA9IHsgLm1pbiA9IDE3NjAwMDAsIC5tYXggPSAzNTEwMDAwIH0sCisJLm4gPSB7 IC5taW4gPSAxLCAubWF4ID0gMyB9LAorCS5tID0geyAubWluID0gNzksIC5tYXggPSAxMjcgfSwK KwkubTEgPSB7IC5taW4gPSAxMiwgLm1heCA9IDIyIH0sCisJLm0yID0geyAubWluID0gNSwgLm1h eCA9IDkgfSwKKwkucCA9IHsgLm1pbiA9IDE0LCAubWF4ID0gNTYgfSwKKwkucDEgPSB7IC5taW4g PSAyLCAubWF4ID0gOCB9LAorCS5wMiA9IHsgLmRvdF9saW1pdCA9IDIyNTAwMCwKKwkJLnAyX3Ns b3cgPSA3LCAucDJfZmFzdCA9IDcgfSwKK307CisKKy8qIExWRFMgMTAwbWh6IHJlZmNsayBsaW1p dHMuICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2xpbWl0IGlsa19saW1pdHNfc2luZ2xl X2x2ZHNfMTAwbSA9IHsKKwkuZG90ID0geyAubWluID0gMjUwMDAsIC5tYXggPSAzNTAwMDAgfSwK KwkudmNvID0geyAubWluID0gMTc2MDAwMCwgLm1heCA9IDM1MTAwMDAgfSwKKwkubiA9IHsgLm1p biA9IDEsIC5tYXggPSAyIH0sCisJLm0gPSB7IC5taW4gPSA3OSwgLm1heCA9IDEyNiB9LAorCS5t MSA9IHsgLm1pbiA9IDEyLCAubWF4ID0gMjIgfSwKKwkubTIgPSB7IC5taW4gPSA1LCAubWF4ID0g OSB9LAorCS5wID0geyAubWluID0gMjgsIC5tYXggPSAxMTIgfSwKKwkucDEgPSB7IC5taW4gPSAy LCAubWF4ID0gOCB9LAorCS5wMiA9IHsgLmRvdF9saW1pdCA9IDIyNTAwMCwKKwkJLnAyX3Nsb3cg PSAxNCwgLnAyX2Zhc3QgPSAxNCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9s aW1pdCBpbGtfbGltaXRzX2R1YWxfbHZkc18xMDBtID0geworCS5kb3QgPSB7IC5taW4gPSAyNTAw MCwgLm1heCA9IDM1MDAwMCB9LAorCS52Y28gPSB7IC5taW4gPSAxNzYwMDAwLCAubWF4ID0gMzUx MDAwMCB9LAorCS5uID0geyAubWluID0gMSwgLm1heCA9IDMgfSwKKwkubSA9IHsgLm1pbiA9IDc5 LCAubWF4ID0gMTI2IH0sCisJLm0xID0geyAubWluID0gMTIsIC5tYXggPSAyMiB9LAorCS5tMiA9 IHsgLm1pbiA9IDUsIC5tYXggPSA5IH0sCisJLnAgPSB7IC5taW4gPSAxNCwgLm1heCA9IDQyIH0s CisJLnAxID0geyAubWluID0gMiwgLm1heCA9IDYgfSwKKwkucDIgPSB7IC5kb3RfbGltaXQgPSAy MjUwMDAsCisJCS5wMl9zbG93ID0gNywgLnAyX2Zhc3QgPSA3IH0sCit9OworCitzdGF0aWMgY29u c3Qgc3RydWN0IGludGVsX2xpbWl0IGludGVsX2xpbWl0c192bHYgPSB7CisJIC8qCisJICAqIFRo ZXNlIGFyZSB0aGUgZGF0YSByYXRlIGxpbWl0cyAobWVhc3VyZWQgaW4gZmFzdCBjbG9ja3MpCisJ ICAqIHNpbmNlIHRob3NlIGFyZSB0aGUgc3RyaWN0ZXN0IGxpbWl0cyB3ZSBoYXZlLiBUaGUgZmFz dAorCSAgKiBjbG9jayBhbmQgYWN0dWFsIHJhdGUgbGltaXRzIGFyZSBtb3JlIHJlbGF4ZWQsIHNv IGNoZWNraW5nCisJICAqIHRoZW0gd291bGQgbWFrZSBubyBkaWZmZXJlbmNlLgorCSAgKi8KKwku ZG90ID0geyAubWluID0gMjUwMDAgKiA1LCAubWF4ID0gMjcwMDAwICogNSB9LAorCS52Y28gPSB7 IC5taW4gPSA0MDAwMDAwLCAubWF4ID0gNjAwMDAwMCB9LAorCS5uID0geyAubWluID0gMSwgLm1h eCA9IDcgfSwKKwkubTEgPSB7IC5taW4gPSAyLCAubWF4ID0gMyB9LAorCS5tMiA9IHsgLm1pbiA9 IDExLCAubWF4ID0gMTU2IH0sCisJLnAxID0geyAubWluID0gMiwgLm1heCA9IDMgfSwKKwkucDIg PSB7IC5wMl9zbG93ID0gMiwgLnAyX2Zhc3QgPSAyMCB9LCAvKiBzbG93PW1pbiwgZmFzdD1tYXgg Ki8KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgaW50ZWxfbGltaXRzX2No diA9IHsKKwkvKgorCSAqIFRoZXNlIGFyZSB0aGUgZGF0YSByYXRlIGxpbWl0cyAobWVhc3VyZWQg aW4gZmFzdCBjbG9ja3MpCisJICogc2luY2UgdGhvc2UgYXJlIHRoZSBzdHJpY3Rlc3QgbGltaXRz IHdlIGhhdmUuICBUaGUgZmFzdAorCSAqIGNsb2NrIGFuZCBhY3R1YWwgcmF0ZSBsaW1pdHMgYXJl IG1vcmUgcmVsYXhlZCwgc28gY2hlY2tpbmcKKwkgKiB0aGVtIHdvdWxkIG1ha2Ugbm8gZGlmZmVy ZW5jZS4KKwkgKi8KKwkuZG90ID0geyAubWluID0gMjUwMDAgKiA1LCAubWF4ID0gNTQwMDAwICog NX0sCisJLnZjbyA9IHsgLm1pbiA9IDQ4MDAwMDAsIC5tYXggPSA2NDgwMDAwIH0sCisJLm4gPSB7 IC5taW4gPSAxLCAubWF4ID0gMSB9LAorCS5tMSA9IHsgLm1pbiA9IDIsIC5tYXggPSAyIH0sCisJ Lm0yID0geyAubWluID0gMjQgPDwgMjIsIC5tYXggPSAxNzUgPDwgMjIgfSwKKwkucDEgPSB7IC5t aW4gPSAyLCAubWF4ID0gNCB9LAorCS5wMiA9IHsJLnAyX3Nsb3cgPSAxLCAucDJfZmFzdCA9IDE0 IH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2xpbWl0IGludGVsX2xpbWl0c19i eHQgPSB7CisJLyogRklYTUU6IGZpbmQgcmVhbCBkb3QgbGltaXRzICovCisJLmRvdCA9IHsgLm1p biA9IDAsIC5tYXggPSBJTlRfTUFYIH0sCisJLnZjbyA9IHsgLm1pbiA9IDQ4MDAwMDAsIC5tYXgg PSA2NzAwMDAwIH0sCisJLm4gPSB7IC5taW4gPSAxLCAubWF4ID0gMSB9LAorCS5tMSA9IHsgLm1p biA9IDIsIC5tYXggPSAyIH0sCisJLyogRklYTUU6IGZpbmQgcmVhbCBtMiBsaW1pdHMgKi8KKwku bTIgPSB7IC5taW4gPSAyIDw8IDIyLCAubWF4ID0gMjU1IDw8IDIyIH0sCisJLnAxID0geyAubWlu ID0gMiwgLm1heCA9IDQgfSwKKwkucDIgPSB7IC5wMl9zbG93ID0gMSwgLnAyX2Zhc3QgPSAyMCB9 LAorfTsKKworLyoKKyAqIFBsYXRmb3JtIHNwZWNpZmljIGhlbHBlcnMgdG8gY2FsY3VsYXRlIHRo ZSBwb3J0IFBMTCBsb29wYmFjay0gKGNsb2NrLm0pLAorICogYW5kIHBvc3QtZGl2aWRlciAoY2xv Y2sucCkgdmFsdWVzLCBwcmUtIChjbG9jay52Y28pIGFuZCBwb3N0LWRpdmlkZWQgZmFzdAorICog KGNsb2NrLmRvdCkgY2xvY2sgcmF0ZXMuIFRoaXMgZmFzdCBkb3QgY2xvY2sgaXMgZmVkIHRvIHRo ZSBwb3J0J3MgSU8gbG9naWMuCisgKiBUaGUgaGVscGVycycgcmV0dXJuIHZhbHVlIGlzIHRoZSBy YXRlIG9mIHRoZSBjbG9jayB0aGF0IGlzIGZlZCB0byB0aGUKKyAqIGRpc3BsYXkgZW5naW5lJ3Mg cGlwZSB3aGljaCBjYW4gYmUgdGhlIGFib3ZlIGZhc3QgZG90IGNsb2NrIHJhdGUgb3IgYQorICog ZGl2aWRlZC1kb3duIHZlcnNpb24gb2YgaXQuCisgKi8KKy8qIG0xIGlzIHJlc2VydmVkIGFzIDAg aW4gUGluZXZpZXcsIG4gaXMgYSByaW5nIGNvdW50ZXIgKi8KK2ludCBwbnZfY2FsY19kcGxsX3Bh cmFtcyhpbnQgcmVmY2xrLCBzdHJ1Y3QgZHBsbCAqY2xvY2spCit7CisJY2xvY2stPm0gPSBjbG9j ay0+bTIgKyAyOworCWNsb2NrLT5wID0gY2xvY2stPnAxICogY2xvY2stPnAyOworCWlmIChXQVJO X09OKGNsb2NrLT5uID09IDAgfHwgY2xvY2stPnAgPT0gMCkpCisJCXJldHVybiAwOworCWNsb2Nr LT52Y28gPSBESVZfUk9VTkRfQ0xPU0VTVChyZWZjbGsgKiBjbG9jay0+bSwgY2xvY2stPm4pOwor CWNsb2NrLT5kb3QgPSBESVZfUk9VTkRfQ0xPU0VTVChjbG9jay0+dmNvLCBjbG9jay0+cCk7CisK KwlyZXR1cm4gY2xvY2stPmRvdDsKK30KKworc3RhdGljIHUzMiBpOXh4X2RwbGxfY29tcHV0ZV9t KHN0cnVjdCBkcGxsICpkcGxsKQoreworCXJldHVybiA1ICogKGRwbGwtPm0xICsgMikgKyAoZHBs bC0+bTIgKyAyKTsKK30KKworaW50IGk5eHhfY2FsY19kcGxsX3BhcmFtcyhpbnQgcmVmY2xrLCBz dHJ1Y3QgZHBsbCAqY2xvY2spCit7CisJY2xvY2stPm0gPSBpOXh4X2RwbGxfY29tcHV0ZV9tKGNs b2NrKTsKKwljbG9jay0+cCA9IGNsb2NrLT5wMSAqIGNsb2NrLT5wMjsKKwlpZiAoV0FSTl9PTihj bG9jay0+biArIDIgPT0gMCB8fCBjbG9jay0+cCA9PSAwKSkKKwkJcmV0dXJuIDA7CisJY2xvY2st PnZjbyA9IERJVl9ST1VORF9DTE9TRVNUKHJlZmNsayAqIGNsb2NrLT5tLCBjbG9jay0+biArIDIp OworCWNsb2NrLT5kb3QgPSBESVZfUk9VTkRfQ0xPU0VTVChjbG9jay0+dmNvLCBjbG9jay0+cCk7 CisKKwlyZXR1cm4gY2xvY2stPmRvdDsKK30KKworaW50IHZsdl9jYWxjX2RwbGxfcGFyYW1zKGlu dCByZWZjbGssIHN0cnVjdCBkcGxsICpjbG9jaykKK3sKKwljbG9jay0+bSA9IGNsb2NrLT5tMSAq IGNsb2NrLT5tMjsKKwljbG9jay0+cCA9IGNsb2NrLT5wMSAqIGNsb2NrLT5wMjsKKwlpZiAoV0FS Tl9PTihjbG9jay0+biA9PSAwIHx8IGNsb2NrLT5wID09IDApKQorCQlyZXR1cm4gMDsKKwljbG9j ay0+dmNvID0gRElWX1JPVU5EX0NMT1NFU1QocmVmY2xrICogY2xvY2stPm0sIGNsb2NrLT5uKTsK KwljbG9jay0+ZG90ID0gRElWX1JPVU5EX0NMT1NFU1QoY2xvY2stPnZjbywgY2xvY2stPnApOwor CisJcmV0dXJuIGNsb2NrLT5kb3QgLyA1OworfQorCitpbnQgY2h2X2NhbGNfZHBsbF9wYXJhbXMo aW50IHJlZmNsaywgc3RydWN0IGRwbGwgKmNsb2NrKQoreworCWNsb2NrLT5tID0gY2xvY2stPm0x ICogY2xvY2stPm0yOworCWNsb2NrLT5wID0gY2xvY2stPnAxICogY2xvY2stPnAyOworCWlmIChX QVJOX09OKGNsb2NrLT5uID09IDAgfHwgY2xvY2stPnAgPT0gMCkpCisJCXJldHVybiAwOworCWNs b2NrLT52Y28gPSBESVZfUk9VTkRfQ0xPU0VTVF9VTEwobXVsX3UzMl91MzIocmVmY2xrLCBjbG9j ay0+bSksCisJCQkJCSAgIGNsb2NrLT5uIDw8IDIyKTsKKwljbG9jay0+ZG90ID0gRElWX1JPVU5E X0NMT1NFU1QoY2xvY2stPnZjbywgY2xvY2stPnApOworCisJcmV0dXJuIGNsb2NrLT5kb3QgLyA1 OworfQorCisvKgorICogUmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiBzZXQgb2YgZGl2aXNvcnMg YXJlIHZhbGlkIGZvciBhIGdpdmVuIHJlZmNsayB3aXRoCisgKiB0aGUgZ2l2ZW4gY29ubmVjdG9y cy4KKyAqLworc3RhdGljIGJvb2wgaW50ZWxfcGxsX2lzX3ZhbGlkKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgKmxp bWl0LAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkcGxsICpjbG9jaykKK3sKKwlpZiAoY2xvY2st Pm4gPCBsaW1pdC0+bi5taW4gfHwgbGltaXQtPm4ubWF4IDwgY2xvY2stPm4pCisJCXJldHVybiBm YWxzZTsKKwlpZiAoY2xvY2stPnAxIDwgbGltaXQtPnAxLm1pbiB8fCBsaW1pdC0+cDEubWF4IDwg Y2xvY2stPnAxKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKGNsb2NrLT5tMiA8IGxpbWl0LT5tMi5t aW4gfHwgbGltaXQtPm0yLm1heCA8IGNsb2NrLT5tMikKKwkJcmV0dXJuIGZhbHNlOworCWlmIChj bG9jay0+bTEgPCBsaW1pdC0+bTEubWluIHx8IGxpbWl0LT5tMS5tYXggPCBjbG9jay0+bTEpCisJ CXJldHVybiBmYWxzZTsKKworCWlmICghSVNfUElORVZJRVcoZGV2X3ByaXYpICYmICFJU19WQUxM RVlWSUVXKGRldl9wcml2KSAmJgorCSAgICAhSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikgJiYgIUlT X0dFTjlfTFAoZGV2X3ByaXYpKQorCQlpZiAoY2xvY2stPm0xIDw9IGNsb2NrLT5tMikKKwkJCXJl dHVybiBmYWxzZTsKKworCWlmICghSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgJiYgIUlTX0NIRVJS WVZJRVcoZGV2X3ByaXYpICYmCisJICAgICFJU19HRU45X0xQKGRldl9wcml2KSkgeworCQlpZiAo Y2xvY2stPnAgPCBsaW1pdC0+cC5taW4gfHwgbGltaXQtPnAubWF4IDwgY2xvY2stPnApCisJCQly ZXR1cm4gZmFsc2U7CisJCWlmIChjbG9jay0+bSA8IGxpbWl0LT5tLm1pbiB8fCBsaW1pdC0+bS5t YXggPCBjbG9jay0+bSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAoY2xvY2stPnZjbyA8 IGxpbWl0LT52Y28ubWluIHx8IGxpbWl0LT52Y28ubWF4IDwgY2xvY2stPnZjbykKKwkJcmV0dXJu IGZhbHNlOworCS8qIFhYWDogV2UgbWF5IG5lZWQgdG8gYmUgY2hlY2tpbmcgIkRvdCBjbG9jayIg ZGVwZW5kaW5nIG9uIHRoZSBtdWx0aXBsaWVyLAorCSAqIGNvbm5lY3RvciwgZXRjLiwgcmF0aGVy IHRoYW4ganVzdCBhIHNpbmdsZSByYW5nZS4KKwkgKi8KKwlpZiAoY2xvY2stPmRvdCA8IGxpbWl0 LT5kb3QubWluIHx8IGxpbWl0LT5kb3QubWF4IDwgY2xvY2stPmRvdCkKKwkJcmV0dXJuIGZhbHNl OworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbnQKK2k5eHhfc2VsZWN0X3AyX2Rpdihj b25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgKmxpbWl0LAorCQkgICBjb25zdCBzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJICAgaW50IHRhcmdldCkKK3sKKwlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGNfc3RhdGUtPnVhcGkuY3J0Yy0+ ZGV2KTsKKworCWlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBV VF9MVkRTKSkgeworCQkvKgorCQkgKiBGb3IgTFZEUyBqdXN0IHJlbHkgb24gaXRzIGN1cnJlbnQg c2V0dGluZ3MgZm9yIGR1YWwtY2hhbm5lbC4KKwkJICogV2UgaGF2ZW4ndCBmaWd1cmVkIG91dCBo b3cgdG8gcmVsaWFibHkgc2V0IHVwIGRpZmZlcmVudAorCQkgKiBzaW5nbGUvZHVhbCBjaGFubmVs IHN0YXRlLCBpZiB3ZSBldmVuIGNhbi4KKwkJICovCisJCWlmIChpbnRlbF9pc19kdWFsX2xpbmtf bHZkcyhkZXZfcHJpdikpCisJCQlyZXR1cm4gbGltaXQtPnAyLnAyX2Zhc3Q7CisJCWVsc2UKKwkJ CXJldHVybiBsaW1pdC0+cDIucDJfc2xvdzsKKwl9IGVsc2UgeworCQlpZiAodGFyZ2V0IDwgbGlt aXQtPnAyLmRvdF9saW1pdCkKKwkJCXJldHVybiBsaW1pdC0+cDIucDJfc2xvdzsKKwkJZWxzZQor CQkJcmV0dXJuIGxpbWl0LT5wMi5wMl9mYXN0OworCX0KK30KKworLyoKKyAqIFJldHVybnMgYSBz ZXQgb2YgZGl2aXNvcnMgZm9yIHRoZSBkZXNpcmVkIHRhcmdldCBjbG9jayB3aXRoIHRoZSBnaXZl bgorICogcmVmY2xrLCBvciBGQUxTRS4gIFRoZSByZXR1cm5lZCB2YWx1ZXMgcmVwcmVzZW50IHRo ZSBjbG9jayBlcXVhdGlvbjoKKyAqIHJlZmxjayAqICg1ICogKG0xICsgMikgKyAobTIgKyAyKSkg LyAobiArIDIpIC8gcDEgLyBwMi4KKyAqCisgKiBUYXJnZXQgYW5kIHJlZmVyZW5jZSBjbG9ja3Mg YXJlIHNwZWNpZmllZCBpbiBrSHouCisgKgorICogSWYgbWF0Y2hfY2xvY2sgaXMgcHJvdmlkZWQs IHRoZW4gYmVzdF9jbG9jayBQIGRpdmlkZXIgbXVzdCBtYXRjaCB0aGUgUAorICogZGl2aWRlciBm cm9tIEBtYXRjaF9jbG9jayB1c2VkIGZvciBMVkRTIGRvd25jbG9ja2luZy4KKyAqLworc3RhdGlj IGJvb2wKK2k5eHhfZmluZF9iZXN0X2RwbGwoY29uc3Qgc3RydWN0IGludGVsX2xpbWl0ICpsaW1p dCwKKwkJICAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkgICAgaW50 IHRhcmdldCwgaW50IHJlZmNsaywgc3RydWN0IGRwbGwgKm1hdGNoX2Nsb2NrLAorCQkgICAgc3Ry dWN0IGRwbGwgKmJlc3RfY2xvY2spCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGNf c3RhdGUtPnVhcGkuY3J0Yy0+ZGV2OworCXN0cnVjdCBkcGxsIGNsb2NrOworCWludCBlcnIgPSB0 YXJnZXQ7CisKKwltZW1zZXQoYmVzdF9jbG9jaywgMCwgc2l6ZW9mKCpiZXN0X2Nsb2NrKSk7CisK KwljbG9jay5wMiA9IGk5eHhfc2VsZWN0X3AyX2RpdihsaW1pdCwgY3J0Y19zdGF0ZSwgdGFyZ2V0 KTsKKworCWZvciAoY2xvY2subTEgPSBsaW1pdC0+bTEubWluOyBjbG9jay5tMSA8PSBsaW1pdC0+ bTEubWF4OworCSAgICAgY2xvY2subTErKykgeworCQlmb3IgKGNsb2NrLm0yID0gbGltaXQtPm0y Lm1pbjsKKwkJICAgICBjbG9jay5tMiA8PSBsaW1pdC0+bTIubWF4OyBjbG9jay5tMisrKSB7CisJ CQlpZiAoY2xvY2subTIgPj0gY2xvY2subTEpCisJCQkJYnJlYWs7CisJCQlmb3IgKGNsb2NrLm4g PSBsaW1pdC0+bi5taW47CisJCQkgICAgIGNsb2NrLm4gPD0gbGltaXQtPm4ubWF4OyBjbG9jay5u KyspIHsKKwkJCQlmb3IgKGNsb2NrLnAxID0gbGltaXQtPnAxLm1pbjsKKwkJCQkJY2xvY2sucDEg PD0gbGltaXQtPnAxLm1heDsgY2xvY2sucDErKykgeworCQkJCQlpbnQgdGhpc19lcnI7CisKKwkJ CQkJaTl4eF9jYWxjX2RwbGxfcGFyYW1zKHJlZmNsaywgJmNsb2NrKTsKKwkJCQkJaWYgKCFpbnRl bF9wbGxfaXNfdmFsaWQodG9faTkxNShkZXYpLAorCQkJCQkJCQlsaW1pdCwKKwkJCQkJCQkJJmNs b2NrKSkKKwkJCQkJCWNvbnRpbnVlOworCQkJCQlpZiAobWF0Y2hfY2xvY2sgJiYKKwkJCQkJICAg IGNsb2NrLnAgIT0gbWF0Y2hfY2xvY2stPnApCisJCQkJCQljb250aW51ZTsKKworCQkJCQl0aGlz X2VyciA9IGFicyhjbG9jay5kb3QgLSB0YXJnZXQpOworCQkJCQlpZiAodGhpc19lcnIgPCBlcnIp IHsKKwkJCQkJCSpiZXN0X2Nsb2NrID0gY2xvY2s7CisJCQkJCQllcnIgPSB0aGlzX2VycjsKKwkJ CQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCXJldHVybiAoZXJyICE9IHRhcmdldCk7Cit9 CisKKy8qCisgKiBSZXR1cm5zIGEgc2V0IG9mIGRpdmlzb3JzIGZvciB0aGUgZGVzaXJlZCB0YXJn ZXQgY2xvY2sgd2l0aCB0aGUgZ2l2ZW4KKyAqIHJlZmNsaywgb3IgRkFMU0UuICBUaGUgcmV0dXJu ZWQgdmFsdWVzIHJlcHJlc2VudCB0aGUgY2xvY2sgZXF1YXRpb246CisgKiByZWZsY2sgKiAoNSAq IChtMSArIDIpICsgKG0yICsgMikpIC8gKG4gKyAyKSAvIHAxIC8gcDIuCisgKgorICogVGFyZ2V0 IGFuZCByZWZlcmVuY2UgY2xvY2tzIGFyZSBzcGVjaWZpZWQgaW4ga0h6LgorICoKKyAqIElmIG1h dGNoX2Nsb2NrIGlzIHByb3ZpZGVkLCB0aGVuIGJlc3RfY2xvY2sgUCBkaXZpZGVyIG11c3QgbWF0 Y2ggdGhlIFAKKyAqIGRpdmlkZXIgZnJvbSBAbWF0Y2hfY2xvY2sgdXNlZCBmb3IgTFZEUyBkb3du Y2xvY2tpbmcuCisgKi8KK3N0YXRpYyBib29sCitwbnZfZmluZF9iZXN0X2RwbGwoY29uc3Qgc3Ry dWN0IGludGVsX2xpbWl0ICpsaW1pdCwKKwkJICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNy dGNfc3RhdGUsCisJCSAgIGludCB0YXJnZXQsIGludCByZWZjbGssIHN0cnVjdCBkcGxsICptYXRj aF9jbG9jaywKKwkJICAgc3RydWN0IGRwbGwgKmJlc3RfY2xvY2spCit7CisJc3RydWN0IGRybV9k ZXZpY2UgKmRldiA9IGNydGNfc3RhdGUtPnVhcGkuY3J0Yy0+ZGV2OworCXN0cnVjdCBkcGxsIGNs b2NrOworCWludCBlcnIgPSB0YXJnZXQ7CisKKwltZW1zZXQoYmVzdF9jbG9jaywgMCwgc2l6ZW9m KCpiZXN0X2Nsb2NrKSk7CisKKwljbG9jay5wMiA9IGk5eHhfc2VsZWN0X3AyX2RpdihsaW1pdCwg Y3J0Y19zdGF0ZSwgdGFyZ2V0KTsKKworCWZvciAoY2xvY2subTEgPSBsaW1pdC0+bTEubWluOyBj bG9jay5tMSA8PSBsaW1pdC0+bTEubWF4OworCSAgICAgY2xvY2subTErKykgeworCQlmb3IgKGNs b2NrLm0yID0gbGltaXQtPm0yLm1pbjsKKwkJICAgICBjbG9jay5tMiA8PSBsaW1pdC0+bTIubWF4 OyBjbG9jay5tMisrKSB7CisJCQlmb3IgKGNsb2NrLm4gPSBsaW1pdC0+bi5taW47CisJCQkgICAg IGNsb2NrLm4gPD0gbGltaXQtPm4ubWF4OyBjbG9jay5uKyspIHsKKwkJCQlmb3IgKGNsb2NrLnAx ID0gbGltaXQtPnAxLm1pbjsKKwkJCQkJY2xvY2sucDEgPD0gbGltaXQtPnAxLm1heDsgY2xvY2su cDErKykgeworCQkJCQlpbnQgdGhpc19lcnI7CisKKwkJCQkJcG52X2NhbGNfZHBsbF9wYXJhbXMo cmVmY2xrLCAmY2xvY2spOworCQkJCQlpZiAoIWludGVsX3BsbF9pc192YWxpZCh0b19pOTE1KGRl diksCisJCQkJCQkJCWxpbWl0LAorCQkJCQkJCQkmY2xvY2spKQorCQkJCQkJY29udGludWU7CisJ CQkJCWlmIChtYXRjaF9jbG9jayAmJgorCQkJCQkgICAgY2xvY2sucCAhPSBtYXRjaF9jbG9jay0+ cCkKKwkJCQkJCWNvbnRpbnVlOworCisJCQkJCXRoaXNfZXJyID0gYWJzKGNsb2NrLmRvdCAtIHRh cmdldCk7CisJCQkJCWlmICh0aGlzX2VyciA8IGVycikgeworCQkJCQkJKmJlc3RfY2xvY2sgPSBj bG9jazsKKwkJCQkJCWVyciA9IHRoaXNfZXJyOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJ fQorCisJcmV0dXJuIChlcnIgIT0gdGFyZ2V0KTsKK30KKworLyoKKyAqIFJldHVybnMgYSBzZXQg b2YgZGl2aXNvcnMgZm9yIHRoZSBkZXNpcmVkIHRhcmdldCBjbG9jayB3aXRoIHRoZSBnaXZlbgor ICogcmVmY2xrLCBvciBGQUxTRS4gIFRoZSByZXR1cm5lZCB2YWx1ZXMgcmVwcmVzZW50IHRoZSBj bG9jayBlcXVhdGlvbjoKKyAqIHJlZmxjayAqICg1ICogKG0xICsgMikgKyAobTIgKyAyKSkgLyAo biArIDIpIC8gcDEgLyBwMi4KKyAqCisgKiBUYXJnZXQgYW5kIHJlZmVyZW5jZSBjbG9ja3MgYXJl IHNwZWNpZmllZCBpbiBrSHouCisgKgorICogSWYgbWF0Y2hfY2xvY2sgaXMgcHJvdmlkZWQsIHRo ZW4gYmVzdF9jbG9jayBQIGRpdmlkZXIgbXVzdCBtYXRjaCB0aGUgUAorICogZGl2aWRlciBmcm9t IEBtYXRjaF9jbG9jayB1c2VkIGZvciBMVkRTIGRvd25jbG9ja2luZy4KKyAqLworc3RhdGljIGJv b2wKK2c0eF9maW5kX2Jlc3RfZHBsbChjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgKmxpbWl0LAor CQkgICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJICAgaW50IHRhcmdl dCwgaW50IHJlZmNsaywgc3RydWN0IGRwbGwgKm1hdGNoX2Nsb2NrLAorCQkgICBzdHJ1Y3QgZHBs bCAqYmVzdF9jbG9jaykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Y19zdGF0ZS0+ dWFwaS5jcnRjLT5kZXY7CisJc3RydWN0IGRwbGwgY2xvY2s7CisJaW50IG1heF9uOworCWJvb2wg Zm91bmQgPSBmYWxzZTsKKwkvKiBhcHByb3hpbWF0ZWx5IGVxdWFscyB0YXJnZXQgKiAwLjAwNTg1 ICovCisJaW50IGVycl9tb3N0ID0gKHRhcmdldCA+PiA4KSArICh0YXJnZXQgPj4gOSk7CisKKwlt ZW1zZXQoYmVzdF9jbG9jaywgMCwgc2l6ZW9mKCpiZXN0X2Nsb2NrKSk7CisKKwljbG9jay5wMiA9 IGk5eHhfc2VsZWN0X3AyX2RpdihsaW1pdCwgY3J0Y19zdGF0ZSwgdGFyZ2V0KTsKKworCW1heF9u ID0gbGltaXQtPm4ubWF4OworCS8qIGJhc2VkIG9uIGhhcmR3YXJlIHJlcXVpcmVtZW50LCBwcmVm ZXIgc21hbGxlciBuIHRvIHByZWNpc2lvbiAqLworCWZvciAoY2xvY2subiA9IGxpbWl0LT5uLm1p bjsgY2xvY2subiA8PSBtYXhfbjsgY2xvY2subisrKSB7CisJCS8qIGJhc2VkIG9uIGhhcmR3YXJl IHJlcXVpcmVtZW50LCBwcmVmZXJlIGxhcmdlciBtMSxtMiAqLworCQlmb3IgKGNsb2NrLm0xID0g bGltaXQtPm0xLm1heDsKKwkJICAgICBjbG9jay5tMSA+PSBsaW1pdC0+bTEubWluOyBjbG9jay5t MS0tKSB7CisJCQlmb3IgKGNsb2NrLm0yID0gbGltaXQtPm0yLm1heDsKKwkJCSAgICAgY2xvY2su bTIgPj0gbGltaXQtPm0yLm1pbjsgY2xvY2subTItLSkgeworCQkJCWZvciAoY2xvY2sucDEgPSBs aW1pdC0+cDEubWF4OworCQkJCSAgICAgY2xvY2sucDEgPj0gbGltaXQtPnAxLm1pbjsgY2xvY2su cDEtLSkgeworCQkJCQlpbnQgdGhpc19lcnI7CisKKwkJCQkJaTl4eF9jYWxjX2RwbGxfcGFyYW1z KHJlZmNsaywgJmNsb2NrKTsKKwkJCQkJaWYgKCFpbnRlbF9wbGxfaXNfdmFsaWQodG9faTkxNShk ZXYpLAorCQkJCQkJCQlsaW1pdCwKKwkJCQkJCQkJJmNsb2NrKSkKKwkJCQkJCWNvbnRpbnVlOwor CisJCQkJCXRoaXNfZXJyID0gYWJzKGNsb2NrLmRvdCAtIHRhcmdldCk7CisJCQkJCWlmICh0aGlz X2VyciA8IGVycl9tb3N0KSB7CisJCQkJCQkqYmVzdF9jbG9jayA9IGNsb2NrOworCQkJCQkJZXJy X21vc3QgPSB0aGlzX2VycjsKKwkJCQkJCW1heF9uID0gY2xvY2subjsKKwkJCQkJCWZvdW5kID0g dHJ1ZTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gZm91bmQ7Cit9CisK Ky8qCisgKiBDaGVjayBpZiB0aGUgY2FsY3VsYXRlZCBQTEwgY29uZmlndXJhdGlvbiBpcyBtb3Jl IG9wdGltYWwgY29tcGFyZWQgdG8gdGhlCisgKiBiZXN0IGNvbmZpZ3VyYXRpb24gYW5kIGVycm9y IGZvdW5kIHNvIGZhci4gUmV0dXJuIHRoZSBjYWxjdWxhdGVkIGVycm9yLgorICovCitzdGF0aWMg Ym9vbCB2bHZfUExMX2lzX29wdGltYWwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHRhcmdl dF9mcmVxLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkcGxsICpjYWxjdWxhdGVkX2Nsb2NrLAor CQkJICAgICAgIGNvbnN0IHN0cnVjdCBkcGxsICpiZXN0X2Nsb2NrLAorCQkJICAgICAgIHVuc2ln bmVkIGludCBiZXN0X2Vycm9yX3BwbSwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgKmVycm9yX3Bw bSkKK3sKKwkvKgorCSAqIEZvciBDSFYgaWdub3JlIHRoZSBlcnJvciBhbmQgY29uc2lkZXIgb25s eSB0aGUgUCB2YWx1ZS4KKwkgKiBQcmVmZXIgYSBiaWdnZXIgUCB2YWx1ZSBiYXNlZCBvbiBIVyBy ZXF1aXJlbWVudHMuCisJICovCisJaWYgKElTX0NIRVJSWVZJRVcodG9faTkxNShkZXYpKSkgewor CQkqZXJyb3JfcHBtID0gMDsKKworCQlyZXR1cm4gY2FsY3VsYXRlZF9jbG9jay0+cCA+IGJlc3Rf Y2xvY2stPnA7CisJfQorCisJaWYgKGRybV9XQVJOX09OX09OQ0UoZGV2LCAhdGFyZ2V0X2ZyZXEp KQorCQlyZXR1cm4gZmFsc2U7CisKKwkqZXJyb3JfcHBtID0gZGl2X3U2NCgxMDAwMDAwVUxMICoK KwkJCQlhYnModGFyZ2V0X2ZyZXEgLSBjYWxjdWxhdGVkX2Nsb2NrLT5kb3QpLAorCQkJICAgICB0 YXJnZXRfZnJlcSk7CisJLyoKKwkgKiBQcmVmZXIgYSBiZXR0ZXIgUCB2YWx1ZSBvdmVyIGEgYmV0 dGVyIChzbWFsbGVyKSBlcnJvciBpZiB0aGUgZXJyb3IKKwkgKiBpcyBzbWFsbC4gRW5zdXJlIHRo aXMgcHJlZmVyZW5jZSBmb3IgZnV0dXJlIGNvbmZpZ3VyYXRpb25zIHRvbyBieQorCSAqIHNldHRp bmcgdGhlIGVycm9yIHRvIDAuCisJICovCisJaWYgKCplcnJvcl9wcG0gPCAxMDAgJiYgY2FsY3Vs YXRlZF9jbG9jay0+cCA+IGJlc3RfY2xvY2stPnApIHsKKwkJKmVycm9yX3BwbSA9IDA7CisKKwkJ cmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuICplcnJvcl9wcG0gKyAxMCA8IGJlc3RfZXJyb3Jf cHBtOworfQorCisvKgorICogUmV0dXJucyBhIHNldCBvZiBkaXZpc29ycyBmb3IgdGhlIGRlc2ly ZWQgdGFyZ2V0IGNsb2NrIHdpdGggdGhlIGdpdmVuCisgKiByZWZjbGssIG9yIEZBTFNFLiAgVGhl IHJldHVybmVkIHZhbHVlcyByZXByZXNlbnQgdGhlIGNsb2NrIGVxdWF0aW9uOgorICogcmVmbGNr ICogKDUgKiAobTEgKyAyKSArIChtMiArIDIpKSAvIChuICsgMikgLyBwMSAvIHAyLgorICovCitz dGF0aWMgYm9vbAordmx2X2ZpbmRfYmVzdF9kcGxsKGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCAq bGltaXQsCisJCSAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkgICBp bnQgdGFyZ2V0LCBpbnQgcmVmY2xrLCBzdHJ1Y3QgZHBsbCAqbWF0Y2hfY2xvY2ssCisJCSAgIHN0 cnVjdCBkcGxsICpiZXN0X2Nsb2NrKQoreworCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9f aW50ZWxfY3J0YyhjcnRjX3N0YXRlLT51YXBpLmNydGMpOworCXN0cnVjdCBkcm1fZGV2aWNlICpk ZXYgPSBjcnRjLT5iYXNlLmRldjsKKwlzdHJ1Y3QgZHBsbCBjbG9jazsKKwl1bnNpZ25lZCBpbnQg YmVzdHBwbSA9IDEwMDAwMDA7CisJLyogbWluIHVwZGF0ZSAxOS4yIE1IeiAqLworCWludCBtYXhf biA9IG1pbihsaW1pdC0+bi5tYXgsIHJlZmNsayAvIDE5MjAwKTsKKwlib29sIGZvdW5kID0gZmFs c2U7CisKKwl0YXJnZXQgKj0gNTsgLyogZmFzdCBjbG9jayAqLworCisJbWVtc2V0KGJlc3RfY2xv Y2ssIDAsIHNpemVvZigqYmVzdF9jbG9jaykpOworCisJLyogYmFzZWQgb24gaGFyZHdhcmUgcmVx dWlyZW1lbnQsIHByZWZlciBzbWFsbGVyIG4gdG8gcHJlY2lzaW9uICovCisJZm9yIChjbG9jay5u ID0gbGltaXQtPm4ubWluOyBjbG9jay5uIDw9IG1heF9uOyBjbG9jay5uKyspIHsKKwkJZm9yIChj bG9jay5wMSA9IGxpbWl0LT5wMS5tYXg7IGNsb2NrLnAxID49IGxpbWl0LT5wMS5taW47IGNsb2Nr LnAxLS0pIHsKKwkJCWZvciAoY2xvY2sucDIgPSBsaW1pdC0+cDIucDJfZmFzdDsgY2xvY2sucDIg Pj0gbGltaXQtPnAyLnAyX3Nsb3c7CisJCQkgICAgIGNsb2NrLnAyIC09IGNsb2NrLnAyID4gMTAg PyAyIDogMSkgeworCQkJCWNsb2NrLnAgPSBjbG9jay5wMSAqIGNsb2NrLnAyOworCQkJCS8qIGJh c2VkIG9uIGhhcmR3YXJlIHJlcXVpcmVtZW50LCBwcmVmZXIgYmlnZ2VyIG0xLG0yIHZhbHVlcyAq LworCQkJCWZvciAoY2xvY2subTEgPSBsaW1pdC0+bTEubWluOyBjbG9jay5tMSA8PSBsaW1pdC0+ bTEubWF4OyBjbG9jay5tMSsrKSB7CisJCQkJCXVuc2lnbmVkIGludCBwcG07CisKKwkJCQkJY2xv Y2subTIgPSBESVZfUk9VTkRfQ0xPU0VTVCh0YXJnZXQgKiBjbG9jay5wICogY2xvY2subiwKKwkJ CQkJCQkJICAgICByZWZjbGsgKiBjbG9jay5tMSk7CisKKwkJCQkJdmx2X2NhbGNfZHBsbF9wYXJh bXMocmVmY2xrLCAmY2xvY2spOworCisJCQkJCWlmICghaW50ZWxfcGxsX2lzX3ZhbGlkKHRvX2k5 MTUoZGV2KSwKKwkJCQkJCQkJbGltaXQsCisJCQkJCQkJCSZjbG9jaykpCisJCQkJCQljb250aW51 ZTsKKworCQkJCQlpZiAoIXZsdl9QTExfaXNfb3B0aW1hbChkZXYsIHRhcmdldCwKKwkJCQkJCQkJ JmNsb2NrLAorCQkJCQkJCQliZXN0X2Nsb2NrLAorCQkJCQkJCQliZXN0cHBtLCAmcHBtKSkKKwkJ CQkJCWNvbnRpbnVlOworCisJCQkJCSpiZXN0X2Nsb2NrID0gY2xvY2s7CisJCQkJCWJlc3RwcG0g PSBwcG07CisJCQkJCWZvdW5kID0gdHJ1ZTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlyZXR1 cm4gZm91bmQ7Cit9CisKKy8qCisgKiBSZXR1cm5zIGEgc2V0IG9mIGRpdmlzb3JzIGZvciB0aGUg ZGVzaXJlZCB0YXJnZXQgY2xvY2sgd2l0aCB0aGUgZ2l2ZW4KKyAqIHJlZmNsaywgb3IgRkFMU0Uu ICBUaGUgcmV0dXJuZWQgdmFsdWVzIHJlcHJlc2VudCB0aGUgY2xvY2sgZXF1YXRpb246CisgKiBy ZWZsY2sgKiAoNSAqIChtMSArIDIpICsgKG0yICsgMikpIC8gKG4gKyAyKSAvIHAxIC8gcDIuCisg Ki8KK3N0YXRpYyBib29sCitjaHZfZmluZF9iZXN0X2RwbGwoY29uc3Qgc3RydWN0IGludGVsX2xp bWl0ICpsaW1pdCwKKwkJICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJ CSAgIGludCB0YXJnZXQsIGludCByZWZjbGssIHN0cnVjdCBkcGxsICptYXRjaF9jbG9jaywKKwkJ ICAgc3RydWN0IGRwbGwgKmJlc3RfY2xvY2spCit7CisJc3RydWN0IGludGVsX2NydGMgKmNydGMg PSB0b19pbnRlbF9jcnRjKGNydGNfc3RhdGUtPnVhcGkuY3J0Yyk7CisJc3RydWN0IGRybV9kZXZp Y2UgKmRldiA9IGNydGMtPmJhc2UuZGV2OworCXVuc2lnbmVkIGludCBiZXN0X2Vycm9yX3BwbTsK KwlzdHJ1Y3QgZHBsbCBjbG9jazsKKwl1NjQgbTI7CisJaW50IGZvdW5kID0gZmFsc2U7CisKKwlt ZW1zZXQoYmVzdF9jbG9jaywgMCwgc2l6ZW9mKCpiZXN0X2Nsb2NrKSk7CisJYmVzdF9lcnJvcl9w cG0gPSAxMDAwMDAwOworCisJLyoKKwkgKiBCYXNlZCBvbiBoYXJkd2FyZSBkb2MsIHRoZSBuIGFs d2F5cyBzZXQgdG8gMSwgYW5kIG0xIGFsd2F5cworCSAqIHNldCB0byAyLiAgSWYgcmVxdWlyZXMg dG8gc3VwcG9ydCAyMDBNaHogcmVmY2xrLCB3ZSBuZWVkIHRvCisJICogcmV2aXNpdCB0aGlzIGJl Y2F1c2UgbiBtYXkgbm90IDEgYW55bW9yZS4KKwkgKi8KKwljbG9jay5uID0gMTsKKwljbG9jay5t MSA9IDI7CisJdGFyZ2V0ICo9IDU7CS8qIGZhc3QgY2xvY2sgKi8KKworCWZvciAoY2xvY2sucDEg PSBsaW1pdC0+cDEubWF4OyBjbG9jay5wMSA+PSBsaW1pdC0+cDEubWluOyBjbG9jay5wMS0tKSB7 CisJCWZvciAoY2xvY2sucDIgPSBsaW1pdC0+cDIucDJfZmFzdDsKKwkJCQljbG9jay5wMiA+PSBs aW1pdC0+cDIucDJfc2xvdzsKKwkJCQljbG9jay5wMiAtPSBjbG9jay5wMiA+IDEwID8gMiA6IDEp IHsKKwkJCXVuc2lnbmVkIGludCBlcnJvcl9wcG07CisKKwkJCWNsb2NrLnAgPSBjbG9jay5wMSAq IGNsb2NrLnAyOworCisJCQltMiA9IERJVl9ST1VORF9DTE9TRVNUX1VMTChtdWxfdTMyX3UzMih0 YXJnZXQsIGNsb2NrLnAgKiBjbG9jay5uKSA8PCAyMiwKKwkJCQkJCSAgIHJlZmNsayAqIGNsb2Nr Lm0xKTsKKworCQkJaWYgKG0yID4gSU5UX01BWC9jbG9jay5tMSkKKwkJCQljb250aW51ZTsKKwor CQkJY2xvY2subTIgPSBtMjsKKworCQkJY2h2X2NhbGNfZHBsbF9wYXJhbXMocmVmY2xrLCAmY2xv Y2spOworCisJCQlpZiAoIWludGVsX3BsbF9pc192YWxpZCh0b19pOTE1KGRldiksIGxpbWl0LCAm Y2xvY2spKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAoIXZsdl9QTExfaXNfb3B0aW1hbChkZXYs IHRhcmdldCwgJmNsb2NrLCBiZXN0X2Nsb2NrLAorCQkJCQkJYmVzdF9lcnJvcl9wcG0sICZlcnJv cl9wcG0pKQorCQkJCWNvbnRpbnVlOworCisJCQkqYmVzdF9jbG9jayA9IGNsb2NrOworCQkJYmVz dF9lcnJvcl9wcG0gPSBlcnJvcl9wcG07CisJCQlmb3VuZCA9IHRydWU7CisJCX0KKwl9CisKKwly ZXR1cm4gZm91bmQ7Cit9CisKK2Jvb2wgYnh0X2ZpbmRfYmVzdF9kcGxsKHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkJc3RydWN0IGRwbGwgKmJlc3RfY2xvY2spCit7CisJ aW50IHJlZmNsayA9IDEwMDAwMDsKKwljb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgKmxpbWl0ID0g JmludGVsX2xpbWl0c19ieHQ7CisKKwlyZXR1cm4gY2h2X2ZpbmRfYmVzdF9kcGxsKGxpbWl0LCBj cnRjX3N0YXRlLAorCQkJCSAgY3J0Y19zdGF0ZS0+cG9ydF9jbG9jaywgcmVmY2xrLAorCQkJCSAg TlVMTCwgYmVzdF9jbG9jayk7Cit9CisKK3N0YXRpYyB1MzIgcG52X2RwbGxfY29tcHV0ZV9mcChz dHJ1Y3QgZHBsbCAqZHBsbCkKK3sKKwlyZXR1cm4gKDEgPDwgZHBsbC0+bikgPDwgMTYgfCBkcGxs LT5tMjsKK30KKworc3RhdGljIHZvaWQgaTl4eF91cGRhdGVfcGxsX2RpdmlkZXJzKHN0cnVjdCBp bnRlbF9jcnRjICpjcnRjLAorCQkJCSAgICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNf c3RhdGUsCisJCQkJICAgICBzdHJ1Y3QgZHBsbCAqcmVkdWNlZF9jbG9jaykKK3sKKwlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGMtPmJhc2UuZGV2KTsKKwl1 MzIgZnAsIGZwMiA9IDA7CisKKwlpZiAoSVNfUElORVZJRVcoZGV2X3ByaXYpKSB7CisJCWZwID0g cG52X2RwbGxfY29tcHV0ZV9mcCgmY3J0Y19zdGF0ZS0+ZHBsbCk7CisJCWlmIChyZWR1Y2VkX2Ns b2NrKQorCQkJZnAyID0gcG52X2RwbGxfY29tcHV0ZV9mcChyZWR1Y2VkX2Nsb2NrKTsKKwl9IGVs c2UgeworCQlmcCA9IGk5eHhfZHBsbF9jb21wdXRlX2ZwKCZjcnRjX3N0YXRlLT5kcGxsKTsKKwkJ aWYgKHJlZHVjZWRfY2xvY2spCisJCQlmcDIgPSBpOXh4X2RwbGxfY29tcHV0ZV9mcChyZWR1Y2Vk X2Nsb2NrKTsKKwl9CisKKwljcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlLmZwMCA9IGZwOworCisJ aWYgKGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX0xWRFMpICYm CisJICAgIHJlZHVjZWRfY2xvY2spIHsKKwkJY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZS5mcDEg PSBmcDI7CisJfSBlbHNlIHsKKwkJY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZS5mcDEgPSBmcDsK Kwl9Cit9CisKK3N0YXRpYyB2b2lkIGk5eHhfY29tcHV0ZV9kcGxsKHN0cnVjdCBpbnRlbF9jcnRj ICpjcnRjLAorCQkJICAgICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJ CQkgICAgICBzdHJ1Y3QgZHBsbCAqcmVkdWNlZF9jbG9jaykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGMtPmJhc2UuZGV2KTsKKwl1MzIgZHBsbDsK KwlzdHJ1Y3QgZHBsbCAqY2xvY2sgPSAmY3J0Y19zdGF0ZS0+ZHBsbDsKKworCWk5eHhfdXBkYXRl X3BsbF9kaXZpZGVycyhjcnRjLCBjcnRjX3N0YXRlLCByZWR1Y2VkX2Nsb2NrKTsKKworCWRwbGwg PSBEUExMX1ZHQV9NT0RFX0RJUzsKKworCWlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3Rh dGUsIElOVEVMX09VVFBVVF9MVkRTKSkKKwkJZHBsbCB8PSBEUExMQl9NT0RFX0xWRFM7CisJZWxz ZQorCQlkcGxsIHw9IERQTExCX01PREVfREFDX1NFUklBTDsKKworCWlmIChJU19JOTQ1RyhkZXZf cHJpdikgfHwgSVNfSTk0NUdNKGRldl9wcml2KSB8fAorCSAgICBJU19HMzMoZGV2X3ByaXYpIHx8 IElTX1BJTkVWSUVXKGRldl9wcml2KSkgeworCQlkcGxsIHw9IChjcnRjX3N0YXRlLT5waXhlbF9t dWx0aXBsaWVyIC0gMSkKKwkJCTw8IFNEVk9fTVVMVElQTElFUl9TSElGVF9ISVJFUzsKKwl9CisK KwlpZiAoaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfU0RWTykg fHwKKwkgICAgaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfSERN SSkpCisJCWRwbGwgfD0gRFBMTF9TRFZPX0hJR0hfU1BFRUQ7CisKKwlpZiAoaW50ZWxfY3J0Y19o YXNfZHBfZW5jb2RlcihjcnRjX3N0YXRlKSkKKwkJZHBsbCB8PSBEUExMX1NEVk9fSElHSF9TUEVF RDsKKworCS8qIGNvbXB1dGUgYml0bWFzayBmcm9tIHAxIHZhbHVlICovCisJaWYgKElTX1BJTkVW SUVXKGRldl9wcml2KSkKKwkJZHBsbCB8PSAoMSA8PCAoY2xvY2stPnAxIC0gMSkpIDw8IERQTExf RlBBMDFfUDFfUE9TVF9ESVZfU0hJRlRfUElORVZJRVc7CisJZWxzZSB7CisJCWRwbGwgfD0gKDEg PDwgKGNsb2NrLT5wMSAtIDEpKSA8PCBEUExMX0ZQQTAxX1AxX1BPU1RfRElWX1NISUZUOworCQlp ZiAoSVNfRzRYKGRldl9wcml2KSAmJiByZWR1Y2VkX2Nsb2NrKQorCQkJZHBsbCB8PSAoMSA8PCAo cmVkdWNlZF9jbG9jay0+cDEgLSAxKSkgPDwgRFBMTF9GUEExX1AxX1BPU1RfRElWX1NISUZUOwor CX0KKwlzd2l0Y2ggKGNsb2NrLT5wMikgeworCWNhc2UgNToKKwkJZHBsbCB8PSBEUExMX0RBQ19T RVJJQUxfUDJfQ0xPQ0tfRElWXzU7CisJCWJyZWFrOworCWNhc2UgNzoKKwkJZHBsbCB8PSBEUExM Ql9MVkRTX1AyX0NMT0NLX0RJVl83OworCQlicmVhazsKKwljYXNlIDEwOgorCQlkcGxsIHw9IERQ TExfREFDX1NFUklBTF9QMl9DTE9DS19ESVZfMTA7CisJCWJyZWFrOworCWNhc2UgMTQ6CisJCWRw bGwgfD0gRFBMTEJfTFZEU19QMl9DTE9DS19ESVZfMTQ7CisJCWJyZWFrOworCX0KKwlpZiAoSU5U RUxfR0VOKGRldl9wcml2KSA+PSA0KQorCQlkcGxsIHw9ICg2IDw8IFBMTF9MT0FEX1BVTFNFX1BI QVNFX1NISUZUKTsKKworCWlmIChjcnRjX3N0YXRlLT5zZHZvX3R2X2Nsb2NrKQorCQlkcGxsIHw9 IFBMTF9SRUZfSU5QVVRfVFZDTEtJTkJDOworCWVsc2UgaWYgKGludGVsX2NydGNfaGFzX3R5cGUo Y3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX0xWRFMpICYmCisJCSBpbnRlbF9wYW5lbF91c2Vfc3Nj KGRldl9wcml2KSkKKwkJZHBsbCB8PSBQTExCX1JFRl9JTlBVVF9TUFJFQURTUEVDVFJVTUlOOwor CWVsc2UKKwkJZHBsbCB8PSBQTExfUkVGX0lOUFVUX0RSRUZDTEs7CisKKwlkcGxsIHw9IERQTExf VkNPX0VOQUJMRTsKKwljcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlLmRwbGwgPSBkcGxsOworCisJ aWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNCkgeworCQl1MzIgZHBsbF9tZCA9IChjcnRjX3N0 YXRlLT5waXhlbF9tdWx0aXBsaWVyIC0gMSkKKwkJCTw8IERQTExfTURfVURJX01VTFRJUExJRVJf U0hJRlQ7CisJCWNydGNfc3RhdGUtPmRwbGxfaHdfc3RhdGUuZHBsbF9tZCA9IGRwbGxfbWQ7CisJ fQorfQorCitzdGF0aWMgdm9pZCBpOHh4X2NvbXB1dGVfZHBsbChzdHJ1Y3QgaW50ZWxfY3J0YyAq Y3J0YywKKwkJCSAgICAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkJ ICAgICAgc3RydWN0IGRwbGwgKnJlZHVjZWRfY2xvY2spCit7CisJc3RydWN0IGRybV9kZXZpY2Ug KmRldiA9IGNydGMtPmJhc2UuZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IHRvX2k5MTUoZGV2KTsKKwl1MzIgZHBsbDsKKwlzdHJ1Y3QgZHBsbCAqY2xvY2sgPSAmY3J0 Y19zdGF0ZS0+ZHBsbDsKKworCWk5eHhfdXBkYXRlX3BsbF9kaXZpZGVycyhjcnRjLCBjcnRjX3N0 YXRlLCByZWR1Y2VkX2Nsb2NrKTsKKworCWRwbGwgPSBEUExMX1ZHQV9NT0RFX0RJUzsKKworCWlm IChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9MVkRTKSkgewor CQlkcGxsIHw9ICgxIDw8IChjbG9jay0+cDEgLSAxKSkgPDwgRFBMTF9GUEEwMV9QMV9QT1NUX0RJ Vl9TSElGVDsKKwl9IGVsc2UgeworCQlpZiAoY2xvY2stPnAxID09IDIpCisJCQlkcGxsIHw9IFBM TF9QMV9ESVZJREVfQllfVFdPOworCQllbHNlCisJCQlkcGxsIHw9IChjbG9jay0+cDEgLSAyKSA8 PCBEUExMX0ZQQTAxX1AxX1BPU1RfRElWX1NISUZUOworCQlpZiAoY2xvY2stPnAyID09IDQpCisJ CQlkcGxsIHw9IFBMTF9QMl9ESVZJREVfQllfNDsKKwl9CisKKwkvKgorCSAqIEJzcGVjOgorCSAq ICJbQWxtYWRvciBFcnJhdGF9OiBGb3IgdGhlIGNvcnJlY3Qgb3BlcmF0aW9uIG9mIHRoZSBtdXhl ZCBEVk8gcGlucworCSAqICAoR0RFVlNFTEIvSTJDZGF0YSwgR0lSREJZL0kyQ0NsaykgYW5kIChH RlJBTUVCL0RWSV9EYXRhLAorCSAqICBHVFJEWUIvRFZJX0Nsayk6IEJpdCAzMSAoRFBMTCBWQ08g RW5hYmxlKSBhbmQgQml0IDMwICgyWCBDbG9jaworCSAqICBFbmFibGUpIG11c3QgYmUgc2V0IHRv IOKAnDHigJ0gaW4gYm90aCB0aGUgRFBMTCBBIENvbnRyb2wgUmVnaXN0ZXIKKwkgKiAgKDA2MDE0 aC0wNjAxN2gpIGFuZCBEUExMIEIgQ29udHJvbCBSZWdpc3RlciAoMDYwMThoLTA2MDFCaCkuIgor CSAqCisJICogRm9yIHNpbXBsaWNpdHkgV2Ugc2ltcGx5IGtlZXAgYm90aCBiaXRzIGFsd2F5cyBl bmFibGVkIGluCisJICogYm90aCBEUExMUy4gVGhlIHNwZWMgc2F5cyB3ZSBzaG91bGQgZGlzYWJs ZSB0aGUgRFZPIDJYIGNsb2NrCisJICogd2hlbiBub3QgbmVlZGVkLCBidXQgdGhpcyBzZWVtcyB0 byB3b3JrIGZpbmUgaW4gcHJhY3RpY2UuCisJICovCisJaWYgKElTX0k4MzAoZGV2X3ByaXYpIHx8 CisJICAgIGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX0RWTykp CisJCWRwbGwgfD0gRFBMTF9EVk9fMlhfTU9ERTsKKworCWlmIChpbnRlbF9jcnRjX2hhc190eXBl KGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9MVkRTKSAmJgorCSAgICBpbnRlbF9wYW5lbF91c2Vf c3NjKGRldl9wcml2KSkKKwkJZHBsbCB8PSBQTExCX1JFRl9JTlBVVF9TUFJFQURTUEVDVFJVTUlO OworCWVsc2UKKwkJZHBsbCB8PSBQTExfUkVGX0lOUFVUX0RSRUZDTEs7CisKKwlkcGxsIHw9IERQ TExfVkNPX0VOQUJMRTsKKwljcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlLmRwbGwgPSBkcGxsOwor fQorCitzdGF0aWMgaW50IGhzd19jcnRjX2NvbXB1dGVfY2xvY2soc3RydWN0IGludGVsX2NydGMg KmNydGMsCisJCQkJICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKK3sKKwlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGMtPmJhc2UuZGV2 KTsKKwlzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSA9CisJCXRvX2ludGVsX2F0b21p Y19zdGF0ZShjcnRjX3N0YXRlLT51YXBpLnN0YXRlKTsKKworCWlmICghaW50ZWxfY3J0Y19oYXNf dHlwZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfRFNJKSB8fAorCSAgICBJTlRFTF9HRU4oZGV2 X3ByaXYpID49IDExKSB7CisJCXN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyID0KKwkJCWlu dGVsX2dldF9jcnRjX25ld19lbmNvZGVyKHN0YXRlLCBjcnRjX3N0YXRlKTsKKworCQlpZiAoIWlu dGVsX3Jlc2VydmVfc2hhcmVkX2RwbGxzKHN0YXRlLCBjcnRjLCBlbmNvZGVyKSkgeworCQkJZHJt X2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCisJCQkJICAgICJmYWlsZWQgdG8gZmluZCBQTEwgZm9y IHBpcGUgJWNcbiIsCisJCQkJICAgIHBpcGVfbmFtZShjcnRjLT5waXBlKSk7CisJCQlyZXR1cm4g LUVJTlZBTDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgYm9vbCBpbGtfbmVl ZHNfZmJfY2JfdHVuZShzdHJ1Y3QgZHBsbCAqZHBsbCwgaW50IGZhY3RvcikKK3sKKwlyZXR1cm4g aTl4eF9kcGxsX2NvbXB1dGVfbShkcGxsKSA8IGZhY3RvciAqIGRwbGwtPm47Cit9CisKKworc3Rh dGljIHZvaWQgaWxrX2NvbXB1dGVfZHBsbChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKKwkJCSAg ICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCQkgICAgIHN0cnVjdCBk cGxsICpyZWR1Y2VkX2Nsb2NrKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IHRvX2k5MTUoY3J0Yy0+YmFzZS5kZXYpOworCXUzMiBkcGxsLCBmcCwgZnAyOworCWludCBm YWN0b3I7CisKKwkvKiBFbmFibGUgYXV0b3R1bmluZyBvZiB0aGUgUExMIGNsb2NrIChpZiBwZXJt aXNzaWJsZSkgKi8KKwlmYWN0b3IgPSAyMTsKKwlpZiAoaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRj X3N0YXRlLCBJTlRFTF9PVVRQVVRfTFZEUykpIHsKKwkJaWYgKChpbnRlbF9wYW5lbF91c2Vfc3Nj KGRldl9wcml2KSAmJgorCQkgICAgIGRldl9wcml2LT52YnQubHZkc19zc2NfZnJlcSA9PSAxMDAw MDApIHx8CisJCSAgICAoSEFTX1BDSF9JQlgoZGV2X3ByaXYpICYmCisJCSAgICAgaW50ZWxfaXNf ZHVhbF9saW5rX2x2ZHMoZGV2X3ByaXYpKSkKKwkJCWZhY3RvciA9IDI1OworCX0gZWxzZSBpZiAo Y3J0Y19zdGF0ZS0+c2R2b190dl9jbG9jaykgeworCQlmYWN0b3IgPSAyMDsKKwl9CisKKwlmcCA9 IGk5eHhfZHBsbF9jb21wdXRlX2ZwKCZjcnRjX3N0YXRlLT5kcGxsKTsKKworCWlmIChpbGtfbmVl ZHNfZmJfY2JfdHVuZSgmY3J0Y19zdGF0ZS0+ZHBsbCwgZmFjdG9yKSkKKwkJZnAgfD0gRlBfQ0Jf VFVORTsKKworCWlmIChyZWR1Y2VkX2Nsb2NrKSB7CisJCWZwMiA9IGk5eHhfZHBsbF9jb21wdXRl X2ZwKHJlZHVjZWRfY2xvY2spOworCisJCWlmIChyZWR1Y2VkX2Nsb2NrLT5tIDwgZmFjdG9yICog cmVkdWNlZF9jbG9jay0+bikKKwkJCWZwMiB8PSBGUF9DQl9UVU5FOworCX0gZWxzZSB7CisJCWZw MiA9IGZwOworCX0KKworCWRwbGwgPSAwOworCisJaWYgKGludGVsX2NydGNfaGFzX3R5cGUoY3J0 Y19zdGF0ZSwgSU5URUxfT1VUUFVUX0xWRFMpKQorCQlkcGxsIHw9IERQTExCX01PREVfTFZEUzsK KwllbHNlCisJCWRwbGwgfD0gRFBMTEJfTU9ERV9EQUNfU0VSSUFMOworCisJZHBsbCB8PSAoY3J0 Y19zdGF0ZS0+cGl4ZWxfbXVsdGlwbGllciAtIDEpCisJCTw8IFBMTF9SRUZfU0RWT19IRE1JX01V TFRJUExJRVJfU0hJRlQ7CisKKwlpZiAoaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjX3N0YXRlLCBJ TlRFTF9PVVRQVVRfU0RWTykgfHwKKwkgICAgaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjX3N0YXRl LCBJTlRFTF9PVVRQVVRfSERNSSkpCisJCWRwbGwgfD0gRFBMTF9TRFZPX0hJR0hfU1BFRUQ7CisK KwlpZiAoaW50ZWxfY3J0Y19oYXNfZHBfZW5jb2RlcihjcnRjX3N0YXRlKSkKKwkJZHBsbCB8PSBE UExMX1NEVk9fSElHSF9TUEVFRDsKKworCS8qCisJICogVGhlIGhpZ2ggc3BlZWQgSU8gY2xvY2sg aXMgb25seSByZWFsbHkgcmVxdWlyZWQgZm9yCisJICogU0RWTy9IRE1JL0RQLCBidXQgd2UgYWxz byBlbmFibGUgaXQgZm9yIENSVCB0byBtYWtlIGl0CisJICogcG9zc2libGUgdG8gc2hhcmUgdGhl IERQTEwgYmV0d2VlbiBDUlQgYW5kIEhETUkuIEVuYWJsaW5nCisJICogdGhlIGNsb2NrIG5lZWRs ZXNzbHkgZG9lcyBubyByZWFsIGhhcm0sIGV4Y2VwdCB1c2UgdXAgYQorCSAqIGJpdCBvZiBwb3dl ciBwb3RlbnRpYWxseS4KKwkgKgorCSAqIFdlJ2xsIGxpbWl0IHRoaXMgdG8gSVZCIHdpdGggMyBw aXBlcywgc2luY2UgaXQgaGFzIG9ubHkgdHdvCisJICogRFBMTHMgYW5kIHNvIERQTEwgc2hhcmlu ZyBpcyB0aGUgb25seSB3YXkgdG8gZ2V0IHRocmVlIHBpcGVzCisJICogZHJpdmluZyBQQ0ggcG9y dHMgYXQgdGhlIHNhbWUgdGltZS4gT24gU05CIHdlIGNvdWxkIGRvIHRoaXMsCisJICogYW5kIHBv dGVudGlhbGx5IGF2b2lkIGVuYWJsaW5nIHRoZSBzZWNvbmQgRFBMTCwgYnV0IGl0J3Mgbm90CisJ ICogY2xlYXIgaWYgaXQnJ3MgYSB3aW4gb3IgbG9zcyBwb3dlciB3aXNlLiBObyBwb2ludCBpbiBk b2luZworCSAqIHRoaXMgb24gSUxLIGF0IGFsbCBzaW5jZSBpdCBoYXMgYSBmaXhlZCBEUExMPC0+ cGlwZSBtYXBwaW5nLgorCSAqLworCWlmIChJTlRFTF9OVU1fUElQRVMoZGV2X3ByaXYpID09IDMg JiYKKwkgICAgaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfQU5B TE9HKSkKKwkJZHBsbCB8PSBEUExMX1NEVk9fSElHSF9TUEVFRDsKKworCS8qIGNvbXB1dGUgYml0 bWFzayBmcm9tIHAxIHZhbHVlICovCisJZHBsbCB8PSAoMSA8PCAoY3J0Y19zdGF0ZS0+ZHBsbC5w MSAtIDEpKSA8PCBEUExMX0ZQQTAxX1AxX1BPU1RfRElWX1NISUZUOworCS8qIGFsc28gRlBBMSAq LworCWRwbGwgfD0gKDEgPDwgKGNydGNfc3RhdGUtPmRwbGwucDEgLSAxKSkgPDwgRFBMTF9GUEEx X1AxX1BPU1RfRElWX1NISUZUOworCisJc3dpdGNoIChjcnRjX3N0YXRlLT5kcGxsLnAyKSB7CisJ Y2FzZSA1OgorCQlkcGxsIHw9IERQTExfREFDX1NFUklBTF9QMl9DTE9DS19ESVZfNTsKKwkJYnJl YWs7CisJY2FzZSA3OgorCQlkcGxsIHw9IERQTExCX0xWRFNfUDJfQ0xPQ0tfRElWXzc7CisJCWJy ZWFrOworCWNhc2UgMTA6CisJCWRwbGwgfD0gRFBMTF9EQUNfU0VSSUFMX1AyX0NMT0NLX0RJVl8x MDsKKwkJYnJlYWs7CisJY2FzZSAxNDoKKwkJZHBsbCB8PSBEUExMQl9MVkRTX1AyX0NMT0NLX0RJ Vl8xNDsKKwkJYnJlYWs7CisJfQorCisJaWYgKGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0 ZSwgSU5URUxfT1VUUFVUX0xWRFMpICYmCisJICAgIGludGVsX3BhbmVsX3VzZV9zc2MoZGV2X3By aXYpKQorCQlkcGxsIHw9IFBMTEJfUkVGX0lOUFVUX1NQUkVBRFNQRUNUUlVNSU47CisJZWxzZQor CQlkcGxsIHw9IFBMTF9SRUZfSU5QVVRfRFJFRkNMSzsKKworCWRwbGwgfD0gRFBMTF9WQ09fRU5B QkxFOworCisJY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZS5kcGxsID0gZHBsbDsKKwljcnRjX3N0 YXRlLT5kcGxsX2h3X3N0YXRlLmZwMCA9IGZwOworCWNydGNfc3RhdGUtPmRwbGxfaHdfc3RhdGUu ZnAxID0gZnAyOworfQorCitzdGF0aWMgaW50IGlsa19jcnRjX2NvbXB1dGVfY2xvY2soc3RydWN0 IGludGVsX2NydGMgKmNydGMsCisJCQkJICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19z dGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNy dGMtPmJhc2UuZGV2KTsKKwlzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSA9CisJCXRv X2ludGVsX2F0b21pY19zdGF0ZShjcnRjX3N0YXRlLT51YXBpLnN0YXRlKTsKKwljb25zdCBzdHJ1 Y3QgaW50ZWxfbGltaXQgKmxpbWl0OworCWludCByZWZjbGsgPSAxMjAwMDA7CisKKwltZW1zZXQo JmNydGNfc3RhdGUtPmRwbGxfaHdfc3RhdGUsIDAsCisJICAgICAgIHNpemVvZihjcnRjX3N0YXRl LT5kcGxsX2h3X3N0YXRlKSk7CisKKwkvKiBDUFUgZURQIGlzIHRoZSBvbmx5IG91dHB1dCB0aGF0 IGRvZXNuJ3QgbmVlZCBhIFBDSCBQTEwgb2YgaXRzIG93bi4gKi8KKwlpZiAoIWNydGNfc3RhdGUt Pmhhc19wY2hfZW5jb2RlcikKKwkJcmV0dXJuIDA7CisKKwlpZiAoaW50ZWxfY3J0Y19oYXNfdHlw ZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfTFZEUykpIHsKKwkJaWYgKGludGVsX3BhbmVsX3Vz ZV9zc2MoZGV2X3ByaXYpKSB7CisJCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKKwkJCQkg ICAgInVzaW5nIFNTQyByZWZlcmVuY2UgY2xvY2sgb2YgJWQga0h6XG4iLAorCQkJCSAgICBkZXZf cHJpdi0+dmJ0Lmx2ZHNfc3NjX2ZyZXEpOworCQkJcmVmY2xrID0gZGV2X3ByaXYtPnZidC5sdmRz X3NzY19mcmVxOworCQl9CisKKwkJaWYgKGludGVsX2lzX2R1YWxfbGlua19sdmRzKGRldl9wcml2 KSkgeworCQkJaWYgKHJlZmNsayA9PSAxMDAwMDApCisJCQkJbGltaXQgPSAmaWxrX2xpbWl0c19k dWFsX2x2ZHNfMTAwbTsKKwkJCWVsc2UKKwkJCQlsaW1pdCA9ICZpbGtfbGltaXRzX2R1YWxfbHZk czsKKwkJfSBlbHNlIHsKKwkJCWlmIChyZWZjbGsgPT0gMTAwMDAwKQorCQkJCWxpbWl0ID0gJmls a19saW1pdHNfc2luZ2xlX2x2ZHNfMTAwbTsKKwkJCWVsc2UKKwkJCQlsaW1pdCA9ICZpbGtfbGlt aXRzX3NpbmdsZV9sdmRzOworCQl9CisJfSBlbHNlIHsKKwkJbGltaXQgPSAmaWxrX2xpbWl0c19k YWM7CisJfQorCisJaWYgKCFjcnRjX3N0YXRlLT5jbG9ja19zZXQgJiYKKwkgICAgIWc0eF9maW5k X2Jlc3RfZHBsbChsaW1pdCwgY3J0Y19zdGF0ZSwgY3J0Y19zdGF0ZS0+cG9ydF9jbG9jaywKKwkJ CQlyZWZjbGssIE5VTEwsICZjcnRjX3N0YXRlLT5kcGxsKSkgeworCQlkcm1fZXJyKCZkZXZfcHJp di0+ZHJtLAorCQkJIkNvdWxkbid0IGZpbmQgUExMIHNldHRpbmdzIGZvciBtb2RlIVxuIik7CisJ CXJldHVybiAtRUlOVkFMOworCX0KKworCWlsa19jb21wdXRlX2RwbGwoY3J0YywgY3J0Y19zdGF0 ZSwgTlVMTCk7CisKKwlpZiAoIWludGVsX3Jlc2VydmVfc2hhcmVkX2RwbGxzKHN0YXRlLCBjcnRj LCBOVUxMKSkgeworCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKKwkJCSAgICAiZmFpbGVk IHRvIGZpbmQgUExMIGZvciBwaXBlICVjXG4iLAorCQkJICAgIHBpcGVfbmFtZShjcnRjLT5waXBl KSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCit2b2lkIHZsdl9j b21wdXRlX2RwbGwoc3RydWN0IGludGVsX2NydGMgKmNydGMsCisJCSAgICAgIHN0cnVjdCBpbnRl bF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZykKK3sKKwlwaXBlX2NvbmZpZy0+ZHBsbF9od19zdGF0 ZS5kcGxsID0gRFBMTF9JTlRFR1JBVEVEX1JFRl9DTEtfVkxWIHwKKwkJRFBMTF9SRUZfQ0xLX0VO QUJMRV9WTFYgfCBEUExMX1ZHQV9NT0RFX0RJUzsKKwlpZiAoY3J0Yy0+cGlwZSAhPSBQSVBFX0Ep CisJCXBpcGVfY29uZmlnLT5kcGxsX2h3X3N0YXRlLmRwbGwgfD0gRFBMTF9JTlRFR1JBVEVEX0NS SV9DTEtfVkxWOworCisJLyogRFBMTCBub3QgdXNlZCB3aXRoIERTSSwgYnV0IHN0aWxsIG5lZWQg dGhlIHJlc3Qgc2V0IHVwICovCisJaWYgKCFpbnRlbF9jcnRjX2hhc190eXBlKHBpcGVfY29uZmln LCBJTlRFTF9PVVRQVVRfRFNJKSkKKwkJcGlwZV9jb25maWctPmRwbGxfaHdfc3RhdGUuZHBsbCB8 PSBEUExMX1ZDT19FTkFCTEUgfAorCQkJRFBMTF9FWFRfQlVGRkVSX0VOQUJMRV9WTFY7CisKKwlw aXBlX2NvbmZpZy0+ZHBsbF9od19zdGF0ZS5kcGxsX21kID0KKwkJKHBpcGVfY29uZmlnLT5waXhl bF9tdWx0aXBsaWVyIC0gMSkgPDwgRFBMTF9NRF9VRElfTVVMVElQTElFUl9TSElGVDsKK30KKwor dm9pZCBjaHZfY29tcHV0ZV9kcGxsKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAorCQkgICAgICBz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpCit7CisJcGlwZV9jb25maWctPmRw bGxfaHdfc3RhdGUuZHBsbCA9IERQTExfU1NDX1JFRl9DTEtfQ0hWIHwKKwkJRFBMTF9SRUZfQ0xL X0VOQUJMRV9WTFYgfCBEUExMX1ZHQV9NT0RFX0RJUzsKKwlpZiAoY3J0Yy0+cGlwZSAhPSBQSVBF X0EpCisJCXBpcGVfY29uZmlnLT5kcGxsX2h3X3N0YXRlLmRwbGwgfD0gRFBMTF9JTlRFR1JBVEVE X0NSSV9DTEtfVkxWOworCisJLyogRFBMTCBub3QgdXNlZCB3aXRoIERTSSwgYnV0IHN0aWxsIG5l ZWQgdGhlIHJlc3Qgc2V0IHVwICovCisJaWYgKCFpbnRlbF9jcnRjX2hhc190eXBlKHBpcGVfY29u ZmlnLCBJTlRFTF9PVVRQVVRfRFNJKSkKKwkJcGlwZV9jb25maWctPmRwbGxfaHdfc3RhdGUuZHBs bCB8PSBEUExMX1ZDT19FTkFCTEU7CisKKwlwaXBlX2NvbmZpZy0+ZHBsbF9od19zdGF0ZS5kcGxs X21kID0KKwkJKHBpcGVfY29uZmlnLT5waXhlbF9tdWx0aXBsaWVyIC0gMSkgPDwgRFBMTF9NRF9V RElfTVVMVElQTElFUl9TSElGVDsKK30KKworc3RhdGljIGludCBjaHZfY3J0Y19jb21wdXRlX2Ns b2NrKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAorCQkJCSAgc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKmNydGNfc3RhdGUpCit7CisJaW50IHJlZmNsayA9IDEwMDAwMDsKKwljb25zdCBzdHJ1Y3Qg aW50ZWxfbGltaXQgKmxpbWl0ID0gJmludGVsX2xpbWl0c19jaHY7CisJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KGNydGNfc3RhdGUtPnVhcGkuY3J0Yy0+ZGV2KTsKKwor CW1lbXNldCgmY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZSwgMCwKKwkgICAgICAgc2l6ZW9mKGNy dGNfc3RhdGUtPmRwbGxfaHdfc3RhdGUpKTsKKworCWlmICghY3J0Y19zdGF0ZS0+Y2xvY2tfc2V0 ICYmCisJICAgICFjaHZfZmluZF9iZXN0X2RwbGwobGltaXQsIGNydGNfc3RhdGUsIGNydGNfc3Rh dGUtPnBvcnRfY2xvY2ssCisJCQkJcmVmY2xrLCBOVUxMLCAmY3J0Y19zdGF0ZS0+ZHBsbCkpIHsK KwkJZHJtX2VycigmaTkxNS0+ZHJtLCAiQ291bGRuJ3QgZmluZCBQTEwgc2V0dGluZ3MgZm9yIG1v ZGUhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY2h2X2NvbXB1dGVfZHBsbChjcnRj LCBjcnRjX3N0YXRlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZsdl9jcnRjX2Nv bXB1dGVfY2xvY2soc3RydWN0IGludGVsX2NydGMgKmNydGMsCisJCQkJICBzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKK3sKKwlpbnQgcmVmY2xrID0gMTAwMDAwOworCWNvbnN0 IHN0cnVjdCBpbnRlbF9saW1pdCAqbGltaXQgPSAmaW50ZWxfbGltaXRzX3ZsdjsKKwlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUoY3J0Y19zdGF0ZS0+dWFwaS5jcnRjLT5k ZXYpOworCisJbWVtc2V0KCZjcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlLCAwLAorCSAgICAgICBz aXplb2YoY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZSkpOworCisJaWYgKCFjcnRjX3N0YXRlLT5j bG9ja19zZXQgJiYKKwkgICAgIXZsdl9maW5kX2Jlc3RfZHBsbChsaW1pdCwgY3J0Y19zdGF0ZSwg Y3J0Y19zdGF0ZS0+cG9ydF9jbG9jaywKKwkJCQlyZWZjbGssIE5VTEwsICZjcnRjX3N0YXRlLT5k cGxsKSkgeworCQlkcm1fZXJyKCZpOTE1LT5kcm0sICAiQ291bGRuJ3QgZmluZCBQTEwgc2V0dGlu Z3MgZm9yIG1vZGUhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdmx2X2NvbXB1dGVf ZHBsbChjcnRjLCBjcnRjX3N0YXRlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGc0 eF9jcnRjX2NvbXB1dGVfY2xvY2soc3RydWN0IGludGVsX2NydGMgKmNydGMsCisJCQkJICBzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGMtPmJhc2UuZGV2KTsKKwljb25zdCBzdHJ1Y3Qg aW50ZWxfbGltaXQgKmxpbWl0OworCWludCByZWZjbGsgPSA5NjAwMDsKKworCW1lbXNldCgmY3J0 Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZSwgMCwKKwkgICAgICAgc2l6ZW9mKGNydGNfc3RhdGUtPmRw bGxfaHdfc3RhdGUpKTsKKworCWlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElO VEVMX09VVFBVVF9MVkRTKSkgeworCQlpZiAoaW50ZWxfcGFuZWxfdXNlX3NzYyhkZXZfcHJpdikp IHsKKwkJCXJlZmNsayA9IGRldl9wcml2LT52YnQubHZkc19zc2NfZnJlcTsKKwkJCWRybV9kYmdf a21zKCZkZXZfcHJpdi0+ZHJtLAorCQkJCSAgICAidXNpbmcgU1NDIHJlZmVyZW5jZSBjbG9jayBv ZiAlZCBrSHpcbiIsCisJCQkJICAgIHJlZmNsayk7CisJCX0KKworCQlpZiAoaW50ZWxfaXNfZHVh bF9saW5rX2x2ZHMoZGV2X3ByaXYpKQorCQkJbGltaXQgPSAmaW50ZWxfbGltaXRzX2c0eF9kdWFs X2NoYW5uZWxfbHZkczsKKwkJZWxzZQorCQkJbGltaXQgPSAmaW50ZWxfbGltaXRzX2c0eF9zaW5n bGVfY2hhbm5lbF9sdmRzOworCX0gZWxzZSBpZiAoaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjX3N0 YXRlLCBJTlRFTF9PVVRQVVRfSERNSSkgfHwKKwkJICAgaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRj X3N0YXRlLCBJTlRFTF9PVVRQVVRfQU5BTE9HKSkgeworCQlsaW1pdCA9ICZpbnRlbF9saW1pdHNf ZzR4X2hkbWk7CisJfSBlbHNlIGlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElO VEVMX09VVFBVVF9TRFZPKSkgeworCQlsaW1pdCA9ICZpbnRlbF9saW1pdHNfZzR4X3Nkdm87CisJ fSBlbHNlIHsKKwkJLyogVGhlIG9wdGlvbiBpcyBmb3Igb3RoZXIgb3V0cHV0cyAqLworCQlsaW1p dCA9ICZpbnRlbF9saW1pdHNfaTl4eF9zZHZvOworCX0KKworCWlmICghY3J0Y19zdGF0ZS0+Y2xv Y2tfc2V0ICYmCisJICAgICFnNHhfZmluZF9iZXN0X2RwbGwobGltaXQsIGNydGNfc3RhdGUsIGNy dGNfc3RhdGUtPnBvcnRfY2xvY2ssCisJCQkJcmVmY2xrLCBOVUxMLCAmY3J0Y19zdGF0ZS0+ZHBs bCkpIHsKKwkJZHJtX2VycigmZGV2X3ByaXYtPmRybSwKKwkJCSJDb3VsZG4ndCBmaW5kIFBMTCBz ZXR0aW5ncyBmb3IgbW9kZSFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpOXh4X2Nv bXB1dGVfZHBsbChjcnRjLCBjcnRjX3N0YXRlLCBOVUxMKTsKKworCXJldHVybiAwOworfQorCitz dGF0aWMgaW50IHBudl9jcnRjX2NvbXB1dGVfY2xvY2soc3RydWN0IGludGVsX2NydGMgKmNydGMs CisJCQkJICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKK3sKKwlzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+YmFzZS5kZXY7CisJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOworCWNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCAq bGltaXQ7CisJaW50IHJlZmNsayA9IDk2MDAwOworCisJbWVtc2V0KCZjcnRjX3N0YXRlLT5kcGxs X2h3X3N0YXRlLCAwLAorCSAgICAgICBzaXplb2YoY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZSkp OworCisJaWYgKGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX0xW RFMpKSB7CisJCWlmIChpbnRlbF9wYW5lbF91c2Vfc3NjKGRldl9wcml2KSkgeworCQkJcmVmY2xr ID0gZGV2X3ByaXYtPnZidC5sdmRzX3NzY19mcmVxOworCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2 LT5kcm0sCisJCQkJICAgICJ1c2luZyBTU0MgcmVmZXJlbmNlIGNsb2NrIG9mICVkIGtIelxuIiwK KwkJCQkgICAgcmVmY2xrKTsKKwkJfQorCisJCWxpbWl0ID0gJnBudl9saW1pdHNfbHZkczsKKwl9 IGVsc2UgeworCQlsaW1pdCA9ICZwbnZfbGltaXRzX3Nkdm87CisJfQorCisJaWYgKCFjcnRjX3N0 YXRlLT5jbG9ja19zZXQgJiYKKwkgICAgIXBudl9maW5kX2Jlc3RfZHBsbChsaW1pdCwgY3J0Y19z dGF0ZSwgY3J0Y19zdGF0ZS0+cG9ydF9jbG9jaywKKwkJCQlyZWZjbGssIE5VTEwsICZjcnRjX3N0 YXRlLT5kcGxsKSkgeworCQlkcm1fZXJyKCZkZXZfcHJpdi0+ZHJtLAorCQkJIkNvdWxkbid0IGZp bmQgUExMIHNldHRpbmdzIGZvciBtb2RlIVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwor CWk5eHhfY29tcHV0ZV9kcGxsKGNydGMsIGNydGNfc3RhdGUsIE5VTEwpOworCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgaTl4eF9jcnRjX2NvbXB1dGVfY2xvY2soc3RydWN0IGludGVsX2Ny dGMgKmNydGMsCisJCQkJICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCit7 CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmJhc2UuZGV2OworCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKKwljb25zdCBzdHJ1Y3QgaW50 ZWxfbGltaXQgKmxpbWl0OworCWludCByZWZjbGsgPSA5NjAwMDsKKworCW1lbXNldCgmY3J0Y19z dGF0ZS0+ZHBsbF9od19zdGF0ZSwgMCwKKwkgICAgICAgc2l6ZW9mKGNydGNfc3RhdGUtPmRwbGxf aHdfc3RhdGUpKTsKKworCWlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVM X09VVFBVVF9MVkRTKSkgeworCQlpZiAoaW50ZWxfcGFuZWxfdXNlX3NzYyhkZXZfcHJpdikpIHsK KwkJCXJlZmNsayA9IGRldl9wcml2LT52YnQubHZkc19zc2NfZnJlcTsKKwkJCWRybV9kYmdfa21z KCZkZXZfcHJpdi0+ZHJtLAorCQkJCSAgICAidXNpbmcgU1NDIHJlZmVyZW5jZSBjbG9jayBvZiAl ZCBrSHpcbiIsCisJCQkJICAgIHJlZmNsayk7CisJCX0KKworCQlsaW1pdCA9ICZpbnRlbF9saW1p dHNfaTl4eF9sdmRzOworCX0gZWxzZSB7CisJCWxpbWl0ID0gJmludGVsX2xpbWl0c19pOXh4X3Nk dm87CisJfQorCisJaWYgKCFjcnRjX3N0YXRlLT5jbG9ja19zZXQgJiYKKwkgICAgIWk5eHhfZmlu ZF9iZXN0X2RwbGwobGltaXQsIGNydGNfc3RhdGUsIGNydGNfc3RhdGUtPnBvcnRfY2xvY2ssCisJ CQkJIHJlZmNsaywgTlVMTCwgJmNydGNfc3RhdGUtPmRwbGwpKSB7CisJCWRybV9lcnIoJmRldl9w cml2LT5kcm0sCisJCQkiQ291bGRuJ3QgZmluZCBQTEwgc2V0dGluZ3MgZm9yIG1vZGUhXG4iKTsK KwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaTl4eF9jb21wdXRlX2RwbGwoY3J0YywgY3J0Y19z dGF0ZSwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpOHh4X2NydGNfY29t cHV0ZV9jbG9jayhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKKwkJCQkgICBzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0 Yy0+YmFzZS5kZXY7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkx NShkZXYpOworCWNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCAqbGltaXQ7CisJaW50IHJlZmNsayA9 IDQ4MDAwOworCisJbWVtc2V0KCZjcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlLCAwLAorCSAgICAg ICBzaXplb2YoY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZSkpOworCisJaWYgKGludGVsX2NydGNf aGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX0xWRFMpKSB7CisJCWlmIChpbnRlbF9w YW5lbF91c2Vfc3NjKGRldl9wcml2KSkgeworCQkJcmVmY2xrID0gZGV2X3ByaXYtPnZidC5sdmRz X3NzY19mcmVxOworCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCisJCQkJICAgICJ1c2lu ZyBTU0MgcmVmZXJlbmNlIGNsb2NrIG9mICVkIGtIelxuIiwKKwkJCQkgICAgcmVmY2xrKTsKKwkJ fQorCisJCWxpbWl0ID0gJmludGVsX2xpbWl0c19pOHh4X2x2ZHM7CisJfSBlbHNlIGlmIChpbnRl bF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9EVk8pKSB7CisJCWxpbWl0 ID0gJmludGVsX2xpbWl0c19pOHh4X2R2bzsKKwl9IGVsc2UgeworCQlsaW1pdCA9ICZpbnRlbF9s aW1pdHNfaTh4eF9kYWM7CisJfQorCisJaWYgKCFjcnRjX3N0YXRlLT5jbG9ja19zZXQgJiYKKwkg ICAgIWk5eHhfZmluZF9iZXN0X2RwbGwobGltaXQsIGNydGNfc3RhdGUsIGNydGNfc3RhdGUtPnBv cnRfY2xvY2ssCisJCQkJIHJlZmNsaywgTlVMTCwgJmNydGNfc3RhdGUtPmRwbGwpKSB7CisJCWRy bV9lcnIoJmRldl9wcml2LT5kcm0sCisJCQkiQ291bGRuJ3QgZmluZCBQTEwgc2V0dGluZ3MgZm9y IG1vZGUhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaTh4eF9jb21wdXRlX2RwbGwo Y3J0YywgY3J0Y19zdGF0ZSwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZAoraW50ZWxf aW5pdF9jbG9ja19ob29rKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlp ZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA5IHx8IEhBU19EREkoZGV2X3ByaXYpKQorCQlkZXZf cHJpdi0+ZGlzcGxheS5jcnRjX2NvbXB1dGVfY2xvY2sgPSBoc3dfY3J0Y19jb21wdXRlX2Nsb2Nr OworCWVsc2UgaWYgKEhBU19QQ0hfU1BMSVQoZGV2X3ByaXYpKQorCQlkZXZfcHJpdi0+ZGlzcGxh eS5jcnRjX2NvbXB1dGVfY2xvY2sgPSBpbGtfY3J0Y19jb21wdXRlX2Nsb2NrOworCWVsc2UgaWYg KElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQorCQlkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2NvbXB1 dGVfY2xvY2sgPSBjaHZfY3J0Y19jb21wdXRlX2Nsb2NrOworCWVsc2UgaWYgKElTX1ZBTExFWVZJ RVcoZGV2X3ByaXYpKQorCQlkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2NvbXB1dGVfY2xvY2sgPSB2 bHZfY3J0Y19jb21wdXRlX2Nsb2NrOworCWVsc2UgaWYgKElTX0c0WChkZXZfcHJpdikpCisJCWRl dl9wcml2LT5kaXNwbGF5LmNydGNfY29tcHV0ZV9jbG9jayA9IGc0eF9jcnRjX2NvbXB1dGVfY2xv Y2s7CisJZWxzZSBpZiAoSVNfUElORVZJRVcoZGV2X3ByaXYpKQorCQlkZXZfcHJpdi0+ZGlzcGxh eS5jcnRjX2NvbXB1dGVfY2xvY2sgPSBwbnZfY3J0Y19jb21wdXRlX2Nsb2NrOworCWVsc2UgaWYg KCFJU19HRU4oZGV2X3ByaXYsIDIpKQorCQlkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2NvbXB1dGVf Y2xvY2sgPSBpOXh4X2NydGNfY29tcHV0ZV9jbG9jazsKKwllbHNlCisJCWRldl9wcml2LT5kaXNw bGF5LmNydGNfY29tcHV0ZV9jbG9jayA9IGk4eHhfY3J0Y19jb21wdXRlX2Nsb2NrOworfQpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYwppbmRleCBjNmYzMGU0 ZWM1MWUuLjc4OGIxZGVmNjFlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlz cGxheS9pbnRlbF9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9p bnRlbF9kaXNwbGF5LmMKQEAgLTExMywxNyArMTEzLDYgQEAgc3RhdGljIHZvaWQgaWxrX3BmaXRf ZW5hYmxlKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKTsKIHN0YXRp YyB2b2lkIGludGVsX21vZGVzZXRfc2V0dXBfaHdfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRl diwKIAkJCQkJIHN0cnVjdCBkcm1fbW9kZXNldF9hY3F1aXJlX2N0eCAqY3R4KTsKIAotc3RydWN0 IGludGVsX2xpbWl0IHsKLQlzdHJ1Y3QgewotCQlpbnQgbWluLCBtYXg7Ci0JfSBkb3QsIHZjbywg biwgbSwgbTEsIG0yLCBwLCBwMTsKLQotCXN0cnVjdCB7Ci0JCWludCBkb3RfbGltaXQ7Ci0JCWlu dCBwMl9zbG93LCBwMl9mYXN0OwotCX0gcDI7Ci19OwotCiAvKiByZXR1cm5zIEhQTEwgZnJlcXVl bmN5IGluIGtIeiAqLwogaW50IHZsdl9nZXRfaHBsbF92Y28oc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KQogewpAQCAtMTkxLDI3MSArMTgwLDYgQEAgc3RhdGljIHUzMiBpbnRlbF9m ZGlfbGlua19mcmVxKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAkJcmV0dXJu IGRldl9wcml2LT5mZGlfcGxsX2ZyZXE7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxf bGltaXQgaW50ZWxfbGltaXRzX2k4eHhfZGFjID0gewotCS5kb3QgPSB7IC5taW4gPSAyNTAwMCwg Lm1heCA9IDM1MDAwMCB9LAotCS52Y28gPSB7IC5taW4gPSA5MDgwMDAsIC5tYXggPSAxNTEyMDAw IH0sCi0JLm4gPSB7IC5taW4gPSAyLCAubWF4ID0gMTYgfSwKLQkubSA9IHsgLm1pbiA9IDk2LCAu bWF4ID0gMTQwIH0sCi0JLm0xID0geyAubWluID0gMTgsIC5tYXggPSAyNiB9LAotCS5tMiA9IHsg Lm1pbiA9IDYsIC5tYXggPSAxNiB9LAotCS5wID0geyAubWluID0gNCwgLm1heCA9IDEyOCB9LAot CS5wMSA9IHsgLm1pbiA9IDIsIC5tYXggPSAzMyB9LAotCS5wMiA9IHsgLmRvdF9saW1pdCA9IDE2 NTAwMCwKLQkJLnAyX3Nsb3cgPSA0LCAucDJfZmFzdCA9IDIgfSwKLX07Ci0KLXN0YXRpYyBjb25z dCBzdHJ1Y3QgaW50ZWxfbGltaXQgaW50ZWxfbGltaXRzX2k4eHhfZHZvID0gewotCS5kb3QgPSB7 IC5taW4gPSAyNTAwMCwgLm1heCA9IDM1MDAwMCB9LAotCS52Y28gPSB7IC5taW4gPSA5MDgwMDAs IC5tYXggPSAxNTEyMDAwIH0sCi0JLm4gPSB7IC5taW4gPSAyLCAubWF4ID0gMTYgfSwKLQkubSA9 IHsgLm1pbiA9IDk2LCAubWF4ID0gMTQwIH0sCi0JLm0xID0geyAubWluID0gMTgsIC5tYXggPSAy NiB9LAotCS5tMiA9IHsgLm1pbiA9IDYsIC5tYXggPSAxNiB9LAotCS5wID0geyAubWluID0gNCwg Lm1heCA9IDEyOCB9LAotCS5wMSA9IHsgLm1pbiA9IDIsIC5tYXggPSAzMyB9LAotCS5wMiA9IHsg LmRvdF9saW1pdCA9IDE2NTAwMCwKLQkJLnAyX3Nsb3cgPSA0LCAucDJfZmFzdCA9IDQgfSwKLX07 Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgaW50ZWxfbGltaXRzX2k4eHhfbHZk cyA9IHsKLQkuZG90ID0geyAubWluID0gMjUwMDAsIC5tYXggPSAzNTAwMDAgfSwKLQkudmNvID0g eyAubWluID0gOTA4MDAwLCAubWF4ID0gMTUxMjAwMCB9LAotCS5uID0geyAubWluID0gMiwgLm1h eCA9IDE2IH0sCi0JLm0gPSB7IC5taW4gPSA5NiwgLm1heCA9IDE0MCB9LAotCS5tMSA9IHsgLm1p biA9IDE4LCAubWF4ID0gMjYgfSwKLQkubTIgPSB7IC5taW4gPSA2LCAubWF4ID0gMTYgfSwKLQku cCA9IHsgLm1pbiA9IDQsIC5tYXggPSAxMjggfSwKLQkucDEgPSB7IC5taW4gPSAxLCAubWF4ID0g NiB9LAotCS5wMiA9IHsgLmRvdF9saW1pdCA9IDE2NTAwMCwKLQkJLnAyX3Nsb3cgPSAxNCwgLnAy X2Zhc3QgPSA3IH0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2xpbWl0IGludGVs X2xpbWl0c19pOXh4X3Nkdm8gPSB7Ci0JLmRvdCA9IHsgLm1pbiA9IDIwMDAwLCAubWF4ID0gNDAw MDAwIH0sCi0JLnZjbyA9IHsgLm1pbiA9IDE0MDAwMDAsIC5tYXggPSAyODAwMDAwIH0sCi0JLm4g PSB7IC5taW4gPSAxLCAubWF4ID0gNiB9LAotCS5tID0geyAubWluID0gNzAsIC5tYXggPSAxMjAg fSwKLQkubTEgPSB7IC5taW4gPSA4LCAubWF4ID0gMTggfSwKLQkubTIgPSB7IC5taW4gPSAzLCAu bWF4ID0gNyB9LAotCS5wID0geyAubWluID0gNSwgLm1heCA9IDgwIH0sCi0JLnAxID0geyAubWlu ID0gMSwgLm1heCA9IDggfSwKLQkucDIgPSB7IC5kb3RfbGltaXQgPSAyMDAwMDAsCi0JCS5wMl9z bG93ID0gMTAsIC5wMl9mYXN0ID0gNSB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRl bF9saW1pdCBpbnRlbF9saW1pdHNfaTl4eF9sdmRzID0gewotCS5kb3QgPSB7IC5taW4gPSAyMDAw MCwgLm1heCA9IDQwMDAwMCB9LAotCS52Y28gPSB7IC5taW4gPSAxNDAwMDAwLCAubWF4ID0gMjgw MDAwMCB9LAotCS5uID0geyAubWluID0gMSwgLm1heCA9IDYgfSwKLQkubSA9IHsgLm1pbiA9IDcw LCAubWF4ID0gMTIwIH0sCi0JLm0xID0geyAubWluID0gOCwgLm1heCA9IDE4IH0sCi0JLm0yID0g eyAubWluID0gMywgLm1heCA9IDcgfSwKLQkucCA9IHsgLm1pbiA9IDcsIC5tYXggPSA5OCB9LAot CS5wMSA9IHsgLm1pbiA9IDEsIC5tYXggPSA4IH0sCi0JLnAyID0geyAuZG90X2xpbWl0ID0gMTEy MDAwLAotCQkucDJfc2xvdyA9IDE0LCAucDJfZmFzdCA9IDcgfSwKLX07Ci0KLQotc3RhdGljIGNv bnN0IHN0cnVjdCBpbnRlbF9saW1pdCBpbnRlbF9saW1pdHNfZzR4X3Nkdm8gPSB7Ci0JLmRvdCA9 IHsgLm1pbiA9IDI1MDAwLCAubWF4ID0gMjcwMDAwIH0sCi0JLnZjbyA9IHsgLm1pbiA9IDE3NTAw MDAsIC5tYXggPSAzNTAwMDAwfSwKLQkubiA9IHsgLm1pbiA9IDEsIC5tYXggPSA0IH0sCi0JLm0g PSB7IC5taW4gPSAxMDQsIC5tYXggPSAxMzggfSwKLQkubTEgPSB7IC5taW4gPSAxNywgLm1heCA9 IDIzIH0sCi0JLm0yID0geyAubWluID0gNSwgLm1heCA9IDExIH0sCi0JLnAgPSB7IC5taW4gPSAx MCwgLm1heCA9IDMwIH0sCi0JLnAxID0geyAubWluID0gMSwgLm1heCA9IDN9LAotCS5wMiA9IHsg LmRvdF9saW1pdCA9IDI3MDAwMCwKLQkJLnAyX3Nsb3cgPSAxMCwKLQkJLnAyX2Zhc3QgPSAxMAot CX0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2xpbWl0IGludGVsX2xpbWl0c19n NHhfaGRtaSA9IHsKLQkuZG90ID0geyAubWluID0gMjIwMDAsIC5tYXggPSA0MDAwMDAgfSwKLQku dmNvID0geyAubWluID0gMTc1MDAwMCwgLm1heCA9IDM1MDAwMDB9LAotCS5uID0geyAubWluID0g MSwgLm1heCA9IDQgfSwKLQkubSA9IHsgLm1pbiA9IDEwNCwgLm1heCA9IDEzOCB9LAotCS5tMSA9 IHsgLm1pbiA9IDE2LCAubWF4ID0gMjMgfSwKLQkubTIgPSB7IC5taW4gPSA1LCAubWF4ID0gMTEg fSwKLQkucCA9IHsgLm1pbiA9IDUsIC5tYXggPSA4MCB9LAotCS5wMSA9IHsgLm1pbiA9IDEsIC5t YXggPSA4fSwKLQkucDIgPSB7IC5kb3RfbGltaXQgPSAxNjUwMDAsCi0JCS5wMl9zbG93ID0gMTAs IC5wMl9mYXN0ID0gNSB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCBp bnRlbF9saW1pdHNfZzR4X3NpbmdsZV9jaGFubmVsX2x2ZHMgPSB7Ci0JLmRvdCA9IHsgLm1pbiA9 IDIwMDAwLCAubWF4ID0gMTE1MDAwIH0sCi0JLnZjbyA9IHsgLm1pbiA9IDE3NTAwMDAsIC5tYXgg PSAzNTAwMDAwIH0sCi0JLm4gPSB7IC5taW4gPSAxLCAubWF4ID0gMyB9LAotCS5tID0geyAubWlu ID0gMTA0LCAubWF4ID0gMTM4IH0sCi0JLm0xID0geyAubWluID0gMTcsIC5tYXggPSAyMyB9LAot CS5tMiA9IHsgLm1pbiA9IDUsIC5tYXggPSAxMSB9LAotCS5wID0geyAubWluID0gMjgsIC5tYXgg PSAxMTIgfSwKLQkucDEgPSB7IC5taW4gPSAyLCAubWF4ID0gOCB9LAotCS5wMiA9IHsgLmRvdF9s aW1pdCA9IDAsCi0JCS5wMl9zbG93ID0gMTQsIC5wMl9mYXN0ID0gMTQKLQl9LAotfTsKLQotc3Rh dGljIGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCBpbnRlbF9saW1pdHNfZzR4X2R1YWxfY2hhbm5l bF9sdmRzID0gewotCS5kb3QgPSB7IC5taW4gPSA4MDAwMCwgLm1heCA9IDIyNDAwMCB9LAotCS52 Y28gPSB7IC5taW4gPSAxNzUwMDAwLCAubWF4ID0gMzUwMDAwMCB9LAotCS5uID0geyAubWluID0g MSwgLm1heCA9IDMgfSwKLQkubSA9IHsgLm1pbiA9IDEwNCwgLm1heCA9IDEzOCB9LAotCS5tMSA9 IHsgLm1pbiA9IDE3LCAubWF4ID0gMjMgfSwKLQkubTIgPSB7IC5taW4gPSA1LCAubWF4ID0gMTEg fSwKLQkucCA9IHsgLm1pbiA9IDE0LCAubWF4ID0gNDIgfSwKLQkucDEgPSB7IC5taW4gPSAyLCAu bWF4ID0gNiB9LAotCS5wMiA9IHsgLmRvdF9saW1pdCA9IDAsCi0JCS5wMl9zbG93ID0gNywgLnAy X2Zhc3QgPSA3Ci0JfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgcG52 X2xpbWl0c19zZHZvID0gewotCS5kb3QgPSB7IC5taW4gPSAyMDAwMCwgLm1heCA9IDQwMDAwMH0s Ci0JLnZjbyA9IHsgLm1pbiA9IDE3MDAwMDAsIC5tYXggPSAzNTAwMDAwIH0sCi0JLyogUGluZXZp ZXcncyBOY291bnRlciBpcyBhIHJpbmcgY291bnRlciAqLwotCS5uID0geyAubWluID0gMywgLm1h eCA9IDYgfSwKLQkubSA9IHsgLm1pbiA9IDIsIC5tYXggPSAyNTYgfSwKLQkvKiBQaW5ldmlldyBv bmx5IGhhcyBvbmUgY29tYmluZWQgbSBkaXZpZGVyLCB3aGljaCB3ZSB0cmVhdCBhcyBtMi4gKi8K LQkubTEgPSB7IC5taW4gPSAwLCAubWF4ID0gMCB9LAotCS5tMiA9IHsgLm1pbiA9IDAsIC5tYXgg PSAyNTQgfSwKLQkucCA9IHsgLm1pbiA9IDUsIC5tYXggPSA4MCB9LAotCS5wMSA9IHsgLm1pbiA9 IDEsIC5tYXggPSA4IH0sCi0JLnAyID0geyAuZG90X2xpbWl0ID0gMjAwMDAwLAotCQkucDJfc2xv dyA9IDEwLCAucDJfZmFzdCA9IDUgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxf bGltaXQgcG52X2xpbWl0c19sdmRzID0gewotCS5kb3QgPSB7IC5taW4gPSAyMDAwMCwgLm1heCA9 IDQwMDAwMCB9LAotCS52Y28gPSB7IC5taW4gPSAxNzAwMDAwLCAubWF4ID0gMzUwMDAwMCB9LAot CS5uID0geyAubWluID0gMywgLm1heCA9IDYgfSwKLQkubSA9IHsgLm1pbiA9IDIsIC5tYXggPSAy NTYgfSwKLQkubTEgPSB7IC5taW4gPSAwLCAubWF4ID0gMCB9LAotCS5tMiA9IHsgLm1pbiA9IDAs IC5tYXggPSAyNTQgfSwKLQkucCA9IHsgLm1pbiA9IDcsIC5tYXggPSAxMTIgfSwKLQkucDEgPSB7 IC5taW4gPSAxLCAubWF4ID0gOCB9LAotCS5wMiA9IHsgLmRvdF9saW1pdCA9IDExMjAwMCwKLQkJ LnAyX3Nsb3cgPSAxNCwgLnAyX2Zhc3QgPSAxNCB9LAotfTsKLQotLyogSXJvbmxha2UgLyBTYW5k eWJyaWRnZQotICoKLSAqIFdlIGNhbGN1bGF0ZSBjbG9jayB1c2luZyAocmVnaXN0ZXJfdmFsdWUg KyAyKSBmb3IgTi9NMS9NMiwgc28gaGVyZQotICogdGhlIHJhbmdlIHZhbHVlIGZvciB0aGVtIGlz IChhY3R1YWxfdmFsdWUgLSAyKS4KLSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9saW1p dCBpbGtfbGltaXRzX2RhYyA9IHsKLQkuZG90ID0geyAubWluID0gMjUwMDAsIC5tYXggPSAzNTAw MDAgfSwKLQkudmNvID0geyAubWluID0gMTc2MDAwMCwgLm1heCA9IDM1MTAwMDAgfSwKLQkubiA9 IHsgLm1pbiA9IDEsIC5tYXggPSA1IH0sCi0JLm0gPSB7IC5taW4gPSA3OSwgLm1heCA9IDEyNyB9 LAotCS5tMSA9IHsgLm1pbiA9IDEyLCAubWF4ID0gMjIgfSwKLQkubTIgPSB7IC5taW4gPSA1LCAu bWF4ID0gOSB9LAotCS5wID0geyAubWluID0gNSwgLm1heCA9IDgwIH0sCi0JLnAxID0geyAubWlu ID0gMSwgLm1heCA9IDggfSwKLQkucDIgPSB7IC5kb3RfbGltaXQgPSAyMjUwMDAsCi0JCS5wMl9z bG93ID0gMTAsIC5wMl9mYXN0ID0gNSB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRl bF9saW1pdCBpbGtfbGltaXRzX3NpbmdsZV9sdmRzID0gewotCS5kb3QgPSB7IC5taW4gPSAyNTAw MCwgLm1heCA9IDM1MDAwMCB9LAotCS52Y28gPSB7IC5taW4gPSAxNzYwMDAwLCAubWF4ID0gMzUx MDAwMCB9LAotCS5uID0geyAubWluID0gMSwgLm1heCA9IDMgfSwKLQkubSA9IHsgLm1pbiA9IDc5 LCAubWF4ID0gMTE4IH0sCi0JLm0xID0geyAubWluID0gMTIsIC5tYXggPSAyMiB9LAotCS5tMiA9 IHsgLm1pbiA9IDUsIC5tYXggPSA5IH0sCi0JLnAgPSB7IC5taW4gPSAyOCwgLm1heCA9IDExMiB9 LAotCS5wMSA9IHsgLm1pbiA9IDIsIC5tYXggPSA4IH0sCi0JLnAyID0geyAuZG90X2xpbWl0ID0g MjI1MDAwLAotCQkucDJfc2xvdyA9IDE0LCAucDJfZmFzdCA9IDE0IH0sCi19OwotCi1zdGF0aWMg Y29uc3Qgc3RydWN0IGludGVsX2xpbWl0IGlsa19saW1pdHNfZHVhbF9sdmRzID0gewotCS5kb3Qg PSB7IC5taW4gPSAyNTAwMCwgLm1heCA9IDM1MDAwMCB9LAotCS52Y28gPSB7IC5taW4gPSAxNzYw MDAwLCAubWF4ID0gMzUxMDAwMCB9LAotCS5uID0geyAubWluID0gMSwgLm1heCA9IDMgfSwKLQku bSA9IHsgLm1pbiA9IDc5LCAubWF4ID0gMTI3IH0sCi0JLm0xID0geyAubWluID0gMTIsIC5tYXgg PSAyMiB9LAotCS5tMiA9IHsgLm1pbiA9IDUsIC5tYXggPSA5IH0sCi0JLnAgPSB7IC5taW4gPSAx NCwgLm1heCA9IDU2IH0sCi0JLnAxID0geyAubWluID0gMiwgLm1heCA9IDggfSwKLQkucDIgPSB7 IC5kb3RfbGltaXQgPSAyMjUwMDAsCi0JCS5wMl9zbG93ID0gNywgLnAyX2Zhc3QgPSA3IH0sCi19 OwotCi0vKiBMVkRTIDEwMG1oeiByZWZjbGsgbGltaXRzLiAqLwotc3RhdGljIGNvbnN0IHN0cnVj dCBpbnRlbF9saW1pdCBpbGtfbGltaXRzX3NpbmdsZV9sdmRzXzEwMG0gPSB7Ci0JLmRvdCA9IHsg Lm1pbiA9IDI1MDAwLCAubWF4ID0gMzUwMDAwIH0sCi0JLnZjbyA9IHsgLm1pbiA9IDE3NjAwMDAs IC5tYXggPSAzNTEwMDAwIH0sCi0JLm4gPSB7IC5taW4gPSAxLCAubWF4ID0gMiB9LAotCS5tID0g eyAubWluID0gNzksIC5tYXggPSAxMjYgfSwKLQkubTEgPSB7IC5taW4gPSAxMiwgLm1heCA9IDIy IH0sCi0JLm0yID0geyAubWluID0gNSwgLm1heCA9IDkgfSwKLQkucCA9IHsgLm1pbiA9IDI4LCAu bWF4ID0gMTEyIH0sCi0JLnAxID0geyAubWluID0gMiwgLm1heCA9IDggfSwKLQkucDIgPSB7IC5k b3RfbGltaXQgPSAyMjUwMDAsCi0JCS5wMl9zbG93ID0gMTQsIC5wMl9mYXN0ID0gMTQgfSwKLX07 Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgaWxrX2xpbWl0c19kdWFsX2x2ZHNf MTAwbSA9IHsKLQkuZG90ID0geyAubWluID0gMjUwMDAsIC5tYXggPSAzNTAwMDAgfSwKLQkudmNv ID0geyAubWluID0gMTc2MDAwMCwgLm1heCA9IDM1MTAwMDAgfSwKLQkubiA9IHsgLm1pbiA9IDEs IC5tYXggPSAzIH0sCi0JLm0gPSB7IC5taW4gPSA3OSwgLm1heCA9IDEyNiB9LAotCS5tMSA9IHsg Lm1pbiA9IDEyLCAubWF4ID0gMjIgfSwKLQkubTIgPSB7IC5taW4gPSA1LCAubWF4ID0gOSB9LAot CS5wID0geyAubWluID0gMTQsIC5tYXggPSA0MiB9LAotCS5wMSA9IHsgLm1pbiA9IDIsIC5tYXgg PSA2IH0sCi0JLnAyID0geyAuZG90X2xpbWl0ID0gMjI1MDAwLAotCQkucDJfc2xvdyA9IDcsIC5w Ml9mYXN0ID0gNyB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCBpbnRl bF9saW1pdHNfdmx2ID0gewotCSAvKgotCSAgKiBUaGVzZSBhcmUgdGhlIGRhdGEgcmF0ZSBsaW1p dHMgKG1lYXN1cmVkIGluIGZhc3QgY2xvY2tzKQotCSAgKiBzaW5jZSB0aG9zZSBhcmUgdGhlIHN0 cmljdGVzdCBsaW1pdHMgd2UgaGF2ZS4gVGhlIGZhc3QKLQkgICogY2xvY2sgYW5kIGFjdHVhbCBy YXRlIGxpbWl0cyBhcmUgbW9yZSByZWxheGVkLCBzbyBjaGVja2luZwotCSAgKiB0aGVtIHdvdWxk IG1ha2Ugbm8gZGlmZmVyZW5jZS4KLQkgICovCi0JLmRvdCA9IHsgLm1pbiA9IDI1MDAwICogNSwg Lm1heCA9IDI3MDAwMCAqIDUgfSwKLQkudmNvID0geyAubWluID0gNDAwMDAwMCwgLm1heCA9IDYw MDAwMDAgfSwKLQkubiA9IHsgLm1pbiA9IDEsIC5tYXggPSA3IH0sCi0JLm0xID0geyAubWluID0g MiwgLm1heCA9IDMgfSwKLQkubTIgPSB7IC5taW4gPSAxMSwgLm1heCA9IDE1NiB9LAotCS5wMSA9 IHsgLm1pbiA9IDIsIC5tYXggPSAzIH0sCi0JLnAyID0geyAucDJfc2xvdyA9IDIsIC5wMl9mYXN0 ID0gMjAgfSwgLyogc2xvdz1taW4sIGZhc3Q9bWF4ICovCi19OwotCi1zdGF0aWMgY29uc3Qgc3Ry dWN0IGludGVsX2xpbWl0IGludGVsX2xpbWl0c19jaHYgPSB7Ci0JLyoKLQkgKiBUaGVzZSBhcmUg dGhlIGRhdGEgcmF0ZSBsaW1pdHMgKG1lYXN1cmVkIGluIGZhc3QgY2xvY2tzKQotCSAqIHNpbmNl IHRob3NlIGFyZSB0aGUgc3RyaWN0ZXN0IGxpbWl0cyB3ZSBoYXZlLiAgVGhlIGZhc3QKLQkgKiBj bG9jayBhbmQgYWN0dWFsIHJhdGUgbGltaXRzIGFyZSBtb3JlIHJlbGF4ZWQsIHNvIGNoZWNraW5n Ci0JICogdGhlbSB3b3VsZCBtYWtlIG5vIGRpZmZlcmVuY2UuCi0JICovCi0JLmRvdCA9IHsgLm1p biA9IDI1MDAwICogNSwgLm1heCA9IDU0MDAwMCAqIDV9LAotCS52Y28gPSB7IC5taW4gPSA0ODAw MDAwLCAubWF4ID0gNjQ4MDAwMCB9LAotCS5uID0geyAubWluID0gMSwgLm1heCA9IDEgfSwKLQku bTEgPSB7IC5taW4gPSAyLCAubWF4ID0gMiB9LAotCS5tMiA9IHsgLm1pbiA9IDI0IDw8IDIyLCAu bWF4ID0gMTc1IDw8IDIyIH0sCi0JLnAxID0geyAubWluID0gMiwgLm1heCA9IDQgfSwKLQkucDIg PSB7CS5wMl9zbG93ID0gMSwgLnAyX2Zhc3QgPSAxNCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0 cnVjdCBpbnRlbF9saW1pdCBpbnRlbF9saW1pdHNfYnh0ID0gewotCS8qIEZJWE1FOiBmaW5kIHJl YWwgZG90IGxpbWl0cyAqLwotCS5kb3QgPSB7IC5taW4gPSAwLCAubWF4ID0gSU5UX01BWCB9LAot CS52Y28gPSB7IC5taW4gPSA0ODAwMDAwLCAubWF4ID0gNjcwMDAwMCB9LAotCS5uID0geyAubWlu ID0gMSwgLm1heCA9IDEgfSwKLQkubTEgPSB7IC5taW4gPSAyLCAubWF4ID0gMiB9LAotCS8qIEZJ WE1FOiBmaW5kIHJlYWwgbTIgbGltaXRzICovCi0JLm0yID0geyAubWluID0gMiA8PCAyMiwgLm1h eCA9IDI1NSA8PCAyMiB9LAotCS5wMSA9IHsgLm1pbiA9IDIsIC5tYXggPSA0IH0sCi0JLnAyID0g eyAucDJfc2xvdyA9IDEsIC5wMl9mYXN0ID0gMjAgfSwKLX07Ci0KIC8qIFdBIERpc3BsYXkgIzA4 Mjc6IEdlbjk6YWxsICovCiBzdGF0aWMgdm9pZAogc2tsX3dhXzgyNyhzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcGlwZSBwaXBlLCBib29sIGVuYWJsZSkKQEAgLTUwNiw0 ODIgKzIzMCw2IEBAIGlzX3RyYW5zX3BvcnRfc3luY19tb2RlKGNvbnN0IHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpjcnRjX3N0YXRlKQogCQlpc190cmFuc19wb3J0X3N5bmNfc2xhdmUoY3J0Y19z dGF0ZSk7CiB9CiAKLS8qCi0gKiBQbGF0Zm9ybSBzcGVjaWZpYyBoZWxwZXJzIHRvIGNhbGN1bGF0 ZSB0aGUgcG9ydCBQTEwgbG9vcGJhY2stIChjbG9jay5tKSwKLSAqIGFuZCBwb3N0LWRpdmlkZXIg KGNsb2NrLnApIHZhbHVlcywgcHJlLSAoY2xvY2sudmNvKSBhbmQgcG9zdC1kaXZpZGVkIGZhc3QK LSAqIChjbG9jay5kb3QpIGNsb2NrIHJhdGVzLiBUaGlzIGZhc3QgZG90IGNsb2NrIGlzIGZlZCB0 byB0aGUgcG9ydCdzIElPIGxvZ2ljLgotICogVGhlIGhlbHBlcnMnIHJldHVybiB2YWx1ZSBpcyB0 aGUgcmF0ZSBvZiB0aGUgY2xvY2sgdGhhdCBpcyBmZWQgdG8gdGhlCi0gKiBkaXNwbGF5IGVuZ2lu ZSdzIHBpcGUgd2hpY2ggY2FuIGJlIHRoZSBhYm92ZSBmYXN0IGRvdCBjbG9jayByYXRlIG9yIGEK LSAqIGRpdmlkZWQtZG93biB2ZXJzaW9uIG9mIGl0LgotICovCi0vKiBtMSBpcyByZXNlcnZlZCBh cyAwIGluIFBpbmV2aWV3LCBuIGlzIGEgcmluZyBjb3VudGVyICovCi1zdGF0aWMgaW50IHBudl9j YWxjX2RwbGxfcGFyYW1zKGludCByZWZjbGssIHN0cnVjdCBkcGxsICpjbG9jaykKLXsKLQljbG9j ay0+bSA9IGNsb2NrLT5tMiArIDI7Ci0JY2xvY2stPnAgPSBjbG9jay0+cDEgKiBjbG9jay0+cDI7 Ci0JaWYgKFdBUk5fT04oY2xvY2stPm4gPT0gMCB8fCBjbG9jay0+cCA9PSAwKSkKLQkJcmV0dXJu IDA7Ci0JY2xvY2stPnZjbyA9IERJVl9ST1VORF9DTE9TRVNUKHJlZmNsayAqIGNsb2NrLT5tLCBj bG9jay0+bik7Ci0JY2xvY2stPmRvdCA9IERJVl9ST1VORF9DTE9TRVNUKGNsb2NrLT52Y28sIGNs b2NrLT5wKTsKLQotCXJldHVybiBjbG9jay0+ZG90OwotfQotCi1zdGF0aWMgdTMyIGk5eHhfZHBs bF9jb21wdXRlX20oc3RydWN0IGRwbGwgKmRwbGwpCi17Ci0JcmV0dXJuIDUgKiAoZHBsbC0+bTEg KyAyKSArIChkcGxsLT5tMiArIDIpOwotfQotCi1zdGF0aWMgaW50IGk5eHhfY2FsY19kcGxsX3Bh cmFtcyhpbnQgcmVmY2xrLCBzdHJ1Y3QgZHBsbCAqY2xvY2spCi17Ci0JY2xvY2stPm0gPSBpOXh4 X2RwbGxfY29tcHV0ZV9tKGNsb2NrKTsKLQljbG9jay0+cCA9IGNsb2NrLT5wMSAqIGNsb2NrLT5w MjsKLQlpZiAoV0FSTl9PTihjbG9jay0+biArIDIgPT0gMCB8fCBjbG9jay0+cCA9PSAwKSkKLQkJ cmV0dXJuIDA7Ci0JY2xvY2stPnZjbyA9IERJVl9ST1VORF9DTE9TRVNUKHJlZmNsayAqIGNsb2Nr LT5tLCBjbG9jay0+biArIDIpOwotCWNsb2NrLT5kb3QgPSBESVZfUk9VTkRfQ0xPU0VTVChjbG9j ay0+dmNvLCBjbG9jay0+cCk7Ci0KLQlyZXR1cm4gY2xvY2stPmRvdDsKLX0KLQotc3RhdGljIGlu dCB2bHZfY2FsY19kcGxsX3BhcmFtcyhpbnQgcmVmY2xrLCBzdHJ1Y3QgZHBsbCAqY2xvY2spCi17 Ci0JY2xvY2stPm0gPSBjbG9jay0+bTEgKiBjbG9jay0+bTI7Ci0JY2xvY2stPnAgPSBjbG9jay0+ cDEgKiBjbG9jay0+cDI7Ci0JaWYgKFdBUk5fT04oY2xvY2stPm4gPT0gMCB8fCBjbG9jay0+cCA9 PSAwKSkKLQkJcmV0dXJuIDA7Ci0JY2xvY2stPnZjbyA9IERJVl9ST1VORF9DTE9TRVNUKHJlZmNs ayAqIGNsb2NrLT5tLCBjbG9jay0+bik7Ci0JY2xvY2stPmRvdCA9IERJVl9ST1VORF9DTE9TRVNU KGNsb2NrLT52Y28sIGNsb2NrLT5wKTsKLQotCXJldHVybiBjbG9jay0+ZG90IC8gNTsKLX0KLQot aW50IGNodl9jYWxjX2RwbGxfcGFyYW1zKGludCByZWZjbGssIHN0cnVjdCBkcGxsICpjbG9jaykK LXsKLQljbG9jay0+bSA9IGNsb2NrLT5tMSAqIGNsb2NrLT5tMjsKLQljbG9jay0+cCA9IGNsb2Nr LT5wMSAqIGNsb2NrLT5wMjsKLQlpZiAoV0FSTl9PTihjbG9jay0+biA9PSAwIHx8IGNsb2NrLT5w ID09IDApKQotCQlyZXR1cm4gMDsKLQljbG9jay0+dmNvID0gRElWX1JPVU5EX0NMT1NFU1RfVUxM KG11bF91MzJfdTMyKHJlZmNsaywgY2xvY2stPm0pLAotCQkJCQkgICBjbG9jay0+biA8PCAyMik7 Ci0JY2xvY2stPmRvdCA9IERJVl9ST1VORF9DTE9TRVNUKGNsb2NrLT52Y28sIGNsb2NrLT5wKTsK LQotCXJldHVybiBjbG9jay0+ZG90IC8gNTsKLX0KLQotLyoKLSAqIFJldHVybnMgd2hldGhlciB0 aGUgZ2l2ZW4gc2V0IG9mIGRpdmlzb3JzIGFyZSB2YWxpZCBmb3IgYSBnaXZlbiByZWZjbGsgd2l0 aAotICogdGhlIGdpdmVuIGNvbm5lY3RvcnMuCi0gKi8KLXN0YXRpYyBib29sIGludGVsX3BsbF9p c192YWxpZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkgICAgICAgY29u c3Qgc3RydWN0IGludGVsX2xpbWl0ICpsaW1pdCwKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZHBs bCAqY2xvY2spCi17Ci0JaWYgKGNsb2NrLT5uIDwgbGltaXQtPm4ubWluIHx8IGxpbWl0LT5uLm1h eCA8IGNsb2NrLT5uKQotCQlyZXR1cm4gZmFsc2U7Ci0JaWYgKGNsb2NrLT5wMSA8IGxpbWl0LT5w MS5taW4gfHwgbGltaXQtPnAxLm1heCA8IGNsb2NrLT5wMSkKLQkJcmV0dXJuIGZhbHNlOwotCWlm IChjbG9jay0+bTIgPCBsaW1pdC0+bTIubWluIHx8IGxpbWl0LT5tMi5tYXggPCBjbG9jay0+bTIp Ci0JCXJldHVybiBmYWxzZTsKLQlpZiAoY2xvY2stPm0xIDwgbGltaXQtPm0xLm1pbiB8fCBsaW1p dC0+bTEubWF4IDwgY2xvY2stPm0xKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlpZiAoIUlTX1BJTkVW SUVXKGRldl9wcml2KSAmJiAhSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgJiYKLQkgICAgIUlTX0NI RVJSWVZJRVcoZGV2X3ByaXYpICYmICFJU19HRU45X0xQKGRldl9wcml2KSkKLQkJaWYgKGNsb2Nr LT5tMSA8PSBjbG9jay0+bTIpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQlpZiAoIUlTX1ZBTExFWVZJ RVcoZGV2X3ByaXYpICYmICFJU19DSEVSUllWSUVXKGRldl9wcml2KSAmJgotCSAgICAhSVNfR0VO OV9MUChkZXZfcHJpdikpIHsKLQkJaWYgKGNsb2NrLT5wIDwgbGltaXQtPnAubWluIHx8IGxpbWl0 LT5wLm1heCA8IGNsb2NrLT5wKQotCQkJcmV0dXJuIGZhbHNlOwotCQlpZiAoY2xvY2stPm0gPCBs aW1pdC0+bS5taW4gfHwgbGltaXQtPm0ubWF4IDwgY2xvY2stPm0pCi0JCQlyZXR1cm4gZmFsc2U7 Ci0JfQotCi0JaWYgKGNsb2NrLT52Y28gPCBsaW1pdC0+dmNvLm1pbiB8fCBsaW1pdC0+dmNvLm1h eCA8IGNsb2NrLT52Y28pCi0JCXJldHVybiBmYWxzZTsKLQkvKiBYWFg6IFdlIG1heSBuZWVkIHRv IGJlIGNoZWNraW5nICJEb3QgY2xvY2siIGRlcGVuZGluZyBvbiB0aGUgbXVsdGlwbGllciwKLQkg KiBjb25uZWN0b3IsIGV0Yy4sIHJhdGhlciB0aGFuIGp1c3QgYSBzaW5nbGUgcmFuZ2UuCi0JICov Ci0JaWYgKGNsb2NrLT5kb3QgPCBsaW1pdC0+ZG90Lm1pbiB8fCBsaW1pdC0+ZG90Lm1heCA8IGNs b2NrLT5kb3QpCi0JCXJldHVybiBmYWxzZTsKLQotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMg aW50Ci1pOXh4X3NlbGVjdF9wMl9kaXYoY29uc3Qgc3RydWN0IGludGVsX2xpbWl0ICpsaW1pdCwK LQkJICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCi0JCSAgIGlu dCB0YXJnZXQpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkx NShjcnRjX3N0YXRlLT51YXBpLmNydGMtPmRldik7Ci0KLQlpZiAoaW50ZWxfY3J0Y19oYXNfdHlw ZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfTFZEUykpIHsKLQkJLyoKLQkJICogRm9yIExWRFMg anVzdCByZWx5IG9uIGl0cyBjdXJyZW50IHNldHRpbmdzIGZvciBkdWFsLWNoYW5uZWwuCi0JCSAq IFdlIGhhdmVuJ3QgZmlndXJlZCBvdXQgaG93IHRvIHJlbGlhYmx5IHNldCB1cCBkaWZmZXJlbnQK LQkJICogc2luZ2xlL2R1YWwgY2hhbm5lbCBzdGF0ZSwgaWYgd2UgZXZlbiBjYW4uCi0JCSAqLwot CQlpZiAoaW50ZWxfaXNfZHVhbF9saW5rX2x2ZHMoZGV2X3ByaXYpKQotCQkJcmV0dXJuIGxpbWl0 LT5wMi5wMl9mYXN0OwotCQllbHNlCi0JCQlyZXR1cm4gbGltaXQtPnAyLnAyX3Nsb3c7Ci0JfSBl bHNlIHsKLQkJaWYgKHRhcmdldCA8IGxpbWl0LT5wMi5kb3RfbGltaXQpCi0JCQlyZXR1cm4gbGlt aXQtPnAyLnAyX3Nsb3c7Ci0JCWVsc2UKLQkJCXJldHVybiBsaW1pdC0+cDIucDJfZmFzdDsKLQl9 Ci19Ci0KLS8qCi0gKiBSZXR1cm5zIGEgc2V0IG9mIGRpdmlzb3JzIGZvciB0aGUgZGVzaXJlZCB0 YXJnZXQgY2xvY2sgd2l0aCB0aGUgZ2l2ZW4KLSAqIHJlZmNsaywgb3IgRkFMU0UuICBUaGUgcmV0 dXJuZWQgdmFsdWVzIHJlcHJlc2VudCB0aGUgY2xvY2sgZXF1YXRpb246Ci0gKiByZWZsY2sgKiAo NSAqIChtMSArIDIpICsgKG0yICsgMikpIC8gKG4gKyAyKSAvIHAxIC8gcDIuCi0gKgotICogVGFy Z2V0IGFuZCByZWZlcmVuY2UgY2xvY2tzIGFyZSBzcGVjaWZpZWQgaW4ga0h6LgotICoKLSAqIElm IG1hdGNoX2Nsb2NrIGlzIHByb3ZpZGVkLCB0aGVuIGJlc3RfY2xvY2sgUCBkaXZpZGVyIG11c3Qg bWF0Y2ggdGhlIFAKLSAqIGRpdmlkZXIgZnJvbSBAbWF0Y2hfY2xvY2sgdXNlZCBmb3IgTFZEUyBk b3duY2xvY2tpbmcuCi0gKi8KLXN0YXRpYyBib29sCi1pOXh4X2ZpbmRfYmVzdF9kcGxsKGNvbnN0 IHN0cnVjdCBpbnRlbF9saW1pdCAqbGltaXQsCi0JCSAgICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0 ZSAqY3J0Y19zdGF0ZSwKLQkJICAgIGludCB0YXJnZXQsIGludCByZWZjbGssIHN0cnVjdCBkcGxs ICptYXRjaF9jbG9jaywKLQkJICAgIHN0cnVjdCBkcGxsICpiZXN0X2Nsb2NrKQotewotCXN0cnVj dCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjX3N0YXRlLT51YXBpLmNydGMtPmRldjsKLQlzdHJ1Y3Qg ZHBsbCBjbG9jazsKLQlpbnQgZXJyID0gdGFyZ2V0OwotCi0JbWVtc2V0KGJlc3RfY2xvY2ssIDAs IHNpemVvZigqYmVzdF9jbG9jaykpOwotCi0JY2xvY2sucDIgPSBpOXh4X3NlbGVjdF9wMl9kaXYo bGltaXQsIGNydGNfc3RhdGUsIHRhcmdldCk7Ci0KLQlmb3IgKGNsb2NrLm0xID0gbGltaXQtPm0x Lm1pbjsgY2xvY2subTEgPD0gbGltaXQtPm0xLm1heDsKLQkgICAgIGNsb2NrLm0xKyspIHsKLQkJ Zm9yIChjbG9jay5tMiA9IGxpbWl0LT5tMi5taW47Ci0JCSAgICAgY2xvY2subTIgPD0gbGltaXQt Pm0yLm1heDsgY2xvY2subTIrKykgewotCQkJaWYgKGNsb2NrLm0yID49IGNsb2NrLm0xKQotCQkJ CWJyZWFrOwotCQkJZm9yIChjbG9jay5uID0gbGltaXQtPm4ubWluOwotCQkJICAgICBjbG9jay5u IDw9IGxpbWl0LT5uLm1heDsgY2xvY2subisrKSB7Ci0JCQkJZm9yIChjbG9jay5wMSA9IGxpbWl0 LT5wMS5taW47Ci0JCQkJCWNsb2NrLnAxIDw9IGxpbWl0LT5wMS5tYXg7IGNsb2NrLnAxKyspIHsK LQkJCQkJaW50IHRoaXNfZXJyOwotCi0JCQkJCWk5eHhfY2FsY19kcGxsX3BhcmFtcyhyZWZjbGss ICZjbG9jayk7Ci0JCQkJCWlmICghaW50ZWxfcGxsX2lzX3ZhbGlkKHRvX2k5MTUoZGV2KSwKLQkJ CQkJCQkJbGltaXQsCi0JCQkJCQkJCSZjbG9jaykpCi0JCQkJCQljb250aW51ZTsKLQkJCQkJaWYg KG1hdGNoX2Nsb2NrICYmCi0JCQkJCSAgICBjbG9jay5wICE9IG1hdGNoX2Nsb2NrLT5wKQotCQkJ CQkJY29udGludWU7Ci0KLQkJCQkJdGhpc19lcnIgPSBhYnMoY2xvY2suZG90IC0gdGFyZ2V0KTsK LQkJCQkJaWYgKHRoaXNfZXJyIDwgZXJyKSB7Ci0JCQkJCQkqYmVzdF9jbG9jayA9IGNsb2NrOwot CQkJCQkJZXJyID0gdGhpc19lcnI7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQly ZXR1cm4gKGVyciAhPSB0YXJnZXQpOwotfQotCi0vKgotICogUmV0dXJucyBhIHNldCBvZiBkaXZp c29ycyBmb3IgdGhlIGRlc2lyZWQgdGFyZ2V0IGNsb2NrIHdpdGggdGhlIGdpdmVuCi0gKiByZWZj bGssIG9yIEZBTFNFLiAgVGhlIHJldHVybmVkIHZhbHVlcyByZXByZXNlbnQgdGhlIGNsb2NrIGVx dWF0aW9uOgotICogcmVmbGNrICogKDUgKiAobTEgKyAyKSArIChtMiArIDIpKSAvIChuICsgMikg LyBwMSAvIHAyLgotICoKLSAqIFRhcmdldCBhbmQgcmVmZXJlbmNlIGNsb2NrcyBhcmUgc3BlY2lm aWVkIGluIGtIei4KLSAqCi0gKiBJZiBtYXRjaF9jbG9jayBpcyBwcm92aWRlZCwgdGhlbiBiZXN0 X2Nsb2NrIFAgZGl2aWRlciBtdXN0IG1hdGNoIHRoZSBQCi0gKiBkaXZpZGVyIGZyb20gQG1hdGNo X2Nsb2NrIHVzZWQgZm9yIExWRFMgZG93bmNsb2NraW5nLgotICovCi1zdGF0aWMgYm9vbAotcG52 X2ZpbmRfYmVzdF9kcGxsKGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCAqbGltaXQsCi0JCSAgIHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAotCQkgICBpbnQgdGFyZ2V0LCBpbnQg cmVmY2xrLCBzdHJ1Y3QgZHBsbCAqbWF0Y2hfY2xvY2ssCi0JCSAgIHN0cnVjdCBkcGxsICpiZXN0 X2Nsb2NrKQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjX3N0YXRlLT51YXBpLmNy dGMtPmRldjsKLQlzdHJ1Y3QgZHBsbCBjbG9jazsKLQlpbnQgZXJyID0gdGFyZ2V0OwotCi0JbWVt c2V0KGJlc3RfY2xvY2ssIDAsIHNpemVvZigqYmVzdF9jbG9jaykpOwotCi0JY2xvY2sucDIgPSBp OXh4X3NlbGVjdF9wMl9kaXYobGltaXQsIGNydGNfc3RhdGUsIHRhcmdldCk7Ci0KLQlmb3IgKGNs b2NrLm0xID0gbGltaXQtPm0xLm1pbjsgY2xvY2subTEgPD0gbGltaXQtPm0xLm1heDsKLQkgICAg IGNsb2NrLm0xKyspIHsKLQkJZm9yIChjbG9jay5tMiA9IGxpbWl0LT5tMi5taW47Ci0JCSAgICAg Y2xvY2subTIgPD0gbGltaXQtPm0yLm1heDsgY2xvY2subTIrKykgewotCQkJZm9yIChjbG9jay5u ID0gbGltaXQtPm4ubWluOwotCQkJICAgICBjbG9jay5uIDw9IGxpbWl0LT5uLm1heDsgY2xvY2su bisrKSB7Ci0JCQkJZm9yIChjbG9jay5wMSA9IGxpbWl0LT5wMS5taW47Ci0JCQkJCWNsb2NrLnAx IDw9IGxpbWl0LT5wMS5tYXg7IGNsb2NrLnAxKyspIHsKLQkJCQkJaW50IHRoaXNfZXJyOwotCi0J CQkJCXBudl9jYWxjX2RwbGxfcGFyYW1zKHJlZmNsaywgJmNsb2NrKTsKLQkJCQkJaWYgKCFpbnRl bF9wbGxfaXNfdmFsaWQodG9faTkxNShkZXYpLAotCQkJCQkJCQlsaW1pdCwKLQkJCQkJCQkJJmNs b2NrKSkKLQkJCQkJCWNvbnRpbnVlOwotCQkJCQlpZiAobWF0Y2hfY2xvY2sgJiYKLQkJCQkJICAg IGNsb2NrLnAgIT0gbWF0Y2hfY2xvY2stPnApCi0JCQkJCQljb250aW51ZTsKLQotCQkJCQl0aGlz X2VyciA9IGFicyhjbG9jay5kb3QgLSB0YXJnZXQpOwotCQkJCQlpZiAodGhpc19lcnIgPCBlcnIp IHsKLQkJCQkJCSpiZXN0X2Nsb2NrID0gY2xvY2s7Ci0JCQkJCQllcnIgPSB0aGlzX2VycjsKLQkJ CQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQotCXJldHVybiAoZXJyICE9IHRhcmdldCk7Ci19 Ci0KLS8qCi0gKiBSZXR1cm5zIGEgc2V0IG9mIGRpdmlzb3JzIGZvciB0aGUgZGVzaXJlZCB0YXJn ZXQgY2xvY2sgd2l0aCB0aGUgZ2l2ZW4KLSAqIHJlZmNsaywgb3IgRkFMU0UuICBUaGUgcmV0dXJu ZWQgdmFsdWVzIHJlcHJlc2VudCB0aGUgY2xvY2sgZXF1YXRpb246Ci0gKiByZWZsY2sgKiAoNSAq IChtMSArIDIpICsgKG0yICsgMikpIC8gKG4gKyAyKSAvIHAxIC8gcDIuCi0gKgotICogVGFyZ2V0 IGFuZCByZWZlcmVuY2UgY2xvY2tzIGFyZSBzcGVjaWZpZWQgaW4ga0h6LgotICoKLSAqIElmIG1h dGNoX2Nsb2NrIGlzIHByb3ZpZGVkLCB0aGVuIGJlc3RfY2xvY2sgUCBkaXZpZGVyIG11c3QgbWF0 Y2ggdGhlIFAKLSAqIGRpdmlkZXIgZnJvbSBAbWF0Y2hfY2xvY2sgdXNlZCBmb3IgTFZEUyBkb3du Y2xvY2tpbmcuCi0gKi8KLXN0YXRpYyBib29sCi1nNHhfZmluZF9iZXN0X2RwbGwoY29uc3Qgc3Ry dWN0IGludGVsX2xpbWl0ICpsaW1pdCwKLQkJICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNy dGNfc3RhdGUsCi0JCSAgIGludCB0YXJnZXQsIGludCByZWZjbGssIHN0cnVjdCBkcGxsICptYXRj aF9jbG9jaywKLQkJICAgc3RydWN0IGRwbGwgKmJlc3RfY2xvY2spCi17Ci0Jc3RydWN0IGRybV9k ZXZpY2UgKmRldiA9IGNydGNfc3RhdGUtPnVhcGkuY3J0Yy0+ZGV2OwotCXN0cnVjdCBkcGxsIGNs b2NrOwotCWludCBtYXhfbjsKLQlib29sIGZvdW5kID0gZmFsc2U7Ci0JLyogYXBwcm94aW1hdGVs eSBlcXVhbHMgdGFyZ2V0ICogMC4wMDU4NSAqLwotCWludCBlcnJfbW9zdCA9ICh0YXJnZXQgPj4g OCkgKyAodGFyZ2V0ID4+IDkpOwotCi0JbWVtc2V0KGJlc3RfY2xvY2ssIDAsIHNpemVvZigqYmVz dF9jbG9jaykpOwotCi0JY2xvY2sucDIgPSBpOXh4X3NlbGVjdF9wMl9kaXYobGltaXQsIGNydGNf c3RhdGUsIHRhcmdldCk7Ci0KLQltYXhfbiA9IGxpbWl0LT5uLm1heDsKLQkvKiBiYXNlZCBvbiBo YXJkd2FyZSByZXF1aXJlbWVudCwgcHJlZmVyIHNtYWxsZXIgbiB0byBwcmVjaXNpb24gKi8KLQlm b3IgKGNsb2NrLm4gPSBsaW1pdC0+bi5taW47IGNsb2NrLm4gPD0gbWF4X247IGNsb2NrLm4rKykg ewotCQkvKiBiYXNlZCBvbiBoYXJkd2FyZSByZXF1aXJlbWVudCwgcHJlZmVyZSBsYXJnZXIgbTEs bTIgKi8KLQkJZm9yIChjbG9jay5tMSA9IGxpbWl0LT5tMS5tYXg7Ci0JCSAgICAgY2xvY2subTEg Pj0gbGltaXQtPm0xLm1pbjsgY2xvY2subTEtLSkgewotCQkJZm9yIChjbG9jay5tMiA9IGxpbWl0 LT5tMi5tYXg7Ci0JCQkgICAgIGNsb2NrLm0yID49IGxpbWl0LT5tMi5taW47IGNsb2NrLm0yLS0p IHsKLQkJCQlmb3IgKGNsb2NrLnAxID0gbGltaXQtPnAxLm1heDsKLQkJCQkgICAgIGNsb2NrLnAx ID49IGxpbWl0LT5wMS5taW47IGNsb2NrLnAxLS0pIHsKLQkJCQkJaW50IHRoaXNfZXJyOwotCi0J CQkJCWk5eHhfY2FsY19kcGxsX3BhcmFtcyhyZWZjbGssICZjbG9jayk7Ci0JCQkJCWlmICghaW50 ZWxfcGxsX2lzX3ZhbGlkKHRvX2k5MTUoZGV2KSwKLQkJCQkJCQkJbGltaXQsCi0JCQkJCQkJCSZj bG9jaykpCi0JCQkJCQljb250aW51ZTsKLQotCQkJCQl0aGlzX2VyciA9IGFicyhjbG9jay5kb3Qg LSB0YXJnZXQpOwotCQkJCQlpZiAodGhpc19lcnIgPCBlcnJfbW9zdCkgewotCQkJCQkJKmJlc3Rf Y2xvY2sgPSBjbG9jazsKLQkJCQkJCWVycl9tb3N0ID0gdGhpc19lcnI7Ci0JCQkJCQltYXhfbiA9 IGNsb2NrLm47Ci0JCQkJCQlmb3VuZCA9IHRydWU7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0K LQl9Ci0JcmV0dXJuIGZvdW5kOwotfQotCi0vKgotICogQ2hlY2sgaWYgdGhlIGNhbGN1bGF0ZWQg UExMIGNvbmZpZ3VyYXRpb24gaXMgbW9yZSBvcHRpbWFsIGNvbXBhcmVkIHRvIHRoZQotICogYmVz dCBjb25maWd1cmF0aW9uIGFuZCBlcnJvciBmb3VuZCBzbyBmYXIuIFJldHVybiB0aGUgY2FsY3Vs YXRlZCBlcnJvci4KLSAqLwotc3RhdGljIGJvb2wgdmx2X1BMTF9pc19vcHRpbWFsKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsIGludCB0YXJnZXRfZnJlcSwKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3Qg ZHBsbCAqY2FsY3VsYXRlZF9jbG9jaywKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZHBsbCAqYmVz dF9jbG9jaywKLQkJCSAgICAgICB1bnNpZ25lZCBpbnQgYmVzdF9lcnJvcl9wcG0sCi0JCQkgICAg ICAgdW5zaWduZWQgaW50ICplcnJvcl9wcG0pCi17Ci0JLyoKLQkgKiBGb3IgQ0hWIGlnbm9yZSB0 aGUgZXJyb3IgYW5kIGNvbnNpZGVyIG9ubHkgdGhlIFAgdmFsdWUuCi0JICogUHJlZmVyIGEgYmln Z2VyIFAgdmFsdWUgYmFzZWQgb24gSFcgcmVxdWlyZW1lbnRzLgotCSAqLwotCWlmIChJU19DSEVS UllWSUVXKHRvX2k5MTUoZGV2KSkpIHsKLQkJKmVycm9yX3BwbSA9IDA7Ci0KLQkJcmV0dXJuIGNh bGN1bGF0ZWRfY2xvY2stPnAgPiBiZXN0X2Nsb2NrLT5wOwotCX0KLQotCWlmIChkcm1fV0FSTl9P Tl9PTkNFKGRldiwgIXRhcmdldF9mcmVxKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JKmVycm9yX3Bw bSA9IGRpdl91NjQoMTAwMDAwMFVMTCAqCi0JCQkJYWJzKHRhcmdldF9mcmVxIC0gY2FsY3VsYXRl ZF9jbG9jay0+ZG90KSwKLQkJCSAgICAgdGFyZ2V0X2ZyZXEpOwotCS8qCi0JICogUHJlZmVyIGEg YmV0dGVyIFAgdmFsdWUgb3ZlciBhIGJldHRlciAoc21hbGxlcikgZXJyb3IgaWYgdGhlIGVycm9y Ci0JICogaXMgc21hbGwuIEVuc3VyZSB0aGlzIHByZWZlcmVuY2UgZm9yIGZ1dHVyZSBjb25maWd1 cmF0aW9ucyB0b28gYnkKLQkgKiBzZXR0aW5nIHRoZSBlcnJvciB0byAwLgotCSAqLwotCWlmICgq ZXJyb3JfcHBtIDwgMTAwICYmIGNhbGN1bGF0ZWRfY2xvY2stPnAgPiBiZXN0X2Nsb2NrLT5wKSB7 Ci0JCSplcnJvcl9wcG0gPSAwOwotCi0JCXJldHVybiB0cnVlOwotCX0KLQotCXJldHVybiAqZXJy b3JfcHBtICsgMTAgPCBiZXN0X2Vycm9yX3BwbTsKLX0KLQotLyoKLSAqIFJldHVybnMgYSBzZXQg b2YgZGl2aXNvcnMgZm9yIHRoZSBkZXNpcmVkIHRhcmdldCBjbG9jayB3aXRoIHRoZSBnaXZlbgot ICogcmVmY2xrLCBvciBGQUxTRS4gIFRoZSByZXR1cm5lZCB2YWx1ZXMgcmVwcmVzZW50IHRoZSBj bG9jayBlcXVhdGlvbjoKLSAqIHJlZmxjayAqICg1ICogKG0xICsgMikgKyAobTIgKyAyKSkgLyAo biArIDIpIC8gcDEgLyBwMi4KLSAqLwotc3RhdGljIGJvb2wKLXZsdl9maW5kX2Jlc3RfZHBsbChj b25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgKmxpbWl0LAotCQkgICBzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqY3J0Y19zdGF0ZSwKLQkJICAgaW50IHRhcmdldCwgaW50IHJlZmNsaywgc3RydWN0IGRw bGwgKm1hdGNoX2Nsb2NrLAotCQkgICBzdHJ1Y3QgZHBsbCAqYmVzdF9jbG9jaykKLXsKLQlzdHJ1 Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Y19zdGF0ZS0+dWFwaS5jcnRj KTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+YmFzZS5kZXY7Ci0Jc3RydWN0IGRw bGwgY2xvY2s7Ci0JdW5zaWduZWQgaW50IGJlc3RwcG0gPSAxMDAwMDAwOwotCS8qIG1pbiB1cGRh dGUgMTkuMiBNSHogKi8KLQlpbnQgbWF4X24gPSBtaW4obGltaXQtPm4ubWF4LCByZWZjbGsgLyAx OTIwMCk7Ci0JYm9vbCBmb3VuZCA9IGZhbHNlOwotCi0JdGFyZ2V0ICo9IDU7IC8qIGZhc3QgY2xv Y2sgKi8KLQotCW1lbXNldChiZXN0X2Nsb2NrLCAwLCBzaXplb2YoKmJlc3RfY2xvY2spKTsKLQot CS8qIGJhc2VkIG9uIGhhcmR3YXJlIHJlcXVpcmVtZW50LCBwcmVmZXIgc21hbGxlciBuIHRvIHBy ZWNpc2lvbiAqLwotCWZvciAoY2xvY2subiA9IGxpbWl0LT5uLm1pbjsgY2xvY2subiA8PSBtYXhf bjsgY2xvY2subisrKSB7Ci0JCWZvciAoY2xvY2sucDEgPSBsaW1pdC0+cDEubWF4OyBjbG9jay5w MSA+PSBsaW1pdC0+cDEubWluOyBjbG9jay5wMS0tKSB7Ci0JCQlmb3IgKGNsb2NrLnAyID0gbGlt aXQtPnAyLnAyX2Zhc3Q7IGNsb2NrLnAyID49IGxpbWl0LT5wMi5wMl9zbG93OwotCQkJICAgICBj bG9jay5wMiAtPSBjbG9jay5wMiA+IDEwID8gMiA6IDEpIHsKLQkJCQljbG9jay5wID0gY2xvY2su cDEgKiBjbG9jay5wMjsKLQkJCQkvKiBiYXNlZCBvbiBoYXJkd2FyZSByZXF1aXJlbWVudCwgcHJl ZmVyIGJpZ2dlciBtMSxtMiB2YWx1ZXMgKi8KLQkJCQlmb3IgKGNsb2NrLm0xID0gbGltaXQtPm0x Lm1pbjsgY2xvY2subTEgPD0gbGltaXQtPm0xLm1heDsgY2xvY2subTErKykgewotCQkJCQl1bnNp Z25lZCBpbnQgcHBtOwotCi0JCQkJCWNsb2NrLm0yID0gRElWX1JPVU5EX0NMT1NFU1QodGFyZ2V0 ICogY2xvY2sucCAqIGNsb2NrLm4sCi0JCQkJCQkJCSAgICAgcmVmY2xrICogY2xvY2subTEpOwot Ci0JCQkJCXZsdl9jYWxjX2RwbGxfcGFyYW1zKHJlZmNsaywgJmNsb2NrKTsKLQotCQkJCQlpZiAo IWludGVsX3BsbF9pc192YWxpZCh0b19pOTE1KGRldiksCi0JCQkJCQkJCWxpbWl0LAotCQkJCQkJ CQkmY2xvY2spKQotCQkJCQkJY29udGludWU7Ci0KLQkJCQkJaWYgKCF2bHZfUExMX2lzX29wdGlt YWwoZGV2LCB0YXJnZXQsCi0JCQkJCQkJCSZjbG9jaywKLQkJCQkJCQkJYmVzdF9jbG9jaywKLQkJ CQkJCQkJYmVzdHBwbSwgJnBwbSkpCi0JCQkJCQljb250aW51ZTsKLQotCQkJCQkqYmVzdF9jbG9j ayA9IGNsb2NrOwotCQkJCQliZXN0cHBtID0gcHBtOwotCQkJCQlmb3VuZCA9IHRydWU7Ci0JCQkJ fQotCQkJfQotCQl9Ci0JfQotCi0JcmV0dXJuIGZvdW5kOwotfQotCi0vKgotICogUmV0dXJucyBh IHNldCBvZiBkaXZpc29ycyBmb3IgdGhlIGRlc2lyZWQgdGFyZ2V0IGNsb2NrIHdpdGggdGhlIGdp dmVuCi0gKiByZWZjbGssIG9yIEZBTFNFLiAgVGhlIHJldHVybmVkIHZhbHVlcyByZXByZXNlbnQg dGhlIGNsb2NrIGVxdWF0aW9uOgotICogcmVmbGNrICogKDUgKiAobTEgKyAyKSArIChtMiArIDIp KSAvIChuICsgMikgLyBwMSAvIHAyLgotICovCi1zdGF0aWMgYm9vbAotY2h2X2ZpbmRfYmVzdF9k cGxsKGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCAqbGltaXQsCi0JCSAgIHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpjcnRjX3N0YXRlLAotCQkgICBpbnQgdGFyZ2V0LCBpbnQgcmVmY2xrLCBzdHJ1 Y3QgZHBsbCAqbWF0Y2hfY2xvY2ssCi0JCSAgIHN0cnVjdCBkcGxsICpiZXN0X2Nsb2NrKQotewot CXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjX3N0YXRlLT51YXBp LmNydGMpOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNlLmRldjsKLQl1bnNp Z25lZCBpbnQgYmVzdF9lcnJvcl9wcG07Ci0Jc3RydWN0IGRwbGwgY2xvY2s7Ci0JdTY0IG0yOwot CWludCBmb3VuZCA9IGZhbHNlOwotCi0JbWVtc2V0KGJlc3RfY2xvY2ssIDAsIHNpemVvZigqYmVz dF9jbG9jaykpOwotCWJlc3RfZXJyb3JfcHBtID0gMTAwMDAwMDsKLQotCS8qCi0JICogQmFzZWQg b24gaGFyZHdhcmUgZG9jLCB0aGUgbiBhbHdheXMgc2V0IHRvIDEsIGFuZCBtMSBhbHdheXMKLQkg KiBzZXQgdG8gMi4gIElmIHJlcXVpcmVzIHRvIHN1cHBvcnQgMjAwTWh6IHJlZmNsaywgd2UgbmVl ZCB0bwotCSAqIHJldmlzaXQgdGhpcyBiZWNhdXNlIG4gbWF5IG5vdCAxIGFueW1vcmUuCi0JICov Ci0JY2xvY2subiA9IDEsIGNsb2NrLm0xID0gMjsKLQl0YXJnZXQgKj0gNTsJLyogZmFzdCBjbG9j ayAqLwotCi0JZm9yIChjbG9jay5wMSA9IGxpbWl0LT5wMS5tYXg7IGNsb2NrLnAxID49IGxpbWl0 LT5wMS5taW47IGNsb2NrLnAxLS0pIHsKLQkJZm9yIChjbG9jay5wMiA9IGxpbWl0LT5wMi5wMl9m YXN0OwotCQkJCWNsb2NrLnAyID49IGxpbWl0LT5wMi5wMl9zbG93OwotCQkJCWNsb2NrLnAyIC09 IGNsb2NrLnAyID4gMTAgPyAyIDogMSkgewotCQkJdW5zaWduZWQgaW50IGVycm9yX3BwbTsKLQot CQkJY2xvY2sucCA9IGNsb2NrLnAxICogY2xvY2sucDI7Ci0KLQkJCW0yID0gRElWX1JPVU5EX0NM T1NFU1RfVUxMKG11bF91MzJfdTMyKHRhcmdldCwgY2xvY2sucCAqIGNsb2NrLm4pIDw8IDIyLAot CQkJCQkJICAgcmVmY2xrICogY2xvY2subTEpOwotCi0JCQlpZiAobTIgPiBJTlRfTUFYL2Nsb2Nr Lm0xKQotCQkJCWNvbnRpbnVlOwotCi0JCQljbG9jay5tMiA9IG0yOwotCi0JCQljaHZfY2FsY19k cGxsX3BhcmFtcyhyZWZjbGssICZjbG9jayk7Ci0KLQkJCWlmICghaW50ZWxfcGxsX2lzX3ZhbGlk KHRvX2k5MTUoZGV2KSwgbGltaXQsICZjbG9jaykpCi0JCQkJY29udGludWU7Ci0KLQkJCWlmICgh dmx2X1BMTF9pc19vcHRpbWFsKGRldiwgdGFyZ2V0LCAmY2xvY2ssIGJlc3RfY2xvY2ssCi0JCQkJ CQliZXN0X2Vycm9yX3BwbSwgJmVycm9yX3BwbSkpCi0JCQkJY29udGludWU7Ci0KLQkJCSpiZXN0 X2Nsb2NrID0gY2xvY2s7Ci0JCQliZXN0X2Vycm9yX3BwbSA9IGVycm9yX3BwbTsKLQkJCWZvdW5k ID0gdHJ1ZTsKLQkJfQotCX0KLQotCXJldHVybiBmb3VuZDsKLX0KLQotYm9vbCBieHRfZmluZF9i ZXN0X2RwbGwoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCi0JCQlzdHJ1Y3Qg ZHBsbCAqYmVzdF9jbG9jaykKLXsKLQlpbnQgcmVmY2xrID0gMTAwMDAwOwotCWNvbnN0IHN0cnVj dCBpbnRlbF9saW1pdCAqbGltaXQgPSAmaW50ZWxfbGltaXRzX2J4dDsKLQotCXJldHVybiBjaHZf ZmluZF9iZXN0X2RwbGwobGltaXQsIGNydGNfc3RhdGUsCi0JCQkJICBjcnRjX3N0YXRlLT5wb3J0 X2Nsb2NrLCByZWZjbGssCi0JCQkJICBOVUxMLCBiZXN0X2Nsb2NrKTsKLX0KLQogc3RhdGljIGJv b2wgcGlwZV9zY2FubGluZV9pc19tb3Zpbmcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LAogCQkJCSAgICBlbnVtIHBpcGUgcGlwZSkKIHsKQEAgLTUyODQsNyArNDUzMiw3IEBAIHN0 YXRpYyB2b2lkIGl2Yl91cGRhdGVfZmRpX2JjX2JpZnVyY2F0aW9uKGNvbnN0IHN0cnVjdCBpbnRl bF9jcnRjX3N0YXRlICpjcnRjX3N0CiAgKiBGaW5kcyB0aGUgZW5jb2RlciBhc3NvY2lhdGVkIHdp dGggdGhlIGdpdmVuIENSVEMuIFRoaXMgY2FuIG9ubHkgYmUKICAqIHVzZWQgd2hlbiB3ZSBrbm93 IHRoYXQgdGhlIENSVEMgaXNuJ3QgZmVlZGluZyBtdWx0aXBsZSBlbmNvZGVycyEKICAqLwotc3Rh dGljIHN0cnVjdCBpbnRlbF9lbmNvZGVyICoKK3N0cnVjdCBpbnRlbF9lbmNvZGVyICoKIGludGVs X2dldF9jcnRjX25ld19lbmNvZGVyKGNvbnN0IHN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKnN0 YXRlLAogCQkJICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCiB7 CkBAIC03OTYwLDQzICs3MjA4LDYgQEAgc3RhdGljIGJvb2wgaW50ZWxfcGFuZWxfdXNlX3NzYyhz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJCSYmICEoZGV2X3ByaXYtPnF1aXJr cyAmIFFVSVJLX0xWRFNfU1NDX0RJU0FCTEUpOwogfQogCi1zdGF0aWMgdTMyIHBudl9kcGxsX2Nv bXB1dGVfZnAoc3RydWN0IGRwbGwgKmRwbGwpCi17Ci0JcmV0dXJuICgxIDw8IGRwbGwtPm4pIDw8 IDE2IHwgZHBsbC0+bTI7Ci19Ci0KLXN0YXRpYyB1MzIgaTl4eF9kcGxsX2NvbXB1dGVfZnAoc3Ry dWN0IGRwbGwgKmRwbGwpCi17Ci0JcmV0dXJuIGRwbGwtPm4gPDwgMTYgfCBkcGxsLT5tMSA8PCA4 IHwgZHBsbC0+bTI7Ci19Ci0KLXN0YXRpYyB2b2lkIGk5eHhfdXBkYXRlX3BsbF9kaXZpZGVycyhz dHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKLQkJCQkgICAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRl ICpjcnRjX3N0YXRlLAotCQkJCSAgICAgc3RydWN0IGRwbGwgKnJlZHVjZWRfY2xvY2spCi17Ci0J c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjLT5iYXNlLmRl dik7Ci0JdTMyIGZwLCBmcDIgPSAwOwotCi0JaWYgKElTX1BJTkVWSUVXKGRldl9wcml2KSkgewot CQlmcCA9IHBudl9kcGxsX2NvbXB1dGVfZnAoJmNydGNfc3RhdGUtPmRwbGwpOwotCQlpZiAocmVk dWNlZF9jbG9jaykKLQkJCWZwMiA9IHBudl9kcGxsX2NvbXB1dGVfZnAocmVkdWNlZF9jbG9jayk7 Ci0JfSBlbHNlIHsKLQkJZnAgPSBpOXh4X2RwbGxfY29tcHV0ZV9mcCgmY3J0Y19zdGF0ZS0+ZHBs bCk7Ci0JCWlmIChyZWR1Y2VkX2Nsb2NrKQotCQkJZnAyID0gaTl4eF9kcGxsX2NvbXB1dGVfZnAo cmVkdWNlZF9jbG9jayk7Ci0JfQotCi0JY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZS5mcDAgPSBm cDsKLQotCWlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9M VkRTKSAmJgotCSAgICByZWR1Y2VkX2Nsb2NrKSB7Ci0JCWNydGNfc3RhdGUtPmRwbGxfaHdfc3Rh dGUuZnAxID0gZnAyOwotCX0gZWxzZSB7Ci0JCWNydGNfc3RhdGUtPmRwbGxfaHdfc3RhdGUuZnAx ID0gZnA7Ci0JfQotfQotCiBzdGF0aWMgdm9pZCB2bHZfcGxsYl9yZWNhbF9vcGFtcChzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcGlwZQogCQlwaXBlKQogewpAQCAtODEy MSwzOSArNzMzMiw2IEBAIHZvaWQgaW50ZWxfZHBfc2V0X21fbihjb25zdCBzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwgZW51bSBsaW5rX21fbl9zCiAJCWludGVsX2NwdV90cmFu c2NvZGVyX3NldF9tX24oY3J0Y19zdGF0ZSwgZHBfbV9uLCBkcF9tMl9uMik7CiB9CiAKLXN0YXRp YyB2b2lkIHZsdl9jb21wdXRlX2RwbGwoc3RydWN0IGludGVsX2NydGMgKmNydGMsCi0JCQkgICAg IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZykKLXsKLQlwaXBlX2NvbmZpZy0+ ZHBsbF9od19zdGF0ZS5kcGxsID0gRFBMTF9JTlRFR1JBVEVEX1JFRl9DTEtfVkxWIHwKLQkJRFBM TF9SRUZfQ0xLX0VOQUJMRV9WTFYgfCBEUExMX1ZHQV9NT0RFX0RJUzsKLQlpZiAoY3J0Yy0+cGlw ZSAhPSBQSVBFX0EpCi0JCXBpcGVfY29uZmlnLT5kcGxsX2h3X3N0YXRlLmRwbGwgfD0gRFBMTF9J TlRFR1JBVEVEX0NSSV9DTEtfVkxWOwotCi0JLyogRFBMTCBub3QgdXNlZCB3aXRoIERTSSwgYnV0 IHN0aWxsIG5lZWQgdGhlIHJlc3Qgc2V0IHVwICovCi0JaWYgKCFpbnRlbF9jcnRjX2hhc190eXBl KHBpcGVfY29uZmlnLCBJTlRFTF9PVVRQVVRfRFNJKSkKLQkJcGlwZV9jb25maWctPmRwbGxfaHdf c3RhdGUuZHBsbCB8PSBEUExMX1ZDT19FTkFCTEUgfAotCQkJRFBMTF9FWFRfQlVGRkVSX0VOQUJM RV9WTFY7Ci0KLQlwaXBlX2NvbmZpZy0+ZHBsbF9od19zdGF0ZS5kcGxsX21kID0KLQkJKHBpcGVf Y29uZmlnLT5waXhlbF9tdWx0aXBsaWVyIC0gMSkgPDwgRFBMTF9NRF9VRElfTVVMVElQTElFUl9T SElGVDsKLX0KLQotc3RhdGljIHZvaWQgY2h2X2NvbXB1dGVfZHBsbChzdHJ1Y3QgaW50ZWxfY3J0 YyAqY3J0YywKLQkJCSAgICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKQot ewotCXBpcGVfY29uZmlnLT5kcGxsX2h3X3N0YXRlLmRwbGwgPSBEUExMX1NTQ19SRUZfQ0xLX0NI ViB8Ci0JCURQTExfUkVGX0NMS19FTkFCTEVfVkxWIHwgRFBMTF9WR0FfTU9ERV9ESVM7Ci0JaWYg KGNydGMtPnBpcGUgIT0gUElQRV9BKQotCQlwaXBlX2NvbmZpZy0+ZHBsbF9od19zdGF0ZS5kcGxs IHw9IERQTExfSU5URUdSQVRFRF9DUklfQ0xLX1ZMVjsKLQotCS8qIERQTEwgbm90IHVzZWQgd2l0 aCBEU0ksIGJ1dCBzdGlsbCBuZWVkIHRoZSByZXN0IHNldCB1cCAqLwotCWlmICghaW50ZWxfY3J0 Y19oYXNfdHlwZShwaXBlX2NvbmZpZywgSU5URUxfT1VUUFVUX0RTSSkpCi0JCXBpcGVfY29uZmln LT5kcGxsX2h3X3N0YXRlLmRwbGwgfD0gRFBMTF9WQ09fRU5BQkxFOwotCi0JcGlwZV9jb25maWct PmRwbGxfaHdfc3RhdGUuZHBsbF9tZCA9Ci0JCShwaXBlX2NvbmZpZy0+cGl4ZWxfbXVsdGlwbGll ciAtIDEpIDw8IERQTExfTURfVURJX01VTFRJUExJRVJfU0hJRlQ7Ci19Ci0KIHN0YXRpYyB2b2lk IHZsdl9wcmVwYXJlX3BsbChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKIAkJCSAgICBjb25zdCBz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpCiB7CkBAIC04NDEzLDEyOCArNzU5 MSw3IEBAIHZvaWQgdmx2X2ZvcmNlX3BsbF9vZmYoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LCBlbnVtIHBpcGUgcGlwZSkKIAkJdmx2X2Rpc2FibGVfcGxsKGRldl9wcml2LCBwaXBl KTsKIH0KIAotc3RhdGljIHZvaWQgaTl4eF9jb21wdXRlX2RwbGwoc3RydWN0IGludGVsX2NydGMg KmNydGMsCi0JCQkgICAgICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKLQkJ CSAgICAgIHN0cnVjdCBkcGxsICpyZWR1Y2VkX2Nsb2NrKQotewotCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Yy0+YmFzZS5kZXYpOwotCXUzMiBkcGxsOwot CXN0cnVjdCBkcGxsICpjbG9jayA9ICZjcnRjX3N0YXRlLT5kcGxsOwotCi0JaTl4eF91cGRhdGVf cGxsX2RpdmlkZXJzKGNydGMsIGNydGNfc3RhdGUsIHJlZHVjZWRfY2xvY2spOwotCi0JZHBsbCA9 IERQTExfVkdBX01PREVfRElTOwotCi0JaWYgKGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0 ZSwgSU5URUxfT1VUUFVUX0xWRFMpKQotCQlkcGxsIHw9IERQTExCX01PREVfTFZEUzsKLQllbHNl Ci0JCWRwbGwgfD0gRFBMTEJfTU9ERV9EQUNfU0VSSUFMOwotCi0JaWYgKElTX0k5NDVHKGRldl9w cml2KSB8fCBJU19JOTQ1R00oZGV2X3ByaXYpIHx8Ci0JICAgIElTX0czMyhkZXZfcHJpdikgfHwg SVNfUElORVZJRVcoZGV2X3ByaXYpKSB7Ci0JCWRwbGwgfD0gKGNydGNfc3RhdGUtPnBpeGVsX211 bHRpcGxpZXIgLSAxKQotCQkJPDwgU0RWT19NVUxUSVBMSUVSX1NISUZUX0hJUkVTOwotCX0KLQot CWlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9TRFZPKSB8 fAotCSAgICBpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9IRE1J KSkKLQkJZHBsbCB8PSBEUExMX1NEVk9fSElHSF9TUEVFRDsKLQotCWlmIChpbnRlbF9jcnRjX2hh c19kcF9lbmNvZGVyKGNydGNfc3RhdGUpKQotCQlkcGxsIHw9IERQTExfU0RWT19ISUdIX1NQRUVE OwotCi0JLyogY29tcHV0ZSBiaXRtYXNrIGZyb20gcDEgdmFsdWUgKi8KLQlpZiAoSVNfUElORVZJ RVcoZGV2X3ByaXYpKQotCQlkcGxsIHw9ICgxIDw8IChjbG9jay0+cDEgLSAxKSkgPDwgRFBMTF9G UEEwMV9QMV9QT1NUX0RJVl9TSElGVF9QSU5FVklFVzsKLQllbHNlIHsKLQkJZHBsbCB8PSAoMSA8 PCAoY2xvY2stPnAxIC0gMSkpIDw8IERQTExfRlBBMDFfUDFfUE9TVF9ESVZfU0hJRlQ7Ci0JCWlm IChJU19HNFgoZGV2X3ByaXYpICYmIHJlZHVjZWRfY2xvY2spCi0JCQlkcGxsIHw9ICgxIDw8IChy ZWR1Y2VkX2Nsb2NrLT5wMSAtIDEpKSA8PCBEUExMX0ZQQTFfUDFfUE9TVF9ESVZfU0hJRlQ7Ci0J fQotCXN3aXRjaCAoY2xvY2stPnAyKSB7Ci0JY2FzZSA1OgotCQlkcGxsIHw9IERQTExfREFDX1NF UklBTF9QMl9DTE9DS19ESVZfNTsKLQkJYnJlYWs7Ci0JY2FzZSA3OgotCQlkcGxsIHw9IERQTExC X0xWRFNfUDJfQ0xPQ0tfRElWXzc7Ci0JCWJyZWFrOwotCWNhc2UgMTA6Ci0JCWRwbGwgfD0gRFBM TF9EQUNfU0VSSUFMX1AyX0NMT0NLX0RJVl8xMDsKLQkJYnJlYWs7Ci0JY2FzZSAxNDoKLQkJZHBs bCB8PSBEUExMQl9MVkRTX1AyX0NMT0NLX0RJVl8xNDsKLQkJYnJlYWs7Ci0JfQotCWlmIChJTlRF TF9HRU4oZGV2X3ByaXYpID49IDQpCi0JCWRwbGwgfD0gKDYgPDwgUExMX0xPQURfUFVMU0VfUEhB U0VfU0hJRlQpOwotCi0JaWYgKGNydGNfc3RhdGUtPnNkdm9fdHZfY2xvY2spCi0JCWRwbGwgfD0g UExMX1JFRl9JTlBVVF9UVkNMS0lOQkM7Ci0JZWxzZSBpZiAoaW50ZWxfY3J0Y19oYXNfdHlwZShj cnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfTFZEUykgJiYKLQkJIGludGVsX3BhbmVsX3VzZV9zc2Mo ZGV2X3ByaXYpKQotCQlkcGxsIHw9IFBMTEJfUkVGX0lOUFVUX1NQUkVBRFNQRUNUUlVNSU47Ci0J ZWxzZQotCQlkcGxsIHw9IFBMTF9SRUZfSU5QVVRfRFJFRkNMSzsKLQotCWRwbGwgfD0gRFBMTF9W Q09fRU5BQkxFOwotCWNydGNfc3RhdGUtPmRwbGxfaHdfc3RhdGUuZHBsbCA9IGRwbGw7Ci0KLQlp ZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA0KSB7Ci0JCXUzMiBkcGxsX21kID0gKGNydGNfc3Rh dGUtPnBpeGVsX211bHRpcGxpZXIgLSAxKQotCQkJPDwgRFBMTF9NRF9VRElfTVVMVElQTElFUl9T SElGVDsKLQkJY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZS5kcGxsX21kID0gZHBsbF9tZDsKLQl9 Ci19Ci0KLXN0YXRpYyB2b2lkIGk4eHhfY29tcHV0ZV9kcGxsKHN0cnVjdCBpbnRlbF9jcnRjICpj cnRjLAotCQkJICAgICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCi0JCQkg ICAgICBzdHJ1Y3QgZHBsbCAqcmVkdWNlZF9jbG9jaykKLXsKLQlzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2ID0gY3J0Yy0+YmFzZS5kZXY7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gdG9faTkxNShkZXYpOwotCXUzMiBkcGxsOwotCXN0cnVjdCBkcGxsICpjbG9jayA9ICZjcnRj X3N0YXRlLT5kcGxsOwotCi0JaTl4eF91cGRhdGVfcGxsX2RpdmlkZXJzKGNydGMsIGNydGNfc3Rh dGUsIHJlZHVjZWRfY2xvY2spOwotCi0JZHBsbCA9IERQTExfVkdBX01PREVfRElTOwotCi0JaWYg KGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX0xWRFMpKSB7Ci0J CWRwbGwgfD0gKDEgPDwgKGNsb2NrLT5wMSAtIDEpKSA8PCBEUExMX0ZQQTAxX1AxX1BPU1RfRElW X1NISUZUOwotCX0gZWxzZSB7Ci0JCWlmIChjbG9jay0+cDEgPT0gMikKLQkJCWRwbGwgfD0gUExM X1AxX0RJVklERV9CWV9UV087Ci0JCWVsc2UKLQkJCWRwbGwgfD0gKGNsb2NrLT5wMSAtIDIpIDw8 IERQTExfRlBBMDFfUDFfUE9TVF9ESVZfU0hJRlQ7Ci0JCWlmIChjbG9jay0+cDIgPT0gNCkKLQkJ CWRwbGwgfD0gUExMX1AyX0RJVklERV9CWV80OwotCX0KLQotCS8qCi0JICogQnNwZWM6Ci0JICog IltBbG1hZG9yIEVycmF0YX06IEZvciB0aGUgY29ycmVjdCBvcGVyYXRpb24gb2YgdGhlIG11eGVk IERWTyBwaW5zCi0JICogIChHREVWU0VMQi9JMkNkYXRhLCBHSVJEQlkvSTJDQ2xrKSBhbmQgKEdG UkFNRUIvRFZJX0RhdGEsCi0JICogIEdUUkRZQi9EVklfQ2xrKTogQml0IDMxIChEUExMIFZDTyBF bmFibGUpIGFuZCBCaXQgMzAgKDJYIENsb2NrCi0JICogIEVuYWJsZSkgbXVzdCBiZSBzZXQgdG8g 4oCcMeKAnSBpbiBib3RoIHRoZSBEUExMIEEgQ29udHJvbCBSZWdpc3RlcgotCSAqICAoMDYwMTRo LTA2MDE3aCkgYW5kIERQTEwgQiBDb250cm9sIFJlZ2lzdGVyICgwNjAxOGgtMDYwMUJoKS4iCi0J ICoKLQkgKiBGb3Igc2ltcGxpY2l0eSBXZSBzaW1wbHkga2VlcCBib3RoIGJpdHMgYWx3YXlzIGVu YWJsZWQgaW4KLQkgKiBib3RoIERQTExTLiBUaGUgc3BlYyBzYXlzIHdlIHNob3VsZCBkaXNhYmxl IHRoZSBEVk8gMlggY2xvY2sKLQkgKiB3aGVuIG5vdCBuZWVkZWQsIGJ1dCB0aGlzIHNlZW1zIHRv IHdvcmsgZmluZSBpbiBwcmFjdGljZS4KLQkgKi8KLQlpZiAoSVNfSTgzMChkZXZfcHJpdikgfHwK LQkgICAgaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfRFZPKSkK LQkJZHBsbCB8PSBEUExMX0RWT18yWF9NT0RFOwotCi0JaWYgKGludGVsX2NydGNfaGFzX3R5cGUo Y3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX0xWRFMpICYmCi0JICAgIGludGVsX3BhbmVsX3VzZV9z c2MoZGV2X3ByaXYpKQotCQlkcGxsIHw9IFBMTEJfUkVGX0lOUFVUX1NQUkVBRFNQRUNUUlVNSU47 Ci0JZWxzZQotCQlkcGxsIHw9IFBMTF9SRUZfSU5QVVRfRFJFRkNMSzsKIAotCWRwbGwgfD0gRFBM TF9WQ09fRU5BQkxFOwotCWNydGNfc3RhdGUtPmRwbGxfaHdfc3RhdGUuZHBsbCA9IGRwbGw7Ci19 CiAKIHN0YXRpYyB2b2lkIGludGVsX3NldF90cmFuc2NvZGVyX3RpbWluZ3MoY29uc3Qgc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCiB7CkBAIC04NzQwLDIwNyArNzc5Nyw2IEBA IHN0YXRpYyB2b2lkIGk5eHhfc2V0X3BpcGVjb25mKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpjcnRjX3N0YXRlKQogCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgUElQRUNP TkYoY3J0Yy0+cGlwZSkpOwogfQogCi1zdGF0aWMgaW50IGk4eHhfY3J0Y19jb21wdXRlX2Nsb2Nr KHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAotCQkJCSAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRl ICpjcnRjX3N0YXRlKQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNlLmRl djsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Ci0J Y29uc3Qgc3RydWN0IGludGVsX2xpbWl0ICpsaW1pdDsKLQlpbnQgcmVmY2xrID0gNDgwMDA7Ci0K LQltZW1zZXQoJmNydGNfc3RhdGUtPmRwbGxfaHdfc3RhdGUsIDAsCi0JICAgICAgIHNpemVvZihj cnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlKSk7Ci0KLQlpZiAoaW50ZWxfY3J0Y19oYXNfdHlwZShj cnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfTFZEUykpIHsKLQkJaWYgKGludGVsX3BhbmVsX3VzZV9z c2MoZGV2X3ByaXYpKSB7Ci0JCQlyZWZjbGsgPSBkZXZfcHJpdi0+dmJ0Lmx2ZHNfc3NjX2ZyZXE7 Ci0JCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKLQkJCQkgICAgInVzaW5nIFNTQyByZWZl cmVuY2UgY2xvY2sgb2YgJWQga0h6XG4iLAotCQkJCSAgICByZWZjbGspOwotCQl9Ci0KLQkJbGlt aXQgPSAmaW50ZWxfbGltaXRzX2k4eHhfbHZkczsKLQl9IGVsc2UgaWYgKGludGVsX2NydGNfaGFz X3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX0RWTykpIHsKLQkJbGltaXQgPSAmaW50ZWxf bGltaXRzX2k4eHhfZHZvOwotCX0gZWxzZSB7Ci0JCWxpbWl0ID0gJmludGVsX2xpbWl0c19pOHh4 X2RhYzsKLQl9Ci0KLQlpZiAoIWNydGNfc3RhdGUtPmNsb2NrX3NldCAmJgotCSAgICAhaTl4eF9m aW5kX2Jlc3RfZHBsbChsaW1pdCwgY3J0Y19zdGF0ZSwgY3J0Y19zdGF0ZS0+cG9ydF9jbG9jaywK LQkJCQkgcmVmY2xrLCBOVUxMLCAmY3J0Y19zdGF0ZS0+ZHBsbCkpIHsKLQkJZHJtX2VycigmZGV2 X3ByaXYtPmRybSwKLQkJCSJDb3VsZG4ndCBmaW5kIFBMTCBzZXR0aW5ncyBmb3IgbW9kZSFcbiIp OwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpOHh4X2NvbXB1dGVfZHBsbChjcnRjLCBjcnRj X3N0YXRlLCBOVUxMKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGc0eF9jcnRjX2Nv bXB1dGVfY2xvY2soc3RydWN0IGludGVsX2NydGMgKmNydGMsCi0JCQkJICBzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSB0b19pOTE1KGNydGMtPmJhc2UuZGV2KTsKLQljb25zdCBzdHJ1Y3QgaW50ZWxfbGlt aXQgKmxpbWl0OwotCWludCByZWZjbGsgPSA5NjAwMDsKLQotCW1lbXNldCgmY3J0Y19zdGF0ZS0+ ZHBsbF9od19zdGF0ZSwgMCwKLQkgICAgICAgc2l6ZW9mKGNydGNfc3RhdGUtPmRwbGxfaHdfc3Rh dGUpKTsKLQotCWlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBV VF9MVkRTKSkgewotCQlpZiAoaW50ZWxfcGFuZWxfdXNlX3NzYyhkZXZfcHJpdikpIHsKLQkJCXJl ZmNsayA9IGRldl9wcml2LT52YnQubHZkc19zc2NfZnJlcTsKLQkJCWRybV9kYmdfa21zKCZkZXZf cHJpdi0+ZHJtLAotCQkJCSAgICAidXNpbmcgU1NDIHJlZmVyZW5jZSBjbG9jayBvZiAlZCBrSHpc biIsCi0JCQkJICAgIHJlZmNsayk7Ci0JCX0KLQotCQlpZiAoaW50ZWxfaXNfZHVhbF9saW5rX2x2 ZHMoZGV2X3ByaXYpKQotCQkJbGltaXQgPSAmaW50ZWxfbGltaXRzX2c0eF9kdWFsX2NoYW5uZWxf bHZkczsKLQkJZWxzZQotCQkJbGltaXQgPSAmaW50ZWxfbGltaXRzX2c0eF9zaW5nbGVfY2hhbm5l bF9sdmRzOwotCX0gZWxzZSBpZiAoaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjX3N0YXRlLCBJTlRF TF9PVVRQVVRfSERNSSkgfHwKLQkJICAgaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjX3N0YXRlLCBJ TlRFTF9PVVRQVVRfQU5BTE9HKSkgewotCQlsaW1pdCA9ICZpbnRlbF9saW1pdHNfZzR4X2hkbWk7 Ci0JfSBlbHNlIGlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBV VF9TRFZPKSkgewotCQlsaW1pdCA9ICZpbnRlbF9saW1pdHNfZzR4X3Nkdm87Ci0JfSBlbHNlIHsK LQkJLyogVGhlIG9wdGlvbiBpcyBmb3Igb3RoZXIgb3V0cHV0cyAqLwotCQlsaW1pdCA9ICZpbnRl bF9saW1pdHNfaTl4eF9zZHZvOwotCX0KLQotCWlmICghY3J0Y19zdGF0ZS0+Y2xvY2tfc2V0ICYm Ci0JICAgICFnNHhfZmluZF9iZXN0X2RwbGwobGltaXQsIGNydGNfc3RhdGUsIGNydGNfc3RhdGUt PnBvcnRfY2xvY2ssCi0JCQkJcmVmY2xrLCBOVUxMLCAmY3J0Y19zdGF0ZS0+ZHBsbCkpIHsKLQkJ ZHJtX2VycigmZGV2X3ByaXYtPmRybSwKLQkJCSJDb3VsZG4ndCBmaW5kIFBMTCBzZXR0aW5ncyBm b3IgbW9kZSFcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpOXh4X2NvbXB1dGVfZHBs bChjcnRjLCBjcnRjX3N0YXRlLCBOVUxMKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50 IHBudl9jcnRjX2NvbXB1dGVfY2xvY2soc3RydWN0IGludGVsX2NydGMgKmNydGMsCi0JCQkJICBz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKLXsKLQlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2ID0gY3J0Yy0+YmFzZS5kZXY7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gdG9faTkxNShkZXYpOwotCWNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCAqbGltaXQ7Ci0J aW50IHJlZmNsayA9IDk2MDAwOwotCi0JbWVtc2V0KCZjcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRl LCAwLAotCSAgICAgICBzaXplb2YoY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZSkpOwotCi0JaWYg KGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX0xWRFMpKSB7Ci0J CWlmIChpbnRlbF9wYW5lbF91c2Vfc3NjKGRldl9wcml2KSkgewotCQkJcmVmY2xrID0gZGV2X3By aXYtPnZidC5sdmRzX3NzY19mcmVxOwotCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0J CQkJICAgICJ1c2luZyBTU0MgcmVmZXJlbmNlIGNsb2NrIG9mICVkIGtIelxuIiwKLQkJCQkgICAg cmVmY2xrKTsKLQkJfQotCi0JCWxpbWl0ID0gJnBudl9saW1pdHNfbHZkczsKLQl9IGVsc2Ugewot CQlsaW1pdCA9ICZwbnZfbGltaXRzX3Nkdm87Ci0JfQotCi0JaWYgKCFjcnRjX3N0YXRlLT5jbG9j a19zZXQgJiYKLQkgICAgIXBudl9maW5kX2Jlc3RfZHBsbChsaW1pdCwgY3J0Y19zdGF0ZSwgY3J0 Y19zdGF0ZS0+cG9ydF9jbG9jaywKLQkJCQlyZWZjbGssIE5VTEwsICZjcnRjX3N0YXRlLT5kcGxs KSkgewotCQlkcm1fZXJyKCZkZXZfcHJpdi0+ZHJtLAotCQkJIkNvdWxkbid0IGZpbmQgUExMIHNl dHRpbmdzIGZvciBtb2RlIVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWk5eHhfY29t cHV0ZV9kcGxsKGNydGMsIGNydGNfc3RhdGUsIE5VTEwpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0 YXRpYyBpbnQgaTl4eF9jcnRjX2NvbXB1dGVfY2xvY2soc3RydWN0IGludGVsX2NydGMgKmNydGMs Ci0JCQkJICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCi17Ci0Jc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmJhc2UuZGV2OwotCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKLQljb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQg KmxpbWl0OwotCWludCByZWZjbGsgPSA5NjAwMDsKLQotCW1lbXNldCgmY3J0Y19zdGF0ZS0+ZHBs bF9od19zdGF0ZSwgMCwKLQkgICAgICAgc2l6ZW9mKGNydGNfc3RhdGUtPmRwbGxfaHdfc3RhdGUp KTsKLQotCWlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9M VkRTKSkgewotCQlpZiAoaW50ZWxfcGFuZWxfdXNlX3NzYyhkZXZfcHJpdikpIHsKLQkJCXJlZmNs ayA9IGRldl9wcml2LT52YnQubHZkc19zc2NfZnJlcTsKLQkJCWRybV9kYmdfa21zKCZkZXZfcHJp di0+ZHJtLAotCQkJCSAgICAidXNpbmcgU1NDIHJlZmVyZW5jZSBjbG9jayBvZiAlZCBrSHpcbiIs Ci0JCQkJICAgIHJlZmNsayk7Ci0JCX0KLQotCQlsaW1pdCA9ICZpbnRlbF9saW1pdHNfaTl4eF9s dmRzOwotCX0gZWxzZSB7Ci0JCWxpbWl0ID0gJmludGVsX2xpbWl0c19pOXh4X3Nkdm87Ci0JfQot Ci0JaWYgKCFjcnRjX3N0YXRlLT5jbG9ja19zZXQgJiYKLQkgICAgIWk5eHhfZmluZF9iZXN0X2Rw bGwobGltaXQsIGNydGNfc3RhdGUsIGNydGNfc3RhdGUtPnBvcnRfY2xvY2ssCi0JCQkJIHJlZmNs aywgTlVMTCwgJmNydGNfc3RhdGUtPmRwbGwpKSB7Ci0JCWRybV9lcnIoJmRldl9wcml2LT5kcm0s Ci0JCQkiQ291bGRuJ3QgZmluZCBQTEwgc2V0dGluZ3MgZm9yIG1vZGUhXG4iKTsKLQkJcmV0dXJu IC1FSU5WQUw7Ci0JfQotCi0JaTl4eF9jb21wdXRlX2RwbGwoY3J0YywgY3J0Y19zdGF0ZSwgTlVM TCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBjaHZfY3J0Y19jb21wdXRlX2Nsb2Nr KHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAotCQkJCSAgc3RydWN0IGludGVsX2NydGNfc3RhdGUg KmNydGNfc3RhdGUpCi17Ci0JaW50IHJlZmNsayA9IDEwMDAwMDsKLQljb25zdCBzdHJ1Y3QgaW50 ZWxfbGltaXQgKmxpbWl0ID0gJmludGVsX2xpbWl0c19jaHY7Ci0Jc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmk5MTUgPSB0b19pOTE1KGNydGNfc3RhdGUtPnVhcGkuY3J0Yy0+ZGV2KTsKLQotCW1l bXNldCgmY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZSwgMCwKLQkgICAgICAgc2l6ZW9mKGNydGNf c3RhdGUtPmRwbGxfaHdfc3RhdGUpKTsKLQotCWlmICghY3J0Y19zdGF0ZS0+Y2xvY2tfc2V0ICYm Ci0JICAgICFjaHZfZmluZF9iZXN0X2RwbGwobGltaXQsIGNydGNfc3RhdGUsIGNydGNfc3RhdGUt PnBvcnRfY2xvY2ssCi0JCQkJcmVmY2xrLCBOVUxMLCAmY3J0Y19zdGF0ZS0+ZHBsbCkpIHsKLQkJ ZHJtX2VycigmaTkxNS0+ZHJtLCAiQ291bGRuJ3QgZmluZCBQTEwgc2V0dGluZ3MgZm9yIG1vZGUh XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JY2h2X2NvbXB1dGVfZHBsbChjcnRjLCBj cnRjX3N0YXRlKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZsdl9jcnRjX2NvbXB1 dGVfY2xvY2soc3RydWN0IGludGVsX2NydGMgKmNydGMsCi0JCQkJICBzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKLXsKLQlpbnQgcmVmY2xrID0gMTAwMDAwOwotCWNvbnN0IHN0 cnVjdCBpbnRlbF9saW1pdCAqbGltaXQgPSAmaW50ZWxfbGltaXRzX3ZsdjsKLQlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUoY3J0Y19zdGF0ZS0+dWFwaS5jcnRjLT5kZXYp OwotCi0JbWVtc2V0KCZjcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlLCAwLAotCSAgICAgICBzaXpl b2YoY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZSkpOwotCi0JaWYgKCFjcnRjX3N0YXRlLT5jbG9j a19zZXQgJiYKLQkgICAgIXZsdl9maW5kX2Jlc3RfZHBsbChsaW1pdCwgY3J0Y19zdGF0ZSwgY3J0 Y19zdGF0ZS0+cG9ydF9jbG9jaywKLQkJCQlyZWZjbGssIE5VTEwsICZjcnRjX3N0YXRlLT5kcGxs KSkgewotCQlkcm1fZXJyKCZpOTE1LT5kcm0sICAiQ291bGRuJ3QgZmluZCBQTEwgc2V0dGluZ3Mg Zm9yIG1vZGUhXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jdmx2X2NvbXB1dGVfZHBs bChjcnRjLCBjcnRjX3N0YXRlKTsKLQotCXJldHVybiAwOwotfQogCiBzdGF0aWMgYm9vbCBpOXh4 X2hhc19wZml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHsKQEAgLTk5NTEs MTcyICs4ODA3LDYgQEAgaW50IGlsa19nZXRfbGFuZXNfcmVxdWlyZWQoaW50IHRhcmdldF9jbG9j aywgaW50IGxpbmtfYncsIGludCBicHApCiAJcmV0dXJuIERJVl9ST1VORF9VUChicHMsIGxpbmtf YncgKiA4KTsKIH0KIAotc3RhdGljIGJvb2wgaWxrX25lZWRzX2ZiX2NiX3R1bmUoc3RydWN0IGRw bGwgKmRwbGwsIGludCBmYWN0b3IpCi17Ci0JcmV0dXJuIGk5eHhfZHBsbF9jb21wdXRlX20oZHBs bCkgPCBmYWN0b3IgKiBkcGxsLT5uOwotfQotCi1zdGF0aWMgdm9pZCBpbGtfY29tcHV0ZV9kcGxs KHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAotCQkJICAgICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0 ZSAqY3J0Y19zdGF0ZSwKLQkJCSAgICAgc3RydWN0IGRwbGwgKnJlZHVjZWRfY2xvY2spCi17Ci0J c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjLT5iYXNlLmRl dik7Ci0JdTMyIGRwbGwsIGZwLCBmcDI7Ci0JaW50IGZhY3RvcjsKLQotCS8qIEVuYWJsZSBhdXRv dHVuaW5nIG9mIHRoZSBQTEwgY2xvY2sgKGlmIHBlcm1pc3NpYmxlKSAqLwotCWZhY3RvciA9IDIx OwotCWlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9MVkRT KSkgewotCQlpZiAoKGludGVsX3BhbmVsX3VzZV9zc2MoZGV2X3ByaXYpICYmCi0JCSAgICAgZGV2 X3ByaXYtPnZidC5sdmRzX3NzY19mcmVxID09IDEwMDAwMCkgfHwKLQkJICAgIChIQVNfUENIX0lC WChkZXZfcHJpdikgJiYKLQkJICAgICBpbnRlbF9pc19kdWFsX2xpbmtfbHZkcyhkZXZfcHJpdikp KQotCQkJZmFjdG9yID0gMjU7Ci0JfSBlbHNlIGlmIChjcnRjX3N0YXRlLT5zZHZvX3R2X2Nsb2Nr KSB7Ci0JCWZhY3RvciA9IDIwOwotCX0KLQotCWZwID0gaTl4eF9kcGxsX2NvbXB1dGVfZnAoJmNy dGNfc3RhdGUtPmRwbGwpOwotCi0JaWYgKGlsa19uZWVkc19mYl9jYl90dW5lKCZjcnRjX3N0YXRl LT5kcGxsLCBmYWN0b3IpKQotCQlmcCB8PSBGUF9DQl9UVU5FOwotCi0JaWYgKHJlZHVjZWRfY2xv Y2spIHsKLQkJZnAyID0gaTl4eF9kcGxsX2NvbXB1dGVfZnAocmVkdWNlZF9jbG9jayk7Ci0KLQkJ aWYgKHJlZHVjZWRfY2xvY2stPm0gPCBmYWN0b3IgKiByZWR1Y2VkX2Nsb2NrLT5uKQotCQkJZnAy IHw9IEZQX0NCX1RVTkU7Ci0JfSBlbHNlIHsKLQkJZnAyID0gZnA7Ci0JfQotCi0JZHBsbCA9IDA7 Ci0KLQlpZiAoaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfTFZE UykpCi0JCWRwbGwgfD0gRFBMTEJfTU9ERV9MVkRTOwotCWVsc2UKLQkJZHBsbCB8PSBEUExMQl9N T0RFX0RBQ19TRVJJQUw7Ci0KLQlkcGxsIHw9IChjcnRjX3N0YXRlLT5waXhlbF9tdWx0aXBsaWVy IC0gMSkKLQkJPDwgUExMX1JFRl9TRFZPX0hETUlfTVVMVElQTElFUl9TSElGVDsKLQotCWlmIChp bnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9TRFZPKSB8fAotCSAg ICBpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9IRE1JKSkKLQkJ ZHBsbCB8PSBEUExMX1NEVk9fSElHSF9TUEVFRDsKLQotCWlmIChpbnRlbF9jcnRjX2hhc19kcF9l bmNvZGVyKGNydGNfc3RhdGUpKQotCQlkcGxsIHw9IERQTExfU0RWT19ISUdIX1NQRUVEOwotCi0J LyoKLQkgKiBUaGUgaGlnaCBzcGVlZCBJTyBjbG9jayBpcyBvbmx5IHJlYWxseSByZXF1aXJlZCBm b3IKLQkgKiBTRFZPL0hETUkvRFAsIGJ1dCB3ZSBhbHNvIGVuYWJsZSBpdCBmb3IgQ1JUIHRvIG1h a2UgaXQKLQkgKiBwb3NzaWJsZSB0byBzaGFyZSB0aGUgRFBMTCBiZXR3ZWVuIENSVCBhbmQgSERN SS4gRW5hYmxpbmcKLQkgKiB0aGUgY2xvY2sgbmVlZGxlc3NseSBkb2VzIG5vIHJlYWwgaGFybSwg ZXhjZXB0IHVzZSB1cCBhCi0JICogYml0IG9mIHBvd2VyIHBvdGVudGlhbGx5LgotCSAqCi0JICog V2UnbGwgbGltaXQgdGhpcyB0byBJVkIgd2l0aCAzIHBpcGVzLCBzaW5jZSBpdCBoYXMgb25seSB0 d28KLQkgKiBEUExMcyBhbmQgc28gRFBMTCBzaGFyaW5nIGlzIHRoZSBvbmx5IHdheSB0byBnZXQg dGhyZWUgcGlwZXMKLQkgKiBkcml2aW5nIFBDSCBwb3J0cyBhdCB0aGUgc2FtZSB0aW1lLiBPbiBT TkIgd2UgY291bGQgZG8gdGhpcywKLQkgKiBhbmQgcG90ZW50aWFsbHkgYXZvaWQgZW5hYmxpbmcg dGhlIHNlY29uZCBEUExMLCBidXQgaXQncyBub3QKLQkgKiBjbGVhciBpZiBpdCcncyBhIHdpbiBv ciBsb3NzIHBvd2VyIHdpc2UuIE5vIHBvaW50IGluIGRvaW5nCi0JICogdGhpcyBvbiBJTEsgYXQg YWxsIHNpbmNlIGl0IGhhcyBhIGZpeGVkIERQTEw8LT5waXBlIG1hcHBpbmcuCi0JICovCi0JaWYg KElOVEVMX05VTV9QSVBFUyhkZXZfcHJpdikgPT0gMyAmJgotCSAgICBpbnRlbF9jcnRjX2hhc190 eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9BTkFMT0cpKQotCQlkcGxsIHw9IERQTExfU0RW T19ISUdIX1NQRUVEOwotCi0JLyogY29tcHV0ZSBiaXRtYXNrIGZyb20gcDEgdmFsdWUgKi8KLQlk cGxsIHw9ICgxIDw8IChjcnRjX3N0YXRlLT5kcGxsLnAxIC0gMSkpIDw8IERQTExfRlBBMDFfUDFf UE9TVF9ESVZfU0hJRlQ7Ci0JLyogYWxzbyBGUEExICovCi0JZHBsbCB8PSAoMSA8PCAoY3J0Y19z dGF0ZS0+ZHBsbC5wMSAtIDEpKSA8PCBEUExMX0ZQQTFfUDFfUE9TVF9ESVZfU0hJRlQ7Ci0KLQlz d2l0Y2ggKGNydGNfc3RhdGUtPmRwbGwucDIpIHsKLQljYXNlIDU6Ci0JCWRwbGwgfD0gRFBMTF9E QUNfU0VSSUFMX1AyX0NMT0NLX0RJVl81OwotCQlicmVhazsKLQljYXNlIDc6Ci0JCWRwbGwgfD0g RFBMTEJfTFZEU19QMl9DTE9DS19ESVZfNzsKLQkJYnJlYWs7Ci0JY2FzZSAxMDoKLQkJZHBsbCB8 PSBEUExMX0RBQ19TRVJJQUxfUDJfQ0xPQ0tfRElWXzEwOwotCQlicmVhazsKLQljYXNlIDE0Ogot CQlkcGxsIHw9IERQTExCX0xWRFNfUDJfQ0xPQ0tfRElWXzE0OwotCQlicmVhazsKLQl9Ci0KLQlp ZiAoaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfTFZEUykgJiYK LQkgICAgaW50ZWxfcGFuZWxfdXNlX3NzYyhkZXZfcHJpdikpCi0JCWRwbGwgfD0gUExMQl9SRUZf SU5QVVRfU1BSRUFEU1BFQ1RSVU1JTjsKLQllbHNlCi0JCWRwbGwgfD0gUExMX1JFRl9JTlBVVF9E UkVGQ0xLOwotCi0JZHBsbCB8PSBEUExMX1ZDT19FTkFCTEU7Ci0KLQljcnRjX3N0YXRlLT5kcGxs X2h3X3N0YXRlLmRwbGwgPSBkcGxsOwotCWNydGNfc3RhdGUtPmRwbGxfaHdfc3RhdGUuZnAwID0g ZnA7Ci0JY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZS5mcDEgPSBmcDI7Ci19Ci0KLXN0YXRpYyBp bnQgaWxrX2NydGNfY29tcHV0ZV9jbG9jayhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKLQkJCQkg IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQotewotCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Yy0+YmFzZS5kZXYpOwotCXN0cnVjdCBp bnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlID0KLQkJdG9faW50ZWxfYXRvbWljX3N0YXRlKGNydGNf c3RhdGUtPnVhcGkuc3RhdGUpOwotCWNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCAqbGltaXQ7Ci0J aW50IHJlZmNsayA9IDEyMDAwMDsKLQotCW1lbXNldCgmY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0 ZSwgMCwKLQkgICAgICAgc2l6ZW9mKGNydGNfc3RhdGUtPmRwbGxfaHdfc3RhdGUpKTsKLQotCS8q IENQVSBlRFAgaXMgdGhlIG9ubHkgb3V0cHV0IHRoYXQgZG9lc24ndCBuZWVkIGEgUENIIFBMTCBv ZiBpdHMgb3duLiAqLwotCWlmICghY3J0Y19zdGF0ZS0+aGFzX3BjaF9lbmNvZGVyKQotCQlyZXR1 cm4gMDsKLQotCWlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBV VF9MVkRTKSkgewotCQlpZiAoaW50ZWxfcGFuZWxfdXNlX3NzYyhkZXZfcHJpdikpIHsKLQkJCWRy bV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAotCQkJCSAgICAidXNpbmcgU1NDIHJlZmVyZW5jZSBj bG9jayBvZiAlZCBrSHpcbiIsCi0JCQkJICAgIGRldl9wcml2LT52YnQubHZkc19zc2NfZnJlcSk7 Ci0JCQlyZWZjbGsgPSBkZXZfcHJpdi0+dmJ0Lmx2ZHNfc3NjX2ZyZXE7Ci0JCX0KLQotCQlpZiAo aW50ZWxfaXNfZHVhbF9saW5rX2x2ZHMoZGV2X3ByaXYpKSB7Ci0JCQlpZiAocmVmY2xrID09IDEw MDAwMCkKLQkJCQlsaW1pdCA9ICZpbGtfbGltaXRzX2R1YWxfbHZkc18xMDBtOwotCQkJZWxzZQot CQkJCWxpbWl0ID0gJmlsa19saW1pdHNfZHVhbF9sdmRzOwotCQl9IGVsc2UgewotCQkJaWYgKHJl ZmNsayA9PSAxMDAwMDApCi0JCQkJbGltaXQgPSAmaWxrX2xpbWl0c19zaW5nbGVfbHZkc18xMDBt OwotCQkJZWxzZQotCQkJCWxpbWl0ID0gJmlsa19saW1pdHNfc2luZ2xlX2x2ZHM7Ci0JCX0KLQl9 IGVsc2UgewotCQlsaW1pdCA9ICZpbGtfbGltaXRzX2RhYzsKLQl9Ci0KLQlpZiAoIWNydGNfc3Rh dGUtPmNsb2NrX3NldCAmJgotCSAgICAhZzR4X2ZpbmRfYmVzdF9kcGxsKGxpbWl0LCBjcnRjX3N0 YXRlLCBjcnRjX3N0YXRlLT5wb3J0X2Nsb2NrLAotCQkJCXJlZmNsaywgTlVMTCwgJmNydGNfc3Rh dGUtPmRwbGwpKSB7Ci0JCWRybV9lcnIoJmRldl9wcml2LT5kcm0sCi0JCQkiQ291bGRuJ3QgZmlu ZCBQTEwgc2V0dGluZ3MgZm9yIG1vZGUhXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0J aWxrX2NvbXB1dGVfZHBsbChjcnRjLCBjcnRjX3N0YXRlLCBOVUxMKTsKLQotCWlmICghaW50ZWxf cmVzZXJ2ZV9zaGFyZWRfZHBsbHMoc3RhdGUsIGNydGMsIE5VTEwpKSB7Ci0JCWRybV9kYmdfa21z KCZkZXZfcHJpdi0+ZHJtLAotCQkJICAgICJmYWlsZWQgdG8gZmluZCBQTEwgZm9yIHBpcGUgJWNc biIsCi0JCQkgICAgcGlwZV9uYW1lKGNydGMtPnBpcGUpKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0J fQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkIGludGVsX3BjaF90cmFuc2NvZGVyX2dl dF9tX24oc3RydWN0IGludGVsX2NydGMgKmNydGMsCiAJCQkJCSBzdHJ1Y3QgaW50ZWxfbGlua19t X24gKm1fbikKIHsKQEAgLTEwNTI5LDI5ICs5MjE5LDYgQEAgc3RhdGljIGJvb2wgaWxrX2dldF9w aXBlX2NvbmZpZyhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKIAlyZXR1cm4gcmV0OwogfQogCi1z dGF0aWMgaW50IGhzd19jcnRjX2NvbXB1dGVfY2xvY2soc3RydWN0IGludGVsX2NydGMgKmNydGMs Ci0JCQkJICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKLXsKLQlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGMtPmJhc2UuZGV2KTsKLQlz dHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSA9Ci0JCXRvX2ludGVsX2F0b21pY19zdGF0 ZShjcnRjX3N0YXRlLT51YXBpLnN0YXRlKTsKLQotCWlmICghaW50ZWxfY3J0Y19oYXNfdHlwZShj cnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfRFNJKSB8fAotCSAgICBJTlRFTF9HRU4oZGV2X3ByaXYp ID49IDExKSB7Ci0JCXN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyID0KLQkJCWludGVsX2dl dF9jcnRjX25ld19lbmNvZGVyKHN0YXRlLCBjcnRjX3N0YXRlKTsKLQotCQlpZiAoIWludGVsX3Jl c2VydmVfc2hhcmVkX2RwbGxzKHN0YXRlLCBjcnRjLCBlbmNvZGVyKSkgewotCQkJZHJtX2RiZ19r bXMoJmRldl9wcml2LT5kcm0sCi0JCQkJICAgICJmYWlsZWQgdG8gZmluZCBQTEwgZm9yIHBpcGUg JWNcbiIsCi0JCQkJICAgIHBpcGVfbmFtZShjcnRjLT5waXBlKSk7Ci0JCQlyZXR1cm4gLUVJTlZB TDsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBkZzFfZ2V0X2RkaV9w bGwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBlbnVtIHBvcnQgcG9ydCwKIAkJ CSAgICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpCiB7CkBAIC0xNjQ4Niw2 OSArMTUxNTMsMjcgQEAgdm9pZCBpbnRlbF9pbml0X2Rpc3BsYXlfaG9va3Moc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KQogewogCWludGVsX2luaXRfY2RjbGtfaG9va3MoZGV2X3By aXYpOwogCisJaW50ZWxfaW5pdF9jbG9ja19ob29rKGRldl9wcml2KTsKKwogCWlmIChJTlRFTF9H RU4oZGV2X3ByaXYpID49IDkpIHsKIAkJZGV2X3ByaXYtPmRpc3BsYXkuZ2V0X3BpcGVfY29uZmln ID0gaHN3X2dldF9waXBlX2NvbmZpZzsKLQkJZGV2X3ByaXYtPmRpc3BsYXkuZ2V0X2luaXRpYWxf cGxhbmVfY29uZmlnID0KLQkJCXNrbF9nZXRfaW5pdGlhbF9wbGFuZV9jb25maWc7Ci0JCWRldl9w cml2LT5kaXNwbGF5LmNydGNfY29tcHV0ZV9jbG9jayA9IGhzd19jcnRjX2NvbXB1dGVfY2xvY2s7 CiAJCWRldl9wcml2LT5kaXNwbGF5LmNydGNfZW5hYmxlID0gaHN3X2NydGNfZW5hYmxlOwogCQlk ZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2Rpc2FibGUgPSBoc3dfY3J0Y19kaXNhYmxlOwogCX0gZWxz ZSBpZiAoSEFTX0RESShkZXZfcHJpdikpIHsKIAkJZGV2X3ByaXYtPmRpc3BsYXkuZ2V0X3BpcGVf Y29uZmlnID0gaHN3X2dldF9waXBlX2NvbmZpZzsKLQkJZGV2X3ByaXYtPmRpc3BsYXkuZ2V0X2lu aXRpYWxfcGxhbmVfY29uZmlnID0KLQkJCWk5eHhfZ2V0X2luaXRpYWxfcGxhbmVfY29uZmlnOwot CQlkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2NvbXB1dGVfY2xvY2sgPQotCQkJaHN3X2NydGNfY29t cHV0ZV9jbG9jazsKIAkJZGV2X3ByaXYtPmRpc3BsYXkuY3J0Y19lbmFibGUgPSBoc3dfY3J0Y19l bmFibGU7CiAJCWRldl9wcml2LT5kaXNwbGF5LmNydGNfZGlzYWJsZSA9IGhzd19jcnRjX2Rpc2Fi bGU7CiAJfSBlbHNlIGlmIChIQVNfUENIX1NQTElUKGRldl9wcml2KSkgewogCQlkZXZfcHJpdi0+ ZGlzcGxheS5nZXRfcGlwZV9jb25maWcgPSBpbGtfZ2V0X3BpcGVfY29uZmlnOwotCQlkZXZfcHJp di0+ZGlzcGxheS5nZXRfaW5pdGlhbF9wbGFuZV9jb25maWcgPQotCQkJaTl4eF9nZXRfaW5pdGlh bF9wbGFuZV9jb25maWc7Ci0JCWRldl9wcml2LT5kaXNwbGF5LmNydGNfY29tcHV0ZV9jbG9jayA9 Ci0JCQlpbGtfY3J0Y19jb21wdXRlX2Nsb2NrOwogCQlkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2Vu YWJsZSA9IGlsa19jcnRjX2VuYWJsZTsKIAkJZGV2X3ByaXYtPmRpc3BsYXkuY3J0Y19kaXNhYmxl ID0gaWxrX2NydGNfZGlzYWJsZTsKLQl9IGVsc2UgaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYp KSB7Ci0JCWRldl9wcml2LT5kaXNwbGF5LmdldF9waXBlX2NvbmZpZyA9IGk5eHhfZ2V0X3BpcGVf Y29uZmlnOwotCQlkZXZfcHJpdi0+ZGlzcGxheS5nZXRfaW5pdGlhbF9wbGFuZV9jb25maWcgPQot CQkJaTl4eF9nZXRfaW5pdGlhbF9wbGFuZV9jb25maWc7Ci0JCWRldl9wcml2LT5kaXNwbGF5LmNy dGNfY29tcHV0ZV9jbG9jayA9IGNodl9jcnRjX2NvbXB1dGVfY2xvY2s7Ci0JCWRldl9wcml2LT5k aXNwbGF5LmNydGNfZW5hYmxlID0gdmFsbGV5dmlld19jcnRjX2VuYWJsZTsKLQkJZGV2X3ByaXYt PmRpc3BsYXkuY3J0Y19kaXNhYmxlID0gaTl4eF9jcnRjX2Rpc2FibGU7Ci0JfSBlbHNlIGlmIChJ U19WQUxMRVlWSUVXKGRldl9wcml2KSkgeworCX0gZWxzZSBpZiAoSVNfQ0hFUlJZVklFVyhkZXZf cHJpdikgfHwKKwkJICAgSVNfVkFMTEVZVklFVyhkZXZfcHJpdikpIHsKIAkJZGV2X3ByaXYtPmRp c3BsYXkuZ2V0X3BpcGVfY29uZmlnID0gaTl4eF9nZXRfcGlwZV9jb25maWc7Ci0JCWRldl9wcml2 LT5kaXNwbGF5LmdldF9pbml0aWFsX3BsYW5lX2NvbmZpZyA9Ci0JCQlpOXh4X2dldF9pbml0aWFs X3BsYW5lX2NvbmZpZzsKLQkJZGV2X3ByaXYtPmRpc3BsYXkuY3J0Y19jb21wdXRlX2Nsb2NrID0g dmx2X2NydGNfY29tcHV0ZV9jbG9jazsKIAkJZGV2X3ByaXYtPmRpc3BsYXkuY3J0Y19lbmFibGUg PSB2YWxsZXl2aWV3X2NydGNfZW5hYmxlOwogCQlkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2Rpc2Fi bGUgPSBpOXh4X2NydGNfZGlzYWJsZTsKLQl9IGVsc2UgaWYgKElTX0c0WChkZXZfcHJpdikpIHsK LQkJZGV2X3ByaXYtPmRpc3BsYXkuZ2V0X3BpcGVfY29uZmlnID0gaTl4eF9nZXRfcGlwZV9jb25m aWc7Ci0JCWRldl9wcml2LT5kaXNwbGF5LmdldF9pbml0aWFsX3BsYW5lX2NvbmZpZyA9Ci0JCQlp OXh4X2dldF9pbml0aWFsX3BsYW5lX2NvbmZpZzsKLQkJZGV2X3ByaXYtPmRpc3BsYXkuY3J0Y19j b21wdXRlX2Nsb2NrID0gZzR4X2NydGNfY29tcHV0ZV9jbG9jazsKLQkJZGV2X3ByaXYtPmRpc3Bs YXkuY3J0Y19lbmFibGUgPSBpOXh4X2NydGNfZW5hYmxlOwotCQlkZXZfcHJpdi0+ZGlzcGxheS5j cnRjX2Rpc2FibGUgPSBpOXh4X2NydGNfZGlzYWJsZTsKLQl9IGVsc2UgaWYgKElTX1BJTkVWSUVX KGRldl9wcml2KSkgewotCQlkZXZfcHJpdi0+ZGlzcGxheS5nZXRfcGlwZV9jb25maWcgPSBpOXh4 X2dldF9waXBlX2NvbmZpZzsKLQkJZGV2X3ByaXYtPmRpc3BsYXkuZ2V0X2luaXRpYWxfcGxhbmVf Y29uZmlnID0KLQkJCWk5eHhfZ2V0X2luaXRpYWxfcGxhbmVfY29uZmlnOwotCQlkZXZfcHJpdi0+ ZGlzcGxheS5jcnRjX2NvbXB1dGVfY2xvY2sgPSBwbnZfY3J0Y19jb21wdXRlX2Nsb2NrOwotCQlk ZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2VuYWJsZSA9IGk5eHhfY3J0Y19lbmFibGU7Ci0JCWRldl9w cml2LT5kaXNwbGF5LmNydGNfZGlzYWJsZSA9IGk5eHhfY3J0Y19kaXNhYmxlOwotCX0gZWxzZSBp ZiAoIUlTX0dFTihkZXZfcHJpdiwgMikpIHsKLQkJZGV2X3ByaXYtPmRpc3BsYXkuZ2V0X3BpcGVf Y29uZmlnID0gaTl4eF9nZXRfcGlwZV9jb25maWc7Ci0JCWRldl9wcml2LT5kaXNwbGF5LmdldF9p bml0aWFsX3BsYW5lX2NvbmZpZyA9Ci0JCQlpOXh4X2dldF9pbml0aWFsX3BsYW5lX2NvbmZpZzsK LQkJZGV2X3ByaXYtPmRpc3BsYXkuY3J0Y19jb21wdXRlX2Nsb2NrID0gaTl4eF9jcnRjX2NvbXB1 dGVfY2xvY2s7Ci0JCWRldl9wcml2LT5kaXNwbGF5LmNydGNfZW5hYmxlID0gaTl4eF9jcnRjX2Vu YWJsZTsKLQkJZGV2X3ByaXYtPmRpc3BsYXkuY3J0Y19kaXNhYmxlID0gaTl4eF9jcnRjX2Rpc2Fi bGU7CiAJfSBlbHNlIHsKIAkJZGV2X3ByaXYtPmRpc3BsYXkuZ2V0X3BpcGVfY29uZmlnID0gaTl4 eF9nZXRfcGlwZV9jb25maWc7Ci0JCWRldl9wcml2LT5kaXNwbGF5LmdldF9pbml0aWFsX3BsYW5l X2NvbmZpZyA9Ci0JCQlpOXh4X2dldF9pbml0aWFsX3BsYW5lX2NvbmZpZzsKLQkJZGV2X3ByaXYt PmRpc3BsYXkuY3J0Y19jb21wdXRlX2Nsb2NrID0gaTh4eF9jcnRjX2NvbXB1dGVfY2xvY2s7CiAJ CWRldl9wcml2LT5kaXNwbGF5LmNydGNfZW5hYmxlID0gaTl4eF9jcnRjX2VuYWJsZTsKIAkJZGV2 X3ByaXYtPmRpc3BsYXkuY3J0Y19kaXNhYmxlID0gaTl4eF9jcnRjX2Rpc2FibGU7CiAJfQpAQCAt MTY1NjIsMTAgKzE1MTg3LDEzIEBAIHZvaWQgaW50ZWxfaW5pdF9kaXNwbGF5X2hvb2tzKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAkJZGV2X3ByaXYtPmRpc3BsYXkuZmRpX2xp bmtfdHJhaW4gPSBpdmJfbWFudWFsX2ZkaV9saW5rX3RyYWluOwogCX0KIAotCWlmIChJTlRFTF9H RU4oZGV2X3ByaXYpID49IDkpCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOSkgewogCQlk ZXZfcHJpdi0+ZGlzcGxheS5jb21taXRfbW9kZXNldF9lbmFibGVzID0gc2tsX2NvbW1pdF9tb2Rl c2V0X2VuYWJsZXM7Ci0JZWxzZQorCQlkZXZfcHJpdi0+ZGlzcGxheS5nZXRfaW5pdGlhbF9wbGFu ZV9jb25maWcgPSBza2xfZ2V0X2luaXRpYWxfcGxhbmVfY29uZmlnOworCX0gZWxzZSB7CiAJCWRl dl9wcml2LT5kaXNwbGF5LmNvbW1pdF9tb2Rlc2V0X2VuYWJsZXMgPSBpbnRlbF9jb21taXRfbW9k ZXNldF9lbmFibGVzOworCQlkZXZfcHJpdi0+ZGlzcGxheS5nZXRfaW5pdGlhbF9wbGFuZV9jb25m aWcgPSBpOXh4X2dldF9pbml0aWFsX3BsYW5lX2NvbmZpZzsKKwl9CiAKIH0KIApkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmggYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuaAppbmRleCAwZWJhOTFkMThlOTYu LmYxZTM2Y2NhODZjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9p bnRlbF9kaXNwbGF5LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9k aXNwbGF5LmgKQEAgLTY1Myw3ICs2NTMsOSBAQCB1MzIgaW50ZWxfcGxhbmVfY29tcHV0ZV9hbGln bmVkX29mZnNldChpbnQgKngsIGludCAqeSwKIAkJCQkgICAgICAgaW50IGNvbG9yX3BsYW5lKTsK IGludCBpbnRlbF9wbGFuZV9waW5fZmIoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9z dGF0ZSk7CiB2b2lkIGludGVsX3BsYW5lX3VucGluX2ZiKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0 ZSAqb2xkX3BsYW5lX3N0YXRlKTsKLQorc3RydWN0IGludGVsX2VuY29kZXIgKgoraW50ZWxfZ2V0 X2NydGNfbmV3X2VuY29kZXIoY29uc3Qgc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUs CisJCQkgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSk7CiAvKiBj dXJzb3IgKi8KIHN0cnVjdCBpbnRlbF9wbGFuZSAqCiBpbnRlbF9jdXJzb3JfcGxhbmVfY3JlYXRl KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKQEAgLTY2NSw2ICs2NjcsMTUgQEAg aW50IGludGVsX2NydGNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVu dW0gcGlwZSBwaXBlKTsKIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICppbnRlbF9jcnRjX3N0YXRl X2FsbG9jKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKTsKIHZvaWQgaW50ZWxfY3J0Y19zdGF0ZV9y ZXNldChzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKIAkJCSAgICBzdHJ1Y3Qg aW50ZWxfY3J0YyAqY3J0Yyk7CisvKiBjbG9jayAqLwordm9pZCBpbnRlbF9pbml0X2Nsb2NrX2hv b2soc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKK2ludCB2bHZfY2FsY19kcGxs X3BhcmFtcyhpbnQgcmVmY2xrLCBzdHJ1Y3QgZHBsbCAqY2xvY2spOworaW50IHBudl9jYWxjX2Rw bGxfcGFyYW1zKGludCByZWZjbGssIHN0cnVjdCBkcGxsICpjbG9jayk7CitpbnQgaTl4eF9jYWxj X2RwbGxfcGFyYW1zKGludCByZWZjbGssIHN0cnVjdCBkcGxsICpjbG9jayk7Cit2b2lkIHZsdl9j b21wdXRlX2RwbGwoc3RydWN0IGludGVsX2NydGMgKmNydGMsCisJCSAgICAgIHN0cnVjdCBpbnRl bF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZyk7Cit2b2lkIGNodl9jb21wdXRlX2RwbGwoc3RydWN0 IGludGVsX2NydGMgKmNydGMsCisJCSAgICAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBl X2NvbmZpZyk7CiAKIC8qIG1vZGVzZXR0aW5nICovCiB2b2lkIGludGVsX21vZGVzZXRfaW5pdF9o dyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfdHlwZXMuaCBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBlcy5oCmluZGV4IDViYzViZmJjNDU1MS4u ODIzMDgzYjIzMWJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2lu dGVsX2Rpc3BsYXlfdHlwZXMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2lu dGVsX2Rpc3BsYXlfdHlwZXMuaApAQCAtMTc5OSw0ICsxNzk5LDkgQEAgc3RhdGljIGlubGluZSB1 MzIgaW50ZWxfcGxhbmVfZ2d0dF9vZmZzZXQoY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRl ICpzdGF0ZSkKIAlyZXR1cm4gaTkxNV9nZ3R0X29mZnNldChzdGF0ZS0+dm1hKTsKIH0KIAorc3Rh dGljIGlubGluZSB1MzIgaTl4eF9kcGxsX2NvbXB1dGVfZnAoc3RydWN0IGRwbGwgKmRwbGwpCit7 CisJcmV0dXJuIGRwbGwtPm4gPDwgMTYgfCBkcGxsLT5tMSA8PCA4IHwgZHBsbC0+bTI7Cit9CisK ICNlbmRpZiAvKiAgX19JTlRFTF9ESVNQTEFZX1RZUEVTX0hfXyAqLwotLSAKMi4yNy4wCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFp bGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK