From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0A993893A2 for ; Fri, 26 Apr 2019 16:50:26 +0000 (UTC) From: Ville Syrjala Date: Fri, 26 Apr 2019 19:50:23 +0300 Message-Id: <20190426165023.5647-1-ville.syrjala@linux.intel.com> In-Reply-To: <20190418194043.5184-5-ville.syrjala@linux.intel.com> References: <20190418194043.5184-5-ville.syrjala@linux.intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v2 5/5] tests/kms_big_fb: Make sure huge fbs work correctly List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org List-ID: RnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KCkFk ZCB2YXJpb3VzIHRlc3RzIHRvIGV4Y2VyY2lzZSBodWdlIGZyYW1lYnVmZmVycy4gRmlyc3Qgc29t ZSBiYXNpYwpzYW5pdHkgY2hlY2tzIHRoYXQgdGhlIGtlcm5lbCBhY2NlcHRzL3JlamVjdHMgZ29v ZC9iYWQgYWRkZmIyIGlvY3RscywKYW5kIGZpbmFsbHkgYWN0dWFsIHNjYW5vdXQgdGVzdHMgdG8g bWFrZSBzdXJlIHdlIHNjYW4gb3V0IHRoZSBjb3JyZWN0CnRoaW5nIHdoZW4gcGFubmluZyBhcm91 bmQgaW5zaWRlIGxhcmdlIGZyYW1lYnVmZmVycy4KClRoZSBpbXBsZW1lbnRhdGlvbiBpcyBpOTE1 IHNwZWNpZmljIGZvciBub3cgc2luY2UgSSBjaG9zZSB0byB1c2UKcmVuZGVyY29weSB3aGVuIGdl bmVyYXRpbmcgdGhlIGZyYW1lYnVmZmVyIGNvbnRlbnRzLiBVc2luZyB0aGUgbm9ybWFsCmNhaXJv IHN0dWZmIHdhcyBqdXN0IHRvbyBzbG93IHdoZW4gZGVhbGluZyB3aXRoIDFHaUIgZnJhbWVidWZm ZXJzLgpJdCBzaG91bGRuJ3QgYmUgdG9vIGhhcmQgdG8gcGx1ZyBpbiBzb21lIG90aGVyIG1lY2hh bmlzbXMgaWYgc29tZW9uZQplbHNlIHdhbnRzIHRvIHJldXNlIHRoaXMgdGVzdC4KCnYyOiBBZGQg aWd0X3JlcXVpcmUoZm9ybWF0K21vZCkgZm9yIHRoZSBhZGRmYi9vdmVyZmxvdyB0ZXN0cwogICAg VW5zZXQgcGxhbmUgZmIgYWZ0ZXIgVEVTVF9PTkxZIGZhaWwKICAgIExpbWl0IG1heCBmYiB0byBh dCBtb3N0IDEvMiBSQU0gb3IgR1BVIGFkZHJlc3Mgc3BhY2UKICAgIFR3ZWFrIGNvb3JkcyB0byBh dm9pZCBmYWlscyB3aXRoIDY0YnBwIGxpbmVhciB3aXRoIDRrIHNjcmVlbgogICAgTWFrZSBjb29y ZHMgZXZlbiBmb3IgOTAvMjcwIHJvdGF0ZWQgMTZicHAKICAgIFN0b3JlIGJwcCBhcyB1aW50OF90 IGluc3RlYWQgb2Ygd2FzdGluZyBhbiBlbnRpcmUgY2hhcioKClNpZ25lZC1vZmYtYnk6IFZpbGxl IFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+Ci0tLQogdGVzdHMvTWFr ZWZpbGUuc291cmNlcyB8ICAgMSArCiB0ZXN0cy9rbXNfYmlnX2ZiLmMgICAgIHwgNTk4ICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiB0ZXN0cy9tZXNvbi5idWlsZCAg ICAgIHwgICAxICsKIDMgZmlsZXMgY2hhbmdlZCwgNjAwIGluc2VydGlvbnMoKykKIGNyZWF0ZSBt b2RlIDEwMDY0NCB0ZXN0cy9rbXNfYmlnX2ZiLmMKCmRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmls ZS5zb3VyY2VzIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwppbmRleCA3ZjkyMWY2YzU5ODguLjJk NWM5MjllMzJmYyAxMDA2NDQKLS0tIGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcworKysgYi90ZXN0 cy9NYWtlZmlsZS5zb3VyY2VzCkBAIC0yNyw2ICsyNyw3IEBAIFRFU1RTX3Byb2dzID0gXAogCWtt c19hdG9taWNfaW50ZXJydXB0aWJsZSBcCiAJa21zX2F0b21pY190cmFuc2l0aW9uIFwKIAlrbXNf YXZhaWxhYmxlX21vZGVzX2NyYyBcCisJa21zX2JpZ19mYiBcCiAJa21zX2J1c3kgXAogCWttc19j Y3MgXAogCWttc19jb2xvciBcCmRpZmYgLS1naXQgYS90ZXN0cy9rbXNfYmlnX2ZiLmMgYi90ZXN0 cy9rbXNfYmlnX2ZiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5k YzU0NjdhZDI0MTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9rbXNfYmlnX2ZiLmMKQEAgLTAs MCArMSw1OTggQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgor ICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBh bnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29j aWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBp biB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGlt aXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxp c2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhl IFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJl IGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lv biBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNs dWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29m dHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQg V0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBC VVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICog RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElO IE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBM SUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVU SEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcK KyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRI RSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaW5j bHVkZSAiaWd0LmgiCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+Cisj aW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworSUdUX1RFU1RfREVTQ1JJ UFRJT04oIlRlc3QgYmlnIGZyYW1lYnVmZmVycyIpOworCit0eXBlZGVmIHN0cnVjdCB7CisJaW50 IGRybV9mZDsKKwlpZ3RfZGlzcGxheV90IGRpc3BsYXk7CisJZW51bSBwaXBlIHBpcGU7CisJaWd0 X291dHB1dF90ICpvdXRwdXQ7CisJaWd0X3BsYW5lX3QgKnBsYW5lOworCWlndF9waXBlX2NyY190 ICpwaXBlX2NyYzsKKwlzdHJ1Y3QgaWd0X2ZiIHNtYWxsX2ZiLCBiaWdfZmI7CisJdWludDMyX3Qg Zm9ybWF0OworCXVpbnQ2NF90IG1vZGlmaWVyOworCWludCB3aWR0aCwgaGVpZ2h0OworCWlndF9y b3RhdGlvbl90IHJvdGF0aW9uOworCWludCBtYXhfZmJfd2lkdGgsIG1heF9mYl9oZWlnaHQ7CisJ dWludDY0X3QgcmFtX3NpemUsIGFwZXJfc2l6ZTsKKwlpZ3RfcmVuZGVyX2NvcHlmdW5jX3QgcmVu ZGVyX2NvcHk7CisJZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyOworCXN0cnVjdCBpbnRlbF9iYXRj aGJ1ZmZlciAqYmF0Y2g7Cit9IGRhdGFfdDsKKworc3RhdGljIHZvaWQgaW5pdF9idWYoZGF0YV90 ICpkYXRhLAorCQkgICAgIHN0cnVjdCBpZ3RfYnVmICpidWYsCisJCSAgICAgY29uc3Qgc3RydWN0 IGlndF9mYiAqZmIsCisJCSAgICAgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpZ3RfYXNzZXJ0X2Vx KGZiLT5vZmZzZXRzWzBdLCAwKTsKKworCWJ1Zi0+Ym8gPSBnZW1faGFuZGxlX3RvX2xpYmRybV9i byhkYXRhLT5idWZtZ3IsIGRhdGEtPmRybV9mZCwKKwkJCQkJICBuYW1lLCBmYi0+Z2VtX2hhbmRs ZSk7CisJYnVmLT50aWxpbmcgPSBpZ3RfZmJfbW9kX3RvX3RpbGluZyhmYi0+bW9kaWZpZXIpOwor CWJ1Zi0+c3RyaWRlID0gZmItPnN0cmlkZXNbMF07CisJYnVmLT5icHAgPSBmYi0+cGxhbmVfYnBw WzBdOworCWJ1Zi0+c2l6ZSA9IGZiLT5zaXplOworfQorCitzdGF0aWMgdm9pZCBmaW5pX2J1Zihz dHJ1Y3QgaWd0X2J1ZiAqYnVmKQoreworCWRybV9pbnRlbF9ib191bnJlZmVyZW5jZShidWYtPmJv KTsKK30KKworc3RhdGljIHZvaWQgY29weV9wYXR0ZXJuKGRhdGFfdCAqZGF0YSwKKwkJCSBzdHJ1 Y3QgaWd0X2ZiICpkc3RfZmIsIGludCBkeCwgaW50IGR5LAorCQkJIHN0cnVjdCBpZ3RfZmIgKnNy Y19mYiwgaW50IHN4LCBpbnQgc3ksCisJCQkgaW50IHcsIGludCBoKQoreworCXN0cnVjdCBpZ3Rf YnVmIHNyYyA9IHt9LCBkc3QgPSB7fTsKKworCWluaXRfYnVmKGRhdGEsICZzcmMsIHNyY19mYiwg ImJpZyBmYiByZW5kZXJjb3B5IHNyYyIpOworCWluaXRfYnVmKGRhdGEsICZkc3QsIGRzdF9mYiwg ImJpZyBmYiByZW5kZXJjb3B5IGRzdCIpOworCisJZ2VtX3NldF9kb21haW4oZGF0YS0+ZHJtX2Zk LCBkc3RfZmItPmdlbV9oYW5kbGUsCisJCSAgICAgICBJOTE1X0dFTV9ET01BSU5fR1RULCBJOTE1 X0dFTV9ET01BSU5fR1RUKTsKKwlnZW1fc2V0X2RvbWFpbihkYXRhLT5kcm1fZmQsIHNyY19mYi0+ Z2VtX2hhbmRsZSwKKwkJICAgICAgIEk5MTVfR0VNX0RPTUFJTl9HVFQsIDApOworCisJZGF0YS0+ cmVuZGVyX2NvcHkoZGF0YS0+YmF0Y2gsIE5VTEwsICZzcmMsIHN4LCBzeSwgdywgaCwgJmRzdCwg ZHgsIGR5KTsKKworCWZpbmlfYnVmKCZkc3QpOworCWZpbmlfYnVmKCZzcmMpOworfQorCitzdGF0 aWMgdm9pZCBnZW5lcmF0ZV9wYXR0ZXJuKGRhdGFfdCAqZGF0YSwKKwkJCSAgICAgc3RydWN0IGln dF9mYiAqZmIsCisJCQkgICAgIGludCB3LCBpbnQgaCkKK3sKKwlzdHJ1Y3QgaWd0X2ZiIHBhdF9m YjsKKworCWlndF9jcmVhdGVfcGF0dGVybl9mYihkYXRhLT5kcm1fZmQsIHcsIGgsCisJCQkgICAg ICBkYXRhLT5mb3JtYXQsIGRhdGEtPm1vZGlmaWVyLAorCQkJICAgICAgJnBhdF9mYik7CisKKwlm b3IgKGludCB5ID0gMDsgeSA8IGZiLT5oZWlnaHQ7IHkgKz0gaCkgeworCQlmb3IgKGludCB4ID0g MDsgeCA8IGZiLT53aWR0aDsgeCArPSB3KSB7CisJCQljb3B5X3BhdHRlcm4oZGF0YSwgZmIsIHgs IHksCisJCQkJICAgICAmcGF0X2ZiLCAwLCAwLAorCQkJCSAgICAgcGF0X2ZiLndpZHRoLCBwYXRf ZmIuaGVpZ2h0KTsKKwkJCXcrKzsKKwkJCWgrKzsKKwkJfQorCX0KKworCWlndF9yZW1vdmVfZmIo ZGF0YS0+ZHJtX2ZkLCAmcGF0X2ZiKTsKK30KKworc3RhdGljIHZvaWQgbWF4X2ZiX3NpemUoZGF0 YV90ICpkYXRhLCBpbnQgKndpZHRoLCBpbnQgKmhlaWdodCwKKwkJCXVpbnQzMl90IGZvcm1hdCwg dWludDY0X3QgbW9kaWZpZXIpCit7CisJdW5zaWduZWQgaW50IHN0cmlkZTsKKwl1aW50NjRfdCBz aXplOworCWludCBpID0gMDsKKworCSp3aWR0aCA9IGRhdGEtPm1heF9mYl93aWR0aDsKKwkqaGVp Z2h0ID0gZGF0YS0+bWF4X2ZiX2hlaWdodDsKKworCWlndF9jYWxjX2ZiX3NpemUoZGF0YS0+ZHJt X2ZkLCAqd2lkdGgsICpoZWlnaHQsCisJCQkgZm9ybWF0LCBtb2RpZmllciwgJnNpemUsICZzdHJp ZGUpOworCisJLyoKKwkgKiBMaW1pdCB0aGUgYmlnIGZiIHNpemUgdG8gYXQgbW9zdCBoYWxmIHRo ZSBSQU0gYm9yIGhhbGYKKwkgKiB0aGUgYXBlcnR1cmUgc2l6ZS4gQ291bGQgZ28gYSBiaXQgaGln aGVyIEkgc3VwcG9zZSBzaW5jZQorCSAqIHdlIHNob3VsZG4ndCBuZWVkIG1vcmUgdGhhbiBvbmUg YmlnIGZiIGF0IGEgdGltZS4KKwkgKi8KKwl3aGlsZSAoc2l6ZSA+IGRhdGEtPnJhbV9zaXplIC8g MiB8fCBzaXplID4gZGF0YS0+YXBlcl9zaXplIC8gMikgeworCQlpZiAoaSsrICYgMSkKKwkJCSp3 aWR0aCA+Pj0gMTsKKwkJZWxzZQorCQkJKmhlaWdodCA+Pj0gMTsKKworCQlpZ3RfY2FsY19mYl9z aXplKGRhdGEtPmRybV9mZCwgKndpZHRoLCAqaGVpZ2h0LAorCQkJCSBmb3JtYXQsIG1vZGlmaWVy LCAmc2l6ZSwgJnN0cmlkZSk7CisJfQorCisJaWd0X2luZm8oIk1heCB1c2FibGUgZnJhbWVidWZm ZXIgc2l6ZSBmb3IgZm9ybWF0ICJJR1RfRk9STUFUX0ZNVCIgLyBtb2RpZmllciAweCUiUFJJeDY0 IjogJWR4JWRcbiIsCisJCSBJR1RfRk9STUFUX0FSR1MoZm9ybWF0KSwgbW9kaWZpZXIsCisJCSAq d2lkdGgsICpoZWlnaHQpOworfQorCitzdGF0aWMgYm9vbCB0ZXN0X3BsYW5lKGRhdGFfdCAqZGF0 YSkKK3sKKwlpZ3RfcGxhbmVfdCAqcGxhbmUgPSBkYXRhLT5wbGFuZTsKKwlzdHJ1Y3QgaWd0X2Zi ICpzbWFsbF9mYiA9ICZkYXRhLT5zbWFsbF9mYjsKKwlzdHJ1Y3QgaWd0X2ZiICpiaWdfZmIgPSAm ZGF0YS0+YmlnX2ZiOworCWludCB3ID0gYmlnX2ZiLT53aWR0aCAtIHNtYWxsX2ZiLT53aWR0aDsK KwlpbnQgaCA9IGJpZ19mYi0+aGVpZ2h0IC0gc21hbGxfZmItPmhlaWdodDsKKwlzdHJ1Y3Qgewor CQlpbnQgeCwgeTsKKwl9IGNvb3Jkc1tdID0geworCQkvKiBidW5jaCBvZiBjb29yZGluYXRlcyBw dWxsZWQgb3V0IG9mIHRoaW4gYWlyICovCisJCXsgMCwgMCwgfSwKKwkJeyB3ICogNCAvIDcsIGgg LyA1LCB9LAorCQl7IHcgKiAzIC8gNywgaCAvIDMsIH0sCisJCXsgdyAvIDIsIGggLyAyLCB9LAor CQl7IHcgLyAzLCBoICogMyAvIDQsIH0sCisJCXsgdywgaCwgfSwKKwl9OworCisJaWYgKCFpZ3Rf cGxhbmVfaGFzX2Zvcm1hdF9tb2QocGxhbmUsIGRhdGEtPmZvcm1hdCwgZGF0YS0+bW9kaWZpZXIp KQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZ3RfcGxhbmVfc2V0X3JvdGF0aW9uKHBsYW5lLCBkYXRh LT5yb3RhdGlvbik7CisJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihwbGFuZSwgMCwgMCk7CisKKwlm b3IgKGludCBpID0gMDsgaSA8IEFSUkFZX1NJWkUoY29vcmRzKTsgaSsrKSB7CisJCWlndF9jcmNf dCBzbWFsbF9jcmMsIGJpZ19jcmM7CisJCWludCB4ID0gY29vcmRzW2ldLng7CisJCWludCB5ID0g Y29vcmRzW2ldLnk7CisKKwkJLyogSGFyZHdhcmUgbGltaXRhdGlvbiAqLworCQlpZiAoZGF0YS0+ Zm9ybWF0ID09IERSTV9GT1JNQVRfUkdCNTY1ICYmCisJCSAgICAoZGF0YS0+cm90YXRpb24gPT0g SUdUX1JPVEFUSU9OXzkwIHx8CisJCSAgICAgZGF0YS0+cm90YXRpb24gPT0gSUdUX1JPVEFUSU9O XzI3MCkpIHsKKwkJCXggJj0gfjE7CisJCQl5ICY9IH4xOworCQl9CisKKwkJLyoKKwkJICogTWFr ZSBhIDE6MSBjb3B5IG9mIHRoZSBkZXNpcmVkIHBhcnQgb2YgdGhlIGJpZyBmYgorCQkgKiByYXRo ZXIgdGhhbiB0cnkgdG8gcmVuZGVyIHRoZSBzYW1lIHBhdHRlcm4gKHRyYW5zbGF0ZWQKKwkJICog YWNjb3JkaW5seSkgYWdhaW4gdmlhIGNhaXJvLiBTb21ldGhpbmcgaW4gY2Fpcm8ncworCQkgKiBy ZW5kZXJpbmcgcGlwZWxpbmUgaW50cm9kdWNlcyBzbGlnaHQgZGlmZmVyZW5jZXMgaW50bworCQkg KiB0aGUgcmVzdWx0IGlmIHdlIHRyeSB0aGF0LCBhbmQgc28gdGhlIGNyYyB3aWxsIG5vdCBtYXRj aC4KKwkJICovCisJCWNvcHlfcGF0dGVybihkYXRhLCBzbWFsbF9mYiwgMCwgMCwgYmlnX2ZiLCB4 LCB5LAorCQkJICAgICBzbWFsbF9mYi0+d2lkdGgsIHNtYWxsX2ZiLT5oZWlnaHQpOworCisJCWln dF9wbGFuZV9zZXRfZmIocGxhbmUsIHNtYWxsX2ZiKTsKKwkJaWd0X3BsYW5lX3NldF9zaXplKHBs YW5lLCBkYXRhLT53aWR0aCwgZGF0YS0+aGVpZ2h0KTsKKworCQkvKgorCQkgKiBUcnkgdG8gY2hl Y2sgdGhhdCB0aGUgcm90YXRpb24rZm9ybWF0K21vZGlmaWVyCisJCSAqIGNvbWJvIGlzIHN1cHBv cnRlZC4KKwkJICovCisJCWlmIChpID09IDAgJiYgZGF0YS0+ZGlzcGxheS5pc19hdG9taWMgJiYK KwkJICAgIGlndF9kaXNwbGF5X3RyeV9jb21taXRfYXRvbWljKCZkYXRhLT5kaXNwbGF5LAorCQkJ CQkJICBEUk1fTU9ERV9BVE9NSUNfVEVTVF9PTkxZLAorCQkJCQkJICBOVUxMKSAhPSAwKSB7CisJ CQlpZ3RfcGxhbmVfc2V0X3JvdGF0aW9uKHBsYW5lLCBJR1RfUk9UQVRJT05fMCk7CisJCQlpZ3Rf cGxhbmVfc2V0X2ZiKHBsYW5lLCBOVUxMKTsKKwkJCWlndF9za2lwKCJ1bnN1cHBvcnRlZCBwbGFu ZSBjb25maWd1cmF0aW9uXG4iKTsKKwkJfQorCisJCWlndF9kaXNwbGF5X2NvbW1pdDIoJmRhdGEt PmRpc3BsYXksIGRhdGEtPmRpc3BsYXkuaXNfYXRvbWljID8KKwkJCQkgICAgQ09NTUlUX0FUT01J QyA6IENPTU1JVF9VTklWRVJTQUwpOworCisKKwkJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRh dGEtPnBpcGVfY3JjLCAmc21hbGxfY3JjKTsKKworCQlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBi aWdfZmIpOworCQlpZ3RfZmJfc2V0X3Bvc2l0aW9uKGJpZ19mYiwgcGxhbmUsIHgsIHkpOworCQlp Z3RfZmJfc2V0X3NpemUoYmlnX2ZiLCBwbGFuZSwgc21hbGxfZmItPndpZHRoLCBzbWFsbF9mYi0+ aGVpZ2h0KTsKKwkJaWd0X3BsYW5lX3NldF9zaXplKHBsYW5lLCBkYXRhLT53aWR0aCwgZGF0YS0+ aGVpZ2h0KTsKKwkJaWd0X2Rpc3BsYXlfY29tbWl0MigmZGF0YS0+ZGlzcGxheSwgZGF0YS0+ZGlz cGxheS5pc19hdG9taWMgPworCQkJCSAgICBDT01NSVRfQVRPTUlDIDogQ09NTUlUX1VOSVZFUlNB TCk7CisKKwkJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3JjLCAmYmlnX2Ny Yyk7CisKKwkJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgTlVMTCk7CisKKwkJaWd0X2Fzc2VydF9j cmNfZXF1YWwoJmJpZ19jcmMsICZzbWFsbF9jcmMpOworCisJfQorCisJcmV0dXJuIHRydWU7Cit9 CisKK3N0YXRpYyBib29sIHRlc3RfcGlwZShkYXRhX3QgKmRhdGEpCit7CisJZHJtTW9kZU1vZGVJ bmZvICptb2RlOworCWlndF9wbGFuZV90ICpwcmltYXJ5OworCWludCB3aWR0aCwgaGVpZ2h0Owor CWJvb2wgcmV0ID0gZmFsc2U7CisKKwltb2RlID0gaWd0X291dHB1dF9nZXRfbW9kZShkYXRhLT5v dXRwdXQpOworCisJZGF0YS0+d2lkdGggPSBtb2RlLT5oZGlzcGxheTsKKwlkYXRhLT5oZWlnaHQg PSBtb2RlLT52ZGlzcGxheTsKKworCXdpZHRoID0gbW9kZS0+aGRpc3BsYXk7CisJaGVpZ2h0ID0g bW9kZS0+dmRpc3BsYXk7CisJaWYgKGRhdGEtPnJvdGF0aW9uID09IElHVF9ST1RBVElPTl85MCB8 fAorCSAgICBkYXRhLT5yb3RhdGlvbiA9PSBJR1RfUk9UQVRJT05fMjcwKQorCQlpZ3Rfc3dhcCh3 aWR0aCwgaGVpZ2h0KTsKKworCWlndF9jcmVhdGVfY29sb3JfZmIoZGF0YS0+ZHJtX2ZkLCB3aWR0 aCwgaGVpZ2h0LAorCQkJICAgIGRhdGEtPmZvcm1hdCwgZGF0YS0+bW9kaWZpZXIsCisJCQkgICAg MCwgMSwgMCwgJmRhdGEtPnNtYWxsX2ZiKTsKKworCWlndF9vdXRwdXRfc2V0X3BpcGUoZGF0YS0+ b3V0cHV0LCBkYXRhLT5waXBlKTsKKworCXByaW1hcnkgPSBpZ3Rfb3V0cHV0X2dldF9wbGFuZV90 eXBlKGRhdGEtPm91dHB1dCwgRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSk7CisJaWd0X3BsYW5lX3Nl dF9mYihwcmltYXJ5LCBOVUxMKTsKKworCWlmICghZGF0YS0+ZGlzcGxheS5pc19hdG9taWMpIHsK KwkJc3RydWN0IGlndF9mYiBmYjsKKworCQlpZ3RfY3JlYXRlX2ZiKGRhdGEtPmRybV9mZCwgbW9k ZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5LAorCQkJICAgICAgRFJNX0ZPUk1BVF9YUkdCODg4 OCwgRFJNX0ZPUk1BVF9NT0RfTElORUFSLAorCQkJICAgICAgJmZiKTsKKworCQkvKiBsZWdhY3kg c2V0Y3J0YyBuZWVkcyBhbiBmYiAqLworCQlpZ3RfcGxhbmVfc2V0X2ZiKHByaW1hcnksICZkYXRh LT5zbWFsbF9mYik7CisJCWlndF9kaXNwbGF5X2NvbW1pdDIoJmRhdGEtPmRpc3BsYXksIENPTU1J VF9MRUdBQ1kpOworCisJCWlndF9wbGFuZV9zZXRfZmIocHJpbWFyeSwgTlVMTCk7CisJCWlndF9k aXNwbGF5X2NvbW1pdDIoJmRhdGEtPmRpc3BsYXksIENPTU1JVF9VTklWRVJTQUwpOworCisJCWln dF9yZW1vdmVfZmIoZGF0YS0+ZHJtX2ZkLCAmZmIpOworCX0KKworCWlndF9kaXNwbGF5X2NvbW1p dDIoJmRhdGEtPmRpc3BsYXksIGRhdGEtPmRpc3BsYXkuaXNfYXRvbWljID8KKwkJCSAgICBDT01N SVRfQVRPTUlDIDogQ09NTUlUX1VOSVZFUlNBTCk7CisKKwlkYXRhLT5waXBlX2NyYyA9IGlndF9w aXBlX2NyY19uZXcoZGF0YS0+ZHJtX2ZkLCBkYXRhLT5waXBlLAorCQkJCQkgIElOVEVMX1BJUEVf Q1JDX1NPVVJDRV9BVVRPKTsKKworCWZvcl9lYWNoX3BsYW5lX29uX3BpcGUoJmRhdGEtPmRpc3Bs YXksIGRhdGEtPnBpcGUsIGRhdGEtPnBsYW5lKSB7CisJCXJldCA9IHRlc3RfcGxhbmUoZGF0YSk7 CisJCWlmIChyZXQpCisJCQlicmVhazsKKwl9CisKKwlpZ3RfcGlwZV9jcmNfZnJlZShkYXRhLT5w aXBlX2NyYyk7CisKKwlpZ3Rfb3V0cHV0X3NldF9waXBlKGRhdGEtPm91dHB1dCwgUElQRV9BTlkp OworCWlndF9kaXNwbGF5X2NvbW1pdDIoJmRhdGEtPmRpc3BsYXksIGRhdGEtPmRpc3BsYXkuaXNf YXRvbWljID8KKwkJCSAgICBDT01NSVRfQVRPTUlDIDogQ09NTUlUX1VOSVZFUlNBTCk7CisKKwlp Z3RfcmVtb3ZlX2ZiKGRhdGEtPmRybV9mZCwgJmRhdGEtPnNtYWxsX2ZiKTsKKworCXJldHVybiBy ZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfc2Nhbm91dChkYXRhX3QgKmRhdGEpCit7CisJZm9y X2VhY2hfcGlwZV93aXRoX3ZhbGlkX291dHB1dCgmZGF0YS0+ZGlzcGxheSwgZGF0YS0+cGlwZSwg ZGF0YS0+b3V0cHV0KSB7CisJCWlmICh0ZXN0X3BpcGUoZGF0YSkpCisJCQlyZXR1cm47CisJfQor CisJaWd0X3NraXAoIm5vIHZhbGlkIGNydGMvY29ubmVjdG9yIGNvbWJpbmF0aW9ucyBmb3VuZFxu Iik7Cit9CisKK3N0YXRpYyB2b2lkIHByZXBfZmIoZGF0YV90ICpkYXRhKQoreworCWludCB3aWR0 aCwgaGVpZ2h0OworCisJaWYgKGRhdGEtPmJpZ19mYi5mYl9pZCkKKwkJcmV0dXJuOworCisJbWF4 X2ZiX3NpemUoZGF0YSwgJndpZHRoLCAmaGVpZ2h0LAorCQkgICAgZGF0YS0+Zm9ybWF0LCBkYXRh LT5tb2RpZmllcik7CisKKwlpZ3RfY3JlYXRlX2ZiKGRhdGEtPmRybV9mZCwgd2lkdGgsIGhlaWdo dCwKKwkJICAgICAgZGF0YS0+Zm9ybWF0LCBkYXRhLT5tb2RpZmllciwKKwkJICAgICAgJmRhdGEt PmJpZ19mYik7CisKKwlnZW5lcmF0ZV9wYXR0ZXJuKGRhdGEsICZkYXRhLT5iaWdfZmIsIDY0MCwg NDgwKTsKK30KKworc3RhdGljIHZvaWQgY2xlYW51cF9mYihkYXRhX3QgKmRhdGEpCit7CisJaWd0 X3JlbW92ZV9mYihkYXRhLT5kcm1fZmQsICZkYXRhLT5iaWdfZmIpOworCWRhdGEtPmJpZ19mYi5m Yl9pZCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3NpemVfb3ZlcmZsb3coZGF0YV90ICpk YXRhKQoreworCXVpbnQzMl90IGZiX2lkOworCXVpbnQzMl90IGJvOworCXVpbnQzMl90IG9mZnNl dHNbNF0gPSB7fTsKKwl1aW50MzJfdCBzdHJpZGVzWzRdID0geyAyNTYqMTAyNCwgfTsKKwlpbnQg cmV0OworCisJaWd0X3JlcXVpcmUoaWd0X2Rpc3BsYXlfaGFzX2Zvcm1hdF9tb2QoJmRhdGEtPmRp c3BsYXksCisJCQkJCSAgICAgICBEUk1fRk9STUFUX1hSR0I4ODg4LAorCQkJCQkgICAgICAgZGF0 YS0+bW9kaWZpZXIpKTsKKworCS8qCisJICogVHJ5IHRvIGhpdCBhIHNwZWNpZmljIGludGVnZXIg b3ZlcmZsb3cgaW4gaTkxNSBmYiBzaXplCisJICogY2FsY3VsYXRpb25zLiAyNTZrICogMTZrID09 IDE8PDMyIHdoaWNoIGlzIGNoZWNrZWQKKwkgKiBhZ2FpbnN0IHRoZSBibyBzaXplLiBUaGUgY2hl Y2sgc2hvdWxkIGZhaWwgb24gYWNjb3VudAorCSAqIG9mIHRoZSBibyBiZWluZyBzbWFsbGVyLCBi dXQgZHVlIHRvIHRoZSBvdmVyZmxvdyB0aGUKKwkgKiBjb21wdXRlZCBmYiBzaXplIGlzIDAgYW5k IHRodXMgdGhlIGNoZWNrIG5ldmVyIHRyaXBzLgorCSAqLworCWlndF9yZXF1aXJlKGRhdGEtPm1h eF9mYl93aWR0aCA+PSAxNjM4MyAmJgorCQkgICAgZGF0YS0+bWF4X2ZiX2hlaWdodCA+PSAxNjM4 Myk7CisKKwlibyA9IGdlbV9jcmVhdGUoZGF0YS0+ZHJtX2ZkLCAoMVVMTCA8PCAzMikgLSA0MDk2 KTsKKwlpZ3RfcmVxdWlyZShibyk7CisKKwlyZXQgPSBfX2ttc19hZGRmYihkYXRhLT5kcm1fZmQs IGJvLAorCQkJICAxNjM4MywgMTYzODMsCisJCQkgIERSTV9GT1JNQVRfWFJHQjg4ODgsCisJCQkg IGRhdGEtPm1vZGlmaWVyLAorCQkJICBzdHJpZGVzLCBvZmZzZXRzLCAxLAorCQkJICBEUk1fTU9E RV9GQl9NT0RJRklFUlMsICZmYl9pZCk7CisKKwlpZ3RfYXNzZXJ0X25lcShyZXQsIDApOworCisJ Z2VtX2Nsb3NlKGRhdGEtPmRybV9mZCwgYm8pOworfQorCitzdGF0aWMgdm9pZAordGVzdF9zaXpl X29mZnNldF9vdmVyZmxvdyhkYXRhX3QgKmRhdGEpCit7CisJdWludDMyX3QgZmJfaWQ7CisJdWlu dDMyX3QgYm87CisJdWludDMyX3Qgb2Zmc2V0c1s0XSA9IHt9OworCXVpbnQzMl90IHN0cmlkZXNb NF0gPSB7IDgxOTIsIH07CisJaW50IHJldDsKKworCWlndF9yZXF1aXJlKGlndF9kaXNwbGF5X2hh c19mb3JtYXRfbW9kKCZkYXRhLT5kaXNwbGF5LAorCQkJCQkgICAgICAgRFJNX0ZPUk1BVF9OVjEy LAorCQkJCQkgICAgICAgZGF0YS0+bW9kaWZpZXIpKTsKKworCS8qCisJICogVHJ5IHRvIGEgc3Bl Y2lmaWMgaW50ZWdlciBvdmVyZmxvdyBpbiBpOTE1IGZiIHNpemUKKwkgKiBjYWxjdWxhdGlvbnMu IFRoaXMgdGltZSBpdCdzIG9mZnNldHNbMV0gKyB0aGUgdGlsZQorCSAqIGFsaWduZWQgY2hyb21h IHBsYW5lIHNpemUgdGhhdCBvdmVyZmxvd3MgYW5kCisJICogaW5jb3JyZWN0bHkgcGFzc2VzIHRo ZSBibyBzaXplIGNoZWNrLgorCSAqLworCWlndF9yZXF1aXJlKGlndF9kaXNwbGF5X2hhc19mb3Jt YXRfbW9kKCZkYXRhLT5kaXNwbGF5LAorCQkJCQkgICAgICAgRFJNX0ZPUk1BVF9OVjEyLAorCQkJ CQkgICAgICAgZGF0YS0+bW9kaWZpZXIpKTsKKworCWJvID0gZ2VtX2NyZWF0ZShkYXRhLT5kcm1f ZmQsICgxVUxMIDw8IDMyKSAtIDQwOTYpOworCWlndF9yZXF1aXJlKGJvKTsKKworCW9mZnNldHNb MF0gPSAwOworCW9mZnNldHNbMV0gPSAoMVVMTCA8PCAzMikgLSA4MTkyICogNDA5NjsKKworCXJl dCA9IF9fa21zX2FkZGZiKGRhdGEtPmRybV9mZCwgYm8sCisJCQkgIDgxOTIsIDgxODgsCisJCQkg IERSTV9GT1JNQVRfTlYxMiwKKwkJCSAgZGF0YS0+bW9kaWZpZXIsCisJCQkgIHN0cmlkZXMsIG9m ZnNldHMsIDEsCisJCQkgIERSTV9NT0RFX0ZCX01PRElGSUVSUywgJmZiX2lkKTsKKwlpZ3RfYXNz ZXJ0X25lcShyZXQsIDApOworCisJZ2VtX2Nsb3NlKGRhdGEtPmRybV9mZCwgYm8pOworfQorCitz dGF0aWMgaW50IHJtZmIoaW50IGZkLCB1aW50MzJfdCBpZCkKK3sKKwlpbnQgZXJyOworCisJZXJy ID0gMDsKKwlpZiAoaWd0X2lvY3RsKGZkLCBEUk1fSU9DVExfTU9ERV9STUZCLCAmaWQpKQorCQll cnIgPSAtZXJybm87CisKKwllcnJubyA9IDA7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZv aWQKK3Rlc3RfYWRkZmIoZGF0YV90ICpkYXRhKQoreworCXVpbnQ2NF90IHNpemU7CisJdWludDMy X3QgZmJfaWQ7CisJdWludDMyX3QgYm87CisJdWludDMyX3Qgb2Zmc2V0c1s0XSA9IHt9OworCXVp bnQzMl90IHN0cmlkZXNbNF0gPSB7fTsKKwlpbnQgcmV0OworCisJaWd0X3JlcXVpcmUoaWd0X2Rp c3BsYXlfaGFzX2Zvcm1hdF9tb2QoJmRhdGEtPmRpc3BsYXksCisJCQkJCSAgICAgICBEUk1fRk9S TUFUX1hSR0I4ODg4LAorCQkJCQkgICAgICAgZGF0YS0+bW9kaWZpZXIpKTsKKworCWlndF9jYWxj X2ZiX3NpemUoZGF0YS0+ZHJtX2ZkLAorCQkJIGRhdGEtPm1heF9mYl93aWR0aCwKKwkJCSBkYXRh LT5tYXhfZmJfaGVpZ2h0LAorCQkJIERSTV9GT1JNQVRfWFJHQjg4ODgsCisJCQkgZGF0YS0+bW9k aWZpZXIsCisJCQkgJnNpemUsICZzdHJpZGVzWzBdKTsKKworCWJvID0gZ2VtX2NyZWF0ZShkYXRh LT5kcm1fZmQsIHNpemUpOworCWlndF9yZXF1aXJlKGJvKTsKKworCXJldCA9IF9fa21zX2FkZGZi KGRhdGEtPmRybV9mZCwgYm8sCisJCQkgIGRhdGEtPm1heF9mYl93aWR0aCwKKwkJCSAgZGF0YS0+ bWF4X2ZiX2hlaWdodCwKKwkJCSAgRFJNX0ZPUk1BVF9YUkdCODg4OCwKKwkJCSAgZGF0YS0+bW9k aWZpZXIsCisJCQkgIHN0cmlkZXMsIG9mZnNldHMsIDEsCisJCQkgIERSTV9NT0RFX0ZCX01PRElG SUVSUywgJmZiX2lkKTsKKwlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7CisKKwlybWZiKGRhdGEtPmRy bV9mZCwgZmJfaWQpOworCWdlbV9jbG9zZShkYXRhLT5kcm1fZmQsIGJvKTsKK30KKworc3RhdGlj IGRhdGFfdCBkYXRhOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwl1aW50NjRfdCBtb2RpZmll cjsKKwljb25zdCBjaGFyICpuYW1lOworfSBtb2RpZmllcnNbXSA9IHsKKwl7IERSTV9GT1JNQVRf TU9EX0xJTkVBUiwgImxpbmVhciIsIH0sCisJeyBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCwgIngt dGlsZWQiLCB9LAorCXsgSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQsICJ5LXRpbGVkIiwgfSwKKwl7 IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRCwgInlmLXRpbGVkIiwgfSwKK307CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgeworCXVpbnQzMl90IGZvcm1hdDsKKwl1aW50OF90IGJwcDsKK30gZm9ybWF0 c1tdID0geworCS8qIEZJWE1FIGlndF9mYiBkb2Vzbid0IHN1cHBvcnQgQzggY3VycmVudGx5ICov CisJeyBEUk1fRk9STUFUX0M4LCA4LCB9LAorCXsgRFJNX0ZPUk1BVF9SR0I1NjUsIDE2LCB9LAor CXsgRFJNX0ZPUk1BVF9YUkdCODg4OCwgMzIsIH0sCisJeyBEUk1fRk9STUFUX1hCR1IxNjE2MTYx NkYsIDY0LCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJaWd0X3JvdGF0aW9uX3Qg cm90YXRpb247CisJdWludDE2X3QgYW5nbGU7Cit9IHJvdGF0aW9uc1tdID0geworCXsgSUdUX1JP VEFUSU9OXzAsIDAsIH0sCisJeyBJR1RfUk9UQVRJT05fOTAsIDkwLCB9LAorCXsgSUdUX1JPVEFU SU9OXzE4MCwgMTgwLCB9LAorCXsgSUdUX1JPVEFUSU9OXzI3MCwgMjcwLCB9LAorfTsKKworaWd0 X21haW4KK3sKKwlpZ3RfZml4dHVyZSB7CisJCWRybU1vZGVSZXNQdHIgcmVzOworCQl1aW50MzJf dCBkZXZpZDsKKworCQlpZ3Rfc2tpcF9vbl9zaW11bGF0aW9uKCk7CisKKwkJZGF0YS5kcm1fZmQg PSBkcm1fb3Blbl9kcml2ZXJfbWFzdGVyKERSSVZFUl9JTlRFTCk7CisKKwkJaWd0X3JlcXVpcmUo aXNfaTkxNV9kZXZpY2UoZGF0YS5kcm1fZmQpKTsKKworCQlkZXZpZCA9IGludGVsX2dldF9kcm1f ZGV2aWQoZGF0YS5kcm1fZmQpOworCisJCWttc3Rlc3Rfc2V0X3Z0X2dyYXBoaWNzX21vZGUoKTsK KworCQlpZ3RfcmVxdWlyZV9waXBlX2NyYyhkYXRhLmRybV9mZCk7CisJCWlndF9kaXNwbGF5X3Jl cXVpcmUoJmRhdGEuZGlzcGxheSwgZGF0YS5kcm1fZmQpOworCisJCXJlcyA9IGRybU1vZGVHZXRS ZXNvdXJjZXMoZGF0YS5kcm1fZmQpOworCQlpZ3RfYXNzZXJ0KHJlcyk7CisKKwkJZGF0YS5tYXhf ZmJfd2lkdGggPSByZXMtPm1heF93aWR0aDsKKwkJZGF0YS5tYXhfZmJfaGVpZ2h0ID0gcmVzLT5t YXhfaGVpZ2h0OworCisJCWRybU1vZGVGcmVlUmVzb3VyY2VzKHJlcyk7CisKKwkJaWd0X2luZm8o Ik1heCBkcml2ZXIgZnJhbWVidWZmZXIgc2l6ZSAlZHglZFxuIiwKKwkJCSBkYXRhLm1heF9mYl93 aWR0aCwgZGF0YS5tYXhfZmJfaGVpZ2h0KTsKKworCQlkYXRhLnJhbV9zaXplID0gaW50ZWxfZ2V0 X3RvdGFsX3JhbV9tYigpIDw8IDIwOworCQlkYXRhLmFwZXJfc2l6ZSA9IGdlbV9hcGVydHVyZV9z aXplKGRhdGEuZHJtX2ZkKTsKKworCQlpZ3RfaW5mbygiUkFNOiAlIlBSSXU2NCIgTWlCLCBHUFUg YWRkcmVzcyBzcGFjZTogJSJQUklkNjQiIE1pQlxuIiwKKwkJCSBkYXRhLnJhbV9zaXplID4+IDIw LCBkYXRhLmFwZXJfc2l6ZSA+PiAyMCk7CisKKwkJZGF0YS5yZW5kZXJfY29weSA9IGlndF9nZXRf cmVuZGVyX2NvcHlmdW5jKGRldmlkKTsKKwkJaWd0X3JlcXVpcmUoZGF0YS5yZW5kZXJfY29weSk7 CisKKwkJZGF0YS5idWZtZ3IgPSBkcm1faW50ZWxfYnVmbWdyX2dlbV9pbml0KGRhdGEuZHJtX2Zk LCA0MDk2KTsKKwkJZGF0YS5iYXRjaCA9IGludGVsX2JhdGNoYnVmZmVyX2FsbG9jKGRhdGEuYnVm bWdyLCBkZXZpZCk7CisJfQorCisJLyoKKwkgKiBTa2lwIGxpbmVhciBhcyBpdCBkb2Vzbid0IGhp dCB0aGUgb3ZlcmZsb3cgd2Ugd2FudAorCSAqIG9uIGFjY291bnQgb2YgdGhlIHRpbGUgaGVpZ2h0 IGJlaW5nIGVmZmVjdGl2ZWx5IG9uZSwKKwkgKiBhbmQgdGh1cyB0aGUga2Vucm5lbCByb3VuZGlu ZyB1cCB0byB0aGUgbmV4dCB0aWxlCisJICogaGVpZ2h0IHdvbid0IGRvIGFueXRoaW5nLgorCSAq LworCWZvciAoaW50IGkgPSAxOyBpIDwgQVJSQVlfU0laRShtb2RpZmllcnMpOyBpKyspIHsKKwkJ aWd0X3N1YnRlc3RfZigiJXMtYWRkZmItc2l6ZS1vdmVyZmxvdyIsCisJCQkgICAgICBtb2RpZmll cnNbaV0ubmFtZSkgeworCQkJZGF0YS5tb2RpZmllciA9IG1vZGlmaWVyc1tpXS5tb2RpZmllcjsK KwkJCXRlc3Rfc2l6ZV9vdmVyZmxvdygmZGF0YSk7CisJCX0KKwl9CisKKwlmb3IgKGludCBpID0g MTsgaSA8IEFSUkFZX1NJWkUobW9kaWZpZXJzKTsgaSsrKSB7CisJCWlndF9zdWJ0ZXN0X2YoIiVz LWFkZGZiLXNpemUtb2Zmc2V0LW92ZXJmbG93IiwKKwkJCSAgICAgIG1vZGlmaWVyc1tpXS5uYW1l KSB7CisJCQlkYXRhLm1vZGlmaWVyID0gbW9kaWZpZXJzW2ldLm1vZGlmaWVyOworCQkJdGVzdF9z aXplX29mZnNldF9vdmVyZmxvdygmZGF0YSk7CisJCX0KKwl9CisKKwlmb3IgKGludCBpID0gMDsg aSA8IEFSUkFZX1NJWkUobW9kaWZpZXJzKTsgaSsrKSB7CisJCWlndF9zdWJ0ZXN0X2YoIiVzLWFk ZGZiIiwgbW9kaWZpZXJzW2ldLm5hbWUpIHsKKwkJCWRhdGEubW9kaWZpZXIgPSBtb2RpZmllcnNb aV0ubW9kaWZpZXI7CisKKwkJCXRlc3RfYWRkZmIoJmRhdGEpOworCQl9CisJfQorCisJZm9yIChp bnQgaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG1vZGlmaWVycyk7IGkrKykgeworCQlkYXRhLm1vZGlm aWVyID0gbW9kaWZpZXJzW2ldLm1vZGlmaWVyOworCisJCWZvciAoaW50IGogPSAwOyBqIDwgQVJS QVlfU0laRShmb3JtYXRzKTsgaisrKSB7CisJCQlkYXRhLmZvcm1hdCA9IGZvcm1hdHNbal0uZm9y bWF0OworCisJCQlmb3IgKGludCBrID0gMDsgayA8IEFSUkFZX1NJWkUocm90YXRpb25zKTsgaysr KSB7CisJCQkJZGF0YS5yb3RhdGlvbiA9IHJvdGF0aW9uc1trXS5yb3RhdGlvbjsKKworCQkJCWln dF9zdWJ0ZXN0X2YoIiVzLSVkYnBwLXJvdGF0ZS0lZCIsIG1vZGlmaWVyc1tpXS5uYW1lLAorCQkJ CQkgICAgICBmb3JtYXRzW2pdLmJwcCwgcm90YXRpb25zW2tdLmFuZ2xlKSB7CisJCQkJCWlndF9y ZXF1aXJlKGlndF9mYl9zdXBwb3J0ZWRfZm9ybWF0KGRhdGEuZm9ybWF0KSk7CisJCQkJCWlndF9y ZXF1aXJlKGlndF9kaXNwbGF5X2hhc19mb3JtYXRfbW9kKCZkYXRhLmRpc3BsYXksIGRhdGEuZm9y bWF0LCBkYXRhLm1vZGlmaWVyKSk7CisJCQkJCXByZXBfZmIoJmRhdGEpOworCQkJCQl0ZXN0X3Nj YW5vdXQoJmRhdGEpOworCQkJCX0KKwkJCX0KKworCQkJaWd0X2ZpeHR1cmUKKwkJCQljbGVhbnVw X2ZiKCZkYXRhKTsKKwkJfQorCX0KKworCWlndF9maXh0dXJlIHsKKwkJaWd0X2Rpc3BsYXlfZmlu aSgmZGF0YS5kaXNwbGF5KTsKKworCQlpbnRlbF9iYXRjaGJ1ZmZlcl9mcmVlKGRhdGEuYmF0Y2gp OworCQlkcm1faW50ZWxfYnVmbWdyX2Rlc3Ryb3koZGF0YS5idWZtZ3IpOworCX0KK30KZGlmZiAt LWdpdCBhL3Rlc3RzL21lc29uLmJ1aWxkIGIvdGVzdHMvbWVzb24uYnVpbGQKaW5kZXggNzExOTc5 YjRhMWMyLi5hZDg0NDQ4NzUzMDIgMTAwNjQ0Ci0tLSBhL3Rlc3RzL21lc29uLmJ1aWxkCisrKyBi L3Rlc3RzL21lc29uLmJ1aWxkCkBAIC0xNCw2ICsxNCw3IEBAIHRlc3RfcHJvZ3MgPSBbCiAJJ2tt c19hdG9taWNfaW50ZXJydXB0aWJsZScsCiAJJ2ttc19hdG9taWNfdHJhbnNpdGlvbicsCiAJJ2tt c19hdmFpbGFibGVfbW9kZXNfY3JjJywKKwkna21zX2JpZ19mYicsCiAJJ2ttc19idXN5JywKIAkn a21zX2NjcycsCiAJJ2ttc19jb2xvcicsCi0tIAoyLjIxLjAKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxt YW4vbGlzdGluZm8vaWd0LWRldg==