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 11:46:11 +0000 Message-ID: <20181203114617.6938-2-tvrtko.ursulin@linux.intel.com> References: <20181203114617.6938-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 mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id 96CFF89B3B for ; Mon, 3 Dec 2018 11:46:22 +0000 (UTC) In-Reply-To: <20181203114617.6938-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 ciBvZiB0d28gY2h1bmtzLiAoQ2hyaXMgV2lsc29uKQoKU2lnbmVkLW9mZi1ieTogVHZydGtvIFVy c3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KUmV2aWV3ZWQtYnk6IENocmlzIFdpbHNv biA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPiAjIHYyCi0tLQogZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kcnYuYyAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5oICAgICAgICAgIHwgICAyICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMg ICAgICAgICAgfCAgIDQgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3dvcmthcm91bmRz LmMgfCA0OTEgKysrKysrKysrKysrKysrLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX3dvcmthcm91bmRzLmggfCAgMjMgKy0KIDUgZmlsZXMgY2hhbmdlZCwgMzUzIGluc2VydGlv bnMoKyksIDE2OCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwppbmRleCBlMzkw MTY3MTM0NjQuLmVlNTExNmI2MmNkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCkBAIC0xNDUz LDYgKzE0NTMsNyBAQCBzdGF0aWMgaW50IGk5MTVfZHJpdmVyX2luaXRfaHcoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KQogCiAJaW50ZWxfdW5jb3JlX3Nhbml0aXplKGRldl9wcml2 KTsKIAorCWludGVsX2d0X2luaXRfd29ya2Fyb3VuZHMoZGV2X3ByaXYpOwogCWk5MTVfZ2VtX2xv YWRfaW5pdF9mZW5jZXMoZGV2X3ByaXYpOwogCiAJLyogT24gdGhlIDk0NUcvR00sIHRoZSBjaGlw c2V0IHJlcG9ydHMgdGhlIE1TSSBjYXBhYmlsaXR5IG9uIHRoZQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2 LmgKaW5kZXggNDNhYzY4NzNhMmJiLi45ZGRiY2MxZjM1NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k cnYuaApAQCAtNjksNiArNjksNyBAQAogI2luY2x1ZGUgImludGVsX3JpbmdidWZmZXIuaCIKICNp bmNsdWRlICJpbnRlbF91bmNvcmUuaCIKICNpbmNsdWRlICJpbnRlbF93b3BjbS5oIgorI2luY2x1 ZGUgImludGVsX3dvcmthcm91bmRzLmgiCiAjaW5jbHVkZSAiaW50ZWxfdWMuaCIKIAogI2luY2x1 ZGUgImk5MTVfZ2VtLmgiCkBAIC0xNjUyLDYgKzE2NTMsNyBAQCBzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSB7CiAJaW50IGRwaW9fcGh5X2lvc2ZfcG9ydFtJOTE1X05VTV9QSFlTX1ZMVl07CiAKIAlz dHJ1Y3QgaTkxNV93b3JrYXJvdW5kcyB3b3JrYXJvdW5kczsKKwlzdHJ1Y3QgaTkxNV93YV9saXN0 IGd0X3dhX2xpc3Q7CiAKIAlzdHJ1Y3QgaTkxNV9mcm9udGJ1ZmZlcl90cmFja2luZyBmYl90cmFj a2luZzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKaW5kZXggYzU1YjFmNzVjOTgwLi42MzMzYTdk NmFmNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwpAQCAtNTMzNCw3ICs1MzM0LDcgQEAgaW50 IGk5MTVfZ2VtX2luaXRfaHcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCQlJ OTE1X1dSSVRFKE1JX1BSRURJQ0FURV9SRVNVTFRfMiwgSVNfSFNXX0dUMyhkZXZfcHJpdikgPwog CQkJICAgTE9XRVJfU0xJQ0VfRU5BQkxFRCA6IExPV0VSX1NMSUNFX0RJU0FCTEVEKTsKIAotCWlu dGVsX2d0X3dvcmthcm91bmRzX2FwcGx5KGRldl9wcml2KTsKKwlpbnRlbF9ndF9hcHBseV93b3Jr YXJvdW5kcyhkZXZfcHJpdik7CiAKIAlpOTE1X2dlbV9pbml0X3N3aXp6bGluZyhkZXZfcHJpdik7 CiAKQEAgLTU3MDYsNiArNTcwNiw4IEBAIHZvaWQgaTkxNV9nZW1fZmluaShzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJaTkxNV9nZW1fY29udGV4dHNfZmluaShkZXZfcHJpdik7 CiAJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+ZHJtLnN0cnVjdF9tdXRleCk7CiAKKwlpbnRlbF93 YV9saXN0X2ZyZWUoJmRldl9wcml2LT5ndF93YV9saXN0KTsKKwogCWludGVsX2NsZWFudXBfZ3Rf cG93ZXJzYXZlKGRldl9wcml2KTsKIAogCWludGVsX3VjX2ZpbmlfbWlzYyhkZXZfcHJpdik7CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF93b3JrYXJvdW5kcy5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfd29ya2Fyb3VuZHMuYwppbmRleCBlNWNkNmM2YzY2YzMu LmYwNWYxMzU0NzAzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfd29y a2Fyb3VuZHMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF93b3JrYXJvdW5kcy5j CkBAIC00OCw2ICs0OCwxOCBAQAogICogLSBQdWJsaWMgZnVuY3Rpb25zIHRvIGluaXQgb3IgYXBw bHkgdGhlIGdpdmVuIHdvcmthcm91bmQgdHlwZS4KICAqLwogCitzdGF0aWMgdm9pZCB3YV9pbml0 X3N0YXJ0KHN0cnVjdCBpOTE1X3dhX2xpc3QgKndhbCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwl3 YWwtPm5hbWUgPSBuYW1lOworfQorCitzdGF0aWMgdm9pZCB3YV9pbml0X2ZpbmlzaChzdHJ1Y3Qg aTkxNV93YV9saXN0ICp3YWwpCit7CisJaWYgKHdhbC0+Y291bnQpCisJCURSTV9ERUJVR19EUklW RVIoIkluaXRpYWxpemVkICV1ICVzIHdvcmthcm91bmRzXG4iLAorCQkJCSB3YWwtPmNvdW50LCB3 YWwtPm5hbWUpOworfQorCiBzdGF0aWMgdm9pZCB3YV9hZGQoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTUsCiAJCSAgIGk5MTVfcmVnX3QgcmVnLCBjb25zdCB1MzIgbWFzaywgY29uc3QgdTMy IHZhbCkKIHsKQEAgLTU3NSwxNjAgKzU4NywyNDAgQEAgaW50IGludGVsX2N0eF93b3JrYXJvdW5k c19lbWl0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQogCXJldHVybiAwOwogfQogCi1zdGF0aWMg dm9pZCBiZHdfZ3Rfd29ya2Fyb3VuZHNfYXBwbHkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KQorc3RhdGljIHZvaWQKK3dhbF9hZGQoc3RydWN0IGk5MTVfd2FfbGlzdCAqd2FsLCBj b25zdCBzdHJ1Y3QgaTkxNV93YSAqd2EpCit7CisJY29uc3QgdW5zaWduZWQgaW50IGdyb3cgPSAx IDw8IDQ7CisKKwlHRU1fQlVHX09OKCFpc19wb3dlcl9vZl8yKGdyb3cpKTsKKworCWlmIChJU19B TElHTkVEKHdhbC0+Y291bnQsIGdyb3cpKSB7IC8qIEVpdGhlciB1bmluaXRpYWxpemVkIG9yIGZ1 bGwuICovCisJCXN0cnVjdCBpOTE1X3dhICpsaXN0OworCisJCWxpc3QgPSBrY2FsbG9jKEFMSUdO KHdhbC0+Y291bnQgKyAxLCBncm93KSwgc2l6ZW9mKCp3YSksCisJCQkgICAgICAgR0ZQX0tFUk5F TCk7CisJCWlmICghbGlzdCkgeworCQkJRFJNX0VSUk9SKCJObyBzcGFjZSBmb3Igd29ya2Fyb3Vu ZCBpbml0IVxuIik7CisJCQlyZXR1cm47CisJCX0KKworCQlpZiAod2FsLT5saXN0KQorCQkJbWVt Y3B5KGxpc3QsIHdhbC0+bGlzdCwgc2l6ZW9mKCp3YSkgKiB3YWwtPmNvdW50KTsKKworCQl3YWwt Pmxpc3QgPSBsaXN0OworCX0KKworCW1lbWNweSgmd2FsLT5saXN0W3dhbC0+Y291bnRdLCB3YSwg c2l6ZW9mKCp3YSkpOworCXdhbC0+Y291bnQrKzsKK30KKworc3RhdGljIHZvaWQKK3dhX21hc2tl ZF9lbihzdHJ1Y3QgaTkxNV93YV9saXN0ICp3YWwsIGk5MTVfcmVnX3QgcmVnLCB1MzIgdmFsKQog eworCXN0cnVjdCBpOTE1X3dhIHdhID0geworCQkucmVnID0gcmVnLAorCQkubWFzayA9IHZhbCwK KwkJLnZhbCA9IF9NQVNLRURfQklUX0VOQUJMRSh2YWwpCisJfTsKKworCXdhbF9hZGQod2FsLCAm d2EpOworfQorCitzdGF0aWMgdm9pZAord2Ffd3JpdGVfbWFza2VkX29yKHN0cnVjdCBpOTE1X3dh X2xpc3QgKndhbCwgaTkxNV9yZWdfdCByZWcsIHUzMiBtYXNrLAorCQkgICB1MzIgdmFsKQorewor CXN0cnVjdCBpOTE1X3dhIHdhID0geworCQkucmVnID0gcmVnLAorCQkubWFzayA9IG1hc2ssCisJ CS52YWwgPSB2YWwKKwl9OworCisJd2FsX2FkZCh3YWwsICZ3YSk7CiB9CiAKLXN0YXRpYyB2b2lk IGNodl9ndF93b3JrYXJvdW5kc19hcHBseShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpCitzdGF0aWMgdm9pZAord2Ffd3JpdGUoc3RydWN0IGk5MTVfd2FfbGlzdCAqd2FsLCBpOTE1 X3JlZ190IHJlZywgdTMyIHZhbCkKIHsKKwl3YV93cml0ZV9tYXNrZWRfb3Iod2FsLCByZWcsIH4w LCB2YWwpOwogfQogCi1zdGF0aWMgdm9pZCBnZW45X2d0X3dvcmthcm91bmRzX2FwcGx5KHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3N0YXRpYyB2b2lkCit3YV93cml0ZV9vcihz dHJ1Y3QgaTkxNV93YV9saXN0ICp3YWwsIGk5MTVfcmVnX3QgcmVnLCB1MzIgdmFsKQogeworCXdh X3dyaXRlX21hc2tlZF9vcih3YWwsIHJlZywgdmFsLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBn ZW45X2d0X3dvcmthcm91bmRzX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCit7 CisJc3RydWN0IGk5MTVfd2FfbGlzdCAqd2FsID0gJmk5MTUtPmd0X3dhX2xpc3Q7CisKIAkvKiBX YUNvbnRleHRTd2l0Y2hXaXRoQ29uY3VycmVudFRMQkludmFsaWRhdGU6c2tsLGJ4dCxrYmwsZ2xr LGNmbCAqLwotCUk5MTVfV1JJVEUoR0VOOV9DU0ZFX0NISUNLRU4xX1JDUywKLQkJICAgX01BU0tF RF9CSVRfRU5BQkxFKEdFTjlfUFJFRU1QVF9HUEdQVV9TWU5DX1NXSVRDSF9ESVNBQkxFKSk7CisJ d2FfbWFza2VkX2VuKHdhbCwKKwkJICAgICBHRU45X0NTRkVfQ0hJQ0tFTjFfUkNTLAorCQkgICAg IEdFTjlfUFJFRU1QVF9HUEdQVV9TWU5DX1NXSVRDSF9ESVNBQkxFKTsKKwogCiAJLyogV2FFbmFi bGVMYnNTbGFSZXRyeVRpbWVyRGVjcmVtZW50OnNrbCxieHQsa2JsLGdsayxjZmwgKi8KLQlJOTE1 X1dSSVRFKEJEV19TQ1JBVENIMSwgSTkxNV9SRUFEKEJEV19TQ1JBVENIMSkgfAotCQkgICBHRU45 X0xCU19TTEFfUkVUUllfVElNRVJfREVDUkVNRU5UX0VOQUJMRSk7CisJd2Ffd3JpdGVfb3Iod2Fs LAorCQkgICAgQkRXX1NDUkFUQ0gxLAorCQkgICAgR0VOOV9MQlNfU0xBX1JFVFJZX1RJTUVSX0RF Q1JFTUVOVF9FTkFCTEUpOwogCiAJLyogV2FEaXNhYmxlS2lsbExvZ2ljOmJ4dCxza2wsa2JsICov Ci0JaWYgKCFJU19DT0ZGRUVMQUtFKGRldl9wcml2KSkKLQkJSTkxNV9XUklURShHQU1fRUNPQ0hL LCBJOTE1X1JFQUQoR0FNX0VDT0NISykgfAotCQkJICAgRUNPQ0hLX0RJU19UTEIpOworCWlmICgh SVNfQ09GRkVFTEFLRShpOTE1KSkKKwkJd2Ffd3JpdGVfb3Iod2FsLAorCQkJICAgIEdBTV9FQ09D SEssCisJCQkgICAgRUNPQ0hLX0RJU19UTEIpOwogCi0JaWYgKEhBU19MTEMoZGV2X3ByaXYpKSB7 CisJaWYgKEhBU19MTEMoaTkxNSkpIHsKIAkJLyogV2FDb21wcmVzc2VkUmVzb3VyY2VTYW1wbGVy UGJlTWVkaWFOZXdIYXNoTW9kZTpza2wsa2JsCiAJCSAqCiAJCSAqIE11c3QgbWF0Y2ggRGlzcGxh eSBFbmdpbmUuIFNlZQogCQkgKiBXYUNvbXByZXNzZWRSZXNvdXJjZURpc3BsYXlOZXdIYXNoTW9k ZS4KIAkJICovCi0JCUk5MTVfV1JJVEUoTU1DRF9NSVNDX0NUUkwsCi0JCQkgICBJOTE1X1JFQUQo TU1DRF9NSVNDX0NUUkwpIHwKLQkJCSAgIE1NQ0RfUENMQSB8Ci0JCQkgICBNTUNEX0hPVFNQT1Rf RU4pOworCQl3YV93cml0ZV9vcih3YWwsCisJCQkgICAgTU1DRF9NSVNDX0NUUkwsCisJCQkgICAg TU1DRF9QQ0xBIHwgTU1DRF9IT1RTUE9UX0VOKTsKIAl9CiAKIAkvKiBXYURpc2FibGVIRENJbnZh bGlkYXRpb246c2tsLGJ4dCxrYmwsY2ZsICovCi0JSTkxNV9XUklURShHQU1fRUNPQ0hLLCBJOTE1 X1JFQUQoR0FNX0VDT0NISykgfAotCQkgICBCRFdfRElTQUJMRV9IRENfSU5WQUxJREFUSU9OKTsK Kwl3YV93cml0ZV9vcih3YWwsCisJCSAgICBHQU1fRUNPQ0hLLAorCQkgICAgQkRXX0RJU0FCTEVf SERDX0lOVkFMSURBVElPTik7CiAKIAkvKiBXYVByb2dyYW1MM1NxY1JlZzFEZWZhdWx0Rm9yUGVy ZjpieHQsZ2xrICovCi0JaWYgKElTX0dFTjlfTFAoZGV2X3ByaXYpKSB7Ci0JCXUzMiB2YWwgPSBJ OTE1X1JFQUQoR0VOOF9MM1NRQ1JFRzEpOwotCi0JCXZhbCAmPSB+TDNfUFJJT19DUkVESVRTX01B U0s7Ci0JCXZhbCB8PSBMM19HRU5FUkFMX1BSSU9fQ1JFRElUUyg2MikgfCBMM19ISUdIX1BSSU9f Q1JFRElUUygyKTsKLQkJSTkxNV9XUklURShHRU44X0wzU1FDUkVHMSwgdmFsKTsKLQl9CisJaWYg KElTX0dFTjlfTFAoaTkxNSkpCisJCXdhX3dyaXRlX21hc2tlZF9vcih3YWwsCisJCQkJICAgR0VO OF9MM1NRQ1JFRzEsCisJCQkJICAgTDNfUFJJT19DUkVESVRTX01BU0ssCisJCQkJICAgTDNfR0VO RVJBTF9QUklPX0NSRURJVFMoNjIpIHwKKwkJCQkgICBMM19ISUdIX1BSSU9fQ1JFRElUUygyKSk7 CiAKIAkvKiBXYU9DTENvaGVyZW50TGluZUZsdXNoOnNrbCxieHQsa2JsLGNmbCAqLwotCUk5MTVf V1JJVEUoR0VOOF9MM1NRQ1JFRzQsCi0JCSAgIEk5MTVfUkVBRChHRU44X0wzU1FDUkVHNCkgfCBH RU44X0xRU0NfRkxVU0hfQ09IRVJFTlRfTElORVMpOworCXdhX3dyaXRlX29yKHdhbCwKKwkJICAg IEdFTjhfTDNTUUNSRUc0LAorCQkgICAgR0VOOF9MUVNDX0ZMVVNIX0NPSEVSRU5UX0xJTkVTKTsK IAogCS8qIFdhRW5hYmxlUHJlZW1wdGlvbkdyYW51bGFyaXR5Q29udHJvbEJ5VU1EOnNrbCxieHQs a2JsLGNmbCxbY25sXSAqLwotCUk5MTVfV1JJVEUoR0VON19GRl9TTElDRV9DU19DSElDS0VOMSwK LQkJICAgX01BU0tFRF9CSVRfRU5BQkxFKEdFTjlfRkZTQ19QRVJDVFhfUFJFRU1QVF9DVFJMKSk7 CisJd2FfbWFza2VkX2VuKHdhbCwKKwkJICAgICBHRU43X0ZGX1NMSUNFX0NTX0NISUNLRU4xLAor CQkgICAgIEdFTjlfRkZTQ19QRVJDVFhfUFJFRU1QVF9DVFJMKTsKIH0KIAotc3RhdGljIHZvaWQg c2tsX2d0X3dvcmthcm91bmRzX2FwcGx5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikKK3N0YXRpYyB2b2lkIHNrbF9ndF93b3JrYXJvdW5kc19pbml0KHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1KQogewotCWdlbjlfZ3Rfd29ya2Fyb3VuZHNfYXBwbHkoZGV2X3ByaXYpOwor CXN0cnVjdCBpOTE1X3dhX2xpc3QgKndhbCA9ICZpOTE1LT5ndF93YV9saXN0OworCisJZ2VuOV9n dF93b3JrYXJvdW5kc19pbml0KGk5MTUpOwogCiAJLyogV2FFbmFibGVHYXBzVHN2Q3JlZGl0Rml4 OnNrbCAqLwotCUk5MTVfV1JJVEUoR0VOOF9HQVJCQ05UTCwKLQkJICAgSTkxNV9SRUFEKEdFTjhf R0FSQkNOVEwpIHwgR0VOOV9HQVBTX1RTVl9DUkVESVRfRElTQUJMRSk7CisJd2Ffd3JpdGVfb3Io d2FsLAorCQkgICAgR0VOOF9HQVJCQ05UTCwKKwkJICAgIEdFTjlfR0FQU19UU1ZfQ1JFRElUX0RJ U0FCTEUpOwogCiAJLyogV2FEaXNhYmxlR2Fmc1VuaXRDbGtHYXRpbmc6c2tsICovCi0JSTkxNV9X UklURShHRU43X1VDR0NUTDQsCi0JCSAgIEk5MTVfUkVBRChHRU43X1VDR0NUTDQpIHwgR0VOOF9F VV9HQVVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFKTsKKwl3YV93cml0ZV9vcih3YWwsCisJCSAgICBH RU43X1VDR0NUTDQsCisJCSAgICBHRU44X0VVX0dBVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUpOwog CiAJLyogV2FJblBsYWNlRGVjb21wcmVzc2lvbkhhbmc6c2tsICovCi0JaWYgKElTX1NLTF9SRVZJ RChkZXZfcHJpdiwgU0tMX1JFVklEX0gwLCBSRVZJRF9GT1JFVkVSKSkKLQkJSTkxNV9XUklURShH RU45X0dBTVRfRUNPX1JFR19SV19JQSwKLQkJCSAgIEk5MTVfUkVBRChHRU45X0dBTVRfRUNPX1JF R19SV19JQSkgfAotCQkJICAgR0FNVF9FQ09fRU5BQkxFX0lOX1BMQUNFX0RFQ09NUFJFU1MpOwor CWlmIChJU19TS0xfUkVWSUQoaTkxNSwgU0tMX1JFVklEX0gwLCBSRVZJRF9GT1JFVkVSKSkKKwkJ d2Ffd3JpdGVfb3Iod2FsLAorCQkJICAgIEdFTjlfR0FNVF9FQ09fUkVHX1JXX0lBLAorCQkJICAg IEdBTVRfRUNPX0VOQUJMRV9JTl9QTEFDRV9ERUNPTVBSRVNTKTsKIH0KIAotc3RhdGljIHZvaWQg Ynh0X2d0X3dvcmthcm91bmRzX2FwcGx5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikKK3N0YXRpYyB2b2lkIGJ4dF9ndF93b3JrYXJvdW5kc19pbml0KHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1KQogewotCWdlbjlfZ3Rfd29ya2Fyb3VuZHNfYXBwbHkoZGV2X3ByaXYpOwor CXN0cnVjdCBpOTE1X3dhX2xpc3QgKndhbCA9ICZpOTE1LT5ndF93YV9saXN0OworCisJZ2VuOV9n dF93b3JrYXJvdW5kc19pbml0KGk5MTUpOwogCiAJLyogV2FEaXNhYmxlUG9vbGVkRXVMb2FkQmFs YW5jaW5nRml4OmJ4dCAqLwotCUk5MTVfV1JJVEUoRkZfU0xJQ0VfQ1NfQ0hJQ0tFTjIsCi0JCSAg IF9NQVNLRURfQklUX0VOQUJMRShHRU45X1BPT0xFRF9FVV9MT0FEX0JBTEFOQ0lOR19GSVhfRElT QUJMRSkpOworCXdhX21hc2tlZF9lbih3YWwsCisJCSAgICAgRkZfU0xJQ0VfQ1NfQ0hJQ0tFTjIs CisJCSAgICAgR0VOOV9QT09MRURfRVVfTE9BRF9CQUxBTkNJTkdfRklYX0RJU0FCTEUpOwogCiAJ LyogV2FJblBsYWNlRGVjb21wcmVzc2lvbkhhbmc6Ynh0ICovCi0JSTkxNV9XUklURShHRU45X0dB TVRfRUNPX1JFR19SV19JQSwKLQkJICAgSTkxNV9SRUFEKEdFTjlfR0FNVF9FQ09fUkVHX1JXX0lB KSB8Ci0JCSAgIEdBTVRfRUNPX0VOQUJMRV9JTl9QTEFDRV9ERUNPTVBSRVNTKTsKKwl3YV93cml0 ZV9vcih3YWwsCisJCSAgICBHRU45X0dBTVRfRUNPX1JFR19SV19JQSwKKwkJICAgIEdBTVRfRUNP X0VOQUJMRV9JTl9QTEFDRV9ERUNPTVBSRVNTKTsKIH0KIAotc3RhdGljIHZvaWQga2JsX2d0X3dv cmthcm91bmRzX2FwcGx5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3N0YXRp YyB2b2lkIGtibF9ndF93b3JrYXJvdW5kc19pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1KQogewotCWdlbjlfZ3Rfd29ya2Fyb3VuZHNfYXBwbHkoZGV2X3ByaXYpOworCXN0cnVjdCBp OTE1X3dhX2xpc3QgKndhbCA9ICZpOTE1LT5ndF93YV9saXN0OworCisJZ2VuOV9ndF93b3JrYXJv dW5kc19pbml0KGk5MTUpOwogCiAJLyogV2FFbmFibGVHYXBzVHN2Q3JlZGl0Rml4OmtibCAqLwot CUk5MTVfV1JJVEUoR0VOOF9HQVJCQ05UTCwKLQkJICAgSTkxNV9SRUFEKEdFTjhfR0FSQkNOVEwp IHwgR0VOOV9HQVBTX1RTVl9DUkVESVRfRElTQUJMRSk7CisJd2Ffd3JpdGVfb3Iod2FsLAorCQkg ICAgR0VOOF9HQVJCQ05UTCwKKwkJICAgIEdFTjlfR0FQU19UU1ZfQ1JFRElUX0RJU0FCTEUpOwog CiAJLyogV2FEaXNhYmxlRHluYW1pY0NyZWRpdFNoYXJpbmc6a2JsICovCi0JaWYgKElTX0tCTF9S RVZJRChkZXZfcHJpdiwgMCwgS0JMX1JFVklEX0IwKSkKLQkJSTkxNV9XUklURShHQU1UX0NIS05f QklUX1JFRywKLQkJCSAgIEk5MTVfUkVBRChHQU1UX0NIS05fQklUX1JFRykgfAotCQkJICAgR0FN VF9DSEtOX0RJU0FCTEVfRFlOQU1JQ19DUkVESVRfU0hBUklORyk7CisJaWYgKElTX0tCTF9SRVZJ RChpOTE1LCAwLCBLQkxfUkVWSURfQjApKQorCQl3YV93cml0ZV9vcih3YWwsCisJCQkgICAgR0FN VF9DSEtOX0JJVF9SRUcsCisJCQkgICAgR0FNVF9DSEtOX0RJU0FCTEVfRFlOQU1JQ19DUkVESVRf U0hBUklORyk7CiAKIAkvKiBXYURpc2FibGVHYWZzVW5pdENsa0dhdGluZzprYmwgKi8KLQlJOTE1 X1dSSVRFKEdFTjdfVUNHQ1RMNCwKLQkJICAgSTkxNV9SRUFEKEdFTjdfVUNHQ1RMNCkgfCBHRU44 X0VVX0dBVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUpOworCXdhX3dyaXRlX29yKHdhbCwKKwkJICAg IEdFTjdfVUNHQ1RMNCwKKwkJICAgIEdFTjhfRVVfR0FVTklUX0NMT0NLX0dBVEVfRElTQUJMRSk7 CiAKIAkvKiBXYUluUGxhY2VEZWNvbXByZXNzaW9uSGFuZzprYmwgKi8KLQlJOTE1X1dSSVRFKEdF TjlfR0FNVF9FQ09fUkVHX1JXX0lBLAotCQkgICBJOTE1X1JFQUQoR0VOOV9HQU1UX0VDT19SRUdf UldfSUEpIHwKLQkJICAgR0FNVF9FQ09fRU5BQkxFX0lOX1BMQUNFX0RFQ09NUFJFU1MpOworCXdh X3dyaXRlX29yKHdhbCwKKwkJICAgIEdFTjlfR0FNVF9FQ09fUkVHX1JXX0lBLAorCQkgICAgR0FN VF9FQ09fRU5BQkxFX0lOX1BMQUNFX0RFQ09NUFJFU1MpOwogCiAJLyogV2FLQkxWRUNTU2VtYXBo b3JlV2FpdFBvbGw6a2JsICovCi0JaWYgKElTX0tCTF9SRVZJRChkZXZfcHJpdiwgS0JMX1JFVklE X0EwLCBLQkxfUkVWSURfRTApKSB7CisJaWYgKElTX0tCTF9SRVZJRChpOTE1LCBLQkxfUkVWSURf QTAsIEtCTF9SRVZJRF9FMCkpIHsKIAkJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwog CQl1bnNpZ25lZCBpbnQgdG1wOwogCi0JCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGRldl9wcml2 LCB0bXApIHsKKwkJZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgaTkxNSwgdG1wKSB7CiAJCQlpZiAo ZW5naW5lLT5pZCA9PSBSQ1MpCiAJCQkJY29udGludWU7CiAKLQkJCUk5MTVfV1JJVEUoUklOR19T RU1BX1dBSVRfUE9MTChlbmdpbmUtPm1taW9fYmFzZSksIDEpOworCQkJd2Ffd3JpdGUod2FsLAor CQkJCSBSSU5HX1NFTUFfV0FJVF9QT0xMKGVuZ2luZS0+bW1pb19iYXNlKSwKKwkJCQkgMSk7CiAJ CX0KIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGdsa19ndF93b3JrYXJvdW5kc19hcHBseShzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCitzdGF0aWMgdm9pZCBnbGtfZ3Rfd29ya2Fyb3Vu ZHNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKIHsKLQlnZW45X2d0X3dvcmth cm91bmRzX2FwcGx5KGRldl9wcml2KTsKKwlnZW45X2d0X3dvcmthcm91bmRzX2luaXQoaTkxNSk7 CiB9CiAKLXN0YXRpYyB2b2lkIGNmbF9ndF93b3JrYXJvdW5kc19hcHBseShzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCitzdGF0aWMgdm9pZCBjZmxfZ3Rfd29ya2Fyb3VuZHNfaW5p dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKIHsKLQlnZW45X2d0X3dvcmthcm91bmRz X2FwcGx5KGRldl9wcml2KTsKKwlzdHJ1Y3QgaTkxNV93YV9saXN0ICp3YWwgPSAmaTkxNS0+Z3Rf d2FfbGlzdDsKKworCWdlbjlfZ3Rfd29ya2Fyb3VuZHNfaW5pdChpOTE1KTsKIAogCS8qIFdhRW5h YmxlR2Fwc1RzdkNyZWRpdEZpeDpjZmwgKi8KLQlJOTE1X1dSSVRFKEdFTjhfR0FSQkNOVEwsCi0J CSAgIEk5MTVfUkVBRChHRU44X0dBUkJDTlRMKSB8IEdFTjlfR0FQU19UU1ZfQ1JFRElUX0RJU0FC TEUpOworCXdhX3dyaXRlX29yKHdhbCwKKwkJICAgIEdFTjhfR0FSQkNOVEwsCisJCSAgICBHRU45 X0dBUFNfVFNWX0NSRURJVF9ESVNBQkxFKTsKIAogCS8qIFdhRGlzYWJsZUdhZnNVbml0Q2xrR2F0 aW5nOmNmbCAqLwotCUk5MTVfV1JJVEUoR0VON19VQ0dDVEw0LAotCQkgICBJOTE1X1JFQUQoR0VO N19VQ0dDVEw0KSB8IEdFTjhfRVVfR0FVTklUX0NMT0NLX0dBVEVfRElTQUJMRSk7CisJd2Ffd3Jp dGVfb3Iod2FsLAorCQkgICAgR0VON19VQ0dDVEw0LAorCQkgICAgR0VOOF9FVV9HQVVOSVRfQ0xP Q0tfR0FURV9ESVNBQkxFKTsKIAogCS8qIFdhSW5QbGFjZURlY29tcHJlc3Npb25IYW5nOmNmbCAq LwotCUk5MTVfV1JJVEUoR0VOOV9HQU1UX0VDT19SRUdfUldfSUEsCi0JCSAgIEk5MTVfUkVBRChH RU45X0dBTVRfRUNPX1JFR19SV19JQSkgfAotCQkgICBHQU1UX0VDT19FTkFCTEVfSU5fUExBQ0Vf REVDT01QUkVTUyk7CisJd2Ffd3JpdGVfb3Iod2FsLAorCQkgICAgR0VOOV9HQU1UX0VDT19SRUdf UldfSUEsCisJCSAgICBHQU1UX0VDT19FTkFCTEVfSU5fUExBQ0VfREVDT01QUkVTUyk7CiB9CiAK IHN0YXRpYyB2b2lkIHdhX2luaXRfbWNyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikKIHsKIAljb25zdCBzdHJ1Y3Qgc3NldV9kZXZfaW5mbyAqc3NldSA9ICYoSU5URUxfSU5GTyhk ZXZfcHJpdiktPnNzZXUpOwotCXUzMiBtY3I7CisJc3RydWN0IGk5MTVfd2FfbGlzdCAqd2FsID0g JmRldl9wcml2LT5ndF93YV9saXN0OwogCXUzMiBtY3Jfc2xpY2Vfc3Vic2xpY2VfbWFzazsKIAog CS8qCkBAIC03NjUsOCArODU3LDYgQEAgc3RhdGljIHZvaWQgd2FfaW5pdF9tY3Ioc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCQlXQVJOX09OKChlbmFibGVkX21hc2sgJiBkaXNh YmxlZF9tYXNrKSAhPSBlbmFibGVkX21hc2spOwogCX0KIAotCW1jciA9IEk5MTVfUkVBRChHRU44 X01DUl9TRUxFQ1RPUik7Ci0KIAlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMSkKIAkJbWNy X3NsaWNlX3N1YnNsaWNlX21hc2sgPSBHRU4xMV9NQ1JfU0xJQ0VfTUFTSyB8CiAJCQkJCSAgR0VO MTFfTUNSX1NVQlNMSUNFX01BU0s7CkBAIC03ODQsMTU2ICs4NzQsMjI1IEBAIHN0YXRpYyB2b2lk IHdhX2luaXRfbWNyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAkgKiBvY2Nh c2lvbnMsIHN1Y2ggYXMgSU5TVERPTkUsIHdoZXJlIHRoaXMgdmFsdWUgaXMgZGVwZW5kZW50CiAJ ICogb24gcy9zcyBjb21ibywgdGhlIHJlYWQgc2hvdWxkIGJlIGRvbmUgd2l0aCByZWFkX3N1YnNs aWNlX3JlZy4KIAkgKi8KLQltY3IgJj0gfm1jcl9zbGljZV9zdWJzbGljZV9tYXNrOwotCW1jciB8 PSBpbnRlbF9jYWxjdWxhdGVfbWNyX3Nfc3Nfc2VsZWN0KGRldl9wcml2KTsKLQlJOTE1X1dSSVRF KEdFTjhfTUNSX1NFTEVDVE9SLCBtY3IpOworCXdhX3dyaXRlX21hc2tlZF9vcih3YWwsCisJCQkg ICBHRU44X01DUl9TRUxFQ1RPUiwKKwkJCSAgIG1jcl9zbGljZV9zdWJzbGljZV9tYXNrLAorCQkJ ICAgaW50ZWxfY2FsY3VsYXRlX21jcl9zX3NzX3NlbGVjdChkZXZfcHJpdikpOwogfQogCi1zdGF0 aWMgdm9pZCBjbmxfZ3Rfd29ya2Fyb3VuZHNfYXBwbHkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KQorc3RhdGljIHZvaWQgY25sX2d0X3dvcmthcm91bmRzX2luaXQoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUpCiB7Ci0Jd2FfaW5pdF9tY3IoZGV2X3ByaXYpOworCXN0cnVj dCBpOTE1X3dhX2xpc3QgKndhbCA9ICZpOTE1LT5ndF93YV9saXN0OworCisJd2FfaW5pdF9tY3Io aTkxNSk7CiAKIAkvKiBXYURpc2FibGVJMm1DeWNsZU9uV1JQb3J0OmNubCAocHJlLXByb2QpICov Ci0JaWYgKElTX0NOTF9SRVZJRChkZXZfcHJpdiwgQ05MX1JFVklEX0IwLCBDTkxfUkVWSURfQjAp KQotCQlJOTE1X1dSSVRFKEdBTVRfQ0hLTl9CSVRfUkVHLAotCQkJICAgSTkxNV9SRUFEKEdBTVRf Q0hLTl9CSVRfUkVHKSB8Ci0JCQkgICBHQU1UX0NIS05fRElTQUJMRV9JMk1fQ1lDTEVfT05fV1Jf UE9SVCk7CisJaWYgKElTX0NOTF9SRVZJRChpOTE1LCBDTkxfUkVWSURfQjAsIENOTF9SRVZJRF9C MCkpCisJCXdhX3dyaXRlX29yKHdhbCwKKwkJCSAgICBHQU1UX0NIS05fQklUX1JFRywKKwkJCSAg ICBHQU1UX0NIS05fRElTQUJMRV9JMk1fQ1lDTEVfT05fV1JfUE9SVCk7CiAKIAkvKiBXYUluUGxh Y2VEZWNvbXByZXNzaW9uSGFuZzpjbmwgKi8KLQlJOTE1X1dSSVRFKEdFTjlfR0FNVF9FQ09fUkVH X1JXX0lBLAotCQkgICBJOTE1X1JFQUQoR0VOOV9HQU1UX0VDT19SRUdfUldfSUEpIHwKLQkJICAg R0FNVF9FQ09fRU5BQkxFX0lOX1BMQUNFX0RFQ09NUFJFU1MpOworCXdhX3dyaXRlX29yKHdhbCwK KwkJICAgIEdFTjlfR0FNVF9FQ09fUkVHX1JXX0lBLAorCQkgICAgR0FNVF9FQ09fRU5BQkxFX0lO X1BMQUNFX0RFQ09NUFJFU1MpOwogCiAJLyogV2FFbmFibGVQcmVlbXB0aW9uR3JhbnVsYXJpdHlD b250cm9sQnlVTUQ6Y25sICovCi0JSTkxNV9XUklURShHRU43X0ZGX1NMSUNFX0NTX0NISUNLRU4x LAotCQkgICBfTUFTS0VEX0JJVF9FTkFCTEUoR0VOOV9GRlNDX1BFUkNUWF9QUkVFTVBUX0NUUkwp KTsKKwl3YV9tYXNrZWRfZW4od2FsLAorCQkgICAgIEdFTjdfRkZfU0xJQ0VfQ1NfQ0hJQ0tFTjEs CisJCSAgICAgR0VOOV9GRlNDX1BFUkNUWF9QUkVFTVBUX0NUUkwpOwogfQogCi1zdGF0aWMgdm9p ZCBpY2xfZ3Rfd29ya2Fyb3VuZHNfYXBwbHkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KQorc3RhdGljIHZvaWQgaWNsX2d0X3dvcmthcm91bmRzX2luaXQoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUpCiB7Ci0Jd2FfaW5pdF9tY3IoZGV2X3ByaXYpOworCXN0cnVjdCBpOTE1 X3dhX2xpc3QgKndhbCA9ICZpOTE1LT5ndF93YV9saXN0OworCisJd2FfaW5pdF9tY3IoaTkxNSk7 CiAKIAkvKiBUaGlzIGlzIG5vdCBhbiBXYS4gRW5hYmxlIGZvciBiZXR0ZXIgaW1hZ2UgcXVhbGl0 eSAqLwotCUk5MTVfV1JJVEUoXzNEX0NISUNLRU4zLAotCQkgICBfTUFTS0VEX0JJVF9FTkFCTEUo XzNEX0NISUNLRU4zX0FBX0xJTkVfUVVBTElUWV9GSVhfRU5BQkxFKSk7CisJd2FfbWFza2VkX2Vu KHdhbCwKKwkJICAgIF8zRF9DSElDS0VOMywKKwkJICAgIF8zRF9DSElDS0VOM19BQV9MSU5FX1FV QUxJVFlfRklYX0VOQUJMRSk7CiAKIAkvKiBXYUluUGxhY2VEZWNvbXByZXNzaW9uSGFuZzppY2wg Ki8KLQlJOTE1X1dSSVRFKEdFTjlfR0FNVF9FQ09fUkVHX1JXX0lBLAotCQkgICBJOTE1X1JFQUQo R0VOOV9HQU1UX0VDT19SRUdfUldfSUEpIHwKLQkJICAgR0FNVF9FQ09fRU5BQkxFX0lOX1BMQUNF X0RFQ09NUFJFU1MpOworCXdhX3dyaXRlX29yKHdhbCwKKwkJICAgIEdFTjlfR0FNVF9FQ09fUkVH X1JXX0lBLAorCQkgICAgR0FNVF9FQ09fRU5BQkxFX0lOX1BMQUNFX0RFQ09NUFJFU1MpOwogCiAJ LyogV2FQaXBlbGluZUZsdXNoQ29oZXJlbnRMaW5lczppY2wgKi8KLQlJOTE1X1dSSVRFKEdFTjhf TDNTUUNSRUc0LAotCQkgICBJOTE1X1JFQUQoR0VOOF9MM1NRQ1JFRzQpIHwKLQkJICAgR0VOOF9M UVNDX0ZMVVNIX0NPSEVSRU5UX0xJTkVTKTsKKwl3YV93cml0ZV9vcih3YWwsCisJCSAgICBHRU44 X0wzU1FDUkVHNCwKKwkJICAgIEdFTjhfTFFTQ19GTFVTSF9DT0hFUkVOVF9MSU5FUyk7CiAKIAkv KiBXYV8xNDA1NTQzNjIyOmljbAogCSAqIEZvcm1lcmx5IGtub3duIGFzIFdhR0FQWlByaW9yaXR5 U2NoZW1lCiAJICovCi0JSTkxNV9XUklURShHRU44X0dBUkJDTlRMLAotCQkgICBJOTE1X1JFQUQo R0VOOF9HQVJCQ05UTCkgfAotCQkgICBHRU4xMV9BUkJJVFJBVElPTl9QUklPX09SREVSX01BU0sp OworCXdhX3dyaXRlX29yKHdhbCwKKwkJICAgIEdFTjhfR0FSQkNOVEwsCisJCSAgICBHRU4xMV9B UkJJVFJBVElPTl9QUklPX09SREVSX01BU0spOwogCiAJLyogV2FfMTYwNDIyMzY2NDppY2wKIAkg KiBGb3JtZXJseSBrbm93biBhcyBXYUwzQmFua0FkZHJlc3NIYXNoaW5nCiAJICovCi0JSTkxNV9X UklURShHRU44X0dBUkJDTlRMLAotCQkgICAoSTkxNV9SRUFEKEdFTjhfR0FSQkNOVEwpICYgfkdF TjExX0hBU0hfQ1RSTF9FWENMX01BU0spIHwKLQkJICAgR0VOMTFfSEFTSF9DVFJMX0VYQ0xfQklU MCk7Ci0JSTkxNV9XUklURShHRU4xMV9HTEJMSU5WTCwKLQkJICAgKEk5MTVfUkVBRChHRU4xMV9H TEJMSU5WTCkgJiB+R0VOMTFfQkFOS19IQVNIX0FERFJfRVhDTF9NQVNLKSB8Ci0JCSAgIEdFTjEx X0JBTktfSEFTSF9BRERSX0VYQ0xfQklUMCk7CisJd2Ffd3JpdGVfbWFza2VkX29yKHdhbCwKKwkJ CSAgIEdFTjhfR0FSQkNOVEwsCisJCQkgICBHRU4xMV9IQVNIX0NUUkxfRVhDTF9NQVNLLAorCQkJ ICAgR0VOMTFfSEFTSF9DVFJMX0VYQ0xfQklUMCk7CisJd2Ffd3JpdGVfbWFza2VkX29yKHdhbCwK KwkJCSAgIEdFTjExX0dMQkxJTlZMLAorCQkJICAgR0VOMTFfQkFOS19IQVNIX0FERFJfRVhDTF9N QVNLLAorCQkJICAgR0VOMTFfQkFOS19IQVNIX0FERFJfRVhDTF9CSVQwKTsKIAogCS8qIFdhTW9k aWZ5R2FtVGxiUGFydGl0aW9uaW5nOmljbCAqLwotCUk5MTVfV1JJVEUoR0VOMTFfR0FDQl9QRVJG X0NUUkwsCi0JCSAgIChJOTE1X1JFQUQoR0VOMTFfR0FDQl9QRVJGX0NUUkwpICYgfkdFTjExX0hB U0hfQ1RSTF9NQVNLKSB8Ci0JCSAgIEdFTjExX0hBU0hfQ1RSTF9CSVQwIHwgR0VOMTFfSEFTSF9D VFJMX0JJVDQpOworCXdhX3dyaXRlX21hc2tlZF9vcih3YWwsCisJCQkgICBHRU4xMV9HQUNCX1BF UkZfQ1RSTCwKKwkJCSAgIEdFTjExX0hBU0hfQ1RSTF9NQVNLLAorCQkJICAgR0VOMTFfSEFTSF9D VFJMX0JJVDAgfCBHRU4xMV9IQVNIX0NUUkxfQklUNCk7CiAKIAkvKiBXYV8xNDA1NzMzMjE2Omlj bAogCSAqIEZvcm1lcmx5IGtub3duIGFzIFdhRGlzYWJsZUNsZWFuRXZpY3RzCiAJICovCi0JSTkx NV9XUklURShHRU44X0wzU1FDUkVHNCwKLQkJICAgSTkxNV9SRUFEKEdFTjhfTDNTUUNSRUc0KSB8 Ci0JCSAgIEdFTjExX0xRU0NfQ0xFQU5fRVZJQ1RfRElTQUJMRSk7CisJd2Ffd3JpdGVfb3Iod2Fs LAorCQkgICAgR0VOOF9MM1NRQ1JFRzQsCisJCSAgICBHRU4xMV9MUVNDX0NMRUFOX0VWSUNUX0RJ U0FCTEUpOwogCiAJLyogV2FfMTQwNTc2NjEwNzppY2wKIAkgKiBGb3JtZXJseSBrbm93biBhcyBX YUNMMlNGSGFsZk1heEFsbG9jCiAJICovCi0JSTkxNV9XUklURShHRU4xMV9MU05fVU5TTENWQywK LQkJICAgSTkxNV9SRUFEKEdFTjExX0xTTl9VTlNMQ1ZDKSB8Ci0JCSAgIEdFTjExX0xTTl9VTlNM Q1ZDX0dBRlNfSEFMRl9TRl9NQVhBTExPQyB8Ci0JCSAgIEdFTjExX0xTTl9VTlNMQ1ZDX0dBRlNf SEFMRl9DTDJfTUFYQUxMT0MpOworCXdhX3dyaXRlX29yKHdhbCwKKwkJICAgIEdFTjExX0xTTl9V TlNMQ1ZDLAorCQkgICAgR0VOMTFfTFNOX1VOU0xDVkNfR0FGU19IQUxGX1NGX01BWEFMTE9DIHwK KwkJICAgIEdFTjExX0xTTl9VTlNMQ1ZDX0dBRlNfSEFMRl9DTDJfTUFYQUxMT0MpOwogCiAJLyog V2FfMjIwMTY2MTU0OmljbAogCSAqIEZvcm1lcmx5IGtub3duIGFzIFdhRGlzQ3R4UmVsb2FkCiAJ ICovCi0JSTkxNV9XUklURShHRU44X0dBTVdfRUNPX0RFVl9SV19JQSwKLQkJICAgSTkxNV9SRUFE KEdFTjhfR0FNV19FQ09fREVWX1JXX0lBKSB8Ci0JCSAgIEdBTVdfRUNPX0RFVl9DVFhfUkVMT0FE X0RJU0FCTEUpOworCXdhX3dyaXRlX29yKHdhbCwKKwkJICAgIEdFTjhfR0FNV19FQ09fREVWX1JX X0lBLAorCQkgICAgR0FNV19FQ09fREVWX0NUWF9SRUxPQURfRElTQUJMRSk7CiAKIAkvKiBXYV8x NDA1Nzc5MDA0OmljbCAocHJlLXByb2QpICovCi0JaWYgKElTX0lDTF9SRVZJRChkZXZfcHJpdiwg SUNMX1JFVklEX0EwLCBJQ0xfUkVWSURfQTApKQotCQlJOTE1X1dSSVRFKFNMSUNFX1VOSVRfTEVW RUxfQ0xLR0FURSwKLQkJCSAgIEk5MTVfUkVBRChTTElDRV9VTklUX0xFVkVMX0NMS0dBVEUpIHwK LQkJCSAgIE1TQ1VOSVRfQ0xLR0FURV9ESVMpOworCWlmIChJU19JQ0xfUkVWSUQoaTkxNSwgSUNM X1JFVklEX0EwLCBJQ0xfUkVWSURfQTApKQorCQl3YV93cml0ZV9vcih3YWwsCisJCQkgICAgU0xJ Q0VfVU5JVF9MRVZFTF9DTEtHQVRFLAorCQkJICAgIE1TQ1VOSVRfQ0xLR0FURV9ESVMpOwogCiAJ LyogV2FfMTQwNjY4MDE1OTppY2wgKi8KLQlJOTE1X1dSSVRFKFNVQlNMSUNFX1VOSVRfTEVWRUxf Q0xLR0FURSwKLQkJICAgSTkxNV9SRUFEKFNVQlNMSUNFX1VOSVRfTEVWRUxfQ0xLR0FURSkgfAot CQkgICBHV1VOSVRfQ0xLR0FURV9ESVMpOworCXdhX3dyaXRlX29yKHdhbCwKKwkJICAgIFNVQlNM SUNFX1VOSVRfTEVWRUxfQ0xLR0FURSwKKwkJICAgIEdXVU5JVF9DTEtHQVRFX0RJUyk7CiAKIAkv KiBXYV8xNDA2ODM4NjU5OmljbCAocHJlLXByb2QpICovCi0JaWYgKElTX0lDTF9SRVZJRChkZXZf cHJpdiwgSUNMX1JFVklEX0EwLCBJQ0xfUkVWSURfQjApKQotCQlJOTE1X1dSSVRFKElORl9VTklU X0xFVkVMX0NMS0dBVEUsCi0JCQkgICBJOTE1X1JFQUQoSU5GX1VOSVRfTEVWRUxfQ0xLR0FURSkg fAotCQkJICAgQ0dQU0ZfQ0xLR0FURV9ESVMpOworCWlmIChJU19JQ0xfUkVWSUQoaTkxNSwgSUNM X1JFVklEX0EwLCBJQ0xfUkVWSURfQjApKQorCQl3YV93cml0ZV9vcih3YWwsCisJCQkgICAgSU5G X1VOSVRfTEVWRUxfQ0xLR0FURSwKKwkJCSAgICBDR1BTRl9DTEtHQVRFX0RJUyk7CiAKIAkvKiBX YUZvcndhcmRQcm9ncmVzc1NvZnRSZXNldDppY2wgKi8KLQlJOTE1X1dSSVRFKEdFTjEwX1NDUkFU Q0hfTE5DRjIsCi0JCSAgIEk5MTVfUkVBRChHRU4xMF9TQ1JBVENIX0xOQ0YyKSB8Ci0JCSAgIFBN RkxVU0hET05FX0xOSUNSU0RST1AgfAotCQkgICBQTUZMVVNIX0dBUEwzVU5CTE9DSyB8Ci0JCSAg IFBNRkxVU0hET05FX0xORUJMSyk7CisJd2Ffd3JpdGVfb3Iod2FsLAorCQkgICAgR0VOMTBfU0NS QVRDSF9MTkNGMiwKKwkJICAgIFBNRkxVU0hET05FX0xOSUNSU0RST1AgfAorCQkgICAgUE1GTFVT SF9HQVBMM1VOQkxPQ0sgfAorCQkgICAgUE1GTFVTSERPTkVfTE5FQkxLKTsKIAogCS8qIFdhXzE0 MDY0NjMwOTk6aWNsCiAJICogRm9ybWVybHkga25vd24gYXMgV2FHYW1UbGJQZW5kRXJyb3IKIAkg Ki8KLQlJOTE1X1dSSVRFKEdBTVRfQ0hLTl9CSVRfUkVHLAotCQkgICBJOTE1X1JFQUQoR0FNVF9D SEtOX0JJVF9SRUcpIHwKLQkJICAgR0FNVF9DSEtOX0RJU0FCTEVfTDNfQ09IX1BJUEUpOworCXdh X3dyaXRlX29yKHdhbCwKKwkJICAgIEdBTVRfQ0hLTl9CSVRfUkVHLAorCQkgICAgR0FNVF9DSEtO X0RJU0FCTEVfTDNfQ09IX1BJUEUpOwogCiAJLyogV2FfMTQwNjYwOTI1NTppY2wgKHByZS1wcm9k KSAqLwotCWlmIChJU19JQ0xfUkVWSUQoZGV2X3ByaXYsIElDTF9SRVZJRF9BMCwgSUNMX1JFVklE X0IwKSkKLQkJSTkxNV9XUklURShHRU43X1NBUkNIS01ELAotCQkJICAgSTkxNV9SRUFEKEdFTjdf U0FSQ0hLTUQpIHwKLQkJCSAgIEdFTjdfRElTQUJMRV9ERU1BTkRfUFJFRkVUQ0ggfAotCQkJICAg R0VON19ESVNBQkxFX1NBTVBMRVJfUFJFRkVUQ0gpOworCWlmIChJU19JQ0xfUkVWSUQoaTkxNSwg SUNMX1JFVklEX0EwLCBJQ0xfUkVWSURfQjApKQorCQl3YV93cml0ZV9vcih3YWwsCisJCQkgICAg R0VON19TQVJDSEtNRCwKKwkJCSAgICBHRU43X0RJU0FCTEVfREVNQU5EX1BSRUZFVENIIHwKKwkJ CSAgICBHRU43X0RJU0FCTEVfU0FNUExFUl9QUkVGRVRDSCk7CiB9CiAKLXZvaWQgaW50ZWxfZ3Rf d29ya2Fyb3VuZHNfYXBwbHkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQordm9p ZCBpbnRlbF9ndF9pbml0X3dvcmthcm91bmRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1 KQogewotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgOCkKKwlzdHJ1Y3QgaTkxNV93YV9saXN0 ICp3YWwgPSAmaTkxNS0+Z3Rfd2FfbGlzdDsKKworCXdhX2luaXRfc3RhcnQod2FsLCAiR1QiKTsK KworCWlmIChJTlRFTF9HRU4oaTkxNSkgPCA4KQogCQlyZXR1cm47Ci0JZWxzZSBpZiAoSVNfQlJP QURXRUxMKGRldl9wcml2KSkKLQkJYmR3X2d0X3dvcmthcm91bmRzX2FwcGx5KGRldl9wcml2KTsK LQllbHNlIGlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSkKLQkJY2h2X2d0X3dvcmthcm91bmRz X2FwcGx5KGRldl9wcml2KTsKLQllbHNlIGlmIChJU19TS1lMQUtFKGRldl9wcml2KSkKLQkJc2ts X2d0X3dvcmthcm91bmRzX2FwcGx5KGRldl9wcml2KTsKLQllbHNlIGlmIChJU19CUk9YVE9OKGRl dl9wcml2KSkKLQkJYnh0X2d0X3dvcmthcm91bmRzX2FwcGx5KGRldl9wcml2KTsKLQllbHNlIGlm IChJU19LQUJZTEFLRShkZXZfcHJpdikpCi0JCWtibF9ndF93b3JrYXJvdW5kc19hcHBseShkZXZf cHJpdik7Ci0JZWxzZSBpZiAoSVNfR0VNSU5JTEFLRShkZXZfcHJpdikpCi0JCWdsa19ndF93b3Jr YXJvdW5kc19hcHBseShkZXZfcHJpdik7Ci0JZWxzZSBpZiAoSVNfQ09GRkVFTEFLRShkZXZfcHJp dikpCi0JCWNmbF9ndF93b3JrYXJvdW5kc19hcHBseShkZXZfcHJpdik7Ci0JZWxzZSBpZiAoSVNf Q0FOTk9OTEFLRShkZXZfcHJpdikpCi0JCWNubF9ndF93b3JrYXJvdW5kc19hcHBseShkZXZfcHJp dik7Ci0JZWxzZSBpZiAoSVNfSUNFTEFLRShkZXZfcHJpdikpCi0JCWljbF9ndF93b3JrYXJvdW5k c19hcHBseShkZXZfcHJpdik7CisJZWxzZSBpZiAoSVNfQlJPQURXRUxMKGk5MTUpKQorCQlyZXR1 cm47CisJZWxzZSBpZiAoSVNfQ0hFUlJZVklFVyhpOTE1KSkKKwkJcmV0dXJuOworCWVsc2UgaWYg KElTX1NLWUxBS0UoaTkxNSkpCisJCXNrbF9ndF93b3JrYXJvdW5kc19pbml0KGk5MTUpOworCWVs c2UgaWYgKElTX0JST1hUT04oaTkxNSkpCisJCWJ4dF9ndF93b3JrYXJvdW5kc19pbml0KGk5MTUp OworCWVsc2UgaWYgKElTX0tBQllMQUtFKGk5MTUpKQorCQlrYmxfZ3Rfd29ya2Fyb3VuZHNfaW5p dChpOTE1KTsKKwllbHNlIGlmIChJU19HRU1JTklMQUtFKGk5MTUpKQorCQlnbGtfZ3Rfd29ya2Fy b3VuZHNfaW5pdChpOTE1KTsKKwllbHNlIGlmIChJU19DT0ZGRUVMQUtFKGk5MTUpKQorCQljZmxf Z3Rfd29ya2Fyb3VuZHNfaW5pdChpOTE1KTsKKwllbHNlIGlmIChJU19DQU5OT05MQUtFKGk5MTUp KQorCQljbmxfZ3Rfd29ya2Fyb3VuZHNfaW5pdChpOTE1KTsKKwllbHNlIGlmIChJU19JQ0VMQUtF KGk5MTUpKQorCQlpY2xfZ3Rfd29ya2Fyb3VuZHNfaW5pdChpOTE1KTsKIAllbHNlCi0JCU1JU1NJ TkdfQ0FTRShJTlRFTF9HRU4oZGV2X3ByaXYpKTsKKwkJTUlTU0lOR19DQVNFKElOVEVMX0dFTihp OTE1KSk7CisKKwl3YV9pbml0X2ZpbmlzaCh3YWwpOworfQorCitzdGF0aWMgZW51bSBmb3JjZXdh a2VfZG9tYWlucword2FsX2dldF9md19mb3Jfcm13KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwKKwkJICAgY29uc3Qgc3RydWN0IGk5MTVfd2FfbGlzdCAqd2FsKQoreworCWVudW0g Zm9yY2V3YWtlX2RvbWFpbnMgZncgPSAwOworCXN0cnVjdCBpOTE1X3dhICp3YTsKKwl1bnNpZ25l ZCBpbnQgaTsKKworCWZvciAoaSA9IDAsIHdhID0gd2FsLT5saXN0OyBpIDwgd2FsLT5jb3VudDsg aSsrLCB3YSsrKQorCQlmdyB8PSBpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2Zvcl9yZWcoZGV2X3By aXYsCisJCQkJCQkgICAgIHdhLT5yZWcsCisJCQkJCQkgICAgIEZXX1JFR19SRUFEIHwKKwkJCQkJ CSAgICAgRldfUkVHX1dSSVRFKTsKKworCXJldHVybiBmdzsKK30KKworc3RhdGljIHZvaWQKK3dh X2xpc3RfYXBwbHkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBjb25zdCBzdHJ1 Y3QgaTkxNV93YV9saXN0ICp3YWwpCit7CisJZW51bSBmb3JjZXdha2VfZG9tYWlucyBmdzsKKwl1 bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBpOTE1X3dhICp3YTsKKwl1bnNpZ25lZCBpbnQg aTsKKworCWlmICghd2FsLT5jb3VudCkKKwkJcmV0dXJuOworCisJZncgPSB3YWxfZ2V0X2Z3X2Zv cl9ybXcoZGV2X3ByaXYsIHdhbCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnVu Y29yZS5sb2NrLCBmbGFncyk7CisJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9nZXRfX2xvY2tlZChk ZXZfcHJpdiwgZncpOworCisJZm9yIChpID0gMCwgd2EgPSB3YWwtPmxpc3Q7IGkgPCB3YWwtPmNv dW50OyBpKyssIHdhKyspIHsKKwkJdTMyIHZhbCA9IEk5MTVfUkVBRF9GVyh3YS0+cmVnKTsKKwor CQl2YWwgJj0gfndhLT5tYXNrOworCQl2YWwgfD0gd2EtPnZhbDsKKworCQlJOTE1X1dSSVRFX0ZX KHdhLT5yZWcsIHZhbCk7CisJfQorCisJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXRfX2xvY2tl ZChkZXZfcHJpdiwgZncpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT51bmNv cmUubG9jaywgZmxhZ3MpOworCisJRFJNX0RFQlVHX0RSSVZFUigiQXBwbGllZCAldSAlcyB3b3Jr YXJvdW5kc1xuIiwgd2FsLT5jb3VudCwgd2FsLT5uYW1lKTsKK30KKwordm9pZCBpbnRlbF9ndF9h cHBseV93b3JrYXJvdW5kcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJ d2FfbGlzdF9hcHBseShkZXZfcHJpdiwgJmRldl9wcml2LT5ndF93YV9saXN0KTsKIH0KIAogc3Ry dWN0IHdoaXRlbGlzdCB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF93 b3JrYXJvdW5kcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfd29ya2Fyb3VuZHMuaApp bmRleCBiMTFkMDYyM2U2MjYuLjdjM2FkZjc5NGY1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfd29ya2Fyb3VuZHMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF93b3JrYXJvdW5kcy5oCkBAIC03LDEwICs3LDMxIEBACiAjaWZuZGVmIF9JOTE1X1dPUktB Uk9VTkRTX0hfCiAjZGVmaW5lIF9JOTE1X1dPUktBUk9VTkRTX0hfCiAKKyNpbmNsdWRlIDxsaW51 eC9zbGFiLmg+CisKK3N0cnVjdCBpOTE1X3dhIHsKKwlpOTE1X3JlZ190CSAgcmVnOworCXUzMgkJ ICBtYXNrOworCXUzMgkJICB2YWw7Cit9OworCitzdHJ1Y3QgaTkxNV93YV9saXN0IHsKKwljb25z dCBjaGFyCSpuYW1lOworCXVuc2lnbmVkIGludCAJY291bnQ7CisJc3RydWN0IGk5MTVfd2EJKmxp c3Q7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgaW50ZWxfd2FfbGlzdF9mcmVlKHN0cnVjdCBp OTE1X3dhX2xpc3QgKndhbCkKK3sKKwlrZnJlZSh3YWwtPmxpc3QpOworCW1lbXNldCh3YWwsIDAs IHNpemVvZigqd2FsKSk7Cit9CisKIGludCBpbnRlbF9jdHhfd29ya2Fyb3VuZHNfaW5pdChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogaW50IGludGVsX2N0eF93b3JrYXJvdW5k c19lbWl0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKTsKIAotdm9pZCBpbnRlbF9ndF93b3JrYXJv dW5kc19hcHBseShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwordm9pZCBpbnRl bF9ndF9pbml0X3dvcmthcm91bmRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7 Cit2b2lkIGludGVsX2d0X2FwcGx5X3dvcmthcm91bmRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdik7CiAKIHZvaWQgaW50ZWxfd2hpdGVsaXN0X3dvcmthcm91bmRzX2FwcGx5KHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7CiAKLS0gCjIuMTkuMQoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlz dApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==