From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: [PATCH 6/6] drm/i915/icl: Gen11 forcewake support Date: Fri, 2 Mar 2018 18:15:01 +0200 Message-ID: <20180302161501.28594-6-mika.kuoppala@linux.intel.com> References: <20180302161501.28594-1-mika.kuoppala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by gabe.freedesktop.org (Postfix) with ESMTPS id D500C6E1B9 for ; Fri, 2 Mar 2018 16:15:09 +0000 (UTC) In-Reply-To: <20180302161501.28594-1-mika.kuoppala@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 Cc: Paulo Zanoni List-Id: intel-gfx@lists.freedesktop.org RnJvbTogRGFuaWVsZSBDZXJhb2xvIFNwdXJpbyA8ZGFuaWVsZS5jZXJhb2xvc3B1cmlvQGludGVs LmNvbT4KClRoZSBtYWluIGRpZmZlcmVuY2Ugd2l0aCBwcmV2aW91cyBHRU5zIGlzIHRoYXQgc3Rh cnRpbmcgZnJvbSBHZW4xMQplYWNoIFZDUyBhbmQgVkVDUyBlbmdpbmUgaGFzIGl0cyBvd24gcG93 ZXIgd2VsbCwgd2hpY2ggb25seSBleGlzdAppZiB0aGUgcmVsYXRlZCBlbmdpbmUgZXhpc3RzIGlu IHRoZSBIVy4KVGhlIGZhbGxiYWNrIGZvcmNld2FrZSByZXF1ZXN0IHdvcmthcm91bmQgaXMgb25s eSBuZWVkZWQgb24gZ2VuOQphY2NvcmRpbmcgdG8gdGhlIEhTREVTIFdBIGVudHJ5ICgxNjA0MjU0 NTI0KSwgc28gd2UgY2FuIGdvIGJhY2sgdG8gdXNpbmcKdGhlIHNpbXBsZXIgZndfZG9tYWluc19n ZXQvcHV0IGZ1bmN0aW9ucy4KCkJTcGVjOiAxODMzMQoKdjI6IGZpeCBmd3RhYmxlLCB1c2UgYXJy YXkgdG8gdGVzdCBzaGFkb3cgdGFibGVzLCBjcmVhdGUgbmV3CiAgICBhY2Nlc3NvcnMgdG8gYXZv aWQgY2hlY2sgb24gZXZlcnkgYWNjZXNzIChUdnJ0a28pCnYzIChmcm9tIFBhdWxvKTogUmViYXNl Lgp2NDoKICAtIFJhbmdlIDA5NDAwLTA5N0ZGIHNob3VsZCBiZSBGT1JDRVdBS0VfQUxMIChEYW5p ZWxlKQogIC0gVXNlIHRoZSBCSVQgbWFjcm8gZm9yIGZvcmNld2FrZSBkb21haW5zIChEYW5pZWxl KQogIC0gQWRkIGEgY29tbWVudCBhYm91dCB0aGUgcmFuZ2Ugb3JkZXJpbmcgKE9zY2FyKQogIC0g VXBkYXRlZCBjb21taXQgbWVzc2FnZSAoT3NjYXIpCnY1OiBSZWJhc2VkCnY2OiBVc2UgSTkxNV9N QVhfVkNTL1ZFQ1MgKE1pY2hhbCkKdjc6IHRyYW5zbGF0ZSBGT1JDRVdBS0VfQUxMIHRvIGF2YWls YWJsZSBkb21haW5zCnY4OiByZWJhc2UsIGFkZCBjbGFyaWZpY2F0aW9uIG9uIGZhbGxiYWNrIGFj ayBpbiBjb21taXQgbWVzc2FnZS4Kdjk6IGZpeCByZWJhc2UgaXNzdWUsIGNoYW5nZSBjaGVjayBp biBmd19kb21haW5zX2luaXQgZnJvbSBJU19HRU4xMQogICAgdG8gR0VOID49IDExCnYxMDogR2Vu ZXJhdGUgaXNfZ2VuWF9zaGFkb3dlZCB3aXRoIGEgbWFjcm8gKERhbmllbGUpCiAgICAgSW5jbHVk ZSBnZW4xMV9md19yYW5nZXMgaW4gdGhlIHNlbGZ0ZXN0IChNaWNoZWwpCnYxMTogU2ltcGxpZnkg Rk9SQ0VXQUtFX0FMTCwgbmV3IGxpbmUgYmV0d2VlbiBORUVEU19GT1JDRVdBS0VzIChUdnJ0a28p CgpDYzogTWljaGFsIFdhamRlY3prbyA8bWljaGFsLndhamRlY3prb0BpbnRlbC5jb20+CkNjOiBU dnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgpDYzogUGF1bG8gWmFub25p IDxwYXVsby5yLnphbm9uaUBpbnRlbC5jb20+CkFja2VkLWJ5OiBNaWNoZWwgVGhpZXJyeSA8bWlj aGVsLnRoaWVycnlAaW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBEYW5pZWxlIENlcmFvbG8gU3B1 cmlvIDxkYW5pZWxlLmNlcmFvbG9zcHVyaW9AaW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBPc2Nh ciBNYXRlbyA8b3NjYXIubWF0ZW9AaW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBNaWNoZWwgVGhp ZXJyeSA8bWljaGVsLnRoaWVycnlAaW50ZWwuY29tPgpSZXZpZXdlZC1ieTogVHZydGtvIFVyc3Vs aW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X3JlZy5oICAgICAgICAgICAgICAgfCAgIDQgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfdW5jb3JlLmMgICAgICAgICAgIHwgMTU3ICsrKysrKysrKysrKysrKysrKysrKysrKy0tCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91bmNvcmUuaCAgICAgICAgICAgfCAgMjMgKysrLQog ZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2ludGVsX3VuY29yZS5jIHwgIDMxICsrKy0t CiA0IGZpbGVzIGNoYW5nZWQsIDE4OSBpbnNlcnRpb25zKCspLCAyNiBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9yZWcuaAppbmRleCA5YTYyZDIwYmVhOGUuLjQ3ODdkOWJmNThiOSAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAorKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X3JlZy5oCkBAIC04MDIwLDkgKzgwMjAsMTMgQEAgZW51bSB7CiAjZGVm aW5lICAgVkxWX0dUTENfUFdfUkVOREVSX1NUQVRVU19NQVNLCSgxIDw8IDcpCiAjZGVmaW5lICBG T1JDRVdBS0VfTVQJCQkJX01NSU8oMHhhMTg4KSAvKiBtdWx0aS10aHJlYWRlZCAqLwogI2RlZmlu ZSAgRk9SQ0VXQUtFX01FRElBX0dFTjkJCQlfTU1JTygweGEyNzApCisjZGVmaW5lICBGT1JDRVdB S0VfTUVESUFfVkRCT1hfR0VOMTEobikJCV9NTUlPKDB4YTU0MCArIChuKSAqIDQpCisjZGVmaW5l ICBGT1JDRVdBS0VfTUVESUFfVkVCT1hfR0VOMTEobikJCV9NTUlPKDB4YTU2MCArIChuKSAqIDQp CiAjZGVmaW5lICBGT1JDRVdBS0VfUkVOREVSX0dFTjkJCQlfTU1JTygweGEyNzgpCiAjZGVmaW5l ICBGT1JDRVdBS0VfQkxJVFRFUl9HRU45CQkJX01NSU8oMHhhMTg4KQogI2RlZmluZSAgRk9SQ0VX QUtFX0FDS19NRURJQV9HRU45CQlfTU1JTygweDBEODgpCisjZGVmaW5lICBGT1JDRVdBS0VfQUNL X01FRElBX1ZEQk9YX0dFTjExKG4pCV9NTUlPKDB4MEQ1MCArIChuKSAqIDQpCisjZGVmaW5lICBG T1JDRVdBS0VfQUNLX01FRElBX1ZFQk9YX0dFTjExKG4pCV9NTUlPKDB4MEQ3MCArIChuKSAqIDQp CiAjZGVmaW5lICBGT1JDRVdBS0VfQUNLX1JFTkRFUl9HRU45CQlfTU1JTygweDBEODQpCiAjZGVm aW5lICBGT1JDRVdBS0VfQUNLX0JMSVRURVJfR0VOOQkJX01NSU8oMHgxMzAwNDQpCiAjZGVmaW5l ICAgRk9SQ0VXQUtFX0tFUk5FTAkJCUJJVCgwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfdW5jb3JlLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91bmNvcmUu YwppbmRleCA1YWU5YTYyNzEyY2EuLjRkZjdjMmVmODU3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfdW5jb3JlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfdW5jb3JlLmMKQEAgLTM3LDYgKzM3LDEyIEBAIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qg Zm9yY2V3YWtlX2RvbWFpbl9uYW1lc1tdID0gewogCSJyZW5kZXIiLAogCSJibGl0dGVyIiwKIAki bWVkaWEiLAorCSJ2ZGJveDAiLAorCSJ2ZGJveDEiLAorCSJ2ZGJveDIiLAorCSJ2ZGJveDMiLAor CSJ2ZWJveDAiLAorCSJ2ZWJveDEiLAogfTsKIAogY29uc3QgY2hhciAqCkBAIC03NzQsNiArNzgw LDkgQEAgdm9pZCBhc3NlcnRfZm9yY2V3YWtlc19hY3RpdmUoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LAogLyogV2UgZ2l2ZSBmYXN0IHBhdGhzIGZvciB0aGUgcmVhbGx5IGNvb2wg cmVnaXN0ZXJzICovCiAjZGVmaW5lIE5FRURTX0ZPUkNFX1dBS0UocmVnKSAoKHJlZykgPCAweDQw MDAwKQogCisjZGVmaW5lIEdFTjExX05FRURTX0ZPUkNFX1dBS0UocmVnKSBcCisJKChyZWcpIDwg MHg0MDAwMCB8fCAoKHJlZykgPj0gMHgxYzAwMDAgJiYgKHJlZykgPCAweDFkYzAwMCkpCisKICNk ZWZpbmUgX19nZW42X3JlZ19yZWFkX2Z3X2RvbWFpbnMob2Zmc2V0KSBcCiAoeyBcCiAJZW51bSBm b3JjZXdha2VfZG9tYWlucyBfX2Z3ZDsgXApAQCAtODI2LDYgKzgzNSwxNCBAQCBmaW5kX2Z3X2Rv bWFpbihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHUzMiBvZmZzZXQpCiAJaWYg KCFlbnRyeSkKIAkJcmV0dXJuIDA7CiAKKwkvKgorCSAqIFRoZSBsaXN0IG9mIEZXIGRvbWFpbnMg ZGVwZW5kcyBvbiB0aGUgU0tVIGluIGdlbjExKyBzbyB3ZQorCSAqIGNhbid0IGRldGVybWluZSBp dCBzdGF0aWNhbGx5LiBXZSB1c2UgRk9SQ0VXQUtFX0FMTCBhbmQKKwkgKiB0cmFuc2xhdGUgaXQg aGVyZSB0byB0aGUgbGlzdCBvZiBhdmFpbGFibGUgZG9tYWlucy4KKwkgKi8KKwlpZiAoZW50cnkt PmRvbWFpbnMgPT0gRk9SQ0VXQUtFX0FMTCkKKwkJcmV0dXJuIGRldl9wcml2LT51bmNvcmUuZndf ZG9tYWluczsKKwogCVdBUk4oZW50cnktPmRvbWFpbnMgJiB+ZGV2X3ByaXYtPnVuY29yZS5md19k b21haW5zLAogCSAgICAgIlVuaW5pdGlhbGl6ZWQgZm9yY2V3YWtlIGRvbWFpbihzKSAweCV4IGFj Y2Vzc2VkIGF0IDB4JXhcbiIsCiAJICAgICBlbnRyeS0+ZG9tYWlucyAmIH5kZXZfcHJpdi0+dW5j b3JlLmZ3X2RvbWFpbnMsIG9mZnNldCk7CkBAIC04NjAsNiArODc3LDE0IEBAIHN0YXRpYyBjb25z dCBzdHJ1Y3QgaW50ZWxfZm9yY2V3YWtlX3JhbmdlIF9fdmx2X2Z3X3Jhbmdlc1tdID0gewogCV9f ZndkOyBcCiB9KQogCisjZGVmaW5lIF9fZ2VuMTFfZnd0YWJsZV9yZWdfcmVhZF9md19kb21haW5z KG9mZnNldCkgXAorKHsgXAorCWVudW0gZm9yY2V3YWtlX2RvbWFpbnMgX19md2QgPSAwOyBcCisJ aWYgKEdFTjExX05FRURTX0ZPUkNFX1dBS0UoKG9mZnNldCkpKSBcCisJCV9fZndkID0gZmluZF9m d19kb21haW4oZGV2X3ByaXYsIG9mZnNldCk7IFwKKwlfX2Z3ZDsgXAorfSkKKwogLyogKk11c3Qq IGJlIHNvcnRlZCBieSBvZmZzZXQhIFNlZSBpbnRlbF9zaGFkb3dfdGFibGVfY2hlY2soKS4gKi8K IHN0YXRpYyBjb25zdCBpOTE1X3JlZ190IGdlbjhfc2hhZG93ZWRfcmVnc1tdID0gewogCVJJTkdf VEFJTChSRU5ERVJfUklOR19CQVNFKSwJLyogMHgyMDAwIChiYXNlKSAqLwpAQCAtODcxLDYgKzg5 NiwyMCBAQCBzdGF0aWMgY29uc3QgaTkxNV9yZWdfdCBnZW44X3NoYWRvd2VkX3JlZ3NbXSA9IHsK IAkvKiBUT0RPOiBPdGhlciByZWdpc3RlcnMgYXJlIG5vdCB5ZXQgdXNlZCAqLwogfTsKIAorc3Rh dGljIGNvbnN0IGk5MTVfcmVnX3QgZ2VuMTFfc2hhZG93ZWRfcmVnc1tdID0geworCVJJTkdfVEFJ TChSRU5ERVJfUklOR19CQVNFKSwJCS8qIDB4MjAwMCAoYmFzZSkgKi8KKwlHRU42X1JQTlNXUkVR LAkJCQkvKiAweEEwMDggKi8KKwlHRU42X1JDX1ZJREVPX0ZSRVEsCQkJLyogMHhBMDBDICovCisJ UklOR19UQUlMKEJMVF9SSU5HX0JBU0UpLAkJLyogMHgyMjAwMCAoYmFzZSkgKi8KKwlSSU5HX1RB SUwoR0VOMTFfQlNEX1JJTkdfQkFTRSksCQkvKiAweDFDMDAwMCAoYmFzZSkgKi8KKwlSSU5HX1RB SUwoR0VOMTFfQlNEMl9SSU5HX0JBU0UpLAkvKiAweDFDNDAwMCAoYmFzZSkgKi8KKwlSSU5HX1RB SUwoR0VOMTFfVkVCT1hfUklOR19CQVNFKSwJLyogMHgxQzgwMDAgKGJhc2UpICovCisJUklOR19U QUlMKEdFTjExX0JTRDNfUklOR19CQVNFKSwJLyogMHgxRDAwMDAgKGJhc2UpICovCisJUklOR19U QUlMKEdFTjExX0JTRDRfUklOR19CQVNFKSwJLyogMHgxRDQwMDAgKGJhc2UpICovCisJUklOR19U QUlMKEdFTjExX1ZFQk9YMl9SSU5HX0JBU0UpLAkvKiAweDFEODAwMCAoYmFzZSkgKi8KKwkvKiBU T0RPOiBPdGhlciByZWdpc3RlcnMgYXJlIG5vdCB5ZXQgdXNlZCAqLworfTsKKwogc3RhdGljIGlu dCBtbWlvX3JlZ19jbXAodTMyIGtleSwgY29uc3QgaTkxNV9yZWdfdCAqcmVnKQogewogCXUzMiBv ZmZzZXQgPSBpOTE1X21taW9fcmVnX29mZnNldCgqcmVnKTsKQEAgLTg4MywxNCArOTIyLDE3IEBA IHN0YXRpYyBpbnQgbW1pb19yZWdfY21wKHUzMiBrZXksIGNvbnN0IGk5MTVfcmVnX3QgKnJlZykK IAkJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBib29sIGlzX2dlbjhfc2hhZG93ZWQodTMyIG9mZnNl dCkKLXsKLQljb25zdCBpOTE1X3JlZ190ICpyZWdzID0gZ2VuOF9zaGFkb3dlZF9yZWdzOwotCi0J cmV0dXJuIEJTRUFSQ0gob2Zmc2V0LCByZWdzLCBBUlJBWV9TSVpFKGdlbjhfc2hhZG93ZWRfcmVn cyksCi0JCSAgICAgICBtbWlvX3JlZ19jbXApOworI2RlZmluZSBfX2lzX2dlblhfc2hhZG93ZWQo eCkgXAorc3RhdGljIGJvb2wgaXNfZ2VuIyN4IyNfc2hhZG93ZWQodTMyIG9mZnNldCkgXAoreyBc CisJY29uc3QgaTkxNV9yZWdfdCAqcmVncyA9IGdlbiMjeCMjX3NoYWRvd2VkX3JlZ3M7IFwKKwly ZXR1cm4gQlNFQVJDSChvZmZzZXQsIHJlZ3MsIEFSUkFZX1NJWkUoZ2VuIyN4IyNfc2hhZG93ZWRf cmVncyksIFwKKwkJICAgICAgIG1taW9fcmVnX2NtcCk7IFwKIH0KIAorX19pc19nZW5YX3NoYWRv d2VkKDgpCitfX2lzX2dlblhfc2hhZG93ZWQoMTEpCisKICNkZWZpbmUgX19nZW44X3JlZ193cml0 ZV9md19kb21haW5zKG9mZnNldCkgXAogKHsgXAogCWVudW0gZm9yY2V3YWtlX2RvbWFpbnMgX19m d2Q7IFwKQEAgLTkyOSw2ICs5NzEsMTQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9mb3Jj ZXdha2VfcmFuZ2UgX19jaHZfZndfcmFuZ2VzW10gPSB7CiAJX19md2Q7IFwKIH0pCiAKKyNkZWZp bmUgX19nZW4xMV9md3RhYmxlX3JlZ193cml0ZV9md19kb21haW5zKG9mZnNldCkgXAorKHsgXAor CWVudW0gZm9yY2V3YWtlX2RvbWFpbnMgX19md2QgPSAwOyBcCisJaWYgKEdFTjExX05FRURTX0ZP UkNFX1dBS0UoKG9mZnNldCkpICYmICFpc19nZW4xMV9zaGFkb3dlZChvZmZzZXQpKSBcCisJCV9f ZndkID0gZmluZF9md19kb21haW4oZGV2X3ByaXYsIG9mZnNldCk7IFwKKwlfX2Z3ZDsgXAorfSkK KwogLyogKk11c3QqIGJlIHNvcnRlZCBieSBvZmZzZXQgcmFuZ2VzISBTZWUgaW50ZWxfZndfdGFi bGVfY2hlY2soKS4gKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfZm9yY2V3YWtlX3Jhbmdl IF9fZ2VuOV9md19yYW5nZXNbXSA9IHsKIAlHRU5fRldfUkFOR0UoMHgwLCAweGFmZiwgRk9SQ0VX QUtFX0JMSVRURVIpLApAQCAtOTY1LDYgKzEwMTUsNDAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBp bnRlbF9mb3JjZXdha2VfcmFuZ2UgX19nZW45X2Z3X3Jhbmdlc1tdID0gewogCUdFTl9GV19SQU5H RSgweDMwMDAwLCAweDNmZmZmLCBGT1JDRVdBS0VfTUVESUEpLAogfTsKIAorLyogKk11c3QqIGJl IHNvcnRlZCBieSBvZmZzZXQgcmFuZ2VzISBTZWUgaW50ZWxfZndfdGFibGVfY2hlY2soKS4gKi8K K3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfZm9yY2V3YWtlX3JhbmdlIF9fZ2VuMTFfZndfcmFu Z2VzW10gPSB7CisJR0VOX0ZXX1JBTkdFKDB4MCwgMHhhZmYsIEZPUkNFV0FLRV9CTElUVEVSKSwK KwlHRU5fRldfUkFOR0UoMHhiMDAsIDB4MWZmZiwgMCksIC8qIHVuY29yZSByYW5nZSAqLworCUdF Tl9GV19SQU5HRSgweDIwMDAsIDB4MjZmZiwgRk9SQ0VXQUtFX1JFTkRFUiksCisJR0VOX0ZXX1JB TkdFKDB4MjcwMCwgMHgyZmZmLCBGT1JDRVdBS0VfQkxJVFRFUiksCisJR0VOX0ZXX1JBTkdFKDB4 MzAwMCwgMHgzZmZmLCBGT1JDRVdBS0VfUkVOREVSKSwKKwlHRU5fRldfUkFOR0UoMHg0MDAwLCAw eDUxZmYsIEZPUkNFV0FLRV9CTElUVEVSKSwKKwlHRU5fRldfUkFOR0UoMHg1MjAwLCAweDdmZmYs IEZPUkNFV0FLRV9SRU5ERVIpLAorCUdFTl9GV19SQU5HRSgweDgwMDAsIDB4ODEzZiwgRk9SQ0VX QUtFX0JMSVRURVIpLAorCUdFTl9GV19SQU5HRSgweDgxNDAsIDB4ODE1ZiwgRk9SQ0VXQUtFX1JF TkRFUiksCisJR0VOX0ZXX1JBTkdFKDB4ODE2MCwgMHg4MmZmLCBGT1JDRVdBS0VfQkxJVFRFUiks CisJR0VOX0ZXX1JBTkdFKDB4ODMwMCwgMHg4NGZmLCBGT1JDRVdBS0VfUkVOREVSKSwKKwlHRU5f RldfUkFOR0UoMHg4NTAwLCAweDhiZmYsIEZPUkNFV0FLRV9CTElUVEVSKSwKKwlHRU5fRldfUkFO R0UoMHg4YzAwLCAweDhjZmYsIEZPUkNFV0FLRV9SRU5ERVIpLAorCUdFTl9GV19SQU5HRSgweDhk MDAsIDB4OTNmZiwgRk9SQ0VXQUtFX0JMSVRURVIpLAorCUdFTl9GV19SQU5HRSgweDk0MDAsIDB4 OTdmZiwgRk9SQ0VXQUtFX0FMTCksCisJR0VOX0ZXX1JBTkdFKDB4OTgwMCwgMHhhZmZmLCBGT1JD RVdBS0VfQkxJVFRFUiksCisJR0VOX0ZXX1JBTkdFKDB4YjAwMCwgMHhiNDdmLCBGT1JDRVdBS0Vf UkVOREVSKSwKKwlHRU5fRldfUkFOR0UoMHhiNDgwLCAweGRmZmYsIEZPUkNFV0FLRV9CTElUVEVS KSwKKwlHRU5fRldfUkFOR0UoMHhlMDAwLCAweGU4ZmYsIEZPUkNFV0FLRV9SRU5ERVIpLAorCUdF Tl9GV19SQU5HRSgweGU5MDAsIDB4MjQzZmYsIEZPUkNFV0FLRV9CTElUVEVSKSwKKwlHRU5fRldf UkFOR0UoMHgyNDQwMCwgMHgyNDdmZiwgRk9SQ0VXQUtFX1JFTkRFUiksCisJR0VOX0ZXX1JBTkdF KDB4MjQ4MDAsIDB4M2ZmZmYsIEZPUkNFV0FLRV9CTElUVEVSKSwKKwlHRU5fRldfUkFOR0UoMHg0 MDAwMCwgMHgxYmZmZmYsIDApLAorCUdFTl9GV19SQU5HRSgweDFjMDAwMCwgMHgxYzNmZmYsIEZP UkNFV0FLRV9NRURJQV9WREJPWDApLAorCUdFTl9GV19SQU5HRSgweDFjNDAwMCwgMHgxYzdmZmYs IEZPUkNFV0FLRV9NRURJQV9WREJPWDEpLAorCUdFTl9GV19SQU5HRSgweDFjODAwMCwgMHgxY2Jm ZmYsIEZPUkNFV0FLRV9NRURJQV9WRUJPWDApLAorCUdFTl9GV19SQU5HRSgweDFjYzAwMCwgMHgx Y2ZmZmYsIEZPUkNFV0FLRV9CTElUVEVSKSwKKwlHRU5fRldfUkFOR0UoMHgxZDAwMDAsIDB4MWQz ZmZmLCBGT1JDRVdBS0VfTUVESUFfVkRCT1gyKSwKKwlHRU5fRldfUkFOR0UoMHgxZDQwMDAsIDB4 MWQ3ZmZmLCBGT1JDRVdBS0VfTUVESUFfVkRCT1gzKSwKKwlHRU5fRldfUkFOR0UoMHgxZDgwMDAs IDB4MWRiZmZmLCBGT1JDRVdBS0VfTUVESUFfVkVCT1gxKQorfTsKKwogc3RhdGljIHZvaWQKIGls a19kdW1teV93cml0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7CkBAIC0x MDk1LDcgKzExNzksMTIgQEAgZnVuYyMjX3JlYWQjI3goc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LCBpOTE1X3JlZ190IHJlZywgYm9vbCB0cmFjZSkgewogfQogI2RlZmluZSBfX2dl bjZfcmVhZCh4KSBfX2dlbl9yZWFkKGdlbjYsIHgpCiAjZGVmaW5lIF9fZnd0YWJsZV9yZWFkKHgp IF9fZ2VuX3JlYWQoZnd0YWJsZSwgeCkKKyNkZWZpbmUgX19nZW4xMV9md3RhYmxlX3JlYWQoeCkg X19nZW5fcmVhZChnZW4xMV9md3RhYmxlLCB4KQogCitfX2dlbjExX2Z3dGFibGVfcmVhZCg4KQor X19nZW4xMV9md3RhYmxlX3JlYWQoMTYpCitfX2dlbjExX2Z3dGFibGVfcmVhZCgzMikKK19fZ2Vu MTFfZnd0YWJsZV9yZWFkKDY0KQogX19md3RhYmxlX3JlYWQoOCkKIF9fZnd0YWJsZV9yZWFkKDE2 KQogX19md3RhYmxlX3JlYWQoMzIpCkBAIC0xMTA1LDYgKzExOTQsNyBAQCBfX2dlbjZfcmVhZCgx NikKIF9fZ2VuNl9yZWFkKDMyKQogX19nZW42X3JlYWQoNjQpCiAKKyN1bmRlZiBfX2dlbjExX2Z3 dGFibGVfcmVhZAogI3VuZGVmIF9fZnd0YWJsZV9yZWFkCiAjdW5kZWYgX19nZW42X3JlYWQKICN1 bmRlZiBHRU42X1JFQURfRk9PVEVSCkBAIC0xMTgxLDcgKzEyNzEsMTEgQEAgZnVuYyMjX3dyaXRl IyN4KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgaTkxNV9yZWdfdCByZWcsIHUj I3ggdmFsLCBib28KIH0KICNkZWZpbmUgX19nZW44X3dyaXRlKHgpIF9fZ2VuX3dyaXRlKGdlbjgs IHgpCiAjZGVmaW5lIF9fZnd0YWJsZV93cml0ZSh4KSBfX2dlbl93cml0ZShmd3RhYmxlLCB4KQor I2RlZmluZSBfX2dlbjExX2Z3dGFibGVfd3JpdGUoeCkgX19nZW5fd3JpdGUoZ2VuMTFfZnd0YWJs ZSwgeCkKIAorX19nZW4xMV9md3RhYmxlX3dyaXRlKDgpCitfX2dlbjExX2Z3dGFibGVfd3JpdGUo MTYpCitfX2dlbjExX2Z3dGFibGVfd3JpdGUoMzIpCiBfX2Z3dGFibGVfd3JpdGUoOCkKIF9fZnd0 YWJsZV93cml0ZSgxNikKIF9fZnd0YWJsZV93cml0ZSgzMikKQEAgLTExOTIsNiArMTI4Niw3IEBA IF9fZ2VuNl93cml0ZSg4KQogX19nZW42X3dyaXRlKDE2KQogX19nZW42X3dyaXRlKDMyKQogCisj dW5kZWYgX19nZW4xMV9md3RhYmxlX3dyaXRlCiAjdW5kZWYgX19md3RhYmxlX3dyaXRlCiAjdW5k ZWYgX19nZW44X3dyaXRlCiAjdW5kZWYgX19nZW42X3dyaXRlCkBAIC0xMjQwLDYgKzEzMzUsMTMg QEAgc3RhdGljIHZvaWQgZndfZG9tYWluX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LAogCUJVSUxEX0JVR19PTihGT1JDRVdBS0VfUkVOREVSICE9ICgxIDw8IEZXX0RPTUFJ Tl9JRF9SRU5ERVIpKTsKIAlCVUlMRF9CVUdfT04oRk9SQ0VXQUtFX0JMSVRURVIgIT0gKDEgPDwg RldfRE9NQUlOX0lEX0JMSVRURVIpKTsKIAlCVUlMRF9CVUdfT04oRk9SQ0VXQUtFX01FRElBICE9 ICgxIDw8IEZXX0RPTUFJTl9JRF9NRURJQSkpOworCUJVSUxEX0JVR19PTihGT1JDRVdBS0VfTUVE SUFfVkRCT1gwICE9ICgxIDw8IEZXX0RPTUFJTl9JRF9NRURJQV9WREJPWDApKTsKKwlCVUlMRF9C VUdfT04oRk9SQ0VXQUtFX01FRElBX1ZEQk9YMSAhPSAoMSA8PCBGV19ET01BSU5fSURfTUVESUFf VkRCT1gxKSk7CisJQlVJTERfQlVHX09OKEZPUkNFV0FLRV9NRURJQV9WREJPWDIgIT0gKDEgPDwg RldfRE9NQUlOX0lEX01FRElBX1ZEQk9YMikpOworCUJVSUxEX0JVR19PTihGT1JDRVdBS0VfTUVE SUFfVkRCT1gzICE9ICgxIDw8IEZXX0RPTUFJTl9JRF9NRURJQV9WREJPWDMpKTsKKwlCVUlMRF9C VUdfT04oRk9SQ0VXQUtFX01FRElBX1ZFQk9YMCAhPSAoMSA8PCBGV19ET01BSU5fSURfTUVESUFf VkVCT1gwKSk7CisJQlVJTERfQlVHX09OKEZPUkNFV0FLRV9NRURJQV9WRUJPWDEgIT0gKDEgPDwg RldfRE9NQUlOX0lEX01FRElBX1ZFQk9YMSkpOworCiAKIAlkLT5tYXNrID0gQklUKGRvbWFpbl9p ZCk7CiAKQEAgLTEyNjcsNyArMTM2OSwzNCBAQCBzdGF0aWMgdm9pZCBpbnRlbF91bmNvcmVfZndf ZG9tYWluc19pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAkJZGV2X3By aXYtPnVuY29yZS5md19jbGVhciA9IF9NQVNLRURfQklUX0RJU0FCTEUoRk9SQ0VXQUtFX0tFUk5F TCk7CiAJfQogCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOSkgeworCWlmIChJTlRFTF9H RU4oZGV2X3ByaXYpID49IDExKSB7CisJCWludCBpOworCisJCWRldl9wcml2LT51bmNvcmUuZnVu Y3MuZm9yY2Vfd2FrZV9nZXQgPSBmd19kb21haW5zX2dldDsKKwkJZGV2X3ByaXYtPnVuY29yZS5m dW5jcy5mb3JjZV93YWtlX3B1dCA9IGZ3X2RvbWFpbnNfcHV0OworCQlmd19kb21haW5faW5pdChk ZXZfcHJpdiwgRldfRE9NQUlOX0lEX1JFTkRFUiwKKwkJCSAgICAgICBGT1JDRVdBS0VfUkVOREVS X0dFTjksCisJCQkgICAgICAgRk9SQ0VXQUtFX0FDS19SRU5ERVJfR0VOOSk7CisJCWZ3X2RvbWFp bl9pbml0KGRldl9wcml2LCBGV19ET01BSU5fSURfQkxJVFRFUiwKKwkJCSAgICAgICBGT1JDRVdB S0VfQkxJVFRFUl9HRU45LAorCQkJICAgICAgIEZPUkNFV0FLRV9BQ0tfQkxJVFRFUl9HRU45KTsK KwkJZm9yIChpID0gMDsgaSA8IEk5MTVfTUFYX1ZDUzsgaSsrKSB7CisJCQlpZiAoIUhBU19FTkdJ TkUoZGV2X3ByaXYsIF9WQ1MoaSkpKQorCQkJCWNvbnRpbnVlOworCisJCQlmd19kb21haW5faW5p dChkZXZfcHJpdiwgRldfRE9NQUlOX0lEX01FRElBX1ZEQk9YMCArIGksCisJCQkJICAgICAgIEZP UkNFV0FLRV9NRURJQV9WREJPWF9HRU4xMShpKSwKKwkJCQkgICAgICAgRk9SQ0VXQUtFX0FDS19N RURJQV9WREJPWF9HRU4xMShpKSk7CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IEk5MTVfTUFYX1ZF Q1M7IGkrKykgeworCQkJaWYgKCFIQVNfRU5HSU5FKGRldl9wcml2LCBfVkVDUyhpKSkpCisJCQkJ Y29udGludWU7CisKKwkJCWZ3X2RvbWFpbl9pbml0KGRldl9wcml2LCBGV19ET01BSU5fSURfTUVE SUFfVkVCT1gwICsgaSwKKwkJCQkgICAgICAgRk9SQ0VXQUtFX01FRElBX1ZFQk9YX0dFTjExKGkp LAorCQkJCSAgICAgICBGT1JDRVdBS0VfQUNLX01FRElBX1ZFQk9YX0dFTjExKGkpKTsKKwkJfQor CX0gZWxzZSBpZiAoSVNfR0VOOShkZXZfcHJpdikgfHwgSVNfR0VOMTAoZGV2X3ByaXYpKSB7CiAJ CWRldl9wcml2LT51bmNvcmUuZnVuY3MuZm9yY2Vfd2FrZV9nZXQgPQogCQkJZndfZG9tYWluc19n ZXRfd2l0aF9mYWxsYmFjazsKIAkJZGV2X3ByaXYtPnVuY29yZS5mdW5jcy5mb3JjZV93YWtlX3B1 dCA9IGZ3X2RvbWFpbnNfcHV0OwpAQCAtMTQyMiwxMCArMTU1MSwxNCBAQCB2b2lkIGludGVsX3Vu Y29yZV9pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAkJCUFTU0lHTl9X UklURV9NTUlPX1ZGVU5DUyhkZXZfcHJpdiwgZ2VuOCk7CiAJCQlBU1NJR05fUkVBRF9NTUlPX1ZG VU5DUyhkZXZfcHJpdiwgZ2VuNik7CiAJCX0KLQl9IGVsc2UgeworCX0gZWxzZSBpZiAoSVNfR0VO KGRldl9wcml2LCA5LCAxMCkpIHsKIAkJQVNTSUdOX0ZXX0RPTUFJTlNfVEFCTEUoX19nZW45X2Z3 X3Jhbmdlcyk7CiAJCUFTU0lHTl9XUklURV9NTUlPX1ZGVU5DUyhkZXZfcHJpdiwgZnd0YWJsZSk7 CiAJCUFTU0lHTl9SRUFEX01NSU9fVkZVTkNTKGRldl9wcml2LCBmd3RhYmxlKTsKKwl9IGVsc2Ug eworCQlBU1NJR05fRldfRE9NQUlOU19UQUJMRShfX2dlbjExX2Z3X3Jhbmdlcyk7CisJCUFTU0lH Tl9XUklURV9NTUlPX1ZGVU5DUyhkZXZfcHJpdiwgZ2VuMTFfZnd0YWJsZSk7CisJCUFTU0lHTl9S RUFEX01NSU9fVkZVTkNTKGRldl9wcml2LCBnZW4xMV9md3RhYmxlKTsKIAl9CiAKIAlpb3NmX21i aV9yZWdpc3Rlcl9wbWljX2J1c19hY2Nlc3Nfbm90aWZpZXIoCkBAIC0xOTk0LDcgKzIxMjcsOSBA QCBpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2Zvcl9yZWFkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiwKIAl1MzIgb2Zmc2V0ID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQocmVnKTsKIAll bnVtIGZvcmNld2FrZV9kb21haW5zIGZ3X2RvbWFpbnM7CiAKLQlpZiAoSEFTX0ZXVEFCTEUoZGV2 X3ByaXYpKSB7CisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTEpIHsKKwkJZndfZG9tYWlu cyA9IF9fZ2VuMTFfZnd0YWJsZV9yZWdfcmVhZF9md19kb21haW5zKG9mZnNldCk7CisJfSBlbHNl IGlmIChIQVNfRldUQUJMRShkZXZfcHJpdikpIHsKIAkJZndfZG9tYWlucyA9IF9fZnd0YWJsZV9y ZWdfcmVhZF9md19kb21haW5zKG9mZnNldCk7CiAJfSBlbHNlIGlmIChJTlRFTF9HRU4oZGV2X3By aXYpID49IDYpIHsKIAkJZndfZG9tYWlucyA9IF9fZ2VuNl9yZWdfcmVhZF9md19kb21haW5zKG9m ZnNldCk7CkBAIC0yMDE1LDcgKzIxNTAsOSBAQCBpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2Zvcl93 cml0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJdTMyIG9mZnNldCA9IGk5 MTVfbW1pb19yZWdfb2Zmc2V0KHJlZyk7CiAJZW51bSBmb3JjZXdha2VfZG9tYWlucyBmd19kb21h aW5zOwogCi0JaWYgKEhBU19GV1RBQkxFKGRldl9wcml2KSAmJiAhSVNfVkFMTEVZVklFVyhkZXZf cHJpdikpIHsKKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMSkgeworCQlmd19kb21haW5z ID0gX19nZW4xMV9md3RhYmxlX3JlZ193cml0ZV9md19kb21haW5zKG9mZnNldCk7CisJfSBlbHNl IGlmIChIQVNfRldUQUJMRShkZXZfcHJpdikgJiYgIUlTX1ZBTExFWVZJRVcoZGV2X3ByaXYpKSB7 CiAJCWZ3X2RvbWFpbnMgPSBfX2Z3dGFibGVfcmVnX3dyaXRlX2Z3X2RvbWFpbnMob2Zmc2V0KTsK IAl9IGVsc2UgaWYgKElTX0dFTjgoZGV2X3ByaXYpKSB7CiAJCWZ3X2RvbWFpbnMgPSBfX2dlbjhf cmVnX3dyaXRlX2Z3X2RvbWFpbnMob2Zmc2V0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX3VuY29yZS5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdW5jb3Jl LmgKaW5kZXggNTNlZjc3ZDBjOTdjLi5kZmRmNDQ0ZTRiY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX3VuY29yZS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX3VuY29yZS5oCkBAIC0zNywxNyArMzcsMjggQEAgZW51bSBmb3JjZXdha2VfZG9tYWluX2lk IHsKIAlGV19ET01BSU5fSURfUkVOREVSID0gMCwKIAlGV19ET01BSU5fSURfQkxJVFRFUiwKIAlG V19ET01BSU5fSURfTUVESUEsCisJRldfRE9NQUlOX0lEX01FRElBX1ZEQk9YMCwKKwlGV19ET01B SU5fSURfTUVESUFfVkRCT1gxLAorCUZXX0RPTUFJTl9JRF9NRURJQV9WREJPWDIsCisJRldfRE9N QUlOX0lEX01FRElBX1ZEQk9YMywKKwlGV19ET01BSU5fSURfTUVESUFfVkVCT1gwLAorCUZXX0RP TUFJTl9JRF9NRURJQV9WRUJPWDEsCiAKIAlGV19ET01BSU5fSURfQ09VTlQKIH07CiAKIGVudW0g Zm9yY2V3YWtlX2RvbWFpbnMgewotCUZPUkNFV0FLRV9SRU5ERVIgPSBCSVQoRldfRE9NQUlOX0lE X1JFTkRFUiksCi0JRk9SQ0VXQUtFX0JMSVRURVIgPSBCSVQoRldfRE9NQUlOX0lEX0JMSVRURVIp LAotCUZPUkNFV0FLRV9NRURJQQk9IEJJVChGV19ET01BSU5fSURfTUVESUEpLAotCUZPUkNFV0FL RV9BTEwgPSAoRk9SQ0VXQUtFX1JFTkRFUiB8Ci0JCQkgRk9SQ0VXQUtFX0JMSVRURVIgfAotCQkJ IEZPUkNFV0FLRV9NRURJQSkKKwlGT1JDRVdBS0VfUkVOREVSCT0gQklUKEZXX0RPTUFJTl9JRF9S RU5ERVIpLAorCUZPUkNFV0FLRV9CTElUVEVSCT0gQklUKEZXX0RPTUFJTl9JRF9CTElUVEVSKSwK KwlGT1JDRVdBS0VfTUVESUEJCT0gQklUKEZXX0RPTUFJTl9JRF9NRURJQSksCisJRk9SQ0VXQUtF X01FRElBX1ZEQk9YMAk9IEJJVChGV19ET01BSU5fSURfTUVESUFfVkRCT1gwKSwKKwlGT1JDRVdB S0VfTUVESUFfVkRCT1gxCT0gQklUKEZXX0RPTUFJTl9JRF9NRURJQV9WREJPWDEpLAorCUZPUkNF V0FLRV9NRURJQV9WREJPWDIJPSBCSVQoRldfRE9NQUlOX0lEX01FRElBX1ZEQk9YMiksCisJRk9S Q0VXQUtFX01FRElBX1ZEQk9YMwk9IEJJVChGV19ET01BSU5fSURfTUVESUFfVkRCT1gzKSwKKwlG T1JDRVdBS0VfTUVESUFfVkVCT1gwCT0gQklUKEZXX0RPTUFJTl9JRF9NRURJQV9WRUJPWDApLAor CUZPUkNFV0FLRV9NRURJQV9WRUJPWDEJPSBCSVQoRldfRE9NQUlOX0lEX01FRElBX1ZFQk9YMSks CisKKwlGT1JDRVdBS0VfQUxMID0gQklUKEZXX0RPTUFJTl9JRF9DT1VOVCkgLSAxCiB9OwogCiBz dHJ1Y3QgaW50ZWxfdW5jb3JlX2Z1bmNzIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L3NlbGZ0ZXN0cy9pbnRlbF91bmNvcmUuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0 ZXN0cy9pbnRlbF91bmNvcmUuYwppbmRleCAyZjYzNjc2NDMxNzEuLmY3NmYyNTk3ZGY1YyAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2ludGVsX3VuY29yZS5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF91bmNvcmUuYwpAQCAtNjEs MjAgKzYxLDMwIEBAIHN0YXRpYyBpbnQgaW50ZWxfZndfdGFibGVfY2hlY2soY29uc3Qgc3RydWN0 IGludGVsX2ZvcmNld2FrZV9yYW5nZSAqcmFuZ2VzLAogCiBzdGF0aWMgaW50IGludGVsX3NoYWRv d190YWJsZV9jaGVjayh2b2lkKQogewotCWNvbnN0IGk5MTVfcmVnX3QgKnJlZyA9IGdlbjhfc2hh ZG93ZWRfcmVnczsKLQl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3QgeworCQljb25zdCBpOTE1X3Jl Z190ICpyZWdzOworCQl1bnNpZ25lZCBpbnQgc2l6ZTsKKwl9IHJlZ19saXN0c1tdID0geworCQl7 IGdlbjhfc2hhZG93ZWRfcmVncywgQVJSQVlfU0laRShnZW44X3NoYWRvd2VkX3JlZ3MpIH0sCisJ CXsgZ2VuMTFfc2hhZG93ZWRfcmVncywgQVJSQVlfU0laRShnZW4xMV9zaGFkb3dlZF9yZWdzKSB9 LAorCX07CisJY29uc3QgaTkxNV9yZWdfdCAqcmVnOworCXVuc2lnbmVkIGludCBpLCBqOwogCXMz MiBwcmV2OwogCi0JZm9yIChpID0gMCwgcHJldiA9IC0xOyBpIDwgQVJSQVlfU0laRShnZW44X3No YWRvd2VkX3JlZ3MpOyBpKyssIHJlZysrKSB7Ci0JCXUzMiBvZmZzZXQgPSBpOTE1X21taW9fcmVn X29mZnNldCgqcmVnKTsKKwlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShyZWdfbGlzdHMpOyAr K2opIHsKKwkJcmVnID0gcmVnX2xpc3RzW2pdLnJlZ3M7CisJCWZvciAoaSA9IDAsIHByZXYgPSAt MTsgaSA8IHJlZ19saXN0c1tqXS5zaXplOyBpKyssIHJlZysrKSB7CisJCQl1MzIgb2Zmc2V0ID0g aTkxNV9tbWlvX3JlZ19vZmZzZXQoKnJlZyk7CiAKLQkJaWYgKHByZXYgPj0gKHMzMilvZmZzZXQp IHsKLQkJCXByX2VycigiJXM6IGVudHJ5WyVkXTooJXgpIGlzIGJlZm9yZSBwcmV2aW91cyAoJXgp XG4iLAotCQkJICAgICAgIF9fZnVuY19fLCBpLCBvZmZzZXQsIHByZXYpOwotCQkJcmV0dXJuIC1F SU5WQUw7Ci0JCX0KKwkJCWlmIChwcmV2ID49IChzMzIpb2Zmc2V0KSB7CisJCQkJcHJfZXJyKCIl czogZW50cnlbJWRdOigleCkgaXMgYmVmb3JlIHByZXZpb3VzICgleClcbiIsCisJCQkJICAgICAg IF9fZnVuY19fLCBpLCBvZmZzZXQsIHByZXYpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQog Ci0JCXByZXYgPSBvZmZzZXQ7CisJCQlwcmV2ID0gb2Zmc2V0OworCQl9CiAJfQogCiAJcmV0dXJu IDA7CkBAIC05MCw2ICsxMDAsNyBAQCBpbnQgaW50ZWxfdW5jb3JlX21vY2tfc2VsZnRlc3RzKHZv aWQpCiAJCXsgX192bHZfZndfcmFuZ2VzLCBBUlJBWV9TSVpFKF9fdmx2X2Z3X3JhbmdlcyksIGZh bHNlIH0sCiAJCXsgX19jaHZfZndfcmFuZ2VzLCBBUlJBWV9TSVpFKF9fY2h2X2Z3X3Jhbmdlcyks IGZhbHNlIH0sCiAJCXsgX19nZW45X2Z3X3JhbmdlcywgQVJSQVlfU0laRShfX2dlbjlfZndfcmFu Z2VzKSwgdHJ1ZSB9LAorCQl7IF9fZ2VuMTFfZndfcmFuZ2VzLCBBUlJBWV9TSVpFKF9fZ2VuMTFf ZndfcmFuZ2VzKSwgdHJ1ZSB9LAogCX07CiAJaW50IGVyciwgaTsKIAotLSAKMi4xNC4xCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFp bGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK