From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Hellstrom Subject: [PATCH 6/6] drm/vmwgfx: Implement screen targets Date: Mon, 9 Mar 2015 05:33:09 -0700 Message-ID: <1425904389-6623-2-git-send-email-thellstrom@vmware.com> References: <1425904389-6623-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 smtp-outbound-2.vmware.com (smtp-outbound-2.vmware.com [208.91.2.13]) by gabe.freedesktop.org (Postfix) with ESMTP id DF5076E4F0 for ; Mon, 9 Mar 2015 05:33:26 -0700 (PDT) Received: from sc9-mailhost3.vmware.com (sc9-mailhost3.vmware.com [10.113.161.73]) by smtp-outbound-2.vmware.com (Postfix) with ESMTP id B6CA72830A for ; Mon, 9 Mar 2015 05:33:26 -0700 (PDT) Received: from EX13-CAS-002.vmware.com (EX13-CAS-002.vmware.com [10.113.191.52]) by sc9-mailhost3.vmware.com (Postfix) with ESMTP id B1941402FA for ; Mon, 9 Mar 2015 05:33:26 -0700 (PDT) In-Reply-To: <1425904389-6623-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 Cc: Thomas Hellstrom List-Id: dri-devel@lists.freedesktop.org RnJvbTogU2luY2xhaXIgWWVoIDxzeWVoQHZtd2FyZS5jb20+CgpBZGQgc3VwcG9ydCBmb3IgdGhl IHNjcmVlbiB0YXJnZXQgZGV2aWNlIGludGVyZmFjZS4KQWRkIGEgZ2V0cGFyYW0gcGFyYW1ldGVy IGFuZCBidW1wIG1pbm9yIHRvIHNpZ25hbCBhdmFpbGFiaWxpdHkuCgpTaWduZWQtb2ZmLWJ5OiBT aW5jbGFpciBZZWggPHN5ZWhAdm13YXJlLmNvbT4KU2lnbmVkLW9mZi1ieTogVGhvbWFzIEhlbGxz dHJvbSA8dGhlbGxzdHJvbUB2bXdhcmUuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS92bXdnZngv TWFrZWZpbGUgICAgICAgICB8ICAgIDIgKy0KIGRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4 X2Rydi5jICAgICB8ICAgMjEgKy0KIGRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5o ICAgICB8ICAgMTUgKy0KIGRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2lvY3RsLmMgICB8 ICAgIDQgKwogZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmMgICAgIHwgICA0NyAr LQogZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmggICAgIHwgICAyMCArCiBkcml2 ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9tb2IuYyAgICAgfCAgICAzICstCiBkcml2ZXJzL2dw dS9kcm0vdm13Z2Z4L3Ztd2dmeF9zdGR1LmMgICAgfCAxMzYwICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3N1cmZhY2UuYyB8ICAg IDQgKwogaW5jbHVkZS91YXBpL2RybS92bXdnZnhfZHJtLmggICAgICAgICAgIHwgICAgMSArCiAx MCBmaWxlcyBjaGFuZ2VkLCAxNDU5IGluc2VydGlvbnMoKyksIDE4IGRlbGV0aW9ucygtKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3N0ZHUuYwoKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9k cm0vdm13Z2Z4L01ha2VmaWxlCmluZGV4IGNlMGFiOTUuLmRlMDZiN2EgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS92bXdnZngvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dm eC9NYWtlZmlsZQpAQCAtNyw2ICs3LDYgQEAgdm13Z2Z4LXkgOj0gdm13Z2Z4X2V4ZWNidWYubyB2 bXdnZnhfZ21yLm8gdm13Z2Z4X2ttcy5vIHZtd2dmeF9kcnYubyBcCiAJICAgIHZtd2dmeF9vdmVy bGF5Lm8gdm13Z2Z4X21hcmtlci5vIHZtd2dmeF9nbXJpZF9tYW5hZ2VyLm8gXAogCSAgICB2bXdn ZnhfZmVuY2UubyB2bXdnZnhfZG1hYnVmLm8gdm13Z2Z4X3Njcm4ubyB2bXdnZnhfY29udGV4dC5v IFwKIAkgICAgdm13Z2Z4X3N1cmZhY2UubyB2bXdnZnhfcHJpbWUubyB2bXdnZnhfbW9iLm8gdm13 Z2Z4X3NoYWRlci5vIFwKLQkgICAgdm13Z2Z4X2NtZGJ1Zl9yZXMubyBcCisJICAgIHZtd2dmeF9j bWRidWZfcmVzLm8gdm13Z2Z4X3N0ZHUub1wKIAogb2JqLSQoQ09ORklHX0RSTV9WTVdHRlgpIDo9 IHZtd2dmeC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYu YyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5jCmluZGV4IDZjNmI2NTUuLjY5 NjJlNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5jCkBAIC02NzMsNiArNjczLDIw IEBAIHN0YXRpYyBpbnQgdm13X2RyaXZlcl9sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVu c2lnbmVkIGxvbmcgY2hpcHNldCkKIAkJCQkgU1ZHQV9SRUdfTUFYX1BSSU1BUllfQk9VTkRJTkdf Qk9YX01FTSk7CiAJCWRldl9wcml2LT5tYXhfbW9iX3NpemUgPQogCQkJdm13X3JlYWQoZGV2X3By aXYsIFNWR0FfUkVHX01PQl9NQVhfU0laRSk7CisJCWRldl9wcml2LT5zdGR1X21heF93aWR0aCA9 CisJCQl2bXdfcmVhZChkZXZfcHJpdiwgU1ZHQV9SRUdfU0NSRUVOVEFSR0VUX01BWF9XSURUSCk7 CisJCWRldl9wcml2LT5zdGR1X21heF9oZWlnaHQgPQorCQkJdm13X3JlYWQoZGV2X3ByaXYsIFNW R0FfUkVHX1NDUkVFTlRBUkdFVF9NQVhfSEVJR0hUKTsKKworCQl2bXdfd3JpdGUoZGV2X3ByaXYs IFNWR0FfUkVHX0RFVl9DQVAsCisJCQkgIFNWR0EzRF9ERVZDQVBfTUFYX1RFWFRVUkVfV0lEVEgp OworCQlkZXZfcHJpdi0+dGV4dHVyZV9tYXhfd2lkdGggPSB2bXdfcmVhZChkZXZfcHJpdiwKKwkJ CQkJCSAgICAgICBTVkdBX1JFR19ERVZfQ0FQKTsKKwkJdm13X3dyaXRlKGRldl9wcml2LCBTVkdB X1JFR19ERVZfQ0FQLAorCQkJICBTVkdBM0RfREVWQ0FQX01BWF9URVhUVVJFX0hFSUdIVCk7CisJ CWRldl9wcml2LT50ZXh0dXJlX21heF9oZWlnaHQgPSB2bXdfcmVhZChkZXZfcHJpdiwKKwkJCQkJ CQlTVkdBX1JFR19ERVZfQ0FQKTsKKwogCX0gZWxzZQogCQlkZXZfcHJpdi0+cHJpbV9iYl9tZW0g PSBkZXZfcHJpdi0+dnJhbV9zaXplOwogCkBAIC02ODAsMTMgKzY5NCw2IEBAIHN0YXRpYyBpbnQg dm13X2RyaXZlcl9sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgY2hp cHNldCkKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKQogCQlnb3RvIG91dF9lcnIwOwogCi0JLyoK LQkgKiBMaW1pdCBiYWNrIGJ1ZmZlciBzaXplIHRvIFZSQU0gc2l6ZS4gIFJlbW92ZSB0aGlzIG9u Y2UKLQkgKiBzY3JlZW4gdGFyZ2V0cyBhcmUgaW1wbGVtZW50ZWQuCi0JICovCi0JaWYgKGRldl9w cml2LT5wcmltX2JiX21lbSA+IGRldl9wcml2LT52cmFtX3NpemUpCi0JCWRldl9wcml2LT5wcmlt X2JiX21lbSA9IGRldl9wcml2LT52cmFtX3NpemU7Ci0KIAl2bXdfcHJpbnRfY2FwYWJpbGl0aWVz KGRldl9wcml2LT5jYXBhYmlsaXRpZXMpOwogCiAJaWYgKGRldl9wcml2LT5jYXBhYmlsaXRpZXMg JiBTVkdBX0NBUF9HTVIyKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Zt d2dmeF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5oCmluZGV4IDgw MTQ4MWYuLjc1NzYyZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4 X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5oCkBAIC00MCwx NyArNDAsMTcgQEAKICNpbmNsdWRlIDxkcm0vdHRtL3R0bV9tb2R1bGUuaD4KICNpbmNsdWRlICJ2 bXdnZnhfZmVuY2UuaCIKIAotI2RlZmluZSBWTVdHRlhfRFJJVkVSX0RBVEUgIjIwMTQwNzA0Igor I2RlZmluZSBWTVdHRlhfRFJJVkVSX0RBVEUgIjIwMTUwMjIzIgogI2RlZmluZSBWTVdHRlhfRFJJ VkVSX01BSk9SIDIKLSNkZWZpbmUgVk1XR0ZYX0RSSVZFUl9NSU5PUiA2Ci0jZGVmaW5lIFZNV0dG WF9EUklWRVJfUEFUQ0hMRVZFTCAxCisjZGVmaW5lIFZNV0dGWF9EUklWRVJfTUlOT1IgNworI2Rl ZmluZSBWTVdHRlhfRFJJVkVSX1BBVENITEVWRUwgMAogI2RlZmluZSBWTVdHRlhfRklMRV9QQUdF X09GRlNFVCAweDAwMTAwMDAwCiAjZGVmaW5lIFZNV0dGWF9GSUZPX1NUQVRJQ19TSVpFICgxMDI0 KjEwMjQpCiAjZGVmaW5lIFZNV0dGWF9NQVhfUkVMT0NBVElPTlMgMjA0OAogI2RlZmluZSBWTVdH RlhfTUFYX1ZBTElEQVRJT05TIDIwNDgKICNkZWZpbmUgVk1XR0ZYX01BWF9ESVNQTEFZUyAxNgog I2RlZmluZSBWTVdHRlhfQ01EX0JPVU5DRV9JTklUX1NJWkUgMzI3NjgKLSNkZWZpbmUgVk1XR0ZY X0VOQUJMRV9TQ1JFRU5fVEFSR0VUX09UQUJMRSAwCisjZGVmaW5lIFZNV0dGWF9FTkFCTEVfU0NS RUVOX1RBUkdFVF9PVEFCTEUgMQogCiAvKgogICogUGVyaGFwcyB3ZSBzaG91bGQgaGF2ZSBzeXNm cyBlbnRyaWVzIGZvciB0aGVzZS4KQEAgLTMzNyw3ICszMzcsOCBAQCBzdHJ1Y3Qgdm13X2N0eF9i aW5kaW5nX3N0YXRlIHsKIGVudW0gdm13X2Rpc3BsYXlfdW5pdF90eXBlIHsKIAl2bXdfZHVfaW52 YWxpZCA9IDAsCiAJdm13X2R1X2xlZ2FjeSwKLQl2bXdfZHVfc2NyZWVuX29iamVjdAorCXZtd19k dV9zY3JlZW5fb2JqZWN0LAorCXZtd19kdV9zY3JlZW5fdGFyZ2V0CiB9OwogCiAKQEAgLTQwMiw2 ICs0MDMsMTAgQEAgc3RydWN0IHZtd19wcml2YXRlIHsKIAl1aW50MzJfdCBtbWlvX3NpemU7CiAJ dWludDMyX3QgZmJfbWF4X3dpZHRoOwogCXVpbnQzMl90IGZiX21heF9oZWlnaHQ7CisJdWludDMy X3QgdGV4dHVyZV9tYXhfd2lkdGg7CisJdWludDMyX3QgdGV4dHVyZV9tYXhfaGVpZ2h0OworCXVp bnQzMl90IHN0ZHVfbWF4X3dpZHRoOworCXVpbnQzMl90IHN0ZHVfbWF4X2hlaWdodDsKIAl1aW50 MzJfdCBpbml0aWFsX3dpZHRoOwogCXVpbnQzMl90IGluaXRpYWxfaGVpZ2h0OwogCV9fbGUzMiBf X2lvbWVtICptbWlvX3ZpcnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Zt d2dmeF9pb2N0bC5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfaW9jdGwuYwppbmRl eCA2OWM4Y2UyLi41NTk0MGJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Zt d2dmeF9pb2N0bC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2lvY3RsLmMK QEAgLTEwNSw2ICsxMDUsMTAgQEAgaW50IHZtd19nZXRwYXJhbV9pb2N0bChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LCB2b2lkICpkYXRhLAogCWNhc2UgRFJNX1ZNV19QQVJBTV9NQVhfTU9CX1NJWkU6 CiAJCXBhcmFtLT52YWx1ZSA9IGRldl9wcml2LT5tYXhfbW9iX3NpemU7CiAJCWJyZWFrOworCWNh c2UgRFJNX1ZNV19QQVJBTV9TQ1JFRU5fVEFSR0VUOgorCQlwYXJhbS0+dmFsdWUgPQorCQkJKGRl dl9wcml2LT5hY3RpdmVfZGlzcGxheV91bml0ID09IHZtd19kdV9zY3JlZW5fdGFyZ2V0KTsKKwkJ YnJlYWs7CiAJZGVmYXVsdDoKIAkJRFJNX0VSUk9SKCJJbGxlZ2FsIHZtd2dmeCBnZXQgcGFyYW0g cmVxdWVzdDogJWRcbiIsCiAJCQkgIHBhcmFtLT5wYXJhbSk7CmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9rbXMuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13 Z2Z4X2ttcy5jCmluZGV4IGEyY2JkNjUuLjYyZjA2OGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS92bXdnZngvdm13Z2Z4X2ttcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13 Z2Z4X2ttcy5jCkBAIC00NjIsNiArNDYyLDExIEBAIHN0YXRpYyBpbnQgdm13X2ZyYW1lYnVmZmVy X3N1cmZhY2VfZGlydHkoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsCiAJCQkJ CQkgICBmbGFncywgY29sb3IsCiAJCQkJCQkgICBjbGlwcywgbnVtX2NsaXBzLAogCQkJCQkJICAg aW5jLCBOVUxMKTsKKwllbHNlCisJCXJldCA9IHZtd19rbXNfc3RkdV9kb19zdXJmYWNlX2RpcnR5 KGRldl9wcml2LCBmaWxlX3ByaXYsCisJCQkJCQkgICAgJnZmYnMtPmJhc2UsCisJCQkJCQkgICAg Y2xpcHMsIG51bV9jbGlwcywKKwkJCQkJCSAgICBpbmMpOwogCiAJdHRtX3JlYWRfdW5sb2NrKCZk ZXZfcHJpdi0+cmVzZXJ2YXRpb25fc2VtKTsKIApAQCAtNjM0LDYgKzYzOSwxMSBAQCBzdGF0aWMg aW50IHZtd19mcmFtZWJ1ZmZlcl9kbWFidWZfZGlydHkoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAq ZnJhbWVidWZmZXIsCiAJCQkJCQkgIGZsYWdzLCBjb2xvciwKIAkJCQkJCSAgY2xpcHMsIG51bV9j bGlwcywgaW5jcmVtZW50LAogCQkJCQkJICBOVUxMKTsKKwl9IGVsc2UgeworCQlyZXQgPSB2bXdf a21zX3N0ZHVfZG9fc3VyZmFjZV9kaXJ0eShkZXZfcHJpdiwgZmlsZV9wcml2LAorCQkJCQkJICAg ICZ2ZmJkLT5iYXNlLAorCQkJCQkJICAgIGNsaXBzLCBudW1fY2xpcHMsCisJCQkJCQkgICAgaW5j cmVtZW50KTsKIAl9CiAKIAl0dG1fcmVhZF91bmxvY2soJmRldl9wcml2LT5yZXNlcnZhdGlvbl9z ZW0pOwpAQCAtMTAxMiw2ICsxMDIyLDEwIEBAIGludCB2bXdfa21zX3ByZXNlbnQoc3RydWN0IHZt d19wcml2YXRlICpkZXZfcHJpdiwKIAkJICAgIHN0cnVjdCBkcm1fdm13X3JlY3QgKmNsaXBzLAog CQkgICAgdWludDMyX3QgbnVtX2NsaXBzKQogeworCWlmIChkZXZfcHJpdi0+YWN0aXZlX2Rpc3Bs YXlfdW5pdCA9PSB2bXdfZHVfc2NyZWVuX3RhcmdldCkKKwkJcmV0dXJuIHZtd19rbXNfc3RkdV9w cmVzZW50KGRldl9wcml2LCBmaWxlX3ByaXYsIHZmYiwgc2lkLAorCQkJCQkgICAgZGVzdFgsIGRl c3RZLCBjbGlwcywgbnVtX2NsaXBzKTsKKwogCXJldHVybiB2bXdfa21zX2dlbmVyaWNfcHJlc2Vu dChkZXZfcHJpdiwgZmlsZV9wcml2LCB2ZmIsIHN1cmZhY2UsIHNpZCwKIAkJCQkgICAgICAgZGVz dFgsIGRlc3RZLCBjbGlwcywgbnVtX2NsaXBzKTsKIH0KQEAgLTExMzYsOSArMTE1MCwxMiBAQCBp bnQgdm13X2ttc19pbml0KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJZGV2LT5tb2Rl X2NvbmZpZy5tYXhfd2lkdGggPSA4MTkyOwogCWRldi0+bW9kZV9jb25maWcubWF4X2hlaWdodCA9 IDgxOTI7CiAKLQlyZXQgPSB2bXdfa21zX3NvdV9pbml0X2Rpc3BsYXkoZGV2X3ByaXYpOwotCWlm IChyZXQpIC8qIEZhbGxiYWNrICovCi0JCXJldCA9IHZtd19rbXNfbGR1X2luaXRfZGlzcGxheShk ZXZfcHJpdik7CisJcmV0ID0gdm13X2ttc19zdGR1X2luaXRfZGlzcGxheShkZXZfcHJpdik7CisJ aWYgKHJldCkgeworCQlyZXQgPSB2bXdfa21zX3NvdV9pbml0X2Rpc3BsYXkoZGV2X3ByaXYpOwor CQlpZiAocmV0KSAvKiBGYWxsYmFjayAqLworCQkJcmV0ID0gdm13X2ttc19sZHVfaW5pdF9kaXNw bGF5KGRldl9wcml2KTsKKwl9CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTE1NSw2ICsxMTcyLDgg QEAgaW50IHZtd19rbXNfY2xvc2Uoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdikKIAlkcm1f bW9kZV9jb25maWdfY2xlYW51cChkZXZfcHJpdi0+ZGV2KTsKIAlpZiAoZGV2X3ByaXYtPmFjdGl2 ZV9kaXNwbGF5X3VuaXQgPT0gdm13X2R1X3NjcmVlbl9vYmplY3QpCiAJCXJldCA9IHZtd19rbXNf c291X2Nsb3NlX2Rpc3BsYXkoZGV2X3ByaXYpOworCWVsc2UgaWYgKGRldl9wcml2LT5hY3RpdmVf ZGlzcGxheV91bml0ID09IHZtd19kdV9zY3JlZW5fdGFyZ2V0KQorCQlyZXQgPSB2bXdfa21zX3N0 ZHVfY2xvc2VfZGlzcGxheShkZXZfcHJpdik7CiAJZWxzZQogCQlyZXQgPSB2bXdfa21zX2xkdV9j bG9zZV9kaXNwbGF5KGRldl9wcml2KTsKIApAQCAtMTMwNiw3ICsxMzI1LDkgQEAgYm9vbCB2bXdf a21zX3ZhbGlkYXRlX21vZGVfdnJhbShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCQkJ CXVpbnQzMl90IHBpdGNoLAogCQkJCXVpbnQzMl90IGhlaWdodCkKIHsKLQlyZXR1cm4gKCh1NjQp IHBpdGNoICogKHU2NCkgaGVpZ2h0KSA8ICh1NjQpIGRldl9wcml2LT5wcmltX2JiX21lbTsKKwly ZXR1cm4gKCh1NjQpIHBpdGNoICogKHU2NCkgaGVpZ2h0KSA8ICh1NjQpCisJCSgoZGV2X3ByaXYt PmFjdGl2ZV9kaXNwbGF5X3VuaXQgPT0gdm13X2R1X3NjcmVlbl90YXJnZXQpID8KKwkJIGRldl9w cml2LT5wcmltX2JiX21lbSA6IGRldl9wcml2LT52cmFtX3NpemUpOwogfQogCiAKQEAgLTE1NTMs NiArMTU3NCwxMSBAQCBpbnQgdm13X2R1X2Nvbm5lY3Rvcl9maWxsX21vZGVzKHN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IsCiAJaWYgKGRldl9wcml2LT5hY3RpdmVfZGlzcGxheV91bml0 ID09IHZtd19kdV9zY3JlZW5fb2JqZWN0KQogCQlhc3N1bWVkX2JwcCA9IDQ7CiAKKwlpZiAoZGV2 X3ByaXYtPmFjdGl2ZV9kaXNwbGF5X3VuaXQgPT0gdm13X2R1X3NjcmVlbl90YXJnZXQpIHsKKwkJ bWF4X3dpZHRoICA9IG1pbihtYXhfd2lkdGgsICBkZXZfcHJpdi0+c3RkdV9tYXhfd2lkdGgpOwor CQltYXhfaGVpZ2h0ID0gbWluKG1heF9oZWlnaHQsIGRldl9wcml2LT5zdGR1X21heF9oZWlnaHQp OworCX0KKwogCS8qIEFkZCBwcmVmZXJyZWQgbW9kZSAqLwogCW1vZGUgPSBkcm1fbW9kZV9kdXBs aWNhdGUoZGV2LCAmcHJlZm1vZGUpOwogCWlmICghbW9kZSkKQEAgLTE2NzUsNiArMTcwMSwxOSBA QCBpbnQgdm13X2ttc191cGRhdGVfbGF5b3V0X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs IHZvaWQgKmRhdGEsCiAJCQlib3VuZGluZ19ib3guaCA9IHJlY3RzW2ldLnkgKyByZWN0c1tpXS5o OwogCX0KIAorCS8qCisJICogRm9yIFNjcmVlbiBUYXJnZXQgRGlzcGxheSBVbml0LCBhbGwgdGhl IGRpc3BsYXlzIG11c3QgZml0CisJICogaW5zaWRlIG9mIG1heGltdW0gdGV4dHVyZSBzaXplLgor CSAqLworCWlmIChkZXZfcHJpdi0+YWN0aXZlX2Rpc3BsYXlfdW5pdCA9PSB2bXdfZHVfc2NyZWVu X3RhcmdldCkKKwkJaWYgKGJvdW5kaW5nX2JveC53ID4gZGV2X3ByaXYtPnRleHR1cmVfbWF4X3dp ZHRoIHx8CisJCSAgICBib3VuZGluZ19ib3guaCA+IGRldl9wcml2LT50ZXh0dXJlX21heF9oZWln aHQpIHsKKwkJCURSTV9FUlJPUigiTGF5b3V0IGV4Y2VlZHMgbWF4aW11bSB0ZXh0dXJlIHNpemVc biIpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0X2ZyZWU7CisJCX0KKworCiAJdm13 X2R1X3VwZGF0ZV9sYXlvdXQoZGV2X3ByaXYsIGFyZy0+bnVtX291dHB1dHMsIHJlY3RzKTsKIAog b3V0X2ZyZWU6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9rbXMu aCBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ttcy5oCmluZGV4IDE0Njk2ZmMuLmI3 MDRhMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ttcy5oCisr KyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ttcy5oCkBAIC0yMDUsNCArMjA1LDI0 IEBAIGludCB2bXdfa21zX3NvdV9kb19kbWFidWZfZGlydHkoc3RydWN0IGRybV9maWxlICpmaWxl X3ByaXYsCiAJCQkJc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXBzLAogCQkJCXVuc2lnbmVkIG51 bV9jbGlwcywgaW50IGluY3JlbWVudCwKIAkJCQlzdHJ1Y3Qgdm13X2ZlbmNlX29iaiAqKm91dF9m ZW5jZSk7CisKKworLyoKKyAqIFNjcmVlbiBUYXJnZXQgRGlzcGxheSBVbml0IGZ1bmN0aW9ucyAt IHZtd2dmeF9zdGR1LmMKKyAqLworaW50IHZtd19rbXNfc3RkdV9pbml0X2Rpc3BsYXkoc3RydWN0 IHZtd19wcml2YXRlICpkZXZfcHJpdik7CitpbnQgdm13X2ttc19zdGR1X2Nsb3NlX2Rpc3BsYXko c3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdik7CitpbnQgdm13X2ttc19zdGR1X2RvX3N1cmZh Y2VfZGlydHkoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkgIHN0cnVjdCBkcm1f ZmlsZSAqZmlsZV9wcml2LAorCQkJCSAgc3RydWN0IHZtd19mcmFtZWJ1ZmZlciAqZnJhbWVidWZm ZXIsCisJCQkJICBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcHMsCisJCQkJICB1bnNpZ25lZCBu dW1fY2xpcHMsIGludCBpbmNyZW1lbnQpOworaW50IHZtd19rbXNfc3RkdV9wcmVzZW50KHN0cnVj dCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYs CisJCQkgc3RydWN0IHZtd19mcmFtZWJ1ZmZlciAqdmZiLAorCQkJIHVpbnQzMl90IHVzZXJfaGFu ZGxlLAorCQkJIGludDMyX3QgZGVzdF94LCBpbnQzMl90IGRlc3RfeSwKKwkJCSBzdHJ1Y3QgZHJt X3Ztd19yZWN0ICpjbGlwcywKKwkJCSB1aW50MzJfdCBudW1fY2xpcHMpOworCiAjZW5kaWYKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X21vYi5jIGIvZHJpdmVycy9n cHUvZHJtL3Ztd2dmeC92bXdnZnhfbW9iLmMKaW5kZXggMDRhNjRiOC4uMGMxZWU2ZCAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfbW9iLmMKKysrIGIvZHJpdmVycy9n cHUvZHJtL3Ztd2dmeC92bXdnZnhfbW9iLmMKQEAgLTMxLDcgKzMxLDggQEAKICAqIElmIHdlIHNl dCB1cCB0aGUgc2NyZWVuIHRhcmdldCBvdGFibGUsIHNjcmVlbiBvYmplY3RzIHN0b3Agd29ya2lu Zy4KICAqLwogCi0jZGVmaW5lIFZNV19PVEFCTEVfU0VUVVBfU1VCICgoVk1XR0ZYX0VOQUJMRV9T Q1JFRU5fVEFSR0VUX09UQUJMRSkgPyAwIDogMSkKKyNkZWZpbmUgVk1XX09UQUJMRV9TRVRVUF9T VUIgKChWTVdHRlhfRU5BQkxFX1NDUkVFTl9UQVJHRVRfT1RBQkxFICYmCVwKKwkJCSAgICAgICAo ZGV2X3ByaXYtPmNhcGFiaWxpdGllcyAmIFNWR0FfQ0FQXzNEKSkgPyAwIDogMSkKIAogI2lmZGVm IENPTkZJR182NEJJVAogI2RlZmluZSBWTVdfUFBOX1NJWkUgOApkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfc3RkdS5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92 bXdnZnhfc3RkdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlOGQ4OTYK LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9zdGR1LmMK QEAgLTAsMCArMSwxMzYwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJp Z2h0IMKpIDIwMTQgVk13YXJlLCBJbmMuLCBQYWxvIEFsdG8sIENBLiwgVVNBCisgKiBBbGwgUmln aHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUg b2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29m dHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdh cmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVk aW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlm eSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWIgbGljZW5zZSwgYW5kL29yIHNl bGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3 aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZQorICogbmV4dCBwYXJh Z3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9y dGlvbnMKKyAqIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklE RUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICog SU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQg Tk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9M REVSUywgQVVUSE9SUyBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJ TSwKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBP RiBDT05UUkFDVCwgVE9SVCBPUgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBP UiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRQorICogVVNFIE9SIE9USEVS IERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor CisjaW5jbHVkZSAidm13Z2Z4X2ttcy5oIgorI2luY2x1ZGUgPGRybS9kcm1fcGxhbmVfaGVscGVy Lmg+CisjaW5jbHVkZSAic3ZnYTNkX3N1cmZhY2VkZWZzLmgiCisKKyNkZWZpbmUgdm13X2NydGNf dG9fc3RkdSh4KSBcCisJY29udGFpbmVyX29mKHgsIHN0cnVjdCB2bXdfc2NyZWVuX3RhcmdldF9k aXNwbGF5X3VuaXQsIGJhc2UuY3J0YykKKyNkZWZpbmUgdm13X2VuY29kZXJfdG9fc3RkdSh4KSBc CisJY29udGFpbmVyX29mKHgsIHN0cnVjdCB2bXdfc2NyZWVuX3RhcmdldF9kaXNwbGF5X3VuaXQs IGJhc2UuZW5jb2RlcikKKyNkZWZpbmUgdm13X2Nvbm5lY3Rvcl90b19zdGR1KHgpIFwKKwljb250 YWluZXJfb2YoeCwgc3RydWN0IHZtd19zY3JlZW5fdGFyZ2V0X2Rpc3BsYXlfdW5pdCwgYmFzZS5j b25uZWN0b3IpCisKKworCitlbnVtIHN0ZHVfY29udGVudF90eXBlIHsKKwlTQU1FX0FTX0RJU1BM QVkgPSAwLAorCVNFUEFSQVRFX1NVUkZBQ0UsCisJU0VQQVJBVEVfRE1BCit9OworCisKKworLyoq CisgKiBzdHJ1Y3Qgdm13X3NjcmVlbl90YXJnZXRfZGlzcGxheV91bml0CisgKgorICogQGJhc2U6 IFZNVyBzcGVjaWZpYyBEVSBzdHJ1Y3R1cmUKKyAqIEBkaXNwbGF5X3NyZjogc3VyZmFjZSB0byBi ZSBkaXNwbGF5ZWQuICBUaGUgZGltZW5zaW9uIG9mIHRoaXMgd2lsbCBhbHdheXMKKyAqICAgICAg ICAgICAgICAgbWF0Y2ggdGhlIGRpc3BsYXkgbW9kZS4gIElmIHRoZSBkaXNwbGF5IG1vZGUgbWF0 Y2hlcworICogICAgICAgICAgICAgICBjb250ZW50X3ZmYnMgZGltZW5zaW9ucywgdGhlbiB0aGlz IGlzIGEgcG9pbnRlciBpbnRvIHRoZQorICogICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIGZp ZWxkIGluIGNvbnRlbnRfdmZicy4gIElmIG5vdCwgdGhlbiB0aGlzCisgKiAgICAgICAgICAgICAg IGlzIGEgc2VwYXJhdGUgYnVmZmVyIHRvIHdoaWNoIGNvbnRlbnRfdmZicyB3aWxsIGJsaXQgdG8u CisgKiBAY29udGVudF9mYjogaG9sZHMgdGhlIHJlbmRlcmVkIGNvbnRlbnQsIGNhbiBiZSBhIHN1 cmZhY2Ugb3IgRE1BIGJ1ZmZlcgorICogQGNvbnRlbnRfdHlwZTogIGNvbnRlbnRfZmIgdHlwZQor ICogQGRlZmluZWQ6ICB0cnVlIGlmIHRoZSBjdXJyZW50IGRpc3BsYXkgdW5pdCBoYXMgYmVlbiBp bml0aWFsaXplZAorICovCitzdHJ1Y3Qgdm13X3NjcmVlbl90YXJnZXRfZGlzcGxheV91bml0IHsK KwlzdHJ1Y3Qgdm13X2Rpc3BsYXlfdW5pdCBiYXNlOworCisJc3RydWN0IHZtd19zdXJmYWNlICAg ICAqZGlzcGxheV9zcmY7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqY29udGVudF9mYjsKKwor CWVudW0gc3RkdV9jb250ZW50X3R5cGUgY29udGVudF9mYl90eXBlOworCisJYm9vbCBkZWZpbmVk OworfTsKKworCisKK3N0YXRpYyB2b2lkIHZtd19zdGR1X2Rlc3Ryb3koc3RydWN0IHZtd19zY3Jl ZW5fdGFyZ2V0X2Rpc3BsYXlfdW5pdCAqc3RkdSk7CisKKworCisvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqCisgKiBTY3JlZW4gVGFyZ2V0IERpc3BsYXkgVW5pdCBoZWxwZXIgRnVuY3Rpb25zCisgKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCisKKy8qKgorICogdm13X3N0ZHVfcGluX2Rpc3BsYXkgLSBwaW5z IHRoZSByZXNvdXJjZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRpc3BsYXkgc3VyZmFjZQorICoKKyAq IEBzdGR1OiBjb250YWlucyB0aGUgZGlzcGxheSBzdXJmYWNlCisgKgorICogU2luY2UgdGhlIGRp c3BsYXkgc3VyZmFjZSBjYW4gZWl0aGVyIGJlIGEgcHJpdmF0ZSBzdXJmYWNlIGFsbG9jYXRlZCBi eSB1cywKKyAqIG9yIGl0IGNhbiBwb2ludCB0byB0aGUgY29udGVudCBzdXJmYWNlLCB3ZSB1c2Ug dGhpcyBmdW5jdGlvbiB0byBub3QgcGluIHRoZQorICogc2FtZSByZXNvdXJjZSB0d2ljZS4KKyAq Lworc3RhdGljIGludCB2bXdfc3RkdV9waW5fZGlzcGxheShzdHJ1Y3Qgdm13X3NjcmVlbl90YXJn ZXRfZGlzcGxheV91bml0ICpzdGR1KQoreworCXJldHVybiB2bXdfcmVzb3VyY2VfcGluKCZzdGR1 LT5kaXNwbGF5X3NyZi0+cmVzKTsKK30KKworCisKKy8qKgorICogdm13X3N0ZHVfdW5waW5fZGlz cGxheSAtIHVucGlucyB0aGUgcmVzb3VyY2UgYXNzb2NpYXRlZCB3aXRoIGRpc3BsYXkgc3VyZmFj ZQorICoKKyAqIEBzdGR1OiBjb250YWlucyB0aGUgZGlzcGxheSBzdXJmYWNlCisgKgorICogSWYg dGhlIGRpc3BsYXkgc3VyZmFjZSB3YXMgcHJpdmF0ZWRseSBhbGxvY2F0ZWQgYnkKKyAqIHZtd19z dXJmYWNlX2diX3ByaXZfZGVmaW5lKCkgYW5kIG5vdCByZWdpc3RlcmVkIGFzIGEgZnJhbWVidWZm ZXIsIHRoZW4gaXQKKyAqIHdvbid0IGJlIGF1dG9tYXRpY2FsbHkgY2xlYW5lZCB1cCB3aGVuIGFs bCB0aGUgZnJhbWVidWZmZXJzIGFyZSBmcmVlZC4gIEFzCisgKiBzdWNoLCB3ZSBoYXZlIHRvIGV4 cGxpY2l0bHkgY2FsbCB2bXdfcmVzb3VyY2VfdW5yZWZlcmVuY2UoKSB0byBnZXQgaXQgZnJlZWQu CisgKi8KK3N0YXRpYyB2b2lkIHZtd19zdGR1X3VucGluX2Rpc3BsYXkoc3RydWN0IHZtd19zY3Jl ZW5fdGFyZ2V0X2Rpc3BsYXlfdW5pdCAqc3RkdSkKK3sKKwlpZiAoc3RkdS0+ZGlzcGxheV9zcmYp IHsKKwkJc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzID0gJnN0ZHUtPmRpc3BsYXlfc3JmLT5yZXM7 CisKKwkJdm13X3Jlc291cmNlX3VucGluKHJlcyk7CisKKwkJaWYgKHN0ZHUtPmNvbnRlbnRfZmJf dHlwZSAhPSBTQU1FX0FTX0RJU1BMQVkpIHsKKwkJCXZtd19yZXNvdXJjZV91bnJlZmVyZW5jZSgm cmVzKTsKKwkJCXN0ZHUtPmNvbnRlbnRfZmJfdHlwZSA9IFNBTUVfQVNfRElTUExBWTsKKwkJfQor CisJCXN0ZHUtPmRpc3BsYXlfc3JmID0gTlVMTDsKKwl9Cit9CisKKworCisvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqCisgKiBTY3JlZW4gVGFyZ2V0IERpc3BsYXkgVW5pdCBDUlRDIEZ1bmN0aW9ucwor ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKgorICogdm13X3N0ZHVfY3J0Y19kZXN0cm95 IC0gY2xlYW5zIHVwIHRoZSBTVERVCisgKgorICogQGNydGM6IHVzZWQgdG8gZ2V0IGEgcmVmZXJl bmNlIHRvIHRoZSBjb250YWluaW5nIFNURFUKKyAqLworc3RhdGljIHZvaWQgdm13X3N0ZHVfY3J0 Y19kZXN0cm95KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwl2bXdfc3RkdV9kZXN0cm95KHZt d19jcnRjX3RvX3N0ZHUoY3J0YykpOworfQorCisKKworLyoqCisgKiB2bXdfc3RkdV9jb250ZW50 X2NvcHkgLSBjb3BpZXMgYW4gYXJlYSBmcm9tIHRoZSBjb250ZW50IHRvIGRpc3BsYXkgc3VyZmFj ZQorICoKKyAqIEBkZXZfcHJpdjogIFZNVyBEUk0gZGV2aWNlCisgKiBAZmlsZV9wcml2OiBQb2lu dGVyIHRvIGEgZHJtIGZpbGUgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqIEBzdGR1OiBTVERVIHdob3Nl IGRpc3BsYXkgc3VyZmFjZSB3aWxsIGJlIGJsaXR0ZWQgdG8KKyAqIEBjb250ZW50X3g6IHRvcC9s ZWZ0IGNvcm5lciBvZiB0aGUgY29udGVudCBhcmVhIHRvIGJsaXQgZnJvbQorICogQGNvbnRlbnRf eTogdG9wL2xlZnQgY29ybmVyIG9mIHRoZSBjb250ZW50IGFyZWEgdG8gYmxpdCBmcm9tCisgKiBA d2lkdGg6IHdpZHRoIG9mIHRoZSBibGl0IGFyZWEKKyAqIEBoZWlnaHQ6IGhlaWdodCBvZiB0aGUg YmxpdCBhcmVhCisgKiBAZGlzcGxheV94OiB0b3AvbGVmdCBjb3JuZXIgb2YgdGhlIGRpc3BsYXkg YXJlYSB0byBibGl0IHRvCisgKiBAZGlzcGxheV95OiB0b3AvbGVmdCBjb3JuZXIgb2YgdGhlIGRp c3BsYXkgYXJlYSB0byBibGl0IHRvCisgKgorICogQ29waWVzIGFuIGFyZWEgZnJvbSB0aGUgY29u dGVudCBzdXJmYWNlIHRvIHRoZSBkaXNwbGF5IHN1cmZhY2UuCisgKgorICogUkVUVVJOczoKKyAq IDAgb24gc3VjY2VzcywgZXJyb3IgY29kZSBvbiBmYWlsdXJlCisgKi8KK3N0YXRpYyBpbnQgdm13 X3N0ZHVfY29udGVudF9jb3B5KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJIHN0 cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJCSBzdHJ1Y3Qgdm13X3NjcmVlbl90YXJnZXRf ZGlzcGxheV91bml0ICpzdGR1LAorCQkJCSB1aW50MzJfdCBjb250ZW50X3gsIHVpbnQzMl90IGNv bnRlbnRfeSwKKwkJCQkgdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCwKKwkJCQkgdWlu dDMyX3QgZGlzcGxheV94LCB1aW50MzJfdCBkaXNwbGF5X3kpCit7CisJc2l6ZV90IGZpZm9fc2l6 ZTsKKwlpbnQgcmV0OworCXZvaWQgKmNtZDsKKworCXN0cnVjdCB2bXdfc3VyZmFjZV9kbWEgewor CQlTVkdBM2RDbWRIZWFkZXIgICAgIGhlYWRlcjsKKwkJU1ZHQTNkQ21kU3VyZmFjZURNQSBib2R5 OworCQlTVkdBM2RDb3B5Qm94ICAgICAgIGFyZWE7CisJCVNWR0EzZENtZFN1cmZhY2VETUFTdWZm aXggc3VmZml4OworCX0gc3VyZmFjZV9kbWFfY21kOworCisJc3RydWN0IHsKKwkJU1ZHQTNkQ21k SGVhZGVyICAgICAgaGVhZGVyOworCQlTVkdBM2RDbWRTdXJmYWNlQ29weSBib2R5OworCQlTVkdB M2RDb3B5Qm94ICAgICAgICBhcmVhOworCX0gc3VyZmFjZV9jcHlfY21kOworCisKKwkvKgorCSAq IENhbiBvbmx5IGNvcHkgaWYgY29udGVudCBhbmQgZGlzcGxheSBzdXJmYWNlcyBleGlzdCBhbmQg YXJlIG5vdAorCSAqIHRoZSBzYW1lIHN1cmZhY2UKKwkgKi8KKwlpZiAoc3RkdS0+ZGlzcGxheV9z cmYgPT0gTlVMTCB8fCBzdGR1LT5jb250ZW50X2ZiID09IE5VTEwgfHwKKwkgICAgc3RkdS0+Y29u dGVudF9mYl90eXBlID09IFNBTUVfQVNfRElTUExBWSkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9 CisKKwlpZiAoc3RkdS0+Y29udGVudF9mYl90eXBlID09IFNFUEFSQVRFX0RNQSkgeworCQlzdHJ1 Y3Qgdm13X2ZyYW1lYnVmZmVyICpjb250ZW50X3ZmYjsKKwkJc3RydWN0IHZtd19mcmFtZWJ1ZmZl cl9kbWFidWYgKmNvbnRlbnRfdmZiZDsKKwkJc3RydWN0IHZtd19mcmFtZWJ1ZmZlcl9zdXJmYWNl ICpjb250ZW50X3ZmYnM7CisJCXN0cnVjdCBkcm1fdm13X3NpemUgY3VyX3NpemUgPSB7MH07CisJ CWNvbnN0IHN0cnVjdCBzdmdhM2Rfc3VyZmFjZV9kZXNjICpkZXNjOworCQlTVkdBM2RDbWRTdXJm YWNlRE1BU3VmZml4ICpzdWZmaXg7CisJCVNWR0FHdWVzdFB0ciBwdHI7CisKKwkJY29udGVudF92 ZmIgID0gdm13X2ZyYW1lYnVmZmVyX3RvX3ZmYihzdGR1LT5jb250ZW50X2ZiKTsKKwkJY29udGVu dF92ZmJkID0gdm13X2ZyYW1lYnVmZmVyX3RvX3ZmYmQoc3RkdS0+Y29udGVudF9mYik7CisJCWNv bnRlbnRfdmZicyA9IHZtd19mcmFtZWJ1ZmZlcl90b192ZmJzKHN0ZHUtPmNvbnRlbnRfZmIpOwor CisJCWN1cl9zaXplLndpZHRoICA9IHdpZHRoOworCQljdXJfc2l6ZS5oZWlnaHQgPSBoZWlnaHQ7 CisJCWN1cl9zaXplLmRlcHRoICA9IDE7CisKKwkJZGVzYyA9IHN2Z2EzZHN1cmZhY2VfZ2V0X2Rl c2MoY29udGVudF92ZmJzLT5zdXJmYWNlLT5mb3JtYXQpOworCisKKwkJZmlmb19zaXplID0gc2l6 ZW9mKHN1cmZhY2VfZG1hX2NtZCk7CisKKwkJbWVtc2V0KCZzdXJmYWNlX2RtYV9jbWQsIDAsIGZp Zm9fc2l6ZSk7CisKKwkJcHRyLmdtcklkICA9IGNvbnRlbnRfdmZiLT51c2VyX2hhbmRsZTsKKwkJ cHRyLm9mZnNldCA9IDA7CisKKwkJc3VyZmFjZV9kbWFfY21kLmhlYWRlci5pZCAgID0gU1ZHQV8z RF9DTURfU1VSRkFDRV9ETUE7CisJCXN1cmZhY2VfZG1hX2NtZC5oZWFkZXIuc2l6ZSA9IHNpemVv ZihzdXJmYWNlX2RtYV9jbWQuYm9keSkgKworCQkJCQkgICAgICBzaXplb2Yoc3VyZmFjZV9kbWFf Y21kLmFyZWEpICsKKwkJCQkJICAgICAgc2l6ZW9mKHN1cmZhY2VfZG1hX2NtZC5zdWZmaXgpOwor CisJCXN1cmZhY2VfZG1hX2NtZC5ib2R5Lmd1ZXN0LnB0ciAgID0gcHRyOworCQlzdXJmYWNlX2Rt YV9jbWQuYm9keS5ndWVzdC5waXRjaCA9IHN0ZHUtPmNvbnRlbnRfZmItPnBpdGNoZXNbMF07CisJ CXN1cmZhY2VfZG1hX2NtZC5ib2R5Lmhvc3Quc2lkICAgID0gc3RkdS0+ZGlzcGxheV9zcmYtPnJl cy5pZDsKKwkJc3VyZmFjZV9kbWFfY21kLmJvZHkuaG9zdC5mYWNlICAgPSAwOworCQlzdXJmYWNl X2RtYV9jbWQuYm9keS5ob3N0Lm1pcG1hcCA9IDA7CisJCXN1cmZhY2VfZG1hX2NtZC5ib2R5LnRy YW5zZmVyICAgID0gU1ZHQTNEX1dSSVRFX0hPU1RfVlJBTTsKKworCQlzdXJmYWNlX2RtYV9jbWQu YXJlYS5zcmN4ID0gY29udGVudF94OworCQlzdXJmYWNlX2RtYV9jbWQuYXJlYS5zcmN5ID0gY29u dGVudF95OworCQlzdXJmYWNlX2RtYV9jbWQuYXJlYS54ICAgID0gZGlzcGxheV94OworCQlzdXJm YWNlX2RtYV9jbWQuYXJlYS55ICAgID0gZGlzcGxheV95OworCQlzdXJmYWNlX2RtYV9jbWQuYXJl YS5kICAgID0gMTsKKwkJc3VyZmFjZV9kbWFfY21kLmFyZWEudyAgICA9IHdpZHRoOworCQlzdXJm YWNlX2RtYV9jbWQuYXJlYS5oICAgID0gaGVpZ2h0OworCisJCXN1ZmZpeCA9ICZzdXJmYWNlX2Rt YV9jbWQuc3VmZml4OworCisJCXN1ZmZpeC0+c3VmZml4U2l6ZSAgICA9IHNpemVvZigqc3VmZml4 KTsKKwkJc3VmZml4LT5tYXhpbXVtT2Zmc2V0ID0gc3ZnYTNkc3VyZmFjZV9nZXRfaW1hZ2VfYnVm ZmVyX3NpemUoCisJCQkJCQlkZXNjLAorCQkJCQkJJmN1cl9zaXplLAorCQkJCQkJc3RkdS0+Y29u dGVudF9mYi0+cGl0Y2hlc1swXSk7CisKKwkJY21kID0gKHZvaWQgKikgJnN1cmZhY2VfZG1hX2Nt ZDsKKwl9IGVsc2UgeworCQlzdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyICpjb250ZW50X3ZmYjsKKwor CQljb250ZW50X3ZmYiA9IHZtd19mcmFtZWJ1ZmZlcl90b192ZmIoc3RkdS0+Y29udGVudF9mYik7 CisKKwkJZmlmb19zaXplID0gc2l6ZW9mKHN1cmZhY2VfY3B5X2NtZCk7CisKKwkJbWVtc2V0KCZz dXJmYWNlX2NweV9jbWQsIDAsIHNpemVvZihzdXJmYWNlX2NweV9jbWQpKTsKKworCQlzdXJmYWNl X2NweV9jbWQuaGVhZGVyLmlkICAgPSBTVkdBXzNEX0NNRF9TVVJGQUNFX0NPUFk7CisJCXN1cmZh Y2VfY3B5X2NtZC5oZWFkZXIuc2l6ZSA9IHNpemVvZihzdXJmYWNlX2NweV9jbWQuYm9keSkgKwor CQkJCQkgICAgICBzaXplb2Yoc3VyZmFjZV9jcHlfY21kLmFyZWEpOworCisJCXN1cmZhY2VfY3B5 X2NtZC5ib2R5LnNyYy5zaWQgID0gY29udGVudF92ZmItPnVzZXJfaGFuZGxlOworCQlzdXJmYWNl X2NweV9jbWQuYm9keS5kZXN0LnNpZCA9IHN0ZHUtPmRpc3BsYXlfc3JmLT5yZXMuaWQ7CisKKwkJ c3VyZmFjZV9jcHlfY21kLmFyZWEuc3JjeCA9IGNvbnRlbnRfeDsKKwkJc3VyZmFjZV9jcHlfY21k LmFyZWEuc3JjeSA9IGNvbnRlbnRfeTsKKwkJc3VyZmFjZV9jcHlfY21kLmFyZWEueCAgICA9IGRp c3BsYXlfeDsKKwkJc3VyZmFjZV9jcHlfY21kLmFyZWEueSAgICA9IGRpc3BsYXlfeTsKKwkJc3Vy ZmFjZV9jcHlfY21kLmFyZWEuZCAgICA9IDE7CisJCXN1cmZhY2VfY3B5X2NtZC5hcmVhLncgICAg PSB3aWR0aDsKKwkJc3VyZmFjZV9jcHlfY21kLmFyZWEuaCAgICA9IGhlaWdodDsKKworCQljbWQg PSAodm9pZCAqKSAmc3VyZmFjZV9jcHlfY21kOworCX0KKworCXJldCA9IHZtd19leGVjYnVmX3By b2Nlc3MoZmlsZV9wcml2LCBkZXZfcHJpdiwgTlVMTCwgY21kLAorCQkJCSAgZmlmb19zaXplLCAw LCBWTVdfUVVJUktfU0NSRUVOVEFSR0VULAorCQkJCSAgTlVMTCwgTlVMTCk7CisKKwlyZXR1cm4g cmV0OworfQorCisKKworLyoqCisgKiB2bXdfc3RkdV9kZWZpbmVfc3QgLSBEZWZpbmVzIGEgU2Ny ZWVuIFRhcmdldAorICoKKyAqIEBkZXZfcHJpdjogIFZNVyBEUk0gZGV2aWNlCisgKiBAc3RkdTog ZGlzcGxheSB1bml0IHRvIGNyZWF0ZSBhIFNjcmVlbiBUYXJnZXQgZm9yCisgKgorICogQ3JlYXRl cyBhIFNURFUgdGhhdCB3ZSBjYW4gdXNlZCBsYXRlci4gIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVk IHdoZW5ldmVyIHRoZQorICogZnJhbWVidWZmZXIgc2l6ZSBjaGFuZ2VzLgorICoKKyAqIFJFVFVS TnM6CisgKiAwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb24gZmFpbHVyZQorICovCitzdGF0aWMg aW50IHZtd19zdGR1X2RlZmluZV9zdChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAorCQkJ ICAgICAgc3RydWN0IHZtd19zY3JlZW5fdGFyZ2V0X2Rpc3BsYXlfdW5pdCAqc3RkdSkKK3sKKwlz dHJ1Y3QgeworCQlTVkdBM2RDbWRIZWFkZXIgaGVhZGVyOworCQlTVkdBM2RDbWREZWZpbmVHQlNj cmVlblRhcmdldCBib2R5OworCX0gKmNtZDsKKworCWNtZCA9IHZtd19maWZvX3Jlc2VydmUoZGV2 X3ByaXYsIHNpemVvZigqY21kKSk7CisKKwlpZiAodW5saWtlbHkoY21kID09IE5VTEwpKSB7CisJ CURSTV9FUlJPUigiT3V0IG9mIEZJRk8gc3BhY2UgZGVmaW5pbmcgU2NyZWVuIFRhcmdldFxuIik7 CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWNtZC0+aGVhZGVyLmlkICAgPSBTVkdBXzNEX0NN RF9ERUZJTkVfR0JfU0NSRUVOVEFSR0VUOworCWNtZC0+aGVhZGVyLnNpemUgPSBzaXplb2YoY21k LT5ib2R5KTsKKworCWNtZC0+Ym9keS5zdGlkICAgPSBzdGR1LT5iYXNlLnVuaXQ7CisJY21kLT5i b2R5LndpZHRoICA9IHN0ZHUtPmRpc3BsYXlfc3JmLT5iYXNlX3NpemUud2lkdGg7CisJY21kLT5i b2R5LmhlaWdodCA9IHN0ZHUtPmRpc3BsYXlfc3JmLT5iYXNlX3NpemUuaGVpZ2h0OworCWNtZC0+ Ym9keS5mbGFncyAgPSAoMCA9PSBjbWQtPmJvZHkuc3RpZCkgPyBTVkdBX1NURkxBR19QUklNQVJZ IDogMDsKKwljbWQtPmJvZHkuZHBpICAgID0gMDsKKwljbWQtPmJvZHkueFJvb3QgID0gc3RkdS0+ YmFzZS5jcnRjLng7CisJY21kLT5ib2R5LnlSb290ICA9IHN0ZHUtPmJhc2UuY3J0Yy55OworCisJ aWYgKCFzdGR1LT5iYXNlLmlzX2ltcGxpY2l0KSB7CisJCWNtZC0+Ym9keS54Um9vdCAgPSBzdGR1 LT5iYXNlLmd1aV94OworCQljbWQtPmJvZHkueVJvb3QgID0gc3RkdS0+YmFzZS5ndWlfeTsKKwl9 CisKKwl2bXdfZmlmb19jb21taXQoZGV2X3ByaXYsIHNpemVvZigqY21kKSk7CisKKwlzdGR1LT5k ZWZpbmVkID0gdHJ1ZTsKKworCXJldHVybiAwOworfQorCisKKworLyoqCisgKiB2bXdfc3RkdV9i aW5kX3N0IC0gQmluZHMgYSBzdXJmYWNlIHRvIGEgU2NyZWVuIFRhcmdldAorICoKKyAqIEBkZXZf cHJpdjogVk1XIERSTSBkZXZpY2UKKyAqIEBzdGR1OiBkaXNwbGF5IHVuaXQgYWZmZWN0ZWQKKyAq IEByZXM6IEJ1ZmZlciB0byBiaW5kIHRvIHRoZSBzY3JlZW4gdGFyZ2V0LiAgU2V0IHRvIE5VTEwg dG8gYmxhbmsgc2NyZWVuLgorICoKKyAqIEJpbmRpbmcgYSBzdXJmYWNlIHRvIGEgU2NyZWVuIFRh cmdldCB0aGUgc2FtZSBhcyBmbGlwcGluZworICovCitzdGF0aWMgaW50IHZtd19zdGR1X2JpbmRf c3Qoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCSAgICBzdHJ1Y3Qgdm13X3NjcmVl bl90YXJnZXRfZGlzcGxheV91bml0ICpzdGR1LAorCQkJICAgIHN0cnVjdCB2bXdfcmVzb3VyY2Ug KnJlcykKK3sKKwlTVkdBM2RTdXJmYWNlSW1hZ2VJZCBpbWFnZTsKKworCXN0cnVjdCB7CisJCVNW R0EzZENtZEhlYWRlciBoZWFkZXI7CisJCVNWR0EzZENtZEJpbmRHQlNjcmVlblRhcmdldCBib2R5 OworCX0gKmNtZDsKKworCisJaWYgKCFzdGR1LT5kZWZpbmVkKSB7CisJCURSTV9FUlJPUigiTm8g c2NyZWVuIHRhcmdldCBkZWZpbmVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyog U2V0IHVwIGltYWdlIHVzaW5nIGluZm9ybWF0aW9uIGluIHZmYiAqLworCW1lbXNldCgmaW1hZ2Us IDAsIHNpemVvZihpbWFnZSkpOworCWltYWdlLnNpZCA9IHJlcyA/IHJlcy0+aWQgOiBTVkdBM0Rf SU5WQUxJRF9JRDsKKworCWNtZCA9IHZtd19maWZvX3Jlc2VydmUoZGV2X3ByaXYsIHNpemVvZigq Y21kKSk7CisKKwlpZiAodW5saWtlbHkoY21kID09IE5VTEwpKSB7CisJCURSTV9FUlJPUigiT3V0 IG9mIEZJRk8gc3BhY2UgYmluZGluZyBhIHNjcmVlbiB0YXJnZXRcbiIpOworCQlyZXR1cm4gLUVO T01FTTsKKwl9CisKKwljbWQtPmhlYWRlci5pZCAgID0gU1ZHQV8zRF9DTURfQklORF9HQl9TQ1JF RU5UQVJHRVQ7CisJY21kLT5oZWFkZXIuc2l6ZSA9IHNpemVvZihjbWQtPmJvZHkpOworCisJY21k LT5ib2R5LnN0aWQgICA9IHN0ZHUtPmJhc2UudW5pdDsKKwljbWQtPmJvZHkuaW1hZ2UgID0gaW1h Z2U7CisKKwl2bXdfZmlmb19jb21taXQoZGV2X3ByaXYsIHNpemVvZigqY21kKSk7CisKKwlyZXR1 cm4gMDsKK30KKworCisKKy8qKgorICogdm13X3N0ZHVfdXBkYXRlX3N0IC0gVXBkYXRlcyBhIFNj cmVlbiBUYXJnZXQKKyAqCisgKiBAZGV2X3ByaXY6IFZNVyBEUk0gZGV2aWNlCisgKiBAZmlsZV9w cml2OiBQb2ludGVyIHRvIGEgZHJtIGZpbGUgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqIEBzdGR1OiBk aXNwbGF5IHVuaXQgYWZmZWN0ZWQKKyAqIEB1cGRhdGVfYXJlYTogYXJlYSB0aGF0IG5lZWRzIHRv IGJlIHVwZGF0ZWQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIGNhbGxlZCB3aGVu ZXZlciB0aGUgY29udGVudCBvZiBhIHNjcmVlbgorICogdGFyZ2V0IGNoYW5nZXMuCisgKiBJZiB0 aGUgZGlzcGxheSBhbmQgY29udGVudCBidWZmZXJzIGFyZSBkaWZmZXJlbnQsIHRoZW4gdGhpcyBm dW5jdGlvbiBkb2VzCisgKiBhIGJsaXQgZmlyc3QgZnJvbSB0aGUgY29udGVudCBidWZmZXIgdG8g dGhlIGRpc3BsYXkgYnVmZmVyIGJlZm9yZSBpc3N1aW5nCisgKiB0aGUgU2NyZWVuIFRhcmdldCB1 cGRhdGUgY29tbWFuZC4KKyAqCisgKiBSRVRVUk5TOgorICogMCBvbiBzdWNjZXNzLCBlcnJvciBj b2RlIG9uIGZhaWx1cmUKKyAqLworc3RhdGljIGludCB2bXdfc3RkdV91cGRhdGVfc3Qoc3RydWN0 IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCSAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9w cml2LAorCQkJICAgICAgc3RydWN0IHZtd19zY3JlZW5fdGFyZ2V0X2Rpc3BsYXlfdW5pdCAqc3Rk dSwKKwkJCSAgICAgIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICp1cGRhdGVfYXJlYSkKK3sKKwl1MzIg d2lkdGgsIGhlaWdodDsKKwl1MzIgZGlzcGxheV91cGRhdGVfeCwgZGlzcGxheV91cGRhdGVfeTsK Kwl1bnNpZ25lZCBzaG9ydCBkaXNwbGF5X3gxLCBkaXNwbGF5X3kxLCBkaXNwbGF5X3gyLCBkaXNw bGF5X3kyOworCisJc3RydWN0IHsKKwkJU1ZHQTNkQ21kSGVhZGVyIGhlYWRlcjsKKwkJU1ZHQTNk Q21kVXBkYXRlR0JTY3JlZW5UYXJnZXQgYm9keTsKKwl9ICpjbWQ7CisKKworCWlmICghc3RkdS0+ ZGVmaW5lZCkgeworCQlEUk1fRVJST1IoIk5vIHNjcmVlbiB0YXJnZXQgZGVmaW5lZCIpOworCQly ZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBEaXNwbGF5IGNvb3JkaW5hdGVzIHJlbGF0aXZlIHRv IGl0cyBwb3NpdGlvbiBpbiBjb250ZW50IHN1cmZhY2UgKi8KKwlkaXNwbGF5X3gxID0gc3RkdS0+ YmFzZS5jcnRjLng7CisJZGlzcGxheV95MSA9IHN0ZHUtPmJhc2UuY3J0Yy55OworCWRpc3BsYXlf eDIgPSBkaXNwbGF5X3gxICsgc3RkdS0+ZGlzcGxheV9zcmYtPmJhc2Vfc2l6ZS53aWR0aDsKKwlk aXNwbGF5X3kyID0gZGlzcGxheV95MSArIHN0ZHUtPmRpc3BsYXlfc3JmLT5iYXNlX3NpemUuaGVp Z2h0OworCisJLyogRG8gbm90aGluZyBpZiB0aGUgdXBkYXRlIGFyZWEgaXMgb3V0c2lkZSBvZiB0 aGUgZGlzcGxheSBzdXJmYWNlICovCisJaWYgKHVwZGF0ZV9hcmVhLT54MiA8PSBkaXNwbGF5X3gx IHx8IHVwZGF0ZV9hcmVhLT54MSA+PSBkaXNwbGF5X3gyIHx8CisJICAgIHVwZGF0ZV9hcmVhLT55 MiA8PSBkaXNwbGF5X3kxIHx8IHVwZGF0ZV9hcmVhLT55MSA+PSBkaXNwbGF5X3kyKQorCQlyZXR1 cm4gMDsKKworCS8qIFRoZSB0b3AtbGVmdCBoYW5kIGNvcm5lciBvZiB0aGUgdXBkYXRlIGFyZWEg aW4gZGlzcGxheSBzdXJmYWNlICovCisJZGlzcGxheV91cGRhdGVfeCA9IG1heCh1cGRhdGVfYXJl YS0+eDEgLSBkaXNwbGF5X3gxLCAwKTsKKwlkaXNwbGF5X3VwZGF0ZV95ID0gbWF4KHVwZGF0ZV9h cmVhLT55MSAtIGRpc3BsYXlfeTEsIDApOworCisJd2lkdGggID0gbWluKHVwZGF0ZV9hcmVhLT54 MiwgZGlzcGxheV94MikgLQorCQkgbWF4KHVwZGF0ZV9hcmVhLT54MSwgZGlzcGxheV94MSk7CisJ aGVpZ2h0ID0gbWluKHVwZGF0ZV9hcmVhLT55MiwgZGlzcGxheV95MikgLQorCQkgbWF4KHVwZGF0 ZV9hcmVhLT55MSwgZGlzcGxheV95MSk7CisKKwlpZiAoZmlsZV9wcml2ICYmIHN0ZHUtPmNvbnRl bnRfZmJfdHlwZSAhPSBTQU1FX0FTX0RJU1BMQVkpIHsKKwkJaW50IHJldDsKKworCQlyZXQgPSB2 bXdfc3RkdV9jb250ZW50X2NvcHkoZGV2X3ByaXYsIGZpbGVfcHJpdiwKKwkJCQkJICAgIHN0ZHUs CisJCQkJCSAgICBtYXgodXBkYXRlX2FyZWEtPngxLCBkaXNwbGF5X3gxKSwKKwkJCQkJICAgIG1h eCh1cGRhdGVfYXJlYS0+eTEsIGRpc3BsYXlfeTEpLAorCQkJCQkgICAgd2lkdGgsIGhlaWdodCwK KwkJCQkJICAgIGRpc3BsYXlfdXBkYXRlX3gsIGRpc3BsYXlfdXBkYXRlX3kpOworCQlpZiAodW5s aWtlbHkocmV0ICE9IDApKSB7CisJCQlEUk1fRVJST1IoIkZhaWxlZCB0byBibGl0IGNvbnRlbnRc biIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCWNtZCA9IHZtd19maWZvX3Jlc2VydmUo ZGV2X3ByaXYsIHNpemVvZigqY21kKSk7CisKKwlpZiAodW5saWtlbHkoY21kID09IE5VTEwpKSB7 CisJCURSTV9FUlJPUigiT3V0IG9mIEZJRk8gc3BhY2UgdXBkYXRpbmcgYSBTY3JlZW4gVGFyZ2V0 XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJY21kLT5oZWFkZXIuaWQgICA9IFNWR0Ff M0RfQ01EX1VQREFURV9HQl9TQ1JFRU5UQVJHRVQ7CisJY21kLT5oZWFkZXIuc2l6ZSA9IHNpemVv ZihjbWQtPmJvZHkpOworCisJY21kLT5ib2R5LnN0aWQgICA9IHN0ZHUtPmJhc2UudW5pdDsKKwlj bWQtPmJvZHkucmVjdC54ID0gZGlzcGxheV91cGRhdGVfeDsKKwljbWQtPmJvZHkucmVjdC55ID0g ZGlzcGxheV91cGRhdGVfeTsKKwljbWQtPmJvZHkucmVjdC53ID0gd2lkdGg7CisJY21kLT5ib2R5 LnJlY3QuaCA9IGhlaWdodDsKKworCXZtd19maWZvX2NvbW1pdChkZXZfcHJpdiwgc2l6ZW9mKCpj bWQpKTsKKworCXJldHVybiAwOworfQorCisKKworLyoqCisgKiB2bXdfc3RkdV9kZXN0cm95X3N0 IC0gRGVzdHJveSBhIFNjcmVlbiBUYXJnZXQKKyAqCisgKiBAZGV2X3ByaXY6ICBWTVcgRFJNIGRl dmljZQorICogQHN0ZHU6IGRpc3BsYXkgdW5pdCB0byBkZXN0cm95CisgKi8KK3N0YXRpYyBpbnQg dm13X3N0ZHVfZGVzdHJveV9zdChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAorCQkJICAg ICAgIHN0cnVjdCB2bXdfc2NyZWVuX3RhcmdldF9kaXNwbGF5X3VuaXQgKnN0ZHUpCit7CisJaW50 ICAgIHJldDsKKworCXN0cnVjdCB7CisJCVNWR0EzZENtZEhlYWRlciBoZWFkZXI7CisJCVNWR0Ez ZENtZERlc3Ryb3lHQlNjcmVlblRhcmdldCBib2R5OworCX0gKmNtZDsKKworCisJLyogTm90aGlu ZyB0byBkbyBpZiBub3Qgc3VjY2Vzc2Z1bGx5IGRlZmluZWQgKi8KKwlpZiAodW5saWtlbHkoIXN0 ZHUtPmRlZmluZWQpKQorCQlyZXR1cm4gMDsKKworCWNtZCA9IHZtd19maWZvX3Jlc2VydmUoZGV2 X3ByaXYsIHNpemVvZigqY21kKSk7CisKKwlpZiAodW5saWtlbHkoY21kID09IE5VTEwpKSB7CisJ CURSTV9FUlJPUigiT3V0IG9mIEZJRk8gc3BhY2UsIHNjcmVlbiB0YXJnZXQgbm90IGRlc3Ryb3ll ZFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWNtZC0+aGVhZGVyLmlkICAgPSBTVkdB XzNEX0NNRF9ERVNUUk9ZX0dCX1NDUkVFTlRBUkdFVDsKKwljbWQtPmhlYWRlci5zaXplID0gc2l6 ZW9mKGNtZC0+Ym9keSk7CisKKwljbWQtPmJvZHkuc3RpZCAgID0gc3RkdS0+YmFzZS51bml0Owor CisJdm13X2ZpZm9fY29tbWl0KGRldl9wcml2LCBzaXplb2YoKmNtZCkpOworCisJLyogRm9yY2Ug c3luYyAqLworCXJldCA9IHZtd19mYWxsYmFja193YWl0KGRldl9wcml2LCBmYWxzZSwgdHJ1ZSwg MCwgZmFsc2UsIDMqSFopOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCURSTV9FUlJPUigi RmFpbGVkIHRvIHN5bmMgd2l0aCBIVyIpOworCisJc3RkdS0+ZGVmaW5lZCA9IGZhbHNlOworCisJ cmV0dXJuIHJldDsKK30KKworCisKKy8qKgorICogdm13X3N0ZHVfY3J0Y19zZXRfY29uZmlnIC0g U2V0cyBhIG1vZGUKKyAqCisgKiBAc2V0OiAgbW9kZSBwYXJhbWV0ZXJzCisgKgorICogVGhpcyBm dW5jdGlvbiBpcyB0aGUgZGV2aWNlLXNwZWNpZmljIHBvcnRpb24gb2YgdGhlIERSTSBDUlRDIG1v ZGUgc2V0LgorICogRm9yIHRoZSBTVkdBIGRldmljZSwgd2UgZG8gdGhpcyBieSBkZWZpbmluZyBh IFNjcmVlbiBUYXJnZXQsIGJpbmRpbmcgYQorICogR0IgU3VyZmFjZSB0byB0aGF0IHRhcmdldCwg YW5kIGZpbmFsbHkgdXBkYXRlIHRoZSBzY3JlZW4gdGFyZ2V0LgorICoKKyAqIFJFVFVSTlM6Cisg KiAwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb3RoZXJ3aXNlCisgKi8KK3N0YXRpYyBpbnQgdm13 X3N0ZHVfY3J0Y19zZXRfY29uZmlnKHN0cnVjdCBkcm1fbW9kZV9zZXQgKnNldCkKK3sKKwlzdHJ1 Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2OworCXN0cnVjdCB2bXdfc2NyZWVuX3RhcmdldF9kaXNw bGF5X3VuaXQgKnN0ZHU7CisJc3RydWN0IHZtd19mcmFtZWJ1ZmZlciAqdmZiOworCXN0cnVjdCB2 bXdfZnJhbWVidWZmZXJfc3VyZmFjZSAqbmV3X3ZmYnM7CisJc3RydWN0IGRybV9kaXNwbGF5X21v ZGUgKm1vZGU7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAgKm5ld19mYjsKKwlzdHJ1Y3QgZHJt X2NydGMgICAgICAqY3J0YzsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgICAqZW5jb2RlcjsKKwlzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOworCXN0cnVjdCBkcm1fY2xpcF9yZWN0IHVwZGF0 ZV9hcmVhID0gezB9OworCWludCAgICByZXQ7CisKKworCWlmICghc2V0IHx8ICFzZXQtPmNydGMp CisJCXJldHVybiAtRUlOVkFMOworCisJY3J0YyAgICAgPSBzZXQtPmNydGM7CisJY3J0Yy0+eCAg PSBzZXQtPng7CisJY3J0Yy0+eSAgPSBzZXQtPnk7CisJc3RkdSAgICAgPSB2bXdfY3J0Y190b19z dGR1KGNydGMpOworCW1vZGUgICAgID0gc2V0LT5tb2RlOworCW5ld19mYiAgID0gc2V0LT5mYjsK KwlkZXZfcHJpdiA9IHZtd19wcml2KGNydGMtPmRldik7CisKKworCWlmIChzZXQtPm51bV9jb25u ZWN0b3JzID4gMSkgeworCQlEUk1fRVJST1IoIlRvbyBtYW55IGNvbm5lY3RvcnNcbiIpOworCQly ZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoc2V0LT5udW1fY29ubmVjdG9ycyA9PSAxICYmCisJ ICAgIHNldC0+Y29ubmVjdG9yc1swXSAhPSAmc3RkdS0+YmFzZS5jb25uZWN0b3IpIHsKKwkJRFJN X0VSUk9SKCJDb25uZWN0b3JzIGRvbid0IG1hdGNoICVwICVwXG4iLAorCQkJc2V0LT5jb25uZWN0 b3JzWzBdLCAmc3RkdS0+YmFzZS5jb25uZWN0b3IpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisK KworCS8qIFNpbmNlIHRoZXkgYWx3YXlzIG1hcCBvbmUgdG8gb25lIHRoZXNlIGFyZSBzYWZlICov CisJY29ubmVjdG9yID0gJnN0ZHUtPmJhc2UuY29ubmVjdG9yOworCWVuY29kZXIgICA9ICZzdGR1 LT5iYXNlLmVuY29kZXI7CisKKworCS8qCisJICogQWZ0ZXIgdGhpcyBwb2ludCB0aGUgQ1JUQyB3 aWxsIGJlIGNvbnNpZGVyZWQgb2ZmIHVubGVzcyBhIG5ldyBmYgorCSAqIGlzIGJvdW5kCisJICov CisJaWYgKHN0ZHUtPmRlZmluZWQpIHsKKwkJLyogVW5iaW5kIGN1cnJlbnQgc3VyZmFjZSBieSBi aW5kaW5nIGFuIGludmFsaWQgb25lICovCisJCXJldCA9IHZtd19zdGR1X2JpbmRfc3QoZGV2X3By aXYsIHN0ZHUsIE5VTEwpOworCQlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQkJcmV0dXJuIHJl dDsKKworCQkvKiBVcGRhdGUgU2NyZWVuIFRhcmdldCwgZGlzcGxheSB3aWxsIG5vdyBiZSBibGFu ayAqLworCQlpZiAoY3J0Yy0+cHJpbWFyeS0+ZmIpIHsKKwkJCXVwZGF0ZV9hcmVhLngyID0gY3J0 Yy0+cHJpbWFyeS0+ZmItPndpZHRoOworCQkJdXBkYXRlX2FyZWEueTIgPSBjcnRjLT5wcmltYXJ5 LT5mYi0+aGVpZ2h0OworCisJCQlyZXQgPSB2bXdfc3RkdV91cGRhdGVfc3QoZGV2X3ByaXYsIE5V TEwsCisJCQkJCQkgc3RkdSwKKwkJCQkJCSAmdXBkYXRlX2FyZWEpOworCQkJaWYgKHVubGlrZWx5 KHJldCAhPSAwKSkKKwkJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJY3J0Yy0+cHJpbWFyeS0+ZmIg ID0gTlVMTDsKKwkJY3J0Yy0+ZW5hYmxlZCAgICAgID0gZmFsc2U7CisJCWVuY29kZXItPmNydGMg ICAgICA9IE5VTEw7CisJCWNvbm5lY3Rvci0+ZW5jb2RlciA9IE5VTEw7CisKKwkJdm13X3N0ZHVf dW5waW5fZGlzcGxheShzdGR1KTsKKwkJc3RkdS0+Y29udGVudF9mYiAgICAgID0gTlVMTDsKKwkJ c3RkdS0+Y29udGVudF9mYl90eXBlID0gU0FNRV9BU19ESVNQTEFZOworCisJCXJldCA9IHZtd19z dGR1X2Rlc3Ryb3lfc3QoZGV2X3ByaXYsIHN0ZHUpOworCQkvKiBUaGUgaGFyZHdhcmUgaXMgaHVu ZywgZ2l2ZSB1cCAqLworCQlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQkJcmV0dXJuIHJldDsK Kwl9CisKKworCS8qIEFueSBvZiB0aGVzZSBjb25kaXRpb25zIG1lYW5zIHRoZSBjYWxsZXIgd2Fu dHMgQ1JUQyBvZmYgKi8KKwlpZiAoc2V0LT5udW1fY29ubmVjdG9ycyA9PSAwIHx8ICFtb2RlIHx8 ICFuZXdfZmIpCisJCXJldHVybiAwOworCisKKwlpZiAoc2V0LT54ICsgbW9kZS0+aGRpc3BsYXkg PiBuZXdfZmItPndpZHRoIHx8CisJICAgIHNldC0+eSArIG1vZGUtPnZkaXNwbGF5ID4gbmV3X2Zi LT5oZWlnaHQpIHsKKwkJRFJNX0VSUk9SKCJTZXQgb3V0c2lkZSBvZiBmcmFtZWJ1ZmZlclxuIik7 CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN0ZHUtPmNvbnRlbnRfZmIgPSBuZXdfZmI7CisJ dmZiID0gdm13X2ZyYW1lYnVmZmVyX3RvX3ZmYihzdGR1LT5jb250ZW50X2ZiKTsKKworCWlmICh2 ZmItPmRtYWJ1ZikKKwkJc3RkdS0+Y29udGVudF9mYl90eXBlID0gU0VQQVJBVEVfRE1BOworCisJ LyoKKwkgKiBJZiB0aGUgcmVxdWVzdGVkIG1vZGUgaXMgZGlmZmVyZW50IHRoYW4gdGhlIHdpZHRo IGFuZCBoZWlnaHQKKwkgKiBvZiB0aGUgRkIgb3IgaWYgdGhlIGNvbnRlbnQgYnVmZmVyIGlzIGEg RE1BIGJ1ZiwgdGhlbiBhbGxvY2F0ZQorCSAqIGEgZGlzcGxheSBGQiB0aGF0IG1hdGNoZXMgdGhl IGRpbWVuc2lvbiBvZiB0aGUgbW9kZQorCSAqLworCWlmIChtb2RlLT5oZGlzcGxheSAhPSBuZXdf ZmItPndpZHRoICB8fAorCSAgICBtb2RlLT52ZGlzcGxheSAhPSBuZXdfZmItPmhlaWdodCB8fAor CSAgICBzdGR1LT5jb250ZW50X2ZiX3R5cGUgIT0gU0FNRV9BU19ESVNQTEFZKSB7CisJCXN0cnVj dCB2bXdfc3VyZmFjZSBjb250ZW50X3NyZjsKKwkJc3RydWN0IGRybV92bXdfc2l6ZSBkaXNwbGF5 X2Jhc2Vfc2l6ZSA9IHswfTsKKwkJc3RydWN0IHZtd19zdXJmYWNlICpkaXNwbGF5X3NyZjsKKwor CisJCWRpc3BsYXlfYmFzZV9zaXplLndpZHRoICA9IG1vZGUtPmhkaXNwbGF5OworCQlkaXNwbGF5 X2Jhc2Vfc2l6ZS5oZWlnaHQgPSBtb2RlLT52ZGlzcGxheTsKKwkJZGlzcGxheV9iYXNlX3NpemUu ZGVwdGggID0gMTsKKworCQkvKgorCQkgKiBJZiBjb250ZW50IGJ1ZmZlciBpcyBhIERNQSBidWYs IHRoZW4gd2UgaGF2ZSB0byBjb25zdHJ1Y3QKKwkJICogc3VyZmFjZSBpbmZvCisJCSAqLworCQlp ZiAoc3RkdS0+Y29udGVudF9mYl90eXBlID09IFNFUEFSQVRFX0RNQSkgeworCisJCQlzd2l0Y2gg KG5ld19mYi0+Yml0c19wZXJfcGl4ZWwpIHsKKwkJCWNhc2UgMzI6CisJCQkJY29udGVudF9zcmYu Zm9ybWF0ID0gU1ZHQTNEX1g4UjhHOEI4OworCQkJCWJyZWFrOworCisJCQljYXNlIDE2OgorCQkJ CWNvbnRlbnRfc3JmLmZvcm1hdCA9IFNWR0EzRF9SNUc2QjU7CisJCQkJYnJlYWs7CisKKwkJCWNh c2UgODoKKwkJCQljb250ZW50X3NyZi5mb3JtYXQgPSBTVkdBM0RfUDg7CisJCQkJYnJlYWs7CisK KwkJCWRlZmF1bHQ6CisJCQkJRFJNX0VSUk9SKCJJbnZhbGlkIGZvcm1hdFxuIik7CisJCQkJcmV0 ID0gLUVJTlZBTDsKKwkJCQlnb3RvIGVycl91bnJlZl9jb250ZW50OworCQkJfQorCisJCQljb250 ZW50X3NyZi5mbGFncyAgICAgICAgICAgICA9IDA7CisJCQljb250ZW50X3NyZi5taXBfbGV2ZWxz WzBdICAgICA9IDE7CisJCQljb250ZW50X3NyZi5tdWx0aXNhbXBsZV9jb3VudCA9IDA7CisJCX0g ZWxzZSB7CisKKwkJCXN0ZHUtPmNvbnRlbnRfZmJfdHlwZSA9IFNFUEFSQVRFX1NVUkZBQ0U7CisK KwkJCW5ld192ZmJzID0gdm13X2ZyYW1lYnVmZmVyX3RvX3ZmYnMobmV3X2ZiKTsKKwkJCWNvbnRl bnRfc3JmID0gKm5ld192ZmJzLT5zdXJmYWNlOworCQl9CisKKworCQlyZXQgPSB2bXdfc3VyZmFj ZV9nYl9wcml2X2RlZmluZShjcnRjLT5kZXYsCisJCQkJMCwgLyogYmVjYXVzZSBrZXJuZWwgdmlz aWJsZSBvbmx5ICovCisJCQkJY29udGVudF9zcmYuZmxhZ3MsCisJCQkJY29udGVudF9zcmYuZm9y bWF0LAorCQkJCXRydWUsIC8qIGEgc2Nhbm91dCBidWZmZXIgKi8KKwkJCQljb250ZW50X3NyZi5t aXBfbGV2ZWxzWzBdLAorCQkJCWNvbnRlbnRfc3JmLm11bHRpc2FtcGxlX2NvdW50LAorCQkJCWRp c3BsYXlfYmFzZV9zaXplLAorCQkJCSZkaXNwbGF5X3NyZik7CisJCWlmICh1bmxpa2VseShyZXQg IT0gMCkpIHsKKwkJCURSTV9FUlJPUigiQ2Fubm90IGFsbG9jYXRlIGEgZGlzcGxheSBGQi5cbiIp OworCQkJZ290byBlcnJfdW5yZWZfY29udGVudDsKKwkJfQorCisJCXN0ZHUtPmRpc3BsYXlfc3Jm ID0gZGlzcGxheV9zcmY7CisJfSBlbHNlIHsKKwkJbmV3X3ZmYnMgPSB2bXdfZnJhbWVidWZmZXJf dG9fdmZicyhuZXdfZmIpOworCQlzdGR1LT5kaXNwbGF5X3NyZiA9IG5ld192ZmJzLT5zdXJmYWNl OworCX0KKworCisJcmV0ID0gdm13X3N0ZHVfcGluX2Rpc3BsYXkoc3RkdSk7CisJaWYgKHVubGlr ZWx5KHJldCAhPSAwKSkgeworCQlzdGR1LT5kaXNwbGF5X3NyZiA9IE5VTEw7CisJCWdvdG8gZXJy X3VucmVmX2NvbnRlbnQ7CisJfQorCisKKwkvKgorCSAqIFN0ZXBzIHRvIGRpc3BsYXlpbmcgYSBz dXJmYWNlLCBhc3N1bWUgc3VyZmFjZSBpcyBhbHJlYWR5CisJICogYm91bmQ6CisJICogICAxLiAg ZGVmaW5lIGEgc2NyZWVuIHRhcmdldAorCSAqICAgMi4gIGJpbmQgYSBmYiB0byB0aGUgc2NyZWVu IHRhcmdldAorCSAqICAgMy4gIHVwZGF0ZSB0aGF0IHNjcmVlbiB0YXJnZXQgKHRoaXMgaXMgZG9u ZSBsYXRlciBieQorCSAqICAgICAgIHZtd19rbXNfc3RkdV9kb19zdXJmYWNlX2RpcnR5X29yX3By ZXNlbnQpCisJICovCisJcmV0ID0gdm13X3N0ZHVfZGVmaW5lX3N0KGRldl9wcml2LCBzdGR1KTsK KwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlnb3RvIGVycl91bnBpbl9kaXNwbGF5X2FuZF9j b250ZW50OworCisJcmV0ID0gdm13X3N0ZHVfYmluZF9zdChkZXZfcHJpdiwgc3RkdSwgJnN0ZHUt PmRpc3BsYXlfc3JmLT5yZXMpOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCWdvdG8gZXJy X3VucGluX2Rlc3Ryb3lfc3Q7CisKKworCWNvbm5lY3Rvci0+ZW5jb2RlciA9IGVuY29kZXI7CisJ ZW5jb2Rlci0+Y3J0YyAgICAgID0gY3J0YzsKKworCWNydGMtPm1vZGUgICAgPSAqbW9kZTsKKwlj cnRjLT5wcmltYXJ5LT5mYiA9IG5ld19mYjsKKwljcnRjLT5lbmFibGVkID0gdHJ1ZTsKKworCXJl dHVybiByZXQ7CisKK2Vycl91bnBpbl9kZXN0cm95X3N0OgorCXZtd19zdGR1X2Rlc3Ryb3lfc3Qo ZGV2X3ByaXYsIHN0ZHUpOworZXJyX3VucGluX2Rpc3BsYXlfYW5kX2NvbnRlbnQ6CisJdm13X3N0 ZHVfdW5waW5fZGlzcGxheShzdGR1KTsKK2Vycl91bnJlZl9jb250ZW50OgorCXN0ZHUtPmNvbnRl bnRfZmIgPSBOVUxMOworCXJldHVybiByZXQ7Cit9CisKKworCisvKioKKyAqIHZtd19zdGR1X2Ny dGNfcGFnZV9mbGlwIC0gQmluZHMgYSBidWZmZXIgdG8gYSBzY3JlZW4gdGFyZ2V0CisgKgorICog QGNydGM6IENSVEMgdG8gYXR0YWNoIEZCIHRvCisgKiBAZmI6IEZCIHRvIGF0dGFjaAorICogQGV2 ZW50OiBFdmVudCB0byBiZSBwb3N0ZWQuIFRoaXMgZXZlbnQgc2hvdWxkJ3ZlIGJlZW4gYWxsb2Nl ZAorICogICAgICAgICB1c2luZyBrW216XWFsbG9jLCBhbmQgc2hvdWxkJ3ZlIGJlZW4gY29tcGxl dGVseSBpbml0aWFsaXplZC4KKyAqIEBwYWdlX2ZsaXBfZmxhZ3M6IElucHV0IGZsYWdzLgorICoK KyAqIElmIHRoZSBTVERVIHVzZXMgdGhlIHNhbWUgZGlzcGxheSBhbmQgY29udGVudCBidWZmZXJz LCBpLmUuIGEgdHJ1ZSBmbGlwLAorICogdGhpcyBmdW5jdGlvbiB3aWxsIHJlcGxhY2UgdGhlIGV4 aXN0aW5nIGRpc3BsYXkgYnVmZmVyIHdpdGggdGhlIG5ldyBjb250ZW50CisgKiBidWZmZXIuCisg KgorICogSWYgdGhlIFNURFUgdXNlcyBkaWZmZXJlbnQgZGlzcGxheSBhbmQgY29udGVudCBidWZm ZXJzLCBpLmUuIGEgYmxpdCwgdGhlbgorICogb25seSB0aGUgY29udGVudCBidWZmZXIgd2lsbCBi ZSB1cGRhdGVkLgorICoKKyAqIFJFVFVSTlM6CisgKiAwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUg b24gZmFpbHVyZQorICovCitzdGF0aWMgaW50IHZtd19zdGR1X2NydGNfcGFnZV9mbGlwKHN0cnVj dCBkcm1fY3J0YyAqY3J0YywKKwkJCQkgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpuZXdfZmIs CisJCQkJICAgc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudCAqZXZlbnQsCisJCQkJICAg dWludDMyX3QgcGFnZV9mbGlwX2ZsYWdzKQoreworCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3By aXYgPSB2bXdfcHJpdihjcnRjLT5kZXYpOworCXN0cnVjdCB2bXdfc2NyZWVuX3RhcmdldF9kaXNw bGF5X3VuaXQgKnN0ZHU7CisJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXY7CisJc3RydWN0IGRy bV9jbGlwX3JlY3QgdXBkYXRlX2FyZWEgPSB7MH07CisJaW50IHJldDsKKworCS8qCisJICogVGVt cG9yYXJpbHkgZG9uJ3Qgc3VwcG9ydCBldmVudCA9PSBOVUxMLiBXZSBuZWVkIHRoZQorCSAqIEBm aWxlX3ByaXYgcG9pbnRlciEKKwkgKi8KKwlpZiAoZXZlbnQgPT0gTlVMTCkKKwkJcmV0dXJuIC1F SU5WQUw7CisKKwlpZiAoY3J0YyA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRldl9w cml2ICAgICAgICAgID0gdm13X3ByaXYoY3J0Yy0+ZGV2KTsKKwlzdGR1ICAgICAgICAgICAgICA9 IHZtd19jcnRjX3RvX3N0ZHUoY3J0Yyk7CisJY3J0Yy0+cHJpbWFyeS0+ZmIgPSBuZXdfZmI7CisJ c3RkdS0+Y29udGVudF9mYiAgPSBuZXdfZmI7CisKKwlpZiAoc3RkdS0+ZGlzcGxheV9zcmYpIHsK KwkJdXBkYXRlX2FyZWEueDIgPSBzdGR1LT5kaXNwbGF5X3NyZi0+YmFzZV9zaXplLndpZHRoOwor CQl1cGRhdGVfYXJlYS55MiA9IHN0ZHUtPmRpc3BsYXlfc3JmLT5iYXNlX3NpemUuaGVpZ2h0Owor CisJCS8qCisJCSAqIElmIHRoZSBkaXNwbGF5IHN1cmZhY2UgaXMgdGhlIHNhbWUgYXMgdGhlIGNv bnRlbnQgc3VyZmFjZQorCQkgKiB0aGVuIHJlbW92ZSB0aGUgcmVmZXJlbmNlCisJCSAqLworCQlp ZiAoc3RkdS0+Y29udGVudF9mYl90eXBlID09IFNBTUVfQVNfRElTUExBWSkgeworCQkJaWYgKHN0 ZHUtPmRlZmluZWQpIHsKKwkJCQkvKiBVbmJpbmQgdGhlIGN1cnJlbnQgc3VyZmFjZSAqLworCQkJ CXJldCA9IHZtd19zdGR1X2JpbmRfc3QoZGV2X3ByaXYsIHN0ZHUsIE5VTEwpOworCQkJCWlmICh1 bmxpa2VseShyZXQgIT0gMCkpCisJCQkJCWdvdG8gZXJyX291dDsKKwkJCX0KKwkJCXZtd19zdGR1 X3VucGluX2Rpc3BsYXkoc3RkdSk7CisJCQlzdGR1LT5kaXNwbGF5X3NyZiA9IE5VTEw7CisJCX0K Kwl9CisKKworCWlmICghbmV3X2ZiKSB7CisJCS8qIEJsYW5rcyB0aGUgZGlzcGxheSAqLworCQko dm9pZCkgdm13X3N0ZHVfdXBkYXRlX3N0KGRldl9wcml2LCBOVUxMLCBzdGR1LCAmdXBkYXRlX2Fy ZWEpOworCisJCXJldHVybiAwOworCX0KKworCisJaWYgKHN0ZHUtPmNvbnRlbnRfZmJfdHlwZSA9 PSBTQU1FX0FTX0RJU1BMQVkpIHsKKwkJc3RkdS0+ZGlzcGxheV9zcmYgPSB2bXdfZnJhbWVidWZm ZXJfdG9fdmZicyhuZXdfZmIpLT5zdXJmYWNlOworCQlyZXQgPSB2bXdfc3RkdV9waW5fZGlzcGxh eShzdGR1KTsKKwkJaWYgKHJldCkgeworCQkJc3RkdS0+ZGlzcGxheV9zcmYgPSBOVUxMOworCQkJ Z290byBlcnJfb3V0OworCQl9CisKKwkJLyogQmluZCBkaXNwbGF5IHN1cmZhY2UgKi8KKwkJcmV0 ID0gdm13X3N0ZHVfYmluZF9zdChkZXZfcHJpdiwgc3RkdSwgJnN0ZHUtPmRpc3BsYXlfc3JmLT5y ZXMpOworCQlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQkJZ290byBlcnJfdW5waW5fZGlzcGxh eV9hbmRfY29udGVudDsKKwl9CisKKwkvKiBVcGRhdGUgZGlzcGxheSBzdXJmYWNlOiBhZnRlciB0 aGlzIHBvaW50IGV2ZXJ5dGhpbmcgaXMgYm91bmQgKi8KKwl1cGRhdGVfYXJlYS54MiA9IHN0ZHUt PmRpc3BsYXlfc3JmLT5iYXNlX3NpemUud2lkdGg7CisJdXBkYXRlX2FyZWEueTIgPSBzdGR1LT5k aXNwbGF5X3NyZi0+YmFzZV9zaXplLmhlaWdodDsKKworCWZpbGVfcHJpdiA9IGV2ZW50LT5iYXNl LmZpbGVfcHJpdjsKKwlyZXQgPSB2bXdfc3RkdV91cGRhdGVfc3QoZGV2X3ByaXYsIGZpbGVfcHJp diwgc3RkdSwgJnVwZGF0ZV9hcmVhKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlyZXR1 cm4gcmV0OworCisJaWYgKGV2ZW50KSB7CisJCXN0cnVjdCB2bXdfZmVuY2Vfb2JqICpmZW5jZSA9 IE5VTEw7CisKKwkJdm13X2V4ZWNidWZfZmVuY2VfY29tbWFuZHMoTlVMTCwgZGV2X3ByaXYsICZm ZW5jZSwgTlVMTCk7CisJCWlmICghZmVuY2UpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlyZXQg PSB2bXdfZXZlbnRfZmVuY2VfYWN0aW9uX3F1ZXVlKGZpbGVfcHJpdiwgZmVuY2UsCisJCQkJCQkg ICAmZXZlbnQtPmJhc2UsCisJCQkJCQkgICAmZXZlbnQtPmV2ZW50LnR2X3NlYywKKwkJCQkJCSAg ICZldmVudC0+ZXZlbnQudHZfdXNlYywKKwkJCQkJCSAgIHRydWUpOworCQl2bXdfZmVuY2Vfb2Jq X3VucmVmZXJlbmNlKCZmZW5jZSk7CisJfQorCisJcmV0dXJuIHJldDsKKworZXJyX3VucGluX2Rp c3BsYXlfYW5kX2NvbnRlbnQ6CisJdm13X3N0ZHVfdW5waW5fZGlzcGxheShzdGR1KTsKK2Vycl9v dXQ6CisJY3J0Yy0+cHJpbWFyeS0+ZmIgPSBOVUxMOworCXN0ZHUtPmNvbnRlbnRfZmIgPSBOVUxM OworCXJldHVybiByZXQ7Cit9CisKKworCisvKgorICogIFNjcmVlbiBUYXJnZXQgQ1JUQyBkaXNw YXRjaCB0YWJsZQorICovCitzdGF0aWMgc3RydWN0IGRybV9jcnRjX2Z1bmNzIHZtd19zdGR1X2Ny dGNfZnVuY3MgPSB7CisJLnNhdmUgPSB2bXdfZHVfY3J0Y19zYXZlLAorCS5yZXN0b3JlID0gdm13 X2R1X2NydGNfcmVzdG9yZSwKKwkuY3Vyc29yX3NldCA9IHZtd19kdV9jcnRjX2N1cnNvcl9zZXQs CisJLmN1cnNvcl9tb3ZlID0gdm13X2R1X2NydGNfY3Vyc29yX21vdmUsCisJLmdhbW1hX3NldCA9 IHZtd19kdV9jcnRjX2dhbW1hX3NldCwKKwkuZGVzdHJveSA9IHZtd19zdGR1X2NydGNfZGVzdHJv eSwKKwkuc2V0X2NvbmZpZyA9IHZtd19zdGR1X2NydGNfc2V0X2NvbmZpZywKKwkucGFnZV9mbGlw ID0gdm13X3N0ZHVfY3J0Y19wYWdlX2ZsaXAsCit9OworCisKKworLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKgorICogU2NyZWVuIFRhcmdldCBEaXNwbGF5IFVuaXQgRW5jb2RlciBGdW5jdGlvbnMKKyAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiB2bXdfc3RkdV9lbmNvZGVyX2Rlc3Ryb3kg LSBjbGVhbnMgdXAgdGhlIFNURFUKKyAqCisgKiBAZW5jb2RlcjogdXNlZCB0aGUgZ2V0IHRoZSBj b250YWluaW5nIFNURFUKKyAqCisgKiB2bXdnZnggY2xlYW5zIHVwIGNydGMvZW5jb2Rlci9jb25u ZWN0b3IgYWxsIGF0IHRoZSBzYW1lIHRpbWUgc28gdGVjaG5pY2FsbHkKKyAqIHRoaXMgY2FuIGJl IGEgbm8tb3AuICBOZXZlcnRoZWxlc3MsIGl0IGRvZXNuJ3QgaHVydCBvZiBoYXZlIHRoaXMgaW4g Y2FzZQorICogdGhlIGNvbW1vbiBLTVMgY29kZSBjaGFuZ2VzIGFuZCBzb21laG93IHZtd19zdGR1 X2NydGNfZGVzdHJveSgpIGRvZXNuJ3QKKyAqIGdldCBjYWxsZWQuCisgKi8KK3N0YXRpYyB2b2lk IHZtd19zdGR1X2VuY29kZXJfZGVzdHJveShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7 CisJdm13X3N0ZHVfZGVzdHJveSh2bXdfZW5jb2Rlcl90b19zdGR1KGVuY29kZXIpKTsKK30KKwor c3RhdGljIHN0cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyB2bXdfc3RkdV9lbmNvZGVyX2Z1bmNzID0g eworCS5kZXN0cm95ID0gdm13X3N0ZHVfZW5jb2Rlcl9kZXN0cm95LAorfTsKKworCisKKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioKKyAqIFNjcmVlbiBUYXJnZXQgRGlzcGxheSBVbml0IENvbm5lY3Rv ciBGdW5jdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiB2bXdfc3RkdV9j b25uZWN0b3JfZGVzdHJveSAtIGNsZWFucyB1cCB0aGUgU1REVQorICoKKyAqIEBjb25uZWN0b3I6 IHVzZWQgdG8gZ2V0IHRoZSBjb250YWluaW5nIFNURFUKKyAqCisgKiB2bXdnZnggY2xlYW5zIHVw IGNydGMvZW5jb2Rlci9jb25uZWN0b3IgYWxsIGF0IHRoZSBzYW1lIHRpbWUgc28gdGVjaG5pY2Fs bHkKKyAqIHRoaXMgY2FuIGJlIGEgbm8tb3AuICBOZXZlcnRoZWxlc3MsIGl0IGRvZXNuJ3QgaHVy dCBvZiBoYXZlIHRoaXMgaW4gY2FzZQorICogdGhlIGNvbW1vbiBLTVMgY29kZSBjaGFuZ2VzIGFu ZCBzb21laG93IHZtd19zdGR1X2NydGNfZGVzdHJveSgpIGRvZXNuJ3QKKyAqIGdldCBjYWxsZWQu CisgKi8KK3N0YXRpYyB2b2lkIHZtd19zdGR1X2Nvbm5lY3Rvcl9kZXN0cm95KHN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJdm13X3N0ZHVfZGVzdHJveSh2bXdfY29ubmVjdG9y X3RvX3N0ZHUoY29ubmVjdG9yKSk7Cit9CisKKworCitzdGF0aWMgc3RydWN0IGRybV9jb25uZWN0 b3JfZnVuY3Mgdm13X3N0ZHVfY29ubmVjdG9yX2Z1bmNzID0geworCS5kcG1zID0gdm13X2R1X2Nv bm5lY3Rvcl9kcG1zLAorCS5zYXZlID0gdm13X2R1X2Nvbm5lY3Rvcl9zYXZlLAorCS5yZXN0b3Jl ID0gdm13X2R1X2Nvbm5lY3Rvcl9yZXN0b3JlLAorCS5kZXRlY3QgPSB2bXdfZHVfY29ubmVjdG9y X2RldGVjdCwKKwkuZmlsbF9tb2RlcyA9IHZtd19kdV9jb25uZWN0b3JfZmlsbF9tb2RlcywKKwku c2V0X3Byb3BlcnR5ID0gdm13X2R1X2Nvbm5lY3Rvcl9zZXRfcHJvcGVydHksCisJLmRlc3Ryb3kg PSB2bXdfc3RkdV9jb25uZWN0b3JfZGVzdHJveSwKK307CisKKworCisvKioKKyAqIHZtd19zdGR1 X2luaXQgLSBTZXRzIHVwIGEgU2NyZWVuIFRhcmdldCBEaXNwbGF5IFVuaXQKKyAqCisgKiBAZGV2 X3ByaXY6IFZNVyBEUk0gZGV2aWNlCisgKiBAdW5pdDogdW5pdCBudW1iZXIgcmFuZ2UgZnJvbSAw IHRvIFZNV0dGWF9OVU1fRElTUExBWV9VTklUUworICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2Fs bGVkIG9uY2UgcGVyIENSVEMsIGFuZCBhbGxvY2F0ZXMgb25lIFNjcmVlbiBUYXJnZXQKKyAqIGRp c3BsYXkgdW5pdCB0byByZXByZXNlbnQgdGhhdCBDUlRDLiAgU2luY2UgdGhlIFNWR0EgZGV2aWNl IGRvZXMgbm90IHNlcGFyYXRlCisgKiBvdXQgZW5jb2RlciBhbmQgY29ubmVjdG9yLCB0aGV5IGFy ZSByZXByZXNlbnRlZCBhcyBwYXJ0IG9mIHRoZSBTVERVIGFzIHdlbGwuCisgKi8KK3N0YXRpYyBp bnQgdm13X3N0ZHVfaW5pdChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LCB1bnNpZ25lZCB1 bml0KQoreworCXN0cnVjdCB2bXdfc2NyZWVuX3RhcmdldF9kaXNwbGF5X3VuaXQgKnN0ZHU7CisJ c3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRldl9wcml2LT5kZXY7CisJc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lY3RvcjsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CisJc3RydWN0 IGRybV9jcnRjICpjcnRjOworCisKKwlzdGR1ID0ga3phbGxvYyhzaXplb2YoKnN0ZHUpLCBHRlBf S0VSTkVMKTsKKwlpZiAoIXN0ZHUpCisJCXJldHVybiAtRU5PTUVNOworCisJc3RkdS0+YmFzZS51 bml0ID0gdW5pdDsKKwljcnRjID0gJnN0ZHUtPmJhc2UuY3J0YzsKKwllbmNvZGVyID0gJnN0ZHUt PmJhc2UuZW5jb2RlcjsKKwljb25uZWN0b3IgPSAmc3RkdS0+YmFzZS5jb25uZWN0b3I7CisKKwlz dGR1LT5iYXNlLnByZWZfYWN0aXZlID0gKHVuaXQgPT0gMCk7CisJc3RkdS0+YmFzZS5wcmVmX3dp ZHRoICA9IGRldl9wcml2LT5pbml0aWFsX3dpZHRoOworCXN0ZHUtPmJhc2UucHJlZl9oZWlnaHQg PSBkZXZfcHJpdi0+aW5pdGlhbF9oZWlnaHQ7CisJc3RkdS0+YmFzZS5wcmVmX21vZGUgICA9IE5V TEw7CisJc3RkdS0+YmFzZS5pc19pbXBsaWNpdCA9IHRydWU7CisKKwlkcm1fY29ubmVjdG9yX2lu aXQoZGV2LCBjb25uZWN0b3IsICZ2bXdfc3RkdV9jb25uZWN0b3JfZnVuY3MsCisJCQkgICBEUk1f TU9ERV9DT05ORUNUT1JfVklSVFVBTCk7CisJY29ubmVjdG9yLT5zdGF0dXMgPSB2bXdfZHVfY29u bmVjdG9yX2RldGVjdChjb25uZWN0b3IsIGZhbHNlKTsKKworCWRybV9lbmNvZGVyX2luaXQoZGV2 LCBlbmNvZGVyLCAmdm13X3N0ZHVfZW5jb2Rlcl9mdW5jcywKKwkJCSBEUk1fTU9ERV9FTkNPREVS X1ZJUlRVQUwpOworCWRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2Rlcihjb25uZWN0b3Is IGVuY29kZXIpOworCWVuY29kZXItPnBvc3NpYmxlX2NydGNzID0gKDEgPDwgdW5pdCk7CisJZW5j b2Rlci0+cG9zc2libGVfY2xvbmVzID0gMDsKKworCSh2b2lkKSBkcm1fY29ubmVjdG9yX3JlZ2lz dGVyKGNvbm5lY3Rvcik7CisKKwlkcm1fY3J0Y19pbml0KGRldiwgY3J0YywgJnZtd19zdGR1X2Ny dGNfZnVuY3MpOworCisJZHJtX21vZGVfY3J0Y19zZXRfZ2FtbWFfc2l6ZShjcnRjLCAyNTYpOwor CisJZHJtX29iamVjdF9hdHRhY2hfcHJvcGVydHkoJmNvbm5lY3Rvci0+YmFzZSwKKwkJCQkgICBk ZXYtPm1vZGVfY29uZmlnLmRpcnR5X2luZm9fcHJvcGVydHksCisJCQkJICAgMSk7CisJcmV0dXJu IDA7Cit9CisKKworCisvKioKKyAqICB2bXdfc3RkdV9kZXN0cm95IC0gQ2xlYW5zIHVwIGEgdm13 X3NjcmVlbl90YXJnZXRfZGlzcGxheV91bml0CisgKgorICogIEBzdGR1OiAgU2NyZWVuIFRhcmdl dCBEaXNwbGF5IFVuaXQgdG8gYmUgZGVzdHJveWVkCisgKgorICogIENsZWFuIHVwIGFmdGVyIHZt d19zdGR1X2luaXQKKyAqLworc3RhdGljIHZvaWQgdm13X3N0ZHVfZGVzdHJveShzdHJ1Y3Qgdm13 X3NjcmVlbl90YXJnZXRfZGlzcGxheV91bml0ICpzdGR1KQoreworCXZtd19zdGR1X3VucGluX2Rp c3BsYXkoc3RkdSk7CisKKwl2bXdfZHVfY2xlYW51cCgmc3RkdS0+YmFzZSk7CisJa2ZyZWUoc3Rk dSk7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTY3JlZW4gVGFyZ2V0IERp c3BsYXkgS01TIEZ1bmN0aW9ucworICoKKyAqIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGJ5 IHRoZSBjb21tb24gS01TIGNvZGUgaW4gdm13Z2Z4X2ttcy5jCisgKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCisKKy8qKgorICogdm13X2ttc19zdGR1X2luaXRfZGlzcGxheSAtIEluaXRpYWxpemVzIGEg U2NyZWVuIFRhcmdldCBiYXNlZCBkaXNwbGF5CisgKgorICogQGRldl9wcml2OiBWTVcgRFJNIGRl dmljZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZSBhIFNjcmVlbiBUYXJnZXQgYmFz ZWQgZGlzcGxheSBkZXZpY2UuICBJdCBjaGVja3MKKyAqIHRoZSBjYXBhYmlsaXR5IGJpdHMgdG8g bWFrZSBzdXJlIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGNhbiBzdXBwb3J0CisgKiBzY3JlZW4g dGFyZ2V0cywgYW5kIHRoZW4gY3JlYXRlcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgQ1JUQ3MsIGEu ay5hIERpc3BsYXkKKyAqIFVuaXRzLCBhcyBzdXBwb3J0ZWQgYnkgdGhlIGRpc3BsYXkgaGFyZHdh cmUuCisgKgorICogUkVUVVJOUzoKKyAqIDAgb24gc3VjY2VzcywgZXJyb3IgY29kZSBvdGhlcndp c2UKKyAqLworaW50IHZtd19rbXNfc3RkdV9pbml0X2Rpc3BsYXkoc3RydWN0IHZtd19wcml2YXRl ICpkZXZfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZGV2X3ByaXYtPmRldjsK KwlpbnQgaSwgcmV0OworCisKKwkvKiBEbyBub3RoaW5nIGlmIFNjcmVlbiBUYXJnZXQgc3VwcG9y dCBpcyB0dXJuZWQgb2ZmICovCisJaWYgKCFWTVdHRlhfRU5BQkxFX1NDUkVFTl9UQVJHRVRfT1RB QkxFKQorCQlyZXR1cm4gLUVOT1NZUzsKKworCWlmICghKGRldl9wcml2LT5jYXBhYmlsaXRpZXMg JiBTVkdBX0NBUF9HQk9CSkVDVFMpIHx8CisJICAgICEoZGV2X3ByaXYtPmNhcGFiaWxpdGllcyAm IFNWR0FfQ0FQXzNEKSkKKwkJcmV0dXJuIC1FTk9TWVM7CisKKwlyZXQgPSBkcm1fdmJsYW5rX2lu aXQoZGV2LCBWTVdHRlhfTlVNX0RJU1BMQVlfVU5JVFMpOworCWlmICh1bmxpa2VseShyZXQgIT0g MCkpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBkcm1fbW9kZV9jcmVhdGVfZGlydHlfaW5mb19w cm9wZXJ0eShkZXYpOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCWdvdG8gZXJyX3ZibGFu a19jbGVhbnVwOworCisJZm9yIChpID0gMDsgaSA8IFZNV0dGWF9OVU1fRElTUExBWV9VTklUUzsg KytpKSB7CisJCXJldCA9IHZtd19zdGR1X2luaXQoZGV2X3ByaXYsIGkpOworCisJCWlmICh1bmxp a2VseShyZXQgIT0gMCkpIHsKKwkJCURSTV9FUlJPUigiRmFpbGVkIHRvIGluaXRpYWxpemUgU1RE VSAlZCIsIGkpOworCQkJZ290byBlcnJfdmJsYW5rX2NsZWFudXA7CisJCX0KKwl9CisKKwlkZXZf cHJpdi0+YWN0aXZlX2Rpc3BsYXlfdW5pdCA9IHZtd19kdV9zY3JlZW5fdGFyZ2V0OworCisJRFJN X0lORk8oIlNjcmVlbiBUYXJnZXQgRGlzcGxheSBkZXZpY2UgaW5pdGlhbGl6ZWRcbiIpOworCisJ cmV0dXJuIDA7CisKK2Vycl92YmxhbmtfY2xlYW51cDoKKwlkcm1fdmJsYW5rX2NsZWFudXAoZGV2 KTsKKwlyZXR1cm4gcmV0OworfQorCisKKworLyoqCisgKiB2bXdfa21zX3N0ZHVfY2xvc2VfZGlz cGxheSAtIENsZWFucyB1cCBhZnRlciB2bXdfa21zX3N0ZHVfaW5pdF9kaXNwbGF5CisgKgorICog QGRldl9wcml2OiBWTVcgRFJNIGRldmljZQorICoKKyAqIEZyZWVzIHVwIGFueSByZXNvdXJjZXMg YWxsb2NhdGVkIGJ5IHZtd19rbXNfc3RkdV9pbml0X2Rpc3BsYXkKKyAqCisgKiBSRVRVUk5TOgor ICogMCBvbiBzdWNjZXNzCisgKi8KK2ludCB2bXdfa21zX3N0ZHVfY2xvc2VfZGlzcGxheShzdHJ1 Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBk ZXZfcHJpdi0+ZGV2OworCisJZHJtX3ZibGFua19jbGVhbnVwKGRldik7CisKKwlyZXR1cm4gMDsK K30KKworCisKKy8qKgorICogdm13X2ttc19zdGR1X2RvX3N1cmZhY2VfZGlydHkgLSB1cGRhdGVz IGEgZGlydHkgcmVjdGFuZ2UgdG8gU1ZHQSBkZXZpY2UKKyAqCisgKiBAZGV2X3ByaXY6IFZNVyBE Uk0gZGV2aWNlCisgKiBAZmlsZV9wcml2OiBQb2ludGVyIHRvIGEgZHJtIGZpbGUgcHJpdmF0ZSBz dHJ1Y3R1cmUKKyAqIEBmcmFtZWJ1ZmZlcjogRkIgd2l0aCB0aGUgbmV3IGNvbnRlbnQgdG8gYmUg Y29waWVkIHRvIFNWR0EgZGV2aWNlCisgKiBAY2xpcF9yZWN0czogYXJyYXkgb2YgZGlydHkgcmVj dGFuZ2VzCisgKiBAbnVtX29mX2NsaXBfcmVjdHM6IG51bWJlciBvZiByZWN0YW5nZXMgaW4gQGNs aXBzCisgKiBAaW5jcmVtZW50OiBpbmNyZW1lbnQgdG8gdGhlIG5leHQgZGlydHkgcmVjdCBpbiBA Y2xpcHMKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIGFuIFVwZGF0ZSBjb21tYW5kIHRvIHRo ZSBTVkdBIGRldmljZS4gIFRoaXMgd2lsbCBub3RpZnkKKyAqIHRoZSBkZXZpY2UgdGhhdCBhIHJl Z2lvbiBuZWVkcyB0byBiZSBjb3BpZWQgdG8gdGhlIHNjcmVlbi4gIEF0IHRoaXMgdGltZQorICog d2UgYXJlIG5vdCBjb2FsZXNjaW5nIGNsaXAgcmVjdHMgaW50byBvbmUgbGFyZ2UgY2xpcCByZWN0 IGJlY2F1c2UgdGhlIFNWR0EKKyAqIGRldmljZSB3aWxsIGRvIGl0IGZvciB1cy4KKyAqCisgKiBS RVRVUk5TOgorICogMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG90aGVyd2lzZQorICovCitpbnQg dm13X2ttc19zdGR1X2RvX3N1cmZhY2VfZGlydHkoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJp diwKKwkJCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJCSAgc3RydWN0IHZtd19m cmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsCisJCQkJICBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xp cF9yZWN0cywKKwkJCQkgIHVuc2lnbmVkIG51bV9vZl9jbGlwX3JlY3RzLCBpbnQgaW5jcmVtZW50 KQoreworCXN0cnVjdCB2bXdfc2NyZWVuX3RhcmdldF9kaXNwbGF5X3VuaXQgKnN0ZHVbVk1XR0ZY X05VTV9ESVNQTEFZX1VOSVRTXTsKKwlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY3VyX3JlY3Q7CisJ c3RydWN0IGRybV9jcnRjICpjcnRjOworCisJdW5zaWduZWQgbnVtX29mX2R1ID0gMCwgY3VyX2R1 LCBjb3VudCA9IDA7CisJaW50ICAgICAgcmV0ID0gMDsKKworCisJQlVHX09OKCFjbGlwX3JlY3Rz IHx8ICFudW1fb2ZfY2xpcF9yZWN0cyk7CisKKwkvKiBGaWd1cmUgb3V0IGFsbCB0aGUgRFUgYWZm ZWN0ZWQgYnkgdGhpcyBzdXJmYWNlICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2 X3ByaXYtPmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LAorCQkJICAgIGhlYWQpIHsKKwkJaWYg KGNydGMtPnByaW1hcnktPmZiICE9ICZmcmFtZWJ1ZmZlci0+YmFzZSkKKwkJCWNvbnRpbnVlOwor CisJCXN0ZHVbbnVtX29mX2R1KytdID0gdm13X2NydGNfdG9fc3RkdShjcnRjKTsKKwl9CisKKwlm b3IgKGN1cl9kdSA9IDA7IGN1cl9kdSA8IG51bV9vZl9kdTsgY3VyX2R1KyspCisJCWZvciAoY3Vy X3JlY3QgPSBjbGlwX3JlY3RzLCBjb3VudCA9IDA7CisJCSAgICAgY291bnQgPCBudW1fb2ZfY2xp cF9yZWN0cyAmJiByZXQgPT0gMDsKKwkJICAgICBjdXJfcmVjdCArPSBpbmNyZW1lbnQsIGNvdW50 KyspIHsKKwkJCXJldCA9IHZtd19zdGR1X3VwZGF0ZV9zdChkZXZfcHJpdiwgZmlsZV9wcml2LAor CQkJCQkJIHN0ZHVbY3VyX2R1XSwKKwkJCQkJCSBjdXJfcmVjdCk7CisJCX0KKworCXJldHVybiBy ZXQ7Cit9CisKKworCisvKioKKyAqIHZtd19rbXNfc3RkdV9wcmVzZW50IC0gcHJlc2VudCBhIHN1 cmZhY2UgdG8gdGhlIGRpc3BsYXkgc3VyZmFjZQorICoKKyAqIEBkZXZfcHJpdjogVk1XIERSTSBk ZXZpY2UKKyAqIEBmaWxlX3ByaXY6IFBvaW50ZXIgdG8gYSBkcm0gZmlsZSBwcml2YXRlIHN0cnVj dHVyZQorICogQHZmYjogVXNlZCB0byBwaWNrIHdoaWNoIFNURFUocykgaXMgYWZmZWN0ZWQKKyAq IEB1c2VyX2hhbmRsZTogdXNlciBoYW5kbGUgZm9yIHRoZSBzb3VyY2Ugc3VyZmFjZQorICogQGRl c3RfeDogdG9wL2xlZnQgY29ybmVyIG9mIHRoZSBkaXNwbGF5IGFyZWEgdG8gYmxpdCB0bworICog QGRlc3RfeTogdG9wL2xlZnQgY29ybmVyIG9mIHRoZSBkaXNwbGF5IGFyZWEgdG8gYmxpdCB0bwor ICogQGNsaXBfcmVjdHM6IGFycmF5IG9mIGRpcnR5IHJlY3RhbmdlcworICogQG51bV9vZl9jbGlw X3JlY3RzOiBudW1iZXIgb2YgcmVjdGFuZ2VzIGluIEBjbGlwcworICoKKyAqIFRoaXMgZnVuY3Rp b24gY29waWVzIGEgc3VyZmFjZSBvbnRvIHRoZSBkaXNwbGF5IHN1cmZhY2UsIGFuZAorICogdXBk YXRlcyB0aGUgc2NyZWVuIHRhcmdldC4gIFN0cmVjaCBibGl0IGlzIGN1cnJlbnRseSBub3QKKyAq IHN1cHBvcnRlZC4KKyAqCisgKiBSRVRVUk5TOgorICogMCBvbiBzdWNjZXNzLCBlcnJvciBjb2Rl IG90aGVyd2lzZQorICovCitpbnQgdm13X2ttc19zdGR1X3ByZXNlbnQoc3RydWN0IHZtd19wcml2 YXRlICpkZXZfcHJpdiwKKwkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJCSBzdHJ1 Y3Qgdm13X2ZyYW1lYnVmZmVyICp2ZmIsCisJCQkgdWludDMyX3QgdXNlcl9oYW5kbGUsCisJCQkg aW50MzJfdCBkZXN0X3gsIGludDMyX3QgZGVzdF95LAorCQkJIHN0cnVjdCBkcm1fdm13X3JlY3Qg KmNsaXBfcmVjdHMsCisJCQkgdWludDMyX3QgbnVtX29mX2NsaXBfcmVjdHMpCit7CisJc3RydWN0 IHZtd19zY3JlZW5fdGFyZ2V0X2Rpc3BsYXlfdW5pdCAqc3RkdVtWTVdHRlhfTlVNX0RJU1BMQVlf VU5JVFNdOworCXN0cnVjdCBkcm1fY2xpcF9yZWN0ICp1cGRhdGVfYXJlYTsKKwlzdHJ1Y3QgZHJt X2NydGMgKmNydGM7CisJc2l6ZV90IGZpZm9fc2l6ZTsKKwlpbnQgbnVtX29mX2R1ID0gMCwgY3Vy X2R1LCBpOworCWludCByZXQgPSAwOworCXN0cnVjdCB2bXdfY2xpcF9yZWN0IHNyY19iYjsKKwor CXN0cnVjdCB7CisJCVNWR0EzZENtZEhlYWRlciAgICAgIGhlYWRlcjsKKwkJU1ZHQTNkQ21kU3Vy ZmFjZUNvcHkgYm9keTsKKwl9ICpjbWQ7CisJU1ZHQTNkQ29weUJveCAqYmxpdHM7CisKKworCUJV R19PTighY2xpcF9yZWN0cyB8fCAhbnVtX29mX2NsaXBfcmVjdHMpOworCisJbGlzdF9mb3JfZWFj aF9lbnRyeShjcnRjLCAmZGV2X3ByaXYtPmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFk KSB7CisJCWlmIChjcnRjLT5wcmltYXJ5LT5mYiAhPSAmdmZiLT5iYXNlKQorCQkJY29udGludWU7 CisKKwkJc3RkdVtudW1fb2ZfZHUrK10gPSB2bXdfY3J0Y190b19zdGR1KGNydGMpOworCX0KKwor CisJdXBkYXRlX2FyZWEgPSBrY2FsbG9jKG51bV9vZl9jbGlwX3JlY3RzLCBzaXplb2YoKnVwZGF0 ZV9hcmVhKSwKKwkJCSAgICAgIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseSh1cGRhdGVfYXJl YSA9PSBOVUxMKSkgeworCQlEUk1fRVJST1IoIlRlbXBvcmFyeSBjbGlwIHJlY3QgbWVtb3J5IGFs bG9jIGZhaWxlZC5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKworCWZpZm9fc2l6ZSA9 IHNpemVvZigqY21kKSArIHNpemVvZihTVkdBM2RDb3B5Qm94KSAqIG51bV9vZl9jbGlwX3JlY3Rz OworCisJY21kID0ga21hbGxvYyhmaWZvX3NpemUsIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2Vs eShjbWQgPT0gTlVMTCkpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5 IGZvciBzdXJmYWNlIGNvcHkuXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfZnJl ZV91cGRhdGVfYXJlYTsKKwl9CisKKwltZW1zZXQoY21kLCAwLCBmaWZvX3NpemUpOworCWNtZC0+ aGVhZGVyLmlkID0gU1ZHQV8zRF9DTURfU1VSRkFDRV9DT1BZOworCisJYmxpdHMgPSAoU1ZHQTNk Q29weUJveCAqKSZjbWRbMV07CisKKworCS8qIEZpZ3VyZSBvdXQgdGhlIHNvdXJjZSBib3VuZGlu ZyBib3ggKi8KKwlzcmNfYmIueDEgPSBjbGlwX3JlY3RzLT54OworCXNyY19iYi55MSA9IGNsaXBf cmVjdHMtPnk7CisJc3JjX2JiLngyID0gY2xpcF9yZWN0cy0+eCArIGNsaXBfcmVjdHMtPnc7CisJ c3JjX2JiLnkyID0gY2xpcF9yZWN0cy0+eSArIGNsaXBfcmVjdHMtPmg7CisKKwlmb3IgKGkgPSAx OyBpIDwgbnVtX29mX2NsaXBfcmVjdHM7IGkrKykgeworCQlzcmNfYmIueDEgPSBtaW5fdChpbnQs IHNyY19iYi54MSwgY2xpcF9yZWN0c1tpXS54KTsKKwkJc3JjX2JiLngyID0gbWF4X3QoaW50LCBz cmNfYmIueDIsCisJCQkJICBjbGlwX3JlY3RzW2ldLnggKyAoaW50KSBjbGlwX3JlY3RzW2ldLncp OworCQlzcmNfYmIueTEgPSBtaW5fdChpbnQsIHNyY19iYi55MSwgY2xpcF9yZWN0c1tpXS55KTsK KwkJc3JjX2JiLnkyID0gbWF4X3QoaW50LCBzcmNfYmIueTIsCisJCQkJICBjbGlwX3JlY3RzW2ld LnkgKyAoaW50KSBjbGlwX3JlY3RzW2ldLmgpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBudW1f b2ZfY2xpcF9yZWN0czsgaSsrKSB7CisJCXVwZGF0ZV9hcmVhW2ldLngxID0gY2xpcF9yZWN0c1tp XS54IC0gc3JjX2JiLngxOworCQl1cGRhdGVfYXJlYVtpXS54MiA9IHVwZGF0ZV9hcmVhW2ldLngx ICsgY2xpcF9yZWN0c1tpXS53OworCQl1cGRhdGVfYXJlYVtpXS55MSA9IGNsaXBfcmVjdHNbaV0u eSAtIHNyY19iYi55MTsKKwkJdXBkYXRlX2FyZWFbaV0ueTIgPSB1cGRhdGVfYXJlYVtpXS55MSAr IGNsaXBfcmVjdHNbaV0uaDsKKwl9CisKKworCWZvciAoY3VyX2R1ID0gMDsgY3VyX2R1IDwgbnVt X29mX2R1OyBjdXJfZHUrKykgeworCQlzdHJ1Y3Qgdm13X2NsaXBfcmVjdCBkZXN0X2JiOworCQlp bnQgbnVtX29mX2JsaXRzOworCisJCWNydGMgPSAmc3RkdVtjdXJfZHVdLT5iYXNlLmNydGM7CisK KwkJZGVzdF9iYi54MSA9IHNyY19iYi54MSArIGRlc3RfeCAtIGNydGMtPng7CisJCWRlc3RfYmIu eTEgPSBzcmNfYmIueTEgKyBkZXN0X3kgLSBjcnRjLT55OworCQlkZXN0X2JiLngyID0gc3JjX2Ji LngyICsgZGVzdF94IC0gY3J0Yy0+eDsKKwkJZGVzdF9iYi55MiA9IHNyY19iYi55MiArIGRlc3Rf eSAtIGNydGMtPnk7CisKKwkJLyogU2tpcCBhbnkgU1REVSBvdXRzaWRlIG9mIHRoZSBkZXN0aW5h dGlvbiBib3VuZGluZyBib3ggKi8KKwkJaWYgKGRlc3RfYmIueDEgPj0gY3J0Yy0+bW9kZS5oZGlz cGxheSB8fAorCQkgICAgZGVzdF9iYi55MSA+PSBjcnRjLT5tb2RlLnZkaXNwbGF5IHx8CisJCSAg ICBkZXN0X2JiLngyIDw9IDAgfHwgZGVzdF9iYi55MiA8PSAwKQorCQkJY29udGludWU7CisKKwkJ LyogTm9ybWFsaXplIHRvIHRvcC1sZWZ0IG9mIHNyYyBib3VuZGluZyBib3ggaW4gZGVzdCBjb29y ZCAqLworCQlkZXN0X2JiLngyID0gY3J0Yy0+bW9kZS5oZGlzcGxheSAtIGRlc3RfYmIueDE7CisJ CWRlc3RfYmIueTIgPSBjcnRjLT5tb2RlLnZkaXNwbGF5IC0gZGVzdF9iYi55MTsKKwkJZGVzdF9i Yi54MSA9IDAgLSBkZXN0X2JiLngxOworCQlkZXN0X2JiLnkxID0gMCAtIGRlc3RfYmIueTE7CisK KwkJZm9yIChpID0gMCwgbnVtX29mX2JsaXRzID0gMDsgaSA8IG51bV9vZl9jbGlwX3JlY3RzOyBp KyspIHsKKwkJCWludCB4MSA9IG1heF90KGludCwgZGVzdF9iYi54MSwgKGludCl1cGRhdGVfYXJl YVtpXS54MSk7CisJCQlpbnQgeTEgPSBtYXhfdChpbnQsIGRlc3RfYmIueTEsIChpbnQpdXBkYXRl X2FyZWFbaV0ueTEpOworCQkJaW50IHgyID0gbWluX3QoaW50LCBkZXN0X2JiLngyLCAoaW50KXVw ZGF0ZV9hcmVhW2ldLngyKTsKKwkJCWludCB5MiA9IG1pbl90KGludCwgZGVzdF9iYi55MiwgKGlu dCl1cGRhdGVfYXJlYVtpXS55Mik7CisKKwkJCWlmICh4MSA+PSB4MikKKwkJCQljb250aW51ZTsK KworCQkJaWYgKHkxID49IHkyKQorCQkJCWNvbnRpbnVlOworCisJCQlibGl0c1tudW1fb2ZfYmxp dHNdLnNyY3ggPSAgc3JjX2JiLngxICArIHgxOworCQkJYmxpdHNbbnVtX29mX2JsaXRzXS5zcmN5 ID0gIHNyY19iYi55MSAgKyB5MTsKKwkJCWJsaXRzW251bV9vZl9ibGl0c10ueCAgICA9IC1kZXN0 X2JiLngxICsgeDE7CisJCQlibGl0c1tudW1fb2ZfYmxpdHNdLnkgICAgPSAtZGVzdF9iYi55MSAr IHkxOworCQkJYmxpdHNbbnVtX29mX2JsaXRzXS5kICAgID0gMTsKKwkJCWJsaXRzW251bV9vZl9i bGl0c10udyAgICA9IHgyIC0geDE7CisJCQlibGl0c1tudW1fb2ZfYmxpdHNdLmggICAgPSB5MiAt IHkxOworCQkJbnVtX29mX2JsaXRzKys7CisJCX0KKworCQlpZiAobnVtX29mX2JsaXRzID09IDAp CisJCQljb250aW51ZTsKKworCQkvKiBDYWxjdWxhdGUgbmV3IGNvbW1hbmQgc2l6ZSAqLworCQlm aWZvX3NpemUgPSBzaXplb2YoKmNtZCkgKyBzaXplb2YoU1ZHQTNkQ29weUJveCkgKiBudW1fb2Zf YmxpdHM7CisKKwkJY21kLT5oZWFkZXIuc2l6ZSA9IGNwdV90b19sZTMyKGZpZm9fc2l6ZSAtIHNp emVvZihjbWQtPmhlYWRlcikpOworCisJCWNtZC0+Ym9keS5zcmMuc2lkICA9IHVzZXJfaGFuZGxl OworCQljbWQtPmJvZHkuZGVzdC5zaWQgPSBzdGR1W2N1cl9kdV0tPmRpc3BsYXlfc3JmLT5yZXMu aWQ7CisKKwkJcmV0ID0gdm13X2V4ZWNidWZfcHJvY2VzcyhmaWxlX3ByaXYsIGRldl9wcml2LCBO VUxMLCBjbWQsCisJCQkJCSAgZmlmb19zaXplLCAwLCBWTVdfUVVJUktfU0NSRUVOVEFSR0VULAor CQkJCQkgIE5VTEwsIE5VTEwpOworCisJCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCQlicmVh azsKKworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX29mX2JsaXRzOyBpKyspIHsKKwkJCXN0cnVjdCBk cm1fY2xpcF9yZWN0IGJsaXRfYXJlYTsKKworCQkJLyoKKwkJCSAqIEFkZCBjcnRjIG9mZnNldCBi ZWNhdXNlIHZtd19zdGR1X3VwZGF0ZV9zdCBleHBlY3RzCisJCQkgKiBkZXNrdG9wIGNvb3JkaW5h dGVzCisJCQkgKi8KKwkJCWJsaXRfYXJlYS54MSA9IGJsaXRzW2ldLnggKyBjcnRjLT54OworCQkJ YmxpdF9hcmVhLngyID0gYmxpdF9hcmVhLngxICsgYmxpdHNbaV0udzsKKwkJCWJsaXRfYXJlYS55 MSA9IGJsaXRzW2ldLnkgKyBjcnRjLT55OworCQkJYmxpdF9hcmVhLnkyID0gYmxpdF9hcmVhLnkx ICsgYmxpdHNbaV0uaDsKKwkJCSh2b2lkKSB2bXdfc3RkdV91cGRhdGVfc3QoZGV2X3ByaXYsIE5V TEwsIHN0ZHVbY3VyX2R1XSwKKwkJCQkJCSAgJmJsaXRfYXJlYSk7CisJCX0KKwl9CisKKwlrZnJl ZShjbWQpOworCitvdXRfZnJlZV91cGRhdGVfYXJlYToKKwlrZnJlZSh1cGRhdGVfYXJlYSk7CisK KwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdn Znhfc3VyZmFjZS5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfc3VyZmFjZS5jCmlu ZGV4IDRjYmFmMmUuLjRhNTBhMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngv dm13Z2Z4X3N1cmZhY2UuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9zdXJm YWNlLmMKQEAgLTE0ODYsNiArMTQ4NiwxMCBAQCBpbnQgdm13X3N1cmZhY2VfZ2JfcHJpdl9kZWZp bmUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkJc3JmLT5taXBfbGV2ZWxzWzBdLAogCQkJ CQlzcmYtPmZsYWdzICYgU1ZHQTNEX1NVUkZBQ0VfQ1VCRU1BUCk7CiAKKwlpZiAoZGV2X3ByaXYt PmFjdGl2ZV9kaXNwbGF5X3VuaXQgPT0gdm13X2R1X3NjcmVlbl90YXJnZXQgJiYKKwkgICAgZm9y X3NjYW5vdXQpCisJCXNyZi0+ZmxhZ3MgfD0gU1ZHQTNEX1NVUkZBQ0VfU0NSRUVOVEFSR0VUOwor CiAJLyoKIAkgKiBGcm9tIHRoaXMgcG9pbnQsIHRoZSBnZW5lcmljIHJlc291cmNlIG1hbmFnZW1l bnQgZnVuY3Rpb25zCiAJICogZGVzdHJveSB0aGUgb2JqZWN0IG9uIGZhaWx1cmUuCmRpZmYgLS1n aXQgYS9pbmNsdWRlL3VhcGkvZHJtL3Ztd2dmeF9kcm0uaCBiL2luY2x1ZGUvdWFwaS9kcm0vdm13 Z2Z4X2RybS5oCmluZGV4IGM0NzJiZWRiLi5jOGE4NjMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Vh cGkvZHJtL3Ztd2dmeF9kcm0uaAorKysgYi9pbmNsdWRlL3VhcGkvZHJtL3Ztd2dmeF9kcm0uaApA QCAtODgsNiArODgsNyBAQAogI2RlZmluZSBEUk1fVk1XX1BBUkFNXzNEX0NBUFNfU0laRSAgICAg OAogI2RlZmluZSBEUk1fVk1XX1BBUkFNX01BWF9NT0JfTUVNT1JZICAgOQogI2RlZmluZSBEUk1f Vk1XX1BBUkFNX01BWF9NT0JfU0laRSAgICAgMTAKKyNkZWZpbmUgRFJNX1ZNV19QQVJBTV9TQ1JF RU5fVEFSR0VUICAgIDExCiAKIC8qKgogICogZW51bSBkcm1fdm13X2hhbmRsZV90eXBlIC0gaGFu ZGxlIHR5cGUgZm9yIHJlZiBpb2N0bHMKLS0gCjIuMS4wCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZl bEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=