From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Hellstrom Subject: [PATCH 12/28] drm/vmwgfx: Implement screen targets Date: Wed, 12 Aug 2015 22:43:01 -0700 Message-ID: <1439444597-4664-13-git-send-email-thellstrom@vmware.com> References: <1439444597-4664-1-git-send-email-thellstrom@vmware.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx6.bahnhof.se (mx6.bahnhof.se [213.80.101.16]) by gabe.freedesktop.org (Postfix) with ESMTPS id B95F76EBF6 for ; Wed, 12 Aug 2015 23:03:46 -0700 (PDT) Received: from localhost (mf.bahnhof.se [213.80.101.20]) by mx6-reinject (Postfix) with ESMTP id 77D2B4412B for ; Thu, 13 Aug 2015 08:03:45 +0200 (CEST) Received: from mf3.bahnhof.se ([127.0.0.1]) by localhost (mf3.bahnhof.se [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id nWG5KLeZaXmn for ; Thu, 13 Aug 2015 08:03:32 +0200 (CEST) Received: from mail.shipmail.org (h-5-150-198-217.na.cust.bahnhof.se [5.150.198.217]) by mf3.bahnhof.se (Postfix) with ESMTP id E84333E8CD9 for ; Thu, 13 Aug 2015 08:03:03 +0200 (CEST) Received: from mail.shipmail.org (lin0.kontor.shipmail.org [127.0.0.1]) by mail.shipmail.org (Postfix) with ESMTP id B7E9D3DC00C for ; Thu, 13 Aug 2015 07:43:24 +0200 (CEST) Received: from localhost.localdomain (lin0.kontor.shipmail.org [127.0.0.1]) by mail.shipmail.org (Postfix) with ESMTP id 8174D3DC00B for ; Thu, 13 Aug 2015 07:43:24 +0200 (CEST) In-Reply-To: <1439444597-4664-1-git-send-email-thellstrom@vmware.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org RnJvbTogU2luY2xhaXIgWWVoIDxzeWVoQHZtd2FyZS5jb20+CgpBZGQgc3VwcG9ydCBmb3IgdGhl IHNjcmVlbiB0YXJnZXQgZGV2aWNlIGludGVyZmFjZS4KQWRkIGEgZ2V0cGFyYW0gcGFyYW1ldGVy IGFuZCBidW1wIG1pbm9yIHRvIHNpZ25hbCBhdmFpbGFiaWxpdHkuCgpTaWduZWQtb2ZmLWJ5OiBT aW5jbGFpciBZZWggPHN5ZWhAdm13YXJlLmNvbT4KU2lnbmVkLW9mZi1ieTogVGhvbWFzIEhlbGxz dHJvbSA8dGhlbGxzdHJvbUB2bXdhcmUuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS92bXdnZngv TWFrZWZpbGUgICAgICAgICB8ICAgIDIgKy0KIGRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4 X2Rydi5jICAgICB8ICAgMjQgKy0KIGRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5o ICAgICB8ICAgMTUgKy0KIGRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2lvY3RsLmMgICB8 ICAgIDQgKwogZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmMgICAgIHwgICA2MiAr LQogZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmggICAgIHwgICAyMCArCiBkcml2 ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9tb2IuYyAgICAgfCAgICAzICstCiBkcml2ZXJzL2dw dS9kcm0vdm13Z2Z4L3Ztd2dmeF9zdGR1LmMgICAgfCAxMzY0ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3N1cmZhY2UuYyB8ICAg IDQgKwogaW5jbHVkZS91YXBpL2RybS92bXdnZnhfZHJtLmggICAgICAgICAgIHwgICAgMSArCiAx MCBmaWxlcyBjaGFuZ2VkLCAxNDc1IGluc2VydGlvbnMoKyksIDI0IGRlbGV0aW9ucygtKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3N0ZHUuYwoKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9k cm0vdm13Z2Z4L01ha2VmaWxlCmluZGV4IDUyOWJjNzIuLjQ4NDA5MzkgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS92bXdnZngvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dm eC9NYWtlZmlsZQpAQCAtNyw2ICs3LDYgQEAgdm13Z2Z4LXkgOj0gdm13Z2Z4X2V4ZWNidWYubyB2 bXdnZnhfZ21yLm8gdm13Z2Z4X2ttcy5vIHZtd2dmeF9kcnYubyBcCiAJICAgIHZtd2dmeF9vdmVy bGF5Lm8gdm13Z2Z4X21hcmtlci5vIHZtd2dmeF9nbXJpZF9tYW5hZ2VyLm8gXAogCSAgICB2bXdn ZnhfZmVuY2UubyB2bXdnZnhfZG1hYnVmLm8gdm13Z2Z4X3Njcm4ubyB2bXdnZnhfY29udGV4dC5v IFwKIAkgICAgdm13Z2Z4X3N1cmZhY2UubyB2bXdnZnhfcHJpbWUubyB2bXdnZnhfbW9iLm8gdm13 Z2Z4X3NoYWRlci5vIFwKLQkgICAgdm13Z2Z4X2NtZGJ1Zl9yZXMubyB2bXdnZnhfY21kYnVmLm8g XAorCSAgICB2bXdnZnhfY21kYnVmX3Jlcy5vIHZtd2dmeF9jbWRidWYubyB2bXdnZnhfc3RkdS5v IFwKIAogb2JqLSQoQ09ORklHX0RSTV9WTVdHRlgpIDo9IHZtd2dmeC5vCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdn Zngvdm13Z2Z4X2Rydi5jCmluZGV4IDdlMmIzYzguLmFiMWI3MGMgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdn Zngvdm13Z2Z4X2Rydi5jCkBAIC02OTMsMjIgKzY5MywyOCBAQCBzdGF0aWMgaW50IHZtd19kcml2 ZXJfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGNoaXBzZXQpCiAJ CQkJIFNWR0FfUkVHX01BWF9QUklNQVJZX0JPVU5ESU5HX0JPWF9NRU0pOwogCQlkZXZfcHJpdi0+ bWF4X21vYl9zaXplID0KIAkJCXZtd19yZWFkKGRldl9wcml2LCBTVkdBX1JFR19NT0JfTUFYX1NJ WkUpOworCQlkZXZfcHJpdi0+c3RkdV9tYXhfd2lkdGggPQorCQkJdm13X3JlYWQoZGV2X3ByaXYs IFNWR0FfUkVHX1NDUkVFTlRBUkdFVF9NQVhfV0lEVEgpOworCQlkZXZfcHJpdi0+c3RkdV9tYXhf aGVpZ2h0ID0KKwkJCXZtd19yZWFkKGRldl9wcml2LCBTVkdBX1JFR19TQ1JFRU5UQVJHRVRfTUFY X0hFSUdIVCk7CisKKwkJdm13X3dyaXRlKGRldl9wcml2LCBTVkdBX1JFR19ERVZfQ0FQLAorCQkJ ICBTVkdBM0RfREVWQ0FQX01BWF9URVhUVVJFX1dJRFRIKTsKKwkJZGV2X3ByaXYtPnRleHR1cmVf bWF4X3dpZHRoID0gdm13X3JlYWQoZGV2X3ByaXYsCisJCQkJCQkgICAgICAgU1ZHQV9SRUdfREVW X0NBUCk7CisJCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9SRUdfREVWX0NBUCwKKwkJCSAgU1ZH QTNEX0RFVkNBUF9NQVhfVEVYVFVSRV9IRUlHSFQpOworCQlkZXZfcHJpdi0+dGV4dHVyZV9tYXhf aGVpZ2h0ID0gdm13X3JlYWQoZGV2X3ByaXYsCisJCQkJCQkJU1ZHQV9SRUdfREVWX0NBUCk7CiAJ fSBlbHNlCiAJCWRldl9wcml2LT5wcmltX2JiX21lbSA9IGRldl9wcml2LT52cmFtX3NpemU7Cisg CisJdm13X3ByaW50X2NhcGFiaWxpdGllcyhkZXZfcHJpdi0+Y2FwYWJpbGl0aWVzKTsKIAogCXJl dCA9IHZtd19kbWFfbWFza3MoZGV2X3ByaXYpOwogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJ CWdvdG8gb3V0X2VycjA7CiAKLQkvKgotCSAqIExpbWl0IGJhY2sgYnVmZmVyIHNpemUgdG8gVlJB TSBzaXplLiAgUmVtb3ZlIHRoaXMgb25jZQotCSAqIHNjcmVlbiB0YXJnZXRzIGFyZSBpbXBsZW1l bnRlZC4KLQkgKi8KLQlpZiAoZGV2X3ByaXYtPnByaW1fYmJfbWVtID4gZGV2X3ByaXYtPnZyYW1f c2l6ZSkKLQkJZGV2X3ByaXYtPnByaW1fYmJfbWVtID0gZGV2X3ByaXYtPnZyYW1fc2l6ZTsKLQot CXZtd19wcmludF9jYXBhYmlsaXRpZXMoZGV2X3ByaXYtPmNhcGFiaWxpdGllcyk7Ci0KIAlpZiAo ZGV2X3ByaXYtPmNhcGFiaWxpdGllcyAmIFNWR0FfQ0FQX0dNUjIpIHsKIAkJRFJNX0lORk8oIk1h eCBHTVIgaWRzIGlzICV1XG4iLAogCQkJICh1bnNpZ25lZClkZXZfcHJpdi0+bWF4X2dtcl9pZHMp OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmggYi9kcml2 ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaAppbmRleCBjM2Y4ZmM5Li4wNGY4YmYyIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaApAQCAtNDAsMTcgKzQwLDE3IEBACiAjaW5j bHVkZSA8ZHJtL3R0bS90dG1fbW9kdWxlLmg+CiAjaW5jbHVkZSAidm13Z2Z4X2ZlbmNlLmgiCiAK LSNkZWZpbmUgVk1XR0ZYX0RSSVZFUl9EQVRFICIyMDE0MDcwNCIKKyNkZWZpbmUgVk1XR0ZYX0RS SVZFUl9EQVRFICIyMDE1MDYyNiIKICNkZWZpbmUgVk1XR0ZYX0RSSVZFUl9NQUpPUiAyCi0jZGVm aW5lIFZNV0dGWF9EUklWRVJfTUlOT1IgNgotI2RlZmluZSBWTVdHRlhfRFJJVkVSX1BBVENITEVW RUwgMQorI2RlZmluZSBWTVdHRlhfRFJJVkVSX01JTk9SIDcKKyNkZWZpbmUgVk1XR0ZYX0RSSVZF Ul9QQVRDSExFVkVMIDAKICNkZWZpbmUgVk1XR0ZYX0ZJTEVfUEFHRV9PRkZTRVQgMHgwMDEwMDAw MAogI2RlZmluZSBWTVdHRlhfRklGT19TVEFUSUNfU0laRSAoMTAyNCoxMDI0KQogI2RlZmluZSBW TVdHRlhfTUFYX1JFTE9DQVRJT05TIDIwNDgKICNkZWZpbmUgVk1XR0ZYX01BWF9WQUxJREFUSU9O UyAyMDQ4CiAjZGVmaW5lIFZNV0dGWF9NQVhfRElTUExBWVMgMTYKICNkZWZpbmUgVk1XR0ZYX0NN RF9CT1VOQ0VfSU5JVF9TSVpFIDMyNzY4Ci0jZGVmaW5lIFZNV0dGWF9FTkFCTEVfU0NSRUVOX1RB UkdFVF9PVEFCTEUgMAorI2RlZmluZSBWTVdHRlhfRU5BQkxFX1NDUkVFTl9UQVJHRVRfT1RBQkxF IDEKIAogLyoKICAqIFBlcmhhcHMgd2Ugc2hvdWxkIGhhdmUgc3lzZnMgZW50cmllcyBmb3IgdGhl c2UuCkBAIC0zMzcsNyArMzM3LDggQEAgc3RydWN0IHZtd19jdHhfYmluZGluZ19zdGF0ZSB7CiBl bnVtIHZtd19kaXNwbGF5X3VuaXRfdHlwZSB7CiAJdm13X2R1X2ludmFsaWQgPSAwLAogCXZtd19k dV9sZWdhY3ksCi0Jdm13X2R1X3NjcmVlbl9vYmplY3QKKwl2bXdfZHVfc2NyZWVuX29iamVjdCwK Kwl2bXdfZHVfc2NyZWVuX3RhcmdldAogfTsKIAogCkBAIC00MDIsNiArNDAzLDEwIEBAIHN0cnVj dCB2bXdfcHJpdmF0ZSB7CiAJdWludDMyX3QgbW1pb19zaXplOwogCXVpbnQzMl90IGZiX21heF93 aWR0aDsKIAl1aW50MzJfdCBmYl9tYXhfaGVpZ2h0OworCXVpbnQzMl90IHRleHR1cmVfbWF4X3dp ZHRoOworCXVpbnQzMl90IHRleHR1cmVfbWF4X2hlaWdodDsKKwl1aW50MzJfdCBzdGR1X21heF93 aWR0aDsKKwl1aW50MzJfdCBzdGR1X21heF9oZWlnaHQ7CiAJdWludDMyX3QgaW5pdGlhbF93aWR0 aDsKIAl1aW50MzJfdCBpbml0aWFsX2hlaWdodDsKIAlfX2xlMzIgX19pb21lbSAqbW1pb192aXJ0 OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfaW9jdGwuYyBiL2Ry aXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2lvY3RsLmMKaW5kZXggNjljOGNlMi4uNTU5NDBi YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfaW9jdGwuYworKysg Yi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9pb2N0bC5jCkBAIC0xMDUsNiArMTA1LDEw IEBAIGludCB2bXdfZ2V0cGFyYW1faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAq ZGF0YSwKIAljYXNlIERSTV9WTVdfUEFSQU1fTUFYX01PQl9TSVpFOgogCQlwYXJhbS0+dmFsdWUg PSBkZXZfcHJpdi0+bWF4X21vYl9zaXplOwogCQlicmVhazsKKwljYXNlIERSTV9WTVdfUEFSQU1f U0NSRUVOX1RBUkdFVDoKKwkJcGFyYW0tPnZhbHVlID0KKwkJCShkZXZfcHJpdi0+YWN0aXZlX2Rp c3BsYXlfdW5pdCA9PSB2bXdfZHVfc2NyZWVuX3RhcmdldCk7CisJCWJyZWFrOwogCWRlZmF1bHQ6 CiAJCURSTV9FUlJPUigiSWxsZWdhbCB2bXdnZnggZ2V0IHBhcmFtIHJlcXVlc3Q6ICVkXG4iLAog CQkJICBwYXJhbS0+cGFyYW0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92 bXdnZnhfa21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9rbXMuYwppbmRleCA3 NTY2YTVhLi42NjgwYWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dm eF9rbXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9rbXMuYwpAQCAtNDYz LDYgKzQ2MywxMSBAQCBzdGF0aWMgaW50IHZtd19mcmFtZWJ1ZmZlcl9zdXJmYWNlX2RpcnR5KHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLAogCQkJCQkJICAgZmxhZ3MsIGNvbG9y LAogCQkJCQkJICAgY2xpcHMsIG51bV9jbGlwcywKIAkJCQkJCSAgIGluYywgTlVMTCk7CisJZWxz ZQorCQlyZXQgPSB2bXdfa21zX3N0ZHVfZG9fc3VyZmFjZV9kaXJ0eShkZXZfcHJpdiwgZmlsZV9w cml2LAorCQkJCQkJICAgICZ2ZmJzLT5iYXNlLAorCQkJCQkJICAgIGNsaXBzLCBudW1fY2xpcHMs CisJCQkJCQkgICAgaW5jKTsKIAogCXZtd19maWZvX2ZsdXNoKGRldl9wcml2LCBmYWxzZSk7CiAJ dHRtX3JlYWRfdW5sb2NrKCZkZXZfcHJpdi0+cmVzZXJ2YXRpb25fc2VtKTsKQEAgLTYzNiw2ICs2 NDEsMTEgQEAgc3RhdGljIGludCB2bXdfZnJhbWVidWZmZXJfZG1hYnVmX2RpcnR5KHN0cnVjdCBk cm1fZnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLAogCQkJCQkJICBmbGFncywgY29sb3IsCiAJCQkJ CQkgIGNsaXBzLCBudW1fY2xpcHMsIGluY3JlbWVudCwKIAkJCQkJCSAgTlVMTCk7CisJfSBlbHNl IHsKKwkJcmV0ID0gdm13X2ttc19zdGR1X2RvX3N1cmZhY2VfZGlydHkoZGV2X3ByaXYsIGZpbGVf cHJpdiwKKwkJCQkJCSAgICAmdmZiZC0+YmFzZSwKKwkJCQkJCSAgICBjbGlwcywgbnVtX2NsaXBz LAorCQkJCQkJICAgIGluY3JlbWVudCk7CiAJfQogCiAJdm13X2ZpZm9fZmx1c2goZGV2X3ByaXYs IGZhbHNlKTsKQEAgLTk5OSw4ICsxMDA5LDYgQEAgaW50IHZtd19rbXNfZ2VuZXJpY19wcmVzZW50 KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCQlicmVhazsKIAl9CiAKLQl2bXdfZmlm b19mbHVzaChkZXZfcHJpdiwgZmFsc2UpOwotCiAJa2ZyZWUoY21kKTsKIG91dF9mcmVlX3RtcDoK IAlrZnJlZSh0bXApOwpAQCAtMTAxNyw4ICsxMDI1LDIxIEBAIGludCB2bXdfa21zX3ByZXNlbnQo c3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKIAkJICAgIHN0cnVjdCBkcm1fdm13X3JlY3Qg KmNsaXBzLAogCQkgICAgdWludDMyX3QgbnVtX2NsaXBzKQogewotCXJldHVybiB2bXdfa21zX2dl bmVyaWNfcHJlc2VudChkZXZfcHJpdiwgZmlsZV9wcml2LCB2ZmIsIHN1cmZhY2UsIHNpZCwKLQkJ CQkgICAgICAgZGVzdFgsIGRlc3RZLCBjbGlwcywgbnVtX2NsaXBzKTsKKwlpbnQgcmV0OworCisJ aWYgKGRldl9wcml2LT5hY3RpdmVfZGlzcGxheV91bml0ID09IHZtd19kdV9zY3JlZW5fdGFyZ2V0 KQorCQlyZXQgPSB2bXdfa21zX3N0ZHVfcHJlc2VudChkZXZfcHJpdiwgZmlsZV9wcml2LCB2ZmIs IHNpZCwKKwkJCQkJICAgZGVzdFgsIGRlc3RZLCBjbGlwcywgbnVtX2NsaXBzKTsKKwllbHNlCisJ CXJldCA9IHZtd19rbXNfZ2VuZXJpY19wcmVzZW50KGRldl9wcml2LCBmaWxlX3ByaXYsIHZmYiwK KwkJCQkJICAgICAgc3VyZmFjZSwgc2lkLCBkZXN0WCwgZGVzdFksCisJCQkJCSAgICAgIGNsaXBz LCBudW1fY2xpcHMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwl2bXdfZmlmb19mbHVz aChkZXZfcHJpdiwgZmFsc2UpOworCisJcmV0dXJuIDA7CiB9CiAKIGludCB2bXdfa21zX3JlYWRi YWNrKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCkBAIC0xMTQxLDkgKzExNjIsMTIgQEAg aW50IHZtd19rbXNfaW5pdChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KQogCWRldi0+bW9k ZV9jb25maWcubWF4X3dpZHRoID0gODE5MjsKIAlkZXYtPm1vZGVfY29uZmlnLm1heF9oZWlnaHQg PSA4MTkyOwogCi0JcmV0ID0gdm13X2ttc19zb3VfaW5pdF9kaXNwbGF5KGRldl9wcml2KTsKLQlp ZiAocmV0KSAvKiBGYWxsYmFjayAqLwotCQlyZXQgPSB2bXdfa21zX2xkdV9pbml0X2Rpc3BsYXko ZGV2X3ByaXYpOworCXJldCA9IHZtd19rbXNfc3RkdV9pbml0X2Rpc3BsYXkoZGV2X3ByaXYpOwor CWlmIChyZXQpIHsKKwkJcmV0ID0gdm13X2ttc19zb3VfaW5pdF9kaXNwbGF5KGRldl9wcml2KTsK KwkJaWYgKHJldCkgLyogRmFsbGJhY2sgKi8KKwkJCXJldCA9IHZtd19rbXNfbGR1X2luaXRfZGlz cGxheShkZXZfcHJpdik7CisJfQogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTExNjAsNiArMTE4NCw4 IEBAIGludCB2bXdfa21zX2Nsb3NlKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJZHJt X21vZGVfY29uZmlnX2NsZWFudXAoZGV2X3ByaXYtPmRldik7CiAJaWYgKGRldl9wcml2LT5hY3Rp dmVfZGlzcGxheV91bml0ID09IHZtd19kdV9zY3JlZW5fb2JqZWN0KQogCQlyZXQgPSB2bXdfa21z X3NvdV9jbG9zZV9kaXNwbGF5KGRldl9wcml2KTsKKwllbHNlIGlmIChkZXZfcHJpdi0+YWN0aXZl X2Rpc3BsYXlfdW5pdCA9PSB2bXdfZHVfc2NyZWVuX3RhcmdldCkKKwkJcmV0ID0gdm13X2ttc19z dGR1X2Nsb3NlX2Rpc3BsYXkoZGV2X3ByaXYpOwogCWVsc2UKIAkJcmV0ID0gdm13X2ttc19sZHVf Y2xvc2VfZGlzcGxheShkZXZfcHJpdik7CiAKQEAgLTEzMTEsNyArMTMzNyw5IEBAIGJvb2wgdm13 X2ttc192YWxpZGF0ZV9tb2RlX3ZyYW0oc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKIAkJ CQl1aW50MzJfdCBwaXRjaCwKIAkJCQl1aW50MzJfdCBoZWlnaHQpCiB7Ci0JcmV0dXJuICgodTY0 KSBwaXRjaCAqICh1NjQpIGhlaWdodCkgPCAodTY0KSBkZXZfcHJpdi0+cHJpbV9iYl9tZW07CisJ cmV0dXJuICgodTY0KSBwaXRjaCAqICh1NjQpIGhlaWdodCkgPCAodTY0KQorCQkoKGRldl9wcml2 LT5hY3RpdmVfZGlzcGxheV91bml0ID09IHZtd19kdV9zY3JlZW5fdGFyZ2V0KSA/CisJCSBkZXZf cHJpdi0+cHJpbV9iYl9tZW0gOiBkZXZfcHJpdi0+dnJhbV9zaXplKTsKIH0KIAogCkBAIC0xNTU4 LDYgKzE1ODYsMTEgQEAgaW50IHZtd19kdV9jb25uZWN0b3JfZmlsbF9tb2RlcyhzdHJ1Y3QgZHJt X2Nvbm5lY3RvciAqY29ubmVjdG9yLAogCWlmIChkZXZfcHJpdi0+YWN0aXZlX2Rpc3BsYXlfdW5p dCA9PSB2bXdfZHVfc2NyZWVuX29iamVjdCkKIAkJYXNzdW1lZF9icHAgPSA0OwogCisJaWYgKGRl dl9wcml2LT5hY3RpdmVfZGlzcGxheV91bml0ID09IHZtd19kdV9zY3JlZW5fdGFyZ2V0KSB7CisJ CW1heF93aWR0aCAgPSBtaW4obWF4X3dpZHRoLCAgZGV2X3ByaXYtPnN0ZHVfbWF4X3dpZHRoKTsK KwkJbWF4X2hlaWdodCA9IG1pbihtYXhfaGVpZ2h0LCBkZXZfcHJpdi0+c3RkdV9tYXhfaGVpZ2h0 KTsKKwl9CisKIAkvKiBBZGQgcHJlZmVycmVkIG1vZGUgKi8KIAltb2RlID0gZHJtX21vZGVfZHVw bGljYXRlKGRldiwgJnByZWZtb2RlKTsKIAlpZiAoIW1vZGUpCkBAIC0xNjc0LDYgKzE3MDcsMTkg QEAgaW50IHZtd19rbXNfdXBkYXRlX2xheW91dF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LCB2b2lkICpkYXRhLAogCQkJYm91bmRpbmdfYm94LmggPSByZWN0c1tpXS55ICsgcmVjdHNbaV0u aDsKIAl9CiAKKwkvKgorCSAqIEZvciBTY3JlZW4gVGFyZ2V0IERpc3BsYXkgVW5pdCwgYWxsIHRo ZSBkaXNwbGF5cyBtdXN0IGZpdAorCSAqIGluc2lkZSBvZiBtYXhpbXVtIHRleHR1cmUgc2l6ZS4K KwkgKi8KKwlpZiAoZGV2X3ByaXYtPmFjdGl2ZV9kaXNwbGF5X3VuaXQgPT0gdm13X2R1X3NjcmVl bl90YXJnZXQpCisJCWlmIChib3VuZGluZ19ib3gudyA+IGRldl9wcml2LT50ZXh0dXJlX21heF93 aWR0aCB8fAorCQkgICAgYm91bmRpbmdfYm94LmggPiBkZXZfcHJpdi0+dGV4dHVyZV9tYXhfaGVp Z2h0KSB7CisJCQlEUk1fRVJST1IoIkxheW91dCBleGNlZWRzIG1heGltdW0gdGV4dHVyZSBzaXpl XG4iKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIG91dF9mcmVlOworCQl9CisKKwogCXZt d19kdV91cGRhdGVfbGF5b3V0KGRldl9wcml2LCBhcmctPm51bV9vdXRwdXRzLCByZWN0cyk7CiAK IG91dF9mcmVlOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21z LmggYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9rbXMuaAppbmRleCAwZjJjMjkxLi41 NDhmYTg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9rbXMuaAor KysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9rbXMuaApAQCAtMjA0LDQgKzIwNCwy NCBAQCBpbnQgdm13X2ttc19zb3VfZG9fZG1hYnVmX2RpcnR5KHN0cnVjdCBkcm1fZmlsZSAqZmls ZV9wcml2LAogCQkJCXN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwcywKIAkJCQl1bnNpZ25lZCBu dW1fY2xpcHMsIGludCBpbmNyZW1lbnQsCiAJCQkJc3RydWN0IHZtd19mZW5jZV9vYmogKipvdXRf ZmVuY2UpOworCisKKy8qCisgKiBTY3JlZW4gVGFyZ2V0IERpc3BsYXkgVW5pdCBmdW5jdGlvbnMg LSB2bXdnZnhfc3RkdS5jCisgKi8KK2ludCB2bXdfa21zX3N0ZHVfaW5pdF9kaXNwbGF5KHN0cnVj dCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpOworaW50IHZtd19rbXNfc3RkdV9jbG9zZV9kaXNwbGF5 KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpOworaW50IHZtd19rbXNfc3RkdV9kb19zdXJm YWNlX2RpcnR5KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJICBzdHJ1Y3QgZHJt X2ZpbGUgKmZpbGVfcHJpdiwKKwkJCQkgIHN0cnVjdCB2bXdfZnJhbWVidWZmZXIgKmZyYW1lYnVm ZmVyLAorCQkJCSAgc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXBzLAorCQkJCSAgdW5zaWduZWQg bnVtX2NsaXBzLCBpbnQgaW5jcmVtZW50KTsKK2ludCB2bXdfa21zX3N0ZHVfcHJlc2VudChzdHJ1 Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAorCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2 LAorCQkJIHN0cnVjdCB2bXdfZnJhbWVidWZmZXIgKnZmYiwKKwkJCSB1aW50MzJfdCB1c2VyX2hh bmRsZSwKKwkJCSBpbnQzMl90IGRlc3RfeCwgaW50MzJfdCBkZXN0X3ksCisJCQkgc3RydWN0IGRy bV92bXdfcmVjdCAqY2xpcHMsCisJCQkgdWludDMyX3QgbnVtX2NsaXBzKTsKKwogI2VuZGlmCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9tb2IuYyBiL2RyaXZlcnMv Z3B1L2RybS92bXdnZngvdm13Z2Z4X21vYi5jCmluZGV4IDQ2Zjk3NWUuLjBmZWFjNTYgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X21vYi5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS92bXdnZngvdm13Z2Z4X21vYi5jCkBAIC0zMSw3ICszMSw4IEBACiAgKiBJZiB3ZSBz ZXQgdXAgdGhlIHNjcmVlbiB0YXJnZXQgb3RhYmxlLCBzY3JlZW4gb2JqZWN0cyBzdG9wIHdvcmtp bmcuCiAgKi8KIAotI2RlZmluZSBWTVdfT1RBQkxFX1NFVFVQX1NVQiAoKFZNV0dGWF9FTkFCTEVf U0NSRUVOX1RBUkdFVF9PVEFCTEUpID8gMCA6IDEpCisjZGVmaW5lIFZNV19PVEFCTEVfU0VUVVBf U1VCICgoVk1XR0ZYX0VOQUJMRV9TQ1JFRU5fVEFSR0VUX09UQUJMRSAmJglcCisJCQkgICAgICAg KGRldl9wcml2LT5jYXBhYmlsaXRpZXMgJiBTVkdBX0NBUF8zRCkpID8gMCA6IDEpCiAKICNpZmRl ZiBDT05GSUdfNjRCSVQKICNkZWZpbmUgVk1XX1BQTl9TSVpFIDgKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3N0ZHUuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngv dm13Z2Z4X3N0ZHUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjgyMzVj Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfc3RkdS5j CkBAIC0wLDAgKzEsMTM2NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHly aWdodCDCqSAyMDE0IFZNd2FyZSwgSW5jLiwgUGFsbyBBbHRvLCBDQS4sIFVTQQorICogQWxsIFJp Z2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVl IG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNv ZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3 YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1 ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2Rp ZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsIGFuZC9vciBz ZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8g d2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3Rp Y2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFy YWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBv cnRpb25zCisgKiBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJ REVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAq IElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5E IE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhP TERFUlMsIEFVVEhPUlMgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xB SU0sCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04g T0YgQ09OVFJBQ1QsIFRPUlQgT1IKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0Yg T1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUKKyAqIFVTRSBPUiBPVEhF UiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K KworI2luY2x1ZGUgInZtd2dmeF9rbXMuaCIKKyNpbmNsdWRlICJzdmdhM2Rfc3VyZmFjZWRlZnMu aCIKKyNpbmNsdWRlIDxkcm0vZHJtX3BsYW5lX2hlbHBlci5oPgorCisjZGVmaW5lIHZtd19jcnRj X3RvX3N0ZHUoeCkgXAorCWNvbnRhaW5lcl9vZih4LCBzdHJ1Y3Qgdm13X3NjcmVlbl90YXJnZXRf ZGlzcGxheV91bml0LCBiYXNlLmNydGMpCisjZGVmaW5lIHZtd19lbmNvZGVyX3RvX3N0ZHUoeCkg XAorCWNvbnRhaW5lcl9vZih4LCBzdHJ1Y3Qgdm13X3NjcmVlbl90YXJnZXRfZGlzcGxheV91bml0 LCBiYXNlLmVuY29kZXIpCisjZGVmaW5lIHZtd19jb25uZWN0b3JfdG9fc3RkdSh4KSBcCisJY29u dGFpbmVyX29mKHgsIHN0cnVjdCB2bXdfc2NyZWVuX3RhcmdldF9kaXNwbGF5X3VuaXQsIGJhc2Uu Y29ubmVjdG9yKQorCisKKworZW51bSBzdGR1X2NvbnRlbnRfdHlwZSB7CisJU0FNRV9BU19ESVNQ TEFZID0gMCwKKwlTRVBBUkFURV9TVVJGQUNFLAorCVNFUEFSQVRFX0RNQQorfTsKKworCisKKy8q KgorICogc3RydWN0IHZtd19zY3JlZW5fdGFyZ2V0X2Rpc3BsYXlfdW5pdAorICoKKyAqIEBiYXNl OiBWTVcgc3BlY2lmaWMgRFUgc3RydWN0dXJlCisgKiBAZGlzcGxheV9zcmY6IHN1cmZhY2UgdG8g YmUgZGlzcGxheWVkLiAgVGhlIGRpbWVuc2lvbiBvZiB0aGlzIHdpbGwgYWx3YXlzCisgKiAgICAg ICAgICAgICAgIG1hdGNoIHRoZSBkaXNwbGF5IG1vZGUuICBJZiB0aGUgZGlzcGxheSBtb2RlIG1h dGNoZXMKKyAqICAgICAgICAgICAgICAgY29udGVudF92ZmJzIGRpbWVuc2lvbnMsIHRoZW4gdGhp cyBpcyBhIHBvaW50ZXIgaW50byB0aGUKKyAqICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyBm aWVsZCBpbiBjb250ZW50X3ZmYnMuICBJZiBub3QsIHRoZW4gdGhpcworICogICAgICAgICAgICAg ICBpcyBhIHNlcGFyYXRlIGJ1ZmZlciB0byB3aGljaCBjb250ZW50X3ZmYnMgd2lsbCBibGl0IHRv LgorICogQGNvbnRlbnRfZmI6IGhvbGRzIHRoZSByZW5kZXJlZCBjb250ZW50LCBjYW4gYmUgYSBz dXJmYWNlIG9yIERNQSBidWZmZXIKKyAqIEBjb250ZW50X3R5cGU6ICBjb250ZW50X2ZiIHR5cGUK KyAqIEBkZWZpbmVkOiAgdHJ1ZSBpZiB0aGUgY3VycmVudCBkaXNwbGF5IHVuaXQgaGFzIGJlZW4g aW5pdGlhbGl6ZWQKKyAqLworc3RydWN0IHZtd19zY3JlZW5fdGFyZ2V0X2Rpc3BsYXlfdW5pdCB7 CisJc3RydWN0IHZtd19kaXNwbGF5X3VuaXQgYmFzZTsKKworCXN0cnVjdCB2bXdfc3VyZmFjZSAg ICAgKmRpc3BsYXlfc3JmOworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmNvbnRlbnRfZmI7CisK KwllbnVtIHN0ZHVfY29udGVudF90eXBlIGNvbnRlbnRfZmJfdHlwZTsKKworCWJvb2wgZGVmaW5l ZDsKK307CisKKworCitzdGF0aWMgdm9pZCB2bXdfc3RkdV9kZXN0cm95KHN0cnVjdCB2bXdfc2Ny ZWVuX3RhcmdldF9kaXNwbGF5X3VuaXQgKnN0ZHUpOworCisKKworLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKgorICogU2NyZWVuIFRhcmdldCBEaXNwbGF5IFVuaXQgaGVscGVyIEZ1bmN0aW9ucworICoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIHZtd19zdGR1X3Bpbl9kaXNwbGF5IC0gcGlu cyB0aGUgcmVzb3VyY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBkaXNwbGF5IHN1cmZhY2UKKyAqCisg KiBAc3RkdTogY29udGFpbnMgdGhlIGRpc3BsYXkgc3VyZmFjZQorICoKKyAqIFNpbmNlIHRoZSBk aXNwbGF5IHN1cmZhY2UgY2FuIGVpdGhlciBiZSBhIHByaXZhdGUgc3VyZmFjZSBhbGxvY2F0ZWQg YnkgdXMsCisgKiBvciBpdCBjYW4gcG9pbnQgdG8gdGhlIGNvbnRlbnQgc3VyZmFjZSwgd2UgdXNl IHRoaXMgZnVuY3Rpb24gdG8gbm90IHBpbiB0aGUKKyAqIHNhbWUgcmVzb3VyY2UgdHdpY2UuCisg Ki8KK3N0YXRpYyBpbnQgdm13X3N0ZHVfcGluX2Rpc3BsYXkoc3RydWN0IHZtd19zY3JlZW5fdGFy Z2V0X2Rpc3BsYXlfdW5pdCAqc3RkdSkKK3sKKwlyZXR1cm4gdm13X3Jlc291cmNlX3Bpbigmc3Rk dS0+ZGlzcGxheV9zcmYtPnJlcyk7Cit9CisKKworCisvKioKKyAqIHZtd19zdGR1X3VucGluX2Rp c3BsYXkgLSB1bnBpbnMgdGhlIHJlc291cmNlIGFzc29jaWF0ZWQgd2l0aCBkaXNwbGF5IHN1cmZh Y2UKKyAqCisgKiBAc3RkdTogY29udGFpbnMgdGhlIGRpc3BsYXkgc3VyZmFjZQorICoKKyAqIElm IHRoZSBkaXNwbGF5IHN1cmZhY2Ugd2FzIHByaXZhdGVkbHkgYWxsb2NhdGVkIGJ5CisgKiB2bXdf c3VyZmFjZV9nYl9wcml2X2RlZmluZSgpIGFuZCBub3QgcmVnaXN0ZXJlZCBhcyBhIGZyYW1lYnVm ZmVyLCB0aGVuIGl0CisgKiB3b24ndCBiZSBhdXRvbWF0aWNhbGx5IGNsZWFuZWQgdXAgd2hlbiBh bGwgdGhlIGZyYW1lYnVmZmVycyBhcmUgZnJlZWQuICBBcworICogc3VjaCwgd2UgaGF2ZSB0byBl eHBsaWNpdGx5IGNhbGwgdm13X3Jlc291cmNlX3VucmVmZXJlbmNlKCkgdG8gZ2V0IGl0IGZyZWVk LgorICovCitzdGF0aWMgdm9pZCB2bXdfc3RkdV91bnBpbl9kaXNwbGF5KHN0cnVjdCB2bXdfc2Ny ZWVuX3RhcmdldF9kaXNwbGF5X3VuaXQgKnN0ZHUpCit7CisJaWYgKHN0ZHUtPmRpc3BsYXlfc3Jm KSB7CisJCXN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcyA9ICZzdGR1LT5kaXNwbGF5X3NyZi0+cmVz OworCisJCXZtd19yZXNvdXJjZV91bnBpbihyZXMpOworCisJCWlmIChzdGR1LT5jb250ZW50X2Zi X3R5cGUgIT0gU0FNRV9BU19ESVNQTEFZKSB7CisJCQl2bXdfcmVzb3VyY2VfdW5yZWZlcmVuY2Uo JnJlcyk7CisJCQlzdGR1LT5jb250ZW50X2ZiX3R5cGUgPSBTQU1FX0FTX0RJU1BMQVk7CisJCX0K KworCQlzdGR1LT5kaXNwbGF5X3NyZiA9IE5VTEw7CisJfQorfQorCisKKworLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKgorICogU2NyZWVuIFRhcmdldCBEaXNwbGF5IFVuaXQgQ1JUQyBGdW5jdGlvbnMK KyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioKKyAqIHZtd19zdGR1X2NydGNfZGVzdHJv eSAtIGNsZWFucyB1cCB0aGUgU1REVQorICoKKyAqIEBjcnRjOiB1c2VkIHRvIGdldCBhIHJlZmVy ZW5jZSB0byB0aGUgY29udGFpbmluZyBTVERVCisgKi8KK3N0YXRpYyB2b2lkIHZtd19zdGR1X2Ny dGNfZGVzdHJveShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJdm13X3N0ZHVfZGVzdHJveSh2 bXdfY3J0Y190b19zdGR1KGNydGMpKTsKK30KKworCisKKy8qKgorICogdm13X3N0ZHVfY29udGVu dF9jb3B5IC0gY29waWVzIGFuIGFyZWEgZnJvbSB0aGUgY29udGVudCB0byBkaXNwbGF5IHN1cmZh Y2UKKyAqCisgKiBAZGV2X3ByaXY6ICBWTVcgRFJNIGRldmljZQorICogQGZpbGVfcHJpdjogUG9p bnRlciB0byBhIGRybSBmaWxlIHByaXZhdGUgc3RydWN0dXJlCisgKiBAc3RkdTogU1REVSB3aG9z ZSBkaXNwbGF5IHN1cmZhY2Ugd2lsbCBiZSBibGl0dGVkIHRvCisgKiBAY29udGVudF94OiB0b3Av bGVmdCBjb3JuZXIgb2YgdGhlIGNvbnRlbnQgYXJlYSB0byBibGl0IGZyb20KKyAqIEBjb250ZW50 X3k6IHRvcC9sZWZ0IGNvcm5lciBvZiB0aGUgY29udGVudCBhcmVhIHRvIGJsaXQgZnJvbQorICog QHdpZHRoOiB3aWR0aCBvZiB0aGUgYmxpdCBhcmVhCisgKiBAaGVpZ2h0OiBoZWlnaHQgb2YgdGhl IGJsaXQgYXJlYQorICogQGRpc3BsYXlfeDogdG9wL2xlZnQgY29ybmVyIG9mIHRoZSBkaXNwbGF5 IGFyZWEgdG8gYmxpdCB0bworICogQGRpc3BsYXlfeTogdG9wL2xlZnQgY29ybmVyIG9mIHRoZSBk aXNwbGF5IGFyZWEgdG8gYmxpdCB0bworICoKKyAqIENvcGllcyBhbiBhcmVhIGZyb20gdGhlIGNv bnRlbnQgc3VyZmFjZSB0byB0aGUgZGlzcGxheSBzdXJmYWNlLgorICoKKyAqIFJFVFVSTnM6Cisg KiAwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb24gZmFpbHVyZQorICovCitzdGF0aWMgaW50IHZt d19zdGR1X2NvbnRlbnRfY29weShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCSBz dHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJCQkgc3RydWN0IHZtd19zY3JlZW5fdGFyZ2V0 X2Rpc3BsYXlfdW5pdCAqc3RkdSwKKwkJCQkgdWludDMyX3QgY29udGVudF94LCB1aW50MzJfdCBj b250ZW50X3ksCisJCQkJIHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQsCisJCQkJIHVp bnQzMl90IGRpc3BsYXlfeCwgdWludDMyX3QgZGlzcGxheV95KQoreworCXNpemVfdCBmaWZvX3Np emU7CisJaW50IHJldDsKKwl2b2lkICpjbWQ7CisKKwlzdHJ1Y3Qgdm13X3N1cmZhY2VfZG1hIHsK KwkJU1ZHQTNkQ21kSGVhZGVyICAgICBoZWFkZXI7CisJCVNWR0EzZENtZFN1cmZhY2VETUEgYm9k eTsKKwkJU1ZHQTNkQ29weUJveCAgICAgICBhcmVhOworCQlTVkdBM2RDbWRTdXJmYWNlRE1BU3Vm Zml4IHN1ZmZpeDsKKwl9IHN1cmZhY2VfZG1hX2NtZDsKKworCXN0cnVjdCB7CisJCVNWR0EzZENt ZEhlYWRlciAgICAgIGhlYWRlcjsKKwkJU1ZHQTNkQ21kU3VyZmFjZUNvcHkgYm9keTsKKwkJU1ZH QTNkQ29weUJveCAgICAgICAgYXJlYTsKKwl9IHN1cmZhY2VfY3B5X2NtZDsKKworCisJLyoKKwkg KiBDYW4gb25seSBjb3B5IGlmIGNvbnRlbnQgYW5kIGRpc3BsYXkgc3VyZmFjZXMgZXhpc3QgYW5k IGFyZSBub3QKKwkgKiB0aGUgc2FtZSBzdXJmYWNlCisJICovCisJaWYgKHN0ZHUtPmRpc3BsYXlf c3JmID09IE5VTEwgfHwgc3RkdS0+Y29udGVudF9mYiA9PSBOVUxMIHx8CisJICAgIHN0ZHUtPmNv bnRlbnRfZmJfdHlwZSA9PSBTQU1FX0FTX0RJU1BMQVkpIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJ fQorCisJaWYgKHN0ZHUtPmNvbnRlbnRfZmJfdHlwZSA9PSBTRVBBUkFURV9ETUEpIHsKKwkJc3Ry dWN0IHZtd19mcmFtZWJ1ZmZlciAqY29udGVudF92ZmI7CisJCXN0cnVjdCB2bXdfZnJhbWVidWZm ZXJfZG1hYnVmICpjb250ZW50X3ZmYmQ7CisJCXN0cnVjdCB2bXdfZnJhbWVidWZmZXJfc3VyZmFj ZSAqY29udGVudF92ZmJzOworCQlzdHJ1Y3QgZHJtX3Ztd19zaXplIGN1cl9zaXplID0gezB9Owor CQljb25zdCBzdHJ1Y3Qgc3ZnYTNkX3N1cmZhY2VfZGVzYyAqZGVzYzsKKwkJU1ZHQTNkQ21kU3Vy ZmFjZURNQVN1ZmZpeCAqc3VmZml4OworCQlTVkdBR3Vlc3RQdHIgcHRyOworCisJCWNvbnRlbnRf dmZiICA9IHZtd19mcmFtZWJ1ZmZlcl90b192ZmIoc3RkdS0+Y29udGVudF9mYik7CisJCWNvbnRl bnRfdmZiZCA9IHZtd19mcmFtZWJ1ZmZlcl90b192ZmJkKHN0ZHUtPmNvbnRlbnRfZmIpOworCQlj b250ZW50X3ZmYnMgPSB2bXdfZnJhbWVidWZmZXJfdG9fdmZicyhzdGR1LT5jb250ZW50X2ZiKTsK KworCQljdXJfc2l6ZS53aWR0aCAgPSB3aWR0aDsKKwkJY3VyX3NpemUuaGVpZ2h0ID0gaGVpZ2h0 OworCQljdXJfc2l6ZS5kZXB0aCAgPSAxOworCisJCWRlc2MgPSBzdmdhM2RzdXJmYWNlX2dldF9k ZXNjKGNvbnRlbnRfdmZicy0+c3VyZmFjZS0+Zm9ybWF0KTsKKworCisJCWZpZm9fc2l6ZSA9IHNp emVvZihzdXJmYWNlX2RtYV9jbWQpOworCisJCW1lbXNldCgmc3VyZmFjZV9kbWFfY21kLCAwLCBm aWZvX3NpemUpOworCisJCXB0ci5nbXJJZCAgPSBjb250ZW50X3ZmYi0+dXNlcl9oYW5kbGU7CisJ CXB0ci5vZmZzZXQgPSAwOworCisJCXN1cmZhY2VfZG1hX2NtZC5oZWFkZXIuaWQgICA9IFNWR0Ff M0RfQ01EX1NVUkZBQ0VfRE1BOworCQlzdXJmYWNlX2RtYV9jbWQuaGVhZGVyLnNpemUgPSBzaXpl b2Yoc3VyZmFjZV9kbWFfY21kLmJvZHkpICsKKwkJCQkJICAgICAgc2l6ZW9mKHN1cmZhY2VfZG1h X2NtZC5hcmVhKSArCisJCQkJCSAgICAgIHNpemVvZihzdXJmYWNlX2RtYV9jbWQuc3VmZml4KTsK KworCQlzdXJmYWNlX2RtYV9jbWQuYm9keS5ndWVzdC5wdHIgICA9IHB0cjsKKwkJc3VyZmFjZV9k bWFfY21kLmJvZHkuZ3Vlc3QucGl0Y2ggPSBzdGR1LT5jb250ZW50X2ZiLT5waXRjaGVzWzBdOwor CQlzdXJmYWNlX2RtYV9jbWQuYm9keS5ob3N0LnNpZCAgICA9IHN0ZHUtPmRpc3BsYXlfc3JmLT5y ZXMuaWQ7CisJCXN1cmZhY2VfZG1hX2NtZC5ib2R5Lmhvc3QuZmFjZSAgID0gMDsKKwkJc3VyZmFj ZV9kbWFfY21kLmJvZHkuaG9zdC5taXBtYXAgPSAwOworCQlzdXJmYWNlX2RtYV9jbWQuYm9keS50 cmFuc2ZlciAgICA9IFNWR0EzRF9XUklURV9IT1NUX1ZSQU07CisKKwkJc3VyZmFjZV9kbWFfY21k LmFyZWEuc3JjeCA9IGNvbnRlbnRfeDsKKwkJc3VyZmFjZV9kbWFfY21kLmFyZWEuc3JjeSA9IGNv bnRlbnRfeTsKKwkJc3VyZmFjZV9kbWFfY21kLmFyZWEueCAgICA9IGRpc3BsYXlfeDsKKwkJc3Vy ZmFjZV9kbWFfY21kLmFyZWEueSAgICA9IGRpc3BsYXlfeTsKKwkJc3VyZmFjZV9kbWFfY21kLmFy ZWEuZCAgICA9IDE7CisJCXN1cmZhY2VfZG1hX2NtZC5hcmVhLncgICAgPSB3aWR0aDsKKwkJc3Vy ZmFjZV9kbWFfY21kLmFyZWEuaCAgICA9IGhlaWdodDsKKworCQlzdWZmaXggPSAmc3VyZmFjZV9k bWFfY21kLnN1ZmZpeDsKKworCQlzdWZmaXgtPnN1ZmZpeFNpemUgICAgPSBzaXplb2YoKnN1ZmZp eCk7CisJCXN1ZmZpeC0+bWF4aW11bU9mZnNldCA9IHN2Z2EzZHN1cmZhY2VfZ2V0X2ltYWdlX2J1 ZmZlcl9zaXplKAorCQkJCQkJZGVzYywKKwkJCQkJCSZjdXJfc2l6ZSwKKwkJCQkJCXN0ZHUtPmNv bnRlbnRfZmItPnBpdGNoZXNbMF0pOworCisJCWNtZCA9ICh2b2lkICopICZzdXJmYWNlX2RtYV9j bWQ7CisJfSBlbHNlIHsKKwkJc3RydWN0IHZtd19mcmFtZWJ1ZmZlciAqY29udGVudF92ZmI7CisK KwkJY29udGVudF92ZmIgPSB2bXdfZnJhbWVidWZmZXJfdG9fdmZiKHN0ZHUtPmNvbnRlbnRfZmIp OworCisJCWZpZm9fc2l6ZSA9IHNpemVvZihzdXJmYWNlX2NweV9jbWQpOworCisJCW1lbXNldCgm c3VyZmFjZV9jcHlfY21kLCAwLCBzaXplb2Yoc3VyZmFjZV9jcHlfY21kKSk7CisKKwkJc3VyZmFj ZV9jcHlfY21kLmhlYWRlci5pZCAgID0gU1ZHQV8zRF9DTURfU1VSRkFDRV9DT1BZOworCQlzdXJm YWNlX2NweV9jbWQuaGVhZGVyLnNpemUgPSBzaXplb2Yoc3VyZmFjZV9jcHlfY21kLmJvZHkpICsK KwkJCQkJICAgICAgc2l6ZW9mKHN1cmZhY2VfY3B5X2NtZC5hcmVhKTsKKworCQlzdXJmYWNlX2Nw eV9jbWQuYm9keS5zcmMuc2lkICA9IGNvbnRlbnRfdmZiLT51c2VyX2hhbmRsZTsKKwkJc3VyZmFj ZV9jcHlfY21kLmJvZHkuZGVzdC5zaWQgPSBzdGR1LT5kaXNwbGF5X3NyZi0+cmVzLmlkOworCisJ CXN1cmZhY2VfY3B5X2NtZC5hcmVhLnNyY3ggPSBjb250ZW50X3g7CisJCXN1cmZhY2VfY3B5X2Nt ZC5hcmVhLnNyY3kgPSBjb250ZW50X3k7CisJCXN1cmZhY2VfY3B5X2NtZC5hcmVhLnggICAgPSBk aXNwbGF5X3g7CisJCXN1cmZhY2VfY3B5X2NtZC5hcmVhLnkgICAgPSBkaXNwbGF5X3k7CisJCXN1 cmZhY2VfY3B5X2NtZC5hcmVhLmQgICAgPSAxOworCQlzdXJmYWNlX2NweV9jbWQuYXJlYS53ICAg ID0gd2lkdGg7CisJCXN1cmZhY2VfY3B5X2NtZC5hcmVhLmggICAgPSBoZWlnaHQ7CisKKwkJY21k ID0gKHZvaWQgKikgJnN1cmZhY2VfY3B5X2NtZDsKKwl9CisKKwlyZXQgPSB2bXdfZXhlY2J1Zl9w cm9jZXNzKGZpbGVfcHJpdiwgZGV2X3ByaXYsIE5VTEwsIGNtZCwKKwkJCQkgIGZpZm9fc2l6ZSwg MCwgVk1XX1FVSVJLX1NDUkVFTlRBUkdFVCwKKwkJCQkgIE5VTEwsIE5VTEwpOworCisJcmV0dXJu IHJldDsKK30KKworCisKKy8qKgorICogdm13X3N0ZHVfZGVmaW5lX3N0IC0gRGVmaW5lcyBhIFNj cmVlbiBUYXJnZXQKKyAqCisgKiBAZGV2X3ByaXY6ICBWTVcgRFJNIGRldmljZQorICogQHN0ZHU6 IGRpc3BsYXkgdW5pdCB0byBjcmVhdGUgYSBTY3JlZW4gVGFyZ2V0IGZvcgorICoKKyAqIENyZWF0 ZXMgYSBTVERVIHRoYXQgd2UgY2FuIHVzZWQgbGF0ZXIuICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxl ZCB3aGVuZXZlciB0aGUKKyAqIGZyYW1lYnVmZmVyIHNpemUgY2hhbmdlcy4KKyAqCisgKiBSRVRV Uk5zOgorICogMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG9uIGZhaWx1cmUKKyAqLworc3RhdGlj IGludCB2bXdfc3RkdV9kZWZpbmVfc3Qoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJ CSAgICAgIHN0cnVjdCB2bXdfc2NyZWVuX3RhcmdldF9kaXNwbGF5X3VuaXQgKnN0ZHUpCit7CisJ c3RydWN0IHsKKwkJU1ZHQTNkQ21kSGVhZGVyIGhlYWRlcjsKKwkJU1ZHQTNkQ21kRGVmaW5lR0JT Y3JlZW5UYXJnZXQgYm9keTsKKwl9ICpjbWQ7CisKKwljbWQgPSB2bXdfZmlmb19yZXNlcnZlKGRl dl9wcml2LCBzaXplb2YoKmNtZCkpOworCisJaWYgKHVubGlrZWx5KGNtZCA9PSBOVUxMKSkgewor CQlEUk1fRVJST1IoIk91dCBvZiBGSUZPIHNwYWNlIGRlZmluaW5nIFNjcmVlbiBUYXJnZXRcbiIp OworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwljbWQtPmhlYWRlci5pZCAgID0gU1ZHQV8zRF9D TURfREVGSU5FX0dCX1NDUkVFTlRBUkdFVDsKKwljbWQtPmhlYWRlci5zaXplID0gc2l6ZW9mKGNt ZC0+Ym9keSk7CisKKwljbWQtPmJvZHkuc3RpZCAgID0gc3RkdS0+YmFzZS51bml0OworCWNtZC0+ Ym9keS53aWR0aCAgPSBzdGR1LT5kaXNwbGF5X3NyZi0+YmFzZV9zaXplLndpZHRoOworCWNtZC0+ Ym9keS5oZWlnaHQgPSBzdGR1LT5kaXNwbGF5X3NyZi0+YmFzZV9zaXplLmhlaWdodDsKKwljbWQt PmJvZHkuZmxhZ3MgID0gKDAgPT0gY21kLT5ib2R5LnN0aWQpID8gU1ZHQV9TVEZMQUdfUFJJTUFS WSA6IDA7CisJY21kLT5ib2R5LmRwaSAgICA9IDA7CisJY21kLT5ib2R5LnhSb290ICA9IHN0ZHUt PmJhc2UuY3J0Yy54OworCWNtZC0+Ym9keS55Um9vdCAgPSBzdGR1LT5iYXNlLmNydGMueTsKKwor CWlmICghc3RkdS0+YmFzZS5pc19pbXBsaWNpdCkgeworCQljbWQtPmJvZHkueFJvb3QgID0gc3Rk dS0+YmFzZS5ndWlfeDsKKwkJY21kLT5ib2R5LnlSb290ICA9IHN0ZHUtPmJhc2UuZ3VpX3k7CisJ fQorCisJdm13X2ZpZm9fY29tbWl0KGRldl9wcml2LCBzaXplb2YoKmNtZCkpOworCisJc3RkdS0+ ZGVmaW5lZCA9IHRydWU7CisKKwlyZXR1cm4gMDsKK30KKworCisKKy8qKgorICogdm13X3N0ZHVf YmluZF9zdCAtIEJpbmRzIGEgc3VyZmFjZSB0byBhIFNjcmVlbiBUYXJnZXQKKyAqCisgKiBAZGV2 X3ByaXY6IFZNVyBEUk0gZGV2aWNlCisgKiBAc3RkdTogZGlzcGxheSB1bml0IGFmZmVjdGVkCisg KiBAcmVzOiBCdWZmZXIgdG8gYmluZCB0byB0aGUgc2NyZWVuIHRhcmdldC4gIFNldCB0byBOVUxM IHRvIGJsYW5rIHNjcmVlbi4KKyAqCisgKiBCaW5kaW5nIGEgc3VyZmFjZSB0byBhIFNjcmVlbiBU YXJnZXQgdGhlIHNhbWUgYXMgZmxpcHBpbmcKKyAqLworc3RhdGljIGludCB2bXdfc3RkdV9iaW5k X3N0KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkgICAgc3RydWN0IHZtd19zY3Jl ZW5fdGFyZ2V0X2Rpc3BsYXlfdW5pdCAqc3RkdSwKKwkJCSAgICBzdHJ1Y3Qgdm13X3Jlc291cmNl ICpyZXMpCit7CisJU1ZHQTNkU3VyZmFjZUltYWdlSWQgaW1hZ2U7CisKKwlzdHJ1Y3QgeworCQlT VkdBM2RDbWRIZWFkZXIgaGVhZGVyOworCQlTVkdBM2RDbWRCaW5kR0JTY3JlZW5UYXJnZXQgYm9k eTsKKwl9ICpjbWQ7CisKKworCWlmICghc3RkdS0+ZGVmaW5lZCkgeworCQlEUk1fRVJST1IoIk5v IHNjcmVlbiB0YXJnZXQgZGVmaW5lZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8q IFNldCB1cCBpbWFnZSB1c2luZyBpbmZvcm1hdGlvbiBpbiB2ZmIgKi8KKwltZW1zZXQoJmltYWdl LCAwLCBzaXplb2YoaW1hZ2UpKTsKKwlpbWFnZS5zaWQgPSByZXMgPyByZXMtPmlkIDogU1ZHQTNE X0lOVkFMSURfSUQ7CisKKwljbWQgPSB2bXdfZmlmb19yZXNlcnZlKGRldl9wcml2LCBzaXplb2Yo KmNtZCkpOworCisJaWYgKHVubGlrZWx5KGNtZCA9PSBOVUxMKSkgeworCQlEUk1fRVJST1IoIk91 dCBvZiBGSUZPIHNwYWNlIGJpbmRpbmcgYSBzY3JlZW4gdGFyZ2V0XG4iKTsKKwkJcmV0dXJuIC1F Tk9NRU07CisJfQorCisJY21kLT5oZWFkZXIuaWQgICA9IFNWR0FfM0RfQ01EX0JJTkRfR0JfU0NS RUVOVEFSR0VUOworCWNtZC0+aGVhZGVyLnNpemUgPSBzaXplb2YoY21kLT5ib2R5KTsKKworCWNt ZC0+Ym9keS5zdGlkICAgPSBzdGR1LT5iYXNlLnVuaXQ7CisJY21kLT5ib2R5LmltYWdlICA9IGlt YWdlOworCisJdm13X2ZpZm9fY29tbWl0KGRldl9wcml2LCBzaXplb2YoKmNtZCkpOworCisJcmV0 dXJuIDA7Cit9CisKKworCisvKioKKyAqIHZtd19zdGR1X3VwZGF0ZV9zdCAtIFVwZGF0ZXMgYSBT Y3JlZW4gVGFyZ2V0CisgKgorICogQGRldl9wcml2OiBWTVcgRFJNIGRldmljZQorICogQGZpbGVf cHJpdjogUG9pbnRlciB0byBhIGRybSBmaWxlIHByaXZhdGUgc3RydWN0dXJlCisgKiBAc3RkdTog ZGlzcGxheSB1bml0IGFmZmVjdGVkCisgKiBAdXBkYXRlX2FyZWE6IGFyZWEgdGhhdCBuZWVkcyB0 byBiZSB1cGRhdGVkCisgKgorICogVGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSBjYWxsZWQgd2hl bmV2ZXIgdGhlIGNvbnRlbnQgb2YgYSBzY3JlZW4KKyAqIHRhcmdldCBjaGFuZ2VzLgorICogSWYg dGhlIGRpc3BsYXkgYW5kIGNvbnRlbnQgYnVmZmVycyBhcmUgZGlmZmVyZW50LCB0aGVuIHRoaXMg ZnVuY3Rpb24gZG9lcworICogYSBibGl0IGZpcnN0IGZyb20gdGhlIGNvbnRlbnQgYnVmZmVyIHRv IHRoZSBkaXNwbGF5IGJ1ZmZlciBiZWZvcmUgaXNzdWluZworICogdGhlIFNjcmVlbiBUYXJnZXQg dXBkYXRlIGNvbW1hbmQuCisgKgorICogUkVUVVJOUzoKKyAqIDAgb24gc3VjY2VzcywgZXJyb3Ig Y29kZSBvbiBmYWlsdXJlCisgKi8KK3N0YXRpYyBpbnQgdm13X3N0ZHVfdXBkYXRlX3N0KHN0cnVj dCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVf cHJpdiwKKwkJCSAgICAgIHN0cnVjdCB2bXdfc2NyZWVuX3RhcmdldF9kaXNwbGF5X3VuaXQgKnN0 ZHUsCisJCQkgICAgICBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqdXBkYXRlX2FyZWEpCit7CisJdTMy IHdpZHRoLCBoZWlnaHQ7CisJdTMyIGRpc3BsYXlfdXBkYXRlX3gsIGRpc3BsYXlfdXBkYXRlX3k7 CisJdW5zaWduZWQgc2hvcnQgZGlzcGxheV94MSwgZGlzcGxheV95MSwgZGlzcGxheV94MiwgZGlz cGxheV95MjsKKworCXN0cnVjdCB7CisJCVNWR0EzZENtZEhlYWRlciBoZWFkZXI7CisJCVNWR0Ez ZENtZFVwZGF0ZUdCU2NyZWVuVGFyZ2V0IGJvZHk7CisJfSAqY21kOworCisKKwlpZiAoIXN0ZHUt PmRlZmluZWQpIHsKKwkJRFJNX0VSUk9SKCJObyBzY3JlZW4gdGFyZ2V0IGRlZmluZWQiKTsKKwkJ cmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogRGlzcGxheSBjb29yZGluYXRlcyByZWxhdGl2ZSB0 byBpdHMgcG9zaXRpb24gaW4gY29udGVudCBzdXJmYWNlICovCisJZGlzcGxheV94MSA9IHN0ZHUt PmJhc2UuY3J0Yy54OworCWRpc3BsYXlfeTEgPSBzdGR1LT5iYXNlLmNydGMueTsKKwlkaXNwbGF5 X3gyID0gZGlzcGxheV94MSArIHN0ZHUtPmRpc3BsYXlfc3JmLT5iYXNlX3NpemUud2lkdGg7CisJ ZGlzcGxheV95MiA9IGRpc3BsYXlfeTEgKyBzdGR1LT5kaXNwbGF5X3NyZi0+YmFzZV9zaXplLmhl aWdodDsKKworCS8qIERvIG5vdGhpbmcgaWYgdGhlIHVwZGF0ZSBhcmVhIGlzIG91dHNpZGUgb2Yg dGhlIGRpc3BsYXkgc3VyZmFjZSAqLworCWlmICh1cGRhdGVfYXJlYS0+eDIgPD0gZGlzcGxheV94 MSB8fCB1cGRhdGVfYXJlYS0+eDEgPj0gZGlzcGxheV94MiB8fAorCSAgICB1cGRhdGVfYXJlYS0+ eTIgPD0gZGlzcGxheV95MSB8fCB1cGRhdGVfYXJlYS0+eTEgPj0gZGlzcGxheV95MikKKwkJcmV0 dXJuIDA7CisKKwkvKiBUaGUgdG9wLWxlZnQgaGFuZCBjb3JuZXIgb2YgdGhlIHVwZGF0ZSBhcmVh IGluIGRpc3BsYXkgc3VyZmFjZSAqLworCWRpc3BsYXlfdXBkYXRlX3ggPSBtYXgodXBkYXRlX2Fy ZWEtPngxIC0gZGlzcGxheV94MSwgMCk7CisJZGlzcGxheV91cGRhdGVfeSA9IG1heCh1cGRhdGVf YXJlYS0+eTEgLSBkaXNwbGF5X3kxLCAwKTsKKworCXdpZHRoICA9IG1pbih1cGRhdGVfYXJlYS0+ eDIsIGRpc3BsYXlfeDIpIC0KKwkJIG1heCh1cGRhdGVfYXJlYS0+eDEsIGRpc3BsYXlfeDEpOwor CWhlaWdodCA9IG1pbih1cGRhdGVfYXJlYS0+eTIsIGRpc3BsYXlfeTIpIC0KKwkJIG1heCh1cGRh dGVfYXJlYS0+eTEsIGRpc3BsYXlfeTEpOworCisJaWYgKGZpbGVfcHJpdiAmJiBzdGR1LT5jb250 ZW50X2ZiX3R5cGUgIT0gU0FNRV9BU19ESVNQTEFZKSB7CisJCWludCByZXQ7CisKKwkJcmV0ID0g dm13X3N0ZHVfY29udGVudF9jb3B5KGRldl9wcml2LCBmaWxlX3ByaXYsCisJCQkJCSAgICBzdGR1 LAorCQkJCQkgICAgbWF4KHVwZGF0ZV9hcmVhLT54MSwgZGlzcGxheV94MSksCisJCQkJCSAgICBt YXgodXBkYXRlX2FyZWEtPnkxLCBkaXNwbGF5X3kxKSwKKwkJCQkJICAgIHdpZHRoLCBoZWlnaHQs CisJCQkJCSAgICBkaXNwbGF5X3VwZGF0ZV94LCBkaXNwbGF5X3VwZGF0ZV95KTsKKwkJaWYgKHVu bGlrZWx5KHJldCAhPSAwKSkgeworCQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYmxpdCBjb250ZW50 XG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwljbWQgPSB2bXdfZmlmb19yZXNlcnZl KGRldl9wcml2LCBzaXplb2YoKmNtZCkpOworCisJaWYgKHVubGlrZWx5KGNtZCA9PSBOVUxMKSkg eworCQlEUk1fRVJST1IoIk91dCBvZiBGSUZPIHNwYWNlIHVwZGF0aW5nIGEgU2NyZWVuIFRhcmdl dFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWNtZC0+aGVhZGVyLmlkICAgPSBTVkdB XzNEX0NNRF9VUERBVEVfR0JfU0NSRUVOVEFSR0VUOworCWNtZC0+aGVhZGVyLnNpemUgPSBzaXpl b2YoY21kLT5ib2R5KTsKKworCWNtZC0+Ym9keS5zdGlkICAgPSBzdGR1LT5iYXNlLnVuaXQ7CisJ Y21kLT5ib2R5LnJlY3QueCA9IGRpc3BsYXlfdXBkYXRlX3g7CisJY21kLT5ib2R5LnJlY3QueSA9 IGRpc3BsYXlfdXBkYXRlX3k7CisJY21kLT5ib2R5LnJlY3QudyA9IHdpZHRoOworCWNtZC0+Ym9k eS5yZWN0LmggPSBoZWlnaHQ7CisKKwl2bXdfZmlmb19jb21taXQoZGV2X3ByaXYsIHNpemVvZigq Y21kKSk7CisKKwlyZXR1cm4gMDsKK30KKworCisKKy8qKgorICogdm13X3N0ZHVfZGVzdHJveV9z dCAtIERlc3Ryb3kgYSBTY3JlZW4gVGFyZ2V0CisgKgorICogQGRldl9wcml2OiAgVk1XIERSTSBk ZXZpY2UKKyAqIEBzdGR1OiBkaXNwbGF5IHVuaXQgdG8gZGVzdHJveQorICovCitzdGF0aWMgaW50 IHZtd19zdGR1X2Rlc3Ryb3lfc3Qoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCSAg ICAgICBzdHJ1Y3Qgdm13X3NjcmVlbl90YXJnZXRfZGlzcGxheV91bml0ICpzdGR1KQoreworCWlu dCAgICByZXQ7CisKKwlzdHJ1Y3QgeworCQlTVkdBM2RDbWRIZWFkZXIgaGVhZGVyOworCQlTVkdB M2RDbWREZXN0cm95R0JTY3JlZW5UYXJnZXQgYm9keTsKKwl9ICpjbWQ7CisKKworCS8qIE5vdGhp bmcgdG8gZG8gaWYgbm90IHN1Y2Nlc3NmdWxseSBkZWZpbmVkICovCisJaWYgKHVubGlrZWx5KCFz dGR1LT5kZWZpbmVkKSkKKwkJcmV0dXJuIDA7CisKKwljbWQgPSB2bXdfZmlmb19yZXNlcnZlKGRl dl9wcml2LCBzaXplb2YoKmNtZCkpOworCisJaWYgKHVubGlrZWx5KGNtZCA9PSBOVUxMKSkgewor CQlEUk1fRVJST1IoIk91dCBvZiBGSUZPIHNwYWNlLCBzY3JlZW4gdGFyZ2V0IG5vdCBkZXN0cm95 ZWRcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwljbWQtPmhlYWRlci5pZCAgID0gU1ZH QV8zRF9DTURfREVTVFJPWV9HQl9TQ1JFRU5UQVJHRVQ7CisJY21kLT5oZWFkZXIuc2l6ZSA9IHNp emVvZihjbWQtPmJvZHkpOworCisJY21kLT5ib2R5LnN0aWQgICA9IHN0ZHUtPmJhc2UudW5pdDsK KworCXZtd19maWZvX2NvbW1pdChkZXZfcHJpdiwgc2l6ZW9mKCpjbWQpKTsKKworCS8qIEZvcmNl IHN5bmMgKi8KKwlyZXQgPSB2bXdfZmFsbGJhY2tfd2FpdChkZXZfcHJpdiwgZmFsc2UsIHRydWUs IDAsIGZhbHNlLCAzKkhaKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlEUk1fRVJST1Io IkZhaWxlZCB0byBzeW5jIHdpdGggSFciKTsKKworCXN0ZHUtPmRlZmluZWQgPSBmYWxzZTsKKwor CXJldHVybiByZXQ7Cit9CisKKworCisvKioKKyAqIHZtd19zdGR1X2NydGNfc2V0X2NvbmZpZyAt IFNldHMgYSBtb2RlCisgKgorICogQHNldDogIG1vZGUgcGFyYW1ldGVycworICoKKyAqIFRoaXMg ZnVuY3Rpb24gaXMgdGhlIGRldmljZS1zcGVjaWZpYyBwb3J0aW9uIG9mIHRoZSBEUk0gQ1JUQyBt b2RlIHNldC4KKyAqIEZvciB0aGUgU1ZHQSBkZXZpY2UsIHdlIGRvIHRoaXMgYnkgZGVmaW5pbmcg YSBTY3JlZW4gVGFyZ2V0LCBiaW5kaW5nIGEKKyAqIEdCIFN1cmZhY2UgdG8gdGhhdCB0YXJnZXQs IGFuZCBmaW5hbGx5IHVwZGF0ZSB0aGUgc2NyZWVuIHRhcmdldC4KKyAqCisgKiBSRVRVUk5TOgor ICogMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG90aGVyd2lzZQorICovCitzdGF0aWMgaW50IHZt d19zdGR1X2NydGNfc2V0X2NvbmZpZyhzdHJ1Y3QgZHJtX21vZGVfc2V0ICpzZXQpCit7CisJc3Ry dWN0IHZtd19wcml2YXRlICpkZXZfcHJpdjsKKwlzdHJ1Y3Qgdm13X3NjcmVlbl90YXJnZXRfZGlz cGxheV91bml0ICpzdGR1OworCXN0cnVjdCB2bXdfZnJhbWVidWZmZXIgKnZmYjsKKwlzdHJ1Y3Qg dm13X2ZyYW1lYnVmZmVyX3N1cmZhY2UgKm5ld192ZmJzOworCXN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICptb2RlOworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgICpuZXdfZmI7CisJc3RydWN0IGRy bV9jcnRjICAgICAgKmNydGM7CisJc3RydWN0IGRybV9lbmNvZGVyICAgKmVuY29kZXI7CisJc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKwlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCB1cGRh dGVfYXJlYSA9IHswfTsKKwlpbnQgICAgcmV0OworCisKKwlpZiAoIXNldCB8fCAhc2V0LT5jcnRj KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNydGMgICAgID0gc2V0LT5jcnRjOworCWNydGMtPngg ID0gc2V0LT54OworCWNydGMtPnkgID0gc2V0LT55OworCXN0ZHUgICAgID0gdm13X2NydGNfdG9f c3RkdShjcnRjKTsKKwltb2RlICAgICA9IHNldC0+bW9kZTsKKwluZXdfZmIgICA9IHNldC0+ZmI7 CisJZGV2X3ByaXYgPSB2bXdfcHJpdihjcnRjLT5kZXYpOworCisKKwlpZiAoc2V0LT5udW1fY29u bmVjdG9ycyA+IDEpIHsKKwkJRFJNX0VSUk9SKCJUb28gbWFueSBjb25uZWN0b3JzXG4iKTsKKwkJ cmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHNldC0+bnVtX2Nvbm5lY3RvcnMgPT0gMSAmJgor CSAgICBzZXQtPmNvbm5lY3RvcnNbMF0gIT0gJnN0ZHUtPmJhc2UuY29ubmVjdG9yKSB7CisJCURS TV9FUlJPUigiQ29ubmVjdG9ycyBkb24ndCBtYXRjaCAlcCAlcFxuIiwKKwkJCXNldC0+Y29ubmVj dG9yc1swXSwgJnN0ZHUtPmJhc2UuY29ubmVjdG9yKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQor CisKKwkvKiBTaW5jZSB0aGV5IGFsd2F5cyBtYXAgb25lIHRvIG9uZSB0aGVzZSBhcmUgc2FmZSAq LworCWNvbm5lY3RvciA9ICZzdGR1LT5iYXNlLmNvbm5lY3RvcjsKKwllbmNvZGVyICAgPSAmc3Rk dS0+YmFzZS5lbmNvZGVyOworCisKKwkvKgorCSAqIEFmdGVyIHRoaXMgcG9pbnQgdGhlIENSVEMg d2lsbCBiZSBjb25zaWRlcmVkIG9mZiB1bmxlc3MgYSBuZXcgZmIKKwkgKiBpcyBib3VuZAorCSAq LworCWlmIChzdGR1LT5kZWZpbmVkKSB7CisJCS8qIFVuYmluZCBjdXJyZW50IHN1cmZhY2UgYnkg YmluZGluZyBhbiBpbnZhbGlkIG9uZSAqLworCQlyZXQgPSB2bXdfc3RkdV9iaW5kX3N0KGRldl9w cml2LCBzdGR1LCBOVUxMKTsKKwkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJCXJldHVybiBy ZXQ7CisKKwkJLyogVXBkYXRlIFNjcmVlbiBUYXJnZXQsIGRpc3BsYXkgd2lsbCBub3cgYmUgYmxh bmsgKi8KKwkJaWYgKGNydGMtPnByaW1hcnktPmZiKSB7CisJCQl1cGRhdGVfYXJlYS54MiA9IGNy dGMtPnByaW1hcnktPmZiLT53aWR0aDsKKwkJCXVwZGF0ZV9hcmVhLnkyID0gY3J0Yy0+cHJpbWFy eS0+ZmItPmhlaWdodDsKKworCQkJcmV0ID0gdm13X3N0ZHVfdXBkYXRlX3N0KGRldl9wcml2LCBO VUxMLAorCQkJCQkJIHN0ZHUsCisJCQkJCQkgJnVwZGF0ZV9hcmVhKTsKKwkJCWlmICh1bmxpa2Vs eShyZXQgIT0gMCkpCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCWNydGMtPnByaW1hcnktPmZi ICA9IE5VTEw7CisJCWNydGMtPmVuYWJsZWQgICAgICA9IGZhbHNlOworCQllbmNvZGVyLT5jcnRj ICAgICAgPSBOVUxMOworCQljb25uZWN0b3ItPmVuY29kZXIgPSBOVUxMOworCisJCXZtd19zdGR1 X3VucGluX2Rpc3BsYXkoc3RkdSk7CisJCXN0ZHUtPmNvbnRlbnRfZmIgICAgICA9IE5VTEw7CisJ CXN0ZHUtPmNvbnRlbnRfZmJfdHlwZSA9IFNBTUVfQVNfRElTUExBWTsKKworCQlyZXQgPSB2bXdf c3RkdV9kZXN0cm95X3N0KGRldl9wcml2LCBzdGR1KTsKKwkJLyogVGhlIGhhcmR3YXJlIGlzIGh1 bmcsIGdpdmUgdXAgKi8KKwkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJCXJldHVybiByZXQ7 CisJfQorCisKKwkvKiBBbnkgb2YgdGhlc2UgY29uZGl0aW9ucyBtZWFucyB0aGUgY2FsbGVyIHdh bnRzIENSVEMgb2ZmICovCisJaWYgKHNldC0+bnVtX2Nvbm5lY3RvcnMgPT0gMCB8fCAhbW9kZSB8 fCAhbmV3X2ZiKQorCQlyZXR1cm4gMDsKKworCisJaWYgKHNldC0+eCArIG1vZGUtPmhkaXNwbGF5 ID4gbmV3X2ZiLT53aWR0aCB8fAorCSAgICBzZXQtPnkgKyBtb2RlLT52ZGlzcGxheSA+IG5ld19m Yi0+aGVpZ2h0KSB7CisJCURSTV9FUlJPUigiU2V0IG91dHNpZGUgb2YgZnJhbWVidWZmZXJcbiIp OworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzdGR1LT5jb250ZW50X2ZiID0gbmV3X2ZiOwor CXZmYiA9IHZtd19mcmFtZWJ1ZmZlcl90b192ZmIoc3RkdS0+Y29udGVudF9mYik7CisKKwlpZiAo dmZiLT5kbWFidWYpCisJCXN0ZHUtPmNvbnRlbnRfZmJfdHlwZSA9IFNFUEFSQVRFX0RNQTsKKwor CS8qCisJICogSWYgdGhlIHJlcXVlc3RlZCBtb2RlIGlzIGRpZmZlcmVudCB0aGFuIHRoZSB3aWR0 aCBhbmQgaGVpZ2h0CisJICogb2YgdGhlIEZCIG9yIGlmIHRoZSBjb250ZW50IGJ1ZmZlciBpcyBh IERNQSBidWYsIHRoZW4gYWxsb2NhdGUKKwkgKiBhIGRpc3BsYXkgRkIgdGhhdCBtYXRjaGVzIHRo ZSBkaW1lbnNpb24gb2YgdGhlIG1vZGUKKwkgKi8KKwlpZiAobW9kZS0+aGRpc3BsYXkgIT0gbmV3 X2ZiLT53aWR0aCAgfHwKKwkgICAgbW9kZS0+dmRpc3BsYXkgIT0gbmV3X2ZiLT5oZWlnaHQgfHwK KwkgICAgc3RkdS0+Y29udGVudF9mYl90eXBlICE9IFNBTUVfQVNfRElTUExBWSkgeworCQlzdHJ1 Y3Qgdm13X3N1cmZhY2UgY29udGVudF9zcmY7CisJCXN0cnVjdCBkcm1fdm13X3NpemUgZGlzcGxh eV9iYXNlX3NpemUgPSB7MH07CisJCXN0cnVjdCB2bXdfc3VyZmFjZSAqZGlzcGxheV9zcmY7CisK KworCQlkaXNwbGF5X2Jhc2Vfc2l6ZS53aWR0aCAgPSBtb2RlLT5oZGlzcGxheTsKKwkJZGlzcGxh eV9iYXNlX3NpemUuaGVpZ2h0ID0gbW9kZS0+dmRpc3BsYXk7CisJCWRpc3BsYXlfYmFzZV9zaXpl LmRlcHRoICA9IDE7CisKKwkJLyoKKwkJICogSWYgY29udGVudCBidWZmZXIgaXMgYSBETUEgYnVm LCB0aGVuIHdlIGhhdmUgdG8gY29uc3RydWN0CisJCSAqIHN1cmZhY2UgaW5mbworCQkgKi8KKwkJ aWYgKHN0ZHUtPmNvbnRlbnRfZmJfdHlwZSA9PSBTRVBBUkFURV9ETUEpIHsKKworCQkJc3dpdGNo IChuZXdfZmItPmJpdHNfcGVyX3BpeGVsKSB7CisJCQljYXNlIDMyOgorCQkJCWNvbnRlbnRfc3Jm LmZvcm1hdCA9IFNWR0EzRF9YOFI4RzhCODsKKwkJCQlicmVhazsKKworCQkJY2FzZSAxNjoKKwkJ CQljb250ZW50X3NyZi5mb3JtYXQgPSBTVkdBM0RfUjVHNkI1OworCQkJCWJyZWFrOworCisJCQlj YXNlIDg6CisJCQkJY29udGVudF9zcmYuZm9ybWF0ID0gU1ZHQTNEX1A4OworCQkJCWJyZWFrOwor CisJCQlkZWZhdWx0OgorCQkJCURSTV9FUlJPUigiSW52YWxpZCBmb3JtYXRcbiIpOworCQkJCXJl dCA9IC1FSU5WQUw7CisJCQkJZ290byBlcnJfdW5yZWZfY29udGVudDsKKwkJCX0KKworCQkJY29u dGVudF9zcmYuZmxhZ3MgICAgICAgICAgICAgPSAwOworCQkJY29udGVudF9zcmYubWlwX2xldmVs c1swXSAgICAgPSAxOworCQkJY29udGVudF9zcmYubXVsdGlzYW1wbGVfY291bnQgPSAwOworCQl9 IGVsc2UgeworCisJCQlzdGR1LT5jb250ZW50X2ZiX3R5cGUgPSBTRVBBUkFURV9TVVJGQUNFOwor CisJCQluZXdfdmZicyA9IHZtd19mcmFtZWJ1ZmZlcl90b192ZmJzKG5ld19mYik7CisJCQljb250 ZW50X3NyZiA9ICpuZXdfdmZicy0+c3VyZmFjZTsKKwkJfQorCisKKwkJcmV0ID0gdm13X3N1cmZh Y2VfZ2JfcHJpdl9kZWZpbmUoY3J0Yy0+ZGV2LAorCQkJCTAsIC8qIGJlY2F1c2Uga2VybmVsIHZp c2libGUgb25seSAqLworCQkJCWNvbnRlbnRfc3JmLmZsYWdzLAorCQkJCWNvbnRlbnRfc3JmLmZv cm1hdCwKKwkJCQl0cnVlLCAvKiBhIHNjYW5vdXQgYnVmZmVyICovCisJCQkJY29udGVudF9zcmYu bWlwX2xldmVsc1swXSwKKwkJCQljb250ZW50X3NyZi5tdWx0aXNhbXBsZV9jb3VudCwKKwkJCQlk aXNwbGF5X2Jhc2Vfc2l6ZSwKKwkJCQkmZGlzcGxheV9zcmYpOworCQlpZiAodW5saWtlbHkocmV0 ICE9IDApKSB7CisJCQlEUk1fRVJST1IoIkNhbm5vdCBhbGxvY2F0ZSBhIGRpc3BsYXkgRkIuXG4i KTsKKwkJCWdvdG8gZXJyX3VucmVmX2NvbnRlbnQ7CisJCX0KKworCQlzdGR1LT5kaXNwbGF5X3Ny ZiA9IGRpc3BsYXlfc3JmOworCX0gZWxzZSB7CisJCW5ld192ZmJzID0gdm13X2ZyYW1lYnVmZmVy X3RvX3ZmYnMobmV3X2ZiKTsKKwkJc3RkdS0+ZGlzcGxheV9zcmYgPSBuZXdfdmZicy0+c3VyZmFj ZTsKKwl9CisKKworCXJldCA9IHZtd19zdGR1X3Bpbl9kaXNwbGF5KHN0ZHUpOworCWlmICh1bmxp a2VseShyZXQgIT0gMCkpIHsKKwkJc3RkdS0+ZGlzcGxheV9zcmYgPSBOVUxMOworCQlnb3RvIGVy cl91bnJlZl9jb250ZW50OworCX0KKworCXZtd19mYl9vZmYoZGV2X3ByaXYpOworCXZtd19zdmdh X2VuYWJsZShkZXZfcHJpdik7CisKKwkvKgorCSAqIFN0ZXBzIHRvIGRpc3BsYXlpbmcgYSBzdXJm YWNlLCBhc3N1bWUgc3VyZmFjZSBpcyBhbHJlYWR5CisJICogYm91bmQ6CisJICogICAxLiAgZGVm aW5lIGEgc2NyZWVuIHRhcmdldAorCSAqICAgMi4gIGJpbmQgYSBmYiB0byB0aGUgc2NyZWVuIHRh cmdldAorCSAqICAgMy4gIHVwZGF0ZSB0aGF0IHNjcmVlbiB0YXJnZXQgKHRoaXMgaXMgZG9uZSBs YXRlciBieQorCSAqICAgICAgIHZtd19rbXNfc3RkdV9kb19zdXJmYWNlX2RpcnR5X29yX3ByZXNl bnQpCisJICovCisJcmV0ID0gdm13X3N0ZHVfZGVmaW5lX3N0KGRldl9wcml2LCBzdGR1KTsKKwlp ZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlnb3RvIGVycl91bnBpbl9kaXNwbGF5X2FuZF9jb250 ZW50OworCisJcmV0ID0gdm13X3N0ZHVfYmluZF9zdChkZXZfcHJpdiwgc3RkdSwgJnN0ZHUtPmRp c3BsYXlfc3JmLT5yZXMpOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCWdvdG8gZXJyX3Vu cGluX2Rlc3Ryb3lfc3Q7CisKKworCWNvbm5lY3Rvci0+ZW5jb2RlciA9IGVuY29kZXI7CisJZW5j b2Rlci0+Y3J0YyAgICAgID0gY3J0YzsKKworCWNydGMtPm1vZGUgICAgPSAqbW9kZTsKKwljcnRj LT5wcmltYXJ5LT5mYiA9IG5ld19mYjsKKwljcnRjLT5lbmFibGVkID0gdHJ1ZTsKKworCXJldHVy biByZXQ7CisKK2Vycl91bnBpbl9kZXN0cm95X3N0OgorCXZtd19zdGR1X2Rlc3Ryb3lfc3QoZGV2 X3ByaXYsIHN0ZHUpOworZXJyX3VucGluX2Rpc3BsYXlfYW5kX2NvbnRlbnQ6CisJdm13X3N0ZHVf dW5waW5fZGlzcGxheShzdGR1KTsKK2Vycl91bnJlZl9jb250ZW50OgorCXN0ZHUtPmNvbnRlbnRf ZmIgPSBOVUxMOworCXJldHVybiByZXQ7Cit9CisKKworCisvKioKKyAqIHZtd19zdGR1X2NydGNf cGFnZV9mbGlwIC0gQmluZHMgYSBidWZmZXIgdG8gYSBzY3JlZW4gdGFyZ2V0CisgKgorICogQGNy dGM6IENSVEMgdG8gYXR0YWNoIEZCIHRvCisgKiBAZmI6IEZCIHRvIGF0dGFjaAorICogQGV2ZW50 OiBFdmVudCB0byBiZSBwb3N0ZWQuIFRoaXMgZXZlbnQgc2hvdWxkJ3ZlIGJlZW4gYWxsb2NlZAor ICogICAgICAgICB1c2luZyBrW216XWFsbG9jLCBhbmQgc2hvdWxkJ3ZlIGJlZW4gY29tcGxldGVs eSBpbml0aWFsaXplZC4KKyAqIEBwYWdlX2ZsaXBfZmxhZ3M6IElucHV0IGZsYWdzLgorICoKKyAq IElmIHRoZSBTVERVIHVzZXMgdGhlIHNhbWUgZGlzcGxheSBhbmQgY29udGVudCBidWZmZXJzLCBp LmUuIGEgdHJ1ZSBmbGlwLAorICogdGhpcyBmdW5jdGlvbiB3aWxsIHJlcGxhY2UgdGhlIGV4aXN0 aW5nIGRpc3BsYXkgYnVmZmVyIHdpdGggdGhlIG5ldyBjb250ZW50CisgKiBidWZmZXIuCisgKgor ICogSWYgdGhlIFNURFUgdXNlcyBkaWZmZXJlbnQgZGlzcGxheSBhbmQgY29udGVudCBidWZmZXJz LCBpLmUuIGEgYmxpdCwgdGhlbgorICogb25seSB0aGUgY29udGVudCBidWZmZXIgd2lsbCBiZSB1 cGRhdGVkLgorICoKKyAqIFJFVFVSTlM6CisgKiAwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb24g ZmFpbHVyZQorICovCitzdGF0aWMgaW50IHZtd19zdGR1X2NydGNfcGFnZV9mbGlwKHN0cnVjdCBk cm1fY3J0YyAqY3J0YywKKwkJCQkgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpuZXdfZmIsCisJ CQkJICAgc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudCAqZXZlbnQsCisJCQkJICAgdWlu dDMyX3QgZmxhZ3MpCisKK3sKKwlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2ID0gdm13X3By aXYoY3J0Yy0+ZGV2KTsKKwlzdHJ1Y3Qgdm13X3NjcmVlbl90YXJnZXRfZGlzcGxheV91bml0ICpz dGR1OworCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2OworCXN0cnVjdCBkcm1fY2xpcF9yZWN0 IHVwZGF0ZV9hcmVhID0gezB9OworCWludCByZXQ7CisKKwkvKgorCSAqIFRlbXBvcmFyaWx5IGRv bid0IHN1cHBvcnQgZXZlbnQgPT0gTlVMTC4gV2UgbmVlZCB0aGUKKwkgKiBAZmlsZV9wcml2IHBv aW50ZXIhCisJICovCisJaWYgKGV2ZW50ID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJ aWYgKGNydGMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkZXZfcHJpdiAgICAgICAg ICA9IHZtd19wcml2KGNydGMtPmRldik7CisJc3RkdSAgICAgICAgICAgICAgPSB2bXdfY3J0Y190 b19zdGR1KGNydGMpOworCWNydGMtPnByaW1hcnktPmZiID0gbmV3X2ZiOworCXN0ZHUtPmNvbnRl bnRfZmIgID0gbmV3X2ZiOworCisJaWYgKHN0ZHUtPmRpc3BsYXlfc3JmKSB7CisJCXVwZGF0ZV9h cmVhLngyID0gc3RkdS0+ZGlzcGxheV9zcmYtPmJhc2Vfc2l6ZS53aWR0aDsKKwkJdXBkYXRlX2Fy ZWEueTIgPSBzdGR1LT5kaXNwbGF5X3NyZi0+YmFzZV9zaXplLmhlaWdodDsKKworCQkvKgorCQkg KiBJZiB0aGUgZGlzcGxheSBzdXJmYWNlIGlzIHRoZSBzYW1lIGFzIHRoZSBjb250ZW50IHN1cmZh Y2UKKwkJICogdGhlbiByZW1vdmUgdGhlIHJlZmVyZW5jZQorCQkgKi8KKwkJaWYgKHN0ZHUtPmNv bnRlbnRfZmJfdHlwZSA9PSBTQU1FX0FTX0RJU1BMQVkpIHsKKwkJCWlmIChzdGR1LT5kZWZpbmVk KSB7CisJCQkJLyogVW5iaW5kIHRoZSBjdXJyZW50IHN1cmZhY2UgKi8KKwkJCQlyZXQgPSB2bXdf c3RkdV9iaW5kX3N0KGRldl9wcml2LCBzdGR1LCBOVUxMKTsKKwkJCQlpZiAodW5saWtlbHkocmV0 ICE9IDApKQorCQkJCQlnb3RvIGVycl9vdXQ7CisJCQl9CisJCQl2bXdfc3RkdV91bnBpbl9kaXNw bGF5KHN0ZHUpOworCQkJc3RkdS0+ZGlzcGxheV9zcmYgPSBOVUxMOworCQl9CisJfQorCisKKwlp ZiAoIW5ld19mYikgeworCQkvKiBCbGFua3MgdGhlIGRpc3BsYXkgKi8KKwkJKHZvaWQpIHZtd19z dGR1X3VwZGF0ZV9zdChkZXZfcHJpdiwgTlVMTCwgc3RkdSwgJnVwZGF0ZV9hcmVhKTsKKworCQly ZXR1cm4gMDsKKwl9CisKKworCWlmIChzdGR1LT5jb250ZW50X2ZiX3R5cGUgPT0gU0FNRV9BU19E SVNQTEFZKSB7CisJCXN0ZHUtPmRpc3BsYXlfc3JmID0gdm13X2ZyYW1lYnVmZmVyX3RvX3ZmYnMo bmV3X2ZiKS0+c3VyZmFjZTsKKwkJcmV0ID0gdm13X3N0ZHVfcGluX2Rpc3BsYXkoc3RkdSk7CisJ CWlmIChyZXQpIHsKKwkJCXN0ZHUtPmRpc3BsYXlfc3JmID0gTlVMTDsKKwkJCWdvdG8gZXJyX291 dDsKKwkJfQorCisJCS8qIEJpbmQgZGlzcGxheSBzdXJmYWNlICovCisJCXJldCA9IHZtd19zdGR1 X2JpbmRfc3QoZGV2X3ByaXYsIHN0ZHUsICZzdGR1LT5kaXNwbGF5X3NyZi0+cmVzKTsKKwkJaWYg KHVubGlrZWx5KHJldCAhPSAwKSkKKwkJCWdvdG8gZXJyX3VucGluX2Rpc3BsYXlfYW5kX2NvbnRl bnQ7CisJfQorCisJLyogVXBkYXRlIGRpc3BsYXkgc3VyZmFjZTogYWZ0ZXIgdGhpcyBwb2ludCBl dmVyeXRoaW5nIGlzIGJvdW5kICovCisJdXBkYXRlX2FyZWEueDIgPSBzdGR1LT5kaXNwbGF5X3Ny Zi0+YmFzZV9zaXplLndpZHRoOworCXVwZGF0ZV9hcmVhLnkyID0gc3RkdS0+ZGlzcGxheV9zcmYt PmJhc2Vfc2l6ZS5oZWlnaHQ7CisKKwlmaWxlX3ByaXYgPSBldmVudC0+YmFzZS5maWxlX3ByaXY7 CisJcmV0ID0gdm13X3N0ZHVfdXBkYXRlX3N0KGRldl9wcml2LCBmaWxlX3ByaXYsIHN0ZHUsICZ1 cGRhdGVfYXJlYSk7CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJcmV0dXJuIHJldDsKKwor CWlmIChldmVudCkgeworCQlzdHJ1Y3Qgdm13X2ZlbmNlX29iaiAqZmVuY2UgPSBOVUxMOworCisJ CXZtd19leGVjYnVmX2ZlbmNlX2NvbW1hbmRzKE5VTEwsIGRldl9wcml2LCAmZmVuY2UsIE5VTEwp OworCQlpZiAoIWZlbmNlKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJcmV0ID0gdm13X2V2ZW50 X2ZlbmNlX2FjdGlvbl9xdWV1ZShmaWxlX3ByaXYsIGZlbmNlLAorCQkJCQkJICAgJmV2ZW50LT5i YXNlLAorCQkJCQkJICAgJmV2ZW50LT5ldmVudC50dl9zZWMsCisJCQkJCQkgICAmZXZlbnQtPmV2 ZW50LnR2X3VzZWMsCisJCQkJCQkgICB0cnVlKTsKKwkJdm13X2ZlbmNlX29ial91bnJlZmVyZW5j ZSgmZmVuY2UpOworCX0KKworCXJldHVybiByZXQ7CisKK2Vycl91bnBpbl9kaXNwbGF5X2FuZF9j b250ZW50OgorCXZtd19zdGR1X3VucGluX2Rpc3BsYXkoc3RkdSk7CitlcnJfb3V0OgorCWNydGMt PnByaW1hcnktPmZiID0gTlVMTDsKKwlzdGR1LT5jb250ZW50X2ZiID0gTlVMTDsKKwlyZXR1cm4g cmV0OworfQorCisKKworLyoKKyAqICBTY3JlZW4gVGFyZ2V0IENSVEMgZGlzcGF0Y2ggdGFibGUK KyAqLworc3RhdGljIHN0cnVjdCBkcm1fY3J0Y19mdW5jcyB2bXdfc3RkdV9jcnRjX2Z1bmNzID0g eworCS5zYXZlID0gdm13X2R1X2NydGNfc2F2ZSwKKwkucmVzdG9yZSA9IHZtd19kdV9jcnRjX3Jl c3RvcmUsCisJLmN1cnNvcl9zZXQgPSB2bXdfZHVfY3J0Y19jdXJzb3Jfc2V0LAorCS5jdXJzb3Jf bW92ZSA9IHZtd19kdV9jcnRjX2N1cnNvcl9tb3ZlLAorCS5nYW1tYV9zZXQgPSB2bXdfZHVfY3J0 Y19nYW1tYV9zZXQsCisJLmRlc3Ryb3kgPSB2bXdfc3RkdV9jcnRjX2Rlc3Ryb3ksCisJLnNldF9j b25maWcgPSB2bXdfc3RkdV9jcnRjX3NldF9jb25maWcsCisJLnBhZ2VfZmxpcCA9IHZtd19zdGR1 X2NydGNfcGFnZV9mbGlwLAorfTsKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNj cmVlbiBUYXJnZXQgRGlzcGxheSBVbml0IEVuY29kZXIgRnVuY3Rpb25zCisgKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCisKKy8qKgorICogdm13X3N0ZHVfZW5jb2Rlcl9kZXN0cm95IC0gY2xlYW5zIHVw IHRoZSBTVERVCisgKgorICogQGVuY29kZXI6IHVzZWQgdGhlIGdldCB0aGUgY29udGFpbmluZyBT VERVCisgKgorICogdm13Z2Z4IGNsZWFucyB1cCBjcnRjL2VuY29kZXIvY29ubmVjdG9yIGFsbCBh dCB0aGUgc2FtZSB0aW1lIHNvIHRlY2huaWNhbGx5CisgKiB0aGlzIGNhbiBiZSBhIG5vLW9wLiAg TmV2ZXJ0aGVsZXNzLCBpdCBkb2Vzbid0IGh1cnQgb2YgaGF2ZSB0aGlzIGluIGNhc2UKKyAqIHRo ZSBjb21tb24gS01TIGNvZGUgY2hhbmdlcyBhbmQgc29tZWhvdyB2bXdfc3RkdV9jcnRjX2Rlc3Ry b3koKSBkb2Vzbid0CisgKiBnZXQgY2FsbGVkLgorICovCitzdGF0aWMgdm9pZCB2bXdfc3RkdV9l bmNvZGVyX2Rlc3Ryb3koc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXZtd19zdGR1 X2Rlc3Ryb3kodm13X2VuY29kZXJfdG9fc3RkdShlbmNvZGVyKSk7Cit9CisKK3N0YXRpYyBzdHJ1 Y3QgZHJtX2VuY29kZXJfZnVuY3Mgdm13X3N0ZHVfZW5jb2Rlcl9mdW5jcyA9IHsKKwkuZGVzdHJv eSA9IHZtd19zdGR1X2VuY29kZXJfZGVzdHJveSwKK307CisKKworCisvKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqCisgKiBTY3JlZW4gVGFyZ2V0IERpc3BsYXkgVW5pdCBDb25uZWN0b3IgRnVuY3Rpb25z CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogdm13X3N0ZHVfY29ubmVjdG9yX2Rl c3Ryb3kgLSBjbGVhbnMgdXAgdGhlIFNURFUKKyAqCisgKiBAY29ubmVjdG9yOiB1c2VkIHRvIGdl dCB0aGUgY29udGFpbmluZyBTVERVCisgKgorICogdm13Z2Z4IGNsZWFucyB1cCBjcnRjL2VuY29k ZXIvY29ubmVjdG9yIGFsbCBhdCB0aGUgc2FtZSB0aW1lIHNvIHRlY2huaWNhbGx5CisgKiB0aGlz IGNhbiBiZSBhIG5vLW9wLiAgTmV2ZXJ0aGVsZXNzLCBpdCBkb2Vzbid0IGh1cnQgb2YgaGF2ZSB0 aGlzIGluIGNhc2UKKyAqIHRoZSBjb21tb24gS01TIGNvZGUgY2hhbmdlcyBhbmQgc29tZWhvdyB2 bXdfc3RkdV9jcnRjX2Rlc3Ryb3koKSBkb2Vzbid0CisgKiBnZXQgY2FsbGVkLgorICovCitzdGF0 aWMgdm9pZCB2bXdfc3RkdV9jb25uZWN0b3JfZGVzdHJveShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubmVjdG9yKQoreworCXZtd19zdGR1X2Rlc3Ryb3kodm13X2Nvbm5lY3Rvcl90b19zdGR1KGNv bm5lY3RvcikpOworfQorCisKKworc3RhdGljIHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIHZt d19zdGR1X2Nvbm5lY3Rvcl9mdW5jcyA9IHsKKwkuZHBtcyA9IHZtd19kdV9jb25uZWN0b3JfZHBt cywKKwkuc2F2ZSA9IHZtd19kdV9jb25uZWN0b3Jfc2F2ZSwKKwkucmVzdG9yZSA9IHZtd19kdV9j b25uZWN0b3JfcmVzdG9yZSwKKwkuZGV0ZWN0ID0gdm13X2R1X2Nvbm5lY3Rvcl9kZXRlY3QsCisJ LmZpbGxfbW9kZXMgPSB2bXdfZHVfY29ubmVjdG9yX2ZpbGxfbW9kZXMsCisJLnNldF9wcm9wZXJ0 eSA9IHZtd19kdV9jb25uZWN0b3Jfc2V0X3Byb3BlcnR5LAorCS5kZXN0cm95ID0gdm13X3N0ZHVf Y29ubmVjdG9yX2Rlc3Ryb3ksCit9OworCisKKworLyoqCisgKiB2bXdfc3RkdV9pbml0IC0gU2V0 cyB1cCBhIFNjcmVlbiBUYXJnZXQgRGlzcGxheSBVbml0CisgKgorICogQGRldl9wcml2OiBWTVcg RFJNIGRldmljZQorICogQHVuaXQ6IHVuaXQgbnVtYmVyIHJhbmdlIGZyb20gMCB0byBWTVdHRlhf TlVNX0RJU1BMQVlfVU5JVFMKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmNlIHBl ciBDUlRDLCBhbmQgYWxsb2NhdGVzIG9uZSBTY3JlZW4gVGFyZ2V0CisgKiBkaXNwbGF5IHVuaXQg dG8gcmVwcmVzZW50IHRoYXQgQ1JUQy4gIFNpbmNlIHRoZSBTVkdBIGRldmljZSBkb2VzIG5vdCBz ZXBhcmF0ZQorICogb3V0IGVuY29kZXIgYW5kIGNvbm5lY3RvciwgdGhleSBhcmUgcmVwcmVzZW50 ZWQgYXMgcGFydCBvZiB0aGUgU1REVSBhcyB3ZWxsLgorICovCitzdGF0aWMgaW50IHZtd19zdGR1 X2luaXQoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwgdW5zaWduZWQgdW5pdCkKK3sKKwlz dHJ1Y3Qgdm13X3NjcmVlbl90YXJnZXRfZGlzcGxheV91bml0ICpzdGR1OworCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXYgPSBkZXZfcHJpdi0+ZGV2OworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3I7CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOworCXN0cnVjdCBkcm1fY3J0YyAq Y3J0YzsKKworCisJc3RkdSA9IGt6YWxsb2Moc2l6ZW9mKCpzdGR1KSwgR0ZQX0tFUk5FTCk7CisJ aWYgKCFzdGR1KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXN0ZHUtPmJhc2UudW5pdCA9IHVuaXQ7 CisJY3J0YyA9ICZzdGR1LT5iYXNlLmNydGM7CisJZW5jb2RlciA9ICZzdGR1LT5iYXNlLmVuY29k ZXI7CisJY29ubmVjdG9yID0gJnN0ZHUtPmJhc2UuY29ubmVjdG9yOworCisJc3RkdS0+YmFzZS5w cmVmX2FjdGl2ZSA9ICh1bml0ID09IDApOworCXN0ZHUtPmJhc2UucHJlZl93aWR0aCAgPSBkZXZf cHJpdi0+aW5pdGlhbF93aWR0aDsKKwlzdGR1LT5iYXNlLnByZWZfaGVpZ2h0ID0gZGV2X3ByaXYt PmluaXRpYWxfaGVpZ2h0OworCXN0ZHUtPmJhc2UucHJlZl9tb2RlICAgPSBOVUxMOworCXN0ZHUt PmJhc2UuaXNfaW1wbGljaXQgPSB0cnVlOworCisJZHJtX2Nvbm5lY3Rvcl9pbml0KGRldiwgY29u bmVjdG9yLCAmdm13X3N0ZHVfY29ubmVjdG9yX2Z1bmNzLAorCQkJICAgRFJNX01PREVfQ09OTkVD VE9SX1ZJUlRVQUwpOworCWNvbm5lY3Rvci0+c3RhdHVzID0gdm13X2R1X2Nvbm5lY3Rvcl9kZXRl Y3QoY29ubmVjdG9yLCBmYWxzZSk7CisKKwlkcm1fZW5jb2Rlcl9pbml0KGRldiwgZW5jb2Rlciwg JnZtd19zdGR1X2VuY29kZXJfZnVuY3MsCisJCQkgRFJNX01PREVfRU5DT0RFUl9WSVJUVUFMKTsK Kwlkcm1fbW9kZV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIoY29ubmVjdG9yLCBlbmNvZGVyKTsK KwllbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9ICgxIDw8IHVuaXQpOworCWVuY29kZXItPnBvc3Np YmxlX2Nsb25lcyA9IDA7CisKKwkodm9pZCkgZHJtX2Nvbm5lY3Rvcl9yZWdpc3Rlcihjb25uZWN0 b3IpOworCisJZHJtX2NydGNfaW5pdChkZXYsIGNydGMsICZ2bXdfc3RkdV9jcnRjX2Z1bmNzKTsK KworCWRybV9tb2RlX2NydGNfc2V0X2dhbW1hX3NpemUoY3J0YywgMjU2KTsKKworCWRybV9vYmpl Y3RfYXR0YWNoX3Byb3BlcnR5KCZjb25uZWN0b3ItPmJhc2UsCisJCQkJICAgZGV2LT5tb2RlX2Nv bmZpZy5kaXJ0eV9pbmZvX3Byb3BlcnR5LAorCQkJCSAgIDEpOworCisJcmV0dXJuIDA7Cit9CisK KworCisvKioKKyAqICB2bXdfc3RkdV9kZXN0cm95IC0gQ2xlYW5zIHVwIGEgdm13X3NjcmVlbl90 YXJnZXRfZGlzcGxheV91bml0CisgKgorICogIEBzdGR1OiAgU2NyZWVuIFRhcmdldCBEaXNwbGF5 IFVuaXQgdG8gYmUgZGVzdHJveWVkCisgKgorICogIENsZWFuIHVwIGFmdGVyIHZtd19zdGR1X2lu aXQKKyAqLworc3RhdGljIHZvaWQgdm13X3N0ZHVfZGVzdHJveShzdHJ1Y3Qgdm13X3NjcmVlbl90 YXJnZXRfZGlzcGxheV91bml0ICpzdGR1KQoreworCXZtd19zdGR1X3VucGluX2Rpc3BsYXkoc3Rk dSk7CisKKwl2bXdfZHVfY2xlYW51cCgmc3RkdS0+YmFzZSk7CisJa2ZyZWUoc3RkdSk7Cit9CisK KworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTY3JlZW4gVGFyZ2V0IERpc3BsYXkgS01T IEZ1bmN0aW9ucworICoKKyAqIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGJ5IHRoZSBjb21t b24gS01TIGNvZGUgaW4gdm13Z2Z4X2ttcy5jCisgKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8q KgorICogdm13X2ttc19zdGR1X2luaXRfZGlzcGxheSAtIEluaXRpYWxpemVzIGEgU2NyZWVuIFRh cmdldCBiYXNlZCBkaXNwbGF5CisgKgorICogQGRldl9wcml2OiBWTVcgRFJNIGRldmljZQorICoK KyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZSBhIFNjcmVlbiBUYXJnZXQgYmFzZWQgZGlzcGxh eSBkZXZpY2UuICBJdCBjaGVja3MKKyAqIHRoZSBjYXBhYmlsaXR5IGJpdHMgdG8gbWFrZSBzdXJl IHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGNhbiBzdXBwb3J0CisgKiBzY3JlZW4gdGFyZ2V0cywg YW5kIHRoZW4gY3JlYXRlcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgQ1JUQ3MsIGEuay5hIERpc3Bs YXkKKyAqIFVuaXRzLCBhcyBzdXBwb3J0ZWQgYnkgdGhlIGRpc3BsYXkgaGFyZHdhcmUuCisgKgor ICogUkVUVVJOUzoKKyAqIDAgb24gc3VjY2VzcywgZXJyb3IgY29kZSBvdGhlcndpc2UKKyAqLwor aW50IHZtd19rbXNfc3RkdV9pbml0X2Rpc3BsYXkoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJp dikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZGV2X3ByaXYtPmRldjsKKwlpbnQgaSwg cmV0OworCisKKwkvKiBEbyBub3RoaW5nIGlmIFNjcmVlbiBUYXJnZXQgc3VwcG9ydCBpcyB0dXJu ZWQgb2ZmICovCisJaWYgKCFWTVdHRlhfRU5BQkxFX1NDUkVFTl9UQVJHRVRfT1RBQkxFKQorCQly ZXR1cm4gLUVOT1NZUzsKKworCWlmICghKGRldl9wcml2LT5jYXBhYmlsaXRpZXMgJiBTVkdBX0NB UF9HQk9CSkVDVFMpIHx8CisJICAgICEoZGV2X3ByaXYtPmNhcGFiaWxpdGllcyAmIFNWR0FfQ0FQ XzNEKSkKKwkJcmV0dXJuIC1FTk9TWVM7CisKKwlyZXQgPSBkcm1fdmJsYW5rX2luaXQoZGV2LCBW TVdHRlhfTlVNX0RJU1BMQVlfVU5JVFMpOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCXJl dHVybiByZXQ7CisKKwlyZXQgPSBkcm1fbW9kZV9jcmVhdGVfZGlydHlfaW5mb19wcm9wZXJ0eShk ZXYpOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCWdvdG8gZXJyX3ZibGFua19jbGVhbnVw OworCisJZm9yIChpID0gMDsgaSA8IFZNV0dGWF9OVU1fRElTUExBWV9VTklUUzsgKytpKSB7CisJ CXJldCA9IHZtd19zdGR1X2luaXQoZGV2X3ByaXYsIGkpOworCisJCWlmICh1bmxpa2VseShyZXQg IT0gMCkpIHsKKwkJCURSTV9FUlJPUigiRmFpbGVkIHRvIGluaXRpYWxpemUgU1REVSAlZCIsIGkp OworCQkJZ290byBlcnJfdmJsYW5rX2NsZWFudXA7CisJCX0KKwl9CisKKwlkZXZfcHJpdi0+YWN0 aXZlX2Rpc3BsYXlfdW5pdCA9IHZtd19kdV9zY3JlZW5fdGFyZ2V0OworCisJRFJNX0lORk8oIlNj cmVlbiBUYXJnZXQgRGlzcGxheSBkZXZpY2UgaW5pdGlhbGl6ZWRcbiIpOworCisJcmV0dXJuIDA7 CisKK2Vycl92YmxhbmtfY2xlYW51cDoKKwlkcm1fdmJsYW5rX2NsZWFudXAoZGV2KTsKKwlyZXR1 cm4gcmV0OworfQorCisKKworLyoqCisgKiB2bXdfa21zX3N0ZHVfY2xvc2VfZGlzcGxheSAtIENs ZWFucyB1cCBhZnRlciB2bXdfa21zX3N0ZHVfaW5pdF9kaXNwbGF5CisgKgorICogQGRldl9wcml2 OiBWTVcgRFJNIGRldmljZQorICoKKyAqIEZyZWVzIHVwIGFueSByZXNvdXJjZXMgYWxsb2NhdGVk IGJ5IHZtd19rbXNfc3RkdV9pbml0X2Rpc3BsYXkKKyAqCisgKiBSRVRVUk5TOgorICogMCBvbiBz dWNjZXNzCisgKi8KK2ludCB2bXdfa21zX3N0ZHVfY2xvc2VfZGlzcGxheShzdHJ1Y3Qgdm13X3By aXZhdGUgKmRldl9wcml2KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkZXZfcHJpdi0+ ZGV2OworCisJZHJtX3ZibGFua19jbGVhbnVwKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworCisK Ky8qKgorICogdm13X2ttc19zdGR1X2RvX3N1cmZhY2VfZGlydHkgLSB1cGRhdGVzIGEgZGlydHkg cmVjdGFuZ2UgdG8gU1ZHQSBkZXZpY2UKKyAqCisgKiBAZGV2X3ByaXY6IFZNVyBEUk0gZGV2aWNl CisgKiBAZmlsZV9wcml2OiBQb2ludGVyIHRvIGEgZHJtIGZpbGUgcHJpdmF0ZSBzdHJ1Y3R1cmUK KyAqIEBmcmFtZWJ1ZmZlcjogRkIgd2l0aCB0aGUgbmV3IGNvbnRlbnQgdG8gYmUgY29waWVkIHRv IFNWR0EgZGV2aWNlCisgKiBAY2xpcF9yZWN0czogYXJyYXkgb2YgZGlydHkgcmVjdGFuZ2VzCisg KiBAbnVtX29mX2NsaXBfcmVjdHM6IG51bWJlciBvZiByZWN0YW5nZXMgaW4gQGNsaXBzCisgKiBA aW5jcmVtZW50OiBpbmNyZW1lbnQgdG8gdGhlIG5leHQgZGlydHkgcmVjdCBpbiBAY2xpcHMKKyAq CisgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIGFuIFVwZGF0ZSBjb21tYW5kIHRvIHRoZSBTVkdBIGRl dmljZS4gIFRoaXMgd2lsbCBub3RpZnkKKyAqIHRoZSBkZXZpY2UgdGhhdCBhIHJlZ2lvbiBuZWVk cyB0byBiZSBjb3BpZWQgdG8gdGhlIHNjcmVlbi4gIEF0IHRoaXMgdGltZQorICogd2UgYXJlIG5v dCBjb2FsZXNjaW5nIGNsaXAgcmVjdHMgaW50byBvbmUgbGFyZ2UgY2xpcCByZWN0IGJlY2F1c2Ug dGhlIFNWR0EKKyAqIGRldmljZSB3aWxsIGRvIGl0IGZvciB1cy4KKyAqCisgKiBSRVRVUk5TOgor ICogMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG90aGVyd2lzZQorICovCitpbnQgdm13X2ttc19z dGR1X2RvX3N1cmZhY2VfZGlydHkoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkg IHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJCSAgc3RydWN0IHZtd19mcmFtZWJ1ZmZl ciAqZnJhbWVidWZmZXIsCisJCQkJICBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcF9yZWN0cywK KwkJCQkgIHVuc2lnbmVkIG51bV9vZl9jbGlwX3JlY3RzLCBpbnQgaW5jcmVtZW50KQoreworCXN0 cnVjdCB2bXdfc2NyZWVuX3RhcmdldF9kaXNwbGF5X3VuaXQgKnN0ZHVbVk1XR0ZYX05VTV9ESVNQ TEFZX1VOSVRTXTsKKwlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY3VyX3JlY3Q7CisJc3RydWN0IGRy bV9jcnRjICpjcnRjOworCisJdW5zaWduZWQgbnVtX29mX2R1ID0gMCwgY3VyX2R1LCBjb3VudCA9 IDA7CisJaW50ICAgICAgcmV0ID0gMDsKKworCisJQlVHX09OKCFjbGlwX3JlY3RzIHx8ICFudW1f b2ZfY2xpcF9yZWN0cyk7CisKKwkvKiBGaWd1cmUgb3V0IGFsbCB0aGUgRFUgYWZmZWN0ZWQgYnkg dGhpcyBzdXJmYWNlICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2X3ByaXYtPmRl di0+bW9kZV9jb25maWcuY3J0Y19saXN0LAorCQkJICAgIGhlYWQpIHsKKwkJaWYgKGNydGMtPnBy aW1hcnktPmZiICE9ICZmcmFtZWJ1ZmZlci0+YmFzZSkKKwkJCWNvbnRpbnVlOworCisJCXN0ZHVb bnVtX29mX2R1KytdID0gdm13X2NydGNfdG9fc3RkdShjcnRjKTsKKwl9CisKKwlmb3IgKGN1cl9k dSA9IDA7IGN1cl9kdSA8IG51bV9vZl9kdTsgY3VyX2R1KyspCisJCWZvciAoY3VyX3JlY3QgPSBj bGlwX3JlY3RzLCBjb3VudCA9IDA7CisJCSAgICAgY291bnQgPCBudW1fb2ZfY2xpcF9yZWN0cyAm JiByZXQgPT0gMDsKKwkJICAgICBjdXJfcmVjdCArPSBpbmNyZW1lbnQsIGNvdW50KyspIHsKKwkJ CXJldCA9IHZtd19zdGR1X3VwZGF0ZV9zdChkZXZfcHJpdiwgZmlsZV9wcml2LAorCQkJCQkJIHN0 ZHVbY3VyX2R1XSwKKwkJCQkJCSBjdXJfcmVjdCk7CisJCX0KKworCXJldHVybiByZXQ7Cit9CisK KworCisvKioKKyAqIHZtd19rbXNfc3RkdV9wcmVzZW50IC0gcHJlc2VudCBhIHN1cmZhY2UgdG8g dGhlIGRpc3BsYXkgc3VyZmFjZQorICoKKyAqIEBkZXZfcHJpdjogVk1XIERSTSBkZXZpY2UKKyAq IEBmaWxlX3ByaXY6IFBvaW50ZXIgdG8gYSBkcm0gZmlsZSBwcml2YXRlIHN0cnVjdHVyZQorICog QHZmYjogVXNlZCB0byBwaWNrIHdoaWNoIFNURFUocykgaXMgYWZmZWN0ZWQKKyAqIEB1c2VyX2hh bmRsZTogdXNlciBoYW5kbGUgZm9yIHRoZSBzb3VyY2Ugc3VyZmFjZQorICogQGRlc3RfeDogdG9w L2xlZnQgY29ybmVyIG9mIHRoZSBkaXNwbGF5IGFyZWEgdG8gYmxpdCB0bworICogQGRlc3RfeTog dG9wL2xlZnQgY29ybmVyIG9mIHRoZSBkaXNwbGF5IGFyZWEgdG8gYmxpdCB0bworICogQGNsaXBf cmVjdHM6IGFycmF5IG9mIGRpcnR5IHJlY3RhbmdlcworICogQG51bV9vZl9jbGlwX3JlY3RzOiBu dW1iZXIgb2YgcmVjdGFuZ2VzIGluIEBjbGlwcworICoKKyAqIFRoaXMgZnVuY3Rpb24gY29waWVz IGEgc3VyZmFjZSBvbnRvIHRoZSBkaXNwbGF5IHN1cmZhY2UsIGFuZAorICogdXBkYXRlcyB0aGUg c2NyZWVuIHRhcmdldC4gIFN0cmVjaCBibGl0IGlzIGN1cnJlbnRseSBub3QKKyAqIHN1cHBvcnRl ZC4KKyAqCisgKiBSRVRVUk5TOgorICogMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG90aGVyd2lz ZQorICovCitpbnQgdm13X2ttc19zdGR1X3ByZXNlbnQoc3RydWN0IHZtd19wcml2YXRlICpkZXZf cHJpdiwKKwkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJCSBzdHJ1Y3Qgdm13X2Zy YW1lYnVmZmVyICp2ZmIsCisJCQkgdWludDMyX3QgdXNlcl9oYW5kbGUsCisJCQkgaW50MzJfdCBk ZXN0X3gsIGludDMyX3QgZGVzdF95LAorCQkJIHN0cnVjdCBkcm1fdm13X3JlY3QgKmNsaXBfcmVj dHMsCisJCQkgdWludDMyX3QgbnVtX29mX2NsaXBfcmVjdHMpCit7CisJc3RydWN0IHZtd19zY3Jl ZW5fdGFyZ2V0X2Rpc3BsYXlfdW5pdCAqc3RkdVtWTVdHRlhfTlVNX0RJU1BMQVlfVU5JVFNdOwor CXN0cnVjdCBkcm1fY2xpcF9yZWN0ICp1cGRhdGVfYXJlYTsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNy dGM7CisJc2l6ZV90IGZpZm9fc2l6ZTsKKwlpbnQgbnVtX29mX2R1ID0gMCwgY3VyX2R1LCBpOwor CWludCByZXQgPSAwOworCXN0cnVjdCB2bXdfY2xpcF9yZWN0IHNyY19iYjsKKworCXN0cnVjdCB7 CisJCVNWR0EzZENtZEhlYWRlciAgICAgIGhlYWRlcjsKKwkJU1ZHQTNkQ21kU3VyZmFjZUNvcHkg Ym9keTsKKwl9ICpjbWQ7CisJU1ZHQTNkQ29weUJveCAqYmxpdHM7CisKKworCUJVR19PTighY2xp cF9yZWN0cyB8fCAhbnVtX29mX2NsaXBfcmVjdHMpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShj cnRjLCAmZGV2X3ByaXYtPmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7CisJCWlm IChjcnRjLT5wcmltYXJ5LT5mYiAhPSAmdmZiLT5iYXNlKQorCQkJY29udGludWU7CisKKwkJc3Rk dVtudW1fb2ZfZHUrK10gPSB2bXdfY3J0Y190b19zdGR1KGNydGMpOworCX0KKworCisJdXBkYXRl X2FyZWEgPSBrY2FsbG9jKG51bV9vZl9jbGlwX3JlY3RzLCBzaXplb2YoKnVwZGF0ZV9hcmVhKSwK KwkJCSAgICAgIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseSh1cGRhdGVfYXJlYSA9PSBOVUxM KSkgeworCQlEUk1fRVJST1IoIlRlbXBvcmFyeSBjbGlwIHJlY3QgbWVtb3J5IGFsbG9jIGZhaWxl ZC5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKworCWZpZm9fc2l6ZSA9IHNpemVvZigq Y21kKSArIHNpemVvZihTVkdBM2RDb3B5Qm94KSAqIG51bV9vZl9jbGlwX3JlY3RzOworCisJY21k ID0ga21hbGxvYyhmaWZvX3NpemUsIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseShjbWQgPT0g TlVMTCkpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBzdXJm YWNlIGNvcHkuXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfZnJlZV91cGRhdGVf YXJlYTsKKwl9CisKKwltZW1zZXQoY21kLCAwLCBmaWZvX3NpemUpOworCWNtZC0+aGVhZGVyLmlk ID0gU1ZHQV8zRF9DTURfU1VSRkFDRV9DT1BZOworCisJYmxpdHMgPSAoU1ZHQTNkQ29weUJveCAq KSZjbWRbMV07CisKKworCS8qIEZpZ3VyZSBvdXQgdGhlIHNvdXJjZSBib3VuZGluZyBib3ggKi8K KwlzcmNfYmIueDEgPSBjbGlwX3JlY3RzLT54OworCXNyY19iYi55MSA9IGNsaXBfcmVjdHMtPnk7 CisJc3JjX2JiLngyID0gY2xpcF9yZWN0cy0+eCArIGNsaXBfcmVjdHMtPnc7CisJc3JjX2JiLnky ID0gY2xpcF9yZWN0cy0+eSArIGNsaXBfcmVjdHMtPmg7CisKKwlmb3IgKGkgPSAxOyBpIDwgbnVt X29mX2NsaXBfcmVjdHM7IGkrKykgeworCQlzcmNfYmIueDEgPSBtaW5fdChpbnQsIHNyY19iYi54 MSwgY2xpcF9yZWN0c1tpXS54KTsKKwkJc3JjX2JiLngyID0gbWF4X3QoaW50LCBzcmNfYmIueDIs CisJCQkJICBjbGlwX3JlY3RzW2ldLnggKyAoaW50KSBjbGlwX3JlY3RzW2ldLncpOworCQlzcmNf YmIueTEgPSBtaW5fdChpbnQsIHNyY19iYi55MSwgY2xpcF9yZWN0c1tpXS55KTsKKwkJc3JjX2Ji LnkyID0gbWF4X3QoaW50LCBzcmNfYmIueTIsCisJCQkJICBjbGlwX3JlY3RzW2ldLnkgKyAoaW50 KSBjbGlwX3JlY3RzW2ldLmgpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBudW1fb2ZfY2xpcF9y ZWN0czsgaSsrKSB7CisJCXVwZGF0ZV9hcmVhW2ldLngxID0gY2xpcF9yZWN0c1tpXS54IC0gc3Jj X2JiLngxOworCQl1cGRhdGVfYXJlYVtpXS54MiA9IHVwZGF0ZV9hcmVhW2ldLngxICsgY2xpcF9y ZWN0c1tpXS53OworCQl1cGRhdGVfYXJlYVtpXS55MSA9IGNsaXBfcmVjdHNbaV0ueSAtIHNyY19i Yi55MTsKKwkJdXBkYXRlX2FyZWFbaV0ueTIgPSB1cGRhdGVfYXJlYVtpXS55MSArIGNsaXBfcmVj dHNbaV0uaDsKKwl9CisKKworCWZvciAoY3VyX2R1ID0gMDsgY3VyX2R1IDwgbnVtX29mX2R1OyBj dXJfZHUrKykgeworCQlzdHJ1Y3Qgdm13X2NsaXBfcmVjdCBkZXN0X2JiOworCQlpbnQgbnVtX29m X2JsaXRzOworCisJCWNydGMgPSAmc3RkdVtjdXJfZHVdLT5iYXNlLmNydGM7CisKKwkJZGVzdF9i Yi54MSA9IHNyY19iYi54MSArIGRlc3RfeCAtIGNydGMtPng7CisJCWRlc3RfYmIueTEgPSBzcmNf YmIueTEgKyBkZXN0X3kgLSBjcnRjLT55OworCQlkZXN0X2JiLngyID0gc3JjX2JiLngyICsgZGVz dF94IC0gY3J0Yy0+eDsKKwkJZGVzdF9iYi55MiA9IHNyY19iYi55MiArIGRlc3RfeSAtIGNydGMt Pnk7CisKKwkJLyogU2tpcCBhbnkgU1REVSBvdXRzaWRlIG9mIHRoZSBkZXN0aW5hdGlvbiBib3Vu ZGluZyBib3ggKi8KKwkJaWYgKGRlc3RfYmIueDEgPj0gY3J0Yy0+bW9kZS5oZGlzcGxheSB8fAor CQkgICAgZGVzdF9iYi55MSA+PSBjcnRjLT5tb2RlLnZkaXNwbGF5IHx8CisJCSAgICBkZXN0X2Ji LngyIDw9IDAgfHwgZGVzdF9iYi55MiA8PSAwKQorCQkJY29udGludWU7CisKKwkJLyogTm9ybWFs aXplIHRvIHRvcC1sZWZ0IG9mIHNyYyBib3VuZGluZyBib3ggaW4gZGVzdCBjb29yZCAqLworCQlk ZXN0X2JiLngyID0gY3J0Yy0+bW9kZS5oZGlzcGxheSAtIGRlc3RfYmIueDE7CisJCWRlc3RfYmIu eTIgPSBjcnRjLT5tb2RlLnZkaXNwbGF5IC0gZGVzdF9iYi55MTsKKwkJZGVzdF9iYi54MSA9IDAg LSBkZXN0X2JiLngxOworCQlkZXN0X2JiLnkxID0gMCAtIGRlc3RfYmIueTE7CisKKwkJZm9yIChp ID0gMCwgbnVtX29mX2JsaXRzID0gMDsgaSA8IG51bV9vZl9jbGlwX3JlY3RzOyBpKyspIHsKKwkJ CWludCB4MSA9IG1heF90KGludCwgZGVzdF9iYi54MSwgKGludCl1cGRhdGVfYXJlYVtpXS54MSk7 CisJCQlpbnQgeTEgPSBtYXhfdChpbnQsIGRlc3RfYmIueTEsIChpbnQpdXBkYXRlX2FyZWFbaV0u eTEpOworCQkJaW50IHgyID0gbWluX3QoaW50LCBkZXN0X2JiLngyLCAoaW50KXVwZGF0ZV9hcmVh W2ldLngyKTsKKwkJCWludCB5MiA9IG1pbl90KGludCwgZGVzdF9iYi55MiwgKGludCl1cGRhdGVf YXJlYVtpXS55Mik7CisKKwkJCWlmICh4MSA+PSB4MikKKwkJCQljb250aW51ZTsKKworCQkJaWYg KHkxID49IHkyKQorCQkJCWNvbnRpbnVlOworCisJCQlibGl0c1tudW1fb2ZfYmxpdHNdLnNyY3gg PSAgc3JjX2JiLngxICArIHgxOworCQkJYmxpdHNbbnVtX29mX2JsaXRzXS5zcmN5ID0gIHNyY19i Yi55MSAgKyB5MTsKKwkJCWJsaXRzW251bV9vZl9ibGl0c10ueCAgICA9IC1kZXN0X2JiLngxICsg eDE7CisJCQlibGl0c1tudW1fb2ZfYmxpdHNdLnkgICAgPSAtZGVzdF9iYi55MSArIHkxOworCQkJ YmxpdHNbbnVtX29mX2JsaXRzXS5kICAgID0gMTsKKwkJCWJsaXRzW251bV9vZl9ibGl0c10udyAg ICA9IHgyIC0geDE7CisJCQlibGl0c1tudW1fb2ZfYmxpdHNdLmggICAgPSB5MiAtIHkxOworCQkJ bnVtX29mX2JsaXRzKys7CisJCX0KKworCQlpZiAobnVtX29mX2JsaXRzID09IDApCisJCQljb250 aW51ZTsKKworCQkvKiBDYWxjdWxhdGUgbmV3IGNvbW1hbmQgc2l6ZSAqLworCQlmaWZvX3NpemUg PSBzaXplb2YoKmNtZCkgKyBzaXplb2YoU1ZHQTNkQ29weUJveCkgKiBudW1fb2ZfYmxpdHM7CisK KwkJY21kLT5oZWFkZXIuc2l6ZSA9IGNwdV90b19sZTMyKGZpZm9fc2l6ZSAtIHNpemVvZihjbWQt PmhlYWRlcikpOworCisJCWNtZC0+Ym9keS5zcmMuc2lkICA9IHVzZXJfaGFuZGxlOworCQljbWQt PmJvZHkuZGVzdC5zaWQgPSBzdGR1W2N1cl9kdV0tPmRpc3BsYXlfc3JmLT5yZXMuaWQ7CisKKwkJ cmV0ID0gdm13X2V4ZWNidWZfcHJvY2VzcyhmaWxlX3ByaXYsIGRldl9wcml2LCBOVUxMLCBjbWQs CisJCQkJCSAgZmlmb19zaXplLCAwLCBWTVdfUVVJUktfU0NSRUVOVEFSR0VULAorCQkJCQkgIE5V TEwsIE5VTEwpOworCisJCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCQlicmVhazsKKworCQlm b3IgKGkgPSAwOyBpIDwgbnVtX29mX2JsaXRzOyBpKyspIHsKKwkJCXN0cnVjdCBkcm1fY2xpcF9y ZWN0IGJsaXRfYXJlYTsKKworCQkJLyoKKwkJCSAqIEFkZCBjcnRjIG9mZnNldCBiZWNhdXNlIHZt d19zdGR1X3VwZGF0ZV9zdCBleHBlY3RzCisJCQkgKiBkZXNrdG9wIGNvb3JkaW5hdGVzCisJCQkg Ki8KKwkJCWJsaXRfYXJlYS54MSA9IGJsaXRzW2ldLnggKyBjcnRjLT54OworCQkJYmxpdF9hcmVh LngyID0gYmxpdF9hcmVhLngxICsgYmxpdHNbaV0udzsKKwkJCWJsaXRfYXJlYS55MSA9IGJsaXRz W2ldLnkgKyBjcnRjLT55OworCQkJYmxpdF9hcmVhLnkyID0gYmxpdF9hcmVhLnkxICsgYmxpdHNb aV0uaDsKKwkJCSh2b2lkKSB2bXdfc3RkdV91cGRhdGVfc3QoZGV2X3ByaXYsIE5VTEwsIHN0ZHVb Y3VyX2R1XSwKKwkJCQkJCSAgJmJsaXRfYXJlYSk7CisJCX0KKwl9CisKKwlrZnJlZShjbWQpOwor CitvdXRfZnJlZV91cGRhdGVfYXJlYToKKwlrZnJlZSh1cGRhdGVfYXJlYSk7CisKKwlyZXR1cm4g cmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfc3VyZmFj ZS5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfc3VyZmFjZS5jCmluZGV4IGZiNTRj Y2QuLjgzNWYzNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3N1 cmZhY2UuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9zdXJmYWNlLmMKQEAg LTE0ODYsNiArMTQ4NiwxMCBAQCBpbnQgdm13X3N1cmZhY2VfZ2JfcHJpdl9kZWZpbmUoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwKIAkJCQkJc3JmLT5taXBfbGV2ZWxzWzBdLAogCQkJCQlzcmYtPmZs YWdzICYgU1ZHQTNEX1NVUkZBQ0VfQ1VCRU1BUCk7CiAKKwlpZiAoZGV2X3ByaXYtPmFjdGl2ZV9k aXNwbGF5X3VuaXQgPT0gdm13X2R1X3NjcmVlbl90YXJnZXQgJiYKKwkgICAgZm9yX3NjYW5vdXQp CisJCXNyZi0+ZmxhZ3MgfD0gU1ZHQTNEX1NVUkZBQ0VfU0NSRUVOVEFSR0VUOworCiAJLyoKIAkg KiBGcm9tIHRoaXMgcG9pbnQsIHRoZSBnZW5lcmljIHJlc291cmNlIG1hbmFnZW1lbnQgZnVuY3Rp b25zCiAJICogZGVzdHJveSB0aGUgb2JqZWN0IG9uIGZhaWx1cmUuCmRpZmYgLS1naXQgYS9pbmNs dWRlL3VhcGkvZHJtL3Ztd2dmeF9kcm0uaCBiL2luY2x1ZGUvdWFwaS9kcm0vdm13Z2Z4X2RybS5o CmluZGV4IGM0NzJiZWRiLi5jOGE4NjMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvZHJtL3Zt d2dmeF9kcm0uaAorKysgYi9pbmNsdWRlL3VhcGkvZHJtL3Ztd2dmeF9kcm0uaApAQCAtODgsNiAr ODgsNyBAQAogI2RlZmluZSBEUk1fVk1XX1BBUkFNXzNEX0NBUFNfU0laRSAgICAgOAogI2RlZmlu ZSBEUk1fVk1XX1BBUkFNX01BWF9NT0JfTUVNT1JZICAgOQogI2RlZmluZSBEUk1fVk1XX1BBUkFN X01BWF9NT0JfU0laRSAgICAgMTAKKyNkZWZpbmUgRFJNX1ZNV19QQVJBTV9TQ1JFRU5fVEFSR0VU ICAgIDExCiAKIC8qKgogICogZW51bSBkcm1fdm13X2hhbmRsZV90eXBlIC0gaGFuZGxlIHR5cGUg Zm9yIHJlZiBpb2N0bHMKLS0gCjIuMS4wCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9kcmktZGV2ZWwK