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 12:50:08 +0000 Message-ID: <20181203125014.3219-2-tvrtko.ursulin@linux.intel.com> References: <20181203125014.3219-1-tvrtko.ursulin@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by gabe.freedesktop.org (Postfix) with ESMTPS id C3B3C89CAD for ; Mon, 3 Dec 2018 12:50:20 +0000 (UTC) In-Reply-To: <20181203125014.3219-1-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 ClNpZ25lZC1vZmYtYnk6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+ ClJldmlld2VkLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4gIyB2 MgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgICAgICAgICAgfCAgIDEgKwog ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAgICAgICB8ICAgMiArCiBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jICAgICAgICAgIHwgICA0ICstCiBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF93b3JrYXJvdW5kcy5jIHwgNDkzICsrKysrKysrKysrKysrKy0tLS0tLS0t CiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF93b3JrYXJvdW5kcy5oIHwgIDIzICstCiA1IGZp bGVzIGNoYW5nZWQsIDM1NSBpbnNlcnRpb25zKCspLCAxNjggZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmMKaW5kZXggZTM5MDE2NzEzNDY0Li5lZTUxMTZiNjJjZDIgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuYwpAQCAtMTQ1Myw2ICsxNDUzLDcgQEAgc3RhdGljIGludCBpOTE1X2Ry aXZlcl9pbml0X2h3KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAogCWludGVs X3VuY29yZV9zYW5pdGl6ZShkZXZfcHJpdik7CiAKKwlpbnRlbF9ndF9pbml0X3dvcmthcm91bmRz KGRldl9wcml2KTsKIAlpOTE1X2dlbV9sb2FkX2luaXRfZmVuY2VzKGRldl9wcml2KTsKIAogCS8q IE9uIHRoZSA5NDVHL0dNLCB0aGUgY2hpcHNldCByZXBvcnRzIHRoZSBNU0kgY2FwYWJpbGl0eSBv biB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IDQzYWM2ODczYTJiYi4uOWRkYmNjMWYz NTU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTY5LDYgKzY5LDcgQEAKICNpbmNsdWRl ICJpbnRlbF9yaW5nYnVmZmVyLmgiCiAjaW5jbHVkZSAiaW50ZWxfdW5jb3JlLmgiCiAjaW5jbHVk ZSAiaW50ZWxfd29wY20uaCIKKyNpbmNsdWRlICJpbnRlbF93b3JrYXJvdW5kcy5oIgogI2luY2x1 ZGUgImludGVsX3VjLmgiCiAKICNpbmNsdWRlICJpOTE1X2dlbS5oIgpAQCAtMTY1Miw2ICsxNjUz LDcgQEAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgewogCWludCBkcGlvX3BoeV9pb3NmX3BvcnRb STkxNV9OVU1fUEhZU19WTFZdOwogCiAJc3RydWN0IGk5MTVfd29ya2Fyb3VuZHMgd29ya2Fyb3Vu ZHM7CisJc3RydWN0IGk5MTVfd2FfbGlzdCBndF93YV9saXN0OwogCiAJc3RydWN0IGk5MTVfZnJv bnRidWZmZXJfdHJhY2tpbmcgZmJfdHJhY2tpbmc7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCmlu ZGV4IGM1NWIxZjc1Yzk4MC4uNjMzM2E3ZDZhZjVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMK QEAgLTUzMzQsNyArNTMzNCw3IEBAIGludCBpOTE1X2dlbV9pbml0X2h3KHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikKIAkJSTkxNV9XUklURShNSV9QUkVESUNBVEVfUkVTVUxUXzIs IElTX0hTV19HVDMoZGV2X3ByaXYpID8KIAkJCSAgIExPV0VSX1NMSUNFX0VOQUJMRUQgOiBMT1dF Ul9TTElDRV9ESVNBQkxFRCk7CiAKLQlpbnRlbF9ndF93b3JrYXJvdW5kc19hcHBseShkZXZfcHJp dik7CisJaW50ZWxfZ3RfYXBwbHlfd29ya2Fyb3VuZHMoZGV2X3ByaXYpOwogCiAJaTkxNV9nZW1f aW5pdF9zd2l6emxpbmcoZGV2X3ByaXYpOwogCkBAIC01NzA2LDYgKzU3MDYsOCBAQCB2b2lkIGk5 MTVfZ2VtX2Zpbmkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCWk5MTVfZ2Vt X2NvbnRleHRzX2ZpbmkoZGV2X3ByaXYpOwogCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmRybS5z dHJ1Y3RfbXV0ZXgpOwogCisJaW50ZWxfd2FfbGlzdF9mcmVlKCZkZXZfcHJpdi0+Z3Rfd2FfbGlz dCk7CisKIAlpbnRlbF9jbGVhbnVwX2d0X3Bvd2Vyc2F2ZShkZXZfcHJpdik7CiAKIAlpbnRlbF91 Y19maW5pX21pc2MoZGV2X3ByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfd29ya2Fyb3VuZHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3dvcmthcm91 bmRzLmMKaW5kZXggZTVjZDZjNmM2NmMzLi4xZThiZmI5YTIwMzQgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX3dvcmthcm91bmRzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfd29ya2Fyb3VuZHMuYwpAQCAtNDgsNiArNDgsMjAgQEAKICAqIC0gUHVibGlj IGZ1bmN0aW9ucyB0byBpbml0IG9yIGFwcGx5IHRoZSBnaXZlbiB3b3JrYXJvdW5kIHR5cGUuCiAg Ki8KIAorc3RhdGljIHZvaWQgd2FfaW5pdF9zdGFydChzdHJ1Y3QgaTkxNV93YV9saXN0ICp3YWws IGNvbnN0IGNoYXIgKm5hbWUpCit7CisJd2FsLT5uYW1lID0gbmFtZTsKK30KKworc3RhdGljIHZv aWQgd2FfaW5pdF9maW5pc2goc3RydWN0IGk5MTVfd2FfbGlzdCAqd2FsKQoreworCWlmICghd2Fs LT5jb3VudCkKKwkJcmV0dXJuOworCisJRFJNX0RFQlVHX0RSSVZFUigiSW5pdGlhbGl6ZWQgJXUg JXMgd29ya2Fyb3VuZHNcbiIsCisJCQkgd2FsLT5jb3VudCwgd2FsLT5uYW1lKTsKK30KKwogc3Rh dGljIHZvaWQgd2FfYWRkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAogCQkgICBpOTE1 X3JlZ190IHJlZywgY29uc3QgdTMyIG1hc2ssIGNvbnN0IHUzMiB2YWwpCiB7CkBAIC01NzUsMTYw ICs1ODksMjQwIEBAIGludCBpbnRlbF9jdHhfd29ya2Fyb3VuZHNfZW1pdChzdHJ1Y3QgaTkxNV9y ZXF1ZXN0ICpycSkKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgYmR3X2d0X3dvcmthcm91 bmRzX2FwcGx5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3N0YXRpYyB2b2lk Cit3YWxfYWRkKHN0cnVjdCBpOTE1X3dhX2xpc3QgKndhbCwgY29uc3Qgc3RydWN0IGk5MTVfd2Eg KndhKQoreworCWNvbnN0IHVuc2lnbmVkIGludCBncm93ID0gMSA8PCA0OworCisJR0VNX0JVR19P TighaXNfcG93ZXJfb2ZfMihncm93KSk7CisKKwlpZiAoSVNfQUxJR05FRCh3YWwtPmNvdW50LCBn cm93KSkgeyAvKiBFaXRoZXIgdW5pbml0aWFsaXplZCBvciBmdWxsLiAqLworCQlzdHJ1Y3QgaTkx NV93YSAqbGlzdDsKKworCQlsaXN0ID0ga21hbGxvYyhBTElHTih3YWwtPmNvdW50ICsgMSwgZ3Jv dykgKiBzaXplb2YoKndhKSwKKwkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwkJaWYgKCFsaXN0KSB7 CisJCQlEUk1fRVJST1IoIk5vIHNwYWNlIGZvciB3b3JrYXJvdW5kIGluaXQhXG4iKTsKKwkJCXJl dHVybjsKKwkJfQorCisJCWlmICh3YWwtPmxpc3QpCisJCQltZW1jcHkobGlzdCwgd2FsLT5saXN0 LCBzaXplb2YoKndhKSAqIHdhbC0+Y291bnQpOworCisJCXdhbC0+bGlzdCA9IGxpc3Q7CisJfQor CisKKwl3YWwtPmxpc3Rbd2FsLT5jb3VudCsrXSA9ICp3YTsKK30KKworc3RhdGljIHZvaWQKK3dh X21hc2tlZF9lbihzdHJ1Y3QgaTkxNV93YV9saXN0ICp3YWwsIGk5MTVfcmVnX3QgcmVnLCB1MzIg dmFsKQoreworCXN0cnVjdCBpOTE1X3dhIHdhID0geworCQkucmVnID0gcmVnLAorCQkubWFzayA9 IHZhbCwKKwkJLnZhbCA9IF9NQVNLRURfQklUX0VOQUJMRSh2YWwpCisJfTsKKworCXdhbF9hZGQo d2FsLCAmd2EpOworfQorCitzdGF0aWMgdm9pZAord2Ffd3JpdGVfbWFza2VkX29yKHN0cnVjdCBp OTE1X3dhX2xpc3QgKndhbCwgaTkxNV9yZWdfdCByZWcsIHUzMiBtYXNrLAorCQkgICB1MzIgdmFs KQoreworCXN0cnVjdCBpOTE1X3dhIHdhID0geworCQkucmVnID0gcmVnLAorCQkubWFzayA9IG1h c2ssCisJCS52YWwgPSB2YWwKKwl9OworCisJd2FsX2FkZCh3YWwsICZ3YSk7Cit9CisKK3N0YXRp YyB2b2lkCit3YV93cml0ZShzdHJ1Y3QgaTkxNV93YV9saXN0ICp3YWwsIGk5MTVfcmVnX3QgcmVn LCB1MzIgdmFsKQogeworCXdhX3dyaXRlX21hc2tlZF9vcih3YWwsIHJlZywgfjAsIHZhbCk7CiB9 CiAKLXN0YXRpYyB2b2lkIGNodl9ndF93b3JrYXJvdW5kc19hcHBseShzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpCitzdGF0aWMgdm9pZAord2Ffd3JpdGVfb3Ioc3RydWN0IGk5MTVf d2FfbGlzdCAqd2FsLCBpOTE1X3JlZ190IHJlZywgdTMyIHZhbCkKIHsKKwl3YV93cml0ZV9tYXNr ZWRfb3Iod2FsLCByZWcsIHZhbCwgdmFsKTsKIH0KIAotc3RhdGljIHZvaWQgZ2VuOV9ndF93b3Jr YXJvdW5kc19hcHBseShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCitzdGF0aWMg dm9pZCBnZW45X2d0X3dvcmthcm91bmRzX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTUpCiB7CisJc3RydWN0IGk5MTVfd2FfbGlzdCAqd2FsID0gJmk5MTUtPmd0X3dhX2xpc3Q7CisK IAkvKiBXYUNvbnRleHRTd2l0Y2hXaXRoQ29uY3VycmVudFRMQkludmFsaWRhdGU6c2tsLGJ4dCxr YmwsZ2xrLGNmbCAqLwotCUk5MTVfV1JJVEUoR0VOOV9DU0ZFX0NISUNLRU4xX1JDUywKLQkJICAg X01BU0tFRF9CSVRfRU5BQkxFKEdFTjlfUFJFRU1QVF9HUEdQVV9TWU5DX1NXSVRDSF9ESVNBQkxF KSk7CisJd2FfbWFza2VkX2VuKHdhbCwKKwkJICAgICBHRU45X0NTRkVfQ0hJQ0tFTjFfUkNTLAor CQkgICAgIEdFTjlfUFJFRU1QVF9HUEdQVV9TWU5DX1NXSVRDSF9ESVNBQkxFKTsKKwogCiAJLyog V2FFbmFibGVMYnNTbGFSZXRyeVRpbWVyRGVjcmVtZW50OnNrbCxieHQsa2JsLGdsayxjZmwgKi8K LQlJOTE1X1dSSVRFKEJEV19TQ1JBVENIMSwgSTkxNV9SRUFEKEJEV19TQ1JBVENIMSkgfAotCQkg ICBHRU45X0xCU19TTEFfUkVUUllfVElNRVJfREVDUkVNRU5UX0VOQUJMRSk7CisJd2Ffd3JpdGVf b3Iod2FsLAorCQkgICAgQkRXX1NDUkFUQ0gxLAorCQkgICAgR0VOOV9MQlNfU0xBX1JFVFJZX1RJ TUVSX0RFQ1JFTUVOVF9FTkFCTEUpOwogCiAJLyogV2FEaXNhYmxlS2lsbExvZ2ljOmJ4dCxza2ws a2JsICovCi0JaWYgKCFJU19DT0ZGRUVMQUtFKGRldl9wcml2KSkKLQkJSTkxNV9XUklURShHQU1f RUNPQ0hLLCBJOTE1X1JFQUQoR0FNX0VDT0NISykgfAotCQkJICAgRUNPQ0hLX0RJU19UTEIpOwor CWlmICghSVNfQ09GRkVFTEFLRShpOTE1KSkKKwkJd2Ffd3JpdGVfb3Iod2FsLAorCQkJICAgIEdB TV9FQ09DSEssCisJCQkgICAgRUNPQ0hLX0RJU19UTEIpOwogCi0JaWYgKEhBU19MTEMoZGV2X3By aXYpKSB7CisJaWYgKEhBU19MTEMoaTkxNSkpIHsKIAkJLyogV2FDb21wcmVzc2VkUmVzb3VyY2VT YW1wbGVyUGJlTWVkaWFOZXdIYXNoTW9kZTpza2wsa2JsCiAJCSAqCiAJCSAqIE11c3QgbWF0Y2gg RGlzcGxheSBFbmdpbmUuIFNlZQogCQkgKiBXYUNvbXByZXNzZWRSZXNvdXJjZURpc3BsYXlOZXdI YXNoTW9kZS4KIAkJICovCi0JCUk5MTVfV1JJVEUoTU1DRF9NSVNDX0NUUkwsCi0JCQkgICBJOTE1 X1JFQUQoTU1DRF9NSVNDX0NUUkwpIHwKLQkJCSAgIE1NQ0RfUENMQSB8Ci0JCQkgICBNTUNEX0hP VFNQT1RfRU4pOworCQl3YV93cml0ZV9vcih3YWwsCisJCQkgICAgTU1DRF9NSVNDX0NUUkwsCisJ CQkgICAgTU1DRF9QQ0xBIHwgTU1DRF9IT1RTUE9UX0VOKTsKIAl9CiAKIAkvKiBXYURpc2FibGVI RENJbnZhbGlkYXRpb246c2tsLGJ4dCxrYmwsY2ZsICovCi0JSTkxNV9XUklURShHQU1fRUNPQ0hL LCBJOTE1X1JFQUQoR0FNX0VDT0NISykgfAotCQkgICBCRFdfRElTQUJMRV9IRENfSU5WQUxJREFU SU9OKTsKKwl3YV93cml0ZV9vcih3YWwsCisJCSAgICBHQU1fRUNPQ0hLLAorCQkgICAgQkRXX0RJ U0FCTEVfSERDX0lOVkFMSURBVElPTik7CiAKIAkvKiBXYVByb2dyYW1MM1NxY1JlZzFEZWZhdWx0 Rm9yUGVyZjpieHQsZ2xrICovCi0JaWYgKElTX0dFTjlfTFAoZGV2X3ByaXYpKSB7Ci0JCXUzMiB2 YWwgPSBJOTE1X1JFQUQoR0VOOF9MM1NRQ1JFRzEpOwotCi0JCXZhbCAmPSB+TDNfUFJJT19DUkVE SVRTX01BU0s7Ci0JCXZhbCB8PSBMM19HRU5FUkFMX1BSSU9fQ1JFRElUUyg2MikgfCBMM19ISUdI X1BSSU9fQ1JFRElUUygyKTsKLQkJSTkxNV9XUklURShHRU44X0wzU1FDUkVHMSwgdmFsKTsKLQl9 CisJaWYgKElTX0dFTjlfTFAoaTkxNSkpCisJCXdhX3dyaXRlX21hc2tlZF9vcih3YWwsCisJCQkJ ICAgR0VOOF9MM1NRQ1JFRzEsCisJCQkJICAgTDNfUFJJT19DUkVESVRTX01BU0ssCisJCQkJICAg TDNfR0VORVJBTF9QUklPX0NSRURJVFMoNjIpIHwKKwkJCQkgICBMM19ISUdIX1BSSU9fQ1JFRElU UygyKSk7CiAKIAkvKiBXYU9DTENvaGVyZW50TGluZUZsdXNoOnNrbCxieHQsa2JsLGNmbCAqLwot CUk5MTVfV1JJVEUoR0VOOF9MM1NRQ1JFRzQsCi0JCSAgIEk5MTVfUkVBRChHRU44X0wzU1FDUkVH NCkgfCBHRU44X0xRU0NfRkxVU0hfQ09IRVJFTlRfTElORVMpOworCXdhX3dyaXRlX29yKHdhbCwK KwkJICAgIEdFTjhfTDNTUUNSRUc0LAorCQkgICAgR0VOOF9MUVNDX0ZMVVNIX0NPSEVSRU5UX0xJ TkVTKTsKIAogCS8qIFdhRW5hYmxlUHJlZW1wdGlvbkdyYW51bGFyaXR5Q29udHJvbEJ5VU1EOnNr bCxieHQsa2JsLGNmbCxbY25sXSAqLwotCUk5MTVfV1JJVEUoR0VON19GRl9TTElDRV9DU19DSElD S0VOMSwKLQkJICAgX01BU0tFRF9CSVRfRU5BQkxFKEdFTjlfRkZTQ19QRVJDVFhfUFJFRU1QVF9D VFJMKSk7CisJd2FfbWFza2VkX2VuKHdhbCwKKwkJICAgICBHRU43X0ZGX1NMSUNFX0NTX0NISUNL RU4xLAorCQkgICAgIEdFTjlfRkZTQ19QRVJDVFhfUFJFRU1QVF9DVFJMKTsKIH0KIAotc3RhdGlj IHZvaWQgc2tsX2d0X3dvcmthcm91bmRzX2FwcGx5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdikKK3N0YXRpYyB2b2lkIHNrbF9ndF93b3JrYXJvdW5kc19pbml0KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1KQogewotCWdlbjlfZ3Rfd29ya2Fyb3VuZHNfYXBwbHkoZGV2X3By aXYpOworCXN0cnVjdCBpOTE1X3dhX2xpc3QgKndhbCA9ICZpOTE1LT5ndF93YV9saXN0OworCisJ Z2VuOV9ndF93b3JrYXJvdW5kc19pbml0KGk5MTUpOwogCiAJLyogV2FFbmFibGVHYXBzVHN2Q3Jl ZGl0Rml4OnNrbCAqLwotCUk5MTVfV1JJVEUoR0VOOF9HQVJCQ05UTCwKLQkJICAgSTkxNV9SRUFE KEdFTjhfR0FSQkNOVEwpIHwgR0VOOV9HQVBTX1RTVl9DUkVESVRfRElTQUJMRSk7CisJd2Ffd3Jp dGVfb3Iod2FsLAorCQkgICAgR0VOOF9HQVJCQ05UTCwKKwkJICAgIEdFTjlfR0FQU19UU1ZfQ1JF RElUX0RJU0FCTEUpOwogCiAJLyogV2FEaXNhYmxlR2Fmc1VuaXRDbGtHYXRpbmc6c2tsICovCi0J STkxNV9XUklURShHRU43X1VDR0NUTDQsCi0JCSAgIEk5MTVfUkVBRChHRU43X1VDR0NUTDQpIHwg R0VOOF9FVV9HQVVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFKTsKKwl3YV93cml0ZV9vcih3YWwsCisJ CSAgICBHRU43X1VDR0NUTDQsCisJCSAgICBHRU44X0VVX0dBVU5JVF9DTE9DS19HQVRFX0RJU0FC TEUpOwogCiAJLyogV2FJblBsYWNlRGVjb21wcmVzc2lvbkhhbmc6c2tsICovCi0JaWYgKElTX1NL TF9SRVZJRChkZXZfcHJpdiwgU0tMX1JFVklEX0gwLCBSRVZJRF9GT1JFVkVSKSkKLQkJSTkxNV9X UklURShHRU45X0dBTVRfRUNPX1JFR19SV19JQSwKLQkJCSAgIEk5MTVfUkVBRChHRU45X0dBTVRf RUNPX1JFR19SV19JQSkgfAotCQkJICAgR0FNVF9FQ09fRU5BQkxFX0lOX1BMQUNFX0RFQ09NUFJF U1MpOworCWlmIChJU19TS0xfUkVWSUQoaTkxNSwgU0tMX1JFVklEX0gwLCBSRVZJRF9GT1JFVkVS KSkKKwkJd2Ffd3JpdGVfb3Iod2FsLAorCQkJICAgIEdFTjlfR0FNVF9FQ09fUkVHX1JXX0lBLAor CQkJICAgIEdBTVRfRUNPX0VOQUJMRV9JTl9QTEFDRV9ERUNPTVBSRVNTKTsKIH0KIAotc3RhdGlj IHZvaWQgYnh0X2d0X3dvcmthcm91bmRzX2FwcGx5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdikKK3N0YXRpYyB2b2lkIGJ4dF9ndF93b3JrYXJvdW5kc19pbml0KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1KQogewotCWdlbjlfZ3Rfd29ya2Fyb3VuZHNfYXBwbHkoZGV2X3By aXYpOworCXN0cnVjdCBpOTE1X3dhX2xpc3QgKndhbCA9ICZpOTE1LT5ndF93YV9saXN0OworCisJ Z2VuOV9ndF93b3JrYXJvdW5kc19pbml0KGk5MTUpOwogCiAJLyogV2FEaXNhYmxlUG9vbGVkRXVM b2FkQmFsYW5jaW5nRml4OmJ4dCAqLwotCUk5MTVfV1JJVEUoRkZfU0xJQ0VfQ1NfQ0hJQ0tFTjIs Ci0JCSAgIF9NQVNLRURfQklUX0VOQUJMRShHRU45X1BPT0xFRF9FVV9MT0FEX0JBTEFOQ0lOR19G SVhfRElTQUJMRSkpOworCXdhX21hc2tlZF9lbih3YWwsCisJCSAgICAgRkZfU0xJQ0VfQ1NfQ0hJ Q0tFTjIsCisJCSAgICAgR0VOOV9QT09MRURfRVVfTE9BRF9CQUxBTkNJTkdfRklYX0RJU0FCTEUp OwogCiAJLyogV2FJblBsYWNlRGVjb21wcmVzc2lvbkhhbmc6Ynh0ICovCi0JSTkxNV9XUklURShH RU45X0dBTVRfRUNPX1JFR19SV19JQSwKLQkJICAgSTkxNV9SRUFEKEdFTjlfR0FNVF9FQ09fUkVH X1JXX0lBKSB8Ci0JCSAgIEdBTVRfRUNPX0VOQUJMRV9JTl9QTEFDRV9ERUNPTVBSRVNTKTsKKwl3 YV93cml0ZV9vcih3YWwsCisJCSAgICBHRU45X0dBTVRfRUNPX1JFR19SV19JQSwKKwkJICAgIEdB TVRfRUNPX0VOQUJMRV9JTl9QTEFDRV9ERUNPTVBSRVNTKTsKIH0KIAotc3RhdGljIHZvaWQga2Js X2d0X3dvcmthcm91bmRzX2FwcGx5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikK K3N0YXRpYyB2b2lkIGtibF9ndF93b3JrYXJvdW5kc19pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICppOTE1KQogewotCWdlbjlfZ3Rfd29ya2Fyb3VuZHNfYXBwbHkoZGV2X3ByaXYpOworCXN0 cnVjdCBpOTE1X3dhX2xpc3QgKndhbCA9ICZpOTE1LT5ndF93YV9saXN0OworCisJZ2VuOV9ndF93 b3JrYXJvdW5kc19pbml0KGk5MTUpOwogCiAJLyogV2FFbmFibGVHYXBzVHN2Q3JlZGl0Rml4Omti bCAqLwotCUk5MTVfV1JJVEUoR0VOOF9HQVJCQ05UTCwKLQkJICAgSTkxNV9SRUFEKEdFTjhfR0FS QkNOVEwpIHwgR0VOOV9HQVBTX1RTVl9DUkVESVRfRElTQUJMRSk7CisJd2Ffd3JpdGVfb3Iod2Fs LAorCQkgICAgR0VOOF9HQVJCQ05UTCwKKwkJICAgIEdFTjlfR0FQU19UU1ZfQ1JFRElUX0RJU0FC TEUpOwogCiAJLyogV2FEaXNhYmxlRHluYW1pY0NyZWRpdFNoYXJpbmc6a2JsICovCi0JaWYgKElT X0tCTF9SRVZJRChkZXZfcHJpdiwgMCwgS0JMX1JFVklEX0IwKSkKLQkJSTkxNV9XUklURShHQU1U X0NIS05fQklUX1JFRywKLQkJCSAgIEk5MTVfUkVBRChHQU1UX0NIS05fQklUX1JFRykgfAotCQkJ ICAgR0FNVF9DSEtOX0RJU0FCTEVfRFlOQU1JQ19DUkVESVRfU0hBUklORyk7CisJaWYgKElTX0tC TF9SRVZJRChpOTE1LCAwLCBLQkxfUkVWSURfQjApKQorCQl3YV93cml0ZV9vcih3YWwsCisJCQkg ICAgR0FNVF9DSEtOX0JJVF9SRUcsCisJCQkgICAgR0FNVF9DSEtOX0RJU0FCTEVfRFlOQU1JQ19D UkVESVRfU0hBUklORyk7CiAKIAkvKiBXYURpc2FibGVHYWZzVW5pdENsa0dhdGluZzprYmwgKi8K LQlJOTE1X1dSSVRFKEdFTjdfVUNHQ1RMNCwKLQkJICAgSTkxNV9SRUFEKEdFTjdfVUNHQ1RMNCkg fCBHRU44X0VVX0dBVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUpOworCXdhX3dyaXRlX29yKHdhbCwK KwkJICAgIEdFTjdfVUNHQ1RMNCwKKwkJICAgIEdFTjhfRVVfR0FVTklUX0NMT0NLX0dBVEVfRElT QUJMRSk7CiAKIAkvKiBXYUluUGxhY2VEZWNvbXByZXNzaW9uSGFuZzprYmwgKi8KLQlJOTE1X1dS SVRFKEdFTjlfR0FNVF9FQ09fUkVHX1JXX0lBLAotCQkgICBJOTE1X1JFQUQoR0VOOV9HQU1UX0VD T19SRUdfUldfSUEpIHwKLQkJICAgR0FNVF9FQ09fRU5BQkxFX0lOX1BMQUNFX0RFQ09NUFJFU1Mp OworCXdhX3dyaXRlX29yKHdhbCwKKwkJICAgIEdFTjlfR0FNVF9FQ09fUkVHX1JXX0lBLAorCQkg ICAgR0FNVF9FQ09fRU5BQkxFX0lOX1BMQUNFX0RFQ09NUFJFU1MpOwogCiAJLyogV2FLQkxWRUNT U2VtYXBob3JlV2FpdFBvbGw6a2JsICovCi0JaWYgKElTX0tCTF9SRVZJRChkZXZfcHJpdiwgS0JM X1JFVklEX0EwLCBLQkxfUkVWSURfRTApKSB7CisJaWYgKElTX0tCTF9SRVZJRChpOTE1LCBLQkxf UkVWSURfQTAsIEtCTF9SRVZJRF9FMCkpIHsKIAkJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lOwogCQl1bnNpZ25lZCBpbnQgdG1wOwogCi0JCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGRl dl9wcml2LCB0bXApIHsKKwkJZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgaTkxNSwgdG1wKSB7CiAJ CQlpZiAoZW5naW5lLT5pZCA9PSBSQ1MpCiAJCQkJY29udGludWU7CiAKLQkJCUk5MTVfV1JJVEUo UklOR19TRU1BX1dBSVRfUE9MTChlbmdpbmUtPm1taW9fYmFzZSksIDEpOworCQkJd2Ffd3JpdGUo d2FsLAorCQkJCSBSSU5HX1NFTUFfV0FJVF9QT0xMKGVuZ2luZS0+bW1pb19iYXNlKSwKKwkJCQkg MSk7CiAJCX0KIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGdsa19ndF93b3JrYXJvdW5kc19hcHBseShz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCitzdGF0aWMgdm9pZCBnbGtfZ3Rfd29y a2Fyb3VuZHNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKIHsKLQlnZW45X2d0 X3dvcmthcm91bmRzX2FwcGx5KGRldl9wcml2KTsKKwlnZW45X2d0X3dvcmthcm91bmRzX2luaXQo aTkxNSk7CiB9CiAKLXN0YXRpYyB2b2lkIGNmbF9ndF93b3JrYXJvdW5kc19hcHBseShzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCitzdGF0aWMgdm9pZCBjZmxfZ3Rfd29ya2Fyb3Vu ZHNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKIHsKLQlnZW45X2d0X3dvcmth cm91bmRzX2FwcGx5KGRldl9wcml2KTsKKwlzdHJ1Y3QgaTkxNV93YV9saXN0ICp3YWwgPSAmaTkx NS0+Z3Rfd2FfbGlzdDsKKworCWdlbjlfZ3Rfd29ya2Fyb3VuZHNfaW5pdChpOTE1KTsKIAogCS8q IFdhRW5hYmxlR2Fwc1RzdkNyZWRpdEZpeDpjZmwgKi8KLQlJOTE1X1dSSVRFKEdFTjhfR0FSQkNO VEwsCi0JCSAgIEk5MTVfUkVBRChHRU44X0dBUkJDTlRMKSB8IEdFTjlfR0FQU19UU1ZfQ1JFRElU X0RJU0FCTEUpOworCXdhX3dyaXRlX29yKHdhbCwKKwkJICAgIEdFTjhfR0FSQkNOVEwsCisJCSAg ICBHRU45X0dBUFNfVFNWX0NSRURJVF9ESVNBQkxFKTsKIAogCS8qIFdhRGlzYWJsZUdhZnNVbml0 Q2xrR2F0aW5nOmNmbCAqLwotCUk5MTVfV1JJVEUoR0VON19VQ0dDVEw0LAotCQkgICBJOTE1X1JF QUQoR0VON19VQ0dDVEw0KSB8IEdFTjhfRVVfR0FVTklUX0NMT0NLX0dBVEVfRElTQUJMRSk7CisJ d2Ffd3JpdGVfb3Iod2FsLAorCQkgICAgR0VON19VQ0dDVEw0LAorCQkgICAgR0VOOF9FVV9HQVVO SVRfQ0xPQ0tfR0FURV9ESVNBQkxFKTsKIAogCS8qIFdhSW5QbGFjZURlY29tcHJlc3Npb25IYW5n OmNmbCAqLwotCUk5MTVfV1JJVEUoR0VOOV9HQU1UX0VDT19SRUdfUldfSUEsCi0JCSAgIEk5MTVf UkVBRChHRU45X0dBTVRfRUNPX1JFR19SV19JQSkgfAotCQkgICBHQU1UX0VDT19FTkFCTEVfSU5f UExBQ0VfREVDT01QUkVTUyk7CisJd2Ffd3JpdGVfb3Iod2FsLAorCQkgICAgR0VOOV9HQU1UX0VD T19SRUdfUldfSUEsCisJCSAgICBHQU1UX0VDT19FTkFCTEVfSU5fUExBQ0VfREVDT01QUkVTUyk7 CiB9CiAKIHN0YXRpYyB2b2lkIHdhX2luaXRfbWNyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdikKIHsKIAljb25zdCBzdHJ1Y3Qgc3NldV9kZXZfaW5mbyAqc3NldSA9ICYoSU5URUxf SU5GTyhkZXZfcHJpdiktPnNzZXUpOwotCXUzMiBtY3I7CisJc3RydWN0IGk5MTVfd2FfbGlzdCAq d2FsID0gJmRldl9wcml2LT5ndF93YV9saXN0OwogCXUzMiBtY3Jfc2xpY2Vfc3Vic2xpY2VfbWFz azsKIAogCS8qCkBAIC03NjUsOCArODU5LDYgQEAgc3RhdGljIHZvaWQgd2FfaW5pdF9tY3Ioc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCQlXQVJOX09OKChlbmFibGVkX21hc2sg JiBkaXNhYmxlZF9tYXNrKSAhPSBlbmFibGVkX21hc2spOwogCX0KIAotCW1jciA9IEk5MTVfUkVB RChHRU44X01DUl9TRUxFQ1RPUik7Ci0KIAlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMSkK IAkJbWNyX3NsaWNlX3N1YnNsaWNlX21hc2sgPSBHRU4xMV9NQ1JfU0xJQ0VfTUFTSyB8CiAJCQkJ CSAgR0VOMTFfTUNSX1NVQlNMSUNFX01BU0s7CkBAIC03ODQsMTU2ICs4NzYsMjI1IEBAIHN0YXRp YyB2b2lkIHdhX2luaXRfbWNyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAkg KiBvY2Nhc2lvbnMsIHN1Y2ggYXMgSU5TVERPTkUsIHdoZXJlIHRoaXMgdmFsdWUgaXMgZGVwZW5k ZW50CiAJICogb24gcy9zcyBjb21ibywgdGhlIHJlYWQgc2hvdWxkIGJlIGRvbmUgd2l0aCByZWFk X3N1YnNsaWNlX3JlZy4KIAkgKi8KLQltY3IgJj0gfm1jcl9zbGljZV9zdWJzbGljZV9tYXNrOwot CW1jciB8PSBpbnRlbF9jYWxjdWxhdGVfbWNyX3Nfc3Nfc2VsZWN0KGRldl9wcml2KTsKLQlJOTE1 X1dSSVRFKEdFTjhfTUNSX1NFTEVDVE9SLCBtY3IpOworCXdhX3dyaXRlX21hc2tlZF9vcih3YWws CisJCQkgICBHRU44X01DUl9TRUxFQ1RPUiwKKwkJCSAgIG1jcl9zbGljZV9zdWJzbGljZV9tYXNr LAorCQkJICAgaW50ZWxfY2FsY3VsYXRlX21jcl9zX3NzX3NlbGVjdChkZXZfcHJpdikpOwogfQog Ci1zdGF0aWMgdm9pZCBjbmxfZ3Rfd29ya2Fyb3VuZHNfYXBwbHkoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQorc3RhdGljIHZvaWQgY25sX2d0X3dvcmthcm91bmRzX2luaXQoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCiB7Ci0Jd2FfaW5pdF9tY3IoZGV2X3ByaXYpOwor CXN0cnVjdCBpOTE1X3dhX2xpc3QgKndhbCA9ICZpOTE1LT5ndF93YV9saXN0OworCisJd2FfaW5p dF9tY3IoaTkxNSk7CiAKIAkvKiBXYURpc2FibGVJMm1DeWNsZU9uV1JQb3J0OmNubCAocHJlLXBy b2QpICovCi0JaWYgKElTX0NOTF9SRVZJRChkZXZfcHJpdiwgQ05MX1JFVklEX0IwLCBDTkxfUkVW SURfQjApKQotCQlJOTE1X1dSSVRFKEdBTVRfQ0hLTl9CSVRfUkVHLAotCQkJICAgSTkxNV9SRUFE KEdBTVRfQ0hLTl9CSVRfUkVHKSB8Ci0JCQkgICBHQU1UX0NIS05fRElTQUJMRV9JMk1fQ1lDTEVf T05fV1JfUE9SVCk7CisJaWYgKElTX0NOTF9SRVZJRChpOTE1LCBDTkxfUkVWSURfQjAsIENOTF9S RVZJRF9CMCkpCisJCXdhX3dyaXRlX29yKHdhbCwKKwkJCSAgICBHQU1UX0NIS05fQklUX1JFRywK KwkJCSAgICBHQU1UX0NIS05fRElTQUJMRV9JMk1fQ1lDTEVfT05fV1JfUE9SVCk7CiAKIAkvKiBX YUluUGxhY2VEZWNvbXByZXNzaW9uSGFuZzpjbmwgKi8KLQlJOTE1X1dSSVRFKEdFTjlfR0FNVF9F Q09fUkVHX1JXX0lBLAotCQkgICBJOTE1X1JFQUQoR0VOOV9HQU1UX0VDT19SRUdfUldfSUEpIHwK LQkJICAgR0FNVF9FQ09fRU5BQkxFX0lOX1BMQUNFX0RFQ09NUFJFU1MpOworCXdhX3dyaXRlX29y KHdhbCwKKwkJICAgIEdFTjlfR0FNVF9FQ09fUkVHX1JXX0lBLAorCQkgICAgR0FNVF9FQ09fRU5B QkxFX0lOX1BMQUNFX0RFQ09NUFJFU1MpOwogCiAJLyogV2FFbmFibGVQcmVlbXB0aW9uR3JhbnVs YXJpdHlDb250cm9sQnlVTUQ6Y25sICovCi0JSTkxNV9XUklURShHRU43X0ZGX1NMSUNFX0NTX0NI SUNLRU4xLAotCQkgICBfTUFTS0VEX0JJVF9FTkFCTEUoR0VOOV9GRlNDX1BFUkNUWF9QUkVFTVBU X0NUUkwpKTsKKwl3YV9tYXNrZWRfZW4od2FsLAorCQkgICAgIEdFTjdfRkZfU0xJQ0VfQ1NfQ0hJ Q0tFTjEsCisJCSAgICAgR0VOOV9GRlNDX1BFUkNUWF9QUkVFTVBUX0NUUkwpOwogfQogCi1zdGF0 aWMgdm9pZCBpY2xfZ3Rfd29ya2Fyb3VuZHNfYXBwbHkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KQorc3RhdGljIHZvaWQgaWNsX2d0X3dvcmthcm91bmRzX2luaXQoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUpCiB7Ci0Jd2FfaW5pdF9tY3IoZGV2X3ByaXYpOworCXN0cnVj dCBpOTE1X3dhX2xpc3QgKndhbCA9ICZpOTE1LT5ndF93YV9saXN0OworCisJd2FfaW5pdF9tY3Io aTkxNSk7CiAKIAkvKiBUaGlzIGlzIG5vdCBhbiBXYS4gRW5hYmxlIGZvciBiZXR0ZXIgaW1hZ2Ug cXVhbGl0eSAqLwotCUk5MTVfV1JJVEUoXzNEX0NISUNLRU4zLAotCQkgICBfTUFTS0VEX0JJVF9F TkFCTEUoXzNEX0NISUNLRU4zX0FBX0xJTkVfUVVBTElUWV9GSVhfRU5BQkxFKSk7CisJd2FfbWFz a2VkX2VuKHdhbCwKKwkJICAgIF8zRF9DSElDS0VOMywKKwkJICAgIF8zRF9DSElDS0VOM19BQV9M SU5FX1FVQUxJVFlfRklYX0VOQUJMRSk7CiAKIAkvKiBXYUluUGxhY2VEZWNvbXByZXNzaW9uSGFu ZzppY2wgKi8KLQlJOTE1X1dSSVRFKEdFTjlfR0FNVF9FQ09fUkVHX1JXX0lBLAotCQkgICBJOTE1 X1JFQUQoR0VOOV9HQU1UX0VDT19SRUdfUldfSUEpIHwKLQkJICAgR0FNVF9FQ09fRU5BQkxFX0lO X1BMQUNFX0RFQ09NUFJFU1MpOworCXdhX3dyaXRlX29yKHdhbCwKKwkJICAgIEdFTjlfR0FNVF9F Q09fUkVHX1JXX0lBLAorCQkgICAgR0FNVF9FQ09fRU5BQkxFX0lOX1BMQUNFX0RFQ09NUFJFU1Mp OwogCiAJLyogV2FQaXBlbGluZUZsdXNoQ29oZXJlbnRMaW5lczppY2wgKi8KLQlJOTE1X1dSSVRF KEdFTjhfTDNTUUNSRUc0LAotCQkgICBJOTE1X1JFQUQoR0VOOF9MM1NRQ1JFRzQpIHwKLQkJICAg R0VOOF9MUVNDX0ZMVVNIX0NPSEVSRU5UX0xJTkVTKTsKKwl3YV93cml0ZV9vcih3YWwsCisJCSAg ICBHRU44X0wzU1FDUkVHNCwKKwkJICAgIEdFTjhfTFFTQ19GTFVTSF9DT0hFUkVOVF9MSU5FUyk7 CiAKIAkvKiBXYV8xNDA1NTQzNjIyOmljbAogCSAqIEZvcm1lcmx5IGtub3duIGFzIFdhR0FQWlBy aW9yaXR5U2NoZW1lCiAJICovCi0JSTkxNV9XUklURShHRU44X0dBUkJDTlRMLAotCQkgICBJOTE1 X1JFQUQoR0VOOF9HQVJCQ05UTCkgfAotCQkgICBHRU4xMV9BUkJJVFJBVElPTl9QUklPX09SREVS X01BU0spOworCXdhX3dyaXRlX29yKHdhbCwKKwkJICAgIEdFTjhfR0FSQkNOVEwsCisJCSAgICBH RU4xMV9BUkJJVFJBVElPTl9QUklPX09SREVSX01BU0spOwogCiAJLyogV2FfMTYwNDIyMzY2NDpp Y2wKIAkgKiBGb3JtZXJseSBrbm93biBhcyBXYUwzQmFua0FkZHJlc3NIYXNoaW5nCiAJICovCi0J STkxNV9XUklURShHRU44X0dBUkJDTlRMLAotCQkgICAoSTkxNV9SRUFEKEdFTjhfR0FSQkNOVEwp ICYgfkdFTjExX0hBU0hfQ1RSTF9FWENMX01BU0spIHwKLQkJICAgR0VOMTFfSEFTSF9DVFJMX0VY Q0xfQklUMCk7Ci0JSTkxNV9XUklURShHRU4xMV9HTEJMSU5WTCwKLQkJICAgKEk5MTVfUkVBRChH RU4xMV9HTEJMSU5WTCkgJiB+R0VOMTFfQkFOS19IQVNIX0FERFJfRVhDTF9NQVNLKSB8Ci0JCSAg IEdFTjExX0JBTktfSEFTSF9BRERSX0VYQ0xfQklUMCk7CisJd2Ffd3JpdGVfbWFza2VkX29yKHdh bCwKKwkJCSAgIEdFTjhfR0FSQkNOVEwsCisJCQkgICBHRU4xMV9IQVNIX0NUUkxfRVhDTF9NQVNL LAorCQkJICAgR0VOMTFfSEFTSF9DVFJMX0VYQ0xfQklUMCk7CisJd2Ffd3JpdGVfbWFza2VkX29y KHdhbCwKKwkJCSAgIEdFTjExX0dMQkxJTlZMLAorCQkJICAgR0VOMTFfQkFOS19IQVNIX0FERFJf RVhDTF9NQVNLLAorCQkJICAgR0VOMTFfQkFOS19IQVNIX0FERFJfRVhDTF9CSVQwKTsKIAogCS8q IFdhTW9kaWZ5R2FtVGxiUGFydGl0aW9uaW5nOmljbCAqLwotCUk5MTVfV1JJVEUoR0VOMTFfR0FD Ql9QRVJGX0NUUkwsCi0JCSAgIChJOTE1X1JFQUQoR0VOMTFfR0FDQl9QRVJGX0NUUkwpICYgfkdF TjExX0hBU0hfQ1RSTF9NQVNLKSB8Ci0JCSAgIEdFTjExX0hBU0hfQ1RSTF9CSVQwIHwgR0VOMTFf SEFTSF9DVFJMX0JJVDQpOworCXdhX3dyaXRlX21hc2tlZF9vcih3YWwsCisJCQkgICBHRU4xMV9H QUNCX1BFUkZfQ1RSTCwKKwkJCSAgIEdFTjExX0hBU0hfQ1RSTF9NQVNLLAorCQkJICAgR0VOMTFf SEFTSF9DVFJMX0JJVDAgfCBHRU4xMV9IQVNIX0NUUkxfQklUNCk7CiAKIAkvKiBXYV8xNDA1NzMz MjE2OmljbAogCSAqIEZvcm1lcmx5IGtub3duIGFzIFdhRGlzYWJsZUNsZWFuRXZpY3RzCiAJICov Ci0JSTkxNV9XUklURShHRU44X0wzU1FDUkVHNCwKLQkJICAgSTkxNV9SRUFEKEdFTjhfTDNTUUNS RUc0KSB8Ci0JCSAgIEdFTjExX0xRU0NfQ0xFQU5fRVZJQ1RfRElTQUJMRSk7CisJd2Ffd3JpdGVf b3Iod2FsLAorCQkgICAgR0VOOF9MM1NRQ1JFRzQsCisJCSAgICBHRU4xMV9MUVNDX0NMRUFOX0VW SUNUX0RJU0FCTEUpOwogCiAJLyogV2FfMTQwNTc2NjEwNzppY2wKIAkgKiBGb3JtZXJseSBrbm93 biBhcyBXYUNMMlNGSGFsZk1heEFsbG9jCiAJICovCi0JSTkxNV9XUklURShHRU4xMV9MU05fVU5T TENWQywKLQkJICAgSTkxNV9SRUFEKEdFTjExX0xTTl9VTlNMQ1ZDKSB8Ci0JCSAgIEdFTjExX0xT Tl9VTlNMQ1ZDX0dBRlNfSEFMRl9TRl9NQVhBTExPQyB8Ci0JCSAgIEdFTjExX0xTTl9VTlNMQ1ZD X0dBRlNfSEFMRl9DTDJfTUFYQUxMT0MpOworCXdhX3dyaXRlX29yKHdhbCwKKwkJICAgIEdFTjEx X0xTTl9VTlNMQ1ZDLAorCQkgICAgR0VOMTFfTFNOX1VOU0xDVkNfR0FGU19IQUxGX1NGX01BWEFM TE9DIHwKKwkJICAgIEdFTjExX0xTTl9VTlNMQ1ZDX0dBRlNfSEFMRl9DTDJfTUFYQUxMT0MpOwog CiAJLyogV2FfMjIwMTY2MTU0OmljbAogCSAqIEZvcm1lcmx5IGtub3duIGFzIFdhRGlzQ3R4UmVs b2FkCiAJICovCi0JSTkxNV9XUklURShHRU44X0dBTVdfRUNPX0RFVl9SV19JQSwKLQkJICAgSTkx NV9SRUFEKEdFTjhfR0FNV19FQ09fREVWX1JXX0lBKSB8Ci0JCSAgIEdBTVdfRUNPX0RFVl9DVFhf UkVMT0FEX0RJU0FCTEUpOworCXdhX3dyaXRlX29yKHdhbCwKKwkJICAgIEdFTjhfR0FNV19FQ09f REVWX1JXX0lBLAorCQkgICAgR0FNV19FQ09fREVWX0NUWF9SRUxPQURfRElTQUJMRSk7CiAKIAkv KiBXYV8xNDA1Nzc5MDA0OmljbCAocHJlLXByb2QpICovCi0JaWYgKElTX0lDTF9SRVZJRChkZXZf cHJpdiwgSUNMX1JFVklEX0EwLCBJQ0xfUkVWSURfQTApKQotCQlJOTE1X1dSSVRFKFNMSUNFX1VO SVRfTEVWRUxfQ0xLR0FURSwKLQkJCSAgIEk5MTVfUkVBRChTTElDRV9VTklUX0xFVkVMX0NMS0dB VEUpIHwKLQkJCSAgIE1TQ1VOSVRfQ0xLR0FURV9ESVMpOworCWlmIChJU19JQ0xfUkVWSUQoaTkx NSwgSUNMX1JFVklEX0EwLCBJQ0xfUkVWSURfQTApKQorCQl3YV93cml0ZV9vcih3YWwsCisJCQkg ICAgU0xJQ0VfVU5JVF9MRVZFTF9DTEtHQVRFLAorCQkJICAgIE1TQ1VOSVRfQ0xLR0FURV9ESVMp OwogCiAJLyogV2FfMTQwNjY4MDE1OTppY2wgKi8KLQlJOTE1X1dSSVRFKFNVQlNMSUNFX1VOSVRf TEVWRUxfQ0xLR0FURSwKLQkJICAgSTkxNV9SRUFEKFNVQlNMSUNFX1VOSVRfTEVWRUxfQ0xLR0FU RSkgfAotCQkgICBHV1VOSVRfQ0xLR0FURV9ESVMpOworCXdhX3dyaXRlX29yKHdhbCwKKwkJICAg IFNVQlNMSUNFX1VOSVRfTEVWRUxfQ0xLR0FURSwKKwkJICAgIEdXVU5JVF9DTEtHQVRFX0RJUyk7 CiAKIAkvKiBXYV8xNDA2ODM4NjU5OmljbCAocHJlLXByb2QpICovCi0JaWYgKElTX0lDTF9SRVZJ RChkZXZfcHJpdiwgSUNMX1JFVklEX0EwLCBJQ0xfUkVWSURfQjApKQotCQlJOTE1X1dSSVRFKElO Rl9VTklUX0xFVkVMX0NMS0dBVEUsCi0JCQkgICBJOTE1X1JFQUQoSU5GX1VOSVRfTEVWRUxfQ0xL R0FURSkgfAotCQkJICAgQ0dQU0ZfQ0xLR0FURV9ESVMpOworCWlmIChJU19JQ0xfUkVWSUQoaTkx NSwgSUNMX1JFVklEX0EwLCBJQ0xfUkVWSURfQjApKQorCQl3YV93cml0ZV9vcih3YWwsCisJCQkg ICAgSU5GX1VOSVRfTEVWRUxfQ0xLR0FURSwKKwkJCSAgICBDR1BTRl9DTEtHQVRFX0RJUyk7CiAK IAkvKiBXYUZvcndhcmRQcm9ncmVzc1NvZnRSZXNldDppY2wgKi8KLQlJOTE1X1dSSVRFKEdFTjEw X1NDUkFUQ0hfTE5DRjIsCi0JCSAgIEk5MTVfUkVBRChHRU4xMF9TQ1JBVENIX0xOQ0YyKSB8Ci0J CSAgIFBNRkxVU0hET05FX0xOSUNSU0RST1AgfAotCQkgICBQTUZMVVNIX0dBUEwzVU5CTE9DSyB8 Ci0JCSAgIFBNRkxVU0hET05FX0xORUJMSyk7CisJd2Ffd3JpdGVfb3Iod2FsLAorCQkgICAgR0VO MTBfU0NSQVRDSF9MTkNGMiwKKwkJICAgIFBNRkxVU0hET05FX0xOSUNSU0RST1AgfAorCQkgICAg UE1GTFVTSF9HQVBMM1VOQkxPQ0sgfAorCQkgICAgUE1GTFVTSERPTkVfTE5FQkxLKTsKIAogCS8q IFdhXzE0MDY0NjMwOTk6aWNsCiAJICogRm9ybWVybHkga25vd24gYXMgV2FHYW1UbGJQZW5kRXJy b3IKIAkgKi8KLQlJOTE1X1dSSVRFKEdBTVRfQ0hLTl9CSVRfUkVHLAotCQkgICBJOTE1X1JFQUQo R0FNVF9DSEtOX0JJVF9SRUcpIHwKLQkJICAgR0FNVF9DSEtOX0RJU0FCTEVfTDNfQ09IX1BJUEUp OworCXdhX3dyaXRlX29yKHdhbCwKKwkJICAgIEdBTVRfQ0hLTl9CSVRfUkVHLAorCQkgICAgR0FN VF9DSEtOX0RJU0FCTEVfTDNfQ09IX1BJUEUpOwogCiAJLyogV2FfMTQwNjYwOTI1NTppY2wgKHBy ZS1wcm9kKSAqLwotCWlmIChJU19JQ0xfUkVWSUQoZGV2X3ByaXYsIElDTF9SRVZJRF9BMCwgSUNM X1JFVklEX0IwKSkKLQkJSTkxNV9XUklURShHRU43X1NBUkNIS01ELAotCQkJICAgSTkxNV9SRUFE KEdFTjdfU0FSQ0hLTUQpIHwKLQkJCSAgIEdFTjdfRElTQUJMRV9ERU1BTkRfUFJFRkVUQ0ggfAot CQkJICAgR0VON19ESVNBQkxFX1NBTVBMRVJfUFJFRkVUQ0gpOworCWlmIChJU19JQ0xfUkVWSUQo aTkxNSwgSUNMX1JFVklEX0EwLCBJQ0xfUkVWSURfQjApKQorCQl3YV93cml0ZV9vcih3YWwsCisJ CQkgICAgR0VON19TQVJDSEtNRCwKKwkJCSAgICBHRU43X0RJU0FCTEVfREVNQU5EX1BSRUZFVENI IHwKKwkJCSAgICBHRU43X0RJU0FCTEVfU0FNUExFUl9QUkVGRVRDSCk7CiB9CiAKLXZvaWQgaW50 ZWxfZ3Rfd29ya2Fyb3VuZHNfYXBwbHkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQordm9pZCBpbnRlbF9ndF9pbml0X3dvcmthcm91bmRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1KQogewotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgOCkKKwlzdHJ1Y3QgaTkxNV93 YV9saXN0ICp3YWwgPSAmaTkxNS0+Z3Rfd2FfbGlzdDsKKworCXdhX2luaXRfc3RhcnQod2FsLCAi R1QiKTsKKworCWlmIChJTlRFTF9HRU4oaTkxNSkgPCA4KQogCQlyZXR1cm47Ci0JZWxzZSBpZiAo SVNfQlJPQURXRUxMKGRldl9wcml2KSkKLQkJYmR3X2d0X3dvcmthcm91bmRzX2FwcGx5KGRldl9w cml2KTsKLQllbHNlIGlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSkKLQkJY2h2X2d0X3dvcmth cm91bmRzX2FwcGx5KGRldl9wcml2KTsKLQllbHNlIGlmIChJU19TS1lMQUtFKGRldl9wcml2KSkK LQkJc2tsX2d0X3dvcmthcm91bmRzX2FwcGx5KGRldl9wcml2KTsKLQllbHNlIGlmIChJU19CUk9Y VE9OKGRldl9wcml2KSkKLQkJYnh0X2d0X3dvcmthcm91bmRzX2FwcGx5KGRldl9wcml2KTsKLQll bHNlIGlmIChJU19LQUJZTEFLRShkZXZfcHJpdikpCi0JCWtibF9ndF93b3JrYXJvdW5kc19hcHBs eShkZXZfcHJpdik7Ci0JZWxzZSBpZiAoSVNfR0VNSU5JTEFLRShkZXZfcHJpdikpCi0JCWdsa19n dF93b3JrYXJvdW5kc19hcHBseShkZXZfcHJpdik7Ci0JZWxzZSBpZiAoSVNfQ09GRkVFTEFLRShk ZXZfcHJpdikpCi0JCWNmbF9ndF93b3JrYXJvdW5kc19hcHBseShkZXZfcHJpdik7Ci0JZWxzZSBp ZiAoSVNfQ0FOTk9OTEFLRShkZXZfcHJpdikpCi0JCWNubF9ndF93b3JrYXJvdW5kc19hcHBseShk ZXZfcHJpdik7Ci0JZWxzZSBpZiAoSVNfSUNFTEFLRShkZXZfcHJpdikpCi0JCWljbF9ndF93b3Jr YXJvdW5kc19hcHBseShkZXZfcHJpdik7CisJZWxzZSBpZiAoSVNfQlJPQURXRUxMKGk5MTUpKQor CQlyZXR1cm47CisJZWxzZSBpZiAoSVNfQ0hFUlJZVklFVyhpOTE1KSkKKwkJcmV0dXJuOworCWVs c2UgaWYgKElTX1NLWUxBS0UoaTkxNSkpCisJCXNrbF9ndF93b3JrYXJvdW5kc19pbml0KGk5MTUp OworCWVsc2UgaWYgKElTX0JST1hUT04oaTkxNSkpCisJCWJ4dF9ndF93b3JrYXJvdW5kc19pbml0 KGk5MTUpOworCWVsc2UgaWYgKElTX0tBQllMQUtFKGk5MTUpKQorCQlrYmxfZ3Rfd29ya2Fyb3Vu ZHNfaW5pdChpOTE1KTsKKwllbHNlIGlmIChJU19HRU1JTklMQUtFKGk5MTUpKQorCQlnbGtfZ3Rf d29ya2Fyb3VuZHNfaW5pdChpOTE1KTsKKwllbHNlIGlmIChJU19DT0ZGRUVMQUtFKGk5MTUpKQor CQljZmxfZ3Rfd29ya2Fyb3VuZHNfaW5pdChpOTE1KTsKKwllbHNlIGlmIChJU19DQU5OT05MQUtF KGk5MTUpKQorCQljbmxfZ3Rfd29ya2Fyb3VuZHNfaW5pdChpOTE1KTsKKwllbHNlIGlmIChJU19J Q0VMQUtFKGk5MTUpKQorCQlpY2xfZ3Rfd29ya2Fyb3VuZHNfaW5pdChpOTE1KTsKIAllbHNlCi0J CU1JU1NJTkdfQ0FTRShJTlRFTF9HRU4oZGV2X3ByaXYpKTsKKwkJTUlTU0lOR19DQVNFKElOVEVM X0dFTihpOTE1KSk7CisKKwl3YV9pbml0X2ZpbmlzaCh3YWwpOworfQorCitzdGF0aWMgZW51bSBm b3JjZXdha2VfZG9tYWlucword2FsX2dldF9md19mb3Jfcm13KHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwKKwkJICAgY29uc3Qgc3RydWN0IGk5MTVfd2FfbGlzdCAqd2FsKQorewor CWVudW0gZm9yY2V3YWtlX2RvbWFpbnMgZncgPSAwOworCXN0cnVjdCBpOTE1X3dhICp3YTsKKwl1 bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDAsIHdhID0gd2FsLT5saXN0OyBpIDwgd2FsLT5j b3VudDsgaSsrLCB3YSsrKQorCQlmdyB8PSBpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2Zvcl9yZWco ZGV2X3ByaXYsCisJCQkJCQkgICAgIHdhLT5yZWcsCisJCQkJCQkgICAgIEZXX1JFR19SRUFEIHwK KwkJCQkJCSAgICAgRldfUkVHX1dSSVRFKTsKKworCXJldHVybiBmdzsKK30KKworc3RhdGljIHZv aWQKK3dhX2xpc3RfYXBwbHkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBjb25z dCBzdHJ1Y3QgaTkxNV93YV9saXN0ICp3YWwpCit7CisJZW51bSBmb3JjZXdha2VfZG9tYWlucyBm dzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBpOTE1X3dhICp3YTsKKwl1bnNpZ25l ZCBpbnQgaTsKKworCWlmICghd2FsLT5jb3VudCkKKwkJcmV0dXJuOworCisJZncgPSB3YWxfZ2V0 X2Z3X2Zvcl9ybXcoZGV2X3ByaXYsIHdhbCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3By aXYtPnVuY29yZS5sb2NrLCBmbGFncyk7CisJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9nZXRfX2xv Y2tlZChkZXZfcHJpdiwgZncpOworCisJZm9yIChpID0gMCwgd2EgPSB3YWwtPmxpc3Q7IGkgPCB3 YWwtPmNvdW50OyBpKyssIHdhKyspIHsKKwkJdTMyIHZhbCA9IEk5MTVfUkVBRF9GVyh3YS0+cmVn KTsKKworCQl2YWwgJj0gfndhLT5tYXNrOworCQl2YWwgfD0gd2EtPnZhbDsKKworCQlJOTE1X1dS SVRFX0ZXKHdhLT5yZWcsIHZhbCk7CisJfQorCisJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXRf X2xvY2tlZChkZXZfcHJpdiwgZncpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2 LT51bmNvcmUubG9jaywgZmxhZ3MpOworCisJRFJNX0RFQlVHX0RSSVZFUigiQXBwbGllZCAldSAl cyB3b3JrYXJvdW5kc1xuIiwgd2FsLT5jb3VudCwgd2FsLT5uYW1lKTsKK30KKwordm9pZCBpbnRl bF9ndF9hcHBseV93b3JrYXJvdW5kcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp Cit7CisJd2FfbGlzdF9hcHBseShkZXZfcHJpdiwgJmRldl9wcml2LT5ndF93YV9saXN0KTsKIH0K IAogc3RydWN0IHdoaXRlbGlzdCB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF93b3JrYXJvdW5kcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfd29ya2Fyb3Vu ZHMuaAppbmRleCBiMTFkMDYyM2U2MjYuLjI2MzEwNjYwMGZkYyAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfd29ya2Fyb3VuZHMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF93b3JrYXJvdW5kcy5oCkBAIC03LDEwICs3LDMxIEBACiAjaWZuZGVmIF9JOTE1 X1dPUktBUk9VTkRTX0hfCiAjZGVmaW5lIF9JOTE1X1dPUktBUk9VTkRTX0hfCiAKKyNpbmNsdWRl IDxsaW51eC9zbGFiLmg+CisKK3N0cnVjdCBpOTE1X3dhIHsKKwlpOTE1X3JlZ190CSAgcmVnOwor CXUzMgkJICBtYXNrOworCXUzMgkJICB2YWw7Cit9OworCitzdHJ1Y3QgaTkxNV93YV9saXN0IHsK Kwljb25zdCBjaGFyCSpuYW1lOworCXN0cnVjdCBpOTE1X3dhCSpsaXN0OworCXVuc2lnbmVkIGlu dAljb3VudDsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnRlbF93YV9saXN0X2ZyZWUoc3Ry dWN0IGk5MTVfd2FfbGlzdCAqd2FsKQoreworCWtmcmVlKHdhbC0+bGlzdCk7CisJbWVtc2V0KHdh bCwgMCwgc2l6ZW9mKCp3YWwpKTsKK30KKwogaW50IGludGVsX2N0eF93b3JrYXJvdW5kc19pbml0 KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CiBpbnQgaW50ZWxfY3R4X3dvcmth cm91bmRzX2VtaXQoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpOwogCi12b2lkIGludGVsX2d0X3dv cmthcm91bmRzX2FwcGx5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cit2b2lk IGludGVsX2d0X2luaXRfd29ya2Fyb3VuZHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KTsKK3ZvaWQgaW50ZWxfZ3RfYXBwbHlfd29ya2Fyb3VuZHMoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KTsKIAogdm9pZCBpbnRlbF93aGl0ZWxpc3Rfd29ya2Fyb3VuZHNfYXBw bHkoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKIAotLSAKMi4xOS4xCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGlu ZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK