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=-16.7 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 406B9C433E6 for ; Mon, 1 Feb 2021 14:25:50 +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 ECA8164DCC for ; Mon, 1 Feb 2021 14:25:49 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org ECA8164DCC Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=suse.de Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 09BB16E5AB; Mon, 1 Feb 2021 14:25:41 +0000 (UTC) Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5B3DD6E5AB for ; Mon, 1 Feb 2021 14:25:39 +0000 (UTC) X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.221.27]) by mx2.suse.de (Postfix) with ESMTP id 91D06AD87; Mon, 1 Feb 2021 14:25:37 +0000 (UTC) From: Thomas Zimmermann To: patrik.r.jakobsson@gmail.com, airlied@linux.ie, daniel@ffwll.ch Subject: [PATCH v2 1/4] drm/gma500: Remove Medfield support Date: Mon, 1 Feb 2021 15:25:31 +0100 Message-Id: <20210201142534.20364-2-tzimmermann@suse.de> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210201142534.20364-1-tzimmermann@suse.de> References: <20210201142534.20364-1-tzimmermann@suse.de> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Thomas Zimmermann , dri-devel@lists.freedesktop.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" TWVkZmllbGQgaXMgYW4gb3V0ZGF0ZWQgbW9iaWxlIHBsYXRmb3JtIHdpdGggYXBwYXJlbnRseSBu byB1c2VycyBsZWZ0LgpSZW1vdmUgaXQgZnJvbSBnbWE1MDAuCgp2MjoKCSogcmVtb3ZlIERTSS1y ZWxhdGVkIGRlY2xhcmF0aW9ucyBmcm9tIGhlYWRlcnMgKFBhdHJpaykKClNpZ25lZC1vZmYtYnk6 IFRob21hcyBaaW1tZXJtYW5uIDx0emltbWVybWFubkBzdXNlLmRlPgotLS0KIGRyaXZlcnMvZ3B1 L2RybS9nbWE1MDAvS2NvbmZpZyAgICAgICAgICAgICAgICB8ICAgIDcgLQogZHJpdmVycy9ncHUv ZHJtL2dtYTUwMC9NYWtlZmlsZSAgICAgICAgICAgICAgIHwgICAxMCAtCiBkcml2ZXJzL2dwdS9k cm0vZ21hNTAwL2Nkdl9pbnRlbF9oZG1pLmMgICAgICAgfCAgICA0IC0KIGRyaXZlcnMvZ3B1L2Ry bS9nbWE1MDAvbWRmbGRfZGV2aWNlLmMgICAgICAgICB8ICA1NjQgLS0tLS0tLS0tCiBkcml2ZXJz L2dwdS9kcm0vZ21hNTAwL21kZmxkX2RzaV9kcGkuYyAgICAgICAgfCAxMDE3IC0tLS0tLS0tLS0t LS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vZ21hNTAwL21kZmxkX2RzaV9kcGkuaCAgICAgICAgfCAg IDc5IC0tCiBkcml2ZXJzL2dwdS9kcm0vZ21hNTAwL21kZmxkX2RzaV9vdXRwdXQuYyAgICAgfCAg NjAzIC0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9nbWE1MDAvbWRmbGRfZHNpX291dHB1dC5o ICAgICB8ICAzNzcgLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vZ21hNTAwL21kZmxkX2RzaV9wa2df c2VuZGVyLmMgfCAgNjc5IC0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vZ21hNTAwL21kZmxk X2RzaV9wa2dfc2VuZGVyLmggfCAgIDgwIC0tCiBkcml2ZXJzL2dwdS9kcm0vZ21hNTAwL21kZmxk X2ludGVsX2Rpc3BsYXkuYyAgfCAgOTY2IC0tLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2Ry bS9nbWE1MDAvbWRmbGRfb3V0cHV0LmMgICAgICAgICB8ICAgNzQgLS0KIGRyaXZlcnMvZ3B1L2Ry bS9nbWE1MDAvbWRmbGRfb3V0cHV0LmggICAgICAgICB8ICAgNzYgLS0KIGRyaXZlcnMvZ3B1L2Ry bS9nbWE1MDAvbWRmbGRfdG1kX3ZpZC5jICAgICAgICB8ICAxOTcgLS0tLQogZHJpdmVycy9ncHUv ZHJtL2dtYTUwMC9tZGZsZF90cG9fdmlkLmMgICAgICAgIHwgICA4MyAtLQogZHJpdmVycy9ncHUv ZHJtL2dtYTUwMC9wc2JfZHJ2LmMgICAgICAgICAgICAgIHwgICAxMiAtCiBkcml2ZXJzL2dwdS9k cm0vZ21hNTAwL3BzYl9kcnYuaCAgICAgICAgICAgICAgfCAgIDY3IC0tCiBkcml2ZXJzL2dwdS9k cm0vZ21hNTAwL3BzYl9pbnRlbF9kcnYuaCAgICAgICAgfCAgICA0IC0KIGRyaXZlcnMvZ3B1L2Ry bS9nbWE1MDAvcHNiX2ludGVsX3JlZy5oICAgICAgICB8ICAgMTIgKy0KIGRyaXZlcnMvZ3B1L2Ry bS9nbWE1MDAvcHNiX2lycS5jICAgICAgICAgICAgICB8ICAgNzIgKy0KIGRyaXZlcnMvZ3B1L2Ry bS9nbWE1MDAvcHNiX2lycS5oICAgICAgICAgICAgICB8ICAgIDIgLQogZHJpdmVycy9ncHUvZHJt L2dtYTUwMC9wc2JfcmVnLmggICAgICAgICAgICAgIHwgICAxNCAtCiBkcml2ZXJzL2dwdS9kcm0v Z21hNTAwL3RjMzU4NzZ4LWRzaS1sdmRzLmMgICAgfCAgODA1IC0tLS0tLS0tLS0tLS0KIGRyaXZl cnMvZ3B1L2RybS9nbWE1MDAvdGMzNTg3NngtZHNpLWx2ZHMuaCAgICB8ICAgMzggLQogMjQgZmls ZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCA1ODQwIGRlbGV0aW9ucygtKQogZGVsZXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9nbWE1MDAvbWRmbGRfZGV2aWNlLmMKIGRlbGV0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vZ21hNTAwL21kZmxkX2RzaV9kcGkuYwogZGVsZXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9nbWE1MDAvbWRmbGRfZHNpX2RwaS5oCiBkZWxl dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9tZGZsZF9kc2lfb3V0cHV0LmMK IGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vZ21hNTAwL21kZmxkX2RzaV9vdXRw dXQuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9nbWE1MDAvbWRmbGRfZHNp X3BrZ19zZW5kZXIuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9nbWE1MDAv bWRmbGRfZHNpX3BrZ19zZW5kZXIuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9nbWE1MDAvbWRmbGRfaW50ZWxfZGlzcGxheS5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL2dtYTUwMC9tZGZsZF9vdXRwdXQuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS9nbWE1MDAvbWRmbGRfb3V0cHV0LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vZ21hNTAwL21kZmxkX3RtZF92aWQuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9nbWE1MDAvbWRmbGRfdHBvX3ZpZC5jCiBkZWxldGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL2dtYTUwMC90YzM1ODc2eC1kc2ktbHZkcy5jCiBkZWxldGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL2dtYTUwMC90YzM1ODc2eC1kc2ktbHZkcy5oCgpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL2dt YTUwMC9LY29uZmlnCmluZGV4IDBlMjNjOTNhMTA5NC4uYjA1MTE2ZjE1ZDk3IDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL2dt YTUwMC9LY29uZmlnCkBAIC0yNiwxMCArMjYsMyBAQCBjb25maWcgRFJNX0dNQTM2MDAKIAloZWxw CiAJICBTYXkgeWVzIHRvIGluY2x1ZGUgYmFzaWMgc3VwcG9ydCBmb3IgSW50ZWwgR01BMzYwMC8z NjUwIChJbnRlbAogCSAgQ2VkYXIgVHJhaWwpIHBsYXRmb3Jtcy4KLQotY29uZmlnIERSTV9NRURG SUVMRAotCWJvb2wgIkludGVsIE1lZGZpZWxkIHN1cHBvcnQgKEV4cGVyaW1lbnRhbCkiCi0JZGVw ZW5kcyBvbiBEUk1fR01BNTAwICYmIFg4Nl9JTlRFTF9NSUQKLQloZWxwCi0JICBTYXkgeWVzIHRv IGluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIEludGVsIE1lZGZpZWxkIHBsYXRmb3JtLgotCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJt L2dtYTUwMC9NYWtlZmlsZQppbmRleCBjOGYyYzg5YmU5OWQuLmY3ZGRlZDM3ODRmYiAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9k cm0vZ21hNTAwL01ha2VmaWxlCkBAIC00MywxNCArNDMsNCBAQCBnbWE1MDBfZ2Z4LSQoQ09ORklH X0RSTV9HTUE2MDApICs9IG9ha3RyYWlsX2RldmljZS5vIFwKIAkgIG9ha3RyYWlsX2hkbWkubyBc CiAJICBvYWt0cmFpbF9oZG1pX2kyYy5vCiAKLWdtYTUwMF9nZngtJChDT05GSUdfRFJNX01FREZJ RUxEKSArPSBtZGZsZF9kZXZpY2UubyBcCi0JICBtZGZsZF9vdXRwdXQubyBcCi0JICBtZGZsZF9p bnRlbF9kaXNwbGF5Lm8gXAotCSAgbWRmbGRfZHNpX291dHB1dC5vIFwKLQkgIG1kZmxkX2RzaV9k cGkubyBcCi0JICBtZGZsZF9kc2lfcGtnX3NlbmRlci5vIFwKLQkgIG1kZmxkX3Rwb192aWQubyBc Ci0JICBtZGZsZF90bWRfdmlkLm8gXAotCSAgdGMzNTg3NngtZHNpLWx2ZHMubwotCiBvYmotJChD T05GSUdfRFJNX0dNQTUwMCkgKz0gZ21hNTAwX2dmeC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vZ21hNTAwL2Nkdl9pbnRlbF9oZG1pLmMgYi9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL2Nk dl9pbnRlbF9oZG1pLmMKaW5kZXggMGQxMmM2ZmZiYzQwLi5lNTI1Njg5Zjg0ZjAgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvY2R2X2ludGVsX2hkbWkuYworKysgYi9kcml2ZXJz L2dwdS9kcm0vZ21hNTAwL2Nkdl9pbnRlbF9oZG1pLmMKQEAgLTIyLDkgKzIyLDYgQEAKICAqCiAg KiBBdXRob3JzOgogICoJamltIGxpdSA8amltLmxpdUBpbnRlbC5jb20+Ci0gKgotICogRklYTUU6 Ci0gKglXZSBzaG91bGQgcHJvYmFibHkgbWFrZSB0aGlzIGdlbmVyaWMgYW5kIHNoYXJlIGl0IHdp dGggTWVkZmllbGQKICAqLwogCiAjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgpAQCAtNTYs NyArNTMsNiBAQCBzdHJ1Y3QgbWlkX2ludGVsX2hkbWlfcHJpdiB7CiAJYm9vbCBoYXNfaGRtaV9h dWRpbzsKIAkvKiBTaG91bGQgc2V0IHRoaXMgd2hlbiBkZXRlY3QgaG90cGx1ZyAqLwogCWJvb2wg aGRtaV9kZXZpY2VfY29ubmVjdGVkOwotCXN0cnVjdCBtZGZsZF9oZG1pX2kyYyAqaTJjX2J1czsK IAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmhkbWlfaTJjX2FkYXB0ZXI7CS8qIGZvciBjb250cm9sIGZ1 bmN0aW9ucyAqLwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7CiB9OwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2dtYTUwMC9tZGZsZF9kZXZpY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS9nbWE1 MDAvbWRmbGRfZGV2aWNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4NGQ2Y2Y5 ODU2Zi4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvbWRmbGRfZGV2 aWNlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NjQgKzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjAtb25seQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQg KGMpIDIwMTEsIEludGVsIENvcnBvcmF0aW9uLgotICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAq Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCi0KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1 ZGUgPGxpbnV4L2dwaW8vbWFjaGluZS5oPgotCi0jaW5jbHVkZSA8YXNtL2ludGVsX3NjdV9pcGMu aD4KLQotI2luY2x1ZGUgIm1kZmxkX2RzaV9vdXRwdXQuaCIKLSNpbmNsdWRlICJtZGZsZF9vdXRw dXQuaCIKLSNpbmNsdWRlICJtaWRfYmlvcy5oIgotI2luY2x1ZGUgInBzYl9kcnYuaCIKLSNpbmNs dWRlICJ0YzM1ODc2eC1kc2ktbHZkcy5oIgotCi0jaWZkZWYgQ09ORklHX0JBQ0tMSUdIVF9DTEFT U19ERVZJQ0UKLQotI2RlZmluZSBNUlNUX0JMQ19NQVhfUFdNX1JFR19GUkVRCSAgICAweEZGRkYK LSNkZWZpbmUgQkxDX1BXTV9QUkVDSVNJT05fRkFDVE9SIDEwMAkvKiAxMDAwMDAwMCAqLwotI2Rl ZmluZSBCTENfUFdNX0ZSRVFfQ0FMQ19DT05TVEFOVCAzMgotI2RlZmluZSBNSHogMTAwMDAwMAot I2RlZmluZSBCUklHSFRORVNTX01JTl9MRVZFTCAxCi0jZGVmaW5lIEJSSUdIVE5FU1NfTUFYX0xF VkVMIDEwMAotI2RlZmluZSBCUklHSFRORVNTX01BU0sJMHhGRgotI2RlZmluZSBCTENfUE9MQVJJ VFlfTk9STUFMIDAKLSNkZWZpbmUgQkxDX1BPTEFSSVRZX0lOVkVSU0UgMQotI2RlZmluZSBCTENf QURKVVNUTUVOVF9NQVggMTAwCi0KLSNkZWZpbmUgTURGTERfQkxDX1BXTV9QUkVDSVNJT05fRkFD VE9SICAgIDEwCi0jZGVmaW5lIE1ERkxEX0JMQ19NQVhfUFdNX1JFR19GUkVRICAgICAgICAweEZG RkUKLSNkZWZpbmUgTURGTERfQkxDX01JTl9QV01fUkVHX0ZSRVEgICAgICAgIDB4MgotCi0jZGVm aW5lIE1ERkxEX0JBQ0tMSUdIVF9QV01fUE9MQVJJVFlfQklUX0NMRUFSICgweEZGRkUpCi0jZGVm aW5lIE1ERkxEX0JBQ0tMSUdIVF9QV01fQ1RMX1NISUZUCSgxNikKLQotc3RhdGljIHN0cnVjdCBi YWNrbGlnaHRfZGV2aWNlICptZGZsZF9iYWNrbGlnaHRfZGV2aWNlOwotCi1pbnQgbWRmbGRfc2V0 X2JyaWdodG5lc3Moc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQotewotCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXYgPQotCQkoc3RydWN0IGRybV9kZXZpY2UgKilibF9nZXRfZGF0YShtZGZsZF9i YWNrbGlnaHRfZGV2aWNlKTsKLQlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRl di0+ZGV2X3ByaXZhdGU7Ci0JaW50IGxldmVsID0gYmQtPnByb3BzLmJyaWdodG5lc3M7Ci0KLQlE Uk1fREVCVUdfRFJJVkVSKCJiYWNrbGlnaHQgbGV2ZWwgc2V0IHRvICVkXG4iLCBsZXZlbCk7Ci0K LQkvKiBQZXJmb3JtIHZhbHVlIGJvdW5kcyBjaGVja2luZyAqLwotCWlmIChsZXZlbCA8IEJSSUdI VE5FU1NfTUlOX0xFVkVMKQotCQlsZXZlbCA9IEJSSUdIVE5FU1NfTUlOX0xFVkVMOwotCi0JaWYg KGdtYV9wb3dlcl9iZWdpbihkZXYsIGZhbHNlKSkgewotCQl1MzIgYWRqdXN0ZWRfbGV2ZWwgPSAw OwotCi0JCS8qCi0JCSAqIEFkanVzdCB0aGUgYmFja2xpZ2h0IGxldmVsIHdpdGggdGhlIHBlcmNl bnQgaW4KLQkJICogZGV2X3ByaXYtPmJsY19hZGoyCi0JCSAqLwotCQlhZGp1c3RlZF9sZXZlbCA9 IGxldmVsICogZGV2X3ByaXYtPmJsY19hZGoyOwotCQlhZGp1c3RlZF9sZXZlbCA9IGFkanVzdGVk X2xldmVsIC8gQkxDX0FESlVTVE1FTlRfTUFYOwotCQlkZXZfcHJpdi0+YnJpZ2h0bmVzc19hZGp1 c3RlZCA9IGFkanVzdGVkX2xldmVsOwotCi0JCWlmIChtZGZsZF9nZXRfcGFuZWxfdHlwZShkZXYs IDApID09IFRDMzU4NzZYKSB7Ci0JCQlpZiAoZGV2X3ByaXYtPmRwaV9wYW5lbF9vblswXSB8fAot CQkJCQlkZXZfcHJpdi0+ZHBpX3BhbmVsX29uWzJdKQotCQkJCXRjMzU4NzZ4X2JyaWdodG5lc3Nf Y29udHJvbChkZXYsCi0JCQkJCQlkZXZfcHJpdi0+YnJpZ2h0bmVzc19hZGp1c3RlZCk7Ci0JCX0g ZWxzZSB7Ci0JCQlpZiAoZGV2X3ByaXYtPmRwaV9wYW5lbF9vblswXSkKLQkJCQltZGZsZF9kc2lf YnJpZ2h0bmVzc19jb250cm9sKGRldiwgMCwKLQkJCQkJCWRldl9wcml2LT5icmlnaHRuZXNzX2Fk anVzdGVkKTsKLQkJfQotCi0JCWlmIChkZXZfcHJpdi0+ZHBpX3BhbmVsX29uWzJdKQotCQkJbWRm bGRfZHNpX2JyaWdodG5lc3NfY29udHJvbChkZXYsIDIsCi0JCQkJCWRldl9wcml2LT5icmlnaHRu ZXNzX2FkanVzdGVkKTsKLQkJZ21hX3Bvd2VyX2VuZChkZXYpOwotCX0KLQotCS8qIGNhY2hlIHRo ZSBicmlnaHRuZXNzIGZvciBsYXRlciB1c2UgKi8KLQlkZXZfcHJpdi0+YnJpZ2h0bmVzcyA9IGxl dmVsOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG1kZmxkX2dldF9icmlnaHRuZXNzKHN0 cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKLXsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0K LQkJKHN0cnVjdCBkcm1fZGV2aWNlICopYmxfZ2V0X2RhdGEobWRmbGRfYmFja2xpZ2h0X2Rldmlj ZSk7Ci0Jc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRl OwotCi0JRFJNX0RFQlVHX0RSSVZFUigiYnJpZ2h0bmVzcyA9IDB4JXggXG4iLCBkZXZfcHJpdi0+ YnJpZ2h0bmVzcyk7Ci0KLQkvKiByZXR1cm4gbG9jYWxseSBjYWNoZWQgdmFyIGluc3RlYWQgb2Yg SFcgcmVhZCAoZHVlIHRvIERQU1QgZXRjLikgKi8KLQlyZXR1cm4gZGV2X3ByaXYtPmJyaWdodG5l c3M7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBtZGZsZF9vcHMgPSB7 Ci0JLmdldF9icmlnaHRuZXNzID0gbWRmbGRfZ2V0X2JyaWdodG5lc3MsCi0JLnVwZGF0ZV9zdGF0 dXMgID0gbWRmbGRfc2V0X2JyaWdodG5lc3MsCi19OwotCi1zdGF0aWMgaW50IGRldmljZV9iYWNr bGlnaHRfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQotewotCXN0cnVjdCBkcm1fcHNiX3By aXZhdGUgKmRldl9wcml2ID0gKHN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKikKLQkJZGV2LT5kZXZf cHJpdmF0ZTsKLQotCWRldl9wcml2LT5ibGNfYWRqMSA9IEJMQ19BREpVU1RNRU5UX01BWDsKLQlk ZXZfcHJpdi0+YmxjX2FkajIgPSBCTENfQURKVVNUTUVOVF9NQVg7Ci0KLQlyZXR1cm4gMDsKLX0K LQotc3RhdGljIGludCBtZGZsZF9iYWNrbGlnaHRfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 KQotewotCXN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcyBwcm9wczsKLQlpbnQgcmV0ID0gMDsK LQotCW1lbXNldCgmcHJvcHMsIDAsIHNpemVvZihzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMp KTsKLQlwcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfTUFYX0xFVkVMOwotCXByb3Bz LnR5cGUgPSBCQUNLTElHSFRfUExBVEZPUk07Ci0JbWRmbGRfYmFja2xpZ2h0X2RldmljZSA9IGJh Y2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoIm1kZmxkLWJsIiwKLQkJCQlOVUxMLCAodm9pZCAqKWRl diwgJm1kZmxkX29wcywgJnByb3BzKTsKLQotCWlmIChJU19FUlIobWRmbGRfYmFja2xpZ2h0X2Rl dmljZSkpCi0JCXJldHVybiBQVFJfRVJSKG1kZmxkX2JhY2tsaWdodF9kZXZpY2UpOwotCi0JcmV0 ID0gZGV2aWNlX2JhY2tsaWdodF9pbml0KGRldik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsK LQotCW1kZmxkX2JhY2tsaWdodF9kZXZpY2UtPnByb3BzLmJyaWdodG5lc3MgPSBCUklHSFRORVNT X01BWF9MRVZFTDsKLQltZGZsZF9iYWNrbGlnaHRfZGV2aWNlLT5wcm9wcy5tYXhfYnJpZ2h0bmVz cyA9IEJSSUdIVE5FU1NfTUFYX0xFVkVMOwotCWJhY2tsaWdodF91cGRhdGVfc3RhdHVzKG1kZmxk X2JhY2tsaWdodF9kZXZpY2UpOwotCXJldHVybiAwOwotfQotI2VuZGlmCi0KLXN0cnVjdCBiYWNr bGlnaHRfZGV2aWNlICptZGZsZF9nZXRfYmFja2xpZ2h0X2RldmljZSh2b2lkKQotewotI2lmZGVm IENPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFCi0JcmV0dXJuIG1kZmxkX2JhY2tsaWdodF9k ZXZpY2U7Ci0jZWxzZQotCXJldHVybiBOVUxMOwotI2VuZGlmCi19Ci0KLS8qCi0gKiBtZGZsZF9z YXZlX2Rpc3BsYXlfcmVnaXN0ZXJzCi0gKgotICogRGVzY3JpcHRpb246IFdlIGFyZSBnb2luZyB0 byBzdXNwZW5kIHNvIHNhdmUgY3VycmVudCBkaXNwbGF5Ci0gKiByZWdpc3RlciBzdGF0ZS4KLSAq Ci0gKiBOb3RlczogRklYTUVfSkxJVTcgbmVlZCB0byBhZGQgdGhlIHN1cHBvcnQgZm9yIERQSSBN SVBJICYgSERNSSBhdWRpbwotICovCi1zdGF0aWMgaW50IG1kZmxkX3NhdmVfZGlzcGxheV9yZWdp c3RlcnMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHBpcGVudW0pCi17Ci0Jc3RydWN0IGRy bV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBtZWRm aWVsZF9zdGF0ZSAqcmVncyA9ICZkZXZfcHJpdi0+cmVncy5tZGZsZDsKLQlzdHJ1Y3QgcHNiX3Bp cGUgKnBpcGUgPSAmZGV2X3ByaXYtPnJlZ3MucGlwZVtwaXBlbnVtXTsKLQljb25zdCBzdHJ1Y3Qg cHNiX29mZnNldCAqbWFwID0gJmRldl9wcml2LT5yZWdtYXBbcGlwZW51bV07Ci0JaW50IGk7Ci0J dTMyICptaXBpX3ZhbDsKLQotCS8qIHJlZ2lzdGVyICovCi0JdTMyIG1pcGlfcmVnID0gTUlQSTsK LQotCXN3aXRjaCAocGlwZW51bSkgewotCWNhc2UgMDoKLQkJbWlwaV92YWwgPSAmcmVncy0+c2F2 ZU1JUEk7Ci0JCWJyZWFrOwotCWNhc2UgMToKLQkJbWlwaV92YWwgPSAmcmVncy0+c2F2ZU1JUEk7 Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJLyogcmVnaXN0ZXIgKi8KLQkJbWlwaV9yZWcgPSBNSVBJ X0M7Ci0JCS8qIHBvaW50ZXIgdG8gdmFsdWVzICovCi0JCW1pcGlfdmFsID0gJnJlZ3MtPnNhdmVN SVBJX0M7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCURSTV9FUlJPUigiJXMsIGludmFsaWQgcGlw ZSBudW1iZXIuXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIFBp cGUgJiBwbGFuZSBBIGluZm8gKi8KLQlwaXBlLT5kcGxsID0gUFNCX1JWREMzMihtYXAtPmRwbGwp OwotCXBpcGUtPmZwMCA9IFBTQl9SVkRDMzIobWFwLT5mcDApOwotCXBpcGUtPmNvbmYgPSBQU0Jf UlZEQzMyKG1hcC0+Y29uZik7Ci0JcGlwZS0+aHRvdGFsID0gUFNCX1JWREMzMihtYXAtPmh0b3Rh bCk7Ci0JcGlwZS0+aGJsYW5rID0gUFNCX1JWREMzMihtYXAtPmhibGFuayk7Ci0JcGlwZS0+aHN5 bmMgPSBQU0JfUlZEQzMyKG1hcC0+aHN5bmMpOwotCXBpcGUtPnZ0b3RhbCA9IFBTQl9SVkRDMzIo bWFwLT52dG90YWwpOwotCXBpcGUtPnZibGFuayA9IFBTQl9SVkRDMzIobWFwLT52YmxhbmspOwot CXBpcGUtPnZzeW5jID0gUFNCX1JWREMzMihtYXAtPnZzeW5jKTsKLQlwaXBlLT5zcmMgPSBQU0Jf UlZEQzMyKG1hcC0+c3JjKTsKLQlwaXBlLT5zdHJpZGUgPSBQU0JfUlZEQzMyKG1hcC0+c3RyaWRl KTsKLQlwaXBlLT5saW5vZmYgPSBQU0JfUlZEQzMyKG1hcC0+bGlub2ZmKTsKLQlwaXBlLT50aWxl b2ZmID0gUFNCX1JWREMzMihtYXAtPnRpbGVvZmYpOwotCXBpcGUtPnNpemUgPSBQU0JfUlZEQzMy KG1hcC0+c2l6ZSk7Ci0JcGlwZS0+cG9zID0gUFNCX1JWREMzMihtYXAtPnBvcyk7Ci0JcGlwZS0+ c3VyZiA9IFBTQl9SVkRDMzIobWFwLT5zdXJmKTsKLQlwaXBlLT5jbnRyID0gUFNCX1JWREMzMiht YXAtPmNudHIpOwotCXBpcGUtPnN0YXR1cyA9IFBTQl9SVkRDMzIobWFwLT5zdGF0dXMpOwotCi0J LypzYXZlIHBhbGV0dGUgKGdhbW1hKSAqLwotCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKLQkJ cGlwZS0+cGFsZXR0ZVtpXSA9IFBTQl9SVkRDMzIobWFwLT5wYWxldHRlICsgKGkgPDwgMikpOwot Ci0JaWYgKHBpcGVudW0gPT0gMSkgewotCQlyZWdzLT5zYXZlUEZJVF9DT05UUk9MID0gUFNCX1JW REMzMihQRklUX0NPTlRST0wpOwotCQlyZWdzLT5zYXZlUEZJVF9QR01fUkFUSU9TID0gUFNCX1JW REMzMihQRklUX1BHTV9SQVRJT1MpOwotCi0JCXJlZ3MtPnNhdmVIRE1JUEhZTUlTQ0NUTCA9IFBT Ql9SVkRDMzIoSERNSVBIWU1JU0NDVEwpOwotCQlyZWdzLT5zYXZlSERNSUJfQ09OVFJPTCA9IFBT Ql9SVkRDMzIoSERNSUJfQ09OVFJPTCk7Ci0JCXJldHVybiAwOwotCX0KLQotCSptaXBpX3ZhbCA9 IFBTQl9SVkRDMzIobWlwaV9yZWcpOwotCXJldHVybiAwOwotfQotCi0vKgotICogbWRmbGRfcmVz dG9yZV9kaXNwbGF5X3JlZ2lzdGVycwotICoKLSAqIERlc2NyaXB0aW9uOiBXZSBhcmUgZ29pbmcg dG8gcmVzdW1lIHNvIHJlc3RvcmUgZGlzcGxheSByZWdpc3RlciBzdGF0ZS4KLSAqCi0gKiBOb3Rl czogRklYTUVfSkxJVTcgbmVlZCB0byBhZGQgdGhlIHN1cHBvcnQgZm9yIERQSSBNSVBJICYgSERN SSBhdWRpbwotICovCi1zdGF0aWMgaW50IG1kZmxkX3Jlc3RvcmVfZGlzcGxheV9yZWdpc3RlcnMo c3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHBpcGVudW0pCi17Ci0JLyogVG8gZ2V0ICBwYW5l bCBvdXQgb2YgVUxQUyBtb2RlLiAqLwotCXUzMiB0ZW1wID0gMDsKLQl1MzIgZGV2aWNlX3JlYWR5 X3JlZyA9IERFVklDRV9SRUFEWV9SRUc7Ci0Jc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3By aXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBtZGZsZF9kc2lfY29uZmlnICpkc2lfY29u ZmlnID0gTlVMTDsKLQlzdHJ1Y3QgbWVkZmllbGRfc3RhdGUgKnJlZ3MgPSAmZGV2X3ByaXYtPnJl Z3MubWRmbGQ7Ci0Jc3RydWN0IHBzYl9waXBlICpwaXBlID0gJmRldl9wcml2LT5yZWdzLnBpcGVb cGlwZW51bV07Ci0JY29uc3Qgc3RydWN0IHBzYl9vZmZzZXQgKm1hcCA9ICZkZXZfcHJpdi0+cmVn bWFwW3BpcGVudW1dOwotCXUzMiBpOwotCXUzMiBkcGxsOwotCXUzMiB0aW1lb3V0ID0gMDsKLQot CS8qIHJlZ2lzdGVyICovCi0JdTMyIG1pcGlfcmVnID0gTUlQSTsKLQotCS8qIHZhbHVlcyAqLwot CXUzMiBkcGxsX3ZhbCA9IHBpcGUtPmRwbGw7Ci0JdTMyIG1pcGlfdmFsID0gcmVncy0+c2F2ZU1J UEk7Ci0KLQlzd2l0Y2ggKHBpcGVudW0pIHsKLQljYXNlIDA6Ci0JCWRwbGxfdmFsICY9IH5EUExM X1ZDT19FTkFCTEU7Ci0JCWRzaV9jb25maWcgPSBkZXZfcHJpdi0+ZHNpX2NvbmZpZ3NbMF07Ci0J CWJyZWFrOwotCWNhc2UgMToKLQkJZHBsbF92YWwgJj0gfkRQTExfVkNPX0VOQUJMRTsKLQkJYnJl YWs7Ci0JY2FzZSAyOgotCQltaXBpX3JlZyA9IE1JUElfQzsKLQkJbWlwaV92YWwgPSByZWdzLT5z YXZlTUlQSV9DOwotCQlkc2lfY29uZmlnID0gZGV2X3ByaXYtPmRzaV9jb25maWdzWzFdOwotCQli cmVhazsKLQlkZWZhdWx0OgotCQlEUk1fRVJST1IoIiVzLCBpbnZhbGlkIHBpcGUgbnVtYmVyLlxu IiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKm1ha2Ugc3VyZSBWR0Eg cGxhbmUgaXMgb2ZmLiBpdCBpbml0aWFsaXplcyB0byBvbiBhZnRlciByZXNldCEqLwotCVBTQl9X VkRDMzIoMHg4MDAwMDAwMCwgVkdBQ05UUkwpOwotCi0JaWYgKHBpcGVudW0gPT0gMSkgewotCQlQ U0JfV1ZEQzMyKGRwbGxfdmFsICYgfkRQTExfVkNPX0VOQUJMRSwgbWFwLT5kcGxsKTsKLQkJUFNC X1JWREMzMihtYXAtPmRwbGwpOwotCi0JCVBTQl9XVkRDMzIocGlwZS0+ZnAwLCBtYXAtPmZwMCk7 Ci0JfSBlbHNlIHsKLQotCQlkcGxsID0gUFNCX1JWREMzMihtYXAtPmRwbGwpOwotCi0JCWlmICgh KGRwbGwgJiBEUExMX1ZDT19FTkFCTEUpKSB7Ci0KLQkJCS8qIFdoZW4gdW5nYXRpbmcgcG93ZXIg b2YgRFBMTCwgbmVlZHMgdG8gd2FpdCAwLjV1cwotCQkJICAgYmVmb3JlIGVuYWJsZSB0aGUgVkNP ICovCi0JCQlpZiAoZHBsbCAmIE1ERkxEX1BXUl9HQVRFX0VOKSB7Ci0JCQkJZHBsbCAmPSB+TURG TERfUFdSX0dBVEVfRU47Ci0JCQkJUFNCX1dWREMzMihkcGxsLCBtYXAtPmRwbGwpOwotCQkJCS8q IEZJWE1FX01ERkxEIFBPIC0gY2hhbmdlIDUwMCB0byAxIGFmdGVyIFBPICovCi0JCQkJdWRlbGF5 KDUwMCk7Ci0JCQl9Ci0KLQkJCVBTQl9XVkRDMzIocGlwZS0+ZnAwLCBtYXAtPmZwMCk7Ci0JCQlQ U0JfV1ZEQzMyKGRwbGxfdmFsLCBtYXAtPmRwbGwpOwotCQkJLyogRklYTUVfTURGTEQgUE8gLSBj aGFuZ2UgNTAwIHRvIDEgYWZ0ZXIgUE8gKi8KLQkJCXVkZWxheSg1MDApOwotCi0JCQlkcGxsX3Zh bCB8PSBEUExMX1ZDT19FTkFCTEU7Ci0JCQlQU0JfV1ZEQzMyKGRwbGxfdmFsLCBtYXAtPmRwbGwp OwotCQkJUFNCX1JWREMzMihtYXAtPmRwbGwpOwotCi0JCQkvKiB3YWl0IGZvciBEU0kgUExMIHRv IGxvY2sgKi8KLQkJCXdoaWxlICh0aW1lb3V0IDwgMjAwMDAgJiYKLQkJCSAgIShQU0JfUlZEQzMy KG1hcC0+Y29uZikgJiBQSVBFQ09ORl9EU0lQTExfTE9DSykpIHsKLQkJCQl1ZGVsYXkoMTUwKTsK LQkJCQl0aW1lb3V0Kys7Ci0JCQl9Ci0KLQkJCWlmICh0aW1lb3V0ID09IDIwMDAwKSB7Ci0JCQkJ RFJNX0VSUk9SKCIlcywgY2FuJ3QgbG9jayBEU0lQTEwuXG4iLAotCQkJCQkJCQlfX2Z1bmNfXyk7 Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0JCX0KLQl9Ci0JLyogUmVzdG9yZSBtb2RlICov Ci0JUFNCX1dWREMzMihwaXBlLT5odG90YWwsIG1hcC0+aHRvdGFsKTsKLQlQU0JfV1ZEQzMyKHBp cGUtPmhibGFuaywgbWFwLT5oYmxhbmspOwotCVBTQl9XVkRDMzIocGlwZS0+aHN5bmMsIG1hcC0+ aHN5bmMpOwotCVBTQl9XVkRDMzIocGlwZS0+dnRvdGFsLCBtYXAtPnZ0b3RhbCk7Ci0JUFNCX1dW REMzMihwaXBlLT52YmxhbmssIG1hcC0+dmJsYW5rKTsKLQlQU0JfV1ZEQzMyKHBpcGUtPnZzeW5j LCBtYXAtPnZzeW5jKTsKLQlQU0JfV1ZEQzMyKHBpcGUtPnNyYywgbWFwLT5zcmMpOwotCVBTQl9X VkRDMzIocGlwZS0+c3RhdHVzLCBtYXAtPnN0YXR1cyk7Ci0KLQkvKnNldCB1cCB0aGUgcGxhbmUq LwotCVBTQl9XVkRDMzIocGlwZS0+c3RyaWRlLCBtYXAtPnN0cmlkZSk7Ci0JUFNCX1dWREMzMihw aXBlLT5saW5vZmYsIG1hcC0+bGlub2ZmKTsKLQlQU0JfV1ZEQzMyKHBpcGUtPnRpbGVvZmYsIG1h cC0+dGlsZW9mZik7Ci0JUFNCX1dWREMzMihwaXBlLT5zaXplLCBtYXAtPnNpemUpOwotCVBTQl9X VkRDMzIocGlwZS0+cG9zLCBtYXAtPnBvcyk7Ci0JUFNCX1dWREMzMihwaXBlLT5zdXJmLCBtYXAt PnN1cmYpOwotCi0JaWYgKHBpcGVudW0gPT0gMSkgewotCQkvKiByZXN0b3JlIHBhbGV0dGUgKGdh bW1hKSAqLwotCQkvKiB1ZGVsYXkoNTAwMDApOyAqLwotCQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBp KyspCi0JCQlQU0JfV1ZEQzMyKHBpcGUtPnBhbGV0dGVbaV0sIG1hcC0+cGFsZXR0ZSArIChpIDw8 IDIpKTsKLQotCQlQU0JfV1ZEQzMyKHJlZ3MtPnNhdmVQRklUX0NPTlRST0wsIFBGSVRfQ09OVFJP TCk7Ci0JCVBTQl9XVkRDMzIocmVncy0+c2F2ZVBGSVRfUEdNX1JBVElPUywgUEZJVF9QR01fUkFU SU9TKTsKLQotCQkvKlRPRE86IHJlc3VtZSBIRE1JIHBvcnQgKi8KLQotCQkvKlRPRE86IHJlc3Vt ZSBwaXBlKi8KLQotCQkvKmVuYWJsZSB0aGUgcGxhbmUqLwotCQlQU0JfV1ZEQzMyKHBpcGUtPmNu dHIgJiB+RElTUExBWV9QTEFORV9FTkFCTEUsIG1hcC0+Y250cik7Ci0KLQkJcmV0dXJuIDA7Ci0J fQotCi0JLypzZXQgdXAgcGlwZSByZWxhdGVkIHJlZ2lzdGVycyovCi0JUFNCX1dWREMzMihtaXBp X3ZhbCwgbWlwaV9yZWcpOwotCi0JLypzZXR1cCBNSVBJIGFkYXB0ZXIgKyBNSVBJIElQIHJlZ2lz dGVycyovCi0JaWYgKGRzaV9jb25maWcpCi0JCW1kZmxkX2RzaV9jb250cm9sbGVyX2luaXQoZHNp X2NvbmZpZywgcGlwZW51bSk7Ci0KLQlpZiAoaW5fYXRvbWljKCkgfHwgaW5faW50ZXJydXB0KCkp Ci0JCW1kZWxheSgyMCk7Ci0JZWxzZQotCQltc2xlZXAoMjApOwotCi0JLyplbmFibGUgdGhlIHBs YW5lKi8KLQlQU0JfV1ZEQzMyKHBpcGUtPmNudHIsIG1hcC0+Y250cik7Ci0KLQlpZiAoaW5fYXRv bWljKCkgfHwgaW5faW50ZXJydXB0KCkpCi0JCW1kZWxheSgyMCk7Ci0JZWxzZQotCQltc2xlZXAo MjApOwotCi0JLyogTFAgSG9sZCBSZWxlYXNlICovCi0JdGVtcCA9IFJFR19SRUFEKG1pcGlfcmVn KTsKLQl0ZW1wIHw9IExQX09VVFBVVF9IT0xEX1JFTEVBU0U7Ci0JUkVHX1dSSVRFKG1pcGlfcmVn LCB0ZW1wKTsKLQltZGVsYXkoMSk7Ci0KLQotCS8qIFNldCBEU0kgaG9zdCB0byBleGl0IGZyb20g VXRyYSBMb3cgUG93ZXIgU3RhdGUgKi8KLQl0ZW1wID0gUkVHX1JFQUQoZGV2aWNlX3JlYWR5X3Jl Zyk7Ci0JdGVtcCAmPSB+VUxQU19NQVNLOwotCXRlbXAgfD0gMHgzOwotCXRlbXAgfD0gRVhJVF9V TFBTX0RFVl9SRUFEWTsKLQlSRUdfV1JJVEUoZGV2aWNlX3JlYWR5X3JlZywgdGVtcCk7Ci0JbWRl bGF5KDEpOwotCi0JdGVtcCA9IFJFR19SRUFEKGRldmljZV9yZWFkeV9yZWcpOwotCXRlbXAgJj0g flVMUFNfTUFTSzsKLQl0ZW1wIHw9IEVYSVRJTkdfVUxQUzsKLQlSRUdfV1JJVEUoZGV2aWNlX3Jl YWR5X3JlZywgdGVtcCk7Ci0JbWRlbGF5KDEpOwotCi0JLyplbmFibGUgdGhlIHBpcGUqLwotCVBT Ql9XVkRDMzIocGlwZS0+Y29uZiwgbWFwLT5jb25mKTsKLQotCS8qIHJlc3RvcmUgcGFsZXR0ZSAo Z2FtbWEpICovCi0JLyogdWRlbGF5KDUwMDAwKTsgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBp KyspCi0JCVBTQl9XVkRDMzIocGlwZS0+cGFsZXR0ZVtpXSwgbWFwLT5wYWxldHRlICsgKGkgPDwg MikpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbWRmbGRfc2F2ZV9yZWdpc3RlcnMo c3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQkvKiBtZGZsZF9zYXZlX2N1cnNvcl9vdmVybGF5 X3JlZ2lzdGVycyhkZXYpOyAqLwotCW1kZmxkX3NhdmVfZGlzcGxheV9yZWdpc3RlcnMoZGV2LCAw KTsKLQltZGZsZF9zYXZlX2Rpc3BsYXlfcmVnaXN0ZXJzKGRldiwgMik7Ci0JbWRmbGRfZGlzYWJs ZV9jcnRjKGRldiwgMCk7Ci0JbWRmbGRfZGlzYWJsZV9jcnRjKGRldiwgMik7Ci0KLQlyZXR1cm4g MDsKLX0KLQotc3RhdGljIGludCBtZGZsZF9yZXN0b3JlX3JlZ2lzdGVycyhzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2KQotewotCW1kZmxkX3Jlc3RvcmVfZGlzcGxheV9yZWdpc3RlcnMoZGV2LCAyKTsK LQltZGZsZF9yZXN0b3JlX2Rpc3BsYXlfcmVnaXN0ZXJzKGRldiwgMCk7Ci0JLyogbWRmbGRfcmVz dG9yZV9jdXJzb3Jfb3ZlcmxheV9yZWdpc3RlcnMoZGV2KTsgKi8KLQotCXJldHVybiAwOwotfQot Ci1zdGF0aWMgaW50IG1kZmxkX3Bvd2VyX2Rvd24oc3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsK LQkvKiBGSVhNRSAqLwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG1kZmxkX3Bvd2VyX3Vw KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0JLyogRklYTUUgKi8KLQlyZXR1cm4gMDsKLX0K LQotLyogTWVkZmllbGQgICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBzYl9vZmZzZXQgbWRmbGRf cmVnbWFwWzNdID0gewotCXsKLQkJLmZwMCA9IE1SU1RfRlBBMCwKLQkJLmZwMSA9IE1SU1RfRlBB MSwKLQkJLmNudHIgPSBEU1BBQ05UUiwKLQkJLmNvbmYgPSBQSVBFQUNPTkYsCi0JCS5zcmMgPSBQ SVBFQVNSQywKLQkJLmRwbGwgPSBNUlNUX0RQTExfQSwKLQkJLmh0b3RhbCA9IEhUT1RBTF9BLAot CQkuaGJsYW5rID0gSEJMQU5LX0EsCi0JCS5oc3luYyA9IEhTWU5DX0EsCi0JCS52dG90YWwgPSBW VE9UQUxfQSwKLQkJLnZibGFuayA9IFZCTEFOS19BLAotCQkudnN5bmMgPSBWU1lOQ19BLAotCQku c3RyaWRlID0gRFNQQVNUUklERSwKLQkJLnNpemUgPSBEU1BBU0laRSwKLQkJLnBvcyA9IERTUEFQ T1MsCi0JCS5zdXJmID0gRFNQQVNVUkYsCi0JCS5hZGRyID0gTVJTVF9EU1BBQkFTRSwKLQkJLnN0 YXR1cyA9IFBJUEVBU1RBVCwKLQkJLmxpbm9mZiA9IERTUEFMSU5PRkYsCi0JCS50aWxlb2ZmID0g RFNQQVRJTEVPRkYsCi0JCS5wYWxldHRlID0gUEFMRVRURV9BLAotCX0sCi0JewotCQkuZnAwID0g TURGTERfRFBMTF9ESVYwLAotCQkuY250ciA9IERTUEJDTlRSLAotCQkuY29uZiA9IFBJUEVCQ09O RiwKLQkJLnNyYyA9IFBJUEVCU1JDLAotCQkuZHBsbCA9IE1ERkxEX0RQTExfQiwKLQkJLmh0b3Rh bCA9IEhUT1RBTF9CLAotCQkuaGJsYW5rID0gSEJMQU5LX0IsCi0JCS5oc3luYyA9IEhTWU5DX0Is Ci0JCS52dG90YWwgPSBWVE9UQUxfQiwKLQkJLnZibGFuayA9IFZCTEFOS19CLAotCQkudnN5bmMg PSBWU1lOQ19CLAotCQkuc3RyaWRlID0gRFNQQlNUUklERSwKLQkJLnNpemUgPSBEU1BCU0laRSwK LQkJLnBvcyA9IERTUEJQT1MsCi0JCS5zdXJmID0gRFNQQlNVUkYsCi0JCS5hZGRyID0gTVJTVF9E U1BCQkFTRSwKLQkJLnN0YXR1cyA9IFBJUEVCU1RBVCwKLQkJLmxpbm9mZiA9IERTUEJMSU5PRkYs Ci0JCS50aWxlb2ZmID0gRFNQQlRJTEVPRkYsCi0JCS5wYWxldHRlID0gUEFMRVRURV9CLAotCX0s Ci0JewotCQkuZnAwID0gTVJTVF9GUEEwLAkvKiBUaGlzIGlzIHdoYXQgdGhlIG9sZCBjb2RlIGRp ZCA/PyAqLwotCQkuY250ciA9IERTUENDTlRSLAotCQkuY29uZiA9IFBJUEVDQ09ORiwKLQkJLnNy YyA9IFBJUEVDU1JDLAotCQkvKiBObyBEUExMX0MgKi8KLQkJLmRwbGwgPSBNUlNUX0RQTExfQSwK LQkJLmh0b3RhbCA9IEhUT1RBTF9DLAotCQkuaGJsYW5rID0gSEJMQU5LX0MsCi0JCS5oc3luYyA9 IEhTWU5DX0MsCi0JCS52dG90YWwgPSBWVE9UQUxfQywKLQkJLnZibGFuayA9IFZCTEFOS19DLAot CQkudnN5bmMgPSBWU1lOQ19DLAotCQkuc3RyaWRlID0gRFNQQ1NUUklERSwKLQkJLnNpemUgPSBE U1BCU0laRSwKLQkJLnBvcyA9IERTUENQT1MsCi0JCS5zdXJmID0gRFNQQ1NVUkYsCi0JCS5hZGRy ID0gTURGTERfRFNQQ0JBU0UsCi0JCS5zdGF0dXMgPSBQSVBFQ1NUQVQsCi0JCS5saW5vZmYgPSBE U1BDTElOT0ZGLAotCQkudGlsZW9mZiA9IERTUENUSUxFT0ZGLAotCQkucGFsZXR0ZSA9IFBBTEVU VEVfQywKLQl9LAotfTsKLQotLyoKLSAqIFRoZSBHUElPIGxpbmVzIGZvciByZXNldHRpbmcgRFNJ IHBpcGUgMCBhbmQgMiBhcmUgYXZhaWxhYmxlIGluIHRoZQotICogUENJIGRldmljZSAwMDAwOjAw OjBjLjAgb24gdGhlIE1lZGZpZWxkLgotICovCi1zdGF0aWMgc3RydWN0IGdwaW9kX2xvb2t1cF90 YWJsZSBtZGZsZF9kc2lfcGlwZV9ncGlvX3RhYmxlID0gewotCS50YWJsZSAgPSB7Ci0JCUdQSU9f TE9PS1VQKCIwMDAwOjAwOjBjLjAiLCAxMjgsICJkc2ktcGlwZTAtcmVzZXQiLAotCQkJICAgIEdQ SU9fQUNUSVZFX0hJR0gpLAotCQlHUElPX0xPT0tVUCgiMDAwMDowMDowYy4wIiwgMzQsICJkc2kt cGlwZTItcmVzZXQiLAotCQkJICAgIEdQSU9fQUNUSVZFX0hJR0gpLAotCQl7IH0sCi0JfSwKLX07 Ci0KLXN0YXRpYyBpbnQgbWRmbGRfY2hpcF9zZXR1cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQot ewotCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsK LQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2LT5kZXYpOwotCi0JaWYgKHBj aV9lbmFibGVfbXNpKHBkZXYpKQotCQlkZXZfd2FybihkZXYtPmRldiwgIkVuYWJsaW5nIE1TSSBm YWlsZWQhXG4iKTsKLQlkZXZfcHJpdi0+cmVnbWFwID0gbWRmbGRfcmVnbWFwOwotCi0JLyogQXNz b2NpYXRlIHRoZSBHUElPIGxpbmVzIHdpdGggdGhlIERSTSBkZXZpY2UgKi8KLQltZGZsZF9kc2lf cGlwZV9ncGlvX3RhYmxlLmRldl9pZCA9IGRldl9uYW1lKGRldi0+ZGV2KTsKLQlncGlvZF9hZGRf bG9va3VwX3RhYmxlKCZtZGZsZF9kc2lfcGlwZV9ncGlvX3RhYmxlKTsKLQotCXJldHVybiBtaWRf Y2hpcF9zZXR1cChkZXYpOwotfQotCi1jb25zdCBzdHJ1Y3QgcHNiX29wcyBtZGZsZF9jaGlwX29w cyA9IHsKLQkubmFtZSA9ICJtZGZsZCIsCi0JLnBpcGVzID0gMywKLQkuY3J0Y3MgPSAzLAotCS5s dmRzX21hc2sgPSAoMSA8PCAxKSwKLQkuaGRtaV9tYXNrID0gKDEgPDwgMSksCi0JLmN1cnNvcl9u ZWVkc19waHlzID0gMCwKLQkuc2d4X29mZnNldCA9IE1SU1RfU0dYX09GRlNFVCwKLQotCS5jaGlw X3NldHVwID0gbWRmbGRfY2hpcF9zZXR1cCwKLQkuY3J0Y19oZWxwZXIgPSAmbWRmbGRfaGVscGVy X2Z1bmNzLAotCS5jcnRjX2Z1bmNzID0gJnBzYl9pbnRlbF9jcnRjX2Z1bmNzLAotCi0JLm91dHB1 dF9pbml0ID0gbWRmbGRfb3V0cHV0X2luaXQsCi0KLSNpZmRlZiBDT05GSUdfQkFDS0xJR0hUX0NM QVNTX0RFVklDRQotCS5iYWNrbGlnaHRfaW5pdCA9IG1kZmxkX2JhY2tsaWdodF9pbml0LAotI2Vu ZGlmCi0KLQkuc2F2ZV9yZWdzID0gbWRmbGRfc2F2ZV9yZWdpc3RlcnMsCi0JLnJlc3RvcmVfcmVn cyA9IG1kZmxkX3Jlc3RvcmVfcmVnaXN0ZXJzLAotCS5zYXZlX2NydGMgPSBnbWFfY3J0Y19zYXZl LAotCS5yZXN0b3JlX2NydGMgPSBnbWFfY3J0Y19yZXN0b3JlLAotCS5wb3dlcl9kb3duID0gbWRm bGRfcG93ZXJfZG93biwKLQkucG93ZXJfdXAgPSBtZGZsZF9wb3dlcl91cCwKLX07CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL21kZmxkX2RzaV9kcGkuYyBiL2RyaXZlcnMvZ3B1 L2RybS9nbWE1MDAvbWRmbGRfZHNpX2RwaS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCA0YzVhMmY3MzQ4YzUuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZ21hNTAw L21kZmxkX2RzaV9kcGkuYworKysgL2Rldi9udWxsCkBAIC0xLDEwMTcgKzAsMCBAQAotLyoKLSAq IENvcHlyaWdodCDCqSAyMDEwIEludGVsIENvcnBvcmF0aW9uCi0gKgotICogUGVybWlzc2lvbiBp cyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5n IGEKLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9u IGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRo b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmln aHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3Vi bGljZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBw ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRv IHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJv dmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5n IHRoZSBuZXh0Ci0gKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMg b3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCi0gKiBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUg U09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO RCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBU SEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSAq IFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlN LCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9G IENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwotICogRlJPTSwgT1VUIE9GIE9S IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgotICog REVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgotICoKLSAqIEF1dGhvcnM6Ci0gKiBqaW0gbGl1IDxq aW0ubGl1QGludGVsLmNvbT4KLSAqIEphY2tpZSBMaTx5YW9kb25nLmxpQGludGVsLmNvbT4KLSAq LwotCi0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLQotI2luY2x1ZGUgPGRybS9kcm1fc2ltcGxl X2ttc19oZWxwZXIuaD4KLQotI2luY2x1ZGUgIm1kZmxkX2RzaV9kcGkuaCIKLSNpbmNsdWRlICJt ZGZsZF9kc2lfcGtnX3NlbmRlci5oIgotI2luY2x1ZGUgIm1kZmxkX291dHB1dC5oIgotI2luY2x1 ZGUgInBzYl9kcnYuaCIKLSNpbmNsdWRlICJ0YzM1ODc2eC1kc2ktbHZkcy5oIgotCi1zdGF0aWMg dm9pZCBtZGZsZF9kc2lfZHBpX3NodXRfZG93bihzdHJ1Y3QgbWRmbGRfZHNpX2RwaV9vdXRwdXQg Km91dHB1dCwKLQkJCQkJCQkJaW50IHBpcGUpOwotCi1zdGF0aWMgdm9pZCBtZGZsZF93YWl0X2Zv cl9IU19EQVRBX0ZJRk8oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTMyIHBpcGUpCi17Ci0JdTMy IGdlbl9maWZvX3N0YXRfcmVnID0gTUlQSV9HRU5fRklGT19TVEFUX1JFRyhwaXBlKTsKLQlpbnQg dGltZW91dCA9IDA7Ci0KLQl1ZGVsYXkoNTAwKTsKLQotCS8qIFRoaXMgd2lsbCB0aW1lIG91dCBh ZnRlciBhcHByb3hpbWF0ZWx5IDIrIHNlY29uZHMgKi8KLQl3aGlsZSAoKHRpbWVvdXQgPCAyMDAw MCkgJiYKLQkJKFJFR19SRUFEKGdlbl9maWZvX3N0YXRfcmVnKSAmIERTSV9GSUZPX0dFTl9IU19E QVRBX0ZVTEwpKSB7Ci0JCXVkZWxheSgxMDApOwotCQl0aW1lb3V0Kys7Ci0JfQotCi0JaWYgKHRp bWVvdXQgPT0gMjAwMDApCi0JCURSTV9JTkZPKCJNSVBJOiBIUyBEYXRhIEZJRk8gd2FzIG5ldmVy IGNsZWFyZWQhXG4iKTsKLX0KLQotc3RhdGljIHZvaWQgbWRmbGRfd2FpdF9mb3JfSFNfQ1RSTF9G SUZPKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBwaXBlKQotewotCXUzMiBnZW5fZmlmb19z dGF0X3JlZyA9IE1JUElfR0VOX0ZJRk9fU1RBVF9SRUcocGlwZSk7Ci0JaW50IHRpbWVvdXQgPSAw OwotCi0JdWRlbGF5KDUwMCk7Ci0KLQkvKiBUaGlzIHdpbGwgdGltZSBvdXQgYWZ0ZXIgYXBwcm94 aW1hdGVseSAyKyBzZWNvbmRzICovCi0Jd2hpbGUgKCh0aW1lb3V0IDwgMjAwMDApICYmIChSRUdf UkVBRChnZW5fZmlmb19zdGF0X3JlZykKLQkJCQkJJiBEU0lfRklGT19HRU5fSFNfQ1RSTF9GVUxM KSkgewotCQl1ZGVsYXkoMTAwKTsKLQkJdGltZW91dCsrOwotCX0KLQlpZiAodGltZW91dCA9PSAy MDAwMCkKLQkJRFJNX0lORk8oIk1JUEk6IEhTIENNRCBGSUZPIHdhcyBuZXZlciBjbGVhcmVkIVxu Iik7Ci19Ci0KLXN0YXRpYyB2b2lkIG1kZmxkX3dhaXRfZm9yX0RQSV9DVFJMX0ZJRk8oc3RydWN0 IGRybV9kZXZpY2UgKmRldiwgdTMyIHBpcGUpCi17Ci0JdTMyIGdlbl9maWZvX3N0YXRfcmVnID0g TUlQSV9HRU5fRklGT19TVEFUX1JFRyhwaXBlKTsKLQlpbnQgdGltZW91dCA9IDA7Ci0KLQl1ZGVs YXkoNTAwKTsKLQotCS8qIFRoaXMgd2lsbCB0aW1lIG91dCBhZnRlciBhcHByb3hpbWF0ZWx5IDIr IHNlY29uZHMgKi8KLQl3aGlsZSAoKHRpbWVvdXQgPCAyMDAwMCkgJiYgKChSRUdfUkVBRChnZW5f Zmlmb19zdGF0X3JlZykgJgotCQkJCQlEUElfRklGT19FTVBUWSkgIT0gRFBJX0ZJRk9fRU1QVFkp KSB7Ci0JCXVkZWxheSgxMDApOwotCQl0aW1lb3V0Kys7Ci0JfQotCi0JaWYgKHRpbWVvdXQgPT0g MjAwMDApCi0JCURSTV9FUlJPUigiTUlQSTogRFBJIEZJRk8gd2FzIG5ldmVyIGNsZWFyZWRcbiIp OwotfQotCi1zdGF0aWMgdm9pZCBtZGZsZF93YWl0X2Zvcl9TUExfUEtHX1NFTlQoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwgdTMyIHBpcGUpCi17Ci0JdTMyIGludHJfc3RhdF9yZWcgPSBNSVBJX0lO VFJfU1RBVF9SRUcocGlwZSk7Ci0JaW50IHRpbWVvdXQgPSAwOwotCi0JdWRlbGF5KDUwMCk7Ci0K LQkvKiBUaGlzIHdpbGwgdGltZSBvdXQgYWZ0ZXIgYXBwcm94aW1hdGVseSAyKyBzZWNvbmRzICov Ci0Jd2hpbGUgKCh0aW1lb3V0IDwgMjAwMDApICYmICghKFJFR19SRUFEKGludHJfc3RhdF9yZWcp Ci0JCQkJCSYgRFNJX0lOVFJfU1RBVEVfU1BMX1BLR19TRU5UKSkpIHsKLQkJdWRlbGF5KDEwMCk7 Ci0JCXRpbWVvdXQrKzsKLQl9Ci0KLQlpZiAodGltZW91dCA9PSAyMDAwMCkKLSAgICAgICAgICAg ICAgICBEUk1fRVJST1IoIk1JUEk6IFNQTF9QS1RfU0VOVF9JTlRFUlJVUFQgd2FzIG5vdCBzZW50 IHN1Y2Nlc3NmdWxseSFcbiIpOwotfQotCi0vKiBGb3IgVEMzNTg3NlggKi8KLQotc3RhdGljIHZv aWQgZHNpX3NldF9kZXZpY2VfcmVhZHlfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50 IHN0YXRlLAotCQkJCWludCBwaXBlKQotewotCVJFR19GTERfTU9EKE1JUElfREVWSUNFX1JFQURZ X1JFRyhwaXBlKSwgISFzdGF0ZSwgMCwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRzaV9zZXRfcGlw ZV9wbGFuZV9lbmFibGVfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCQkJCQlpbnQg c3RhdGUsIGludCBwaXBlKQotewotCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0g ZGV2LT5kZXZfcHJpdmF0ZTsKLQl1MzIgcGlwZWNvbmZfcmVnID0gUElQRUFDT05GOwotCXUzMiBk c3BjbnRyX3JlZyA9IERTUEFDTlRSOwotCi0JdTMyIGRzcGNudHIgPSBkZXZfcHJpdi0+ZHNwY250 cltwaXBlXTsKLQl1MzIgbWlwaSA9IE1JUElfUE9SVF9FTiB8IFBBU1NfRlJPTV9TUEhZX1RPX0FG RSB8IFNFTF9GTE9QUEVEX0hTVFg7Ci0KLQlpZiAocGlwZSkgewotCQlwaXBlY29uZl9yZWcgPSBQ SVBFQ0NPTkY7Ci0JCWRzcGNudHJfcmVnID0gRFNQQ0NOVFI7Ci0JfSBlbHNlCi0JCW1pcGkgJj0g KH4weDAzKTsKLQotCWlmIChzdGF0ZSkgewotCQkvKlNldCB1cCBwaXBlICovCi0JCVJFR19XUklU RShwaXBlY29uZl9yZWcsIEJJVCgzMSkpOwotCi0JCWlmIChSRUdfQklUX1dBSVQocGlwZWNvbmZf cmVnLCAxLCAzMCkpCi0JCQlkZXZfZXJyKGRldi0+ZGV2LCAiJXM6IFBpcGUgZW5hYmxlIHRpbWVv dXRcbiIsCi0JCQkJX19mdW5jX18pOwotCi0JCS8qU2V0IHVwIGRpc3BsYXkgcGxhbmUgKi8KLQkJ UkVHX1dSSVRFKGRzcGNudHJfcmVnLCBkc3BjbnRyKTsKLQl9IGVsc2UgewotCQl1MzIgZHNwYmFz ZV9yZWcgPSBwaXBlID8gTURGTERfRFNQQ0JBU0UgOiBNUlNUX0RTUEFCQVNFOwotCi0JCS8qIFB1 dCBEU0kgbGFuZXMgdG8gVUxQUyB0byBkaXNhYmxlIHBpcGUgKi8KLQkJUkVHX0ZMRF9NT0QoTUlQ SV9ERVZJQ0VfUkVBRFlfUkVHKHBpcGUpLCAyLCAyLCAxKTsKLQkJUkVHX1JFQUQoTUlQSV9ERVZJ Q0VfUkVBRFlfUkVHKHBpcGUpKTsgLyogcG9zdGVkIHdyaXRlPyAqLwotCi0JCS8qIExQIEhvbGQg Ki8KLQkJUkVHX0ZMRF9NT0QoTUlQSV9QT1JUX0NPTlRST0wocGlwZSksIDAsIDE2LCAxNik7Ci0J CVJFR19SRUFEKE1JUElfUE9SVF9DT05UUk9MKHBpcGUpKTsgLyogcG9zdGVkIHdyaXRlPyAqLwot Ci0JCS8qIERpc2FibGUgZGlzcGxheSBwbGFuZSAqLwotCQlSRUdfRkxEX01PRChkc3BjbnRyX3Jl ZywgMCwgMzEsIDMxKTsKLQotCQkvKiBGbHVzaCB0aGUgcGxhbmUgY2hhbmdlcyA/Pz8gcG9zdGVk IHdyaXRlPyAqLwotCQlSRUdfV1JJVEUoZHNwYmFzZV9yZWcsIFJFR19SRUFEKGRzcGJhc2VfcmVn KSk7Ci0JCVJFR19SRUFEKGRzcGJhc2VfcmVnKTsKLQotCQkvKiBEaXNhYmxlIFBJUEUgKi8KLQkJ UkVHX0ZMRF9NT0QocGlwZWNvbmZfcmVnLCAwLCAzMSwgMzEpOwotCi0JCWlmIChSRUdfQklUX1dB SVQocGlwZWNvbmZfcmVnLCAwLCAzMCkpCi0JCQlkZXZfZXJyKGRldi0+ZGV2LCAiJXM6IFBpcGUg ZGlzYWJsZSB0aW1lb3V0XG4iLAotCQkJCV9fZnVuY19fKTsKLQotCQlpZiAoUkVHX0JJVF9XQUlU KE1JUElfR0VOX0ZJRk9fU1RBVF9SRUcocGlwZSksIDEsIDI4KSkKLQkJCWRldl9lcnIoZGV2LT5k ZXYsICIlczogRklGTyBub3QgZW1wdHlcbiIsCi0JCQkJX19mdW5jX18pOwotCX0KLX0KLQotc3Rh dGljIHZvaWQgbWRmbGRfZHNpX2NvbmZpZ3VyZV9kb3duKHN0cnVjdCBtZGZsZF9kc2lfZW5jb2Rl ciAqZHNpX2VuY29kZXIsCi0JCQkJCQkJCWludCBwaXBlKQotewotCXN0cnVjdCBtZGZsZF9kc2lf ZHBpX291dHB1dCAqZHBpX291dHB1dCA9Ci0JCQkJTURGTERfRFNJX0RQSV9PVVRQVVQoZHNpX2Vu Y29kZXIpOwotCXN0cnVjdCBtZGZsZF9kc2lfY29uZmlnICpkc2lfY29uZmlnID0KLQkJCQltZGZs ZF9kc2lfZW5jb2Rlcl9nZXRfY29uZmlnKGRzaV9lbmNvZGVyKTsKLQlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2ID0gZHNpX2NvbmZpZy0+ZGV2OwotCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9w cml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQotCWlmICghZGV2X3ByaXYtPmRwaV9wYW5lbF9vbltw aXBlXSkgewotCQlkZXZfZXJyKGRldi0+ZGV2LCAiRFBJIHBhbmVsIGlzIGFscmVhZHkgb2ZmXG4i KTsKLQkJcmV0dXJuOwotCX0KLQl0YzM1ODc2eF90b3NoaWJhX2JyaWRnZV9wYW5lbF9vZmYoZGV2 KTsKLQl0YzM1ODc2eF9zZXRfYnJpZGdlX3Jlc2V0X3N0YXRlKGRldiwgMSk7Ci0JZHNpX3NldF9w aXBlX3BsYW5lX2VuYWJsZV9zdGF0ZShkZXYsIDAsIHBpcGUpOwotCW1kZmxkX2RzaV9kcGlfc2h1 dF9kb3duKGRwaV9vdXRwdXQsIHBpcGUpOwotCWRzaV9zZXRfZGV2aWNlX3JlYWR5X3N0YXRlKGRl diwgMCwgcGlwZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIG1kZmxkX2RzaV9jb25maWd1cmVfdXAoc3Ry dWN0IG1kZmxkX2RzaV9lbmNvZGVyICpkc2lfZW5jb2RlciwKLQkJCQkJCQkJaW50IHBpcGUpCi17 Ci0Jc3RydWN0IG1kZmxkX2RzaV9kcGlfb3V0cHV0ICpkcGlfb3V0cHV0ID0KLQkJCQlNREZMRF9E U0lfRFBJX09VVFBVVChkc2lfZW5jb2Rlcik7Ci0Jc3RydWN0IG1kZmxkX2RzaV9jb25maWcgKmRz aV9jb25maWcgPQotCQkJCW1kZmxkX2RzaV9lbmNvZGVyX2dldF9jb25maWcoZHNpX2VuY29kZXIp OwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkc2lfY29uZmlnLT5kZXY7Ci0Jc3RydWN0IGRy bV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCi0JaWYgKGRldl9w cml2LT5kcGlfcGFuZWxfb25bcGlwZV0pIHsKLQkJZGV2X2VycihkZXYtPmRldiwgIkRQSSBwYW5l bCBpcyBhbHJlYWR5IG9uXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIEZvciByZXN1bWUgcGF0 aCBzZXF1ZW5jZSAqLwotCW1kZmxkX2RzaV9kcGlfc2h1dF9kb3duKGRwaV9vdXRwdXQsIHBpcGUp OwotCWRzaV9zZXRfZGV2aWNlX3JlYWR5X3N0YXRlKGRldiwgMCwgcGlwZSk7Ci0KLQlkc2lfc2V0 X2RldmljZV9yZWFkeV9zdGF0ZShkZXYsIDEsIHBpcGUpOwotCXRjMzU4NzZ4X3NldF9icmlkZ2Vf cmVzZXRfc3RhdGUoZGV2LCAwKTsKLQl0YzM1ODc2eF9jb25maWd1cmVfbHZkc19icmlkZ2UoZGV2 KTsKLQltZGZsZF9kc2lfZHBpX3R1cm5fb24oZHBpX291dHB1dCwgcGlwZSk7ICAvKiBTZW5kIHR1 cm4gb24gY29tbWFuZCAqLwotCWRzaV9zZXRfcGlwZV9wbGFuZV9lbmFibGVfc3RhdGUoZGV2LCAx LCBwaXBlKTsKLX0KLS8qIEVuZCBmb3IgVEMzNTg3NlggKi8KLQotLyogKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiAqXAotICogRlVOQ1RJT046IG1kZmxkX2RzaV90cG9faWNfaW5pdAotICoKLSAqIERFU0NSSVBU SU9OOiAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb25seSBieSBtcnN0X2RzaV9tb2RlX3NldCBh bmQKLSAqICAgICAgICAgICAgICAgcmVzdG9yZV9kaXNwbGF5X3JlZ2lzdGVycy4gIHNpbmNlIHRo aXMgZnVuY3Rpb24gZG9lcyBub3QKLSAqICAgICAgICAgICAgICAgYWNxdWlyZSB0aGUgbXV0ZXgs IGl0IGlzIGltcG9ydGFudCB0aGF0IHRoZSBjYWxsaW5nIGZ1bmN0aW9uCi0gKiAgICAgICAgICAg ICAgIGRvZXMhCi1cKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi1zdGF0aWMgdm9pZCBtZGZsZF9kc2lf dHBvX2ljX2luaXQoc3RydWN0IG1kZmxkX2RzaV9jb25maWcgKmRzaV9jb25maWcsIHUzMiBwaXBl KQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkc2lfY29uZmlnLT5kZXY7Ci0JdTMyIGRj c0NoYW5uZWxOdW1iZXIgPSBkc2lfY29uZmlnLT5jaGFubmVsX251bTsKLQl1MzIgZ2VuX2RhdGFf cmVnID0gTUlQSV9IU19HRU5fREFUQV9SRUcocGlwZSk7Ci0JdTMyIGdlbl9jdHJsX3JlZyA9IE1J UElfSFNfR0VOX0NUUkxfUkVHKHBpcGUpOwotCXUzMiBnZW5fY3RybF92YWwgPSBHRU5fTE9OR19X UklURTsKLQotCURSTV9JTkZPKCJFbnRlciBtcnN0IGluaXQgVFBPIE1JUEkgZGlzcGxheS5cbiIp OwotCi0JZ2VuX2N0cmxfdmFsIHw9IGRjc0NoYW5uZWxOdW1iZXIgPDwgRENTX0NIQU5ORUxfTlVN QkVSX1BPUzsKLQotCS8qIEZsaXAgcGFnZSBvcmRlciAqLwotCW1kZmxkX3dhaXRfZm9yX0hTX0RB VEFfRklGTyhkZXYsIHBpcGUpOwotCVJFR19XUklURShnZW5fZGF0YV9yZWcsIDB4MDAwMDgwMzYp OwotCW1kZmxkX3dhaXRfZm9yX0hTX0NUUkxfRklGTyhkZXYsIHBpcGUpOwotCVJFR19XUklURShn ZW5fY3RybF9yZWcsIGdlbl9jdHJsX3ZhbCB8ICgweDAyIDw8IFdPUkRfQ09VTlRTX1BPUykpOwot Ci0JLyogMHhGMCAqLwotCW1kZmxkX3dhaXRfZm9yX0hTX0RBVEFfRklGTyhkZXYsIHBpcGUpOwot CVJFR19XUklURShnZW5fZGF0YV9yZWcsIDB4MDA1YTVhZjApOwotCW1kZmxkX3dhaXRfZm9yX0hT X0NUUkxfRklGTyhkZXYsIHBpcGUpOwotCVJFR19XUklURShnZW5fY3RybF9yZWcsIGdlbl9jdHJs X3ZhbCB8ICgweDAzIDw8IFdPUkRfQ09VTlRTX1BPUykpOwotCi0JLyogV3JpdGUgcHJvdGVjdGlv biBrZXkgKi8KLQltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKLQlSRUdf V1JJVEUoZ2VuX2RhdGFfcmVnLCAweDAwNWE1YWYxKTsKLQltZGZsZF93YWl0X2Zvcl9IU19DVFJM X0ZJRk8oZGV2LCBwaXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2N0cmxfcmVnLCBnZW5fY3RybF92YWwg fCAoMHgwMyA8PCBXT1JEX0NPVU5UU19QT1MpKTsKLQotCS8qIDB4RkMgKi8KLQltZGZsZF93YWl0 X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAw eDAwNWE1YWZjKTsKLQltZGZsZF93YWl0X2Zvcl9IU19DVFJMX0ZJRk8oZGV2LCBwaXBlKTsKLQlS RUdfV1JJVEUoZ2VuX2N0cmxfcmVnLCBnZW5fY3RybF92YWwgfCAoMHgwMyA8PCBXT1JEX0NPVU5U U19QT1MpKTsKLQotCS8qIDB4QjcgKi8KLQltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2 LCBwaXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDc3MDAwMGI3KTsKLQltZGZsZF93 YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVn LCAweDAwMDAwMDQ0KTsKLQltZGZsZF93YWl0X2Zvcl9IU19DVFJMX0ZJRk8oZGV2LCBwaXBlKTsK LQlSRUdfV1JJVEUoZ2VuX2N0cmxfcmVnLCBnZW5fY3RybF92YWwgfCAoMHgwNSA8PCBXT1JEX0NP VU5UU19QT1MpKTsKLQotCS8qIDB4QjYgKi8KLQltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8o ZGV2LCBwaXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDAwMGEwYWI2KTsKLQltZGZs ZF93YWl0X2Zvcl9IU19DVFJMX0ZJRk8oZGV2LCBwaXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2N0cmxf cmVnLCBnZW5fY3RybF92YWwgfCAoMHgwMyA8PCBXT1JEX0NPVU5UU19QT1MpKTsKLQotCS8qIDB4 RjIgKi8KLQltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKLQlSRUdfV1JJ VEUoZ2VuX2RhdGFfcmVnLCAweDA4MTAxMGYyKTsKLQltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJ Rk8oZGV2LCBwaXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDRhMDcwNzA4KTsKLQlt ZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2Rh dGFfcmVnLCAweDAwMDAwMGM1KTsKLQltZGZsZF93YWl0X2Zvcl9IU19DVFJMX0ZJRk8oZGV2LCBw aXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2N0cmxfcmVnLCBnZW5fY3RybF92YWwgfCAoMHgwOSA8PCBX T1JEX0NPVU5UU19QT1MpKTsKLQotCS8qIDB4RjggKi8KLQltZGZsZF93YWl0X2Zvcl9IU19EQVRB X0ZJRk8oZGV2LCBwaXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDAyNDAwM2Y4KTsK LQltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKLQlSRUdfV1JJVEUoZ2Vu X2RhdGFfcmVnLCAweDAxMDMwYTA0KTsKLQltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2 LCBwaXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDBlMDIwMjIwKTsKLQltZGZsZF93 YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVn LCAweDAwMDAwMDA0KTsKLQltZGZsZF93YWl0X2Zvcl9IU19DVFJMX0ZJRk8oZGV2LCBwaXBlKTsK LQlSRUdfV1JJVEUoZ2VuX2N0cmxfcmVnLCBnZW5fY3RybF92YWwgfCAoMHgwZCA8PCBXT1JEX0NP VU5UU19QT1MpKTsKLQotCS8qIDB4RTIgKi8KLQltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8o ZGV2LCBwaXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDM5OGZjM2UyKTsKLQltZGZs ZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2RhdGFf cmVnLCAweDAwMDA5MTZmKTsKLQltZGZsZF93YWl0X2Zvcl9IU19DVFJMX0ZJRk8oZGV2LCBwaXBl KTsKLQlSRUdfV1JJVEUoZ2VuX2N0cmxfcmVnLCBnZW5fY3RybF92YWwgfCAoMHgwNiA8PCBXT1JE X0NPVU5UU19QT1MpKTsKLQotCS8qIDB4QjAgKi8KLQltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJ Rk8oZGV2LCBwaXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDAwMDAwMGIwKTsKLQlt ZGZsZF93YWl0X2Zvcl9IU19DVFJMX0ZJRk8oZGV2LCBwaXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2N0 cmxfcmVnLCBnZW5fY3RybF92YWwgfCAoMHgwMiA8PCBXT1JEX0NPVU5UU19QT1MpKTsKLQotCS8q IDB4RjQgKi8KLQltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKLQlSRUdf V1JJVEUoZ2VuX2RhdGFfcmVnLCAweDI0MDI0MmY0KTsKLQltZGZsZF93YWl0X2Zvcl9IU19EQVRB X0ZJRk8oZGV2LCBwaXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDc4ZWUyMDAyKTsK LQltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKLQlSRUdfV1JJVEUoZ2Vu X2RhdGFfcmVnLCAweDJhMDcxMDUwKTsKLQltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2 LCBwaXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDUwN2ZlZTEwKTsKLQltZGZsZF93 YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVn LCAweDEwMzAwNzEwKTsKLQltZGZsZF93YWl0X2Zvcl9IU19DVFJMX0ZJRk8oZGV2LCBwaXBlKTsK LQlSRUdfV1JJVEUoZ2VuX2N0cmxfcmVnLCBnZW5fY3RybF92YWwgfCAoMHgxNCA8PCBXT1JEX0NP VU5UU19QT1MpKTsKLQotCS8qIDB4QkEgKi8KLQltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8o ZGV2LCBwaXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDE5ZmUwN2JhKTsKLQltZGZs ZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2RhdGFf cmVnLCAweDEwMWMwYTMxKTsKLQltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBl KTsKLQlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDAwMDAwMDEwKTsKLQltZGZsZF93YWl0X2Zv cl9IU19DVFJMX0ZJRk8oZGV2LCBwaXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2N0cmxfcmVnLCBnZW5f Y3RybF92YWwgfCAoMHgwOSA8PCBXT1JEX0NPVU5UU19QT1MpKTsKLQotCS8qIDB4QkIgKi8KLQlt ZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2Rh dGFfcmVnLCAweDI4ZmYwN2JiKTsKLQltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBw aXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDI0MjgwYTMxKTsKLQltZGZsZF93YWl0 X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAw eDAwMDAwMDM0KTsKLQltZGZsZF93YWl0X2Zvcl9IU19DVFJMX0ZJRk8oZGV2LCBwaXBlKTsKLQlS RUdfV1JJVEUoZ2VuX2N0cmxfcmVnLCBnZW5fY3RybF92YWwgfCAoMHgwOSA8PCBXT1JEX0NPVU5U U19QT1MpKTsKLQotCS8qIDB4RkIgKi8KLQltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2 LCBwaXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDUzNWQwNWZiKTsKLQltZGZsZF93 YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVn LCAweDFiMWEyMTMwKTsKLQltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsK LQlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDIyMWUxODBlKTsKLQltZGZsZF93YWl0X2Zvcl9I U19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDEzMWQy MTIwKTsKLQltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKLQlSRUdfV1JJ VEUoZ2VuX2RhdGFfcmVnLCAweDUzNWQwNTA4KTsKLQltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJ Rk8oZGV2LCBwaXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDFjMWEyMTMxKTsKLQlt ZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2Rh dGFfcmVnLCAweDIzMWYxNjBkKTsKLQltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBw aXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDExMWIyMjIwKTsKLQltZGZsZF93YWl0 X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAw eDUzNWMyMDA4KTsKLQltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKLQlS RUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDFmMWQyNDMzKTsKLQltZGZsZF93YWl0X2Zvcl9IU19E QVRBX0ZJRk8oZGV2LCBwaXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDJjMjUxYTEw KTsKLQltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKLQlSRUdfV1JJVEUo Z2VuX2RhdGFfcmVnLCAweDJjMzQzNzJkKTsKLQltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8o ZGV2LCBwaXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDAwMDAwMDIzKTsKLQltZGZs ZF93YWl0X2Zvcl9IU19DVFJMX0ZJRk8oZGV2LCBwaXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2N0cmxf cmVnLCBnZW5fY3RybF92YWwgfCAoMHgzMSA8PCBXT1JEX0NPVU5UU19QT1MpKTsKLQotCS8qIDB4 RkEgKi8KLQltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKLQlSRUdfV1JJ VEUoZ2VuX2RhdGFfcmVnLCAweDUyNWMwYmZhKTsKLQltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJ Rk8oZGV2LCBwaXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDFjMWMyMzJmKTsKLQlt ZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2Rh dGFfcmVnLCAweDI2MjMxOTBlKTsKLQltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBw aXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDE4MjEyNjI1KTsKLQltZGZsZF93YWl0 X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAw eDU0NWQwZDBlKTsKLQltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKLQlS RUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDFlMWQyMzMzKTsKLQltZGZsZF93YWl0X2Zvcl9IU19E QVRBX0ZJRk8oZGV2LCBwaXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDI2MjMxYTEw KTsKLQltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKLQlSRUdfV1JJVEUo Z2VuX2RhdGFfcmVnLCAweDFhMjIyNzI1KTsKLQltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8o ZGV2LCBwaXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDU0NWQyODBmKTsKLQltZGZs ZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2RhdGFf cmVnLCAweDIxMjAyNjM1KTsKLQltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBl KTsKLQlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDMxMjkyMDEzKTsKLQltZGZsZF93YWl0X2Zv cl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2RhdGFfcmVnLCAweDMx MzkzZDMzKTsKLQltZGZsZF93YWl0X2Zvcl9IU19EQVRBX0ZJRk8oZGV2LCBwaXBlKTsKLQlSRUdf V1JJVEUoZ2VuX2RhdGFfcmVnLCAweDAwMDAwMDI5KTsKLQltZGZsZF93YWl0X2Zvcl9IU19DVFJM X0ZJRk8oZGV2LCBwaXBlKTsKLQlSRUdfV1JJVEUoZ2VuX2N0cmxfcmVnLCBnZW5fY3RybF92YWwg fCAoMHgzMSA8PCBXT1JEX0NPVU5UU19QT1MpKTsKLQotCS8qIFNldCBETSAqLwotCW1kZmxkX3dh aXRfZm9yX0hTX0RBVEFfRklGTyhkZXYsIHBpcGUpOwotCVJFR19XUklURShnZW5fZGF0YV9yZWcs IDB4MDAwMTAwZjcpOwotCW1kZmxkX3dhaXRfZm9yX0hTX0NUUkxfRklGTyhkZXYsIHBpcGUpOwot CVJFR19XUklURShnZW5fY3RybF9yZWcsIGdlbl9jdHJsX3ZhbCB8ICgweDAzIDw8IFdPUkRfQ09V TlRTX1BPUykpOwotfQotCi1zdGF0aWMgdTE2IG1kZmxkX2RzaV9kcGlfdG9fYnl0ZV9jbG9ja19j b3VudChpbnQgcGl4ZWxfY2xvY2tfY291bnQsCi0JCQkJCQlpbnQgbnVtX2xhbmUsIGludCBicHAp Ci17Ci0JcmV0dXJuICh1MTYpKChwaXhlbF9jbG9ja19jb3VudCAqIGJwcCkgLyAobnVtX2xhbmUg KiA4KSk7Ci19Ci0KLS8qCi0gKiBDYWxjdWxhdGUgdGhlIGRwaSB0aW1lIGJhc2luZyBvbiBhIGdp dmVuIGRybSBtb2RlIEBtb2RlCi0gKiByZXR1cm4gMCBvbiBzdWNjZXNzLgotICogRklYTUU6IEkg d2FzIHVzaW5nIHByb3Bvc2VkIG1vZGUgdmFsdWUgZm9yIGNhbGN1bGF0aW9uLCBtYXkgbmVlZCB0 bwotICogdXNlIGNydGMgbW9kZSB2YWx1ZXMgbGF0ZXIKLSAqLwotaW50IG1kZmxkX2RzaV9kcGlf dGltaW5nX2NhbGN1bGF0aW9uKHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAotCQkJCXN0 cnVjdCBtZGZsZF9kc2lfZHBpX3RpbWluZyAqZHBpX3RpbWluZywKLQkJCQlpbnQgbnVtX2xhbmUs IGludCBicHApCi17Ci0JaW50IHBjbGtfaHN5bmMsIHBjbGtfaGZwLCBwY2xrX2hicCwgcGNsa19o YWN0aXZlOwotCWludCBwY2xrX3ZzeW5jLCBwY2xrX3ZmcCwgcGNsa192YnA7Ci0KLQlwY2xrX2hh Y3RpdmUgPSBtb2RlLT5oZGlzcGxheTsKLQlwY2xrX2hmcCA9IG1vZGUtPmhzeW5jX3N0YXJ0IC0g bW9kZS0+aGRpc3BsYXk7Ci0JcGNsa19oc3luYyA9IG1vZGUtPmhzeW5jX2VuZCAtIG1vZGUtPmhz eW5jX3N0YXJ0OwotCXBjbGtfaGJwID0gbW9kZS0+aHRvdGFsIC0gbW9kZS0+aHN5bmNfZW5kOwot Ci0JcGNsa192ZnAgPSBtb2RlLT52c3luY19zdGFydCAtIG1vZGUtPnZkaXNwbGF5OwotCXBjbGtf dnN5bmMgPSBtb2RlLT52c3luY19lbmQgLSBtb2RlLT52c3luY19zdGFydDsKLQlwY2xrX3ZicCA9 IG1vZGUtPnZ0b3RhbCAtIG1vZGUtPnZzeW5jX2VuZDsKLQotCS8qCi0JICogYnl0ZSBjbG9jayBj b3VudHMgd2VyZSBjYWxjdWxhdGVkIGJ5IGZvbGxvd2luZyBmb3JtdWxhCi0JICogYmNsb2NrX2Nv dW50ID0gcGNsa19jb3VudCAqIGJwcCAvIG51bV9sYW5lIC8gOAotCSAqLwotCWRwaV90aW1pbmct PmhzeW5jX2NvdW50ID0gbWRmbGRfZHNpX2RwaV90b19ieXRlX2Nsb2NrX2NvdW50KAotCQkJCQkJ cGNsa19oc3luYywgbnVtX2xhbmUsIGJwcCk7Ci0JZHBpX3RpbWluZy0+aGJwX2NvdW50ID0gbWRm bGRfZHNpX2RwaV90b19ieXRlX2Nsb2NrX2NvdW50KAotCQkJCQkJcGNsa19oYnAsIG51bV9sYW5l LCBicHApOwotCWRwaV90aW1pbmctPmhmcF9jb3VudCA9IG1kZmxkX2RzaV9kcGlfdG9fYnl0ZV9j bG9ja19jb3VudCgKLQkJCQkJCXBjbGtfaGZwLCBudW1fbGFuZSwgYnBwKTsKLQlkcGlfdGltaW5n LT5oYWN0aXZlX2NvdW50ID0gbWRmbGRfZHNpX2RwaV90b19ieXRlX2Nsb2NrX2NvdW50KAotCQkJ CQkJcGNsa19oYWN0aXZlLCBudW1fbGFuZSwgYnBwKTsKLQlkcGlfdGltaW5nLT52c3luY19jb3Vu dCA9IG1kZmxkX2RzaV9kcGlfdG9fYnl0ZV9jbG9ja19jb3VudCgKLQkJCQkJCXBjbGtfdnN5bmMs IG51bV9sYW5lLCBicHApOwotCWRwaV90aW1pbmctPnZicF9jb3VudCA9IG1kZmxkX2RzaV9kcGlf dG9fYnl0ZV9jbG9ja19jb3VudCgKLQkJCQkJCXBjbGtfdmJwLCBudW1fbGFuZSwgYnBwKTsKLQlk cGlfdGltaW5nLT52ZnBfY291bnQgPSBtZGZsZF9kc2lfZHBpX3RvX2J5dGVfY2xvY2tfY291bnQo Ci0JCQkJCQlwY2xrX3ZmcCwgbnVtX2xhbmUsIGJwcCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9p ZCBtZGZsZF9kc2lfZHBpX2NvbnRyb2xsZXJfaW5pdChzdHJ1Y3QgbWRmbGRfZHNpX2NvbmZpZyAq ZHNpX2NvbmZpZywKLQkJCQkJCQkJaW50IHBpcGUpCi17Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRl diA9IGRzaV9jb25maWctPmRldjsKLQlpbnQgbGFuZV9jb3VudCA9IGRzaV9jb25maWctPmxhbmVf Y291bnQ7Ci0Jc3RydWN0IG1kZmxkX2RzaV9kcGlfdGltaW5nIGRwaV90aW1pbmc7Ci0Jc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSBkc2lfY29uZmlnLT5tb2RlOwotCXUzMiB2YWw7Ci0K LQkvKnVuLXJlYWR5IGRldmljZSovCi0JUkVHX0ZMRF9NT0QoTUlQSV9ERVZJQ0VfUkVBRFlfUkVH KHBpcGUpLCAwLCAwLCAwKTsKLQotCS8qaW5pdCBkc2kgYWRhcHRlciBiZWZvcmUga2lja2luZyBv ZmYqLwotCVJFR19XUklURShNSVBJX0NUUkxfUkVHKHBpcGUpLCAweDAwMDAwMDE4KTsKLQotCS8q ZW5hYmxlIGFsbCBpbnRlcnJ1cHRzKi8KLQlSRUdfV1JJVEUoTUlQSV9JTlRSX0VOX1JFRyhwaXBl KSwgMHhmZmZmZmZmZik7Ci0KLQkvKnNldCB1cCBmdW5jX3ByZyovCi0JdmFsID0gbGFuZV9jb3Vu dDsKLQl2YWwgfD0gZHNpX2NvbmZpZy0+Y2hhbm5lbF9udW0gPDwgRFNJX0RQSV9WSVJUX0NIQU5O RUxfT0ZGU0VUOwotCi0Jc3dpdGNoIChkc2lfY29uZmlnLT5icHApIHsKLQljYXNlIDE2OgotCQl2 YWwgfD0gRFNJX0RQSV9DT0xPUl9GT1JNQVRfUkdCNTY1OwotCQlicmVhazsKLQljYXNlIDE4Ogot CQl2YWwgfD0gRFNJX0RQSV9DT0xPUl9GT1JNQVRfUkdCNjY2OwotCQlicmVhazsKLQljYXNlIDI0 OgotCQl2YWwgfD0gRFNJX0RQSV9DT0xPUl9GT1JNQVRfUkdCODg4OwotCQlicmVhazsKLQlkZWZh dWx0OgotCQlEUk1fRVJST1IoInVuc3VwcG9ydGVkIGNvbG9yIGZvcm1hdCwgYnBwID0gJWRcbiIs Ci0JCQkJCQkJZHNpX2NvbmZpZy0+YnBwKTsKLQl9Ci0JUkVHX1dSSVRFKE1JUElfRFNJX0ZVTkNf UFJHX1JFRyhwaXBlKSwgdmFsKTsKLQotCVJFR19XUklURShNSVBJX0hTX1RYX1RJTUVPVVRfUkVH KHBpcGUpLAotCQkJKG1vZGUtPnZ0b3RhbCAqIG1vZGUtPmh0b3RhbCAqIGRzaV9jb25maWctPmJw cCAvCi0JCQkJKDggKiBsYW5lX2NvdW50KSkgJiBEU0lfSFNfVFhfVElNRU9VVF9NQVNLKTsKLQlS RUdfV1JJVEUoTUlQSV9MUF9SWF9USU1FT1VUX1JFRyhwaXBlKSwKLQkJCQkweGZmZmYgJiBEU0lf TFBfUlhfVElNRU9VVF9NQVNLKTsKLQotCS8qbWF4IHZhbHVlOiAyMCBjbG9jayBjeWNsZXMgb2Yg dHhjbGtlc2MqLwotCVJFR19XUklURShNSVBJX1RVUk5fQVJPVU5EX1RJTUVPVVRfUkVHKHBpcGUp LAotCQkJCTB4MTQgJiBEU0lfVFVSTl9BUk9VTkRfVElNRU9VVF9NQVNLKTsKLQotCS8qbWluIDIx IHR4Y2xrZXNjLCBtYXg6IGZmZmZoKi8KLQlSRUdfV1JJVEUoTUlQSV9ERVZJQ0VfUkVTRVRfVElN RVJfUkVHKHBpcGUpLAotCQkJCTB4ZmZmZiAmIERTSV9SRVNFVF9USU1FUl9NQVNLKTsKLQotCVJF R19XUklURShNSVBJX0RQSV9SRVNPTFVUSU9OX1JFRyhwaXBlKSwKLQkJCQltb2RlLT52ZGlzcGxh eSA8PCAxNiB8IG1vZGUtPmhkaXNwbGF5KTsKLQotCS8qc2V0IERQSSB0aW1pbmcgcmVnaXN0ZXJz Ki8KLQltZGZsZF9kc2lfZHBpX3RpbWluZ19jYWxjdWxhdGlvbihtb2RlLCAmZHBpX3RpbWluZywK LQkJCQlkc2lfY29uZmlnLT5sYW5lX2NvdW50LCBkc2lfY29uZmlnLT5icHApOwotCi0JUkVHX1dS SVRFKE1JUElfSFNZTkNfQ09VTlRfUkVHKHBpcGUpLAotCQkJZHBpX3RpbWluZy5oc3luY19jb3Vu dCAmIERTSV9EUElfVElNSU5HX01BU0spOwotCVJFR19XUklURShNSVBJX0hCUF9DT1VOVF9SRUco cGlwZSksCi0JCQlkcGlfdGltaW5nLmhicF9jb3VudCAmIERTSV9EUElfVElNSU5HX01BU0spOwot CVJFR19XUklURShNSVBJX0hGUF9DT1VOVF9SRUcocGlwZSksCi0JCQlkcGlfdGltaW5nLmhmcF9j b3VudCAmIERTSV9EUElfVElNSU5HX01BU0spOwotCVJFR19XUklURShNSVBJX0hBQ1RJVkVfQ09V TlRfUkVHKHBpcGUpLAotCQkJZHBpX3RpbWluZy5oYWN0aXZlX2NvdW50ICYgRFNJX0RQSV9USU1J TkdfTUFTSyk7Ci0JUkVHX1dSSVRFKE1JUElfVlNZTkNfQ09VTlRfUkVHKHBpcGUpLAotCQkJZHBp X3RpbWluZy52c3luY19jb3VudCAmIERTSV9EUElfVElNSU5HX01BU0spOwotCVJFR19XUklURShN SVBJX1ZCUF9DT1VOVF9SRUcocGlwZSksCi0JCQlkcGlfdGltaW5nLnZicF9jb3VudCAmIERTSV9E UElfVElNSU5HX01BU0spOwotCVJFR19XUklURShNSVBJX1ZGUF9DT1VOVF9SRUcocGlwZSksCi0J CQlkcGlfdGltaW5nLnZmcF9jb3VudCAmIERTSV9EUElfVElNSU5HX01BU0spOwotCi0JUkVHX1dS SVRFKE1JUElfSElHSF9MT1dfU1dJVENIX0NPVU5UX1JFRyhwaXBlKSwgMHg0Nik7Ci0KLQkvKm1p bjogN2QwIG1heDogNGUyMCovCi0JUkVHX1dSSVRFKE1JUElfSU5JVF9DT1VOVF9SRUcocGlwZSks IDB4MDAwMDA3ZDApOwotCi0JLypzZXQgdXAgdmlkZW8gbW9kZSovCi0JdmFsID0gZHNpX2NvbmZp Zy0+dmlkZW9fbW9kZSB8IERTSV9EUElfQ09NUExFVEVfTEFTVF9MSU5FOwotCVJFR19XUklURShN SVBJX1ZJREVPX01PREVfRk9STUFUX1JFRyhwaXBlKSwgdmFsKTsKLQotCVJFR19XUklURShNSVBJ X0VPVF9ESVNBQkxFX1JFRyhwaXBlKSwgMHgwMDAwMDAwMCk7Ci0KLQlSRUdfV1JJVEUoTUlQSV9M UF9CWVRFQ0xLX1JFRyhwaXBlKSwgMHgwMDAwMDAwNCk7Ci0KLQkvKlRPRE86IGZpZ3VyZSBvdXQg aG93IHRvIHNldHVwIHRoZXNlIHJlZ2lzdGVycyovCi0JaWYgKG1kZmxkX2dldF9wYW5lbF90eXBl KGRldiwgcGlwZSkgPT0gVEMzNTg3NlgpCi0JCVJFR19XUklURShNSVBJX0RQSFlfUEFSQU1fUkVH KHBpcGUpLCAweDJBMGM2MDA4KTsKLQllbHNlCi0JCVJFR19XUklURShNSVBJX0RQSFlfUEFSQU1f UkVHKHBpcGUpLCAweDE1MGMzNDA4KTsKLQotCVJFR19XUklURShNSVBJX0NMS19MQU5FX1NXSVRD SF9USU1FX0NOVF9SRUcocGlwZSksICgweGEgPDwgMTYpIHwgMHgxNCk7Ci0KLQlpZiAobWRmbGRf Z2V0X3BhbmVsX3R5cGUoZGV2LCBwaXBlKSA9PSBUQzM1ODc2WCkKLQkJdGMzNTg3Nnhfc2V0X2Jy aWRnZV9yZXNldF9zdGF0ZShkZXYsIDApOyAgLypQdWxsIEhpZ2ggUmVzZXQgKi8KLQotCS8qc2V0 IGRldmljZSByZWFkeSovCi0JUkVHX0ZMRF9NT0QoTUlQSV9ERVZJQ0VfUkVBRFlfUkVHKHBpcGUp LCAxLCAwLCAwKTsKLX0KLQotdm9pZCBtZGZsZF9kc2lfZHBpX3R1cm5fb24oc3RydWN0IG1kZmxk X2RzaV9kcGlfb3V0cHV0ICpvdXRwdXQsIGludCBwaXBlKQotewotCXN0cnVjdCBkcm1fZGV2aWNl ICpkZXYgPSBvdXRwdXQtPmRldjsKLQotCS8qIGNsZWFyIHNwZWNpYWwgcGFja2V0IHNlbnQgYml0 ICovCi0JaWYgKFJFR19SRUFEKE1JUElfSU5UUl9TVEFUX1JFRyhwaXBlKSkgJiBEU0lfSU5UUl9T VEFURV9TUExfUEtHX1NFTlQpCi0JCVJFR19XUklURShNSVBJX0lOVFJfU1RBVF9SRUcocGlwZSks Ci0JCQkJCURTSV9JTlRSX1NUQVRFX1NQTF9QS0dfU0VOVCk7Ci0KLQkvKnNlbmQgdHVybiBvbiBw YWNrYWdlKi8KLQlSRUdfV1JJVEUoTUlQSV9EUElfQ09OVFJPTF9SRUcocGlwZSksIERTSV9EUElf Q1RSTF9IU19UVVJOX09OKTsKLQotCS8qd2FpdCBmb3IgU1BMX1BLR19TRU5UIGludGVycnVwdCov Ci0JbWRmbGRfd2FpdF9mb3JfU1BMX1BLR19TRU5UKGRldiwgcGlwZSk7Ci0KLQlpZiAoUkVHX1JF QUQoTUlQSV9JTlRSX1NUQVRfUkVHKHBpcGUpKSAmIERTSV9JTlRSX1NUQVRFX1NQTF9QS0dfU0VO VCkKLQkJUkVHX1dSSVRFKE1JUElfSU5UUl9TVEFUX1JFRyhwaXBlKSwKLQkJCQkJRFNJX0lOVFJf U1RBVEVfU1BMX1BLR19TRU5UKTsKLQotCW91dHB1dC0+cGFuZWxfb24gPSAxOwotCi0JLyogRklY TUUgdGhlIGZvbGxvd2luZyBpcyBkaXNhYmxlZCB0byBXQSB0aGUgWCBzbG93IHN0YXJ0IGlzc3Vl Ci0JICAgZm9yIFRNRCBwYW5lbAotCWlmIChwaXBlID09IDIpCi0JCWRldl9wcml2LT5kcGlfcGFu ZWxfb24yID0gdHJ1ZTsKLQllbHNlIGlmIChwaXBlID09IDApCi0JCWRldl9wcml2LT5kcGlfcGFu ZWxfb24gPSB0cnVlOyAqLwotfQotCi1zdGF0aWMgdm9pZCBtZGZsZF9kc2lfZHBpX3NodXRfZG93 bihzdHJ1Y3QgbWRmbGRfZHNpX2RwaV9vdXRwdXQgKm91dHB1dCwKLQkJCQkJCQkJaW50IHBpcGUp Ci17Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG91dHB1dC0+ZGV2OwotCi0JLyppZiBvdXRw dXQgaXMgb24sIG9yIG1vZGUgc2V0dGluZyBkaWRuJ3QgaGFwcGVuLCBpZ25vcmUgdGhpcyovCi0J aWYgKCghb3V0cHV0LT5wYW5lbF9vbikgfHwgb3V0cHV0LT5maXJzdF9ib290KSB7Ci0JCW91dHB1 dC0+Zmlyc3RfYm9vdCA9IDA7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBXYWl0IGZvciBkcGkgZmlm byB0byBlbXB0eSAqLwotCW1kZmxkX3dhaXRfZm9yX0RQSV9DVFJMX0ZJRk8oZGV2LCBwaXBlKTsK LQotCS8qIENsZWFyIHRoZSBzcGVjaWFsIHBhY2tldCBpbnRlcnJ1cHQgYml0IGlmIHNldCAqLwot CWlmIChSRUdfUkVBRChNSVBJX0lOVFJfU1RBVF9SRUcocGlwZSkpICYgRFNJX0lOVFJfU1RBVEVf U1BMX1BLR19TRU5UKQotCQlSRUdfV1JJVEUoTUlQSV9JTlRSX1NUQVRfUkVHKHBpcGUpLAotCQkJ CQlEU0lfSU5UUl9TVEFURV9TUExfUEtHX1NFTlQpOwotCi0JaWYgKFJFR19SRUFEKE1JUElfRFBJ X0NPTlRST0xfUkVHKHBpcGUpKSA9PSBEU0lfRFBJX0NUUkxfSFNfU0hVVERPV04pCi0JCWdvdG8g c2h1dGRvd25fb3V0OwotCi0JUkVHX1dSSVRFKE1JUElfRFBJX0NPTlRST0xfUkVHKHBpcGUpLCBE U0lfRFBJX0NUUkxfSFNfU0hVVERPV04pOwotCi1zaHV0ZG93bl9vdXQ6Ci0Jb3V0cHV0LT5wYW5l bF9vbiA9IDA7Ci0Jb3V0cHV0LT5maXJzdF9ib290ID0gMDsKLQotCS8qIEZJWE1FIHRoZSBmb2xs b3dpbmcgaXMgZGlzYWJsZWQgdG8gV0EgdGhlIFggc2xvdyBzdGFydCBpc3N1ZQotCSAgIGZvciBU TUQgcGFuZWwKLQlpZiAocGlwZSA9PSAyKQotCQlkZXZfcHJpdi0+ZHBpX3BhbmVsX29uMiA9IGZh bHNlOwotCWVsc2UgaWYgKHBpcGUgPT0gMCkKLQkJZGV2X3ByaXYtPmRwaV9wYW5lbF9vbiA9IGZh bHNlOwkgKi8KLX0KLQotc3RhdGljIHZvaWQgbWRmbGRfZHNpX2RwaV9zZXRfcG93ZXIoc3RydWN0 IGRybV9lbmNvZGVyICplbmNvZGVyLCBib29sIG9uKQotewotCXN0cnVjdCBtZGZsZF9kc2lfZW5j b2RlciAqZHNpX2VuY29kZXIgPSBtZGZsZF9kc2lfZW5jb2RlcihlbmNvZGVyKTsKLQlzdHJ1Y3Qg bWRmbGRfZHNpX2RwaV9vdXRwdXQgKmRwaV9vdXRwdXQgPQotCQkJCU1ERkxEX0RTSV9EUElfT1VU UFVUKGRzaV9lbmNvZGVyKTsKLQlzdHJ1Y3QgbWRmbGRfZHNpX2NvbmZpZyAqZHNpX2NvbmZpZyA9 Ci0JCQkJbWRmbGRfZHNpX2VuY29kZXJfZ2V0X2NvbmZpZyhkc2lfZW5jb2Rlcik7Ci0JaW50IHBp cGUgPSBtZGZsZF9kc2lfZW5jb2Rlcl9nZXRfcGlwZShkc2lfZW5jb2Rlcik7Ci0Jc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9IGRzaV9jb25maWctPmRldjsKLQlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRl ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0KLQkvKnN0YXJ0IHVwIGRpc3BsYXkgaXNs YW5kIGlmIGl0IHdhcyBzaHV0ZG93biovCi0JaWYgKCFnbWFfcG93ZXJfYmVnaW4oZGV2LCB0cnVl KSkKLQkJcmV0dXJuOwotCi0JaWYgKG9uKSB7Ci0JCWlmIChtZGZsZF9nZXRfcGFuZWxfdHlwZShk ZXYsIHBpcGUpID09IFRNRF9WSUQpCi0JCQltZGZsZF9kc2lfZHBpX3R1cm5fb24oZHBpX291dHB1 dCwgcGlwZSk7Ci0JCWVsc2UgaWYgKG1kZmxkX2dldF9wYW5lbF90eXBlKGRldiwgcGlwZSkgPT0g VEMzNTg3NlgpCi0JCQltZGZsZF9kc2lfY29uZmlndXJlX3VwKGRzaV9lbmNvZGVyLCBwaXBlKTsK LQkJZWxzZSB7Ci0JCQkvKmVuYWJsZSBtaXBpIHBvcnQqLwotCQkJUkVHX1dSSVRFKE1JUElfUE9S VF9DT05UUk9MKHBpcGUpLAotCQkJCVJFR19SRUFEKE1JUElfUE9SVF9DT05UUk9MKHBpcGUpKSB8 IEJJVCgzMSkpOwotCQkJUkVHX1JFQUQoTUlQSV9QT1JUX0NPTlRST0wocGlwZSkpOwotCi0JCQlt ZGZsZF9kc2lfZHBpX3R1cm5fb24oZHBpX291dHB1dCwgcGlwZSk7Ci0JCQltZGZsZF9kc2lfdHBv X2ljX2luaXQoZHNpX2NvbmZpZywgcGlwZSk7Ci0JCX0KLQkJZGV2X3ByaXYtPmRwaV9wYW5lbF9v bltwaXBlXSA9IHRydWU7Ci0JfSBlbHNlIHsKLQkJaWYgKG1kZmxkX2dldF9wYW5lbF90eXBlKGRl diwgcGlwZSkgPT0gVE1EX1ZJRCkKLQkJCW1kZmxkX2RzaV9kcGlfc2h1dF9kb3duKGRwaV9vdXRw dXQsIHBpcGUpOwotCQllbHNlIGlmIChtZGZsZF9nZXRfcGFuZWxfdHlwZShkZXYsIHBpcGUpID09 IFRDMzU4NzZYKQotCQkJbWRmbGRfZHNpX2NvbmZpZ3VyZV9kb3duKGRzaV9lbmNvZGVyLCBwaXBl KTsKLQkJZWxzZSB7Ci0JCQltZGZsZF9kc2lfZHBpX3NodXRfZG93bihkcGlfb3V0cHV0LCBwaXBl KTsKLQotCQkJLypkaXNhYmxlIG1pcGkgcG9ydCovCi0JCQlSRUdfV1JJVEUoTUlQSV9QT1JUX0NP TlRST0wocGlwZSksCi0JCQkJUkVHX1JFQUQoTUlQSV9QT1JUX0NPTlRST0wocGlwZSkpICYgfkJJ VCgzMSkpOwotCQkJUkVHX1JFQUQoTUlQSV9QT1JUX0NPTlRST0wocGlwZSkpOwotCQl9Ci0JCWRl dl9wcml2LT5kcGlfcGFuZWxfb25bcGlwZV0gPSBmYWxzZTsKLQl9Ci0JZ21hX3Bvd2VyX2VuZChk ZXYpOwotfQotCi12b2lkIG1kZmxkX2RzaV9kcGlfZHBtcyhzdHJ1Y3QgZHJtX2VuY29kZXIgKmVu Y29kZXIsIGludCBtb2RlKQotewotCW1kZmxkX2RzaV9kcGlfc2V0X3Bvd2VyKGVuY29kZXIsIG1v ZGUgPT0gRFJNX01PREVfRFBNU19PTik7Ci19Ci0KLWJvb2wgbWRmbGRfZHNpX2RwaV9tb2RlX2Zp eHVwKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKLQkJCQkgICAgIGNvbnN0IHN0cnVjdCBk cm1fZGlzcGxheV9tb2RlICptb2RlLAotCQkJCSAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUg KmFkanVzdGVkX21vZGUpCi17Ci0Jc3RydWN0IG1kZmxkX2RzaV9lbmNvZGVyICpkc2lfZW5jb2Rl ciA9IG1kZmxkX2RzaV9lbmNvZGVyKGVuY29kZXIpOwotCXN0cnVjdCBtZGZsZF9kc2lfY29uZmln ICpkc2lfY29uZmlnID0KLQkJCQltZGZsZF9kc2lfZW5jb2Rlcl9nZXRfY29uZmlnKGRzaV9lbmNv ZGVyKTsKLQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZml4ZWRfbW9kZSA9IGRzaV9jb25maWct PmZpeGVkX21vZGU7Ci0KLQlpZiAoZml4ZWRfbW9kZSkgewotCQlhZGp1c3RlZF9tb2RlLT5oZGlz cGxheSA9IGZpeGVkX21vZGUtPmhkaXNwbGF5OwotCQlhZGp1c3RlZF9tb2RlLT5oc3luY19zdGFy dCA9IGZpeGVkX21vZGUtPmhzeW5jX3N0YXJ0OwotCQlhZGp1c3RlZF9tb2RlLT5oc3luY19lbmQg PSBmaXhlZF9tb2RlLT5oc3luY19lbmQ7Ci0JCWFkanVzdGVkX21vZGUtPmh0b3RhbCA9IGZpeGVk X21vZGUtPmh0b3RhbDsKLQkJYWRqdXN0ZWRfbW9kZS0+dmRpc3BsYXkgPSBmaXhlZF9tb2RlLT52 ZGlzcGxheTsKLQkJYWRqdXN0ZWRfbW9kZS0+dnN5bmNfc3RhcnQgPSBmaXhlZF9tb2RlLT52c3lu Y19zdGFydDsKLQkJYWRqdXN0ZWRfbW9kZS0+dnN5bmNfZW5kID0gZml4ZWRfbW9kZS0+dnN5bmNf ZW5kOwotCQlhZGp1c3RlZF9tb2RlLT52dG90YWwgPSBmaXhlZF9tb2RlLT52dG90YWw7Ci0JCWFk anVzdGVkX21vZGUtPmNsb2NrID0gZml4ZWRfbW9kZS0+Y2xvY2s7Ci0JCWRybV9tb2RlX3NldF9j cnRjaW5mbyhhZGp1c3RlZF9tb2RlLCBDUlRDX0lOVEVSTEFDRV9IQUxWRV9WKTsKLQl9Ci0JcmV0 dXJuIHRydWU7Ci19Ci0KLXZvaWQgbWRmbGRfZHNpX2RwaV9wcmVwYXJlKHN0cnVjdCBkcm1fZW5j b2RlciAqZW5jb2RlcikKLXsKLQltZGZsZF9kc2lfZHBpX3NldF9wb3dlcihlbmNvZGVyLCBmYWxz ZSk7Ci19Ci0KLXZvaWQgbWRmbGRfZHNpX2RwaV9jb21taXQoc3RydWN0IGRybV9lbmNvZGVyICpl bmNvZGVyKQotewotCW1kZmxkX2RzaV9kcGlfc2V0X3Bvd2VyKGVuY29kZXIsIHRydWUpOwotfQot Ci0vKiBGb3IgVEMzNTg3NlggKi8KLS8qIFRoaXMgZnVuY3Rpb25hbGl0eSB3YXMgaW1wbGVtZW50 ZWQgaW4gRlcgaW4gaUNESyAqLwotLyogQnV0IHJlbW92ZWQgaW4gRFYwIGFuZCBsYXRlci4gU28g bmVlZCB0byBhZGQgaGVyZS4gKi8KLXN0YXRpYyB2b2lkIG1pcGlfc2V0X3Byb3BlcnRpZXMoc3Ry dWN0IG1kZmxkX2RzaV9jb25maWcgKmRzaV9jb25maWcsIGludCBwaXBlKQotewotCXN0cnVjdCBk cm1fZGV2aWNlICpkZXYgPSBkc2lfY29uZmlnLT5kZXY7Ci0KLQlSRUdfV1JJVEUoTUlQSV9DVFJM X1JFRyhwaXBlKSwgMHgwMDAwMDAxOCk7Ci0JUkVHX1dSSVRFKE1JUElfSU5UUl9FTl9SRUcocGlw ZSksIDB4ZmZmZmZmZmYpOwotCVJFR19XUklURShNSVBJX0hTX1RYX1RJTUVPVVRfUkVHKHBpcGUp LCAweGZmZmZmZik7Ci0JUkVHX1dSSVRFKE1JUElfTFBfUlhfVElNRU9VVF9SRUcocGlwZSksIDB4 ZmZmZmZmKTsKLQlSRUdfV1JJVEUoTUlQSV9UVVJOX0FST1VORF9USU1FT1VUX1JFRyhwaXBlKSwg MHgxNCk7Ci0JUkVHX1dSSVRFKE1JUElfREVWSUNFX1JFU0VUX1RJTUVSX1JFRyhwaXBlKSwgMHhm Zik7Ci0JUkVHX1dSSVRFKE1JUElfSElHSF9MT1dfU1dJVENIX0NPVU5UX1JFRyhwaXBlKSwgMHgy NSk7Ci0JUkVHX1dSSVRFKE1JUElfSU5JVF9DT1VOVF9SRUcocGlwZSksIDB4ZjApOwotCVJFR19X UklURShNSVBJX0VPVF9ESVNBQkxFX1JFRyhwaXBlKSwgMHgwMDAwMDAwMCk7Ci0JUkVHX1dSSVRF KE1JUElfTFBfQllURUNMS19SRUcocGlwZSksIDB4MDAwMDAwMDQpOwotCVJFR19XUklURShNSVBJ X0RCSV9CV19DVFJMX1JFRyhwaXBlKSwgMHgwMDAwMDgyMCk7Ci0JUkVHX1dSSVRFKE1JUElfQ0xL X0xBTkVfU1dJVENIX1RJTUVfQ05UX1JFRyhwaXBlKSwgKDB4YSA8PCAxNikgfCAweDE0KTsKLX0K LQotc3RhdGljIHZvaWQgbWRmbGRfbWlwaV9zZXRfdmlkZW9fdGltaW5nKHN0cnVjdCBtZGZsZF9k c2lfY29uZmlnICpkc2lfY29uZmlnLAotCQkJCQlpbnQgcGlwZSkKLXsKLQlzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2ID0gZHNpX2NvbmZpZy0+ZGV2OwotCXN0cnVjdCBtZGZsZF9kc2lfZHBpX3RpbWlu ZyBkcGlfdGltaW5nOwotCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0gZHNpX2NvbmZp Zy0+bW9kZTsKLQotCW1kZmxkX2RzaV9kcGlfdGltaW5nX2NhbGN1bGF0aW9uKG1vZGUsICZkcGlf dGltaW5nLAotCQkJCQlkc2lfY29uZmlnLT5sYW5lX2NvdW50LAotCQkJCQlkc2lfY29uZmlnLT5i cHApOwotCi0JUkVHX1dSSVRFKE1JUElfRFBJX1JFU09MVVRJT05fUkVHKHBpcGUpLAotCQltb2Rl LT52ZGlzcGxheSA8PCAxNiB8IG1vZGUtPmhkaXNwbGF5KTsKLQlSRUdfV1JJVEUoTUlQSV9IU1lO Q19DT1VOVF9SRUcocGlwZSksCi0JCWRwaV90aW1pbmcuaHN5bmNfY291bnQgJiBEU0lfRFBJX1RJ TUlOR19NQVNLKTsKLQlSRUdfV1JJVEUoTUlQSV9IQlBfQ09VTlRfUkVHKHBpcGUpLAotCQlkcGlf dGltaW5nLmhicF9jb3VudCAmIERTSV9EUElfVElNSU5HX01BU0spOwotCVJFR19XUklURShNSVBJ X0hGUF9DT1VOVF9SRUcocGlwZSksCi0JCWRwaV90aW1pbmcuaGZwX2NvdW50ICYgRFNJX0RQSV9U SU1JTkdfTUFTSyk7Ci0JUkVHX1dSSVRFKE1JUElfSEFDVElWRV9DT1VOVF9SRUcocGlwZSksCi0J CWRwaV90aW1pbmcuaGFjdGl2ZV9jb3VudCAmIERTSV9EUElfVElNSU5HX01BU0spOwotCVJFR19X UklURShNSVBJX1ZTWU5DX0NPVU5UX1JFRyhwaXBlKSwKLQkJZHBpX3RpbWluZy52c3luY19jb3Vu dCAmIERTSV9EUElfVElNSU5HX01BU0spOwotCVJFR19XUklURShNSVBJX1ZCUF9DT1VOVF9SRUco cGlwZSksCi0JCWRwaV90aW1pbmcudmJwX2NvdW50ICYgRFNJX0RQSV9USU1JTkdfTUFTSyk7Ci0J UkVHX1dSSVRFKE1JUElfVkZQX0NPVU5UX1JFRyhwaXBlKSwKLQkJZHBpX3RpbWluZy52ZnBfY291 bnQgJiBEU0lfRFBJX1RJTUlOR19NQVNLKTsKLX0KLQotc3RhdGljIHZvaWQgbWRmbGRfbWlwaV9j b25maWcoc3RydWN0IG1kZmxkX2RzaV9jb25maWcgKmRzaV9jb25maWcsIGludCBwaXBlKQotewot CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkc2lfY29uZmlnLT5kZXY7Ci0JaW50IGxhbmVfY291 bnQgPSBkc2lfY29uZmlnLT5sYW5lX2NvdW50OwotCi0JaWYgKHBpcGUpIHsKLQkJUkVHX1dSSVRF KE1JUElfUE9SVF9DT05UUk9MKDApLCAweDAwMDAwMDAyKTsKLQkJUkVHX1dSSVRFKE1JUElfUE9S VF9DT05UUk9MKDIpLCAweDgwMDAwMDAwKTsKLQl9IGVsc2UgewotCQlSRUdfV1JJVEUoTUlQSV9Q T1JUX0NPTlRST0woMCksIDB4ODAwMTAwMDApOwotCQlSRUdfV1JJVEUoTUlQSV9QT1JUX0NPTlRS T0woMiksIDB4MDApOwotCX0KLQotCVJFR19XUklURShNSVBJX0RQSFlfUEFSQU1fUkVHKHBpcGUp LCAweDE1MEE2MDBGKTsKLQlSRUdfV1JJVEUoTUlQSV9WSURFT19NT0RFX0ZPUk1BVF9SRUcocGlw ZSksIDB4MDAwMDAwMEYpOwotCi0JLyogbGFuZV9jb3VudCA9IDMgKi8KLQlSRUdfV1JJVEUoTUlQ SV9EU0lfRlVOQ19QUkdfUkVHKHBpcGUpLCAweDAwMDAwMjAwIHwgbGFuZV9jb3VudCk7Ci0KLQlt ZGZsZF9taXBpX3NldF92aWRlb190aW1pbmcoZHNpX2NvbmZpZywgcGlwZSk7Ci19Ci0KLXN0YXRp YyB2b2lkIG1kZmxkX3NldF9waXBlX3RpbWluZyhzdHJ1Y3QgbWRmbGRfZHNpX2NvbmZpZyAqZHNp X2NvbmZpZywgaW50IHBpcGUpCi17Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRzaV9jb25m aWctPmRldjsKLQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9IGRzaV9jb25maWctPm1v ZGU7Ci0KLQlSRUdfV1JJVEUoSFRPVEFMX0EsICgobW9kZS0+aHRvdGFsIC0gMSkgPDwgMTYpIHwg KG1vZGUtPmhkaXNwbGF5IC0gMSkpOwotCVJFR19XUklURShIQkxBTktfQSwgKChtb2RlLT5odG90 YWwgLSAxKSA8PCAxNikgfCAobW9kZS0+aGRpc3BsYXkgLSAxKSk7Ci0JUkVHX1dSSVRFKEhTWU5D X0EsCi0JCSgobW9kZS0+aHN5bmNfZW5kIC0gMSkgPDwgMTYpIHwgKG1vZGUtPmhzeW5jX3N0YXJ0 IC0gMSkpOwotCi0JUkVHX1dSSVRFKFZUT1RBTF9BLCAoKG1vZGUtPnZ0b3RhbCAtIDEpIDw8IDE2 KSB8IChtb2RlLT52ZGlzcGxheSAtIDEpKTsKLQlSRUdfV1JJVEUoVkJMQU5LX0EsICgobW9kZS0+ dnRvdGFsIC0gMSkgPDwgMTYpIHwgKG1vZGUtPnZkaXNwbGF5IC0gMSkpOwotCVJFR19XUklURShW U1lOQ19BLAotCQkoKG1vZGUtPnZzeW5jX2VuZCAtIDEpIDw8IDE2KSB8IChtb2RlLT52c3luY19z dGFydCAtIDEpKTsKLQotCVJFR19XUklURShQSVBFQVNSQywKLQkJKChtb2RlLT5oZGlzcGxheSAt IDEpIDw8IDE2KSB8IChtb2RlLT52ZGlzcGxheSAtIDEpKTsKLX0KLS8qIEVuZCBmb3IgVEMzNTg3 NlggKi8KLQotdm9pZCBtZGZsZF9kc2lfZHBpX21vZGVfc2V0KHN0cnVjdCBkcm1fZW5jb2RlciAq ZW5jb2RlciwKLQkJCQkgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKLQkJCQkgICBz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKLXsKLQlzdHJ1Y3QgbWRmbGRf ZHNpX2VuY29kZXIgKmRzaV9lbmNvZGVyID0gbWRmbGRfZHNpX2VuY29kZXIoZW5jb2Rlcik7Ci0J c3RydWN0IG1kZmxkX2RzaV9kcGlfb3V0cHV0ICpkcGlfb3V0cHV0ID0KLQkJCQkJTURGTERfRFNJ X0RQSV9PVVRQVVQoZHNpX2VuY29kZXIpOwotCXN0cnVjdCBtZGZsZF9kc2lfY29uZmlnICpkc2lf Y29uZmlnID0KLQkJCQltZGZsZF9kc2lfZW5jb2Rlcl9nZXRfY29uZmlnKGRzaV9lbmNvZGVyKTsK LQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZHNpX2NvbmZpZy0+ZGV2OwotCXN0cnVjdCBkcm1f cHNiX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlpbnQgcGlwZSA9IG1k ZmxkX2RzaV9lbmNvZGVyX2dldF9waXBlKGRzaV9lbmNvZGVyKTsKLQl1MzIgcGlwZWNvbmZfcmVn ID0gUElQRUFDT05GOwotCXUzMiBkc3BjbnRyX3JlZyA9IERTUEFDTlRSOwotCXUzMiBwaXBlY29u ZiwgZHNwY250cjsKLQotCXUzMiBtaXBpID0gTUlQSV9QT1JUX0VOIHwgUEFTU19GUk9NX1NQSFlf VE9fQUZFIHwgU0VMX0ZMT1BQRURfSFNUWDsKLQotCWlmIChXQVJOX09OKHBpcGUgPCAwKSkKLQkJ cmV0dXJuOwotCi0JcGlwZWNvbmYgPSBkZXZfcHJpdi0+cGlwZWNvbmZbcGlwZV07Ci0JZHNwY250 ciA9IGRldl9wcml2LT5kc3BjbnRyW3BpcGVdOwotCi0JaWYgKHBpcGUpIHsKLQkJcGlwZWNvbmZf cmVnID0gUElQRUNDT05GOwotCQlkc3BjbnRyX3JlZyA9IERTUENDTlRSOwotCX0gZWxzZSB7Ci0J CWlmIChtZGZsZF9nZXRfcGFuZWxfdHlwZShkZXYsIHBpcGUpID09IFRDMzU4NzZYKQotCQkJbWlw aSAmPSAofjB4MDMpOyAvKiBVc2UgYWxsIGZvdXIgbGFuZXMgKi8KLQkJZWxzZQotCQkJbWlwaSB8 PSAyOwotCX0KLQotCS8qc3RhcnQgdXAgZGlzcGxheSBpc2xhbmQgaWYgaXQgd2FzIHNodXRkb3du Ki8KLQlpZiAoIWdtYV9wb3dlcl9iZWdpbihkZXYsIHRydWUpKQotCQlyZXR1cm47Ci0KLQlpZiAo bWRmbGRfZ2V0X3BhbmVsX3R5cGUoZGV2LCBwaXBlKSA9PSBUQzM1ODc2WCkgewotCQkvKgotCQkg KiBUaGUgZm9sbG93aW5nIGxvZ2ljIGlzIHJlcXVpcmVkIHRvIHJlc2V0IHRoZSBicmlkZ2UgYW5k Ci0JCSAqIGNvbmZpZ3VyZS4gVGhpcyBhbHNvIHN0YXJ0cyB0aGUgRFNJIGNsb2NrIGF0IDIwME1I ei4KLQkJICovCi0JCXRjMzU4NzZ4X3NldF9icmlkZ2VfcmVzZXRfc3RhdGUoZGV2LCAwKTsgIC8q UHVsbCBIaWdoIFJlc2V0ICovCi0JCXRjMzU4NzZ4X3Rvc2hpYmFfYnJpZGdlX3BhbmVsX29uKGRl dik7Ci0JCXVkZWxheSgxMDApOwotCQkvKiBOb3cgc3RhcnQgdGhlIERTSSBjbG9jayAqLwotCQlS RUdfV1JJVEUoTVJTVF9EUExMX0EsIDB4MDApOwotCQlSRUdfV1JJVEUoTVJTVF9GUEEwLCAweEMx KTsKLQkJUkVHX1dSSVRFKE1SU1RfRFBMTF9BLCAweDAwODAwMDAwKTsKLQkJdWRlbGF5KDUwMCk7 Ci0JCVJFR19XUklURShNUlNUX0RQTExfQSwgMHg4MDgwMDAwMCk7Ci0KLQkJaWYgKFJFR19CSVRf V0FJVChwaXBlY29uZl9yZWcsIDEsIDI5KSkKLQkJCWRldl9lcnIoZGV2LT5kZXYsICIlczogRFNJ IFBMTCBsb2NrIHRpbWVvdXRcbiIsCi0JCQkJX19mdW5jX18pOwotCi0JCVJFR19XUklURShNSVBJ X0RQSFlfUEFSQU1fUkVHKHBpcGUpLCAweDJBMGM2MDA4KTsKLQotCQltaXBpX3NldF9wcm9wZXJ0 aWVzKGRzaV9jb25maWcsIHBpcGUpOwotCQltZGZsZF9taXBpX2NvbmZpZyhkc2lfY29uZmlnLCBw aXBlKTsKLQkJbWRmbGRfc2V0X3BpcGVfdGltaW5nKGRzaV9jb25maWcsIHBpcGUpOwotCi0JCVJF R19XUklURShEU1BBQkFTRSwgMHgwMCk7Ci0JCVJFR19XUklURShEU1BBU0laRSwKLQkJCSgobW9k ZS0+dmRpc3BsYXkgLSAxKSA8PCAxNikgfCAobW9kZS0+aGRpc3BsYXkgLSAxKSk7Ci0KLQkJUkVH X1dSSVRFKERTUEFDTlRSLCAweDk4MDAwMDAwKTsKLQkJUkVHX1dSSVRFKERTUEFTVVJGLCAweDAw KTsKLQotCQlSRUdfV1JJVEUoVkdBQ05UUkwsIDB4ODAwMDAwMDApOwotCQlSRUdfV1JJVEUoREVW SUNFX1JFQURZX1JFRywgMHgwMDAwMDAwMSk7Ci0KLQkJUkVHX1dSSVRFKE1JUElfUE9SVF9DT05U Uk9MKHBpcGUpLCAweDgwODEwMDAwKTsKLQl9IGVsc2UgewotCQkvKnNldCB1cCBtaXBpIHBvcnQg RklYTUU6IGRvIGF0IGluaXQgdGltZSAqLwotCQlSRUdfV1JJVEUoTUlQSV9QT1JUX0NPTlRST0wo cGlwZSksIG1pcGkpOwotCX0KLQlSRUdfUkVBRChNSVBJX1BPUlRfQ09OVFJPTChwaXBlKSk7Ci0K LQlpZiAobWRmbGRfZ2V0X3BhbmVsX3R5cGUoZGV2LCBwaXBlKSA9PSBUTURfVklEKSB7Ci0JCS8q IE5PUCAqLwotCX0gZWxzZSBpZiAobWRmbGRfZ2V0X3BhbmVsX3R5cGUoZGV2LCBwaXBlKSA9PSBU QzM1ODc2WCkgewotCQkvKiBzZXQgdXAgRFNJIGNvbnRyb2xsZXIgRFBJIGludGVyZmFjZSAqLwot CQltZGZsZF9kc2lfZHBpX2NvbnRyb2xsZXJfaW5pdChkc2lfY29uZmlnLCBwaXBlKTsKLQotCQkv KiBDb25maWd1cmUgTUlQSSBCcmlkZ2UgYW5kIFBhbmVsICovCi0JCXRjMzU4NzZ4X2NvbmZpZ3Vy ZV9sdmRzX2JyaWRnZShkZXYpOwotCQlkZXZfcHJpdi0+ZHBpX3BhbmVsX29uW3BpcGVdID0gdHJ1 ZTsKLQl9IGVsc2UgewotCQkvKnR1cm4gb24gRFBJIGludGVyZmFjZSovCi0JCW1kZmxkX2RzaV9k cGlfdHVybl9vbihkcGlfb3V0cHV0LCBwaXBlKTsKLQl9Ci0KLQkvKnNldCB1cCBwaXBlKi8KLQlS RUdfV1JJVEUocGlwZWNvbmZfcmVnLCBwaXBlY29uZik7Ci0JUkVHX1JFQUQocGlwZWNvbmZfcmVn KTsKLQotCS8qc2V0IHVwIGRpc3BsYXkgcGxhbmUqLwotCVJFR19XUklURShkc3BjbnRyX3JlZywg ZHNwY250cik7Ci0JUkVHX1JFQUQoZHNwY250cl9yZWcpOwotCi0JbXNsZWVwKDIwKTsgLyogRklY TUU6IHRoaXMgc2hvdWxkIHdhaXQgZm9yIHZibGFuayAqLwotCi0JaWYgKG1kZmxkX2dldF9wYW5l bF90eXBlKGRldiwgcGlwZSkgPT0gVE1EX1ZJRCkgewotCQkvKiBOT1AgKi8KLQl9IGVsc2UgaWYg KG1kZmxkX2dldF9wYW5lbF90eXBlKGRldiwgcGlwZSkgPT0gVEMzNTg3NlgpIHsKLQkJbWRmbGRf ZHNpX2RwaV90dXJuX29uKGRwaV9vdXRwdXQsIHBpcGUpOwotCX0gZWxzZSB7Ci0JCS8qIGluaXQg ZHJpdmVyIGljICovCi0JCW1kZmxkX2RzaV90cG9faWNfaW5pdChkc2lfY29uZmlnLCBwaXBlKTsK LQkJLyppbml0IGJhY2tsaWdodCovCi0JCW1kZmxkX2RzaV9icmlnaHRuZXNzX2luaXQoZHNpX2Nv bmZpZywgcGlwZSk7Ci0JfQotCi0JZ21hX3Bvd2VyX2VuZChkZXYpOwotfQotCi0vKgotICogSW5p dCBEU0kgRFBJIGVuY29kZXIuCi0gKiBBbGxvY2F0ZSBhbiBtZGZsZF9kc2lfZW5jb2RlciBhbmQg YXR0YWNoIGl0IHRvIGdpdmVuIEBkc2lfY29ubmVjdG9yCi0gKiByZXR1cm4gcG9pbnRlciBvZiBu ZXdseSBhbGxvY2F0ZWQgRFBJIGVuY29kZXIsIE5VTEwgb24gZXJyb3IKLSAqLwotc3RydWN0IG1k ZmxkX2RzaV9lbmNvZGVyICptZGZsZF9kc2lfZHBpX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRl diwKLQkJCQlzdHJ1Y3QgbWRmbGRfZHNpX2Nvbm5lY3RvciAqZHNpX2Nvbm5lY3RvciwKLQkJCQlj b25zdCBzdHJ1Y3QgcGFuZWxfZnVuY3MgKnBfZnVuY3MpCi17Ci0Jc3RydWN0IG1kZmxkX2RzaV9k cGlfb3V0cHV0ICpkcGlfb3V0cHV0ID0gTlVMTDsKLQlzdHJ1Y3QgbWRmbGRfZHNpX2NvbmZpZyAq ZHNpX2NvbmZpZzsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gTlVMTDsKLQlz dHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIgPSBOVUxMOwotCWludCBwaXBlOwotCXUzMiBkYXRh OwotCWludCByZXQ7Ci0KLQlwaXBlID0gZHNpX2Nvbm5lY3Rvci0+cGlwZTsKLQotCWlmIChtZGZs ZF9nZXRfcGFuZWxfdHlwZShkZXYsIHBpcGUpICE9IFRDMzU4NzZYKSB7Ci0JCWRzaV9jb25maWcg PSBtZGZsZF9kc2lfZ2V0X2NvbmZpZyhkc2lfY29ubmVjdG9yKTsKLQotCQkvKiBwYW5lbCBoYXJk LXJlc2V0ICovCi0JCWlmIChwX2Z1bmNzLT5yZXNldCkgewotCQkJcmV0ID0gcF9mdW5jcy0+cmVz ZXQoZGV2LCBwaXBlKTsKLQkJCWlmIChyZXQpIHsKLQkJCQlEUk1fRVJST1IoIlBhbmVsICVkIGhh cmQtcmVzZXQgZmFpbGVkXG4iLCBwaXBlKTsKLQkJCQlyZXR1cm4gTlVMTDsKLQkJCX0KLQkJfQot Ci0JCS8qIHBhbmVsIGRydklDIGluaXQgKi8KLQkJaWYgKHBfZnVuY3MtPmRydl9pY19pbml0KQot CQkJcF9mdW5jcy0+ZHJ2X2ljX2luaXQoZHNpX2NvbmZpZywgcGlwZSk7Ci0KLQkJLyogcGFuZWwg cG93ZXIgbW9kZSBkZXRlY3QgKi8KLQkJcmV0ID0gbWRmbGRfZHNpX2dldF9wb3dlcl9tb2RlKGRz aV9jb25maWcsICZkYXRhLCBmYWxzZSk7Ci0JCWlmIChyZXQpIHsKLQkJCURSTV9FUlJPUigiUGFu ZWwgJWQgZ2V0IHBvd2VyIG1vZGUgZmFpbGVkXG4iLCBwaXBlKTsKLQkJCWRzaV9jb25uZWN0b3It PnN0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOwotCQl9IGVsc2UgewotCQkJ RFJNX0lORk8oInBpcGUgJWQgcG93ZXIgbW9kZSAweCV4XG4iLCBwaXBlLCBkYXRhKTsKLQkJCWRz aV9jb25uZWN0b3ItPnN0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOwotCQl9Ci0J fQotCi0JZHBpX291dHB1dCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtZGZsZF9kc2lfZHBpX291 dHB1dCksIEdGUF9LRVJORUwpOwotCWlmICghZHBpX291dHB1dCkgewotCQlEUk1fRVJST1IoIk5v IG1lbW9yeVxuIik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWRwaV9vdXRwdXQtPnBhbmVsX29u ID0gMDsKLQlkcGlfb3V0cHV0LT5kZXYgPSBkZXY7Ci0JaWYgKG1kZmxkX2dldF9wYW5lbF90eXBl KGRldiwgcGlwZSkgIT0gVEMzNTg3NlgpCi0JCWRwaV9vdXRwdXQtPnBfZnVuY3MgPSBwX2Z1bmNz OwotCWRwaV9vdXRwdXQtPmZpcnN0X2Jvb3QgPSAxOwotCi0JLypnZXQgZml4ZWQgbW9kZSovCi0J ZHNpX2NvbmZpZyA9IG1kZmxkX2RzaV9nZXRfY29uZmlnKGRzaV9jb25uZWN0b3IpOwotCi0JLypj cmVhdGUgZHJtIGVuY29kZXIgb2JqZWN0Ki8KLQljb25uZWN0b3IgPSAmZHNpX2Nvbm5lY3Rvci0+ YmFzZS5iYXNlOwotCWVuY29kZXIgPSAmZHBpX291dHB1dC0+YmFzZS5iYXNlLmJhc2U7Ci0JZHJt X3NpbXBsZV9lbmNvZGVyX2luaXQoZGV2LCBlbmNvZGVyLCBEUk1fTU9ERV9FTkNPREVSX0xWRFMp OwotCWRybV9lbmNvZGVyX2hlbHBlcl9hZGQoZW5jb2RlciwKLQkJCQlwX2Z1bmNzLT5lbmNvZGVy X2hlbHBlcl9mdW5jcyk7Ci0KLQkvKmF0dGFjaCB0byBnaXZlbiBjb25uZWN0b3IqLwotCWRybV9j b25uZWN0b3JfYXR0YWNoX2VuY29kZXIoY29ubmVjdG9yLCBlbmNvZGVyKTsKLQotCS8qc2V0IHBv c3NpYmxlIGNydGNzIGFuZCBjbG9uZXMqLwotCWlmIChkc2lfY29ubmVjdG9yLT5waXBlKSB7Ci0J CWVuY29kZXItPnBvc3NpYmxlX2NydGNzID0gKDEgPDwgMik7Ci0JCWVuY29kZXItPnBvc3NpYmxl X2Nsb25lcyA9IDA7Ci0JfSBlbHNlIHsKLQkJZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MgPSAoMSA8 PCAwKTsKLQkJZW5jb2Rlci0+cG9zc2libGVfY2xvbmVzID0gMDsKLQl9Ci0KLQlkc2lfY29ubmVj dG9yLT5iYXNlLmVuY29kZXIgPSAmZHBpX291dHB1dC0+YmFzZS5iYXNlOwotCi0JcmV0dXJuICZk cGlfb3V0cHV0LT5iYXNlOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9t ZGZsZF9kc2lfZHBpLmggYi9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL21kZmxkX2RzaV9kcGkuaApk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmI0MDY2M2UxNjk2Li4wMDAwMDAwMDAwMDAK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9tZGZsZF9kc2lfZHBpLmgKKysrIC9kZXYvbnVs bApAQCAtMSw3OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IMKpIDIwMTAgSW50ZWwgQ29ycG9y YXRpb24KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJn ZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFu ZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRv IGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRo b3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdl LCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVz IG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCi0gKiBT b2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBj b25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBl cm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKLSAqIHBhcmFncmFwaCkgc2hhbGwg YmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUK LSAqIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBX SVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNM VURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1F TlQuICBJTiBOTyBFVkVOVCBTSEFMTAotICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERF UlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElU WSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBB UklTSU5HCi0gKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FS RSBPUiBUSEUgVVNFIE9SIE9USEVSCi0gKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCi0gKgot ICogQXV0aG9yczoKLSAqIGppbSBsaXUgPGppbS5saXVAaW50ZWwuY29tPgotICogSmFja2llIExp PHlhb2RvbmcubGlAaW50ZWwuY29tPgotICovCi0KLSNpZm5kZWYgX19NREZMRF9EU0lfRFBJX0hf XwotI2RlZmluZSBfX01ERkxEX0RTSV9EUElfSF9fCi0KLSNpbmNsdWRlICJtZGZsZF9kc2lfb3V0 cHV0LmgiCi0jaW5jbHVkZSAibWRmbGRfb3V0cHV0LmgiCi0KLXN0cnVjdCBtZGZsZF9kc2lfZHBp X3RpbWluZyB7Ci0JdTE2IGhzeW5jX2NvdW50OwotCXUxNiBoYnBfY291bnQ7Ci0JdTE2IGhmcF9j b3VudDsKLQl1MTYgaGFjdGl2ZV9jb3VudDsKLQl1MTYgdnN5bmNfY291bnQ7Ci0JdTE2IHZicF9j b3VudDsKLQl1MTYgdmZwX2NvdW50OwotfTsKLQotc3RydWN0IG1kZmxkX2RzaV9kcGlfb3V0cHV0 IHsKLQlzdHJ1Y3QgbWRmbGRfZHNpX2VuY29kZXIgYmFzZTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2OwotCi0JaW50IHBhbmVsX29uOwotCWludCBmaXJzdF9ib290OwotCi0JY29uc3Qgc3RydWN0 IHBhbmVsX2Z1bmNzICpwX2Z1bmNzOwotfTsKLQotI2RlZmluZSBNREZMRF9EU0lfRFBJX09VVFBV VChkc2lfZW5jb2RlcilcCi0JY29udGFpbmVyX29mKGRzaV9lbmNvZGVyLCBzdHJ1Y3QgbWRmbGRf ZHNpX2RwaV9vdXRwdXQsIGJhc2UpCi0KLS8qIEV4cG9ydCBmdW5jdGlvbnMgKi8KLWV4dGVybiBp bnQgbWRmbGRfZHNpX2RwaV90aW1pbmdfY2FsY3VsYXRpb24oc3RydWN0IGRybV9kaXNwbGF5X21v ZGUgKm1vZGUsCi0JCQkJc3RydWN0IG1kZmxkX2RzaV9kcGlfdGltaW5nICpkcGlfdGltaW5nLAot CQkJCWludCBudW1fbGFuZSwgaW50IGJwcCk7Ci1leHRlcm4gc3RydWN0IG1kZmxkX2RzaV9lbmNv ZGVyICptZGZsZF9kc2lfZHBpX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCQlzdHJ1 Y3QgbWRmbGRfZHNpX2Nvbm5lY3RvciAqZHNpX2Nvbm5lY3RvciwKLQkJCQljb25zdCBzdHJ1Y3Qg cGFuZWxfZnVuY3MgKnBfZnVuY3MpOwotCi0vKiBNREZMRCBEUEkgaGVscGVyIGZ1bmN0aW9ucyAq LwotZXh0ZXJuIHZvaWQgbWRmbGRfZHNpX2RwaV9kcG1zKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5j b2RlciwgaW50IG1vZGUpOwotZXh0ZXJuIGJvb2wgbWRmbGRfZHNpX2RwaV9tb2RlX2ZpeHVwKHN0 cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKLQkJCQljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSAqbW9kZSwKLQkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSk7 Ci1leHRlcm4gdm9pZCBtZGZsZF9kc2lfZHBpX3ByZXBhcmUoc3RydWN0IGRybV9lbmNvZGVyICpl bmNvZGVyKTsKLWV4dGVybiB2b2lkIG1kZmxkX2RzaV9kcGlfY29tbWl0KHN0cnVjdCBkcm1fZW5j b2RlciAqZW5jb2Rlcik7Ci1leHRlcm4gdm9pZCBtZGZsZF9kc2lfZHBpX21vZGVfc2V0KHN0cnVj dCBkcm1fZW5jb2RlciAqZW5jb2RlciwKLQkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9k ZSwKLQkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSk7Ci1leHRlcm4g dm9pZCBtZGZsZF9kc2lfZHBpX3R1cm5fb24oc3RydWN0IG1kZmxkX2RzaV9kcGlfb3V0cHV0ICpv dXRwdXQsCi0JCQkJaW50IHBpcGUpOwotZXh0ZXJuIHZvaWQgbWRmbGRfZHNpX2RwaV9jb250cm9s bGVyX2luaXQoc3RydWN0IG1kZmxkX2RzaV9jb25maWcgKmRzaV9jb25maWcsCi0JCQkJaW50IHBp cGUpOwotI2VuZGlmIC8qX19NREZMRF9EU0lfRFBJX0hfXyovCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vZ21hNTAwL21kZmxkX2RzaV9vdXRwdXQuYyBiL2RyaXZlcnMvZ3B1L2RybS9nbWE1 MDAvbWRmbGRfZHNpX291dHB1dC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDEw NWY0NWMxYzQuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL21kZmxk X2RzaV9vdXRwdXQuYworKysgL2Rldi9udWxsCkBAIC0xLDYwMyArMCwwIEBACi0vKgotICogQ29w eXJpZ2h0IMKpIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhl cmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQot ICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmls ZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQg cmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMg dG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNl bnNlLAotICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1p dCBwZXJzb25zIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28s IHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBj b3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhl IG5leHQKLSAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBz dWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKLSAqIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZU V0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBF WFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAotICogVEhF IEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERB TUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09O VFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCi0gKiBGUk9NLCBPVVQgT0YgT1IgSU4g Q09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCi0gKiBERUFM SU5HUyBJTiBUSEUgU09GVFdBUkUuCi0gKgotICogQXV0aG9yczoKLSAqIGppbSBsaXUgPGppbS5s aXVAaW50ZWwuY29tPgotICogSmFja2llIExpPHlhb2RvbmcubGlAaW50ZWwuY29tPgotICovCi0K LSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+ Ci0jaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29u c3VtZXIuaD4KLQotI2luY2x1ZGUgPGFzbS9pbnRlbF9zY3VfaXBjLmg+Ci0KLSNpbmNsdWRlICJt ZGZsZF9kc2lfZHBpLmgiCi0jaW5jbHVkZSAibWRmbGRfZHNpX291dHB1dC5oIgotI2luY2x1ZGUg Im1kZmxkX2RzaV9wa2dfc2VuZGVyLmgiCi0jaW5jbHVkZSAibWRmbGRfb3V0cHV0LmgiCi0jaW5j bHVkZSAidGMzNTg3NngtZHNpLWx2ZHMuaCIKLQotLyogZ2V0IHRoZSBMQUJDIGZyb20gY29tbWFu ZCBsaW5lLiAqLwotc3RhdGljIGludCBMQUJDX2NvbnRyb2wgPSAxOwotCi0jaWZkZWYgTU9EVUxF Ci1tb2R1bGVfcGFyYW0oTEFCQ19jb250cm9sLCBpbnQsIDA2NDQpOwotI2Vsc2UKLQotc3RhdGlj IGludCBfX2luaXQgcGFyc2VfTEFCQ19jb250cm9sKGNoYXIgKmFyZykKLXsKLQkvKiBMQUJDIGNv bnRyb2wgY2FuIGJlIHBhc3NlZCBpbiBhcyBhIGNtZGxpbmUgcGFyYW1ldGVyICovCi0JLyogdG8g ZW5hYmxlIHRoaXMgZmVhdHVyZSBhZGQgTEFCQz0xIHRvIGNtZGxpbmUgKi8KLQkvKiB0byBkaXNh YmxlIHRoaXMgZmVhdHVyZSBhZGQgTEFCQz0wIHRvIGNtZGxpbmUgKi8KLQlpZiAoIWFyZykKLQkJ cmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIXN0cmNhc2VjbXAoYXJnLCAiMCIpKQotCQlMQUJDX2Nv bnRyb2wgPSAwOwotCWVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZywgIjEiKSkKLQkJTEFCQ19jb250 cm9sID0gMTsKLQotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oIkxBQkMiLCBwYXJzZV9MQUJD X2NvbnRyb2wpOwotI2VuZGlmCi0KLS8qCi0gKiBDaGVjayBhbmQgc2VlIGlmIHRoZSBnZW5lcmlj IGNvbnRyb2wgb3IgZGF0YSBidWZmZXIgaXMgZW1wdHkgYW5kIHJlYWR5LgotICovCi12b2lkIG1k ZmxkX2RzaV9nZW5fZmlmb19yZWFkeShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgZ2VuX2Zp Zm9fc3RhdF9yZWcsCi0JCQkJCQkJdTMyIGZpZm9fc3RhdCkKLXsKLQl1MzIgR0VOX0JGX3RpbWVf b3V0X2NvdW50OwotCi0JLyogQ2hlY2sgTUlQSSBBZGF0cGVyIGNvbW1hbmQgcmVnaXN0ZXJzICov Ci0JZm9yIChHRU5fQkZfdGltZV9vdXRfY291bnQgPSAwOwotCQkJR0VOX0JGX3RpbWVfb3V0X2Nv dW50IDwgR0VOX0ZCX1RJTUVfT1VUOwotCQkJR0VOX0JGX3RpbWVfb3V0X2NvdW50KyspIHsKLQkJ aWYgKChSRUdfUkVBRChnZW5fZmlmb19zdGF0X3JlZykgJiBmaWZvX3N0YXQpID09IGZpZm9fc3Rh dCkKLQkJCWJyZWFrOwotCQl1ZGVsYXkoMTAwKTsKLQl9Ci0KLQlpZiAoR0VOX0JGX3RpbWVfb3V0 X2NvdW50ID09IEdFTl9GQl9USU1FX09VVCkKLQkJRFJNX0VSUk9SKCJtZGZsZF9kc2lfZ2VuX2Zp Zm9fcmVhZHksIFRpbWVvdXQuIGdlbl9maWZvX3N0YXRfcmVnID0gMHgleC5cbiIsCi0JCQkJCWdl bl9maWZvX3N0YXRfcmVnKTsKLX0KLQotLyoKLSAqIE1hbmFnZSB0aGUgRFNJIE1JUEkga2V5Ym9h cmQgYW5kIGRpc3BsYXkgYnJpZ2h0bmVzcy4KLSAqIEZJWE1FOiB0aGlzIGlzIGV4cG9ydGVkIHRv IE9TUE0gY29kZS4gc2hvdWxkIHdvcmsgb3V0IGFuIHNwZWNpZmljCi0gKiBkaXNwbGF5IGludGVy ZmFjZSB0byBPU1BNLgotICovCi0KLXZvaWQgbWRmbGRfZHNpX2JyaWdodG5lc3NfaW5pdChzdHJ1 Y3QgbWRmbGRfZHNpX2NvbmZpZyAqZHNpX2NvbmZpZywgaW50IHBpcGUpCi17Ci0Jc3RydWN0IG1k ZmxkX2RzaV9wa2dfc2VuZGVyICpzZW5kZXIgPQotCQkJCW1kZmxkX2RzaV9nZXRfcGtnX3NlbmRl cihkc2lfY29uZmlnKTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OwotCXN0cnVjdCBkcm1fcHNi X3ByaXZhdGUgKmRldl9wcml2OwotCXUzMiBnZW5fY3RybF92YWw7Ci0KLQlpZiAoIXNlbmRlcikg ewotCQlEUk1fRVJST1IoIk5vIHNlbmRlciBmb3VuZFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlk ZXYgPSBzZW5kZXItPmRldjsKLQlkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0KLQkvKiBT ZXQgZGVmYXVsdCBkaXNwbGF5IGJhY2tsaWdodCB2YWx1ZSB0byA4NSUgKDB4ZDgpKi8KLQltZGZs ZF9kc2lfc2VuZF9tY3Nfc2hvcnQoc2VuZGVyLCB3cml0ZV9kaXNwbGF5X2JyaWdodG5lc3MsIDB4 ZDgsIDEsCi0JCQkJdHJ1ZSk7Ci0KLQkvKiBTZXQgbWluaW11bSBicmlnaHRuZXNzIHNldHRpbmcg b2YgQ0FCQyBmdW5jdGlvbiB0byAyMCUgKDB4MzMpKi8KLQltZGZsZF9kc2lfc2VuZF9tY3Nfc2hv cnQoc2VuZGVyLCB3cml0ZV9jYWJjX21pbl9icmlnaHQsIDB4MzMsIDEsIHRydWUpOwotCi0JLyog RW5hYmxlIGJhY2tsaWdodCBvci9hbmQgTEFCQyAqLwotCWdlbl9jdHJsX3ZhbCA9IEJSSUdIVF9D TlRMX0JMT0NLX09OIHwgRElTUExBWV9ESU1NSU5HX09OIHwKLQkJCQkJCQkJQkFDS0xJR0hUX09O OwotCWlmIChMQUJDX2NvbnRyb2wgPT0gMSkKLQkJZ2VuX2N0cmxfdmFsIHw9IERJU1BMQVlfRElN TUlOR19PTiB8IERJU1BMQVlfQlJJR0hUTkVTU19BVVRPCi0JCQkJCQkJCXwgR0FNTUFfQVVUTzsK LQotCWlmIChMQUJDX2NvbnRyb2wgPT0gMSkKLQkJZ2VuX2N0cmxfdmFsIHw9IEFNQklFTlRfTElH SFRfU0VOU0VfT047Ci0KLQlkZXZfcHJpdi0+bWlwaV9jdHJsX2Rpc3BsYXkgPSBnZW5fY3RybF92 YWw7Ci0KLQltZGZsZF9kc2lfc2VuZF9tY3Nfc2hvcnQoc2VuZGVyLCB3cml0ZV9jdHJsX2Rpc3Bs YXksICh1OClnZW5fY3RybF92YWwsCi0JCQkJMSwgdHJ1ZSk7Ci0KLQltZGZsZF9kc2lfc2VuZF9t Y3Nfc2hvcnQoc2VuZGVyLCB3cml0ZV9jdHJsX2NhYmMsIFVJX0lNQUdFLCAxLCB0cnVlKTsKLX0K LQotdm9pZCBtZGZsZF9kc2lfYnJpZ2h0bmVzc19jb250cm9sKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsIGludCBwaXBlLCBpbnQgbGV2ZWwpCi17Ci0Jc3RydWN0IG1kZmxkX2RzaV9wa2dfc2VuZGVy ICpzZW5kZXI7Ci0Jc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXY7Ci0Jc3RydWN0IG1k ZmxkX2RzaV9jb25maWcgKmRzaV9jb25maWc7Ci0JdTMyIGdlbl9jdHJsX3ZhbCA9IDA7Ci0JaW50 IHBfdHlwZSA9IFRNRF9WSUQ7Ci0KLQlpZiAoIWRldiB8fCAocGlwZSAhPSAwICYmIHBpcGUgIT0g MikpIHsKLQkJRFJNX0VSUk9SKCJJbnZhbGlkIHBhcmFtZXRlclxuIik7Ci0JCXJldHVybjsKLQl9 Ci0KLQlwX3R5cGUgPSBtZGZsZF9nZXRfcGFuZWxfdHlwZShkZXYsIDApOwotCi0JZGV2X3ByaXYg PSBkZXYtPmRldl9wcml2YXRlOwotCi0JaWYgKHBpcGUpCi0JCWRzaV9jb25maWcgPSBkZXZfcHJp di0+ZHNpX2NvbmZpZ3NbMV07Ci0JZWxzZQotCQlkc2lfY29uZmlnID0gZGV2X3ByaXYtPmRzaV9j b25maWdzWzBdOwotCi0Jc2VuZGVyID0gbWRmbGRfZHNpX2dldF9wa2dfc2VuZGVyKGRzaV9jb25m aWcpOwotCi0JaWYgKCFzZW5kZXIpIHsKLQkJRFJNX0VSUk9SKCJObyBzZW5kZXIgZm91bmRcbiIp OwotCQlyZXR1cm47Ci0JfQotCi0JZ2VuX2N0cmxfdmFsID0gKGxldmVsICogMHhmZiAvIE1ERkxE X0RTSV9CUklHSFRORVNTX01BWF9MRVZFTCkgJiAweGZmOwotCi0JZGV2X2RiZyhzZW5kZXItPmRl di0+ZGV2LCAicGlwZSA9ICVkLCBnZW5fY3RybF92YWwgPSAlZC5cbiIsCi0JCQkJCQkJcGlwZSwg Z2VuX2N0cmxfdmFsKTsKLQotCWlmIChwX3R5cGUgPT0gVE1EX1ZJRCkgewotCQkvKiBTZXQgZGlz cGxheSBiYWNrbGlnaHQgdmFsdWUgKi8KLQkJbWRmbGRfZHNpX3NlbmRfbWNzX3Nob3J0KHNlbmRl ciwgdG1kX3dyaXRlX2Rpc3BsYXlfYnJpZ2h0bmVzcywKLQkJCQkJKHU4KWdlbl9jdHJsX3ZhbCwg MSwgdHJ1ZSk7Ci0JfSBlbHNlIHsKLQkJLyogU2V0IGRpc3BsYXkgYmFja2xpZ2h0IHZhbHVlICov Ci0JCW1kZmxkX2RzaV9zZW5kX21jc19zaG9ydChzZW5kZXIsIHdyaXRlX2Rpc3BsYXlfYnJpZ2h0 bmVzcywKLQkJCQkJKHU4KWdlbl9jdHJsX3ZhbCwgMSwgdHJ1ZSk7Ci0KLQkJLyogRW5hYmxlIGJh Y2tsaWdodCBjb250cm9sICovCi0JCWlmIChsZXZlbCA9PSAwKQotCQkJZ2VuX2N0cmxfdmFsID0g MDsKLQkJZWxzZQotCQkJZ2VuX2N0cmxfdmFsID0gZGV2X3ByaXYtPm1pcGlfY3RybF9kaXNwbGF5 OwotCi0JCW1kZmxkX2RzaV9zZW5kX21jc19zaG9ydChzZW5kZXIsIHdyaXRlX2N0cmxfZGlzcGxh eSwKLQkJCQkJKHU4KWdlbl9jdHJsX3ZhbCwgMSwgdHJ1ZSk7Ci0JfQotfQotCi1zdGF0aWMgaW50 IG1kZmxkX2RzaV9nZXRfcGFuZWxfc3RhdHVzKHN0cnVjdCBtZGZsZF9kc2lfY29uZmlnICpkc2lf Y29uZmlnLAotCQkJCXU4IGRjcywgdTMyICpkYXRhLCBib29sIGhzKQotewotCXN0cnVjdCBtZGZs ZF9kc2lfcGtnX3NlbmRlciAqc2VuZGVyCi0JCT0gbWRmbGRfZHNpX2dldF9wa2dfc2VuZGVyKGRz aV9jb25maWcpOwotCi0JaWYgKCFzZW5kZXIgfHwgIWRhdGEpIHsKLQkJRFJNX0VSUk9SKCJJbnZh bGlkIHBhcmFtZXRlclxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiBtZGZs ZF9kc2lfcmVhZF9tY3Moc2VuZGVyLCBkY3MsIGRhdGEsIDEsIGhzKTsKLX0KLQotaW50IG1kZmxk X2RzaV9nZXRfcG93ZXJfbW9kZShzdHJ1Y3QgbWRmbGRfZHNpX2NvbmZpZyAqZHNpX2NvbmZpZywg dTMyICptb2RlLAotCQkJYm9vbCBocykKLXsKLQlpZiAoIWRzaV9jb25maWcgfHwgIW1vZGUpIHsK LQkJRFJNX0VSUk9SKCJJbnZhbGlkIHBhcmFtZXRlclxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwot CX0KLQotCXJldHVybiBtZGZsZF9kc2lfZ2V0X3BhbmVsX3N0YXR1cyhkc2lfY29uZmlnLCAweDBh LCBtb2RlLCBocyk7Ci19Ci0KLS8qCi0gKiBOT1RFOiB0aGlzIGZ1bmN0aW9uIHdhcyB1c2VkIGJ5 IE9TUE0uCi0gKiBUT0RPOiB3aWxsIGJlIHJlbW92ZWQgbGF0ZXIsIHNob3VsZCB3b3JrIG91dCBk aXNwbGF5IGludGVyZmFjZXMgZm9yIE9TUE0KLSAqLwotdm9pZCBtZGZsZF9kc2lfY29udHJvbGxl cl9pbml0KHN0cnVjdCBtZGZsZF9kc2lfY29uZmlnICpkc2lfY29uZmlnLCBpbnQgcGlwZSkKLXsK LQlpZiAoIWRzaV9jb25maWcgfHwgKChwaXBlICE9IDApICYmIChwaXBlICE9IDIpKSkgewotCQlE Uk1fRVJST1IoIkludmFsaWQgcGFyYW1ldGVyc1xuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQltZGZs ZF9kc2lfZHBpX2NvbnRyb2xsZXJfaW5pdChkc2lfY29uZmlnLCBwaXBlKTsKLX0KLQotc3RhdGlj IHZvaWQgbWRmbGRfZHNpX2Nvbm5lY3Rvcl9zYXZlKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3IpCi17Ci19Ci0KLXN0YXRpYyB2b2lkIG1kZmxkX2RzaV9jb25uZWN0b3JfcmVzdG9yZShz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQotewotfQotCi0vKiBGSVhNRTogc3RhcnQg dXNpbmcgdGhlIGZvcmNlIHBhcmFtZXRlciAqLwotc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9z dGF0dXMKLW1kZmxkX2RzaV9jb25uZWN0b3JfZGV0ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3IsIGJvb2wgZm9yY2UpCi17Ci0Jc3RydWN0IG1kZmxkX2RzaV9jb25uZWN0b3IgKmRz aV9jb25uZWN0b3IKLQkJPSBtZGZsZF9kc2lfY29ubmVjdG9yKGNvbm5lY3Rvcik7Ci0KLQlkc2lf Y29ubmVjdG9yLT5zdGF0dXMgPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKLQotCXJldHVy biBkc2lfY29ubmVjdG9yLT5zdGF0dXM7Ci19Ci0KLXN0YXRpYyBpbnQgbWRmbGRfZHNpX2Nvbm5l Y3Rvcl9zZXRfcHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKLQkJCQlz dHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwKLQkJCQl1aW50NjRfdCB2YWx1ZSkKLXsKLQlz dHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIgPSBjb25uZWN0b3ItPmVuY29kZXI7Ci0KLQlpZiAo IXN0cmNtcChwcm9wZXJ0eS0+bmFtZSwgInNjYWxpbmcgbW9kZSIpICYmIGVuY29kZXIpIHsKLQkJ c3RydWN0IGdtYV9jcnRjICpnbWFfY3J0YyA9IHRvX2dtYV9jcnRjKGVuY29kZXItPmNydGMpOwot CQlib29sIGNlbnRlcmVjaGFuZ2U7Ci0JCXVpbnQ2NF90IHZhbDsKLQotCQlpZiAoIWdtYV9jcnRj KQotCQkJZ290byBzZXRfcHJvcF9lcnJvcjsKLQotCQlzd2l0Y2ggKHZhbHVlKSB7Ci0JCWNhc2Ug RFJNX01PREVfU0NBTEVfRlVMTFNDUkVFTjoKLQkJCWJyZWFrOwotCQljYXNlIERSTV9NT0RFX1ND QUxFX05PX1NDQUxFOgotCQkJYnJlYWs7Ci0JCWNhc2UgRFJNX01PREVfU0NBTEVfQVNQRUNUOgot CQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlnb3RvIHNldF9wcm9wX2Vycm9yOwotCQl9Ci0KLQkJ aWYgKGRybV9vYmplY3RfcHJvcGVydHlfZ2V0X3ZhbHVlKCZjb25uZWN0b3ItPmJhc2UsIHByb3Bl cnR5LCAmdmFsKSkKLQkJCWdvdG8gc2V0X3Byb3BfZXJyb3I7Ci0KLQkJaWYgKHZhbCA9PSB2YWx1 ZSkKLQkJCWdvdG8gc2V0X3Byb3BfZG9uZTsKLQotCQlpZiAoZHJtX29iamVjdF9wcm9wZXJ0eV9z ZXRfdmFsdWUoJmNvbm5lY3Rvci0+YmFzZSwKLQkJCQkJCQlwcm9wZXJ0eSwgdmFsdWUpKQotCQkJ Z290byBzZXRfcHJvcF9lcnJvcjsKLQotCQljZW50ZXJlY2hhbmdlID0gKHZhbCA9PSBEUk1fTU9E RV9TQ0FMRV9OT19TQ0FMRSkgfHwKLQkJCSh2YWx1ZSA9PSBEUk1fTU9ERV9TQ0FMRV9OT19TQ0FM RSk7Ci0KLQkJaWYgKGdtYV9jcnRjLT5zYXZlZF9tb2RlLmhkaXNwbGF5ICE9IDAgJiYKLQkJICAg IGdtYV9jcnRjLT5zYXZlZF9tb2RlLnZkaXNwbGF5ICE9IDApIHsKLQkJCWlmIChjZW50ZXJlY2hh bmdlKSB7Ci0JCQkJaWYgKCFkcm1fY3J0Y19oZWxwZXJfc2V0X21vZGUoZW5jb2Rlci0+Y3J0YywK LQkJCQkJCSZnbWFfY3J0Yy0+c2F2ZWRfbW9kZSwKLQkJCQkJCWVuY29kZXItPmNydGMtPngsCi0J CQkJCQllbmNvZGVyLT5jcnRjLT55LAotCQkJCQkJZW5jb2Rlci0+Y3J0Yy0+cHJpbWFyeS0+ZmIp KQotCQkJCQlnb3RvIHNldF9wcm9wX2Vycm9yOwotCQkJfSBlbHNlIHsKLQkJCQljb25zdCBzdHJ1 Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzICpmdW5jcyA9Ci0JCQkJCQllbmNvZGVyLT5oZWxw ZXJfcHJpdmF0ZTsKLQkJCQlmdW5jcy0+bW9kZV9zZXQoZW5jb2RlciwKLQkJCQkJJmdtYV9jcnRj LT5zYXZlZF9tb2RlLAotCQkJCQkmZ21hX2NydGMtPnNhdmVkX2FkanVzdGVkX21vZGUpOwotCQkJ fQotCQl9Ci0JfSBlbHNlIGlmICghc3RyY21wKHByb3BlcnR5LT5uYW1lLCAiYmFja2xpZ2h0Iikg JiYgZW5jb2RlcikgewotCQlpZiAoZHJtX29iamVjdF9wcm9wZXJ0eV9zZXRfdmFsdWUoJmNvbm5l Y3Rvci0+YmFzZSwgcHJvcGVydHksCi0JCQkJCQkJCQl2YWx1ZSkpCi0JCQlnb3RvIHNldF9wcm9w X2Vycm9yOwotCQllbHNlCi0JCQlnbWFfYmFja2xpZ2h0X3NldChlbmNvZGVyLT5kZXYsIHZhbHVl KTsKLQl9Ci1zZXRfcHJvcF9kb25lOgotCXJldHVybiAwOwotc2V0X3Byb3BfZXJyb3I6Ci0JcmV0 dXJuIC0xOwotfQotCi1zdGF0aWMgdm9pZCBtZGZsZF9kc2lfY29ubmVjdG9yX2Rlc3Ryb3koc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKLXsKLQlzdHJ1Y3QgbWRmbGRfZHNpX2Nvbm5l Y3RvciAqZHNpX2Nvbm5lY3RvciA9Ci0JCQkJCW1kZmxkX2RzaV9jb25uZWN0b3IoY29ubmVjdG9y KTsKLQlzdHJ1Y3QgbWRmbGRfZHNpX3BrZ19zZW5kZXIgKnNlbmRlcjsKLQotCWlmICghZHNpX2Nv bm5lY3RvcikKLQkJcmV0dXJuOwotCWRybV9jb25uZWN0b3JfdW5yZWdpc3Rlcihjb25uZWN0b3Ip OwotCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25uZWN0b3IpOwotCXNlbmRlciA9IGRzaV9jb25u ZWN0b3ItPnBrZ19zZW5kZXI7Ci0JbWRmbGRfZHNpX3BrZ19zZW5kZXJfZGVzdHJveShzZW5kZXIp OwotCWtmcmVlKGRzaV9jb25uZWN0b3IpOwotfQotCi1zdGF0aWMgaW50IG1kZmxkX2RzaV9jb25u ZWN0b3JfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCi17Ci0Jc3Ry dWN0IG1kZmxkX2RzaV9jb25uZWN0b3IgKmRzaV9jb25uZWN0b3IgPQotCQkJCW1kZmxkX2RzaV9j b25uZWN0b3IoY29ubmVjdG9yKTsKLQlzdHJ1Y3QgbWRmbGRfZHNpX2NvbmZpZyAqZHNpX2NvbmZp ZyA9Ci0JCQkJbWRmbGRfZHNpX2dldF9jb25maWcoZHNpX2Nvbm5lY3Rvcik7Ci0Jc3RydWN0IGRy bV9kaXNwbGF5X21vZGUgKmZpeGVkX21vZGUgPSBkc2lfY29uZmlnLT5maXhlZF9tb2RlOwotCXN0 cnVjdCBkcm1fZGlzcGxheV9tb2RlICpkdXBfbW9kZSA9IE5VTEw7Ci0Jc3RydWN0IGRybV9kZXZp Y2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OwotCi0JaWYgKGZpeGVkX21vZGUpIHsKLQkJZGV2X2Ri ZyhkZXYtPmRldiwgImZpeGVkX21vZGUgJWR4JWRcbiIsCi0JCQkJZml4ZWRfbW9kZS0+aGRpc3Bs YXksIGZpeGVkX21vZGUtPnZkaXNwbGF5KTsKLQkJZHVwX21vZGUgPSBkcm1fbW9kZV9kdXBsaWNh dGUoZGV2LCBmaXhlZF9tb2RlKTsKLQkJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIGR1 cF9tb2RlKTsKLQkJcmV0dXJuIDE7Ci0JfQotCURSTV9FUlJPUigiRGlkbid0IGdldCBhbnkgbW9k ZXMhXG4iKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGVudW0gZHJtX21vZGVfc3RhdHVzIG1k ZmxkX2RzaV9jb25uZWN0b3JfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yLAotCQkJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCi17Ci0Jc3RydWN0IG1k ZmxkX2RzaV9jb25uZWN0b3IgKmRzaV9jb25uZWN0b3IgPQotCQkJCQltZGZsZF9kc2lfY29ubmVj dG9yKGNvbm5lY3Rvcik7Ci0Jc3RydWN0IG1kZmxkX2RzaV9jb25maWcgKmRzaV9jb25maWcgPQot CQkJCQltZGZsZF9kc2lfZ2V0X2NvbmZpZyhkc2lfY29ubmVjdG9yKTsKLQlzdHJ1Y3QgZHJtX2Rp c3BsYXlfbW9kZSAqZml4ZWRfbW9kZSA9IGRzaV9jb25maWctPmZpeGVkX21vZGU7Ci0KLQlpZiAo bW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0RCTFNDQU4pCi0JCXJldHVybiBNT0RFX05PX0RC TEVTQ0FOOwotCi0JaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UpCi0J CXJldHVybiBNT0RFX05PX0lOVEVSTEFDRTsKLQotCS8qKgotCSAqIEZJWE1FOiBjdXJyZW50IERD IGhhcyBubyBmaXR0aW5nIHVuaXQsIHJlamVjdCBhbnkgbW9kZSBzZXR0aW5nCi0JICogcmVxdWVz dAotCSAqIFdpbGwgZmlndXJlIG91dCBhIHdheSB0byBkbyB1cC1zY2FsaW5nKHBhbmVsIGZpdHRp bmcpIGxhdGVyLgotCSAqKi8KLQlpZiAoZml4ZWRfbW9kZSkgewotCQlpZiAobW9kZS0+aGRpc3Bs YXkgIT0gZml4ZWRfbW9kZS0+aGRpc3BsYXkpCi0JCQlyZXR1cm4gTU9ERV9QQU5FTDsKLQotCQlp ZiAobW9kZS0+dmRpc3BsYXkgIT0gZml4ZWRfbW9kZS0+dmRpc3BsYXkpCi0JCQlyZXR1cm4gTU9E RV9QQU5FTDsKLQl9Ci0KLQlyZXR1cm4gTU9ERV9PSzsKLX0KLQotc3RhdGljIHN0cnVjdCBkcm1f ZW5jb2RlciAqbWRmbGRfZHNpX2Nvbm5lY3Rvcl9iZXN0X2VuY29kZXIoCi0JCQkJc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3RvcikKLXsKLQlzdHJ1Y3QgbWRmbGRfZHNpX2Nvbm5lY3RvciAq ZHNpX2Nvbm5lY3RvciA9Ci0JCQkJbWRmbGRfZHNpX2Nvbm5lY3Rvcihjb25uZWN0b3IpOwotCXN0 cnVjdCBtZGZsZF9kc2lfY29uZmlnICpkc2lfY29uZmlnID0KLQkJCQltZGZsZF9kc2lfZ2V0X2Nv bmZpZyhkc2lfY29ubmVjdG9yKTsKLQlyZXR1cm4gJmRzaV9jb25maWctPmVuY29kZXItPmJhc2Uu YmFzZTsKLX0KLQotLypEU0kgY29ubmVjdG9yIGZ1bmNzKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qg ZHJtX2Nvbm5lY3Rvcl9mdW5jcyBtZGZsZF9kc2lfY29ubmVjdG9yX2Z1bmNzID0gewotCS5kcG1z ID0gZHJtX2hlbHBlcl9jb25uZWN0b3JfZHBtcywKLQkuZGV0ZWN0ID0gbWRmbGRfZHNpX2Nvbm5l Y3Rvcl9kZXRlY3QsCi0JLmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25u ZWN0b3JfbW9kZXMsCi0JLnNldF9wcm9wZXJ0eSA9IG1kZmxkX2RzaV9jb25uZWN0b3Jfc2V0X3By b3BlcnR5LAotCS5kZXN0cm95ID0gbWRmbGRfZHNpX2Nvbm5lY3Rvcl9kZXN0cm95LAotfTsKLQot LypEU0kgY29ubmVjdG9yIGhlbHBlciBmdW5jcyovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9j b25uZWN0b3JfaGVscGVyX2Z1bmNzCi0JbWRmbGRfZHNpX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3Mg PSB7Ci0JLmdldF9tb2RlcyA9IG1kZmxkX2RzaV9jb25uZWN0b3JfZ2V0X21vZGVzLAotCS5tb2Rl X3ZhbGlkID0gbWRmbGRfZHNpX2Nvbm5lY3Rvcl9tb2RlX3ZhbGlkLAotCS5iZXN0X2VuY29kZXIg PSBtZGZsZF9kc2lfY29ubmVjdG9yX2Jlc3RfZW5jb2RlciwKLX07Ci0KLXN0YXRpYyBpbnQgbWRm bGRfZHNpX2dldF9kZWZhdWx0X2NvbmZpZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJCXN0 cnVjdCBtZGZsZF9kc2lfY29uZmlnICpjb25maWcsIGludCBwaXBlKQotewotCWlmICghZGV2IHx8 ICFjb25maWcpIHsKLQkJRFJNX0VSUk9SKCJJbnZhbGlkIHBhcmFtZXRlcnMiKTsKLQkJcmV0dXJu IC1FSU5WQUw7Ci0JfQotCi0JY29uZmlnLT5icHAgPSAyNDsKLQlpZiAobWRmbGRfZ2V0X3BhbmVs X3R5cGUoZGV2LCBwaXBlKSA9PSBUQzM1ODc2WCkKLQkJY29uZmlnLT5sYW5lX2NvdW50ID0gNDsK LQllbHNlCi0JCWNvbmZpZy0+bGFuZV9jb3VudCA9IDI7Ci0JY29uZmlnLT5jaGFubmVsX251bSA9 IDA7Ci0KLQlpZiAobWRmbGRfZ2V0X3BhbmVsX3R5cGUoZGV2LCBwaXBlKSA9PSBUTURfVklEKQot CQljb25maWctPnZpZGVvX21vZGUgPSBNREZMRF9EU0lfVklERU9fTk9OX0JVUlNUX01PREVfU1lO Q19QVUxTRTsKLQllbHNlIGlmIChtZGZsZF9nZXRfcGFuZWxfdHlwZShkZXYsIHBpcGUpID09IFRD MzU4NzZYKQotCQljb25maWctPnZpZGVvX21vZGUgPQotCQkJCU1ERkxEX0RTSV9WSURFT19OT05f QlVSU1RfTU9ERV9TWU5DX0VWRU5UUzsKLQllbHNlCi0JCWNvbmZpZy0+dmlkZW9fbW9kZSA9IE1E RkxEX0RTSV9WSURFT19CVVJTVF9NT0RFOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBtZGZsZF9k c2lfcGFuZWxfcmVzZXQoc3RydWN0IGRybV9kZXZpY2UgKmRkZXYsIGludCBwaXBlKQotewotCXN0 cnVjdCBkZXZpY2UgKmRldiA9IGRkZXYtPmRldjsKLQlzdHJ1Y3QgZ3Bpb19kZXNjICpncGlvZDsK LQotCS8qCi0JICogUmFpc2UgdGhlIEdQSU8gcmVzZXQgbGluZSBmb3IgdGhlIGNvcnJlc3BvbmRp bmcgcGlwZSB0byBISUdILAotCSAqIHRoaXMgaXMgcHJvYmFibHkgYmVjYXVzZSBpdCBpcyBhY3Rp dmUgbG93IHNvIHRoaXMgdGFrZXMgdGhlCi0JICogcmVzcGVjdGl2ZSBwaXBlIG91dCBvZiByZXNl dC4gKFdlIGhhdmUgbm8gY29kZSB0byBwdXQgaXQgYmFjawotCSAqIGludG8gcmVzZXQgaW4gdGhp cyBkcml2ZXIuKQotCSAqLwotCXN3aXRjaCAocGlwZSkgewotCWNhc2UgMDoKLQkJZ3Bpb2QgPSBn cGlvZF9nZXQoZGV2LCAiZHNpLXBpcGUwLXJlc2V0IiwgR1BJT0RfT1VUX0hJR0gpOwotCQlpZiAo SVNfRVJSKGdwaW9kKSkKLQkJCXJldHVybiBQVFJfRVJSKGdwaW9kKTsKLQkJYnJlYWs7Ci0JY2Fz ZSAyOgotCQlncGlvZCA9IGdwaW9kX2dldChkZXYsICJkc2ktcGlwZTItcmVzZXQiLCBHUElPRF9P VVRfSElHSCk7Ci0JCWlmIChJU19FUlIoZ3Bpb2QpKQotCQkJcmV0dXJuIFBUUl9FUlIoZ3Bpb2Qp OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlEUk1fREVWX0VSUk9SKGRldiwgIkludmFsaWQgb3V0 cHV0IHBpcGVcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JZ3Bpb2RfcHV0KGdwaW9kKTsK LQotCS8qIEZsdXNoIHBvc3RlZCB3cml0ZXMgb24gdGhlIGRldmljZSAqLwotCWdwaW9kID0gZ3Bp b2RfZ2V0KGRldiwgImRzaS1waXBlMC1yZXNldCIsIEdQSU9EX0FTSVMpOwotCWlmIChJU19FUlIo Z3Bpb2QpKQotCQlyZXR1cm4gUFRSX0VSUihncGlvZCk7Ci0JZ3Bpb2RfZ2V0X3ZhbHVlKGdwaW9k KTsKLQlncGlvZF9wdXQoZ3Bpb2QpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBNSVBJIG91 dHB1dCBpbml0Ci0gKiBAZGV2IGRybSBkZXZpY2UKLSAqIEBwaXBlIHBpcGUgbnVtYmVyLiAwIG9y IDIKLSAqIEBjb25maWcKLSAqCi0gKiBEbyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYSBNSVBJIG91 dHB1dCwgaW5jbHVkaW5nIGNyZWF0ZSBEUk0gbW9kZSBvYmplY3RzCi0gKiBpbml0aWFsaXphdGlv biBvZiBEU0kgb3V0cHV0IG9uIEBwaXBlCi0gKi8KLXZvaWQgbWRmbGRfZHNpX291dHB1dF9pbml0 KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkgICBpbnQgcGlwZSwKLQkJCSAgIGNvbnN0IHN0 cnVjdCBwYW5lbF9mdW5jcyAqcF92aWRfZnVuY3MpCi17Ci0Jc3RydWN0IG1kZmxkX2RzaV9jb25m aWcgKmRzaV9jb25maWc7Ci0Jc3RydWN0IG1kZmxkX2RzaV9jb25uZWN0b3IgKmRzaV9jb25uZWN0 b3I7Ci0Jc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKLQlzdHJ1Y3QgbWRmbGRfZHNp X2VuY29kZXIgKmVuY29kZXI7Ci0Jc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBk ZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBwYW5lbF9pbmZvIGRzaV9wYW5lbF9pbmZvOwotCXUz MiB3aWR0aF9tbSwgaGVpZ2h0X21tOwotCi0JZGV2X2RiZyhkZXYtPmRldiwgImluaXQgRFNJIG91 dHB1dCBvbiBwaXBlICVkXG4iLCBwaXBlKTsKLQotCWlmIChwaXBlICE9IDAgJiYgcGlwZSAhPSAy KSB7Ci0JCURSTV9FUlJPUigiSW52YWxpZCBwYXJhbWV0ZXJcbiIpOwotCQlyZXR1cm47Ci0JfQot Ci0JLypjcmVhdGUgYSBuZXcgY29ubmVjdG9yKi8KLQlkc2lfY29ubmVjdG9yID0ga3phbGxvYyhz aXplb2Yoc3RydWN0IG1kZmxkX2RzaV9jb25uZWN0b3IpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRz aV9jb25uZWN0b3IpIHsKLQkJRFJNX0VSUk9SKCJObyBtZW1vcnkiKTsKLQkJcmV0dXJuOwotCX0K LQotCWRzaV9jb25uZWN0b3ItPnBpcGUgPSAgcGlwZTsKLQotCWRzaV9jb25maWcgPSBremFsbG9j KHNpemVvZihzdHJ1Y3QgbWRmbGRfZHNpX2NvbmZpZyksCi0JCQlHRlBfS0VSTkVMKTsKLQlpZiAo IWRzaV9jb25maWcpIHsKLQkJRFJNX0VSUk9SKCJjYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBE U0kgY29uZmlnXG4iKTsKLQkJZ290byBkc2lfaW5pdF9lcnIwOwotCX0KLQltZGZsZF9kc2lfZ2V0 X2RlZmF1bHRfY29uZmlnKGRldiwgZHNpX2NvbmZpZywgcGlwZSk7Ci0KLQlkc2lfY29ubmVjdG9y LT5wcml2YXRlID0gZHNpX2NvbmZpZzsKLQotCWRzaV9jb25maWctPmNoYW5nZWQgPSAxOwotCWRz aV9jb25maWctPmRldiA9IGRldjsKLQotCWRzaV9jb25maWctPmZpeGVkX21vZGUgPSBwX3ZpZF9m dW5jcy0+Z2V0X2NvbmZpZ19tb2RlKGRldik7Ci0JaWYgKHBfdmlkX2Z1bmNzLT5nZXRfcGFuZWxf aW5mbyhkZXYsIHBpcGUsICZkc2lfcGFuZWxfaW5mbykpCi0JCQlnb3RvIGRzaV9pbml0X2VycjA7 Ci0KLQl3aWR0aF9tbSA9IGRzaV9wYW5lbF9pbmZvLndpZHRoX21tOwotCWhlaWdodF9tbSA9IGRz aV9wYW5lbF9pbmZvLmhlaWdodF9tbTsKLQotCWRzaV9jb25maWctPm1vZGUgPSBkc2lfY29uZmln LT5maXhlZF9tb2RlOwotCWRzaV9jb25maWctPmNvbm5lY3RvciA9IGRzaV9jb25uZWN0b3I7Ci0K LQlpZiAoIWRzaV9jb25maWctPmZpeGVkX21vZGUpIHsKLQkJRFJNX0VSUk9SKCJObyBwYW5lbCBm aXhlZCBtb2RlIHdhcyBmb3VuZFxuIik7Ci0JCWdvdG8gZHNpX2luaXRfZXJyMDsKLQl9Ci0KLQlp ZiAocGlwZSAmJiBkZXZfcHJpdi0+ZHNpX2NvbmZpZ3NbMF0pIHsKLQkJZHNpX2NvbmZpZy0+ZHZy X2ljX2luaXRlZCA9IDA7Ci0JCWRldl9wcml2LT5kc2lfY29uZmlnc1sxXSA9IGRzaV9jb25maWc7 Ci0JfSBlbHNlIGlmIChwaXBlID09IDApIHsKLQkJZHNpX2NvbmZpZy0+ZHZyX2ljX2luaXRlZCA9 IDE7Ci0JCWRldl9wcml2LT5kc2lfY29uZmlnc1swXSA9IGRzaV9jb25maWc7Ci0JfSBlbHNlIHsK LQkJRFJNX0VSUk9SKCJUcnlpbmcgdG8gaW5pdCBNSVBJMSBiZWZvcmUgTUlQSTBcbiIpOwotCQln b3RvIGRzaV9pbml0X2VycjA7Ci0JfQotCi0KLQljb25uZWN0b3IgPSAmZHNpX2Nvbm5lY3Rvci0+ YmFzZS5iYXNlOwotCWRzaV9jb25uZWN0b3ItPmJhc2Uuc2F2ZSA9IG1kZmxkX2RzaV9jb25uZWN0 b3Jfc2F2ZTsKLQlkc2lfY29ubmVjdG9yLT5iYXNlLnJlc3RvcmUgPSBtZGZsZF9kc2lfY29ubmVj dG9yX3Jlc3RvcmU7Ci0KLQlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCBjb25uZWN0b3IsICZtZGZs ZF9kc2lfY29ubmVjdG9yX2Z1bmNzLAotCQkJCQkJRFJNX01PREVfQ09OTkVDVE9SX0xWRFMpOwot CWRybV9jb25uZWN0b3JfaGVscGVyX2FkZChjb25uZWN0b3IsICZtZGZsZF9kc2lfY29ubmVjdG9y X2hlbHBlcl9mdW5jcyk7Ci0KLQljb25uZWN0b3ItPmRpc3BsYXlfaW5mby5zdWJwaXhlbF9vcmRl ciA9IFN1YlBpeGVsSG9yaXpvbnRhbFJHQjsKLQljb25uZWN0b3ItPmRpc3BsYXlfaW5mby53aWR0 aF9tbSA9IHdpZHRoX21tOwotCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmhlaWdodF9tbSA9IGhl aWdodF9tbTsKLQljb25uZWN0b3ItPmludGVybGFjZV9hbGxvd2VkID0gZmFsc2U7Ci0JY29ubmVj dG9yLT5kb3VibGVzY2FuX2FsbG93ZWQgPSBmYWxzZTsKLQotCS8qYXR0YWNoIHByb3BlcnRpZXMq LwotCWRybV9vYmplY3RfYXR0YWNoX3Byb3BlcnR5KCZjb25uZWN0b3ItPmJhc2UsCi0JCQkJZGV2 LT5tb2RlX2NvbmZpZy5zY2FsaW5nX21vZGVfcHJvcGVydHksCi0JCQkJRFJNX01PREVfU0NBTEVf RlVMTFNDUkVFTik7Ci0JZHJtX29iamVjdF9hdHRhY2hfcHJvcGVydHkoJmNvbm5lY3Rvci0+YmFz ZSwKLQkJCQlkZXZfcHJpdi0+YmFja2xpZ2h0X3Byb3BlcnR5LAotCQkJCU1ERkxEX0RTSV9CUklH SFRORVNTX01BWF9MRVZFTCk7Ci0KLQkvKmluaXQgRFNJIHBhY2thZ2Ugc2VuZGVyIG9uIHRoaXMg b3V0cHV0Ki8KLQlpZiAobWRmbGRfZHNpX3BrZ19zZW5kZXJfaW5pdChkc2lfY29ubmVjdG9yLCBw aXBlKSkgewotCQlEUk1fRVJST1IoIlBhY2thZ2UgU2VuZGVyIGluaXRpYWxpemF0aW9uIGZhaWxl ZCBvbiBwaXBlICVkXG4iLAotCQkJCQkJCQkJcGlwZSk7Ci0JCWdvdG8gZHNpX2luaXRfZXJyMDsK LQl9Ci0KLQllbmNvZGVyID0gbWRmbGRfZHNpX2RwaV9pbml0KGRldiwgZHNpX2Nvbm5lY3Rvciwg cF92aWRfZnVuY3MpOwotCWlmICghZW5jb2RlcikgewotCQlEUk1fRVJST1IoIkNyZWF0ZSBEUEkg ZW5jb2RlciBmYWlsZWRcbiIpOwotCQlnb3RvIGRzaV9pbml0X2VycjE7Ci0JfQotCWVuY29kZXIt PnByaXZhdGUgPSBkc2lfY29uZmlnOwotCWRzaV9jb25maWctPmVuY29kZXIgPSBlbmNvZGVyOwot CWVuY29kZXItPmJhc2UudHlwZSA9IChwaXBlID09IDApID8gSU5URUxfT1VUUFVUX01JUEkgOgot CQlJTlRFTF9PVVRQVVRfTUlQSTI7Ci0JZHJtX2Nvbm5lY3Rvcl9yZWdpc3Rlcihjb25uZWN0b3Ip OwotCXJldHVybjsKLQotCS8qVE9ETzogYWRkIGNvZGUgdG8gZGVzdHJveSBvdXRwdXRzIG9uIGVy cm9yKi8KLWRzaV9pbml0X2VycjE6Ci0JLypkZXN0cm95IHNlbmRlciovCi0JbWRmbGRfZHNpX3Br Z19zZW5kZXJfZGVzdHJveShkc2lfY29ubmVjdG9yLT5wa2dfc2VuZGVyKTsKLQotCWRybV9jb25u ZWN0b3JfY2xlYW51cChjb25uZWN0b3IpOwotCi0Ja2ZyZWUoZHNpX2NvbmZpZy0+Zml4ZWRfbW9k ZSk7Ci0Ja2ZyZWUoZHNpX2NvbmZpZyk7Ci1kc2lfaW5pdF9lcnIwOgotCWtmcmVlKGRzaV9jb25u ZWN0b3IpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9tZGZsZF9kc2lf b3V0cHV0LmggYi9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL21kZmxkX2RzaV9vdXRwdXQuaApkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWMwZGIzYzI5MDNmLi4wMDAwMDAwMDAwMDAKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9tZGZsZF9kc2lfb3V0cHV0LmgKKysrIC9kZXYvbnVs bApAQCAtMSwzNzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCDCqSAyMDEwIEludGVsIENvcnBv cmF0aW9uCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy Z2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBh bmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0 byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0 aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJn ZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGll cyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQotICog U29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBw ZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Ci0gKiBwYXJhZ3JhcGgpIHNoYWxs IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhl Ci0gKiBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwg V0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5D TFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN RU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xE RVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwg QVJJU0lORwotICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdB UkUgT1IgVEhFIFVTRSBPUiBPVEhFUgotICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgotICoK LSAqIEF1dGhvcnM6Ci0gKiBqaW0gbGl1IDxqaW0ubGl1QGludGVsLmNvbT4KLSAqIEphY2tpZSBM aTx5YW9kb25nLmxpQGludGVsLmNvbT4KLSAqLwotCi0jaWZuZGVmIF9fTURGTERfRFNJX09VVFBV VF9IX18KLSNkZWZpbmUgX19NREZMRF9EU0lfT1VUUFVUX0hfXwotCi0jaW5jbHVkZSA8bGludXgv YmFja2xpZ2h0Lmg+Ci0KLSNpbmNsdWRlIDxhc20vaW50ZWwtbWlkLmg+Ci0KLSNpbmNsdWRlIDxk cm0vZHJtLmg+Ci0jaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+Ci0jaW5jbHVkZSA8ZHJtL2RybV9l ZGlkLmg+Ci0KLSNpbmNsdWRlICJtZGZsZF9vdXRwdXQuaCIKLSNpbmNsdWRlICJwc2JfZHJ2Lmgi Ci0jaW5jbHVkZSAicHNiX2ludGVsX2Rydi5oIgotI2luY2x1ZGUgInBzYl9pbnRlbF9yZWcuaCIK LQotI2RlZmluZSBGTERfTUFTSyhzdGFydCwgZW5kKQkoKCgxIDw8ICgoc3RhcnQpIC0gKGVuZCkg KyAxKSkgLSAxKSA8PCAoZW5kKSkKLSNkZWZpbmUgRkxEX1ZBTCh2YWwsIHN0YXJ0LCBlbmQpICgo KHZhbCkgPDwgKGVuZCkpICYgRkxEX01BU0soc3RhcnQsIGVuZCkpCi0jZGVmaW5lIEZMRF9HRVQo dmFsLCBzdGFydCwgZW5kKSAoKCh2YWwpICYgRkxEX01BU0soc3RhcnQsIGVuZCkpID4+IChlbmQp KQotI2RlZmluZSBGTERfTU9EKG9yaWcsIHZhbCwgc3RhcnQsIGVuZCkgXAotCSgoKG9yaWcpICYg fkZMRF9NQVNLKHN0YXJ0LCBlbmQpKSB8IEZMRF9WQUwodmFsLCBzdGFydCwgZW5kKSkKLQotI2Rl ZmluZSBSRUdfRkxEX01PRChyZWcsIHZhbCwgc3RhcnQsIGVuZCkgXAotCVJFR19XUklURShyZWcs IEZMRF9NT0QoUkVHX1JFQUQocmVnKSwgdmFsLCBzdGFydCwgZW5kKSkKLQotc3RhdGljIGlubGlu ZSBpbnQgUkVHSVNURVJfRkxEX1dBSVQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTMyIHJlZywK LQkJdTMyIHZhbCwgaW50IHN0YXJ0LCBpbnQgZW5kKQotewotCWludCB0ID0gMTAwMDAwOwotCi0J d2hpbGUgKEZMRF9HRVQoUkVHX1JFQUQocmVnKSwgc3RhcnQsIGVuZCkgIT0gdmFsKSB7Ci0JCWlm ICgtLXQgPT0gMCkKLQkJCXJldHVybiAxOwotCX0KLQotCXJldHVybiAwOwotfQotCi0jZGVmaW5l IFJFR19GTERfV0FJVChyZWcsIHZhbCwgc3RhcnQsIGVuZCkgXAotCVJFR0lTVEVSX0ZMRF9XQUlU KGRldiwgcmVnLCB2YWwsIHN0YXJ0LCBlbmQpCi0KLSNkZWZpbmUgUkVHX0JJVF9XQUlUKHJlZywg dmFsLCBiaXRudW0pIFwKLQlSRUdJU1RFUl9GTERfV0FJVChkZXYsIHJlZywgdmFsLCBiaXRudW0s IGJpdG51bSkKLQotI2RlZmluZSBNREZMRF9EU0lfQlJJR0hUTkVTU19NQVhfTEVWRUwgMTAwCi0K LSNpZmRlZiBERUJVRwotI2RlZmluZSBDSEVDS19QSVBFKHBpcGUpICh7CQkJXAotCWNvbnN0IHR5 cGVvZihwaXBlKSBfX3BpcGUgPSAocGlwZSk7CVwKLQlCVUdfT04oX19waXBlICE9IDAgJiYgX19w aXBlICE9IDIpOwlcCi0JX19waXBlOwl9KQotI2Vsc2UKLSNkZWZpbmUgQ0hFQ0tfUElQRShwaXBl KSAocGlwZSkKLSNlbmRpZgotCi0vKgotICogQWN0dWFsIE1JUElBLT5NSVBJQyByZWcgb2Zmc2V0 IGlzIDB4ODAwLCB2YWx1ZSAweDQwMCBpcyB2YWxpZCBmb3IgMCBhbmQgMgotICovCi0jZGVmaW5l IFJFR19PRkZTRVQocGlwZSkgKENIRUNLX1BJUEUocGlwZSkgKiAweDQwMCkKLQotLyogbWRmbGQg RFNJIGNvbnRyb2xsZXIgcmVnaXN0ZXJzICovCi0jZGVmaW5lIE1JUElfREVWSUNFX1JFQURZX1JF RyhwaXBlKQkJKDB4YjAwMCArIFJFR19PRkZTRVQocGlwZSkpCi0jZGVmaW5lIE1JUElfSU5UUl9T VEFUX1JFRyhwaXBlKQkJKDB4YjAwNCArIFJFR19PRkZTRVQocGlwZSkpCi0jZGVmaW5lIE1JUElf SU5UUl9FTl9SRUcocGlwZSkJCQkoMHhiMDA4ICsgUkVHX09GRlNFVChwaXBlKSkKLSNkZWZpbmUg TUlQSV9EU0lfRlVOQ19QUkdfUkVHKHBpcGUpCQkoMHhiMDBjICsgUkVHX09GRlNFVChwaXBlKSkK LSNkZWZpbmUgTUlQSV9IU19UWF9USU1FT1VUX1JFRyhwaXBlKQkJKDB4YjAxMCArIFJFR19PRkZT RVQocGlwZSkpCi0jZGVmaW5lIE1JUElfTFBfUlhfVElNRU9VVF9SRUcocGlwZSkJCSgweGIwMTQg KyBSRUdfT0ZGU0VUKHBpcGUpKQotI2RlZmluZSBNSVBJX1RVUk5fQVJPVU5EX1RJTUVPVVRfUkVH KHBpcGUpCSgweGIwMTggKyBSRUdfT0ZGU0VUKHBpcGUpKQotI2RlZmluZSBNSVBJX0RFVklDRV9S RVNFVF9USU1FUl9SRUcocGlwZSkJKDB4YjAxYyArIFJFR19PRkZTRVQocGlwZSkpCi0jZGVmaW5l IE1JUElfRFBJX1JFU09MVVRJT05fUkVHKHBpcGUpCQkoMHhiMDIwICsgUkVHX09GRlNFVChwaXBl KSkKLSNkZWZpbmUgTUlQSV9EQklfRklGT19USFJPVFRMRV9SRUcocGlwZSkJKDB4YjAyNCArIFJF R19PRkZTRVQocGlwZSkpCi0jZGVmaW5lIE1JUElfSFNZTkNfQ09VTlRfUkVHKHBpcGUpCQkoMHhi MDI4ICsgUkVHX09GRlNFVChwaXBlKSkKLSNkZWZpbmUgTUlQSV9IQlBfQ09VTlRfUkVHKHBpcGUp CQkoMHhiMDJjICsgUkVHX09GRlNFVChwaXBlKSkKLSNkZWZpbmUgTUlQSV9IRlBfQ09VTlRfUkVH KHBpcGUpCQkoMHhiMDMwICsgUkVHX09GRlNFVChwaXBlKSkKLSNkZWZpbmUgTUlQSV9IQUNUSVZF X0NPVU5UX1JFRyhwaXBlKQkJKDB4YjAzNCArIFJFR19PRkZTRVQocGlwZSkpCi0jZGVmaW5lIE1J UElfVlNZTkNfQ09VTlRfUkVHKHBpcGUpCQkoMHhiMDM4ICsgUkVHX09GRlNFVChwaXBlKSkKLSNk ZWZpbmUgTUlQSV9WQlBfQ09VTlRfUkVHKHBpcGUpCQkoMHhiMDNjICsgUkVHX09GRlNFVChwaXBl KSkKLSNkZWZpbmUgTUlQSV9WRlBfQ09VTlRfUkVHKHBpcGUpCQkoMHhiMDQwICsgUkVHX09GRlNF VChwaXBlKSkKLSNkZWZpbmUgTUlQSV9ISUdIX0xPV19TV0lUQ0hfQ09VTlRfUkVHKHBpcGUpCSgw eGIwNDQgKyBSRUdfT0ZGU0VUKHBpcGUpKQotI2RlZmluZSBNSVBJX0RQSV9DT05UUk9MX1JFRyhw aXBlKQkJKDB4YjA0OCArIFJFR19PRkZTRVQocGlwZSkpCi0jZGVmaW5lIE1JUElfRFBJX0RBVEFf UkVHKHBpcGUpCQkJKDB4YjA0YyArIFJFR19PRkZTRVQocGlwZSkpCi0jZGVmaW5lIE1JUElfSU5J VF9DT1VOVF9SRUcocGlwZSkJCSgweGIwNTAgKyBSRUdfT0ZGU0VUKHBpcGUpKQotI2RlZmluZSBN SVBJX01BWF9SRVRVUk5fUEFDS19TSVpFX1JFRyhwaXBlKQkoMHhiMDU0ICsgUkVHX09GRlNFVChw aXBlKSkKLSNkZWZpbmUgTUlQSV9WSURFT19NT0RFX0ZPUk1BVF9SRUcocGlwZSkJKDB4YjA1OCAr IFJFR19PRkZTRVQocGlwZSkpCi0jZGVmaW5lIE1JUElfRU9UX0RJU0FCTEVfUkVHKHBpcGUpCQko MHhiMDVjICsgUkVHX09GRlNFVChwaXBlKSkKLSNkZWZpbmUgTUlQSV9MUF9CWVRFQ0xLX1JFRyhw aXBlKQkJKDB4YjA2MCArIFJFR19PRkZTRVQocGlwZSkpCi0jZGVmaW5lIE1JUElfTFBfR0VOX0RB VEFfUkVHKHBpcGUpCQkoMHhiMDY0ICsgUkVHX09GRlNFVChwaXBlKSkKLSNkZWZpbmUgTUlQSV9I U19HRU5fREFUQV9SRUcocGlwZSkJCSgweGIwNjggKyBSRUdfT0ZGU0VUKHBpcGUpKQotI2RlZmlu ZSBNSVBJX0xQX0dFTl9DVFJMX1JFRyhwaXBlKQkJKDB4YjA2YyArIFJFR19PRkZTRVQocGlwZSkp Ci0jZGVmaW5lIE1JUElfSFNfR0VOX0NUUkxfUkVHKHBpcGUpCQkoMHhiMDcwICsgUkVHX09GRlNF VChwaXBlKSkKLSNkZWZpbmUgTUlQSV9HRU5fRklGT19TVEFUX1JFRyhwaXBlKQkJKDB4YjA3NCAr IFJFR19PRkZTRVQocGlwZSkpCi0jZGVmaW5lIE1JUElfSFNfTFNfREJJX0VOQUJMRV9SRUcocGlw ZSkJCSgweGIwNzggKyBSRUdfT0ZGU0VUKHBpcGUpKQotI2RlZmluZSBNSVBJX0RQSFlfUEFSQU1f UkVHKHBpcGUpCQkoMHhiMDgwICsgUkVHX09GRlNFVChwaXBlKSkKLSNkZWZpbmUgTUlQSV9EQklf QldfQ1RSTF9SRUcocGlwZSkJCSgweGIwODQgKyBSRUdfT0ZGU0VUKHBpcGUpKQotI2RlZmluZSBN SVBJX0NMS19MQU5FX1NXSVRDSF9USU1FX0NOVF9SRUcocGlwZSkJKDB4YjA4OCArIFJFR19PRkZT RVQocGlwZSkpCi0KLSNkZWZpbmUgTUlQSV9DVFJMX1JFRyhwaXBlKQkJCSgweGIxMDQgKyBSRUdf T0ZGU0VUKHBpcGUpKQotI2RlZmluZSBNSVBJX0RBVEFfQUREX1JFRyhwaXBlKQkJCSgweGIxMDgg KyBSRUdfT0ZGU0VUKHBpcGUpKQotI2RlZmluZSBNSVBJX0RBVEFfTEVOX1JFRyhwaXBlKQkJCSgw eGIxMGMgKyBSRUdfT0ZGU0VUKHBpcGUpKQotI2RlZmluZSBNSVBJX0NNRF9BRERfUkVHKHBpcGUp CQkJKDB4YjExMCArIFJFR19PRkZTRVQocGlwZSkpCi0jZGVmaW5lIE1JUElfQ01EX0xFTl9SRUco cGlwZSkJCQkoMHhiMTE0ICsgUkVHX09GRlNFVChwaXBlKSkKLQotLyogbm9uLXVuaWZvcm0gcmVn IG9mZnNldCAqLwotI2RlZmluZSBNSVBJX1BPUlRfQ09OVFJPTChwaXBlKQkJKENIRUNLX1BJUEUo cGlwZSkgPyBNSVBJX0MgOiBNSVBJKQotCi0jZGVmaW5lIERTSV9ERVZJQ0VfUkVBRFkJCQkJKDB4 MSkKLSNkZWZpbmUgRFNJX1BPV0VSX1NUQVRFX1VMUFNfRU5URVIJCQkoMHgyIDw8IDEpCi0jZGVm aW5lIERTSV9QT1dFUl9TVEFURV9VTFBTX0VYSVQJCQkoMHgxIDw8IDEpCi0jZGVmaW5lIERTSV9Q T1dFUl9TVEFURV9VTFBTX09GRlNFVAkJCSgweDEpCi0KLQotI2RlZmluZSBEU0lfT05FX0RBVEFf TEFORQkJCQkJKDB4MSkKLSNkZWZpbmUgRFNJX1RXT19EQVRBX0xBTkUJCQkJCSgweDIpCi0jZGVm aW5lIERTSV9USFJFRV9EQVRBX0xBTkUJCQkJCSgwWDMpCi0jZGVmaW5lIERTSV9GT1VSX0RBVEFf TEFORQkJCQkJKDB4NCkKLSNkZWZpbmUgRFNJX0RQSV9WSVJUX0NIQU5ORUxfT0ZGU0VUCQkJKDB4 MykKLSNkZWZpbmUgRFNJX0RCSV9WSVJUX0NIQU5ORUxfT0ZGU0VUCQkJKDB4NSkKLSNkZWZpbmUg RFNJX0RQSV9DT0xPUl9GT1JNQVRfUkdCNTY1CQkJKDB4MDEgPDwgNykKLSNkZWZpbmUgRFNJX0RQ SV9DT0xPUl9GT1JNQVRfUkdCNjY2CQkJKDB4MDIgPDwgNykKLSNkZWZpbmUgRFNJX0RQSV9DT0xP Ul9GT1JNQVRfUkdCNjY2X1VOUEFDSwkJKDB4MDMgPDwgNykKLSNkZWZpbmUgRFNJX0RQSV9DT0xP Ul9GT1JNQVRfUkdCODg4CQkJKDB4MDQgPDwgNykKLSNkZWZpbmUgRFNJX0RCSV9DT0xPUl9GT1JN QVRfT1BUSU9OMgkJCSgweDA1IDw8IDEzKQotCi0jZGVmaW5lIERTSV9JTlRSX1NUQVRFX1JYU09U RVJST1IJCQlCSVQoMCkKLQotI2RlZmluZSBEU0lfSU5UUl9TVEFURV9TUExfUEtHX1NFTlQJCQlC SVQoMzApCi0jZGVmaW5lIERTSV9JTlRSX1NUQVRFX1RFCQkJCUJJVCgzMSkKLQotI2RlZmluZSBE U0lfSFNfVFhfVElNRU9VVF9NQVNLCQkJCSgweGZmZmZmZikKLQotI2RlZmluZSBEU0lfTFBfUlhf VElNRU9VVF9NQVNLCQkJCSgweGZmZmZmZikKLQotI2RlZmluZSBEU0lfVFVSTl9BUk9VTkRfVElN RU9VVF9NQVNLCQkoMHgzZikKLQotI2RlZmluZSBEU0lfUkVTRVRfVElNRVJfTUFTSwkJCQkoMHhm ZmZmKQotCi0jZGVmaW5lIERTSV9EQklfRklGT19XTV9IQUxGCQkJCSgweDApCi0jZGVmaW5lIERT SV9EQklfRklGT19XTV9RVUFSVEVSCQkJCSgweDEpCi0jZGVmaW5lIERTSV9EQklfRklGT19XTV9M T1cJCQkJCSgweDIpCi0KLSNkZWZpbmUgRFNJX0RQSV9USU1JTkdfTUFTSwkJCQkJKDB4ZmZmZikK LQotI2RlZmluZSBEU0lfSU5JVF9USU1FUl9NQVNLCQkJCQkoMHhmZmZmKQotCi0jZGVmaW5lIERT SV9EQklfUkVUVVJOX1BBQ0tfU0laRV9NQVNLCQkoMHgzZmYpCi0KLSNkZWZpbmUgRFNJX0xQX0JZ VEVDTEtfTUFTSwkJCQkJKDB4MGZmZmYpCi0KLSNkZWZpbmUgRFNJX0hTX0NUUkxfR0VOX1NIT1JU X1cwCQkJKDB4MDMpCi0jZGVmaW5lIERTSV9IU19DVFJMX0dFTl9TSE9SVF9XMQkJCSgweDEzKQot I2RlZmluZSBEU0lfSFNfQ1RSTF9HRU5fU0hPUlRfVzIJCQkoMHgyMykKLSNkZWZpbmUgRFNJX0hT X0NUUkxfR0VOX1IwCQkJCQkoMHgwNCkKLSNkZWZpbmUgRFNJX0hTX0NUUkxfR0VOX1IxCQkJCQko MHgxNCkKLSNkZWZpbmUgRFNJX0hTX0NUUkxfR0VOX1IyCQkJCQkoMHgyNCkKLSNkZWZpbmUgRFNJ X0hTX0NUUkxfR0VOX0xPTkdfVwkJCQkoMHgyOSkKLSNkZWZpbmUgRFNJX0hTX0NUUkxfTUNTX1NI T1JUX1cwCQkJKDB4MDUpCi0jZGVmaW5lIERTSV9IU19DVFJMX01DU19TSE9SVF9XMQkJCSgweDE1 KQotI2RlZmluZSBEU0lfSFNfQ1RSTF9NQ1NfUjAJCQkJCSgweDA2KQotI2RlZmluZSBEU0lfSFNf Q1RSTF9NQ1NfTE9OR19XCQkJCSgweDM5KQotI2RlZmluZSBEU0lfSFNfQ1RSTF9WQ19PRkZTRVQJ CQkJKDB4MDYpCi0jZGVmaW5lIERTSV9IU19DVFJMX1dDX09GRlNFVAkJCQkoMHgwOCkKLQotI2Rl ZmluZQlEU0lfRklGT19HRU5fSFNfREFUQV9GVUxMCQkJQklUKDApCi0jZGVmaW5lIERTSV9GSUZP X0dFTl9IU19EQVRBX0hBTEZfRU1QVFkJCUJJVCgxKQotI2RlZmluZSBEU0lfRklGT19HRU5fSFNf REFUQV9FTVBUWQkJCUJJVCgyKQotI2RlZmluZSBEU0lfRklGT19HRU5fTFBfREFUQV9GVUxMCQkJ QklUKDgpCi0jZGVmaW5lIERTSV9GSUZPX0dFTl9MUF9EQVRBX0hBTEZfRU1QVFkJCUJJVCg5KQot I2RlZmluZSBEU0lfRklGT19HRU5fTFBfREFUQV9FTVBUWQkJCUJJVCgxMCkKLSNkZWZpbmUgRFNJ X0ZJRk9fR0VOX0hTX0NUUkxfRlVMTAkJCUJJVCgxNikKLSNkZWZpbmUgRFNJX0ZJRk9fR0VOX0hT X0NUUkxfSEFMRl9FTVBUWQkJQklUKDE3KQotI2RlZmluZSBEU0lfRklGT19HRU5fSFNfQ1RSTF9F TVBUWQkJCUJJVCgxOCkKLSNkZWZpbmUgRFNJX0ZJRk9fR0VOX0xQX0NUUkxfRlVMTAkJCUJJVCgy NCkKLSNkZWZpbmUgRFNJX0ZJRk9fR0VOX0xQX0NUUkxfSEFMRl9FTVBUWQkJQklUKDI1KQotI2Rl ZmluZSBEU0lfRklGT19HRU5fTFBfQ1RSTF9FTVBUWQkJCUJJVCgyNikKLSNkZWZpbmUgRFNJX0ZJ Rk9fREJJX0VNUFRZCQkJCQlCSVQoMjcpCi0jZGVmaW5lIERTSV9GSUZPX0RQSV9FTVBUWQkJCQkJ QklUKDI4KQotCi0jZGVmaW5lIERTSV9EQklfSFNfTFBfU1dJVENIX01BU0sJCQkoMHgxKQotCi0j ZGVmaW5lIERTSV9IU19MUF9TV0lUQ0hfQ09VTlRFUl9PRkZTRVQJCSgweDApCi0jZGVmaW5lIERT SV9MUF9IU19TV0lUQ0hfQ09VTlRFUl9PRkZTRVQJCSgweDE2KQotCi0jZGVmaW5lIERTSV9EUElf Q1RSTF9IU19TSFVURE9XTgkJCSgweDAwMDAwMDAxKQotI2RlZmluZSBEU0lfRFBJX0NUUkxfSFNf VFVSTl9PTgkJCQkoMHgwMDAwMDAwMikKLQotLypkc2kgcG93ZXIgbW9kZXMqLwotI2RlZmluZSBE U0lfUE9XRVJfTU9ERV9ESVNQTEFZX09OCUJJVCgyKQotI2RlZmluZSBEU0lfUE9XRVJfTU9ERV9O T1JNQUxfT04JQklUKDMpCi0jZGVmaW5lIERTSV9QT1dFUl9NT0RFX1NMRUVQX09VVAlCSVQoNCkK LSNkZWZpbmUgRFNJX1BPV0VSX01PREVfUEFSVElBTF9PTglCSVQoNSkKLSNkZWZpbmUgRFNJX1BP V0VSX01PREVfSURMRV9PTgkJQklUKDYpCi0KLWVudW0gewotCU1ERkxEX0RTSV9WSURFT19OT05f QlVSU1RfTU9ERV9TWU5DX1BVTFNFID0gMSwKLQlNREZMRF9EU0lfVklERU9fTk9OX0JVUlNUX01P REVfU1lOQ19FVkVOVFMgPSAyLAotCU1ERkxEX0RTSV9WSURFT19CVVJTVF9NT0RFID0gMywKLX07 Ci0KLSNkZWZpbmUgRFNJX0RQSV9DT01QTEVURV9MQVNUX0xJTkUJCQlCSVQoMikKLSNkZWZpbmUg RFNJX0RQSV9ESVNBQkxFX0JUQQkJCQkJQklUKDMpCi0KLXN0cnVjdCBtZGZsZF9kc2lfY29ubmVj dG9yIHsKLQlzdHJ1Y3QgZ21hX2Nvbm5lY3RvciBiYXNlOwotCi0JaW50IHBpcGU7Ci0Jdm9pZCAq cHJpdmF0ZTsKLQl2b2lkICpwa2dfc2VuZGVyOwotCi0JLyogQ29ubmVjdGlvbiBzdGF0dXMgKi8K LQllbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHN0YXR1czsKLX07Ci0KLXN0cnVjdCBtZGZsZF9k c2lfZW5jb2RlciB7Ci0Jc3RydWN0IGdtYV9lbmNvZGVyIGJhc2U7Ci0Jdm9pZCAqcHJpdmF0ZTsK LX07Ci0KLS8qCi0gKiBEU0kgY29uZmlnLCBjb25zaXN0cyBvZiBvbmUgRFNJIGNvbm5lY3Rvciwg dHdvIERTSSBlbmNvZGVycy4KLSAqIERSTSB3aWxsIHBpY2sgdXAgb24gRFNJIGVuY29kZXIgYmFz aW5nIG9uIGRpZmZlcmVudHMgY29uZmlncy4KLSAqLwotc3RydWN0IG1kZmxkX2RzaV9jb25maWcg ewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7Ci0Jc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmZp eGVkX21vZGU7Ci0Jc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7Ci0KLQlzdHJ1Y3QgbWRm bGRfZHNpX2Nvbm5lY3RvciAqY29ubmVjdG9yOwotCXN0cnVjdCBtZGZsZF9kc2lfZW5jb2RlciAq ZW5jb2RlcjsKLQotCWludCBjaGFuZ2VkOwotCi0JaW50IGJwcDsKLQlpbnQgbGFuZV9jb3VudDsK LQkvKlZpcnR1YWwgY2hhbm5lbCBudW1iZXIgZm9yIHRoaXMgZW5jb2RlciovCi0JaW50IGNoYW5u ZWxfbnVtOwotCS8qdmlkZW8gbW9kZSBjb25maWd1cmUqLwotCWludCB2aWRlb19tb2RlOwotCi0J aW50IGR2cl9pY19pbml0ZWQ7Ci19OwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZGZsZF9kc2lf Y29ubmVjdG9yICptZGZsZF9kc2lfY29ubmVjdG9yKAotCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubmVjdG9yKQotewotCXN0cnVjdCBnbWFfY29ubmVjdG9yICpnbWFfY29ubmVjdG9yOwotCi0J Z21hX2Nvbm5lY3RvciA9IHRvX2dtYV9jb25uZWN0b3IoY29ubmVjdG9yKTsKLQotCXJldHVybiBj b250YWluZXJfb2YoZ21hX2Nvbm5lY3Rvciwgc3RydWN0IG1kZmxkX2RzaV9jb25uZWN0b3IsIGJh c2UpOwotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZGZsZF9kc2lfZW5jb2RlciAqbWRmbGRf ZHNpX2VuY29kZXIoCi0JCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKLXsKLQlzdHJ1Y3Qg Z21hX2VuY29kZXIgKmdtYV9lbmNvZGVyOwotCi0JZ21hX2VuY29kZXIgPSB0b19nbWFfZW5jb2Rl cihlbmNvZGVyKTsKLQotCXJldHVybiBjb250YWluZXJfb2YoZ21hX2VuY29kZXIsIHN0cnVjdCBt ZGZsZF9kc2lfZW5jb2RlciwgYmFzZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1kZmxk X2RzaV9jb25maWcgKgotCW1kZmxkX2RzaV9nZXRfY29uZmlnKHN0cnVjdCBtZGZsZF9kc2lfY29u bmVjdG9yICpjb25uZWN0b3IpCi17Ci0JaWYgKCFjb25uZWN0b3IpCi0JCXJldHVybiBOVUxMOwot CXJldHVybiAoc3RydWN0IG1kZmxkX2RzaV9jb25maWcgKiljb25uZWN0b3ItPnByaXZhdGU7Ci19 Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCAqbWRmbGRfZHNpX2dldF9wa2dfc2VuZGVyKHN0cnVjdCBt ZGZsZF9kc2lfY29uZmlnICpjb25maWcpCi17Ci0Jc3RydWN0IG1kZmxkX2RzaV9jb25uZWN0b3Ig KmRzaV9jb25uZWN0b3I7Ci0KLQlpZiAoIWNvbmZpZykKLQkJcmV0dXJuIE5VTEw7Ci0KLQlkc2lf Y29ubmVjdG9yID0gY29uZmlnLT5jb25uZWN0b3I7Ci0KLQlpZiAoIWRzaV9jb25uZWN0b3IpCi0J CXJldHVybiBOVUxMOwotCi0JcmV0dXJuIGRzaV9jb25uZWN0b3ItPnBrZ19zZW5kZXI7Ci19Ci0K LXN0YXRpYyBpbmxpbmUgc3RydWN0IG1kZmxkX2RzaV9jb25maWcgKgotCW1kZmxkX2RzaV9lbmNv ZGVyX2dldF9jb25maWcoc3RydWN0IG1kZmxkX2RzaV9lbmNvZGVyICplbmNvZGVyKQotewotCWlm ICghZW5jb2RlcikKLQkJcmV0dXJuIE5VTEw7Ci0JcmV0dXJuIChzdHJ1Y3QgbWRmbGRfZHNpX2Nv bmZpZyAqKWVuY29kZXItPnByaXZhdGU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1kZmxk X2RzaV9jb25uZWN0b3IgKgotCW1kZmxkX2RzaV9lbmNvZGVyX2dldF9jb25uZWN0b3Ioc3RydWN0 IG1kZmxkX2RzaV9lbmNvZGVyICplbmNvZGVyKQotewotCXN0cnVjdCBtZGZsZF9kc2lfY29uZmln ICpjb25maWc7Ci0KLQlpZiAoIWVuY29kZXIpCi0JCXJldHVybiBOVUxMOwotCi0JY29uZmlnID0g bWRmbGRfZHNpX2VuY29kZXJfZ2V0X2NvbmZpZyhlbmNvZGVyKTsKLQlpZiAoIWNvbmZpZykKLQkJ cmV0dXJuIE5VTEw7Ci0KLQlyZXR1cm4gY29uZmlnLT5jb25uZWN0b3I7Ci19Ci0KLXN0YXRpYyBp bmxpbmUgdm9pZCAqbWRmbGRfZHNpX2VuY29kZXJfZ2V0X3BrZ19zZW5kZXIoCi0JCQkJc3RydWN0 IG1kZmxkX2RzaV9lbmNvZGVyICplbmNvZGVyKQotewotCXN0cnVjdCBtZGZsZF9kc2lfY29uZmln ICpkc2lfY29uZmlnOwotCi0JZHNpX2NvbmZpZyA9IG1kZmxkX2RzaV9lbmNvZGVyX2dldF9jb25m aWcoZW5jb2Rlcik7Ci0JaWYgKCFkc2lfY29uZmlnKQotCQlyZXR1cm4gTlVMTDsKLQotCXJldHVy biBtZGZsZF9kc2lfZ2V0X3BrZ19zZW5kZXIoZHNpX2NvbmZpZyk7Ci19Ci0KLXN0YXRpYyBpbmxp bmUgaW50IG1kZmxkX2RzaV9lbmNvZGVyX2dldF9waXBlKHN0cnVjdCBtZGZsZF9kc2lfZW5jb2Rl ciAqZW5jb2RlcikKLXsKLQlzdHJ1Y3QgbWRmbGRfZHNpX2Nvbm5lY3RvciAqY29ubmVjdG9yOwot Ci0JaWYgKCFlbmNvZGVyKQotCQlyZXR1cm4gLTE7Ci0KLQljb25uZWN0b3IgPSBtZGZsZF9kc2lf ZW5jb2Rlcl9nZXRfY29ubmVjdG9yKGVuY29kZXIpOwotCWlmICghY29ubmVjdG9yKQotCQlyZXR1 cm4gLTE7Ci0JcmV0dXJuIGNvbm5lY3Rvci0+cGlwZTsKLX0KLQotLyogRXhwb3J0IGZ1bmN0aW9u cyAqLwotZXh0ZXJuIHZvaWQgbWRmbGRfZHNpX2dlbl9maWZvX3JlYWR5KHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsCi0JCQkJCXUzMiBnZW5fZmlmb19zdGF0X3JlZywgdTMyIGZpZm9fc3RhdCk7Ci1l eHRlcm4gdm9pZCBtZGZsZF9kc2lfYnJpZ2h0bmVzc19pbml0KHN0cnVjdCBtZGZsZF9kc2lfY29u ZmlnICpkc2lfY29uZmlnLAotCQkJCQlpbnQgcGlwZSk7Ci1leHRlcm4gdm9pZCBtZGZsZF9kc2lf YnJpZ2h0bmVzc19jb250cm9sKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwaXBlLAotCQkJ CQlpbnQgbGV2ZWwpOwotZXh0ZXJuIHZvaWQgbWRmbGRfZHNpX291dHB1dF9pbml0KHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsCi0JCQkJCWludCBwaXBlLAotCQkJCQljb25zdCBzdHJ1Y3QgcGFuZWxf ZnVuY3MgKnBfdmlkX2Z1bmNzKTsKLWV4dGVybiB2b2lkIG1kZmxkX2RzaV9jb250cm9sbGVyX2lu aXQoc3RydWN0IG1kZmxkX2RzaV9jb25maWcgKmRzaV9jb25maWcsCi0JCQkJCWludCBwaXBlKTsK LQotZXh0ZXJuIGludCBtZGZsZF9kc2lfZ2V0X3Bvd2VyX21vZGUoc3RydWN0IG1kZmxkX2RzaV9j b25maWcgKmRzaV9jb25maWcsCi0JCQkJCXUzMiAqbW9kZSwgYm9vbCBocyk7Ci1leHRlcm4gaW50 IG1kZmxkX2RzaV9wYW5lbF9yZXNldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgcGlwZSk7 Ci0KLSNlbmRpZiAvKl9fTURGTERfRFNJX09VVFBVVF9IX18qLwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2dtYTUwMC9tZGZsZF9kc2lfcGtnX3NlbmRlci5jIGIvZHJpdmVycy9ncHUvZHJt L2dtYTUwMC9tZGZsZF9kc2lfcGtnX3NlbmRlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCA2ZTBkZTgzZTlmN2QuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZ21h NTAwL21kZmxkX2RzaV9wa2dfc2VuZGVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NzkgKzAsMCBA QAotLyoKLSAqIENvcHlyaWdodCDCqSAyMDEwIEludGVsIENvcnBvcmF0aW9uCi0gKgotICogUGVy bWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24g b2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1 bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0 d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0g KiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJp YnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUs IGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlz aGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0g KiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAo aW5jbHVkaW5nIHRoZSBuZXh0Ci0gKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFs bCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCi0gKiBTb2Z0d2FyZS4KLSAq Ci0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBP RiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElN SVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQg U0hBTEwKLSAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1Ig QU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4g QUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwotICogRlJPTSwg T1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBP VEhFUgotICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgotICoKLSAqIEF1dGhvcnM6Ci0gKiBK YWNraWUgTGk8eWFvZG9uZy5saUBpbnRlbC5jb20+Ci0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2Rl bGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgotCi0jaW5jbHVkZSA8dmlkZW8vbWlw aV9kaXNwbGF5Lmg+Ci0KLSNpbmNsdWRlICJtZGZsZF9kc2lfZHBpLmgiCi0jaW5jbHVkZSAibWRm bGRfZHNpX291dHB1dC5oIgotI2luY2x1ZGUgIm1kZmxkX2RzaV9wa2dfc2VuZGVyLmgiCi0KLSNk ZWZpbmUgTURGTERfRFNJX1JFQURfTUFYX0NPVU5UCQk1MDAwCi0KLWVudW0gewotCU1ERkxEX0RT SV9QQU5FTF9NT0RFX1NMRUVQID0gMHgxLAotfTsKLQotZW51bSB7Ci0JTURGTERfRFNJX1BLR19T RU5ERVJfRlJFRSA9IDB4MCwKLQlNREZMRF9EU0lfUEtHX1NFTkRFUl9CVVNZID0gMHgxLAotfTsK LQotc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGRzaV9lcnJvcnNbXSA9IHsKLQkiUlggU09UIEVy cm9yIiwKLQkiUlggU09UIFN5bmMgRXJyb3IiLAotCSJSWCBFT1QgU3luYyBFcnJvciIsCi0JIlJY IEVzY2FwZSBNb2RlIEVudHJ5IEVycm9yIiwKLQkiUlggTFAgVFggU3luYyBFcnJvciIsCi0JIlJY IEhTIFJlY2VpdmUgVGltZW91dCBFcnJvciIsCi0JIlJYIEZhbHNlIENvbnRyb2wgRXJyb3IiLAot CSJSWCBFQ0MgU2luZ2xlIEJpdCBFcnJvciIsCi0JIlJYIEVDQyBNdWx0aWJpdCBFcnJvciIsCi0J IlJYIENoZWNrc3VtIEVycm9yIiwKLQkiUlggRFNJIERhdGEgVHlwZSBOb3QgUmVjb2duaXNlZCIs Ci0JIlJYIERTSSBWQyBJRCBJbnZhbGlkIiwKLQkiVFggRmFsc2UgQ29udHJvbCBFcnJvciIsCi0J IlRYIEVDQyBTaW5nbGUgQml0IEVycm9yIiwKLQkiVFggRUNDIE11bHRpYml0IEVycm9yIiwKLQki VFggQ2hlY2tzdW0gRXJyb3IiLAotCSJUWCBEU0kgRGF0YSBUeXBlIE5vdCBSZWNvZ25pc2VkIiwK LQkiVFggRFNJIFZDIElEIGludmFsaWQiLAotCSJIaWdoIENvbnRlbnRpb24iLAotCSJMb3cgY29u dGVudGlvbiIsCi0JIkRQSSBGSUZPIFVuZGVyIHJ1biIsCi0JIkhTIFRYIFRpbWVvdXQiLAotCSJM UCBSWCBUaW1lb3V0IiwKLQkiVHVybiBBcm91bmQgQUNLIFRpbWVvdXQiLAotCSJBQ0sgV2l0aCBO byBFcnJvciIsCi0JIlJYIEludmFsaWQgVFggTGVuZ3RoIiwKLQkiUlggUHJvdCBWaW9sYXRpb24i LAotCSJIUyBHZW5lcmljIFdyaXRlIEZJRk8gRnVsbCIsCi0JIkxQIEdlbmVyaWMgV3JpdGUgRklG TyBGdWxsIiwKLQkiR2VuZXJpYyBSZWFkIERhdGEgQXZhaWwiLAotCSJTcGVjaWFsIFBhY2tldCBT ZW50IiwKLQkiVGVhcmluZyBFZmZlY3QiLAotfTsKLQotc3RhdGljIGlubGluZSBpbnQgd2FpdF9m b3JfZ2VuX2ZpZm9fZW1wdHkoc3RydWN0IG1kZmxkX2RzaV9wa2dfc2VuZGVyICpzZW5kZXIsCi0J CQkJCQl1MzIgbWFzaykKLXsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gc2VuZGVyLT5kZXY7 Ci0JdTMyIGdlbl9maWZvX3N0YXRfcmVnID0gc2VuZGVyLT5taXBpX2dlbl9maWZvX3N0YXRfcmVn OwotCWludCByZXRyeSA9IDB4ZmZmZjsKLQotCXdoaWxlIChyZXRyeS0tKSB7Ci0JCWlmICgobWFz ayAmIFJFR19SRUFEKGdlbl9maWZvX3N0YXRfcmVnKSkgPT0gbWFzaykKLQkJCXJldHVybiAwOwot CQl1ZGVsYXkoMTAwKTsKLQl9Ci0JRFJNX0VSUk9SKCJmaWZvIGlzIE5PVCBlbXB0eSAweCUwOHhc biIsIFJFR19SRUFEKGdlbl9maWZvX3N0YXRfcmVnKSk7Ci0JcmV0dXJuIC1FSU87Ci19Ci0KLXN0 YXRpYyBpbnQgd2FpdF9mb3JfYWxsX2ZpZm9zX2VtcHR5KHN0cnVjdCBtZGZsZF9kc2lfcGtnX3Nl bmRlciAqc2VuZGVyKQotewotCXJldHVybiB3YWl0X2Zvcl9nZW5fZmlmb19lbXB0eShzZW5kZXIs IChCSVQoMikgfCBCSVQoMTApIHwgQklUKDE4KSB8Ci0JCQkJCQlCSVQoMjYpIHwgQklUKDI3KSB8 IEJJVCgyOCkpKTsKLX0KLQotc3RhdGljIGludCB3YWl0X2Zvcl9scF9maWZvc19lbXB0eShzdHJ1 Y3QgbWRmbGRfZHNpX3BrZ19zZW5kZXIgKnNlbmRlcikKLXsKLQlyZXR1cm4gd2FpdF9mb3JfZ2Vu X2ZpZm9fZW1wdHkoc2VuZGVyLCAoQklUKDEwKSB8IEJJVCgyNikpKTsKLX0KLQotc3RhdGljIGlu dCB3YWl0X2Zvcl9oc19maWZvc19lbXB0eShzdHJ1Y3QgbWRmbGRfZHNpX3BrZ19zZW5kZXIgKnNl bmRlcikKLXsKLQlyZXR1cm4gd2FpdF9mb3JfZ2VuX2ZpZm9fZW1wdHkoc2VuZGVyLCAoQklUKDIp IHwgQklUKDE4KSkpOwotfQotCi1zdGF0aWMgaW50IGhhbmRsZV9kc2lfZXJyb3Ioc3RydWN0IG1k ZmxkX2RzaV9wa2dfc2VuZGVyICpzZW5kZXIsIHUzMiBtYXNrKQotewotCXUzMiBpbnRyX3N0YXRf cmVnID0gc2VuZGVyLT5taXBpX2ludHJfc3RhdF9yZWc7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRl diA9IHNlbmRlci0+ZGV2OwotCi0JZGV2X2RiZyhzZW5kZXItPmRldi0+ZGV2LCAiSGFuZGxpbmcg ZXJyb3IgMHglMDh4XG4iLCBtYXNrKTsKLQotCXN3aXRjaCAobWFzaykgewotCWNhc2UgQklUKDAp OgotCWNhc2UgQklUKDEpOgotCWNhc2UgQklUKDIpOgotCWNhc2UgQklUKDMpOgotCWNhc2UgQklU KDQpOgotCWNhc2UgQklUKDUpOgotCWNhc2UgQklUKDYpOgotCWNhc2UgQklUKDcpOgotCWNhc2Ug QklUKDgpOgotCWNhc2UgQklUKDkpOgotCWNhc2UgQklUKDEwKToKLQljYXNlIEJJVCgxMSk6Ci0J Y2FzZSBCSVQoMTIpOgotCWNhc2UgQklUKDEzKToKLQkJZGV2X2RiZyhzZW5kZXItPmRldi0+ZGV2 LCAiTm8gQWN0aW9uIHJlcXVpcmVkXG4iKTsKLQkJYnJlYWs7Ci0JY2FzZSBCSVQoMTQpOgotCQkv KndhaXQgZm9yIGFsbCBmaWZvIGVtcHR5Ki8KLQkJLyp3YWl0X2Zvcl9hbGxfZmlmb3NfZW1wdHko c2VuZGVyKSovCi0JCWJyZWFrOwotCWNhc2UgQklUKDE1KToKLQkJZGV2X2RiZyhzZW5kZXItPmRl di0+ZGV2LCAiTm8gQWN0aW9uIHJlcXVpcmVkXG4iKTsKLQkJYnJlYWs7Ci0JY2FzZSBCSVQoMTYp OgotCQlicmVhazsKLQljYXNlIEJJVCgxNyk6Ci0JCWJyZWFrOwotCWNhc2UgQklUKDE4KToKLQlj YXNlIEJJVCgxOSk6Ci0JCWRldl9kYmcoc2VuZGVyLT5kZXYtPmRldiwgIkhpZ2gvTG93IGNvbnRl bnRpb24gZGV0ZWN0ZWRcbiIpOwotCQkvKndhaXQgZm9yIGNvbnRlbnRpb24gcmVjb3ZlcnkgdGlt ZSovCi0JCS8qbWRlbGF5KDEwKTsqLwotCQkvKndhaXQgZm9yIGFsbCBmaWZvIGVtcHR5Ki8KLQkJ aWYgKDApCi0JCQl3YWl0X2Zvcl9hbGxfZmlmb3NfZW1wdHkoc2VuZGVyKTsKLQkJYnJlYWs7Ci0J Y2FzZSBCSVQoMjApOgotCQlkZXZfZGJnKHNlbmRlci0+ZGV2LT5kZXYsICJObyBBY3Rpb24gcmVx dWlyZWRcbiIpOwotCQlicmVhazsKLQljYXNlIEJJVCgyMSk6Ci0JCS8qd2FpdCBmb3IgYWxsIGZp Zm8gZW1wdHkqLwotCQkvKndhaXRfZm9yX2FsbF9maWZvc19lbXB0eShzZW5kZXIpOyovCi0JCWJy ZWFrOwotCWNhc2UgQklUKDIyKToKLQkJYnJlYWs7Ci0JY2FzZSBCSVQoMjMpOgotCWNhc2UgQklU KDI0KToKLQljYXNlIEJJVCgyNSk6Ci0JY2FzZSBCSVQoMjYpOgotCWNhc2UgQklUKDI3KToKLQkJ ZGV2X2RiZyhzZW5kZXItPmRldi0+ZGV2LCAiSFMgR2VuIGZpZm8gZnVsbFxuIik7Ci0JCVJFR19X UklURShpbnRyX3N0YXRfcmVnLCBtYXNrKTsKLQkJd2FpdF9mb3JfaHNfZmlmb3NfZW1wdHkoc2Vu ZGVyKTsKLQkJYnJlYWs7Ci0JY2FzZSBCSVQoMjgpOgotCQlkZXZfZGJnKHNlbmRlci0+ZGV2LT5k ZXYsICJMUCBHZW4gZmlmbyBmdWxsXG4iKTsKLQkJUkVHX1dSSVRFKGludHJfc3RhdF9yZWcsIG1h c2spOwotCQl3YWl0X2Zvcl9scF9maWZvc19lbXB0eShzZW5kZXIpOwotCQlicmVhazsKLQljYXNl IEJJVCgyOSk6Ci0JY2FzZSBCSVQoMzApOgotCWNhc2UgQklUKDMxKToKLQkJZGV2X2RiZyhzZW5k ZXItPmRldi0+ZGV2LCAiTm8gQWN0aW9uIHJlcXVpcmVkXG4iKTsKLQkJYnJlYWs7Ci0JfQotCi0J aWYgKG1hc2sgJiBSRUdfUkVBRChpbnRyX3N0YXRfcmVnKSkKLQkJZGV2X2RiZyhzZW5kZXItPmRl di0+ZGV2LAotCQkJCSJDYW5ub3QgY2xlYW4gaW50ZXJydXB0IDB4JTA4eFxuIiwgbWFzayk7Ci0J cmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2Vycm9yX2hhbmRsZXIoc3RydWN0IG1kZmxk X2RzaV9wa2dfc2VuZGVyICpzZW5kZXIpCi17Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHNl bmRlci0+ZGV2OwotCXUzMiBpbnRyX3N0YXRfcmVnID0gc2VuZGVyLT5taXBpX2ludHJfc3RhdF9y ZWc7Ci0JdTMyIG1hc2s7Ci0JdTMyIGludHJfc3RhdDsKLQlpbnQgaTsKLQlpbnQgZXJyID0gMDsK LQotCWludHJfc3RhdCA9IFJFR19SRUFEKGludHJfc3RhdF9yZWcpOwotCi0JZm9yIChpID0gMDsg aSA8IDMyOyBpKyspIHsKLQkJbWFzayA9ICgweDAwMDAwMDAxVUwpIDw8IGk7Ci0JCWlmIChpbnRy X3N0YXQgJiBtYXNrKSB7Ci0JCQlkZXZfZGJnKHNlbmRlci0+ZGV2LT5kZXYsICJbRFNJXTogJXNc biIsIGRzaV9lcnJvcnNbaV0pOwotCQkJZXJyID0gaGFuZGxlX2RzaV9lcnJvcihzZW5kZXIsIG1h c2spOwotCQkJaWYgKGVycikKLQkJCQlEUk1fRVJST1IoIkNhbm5vdCBoYW5kbGUgZXJyb3JcbiIp OwotCQl9Ci0JfQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgc2VuZF9zaG9ydF9wa2co c3RydWN0IG1kZmxkX2RzaV9wa2dfc2VuZGVyICpzZW5kZXIsIHU4IGRhdGFfdHlwZSwKLQkJCXU4 IGNtZCwgdTggcGFyYW0sIGJvb2wgaHMpCi17Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHNl bmRlci0+ZGV2OwotCXUzMiBjdHJsX3JlZzsKLQl1MzIgdmFsOwotCXU4IHZpcnR1YWxfY2hhbm5l bCA9IDA7Ci0KLQlpZiAoaHMpIHsKLQkJY3RybF9yZWcgPSBzZW5kZXItPm1pcGlfaHNfZ2VuX2N0 cmxfcmVnOwotCi0JCS8qIEZJWE1FOiB3YWl0X2Zvcl9oc19maWZvc19lbXB0eShzZW5kZXIpOyAq LwotCX0gZWxzZSB7Ci0JCWN0cmxfcmVnID0gc2VuZGVyLT5taXBpX2xwX2dlbl9jdHJsX3JlZzsK LQotCQkvKiBGSVhNRTogd2FpdF9mb3JfbHBfZmlmb3NfZW1wdHkoc2VuZGVyKTsgKi8KLQl9Ci0K LQl2YWwgPSBGTERfVkFMKHBhcmFtLCAyMywgMTYpIHwgRkxEX1ZBTChjbWQsIDE1LCA4KSB8Ci0J CUZMRF9WQUwodmlydHVhbF9jaGFubmVsLCA3LCA2KSB8IEZMRF9WQUwoZGF0YV90eXBlLCA1LCAw KTsKLQotCVJFR19XUklURShjdHJsX3JlZywgdmFsKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0 aWMgaW50IHNlbmRfbG9uZ19wa2coc3RydWN0IG1kZmxkX2RzaV9wa2dfc2VuZGVyICpzZW5kZXIs IHU4IGRhdGFfdHlwZSwKLQkJCXU4ICpkYXRhLCBpbnQgbGVuLCBib29sIGhzKQotewotCXN0cnVj dCBkcm1fZGV2aWNlICpkZXYgPSBzZW5kZXItPmRldjsKLQl1MzIgY3RybF9yZWc7Ci0JdTMyIGRh dGFfcmVnOwotCXUzMiB2YWw7Ci0JdTggKnA7Ci0JdTggYjEsIGIyLCBiMywgYjQ7Ci0JdTggdmly dHVhbF9jaGFubmVsID0gMDsKLQlpbnQgaTsKLQotCWlmIChocykgewotCQljdHJsX3JlZyA9IHNl bmRlci0+bWlwaV9oc19nZW5fY3RybF9yZWc7Ci0JCWRhdGFfcmVnID0gc2VuZGVyLT5taXBpX2hz X2dlbl9kYXRhX3JlZzsKLQotCQkvKiBGSVhNRTogd2FpdF9mb3JfaHNfZmlmb3NfZW1wdHkoc2Vu ZGVyKTsgKi8KLQl9IGVsc2UgewotCQljdHJsX3JlZyA9IHNlbmRlci0+bWlwaV9scF9nZW5fY3Ry bF9yZWc7Ci0JCWRhdGFfcmVnID0gc2VuZGVyLT5taXBpX2xwX2dlbl9kYXRhX3JlZzsKLQotCQkv KiBGSVhNRTogd2FpdF9mb3JfbHBfZmlmb3NfZW1wdHkoc2VuZGVyKTsgKi8KLQl9Ci0KLQlwID0g ZGF0YTsKLQlmb3IgKGkgPSAwOyBpIDwgbGVuIC8gNDsgaSsrKSB7Ci0JCWIxID0gKnArKzsKLQkJ YjIgPSAqcCsrOwotCQliMyA9ICpwKys7Ci0JCWI0ID0gKnArKzsKLQotCQlSRUdfV1JJVEUoZGF0 YV9yZWcsIGI0IDw8IDI0IHwgYjMgPDwgMTYgfCBiMiA8PCA4IHwgYjEpOwotCX0KLQotCWkgPSBs ZW4gJSA0OwotCWlmIChpKSB7Ci0JCWIxID0gMDsgYjIgPSAwOyBiMyA9IDA7Ci0KLQkJc3dpdGNo IChpKSB7Ci0JCWNhc2UgMzoKLQkJCWIxID0gKnArKzsKLQkJCWIyID0gKnArKzsKLQkJCWIzID0g KnArKzsKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCQliMSA9ICpwKys7Ci0JCQliMiA9ICpwKys7 Ci0JCQlicmVhazsKLQkJY2FzZSAxOgotCQkJYjEgPSAqcCsrOwotCQkJYnJlYWs7Ci0JCX0KLQot CQlSRUdfV1JJVEUoZGF0YV9yZWcsIGIzIDw8IDE2IHwgYjIgPDwgOCB8IGIxKTsKLQl9Ci0KLQl2 YWwgPSBGTERfVkFMKGxlbiwgMjMsIDgpIHwgRkxEX1ZBTCh2aXJ0dWFsX2NoYW5uZWwsIDcsIDYp IHwKLQkJRkxEX1ZBTChkYXRhX3R5cGUsIDUsIDApOwotCi0JUkVHX1dSSVRFKGN0cmxfcmVnLCB2 YWwpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2VuZF9wa2dfcHJlcGFyZShzdHJ1 Y3QgbWRmbGRfZHNpX3BrZ19zZW5kZXIgKnNlbmRlciwgdTggZGF0YV90eXBlLAotCQkJdTggKmRh dGEsIHUxNiBsZW4pCi17Ci0JdTggY21kOwotCi0Jc3dpdGNoIChkYXRhX3R5cGUpIHsKLQljYXNl IE1JUElfRFNJX0RDU19TSE9SVF9XUklURToKLQljYXNlIE1JUElfRFNJX0RDU19TSE9SVF9XUklU RV9QQVJBTToKLQljYXNlIE1JUElfRFNJX0RDU19MT05HX1dSSVRFOgotCQljbWQgPSAqZGF0YTsK LQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyp0aGlzIHByZXZlbnRz IG90aGVyIHBhY2thZ2Ugc2VuZGluZyB3aGlsZSBkb2luZyBtc2xlZXAqLwotCXNlbmRlci0+c3Rh dHVzID0gTURGTERfRFNJX1BLR19TRU5ERVJfQlVTWTsKLQotCS8qd2FpdCBmb3IgMTIwIG1pbGxp c2Vjb25kcyBpbiBjYXNlIGV4aXRfc2xlZXBfbW9kZSBqdXN0IGJlIHNlbnQqLwotCWlmICh1bmxp a2VseShjbWQgPT0gTUlQSV9EQ1NfRU5URVJfU0xFRVBfTU9ERSkpIHsKLQkJLypUT0RPOiByZXBs YWNlIGl0IHdpdGggbXNsZWVwIGxhdGVyKi8KLQkJbWRlbGF5KDEyMCk7Ci0JfQotCi0JaWYgKHVu bGlrZWx5KGNtZCA9PSBNSVBJX0RDU19FWElUX1NMRUVQX01PREUpKSB7Ci0JCS8qVE9ETzogcmVw bGFjZSBpdCB3aXRoIG1zbGVlcCBsYXRlciovCi0JCW1kZWxheSgxMjApOwotCX0KLQlyZXR1cm4g MDsKLX0KLQotc3RhdGljIGludCBzZW5kX3BrZ19kb25lKHN0cnVjdCBtZGZsZF9kc2lfcGtnX3Nl bmRlciAqc2VuZGVyLCB1OCBkYXRhX3R5cGUsCi0JCQl1OCAqZGF0YSwgdTE2IGxlbikKLXsKLQl1 OCBjbWQ7Ci0KLQlzd2l0Y2ggKGRhdGFfdHlwZSkgewotCWNhc2UgTUlQSV9EU0lfRENTX1NIT1JU X1dSSVRFOgotCWNhc2UgTUlQSV9EU0lfRENTX1NIT1JUX1dSSVRFX1BBUkFNOgotCWNhc2UgTUlQ SV9EU0lfRENTX0xPTkdfV1JJVEU6Ci0JCWNtZCA9ICpkYXRhOwotCQlicmVhazsKLQlkZWZhdWx0 OgotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKnVwZGF0ZSBwYW5lbCBzdGF0dXMqLwotCWlmICh1bmxp a2VseShjbWQgPT0gTUlQSV9EQ1NfRU5URVJfU0xFRVBfTU9ERSkpIHsKLQkJc2VuZGVyLT5wYW5l bF9tb2RlIHw9IE1ERkxEX0RTSV9QQU5FTF9NT0RFX1NMRUVQOwotCQkvKlRPRE86IHJlcGxhY2Ug aXQgd2l0aCBtc2xlZXAgbGF0ZXIqLwotCQltZGVsYXkoMTIwKTsKLQl9IGVsc2UgaWYgKHVubGlr ZWx5KGNtZCA9PSBNSVBJX0RDU19FWElUX1NMRUVQX01PREUpKSB7Ci0JCXNlbmRlci0+cGFuZWxf bW9kZSAmPSB+TURGTERfRFNJX1BBTkVMX01PREVfU0xFRVA7Ci0JCS8qVE9ETzogcmVwbGFjZSBp dCB3aXRoIG1zbGVlcCBsYXRlciovCi0JCW1kZWxheSgxMjApOwotCX0gZWxzZSBpZiAodW5saWtl bHkoY21kID09IE1JUElfRENTX1NPRlRfUkVTRVQpKSB7Ci0JCS8qVE9ETzogcmVwbGFjZSBpdCB3 aXRoIG1zbGVlcCBsYXRlciovCi0JCW1kZWxheSg1KTsKLQl9Ci0KLQlzZW5kZXItPnN0YXR1cyA9 IE1ERkxEX0RTSV9QS0dfU0VOREVSX0ZSRUU7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlu dCBzZW5kX3BrZyhzdHJ1Y3QgbWRmbGRfZHNpX3BrZ19zZW5kZXIgKnNlbmRlciwgdTggZGF0YV90 eXBlLAotCQl1OCAqZGF0YSwgdTE2IGxlbiwgYm9vbCBocykKLXsKLQlpbnQgcmV0OwotCi0JLypo YW5kbGUgRFNJIGVycm9yKi8KLQlyZXQgPSBkc2lfZXJyb3JfaGFuZGxlcihzZW5kZXIpOwotCWlm IChyZXQpIHsKLQkJRFJNX0VSUk9SKCJFcnJvciBoYW5kbGluZyBmYWlsZWRcbiIpOwotCQlyZXR1 cm4gLUVBR0FJTjsKLQl9Ci0KLQkvKiBzZW5kIHBrZyAqLwotCWlmIChzZW5kZXItPnN0YXR1cyA9 PSBNREZMRF9EU0lfUEtHX1NFTkRFUl9CVVNZKSB7Ci0JCURSTV9FUlJPUigic2VuZGVyIGlzIGJ1 c3lcbiIpOwotCQlyZXR1cm4gLUVBR0FJTjsKLQl9Ci0KLQlyZXQgPSBzZW5kX3BrZ19wcmVwYXJl KHNlbmRlciwgZGF0YV90eXBlLCBkYXRhLCBsZW4pOwotCWlmIChyZXQpIHsKLQkJRFJNX0VSUk9S KCJzZW5kX3BrZ19wcmVwYXJlIGVycm9yXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlzd2l0 Y2ggKGRhdGFfdHlwZSkgewotCWNhc2UgTUlQSV9EU0lfR0VORVJJQ19TSE9SVF9XUklURV8wX1BB UkFNOgotCWNhc2UgTUlQSV9EU0lfR0VORVJJQ19TSE9SVF9XUklURV8xX1BBUkFNOgotCWNhc2Ug TUlQSV9EU0lfR0VORVJJQ19TSE9SVF9XUklURV8yX1BBUkFNOgotCWNhc2UgTUlQSV9EU0lfR0VO RVJJQ19SRUFEX1JFUVVFU1RfMF9QQVJBTToKLQljYXNlIE1JUElfRFNJX0dFTkVSSUNfUkVBRF9S RVFVRVNUXzFfUEFSQU06Ci0JY2FzZSBNSVBJX0RTSV9HRU5FUklDX1JFQURfUkVRVUVTVF8yX1BB UkFNOgotCWNhc2UgTUlQSV9EU0lfRENTX1NIT1JUX1dSSVRFOgotCWNhc2UgTUlQSV9EU0lfRENT X1NIT1JUX1dSSVRFX1BBUkFNOgotCWNhc2UgTUlQSV9EU0lfRENTX1JFQUQ6Ci0JCXJldCA9IHNl bmRfc2hvcnRfcGtnKHNlbmRlciwgZGF0YV90eXBlLCBkYXRhWzBdLCBkYXRhWzFdLCBocyk7Ci0J CWJyZWFrOwotCWNhc2UgTUlQSV9EU0lfR0VORVJJQ19MT05HX1dSSVRFOgotCWNhc2UgTUlQSV9E U0lfRENTX0xPTkdfV1JJVEU6Ci0JCXJldCA9IHNlbmRfbG9uZ19wa2coc2VuZGVyLCBkYXRhX3R5 cGUsIGRhdGEsIGxlbiwgaHMpOwotCQlicmVhazsKLQl9Ci0KLQlzZW5kX3BrZ19kb25lKHNlbmRl ciwgZGF0YV90eXBlLCBkYXRhLCBsZW4pOwotCi0JLypGSVhNRTogc2hvdWxkIEkgcXVlcnkgY29t cGxldGUgYW5kIGZpZm8gZW1wdHkgaGVyZT8qLwotCi0JcmV0dXJuIHJldDsKLX0KLQotaW50IG1k ZmxkX2RzaV9zZW5kX21jc19sb25nKHN0cnVjdCBtZGZsZF9kc2lfcGtnX3NlbmRlciAqc2VuZGVy LCB1OCAqZGF0YSwKLQkJCXUzMiBsZW4sIGJvb2wgaHMpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFn czsKLQotCWlmICghc2VuZGVyIHx8ICFkYXRhIHx8ICFsZW4pIHsKLQkJRFJNX0VSUk9SKCJJbnZh bGlkIHBhcmFtZXRlcnNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlzcGluX2xvY2tf aXJxc2F2ZSgmc2VuZGVyLT5sb2NrLCBmbGFncyk7Ci0Jc2VuZF9wa2coc2VuZGVyLCBNSVBJX0RT SV9EQ1NfTE9OR19XUklURSwgZGF0YSwgbGVuLCBocyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmc2VuZGVyLT5sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IG1kZmxkX2Rz aV9zZW5kX21jc19zaG9ydChzdHJ1Y3QgbWRmbGRfZHNpX3BrZ19zZW5kZXIgKnNlbmRlciwgdTgg Y21kLAotCQkJdTggcGFyYW0sIHU4IHBhcmFtX251bSwgYm9vbCBocykKLXsKLQl1OCBkYXRhWzJd OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdTggZGF0YV90eXBlOwotCi0JaWYgKCFzZW5kZXIp IHsKLQkJRFJNX0VSUk9SKCJJbnZhbGlkIHBhcmFtZXRlclxuIik7Ci0JCXJldHVybiAtRUlOVkFM OwotCX0KLQotCWRhdGFbMF0gPSBjbWQ7Ci0KLQlpZiAocGFyYW1fbnVtKSB7Ci0JCWRhdGFfdHlw ZSA9IE1JUElfRFNJX0RDU19TSE9SVF9XUklURV9QQVJBTTsKLQkJZGF0YVsxXSA9IHBhcmFtOwot CX0gZWxzZSB7Ci0JCWRhdGFfdHlwZSA9IE1JUElfRFNJX0RDU19TSE9SVF9XUklURTsKLQkJZGF0 YVsxXSA9IDA7Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNlbmRlci0+bG9jaywgZmxhZ3Mp OwotCXNlbmRfcGtnKHNlbmRlciwgZGF0YV90eXBlLCBkYXRhLCBzaXplb2YoZGF0YSksIGhzKTsK LQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZW5kZXItPmxvY2ssIGZsYWdzKTsKLQotCXJldHVy biAwOwotfQotCi1pbnQgbWRmbGRfZHNpX3NlbmRfZ2VuX3Nob3J0KHN0cnVjdCBtZGZsZF9kc2lf cGtnX3NlbmRlciAqc2VuZGVyLCB1OCBwYXJhbTAsCi0JCQl1OCBwYXJhbTEsIHU4IHBhcmFtX251 bSwgYm9vbCBocykKLXsKLQl1OCBkYXRhWzJdOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdTgg ZGF0YV90eXBlOwotCi0JaWYgKCFzZW5kZXIgfHwgcGFyYW1fbnVtID4gMikgewotCQlEUk1fRVJS T1IoIkludmFsaWQgcGFyYW1ldGVyXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jc3dp dGNoIChwYXJhbV9udW0pIHsKLQljYXNlIDA6Ci0JCWRhdGFfdHlwZSA9IE1JUElfRFNJX0dFTkVS SUNfU0hPUlRfV1JJVEVfMF9QQVJBTTsKLQkJZGF0YVswXSA9IDA7Ci0JCWRhdGFbMV0gPSAwOwot CQlicmVhazsKLQljYXNlIDE6Ci0JCWRhdGFfdHlwZSA9IE1JUElfRFNJX0dFTkVSSUNfU0hPUlRf V1JJVEVfMV9QQVJBTTsKLQkJZGF0YVswXSA9IHBhcmFtMDsKLQkJZGF0YVsxXSA9IDA7Ci0JCWJy ZWFrOwotCWNhc2UgMjoKLQkJZGF0YV90eXBlID0gTUlQSV9EU0lfR0VORVJJQ19TSE9SVF9XUklU RV8yX1BBUkFNOwotCQlkYXRhWzBdID0gcGFyYW0wOwotCQlkYXRhWzFdID0gcGFyYW0xOwotCQli cmVhazsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2VuZGVyLT5sb2NrLCBmbGFncyk7Ci0J c2VuZF9wa2coc2VuZGVyLCBkYXRhX3R5cGUsIGRhdGEsIHNpemVvZihkYXRhKSwgaHMpOwotCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbmRlci0+bG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIDA7 Ci19Ci0KLWludCBtZGZsZF9kc2lfc2VuZF9nZW5fbG9uZyhzdHJ1Y3QgbWRmbGRfZHNpX3BrZ19z ZW5kZXIgKnNlbmRlciwgdTggKmRhdGEsCi0JCQl1MzIgbGVuLCBib29sIGhzKQotewotCXVuc2ln bmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoIXNlbmRlciB8fCAhZGF0YSB8fCAhbGVuKSB7Ci0JCURS TV9FUlJPUigiSW52YWxpZCBwYXJhbWV0ZXJzXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQot Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNlbmRlci0+bG9jaywgZmxhZ3MpOwotCXNlbmRfcGtnKHNl bmRlciwgTUlQSV9EU0lfR0VORVJJQ19MT05HX1dSSVRFLCBkYXRhLCBsZW4sIGhzKTsKLQlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZzZW5kZXItPmxvY2ssIGZsYWdzKTsKLQotCXJldHVybiAwOwot fQotCi1zdGF0aWMgaW50IF9fcmVhZF9wYW5lbF9kYXRhKHN0cnVjdCBtZGZsZF9kc2lfcGtnX3Nl bmRlciAqc2VuZGVyLCB1OCBkYXRhX3R5cGUsCi0JCQl1OCAqZGF0YSwgdTE2IGxlbiwgdTMyICpk YXRhX291dCwgdTE2IGxlbl9vdXQsIGJvb2wgaHMpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsK LQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OwotCWludCBpOwotCXUzMiBnZW5fZGF0YV9yZWc7Ci0J aW50IHJldHJ5ID0gTURGTERfRFNJX1JFQURfTUFYX0NPVU5UOwotCi0JaWYgKCFzZW5kZXIgfHwg IWRhdGFfb3V0IHx8ICFsZW5fb3V0KSB7Ci0JCURSTV9FUlJPUigiSW52YWxpZCBwYXJhbWV0ZXJz XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZGV2ID0gc2VuZGVyLT5kZXY7Ci0KLQkv KioKLQkgKiBkbyByZWFkaW5nLgotCSAqIDApIHNlbmQgb3V0IGdlbmVyaWMgcmVhZCByZXF1ZXN0 Ci0JICogMSkgcG9sbGluZyByZWFkIGRhdGEgYXZhaWwgaW50ZXJydXB0Ci0JICogMikgcmVhZCBk YXRhCi0JICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNlbmRlci0+bG9jaywgZmxhZ3MpOwotCi0J UkVHX1dSSVRFKHNlbmRlci0+bWlwaV9pbnRyX3N0YXRfcmVnLCBCSVQoMjkpKTsKLQotCWlmICgo UkVHX1JFQUQoc2VuZGVyLT5taXBpX2ludHJfc3RhdF9yZWcpICYgQklUKDI5KSkpCi0JCURSTV9F UlJPUigiQ2FuIE5PVCBjbGVhbiByZWFkIGRhdGEgdmFsaWQgaW50ZXJydXB0XG4iKTsKLQotCS8q c2VuZCBvdXQgcmVhZCByZXF1ZXN0Ki8KLQlzZW5kX3BrZyhzZW5kZXIsIGRhdGFfdHlwZSwgZGF0 YSwgbGVuLCBocyk7Ci0KLQkvKnBvbGxpbmcgcmVhZCBkYXRhIGF2YWlsIGludGVycnVwdCovCi0J d2hpbGUgKHJldHJ5ICYmICEoUkVHX1JFQUQoc2VuZGVyLT5taXBpX2ludHJfc3RhdF9yZWcpICYg QklUKDI5KSkpIHsKLQkJdWRlbGF5KDEwMCk7Ci0JCXJldHJ5LS07Ci0JfQotCi0JaWYgKCFyZXRy eSkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZW5kZXItPmxvY2ssIGZsYWdzKTsKLQkJ cmV0dXJuIC1FVElNRURPVVQ7Ci0JfQotCi0JUkVHX1dSSVRFKHNlbmRlci0+bWlwaV9pbnRyX3N0 YXRfcmVnLCBCSVQoMjkpKTsKLQotCS8qcmVhZCBkYXRhKi8KLQlpZiAoaHMpCi0JCWdlbl9kYXRh X3JlZyA9IHNlbmRlci0+bWlwaV9oc19nZW5fZGF0YV9yZWc7Ci0JZWxzZQotCQlnZW5fZGF0YV9y ZWcgPSBzZW5kZXItPm1pcGlfbHBfZ2VuX2RhdGFfcmVnOwotCi0JZm9yIChpID0gMDsgaSA8IGxl bl9vdXQ7IGkrKykKLQkJKihkYXRhX291dCArIGkpID0gUkVHX1JFQUQoZ2VuX2RhdGFfcmVnKTsK LQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbmRlci0+bG9jaywgZmxhZ3MpOwotCi0JcmV0 dXJuIDA7Ci19Ci0KLWludCBtZGZsZF9kc2lfcmVhZF9tY3Moc3RydWN0IG1kZmxkX2RzaV9wa2df c2VuZGVyICpzZW5kZXIsIHU4IGNtZCwKLQkJdTMyICpkYXRhLCB1MTYgbGVuLCBib29sIGhzKQot ewotCWlmICghc2VuZGVyIHx8ICFkYXRhIHx8ICFsZW4pIHsKLQkJRFJNX0VSUk9SKCJJbnZhbGlk IHBhcmFtZXRlcnNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gX19yZWFk X3BhbmVsX2RhdGEoc2VuZGVyLCBNSVBJX0RTSV9EQ1NfUkVBRCwgJmNtZCwgMSwKLQkJCQlkYXRh LCBsZW4sIGhzKTsKLX0KLQotaW50IG1kZmxkX2RzaV9wa2dfc2VuZGVyX2luaXQoc3RydWN0IG1k ZmxkX2RzaV9jb25uZWN0b3IgKmRzaV9jb25uZWN0b3IsCi0JCQkJCQkJCWludCBwaXBlKQotewot CXN0cnVjdCBtZGZsZF9kc2lfcGtnX3NlbmRlciAqcGtnX3NlbmRlcjsKLQlzdHJ1Y3QgbWRmbGRf ZHNpX2NvbmZpZyAqZHNpX2NvbmZpZyA9Ci0JCQkJbWRmbGRfZHNpX2dldF9jb25maWcoZHNpX2Nv bm5lY3Rvcik7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRzaV9jb25maWctPmRldjsKLQlz dHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JY29u c3Qgc3RydWN0IHBzYl9vZmZzZXQgKm1hcCA9ICZkZXZfcHJpdi0+cmVnbWFwW3BpcGVdOwotCXUz MiBtaXBpX3ZhbCA9IDA7Ci0KLQlpZiAoIWRzaV9jb25uZWN0b3IpIHsKLQkJRFJNX0VSUk9SKCJJ bnZhbGlkIHBhcmFtZXRlclxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXBrZ19zZW5k ZXIgPSBkc2lfY29ubmVjdG9yLT5wa2dfc2VuZGVyOwotCi0JaWYgKCFwa2dfc2VuZGVyIHx8IElT X0VSUihwa2dfc2VuZGVyKSkgewotCQlwa2dfc2VuZGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0 IG1kZmxkX2RzaV9wa2dfc2VuZGVyKSwKLQkJCQkJCQkJR0ZQX0tFUk5FTCk7Ci0JCWlmICghcGtn X3NlbmRlcikgewotCQkJRFJNX0VSUk9SKCJDcmVhdGUgRFNJIHBrZyBzZW5kZXIgZmFpbGVkXG4i KTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JCWRzaV9jb25uZWN0b3ItPnBrZ19zZW5kZXIg PSAodm9pZCAqKXBrZ19zZW5kZXI7Ci0JfQotCi0JcGtnX3NlbmRlci0+ZGV2ID0gZGV2OwotCXBr Z19zZW5kZXItPmRzaV9jb25uZWN0b3IgPSBkc2lfY29ubmVjdG9yOwotCXBrZ19zZW5kZXItPnBp cGUgPSBwaXBlOwotCXBrZ19zZW5kZXItPnBrZ19udW0gPSAwOwotCXBrZ19zZW5kZXItPnBhbmVs X21vZGUgPSAwOwotCXBrZ19zZW5kZXItPnN0YXR1cyA9IE1ERkxEX0RTSV9QS0dfU0VOREVSX0ZS RUU7Ci0KLQkvKmluaXQgcmVncyovCi0JLyogRklYTUU6IHNob3VsZCBqdXN0IGNvcHkgdGhlIHJl Z21hcCBwdHIgPyAqLwotCXBrZ19zZW5kZXItPmRwbGxfcmVnID0gbWFwLT5kcGxsOwotCXBrZ19z ZW5kZXItPmRzcGNudHJfcmVnID0gbWFwLT5jbnRyOwotCXBrZ19zZW5kZXItPnBpcGVjb25mX3Jl ZyA9IG1hcC0+Y29uZjsKLQlwa2dfc2VuZGVyLT5kc3BsaW5vZmZfcmVnID0gbWFwLT5saW5vZmY7 Ci0JcGtnX3NlbmRlci0+ZHNwc3VyZl9yZWcgPSBtYXAtPnN1cmY7Ci0JcGtnX3NlbmRlci0+cGlw ZXN0YXRfcmVnID0gbWFwLT5zdGF0dXM7Ci0KLQlwa2dfc2VuZGVyLT5taXBpX2ludHJfc3RhdF9y ZWcgPSBNSVBJX0lOVFJfU1RBVF9SRUcocGlwZSk7Ci0JcGtnX3NlbmRlci0+bWlwaV9scF9nZW5f ZGF0YV9yZWcgPSBNSVBJX0xQX0dFTl9EQVRBX1JFRyhwaXBlKTsKLQlwa2dfc2VuZGVyLT5taXBp X2hzX2dlbl9kYXRhX3JlZyA9IE1JUElfSFNfR0VOX0RBVEFfUkVHKHBpcGUpOwotCXBrZ19zZW5k ZXItPm1pcGlfbHBfZ2VuX2N0cmxfcmVnID0gTUlQSV9MUF9HRU5fQ1RSTF9SRUcocGlwZSk7Ci0J cGtnX3NlbmRlci0+bWlwaV9oc19nZW5fY3RybF9yZWcgPSBNSVBJX0hTX0dFTl9DVFJMX1JFRyhw aXBlKTsKLQlwa2dfc2VuZGVyLT5taXBpX2dlbl9maWZvX3N0YXRfcmVnID0gTUlQSV9HRU5fRklG T19TVEFUX1JFRyhwaXBlKTsKLQlwa2dfc2VuZGVyLT5taXBpX2RhdGFfYWRkcl9yZWcgPSBNSVBJ X0RBVEFfQUREX1JFRyhwaXBlKTsKLQlwa2dfc2VuZGVyLT5taXBpX2RhdGFfbGVuX3JlZyA9IE1J UElfREFUQV9MRU5fUkVHKHBpcGUpOwotCXBrZ19zZW5kZXItPm1pcGlfY21kX2FkZHJfcmVnID0g TUlQSV9DTURfQUREX1JFRyhwaXBlKTsKLQlwa2dfc2VuZGVyLT5taXBpX2NtZF9sZW5fcmVnID0g TUlQSV9DTURfTEVOX1JFRyhwaXBlKTsKLQotCS8qaW5pdCBsb2NrKi8KLQlzcGluX2xvY2tfaW5p dCgmcGtnX3NlbmRlci0+bG9jayk7Ci0KLQlpZiAobWRmbGRfZ2V0X3BhbmVsX3R5cGUoZGV2LCBw aXBlKSAhPSBUQzM1ODc2WCkgewotCQkvKioKLQkJICogRm9yIHZpZGVvIG1vZGUsIGRvbid0IGVu YWJsZSBEUEkgdGltaW5nIG91dHB1dCBoZXJlLAotCQkgKiB3aWxsIGluaXQgdGhlIERQSSB0aW1p bmcgb3V0cHV0IGR1cmluZyBtb2RlIHNldHRpbmcuCi0JCSAqLwotCQltaXBpX3ZhbCA9IFBBU1Nf RlJPTV9TUEhZX1RPX0FGRSB8IFNFTF9GTE9QUEVEX0hTVFg7Ci0KLQkJaWYgKHBpcGUgPT0gMCkK LQkJCW1pcGlfdmFsIHw9IDB4MjsKLQotCQlSRUdfV1JJVEUoTUlQSV9QT1JUX0NPTlRST0wocGlw ZSksIG1pcGlfdmFsKTsKLQkJUkVHX1JFQUQoTUlQSV9QT1JUX0NPTlRST0wocGlwZSkpOwotCi0J CS8qIGRvIGRzaSBjb250cm9sbGVyIGluaXQgKi8KLQkJbWRmbGRfZHNpX2NvbnRyb2xsZXJfaW5p dChkc2lfY29uZmlnLCBwaXBlKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBtZGZsZF9k c2lfcGtnX3NlbmRlcl9kZXN0cm95KHN0cnVjdCBtZGZsZF9kc2lfcGtnX3NlbmRlciAqc2VuZGVy KQotewotCWlmICghc2VuZGVyIHx8IElTX0VSUihzZW5kZXIpKQotCQlyZXR1cm47Ci0KLQkvKmZy ZWUqLwotCWtmcmVlKHNlbmRlcik7Ci19Ci0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2dtYTUwMC9tZGZsZF9kc2lfcGtnX3NlbmRlci5oIGIvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9t ZGZsZF9kc2lfcGtnX3NlbmRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDc4 YTIxYzE1ZDUuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL21kZmxk X2RzaV9wa2dfc2VuZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vKgotICog Q29weXJpZ2h0IMKpIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBQZXJtaXNzaW9uIGlz IGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcg YQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24g ZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhv dXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdo dHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJs aWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBl cm1pdCBwZXJzb25zIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8g c28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92 ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcg dGhlIG5leHQKLSAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBv ciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKLSAqIFNvZnR3YXJlLgotICoKLSAqIFRIRSBT T0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5E LCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRI RSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAotICog VEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0s IERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0Yg Q09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCi0gKiBGUk9NLCBPVVQgT0YgT1Ig SU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCi0gKiBE RUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCi0gKgotICogQXV0aG9yczoKLSAqIEphY2tpZSBMaTx5 YW9kb25nLmxpQGludGVsLmNvbT4KLSAqLwotI2lmbmRlZiBfX01ERkxEX0RTSV9QS0dfU0VOREVS X0hfXwotI2RlZmluZSBfX01ERkxEX0RTSV9QS0dfU0VOREVSX0hfXwotCi0jaW5jbHVkZSA8bGlu dXgva3RocmVhZC5oPgotCi0jZGVmaW5lIE1ERkxEX01BWF9EQ1NfUEFSQU0JOAotCi1zdHJ1Y3Qg bWRmbGRfZHNpX3BrZ19zZW5kZXIgewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7Ci0Jc3RydWN0 IG1kZmxkX2RzaV9jb25uZWN0b3IgKmRzaV9jb25uZWN0b3I7Ci0JdTMyIHN0YXR1czsKLQl1MzIg cGFuZWxfbW9kZTsKLQotCWludCBwaXBlOwotCi0Jc3BpbmxvY2tfdCBsb2NrOwotCi0JdTMyIHBr Z19udW07Ci0KLQkvKiBSZWdpc3RlcnMgKi8KLQl1MzIgZHBsbF9yZWc7Ci0JdTMyIGRzcGNudHJf cmVnOwotCXUzMiBwaXBlY29uZl9yZWc7Ci0JdTMyIHBpcGVzdGF0X3JlZzsKLQl1MzIgZHNwbGlu b2ZmX3JlZzsKLQl1MzIgZHNwc3VyZl9yZWc7Ci0KLQl1MzIgbWlwaV9pbnRyX3N0YXRfcmVnOwot CXUzMiBtaXBpX2xwX2dlbl9kYXRhX3JlZzsKLQl1MzIgbWlwaV9oc19nZW5fZGF0YV9yZWc7Ci0J dTMyIG1pcGlfbHBfZ2VuX2N0cmxfcmVnOwotCXUzMiBtaXBpX2hzX2dlbl9jdHJsX3JlZzsKLQl1 MzIgbWlwaV9nZW5fZmlmb19zdGF0X3JlZzsKLQl1MzIgbWlwaV9kYXRhX2FkZHJfcmVnOwotCXUz MiBtaXBpX2RhdGFfbGVuX3JlZzsKLQl1MzIgbWlwaV9jbWRfYWRkcl9yZWc7Ci0JdTMyIG1pcGlf Y21kX2xlbl9yZWc7Ci19OwotCi1leHRlcm4gaW50IG1kZmxkX2RzaV9wa2dfc2VuZGVyX2luaXQo c3RydWN0IG1kZmxkX2RzaV9jb25uZWN0b3IgKmRzaV9jb25uZWN0b3IsCi0JCQkJCWludCBwaXBl KTsKLWV4dGVybiB2b2lkIG1kZmxkX2RzaV9wa2dfc2VuZGVyX2Rlc3Ryb3koc3RydWN0IG1kZmxk X2RzaV9wa2dfc2VuZGVyICpzZW5kZXIpOwotaW50IG1kZmxkX2RzaV9zZW5kX21jc19zaG9ydChz dHJ1Y3QgbWRmbGRfZHNpX3BrZ19zZW5kZXIgKnNlbmRlciwgdTggY21kLAotCQkJCQl1OCBwYXJh bSwgdTggcGFyYW1fbnVtLCBib29sIGhzKTsKLWludCBtZGZsZF9kc2lfc2VuZF9tY3NfbG9uZyhz dHJ1Y3QgbWRmbGRfZHNpX3BrZ19zZW5kZXIgKnNlbmRlciwgdTggKmRhdGEsCi0JCQkJCXUzMiBs ZW4sIGJvb2wgaHMpOwotaW50IG1kZmxkX2RzaV9zZW5kX2dlbl9zaG9ydChzdHJ1Y3QgbWRmbGRf ZHNpX3BrZ19zZW5kZXIgKnNlbmRlciwgdTggcGFyYW0wLAotCQkJCQl1OCBwYXJhbTEsIHU4IHBh cmFtX251bSwgYm9vbCBocyk7Ci1pbnQgbWRmbGRfZHNpX3NlbmRfZ2VuX2xvbmcoc3RydWN0IG1k ZmxkX2RzaV9wa2dfc2VuZGVyICpzZW5kZXIsIHU4ICpkYXRhLAotCQkJCQl1MzIgbGVuLCBib29s IGhzKTsKLS8qIFJlYWQgaW50ZXJmYWNlcyAqLwotaW50IG1kZmxkX2RzaV9yZWFkX21jcyhzdHJ1 Y3QgbWRmbGRfZHNpX3BrZ19zZW5kZXIgKnNlbmRlciwgdTggY21kLAotCQl1MzIgKmRhdGEsIHUx NiBsZW4sIGJvb2wgaHMpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9n bWE1MDAvbWRmbGRfaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9tZGZs ZF9pbnRlbF9kaXNwbGF5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2MmFiYThm NzUyOC4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvbWRmbGRfaW50 ZWxfZGlzcGxheS5jCisrKyAvZGV2L251bGwKQEAgLTEsOTY2ICswLDAgQEAKLS8vIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKLS8qCi0gKiBDb3B5cmlnaHQgw4LCqSAyMDA2 LTIwMDcgSW50ZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBBdXRob3JzOgotICoJRXJpYyBBbmhvbHQg PGVyaWNAYW5ob2x0Lm5ldD4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNs dWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+Ci0KLSNpbmNs dWRlIDxkcm0vZHJtX2NydGMuaD4KLSNpbmNsdWRlIDxkcm0vZHJtX2ZvdXJjYy5oPgotCi0jaW5j bHVkZSAiZnJhbWVidWZmZXIuaCIKLSNpbmNsdWRlICJnbWFfZGlzcGxheS5oIgotI2luY2x1ZGUg Im1kZmxkX2RzaV9vdXRwdXQuaCIKLSNpbmNsdWRlICJtZGZsZF9vdXRwdXQuaCIKLSNpbmNsdWRl ICJwc2JfaW50ZWxfcmVnLmgiCi0KLS8qIEhhcmRjb2RlZCBjdXJyZW50bHkgKi8KLXN0YXRpYyBp bnQga3NlbCA9IEtTRUxfQ1JZU1RBTF8xOTsKLQotc3RydWN0IHBzYl9pbnRlbF9yYW5nZV90IHsK LQlpbnQgbWluLCBtYXg7Ci19OwotCi1zdHJ1Y3QgbXJzdF9saW1pdF90IHsKLQlzdHJ1Y3QgcHNi X2ludGVsX3JhbmdlX3QgZG90LCBtLCBwMTsKLX07Ci0KLXN0cnVjdCBtcnN0X2Nsb2NrX3Qgewot CS8qIGRlcml2ZWQgdmFsdWVzICovCi0JaW50IGRvdDsKLQlpbnQgbTsKLQlpbnQgcDE7Ci19Owot Ci0jZGVmaW5lIENPVU5UX01BWCAweDEwMDAwMDAwCi0KLXZvaWQgbWRmbGRXYWl0Rm9yUGlwZURp c2FibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHBpcGUpCi17Ci0Jc3RydWN0IGRybV9w c2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCWNvbnN0IHN0cnVjdCBw c2Jfb2Zmc2V0ICptYXAgPSAmZGV2X3ByaXYtPnJlZ21hcFtwaXBlXTsKLQlpbnQgY291bnQsIHRl bXA7Ci0KLQlzd2l0Y2ggKHBpcGUpIHsKLQljYXNlIDA6Ci0JY2FzZSAxOgotCWNhc2UgMjoKLQkJ YnJlYWs7Ci0JZGVmYXVsdDoKLQkJRFJNX0VSUk9SKCJJbGxlZ2FsIFBpcGUgTnVtYmVyLlxuIik7 Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBGSVhNRSBKTElVN19QTyAqLwotCWdtYV93YWl0X2Zvcl92 YmxhbmsoZGV2KTsKLQlyZXR1cm47Ci0KLQkvKiBXYWl0IGZvciBmb3IgdGhlIHBpcGUgZGlzYWJs ZSB0byB0YWtlIGVmZmVjdC4gKi8KLQlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBDT1VOVF9NQVg7 IGNvdW50KyspIHsKLQkJdGVtcCA9IFJFR19SRUFEKG1hcC0+Y29uZik7Ci0JCWlmICgodGVtcCAm IFBJUEVBQ09ORl9QSVBFX1NUQVRFKSA9PSAwKQotCQkJYnJlYWs7Ci0JfQotfQotCi12b2lkIG1k ZmxkV2FpdEZvclBpcGVFbmFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHBpcGUpCi17 Ci0Jc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwot CWNvbnN0IHN0cnVjdCBwc2Jfb2Zmc2V0ICptYXAgPSAmZGV2X3ByaXYtPnJlZ21hcFtwaXBlXTsK LQlpbnQgY291bnQsIHRlbXA7Ci0KLQlzd2l0Y2ggKHBpcGUpIHsKLQljYXNlIDA6Ci0JY2FzZSAx OgotCWNhc2UgMjoKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJRFJNX0VSUk9SKCJJbGxlZ2FsIFBp cGUgTnVtYmVyLlxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBGSVhNRSBKTElVN19QTyAqLwot CWdtYV93YWl0X2Zvcl92YmxhbmsoZGV2KTsKLQlyZXR1cm47Ci0KLQkvKiBXYWl0IGZvciBmb3Ig dGhlIHBpcGUgZW5hYmxlIHRvIHRha2UgZWZmZWN0LiAqLwotCWZvciAoY291bnQgPSAwOyBjb3Vu dCA8IENPVU5UX01BWDsgY291bnQrKykgewotCQl0ZW1wID0gUkVHX1JFQUQobWFwLT5jb25mKTsK LQkJaWYgKHRlbXAgJiBQSVBFQUNPTkZfUElQRV9TVEFURSkKLQkJCWJyZWFrOwotCX0KLX0KLQot LyoKLSAqIFJldHVybiB0aGUgcGlwZSBjdXJyZW50bHkgY29ubmVjdGVkIHRvIHRoZSBwYW5lbCBm aXR0ZXIsCi0gKiBvciAtMSBpZiB0aGUgcGFuZWwgZml0dGVyIGlzIG5vdCBwcmVzZW50IG9yIG5v dCBpbiB1c2UKLSAqLwotc3RhdGljIGludCBwc2JfaW50ZWxfcGFuZWxfZml0dGVyX3BpcGUoc3Ry dWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQl1MzIgcGZpdF9jb250cm9sOwotCi0JcGZpdF9jb250 cm9sID0gUkVHX1JFQUQoUEZJVF9DT05UUk9MKTsKLQotCS8qIFNlZSBpZiB0aGUgcGFuZWwgZml0 dGVyIGlzIGluIHVzZSAqLwotCWlmICgocGZpdF9jb250cm9sICYgUEZJVF9FTkFCTEUpID09IDAp Ci0JCXJldHVybiAtMTsKLQotCS8qIDk2NSBjYW4gcGxhY2UgcGFuZWwgZml0dGVyIG9uIGVpdGhl ciBwaXBlICovCi0JcmV0dXJuIChwZml0X2NvbnRyb2wgPj4gMjkpICYgMHgzOwotfQotCi1zdGF0 aWMgaW50IGNoZWNrX2ZiKHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKQotewotCWlmICghZmIp Ci0JCXJldHVybiAwOwotCi0Jc3dpdGNoIChmYi0+Zm9ybWF0LT5jcHBbMF0gKiA4KSB7Ci0JY2Fz ZSA4OgotCWNhc2UgMTY6Ci0JY2FzZSAyNDoKLQljYXNlIDMyOgotCQlyZXR1cm4gMDsKLQlkZWZh dWx0OgotCQlEUk1fRVJST1IoIlVua25vd24gY29sb3IgZGVwdGhcbiIpOwotCQlyZXR1cm4gLUVJ TlZBTDsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgbWRmbGRfX2ludGVsX3BpcGVfc2V0X2Jhc2Uoc3Ry dWN0IGRybV9jcnRjICpjcnRjLCBpbnQgeCwgaW50IHksCi0JCQkJc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqb2xkX2ZiKQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Ci0J c3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gY3J0Yy0+cHJpbWFyeS0+ZmI7Ci0Jc3RydWN0IGdt YV9jcnRjICpnbWFfY3J0YyA9IHRvX2dtYV9jcnRjKGNydGMpOwotCWludCBwaXBlID0gZ21hX2Ny dGMtPnBpcGU7Ci0JY29uc3Qgc3RydWN0IHBzYl9vZmZzZXQgKm1hcCA9ICZkZXZfcHJpdi0+cmVn bWFwW3BpcGVdOwotCXVuc2lnbmVkIGxvbmcgc3RhcnQsIG9mZnNldDsKLQl1MzIgZHNwY250cjsK LQlpbnQgcmV0OwotCi0JZGV2X2RiZyhkZXYtPmRldiwgInBpcGUgPSAweCV4LlxuIiwgcGlwZSk7 Ci0KLQkvKiBubyBmYiBib3VuZCAqLwotCWlmICghZmIpIHsKLQkJZGV2X2RiZyhkZXYtPmRldiwg Ik5vIEZCIGJvdW5kXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0ID0gY2hlY2tfZmIoZmIp OwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlpZiAocGlwZSA+IDIpIHsKLQkJRFJNX0VS Uk9SKCJJbGxlZ2FsIFBpcGUgTnVtYmVyLlxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQot CWlmICghZ21hX3Bvd2VyX2JlZ2luKGRldiwgdHJ1ZSkpCi0JCXJldHVybiAwOwotCi0Jc3RhcnQg PSB0b19ndHRfcmFuZ2UoZmItPm9ialswXSktPm9mZnNldDsKLQlvZmZzZXQgPSB5ICogZmItPnBp dGNoZXNbMF0gKyB4ICogZmItPmZvcm1hdC0+Y3BwWzBdOwotCi0JUkVHX1dSSVRFKG1hcC0+c3Ry aWRlLCBmYi0+cGl0Y2hlc1swXSk7Ci0JZHNwY250ciA9IFJFR19SRUFEKG1hcC0+Y250cik7Ci0J ZHNwY250ciAmPSB+RElTUFBMQU5FX1BJWEZPUk1BVF9NQVNLOwotCi0Jc3dpdGNoIChmYi0+Zm9y bWF0LT5jcHBbMF0gKiA4KSB7Ci0JY2FzZSA4OgotCQlkc3BjbnRyIHw9IERJU1BQTEFORV84QlBQ OwotCQlicmVhazsKLQljYXNlIDE2OgotCQlpZiAoZmItPmZvcm1hdC0+ZGVwdGggPT0gMTUpCi0J CQlkc3BjbnRyIHw9IERJU1BQTEFORV8xNV8xNkJQUDsKLQkJZWxzZQotCQkJZHNwY250ciB8PSBE SVNQUExBTkVfMTZCUFA7Ci0JCWJyZWFrOwotCWNhc2UgMjQ6Ci0JY2FzZSAzMjoKLQkJZHNwY250 ciB8PSBESVNQUExBTkVfMzJCUFBfTk9fQUxQSEE7Ci0JCWJyZWFrOwotCX0KLQlSRUdfV1JJVEUo bWFwLT5jbnRyLCBkc3BjbnRyKTsKLQotCWRldl9kYmcoZGV2LT5kZXYsICJXcml0aW5nIGJhc2Ug JTA4bFggJTA4bFggJWQgJWRcbiIsCi0JCQkJCQlzdGFydCwgb2Zmc2V0LCB4LCB5KTsKLQlSRUdf V1JJVEUobWFwLT5saW5vZmYsIG9mZnNldCk7Ci0JUkVHX1JFQUQobWFwLT5saW5vZmYpOwotCVJF R19XUklURShtYXAtPnN1cmYsIHN0YXJ0KTsKLQlSRUdfUkVBRChtYXAtPnN1cmYpOwotCi0JZ21h X3Bvd2VyX2VuZChkZXYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBEaXNhYmxlIHRoZSBw aXBlLCBwbGFuZSBhbmQgcGxsLgotICoKLSAqLwotdm9pZCBtZGZsZF9kaXNhYmxlX2NydGMoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHBpcGUpCi17Ci0Jc3RydWN0IGRybV9wc2JfcHJpdmF0 ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCWNvbnN0IHN0cnVjdCBwc2Jfb2Zmc2V0 ICptYXAgPSAmZGV2X3ByaXYtPnJlZ21hcFtwaXBlXTsKLQl1MzIgdGVtcDsKLQotCWRldl9kYmco ZGV2LT5kZXYsICJwaXBlID0gJWRcbiIsIHBpcGUpOwotCi0KLQlpZiAocGlwZSAhPSAxKQotCQlt ZGZsZF9kc2lfZ2VuX2ZpZm9fcmVhZHkoZGV2LCBNSVBJX0dFTl9GSUZPX1NUQVRfUkVHKHBpcGUp LAotCQkJCUhTX0NUUkxfRklGT19FTVBUWSB8IEhTX0RBVEFfRklGT19FTVBUWSk7Ci0KLQkvKiBE aXNhYmxlIGRpc3BsYXkgcGxhbmUgKi8KLQl0ZW1wID0gUkVHX1JFQUQobWFwLT5jbnRyKTsKLQlp ZiAoKHRlbXAgJiBESVNQTEFZX1BMQU5FX0VOQUJMRSkgIT0gMCkgewotCQlSRUdfV1JJVEUobWFw LT5jbnRyLAotCQkJICB0ZW1wICYgfkRJU1BMQVlfUExBTkVfRU5BQkxFKTsKLQkJLyogRmx1c2gg dGhlIHBsYW5lIGNoYW5nZXMgKi8KLQkJUkVHX1dSSVRFKG1hcC0+YmFzZSwgUkVHX1JFQUQobWFw LT5iYXNlKSk7Ci0JCVJFR19SRUFEKG1hcC0+YmFzZSk7Ci0JfQotCi0JLyogRklYTUVfSkxJVTcg TURGTERfUE8gcmV2aXNpdCAqLwotCi0JLyogTmV4dCwgZGlzYWJsZSBkaXNwbGF5IHBpcGVzICov Ci0JdGVtcCA9IFJFR19SRUFEKG1hcC0+Y29uZik7Ci0JaWYgKCh0ZW1wICYgUElQRUFDT05GX0VO QUJMRSkgIT0gMCkgewotCQl0ZW1wICY9IH5QSVBFQUNPTkZfRU5BQkxFOwotCQl0ZW1wIHw9IFBJ UEVDT05GX1BMQU5FX09GRiB8IFBJUEVDT05GX0NVUlNPUl9PRkY7Ci0JCVJFR19XUklURShtYXAt PmNvbmYsIHRlbXApOwotCQlSRUdfUkVBRChtYXAtPmNvbmYpOwotCi0JCS8qIFdhaXQgZm9yIGZv ciB0aGUgcGlwZSBkaXNhYmxlIHRvIHRha2UgZWZmZWN0LiAqLwotCQltZGZsZFdhaXRGb3JQaXBl RGlzYWJsZShkZXYsIHBpcGUpOwotCX0KLQotCXRlbXAgPSBSRUdfUkVBRChtYXAtPmRwbGwpOwot CWlmICh0ZW1wICYgRFBMTF9WQ09fRU5BQkxFKSB7Ci0JCWlmICgocGlwZSAhPSAxICYmCi0JCQkh KChSRUdfUkVBRChQSVBFQUNPTkYpIHwgUkVHX1JFQUQoUElQRUNDT05GKSkKLQkJCQkmIFBJUEVB Q09ORl9FTkFCTEUpKSB8fCBwaXBlID09IDEpIHsKLQkJCXRlbXAgJj0gfihEUExMX1ZDT19FTkFC TEUpOwotCQkJUkVHX1dSSVRFKG1hcC0+ZHBsbCwgdGVtcCk7Ci0JCQlSRUdfUkVBRChtYXAtPmRw bGwpOwotCQkJLyogV2FpdCBmb3IgdGhlIGNsb2NrcyB0byB0dXJuIG9mZi4gKi8KLQkJCS8qIEZJ WE1FX01ERkxEIFBPIG1heSBuZWVkIG1vcmUgZGVsYXkgKi8KLQkJCXVkZWxheSg1MDApOwotCi0J CQlpZiAoISh0ZW1wICYgTURGTERfUFdSX0dBVEVfRU4pKSB7Ci0JCQkJLyogZ2F0aW5nIHBvd2Vy IG9mIERQTEwgKi8KLQkJCQlSRUdfV1JJVEUobWFwLT5kcGxsLCB0ZW1wIHwgTURGTERfUFdSX0dB VEVfRU4pOwotCQkJCS8qIEZJWE1FX01ERkxEIFBPIC0gY2hhbmdlIDUwMCB0byAxIGFmdGVyIFBP ICovCi0JCQkJdWRlbGF5KDUwMDApOwotCQkJfQotCQl9Ci0JfQotCi19Ci0KLS8qCi0gKiBTZXRz IHRoZSBwb3dlciBtYW5hZ2VtZW50IG1vZGUgb2YgdGhlIHBpcGUgYW5kIHBsYW5lLgotICoKLSAq IFRoaXMgY29kZSBzaG91bGQgcHJvYmFibHkgZ3JvdyBzdXBwb3J0IGZvciB0dXJuaW5nIHRoZSBj dXJzb3Igb2ZmIGFuZCBiYWNrCi0gKiBvbiBhcHByb3ByaWF0ZWx5IGF0IHRoZSBzYW1lIHRpbWUg YXMgd2UncmUgdHVybmluZyB0aGUgcGlwZSBvZmYvb24uCi0gKi8KLXN0YXRpYyB2b2lkIG1kZmxk X2NydGNfZHBtcyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIGludCBtb2RlKQotewotCXN0cnVjdCBk cm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Ci0Jc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2 X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBnbWFfY3J0YyAqZ21hX2NydGMgPSB0 b19nbWFfY3J0YyhjcnRjKTsKLQlpbnQgcGlwZSA9IGdtYV9jcnRjLT5waXBlOwotCWNvbnN0IHN0 cnVjdCBwc2Jfb2Zmc2V0ICptYXAgPSAmZGV2X3ByaXYtPnJlZ21hcFtwaXBlXTsKLQl1MzIgcGlw ZWNvbmYgPSBkZXZfcHJpdi0+cGlwZWNvbmZbcGlwZV07Ci0JdTMyIHRlbXA7Ci0JaW50IHRpbWVv dXQgPSAwOwotCi0JZGV2X2RiZyhkZXYtPmRldiwgIm1vZGUgPSAlZCwgcGlwZSA9ICVkXG4iLCBt b2RlLCBwaXBlKTsKLQotCS8qIE5vdGU6IE9sZCBjb2RlIHVzZXMgcGlwZSBhIHN0YXQgZm9yIHBp cGUgYiBidXQgdGhhdCBhcHBlYXJzCi0JICAgdG8gYmUgYSBidWcgKi8KLQotCWlmICghZ21hX3Bv d2VyX2JlZ2luKGRldiwgdHJ1ZSkpCi0JCXJldHVybjsKLQotCS8qIFhYWDogV2hlbiBvdXIgb3V0 cHV0cyBhcmUgYWxsIHVuYXdhcmUgb2YgRFBNUyBtb2RlcyBvdGhlciB0aGFuIG9mZgotCSAqIGFu ZCBvbiwgd2Ugc2hvdWxkIG1hcCB0aG9zZSBtb2RlcyB0byBEUk1fTU9ERV9EUE1TX09GRiBpbiB0 aGUgQ1JUQy4KLQkgKi8KLQlzd2l0Y2ggKG1vZGUpIHsKLQljYXNlIERSTV9NT0RFX0RQTVNfT046 Ci0JY2FzZSBEUk1fTU9ERV9EUE1TX1NUQU5EQlk6Ci0JY2FzZSBEUk1fTU9ERV9EUE1TX1NVU1BF TkQ6Ci0JCS8qIEVuYWJsZSB0aGUgRFBMTCAqLwotCQl0ZW1wID0gUkVHX1JFQUQobWFwLT5kcGxs KTsKLQotCQlpZiAoKHRlbXAgJiBEUExMX1ZDT19FTkFCTEUpID09IDApIHsKLQkJCS8qIFdoZW4g dW5nYXRpbmcgcG93ZXIgb2YgRFBMTCwgbmVlZHMgdG8gd2FpdCAwLjV1cwotCQkJICAgYmVmb3Jl IGVuYWJsZSB0aGUgVkNPICovCi0JCQlpZiAodGVtcCAmIE1ERkxEX1BXUl9HQVRFX0VOKSB7Ci0J CQkJdGVtcCAmPSB+TURGTERfUFdSX0dBVEVfRU47Ci0JCQkJUkVHX1dSSVRFKG1hcC0+ZHBsbCwg dGVtcCk7Ci0JCQkJLyogRklYTUVfTURGTEQgUE8gLSBjaGFuZ2UgNTAwIHRvIDEgYWZ0ZXIgUE8g Ki8KLQkJCQl1ZGVsYXkoNTAwKTsKLQkJCX0KLQotCQkJUkVHX1dSSVRFKG1hcC0+ZHBsbCwgdGVt cCk7Ci0JCQlSRUdfUkVBRChtYXAtPmRwbGwpOwotCQkJLyogRklYTUVfTURGTEQgUE8gLSBjaGFu Z2UgNTAwIHRvIDEgYWZ0ZXIgUE8gKi8KLQkJCXVkZWxheSg1MDApOwotCi0JCQlSRUdfV1JJVEUo bWFwLT5kcGxsLCB0ZW1wIHwgRFBMTF9WQ09fRU5BQkxFKTsKLQkJCVJFR19SRUFEKG1hcC0+ZHBs bCk7Ci0KLQkJCS8qKgotCQkJICogd2FpdCBmb3IgRFNJIFBMTCB0byBsb2NrCi0JCQkgKiBOT1RF OiBvbmx5IG5lZWQgdG8gcG9sbCBzdGF0dXMgb2YgcGlwZSAwIGFuZCBwaXBlIDEsCi0JCQkgKiBz aW5jZSBib3RoIE1JUEkgcGlwZXMgc2hhcmUgdGhlIHNhbWUgUExMLgotCQkJICovCi0JCQl3aGls ZSAoKHBpcGUgIT0gMikgJiYgKHRpbWVvdXQgPCAyMDAwMCkgJiYKLQkJCSAgIShSRUdfUkVBRCht YXAtPmNvbmYpICYgUElQRUNPTkZfRFNJUExMX0xPQ0spKSB7Ci0JCQkJdWRlbGF5KDE1MCk7Ci0J CQkJdGltZW91dCsrOwotCQkJfQotCQl9Ci0KLQkJLyogRW5hYmxlIHRoZSBwbGFuZSAqLwotCQl0 ZW1wID0gUkVHX1JFQUQobWFwLT5jbnRyKTsKLQkJaWYgKCh0ZW1wICYgRElTUExBWV9QTEFORV9F TkFCTEUpID09IDApIHsKLQkJCVJFR19XUklURShtYXAtPmNudHIsCi0JCQkJdGVtcCB8IERJU1BM QVlfUExBTkVfRU5BQkxFKTsKLQkJCS8qIEZsdXNoIHRoZSBwbGFuZSBjaGFuZ2VzICovCi0JCQlS RUdfV1JJVEUobWFwLT5iYXNlLCBSRUdfUkVBRChtYXAtPmJhc2UpKTsKLQkJfQotCi0JCS8qIEVu YWJsZSB0aGUgcGlwZSAqLwotCQl0ZW1wID0gUkVHX1JFQUQobWFwLT5jb25mKTsKLQkJaWYgKCh0 ZW1wICYgUElQRUFDT05GX0VOQUJMRSkgPT0gMCkgewotCQkJUkVHX1dSSVRFKG1hcC0+Y29uZiwg cGlwZWNvbmYpOwotCi0JCQkvKiBXYWl0IGZvciBmb3IgdGhlIHBpcGUgZW5hYmxlIHRvIHRha2Ug ZWZmZWN0LiAqLwotCQkJbWRmbGRXYWl0Rm9yUGlwZUVuYWJsZShkZXYsIHBpcGUpOwotCQl9Ci0K LQkJLyp3b3JrYXJvdW5kIGZvciBzaWdodGluZyAzNzQxNzAxIFJhbmRvbSBYIGJsYW5rIGRpc3Bs YXkqLwotCQkvKnBlcmZvcm0gdy9hIGluIHZpZGVvIG1vZGUgb25seSBvbiBwaXBlIEEgb3IgQyov Ci0JCWlmIChwaXBlID09IDAgfHwgcGlwZSA9PSAyKSB7Ci0JCQlSRUdfV1JJVEUobWFwLT5zdGF0 dXMsIFJFR19SRUFEKG1hcC0+c3RhdHVzKSk7Ci0JCQltc2xlZXAoMTAwKTsKLQkJCWlmIChQSVBF X1ZCTEFOS19TVEFUVVMgJiBSRUdfUkVBRChtYXAtPnN0YXR1cykpCi0JCQkJZGV2X2RiZyhkZXYt PmRldiwgIk9LIik7Ci0JCQllbHNlIHsKLQkJCQlkZXZfZGJnKGRldi0+ZGV2LCAiU1RVQ0shISEh Iik7Ci0JCQkJLypzaHV0ZG93biBjb250cm9sbGVyKi8KLQkJCQl0ZW1wID0gUkVHX1JFQUQobWFw LT5jbnRyKTsKLQkJCQlSRUdfV1JJVEUobWFwLT5jbnRyLAotCQkJCQkJdGVtcCAmIH5ESVNQTEFZ X1BMQU5FX0VOQUJMRSk7Ci0JCQkJUkVHX1dSSVRFKG1hcC0+YmFzZSwgUkVHX1JFQUQobWFwLT5i YXNlKSk7Ci0JCQkJLyptZGZsZF9kc2lfZHBpX3NodXRfZG93bihkZXYsIHBpcGUpOyovCi0JCQkJ UkVHX1dSSVRFKDB4YjA0OCwgMSk7Ci0JCQkJbXNsZWVwKDEwMCk7Ci0JCQkJdGVtcCA9IFJFR19S RUFEKG1hcC0+Y29uZik7Ci0JCQkJdGVtcCAmPSB+UElQRUFDT05GX0VOQUJMRTsKLQkJCQlSRUdf V1JJVEUobWFwLT5jb25mLCB0ZW1wKTsKLQkJCQltc2xlZXAoMTAwKTsgLyp3YWl0IGZvciBwaXBl IGRpc2FibGUqLwotCQkJCVJFR19XUklURShNSVBJX0RFVklDRV9SRUFEWV9SRUcocGlwZSksIDAp OwotCQkJCW1zbGVlcCgxMDApOwotCQkJCVJFR19XUklURSgweGIwMDQsIFJFR19SRUFEKDB4YjAw NCkpOwotCQkJCS8qIHRyeSB0byBicmluZyB0aGUgY29udHJvbGxlciBiYWNrIHVwIGFnYWluKi8K LQkJCQlSRUdfV1JJVEUoTUlQSV9ERVZJQ0VfUkVBRFlfUkVHKHBpcGUpLCAxKTsKLQkJCQl0ZW1w ID0gUkVHX1JFQUQobWFwLT5jbnRyKTsKLQkJCQlSRUdfV1JJVEUobWFwLT5jbnRyLAotCQkJCQkJ dGVtcCB8IERJU1BMQVlfUExBTkVfRU5BQkxFKTsKLQkJCQlSRUdfV1JJVEUobWFwLT5iYXNlLCBS RUdfUkVBRChtYXAtPmJhc2UpKTsKLQkJCQkvKm1kZmxkX2RzaV9kcGlfdHVybl9vbihkZXYsIHBp cGUpOyovCi0JCQkJUkVHX1dSSVRFKDB4YjA0OCwgMik7Ci0JCQkJbXNsZWVwKDEwMCk7Ci0JCQkJ dGVtcCA9IFJFR19SRUFEKG1hcC0+Y29uZik7Ci0JCQkJdGVtcCB8PSBQSVBFQUNPTkZfRU5BQkxF OwotCQkJCVJFR19XUklURShtYXAtPmNvbmYsIHRlbXApOwotCQkJfQotCQl9Ci0KLQkJZ21hX2Ny dGNfbG9hZF9sdXQoY3J0Yyk7Ci0KLQkJLyogR2l2ZSB0aGUgb3ZlcmxheSBzY2FsZXIgYSBjaGFu Y2UgdG8gZW5hYmxlCi0JCSAgIGlmIGl0J3Mgb24gdGhpcyBwaXBlICovCi0JCS8qIHBzYl9pbnRl bF9jcnRjX2RwbXNfdmlkZW8oY3J0YywgdHJ1ZSk7IFRPRE8gKi8KLQotCQlicmVhazsKLQljYXNl IERSTV9NT0RFX0RQTVNfT0ZGOgotCQkvKiBHaXZlIHRoZSBvdmVybGF5IHNjYWxlciBhIGNoYW5j ZSB0byBkaXNhYmxlCi0JCSAqIGlmIGl0J3Mgb24gdGhpcyBwaXBlICovCi0JCS8qIHBzYl9pbnRl bF9jcnRjX2RwbXNfdmlkZW8oY3J0YywgRkFMU0UpOyBUT0RPICovCi0JCWlmIChwaXBlICE9IDEp Ci0JCQltZGZsZF9kc2lfZ2VuX2ZpZm9fcmVhZHkoZGV2LAotCQkJCU1JUElfR0VOX0ZJRk9fU1RB VF9SRUcocGlwZSksCi0JCQkJSFNfQ1RSTF9GSUZPX0VNUFRZIHwgSFNfREFUQV9GSUZPX0VNUFRZ KTsKLQotCQkvKiBEaXNhYmxlIHRoZSBWR0EgcGxhbmUgdGhhdCB3ZSBuZXZlciB1c2UgKi8KLQkJ UkVHX1dSSVRFKFZHQUNOVFJMLCBWR0FfRElTUF9ESVNBQkxFKTsKLQotCQkvKiBEaXNhYmxlIGRp c3BsYXkgcGxhbmUgKi8KLQkJdGVtcCA9IFJFR19SRUFEKG1hcC0+Y250cik7Ci0JCWlmICgodGVt cCAmIERJU1BMQVlfUExBTkVfRU5BQkxFKSAhPSAwKSB7Ci0JCQlSRUdfV1JJVEUobWFwLT5jbnRy LAotCQkJCSAgdGVtcCAmIH5ESVNQTEFZX1BMQU5FX0VOQUJMRSk7Ci0JCQkvKiBGbHVzaCB0aGUg cGxhbmUgY2hhbmdlcyAqLwotCQkJUkVHX1dSSVRFKG1hcC0+YmFzZSwgUkVHX1JFQUQobWFwLT5i YXNlKSk7Ci0JCQlSRUdfUkVBRChtYXAtPmJhc2UpOwotCQl9Ci0KLQkJLyogTmV4dCwgZGlzYWJs ZSBkaXNwbGF5IHBpcGVzICovCi0JCXRlbXAgPSBSRUdfUkVBRChtYXAtPmNvbmYpOwotCQlpZiAo KHRlbXAgJiBQSVBFQUNPTkZfRU5BQkxFKSAhPSAwKSB7Ci0JCQl0ZW1wICY9IH5QSVBFQUNPTkZf RU5BQkxFOwotCQkJdGVtcCB8PSBQSVBFQ09ORl9QTEFORV9PRkYgfCBQSVBFQ09ORl9DVVJTT1Jf T0ZGOwotCQkJUkVHX1dSSVRFKG1hcC0+Y29uZiwgdGVtcCk7Ci0JCQlSRUdfUkVBRChtYXAtPmNv bmYpOwotCi0JCQkvKiBXYWl0IGZvciBmb3IgdGhlIHBpcGUgZGlzYWJsZSB0byB0YWtlIGVmZmVj dC4gKi8KLQkJCW1kZmxkV2FpdEZvclBpcGVEaXNhYmxlKGRldiwgcGlwZSk7Ci0JCX0KLQotCQl0 ZW1wID0gUkVHX1JFQUQobWFwLT5kcGxsKTsKLQkJaWYgKHRlbXAgJiBEUExMX1ZDT19FTkFCTEUp IHsKLQkJCWlmICgocGlwZSAhPSAxICYmICEoKFJFR19SRUFEKFBJUEVBQ09ORikKLQkJCQl8IFJF R19SRUFEKFBJUEVDQ09ORikpICYgUElQRUFDT05GX0VOQUJMRSkpCi0JCQkJCXx8IHBpcGUgPT0g MSkgewotCQkJCXRlbXAgJj0gfihEUExMX1ZDT19FTkFCTEUpOwotCQkJCVJFR19XUklURShtYXAt PmRwbGwsIHRlbXApOwotCQkJCVJFR19SRUFEKG1hcC0+ZHBsbCk7Ci0JCQkJLyogV2FpdCBmb3Ig dGhlIGNsb2NrcyB0byB0dXJuIG9mZi4gKi8KLQkJCQkvKiBGSVhNRV9NREZMRCBQTyBtYXkgbmVl ZCBtb3JlIGRlbGF5ICovCi0JCQkJdWRlbGF5KDUwMCk7Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0J fQotCWdtYV9wb3dlcl9lbmQoZGV2KTsKLX0KLQotCi0jZGVmaW5lIE1ERkxEX0xJTVRfRFBMTF8x OQkgICAgMAotI2RlZmluZSBNREZMRF9MSU1UX0RQTExfMjUJICAgIDEKLSNkZWZpbmUgTURGTERf TElNVF9EUExMXzgzCSAgICAyCi0jZGVmaW5lIE1ERkxEX0xJTVRfRFBMTF8xMDAJICAgIDMKLSNk ZWZpbmUgTURGTERfTElNVF9EU0lQTExfMTkJICAgIDQKLSNkZWZpbmUgTURGTERfTElNVF9EU0lQ TExfMjUJICAgIDUKLSNkZWZpbmUgTURGTERfTElNVF9EU0lQTExfODMJICAgIDYKLSNkZWZpbmUg TURGTERfTElNVF9EU0lQTExfMTAwCSAgICA3Ci0KLSNkZWZpbmUgTURGTERfRE9UX01JTgkJICAx OTc1MAotI2RlZmluZSBNREZMRF9ET1RfTUFYCQkgIDEyMDAwMAotI2RlZmluZSBNREZMRF9EUExM X01fTUlOXzE5CSAgICAxMTMKLSNkZWZpbmUgTURGTERfRFBMTF9NX01BWF8xOQkgICAgMTU1Ci0j ZGVmaW5lIE1ERkxEX0RQTExfUDFfTUlOXzE5CSAgICAyCi0jZGVmaW5lIE1ERkxEX0RQTExfUDFf TUFYXzE5CSAgICAxMAotI2RlZmluZSBNREZMRF9EUExMX01fTUlOXzI1CSAgICAxMDEKLSNkZWZp bmUgTURGTERfRFBMTF9NX01BWF8yNQkgICAgMTMwCi0jZGVmaW5lIE1ERkxEX0RQTExfUDFfTUlO XzI1CSAgICAyCi0jZGVmaW5lIE1ERkxEX0RQTExfUDFfTUFYXzI1CSAgICAxMAotI2RlZmluZSBN REZMRF9EUExMX01fTUlOXzgzCSAgICA2NAotI2RlZmluZSBNREZMRF9EUExMX01fTUFYXzgzCSAg ICA2NAotI2RlZmluZSBNREZMRF9EUExMX1AxX01JTl84MwkgICAgMgotI2RlZmluZSBNREZMRF9E UExMX1AxX01BWF84MwkgICAgMgotI2RlZmluZSBNREZMRF9EUExMX01fTUlOXzEwMAkgICAgNjQK LSNkZWZpbmUgTURGTERfRFBMTF9NX01BWF8xMDAJICAgIDY0Ci0jZGVmaW5lIE1ERkxEX0RQTExf UDFfTUlOXzEwMAkgICAgMgotI2RlZmluZSBNREZMRF9EUExMX1AxX01BWF8xMDAJICAgIDIKLSNk ZWZpbmUgTURGTERfRFNJUExMX01fTUlOXzE5CSAgICAxMzEKLSNkZWZpbmUgTURGTERfRFNJUExM X01fTUFYXzE5CSAgICAxNzUKLSNkZWZpbmUgTURGTERfRFNJUExMX1AxX01JTl8xOQkgICAgMwot I2RlZmluZSBNREZMRF9EU0lQTExfUDFfTUFYXzE5CSAgICA4Ci0jZGVmaW5lIE1ERkxEX0RTSVBM TF9NX01JTl8yNQkgICAgOTcKLSNkZWZpbmUgTURGTERfRFNJUExMX01fTUFYXzI1CSAgICAxNDAK LSNkZWZpbmUgTURGTERfRFNJUExMX1AxX01JTl8yNQkgICAgMwotI2RlZmluZSBNREZMRF9EU0lQ TExfUDFfTUFYXzI1CSAgICA5Ci0jZGVmaW5lIE1ERkxEX0RTSVBMTF9NX01JTl84MwkgICAgMzMK LSNkZWZpbmUgTURGTERfRFNJUExMX01fTUFYXzgzCSAgICA5MgotI2RlZmluZSBNREZMRF9EU0lQ TExfUDFfTUlOXzgzCSAgICAyCi0jZGVmaW5lIE1ERkxEX0RTSVBMTF9QMV9NQVhfODMJICAgIDMK LSNkZWZpbmUgTURGTERfRFNJUExMX01fTUlOXzEwMAkgICAgOTcKLSNkZWZpbmUgTURGTERfRFNJ UExMX01fTUFYXzEwMAkgICAgMTQwCi0jZGVmaW5lIE1ERkxEX0RTSVBMTF9QMV9NSU5fMTAwCSAg ICAzCi0jZGVmaW5lIE1ERkxEX0RTSVBMTF9QMV9NQVhfMTAwCSAgICA5Ci0KLXN0YXRpYyBjb25z dCBzdHJ1Y3QgbXJzdF9saW1pdF90IG1kZmxkX2xpbWl0c1tdID0gewotCXsJCQkvKiBNREZMRF9M SU1UX0RQTExfMTkgKi8KLQkgLmRvdCA9IHsubWluID0gTURGTERfRE9UX01JTiwgLm1heCA9IE1E RkxEX0RPVF9NQVh9LAotCSAubSA9IHsubWluID0gTURGTERfRFBMTF9NX01JTl8xOSwgLm1heCA9 IE1ERkxEX0RQTExfTV9NQVhfMTl9LAotCSAucDEgPSB7Lm1pbiA9IE1ERkxEX0RQTExfUDFfTUlO XzE5LCAubWF4ID0gTURGTERfRFBMTF9QMV9NQVhfMTl9LAotCSB9LAotCXsJCQkvKiBNREZMRF9M SU1UX0RQTExfMjUgKi8KLQkgLmRvdCA9IHsubWluID0gTURGTERfRE9UX01JTiwgLm1heCA9IE1E RkxEX0RPVF9NQVh9LAotCSAubSA9IHsubWluID0gTURGTERfRFBMTF9NX01JTl8yNSwgLm1heCA9 IE1ERkxEX0RQTExfTV9NQVhfMjV9LAotCSAucDEgPSB7Lm1pbiA9IE1ERkxEX0RQTExfUDFfTUlO XzI1LCAubWF4ID0gTURGTERfRFBMTF9QMV9NQVhfMjV9LAotCSB9LAotCXsJCQkvKiBNREZMRF9M SU1UX0RQTExfODMgKi8KLQkgLmRvdCA9IHsubWluID0gTURGTERfRE9UX01JTiwgLm1heCA9IE1E RkxEX0RPVF9NQVh9LAotCSAubSA9IHsubWluID0gTURGTERfRFBMTF9NX01JTl84MywgLm1heCA9 IE1ERkxEX0RQTExfTV9NQVhfODN9LAotCSAucDEgPSB7Lm1pbiA9IE1ERkxEX0RQTExfUDFfTUlO XzgzLCAubWF4ID0gTURGTERfRFBMTF9QMV9NQVhfODN9LAotCSB9LAotCXsJCQkvKiBNREZMRF9M SU1UX0RQTExfMTAwICovCi0JIC5kb3QgPSB7Lm1pbiA9IE1ERkxEX0RPVF9NSU4sIC5tYXggPSBN REZMRF9ET1RfTUFYfSwKLQkgLm0gPSB7Lm1pbiA9IE1ERkxEX0RQTExfTV9NSU5fMTAwLCAubWF4 ID0gTURGTERfRFBMTF9NX01BWF8xMDB9LAotCSAucDEgPSB7Lm1pbiA9IE1ERkxEX0RQTExfUDFf TUlOXzEwMCwgLm1heCA9IE1ERkxEX0RQTExfUDFfTUFYXzEwMH0sCi0JIH0sCi0JewkJCS8qIE1E RkxEX0xJTVRfRFNJUExMXzE5ICovCi0JIC5kb3QgPSB7Lm1pbiA9IE1ERkxEX0RPVF9NSU4sIC5t YXggPSBNREZMRF9ET1RfTUFYfSwKLQkgLm0gPSB7Lm1pbiA9IE1ERkxEX0RTSVBMTF9NX01JTl8x OSwgLm1heCA9IE1ERkxEX0RTSVBMTF9NX01BWF8xOX0sCi0JIC5wMSA9IHsubWluID0gTURGTERf RFNJUExMX1AxX01JTl8xOSwgLm1heCA9IE1ERkxEX0RTSVBMTF9QMV9NQVhfMTl9LAotCSB9LAot CXsJCQkvKiBNREZMRF9MSU1UX0RTSVBMTF8yNSAqLwotCSAuZG90ID0gey5taW4gPSBNREZMRF9E T1RfTUlOLCAubWF4ID0gTURGTERfRE9UX01BWH0sCi0JIC5tID0gey5taW4gPSBNREZMRF9EU0lQ TExfTV9NSU5fMjUsIC5tYXggPSBNREZMRF9EU0lQTExfTV9NQVhfMjV9LAotCSAucDEgPSB7Lm1p biA9IE1ERkxEX0RTSVBMTF9QMV9NSU5fMjUsIC5tYXggPSBNREZMRF9EU0lQTExfUDFfTUFYXzI1 fSwKLQkgfSwKLQl7CQkJLyogTURGTERfTElNVF9EU0lQTExfODMgKi8KLQkgLmRvdCA9IHsubWlu ID0gTURGTERfRE9UX01JTiwgLm1heCA9IE1ERkxEX0RPVF9NQVh9LAotCSAubSA9IHsubWluID0g TURGTERfRFNJUExMX01fTUlOXzgzLCAubWF4ID0gTURGTERfRFNJUExMX01fTUFYXzgzfSwKLQkg LnAxID0gey5taW4gPSBNREZMRF9EU0lQTExfUDFfTUlOXzgzLCAubWF4ID0gTURGTERfRFNJUExM X1AxX01BWF84M30sCi0JIH0sCi0JewkJCS8qIE1ERkxEX0xJTVRfRFNJUExMXzEwMCAqLwotCSAu ZG90ID0gey5taW4gPSBNREZMRF9ET1RfTUlOLCAubWF4ID0gTURGTERfRE9UX01BWH0sCi0JIC5t ID0gey5taW4gPSBNREZMRF9EU0lQTExfTV9NSU5fMTAwLCAubWF4ID0gTURGTERfRFNJUExMX01f TUFYXzEwMH0sCi0JIC5wMSA9IHsubWluID0gTURGTERfRFNJUExMX1AxX01JTl8xMDAsIC5tYXgg PSBNREZMRF9EU0lQTExfUDFfTUFYXzEwMH0sCi0JIH0sCi19OwotCi0jZGVmaW5lIE1ERkxEX01f TUlOCSAgICAyMQotI2RlZmluZSBNREZMRF9NX01BWAkgICAgMTgwCi1zdGF0aWMgY29uc3QgdTMy IG1kZmxkX21fY29udmVydHNbXSA9IHsKLS8qIE0gY29uZmlndXJhdGlvbiB0YWJsZSBmcm9tIDkt Yml0IExGU1IgdGFibGUgKi8KLQkyMjQsIDM2OCwgNDQwLCAyMjAsIDM2NiwgNDM5LCAyMTksIDM2 NSwgMTgyLCAzNDcsIC8qIDIxIC0gMzAgKi8KLQkxNzMsIDM0MiwgMTcxLCA4NSwgMjk4LCAxNDks IDc0LCAzNywgMTgsIDI2NSwgICAvKiAzMSAtIDQwICovCi0JMzg4LCAxOTQsIDM1MywgNDMyLCAy MTYsIDEwOCwgMzEwLCAxNTUsIDMzMywgMTY2LCAvKiA0MSAtIDUwICovCi0JODMsIDQxLCAyNzYs IDEzOCwgMzI1LCAxNjIsIDMzNywgMTY4LCAzNDAsIDE3MCwgLyogNTEgLSA2MCAqLwotCTM0MSwg NDI2LCA0NjksIDIzNCwgMzczLCA0NDIsIDIyMSwgMTEwLCAzMTEsIDQxMSwgLyogNjEgLSA3MCAq LwotCTQ2MSwgNDg2LCAyNDMsIDM3NywgMTg4LCAzNTAsIDE3NSwgMzQzLCA0MjcsIDIxMywgLyog NzEgLSA4MCAqLwotCTEwNiwgNTMsIDI4MiwgMzk3LCAzNTQsIDIyNywgMTEzLCA1NiwgMjg0LCAx NDIsIC8qIDgxIC0gOTAgKi8KLQk3MSwgMzUsIDI3MywgMTM2LCAzMjQsIDQxOCwgNDY1LCA0ODgs IDUwMCwgNTA2LCAvKiA5MSAtIDEwMCAqLwotCTI1MywgMTI2LCA2MywgMjg3LCAzOTksIDQ1NSwg NDgzLCAyNDEsIDM3NiwgNDQ0LCAvKiAxMDEgLSAxMTAgKi8KLQk0NzgsIDQ5NSwgNTAzLCAyNTEs IDM4MSwgNDQ2LCA0NzksIDIzOSwgMzc1LCA0NDMsIC8qIDExMSAtIDEyMCAqLwotCTQ3NywgMjM4 LCAxMTksIDMxNSwgMTU3LCA3OCwgMjk1LCAxNDcsIDMyOSwgNDIwLCAvKiAxMjEgLSAxMzAgKi8K LQkyMTAsIDEwNSwgMzA4LCAxNTQsIDc3LCAzOCwgMjc1LCAxMzcsIDY4LCAyOTAsIC8qIDEzMSAt IDE0MCAqLwotCTE0NSwgMzI4LCAxNjQsIDgyLCAyOTcsIDQwNCwgNDU4LCA0ODUsIDQ5OCwgMjQ5 LCAvKiAxNDEgLSAxNTAgKi8KLQkzODAsIDE5MCwgMzUxLCA0MzEsIDQ3MSwgMjM1LCAxMTcsIDMx NCwgNDEzLCAyMDYsIC8qIDE1MSAtIDE2MCAqLwotCTEwMywgNTEsIDI1LCAxMiwgMjYyLCAzODcs IDE5MywgOTYsIDQ4LCAyODAsIC8qIDE2MSAtIDE3MCAqLwotCTM5NiwgMTk4LCA5OSwgMzA1LCAx NTIsIDc2LCAyOTQsIDQwMywgNDU3LCAyMjgsIC8qIDE3MSAtIDE4MCAqLwotfTsKLQotc3RhdGlj IGNvbnN0IHN0cnVjdCBtcnN0X2xpbWl0X3QgKm1kZmxkX2xpbWl0KHN0cnVjdCBkcm1fY3J0YyAq Y3J0YykKLXsKLQljb25zdCBzdHJ1Y3QgbXJzdF9saW1pdF90ICpsaW1pdCA9IE5VTEw7Ci0Jc3Ry dWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKLQlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRl ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0KLQlpZiAoZ21hX3BpcGVfaGFzX3R5cGUo Y3J0YywgSU5URUxfT1VUUFVUX01JUEkpCi0JICAgIHx8IGdtYV9waXBlX2hhc190eXBlKGNydGMs IElOVEVMX09VVFBVVF9NSVBJMikpIHsKLQkJaWYgKChrc2VsID09IEtTRUxfQ1JZU1RBTF8xOSkg fHwgKGtzZWwgPT0gS1NFTF9CWVBBU1NfMTkpKQotCQkJbGltaXQgPSAmbWRmbGRfbGltaXRzW01E RkxEX0xJTVRfRFNJUExMXzE5XTsKLQkJZWxzZSBpZiAoa3NlbCA9PSBLU0VMX0JZUEFTU18yNSkK LQkJCWxpbWl0ID0gJm1kZmxkX2xpbWl0c1tNREZMRF9MSU1UX0RTSVBMTF8yNV07Ci0JCWVsc2Ug aWYgKChrc2VsID09IEtTRUxfQllQQVNTXzgzXzEwMCkgJiYKLQkJCQkoZGV2X3ByaXYtPmNvcmVf ZnJlcSA9PSAxNjYpKQotCQkJbGltaXQgPSAmbWRmbGRfbGltaXRzW01ERkxEX0xJTVRfRFNJUExM XzgzXTsKLQkJZWxzZSBpZiAoKGtzZWwgPT0gS1NFTF9CWVBBU1NfODNfMTAwKSAmJgotCQkJIChk ZXZfcHJpdi0+Y29yZV9mcmVxID09IDEwMCB8fAotCQkJCWRldl9wcml2LT5jb3JlX2ZyZXEgPT0g MjAwKSkKLQkJCWxpbWl0ID0gJm1kZmxkX2xpbWl0c1tNREZMRF9MSU1UX0RTSVBMTF8xMDBdOwot CX0gZWxzZSBpZiAoZ21hX3BpcGVfaGFzX3R5cGUoY3J0YywgSU5URUxfT1VUUFVUX0hETUkpKSB7 Ci0JCWlmICgoa3NlbCA9PSBLU0VMX0NSWVNUQUxfMTkpIHx8IChrc2VsID09IEtTRUxfQllQQVNT XzE5KSkKLQkJCWxpbWl0ID0gJm1kZmxkX2xpbWl0c1tNREZMRF9MSU1UX0RQTExfMTldOwotCQll bHNlIGlmIChrc2VsID09IEtTRUxfQllQQVNTXzI1KQotCQkJbGltaXQgPSAmbWRmbGRfbGltaXRz W01ERkxEX0xJTVRfRFBMTF8yNV07Ci0JCWVsc2UgaWYgKChrc2VsID09IEtTRUxfQllQQVNTXzgz XzEwMCkgJiYKLQkJCQkoZGV2X3ByaXYtPmNvcmVfZnJlcSA9PSAxNjYpKQotCQkJbGltaXQgPSAm bWRmbGRfbGltaXRzW01ERkxEX0xJTVRfRFBMTF84M107Ci0JCWVsc2UgaWYgKChrc2VsID09IEtT RUxfQllQQVNTXzgzXzEwMCkgJiYKLQkJCQkgKGRldl9wcml2LT5jb3JlX2ZyZXEgPT0gMTAwIHx8 Ci0JCQkJIGRldl9wcml2LT5jb3JlX2ZyZXEgPT0gMjAwKSkKLQkJCWxpbWl0ID0gJm1kZmxkX2xp bWl0c1tNREZMRF9MSU1UX0RQTExfMTAwXTsKLQl9IGVsc2UgewotCQlsaW1pdCA9IE5VTEw7Ci0J CWRldl9kYmcoZGV2LT5kZXYsICJtZGZsZF9saW1pdCBXcm9uZyBkaXNwbGF5IHR5cGUuXG4iKTsK LQl9Ci0KLQlyZXR1cm4gbGltaXQ7Ci19Ci0KLS8qKiBEZXJpdmUgdGhlIHBpeGVsIGNsb2NrIGZv ciB0aGUgZ2l2ZW4gcmVmY2xrIGFuZCBkaXZpc29ycyBmb3IgOHh4IGNoaXBzLiAqLwotc3RhdGlj IHZvaWQgbWRmbGRfY2xvY2soaW50IHJlZmNsaywgc3RydWN0IG1yc3RfY2xvY2tfdCAqY2xvY2sp Ci17Ci0JY2xvY2stPmRvdCA9IChyZWZjbGsgKiBjbG9jay0+bSkgLyBjbG9jay0+cDE7Ci19Ci0K LS8qCi0gKiBSZXR1cm5zIGEgc2V0IG9mIGRpdmlzb3JzIGZvciB0aGUgZGVzaXJlZCB0YXJnZXQg Y2xvY2sgd2l0aCB0aGUgZ2l2ZW4gcmVmY2xrLAotICogb3IgRkFMU0UuICBEaXZpc29yIHZhbHVl cyBhcmUgdGhlIGFjdHVhbCBkaXZpc29ycyBmb3IKLSAqLwotc3RhdGljIGJvb2wKLW1kZmxkRmlu ZEJlc3RQTEwoc3RydWN0IGRybV9jcnRjICpjcnRjLCBpbnQgdGFyZ2V0LCBpbnQgcmVmY2xrLAot CQlzdHJ1Y3QgbXJzdF9jbG9ja190ICpiZXN0X2Nsb2NrKQotewotCXN0cnVjdCBtcnN0X2Nsb2Nr X3QgY2xvY2s7Ci0JY29uc3Qgc3RydWN0IG1yc3RfbGltaXRfdCAqbGltaXQgPSBtZGZsZF9saW1p dChjcnRjKTsKLQlpbnQgZXJyID0gdGFyZ2V0OwotCi0JbWVtc2V0KGJlc3RfY2xvY2ssIDAsIHNp emVvZigqYmVzdF9jbG9jaykpOwotCi0JZm9yIChjbG9jay5tID0gbGltaXQtPm0ubWluOyBjbG9j ay5tIDw9IGxpbWl0LT5tLm1heDsgY2xvY2subSsrKSB7Ci0JCWZvciAoY2xvY2sucDEgPSBsaW1p dC0+cDEubWluOyBjbG9jay5wMSA8PSBsaW1pdC0+cDEubWF4OwotCQkgICAgIGNsb2NrLnAxKysp IHsKLQkJCWludCB0aGlzX2VycjsKLQotCQkJbWRmbGRfY2xvY2socmVmY2xrLCAmY2xvY2spOwot Ci0JCQl0aGlzX2VyciA9IGFicyhjbG9jay5kb3QgLSB0YXJnZXQpOwotCQkJaWYgKHRoaXNfZXJy IDwgZXJyKSB7Ci0JCQkJKmJlc3RfY2xvY2sgPSBjbG9jazsKLQkJCQllcnIgPSB0aGlzX2VycjsK LQkJCX0KLQkJfQotCX0KLQlyZXR1cm4gZXJyICE9IHRhcmdldDsKLX0KLQotc3RhdGljIGludCBt ZGZsZF9jcnRjX21vZGVfc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKLQkJCSAgICAgIHN0cnVj dCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAotCQkJICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21v ZGUgKmFkanVzdGVkX21vZGUsCi0JCQkgICAgICBpbnQgeCwgaW50IHksCi0JCQkgICAgICBzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICpvbGRfZmIpCi17Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9 IGNydGMtPmRldjsKLQlzdHJ1Y3QgZ21hX2NydGMgKmdtYV9jcnRjID0gdG9fZ21hX2NydGMoY3J0 Yyk7Ci0Jc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRl OwotCWludCBwaXBlID0gZ21hX2NydGMtPnBpcGU7Ci0JY29uc3Qgc3RydWN0IHBzYl9vZmZzZXQg Km1hcCA9ICZkZXZfcHJpdi0+cmVnbWFwW3BpcGVdOwotCWludCByZWZjbGsgPSAwOwotCWludCBj bGtfbiA9IDAsIGNsa19wMiA9IDAsIGNsa19ieXRlID0gMSwgY2xrID0gMCwgbV9jb252ID0gMCwK LQkJCQkJCQkJY2xrX3RtcCA9IDA7Ci0Jc3RydWN0IG1yc3RfY2xvY2tfdCBjbG9jazsKLQlib29s IG9rOwotCXUzMiBkcGxsID0gMCwgZnAgPSAwOwotCWJvb2wgaXNfbWlwaSA9IGZhbHNlLCBpc19t aXBpMiA9IGZhbHNlLCBpc19oZG1pID0gZmFsc2U7Ci0Jc3RydWN0IGRybV9tb2RlX2NvbmZpZyAq bW9kZV9jb25maWcgPSAmZGV2LT5tb2RlX2NvbmZpZzsKLQlzdHJ1Y3QgZ21hX2VuY29kZXIgKmdt YV9lbmNvZGVyID0gTlVMTDsKLQl1aW50NjRfdCBzY2FsaW5nVHlwZSA9IERSTV9NT0RFX1NDQUxF X0ZVTExTQ1JFRU47Ci0Jc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwotCXN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3I7Ci0JaW50IHRpbWVvdXQgPSAwOwotCWludCByZXQ7Ci0KLQlk ZXZfZGJnKGRldi0+ZGV2LCAicGlwZSA9IDB4JXhcbiIsIHBpcGUpOwotCi0JcmV0ID0gY2hlY2tf ZmIoY3J0Yy0+cHJpbWFyeS0+ZmIpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlkZXZf ZGJnKGRldi0+ZGV2LCAiYWRqdXN0ZWRfaGRpc3BsYXkgPSAlZFxuIiwKLQkJIGFkanVzdGVkX21v ZGUtPmhkaXNwbGF5KTsKLQlkZXZfZGJnKGRldi0+ZGV2LCAiYWRqdXN0ZWRfdmRpc3BsYXkgPSAl ZFxuIiwKLQkJIGFkanVzdGVkX21vZGUtPnZkaXNwbGF5KTsKLQlkZXZfZGJnKGRldi0+ZGV2LCAi YWRqdXN0ZWRfaHN5bmNfc3RhcnQgPSAlZFxuIiwKLQkJIGFkanVzdGVkX21vZGUtPmhzeW5jX3N0 YXJ0KTsKLQlkZXZfZGJnKGRldi0+ZGV2LCAiYWRqdXN0ZWRfaHN5bmNfZW5kID0gJWRcbiIsCi0J CSBhZGp1c3RlZF9tb2RlLT5oc3luY19lbmQpOwotCWRldl9kYmcoZGV2LT5kZXYsICJhZGp1c3Rl ZF9odG90YWwgPSAlZFxuIiwKLQkJIGFkanVzdGVkX21vZGUtPmh0b3RhbCk7Ci0JZGV2X2RiZyhk ZXYtPmRldiwgImFkanVzdGVkX3ZzeW5jX3N0YXJ0ID0gJWRcbiIsCi0JCSBhZGp1c3RlZF9tb2Rl LT52c3luY19zdGFydCk7Ci0JZGV2X2RiZyhkZXYtPmRldiwgImFkanVzdGVkX3ZzeW5jX2VuZCA9 ICVkXG4iLAotCQkgYWRqdXN0ZWRfbW9kZS0+dnN5bmNfZW5kKTsKLQlkZXZfZGJnKGRldi0+ZGV2 LCAiYWRqdXN0ZWRfdnRvdGFsID0gJWRcbiIsCi0JCSBhZGp1c3RlZF9tb2RlLT52dG90YWwpOwot CWRldl9kYmcoZGV2LT5kZXYsICJhZGp1c3RlZF9jbG9jayA9ICVkXG4iLAotCQkgYWRqdXN0ZWRf bW9kZS0+Y2xvY2spOwotCWRldl9kYmcoZGV2LT5kZXYsICJoZGlzcGxheSA9ICVkXG4iLAotCQkg bW9kZS0+aGRpc3BsYXkpOwotCWRldl9kYmcoZGV2LT5kZXYsICJ2ZGlzcGxheSA9ICVkXG4iLAot CQkgbW9kZS0+dmRpc3BsYXkpOwotCi0JaWYgKCFnbWFfcG93ZXJfYmVnaW4oZGV2LCB0cnVlKSkK LQkJcmV0dXJuIDA7Ci0KLQltZW1jcHkoJmdtYV9jcnRjLT5zYXZlZF9tb2RlLCBtb2RlLAotCQkJ CQlzaXplb2Yoc3RydWN0IGRybV9kaXNwbGF5X21vZGUpKTsKLQltZW1jcHkoJmdtYV9jcnRjLT5z YXZlZF9hZGp1c3RlZF9tb2RlLCBhZGp1c3RlZF9tb2RlLAotCQkJCQlzaXplb2Yoc3RydWN0IGRy bV9kaXNwbGF5X21vZGUpKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubmVjdG9yLCAmbW9k ZV9jb25maWctPmNvbm5lY3Rvcl9saXN0LCBoZWFkKSB7Ci0JCWVuY29kZXIgPSBjb25uZWN0b3It PmVuY29kZXI7Ci0JCWlmICghZW5jb2RlcikKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChlbmNvZGVy LT5jcnRjICE9IGNydGMpCi0JCQljb250aW51ZTsKLQotCQlnbWFfZW5jb2RlciA9IGdtYV9hdHRh Y2hlZF9lbmNvZGVyKGNvbm5lY3Rvcik7Ci0KLQkJc3dpdGNoIChnbWFfZW5jb2Rlci0+dHlwZSkg ewotCQljYXNlIElOVEVMX09VVFBVVF9NSVBJOgotCQkJaXNfbWlwaSA9IHRydWU7Ci0JCQlicmVh azsKLQkJY2FzZSBJTlRFTF9PVVRQVVRfTUlQSTI6Ci0JCQlpc19taXBpMiA9IHRydWU7Ci0JCQli cmVhazsKLQkJY2FzZSBJTlRFTF9PVVRQVVRfSERNSToKLQkJCWlzX2hkbWkgPSB0cnVlOwotCQkJ YnJlYWs7Ci0JCX0KLQl9Ci0KLQkvKiBEaXNhYmxlIHRoZSBWR0EgcGxhbmUgdGhhdCB3ZSBuZXZl ciB1c2UgKi8KLQlSRUdfV1JJVEUoVkdBQ05UUkwsIFZHQV9ESVNQX0RJU0FCTEUpOwotCi0JLyog RGlzYWJsZSB0aGUgcGFuZWwgZml0dGVyIGlmIGl0IHdhcyBvbiBvdXIgcGlwZSAqLwotCWlmIChw c2JfaW50ZWxfcGFuZWxfZml0dGVyX3BpcGUoZGV2KSA9PSBwaXBlKQotCQlSRUdfV1JJVEUoUEZJ VF9DT05UUk9MLCAwKTsKLQotCS8qIHBpcGVzcmMgYW5kIGRzcHNpemUgY29udHJvbCB0aGUgc2l6 ZSB0aGF0IGlzIHNjYWxlZCBmcm9tLAotCSAqIHdoaWNoIHNob3VsZCBhbHdheXMgYmUgdGhlIHVz ZXIncyByZXF1ZXN0ZWQgc2l6ZS4KLQkgKi8KLQlpZiAocGlwZSA9PSAxKSB7Ci0JCS8qIEZJWE1F OiBUbyBtYWtlIEhETUkgZGlzcGxheSB3aXRoIDg2NHg0ODAgKFRQTyksIDQ4MHg4NjQKLQkJICog KFBZUikgb3IgNDgweDg1NCAoVE1EKSwgc2V0IHRoZSBzcHJpdGUgd2lkdGgvaGVpZ2h0IGFuZAot CQkgKiBzb3VjZSBpbWFnZSBzaXplIHJlZ2lzdGVycyB3aXRoIHRoZSBhZGp1c3RlZCBtb2RlIGZv cgotCQkgKiBwaXBlIEIuCi0JCSAqLwotCi0JCS8qCi0JCSAqIFRoZSBkZWZpbmVkIHNwcml0ZSBy ZWN0YW5nbGUgbXVzdCBhbHdheXMgYmUgY29tcGxldGVseQotCQkgKiBjb250YWluZWQgd2l0aGlu IHRoZSBkaXNwbGF5YWJsZSBhcmVhIG9mIHRoZSBzY3JlZW4gaW1hZ2UKLQkJICogKGZyYW1lIGJ1 ZmZlcikuCi0JCSAqLwotCQlSRUdfV1JJVEUobWFwLT5zaXplLCAoKG1pbihtb2RlLT5jcnRjX3Zk aXNwbGF5LCBhZGp1c3RlZF9tb2RlLT5jcnRjX3ZkaXNwbGF5KSAtIDEpIDw8IDE2KQotCQkJCXwg KG1pbihtb2RlLT5jcnRjX2hkaXNwbGF5LCBhZGp1c3RlZF9tb2RlLT5jcnRjX2hkaXNwbGF5KSAt IDEpKTsKLQkJLyogU2V0IHRoZSBDUlRDIHdpdGggZW5jb2RlciBtb2RlLiAqLwotCQlSRUdfV1JJ VEUobWFwLT5zcmMsICgobW9kZS0+Y3J0Y19oZGlzcGxheSAtIDEpIDw8IDE2KQotCQkJCSB8ICht b2RlLT5jcnRjX3ZkaXNwbGF5IC0gMSkpOwotCX0gZWxzZSB7Ci0JCVJFR19XUklURShtYXAtPnNp emUsCi0JCQkJKChtb2RlLT5jcnRjX3ZkaXNwbGF5IC0gMSkgPDwgMTYpIHwKLQkJCQkJCShtb2Rl LT5jcnRjX2hkaXNwbGF5IC0gMSkpOwotCQlSRUdfV1JJVEUobWFwLT5zcmMsCi0JCQkJKChtb2Rl LT5jcnRjX2hkaXNwbGF5IC0gMSkgPDwgMTYpIHwKLQkJCQkJCShtb2RlLT5jcnRjX3ZkaXNwbGF5 IC0gMSkpOwotCX0KLQotCVJFR19XUklURShtYXAtPnBvcywgMCk7Ci0KLQlpZiAoZ21hX2VuY29k ZXIpCi0JCWRybV9vYmplY3RfcHJvcGVydHlfZ2V0X3ZhbHVlKCZjb25uZWN0b3ItPmJhc2UsCi0J CQlkZXYtPm1vZGVfY29uZmlnLnNjYWxpbmdfbW9kZV9wcm9wZXJ0eSwgJnNjYWxpbmdUeXBlKTsK LQotCWlmIChzY2FsaW5nVHlwZSA9PSBEUk1fTU9ERV9TQ0FMRV9OT19TQ0FMRSkgewotCQkvKiBN ZWRmaWVsZCBkb2Vzbid0IGhhdmUgcmVnaXN0ZXIgc3VwcG9ydCBmb3IgY2VudGVyaW5nIHNvIHdl Ci0JCSAqIG5lZWQgdG8gbWVzcyB3aXRoIHRoZSBoL3ZibGFuayBhbmQgaC92c3luYyBzdGFydCBh bmQgZW5kcwotCQkgKiB0byBnZXQgY2VudGVyaW5nCi0JCSAqLwotCQlpbnQgb2Zmc2V0WCA9IDAs IG9mZnNldFkgPSAwOwotCi0JCW9mZnNldFggPSAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxh eSAtCi0JCQkJCW1vZGUtPmNydGNfaGRpc3BsYXkpIC8gMjsKLQkJb2Zmc2V0WSA9IChhZGp1c3Rl ZF9tb2RlLT5jcnRjX3ZkaXNwbGF5IC0KLQkJCQkJbW9kZS0+Y3J0Y192ZGlzcGxheSkgLyAyOwot Ci0JCVJFR19XUklURShtYXAtPmh0b3RhbCwgKG1vZGUtPmNydGNfaGRpc3BsYXkgLSAxKSB8Ci0J CQkoKGFkanVzdGVkX21vZGUtPmNydGNfaHRvdGFsIC0gMSkgPDwgMTYpKTsKLQkJUkVHX1dSSVRF KG1hcC0+dnRvdGFsLCAobW9kZS0+Y3J0Y192ZGlzcGxheSAtIDEpIHwKLQkJCSgoYWRqdXN0ZWRf bW9kZS0+Y3J0Y192dG90YWwgLSAxKSA8PCAxNikpOwotCQlSRUdfV1JJVEUobWFwLT5oYmxhbmss IChhZGp1c3RlZF9tb2RlLT5jcnRjX2hibGFua19zdGFydCAtCi0JCQkJCQkJCW9mZnNldFggLSAx KSB8Ci0JCQkoKGFkanVzdGVkX21vZGUtPmNydGNfaGJsYW5rX2VuZCAtIG9mZnNldFggLSAxKSA8 PCAxNikpOwotCQlSRUdfV1JJVEUobWFwLT5oc3luYywgKGFkanVzdGVkX21vZGUtPmNydGNfaHN5 bmNfc3RhcnQgLQotCQkJCQkJCQlvZmZzZXRYIC0gMSkgfAotCQkJKChhZGp1c3RlZF9tb2RlLT5j cnRjX2hzeW5jX2VuZCAtIG9mZnNldFggLSAxKSA8PCAxNikpOwotCQlSRUdfV1JJVEUobWFwLT52 YmxhbmssIChhZGp1c3RlZF9tb2RlLT5jcnRjX3ZibGFua19zdGFydCAtCi0JCQkJCQkJCW9mZnNl dFkgLSAxKSB8Ci0JCQkoKGFkanVzdGVkX21vZGUtPmNydGNfdmJsYW5rX2VuZCAtIG9mZnNldFkg LSAxKSA8PCAxNikpOwotCQlSRUdfV1JJVEUobWFwLT52c3luYywgKGFkanVzdGVkX21vZGUtPmNy dGNfdnN5bmNfc3RhcnQgLQotCQkJCQkJCQlvZmZzZXRZIC0gMSkgfAotCQkJKChhZGp1c3RlZF9t b2RlLT5jcnRjX3ZzeW5jX2VuZCAtIG9mZnNldFkgLSAxKSA8PCAxNikpOwotCX0gZWxzZSB7Ci0J CVJFR19XUklURShtYXAtPmh0b3RhbCwgKGFkanVzdGVkX21vZGUtPmNydGNfaGRpc3BsYXkgLSAx KSB8Ci0JCQkoKGFkanVzdGVkX21vZGUtPmNydGNfaHRvdGFsIC0gMSkgPDwgMTYpKTsKLQkJUkVH X1dSSVRFKG1hcC0+dnRvdGFsLCAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSAtIDEpIHwK LQkJCSgoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192dG90YWwgLSAxKSA8PCAxNikpOwotCQlSRUdfV1JJ VEUobWFwLT5oYmxhbmssIChhZGp1c3RlZF9tb2RlLT5jcnRjX2hibGFua19zdGFydCAtIDEpIHwK LQkJCSgoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oYmxhbmtfZW5kIC0gMSkgPDwgMTYpKTsKLQkJUkVH X1dSSVRFKG1hcC0+aHN5bmMsIChhZGp1c3RlZF9tb2RlLT5jcnRjX2hzeW5jX3N0YXJ0IC0gMSkg fAotCQkJKChhZGp1c3RlZF9tb2RlLT5jcnRjX2hzeW5jX2VuZCAtIDEpIDw8IDE2KSk7Ci0JCVJF R19XUklURShtYXAtPnZibGFuaywgKGFkanVzdGVkX21vZGUtPmNydGNfdmJsYW5rX3N0YXJ0IC0g MSkgfAotCQkJKChhZGp1c3RlZF9tb2RlLT5jcnRjX3ZibGFua19lbmQgLSAxKSA8PCAxNikpOwot CQlSRUdfV1JJVEUobWFwLT52c3luYywgKGFkanVzdGVkX21vZGUtPmNydGNfdnN5bmNfc3RhcnQg LSAxKSB8Ci0JCQkoKGFkanVzdGVkX21vZGUtPmNydGNfdnN5bmNfZW5kIC0gMSkgPDwgMTYpKTsK LQl9Ci0KLQkvKiBGbHVzaCB0aGUgcGxhbmUgY2hhbmdlcyAqLwotCXsKLQkJY29uc3Qgc3RydWN0 IGRybV9jcnRjX2hlbHBlcl9mdW5jcyAqY3J0Y19mdW5jcyA9Ci0JCSAgICBjcnRjLT5oZWxwZXJf cHJpdmF0ZTsKLQkJY3J0Y19mdW5jcy0+bW9kZV9zZXRfYmFzZShjcnRjLCB4LCB5LCBvbGRfZmIp OwotCX0KLQotCS8qIHNldHVwIHBpcGVjb25mICovCi0JZGV2X3ByaXYtPnBpcGVjb25mW3BpcGVd ID0gUElQRUFDT05GX0VOQUJMRTsgLyogRklYTUVfSkxJVTcgUkVHX1JFQUQocGlwZWNvbmZfcmVn KTsgKi8KLQotCS8qIFNldCB1cCB0aGUgZGlzcGxheSBwbGFuZSByZWdpc3RlciAqLwotCWRldl9w cml2LT5kc3BjbnRyW3BpcGVdID0gUkVHX1JFQUQobWFwLT5jbnRyKTsKLQlkZXZfcHJpdi0+ZHNw Y250cltwaXBlXSB8PSBwaXBlIDw8IERJU1BQTEFORV9TRUxfUElQRV9QT1M7Ci0JZGV2X3ByaXYt PmRzcGNudHJbcGlwZV0gfD0gRElTUExBWV9QTEFORV9FTkFCTEU7Ci0KLQlpZiAoaXNfbWlwaTIp Ci0JCWdvdG8gbXJzdF9jcnRjX21vZGVfc2V0X2V4aXQ7Ci0JY2xrID0gYWRqdXN0ZWRfbW9kZS0+ Y2xvY2s7Ci0KLQlpZiAoaXNfaGRtaSkgewotCQlpZiAoKGtzZWwgPT0gS1NFTF9DUllTVEFMXzE5 KSB8fCAoa3NlbCA9PSBLU0VMX0JZUEFTU18xOSkpIHsKLQkJCXJlZmNsayA9IDE5MjAwOwotCi0J CQlpZiAoaXNfbWlwaSB8fCBpc19taXBpMikKLQkJCQljbGtfbiA9IDEsIGNsa19wMiA9IDg7Ci0J CQllbHNlIGlmIChpc19oZG1pKQotCQkJCWNsa19uID0gMSwgY2xrX3AyID0gMTA7Ci0JCX0gZWxz ZSBpZiAoa3NlbCA9PSBLU0VMX0JZUEFTU18yNSkgewotCQkJcmVmY2xrID0gMjUwMDA7Ci0KLQkJ CWlmIChpc19taXBpIHx8IGlzX21pcGkyKQotCQkJCWNsa19uID0gMSwgY2xrX3AyID0gODsKLQkJ CWVsc2UgaWYgKGlzX2hkbWkpCi0JCQkJY2xrX24gPSAxLCBjbGtfcDIgPSAxMDsKLQkJfSBlbHNl IGlmICgoa3NlbCA9PSBLU0VMX0JZUEFTU184M18xMDApICYmCi0JCQkJCWRldl9wcml2LT5jb3Jl X2ZyZXEgPT0gMTY2KSB7Ci0JCQlyZWZjbGsgPSA4MzAwMDsKLQotCQkJaWYgKGlzX21pcGkgfHwg aXNfbWlwaTIpCi0JCQkJY2xrX24gPSA0LCBjbGtfcDIgPSA4OwotCQkJZWxzZSBpZiAoaXNfaGRt aSkKLQkJCQljbGtfbiA9IDQsIGNsa19wMiA9IDEwOwotCQl9IGVsc2UgaWYgKChrc2VsID09IEtT RUxfQllQQVNTXzgzXzEwMCkgJiYKLQkJCQkJKGRldl9wcml2LT5jb3JlX2ZyZXEgPT0gMTAwIHx8 Ci0JCQkJCWRldl9wcml2LT5jb3JlX2ZyZXEgPT0gMjAwKSkgewotCQkJcmVmY2xrID0gMTAwMDAw OwotCQkJaWYgKGlzX21pcGkgfHwgaXNfbWlwaTIpCi0JCQkJY2xrX24gPSA0LCBjbGtfcDIgPSA4 OwotCQkJZWxzZSBpZiAoaXNfaGRtaSkKLQkJCQljbGtfbiA9IDQsIGNsa19wMiA9IDEwOwotCQl9 Ci0KLQkJaWYgKGlzX21pcGkpCi0JCQljbGtfYnl0ZSA9IGRldl9wcml2LT5icHAgLyA4OwotCQll bHNlIGlmIChpc19taXBpMikKLQkJCWNsa19ieXRlID0gZGV2X3ByaXYtPmJwcDIgLyA4OwotCi0J CWNsa190bXAgPSBjbGsgKiBjbGtfbiAqIGNsa19wMiAqIGNsa19ieXRlOwotCi0JCWRldl9kYmco ZGV2LT5kZXYsICJjbGsgPSAlZCwgY2xrX24gPSAlZCwgY2xrX3AyID0gJWQuXG4iLAotCQkJCQlj bGssIGNsa19uLCBjbGtfcDIpOwotCQlkZXZfZGJnKGRldi0+ZGV2LCAiYWRqdXN0ZWRfbW9kZS0+ Y2xvY2sgPSAlZCwgY2xrX3RtcCA9ICVkLlxuIiwKLQkJCQkJYWRqdXN0ZWRfbW9kZS0+Y2xvY2ss IGNsa190bXApOwotCi0JCW9rID0gbWRmbGRGaW5kQmVzdFBMTChjcnRjLCBjbGtfdG1wLCByZWZj bGssICZjbG9jayk7Ci0KLQkJaWYgKCFvaykgewotCQkJRFJNX0VSUk9SCi0JCQkgICAgKCJtZGZs ZEZpbmRCZXN0UExMIGZhaWwgaW4gbWRmbGRfY3J0Y19tb2RlX3NldC5cbiIpOwotCQl9IGVsc2Ug ewotCQkJbV9jb252ID0gbWRmbGRfbV9jb252ZXJ0c1soY2xvY2subSAtIE1ERkxEX01fTUlOKV07 Ci0KLQkJCWRldl9kYmcoZGV2LT5kZXYsICJkb3QgY2xvY2sgPSAlZCwiCi0JCQkJICJtID0gJWQs IHAxID0gJWQsIG1fY29udiA9ICVkLlxuIiwKLQkJCQkJY2xvY2suZG90LCBjbG9jay5tLAotCQkJ CQljbG9jay5wMSwgbV9jb252KTsKLQkJfQotCi0JCWRwbGwgPSBSRUdfUkVBRChtYXAtPmRwbGwp OwotCi0JCWlmIChkcGxsICYgRFBMTF9WQ09fRU5BQkxFKSB7Ci0JCQlkcGxsICY9IH5EUExMX1ZD T19FTkFCTEU7Ci0JCQlSRUdfV1JJVEUobWFwLT5kcGxsLCBkcGxsKTsKLQkJCVJFR19SRUFEKG1h cC0+ZHBsbCk7Ci0KLQkJCS8qIEZJWE1FIGpsaXU3IGNoZWNrIHRoZSBEUExMIGxvY2sgYml0IFBJ UEVBQ09ORlsyOV0gKi8KLQkJCS8qIEZJWE1FX01ERkxEIFBPIC0gY2hhbmdlIDUwMCB0byAxIGFm dGVyIFBPICovCi0JCQl1ZGVsYXkoNTAwKTsKLQotCQkJLyogcmVzZXQgTTEsIE4xICYgUDEgKi8K LQkJCVJFR19XUklURShtYXAtPmZwMCwgMCk7Ci0JCQlkcGxsICY9IH5NREZMRF9QMV9NQVNLOwot CQkJUkVHX1dSSVRFKG1hcC0+ZHBsbCwgZHBsbCk7Ci0JCQkvKiBGSVhNRV9NREZMRCBQTyAtIGNo YW5nZSA1MDAgdG8gMSBhZnRlciBQTyAqLwotCQkJdWRlbGF5KDUwMCk7Ci0JCX0KLQotCQkvKiBX aGVuIHVuZ2F0aW5nIHBvd2VyIG9mIERQTEwsIG5lZWRzIHRvIHdhaXQgMC41dXMgYmVmb3JlCi0J CSAqIGVuYWJsZSB0aGUgVkNPICovCi0JCWlmIChkcGxsICYgTURGTERfUFdSX0dBVEVfRU4pIHsK LQkJCWRwbGwgJj0gfk1ERkxEX1BXUl9HQVRFX0VOOwotCQkJUkVHX1dSSVRFKG1hcC0+ZHBsbCwg ZHBsbCk7Ci0JCQkvKiBGSVhNRV9NREZMRCBQTyAtIGNoYW5nZSA1MDAgdG8gMSBhZnRlciBQTyAq LwotCQkJdWRlbGF5KDUwMCk7Ci0JCX0KLQkJZHBsbCA9IDA7Ci0KLQkJaWYgKGlzX2hkbWkpCi0J CQlkcGxsIHw9IE1ERkxEX1ZDT19TRUw7Ci0KLQkJZnAgPSAoY2xrX24gLyAyKSA8PCAxNjsKLQkJ ZnAgfD0gbV9jb252OwotCi0JCS8qIGNvbXB1dGUgYml0bWFzayBmcm9tIHAxIHZhbHVlICovCi0J CWRwbGwgfD0gKDEgPDwgKGNsb2NrLnAxIC0gMikpIDw8IDE3OwotCi0JfSBlbHNlIHsKLQkJZHBs bCA9IDB4MDA4MDAwMDA7Ci0JCWZwID0gMHgwMDAwMDBjMTsKLQl9Ci0KLQlSRUdfV1JJVEUobWFw LT5mcDAsIGZwKTsKLQlSRUdfV1JJVEUobWFwLT5kcGxsLCBkcGxsKTsKLQkvKiBGSVhNRV9NREZM RCBQTyAtIGNoYW5nZSA1MDAgdG8gMSBhZnRlciBQTyAqLwotCXVkZWxheSg1MDApOwotCi0JZHBs bCB8PSBEUExMX1ZDT19FTkFCTEU7Ci0JUkVHX1dSSVRFKG1hcC0+ZHBsbCwgZHBsbCk7Ci0JUkVH X1JFQUQobWFwLT5kcGxsKTsKLQotCS8qIHdhaXQgZm9yIERTSSBQTEwgdG8gbG9jayAqLwotCXdo aWxlICh0aW1lb3V0IDwgMjAwMDAgJiYKLQkJCSEoUkVHX1JFQUQobWFwLT5jb25mKSAmIFBJUEVD T05GX0RTSVBMTF9MT0NLKSkgewotCQl1ZGVsYXkoMTUwKTsKLQkJdGltZW91dCsrOwotCX0KLQot CWlmIChpc19taXBpKQotCQlnb3RvIG1yc3RfY3J0Y19tb2RlX3NldF9leGl0OwotCi0JZGV2X2Ri ZyhkZXYtPmRldiwgImlzX21pcGkgPSAweCV4XG4iLCBpc19taXBpKTsKLQotCVJFR19XUklURSht YXAtPmNvbmYsIGRldl9wcml2LT5waXBlY29uZltwaXBlXSk7Ci0JUkVHX1JFQUQobWFwLT5jb25m KTsKLQotCS8qIFdhaXQgZm9yIGZvciB0aGUgcGlwZSBlbmFibGUgdG8gdGFrZSBlZmZlY3QuICov Ci0JUkVHX1dSSVRFKG1hcC0+Y250ciwgZGV2X3ByaXYtPmRzcGNudHJbcGlwZV0pOwotCWdtYV93 YWl0X2Zvcl92YmxhbmsoZGV2KTsKLQotbXJzdF9jcnRjX21vZGVfc2V0X2V4aXQ6Ci0KLQlnbWFf cG93ZXJfZW5kKGRldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotY29uc3Qgc3RydWN0IGRybV9jcnRj X2hlbHBlcl9mdW5jcyBtZGZsZF9oZWxwZXJfZnVuY3MgPSB7Ci0JLmRwbXMgPSBtZGZsZF9jcnRj X2RwbXMsCi0JLm1vZGVfc2V0ID0gbWRmbGRfY3J0Y19tb2RlX3NldCwKLQkubW9kZV9zZXRfYmFz ZSA9IG1kZmxkX19pbnRlbF9waXBlX3NldF9iYXNlLAotCS5wcmVwYXJlID0gZ21hX2NydGNfcHJl cGFyZSwKLQkuY29tbWl0ID0gZ21hX2NydGNfY29tbWl0LAotfTsKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9nbWE1MDAvbWRmbGRfb3V0cHV0LmMgYi9kcml2ZXJzL2dwdS9kcm0vZ21hNTAw L21kZmxkX291dHB1dC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTU5NjZiYjBj OTYuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL21kZmxkX291dHB1 dC5jCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykg IDIwMTAgSW50ZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFu dGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQotICogY29weSBv ZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAi U29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rp b24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gdXNlLCBj b3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlbgotICog YW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25z IHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3Qg dG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQg bm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKLSAq IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlh bCBwb3J0aW9ucyBvZiB0aGUKLSAqIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9S Ci0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF IEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAotICogVEhFIEFVVEhPUlMg T1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1Ig T1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRP UlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCi0gKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElP TiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCi0gKiBERUFMSU5HUyBJTiBU SEUgU09GVFdBUkUuCi0gKgotICogQXV0aG9yczoKLSAqIFRob21hcyBFYXRvbiA8dGhvbWFzLmcu ZWF0b25AaW50ZWwuY29tPgotICogU2NvdHQgUm93ZSA8c2NvdHQubS5yb3dlQGludGVsLmNvbT4K LSovCi0KLSNpbmNsdWRlICJtZGZsZF9vdXRwdXQuaCIKLSNpbmNsdWRlICJtZGZsZF9kc2lfZHBp LmgiCi0jaW5jbHVkZSAibWRmbGRfZHNpX291dHB1dC5oIgotCi0jaW5jbHVkZSAidGMzNTg3Nngt ZHNpLWx2ZHMuaCIKLQotaW50IG1kZmxkX2dldF9wYW5lbF90eXBlKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsIGludCBwaXBlKQotewotCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0g ZGV2LT5kZXZfcHJpdmF0ZTsKLQlyZXR1cm4gZGV2X3ByaXYtPm1kZmxkX3BhbmVsX2lkOwotfQot Ci1zdGF0aWMgdm9pZCBtZGZsZF9pbml0X3BhbmVsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGlu dCBtaXBpX3BpcGUsCi0JCQkJCQkJCWludCBwX3R5cGUpCi17Ci0Jc3dpdGNoIChwX3R5cGUpIHsK LQljYXNlIFRQT19WSUQ6Ci0JCW1kZmxkX2RzaV9vdXRwdXRfaW5pdChkZXYsIG1pcGlfcGlwZSwg Jm1kZmxkX3Rwb192aWRfZnVuY3MpOwotCQlicmVhazsKLQljYXNlIFRDMzU4NzZYOgotCQl0YzM1 ODc2eF9pbml0KGRldik7Ci0JCW1kZmxkX2RzaV9vdXRwdXRfaW5pdChkZXYsIG1pcGlfcGlwZSwg Jm1kZmxkX3RjMzU4NzZ4X2Z1bmNzKTsKLQkJYnJlYWs7Ci0JY2FzZSBUTURfVklEOgotCQltZGZs ZF9kc2lfb3V0cHV0X2luaXQoZGV2LCBtaXBpX3BpcGUsICZtZGZsZF90bWRfdmlkX2Z1bmNzKTsK LQkJYnJlYWs7Ci0JY2FzZSBIRE1JOgotLyoJCWlmIChkZXZfcHJpdi0+bWRmbGRfaGRtaV9wcmVz ZW50KQotCQkJbWRmbGRfaGRtaV9pbml0KGRldiwgJmRldl9wcml2LT5tb2RlX2Rldik7ICovCi0J CWJyZWFrOwotCX0KLX0KLQotCi1pbnQgbWRmbGRfb3V0cHV0X2luaXQoc3RydWN0IGRybV9kZXZp Y2UgKmRldikKLXsKLQlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2 X3ByaXZhdGU7Ci0KLQkvKiBGSVhNRTogaGFyZGNvZGVkIGZvciBub3cgKi8KLQlkZXZfcHJpdi0+ bWRmbGRfcGFuZWxfaWQgPSBUQzM1ODc2WDsKLQkvKiBNSVBJIHBhbmVsIDEgKi8KLQltZGZsZF9p bml0X3BhbmVsKGRldiwgMCwgZGV2X3ByaXYtPm1kZmxkX3BhbmVsX2lkKTsKLQkvKiBIRE1JIHBh bmVsICovCi0JbWRmbGRfaW5pdF9wYW5lbChkZXYsIDEsIEhETUkpOwotCXJldHVybiAwOwotfQot CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL21kZmxkX291dHB1dC5oIGIvZHJp dmVycy9ncHUvZHJtL2dtYTUwMC9tZGZsZF9vdXRwdXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMzdhNTE2Y2M1NmJlLi4wMDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2dtYTUwMC9tZGZsZF9vdXRwdXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8q Ci0gKiBDb3B5cmlnaHQgKGMpICAyMDEwIEludGVsIENvcnBvcmF0aW9uCi0gKgotICogUGVybWlz c2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0 YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVu dGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2Fy ZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0 aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0 ZSwgc3VibGljZW5zZW4KLSAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFu ZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVk IHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBU aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5j bHVkaW5nIHRoZSBuZXh0Ci0gKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBj b3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCi0gKiBTb2Z0d2FyZS4KLSAqCi0g KiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBB TlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRF RCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hB TEwKLSAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5Z IENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNU SU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwotICogRlJPTSwgT1VU IE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhF UgotICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgotICoKLSAqIEF1dGhvcnM6Ci0gKiBUaG9t YXMgRWF0b24gPHRob21hcy5nLmVhdG9uQGludGVsLmNvbT4KLSAqIFNjb3R0IFJvd2UgPHNjb3R0 Lm0ucm93ZUBpbnRlbC5jb20+Ci0qLwotCi0jaWZuZGVmIE1ERkxEX09VVFBVVF9ICi0jZGVmaW5l IE1ERkxEX09VVFBVVF9ICi0KLSNpbmNsdWRlICJwc2JfZHJ2LmgiCi0KLSNkZWZpbmUgVFBPX1BB TkVMX1dJRFRICQk4NAotI2RlZmluZSBUUE9fUEFORUxfSEVJR0hUCTQ2Ci0jZGVmaW5lIFRNRF9Q QU5FTF9XSURUSAkJMzkKLSNkZWZpbmUgVE1EX1BBTkVMX0hFSUdIVAk3MQotCi1zdHJ1Y3QgbWRm bGRfZHNpX2NvbmZpZzsKLQotZW51bSBwYW5lbF90eXBlIHsKLQlUUE9fVklELAotCVRNRF9WSUQs Ci0JSERNSSwKLQlUQzM1ODc2WCwKLX07Ci0KLXN0cnVjdCBwYW5lbF9pbmZvIHsKLQl1MzIgd2lk dGhfbW07Ci0JdTMyIGhlaWdodF9tbTsKLQkvKiBPdGhlciBpbmZvICovCi19OwotCi1zdHJ1Y3Qg cGFuZWxfZnVuY3MgewotCWNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MgKmVu Y29kZXJfaGVscGVyX2Z1bmNzOwotCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICogKCpnZXRfY29u ZmlnX21vZGUpKHN0cnVjdCBkcm1fZGV2aWNlICopOwotCWludCAoKmdldF9wYW5lbF9pbmZvKShz dHJ1Y3QgZHJtX2RldmljZSAqLCBpbnQsIHN0cnVjdCBwYW5lbF9pbmZvICopOwotCWludCAoKnJl c2V0KShzdHJ1Y3QgZHJtX2RldmljZSAqLCBpbnQpOwotCXZvaWQgKCpkcnZfaWNfaW5pdCkoc3Ry dWN0IG1kZmxkX2RzaV9jb25maWcgKmRzaV9jb25maWcsIGludCBwaXBlKTsKLX07Ci0KLWludCBt ZGZsZF9vdXRwdXRfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKLQotc3RydWN0IGJhY2ts aWdodF9kZXZpY2UgKm1kZmxkX2dldF9iYWNrbGlnaHRfZGV2aWNlKHZvaWQpOwotaW50IG1kZmxk X3NldF9icmlnaHRuZXNzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCk7Ci0KLWludCBtZGZs ZF9nZXRfcGFuZWxfdHlwZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgcGlwZSk7Ci0KLWV4 dGVybiBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzIG1kZmxkX2hlbHBlcl9mdW5j czsKLQotZXh0ZXJuIGNvbnN0IHN0cnVjdCBwYW5lbF9mdW5jcyBtZGZsZF90bWRfdmlkX2Z1bmNz OwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBwYW5lbF9mdW5jcyBtZGZsZF90cG9fdmlkX2Z1bmNzOwot Ci1leHRlcm4gdm9pZCBtZGZsZF9kaXNhYmxlX2NydGMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwg aW50IHBpcGUpOwotZXh0ZXJuIHZvaWQgbWRmbGRXYWl0Rm9yUGlwZUVuYWJsZShzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCBpbnQgcGlwZSk7Ci1leHRlcm4gdm9pZCBtZGZsZFdhaXRGb3JQaXBlRGlz YWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgcGlwZSk7Ci0jZW5kaWYKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvbWRmbGRfdG1kX3ZpZC5jIGIvZHJpdmVycy9ncHUv ZHJtL2dtYTUwMC9tZGZsZF90bWRfdmlkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDI1ZTg5N2I5OGY4Ni4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAv bWRmbGRfdG1kX3ZpZC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTk3ICswLDAgQEAKLS8qCi0gKiBD b3B5cmlnaHQgwqkgMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbgotICoKLSAqIFBlcm1pc3Npb24gaXMg aGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBh Ci0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBm aWxlcyAodGhlICJTb2Z0d2FyZSIpLAotICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91 dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICogdGhlIHJpZ2h0 cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1Ymxp Y2Vuc2UsCi0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVy bWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBz bywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3Zl IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0 aGUgbmV4dAotICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9y IHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQotICogU29mdHdhcmUuCi0gKgotICogVEhFIFNP RlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQs IEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhF IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCi0gKiBU SEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwg REFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBD T05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKLSAqIEZST00sIE9VVCBPRiBPUiBJ TiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKLSAqIERF QUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKiBBdXRob3JzOgotICogSmltIExpdSA8amlt LmxpdUBpbnRlbC5jb20+Ci0gKiBKYWNraWUgTGk8eWFvZG9uZy5saUBpbnRlbC5jb20+Ci0gKiBH aWRlb24gRWF0b24gPGVhdG9uLgotICogU2NvdHQgUm93ZSA8c2NvdHQubS5yb3dlQGludGVsLmNv bT4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLQotI2luY2x1ZGUgIm1kZmxkX2Rz aV9kcGkuaCIKLSNpbmNsdWRlICJtZGZsZF9kc2lfcGtnX3NlbmRlci5oIgotCi1zdGF0aWMgc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUgKnRtZF92aWRfZ2V0X2NvbmZpZ19tb2RlKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7Ci0Jc3RydWN0 IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBv YWt0cmFpbF90aW1pbmdfaW5mbyAqdGkgPSAmZGV2X3ByaXYtPmdjdF9kYXRhLkRURDsKLQlib29s IHVzZV9nY3QgPSBmYWxzZTsgLypEaXNhYmxlIEdDVCBmb3Igbm93Ki8KLQotCW1vZGUgPSBremFs bG9jKHNpemVvZigqbW9kZSksIEdGUF9LRVJORUwpOwotCWlmICghbW9kZSkKLQkJcmV0dXJuIE5V TEw7Ci0KLQlpZiAodXNlX2djdCkgewotCQltb2RlLT5oZGlzcGxheSA9ICh0aS0+aGFjdGl2ZV9o aSA8PCA4KSB8IHRpLT5oYWN0aXZlX2xvOwotCQltb2RlLT52ZGlzcGxheSA9ICh0aS0+dmFjdGl2 ZV9oaSA8PCA4KSB8IHRpLT52YWN0aXZlX2xvOwotCQltb2RlLT5oc3luY19zdGFydCA9IG1vZGUt PmhkaXNwbGF5ICsgXAotCQkJCSgodGktPmhzeW5jX29mZnNldF9oaSA8PCA4KSB8IFwKLQkJCQl0 aS0+aHN5bmNfb2Zmc2V0X2xvKTsKLQkJbW9kZS0+aHN5bmNfZW5kID0gbW9kZS0+aHN5bmNfc3Rh cnQgKyBcCi0JCQkJKCh0aS0+aHN5bmNfcHVsc2Vfd2lkdGhfaGkgPDwgOCkgfCBcCi0JCQkJdGkt PmhzeW5jX3B1bHNlX3dpZHRoX2xvKTsKLQkJbW9kZS0+aHRvdGFsID0gbW9kZS0+aGRpc3BsYXkg KyAoKHRpLT5oYmxhbmtfaGkgPDwgOCkgfCBcCi0JCQkJCQkJCXRpLT5oYmxhbmtfbG8pOwotCQlt b2RlLT52c3luY19zdGFydCA9IFwKLQkJCW1vZGUtPnZkaXNwbGF5ICsgKCh0aS0+dnN5bmNfb2Zm c2V0X2hpIDw8IDgpIHwgXAotCQkJCQkJdGktPnZzeW5jX29mZnNldF9sbyk7Ci0JCW1vZGUtPnZz eW5jX2VuZCA9IFwKLQkJCW1vZGUtPnZzeW5jX3N0YXJ0ICsgKCh0aS0+dnN5bmNfcHVsc2Vfd2lk dGhfaGkgPDwgOCkgfCBcCi0JCQkJCQl0aS0+dnN5bmNfcHVsc2Vfd2lkdGhfbG8pOwotCQltb2Rl LT52dG90YWwgPSBtb2RlLT52ZGlzcGxheSArIFwKLQkJCQkoKHRpLT52YmxhbmtfaGkgPDwgOCkg fCB0aS0+dmJsYW5rX2xvKTsKLQkJbW9kZS0+Y2xvY2sgPSB0aS0+cGl4ZWxfY2xvY2sgKiAxMDsK LQotCQlkZXZfZGJnKGRldi0+ZGV2LCAiaGRpc3BsYXkgaXMgJWRcbiIsIG1vZGUtPmhkaXNwbGF5 KTsKLQkJZGV2X2RiZyhkZXYtPmRldiwgInZkaXNwbGF5IGlzICVkXG4iLCBtb2RlLT52ZGlzcGxh eSk7Ci0JCWRldl9kYmcoZGV2LT5kZXYsICJIU1MgaXMgJWRcbiIsIG1vZGUtPmhzeW5jX3N0YXJ0 KTsKLQkJZGV2X2RiZyhkZXYtPmRldiwgIkhTRSBpcyAlZFxuIiwgbW9kZS0+aHN5bmNfZW5kKTsK LQkJZGV2X2RiZyhkZXYtPmRldiwgImh0b3RhbCBpcyAlZFxuIiwgbW9kZS0+aHRvdGFsKTsKLQkJ ZGV2X2RiZyhkZXYtPmRldiwgIlZTUyBpcyAlZFxuIiwgbW9kZS0+dnN5bmNfc3RhcnQpOwotCQlk ZXZfZGJnKGRldi0+ZGV2LCAiVlNFIGlzICVkXG4iLCBtb2RlLT52c3luY19lbmQpOwotCQlkZXZf ZGJnKGRldi0+ZGV2LCAidnRvdGFsIGlzICVkXG4iLCBtb2RlLT52dG90YWwpOwotCQlkZXZfZGJn KGRldi0+ZGV2LCAiY2xvY2sgaXMgJWRcbiIsIG1vZGUtPmNsb2NrKTsKLQl9IGVsc2UgewotCQlt b2RlLT5oZGlzcGxheSA9IDQ4MDsKLQkJbW9kZS0+dmRpc3BsYXkgPSA4NTQ7Ci0JCW1vZGUtPmhz eW5jX3N0YXJ0ID0gNDg3OwotCQltb2RlLT5oc3luY19lbmQgPSA0OTA7Ci0JCW1vZGUtPmh0b3Rh bCA9IDQ5OTsKLQkJbW9kZS0+dnN5bmNfc3RhcnQgPSA4NjE7Ci0JCW1vZGUtPnZzeW5jX2VuZCA9 IDg2NTsKLQkJbW9kZS0+dnRvdGFsID0gODczOwotCQltb2RlLT5jbG9jayA9IDMzMjY0OwotCX0K LQotCWRybV9tb2RlX3NldF9uYW1lKG1vZGUpOwotCWRybV9tb2RlX3NldF9jcnRjaW5mbyhtb2Rl LCAwKTsKLQotCW1vZGUtPnR5cGUgfD0gRFJNX01PREVfVFlQRV9QUkVGRVJSRUQ7Ci0KLQlyZXR1 cm4gbW9kZTsKLX0KLQotc3RhdGljIGludCB0bWRfdmlkX2dldF9wYW5lbF9pbmZvKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsCi0JCQkJaW50IHBpcGUsCi0JCQkJc3RydWN0IHBhbmVsX2luZm8gKnBp KQotewotCWlmICghZGV2IHx8ICFwaSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlwaS0+d2lkdGhf bW0gPSBUTURfUEFORUxfV0lEVEg7Ci0JcGktPmhlaWdodF9tbSA9IFRNRF9QQU5FTF9IRUlHSFQ7 Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqXAotICogRlVOQ1RJT046 IG1kZmxkX2luaXRfVE1EX01JUEkKLSAqCi0gKiBERVNDUklQVElPTjogIFRoaXMgZnVuY3Rpb24g aXMgY2FsbGVkIG9ubHkgYnkgbXJzdF9kc2lfbW9kZV9zZXQgYW5kCi0gKiAgICAgICAgICAgICAg IHJlc3RvcmVfZGlzcGxheV9yZWdpc3RlcnMuICBzaW5jZSB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90 Ci0gKiAgICAgICAgICAgICAgIGFjcXVpcmUgdGhlIG11dGV4LCBpdCBpcyBpbXBvcnRhbnQgdGhh dCB0aGUgY2FsbGluZyBmdW5jdGlvbgotICogICAgICAgICAgICAgICBkb2VzIQotXCogKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiAqLwotCi0vKiBGSVhNRTogbWFrZSB0aGUgYmVsb3cgZGF0YSB1OCBpbnN0ZWFk IG9mIHUzMjsgbm90ZSBieXRlIG9yZGVyISAqLwotc3RhdGljIHUzMiB0bWRfY21kX21jYXBfb2Zm W10gPSB7MHgwMDAwMDBiMn07Ci1zdGF0aWMgdTMyIHRtZF9jbWRfZW5hYmxlX2xhbmVfc3dpdGNo W10gPSB7MHgwMDAxMDFlZn07Ci1zdGF0aWMgdTMyIHRtZF9jbWRfc2V0X2xhbmVfbnVtW10gPSB7 MHgwMDYzNjBlZn07Ci1zdGF0aWMgdTMyIHRtZF9jbWRfcHVzaGluZ19jbG9jazBbXSA9IHsweDAw Y2MyZmVmfTsKLXN0YXRpYyB1MzIgdG1kX2NtZF9wdXNoaW5nX2Nsb2NrMVtdID0gezB4MDBkZDZl ZWZ9Owotc3RhdGljIHUzMiB0bWRfY21kX3NldF9tb2RlW10gPSB7MHgwMDAwMDBiM307Ci1zdGF0 aWMgdTMyIHRtZF9jbWRfc2V0X3N5bmNfcHVsc2VfbW9kZVtdID0gezB4MDAwOTYxZWZ9Owotc3Rh dGljIHUzMiB0bWRfY21kX3NldF9jb2x1bW5bXSA9IHsweDAxMDAwMDJhLCAweDAwMDAwMGRmfTsK LXN0YXRpYyB1MzIgdG1kX2NtZF9zZXRfcGFnZVtdID0gezB4MDMwMDAwMmIsIDB4MDAwMDAwNTV9 Owotc3RhdGljIHUzMiB0bWRfY21kX3NldF92aWRlb19tb2RlW10gPSB7MHgwMDAwMDE1M307Ci0v Km5vIGF1dG9fYmwsbmVlZCBhZGQgaW4gZnVydHVyZSovCi1zdGF0aWMgdTMyIHRtZF9jbWRfZW5h YmxlX2JhY2tsaWdodFtdID0gezB4MDAwMDVhYjR9Owotc3RhdGljIHUzMiB0bWRfY21kX3NldF9i YWNrbGlnaHRfZGltbWluZ1tdID0gezB4MDAwMDBlYmR9OwotCi1zdGF0aWMgdm9pZCBtZGZsZF9k c2lfdG1kX2Rydl9pY19pbml0KHN0cnVjdCBtZGZsZF9kc2lfY29uZmlnICpkc2lfY29uZmlnLAot CQkJCSAgICAgIGludCBwaXBlKQotewotCXN0cnVjdCBtZGZsZF9kc2lfcGtnX3NlbmRlciAqc2Vu ZGVyCi0JCQk9IG1kZmxkX2RzaV9nZXRfcGtnX3NlbmRlcihkc2lfY29uZmlnKTsKLQotCURSTV9J TkZPKCJFbnRlciBtZGZsZCBpbml0IFRNRCBNSVBJIGRpc3BsYXkuXG4iKTsKLQotCWlmICghc2Vu ZGVyKSB7Ci0JCURSTV9FUlJPUigiQ2Fubm90IGdldCBzZW5kZXJcbiIpOwotCQlyZXR1cm47Ci0J fQotCi0JaWYgKGRzaV9jb25maWctPmR2cl9pY19pbml0ZWQpCi0JCXJldHVybjsKLQotCW1zbGVl cCgzKTsKLQotCS8qIEZJWE1FOiBtYWtlIHRoZSBiZWxvdyBkYXRhIHU4IGluc3RlYWQgb2YgdTMy OyBub3RlIGJ5dGUgb3JkZXIhICovCi0KLQltZGZsZF9kc2lfc2VuZF9nZW5fbG9uZyhzZW5kZXIs ICh1OCAqKSB0bWRfY21kX21jYXBfb2ZmLAotCQkJCXNpemVvZih0bWRfY21kX21jYXBfb2ZmKSwg ZmFsc2UpOwotCW1kZmxkX2RzaV9zZW5kX2dlbl9sb25nKHNlbmRlciwgKHU4ICopIHRtZF9jbWRf ZW5hYmxlX2xhbmVfc3dpdGNoLAotCQkJCXNpemVvZih0bWRfY21kX2VuYWJsZV9sYW5lX3N3aXRj aCksIGZhbHNlKTsKLQltZGZsZF9kc2lfc2VuZF9nZW5fbG9uZyhzZW5kZXIsICh1OCAqKSB0bWRf Y21kX3NldF9sYW5lX251bSwKLQkJCQlzaXplb2YodG1kX2NtZF9zZXRfbGFuZV9udW0pLCBmYWxz ZSk7Ci0JbWRmbGRfZHNpX3NlbmRfZ2VuX2xvbmcoc2VuZGVyLCAodTggKikgdG1kX2NtZF9wdXNo aW5nX2Nsb2NrMCwKLQkJCQlzaXplb2YodG1kX2NtZF9wdXNoaW5nX2Nsb2NrMCksIGZhbHNlKTsK LQltZGZsZF9kc2lfc2VuZF9nZW5fbG9uZyhzZW5kZXIsICh1OCAqKSB0bWRfY21kX3B1c2hpbmdf Y2xvY2sxLAotCQkJCXNpemVvZih0bWRfY21kX3B1c2hpbmdfY2xvY2sxKSwgZmFsc2UpOwotCW1k ZmxkX2RzaV9zZW5kX2dlbl9sb25nKHNlbmRlciwgKHU4ICopIHRtZF9jbWRfc2V0X21vZGUsCi0J CQkJc2l6ZW9mKHRtZF9jbWRfc2V0X21vZGUpLCBmYWxzZSk7Ci0JbWRmbGRfZHNpX3NlbmRfZ2Vu X2xvbmcoc2VuZGVyLCAodTggKikgdG1kX2NtZF9zZXRfc3luY19wdWxzZV9tb2RlLAotCQkJCXNp emVvZih0bWRfY21kX3NldF9zeW5jX3B1bHNlX21vZGUpLCBmYWxzZSk7Ci0JbWRmbGRfZHNpX3Nl bmRfbWNzX2xvbmcoc2VuZGVyLCAodTggKikgdG1kX2NtZF9zZXRfY29sdW1uLAotCQkJCXNpemVv Zih0bWRfY21kX3NldF9jb2x1bW4pLCBmYWxzZSk7Ci0JbWRmbGRfZHNpX3NlbmRfbWNzX2xvbmco c2VuZGVyLCAodTggKikgdG1kX2NtZF9zZXRfcGFnZSwKLQkJCQlzaXplb2YodG1kX2NtZF9zZXRf cGFnZSksIGZhbHNlKTsKLQltZGZsZF9kc2lfc2VuZF9nZW5fbG9uZyhzZW5kZXIsICh1OCAqKSB0 bWRfY21kX3NldF92aWRlb19tb2RlLAotCQkJCXNpemVvZih0bWRfY21kX3NldF92aWRlb19tb2Rl KSwgZmFsc2UpOwotCW1kZmxkX2RzaV9zZW5kX2dlbl9sb25nKHNlbmRlciwgKHU4ICopIHRtZF9j bWRfZW5hYmxlX2JhY2tsaWdodCwKLQkJCQlzaXplb2YodG1kX2NtZF9lbmFibGVfYmFja2xpZ2h0 KSwgZmFsc2UpOwotCW1kZmxkX2RzaV9zZW5kX2dlbl9sb25nKHNlbmRlciwgKHU4ICopIHRtZF9j bWRfc2V0X2JhY2tsaWdodF9kaW1taW5nLAotCQkJCXNpemVvZih0bWRfY21kX3NldF9iYWNrbGln aHRfZGltbWluZyksIGZhbHNlKTsKLQotCWRzaV9jb25maWctPmR2cl9pY19pbml0ZWQgPSAxOwot fQotCi0vKlRQTyBEUEkgZW5jb2RlciBoZWxwZXIgZnVuY3MqLwotc3RhdGljIGNvbnN0IHN0cnVj dCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MKLQkJCQltZGZsZF90cG9fZHBpX2VuY29kZXJfaGVs cGVyX2Z1bmNzID0gewotCS5kcG1zID0gbWRmbGRfZHNpX2RwaV9kcG1zLAotCS5tb2RlX2ZpeHVw ID0gbWRmbGRfZHNpX2RwaV9tb2RlX2ZpeHVwLAotCS5wcmVwYXJlID0gbWRmbGRfZHNpX2RwaV9w cmVwYXJlLAotCS5tb2RlX3NldCA9IG1kZmxkX2RzaV9kcGlfbW9kZV9zZXQsCi0JLmNvbW1pdCA9 IG1kZmxkX2RzaV9kcGlfY29tbWl0LAotfTsKLQotY29uc3Qgc3RydWN0IHBhbmVsX2Z1bmNzIG1k ZmxkX3RtZF92aWRfZnVuY3MgPSB7Ci0JLmVuY29kZXJfaGVscGVyX2Z1bmNzID0gJm1kZmxkX3Rw b19kcGlfZW5jb2Rlcl9oZWxwZXJfZnVuY3MsCi0JLmdldF9jb25maWdfbW9kZSA9ICZ0bWRfdmlk X2dldF9jb25maWdfbW9kZSwKLQkuZ2V0X3BhbmVsX2luZm8gPSB0bWRfdmlkX2dldF9wYW5lbF9p bmZvLAotCS5yZXNldCA9IG1kZmxkX2RzaV9wYW5lbF9yZXNldCwKLQkuZHJ2X2ljX2luaXQgPSBt ZGZsZF9kc2lfdG1kX2Rydl9pY19pbml0LAotfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9nbWE1MDAvbWRmbGRfdHBvX3ZpZC5jIGIvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9tZGZsZF90 cG9fdmlkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExODQ1OTc4ZmIwYS4uMDAw MDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvbWRmbGRfdHBvX3ZpZC5jCisr KyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCDCqSAyMDEwIElu dGVsIENvcnBvcmF0aW9uCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJl ZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBz b2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJl IiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNs dWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9k aWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9vciBz ZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9t IHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBm b2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBh bmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Ci0gKiBwYXJhZ3Jh cGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlv bnMgb2YgdGhlCi0gKiBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQg IkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1Q TElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9O SU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSAqIFRIRSBBVVRIT1JTIE9SIENPUFlS SUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0g KiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9U SEVSV0lTRSwgQVJJU0lORwotICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBU SEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgotICogREVBTElOR1MgSU4gVEhFIFNPRlRX QVJFLgotICoKLSAqIEF1dGhvcnM6Ci0gKiBqaW0gbGl1IDxqaW0ubGl1QGludGVsLmNvbT4KLSAq IEphY2tpZSBMaTx5YW9kb25nLmxpQGludGVsLmNvbT4KLSAqLwotCi0jaW5jbHVkZSAibWRmbGRf ZHNpX2RwaS5oIgotCi1zdGF0aWMgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKnRwb192aWRfZ2V0 X2NvbmZpZ19tb2RlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKm1vZGU7Ci0KLQltb2RlID0ga3phbGxvYyhzaXplb2YoKm1vZGUpLCBHRlBfS0VS TkVMKTsKLQlpZiAoIW1vZGUpCi0JCXJldHVybiBOVUxMOwotCi0JbW9kZS0+aGRpc3BsYXkgPSA4 NjQ7Ci0JbW9kZS0+dmRpc3BsYXkgPSA0ODA7Ci0JbW9kZS0+aHN5bmNfc3RhcnQgPSA4NzM7Ci0J bW9kZS0+aHN5bmNfZW5kID0gODc2OwotCW1vZGUtPmh0b3RhbCA9IDg4NzsKLQltb2RlLT52c3lu Y19zdGFydCA9IDQ4NzsKLQltb2RlLT52c3luY19lbmQgPSA0OTA7Ci0JbW9kZS0+dnRvdGFsID0g NDk5OwotCW1vZGUtPmNsb2NrID0gMzMyNjQ7Ci0KLQlkcm1fbW9kZV9zZXRfbmFtZShtb2RlKTsK LQlkcm1fbW9kZV9zZXRfY3J0Y2luZm8obW9kZSwgMCk7Ci0KLQltb2RlLT50eXBlIHw9IERSTV9N T0RFX1RZUEVfUFJFRkVSUkVEOwotCi0JcmV0dXJuIG1vZGU7Ci19Ci0KLXN0YXRpYyBpbnQgdHBv X3ZpZF9nZXRfcGFuZWxfaW5mbyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJCWludCBwaXBl LAotCQkJCXN0cnVjdCBwYW5lbF9pbmZvICpwaSkKLXsKLQlpZiAoIWRldiB8fCAhcGkpCi0JCXJl dHVybiAtRUlOVkFMOwotCi0JcGktPndpZHRoX21tID0gVFBPX1BBTkVMX1dJRFRIOwotCXBpLT5o ZWlnaHRfbW0gPSBUUE9fUEFORUxfSEVJR0hUOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qVFBPIERQ SSBlbmNvZGVyIGhlbHBlciBmdW5jcyovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVy X2hlbHBlcl9mdW5jcwotCQkJCW1kZmxkX3Rwb19kcGlfZW5jb2Rlcl9oZWxwZXJfZnVuY3MgPSB7 Ci0JLmRwbXMgPSBtZGZsZF9kc2lfZHBpX2RwbXMsCi0JLm1vZGVfZml4dXAgPSBtZGZsZF9kc2lf ZHBpX21vZGVfZml4dXAsCi0JLnByZXBhcmUgPSBtZGZsZF9kc2lfZHBpX3ByZXBhcmUsCi0JLm1v ZGVfc2V0ID0gbWRmbGRfZHNpX2RwaV9tb2RlX3NldCwKLQkuY29tbWl0ID0gbWRmbGRfZHNpX2Rw aV9jb21taXQsCi19OwotCi1jb25zdCBzdHJ1Y3QgcGFuZWxfZnVuY3MgbWRmbGRfdHBvX3ZpZF9m dW5jcyA9IHsKLQkuZW5jb2Rlcl9oZWxwZXJfZnVuY3MgPSAmbWRmbGRfdHBvX2RwaV9lbmNvZGVy X2hlbHBlcl9mdW5jcywKLQkuZ2V0X2NvbmZpZ19tb2RlID0gJnRwb192aWRfZ2V0X2NvbmZpZ19t b2RlLAotCS5nZXRfcGFuZWxfaW5mbyA9IHRwb192aWRfZ2V0X3BhbmVsX2luZm8sCi19OwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9wc2JfZHJ2LmMgYi9kcml2ZXJzL2dwdS9k cm0vZ21hNTAwL3BzYl9kcnYuYwppbmRleCBhMTlmNjBkNDAzOTQuLmIwODNiM2Y4MTViOSAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9wc2JfZHJ2LmMKKysrIGIvZHJpdmVycy9n cHUvZHJtL2dtYTUwMC9wc2JfZHJ2LmMKQEAgLTQ2LDggKzQ2LDYgQEAgc3RhdGljIGludCBwc2Jf cGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9p ZCAqZW50KTsKICAqIFBvd2VyVlIgU0dYNTM1ICAgIC0gUG91bHNibyAgICAtIEludGVsIEdNQSA1 MDAsIEludGVsIEF0b20gWjV4eAogICogUG93ZXJWUiBTR1g1MzUgICAgLSBNb29yZXN0b3duIC0g SW50ZWwgR01BIDYwMAogICogUG93ZXJWUiBTR1g1MzUgICAgLSBPYWt0cmFpbCAgIC0gSW50ZWwg R01BIDYwMCwgSW50ZWwgQXRvbSBaNnh4LCBFNnh4Ci0gKiBQb3dlclZSIFNHWDU0MCAgICAtIE1l ZGZpZWxkICAgLSBJbnRlbCBBdG9tIFoyNDYwCi0gKiBQb3dlclZSIFNHWDU0NE1QMiAtIE1lZGZp ZWxkICAgLQogICogUG93ZXJWUiBTR1g1NDUgICAgLSBDZWRhcnRyYWlsIC0gSW50ZWwgR01BIDM2 MDAsIEludGVsIEF0b20gRDI1MDAsIE4yNjAwCiAgKiBQb3dlclZSIFNHWDU0NSAgICAtIENlZGFy dHJhaWwgLSBJbnRlbCBHTUEgMzY1MCwgSW50ZWwgQXRvbSBEMjU1MCwgRDI3MDAsCiAgKiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOMjgwMApAQCAtNjYsMTYgKzY0LDYgQEAgc3Rh dGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaWlkbGlzdFtdID0gewogCXsgMHg4MDg2 LCAweDQxMDcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIChsb25nKSAmb2FrdHJhaWxf Y2hpcF9vcHMgfSwKIAl7IDB4ODA4NiwgMHg0MTA4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAw LCAwLCAobG9uZykgJm9ha3RyYWlsX2NoaXBfb3BzIH0sCiAjZW5kaWYKLSNpZiBkZWZpbmVkKENP TkZJR19EUk1fTUVERklFTEQpCi0JeyAweDgwODYsIDB4MDEzMCwgUENJX0FOWV9JRCwgUENJX0FO WV9JRCwgMCwgMCwgKGxvbmcpICZtZGZsZF9jaGlwX29wcyB9LAotCXsgMHg4MDg2LCAweDAxMzEs IFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIChsb25nKSAmbWRmbGRfY2hpcF9vcHMgfSwK LQl7IDB4ODA4NiwgMHgwMTMyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAobG9uZykg Jm1kZmxkX2NoaXBfb3BzIH0sCi0JeyAweDgwODYsIDB4MDEzMywgUENJX0FOWV9JRCwgUENJX0FO WV9JRCwgMCwgMCwgKGxvbmcpICZtZGZsZF9jaGlwX29wcyB9LAotCXsgMHg4MDg2LCAweDAxMzQs IFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIChsb25nKSAmbWRmbGRfY2hpcF9vcHMgfSwK LQl7IDB4ODA4NiwgMHgwMTM1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAobG9uZykg Jm1kZmxkX2NoaXBfb3BzIH0sCi0JeyAweDgwODYsIDB4MDEzNiwgUENJX0FOWV9JRCwgUENJX0FO WV9JRCwgMCwgMCwgKGxvbmcpICZtZGZsZF9jaGlwX29wcyB9LAotCXsgMHg4MDg2LCAweDAxMzcs IFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIChsb25nKSAmbWRmbGRfY2hpcF9vcHMgfSwK LSNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX0RSTV9HTUEzNjAwKQogCXsgMHg4MDg2LCAweDBi ZTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIChsb25nKSAmY2R2X2NoaXBfb3BzIH0s CiAJeyAweDgwODYsIDB4MGJlMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgKGxvbmcp ICZjZHZfY2hpcF9vcHMgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvcHNi X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9wc2JfZHJ2LmgKaW5kZXggZDMwM2Y4Mjcx ZjdlLi45MzhmNDY3ZGRmOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvcHNi X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvcHNiX2Rydi5oCkBAIC00MCwxOSAr NDAsMTYgQEAgZW51bSB7CiAJQ0hJUF9QU0JfODEwOCA9IDAsCQkvKiBQb3Vsc2JvICovCiAJQ0hJ UF9QU0JfODEwOSA9IDEsCQkvKiBQb3Vsc2JvICovCiAJQ0hJUF9NUlNUXzQxMDAgPSAyLAkJLyog TW9vcmVzdG93bi9PYWt0cmFpbCAqLwotCUNISVBfTUZMRF8wMTMwID0gMywJCS8qIE1lZGZpZWxk ICovCiB9OwogCiAjZGVmaW5lIElTX1BTQihkcm0pICgodG9fcGNpX2RldigoZHJtKS0+ZGV2KS0+ ZGV2aWNlICYgMHhmZmZlKSA9PSAweDgxMDgpCiAjZGVmaW5lIElTX01SU1QoZHJtKSAoKHRvX3Bj aV9kZXYoKGRybSktPmRldiktPmRldmljZSAmIDB4ZmZmMCkgPT0gMHg0MTAwKQotI2RlZmluZSBJ U19NRkxEKGRybSkgKCh0b19wY2lfZGV2KChkcm0pLT5kZXYpLT5kZXZpY2UgJiAweGZmZjgpID09 IDB4MDEzMCkKICNkZWZpbmUgSVNfQ0RWKGRybSkgKCh0b19wY2lfZGV2KChkcm0pLT5kZXYpLT5k ZXZpY2UgJiAweGZmZjApID09IDB4MGJlMCkKIAogLyogSGFyZHdhcmUgb2Zmc2V0cyAqLwogI2Rl ZmluZSBQU0JfVkRDX09GRlNFVAkJIDB4MDAwMDAwMDAKICNkZWZpbmUgUFNCX1ZEQ19TSVpFCQkg MHgwMDAwODAwMDAKICNkZWZpbmUgTVJTVF9NTUlPX1NJWkUJCSAweDAwMDBDMDAwMAotI2RlZmlu ZSBNREZMRF9NTUlPX1NJWkUgICAgICAgICAgMHgwMDAxMDAwMDAKICNkZWZpbmUgUFNCX1NHWF9T SVpFCQkgMHg4MDAwCiAjZGVmaW5lIFBTQl9TR1hfT0ZGU0VUCQkgMHgwMDA0MDAwMAogI2RlZmlu ZSBNUlNUX1NHWF9PRkZTRVQJCSAweDAwMDgwMDAwCkBAIC0xMDksOCArMTA2LDYgQEAgZW51bSB7 CiAjZGVmaW5lIF9QU0JfRFBTVF9QSVBFQV9GTEFHICAgICAgKDE8PDYpCiAjZGVmaW5lIF9QU0Jf UElQRUFfRVZFTlRfRkxBRyAgICAgKDE8PDYpCiAjZGVmaW5lIF9QU0JfVlNZTkNfUElQRUFfRkxB RwkgICgxPDw3KQotI2RlZmluZSBfTURGTERfTUlQSUFfRkxBRwkgICgxPDwxNikKLSNkZWZpbmUg X01ERkxEX01JUElDX0ZMQUcJICAoMTw8MTcpCiAjZGVmaW5lIF9QU0JfSVJRX0RJU1BfSE9UU1lO QwkgICgxPDwxNykKICNkZWZpbmUgX1BTQl9JUlFfU0dYX0ZMQUcJICAoMTw8MTgpCiAjZGVmaW5l IF9QU0JfSVJRX01TVkRYX0ZMQUcJICAoMTw8MTkpCkBAIC0xMTksMTMgKzExNCw2IEBAIGVudW0g ewogI2RlZmluZSBfUFNCX1BJUEVfRVZFTlRfRkxBRwkoX1BTQl9WU1lOQ19QSVBFQV9GTEFHIHwg XAogCQkJCSBfUFNCX1ZTWU5DX1BJUEVCX0ZMQUcpCiAKLS8qIFRoaXMgZmxhZyBpbmNsdWRlcyBh bGwgdGhlIGRpc3BsYXkgSVJRIGJpdHMgZXhjZXB0cyB0aGUgdmJsYW5rIGlycXMuICovCi0jZGVm aW5lIF9NREZMRF9ESVNQX0FMTF9JUlFfRkxBRyAoX01ERkxEX1BJUEVDX0VWRU5UX0ZMQUcgfCBc Ci0JCQkJICBfTURGTERfUElQRUJfRVZFTlRfRkxBRyB8IFwKLQkJCQkgIF9QU0JfUElQRUFfRVZF TlRfRkxBRyB8IFwKLQkJCQkgIF9QU0JfVlNZTkNfUElQRUFfRkxBRyB8IFwKLQkJCQkgIF9NREZM RF9NSVBJQV9GTEFHIHwgXAotCQkJCSAgX01ERkxEX01JUElDX0ZMQUcpCiAjZGVmaW5lIFBTQl9J TlRfSURFTlRJVFlfUgkgIDB4MjBBNAogI2RlZmluZSBQU0JfSU5UX01BU0tfUgkJICAweDIwQTgK ICNkZWZpbmUgUFNCX0lOVF9FTkFCTEVfUgkgIDB4MjBBMApAQCAtMTkxLDI1ICsxNzksNiBAQCBl bnVtIHsKICNkZWZpbmUgUFNCX1dBVENIRE9HX0RFTEFZIChIWiAqIDIpCiAjZGVmaW5lIFBTQl9M SURfREVMQVkgKEhaIC8gMTApCiAKLSNkZWZpbmUgTURGTERfUE5XX0IwIDB4MDQKLSNkZWZpbmUg TURGTERfUE5XX0MwIDB4MDgKLQotI2RlZmluZSBNREZMRF9EU1JfMkRfM0RfMCAJKDEgPDwgMCkK LSNkZWZpbmUgTURGTERfRFNSXzJEXzNEXzIgCSgxIDw8IDEpCi0jZGVmaW5lIE1ERkxEX0RTUl9D VVJTT1JfMCAJKDEgPDwgMikKLSNkZWZpbmUgTURGTERfRFNSX0NVUlNPUl8yCSgxIDw8IDMpCi0j ZGVmaW5lIE1ERkxEX0RTUl9PVkVSTEFZXzAgCSgxIDw8IDQpCi0jZGVmaW5lIE1ERkxEX0RTUl9P VkVSTEFZXzIgCSgxIDw8IDUpCi0jZGVmaW5lIE1ERkxEX0RTUl9NSVBJX0NPTlRST0wJKDEgPDwg NikKLSNkZWZpbmUgTURGTERfRFNSX0RBTUFHRV9NQVNLXzAJKCgxIDw8IDApIHwgKDEgPDwgMikg fCAoMSA8PCA0KSkKLSNkZWZpbmUgTURGTERfRFNSX0RBTUFHRV9NQVNLXzIJKCgxIDw8IDEpIHwg KDEgPDwgMykgfCAoMSA8PCA1KSkKLSNkZWZpbmUgTURGTERfRFNSXzJEXzNEIAkoTURGTERfRFNS XzJEXzNEXzAgfCBNREZMRF9EU1JfMkRfM0RfMikKLQotI2RlZmluZSBNREZMRF9EU1JfUlIJCTQ1 Ci0jZGVmaW5lIE1ERkxEX0RQVV9FTkFCTEUgCSgxIDw8IDMxKQotI2RlZmluZSBNREZMRF9EU1Jf RlVMTFNDUkVFTiAJKDEgPDwgMzApCi0jZGVmaW5lIE1ERkxEX0RTUl9ERUxBWQkJKEhaIC8gTURG TERfRFNSX1JSKQotCiAjZGVmaW5lIFBTQl9QV1JfU1RBVEVfT04JCTEKICNkZWZpbmUgUFNCX1BX Ul9TVEFURV9PRkYJCTIKIApAQCAtMzgyLDE2ICszNTEsNiBAQCBzdHJ1Y3QgcHNiX3N0YXRlIHsK IAl1aW50MzJfdCBzYXZlUFdNX0NPTlRST0xfTE9HSUM7CiB9OwogCi1zdHJ1Y3QgbWVkZmllbGRf c3RhdGUgewotCXVpbnQzMl90IHNhdmVNSVBJOwotCXVpbnQzMl90IHNhdmVNSVBJX0M7Ci0KLQl1 aW50MzJfdCBzYXZlUEZJVF9DT05UUk9MOwotCXVpbnQzMl90IHNhdmVQRklUX1BHTV9SQVRJT1M7 Ci0JdWludDMyX3Qgc2F2ZUhETUlQSFlNSVNDQ1RMOwotCXVpbnQzMl90IHNhdmVIRE1JQl9DT05U Uk9MOwotfTsKLQogc3RydWN0IGNkdl9zdGF0ZSB7CiAJdWludDMyX3Qgc2F2ZURTUENMS19HQVRF X0Q7CiAJdWludDMyX3Qgc2F2ZVJBTUNMS19HQVRFX0Q7CkBAIC00MTcsNyArMzc2LDYgQEAgc3Ry dWN0IHBzYl9zYXZlX2FyZWEgewogCXVpbnQzMl90IHNhdmVWQlQ7CiAJdW5pb24gewogCSAgICAg ICAgc3RydWN0IHBzYl9zdGF0ZSBwc2I7Ci0JCXN0cnVjdCBtZWRmaWVsZF9zdGF0ZSBtZGZsZDsK IAkJc3RydWN0IGNkdl9zdGF0ZSBjZHY7CiAJfTsKIAl1aW50MzJfdCBzYXZlQkxDX1BXTV9DVEwy OwpAQCAtNTgzLDE1ICs1NDEsMTIgQEAgc3RydWN0IGRybV9wc2JfcHJpdmF0ZSB7CiAJYm9vbCBk c3JfZW5hYmxlOwogCXUzMiBkc3JfZmJfdXBkYXRlOwogCWJvb2wgZHBpX3BhbmVsX29uWzNdOwot CXZvaWQgKmRzaV9jb25maWdzWzJdOwogCXUzMiBicHA7CiAJdTMyIGJwcDI7CiAKIAl1MzIgcGlw ZWNvbmZbM107CiAJdTMyIGRzcGNudHJbM107CiAKLQlpbnQgbWRmbGRfcGFuZWxfaWQ7Ci0KIAli b29sIGRwbGxhXzk2bWh6OwkvKiBEUExMIGRhdGEgZnJvbSB0aGUgVkJUICovCiAKIAlzdHJ1Y3Qg ewpAQCAtNzM3LDkgKzY5Miw2IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgcHNiX29wcyBwc2JfY2hp cF9vcHM7CiAvKiBvYWt0cmFpbF9kZXZpY2UuYyAqLwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBwc2Jf b3BzIG9ha3RyYWlsX2NoaXBfb3BzOwogCi0vKiBtZGxmZF9kZXZpY2UuYyAqLwotZXh0ZXJuIGNv bnN0IHN0cnVjdCBwc2Jfb3BzIG1kZmxkX2NoaXBfb3BzOwotCiAvKiBjZHZfZGV2aWNlLmMgKi8K IGV4dGVybiBjb25zdCBzdHJ1Y3QgcHNiX29wcyBjZHZfY2hpcF9vcHM7CiAKQEAgLTc3OSwyNSAr NzMxLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIE1SU1RfTVNHX1dSSVRFMzIoaW50IGRvbWFpbiwg dWludCBwb3J0LCB1aW50IG9mZnNldCwKIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBjaV9yb290 LCAweEQwLCBtY3IpOwogCXBjaV9kZXZfcHV0KHBjaV9yb290KTsKIH0KLXN0YXRpYyBpbmxpbmUg dTMyIE1ERkxEX01TR19SRUFEMzIoaW50IGRvbWFpbiwgdWludCBwb3J0LCB1aW50IG9mZnNldCkK LXsKLQlpbnQgbWNyID0gKDB4MTA8PDI0KSB8IChwb3J0IDw8IDE2KSB8IChvZmZzZXQgPDwgOCk7 Ci0JdWludDMyX3QgcmV0X3ZhbCA9IDA7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaV9yb290ID0gcGNp X2dldF9kb21haW5fYnVzX2FuZF9zbG90KGRvbWFpbiwgMCwgMCk7Ci0JcGNpX3dyaXRlX2NvbmZp Z19kd29yZChwY2lfcm9vdCwgMHhEMCwgbWNyKTsKLQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGNp X3Jvb3QsIDB4RDQsICZyZXRfdmFsKTsKLQlwY2lfZGV2X3B1dChwY2lfcm9vdCk7Ci0JcmV0dXJu IHJldF92YWw7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgTURGTERfTVNHX1dSSVRFMzIoaW50IGRv bWFpbiwgdWludCBwb3J0LCB1aW50IG9mZnNldCwKLQkJCQkgICAgIHUzMiB2YWx1ZSkKLXsKLQlp bnQgbWNyID0gKDB4MTE8PDI0KSB8IChwb3J0IDw8IDE2KSB8IChvZmZzZXQgPDwgOCkgfCAweEYw OwotCXN0cnVjdCBwY2lfZGV2ICpwY2lfcm9vdCA9IHBjaV9nZXRfZG9tYWluX2J1c19hbmRfc2xv dChkb21haW4sIDAsIDApOwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGNpX3Jvb3QsIDB4RDQs IHZhbHVlKTsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBjaV9yb290LCAweEQwLCBtY3IpOwot CXBjaV9kZXZfcHV0KHBjaV9yb290KTsKLX0KIAogc3RhdGljIGlubGluZSB1aW50MzJfdCBSRUdJ U1RFUl9SRUFEKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90IHJlZykKIHsKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvcHNiX2ludGVsX2Rydi5oIGIvZHJpdmVycy9n cHUvZHJtL2dtYTUwMC9wc2JfaW50ZWxfZHJ2LmgKaW5kZXggNTM0MDIyNWQ2OTk3Li4yZGYzMDIy M2E3ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvcHNiX2ludGVsX2Rydi5o CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvcHNiX2ludGVsX2Rydi5oCkBAIC0xOTUsMTEg KzE5NSw3IEBAIGV4dGVybiB2b2lkIHBzYl9pbnRlbF9sdmRzX3NldF9icmlnaHRuZXNzKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsIGludCBsZXZlbCk7CiBleHRlcm4gdm9pZCBvYWt0cmFpbF9sdmRz X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCSAgIHN0cnVjdCBwc2JfaW50ZWxfbW9k ZV9kZXZpY2UgKm1vZGVfZGV2KTsKIGV4dGVybiB2b2lkIG9ha3RyYWlsX3dhaXRfZm9yX0lOVFJf UEtUX1NFTlQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Ci1leHRlcm4gdm9pZCBvYWt0cmFpbF9k c2lfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJICAgc3RydWN0IHBzYl9pbnRlbF9t b2RlX2RldmljZSAqbW9kZV9kZXYpOwogZXh0ZXJuIHZvaWQgb2FrdHJhaWxfbHZkc19pMmNfaW5p dChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpOwotZXh0ZXJuIHZvaWQgbWlkX2RzaV9pbml0 KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCSAgICBzdHJ1Y3QgcHNiX2ludGVsX21vZGVfZGV2 aWNlICptb2RlX2RldiwgaW50IGRzaV9udW0pOwogCiBleHRlcm4gc3RydWN0IGRybV9lbmNvZGVy ICpnbWFfYmVzdF9lbmNvZGVyKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpOwogZXh0 ZXJuIHZvaWQgZ21hX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2RlcihzdHJ1Y3QgZ21hX2Nvbm5lY3Rv ciAqY29ubmVjdG9yLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9wc2JfaW50 ZWxfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL3BzYl9pbnRlbF9yZWcuaAppbmRleCA4 MzVjYzkyNGM0NWEuLjM2NGVhOGYwNmY5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2dt YTUwMC9wc2JfaW50ZWxfcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9wc2JfaW50 ZWxfcmVnLmgKQEAgLTU5NSw3ICs1OTUsNyBAQCBzdHJ1Y3QgZHBzdF9ndWFyZGJhbmQgewogI2Rl ZmluZSBQSVBFX1BJWEVMX01BU0sJCTB4MDBmZmZmZmYKICNkZWZpbmUgUElQRV9QSVhFTF9TSElG VAkwCiAKLSNkZWZpbmUgRldfQkxDX1NFTEYJCTB4MjBlMCAKKyNkZWZpbmUgRldfQkxDX1NFTEYJ CTB4MjBlMAogI2RlZmluZSBGV19CTENfU0VMRl9FTiAgICAgICAgICAoMTw8MTUpCiAKICNkZWZp bmUgRFNQQVJCCQkJMHg3MDAzMApAQCAtNzg5LDE3ICs3ODksOSBAQCBzdHJ1Y3QgZHBzdF9ndWFy ZGJhbmQgewogICogTU9PUkVTVE9XTiBkZWx0YSByZWdpc3RlcnMKICAqLwogI2RlZmluZSBNUlNU X0RQTExfQQkJMHgwZjAxNAotI2RlZmluZSBNREZMRF9EUExMX0IJCTB4MGYwMTgKLSNkZWZpbmUg TURGTERfSU5QVVRfUkVGX1NFTAkJKDEgPDwgMTQpCi0jZGVmaW5lIE1ERkxEX1ZDT19TRUwJCQko MSA8PCAxNikKICNkZWZpbmUgRFBMTEFfTU9ERV9MVkRTCQkJKDIgPDwgMjYpCS8qIG1yc3QgKi8K LSNkZWZpbmUgTURGTERfUExMX0xBVENIRU4JCSgxIDw8IDI4KQotI2RlZmluZSBNREZMRF9QV1Jf R0FURV9FTgkJKDEgPDwgMzApCi0jZGVmaW5lIE1ERkxEX1AxX01BU0sJCQkoMHgxRkYgPDwgMTcp CiAjZGVmaW5lIE1SU1RfRlBBMAkJMHgwZjA0MAogI2RlZmluZSBNUlNUX0ZQQTEJCTB4MGYwNDQK LSNkZWZpbmUgTURGTERfRFBMTF9ESVYwCQkweDBmMDQ4Ci0jZGVmaW5lIE1ERkxEX0RQTExfRElW MQkJMHgwZjA0YwogI2RlZmluZSBNUlNUX1BFUkZfTU9ERQkJMHgwMjBmNAogCiAvKgpAQCAtODQ4 LDcgKzg0MCw2IEBAIHN0cnVjdCBkcHN0X2d1YXJkYmFuZCB7CiAKICNkZWZpbmUgTVJTVF9EU1BB QkFTRQkJMHg3MDE5YwogI2RlZmluZSBNUlNUX0RTUEJCQVNFCQkweDcxMTljCi0jZGVmaW5lIE1E RkxEX0RTUENCQVNFCQkweDcyMTljCiAKIC8qCiAgKiBNb29yZXN0b3duIHJlZ2lzdGVycy4KQEAg LTkzMCw3ICs5MjEsNiBAQCBzdHJ1Y3QgZHBzdF9ndWFyZGJhbmQgewogI2RlZmluZSBERVZJQ0Vf UkVTRVRfUkVHCQkweGIwMUMKICNkZWZpbmUgRFBJX1JFU09MVVRJT05fUkVHCQkweGIwMjAKICNk ZWZpbmUgUkVTX1ZfUE9TCQkJCTB4MTAKLSNkZWZpbmUgREJJX1JFU09MVVRJT05fUkVHCQkweGIw MjQgLyogUmVzZXJ2ZWQgZm9yIE1ERkxEICovCiAjZGVmaW5lIEhPUklaX1NZTkNfUEFEX0NPVU5U X1JFRwkweGIwMjgKICNkZWZpbmUgSE9SSVpfQkFDS19QT1JDSF9DT1VOVF9SRUcJMHhiMDJDCiAj ZGVmaW5lIEhPUklaX0ZST05UX1BPUkNIX0NPVU5UX1JFRwkweGIwMzAKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9nbWE1MDAvcHNiX2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9w c2JfaXJxLmMKaW5kZXggNWNjZWVhOWJlNTM0Li5hZTliMTAwZTY0MGIgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9nbWE1MDAvcHNiX2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9nbWE1 MDAvcHNiX2lycS5jCkBAIC0xMCw3ICsxMCw2IEBACiAKICNpbmNsdWRlIDxkcm0vZHJtX3ZibGFu ay5oPgogCi0jaW5jbHVkZSAibWRmbGRfb3V0cHV0LmgiCiAjaW5jbHVkZSAicG93ZXIuaCIKICNp bmNsdWRlICJwc2JfZHJ2LmgiCiAjaW5jbHVkZSAicHNiX2ludGVsX3JlZy5oIgpAQCAtMTY0LDgg KzE2Myw3IEBAIHN0YXRpYyB2b2lkIG1pZF9waXBlX2V2ZW50X2hhbmRsZXIoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwgaW50IHBpcGUpCiAJCSIlcywgY2FuJ3QgY2xlYXIgc3RhdHVzIGJpdHMgZm9y IHBpcGUgJWQsIGl0cyB2YWx1ZSA9IDB4JXguXG4iLAogCQlfX2Z1bmNfXywgcGlwZSwgUFNCX1JW REMzMihwaXBlX3N0YXRfcmVnKSk7CiAKLQlpZiAocGlwZV9zdGF0X3ZhbCAmIFBJUEVfVkJMQU5L X1NUQVRVUyB8fAotCSAgICAoSVNfTUZMRChkZXYpICYmIHBpcGVfc3RhdF92YWwgJiBQSVBFX1RF X1NUQVRVUykpIHsKKwlpZiAocGlwZV9zdGF0X3ZhbCAmIFBJUEVfVkJMQU5LX1NUQVRVUykgewog CQlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBkcm1fY3J0Y19mcm9tX2luZGV4KGRldiwgcGlwZSk7 CiAJCXN0cnVjdCBnbWFfY3J0YyAqZ21hX2NydGMgPSB0b19nbWFfY3J0YyhjcnRjKTsKIAkJdW5z aWduZWQgbG9uZyBmbGFnczsKQEAgLTI2MywxMSArMjYxLDYgQEAgaXJxcmV0dXJuX3QgcHNiX2ly cV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZykKIAlpZiAodmRjX3N0YXQgJiAoX1BTQl9QSVBF X0VWRU5UX0ZMQUd8X1BTQl9JUlFfQVNMRSkpCiAJCWRzcF9pbnQgPSAxOwogCi0JLyogRklYTUU6 IEhhbmRsZSBNZWRmaWVsZAotCWlmICh2ZGNfc3RhdCAmIF9NREZMRF9ESVNQX0FMTF9JUlFfRkxB RykKLQkJZHNwX2ludCA9IDE7Ci0JKi8KLQogCWlmICh2ZGNfc3RhdCAmIF9QU0JfSVJRX1NHWF9G TEFHKQogCQlzZ3hfaW50ID0gMTsKIAlpZiAodmRjX3N0YXQgJiBfUFNCX0lSUV9ESVNQX0hPVFNZ TkMpCkBAIC0zMjUsMTMgKzMxOCw2IEBAIHZvaWQgcHNiX2lycV9wcmVpbnN0YWxsKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpCiAJaWYgKGRldi0+dmJsYW5rWzFdLmVuYWJsZWQpCiAJCWRldl9wcml2 LT52ZGNfaXJxX21hc2sgfD0gX1BTQl9WU1lOQ19QSVBFQl9GTEFHOwogCi0JLyogRklYTUU6IEhh bmRsZSBNZWRmaWVsZCBpcnEgbWFzawotCWlmIChkZXYtPnZibGFua1sxXS5lbmFibGVkKQotCQlk ZXZfcHJpdi0+dmRjX2lycV9tYXNrIHw9IF9NREZMRF9QSVBFQl9FVkVOVF9GTEFHOwotCWlmIChk ZXYtPnZibGFua1syXS5lbmFibGVkKQotCQlkZXZfcHJpdi0+dmRjX2lycV9tYXNrIHw9IF9NREZM RF9QSVBFQ19FVkVOVF9GTEFHOwotCSovCi0KIAkvKiBSZXZpc2l0IHRoaXMgYXJlYSAtIHdhbnQg cGVyIGRldmljZSBtYXNrcyA/ICovCiAJaWYgKGRldl9wcml2LT5vcHMtPmhvdHBsdWcpCiAJCWRl dl9wcml2LT52ZGNfaXJxX21hc2sgfD0gX1BTQl9JUlFfRElTUF9IT1RTWU5DOwpAQCAtNTA0LDEx ICs0OTAsNiBAQCBpbnQgcHNiX2VuYWJsZV92Ymxhbmsoc3RydWN0IGRybV9jcnRjICpjcnRjKQog CXVpbnQzMl90IHJlZ192YWwgPSAwOwogCXVpbnQzMl90IHBpcGVjb25mX3JlZyA9IG1pZF9waXBl Y29uZihwaXBlKTsKIAotCS8qIE1lZGZpZWxkIGlzIGRpZmZlcmVudCAtIHdlIHNob3VsZCBwZXJo YXBzIGV4dHJhY3Qgb3V0IHZibGFuawotCSAgIGFuZCBibGFja2xpZ2h0IGV0YyBvcHMgKi8KLQlp ZiAoSVNfTUZMRChkZXYpKQotCQlyZXR1cm4gbWRmbGRfZW5hYmxlX3RlKGRldiwgcGlwZSk7Ci0K IAlpZiAoZ21hX3Bvd2VyX2JlZ2luKGRldiwgZmFsc2UpKSB7CiAJCXJlZ192YWwgPSBSRUdfUkVB RChwaXBlY29uZl9yZWcpOwogCQlnbWFfcG93ZXJfZW5kKGRldik7CkBAIC01NDMsOCArNTI0LDYg QEAgdm9pZCBwc2JfZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRybV9jcnRjICpjcnRjKQogCXN0cnVj dCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAl1bnNpZ25l ZCBsb25nIGlycWZsYWdzOwogCi0JaWYgKElTX01GTEQoZGV2KSkKLQkJbWRmbGRfZGlzYWJsZV90 ZShkZXYsIHBpcGUpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+aXJxbWFza19sb2Nr LCBpcnFmbGFncyk7CiAKIAlpZiAocGlwZSA9PSAwKQpAQCAtNTU5LDU1ICs1MzgsNiBAQCB2b2lk IHBzYl9kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiAJc3Bpbl91bmxvY2tf aXJxcmVzdG9yZSgmZGV2X3ByaXYtPmlycW1hc2tfbG9jaywgaXJxZmxhZ3MpOwogfQogCi0vKgot ICogSXQgaXMgdXNlZCB0byBlbmFibGUgVEUgaW50ZXJydXB0Ci0gKi8KLWludCBtZGZsZF9lbmFi bGVfdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHBpcGUpCi17Ci0Jc3RydWN0IGRybV9w c2JfcHJpdmF0ZSAqZGV2X3ByaXYgPQotCQkoc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqKSBkZXYt PmRldl9wcml2YXRlOwotCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7Ci0JdWludDMyX3QgcmVnX3Zh bCA9IDA7Ci0JdWludDMyX3QgcGlwZWNvbmZfcmVnID0gbWlkX3BpcGVjb25mKHBpcGUpOwotCi0J aWYgKGdtYV9wb3dlcl9iZWdpbihkZXYsIGZhbHNlKSkgewotCQlyZWdfdmFsID0gUkVHX1JFQUQo cGlwZWNvbmZfcmVnKTsKLQkJZ21hX3Bvd2VyX2VuZChkZXYpOwotCX0KLQotCWlmICghKHJlZ192 YWwgJiBQSVBFQUNPTkZfRU5BQkxFKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzcGluX2xvY2tf aXJxc2F2ZSgmZGV2X3ByaXYtPmlycW1hc2tfbG9jaywgaXJxZmxhZ3MpOwotCi0JbWlkX2VuYWJs ZV9waXBlX2V2ZW50KGRldl9wcml2LCBwaXBlKTsKLQlwc2JfZW5hYmxlX3BpcGVzdGF0KGRldl9w cml2LCBwaXBlLCBQSVBFX1RFX0VOQUJMRSk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZk ZXZfcHJpdi0+aXJxbWFza19sb2NrLCBpcnFmbGFncyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoK LSAqIEl0IGlzIHVzZWQgdG8gZGlzYWJsZSBURSBpbnRlcnJ1cHQKLSAqLwotdm9pZCBtZGZsZF9k aXNhYmxlX3RlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwaXBlKQotewotCXN0cnVjdCBk cm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0KLQkJKHN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKikg ZGV2LT5kZXZfcHJpdmF0ZTsKLQl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwotCi0JaWYgKCFkZXZf cHJpdi0+ZHNyX2VuYWJsZSkKLQkJcmV0dXJuOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9w cml2LT5pcnFtYXNrX2xvY2ssIGlycWZsYWdzKTsKLQotCW1pZF9kaXNhYmxlX3BpcGVfZXZlbnQo ZGV2X3ByaXYsIHBpcGUpOwotCXBzYl9kaXNhYmxlX3BpcGVzdGF0KGRldl9wcml2LCBwaXBlLCBQ SVBFX1RFX0VOQUJMRSk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+aXJx bWFza19sb2NrLCBpcnFmbGFncyk7Ci19Ci0KIC8qIENhbGxlZCBmcm9tIGRybSBnZW5lcmljIGNv ZGUsIHBhc3NlZCBhICdjcnRjJywgd2hpY2gKICAqIHdlIHVzZSBhcyBhIHBpcGUgaW5kZXgKICAq LwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9wc2JfaXJxLmggYi9kcml2ZXJz L2dwdS9kcm0vZ21hNTAwL3BzYl9pcnEuaAppbmRleCA0ZjczOTk4ODQ4ZDEuLjFiNTc3ZmE3MDEw YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9wc2JfaXJxLmgKKysrIGIvZHJp dmVycy9ncHUvZHJtL2dtYTUwMC9wc2JfaXJxLmgKQEAgLTMxLDYgKzMxLDQgQEAgaW50ICBwc2Jf ZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwogdm9pZCBwc2JfZGlzYWJsZV92 Ymxhbmsoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKIHUzMiAgcHNiX2dldF92YmxhbmtfY291bnRl cihzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwogCi1pbnQgbWRmbGRfZW5hYmxlX3RlKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsIGludCBwaXBlKTsKLXZvaWQgbWRmbGRfZGlzYWJsZV90ZShzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LCBpbnQgcGlwZSk7CiAjZW5kaWYgLyogX1BTQl9JUlFfSF8gKi8KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvcHNiX3JlZy5oIGIvZHJpdmVycy9ncHUv ZHJtL2dtYTUwMC9wc2JfcmVnLmgKaW5kZXggZmIyMmJhYzViYjc0Li4yYTIyOWEwZWYzNmMgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvcHNiX3JlZy5oCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9nbWE1MDAvcHNiX3JlZy5oCkBAIC01NTAsMjEgKzU1MCw3IEBACiAjZGVmaW5lIFBT Ql9QTV9TU0MJCQkweDIwCiAjZGVmaW5lIFBTQl9QTV9TU1MJCQkweDMwCiAjZGVmaW5lIFBTQl9Q V1JHVF9ESVNQTEFZX01BU0sJCTB4YyAvKm9uIGEgZGlmZmVyZW50IEJBIHRoYW4gdmlkZW8vZ2Z4 Ki8KLSNkZWZpbmUgTURGTERfUFdSR1RfRElTUExBWV9BX0NOVFIJMHgwMDAwMDAwYwotI2RlZmlu ZSBNREZMRF9QV1JHVF9ESVNQTEFZX0JfQ05UUgkweDAwMDBjMDAwCi0jZGVmaW5lIE1ERkxEX1BX UkdUX0RJU1BMQVlfQ19DTlRSCTB4MDAwMzAwMDAKLSNkZWZpbmUgTURGTERfUFdSR1RfRElTUF9N SVBJX0NOVFIJMHgwMDBjMDAwMAotI2RlZmluZSBNREZMRF9QV1JHVF9ESVNQTEFZX0NOVFIgICAg KE1ERkxEX1BXUkdUX0RJU1BMQVlfQV9DTlRSIHwgTURGTERfUFdSR1RfRElTUExBWV9CX0NOVFIg fCBNREZMRF9QV1JHVF9ESVNQTEFZX0NfQ05UUiB8IE1ERkxEX1BXUkdUX0RJU1BfTUlQSV9DTlRS KSAvKiAweDAwMGZjMDBjICovCiAvKiBEaXNwbGF5IFNTUyByZWdpc3RlciBiaXRzIGFyZSBkaWZm ZXJlbnQgaW4gQTAgdnMuIEIwICovCiAjZGVmaW5lIFBTQl9QV1JHVF9HRlhfTUFTSwkJMHgzCi0j ZGVmaW5lIE1ERkxEX1BXUkdUX0RJU1BMQVlfQV9TVFMJMHgwMDAwMDBjMAotI2RlZmluZSBNREZM RF9QV1JHVF9ESVNQTEFZX0JfU1RTCTB4MDAwMDAzMDAKLSNkZWZpbmUgTURGTERfUFdSR1RfRElT UExBWV9DX1NUUwkweDAwMDAwYzAwCiAjZGVmaW5lIFBTQl9QV1JHVF9HRlhfTUFTS19CMAkJMHhj MwotI2RlZmluZSBNREZMRF9QV1JHVF9ESVNQTEFZX0FfU1RTX0IwCTB4MDAwMDAwMGMKLSNkZWZp bmUgTURGTERfUFdSR1RfRElTUExBWV9CX1NUU19CMAkweDAwMDBjMDAwCi0jZGVmaW5lIE1ERkxE X1BXUkdUX0RJU1BMQVlfQ19TVFNfQjAJMHgwMDAzMDAwMAotI2RlZmluZSBNREZMRF9QV1JHVF9E SVNQX01JUElfU1RTCTB4MDAwYzAwMDAKLSNkZWZpbmUgTURGTERfUFdSR1RfRElTUExBWV9TVFNf QTAgICAgKE1ERkxEX1BXUkdUX0RJU1BMQVlfQV9TVFMgfCBNREZMRF9QV1JHVF9ESVNQTEFZX0Jf U1RTIHwgTURGTERfUFdSR1RfRElTUExBWV9DX1NUUyB8IE1ERkxEX1BXUkdUX0RJU1BfTUlQSV9T VFMpIC8qIDB4MDAwZmMwMGMgKi8KLSNkZWZpbmUgTURGTERfUFdSR1RfRElTUExBWV9TVFNfQjAg ICAgKE1ERkxEX1BXUkdUX0RJU1BMQVlfQV9TVFNfQjAgfCBNREZMRF9QV1JHVF9ESVNQTEFZX0Jf U1RTX0IwIHwgTURGTERfUFdSR1RfRElTUExBWV9DX1NUU19CMCB8IE1ERkxEX1BXUkdUX0RJU1Bf TUlQSV9TVFMpIC8qIDB4MDAwZmMwMGMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2dtYTUwMC90YzM1ODc2eC1kc2ktbHZkcy5jIGIvZHJpdmVycy9ncHUvZHJtL2dtYTUw MC90YzM1ODc2eC1kc2ktbHZkcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OWQy ZmZjMmZlZDkuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL3RjMzU4 NzZ4LWRzaS1sdmRzLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MDUgKzAsMCBAQAotLyoKLSAqIENv cHlyaWdodCDCqSAyMDExIEludGVsIENvcnBvcmF0aW9uCi0gKgotICogUGVybWlzc2lvbiBpcyBo ZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEK LSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZp bGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0 IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRz IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGlj ZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJt aXQgcGVyc29ucyB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNv LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUg Y29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRo ZSBuZXh0Ci0gKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Ig c3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCi0gKiBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09G VFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwg RVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSAqIFRI RSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBE QU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENP TlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwotICogRlJPTSwgT1VUIE9GIE9SIElO IENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgotICogREVB TElOR1MgSU4gVEhFIFNPRlRXQVJFLgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZGVsYXku aD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4K LSNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVyLmg+Ci0KLSNpbmNsdWRlIDxhc20vaW50ZWxf c2N1X2lwYy5oPgotCi0jaW5jbHVkZSAibWRmbGRfZHNpX2RwaS5oIgotI2luY2x1ZGUgIm1kZmxk X2RzaV9wa2dfc2VuZGVyLmgiCi0jaW5jbHVkZSAibWRmbGRfb3V0cHV0LmgiCi0jaW5jbHVkZSAi dGMzNTg3NngtZHNpLWx2ZHMuaCIKLQotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50ICp0YzM1ODc2 eF9jbGllbnQ7Ci1zdGF0aWMgc3RydWN0IGkyY19jbGllbnQgKmNtaV9sY2RfaTJjX2NsaWVudDsK LS8qIFBhbmVsIEdQSU9zICovCi1zdGF0aWMgc3RydWN0IGdwaW9fZGVzYyAqYnJpZGdlX3Jlc2V0 Owotc3RhdGljIHN0cnVjdCBncGlvX2Rlc2MgKmJyaWRnZV9ibF9lbmFibGU7Ci1zdGF0aWMgc3Ry dWN0IGdwaW9fZGVzYyAqYmFja2xpZ2h0X3ZvbHRhZ2U7Ci0KLQotI2RlZmluZSBGTERfTUFTSyhz dGFydCwgZW5kKQkoKCgxIDw8ICgoc3RhcnQpIC0gKGVuZCkgKyAxKSkgLSAxKSA8PCAoZW5kKSkK LSNkZWZpbmUgRkxEX1ZBTCh2YWwsIHN0YXJ0LCBlbmQpICgoKHZhbCkgPDwgKGVuZCkpICYgRkxE X01BU0soc3RhcnQsIGVuZCkpCi0KLS8qIERTSSBELVBIWSBMYXllciBSZWdpc3RlcnMgKi8KLSNk ZWZpbmUgRDBXX0RQSFlDT05UVFgJCTB4MDAwNAotI2RlZmluZSBDTFdfRFBIWUNPTlRSWAkJMHgw MDIwCi0jZGVmaW5lIEQwV19EUEhZQ09OVFJYCQkweDAwMjQKLSNkZWZpbmUgRDFXX0RQSFlDT05U UlgJCTB4MDAyOAotI2RlZmluZSBEMldfRFBIWUNPTlRSWAkJMHgwMDJDCi0jZGVmaW5lIEQzV19E UEhZQ09OVFJYCQkweDAwMzAKLSNkZWZpbmUgQ09NX0RQSFlDT05UUlgJCTB4MDAzOAotI2RlZmlu ZSBDTFdfQ05UUkwJCTB4MDA0MAotI2RlZmluZSBEMFdfQ05UUkwJCTB4MDA0NAotI2RlZmluZSBE MVdfQ05UUkwJCTB4MDA0OAotI2RlZmluZSBEMldfQ05UUkwJCTB4MDA0QwotI2RlZmluZSBEM1df Q05UUkwJCTB4MDA1MAotI2RlZmluZSBERlRNT0RFX0NOVFJMCQkweDAwNTQKLQotLyogRFNJIFBQ SSBMYXllciBSZWdpc3RlcnMgKi8KLSNkZWZpbmUgUFBJX1NUQVJUUFBJCQkweDAxMDQKLSNkZWZp bmUgUFBJX0JVU1lQUEkJCTB4MDEwOAotI2RlZmluZSBQUElfTElORUlOSVRDTlQJCTB4MDExMAot I2RlZmluZSBQUElfTFBUWFRJTUVDTlQJCTB4MDExNAotI2RlZmluZSBQUElfTEFORUVOQUJMRQkJ MHgwMTM0Ci0jZGVmaW5lIFBQSV9UWF9SWF9UQQkJMHgwMTNDCi0jZGVmaW5lIFBQSV9DTFNfQVRN UgkJMHgwMTQwCi0jZGVmaW5lIFBQSV9EMFNfQVRNUgkJMHgwMTQ0Ci0jZGVmaW5lIFBQSV9EMVNf QVRNUgkJMHgwMTQ4Ci0jZGVmaW5lIFBQSV9EMlNfQVRNUgkJMHgwMTRDCi0jZGVmaW5lIFBQSV9E M1NfQVRNUgkJMHgwMTUwCi0jZGVmaW5lIFBQSV9EMFNfQ0xSU0lQT0NPVU5UCTB4MDE2NAotI2Rl ZmluZSBQUElfRDFTX0NMUlNJUE9DT1VOVAkweDAxNjgKLSNkZWZpbmUgUFBJX0QyU19DTFJTSVBP Q09VTlQJMHgwMTZDCi0jZGVmaW5lIFBQSV9EM1NfQ0xSU0lQT0NPVU5UCTB4MDE3MAotI2RlZmlu ZSBDTFNfUFJFCQkJMHgwMTgwCi0jZGVmaW5lIEQwU19QUkUJCQkweDAxODQKLSNkZWZpbmUgRDFT X1BSRQkJCTB4MDE4OAotI2RlZmluZSBEMlNfUFJFCQkJMHgwMThDCi0jZGVmaW5lIEQzU19QUkUJ CQkweDAxOTAKLSNkZWZpbmUgQ0xTX1BSRVAJCTB4MDFBMAotI2RlZmluZSBEMFNfUFJFUAkJMHgw MUE0Ci0jZGVmaW5lIEQxU19QUkVQCQkweDAxQTgKLSNkZWZpbmUgRDJTX1BSRVAJCTB4MDFBQwot I2RlZmluZSBEM1NfUFJFUAkJMHgwMUIwCi0jZGVmaW5lIENMU19aRVJPCQkweDAxQzAKLSNkZWZp bmUgRDBTX1pFUk8JCTB4MDFDNAotI2RlZmluZSBEMVNfWkVSTwkJMHgwMUM4Ci0jZGVmaW5lIEQy U19aRVJPCQkweDAxQ0MKLSNkZWZpbmUgRDNTX1pFUk8JCTB4MDFEMAotI2RlZmluZSBQUElfQ0xS RkxHCQkweDAxRTAKLSNkZWZpbmUgUFBJX0NMUlNJUE8JCTB4MDFFNAotI2RlZmluZSBIU1RJTUVP VVQJCTB4MDFGMAotI2RlZmluZSBIU1RJTUVPVVRFTkFCTEUJCTB4MDFGNAotCi0vKiBEU0kgUHJv dG9jb2wgTGF5ZXIgUmVnaXN0ZXJzICovCi0jZGVmaW5lIERTSV9TVEFSVERTSQkJMHgwMjA0Ci0j ZGVmaW5lIERTSV9CVVNZRFNJCQkweDAyMDgKLSNkZWZpbmUgRFNJX0xBTkVFTkFCTEUJCTB4MDIx MAotI2RlZmluZSBEU0lfTEFORVNUQVRVUzAJCTB4MDIxNAotI2RlZmluZSBEU0lfTEFORVNUQVRV UzEJCTB4MDIxOAotI2RlZmluZSBEU0lfSU5UU1RBVFVTCQkweDAyMjAKLSNkZWZpbmUgRFNJX0lO VE1BU0sJCTB4MDIyNAotI2RlZmluZSBEU0lfSU5UQ0xSCQkweDAyMjgKLSNkZWZpbmUgRFNJX0xQ VFhUTwkJMHgwMjMwCi0KLS8qIERTSSBHZW5lcmFsIFJlZ2lzdGVycyAqLwotI2RlZmluZSBEU0lF UlJDTlQJCTB4MDMwMAotCi0vKiBEU0kgQXBwbGljYXRpb24gTGF5ZXIgUmVnaXN0ZXJzICovCi0j ZGVmaW5lIEFQTENUUkwJCQkweDA0MDAKLSNkZWZpbmUgUkRQS1RMTgkJCTB4MDQwNAotCi0vKiBW aWRlbyBQYXRoIFJlZ2lzdGVycyAqLwotI2RlZmluZSBWUENUUkwJCQkweDA0NTAKLSNkZWZpbmUg SFRJTTEJCQkweDA0NTQKLSNkZWZpbmUgSFRJTTIJCQkweDA0NTgKLSNkZWZpbmUgVlRJTTEJCQkw eDA0NUMKLSNkZWZpbmUgVlRJTTIJCQkweDA0NjAKLSNkZWZpbmUgVkZVRU4JCQkweDA0NjQKLQot LyogTFZEUyBSZWdpc3RlcnMgKi8KLSNkZWZpbmUgTFZNWDAwMDMJCTB4MDQ4MAotI2RlZmluZSBM Vk1YMDQwNwkJMHgwNDg0Ci0jZGVmaW5lIExWTVgwODExCQkweDA0ODgKLSNkZWZpbmUgTFZNWDEy MTUJCTB4MDQ4QwotI2RlZmluZSBMVk1YMTYxOQkJMHgwNDkwCi0jZGVmaW5lIExWTVgyMDIzCQkw eDA0OTQKLSNkZWZpbmUgTFZNWDI0MjcJCTB4MDQ5OAotI2RlZmluZSBMVkNGRwkJCTB4MDQ5Qwot I2RlZmluZSBMVlBIWTAJCQkweDA0QTAKLSNkZWZpbmUgTFZQSFkxCQkJMHgwNEE0Ci0KLS8qIFN5 c3RlbSBSZWdpc3RlcnMgKi8KLSNkZWZpbmUgU1lTU1RBVAkJCTB4MDUwMAotI2RlZmluZSBTWVNS U1QJCQkweDA1MDQKLQotLyogR1BJTyBSZWdpc3RlcnMgKi8KLS8qI2RlZmluZSBHUElPQwkJCTB4 MDUyMCovCi0jZGVmaW5lIEdQSU9PCQkJMHgwNTI0Ci0jZGVmaW5lIEdQSU9JCQkJMHgwNTI4Ci0K LS8qIEkyQyBSZWdpc3RlcnMgKi8KLSNkZWZpbmUgSTJDVElNQ1RSTAkJMHgwNTQwCi0jZGVmaW5l IEkyQ01BRERSCQkweDA1NDQKLSNkZWZpbmUgV0RBVEFRCQkJMHgwNTQ4Ci0jZGVmaW5lIFJEQVRB UQkJCTB4MDU0QwotCi0vKiBDaGlwL1JldiBSZWdpc3RlcnMgKi8KLSNkZWZpbmUgSURSRUcJCQkw eDA1ODAKLQotLyogRGVidWcgUmVnaXN0ZXJzICovCi0jZGVmaW5lIERFQlVHMDAJCQkweDA1QTAK LSNkZWZpbmUgREVCVUcwMQkJCTB4MDVBNAotCi0vKiBQYW5lbCBDQUJDIHJlZ2lzdGVycyAqLwot I2RlZmluZSBQQU5FTF9QV01fQ09OVFJPTAkweDkwCi0jZGVmaW5lIFBBTkVMX0ZSRVFfRElWSURF Ul9ISQkweDkxCi0jZGVmaW5lIFBBTkVMX0ZSRVFfRElWSURFUl9MTwkweDkyCi0jZGVmaW5lIFBB TkVMX0RVVFlfQ09OVFJPTAkweDkzCi0jZGVmaW5lIFBBTkVMX01PRElGWV9SR0IJMHg5NAotI2Rl ZmluZSBQQU5FTF9GUkFNRVJBVEVfQ09OVFJPTAkweDk2Ci0jZGVmaW5lIFBBTkVMX1BXTV9NSU4J CTB4OTcKLSNkZWZpbmUgUEFORUxfUFdNX1JFRgkJMHg5OAotI2RlZmluZSBQQU5FTF9QV01fTUFY CQkweDk5Ci0jZGVmaW5lIFBBTkVMX0FMTE9XX0RJU1RPUlQJMHg5QQotI2RlZmluZSBQQU5FTF9C WVBBU1NfUFdNSQkweDlCCi0KLS8qIFBhbmVsIGNvbG9yIG1hbmFnZW1lbnQgcmVnaXN0ZXJzICov Ci0jZGVmaW5lIFBBTkVMX0NNX0VOQUJMRQkJMHg3MDAKLSNkZWZpbmUgUEFORUxfQ01fSFVFCQkw eDcwMQotI2RlZmluZSBQQU5FTF9DTV9TQVRVUkFUSU9OCTB4NzAyCi0jZGVmaW5lIFBBTkVMX0NN X0lOVEVOU0lUWQkweDcwMwotI2RlZmluZSBQQU5FTF9DTV9CUklHSFRORVNTCTB4NzA0Ci0jZGVm aW5lIFBBTkVMX0NNX0NFX0VOQUJMRQkweDcwNQotI2RlZmluZSBQQU5FTF9DTV9QRUFLX0VOCTB4 NzEwCi0jZGVmaW5lIFBBTkVMX0NNX0dBSU4JCTB4NzExCi0jZGVmaW5lIFBBTkVMX0NNX0hVRVRB QkxFX1NUQVJUCTB4NzMwCi0jZGVmaW5lIFBBTkVMX0NNX0hVRVRBQkxFX0VORAkweDc0NyAvKiBp bmNsdXNpdmUgKi8KLQotLyogSW5wdXQgbXV4aW5nIGZvciByZWdpc3RlcnMgTFZNWDAwMDMuLi5M Vk1YMjQyNyAqLwotZW51bSB7Ci0JSU5QVVRfUjAsCS8qIDAgKi8KLQlJTlBVVF9SMSwKLQlJTlBV VF9SMiwKLQlJTlBVVF9SMywKLQlJTlBVVF9SNCwKLQlJTlBVVF9SNSwKLQlJTlBVVF9SNiwKLQlJ TlBVVF9SNywKLQlJTlBVVF9HMCwJLyogOCAqLwotCUlOUFVUX0cxLAotCUlOUFVUX0cyLAotCUlO UFVUX0czLAotCUlOUFVUX0c0LAotCUlOUFVUX0c1LAotCUlOUFVUX0c2LAotCUlOUFVUX0c3LAot CUlOUFVUX0IwLAkvKiAxNiAqLwotCUlOUFVUX0IxLAotCUlOUFVUX0IyLAotCUlOUFVUX0IzLAot CUlOUFVUX0I0LAotCUlOUFVUX0I1LAotCUlOUFVUX0I2LAotCUlOUFVUX0I3LAotCUlOUFVUX0hT WU5DLAkvKiAyNCAqLwotCUlOUFVUX1ZTWU5DLAotCUlOUFVUX0RFLAotCUxPR0lDXzAsCi0JLyog MjguLi4zMSB1bmRlZmluZWQgKi8KLX07Ci0KLSNkZWZpbmUgSU5QVVRfTVVYKGx2bXgwMywgbHZt eDAyLCBsdm14MDEsIGx2bXgwMCkJCVwKLQkoRkxEX1ZBTChsdm14MDMsIDI5LCAyNCkgfCBGTERf VkFMKGx2bXgwMiwgMjAsIDE2KSB8CVwKLQlGTERfVkFMKGx2bXgwMSwgMTIsIDgpIHwgRkxEX1ZB TChsdm14MDAsIDQsIDApKQotCi0vKioKLSAqIHRjMzU4NzZ4X3JlZ3cgLSBXcml0ZSBEU0ktTFZE UyBicmlkZ2UgcmVnaXN0ZXIgdXNpbmcgSTJDCi0gKiBAY2xpZW50OiBzdHJ1Y3QgaTJjX2NsaWVu dCB0byB1c2UKLSAqIEByZWc6IHJlZ2lzdGVyIGFkZHJlc3MKLSAqIEB2YWx1ZTogdmFsdWUgdG8g d3JpdGUKLSAqCi0gKiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciB2 YWx1ZS4KLSAqLwotc3RhdGljIGludCB0YzM1ODc2eF9yZWd3KHN0cnVjdCBpMmNfY2xpZW50ICpj bGllbnQsIHUxNiByZWcsIHUzMiB2YWx1ZSkKLXsKLQlpbnQgcjsKLQl1OCB0eF9kYXRhW10gPSB7 Ci0JCS8qIE5PVEU6IFJlZ2lzdGVyIGFkZHJlc3MgYmlnLWVuZGlhbiwgZGF0YSBsaXR0bGUtZW5k aWFuLiAqLwotCQkocmVnID4+IDgpICYgMHhmZiwKLQkJcmVnICYgMHhmZiwKLQkJdmFsdWUgJiAw eGZmLAotCQkodmFsdWUgPj4gOCkgJiAweGZmLAotCQkodmFsdWUgPj4gMTYpICYgMHhmZiwKLQkJ KHZhbHVlID4+IDI0KSAmIDB4ZmYsCi0JfTsKLQlzdHJ1Y3QgaTJjX21zZyBtc2dzW10gPSB7Ci0J CXsKLQkJCS5hZGRyID0gY2xpZW50LT5hZGRyLAotCQkJLmZsYWdzID0gMCwKLQkJCS5idWYgPSB0 eF9kYXRhLAotCQkJLmxlbiA9IEFSUkFZX1NJWkUodHhfZGF0YSksCi0JCX0sCi0JfTsKLQotCXIg PSBpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCBtc2dzLCBBUlJBWV9TSVpFKG1zZ3MpKTsK LQlpZiAociA8IDApIHsKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsICIlczogcmVnIDB4JTA0eCB2 YWwgMHglMDh4IGVycm9yICVkXG4iLAotCQkJX19mdW5jX18sIHJlZywgdmFsdWUsIHIpOwotCQly ZXR1cm4gcjsKLQl9Ci0KLQlpZiAociA8IEFSUkFZX1NJWkUobXNncykpIHsKLQkJZGV2X2Vycigm Y2xpZW50LT5kZXYsICIlczogcmVnIDB4JTA0eCB2YWwgMHglMDh4IG1zZ3MgJWRcbiIsCi0JCQlf X2Z1bmNfXywgcmVnLCB2YWx1ZSwgcik7Ci0JCXJldHVybiAtRUFHQUlOOwotCX0KLQotCWRldl9k YmcoJmNsaWVudC0+ZGV2LCAiJXM6IHJlZyAweCUwNHggdmFsIDB4JTA4eFxuIiwKLQkJCV9fZnVu Y19fLCByZWcsIHZhbHVlKTsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIHRjMzU4NzZ4X3Jl Z3IgLSBSZWFkIERTSS1MVkRTIGJyaWRnZSByZWdpc3RlciB1c2luZyBJMkMKLSAqIEBjbGllbnQ6 IHN0cnVjdCBpMmNfY2xpZW50IHRvIHVzZQotICogQHJlZzogcmVnaXN0ZXIgYWRkcmVzcwotICog QHZhbHVlOiBwb2ludGVyIGZvciBzdG9yaW5nIHRoZSB2YWx1ZQotICoKLSAqIFJldHVybnMgMCBv biBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIHZhbHVlLgotICovCi1zdGF0aWMgaW50IHRj MzU4NzZ4X3JlZ3Ioc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTE2IHJlZywgdTMyICp2YWx1 ZSkKLXsKLQlpbnQgcjsKLQl1OCB0eF9kYXRhW10gPSB7Ci0JCShyZWcgPj4gOCkgJiAweGZmLAot CQlyZWcgJiAweGZmLAotCX07Ci0JdTggcnhfZGF0YVs0XTsKLQlzdHJ1Y3QgaTJjX21zZyBtc2dz W10gPSB7Ci0JCXsKLQkJCS5hZGRyID0gY2xpZW50LT5hZGRyLAotCQkJLmZsYWdzID0gMCwKLQkJ CS5idWYgPSB0eF9kYXRhLAotCQkJLmxlbiA9IEFSUkFZX1NJWkUodHhfZGF0YSksCi0JCX0sCi0J CXsKLQkJCS5hZGRyID0gY2xpZW50LT5hZGRyLAotCQkJLmZsYWdzID0gSTJDX01fUkQsCi0JCQku YnVmID0gcnhfZGF0YSwKLQkJCS5sZW4gPSBBUlJBWV9TSVpFKHJ4X2RhdGEpLAotCQkgfSwKLQl9 OwotCi0JciA9IGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIG1zZ3MsIEFSUkFZX1NJWkUo bXNncykpOwotCWlmIChyIDwgMCkgewotCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIiVzOiByZWcg MHglMDR4IGVycm9yICVkXG4iLCBfX2Z1bmNfXywKLQkJCXJlZywgcik7Ci0JCXJldHVybiByOwot CX0KLQotCWlmIChyIDwgQVJSQVlfU0laRShtc2dzKSkgewotCQlkZXZfZXJyKCZjbGllbnQtPmRl diwgIiVzOiByZWcgMHglMDR4IG1zZ3MgJWRcbiIsIF9fZnVuY19fLAotCQkJcmVnLCByKTsKLQkJ cmV0dXJuIC1FQUdBSU47Ci0JfQotCi0JKnZhbHVlID0gcnhfZGF0YVswXSA8PCAyNCB8IHJ4X2Rh dGFbMV0gPDwgMTYgfAotCQlyeF9kYXRhWzJdIDw8IDggfCByeF9kYXRhWzNdOwotCi0JZGV2X2Ri ZygmY2xpZW50LT5kZXYsICIlczogcmVnIDB4JTA0eCB2YWx1ZSAweCUwOHhcbiIsIF9fZnVuY19f LAotCQlyZWcsICp2YWx1ZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCB0YzM1ODc2eF9zZXRf YnJpZGdlX3Jlc2V0X3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBzdGF0ZSkKLXsK LQlpZiAoV0FSTighdGMzNTg3NnhfY2xpZW50LCAiJXMgY2FsbGVkIGJlZm9yZSBwcm9iZSIsIF9f ZnVuY19fKSkKLQkJcmV0dXJuOwotCi0JZGV2X2RiZygmdGMzNTg3NnhfY2xpZW50LT5kZXYsICIl czogc3RhdGUgJWRcbiIsIF9fZnVuY19fLCBzdGF0ZSk7Ci0KLQlpZiAoIWJyaWRnZV9yZXNldCkK LQkJcmV0dXJuOwotCi0JaWYgKHN0YXRlKSB7Ci0JCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChi cmlkZ2VfcmVzZXQsIDApOwotCQltZGVsYXkoMTApOwotCX0gZWxzZSB7Ci0JCS8qIFB1bGwgTUlQ SSBCcmlkZ2UgcmVzZXQgcGluIHRvIExvdyAqLwotCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAo YnJpZGdlX3Jlc2V0LCAwKTsKLQkJbWRlbGF5KDIwKTsKLQkJLyogUHVsbCBNSVBJIEJyaWRnZSBy ZXNldCBwaW4gdG8gSGlnaCAqLwotCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAoYnJpZGdlX3Jl c2V0LCAxKTsKLQkJbWRlbGF5KDQwKTsKLQl9Ci19Ci0KLXZvaWQgdGMzNTg3NnhfY29uZmlndXJl X2x2ZHNfYnJpZGdlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGkyY19jbGll bnQgKmkyYyA9IHRjMzU4NzZ4X2NsaWVudDsKLQl1MzIgcHBpX2xwdHh0aW1lY250OwotCXUzMiB0 eHRhZ29jbnQ7Ci0JdTMyIHR4dGFzdXJlY250OwotCXUzMiBpZDsKLQotCWlmIChXQVJOKCF0YzM1 ODc2eF9jbGllbnQsICIlcyBjYWxsZWQgYmVmb3JlIHByb2JlIiwgX19mdW5jX18pKQotCQlyZXR1 cm47Ci0KLQlkZXZfZGJnKCZ0YzM1ODc2eF9jbGllbnQtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7 Ci0KLQlpZiAoIXRjMzU4NzZ4X3JlZ3IoaTJjLCBJRFJFRywgJmlkKSkKLQkJZGV2X2luZm8oJnRj MzU4NzZ4X2NsaWVudC0+ZGV2LCAidGMzNTg3NnggSUQgMHglMDh4XG4iLCBpZCk7Ci0JZWxzZQot CQlkZXZfZXJyKCZ0YzM1ODc2eF9jbGllbnQtPmRldiwgIkNhbm5vdCByZWFkIElEXG4iKTsKLQot CXBwaV9scHR4dGltZWNudCA9IDQ7Ci0JdHh0YWdvY250ID0gKDUgKiBwcGlfbHB0eHRpbWVjbnQg LSAzKSAvIDQ7Ci0JdHh0YXN1cmVjbnQgPSAzICogcHBpX2xwdHh0aW1lY250IC8gMjsKLQl0YzM1 ODc2eF9yZWd3KGkyYywgUFBJX1RYX1JYX1RBLCBGTERfVkFMKHR4dGFnb2NudCwgMjYsIDE2KSB8 Ci0JCUZMRF9WQUwodHh0YXN1cmVjbnQsIDEwLCAwKSk7Ci0JdGMzNTg3NnhfcmVndyhpMmMsIFBQ SV9MUFRYVElNRUNOVCwgRkxEX1ZBTChwcGlfbHB0eHRpbWVjbnQsIDEwLCAwKSk7Ci0KLQl0YzM1 ODc2eF9yZWd3KGkyYywgUFBJX0QwU19DTFJTSVBPQ09VTlQsIEZMRF9WQUwoMSwgNSwgMCkpOwot CXRjMzU4NzZ4X3JlZ3coaTJjLCBQUElfRDFTX0NMUlNJUE9DT1VOVCwgRkxEX1ZBTCgxLCA1LCAw KSk7Ci0JdGMzNTg3NnhfcmVndyhpMmMsIFBQSV9EMlNfQ0xSU0lQT0NPVU5ULCBGTERfVkFMKDEs IDUsIDApKTsKLQl0YzM1ODc2eF9yZWd3KGkyYywgUFBJX0QzU19DTFJTSVBPQ09VTlQsIEZMRF9W QUwoMSwgNSwgMCkpOwotCi0JLyogRW5hYmxpbmcgTUlQSSAmIFBQSSBsYW5lcywgRW5hYmxlIDQg bGFuZXMgKi8KLQl0YzM1ODc2eF9yZWd3KGkyYywgUFBJX0xBTkVFTkFCTEUsCi0JCUJJVCg0KSB8 IEJJVCgzKSB8IEJJVCgyKSB8IEJJVCgxKSB8IEJJVCgwKSk7Ci0JdGMzNTg3NnhfcmVndyhpMmMs IERTSV9MQU5FRU5BQkxFLAotCQlCSVQoNCkgfCBCSVQoMykgfCBCSVQoMikgfCBCSVQoMSkgfCBC SVQoMCkpOwotCXRjMzU4NzZ4X3JlZ3coaTJjLCBQUElfU1RBUlRQUEksIEJJVCgwKSk7Ci0JdGMz NTg3NnhfcmVndyhpMmMsIERTSV9TVEFSVERTSSwgQklUKDApKTsKLQotCS8qIFNldHRpbmcgTFZE UyBvdXRwdXQgZnJlcXVlbmN5ICovCi0JdGMzNTg3NnhfcmVndyhpMmMsIExWUEhZMCwgRkxEX1ZB TCgxLCAyMCwgMTYpIHwKLQkJRkxEX1ZBTCgyLCAxNSwgMTQpIHwgRkxEX1ZBTCg2LCA0LCAwKSk7 IC8qIDB4MDAwNDgwMDYgKi8KLQotCS8qIFNldHRpbmcgdmlkZW8gcGFuZWwgY29udHJvbCByZWdp c3RlciwweDAwMDAwMTIwIFZUR2VuPU9OID8hPyE/ICovCi0JdGMzNTg3NnhfcmVndyhpMmMsIFZQ Q1RSTCwgQklUKDgpIHwgQklUKDUpKTsKLQotCS8qIEhvcml6b250YWwgYmFjayBwb3JjaCBhbmQg aG9yaXpvbnRhbCBwdWxzZSB3aWR0aC4gMHgwMDI4MDAyOCAqLwotCXRjMzU4NzZ4X3JlZ3coaTJj LCBIVElNMSwgRkxEX1ZBTCg0MCwgMjQsIDE2KSB8IEZMRF9WQUwoNDAsIDgsIDApKTsKLQotCS8q IEhvcml6b250YWwgZnJvbnQgcG9yY2ggYW5kIGhvcml6b250YWwgYWN0aXZlIHZpZGVvIHNpemUu IDB4MDA1MDA1MDAqLwotCXRjMzU4NzZ4X3JlZ3coaTJjLCBIVElNMiwgRkxEX1ZBTCg4MCwgMjQs IDE2KSB8IEZMRF9WQUwoMTI4MCwgMTAsIDApKTsKLQotCS8qIFZlcnRpY2FsIGJhY2sgcG9yY2gg YW5kIHZlcnRpY2FsIHN5bmMgcHVsc2Ugd2lkdGguIDB4MDAwZTAwMGEgKi8KLQl0YzM1ODc2eF9y ZWd3KGkyYywgVlRJTTEsIEZMRF9WQUwoMTQsIDIzLCAxNikgfCBGTERfVkFMKDEwLCA3LCAwKSk7 Ci0KLQkvKiBWZXJ0aWNhbCBmcm9udCBwb3JjaCBhbmQgdmVydGljYWwgZGlzcGxheSBzaXplLiAw eDAwMGUwMzIwICovCi0JdGMzNTg3NnhfcmVndyhpMmMsIFZUSU0yLCBGTERfVkFMKDE0LCAyMywg MTYpIHwgRkxEX1ZBTCg4MDAsIDEwLCAwKSk7Ci0KLQkvKiBTZXQgYWJvdmUgSFRJTTEsIEhUSU0y LCBWVElNMSwgYW5kIFZUSU0yIGF0IG5leHQgVlNZTkMuICovCi0JdGMzNTg3NnhfcmVndyhpMmMs IFZGVUVOLCBCSVQoMCkpOwotCi0JLyogU29mdCByZXNldCBMQ0QgY29udHJvbGxlci4gKi8KLQl0 YzM1ODc2eF9yZWd3KGkyYywgU1lTUlNULCBCSVQoMikpOwotCi0JLyogTFZEUy1UWCBpbnB1dCBt dXhpbmcgKi8KLQl0YzM1ODc2eF9yZWd3KGkyYywgTFZNWDAwMDMsCi0JCUlOUFVUX01VWChJTlBV VF9SNSwgSU5QVVRfUjQsIElOUFVUX1IzLCBJTlBVVF9SMikpOwotCXRjMzU4NzZ4X3JlZ3coaTJj LCBMVk1YMDQwNywKLQkJSU5QVVRfTVVYKElOUFVUX0cyLCBJTlBVVF9SNywgSU5QVVRfUjEsIElO UFVUX1I2KSk7Ci0JdGMzNTg3NnhfcmVndyhpMmMsIExWTVgwODExLAotCQlJTlBVVF9NVVgoSU5Q VVRfRzEsIElOUFVUX0cwLCBJTlBVVF9HNCwgSU5QVVRfRzMpKTsKLQl0YzM1ODc2eF9yZWd3KGky YywgTFZNWDEyMTUsCi0JCUlOUFVUX01VWChJTlBVVF9CMiwgSU5QVVRfRzcsIElOUFVUX0c2LCBJ TlBVVF9HNSkpOwotCXRjMzU4NzZ4X3JlZ3coaTJjLCBMVk1YMTYxOSwKLQkJSU5QVVRfTVVYKElO UFVUX0I0LCBJTlBVVF9CMywgSU5QVVRfQjEsIElOUFVUX0IwKSk7Ci0JdGMzNTg3NnhfcmVndyhp MmMsIExWTVgyMDIzLAotCQlJTlBVVF9NVVgoTE9HSUNfMCwgIElOUFVUX0I3LCBJTlBVVF9CNiwg SU5QVVRfQjUpKTsKLQl0YzM1ODc2eF9yZWd3KGkyYywgTFZNWDI0MjcsCi0JCUlOUFVUX01VWChJ TlBVVF9SMCwgSU5QVVRfREUsIElOUFVUX1ZTWU5DLCBJTlBVVF9IU1lOQykpOwotCi0JLyogRW5h YmxlIExWRFMgdHJhbnNtaXR0ZXIuICovCi0JdGMzNTg3NnhfcmVndyhpMmMsIExWQ0ZHLCBCSVQo MCkpOwotCi0JLyogQ2xlYXIgbm90aWZpY2F0aW9ucy4gRG9uJ3Qgd3JpdGUgcmVzZXJ2ZWQgYml0 cy4gV2FzIHdyaXRlIDB4ZmZmZmZmZmYKLQkgKiB0byAweDAyODgsIG11c3QgYmUgaW4gZXJyb3I/ ISAqLwotCXRjMzU4NzZ4X3JlZ3coaTJjLCBEU0lfSU5UQ0xSLCBGTERfTUFTSygzMSwgMzApIHwg RkxEX01BU0soMjIsIDApKTsKLX0KLQotI2RlZmluZSBHUElPUFdNQ1RSTAkweDM4RgotI2RlZmlu ZSBQV00wQ0xLRElWMAkweDYyIC8qIGxvdyBieXRlICovCi0jZGVmaW5lIFBXTTBDTEtESVYxCTB4 NjEgLyogaGlnaCBieXRlICovCi0KLSNkZWZpbmUgU1lTVEVNQ0xLCTE5MjAwMDAwVUwgLyogMTku MiBNSHogKi8KLSNkZWZpbmUgUFdNX0ZSRVFVRU5DWQk5NjAwIC8qIEh6ICovCi0KLS8qIGYgPSBi YXNlY2xrIC8gKGNsa2RpdiArIDEpID0+IGNsa2RpdiA9IChiYXNlY2xrIC0gZikgLyBmICovCi1z dGF0aWMgaW5saW5lIHUxNiBjYWxjX2Nsa2Rpdih1bnNpZ25lZCBsb25nIGJhc2VjbGssIHVuc2ln bmVkIGludCBmKQotewotCXJldHVybiAoYmFzZWNsayAtIGYpIC8gZjsKLX0KLQotc3RhdGljIHZv aWQgdGMzNTg3NnhfYnJpZ2h0bmVzc19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0J aW50IHJldDsKLQl1OCBwd21jdHJsOwotCXUxNiBjbGtkaXY7Ci0KLQkvKiBNYWtlIHN1cmUgdGhl IFBXTSByZWZlcmVuY2UgaXMgdGhlIDE5LjIgTUh6IHN5c3RlbSBjbG9jay4gUmVhZCBmaXJzdAot CSAqIGluc3RlYWQgb2Ygc2V0dGluZyBkaXJlY3RseSB0byBjYXRjaCBwb3RlbnRpYWwgY29uZmxp Y3RzIGJldHdlZW4gUFdNCi0JICogdXNlcnMuICovCi0JcmV0ID0gaW50ZWxfc2N1X2lwY19pb3Jl YWQ4KEdQSU9QV01DVFJMLCAmcHdtY3RybCk7Ci0JaWYgKHJldCB8fCBwd21jdHJsICE9IDB4MDEp IHsKLQkJaWYgKHJldCkKLQkJCWRldl9lcnIoZGV2LT5kZXYsICJHUElPUFdNQ1RSTCByZWFkIGZh aWxlZFxuIik7Ci0JCWVsc2UKLQkJCWRldl93YXJuKGRldi0+ZGV2LCAiR1BJT1BXTUNUUkwgd2Fz IG5vdCBzZXQgdG8gc3lzdGVtIGNsb2NrIChwd21jdHJsID0gMHglMDJ4KVxuIiwgcHdtY3RybCk7 Ci0KLQkJcmV0ID0gaW50ZWxfc2N1X2lwY19pb3dyaXRlOChHUElPUFdNQ1RSTCwgMHgwMSk7Ci0J CWlmIChyZXQpCi0JCQlkZXZfZXJyKGRldi0+ZGV2LCAiR1BJT1BXTUNUUkwgc2V0IGZhaWxlZFxu Iik7Ci0JfQotCi0JY2xrZGl2ID0gY2FsY19jbGtkaXYoU1lTVEVNQ0xLLCBQV01fRlJFUVVFTkNZ KTsKLQotCXJldCA9IGludGVsX3NjdV9pcGNfaW93cml0ZTgoUFdNMENMS0RJVjEsIChjbGtkaXYg Pj4gOCkgJiAweGZmKTsKLQlpZiAoIXJldCkKLQkJcmV0ID0gaW50ZWxfc2N1X2lwY19pb3dyaXRl OChQV00wQ0xLRElWMCwgY2xrZGl2ICYgMHhmZik7Ci0KLQlpZiAocmV0KQotCQlkZXZfZXJyKGRl di0+ZGV2LCAiUFdNMENMS0RJViBzZXQgZmFpbGVkXG4iKTsKLQllbHNlCi0JCWRldl9kYmcoZGV2 LT5kZXYsICJQV00wQ0xLRElWIHNldCB0byAweCUwNHggKCVkIEh6KVxuIiwKLQkJCWNsa2Rpdiwg UFdNX0ZSRVFVRU5DWSk7Ci19Ci0KLSNkZWZpbmUgUFdNMERVVFlDWUNMRQkJCTB4NjcKLQotdm9p ZCB0YzM1ODc2eF9icmlnaHRuZXNzX2NvbnRyb2woc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50 IGxldmVsKQotewotCWludCByZXQ7Ci0JdTggZHV0eV92YWw7Ci0JdTggcGFuZWxfZHV0eV92YWw7 Ci0KLQlsZXZlbCA9IGNsYW1wKGxldmVsLCAwLCBNREZMRF9EU0lfQlJJR0hUTkVTU19NQVhfTEVW RUwpOwotCi0JLyogUFdNIGR1dHkgY3ljbGUgMHgwMC4uLjB4NjMgY29ycmVzcG9uZHMgdG8gMC4u Ljk5JSAqLwotCWR1dHlfdmFsID0gbGV2ZWwgKiAweDYzIC8gTURGTERfRFNJX0JSSUdIVE5FU1Nf TUFYX0xFVkVMOwotCi0JLyogSSB3b24ndCBwcmV0ZW5kIHRvIHVuZGVyc3RhbmQgdGhpcyBmb3Jt dWxhLiBUaGUgcGFuZWwgc3BlYyBpcyBxdWl0ZQotCSAqIGJhZCBlbmdyaXNoLgotCSAqLwotCXBh bmVsX2R1dHlfdmFsID0gKDIgKiBsZXZlbCAtIDEwMCkgKiAweEE5IC8KLQkJCSBNREZMRF9EU0lf QlJJR0hUTkVTU19NQVhfTEVWRUwgKyAweDU2OwotCi0JcmV0ID0gaW50ZWxfc2N1X2lwY19pb3dy aXRlOChQV00wRFVUWUNZQ0xFLCBkdXR5X3ZhbCk7Ci0JaWYgKHJldCkKLQkJZGV2X2VycigmdGMz NTg3NnhfY2xpZW50LT5kZXYsICIlczogaXBjIHdyaXRlIGZhaWxcbiIsCi0JCQlfX2Z1bmNfXyk7 Ci0KLQlpZiAoY21pX2xjZF9pMmNfY2xpZW50KSB7Ci0JCXJldCA9IGkyY19zbWJ1c193cml0ZV9i eXRlX2RhdGEoY21pX2xjZF9pMmNfY2xpZW50LAotCQkJCQkJUEFORUxfUFdNX01BWCwgcGFuZWxf ZHV0eV92YWwpOwotCQlpZiAocmV0IDwgMCkKLQkJCWRldl9lcnIoJmNtaV9sY2RfaTJjX2NsaWVu dC0+ZGV2LCAiJXM6IGkyYyB3cml0ZSBmYWlsZWRcbiIsCi0JCQkJX19mdW5jX18pOwotCX0KLX0K LQotdm9pZCB0YzM1ODc2eF90b3NoaWJhX2JyaWRnZV9wYW5lbF9vZmYoc3RydWN0IGRybV9kZXZp Y2UgKmRldikKLXsKLQlpZiAoV0FSTighdGMzNTg3NnhfY2xpZW50LCAiJXMgY2FsbGVkIGJlZm9y ZSBwcm9iZSIsIF9fZnVuY19fKSkKLQkJcmV0dXJuOwotCi0JZGV2X2RiZygmdGMzNTg3NnhfY2xp ZW50LT5kZXYsICIlc1xuIiwgX19mdW5jX18pOwotCi0JaWYgKGJyaWRnZV9ibF9lbmFibGUpCi0J CWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChicmlkZ2VfYmxfZW5hYmxlLCAwKTsKLQotCWlmIChi YWNrbGlnaHRfdm9sdGFnZSkKLQkJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKGJhY2tsaWdodF92 b2x0YWdlLCAwKTsKLX0KLQotdm9pZCB0YzM1ODc2eF90b3NoaWJhX2JyaWRnZV9wYW5lbF9vbihz dHJ1Y3QgZHJtX2RldmljZSAqZGV2KQotewotCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9w cml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQotCWlmIChXQVJOKCF0YzM1ODc2eF9jbGllbnQsICIl cyBjYWxsZWQgYmVmb3JlIHByb2JlIiwgX19mdW5jX18pKQotCQlyZXR1cm47Ci0KLQlkZXZfZGJn KCZ0YzM1ODc2eF9jbGllbnQtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7Ci0KLQlpZiAoYmFja2xp Z2h0X3ZvbHRhZ2UpIHsKLQkJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKGJhY2tsaWdodF92b2x0 YWdlLCAxKTsKLQkJbXNsZWVwKDI2MCk7Ci0JfQotCi0JaWYgKGNtaV9sY2RfaTJjX2NsaWVudCkg ewotCQlpbnQgcmV0OwotCQlkZXZfZGJnKCZjbWlfbGNkX2kyY19jbGllbnQtPmRldiwgInNldHRp bmcgVENPTlxuIik7Ci0JCS8qIEJpdCA0IGlzIGF2ZXJhZ2Vfc2F2aW5nLiBTZXR0aW5nIGl0IHRv IDEsIHRoZSBicmlnaHRuZXNzIGlzCi0JCSAqIHJlZmVyZW5jZWQgdG8gdGhlIGF2ZXJhZ2Ugb2Yg dGhlIGZyYW1lIGNvbnRlbnQuIDAgbWVhbnMKLQkJICogcmVmZXJlbmNlIHRvIHRoZSBtYXhpbXVt IG9mIGZyYW1lIGNvbnRlbnRzLiBCaXRzIDM6MCBhcmUKLQkJICogYWxsb3dfZGlzdG9ydC4gV2hl biBzZXQgdG8gYSBub256ZXJvIHZhbHVlLCBhbGwgY29sb3IgdmFsdWVzCi0JCSAqIGJldHdlZW4g MjU1LWFsbG93X2Rpc3RvcnQqMiBhbmQgMjU1IGFyZSBtYXBwZWQgdG8gdGhlCi0JCSAqIDI1NS1h bGxvd19kaXN0b3J0KjIgdmFsdWUuCi0JCSAqLwotCQlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0 ZV9kYXRhKGNtaV9sY2RfaTJjX2NsaWVudCwKLQkJCQkJCVBBTkVMX0FMTE9XX0RJU1RPUlQsIDB4 MTApOwotCQlpZiAocmV0IDwgMCkKLQkJCWRldl9lcnIoJmNtaV9sY2RfaTJjX2NsaWVudC0+ZGV2 LAotCQkJCSJpMmMgd3JpdGUgZmFpbGVkICglZClcbiIsIHJldCk7Ci0JCXJldCA9IGkyY19zbWJ1 c193cml0ZV9ieXRlX2RhdGEoY21pX2xjZF9pMmNfY2xpZW50LAotCQkJCQkJUEFORUxfQllQQVNT X1BXTUksIDApOwotCQlpZiAocmV0IDwgMCkKLQkJCWRldl9lcnIoJmNtaV9sY2RfaTJjX2NsaWVu dC0+ZGV2LAotCQkJCSJpMmMgd3JpdGUgZmFpbGVkICglZClcbiIsIHJldCk7Ci0JCS8qIFNldCBt aW5pbXVtIGJyaWdodG5lc3MgdmFsdWUgLSB0aGlzIGlzIHR1bmFibGUgKi8KLQkJcmV0ID0gaTJj X3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbWlfbGNkX2kyY19jbGllbnQsCi0JCQkJCQlQQU5FTF9Q V01fTUlOLCAweDM1KTsKLQkJaWYgKHJldCA8IDApCi0JCQlkZXZfZXJyKCZjbWlfbGNkX2kyY19j bGllbnQtPmRldiwKLQkJCQkiaTJjIHdyaXRlIGZhaWxlZCAoJWQpXG4iLCByZXQpOwotCX0KLQot CWlmIChicmlkZ2VfYmxfZW5hYmxlKQotCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAoYnJpZGdl X2JsX2VuYWJsZSwgMSk7Ci0KLQl0YzM1ODc2eF9icmlnaHRuZXNzX2NvbnRyb2woZGV2LCBkZXZf cHJpdi0+YnJpZ2h0bmVzc19hZGp1c3RlZCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZHJtX2Rpc3Bs YXlfbW9kZSAqdGMzNTg3NnhfZ2V0X2NvbmZpZ19tb2RlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYp Ci17Ci0Jc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7Ci0KLQlkZXZfZGJnKGRldi0+ZGV2 LCAiJXNcbiIsIF9fZnVuY19fKTsKLQotCW1vZGUgPSBremFsbG9jKHNpemVvZigqbW9kZSksIEdG UF9LRVJORUwpOwotCWlmICghbW9kZSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQkvKiBGSVhNRTogZG8g dGhpcyBwcm9wZXJseS4gKi8KLQltb2RlLT5oZGlzcGxheSA9IDEyODA7Ci0JbW9kZS0+dmRpc3Bs YXkgPSA4MDA7Ci0JbW9kZS0+aHN5bmNfc3RhcnQgPSAxMzYwOwotCW1vZGUtPmhzeW5jX2VuZCA9 IDE0MDA7Ci0JbW9kZS0+aHRvdGFsID0gMTQ0MDsKLQltb2RlLT52c3luY19zdGFydCA9IDgxNDsK LQltb2RlLT52c3luY19lbmQgPSA4MjQ7Ci0JbW9kZS0+dnRvdGFsID0gODM4OwotCW1vZGUtPmNs b2NrID0gMzMzMjQgPDwgMTsKLQotCWRldl9pbmZvKGRldi0+ZGV2LCAiaGRpc3BsYXkodykgPSAl ZFxuIiwgbW9kZS0+aGRpc3BsYXkpOwotCWRldl9pbmZvKGRldi0+ZGV2LCAidmRpc3BsYXkoaCkg PSAlZFxuIiwgbW9kZS0+dmRpc3BsYXkpOwotCWRldl9pbmZvKGRldi0+ZGV2LCAiSFNTID0gJWRc biIsIG1vZGUtPmhzeW5jX3N0YXJ0KTsKLQlkZXZfaW5mbyhkZXYtPmRldiwgIkhTRSA9ICVkXG4i LCBtb2RlLT5oc3luY19lbmQpOwotCWRldl9pbmZvKGRldi0+ZGV2LCAiaHRvdGFsID0gJWRcbiIs IG1vZGUtPmh0b3RhbCk7Ci0JZGV2X2luZm8oZGV2LT5kZXYsICJWU1MgPSAlZFxuIiwgbW9kZS0+ dnN5bmNfc3RhcnQpOwotCWRldl9pbmZvKGRldi0+ZGV2LCAiVlNFID0gJWRcbiIsIG1vZGUtPnZz eW5jX2VuZCk7Ci0JZGV2X2luZm8oZGV2LT5kZXYsICJ2dG90YWwgPSAlZFxuIiwgbW9kZS0+dnRv dGFsKTsKLQlkZXZfaW5mbyhkZXYtPmRldiwgImNsb2NrID0gJWRcbiIsIG1vZGUtPmNsb2NrKTsK LQotCWRybV9tb2RlX3NldF9uYW1lKG1vZGUpOwotCWRybV9tb2RlX3NldF9jcnRjaW5mbyhtb2Rl LCAwKTsKLQotCW1vZGUtPnR5cGUgfD0gRFJNX01PREVfVFlQRV9QUkVGRVJSRUQ7Ci0KLQlyZXR1 cm4gbW9kZTsKLX0KLQotLyogRFYxIEFjdGl2ZSBhcmVhIDIxNi45NiB4IDEzNS42IG1tICovCi0j ZGVmaW5lIERWMV9QQU5FTF9XSURUSCAyMTcKLSNkZWZpbmUgRFYxX1BBTkVMX0hFSUdIVCAxMzYK LQotc3RhdGljIGludCB0YzM1ODc2eF9nZXRfcGFuZWxfaW5mbyhzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LCBpbnQgcGlwZSwKLQkJCQlzdHJ1Y3QgcGFuZWxfaW5mbyAqcGkpCi17Ci0JaWYgKCFkZXYg fHwgIXBpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXBpLT53aWR0aF9tbSA9IERWMV9QQU5FTF9X SURUSDsKLQlwaS0+aGVpZ2h0X21tID0gRFYxX1BBTkVMX0hFSUdIVDsKLQotCXJldHVybiAwOwot fQotCi1zdGF0aWMgaW50IHRjMzU4NzZ4X2JyaWRnZV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAq Y2xpZW50LAotCQkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKLXsKLQlkZXZfaW5m bygmY2xpZW50LT5kZXYsICIlc1xuIiwgX19mdW5jX18pOwotCi0JaWYgKCFpMmNfY2hlY2tfZnVu Y3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX0kyQykpIHsKLQkJZGV2X2Vycigm Y2xpZW50LT5kZXYsICIlczogaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoKSBmYWlsZWRcbiIsCi0J CQlfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCWJyaWRnZV9yZXNldCA9IGRl dm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKCZjbGllbnQtPmRldiwgImJyaWRnZS1yZXNldCIsIEdQSU9E X09VVF9MT1cpOwotCWlmIChJU19FUlIoYnJpZGdlX3Jlc2V0KSkKLQkJcmV0dXJuIFBUUl9FUlIo YnJpZGdlX3Jlc2V0KTsKLQlpZiAoYnJpZGdlX3Jlc2V0KQotCQlncGlvZF9zZXRfY29uc3VtZXJf bmFtZShicmlkZ2VfcmVzZXQsICJ0YzM1ODc2eCBicmlkZ2UgcmVzZXQiKTsKLQotCWJyaWRnZV9i bF9lbmFibGUgPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbCgmY2xpZW50LT5kZXYsICJibC1lbiIs IEdQSU9EX09VVF9MT1cpOwotCWlmIChJU19FUlIoYnJpZGdlX2JsX2VuYWJsZSkpCi0JCXJldHVy biBQVFJfRVJSKGJyaWRnZV9ibF9lbmFibGUpOwotCWlmIChicmlkZ2VfYmxfZW5hYmxlKQotCQln cGlvZF9zZXRfY29uc3VtZXJfbmFtZShicmlkZ2VfYmxfZW5hYmxlLCAidGMzNTg3NnggcGFuZWwg YmwgZW4iKTsKLQotCWJhY2tsaWdodF92b2x0YWdlID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwo JmNsaWVudC0+ZGV2LCAidmFkZCIsIEdQSU9EX09VVF9MT1cpOwotCWlmIChJU19FUlIoYmFja2xp Z2h0X3ZvbHRhZ2UpKQotCQlyZXR1cm4gUFRSX0VSUihiYWNrbGlnaHRfdm9sdGFnZSk7Ci0JaWYg KGJhY2tsaWdodF92b2x0YWdlKQotCQlncGlvZF9zZXRfY29uc3VtZXJfbmFtZShiYWNrbGlnaHRf dm9sdGFnZSwgInRjMzU4NzZ4IHBhbmVsIHZhZGQiKTsKLQotCXRjMzU4NzZ4X2NsaWVudCA9IGNs aWVudDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHRjMzU4NzZ4X2JyaWRnZV9yZW1v dmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlkZXZfZGJnKCZjbGllbnQtPmRldiwg IiVzXG4iLCBfX2Z1bmNfXyk7Ci0KLQl0YzM1ODc2eF9jbGllbnQgPSBOVUxMOwotCi0JcmV0dXJu IDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB0YzM1ODc2eF9icmlk Z2VfaWRbXSA9IHsKLQl7ICJpMmNfZGlzcF9icmlnIiwgMCB9LAotCXsgfQotfTsKLU1PRFVMRV9E RVZJQ0VfVEFCTEUoaTJjLCB0YzM1ODc2eF9icmlkZ2VfaWQpOwotCi1zdGF0aWMgc3RydWN0IGky Y19kcml2ZXIgdGMzNTg3NnhfYnJpZGdlX2kyY19kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJ Lm5hbWUgPSAiaTJjX2Rpc3BfYnJpZyIsCi0JfSwKLQkuaWRfdGFibGUgPSB0YzM1ODc2eF9icmlk Z2VfaWQsCi0JLnByb2JlID0gdGMzNTg3NnhfYnJpZGdlX3Byb2JlLAotCS5yZW1vdmUgPSB0YzM1 ODc2eF9icmlkZ2VfcmVtb3ZlLAotfTsKLQotLyogTENEIHBhbmVsIEkyQyAqLwotc3RhdGljIGlu dCBjbWlfbGNkX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJICAgICBj b25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCi17Ci0JZGV2X2luZm8oJmNsaWVudC0+ZGV2 LCAiJXNcbiIsIF9fZnVuY19fKTsKLQotCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xp ZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19JMkMpKSB7Ci0JCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAi JXM6IGkyY19jaGVja19mdW5jdGlvbmFsaXR5KCkgZmFpbGVkXG4iLAotCQkJX19mdW5jX18pOwot CQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQljbWlfbGNkX2kyY19jbGllbnQgPSBjbGllbnQ7Ci0K LQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBjbWlfbGNkX2kyY19yZW1vdmUoc3RydWN0IGky Y19jbGllbnQgKmNsaWVudCkKLXsKLQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIiVzXG4iLCBfX2Z1 bmNfXyk7Ci0KLQljbWlfbGNkX2kyY19jbGllbnQgPSBOVUxMOwotCi0JcmV0dXJuIDA7Ci19Ci0K LXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBjbWlfbGNkX2kyY19pZFtdID0gewot CXsgImNtaS1sY2QiLCAwIH0sCi0JeyB9Ci19OwotTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGNt aV9sY2RfaTJjX2lkKTsKLQotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGNtaV9sY2RfaTJjX2Ry aXZlciA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZSA9ICJjbWktbGNkIiwKLQl9LAotCS5pZF90 YWJsZSA9IGNtaV9sY2RfaTJjX2lkLAotCS5wcm9iZSA9IGNtaV9sY2RfaTJjX3Byb2JlLAotCS5y ZW1vdmUgPSBjbWlfbGNkX2kyY19yZW1vdmUsCi19OwotCi0vKiBIQUNLIHRvIGNyZWF0ZSBJMkMg ZGV2aWNlIHdoaWxlIGl0J3Mgbm90IGNyZWF0ZWQgYnkgcGxhdGZvcm0gY29kZSAqLwotI2RlZmlu ZSBDTUlfTENEX0kyQ19BREFQVEVSCTIKLSNkZWZpbmUgQ01JX0xDRF9JMkNfQUREUgkweDYwCi0K LXN0YXRpYyBpbnQgY21pX2xjZF9oYWNrX2NyZWF0ZV9kZXZpY2Uodm9pZCkKLXsKLQlzdHJ1Y3Qg aTJjX2FkYXB0ZXIgKmFkYXB0ZXI7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKLQlzdHJ1 Y3QgaTJjX2JvYXJkX2luZm8gaW5mbyA9IHsKLQkJLnR5cGUgPSAiY21pLWxjZCIsCi0JCS5hZGRy ID0gQ01JX0xDRF9JMkNfQUREUiwKLQl9OwotCi0JcHJfZGVidWcoIiVzXG4iLCBfX2Z1bmNfXyk7 Ci0KLQlhZGFwdGVyID0gaTJjX2dldF9hZGFwdGVyKENNSV9MQ0RfSTJDX0FEQVBURVIpOwotCWlm ICghYWRhcHRlcikgewotCQlwcl9lcnIoIiVzOiBpMmNfZ2V0X2FkYXB0ZXIoJWQpIGZhaWxlZFxu IiwgX19mdW5jX18sCi0JCQlDTUlfTENEX0kyQ19BREFQVEVSKTsKLQkJcmV0dXJuIC1FSU5WQUw7 Ci0JfQotCi0JY2xpZW50ID0gaTJjX25ld19jbGllbnRfZGV2aWNlKGFkYXB0ZXIsICZpbmZvKTsK LQlpZiAoSVNfRVJSKGNsaWVudCkpIHsKLQkJcHJfZXJyKCIlczogY3JlYXRpbmcgSTJDIGRldmlj ZSBmYWlsZWRcbiIsIF9fZnVuY19fKTsKLQkJaTJjX3B1dF9hZGFwdGVyKGFkYXB0ZXIpOwotCQly ZXR1cm4gUFRSX0VSUihjbGllbnQpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29u c3Qgc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyB0YzM1ODc2eF9lbmNvZGVyX2hlbHBl cl9mdW5jcyA9IHsKLQkuZHBtcyA9IG1kZmxkX2RzaV9kcGlfZHBtcywKLQkubW9kZV9maXh1cCA9 IG1kZmxkX2RzaV9kcGlfbW9kZV9maXh1cCwKLQkucHJlcGFyZSA9IG1kZmxkX2RzaV9kcGlfcHJl cGFyZSwKLQkubW9kZV9zZXQgPSBtZGZsZF9kc2lfZHBpX21vZGVfc2V0LAotCS5jb21taXQgPSBt ZGZsZF9kc2lfZHBpX2NvbW1pdCwKLX07Ci0KLWNvbnN0IHN0cnVjdCBwYW5lbF9mdW5jcyBtZGZs ZF90YzM1ODc2eF9mdW5jcyA9IHsKLQkuZW5jb2Rlcl9oZWxwZXJfZnVuY3MgPSAmdGMzNTg3Nnhf ZW5jb2Rlcl9oZWxwZXJfZnVuY3MsCi0JLmdldF9jb25maWdfbW9kZSA9IHRjMzU4NzZ4X2dldF9j b25maWdfbW9kZSwKLQkuZ2V0X3BhbmVsX2luZm8gPSB0YzM1ODc2eF9nZXRfcGFuZWxfaW5mbywK LX07Ci0KLXZvaWQgdGMzNTg3NnhfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQotewotCWlu dCByOwotCi0JZGV2X2RiZyhkZXYtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7Ci0KLQljbWlfbGNk X2hhY2tfY3JlYXRlX2RldmljZSgpOwotCi0JciA9IGkyY19hZGRfZHJpdmVyKCZjbWlfbGNkX2ky Y19kcml2ZXIpOwotCWlmIChyIDwgMCkKLQkJZGV2X2VycihkZXYtPmRldiwKLQkJCSIlczogaTJj X2FkZF9kcml2ZXIoKSBmb3IgJXMgZmFpbGVkICglZClcbiIsCi0JCQlfX2Z1bmNfXywgY21pX2xj ZF9pMmNfZHJpdmVyLmRyaXZlci5uYW1lLCByKTsKLQotCXIgPSBpMmNfYWRkX2RyaXZlcigmdGMz NTg3NnhfYnJpZGdlX2kyY19kcml2ZXIpOwotCWlmIChyIDwgMCkKLQkJZGV2X2VycihkZXYtPmRl diwKLQkJCSIlczogaTJjX2FkZF9kcml2ZXIoKSBmb3IgJXMgZmFpbGVkICglZClcbiIsCi0JCQlf X2Z1bmNfXywgdGMzNTg3NnhfYnJpZGdlX2kyY19kcml2ZXIuZHJpdmVyLm5hbWUsIHIpOwotCi0J dGMzNTg3NnhfYnJpZ2h0bmVzc19pbml0KGRldik7Ci19Ci0KLXZvaWQgdGMzNTg3NnhfZXhpdCh2 b2lkKQotewotCXByX2RlYnVnKCIlc1xuIiwgX19mdW5jX18pOwotCi0JaTJjX2RlbF9kcml2ZXIo JnRjMzU4NzZ4X2JyaWRnZV9pMmNfZHJpdmVyKTsKLQotCWlmIChjbWlfbGNkX2kyY19jbGllbnQp Ci0JCWkyY19kZWxfZHJpdmVyKCZjbWlfbGNkX2kyY19kcml2ZXIpOwotfQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2dtYTUwMC90YzM1ODc2eC1kc2ktbHZkcy5oIGIvZHJpdmVycy9ncHUv ZHJtL2dtYTUwMC90YzM1ODc2eC1kc2ktbHZkcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCBiMTRiN2Y5ZTdkMWUuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZ21h NTAwL3RjMzU4NzZ4LWRzaS1sdmRzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0v KgotICogQ29weXJpZ2h0IMKpIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBQZXJtaXNz aW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRh aW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50 YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJl IHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRo ZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRl LCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5k IHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQg dG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRo ZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNs dWRpbmcgdGhlIG5leHQKLSAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNv cGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKLSAqIFNvZnR3YXJlLgotICoKLSAq IFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFO WSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVE IFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFM TAotICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkg Q0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJ T04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCi0gKiBGUk9NLCBPVVQg T0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVS Ci0gKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCi0gKgotICovCi0KLSNpZm5kZWYgX19NREZM RF9EU0lfTFZEU19CUklER0VfSF9fCi0jZGVmaW5lIF9fTURGTERfRFNJX0xWRFNfQlJJREdFX0hf XwotCi12b2lkIHRjMzU4NzZ4X3NldF9icmlkZ2VfcmVzZXRfc3RhdGUoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwgaW50IHN0YXRlKTsKLXZvaWQgdGMzNTg3NnhfY29uZmlndXJlX2x2ZHNfYnJpZGdl KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwotdm9pZCB0YzM1ODc2eF9icmlnaHRuZXNzX2NvbnRy b2woc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGxldmVsKTsKLXZvaWQgdGMzNTg3NnhfdG9z aGliYV9icmlkZ2VfcGFuZWxfb2ZmKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwotdm9pZCB0YzM1 ODc2eF90b3NoaWJhX2JyaWRnZV9wYW5lbF9vbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKLXZv aWQgdGMzNTg3NnhfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKLXZvaWQgdGMzNTg3Nnhf ZXhpdCh2b2lkKTsKLQotZXh0ZXJuIGNvbnN0IHN0cnVjdCBwYW5lbF9mdW5jcyBtZGZsZF90YzM1 ODc2eF9mdW5jczsKLQotI2VuZGlmIC8qX19NREZMRF9EU0lfTFZEU19CUklER0VfSF9fKi8KLS0g CjIuMzAuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K ZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==