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=-13.9 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,UNWANTED_LANGUAGE_BODY, 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 A7B81C433DB for ; Fri, 29 Jan 2021 09:56:19 +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 37C7C64DFF for ; Fri, 29 Jan 2021 09:56:19 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 37C7C64DFF 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 E0A546EAB4; Fri, 29 Jan 2021 09:56:12 +0000 (UTC) Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by gabe.freedesktop.org (Postfix) with ESMTPS id DBAB16EAB4 for ; Fri, 29 Jan 2021 09:56:09 +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 4102CAE91; Fri, 29 Jan 2021 09:56:08 +0000 (UTC) From: Thomas Zimmermann To: patrik.r.jakobsson@gmail.com, airlied@linux.ie, daniel@ffwll.ch Subject: [PATCH 2/5] drm/gma500: Remove Moorestown support Date: Fri, 29 Jan 2021 10:56:01 +0100 Message-Id: <20210129095604.32423-3-tzimmermann@suse.de> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210129095604.32423-1-tzimmermann@suse.de> References: <20210129095604.32423-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" TW9vcmVzdG93biBpcyBhbiBvdXRkYXRlZCBtb2JpbGUgcGxhdGZvcm0gd2l0aCBhcHBhcmVudGx5 IG5vIHVzZXJzCmxlZnQuIFJlbW92ZSBpdCBmcm9tIGdtYTUwMC4gVGhlIE1JRCBjaGlwLXNldHVw IGNvZGUgaW4gbWlkX2Jpb3MuYwppcyBub3cgdW51c2VkLCBzbyByZW1vdmUgaXQgYXMgd2VsbC4K ClNpZ25lZC1vZmYtYnk6IFRob21hcyBaaW1tZXJtYW5uIDx0emltbWVybWFubkBzdXNlLmRlPgot LS0KIGRyaXZlcnMvZ3B1L2RybS9nbWE1MDAvS2NvbmZpZyAgICAgICAgICAgICB8ICAgNyAtCiBk cml2ZXJzL2dwdS9kcm0vZ21hNTAwL01ha2VmaWxlICAgICAgICAgICAgfCAgMTAgKy0KIGRyaXZl cnMvZ3B1L2RybS9nbWE1MDAvZnJhbWVidWZmZXIuYyAgICAgICB8ICAgMiArLQogZHJpdmVycy9n cHUvZHJtL2dtYTUwMC9pbnRlbF9nbWJ1cy5jICAgICAgIHwgICA1ICstCiBkcml2ZXJzL2dwdS9k cm0vZ21hNTAwL21pZF9iaW9zLmMgICAgICAgICAgfCAzMzMgLS0tLS0tLS0KIGRyaXZlcnMvZ3B1 L2RybS9nbWE1MDAvbWlkX2Jpb3MuaCAgICAgICAgICB8ICAxMCAtCiBkcml2ZXJzL2dwdS9kcm0v Z21hNTAwL29ha3RyYWlsLmggICAgICAgICAgfCAyNDcgLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0v Z21hNTAwL29ha3RyYWlsX2NydGMuYyAgICAgfCA2NjMgLS0tLS0tLS0tLS0tLS0tLQogZHJpdmVy cy9ncHUvZHJtL2dtYTUwMC9vYWt0cmFpbF9kZXZpY2UuYyAgIHwgNTY3IC0tLS0tLS0tLS0tLS0t CiBkcml2ZXJzL2dwdS9kcm0vZ21hNTAwL29ha3RyYWlsX2hkbWkuYyAgICAgfCA4NDAgLS0tLS0t LS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vZ21hNTAwL29ha3RyYWlsX2hkbWlfaTJj LmMgfCAzMzEgLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9nbWE1MDAvb2FrdHJhaWxfbHZkcy5j ICAgICB8IDQyMyAtLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9vYWt0cmFpbF9s dmRzX2kyYy5jIHwgMTY5IC0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vZ21hNTAwL3BzYl9kcnYuYyAg ICAgICAgICAgfCAgNjYgKy0KIGRyaXZlcnMvZ3B1L2RybS9nbWE1MDAvcHNiX2Rydi5oICAgICAg ICAgICB8ICA0MiAtLQogZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9wc2JfaW50ZWxfZHJ2LmggICAg IHwgICA2IC0KIGRyaXZlcnMvZ3B1L2RybS9nbWE1MDAvcHNiX2ludGVsX2x2ZHMuYyAgICB8ICAx NCArLQogZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9wc2JfaW50ZWxfcmVnLmggICAgIHwgIDE2IC0K IGRyaXZlcnMvZ3B1L2RybS9nbWE1MDAvcHNiX2ludGVsX3Nkdm8uYyAgICB8ICAyMCArLQogMTkg ZmlsZXMgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKSwgMzc1OCBkZWxldGlvbnMoLSkKIGRlbGV0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vZ21hNTAwL21pZF9iaW9zLmMKIGRlbGV0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vZ21hNTAwL21pZF9iaW9zLmgKIGRlbGV0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vZ21hNTAwL29ha3RyYWlsLmgKIGRlbGV0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vZ21hNTAwL29ha3RyYWlsX2NydGMuYwogZGVsZXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9nbWE1MDAvb2FrdHJhaWxfZGV2aWNlLmMKIGRlbGV0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vZ21hNTAwL29ha3RyYWlsX2hkbWkuYwogZGVsZXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9nbWE1MDAvb2FrdHJhaWxfaGRtaV9pMmMuYwog ZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9nbWE1MDAvb2FrdHJhaWxfbHZkcy5j CiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9vYWt0cmFpbF9sdmRz X2kyYy5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9LY29uZmlnIGIvZHJp dmVycy9ncHUvZHJtL2dtYTUwMC9LY29uZmlnCmluZGV4IGIwNTExNmYxNWQ5Ny4uNmY0MWI4OGNm MDc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL0tjb25maWcKKysrIGIvZHJp dmVycy9ncHUvZHJtL2dtYTUwMC9LY29uZmlnCkBAIC0xMywxMyArMTMsNiBAQCBjb25maWcgRFJN X0dNQTUwMAogCSAgSW50ZWwgR01BNTAwICgnUG91bHNibycpIGFuZCBvdGhlciBJbnRlbCBJTUcg YmFzZWQgZ3JhcGhpY3MKIAkgIGRldmljZXMuCiAKLWNvbmZpZyBEUk1fR01BNjAwCi0JYm9vbCAi SW50ZWwgR01BNjAwIHN1cHBvcnQgKEV4cGVyaW1lbnRhbCkiCi0JZGVwZW5kcyBvbiBEUk1fR01B NTAwCi0JaGVscAotCSAgU2F5IHllcyB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIEdNQTYwMCAoSW50 ZWwgTW9vcmVzdG93bi9PYWt0cmFpbCkKLQkgIHBsYXRmb3JtcyB3aXRoIExWRFMgcG9ydHMuIE1J UEkgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuCi0KIGNvbmZpZyBEUk1fR01BMzYwMAogCWJv b2wgIkludGVsIEdNQTM2MDAvMzY1MCBzdXBwb3J0IChFeHBlcmltZW50YWwpIgogCWRlcGVuZHMg b24gRFJNX0dNQTUwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9NYWtlZmls ZSBiL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvTWFrZWZpbGUKaW5kZXggZjdkZGVkMzc4NGZiLi5i MzNkZmVmMTc4NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvTWFrZWZpbGUK KysrIGIvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9NYWtlZmlsZQpAQCAtMjQsOCArMjQsNyBAQCBn bWE1MDBfZ2Z4LXkgKz0gXAogCSAgcHNiX2ludGVsX3Nkdm8ubyBcCiAJICBwc2JfbGlkLm8gXAog CSAgcHNiX2lycS5vIFwKLQkgIHBzYl9kZXZpY2UubyBcCi0JICBtaWRfYmlvcy5vCisJICBwc2Jf ZGV2aWNlLm8KIAogZ21hNTAwX2dmeC0kKENPTkZJR19BQ1BJKSArPSAgb3ByZWdpb24ubyBcCiAK QEAgLTM2LDExICszNSw0IEBAIGdtYTUwMF9nZngtJChDT05GSUdfRFJNX0dNQTM2MDApICs9ICBj ZHZfZGV2aWNlLm8gXAogCSAgY2R2X2ludGVsX2x2ZHMubyBcCiAJICBjZHZfaW50ZWxfZHAubwog Ci1nbWE1MDBfZ2Z4LSQoQ09ORklHX0RSTV9HTUE2MDApICs9IG9ha3RyYWlsX2RldmljZS5vIFwK LQkgIG9ha3RyYWlsX2NydGMubyBcCi0JICBvYWt0cmFpbF9sdmRzLm8gXAotCSAgb2FrdHJhaWxf bHZkc19pMmMubyBcCi0JICBvYWt0cmFpbF9oZG1pLm8gXAotCSAgb2FrdHJhaWxfaGRtaV9pMmMu bwotCiBvYmotJChDT05GSUdfRFJNX0dNQTUwMCkgKz0gZ21hNTAwX2dmeC5vCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL2ZyYW1lYnVmZmVyLmMgYi9kcml2ZXJzL2dwdS9kcm0v Z21hNTAwL2ZyYW1lYnVmZmVyLmMKaW5kZXggZWJlOWRjY2YyZDgzLi40ZGNlOGQ0OWY2MTEgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvZnJhbWVidWZmZXIuYworKysgYi9kcml2 ZXJzL2dwdS9kcm0vZ21hNTAwL2ZyYW1lYnVmZmVyLmMKQEAgLTU0NCw3ICs1NDQsNyBAQCB2b2lk IHBzYl9tb2Rlc2V0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIAkvKiBPYWt0cmFpbCBh bmQgUG91bHNibyBzaG91bGQgdXNlIEJBUiAyKi8KIAlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRl diwgUFNCX0JTTSwgKHUzMiAqKSYoZGV2LT5tb2RlX2NvbmZpZy5mYl9iYXNlKSk7CiAKLQkvKiBu dW0gcGlwZXMgaXMgMiBmb3IgUFNCIGJ1dCAxIGZvciBNcnN0ICovCisJLyogbnVtIHBpcGVzIGlz IDIgZm9yIFBTQiAqLwogCWZvciAoaSA9IDA7IGkgPCBkZXZfcHJpdi0+bnVtX3BpcGU7IGkrKykK IAkJcHNiX2ludGVsX2NydGNfaW5pdChkZXYsIGksIG1vZGVfZGV2KTsKIApkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9pbnRlbF9nbWJ1cy5jIGIvZHJpdmVycy9ncHUvZHJtL2dt YTUwMC9pbnRlbF9nbWJ1cy5jCmluZGV4IDM3MGJkNjQ1MWJkOS4uMTE4ZTBmNmJhZTZhIDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL2ludGVsX2dtYnVzLmMKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2dtYTUwMC9pbnRlbF9nbWJ1cy5jCkBAIC00MDIsMTAgKzQwMiw3IEBAIGludCBn bWFfaW50ZWxfc2V0dXBfZ21idXMoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIAlpZiAoZGV2X3By aXYtPmdtYnVzID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKElTX01SU1QoZGV2 KSkKLQkJZGV2X3ByaXYtPmdtYnVzX3JlZyA9IGRldl9wcml2LT5hdXhfcmVnOwotCWVsc2UKLQkJ ZGV2X3ByaXYtPmdtYnVzX3JlZyA9IGRldl9wcml2LT52ZGNfcmVnOworCWRldl9wcml2LT5nbWJ1 c19yZWcgPSBkZXZfcHJpdi0+dmRjX3JlZzsKIAogCWZvciAoaSA9IDA7IGkgPCBHTUJVU19OVU1f UE9SVFM7IGkrKykgewogCQlzdHJ1Y3QgaW50ZWxfZ21idXMgKmJ1cyA9ICZkZXZfcHJpdi0+Z21i dXNbaV07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL21pZF9iaW9zLmMgYi9k cml2ZXJzL2dwdS9kcm0vZ21hNTAwL21pZF9iaW9zLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDY4ZTc4NzkyNGVkMC4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9n bWE1MDAvbWlkX2Jpb3MuYworKysgL2Rldi9udWxsCkBAIC0xLDMzMyArMCwwIEBACi0vLyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Ci0vKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAq IENvcHlyaWdodCAoYykgMjAxMSwgSW50ZWwgQ29ycG9yYXRpb24uCi0gKiBBbGwgUmlnaHRzIFJl c2VydmVkLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogVE9ETwotICogLSBTcGxpdCBm dW5jdGlvbnMgYnkgdmJ0IHR5cGUKLSAqIC0gTWFrZSB0aGVtIGFsbCB0YWtlIGRybV9kZXZpY2UK LSAqIC0gQ2hlY2sgaW9yZW1hcCBmYWlsdXJlcwotICovCi0KLSNpbmNsdWRlIDxkcm0vZHJtLmg+ Ci0KLSNpbmNsdWRlICJtaWRfYmlvcy5oIgotI2luY2x1ZGUgInBzYl9kcnYuaCIKLQotc3RhdGlj IHZvaWQgbWlkX2dldF9mdXNlX3NldHRpbmdzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0J c3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0 cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYtPmRldik7Ci0Jc3RydWN0IHBjaV9k ZXYgKnBjaV9yb290ID0KLQkJcGNpX2dldF9kb21haW5fYnVzX2FuZF9zbG90KHBjaV9kb21haW5f bnIocGRldi0+YnVzKSwKLQkJCQkJICAgIDAsIDApOwotCXVpbnQzMl90IGZ1c2VfdmFsdWUgPSAw OwotCXVpbnQzMl90IGZ1c2VfdmFsdWVfdG1wID0gMDsKLQotI2RlZmluZSBGQl9SRUcwNiAweEQw ODEwNjAwCi0jZGVmaW5lIEZCX01JUElfRElTQUJMRSAgKDEgPDwgMTEpCi0jZGVmaW5lIEZCX1JF RzA5IDB4RDA4MTA5MDAKLSNkZWZpbmUgRkJfU0tVX01BU0sgIDB4NzAwMAotI2RlZmluZSBGQl9T S1VfU0hJRlQgMTIKLSNkZWZpbmUgRkJfU0tVXzEwMCAwCi0jZGVmaW5lIEZCX1NLVV8xMDBMIDEK LSNkZWZpbmUgRkJfU0tVXzgzIDIKLQlpZiAocGNpX3Jvb3QgPT0gTlVMTCkgewotCQlXQVJOX09O KDEpOwotCQlyZXR1cm47Ci0JfQotCi0KLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBjaV9yb290 LCAweEQwLCBGQl9SRUcwNik7Ci0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBjaV9yb290LCAweEQ0 LCAmZnVzZV92YWx1ZSk7Ci0KLQkvKiBGQl9NSVBJX0RJU0FCTEUgZG9lc24ndCBtZWFuIExWRFMg b24gd2l0aCBNZWRmaWVsZCAqLwotCWlmIChJU19NUlNUKGRldikpCi0JCWRldl9wcml2LT5pTFZE U19lbmFibGUgPSBmdXNlX3ZhbHVlICYgRkJfTUlQSV9ESVNBQkxFOwotCi0JRFJNX0lORk8oImlu dGVybmFsIGRpc3BsYXkgaXMgJXNcbiIsCi0JCSBkZXZfcHJpdi0+aUxWRFNfZW5hYmxlID8gIkxW RFMgZGlzcGxheSIgOiAiTUlQSSBkaXNwbGF5Iik7Ci0KLQkgLyogUHJldmVudCBydW50aW1lIHN1 c3BlbmQgYXQgc3RhcnQqLwotCSBpZiAoZGV2X3ByaXYtPmlMVkRTX2VuYWJsZSkgewotCQlkZXZf cHJpdi0+aXNfbHZkc19vbiA9IHRydWU7Ci0JCWRldl9wcml2LT5pc19taXBpX29uID0gZmFsc2U7 Ci0JfSBlbHNlIHsKLQkJZGV2X3ByaXYtPmlzX21pcGlfb24gPSB0cnVlOwotCQlkZXZfcHJpdi0+ aXNfbHZkc19vbiA9IGZhbHNlOwotCX0KLQotCWRldl9wcml2LT52aWRlb19kZXZpY2VfZnVzZSA9 IGZ1c2VfdmFsdWU7Ci0KLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBjaV9yb290LCAweEQwLCBG Ql9SRUcwOSk7Ci0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBjaV9yb290LCAweEQ0LCAmZnVzZV92 YWx1ZSk7Ci0KLQlkZXZfZGJnKGRldi0+ZGV2LCAiU0tVIHZhbHVlcyBpcyAweCV4LlxuIiwgZnVz ZV92YWx1ZSk7Ci0JZnVzZV92YWx1ZV90bXAgPSAoZnVzZV92YWx1ZSAmIEZCX1NLVV9NQVNLKSA+ PiBGQl9TS1VfU0hJRlQ7Ci0KLQlkZXZfcHJpdi0+ZnVzZV9yZWdfdmFsdWUgPSBmdXNlX3ZhbHVl OwotCi0Jc3dpdGNoIChmdXNlX3ZhbHVlX3RtcCkgewotCWNhc2UgRkJfU0tVXzEwMDoKLQkJZGV2 X3ByaXYtPmNvcmVfZnJlcSA9IDIwMDsKLQkJYnJlYWs7Ci0JY2FzZSBGQl9TS1VfMTAwTDoKLQkJ ZGV2X3ByaXYtPmNvcmVfZnJlcSA9IDEwMDsKLQkJYnJlYWs7Ci0JY2FzZSBGQl9TS1VfODM6Ci0J CWRldl9wcml2LT5jb3JlX2ZyZXEgPSAxNjY7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWRldl93 YXJuKGRldi0+ZGV2LCAiSW52YWxpZCBTS1UgdmFsdWVzLCBTS1UgdmFsdWUgPSAweCUwOHhcbiIs Ci0JCQkJCQkJCWZ1c2VfdmFsdWVfdG1wKTsKLQkJZGV2X3ByaXYtPmNvcmVfZnJlcSA9IDA7Ci0J fQotCWRldl9kYmcoZGV2LT5kZXYsICJMTkMgY29yZSBjbGsgaXMgJWRNSHouXG4iLCBkZXZfcHJp di0+Y29yZV9mcmVxKTsKLQlwY2lfZGV2X3B1dChwY2lfcm9vdCk7Ci19Ci0KLS8qCi0gKglHZXQg dGhlIHJldmlzb24gSUQsIEIwOkQyOkYwOzB4MDgKLSAqLwotc3RhdGljIHZvaWQgbWlkX2dldF9w Y2lfcmV2SUQoc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0JdWludDMyX3Qg cGxhdGZvcm1fcmV2X2lkID0gMDsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYo ZGV2X3ByaXYtPmRldi0+ZGV2KTsKLQlpbnQgZG9tYWluID0gcGNpX2RvbWFpbl9ucihwZGV2LT5i dXMpOwotCXN0cnVjdCBwY2lfZGV2ICpwY2lfZ2Z4X3Jvb3QgPQotCQlwY2lfZ2V0X2RvbWFpbl9i dXNfYW5kX3Nsb3QoZG9tYWluLCAwLCBQQ0lfREVWRk4oMiwgMCkpOwotCi0JaWYgKHBjaV9nZnhf cm9vdCA9PSBOVUxMKSB7Ci0JCVdBUk5fT04oMSk7Ci0JCXJldHVybjsKLQl9Ci0JcGNpX3JlYWRf Y29uZmlnX2R3b3JkKHBjaV9nZnhfcm9vdCwgMHgwOCwgJnBsYXRmb3JtX3Jldl9pZCk7Ci0JZGV2 X3ByaXYtPnBsYXRmb3JtX3Jldl9pZCA9ICh1aW50OF90KSBwbGF0Zm9ybV9yZXZfaWQ7Ci0JcGNp X2Rldl9wdXQocGNpX2dmeF9yb290KTsKLQlkZXZfZGJnKGRldl9wcml2LT5kZXYtPmRldiwgInBs YXRmb3JtX3Jldl9pZCBpcyAleFxuIiwKLQkJCQkJZGV2X3ByaXYtPnBsYXRmb3JtX3Jldl9pZCk7 Ci19Ci0KLXN0cnVjdCBtaWRfdmJ0X2hlYWRlciB7Ci0JdTMyIHNpZ25hdHVyZTsKLQl1OCByZXZp c2lvbjsKLX0gX19wYWNrZWQ7Ci0KLS8qIFRoZSBzYW1lIGZvciByMCBhbmQgcjEgKi8KLXN0cnVj dCB2YnRfcjAgewotCXN0cnVjdCBtaWRfdmJ0X2hlYWRlciB2YnRfaGVhZGVyOwotCXU4IHNpemU7 Ci0JdTggY2hlY2tzdW07Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgdmJ0X3IxMCB7Ci0Jc3RydWN0 IG1pZF92YnRfaGVhZGVyIHZidF9oZWFkZXI7Ci0JdTggY2hlY2tzdW07Ci0JdTE2IHNpemU7Ci0J dTggcGFuZWxfY291bnQ7Ci0JdTggcHJpbWFyeV9wYW5lbF9pZHg7Ci0JdTggc2Vjb25kYXJ5X3Bh bmVsX2lkeDsKLQl1OCBfX3Jlc2VydmVkWzVdOwotfSBfX3BhY2tlZDsKLQotc3RhdGljIGludCBy ZWFkX3ZidF9yMCh1MzIgYWRkciwgc3RydWN0IHZidF9yMCAqdmJ0KQotewotCXZvaWQgX19pb21l bSAqdmJ0X3ZpcnR1YWw7Ci0KLQl2YnRfdmlydHVhbCA9IGlvcmVtYXAoYWRkciwgc2l6ZW9mKCp2 YnQpKTsKLQlpZiAodmJ0X3ZpcnR1YWwgPT0gTlVMTCkKLQkJcmV0dXJuIC0xOwotCi0JbWVtY3B5 X2Zyb21pbyh2YnQsIHZidF92aXJ0dWFsLCBzaXplb2YoKnZidCkpOwotCWlvdW5tYXAodmJ0X3Zp cnR1YWwpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcmVhZF92YnRfcjEwKHUzMiBh ZGRyLCBzdHJ1Y3QgdmJ0X3IxMCAqdmJ0KQotewotCXZvaWQgX19pb21lbSAqdmJ0X3ZpcnR1YWw7 Ci0KLQl2YnRfdmlydHVhbCA9IGlvcmVtYXAoYWRkciwgc2l6ZW9mKCp2YnQpKTsKLQlpZiAoIXZi dF92aXJ0dWFsKQotCQlyZXR1cm4gLTE7Ci0KLQltZW1jcHlfZnJvbWlvKHZidCwgdmJ0X3ZpcnR1 YWwsIHNpemVvZigqdmJ0KSk7Ci0JaW91bm1hcCh2YnRfdmlydHVhbCk7Ci0KLQlyZXR1cm4gMDsK LX0KLQotc3RhdGljIGludCBtaWRfZ2V0X3ZidF9kYXRhX3IwKHN0cnVjdCBkcm1fcHNiX3ByaXZh dGUgKmRldl9wcml2LCB1MzIgYWRkcikKLXsKLQlzdHJ1Y3QgdmJ0X3IwIHZidDsKLQl2b2lkIF9f aW9tZW0gKmdjdF92aXJ0dWFsOwotCXN0cnVjdCBnY3RfcjAgZ2N0OwotCXU4IGJwaTsKLQotCWlm IChyZWFkX3ZidF9yMChhZGRyLCAmdmJ0KSkKLQkJcmV0dXJuIC0xOwotCi0JZ2N0X3ZpcnR1YWwg PSBpb3JlbWFwKGFkZHIgKyBzaXplb2YodmJ0KSwgdmJ0LnNpemUgLSBzaXplb2YodmJ0KSk7Ci0J aWYgKCFnY3RfdmlydHVhbCkKLQkJcmV0dXJuIC0xOwotCW1lbWNweV9mcm9taW8oJmdjdCwgZ2N0 X3ZpcnR1YWwsIHNpemVvZihnY3QpKTsKLQlpb3VubWFwKGdjdF92aXJ0dWFsKTsKLQotCWJwaSA9 IGdjdC5QRC5Cb290UGFuZWxJbmRleDsKLQlkZXZfcHJpdi0+Z2N0X2RhdGEuYnBpID0gYnBpOwot CWRldl9wcml2LT5nY3RfZGF0YS5wdCA9IGdjdC5QRC5QYW5lbFR5cGU7Ci0JZGV2X3ByaXYtPmdj dF9kYXRhLkRURCA9IGdjdC5wYW5lbFticGldLkRURDsKLQlkZXZfcHJpdi0+Z2N0X2RhdGEuUGFu ZWxfUG9ydF9Db250cm9sID0KLQkJZ2N0LnBhbmVsW2JwaV0uUGFuZWxfUG9ydF9Db250cm9sOwot CWRldl9wcml2LT5nY3RfZGF0YS5QYW5lbF9NSVBJX0Rpc3BsYXlfRGVzY3JpcHRvciA9Ci0JCWdj dC5wYW5lbFticGldLlBhbmVsX01JUElfRGlzcGxheV9EZXNjcmlwdG9yOwotCi0JcmV0dXJuIDA7 Ci19Ci0KLXN0YXRpYyBpbnQgbWlkX2dldF92YnRfZGF0YV9yMShzdHJ1Y3QgZHJtX3BzYl9wcml2 YXRlICpkZXZfcHJpdiwgdTMyIGFkZHIpCi17Ci0Jc3RydWN0IHZidF9yMCB2YnQ7Ci0Jdm9pZCBf X2lvbWVtICpnY3RfdmlydHVhbDsKLQlzdHJ1Y3QgZ2N0X3IxIGdjdDsKLQl1OCBicGk7Ci0KLQlp ZiAocmVhZF92YnRfcjAoYWRkciwgJnZidCkpCi0JCXJldHVybiAtMTsKLQotCWdjdF92aXJ0dWFs ID0gaW9yZW1hcChhZGRyICsgc2l6ZW9mKHZidCksIHZidC5zaXplIC0gc2l6ZW9mKHZidCkpOwot CWlmICghZ2N0X3ZpcnR1YWwpCi0JCXJldHVybiAtMTsKLQltZW1jcHlfZnJvbWlvKCZnY3QsIGdj dF92aXJ0dWFsLCBzaXplb2YoZ2N0KSk7Ci0JaW91bm1hcChnY3RfdmlydHVhbCk7Ci0KLQlicGkg PSBnY3QuUEQuQm9vdFBhbmVsSW5kZXg7Ci0JZGV2X3ByaXYtPmdjdF9kYXRhLmJwaSA9IGJwaTsK LQlkZXZfcHJpdi0+Z2N0X2RhdGEucHQgPSBnY3QuUEQuUGFuZWxUeXBlOwotCWRldl9wcml2LT5n Y3RfZGF0YS5EVEQgPSBnY3QucGFuZWxbYnBpXS5EVEQ7Ci0JZGV2X3ByaXYtPmdjdF9kYXRhLlBh bmVsX1BvcnRfQ29udHJvbCA9Ci0JCWdjdC5wYW5lbFticGldLlBhbmVsX1BvcnRfQ29udHJvbDsK LQlkZXZfcHJpdi0+Z2N0X2RhdGEuUGFuZWxfTUlQSV9EaXNwbGF5X0Rlc2NyaXB0b3IgPQotCQln Y3QucGFuZWxbYnBpXS5QYW5lbF9NSVBJX0Rpc3BsYXlfRGVzY3JpcHRvcjsKLQotCXJldHVybiAw OwotfQotCi1zdGF0aWMgaW50IG1pZF9nZXRfdmJ0X2RhdGFfcjEwKHN0cnVjdCBkcm1fcHNiX3By aXZhdGUgKmRldl9wcml2LCB1MzIgYWRkcikKLXsKLQlzdHJ1Y3QgdmJ0X3IxMCB2YnQ7Ci0Jdm9p ZCBfX2lvbWVtICpnY3RfdmlydHVhbDsKLQlzdHJ1Y3QgZ2N0X3IxMCAqZ2N0OwotCXN0cnVjdCBv YWt0cmFpbF90aW1pbmdfaW5mbyAqZHBfdGkgPSAmZGV2X3ByaXYtPmdjdF9kYXRhLkRURDsKLQlz dHJ1Y3QgZ2N0X3IxMF90aW1pbmdfaW5mbyAqdGk7Ci0JaW50IHJldCA9IC0xOwotCi0JaWYgKHJl YWRfdmJ0X3IxMChhZGRyLCAmdmJ0KSkKLQkJcmV0dXJuIC0xOwotCi0JZ2N0ID0ga21hbGxvY19h cnJheSh2YnQucGFuZWxfY291bnQsIHNpemVvZigqZ2N0KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFn Y3QpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZ2N0X3ZpcnR1YWwgPSBpb3JlbWFwKGFkZHIgKyBz aXplb2YodmJ0KSwKLQkJCXNpemVvZigqZ2N0KSAqIHZidC5wYW5lbF9jb3VudCk7Ci0JaWYgKCFn Y3RfdmlydHVhbCkKLQkJZ290byBvdXQ7Ci0JbWVtY3B5X2Zyb21pbyhnY3QsIGdjdF92aXJ0dWFs LCBzaXplb2YoKmdjdCkpOwotCWlvdW5tYXAoZ2N0X3ZpcnR1YWwpOwotCi0JZGV2X3ByaXYtPmdj dF9kYXRhLmJwaSA9IHZidC5wcmltYXJ5X3BhbmVsX2lkeDsKLQlkZXZfcHJpdi0+Z2N0X2RhdGEu UGFuZWxfTUlQSV9EaXNwbGF5X0Rlc2NyaXB0b3IgPQotCQlnY3RbdmJ0LnByaW1hcnlfcGFuZWxf aWR4XS5QYW5lbF9NSVBJX0Rpc3BsYXlfRGVzY3JpcHRvcjsKLQotCXRpID0gJmdjdFt2YnQucHJp bWFyeV9wYW5lbF9pZHhdLkRURDsKLQlkcF90aS0+cGl4ZWxfY2xvY2sgPSB0aS0+cGl4ZWxfY2xv Y2s7Ci0JZHBfdGktPmhhY3RpdmVfaGkgPSB0aS0+aGFjdGl2ZV9oaTsKLQlkcF90aS0+aGFjdGl2 ZV9sbyA9IHRpLT5oYWN0aXZlX2xvOwotCWRwX3RpLT5oYmxhbmtfaGkgPSB0aS0+aGJsYW5rX2hp OwotCWRwX3RpLT5oYmxhbmtfbG8gPSB0aS0+aGJsYW5rX2xvOwotCWRwX3RpLT5oc3luY19vZmZz ZXRfaGkgPSB0aS0+aHN5bmNfb2Zmc2V0X2hpOwotCWRwX3RpLT5oc3luY19vZmZzZXRfbG8gPSB0 aS0+aHN5bmNfb2Zmc2V0X2xvOwotCWRwX3RpLT5oc3luY19wdWxzZV93aWR0aF9oaSA9IHRpLT5o c3luY19wdWxzZV93aWR0aF9oaTsKLQlkcF90aS0+aHN5bmNfcHVsc2Vfd2lkdGhfbG8gPSB0aS0+ aHN5bmNfcHVsc2Vfd2lkdGhfbG87Ci0JZHBfdGktPnZhY3RpdmVfaGkgPSB0aS0+dmFjdGl2ZV9o aTsKLQlkcF90aS0+dmFjdGl2ZV9sbyA9IHRpLT52YWN0aXZlX2xvOwotCWRwX3RpLT52Ymxhbmtf aGkgPSB0aS0+dmJsYW5rX2hpOwotCWRwX3RpLT52YmxhbmtfbG8gPSB0aS0+dmJsYW5rX2xvOwot CWRwX3RpLT52c3luY19vZmZzZXRfaGkgPSB0aS0+dnN5bmNfb2Zmc2V0X2hpOwotCWRwX3RpLT52 c3luY19vZmZzZXRfbG8gPSB0aS0+dnN5bmNfb2Zmc2V0X2xvOwotCWRwX3RpLT52c3luY19wdWxz ZV93aWR0aF9oaSA9IHRpLT52c3luY19wdWxzZV93aWR0aF9oaTsKLQlkcF90aS0+dnN5bmNfcHVs c2Vfd2lkdGhfbG8gPSB0aS0+dnN5bmNfcHVsc2Vfd2lkdGhfbG87Ci0KLQlyZXQgPSAwOwotb3V0 OgotCWtmcmVlKGdjdCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgbWlkX2dldF92 YnRfZGF0YShzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdikKLXsKLQlzdHJ1Y3QgZHJt X2RldmljZSAqZGV2ID0gZGV2X3ByaXYtPmRldjsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRv X3BjaV9kZXYoZGV2LT5kZXYpOwotCXUzMiBhZGRyOwotCXU4IF9faW9tZW0gKnZidF92aXJ0dWFs OwotCXN0cnVjdCBtaWRfdmJ0X2hlYWRlciB2YnRfaGVhZGVyOwotCXN0cnVjdCBwY2lfZGV2ICpw Y2lfZ2Z4X3Jvb3QgPQotCQlwY2lfZ2V0X2RvbWFpbl9idXNfYW5kX3Nsb3QocGNpX2RvbWFpbl9u cihwZGV2LT5idXMpLAotCQkJCQkgICAgMCwgUENJX0RFVkZOKDIsIDApKTsKLQlpbnQgcmV0ID0g LTE7Ci0KLQkvKiBHZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIHBsYXRmb3JtIGNvbmZpZyB2YnQgKi8K LQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGNpX2dmeF9yb290LCAweEZDLCAmYWRkcik7Ci0JcGNp X2Rldl9wdXQocGNpX2dmeF9yb290KTsKLQotCWRldl9kYmcoZGV2LT5kZXYsICJkcm0gcGxhdGZv cm0gY29uZmlnIGFkZHJlc3MgaXMgJXhcbiIsIGFkZHIpOwotCi0JaWYgKCFhZGRyKQotCQlnb3Rv IG91dDsKLQotCS8qIGdldCB0aGUgdmlydHVhbCBhZGRyZXNzIG9mIHRoZSB2YnQgKi8KLQl2YnRf dmlydHVhbCA9IGlvcmVtYXAoYWRkciwgc2l6ZW9mKHZidF9oZWFkZXIpKTsKLQlpZiAoIXZidF92 aXJ0dWFsKQotCQlnb3RvIG91dDsKLQotCW1lbWNweV9mcm9taW8oJnZidF9oZWFkZXIsIHZidF92 aXJ0dWFsLCBzaXplb2YodmJ0X2hlYWRlcikpOwotCWlvdW5tYXAodmJ0X3ZpcnR1YWwpOwotCi0J aWYgKG1lbWNtcCgmdmJ0X2hlYWRlci5zaWduYXR1cmUsICIkR0NUIiwgNCkpCi0JCWdvdG8gb3V0 OwotCi0JZGV2X2RiZyhkZXYtPmRldiwgIkdDVCByZXZpc2lvbiBpcyAlMDJ4XG4iLCB2YnRfaGVh ZGVyLnJldmlzaW9uKTsKLQotCXN3aXRjaCAodmJ0X2hlYWRlci5yZXZpc2lvbikgewotCWNhc2Ug MHgwMDoKLQkJcmV0ID0gbWlkX2dldF92YnRfZGF0YV9yMChkZXZfcHJpdiwgYWRkcik7Ci0JCWJy ZWFrOwotCWNhc2UgMHgwMToKLQkJcmV0ID0gbWlkX2dldF92YnRfZGF0YV9yMShkZXZfcHJpdiwg YWRkcik7Ci0JCWJyZWFrOwotCWNhc2UgMHgxMDoKLQkJcmV0ID0gbWlkX2dldF92YnRfZGF0YV9y MTAoZGV2X3ByaXYsIGFkZHIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlkZXZfZXJyKGRldi0+ ZGV2LCAiVW5rbm93biByZXZpc2lvbiBvZiBHQ1QhXG4iKTsKLQl9Ci0KLW91dDoKLQlpZiAocmV0 KQotCQlkZXZfZXJyKGRldi0+ZGV2LCAiVW5hYmxlIHRvIHJlYWQgR0NUISIpOwotCWVsc2UKLQkJ ZGV2X3ByaXYtPmhhc19nY3QgPSB0cnVlOwotfQotCi1pbnQgbWlkX2NoaXBfc2V0dXAoc3RydWN0 IGRybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9 IGRldi0+ZGV2X3ByaXZhdGU7Ci0JbWlkX2dldF9mdXNlX3NldHRpbmdzKGRldik7Ci0JbWlkX2dl dF92YnRfZGF0YShkZXZfcHJpdik7Ci0JbWlkX2dldF9wY2lfcmV2SUQoZGV2X3ByaXYpOwotCXJl dHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9taWRfYmlvcy5o IGIvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9taWRfYmlvcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw MDY0NAppbmRleCA4NzA3ZjdjODkzYTcuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vZ21hNTAwL21pZF9iaW9zLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi0vKiBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCi0vKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioKLSAqIENvcHlyaWdodCAoYykgMjAxMSwgSW50ZWwgQ29ycG9yYXRpb24uCi0gKiBBbGwgUmln aHRzIFJlc2VydmVkLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0cnVjdCBkcm1fZGV2aWNl OwotCi1leHRlcm4gaW50IG1pZF9jaGlwX3NldHVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwot CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL29ha3RyYWlsLmggYi9kcml2ZXJz L2dwdS9kcm0vZ21hNTAwL29ha3RyYWlsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDhkMjBmYTJlZTI4Ni4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAv b2FrdHJhaWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDI0NyArMCwwIEBACi0vKiBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCi0vKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENv cHlyaWdodCAoYykgMjAwNy0yMDExLCBJbnRlbCBDb3Jwb3JhdGlvbi4KLSAqIEFsbCBSaWdodHMg UmVzZXJ2ZWQuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdHJ1Y3QgcHNiX2ludGVsX21v ZGVfZGV2aWNlOwotCi0vKiBNSUQgZGV2aWNlIHNwZWNpZmljIGRlc2NyaXB0b3JzICovCi0KLXN0 cnVjdCBvYWt0cmFpbF90aW1pbmdfaW5mbyB7Ci0JdTE2IHBpeGVsX2Nsb2NrOwotCXU4IGhhY3Rp dmVfbG87Ci0JdTggaGJsYW5rX2xvOwotCXU4IGhibGFua19oaTo0OwotCXU4IGhhY3RpdmVfaGk6 NDsKLQl1OCB2YWN0aXZlX2xvOwotCXU4IHZibGFua19sbzsKLQl1OCB2YmxhbmtfaGk6NDsKLQl1 OCB2YWN0aXZlX2hpOjQ7Ci0JdTggaHN5bmNfb2Zmc2V0X2xvOwotCXU4IGhzeW5jX3B1bHNlX3dp ZHRoX2xvOwotCXU4IHZzeW5jX3B1bHNlX3dpZHRoX2xvOjQ7Ci0JdTggdnN5bmNfb2Zmc2V0X2xv OjQ7Ci0JdTggdnN5bmNfcHVsc2Vfd2lkdGhfaGk6MjsKLQl1OCB2c3luY19vZmZzZXRfaGk6MjsK LQl1OCBoc3luY19wdWxzZV93aWR0aF9oaToyOwotCXU4IGhzeW5jX29mZnNldF9oaToyOwotCXU4 IHdpZHRoX21tX2xvOwotCXU4IGhlaWdodF9tbV9sbzsKLQl1OCBoZWlnaHRfbW1faGk6NDsKLQl1 OCB3aWR0aF9tbV9oaTo0OwotCXU4IGhib3JkZXI7Ci0JdTggdmJvcmRlcjsKLQl1OCB1bmtub3du MDoxOwotCXU4IGhzeW5jX3Bvc2l0aXZlOjE7Ci0JdTggdnN5bmNfcG9zaXRpdmU6MTsKLQl1OCBz ZXBhcmF0ZV9zeW5jOjI7Ci0JdTggc3RlcmVvOjE7Ci0JdTggdW5rbm93bjY6MTsKLQl1OCBpbnRl cmxhY2VkOjE7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgZ2N0X3IxMF90aW1pbmdfaW5mbyB7Ci0J dTE2IHBpeGVsX2Nsb2NrOwotCXUzMiBoYWN0aXZlX2xvOjg7Ci0JdTMyIGhhY3RpdmVfaGk6NDsK LQl1MzIgaGJsYW5rX2xvOjg7Ci0JdTMyIGhibGFua19oaTo0OwotCXUzMiBoc3luY19vZmZzZXRf bG86ODsKLQl1MTYgaHN5bmNfb2Zmc2V0X2hpOjI7Ci0JdTE2IGhzeW5jX3B1bHNlX3dpZHRoX2xv Ojg7Ci0JdTE2IGhzeW5jX3B1bHNlX3dpZHRoX2hpOjI7Ci0JdTE2IGhzeW5jX3Bvc2l0aXZlOjE7 Ci0JdTE2IHJzdmRfMTozOwotCXU4ICB2YWN0aXZlX2xvOjg7Ci0JdTE2IHZhY3RpdmVfaGk6NDsK LQl1MTYgdmJsYW5rX2xvOjg7Ci0JdTE2IHZibGFua19oaTo0OwotCXUxNiB2c3luY19vZmZzZXRf bG86NDsKLQl1MTYgdnN5bmNfb2Zmc2V0X2hpOjI7Ci0JdTE2IHZzeW5jX3B1bHNlX3dpZHRoX2xv OjQ7Ci0JdTE2IHZzeW5jX3B1bHNlX3dpZHRoX2hpOjI7Ci0JdTE2IHZzeW5jX3Bvc2l0aXZlOjE7 Ci0JdTE2IHJzdmRfMjozOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IG9ha3RyYWlsX3BhbmVsX2Rl c2NyaXB0b3JfdjEgewotCXUzMiBQYW5lbF9Qb3J0X0NvbnRyb2w7IC8qIDEgZHdvcmQsIFJlZ2lz dGVyIDB4NjExODAgaWYgTFZEUyAqLwotCQkJCS8qIDB4NjExOTAgaWYgTUlQSSAqLwotCXUzMiBQ YW5lbF9Qb3dlcl9Pbl9TZXF1ZW5jaW5nOy8qMSBkd29yZCxSZWdpc3RlciAweDYxMjA4LCovCi0J dTMyIFBhbmVsX1Bvd2VyX09mZl9TZXF1ZW5jaW5nOy8qMSBkd29yZCxSZWdpc3RlciAweDYxMjBD LCovCi0JdTMyIFBhbmVsX1Bvd2VyX0N5Y2xlX0RlbGF5X2FuZF9SZWZlcmVuY2VfRGl2aXNvcjsv KiAxIGR3b3JkICovCi0JCQkJCQkvKiBSZWdpc3RlciAweDYxMjEwICovCi0Jc3RydWN0IG9ha3Ry YWlsX3RpbWluZ19pbmZvIERURDsvKjE4IGJ5dGVzLCBTdGFuZGFyZCBkZWZpbml0aW9uICovCi0J dTE2IFBhbmVsX0JhY2tsaWdodF9JbnZlcnRlcl9EZXNjcmlwdG9yOy8qIDE2IGJpdHMsIGFzIGZv bGxvd3MgKi8KLQkJCQkvKiBCaXQgMCwgRnJlcXVlbmN5LCAxNSBiaXRzLDAgLSAzMjc2N0h6ICov Ci0JCQkvKiBCaXQgMTUsIFBvbGFyaXR5LCAxIGJpdCwgMDogTm9ybWFsLCAxOiBJbnZlcnRlZCAq LwotCXUxNiBQYW5lbF9NSVBJX0Rpc3BsYXlfRGVzY3JpcHRvcjsKLQkJCS8qMTYgYml0cywgRGVm aW5lZCBhcyBmb2xsb3dzOiAqLwotCQkJLyogaWYgTUlQSSwgMHgwMDAwIGlmIExWRFMgKi8KLQkJ CS8qIEJpdCAwLCBUeXBlLCAyIGJpdHMsICovCi0JCQkvKiAwOiBUeXBlLTEsICovCi0JCQkvKiAx OiBUeXBlLTIsICovCi0JCQkvKiAyOiBUeXBlLTMsICovCi0JCQkvKiAzOiBUeXBlLTQgKi8KLQkJ CS8qIEJpdCAyLCBQaXhlbCBGb3JtYXQsIDQgYml0cyAqLwotCQkJLyogQml0MDogMTZicHAgKG5v dCBzdXBwb3J0ZWQgaW4gTE5DKSwgKi8KLQkJCS8qIEJpdDE6IDE4YnBwIGxvb3NlbHkgcGFja2Vk LCAqLwotCQkJLyogQml0MjogMThicHAgcGFja2VkLCAqLwotCQkJLyogQml0MzogMjRicHAgKi8K LQkJCS8qIEJpdCA2LCBSZXNlcnZlZCwgMiBiaXRzLCAwMGIgKi8KLQkJCS8qIEJpdCA4LCBNaW5p bXVtIFN1cHBvcnRlZCBGcmFtZSBSYXRlLCA2IGJpdHMsIDAgLSA2M0h6ICovCi0JCQkvKiBCaXQg MTQsIFJlc2VydmVkLCAyIGJpdHMsIDAwYiAqLwotfSBfX3BhY2tlZDsKLQotc3RydWN0IG9ha3Ry YWlsX3BhbmVsX2Rlc2NyaXB0b3JfdjIgewotCXUzMiBQYW5lbF9Qb3J0X0NvbnRyb2w7IC8qIDEg ZHdvcmQsIFJlZ2lzdGVyIDB4NjExODAgaWYgTFZEUyAqLwotCQkJCS8qIDB4NjExOTAgaWYgTUlQ SSAqLwotCXUzMiBQYW5lbF9Qb3dlcl9Pbl9TZXF1ZW5jaW5nOy8qMSBkd29yZCxSZWdpc3RlciAw eDYxMjA4LCovCi0JdTMyIFBhbmVsX1Bvd2VyX09mZl9TZXF1ZW5jaW5nOy8qMSBkd29yZCxSZWdp c3RlciAweDYxMjBDLCovCi0JdTggUGFuZWxfUG93ZXJfQ3ljbGVfRGVsYXlfYW5kX1JlZmVyZW5j ZV9EaXZpc29yOy8qIDEgYnl0ZSAqLwotCQkJCQkJLyogUmVnaXN0ZXIgMHg2MTIxMCAqLwotCXN0 cnVjdCBvYWt0cmFpbF90aW1pbmdfaW5mbyBEVEQ7LyoxOCBieXRlcywgU3RhbmRhcmQgZGVmaW5p dGlvbiAqLwotCXUxNiBQYW5lbF9CYWNrbGlnaHRfSW52ZXJ0ZXJfRGVzY3JpcHRvcjsvKjE2IGJp dHMsIGFzIGZvbGxvd3MqLwotCQkJCS8qQml0IDAsIEZyZXF1ZW5jeSwgMTYgYml0cywgMCAtIDMy NzY3SHoqLwotCXU4IFBhbmVsX0luaXRpYWxfQnJpZ2h0bmVzczsvKiBbNzowXSAwIC0gMTAwJSAq LwotCQkJLypCaXQgNywgUG9sYXJpdHksIDEgYml0LDA6IE5vcm1hbCwgMTogSW52ZXJ0ZWQqLwot CXUxNiBQYW5lbF9NSVBJX0Rpc3BsYXlfRGVzY3JpcHRvcjsKLQkJCS8qMTYgYml0cywgRGVmaW5l ZCBhcyBmb2xsb3dzOiAqLwotCQkJLyogaWYgTUlQSSwgMHgwMDAwIGlmIExWRFMgKi8KLQkJCS8q IEJpdCAwLCBUeXBlLCAyIGJpdHMsICovCi0JCQkvKiAwOiBUeXBlLTEsICovCi0JCQkvKiAxOiBU eXBlLTIsICovCi0JCQkvKiAyOiBUeXBlLTMsICovCi0JCQkvKiAzOiBUeXBlLTQgKi8KLQkJCS8q IEJpdCAyLCBQaXhlbCBGb3JtYXQsIDQgYml0cyAqLwotCQkJLyogQml0MDogMTZicHAgKG5vdCBz dXBwb3J0ZWQgaW4gTE5DKSwgKi8KLQkJCS8qIEJpdDE6IDE4YnBwIGxvb3NlbHkgcGFja2VkLCAq LwotCQkJLyogQml0MjogMThicHAgcGFja2VkLCAqLwotCQkJLyogQml0MzogMjRicHAgKi8KLQkJ CS8qIEJpdCA2LCBSZXNlcnZlZCwgMiBiaXRzLCAwMGIgKi8KLQkJCS8qIEJpdCA4LCBNaW5pbXVt IFN1cHBvcnRlZCBGcmFtZSBSYXRlLCA2IGJpdHMsIDAgLSA2M0h6ICovCi0JCQkvKiBCaXQgMTQs IFJlc2VydmVkLCAyIGJpdHMsIDAwYiAqLwotfSBfX3BhY2tlZDsKLQotdW5pb24gb2FrdHJhaWxf cGFuZWxfcnggewotCXN0cnVjdCB7Ci0JCXUxNiBOdW1iZXJPZkxhbmVzOjI7IC8qTnVtIG9mIExh bmVzLCAyIGJpdHMsMCA9IDEgbGFuZSwqLwotCQkJLyogMSA9IDIgbGFuZXMsIDIgPSAzIGxhbmVz LCAzID0gNCBsYW5lcy4gKi8KLQkJdTE2IE1heExhbmVGcmVxOjM7IC8qIDA6IDEwME1IeiwgMTog MjAwTUh6LCAyOiAzMDBNSHosICovCi0JCS8qMzogNDAwTUh6LCA0OiA1MDBNSHosIDU6IDYwME1I eiwgNjogNzAwTUh6LCA3OiA4MDBNSHouKi8KLQkJdTE2IFN1cHBvcnRlZFZpZGVvVHJhbnNmZXJN b2RlOjI7IC8qMDogTm9uLWJ1cnN0IG9ubHkgKi8KLQkJCQkJLyogMTogQnVyc3QgYW5kIG5vbi1i dXJzdCAqLwotCQkJCQkvKiAyLzM6IFJlc2VydmVkICovCi0JCXUxNiBIU0Nsa0JlaGF2aW9yOjE7 IC8qMDogQ29udGludW91cywgMTogTm9uLWNvbnRpbnVvdXMqLwotCQl1MTYgRHVvRGlzcGxheVN1 cHBvcnQ6MTsgLyoxIGJpdCwwOiBObywgMTogWWVzKi8KLQkJdTE2IEVDQ19DaGVja3N1bUNhcGFi aWxpdGllczoxOy8qMSBiaXQsMDogTm8sIDE6IFllcyovCi0JCXUxNiBCaWRpcmVjdGlvbmFsQ29t bXVuaWNhdGlvbjoxOy8qMSBiaXQsMDogTm8sIDE6IFllcyAqLwotCQl1MTYgUnN2ZDo1Oy8qNSBi aXRzLDAwMDAwYiAqLwotCX0gcGFuZWxyeDsKLQl1MTYgcGFuZWxfcmVjZWl2ZXI7Ci19IF9fcGFj a2VkOwotCi1zdHJ1Y3QgZ2N0X3IwIHsKLQl1bmlvbiB7IC8qOCBiaXRzLERlZmluZWQgYXMgZm9s bG93czogKi8KLQkJc3RydWN0IHsKLQkJCXU4IFBhbmVsVHlwZTo0OyAvKjQgYml0cywgQml0IGZp ZWxkIGZvciBwYW5lbHMqLwotCQkJCQkvKiAwIC0gMzogMCA9IExWRFMsIDEgPSBNSVBJKi8KLQkJ CQkJLyoyIGJpdHMsU3BlY2lmaWVzIHdoaWNoIG9mIHRoZSovCi0JCQl1OCBCb290UGFuZWxJbmRl eDoyOwotCQkJCQkvKiA0IHBhbmVscyB0byB1c2UgYnkgZGVmYXVsdCovCi0JCQl1OCBCb290TUlQ SV9EU0lfUnhJbmRleDoyOy8qU3BlY2lmaWVzIHdoaWNoIG9mKi8KLQkJCQkJLyogdGhlIDQgTUlQ SSBEU0kgcmVjZWl2ZXJzIHRvIHVzZSovCi0JCX0gUEQ7Ci0JCXU4IFBhbmVsRGVzY3JpcHRvcjsK LQl9OwotCXN0cnVjdCBvYWt0cmFpbF9wYW5lbF9kZXNjcmlwdG9yX3YxIHBhbmVsWzRdOy8qcGFu ZWwgZGVzY3JzLDM4IGJ5dGVzIGVhY2gqLwotCXVuaW9uIG9ha3RyYWlsX3BhbmVsX3J4IHBhbmVs cnhbNF07IC8qIHBhbmVsIHJlY2VpdmVycyovCi19IF9fcGFja2VkOwotCi1zdHJ1Y3QgZ2N0X3Ix IHsKLQl1bmlvbiB7IC8qOCBiaXRzLERlZmluZWQgYXMgZm9sbG93czogKi8KLQkJc3RydWN0IHsK LQkJCXU4IFBhbmVsVHlwZTo0OyAvKjQgYml0cywgQml0IGZpZWxkIGZvciBwYW5lbHMqLwotCQkJ CQkvKiAwIC0gMzogMCA9IExWRFMsIDEgPSBNSVBJKi8KLQkJCQkJLyoyIGJpdHMsU3BlY2lmaWVz IHdoaWNoIG9mIHRoZSovCi0JCQl1OCBCb290UGFuZWxJbmRleDoyOwotCQkJCQkvKiA0IHBhbmVs cyB0byB1c2UgYnkgZGVmYXVsdCovCi0JCQl1OCBCb290TUlQSV9EU0lfUnhJbmRleDoyOy8qU3Bl Y2lmaWVzIHdoaWNoIG9mKi8KLQkJCQkJLyogdGhlIDQgTUlQSSBEU0kgcmVjZWl2ZXJzIHRvIHVz ZSovCi0JCX0gUEQ7Ci0JCXU4IFBhbmVsRGVzY3JpcHRvcjsKLQl9OwotCXN0cnVjdCBvYWt0cmFp bF9wYW5lbF9kZXNjcmlwdG9yX3YyIHBhbmVsWzRdOy8qcGFuZWwgZGVzY3JzLDM4IGJ5dGVzIGVh Y2gqLwotCXVuaW9uIG9ha3RyYWlsX3BhbmVsX3J4IHBhbmVscnhbNF07IC8qIHBhbmVsIHJlY2Vp dmVycyovCi19IF9fcGFja2VkOwotCi1zdHJ1Y3QgZ2N0X3IxMCB7Ci0Jc3RydWN0IGdjdF9yMTBf dGltaW5nX2luZm8gRFREOwotCXUxNiBQYW5lbF9NSVBJX0Rpc3BsYXlfRGVzY3JpcHRvcjsKLQl1 MTYgUGFuZWxfTUlQSV9SZWNlaXZlcl9EZXNjcmlwdG9yOwotCXUxNiBQYW5lbF9CYWNrbGlnaHRf SW52ZXJ0ZXJfRGVzY3JpcHRvcjsKLQl1OCBQYW5lbF9Jbml0aWFsX0JyaWdodG5lc3M7Ci0JdTMy IE1JUElfQ3Rscl9Jbml0X3B0cjsKLQl1MzIgTUlQSV9QYW5lbF9Jbml0X3B0cjsKLX0gX19wYWNr ZWQ7Ci0KLXN0cnVjdCBvYWt0cmFpbF9nY3RfZGF0YSB7Ci0JdTggYnBpOyAvKiBib290IHBhbmVs IGluZGV4LCBudW1iZXIgb2YgcGFuZWwgdXNlZCBkdXJpbmcgYm9vdCAqLwotCXU4IHB0OyAvKiBw YW5lbCB0eXBlLCA0IGJpdCBmaWVsZCwgMD1sdmRzLCAxPW1pcGkgKi8KLQlzdHJ1Y3Qgb2FrdHJh aWxfdGltaW5nX2luZm8gRFREOyAvKiB0aW1pbmcgaW5mbyBmb3IgdGhlIHNlbGVjdGVkIHBhbmVs ICovCi0JdTMyIFBhbmVsX1BvcnRfQ29udHJvbDsKLQl1MzIgUFBfT25fU2VxdWVuY2luZzsvKjEg ZHdvcmQsUmVnaXN0ZXIgMHg2MTIwOCwqLwotCXUzMiBQUF9PZmZfU2VxdWVuY2luZzsvKjEgZHdv cmQsUmVnaXN0ZXIgMHg2MTIwQywqLwotCXUzMiBQUF9DeWNsZV9EZWxheTsKLQl1MTYgUGFuZWxf QmFja2xpZ2h0X0ludmVydGVyX0Rlc2NyaXB0b3I7Ci0JdTE2IFBhbmVsX01JUElfRGlzcGxheV9E ZXNjcmlwdG9yOwotfSBfX3BhY2tlZDsKLQotI2RlZmluZSBNT0RFX1NFVFRJTkdfSU5fQ1JUQwkJ MHgxCi0jZGVmaW5lIE1PREVfU0VUVElOR19JTl9FTkNPREVSCQkweDIKLSNkZWZpbmUgTU9ERV9T RVRUSU5HX09OX0dPSU5HCQkweDMKLSNkZWZpbmUgTU9ERV9TRVRUSU5HX0lOX0RTUgkJMHg0Ci0j ZGVmaW5lIE1PREVfU0VUVElOR19FTkNPREVSX0RPTkUJMHg4Ci0KLS8qCi0gKglNb29yZXN0b3du IEhETUkgaW50ZXJmYWNlcwotICovCi0KLXN0cnVjdCBvYWt0cmFpbF9oZG1pX2RldiB7Ci0Jc3Ry dWN0IHBjaV9kZXYgKmRldjsKLQl2b2lkIF9faW9tZW0gKnJlZ3M7Ci0JdW5zaWduZWQgaW50IG1t aW8sIG1taW9fbGVuOwotCWludCBkcG1zX21vZGU7Ci0Jc3RydWN0IGhkbWlfaTJjX2RldiAqaTJj X2RldjsKLQotCS8qIHJlZ2lzdGVyIHN0YXRlICovCi0JdTMyIHNhdmVEUExMX0NUUkw7Ci0JdTMy IHNhdmVEUExMX0RJVl9DVFJMOwotCXUzMiBzYXZlRFBMTF9BREpVU1Q7Ci0JdTMyIHNhdmVEUExM X1VQREFURTsKLQl1MzIgc2F2ZURQTExfQ0xLX0VOQUJMRTsKLQl1MzIgc2F2ZVBDSF9IVE9UQUxf QjsKLQl1MzIgc2F2ZVBDSF9IQkxBTktfQjsKLQl1MzIgc2F2ZVBDSF9IU1lOQ19COwotCXUzMiBz YXZlUENIX1ZUT1RBTF9COwotCXUzMiBzYXZlUENIX1ZCTEFOS19COwotCXUzMiBzYXZlUENIX1ZT WU5DX0I7Ci0JdTMyIHNhdmVQQ0hfUElQRUJDT05GOwotCXUzMiBzYXZlUENIX1BJUEVCU1JDOwot fTsKLQotZXh0ZXJuIHZvaWQgb2FrdHJhaWxfaGRtaV9zZXR1cChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KTsKLWV4dGVybiB2b2lkIG9ha3RyYWlsX2hkbWlfdGVhcmRvd24oc3RydWN0IGRybV9kZXZp Y2UgKmRldik7Ci1leHRlcm4gaW50ICBvYWt0cmFpbF9oZG1pX2kyY19pbml0KHN0cnVjdCBwY2lf ZGV2ICpkZXYpOwotZXh0ZXJuIHZvaWQgb2FrdHJhaWxfaGRtaV9pMmNfZXhpdChzdHJ1Y3QgcGNp X2RldiAqZGV2KTsKLWV4dGVybiB2b2lkIG9ha3RyYWlsX2hkbWlfc2F2ZShzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2KTsKLWV4dGVybiB2b2lkIG9ha3RyYWlsX2hkbWlfcmVzdG9yZShzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KTsKLWV4dGVybiB2b2lkIG9ha3RyYWlsX2hkbWlfaW5pdChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCBzdHJ1Y3QgcHNiX2ludGVsX21vZGVfZGV2aWNlICptb2RlX2Rldik7Ci1l eHRlcm4gaW50IG9ha3RyYWlsX2NydGNfaGRtaV9tb2RlX3NldChzdHJ1Y3QgZHJtX2NydGMgKmNy dGMsIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAotCQkJCQkJc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKmFkanVzdGVkX21vZGUsIGludCB4LCBpbnQgeSwKLQkJCQkJCXN0cnVjdCBkcm1f ZnJhbWVidWZmZXIgKm9sZF9mYik7Ci1leHRlcm4gdm9pZCBvYWt0cmFpbF9jcnRjX2hkbWlfZHBt cyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIGludCBtb2RlKTsKLQotCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vZ21hNTAwL29ha3RyYWlsX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9nbWE1 MDAvb2FrdHJhaWxfY3J0Yy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjlmODc5 NzEwMDIuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL29ha3RyYWls X2NydGMuYworKysgL2Rldi9udWxsCkBAIC0xLDY2MyArMCwwIEBACi0vLyBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Ci0vKgotICogQ29weXJpZ2h0IMKpIDIwMDkgSW50ZWwg Q29ycG9yYXRpb24KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxs aW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+Ci0KLSNpbmNsdWRlIDxk cm0vZHJtX2ZvdXJjYy5oPgotCi0jaW5jbHVkZSAiZnJhbWVidWZmZXIuaCIKLSNpbmNsdWRlICJn bWFfZGlzcGxheS5oIgotI2luY2x1ZGUgInBvd2VyLmgiCi0jaW5jbHVkZSAicHNiX2Rydi5oIgot I2luY2x1ZGUgInBzYl9pbnRlbF9kcnYuaCIKLSNpbmNsdWRlICJwc2JfaW50ZWxfcmVnLmgiCi0K LSNkZWZpbmUgTVJTVF9MSU1JVF9MVkRTXzEwMEwJMAotI2RlZmluZSBNUlNUX0xJTUlUX0xWRFNf ODMJMQotI2RlZmluZSBNUlNUX0xJTUlUX0xWRFNfMTAwCTIKLSNkZWZpbmUgTVJTVF9MSU1JVF9T RFZPCQkzCi0KLSNkZWZpbmUgTVJTVF9ET1RfTUlOCQkgIDE5NzUwCi0jZGVmaW5lIE1SU1RfRE9U X01BWAkJICAxMjAwMDAKLSNkZWZpbmUgTVJTVF9NX01JTl8xMDBMCQkgICAgMjAKLSNkZWZpbmUg TVJTVF9NX01JTl8xMDAJCSAgICAxMAotI2RlZmluZSBNUlNUX01fTUlOXzgzCQkgICAgMTIKLSNk ZWZpbmUgTVJTVF9NX01BWF8xMDBMCQkgICAgMzQKLSNkZWZpbmUgTVJTVF9NX01BWF8xMDAJCSAg ICAxNwotI2RlZmluZSBNUlNUX01fTUFYXzgzCQkgICAgMjAKLSNkZWZpbmUgTVJTVF9QMV9NSU4J CSAgICAyCi0jZGVmaW5lIE1SU1RfUDFfTUFYXzAJCSAgICA3Ci0jZGVmaW5lIE1SU1RfUDFfTUFY XzEJCSAgICA4Ci0KLXN0YXRpYyBib29sIG1yc3RfbHZkc19maW5kX2Jlc3RfcGxsKGNvbnN0IHN0 cnVjdCBnbWFfbGltaXRfdCAqbGltaXQsCi0JCQkJICAgIHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywg aW50IHRhcmdldCwKLQkJCQkgICAgaW50IHJlZmNsaywgc3RydWN0IGdtYV9jbG9ja190ICpiZXN0 X2Nsb2NrKTsKLQotc3RhdGljIGJvb2wgbXJzdF9zZHZvX2ZpbmRfYmVzdF9wbGwoY29uc3Qgc3Ry dWN0IGdtYV9saW1pdF90ICpsaW1pdCwKLQkJCQkgICAgc3RydWN0IGRybV9jcnRjICpjcnRjLCBp bnQgdGFyZ2V0LAotCQkJCSAgICBpbnQgcmVmY2xrLCBzdHJ1Y3QgZ21hX2Nsb2NrX3QgKmJlc3Rf Y2xvY2spOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGdtYV9saW1pdF90IG1yc3RfbGltaXRzW10g PSB7Ci0JewkJCS8qIE1SU1RfTElNSVRfTFZEU18xMDBMICovCi0JIC5kb3QgPSB7Lm1pbiA9IE1S U1RfRE9UX01JTiwgLm1heCA9IE1SU1RfRE9UX01BWH0sCi0JIC5tID0gey5taW4gPSBNUlNUX01f TUlOXzEwMEwsIC5tYXggPSBNUlNUX01fTUFYXzEwMEx9LAotCSAucDEgPSB7Lm1pbiA9IE1SU1Rf UDFfTUlOLCAubWF4ID0gTVJTVF9QMV9NQVhfMX0sCi0JIC5maW5kX3BsbCA9IG1yc3RfbHZkc19m aW5kX2Jlc3RfcGxsLAotCSB9LAotCXsJCQkvKiBNUlNUX0xJTUlUX0xWRFNfODNMICovCi0JIC5k b3QgPSB7Lm1pbiA9IE1SU1RfRE9UX01JTiwgLm1heCA9IE1SU1RfRE9UX01BWH0sCi0JIC5tID0g ey5taW4gPSBNUlNUX01fTUlOXzgzLCAubWF4ID0gTVJTVF9NX01BWF84M30sCi0JIC5wMSA9IHsu bWluID0gTVJTVF9QMV9NSU4sIC5tYXggPSBNUlNUX1AxX01BWF8wfSwKLQkgLmZpbmRfcGxsID0g bXJzdF9sdmRzX2ZpbmRfYmVzdF9wbGwsCi0JIH0sCi0JewkJCS8qIE1SU1RfTElNSVRfTFZEU18x MDAgKi8KLQkgLmRvdCA9IHsubWluID0gTVJTVF9ET1RfTUlOLCAubWF4ID0gTVJTVF9ET1RfTUFY fSwKLQkgLm0gPSB7Lm1pbiA9IE1SU1RfTV9NSU5fMTAwLCAubWF4ID0gTVJTVF9NX01BWF8xMDB9 LAotCSAucDEgPSB7Lm1pbiA9IE1SU1RfUDFfTUlOLCAubWF4ID0gTVJTVF9QMV9NQVhfMX0sCi0J IC5maW5kX3BsbCA9IG1yc3RfbHZkc19maW5kX2Jlc3RfcGxsLAotCSB9LAotCXsJCQkvKiBNUlNU X0xJTUlUX1NEVk8gKi8KLQkgLnZjbyA9IHsubWluID0gMTQwMDAwMCwgLm1heCA9IDI4MDAwMDB9 LAotCSAubiA9IHsubWluID0gMywgLm1heCA9IDd9LAotCSAubSA9IHsubWluID0gODAsIC5tYXgg PSAxMzd9LAotCSAucDEgPSB7Lm1pbiA9IDEsIC5tYXggPSAyfSwKLQkgLnAyID0gey5kb3RfbGlt aXQgPSAyMDAwMDAsIC5wMl9zbG93ID0gMTAsIC5wMl9mYXN0ID0gMTB9LAotCSAuZmluZF9wbGwg PSBtcnN0X3Nkdm9fZmluZF9iZXN0X3BsbCwKLQkgfSwKLX07Ci0KLSNkZWZpbmUgTVJTVF9NX01J TgkgICAgMTAKLXN0YXRpYyBjb25zdCB1MzIgb2FrdHJhaWxfbV9jb252ZXJ0c1tdID0gewotCTB4 MkIsIDB4MTUsIDB4MkEsIDB4MzUsIDB4MUEsIDB4MEQsIDB4MjYsIDB4MzMsIDB4MTksIDB4MkMs Ci0JMHgzNiwgMHgzQiwgMHgxRCwgMHgyRSwgMHgzNywgMHgxQiwgMHgyRCwgMHgxNiwgMHgwQiwg MHgyNSwKLQkweDEyLCAweDA5LCAweDI0LCAweDMyLCAweDM5LCAweDFjLAotfTsKLQotc3RhdGlj IGNvbnN0IHN0cnVjdCBnbWFfbGltaXRfdCAqbXJzdF9saW1pdChzdHJ1Y3QgZHJtX2NydGMgKmNy dGMsCi0JCQkJCSAgICBpbnQgcmVmY2xrKQotewotCWNvbnN0IHN0cnVjdCBnbWFfbGltaXRfdCAq bGltaXQgPSBOVUxMOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Ci0Jc3Ry dWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCi0JaWYg KGdtYV9waXBlX2hhc190eXBlKGNydGMsIElOVEVMX09VVFBVVF9MVkRTKQotCSAgICB8fCBnbWFf cGlwZV9oYXNfdHlwZShjcnRjLCBJTlRFTF9PVVRQVVRfTUlQSSkpIHsKLQkJc3dpdGNoIChkZXZf cHJpdi0+Y29yZV9mcmVxKSB7Ci0JCWNhc2UgMTAwOgotCQkJbGltaXQgPSAmbXJzdF9saW1pdHNb TVJTVF9MSU1JVF9MVkRTXzEwMExdOwotCQkJYnJlYWs7Ci0JCWNhc2UgMTY2OgotCQkJbGltaXQg PSAmbXJzdF9saW1pdHNbTVJTVF9MSU1JVF9MVkRTXzgzXTsKLQkJCWJyZWFrOwotCQljYXNlIDIw MDoKLQkJCWxpbWl0ID0gJm1yc3RfbGltaXRzW01SU1RfTElNSVRfTFZEU18xMDBdOwotCQkJYnJl YWs7Ci0JCX0KLQl9IGVsc2UgaWYgKGdtYV9waXBlX2hhc190eXBlKGNydGMsIElOVEVMX09VVFBV VF9TRFZPKSkgewotCQlsaW1pdCA9ICZtcnN0X2xpbWl0c1tNUlNUX0xJTUlUX1NEVk9dOwotCX0g ZWxzZSB7Ci0JCWxpbWl0ID0gTlVMTDsKLQkJZGV2X2VycihkZXYtPmRldiwgIm1yc3RfbGltaXQg V3JvbmcgZGlzcGxheSB0eXBlLlxuIik7Ci0JfQotCi0JcmV0dXJuIGxpbWl0OwotfQotCi0vKiog RGVyaXZlIHRoZSBwaXhlbCBjbG9jayBmb3IgdGhlIGdpdmVuIHJlZmNsayBhbmQgZGl2aXNvcnMg Zm9yIDh4eCBjaGlwcy4gKi8KLXN0YXRpYyB2b2lkIG1yc3RfbHZkc19jbG9jayhpbnQgcmVmY2xr LCBzdHJ1Y3QgZ21hX2Nsb2NrX3QgKmNsb2NrKQotewotCWNsb2NrLT5kb3QgPSAocmVmY2xrICog Y2xvY2stPm0pIC8gKDE0ICogY2xvY2stPnAxKTsKLX0KLQotc3RhdGljIHZvaWQgbXJzdF9wcmlu dF9wbGwoc3RydWN0IGdtYV9jbG9ja190ICpjbG9jaykKLXsKLQlEUk1fREVCVUdfRFJJVkVSKCJk b3RjbG9jaz0lZCwgIG09JWQsIG0xPSVkLCBtMj0lZCwgbj0lZCwgcDE9JWQsIHAyPSVkXG4iLAot CQkJIGNsb2NrLT5kb3QsIGNsb2NrLT5tLCBjbG9jay0+bTEsIGNsb2NrLT5tMiwgY2xvY2stPm4s Ci0JCQkgY2xvY2stPnAxLCBjbG9jay0+cDIpOwotfQotCi1zdGF0aWMgYm9vbCBtcnN0X3Nkdm9f ZmluZF9iZXN0X3BsbChjb25zdCBzdHJ1Y3QgZ21hX2xpbWl0X3QgKmxpbWl0LAotCQkJCSAgICBz dHJ1Y3QgZHJtX2NydGMgKmNydGMsIGludCB0YXJnZXQsCi0JCQkJICAgIGludCByZWZjbGssIHN0 cnVjdCBnbWFfY2xvY2tfdCAqYmVzdF9jbG9jaykKLXsKLQlzdHJ1Y3QgZ21hX2Nsb2NrX3QgY2xv Y2s7Ci0JdTMyIHRhcmdldF92Y28sIGFjdHVhbF9mcmVxOwotCXMzMiBmcmVxX2Vycm9yLCBtaW5f ZXJyb3IgPSAxMDAwMDA7Ci0KLQltZW1zZXQoYmVzdF9jbG9jaywgMCwgc2l6ZW9mKCpiZXN0X2Ns b2NrKSk7Ci0JbWVtc2V0KCZjbG9jaywgMCwgc2l6ZW9mKGNsb2NrKSk7Ci0KLQlmb3IgKGNsb2Nr Lm0gPSBsaW1pdC0+bS5taW47IGNsb2NrLm0gPD0gbGltaXQtPm0ubWF4OyBjbG9jay5tKyspIHsK LQkJZm9yIChjbG9jay5uID0gbGltaXQtPm4ubWluOyBjbG9jay5uIDw9IGxpbWl0LT5uLm1heDsK LQkJICAgICBjbG9jay5uKyspIHsKLQkJCWZvciAoY2xvY2sucDEgPSBsaW1pdC0+cDEubWluOwot CQkJICAgICBjbG9jay5wMSA8PSBsaW1pdC0+cDEubWF4OyBjbG9jay5wMSsrKSB7Ci0JCQkJLyog cDIgdmFsdWUgYWx3YXlzIHN0b3JlZCBpbiBwMl9zbG93IG9uIFNEVk8gKi8KLQkJCQljbG9jay5w ID0gY2xvY2sucDEgKiBsaW1pdC0+cDIucDJfc2xvdzsKLQkJCQl0YXJnZXRfdmNvID0gdGFyZ2V0 ICogY2xvY2sucDsKLQotCQkJCS8qIFZDTyB3aWxsIGluY3JlYXNlIGF0IHRoaXMgcG9pbnQgc28g YnJlYWsgKi8KLQkJCQlpZiAodGFyZ2V0X3ZjbyA+IGxpbWl0LT52Y28ubWF4KQotCQkJCQlicmVh azsKLQotCQkJCWlmICh0YXJnZXRfdmNvIDwgbGltaXQtPnZjby5taW4pCi0JCQkJCWNvbnRpbnVl OwotCi0JCQkJYWN0dWFsX2ZyZXEgPSAocmVmY2xrICogY2xvY2subSkgLwotCQkJCQkgICAgICAo Y2xvY2subiAqIGNsb2NrLnApOwotCQkJCWZyZXFfZXJyb3IgPSAxMDAwMCAtCi0JCQkJCSAgICAg KCh0YXJnZXQgKiAxMDAwMCkgLyBhY3R1YWxfZnJlcSk7Ci0KLQkJCQlpZiAoZnJlcV9lcnJvciA8 IC1taW5fZXJyb3IpIHsKLQkJCQkJLyogZnJlcV9lcnJvciB3aWxsIHN0YXJ0IHRvIGRlY3JlYXNl IGF0Ci0JCQkJCSAgIHRoaXMgcG9pbnQgc28gYnJlYWsgKi8KLQkJCQkJYnJlYWs7Ci0JCQkJfQot Ci0JCQkJaWYgKGZyZXFfZXJyb3IgPCAwKQotCQkJCQlmcmVxX2Vycm9yID0gLWZyZXFfZXJyb3I7 Ci0KLQkJCQlpZiAoZnJlcV9lcnJvciA8IG1pbl9lcnJvcikgewotCQkJCQltaW5fZXJyb3IgPSBm cmVxX2Vycm9yOwotCQkJCQkqYmVzdF9jbG9jayA9IGNsb2NrOwotCQkJCX0KLQkJCX0KLQkJfQot CQlpZiAobWluX2Vycm9yID09IDApCi0JCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gbWluX2Vycm9y ID09IDA7Ci19Ci0KLS8qCi0gKiBSZXR1cm5zIGEgc2V0IG9mIGRpdmlzb3JzIGZvciB0aGUgZGVz aXJlZCB0YXJnZXQgY2xvY2sgd2l0aCB0aGUgZ2l2ZW4gcmVmY2xrLAotICogb3IgRkFMU0UuICBE aXZpc29yIHZhbHVlcyBhcmUgdGhlIGFjdHVhbCBkaXZpc29ycyBmb3IKLSAqLwotc3RhdGljIGJv b2wgbXJzdF9sdmRzX2ZpbmRfYmVzdF9wbGwoY29uc3Qgc3RydWN0IGdtYV9saW1pdF90ICpsaW1p dCwKLQkJCQkgICAgc3RydWN0IGRybV9jcnRjICpjcnRjLCBpbnQgdGFyZ2V0LAotCQkJCSAgICBp bnQgcmVmY2xrLCBzdHJ1Y3QgZ21hX2Nsb2NrX3QgKmJlc3RfY2xvY2spCi17Ci0Jc3RydWN0IGdt YV9jbG9ja190IGNsb2NrOwotCWludCBlcnIgPSB0YXJnZXQ7Ci0KLQltZW1zZXQoYmVzdF9jbG9j aywgMCwgc2l6ZW9mKCpiZXN0X2Nsb2NrKSk7Ci0JbWVtc2V0KCZjbG9jaywgMCwgc2l6ZW9mKGNs b2NrKSk7Ci0KLQlmb3IgKGNsb2NrLm0gPSBsaW1pdC0+bS5taW47IGNsb2NrLm0gPD0gbGltaXQt Pm0ubWF4OyBjbG9jay5tKyspIHsKLQkJZm9yIChjbG9jay5wMSA9IGxpbWl0LT5wMS5taW47IGNs b2NrLnAxIDw9IGxpbWl0LT5wMS5tYXg7Ci0JCSAgICAgY2xvY2sucDErKykgewotCQkJaW50IHRo aXNfZXJyOwotCi0JCQltcnN0X2x2ZHNfY2xvY2socmVmY2xrLCAmY2xvY2spOwotCi0JCQl0aGlz X2VyciA9IGFicyhjbG9jay5kb3QgLSB0YXJnZXQpOwotCQkJaWYgKHRoaXNfZXJyIDwgZXJyKSB7 Ci0JCQkJKmJlc3RfY2xvY2sgPSBjbG9jazsKLQkJCQllcnIgPSB0aGlzX2VycjsKLQkJCX0KLQkJ fQotCX0KLQlyZXR1cm4gZXJyICE9IHRhcmdldDsKLX0KLQotLyoKLSAqIFNldHMgdGhlIHBvd2Vy IG1hbmFnZW1lbnQgbW9kZSBvZiB0aGUgcGlwZSBhbmQgcGxhbmUuCi0gKgotICogVGhpcyBjb2Rl IHNob3VsZCBwcm9iYWJseSBncm93IHN1cHBvcnQgZm9yIHR1cm5pbmcgdGhlIGN1cnNvciBvZmYg YW5kIGJhY2sKLSAqIG9uIGFwcHJvcHJpYXRlbHkgYXQgdGhlIHNhbWUgdGltZSBhcyB3ZSdyZSB0 dXJuaW5nIHRoZSBwaXBlIG9mZi9vbi4KLSAqLwotc3RhdGljIHZvaWQgb2FrdHJhaWxfY3J0Y19k cG1zKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgaW50IG1vZGUpCi17Ci0Jc3RydWN0IGRybV9kZXZp Y2UgKmRldiA9IGNydGMtPmRldjsKLQlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9 IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGdtYV9jcnRjICpnbWFfY3J0YyA9IHRvX2dtYV9j cnRjKGNydGMpOwotCWludCBwaXBlID0gZ21hX2NydGMtPnBpcGU7Ci0JY29uc3Qgc3RydWN0IHBz Yl9vZmZzZXQgKm1hcCA9ICZkZXZfcHJpdi0+cmVnbWFwW3BpcGVdOwotCXUzMiB0ZW1wOwotCWlu dCBpOwotCWludCBuZWVkX2F1eCA9IGdtYV9waXBlX2hhc190eXBlKGNydGMsIElOVEVMX09VVFBV VF9TRFZPKSA/IDEgOiAwOwotCi0JaWYgKGdtYV9waXBlX2hhc190eXBlKGNydGMsIElOVEVMX09V VFBVVF9IRE1JKSkgewotCQlvYWt0cmFpbF9jcnRjX2hkbWlfZHBtcyhjcnRjLCBtb2RlKTsKLQkJ cmV0dXJuOwotCX0KLQotCWlmICghZ21hX3Bvd2VyX2JlZ2luKGRldiwgdHJ1ZSkpCi0JCXJldHVy bjsKLQotCS8qIFhYWDogV2hlbiBvdXIgb3V0cHV0cyBhcmUgYWxsIHVuYXdhcmUgb2YgRFBNUyBt b2RlcyBvdGhlciB0aGFuIG9mZgotCSAqIGFuZCBvbiwgd2Ugc2hvdWxkIG1hcCB0aG9zZSBtb2Rl cyB0byBEUk1fTU9ERV9EUE1TX09GRiBpbiB0aGUgQ1JUQy4KLQkgKi8KLQlzd2l0Y2ggKG1vZGUp IHsKLQljYXNlIERSTV9NT0RFX0RQTVNfT046Ci0JY2FzZSBEUk1fTU9ERV9EUE1TX1NUQU5EQlk6 Ci0JY2FzZSBEUk1fTU9ERV9EUE1TX1NVU1BFTkQ6Ci0JCWZvciAoaSA9IDA7IGkgPD0gbmVlZF9h dXg7IGkrKykgewotCQkJLyogRW5hYmxlIHRoZSBEUExMICovCi0JCQl0ZW1wID0gUkVHX1JFQURf V0lUSF9BVVgobWFwLT5kcGxsLCBpKTsKLQkJCWlmICgodGVtcCAmIERQTExfVkNPX0VOQUJMRSkg PT0gMCkgewotCQkJCVJFR19XUklURV9XSVRIX0FVWChtYXAtPmRwbGwsIHRlbXAsIGkpOwotCQkJ CVJFR19SRUFEX1dJVEhfQVVYKG1hcC0+ZHBsbCwgaSk7Ci0JCQkJLyogV2FpdCBmb3IgdGhlIGNs b2NrcyB0byBzdGFiaWxpemUuICovCi0JCQkJdWRlbGF5KDE1MCk7Ci0JCQkJUkVHX1dSSVRFX1dJ VEhfQVVYKG1hcC0+ZHBsbCwKLQkJCQkJCSAgIHRlbXAgfCBEUExMX1ZDT19FTkFCTEUsIGkpOwot CQkJCVJFR19SRUFEX1dJVEhfQVVYKG1hcC0+ZHBsbCwgaSk7Ci0JCQkJLyogV2FpdCBmb3IgdGhl IGNsb2NrcyB0byBzdGFiaWxpemUuICovCi0JCQkJdWRlbGF5KDE1MCk7Ci0JCQkJUkVHX1dSSVRF X1dJVEhfQVVYKG1hcC0+ZHBsbCwKLQkJCQkJCSAgIHRlbXAgfCBEUExMX1ZDT19FTkFCTEUsIGkp OwotCQkJCVJFR19SRUFEX1dJVEhfQVVYKG1hcC0+ZHBsbCwgaSk7Ci0JCQkJLyogV2FpdCBmb3Ig dGhlIGNsb2NrcyB0byBzdGFiaWxpemUuICovCi0JCQkJdWRlbGF5KDE1MCk7Ci0JCQl9Ci0KLQkJ CS8qIEVuYWJsZSB0aGUgcGlwZSAqLwotCQkJdGVtcCA9IFJFR19SRUFEX1dJVEhfQVVYKG1hcC0+ Y29uZiwgaSk7Ci0JCQlpZiAoKHRlbXAgJiBQSVBFQUNPTkZfRU5BQkxFKSA9PSAwKSB7Ci0JCQkJ UkVHX1dSSVRFX1dJVEhfQVVYKG1hcC0+Y29uZiwKLQkJCQkJCSAgIHRlbXAgfCBQSVBFQUNPTkZf RU5BQkxFLCBpKTsKLQkJCX0KLQotCQkJLyogRW5hYmxlIHRoZSBwbGFuZSAqLwotCQkJdGVtcCA9 IFJFR19SRUFEX1dJVEhfQVVYKG1hcC0+Y250ciwgaSk7Ci0JCQlpZiAoKHRlbXAgJiBESVNQTEFZ X1BMQU5FX0VOQUJMRSkgPT0gMCkgewotCQkJCVJFR19XUklURV9XSVRIX0FVWChtYXAtPmNudHIs Ci0JCQkJCQkgICB0ZW1wIHwgRElTUExBWV9QTEFORV9FTkFCTEUsCi0JCQkJCQkgICBpKTsKLQkJ CQkvKiBGbHVzaCB0aGUgcGxhbmUgY2hhbmdlcyAqLwotCQkJCVJFR19XUklURV9XSVRIX0FVWCht YXAtPmJhc2UsCi0JCQkJCVJFR19SRUFEX1dJVEhfQVVYKG1hcC0+YmFzZSwgaSksIGkpOwotCQkJ fQotCi0JCX0KLQkJZ21hX2NydGNfbG9hZF9sdXQoY3J0Yyk7Ci0KLQkJLyogR2l2ZSB0aGUgb3Zl cmxheSBzY2FsZXIgYSBjaGFuY2UgdG8gZW5hYmxlCi0JCSAgIGlmIGl0J3Mgb24gdGhpcyBwaXBl ICovCi0JCS8qIHBzYl9pbnRlbF9jcnRjX2RwbXNfdmlkZW8oY3J0YywgdHJ1ZSk7IFRPRE8gKi8K LQkJYnJlYWs7Ci0JY2FzZSBEUk1fTU9ERV9EUE1TX09GRjoKLQkJLyogR2l2ZSB0aGUgb3Zlcmxh eSBzY2FsZXIgYSBjaGFuY2UgdG8gZGlzYWJsZQotCQkgKiBpZiBpdCdzIG9uIHRoaXMgcGlwZSAq LwotCQkvKiBwc2JfaW50ZWxfY3J0Y19kcG1zX3ZpZGVvKGNydGMsIEZBTFNFKTsgVE9ETyAqLwot Ci0JCWZvciAoaSA9IDA7IGkgPD0gbmVlZF9hdXg7IGkrKykgewotCQkJLyogRGlzYWJsZSB0aGUg VkdBIHBsYW5lIHRoYXQgd2UgbmV2ZXIgdXNlICovCi0JCQlSRUdfV1JJVEVfV0lUSF9BVVgoVkdB Q05UUkwsIFZHQV9ESVNQX0RJU0FCTEUsIGkpOwotCQkJLyogRGlzYWJsZSBkaXNwbGF5IHBsYW5l ICovCi0JCQl0ZW1wID0gUkVHX1JFQURfV0lUSF9BVVgobWFwLT5jbnRyLCBpKTsKLQkJCWlmICgo dGVtcCAmIERJU1BMQVlfUExBTkVfRU5BQkxFKSAhPSAwKSB7Ci0JCQkJUkVHX1dSSVRFX1dJVEhf QVVYKG1hcC0+Y250ciwKLQkJCQkJdGVtcCAmIH5ESVNQTEFZX1BMQU5FX0VOQUJMRSwgaSk7Ci0J CQkJLyogRmx1c2ggdGhlIHBsYW5lIGNoYW5nZXMgKi8KLQkJCQlSRUdfV1JJVEVfV0lUSF9BVVgo bWFwLT5iYXNlLAotCQkJCQkJICAgUkVHX1JFQUQobWFwLT5iYXNlKSwgaSk7Ci0JCQkJUkVHX1JF QURfV0lUSF9BVVgobWFwLT5iYXNlLCBpKTsKLQkJCX0KLQotCQkJLyogTmV4dCwgZGlzYWJsZSBk aXNwbGF5IHBpcGVzICovCi0JCQl0ZW1wID0gUkVHX1JFQURfV0lUSF9BVVgobWFwLT5jb25mLCBp KTsKLQkJCWlmICgodGVtcCAmIFBJUEVBQ09ORl9FTkFCTEUpICE9IDApIHsKLQkJCQlSRUdfV1JJ VEVfV0lUSF9BVVgobWFwLT5jb25mLAotCQkJCQkJICAgdGVtcCAmIH5QSVBFQUNPTkZfRU5BQkxF LCBpKTsKLQkJCQlSRUdfUkVBRF9XSVRIX0FVWChtYXAtPmNvbmYsIGkpOwotCQkJfQotCQkJLyog V2FpdCBmb3IgZm9yIHRoZSBwaXBlIGRpc2FibGUgdG8gdGFrZSBlZmZlY3QuICovCi0JCQlnbWFf d2FpdF9mb3JfdmJsYW5rKGRldik7Ci0KLQkJCXRlbXAgPSBSRUdfUkVBRF9XSVRIX0FVWChtYXAt PmRwbGwsIGkpOwotCQkJaWYgKCh0ZW1wICYgRFBMTF9WQ09fRU5BQkxFKSAhPSAwKSB7Ci0JCQkJ UkVHX1dSSVRFX1dJVEhfQVVYKG1hcC0+ZHBsbCwKLQkJCQkJCSAgIHRlbXAgJiB+RFBMTF9WQ09f RU5BQkxFLCBpKTsKLQkJCQlSRUdfUkVBRF9XSVRIX0FVWChtYXAtPmRwbGwsIGkpOwotCQkJfQot Ci0JCQkvKiBXYWl0IGZvciB0aGUgY2xvY2tzIHRvIHR1cm4gb2ZmLiAqLwotCQkJdWRlbGF5KDE1 MCk7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCi0JLyogU2V0IEZJRk8gV2F0ZXJtYXJrcyAodmFsdWVz IHRha2VuIGZyb20gRU1HRCkgKi8KLQlSRUdfV1JJVEUoRFNQQVJCLCAweDNmODApOwotCVJFR19X UklURShEU1BGVzEsIDB4M2Y4ZjA0MDQpOwotCVJFR19XUklURShEU1BGVzIsIDB4MDQwNDBmMDQp OwotCVJFR19XUklURShEU1BGVzMsIDB4MCk7Ci0JUkVHX1dSSVRFKERTUEZXNCwgMHgwNDA0MDQw NCk7Ci0JUkVHX1dSSVRFKERTUEZXNSwgMHgwNDA0MDQwNCk7Ci0JUkVHX1dSSVRFKERTUEZXNiwg MHg3OCk7Ci0JUkVHX1dSSVRFKERTUENISUNLRU5CSVQsIFJFR19SRUFEKERTUENISUNLRU5CSVQp IHwgMHhjMDQwKTsKLQotCWdtYV9wb3dlcl9lbmQoZGV2KTsKLX0KLQotLyoKLSAqIFJldHVybiB0 aGUgcGlwZSBjdXJyZW50bHkgY29ubmVjdGVkIHRvIHRoZSBwYW5lbCBmaXR0ZXIsCi0gKiBvciAt MSBpZiB0aGUgcGFuZWwgZml0dGVyIGlzIG5vdCBwcmVzZW50IG9yIG5vdCBpbiB1c2UKLSAqLwot c3RhdGljIGludCBvYWt0cmFpbF9wYW5lbF9maXR0ZXJfcGlwZShzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KQotewotCXUzMiBwZml0X2NvbnRyb2w7Ci0KLQlwZml0X2NvbnRyb2wgPSBSRUdfUkVBRChQ RklUX0NPTlRST0wpOwotCi0JLyogU2VlIGlmIHRoZSBwYW5lbCBmaXR0ZXIgaXMgaW4gdXNlICov Ci0JaWYgKChwZml0X2NvbnRyb2wgJiBQRklUX0VOQUJMRSkgPT0gMCkKLQkJcmV0dXJuIC0xOwot CXJldHVybiAocGZpdF9jb250cm9sID4+IDI5KSAmIDM7Ci19Ci0KLXN0YXRpYyBpbnQgb2FrdHJh aWxfY3J0Y19tb2RlX3NldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCi0JCQkgICAgICBzdHJ1Y3Qg ZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKLQkJCSAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICphZGp1c3RlZF9tb2RlLAotCQkJICAgICAgaW50IHgsIGludCB5LAotCQkJICAgICAgc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqb2xkX2ZiKQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBj cnRjLT5kZXY7Ci0Jc3RydWN0IGdtYV9jcnRjICpnbWFfY3J0YyA9IHRvX2dtYV9jcnRjKGNydGMp OwotCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsK LQlpbnQgcGlwZSA9IGdtYV9jcnRjLT5waXBlOwotCWNvbnN0IHN0cnVjdCBwc2Jfb2Zmc2V0ICpt YXAgPSAmZGV2X3ByaXYtPnJlZ21hcFtwaXBlXTsKLQlpbnQgcmVmY2xrID0gMDsKLQlzdHJ1Y3Qg Z21hX2Nsb2NrX3QgY2xvY2s7Ci0JY29uc3Qgc3RydWN0IGdtYV9saW1pdF90ICpsaW1pdDsKLQl1 MzIgZHBsbCA9IDAsIGZwID0gMCwgZHNwY250ciwgcGlwZWNvbmY7Ci0JYm9vbCBvaywgaXNfc2R2 byA9IGZhbHNlOwotCWJvb2wgaXNfbHZkcyA9IGZhbHNlOwotCWJvb2wgaXNfbWlwaSA9IGZhbHNl OwotCXN0cnVjdCBkcm1fbW9kZV9jb25maWcgKm1vZGVfY29uZmlnID0gJmRldi0+bW9kZV9jb25m aWc7Ci0Jc3RydWN0IGdtYV9lbmNvZGVyICpnbWFfZW5jb2RlciA9IE5VTEw7Ci0JdWludDY0X3Qg c2NhbGluZ1R5cGUgPSBEUk1fTU9ERV9TQ0FMRV9GVUxMU0NSRUVOOwotCXN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uZWN0b3I7Ci0JaW50IGk7Ci0JaW50IG5lZWRfYXV4ID0gZ21hX3BpcGVfaGFz X3R5cGUoY3J0YywgSU5URUxfT1VUUFVUX1NEVk8pID8gMSA6IDA7Ci0KLQlpZiAoZ21hX3BpcGVf aGFzX3R5cGUoY3J0YywgSU5URUxfT1VUUFVUX0hETUkpKQotCQlyZXR1cm4gb2FrdHJhaWxfY3J0 Y19oZG1pX21vZGVfc2V0KGNydGMsIG1vZGUsIGFkanVzdGVkX21vZGUsIHgsIHksIG9sZF9mYik7 Ci0KLQlpZiAoIWdtYV9wb3dlcl9iZWdpbihkZXYsIHRydWUpKQotCQlyZXR1cm4gMDsKLQotCW1l bWNweSgmZ21hX2NydGMtPnNhdmVkX21vZGUsCi0JCW1vZGUsCi0JCXNpemVvZihzdHJ1Y3QgZHJt X2Rpc3BsYXlfbW9kZSkpOwotCW1lbWNweSgmZ21hX2NydGMtPnNhdmVkX2FkanVzdGVkX21vZGUs Ci0JCWFkanVzdGVkX21vZGUsCi0JCXNpemVvZihzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSkpOwot Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZtb2RlX2NvbmZpZy0+Y29ubmVjdG9y X2xpc3QsIGhlYWQpIHsKLQkJaWYgKCFjb25uZWN0b3ItPmVuY29kZXIgfHwgY29ubmVjdG9yLT5l bmNvZGVyLT5jcnRjICE9IGNydGMpCi0JCQljb250aW51ZTsKLQotCQlnbWFfZW5jb2RlciA9IGdt YV9hdHRhY2hlZF9lbmNvZGVyKGNvbm5lY3Rvcik7Ci0KLQkJc3dpdGNoIChnbWFfZW5jb2Rlci0+ dHlwZSkgewotCQljYXNlIElOVEVMX09VVFBVVF9MVkRTOgotCQkJaXNfbHZkcyA9IHRydWU7Ci0J CQlicmVhazsKLQkJY2FzZSBJTlRFTF9PVVRQVVRfU0RWTzoKLQkJCWlzX3Nkdm8gPSB0cnVlOwot CQkJYnJlYWs7Ci0JCWNhc2UgSU5URUxfT1VUUFVUX01JUEk6Ci0JCQlpc19taXBpID0gdHJ1ZTsK LQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JLyogRGlzYWJsZSB0aGUgVkdBIHBsYW5lIHRoYXQgd2Ug bmV2ZXIgdXNlICovCi0JZm9yIChpID0gMDsgaSA8PSBuZWVkX2F1eDsgaSsrKQotCQlSRUdfV1JJ VEVfV0lUSF9BVVgoVkdBQ05UUkwsIFZHQV9ESVNQX0RJU0FCTEUsIGkpOwotCi0JLyogRGlzYWJs ZSB0aGUgcGFuZWwgZml0dGVyIGlmIGl0IHdhcyBvbiBvdXIgcGlwZSAqLwotCWlmIChvYWt0cmFp bF9wYW5lbF9maXR0ZXJfcGlwZShkZXYpID09IHBpcGUpCi0JCVJFR19XUklURShQRklUX0NPTlRS T0wsIDApOwotCi0JZm9yIChpID0gMDsgaSA8PSBuZWVkX2F1eDsgaSsrKSB7Ci0JCVJFR19XUklU RV9XSVRIX0FVWChtYXAtPnNyYywgKChtb2RlLT5jcnRjX2hkaXNwbGF5IC0gMSkgPDwgMTYpIHwK LQkJCQkJICAgICAobW9kZS0+Y3J0Y192ZGlzcGxheSAtIDEpLCBpKTsKLQl9Ci0KLQlpZiAoZ21h X2VuY29kZXIpCi0JCWRybV9vYmplY3RfcHJvcGVydHlfZ2V0X3ZhbHVlKCZjb25uZWN0b3ItPmJh c2UsCi0JCQlkZXYtPm1vZGVfY29uZmlnLnNjYWxpbmdfbW9kZV9wcm9wZXJ0eSwgJnNjYWxpbmdU eXBlKTsKLQotCWlmIChzY2FsaW5nVHlwZSA9PSBEUk1fTU9ERV9TQ0FMRV9OT19TQ0FMRSkgewot CQkvKiBNb29yZXN0b3duIGRvZXNuJ3QgaGF2ZSByZWdpc3RlciBzdXBwb3J0IGZvciBjZW50ZXJp bmcgc28KLQkJICogd2UgbmVlZCB0byBtZXNzIHdpdGggdGhlIGgvdmJsYW5rIGFuZCBoL3ZzeW5j IHN0YXJ0IGFuZAotCQkgKiBlbmRzIHRvIGdldCBjZW50ZXJpbmcgKi8KLQkJaW50IG9mZnNldFgg PSAwLCBvZmZzZXRZID0gMDsKLQotCQlvZmZzZXRYID0gKGFkanVzdGVkX21vZGUtPmNydGNfaGRp c3BsYXkgLQotCQkJICAgbW9kZS0+Y3J0Y19oZGlzcGxheSkgLyAyOwotCQlvZmZzZXRZID0gKGFk anVzdGVkX21vZGUtPmNydGNfdmRpc3BsYXkgLQotCQkJICAgbW9kZS0+Y3J0Y192ZGlzcGxheSkg LyAyOwotCi0JCWZvciAoaSA9IDA7IGkgPD0gbmVlZF9hdXg7IGkrKykgewotCQkJUkVHX1dSSVRF X1dJVEhfQVVYKG1hcC0+aHRvdGFsLCAobW9kZS0+Y3J0Y19oZGlzcGxheSAtIDEpIHwKLQkJCQko KGFkanVzdGVkX21vZGUtPmNydGNfaHRvdGFsIC0gMSkgPDwgMTYpLCBpKTsKLQkJCVJFR19XUklU RV9XSVRIX0FVWChtYXAtPnZ0b3RhbCwgKG1vZGUtPmNydGNfdmRpc3BsYXkgLSAxKSB8Ci0JCQkJ KChhZGp1c3RlZF9tb2RlLT5jcnRjX3Z0b3RhbCAtIDEpIDw8IDE2KSwgaSk7Ci0JCQlSRUdfV1JJ VEVfV0lUSF9BVVgobWFwLT5oYmxhbmssCi0JCQkJKGFkanVzdGVkX21vZGUtPmNydGNfaGJsYW5r X3N0YXJ0IC0gb2Zmc2V0WCAtIDEpIHwKLQkJCQkoKGFkanVzdGVkX21vZGUtPmNydGNfaGJsYW5r X2VuZCAtIG9mZnNldFggLSAxKSA8PCAxNiksIGkpOwotCQkJUkVHX1dSSVRFX1dJVEhfQVVYKG1h cC0+aHN5bmMsCi0JCQkJKGFkanVzdGVkX21vZGUtPmNydGNfaHN5bmNfc3RhcnQgLSBvZmZzZXRY IC0gMSkgfAotCQkJCSgoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oc3luY19lbmQgLSBvZmZzZXRYIC0g MSkgPDwgMTYpLCBpKTsKLQkJCVJFR19XUklURV9XSVRIX0FVWChtYXAtPnZibGFuaywKLQkJCQko YWRqdXN0ZWRfbW9kZS0+Y3J0Y192Ymxhbmtfc3RhcnQgLSBvZmZzZXRZIC0gMSkgfAotCQkJCSgo YWRqdXN0ZWRfbW9kZS0+Y3J0Y192YmxhbmtfZW5kIC0gb2Zmc2V0WSAtIDEpIDw8IDE2KSwgaSk7 Ci0JCQlSRUdfV1JJVEVfV0lUSF9BVVgobWFwLT52c3luYywKLQkJCQkoYWRqdXN0ZWRfbW9kZS0+ Y3J0Y192c3luY19zdGFydCAtIG9mZnNldFkgLSAxKSB8Ci0JCQkJKChhZGp1c3RlZF9tb2RlLT5j cnRjX3ZzeW5jX2VuZCAtIG9mZnNldFkgLSAxKSA8PCAxNiksIGkpOwotCQl9Ci0JfSBlbHNlIHsK LQkJZm9yIChpID0gMDsgaSA8PSBuZWVkX2F1eDsgaSsrKSB7Ci0JCQlSRUdfV1JJVEVfV0lUSF9B VVgobWFwLT5odG90YWwsIChhZGp1c3RlZF9tb2RlLT5jcnRjX2hkaXNwbGF5IC0gMSkgfAotCQkJ CSgoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19odG90YWwgLSAxKSA8PCAxNiksIGkpOwotCQkJUkVHX1dS SVRFX1dJVEhfQVVYKG1hcC0+dnRvdGFsLCAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSAt IDEpIHwKLQkJCQkoKGFkanVzdGVkX21vZGUtPmNydGNfdnRvdGFsIC0gMSkgPDwgMTYpLCBpKTsK LQkJCVJFR19XUklURV9XSVRIX0FVWChtYXAtPmhibGFuaywgKGFkanVzdGVkX21vZGUtPmNydGNf aGJsYW5rX3N0YXJ0IC0gMSkgfAotCQkJCSgoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oYmxhbmtfZW5k IC0gMSkgPDwgMTYpLCBpKTsKLQkJCVJFR19XUklURV9XSVRIX0FVWChtYXAtPmhzeW5jLCAoYWRq dXN0ZWRfbW9kZS0+Y3J0Y19oc3luY19zdGFydCAtIDEpIHwKLQkJCQkoKGFkanVzdGVkX21vZGUt PmNydGNfaHN5bmNfZW5kIC0gMSkgPDwgMTYpLCBpKTsKLQkJCVJFR19XUklURV9XSVRIX0FVWCht YXAtPnZibGFuaywgKGFkanVzdGVkX21vZGUtPmNydGNfdmJsYW5rX3N0YXJ0IC0gMSkgfAotCQkJ CSgoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192YmxhbmtfZW5kIC0gMSkgPDwgMTYpLCBpKTsKLQkJCVJF R19XUklURV9XSVRIX0FVWChtYXAtPnZzeW5jLCAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19z dGFydCAtIDEpIHwKLQkJCQkoKGFkanVzdGVkX21vZGUtPmNydGNfdnN5bmNfZW5kIC0gMSkgPDwg MTYpLCBpKTsKLQkJfQotCX0KLQotCS8qIEZsdXNoIHRoZSBwbGFuZSBjaGFuZ2VzICovCi0Jewot CQljb25zdCBzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzICpjcnRjX2Z1bmNzID0KLQkJICAg IGNydGMtPmhlbHBlcl9wcml2YXRlOwotCQljcnRjX2Z1bmNzLT5tb2RlX3NldF9iYXNlKGNydGMs IHgsIHksIG9sZF9mYik7Ci0JfQotCi0JLyogc2V0dXAgcGlwZWNvbmYgKi8KLQlwaXBlY29uZiA9 IFJFR19SRUFEKG1hcC0+Y29uZik7Ci0KLQkvKiBTZXQgdXAgdGhlIGRpc3BsYXkgcGxhbmUgcmVn aXN0ZXIgKi8KLQlkc3BjbnRyID0gUkVHX1JFQUQobWFwLT5jbnRyKTsKLQlkc3BjbnRyIHw9IERJ U1BQTEFORV9HQU1NQV9FTkFCTEU7Ci0KLQlpZiAocGlwZSA9PSAwKQotCQlkc3BjbnRyIHw9IERJ U1BQTEFORV9TRUxfUElQRV9BOwotCWVsc2UKLQkJZHNwY250ciB8PSBESVNQUExBTkVfU0VMX1BJ UEVfQjsKLQotCWlmIChpc19taXBpKQotCQlnb3RvIG9ha3RyYWlsX2NydGNfbW9kZV9zZXRfZXhp dDsKLQotCi0JZHBsbCA9IDA7CQkvKkJJVDE2ID0gMCBmb3IgMTAwTUh6IHJlZmVyZW5jZSAqLwot Ci0JcmVmY2xrID0gaXNfc2R2byA/IDk2MDAwIDogZGV2X3ByaXYtPmNvcmVfZnJlcSAqIDEwMDA7 Ci0JbGltaXQgPSBtcnN0X2xpbWl0KGNydGMsIHJlZmNsayk7Ci0Jb2sgPSBsaW1pdC0+ZmluZF9w bGwobGltaXQsIGNydGMsIGFkanVzdGVkX21vZGUtPmNsb2NrLAotCQkJICAgICByZWZjbGssICZj bG9jayk7Ci0KLQlpZiAoaXNfc2R2bykgewotCQkvKiBDb252ZXJ0IGNhbGN1bGF0ZWQgdmFsdWVz IHRvIHJlZ2lzdGVyIHZhbHVlcyAqLwotCQljbG9jay5wMSA9ICgxTCA8PCAoY2xvY2sucDEgLSAx KSk7Ci0JCWNsb2NrLm0gLT0gMjsKLQkJY2xvY2subiA9ICgxTCA8PCAoY2xvY2subiAtIDEpKTsK LQl9Ci0KLQlpZiAoIW9rKQotCQlEUk1fRVJST1IoIkZhaWxlZCB0byBmaW5kIHByb3BlciBQTEwg c2V0dGluZ3MiKTsKLQotCW1yc3RfcHJpbnRfcGxsKCZjbG9jayk7Ci0KLQlpZiAoaXNfc2R2bykK LQkJZnAgPSBjbG9jay5uIDw8IDE2IHwgY2xvY2subTsKLQllbHNlCi0JCWZwID0gb2FrdHJhaWxf bV9jb252ZXJ0c1soY2xvY2subSAtIE1SU1RfTV9NSU4pXSA8PCA4OwotCi0JZHBsbCB8PSBEUExM X1ZHQV9NT0RFX0RJUzsKLQotCi0JZHBsbCB8PSBEUExMX1ZDT19FTkFCTEU7Ci0KLQlpZiAoaXNf bHZkcykKLQkJZHBsbCB8PSBEUExMQV9NT0RFX0xWRFM7Ci0JZWxzZQotCQlkcGxsIHw9IERQTExC X01PREVfREFDX1NFUklBTDsKLQotCWlmIChpc19zZHZvKSB7Ci0JCWludCBzZHZvX3BpeGVsX211 bHRpcGx5ID0KLQkJICAgIGFkanVzdGVkX21vZGUtPmNsb2NrIC8gbW9kZS0+Y2xvY2s7Ci0KLQkJ ZHBsbCB8PSBEUExMX0RWT19ISUdIX1NQRUVEOwotCQlkcGxsIHw9Ci0JCSAgICAoc2R2b19waXhl bF9tdWx0aXBseSAtCi0JCSAgICAgMSkgPDwgU0RWT19NVUxUSVBMSUVSX1NISUZUX0hJUkVTOwot CX0KLQotCi0JLyogY29tcHV0ZSBiaXRtYXNrIGZyb20gcDEgdmFsdWUgKi8KLQlpZiAoaXNfc2R2 bykKLQkJZHBsbCB8PSBjbG9jay5wMSA8PCAxNjsgLy8gZHBsbCB8PSAoMSA8PCAoY2xvY2sucDEg LSAxKSkgPDwgMTY7Ci0JZWxzZQotCQlkcGxsIHw9ICgxIDw8IChjbG9jay5wMSAtIDIpKSA8PCAx NzsKLQotCWRwbGwgfD0gRFBMTF9WQ09fRU5BQkxFOwotCi0JaWYgKGRwbGwgJiBEUExMX1ZDT19F TkFCTEUpIHsKLQkJZm9yIChpID0gMDsgaSA8PSBuZWVkX2F1eDsgaSsrKSB7Ci0JCQlSRUdfV1JJ VEVfV0lUSF9BVVgobWFwLT5mcDAsIGZwLCBpKTsKLQkJCVJFR19XUklURV9XSVRIX0FVWChtYXAt PmRwbGwsIGRwbGwgJiB+RFBMTF9WQ09fRU5BQkxFLCBpKTsKLQkJCVJFR19SRUFEX1dJVEhfQVVY KG1hcC0+ZHBsbCwgaSk7Ci0JCQkvKiBDaGVjayB0aGUgRFBMTEEgbG9jayBiaXQgUElQRUFDT05G WzI5XSAqLwotCQkJdWRlbGF5KDE1MCk7Ci0JCX0KLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDw9IG5l ZWRfYXV4OyBpKyspIHsKLQkJUkVHX1dSSVRFX1dJVEhfQVVYKG1hcC0+ZnAwLCBmcCwgaSk7Ci0J CVJFR19XUklURV9XSVRIX0FVWChtYXAtPmRwbGwsIGRwbGwsIGkpOwotCQlSRUdfUkVBRF9XSVRI X0FVWChtYXAtPmRwbGwsIGkpOwotCQkvKiBXYWl0IGZvciB0aGUgY2xvY2tzIHRvIHN0YWJpbGl6 ZS4gKi8KLQkJdWRlbGF5KDE1MCk7Ci0KLQkJLyogd3JpdGUgaXQgYWdhaW4gLS0gdGhlIEJJT1Mg ZG9lcywgYWZ0ZXIgYWxsICovCi0JCVJFR19XUklURV9XSVRIX0FVWChtYXAtPmRwbGwsIGRwbGws IGkpOwotCQlSRUdfUkVBRF9XSVRIX0FVWChtYXAtPmRwbGwsIGkpOwotCQkvKiBXYWl0IGZvciB0 aGUgY2xvY2tzIHRvIHN0YWJpbGl6ZS4gKi8KLQkJdWRlbGF5KDE1MCk7Ci0KLQkJUkVHX1dSSVRF X1dJVEhfQVVYKG1hcC0+Y29uZiwgcGlwZWNvbmYsIGkpOwotCQlSRUdfUkVBRF9XSVRIX0FVWCht YXAtPmNvbmYsIGkpOwotCQlnbWFfd2FpdF9mb3JfdmJsYW5rKGRldik7Ci0KLQkJUkVHX1dSSVRF X1dJVEhfQVVYKG1hcC0+Y250ciwgZHNwY250ciwgaSk7Ci0JCWdtYV93YWl0X2Zvcl92Ymxhbmso ZGV2KTsKLQl9Ci0KLW9ha3RyYWlsX2NydGNfbW9kZV9zZXRfZXhpdDoKLQlnbWFfcG93ZXJfZW5k KGRldik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb2FrdHJhaWxfcGlwZV9zZXRfYmFz ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCi0JCQkgICAgaW50IHgsIGludCB5LCBzdHJ1Y3QgZHJt X2ZyYW1lYnVmZmVyICpvbGRfZmIpCi17Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMt PmRldjsKLQlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZh dGU7Ci0Jc3RydWN0IGdtYV9jcnRjICpnbWFfY3J0YyA9IHRvX2dtYV9jcnRjKGNydGMpOwotCXN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gY3J0Yy0+cHJpbWFyeS0+ZmI7Ci0JaW50IHBpcGUg PSBnbWFfY3J0Yy0+cGlwZTsKLQljb25zdCBzdHJ1Y3QgcHNiX29mZnNldCAqbWFwID0gJmRldl9w cml2LT5yZWdtYXBbcGlwZV07Ci0JdW5zaWduZWQgbG9uZyBzdGFydCwgb2Zmc2V0OwotCi0JdTMy IGRzcGNudHI7Ci0JaW50IHJldCA9IDA7Ci0KLQkvKiBubyBmYiBib3VuZCAqLwotCWlmICghZmIp IHsKLQkJZGV2X2RiZyhkZXYtPmRldiwgIk5vIEZCIGJvdW5kXG4iKTsKLQkJcmV0dXJuIDA7Ci0J fQotCi0JaWYgKCFnbWFfcG93ZXJfYmVnaW4oZGV2LCB0cnVlKSkKLQkJcmV0dXJuIDA7Ci0KLQlz dGFydCA9IHRvX2d0dF9yYW5nZShmYi0+b2JqWzBdKS0+b2Zmc2V0OwotCW9mZnNldCA9IHkgKiBm Yi0+cGl0Y2hlc1swXSArIHggKiBmYi0+Zm9ybWF0LT5jcHBbMF07Ci0KLQlSRUdfV1JJVEUobWFw LT5zdHJpZGUsIGZiLT5waXRjaGVzWzBdKTsKLQotCWRzcGNudHIgPSBSRUdfUkVBRChtYXAtPmNu dHIpOwotCWRzcGNudHIgJj0gfkRJU1BQTEFORV9QSVhGT1JNQVRfTUFTSzsKLQotCXN3aXRjaCAo ZmItPmZvcm1hdC0+Y3BwWzBdICogOCkgewotCWNhc2UgODoKLQkJZHNwY250ciB8PSBESVNQUExB TkVfOEJQUDsKLQkJYnJlYWs7Ci0JY2FzZSAxNjoKLQkJaWYgKGZiLT5mb3JtYXQtPmRlcHRoID09 IDE1KQotCQkJZHNwY250ciB8PSBESVNQUExBTkVfMTVfMTZCUFA7Ci0JCWVsc2UKLQkJCWRzcGNu dHIgfD0gRElTUFBMQU5FXzE2QlBQOwotCQlicmVhazsKLQljYXNlIDI0OgotCWNhc2UgMzI6Ci0J CWRzcGNudHIgfD0gRElTUFBMQU5FXzMyQlBQX05PX0FMUEhBOwotCQlicmVhazsKLQlkZWZhdWx0 OgotCQlkZXZfZXJyKGRldi0+ZGV2LCAiVW5rbm93biBjb2xvciBkZXB0aFxuIik7Ci0JCXJldCA9 IC1FSU5WQUw7Ci0JCWdvdG8gcGlwZV9zZXRfYmFzZV9leGl0OwotCX0KLQlSRUdfV1JJVEUobWFw LT5jbnRyLCBkc3BjbnRyKTsKLQotCVJFR19XUklURShtYXAtPmJhc2UsIG9mZnNldCk7Ci0JUkVH X1JFQUQobWFwLT5iYXNlKTsKLQlSRUdfV1JJVEUobWFwLT5zdXJmLCBzdGFydCk7Ci0JUkVHX1JF QUQobWFwLT5zdXJmKTsKLQotcGlwZV9zZXRfYmFzZV9leGl0OgotCWdtYV9wb3dlcl9lbmQoZGV2 KTsKLQlyZXR1cm4gcmV0OwotfQotCi1jb25zdCBzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNz IG9ha3RyYWlsX2hlbHBlcl9mdW5jcyA9IHsKLQkuZHBtcyA9IG9ha3RyYWlsX2NydGNfZHBtcywK LQkubW9kZV9zZXQgPSBvYWt0cmFpbF9jcnRjX21vZGVfc2V0LAotCS5tb2RlX3NldF9iYXNlID0g b2FrdHJhaWxfcGlwZV9zZXRfYmFzZSwKLQkucHJlcGFyZSA9IGdtYV9jcnRjX3ByZXBhcmUsCi0J LmNvbW1pdCA9IGdtYV9jcnRjX2NvbW1pdCwKLX07Ci0KLS8qIE5vdCB1c2VkIHlldCAqLwotY29u c3Qgc3RydWN0IGdtYV9jbG9ja19mdW5jcyBtcnN0X2Nsb2NrX2Z1bmNzID0gewotCS5jbG9jayA9 IG1yc3RfbHZkc19jbG9jaywKLQkubGltaXQgPSBtcnN0X2xpbWl0LAotCS5wbGxfaXNfdmFsaWQg PSBnbWFfcGxsX2lzX3ZhbGlkLAotfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9nbWE1 MDAvb2FrdHJhaWxfZGV2aWNlLmMgYi9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL29ha3RyYWlsX2Rl dmljZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOGNkNWY3M2M4NjguLjAwMDAw MDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL29ha3RyYWlsX2RldmljZS5jCisr KyAvZGV2L251bGwKQEAgLTEsNTY3ICswLDAgQEAKLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wLW9ubHkKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDEx LCBJbnRlbCBDb3Jwb3JhdGlvbi4KLSAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLwotCi0jaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+Ci0jaW5jbHVkZSA8 bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWkuaD4KLSNpbmNsdWRlIDxsaW51eC9t b2R1bGUuaD4KLQotI2luY2x1ZGUgPGFzbS9pbnRlbC1taWQuaD4KLSNpbmNsdWRlIDxhc20vaW50 ZWxfc2N1X2lwYy5oPgotCi0jaW5jbHVkZSA8ZHJtL2RybS5oPgotCi0jaW5jbHVkZSAiaW50ZWxf Ymlvcy5oIgotI2luY2x1ZGUgIm1pZF9iaW9zLmgiCi0jaW5jbHVkZSAicHNiX2Rydi5oIgotI2lu Y2x1ZGUgInBzYl9pbnRlbF9yZWcuaCIKLSNpbmNsdWRlICJwc2JfcmVnLmgiCi0KLXN0YXRpYyBp bnQgb2FrdHJhaWxfb3V0cHV0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1 Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JaWYgKGRl dl9wcml2LT5pTFZEU19lbmFibGUpCi0JCW9ha3RyYWlsX2x2ZHNfaW5pdChkZXYsICZkZXZfcHJp di0+bW9kZV9kZXYpOwotCWVsc2UKLQkJZGV2X2VycihkZXYtPmRldiwgIkRTSSBpcyBub3Qgc3Vw cG9ydGVkXG4iKTsKLQlpZiAoZGV2X3ByaXYtPmhkbWlfcHJpdikKLQkJb2FrdHJhaWxfaGRtaV9p bml0KGRldiwgJmRldl9wcml2LT5tb2RlX2Rldik7Ci0KLQlwc2JfaW50ZWxfc2R2b19pbml0KGRl diwgU0RWT0IpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKglQcm92aWRlIHRoZSBsb3cgbGV2 ZWwgaW50ZXJmYWNlcyBmb3IgdGhlIE1vb3Jlc3Rvd24gYmFja2xpZ2h0Ci0gKi8KLQotI2lmZGVm IENPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFCi0KLSNkZWZpbmUgTVJTVF9CTENfTUFYX1BX TV9SRUdfRlJFUQkgICAgMHhGRkZGCi0jZGVmaW5lIEJMQ19QV01fUFJFQ0lTSU9OX0ZBQ1RPUiAx MDAJLyogMTAwMDAwMDAgKi8KLSNkZWZpbmUgQkxDX1BXTV9GUkVRX0NBTENfQ09OU1RBTlQgMzIK LSNkZWZpbmUgTUh6IDEwMDAwMDAKLSNkZWZpbmUgQkxDX0FESlVTVE1FTlRfTUFYIDEwMAotCi1z dGF0aWMgc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKm9ha3RyYWlsX2JhY2tsaWdodF9kZXZpY2U7 Ci1zdGF0aWMgaW50IG9ha3RyYWlsX2JyaWdodG5lc3M7Ci0KLXN0YXRpYyBpbnQgb2FrdHJhaWxf c2V0X2JyaWdodG5lc3Moc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQotewotCXN0cnVjdCBk cm1fZGV2aWNlICpkZXYgPSBibF9nZXRfZGF0YShvYWt0cmFpbF9iYWNrbGlnaHRfZGV2aWNlKTsK LQlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0J aW50IGxldmVsID0gYmQtPnByb3BzLmJyaWdodG5lc3M7Ci0JdTMyIGJsY19wd21fY3RsOwotCXUz MiBtYXhfcHdtX2JsYzsKLQotCS8qIFBlcmNlbnRhZ2UgMS0xMDAlIGJlaW5nIHZhbGlkICovCi0J aWYgKGxldmVsIDwgMSkKLQkJbGV2ZWwgPSAxOwotCi0JaWYgKGdtYV9wb3dlcl9iZWdpbihkZXYs IDApKSB7Ci0JCS8qIENhbGN1bGF0ZSBhbmQgc2V0IHRoZSBicmlnaHRuZXNzIHZhbHVlICovCi0J CW1heF9wd21fYmxjID0gUkVHX1JFQUQoQkxDX1BXTV9DVEwpID4+IDE2OwotCQlibGNfcHdtX2N0 bCA9IGxldmVsICogbWF4X3B3bV9ibGMgLyAxMDA7Ci0KLQkJLyogQWRqdXN0IHRoZSBiYWNrbGln aHQgbGV2ZWwgd2l0aCB0aGUgcGVyY2VudCBpbgotCQkgKiBkZXZfcHJpdi0+YmxjX2FkajE7Ci0J CSAqLwotCQlibGNfcHdtX2N0bCA9IGJsY19wd21fY3RsICogZGV2X3ByaXYtPmJsY19hZGoxOwot CQlibGNfcHdtX2N0bCA9IGJsY19wd21fY3RsIC8gMTAwOwotCi0JCS8qIEFkanVzdCB0aGUgYmFj a2xpZ2h0IGxldmVsIHdpdGggdGhlIHBlcmNlbnQgaW4KLQkJICogZGV2X3ByaXYtPmJsY19hZGoy OwotCQkgKi8KLQkJYmxjX3B3bV9jdGwgPSBibGNfcHdtX2N0bCAqIGRldl9wcml2LT5ibGNfYWRq MjsKLQkJYmxjX3B3bV9jdGwgPSBibGNfcHdtX2N0bCAvIDEwMDsKLQotCQkvKiBmb3JjZSBQV00g Yml0IG9uICovCi0JCVJFR19XUklURShCTENfUFdNX0NUTDIsICgweDgwMDAwMDAwIHwgUkVHX1JF QUQoQkxDX1BXTV9DVEwyKSkpOwotCQlSRUdfV1JJVEUoQkxDX1BXTV9DVEwsIChtYXhfcHdtX2Js YyA8PCAxNikgfCBibGNfcHdtX2N0bCk7Ci0JCWdtYV9wb3dlcl9lbmQoZGV2KTsKLQl9Ci0Jb2Fr dHJhaWxfYnJpZ2h0bmVzcyA9IGxldmVsOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG9h a3RyYWlsX2dldF9icmlnaHRuZXNzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKLXsKLQkv KiByZXR1cm4gbG9jYWxseSBjYWNoZWQgdmFyIGluc3RlYWQgb2YgSFcgcmVhZCAoZHVlIHRvIERQ U1QgZXRjLikgKi8KLQkvKiBGSVhNRTogaWRlYWxseSByZXR1cm4gYWN0dWFsIHZhbHVlIGluIGNh c2UgZmlybXdhcmUgZmlkZGxlZCB3aXRoCi0JICAgaXQgKi8KLQlyZXR1cm4gb2FrdHJhaWxfYnJp Z2h0bmVzczsKLX0KLQotc3RhdGljIGludCBkZXZpY2VfYmFja2xpZ2h0X2luaXQoc3RydWN0IGRy bV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRl di0+ZGV2X3ByaXZhdGU7Ci0JdW5zaWduZWQgbG9uZyBjb3JlX2Nsb2NrOwotCXUxNiBibF9tYXhf ZnJlcTsKLQl1aW50MzJfdCB2YWx1ZTsKLQl1aW50MzJfdCBibGNfcHdtX3ByZWNpc2lvbl9mYWN0 b3I7Ci0KLQlkZXZfcHJpdi0+YmxjX2FkajEgPSBCTENfQURKVVNUTUVOVF9NQVg7Ci0JZGV2X3By aXYtPmJsY19hZGoyID0gQkxDX0FESlVTVE1FTlRfTUFYOwotCWJsX21heF9mcmVxID0gMjU2Owot CS8qIHRoaXMgbmVlZHMgdG8gYmUgc2V0IGVsc2V3aGVyZSAqLwotCWJsY19wd21fcHJlY2lzaW9u X2ZhY3RvciA9IEJMQ19QV01fUFJFQ0lTSU9OX0ZBQ1RPUjsKLQotCWNvcmVfY2xvY2sgPSBkZXZf cHJpdi0+Y29yZV9mcmVxOwotCi0JdmFsdWUgPSAoY29yZV9jbG9jayAqIE1IeikgLyBCTENfUFdN X0ZSRVFfQ0FMQ19DT05TVEFOVDsKLQl2YWx1ZSAqPSBibGNfcHdtX3ByZWNpc2lvbl9mYWN0b3I7 Ci0JdmFsdWUgLz0gYmxfbWF4X2ZyZXE7Ci0JdmFsdWUgLz0gYmxjX3B3bV9wcmVjaXNpb25fZmFj dG9yOwotCi0JaWYgKHZhbHVlID4gKHVuc2lnbmVkIGxvbmcgbG9uZylNUlNUX0JMQ19NQVhfUFdN X1JFR19GUkVRKQotCQkJcmV0dXJuIC1FUkFOR0U7Ci0KLQlpZiAoZ21hX3Bvd2VyX2JlZ2luKGRl diwgZmFsc2UpKSB7Ci0JCVJFR19XUklURShCTENfUFdNX0NUTDIsICgweDgwMDAwMDAwIHwgUkVH X1JFQUQoQkxDX1BXTV9DVEwyKSkpOwotCQlSRUdfV1JJVEUoQkxDX1BXTV9DVEwsIHZhbHVlIHwg KHZhbHVlIDw8IDE2KSk7Ci0JCWdtYV9wb3dlcl9lbmQoZGV2KTsKLQl9Ci0JcmV0dXJuIDA7Ci19 Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBvYWt0cmFpbF9vcHMgPSB7Ci0J LmdldF9icmlnaHRuZXNzID0gb2FrdHJhaWxfZ2V0X2JyaWdodG5lc3MsCi0JLnVwZGF0ZV9zdGF0 dXMgID0gb2FrdHJhaWxfc2V0X2JyaWdodG5lc3MsCi19OwotCi1zdGF0aWMgaW50IG9ha3RyYWls X2JhY2tsaWdodF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGRybV9w c2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCWludCByZXQ7Ci0Jc3Ry dWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzIHByb3BzOwotCi0JbWVtc2V0KCZwcm9wcywgMCwgc2l6 ZW9mKHN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcykpOwotCXByb3BzLm1heF9icmlnaHRuZXNz ID0gMTAwOwotCXByb3BzLnR5cGUgPSBCQUNLTElHSFRfUExBVEZPUk07Ci0KLQlvYWt0cmFpbF9i YWNrbGlnaHRfZGV2aWNlID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3Rlcigib2FrdHJhaWwtYmwi LAotCQkJCU5VTEwsICh2b2lkICopZGV2LCAmb2FrdHJhaWxfb3BzLCAmcHJvcHMpOwotCi0JaWYg KElTX0VSUihvYWt0cmFpbF9iYWNrbGlnaHRfZGV2aWNlKSkKLQkJcmV0dXJuIFBUUl9FUlIob2Fr dHJhaWxfYmFja2xpZ2h0X2RldmljZSk7Ci0KLQlyZXQgPSBkZXZpY2VfYmFja2xpZ2h0X2luaXQo ZGV2KTsKLQlpZiAocmV0IDwgMCkgewotCQliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIob2Fr dHJhaWxfYmFja2xpZ2h0X2RldmljZSk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCW9ha3RyYWlsX2Jh Y2tsaWdodF9kZXZpY2UtPnByb3BzLmJyaWdodG5lc3MgPSAxMDA7Ci0Jb2FrdHJhaWxfYmFja2xp Z2h0X2RldmljZS0+cHJvcHMubWF4X2JyaWdodG5lc3MgPSAxMDA7Ci0JYmFja2xpZ2h0X3VwZGF0 ZV9zdGF0dXMob2FrdHJhaWxfYmFja2xpZ2h0X2RldmljZSk7Ci0JZGV2X3ByaXYtPmJhY2tsaWdo dF9kZXZpY2UgPSBvYWt0cmFpbF9iYWNrbGlnaHRfZGV2aWNlOwotCXJldHVybiAwOwotfQotCi0j ZW5kaWYKLQotLyoKLSAqCVByb3ZpZGUgdGhlIE1vb3Jlc3Rvd24gc3BlY2lmaWMgY2hpcCBsb2dp YyBhbmQgbG93IGxldmVsIG1ldGhvZHMKLSAqCWZvciBwb3dlciBtYW5hZ2VtZW50Ci0gKi8KLQot LyoqCi0gKglvYWt0cmFpbF9zYXZlX2Rpc3BsYXlfcmVnaXN0ZXJzCS0Jc2F2ZSByZWdpc3RlcnMg bG9zdCBvbiBzdXNwZW5kCi0gKglAZGV2OiBvdXIgRFJNIGRldmljZQotICoKLSAqCVNhdmUgdGhl IHN0YXRlIHdlIG5lZWQgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byByZXN0b3JlIHRoZSBpbnRlcmZh Y2UKLSAqCXVwb24gcmVzdW1lIGZyb20gc3VzcGVuZAotICovCi1zdGF0aWMgaW50IG9ha3RyYWls X3NhdmVfZGlzcGxheV9yZWdpc3RlcnMoc3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1 Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0 IHBzYl9zYXZlX2FyZWEgKnJlZ3MgPSAmZGV2X3ByaXYtPnJlZ3M7Ci0Jc3RydWN0IHBzYl9waXBl ICpwID0gJnJlZ3MtPnBpcGVbMF07Ci0JaW50IGk7Ci0JdTMyIHBwX3N0YXQ7Ci0KLQkvKiBEaXNw bGF5IGFyYml0cmF0aW9uIGNvbnRyb2wgKyB3YXRlcm1hcmtzICovCi0JcmVncy0+cHNiLnNhdmVE U1BBUkIgPSBQU0JfUlZEQzMyKERTUEFSQik7Ci0JcmVncy0+cHNiLnNhdmVEU1BGVzEgPSBQU0Jf UlZEQzMyKERTUEZXMSk7Ci0JcmVncy0+cHNiLnNhdmVEU1BGVzIgPSBQU0JfUlZEQzMyKERTUEZX Mik7Ci0JcmVncy0+cHNiLnNhdmVEU1BGVzMgPSBQU0JfUlZEQzMyKERTUEZXMyk7Ci0JcmVncy0+ cHNiLnNhdmVEU1BGVzQgPSBQU0JfUlZEQzMyKERTUEZXNCk7Ci0JcmVncy0+cHNiLnNhdmVEU1BG VzUgPSBQU0JfUlZEQzMyKERTUEZXNSk7Ci0JcmVncy0+cHNiLnNhdmVEU1BGVzYgPSBQU0JfUlZE QzMyKERTUEZXNik7Ci0JcmVncy0+cHNiLnNhdmVDSElDS0VOQklUID0gUFNCX1JWREMzMihEU1BD SElDS0VOQklUKTsKLQotCS8qIFBpcGUgJiBwbGFuZSBBIGluZm8gKi8KLQlwLT5jb25mID0gUFNC X1JWREMzMihQSVBFQUNPTkYpOwotCXAtPnNyYyA9IFBTQl9SVkRDMzIoUElQRUFTUkMpOwotCXAt PmZwMCA9IFBTQl9SVkRDMzIoTVJTVF9GUEEwKTsKLQlwLT5mcDEgPSBQU0JfUlZEQzMyKE1SU1Rf RlBBMSk7Ci0JcC0+ZHBsbCA9IFBTQl9SVkRDMzIoTVJTVF9EUExMX0EpOwotCXAtPmh0b3RhbCA9 IFBTQl9SVkRDMzIoSFRPVEFMX0EpOwotCXAtPmhibGFuayA9IFBTQl9SVkRDMzIoSEJMQU5LX0Ep OwotCXAtPmhzeW5jID0gUFNCX1JWREMzMihIU1lOQ19BKTsKLQlwLT52dG90YWwgPSBQU0JfUlZE QzMyKFZUT1RBTF9BKTsKLQlwLT52YmxhbmsgPSBQU0JfUlZEQzMyKFZCTEFOS19BKTsKLQlwLT52 c3luYyA9IFBTQl9SVkRDMzIoVlNZTkNfQSk7Ci0JcmVncy0+cHNiLnNhdmVCQ0xSUEFUX0EgPSBQ U0JfUlZEQzMyKEJDTFJQQVRfQSk7Ci0JcC0+Y250ciA9IFBTQl9SVkRDMzIoRFNQQUNOVFIpOwot CXAtPnN0cmlkZSA9IFBTQl9SVkRDMzIoRFNQQVNUUklERSk7Ci0JcC0+YWRkciA9IFBTQl9SVkRD MzIoRFNQQUJBU0UpOwotCXAtPnN1cmYgPSBQU0JfUlZEQzMyKERTUEFTVVJGKTsKLQlwLT5saW5v ZmYgPSBQU0JfUlZEQzMyKERTUEFMSU5PRkYpOwotCXAtPnRpbGVvZmYgPSBQU0JfUlZEQzMyKERT UEFUSUxFT0ZGKTsKLQotCS8qIFNhdmUgY3Vyc29yIHJlZ3MgKi8KLQlyZWdzLT5wc2Iuc2F2ZURT UEFDVVJTT1JfQ1RSTCA9IFBTQl9SVkRDMzIoQ1VSQUNOVFIpOwotCXJlZ3MtPnBzYi5zYXZlRFNQ QUNVUlNPUl9CQVNFID0gUFNCX1JWREMzMihDVVJBQkFTRSk7Ci0JcmVncy0+cHNiLnNhdmVEU1BB Q1VSU09SX1BPUyA9IFBTQl9SVkRDMzIoQ1VSQVBPUyk7Ci0KLQkvKiBTYXZlIHBhbGV0dGUgKGdh bW1hKSAqLwotCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKLQkJcC0+cGFsZXR0ZVtpXSA9IFBT Ql9SVkRDMzIoUEFMRVRURV9BICsgKGkgPDwgMikpOwotCi0JaWYgKGRldl9wcml2LT5oZG1pX3By aXYpCi0JCW9ha3RyYWlsX2hkbWlfc2F2ZShkZXYpOwotCi0JLyogU2F2ZSBwZXJmb3JtYW5jZSBz dGF0ZSAqLwotCXJlZ3MtPnBzYi5zYXZlUEVSRl9NT0RFID0gUFNCX1JWREMzMihNUlNUX1BFUkZf TU9ERSk7Ci0KLQkvKiBMVkRTIHN0YXRlICovCi0JcmVncy0+cHNiLnNhdmVQUF9DT05UUk9MID0g UFNCX1JWREMzMihQUF9DT05UUk9MKTsKLQlyZWdzLT5wc2Iuc2F2ZVBGSVRfUEdNX1JBVElPUyA9 IFBTQl9SVkRDMzIoUEZJVF9QR01fUkFUSU9TKTsKLQlyZWdzLT5wc2Iuc2F2ZVBGSVRfQVVUT19S QVRJT1MgPSBQU0JfUlZEQzMyKFBGSVRfQVVUT19SQVRJT1MpOwotCXJlZ3MtPnNhdmVCTENfUFdN X0NUTCA9IFBTQl9SVkRDMzIoQkxDX1BXTV9DVEwpOwotCXJlZ3MtPnNhdmVCTENfUFdNX0NUTDIg PSBQU0JfUlZEQzMyKEJMQ19QV01fQ1RMMik7Ci0JcmVncy0+cHNiLnNhdmVMVkRTID0gUFNCX1JW REMzMihMVkRTKTsKLQlyZWdzLT5wc2Iuc2F2ZVBGSVRfQ09OVFJPTCA9IFBTQl9SVkRDMzIoUEZJ VF9DT05UUk9MKTsKLQlyZWdzLT5wc2Iuc2F2ZVBQX09OX0RFTEFZUyA9IFBTQl9SVkRDMzIoTFZE U1BQX09OKTsKLQlyZWdzLT5wc2Iuc2F2ZVBQX09GRl9ERUxBWVMgPSBQU0JfUlZEQzMyKExWRFNQ UF9PRkYpOwotCXJlZ3MtPnBzYi5zYXZlUFBfRElWSVNPUiA9IFBTQl9SVkRDMzIoUFBfQ1lDTEUp OwotCi0JLyogSFcgb3ZlcmxheSAqLwotCXJlZ3MtPnBzYi5zYXZlT1ZfT1ZBREQgPSBQU0JfUlZE QzMyKE9WX09WQUREKTsKLQlyZWdzLT5wc2Iuc2F2ZU9WX09HQU1DMCA9IFBTQl9SVkRDMzIoT1Zf T0dBTUMwKTsKLQlyZWdzLT5wc2Iuc2F2ZU9WX09HQU1DMSA9IFBTQl9SVkRDMzIoT1ZfT0dBTUMx KTsKLQlyZWdzLT5wc2Iuc2F2ZU9WX09HQU1DMiA9IFBTQl9SVkRDMzIoT1ZfT0dBTUMyKTsKLQly ZWdzLT5wc2Iuc2F2ZU9WX09HQU1DMyA9IFBTQl9SVkRDMzIoT1ZfT0dBTUMzKTsKLQlyZWdzLT5w c2Iuc2F2ZU9WX09HQU1DNCA9IFBTQl9SVkRDMzIoT1ZfT0dBTUM0KTsKLQlyZWdzLT5wc2Iuc2F2 ZU9WX09HQU1DNSA9IFBTQl9SVkRDMzIoT1ZfT0dBTUM1KTsKLQotCS8qIERQU1QgcmVnaXN0ZXJz ICovCi0JcmVncy0+cHNiLnNhdmVISVNUT0dSQU1fSU5UX0NPTlRST0xfUkVHID0KLQkJCQkJUFNC X1JWREMzMihISVNUT0dSQU1fSU5UX0NPTlRST0wpOwotCXJlZ3MtPnBzYi5zYXZlSElTVE9HUkFN X0xPR0lDX0NPTlRST0xfUkVHID0KLQkJCQkJUFNCX1JWREMzMihISVNUT0dSQU1fTE9HSUNfQ09O VFJPTCk7Ci0JcmVncy0+cHNiLnNhdmVQV01fQ09OVFJPTF9MT0dJQyA9IFBTQl9SVkRDMzIoUFdN X0NPTlRST0xfTE9HSUMpOwotCi0JaWYgKGRldl9wcml2LT5pTFZEU19lbmFibGUpIHsKLQkJLyog U2h1dCBkb3duIHRoZSBwYW5lbCAqLwotCQlQU0JfV1ZEQzMyKDAsIFBQX0NPTlRST0wpOwotCi0J CWRvIHsKLQkJCXBwX3N0YXQgPSBQU0JfUlZEQzMyKFBQX1NUQVRVUyk7Ci0JCX0gd2hpbGUgKHBw X3N0YXQgJiAweDgwMDAwMDAwKTsKLQotCQkvKiBUdXJuIG9mZiB0aGUgcGxhbmUgKi8KLQkJUFNC X1dWREMzMigweDU4MDAwMDAwLCBEU1BBQ05UUik7Ci0JCS8qIFRyaWdnZXIgdGhlIHBsYW5lIGRp c2FibGUgKi8KLQkJUFNCX1dWREMzMigwLCBEU1BBU1VSRik7Ci0KLQkJLyogV2FpdCB+NCB0aWNr cyAqLwotCQltc2xlZXAoNCk7Ci0KLQkJLyogVHVybiBvZmYgcGlwZSAqLwotCQlQU0JfV1ZEQzMy KDB4MCwgUElQRUFDT05GKTsKLQkJLyogV2FpdCB+OCB0aWNrcyAqLwotCQltc2xlZXAoOCk7Ci0K LQkJLyogVHVybiBvZmYgUExMcyAqLwotCQlQU0JfV1ZEQzMyKDAsIE1SU1RfRFBMTF9BKTsKLQl9 Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICoJb2FrdHJhaWxfcmVzdG9yZV9kaXNwbGF5X3JlZ2lz dGVycwktCXJlc3RvcmUgbG9zdCByZWdpc3RlciBzdGF0ZQotICoJQGRldjogb3VyIERSTSBkZXZp Y2UKLSAqCi0gKglSZXN0b3JlIHJlZ2lzdGVyIHN0YXRlIHRoYXQgd2FzIGxvc3QgZHVyaW5nIHN1 c3BlbmQgYW5kIHJlc3VtZS4KLSAqLwotc3RhdGljIGludCBvYWt0cmFpbF9yZXN0b3JlX2Rpc3Bs YXlfcmVnaXN0ZXJzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGRybV9wc2Jf cHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBwc2Jfc2F2ZV9h cmVhICpyZWdzID0gJmRldl9wcml2LT5yZWdzOwotCXN0cnVjdCBwc2JfcGlwZSAqcCA9ICZyZWdz LT5waXBlWzBdOwotCXUzMiBwcF9zdGF0OwotCWludCBpOwotCi0JLyogRGlzcGxheSBhcmJpdHJh dGlvbiArIHdhdGVybWFya3MgKi8KLQlQU0JfV1ZEQzMyKHJlZ3MtPnBzYi5zYXZlRFNQQVJCLCBE U1BBUkIpOwotCVBTQl9XVkRDMzIocmVncy0+cHNiLnNhdmVEU1BGVzEsIERTUEZXMSk7Ci0JUFNC X1dWREMzMihyZWdzLT5wc2Iuc2F2ZURTUEZXMiwgRFNQRlcyKTsKLQlQU0JfV1ZEQzMyKHJlZ3Mt PnBzYi5zYXZlRFNQRlczLCBEU1BGVzMpOwotCVBTQl9XVkRDMzIocmVncy0+cHNiLnNhdmVEU1BG VzQsIERTUEZXNCk7Ci0JUFNCX1dWREMzMihyZWdzLT5wc2Iuc2F2ZURTUEZXNSwgRFNQRlc1KTsK LQlQU0JfV1ZEQzMyKHJlZ3MtPnBzYi5zYXZlRFNQRlc2LCBEU1BGVzYpOwotCVBTQl9XVkRDMzIo cmVncy0+cHNiLnNhdmVDSElDS0VOQklULCBEU1BDSElDS0VOQklUKTsKLQotCS8qIE1ha2Ugc3Vy ZSBWR0EgcGxhbmUgaXMgb2ZmLiBpdCBpbml0aWFsaXplcyB0byBvbiBhZnRlciByZXNldCEqLwot CVBTQl9XVkRDMzIoMHg4MDAwMDAwMCwgVkdBQ05UUkwpOwotCi0JLyogc2V0IHRoZSBwbGxzICov Ci0JUFNCX1dWREMzMihwLT5mcDAsIE1SU1RfRlBBMCk7Ci0JUFNCX1dWREMzMihwLT5mcDEsIE1S U1RfRlBBMSk7Ci0KLQkvKiBBY3R1YWxseSBlbmFibGUgaXQgKi8KLQlQU0JfV1ZEQzMyKHAtPmRw bGwsIE1SU1RfRFBMTF9BKTsKLQl1ZGVsYXkoMTUwKTsKLQotCS8qIFJlc3RvcmUgbW9kZSAqLwot CVBTQl9XVkRDMzIocC0+aHRvdGFsLCBIVE9UQUxfQSk7Ci0JUFNCX1dWREMzMihwLT5oYmxhbmss IEhCTEFOS19BKTsKLQlQU0JfV1ZEQzMyKHAtPmhzeW5jLCBIU1lOQ19BKTsKLQlQU0JfV1ZEQzMy KHAtPnZ0b3RhbCwgVlRPVEFMX0EpOwotCVBTQl9XVkRDMzIocC0+dmJsYW5rLCBWQkxBTktfQSk7 Ci0JUFNCX1dWREMzMihwLT52c3luYywgVlNZTkNfQSk7Ci0JUFNCX1dWREMzMihwLT5zcmMsIFBJ UEVBU1JDKTsKLQlQU0JfV1ZEQzMyKHJlZ3MtPnBzYi5zYXZlQkNMUlBBVF9BLCBCQ0xSUEFUX0Ep OwotCi0JLyogUmVzdG9yZSBwZXJmb3JtYW5jZSBtb2RlKi8KLQlQU0JfV1ZEQzMyKHJlZ3MtPnBz Yi5zYXZlUEVSRl9NT0RFLCBNUlNUX1BFUkZfTU9ERSk7Ci0KLQkvKiBFbmFibGUgdGhlIHBpcGUq LwotCWlmIChkZXZfcHJpdi0+aUxWRFNfZW5hYmxlKQotCQlQU0JfV1ZEQzMyKHAtPmNvbmYsIFBJ UEVBQ09ORik7Ci0KLQkvKiBTZXQgdXAgdGhlIHBsYW5lKi8KLQlQU0JfV1ZEQzMyKHAtPmxpbm9m ZiwgRFNQQUxJTk9GRik7Ci0JUFNCX1dWREMzMihwLT5zdHJpZGUsIERTUEFTVFJJREUpOwotCVBT Ql9XVkRDMzIocC0+dGlsZW9mZiwgRFNQQVRJTEVPRkYpOwotCi0JLyogRW5hYmxlIHRoZSBwbGFu ZSAqLwotCVBTQl9XVkRDMzIocC0+Y250ciwgRFNQQUNOVFIpOwotCVBTQl9XVkRDMzIocC0+c3Vy ZiwgRFNQQVNVUkYpOwotCi0JLyogRW5hYmxlIEN1cnNvciBBICovCi0JUFNCX1dWREMzMihyZWdz LT5wc2Iuc2F2ZURTUEFDVVJTT1JfQ1RSTCwgQ1VSQUNOVFIpOwotCVBTQl9XVkRDMzIocmVncy0+ cHNiLnNhdmVEU1BBQ1VSU09SX1BPUywgQ1VSQVBPUyk7Ci0JUFNCX1dWREMzMihyZWdzLT5wc2Iu c2F2ZURTUEFDVVJTT1JfQkFTRSwgQ1VSQUJBU0UpOwotCi0JLyogUmVzdG9yZSBwYWxldHRlIChn YW1tYSkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCi0JCVBTQl9XVkRDMzIocC0+cGFs ZXR0ZVtpXSwgUEFMRVRURV9BICsgKGkgPDwgMikpOwotCi0JaWYgKGRldl9wcml2LT5oZG1pX3By aXYpCi0JCW9ha3RyYWlsX2hkbWlfcmVzdG9yZShkZXYpOwotCi0JaWYgKGRldl9wcml2LT5pTFZE U19lbmFibGUpIHsKLQkJUFNCX1dWREMzMihyZWdzLT5zYXZlQkxDX1BXTV9DVEwyLCBCTENfUFdN X0NUTDIpOwotCQlQU0JfV1ZEQzMyKHJlZ3MtPnBzYi5zYXZlTFZEUywgTFZEUyk7IC8qcG9ydCA2 MTE4MGgqLwotCQlQU0JfV1ZEQzMyKHJlZ3MtPnBzYi5zYXZlUEZJVF9DT05UUk9MLCBQRklUX0NP TlRST0wpOwotCQlQU0JfV1ZEQzMyKHJlZ3MtPnBzYi5zYXZlUEZJVF9QR01fUkFUSU9TLCBQRklU X1BHTV9SQVRJT1MpOwotCQlQU0JfV1ZEQzMyKHJlZ3MtPnBzYi5zYXZlUEZJVF9BVVRPX1JBVElP UywgUEZJVF9BVVRPX1JBVElPUyk7Ci0JCVBTQl9XVkRDMzIocmVncy0+c2F2ZUJMQ19QV01fQ1RM LCBCTENfUFdNX0NUTCk7Ci0JCVBTQl9XVkRDMzIocmVncy0+cHNiLnNhdmVQUF9PTl9ERUxBWVMs IExWRFNQUF9PTik7Ci0JCVBTQl9XVkRDMzIocmVncy0+cHNiLnNhdmVQUF9PRkZfREVMQVlTLCBM VkRTUFBfT0ZGKTsKLQkJUFNCX1dWREMzMihyZWdzLT5wc2Iuc2F2ZVBQX0RJVklTT1IsIFBQX0NZ Q0xFKTsKLQkJUFNCX1dWREMzMihyZWdzLT5wc2Iuc2F2ZVBQX0NPTlRST0wsIFBQX0NPTlRST0wp OwotCX0KLQotCS8qIFdhaXQgZm9yIGN5Y2xlIGRlbGF5ICovCi0JZG8gewotCQlwcF9zdGF0ID0g UFNCX1JWREMzMihQUF9TVEFUVVMpOwotCX0gd2hpbGUgKHBwX3N0YXQgJiAweDA4MDAwMDAwKTsK LQotCS8qIFdhaXQgZm9yIHBhbmVsIHBvd2VyIHVwICovCi0JZG8gewotCQlwcF9zdGF0ID0gUFNC X1JWREMzMihQUF9TVEFUVVMpOwotCX0gd2hpbGUgKHBwX3N0YXQgJiAweDEwMDAwMDAwKTsKLQot CS8qIFJlc3RvcmUgSFcgb3ZlcmxheSAqLwotCVBTQl9XVkRDMzIocmVncy0+cHNiLnNhdmVPVl9P VkFERCwgT1ZfT1ZBREQpOwotCVBTQl9XVkRDMzIocmVncy0+cHNiLnNhdmVPVl9PR0FNQzAsIE9W X09HQU1DMCk7Ci0JUFNCX1dWREMzMihyZWdzLT5wc2Iuc2F2ZU9WX09HQU1DMSwgT1ZfT0dBTUMx KTsKLQlQU0JfV1ZEQzMyKHJlZ3MtPnBzYi5zYXZlT1ZfT0dBTUMyLCBPVl9PR0FNQzIpOwotCVBT Ql9XVkRDMzIocmVncy0+cHNiLnNhdmVPVl9PR0FNQzMsIE9WX09HQU1DMyk7Ci0JUFNCX1dWREMz MihyZWdzLT5wc2Iuc2F2ZU9WX09HQU1DNCwgT1ZfT0dBTUM0KTsKLQlQU0JfV1ZEQzMyKHJlZ3Mt PnBzYi5zYXZlT1ZfT0dBTUM1LCBPVl9PR0FNQzUpOwotCi0JLyogRFBTVCByZWdpc3RlcnMgKi8K LQlQU0JfV1ZEQzMyKHJlZ3MtPnBzYi5zYXZlSElTVE9HUkFNX0lOVF9DT05UUk9MX1JFRywKLQkJ CQkJCUhJU1RPR1JBTV9JTlRfQ09OVFJPTCk7Ci0JUFNCX1dWREMzMihyZWdzLT5wc2Iuc2F2ZUhJ U1RPR1JBTV9MT0dJQ19DT05UUk9MX1JFRywKLQkJCQkJCUhJU1RPR1JBTV9MT0dJQ19DT05UUk9M KTsKLQlQU0JfV1ZEQzMyKHJlZ3MtPnBzYi5zYXZlUFdNX0NPTlRST0xfTE9HSUMsIFBXTV9DT05U Uk9MX0xPR0lDKTsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqCW9ha3RyYWlsX3Bvd2VyX2Rv d24JLQlwb3dlciBkb3duIHRoZSBkaXNwbGF5IGlzbGFuZAotICoJQGRldjogb3VyIERSTSBkZXZp Y2UKLSAqCi0gKglQb3dlciBkb3duIHRoZSBkaXNwbGF5IGludGVyZmFjZSBvZiBvdXIgZGV2aWNl Ci0gKi8KLXN0YXRpYyBpbnQgb2FrdHJhaWxfcG93ZXJfZG93bihzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KQotewotCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJp dmF0ZTsKLQl1MzIgcHdyX21hc2sgOwotCXUzMiBwd3Jfc3RzOwotCi0JcHdyX21hc2sgPSBQU0Jf UFdSR1RfRElTUExBWV9NQVNLOwotCW91dGwocHdyX21hc2ssIGRldl9wcml2LT5vc3BtX2Jhc2Ug KyBQU0JfUE1fU1NDKTsKLQotCXdoaWxlICh0cnVlKSB7Ci0JCXB3cl9zdHMgPSBpbmwoZGV2X3By aXYtPm9zcG1fYmFzZSArIFBTQl9QTV9TU1MpOwotCQlpZiAoKHB3cl9zdHMgJiBwd3JfbWFzaykg PT0gcHdyX21hc2spCi0JCQlicmVhazsKLQkJZWxzZQotCQkJdWRlbGF5KDEwKTsKLQl9Ci0JcmV0 dXJuIDA7Ci19Ci0KLS8qCi0gKiBvYWt0cmFpbF9wb3dlcl91cAotICoKLSAqIFJlc3RvcmUgcG93 ZXIgdG8gdGhlIHNwZWNpZmllZCBpc2xhbmQocykgKHBvd2VyZ2F0aW5nKQotICovCi1zdGF0aWMg aW50IG9ha3RyYWlsX3Bvd2VyX3VwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0 IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXUzMiBwd3Jf bWFzayA9IFBTQl9QV1JHVF9ESVNQTEFZX01BU0s7Ci0JdTMyIHB3cl9zdHMsIHB3cl9jbnQ7Ci0K LQlwd3JfY250ID0gaW5sKGRldl9wcml2LT5vc3BtX2Jhc2UgKyBQU0JfUE1fU1NDKTsKLQlwd3Jf Y250ICY9IH5wd3JfbWFzazsKLQlvdXRsKHB3cl9jbnQsIChkZXZfcHJpdi0+b3NwbV9iYXNlICsg UFNCX1BNX1NTQykpOwotCi0Jd2hpbGUgKHRydWUpIHsKLQkJcHdyX3N0cyA9IGlubChkZXZfcHJp di0+b3NwbV9iYXNlICsgUFNCX1BNX1NTUyk7Ci0JCWlmICgocHdyX3N0cyAmIHB3cl9tYXNrKSA9 PSAwKQotCQkJYnJlYWs7Ci0JCWVsc2UKLQkJCXVkZWxheSgxMCk7Ci0JfQotCXJldHVybiAwOwot fQotCi0vKiBPYWt0cmFpbCAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBwc2Jfb2Zmc2V0IG9ha3Ry YWlsX3JlZ21hcFsyXSA9IHsKLQl7Ci0JCS5mcDAgPSBNUlNUX0ZQQTAsCi0JCS5mcDEgPSBNUlNU X0ZQQTEsCi0JCS5jbnRyID0gRFNQQUNOVFIsCi0JCS5jb25mID0gUElQRUFDT05GLAotCQkuc3Jj ID0gUElQRUFTUkMsCi0JCS5kcGxsID0gTVJTVF9EUExMX0EsCi0JCS5odG90YWwgPSBIVE9UQUxf QSwKLQkJLmhibGFuayA9IEhCTEFOS19BLAotCQkuaHN5bmMgPSBIU1lOQ19BLAotCQkudnRvdGFs ID0gVlRPVEFMX0EsCi0JCS52YmxhbmsgPSBWQkxBTktfQSwKLQkJLnZzeW5jID0gVlNZTkNfQSwK LQkJLnN0cmlkZSA9IERTUEFTVFJJREUsCi0JCS5zaXplID0gRFNQQVNJWkUsCi0JCS5wb3MgPSBE U1BBUE9TLAotCQkuc3VyZiA9IERTUEFTVVJGLAotCQkuYWRkciA9IE1SU1RfRFNQQUJBU0UsCi0J CS5iYXNlID0gTVJTVF9EU1BBQkFTRSwKLQkJLnN0YXR1cyA9IFBJUEVBU1RBVCwKLQkJLmxpbm9m ZiA9IERTUEFMSU5PRkYsCi0JCS50aWxlb2ZmID0gRFNQQVRJTEVPRkYsCi0JCS5wYWxldHRlID0g UEFMRVRURV9BLAotCX0sCi0JewotCQkuZnAwID0gRlBCMCwKLQkJLmZwMSA9IEZQQjEsCi0JCS5j bnRyID0gRFNQQkNOVFIsCi0JCS5jb25mID0gUElQRUJDT05GLAotCQkuc3JjID0gUElQRUJTUkMs Ci0JCS5kcGxsID0gRFBMTF9CLAotCQkuaHRvdGFsID0gSFRPVEFMX0IsCi0JCS5oYmxhbmsgPSBI QkxBTktfQiwKLQkJLmhzeW5jID0gSFNZTkNfQiwKLQkJLnZ0b3RhbCA9IFZUT1RBTF9CLAotCQku dmJsYW5rID0gVkJMQU5LX0IsCi0JCS52c3luYyA9IFZTWU5DX0IsCi0JCS5zdHJpZGUgPSBEU1BC U1RSSURFLAotCQkuc2l6ZSA9IERTUEJTSVpFLAotCQkucG9zID0gRFNQQlBPUywKLQkJLnN1cmYg PSBEU1BCU1VSRiwKLQkJLmFkZHIgPSBEU1BCQkFTRSwKLQkJLmJhc2UgPSBEU1BCQkFTRSwKLQkJ LnN0YXR1cyA9IFBJUEVCU1RBVCwKLQkJLmxpbm9mZiA9IERTUEJMSU5PRkYsCi0JCS50aWxlb2Zm ID0gRFNQQlRJTEVPRkYsCi0JCS5wYWxldHRlID0gUEFMRVRURV9CLAotCX0sCi19OwotCi1zdGF0 aWMgaW50IG9ha3RyYWlsX2NoaXBfc2V0dXAoc3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQlz dHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3Ry dWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldi0+ZGV2KTsKLQlpbnQgcmV0OwotCi0J aWYgKHBjaV9lbmFibGVfbXNpKHBkZXYpKQotCQlkZXZfd2FybihkZXYtPmRldiwgIkVuYWJsaW5n IE1TSSBmYWlsZWQhXG4iKTsKLQotCWRldl9wcml2LT5yZWdtYXAgPSBvYWt0cmFpbF9yZWdtYXA7 Ci0KLQlyZXQgPSBtaWRfY2hpcF9zZXR1cChkZXYpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4g cmV0OwotCWlmICghZGV2X3ByaXYtPmhhc19nY3QpIHsKLQkJLyogTm93IHB1bGwgdGhlIEJJT1Mg ZGF0YSAqLwotCQlwc2JfaW50ZWxfb3ByZWdpb25faW5pdChkZXYpOwotCQlwc2JfaW50ZWxfaW5p dF9iaW9zKGRldik7Ci0JfQotCWdtYV9pbnRlbF9zZXR1cF9nbWJ1cyhkZXYpOwotCW9ha3RyYWls X2hkbWlfc2V0dXAoZGV2KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgb2FrdHJhaWxf dGVhcmRvd24oc3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZHJtX3BzYl9wcml2 YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0KLQlnbWFfaW50ZWxfdGVhcmRvd25f Z21idXMoZGV2KTsKLQlvYWt0cmFpbF9oZG1pX3RlYXJkb3duKGRldik7Ci0JaWYgKCFkZXZfcHJp di0+aGFzX2djdCkKLQkJcHNiX2ludGVsX2Rlc3Ryb3lfYmlvcyhkZXYpOwotfQotCi1jb25zdCBz dHJ1Y3QgcHNiX29wcyBvYWt0cmFpbF9jaGlwX29wcyA9IHsKLQkubmFtZSA9ICJPYWt0cmFpbCIs Ci0JLnBpcGVzID0gMiwKLQkuY3J0Y3MgPSAyLAotCS5oZG1pX21hc2sgPSAoMSA8PCAxKSwKLQku bHZkc19tYXNrID0gKDEgPDwgMCksCi0JLnNkdm9fbWFzayA9ICgxIDw8IDEpLAotCS5jdXJzb3Jf bmVlZHNfcGh5cyA9IDAsCi0JLnNneF9vZmZzZXQgPSBNUlNUX1NHWF9PRkZTRVQsCi0KLQkuY2hp cF9zZXR1cCA9IG9ha3RyYWlsX2NoaXBfc2V0dXAsCi0JLmNoaXBfdGVhcmRvd24gPSBvYWt0cmFp bF90ZWFyZG93biwKLQkuY3J0Y19oZWxwZXIgPSAmb2FrdHJhaWxfaGVscGVyX2Z1bmNzLAotCS5j cnRjX2Z1bmNzID0gJnBzYl9pbnRlbF9jcnRjX2Z1bmNzLAotCi0JLm91dHB1dF9pbml0ID0gb2Fr dHJhaWxfb3V0cHV0X2luaXQsCi0KLSNpZmRlZiBDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklD RQotCS5iYWNrbGlnaHRfaW5pdCA9IG9ha3RyYWlsX2JhY2tsaWdodF9pbml0LAotI2VuZGlmCi0K LQkuc2F2ZV9yZWdzID0gb2FrdHJhaWxfc2F2ZV9kaXNwbGF5X3JlZ2lzdGVycywKLQkucmVzdG9y ZV9yZWdzID0gb2FrdHJhaWxfcmVzdG9yZV9kaXNwbGF5X3JlZ2lzdGVycywKLQkuc2F2ZV9jcnRj ID0gZ21hX2NydGNfc2F2ZSwKLQkucmVzdG9yZV9jcnRjID0gZ21hX2NydGNfcmVzdG9yZSwKLQku cG93ZXJfZG93biA9IG9ha3RyYWlsX3Bvd2VyX2Rvd24sCi0JLnBvd2VyX3VwID0gb2FrdHJhaWxf cG93ZXJfdXAsCi0KLQkuaTJjX2J1cyA9IDEsCi19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2dtYTUwMC9vYWt0cmFpbF9oZG1pLmMgYi9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL29ha3Ry YWlsX2hkbWkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTA5N2E1OWE5ZWFlLi4w MDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9vYWt0cmFpbF9oZG1pLmMK KysrIC9kZXYvbnVsbApAQCAtMSw4NDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCDCqSAyMDEw IEludGVsIENvcnBvcmF0aW9uCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhp cyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3 YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBp bmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwg bW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9v ciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3 aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Ci0gKiBwYXJh Z3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9y dGlvbnMgb2YgdGhlCi0gKiBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklE RUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICog SU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQg Tk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSAqIFRIRSBBVVRIT1JTIE9SIENP UFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVS Ci0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9S IE9USEVSV0lTRSwgQVJJU0lORwotICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU SCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgotICogREVBTElOR1MgSU4gVEhFIFNP RlRXQVJFLgotICoKLSAqIEF1dGhvcnM6Ci0gKglMaSBQZW5nIDxwZW5nLmxpQGludGVsLmNvbT4K LSAqLwotCi0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLQotI2luY2x1ZGUgPGRybS9kcm0uaD4K LSNpbmNsdWRlIDxkcm0vZHJtX3NpbXBsZV9rbXNfaGVscGVyLmg+Ci0KLSNpbmNsdWRlICJwc2Jf ZHJ2LmgiCi0jaW5jbHVkZSAicHNiX2ludGVsX2Rydi5oIgotI2luY2x1ZGUgInBzYl9pbnRlbF9y ZWcuaCIKLQotI2RlZmluZSBIRE1JX1JFQUQocmVnKQkJcmVhZGwoaGRtaV9kZXYtPnJlZ3MgKyAo cmVnKSkKLSNkZWZpbmUgSERNSV9XUklURShyZWcsIHZhbCkJd3JpdGVsKHZhbCwgaGRtaV9kZXYt PnJlZ3MgKyAocmVnKSkKLQotI2RlZmluZSBIRE1JX0hDUgkweDEwMDAKLSNkZWZpbmUgSENSX0VO QUJMRV9IRENQCQkoMSA8PCA1KQotI2RlZmluZSBIQ1JfRU5BQkxFX0FVRElPCSgxIDw8IDIpCi0j ZGVmaW5lIEhDUl9FTkFCTEVfUElYRUwJKDEgPDwgMSkKLSNkZWZpbmUgSENSX0VOQUJMRV9UTURT CQkoMSA8PCAwKQotCi0jZGVmaW5lIEhETUlfSElDUgkweDEwMDQKLSNkZWZpbmUgSERNSV9IU1IJ MHgxMDA4Ci0jZGVmaW5lIEhETUlfSElTUgkweDEwMEMKLSNkZWZpbmUgSERNSV9ERVRFQ1RfSERQ CQkoMSA8PCAwKQotCi0jZGVmaW5lIEhETUlfVklERU9fUkVHCTB4MzAwMAotI2RlZmluZSBIRE1J X1VOSVRfRU4JCSgxIDw8IDcpCi0jZGVmaW5lIEhETUlfTU9ERV9PVVRQVVQJKDEgPDwgMCkKLSNk ZWZpbmUgSERNSV9IQkxBTktfQQkweDMxMDAKLQotI2RlZmluZSBIRE1JX0FVRElPX0NUUkwJMHg0 MDAwCi0jZGVmaW5lIEhETUlfRU5BQkxFX0FVRElPCSgxIDw8IDApCi0KLSNkZWZpbmUgUENIX0hU T1RBTF9CCTB4MzEwMAotI2RlZmluZSBQQ0hfSEJMQU5LX0IJMHgzMTA0Ci0jZGVmaW5lIFBDSF9I U1lOQ19CCTB4MzEwOAotI2RlZmluZSBQQ0hfVlRPVEFMX0IJMHgzMTBDCi0jZGVmaW5lIFBDSF9W QkxBTktfQgkweDMxMTAKLSNkZWZpbmUgUENIX1ZTWU5DX0IJMHgzMTE0Ci0jZGVmaW5lIFBDSF9Q SVBFQlNSQwkweDMxMUMKLQotI2RlZmluZSBQQ0hfUElQRUJfRFNMCTB4MzgwMAotI2RlZmluZSBQ Q0hfUElQRUJfU0xDCTB4MzgwNAotI2RlZmluZSBQQ0hfUElQRUJDT05GCTB4MzgwOAotI2RlZmlu ZSBQQ0hfUElQRUJTVEFUCTB4MzgyNAotCi0jZGVmaW5lIENEVk9fREZUCTB4NTAwMAotI2RlZmlu ZSBDRFZPX1NMRVdSQVRFCTB4NTAwNAotI2RlZmluZSBDRFZPX1NUUkVOR1RICTB4NTAwOAotI2Rl ZmluZSBDRFZPX1JDT01QCTB4NTAwQwotCi0jZGVmaW5lIERQTExfQ1RSTCAgICAgICAweDYwMDAK LSNkZWZpbmUgRFBMTF9QRElWX1NISUZUCQkxNgotI2RlZmluZSBEUExMX1BESVZfTUFTSwkJKDB4 ZiA8PCAxNikKLSNkZWZpbmUgRFBMTF9QV1JETgkJKDEgPDwgNCkKLSNkZWZpbmUgRFBMTF9SRVNF VAkJKDEgPDwgMykKLSNkZWZpbmUgRFBMTF9GQVNURU4JCSgxIDw8IDIpCi0jZGVmaW5lIERQTExf RU5TVEFUCQkoMSA8PCAxKQotI2RlZmluZSBEUExMX0RJVEhFTgkJKDEgPDwgMCkKLQotI2RlZmlu ZSBEUExMX0RJVl9DVFJMICAgMHg2MDA0Ci0jZGVmaW5lIERQTExfQ0xLRl9NQVNLCQkweGZmZmZm ZmMwCi0jZGVmaW5lIERQTExfQ0xLUl9NQVNLCQkoMHgzZikKLQotI2RlZmluZSBEUExMX0NMS19F TkFCTEUgMHg2MDA4Ci0jZGVmaW5lIERQTExfRU5fRElTUAkJKDEgPDwgMzEpCi0jZGVmaW5lIERQ TExfU0VMX0hETUkJCSgxIDw8IDgpCi0jZGVmaW5lIERQTExfRU5fSERNSQkJKDEgPDwgMSkKLSNk ZWZpbmUgRFBMTF9FTl9WR0EJCSgxIDw8IDApCi0KLSNkZWZpbmUgRFBMTF9BREpVU1QgICAgIDB4 NjAwQwotI2RlZmluZSBEUExMX1NUQVRVUyAgICAgMHg2MDEwCi0jZGVmaW5lIERQTExfVVBEQVRF ICAgICAweDYwMTQKLSNkZWZpbmUgRFBMTF9ERlQgICAgICAgIDB4NjAyMAotCi1zdHJ1Y3QgaW50 ZWxfcmFuZ2UgewotCWludAltaW4sIG1heDsKLX07Ci0KLXN0cnVjdCBvYWt0cmFpbF9oZG1pX2xp bWl0IHsKLQlzdHJ1Y3QgaW50ZWxfcmFuZ2UgdmNvLCBucCwgbnIsIG5mOwotfTsKLQotc3RydWN0 IG9ha3RyYWlsX2hkbWlfY2xvY2sgewotCWludCBucDsKLQlpbnQgbnI7Ci0JaW50IG5mOwotCWlu dCBkb3Q7Ci19OwotCi0jZGVmaW5lIFZDT19NSU4JCTMyMDAwMAotI2RlZmluZSBWQ09fTUFYCQkx NjUwMDAwCi0jZGVmaW5lCU5QX01JTgkJMQotI2RlZmluZQlOUF9NQVgJCTE1Ci0jZGVmaW5lCU5S X01JTgkJMQotI2RlZmluZQlOUl9NQVgJCTY0Ci0jZGVmaW5lIE5GX01JTgkJMgotI2RlZmluZSBO Rl9NQVgJCTQwOTUKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBvYWt0cmFpbF9oZG1pX2xpbWl0IG9h a3RyYWlsX2hkbWlfbGltaXQgPSB7Ci0JLnZjbyA9IHsgLm1pbiA9IFZDT19NSU4sCQkubWF4ID0g VkNPX01BWCB9LAotCS5ucCAgPSB7IC5taW4gPSBOUF9NSU4sCQkJLm1heCA9IE5QX01BWCAgfSwK LQkubnIgID0geyAubWluID0gTlJfTUlOLAkJCS5tYXggPSBOUl9NQVggIH0sCi0JLm5mICA9IHsg Lm1pbiA9IE5GX01JTiwJCQkubWF4ID0gTkZfTUFYICB9LAotfTsKLQotc3RhdGljIHZvaWQgb2Fr dHJhaWxfaGRtaV9hdWRpb19lbmFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1 Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0 IG9ha3RyYWlsX2hkbWlfZGV2ICpoZG1pX2RldiA9IGRldl9wcml2LT5oZG1pX3ByaXY7Ci0KLQlI RE1JX1dSSVRFKEhETUlfSENSLCAweDY3KTsKLQlIRE1JX1JFQUQoSERNSV9IQ1IpOwotCi0JSERN SV9XUklURSgweDUxYTgsIDB4MTApOwotCUhETUlfUkVBRCgweDUxYTgpOwotCi0JSERNSV9XUklU RShIRE1JX0FVRElPX0NUUkwsIDB4MSk7Ci0JSERNSV9SRUFEKEhETUlfQVVESU9fQ1RSTCk7Ci19 Ci0KLXN0YXRpYyB2b2lkIG9ha3RyYWlsX2hkbWlfYXVkaW9fZGlzYWJsZShzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2KQotewotCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5k ZXZfcHJpdmF0ZTsKLQlzdHJ1Y3Qgb2FrdHJhaWxfaGRtaV9kZXYgKmhkbWlfZGV2ID0gZGV2X3By aXYtPmhkbWlfcHJpdjsKLQotCUhETUlfV1JJVEUoMHg1MWE4LCAweDApOwotCUhETUlfUkVBRCgw eDUxYTgpOwotCi0JSERNSV9XUklURShIRE1JX0FVRElPX0NUUkwsIDB4MCk7Ci0JSERNSV9SRUFE KEhETUlfQVVESU9fQ1RSTCk7Ci0KLQlIRE1JX1dSSVRFKEhETUlfSENSLCAweDQ3KTsKLQlIRE1J X1JFQUQoSERNSV9IQ1IpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IGh0b3RhbF9jYWxjdWxh dGUoc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCi17Ci0JdTMyIG5ld19jcnRjX2h0b3Rh bDsKLQotCS8qCi0JICogMTAyNCB4IDc2OCAgbmV3X2NydGNfaHRvdGFsID0gMHgxMDI0OwotCSAq IDEyODAgeCAxMDI0IG5ld19jcnRjX2h0b3RhbCA9IDB4MGMzNDsKLQkgKi8KLQluZXdfY3J0Y19o dG90YWwgPSAobW9kZS0+Y3J0Y19odG90YWwgLSAxKSAqIDIwMCAqIDEwMDAgLyBtb2RlLT5jbG9j azsKLQotCURSTV9ERUJVR19LTVMoIm5ldyBjcnRjIGh0b3RhbCAweCU0eFxuIiwgbmV3X2NydGNf aHRvdGFsKTsKLQlyZXR1cm4gKG1vZGUtPmNydGNfaGRpc3BsYXkgLSAxKSB8IChuZXdfY3J0Y19o dG90YWwgPDwgMTYpOwotfQotCi1zdGF0aWMgdm9pZCBvYWt0cmFpbF9oZG1pX2ZpbmRfZHBsbChz dHJ1Y3QgZHJtX2NydGMgKmNydGMsIGludCB0YXJnZXQsCi0JCQkJaW50IHJlZmNsaywgc3RydWN0 IG9ha3RyYWlsX2hkbWlfY2xvY2sgKmJlc3RfY2xvY2spCi17Ci0JaW50IG5wX21pbiwgbnBfbWF4 LCBucl9taW4sIG5yX21heDsKLQlpbnQgbnAsIG5yLCBuZjsKLQotCW5wX21pbiA9IERJVl9ST1VO RF9VUChvYWt0cmFpbF9oZG1pX2xpbWl0LnZjby5taW4sIHRhcmdldCAqIDEwKTsKLQlucF9tYXgg PSBvYWt0cmFpbF9oZG1pX2xpbWl0LnZjby5tYXggLyAodGFyZ2V0ICogMTApOwotCWlmIChucF9t aW4gPCBvYWt0cmFpbF9oZG1pX2xpbWl0Lm5wLm1pbikKLQkJbnBfbWluID0gb2FrdHJhaWxfaGRt aV9saW1pdC5ucC5taW47Ci0JaWYgKG5wX21heCA+IG9ha3RyYWlsX2hkbWlfbGltaXQubnAubWF4 KQotCQlucF9tYXggPSBvYWt0cmFpbF9oZG1pX2xpbWl0Lm5wLm1heDsKLQotCW5yX21pbiA9IERJ Vl9ST1VORF9VUCgocmVmY2xrICogMTAwMCksICh0YXJnZXQgKiAxMCAqIG5wX21heCkpOwotCW5y X21heCA9IERJVl9ST1VORF9VUCgocmVmY2xrICogMTAwMCksICh0YXJnZXQgKiAxMCAqIG5wX21p bikpOwotCWlmIChucl9taW4gPCBvYWt0cmFpbF9oZG1pX2xpbWl0Lm5yLm1pbikKLQkJbnJfbWlu ID0gb2FrdHJhaWxfaGRtaV9saW1pdC5uci5taW47Ci0JaWYgKG5yX21heCA+IG9ha3RyYWlsX2hk bWlfbGltaXQubnIubWF4KQotCQlucl9tYXggPSBvYWt0cmFpbF9oZG1pX2xpbWl0Lm5yLm1heDsK LQotCW5wID0gRElWX1JPVU5EX1VQKChyZWZjbGsgKiAxMDAwKSwgKHRhcmdldCAqIDEwICogbnJf bWF4KSk7Ci0JbnIgPSBESVZfUk9VTkRfVVAoKHJlZmNsayAqIDEwMDApLCAodGFyZ2V0ICogMTAg KiBucCkpOwotCW5mID0gRElWX1JPVU5EX0NMT1NFU1QoKHRhcmdldCAqIDEwICogbnAgKiBuciks IHJlZmNsayk7Ci0JRFJNX0RFQlVHX0tNUygibnAsIG5yLCBuZiAlZCAlZCAlZFxuIiwgbnAsIG5y LCBuZik7Ci0KLQkvKgotCSAqIDEwMjQgeCA3NjggIG5wID0gMTsgbnIgPSAweDI2OyBuZiA9IDB4 MGZkODAwMDsKLQkgKiAxMjgwIHggMTAyNCBucCA9IDE7IG5yID0gMHgxNzsgbmYgPSAweDEwMzQw MDA7Ci0JICovCi0JYmVzdF9jbG9jay0+bnAgPSBucDsKLQliZXN0X2Nsb2NrLT5uciA9IG5yIC0g MTsKLQliZXN0X2Nsb2NrLT5uZiA9IChuZiA8PCAxNCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNjdV9i dXN5X2xvb3Aodm9pZCBfX2lvbWVtICpzY3VfYmFzZSkKLXsKLQl1MzIgc3RhdHVzID0gMDsKLQl1 MzIgbG9vcF9jb3VudCA9IDA7Ci0KLQlzdGF0dXMgPSByZWFkbChzY3VfYmFzZSArIDB4MDQpOwot CXdoaWxlIChzdGF0dXMgJiAxKSB7Ci0JCXVkZWxheSgxKTsgLyogc2N1IHByb2Nlc3NpbmcgdGlt ZSBpcyBpbiBmZXcgdSBzZWNvZHMgKi8KLQkJc3RhdHVzID0gcmVhZGwoc2N1X2Jhc2UgKyAweDA0 KTsKLQkJbG9vcF9jb3VudCsrOwotCQkvKiBicmVhayBpZiBzY3UgZG9lc24ndCByZXNldCBidXN5 IGJpdCBhZnRlciBodWdlIHJldHJ5ICovCi0JCWlmIChsb29wX2NvdW50ID4gMTAwMCkgewotCQkJ RFJNX0RFQlVHX0tNUygiU0NVIElQQyB0aW1lZCBvdXQiKTsKLQkJCXJldHVybjsKLQkJfQotCX0K LX0KLQotLyoKLSAqCVlvdSBkb24ndCB3YW50IHRvIGtub3csIHlvdSByZWFsbHkgcmVhbGx5IGRv bid0IHdhbnQgdG8ga25vdy4uLi4KLSAqCi0gKglUaGlzIGlzIG1hZ2ljLiBIb3dldmVyIGl0J3Mg c2FmZSBtYWdpYyBiZWNhdXNlIG9mIHRoZSB3YXkgdGhlIHBsYXRmb3JtCi0gKgl3b3JrcyBhbmQg aXQgaXMgbmVjZXNzYXJ5IG1hZ2ljLgotICovCi1zdGF0aWMgdm9pZCBvYWt0cmFpbF9oZG1pX3Jl c2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpiYXNlOwotCXVu c2lnbmVkIGxvbmcgc2N1X2lwY19tbWlvID0gMHhmZjExYzAwMFVMOwotCWludCBzY3VfbGVuID0g MTAyNDsKLQotCWJhc2UgPSBpb3JlbWFwKChyZXNvdXJjZV9zaXplX3Qpc2N1X2lwY19tbWlvLCBz Y3VfbGVuKTsKLQlpZiAoYmFzZSA9PSBOVUxMKSB7Ci0JCURSTV9FUlJPUigiZmFpbGVkIHRvIG1h cCBzY3UgbW1pb1xuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBzY3UgaXBjOiBhc3NlcnQgaGRt aSBjb250cm9sbGVyIHJlc2V0ICovCi0Jd3JpdGVsKDB4ZmYxMWQxMTgsIGJhc2UgKyAweDBjKTsK LQl3cml0ZWwoMHg3ZmZmZmZkZiwgYmFzZSArIDB4ODApOwotCXdyaXRlbCgweDQyMDA1LCBiYXNl ICsgMHgwKTsKLQlzY3VfYnVzeV9sb29wKGJhc2UpOwotCi0JLyogc2N1IGlwYzogZGUtYXNzZXJ0 IGhkbWkgY29udHJvbGxlciByZXNldCAqLwotCXdyaXRlbCgweGZmMTFkMTE4LCBiYXNlICsgMHgw Yyk7Ci0Jd3JpdGVsKDB4N2ZmZmZmZmYsIGJhc2UgKyAweDgwKTsKLQl3cml0ZWwoMHg0MjAwNSwg YmFzZSArIDB4MCk7Ci0Jc2N1X2J1c3lfbG9vcChiYXNlKTsKLQotCWlvdW5tYXAoYmFzZSk7Ci19 Ci0KLWludCBvYWt0cmFpbF9jcnRjX2hkbWlfbW9kZV9zZXQoc3RydWN0IGRybV9jcnRjICpjcnRj LAotCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAotCQkJICAgIHN0cnVjdCBk cm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlLAotCQkJICAgIGludCB4LCBpbnQgeSwKLQkJ CSAgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpvbGRfZmIpCi17Ci0Jc3RydWN0IGRybV9kZXZp Y2UgKmRldiA9IGNydGMtPmRldjsKLQlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9 IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG9ha3RyYWlsX2hkbWlfZGV2ICpoZG1pX2RldiA9 IGRldl9wcml2LT5oZG1pX3ByaXY7Ci0JaW50IHBpcGUgPSAxOwotCWludCBodG90X3JlZyA9IChw aXBlID09IDApID8gSFRPVEFMX0EgOiBIVE9UQUxfQjsKLQlpbnQgaGJsYW5rX3JlZyA9IChwaXBl ID09IDApID8gSEJMQU5LX0EgOiBIQkxBTktfQjsKLQlpbnQgaHN5bmNfcmVnID0gKHBpcGUgPT0g MCkgPyBIU1lOQ19BIDogSFNZTkNfQjsKLQlpbnQgdnRvdF9yZWcgPSAocGlwZSA9PSAwKSA/IFZU T1RBTF9BIDogVlRPVEFMX0I7Ci0JaW50IHZibGFua19yZWcgPSAocGlwZSA9PSAwKSA/IFZCTEFO S19BIDogVkJMQU5LX0I7Ci0JaW50IHZzeW5jX3JlZyA9IChwaXBlID09IDApID8gVlNZTkNfQSA6 IFZTWU5DX0I7Ci0JaW50IGRzcHNpemVfcmVnID0gKHBpcGUgPT0gMCkgPyBEU1BBU0laRSA6IERT UEJTSVpFOwotCWludCBkc3Bwb3NfcmVnID0gKHBpcGUgPT0gMCkgPyBEU1BBUE9TIDogRFNQQlBP UzsKLQlpbnQgcGlwZXNyY19yZWcgPSAocGlwZSA9PSAwKSA/IFBJUEVBU1JDIDogUElQRUJTUkM7 Ci0JaW50IHBpcGVjb25mX3JlZyA9IChwaXBlID09IDApID8gUElQRUFDT05GIDogUElQRUJDT05G OwotCWludCByZWZjbGs7Ci0Jc3RydWN0IG9ha3RyYWlsX2hkbWlfY2xvY2sgY2xvY2s7Ci0JdTMy IGRzcGNudHIsIHBpcGVjb25mLCBkcGxsLCB0ZW1wOwotCWludCBkc3BjbnRyX3JlZyA9IERTUEJD TlRSOwotCi0JaWYgKCFnbWFfcG93ZXJfYmVnaW4oZGV2LCB0cnVlKSkKLQkJcmV0dXJuIDA7Ci0K LQkvKiBEaXNhYmxlIHRoZSBWR0EgcGxhbmUgdGhhdCB3ZSBuZXZlciB1c2UgKi8KLQlSRUdfV1JJ VEUoVkdBQ05UUkwsIFZHQV9ESVNQX0RJU0FCTEUpOwotCi0JLyogRGlzYWJsZSBkcGxsIGlmIG5l Y2Vzc2FyeSAqLwotCWRwbGwgPSBSRUdfUkVBRChEUExMX0NUUkwpOwotCWlmICgoZHBsbCAmIERQ TExfUFdSRE4pID09IDApIHsKLQkJUkVHX1dSSVRFKERQTExfQ1RSTCwgZHBsbCB8IChEUExMX1BX UkROIHwgRFBMTF9SRVNFVCkpOwotCQlSRUdfV1JJVEUoRFBMTF9ESVZfQ1RSTCwgMHgwMDAwMDAw MCk7Ci0JCVJFR19XUklURShEUExMX1NUQVRVUywgMHgxKTsKLQl9Ci0JdWRlbGF5KDE1MCk7Ci0K LQkvKiBSZXNldCBjb250cm9sbGVyICovCi0Jb2FrdHJhaWxfaGRtaV9yZXNldChkZXYpOwotCi0J LyogcHJvZ3JhbSBhbmQgZW5hYmxlIGRwbGwgKi8KLQlyZWZjbGsgPSAyNTAwMDsKLQlvYWt0cmFp bF9oZG1pX2ZpbmRfZHBsbChjcnRjLCBhZGp1c3RlZF9tb2RlLT5jbG9jaywgcmVmY2xrLCAmY2xv Y2spOwotCi0JLyogU2V0IHRoZSBEUExMICovCi0JZHBsbCA9IFJFR19SRUFEKERQTExfQ1RSTCk7 Ci0JZHBsbCAmPSB+RFBMTF9QRElWX01BU0s7Ci0JZHBsbCAmPSB+KERQTExfUFdSRE4gfCBEUExM X1JFU0VUKTsKLQlSRUdfV1JJVEUoRFBMTF9DVFJMLCAweDAwMDAwMDA4KTsKLQlSRUdfV1JJVEUo RFBMTF9ESVZfQ1RSTCwgKChjbG9jay5uZiA8PCA2KSB8IGNsb2NrLm5yKSk7Ci0JUkVHX1dSSVRF KERQTExfQURKVVNULCAoKGNsb2NrLm5mID4+IDE0KSAtIDEpKTsKLQlSRUdfV1JJVEUoRFBMTF9D VFJMLCAoZHBsbCB8IChjbG9jay5ucCA8PCBEUExMX1BESVZfU0hJRlQpIHwgRFBMTF9FTlNUQVQg fCBEUExMX0RJVEhFTikpOwotCVJFR19XUklURShEUExMX1VQREFURSwgMHg4MDAwMDAwMCk7Ci0J UkVHX1dSSVRFKERQTExfQ0xLX0VOQUJMRSwgMHg4MDA1MDEwMik7Ci0JdWRlbGF5KDE1MCk7Ci0K LQkvKiBjb25maWd1cmUgSERNSSAqLwotCUhETUlfV1JJVEUoMHgxMDA0LCAweDFmZCk7Ci0JSERN SV9XUklURSgweDIwMDAsIDB4MSk7Ci0JSERNSV9XUklURSgweDIwMDgsIDB4MCk7Ci0JSERNSV9X UklURSgweDMxMzAsIDB4OCk7Ci0JSERNSV9XUklURSgweDEwMWMsIDB4MTgwMDgxMCk7Ci0KLQl0 ZW1wID0gaHRvdGFsX2NhbGN1bGF0ZShhZGp1c3RlZF9tb2RlKTsKLQlSRUdfV1JJVEUoaHRvdF9y ZWcsIHRlbXApOwotCVJFR19XUklURShoYmxhbmtfcmVnLCAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19o Ymxhbmtfc3RhcnQgLSAxKSB8ICgoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oYmxhbmtfZW5kIC0gMSkg PDwgMTYpKTsKLQlSRUdfV1JJVEUoaHN5bmNfcmVnLCAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oc3lu Y19zdGFydCAtIDEpIHwgKChhZGp1c3RlZF9tb2RlLT5jcnRjX2hzeW5jX2VuZCAtIDEpIDw8IDE2 KSk7Ci0JUkVHX1dSSVRFKHZ0b3RfcmVnLCAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSAt IDEpIHwgKChhZGp1c3RlZF9tb2RlLT5jcnRjX3Z0b3RhbCAtIDEpIDw8IDE2KSk7Ci0JUkVHX1dS SVRFKHZibGFua19yZWcsIChhZGp1c3RlZF9tb2RlLT5jcnRjX3ZibGFua19zdGFydCAtIDEpIHwg KChhZGp1c3RlZF9tb2RlLT5jcnRjX3ZibGFua19lbmQgLSAxKSA8PCAxNikpOwotCVJFR19XUklU RSh2c3luY19yZWcsIChhZGp1c3RlZF9tb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0IC0gMSkgfCAoKGFk anVzdGVkX21vZGUtPmNydGNfdnN5bmNfZW5kIC0gMSkgPDwgMTYpKTsKLQlSRUdfV1JJVEUocGlw ZXNyY19yZWcsICgobW9kZS0+Y3J0Y19oZGlzcGxheSAtIDEpIDw8IDE2KSB8ICAobW9kZS0+Y3J0 Y192ZGlzcGxheSAtIDEpKTsKLQotCVJFR19XUklURShQQ0hfSFRPVEFMX0IsIChhZGp1c3RlZF9t b2RlLT5jcnRjX2hkaXNwbGF5IC0gMSkgfCAoKGFkanVzdGVkX21vZGUtPmNydGNfaHRvdGFsIC0g MSkgPDwgMTYpKTsKLQlSRUdfV1JJVEUoUENIX0hCTEFOS19CLCAoYWRqdXN0ZWRfbW9kZS0+Y3J0 Y19oYmxhbmtfc3RhcnQgLSAxKSB8ICgoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oYmxhbmtfZW5kIC0g MSkgPDwgMTYpKTsKLQlSRUdfV1JJVEUoUENIX0hTWU5DX0IsIChhZGp1c3RlZF9tb2RlLT5jcnRj X2hzeW5jX3N0YXJ0IC0gMSkgfCAoKGFkanVzdGVkX21vZGUtPmNydGNfaHN5bmNfZW5kIC0gMSkg PDwgMTYpKTsKLQlSRUdfV1JJVEUoUENIX1ZUT1RBTF9CLCAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192 ZGlzcGxheSAtIDEpIHwgKChhZGp1c3RlZF9tb2RlLT5jcnRjX3Z0b3RhbCAtIDEpIDw8IDE2KSk7 Ci0JUkVHX1dSSVRFKFBDSF9WQkxBTktfQiwgKGFkanVzdGVkX21vZGUtPmNydGNfdmJsYW5rX3N0 YXJ0IC0gMSkgfCAoKGFkanVzdGVkX21vZGUtPmNydGNfdmJsYW5rX2VuZCAtIDEpIDw8IDE2KSk7 Ci0JUkVHX1dSSVRFKFBDSF9WU1lOQ19CLCAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19zdGFy dCAtIDEpIHwgKChhZGp1c3RlZF9tb2RlLT5jcnRjX3ZzeW5jX2VuZCAtIDEpIDw8IDE2KSk7Ci0J UkVHX1dSSVRFKFBDSF9QSVBFQlNSQywgKChtb2RlLT5jcnRjX2hkaXNwbGF5IC0gMSkgPDwgMTYp IHwgIChtb2RlLT5jcnRjX3ZkaXNwbGF5IC0gMSkpOwotCi0JdGVtcCA9IGFkanVzdGVkX21vZGUt PmNydGNfaGJsYW5rX2VuZCAtIGFkanVzdGVkX21vZGUtPmNydGNfaGJsYW5rX3N0YXJ0OwotCUhE TUlfV1JJVEUoSERNSV9IQkxBTktfQSwgKChhZGp1c3RlZF9tb2RlLT5jcnRjX2hkaXNwbGF5IC0g MSkgPDwgMTYpIHwgIHRlbXApOwotCi0JUkVHX1dSSVRFKGRzcHNpemVfcmVnLCAoKG1vZGUtPnZk aXNwbGF5IC0gMSkgPDwgMTYpIHwgKG1vZGUtPmhkaXNwbGF5IC0gMSkpOwotCVJFR19XUklURShk c3Bwb3NfcmVnLCAwKTsKLQotCS8qIEZsdXNoIHRoZSBwbGFuZSBjaGFuZ2VzICovCi0JewotCQlj b25zdCBzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzICpjcnRjX2Z1bmNzID0gY3J0Yy0+aGVs cGVyX3ByaXZhdGU7Ci0JCWNydGNfZnVuY3MtPm1vZGVfc2V0X2Jhc2UoY3J0YywgeCwgeSwgb2xk X2ZiKTsKLQl9Ci0KLQkvKiBTZXQgdXAgdGhlIGRpc3BsYXkgcGxhbmUgcmVnaXN0ZXIgKi8KLQlk c3BjbnRyID0gUkVHX1JFQUQoZHNwY250cl9yZWcpOwotCWRzcGNudHIgfD0gRElTUFBMQU5FX0dB TU1BX0VOQUJMRTsKLQlkc3BjbnRyIHw9IERJU1BQTEFORV9TRUxfUElQRV9COwotCWRzcGNudHIg fD0gRElTUExBWV9QTEFORV9FTkFCTEU7Ci0KLQkvKiBzZXR1cCBwaXBlY29uZiAqLwotCXBpcGVj b25mID0gUkVHX1JFQUQocGlwZWNvbmZfcmVnKTsKLQlwaXBlY29uZiB8PSBQSVBFQUNPTkZfRU5B QkxFOwotCi0JUkVHX1dSSVRFKHBpcGVjb25mX3JlZywgcGlwZWNvbmYpOwotCVJFR19SRUFEKHBp cGVjb25mX3JlZyk7Ci0KLQlSRUdfV1JJVEUoUENIX1BJUEVCQ09ORiwgcGlwZWNvbmYpOwotCVJF R19SRUFEKFBDSF9QSVBFQkNPTkYpOwotCWdtYV93YWl0X2Zvcl92YmxhbmsoZGV2KTsKLQotCVJF R19XUklURShkc3BjbnRyX3JlZywgZHNwY250cik7Ci0JZ21hX3dhaXRfZm9yX3ZibGFuayhkZXYp OwotCi0JZ21hX3Bvd2VyX2VuZChkZXYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgb2FrdHJh aWxfY3J0Y19oZG1pX2RwbXMoc3RydWN0IGRybV9jcnRjICpjcnRjLCBpbnQgbW9kZSkKLXsKLQlz dHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwotCXUzMiB0ZW1wOwotCi0JRFJNX0RF QlVHX0tNUygiJXMgJWRcbiIsIF9fZnVuY19fLCBtb2RlKTsKLQotCXN3aXRjaCAobW9kZSkgewot CWNhc2UgRFJNX01PREVfRFBNU19PRkY6Ci0JCVJFR19XUklURShWR0FDTlRSTCwgMHg4MDAwMDAw MCk7Ci0KLQkJLyogRGlzYWJsZSBwbGFuZSAqLwotCQl0ZW1wID0gUkVHX1JFQUQoRFNQQkNOVFIp OwotCQlpZiAoKHRlbXAgJiBESVNQTEFZX1BMQU5FX0VOQUJMRSkgIT0gMCkgewotCQkJUkVHX1dS SVRFKERTUEJDTlRSLCB0ZW1wICYgfkRJU1BMQVlfUExBTkVfRU5BQkxFKTsKLQkJCVJFR19SRUFE KERTUEJDTlRSKTsKLQkJCS8qIEZsdXNoIHRoZSBwbGFuZSBjaGFuZ2VzICovCi0JCQlSRUdfV1JJ VEUoRFNQQlNVUkYsIFJFR19SRUFEKERTUEJTVVJGKSk7Ci0JCQlSRUdfUkVBRChEU1BCU1VSRik7 Ci0JCX0KLQotCQkvKiBEaXNhYmxlIHBpcGUgQiAqLwotCQl0ZW1wID0gUkVHX1JFQUQoUElQRUJD T05GKTsKLQkJaWYgKCh0ZW1wICYgUElQRUFDT05GX0VOQUJMRSkgIT0gMCkgewotCQkJUkVHX1dS SVRFKFBJUEVCQ09ORiwgdGVtcCAmIH5QSVBFQUNPTkZfRU5BQkxFKTsKLQkJCVJFR19SRUFEKFBJ UEVCQ09ORik7Ci0JCX0KLQotCQkvKiBEaXNhYmxlIExOVyBQaXBlcywgZXRjICovCi0JCXRlbXAg PSBSRUdfUkVBRChQQ0hfUElQRUJDT05GKTsKLQkJaWYgKCh0ZW1wICYgUElQRUFDT05GX0VOQUJM RSkgIT0gMCkgewotCQkJUkVHX1dSSVRFKFBDSF9QSVBFQkNPTkYsIHRlbXAgJiB+UElQRUFDT05G X0VOQUJMRSk7Ci0JCQlSRUdfUkVBRChQQ0hfUElQRUJDT05GKTsKLQkJfQotCi0JCS8qIHdhaXQg Zm9yIHBpcGUgb2ZmICovCi0JCXVkZWxheSgxNTApOwotCi0JCS8qIERpc2FibGUgZHBsbCAqLwot CQl0ZW1wID0gUkVHX1JFQUQoRFBMTF9DVFJMKTsKLQkJaWYgKCh0ZW1wICYgRFBMTF9QV1JETikg PT0gMCkgewotCQkJUkVHX1dSSVRFKERQTExfQ1RSTCwgdGVtcCB8IChEUExMX1BXUkROIHwgRFBM TF9SRVNFVCkpOwotCQkJUkVHX1dSSVRFKERQTExfU1RBVFVTLCAweDEpOwotCQl9Ci0KLQkJLyog d2FpdCBmb3IgZHBsbCBvZmYgKi8KLQkJdWRlbGF5KDE1MCk7Ci0KLQkJYnJlYWs7Ci0JY2FzZSBE Uk1fTU9ERV9EUE1TX09OOgotCWNhc2UgRFJNX01PREVfRFBNU19TVEFOREJZOgotCWNhc2UgRFJN X01PREVfRFBNU19TVVNQRU5EOgotCQkvKiBFbmFibGUgZHBsbCAqLwotCQl0ZW1wID0gUkVHX1JF QUQoRFBMTF9DVFJMKTsKLQkJaWYgKCh0ZW1wICYgRFBMTF9QV1JETikgIT0gMCkgewotCQkJUkVH X1dSSVRFKERQTExfQ1RSTCwgdGVtcCAmIH4oRFBMTF9QV1JETiB8IERQTExfUkVTRVQpKTsKLQkJ CXRlbXAgPSBSRUdfUkVBRChEUExMX0NMS19FTkFCTEUpOwotCQkJUkVHX1dSSVRFKERQTExfQ0xL X0VOQUJMRSwgdGVtcCB8IERQTExfRU5fRElTUCB8IERQTExfU0VMX0hETUkgfCBEUExMX0VOX0hE TUkpOwotCQkJUkVHX1JFQUQoRFBMTF9DTEtfRU5BQkxFKTsKLQkJfQotCQkvKiB3YWl0IGZvciBk cGxsIHdhcm0gdXAgKi8KLQkJdWRlbGF5KDE1MCk7Ci0KLQkJLyogRW5hYmxlIHBpcGUgQiAqLwot CQl0ZW1wID0gUkVHX1JFQUQoUElQRUJDT05GKTsKLQkJaWYgKCh0ZW1wICYgUElQRUFDT05GX0VO QUJMRSkgPT0gMCkgewotCQkJUkVHX1dSSVRFKFBJUEVCQ09ORiwgdGVtcCB8IFBJUEVBQ09ORl9F TkFCTEUpOwotCQkJUkVHX1JFQUQoUElQRUJDT05GKTsKLQkJfQotCi0JCS8qIEVuYWJsZSBMTlcg UGlwZSBCICovCi0JCXRlbXAgPSBSRUdfUkVBRChQQ0hfUElQRUJDT05GKTsKLQkJaWYgKCh0ZW1w ICYgUElQRUFDT05GX0VOQUJMRSkgPT0gMCkgewotCQkJUkVHX1dSSVRFKFBDSF9QSVBFQkNPTkYs IHRlbXAgfCBQSVBFQUNPTkZfRU5BQkxFKTsKLQkJCVJFR19SRUFEKFBDSF9QSVBFQkNPTkYpOwot CQl9Ci0KLQkJZ21hX3dhaXRfZm9yX3ZibGFuayhkZXYpOwotCi0JCS8qIEVuYWJsZSBwbGFuZSAq LwotCQl0ZW1wID0gUkVHX1JFQUQoRFNQQkNOVFIpOwotCQlpZiAoKHRlbXAgJiBESVNQTEFZX1BM QU5FX0VOQUJMRSkgPT0gMCkgewotCQkJUkVHX1dSSVRFKERTUEJDTlRSLCB0ZW1wIHwgRElTUExB WV9QTEFORV9FTkFCTEUpOwotCQkJLyogRmx1c2ggdGhlIHBsYW5lIGNoYW5nZXMgKi8KLQkJCVJF R19XUklURShEU1BCU1VSRiwgUkVHX1JFQUQoRFNQQlNVUkYpKTsKLQkJCVJFR19SRUFEKERTUEJT VVJGKTsKLQkJfQotCi0JCWdtYV9jcnRjX2xvYWRfbHV0KGNydGMpOwotCX0KLQotCS8qIERTUEFS QiAqLwotCVJFR19XUklURShEU1BBUkIsIDB4MDAwMDNmYmYpOwotCi0JLyogRlcxICovCi0JUkVH X1dSSVRFKDB4NzAwMzQsIDB4M2Y4ODBhMGEpOwotCi0JLyogRlcyICovCi0JUkVHX1dSSVRFKDB4 NzAwMzgsIDB4MGIwNjA4MDgpOwotCi0JLyogRlc0ICovCi0JUkVHX1dSSVRFKDB4NzAwNTAsIDB4 MDgwMzA0MDQpOwotCi0JLyogRlc1ICovCi0JUkVHX1dSSVRFKDB4NzAwNTQsIDB4MDQwNDA0MDQp OwotCi0JLyogTE5DIENoaWNrZW4gQml0cyAtIFNxdWF3ayEgKi8KLQlSRUdfV1JJVEUoMHg3MDQw MCwgMHg0MDAwKTsKLQotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgb2FrdHJhaWxfaGRtaV9k cG1zKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwgaW50IG1vZGUpCi17Ci0Jc3RhdGljIGlu dCBkcG1zX21vZGUgPSAtMTsKLQotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5k ZXY7Ci0Jc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRl OwotCXN0cnVjdCBvYWt0cmFpbF9oZG1pX2RldiAqaGRtaV9kZXYgPSBkZXZfcHJpdi0+aGRtaV9w cml2OwotCXUzMiB0ZW1wOwotCi0JaWYgKGRwbXNfbW9kZSA9PSBtb2RlKQotCQlyZXR1cm47Ci0K LQlpZiAobW9kZSAhPSBEUk1fTU9ERV9EUE1TX09OKQotCQl0ZW1wID0gMHgwOwotCWVsc2UKLQkJ dGVtcCA9IDB4OTk7Ci0KLQlkcG1zX21vZGUgPSBtb2RlOwotCUhETUlfV1JJVEUoSERNSV9WSURF T19SRUcsIHRlbXApOwotfQotCi1zdGF0aWMgZW51bSBkcm1fbW9kZV9zdGF0dXMgb2FrdHJhaWxf aGRtaV9tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCi0JCQkJc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCi17Ci0JaWYgKG1vZGUtPmNsb2NrID4gMTY1MDAw KQotCQlyZXR1cm4gTU9ERV9DTE9DS19ISUdIOwotCWlmIChtb2RlLT5jbG9jayA8IDIwMDAwKQot CQlyZXR1cm4gTU9ERV9DTE9DS19MT1c7Ci0KLQlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9G TEFHX0RCTFNDQU4pCi0JCXJldHVybiBNT0RFX05PX0RCTEVTQ0FOOwotCi0JcmV0dXJuIE1PREVf T0s7Ci19Ci0KLXN0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzCi1vYWt0cmFpbF9oZG1p X2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBib29sIGZvcmNlKQotewot CWVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgc3RhdHVzOwotCXN0cnVjdCBkcm1fZGV2aWNlICpk ZXYgPSBjb25uZWN0b3ItPmRldjsKLQlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9 IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG9ha3RyYWlsX2hkbWlfZGV2ICpoZG1pX2RldiA9 IGRldl9wcml2LT5oZG1pX3ByaXY7Ci0JdTMyIHRlbXA7Ci0KLQl0ZW1wID0gSERNSV9SRUFEKEhE TUlfSFNSKTsKLQlEUk1fREVCVUdfS01TKCJIRE1JX0hTUiAleFxuIiwgdGVtcCk7Ci0KLQlpZiAo KHRlbXAgJiBIRE1JX0RFVEVDVF9IRFApICE9IDApCi0JCXN0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0 dXNfY29ubmVjdGVkOwotCWVsc2UKLQkJc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25u ZWN0ZWQ7Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciByYXdfZWRpZFtdID0gewotCTB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4 ZmYsIDB4MDAsIDB4MTAsIDB4YWMsIDB4MmYsIDB4YTAsCi0JMHg1MywgMHg1NSwgMHgzMywgMHgz MCwgMHgxNiwgMHgxMywgMHgwMSwgMHgwMywgMHgwZSwgMHgzYSwgMHgyNCwgMHg3OCwKLQkweGVh LCAweGU5LCAweGY1LCAweGFjLCAweDUxLCAweDMwLCAweGI0LCAweDI1LCAweDExLCAweDUwLCAw eDU0LCAweGE1LAotCTB4NGIsIDB4MDAsIDB4ODEsIDB4ODAsIDB4YTksIDB4NDAsIDB4NzEsIDB4 NGYsIDB4YjMsIDB4MDAsIDB4MDEsIDB4MDEsCi0JMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgw MSwgMHgwMSwgMHgyOCwgMHgzYywgMHg4MCwgMHhhMCwgMHg3MCwgMHhiMCwKLQkweDIzLCAweDQw LCAweDMwLCAweDIwLCAweDM2LCAweDAwLCAweDQ2LCAweDZjLCAweDIxLCAweDAwLCAweDAwLCAw eDFhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4NDcsIDB4NGUsIDB4MzcsIDB4 MzIsIDB4MzEsIDB4MzksIDB4MzUsCi0JMHg1MiwgMHgzMCwgMHgzMywgMHg1NSwgMHg1MywgMHgw YSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHgwMCwgMHg0NCwKLQkweDQ1LCAweDRjLCAweDRj LCAweDIwLCAweDMyLCAweDM3LCAweDMwLCAweDM5LCAweDU3LCAweDBhLCAweDIwLCAweDIwLAot CTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmQsIDB4MDAsIDB4MzgsIDB4NGMsIDB4MWUsIDB4NTMsIDB4 MTEsIDB4MDAsIDB4MGEsCi0JMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgw MCwgMHg4ZAotfTsKLQotc3RhdGljIGludCBvYWt0cmFpbF9oZG1pX2dldF9tb2RlcyhzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQotewotCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2Fk YXA7Ci0Jc3RydWN0IGVkaWQgKmVkaWQ7Ci0JaW50IHJldCA9IDA7Ci0KLQkvKgotCSAqCUZJWE1F OiBXZSBuZWVkIHRvIGZpZ3VyZSB0aGlzIGxvdCBvdXQuIEluIHRoZW9yeSB3ZSBjYW4KLQkgKgly ZWFkIHRoZSBFRElEIHNvbWVob3cgYnV0IEkndmUgeWV0IHRvIGZpbmQgd29ya2luZyByZWZlcmVu Y2UKLQkgKgljb2RlLgotCSAqLwotCWkyY19hZGFwID0gaTJjX2dldF9hZGFwdGVyKDMpOwotCWlm IChpMmNfYWRhcCA9PSBOVUxMKSB7Ci0JCURSTV9FUlJPUigiTm8gZGRjIGFkYXB0ZXIgYXZhaWxh YmxlIVxuIik7Ci0JCWVkaWQgPSAoc3RydWN0IGVkaWQgKilyYXdfZWRpZDsKLQl9IGVsc2Ugewot CQllZGlkID0gKHN0cnVjdCBlZGlkICopcmF3X2VkaWQ7Ci0JCS8qIEZJWE1FID8gZWRpZCA9IGRy bV9nZXRfZWRpZChjb25uZWN0b3IsIGkyY19hZGFwKTsgKi8KLQl9Ci0KLQlpZiAoZWRpZCkgewot CQlkcm1fY29ubmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KGNvbm5lY3RvciwgZWRpZCk7Ci0J CXJldCA9IGRybV9hZGRfZWRpZF9tb2Rlcyhjb25uZWN0b3IsIGVkaWQpOwotCX0KLQlyZXR1cm4g cmV0OwotfQotCi1zdGF0aWMgdm9pZCBvYWt0cmFpbF9oZG1pX21vZGVfc2V0KHN0cnVjdCBkcm1f ZW5jb2RlciAqZW5jb2RlciwKLQkJCSAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9k ZSwKLQkJCSAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKLXsK LQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OwotCi0Jb2FrdHJhaWxfaGRt aV9hdWRpb19lbmFibGUoZGV2KTsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIG9ha3RyYWls X2hkbWlfZGVzdHJveShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQotewotCXJldHVy bjsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3Mgb2Fr dHJhaWxfaGRtaV9oZWxwZXJfZnVuY3MgPSB7Ci0JLmRwbXMgPSBvYWt0cmFpbF9oZG1pX2RwbXMs Ci0JLnByZXBhcmUgPSBnbWFfZW5jb2Rlcl9wcmVwYXJlLAotCS5tb2RlX3NldCA9IG9ha3RyYWls X2hkbWlfbW9kZV9zZXQsCi0JLmNvbW1pdCA9IGdtYV9lbmNvZGVyX2NvbW1pdCwKLX07Ci0KLXN0 YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MKLQkJCQkJb2FrdHJh aWxfaGRtaV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0gewotCS5nZXRfbW9kZXMgPSBvYWt0cmFp bF9oZG1pX2dldF9tb2RlcywKLQkubW9kZV92YWxpZCA9IG9ha3RyYWlsX2hkbWlfbW9kZV92YWxp ZCwKLQkuYmVzdF9lbmNvZGVyID0gZ21hX2Jlc3RfZW5jb2RlciwKLX07Ci0KLXN0YXRpYyBjb25z dCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyBvYWt0cmFpbF9oZG1pX2Nvbm5lY3Rvcl9mdW5j cyA9IHsKLQkuZHBtcyA9IGRybV9oZWxwZXJfY29ubmVjdG9yX2RwbXMsCi0JLmRldGVjdCA9IG9h a3RyYWlsX2hkbWlfZGV0ZWN0LAotCS5maWxsX21vZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5n bGVfY29ubmVjdG9yX21vZGVzLAotCS5kZXN0cm95ID0gb2FrdHJhaWxfaGRtaV9kZXN0cm95LAot fTsKLQotdm9pZCBvYWt0cmFpbF9oZG1pX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJ CQkJc3RydWN0IHBzYl9pbnRlbF9tb2RlX2RldmljZSAqbW9kZV9kZXYpCi17Ci0Jc3RydWN0IGdt YV9lbmNvZGVyICpnbWFfZW5jb2RlcjsKLQlzdHJ1Y3QgZ21hX2Nvbm5lY3RvciAqZ21hX2Nvbm5l Y3RvcjsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwotCXN0cnVjdCBkcm1fZW5j b2RlciAqZW5jb2RlcjsKLQotCWdtYV9lbmNvZGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGdt YV9lbmNvZGVyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFnbWFfZW5jb2RlcikKLQkJcmV0dXJuOwot Ci0JZ21hX2Nvbm5lY3RvciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBnbWFfY29ubmVjdG9yKSwg R0ZQX0tFUk5FTCk7Ci0JaWYgKCFnbWFfY29ubmVjdG9yKQotCQlnb3RvIGZhaWxlZF9jb25uZWN0 b3I7Ci0KLQljb25uZWN0b3IgPSAmZ21hX2Nvbm5lY3Rvci0+YmFzZTsKLQllbmNvZGVyID0gJmdt YV9lbmNvZGVyLT5iYXNlOwotCWRybV9jb25uZWN0b3JfaW5pdChkZXYsIGNvbm5lY3RvciwKLQkJ CSAgICZvYWt0cmFpbF9oZG1pX2Nvbm5lY3Rvcl9mdW5jcywKLQkJCSAgIERSTV9NT0RFX0NPTk5F Q1RPUl9EVklEKTsKLQotCWRybV9zaW1wbGVfZW5jb2Rlcl9pbml0KGRldiwgZW5jb2RlciwgRFJN X01PREVfRU5DT0RFUl9UTURTKTsKLQotCWdtYV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIoZ21h X2Nvbm5lY3RvciwgZ21hX2VuY29kZXIpOwotCi0JZ21hX2VuY29kZXItPnR5cGUgPSBJTlRFTF9P VVRQVVRfSERNSTsKLQlkcm1fZW5jb2Rlcl9oZWxwZXJfYWRkKGVuY29kZXIsICZvYWt0cmFpbF9o ZG1pX2hlbHBlcl9mdW5jcyk7Ci0JZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKGNvbm5lY3Rvciwg Jm9ha3RyYWlsX2hkbWlfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7Ci0KLQljb25uZWN0b3ItPmRp c3BsYXlfaW5mby5zdWJwaXhlbF9vcmRlciA9IFN1YlBpeGVsSG9yaXpvbnRhbFJHQjsKLQljb25u ZWN0b3ItPmludGVybGFjZV9hbGxvd2VkID0gZmFsc2U7Ci0JY29ubmVjdG9yLT5kb3VibGVzY2Fu X2FsbG93ZWQgPSBmYWxzZTsKLQlkcm1fY29ubmVjdG9yX3JlZ2lzdGVyKGNvbm5lY3Rvcik7Ci0J ZGV2X2luZm8oZGV2LT5kZXYsICJIRE1JIGluaXRpYWxpc2VkLlxuIik7Ci0KLQlyZXR1cm47Ci0K LWZhaWxlZF9jb25uZWN0b3I6Ci0Ja2ZyZWUoZ21hX2VuY29kZXIpOwotfQotCi12b2lkIG9ha3Ry YWlsX2hkbWlfc2V0dXAoc3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZHJtX3Bz Yl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IHBjaV9kZXYg KnBkZXY7Ci0Jc3RydWN0IG9ha3RyYWlsX2hkbWlfZGV2ICpoZG1pX2RldjsKLQlpbnQgcmV0Owot Ci0JcGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MDgwZCwgTlVM TCk7Ci0JaWYgKCFwZGV2KQotCQlyZXR1cm47Ci0KLQloZG1pX2RldiA9IGt6YWxsb2Moc2l6ZW9m KHN0cnVjdCBvYWt0cmFpbF9oZG1pX2RldiksIEdGUF9LRVJORUwpOwotCWlmICghaGRtaV9kZXYp IHsKLQkJZGV2X2VycihkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnlcbiIpOwot CQlnb3RvIG91dDsKLQl9Ci0KLQotCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwotCWlm IChyZXQpIHsKLQkJZGV2X2VycihkZXYtPmRldiwgImZhaWxlZCB0byBlbmFibGUgaGRtaSBjb250 cm9sbGVyXG4iKTsKLQkJZ290byBmcmVlOwotCX0KLQotCWhkbWlfZGV2LT5tbWlvID0gcGNpX3Jl c291cmNlX3N0YXJ0KHBkZXYsIDApOwotCWhkbWlfZGV2LT5tbWlvX2xlbiA9IHBjaV9yZXNvdXJj ZV9sZW4ocGRldiwgMCk7Ci0JaGRtaV9kZXYtPnJlZ3MgPSBpb3JlbWFwKGhkbWlfZGV2LT5tbWlv LCBoZG1pX2Rldi0+bW1pb19sZW4pOwotCWlmICghaGRtaV9kZXYtPnJlZ3MpIHsKLQkJZGV2X2Vy cihkZXYtPmRldiwgImZhaWxlZCB0byBtYXAgaGRtaSBtbWlvXG4iKTsKLQkJZ290byBmcmVlOwot CX0KLQotCWhkbWlfZGV2LT5kZXYgPSBwZGV2OwotCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBoZG1p X2Rldik7Ci0KLQkvKiBJbml0aWFsaXplIGkyYyBjb250cm9sbGVyICovCi0JcmV0ID0gb2FrdHJh aWxfaGRtaV9pMmNfaW5pdChoZG1pX2Rldi0+ZGV2KTsKLQlpZiAocmV0KQotCQlkZXZfZXJyKGRl di0+ZGV2LCAiSERNSSBJMkMgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iKTsKLQotCWRldl9wcml2 LT5oZG1pX3ByaXYgPSBoZG1pX2RldjsKLQlvYWt0cmFpbF9oZG1pX2F1ZGlvX2Rpc2FibGUoZGV2 KTsKLQotCWRldl9pbmZvKGRldi0+ZGV2LCAiSERNSSBoYXJkd2FyZSBwcmVzZW50LlxuIik7Ci0K LQlyZXR1cm47Ci0KLWZyZWU6Ci0Ja2ZyZWUoaGRtaV9kZXYpOwotb3V0OgotCXJldHVybjsKLX0K LQotdm9pZCBvYWt0cmFpbF9oZG1pX3RlYXJkb3duKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17 Ci0Jc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwot CXN0cnVjdCBvYWt0cmFpbF9oZG1pX2RldiAqaGRtaV9kZXYgPSBkZXZfcHJpdi0+aGRtaV9wcml2 OwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwotCi0JaWYgKGhkbWlfZGV2KSB7Ci0JCXBkZXYgPSBo ZG1pX2Rldi0+ZGV2OwotCQlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci0JCW9ha3RyYWls X2hkbWlfaTJjX2V4aXQocGRldik7Ci0JCWlvdW5tYXAoaGRtaV9kZXYtPnJlZ3MpOwotCQlrZnJl ZShoZG1pX2Rldik7Ci0JCXBjaV9kZXZfcHV0KHBkZXYpOwotCX0KLX0KLQotLyogc2F2ZSBIRE1J IHJlZ2lzdGVyIHN0YXRlICovCi12b2lkIG9ha3RyYWlsX2hkbWlfc2F2ZShzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2KQotewotCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5k ZXZfcHJpdmF0ZTsKLQlzdHJ1Y3Qgb2FrdHJhaWxfaGRtaV9kZXYgKmhkbWlfZGV2ID0gZGV2X3By aXYtPmhkbWlfcHJpdjsKLQlzdHJ1Y3QgcHNiX3N0YXRlICpyZWdzID0gJmRldl9wcml2LT5yZWdz LnBzYjsKLQlzdHJ1Y3QgcHNiX3BpcGUgKnBpcGViID0gJmRldl9wcml2LT5yZWdzLnBpcGVbMV07 Ci0JaW50IGk7Ci0KLQkvKiBkcGxsICovCi0JaGRtaV9kZXYtPnNhdmVEUExMX0NUUkwgPSBQU0Jf UlZEQzMyKERQTExfQ1RSTCk7Ci0JaGRtaV9kZXYtPnNhdmVEUExMX0RJVl9DVFJMID0gUFNCX1JW REMzMihEUExMX0RJVl9DVFJMKTsKLQloZG1pX2Rldi0+c2F2ZURQTExfQURKVVNUID0gUFNCX1JW REMzMihEUExMX0FESlVTVCk7Ci0JaGRtaV9kZXYtPnNhdmVEUExMX1VQREFURSA9IFBTQl9SVkRD MzIoRFBMTF9VUERBVEUpOwotCWhkbWlfZGV2LT5zYXZlRFBMTF9DTEtfRU5BQkxFID0gUFNCX1JW REMzMihEUExMX0NMS19FTkFCTEUpOwotCi0JLyogcGlwZSBCICovCi0JcGlwZWItPmNvbmYgPSBQ U0JfUlZEQzMyKFBJUEVCQ09ORik7Ci0JcGlwZWItPnNyYyA9IFBTQl9SVkRDMzIoUElQRUJTUkMp OwotCXBpcGViLT5odG90YWwgPSBQU0JfUlZEQzMyKEhUT1RBTF9CKTsKLQlwaXBlYi0+aGJsYW5r ID0gUFNCX1JWREMzMihIQkxBTktfQik7Ci0JcGlwZWItPmhzeW5jID0gUFNCX1JWREMzMihIU1lO Q19CKTsKLQlwaXBlYi0+dnRvdGFsID0gUFNCX1JWREMzMihWVE9UQUxfQik7Ci0JcGlwZWItPnZi bGFuayA9IFBTQl9SVkRDMzIoVkJMQU5LX0IpOwotCXBpcGViLT52c3luYyA9IFBTQl9SVkRDMzIo VlNZTkNfQik7Ci0KLQloZG1pX2Rldi0+c2F2ZVBDSF9QSVBFQkNPTkYgPSBQU0JfUlZEQzMyKFBD SF9QSVBFQkNPTkYpOwotCWhkbWlfZGV2LT5zYXZlUENIX1BJUEVCU1JDID0gUFNCX1JWREMzMihQ Q0hfUElQRUJTUkMpOwotCWhkbWlfZGV2LT5zYXZlUENIX0hUT1RBTF9CID0gUFNCX1JWREMzMihQ Q0hfSFRPVEFMX0IpOwotCWhkbWlfZGV2LT5zYXZlUENIX0hCTEFOS19CID0gUFNCX1JWREMzMihQ Q0hfSEJMQU5LX0IpOwotCWhkbWlfZGV2LT5zYXZlUENIX0hTWU5DX0IgID0gUFNCX1JWREMzMihQ Q0hfSFNZTkNfQik7Ci0JaGRtaV9kZXYtPnNhdmVQQ0hfVlRPVEFMX0IgPSBQU0JfUlZEQzMyKFBD SF9WVE9UQUxfQik7Ci0JaGRtaV9kZXYtPnNhdmVQQ0hfVkJMQU5LX0IgPSBQU0JfUlZEQzMyKFBD SF9WQkxBTktfQik7Ci0JaGRtaV9kZXYtPnNhdmVQQ0hfVlNZTkNfQiAgPSBQU0JfUlZEQzMyKFBD SF9WU1lOQ19CKTsKLQotCS8qIHBsYW5lICovCi0JcGlwZWItPmNudHIgPSBQU0JfUlZEQzMyKERT UEJDTlRSKTsKLQlwaXBlYi0+c3RyaWRlID0gUFNCX1JWREMzMihEU1BCU1RSSURFKTsKLQlwaXBl Yi0+YWRkciA9IFBTQl9SVkRDMzIoRFNQQkJBU0UpOwotCXBpcGViLT5zdXJmID0gUFNCX1JWREMz MihEU1BCU1VSRik7Ci0JcGlwZWItPmxpbm9mZiA9IFBTQl9SVkRDMzIoRFNQQkxJTk9GRik7Ci0J cGlwZWItPnRpbGVvZmYgPSBQU0JfUlZEQzMyKERTUEJUSUxFT0ZGKTsKLQotCS8qIGN1cnNvciBC ICovCi0JcmVncy0+c2F2ZURTUEJDVVJTT1JfQ1RSTCA9IFBTQl9SVkRDMzIoQ1VSQkNOVFIpOwot CXJlZ3MtPnNhdmVEU1BCQ1VSU09SX0JBU0UgPSBQU0JfUlZEQzMyKENVUkJCQVNFKTsKLQlyZWdz LT5zYXZlRFNQQkNVUlNPUl9QT1MgPSBQU0JfUlZEQzMyKENVUkJQT1MpOwotCi0JLyogc2F2ZSBw YWxldHRlICovCi0JZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQotCQlwaXBlYi0+cGFsZXR0ZVtp XSA9IFBTQl9SVkRDMzIoUEFMRVRURV9CICsgKGkgPDwgMikpOwotfQotCi0vKiByZXN0b3JlIEhE TUkgcmVnaXN0ZXIgc3RhdGUgKi8KLXZvaWQgb2FrdHJhaWxfaGRtaV9yZXN0b3JlKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBk ZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBvYWt0cmFpbF9oZG1pX2RldiAqaGRtaV9kZXYgPSBk ZXZfcHJpdi0+aGRtaV9wcml2OwotCXN0cnVjdCBwc2Jfc3RhdGUgKnJlZ3MgPSAmZGV2X3ByaXYt PnJlZ3MucHNiOwotCXN0cnVjdCBwc2JfcGlwZSAqcGlwZWIgPSAmZGV2X3ByaXYtPnJlZ3MucGlw ZVsxXTsKLQlpbnQgaTsKLQotCS8qIGRwbGwgKi8KLQlQU0JfV1ZEQzMyKGhkbWlfZGV2LT5zYXZl RFBMTF9DVFJMLCBEUExMX0NUUkwpOwotCVBTQl9XVkRDMzIoaGRtaV9kZXYtPnNhdmVEUExMX0RJ Vl9DVFJMLCBEUExMX0RJVl9DVFJMKTsKLQlQU0JfV1ZEQzMyKGhkbWlfZGV2LT5zYXZlRFBMTF9B REpVU1QsIERQTExfQURKVVNUKTsKLQlQU0JfV1ZEQzMyKGhkbWlfZGV2LT5zYXZlRFBMTF9VUERB VEUsIERQTExfVVBEQVRFKTsKLQlQU0JfV1ZEQzMyKGhkbWlfZGV2LT5zYXZlRFBMTF9DTEtfRU5B QkxFLCBEUExMX0NMS19FTkFCTEUpOwotCXVkZWxheSgxNTApOwotCi0JLyogcGlwZSAqLwotCVBT Ql9XVkRDMzIocGlwZWItPnNyYywgUElQRUJTUkMpOwotCVBTQl9XVkRDMzIocGlwZWItPmh0b3Rh bCwgSFRPVEFMX0IpOwotCVBTQl9XVkRDMzIocGlwZWItPmhibGFuaywgSEJMQU5LX0IpOwotCVBT Ql9XVkRDMzIocGlwZWItPmhzeW5jLCAgSFNZTkNfQik7Ci0JUFNCX1dWREMzMihwaXBlYi0+dnRv dGFsLCBWVE9UQUxfQik7Ci0JUFNCX1dWREMzMihwaXBlYi0+dmJsYW5rLCBWQkxBTktfQik7Ci0J UFNCX1dWREMzMihwaXBlYi0+dnN5bmMsICBWU1lOQ19CKTsKLQotCVBTQl9XVkRDMzIoaGRtaV9k ZXYtPnNhdmVQQ0hfUElQRUJTUkMsIFBDSF9QSVBFQlNSQyk7Ci0JUFNCX1dWREMzMihoZG1pX2Rl di0+c2F2ZVBDSF9IVE9UQUxfQiwgUENIX0hUT1RBTF9CKTsKLQlQU0JfV1ZEQzMyKGhkbWlfZGV2 LT5zYXZlUENIX0hCTEFOS19CLCBQQ0hfSEJMQU5LX0IpOwotCVBTQl9XVkRDMzIoaGRtaV9kZXYt PnNhdmVQQ0hfSFNZTkNfQiwgIFBDSF9IU1lOQ19CKTsKLQlQU0JfV1ZEQzMyKGhkbWlfZGV2LT5z YXZlUENIX1ZUT1RBTF9CLCBQQ0hfVlRPVEFMX0IpOwotCVBTQl9XVkRDMzIoaGRtaV9kZXYtPnNh dmVQQ0hfVkJMQU5LX0IsIFBDSF9WQkxBTktfQik7Ci0JUFNCX1dWREMzMihoZG1pX2Rldi0+c2F2 ZVBDSF9WU1lOQ19CLCAgUENIX1ZTWU5DX0IpOwotCi0JUFNCX1dWREMzMihwaXBlYi0+Y29uZiwg UElQRUJDT05GKTsKLQlQU0JfV1ZEQzMyKGhkbWlfZGV2LT5zYXZlUENIX1BJUEVCQ09ORiwgUENI X1BJUEVCQ09ORik7Ci0KLQkvKiBwbGFuZSAqLwotCVBTQl9XVkRDMzIocGlwZWItPmxpbm9mZiwg RFNQQkxJTk9GRik7Ci0JUFNCX1dWREMzMihwaXBlYi0+c3RyaWRlLCBEU1BCU1RSSURFKTsKLQlQ U0JfV1ZEQzMyKHBpcGViLT50aWxlb2ZmLCBEU1BCVElMRU9GRik7Ci0JUFNCX1dWREMzMihwaXBl Yi0+Y250ciwgRFNQQkNOVFIpOwotCVBTQl9XVkRDMzIocGlwZWItPnN1cmYsIERTUEJTVVJGKTsK LQotCS8qIGN1cnNvciBCICovCi0JUFNCX1dWREMzMihyZWdzLT5zYXZlRFNQQkNVUlNPUl9DVFJM LCBDVVJCQ05UUik7Ci0JUFNCX1dWREMzMihyZWdzLT5zYXZlRFNQQkNVUlNPUl9QT1MsIENVUkJQ T1MpOwotCVBTQl9XVkRDMzIocmVncy0+c2F2ZURTUEJDVVJTT1JfQkFTRSwgQ1VSQkJBU0UpOwot Ci0JLyogcmVzdG9yZSBwYWxldHRlICovCi0JZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQotCQlQ U0JfV1ZEQzMyKHBpcGViLT5wYWxldHRlW2ldLCBQQUxFVFRFX0IgKyAoaSA8PCAyKSk7Ci19CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL29ha3RyYWlsX2hkbWlfaTJjLmMgYi9k cml2ZXJzL2dwdS9kcm0vZ21hNTAwL29ha3RyYWlsX2hkbWlfaTJjLmMKZGVsZXRlZCBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IGZjOWEzNGVkNThiZC4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMv Z3B1L2RybS9nbWE1MDAvb2FrdHJhaWxfaGRtaV9pMmMuYworKysgL2Rldi9udWxsCkBAIC0xLDMz MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IMKpIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24KLSAq Ci0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55 IHBlcnNvbiBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lh dGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4g dGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0 YXRpb24KLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNo LCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBT b2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBp cyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25z OgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g bm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKLSAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVk ZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKLSAqIFNvZnR3 YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdB UlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVU IE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBO TyBFVkVOVCBTSEFMTAotICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElB QkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhF UiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCi0g KiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUg VVNFIE9SIE9USEVSCi0gKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCi0gKgotICogQXV0aG9y czoKLSAqCUxpIFBlbmcgPHBlbmcubGlAaW50ZWwuY29tPgotICovCi0KLSNpbmNsdWRlIDxsaW51 eC9leHBvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGxpbnV4L3Bj aS5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5o PgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSAicHNiX2Rydi5oIgotCi0jZGVm aW5lIEhETUlfUkVBRChyZWcpCQlyZWFkbChoZG1pX2Rldi0+cmVncyArIChyZWcpKQotI2RlZmlu ZSBIRE1JX1dSSVRFKHJlZywgdmFsKQl3cml0ZWwodmFsLCBoZG1pX2Rldi0+cmVncyArIChyZWcp KQotCi0jZGVmaW5lIEhETUlfSENSCTB4MTAwMAotI2RlZmluZSBIQ1JfREVURUNUX0hEUAkJKDEg PDwgNikKLSNkZWZpbmUgSENSX0VOQUJMRV9IRENQCQkoMSA8PCA1KQotI2RlZmluZSBIQ1JfRU5B QkxFX0FVRElPCSgxIDw8IDIpCi0jZGVmaW5lIEhDUl9FTkFCTEVfUElYRUwJKDEgPDwgMSkKLSNk ZWZpbmUgSENSX0VOQUJMRV9UTURTCQkoMSA8PCAwKQotI2RlZmluZSBIRE1JX0hJQ1IJMHgxMDA0 Ci0jZGVmaW5lIEhETUlfSU5UUl9JMkNfRVJST1IJKDEgPDwgNCkKLSNkZWZpbmUgSERNSV9JTlRS X0kyQ19GVUxMCSgxIDw8IDMpCi0jZGVmaW5lIEhETUlfSU5UUl9JMkNfRE9ORQkoMSA8PCAyKQot I2RlZmluZSBIRE1JX0lOVFJfSFBECQkoMSA8PCAwKQotI2RlZmluZSBIRE1JX0hTUgkweDEwMDgK LSNkZWZpbmUgSERNSV9ISVNSCTB4MTAwQwotI2RlZmluZSBIRE1JX0hJMkNSREIwCTB4MTIwMAot I2RlZmluZSBIRE1JX0hJMkNIQ1IJMHgxMjQwCi0jZGVmaW5lIEhJMkNfSERDUF9XUklURQkJKDAg PDwgMikKLSNkZWZpbmUgSEkyQ19IRENQX1JJX1JFQUQJKDEgPDwgMikKLSNkZWZpbmUgSEkyQ19I RENQX1JFQUQJCSgyIDw8IDIpCi0jZGVmaW5lIEhJMkNfRURJRF9SRUFECQkoMyA8PCAyKQotI2Rl ZmluZSBISTJDX1JFQURfQ09OVElOVUUJKDEgPDwgMSkKLSNkZWZpbmUgSEkyQ19FTkFCTEVfVFJB TlNBQ1RJT04JKDEgPDwgMCkKLQotI2RlZmluZSBIRE1JX0lDUkgJMHgxMTAwCi0jZGVmaW5lIEhE TUlfSEkyQ1REUjAJMHgxMjQ0Ci0jZGVmaW5lIEhETUlfSEkyQ1REUjEJMHgxMjQ4Ci0KLSNkZWZp bmUgSTJDX1NUQVRfSU5JVAkJMAotI2RlZmluZSBJMkNfUkVBRF9ET05FCQkxCi0jZGVmaW5lIEky Q19UUkFOU0FDVElPTl9ET05FCTIKLQotc3RydWN0IGhkbWlfaTJjX2RldiB7Ci0Jc3RydWN0IGky Y19hZGFwdGVyICphZGFwOwotCXN0cnVjdCBtdXRleCBpMmNfbG9jazsKLQlzdHJ1Y3QgY29tcGxl dGlvbiBjb21wbGV0ZTsKLQlpbnQgc3RhdHVzOwotCXN0cnVjdCBpMmNfbXNnICptc2c7Ci0JaW50 IGJ1Zl9vZmZzZXQ7Ci19OwotCi1zdGF0aWMgdm9pZCBoZG1pX2kyY19pcnFfZW5hYmxlKHN0cnVj dCBvYWt0cmFpbF9oZG1pX2RldiAqaGRtaV9kZXYpCi17Ci0JdTMyIHRlbXA7Ci0KLQl0ZW1wID0g SERNSV9SRUFEKEhETUlfSElDUik7Ci0JdGVtcCB8PSAoSERNSV9JTlRSX0kyQ19FUlJPUiB8IEhE TUlfSU5UUl9JMkNfRlVMTCB8IEhETUlfSU5UUl9JMkNfRE9ORSk7Ci0JSERNSV9XUklURShIRE1J X0hJQ1IsIHRlbXApOwotCUhETUlfUkVBRChIRE1JX0hJQ1IpOwotfQotCi1zdGF0aWMgdm9pZCBo ZG1pX2kyY19pcnFfZGlzYWJsZShzdHJ1Y3Qgb2FrdHJhaWxfaGRtaV9kZXYgKmhkbWlfZGV2KQot ewotCUhETUlfV1JJVEUoSERNSV9ISUNSLCAweDApOwotCUhETUlfUkVBRChIRE1JX0hJQ1IpOwot fQotCi1zdGF0aWMgaW50IHhmZXJfcmVhZChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIHN0cnVj dCBpMmNfbXNnICpwbXNnKQotewotCXN0cnVjdCBvYWt0cmFpbF9oZG1pX2RldiAqaGRtaV9kZXYg PSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXApOwotCXN0cnVjdCBoZG1pX2kyY19kZXYgKmkyY19kZXYg PSBoZG1pX2Rldi0+aTJjX2RldjsKLQl1MzIgdGVtcDsKLQotCWkyY19kZXYtPnN0YXR1cyA9IEky Q19TVEFUX0lOSVQ7Ci0JaTJjX2Rldi0+bXNnID0gcG1zZzsKLQlpMmNfZGV2LT5idWZfb2Zmc2V0 ID0gMDsKLQlyZWluaXRfY29tcGxldGlvbigmaTJjX2Rldi0+Y29tcGxldGUpOwotCi0JLyogRW5h YmxlIEkyQyB0cmFuc2FjdGlvbiAqLwotCXRlbXAgPSAoKHBtc2ctPmxlbikgPDwgMjApIHwgSEky Q19FRElEX1JFQUQgfCBISTJDX0VOQUJMRV9UUkFOU0FDVElPTjsKLQlIRE1JX1dSSVRFKEhETUlf SEkyQ0hDUiwgdGVtcCk7Ci0JSERNSV9SRUFEKEhETUlfSEkyQ0hDUik7Ci0KLQl3aGlsZSAoaTJj X2Rldi0+c3RhdHVzICE9IEkyQ19UUkFOU0FDVElPTl9ET05FKQotCQl3YWl0X2Zvcl9jb21wbGV0 aW9uX2ludGVycnVwdGlibGVfdGltZW91dCgmaTJjX2Rldi0+Y29tcGxldGUsCi0JCQkJCQkJCTEw ICogSFopOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgeGZlcl93cml0ZShzdHJ1Y3Qg aTJjX2FkYXB0ZXIgKmFkYXAsIHN0cnVjdCBpMmNfbXNnICpwbXNnKQotewotCS8qCi0JICogWFhY OiBpMmMgd3JpdGUgc2VlbXMgaXNuJ3QgdXNlZnVsIGZvciBFRElEIHByb2JlLCBkb24ndCBkbyBh bnl0aGluZwotCSAqLwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG9ha3RyYWlsX2hkbWlf aTJjX2FjY2VzcyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsCi0JCQkJc3RydWN0IGkyY19tc2cg KnBtc2csCi0JCQkJaW50IG51bSkKLXsKLQlzdHJ1Y3Qgb2FrdHJhaWxfaGRtaV9kZXYgKmhkbWlf ZGV2ID0gaTJjX2dldF9hZGFwZGF0YShhZGFwKTsKLQlzdHJ1Y3QgaGRtaV9pMmNfZGV2ICppMmNf ZGV2ID0gaGRtaV9kZXYtPmkyY19kZXY7Ci0JaW50IGk7Ci0KLQltdXRleF9sb2NrKCZpMmNfZGV2 LT5pMmNfbG9jayk7Ci0KLQkvKiBFbmFibGUgaTJjIHVuaXQgKi8KLQlIRE1JX1dSSVRFKEhETUlf SUNSSCwgMHgwMDAwODc2MCk7Ci0KLQkvKiBFbmFibGUgaXJxICovCi0JaGRtaV9pMmNfaXJxX2Vu YWJsZShoZG1pX2Rldik7Ci0JZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7Ci0JCWlmIChwbXNn LT5sZW4gJiYgcG1zZy0+YnVmKSB7Ci0JCQlpZiAocG1zZy0+ZmxhZ3MgJiBJMkNfTV9SRCkKLQkJ CQl4ZmVyX3JlYWQoYWRhcCwgcG1zZyk7Ci0JCQllbHNlCi0JCQkJeGZlcl93cml0ZShhZGFwLCBw bXNnKTsKLQkJfQotCQlwbXNnKys7ICAgICAgICAgLyogbmV4dCBtZXNzYWdlICovCi0JfQotCi0J LyogRGlzYWJsZSBpcnEgKi8KLQloZG1pX2kyY19pcnFfZGlzYWJsZShoZG1pX2Rldik7Ci0KLQlt dXRleF91bmxvY2soJmkyY19kZXYtPmkyY19sb2NrKTsKLQotCXJldHVybiBpOwotfQotCi1zdGF0 aWMgdTMyIG9ha3RyYWlsX2hkbWlfaTJjX2Z1bmMoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVy KQotewotCXJldHVybiBJMkNfRlVOQ19JMkMgfCBJMkNfRlVOQ18xMEJJVF9BRERSOwotfQotCi1z dGF0aWMgY29uc3Qgc3RydWN0IGkyY19hbGdvcml0aG0gb2FrdHJhaWxfaGRtaV9pMmNfYWxnb3Jp dGhtID0gewotCS5tYXN0ZXJfeGZlcgk9IG9ha3RyYWlsX2hkbWlfaTJjX2FjY2VzcywKLQkuZnVu Y3Rpb25hbGl0eSAgPSBvYWt0cmFpbF9oZG1pX2kyY19mdW5jLAotfTsKLQotc3RhdGljIHN0cnVj dCBpMmNfYWRhcHRlciBvYWt0cmFpbF9oZG1pX2kyY19hZGFwdGVyID0gewotCS5uYW1lCQk9ICJv YWt0cmFpbF9oZG1pX2kyYyIsCi0JLm5yCQk9IDMsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAot CS5jbGFzcwkJPSBJMkNfQ0xBU1NfRERDLAotCS5hbGdvCQk9ICZvYWt0cmFpbF9oZG1pX2kyY19h bGdvcml0aG0sCi19OwotCi1zdGF0aWMgdm9pZCBoZG1pX2kyY19yZWFkKHN0cnVjdCBvYWt0cmFp bF9oZG1pX2RldiAqaGRtaV9kZXYpCi17Ci0Jc3RydWN0IGhkbWlfaTJjX2RldiAqaTJjX2RldiA9 IGhkbWlfZGV2LT5pMmNfZGV2OwotCXN0cnVjdCBpMmNfbXNnICptc2cgPSBpMmNfZGV2LT5tc2c7 Ci0JdTggKmJ1ZiA9IG1zZy0+YnVmOwotCXUzMiB0ZW1wOwotCWludCBpLCBvZmZzZXQ7Ci0KLQlv ZmZzZXQgPSBpMmNfZGV2LT5idWZfb2Zmc2V0OwotCWZvciAoaSA9IDA7IGkgPCAweDEwOyBpKysp IHsKLQkJdGVtcCA9IEhETUlfUkVBRChIRE1JX0hJMkNSREIwICsgKGkgKiA0KSk7Ci0JCW1lbWNw eShidWYgKyAob2Zmc2V0ICsgaSAqIDQpLCAmdGVtcCwgNCk7Ci0JfQotCWkyY19kZXYtPmJ1Zl9v ZmZzZXQgKz0gKDB4MTAgKiA0KTsKLQotCS8qIGNsZWFyaW5nIHJlYWQgYnVmZmVyIGZ1bGwgaW50 ciAqLwotCXRlbXAgPSBIRE1JX1JFQUQoSERNSV9ISVNSKTsKLQlIRE1JX1dSSVRFKEhETUlfSElT UiwgdGVtcCB8IEhETUlfSU5UUl9JMkNfRlVMTCk7Ci0JSERNSV9SRUFEKEhETUlfSElTUik7Ci0K LQkvKiBjb250aW51ZSByZWFkIHRyYW5zYWN0aW9uICovCi0JdGVtcCA9IEhETUlfUkVBRChIRE1J X0hJMkNIQ1IpOwotCUhETUlfV1JJVEUoSERNSV9ISTJDSENSLCB0ZW1wIHwgSEkyQ19SRUFEX0NP TlRJTlVFKTsKLQlIRE1JX1JFQUQoSERNSV9ISTJDSENSKTsKLQotCWkyY19kZXYtPnN0YXR1cyA9 IEkyQ19SRUFEX0RPTkU7Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCBoZG1pX2kyY190cmFu c2FjdGlvbl9kb25lKHN0cnVjdCBvYWt0cmFpbF9oZG1pX2RldiAqaGRtaV9kZXYpCi17Ci0Jc3Ry dWN0IGhkbWlfaTJjX2RldiAqaTJjX2RldiA9IGhkbWlfZGV2LT5pMmNfZGV2OwotCXUzMiB0ZW1w OwotCi0JLyogY2xlYXIgdHJhbnNhY3Rpb24gZG9uZSBpbnRyICovCi0JdGVtcCA9IEhETUlfUkVB RChIRE1JX0hJU1IpOwotCUhETUlfV1JJVEUoSERNSV9ISVNSLCB0ZW1wIHwgSERNSV9JTlRSX0ky Q19ET05FKTsKLQlIRE1JX1JFQUQoSERNSV9ISVNSKTsKLQotCi0JdGVtcCA9IEhETUlfUkVBRChI RE1JX0hJMkNIQ1IpOwotCUhETUlfV1JJVEUoSERNSV9ISTJDSENSLCB0ZW1wICYgfkhJMkNfRU5B QkxFX1RSQU5TQUNUSU9OKTsKLQlIRE1JX1JFQUQoSERNSV9ISTJDSENSKTsKLQotCWkyY19kZXYt PnN0YXR1cyA9IEkyQ19UUkFOU0FDVElPTl9ET05FOwotCXJldHVybjsKLX0KLQotc3RhdGljIGly cXJldHVybl90IG9ha3RyYWlsX2hkbWlfaTJjX2hhbmRsZXIoaW50IHRoaXNfaXJxLCB2b2lkICpk ZXYpCi17Ci0Jc3RydWN0IG9ha3RyYWlsX2hkbWlfZGV2ICpoZG1pX2RldiA9IGRldjsKLQlzdHJ1 Y3QgaGRtaV9pMmNfZGV2ICppMmNfZGV2ID0gaGRtaV9kZXYtPmkyY19kZXY7Ci0JdTMyIHN0YXQ7 Ci0KLQlzdGF0ID0gSERNSV9SRUFEKEhETUlfSElTUik7Ci0KLQlpZiAoc3RhdCAmIEhETUlfSU5U Ul9IUEQpIHsKLQkJSERNSV9XUklURShIRE1JX0hJU1IsIHN0YXQgfCBIRE1JX0lOVFJfSFBEKTsK LQkJSERNSV9SRUFEKEhETUlfSElTUik7Ci0JfQotCi0JaWYgKHN0YXQgJiBIRE1JX0lOVFJfSTJD X0ZVTEwpCi0JCWhkbWlfaTJjX3JlYWQoaGRtaV9kZXYpOwotCi0JaWYgKHN0YXQgJiBIRE1JX0lO VFJfSTJDX0RPTkUpCi0JCWhkbWlfaTJjX3RyYW5zYWN0aW9uX2RvbmUoaGRtaV9kZXYpOwotCi0J Y29tcGxldGUoJmkyY19kZXYtPmNvbXBsZXRlKTsKLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0K LQotLyoKLSAqIGNob29zZSBhbHRlcm5hdGUgZnVuY3Rpb24gMiBvZiBHUElPIHBpbiA1MiwgNTMs Ci0gKiB3aGljaCBpcyB1c2VkIGJ5IEhETUkgSTJDIGxvZ2ljCi0gKi8KLXN0YXRpYyB2b2lkIG9h a3RyYWlsX2hkbWlfaTJjX2dwaW9fZml4KHZvaWQpCi17Ci0Jdm9pZCBfX2lvbWVtICpiYXNlOwot CXVuc2lnbmVkIGludCBncGlvX2Jhc2UgPSAweGZmMTJjMDAwOwotCWludCBncGlvX2xlbiA9IDB4 MTAwMDsKLQl1MzIgdGVtcDsKLQotCWJhc2UgPSBpb3JlbWFwKChyZXNvdXJjZV9zaXplX3QpZ3Bp b19iYXNlLCBncGlvX2xlbik7Ci0JaWYgKGJhc2UgPT0gTlVMTCkgewotCQlEUk1fRVJST1IoImdw aW8gaW9yZW1hcCBmYWlsXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCXRlbXAgPSByZWFkbChiYXNl ICsgMHg0NCk7Ci0JRFJNX0RFQlVHX0RSSVZFUigib2xkIGdwaW8gdmFsICV4XG4iLCB0ZW1wKTsK LQl3cml0ZWwoKHRlbXAgfCAweDAwMDAwYTAwKSwgKGJhc2UgKyAgMHg0NCkpOwotCXRlbXAgPSBy ZWFkbChiYXNlICsgMHg0NCk7Ci0JRFJNX0RFQlVHX0RSSVZFUigibmV3IGdwaW8gdmFsICV4XG4i LCB0ZW1wKTsKLQotCWlvdW5tYXAoYmFzZSk7Ci19Ci0KLWludCBvYWt0cmFpbF9oZG1pX2kyY19p bml0KHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17Ci0Jc3RydWN0IG9ha3RyYWlsX2hkbWlfZGV2ICpo ZG1pX2RldjsKLQlzdHJ1Y3QgaGRtaV9pMmNfZGV2ICppMmNfZGV2OwotCWludCByZXQ7Ci0KLQlo ZG1pX2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOwotCi0JaTJjX2RldiA9IGt6YWxsb2Moc2l6 ZW9mKHN0cnVjdCBoZG1pX2kyY19kZXYpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWkyY19kZXYpCi0J CXJldHVybiAtRU5PTUVNOwotCi0JaTJjX2Rldi0+YWRhcCA9ICZvYWt0cmFpbF9oZG1pX2kyY19h ZGFwdGVyOwotCWkyY19kZXYtPnN0YXR1cyA9IEkyQ19TVEFUX0lOSVQ7Ci0JaW5pdF9jb21wbGV0 aW9uKCZpMmNfZGV2LT5jb21wbGV0ZSk7Ci0JbXV0ZXhfaW5pdCgmaTJjX2Rldi0+aTJjX2xvY2sp OwotCWkyY19zZXRfYWRhcGRhdGEoJm9ha3RyYWlsX2hkbWlfaTJjX2FkYXB0ZXIsIGhkbWlfZGV2 KTsKLQloZG1pX2Rldi0+aTJjX2RldiA9IGkyY19kZXY7Ci0KLQkvKiBFbmFibGUgSERNSSBJMkMg ZnVuY3Rpb24gb24gZ3BpbyAqLwotCW9ha3RyYWlsX2hkbWlfaTJjX2dwaW9fZml4KCk7Ci0KLQkv KiByZXF1ZXN0IGlycSAqLwotCXJldCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBvYWt0cmFpbF9o ZG1pX2kyY19oYW5kbGVyLCBJUlFGX1NIQVJFRCwKLQkJCSAgb2FrdHJhaWxfaGRtaV9pMmNfYWRh cHRlci5uYW1lLCBoZG1pX2Rldik7Ci0JaWYgKHJldCkgewotCQlEUk1fRVJST1IoIkZhaWxlZCB0 byByZXF1ZXN0IElSUSBmb3IgSTJDIGNvbnRyb2xsZXJcbiIpOwotCQlnb3RvIGZyZWVfZGV2Owot CX0KLQotCS8qIEFkYXB0ZXIgcmVnaXN0cmF0aW9uICovCi0JcmV0ID0gaTJjX2FkZF9udW1iZXJl ZF9hZGFwdGVyKCZvYWt0cmFpbF9oZG1pX2kyY19hZGFwdGVyKTsKLQlpZiAocmV0KSB7Ci0JCURS TV9FUlJPUigiRmFpbGVkIHRvIGFkZCBJMkMgYWRhcHRlclxuIik7Ci0JCWdvdG8gZnJlZV9pcnE7 Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLWZyZWVfaXJxOgotCWZyZWVfaXJxKGRldi0+aXJxLCBoZG1p X2Rldik7Ci1mcmVlX2RldjoKLQlrZnJlZShpMmNfZGV2KTsKLQotCXJldHVybiByZXQ7Ci19Ci0K LXZvaWQgb2FrdHJhaWxfaGRtaV9pMmNfZXhpdChzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCXN0 cnVjdCBvYWt0cmFpbF9oZG1pX2RldiAqaGRtaV9kZXY7Ci0Jc3RydWN0IGhkbWlfaTJjX2RldiAq aTJjX2RldjsKLQotCWhkbWlfZGV2ID0gcGNpX2dldF9kcnZkYXRhKGRldik7Ci0JaTJjX2RlbF9h ZGFwdGVyKCZvYWt0cmFpbF9oZG1pX2kyY19hZGFwdGVyKTsKLQotCWkyY19kZXYgPSBoZG1pX2Rl di0+aTJjX2RldjsKLQlrZnJlZShpMmNfZGV2KTsKLQlmcmVlX2lycShkZXYtPmlycSwgaGRtaV9k ZXYpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9vYWt0cmFpbF9sdmRz LmMgYi9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL29ha3RyYWlsX2x2ZHMuYwpkZWxldGVkIGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggNDMyYmRjYzU3YWM5Li4wMDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2dtYTUwMC9vYWt0cmFpbF9sdmRzLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MjMg KzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQotLyoKLSAq IENvcHlyaWdodCDCqSAyMDA2LTIwMDkgSW50ZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBBdXRob3Jz OgotICoJRXJpYyBBbmhvbHQgPGVyaWNAYW5ob2x0Lm5ldD4KLSAqCURhdmUgQWlybGllIDxhaXJs aWVkQGxpbnV4LmllPgotICoJSmVzc2UgQmFybmVzIDxqZXNzZS5iYXJuZXNAaW50ZWwuY29tPgot ICovCi0KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1l Lmg+Ci0KLSNpbmNsdWRlIDxhc20vaW50ZWwtbWlkLmg+Ci0KLSNpbmNsdWRlIDxkcm0vZHJtX3Np bXBsZV9rbXNfaGVscGVyLmg+Ci0KLSNpbmNsdWRlICJpbnRlbF9iaW9zLmgiCi0jaW5jbHVkZSAi cG93ZXIuaCIKLSNpbmNsdWRlICJwc2JfZHJ2LmgiCi0jaW5jbHVkZSAicHNiX2ludGVsX2Rydi5o IgotI2luY2x1ZGUgInBzYl9pbnRlbF9yZWcuaCIKLQotLyogVGhlIG1heC9taW4gUFdNIGZyZXF1 ZW5jeSBpbiBCUENSWzMxOjE3XSAtICovCi0vKiBUaGUgc21hbGxlc3QgbnVtYmVyIGlzIDEgKG5v dCAwKSB0aGF0IGNhbiBmaXQgaW4gdGhlCi0gKiAxNS1iaXQgZmllbGQgb2YgdGhlIGFuZCB0aGVu Ki8KLS8qIHNoaWZ0cyB0byB0aGUgbGVmdCBieSBvbmUgYml0IHRvIGdldCB0aGUgYWN0dWFsIDE2 LWJpdAotICogdmFsdWUgdGhhdCB0aGUgMTUtYml0cyBjb3JyZXNwb25kIHRvLiovCi0jZGVmaW5l IE1SU1RfQkxDX01BWF9QV01fUkVHX0ZSRVEJICAgIDB4RkZGRgotI2RlZmluZSBCUklHSFRORVNT X01BWF9MRVZFTCAxMDAKLQotLyoKLSAqIFNldHMgdGhlIHBvd2VyIHN0YXRlIGZvciB0aGUgcGFu ZWwuCi0gKi8KLXN0YXRpYyB2b2lkIG9ha3RyYWlsX2x2ZHNfc2V0X3Bvd2VyKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0IGdtYV9lbmNvZGVyICpnbWFfZW5jb2RlciwKLQkJCQli b29sIG9uKQotewotCXUzMiBwcF9zdGF0dXM7Ci0Jc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2 X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCi0JaWYgKCFnbWFfcG93ZXJfYmVnaW4oZGV2LCB0 cnVlKSkKLQkJcmV0dXJuOwotCi0JaWYgKG9uKSB7Ci0JCVJFR19XUklURShQUF9DT05UUk9MLCBS RUdfUkVBRChQUF9DT05UUk9MKSB8Ci0JCQkgIFBPV0VSX1RBUkdFVF9PTik7Ci0JCWRvIHsKLQkJ CXBwX3N0YXR1cyA9IFJFR19SRUFEKFBQX1NUQVRVUyk7Ci0JCX0gd2hpbGUgKChwcF9zdGF0dXMg JiAoUFBfT04gfCBQUF9SRUFEWSkpID09IFBQX1JFQURZKTsKLQkJZGV2X3ByaXYtPmlzX2x2ZHNf b24gPSB0cnVlOwotCQlpZiAoZGV2X3ByaXYtPm9wcy0+bHZkc19ibF9wb3dlcikKLQkJCWRldl9w cml2LT5vcHMtPmx2ZHNfYmxfcG93ZXIoZGV2LCB0cnVlKTsKLQl9IGVsc2UgewotCQlpZiAoZGV2 X3ByaXYtPm9wcy0+bHZkc19ibF9wb3dlcikKLQkJCWRldl9wcml2LT5vcHMtPmx2ZHNfYmxfcG93 ZXIoZGV2LCBmYWxzZSk7Ci0JCVJFR19XUklURShQUF9DT05UUk9MLCBSRUdfUkVBRChQUF9DT05U Uk9MKSAmCi0JCQkgIH5QT1dFUl9UQVJHRVRfT04pOwotCQlkbyB7Ci0JCQlwcF9zdGF0dXMgPSBS RUdfUkVBRChQUF9TVEFUVVMpOwotCQl9IHdoaWxlIChwcF9zdGF0dXMgJiBQUF9PTik7Ci0JCWRl dl9wcml2LT5pc19sdmRzX29uID0gZmFsc2U7Ci0JCXBtX3JlcXVlc3RfaWRsZShkZXYtPmRldik7 Ci0JfQotCWdtYV9wb3dlcl9lbmQoZGV2KTsKLX0KLQotc3RhdGljIHZvaWQgb2FrdHJhaWxfbHZk c19kcG1zKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwgaW50IG1vZGUpCi17Ci0Jc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKLQlzdHJ1Y3QgZ21hX2VuY29kZXIgKmdt YV9lbmNvZGVyID0gdG9fZ21hX2VuY29kZXIoZW5jb2Rlcik7Ci0KLQlpZiAobW9kZSA9PSBEUk1f TU9ERV9EUE1TX09OKQotCQlvYWt0cmFpbF9sdmRzX3NldF9wb3dlcihkZXYsIGdtYV9lbmNvZGVy LCB0cnVlKTsKLQllbHNlCi0JCW9ha3RyYWlsX2x2ZHNfc2V0X3Bvd2VyKGRldiwgZ21hX2VuY29k ZXIsIGZhbHNlKTsKLQotCS8qIFhYWDogV2UgbmV2ZXIgcG93ZXIgZG93biB0aGUgTFZEUyBwYWly cy4gKi8KLX0KLQotc3RhdGljIHZvaWQgb2FrdHJhaWxfbHZkc19tb2RlX3NldChzdHJ1Y3QgZHJt X2VuY29kZXIgKmVuY29kZXIsCi0JCQkgICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1v ZGUsCi0JCQkgICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCi17 Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKLQlzdHJ1Y3QgZHJtX3Bz Yl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IHBzYl9pbnRl bF9tb2RlX2RldmljZSAqbW9kZV9kZXYgPSAmZGV2X3ByaXYtPm1vZGVfZGV2OwotCXN0cnVjdCBk cm1fbW9kZV9jb25maWcgKm1vZGVfY29uZmlnID0gJmRldi0+bW9kZV9jb25maWc7Ci0Jc3RydWN0 IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9IE5VTEw7Ci0Jc3RydWN0IGRybV9jcnRjICpjcnRj ID0gZW5jb2Rlci0+Y3J0YzsKLQl1MzIgbHZkc19wb3J0OwotCXVpbnQ2NF90IHYgPSBEUk1fTU9E RV9TQ0FMRV9GVUxMU0NSRUVOOwotCi0JaWYgKCFnbWFfcG93ZXJfYmVnaW4oZGV2LCB0cnVlKSkK LQkJcmV0dXJuOwotCi0JLyoKLQkgKiBUaGUgTFZEUyBwaW4gcGFpciB3aWxsIGFscmVhZHkgaGF2 ZSBiZWVuIHR1cm5lZCBvbiBpbiB0aGUKLQkgKiBwc2JfaW50ZWxfY3J0Y19tb2RlX3NldCBzaW5j ZSBpdCBoYXMgYSBsYXJnZSBpbXBhY3Qgb24gdGhlIERQTEwKLQkgKiBzZXR0aW5ncy4KLQkgKi8K LQlsdmRzX3BvcnQgPSAoUkVHX1JFQUQoTFZEUykgJgotCQkgICAgKH5MVkRTX1BJUEVCX1NFTEVD VCkpIHwKLQkJICAgIExWRFNfUE9SVF9FTiB8Ci0JCSAgICBMVkRTX0JPUkRFUl9FTjsKLQotCS8q IElmIHRoZSBmaXJtd2FyZSBzYXlzIGRpdGhlciBvbiBNb29yZXN0b3duLCBvciB0aGUgQklPUyBk b2VzCi0JICAgb24gT2FrdHJhaWwgdGhlbiBlbmFibGUgZGl0aGVyaW5nICovCi0JaWYgKG1vZGVf ZGV2LT5wYW5lbF93YW50c19kaXRoZXIgfHwgZGV2X3ByaXYtPmx2ZHNfZGl0aGVyKQotCQlsdmRz X3BvcnQgfD0gTVJTVF9QQU5FTF84VE82X0RJVEhFUl9FTkFCTEU7Ci0KLQlSRUdfV1JJVEUoTFZE UywgbHZkc19wb3J0KTsKLQotCS8qIEZpbmQgdGhlIGNvbm5lY3RvciB3ZSdyZSB0cnlpbmcgdG8g c2V0IHVwICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZtb2RlX2NvbmZpZy0+ Y29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKLQkJaWYgKCFjb25uZWN0b3ItPmVuY29kZXIgfHwgY29u bmVjdG9yLT5lbmNvZGVyLT5jcnRjICE9IGNydGMpCi0JCQljb250aW51ZTsKLQl9Ci0KLQlpZiAo IWNvbm5lY3RvcikgewotCQlEUk1fRVJST1IoIkNvdWxkbid0IGZpbmQgY29ubmVjdG9yIHdoZW4g c2V0dGluZyBtb2RlIik7Ci0JCWdtYV9wb3dlcl9lbmQoZGV2KTsKLQkJcmV0dXJuOwotCX0KLQot CWRybV9vYmplY3RfcHJvcGVydHlfZ2V0X3ZhbHVlKAotCQkmY29ubmVjdG9yLT5iYXNlLAotCQlk ZXYtPm1vZGVfY29uZmlnLnNjYWxpbmdfbW9kZV9wcm9wZXJ0eSwKLQkJJnYpOwotCi0JaWYgKHYg PT0gRFJNX01PREVfU0NBTEVfTk9fU0NBTEUpCi0JCVJFR19XUklURShQRklUX0NPTlRST0wsIDAp OwotCWVsc2UgaWYgKHYgPT0gRFJNX01PREVfU0NBTEVfQVNQRUNUKSB7Ci0JCWlmICgobW9kZS0+ dmRpc3BsYXkgIT0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSkgfHwKLQkJICAgIChtb2Rl LT5oZGlzcGxheSAhPSBhZGp1c3RlZF9tb2RlLT5jcnRjX2hkaXNwbGF5KSkgewotCQkJaWYgKChh ZGp1c3RlZF9tb2RlLT5jcnRjX2hkaXNwbGF5ICogbW9kZS0+dmRpc3BsYXkpID09Ci0JCQkgICAg KG1vZGUtPmhkaXNwbGF5ICogYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSkpCi0JCQkJUkVH X1dSSVRFKFBGSVRfQ09OVFJPTCwgUEZJVF9FTkFCTEUpOwotCQkJZWxzZSBpZiAoKGFkanVzdGVk X21vZGUtPmNydGNfaGRpc3BsYXkgKgotCQkJCW1vZGUtPnZkaXNwbGF5KSA+IChtb2RlLT5oZGlz cGxheSAqCi0JCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSkpCi0JCQkJUkVHX1dSSVRF KFBGSVRfQ09OVFJPTCwgUEZJVF9FTkFCTEUgfAotCQkJCQkgIFBGSVRfU0NBTElOR19NT0RFX1BJ TExBUkJPWCk7Ci0JCQllbHNlCi0JCQkJUkVHX1dSSVRFKFBGSVRfQ09OVFJPTCwgUEZJVF9FTkFC TEUgfAotCQkJCQkgIFBGSVRfU0NBTElOR19NT0RFX0xFVFRFUkJPWCk7Ci0JCX0gZWxzZQotCQkJ UkVHX1dSSVRFKFBGSVRfQ09OVFJPTCwgUEZJVF9FTkFCTEUpOwotCX0gZWxzZSAvKih2ID09IERS TV9NT0RFX1NDQUxFX0ZVTExTQ1JFRU4pKi8KLQkJUkVHX1dSSVRFKFBGSVRfQ09OVFJPTCwgUEZJ VF9FTkFCTEUpOwotCi0JZ21hX3Bvd2VyX2VuZChkZXYpOwotfQotCi1zdGF0aWMgdm9pZCBvYWt0 cmFpbF9sdmRzX3ByZXBhcmUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQotewotCXN0cnVj dCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7Ci0Jc3RydWN0IGRybV9wc2JfcHJpdmF0 ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBnbWFfZW5jb2RlciAqZ21h X2VuY29kZXIgPSB0b19nbWFfZW5jb2RlcihlbmNvZGVyKTsKLQlzdHJ1Y3QgcHNiX2ludGVsX21v ZGVfZGV2aWNlICptb2RlX2RldiA9ICZkZXZfcHJpdi0+bW9kZV9kZXY7Ci0KLQlpZiAoIWdtYV9w b3dlcl9iZWdpbihkZXYsIHRydWUpKQotCQlyZXR1cm47Ci0KLQltb2RlX2Rldi0+c2F2ZUJMQ19Q V01fQ1RMID0gUkVHX1JFQUQoQkxDX1BXTV9DVEwpOwotCW1vZGVfZGV2LT5iYWNrbGlnaHRfZHV0 eV9jeWNsZSA9IChtb2RlX2Rldi0+c2F2ZUJMQ19QV01fQ1RMICYKLQkJCQkJICBCQUNLTElHSFRf RFVUWV9DWUNMRV9NQVNLKTsKLQlvYWt0cmFpbF9sdmRzX3NldF9wb3dlcihkZXYsIGdtYV9lbmNv ZGVyLCBmYWxzZSk7Ci0JZ21hX3Bvd2VyX2VuZChkZXYpOwotfQotCi1zdGF0aWMgdTMyIG9ha3Ry YWlsX2x2ZHNfZ2V0X21heF9iYWNrbGlnaHQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQlz dHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JdTMy IHJldDsKLQotCWlmIChnbWFfcG93ZXJfYmVnaW4oZGV2LCBmYWxzZSkpIHsKLQkJcmV0ID0gKChS RUdfUkVBRChCTENfUFdNX0NUTCkgJgotCQkJICBCQUNLTElHSFRfTU9EVUxBVElPTl9GUkVRX01B U0spID4+Ci0JCQkgIEJBQ0tMSUdIVF9NT0RVTEFUSU9OX0ZSRVFfU0hJRlQpICogMjsKLQotCQln bWFfcG93ZXJfZW5kKGRldik7Ci0JfSBlbHNlCi0JCXJldCA9ICgoZGV2X3ByaXYtPnJlZ3Muc2F2 ZUJMQ19QV01fQ1RMICYKLQkJCSAgQkFDS0xJR0hUX01PRFVMQVRJT05fRlJFUV9NQVNLKSA+Pgot CQkJICBCQUNLTElHSFRfTU9EVUxBVElPTl9GUkVRX1NISUZUKSAqIDI7Ci0KLQlyZXR1cm4gcmV0 OwotfQotCi1zdGF0aWMgdm9pZCBvYWt0cmFpbF9sdmRzX2NvbW1pdChzdHJ1Y3QgZHJtX2VuY29k ZXIgKmVuY29kZXIpCi17Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsK LQlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0J c3RydWN0IGdtYV9lbmNvZGVyICpnbWFfZW5jb2RlciA9IHRvX2dtYV9lbmNvZGVyKGVuY29kZXIp OwotCXN0cnVjdCBwc2JfaW50ZWxfbW9kZV9kZXZpY2UgKm1vZGVfZGV2ID0gJmRldl9wcml2LT5t b2RlX2RldjsKLQotCWlmIChtb2RlX2Rldi0+YmFja2xpZ2h0X2R1dHlfY3ljbGUgPT0gMCkKLQkJ bW9kZV9kZXYtPmJhY2tsaWdodF9kdXR5X2N5Y2xlID0KLQkJCQkJb2FrdHJhaWxfbHZkc19nZXRf bWF4X2JhY2tsaWdodChkZXYpOwotCW9ha3RyYWlsX2x2ZHNfc2V0X3Bvd2VyKGRldiwgZ21hX2Vu Y29kZXIsIHRydWUpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2hlbHBl cl9mdW5jcyBvYWt0cmFpbF9sdmRzX2hlbHBlcl9mdW5jcyA9IHsKLQkuZHBtcyA9IG9ha3RyYWls X2x2ZHNfZHBtcywKLQkubW9kZV9maXh1cCA9IHBzYl9pbnRlbF9sdmRzX21vZGVfZml4dXAsCi0J LnByZXBhcmUgPSBvYWt0cmFpbF9sdmRzX3ByZXBhcmUsCi0JLm1vZGVfc2V0ID0gb2FrdHJhaWxf bHZkc19tb2RlX3NldCwKLQkuY29tbWl0ID0gb2FrdHJhaWxfbHZkc19jb21taXQsCi19OwotCi0v KiBSZXR1cm5zIHRoZSBwYW5lbCBmaXhlZCBtb2RlIGZyb20gY29uZmlndXJhdGlvbi4gKi8KLQot c3RhdGljIHZvaWQgb2FrdHJhaWxfbHZkc19nZXRfY29uZmlndXJhdGlvbl9tb2RlKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsCi0JCQkJCXN0cnVjdCBwc2JfaW50ZWxfbW9kZV9kZXZpY2UgKm1vZGVf ZGV2KQotewotCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0gTlVMTDsKLQlzdHJ1Y3Qg ZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG9h a3RyYWlsX3RpbWluZ19pbmZvICp0aSA9ICZkZXZfcHJpdi0+Z2N0X2RhdGEuRFREOwotCi0JbW9k ZV9kZXYtPnBhbmVsX2ZpeGVkX21vZGUgPSBOVUxMOwotCi0JLyogVXNlIHRoZSBmaXJtd2FyZSBw cm92aWRlZCBkYXRhIG9uIE1vb3Jlc3Rvd24gKi8KLQlpZiAoZGV2X3ByaXYtPmhhc19nY3QpIHsK LQkJbW9kZSA9IGt6YWxsb2Moc2l6ZW9mKCptb2RlKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghbW9k ZSkKLQkJCXJldHVybjsKLQotCQltb2RlLT5oZGlzcGxheSA9ICh0aS0+aGFjdGl2ZV9oaSA8PCA4 KSB8IHRpLT5oYWN0aXZlX2xvOwotCQltb2RlLT52ZGlzcGxheSA9ICh0aS0+dmFjdGl2ZV9oaSA8 PCA4KSB8IHRpLT52YWN0aXZlX2xvOwotCQltb2RlLT5oc3luY19zdGFydCA9IG1vZGUtPmhkaXNw bGF5ICsgXAotCQkJCSgodGktPmhzeW5jX29mZnNldF9oaSA8PCA4KSB8IFwKLQkJCQl0aS0+aHN5 bmNfb2Zmc2V0X2xvKTsKLQkJbW9kZS0+aHN5bmNfZW5kID0gbW9kZS0+aHN5bmNfc3RhcnQgKyBc Ci0JCQkJKCh0aS0+aHN5bmNfcHVsc2Vfd2lkdGhfaGkgPDwgOCkgfCBcCi0JCQkJdGktPmhzeW5j X3B1bHNlX3dpZHRoX2xvKTsKLQkJbW9kZS0+aHRvdGFsID0gbW9kZS0+aGRpc3BsYXkgKyAoKHRp LT5oYmxhbmtfaGkgPDwgOCkgfCBcCi0JCQkJCQkJdGktPmhibGFua19sbyk7Ci0JCW1vZGUtPnZz eW5jX3N0YXJ0ID0gXAotCQkJbW9kZS0+dmRpc3BsYXkgKyAoKHRpLT52c3luY19vZmZzZXRfaGkg PDwgNCkgfCBcCi0JCQkJCQl0aS0+dnN5bmNfb2Zmc2V0X2xvKTsKLQkJbW9kZS0+dnN5bmNfZW5k ID0gXAotCQkJbW9kZS0+dnN5bmNfc3RhcnQgKyAoKHRpLT52c3luY19wdWxzZV93aWR0aF9oaSA8 PCA0KSB8IFwKLQkJCQkJCXRpLT52c3luY19wdWxzZV93aWR0aF9sbyk7Ci0JCW1vZGUtPnZ0b3Rh bCA9IG1vZGUtPnZkaXNwbGF5ICsgXAotCQkJCSgodGktPnZibGFua19oaSA8PCA4KSB8IHRpLT52 YmxhbmtfbG8pOwotCQltb2RlLT5jbG9jayA9IHRpLT5waXhlbF9jbG9jayAqIDEwOwotI2lmIDAK LQkJcHJfaW5mbygiaGRpc3BsYXkgaXMgJWRcbiIsIG1vZGUtPmhkaXNwbGF5KTsKLQkJcHJfaW5m bygidmRpc3BsYXkgaXMgJWRcbiIsIG1vZGUtPnZkaXNwbGF5KTsKLQkJcHJfaW5mbygiSFNTIGlz ICVkXG4iLCBtb2RlLT5oc3luY19zdGFydCk7Ci0JCXByX2luZm8oIkhTRSBpcyAlZFxuIiwgbW9k ZS0+aHN5bmNfZW5kKTsKLQkJcHJfaW5mbygiaHRvdGFsIGlzICVkXG4iLCBtb2RlLT5odG90YWwp OwotCQlwcl9pbmZvKCJWU1MgaXMgJWRcbiIsIG1vZGUtPnZzeW5jX3N0YXJ0KTsKLQkJcHJfaW5m bygiVlNFIGlzICVkXG4iLCBtb2RlLT52c3luY19lbmQpOwotCQlwcl9pbmZvKCJ2dG90YWwgaXMg JWRcbiIsIG1vZGUtPnZ0b3RhbCk7Ci0JCXByX2luZm8oImNsb2NrIGlzICVkXG4iLCBtb2RlLT5j bG9jayk7Ci0jZW5kaWYKLQkJbW9kZV9kZXYtPnBhbmVsX2ZpeGVkX21vZGUgPSBtb2RlOwotCX0K LQotCS8qIFVzZSB0aGUgQklPUyBWQlQgbW9kZSBpZiBhdmFpbGFibGUgKi8KLQlpZiAobW9kZV9k ZXYtPnBhbmVsX2ZpeGVkX21vZGUgPT0gTlVMTCAmJiBtb2RlX2Rldi0+dmJ0X21vZGUpCi0JCW1v ZGVfZGV2LT5wYW5lbF9maXhlZF9tb2RlID0gZHJtX21vZGVfZHVwbGljYXRlKGRldiwKLQkJCQkJ CW1vZGVfZGV2LT52YnRfbW9kZSk7Ci0KLQkvKiBUaGVuIHRyeSB0aGUgTFZEUyBWQlQgbW9kZSAq LwotCWlmIChtb2RlX2Rldi0+cGFuZWxfZml4ZWRfbW9kZSA9PSBOVUxMKQotCQlpZiAoZGV2X3By aXYtPmxmcF9sdmRzX3ZidF9tb2RlKQotCQkJbW9kZV9kZXYtPnBhbmVsX2ZpeGVkX21vZGUgPQot CQkJCWRybV9tb2RlX2R1cGxpY2F0ZShkZXYsCi0JCQkJCWRldl9wcml2LT5sZnBfbHZkc192YnRf bW9kZSk7Ci0KLQkvKiBJZiB3ZSBzdGlsbCBnb3Qgbm8gbW9kZSB0aGVuIGJhaWwgKi8KLQlpZiAo bW9kZV9kZXYtPnBhbmVsX2ZpeGVkX21vZGUgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JZHJtX21v ZGVfc2V0X25hbWUobW9kZV9kZXYtPnBhbmVsX2ZpeGVkX21vZGUpOwotCWRybV9tb2RlX3NldF9j cnRjaW5mbyhtb2RlX2Rldi0+cGFuZWxfZml4ZWRfbW9kZSwgMCk7Ci19Ci0KLS8qKgotICogb2Fr dHJhaWxfbHZkc19pbml0IC0gc2V0dXAgTFZEUyBjb25uZWN0b3JzIG9uIHRoaXMgZGV2aWNlCi0g KiBAZGV2OiBkcm0gZGV2aWNlCi0gKiBAbW9kZV9kZXY6IFBTQiBtb2RlIGRldmljZQotICoKLSAq IENyZWF0ZSB0aGUgY29ubmVjdG9yLCByZWdpc3RlciB0aGUgTFZEUyBEREMgYnVzLCBhbmQgdHJ5 IHRvIGZpZ3VyZSBvdXQgd2hhdAotICogbW9kZXMgd2UgY2FuIGRpc3BsYXkgb24gdGhlIExWRFMg cGFuZWwgKGlmIHByZXNlbnQpLgotICovCi12b2lkIG9ha3RyYWlsX2x2ZHNfaW5pdChzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LAotCQkgICAgc3RydWN0IHBzYl9pbnRlbF9tb2RlX2RldmljZSAqbW9k ZV9kZXYpCi17Ci0Jc3RydWN0IGdtYV9lbmNvZGVyICpnbWFfZW5jb2RlcjsKLQlzdHJ1Y3QgZ21h X2Nvbm5lY3RvciAqZ21hX2Nvbm5lY3RvcjsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yOwotCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKLQlzdHJ1Y3QgZHJtX3BzYl9wcml2 YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGVkaWQgKmVkaWQ7Ci0J c3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcDsKLQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq c2NhbjsJLyogKm1vZGVzLCAqYmlvc19tb2RlOyAqLwotCi0JZ21hX2VuY29kZXIgPSBremFsbG9j KHNpemVvZihzdHJ1Y3QgZ21hX2VuY29kZXIpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWdtYV9lbmNv ZGVyKQotCQlyZXR1cm47Ci0KLQlnbWFfY29ubmVjdG9yID0ga3phbGxvYyhzaXplb2Yoc3RydWN0 IGdtYV9jb25uZWN0b3IpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWdtYV9jb25uZWN0b3IpCi0JCWdv dG8gZmFpbGVkX2Nvbm5lY3RvcjsKLQotCWNvbm5lY3RvciA9ICZnbWFfY29ubmVjdG9yLT5iYXNl OwotCWVuY29kZXIgPSAmZ21hX2VuY29kZXItPmJhc2U7Ci0JZGV2X3ByaXYtPmlzX2x2ZHNfb24g PSB0cnVlOwotCWRybV9jb25uZWN0b3JfaW5pdChkZXYsIGNvbm5lY3RvciwKLQkJCSAgICZwc2Jf aW50ZWxfbHZkc19jb25uZWN0b3JfZnVuY3MsCi0JCQkgICBEUk1fTU9ERV9DT05ORUNUT1JfTFZE Uyk7Ci0KLQlkcm1fc2ltcGxlX2VuY29kZXJfaW5pdChkZXYsIGVuY29kZXIsIERSTV9NT0RFX0VO Q09ERVJfTFZEUyk7Ci0KLQlnbWFfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKGdtYV9jb25uZWN0 b3IsIGdtYV9lbmNvZGVyKTsKLQlnbWFfZW5jb2Rlci0+dHlwZSA9IElOVEVMX09VVFBVVF9MVkRT OwotCi0JZHJtX2VuY29kZXJfaGVscGVyX2FkZChlbmNvZGVyLCAmb2FrdHJhaWxfbHZkc19oZWxw ZXJfZnVuY3MpOwotCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZChjb25uZWN0b3IsCi0JCQkJICZw c2JfaW50ZWxfbHZkc19jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKLQljb25uZWN0b3ItPmRpc3Bs YXlfaW5mby5zdWJwaXhlbF9vcmRlciA9IFN1YlBpeGVsSG9yaXpvbnRhbFJHQjsKLQljb25uZWN0 b3ItPmludGVybGFjZV9hbGxvd2VkID0gZmFsc2U7Ci0JY29ubmVjdG9yLT5kb3VibGVzY2FuX2Fs bG93ZWQgPSBmYWxzZTsKLQotCWRybV9vYmplY3RfYXR0YWNoX3Byb3BlcnR5KCZjb25uZWN0b3It PmJhc2UsCi0JCQkJCWRldi0+bW9kZV9jb25maWcuc2NhbGluZ19tb2RlX3Byb3BlcnR5LAotCQkJ CQlEUk1fTU9ERV9TQ0FMRV9GVUxMU0NSRUVOKTsKLQlkcm1fb2JqZWN0X2F0dGFjaF9wcm9wZXJ0 eSgmY29ubmVjdG9yLT5iYXNlLAotCQkJCQlkZXZfcHJpdi0+YmFja2xpZ2h0X3Byb3BlcnR5LAot CQkJCQlCUklHSFRORVNTX01BWF9MRVZFTCk7Ci0KLQltb2RlX2Rldi0+cGFuZWxfd2FudHNfZGl0 aGVyID0gZmFsc2U7Ci0JaWYgKGRldl9wcml2LT5oYXNfZ2N0KQotCQltb2RlX2Rldi0+cGFuZWxf d2FudHNfZGl0aGVyID0gKGRldl9wcml2LT5nY3RfZGF0YS4KLQkJCVBhbmVsX1BvcnRfQ29udHJv bCAmIE1SU1RfUEFORUxfOFRPNl9ESVRIRVJfRU5BQkxFKTsKLSAgICAgICAgaWYgKGRldl9wcml2 LT5sdmRzX2RpdGhlcikKLSAgICAgICAgICAgICAgICBtb2RlX2Rldi0+cGFuZWxfd2FudHNfZGl0 aGVyID0gMTsKLQotCS8qCi0JICogTFZEUyBkaXNjb3Zlcnk6Ci0JICogMSkgY2hlY2sgZm9yIEVE SUQgb24gRERDCi0JICogMikgY2hlY2sgZm9yIFZCVCBkYXRhCi0JICogMykgY2hlY2sgdG8gc2Vl IGlmIExWRFMgaXMgYWxyZWFkeSBvbgotCSAqICAgIGlmIG5vbmUgb2YgdGhlIGFib3ZlLCBubyBw YW5lbAotCSAqIDQpIG1ha2Ugc3VyZSBsaWQgaXMgb3BlbgotCSAqICAgIGlmIGNsb3NlZCwgYWN0 IGxpa2UgaXQncyBub3QgdGhlcmUgZm9yIG5vdwotCSAqLwotCi0JZWRpZCA9IE5VTEw7Ci0JbXV0 ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7Ci0JaTJjX2FkYXAgPSBpMmNfZ2V0X2Fk YXB0ZXIoZGV2X3ByaXYtPm9wcy0+aTJjX2J1cyk7Ci0JaWYgKGkyY19hZGFwKQotCQllZGlkID0g ZHJtX2dldF9lZGlkKGNvbm5lY3RvciwgaTJjX2FkYXApOwotCWlmIChlZGlkID09IE5VTEwgJiYg ZGV2X3ByaXYtPmxwY19ncGlvX2Jhc2UpIHsKLQkJb2FrdHJhaWxfbHZkc19pMmNfaW5pdChlbmNv ZGVyKTsKLQkJaWYgKGdtYV9lbmNvZGVyLT5kZGNfYnVzICE9IE5VTEwpIHsKLQkJCWkyY19hZGFw ID0gJmdtYV9lbmNvZGVyLT5kZGNfYnVzLT5hZGFwdGVyOwotCQkJZWRpZCA9IGRybV9nZXRfZWRp ZChjb25uZWN0b3IsIGkyY19hZGFwKTsKLQkJfQotCX0KLQkvKgotCSAqIEF0dGVtcHQgdG8gZ2V0 IHRoZSBmaXhlZCBwYW5lbCBtb2RlIGZyb20gRERDLiAgQXNzdW1lIHRoYXQgdGhlCi0JICogcHJl ZmVycmVkIG1vZGUgaXMgdGhlIHJpZ2h0IG9uZS4KLQkgKi8KLQlpZiAoZWRpZCkgewotCQlkcm1f Y29ubmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KGNvbm5lY3RvciwgZWRpZCk7Ci0JCWRybV9h ZGRfZWRpZF9tb2Rlcyhjb25uZWN0b3IsIGVkaWQpOwotCQlrZnJlZShlZGlkKTsKLQotCQlsaXN0 X2Zvcl9lYWNoX2VudHJ5KHNjYW4sICZjb25uZWN0b3ItPnByb2JlZF9tb2RlcywgaGVhZCkgewot CQkJaWYgKHNjYW4tPnR5cGUgJiBEUk1fTU9ERV9UWVBFX1BSRUZFUlJFRCkgewotCQkJCW1vZGVf ZGV2LT5wYW5lbF9maXhlZF9tb2RlID0KLQkJCQkgICAgZHJtX21vZGVfZHVwbGljYXRlKGRldiwg c2Nhbik7Ci0JCQkJZ290byBvdXQ7CS8qIEZJWE1FOiBjaGVjayBmb3IgcXVpcmtzICovCi0JCQl9 Ci0JCX0KLQl9IGVsc2UKLQkJZGV2X2VycihkZXYtPmRldiwgIk5vIGRkYyBhZGFwdGVyIGF2YWls YWJsZSFcbiIpOwotCS8qCi0JICogSWYgd2UgZGlkbid0IGdldCBFRElELCB0cnkgZ2V0aW5nIHBh bmVsIHRpbWluZwotCSAqIGZyb20gY29uZmlndXJhdGlvbiBkYXRhCi0JICovCi0Jb2FrdHJhaWxf bHZkc19nZXRfY29uZmlndXJhdGlvbl9tb2RlKGRldiwgbW9kZV9kZXYpOwotCi0JaWYgKG1vZGVf ZGV2LT5wYW5lbF9maXhlZF9tb2RlKSB7Ci0JCW1vZGVfZGV2LT5wYW5lbF9maXhlZF9tb2RlLT50 eXBlIHw9IERSTV9NT0RFX1RZUEVfUFJFRkVSUkVEOwotCQlnb3RvIG91dDsJLyogRklYTUU6IGNo ZWNrIGZvciBxdWlya3MgKi8KLQl9Ci0KLQkvKiBJZiB3ZSBzdGlsbCBkb24ndCBoYXZlIGEgbW9k ZSBhZnRlciBhbGwgdGhhdCwgZ2l2ZSB1cC4gKi8KLQlpZiAoIW1vZGVfZGV2LT5wYW5lbF9maXhl ZF9tb2RlKSB7Ci0JCWRldl9lcnIoZGV2LT5kZXYsICJGb3VuZCBubyBtb2RlcyBvbiB0aGUgbHZk cywgaWdub3JpbmcgdGhlIExWRFNcbiIpOwotCQlnb3RvIGZhaWxlZF9maW5kOwotCX0KLQotb3V0 OgotCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7Ci0KLQlkcm1fY29ubmVj dG9yX3JlZ2lzdGVyKGNvbm5lY3Rvcik7Ci0JcmV0dXJuOwotCi1mYWlsZWRfZmluZDoKLQltdXRl eF91bmxvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwotCi0JZGV2X2RiZyhkZXYtPmRldiwg Ik5vIExWRFMgbW9kZXMgZm91bmQsIGRpc2FibGluZy5cbiIpOwotCWlmIChnbWFfZW5jb2Rlci0+ ZGRjX2J1cykgewotCQlwc2JfaW50ZWxfaTJjX2Rlc3Ryb3koZ21hX2VuY29kZXItPmRkY19idXMp OwotCQlnbWFfZW5jb2Rlci0+ZGRjX2J1cyA9IE5VTEw7Ci0JfQotCi0vKiBmYWlsZWRfZGRjOiAq LwotCi0JZHJtX2VuY29kZXJfY2xlYW51cChlbmNvZGVyKTsKLQlkcm1fY29ubmVjdG9yX2NsZWFu dXAoY29ubmVjdG9yKTsKLQlrZnJlZShnbWFfY29ubmVjdG9yKTsKLWZhaWxlZF9jb25uZWN0b3I6 Ci0Ja2ZyZWUoZ21hX2VuY29kZXIpOwotfQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v Z21hNTAwL29ha3RyYWlsX2x2ZHNfaTJjLmMgYi9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL29ha3Ry YWlsX2x2ZHNfaTJjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkMmRkNmVhMWM3 MS4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvb2FrdHJhaWxfbHZk c19pMmMuYworKysgL2Rldi9udWxsCkBAIC0xLDE2OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0 IChjKSAyMDAyLTIwMTAsIEludGVsIENvcnBvcmF0aW9uLgotICogQ29weXJpZ2h0IChjKSAyMDE0 IEFUUk9OIGVsZWN0cm9uaWMgR21iSAotICogICBBdXRob3I6IEphbiBTYWZyYXRhIDxqYW4ubmlr aXRlbmtvQGdtYWlsLmNvbT4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBm cmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Ci0gKiBvZiB0aGlz IHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdh cmUiKSwgdG8gZGVhbAotICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGlu Y2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwotICogdG8gdXNlLCBjb3B5LCBt b2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2Vs bAotICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdo b20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhl IGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwg Y29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBU SEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkg S0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBU TyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBU SEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xB SU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04g T0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0Yg T1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERF QUxJTkdTIElOCi0gKiBUSEUgU09GVFdBUkUuCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9k ZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy1hbGdvLWJpdC5oPgotI2luY2x1ZGUgPGxpbnV4 L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgot I2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2lu Y2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLSNpbmNsdWRl ICJwc2JfZHJ2LmgiCi0jaW5jbHVkZSAicHNiX2ludGVsX3JlZy5oIgotCi0KLS8qCi0gKiBMUEMg R1BJTyBiYXNlZCBJMkMgYnVzIGZvciBMVkRTIG9mIEF0b20gRTZ4eAotICovCi0KLS8qLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KLSAqIExQQyBSZWdpc3RlciBPZmZzZXRzLiBVc2VkIGZvciBMVkRTIEdQ SU8gQml0IEJhc2hpbmcuIFJlZ2lzdGVycyBhcmUgcGFydAotICogQXRvbSBFNnh4IFtEMzE6RjBd Ci0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jZGVmaW5lIFJHRU4gICAgMHgyMAotI2RlZmluZSBS R0lPICAgIDB4MjQKLSNkZWZpbmUgUkdMVkwgICAweDI4Ci0jZGVmaW5lIFJHVFBFICAgMHgyQwot I2RlZmluZSBSR1RORSAgIDB4MzAKLSNkZWZpbmUgUkdHUEUgICAweDM0Ci0jZGVmaW5lIFJHU01J ICAgMHgzOAotI2RlZmluZSBSR1RTICAgIDB4M0MKLQotLyogVGhlIExWRFMgR1BJTyBjbG9jayBs aW5lcyBhcmUgR1BJT1NVU1szXQotICogVGhlIExWRFMgR1BJTyBkYXRhIGxpbmVzIGFyZSBHUElP U1VTWzRdCi0gKi8KLSNkZWZpbmUgR1BJT19DTE9DSwkweDA4Ci0jZGVmaW5lIEdQSU9fREFUQQkw eDEwCi0KLSNkZWZpbmUgTFBDX1JFQURfUkVHKGNoYW4sIHIpIGlubCgoY2hhbiktPnJlZyArIChy KSkKLSNkZWZpbmUgTFBDX1dSSVRFX1JFRyhjaGFuLCByLCB2YWwpIG91dGwoKHZhbCksIChjaGFu KS0+cmVnICsgKHIpKQotCi1zdGF0aWMgaW50IGdldF9jbG9jayh2b2lkICpkYXRhKQotewotCXN0 cnVjdCBwc2JfaW50ZWxfaTJjX2NoYW4gKmNoYW4gPSBkYXRhOwotCXUzMiB2YWw7Ci0KLQl2YWwg PSBMUENfUkVBRF9SRUcoY2hhbiwgUkdJTyk7Ci0JdmFsIHw9IEdQSU9fQ0xPQ0s7Ci0JTFBDX1dS SVRFX1JFRyhjaGFuLCBSR0lPLCB2YWwpOwotCUxQQ19SRUFEX1JFRyhjaGFuLCBSR0xWTCk7Ci0J dmFsID0gKExQQ19SRUFEX1JFRyhjaGFuLCBSR0xWTCkgJiBHUElPX0NMT0NLKSA/IDEgOiAwOwot Ci0JcmV0dXJuIHZhbDsKLX0KLQotc3RhdGljIGludCBnZXRfZGF0YSh2b2lkICpkYXRhKQotewot CXN0cnVjdCBwc2JfaW50ZWxfaTJjX2NoYW4gKmNoYW4gPSBkYXRhOwotCXUzMiB2YWw7Ci0KLQl2 YWwgPSBMUENfUkVBRF9SRUcoY2hhbiwgUkdJTyk7Ci0JdmFsIHw9IEdQSU9fREFUQTsKLQlMUENf V1JJVEVfUkVHKGNoYW4sIFJHSU8sIHZhbCk7Ci0JTFBDX1JFQURfUkVHKGNoYW4sIFJHTFZMKTsK LQl2YWwgPSAoTFBDX1JFQURfUkVHKGNoYW4sIFJHTFZMKSAmIEdQSU9fREFUQSkgPyAxIDogMDsK LQotCXJldHVybiB2YWw7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldF9jbG9jayh2b2lkICpkYXRhLCBp bnQgc3RhdGVfaGlnaCkKLXsKLQlzdHJ1Y3QgcHNiX2ludGVsX2kyY19jaGFuICpjaGFuID0gZGF0 YTsKLQl1MzIgdmFsOwotCi0JaWYgKHN0YXRlX2hpZ2gpIHsKLQkJdmFsID0gTFBDX1JFQURfUkVH KGNoYW4sIFJHSU8pOwotCQl2YWwgfD0gR1BJT19DTE9DSzsKLQkJTFBDX1dSSVRFX1JFRyhjaGFu LCBSR0lPLCB2YWwpOwotCX0gZWxzZSB7Ci0JCXZhbCA9IExQQ19SRUFEX1JFRyhjaGFuLCBSR0lP KTsKLQkJdmFsICY9IH5HUElPX0NMT0NLOwotCQlMUENfV1JJVEVfUkVHKGNoYW4sIFJHSU8sIHZh bCk7Ci0JCXZhbCA9IExQQ19SRUFEX1JFRyhjaGFuLCBSR0xWTCk7Ci0JCXZhbCAmPSB+R1BJT19D TE9DSzsKLQkJTFBDX1dSSVRFX1JFRyhjaGFuLCBSR0xWTCwgdmFsKTsKLQl9Ci19Ci0KLXN0YXRp YyB2b2lkIHNldF9kYXRhKHZvaWQgKmRhdGEsIGludCBzdGF0ZV9oaWdoKQotewotCXN0cnVjdCBw c2JfaW50ZWxfaTJjX2NoYW4gKmNoYW4gPSBkYXRhOwotCXUzMiB2YWw7Ci0KLQlpZiAoc3RhdGVf aGlnaCkgewotCQl2YWwgPSBMUENfUkVBRF9SRUcoY2hhbiwgUkdJTyk7Ci0JCXZhbCB8PSBHUElP X0RBVEE7Ci0JCUxQQ19XUklURV9SRUcoY2hhbiwgUkdJTywgdmFsKTsKLQl9IGVsc2UgewotCQl2 YWwgPSBMUENfUkVBRF9SRUcoY2hhbiwgUkdJTyk7Ci0JCXZhbCAmPSB+R1BJT19EQVRBOwotCQlM UENfV1JJVEVfUkVHKGNoYW4sIFJHSU8sIHZhbCk7Ci0JCXZhbCA9IExQQ19SRUFEX1JFRyhjaGFu LCBSR0xWTCk7Ci0JCXZhbCAmPSB+R1BJT19EQVRBOwotCQlMUENfV1JJVEVfUkVHKGNoYW4sIFJH TFZMLCB2YWwpOwotCX0KLX0KLQotdm9pZCBvYWt0cmFpbF9sdmRzX2kyY19pbml0KHN0cnVjdCBk cm1fZW5jb2RlciAqZW5jb2RlcikKLXsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rl ci0+ZGV2OwotCXN0cnVjdCBnbWFfZW5jb2RlciAqZ21hX2VuY29kZXIgPSB0b19nbWFfZW5jb2Rl cihlbmNvZGVyKTsKLQlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2 X3ByaXZhdGU7Ci0Jc3RydWN0IHBzYl9pbnRlbF9pMmNfY2hhbiAqY2hhbjsKLQotCWNoYW4gPSBr emFsbG9jKHNpemVvZihzdHJ1Y3QgcHNiX2ludGVsX2kyY19jaGFuKSwgR0ZQX0tFUk5FTCk7Ci0J aWYgKCFjaGFuKQotCQlyZXR1cm47Ci0KLQljaGFuLT5kcm1fZGV2ID0gZGV2OwotCWNoYW4tPnJl ZyA9IGRldl9wcml2LT5scGNfZ3Bpb19iYXNlOwotCXN0cm5jcHkoY2hhbi0+YWRhcHRlci5uYW1l LCAiZ21hNTAwIExQQyIsICBJMkNfTkFNRV9TSVpFIC0gMSk7Ci0JY2hhbi0+YWRhcHRlci5vd25l ciA9IFRISVNfTU9EVUxFOwotCWNoYW4tPmFkYXB0ZXIuYWxnb19kYXRhID0gJmNoYW4tPmFsZ287 Ci0JY2hhbi0+YWRhcHRlci5kZXYucGFyZW50ID0gZGV2LT5kZXY7Ci0JY2hhbi0+YWxnby5zZXRz ZGEgPSBzZXRfZGF0YTsKLQljaGFuLT5hbGdvLnNldHNjbCA9IHNldF9jbG9jazsKLQljaGFuLT5h bGdvLmdldHNkYSA9IGdldF9kYXRhOwotCWNoYW4tPmFsZ28uZ2V0c2NsID0gZ2V0X2Nsb2NrOwot CWNoYW4tPmFsZ28udWRlbGF5ID0gMTAwOwotCWNoYW4tPmFsZ28udGltZW91dCA9IHVzZWNzX3Rv X2ppZmZpZXMoMjIwMCk7Ci0JY2hhbi0+YWxnby5kYXRhID0gY2hhbjsKLQotCWkyY19zZXRfYWRh cGRhdGEoJmNoYW4tPmFkYXB0ZXIsIGNoYW4pOwotCi0Jc2V0X2RhdGEoY2hhbiwgMSk7Ci0Jc2V0 X2Nsb2NrKGNoYW4sIDEpOwotCXVkZWxheSg1MCk7Ci0KLQlpZiAoaTJjX2JpdF9hZGRfYnVzKCZj aGFuLT5hZGFwdGVyKSkgewotCQlrZnJlZShjaGFuKTsKLQkJcmV0dXJuOwotCX0KLQotCWdtYV9l bmNvZGVyLT5kZGNfYnVzID0gY2hhbjsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9n bWE1MDAvcHNiX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9wc2JfZHJ2LmMKaW5kZXgg YjA4M2IzZjgxNWI5Li5jMzY1Mzk3NWE2YzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9n bWE1MDAvcHNiX2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvcHNiX2Rydi5jCkBA IC0yOCw3ICsyOCw2IEBACiAKICNpbmNsdWRlICJmcmFtZWJ1ZmZlci5oIgogI2luY2x1ZGUgImlu dGVsX2Jpb3MuaCIKLSNpbmNsdWRlICJtaWRfYmlvcy5oIgogI2luY2x1ZGUgInBvd2VyLmgiCiAj aW5jbHVkZSAicHNiX2Rydi5oIgogI2luY2x1ZGUgInBzYl9pbnRlbF9yZWcuaCIKQEAgLTQ0LDgg KzQzLDYgQEAgc3RhdGljIGludCBwc2JfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBj b25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KTsKICAqIDB4ODA4NiA9IEludGVsIENvcnBv cmF0aW9uCiAgKgogICogUG93ZXJWUiBTR1g1MzUgICAgLSBQb3Vsc2JvICAgIC0gSW50ZWwgR01B IDUwMCwgSW50ZWwgQXRvbSBaNXh4Ci0gKiBQb3dlclZSIFNHWDUzNSAgICAtIE1vb3Jlc3Rvd24g LSBJbnRlbCBHTUEgNjAwCi0gKiBQb3dlclZSIFNHWDUzNSAgICAtIE9ha3RyYWlsICAgLSBJbnRl bCBHTUEgNjAwLCBJbnRlbCBBdG9tIFo2eHgsIEU2eHgKICAqIFBvd2VyVlIgU0dYNTQ1ICAgIC0g Q2VkYXJ0cmFpbCAtIEludGVsIEdNQSAzNjAwLCBJbnRlbCBBdG9tIEQyNTAwLCBOMjYwMAogICog UG93ZXJWUiBTR1g1NDUgICAgLSBDZWRhcnRyYWlsIC0gSW50ZWwgR01BIDM2NTAsIEludGVsIEF0 b20gRDI1NTAsIEQyNzAwLAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTjI4 MDAKQEAgLTUzLDE3ICs1MCw2IEBAIHN0YXRpYyBpbnQgcHNiX3BjaV9wcm9iZShzdHJ1Y3QgcGNp X2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCk7CiBzdGF0aWMgY29u c3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpaWRsaXN0W10gPSB7CiAJeyAweDgwODYsIDB4ODEw OCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgKGxvbmcpICZwc2JfY2hpcF9vcHMgfSwK IAl7IDB4ODA4NiwgMHg4MTA5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAobG9uZykg JnBzYl9jaGlwX29wcyB9LAotI2lmIGRlZmluZWQoQ09ORklHX0RSTV9HTUE2MDApCi0JeyAweDgw ODYsIDB4NDEwMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgKGxvbmcpICZvYWt0cmFp bF9jaGlwX29wcyB9LAotCXsgMHg4MDg2LCAweDQxMDEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQs IDAsIDAsIChsb25nKSAmb2FrdHJhaWxfY2hpcF9vcHMgfSwKLQl7IDB4ODA4NiwgMHg0MTAyLCBQ Q0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAobG9uZykgJm9ha3RyYWlsX2NoaXBfb3BzIH0s Ci0JeyAweDgwODYsIDB4NDEwMywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgKGxvbmcp ICZvYWt0cmFpbF9jaGlwX29wcyB9LAotCXsgMHg4MDg2LCAweDQxMDQsIFBDSV9BTllfSUQsIFBD SV9BTllfSUQsIDAsIDAsIChsb25nKSAmb2FrdHJhaWxfY2hpcF9vcHMgfSwKLQl7IDB4ODA4Niwg MHg0MTA1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAobG9uZykgJm9ha3RyYWlsX2No aXBfb3BzIH0sCi0JeyAweDgwODYsIDB4NDEwNiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwg MCwgKGxvbmcpICZvYWt0cmFpbF9jaGlwX29wcyB9LAotCXsgMHg4MDg2LCAweDQxMDcsIFBDSV9B TllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIChsb25nKSAmb2FrdHJhaWxfY2hpcF9vcHMgfSwKLQl7 IDB4ODA4NiwgMHg0MTA4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAobG9uZykgJm9h a3RyYWlsX2NoaXBfb3BzIH0sCi0jZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19EUk1fR01BMzYw MCkKIAl7IDB4ODA4NiwgMHgwYmUwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAobG9u ZykgJmNkdl9jaGlwX29wcyB9LAogCXsgMHg4MDg2LCAweDBiZTEsIFBDSV9BTllfSUQsIFBDSV9B TllfSUQsIDAsIDAsIChsb25nKSAmY2R2X2NoaXBfb3BzIH0sCkBAIC0xODIsOCArMTY4LDYgQEAg c3RhdGljIHZvaWQgcHNiX2RyaXZlcl91bmxvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIAkJ CWlvdW5tYXAoZGV2X3ByaXYtPmF1eF9yZWcpOwogCQkJZGV2X3ByaXYtPmF1eF9yZWcgPSBOVUxM OwogCQl9Ci0JCXBjaV9kZXZfcHV0KGRldl9wcml2LT5hdXhfcGRldik7Ci0JCXBjaV9kZXZfcHV0 KGRldl9wcml2LT5scGNfcGRldik7CiAKIAkJLyogRGVzdHJveSBWQlQgZGF0YSAqLwogCQlwc2Jf aW50ZWxfZGVzdHJveV9iaW9zKGRldik7CkBAIC0xOTgsNyArMTgyLDcgQEAgc3RhdGljIGludCBw c2JfZHJpdmVyX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFn cykKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2LT5kZXYpOwogCXN0 cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2OwotCXVuc2lnbmVkIGxvbmcgcmVzb3VyY2Vf c3RhcnQsIHJlc291cmNlX2xlbjsKKwl1bnNpZ25lZCBsb25nIHJlc291cmNlX3N0YXJ0OwogCXVu c2lnbmVkIGxvbmcgaXJxZmxhZ3M7CiAJaW50IHJldCA9IC1FTk9NRU07CiAJc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvcjsKQEAgLTIzMiw1MyArMjE2LDcgQEAgc3RhdGljIGludCBwc2Jf ZHJpdmVyX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFncykK IAlpZiAoIWRldl9wcml2LT5zZ3hfcmVnKQogCQlnb3RvIG91dF9lcnI7CiAKLQlpZiAoSVNfTVJT VChkZXYpKSB7Ci0JCWludCBkb21haW4gPSBwY2lfZG9tYWluX25yKHBkZXYtPmJ1cyk7Ci0KLQkJ ZGV2X3ByaXYtPmF1eF9wZGV2ID0KLQkJCXBjaV9nZXRfZG9tYWluX2J1c19hbmRfc2xvdChkb21h aW4sIDAsCi0JCQkJCQkgICAgUENJX0RFVkZOKDMsIDApKTsKLQotCQlpZiAoZGV2X3ByaXYtPmF1 eF9wZGV2KSB7Ci0JCQlyZXNvdXJjZV9zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXZfcHJp di0+YXV4X3BkZXYsCi0JCQkJCQkJICAgIFBTQl9BVVhfUkVTT1VSQ0UpOwotCQkJcmVzb3VyY2Vf bGVuID0gcGNpX3Jlc291cmNlX2xlbihkZXZfcHJpdi0+YXV4X3BkZXYsCi0JCQkJCQkJUFNCX0FV WF9SRVNPVVJDRSk7Ci0JCQlkZXZfcHJpdi0+YXV4X3JlZyA9IGlvcmVtYXAocmVzb3VyY2Vfc3Rh cnQsCi0JCQkJCQkJICAgIHJlc291cmNlX2xlbik7Ci0JCQlpZiAoIWRldl9wcml2LT5hdXhfcmVn KQotCQkJCWdvdG8gb3V0X2VycjsKLQotCQkJRFJNX0RFQlVHX0tNUygiRm91bmQgYXV4IHZkYyIp OwotCQl9IGVsc2UgewotCQkJLyogQ291bGRuJ3QgZmluZCB0aGUgYXV4IHZkYyBzbyBtYXAgdG8g cHJpbWFyeSB2ZGMgKi8KLQkJCWRldl9wcml2LT5hdXhfcmVnID0gZGV2X3ByaXYtPnZkY19yZWc7 Ci0JCQlEUk1fREVCVUdfS01TKCJDb3VsZG4ndCBmaW5kIGF1eCBwY2kgZGV2aWNlIik7Ci0JCX0K LQkJZGV2X3ByaXYtPmdtYnVzX3JlZyA9IGRldl9wcml2LT5hdXhfcmVnOwotCi0JCWRldl9wcml2 LT5scGNfcGRldiA9Ci0JCQlwY2lfZ2V0X2RvbWFpbl9idXNfYW5kX3Nsb3QoZG9tYWluLCAwLAot CQkJCQkJICAgIFBDSV9ERVZGTigzMSwgMCkpOwotCQlpZiAoZGV2X3ByaXYtPmxwY19wZGV2KSB7 Ci0JCQlwY2lfcmVhZF9jb25maWdfd29yZChkZXZfcHJpdi0+bHBjX3BkZXYsIFBTQl9MUENfR0JB LAotCQkJCSZkZXZfcHJpdi0+bHBjX2dwaW9fYmFzZSk7Ci0JCQlwY2lfd3JpdGVfY29uZmlnX2R3 b3JkKGRldl9wcml2LT5scGNfcGRldiwgUFNCX0xQQ19HQkEsCi0JCQkJKHUzMilkZXZfcHJpdi0+ bHBjX2dwaW9fYmFzZSB8ICgxTDw8MzEpKTsKLQkJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldl9w cml2LT5scGNfcGRldiwgUFNCX0xQQ19HQkEsCi0JCQkJJmRldl9wcml2LT5scGNfZ3Bpb19iYXNl KTsKLQkJCWRldl9wcml2LT5scGNfZ3Bpb19iYXNlICY9IDB4ZmZjMDsKLQkJCWlmIChkZXZfcHJp di0+bHBjX2dwaW9fYmFzZSkKLQkJCQlEUk1fREVCVUdfS01TKCJGb3VuZCBMUEMgR1BJTyBhdCAw eCUwNHhcbiIsCi0JCQkJCQlkZXZfcHJpdi0+bHBjX2dwaW9fYmFzZSk7Ci0JCQllbHNlIHsKLQkJ CQlwY2lfZGV2X3B1dChkZXZfcHJpdi0+bHBjX3BkZXYpOwotCQkJCWRldl9wcml2LT5scGNfcGRl diA9IE5VTEw7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgewotCQlkZXZfcHJpdi0+Z21idXNfcmVnID0g ZGV2X3ByaXYtPnZkY19yZWc7Ci0JfQorCWRldl9wcml2LT5nbWJ1c19yZWcgPSBkZXZfcHJpdi0+ dmRjX3JlZzsKIAogCXBzYl9pbnRlbF9vcHJlZ2lvbl9zZXR1cChkZXYpOwogCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL3BzYl9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9nbWE1 MDAvcHNiX2Rydi5oCmluZGV4IDAyMGE3MWI5MTU3Ny4uMGY4MmEyZmM1ZGVkIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL3BzYl9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0v Z21hNTAwL3BzYl9kcnYuaApAQCAtMTcsNyArMTcsNiBAQAogI2luY2x1ZGUgImd0dC5oIgogI2lu Y2x1ZGUgImludGVsX2Jpb3MuaCIKICNpbmNsdWRlICJtbXUuaCIKLSNpbmNsdWRlICJvYWt0cmFp bC5oIgogI2luY2x1ZGUgIm9wcmVnaW9uLmgiCiAjaW5jbHVkZSAicG93ZXIuaCIKICNpbmNsdWRl ICJwc2JfaW50ZWxfZHJ2LmgiCkBAIC0zOSwxNyArMzgsMTQgQEAKIGVudW0gewogCUNISVBfUFNC XzgxMDggPSAwLAkJLyogUG91bHNibyAqLwogCUNISVBfUFNCXzgxMDkgPSAxLAkJLyogUG91bHNi byAqLwotCUNISVBfTVJTVF80MTAwID0gMiwJCS8qIE1vb3Jlc3Rvd24vT2FrdHJhaWwgKi8KIH07 CiAKICNkZWZpbmUgSVNfUFNCKGRybSkgKCh0b19wY2lfZGV2KChkcm0pLT5kZXYpLT5kZXZpY2Ug JiAweGZmZmUpID09IDB4ODEwOCkKLSNkZWZpbmUgSVNfTVJTVChkcm0pICgodG9fcGNpX2Rldigo ZHJtKS0+ZGV2KS0+ZGV2aWNlICYgMHhmZmYwKSA9PSAweDQxMDApCiAjZGVmaW5lIElTX0NEVihk cm0pICgodG9fcGNpX2RldigoZHJtKS0+ZGV2KS0+ZGV2aWNlICYgMHhmZmYwKSA9PSAweDBiZTAp CiAKIC8qIEhhcmR3YXJlIG9mZnNldHMgKi8KICNkZWZpbmUgUFNCX1ZEQ19PRkZTRVQJCSAweDAw MDAwMDAwCiAjZGVmaW5lIFBTQl9WRENfU0laRQkJIDB4MDAwMDgwMDAwCi0jZGVmaW5lIE1SU1Rf TU1JT19TSVpFCQkgMHgwMDAwQzAwMDAKICNkZWZpbmUgUFNCX1NHWF9TSVpFCQkgMHg4MDAwCiAj ZGVmaW5lIFBTQl9TR1hfT0ZGU0VUCQkgMHgwMDA0MDAwMAogI2RlZmluZSBNUlNUX1NHWF9PRkZT RVQJCSAweDAwMDgwMDAwCkBAIC0zODgsOCArMzg0LDYgQEAgc3RydWN0IHBzYl9vcHM7CiAKIHN0 cnVjdCBkcm1fcHNiX3ByaXZhdGUgewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7Ci0Jc3RydWN0 IHBjaV9kZXYgKmF1eF9wZGV2OyAvKiBDdXJyZW50bHkgb25seSB1c2VkIGJ5IG1yc3QgKi8KLQlz dHJ1Y3QgcGNpX2RldiAqbHBjX3BkZXY7IC8qIEN1cnJlbnRseSBvbmx5IHVzZWQgYnkgbXJzdCAq LwogCWNvbnN0IHN0cnVjdCBwc2Jfb3BzICpvcHM7CiAJY29uc3Qgc3RydWN0IHBzYl9vZmZzZXQg KnJlZ21hcDsKIApAQCAtNDk0LDEzICs0ODgsNiBAQCBzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlIHsK IAkvKiBSdW50aW1lIFBNIHN0YXRlICovCiAJaW50IHJwbV9lbmFibGVkOwogCi0JLyogTUlEIHNw ZWNpZmljICovCi0JYm9vbCBoYXNfZ2N0OwotCXN0cnVjdCBvYWt0cmFpbF9nY3RfZGF0YSBnY3Rf ZGF0YTsKLQotCS8qIE9ha3RyYWlsIEhETUkgc3RhdGUgKi8KLQlzdHJ1Y3Qgb2FrdHJhaWxfaGRt aV9kZXYgKmhkbWlfcHJpdjsKLQogCS8qIFJlZ2lzdGVyIHN0YXRlICovCiAJc3RydWN0IHBzYl9z YXZlX2FyZWEgcmVnczsKIApAQCAtNjY3LDEzICs2NTQsNiBAQCB2b2lkIGdtYV9iYWNrbGlnaHRf ZGlzYWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIHZvaWQgZ21hX2JhY2tsaWdodF9lbmFi bGUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiB2b2lkIGdtYV9iYWNrbGlnaHRfc2V0KHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsIGludCB2KTsKIAotLyogb2FrdHJhaWxfY3J0Yy5jICovCi1leHRl cm4gY29uc3Qgc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyBvYWt0cmFpbF9oZWxwZXJfZnVu Y3M7Ci0KLS8qIG9ha3RyYWlsX2x2ZHMuYyAqLwotZXh0ZXJuIHZvaWQgb2FrdHJhaWxfbHZkc19p bml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCSAgICBzdHJ1Y3QgcHNiX2ludGVsX21vZGVf ZGV2aWNlICptb2RlX2Rldik7Ci0KIC8qIHBzYl9pbnRlbF9kaXNwbGF5LmMgKi8KIGV4dGVybiBj b25zdCBzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzIHBzYl9pbnRlbF9oZWxwZXJfZnVuY3M7 CiBleHRlcm4gY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIHBzYl9pbnRlbF9jcnRjX2Z1bmNz OwpAQCAtNjkwLDkgKzY3MCw2IEBAIGV4dGVybiBpbnQgcHNiX2dlbV9kdW1iX2NyZWF0ZShzdHJ1 Y3QgZHJtX2ZpbGUgKmZpbGUsIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAvKiBwc2JfZGV2aWNl LmMgKi8KIGV4dGVybiBjb25zdCBzdHJ1Y3QgcHNiX29wcyBwc2JfY2hpcF9vcHM7CiAKLS8qIG9h a3RyYWlsX2RldmljZS5jICovCi1leHRlcm4gY29uc3Qgc3RydWN0IHBzYl9vcHMgb2FrdHJhaWxf Y2hpcF9vcHM7Ci0KIC8qIGNkdl9kZXZpY2UuYyAqLwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBwc2Jf b3BzIGNkdl9jaGlwX29wczsKIApAQCAtNzEzLDI1ICs2OTAsNiBAQCBleHRlcm4gY29uc3Qgc3Ry dWN0IHBzYl9vcHMgY2R2X2NoaXBfb3BzOwogZXh0ZXJuIGludCBkcm1faWRsZV9jaGVja19pbnRl cnZhbDsKIAogLyogVXRpbGl0aWVzICovCi1zdGF0aWMgaW5saW5lIHUzMiBNUlNUX01TR19SRUFE MzIoaW50IGRvbWFpbiwgdWludCBwb3J0LCB1aW50IG9mZnNldCkKLXsKLQlpbnQgbWNyID0gKDB4 RDA8PDI0KSB8IChwb3J0IDw8IDE2KSB8IChvZmZzZXQgPDwgOCk7Ci0JdWludDMyX3QgcmV0X3Zh bCA9IDA7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaV9yb290ID0gcGNpX2dldF9kb21haW5fYnVzX2Fu ZF9zbG90KGRvbWFpbiwgMCwgMCk7Ci0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwY2lfcm9vdCwg MHhEMCwgbWNyKTsKLQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGNpX3Jvb3QsIDB4RDQsICZyZXRf dmFsKTsKLQlwY2lfZGV2X3B1dChwY2lfcm9vdCk7Ci0JcmV0dXJuIHJldF92YWw7Ci19Ci1zdGF0 aWMgaW5saW5lIHZvaWQgTVJTVF9NU0dfV1JJVEUzMihpbnQgZG9tYWluLCB1aW50IHBvcnQsIHVp bnQgb2Zmc2V0LAotCQkJCSAgICB1MzIgdmFsdWUpCi17Ci0JaW50IG1jciA9ICgweEUwPDwyNCkg fCAocG9ydCA8PCAxNikgfCAob2Zmc2V0IDw8IDgpIHwgMHhGMDsKLQlzdHJ1Y3QgcGNpX2RldiAq cGNpX3Jvb3QgPSBwY2lfZ2V0X2RvbWFpbl9idXNfYW5kX3Nsb3QoZG9tYWluLCAwLCAwKTsKLQlw Y2lfd3JpdGVfY29uZmlnX2R3b3JkKHBjaV9yb290LCAweEQ0LCB2YWx1ZSk7Ci0JcGNpX3dyaXRl X2NvbmZpZ19kd29yZChwY2lfcm9vdCwgMHhEMCwgbWNyKTsKLQlwY2lfZGV2X3B1dChwY2lfcm9v dCk7Ci19CiAKIHN0YXRpYyBpbmxpbmUgdWludDMyX3QgUkVHSVNURVJfUkVBRChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCB1aW50MzJfdCByZWcpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vZ21hNTAwL3BzYl9pbnRlbF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvcHNiX2lu dGVsX2Rydi5oCmluZGV4IDUzNDAyMjVkNjk5Ny4uMWQ2MmU1NDFhOWQ3IDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vZ21hNTAwL3BzYl9pbnRlbF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9k cm0vZ21hNTAwL3BzYl9pbnRlbF9kcnYuaApAQCAtMTkyLDEyICsxOTIsNiBAQCBleHRlcm4gdm9p ZCBwc2JfaW50ZWxfdHZfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lk IHBzYl9pbnRlbF9sdmRzX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCSAgICBzdHJ1 Y3QgcHNiX2ludGVsX21vZGVfZGV2aWNlICptb2RlX2Rldik7CiBleHRlcm4gdm9pZCBwc2JfaW50 ZWxfbHZkc19zZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgbGV2ZWwp OwotZXh0ZXJuIHZvaWQgb2FrdHJhaWxfbHZkc19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs Ci0JCQkgICBzdHJ1Y3QgcHNiX2ludGVsX21vZGVfZGV2aWNlICptb2RlX2Rldik7Ci1leHRlcm4g dm9pZCBvYWt0cmFpbF93YWl0X2Zvcl9JTlRSX1BLVF9TRU5UKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYpOwotZXh0ZXJuIHZvaWQgb2FrdHJhaWxfZHNpX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRl diwKLQkJCSAgIHN0cnVjdCBwc2JfaW50ZWxfbW9kZV9kZXZpY2UgKm1vZGVfZGV2KTsKLWV4dGVy biB2b2lkIG9ha3RyYWlsX2x2ZHNfaTJjX2luaXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVy KTsKIGV4dGVybiB2b2lkIG1pZF9kc2lfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkg ICAgc3RydWN0IHBzYl9pbnRlbF9tb2RlX2RldmljZSAqbW9kZV9kZXYsIGludCBkc2lfbnVtKTsK IApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9wc2JfaW50ZWxfbHZkcy5jIGIv ZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9wc2JfaW50ZWxfbHZkcy5jCmluZGV4IGFjZTk1ZDRiZGI2 Zi4uNDYyYWU1ZGM2YTQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL3BzYl9p bnRlbF9sdmRzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9wc2JfaW50ZWxfbHZkcy5j CkBAIC0zNzUsMTUgKzM3NSwxMSBAQCBib29sIHBzYl9pbnRlbF9sdmRzX21vZGVfZml4dXAoc3Ry dWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAogCWlmIChnbWFfZW5jb2Rlci0+dHlwZSA9PSBJTlRF TF9PVVRQVVRfTUlQSTIpCiAJCXBhbmVsX2ZpeGVkX21vZGUgPSBtb2RlX2Rldi0+cGFuZWxfZml4 ZWRfbW9kZTI7CiAKLQkvKiBQU0IgcmVxdWlyZXMgdGhlIExWRFMgaXMgb24gcGlwZSBCLCBNUlNU IGhhcyBvbmx5IG9uZSBwaXBlIGFueXdheSAqLwotCWlmICghSVNfTVJTVChkZXYpICYmIGdtYV9j cnRjLT5waXBlID09IDApIHsKKwkvKiBQU0IgcmVxdWlyZXMgdGhlIExWRFMgaXMgb24gcGlwZSBC ICovCisJaWYgKGdtYV9jcnRjLT5waXBlID09IDApIHsKIAkJcHJfZXJyKCJDYW4ndCBzdXBwb3J0 IExWRFMgb24gcGlwZSBBXG4iKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KLQlpZiAoSVNfTVJTVChk ZXYpICYmIGdtYV9jcnRjLT5waXBlICE9IDApIHsKLQkJcHJfZXJyKCJNdXN0IHVzZSBQSVBFIEFc biIpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQogCS8qIFNob3VsZCBuZXZlciBoYXBwZW4hISAqLwog CWxpc3RfZm9yX2VhY2hfZW50cnkodG1wX2VuY29kZXIsICZkZXYtPm1vZGVfY29uZmlnLmVuY29k ZXJfbGlzdCwKIAkJCSAgICBoZWFkKSB7CkBAIC00OTcsMTEgKzQ5Myw5IEBAIHN0YXRpYyBpbnQg cHNiX2ludGVsX2x2ZHNfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3Ip CiAJc3RydWN0IHBzYl9pbnRlbF9tb2RlX2RldmljZSAqbW9kZV9kZXYgPSAmZGV2X3ByaXYtPm1v ZGVfZGV2OwogCXN0cnVjdCBnbWFfZW5jb2RlciAqZ21hX2VuY29kZXIgPSBnbWFfYXR0YWNoZWRf ZW5jb2Rlcihjb25uZWN0b3IpOwogCXN0cnVjdCBwc2JfaW50ZWxfbHZkc19wcml2ICpsdmRzX3By aXYgPSBnbWFfZW5jb2Rlci0+ZGV2X3ByaXY7Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAoIUlTX01S U1QoZGV2KSkKLQkJcmV0ID0gcHNiX2ludGVsX2RkY19nZXRfbW9kZXMoY29ubmVjdG9yLCAmbHZk c19wcml2LT5pMmNfYnVzLT5hZGFwdGVyKTsKKwlpbnQgcmV0OwogCisJcmV0ID0gcHNiX2ludGVs X2RkY19nZXRfbW9kZXMoY29ubmVjdG9yLCAmbHZkc19wcml2LT5pMmNfYnVzLT5hZGFwdGVyKTsK IAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v Z21hNTAwL3BzYl9pbnRlbF9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvcHNiX2ludGVs X3JlZy5oCmluZGV4IDM2NGVhOGYwNmY5Yy4uNzRhNTI2NjI3NWVmIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vZ21hNTAwL3BzYl9pbnRlbF9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0v Z21hNTAwL3BzYl9pbnRlbF9yZWcuaApAQCAtNzg1LDE1ICs3ODUsNiBAQCBzdHJ1Y3QgZHBzdF9n dWFyZGJhbmQgewogI2RlZmluZSBJTVIJCQkweDAyMGE4CiAjZGVmaW5lIElTUgkJCTB4MDIwYWMK IAotLyoKLSAqIE1PT1JFU1RPV04gZGVsdGEgcmVnaXN0ZXJzCi0gKi8KLSNkZWZpbmUgTVJTVF9E UExMX0EJCTB4MGYwMTQKLSNkZWZpbmUgRFBMTEFfTU9ERV9MVkRTCQkJKDIgPDwgMjYpCS8qIG1y c3QgKi8KLSNkZWZpbmUgTVJTVF9GUEEwCQkweDBmMDQwCi0jZGVmaW5lIE1SU1RfRlBBMQkJMHgw ZjA0NAotI2RlZmluZSBNUlNUX1BFUkZfTU9ERQkJMHgwMjBmNAotCiAvKgogICogTUVERklFTEQg SERNSSByZWdpc3RlcnMKICAqLwpAQCAtODA2LDggKzc5Nyw2IEBAIHN0cnVjdCBkcHN0X2d1YXJk YmFuZCB7CiAjZGVmaW5lIEhETUlCX0hEQ1BfUE9SVAkJCSgxIDw8IDUpCiAKIC8qICNkZWZpbmUg TFZEUwkJCTB4NjExODAgKi8KLSNkZWZpbmUgTVJTVF9QQU5FTF84VE82X0RJVEhFUl9FTkFCTEUJ KDEgPDwgMjUpCi0jZGVmaW5lIE1SU1RfUEFORUxfMjRfRE9UXzFfRk9STUFUCSgxIDw8IDI0KQog I2RlZmluZSBMVkRTX0EzX1BPV0VSX1VQXzBfT1VUUFVUCSgxIDw8IDYpCiAKICNkZWZpbmUgTUlQ SQkJCTB4NjExOTAKQEAgLTgzMSwxNiArODIwLDExIEBAIHN0cnVjdCBkcHN0X2d1YXJkYmFuZCB7 CiAjZGVmaW5lIFBGSVRfUElQRV9TRUxFQ1RfU0hJRlQJCSgyOSkKIAogLyogI2RlZmluZSBCTENf UFdNX0NUTAkJMHg2MTI1NCAqLwotI2RlZmluZSBNUlNUX0JBQ0tMSUdIVF9NT0RVTEFUSU9OX0ZS RVFfU0hJRlQJKDE2KQotI2RlZmluZSBNUlNUX0JBQ0tMSUdIVF9NT0RVTEFUSU9OX0ZSRVFfTUFT SwkoMHhmZmZmIDw8IDE2KQogCiAvKiAjZGVmaW5lIFBJUEVBQ09ORiAweDcwMDA4ICovCiAjZGVm aW5lIFBJUEVBQ09ORl9QSVBFX1NUQVRFCQkoMSA8PCAzMCkKIC8qICNkZWZpbmUgRFNQQUNOVFIJ CTB4NzAxODAgKi8KIAotI2RlZmluZSBNUlNUX0RTUEFCQVNFCQkweDcwMTljCi0jZGVmaW5lIE1S U1RfRFNQQkJBU0UJCTB4NzExOWMKLQogLyoKICAqIE1vb3Jlc3Rvd24gcmVnaXN0ZXJzLgogICov CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL3BzYl9pbnRlbF9zZHZvLmMgYi9k cml2ZXJzL2dwdS9kcm0vZ21hNTAwL3BzYl9pbnRlbF9zZHZvLmMKaW5kZXggMzU1ZGEyODU2Mzg5 Li43OTgxZDNhMTU0NWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvcHNiX2lu dGVsX3Nkdm8uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL3BzYl9pbnRlbF9zZHZvLmMK QEAgLTIzMSw5ICsyMzEsOCBAQCBzdGF0aWMgdm9pZCBwc2JfaW50ZWxfc2R2b193cml0ZV9zZHZv eChzdHJ1Y3QgcHNiX2ludGVsX3Nkdm8gKnBzYl9pbnRlbF9zZHZvLCB1MwogCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXYgPSBwc2JfaW50ZWxfc2R2by0+YmFzZS5iYXNlLmRldjsKIAl1MzIgYnZhbCA9 IHZhbCwgY3ZhbCA9IHZhbDsKIAlpbnQgaSwgajsKLQlpbnQgbmVlZF9hdXggPSBJU19NUlNUKGRl dikgPyAxIDogMDsKIAotCWZvciAoaiA9IDA7IGogPD0gbmVlZF9hdXg7IGorKykgeworCWZvciAo aiA9IDA7IGogPCAxOyBqKyspIHsKIAkJaWYgKHBzYl9pbnRlbF9zZHZvLT5zZHZvX3JlZyA9PSBT RFZPQikKIAkJCWN2YWwgPSBSRUdfUkVBRF9XSVRIX0FVWChTRFZPQywgaik7CiAJCWVsc2UKQEAg LTk3NSw3ICs5NzQsNiBAQCBzdGF0aWMgdm9pZCBwc2JfaW50ZWxfc2R2b19tb2RlX3NldChzdHJ1 Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCiAJc3RydWN0IHBzYl9pbnRlbF9zZHZvX2luX291dF9t YXAgaW5fb3V0OwogCXN0cnVjdCBwc2JfaW50ZWxfc2R2b19kdGQgaW5wdXRfZHRkOwogCWludCBy YXRlOwotCWludCBuZWVkX2F1eCA9IElTX01SU1QoZGV2KSA/IDEgOiAwOwogCiAJaWYgKCFtb2Rl KQogCQlyZXR1cm47CkBAIC0xMDQxLDEwICsxMDM5LDcgQEAgc3RhdGljIHZvaWQgcHNiX2ludGVs X3Nkdm9fbW9kZV9zZXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAogCQlyZXR1cm47CiAK IAkvKiBTZXQgdGhlIFNEVk8gY29udHJvbCByZWdzLiAqLwotCWlmIChuZWVkX2F1eCkKLQkJc2R2 b3ggPSBSRUdfUkVBRF9BVVgocHNiX2ludGVsX3Nkdm8tPnNkdm9fcmVnKTsKLQllbHNlCi0JCXNk dm94ID0gUkVHX1JFQUQocHNiX2ludGVsX3Nkdm8tPnNkdm9fcmVnKTsKKwlzZHZveCA9IFJFR19S RUFEKHBzYl9pbnRlbF9zZHZvLT5zZHZvX3JlZyk7CiAKIAlzd2l0Y2ggKHBzYl9pbnRlbF9zZHZv LT5zZHZvX3JlZykgewogCWNhc2UgU0RWT0I6CkBAIC0xMDc2LDcgKzEwNzEsNiBAQCBzdGF0aWMg dm9pZCBwc2JfaW50ZWxfc2R2b19kcG1zKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwgaW50 IG1vZGUpCiAJc3RydWN0IHBzYl9pbnRlbF9zZHZvICpwc2JfaW50ZWxfc2R2byA9IHRvX3BzYl9p bnRlbF9zZHZvKGVuY29kZXIpOwogCXUzMiB0ZW1wOwogCWludCBpOwotCWludCBuZWVkX2F1eCA9 IElTX01SU1QoZGV2KSA/IDEgOiAwOwogCiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBEUk1fTU9E RV9EUE1TX09OOgpAQCAtMTA5NSwxMCArMTA4OSw3IEBAIHN0YXRpYyB2b2lkIHBzYl9pbnRlbF9z ZHZvX2RwbXMoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLCBpbnQgbW9kZSkKIAkJCXBzYl9p bnRlbF9zZHZvX3NldF9lbmNvZGVyX3Bvd2VyX3N0YXRlKHBzYl9pbnRlbF9zZHZvLCBtb2RlKTsK IAogCQlpZiAobW9kZSA9PSBEUk1fTU9ERV9EUE1TX09GRikgewotCQkJaWYgKG5lZWRfYXV4KQot CQkJCXRlbXAgPSBSRUdfUkVBRF9BVVgocHNiX2ludGVsX3Nkdm8tPnNkdm9fcmVnKTsKLQkJCWVs c2UKLQkJCQl0ZW1wID0gUkVHX1JFQUQocHNiX2ludGVsX3Nkdm8tPnNkdm9fcmVnKTsKKwkJCXRl bXAgPSBSRUdfUkVBRChwc2JfaW50ZWxfc2R2by0+c2R2b19yZWcpOwogCiAJCQlpZiAoKHRlbXAg JiBTRFZPX0VOQUJMRSkgIT0gMCkgewogCQkJCXBzYl9pbnRlbF9zZHZvX3dyaXRlX3Nkdm94KHBz Yl9pbnRlbF9zZHZvLCB0ZW1wICYgflNEVk9fRU5BQkxFKTsKQEAgLTExMDgsMTAgKzEwOTksNyBA QCBzdGF0aWMgdm9pZCBwc2JfaW50ZWxfc2R2b19kcG1zKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5j b2RlciwgaW50IG1vZGUpCiAJCWJvb2wgaW5wdXQxLCBpbnB1dDI7CiAJCXU4IHN0YXR1czsKIAot CQlpZiAobmVlZF9hdXgpCi0JCQl0ZW1wID0gUkVHX1JFQURfQVVYKHBzYl9pbnRlbF9zZHZvLT5z ZHZvX3JlZyk7Ci0JCWVsc2UKLQkJCXRlbXAgPSBSRUdfUkVBRChwc2JfaW50ZWxfc2R2by0+c2R2 b19yZWcpOworCQl0ZW1wID0gUkVHX1JFQUQocHNiX2ludGVsX3Nkdm8tPnNkdm9fcmVnKTsKIAog CQlpZiAoKHRlbXAgJiBTRFZPX0VOQUJMRSkgPT0gMCkKIAkJCXBzYl9pbnRlbF9zZHZvX3dyaXRl X3Nkdm94KHBzYl9pbnRlbF9zZHZvLCB0ZW1wIHwgU0RWT19FTkFCTEUpOwotLSAKMi4zMC4wCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwg bWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK