From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [PATCH 1/7] drm/i915: Record GT workarounds in a list Date: Mon, 3 Dec 2018 13:33:19 +0000 Message-ID: <20181203133319.10174-1-tvrtko.ursulin@linux.intel.com> References: <20181203125014.3219-2-tvrtko.ursulin@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id E969F89E47 for ; Mon, 3 Dec 2018 13:33:24 +0000 (UTC) In-Reply-To: <20181203125014.3219-2-tvrtko.ursulin@linux.intel.com> 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 List-Id: intel-gfx@lists.freedesktop.org RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KClRvIGVuYWJs ZSBsYXRlciB2ZXJpZmljYXRpb24gb2YgR1Qgd29ya2Fyb3VuZCBzdGF0ZSBhdCB2YXJpb3VzIHN0 YWdlcyBvZgpkcml2ZXIgbGlmZXRpbWUsIHdlIHJlY29yZCB0aGUgbGlzdCBvZiBhcHBsaWNhYmxl IG9uZXMgcGVyIHBsYXRmb3JtcyB0byBhCmxpc3QsIGZyb20gd2hpY2ggdGhleSBhcmUgYWxzbyBh cHBsaWVkLgoKVGhlIGFkZGVkIGRhdGEgc3RydWN0dXJlIGlzIGEgc2ltcGxlIGFycmF5IG9mIHJl Z2lzdGVyLCBtYXNrIGFuZCB2YWx1ZQppdGVtcywgd2hpY2ggaXMgYWxsb2NhdGVkIG9uIGRlbWFu ZCBhcyB3b3JrYXJvdW5kcyBhcmUgYWRkZWQgdG8gdGhlIGxpc3QuCgpUaGlzIGlzIGEgdGVtcG9y YXJ5IGltcGxlbWVudGF0aW9uIHdoaWNoIGxhdGVyIGluIHRoZSBzZXJpZXMgZ2V0cyBmdXNlZAp3 aXRoIHRoZSBleGlzdGluZyBwZXIgY29udGV4dCB3b3JrYXJvdW5kIGxpc3QgaGFuZGxpbmcuIEl0 IGlzIHNlcGFyYXRlZCBhdAp0aGlzIHN0YWdlIHNpbmNlIHRoZSBmb2xsb3dpbmcgcGF0Y2ggZml4 ZXMgYSBidWcgd2hpY2ggbmVlZHMgdG8gYmUgYXMgZWFzeQp0byBiYWNrcG9ydCBhcyBwb3NzaWJs ZS4KCkFsc28sIHNpbmNlIGluIHRoZSBmb2xsb3dpbmcgcGF0Y2ggd2Ugd2lsbCBiZSBhZGRpbmcg YSBuZXcgY2xhc3Mgb2YKd29ya2Fyb3VuZHMgKHBlciBlbmdpbmUpIHdoaWNoIGNhbiBiZSBhcHBs aWVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQsIHdlCnN0cmFpZ2h0IGF3YXkgbWFrZSB0aGUgcHJv dmlzaW9uIGZvciBzYWZlIHJlYWQtbW9kaWZ5LXdyaXRlIGN5Y2xlLgoKdjI6CiAqIENoYW5nZSBk ZXZfcHJpdiB0byBpOTE1IGFsb25nIHRoZSBpbml0IHBhdGguIChDaHJpcyBXaWxzb24pCiAqIEFQ SSByZW5hbWUuIChDaHJpcyBXaWxzb24pCgp2MzoKICogUmVtb3ZlIGV4cGxpY2l0IGxpc3Qgc2l6 ZSB0cmFja2luZyBpbiBmYXZvdXIgb2YgZ3Jvd2luZyB0aGUgYWxsb2NhdGlvbgogICBpbiBwb3dl ciBvZiB0d28gY2h1bmtzLiAoQ2hyaXMgV2lsc29uKQoKdjQ6CiBDaHJpcyBXaWxzb246CiAqIENo YW5nZSB3YV9saXN0X2ZpbmlzaCB0byBlYXJseSByZXR1cm4uCiAqIENvcHkgd29ya2Fyb3VuZHMg dXNpbmcgdGhlIGNvbXBpbGVyIGZvciBzdGF0aWMgY2hlY2tpbmcuCiAqIERvIG5vdCBib3RoZXIg emVyb2luZyB1bnVzZWQgZW50cmllcy4KICogUmUtb3JkZXIgc3RydWN0IGk5MTVfd2FfbGlzdC4K CnY1OgogKiBrbWFsbG9jX2FycmF5LgogKiBXaGl0ZXNwYWNlIGNsZWFudXAuCgpTaWduZWQtb2Zm LWJ5OiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgpSZXZpZXdlZC1i eTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Ci0tLQogZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9kcnYuYyAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5oICAgICAgICAgIHwgICAyICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtLmMgICAgICAgICAgfCAgIDQgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3dv cmthcm91bmRzLmMgfCA0OTIgKysrKysrKysrKysrKysrLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX3dvcmthcm91bmRzLmggfCAgMjMgKy0KIDUgZmlsZXMgY2hhbmdlZCwgMzU0 IGluc2VydGlvbnMoKyksIDE2OCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwpp bmRleCBlMzkwMTY3MTM0NjQuLmVlNTExNmI2MmNkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5j CkBAIC0xNDUzLDYgKzE0NTMsNyBAQCBzdGF0aWMgaW50IGk5MTVfZHJpdmVyX2luaXRfaHcoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCiAJaW50ZWxfdW5jb3JlX3Nhbml0aXpl KGRldl9wcml2KTsKIAorCWludGVsX2d0X2luaXRfd29ya2Fyb3VuZHMoZGV2X3ByaXYpOwogCWk5 MTVfZ2VtX2xvYWRfaW5pdF9mZW5jZXMoZGV2X3ByaXYpOwogCiAJLyogT24gdGhlIDk0NUcvR00s IHRoZSBjaGlwc2V0IHJlcG9ydHMgdGhlIE1TSSBjYXBhYmlsaXR5IG9uIHRoZQpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZHJ2LmgKaW5kZXggNDNhYzY4NzNhMmJiLi45ZGRiY2MxZjM1NTQgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kcnYuaApAQCAtNjksNiArNjksNyBAQAogI2luY2x1ZGUgImludGVsX3JpbmdidWZm ZXIuaCIKICNpbmNsdWRlICJpbnRlbF91bmNvcmUuaCIKICNpbmNsdWRlICJpbnRlbF93b3BjbS5o IgorI2luY2x1ZGUgImludGVsX3dvcmthcm91bmRzLmgiCiAjaW5jbHVkZSAiaW50ZWxfdWMuaCIK IAogI2luY2x1ZGUgImk5MTVfZ2VtLmgiCkBAIC0xNjUyLDYgKzE2NTMsNyBAQCBzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSB7CiAJaW50IGRwaW9fcGh5X2lvc2ZfcG9ydFtJOTE1X05VTV9QSFlTX1ZM Vl07CiAKIAlzdHJ1Y3QgaTkxNV93b3JrYXJvdW5kcyB3b3JrYXJvdW5kczsKKwlzdHJ1Y3QgaTkx NV93YV9saXN0IGd0X3dhX2xpc3Q7CiAKIAlzdHJ1Y3QgaTkxNV9mcm9udGJ1ZmZlcl90cmFja2lu ZyBmYl90cmFja2luZzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKaW5kZXggYzU1YjFmNzVjOTgw Li42MzMzYTdkNmFmNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwpAQCAtNTMzNCw3ICs1MzM0 LDcgQEAgaW50IGk5MTVfZ2VtX2luaXRfaHcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KQogCQlJOTE1X1dSSVRFKE1JX1BSRURJQ0FURV9SRVNVTFRfMiwgSVNfSFNXX0dUMyhkZXZf cHJpdikgPwogCQkJICAgTE9XRVJfU0xJQ0VfRU5BQkxFRCA6IExPV0VSX1NMSUNFX0RJU0FCTEVE KTsKIAotCWludGVsX2d0X3dvcmthcm91bmRzX2FwcGx5KGRldl9wcml2KTsKKwlpbnRlbF9ndF9h cHBseV93b3JrYXJvdW5kcyhkZXZfcHJpdik7CiAKIAlpOTE1X2dlbV9pbml0X3N3aXp6bGluZyhk ZXZfcHJpdik7CiAKQEAgLTU3MDYsNiArNTcwNiw4IEBAIHZvaWQgaTkxNV9nZW1fZmluaShzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJaTkxNV9nZW1fY29udGV4dHNfZmluaShk ZXZfcHJpdik7CiAJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+ZHJtLnN0cnVjdF9tdXRleCk7CiAK KwlpbnRlbF93YV9saXN0X2ZyZWUoJmRldl9wcml2LT5ndF93YV9saXN0KTsKKwogCWludGVsX2Ns ZWFudXBfZ3RfcG93ZXJzYXZlKGRldl9wcml2KTsKIAogCWludGVsX3VjX2ZpbmlfbWlzYyhkZXZf cHJpdik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF93b3JrYXJvdW5k cy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfd29ya2Fyb3VuZHMuYwppbmRleCBlNWNk NmM2YzY2YzMuLmMzMjU2YWIyYzQxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfd29ya2Fyb3VuZHMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF93b3Jr YXJvdW5kcy5jCkBAIC00OCw2ICs0OCwyMCBAQAogICogLSBQdWJsaWMgZnVuY3Rpb25zIHRvIGlu aXQgb3IgYXBwbHkgdGhlIGdpdmVuIHdvcmthcm91bmQgdHlwZS4KICAqLwogCitzdGF0aWMgdm9p ZCB3YV9pbml0X3N0YXJ0KHN0cnVjdCBpOTE1X3dhX2xpc3QgKndhbCwgY29uc3QgY2hhciAqbmFt ZSkKK3sKKwl3YWwtPm5hbWUgPSBuYW1lOworfQorCitzdGF0aWMgdm9pZCB3YV9pbml0X2Zpbmlz aChzdHJ1Y3QgaTkxNV93YV9saXN0ICp3YWwpCit7CisJaWYgKCF3YWwtPmNvdW50KQorCQlyZXR1 cm47CisKKwlEUk1fREVCVUdfRFJJVkVSKCJJbml0aWFsaXplZCAldSAlcyB3b3JrYXJvdW5kc1xu IiwKKwkJCSB3YWwtPmNvdW50LCB3YWwtPm5hbWUpOworfQorCiBzdGF0aWMgdm9pZCB3YV9hZGQo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCiAJCSAgIGk5MTVfcmVnX3QgcmVnLCBjb25z dCB1MzIgbWFzaywgY29uc3QgdTMyIHZhbCkKIHsKQEAgLTU3NSwxNjAgKzU4OSwyMzkgQEAgaW50 IGludGVsX2N0eF93b3JrYXJvdW5kc19lbWl0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQogCXJl dHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBiZHdfZ3Rfd29ya2Fyb3VuZHNfYXBwbHkoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQorc3RhdGljIHZvaWQKK3dhbF9hZGQoc3RydWN0 IGk5MTVfd2FfbGlzdCAqd2FsLCBjb25zdCBzdHJ1Y3QgaTkxNV93YSAqd2EpCit7CisJY29uc3Qg dW5zaWduZWQgaW50IGdyb3cgPSAxIDw8IDQ7CisKKwlHRU1fQlVHX09OKCFpc19wb3dlcl9vZl8y KGdyb3cpKTsKKworCWlmIChJU19BTElHTkVEKHdhbC0+Y291bnQsIGdyb3cpKSB7IC8qIEVpdGhl ciB1bmluaXRpYWxpemVkIG9yIGZ1bGwuICovCisJCXN0cnVjdCBpOTE1X3dhICpsaXN0OworCisJ CWxpc3QgPSBrbWFsbG9jX2FycmF5KEFMSUdOKHdhbC0+Y291bnQgKyAxLCBncm93KSwgc2l6ZW9m KCp3YSksCisJCQkJICAgICBHRlBfS0VSTkVMKTsKKwkJaWYgKCFsaXN0KSB7CisJCQlEUk1fRVJS T1IoIk5vIHNwYWNlIGZvciB3b3JrYXJvdW5kIGluaXQhXG4iKTsKKwkJCXJldHVybjsKKwkJfQor CisJCWlmICh3YWwtPmxpc3QpCisJCQltZW1jcHkobGlzdCwgd2FsLT5saXN0LCBzaXplb2YoKndh KSAqIHdhbC0+Y291bnQpOworCisJCXdhbC0+bGlzdCA9IGxpc3Q7CisJfQorCisJd2FsLT5saXN0 W3dhbC0+Y291bnQrK10gPSAqd2E7Cit9CisKK3N0YXRpYyB2b2lkCit3YV9tYXNrZWRfZW4oc3Ry dWN0IGk5MTVfd2FfbGlzdCAqd2FsLCBpOTE1X3JlZ190IHJlZywgdTMyIHZhbCkKK3sKKwlzdHJ1 Y3QgaTkxNV93YSB3YSA9IHsKKwkJLnJlZyA9IHJlZywKKwkJLm1hc2sgPSB2YWwsCisJCS52YWwg PSBfTUFTS0VEX0JJVF9FTkFCTEUodmFsKQorCX07CisKKwl3YWxfYWRkKHdhbCwgJndhKTsKK30K Kworc3RhdGljIHZvaWQKK3dhX3dyaXRlX21hc2tlZF9vcihzdHJ1Y3QgaTkxNV93YV9saXN0ICp3 YWwsIGk5MTVfcmVnX3QgcmVnLCB1MzIgbWFzaywKKwkJICAgdTMyIHZhbCkKIHsKKwlzdHJ1Y3Qg aTkxNV93YSB3YSA9IHsKKwkJLnJlZyA9IHJlZywKKwkJLm1hc2sgPSBtYXNrLAorCQkudmFsID0g dmFsCisJfTsKKworCXdhbF9hZGQod2FsLCAmd2EpOworfQorCitzdGF0aWMgdm9pZAord2Ffd3Jp dGUoc3RydWN0IGk5MTVfd2FfbGlzdCAqd2FsLCBpOTE1X3JlZ190IHJlZywgdTMyIHZhbCkKK3sK Kwl3YV93cml0ZV9tYXNrZWRfb3Iod2FsLCByZWcsIH4wLCB2YWwpOwogfQogCi1zdGF0aWMgdm9p ZCBjaHZfZ3Rfd29ya2Fyb3VuZHNfYXBwbHkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KQorc3RhdGljIHZvaWQKK3dhX3dyaXRlX29yKHN0cnVjdCBpOTE1X3dhX2xpc3QgKndhbCwg aTkxNV9yZWdfdCByZWcsIHUzMiB2YWwpCiB7CisJd2Ffd3JpdGVfbWFza2VkX29yKHdhbCwgcmVn LCB2YWwsIHZhbCk7CiB9CiAKLXN0YXRpYyB2b2lkIGdlbjlfZ3Rfd29ya2Fyb3VuZHNfYXBwbHko c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQorc3RhdGljIHZvaWQgZ2VuOV9ndF93 b3JrYXJvdW5kc19pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQogeworCXN0cnVj dCBpOTE1X3dhX2xpc3QgKndhbCA9ICZpOTE1LT5ndF93YV9saXN0OworCiAJLyogV2FDb250ZXh0 U3dpdGNoV2l0aENvbmN1cnJlbnRUTEJJbnZhbGlkYXRlOnNrbCxieHQsa2JsLGdsayxjZmwgKi8K LQlJOTE1X1dSSVRFKEdFTjlfQ1NGRV9DSElDS0VOMV9SQ1MsCi0JCSAgIF9NQVNLRURfQklUX0VO QUJMRShHRU45X1BSRUVNUFRfR1BHUFVfU1lOQ19TV0lUQ0hfRElTQUJMRSkpOworCXdhX21hc2tl ZF9lbih3YWwsCisJCSAgICAgR0VOOV9DU0ZFX0NISUNLRU4xX1JDUywKKwkJICAgICBHRU45X1BS RUVNUFRfR1BHUFVfU1lOQ19TV0lUQ0hfRElTQUJMRSk7CisKIAogCS8qIFdhRW5hYmxlTGJzU2xh UmV0cnlUaW1lckRlY3JlbWVudDpza2wsYnh0LGtibCxnbGssY2ZsICovCi0JSTkxNV9XUklURShC RFdfU0NSQVRDSDEsIEk5MTVfUkVBRChCRFdfU0NSQVRDSDEpIHwKLQkJICAgR0VOOV9MQlNfU0xB X1JFVFJZX1RJTUVSX0RFQ1JFTUVOVF9FTkFCTEUpOworCXdhX3dyaXRlX29yKHdhbCwKKwkJICAg IEJEV19TQ1JBVENIMSwKKwkJICAgIEdFTjlfTEJTX1NMQV9SRVRSWV9USU1FUl9ERUNSRU1FTlRf RU5BQkxFKTsKIAogCS8qIFdhRGlzYWJsZUtpbGxMb2dpYzpieHQsc2tsLGtibCAqLwotCWlmICgh SVNfQ09GRkVFTEFLRShkZXZfcHJpdikpCi0JCUk5MTVfV1JJVEUoR0FNX0VDT0NISywgSTkxNV9S RUFEKEdBTV9FQ09DSEspIHwKLQkJCSAgIEVDT0NIS19ESVNfVExCKTsKKwlpZiAoIUlTX0NPRkZF RUxBS0UoaTkxNSkpCisJCXdhX3dyaXRlX29yKHdhbCwKKwkJCSAgICBHQU1fRUNPQ0hLLAorCQkJ ICAgIEVDT0NIS19ESVNfVExCKTsKIAotCWlmIChIQVNfTExDKGRldl9wcml2KSkgeworCWlmIChI QVNfTExDKGk5MTUpKSB7CiAJCS8qIFdhQ29tcHJlc3NlZFJlc291cmNlU2FtcGxlclBiZU1lZGlh TmV3SGFzaE1vZGU6c2tsLGtibAogCQkgKgogCQkgKiBNdXN0IG1hdGNoIERpc3BsYXkgRW5naW5l LiBTZWUKIAkJICogV2FDb21wcmVzc2VkUmVzb3VyY2VEaXNwbGF5TmV3SGFzaE1vZGUuCiAJCSAq LwotCQlJOTE1X1dSSVRFKE1NQ0RfTUlTQ19DVFJMLAotCQkJICAgSTkxNV9SRUFEKE1NQ0RfTUlT Q19DVFJMKSB8Ci0JCQkgICBNTUNEX1BDTEEgfAotCQkJICAgTU1DRF9IT1RTUE9UX0VOKTsKKwkJ d2Ffd3JpdGVfb3Iod2FsLAorCQkJICAgIE1NQ0RfTUlTQ19DVFJMLAorCQkJICAgIE1NQ0RfUENM QSB8IE1NQ0RfSE9UU1BPVF9FTik7CiAJfQogCiAJLyogV2FEaXNhYmxlSERDSW52YWxpZGF0aW9u OnNrbCxieHQsa2JsLGNmbCAqLwotCUk5MTVfV1JJVEUoR0FNX0VDT0NISywgSTkxNV9SRUFEKEdB TV9FQ09DSEspIHwKLQkJICAgQkRXX0RJU0FCTEVfSERDX0lOVkFMSURBVElPTik7CisJd2Ffd3Jp dGVfb3Iod2FsLAorCQkgICAgR0FNX0VDT0NISywKKwkJICAgIEJEV19ESVNBQkxFX0hEQ19JTlZB TElEQVRJT04pOwogCiAJLyogV2FQcm9ncmFtTDNTcWNSZWcxRGVmYXVsdEZvclBlcmY6Ynh0LGds ayAqLwotCWlmIChJU19HRU45X0xQKGRldl9wcml2KSkgewotCQl1MzIgdmFsID0gSTkxNV9SRUFE KEdFTjhfTDNTUUNSRUcxKTsKLQotCQl2YWwgJj0gfkwzX1BSSU9fQ1JFRElUU19NQVNLOwotCQl2 YWwgfD0gTDNfR0VORVJBTF9QUklPX0NSRURJVFMoNjIpIHwgTDNfSElHSF9QUklPX0NSRURJVFMo Mik7Ci0JCUk5MTVfV1JJVEUoR0VOOF9MM1NRQ1JFRzEsIHZhbCk7Ci0JfQorCWlmIChJU19HRU45 X0xQKGk5MTUpKQorCQl3YV93cml0ZV9tYXNrZWRfb3Iod2FsLAorCQkJCSAgIEdFTjhfTDNTUUNS RUcxLAorCQkJCSAgIEwzX1BSSU9fQ1JFRElUU19NQVNLLAorCQkJCSAgIEwzX0dFTkVSQUxfUFJJ T19DUkVESVRTKDYyKSB8CisJCQkJICAgTDNfSElHSF9QUklPX0NSRURJVFMoMikpOwogCiAJLyog V2FPQ0xDb2hlcmVudExpbmVGbHVzaDpza2wsYnh0LGtibCxjZmwgKi8KLQlJOTE1X1dSSVRFKEdF TjhfTDNTUUNSRUc0LAotCQkgICBJOTE1X1JFQUQoR0VOOF9MM1NRQ1JFRzQpIHwgR0VOOF9MUVND X0ZMVVNIX0NPSEVSRU5UX0xJTkVTKTsKKwl3YV93cml0ZV9vcih3YWwsCisJCSAgICBHRU44X0wz U1FDUkVHNCwKKwkJICAgIEdFTjhfTFFTQ19GTFVTSF9DT0hFUkVOVF9MSU5FUyk7CiAKIAkvKiBX YUVuYWJsZVByZWVtcHRpb25HcmFudWxhcml0eUNvbnRyb2xCeVVNRDpza2wsYnh0LGtibCxjZmws W2NubF0gKi8KLQlJOTE1X1dSSVRFKEdFTjdfRkZfU0xJQ0VfQ1NfQ0hJQ0tFTjEsCi0JCSAgIF9N QVNLRURfQklUX0VOQUJMRShHRU45X0ZGU0NfUEVSQ1RYX1BSRUVNUFRfQ1RSTCkpOworCXdhX21h c2tlZF9lbih3YWwsCisJCSAgICAgR0VON19GRl9TTElDRV9DU19DSElDS0VOMSwKKwkJICAgICBH RU45X0ZGU0NfUEVSQ1RYX1BSRUVNUFRfQ1RSTCk7CiB9CiAKLXN0YXRpYyB2b2lkIHNrbF9ndF93 b3JrYXJvdW5kc19hcHBseShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCitzdGF0 aWMgdm9pZCBza2xfZ3Rfd29ya2Fyb3VuZHNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNSkKIHsKLQlnZW45X2d0X3dvcmthcm91bmRzX2FwcGx5KGRldl9wcml2KTsKKwlzdHJ1Y3Qg aTkxNV93YV9saXN0ICp3YWwgPSAmaTkxNS0+Z3Rfd2FfbGlzdDsKKworCWdlbjlfZ3Rfd29ya2Fy b3VuZHNfaW5pdChpOTE1KTsKIAogCS8qIFdhRW5hYmxlR2Fwc1RzdkNyZWRpdEZpeDpza2wgKi8K LQlJOTE1X1dSSVRFKEdFTjhfR0FSQkNOVEwsCi0JCSAgIEk5MTVfUkVBRChHRU44X0dBUkJDTlRM KSB8IEdFTjlfR0FQU19UU1ZfQ1JFRElUX0RJU0FCTEUpOworCXdhX3dyaXRlX29yKHdhbCwKKwkJ ICAgIEdFTjhfR0FSQkNOVEwsCisJCSAgICBHRU45X0dBUFNfVFNWX0NSRURJVF9ESVNBQkxFKTsK IAogCS8qIFdhRGlzYWJsZUdhZnNVbml0Q2xrR2F0aW5nOnNrbCAqLwotCUk5MTVfV1JJVEUoR0VO N19VQ0dDVEw0LAotCQkgICBJOTE1X1JFQUQoR0VON19VQ0dDVEw0KSB8IEdFTjhfRVVfR0FVTklU X0NMT0NLX0dBVEVfRElTQUJMRSk7CisJd2Ffd3JpdGVfb3Iod2FsLAorCQkgICAgR0VON19VQ0dD VEw0LAorCQkgICAgR0VOOF9FVV9HQVVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFKTsKIAogCS8qIFdh SW5QbGFjZURlY29tcHJlc3Npb25IYW5nOnNrbCAqLwotCWlmIChJU19TS0xfUkVWSUQoZGV2X3By aXYsIFNLTF9SRVZJRF9IMCwgUkVWSURfRk9SRVZFUikpCi0JCUk5MTVfV1JJVEUoR0VOOV9HQU1U X0VDT19SRUdfUldfSUEsCi0JCQkgICBJOTE1X1JFQUQoR0VOOV9HQU1UX0VDT19SRUdfUldfSUEp IHwKLQkJCSAgIEdBTVRfRUNPX0VOQUJMRV9JTl9QTEFDRV9ERUNPTVBSRVNTKTsKKwlpZiAoSVNf U0tMX1JFVklEKGk5MTUsIFNLTF9SRVZJRF9IMCwgUkVWSURfRk9SRVZFUikpCisJCXdhX3dyaXRl X29yKHdhbCwKKwkJCSAgICBHRU45X0dBTVRfRUNPX1JFR19SV19JQSwKKwkJCSAgICBHQU1UX0VD T19FTkFCTEVfSU5fUExBQ0VfREVDT01QUkVTUyk7CiB9CiAKLXN0YXRpYyB2b2lkIGJ4dF9ndF93 b3JrYXJvdW5kc19hcHBseShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCitzdGF0 aWMgdm9pZCBieHRfZ3Rfd29ya2Fyb3VuZHNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNSkKIHsKLQlnZW45X2d0X3dvcmthcm91bmRzX2FwcGx5KGRldl9wcml2KTsKKwlzdHJ1Y3Qg aTkxNV93YV9saXN0ICp3YWwgPSAmaTkxNS0+Z3Rfd2FfbGlzdDsKKworCWdlbjlfZ3Rfd29ya2Fy b3VuZHNfaW5pdChpOTE1KTsKIAogCS8qIFdhRGlzYWJsZVBvb2xlZEV1TG9hZEJhbGFuY2luZ0Zp eDpieHQgKi8KLQlJOTE1X1dSSVRFKEZGX1NMSUNFX0NTX0NISUNLRU4yLAotCQkgICBfTUFTS0VE X0JJVF9FTkFCTEUoR0VOOV9QT09MRURfRVVfTE9BRF9CQUxBTkNJTkdfRklYX0RJU0FCTEUpKTsK Kwl3YV9tYXNrZWRfZW4od2FsLAorCQkgICAgIEZGX1NMSUNFX0NTX0NISUNLRU4yLAorCQkgICAg IEdFTjlfUE9PTEVEX0VVX0xPQURfQkFMQU5DSU5HX0ZJWF9ESVNBQkxFKTsKIAogCS8qIFdhSW5Q bGFjZURlY29tcHJlc3Npb25IYW5nOmJ4dCAqLwotCUk5MTVfV1JJVEUoR0VOOV9HQU1UX0VDT19S RUdfUldfSUEsCi0JCSAgIEk5MTVfUkVBRChHRU45X0dBTVRfRUNPX1JFR19SV19JQSkgfAotCQkg ICBHQU1UX0VDT19FTkFCTEVfSU5fUExBQ0VfREVDT01QUkVTUyk7CisJd2Ffd3JpdGVfb3Iod2Fs LAorCQkgICAgR0VOOV9HQU1UX0VDT19SRUdfUldfSUEsCisJCSAgICBHQU1UX0VDT19FTkFCTEVf SU5fUExBQ0VfREVDT01QUkVTUyk7CiB9CiAKLXN0YXRpYyB2b2lkIGtibF9ndF93b3JrYXJvdW5k c19hcHBseShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCitzdGF0aWMgdm9pZCBr YmxfZ3Rfd29ya2Fyb3VuZHNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKIHsK LQlnZW45X2d0X3dvcmthcm91bmRzX2FwcGx5KGRldl9wcml2KTsKKwlzdHJ1Y3QgaTkxNV93YV9s aXN0ICp3YWwgPSAmaTkxNS0+Z3Rfd2FfbGlzdDsKKworCWdlbjlfZ3Rfd29ya2Fyb3VuZHNfaW5p dChpOTE1KTsKIAogCS8qIFdhRW5hYmxlR2Fwc1RzdkNyZWRpdEZpeDprYmwgKi8KLQlJOTE1X1dS SVRFKEdFTjhfR0FSQkNOVEwsCi0JCSAgIEk5MTVfUkVBRChHRU44X0dBUkJDTlRMKSB8IEdFTjlf R0FQU19UU1ZfQ1JFRElUX0RJU0FCTEUpOworCXdhX3dyaXRlX29yKHdhbCwKKwkJICAgIEdFTjhf R0FSQkNOVEwsCisJCSAgICBHRU45X0dBUFNfVFNWX0NSRURJVF9ESVNBQkxFKTsKIAogCS8qIFdh RGlzYWJsZUR5bmFtaWNDcmVkaXRTaGFyaW5nOmtibCAqLwotCWlmIChJU19LQkxfUkVWSUQoZGV2 X3ByaXYsIDAsIEtCTF9SRVZJRF9CMCkpCi0JCUk5MTVfV1JJVEUoR0FNVF9DSEtOX0JJVF9SRUcs Ci0JCQkgICBJOTE1X1JFQUQoR0FNVF9DSEtOX0JJVF9SRUcpIHwKLQkJCSAgIEdBTVRfQ0hLTl9E SVNBQkxFX0RZTkFNSUNfQ1JFRElUX1NIQVJJTkcpOworCWlmIChJU19LQkxfUkVWSUQoaTkxNSwg MCwgS0JMX1JFVklEX0IwKSkKKwkJd2Ffd3JpdGVfb3Iod2FsLAorCQkJICAgIEdBTVRfQ0hLTl9C SVRfUkVHLAorCQkJICAgIEdBTVRfQ0hLTl9ESVNBQkxFX0RZTkFNSUNfQ1JFRElUX1NIQVJJTkcp OwogCiAJLyogV2FEaXNhYmxlR2Fmc1VuaXRDbGtHYXRpbmc6a2JsICovCi0JSTkxNV9XUklURShH RU43X1VDR0NUTDQsCi0JCSAgIEk5MTVfUkVBRChHRU43X1VDR0NUTDQpIHwgR0VOOF9FVV9HQVVO SVRfQ0xPQ0tfR0FURV9ESVNBQkxFKTsKKwl3YV93cml0ZV9vcih3YWwsCisJCSAgICBHRU43X1VD R0NUTDQsCisJCSAgICBHRU44X0VVX0dBVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUpOwogCiAJLyog V2FJblBsYWNlRGVjb21wcmVzc2lvbkhhbmc6a2JsICovCi0JSTkxNV9XUklURShHRU45X0dBTVRf RUNPX1JFR19SV19JQSwKLQkJICAgSTkxNV9SRUFEKEdFTjlfR0FNVF9FQ09fUkVHX1JXX0lBKSB8 Ci0JCSAgIEdBTVRfRUNPX0VOQUJMRV9JTl9QTEFDRV9ERUNPTVBSRVNTKTsKKwl3YV93cml0ZV9v cih3YWwsCisJCSAgICBHRU45X0dBTVRfRUNPX1JFR19SV19JQSwKKwkJICAgIEdBTVRfRUNPX0VO QUJMRV9JTl9QTEFDRV9ERUNPTVBSRVNTKTsKIAogCS8qIFdhS0JMVkVDU1NlbWFwaG9yZVdhaXRQ b2xsOmtibCAqLwotCWlmIChJU19LQkxfUkVWSUQoZGV2X3ByaXYsIEtCTF9SRVZJRF9BMCwgS0JM X1JFVklEX0UwKSkgeworCWlmIChJU19LQkxfUkVWSUQoaTkxNSwgS0JMX1JFVklEX0EwLCBLQkxf UkVWSURfRTApKSB7CiAJCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKIAkJdW5zaWdu ZWQgaW50IHRtcDsKIAotCQlmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBkZXZfcHJpdiwgdG1wKSB7 CisJCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGk5MTUsIHRtcCkgewogCQkJaWYgKGVuZ2luZS0+ aWQgPT0gUkNTKQogCQkJCWNvbnRpbnVlOwogCi0JCQlJOTE1X1dSSVRFKFJJTkdfU0VNQV9XQUlU X1BPTEwoZW5naW5lLT5tbWlvX2Jhc2UpLCAxKTsKKwkJCXdhX3dyaXRlKHdhbCwKKwkJCQkgUklO R19TRU1BX1dBSVRfUE9MTChlbmdpbmUtPm1taW9fYmFzZSksCisJCQkJIDEpOwogCQl9CiAJfQog fQogCi1zdGF0aWMgdm9pZCBnbGtfZ3Rfd29ya2Fyb3VuZHNfYXBwbHkoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQorc3RhdGljIHZvaWQgZ2xrX2d0X3dvcmthcm91bmRzX2luaXQo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCiB7Ci0JZ2VuOV9ndF93b3JrYXJvdW5kc19h cHBseShkZXZfcHJpdik7CisJZ2VuOV9ndF93b3JrYXJvdW5kc19pbml0KGk5MTUpOwogfQogCi1z dGF0aWMgdm9pZCBjZmxfZ3Rfd29ya2Fyb3VuZHNfYXBwbHkoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KQorc3RhdGljIHZvaWQgY2ZsX2d0X3dvcmthcm91bmRzX2luaXQoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCiB7Ci0JZ2VuOV9ndF93b3JrYXJvdW5kc19hcHBseShk ZXZfcHJpdik7CisJc3RydWN0IGk5MTVfd2FfbGlzdCAqd2FsID0gJmk5MTUtPmd0X3dhX2xpc3Q7 CisKKwlnZW45X2d0X3dvcmthcm91bmRzX2luaXQoaTkxNSk7CiAKIAkvKiBXYUVuYWJsZUdhcHNU c3ZDcmVkaXRGaXg6Y2ZsICovCi0JSTkxNV9XUklURShHRU44X0dBUkJDTlRMLAotCQkgICBJOTE1 X1JFQUQoR0VOOF9HQVJCQ05UTCkgfCBHRU45X0dBUFNfVFNWX0NSRURJVF9ESVNBQkxFKTsKKwl3 YV93cml0ZV9vcih3YWwsCisJCSAgICBHRU44X0dBUkJDTlRMLAorCQkgICAgR0VOOV9HQVBTX1RT Vl9DUkVESVRfRElTQUJMRSk7CiAKIAkvKiBXYURpc2FibGVHYWZzVW5pdENsa0dhdGluZzpjZmwg Ki8KLQlJOTE1X1dSSVRFKEdFTjdfVUNHQ1RMNCwKLQkJICAgSTkxNV9SRUFEKEdFTjdfVUNHQ1RM NCkgfCBHRU44X0VVX0dBVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUpOworCXdhX3dyaXRlX29yKHdh bCwKKwkJICAgIEdFTjdfVUNHQ1RMNCwKKwkJICAgIEdFTjhfRVVfR0FVTklUX0NMT0NLX0dBVEVf RElTQUJMRSk7CiAKIAkvKiBXYUluUGxhY2VEZWNvbXByZXNzaW9uSGFuZzpjZmwgKi8KLQlJOTE1 X1dSSVRFKEdFTjlfR0FNVF9FQ09fUkVHX1JXX0lBLAotCQkgICBJOTE1X1JFQUQoR0VOOV9HQU1U X0VDT19SRUdfUldfSUEpIHwKLQkJICAgR0FNVF9FQ09fRU5BQkxFX0lOX1BMQUNFX0RFQ09NUFJF U1MpOworCXdhX3dyaXRlX29yKHdhbCwKKwkJICAgIEdFTjlfR0FNVF9FQ09fUkVHX1JXX0lBLAor CQkgICAgR0FNVF9FQ09fRU5BQkxFX0lOX1BMQUNFX0RFQ09NUFJFU1MpOwogfQogCiBzdGF0aWMg dm9pZCB3YV9pbml0X21jcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7CiAJ Y29uc3Qgc3RydWN0IHNzZXVfZGV2X2luZm8gKnNzZXUgPSAmKElOVEVMX0lORk8oZGV2X3ByaXYp LT5zc2V1KTsKLQl1MzIgbWNyOworCXN0cnVjdCBpOTE1X3dhX2xpc3QgKndhbCA9ICZkZXZfcHJp di0+Z3Rfd2FfbGlzdDsKIAl1MzIgbWNyX3NsaWNlX3N1YnNsaWNlX21hc2s7CiAKIAkvKgpAQCAt NzY1LDggKzg1OCw2IEBAIHN0YXRpYyB2b2lkIHdhX2luaXRfbWNyKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikKIAkJV0FSTl9PTigoZW5hYmxlZF9tYXNrICYgZGlzYWJsZWRfbWFz aykgIT0gZW5hYmxlZF9tYXNrKTsKIAl9CiAKLQltY3IgPSBJOTE1X1JFQUQoR0VOOF9NQ1JfU0VM RUNUT1IpOwotCiAJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTEpCiAJCW1jcl9zbGljZV9z dWJzbGljZV9tYXNrID0gR0VOMTFfTUNSX1NMSUNFX01BU0sgfAogCQkJCQkgIEdFTjExX01DUl9T VUJTTElDRV9NQVNLOwpAQCAtNzg0LDE1NiArODc1LDIyNSBAQCBzdGF0aWMgdm9pZCB3YV9pbml0 X21jcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJICogb2NjYXNpb25zLCBz dWNoIGFzIElOU1RET05FLCB3aGVyZSB0aGlzIHZhbHVlIGlzIGRlcGVuZGVudAogCSAqIG9uIHMv c3MgY29tYm8sIHRoZSByZWFkIHNob3VsZCBiZSBkb25lIHdpdGggcmVhZF9zdWJzbGljZV9yZWcu CiAJICovCi0JbWNyICY9IH5tY3Jfc2xpY2Vfc3Vic2xpY2VfbWFzazsKLQltY3IgfD0gaW50ZWxf Y2FsY3VsYXRlX21jcl9zX3NzX3NlbGVjdChkZXZfcHJpdik7Ci0JSTkxNV9XUklURShHRU44X01D Ul9TRUxFQ1RPUiwgbWNyKTsKKwl3YV93cml0ZV9tYXNrZWRfb3Iod2FsLAorCQkJICAgR0VOOF9N Q1JfU0VMRUNUT1IsCisJCQkgICBtY3Jfc2xpY2Vfc3Vic2xpY2VfbWFzaywKKwkJCSAgIGludGVs X2NhbGN1bGF0ZV9tY3Jfc19zc19zZWxlY3QoZGV2X3ByaXYpKTsKIH0KIAotc3RhdGljIHZvaWQg Y25sX2d0X3dvcmthcm91bmRzX2FwcGx5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikKK3N0YXRpYyB2b2lkIGNubF9ndF93b3JrYXJvdW5kc19pbml0KHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1KQogewotCXdhX2luaXRfbWNyKGRldl9wcml2KTsKKwlzdHJ1Y3QgaTkxNV93 YV9saXN0ICp3YWwgPSAmaTkxNS0+Z3Rfd2FfbGlzdDsKKworCXdhX2luaXRfbWNyKGk5MTUpOwog CiAJLyogV2FEaXNhYmxlSTJtQ3ljbGVPbldSUG9ydDpjbmwgKHByZS1wcm9kKSAqLwotCWlmIChJ U19DTkxfUkVWSUQoZGV2X3ByaXYsIENOTF9SRVZJRF9CMCwgQ05MX1JFVklEX0IwKSkKLQkJSTkx NV9XUklURShHQU1UX0NIS05fQklUX1JFRywKLQkJCSAgIEk5MTVfUkVBRChHQU1UX0NIS05fQklU X1JFRykgfAotCQkJICAgR0FNVF9DSEtOX0RJU0FCTEVfSTJNX0NZQ0xFX09OX1dSX1BPUlQpOwor CWlmIChJU19DTkxfUkVWSUQoaTkxNSwgQ05MX1JFVklEX0IwLCBDTkxfUkVWSURfQjApKQorCQl3 YV93cml0ZV9vcih3YWwsCisJCQkgICAgR0FNVF9DSEtOX0JJVF9SRUcsCisJCQkgICAgR0FNVF9D SEtOX0RJU0FCTEVfSTJNX0NZQ0xFX09OX1dSX1BPUlQpOwogCiAJLyogV2FJblBsYWNlRGVjb21w cmVzc2lvbkhhbmc6Y25sICovCi0JSTkxNV9XUklURShHRU45X0dBTVRfRUNPX1JFR19SV19JQSwK LQkJICAgSTkxNV9SRUFEKEdFTjlfR0FNVF9FQ09fUkVHX1JXX0lBKSB8Ci0JCSAgIEdBTVRfRUNP X0VOQUJMRV9JTl9QTEFDRV9ERUNPTVBSRVNTKTsKKwl3YV93cml0ZV9vcih3YWwsCisJCSAgICBH RU45X0dBTVRfRUNPX1JFR19SV19JQSwKKwkJICAgIEdBTVRfRUNPX0VOQUJMRV9JTl9QTEFDRV9E RUNPTVBSRVNTKTsKIAogCS8qIFdhRW5hYmxlUHJlZW1wdGlvbkdyYW51bGFyaXR5Q29udHJvbEJ5 VU1EOmNubCAqLwotCUk5MTVfV1JJVEUoR0VON19GRl9TTElDRV9DU19DSElDS0VOMSwKLQkJICAg X01BU0tFRF9CSVRfRU5BQkxFKEdFTjlfRkZTQ19QRVJDVFhfUFJFRU1QVF9DVFJMKSk7CisJd2Ff bWFza2VkX2VuKHdhbCwKKwkJICAgICBHRU43X0ZGX1NMSUNFX0NTX0NISUNLRU4xLAorCQkgICAg IEdFTjlfRkZTQ19QRVJDVFhfUFJFRU1QVF9DVFJMKTsKIH0KIAotc3RhdGljIHZvaWQgaWNsX2d0 X3dvcmthcm91bmRzX2FwcGx5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3N0 YXRpYyB2b2lkIGljbF9ndF93b3JrYXJvdW5kc19pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1KQogewotCXdhX2luaXRfbWNyKGRldl9wcml2KTsKKwlzdHJ1Y3QgaTkxNV93YV9saXN0 ICp3YWwgPSAmaTkxNS0+Z3Rfd2FfbGlzdDsKKworCXdhX2luaXRfbWNyKGk5MTUpOwogCiAJLyog VGhpcyBpcyBub3QgYW4gV2EuIEVuYWJsZSBmb3IgYmV0dGVyIGltYWdlIHF1YWxpdHkgKi8KLQlJ OTE1X1dSSVRFKF8zRF9DSElDS0VOMywKLQkJICAgX01BU0tFRF9CSVRfRU5BQkxFKF8zRF9DSElD S0VOM19BQV9MSU5FX1FVQUxJVFlfRklYX0VOQUJMRSkpOworCXdhX21hc2tlZF9lbih3YWwsCisJ CSAgICAgXzNEX0NISUNLRU4zLAorCQkgICAgIF8zRF9DSElDS0VOM19BQV9MSU5FX1FVQUxJVFlf RklYX0VOQUJMRSk7CiAKIAkvKiBXYUluUGxhY2VEZWNvbXByZXNzaW9uSGFuZzppY2wgKi8KLQlJ OTE1X1dSSVRFKEdFTjlfR0FNVF9FQ09fUkVHX1JXX0lBLAotCQkgICBJOTE1X1JFQUQoR0VOOV9H QU1UX0VDT19SRUdfUldfSUEpIHwKLQkJICAgR0FNVF9FQ09fRU5BQkxFX0lOX1BMQUNFX0RFQ09N UFJFU1MpOworCXdhX3dyaXRlX29yKHdhbCwKKwkJICAgIEdFTjlfR0FNVF9FQ09fUkVHX1JXX0lB LAorCQkgICAgR0FNVF9FQ09fRU5BQkxFX0lOX1BMQUNFX0RFQ09NUFJFU1MpOwogCiAJLyogV2FQ aXBlbGluZUZsdXNoQ29oZXJlbnRMaW5lczppY2wgKi8KLQlJOTE1X1dSSVRFKEdFTjhfTDNTUUNS RUc0LAotCQkgICBJOTE1X1JFQUQoR0VOOF9MM1NRQ1JFRzQpIHwKLQkJICAgR0VOOF9MUVNDX0ZM VVNIX0NPSEVSRU5UX0xJTkVTKTsKKwl3YV93cml0ZV9vcih3YWwsCisJCSAgICBHRU44X0wzU1FD UkVHNCwKKwkJICAgIEdFTjhfTFFTQ19GTFVTSF9DT0hFUkVOVF9MSU5FUyk7CiAKIAkvKiBXYV8x NDA1NTQzNjIyOmljbAogCSAqIEZvcm1lcmx5IGtub3duIGFzIFdhR0FQWlByaW9yaXR5U2NoZW1l CiAJICovCi0JSTkxNV9XUklURShHRU44X0dBUkJDTlRMLAotCQkgICBJOTE1X1JFQUQoR0VOOF9H QVJCQ05UTCkgfAotCQkgICBHRU4xMV9BUkJJVFJBVElPTl9QUklPX09SREVSX01BU0spOworCXdh X3dyaXRlX29yKHdhbCwKKwkJICAgIEdFTjhfR0FSQkNOVEwsCisJCSAgICBHRU4xMV9BUkJJVFJB VElPTl9QUklPX09SREVSX01BU0spOwogCiAJLyogV2FfMTYwNDIyMzY2NDppY2wKIAkgKiBGb3Jt ZXJseSBrbm93biBhcyBXYUwzQmFua0FkZHJlc3NIYXNoaW5nCiAJICovCi0JSTkxNV9XUklURShH RU44X0dBUkJDTlRMLAotCQkgICAoSTkxNV9SRUFEKEdFTjhfR0FSQkNOVEwpICYgfkdFTjExX0hB U0hfQ1RSTF9FWENMX01BU0spIHwKLQkJICAgR0VOMTFfSEFTSF9DVFJMX0VYQ0xfQklUMCk7Ci0J STkxNV9XUklURShHRU4xMV9HTEJMSU5WTCwKLQkJICAgKEk5MTVfUkVBRChHRU4xMV9HTEJMSU5W TCkgJiB+R0VOMTFfQkFOS19IQVNIX0FERFJfRVhDTF9NQVNLKSB8Ci0JCSAgIEdFTjExX0JBTktf SEFTSF9BRERSX0VYQ0xfQklUMCk7CisJd2Ffd3JpdGVfbWFza2VkX29yKHdhbCwKKwkJCSAgIEdF TjhfR0FSQkNOVEwsCisJCQkgICBHRU4xMV9IQVNIX0NUUkxfRVhDTF9NQVNLLAorCQkJICAgR0VO MTFfSEFTSF9DVFJMX0VYQ0xfQklUMCk7CisJd2Ffd3JpdGVfbWFza2VkX29yKHdhbCwKKwkJCSAg IEdFTjExX0dMQkxJTlZMLAorCQkJICAgR0VOMTFfQkFOS19IQVNIX0FERFJfRVhDTF9NQVNLLAor CQkJICAgR0VOMTFfQkFOS19IQVNIX0FERFJfRVhDTF9CSVQwKTsKIAogCS8qIFdhTW9kaWZ5R2Ft VGxiUGFydGl0aW9uaW5nOmljbCAqLwotCUk5MTVfV1JJVEUoR0VOMTFfR0FDQl9QRVJGX0NUUkws Ci0JCSAgIChJOTE1X1JFQUQoR0VOMTFfR0FDQl9QRVJGX0NUUkwpICYgfkdFTjExX0hBU0hfQ1RS TF9NQVNLKSB8Ci0JCSAgIEdFTjExX0hBU0hfQ1RSTF9CSVQwIHwgR0VOMTFfSEFTSF9DVFJMX0JJ VDQpOworCXdhX3dyaXRlX21hc2tlZF9vcih3YWwsCisJCQkgICBHRU4xMV9HQUNCX1BFUkZfQ1RS TCwKKwkJCSAgIEdFTjExX0hBU0hfQ1RSTF9NQVNLLAorCQkJICAgR0VOMTFfSEFTSF9DVFJMX0JJ VDAgfCBHRU4xMV9IQVNIX0NUUkxfQklUNCk7CiAKIAkvKiBXYV8xNDA1NzMzMjE2OmljbAogCSAq IEZvcm1lcmx5IGtub3duIGFzIFdhRGlzYWJsZUNsZWFuRXZpY3RzCiAJICovCi0JSTkxNV9XUklU RShHRU44X0wzU1FDUkVHNCwKLQkJICAgSTkxNV9SRUFEKEdFTjhfTDNTUUNSRUc0KSB8Ci0JCSAg IEdFTjExX0xRU0NfQ0xFQU5fRVZJQ1RfRElTQUJMRSk7CisJd2Ffd3JpdGVfb3Iod2FsLAorCQkg ICAgR0VOOF9MM1NRQ1JFRzQsCisJCSAgICBHRU4xMV9MUVNDX0NMRUFOX0VWSUNUX0RJU0FCTEUp OwogCiAJLyogV2FfMTQwNTc2NjEwNzppY2wKIAkgKiBGb3JtZXJseSBrbm93biBhcyBXYUNMMlNG SGFsZk1heEFsbG9jCiAJICovCi0JSTkxNV9XUklURShHRU4xMV9MU05fVU5TTENWQywKLQkJICAg STkxNV9SRUFEKEdFTjExX0xTTl9VTlNMQ1ZDKSB8Ci0JCSAgIEdFTjExX0xTTl9VTlNMQ1ZDX0dB RlNfSEFMRl9TRl9NQVhBTExPQyB8Ci0JCSAgIEdFTjExX0xTTl9VTlNMQ1ZDX0dBRlNfSEFMRl9D TDJfTUFYQUxMT0MpOworCXdhX3dyaXRlX29yKHdhbCwKKwkJICAgIEdFTjExX0xTTl9VTlNMQ1ZD LAorCQkgICAgR0VOMTFfTFNOX1VOU0xDVkNfR0FGU19IQUxGX1NGX01BWEFMTE9DIHwKKwkJICAg IEdFTjExX0xTTl9VTlNMQ1ZDX0dBRlNfSEFMRl9DTDJfTUFYQUxMT0MpOwogCiAJLyogV2FfMjIw MTY2MTU0OmljbAogCSAqIEZvcm1lcmx5IGtub3duIGFzIFdhRGlzQ3R4UmVsb2FkCiAJICovCi0J STkxNV9XUklURShHRU44X0dBTVdfRUNPX0RFVl9SV19JQSwKLQkJICAgSTkxNV9SRUFEKEdFTjhf R0FNV19FQ09fREVWX1JXX0lBKSB8Ci0JCSAgIEdBTVdfRUNPX0RFVl9DVFhfUkVMT0FEX0RJU0FC TEUpOworCXdhX3dyaXRlX29yKHdhbCwKKwkJICAgIEdFTjhfR0FNV19FQ09fREVWX1JXX0lBLAor CQkgICAgR0FNV19FQ09fREVWX0NUWF9SRUxPQURfRElTQUJMRSk7CiAKIAkvKiBXYV8xNDA1Nzc5 MDA0OmljbCAocHJlLXByb2QpICovCi0JaWYgKElTX0lDTF9SRVZJRChkZXZfcHJpdiwgSUNMX1JF VklEX0EwLCBJQ0xfUkVWSURfQTApKQotCQlJOTE1X1dSSVRFKFNMSUNFX1VOSVRfTEVWRUxfQ0xL R0FURSwKLQkJCSAgIEk5MTVfUkVBRChTTElDRV9VTklUX0xFVkVMX0NMS0dBVEUpIHwKLQkJCSAg IE1TQ1VOSVRfQ0xLR0FURV9ESVMpOworCWlmIChJU19JQ0xfUkVWSUQoaTkxNSwgSUNMX1JFVklE X0EwLCBJQ0xfUkVWSURfQTApKQorCQl3YV93cml0ZV9vcih3YWwsCisJCQkgICAgU0xJQ0VfVU5J VF9MRVZFTF9DTEtHQVRFLAorCQkJICAgIE1TQ1VOSVRfQ0xLR0FURV9ESVMpOwogCiAJLyogV2Ff MTQwNjY4MDE1OTppY2wgKi8KLQlJOTE1X1dSSVRFKFNVQlNMSUNFX1VOSVRfTEVWRUxfQ0xLR0FU RSwKLQkJICAgSTkxNV9SRUFEKFNVQlNMSUNFX1VOSVRfTEVWRUxfQ0xLR0FURSkgfAotCQkgICBH V1VOSVRfQ0xLR0FURV9ESVMpOworCXdhX3dyaXRlX29yKHdhbCwKKwkJICAgIFNVQlNMSUNFX1VO SVRfTEVWRUxfQ0xLR0FURSwKKwkJICAgIEdXVU5JVF9DTEtHQVRFX0RJUyk7CiAKIAkvKiBXYV8x NDA2ODM4NjU5OmljbCAocHJlLXByb2QpICovCi0JaWYgKElTX0lDTF9SRVZJRChkZXZfcHJpdiwg SUNMX1JFVklEX0EwLCBJQ0xfUkVWSURfQjApKQotCQlJOTE1X1dSSVRFKElORl9VTklUX0xFVkVM X0NMS0dBVEUsCi0JCQkgICBJOTE1X1JFQUQoSU5GX1VOSVRfTEVWRUxfQ0xLR0FURSkgfAotCQkJ ICAgQ0dQU0ZfQ0xLR0FURV9ESVMpOworCWlmIChJU19JQ0xfUkVWSUQoaTkxNSwgSUNMX1JFVklE X0EwLCBJQ0xfUkVWSURfQjApKQorCQl3YV93cml0ZV9vcih3YWwsCisJCQkgICAgSU5GX1VOSVRf TEVWRUxfQ0xLR0FURSwKKwkJCSAgICBDR1BTRl9DTEtHQVRFX0RJUyk7CiAKIAkvKiBXYUZvcndh cmRQcm9ncmVzc1NvZnRSZXNldDppY2wgKi8KLQlJOTE1X1dSSVRFKEdFTjEwX1NDUkFUQ0hfTE5D RjIsCi0JCSAgIEk5MTVfUkVBRChHRU4xMF9TQ1JBVENIX0xOQ0YyKSB8Ci0JCSAgIFBNRkxVU0hE T05FX0xOSUNSU0RST1AgfAotCQkgICBQTUZMVVNIX0dBUEwzVU5CTE9DSyB8Ci0JCSAgIFBNRkxV U0hET05FX0xORUJMSyk7CisJd2Ffd3JpdGVfb3Iod2FsLAorCQkgICAgR0VOMTBfU0NSQVRDSF9M TkNGMiwKKwkJICAgIFBNRkxVU0hET05FX0xOSUNSU0RST1AgfAorCQkgICAgUE1GTFVTSF9HQVBM M1VOQkxPQ0sgfAorCQkgICAgUE1GTFVTSERPTkVfTE5FQkxLKTsKIAogCS8qIFdhXzE0MDY0NjMw OTk6aWNsCiAJICogRm9ybWVybHkga25vd24gYXMgV2FHYW1UbGJQZW5kRXJyb3IKIAkgKi8KLQlJ OTE1X1dSSVRFKEdBTVRfQ0hLTl9CSVRfUkVHLAotCQkgICBJOTE1X1JFQUQoR0FNVF9DSEtOX0JJ VF9SRUcpIHwKLQkJICAgR0FNVF9DSEtOX0RJU0FCTEVfTDNfQ09IX1BJUEUpOworCXdhX3dyaXRl X29yKHdhbCwKKwkJICAgIEdBTVRfQ0hLTl9CSVRfUkVHLAorCQkgICAgR0FNVF9DSEtOX0RJU0FC TEVfTDNfQ09IX1BJUEUpOwogCiAJLyogV2FfMTQwNjYwOTI1NTppY2wgKHByZS1wcm9kKSAqLwot CWlmIChJU19JQ0xfUkVWSUQoZGV2X3ByaXYsIElDTF9SRVZJRF9BMCwgSUNMX1JFVklEX0IwKSkK LQkJSTkxNV9XUklURShHRU43X1NBUkNIS01ELAotCQkJICAgSTkxNV9SRUFEKEdFTjdfU0FSQ0hL TUQpIHwKLQkJCSAgIEdFTjdfRElTQUJMRV9ERU1BTkRfUFJFRkVUQ0ggfAotCQkJICAgR0VON19E SVNBQkxFX1NBTVBMRVJfUFJFRkVUQ0gpOworCWlmIChJU19JQ0xfUkVWSUQoaTkxNSwgSUNMX1JF VklEX0EwLCBJQ0xfUkVWSURfQjApKQorCQl3YV93cml0ZV9vcih3YWwsCisJCQkgICAgR0VON19T QVJDSEtNRCwKKwkJCSAgICBHRU43X0RJU0FCTEVfREVNQU5EX1BSRUZFVENIIHwKKwkJCSAgICBH RU43X0RJU0FCTEVfU0FNUExFUl9QUkVGRVRDSCk7CiB9CiAKLXZvaWQgaW50ZWxfZ3Rfd29ya2Fy b3VuZHNfYXBwbHkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQordm9pZCBpbnRl bF9ndF9pbml0X3dvcmthcm91bmRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQogewot CWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgOCkKKwlzdHJ1Y3QgaTkxNV93YV9saXN0ICp3YWwg PSAmaTkxNS0+Z3Rfd2FfbGlzdDsKKworCXdhX2luaXRfc3RhcnQod2FsLCAiR1QiKTsKKworCWlm IChJTlRFTF9HRU4oaTkxNSkgPCA4KQogCQlyZXR1cm47Ci0JZWxzZSBpZiAoSVNfQlJPQURXRUxM KGRldl9wcml2KSkKLQkJYmR3X2d0X3dvcmthcm91bmRzX2FwcGx5KGRldl9wcml2KTsKLQllbHNl IGlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSkKLQkJY2h2X2d0X3dvcmthcm91bmRzX2FwcGx5 KGRldl9wcml2KTsKLQllbHNlIGlmIChJU19TS1lMQUtFKGRldl9wcml2KSkKLQkJc2tsX2d0X3dv cmthcm91bmRzX2FwcGx5KGRldl9wcml2KTsKLQllbHNlIGlmIChJU19CUk9YVE9OKGRldl9wcml2 KSkKLQkJYnh0X2d0X3dvcmthcm91bmRzX2FwcGx5KGRldl9wcml2KTsKLQllbHNlIGlmIChJU19L QUJZTEFLRShkZXZfcHJpdikpCi0JCWtibF9ndF93b3JrYXJvdW5kc19hcHBseShkZXZfcHJpdik7 Ci0JZWxzZSBpZiAoSVNfR0VNSU5JTEFLRShkZXZfcHJpdikpCi0JCWdsa19ndF93b3JrYXJvdW5k c19hcHBseShkZXZfcHJpdik7Ci0JZWxzZSBpZiAoSVNfQ09GRkVFTEFLRShkZXZfcHJpdikpCi0J CWNmbF9ndF93b3JrYXJvdW5kc19hcHBseShkZXZfcHJpdik7Ci0JZWxzZSBpZiAoSVNfQ0FOTk9O TEFLRShkZXZfcHJpdikpCi0JCWNubF9ndF93b3JrYXJvdW5kc19hcHBseShkZXZfcHJpdik7Ci0J ZWxzZSBpZiAoSVNfSUNFTEFLRShkZXZfcHJpdikpCi0JCWljbF9ndF93b3JrYXJvdW5kc19hcHBs eShkZXZfcHJpdik7CisJZWxzZSBpZiAoSVNfQlJPQURXRUxMKGk5MTUpKQorCQlyZXR1cm47CisJ ZWxzZSBpZiAoSVNfQ0hFUlJZVklFVyhpOTE1KSkKKwkJcmV0dXJuOworCWVsc2UgaWYgKElTX1NL WUxBS0UoaTkxNSkpCisJCXNrbF9ndF93b3JrYXJvdW5kc19pbml0KGk5MTUpOworCWVsc2UgaWYg KElTX0JST1hUT04oaTkxNSkpCisJCWJ4dF9ndF93b3JrYXJvdW5kc19pbml0KGk5MTUpOworCWVs c2UgaWYgKElTX0tBQllMQUtFKGk5MTUpKQorCQlrYmxfZ3Rfd29ya2Fyb3VuZHNfaW5pdChpOTE1 KTsKKwllbHNlIGlmIChJU19HRU1JTklMQUtFKGk5MTUpKQorCQlnbGtfZ3Rfd29ya2Fyb3VuZHNf aW5pdChpOTE1KTsKKwllbHNlIGlmIChJU19DT0ZGRUVMQUtFKGk5MTUpKQorCQljZmxfZ3Rfd29y a2Fyb3VuZHNfaW5pdChpOTE1KTsKKwllbHNlIGlmIChJU19DQU5OT05MQUtFKGk5MTUpKQorCQlj bmxfZ3Rfd29ya2Fyb3VuZHNfaW5pdChpOTE1KTsKKwllbHNlIGlmIChJU19JQ0VMQUtFKGk5MTUp KQorCQlpY2xfZ3Rfd29ya2Fyb3VuZHNfaW5pdChpOTE1KTsKIAllbHNlCi0JCU1JU1NJTkdfQ0FT RShJTlRFTF9HRU4oZGV2X3ByaXYpKTsKKwkJTUlTU0lOR19DQVNFKElOVEVMX0dFTihpOTE1KSk7 CisKKwl3YV9pbml0X2ZpbmlzaCh3YWwpOworfQorCitzdGF0aWMgZW51bSBmb3JjZXdha2VfZG9t YWlucword2FsX2dldF9md19mb3Jfcm13KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwKKwkJICAgY29uc3Qgc3RydWN0IGk5MTVfd2FfbGlzdCAqd2FsKQoreworCWVudW0gZm9yY2V3 YWtlX2RvbWFpbnMgZncgPSAwOworCXN0cnVjdCBpOTE1X3dhICp3YTsKKwl1bnNpZ25lZCBpbnQg aTsKKworCWZvciAoaSA9IDAsIHdhID0gd2FsLT5saXN0OyBpIDwgd2FsLT5jb3VudDsgaSsrLCB3 YSsrKQorCQlmdyB8PSBpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2Zvcl9yZWcoZGV2X3ByaXYsCisJ CQkJCQkgICAgIHdhLT5yZWcsCisJCQkJCQkgICAgIEZXX1JFR19SRUFEIHwKKwkJCQkJCSAgICAg RldfUkVHX1dSSVRFKTsKKworCXJldHVybiBmdzsKK30KKworc3RhdGljIHZvaWQKK3dhX2xpc3Rf YXBwbHkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBjb25zdCBzdHJ1Y3QgaTkx NV93YV9saXN0ICp3YWwpCit7CisJZW51bSBmb3JjZXdha2VfZG9tYWlucyBmdzsKKwl1bnNpZ25l ZCBsb25nIGZsYWdzOworCXN0cnVjdCBpOTE1X3dhICp3YTsKKwl1bnNpZ25lZCBpbnQgaTsKKwor CWlmICghd2FsLT5jb3VudCkKKwkJcmV0dXJuOworCisJZncgPSB3YWxfZ2V0X2Z3X2Zvcl9ybXco ZGV2X3ByaXYsIHdhbCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnVuY29yZS5s b2NrLCBmbGFncyk7CisJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9nZXRfX2xvY2tlZChkZXZfcHJp diwgZncpOworCisJZm9yIChpID0gMCwgd2EgPSB3YWwtPmxpc3Q7IGkgPCB3YWwtPmNvdW50OyBp KyssIHdhKyspIHsKKwkJdTMyIHZhbCA9IEk5MTVfUkVBRF9GVyh3YS0+cmVnKTsKKworCQl2YWwg Jj0gfndhLT5tYXNrOworCQl2YWwgfD0gd2EtPnZhbDsKKworCQlJOTE1X1dSSVRFX0ZXKHdhLT5y ZWcsIHZhbCk7CisJfQorCisJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXRfX2xvY2tlZChkZXZf cHJpdiwgZncpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT51bmNvcmUubG9j aywgZmxhZ3MpOworCisJRFJNX0RFQlVHX0RSSVZFUigiQXBwbGllZCAldSAlcyB3b3JrYXJvdW5k c1xuIiwgd2FsLT5jb3VudCwgd2FsLT5uYW1lKTsKK30KKwordm9pZCBpbnRlbF9ndF9hcHBseV93 b3JrYXJvdW5kcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJd2FfbGlz dF9hcHBseShkZXZfcHJpdiwgJmRldl9wcml2LT5ndF93YV9saXN0KTsKIH0KIAogc3RydWN0IHdo aXRlbGlzdCB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF93b3JrYXJv dW5kcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfd29ya2Fyb3VuZHMuaAppbmRleCBi MTFkMDYyM2U2MjYuLjI2MzEwNjYwMGZkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfd29ya2Fyb3VuZHMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF93 b3JrYXJvdW5kcy5oCkBAIC03LDEwICs3LDMxIEBACiAjaWZuZGVmIF9JOTE1X1dPUktBUk9VTkRT X0hfCiAjZGVmaW5lIF9JOTE1X1dPUktBUk9VTkRTX0hfCiAKKyNpbmNsdWRlIDxsaW51eC9zbGFi Lmg+CisKK3N0cnVjdCBpOTE1X3dhIHsKKwlpOTE1X3JlZ190CSAgcmVnOworCXUzMgkJICBtYXNr OworCXUzMgkJICB2YWw7Cit9OworCitzdHJ1Y3QgaTkxNV93YV9saXN0IHsKKwljb25zdCBjaGFy CSpuYW1lOworCXN0cnVjdCBpOTE1X3dhCSpsaXN0OworCXVuc2lnbmVkIGludAljb3VudDsKK307 CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnRlbF93YV9saXN0X2ZyZWUoc3RydWN0IGk5MTVfd2Ff bGlzdCAqd2FsKQoreworCWtmcmVlKHdhbC0+bGlzdCk7CisJbWVtc2V0KHdhbCwgMCwgc2l6ZW9m KCp3YWwpKTsKK30KKwogaW50IGludGVsX2N0eF93b3JrYXJvdW5kc19pbml0KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdik7CiBpbnQgaW50ZWxfY3R4X3dvcmthcm91bmRzX2VtaXQo c3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpOwogCi12b2lkIGludGVsX2d0X3dvcmthcm91bmRzX2Fw cGx5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cit2b2lkIGludGVsX2d0X2lu aXRfd29ya2Fyb3VuZHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKK3ZvaWQg aW50ZWxfZ3RfYXBwbHlfd29ya2Fyb3VuZHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KTsKIAogdm9pZCBpbnRlbF93aGl0ZWxpc3Rfd29ya2Fyb3VuZHNfYXBwbHkoc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKIAotLSAKMi4xOS4xCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVs LWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK