From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH 15/33] drm/i915: Move phys objects to its own file Date: Mon, 20 May 2019 09:01:09 +0100 Message-ID: <20190520080127.18255-15-chris@chris-wilson.co.uk> References: <20190520080127.18255-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 4CD278925D for ; Mon, 20 May 2019 08:03:29 +0000 (UTC) In-Reply-To: <20190520080127.18255-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 Q29udGludWluZyB0aGUgZGVjbHV0dGVyaW5nIG9mIGk5MTVfZ2VtLmMsIHRoaXMgdGltZSB0aGUg bGVnYWN5IHBoeXNpY2FsCm9iamVjdC4KClNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hy aXNAY2hyaXMtd2lsc29uLmNvLnVrPgpSZXZpZXdlZC1ieTogTWF0dGhldyBBdWxkIDxtYXR0aGV3 LmF1bGRAaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAgICAg ICAgICAgICAgICB8ICAgMiArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2Jq ZWN0LmggICAgfCAgMTEgKy0KIC4uLi9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdF90 eXBlcy5oICB8ICAgMiArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMu YyAgICAgfCA1MDkgKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVf Z2VtX3BoeXMuYyAgICAgIHwgMjExICsrKysrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5 MTVfZ2VtX3NobWVtLmMgICAgIHwgIDYxICsrCiAuLi4vZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9p OTE1X2dlbV9waHlzLmMgICAgfCAgODAgKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2 LmggICAgICAgICAgICAgICB8ICAgMiAtCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5j ICAgICAgICAgICAgICAgfCA2OTkgKy0tLS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbV9zaHJpbmtlci5jICAgICAgfCAgNTkgKy0KIC4uLi9ncHUvZHJtL2k5MTUv c2VsZnRlc3RzL2k5MTVfZ2VtX29iamVjdC5jICB8ICA1NCAtLQogLi4uL2RybS9pOTE1L3NlbGZ0 ZXN0cy9pOTE1X21vY2tfc2VsZnRlc3RzLmggIHwgICAxICsKIDEyIGZpbGVzIGNoYW5nZWQsIDg4 MyBpbnNlcnRpb25zKCspLCA4MDggZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3BhZ2VzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGh5cy5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9waHlzLmMK CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L01ha2VmaWxlCmluZGV4IDYyNWY5NzQ5MzU1Yi4uYmEzYjgyZjNjZDQ5IDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9NYWtlZmlsZQpAQCAtODgsNiArODgsOCBAQCBpOTE1LXkgKz0gJChndC15KQogb2Jq LXkgKz0gZ2VtLwogZ2VtLXkgKz0gXAogCWdlbS9pOTE1X2dlbV9vYmplY3QubyBcCisJZ2VtL2k5 MTVfZ2VtX3BhZ2VzLm8gXAorCWdlbS9pOTE1X2dlbV9waHlzLm8gXAogCWdlbS9pOTE1X2dlbV9z aG1lbS5vCiBpOTE1LXkgKz0gXAogCSAgJChnZW0teSkgXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z2VtL2k5MTVfZ2VtX29iamVjdC5oCmluZGV4IGFkODIzMDNmNzQxYS4uMmU5NjNhNTkzMjQ1IDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmgKKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5oCkBAIC0zMywxMSAr MzMsMTcgQEAgdm9pZCBfX2k5MTVfZ2VtX29iamVjdF9yZWxlYXNlX3NobWVtKHN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpvYmosCiAJCQkJICAgICBzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzLAog CQkJCSAgICAgYm9vbCBuZWVkc19jbGZsdXNoKTsKIAoraW50IGk5MTVfZ2VtX29iamVjdF9hdHRh Y2hfcGh5cyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLCBpbnQgYWxpZ24pOworCiB2 b2lkIGk5MTVfZ2VtX2Nsb3NlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbSwgc3Ry dWN0IGRybV9maWxlICpmaWxlKTsKIHZvaWQgaTkxNV9nZW1fZnJlZV9vYmplY3Qoc3RydWN0IGRy bV9nZW1fb2JqZWN0ICpvYmopOwogCiB2b2lkIGk5MTVfZ2VtX2ZsdXNoX2ZyZWVfb2JqZWN0cyhz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7CiAKK3N0cnVjdCBzZ190YWJsZSAqCitfX2k5 MTVfZ2VtX29iamVjdF91bnNldF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2Jq KTsKK3ZvaWQgaTkxNV9nZW1fb2JqZWN0X3RydW5jYXRlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmopOworCiAvKioKICAqIGk5MTVfZ2VtX29iamVjdF9sb29rdXBfcmN1IC0gbG9vayB1 cCBhIHRlbXBvcmFyeSBHRU0gb2JqZWN0IGZyb20gaXRzIGhhbmRsZQogICogQGZpbHA6IERSTSBm aWxlIHByaXZhdGUgZGF0ZQpAQCAtMjMxLDYgKzIzNyw4IEBAIGk5MTVfZ2VtX29iamVjdF9nZXRf ZG1hX2FkZHJlc3Moc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIHZvaWQgX19pOTE1 X2dlbV9vYmplY3Rfc2V0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCiAJ CQkJIHN0cnVjdCBzZ190YWJsZSAqcGFnZXMsCiAJCQkJIHVuc2lnbmVkIGludCBzZ19wYWdlX3Np emVzKTsKKworaW50IF9fX19pOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzKHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmopOwogaW50IF9faTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlcyhzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKTsKIAogc3RhdGljIGlubGluZSBpbnQgX19tdXN0 X2NoZWNrCkBAIC0yODYsNyArMjk0LDggQEAgZW51bSBpOTE1X21tX3N1YmNsYXNzIHsgLyogbG9j a2RlcCBzdWJjbGFzcyBmb3Igb2JqLT5tbS5sb2NrL3N0cnVjdF9tdXRleCAqLwogCiBpbnQgX19p OTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmos CiAJCQkJZW51bSBpOTE1X21tX3N1YmNsYXNzIHN1YmNsYXNzKTsKLXZvaWQgX19pOTE1X2dlbV9v YmplY3RfdHJ1bmNhdGUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7Cit2b2lkIGk5 MTVfZ2VtX29iamVjdF90cnVuY2F0ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKTsK K3ZvaWQgaTkxNV9nZW1fb2JqZWN0X3dyaXRlYmFjayhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqKTsKIAogZW51bSBpOTE1X21hcF90eXBlIHsKIAlJOTE1X01BUF9XQiA9IDAsCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0X3R5cGVzLmgg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0X3R5cGVzLmgKaW5kZXgg ZmUzYjJhMjc3NWY3Li5kZjhlMjllZTM5NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2dlbS9pOTE1X2dlbV9vYmplY3RfdHlwZXMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9nZW0vaTkxNV9nZW1fb2JqZWN0X3R5cGVzLmgKQEAgLTUyLDYgKzUyLDggQEAgc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3Rfb3BzIHsKIAlpbnQgKCpnZXRfcGFnZXMpKHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmopOwogCXZvaWQgKCpwdXRfcGFnZXMpKHN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpvYmosCiAJCQkgIHN0cnVjdCBzZ190YWJsZSAqcGFnZXMpOworCXZvaWQgKCp0 cnVuY2F0ZSkoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7CisJdm9pZCAoKndyaXRl YmFjaykoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7CiAKIAlpbnQgKCpwd3JpdGUp KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCiAJCSAgICAgIGNvbnN0IHN0cnVjdCBk cm1faTkxNV9nZW1fcHdyaXRlICphcmcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ2VtL2k5MTVfZ2VtX3BhZ2VzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9n ZW1fcGFnZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmRiZjNl YjQwMGM5ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1 X2dlbV9wYWdlcy5jCkBAIC0wLDAgKzEsNTA5IEBACisvKgorICogU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IE1JVAorICoKKyAqIENvcHlyaWdodCDCqSAyMDE0LTIwMTYgSW50ZWwgQ29ycG9yYXRp b24KKyAqLworCisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKyNpbmNsdWRlICJpOTE1X2dlbV9vYmpl Y3QuaCIKKwordm9pZCBfX2k5MTVfZ2VtX29iamVjdF9zZXRfcGFnZXMoc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iaiwKKwkJCQkgc3RydWN0IHNnX3RhYmxlICpwYWdlcywKKwkJCQkgdW5z aWduZWQgaW50IHNnX3BhZ2Vfc2l6ZXMpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTUgPSB0b19pOTE1KG9iai0+YmFzZS5kZXYpOworCXVuc2lnbmVkIGxvbmcgc3VwcG9ydGVkID0g SU5URUxfSU5GTyhpOTE1KS0+cGFnZV9zaXplczsKKwlpbnQgaTsKKworCWxvY2tkZXBfYXNzZXJ0 X2hlbGQoJm9iai0+bW0ubG9jayk7CisKKwkvKiBNYWtlIHRoZSBwYWdlcyBjb2hlcmVudCB3aXRo IHRoZSBHUFUgKGZsdXNoaW5nIGFueSBzd2FwaW4pLiAqLworCWlmIChvYmotPmNhY2hlX2RpcnR5 KSB7CisJCW9iai0+d3JpdGVfZG9tYWluID0gMDsKKwkJaWYgKGk5MTVfZ2VtX29iamVjdF9oYXNf c3RydWN0X3BhZ2Uob2JqKSkKKwkJCWRybV9jbGZsdXNoX3NnKHBhZ2VzKTsKKwkJb2JqLT5jYWNo ZV9kaXJ0eSA9IGZhbHNlOworCX0KKworCW9iai0+bW0uZ2V0X3BhZ2Uuc2dfcG9zID0gcGFnZXMt PnNnbDsKKwlvYmotPm1tLmdldF9wYWdlLnNnX2lkeCA9IDA7CisKKwlvYmotPm1tLnBhZ2VzID0g cGFnZXM7CisKKwlpZiAoaTkxNV9nZW1fb2JqZWN0X2lzX3RpbGVkKG9iaikgJiYKKwkgICAgaTkx NS0+cXVpcmtzICYgUVVJUktfUElOX1NXSVpaTEVEX1BBR0VTKSB7CisJCUdFTV9CVUdfT04ob2Jq LT5tbS5xdWlya2VkKTsKKwkJX19pOTE1X2dlbV9vYmplY3RfcGluX3BhZ2VzKG9iaik7CisJCW9i ai0+bW0ucXVpcmtlZCA9IHRydWU7CisJfQorCisJR0VNX0JVR19PTighc2dfcGFnZV9zaXplcyk7 CisJb2JqLT5tbS5wYWdlX3NpemVzLnBoeXMgPSBzZ19wYWdlX3NpemVzOworCisJLyoKKwkgKiBD YWxjdWxhdGUgdGhlIHN1cHBvcnRlZCBwYWdlLXNpemVzIHdoaWNoIGZpdCBpbnRvIHRoZSBnaXZl bgorCSAqIHNnX3BhZ2Vfc2l6ZXMuIFRoaXMgd2lsbCBnaXZlIHVzIHRoZSBwYWdlLXNpemVzIHdo aWNoIHdlIG1heSBiZSBhYmxlCisJICogdG8gdXNlIG9wcG9ydHVuaXN0aWNhbGx5IHdoZW4gbGF0 ZXIgaW5zZXJ0aW5nIGludG8gdGhlIEdUVC4gRm9yCisJICogZXhhbXBsZSBpZiBwaHlzPTJHLCB0 aGVuIGluIHRoZW9yeSB3ZSBzaG91bGQgYmUgYWJsZSB0byB1c2UgMUcsIDJNLAorCSAqIDY0SyBv ciA0SyBwYWdlcywgYWx0aG91Z2ggaW4gcHJhY3RpY2UgdGhpcyB3aWxsIGRlcGVuZCBvbiBhIG51 bWJlciBvZgorCSAqIG90aGVyIGZhY3RvcnMuCisJICovCisJb2JqLT5tbS5wYWdlX3NpemVzLnNn ID0gMDsKKwlmb3JfZWFjaF9zZXRfYml0KGksICZzdXBwb3J0ZWQsIGlsb2cyKEk5MTVfR1RUX01B WF9QQUdFX1NJWkUpICsgMSkgeworCQlpZiAob2JqLT5tbS5wYWdlX3NpemVzLnBoeXMgJiB+MHUg PDwgaSkKKwkJCW9iai0+bW0ucGFnZV9zaXplcy5zZyB8PSBCSVQoaSk7CisJfQorCUdFTV9CVUdf T04oIUhBU19QQUdFX1NJWkVTKGk5MTUsIG9iai0+bW0ucGFnZV9zaXplcy5zZykpOworCisJc3Bp bl9sb2NrKCZpOTE1LT5tbS5vYmpfbG9jayk7CisJbGlzdF9hZGQoJm9iai0+bW0ubGluaywgJmk5 MTUtPm1tLnVuYm91bmRfbGlzdCk7CisJc3Bpbl91bmxvY2soJmk5MTUtPm1tLm9ial9sb2NrKTsK K30KKworaW50IF9fX19pOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpvYmopCit7CisJaW50IGVycjsKKworCWlmICh1bmxpa2VseShvYmotPm1tLm1h ZHYgIT0gSTkxNV9NQURWX1dJTExORUVEKSkgeworCQlEUk1fREVCVUcoIkF0dGVtcHRpbmcgdG8g b2J0YWluIGEgcHVyZ2VhYmxlIG9iamVjdFxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwor CWVyciA9IG9iai0+b3BzLT5nZXRfcGFnZXMob2JqKTsKKwlHRU1fQlVHX09OKCFlcnIgJiYgIWk5 MTVfZ2VtX29iamVjdF9oYXNfcGFnZXMob2JqKSk7CisKKwlyZXR1cm4gZXJyOworfQorCisvKiBF bnN1cmUgdGhhdCB0aGUgYXNzb2NpYXRlZCBwYWdlcyBhcmUgZ2F0aGVyZWQgZnJvbSB0aGUgYmFj a2luZyBzdG9yYWdlCisgKiBhbmQgcGlubmVkIGludG8gb3VyIG9iamVjdC4gaTkxNV9nZW1fb2Jq ZWN0X3Bpbl9wYWdlcygpIG1heSBiZSBjYWxsZWQKKyAqIG11bHRpcGxlIHRpbWVzIGJlZm9yZSB0 aGV5IGFyZSByZWxlYXNlZCBieSBhIHNpbmdsZSBjYWxsIHRvCisgKiBpOTE1X2dlbV9vYmplY3Rf dW5waW5fcGFnZXMoKSAtIG9uY2UgdGhlIHBhZ2VzIGFyZSBubyBsb25nZXIgcmVmZXJlbmNlZAor ICogZWl0aGVyIGFzIGEgcmVzdWx0IG9mIG1lbW9yeSBwcmVzc3VyZSAocmVhcGluZyBwYWdlcyB1 bmRlciB0aGUgc2hyaW5rZXIpCisgKiBvciBhcyB0aGUgb2JqZWN0IGlzIGl0c2VsZiByZWxlYXNl ZC4KKyAqLworaW50IF9faTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqKQoreworCWludCBlcnI7CisKKwllcnIgPSBtdXRleF9sb2NrX2ludGVy cnVwdGlibGUoJm9iai0+bW0ubG9jayk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlm ICh1bmxpa2VseSghaTkxNV9nZW1fb2JqZWN0X2hhc19wYWdlcyhvYmopKSkgeworCQlHRU1fQlVH X09OKGk5MTVfZ2VtX29iamVjdF9oYXNfcGlubmVkX3BhZ2VzKG9iaikpOworCisJCWVyciA9IF9f X19pOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzKG9iaik7CisJCWlmIChlcnIpCisJCQlnb3RvIHVu bG9jazsKKworCQlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKKwl9CisJYXRvbWljX2luYygmb2Jq LT5tbS5wYWdlc19waW5fY291bnQpOworCit1bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZvYmotPm1t LmxvY2spOworCXJldHVybiBlcnI7Cit9CisKKy8qIEltbWVkaWF0ZWx5IGRpc2NhcmQgdGhlIGJh Y2tpbmcgc3RvcmFnZSAqLwordm9pZCBpOTE1X2dlbV9vYmplY3RfdHJ1bmNhdGUoc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKm9iaikKK3sKKwlkcm1fZ2VtX2ZyZWVfbW1hcF9vZmZzZXQoJm9i ai0+YmFzZSk7CisJaWYgKG9iai0+b3BzLT50cnVuY2F0ZSkKKwkJb2JqLT5vcHMtPnRydW5jYXRl KG9iaik7Cit9CisKKy8qIFRyeSB0byBkaXNjYXJkIHVud2FudGVkIHBhZ2VzICovCit2b2lkIGk5 MTVfZ2VtX29iamVjdF93cml0ZWJhY2soc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikK K3sKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZvYmotPm1tLmxvY2spOworCUdFTV9CVUdfT04oaTkx NV9nZW1fb2JqZWN0X2hhc19wYWdlcyhvYmopKTsKKworCWlmIChvYmotPm9wcy0+d3JpdGViYWNr KQorCQlvYmotPm9wcy0+d3JpdGViYWNrKG9iaik7Cit9CisKK3N0YXRpYyB2b2lkIF9faTkxNV9n ZW1fb2JqZWN0X3Jlc2V0X3BhZ2VfaXRlcihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2Jq KQoreworCXN0cnVjdCByYWRpeF90cmVlX2l0ZXIgaXRlcjsKKwl2b2lkIF9fcmN1ICoqc2xvdDsK KworCXJjdV9yZWFkX2xvY2soKTsKKwlyYWRpeF90cmVlX2Zvcl9lYWNoX3Nsb3Qoc2xvdCwgJm9i ai0+bW0uZ2V0X3BhZ2UucmFkaXgsICZpdGVyLCAwKQorCQlyYWRpeF90cmVlX2RlbGV0ZSgmb2Jq LT5tbS5nZXRfcGFnZS5yYWRpeCwgaXRlci5pbmRleCk7CisJcmN1X3JlYWRfdW5sb2NrKCk7Cit9 CisKK3N0cnVjdCBzZ190YWJsZSAqCitfX2k5MTVfZ2VtX29iamVjdF91bnNldF9wYWdlcyhzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1ID0gdG9faTkxNShvYmotPmJhc2UuZGV2KTsKKwlzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2Vz OworCisJcGFnZXMgPSBmZXRjaF9hbmRfemVybygmb2JqLT5tbS5wYWdlcyk7CisJaWYgKElTX0VS Ul9PUl9OVUxMKHBhZ2VzKSkKKwkJcmV0dXJuIHBhZ2VzOworCisJc3Bpbl9sb2NrKCZpOTE1LT5t bS5vYmpfbG9jayk7CisJbGlzdF9kZWwoJm9iai0+bW0ubGluayk7CisJc3Bpbl91bmxvY2soJmk5 MTUtPm1tLm9ial9sb2NrKTsKKworCWlmIChvYmotPm1tLm1hcHBpbmcpIHsKKwkJdm9pZCAqcHRy OworCisJCXB0ciA9IHBhZ2VfbWFza19iaXRzKG9iai0+bW0ubWFwcGluZyk7CisJCWlmIChpc192 bWFsbG9jX2FkZHIocHRyKSkKKwkJCXZ1bm1hcChwdHIpOworCQllbHNlCisJCQlrdW5tYXAoa21h cF90b19wYWdlKHB0cikpOworCisJCW9iai0+bW0ubWFwcGluZyA9IE5VTEw7CisJfQorCisJX19p OTE1X2dlbV9vYmplY3RfcmVzZXRfcGFnZV9pdGVyKG9iaik7CisJb2JqLT5tbS5wYWdlX3NpemVz LnBoeXMgPSBvYmotPm1tLnBhZ2Vfc2l6ZXMuc2cgPSAwOworCisJcmV0dXJuIHBhZ2VzOworfQor CitpbnQgX19pOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmosCisJCQkJZW51bSBpOTE1X21tX3N1YmNsYXNzIHN1YmNsYXNzKQoreworCXN0cnVj dCBzZ190YWJsZSAqcGFnZXM7CisJaW50IGVycjsKKworCWlmIChpOTE1X2dlbV9vYmplY3RfaGFz X3Bpbm5lZF9wYWdlcyhvYmopKQorCQlyZXR1cm4gLUVCVVNZOworCisJR0VNX0JVR19PTihvYmot PmJpbmRfY291bnQpOworCisJLyogTWF5IGJlIGNhbGxlZCBieSBzaHJpbmtlciBmcm9tIHdpdGhp biBnZXRfcGFnZXMoKSAob24gYW5vdGhlciBibykgKi8KKwltdXRleF9sb2NrX25lc3RlZCgmb2Jq LT5tbS5sb2NrLCBzdWJjbGFzcyk7CisJaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZvYmotPm1t LnBhZ2VzX3Bpbl9jb3VudCkpKSB7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byB1bmxvY2s7CisJ fQorCisJLyoKKwkgKiAtPnB1dF9wYWdlcyBtaWdodCBuZWVkIHRvIGFsbG9jYXRlIG1lbW9yeSBm b3IgdGhlIGJpdDE3IHN3aXp6bGUKKwkgKiBhcnJheSwgaGVuY2UgcHJvdGVjdCB0aGVtIGZyb20g YmVpbmcgcmVhcGVkIGJ5IHJlbW92aW5nIHRoZW0gZnJvbSBndHQKKwkgKiBsaXN0cyBlYXJseS4K KwkgKi8KKwlwYWdlcyA9IF9faTkxNV9nZW1fb2JqZWN0X3Vuc2V0X3BhZ2VzKG9iaik7CisKKwkv KgorCSAqIFhYWCBUZW1wb3JhcnkgaGlqaW54IHRvIGF2b2lkIHVwZGF0aW5nIGFsbCBiYWNrZW5k cyB0byBoYW5kbGUKKwkgKiBOVUxMIHBhZ2VzLiBJbiB0aGUgZnV0dXJlLCB3aGVuIHdlIGhhdmUg bW9yZSBhc3luY2hyb25vdXMKKwkgKiBnZXRfcGFnZXMgYmFja2VuZHMgd2Ugc2hvdWxkIGJlIGJl dHRlciBhYmxlIHRvIGhhbmRsZSB0aGUKKwkgKiBjYW5jZWxsYXRpb24gb2YgdGhlIGFzeW5jIHRh c2sgaW4gYSBtb3JlIHVuaWZvcm0gbWFubmVyLgorCSAqLworCWlmICghcGFnZXMgJiYgIWk5MTVf Z2VtX29iamVjdF9uZWVkc19hc3luY19jYW5jZWwob2JqKSkKKwkJcGFnZXMgPSBFUlJfUFRSKC1F SU5WQUwpOworCisJaWYgKCFJU19FUlIocGFnZXMpKQorCQlvYmotPm9wcy0+cHV0X3BhZ2VzKG9i aiwgcGFnZXMpOworCisJZXJyID0gMDsKK3VubG9jazoKKwltdXRleF91bmxvY2soJm9iai0+bW0u bG9jayk7CisKKwlyZXR1cm4gZXJyOworfQorCisvKiBUaGUgJ21hcHBpbmcnIHBhcnQgb2YgaTkx NV9nZW1fb2JqZWN0X3Bpbl9tYXAoKSBiZWxvdyAqLworc3RhdGljIHZvaWQgKmk5MTVfZ2VtX29i amVjdF9tYXAoY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKKwkJCQkgZW51 bSBpOTE1X21hcF90eXBlIHR5cGUpCit7CisJdW5zaWduZWQgbG9uZyBuX3BhZ2VzID0gb2JqLT5i YXNlLnNpemUgPj4gUEFHRV9TSElGVDsKKwlzdHJ1Y3Qgc2dfdGFibGUgKnNndCA9IG9iai0+bW0u cGFnZXM7CisJc3RydWN0IHNndF9pdGVyIHNndF9pdGVyOworCXN0cnVjdCBwYWdlICpwYWdlOwor CXN0cnVjdCBwYWdlICpzdGFja19wYWdlc1szMl07CisJc3RydWN0IHBhZ2UgKipwYWdlcyA9IHN0 YWNrX3BhZ2VzOworCXVuc2lnbmVkIGxvbmcgaSA9IDA7CisJcGdwcm90X3QgcGdwcm90OworCXZv aWQgKmFkZHI7CisKKwkvKiBBIHNpbmdsZSBwYWdlIGNhbiBhbHdheXMgYmUga21hcHBlZCAqLwor CWlmIChuX3BhZ2VzID09IDEgJiYgdHlwZSA9PSBJOTE1X01BUF9XQikKKwkJcmV0dXJuIGttYXAo c2dfcGFnZShzZ3QtPnNnbCkpOworCisJaWYgKG5fcGFnZXMgPiBBUlJBWV9TSVpFKHN0YWNrX3Bh Z2VzKSkgeworCQkvKiBUb28gYmlnIGZvciBzdGFjayAtLSBhbGxvY2F0ZSB0ZW1wb3JhcnkgYXJy YXkgaW5zdGVhZCAqLworCQlwYWdlcyA9IGt2bWFsbG9jX2FycmF5KG5fcGFnZXMsIHNpemVvZigq cGFnZXMpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwYWdlcykKKwkJCXJldHVybiBOVUxMOworCX0K KworCWZvcl9lYWNoX3NndF9wYWdlKHBhZ2UsIHNndF9pdGVyLCBzZ3QpCisJCXBhZ2VzW2krK10g PSBwYWdlOworCisJLyogQ2hlY2sgdGhhdCB3ZSBoYXZlIHRoZSBleHBlY3RlZCBudW1iZXIgb2Yg cGFnZXMgKi8KKwlHRU1fQlVHX09OKGkgIT0gbl9wYWdlcyk7CisKKwlzd2l0Y2ggKHR5cGUpIHsK KwlkZWZhdWx0OgorCQlNSVNTSU5HX0NBU0UodHlwZSk7CisJCS8qIGZhbGx0aHJvdWdoIHRvIHVz ZSBQQUdFX0tFUk5FTCBhbnl3YXkgKi8KKwljYXNlIEk5MTVfTUFQX1dCOgorCQlwZ3Byb3QgPSBQ QUdFX0tFUk5FTDsKKwkJYnJlYWs7CisJY2FzZSBJOTE1X01BUF9XQzoKKwkJcGdwcm90ID0gcGdw cm90X3dyaXRlY29tYmluZShQQUdFX0tFUk5FTF9JTyk7CisJCWJyZWFrOworCX0KKwlhZGRyID0g dm1hcChwYWdlcywgbl9wYWdlcywgMCwgcGdwcm90KTsKKworCWlmIChwYWdlcyAhPSBzdGFja19w YWdlcykKKwkJa3ZmcmVlKHBhZ2VzKTsKKworCXJldHVybiBhZGRyOworfQorCisvKiBnZXQsIHBp biwgYW5kIG1hcCB0aGUgcGFnZXMgb2YgdGhlIG9iamVjdCBpbnRvIGtlcm5lbCBzcGFjZSAqLwor dm9pZCAqaTkxNV9nZW1fb2JqZWN0X3Bpbl9tYXAoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iaiwKKwkJCSAgICAgIGVudW0gaTkxNV9tYXBfdHlwZSB0eXBlKQoreworCWVudW0gaTkxNV9t YXBfdHlwZSBoYXNfdHlwZTsKKwlib29sIHBpbm5lZDsKKwl2b2lkICpwdHI7CisJaW50IGVycjsK KworCWlmICh1bmxpa2VseSghaTkxNV9nZW1fb2JqZWN0X2hhc19zdHJ1Y3RfcGFnZShvYmopKSkK KwkJcmV0dXJuIEVSUl9QVFIoLUVOWElPKTsKKworCWVyciA9IG11dGV4X2xvY2tfaW50ZXJydXB0 aWJsZSgmb2JqLT5tbS5sb2NrKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gRVJSX1BUUihlcnIpOwor CisJcGlubmVkID0gISh0eXBlICYgSTkxNV9NQVBfT1ZFUlJJREUpOworCXR5cGUgJj0gfkk5MTVf TUFQX09WRVJSSURFOworCisJaWYgKCFhdG9taWNfaW5jX25vdF96ZXJvKCZvYmotPm1tLnBhZ2Vz X3Bpbl9jb3VudCkpIHsKKwkJaWYgKHVubGlrZWx5KCFpOTE1X2dlbV9vYmplY3RfaGFzX3BhZ2Vz KG9iaikpKSB7CisJCQlHRU1fQlVHX09OKGk5MTVfZ2VtX29iamVjdF9oYXNfcGlubmVkX3BhZ2Vz KG9iaikpOworCisJCQllcnIgPSBfX19faTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlcyhvYmopOwor CQkJaWYgKGVycikKKwkJCQlnb3RvIGVycl91bmxvY2s7CisKKwkJCXNtcF9tYl9fYmVmb3JlX2F0 b21pYygpOworCQl9CisJCWF0b21pY19pbmMoJm9iai0+bW0ucGFnZXNfcGluX2NvdW50KTsKKwkJ cGlubmVkID0gZmFsc2U7CisJfQorCUdFTV9CVUdfT04oIWk5MTVfZ2VtX29iamVjdF9oYXNfcGFn ZXMob2JqKSk7CisKKwlwdHIgPSBwYWdlX3VucGFja19iaXRzKG9iai0+bW0ubWFwcGluZywgJmhh c190eXBlKTsKKwlpZiAocHRyICYmIGhhc190eXBlICE9IHR5cGUpIHsKKwkJaWYgKHBpbm5lZCkg eworCQkJZXJyID0gLUVCVVNZOworCQkJZ290byBlcnJfdW5waW47CisJCX0KKworCQlpZiAoaXNf dm1hbGxvY19hZGRyKHB0cikpCisJCQl2dW5tYXAocHRyKTsKKwkJZWxzZQorCQkJa3VubWFwKGtt YXBfdG9fcGFnZShwdHIpKTsKKworCQlwdHIgPSBvYmotPm1tLm1hcHBpbmcgPSBOVUxMOworCX0K KworCWlmICghcHRyKSB7CisJCXB0ciA9IGk5MTVfZ2VtX29iamVjdF9tYXAob2JqLCB0eXBlKTsK KwkJaWYgKCFwdHIpIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIGVycl91bnBpbjsKKwkJ fQorCisJCW9iai0+bW0ubWFwcGluZyA9IHBhZ2VfcGFja19iaXRzKHB0ciwgdHlwZSk7CisJfQor CitvdXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmb2JqLT5tbS5sb2NrKTsKKwlyZXR1cm4gcHRy OworCitlcnJfdW5waW46CisJYXRvbWljX2RlYygmb2JqLT5tbS5wYWdlc19waW5fY291bnQpOwor ZXJyX3VubG9jazoKKwlwdHIgPSBFUlJfUFRSKGVycik7CisJZ290byBvdXRfdW5sb2NrOworfQor Cit2b2lkIF9faTkxNV9nZW1fb2JqZWN0X2ZsdXNoX21hcChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqLAorCQkJCSB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQkgdW5zaWduZWQgbG9u ZyBzaXplKQoreworCWVudW0gaTkxNV9tYXBfdHlwZSBoYXNfdHlwZTsKKwl2b2lkICpwdHI7CisK KwlHRU1fQlVHX09OKCFpOTE1X2dlbV9vYmplY3RfaGFzX3Bpbm5lZF9wYWdlcyhvYmopKTsKKwlH RU1fQlVHX09OKHJhbmdlX292ZXJmbG93c190KHR5cGVvZihvYmotPmJhc2Uuc2l6ZSksCisJCQkJ ICAgICBvZmZzZXQsIHNpemUsIG9iai0+YmFzZS5zaXplKSk7CisKKwlvYmotPm1tLmRpcnR5ID0g dHJ1ZTsKKworCWlmIChvYmotPmNhY2hlX2NvaGVyZW50ICYgSTkxNV9CT19DQUNIRV9DT0hFUkVO VF9GT1JfV1JJVEUpCisJCXJldHVybjsKKworCXB0ciA9IHBhZ2VfdW5wYWNrX2JpdHMob2JqLT5t bS5tYXBwaW5nLCAmaGFzX3R5cGUpOworCWlmIChoYXNfdHlwZSA9PSBJOTE1X01BUF9XQykKKwkJ cmV0dXJuOworCisJZHJtX2NsZmx1c2hfdmlydF9yYW5nZShwdHIgKyBvZmZzZXQsIHNpemUpOwor CWlmIChzaXplID09IG9iai0+YmFzZS5zaXplKSB7CisJCW9iai0+d3JpdGVfZG9tYWluICY9IH5J OTE1X0dFTV9ET01BSU5fQ1BVOworCQlvYmotPmNhY2hlX2RpcnR5ID0gZmFsc2U7CisJfQorfQor CitzdHJ1Y3Qgc2NhdHRlcmxpc3QgKgoraTkxNV9nZW1fb2JqZWN0X2dldF9zZyhzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkgICAgICAgdW5zaWduZWQgaW50IG4sCisJCSAgICAg ICB1bnNpZ25lZCBpbnQgKm9mZnNldCkKK3sKKwlzdHJ1Y3QgaTkxNV9nZW1fb2JqZWN0X3BhZ2Vf aXRlciAqaXRlciA9ICZvYmotPm1tLmdldF9wYWdlOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7 CisJdW5zaWduZWQgaW50IGlkeCwgY291bnQ7CisKKwltaWdodF9zbGVlcCgpOworCUdFTV9CVUdf T04obiA+PSBvYmotPmJhc2Uuc2l6ZSA+PiBQQUdFX1NISUZUKTsKKwlHRU1fQlVHX09OKCFpOTE1 X2dlbV9vYmplY3RfaGFzX3Bpbm5lZF9wYWdlcyhvYmopKTsKKworCS8qIEFzIHdlIGl0ZXJhdGUg Zm9yd2FyZCB0aHJvdWdoIHRoZSBzZywgd2UgcmVjb3JkIGVhY2ggZW50cnkgaW4gYQorCSAqIHJh ZGl4dHJlZSBmb3IgcXVpY2sgcmVwZWF0ZWQgKGJhY2t3YXJkcykgbG9va3Vwcy4gSWYgd2UgaGF2 ZSBzZWVuCisJICogdGhpcyBpbmRleCBwcmV2aW91c2x5LCB3ZSB3aWxsIGhhdmUgYW4gZW50cnkg Zm9yIGl0LgorCSAqCisJICogSW5pdGlhbCBsb29rdXAgaXMgTyhOKSwgYnV0IHRoaXMgaXMgYW1v cnRpemVkIHRvIE8oMSkgZm9yCisJICogc2VxdWVudGlhbCBwYWdlIGFjY2VzcyAod2hlcmUgZWFj aCBuZXcgcmVxdWVzdCBpcyBjb25zZWN1dGl2ZQorCSAqIHRvIHRoZSBwcmV2aW91cyBvbmUpLiBS ZXBlYXRlZCBsb29rdXBzIGFyZSBPKGxnKG9iai0+YmFzZS5zaXplKSksCisJICogaS5lLiBPKDEp IHdpdGggYSBsYXJnZSBjb25zdGFudCEKKwkgKi8KKwlpZiAobiA8IFJFQURfT05DRShpdGVyLT5z Z19pZHgpKQorCQlnb3RvIGxvb2t1cDsKKworCW11dGV4X2xvY2soJml0ZXItPmxvY2spOworCisJ LyogV2UgcHJlZmVyIHRvIHJldXNlIHRoZSBsYXN0IHNnIHNvIHRoYXQgcmVwZWF0ZWQgbG9va3Vw IG9mIHRoaXMKKwkgKiAob3IgdGhlIHN1YnNlcXVlbnQpIHNnIGFyZSBmYXN0IC0gY29tcGFyaW5n IGFnYWluc3QgdGhlIGxhc3QKKwkgKiBzZyBpcyBmYXN0ZXIgdGhhbiBnb2luZyB0aHJvdWdoIHRo ZSByYWRpeHRyZWUuCisJICovCisKKwlzZyA9IGl0ZXItPnNnX3BvczsKKwlpZHggPSBpdGVyLT5z Z19pZHg7CisJY291bnQgPSBfX3NnX3BhZ2VfY291bnQoc2cpOworCisJd2hpbGUgKGlkeCArIGNv dW50IDw9IG4pIHsKKwkJdm9pZCAqZW50cnk7CisJCXVuc2lnbmVkIGxvbmcgaTsKKwkJaW50IHJl dDsKKworCQkvKiBJZiB3ZSBjYW5ub3QgYWxsb2NhdGUgYW5kIGluc2VydCB0aGlzIGVudHJ5LCBv ciB0aGUKKwkJICogaW5kaXZpZHVhbCBwYWdlcyBmcm9tIHRoaXMgcmFuZ2UsIGNhbmNlbCB1cGRh dGluZyB0aGUKKwkJICogc2dfaWR4IHNvIHRoYXQgb24gdGhpcyBsb29rdXAgd2UgYXJlIGZvcmNl ZCB0byBsaW5lYXJseQorCQkgKiBzY2FuIG9ud2FyZHMsIGJ1dCBvbiBmdXR1cmUgbG9va3VwcyB3 ZSB3aWxsIHRyeSB0aGUKKwkJICogaW5zZXJ0aW9uIGFnYWluIChpbiB3aGljaCBjYXNlIHdlIG5l ZWQgdG8gYmUgY2FyZWZ1bCBvZgorCQkgKiB0aGUgZXJyb3IgcmV0dXJuIHJlcG9ydGluZyB0aGF0 IHdlIGhhdmUgYWxyZWFkeSBpbnNlcnRlZAorCQkgKiB0aGlzIGluZGV4KS4KKwkJICovCisJCXJl dCA9IHJhZGl4X3RyZWVfaW5zZXJ0KCZpdGVyLT5yYWRpeCwgaWR4LCBzZyk7CisJCWlmIChyZXQg JiYgcmV0ICE9IC1FRVhJU1QpCisJCQlnb3RvIHNjYW47CisKKwkJZW50cnkgPSB4YV9ta192YWx1 ZShpZHgpOworCQlmb3IgKGkgPSAxOyBpIDwgY291bnQ7IGkrKykgeworCQkJcmV0ID0gcmFkaXhf dHJlZV9pbnNlcnQoJml0ZXItPnJhZGl4LCBpZHggKyBpLCBlbnRyeSk7CisJCQlpZiAocmV0ICYm IHJldCAhPSAtRUVYSVNUKQorCQkJCWdvdG8gc2NhbjsKKwkJfQorCisJCWlkeCArPSBjb3VudDsK KwkJc2cgPSBfX19fc2dfbmV4dChzZyk7CisJCWNvdW50ID0gX19zZ19wYWdlX2NvdW50KHNnKTsK Kwl9CisKK3NjYW46CisJaXRlci0+c2dfcG9zID0gc2c7CisJaXRlci0+c2dfaWR4ID0gaWR4Owor CisJbXV0ZXhfdW5sb2NrKCZpdGVyLT5sb2NrKTsKKworCWlmICh1bmxpa2VseShuIDwgaWR4KSkg LyogaW5zZXJ0aW9uIGNvbXBsZXRlZCBieSBhbm90aGVyIHRocmVhZCAqLworCQlnb3RvIGxvb2t1 cDsKKworCS8qIEluIGNhc2Ugd2UgZmFpbGVkIHRvIGluc2VydCB0aGUgZW50cnkgaW50byB0aGUg cmFkaXh0cmVlLCB3ZSBuZWVkCisJICogdG8gbG9vayBiZXlvbmQgdGhlIGN1cnJlbnQgc2cuCisJ ICovCisJd2hpbGUgKGlkeCArIGNvdW50IDw9IG4pIHsKKwkJaWR4ICs9IGNvdW50OworCQlzZyA9 IF9fX19zZ19uZXh0KHNnKTsKKwkJY291bnQgPSBfX3NnX3BhZ2VfY291bnQoc2cpOworCX0KKwor CSpvZmZzZXQgPSBuIC0gaWR4OworCXJldHVybiBzZzsKKworbG9va3VwOgorCXJjdV9yZWFkX2xv Y2soKTsKKworCXNnID0gcmFkaXhfdHJlZV9sb29rdXAoJml0ZXItPnJhZGl4LCBuKTsKKwlHRU1f QlVHX09OKCFzZyk7CisKKwkvKiBJZiB0aGlzIGluZGV4IGlzIGluIHRoZSBtaWRkbGUgb2YgbXVs dGktcGFnZSBzZyBlbnRyeSwKKwkgKiB0aGUgcmFkaXggdHJlZSB3aWxsIGNvbnRhaW4gYSB2YWx1 ZSBlbnRyeSB0aGF0IHBvaW50cworCSAqIHRvIHRoZSBzdGFydCBvZiB0aGF0IHJhbmdlLiBXZSB3 aWxsIHJldHVybiB0aGUgcG9pbnRlciB0bworCSAqIHRoZSBiYXNlIHBhZ2UgYW5kIHRoZSBvZmZz ZXQgb2YgdGhpcyBwYWdlIHdpdGhpbiB0aGUKKwkgKiBzZyBlbnRyeSdzIHJhbmdlLgorCSAqLwor CSpvZmZzZXQgPSAwOworCWlmICh1bmxpa2VseSh4YV9pc192YWx1ZShzZykpKSB7CisJCXVuc2ln bmVkIGxvbmcgYmFzZSA9IHhhX3RvX3ZhbHVlKHNnKTsKKworCQlzZyA9IHJhZGl4X3RyZWVfbG9v a3VwKCZpdGVyLT5yYWRpeCwgYmFzZSk7CisJCUdFTV9CVUdfT04oIXNnKTsKKworCQkqb2Zmc2V0 ID0gbiAtIGJhc2U7CisJfQorCisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlyZXR1cm4gc2c7Cit9 CisKK3N0cnVjdCBwYWdlICoKK2k5MTVfZ2VtX29iamVjdF9nZXRfcGFnZShzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqLCB1bnNpZ25lZCBpbnQgbikKK3sKKwlzdHJ1Y3Qgc2NhdHRlcmxp c3QgKnNnOworCXVuc2lnbmVkIGludCBvZmZzZXQ7CisKKwlHRU1fQlVHX09OKCFpOTE1X2dlbV9v YmplY3RfaGFzX3N0cnVjdF9wYWdlKG9iaikpOworCisJc2cgPSBpOTE1X2dlbV9vYmplY3RfZ2V0 X3NnKG9iaiwgbiwgJm9mZnNldCk7CisJcmV0dXJuIG50aF9wYWdlKHNnX3BhZ2Uoc2cpLCBvZmZz ZXQpOworfQorCisvKiBMaWtlIGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZSgpLCBidXQgbWFyayB0 aGUgcmV0dXJuZWQgcGFnZSBkaXJ0eSAqLworc3RydWN0IHBhZ2UgKgoraTkxNV9nZW1fb2JqZWN0 X2dldF9kaXJ0eV9wYWdlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJCQkgICAg ICAgdW5zaWduZWQgaW50IG4pCit7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwlwYWdlID0gaTkx NV9nZW1fb2JqZWN0X2dldF9wYWdlKG9iaiwgbik7CisJaWYgKCFvYmotPm1tLmRpcnR5KQorCQlz ZXRfcGFnZV9kaXJ0eShwYWdlKTsKKworCXJldHVybiBwYWdlOworfQorCitkbWFfYWRkcl90Citp OTE1X2dlbV9vYmplY3RfZ2V0X2RtYV9hZGRyZXNzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmosCisJCQkJdW5zaWduZWQgbG9uZyBuKQoreworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7 CisJdW5zaWduZWQgaW50IG9mZnNldDsKKworCXNnID0gaTkxNV9nZW1fb2JqZWN0X2dldF9zZyhv YmosIG4sICZvZmZzZXQpOworCXJldHVybiBzZ19kbWFfYWRkcmVzcyhzZykgKyAob2Zmc2V0IDw8 IFBBR0VfU0hJRlQpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5 MTVfZ2VtX3BoeXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9waHlzLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4xYzBjZTY5Zjc2NWIKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGh5cy5j CkBAIC0wLDAgKzEsMjExIEBACisvKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAor ICoKKyAqIENvcHlyaWdodCDCqSAyMDE0LTIwMTYgSW50ZWwgQ29ycG9yYXRpb24KKyAqLworCisj aW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NobWVtX2ZzLmg+Cisj aW5jbHVkZSA8bGludXgvc3dhcC5oPgorCisjaW5jbHVkZSA8ZHJtL2RybS5oPiAvKiBmb3IgZHJt X2xlZ2FjeS5oISAqLworI2luY2x1ZGUgPGRybS9kcm1fY2FjaGUuaD4KKyNpbmNsdWRlIDxkcm0v ZHJtX2xlZ2FjeS5oPiAvKiBmb3IgZHJtX3BjaS5oISAqLworI2luY2x1ZGUgPGRybS9kcm1fcGNp Lmg+CisKKyNpbmNsdWRlICJpOTE1X2Rydi5oIgorI2luY2x1ZGUgImk5MTVfZ2VtX29iamVjdC5o IgorCitzdGF0aWMgaW50IGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXNfcGh5cyhzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5n ID0gb2JqLT5iYXNlLmZpbHAtPmZfbWFwcGluZzsKKwlzdHJ1Y3QgZHJtX2RtYV9oYW5kbGUgKnBo eXM7CisJc3RydWN0IHNnX3RhYmxlICpzdDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCWNo YXIgKnZhZGRyOworCWludCBpOworCWludCBlcnI7CisKKwlpZiAoV0FSTl9PTihpOTE1X2dlbV9v YmplY3RfbmVlZHNfYml0MTdfc3dpenpsZShvYmopKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkv KiBBbHdheXMgYWxpZ25pbmcgdG8gdGhlIG9iamVjdCBzaXplLCBhbGxvd3MgYSBzaW5nbGUgYWxs b2NhdGlvbgorCSAqIHRvIGhhbmRsZSBhbGwgcG9zc2libGUgY2FsbGVycywgYW5kIGdpdmVuIHR5 cGljYWwgb2JqZWN0IHNpemVzLAorCSAqIHRoZSBhbGlnbm1lbnQgb2YgdGhlIGJ1ZGR5IGFsbG9j YXRpb24gd2lsbCBuYXR1cmFsbHkgbWF0Y2guCisJICovCisJcGh5cyA9IGRybV9wY2lfYWxsb2Mo b2JqLT5iYXNlLmRldiwKKwkJCSAgICAgcm91bmR1cF9wb3dfb2ZfdHdvKG9iai0+YmFzZS5zaXpl KSwKKwkJCSAgICAgcm91bmR1cF9wb3dfb2ZfdHdvKG9iai0+YmFzZS5zaXplKSk7CisJaWYgKCFw aHlzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXZhZGRyID0gcGh5cy0+dmFkZHI7CisJZm9yIChp ID0gMDsgaSA8IG9iai0+YmFzZS5zaXplIC8gUEFHRV9TSVpFOyBpKyspIHsKKwkJc3RydWN0IHBh Z2UgKnBhZ2U7CisJCWNoYXIgKnNyYzsKKworCQlwYWdlID0gc2htZW1fcmVhZF9tYXBwaW5nX3Bh Z2UobWFwcGluZywgaSk7CisJCWlmIChJU19FUlIocGFnZSkpIHsKKwkJCWVyciA9IFBUUl9FUlIo cGFnZSk7CisJCQlnb3RvIGVycl9waHlzOworCQl9CisKKwkJc3JjID0ga21hcF9hdG9taWMocGFn ZSk7CisJCW1lbWNweSh2YWRkciwgc3JjLCBQQUdFX1NJWkUpOworCQlkcm1fY2xmbHVzaF92aXJ0 X3JhbmdlKHZhZGRyLCBQQUdFX1NJWkUpOworCQlrdW5tYXBfYXRvbWljKHNyYyk7CisKKwkJcHV0 X3BhZ2UocGFnZSk7CisJCXZhZGRyICs9IFBBR0VfU0laRTsKKwl9CisKKwlpOTE1X2dlbV9jaGlw c2V0X2ZsdXNoKHRvX2k5MTUob2JqLT5iYXNlLmRldikpOworCisJc3QgPSBrbWFsbG9jKHNpemVv Zigqc3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdv dG8gZXJyX3BoeXM7CisJfQorCisJaWYgKHNnX2FsbG9jX3RhYmxlKHN0LCAxLCBHRlBfS0VSTkVM KSkgeworCQlrZnJlZShzdCk7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3BoeXM7CisJ fQorCisJc2cgPSBzdC0+c2dsOworCXNnLT5vZmZzZXQgPSAwOworCXNnLT5sZW5ndGggPSBvYmot PmJhc2Uuc2l6ZTsKKworCXNnX2RtYV9hZGRyZXNzKHNnKSA9IHBoeXMtPmJ1c2FkZHI7CisJc2df ZG1hX2xlbihzZykgPSBvYmotPmJhc2Uuc2l6ZTsKKworCW9iai0+cGh5c19oYW5kbGUgPSBwaHlz OworCisJX19pOTE1X2dlbV9vYmplY3Rfc2V0X3BhZ2VzKG9iaiwgc3QsIHNnLT5sZW5ndGgpOwor CisJcmV0dXJuIDA7CisKK2Vycl9waHlzOgorCWRybV9wY2lfZnJlZShvYmotPmJhc2UuZGV2LCBw aHlzKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkCitpOTE1X2dlbV9vYmplY3Rf cHV0X3BhZ2VzX3BoeXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKKwkJCSAgICAg ICBzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzKQoreworCV9faTkxNV9nZW1fb2JqZWN0X3JlbGVhc2Vf c2htZW0ob2JqLCBwYWdlcywgZmFsc2UpOworCisJaWYgKG9iai0+bW0uZGlydHkpIHsKKwkJc3Ry dWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBvYmotPmJhc2UuZmlscC0+Zl9tYXBwaW5nOwor CQljaGFyICp2YWRkciA9IG9iai0+cGh5c19oYW5kbGUtPnZhZGRyOworCQlpbnQgaTsKKworCQlm b3IgKGkgPSAwOyBpIDwgb2JqLT5iYXNlLnNpemUgLyBQQUdFX1NJWkU7IGkrKykgeworCQkJc3Ry dWN0IHBhZ2UgKnBhZ2U7CisJCQljaGFyICpkc3Q7CisKKwkJCXBhZ2UgPSBzaG1lbV9yZWFkX21h cHBpbmdfcGFnZShtYXBwaW5nLCBpKTsKKwkJCWlmIChJU19FUlIocGFnZSkpCisJCQkJY29udGlu dWU7CisKKwkJCWRzdCA9IGttYXBfYXRvbWljKHBhZ2UpOworCQkJZHJtX2NsZmx1c2hfdmlydF9y YW5nZSh2YWRkciwgUEFHRV9TSVpFKTsKKwkJCW1lbWNweShkc3QsIHZhZGRyLCBQQUdFX1NJWkUp OworCQkJa3VubWFwX2F0b21pYyhkc3QpOworCisJCQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKKwkJ CWlmIChvYmotPm1tLm1hZHYgPT0gSTkxNV9NQURWX1dJTExORUVEKQorCQkJCW1hcmtfcGFnZV9h Y2Nlc3NlZChwYWdlKTsKKwkJCXB1dF9wYWdlKHBhZ2UpOworCQkJdmFkZHIgKz0gUEFHRV9TSVpF OworCQl9CisJCW9iai0+bW0uZGlydHkgPSBmYWxzZTsKKwl9CisKKwlzZ19mcmVlX3RhYmxlKHBh Z2VzKTsKKwlrZnJlZShwYWdlcyk7CisKKwlkcm1fcGNpX2ZyZWUob2JqLT5iYXNlLmRldiwgb2Jq LT5waHlzX2hhbmRsZSk7Cit9CisKK3N0YXRpYyB2b2lkCitpOTE1X2dlbV9vYmplY3RfcmVsZWFz ZV9waHlzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCit7CisJaTkxNV9nZW1fb2Jq ZWN0X3VucGluX3BhZ2VzKG9iaik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdF9vcHMgaTkxNV9nZW1fcGh5c19vcHMgPSB7CisJLmdldF9wYWdlcyA9IGk5MTVf Z2VtX29iamVjdF9nZXRfcGFnZXNfcGh5cywKKwkucHV0X3BhZ2VzID0gaTkxNV9nZW1fb2JqZWN0 X3B1dF9wYWdlc19waHlzLAorCS5yZWxlYXNlID0gaTkxNV9nZW1fb2JqZWN0X3JlbGVhc2VfcGh5 cywKK307CisKK2ludCBpOTE1X2dlbV9vYmplY3RfYXR0YWNoX3BoeXMoc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iaiwgaW50IGFsaWduKQoreworCXN0cnVjdCBzZ190YWJsZSAqcGFnZXM7 CisJaW50IGVycjsKKworCWlmIChhbGlnbiA+IG9iai0+YmFzZS5zaXplKQorCQlyZXR1cm4gLUVJ TlZBTDsKKworCWlmIChvYmotPm9wcyA9PSAmaTkxNV9nZW1fcGh5c19vcHMpCisJCXJldHVybiAw OworCisJaWYgKG9iai0+b3BzICE9ICZpOTE1X2dlbV9zaG1lbV9vcHMpCisJCXJldHVybiAtRUlO VkFMOworCisJZXJyID0gaTkxNV9nZW1fb2JqZWN0X3VuYmluZChvYmopOworCWlmIChlcnIpCisJ CXJldHVybiBlcnI7CisKKwltdXRleF9sb2NrKCZvYmotPm1tLmxvY2spOworCisJaWYgKG9iai0+ bW0ubWFkdiAhPSBJOTE1X01BRFZfV0lMTE5FRUQpIHsKKwkJZXJyID0gLUVGQVVMVDsKKwkJZ290 byBlcnJfdW5sb2NrOworCX0KKworCWlmIChvYmotPm1tLnF1aXJrZWQpIHsKKwkJZXJyID0gLUVG QVVMVDsKKwkJZ290byBlcnJfdW5sb2NrOworCX0KKworCWlmIChvYmotPm1tLm1hcHBpbmcpIHsK KwkJZXJyID0gLUVCVVNZOworCQlnb3RvIGVycl91bmxvY2s7CisJfQorCisJcGFnZXMgPSBfX2k5 MTVfZ2VtX29iamVjdF91bnNldF9wYWdlcyhvYmopOworCisJb2JqLT5vcHMgPSAmaTkxNV9nZW1f cGh5c19vcHM7CisKKwllcnIgPSBfX19faTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlcyhvYmopOwor CWlmIChlcnIpCisJCWdvdG8gZXJyX3hmZXI7CisKKwkvKiBQZXJtYS1waW4gKHVudGlsIHJlbGVh c2UpIHRoZSBwaHlzaWNhbCBzZXQgb2YgcGFnZXMgKi8KKwlfX2k5MTVfZ2VtX29iamVjdF9waW5f cGFnZXMob2JqKTsKKworCWlmICghSVNfRVJSX09SX05VTEwocGFnZXMpKQorCQlpOTE1X2dlbV9z aG1lbV9vcHMucHV0X3BhZ2VzKG9iaiwgcGFnZXMpOworCW11dGV4X3VubG9jaygmb2JqLT5tbS5s b2NrKTsKKwlyZXR1cm4gMDsKKworZXJyX3hmZXI6CisJb2JqLT5vcHMgPSAmaTkxNV9nZW1fc2ht ZW1fb3BzOworCWlmICghSVNfRVJSX09SX05VTEwocGFnZXMpKSB7CisJCXVuc2lnbmVkIGludCBz Z19wYWdlX3NpemVzID0gaTkxNV9zZ19wYWdlX3NpemVzKHBhZ2VzLT5zZ2wpOworCisJCV9faTkx NV9nZW1fb2JqZWN0X3NldF9wYWdlcyhvYmosIHBhZ2VzLCBzZ19wYWdlX3NpemVzKTsKKwl9Citl cnJfdW5sb2NrOgorCW11dGV4X3VubG9jaygmb2JqLT5tbS5sb2NrKTsKKwlyZXR1cm4gZXJyOwor fQorCisjaWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX0k5MTVfU0VMRlRFU1QpCisjaW5jbHVkZSAi c2VsZnRlc3RzL2k5MTVfZ2VtX3BoeXMuYyIKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n ZW0vaTkxNV9nZW1fc2htZW0uYwppbmRleCBlMjcyMWJkOWFiNDQuLjU2ODE2NGNhNjZmZCAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmMKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmMKQEAgLTIxMyw2ICsyMTMs NjUgQEAgc3RhdGljIGludCBzaG1lbV9nZXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaikKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZAorc2htZW1fdHJ1bmNhdGUo c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKK3sKKwkvKgorCSAqIE91ciBnb2FsIGhl cmUgaXMgdG8gcmV0dXJuIGFzIG11Y2ggb2YgdGhlIG1lbW9yeSBhcworCSAqIGlzIHBvc3NpYmxl IGJhY2sgdG8gdGhlIHN5c3RlbSBhcyB3ZSBhcmUgY2FsbGVkIGZyb20gT09NLgorCSAqIFRvIGRv IHRoaXMgd2UgbXVzdCBpbnN0cnVjdCB0aGUgc2htZnMgdG8gZHJvcCBhbGwgb2YgaXRzCisJICog YmFja2luZyBwYWdlcywgKm5vdyouCisJICovCisJc2htZW1fdHJ1bmNhdGVfcmFuZ2UoZmlsZV9p bm9kZShvYmotPmJhc2UuZmlscCksIDAsIChsb2ZmX3QpLTEpOworCW9iai0+bW0ubWFkdiA9IF9f STkxNV9NQURWX1BVUkdFRDsKKwlvYmotPm1tLnBhZ2VzID0gRVJSX1BUUigtRUZBVUxUKTsKK30K Kworc3RhdGljIHZvaWQKK3NobWVtX3dyaXRlYmFjayhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqKQoreworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOworCXN0cnVjdCB3cml0 ZWJhY2tfY29udHJvbCB3YmMgPSB7CisJCS5zeW5jX21vZGUgPSBXQl9TWU5DX05PTkUsCisJCS5u cl90b193cml0ZSA9IFNXQVBfQ0xVU1RFUl9NQVgsCisJCS5yYW5nZV9zdGFydCA9IDAsCisJCS5y YW5nZV9lbmQgPSBMTE9OR19NQVgsCisJCS5mb3JfcmVjbGFpbSA9IDEsCisJfTsKKwl1bnNpZ25l ZCBsb25nIGk7CisKKwkvKgorCSAqIExlYXZlIG1tYXBpbmdzIGludGFjdCAoR1RUIHdpbGwgaGF2 ZSBiZWVuIHJldm9rZWQgb24gdW5iaW5kaW5nLAorCSAqIGxlYXZpbmcgb25seSBDUFUgbW1hcGlu Z3MgYXJvdW5kKSBhbmQgYWRkIHRob3NlIHBhZ2VzIHRvIHRoZSBMUlUKKwkgKiBpbnN0ZWFkIG9m IGludm9raW5nIHdyaXRlYmFjayBzbyB0aGV5IGFyZSBhZ2VkIGFuZCBwYWdlZCBvdXQKKwkgKiBh cyBub3JtYWwuCisJICovCisJbWFwcGluZyA9IG9iai0+YmFzZS5maWxwLT5mX21hcHBpbmc7CisK KwkvKiBCZWdpbiB3cml0ZWJhY2sgb24gZWFjaCBkaXJ0eSBwYWdlICovCisJZm9yIChpID0gMDsg aSA8IG9iai0+YmFzZS5zaXplID4+IFBBR0VfU0hJRlQ7IGkrKykgeworCQlzdHJ1Y3QgcGFnZSAq cGFnZTsKKworCQlwYWdlID0gZmluZF9sb2NrX2VudHJ5KG1hcHBpbmcsIGkpOworCQlpZiAoIXBh Z2UgfHwgeGFfaXNfdmFsdWUocGFnZSkpCisJCQljb250aW51ZTsKKworCQlpZiAoIXBhZ2VfbWFw cGVkKHBhZ2UpICYmIGNsZWFyX3BhZ2VfZGlydHlfZm9yX2lvKHBhZ2UpKSB7CisJCQlpbnQgcmV0 OworCisJCQlTZXRQYWdlUmVjbGFpbShwYWdlKTsKKwkJCXJldCA9IG1hcHBpbmctPmFfb3BzLT53 cml0ZXBhZ2UocGFnZSwgJndiYyk7CisJCQlpZiAoIVBhZ2VXcml0ZWJhY2socGFnZSkpCisJCQkJ Q2xlYXJQYWdlUmVjbGFpbShwYWdlKTsKKwkJCWlmICghcmV0KQorCQkJCWdvdG8gcHV0OworCQl9 CisJCXVubG9ja19wYWdlKHBhZ2UpOworcHV0OgorCQlwdXRfcGFnZShwYWdlKTsKKwl9Cit9CisK IHZvaWQKIF9faTkxNV9nZW1fb2JqZWN0X3JlbGVhc2Vfc2htZW0oc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iaiwKIAkJCQlzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzLApAQCAtMzYyLDYgKzQy MSw4IEBAIGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0X29wcyBpOTE1X2dlbV9zaG1l bV9vcHMgPSB7CiAKIAkuZ2V0X3BhZ2VzID0gc2htZW1fZ2V0X3BhZ2VzLAogCS5wdXRfcGFnZXMg PSBzaG1lbV9wdXRfcGFnZXMsCisJLnRydW5jYXRlID0gc2htZW1fdHJ1bmNhdGUsCisJLndyaXRl YmFjayA9IHNobWVtX3dyaXRlYmFjaywKIAogCS5wd3JpdGUgPSBzaG1lbV9wd3JpdGUsCiB9Owpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9w aHlzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX3BoeXMu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmI3NmI1MDNiMzk5OQot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkx NV9nZW1fcGh5cy5jCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogTUlUCisgKgorICogQ29weXJpZ2h0IMKpIDIwMTYgSW50ZWwgQ29ycG9yYXRpb24KKyAq LworCisjaW5jbHVkZSAiLi4vLi4vaTkxNV9zZWxmdGVzdC5oIgorCisjaW5jbHVkZSAiLi4vLi4v c2VsZnRlc3RzL21vY2tfZ2VtX2RldmljZS5oIgorCitzdGF0aWMgaW50IG1vY2tfcGh5c19vYmpl Y3Qodm9pZCAqYXJnKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gYXJnOwor CXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CisJaW50IGVycjsKKworCS8qIENyZWF0 ZSBhbiBvYmplY3QgYW5kIGJpbmQgaXQgdG8gYSBjb250aWd1b3VzIHNldCBvZiBwaHlzaWNhbCBw YWdlcywKKwkgKiBpLmUuIGV4ZXJjaXNlIHRoZSBpOTE1X2dlbV9vYmplY3RfcGh5cyBBUEkuCisJ ICovCisKKwlvYmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX3NobWVtKGk5MTUsIFBBR0VfU0la RSk7CisJaWYgKElTX0VSUihvYmopKSB7CisJCWVyciA9IFBUUl9FUlIob2JqKTsKKwkJcHJfZXJy KCJpOTE1X2dlbV9vYmplY3RfY3JlYXRlIGZhaWxlZCwgZXJyPSVkXG4iLCBlcnIpOworCQlnb3Rv IG91dDsKKwl9CisKKwltdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKKwllcnIg PSBpOTE1X2dlbV9vYmplY3RfYXR0YWNoX3BoeXMob2JqLCBQQUdFX1NJWkUpOworCW11dGV4X3Vu bG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7CisJaWYgKGVycikgeworCQlwcl9lcnIoImk5 MTVfZ2VtX29iamVjdF9hdHRhY2hfcGh5cyBmYWlsZWQsIGVycj0lZFxuIiwgZXJyKTsKKwkJZ290 byBvdXRfb2JqOworCX0KKworCWlmIChvYmotPm9wcyAhPSAmaTkxNV9nZW1fcGh5c19vcHMpIHsK KwkJcHJfZXJyKCJpOTE1X2dlbV9vYmplY3RfYXR0YWNoX3BoeXMgZGlkIG5vdCBjcmVhdGUgYSBw aHlzIG9iamVjdFxuIik7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X29iajsKKwl9CisK KwlpZiAoIWF0b21pY19yZWFkKCZvYmotPm1tLnBhZ2VzX3Bpbl9jb3VudCkpIHsKKwkJcHJfZXJy KCJpOTE1X2dlbV9vYmplY3RfYXR0YWNoX3BoeXMgZGlkIG5vdCBwaW4gaXRzIHBoeXMgcGFnZXNc biIpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dF9vYmo7CisJfQorCisJLyogTWFrZSB0 aGUgb2JqZWN0IGRpcnR5IHNvIHRoYXQgcHV0X3BhZ2VzIG11c3QgZG8gY29weSBiYWNrIHRoZSBk YXRhICovCisJbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7CisJZXJyID0gaTkx NV9nZW1fb2JqZWN0X3NldF90b19ndHRfZG9tYWluKG9iaiwgdHJ1ZSk7CisJbXV0ZXhfdW5sb2Nr KCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKKwlpZiAoZXJyKSB7CisJCXByX2VycigiaTkxNV9n ZW1fb2JqZWN0X3NldF90b19ndHRfZG9tYWluIGZhaWxlZCB3aXRoIGVycj0lZFxuIiwKKwkJICAg ICAgIGVycik7CisJCWdvdG8gb3V0X29iajsKKwl9CisKK291dF9vYmo6CisJaTkxNV9nZW1fb2Jq ZWN0X3B1dChvYmopOworb3V0OgorCXJldHVybiBlcnI7Cit9CisKK2ludCBpOTE1X2dlbV9waHlz X21vY2tfc2VsZnRlc3RzKHZvaWQpCit7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBpOTE1X3N1YnRl c3QgdGVzdHNbXSA9IHsKKwkJU1VCVEVTVChtb2NrX3BoeXNfb2JqZWN0KSwKKwl9OworCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICppOTE1OworCWludCBlcnI7CisKKwlpOTE1ID0gbW9ja19nZW1f ZGV2aWNlKCk7CisJaWYgKCFpOTE1KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWVyciA9IGk5MTVf c3VidGVzdHModGVzdHMsIGk5MTUpOworCisJZHJtX2Rldl9wdXQoJmk5MTUtPmRybSk7CisJcmV0 dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2Lmgg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IGE1NDFhNTI0Mzk2Zi4uMTA3 NDQ3Mjg3YjIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTI4OTIsOCArMjg5Miw2IEBA IGk5MTVfZ2VtX29iamVjdF9waW5fdG9fZGlzcGxheV9wbGFuZShzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqLAogCQkJCSAgICAgY29uc3Qgc3RydWN0IGk5MTVfZ2d0dF92aWV3ICp2aWV3 LAogCQkJCSAgICAgdW5zaWduZWQgaW50IGZsYWdzKTsKIHZvaWQgaTkxNV9nZW1fb2JqZWN0X3Vu cGluX2Zyb21fZGlzcGxheV9wbGFuZShzdHJ1Y3QgaTkxNV92bWEgKnZtYSk7Ci1pbnQgaTkxNV9n ZW1fb2JqZWN0X2F0dGFjaF9waHlzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCi0J CQkJaW50IGFsaWduKTsKIGludCBpOTE1X2dlbV9vcGVuKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOwogdm9pZCBpOTE1X2dlbV9yZWxlYXNlKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSk7CiAKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbS5jCmluZGV4IDRjNWZiYTBjN2JmNi4uMDU0OWI3M2YwMWZmIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtLmMKQEAgLTI2LDcgKzI2LDYgQEAKICAqLwogCiAjaW5jbHVkZSA8ZHJtL2Ry bV92bWFfbWFuYWdlci5oPgotI2luY2x1ZGUgPGRybS9kcm1fcGNpLmg+CiAjaW5jbHVkZSA8ZHJt L2k5MTVfZHJtLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLWZlbmNlLWFycmF5Lmg+CiAjaW5jbHVk ZSA8bGludXgva3RocmVhZC5oPgpAQCAtOTgsMTMzICs5Nyw2IEBAIGk5MTVfZ2VtX2dldF9hcGVy dHVyZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCXJldHVybiAw OwogfQogCi1zdGF0aWMgaW50IGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXNfcGh5cyhzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQotewotCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBw aW5nID0gb2JqLT5iYXNlLmZpbHAtPmZfbWFwcGluZzsKLQlkcm1fZG1hX2hhbmRsZV90ICpwaHlz OwotCXN0cnVjdCBzZ190YWJsZSAqc3Q7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKLQljaGFy ICp2YWRkcjsKLQlpbnQgaTsKLQlpbnQgZXJyOwotCi0JaWYgKFdBUk5fT04oaTkxNV9nZW1fb2Jq ZWN0X25lZWRzX2JpdDE3X3N3aXp6bGUob2JqKSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyog QWx3YXlzIGFsaWduaW5nIHRvIHRoZSBvYmplY3Qgc2l6ZSwgYWxsb3dzIGEgc2luZ2xlIGFsbG9j YXRpb24KLQkgKiB0byBoYW5kbGUgYWxsIHBvc3NpYmxlIGNhbGxlcnMsIGFuZCBnaXZlbiB0eXBp Y2FsIG9iamVjdCBzaXplcywKLQkgKiB0aGUgYWxpZ25tZW50IG9mIHRoZSBidWRkeSBhbGxvY2F0 aW9uIHdpbGwgbmF0dXJhbGx5IG1hdGNoLgotCSAqLwotCXBoeXMgPSBkcm1fcGNpX2FsbG9jKG9i ai0+YmFzZS5kZXYsCi0JCQkgICAgIHJvdW5kdXBfcG93X29mX3R3byhvYmotPmJhc2Uuc2l6ZSks Ci0JCQkgICAgIHJvdW5kdXBfcG93X29mX3R3byhvYmotPmJhc2Uuc2l6ZSkpOwotCWlmICghcGh5 cykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQl2YWRkciA9IHBoeXMtPnZhZGRyOwotCWZvciAoaSA9 IDA7IGkgPCBvYmotPmJhc2Uuc2l6ZSAvIFBBR0VfU0laRTsgaSsrKSB7Ci0JCXN0cnVjdCBwYWdl ICpwYWdlOwotCQljaGFyICpzcmM7Ci0KLQkJcGFnZSA9IHNobWVtX3JlYWRfbWFwcGluZ19wYWdl KG1hcHBpbmcsIGkpOwotCQlpZiAoSVNfRVJSKHBhZ2UpKSB7Ci0JCQllcnIgPSBQVFJfRVJSKHBh Z2UpOwotCQkJZ290byBlcnJfcGh5czsKLQkJfQotCi0JCXNyYyA9IGttYXBfYXRvbWljKHBhZ2Up OwotCQltZW1jcHkodmFkZHIsIHNyYywgUEFHRV9TSVpFKTsKLQkJZHJtX2NsZmx1c2hfdmlydF9y YW5nZSh2YWRkciwgUEFHRV9TSVpFKTsKLQkJa3VubWFwX2F0b21pYyhzcmMpOwotCi0JCXB1dF9w YWdlKHBhZ2UpOwotCQl2YWRkciArPSBQQUdFX1NJWkU7Ci0JfQotCi0JaTkxNV9nZW1fY2hpcHNl dF9mbHVzaCh0b19pOTE1KG9iai0+YmFzZS5kZXYpKTsKLQotCXN0ID0ga21hbGxvYyhzaXplb2Yo KnN0KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzdCkgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3Rv IGVycl9waHlzOwotCX0KLQotCWlmIChzZ19hbGxvY190YWJsZShzdCwgMSwgR0ZQX0tFUk5FTCkp IHsKLQkJa2ZyZWUoc3QpOwotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9waHlzOwotCX0K LQotCXNnID0gc3QtPnNnbDsKLQlzZy0+b2Zmc2V0ID0gMDsKLQlzZy0+bGVuZ3RoID0gb2JqLT5i YXNlLnNpemU7Ci0KLQlzZ19kbWFfYWRkcmVzcyhzZykgPSBwaHlzLT5idXNhZGRyOwotCXNnX2Rt YV9sZW4oc2cpID0gb2JqLT5iYXNlLnNpemU7Ci0KLQlvYmotPnBoeXNfaGFuZGxlID0gcGh5czsK LQotCV9faTkxNV9nZW1fb2JqZWN0X3NldF9wYWdlcyhvYmosIHN0LCBzZy0+bGVuZ3RoKTsKLQot CXJldHVybiAwOwotCi1lcnJfcGh5czoKLQlkcm1fcGNpX2ZyZWUob2JqLT5iYXNlLmRldiwgcGh5 cyk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZAotaTkxNV9nZW1fb2JqZWN0X3B1 dF9wYWdlc19waHlzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCi0JCQkgICAgICAg c3RydWN0IHNnX3RhYmxlICpwYWdlcykKLXsKLQlfX2k5MTVfZ2VtX29iamVjdF9yZWxlYXNlX3No bWVtKG9iaiwgcGFnZXMsIGZhbHNlKTsKLQotCWlmIChvYmotPm1tLmRpcnR5KSB7Ci0JCXN0cnVj dCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gb2JqLT5iYXNlLmZpbHAtPmZfbWFwcGluZzsKLQkJ Y2hhciAqdmFkZHIgPSBvYmotPnBoeXNfaGFuZGxlLT52YWRkcjsKLQkJaW50IGk7Ci0KLQkJZm9y IChpID0gMDsgaSA8IG9iai0+YmFzZS5zaXplIC8gUEFHRV9TSVpFOyBpKyspIHsKLQkJCXN0cnVj dCBwYWdlICpwYWdlOwotCQkJY2hhciAqZHN0OwotCi0JCQlwYWdlID0gc2htZW1fcmVhZF9tYXBw aW5nX3BhZ2UobWFwcGluZywgaSk7Ci0JCQlpZiAoSVNfRVJSKHBhZ2UpKQotCQkJCWNvbnRpbnVl OwotCi0JCQlkc3QgPSBrbWFwX2F0b21pYyhwYWdlKTsKLQkJCWRybV9jbGZsdXNoX3ZpcnRfcmFu Z2UodmFkZHIsIFBBR0VfU0laRSk7Ci0JCQltZW1jcHkoZHN0LCB2YWRkciwgUEFHRV9TSVpFKTsK LQkJCWt1bm1hcF9hdG9taWMoZHN0KTsKLQotCQkJc2V0X3BhZ2VfZGlydHkocGFnZSk7Ci0JCQlp ZiAob2JqLT5tbS5tYWR2ID09IEk5MTVfTUFEVl9XSUxMTkVFRCkKLQkJCQltYXJrX3BhZ2VfYWNj ZXNzZWQocGFnZSk7Ci0JCQlwdXRfcGFnZShwYWdlKTsKLQkJCXZhZGRyICs9IFBBR0VfU0laRTsK LQkJfQotCQlvYmotPm1tLmRpcnR5ID0gZmFsc2U7Ci0JfQotCi0Jc2dfZnJlZV90YWJsZShwYWdl cyk7Ci0Ja2ZyZWUocGFnZXMpOwotCi0JZHJtX3BjaV9mcmVlKG9iai0+YmFzZS5kZXYsIG9iai0+ cGh5c19oYW5kbGUpOwotfQotCi1zdGF0aWMgdm9pZAotaTkxNV9nZW1fb2JqZWN0X3JlbGVhc2Vf cGh5cyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQotewotCWk5MTVfZ2VtX29iamVj dF91bnBpbl9wYWdlcyhvYmopOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3Rfb3BzIGk5MTVfZ2VtX3BoeXNfb3BzID0gewotCS5nZXRfcGFnZXMgPSBpOTE1X2dl bV9vYmplY3RfZ2V0X3BhZ2VzX3BoeXMsCi0JLnB1dF9wYWdlcyA9IGk5MTVfZ2VtX29iamVjdF9w dXRfcGFnZXNfcGh5cywKLQkucmVsZWFzZSA9IGk5MTVfZ2VtX29iamVjdF9yZWxlYXNlX3BoeXMs Ci19OwotCiBpbnQgaTkxNV9nZW1fb2JqZWN0X3VuYmluZChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqKQogewogCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwpAQCAtMTkzNywxMSArMTgwOSw2 IEBAIHN0YXRpYyBpbnQgaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9tbWFwX29mZnNldChzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lk IGk5MTVfZ2VtX29iamVjdF9mcmVlX21tYXBfb2Zmc2V0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmopCi17Ci0JZHJtX2dlbV9mcmVlX21tYXBfb2Zmc2V0KCZvYmotPmJhc2UpOwotfQot CiBpbnQKIGk5MTVfZ2VtX21tYXBfZ3R0KHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKIAkJICBzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LApAQCAtMTk4NywxMTEgKzE4NTQsNiBAQCBpOTE1X2dlbV9tbWFw X2d0dF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCXJldHVybiBp OTE1X2dlbV9tbWFwX2d0dChmaWxlLCBkZXYsIGFyZ3MtPmhhbmRsZSwgJmFyZ3MtPm9mZnNldCk7 CiB9CiAKLS8qIEltbWVkaWF0ZWx5IGRpc2NhcmQgdGhlIGJhY2tpbmcgc3RvcmFnZSAqLwotdm9p ZCBfX2k5MTVfZ2VtX29iamVjdF90cnVuY2F0ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq b2JqKQotewotCWk5MTVfZ2VtX29iamVjdF9mcmVlX21tYXBfb2Zmc2V0KG9iaik7Ci0KLQlpZiAo b2JqLT5iYXNlLmZpbHAgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JLyogT3VyIGdvYWwgaGVyZSBp cyB0byByZXR1cm4gYXMgbXVjaCBvZiB0aGUgbWVtb3J5IGFzCi0JICogaXMgcG9zc2libGUgYmFj ayB0byB0aGUgc3lzdGVtIGFzIHdlIGFyZSBjYWxsZWQgZnJvbSBPT00uCi0JICogVG8gZG8gdGhp cyB3ZSBtdXN0IGluc3RydWN0IHRoZSBzaG1mcyB0byBkcm9wIGFsbCBvZiBpdHMKLQkgKiBiYWNr aW5nIHBhZ2VzLCAqbm93Ki4KLQkgKi8KLQlzaG1lbV90cnVuY2F0ZV9yYW5nZShmaWxlX2lub2Rl KG9iai0+YmFzZS5maWxwKSwgMCwgKGxvZmZfdCktMSk7Ci0Jb2JqLT5tbS5tYWR2ID0gX19JOTE1 X01BRFZfUFVSR0VEOwotCW9iai0+bW0ucGFnZXMgPSBFUlJfUFRSKC1FRkFVTFQpOwotfQotCi1z dGF0aWMgdm9pZCBfX2k5MTVfZ2VtX29iamVjdF9yZXNldF9wYWdlX2l0ZXIoc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm9iaikKLXsKLQlzdHJ1Y3QgcmFkaXhfdHJlZV9pdGVyIGl0ZXI7Ci0J dm9pZCBfX3JjdSAqKnNsb3Q7Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0JcmFkaXhfdHJlZV9mb3Jf ZWFjaF9zbG90KHNsb3QsICZvYmotPm1tLmdldF9wYWdlLnJhZGl4LCAmaXRlciwgMCkKLQkJcmFk aXhfdHJlZV9kZWxldGUoJm9iai0+bW0uZ2V0X3BhZ2UucmFkaXgsIGl0ZXIuaW5kZXgpOwotCXJj dV9yZWFkX3VubG9jaygpOwotfQotCi1zdGF0aWMgc3RydWN0IHNnX3RhYmxlICoKLV9faTkxNV9n ZW1fb2JqZWN0X3Vuc2V0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCi17 Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KG9iai0+YmFzZS5kZXYp OwotCXN0cnVjdCBzZ190YWJsZSAqcGFnZXM7Ci0KLQlwYWdlcyA9IGZldGNoX2FuZF96ZXJvKCZv YmotPm1tLnBhZ2VzKTsKLQlpZiAoSVNfRVJSX09SX05VTEwocGFnZXMpKQotCQlyZXR1cm4gcGFn ZXM7Ci0KLQlzcGluX2xvY2soJmk5MTUtPm1tLm9ial9sb2NrKTsKLQlsaXN0X2RlbCgmb2JqLT5t bS5saW5rKTsKLQlzcGluX3VubG9jaygmaTkxNS0+bW0ub2JqX2xvY2spOwotCi0JaWYgKG9iai0+ bW0ubWFwcGluZykgewotCQl2b2lkICpwdHI7Ci0KLQkJcHRyID0gcGFnZV9tYXNrX2JpdHMob2Jq LT5tbS5tYXBwaW5nKTsKLQkJaWYgKGlzX3ZtYWxsb2NfYWRkcihwdHIpKQotCQkJdnVubWFwKHB0 cik7Ci0JCWVsc2UKLQkJCWt1bm1hcChrbWFwX3RvX3BhZ2UocHRyKSk7Ci0KLQkJb2JqLT5tbS5t YXBwaW5nID0gTlVMTDsKLQl9Ci0KLQlfX2k5MTVfZ2VtX29iamVjdF9yZXNldF9wYWdlX2l0ZXIo b2JqKTsKLQlvYmotPm1tLnBhZ2Vfc2l6ZXMucGh5cyA9IG9iai0+bW0ucGFnZV9zaXplcy5zZyA9 IDA7Ci0KLQlyZXR1cm4gcGFnZXM7Ci19Ci0KLWludCBfX2k5MTVfZ2VtX29iamVjdF9wdXRfcGFn ZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKLQkJCQllbnVtIGk5MTVfbW1fc3Vi Y2xhc3Mgc3ViY2xhc3MpCi17Ci0Jc3RydWN0IHNnX3RhYmxlICpwYWdlczsKLQlpbnQgcmV0Owot Ci0JaWYgKGk5MTVfZ2VtX29iamVjdF9oYXNfcGlubmVkX3BhZ2VzKG9iaikpCi0JCXJldHVybiAt RUJVU1k7Ci0KLQlHRU1fQlVHX09OKG9iai0+YmluZF9jb3VudCk7Ci0KLQkvKiBNYXkgYmUgY2Fs bGVkIGJ5IHNocmlua2VyIGZyb20gd2l0aGluIGdldF9wYWdlcygpIChvbiBhbm90aGVyIGJvKSAq LwotCW11dGV4X2xvY2tfbmVzdGVkKCZvYmotPm1tLmxvY2ssIHN1YmNsYXNzKTsKLQlpZiAodW5s aWtlbHkoYXRvbWljX3JlYWQoJm9iai0+bW0ucGFnZXNfcGluX2NvdW50KSkpIHsKLQkJcmV0ID0g LUVCVVNZOwotCQlnb3RvIHVubG9jazsKLQl9Ci0KLQkvKgotCSAqIC0+cHV0X3BhZ2VzIG1pZ2h0 IG5lZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgYml0MTcgc3dpenpsZQotCSAqIGFycmF5 LCBoZW5jZSBwcm90ZWN0IHRoZW0gZnJvbSBiZWluZyByZWFwZWQgYnkgcmVtb3ZpbmcgdGhlbSBm cm9tIGd0dAotCSAqIGxpc3RzIGVhcmx5LgotCSAqLwotCXBhZ2VzID0gX19pOTE1X2dlbV9vYmpl Y3RfdW5zZXRfcGFnZXMob2JqKTsKLQotCS8qCi0JICogWFhYIFRlbXBvcmFyeSBoaWppbnggdG8g YXZvaWQgdXBkYXRpbmcgYWxsIGJhY2tlbmRzIHRvIGhhbmRsZQotCSAqIE5VTEwgcGFnZXMuIElu IHRoZSBmdXR1cmUsIHdoZW4gd2UgaGF2ZSBtb3JlIGFzeW5jaHJvbm91cwotCSAqIGdldF9wYWdl cyBiYWNrZW5kcyB3ZSBzaG91bGQgYmUgYmV0dGVyIGFibGUgdG8gaGFuZGxlIHRoZQotCSAqIGNh bmNlbGxhdGlvbiBvZiB0aGUgYXN5bmMgdGFzayBpbiBhIG1vcmUgdW5pZm9ybSBtYW5uZXIuCi0J ICovCi0JaWYgKCFwYWdlcyAmJiAhaTkxNV9nZW1fb2JqZWN0X25lZWRzX2FzeW5jX2NhbmNlbChv YmopKQotCQlwYWdlcyA9IEVSUl9QVFIoLUVJTlZBTCk7Ci0KLQlpZiAoIUlTX0VSUihwYWdlcykp Ci0JCW9iai0+b3BzLT5wdXRfcGFnZXMob2JqLCBwYWdlcyk7Ci0KLQlyZXQgPSAwOwotdW5sb2Nr OgotCW11dGV4X3VubG9jaygmb2JqLT5tbS5sb2NrKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KIGJv b2wgaTkxNV9zZ190cmltKHN0cnVjdCBzZ190YWJsZSAqb3JpZ19zdCkKIHsKIAlzdHJ1Y3Qgc2df dGFibGUgbmV3X3N0OwpAQCAtMjEyMCwyNTIgKzE4ODIsNiBAQCBib29sIGk5MTVfc2dfdHJpbShz dHJ1Y3Qgc2dfdGFibGUgKm9yaWdfc3QpCiAJcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgX19pOTE1 X2dlbV9vYmplY3Rfc2V0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCi0J CQkJIHN0cnVjdCBzZ190YWJsZSAqcGFnZXMsCi0JCQkJIHVuc2lnbmVkIGludCBzZ19wYWdlX3Np emVzKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkxNShvYmotPmJh c2UuZGV2KTsKLQl1bnNpZ25lZCBsb25nIHN1cHBvcnRlZCA9IElOVEVMX0lORk8oaTkxNSktPnBh Z2Vfc2l6ZXM7Ci0JaW50IGk7Ci0KLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZvYmotPm1tLmxvY2sp OwotCi0JLyogTWFrZSB0aGUgcGFnZXMgY29oZXJlbnQgd2l0aCB0aGUgR1BVIChmbHVzaGluZyBh bnkgc3dhcGluKS4gKi8KLQlpZiAob2JqLT5jYWNoZV9kaXJ0eSkgewotCQlvYmotPndyaXRlX2Rv bWFpbiA9IDA7Ci0JCWlmIChpOTE1X2dlbV9vYmplY3RfaGFzX3N0cnVjdF9wYWdlKG9iaikpCi0J CQlkcm1fY2xmbHVzaF9zZyhwYWdlcyk7Ci0JCW9iai0+Y2FjaGVfZGlydHkgPSBmYWxzZTsKLQl9 Ci0KLQlvYmotPm1tLmdldF9wYWdlLnNnX3BvcyA9IHBhZ2VzLT5zZ2w7Ci0Jb2JqLT5tbS5nZXRf cGFnZS5zZ19pZHggPSAwOwotCi0Jb2JqLT5tbS5wYWdlcyA9IHBhZ2VzOwotCi0JaWYgKGk5MTVf Z2VtX29iamVjdF9pc190aWxlZChvYmopICYmCi0JICAgIGk5MTUtPnF1aXJrcyAmIFFVSVJLX1BJ Tl9TV0laWkxFRF9QQUdFUykgewotCQlHRU1fQlVHX09OKG9iai0+bW0ucXVpcmtlZCk7Ci0JCV9f aTkxNV9nZW1fb2JqZWN0X3Bpbl9wYWdlcyhvYmopOwotCQlvYmotPm1tLnF1aXJrZWQgPSB0cnVl OwotCX0KLQotCUdFTV9CVUdfT04oIXNnX3BhZ2Vfc2l6ZXMpOwotCW9iai0+bW0ucGFnZV9zaXpl cy5waHlzID0gc2dfcGFnZV9zaXplczsKLQotCS8qCi0JICogQ2FsY3VsYXRlIHRoZSBzdXBwb3J0 ZWQgcGFnZS1zaXplcyB3aGljaCBmaXQgaW50byB0aGUgZ2l2ZW4KLQkgKiBzZ19wYWdlX3NpemVz LiBUaGlzIHdpbGwgZ2l2ZSB1cyB0aGUgcGFnZS1zaXplcyB3aGljaCB3ZSBtYXkgYmUgYWJsZQot CSAqIHRvIHVzZSBvcHBvcnR1bmlzdGljYWxseSB3aGVuIGxhdGVyIGluc2VydGluZyBpbnRvIHRo ZSBHVFQuIEZvcgotCSAqIGV4YW1wbGUgaWYgcGh5cz0yRywgdGhlbiBpbiB0aGVvcnkgd2Ugc2hv dWxkIGJlIGFibGUgdG8gdXNlIDFHLCAyTSwKLQkgKiA2NEsgb3IgNEsgcGFnZXMsIGFsdGhvdWdo IGluIHByYWN0aWNlIHRoaXMgd2lsbCBkZXBlbmQgb24gYSBudW1iZXIgb2YKLQkgKiBvdGhlciBm YWN0b3JzLgotCSAqLwotCW9iai0+bW0ucGFnZV9zaXplcy5zZyA9IDA7Ci0JZm9yX2VhY2hfc2V0 X2JpdChpLCAmc3VwcG9ydGVkLCBpbG9nMihJOTE1X0dUVF9NQVhfUEFHRV9TSVpFKSArIDEpIHsK LQkJaWYgKG9iai0+bW0ucGFnZV9zaXplcy5waHlzICYgfjB1IDw8IGkpCi0JCQlvYmotPm1tLnBh Z2Vfc2l6ZXMuc2cgfD0gQklUKGkpOwotCX0KLQlHRU1fQlVHX09OKCFIQVNfUEFHRV9TSVpFUyhp OTE1LCBvYmotPm1tLnBhZ2Vfc2l6ZXMuc2cpKTsKLQotCXNwaW5fbG9jaygmaTkxNS0+bW0ub2Jq X2xvY2spOwotCWxpc3RfYWRkKCZvYmotPm1tLmxpbmssICZpOTE1LT5tbS51bmJvdW5kX2xpc3Qp OwotCXNwaW5fdW5sb2NrKCZpOTE1LT5tbS5vYmpfbG9jayk7Ci19Ci0KLXN0YXRpYyBpbnQgX19f X2k5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aikKLXsKLQlpbnQgZXJyOwotCi0JaWYgKHVubGlrZWx5KG9iai0+bW0ubWFkdiAhPSBJOTE1X01B RFZfV0lMTE5FRUQpKSB7Ci0JCURSTV9ERUJVRygiQXR0ZW1wdGluZyB0byBvYnRhaW4gYSBwdXJn ZWFibGUgb2JqZWN0XG4iKTsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0JZXJyID0gb2JqLT5v cHMtPmdldF9wYWdlcyhvYmopOwotCUdFTV9CVUdfT04oIWVyciAmJiAhaTkxNV9nZW1fb2JqZWN0 X2hhc19wYWdlcyhvYmopKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qIEVuc3VyZSB0aGF0IHRo ZSBhc3NvY2lhdGVkIHBhZ2VzIGFyZSBnYXRoZXJlZCBmcm9tIHRoZSBiYWNraW5nIHN0b3JhZ2UK LSAqIGFuZCBwaW5uZWQgaW50byBvdXIgb2JqZWN0LiBpOTE1X2dlbV9vYmplY3RfcGluX3BhZ2Vz KCkgbWF5IGJlIGNhbGxlZAotICogbXVsdGlwbGUgdGltZXMgYmVmb3JlIHRoZXkgYXJlIHJlbGVh c2VkIGJ5IGEgc2luZ2xlIGNhbGwgdG8KLSAqIGk5MTVfZ2VtX29iamVjdF91bnBpbl9wYWdlcygp IC0gb25jZSB0aGUgcGFnZXMgYXJlIG5vIGxvbmdlciByZWZlcmVuY2VkCi0gKiBlaXRoZXIgYXMg YSByZXN1bHQgb2YgbWVtb3J5IHByZXNzdXJlIChyZWFwaW5nIHBhZ2VzIHVuZGVyIHRoZSBzaHJp bmtlcikKLSAqIG9yIGFzIHRoZSBvYmplY3QgaXMgaXRzZWxmIHJlbGVhc2VkLgotICovCi1pbnQg X19pOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv YmopCi17Ci0JaW50IGVycjsKLQotCWVyciA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmb2Jq LT5tbS5sb2NrKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JaWYgKHVubGlrZWx5KCFp OTE1X2dlbV9vYmplY3RfaGFzX3BhZ2VzKG9iaikpKSB7Ci0JCUdFTV9CVUdfT04oaTkxNV9nZW1f b2JqZWN0X2hhc19waW5uZWRfcGFnZXMob2JqKSk7Ci0KLQkJZXJyID0gX19fX2k5MTVfZ2VtX29i amVjdF9nZXRfcGFnZXMob2JqKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gdW5sb2NrOwotCi0JCXNt cF9tYl9fYmVmb3JlX2F0b21pYygpOwotCX0KLQlhdG9taWNfaW5jKCZvYmotPm1tLnBhZ2VzX3Bp bl9jb3VudCk7Ci0KLXVubG9jazoKLQltdXRleF91bmxvY2soJm9iai0+bW0ubG9jayk7Ci0JcmV0 dXJuIGVycjsKLX0KLQotLyogVGhlICdtYXBwaW5nJyBwYXJ0IG9mIGk5MTVfZ2VtX29iamVjdF9w aW5fbWFwKCkgYmVsb3cgKi8KLXN0YXRpYyB2b2lkICppOTE1X2dlbV9vYmplY3RfbWFwKGNvbnN0 IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCi0JCQkJIGVudW0gaTkxNV9tYXBfdHlw ZSB0eXBlKQotewotCXVuc2lnbmVkIGxvbmcgbl9wYWdlcyA9IG9iai0+YmFzZS5zaXplID4+IFBB R0VfU0hJRlQ7Ci0Jc3RydWN0IHNnX3RhYmxlICpzZ3QgPSBvYmotPm1tLnBhZ2VzOwotCXN0cnVj dCBzZ3RfaXRlciBzZ3RfaXRlcjsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQlzdHJ1Y3QgcGFnZSAq c3RhY2tfcGFnZXNbMzJdOwotCXN0cnVjdCBwYWdlICoqcGFnZXMgPSBzdGFja19wYWdlczsKLQl1 bnNpZ25lZCBsb25nIGkgPSAwOwotCXBncHJvdF90IHBncHJvdDsKLQl2b2lkICphZGRyOwotCi0J LyogQSBzaW5nbGUgcGFnZSBjYW4gYWx3YXlzIGJlIGttYXBwZWQgKi8KLQlpZiAobl9wYWdlcyA9 PSAxICYmIHR5cGUgPT0gSTkxNV9NQVBfV0IpCi0JCXJldHVybiBrbWFwKHNnX3BhZ2Uoc2d0LT5z Z2wpKTsKLQotCWlmIChuX3BhZ2VzID4gQVJSQVlfU0laRShzdGFja19wYWdlcykpIHsKLQkJLyog VG9vIGJpZyBmb3Igc3RhY2sgLS0gYWxsb2NhdGUgdGVtcG9yYXJ5IGFycmF5IGluc3RlYWQgKi8K LQkJcGFnZXMgPSBrdm1hbGxvY19hcnJheShuX3BhZ2VzLCBzaXplb2YoKnBhZ2VzKSwgR0ZQX0tF Uk5FTCk7Ci0JCWlmICghcGFnZXMpCi0JCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlmb3JfZWFjaF9z Z3RfcGFnZShwYWdlLCBzZ3RfaXRlciwgc2d0KQotCQlwYWdlc1tpKytdID0gcGFnZTsKLQotCS8q IENoZWNrIHRoYXQgd2UgaGF2ZSB0aGUgZXhwZWN0ZWQgbnVtYmVyIG9mIHBhZ2VzICovCi0JR0VN X0JVR19PTihpICE9IG5fcGFnZXMpOwotCi0Jc3dpdGNoICh0eXBlKSB7Ci0JZGVmYXVsdDoKLQkJ TUlTU0lOR19DQVNFKHR5cGUpOwotCQkvKiBmYWxsdGhyb3VnaCB0byB1c2UgUEFHRV9LRVJORUwg YW55d2F5ICovCi0JY2FzZSBJOTE1X01BUF9XQjoKLQkJcGdwcm90ID0gUEFHRV9LRVJORUw7Ci0J CWJyZWFrOwotCWNhc2UgSTkxNV9NQVBfV0M6Ci0JCXBncHJvdCA9IHBncHJvdF93cml0ZWNvbWJp bmUoUEFHRV9LRVJORUxfSU8pOwotCQlicmVhazsKLQl9Ci0JYWRkciA9IHZtYXAocGFnZXMsIG5f cGFnZXMsIDAsIHBncHJvdCk7Ci0KLQlpZiAocGFnZXMgIT0gc3RhY2tfcGFnZXMpCi0JCWt2ZnJl ZShwYWdlcyk7Ci0KLQlyZXR1cm4gYWRkcjsKLX0KLQotLyogZ2V0LCBwaW4sIGFuZCBtYXAgdGhl IHBhZ2VzIG9mIHRoZSBvYmplY3QgaW50byBrZXJuZWwgc3BhY2UgKi8KLXZvaWQgKmk5MTVfZ2Vt X29iamVjdF9waW5fbWFwKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCi0JCQkgICAg ICBlbnVtIGk5MTVfbWFwX3R5cGUgdHlwZSkKLXsKLQllbnVtIGk5MTVfbWFwX3R5cGUgaGFzX3R5 cGU7Ci0JYm9vbCBwaW5uZWQ7Ci0Jdm9pZCAqcHRyOwotCWludCByZXQ7Ci0KLQlpZiAodW5saWtl bHkoIWk5MTVfZ2VtX29iamVjdF9oYXNfc3RydWN0X3BhZ2Uob2JqKSkpCi0JCXJldHVybiBFUlJf UFRSKC1FTlhJTyk7Ci0KLQlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJm9iai0+bW0u bG9jayk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIEVSUl9QVFIocmV0KTsKLQotCXBpbm5lZCA9ICEo dHlwZSAmIEk5MTVfTUFQX09WRVJSSURFKTsKLQl0eXBlICY9IH5JOTE1X01BUF9PVkVSUklERTsK LQotCWlmICghYXRvbWljX2luY19ub3RfemVybygmb2JqLT5tbS5wYWdlc19waW5fY291bnQpKSB7 Ci0JCWlmICh1bmxpa2VseSghaTkxNV9nZW1fb2JqZWN0X2hhc19wYWdlcyhvYmopKSkgewotCQkJ R0VNX0JVR19PTihpOTE1X2dlbV9vYmplY3RfaGFzX3Bpbm5lZF9wYWdlcyhvYmopKTsKLQotCQkJ cmV0ID0gX19fX2k5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXMob2JqKTsKLQkJCWlmIChyZXQpCi0J CQkJZ290byBlcnJfdW5sb2NrOwotCi0JCQlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKLQkJfQot CQlhdG9taWNfaW5jKCZvYmotPm1tLnBhZ2VzX3Bpbl9jb3VudCk7Ci0JCXBpbm5lZCA9IGZhbHNl OwotCX0KLQlHRU1fQlVHX09OKCFpOTE1X2dlbV9vYmplY3RfaGFzX3BhZ2VzKG9iaikpOwotCi0J cHRyID0gcGFnZV91bnBhY2tfYml0cyhvYmotPm1tLm1hcHBpbmcsICZoYXNfdHlwZSk7Ci0JaWYg KHB0ciAmJiBoYXNfdHlwZSAhPSB0eXBlKSB7Ci0JCWlmIChwaW5uZWQpIHsKLQkJCXJldCA9IC1F QlVTWTsKLQkJCWdvdG8gZXJyX3VucGluOwotCQl9Ci0KLQkJaWYgKGlzX3ZtYWxsb2NfYWRkcihw dHIpKQotCQkJdnVubWFwKHB0cik7Ci0JCWVsc2UKLQkJCWt1bm1hcChrbWFwX3RvX3BhZ2UocHRy KSk7Ci0KLQkJcHRyID0gb2JqLT5tbS5tYXBwaW5nID0gTlVMTDsKLQl9Ci0KLQlpZiAoIXB0cikg ewotCQlwdHIgPSBpOTE1X2dlbV9vYmplY3RfbWFwKG9iaiwgdHlwZSk7Ci0JCWlmICghcHRyKSB7 Ci0JCQlyZXQgPSAtRU5PTUVNOwotCQkJZ290byBlcnJfdW5waW47Ci0JCX0KLQotCQlvYmotPm1t Lm1hcHBpbmcgPSBwYWdlX3BhY2tfYml0cyhwdHIsIHR5cGUpOwotCX0KLQotb3V0X3VubG9jazoK LQltdXRleF91bmxvY2soJm9iai0+bW0ubG9jayk7Ci0JcmV0dXJuIHB0cjsKLQotZXJyX3VucGlu OgotCWF0b21pY19kZWMoJm9iai0+bW0ucGFnZXNfcGluX2NvdW50KTsKLWVycl91bmxvY2s6Ci0J cHRyID0gRVJSX1BUUihyZXQpOwotCWdvdG8gb3V0X3VubG9jazsKLX0KLQotdm9pZCBfX2k5MTVf Z2VtX29iamVjdF9mbHVzaF9tYXAoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKLQkJ CQkgdW5zaWduZWQgbG9uZyBvZmZzZXQsCi0JCQkJIHVuc2lnbmVkIGxvbmcgc2l6ZSkKLXsKLQll bnVtIGk5MTVfbWFwX3R5cGUgaGFzX3R5cGU7Ci0Jdm9pZCAqcHRyOwotCi0JR0VNX0JVR19PTigh aTkxNV9nZW1fb2JqZWN0X2hhc19waW5uZWRfcGFnZXMob2JqKSk7Ci0JR0VNX0JVR19PTihyYW5n ZV9vdmVyZmxvd3NfdCh0eXBlb2Yob2JqLT5iYXNlLnNpemUpLAotCQkJCSAgICAgb2Zmc2V0LCBz aXplLCBvYmotPmJhc2Uuc2l6ZSkpOwotCi0Jb2JqLT5tbS5kaXJ0eSA9IHRydWU7Ci0KLQlpZiAo b2JqLT5jYWNoZV9jb2hlcmVudCAmIEk5MTVfQk9fQ0FDSEVfQ09IRVJFTlRfRk9SX1dSSVRFKQot CQlyZXR1cm47Ci0KLQlwdHIgPSBwYWdlX3VucGFja19iaXRzKG9iai0+bW0ubWFwcGluZywgJmhh c190eXBlKTsKLQlpZiAoaGFzX3R5cGUgPT0gSTkxNV9NQVBfV0MpCi0JCXJldHVybjsKLQotCWRy bV9jbGZsdXNoX3ZpcnRfcmFuZ2UocHRyICsgb2Zmc2V0LCBzaXplKTsKLQlpZiAoc2l6ZSA9PSBv YmotPmJhc2Uuc2l6ZSkgewotCQlvYmotPndyaXRlX2RvbWFpbiAmPSB+STkxNV9HRU1fRE9NQUlO X0NQVTsKLQkJb2JqLT5jYWNoZV9kaXJ0eSA9IGZhbHNlOwotCX0KLX0KLQogc3RhdGljIHVuc2ln bmVkIGxvbmcgdG9fd2FpdF90aW1lb3V0KHM2NCB0aW1lb3V0X25zKQogewogCWlmICh0aW1lb3V0 X25zIDwgMCkKQEAgLTMzNTQsNyArMjg3MCw3IEBAIGk5MTVfZ2VtX21hZHZpc2VfaW9jdGwoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkvKiBpZiB0aGUgb2JqZWN0IGlzIG5v IGxvbmdlciBhdHRhY2hlZCwgZGlzY2FyZCBpdHMgYmFja2luZyBzdG9yYWdlICovCiAJaWYgKG9i ai0+bW0ubWFkdiA9PSBJOTE1X01BRFZfRE9OVE5FRUQgJiYKIAkgICAgIWk5MTVfZ2VtX29iamVj dF9oYXNfcGFnZXMob2JqKSkKLQkJX19pOTE1X2dlbV9vYmplY3RfdHJ1bmNhdGUob2JqKTsKKwkJ aTkxNV9nZW1fb2JqZWN0X3RydW5jYXRlKG9iaik7CiAKIAlhcmdzLT5yZXRhaW5lZCA9IG9iai0+ bW0ubWFkdiAhPSBfX0k5MTVfTUFEVl9QVVJHRUQ7CiAJbXV0ZXhfdW5sb2NrKCZvYmotPm1tLmxv Y2spOwpAQCAtNDEyNiwyMTkgKzM2NDIsNiBAQCB2b2lkIGk5MTVfZ2VtX3RyYWNrX2ZiKHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvbGQsCiAJfQogfQogCi1zdHJ1Y3Qgc2NhdHRlcmxpc3Qg KgotaTkxNV9nZW1fb2JqZWN0X2dldF9zZyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2Jq LAotCQkgICAgICAgdW5zaWduZWQgaW50IG4sCi0JCSAgICAgICB1bnNpZ25lZCBpbnQgKm9mZnNl dCkKLXsKLQlzdHJ1Y3QgaTkxNV9nZW1fb2JqZWN0X3BhZ2VfaXRlciAqaXRlciA9ICZvYmotPm1t LmdldF9wYWdlOwotCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7Ci0JdW5zaWduZWQgaW50IGlkeCwg Y291bnQ7Ci0KLQltaWdodF9zbGVlcCgpOwotCUdFTV9CVUdfT04obiA+PSBvYmotPmJhc2Uuc2l6 ZSA+PiBQQUdFX1NISUZUKTsKLQlHRU1fQlVHX09OKCFpOTE1X2dlbV9vYmplY3RfaGFzX3Bpbm5l ZF9wYWdlcyhvYmopKTsKLQotCS8qIEFzIHdlIGl0ZXJhdGUgZm9yd2FyZCB0aHJvdWdoIHRoZSBz Zywgd2UgcmVjb3JkIGVhY2ggZW50cnkgaW4gYQotCSAqIHJhZGl4dHJlZSBmb3IgcXVpY2sgcmVw ZWF0ZWQgKGJhY2t3YXJkcykgbG9va3Vwcy4gSWYgd2UgaGF2ZSBzZWVuCi0JICogdGhpcyBpbmRl eCBwcmV2aW91c2x5LCB3ZSB3aWxsIGhhdmUgYW4gZW50cnkgZm9yIGl0LgotCSAqCi0JICogSW5p dGlhbCBsb29rdXAgaXMgTyhOKSwgYnV0IHRoaXMgaXMgYW1vcnRpemVkIHRvIE8oMSkgZm9yCi0J ICogc2VxdWVudGlhbCBwYWdlIGFjY2VzcyAod2hlcmUgZWFjaCBuZXcgcmVxdWVzdCBpcyBjb25z ZWN1dGl2ZQotCSAqIHRvIHRoZSBwcmV2aW91cyBvbmUpLiBSZXBlYXRlZCBsb29rdXBzIGFyZSBP KGxnKG9iai0+YmFzZS5zaXplKSksCi0JICogaS5lLiBPKDEpIHdpdGggYSBsYXJnZSBjb25zdGFu dCEKLQkgKi8KLQlpZiAobiA8IFJFQURfT05DRShpdGVyLT5zZ19pZHgpKQotCQlnb3RvIGxvb2t1 cDsKLQotCW11dGV4X2xvY2soJml0ZXItPmxvY2spOwotCi0JLyogV2UgcHJlZmVyIHRvIHJldXNl IHRoZSBsYXN0IHNnIHNvIHRoYXQgcmVwZWF0ZWQgbG9va3VwIG9mIHRoaXMKLQkgKiAob3IgdGhl IHN1YnNlcXVlbnQpIHNnIGFyZSBmYXN0IC0gY29tcGFyaW5nIGFnYWluc3QgdGhlIGxhc3QKLQkg KiBzZyBpcyBmYXN0ZXIgdGhhbiBnb2luZyB0aHJvdWdoIHRoZSByYWRpeHRyZWUuCi0JICovCi0K LQlzZyA9IGl0ZXItPnNnX3BvczsKLQlpZHggPSBpdGVyLT5zZ19pZHg7Ci0JY291bnQgPSBfX3Nn X3BhZ2VfY291bnQoc2cpOwotCi0Jd2hpbGUgKGlkeCArIGNvdW50IDw9IG4pIHsKLQkJdm9pZCAq ZW50cnk7Ci0JCXVuc2lnbmVkIGxvbmcgaTsKLQkJaW50IHJldDsKLQotCQkvKiBJZiB3ZSBjYW5u b3QgYWxsb2NhdGUgYW5kIGluc2VydCB0aGlzIGVudHJ5LCBvciB0aGUKLQkJICogaW5kaXZpZHVh bCBwYWdlcyBmcm9tIHRoaXMgcmFuZ2UsIGNhbmNlbCB1cGRhdGluZyB0aGUKLQkJICogc2dfaWR4 IHNvIHRoYXQgb24gdGhpcyBsb29rdXAgd2UgYXJlIGZvcmNlZCB0byBsaW5lYXJseQotCQkgKiBz Y2FuIG9ud2FyZHMsIGJ1dCBvbiBmdXR1cmUgbG9va3VwcyB3ZSB3aWxsIHRyeSB0aGUKLQkJICog aW5zZXJ0aW9uIGFnYWluIChpbiB3aGljaCBjYXNlIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBvZgot CQkgKiB0aGUgZXJyb3IgcmV0dXJuIHJlcG9ydGluZyB0aGF0IHdlIGhhdmUgYWxyZWFkeSBpbnNl cnRlZAotCQkgKiB0aGlzIGluZGV4KS4KLQkJICovCi0JCXJldCA9IHJhZGl4X3RyZWVfaW5zZXJ0 KCZpdGVyLT5yYWRpeCwgaWR4LCBzZyk7Ci0JCWlmIChyZXQgJiYgcmV0ICE9IC1FRVhJU1QpCi0J CQlnb3RvIHNjYW47Ci0KLQkJZW50cnkgPSB4YV9ta192YWx1ZShpZHgpOwotCQlmb3IgKGkgPSAx OyBpIDwgY291bnQ7IGkrKykgewotCQkJcmV0ID0gcmFkaXhfdHJlZV9pbnNlcnQoJml0ZXItPnJh ZGl4LCBpZHggKyBpLCBlbnRyeSk7Ci0JCQlpZiAocmV0ICYmIHJldCAhPSAtRUVYSVNUKQotCQkJ CWdvdG8gc2NhbjsKLQkJfQotCi0JCWlkeCArPSBjb3VudDsKLQkJc2cgPSBfX19fc2dfbmV4dChz Zyk7Ci0JCWNvdW50ID0gX19zZ19wYWdlX2NvdW50KHNnKTsKLQl9Ci0KLXNjYW46Ci0JaXRlci0+ c2dfcG9zID0gc2c7Ci0JaXRlci0+c2dfaWR4ID0gaWR4OwotCi0JbXV0ZXhfdW5sb2NrKCZpdGVy LT5sb2NrKTsKLQotCWlmICh1bmxpa2VseShuIDwgaWR4KSkgLyogaW5zZXJ0aW9uIGNvbXBsZXRl ZCBieSBhbm90aGVyIHRocmVhZCAqLwotCQlnb3RvIGxvb2t1cDsKLQotCS8qIEluIGNhc2Ugd2Ug ZmFpbGVkIHRvIGluc2VydCB0aGUgZW50cnkgaW50byB0aGUgcmFkaXh0cmVlLCB3ZSBuZWVkCi0J ICogdG8gbG9vayBiZXlvbmQgdGhlIGN1cnJlbnQgc2cuCi0JICovCi0Jd2hpbGUgKGlkeCArIGNv dW50IDw9IG4pIHsKLQkJaWR4ICs9IGNvdW50OwotCQlzZyA9IF9fX19zZ19uZXh0KHNnKTsKLQkJ Y291bnQgPSBfX3NnX3BhZ2VfY291bnQoc2cpOwotCX0KLQotCSpvZmZzZXQgPSBuIC0gaWR4Owot CXJldHVybiBzZzsKLQotbG9va3VwOgotCXJjdV9yZWFkX2xvY2soKTsKLQotCXNnID0gcmFkaXhf dHJlZV9sb29rdXAoJml0ZXItPnJhZGl4LCBuKTsKLQlHRU1fQlVHX09OKCFzZyk7Ci0KLQkvKiBJ ZiB0aGlzIGluZGV4IGlzIGluIHRoZSBtaWRkbGUgb2YgbXVsdGktcGFnZSBzZyBlbnRyeSwKLQkg KiB0aGUgcmFkaXggdHJlZSB3aWxsIGNvbnRhaW4gYSB2YWx1ZSBlbnRyeSB0aGF0IHBvaW50cwot CSAqIHRvIHRoZSBzdGFydCBvZiB0aGF0IHJhbmdlLiBXZSB3aWxsIHJldHVybiB0aGUgcG9pbnRl ciB0bwotCSAqIHRoZSBiYXNlIHBhZ2UgYW5kIHRoZSBvZmZzZXQgb2YgdGhpcyBwYWdlIHdpdGhp biB0aGUKLQkgKiBzZyBlbnRyeSdzIHJhbmdlLgotCSAqLwotCSpvZmZzZXQgPSAwOwotCWlmICh1 bmxpa2VseSh4YV9pc192YWx1ZShzZykpKSB7Ci0JCXVuc2lnbmVkIGxvbmcgYmFzZSA9IHhhX3Rv X3ZhbHVlKHNnKTsKLQotCQlzZyA9IHJhZGl4X3RyZWVfbG9va3VwKCZpdGVyLT5yYWRpeCwgYmFz ZSk7Ci0JCUdFTV9CVUdfT04oIXNnKTsKLQotCQkqb2Zmc2V0ID0gbiAtIGJhc2U7Ci0JfQotCi0J cmN1X3JlYWRfdW5sb2NrKCk7Ci0KLQlyZXR1cm4gc2c7Ci19Ci0KLXN0cnVjdCBwYWdlICoKLWk5 MTVfZ2VtX29iamVjdF9nZXRfcGFnZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLCB1 bnNpZ25lZCBpbnQgbikKLXsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwotCXVuc2lnbmVkIGlu dCBvZmZzZXQ7Ci0KLQlHRU1fQlVHX09OKCFpOTE1X2dlbV9vYmplY3RfaGFzX3N0cnVjdF9wYWdl KG9iaikpOwotCi0Jc2cgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X3NnKG9iaiwgbiwgJm9mZnNldCk7 Ci0JcmV0dXJuIG50aF9wYWdlKHNnX3BhZ2Uoc2cpLCBvZmZzZXQpOwotfQotCi0vKiBMaWtlIGk5 MTVfZ2VtX29iamVjdF9nZXRfcGFnZSgpLCBidXQgbWFyayB0aGUgcmV0dXJuZWQgcGFnZSBkaXJ0 eSAqLwotc3RydWN0IHBhZ2UgKgotaTkxNV9nZW1fb2JqZWN0X2dldF9kaXJ0eV9wYWdlKHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCi0JCQkgICAgICAgdW5zaWduZWQgaW50IG4pCi17 Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0KLQlwYWdlID0gaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdl KG9iaiwgbik7Ci0JaWYgKCFvYmotPm1tLmRpcnR5KQotCQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsK LQotCXJldHVybiBwYWdlOwotfQotCi1kbWFfYWRkcl90Ci1pOTE1X2dlbV9vYmplY3RfZ2V0X2Rt YV9hZGRyZXNzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCi0JCQkJdW5zaWduZWQg bG9uZyBuKQotewotCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7Ci0JdW5zaWduZWQgaW50IG9mZnNl dDsKLQotCXNnID0gaTkxNV9nZW1fb2JqZWN0X2dldF9zZyhvYmosIG4sICZvZmZzZXQpOwotCXJl dHVybiBzZ19kbWFfYWRkcmVzcyhzZykgKyAob2Zmc2V0IDw8IFBBR0VfU0hJRlQpOwotfQotCi1p bnQgaTkxNV9nZW1fb2JqZWN0X2F0dGFjaF9waHlzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmosIGludCBhbGlnbikKLXsKLQlzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzOwotCWludCBlcnI7 Ci0KLQlpZiAoYWxpZ24gPiBvYmotPmJhc2Uuc2l6ZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlp ZiAob2JqLT5vcHMgPT0gJmk5MTVfZ2VtX3BoeXNfb3BzKQotCQlyZXR1cm4gMDsKLQotCWlmIChv YmotPm9wcyAhPSAmaTkxNV9nZW1fc2htZW1fb3BzKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWVy ciA9IGk5MTVfZ2VtX29iamVjdF91bmJpbmQob2JqKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJy OwotCi0JbXV0ZXhfbG9jaygmb2JqLT5tbS5sb2NrKTsKLQotCWlmIChvYmotPm1tLm1hZHYgIT0g STkxNV9NQURWX1dJTExORUVEKSB7Ci0JCWVyciA9IC1FRkFVTFQ7Ci0JCWdvdG8gZXJyX3VubG9j azsKLQl9Ci0KLQlpZiAob2JqLT5tbS5xdWlya2VkKSB7Ci0JCWVyciA9IC1FRkFVTFQ7Ci0JCWdv dG8gZXJyX3VubG9jazsKLQl9Ci0KLQlpZiAob2JqLT5tbS5tYXBwaW5nKSB7Ci0JCWVyciA9IC1F QlVTWTsKLQkJZ290byBlcnJfdW5sb2NrOwotCX0KLQotCXBhZ2VzID0gX19pOTE1X2dlbV9vYmpl Y3RfdW5zZXRfcGFnZXMob2JqKTsKLQotCW9iai0+b3BzID0gJmk5MTVfZ2VtX3BoeXNfb3BzOwot Ci0JZXJyID0gX19fX2k5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXMob2JqKTsKLQlpZiAoZXJyKQot CQlnb3RvIGVycl94ZmVyOwotCi0JLyogUGVybWEtcGluICh1bnRpbCByZWxlYXNlKSB0aGUgcGh5 c2ljYWwgc2V0IG9mIHBhZ2VzICovCi0JX19pOTE1X2dlbV9vYmplY3RfcGluX3BhZ2VzKG9iaik7 Ci0KLQlpZiAoIUlTX0VSUl9PUl9OVUxMKHBhZ2VzKSkKLQkJaTkxNV9nZW1fc2htZW1fb3BzLnB1 dF9wYWdlcyhvYmosIHBhZ2VzKTsKLQltdXRleF91bmxvY2soJm9iai0+bW0ubG9jayk7Ci0JcmV0 dXJuIDA7Ci0KLWVycl94ZmVyOgotCW9iai0+b3BzID0gJmk5MTVfZ2VtX3NobWVtX29wczsKLQlp ZiAoIUlTX0VSUl9PUl9OVUxMKHBhZ2VzKSkgewotCQl1bnNpZ25lZCBpbnQgc2dfcGFnZV9zaXpl cyA9IGk5MTVfc2dfcGFnZV9zaXplcyhwYWdlcy0+c2dsKTsKLQotCQlfX2k5MTVfZ2VtX29iamVj dF9zZXRfcGFnZXMob2JqLCBwYWdlcywgc2dfcGFnZV9zaXplcyk7Ci0JfQotZXJyX3VubG9jazoK LQltdXRleF91bmxvY2soJm9iai0+bW0ubG9jayk7Ci0JcmV0dXJuIGVycjsKLX0KLQogI2lmIElT X0VOQUJMRUQoQ09ORklHX0RSTV9JOTE1X1NFTEZURVNUKQogI2luY2x1ZGUgInNlbGZ0ZXN0cy9z Y2F0dGVybGlzdC5jIgogI2luY2x1ZGUgInNlbGZ0ZXN0cy9tb2NrX2dlbV9kZXZpY2UuYyIKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3Nocmlua2VyLmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9zaHJpbmtlci5jCmluZGV4IDU4OGUzODk4YjEyMC4u MmM3YWVmYjNlMTAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9z aHJpbmtlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3Nocmlua2VyLmMK QEAgLTExNCw2NSArMTE0LDE4IEBAIHN0YXRpYyBib29sIHVuc2FmZV9kcm9wX3BhZ2VzKHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiAJcmV0dXJuICFpOTE1X2dlbV9vYmplY3RfaGFz X3BhZ2VzKG9iaik7CiB9CiAKLXN0YXRpYyB2b2lkIF9fc3RhcnRfd3JpdGViYWNrKHN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCi0JCQkgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCitz dGF0aWMgdm9pZCB0cnlfdG9fd3JpdGViYWNrKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv YmosCisJCQkgICAgIHVuc2lnbmVkIGludCBmbGFncykKIHsKLQlzdHJ1Y3QgYWRkcmVzc19zcGFj ZSAqbWFwcGluZzsKLQlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgd2JjID0gewotCQkuc3luY19t b2RlID0gV0JfU1lOQ19OT05FLAotCQkubnJfdG9fd3JpdGUgPSBTV0FQX0NMVVNURVJfTUFYLAot CQkucmFuZ2Vfc3RhcnQgPSAwLAotCQkucmFuZ2VfZW5kID0gTExPTkdfTUFYLAotCQkuZm9yX3Jl Y2xhaW0gPSAxLAotCX07Ci0JdW5zaWduZWQgbG9uZyBpOwotCi0JbG9ja2RlcF9hc3NlcnRfaGVs ZCgmb2JqLT5tbS5sb2NrKTsKLQlHRU1fQlVHX09OKGk5MTVfZ2VtX29iamVjdF9oYXNfcGFnZXMo b2JqKSk7Ci0KIAlzd2l0Y2ggKG9iai0+bW0ubWFkdikgewogCWNhc2UgSTkxNV9NQURWX0RPTlRO RUVEOgotCQlfX2k5MTVfZ2VtX29iamVjdF90cnVuY2F0ZShvYmopOworCQlpOTE1X2dlbV9vYmpl Y3RfdHJ1bmNhdGUob2JqKTsKIAljYXNlIF9fSTkxNV9NQURWX1BVUkdFRDoKIAkJcmV0dXJuOwog CX0KIAotCWlmICghb2JqLT5iYXNlLmZpbHApCi0JCXJldHVybjsKLQotCWlmICghKGZsYWdzICYg STkxNV9TSFJJTktfV1JJVEVCQUNLKSkKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBMZWF2ZSBtbWFw aW5ncyBpbnRhY3QgKEdUVCB3aWxsIGhhdmUgYmVlbiByZXZva2VkIG9uIHVuYmluZGluZywKLQkg KiBsZWF2aW5nIG9ubHkgQ1BVIG1tYXBpbmdzIGFyb3VuZCkgYW5kIGFkZCB0aG9zZSBwYWdlcyB0 byB0aGUgTFJVCi0JICogaW5zdGVhZCBvZiBpbnZva2luZyB3cml0ZWJhY2sgc28gdGhleSBhcmUg YWdlZCBhbmQgcGFnZWQgb3V0Ci0JICogYXMgbm9ybWFsLgotCSAqLwotCW1hcHBpbmcgPSBvYmot PmJhc2UuZmlscC0+Zl9tYXBwaW5nOwotCi0JLyogQmVnaW4gd3JpdGViYWNrIG9uIGVhY2ggZGly dHkgcGFnZSAqLwotCWZvciAoaSA9IDA7IGkgPCBvYmotPmJhc2Uuc2l6ZSA+PiBQQUdFX1NISUZU OyBpKyspIHsKLQkJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0KLQkJcGFnZSA9IGZpbmRfbG9ja19lbnRy eShtYXBwaW5nLCBpKTsKLQkJaWYgKCFwYWdlIHx8IHhhX2lzX3ZhbHVlKHBhZ2UpKQotCQkJY29u dGludWU7Ci0KLQkJaWYgKCFwYWdlX21hcHBlZChwYWdlKSAmJiBjbGVhcl9wYWdlX2RpcnR5X2Zv cl9pbyhwYWdlKSkgewotCQkJaW50IHJldDsKLQotCQkJU2V0UGFnZVJlY2xhaW0ocGFnZSk7Ci0J CQlyZXQgPSBtYXBwaW5nLT5hX29wcy0+d3JpdGVwYWdlKHBhZ2UsICZ3YmMpOwotCQkJaWYgKCFQ YWdlV3JpdGViYWNrKHBhZ2UpKQotCQkJCUNsZWFyUGFnZVJlY2xhaW0ocGFnZSk7Ci0JCQlpZiAo IXJldCkKLQkJCQlnb3RvIHB1dDsKLQkJfQotCQl1bmxvY2tfcGFnZShwYWdlKTsKLXB1dDoKLQkJ cHV0X3BhZ2UocGFnZSk7Ci0JfQorCWlmIChmbGFncyAmIEk5MTVfU0hSSU5LX1dSSVRFQkFDSykK KwkJaTkxNV9nZW1fb2JqZWN0X3dyaXRlYmFjayhvYmopOwogfQogCiAvKioKQEAgLTMxNSw3ICsy NjgsNyBAQCBpOTE1X2dlbV9zaHJpbmsoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCiAJ CQkJbXV0ZXhfbG9ja19uZXN0ZWQoJm9iai0+bW0ubG9jaywKIAkJCQkJCSAgSTkxNV9NTV9TSFJJ TktFUik7CiAJCQkJaWYgKCFpOTE1X2dlbV9vYmplY3RfaGFzX3BhZ2VzKG9iaikpIHsKLQkJCQkJ X19zdGFydF93cml0ZWJhY2sob2JqLCBmbGFncyk7CisJCQkJCXRyeV90b193cml0ZWJhY2sob2Jq LCBmbGFncyk7CiAJCQkJCWNvdW50ICs9IG9iai0+YmFzZS5zaXplID4+IFBBR0VfU0hJRlQ7CiAJ CQkJfQogCQkJCW11dGV4X3VubG9jaygmb2JqLT5tbS5sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9vYmplY3QuYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9vYmplY3QuYwppbmRleCBhMGY1OWZiMGQ3MDEu LmI5OGEyODZhOGJlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3Rz L2k5MTVfZ2VtX29iamVjdC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9p OTE1X2dlbV9vYmplY3QuYwpAQCAtNDksNTkgKzQ5LDYgQEAgc3RhdGljIGludCBpZ3RfZ2VtX29i amVjdCh2b2lkICphcmcpCiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBpZ3RfcGh5c19v YmplY3Qodm9pZCAqYXJnKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gYXJn OwotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Ci0JaW50IGVycjsKLQotCS8qIENy ZWF0ZSBhbiBvYmplY3QgYW5kIGJpbmQgaXQgdG8gYSBjb250aWd1b3VzIHNldCBvZiBwaHlzaWNh bCBwYWdlcywKLQkgKiBpLmUuIGV4ZXJjaXNlIHRoZSBpOTE1X2dlbV9vYmplY3RfcGh5cyBBUEku Ci0JICovCi0KLQlvYmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX3NobWVtKGk5MTUsIFBBR0Vf U0laRSk7Ci0JaWYgKElTX0VSUihvYmopKSB7Ci0JCWVyciA9IFBUUl9FUlIob2JqKTsKLQkJcHJf ZXJyKCJpOTE1X2dlbV9vYmplY3RfY3JlYXRlIGZhaWxlZCwgZXJyPSVkXG4iLCBlcnIpOwotCQln b3RvIG91dDsKLQl9Ci0KLQltdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKLQll cnIgPSBpOTE1X2dlbV9vYmplY3RfYXR0YWNoX3BoeXMob2JqLCBQQUdFX1NJWkUpOwotCW11dGV4 X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Ci0JaWYgKGVycikgewotCQlwcl9lcnIo Imk5MTVfZ2VtX29iamVjdF9hdHRhY2hfcGh5cyBmYWlsZWQsIGVycj0lZFxuIiwgZXJyKTsKLQkJ Z290byBvdXRfb2JqOwotCX0KLQotCWlmIChvYmotPm9wcyAhPSAmaTkxNV9nZW1fcGh5c19vcHMp IHsKLQkJcHJfZXJyKCJpOTE1X2dlbV9vYmplY3RfYXR0YWNoX3BoeXMgZGlkIG5vdCBjcmVhdGUg YSBwaHlzIG9iamVjdFxuIik7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0X29iajsKLQl9 Ci0KLQlpZiAoIWF0b21pY19yZWFkKCZvYmotPm1tLnBhZ2VzX3Bpbl9jb3VudCkpIHsKLQkJcHJf ZXJyKCJpOTE1X2dlbV9vYmplY3RfYXR0YWNoX3BoeXMgZGlkIG5vdCBwaW4gaXRzIHBoeXMgcGFn ZXNcbiIpOwotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIG91dF9vYmo7Ci0JfQotCi0JLyogTWFr ZSB0aGUgb2JqZWN0IGRpcnR5IHNvIHRoYXQgcHV0X3BhZ2VzIG11c3QgZG8gY29weSBiYWNrIHRo ZSBkYXRhICovCi0JbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Ci0JZXJyID0g aTkxNV9nZW1fb2JqZWN0X3NldF90b19ndHRfZG9tYWluKG9iaiwgdHJ1ZSk7Ci0JbXV0ZXhfdW5s b2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKLQlpZiAoZXJyKSB7Ci0JCXByX2VycigiaTkx NV9nZW1fb2JqZWN0X3NldF90b19ndHRfZG9tYWluIGZhaWxlZCB3aXRoIGVycj0lZFxuIiwKLQkJ ICAgICAgIGVycik7Ci0JCWdvdG8gb3V0X29iajsKLQl9Ci0KLW91dF9vYmo6Ci0JaTkxNV9nZW1f b2JqZWN0X3B1dChvYmopOwotb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KIHN0YXRpYyBpbnQgaWd0 X2dlbV9odWdlKHZvaWQgKmFyZykKIHsKIAljb25zdCB1bnNpZ25lZCBpbnQgbnJlYWwgPSA1MDk7 IC8qIGp1c3QgdG8gYmUgYXdrd2FyZCAqLwpAQCAtNjMxLDcgKzU3OCw2IEBAIGludCBpOTE1X2dl bV9vYmplY3RfbW9ja19zZWxmdGVzdHModm9pZCkKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGk5 MTVfc3VidGVzdCB0ZXN0c1tdID0gewogCQlTVUJURVNUKGlndF9nZW1fb2JqZWN0KSwKLQkJU1VC VEVTVChpZ3RfcGh5c19vYmplY3QpLAogCX07CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTU7CiAJaW50IGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0 cy9pOTE1X21vY2tfc2VsZnRlc3RzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMv aTkxNV9tb2NrX3NlbGZ0ZXN0cy5oCmluZGV4IDg4ZTVhYjU4NjMzNy4uNTEwZWIxNzZiYjJjIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9tb2NrX3NlbGZ0 ZXN0cy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X21vY2tfc2Vs ZnRlc3RzLmgKQEAgLTE4LDYgKzE4LDcgQEAgc2VsZnRlc3QoZW5naW5lLCBpbnRlbF9lbmdpbmVf Y3NfbW9ja19zZWxmdGVzdHMpCiBzZWxmdGVzdCh0aW1lbGluZXMsIGk5MTVfdGltZWxpbmVfbW9j a19zZWxmdGVzdHMpCiBzZWxmdGVzdChyZXF1ZXN0cywgaTkxNV9yZXF1ZXN0X21vY2tfc2VsZnRl c3RzKQogc2VsZnRlc3Qob2JqZWN0cywgaTkxNV9nZW1fb2JqZWN0X21vY2tfc2VsZnRlc3RzKQor c2VsZnRlc3QocGh5cywgaTkxNV9nZW1fcGh5c19tb2NrX3NlbGZ0ZXN0cykKIHNlbGZ0ZXN0KGRt YWJ1ZiwgaTkxNV9nZW1fZG1hYnVmX21vY2tfc2VsZnRlc3RzKQogc2VsZnRlc3Qodm1hLCBpOTE1 X3ZtYV9tb2NrX3NlbGZ0ZXN0cykKIHNlbGZ0ZXN0KGV2aWN0LCBpOTE1X2dlbV9ldmljdF9tb2Nr X3NlbGZ0ZXN0cykKLS0gCjIuMjAuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vaW50ZWwtZ2Z4