From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH 27/45] drm/i915: Move shmem object setup to its own file Date: Thu, 25 Apr 2019 10:19:46 +0100 Message-ID: <20190425092004.9995-27-chris@chris-wilson.co.uk> References: <20190425092004.9995-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id BBF2789248 for ; Thu, 25 Apr 2019 09:22:03 +0000 (UTC) In-Reply-To: <20190425092004.9995-1-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org Cc: Matthew Auld List-Id: intel-gfx@lists.freedesktop.org U3BsaXQgdGhlIHBsYWluIG9sZCBzaG1lbSBvYmplY3QgaW50byBpdHMgb3duIGZpbGUgdG8gc3Rh cnQgZGVjbHV0dGVyaW5nCmk5MTVfZ2VtLmMKCnYyOiBMb3NlIHRoZSBjb25mdXNpbmcsIGh5c3Rl cmljYWwgcmFpc2lucywgc3VmZml4IG9mIF9ndHQuCgpTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxz b24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KUmV2aWV3ZWQtYnk6IE1hdHRoZXcgQXVsZCA8 bWF0dGhldy5hdWxkQGludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmls ZSAgICAgICAgICAgICAgICAgfCAgIDMgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1 X2dlbV9vYmplY3QuYyAgICB8IDI5OCArKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0v aTkxNV9nZW1fb2JqZWN0LmggICAgfCAgNDEgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9p OTE1X2dlbV9zaG1lbS5jICAgICB8IDUxMiArKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfbHJjLmMgICAgICAgICAgIHwgICA0ICstCiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9pbnRlbF9yaW5nYnVmZmVyLmMgICAgfCAgIDIgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2d2dC9jbWRfcGFyc2VyLmMgICAgICAgICB8ICAyMSArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kcnYuaCAgICAgICAgICAgICAgIHwgIDEwIC0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtLmMgICAgICAgICAgICAgICB8IDgyNiArLS0tLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfcGVyZi5jICAgICAgICAgICAgICB8ICAgMiArLQogZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZmJkZXYuYyAgICAgICAgICAgIHwgICAyICstCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9ndWMuYyAgICAgICAgICAgICAgfCAgIDIgKy0KIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX3VjX2Z3LmMgICAgICAgICAgICB8ICAgMyArLQogZHJpdmVycy9ncHUv ZHJtL2k5MTUvc2VsZnRlc3RzL2h1Z2VfcGFnZXMuYyAgIHwgICA2ICstCiAuLi4vZ3B1L2RybS9p OTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9kbWFidWYuYyAgfCAgIDggKy0KIC4uLi9ncHUvZHJtL2k5 MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX29iamVjdC5jICB8ICAgNCArLQogMTYgZmlsZXMgY2hhbmdl ZCwgODgzIGluc2VydGlvbnMoKyksIDg2MSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fc2htZW0uYwoKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFr ZWZpbGUKaW5kZXggZGVhYzY1OWRkZWYwLi40NDcxNDNmYWRiMDUgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2Vm aWxlCkBAIC04Nyw3ICs4Nyw4IEBAIGk5MTUteSArPSAkKGd0LXkpCiAjIEdFTSAoR3JhcGhpY3Mg RXhlY3V0aW9uIE1hbmFnZW1lbnQpIGNvZGUKIG9iai15ICs9IGdlbS8KIGdlbS15ICs9IFwKLQln ZW0vaTkxNV9nZW1fb2JqZWN0Lm8KKwlnZW0vaTkxNV9nZW1fb2JqZWN0Lm8gXAorCWdlbS9pOTE1 X2dlbV9zaG1lbS5vCiBpOTE1LXkgKz0gXAogCSAgJChnZW0teSkgXAogCSAgaTkxNV9hY3RpdmUu byBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0 LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmMKaW5kZXggODE3 OTI1MmJiMzliLi44NmU3ZTg4ODE3YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2dlbS9pOTE1X2dlbV9vYmplY3QuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkx NV9nZW1fb2JqZWN0LmMKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgIi4uL2k5MTVfZHJ2 LmgiCiAjaW5jbHVkZSAiLi4vaTkxNV9nbG9iYWxzLmgiCisjaW5jbHVkZSAiLi4vaW50ZWxfZnJv bnRidWZmZXIuaCIKIAogc3RhdGljIHN0cnVjdCBpOTE1X2dsb2JhbF9vYmplY3QgewogCXN0cnVj dCBpOTE1X2dsb2JhbCBiYXNlOwpAQCAtNDIsNiArNDMsNjQgQEAgdm9pZCBpOTE1X2dlbV9vYmpl Y3RfZnJlZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQogCXJldHVybiBrbWVtX2Nh Y2hlX2ZyZWUoZ2xvYmFsLnNsYWJfb2JqZWN0cywgb2JqKTsKIH0KIAorLyogc29tZSBib29ra2Vl cGluZyAqLworc3RhdGljIHZvaWQgaTkxNV9nZW1faW5mb19hZGRfb2JqKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICppOTE1LAorCQkJCSAgdTY0IHNpemUpCit7CisJc3Bpbl9sb2NrKCZpOTE1LT5t bS5vYmplY3Rfc3RhdF9sb2NrKTsKKwlpOTE1LT5tbS5vYmplY3RfY291bnQrKzsKKwlpOTE1LT5t bS5vYmplY3RfbWVtb3J5ICs9IHNpemU7CisJc3Bpbl91bmxvY2soJmk5MTUtPm1tLm9iamVjdF9z dGF0X2xvY2spOworfQorCitzdGF0aWMgdm9pZCBpOTE1X2dlbV9pbmZvX3JlbW92ZV9vYmooc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCisJCQkJICAgICB1NjQgc2l6ZSkKK3sKKwlzcGlu X2xvY2soJmk5MTUtPm1tLm9iamVjdF9zdGF0X2xvY2spOworCWk5MTUtPm1tLm9iamVjdF9jb3Vu dC0tOworCWk5MTUtPm1tLm9iamVjdF9tZW1vcnkgLT0gc2l6ZTsKKwlzcGluX3VubG9jaygmaTkx NS0+bW0ub2JqZWN0X3N0YXRfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkCitmcm9udGJ1ZmZlcl9y ZXRpcmUoc3RydWN0IGk5MTVfYWN0aXZlX3JlcXVlc3QgKmFjdGl2ZSwKKwkJICAgc3RydWN0IGk5 MTVfcmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2Jq ID0KKwkJY29udGFpbmVyX29mKGFjdGl2ZSwgdHlwZW9mKCpvYmopLCBmcm9udGJ1ZmZlcl93cml0 ZSk7CisKKwlpbnRlbF9mYl9vYmpfZmx1c2gob2JqLCBPUklHSU5fQ1MpOworfQorCit2b2lkIGk5 MTVfZ2VtX29iamVjdF9pbml0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJCQkg IGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0X29wcyAqb3BzKQoreworCW11dGV4X2lu aXQoJm9iai0+bW0ubG9jayk7CisKKwlzcGluX2xvY2tfaW5pdCgmb2JqLT52bWEubG9jayk7CisJ SU5JVF9MSVNUX0hFQUQoJm9iai0+dm1hLmxpc3QpOworCisJSU5JVF9MSVNUX0hFQUQoJm9iai0+ bHV0X2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZvYmotPmJhdGNoX3Bvb2xfbGluayk7CisKKwlp bml0X3JjdV9oZWFkKCZvYmotPnJjdSk7CisKKwlvYmotPm9wcyA9IG9wczsKKworCXJlc2VydmF0 aW9uX29iamVjdF9pbml0KCZvYmotPl9fYnVpbHRpbl9yZXN2KTsKKwlvYmotPnJlc3YgPSAmb2Jq LT5fX2J1aWx0aW5fcmVzdjsKKworCW9iai0+ZnJvbnRidWZmZXJfZ2d0dF9vcmlnaW4gPSBPUklH SU5fR1RUOworCWk5MTVfYWN0aXZlX3JlcXVlc3RfaW5pdCgmb2JqLT5mcm9udGJ1ZmZlcl93cml0 ZSwKKwkJCQkgTlVMTCwgZnJvbnRidWZmZXJfcmV0aXJlKTsKKworCW9iai0+bW0ubWFkdiA9IEk5 MTVfTUFEVl9XSUxMTkVFRDsKKwlJTklUX1JBRElYX1RSRUUoJm9iai0+bW0uZ2V0X3BhZ2UucmFk aXgsIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pOworCW11dGV4X2luaXQoJm9iai0+bW0uZ2V0 X3BhZ2UubG9jayk7CisKKwlpOTE1X2dlbV9pbmZvX2FkZF9vYmoodG9faTkxNShvYmotPmJhc2Uu ZGV2KSwgb2JqLT5iYXNlLnNpemUpOworfQorCiAvKioKICAqIE1hcmsgdXAgdGhlIG9iamVjdCdz IGNvaGVyZW5jeSBsZXZlbHMgZm9yIGEgZ2l2ZW4gY2FjaGVfbGV2ZWwKICAqIEBvYmo6ICNkcm1f aTkxNV9nZW1fb2JqZWN0CkBAIC02NCw2ICsxMjMsMjQ1IEBAIHZvaWQgaTkxNV9nZW1fb2JqZWN0 X3NldF9jYWNoZV9jb2hlcmVuY3koc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAkJ IShvYmotPmNhY2hlX2NvaGVyZW50ICYgSTkxNV9CT19DQUNIRV9DT0hFUkVOVF9GT1JfV1JJVEUp OwogfQogCit2b2lkIGk5MTVfZ2VtX2Nsb3NlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg KmdlbSwgc3RydWN0IGRybV9maWxlICpmaWxlKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1ID0gdG9faTkxNShnZW0tPmRldik7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iaiA9IHRvX2ludGVsX2JvKGdlbSk7CisJc3RydWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAq ZnByaXYgPSBmaWxlLT5kcml2ZXJfcHJpdjsKKwlzdHJ1Y3QgaTkxNV9sdXRfaGFuZGxlICpsdXQs ICpsbjsKKworCW11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOworCisJbGlzdF9m b3JfZWFjaF9lbnRyeV9zYWZlKGx1dCwgbG4sICZvYmotPmx1dF9saXN0LCBvYmpfbGluaykgewor CQlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4ID0gbHV0LT5jdHg7CisJCXN0cnVjdCBpOTE1 X3ZtYSAqdm1hOworCisJCUdFTV9CVUdfT04oY3R4LT5maWxlX3ByaXYgPT0gRVJSX1BUUigtRUJB REYpKTsKKwkJaWYgKGN0eC0+ZmlsZV9wcml2ICE9IGZwcml2KQorCQkJY29udGludWU7CisKKwkJ dm1hID0gcmFkaXhfdHJlZV9kZWxldGUoJmN0eC0+aGFuZGxlc192bWEsIGx1dC0+aGFuZGxlKTsK KwkJR0VNX0JVR19PTih2bWEtPm9iaiAhPSBvYmopOworCisJCS8qIFdlIGFsbG93IHRoZSBwcm9j ZXNzIHRvIGhhdmUgbXVsdGlwbGUgaGFuZGxlcyB0byB0aGUgc2FtZQorCQkgKiB2bWEsIGluIHRo ZSBzYW1lIGZkIG5hbWVzcGFjZSwgYnkgdmlydHVlIG9mIGZsaW5rL29wZW4uCisJCSAqLworCQlH RU1fQlVHX09OKCF2bWEtPm9wZW5fY291bnQpOworCQlpZiAoIS0tdm1hLT5vcGVuX2NvdW50ICYm ICFpOTE1X3ZtYV9pc19nZ3R0KHZtYSkpCisJCQlpOTE1X3ZtYV9jbG9zZSh2bWEpOworCisJCWxp c3RfZGVsKCZsdXQtPm9ial9saW5rKTsKKwkJbGlzdF9kZWwoJmx1dC0+Y3R4X2xpbmspOworCisJ CWk5MTVfbHV0X2hhbmRsZV9mcmVlKGx1dCk7CisJCV9faTkxNV9nZW1fb2JqZWN0X3JlbGVhc2Vf dW5sZXNzX2FjdGl2ZShvYmopOworCX0KKworCW11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVj dF9tdXRleCk7Cit9CisKK3N0YXRpYyBib29sIGRpc2NhcmRfYmFja2luZ19zdG9yYWdlKHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCit7CisJLyogSWYgd2UgYXJlIHRoZSBsYXN0IHVz ZXIgb2YgdGhlIGJhY2tpbmcgc3RvcmFnZSAoYmUgaXQgc2htZW1mcworCSAqIHBhZ2VzIG9yIHN0 b2xlbiBldGMpLCB3ZSBrbm93IHRoYXQgdGhlIHBhZ2VzIGFyZSBnb2luZyB0byBiZQorCSAqIGlt bWVkaWF0ZWx5IHJlbGVhc2VkLiBJbiB0aGlzIGNhc2UsIHdlIGNhbiB0aGVuIHNraXAgY29weWlu ZworCSAqIGJhY2sgdGhlIGNvbnRlbnRzIGZyb20gdGhlIEdQVS4KKwkgKi8KKworCWlmIChvYmot Pm1tLm1hZHYgIT0gSTkxNV9NQURWX1dJTExORUVEKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAo IW9iai0+YmFzZS5maWxwKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qIEF0IGZpcnN0IGdsYW5jZSwg dGhpcyBsb29rcyByYWN5LCBidXQgdGhlbiBhZ2FpbiBzbyB3b3VsZCBiZQorCSAqIHVzZXJzcGFj ZSByYWNpbmcgbW1hcCBhZ2FpbnN0IGNsb3NlLiBIb3dldmVyLCB0aGUgZmlyc3QgZXh0ZXJuYWwK KwkgKiByZWZlcmVuY2UgdG8gdGhlIGZpbHAgY2FuIG9ubHkgYmUgb2J0YWluZWQgdGhyb3VnaCB0 aGUKKwkgKiBpOTE1X2dlbV9tbWFwX2lvY3RsKCkgd2hpY2ggc2FmZWd1YXJkcyB1cyBhZ2FpbnN0 IHRoZSB1c2VyCisJICogYWNxdWlyaW5nIHN1Y2ggYSByZWZlcmVuY2Ugd2hpbHN0IHdlIGFyZSBp biB0aGUgbWlkZGxlIG9mCisJICogZnJlZWluZyB0aGUgb2JqZWN0LgorCSAqLworCXJldHVybiBh dG9taWNfbG9uZ19yZWFkKCZvYmotPmJhc2UuZmlscC0+Zl9jb3VudCkgPT0gMTsKK30KKworc3Rh dGljIHZvaWQgX19pOTE1X2dlbV9mcmVlX29iamVjdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg Kmk5MTUsCisJCQkJICAgIHN0cnVjdCBsbGlzdF9ub2RlICpmcmVlZCkKK3sKKwlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqLCAqb247CisJaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7CisK Kwl3YWtlcmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXQoaTkxNSk7CisJbGxpc3RfZm9yX2VhY2hf ZW50cnlfc2FmZShvYmosIG9uLCBmcmVlZCwgZnJlZWQpIHsKKwkJc3RydWN0IGk5MTVfdm1hICp2 bWEsICp2bjsKKworCQl0cmFjZV9pOTE1X2dlbV9vYmplY3RfZGVzdHJveShvYmopOworCisJCW11 dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOworCisJCUdFTV9CVUdfT04oaTkxNV9n ZW1fb2JqZWN0X2lzX2FjdGl2ZShvYmopKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHZt YSwgdm4sICZvYmotPnZtYS5saXN0LCBvYmpfbGluaykgeworCQkJR0VNX0JVR19PTihpOTE1X3Zt YV9pc19hY3RpdmUodm1hKSk7CisJCQl2bWEtPmZsYWdzICY9IH5JOTE1X1ZNQV9QSU5fTUFTSzsK KwkJCWk5MTVfdm1hX2Rlc3Ryb3kodm1hKTsKKwkJfQorCQlHRU1fQlVHX09OKCFsaXN0X2VtcHR5 KCZvYmotPnZtYS5saXN0KSk7CisJCUdFTV9CVUdfT04oIVJCX0VNUFRZX1JPT1QoJm9iai0+dm1h LnRyZWUpKTsKKworCQkvKiBUaGlzIHNlcmlhbGl6ZXMgZnJlZWluZyB3aXRoIHRoZSBzaHJpbmtl ci4gU2luY2UgdGhlIGZyZWUKKwkJICogaXMgZGVsYXllZCwgZmlyc3QgYnkgUkNVIHRoZW4gYnkg dGhlIHdvcmtxdWV1ZSwgd2Ugd2FudCB0aGUKKwkJICogc2hyaW5rZXIgdG8gYmUgYWJsZSB0byBm cmVlIHBhZ2VzIG9mIHVucmVmZXJlbmNlZCBvYmplY3RzLAorCQkgKiBvciBlbHNlIHdlIG1heSBv b20gd2hpbHN0IHRoZXJlIGFyZSBwbGVudHkgb2YgZGVmZXJyZWQKKwkJICogZnJlZWQgb2JqZWN0 cy4KKwkJICovCisJCWlmIChpOTE1X2dlbV9vYmplY3RfaGFzX3BhZ2VzKG9iaikpIHsKKwkJCXNw aW5fbG9jaygmaTkxNS0+bW0ub2JqX2xvY2spOworCQkJbGlzdF9kZWxfaW5pdCgmb2JqLT5tbS5s aW5rKTsKKwkJCXNwaW5fdW5sb2NrKCZpOTE1LT5tbS5vYmpfbG9jayk7CisJCX0KKworCQltdXRl eF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOworCisJCUdFTV9CVUdfT04ob2JqLT5i aW5kX2NvdW50KTsKKwkJR0VNX0JVR19PTihvYmotPnVzZXJmYXVsdF9jb3VudCk7CisJCUdFTV9C VUdfT04oYXRvbWljX3JlYWQoJm9iai0+ZnJvbnRidWZmZXJfYml0cykpOworCQlHRU1fQlVHX09O KCFsaXN0X2VtcHR5KCZvYmotPmx1dF9saXN0KSk7CisKKwkJaWYgKG9iai0+b3BzLT5yZWxlYXNl KQorCQkJb2JqLT5vcHMtPnJlbGVhc2Uob2JqKTsKKworCQlpZiAoV0FSTl9PTihpOTE1X2dlbV9v YmplY3RfaGFzX3Bpbm5lZF9wYWdlcyhvYmopKSkKKwkJCWF0b21pY19zZXQoJm9iai0+bW0ucGFn ZXNfcGluX2NvdW50LCAwKTsKKwkJX19pOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzKG9iaiwgSTkx NV9NTV9OT1JNQUwpOworCQlHRU1fQlVHX09OKGk5MTVfZ2VtX29iamVjdF9oYXNfcGFnZXMob2Jq KSk7CisKKwkJaWYgKG9iai0+YmFzZS5pbXBvcnRfYXR0YWNoKQorCQkJZHJtX3ByaW1lX2dlbV9k ZXN0cm95KCZvYmotPmJhc2UsIE5VTEwpOworCisJCXJlc2VydmF0aW9uX29iamVjdF9maW5pKCZv YmotPl9fYnVpbHRpbl9yZXN2KTsKKwkJZHJtX2dlbV9vYmplY3RfcmVsZWFzZSgmb2JqLT5iYXNl KTsKKwkJaTkxNV9nZW1faW5mb19yZW1vdmVfb2JqKGk5MTUsIG9iai0+YmFzZS5zaXplKTsKKwor CQliaXRtYXBfZnJlZShvYmotPmJpdF8xNyk7CisJCWk5MTVfZ2VtX29iamVjdF9mcmVlKG9iaik7 CisKKwkJR0VNX0JVR19PTighYXRvbWljX3JlYWQoJmk5MTUtPm1tLmZyZWVfY291bnQpKTsKKwkJ YXRvbWljX2RlYygmaTkxNS0+bW0uZnJlZV9jb3VudCk7CisKKwkJaWYgKG9uKQorCQkJY29uZF9y ZXNjaGVkKCk7CisJfQorCWludGVsX3J1bnRpbWVfcG1fcHV0KGk5MTUsIHdha2VyZWYpOworfQor Cit2b2lkIGk5MTVfZ2VtX2ZsdXNoX2ZyZWVfb2JqZWN0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSkKK3sKKwlzdHJ1Y3QgbGxpc3Rfbm9kZSAqZnJlZWQ7CisKKwkvKiBGcmVlIHRoZSBv bGRlc3QsIG1vc3Qgc3RhbGUgb2JqZWN0IHRvIGtlZXAgdGhlIGZyZWVfbGlzdCBzaG9ydCAqLwor CWZyZWVkID0gTlVMTDsKKwlpZiAoIWxsaXN0X2VtcHR5KCZpOTE1LT5tbS5mcmVlX2xpc3QpKSB7 IC8qIHF1aWNrIHRlc3QgZm9yIGhvdHBhdGggKi8KKwkJLyogT25seSBvbmUgY29uc3VtZXIgb2Yg bGxpc3RfZGVsX2ZpcnN0KCkgYWxsb3dlZCAqLworCQlzcGluX2xvY2soJmk5MTUtPm1tLmZyZWVf bG9jayk7CisJCWZyZWVkID0gbGxpc3RfZGVsX2ZpcnN0KCZpOTE1LT5tbS5mcmVlX2xpc3QpOwor CQlzcGluX3VubG9jaygmaTkxNS0+bW0uZnJlZV9sb2NrKTsKKwl9CisJaWYgKHVubGlrZWx5KGZy ZWVkKSkgeworCQlmcmVlZC0+bmV4dCA9IE5VTEw7CisJCV9faTkxNV9nZW1fZnJlZV9vYmplY3Rz KGk5MTUsIGZyZWVkKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9faTkxNV9nZW1fZnJlZV93b3Jr KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNSA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSwgbW0u ZnJlZV93b3JrKTsKKwlzdHJ1Y3QgbGxpc3Rfbm9kZSAqZnJlZWQ7CisKKwkvKgorCSAqIEFsbCBm aWxlLW93bmVkIFZNQSBzaG91bGQgaGF2ZSBiZWVuIHJlbGVhc2VkIGJ5IHRoaXMgcG9pbnQgdGhy b3VnaAorCSAqIGk5MTVfZ2VtX2Nsb3NlX29iamVjdCgpLCBvciBlYXJsaWVyIGJ5IGk5MTVfZ2Vt X2NvbnRleHRfY2xvc2UoKS4KKwkgKiBIb3dldmVyLCB0aGUgb2JqZWN0IG1heSBhbHNvIGJlIGJv dW5kIGludG8gdGhlIGdsb2JhbCBHVFQgKGUuZy4KKwkgKiBvbGRlciBHUFVzIHdpdGhvdXQgcGVy LXByb2Nlc3Mgc3VwcG9ydCwgb3IgZm9yIGRpcmVjdCBhY2Nlc3MgdGhyb3VnaAorCSAqIHRoZSBH VFQgZWl0aGVyIGZvciB0aGUgdXNlciBvciBmb3Igc2Nhbm91dCkuIFRob3NlIFZNQSBzdGlsbCBu ZWVkIHRvCisJICogdW5ib3VuZCBub3cuCisJICovCisKKwlzcGluX2xvY2soJmk5MTUtPm1tLmZy ZWVfbG9jayk7CisJd2hpbGUgKChmcmVlZCA9IGxsaXN0X2RlbF9hbGwoJmk5MTUtPm1tLmZyZWVf bGlzdCkpKSB7CisJCXNwaW5fdW5sb2NrKCZpOTE1LT5tbS5mcmVlX2xvY2spOworCisJCV9faTkx NV9nZW1fZnJlZV9vYmplY3RzKGk5MTUsIGZyZWVkKTsKKwkJaWYgKG5lZWRfcmVzY2hlZCgpKQor CQkJcmV0dXJuOworCisJCXNwaW5fbG9jaygmaTkxNS0+bW0uZnJlZV9sb2NrKTsKKwl9CisJc3Bp bl91bmxvY2soJmk5MTUtPm1tLmZyZWVfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIF9faTkxNV9n ZW1fZnJlZV9vYmplY3RfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqID0KKwkJY29udGFpbmVyX29mKGhlYWQsIHR5cGVvZigqb2Jq KSwgcmN1KTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUob2JqLT5i YXNlLmRldik7CisKKwkvKgorCSAqIFdlIHJldXNlIG9iai0+cmN1IGZvciB0aGUgZnJlZWQgbGlz dCwgc28gd2UgaGFkIGJldHRlciBub3QgdHJlYXQKKwkgKiBpdCBsaWtlIGEgcmN1X2hlYWQgZnJv bSB0aGlzIHBvaW50IGZvcndhcmRzLiBBbmQgd2UgZXhwZWN0IGFsbAorCSAqIG9iamVjdHMgdG8g YmUgZnJlZWQgdmlhIHRoaXMgcGF0aC4KKwkgKi8KKwlkZXN0cm95X3JjdV9oZWFkKCZvYmotPnJj dSk7CisKKwkvKgorCSAqIFNpbmNlIHdlIHJlcXVpcmUgYmxvY2tpbmcgb24gc3RydWN0X211dGV4 IHRvIHVuYmluZCB0aGUgZnJlZWQKKwkgKiBvYmplY3QgZnJvbSB0aGUgR1BVIGJlZm9yZSByZWxl YXNpbmcgcmVzb3VyY2VzIGJhY2sgdG8gdGhlCisJICogc3lzdGVtLCB3ZSBjYW4gbm90IGRvIHRo YXQgZGlyZWN0bHkgZnJvbSB0aGUgUkNVIGNhbGxiYWNrICh3aGljaCBtYXkKKwkgKiBiZSBhIHNv ZnRpcnEgY29udGV4dCksIGJ1dCBtdXN0IGluc3RlYWQgdGhlbiBkZWZlciB0aGF0IHdvcmsgb250 byBhCisJICoga3RocmVhZC4gV2UgdXNlIHRoZSBSQ1UgY2FsbGJhY2sgcmF0aGVyIHRoYW4gbW92 ZSB0aGUgZnJlZWQgb2JqZWN0CisJICogZGlyZWN0bHkgb250byB0aGUgd29yayBxdWV1ZSBzbyB0 aGF0IHdlIGNhbiBtaXggYmV0d2VlbiB1c2luZyB0aGUKKwkgKiB3b3JrZXIgYW5kIHBlcmZvcm1p bmcgZnJlZXMgZGlyZWN0bHkgZnJvbSBzdWJzZXF1ZW50IGFsbG9jYXRpb25zIGZvcgorCSAqIGNy dWRlIGJ1dCBlZmZlY3RpdmUgbWVtb3J5IHRocm90dGxpbmcuCisJICovCisJaWYgKGxsaXN0X2Fk ZCgmb2JqLT5mcmVlZCwgJmk5MTUtPm1tLmZyZWVfbGlzdCkpCisJCXF1ZXVlX3dvcmsoaTkxNS0+ d3EsICZpOTE1LT5tbS5mcmVlX3dvcmspOworfQorCit2b2lkIGk5MTVfZ2VtX2ZyZWVfb2JqZWN0 KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtX29iaikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqID0gdG9faW50ZWxfYm8oZ2VtX29iaik7CisKKwlpZiAob2JqLT5tbS5xdWly a2VkKQorCQlfX2k5MTVfZ2VtX29iamVjdF91bnBpbl9wYWdlcyhvYmopOworCisJaWYgKGRpc2Nh cmRfYmFja2luZ19zdG9yYWdlKG9iaikpCisJCW9iai0+bW0ubWFkdiA9IEk5MTVfTUFEVl9ET05U TkVFRDsKKworCS8qCisJICogQmVmb3JlIHdlIGZyZWUgdGhlIG9iamVjdCwgbWFrZSBzdXJlIGFu eSBwdXJlIFJDVS1vbmx5CisJICogcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIGFyZSBjb21w bGV0ZSwgZS5nLgorCSAqIGk5MTVfZ2VtX2J1c3lfaW9jdGwoKS4gRm9yIHRoZSBjb3JyZXNwb25k aW5nIHN5bmNocm9uaXplZAorCSAqIGxvb2t1cCBzZWUgaTkxNV9nZW1fb2JqZWN0X2xvb2t1cF9y Y3UoKS4KKwkgKi8KKwlhdG9taWNfaW5jKCZ0b19pOTE1KG9iai0+YmFzZS5kZXYpLT5tbS5mcmVl X2NvdW50KTsKKwljYWxsX3JjdSgmb2JqLT5yY3UsIF9faTkxNV9nZW1fZnJlZV9vYmplY3RfcmN1 KTsKK30KKwordm9pZCBfX2k5MTVfZ2VtX29iamVjdF9yZWxlYXNlX3VubGVzc19hY3RpdmUoc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKK3sKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZv YmotPmJhc2UuZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJaWYgKCFpOTE1X2dlbV9vYmplY3RfaGFz X2FjdGl2ZV9yZWZlcmVuY2Uob2JqKSAmJgorCSAgICBpOTE1X2dlbV9vYmplY3RfaXNfYWN0aXZl KG9iaikpCisJCWk5MTVfZ2VtX29iamVjdF9zZXRfYWN0aXZlX3JlZmVyZW5jZShvYmopOworCWVs c2UKKwkJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOworfQorCit2b2lkIGk5MTVfZ2VtX2luaXRf X29iamVjdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCit7CisJSU5JVF9XT1JLKCZp OTE1LT5tbS5mcmVlX3dvcmssIF9faTkxNV9nZW1fZnJlZV93b3JrKTsKK30KKwogc3RhdGljIHZv aWQgaTkxNV9nbG9iYWxfb2JqZWN0c19zaHJpbmsodm9pZCkKIHsKIAlrbWVtX2NhY2hlX3Nocmlu ayhnbG9iYWwuc2xhYl9vYmplY3RzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2dlbS9pOTE1X2dlbV9vYmplY3QuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dl bV9vYmplY3QuaAppbmRleCAwNjFiMjBjM2RhNWIuLmFkODIzMDNmNzQxYSAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5oCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuaApAQCAtMTUsOSArMTUsMjkgQEAKIAog I2luY2x1ZGUgImk5MTVfZ2VtX29iamVjdF90eXBlcy5oIgogCit2b2lkIGk5MTVfZ2VtX2luaXRf X29iamVjdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOworCiBzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqaTkxNV9nZW1fb2JqZWN0X2FsbG9jKHZvaWQpOwogdm9pZCBpOTE1X2dl bV9vYmplY3RfZnJlZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKTsKIAordm9pZCBp OTE1X2dlbV9vYmplY3RfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkJ ICBjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdF9vcHMgKm9wcyk7CitzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqCitpOTE1X2dlbV9vYmplY3RfY3JlYXRlX3NobWVtKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICppOTE1LCB1NjQgc2l6ZSk7CitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqCitpOTE1X2dlbV9vYmplY3RfY3JlYXRlX3NobWVtX2Zyb21fZGF0YShzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSwKKwkJCQkgICAgICAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90 IHNpemUpOworCitleHRlcm4gY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Rfb3BzIGk5 MTVfZ2VtX3NobWVtX29wczsKK3ZvaWQgX19pOTE1X2dlbV9vYmplY3RfcmVsZWFzZV9zaG1lbShz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkJCSAgICAgc3RydWN0IHNnX3RhYmxl ICpwYWdlcywKKwkJCQkgICAgIGJvb2wgbmVlZHNfY2xmbHVzaCk7CisKK3ZvaWQgaTkxNV9nZW1f Y2xvc2Vfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtLCBzdHJ1Y3QgZHJtX2ZpbGUg KmZpbGUpOwordm9pZCBpOTE1X2dlbV9mcmVlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg Km9iaik7CisKK3ZvaWQgaTkxNV9nZW1fZmx1c2hfZnJlZV9vYmplY3RzKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICppOTE1KTsKKwogLyoqCiAgKiBpOTE1X2dlbV9vYmplY3RfbG9va3VwX3JjdSAt IGxvb2sgdXAgYSB0ZW1wb3JhcnkgR0VNIG9iamVjdCBmcm9tIGl0cyBoYW5kbGUKICAqIEBmaWxw OiBEUk0gZmlsZSBwcml2YXRlIGRhdGUKQEAgLTMzOCw4ICszNTgsMjMgQEAgdm9pZCBpOTE1X2dl bV9vYmplY3Rfc2V0X2NhY2hlX2NvaGVyZW5jeShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq b2JqLAogCQkJCQkgdW5zaWduZWQgaW50IGNhY2hlX2xldmVsKTsKIHZvaWQgaTkxNV9nZW1fb2Jq ZWN0X2ZsdXNoX2lmX2Rpc3BsYXkoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7CiAK LXZvaWQgX19pOTE1X2dlbV9vYmplY3RfcmVsZWFzZV9zaG1lbShzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqLAotCQkJCSAgICAgc3RydWN0IHNnX3RhYmxlICpwYWdlcywKLQkJCQkgICAg IGJvb2wgbmVlZHNfY2xmbHVzaCk7CitzdGF0aWMgaW5saW5lIGJvb2wgY3B1X3dyaXRlX25lZWRz X2NsZmx1c2goc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKK3sKKwlpZiAob2JqLT5j YWNoZV9kaXJ0eSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKCEob2JqLT5jYWNoZV9jb2hlcmVu dCAmIEk5MTVfQk9fQ0FDSEVfQ09IRVJFTlRfRk9SX1dSSVRFKSkKKwkJcmV0dXJuIHRydWU7CisK KwlyZXR1cm4gb2JqLT5waW5fZ2xvYmFsOyAvKiBjdXJyZW50bHkgaW4gdXNlIGJ5IEhXLCBrZWVw IGZsdXNoZWQgKi8KK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fc3RhcnRfY3B1X3dyaXRlKHN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCit7CisJb2JqLT5yZWFkX2RvbWFpbnMgPSBJ OTE1X0dFTV9ET01BSU5fQ1BVOworCW9iai0+d3JpdGVfZG9tYWluID0gSTkxNV9HRU1fRE9NQUlO X0NQVTsKKwlpZiAoY3B1X3dyaXRlX25lZWRzX2NsZmx1c2gob2JqKSkKKwkJb2JqLT5jYWNoZV9k aXJ0eSA9IHRydWU7Cit9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9n ZW1fc2htZW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjlkODg1 YjVlNjY0MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1 X2dlbV9zaG1lbS5jCkBAIC0wLDAgKzEsNTEyIEBACisvKgorICogU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IE1JVAorICoKKyAqIENvcHlyaWdodCDCqSAyMDE0LTIwMTYgSW50ZWwgQ29ycG9yYXRp b24KKyAqLworCisjaW5jbHVkZSA8bGludXgvcGFnZXZlYy5oPgorI2luY2x1ZGUgPGxpbnV4L3N3 YXAuaD4KKworI2luY2x1ZGUgImk5MTVfZ2VtX29iamVjdC5oIgorCisjaW5jbHVkZSAiLi4vaTkx NV9kcnYuaCIKKworLyoKKyAqIE1vdmUgcGFnZXMgdG8gYXBwcm9wcmlhdGUgbHJ1IGFuZCByZWxl YXNlIHRoZSBwYWdldmVjLCBkZWNyZW1lbnRpbmcgdGhlCisgKiByZWYgY291bnQgb2YgdGhvc2Ug cGFnZXMuCisgKi8KK3N0YXRpYyB2b2lkIGNoZWNrX3JlbGVhc2VfcGFnZXZlYyhzdHJ1Y3QgcGFn ZXZlYyAqcHZlYykKK3sKKwljaGVja19tb3ZlX3VuZXZpY3RhYmxlX3BhZ2VzKHB2ZWMpOworCV9f cGFnZXZlY19yZWxlYXNlKHB2ZWMpOworCWNvbmRfcmVzY2hlZCgpOworfQorCitzdGF0aWMgaW50 IHNobWVtX2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQoreworCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkxNShvYmotPmJhc2UuZGV2KTsKKwlj b25zdCB1bnNpZ25lZCBsb25nIHBhZ2VfY291bnQgPSBvYmotPmJhc2Uuc2l6ZSAvIFBBR0VfU0la RTsKKwl1bnNpZ25lZCBsb25nIGk7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CisJ c3RydWN0IHNnX3RhYmxlICpzdDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCXN0cnVjdCBz Z3RfaXRlciBzZ3RfaXRlcjsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwl1bnNpZ25lZCBsb25nIGxh c3RfcGZuID0gMDsJLyogc3VwcHJlc3MgZ2NjIHdhcm5pbmcgKi8KKwl1bnNpZ25lZCBpbnQgbWF4 X3NlZ21lbnQgPSBpOTE1X3NnX3NlZ21lbnRfc2l6ZSgpOworCXVuc2lnbmVkIGludCBzZ19wYWdl X3NpemVzOworCXN0cnVjdCBwYWdldmVjIHB2ZWM7CisJZ2ZwX3Qgbm9yZWNsYWltOworCWludCBy ZXQ7CisKKwkvKgorCSAqIEFzc2VydCB0aGF0IHRoZSBvYmplY3QgaXMgbm90IGN1cnJlbnRseSBp biBhbnkgR1BVIGRvbWFpbi4gQXMgaXQKKwkgKiB3YXNuJ3QgaW4gdGhlIEdUVCwgdGhlcmUgc2hv dWxkbid0IGJlIGFueSB3YXkgaXQgY291bGQgaGF2ZSBiZWVuIGluCisJICogYSBHUFUgY2FjaGUK KwkgKi8KKwlHRU1fQlVHX09OKG9iai0+cmVhZF9kb21haW5zICYgSTkxNV9HRU1fR1BVX0RPTUFJ TlMpOworCUdFTV9CVUdfT04ob2JqLT53cml0ZV9kb21haW4gJiBJOTE1X0dFTV9HUFVfRE9NQUlO Uyk7CisKKwkvKgorCSAqIElmIHRoZXJlJ3Mgbm8gY2hhbmNlIG9mIGFsbG9jYXRpbmcgZW5vdWdo IHBhZ2VzIGZvciB0aGUgd2hvbGUKKwkgKiBvYmplY3QsIGJhaWwgZWFybHkuCisJICovCisJaWYg KHBhZ2VfY291bnQgPiB0b3RhbHJhbV9wYWdlcygpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXN0 ID0ga21hbGxvYyhzaXplb2YoKnN0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdCkKKwkJcmV0dXJu IC1FTk9NRU07CisKK3JlYnVpbGRfc3Q6CisJaWYgKHNnX2FsbG9jX3RhYmxlKHN0LCBwYWdlX2Nv dW50LCBHRlBfS0VSTkVMKSkgeworCQlrZnJlZShzdCk7CisJCXJldHVybiAtRU5PTUVNOworCX0K KworCS8qCisJICogR2V0IHRoZSBsaXN0IG9mIHBhZ2VzIG91dCBvZiBvdXIgc3RydWN0IGZpbGUu ICBUaGV5J2xsIGJlIHBpbm5lZAorCSAqIGF0IHRoaXMgcG9pbnQgdW50aWwgd2UgcmVsZWFzZSB0 aGVtLgorCSAqCisJICogRmFpbCBzaWxlbnRseSB3aXRob3V0IHN0YXJ0aW5nIHRoZSBzaHJpbmtl cgorCSAqLworCW1hcHBpbmcgPSBvYmotPmJhc2UuZmlscC0+Zl9tYXBwaW5nOworCW1hcHBpbmdf c2V0X3VuZXZpY3RhYmxlKG1hcHBpbmcpOworCW5vcmVjbGFpbSA9IG1hcHBpbmdfZ2ZwX2NvbnN0 cmFpbnQobWFwcGluZywgfl9fR0ZQX1JFQ0xBSU0pOworCW5vcmVjbGFpbSB8PSBfX0dGUF9OT1JF VFJZIHwgX19HRlBfTk9XQVJOOworCisJc2cgPSBzdC0+c2dsOworCXN0LT5uZW50cyA9IDA7CisJ c2dfcGFnZV9zaXplcyA9IDA7CisJZm9yIChpID0gMDsgaSA8IHBhZ2VfY291bnQ7IGkrKykgewor CQljb25zdCB1bnNpZ25lZCBpbnQgc2hyaW5rW10gPSB7CisJCQkoSTkxNV9TSFJJTktfQk9VTkQg fAorCQkJIEk5MTVfU0hSSU5LX1VOQk9VTkQgfAorCQkJIEk5MTVfU0hSSU5LX1BVUkdFQUJMRSks CisJCQkwLAorCQl9LCAqcyA9IHNocmluazsKKwkJZ2ZwX3QgZ2ZwID0gbm9yZWNsYWltOworCisJ CWRvIHsKKwkJCWNvbmRfcmVzY2hlZCgpOworCQkJcGFnZSA9IHNobWVtX3JlYWRfbWFwcGluZ19w YWdlX2dmcChtYXBwaW5nLCBpLCBnZnApOworCQkJaWYgKCFJU19FUlIocGFnZSkpCisJCQkJYnJl YWs7CisKKwkJCWlmICghKnMpIHsKKwkJCQlyZXQgPSBQVFJfRVJSKHBhZ2UpOworCQkJCWdvdG8g ZXJyX3NnOworCQkJfQorCisJCQlpOTE1X2dlbV9zaHJpbmsoaTkxNSwgMiAqIHBhZ2VfY291bnQs IE5VTEwsICpzKyspOworCisJCQkvKgorCQkJICogV2UndmUgdHJpZWQgaGFyZCB0byBhbGxvY2F0 ZSB0aGUgbWVtb3J5IGJ5IHJlYXBpbmcKKwkJCSAqIG91ciBvd24gYnVmZmVyLCBub3cgbGV0IHRo ZSByZWFsIFZNIGRvIGl0cyBqb2IgYW5kCisJCQkgKiBnbyBkb3duIGluIGZsYW1lcyBpZiB0cnVs eSBPT00uCisJCQkgKgorCQkJICogSG93ZXZlciwgc2luY2UgZ3JhcGhpY3MgdGVuZCB0byBiZSBk aXNwb3NhYmxlLAorCQkJICogZGVmZXIgdGhlIG9vbSBoZXJlIGJ5IHJlcG9ydGluZyB0aGUgRU5P TUVNIGJhY2sKKwkJCSAqIHRvIHVzZXJzcGFjZS4KKwkJCSAqLworCQkJaWYgKCEqcykgeworCQkJ CS8qIHJlY2xhaW0gYW5kIHdhcm4sIGJ1dCBubyBvb20gKi8KKwkJCQlnZnAgPSBtYXBwaW5nX2dm cF9tYXNrKG1hcHBpbmcpOworCisJCQkJLyoKKwkJCQkgKiBPdXIgYm8gYXJlIGFsd2F5cyBkaXJ0 eSBhbmQgc28gd2UgcmVxdWlyZQorCQkJCSAqIGtzd2FwZCB0byByZWNsYWltIG91ciBwYWdlcyAo ZGlyZWN0IHJlY2xhaW0KKwkJCQkgKiBkb2VzIG5vdCBlZmZlY3RpdmVseSBiZWdpbiBwYWdlb3V0 IG9mIG91cgorCQkJCSAqIGJ1ZmZlcnMgb24gaXRzIG93bikuIEhvd2V2ZXIsIGRpcmVjdCByZWNs YWltCisJCQkJICogb25seSB3YWl0cyBmb3Iga3N3YXBkIHdoZW4gdW5kZXIgYWxsb2NhdGlvbgor CQkJCSAqIGNvbmdlc3Rpb24uIFNvIGFzIGEgcmVzdWx0IF9fR0ZQX1JFQ0xBSU0gaXMKKwkJCQkg KiB1bnJlbGlhYmxlIGFuZCBmYWlscyB0byBhY3R1YWxseSByZWNsYWltIG91cgorCQkJCSAqIGRp cnR5IHBhZ2VzIC0tIHVubGVzcyB5b3UgdHJ5IG92ZXIgYW5kIG92ZXIKKwkJCQkgKiBhZ2FpbiB3 aXRoICFfX0dGUF9OT1JFVFJZLiBIb3dldmVyLCB3ZSBzdGlsbAorCQkJCSAqIHdhbnQgdG8gZmFp bCB0aGlzIGFsbG9jYXRpb24gcmF0aGVyIHRoYW4KKwkJCQkgKiB0cmlnZ2VyIHRoZSBvdXQtb2Yt bWVtb3J5IGtpbGxlciBhbmQgZm9yCisJCQkJICogdGhpcyB3ZSB3YW50IF9fR0ZQX1JFVFJZX01B WUZBSUwuCisJCQkJICovCisJCQkJZ2ZwIHw9IF9fR0ZQX1JFVFJZX01BWUZBSUw7CisJCQl9CisJ CX0gd2hpbGUgKDEpOworCisJCWlmICghaSB8fAorCQkgICAgc2ctPmxlbmd0aCA+PSBtYXhfc2Vn bWVudCB8fAorCQkgICAgcGFnZV90b19wZm4ocGFnZSkgIT0gbGFzdF9wZm4gKyAxKSB7CisJCQlp ZiAoaSkgeworCQkJCXNnX3BhZ2Vfc2l6ZXMgfD0gc2ctPmxlbmd0aDsKKwkJCQlzZyA9IHNnX25l eHQoc2cpOworCQkJfQorCQkJc3QtPm5lbnRzKys7CisJCQlzZ19zZXRfcGFnZShzZywgcGFnZSwg UEFHRV9TSVpFLCAwKTsKKwkJfSBlbHNlIHsKKwkJCXNnLT5sZW5ndGggKz0gUEFHRV9TSVpFOwor CQl9CisJCWxhc3RfcGZuID0gcGFnZV90b19wZm4ocGFnZSk7CisKKwkJLyogQ2hlY2sgdGhhdCB0 aGUgaTk2NWcvZ20gd29ya2Fyb3VuZCB3b3Jrcy4gKi8KKwkJV0FSTl9PTigoZ2ZwICYgX19HRlBf RE1BMzIpICYmIChsYXN0X3BmbiA+PSAweDAwMTAwMDAwVUwpKTsKKwl9CisJaWYgKHNnKSB7IC8q IGxvb3AgdGVybWluYXRlZCBlYXJseTsgc2hvcnQgc2cgdGFibGUgKi8KKwkJc2dfcGFnZV9zaXpl cyB8PSBzZy0+bGVuZ3RoOworCQlzZ19tYXJrX2VuZChzZyk7CisJfQorCisJLyogVHJpbSB1bnVz ZWQgc2cgZW50cmllcyB0byBhdm9pZCB3YXN0aW5nIG1lbW9yeS4gKi8KKwlpOTE1X3NnX3RyaW0o c3QpOworCisJcmV0ID0gaTkxNV9nZW1fZ3R0X3ByZXBhcmVfcGFnZXMob2JqLCBzdCk7CisJaWYg KHJldCkgeworCQkvKgorCQkgKiBETUEgcmVtYXBwaW5nIGZhaWxlZD8gT25lIHBvc3NpYmxlIGNh dXNlIGlzIHRoYXQKKwkJICogaXQgY291bGQgbm90IHJlc2VydmUgZW5vdWdoIGxhcmdlIGVudHJp ZXMsIGFza2luZworCQkgKiBmb3IgUEFHRV9TSVpFIGNodW5rcyBpbnN0ZWFkIG1heSBiZSBoZWxw ZnVsLgorCQkgKi8KKwkJaWYgKG1heF9zZWdtZW50ID4gUEFHRV9TSVpFKSB7CisJCQlmb3JfZWFj aF9zZ3RfcGFnZShwYWdlLCBzZ3RfaXRlciwgc3QpCisJCQkJcHV0X3BhZ2UocGFnZSk7CisJCQlz Z19mcmVlX3RhYmxlKHN0KTsKKworCQkJbWF4X3NlZ21lbnQgPSBQQUdFX1NJWkU7CisJCQlnb3Rv IHJlYnVpbGRfc3Q7CisJCX0gZWxzZSB7CisJCQlkZXZfd2FybigmaTkxNS0+ZHJtLnBkZXYtPmRl diwKKwkJCQkgIkZhaWxlZCB0byBETUEgcmVtYXAgJWx1IHBhZ2VzXG4iLAorCQkJCSBwYWdlX2Nv dW50KTsKKwkJCWdvdG8gZXJyX3BhZ2VzOworCQl9CisJfQorCisJaWYgKGk5MTVfZ2VtX29iamVj dF9uZWVkc19iaXQxN19zd2l6emxlKG9iaikpCisJCWk5MTVfZ2VtX29iamVjdF9kb19iaXRfMTdf c3dpenpsZShvYmosIHN0KTsKKworCV9faTkxNV9nZW1fb2JqZWN0X3NldF9wYWdlcyhvYmosIHN0 LCBzZ19wYWdlX3NpemVzKTsKKworCXJldHVybiAwOworCitlcnJfc2c6CisJc2dfbWFya19lbmQo c2cpOworZXJyX3BhZ2VzOgorCW1hcHBpbmdfY2xlYXJfdW5ldmljdGFibGUobWFwcGluZyk7CisJ cGFnZXZlY19pbml0KCZwdmVjKTsKKwlmb3JfZWFjaF9zZ3RfcGFnZShwYWdlLCBzZ3RfaXRlciwg c3QpIHsKKwkJaWYgKCFwYWdldmVjX2FkZCgmcHZlYywgcGFnZSkpCisJCQljaGVja19yZWxlYXNl X3BhZ2V2ZWMoJnB2ZWMpOworCX0KKwlpZiAocGFnZXZlY19jb3VudCgmcHZlYykpCisJCWNoZWNr X3JlbGVhc2VfcGFnZXZlYygmcHZlYyk7CisJc2dfZnJlZV90YWJsZShzdCk7CisJa2ZyZWUoc3Qp OworCisJLyoKKwkgKiBzaG1lbWZzIGZpcnN0IGNoZWNrcyBpZiB0aGVyZSBpcyBlbm91Z2ggbWVt b3J5IHRvIGFsbG9jYXRlIHRoZSBwYWdlCisJICogYW5kIHJlcG9ydHMgRU5PU1BDIHNob3VsZCB0 aGVyZSBiZSBpbnN1ZmZpY2llbnQsIGFsb25nIHdpdGggdGhlIHVzdWFsCisJICogRU5PTUVNIGZv ciBhIGdlbnVpbmUgYWxsb2NhdGlvbiBmYWlsdXJlLgorCSAqCisJICogV2UgdXNlIEVOT1NQQyBp biBvdXIgZHJpdmVyIHRvIG1lYW4gdGhhdCB3ZSBoYXZlIHJ1biBvdXQgb2YgYXBlcnR1cmUKKwkg KiBzcGFjZSBhbmQgc28gd2FudCB0byB0cmFuc2xhdGUgdGhlIGVycm9yIGZyb20gc2htZW1mcyBi YWNrIHRvIG91cgorCSAqIHVzdWFsIHVuZGVyc3RhbmRpbmcgb2YgRU5PTUVNLgorCSAqLworCWlm IChyZXQgPT0gLUVOT1NQQykKKwkJcmV0ID0gLUVOT01FTTsKKworCXJldHVybiByZXQ7Cit9CisK K3ZvaWQKK19faTkxNV9nZW1fb2JqZWN0X3JlbGVhc2Vfc2htZW0oc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iaiwKKwkJCQlzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzLAorCQkJCWJvb2wgbmVl ZHNfY2xmbHVzaCkKK3sKKwlHRU1fQlVHX09OKG9iai0+bW0ubWFkdiA9PSBfX0k5MTVfTUFEVl9Q VVJHRUQpOworCisJaWYgKG9iai0+bW0ubWFkdiA9PSBJOTE1X01BRFZfRE9OVE5FRUQpCisJCW9i ai0+bW0uZGlydHkgPSBmYWxzZTsKKworCWlmIChuZWVkc19jbGZsdXNoICYmCisJICAgIChvYmot PnJlYWRfZG9tYWlucyAmIEk5MTVfR0VNX0RPTUFJTl9DUFUpID09IDAgJiYKKwkgICAgIShvYmot PmNhY2hlX2NvaGVyZW50ICYgSTkxNV9CT19DQUNIRV9DT0hFUkVOVF9GT1JfUkVBRCkpCisJCWRy bV9jbGZsdXNoX3NnKHBhZ2VzKTsKKworCV9fc3RhcnRfY3B1X3dyaXRlKG9iaik7Cit9CisKK3N0 YXRpYyB2b2lkCitzaG1lbV9wdXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aiwgc3RydWN0IHNnX3RhYmxlICpwYWdlcykKK3sKKwlzdHJ1Y3Qgc2d0X2l0ZXIgc2d0X2l0ZXI7 CisJc3RydWN0IHBhZ2V2ZWMgcHZlYzsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKworCV9faTkxNV9n ZW1fb2JqZWN0X3JlbGVhc2Vfc2htZW0ob2JqLCBwYWdlcywgdHJ1ZSk7CisKKwlpOTE1X2dlbV9n dHRfZmluaXNoX3BhZ2VzKG9iaiwgcGFnZXMpOworCisJaWYgKGk5MTVfZ2VtX29iamVjdF9uZWVk c19iaXQxN19zd2l6emxlKG9iaikpCisJCWk5MTVfZ2VtX29iamVjdF9zYXZlX2JpdF8xN19zd2l6 emxlKG9iaiwgcGFnZXMpOworCisJbWFwcGluZ19jbGVhcl91bmV2aWN0YWJsZShmaWxlX2lub2Rl KG9iai0+YmFzZS5maWxwKS0+aV9tYXBwaW5nKTsKKworCXBhZ2V2ZWNfaW5pdCgmcHZlYyk7CisJ Zm9yX2VhY2hfc2d0X3BhZ2UocGFnZSwgc2d0X2l0ZXIsIHBhZ2VzKSB7CisJCWlmIChvYmotPm1t LmRpcnR5KQorCQkJc2V0X3BhZ2VfZGlydHkocGFnZSk7CisKKwkJaWYgKG9iai0+bW0ubWFkdiA9 PSBJOTE1X01BRFZfV0lMTE5FRUQpCisJCQltYXJrX3BhZ2VfYWNjZXNzZWQocGFnZSk7CisKKwkJ aWYgKCFwYWdldmVjX2FkZCgmcHZlYywgcGFnZSkpCisJCQljaGVja19yZWxlYXNlX3BhZ2V2ZWMo JnB2ZWMpOworCX0KKwlpZiAocGFnZXZlY19jb3VudCgmcHZlYykpCisJCWNoZWNrX3JlbGVhc2Vf cGFnZXZlYygmcHZlYyk7CisJb2JqLT5tbS5kaXJ0eSA9IGZhbHNlOworCisJc2dfZnJlZV90YWJs ZShwYWdlcyk7CisJa2ZyZWUocGFnZXMpOworfQorCitzdGF0aWMgaW50CitzaG1lbV9wd3JpdGUo c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKKwkgICAgIGNvbnN0IHN0cnVjdCBkcm1f aTkxNV9nZW1fcHdyaXRlICphcmcpCit7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcg PSBvYmotPmJhc2UuZmlscC0+Zl9tYXBwaW5nOworCWNoYXIgX191c2VyICp1c2VyX2RhdGEgPSB1 NjRfdG9fdXNlcl9wdHIoYXJnLT5kYXRhX3B0cik7CisJdTY0IHJlbWFpbiwgb2Zmc2V0OworCXVu c2lnbmVkIGludCBwZzsKKworCS8qIENhbGxlciBhbHJlYWR5IHZhbGlkYXRlZCB1c2VyIGFyZ3Mg Ki8KKwlHRU1fQlVHX09OKCFhY2Nlc3Nfb2sodXNlcl9kYXRhLCBhcmctPnNpemUpKTsKKworCS8q CisJICogQmVmb3JlIHdlIGluc3RhbnRpYXRlL3BpbiB0aGUgYmFja2luZyBzdG9yZSBmb3Igb3Vy IHVzZSwgd2UKKwkgKiBjYW4gcHJlcG9wdWxhdGUgdGhlIHNobWVtZnMgZmlscCBlZmZpY2llbnRs eSB1c2luZyBhIHdyaXRlIGludG8KKwkgKiB0aGUgcGFnZWNhY2hlLiBXZSBhdm9pZCB0aGUgcGVu YWx0eSBvZiBpbnN0YW50aWF0aW5nIGFsbCB0aGUKKwkgKiBwYWdlcywgaW1wb3J0YW50IGlmIHRo ZSB1c2VyIGlzIGp1c3Qgd3JpdGluZyB0byBhIGZldyBhbmQgbmV2ZXIKKwkgKiB1c2VzIHRoZSBv YmplY3Qgb24gdGhlIEdQVSwgYW5kIHVzaW5nIGEgZGlyZWN0IHdyaXRlIGludG8gc2htZW1mcwor CSAqIGFsbG93cyBpdCB0byBhdm9pZCB0aGUgY29zdCBvZiByZXRyaWV2aW5nIGEgcGFnZSAoZWl0 aGVyIHN3YXBpbgorCSAqIG9yIGNsZWFyaW5nLWJlZm9yZS11c2UpIGJlZm9yZSBpdCBpcyBvdmVy d3JpdHRlbi4KKwkgKi8KKwlpZiAoaTkxNV9nZW1fb2JqZWN0X2hhc19wYWdlcyhvYmopKQorCQly ZXR1cm4gLUVOT0RFVjsKKworCWlmIChvYmotPm1tLm1hZHYgIT0gSTkxNV9NQURWX1dJTExORUVE KQorCQlyZXR1cm4gLUVGQVVMVDsKKworCS8qCisJICogQmVmb3JlIHRoZSBwYWdlcyBhcmUgaW5z dGFudGlhdGVkIHRoZSBvYmplY3QgaXMgdHJlYXRlZCBhcyBiZWluZworCSAqIGluIHRoZSBDUFUg ZG9tYWluLiBUaGUgcGFnZXMgd2lsbCBiZSBjbGZsdXNoZWQgYXMgcmVxdWlyZWQgYmVmb3JlCisJ ICogdXNlLCBhbmQgd2UgY2FuIGZyZWVseSB3cml0ZSBpbnRvIHRoZSBwYWdlcyBkaXJlY3RseS4g SWYgdXNlcnNwYWNlCisJICogcmFjZXMgcHdyaXRlIHdpdGggYW55IG90aGVyIG9wZXJhdGlvbjsg Y29ycnVwdGlvbiB3aWxsIGVuc3VlIC0KKwkgKiB0aGF0IGlzIHVzZXJzcGFjZSdzIHByZXJvZ2F0 aXZlIQorCSAqLworCisJcmVtYWluID0gYXJnLT5zaXplOworCW9mZnNldCA9IGFyZy0+b2Zmc2V0 OworCXBnID0gb2Zmc2V0X2luX3BhZ2Uob2Zmc2V0KTsKKworCWRvIHsKKwkJdW5zaWduZWQgaW50 IGxlbiwgdW53cml0dGVuOworCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwkJdm9pZCAqZGF0YSwgKnZh ZGRyOworCQlpbnQgZXJyOworCQljaGFyIGM7CisKKwkJbGVuID0gUEFHRV9TSVpFIC0gcGc7CisJ CWlmIChsZW4gPiByZW1haW4pCisJCQlsZW4gPSByZW1haW47CisKKwkJLyogUHJlZmF1bHQgdGhl IHVzZXIgcGFnZSB0byByZWR1Y2UgcG90ZW50aWFsIHJlY3Vyc2lvbiAqLworCQllcnIgPSBfX2dl dF91c2VyKGMsIHVzZXJfZGF0YSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCWVy ciA9IF9fZ2V0X3VzZXIoYywgdXNlcl9kYXRhICsgbGVuIC0gMSk7CisJCWlmIChlcnIpCisJCQly ZXR1cm4gZXJyOworCisJCWVyciA9IHBhZ2VjYWNoZV93cml0ZV9iZWdpbihvYmotPmJhc2UuZmls cCwgbWFwcGluZywKKwkJCQkJICAgIG9mZnNldCwgbGVuLCAwLAorCQkJCQkgICAgJnBhZ2UsICZk YXRhKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCisJCXZhZGRyID0ga21hcF9h dG9taWMocGFnZSk7CisJCXVud3JpdHRlbiA9IF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWModmFk ZHIgKyBwZywKKwkJCQkJCSAgICAgIHVzZXJfZGF0YSwKKwkJCQkJCSAgICAgIGxlbik7CisJCWt1 bm1hcF9hdG9taWModmFkZHIpOworCisJCWVyciA9IHBhZ2VjYWNoZV93cml0ZV9lbmQob2JqLT5i YXNlLmZpbHAsIG1hcHBpbmcsCisJCQkJCSAgb2Zmc2V0LCBsZW4sIGxlbiAtIHVud3JpdHRlbiwK KwkJCQkJICBwYWdlLCBkYXRhKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCisJ CS8qIFdlIGRvbid0IGhhbmRsZSAtRUZBVUxULCBsZWF2ZSBpdCB0byB0aGUgY2FsbGVyIHRvIGNo ZWNrICovCisJCWlmICh1bndyaXR0ZW4pCisJCQlyZXR1cm4gLUVOT0RFVjsKKworCQlyZW1haW4g LT0gbGVuOworCQl1c2VyX2RhdGEgKz0gbGVuOworCQlvZmZzZXQgKz0gbGVuOworCQlwZyA9IDA7 CisJfSB3aGlsZSAocmVtYWluKTsKKworCXJldHVybiAwOworfQorCitjb25zdCBzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdF9vcHMgaTkxNV9nZW1fc2htZW1fb3BzID0geworCS5mbGFncyA9IEk5 MTVfR0VNX09CSkVDVF9IQVNfU1RSVUNUX1BBR0UgfAorCQkgSTkxNV9HRU1fT0JKRUNUX0lTX1NI UklOS0FCTEUsCisKKwkuZ2V0X3BhZ2VzID0gc2htZW1fZ2V0X3BhZ2VzLAorCS5wdXRfcGFnZXMg PSBzaG1lbV9wdXRfcGFnZXMsCisKKwkucHdyaXRlID0gc2htZW1fcHdyaXRlLAorfTsKKworc3Rh dGljIGludCBjcmVhdGVfc2htZW0oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCisJCQlz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKKwkJCXNpemVfdCBzaXplKQoreworCXVuc2lnbmVk IGxvbmcgZmxhZ3MgPSBWTV9OT1JFU0VSVkU7CisJc3RydWN0IGZpbGUgKmZpbHA7CisKKwlkcm1f Z2VtX3ByaXZhdGVfb2JqZWN0X2luaXQoJmk5MTUtPmRybSwgb2JqLCBzaXplKTsKKworCWlmIChp OTE1LT5tbS5nZW1mcykKKwkJZmlscCA9IHNobWVtX2ZpbGVfc2V0dXBfd2l0aF9tbnQoaTkxNS0+ bW0uZ2VtZnMsICJpOTE1Iiwgc2l6ZSwKKwkJCQkJCSBmbGFncyk7CisJZWxzZQorCQlmaWxwID0g c2htZW1fZmlsZV9zZXR1cCgiaTkxNSIsIHNpemUsIGZsYWdzKTsKKwlpZiAoSVNfRVJSKGZpbHAp KQorCQlyZXR1cm4gUFRSX0VSUihmaWxwKTsKKworCW9iai0+ZmlscCA9IGZpbHA7CisJcmV0dXJu IDA7Cit9CisKK3N0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICoKK2k5MTVfZ2VtX29iamVjdF9j cmVhdGVfc2htZW0oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIHU2NCBzaXplKQorewor CXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2Ug Km1hcHBpbmc7CisJdW5zaWduZWQgaW50IGNhY2hlX2xldmVsOworCWdmcF90IG1hc2s7CisJaW50 IHJldDsKKworCS8qIFRoZXJlIGlzIGEgcHJldmFsZW5jZSBvZiB0aGUgYXNzdW1wdGlvbiB0aGF0 IHdlIGZpdCB0aGUgb2JqZWN0J3MKKwkgKiBwYWdlIGNvdW50IGluc2lkZSBhIDMyYml0IF9zaWdu ZWRfIHZhcmlhYmxlLiBMZXQncyBkb2N1bWVudCB0aGlzIGFuZAorCSAqIGNhdGNoIGlmIHdlIGV2 ZXIgbmVlZCB0byBmaXggaXQuIEluIHRoZSBtZWFudGltZSwgaWYgeW91IGRvIHNwb3QKKwkgKiBz dWNoIGEgbG9jYWwgdmFyaWFibGUsIHBsZWFzZSBjb25zaWRlciBmaXhpbmchCisJICovCisJaWYg KHNpemUgPj4gUEFHRV9TSElGVCA+IElOVF9NQVgpCisJCXJldHVybiBFUlJfUFRSKC1FMkJJRyk7 CisKKwlpZiAob3ZlcmZsb3dzX3R5cGUoc2l6ZSwgb2JqLT5iYXNlLnNpemUpKQorCQlyZXR1cm4g RVJSX1BUUigtRTJCSUcpOworCisJb2JqID0gaTkxNV9nZW1fb2JqZWN0X2FsbG9jKCk7CisJaWYg KCFvYmopCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJcmV0ID0gY3JlYXRlX3NobWVt KGk5MTUsICZvYmotPmJhc2UsIHNpemUpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbDsKKworCW1h c2sgPSBHRlBfSElHSFVTRVIgfCBfX0dGUF9SRUNMQUlNQUJMRTsKKwlpZiAoSVNfSTk2NUdNKGk5 MTUpIHx8IElTX0k5NjVHKGk5MTUpKSB7CisJCS8qIDk2NWdtIGNhbm5vdCByZWxvY2F0ZSBvYmpl Y3RzIGFib3ZlIDRHaUIuICovCisJCW1hc2sgJj0gfl9fR0ZQX0hJR0hNRU07CisJCW1hc2sgfD0g X19HRlBfRE1BMzI7CisJfQorCisJbWFwcGluZyA9IG9iai0+YmFzZS5maWxwLT5mX21hcHBpbmc7 CisJbWFwcGluZ19zZXRfZ2ZwX21hc2sobWFwcGluZywgbWFzayk7CisJR0VNX0JVR19PTighKG1h cHBpbmdfZ2ZwX21hc2sobWFwcGluZykgJiBfX0dGUF9SRUNMQUlNKSk7CisKKwlpOTE1X2dlbV9v YmplY3RfaW5pdChvYmosICZpOTE1X2dlbV9zaG1lbV9vcHMpOworCisJb2JqLT53cml0ZV9kb21h aW4gPSBJOTE1X0dFTV9ET01BSU5fQ1BVOworCW9iai0+cmVhZF9kb21haW5zID0gSTkxNV9HRU1f RE9NQUlOX0NQVTsKKworCWlmIChIQVNfTExDKGk5MTUpKQorCQkvKiBPbiBzb21lIGRldmljZXMs IHdlIGNhbiBoYXZlIHRoZSBHUFUgdXNlIHRoZSBMTEMgKHRoZSBDUFUKKwkJICogY2FjaGUpIGZv ciBhYm91dCBhIDEwJSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudAorCQkgKiBjb21wYXJlZCB0byB1 bmNhY2hlZC4gIEdyYXBoaWNzIHJlcXVlc3RzIG90aGVyIHRoYW4KKwkJICogZGlzcGxheSBzY2Fu b3V0IGFyZSBjb2hlcmVudCB3aXRoIHRoZSBDUFUgaW4KKwkJICogYWNjZXNzaW5nIHRoaXMgY2Fj aGUuICBUaGlzIG1lYW5zIGluIHRoaXMgbW9kZSB3ZQorCQkgKiBkb24ndCBuZWVkIHRvIGNsZmx1 c2ggb24gdGhlIENQVSBzaWRlLCBhbmQgb24gdGhlCisJCSAqIEdQVSBzaWRlIHdlIG9ubHkgbmVl ZCB0byBmbHVzaCBpbnRlcm5hbCBjYWNoZXMgdG8KKwkJICogZ2V0IGRhdGEgdmlzaWJsZSB0byB0 aGUgQ1BVLgorCQkgKgorCQkgKiBIb3dldmVyLCB3ZSBtYWludGFpbiB0aGUgZGlzcGxheSBwbGFu ZXMgYXMgVUMsIGFuZCBzbworCQkgKiBuZWVkIHRvIHJlYmluZCB3aGVuIGZpcnN0IHVzZWQgYXMg c3VjaC4KKwkJICovCisJCWNhY2hlX2xldmVsID0gSTkxNV9DQUNIRV9MTEM7CisJZWxzZQorCQlj YWNoZV9sZXZlbCA9IEk5MTVfQ0FDSEVfTk9ORTsKKworCWk5MTVfZ2VtX29iamVjdF9zZXRfY2Fj aGVfY29oZXJlbmN5KG9iaiwgY2FjaGVfbGV2ZWwpOworCisJdHJhY2VfaTkxNV9nZW1fb2JqZWN0 X2NyZWF0ZShvYmopOworCisJcmV0dXJuIG9iajsKKworZmFpbDoKKwlpOTE1X2dlbV9vYmplY3Rf ZnJlZShvYmopOworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CisKKy8qIEFsbG9jYXRlIGEgbmV3 IEdFTSBvYmplY3QgYW5kIGZpbGwgaXQgd2l0aCB0aGUgc3VwcGxpZWQgZGF0YSAqLworc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKgoraTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9zaG1lbV9mcm9t X2RhdGEoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCSAgICAgICBjb25z dCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqOworCXN0cnVjdCBmaWxlICpmaWxlOworCXNpemVfdCBvZmZzZXQ7CisJaW50IGVycjsK KworCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfc2htZW0oZGV2X3ByaXYsIHJvdW5kX3Vw KHNpemUsIFBBR0VfU0laRSkpOworCWlmIChJU19FUlIob2JqKSkKKwkJcmV0dXJuIG9iajsKKwor CUdFTV9CVUdfT04ob2JqLT53cml0ZV9kb21haW4gIT0gSTkxNV9HRU1fRE9NQUlOX0NQVSk7CisK KwlmaWxlID0gb2JqLT5iYXNlLmZpbHA7CisJb2Zmc2V0ID0gMDsKKwlkbyB7CisJCXVuc2lnbmVk IGludCBsZW4gPSBtaW5fdCh0eXBlb2Yoc2l6ZSksIHNpemUsIFBBR0VfU0laRSk7CisJCXN0cnVj dCBwYWdlICpwYWdlOworCQl2b2lkICpwZ2RhdGEsICp2YWRkcjsKKworCQllcnIgPSBwYWdlY2Fj aGVfd3JpdGVfYmVnaW4oZmlsZSwgZmlsZS0+Zl9tYXBwaW5nLAorCQkJCQkgICAgb2Zmc2V0LCBs ZW4sIDAsCisJCQkJCSAgICAmcGFnZSwgJnBnZGF0YSk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290 byBmYWlsOworCisJCXZhZGRyID0ga21hcChwYWdlKTsKKwkJbWVtY3B5KHZhZGRyLCBkYXRhLCBs ZW4pOworCQlrdW5tYXAocGFnZSk7CisKKwkJZXJyID0gcGFnZWNhY2hlX3dyaXRlX2VuZChmaWxl LCBmaWxlLT5mX21hcHBpbmcsCisJCQkJCSAgb2Zmc2V0LCBsZW4sIGxlbiwKKwkJCQkJICBwYWdl LCBwZ2RhdGEpOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gZmFpbDsKKworCQlzaXplIC09IGxl bjsKKwkJZGF0YSArPSBsZW47CisJCW9mZnNldCArPSBsZW47CisJfSB3aGlsZSAoc2l6ZSk7CisK KwlyZXR1cm4gb2JqOworCitmYWlsOgorCWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsKKwlyZXR1 cm4gRVJSX1BUUihlcnIpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qv aW50ZWxfbHJjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9scmMuYwppbmRleCBk NzkzZDk3NjQwMmQuLmE4MzNiNmMxNDUxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfbHJjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJj LmMKQEAgLTE5MzgsNyArMTkzOCw3IEBAIHN0YXRpYyBpbnQgbHJjX3NldHVwX3dhX2N0eChzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAJc3RydWN0IGk5MTVfdm1hICp2bWE7CiAJaW50 IGVycjsKIAotCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGUoZW5naW5lLT5pOTE1LCBDVFhf V0FfQkJfT0JKX1NJWkUpOworCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfc2htZW0oZW5n aW5lLT5pOTE1LCBDVFhfV0FfQkJfT0JKX1NJWkUpOwogCWlmIChJU19FUlIob2JqKSkKIAkJcmV0 dXJuIFBUUl9FUlIob2JqKTsKIApAQCAtMzAzNSw3ICszMDM1LDcgQEAgc3RhdGljIGludCBleGVj bGlzdHNfY29udGV4dF9kZWZlcnJlZF9hbGxvYyhzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UsCiAJ ICovCiAJY29udGV4dF9zaXplICs9IExSQ19IRUFERVJfUEFHRVMgKiBQQUdFX1NJWkU7CiAKLQlj dHhfb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZShlbmdpbmUtPmk5MTUsIGNvbnRleHRfc2l6 ZSk7CisJY3R4X29iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfc2htZW0oZW5naW5lLT5pOTE1 LCBjb250ZXh0X3NpemUpOwogCWlmIChJU19FUlIoY3R4X29iaikpCiAJCXJldHVybiBQVFJfRVJS KGN0eF9vYmopOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9y aW5nYnVmZmVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yaW5nYnVmZmVyLmMK aW5kZXggMmVkZWVkYjc0OGVkLi4wYjUwM2I4MmRiMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L2ludGVsX3JpbmdidWZmZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9pbnRlbF9yaW5nYnVmZmVyLmMKQEAgLTE0MTAsNyArMTQxMCw3IEBAIGFsbG9jX2NvbnRl eHRfdm1hKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAlzdHJ1Y3QgaTkxNV92bWEg KnZtYTsKIAlpbnQgZXJyOwogCi0Jb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZShpOTE1LCBl bmdpbmUtPmNvbnRleHRfc2l6ZSk7CisJb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9zaG1l bShpOTE1LCBlbmdpbmUtPmNvbnRleHRfc2l6ZSk7CiAJaWYgKElTX0VSUihvYmopKQogCQlyZXR1 cm4gRVJSX0NBU1Qob2JqKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0 L2NtZF9wYXJzZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9jbWRfcGFyc2VyLmMKaW5k ZXggYWIwMDJjZmQzY2FiLi5mZTY2Mjg1ZjAyMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d2dC9jbWRfcGFyc2VyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2Nt ZF9wYXJzZXIuYwpAQCAtMTcyMSw3ICsxNzIxLDcgQEAgc3RhdGljIGludCBwZXJmb3JtX2JiX3No YWRvdyhzdHJ1Y3QgcGFyc2VyX2V4ZWNfc3RhdGUgKnMpCiAJaW50IHJldCA9IDA7CiAJc3RydWN0 IGludGVsX3ZncHVfbW0gKm1tID0gKHMtPmJ1Zl9hZGRyX3R5cGUgPT0gR1RUX0JVRkZFUikgPwog CQlzLT52Z3B1LT5ndHQuZ2d0dF9tbSA6IHMtPndvcmtsb2FkLT5zaGFkb3dfbW07Ci0JdW5zaWdu ZWQgbG9uZyBnbWFfc3RhcnRfb2Zmc2V0ID0gMDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X29mZnNl dCA9IDA7CiAKIAkvKiBnZXQgdGhlIHN0YXJ0IGdtIGFkZHJlc3Mgb2YgdGhlIGJhdGNoIGJ1ZmZl ciAqLwogCWdtYSA9IGdldF9nbWFfYmJfZnJvbV9jbWQocywgMSk7CkBAIC0xNzM4LDcgKzE3Mzgs NyBAQCBzdGF0aWMgaW50IHBlcmZvcm1fYmJfc2hhZG93KHN0cnVjdCBwYXJzZXJfZXhlY19zdGF0 ZSAqcykKIAogCWJiLT5wcGd0dCA9IChzLT5idWZfYWRkcl90eXBlID09IEdUVF9CVUZGRVIpID8g ZmFsc2UgOiB0cnVlOwogCi0JLyogdGhlIGdtYV9zdGFydF9vZmZzZXQgc3RvcmVzIHRoZSBiYXRj aCBidWZmZXIncyBzdGFydCBnbWEncworCS8qIHRoZSBzdGFydF9vZmZzZXQgc3RvcmVzIHRoZSBi YXRjaCBidWZmZXIncyBzdGFydCBnbWEncwogCSAqIG9mZnNldCByZWxhdGl2ZSB0byBwYWdlIGJv dW5kYXJ5LiBzbyBmb3Igbm9uLXByaXZpbGVnZWQgYmF0Y2gKIAkgKiBidWZmZXIsIHRoZSBzaGFk b3dlZCBnZW0gb2JqZWN0IGhvbGRzIGV4YWN0bHkgdGhlIHNhbWUgcGFnZQogCSAqIGxheW91dCBh cyBvcmlnaW5hbCBnZW0gb2JqZWN0LiBUaGlzIGlzIGZvciB0aGUgY29udmllbmNlIG9mCkBAIC0x NzUwLDEwICsxNzUwLDExIEBAIHN0YXRpYyBpbnQgcGVyZm9ybV9iYl9zaGFkb3coc3RydWN0IHBh cnNlcl9leGVjX3N0YXRlICpzKQogCSAqIHRoYXQgb2Ygc2hhZG93ZWQgcGFnZS4KIAkgKi8KIAlp ZiAoYmItPnBwZ3R0KQotCQlnbWFfc3RhcnRfb2Zmc2V0ID0gZ21hICYgfkk5MTVfR1RUX1BBR0Vf TUFTSzsKKwkJc3RhcnRfb2Zmc2V0ID0gZ21hICYgfkk5MTVfR1RUX1BBR0VfTUFTSzsKIAotCWJi LT5vYmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlKHMtPnZncHUtPmd2dC0+ZGV2X3ByaXYsCi0J CQkgcm91bmR1cChiYl9zaXplICsgZ21hX3N0YXJ0X29mZnNldCwgUEFHRV9TSVpFKSk7CisJYmIt Pm9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfc2htZW0ocy0+dmdwdS0+Z3Z0LT5kZXZfcHJp diwKKwkJCQkJICAgICAgIHJvdW5kX3VwKGJiX3NpemUgKyBzdGFydF9vZmZzZXQsCisJCQkJCQkJ UEFHRV9TSVpFKSk7CiAJaWYgKElTX0VSUihiYi0+b2JqKSkgewogCQlyZXQgPSBQVFJfRVJSKGJi LT5vYmopOwogCQlnb3RvIGVycl9mcmVlX2JiOwpAQCAtMTc3Niw3ICsxNzc3LDcgQEAgc3RhdGlj IGludCBwZXJmb3JtX2JiX3NoYWRvdyhzdHJ1Y3QgcGFyc2VyX2V4ZWNfc3RhdGUgKnMpCiAKIAly ZXQgPSBjb3B5X2dtYV90b19odmEocy0+dmdwdSwgbW0sCiAJCQkgICAgICBnbWEsIGdtYSArIGJi X3NpemUsCi0JCQkgICAgICBiYi0+dmEgKyBnbWFfc3RhcnRfb2Zmc2V0KTsKKwkJCSAgICAgIGJi LT52YSArIHN0YXJ0X29mZnNldCk7CiAJaWYgKHJldCA8IDApIHsKIAkJZ3Z0X3ZncHVfZXJyKCJm YWlsIHRvIGNvcHkgZ3Vlc3QgcmluZyBidWZmZXJcbiIpOwogCQlyZXQgPSAtRUZBVUxUOwpAQCAt MTgwMiw3ICsxODAzLDcgQEAgc3RhdGljIGludCBwZXJmb3JtX2JiX3NoYWRvdyhzdHJ1Y3QgcGFy c2VyX2V4ZWNfc3RhdGUgKnMpCiAJICogYnVmZmVyJ3MgZ21hIGluIHBhaXIuIEFmdGVyIGFsbCwg d2UgZG9uJ3Qgd2FudCB0byBwaW4gdGhlIHNoYWRvdwogCSAqIGJ1ZmZlciBoZXJlICh0b28gZWFy bHkpLgogCSAqLwotCXMtPmlwX3ZhID0gYmItPnZhICsgZ21hX3N0YXJ0X29mZnNldDsKKwlzLT5p cF92YSA9IGJiLT52YSArIHN0YXJ0X29mZnNldDsKIAlzLT5pcF9nbWEgPSBnbWE7CiAJcmV0dXJu IDA7CiBlcnJfdW5tYXA6CkBAIC0yODI1LDkgKzI4MjYsOSBAQCBzdGF0aWMgaW50IHNoYWRvd19p bmRpcmVjdF9jdHgoc3RydWN0IGludGVsX3NoYWRvd193YV9jdHggKndhX2N0eCkKIAlpbnQgcmV0 ID0gMDsKIAl2b2lkICptYXA7CiAKLQlvYmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlKHdvcmts b2FkLT52Z3B1LT5ndnQtPmRldl9wcml2LAotCQkJCSAgICAgcm91bmR1cChjdHhfc2l6ZSArIENB Q0hFTElORV9CWVRFUywKLQkJCQkJICAgICBQQUdFX1NJWkUpKTsKKwlvYmogPSBpOTE1X2dlbV9v YmplY3RfY3JlYXRlX3NobWVtKHdvcmtsb2FkLT52Z3B1LT5ndnQtPmRldl9wcml2LAorCQkJCQkg ICByb3VuZHVwKGN0eF9zaXplICsgQ0FDSEVMSU5FX0JZVEVTLAorCQkJCQkJICAgUEFHRV9TSVpF KSk7CiAJaWYgKElTX0VSUihvYmopKQogCQlyZXR1cm4gUFRSX0VSUihvYmopOwogCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kcnYuaAppbmRleCA4NmNhNTBlYTliNWQuLjAwNzMzNGU4OTJhMyAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5oCkBAIC0yODMzLDE2ICsyODMzLDYgQEAgdm9pZCBpOTE1X2dlbV9sb2Fk X2luaXRfZmVuY2VzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CiBpbnQgaTkx NV9nZW1fZnJlZXplKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CiBpbnQgaTkx NV9nZW1fZnJlZXplX2xhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKIAot dm9pZCBpOTE1X2dlbV9vYmplY3RfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2Jq LAotCQkJIGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0X29wcyAqb3BzKTsKLXN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICoKLWk5MTVfZ2VtX29iamVjdF9jcmVhdGUoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1NjQgc2l6ZSk7Ci1zdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqCi1pOTE1X2dlbV9vYmplY3RfY3JlYXRlX2Zyb21fZGF0YShzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkJIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXpl KTsKLXZvaWQgaTkxNV9nZW1fY2xvc2Vfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2Vt LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOwotdm9pZCBpOTE1X2dlbV9mcmVlX29iamVjdChzdHJ1 Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBpOTE1X2dlbV9k cmFpbl9mcmVlZF9vYmplY3RzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQogewogCWlm ICghYXRvbWljX3JlYWQoJmk5MTUtPm1tLmZyZWVfY291bnQpKQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt LmMKaW5kZXggNzhjYTY5ZGNmYWE2Li40YzVmYmEwYzdiZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW0uYwpAQCAtNTcsMTkgKzU3LDYgQEAKICNpbmNsdWRlICJpbnRlbF9mcm9udGJ1ZmZlci5oIgog I2luY2x1ZGUgImludGVsX3BtLmgiCiAKLXN0YXRpYyB2b2lkIGk5MTVfZ2VtX2ZsdXNoX2ZyZWVf b2JqZWN0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7Ci0KLXN0YXRpYyBib29sIGNw dV93cml0ZV9uZWVkc19jbGZsdXNoKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCi17 Ci0JaWYgKG9iai0+Y2FjaGVfZGlydHkpCi0JCXJldHVybiBmYWxzZTsKLQotCWlmICghKG9iai0+ Y2FjaGVfY29oZXJlbnQgJiBJOTE1X0JPX0NBQ0hFX0NPSEVSRU5UX0ZPUl9XUklURSkpCi0JCXJl dHVybiB0cnVlOwotCi0JcmV0dXJuIG9iai0+cGluX2dsb2JhbDsgLyogY3VycmVudGx5IGluIHVz ZSBieSBIVywga2VlcCBmbHVzaGVkICovCi19Ci0KIHN0YXRpYyBpbnQKIGluc2VydF9tYXBwYWJs ZV9ub2RlKHN0cnVjdCBpOTE1X2dndHQgKmdndHQsCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgZHJtX21tX25vZGUgKm5vZGUsIHUzMiBzaXplKQpAQCAtODcsMjUgKzc0LDYgQEAgcmVtb3Zl X21hcHBhYmxlX25vZGUoc3RydWN0IGRybV9tbV9ub2RlICpub2RlKQogCWRybV9tbV9yZW1vdmVf bm9kZShub2RlKTsKIH0KIAotLyogc29tZSBib29ra2VlcGluZyAqLwotc3RhdGljIHZvaWQgaTkx NV9nZW1faW5mb19hZGRfb2JqKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJ CQkgIHU2NCBzaXplKQotewotCXNwaW5fbG9jaygmZGV2X3ByaXYtPm1tLm9iamVjdF9zdGF0X2xv Y2spOwotCWRldl9wcml2LT5tbS5vYmplY3RfY291bnQrKzsKLQlkZXZfcHJpdi0+bW0ub2JqZWN0 X21lbW9yeSArPSBzaXplOwotCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+bW0ub2JqZWN0X3N0YXRf bG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkIGk5MTVfZ2VtX2luZm9fcmVtb3ZlX29iaihzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkJICAgICB1NjQgc2l6ZSkKLXsKLQlzcGlu X2xvY2soJmRldl9wcml2LT5tbS5vYmplY3Rfc3RhdF9sb2NrKTsKLQlkZXZfcHJpdi0+bW0ub2Jq ZWN0X2NvdW50LS07Ci0JZGV2X3ByaXYtPm1tLm9iamVjdF9tZW1vcnkgLT0gc2l6ZTsKLQlzcGlu X3VubG9jaygmZGV2X3ByaXYtPm1tLm9iamVjdF9zdGF0X2xvY2spOwotfQotCiBpbnQKIGk5MTVf Z2VtX2dldF9hcGVydHVyZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRh LAogCQkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKQEAgLTIwNiwzMiArMTc0LDYgQEAgc3Rh dGljIGludCBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzX3BoeXMoc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iaikKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCBfX3N0YXJ0X2Nw dV93cml0ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQotewotCW9iai0+cmVhZF9k b21haW5zID0gSTkxNV9HRU1fRE9NQUlOX0NQVTsKLQlvYmotPndyaXRlX2RvbWFpbiA9IEk5MTVf R0VNX0RPTUFJTl9DUFU7Ci0JaWYgKGNwdV93cml0ZV9uZWVkc19jbGZsdXNoKG9iaikpCi0JCW9i ai0+Y2FjaGVfZGlydHkgPSB0cnVlOwotfQotCi12b2lkCi1fX2k5MTVfZ2VtX29iamVjdF9yZWxl YXNlX3NobWVtKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCi0JCQkJc3RydWN0IHNn X3RhYmxlICpwYWdlcywKLQkJCQlib29sIG5lZWRzX2NsZmx1c2gpCi17Ci0JR0VNX0JVR19PTihv YmotPm1tLm1hZHYgPT0gX19JOTE1X01BRFZfUFVSR0VEKTsKLQotCWlmIChvYmotPm1tLm1hZHYg PT0gSTkxNV9NQURWX0RPTlRORUVEKQotCQlvYmotPm1tLmRpcnR5ID0gZmFsc2U7Ci0KLQlpZiAo bmVlZHNfY2xmbHVzaCAmJgotCSAgICAob2JqLT5yZWFkX2RvbWFpbnMgJiBJOTE1X0dFTV9ET01B SU5fQ1BVKSA9PSAwICYmCi0JICAgICEob2JqLT5jYWNoZV9jb2hlcmVudCAmIEk5MTVfQk9fQ0FD SEVfQ09IRVJFTlRfRk9SX1JFQUQpKQotCQlkcm1fY2xmbHVzaF9zZyhwYWdlcyk7Ci0KLQlfX3N0 YXJ0X2NwdV93cml0ZShvYmopOwotfQotCiBzdGF0aWMgdm9pZAogaTkxNV9nZW1fb2JqZWN0X3B1 dF9wYWdlc19waHlzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCiAJCQkgICAgICAg c3RydWN0IHNnX3RhYmxlICpwYWdlcykKQEAgLTI4Myw4ICsyMjUsNiBAQCBzdGF0aWMgY29uc3Qg c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Rfb3BzIGk5MTVfZ2VtX3BoeXNfb3BzID0gewogCS5y ZWxlYXNlID0gaTkxNV9nZW1fb2JqZWN0X3JlbGVhc2VfcGh5cywKIH07CiAKLXN0YXRpYyBjb25z dCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdF9vcHMgaTkxNV9nZW1fb2JqZWN0X29wczsKLQog aW50IGk5MTVfZ2VtX29iamVjdF91bmJpbmQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aikKIHsKIAlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKQEAgLTU0MSw3ICs0ODEsNyBAQCBpOTE1X2dl bV9jcmVhdGUoc3RydWN0IGRybV9maWxlICpmaWxlLAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8q IEFsbG9jYXRlIHRoZSBuZXcgb2JqZWN0ICovCi0Jb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0 ZShkZXZfcHJpdiwgc2l6ZSk7CisJb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9zaG1lbShk ZXZfcHJpdiwgc2l6ZSk7CiAJaWYgKElTX0VSUihvYmopKQogCQlyZXR1cm4gUFRSX0VSUihvYmop OwogCkBAIC0yMDY1LDUyICsyMDA1LDYgQEAgdm9pZCBfX2k5MTVfZ2VtX29iamVjdF90cnVuY2F0 ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQogCW9iai0+bW0ucGFnZXMgPSBFUlJf UFRSKC1FRkFVTFQpOwogfQogCi0vKgotICogTW92ZSBwYWdlcyB0byBhcHByb3ByaWF0ZSBscnUg YW5kIHJlbGVhc2UgdGhlIHBhZ2V2ZWMsIGRlY3JlbWVudGluZyB0aGUKLSAqIHJlZiBjb3VudCBv ZiB0aG9zZSBwYWdlcy4KLSAqLwotc3RhdGljIHZvaWQgY2hlY2tfcmVsZWFzZV9wYWdldmVjKHN0 cnVjdCBwYWdldmVjICpwdmVjKQotewotCWNoZWNrX21vdmVfdW5ldmljdGFibGVfcGFnZXMocHZl Yyk7Ci0JX19wYWdldmVjX3JlbGVhc2UocHZlYyk7Ci0JY29uZF9yZXNjaGVkKCk7Ci19Ci0KLXN0 YXRpYyB2b2lkCi1pOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzX2d0dChzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqLAotCQkJICAgICAgc3RydWN0IHNnX3RhYmxlICpwYWdlcykKLXsKLQlz dHJ1Y3Qgc2d0X2l0ZXIgc2d0X2l0ZXI7Ci0Jc3RydWN0IHBhZ2V2ZWMgcHZlYzsKLQlzdHJ1Y3Qg cGFnZSAqcGFnZTsKLQotCV9faTkxNV9nZW1fb2JqZWN0X3JlbGVhc2Vfc2htZW0ob2JqLCBwYWdl cywgdHJ1ZSk7Ci0JaTkxNV9nZW1fZ3R0X2ZpbmlzaF9wYWdlcyhvYmosIHBhZ2VzKTsKLQotCWlm IChpOTE1X2dlbV9vYmplY3RfbmVlZHNfYml0MTdfc3dpenpsZShvYmopKQotCQlpOTE1X2dlbV9v YmplY3Rfc2F2ZV9iaXRfMTdfc3dpenpsZShvYmosIHBhZ2VzKTsKLQotCW1hcHBpbmdfY2xlYXJf dW5ldmljdGFibGUoZmlsZV9pbm9kZShvYmotPmJhc2UuZmlscCktPmlfbWFwcGluZyk7Ci0KLQlw YWdldmVjX2luaXQoJnB2ZWMpOwotCWZvcl9lYWNoX3NndF9wYWdlKHBhZ2UsIHNndF9pdGVyLCBw YWdlcykgewotCQlpZiAob2JqLT5tbS5kaXJ0eSkKLQkJCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwot Ci0JCWlmIChvYmotPm1tLm1hZHYgPT0gSTkxNV9NQURWX1dJTExORUVEKQotCQkJbWFya19wYWdl X2FjY2Vzc2VkKHBhZ2UpOwotCi0JCWlmICghcGFnZXZlY19hZGQoJnB2ZWMsIHBhZ2UpKQotCQkJ Y2hlY2tfcmVsZWFzZV9wYWdldmVjKCZwdmVjKTsKLQl9Ci0JaWYgKHBhZ2V2ZWNfY291bnQoJnB2 ZWMpKQotCQljaGVja19yZWxlYXNlX3BhZ2V2ZWMoJnB2ZWMpOwotCW9iai0+bW0uZGlydHkgPSBm YWxzZTsKLQotCXNnX2ZyZWVfdGFibGUocGFnZXMpOwotCWtmcmVlKHBhZ2VzKTsKLX0KLQogc3Rh dGljIHZvaWQgX19pOTE1X2dlbV9vYmplY3RfcmVzZXRfcGFnZV9pdGVyKHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmopCiB7CiAJc3RydWN0IHJhZGl4X3RyZWVfaXRlciBpdGVyOwpAQCAt MjIyNiwxOTYgKzIxMjAsNiBAQCBib29sIGk5MTVfc2dfdHJpbShzdHJ1Y3Qgc2dfdGFibGUgKm9y aWdfc3QpCiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbnQgaTkxNV9nZW1fb2JqZWN0X2dl dF9wYWdlc19ndHQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKLXsKLQlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KG9iai0+YmFzZS5kZXYpOwotCWNv bnN0IHVuc2lnbmVkIGxvbmcgcGFnZV9jb3VudCA9IG9iai0+YmFzZS5zaXplIC8gUEFHRV9TSVpF OwotCXVuc2lnbmVkIGxvbmcgaTsKLQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKLQlz dHJ1Y3Qgc2dfdGFibGUgKnN0OwotCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7Ci0Jc3RydWN0IHNn dF9pdGVyIHNndF9pdGVyOwotCXN0cnVjdCBwYWdlICpwYWdlOwotCXVuc2lnbmVkIGxvbmcgbGFz dF9wZm4gPSAwOwkvKiBzdXBwcmVzcyBnY2Mgd2FybmluZyAqLwotCXVuc2lnbmVkIGludCBtYXhf c2VnbWVudCA9IGk5MTVfc2dfc2VnbWVudF9zaXplKCk7Ci0JdW5zaWduZWQgaW50IHNnX3BhZ2Vf c2l6ZXM7Ci0Jc3RydWN0IHBhZ2V2ZWMgcHZlYzsKLQlnZnBfdCBub3JlY2xhaW07Ci0JaW50IHJl dDsKLQotCS8qCi0JICogQXNzZXJ0IHRoYXQgdGhlIG9iamVjdCBpcyBub3QgY3VycmVudGx5IGlu IGFueSBHUFUgZG9tYWluLiBBcyBpdAotCSAqIHdhc24ndCBpbiB0aGUgR1RULCB0aGVyZSBzaG91 bGRuJ3QgYmUgYW55IHdheSBpdCBjb3VsZCBoYXZlIGJlZW4gaW4KLQkgKiBhIEdQVSBjYWNoZQot CSAqLwotCUdFTV9CVUdfT04ob2JqLT5yZWFkX2RvbWFpbnMgJiBJOTE1X0dFTV9HUFVfRE9NQUlO Uyk7Ci0JR0VNX0JVR19PTihvYmotPndyaXRlX2RvbWFpbiAmIEk5MTVfR0VNX0dQVV9ET01BSU5T KTsKLQotCS8qCi0JICogSWYgdGhlcmUncyBubyBjaGFuY2Ugb2YgYWxsb2NhdGluZyBlbm91Z2gg cGFnZXMgZm9yIHRoZSB3aG9sZQotCSAqIG9iamVjdCwgYmFpbCBlYXJseS4KLQkgKi8KLQlpZiAo cGFnZV9jb3VudCA+IHRvdGFscmFtX3BhZ2VzKCkpCi0JCXJldHVybiAtRU5PTUVNOwotCi0Jc3Qg PSBrbWFsbG9jKHNpemVvZigqc3QpLCBHRlBfS0VSTkVMKTsKLQlpZiAoc3QgPT0gTlVMTCkKLQkJ cmV0dXJuIC1FTk9NRU07Ci0KLXJlYnVpbGRfc3Q6Ci0JaWYgKHNnX2FsbG9jX3RhYmxlKHN0LCBw YWdlX2NvdW50LCBHRlBfS0VSTkVMKSkgewotCQlrZnJlZShzdCk7Ci0JCXJldHVybiAtRU5PTUVN OwotCX0KLQotCS8qCi0JICogR2V0IHRoZSBsaXN0IG9mIHBhZ2VzIG91dCBvZiBvdXIgc3RydWN0 IGZpbGUuICBUaGV5J2xsIGJlIHBpbm5lZAotCSAqIGF0IHRoaXMgcG9pbnQgdW50aWwgd2UgcmVs ZWFzZSB0aGVtLgotCSAqCi0JICogRmFpbCBzaWxlbnRseSB3aXRob3V0IHN0YXJ0aW5nIHRoZSBz aHJpbmtlcgotCSAqLwotCW1hcHBpbmcgPSBvYmotPmJhc2UuZmlscC0+Zl9tYXBwaW5nOwotCW1h cHBpbmdfc2V0X3VuZXZpY3RhYmxlKG1hcHBpbmcpOwotCW5vcmVjbGFpbSA9IG1hcHBpbmdfZ2Zw X2NvbnN0cmFpbnQobWFwcGluZywgfl9fR0ZQX1JFQ0xBSU0pOwotCW5vcmVjbGFpbSB8PSBfX0dG UF9OT1JFVFJZIHwgX19HRlBfTk9XQVJOOwotCi0Jc2cgPSBzdC0+c2dsOwotCXN0LT5uZW50cyA9 IDA7Ci0Jc2dfcGFnZV9zaXplcyA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IHBhZ2VfY291bnQ7IGkr KykgewotCQljb25zdCB1bnNpZ25lZCBpbnQgc2hyaW5rW10gPSB7Ci0JCQlJOTE1X1NIUklOS19C T1VORCB8IEk5MTVfU0hSSU5LX1VOQk9VTkQgfCBJOTE1X1NIUklOS19QVVJHRUFCTEUsCi0JCQkw LAotCQl9LCAqcyA9IHNocmluazsKLQkJZ2ZwX3QgZ2ZwID0gbm9yZWNsYWltOwotCi0JCWRvIHsK LQkJCWNvbmRfcmVzY2hlZCgpOwotCQkJcGFnZSA9IHNobWVtX3JlYWRfbWFwcGluZ19wYWdlX2dm cChtYXBwaW5nLCBpLCBnZnApOwotCQkJaWYgKCFJU19FUlIocGFnZSkpCi0JCQkJYnJlYWs7Ci0K LQkJCWlmICghKnMpIHsKLQkJCQlyZXQgPSBQVFJfRVJSKHBhZ2UpOwotCQkJCWdvdG8gZXJyX3Nn OwotCQkJfQotCi0JCQlpOTE1X2dlbV9zaHJpbmsoZGV2X3ByaXYsIDIgKiBwYWdlX2NvdW50LCBO VUxMLCAqcysrKTsKLQotCQkJLyoKLQkJCSAqIFdlJ3ZlIHRyaWVkIGhhcmQgdG8gYWxsb2NhdGUg dGhlIG1lbW9yeSBieSByZWFwaW5nCi0JCQkgKiBvdXIgb3duIGJ1ZmZlciwgbm93IGxldCB0aGUg cmVhbCBWTSBkbyBpdHMgam9iIGFuZAotCQkJICogZ28gZG93biBpbiBmbGFtZXMgaWYgdHJ1bHkg T09NLgotCQkJICoKLQkJCSAqIEhvd2V2ZXIsIHNpbmNlIGdyYXBoaWNzIHRlbmQgdG8gYmUgZGlz cG9zYWJsZSwKLQkJCSAqIGRlZmVyIHRoZSBvb20gaGVyZSBieSByZXBvcnRpbmcgdGhlIEVOT01F TSBiYWNrCi0JCQkgKiB0byB1c2Vyc3BhY2UuCi0JCQkgKi8KLQkJCWlmICghKnMpIHsKLQkJCQkv KiByZWNsYWltIGFuZCB3YXJuLCBidXQgbm8gb29tICovCi0JCQkJZ2ZwID0gbWFwcGluZ19nZnBf bWFzayhtYXBwaW5nKTsKLQotCQkJCS8qCi0JCQkJICogT3VyIGJvIGFyZSBhbHdheXMgZGlydHkg YW5kIHNvIHdlIHJlcXVpcmUKLQkJCQkgKiBrc3dhcGQgdG8gcmVjbGFpbSBvdXIgcGFnZXMgKGRp cmVjdCByZWNsYWltCi0JCQkJICogZG9lcyBub3QgZWZmZWN0aXZlbHkgYmVnaW4gcGFnZW91dCBv ZiBvdXIKLQkJCQkgKiBidWZmZXJzIG9uIGl0cyBvd24pLiBIb3dldmVyLCBkaXJlY3QgcmVjbGFp bQotCQkJCSAqIG9ubHkgd2FpdHMgZm9yIGtzd2FwZCB3aGVuIHVuZGVyIGFsbG9jYXRpb24KLQkJ CQkgKiBjb25nZXN0aW9uLiBTbyBhcyBhIHJlc3VsdCBfX0dGUF9SRUNMQUlNIGlzCi0JCQkJICog dW5yZWxpYWJsZSBhbmQgZmFpbHMgdG8gYWN0dWFsbHkgcmVjbGFpbSBvdXIKLQkJCQkgKiBkaXJ0 eSBwYWdlcyAtLSB1bmxlc3MgeW91IHRyeSBvdmVyIGFuZCBvdmVyCi0JCQkJICogYWdhaW4gd2l0 aCAhX19HRlBfTk9SRVRSWS4gSG93ZXZlciwgd2Ugc3RpbGwKLQkJCQkgKiB3YW50IHRvIGZhaWwg dGhpcyBhbGxvY2F0aW9uIHJhdGhlciB0aGFuCi0JCQkJICogdHJpZ2dlciB0aGUgb3V0LW9mLW1l bW9yeSBraWxsZXIgYW5kIGZvcgotCQkJCSAqIHRoaXMgd2Ugd2FudCBfX0dGUF9SRVRSWV9NQVlG QUlMLgotCQkJCSAqLwotCQkJCWdmcCB8PSBfX0dGUF9SRVRSWV9NQVlGQUlMOwotCQkJfQotCQl9 IHdoaWxlICgxKTsKLQotCQlpZiAoIWkgfHwKLQkJICAgIHNnLT5sZW5ndGggPj0gbWF4X3NlZ21l bnQgfHwKLQkJICAgIHBhZ2VfdG9fcGZuKHBhZ2UpICE9IGxhc3RfcGZuICsgMSkgewotCQkJaWYg KGkpIHsKLQkJCQlzZ19wYWdlX3NpemVzIHw9IHNnLT5sZW5ndGg7Ci0JCQkJc2cgPSBzZ19uZXh0 KHNnKTsKLQkJCX0KLQkJCXN0LT5uZW50cysrOwotCQkJc2dfc2V0X3BhZ2Uoc2csIHBhZ2UsIFBB R0VfU0laRSwgMCk7Ci0JCX0gZWxzZSB7Ci0JCQlzZy0+bGVuZ3RoICs9IFBBR0VfU0laRTsKLQkJ fQotCQlsYXN0X3BmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpOwotCi0JCS8qIENoZWNrIHRoYXQgdGhl IGk5NjVnL2dtIHdvcmthcm91bmQgd29ya3MuICovCi0JCVdBUk5fT04oKGdmcCAmIF9fR0ZQX0RN QTMyKSAmJiAobGFzdF9wZm4gPj0gMHgwMDEwMDAwMFVMKSk7Ci0JfQotCWlmIChzZykgeyAvKiBs b29wIHRlcm1pbmF0ZWQgZWFybHk7IHNob3J0IHNnIHRhYmxlICovCi0JCXNnX3BhZ2Vfc2l6ZXMg fD0gc2ctPmxlbmd0aDsKLQkJc2dfbWFya19lbmQoc2cpOwotCX0KLQotCS8qIFRyaW0gdW51c2Vk IHNnIGVudHJpZXMgdG8gYXZvaWQgd2FzdGluZyBtZW1vcnkuICovCi0JaTkxNV9zZ190cmltKHN0 KTsKLQotCXJldCA9IGk5MTVfZ2VtX2d0dF9wcmVwYXJlX3BhZ2VzKG9iaiwgc3QpOwotCWlmIChy ZXQpIHsKLQkJLyoKLQkJICogRE1BIHJlbWFwcGluZyBmYWlsZWQ/IE9uZSBwb3NzaWJsZSBjYXVz ZSBpcyB0aGF0Ci0JCSAqIGl0IGNvdWxkIG5vdCByZXNlcnZlIGVub3VnaCBsYXJnZSBlbnRyaWVz LCBhc2tpbmcKLQkJICogZm9yIFBBR0VfU0laRSBjaHVua3MgaW5zdGVhZCBtYXkgYmUgaGVscGZ1 bC4KLQkJICovCi0JCWlmIChtYXhfc2VnbWVudCA+IFBBR0VfU0laRSkgewotCQkJZm9yX2VhY2hf c2d0X3BhZ2UocGFnZSwgc2d0X2l0ZXIsIHN0KQotCQkJCXB1dF9wYWdlKHBhZ2UpOwotCQkJc2df ZnJlZV90YWJsZShzdCk7Ci0KLQkJCW1heF9zZWdtZW50ID0gUEFHRV9TSVpFOwotCQkJZ290byBy ZWJ1aWxkX3N0OwotCQl9IGVsc2UgewotCQkJZGV2X3dhcm4oJmRldl9wcml2LT5kcm0ucGRldi0+ ZGV2LAotCQkJCSAiRmFpbGVkIHRvIERNQSByZW1hcCAlbHUgcGFnZXNcbiIsCi0JCQkJIHBhZ2Vf Y291bnQpOwotCQkJZ290byBlcnJfcGFnZXM7Ci0JCX0KLQl9Ci0KLQlpZiAoaTkxNV9nZW1fb2Jq ZWN0X25lZWRzX2JpdDE3X3N3aXp6bGUob2JqKSkKLQkJaTkxNV9nZW1fb2JqZWN0X2RvX2JpdF8x N19zd2l6emxlKG9iaiwgc3QpOwotCi0JX19pOTE1X2dlbV9vYmplY3Rfc2V0X3BhZ2VzKG9iaiwg c3QsIHNnX3BhZ2Vfc2l6ZXMpOwotCi0JcmV0dXJuIDA7Ci0KLWVycl9zZzoKLQlzZ19tYXJrX2Vu ZChzZyk7Ci1lcnJfcGFnZXM6Ci0JbWFwcGluZ19jbGVhcl91bmV2aWN0YWJsZShtYXBwaW5nKTsK LQlwYWdldmVjX2luaXQoJnB2ZWMpOwotCWZvcl9lYWNoX3NndF9wYWdlKHBhZ2UsIHNndF9pdGVy LCBzdCkgewotCQlpZiAoIXBhZ2V2ZWNfYWRkKCZwdmVjLCBwYWdlKSkKLQkJCWNoZWNrX3JlbGVh c2VfcGFnZXZlYygmcHZlYyk7Ci0JfQotCWlmIChwYWdldmVjX2NvdW50KCZwdmVjKSkKLQkJY2hl Y2tfcmVsZWFzZV9wYWdldmVjKCZwdmVjKTsKLQlzZ19mcmVlX3RhYmxlKHN0KTsKLQlrZnJlZShz dCk7Ci0KLQkvKgotCSAqIHNobWVtZnMgZmlyc3QgY2hlY2tzIGlmIHRoZXJlIGlzIGVub3VnaCBt ZW1vcnkgdG8gYWxsb2NhdGUgdGhlIHBhZ2UKLQkgKiBhbmQgcmVwb3J0cyBFTk9TUEMgc2hvdWxk IHRoZXJlIGJlIGluc3VmZmljaWVudCwgYWxvbmcgd2l0aCB0aGUgdXN1YWwKLQkgKiBFTk9NRU0g Zm9yIGEgZ2VudWluZSBhbGxvY2F0aW9uIGZhaWx1cmUuCi0JICoKLQkgKiBXZSB1c2UgRU5PU1BD IGluIG91ciBkcml2ZXIgdG8gbWVhbiB0aGF0IHdlIGhhdmUgcnVuIG91dCBvZiBhcGVydHVyZQot CSAqIHNwYWNlIGFuZCBzbyB3YW50IHRvIHRyYW5zbGF0ZSB0aGUgZXJyb3IgZnJvbSBzaG1lbWZz IGJhY2sgdG8gb3VyCi0JICogdXN1YWwgdW5kZXJzdGFuZGluZyBvZiBFTk9NRU0uCi0JICovCi0J aWYgKHJldCA9PSAtRU5PU1BDKQotCQlyZXQgPSAtRU5PTUVNOwotCi0JcmV0dXJuIHJldDsKLX0K LQogdm9pZCBfX2k5MTVfZ2VtX29iamVjdF9zZXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iaiwKIAkJCQkgc3RydWN0IHNnX3RhYmxlICpwYWdlcywKIAkJCQkgdW5zaWduZWQg aW50IHNnX3BhZ2Vfc2l6ZXMpCkBAIC0yNjYyLDEzMyArMjM2Niw2IEBAIHZvaWQgX19pOTE1X2dl bV9vYmplY3RfZmx1c2hfbWFwKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCiAJfQog fQogCi1zdGF0aWMgaW50Ci1pOTE1X2dlbV9vYmplY3RfcHdyaXRlX2d0dChzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqLAotCQkJICAgY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9wd3Jp dGUgKmFyZykKLXsKLQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IG9iai0+YmFzZS5m aWxwLT5mX21hcHBpbmc7Ci0JY2hhciBfX3VzZXIgKnVzZXJfZGF0YSA9IHU2NF90b191c2VyX3B0 cihhcmctPmRhdGFfcHRyKTsKLQl1NjQgcmVtYWluLCBvZmZzZXQ7Ci0JdW5zaWduZWQgaW50IHBn OwotCi0JLyogQ2FsbGVyIGFscmVhZHkgdmFsaWRhdGVkIHVzZXIgYXJncyAqLwotCUdFTV9CVUdf T04oIWFjY2Vzc19vayh1c2VyX2RhdGEsIGFyZy0+c2l6ZSkpOwotCi0JLyoKLQkgKiBCZWZvcmUg d2UgaW5zdGFudGlhdGUvcGluIHRoZSBiYWNraW5nIHN0b3JlIGZvciBvdXIgdXNlLCB3ZQotCSAq IGNhbiBwcmVwb3B1bGF0ZSB0aGUgc2htZW1mcyBmaWxwIGVmZmljaWVudGx5IHVzaW5nIGEgd3Jp dGUgaW50bwotCSAqIHRoZSBwYWdlY2FjaGUuIFdlIGF2b2lkIHRoZSBwZW5hbHR5IG9mIGluc3Rh bnRpYXRpbmcgYWxsIHRoZQotCSAqIHBhZ2VzLCBpbXBvcnRhbnQgaWYgdGhlIHVzZXIgaXMganVz dCB3cml0aW5nIHRvIGEgZmV3IGFuZCBuZXZlcgotCSAqIHVzZXMgdGhlIG9iamVjdCBvbiB0aGUg R1BVLCBhbmQgdXNpbmcgYSBkaXJlY3Qgd3JpdGUgaW50byBzaG1lbWZzCi0JICogYWxsb3dzIGl0 IHRvIGF2b2lkIHRoZSBjb3N0IG9mIHJldHJpZXZpbmcgYSBwYWdlIChlaXRoZXIgc3dhcGluCi0J ICogb3IgY2xlYXJpbmctYmVmb3JlLXVzZSkgYmVmb3JlIGl0IGlzIG92ZXJ3cml0dGVuLgotCSAq LwotCWlmIChpOTE1X2dlbV9vYmplY3RfaGFzX3BhZ2VzKG9iaikpCi0JCXJldHVybiAtRU5PREVW OwotCi0JaWYgKG9iai0+bW0ubWFkdiAhPSBJOTE1X01BRFZfV0lMTE5FRUQpCi0JCXJldHVybiAt RUZBVUxUOwotCi0JLyoKLQkgKiBCZWZvcmUgdGhlIHBhZ2VzIGFyZSBpbnN0YW50aWF0ZWQgdGhl IG9iamVjdCBpcyB0cmVhdGVkIGFzIGJlaW5nCi0JICogaW4gdGhlIENQVSBkb21haW4uIFRoZSBw YWdlcyB3aWxsIGJlIGNsZmx1c2hlZCBhcyByZXF1aXJlZCBiZWZvcmUKLQkgKiB1c2UsIGFuZCB3 ZSBjYW4gZnJlZWx5IHdyaXRlIGludG8gdGhlIHBhZ2VzIGRpcmVjdGx5LiBJZiB1c2Vyc3BhY2UK LQkgKiByYWNlcyBwd3JpdGUgd2l0aCBhbnkgb3RoZXIgb3BlcmF0aW9uOyBjb3JydXB0aW9uIHdp bGwgZW5zdWUgLQotCSAqIHRoYXQgaXMgdXNlcnNwYWNlJ3MgcHJlcm9nYXRpdmUhCi0JICovCi0K LQlyZW1haW4gPSBhcmctPnNpemU7Ci0Jb2Zmc2V0ID0gYXJnLT5vZmZzZXQ7Ci0JcGcgPSBvZmZz ZXRfaW5fcGFnZShvZmZzZXQpOwotCi0JZG8gewotCQl1bnNpZ25lZCBpbnQgbGVuLCB1bndyaXR0 ZW47Ci0JCXN0cnVjdCBwYWdlICpwYWdlOwotCQl2b2lkICpkYXRhLCAqdmFkZHI7Ci0JCWludCBl cnI7Ci0JCWNoYXIgYzsKLQotCQlsZW4gPSBQQUdFX1NJWkUgLSBwZzsKLQkJaWYgKGxlbiA+IHJl bWFpbikKLQkJCWxlbiA9IHJlbWFpbjsKLQotCQkvKiBQcmVmYXVsdCB0aGUgdXNlciBwYWdlIHRv IHJlZHVjZSBwb3RlbnRpYWwgcmVjdXJzaW9uICovCi0JCWVyciA9IF9fZ2V0X3VzZXIoYywgdXNl cl9kYXRhKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0KLQkJZXJyID0gX19nZXRfdXNl cihjLCB1c2VyX2RhdGEgKyBsZW4gLSAxKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0K LQkJZXJyID0gcGFnZWNhY2hlX3dyaXRlX2JlZ2luKG9iai0+YmFzZS5maWxwLCBtYXBwaW5nLAot CQkJCQkgICAgb2Zmc2V0LCBsZW4sIDAsCi0JCQkJCSAgICAmcGFnZSwgJmRhdGEpOwotCQlpZiAo ZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0KLQkJdmFkZHIgPSBrbWFwX2F0b21pYyhwYWdlKTsK LQkJdW53cml0dGVuID0gX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYyh2YWRkciArIHBnLAotCQkJ CQkJICAgICAgdXNlcl9kYXRhLAotCQkJCQkJICAgICAgbGVuKTsKLQkJa3VubWFwX2F0b21pYyh2 YWRkcik7Ci0KLQkJZXJyID0gcGFnZWNhY2hlX3dyaXRlX2VuZChvYmotPmJhc2UuZmlscCwgbWFw cGluZywKLQkJCQkJICBvZmZzZXQsIGxlbiwgbGVuIC0gdW53cml0dGVuLAotCQkJCQkgIHBhZ2Us IGRhdGEpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0KLQkJLyogV2UgZG9uJ3Qg aGFuZGxlIC1FRkFVTFQsIGxlYXZlIGl0IHRvIHRoZSBjYWxsZXIgdG8gY2hlY2sgKi8KLQkJaWYg KHVud3JpdHRlbikKLQkJCXJldHVybiAtRU5PREVWOwotCi0JCXJlbWFpbiAtPSBsZW47Ci0JCXVz ZXJfZGF0YSArPSBsZW47Ci0JCW9mZnNldCArPSBsZW47Ci0JCXBnID0gMDsKLQl9IHdoaWxlIChy ZW1haW4pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgaTkxNV9nZW1fY2xvc2Vfb2JqZWN0KHN0 cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCi17Ci0Jc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KGdlbS0+ZGV2KTsKLQlzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gdG9faW50ZWxfYm8oZ2VtKTsKLQlzdHJ1Y3QgZHJt X2k5MTVfZmlsZV9wcml2YXRlICpmcHJpdiA9IGZpbGUtPmRyaXZlcl9wcml2OwotCXN0cnVjdCBp OTE1X2x1dF9oYW5kbGUgKmx1dCwgKmxuOwotCi0JbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVj dF9tdXRleCk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobHV0LCBsbiwgJm9iai0+bHV0 X2xpc3QsIG9ial9saW5rKSB7Ci0JCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHggPSBsdXQt PmN0eDsKLQkJc3RydWN0IGk5MTVfdm1hICp2bWE7Ci0KLQkJR0VNX0JVR19PTihjdHgtPmZpbGVf cHJpdiA9PSBFUlJfUFRSKC1FQkFERikpOwotCQlpZiAoY3R4LT5maWxlX3ByaXYgIT0gZnByaXYp Ci0JCQljb250aW51ZTsKLQotCQl2bWEgPSByYWRpeF90cmVlX2RlbGV0ZSgmY3R4LT5oYW5kbGVz X3ZtYSwgbHV0LT5oYW5kbGUpOwotCQlHRU1fQlVHX09OKHZtYS0+b2JqICE9IG9iaik7Ci0KLQkJ LyogV2UgYWxsb3cgdGhlIHByb2Nlc3MgdG8gaGF2ZSBtdWx0aXBsZSBoYW5kbGVzIHRvIHRoZSBz YW1lCi0JCSAqIHZtYSwgaW4gdGhlIHNhbWUgZmQgbmFtZXNwYWNlLCBieSB2aXJ0dWUgb2YgZmxp bmsvb3Blbi4KLQkJICovCi0JCUdFTV9CVUdfT04oIXZtYS0+b3Blbl9jb3VudCk7Ci0JCWlmICgh LS12bWEtPm9wZW5fY291bnQgJiYgIWk5MTVfdm1hX2lzX2dndHQodm1hKSkKLQkJCWk5MTVfdm1h X2Nsb3NlKHZtYSk7Ci0KLQkJbGlzdF9kZWwoJmx1dC0+b2JqX2xpbmspOwotCQlsaXN0X2RlbCgm bHV0LT5jdHhfbGluayk7Ci0KLQkJaTkxNV9sdXRfaGFuZGxlX2ZyZWUobHV0KTsKLQkJX19pOTE1 X2dlbV9vYmplY3RfcmVsZWFzZV91bmxlc3NfYWN0aXZlKG9iaik7Ci0JfQotCi0JbXV0ZXhfdW5s b2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKLX0KLQogc3RhdGljIHVuc2lnbmVkIGxvbmcg dG9fd2FpdF90aW1lb3V0KHM2NCB0aW1lb3V0X25zKQogewogCWlmICh0aW1lb3V0X25zIDwgMCkK QEAgLTM3ODcsMzQ4ICszMzY0LDYgQEAgaTkxNV9nZW1fbWFkdmlzZV9pb2N0bChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lk Ci1mcm9udGJ1ZmZlcl9yZXRpcmUoc3RydWN0IGk5MTVfYWN0aXZlX3JlcXVlc3QgKmFjdGl2ZSwK LQkJICAgc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVzdCkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqID0KLQkJY29udGFpbmVyX29mKGFjdGl2ZSwgdHlwZW9mKCpvYmopLCBm cm9udGJ1ZmZlcl93cml0ZSk7Ci0KLQlpbnRlbF9mYl9vYmpfZmx1c2gob2JqLCBPUklHSU5fQ1Mp OwotfQotCi12b2lkIGk5MTVfZ2VtX29iamVjdF9pbml0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmosCi0JCQkgIGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0X29wcyAqb3Bz KQotewotCW11dGV4X2luaXQoJm9iai0+bW0ubG9jayk7Ci0KLQlzcGluX2xvY2tfaW5pdCgmb2Jq LT52bWEubG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJm9iai0+dm1hLmxpc3QpOwotCi0JSU5JVF9M SVNUX0hFQUQoJm9iai0+bHV0X2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZvYmotPmJhdGNoX3Bv b2xfbGluayk7Ci0KLQlpbml0X3JjdV9oZWFkKCZvYmotPnJjdSk7Ci0KLQlvYmotPm9wcyA9IG9w czsKLQotCXJlc2VydmF0aW9uX29iamVjdF9pbml0KCZvYmotPl9fYnVpbHRpbl9yZXN2KTsKLQlv YmotPnJlc3YgPSAmb2JqLT5fX2J1aWx0aW5fcmVzdjsKLQotCW9iai0+ZnJvbnRidWZmZXJfZ2d0 dF9vcmlnaW4gPSBPUklHSU5fR1RUOwotCWk5MTVfYWN0aXZlX3JlcXVlc3RfaW5pdCgmb2JqLT5m cm9udGJ1ZmZlcl93cml0ZSwKLQkJCQkgTlVMTCwgZnJvbnRidWZmZXJfcmV0aXJlKTsKLQotCW9i ai0+bW0ubWFkdiA9IEk5MTVfTUFEVl9XSUxMTkVFRDsKLQlJTklUX1JBRElYX1RSRUUoJm9iai0+ bW0uZ2V0X3BhZ2UucmFkaXgsIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pOwotCW11dGV4X2lu aXQoJm9iai0+bW0uZ2V0X3BhZ2UubG9jayk7Ci0KLQlpOTE1X2dlbV9pbmZvX2FkZF9vYmoodG9f aTkxNShvYmotPmJhc2UuZGV2KSwgb2JqLT5iYXNlLnNpemUpOwotfQotCi1zdGF0aWMgY29uc3Qg c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Rfb3BzIGk5MTVfZ2VtX29iamVjdF9vcHMgPSB7Ci0J LmZsYWdzID0gSTkxNV9HRU1fT0JKRUNUX0hBU19TVFJVQ1RfUEFHRSB8Ci0JCSBJOTE1X0dFTV9P QkpFQ1RfSVNfU0hSSU5LQUJMRSwKLQotCS5nZXRfcGFnZXMgPSBpOTE1X2dlbV9vYmplY3RfZ2V0 X3BhZ2VzX2d0dCwKLQkucHV0X3BhZ2VzID0gaTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlc19ndHQs Ci0KLQkucHdyaXRlID0gaTkxNV9nZW1fb2JqZWN0X3B3cml0ZV9ndHQsCi19OwotCi1zdGF0aWMg aW50IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfc2htZW0oc3RydWN0IGRybV9kZXZpY2UgKmRldiwK LQkJCQkJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCi0JCQkJCXNpemVfdCBzaXplKQotewot CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkxNShkZXYpOwotCXVuc2lnbmVk IGxvbmcgZmxhZ3MgPSBWTV9OT1JFU0VSVkU7Ci0Jc3RydWN0IGZpbGUgKmZpbHA7Ci0KLQlkcm1f Z2VtX3ByaXZhdGVfb2JqZWN0X2luaXQoZGV2LCBvYmosIHNpemUpOwotCi0JaWYgKGk5MTUtPm1t LmdlbWZzKQotCQlmaWxwID0gc2htZW1fZmlsZV9zZXR1cF93aXRoX21udChpOTE1LT5tbS5nZW1m cywgImk5MTUiLCBzaXplLAotCQkJCQkJIGZsYWdzKTsKLQllbHNlCi0JCWZpbHAgPSBzaG1lbV9m aWxlX3NldHVwKCJpOTE1Iiwgc2l6ZSwgZmxhZ3MpOwotCi0JaWYgKElTX0VSUihmaWxwKSkKLQkJ cmV0dXJuIFBUUl9FUlIoZmlscCk7Ci0KLQlvYmotPmZpbHAgPSBmaWxwOwotCi0JcmV0dXJuIDA7 Ci19Ci0KLXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICoKLWk5MTVfZ2VtX29iamVjdF9jcmVh dGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1NjQgc2l6ZSkKLXsKLQlzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwotCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBw aW5nOwotCXVuc2lnbmVkIGludCBjYWNoZV9sZXZlbDsKLQlnZnBfdCBtYXNrOwotCWludCByZXQ7 Ci0KLQkvKiBUaGVyZSBpcyBhIHByZXZhbGVuY2Ugb2YgdGhlIGFzc3VtcHRpb24gdGhhdCB3ZSBm aXQgdGhlIG9iamVjdCdzCi0JICogcGFnZSBjb3VudCBpbnNpZGUgYSAzMmJpdCBfc2lnbmVkXyB2 YXJpYWJsZS4gTGV0J3MgZG9jdW1lbnQgdGhpcyBhbmQKLQkgKiBjYXRjaCBpZiB3ZSBldmVyIG5l ZWQgdG8gZml4IGl0LiBJbiB0aGUgbWVhbnRpbWUsIGlmIHlvdSBkbyBzcG90Ci0JICogc3VjaCBh IGxvY2FsIHZhcmlhYmxlLCBwbGVhc2UgY29uc2lkZXIgZml4aW5nIQotCSAqLwotCWlmIChzaXpl ID4+IFBBR0VfU0hJRlQgPiBJTlRfTUFYKQotCQlyZXR1cm4gRVJSX1BUUigtRTJCSUcpOwotCi0J aWYgKG92ZXJmbG93c190eXBlKHNpemUsIG9iai0+YmFzZS5zaXplKSkKLQkJcmV0dXJuIEVSUl9Q VFIoLUUyQklHKTsKLQotCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9hbGxvYygpOwotCWlmIChvYmog PT0gTlVMTCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0KLQlyZXQgPSBpOTE1X2dlbV9v YmplY3RfY3JlYXRlX3NobWVtKCZkZXZfcHJpdi0+ZHJtLCAmb2JqLT5iYXNlLCBzaXplKTsKLQlp ZiAocmV0KQotCQlnb3RvIGZhaWw7Ci0KLQltYXNrID0gR0ZQX0hJR0hVU0VSIHwgX19HRlBfUkVD TEFJTUFCTEU7Ci0JaWYgKElTX0k5NjVHTShkZXZfcHJpdikgfHwgSVNfSTk2NUcoZGV2X3ByaXYp KSB7Ci0JCS8qIDk2NWdtIGNhbm5vdCByZWxvY2F0ZSBvYmplY3RzIGFib3ZlIDRHaUIuICovCi0J CW1hc2sgJj0gfl9fR0ZQX0hJR0hNRU07Ci0JCW1hc2sgfD0gX19HRlBfRE1BMzI7Ci0JfQotCi0J bWFwcGluZyA9IG9iai0+YmFzZS5maWxwLT5mX21hcHBpbmc7Ci0JbWFwcGluZ19zZXRfZ2ZwX21h c2sobWFwcGluZywgbWFzayk7Ci0JR0VNX0JVR19PTighKG1hcHBpbmdfZ2ZwX21hc2sobWFwcGlu ZykgJiBfX0dGUF9SRUNMQUlNKSk7Ci0KLQlpOTE1X2dlbV9vYmplY3RfaW5pdChvYmosICZpOTE1 X2dlbV9vYmplY3Rfb3BzKTsKLQotCW9iai0+d3JpdGVfZG9tYWluID0gSTkxNV9HRU1fRE9NQUlO X0NQVTsKLQlvYmotPnJlYWRfZG9tYWlucyA9IEk5MTVfR0VNX0RPTUFJTl9DUFU7Ci0KLQlpZiAo SEFTX0xMQyhkZXZfcHJpdikpCi0JCS8qIE9uIHNvbWUgZGV2aWNlcywgd2UgY2FuIGhhdmUgdGhl IEdQVSB1c2UgdGhlIExMQyAodGhlIENQVQotCQkgKiBjYWNoZSkgZm9yIGFib3V0IGEgMTAlIHBl cmZvcm1hbmNlIGltcHJvdmVtZW50Ci0JCSAqIGNvbXBhcmVkIHRvIHVuY2FjaGVkLiAgR3JhcGhp Y3MgcmVxdWVzdHMgb3RoZXIgdGhhbgotCQkgKiBkaXNwbGF5IHNjYW5vdXQgYXJlIGNvaGVyZW50 IHdpdGggdGhlIENQVSBpbgotCQkgKiBhY2Nlc3NpbmcgdGhpcyBjYWNoZS4gIFRoaXMgbWVhbnMg aW4gdGhpcyBtb2RlIHdlCi0JCSAqIGRvbid0IG5lZWQgdG8gY2xmbHVzaCBvbiB0aGUgQ1BVIHNp ZGUsIGFuZCBvbiB0aGUKLQkJICogR1BVIHNpZGUgd2Ugb25seSBuZWVkIHRvIGZsdXNoIGludGVy bmFsIGNhY2hlcyB0bwotCQkgKiBnZXQgZGF0YSB2aXNpYmxlIHRvIHRoZSBDUFUuCi0JCSAqCi0J CSAqIEhvd2V2ZXIsIHdlIG1haW50YWluIHRoZSBkaXNwbGF5IHBsYW5lcyBhcyBVQywgYW5kIHNv Ci0JCSAqIG5lZWQgdG8gcmViaW5kIHdoZW4gZmlyc3QgdXNlZCBhcyBzdWNoLgotCQkgKi8KLQkJ Y2FjaGVfbGV2ZWwgPSBJOTE1X0NBQ0hFX0xMQzsKLQllbHNlCi0JCWNhY2hlX2xldmVsID0gSTkx NV9DQUNIRV9OT05FOwotCi0JaTkxNV9nZW1fb2JqZWN0X3NldF9jYWNoZV9jb2hlcmVuY3kob2Jq LCBjYWNoZV9sZXZlbCk7Ci0KLQl0cmFjZV9pOTE1X2dlbV9vYmplY3RfY3JlYXRlKG9iaik7Ci0K LQlyZXR1cm4gb2JqOwotCi1mYWlsOgotCWk5MTVfZ2VtX29iamVjdF9mcmVlKG9iaik7Ci0JcmV0 dXJuIEVSUl9QVFIocmV0KTsKLX0KLQotc3RhdGljIGJvb2wgZGlzY2FyZF9iYWNraW5nX3N0b3Jh Z2Uoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKLXsKLQkvKiBJZiB3ZSBhcmUgdGhl IGxhc3QgdXNlciBvZiB0aGUgYmFja2luZyBzdG9yYWdlIChiZSBpdCBzaG1lbWZzCi0JICogcGFn ZXMgb3Igc3RvbGVuIGV0YyksIHdlIGtub3cgdGhhdCB0aGUgcGFnZXMgYXJlIGdvaW5nIHRvIGJl Ci0JICogaW1tZWRpYXRlbHkgcmVsZWFzZWQuIEluIHRoaXMgY2FzZSwgd2UgY2FuIHRoZW4gc2tp cCBjb3B5aW5nCi0JICogYmFjayB0aGUgY29udGVudHMgZnJvbSB0aGUgR1BVLgotCSAqLwotCi0J aWYgKG9iai0+bW0ubWFkdiAhPSBJOTE1X01BRFZfV0lMTE5FRUQpCi0JCXJldHVybiBmYWxzZTsK LQotCWlmIChvYmotPmJhc2UuZmlscCA9PSBOVUxMKQotCQlyZXR1cm4gdHJ1ZTsKLQotCS8qIEF0 IGZpcnN0IGdsYW5jZSwgdGhpcyBsb29rcyByYWN5LCBidXQgdGhlbiBhZ2FpbiBzbyB3b3VsZCBi ZQotCSAqIHVzZXJzcGFjZSByYWNpbmcgbW1hcCBhZ2FpbnN0IGNsb3NlLiBIb3dldmVyLCB0aGUg Zmlyc3QgZXh0ZXJuYWwKLQkgKiByZWZlcmVuY2UgdG8gdGhlIGZpbHAgY2FuIG9ubHkgYmUgb2J0 YWluZWQgdGhyb3VnaCB0aGUKLQkgKiBpOTE1X2dlbV9tbWFwX2lvY3RsKCkgd2hpY2ggc2FmZWd1 YXJkcyB1cyBhZ2FpbnN0IHRoZSB1c2VyCi0JICogYWNxdWlyaW5nIHN1Y2ggYSByZWZlcmVuY2Ug d2hpbHN0IHdlIGFyZSBpbiB0aGUgbWlkZGxlIG9mCi0JICogZnJlZWluZyB0aGUgb2JqZWN0Lgot CSAqLwotCXJldHVybiBhdG9taWNfbG9uZ19yZWFkKCZvYmotPmJhc2UuZmlscC0+Zl9jb3VudCkg PT0gMTsKLX0KLQotc3RhdGljIHZvaWQgX19pOTE1X2dlbV9mcmVlX29iamVjdHMoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUsCi0JCQkJICAgIHN0cnVjdCBsbGlzdF9ub2RlICpmcmVlZCkK LXsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLCAqb247Ci0JaW50ZWxfd2FrZXJl Zl90IHdha2VyZWY7Ci0KLQl3YWtlcmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXQoaTkxNSk7Ci0J bGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShvYmosIG9uLCBmcmVlZCwgZnJlZWQpIHsKLQkJc3Ry dWN0IGk5MTVfdm1hICp2bWEsICp2bjsKLQotCQl0cmFjZV9pOTE1X2dlbV9vYmplY3RfZGVzdHJv eShvYmopOwotCi0JCW11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwotCi0JCUdF TV9CVUdfT04oaTkxNV9nZW1fb2JqZWN0X2lzX2FjdGl2ZShvYmopKTsKLQkJbGlzdF9mb3JfZWFj aF9lbnRyeV9zYWZlKHZtYSwgdm4sICZvYmotPnZtYS5saXN0LCBvYmpfbGluaykgewotCQkJR0VN X0JVR19PTihpOTE1X3ZtYV9pc19hY3RpdmUodm1hKSk7Ci0JCQl2bWEtPmZsYWdzICY9IH5JOTE1 X1ZNQV9QSU5fTUFTSzsKLQkJCWk5MTVfdm1hX2Rlc3Ryb3kodm1hKTsKLQkJfQotCQlHRU1fQlVH X09OKCFsaXN0X2VtcHR5KCZvYmotPnZtYS5saXN0KSk7Ci0JCUdFTV9CVUdfT04oIVJCX0VNUFRZ X1JPT1QoJm9iai0+dm1hLnRyZWUpKTsKLQotCQkvKiBUaGlzIHNlcmlhbGl6ZXMgZnJlZWluZyB3 aXRoIHRoZSBzaHJpbmtlci4gU2luY2UgdGhlIGZyZWUKLQkJICogaXMgZGVsYXllZCwgZmlyc3Qg YnkgUkNVIHRoZW4gYnkgdGhlIHdvcmtxdWV1ZSwgd2Ugd2FudCB0aGUKLQkJICogc2hyaW5rZXIg dG8gYmUgYWJsZSB0byBmcmVlIHBhZ2VzIG9mIHVucmVmZXJlbmNlZCBvYmplY3RzLAotCQkgKiBv ciBlbHNlIHdlIG1heSBvb20gd2hpbHN0IHRoZXJlIGFyZSBwbGVudHkgb2YgZGVmZXJyZWQKLQkJ ICogZnJlZWQgb2JqZWN0cy4KLQkJICovCi0JCWlmIChpOTE1X2dlbV9vYmplY3RfaGFzX3BhZ2Vz KG9iaikpIHsKLQkJCXNwaW5fbG9jaygmaTkxNS0+bW0ub2JqX2xvY2spOwotCQkJbGlzdF9kZWxf aW5pdCgmb2JqLT5tbS5saW5rKTsKLQkJCXNwaW5fdW5sb2NrKCZpOTE1LT5tbS5vYmpfbG9jayk7 Ci0JCX0KLQotCQltdXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwotCi0JCUdF TV9CVUdfT04ob2JqLT5iaW5kX2NvdW50KTsKLQkJR0VNX0JVR19PTihvYmotPnVzZXJmYXVsdF9j b3VudCk7Ci0JCUdFTV9CVUdfT04oYXRvbWljX3JlYWQoJm9iai0+ZnJvbnRidWZmZXJfYml0cykp OwotCQlHRU1fQlVHX09OKCFsaXN0X2VtcHR5KCZvYmotPmx1dF9saXN0KSk7Ci0KLQkJaWYgKG9i ai0+b3BzLT5yZWxlYXNlKQotCQkJb2JqLT5vcHMtPnJlbGVhc2Uob2JqKTsKLQotCQlpZiAoV0FS Tl9PTihpOTE1X2dlbV9vYmplY3RfaGFzX3Bpbm5lZF9wYWdlcyhvYmopKSkKLQkJCWF0b21pY19z ZXQoJm9iai0+bW0ucGFnZXNfcGluX2NvdW50LCAwKTsKLQkJX19pOTE1X2dlbV9vYmplY3RfcHV0 X3BhZ2VzKG9iaiwgSTkxNV9NTV9OT1JNQUwpOwotCQlHRU1fQlVHX09OKGk5MTVfZ2VtX29iamVj dF9oYXNfcGFnZXMob2JqKSk7Ci0KLQkJaWYgKG9iai0+YmFzZS5pbXBvcnRfYXR0YWNoKQotCQkJ ZHJtX3ByaW1lX2dlbV9kZXN0cm95KCZvYmotPmJhc2UsIE5VTEwpOwotCi0JCXJlc2VydmF0aW9u X29iamVjdF9maW5pKCZvYmotPl9fYnVpbHRpbl9yZXN2KTsKLQkJZHJtX2dlbV9vYmplY3RfcmVs ZWFzZSgmb2JqLT5iYXNlKTsKLQkJaTkxNV9nZW1faW5mb19yZW1vdmVfb2JqKGk5MTUsIG9iai0+ YmFzZS5zaXplKTsKLQotCQliaXRtYXBfZnJlZShvYmotPmJpdF8xNyk7Ci0JCWk5MTVfZ2VtX29i amVjdF9mcmVlKG9iaik7Ci0KLQkJR0VNX0JVR19PTighYXRvbWljX3JlYWQoJmk5MTUtPm1tLmZy ZWVfY291bnQpKTsKLQkJYXRvbWljX2RlYygmaTkxNS0+bW0uZnJlZV9jb3VudCk7Ci0KLQkJaWYg KG9uKQotCQkJY29uZF9yZXNjaGVkKCk7Ci0JfQotCWludGVsX3J1bnRpbWVfcG1fcHV0KGk5MTUs IHdha2VyZWYpOwotfQotCi1zdGF0aWMgdm9pZCBpOTE1X2dlbV9mbHVzaF9mcmVlX29iamVjdHMo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCi17Ci0Jc3RydWN0IGxsaXN0X25vZGUgKmZy ZWVkOwotCi0JLyogRnJlZSB0aGUgb2xkZXN0LCBtb3N0IHN0YWxlIG9iamVjdCB0byBrZWVwIHRo ZSBmcmVlX2xpc3Qgc2hvcnQgKi8KLQlmcmVlZCA9IE5VTEw7Ci0JaWYgKCFsbGlzdF9lbXB0eSgm aTkxNS0+bW0uZnJlZV9saXN0KSkgeyAvKiBxdWljayB0ZXN0IGZvciBob3RwYXRoICovCi0JCS8q IE9ubHkgb25lIGNvbnN1bWVyIG9mIGxsaXN0X2RlbF9maXJzdCgpIGFsbG93ZWQgKi8KLQkJc3Bp bl9sb2NrKCZpOTE1LT5tbS5mcmVlX2xvY2spOwotCQlmcmVlZCA9IGxsaXN0X2RlbF9maXJzdCgm aTkxNS0+bW0uZnJlZV9saXN0KTsKLQkJc3Bpbl91bmxvY2soJmk5MTUtPm1tLmZyZWVfbG9jayk7 Ci0JfQotCWlmICh1bmxpa2VseShmcmVlZCkpIHsKLQkJZnJlZWQtPm5leHQgPSBOVUxMOwotCQlf X2k5MTVfZ2VtX2ZyZWVfb2JqZWN0cyhpOTE1LCBmcmVlZCk7Ci0JfQotfQotCi1zdGF0aWMgdm9p ZCBfX2k5MTVfZ2VtX2ZyZWVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUsIG1tLmZyZWVfd29yayk7Ci0Jc3RydWN0IGxsaXN0X25vZGUgKmZy ZWVkOwotCi0JLyoKLQkgKiBBbGwgZmlsZS1vd25lZCBWTUEgc2hvdWxkIGhhdmUgYmVlbiByZWxl YXNlZCBieSB0aGlzIHBvaW50IHRocm91Z2gKLQkgKiBpOTE1X2dlbV9jbG9zZV9vYmplY3QoKSwg b3IgZWFybGllciBieSBpOTE1X2dlbV9jb250ZXh0X2Nsb3NlKCkuCi0JICogSG93ZXZlciwgdGhl IG9iamVjdCBtYXkgYWxzbyBiZSBib3VuZCBpbnRvIHRoZSBnbG9iYWwgR1RUIChlLmcuCi0JICog b2xkZXIgR1BVcyB3aXRob3V0IHBlci1wcm9jZXNzIHN1cHBvcnQsIG9yIGZvciBkaXJlY3QgYWNj ZXNzIHRocm91Z2gKLQkgKiB0aGUgR1RUIGVpdGhlciBmb3IgdGhlIHVzZXIgb3IgZm9yIHNjYW5v dXQpLiBUaG9zZSBWTUEgc3RpbGwgbmVlZCB0bwotCSAqIHVuYm91bmQgbm93LgotCSAqLwotCi0J c3Bpbl9sb2NrKCZpOTE1LT5tbS5mcmVlX2xvY2spOwotCXdoaWxlICgoZnJlZWQgPSBsbGlzdF9k ZWxfYWxsKCZpOTE1LT5tbS5mcmVlX2xpc3QpKSkgewotCQlzcGluX3VubG9jaygmaTkxNS0+bW0u ZnJlZV9sb2NrKTsKLQotCQlfX2k5MTVfZ2VtX2ZyZWVfb2JqZWN0cyhpOTE1LCBmcmVlZCk7Ci0J CWlmIChuZWVkX3Jlc2NoZWQoKSkKLQkJCXJldHVybjsKLQotCQlzcGluX2xvY2soJmk5MTUtPm1t LmZyZWVfbG9jayk7Ci0JfQotCXNwaW5fdW5sb2NrKCZpOTE1LT5tbS5mcmVlX2xvY2spOwotfQot Ci1zdGF0aWMgdm9pZCBfX2k5MTVfZ2VtX2ZyZWVfb2JqZWN0X3JjdShzdHJ1Y3QgcmN1X2hlYWQg KmhlYWQpCi17Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9Ci0JCWNvbnRhaW5l cl9vZihoZWFkLCB0eXBlb2YoKm9iaiksIHJjdSk7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg Kmk5MTUgPSB0b19pOTE1KG9iai0+YmFzZS5kZXYpOwotCi0JLyoKLQkgKiBXZSByZXVzZSBvYmot PnJjdSBmb3IgdGhlIGZyZWVkIGxpc3QsIHNvIHdlIGhhZCBiZXR0ZXIgbm90IHRyZWF0Ci0JICog aXQgbGlrZSBhIHJjdV9oZWFkIGZyb20gdGhpcyBwb2ludCBmb3J3YXJkcy4gQW5kIHdlIGV4cGVj dCBhbGwKLQkgKiBvYmplY3RzIHRvIGJlIGZyZWVkIHZpYSB0aGlzIHBhdGguCi0JICovCi0JZGVz dHJveV9yY3VfaGVhZCgmb2JqLT5yY3UpOwotCi0JLyoKLQkgKiBTaW5jZSB3ZSByZXF1aXJlIGJs b2NraW5nIG9uIHN0cnVjdF9tdXRleCB0byB1bmJpbmQgdGhlIGZyZWVkCi0JICogb2JqZWN0IGZy b20gdGhlIEdQVSBiZWZvcmUgcmVsZWFzaW5nIHJlc291cmNlcyBiYWNrIHRvIHRoZQotCSAqIHN5 c3RlbSwgd2UgY2FuIG5vdCBkbyB0aGF0IGRpcmVjdGx5IGZyb20gdGhlIFJDVSBjYWxsYmFjayAo d2hpY2ggbWF5Ci0JICogYmUgYSBzb2Z0aXJxIGNvbnRleHQpLCBidXQgbXVzdCBpbnN0ZWFkIHRo ZW4gZGVmZXIgdGhhdCB3b3JrIG9udG8gYQotCSAqIGt0aHJlYWQuIFdlIHVzZSB0aGUgUkNVIGNh bGxiYWNrIHJhdGhlciB0aGFuIG1vdmUgdGhlIGZyZWVkIG9iamVjdAotCSAqIGRpcmVjdGx5IG9u dG8gdGhlIHdvcmsgcXVldWUgc28gdGhhdCB3ZSBjYW4gbWl4IGJldHdlZW4gdXNpbmcgdGhlCi0J ICogd29ya2VyIGFuZCBwZXJmb3JtaW5nIGZyZWVzIGRpcmVjdGx5IGZyb20gc3Vic2VxdWVudCBh bGxvY2F0aW9ucyBmb3IKLQkgKiBjcnVkZSBidXQgZWZmZWN0aXZlIG1lbW9yeSB0aHJvdHRsaW5n LgotCSAqLwotCWlmIChsbGlzdF9hZGQoJm9iai0+ZnJlZWQsICZpOTE1LT5tbS5mcmVlX2xpc3Qp KQotCQlxdWV1ZV93b3JrKGk5MTUtPndxLCAmaTkxNS0+bW0uZnJlZV93b3JrKTsKLX0KLQotdm9p ZCBpOTE1X2dlbV9mcmVlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmopCi17 Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IHRvX2ludGVsX2JvKGdlbV9vYmop OwotCi0JaWYgKG9iai0+bW0ucXVpcmtlZCkKLQkJX19pOTE1X2dlbV9vYmplY3RfdW5waW5fcGFn ZXMob2JqKTsKLQotCWlmIChkaXNjYXJkX2JhY2tpbmdfc3RvcmFnZShvYmopKQotCQlvYmotPm1t Lm1hZHYgPSBJOTE1X01BRFZfRE9OVE5FRUQ7Ci0KLQkvKgotCSAqIEJlZm9yZSB3ZSBmcmVlIHRo ZSBvYmplY3QsIG1ha2Ugc3VyZSBhbnkgcHVyZSBSQ1Utb25seQotCSAqIHJlYWQtc2lkZSBjcml0 aWNhbCBzZWN0aW9ucyBhcmUgY29tcGxldGUsIGUuZy4KLQkgKiBpOTE1X2dlbV9idXN5X2lvY3Rs KCkuIEZvciB0aGUgY29ycmVzcG9uZGluZyBzeW5jaHJvbml6ZWQKLQkgKiBsb29rdXAgc2VlIGk5 MTVfZ2VtX29iamVjdF9sb29rdXBfcmN1KCkuCi0JICovCi0JYXRvbWljX2luYygmdG9faTkxNShv YmotPmJhc2UuZGV2KS0+bW0uZnJlZV9jb3VudCk7Ci0JY2FsbF9yY3UoJm9iai0+cmN1LCBfX2k5 MTVfZ2VtX2ZyZWVfb2JqZWN0X3JjdSk7Ci19Ci0KLXZvaWQgX19pOTE1X2dlbV9vYmplY3RfcmVs ZWFzZV91bmxlc3NfYWN0aXZlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCi17Ci0J bG9ja2RlcF9hc3NlcnRfaGVsZCgmb2JqLT5iYXNlLmRldi0+c3RydWN0X211dGV4KTsKLQotCWlm ICghaTkxNV9nZW1fb2JqZWN0X2hhc19hY3RpdmVfcmVmZXJlbmNlKG9iaikgJiYKLQkgICAgaTkx NV9nZW1fb2JqZWN0X2lzX2FjdGl2ZShvYmopKQotCQlpOTE1X2dlbV9vYmplY3Rfc2V0X2FjdGl2 ZV9yZWZlcmVuY2Uob2JqKTsKLQllbHNlCi0JCWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsKLX0K LQogdm9pZCBpOTE1X2dlbV9zYW5pdGl6ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkK IHsKIAlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKQEAgLTQ3MjUsNyArMzk2MCw3IEBAIHN0YXRp YyB2b2lkIGk5MTVfZ2VtX2luaXRfX21tKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQog CUlOSVRfTElTVF9IRUFEKCZpOTE1LT5tbS5mZW5jZV9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgm aTkxNS0+bW0udXNlcmZhdWx0X2xpc3QpOwogCi0JSU5JVF9XT1JLKCZpOTE1LT5tbS5mcmVlX3dv cmssIF9faTkxNV9nZW1fZnJlZV93b3JrKTsKKwlpOTE1X2dlbV9pbml0X19vYmplY3RzKGk5MTUp OwogfQogCiBpbnQgaTkxNV9nZW1faW5pdF9lYXJseShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpCkBAIC00ODkxLDU3ICs0MTI2LDYgQEAgdm9pZCBpOTE1X2dlbV90cmFja19mYihz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2xkLAogCX0KIH0KIAotLyogQWxsb2NhdGUgYSBu ZXcgR0VNIG9iamVjdCBhbmQgZmlsbCBpdCB3aXRoIHRoZSBzdXBwbGllZCBkYXRhICovCi1zdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqCi1pOTE1X2dlbV9vYmplY3RfY3JlYXRlX2Zyb21fZGF0 YShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkgICAgICAgICBjb25zdCB2 b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq b2JqOwotCXN0cnVjdCBmaWxlICpmaWxlOwotCXNpemVfdCBvZmZzZXQ7Ci0JaW50IGVycjsKLQot CW9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGUoZGV2X3ByaXYsIHJvdW5kX3VwKHNpemUsIFBB R0VfU0laRSkpOwotCWlmIChJU19FUlIob2JqKSkKLQkJcmV0dXJuIG9iajsKLQotCUdFTV9CVUdf T04ob2JqLT53cml0ZV9kb21haW4gIT0gSTkxNV9HRU1fRE9NQUlOX0NQVSk7Ci0KLQlmaWxlID0g b2JqLT5iYXNlLmZpbHA7Ci0Jb2Zmc2V0ID0gMDsKLQlkbyB7Ci0JCXVuc2lnbmVkIGludCBsZW4g PSBtaW5fdCh0eXBlb2Yoc2l6ZSksIHNpemUsIFBBR0VfU0laRSk7Ci0JCXN0cnVjdCBwYWdlICpw YWdlOwotCQl2b2lkICpwZ2RhdGEsICp2YWRkcjsKLQotCQllcnIgPSBwYWdlY2FjaGVfd3JpdGVf YmVnaW4oZmlsZSwgZmlsZS0+Zl9tYXBwaW5nLAotCQkJCQkgICAgb2Zmc2V0LCBsZW4sIDAsCi0J CQkJCSAgICAmcGFnZSwgJnBnZGF0YSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJZ290byBmYWlsOwot Ci0JCXZhZGRyID0ga21hcChwYWdlKTsKLQkJbWVtY3B5KHZhZGRyLCBkYXRhLCBsZW4pOwotCQlr dW5tYXAocGFnZSk7Ci0KLQkJZXJyID0gcGFnZWNhY2hlX3dyaXRlX2VuZChmaWxlLCBmaWxlLT5m X21hcHBpbmcsCi0JCQkJCSAgb2Zmc2V0LCBsZW4sIGxlbiwKLQkJCQkJICBwYWdlLCBwZ2RhdGEp OwotCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gZmFpbDsKLQotCQlzaXplIC09IGxlbjsKLQkJZGF0 YSArPSBsZW47Ci0JCW9mZnNldCArPSBsZW47Ci0JfSB3aGlsZSAoc2l6ZSk7Ci0KLQlyZXR1cm4g b2JqOwotCi1mYWlsOgotCWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsKLQlyZXR1cm4gRVJSX1BU UihlcnIpOwotfQotCiBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKgogaTkxNV9nZW1fb2JqZWN0X2dldF9z ZyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAogCQkgICAgICAgdW5zaWduZWQgaW50 IG4sCkBAIC01MTAzLDcgKzQyODcsNyBAQCBpbnQgaTkxNV9nZW1fb2JqZWN0X2F0dGFjaF9waHlz KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosIGludCBhbGlnbikKIAlpZiAob2JqLT5v cHMgPT0gJmk5MTVfZ2VtX3BoeXNfb3BzKQogCQlyZXR1cm4gMDsKIAotCWlmIChvYmotPm9wcyAh PSAmaTkxNV9nZW1fb2JqZWN0X29wcykKKwlpZiAob2JqLT5vcHMgIT0gJmk5MTVfZ2VtX3NobWVt X29wcykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAllcnIgPSBpOTE1X2dlbV9vYmplY3RfdW5iaW5k KG9iaik7CkBAIC01MTM5LDEyICs0MzIzLDEyIEBAIGludCBpOTE1X2dlbV9vYmplY3RfYXR0YWNo X3BoeXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwgaW50IGFsaWduKQogCV9faTkx NV9nZW1fb2JqZWN0X3Bpbl9wYWdlcyhvYmopOwogCiAJaWYgKCFJU19FUlJfT1JfTlVMTChwYWdl cykpCi0JCWk5MTVfZ2VtX29iamVjdF9vcHMucHV0X3BhZ2VzKG9iaiwgcGFnZXMpOworCQlpOTE1 X2dlbV9zaG1lbV9vcHMucHV0X3BhZ2VzKG9iaiwgcGFnZXMpOwogCW11dGV4X3VubG9jaygmb2Jq LT5tbS5sb2NrKTsKIAlyZXR1cm4gMDsKIAogZXJyX3hmZXI6Ci0Jb2JqLT5vcHMgPSAmaTkxNV9n ZW1fb2JqZWN0X29wczsKKwlvYmotPm9wcyA9ICZpOTE1X2dlbV9zaG1lbV9vcHM7CiAJaWYgKCFJ U19FUlJfT1JfTlVMTChwYWdlcykpIHsKIAkJdW5zaWduZWQgaW50IHNnX3BhZ2Vfc2l6ZXMgPSBp OTE1X3NnX3BhZ2Vfc2l6ZXMocGFnZXMtPnNnbCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfcGVyZi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wZXJmLmMK aW5kZXggYzQ5OTVkNWExNmQyLi4zNzlmZDg5YTE4MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfcGVyZi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGVy Zi5jCkBAIC0xNTEwLDcgKzE1MTAsNyBAQCBzdGF0aWMgaW50IGFsbG9jX29hX2J1ZmZlcihzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJQlVJTERfQlVHX09OX05PVF9QT1dFUl9P Rl8yKE9BX0JVRkZFUl9TSVpFKTsKIAlCVUlMRF9CVUdfT04oT0FfQlVGRkVSX1NJWkUgPCBTWl8x MjhLIHx8IE9BX0JVRkZFUl9TSVpFID4gU1pfMTZNKTsKIAotCWJvID0gaTkxNV9nZW1fb2JqZWN0 X2NyZWF0ZShkZXZfcHJpdiwgT0FfQlVGRkVSX1NJWkUpOworCWJvID0gaTkxNV9nZW1fb2JqZWN0 X2NyZWF0ZV9zaG1lbShkZXZfcHJpdiwgT0FfQlVGRkVSX1NJWkUpOwogCWlmIChJU19FUlIoYm8p KSB7CiAJCURSTV9FUlJPUigiRmFpbGVkIHRvIGFsbG9jYXRlIE9BIGJ1ZmZlclxuIik7CiAJCXJl dCA9IFBUUl9FUlIoYm8pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZmJkZXYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiZGV2LmMKaW5kZXggODlkYjcx OTk2MTQ4Li4wZDNhNmZhNjc0ZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2ZiZGV2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmJkZXYuYwpAQCAt MTQ0LDcgKzE0NCw3IEBAIHN0YXRpYyBpbnQgaW50ZWxmYl9hbGxvYyhzdHJ1Y3QgZHJtX2ZiX2hl bHBlciAqaGVscGVyLAogCWlmIChzaXplICogMiA8IGRldl9wcml2LT5zdG9sZW5fdXNhYmxlX3Np emUpCiAJCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfc3RvbGVuKGRldl9wcml2LCBzaXpl KTsKIAlpZiAob2JqID09IE5VTEwpCi0JCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGUoZGV2 X3ByaXYsIHNpemUpOworCQlvYmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX3NobWVtKGRldl9w cml2LCBzaXplKTsKIAlpZiAoSVNfRVJSKG9iaikpIHsKIAkJRFJNX0VSUk9SKCJmYWlsZWQgdG8g YWxsb2NhdGUgZnJhbWVidWZmZXJcbiIpOwogCQlyZXQgPSBQVFJfRVJSKG9iaik7CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2d1Yy5jCmluZGV4IGM0YWMyOTMwOWZjYy4uOThlNDVhNTAwYTE1IDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWMuYworKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9ndWMuYwpAQCAtNjkwLDcgKzY5MCw3IEBAIHN0cnVjdCBpOTE1X3ZtYSAq aW50ZWxfZ3VjX2FsbG9jYXRlX3ZtYShzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsIHUzMiBzaXplKQog CXU2NCBmbGFnczsKIAlpbnQgcmV0OwogCi0Jb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZShk ZXZfcHJpdiwgc2l6ZSk7CisJb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9zaG1lbShkZXZf cHJpdiwgc2l6ZSk7CiAJaWYgKElTX0VSUihvYmopKQogCQlyZXR1cm4gRVJSX0NBU1Qob2JqKTsK IApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdWNfZncuYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjX2Z3LmMKaW5kZXggYjljYjZmZWE5MzMyLi4zMjU3YTA1 NGNiMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjX2Z3LmMKKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdWNfZncuYwpAQCAtMTU5LDcgKzE1OSw4IEBA IHZvaWQgaW50ZWxfdWNfZndfZmV0Y2goc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 LAogCQlnb3RvIGZhaWw7CiAJfQogCi0Jb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9mcm9t X2RhdGEoZGV2X3ByaXYsIGZ3LT5kYXRhLCBmdy0+c2l6ZSk7CisJb2JqID0gaTkxNV9nZW1fb2Jq ZWN0X2NyZWF0ZV9zaG1lbV9mcm9tX2RhdGEoZGV2X3ByaXYsCisJCQkJCQkgICAgIGZ3LT5kYXRh LCBmdy0+c2l6ZSk7CiAJaWYgKElTX0VSUihvYmopKSB7CiAJCWVyciA9IFBUUl9FUlIob2JqKTsK IAkJRFJNX0RFQlVHX0RSSVZFUigiJXMgZncgb2JqZWN0X2NyZWF0ZSBlcnI9JWRcbiIsCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaHVnZV9wYWdlcy5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2h1Z2VfcGFnZXMuYwppbmRleCAxZTFmODMzMjZh OTYuLmNlNGVjODc2OThmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRl c3RzL2h1Z2VfcGFnZXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaHVn ZV9wYWdlcy5jCkBAIC0xMzkwLDcgKzEzOTAsNyBAQCBzdGF0aWMgaW50IGlndF9wcGd0dF9nZW1m c19odWdlKHZvaWQgKmFyZykKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzaXplcyk7ICsr aSkgewogCQl1bnNpZ25lZCBpbnQgc2l6ZSA9IHNpemVzW2ldOwogCi0JCW9iaiA9IGk5MTVfZ2Vt X29iamVjdF9jcmVhdGUoaTkxNSwgc2l6ZSk7CisJCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVh dGVfc2htZW0oaTkxNSwgc2l6ZSk7CiAJCWlmIChJU19FUlIob2JqKSkKIAkJCXJldHVybiBQVFJf RVJSKG9iaik7CiAKQEAgLTE1NjgsNyArMTU2OCw3IEBAIHN0YXRpYyBpbnQgaWd0X3RtcGZzX2Zh bGxiYWNrKHZvaWQgKmFyZykKIAogCWk5MTUtPm1tLmdlbWZzID0gTlVMTDsKIAotCW9iaiA9IGk5 MTVfZ2VtX29iamVjdF9jcmVhdGUoaTkxNSwgUEFHRV9TSVpFKTsKKwlvYmogPSBpOTE1X2dlbV9v YmplY3RfY3JlYXRlX3NobWVtKGk5MTUsIFBBR0VfU0laRSk7CiAJaWYgKElTX0VSUihvYmopKSB7 CiAJCWVyciA9IFBUUl9FUlIob2JqKTsKIAkJZ290byBvdXRfcmVzdG9yZTsKQEAgLTE2MjgsNyAr MTYyOCw3IEBAIHN0YXRpYyBpbnQgaWd0X3Nocmlua190aHAodm9pZCAqYXJnKQogCQlyZXR1cm4g MDsKIAl9CiAKLQlvYmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlKGk5MTUsIFNaXzJNKTsKKwlv YmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX3NobWVtKGk5MTUsIFNaXzJNKTsKIAlpZiAoSVNf RVJSKG9iaikpCiAJCXJldHVybiBQVFJfRVJSKG9iaik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9kbWFidWYuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9kbWFidWYuYwppbmRleCAyYjk0M2VlMjQ2YzkuLmNj NjVhNTAzZTJmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5 MTVfZ2VtX2RtYWJ1Zi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1 X2dlbV9kbWFidWYuYwpAQCAtMzMsNyArMzMsNyBAQCBzdGF0aWMgaW50IGlndF9kbWFidWZfZXhw b3J0KHZvaWQgKmFyZykKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwogCXN0cnVj dCBkbWFfYnVmICpkbWFidWY7CiAKLQlvYmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlKGk5MTUs IFBBR0VfU0laRSk7CisJb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9zaG1lbShpOTE1LCBQ QUdFX1NJWkUpOwogCWlmIChJU19FUlIob2JqKSkKIAkJcmV0dXJuIFBUUl9FUlIob2JqKTsKIApA QCAtNTcsNyArNTcsNyBAQCBzdGF0aWMgaW50IGlndF9kbWFidWZfaW1wb3J0X3NlbGYodm9pZCAq YXJnKQogCXN0cnVjdCBkbWFfYnVmICpkbWFidWY7CiAJaW50IGVycjsKIAotCW9iaiA9IGk5MTVf Z2VtX29iamVjdF9jcmVhdGUoaTkxNSwgUEFHRV9TSVpFKTsKKwlvYmogPSBpOTE1X2dlbV9vYmpl Y3RfY3JlYXRlX3NobWVtKGk5MTUsIFBBR0VfU0laRSk7CiAJaWYgKElTX0VSUihvYmopKQogCQly ZXR1cm4gUFRSX0VSUihvYmopOwogCkBAIC0yMzIsNyArMjMyLDcgQEAgc3RhdGljIGludCBpZ3Rf ZG1hYnVmX2V4cG9ydF92bWFwKHZvaWQgKmFyZykKIAl2b2lkICpwdHI7CiAJaW50IGVycjsKIAot CW9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGUoaTkxNSwgUEFHRV9TSVpFKTsKKwlvYmogPSBp OTE1X2dlbV9vYmplY3RfY3JlYXRlX3NobWVtKGk5MTUsIFBBR0VfU0laRSk7CiAJaWYgKElTX0VS UihvYmopKQogCQlyZXR1cm4gUFRSX0VSUihvYmopOwogCkBAIC0yNzksNyArMjc5LDcgQEAgc3Rh dGljIGludCBpZ3RfZG1hYnVmX2V4cG9ydF9rbWFwKHZvaWQgKmFyZykKIAl2b2lkICpwdHI7CiAJ aW50IGVycjsKIAotCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGUoaTkxNSwgMipQQUdFX1NJ WkUpOworCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfc2htZW0oaTkxNSwgMiAqIFBBR0Vf U0laRSk7CiAJaWYgKElTX0VSUihvYmopKQogCQlyZXR1cm4gUFRSX0VSUihvYmopOwogCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9nZW1fb2JqZWN0LmMg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9nZW1fb2JqZWN0LmMKaW5kZXgg MDg4YjJhYTA1ZGNkLi5mZjMxZmUwY2VjZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9vYmplY3QuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9zZWxmdGVzdHMvaTkxNV9nZW1fb2JqZWN0LmMKQEAgLTM2LDcgKzM2LDcgQEAgc3RhdGljIGlu dCBpZ3RfZ2VtX29iamVjdCh2b2lkICphcmcpCiAKIAkvKiBCYXNpYyB0ZXN0IHRvIGVuc3VyZSB3 ZSBjYW4gY3JlYXRlIGFuIG9iamVjdCAqLwogCi0Jb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0 ZShpOTE1LCBQQUdFX1NJWkUpOworCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfc2htZW0o aTkxNSwgUEFHRV9TSVpFKTsKIAlpZiAoSVNfRVJSKG9iaikpIHsKIAkJZXJyID0gUFRSX0VSUihv YmopOwogCQlwcl9lcnIoImk5MTVfZ2VtX29iamVjdF9jcmVhdGUgZmFpbGVkLCBlcnI9JWRcbiIs IGVycik7CkBAIC01OSw3ICs1OSw3IEBAIHN0YXRpYyBpbnQgaWd0X3BoeXNfb2JqZWN0KHZvaWQg KmFyZykKIAkgKiBpLmUuIGV4ZXJjaXNlIHRoZSBpOTE1X2dlbV9vYmplY3RfcGh5cyBBUEkuCiAJ ICovCiAKLQlvYmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlKGk5MTUsIFBBR0VfU0laRSk7CisJ b2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9zaG1lbShpOTE1LCBQQUdFX1NJWkUpOwogCWlm IChJU19FUlIob2JqKSkgewogCQllcnIgPSBQVFJfRVJSKG9iaik7CiAJCXByX2VycigiaTkxNV9n ZW1fb2JqZWN0X2NyZWF0ZSBmYWlsZWQsIGVycj0lZFxuIiwgZXJyKTsKLS0gCjIuMjAuMQoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1h aWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4