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 3766489350 for ; Thu, 11 Apr 2019 09:40:32 +0000 (UTC) From: Stanislav Lisovskiy Date: Thu, 11 Apr 2019 12:40:26 +0300 Message-Id: <20190411094026.19006-1-stanislav.lisovskiy@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v8] igt/tests: kms_plane_stress: Add plane stress test 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 Cc: stanislav.lisovskiy@intel.com, ville.syrjala@intel.com, martin.peres@intel.com, juha-pekka.heikkila@intel.com List-ID: VGhpcyB0ZXN0IGF0dGVtcHRzIHRvIHV0aWxpemUgYWxsIGNvbm5lY3RlZApvdXRwdXRzIGF0IHRo ZSBzYW1lIHRpbWUsIHVzaW5nIG1heGltdW0gcG9zc2libGUKcmVzb2x1dGlvbiBhbmQgYW1vdW50 IG9mIHBsYW5lcywgdG8gY2hlY2sgd2hldGhlcgp3ZSBhcmUgaGl0aW5nIGFueSBraW5kIG9mIGJh bmR3aWR0aCwgd2F0ZXJtYXJrIG9yCm90aGVyIGxpbWl0YXRpb25zLgoKdjI6IEFkZGVkIGNwdSBh bmQgZ3B1IGxvYWQgdGhyZWFkcywgd2hpY2ggY29uc3VtZQogICAgYWRkaXRpb25hbCBiYW5kd2lk dGguCgp2MzogUmVtb3ZlZCBiaW5hcnkgcGljdHVyZSBmaWxlLCB1c2luZyBwYXR0ZXJuIGZiCiAg ICBpbnN0ZWFkLgoKdjQ6IE1vdmVkIEZCIGNyZWF0aW9uL3JlbW92YWwgdG8gYmV0dGVyIHBsYWNl LgoKdjU6IEZpeGVkIHJlYmFzZSBjb25mbGljdCBhbmQgY2hhbmdlZCAiZmItPnRpbGluZyIKICAg IHRvICJmYi0+bW9kaWZpZXIiLgoKdjY6IFJlbW92ZWQgdW5uZWNlc3NhcnkgbmV3IG1hY3JvIGZv ciBpdGVyYXRpbmcgb24KICAgIHBpcGVzLiBUYWtlbiBpbnRvIHVzZSBpZ3RfZ2V0dGltZSBpbnN0 ZWFkIG9mCiAgICBjbG9ja19nZXR0aW1lLgoKdjc6IFB1dCBmYiByZWluaXQgaW50byBpZ3RfZml4 dHVyZSB0byBhdm9pZCBwcm9ibGVtcy4KICAgIE1vdmUgc3RyZXNzIGZ1bmN0aW9uIHVuZGVyIGln dF9zdWJ0ZXN0LiBSZWxlYXNlIHBsYW5lcywKICAgIHJlbW92ZSByZWR1bmRhbnQgY29tbWl0LCBh c3NlcnQgaWYgbm8gcGxhbmVzIGNhbiBiZSB1c2VkLgoKdjg6IC0gQWRkIGJsaXR0aW5nIGFsc28s IHRvIGhhdmUgbW9yZSBmdW4KICAgIC0gTm93IHVzaW5nIHNlcGFyYXRlIGZyYW1lYnVmZmVyIHBl ciBlYWNoIHBsYW5lLgogICAgLSBGaXhlZCBtYWdpYyBudW1iZXIgZm9yIGJwcCB2YWx1ZShub3cg YmFzZWQgb24gZm9ybWF0KQogICAgLSBTb21lIG9wdGltaXphdGlvbnMsIGxpa2Ugbm90IGFwcGx5 aW5nIHNhbWUgbW9kZSBpZiBpdAogICAgICBoYXNuJ3QgY2hhbmdlLCBhbHNvIGRvbid0IGRvIGhp Z2hlc3QgbW9kZSBzZWFyY2ggb24KICAgICAgZWFjaCBpdGVyYXRpb24sIGp1c3QgY2FsY3VsYXRl IG9uY2UgYW5kIHVzZSBpdC4KICAgIC0gU29tZSBjb2RlIHJlZmFjdG9yaW5nOiBleHRyYWN0ZWQg c29tZSBsZW5ndGh5IGNvZGUKICAgICAgdG8gc2VwYXJhdGUgZnVuY3Rpb25zLgoKU2lnbmVkLW9m Zi1ieTogU3RhbmlzbGF2IExpc292c2tpeSA8c3RhbmlzbGF2Lmxpc292c2tpeUBpbnRlbC5jb20+ Ci0tLQogdGVzdHMvTWFrZWZpbGUuc291cmNlcyAgIHwgICAxICsKIHRlc3RzL2ttc19wbGFuZV9z dHJlc3MuYyB8IDY3NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHRl c3RzL21lc29uLmJ1aWxkICAgICAgICB8ICAgMSArCiAzIGZpbGVzIGNoYW5nZWQsIDY3OCBpbnNl cnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMva21zX3BsYW5lX3N0cmVzcy5jCgpk aWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJj ZXMKaW5kZXggNzFjY2YwMGEuLjlkMDRkODg4IDEwMDY0NAotLS0gYS90ZXN0cy9NYWtlZmlsZS5z b3VyY2VzCisrKyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKQEAgLTU5LDYgKzU5LDcgQEAgVEVT VFNfcHJvZ3MgPSBcCiAJa21zX3BsYW5lX2xvd3JlcyBcCiAJa21zX3BsYW5lX211bHRpcGxlIFwK IAlrbXNfcGxhbmVfc2NhbGluZyBcCisJa21zX3BsYW5lX3N0cmVzcyBcCiAJa21zX3Byb3BfYmxv YiBcCiAJa21zX3Byb3BlcnRpZXMgXAogCWttc19wc3IgXApkaWZmIC0tZ2l0IGEvdGVzdHMva21z X3BsYW5lX3N0cmVzcy5jIGIvdGVzdHMva21zX3BsYW5lX3N0cmVzcy5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwLi41NWQyMmRhMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3Rz L2ttc19wbGFuZV9zdHJlc3MuYwpAQCAtMCwwICsxLDY3NiBAQAorIC8qCisgKiBDb3B5cmlnaHQg wqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdy YW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5 IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhl ICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmlj dGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2Us IGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisg KiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNv bnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVj dCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdo dCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAor ICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50 aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElT IFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Mg T1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9S UyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBP UiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwg VE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNU SU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElO IFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSAiaWd0LmgiCisjaW5jbHVkZSAiaWd0X3Jh bmQuaCIKKyNpbmNsdWRlICJkcm10ZXN0LmgiCisjaW5jbHVkZSAic3dfc3luYy5oIgorI2luY2x1 ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4K KyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUu aD4KKyNpbmNsdWRlIDxwb2xsLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorCisjaWZuZGVmIERS TV9DQVBfQ1VSU09SX1dJRFRICisjZGVmaW5lIERSTV9DQVBfQ1VSU09SX1dJRFRIIDB4OAorI2Vu ZGlmCisjaWZuZGVmIERSTV9DQVBfQ1VSU09SX0hFSUdIVAorI2RlZmluZSBEUk1fQ0FQX0NVUlNP Ul9IRUlHSFQgMHg5CisjZW5kaWYKKworCitkcm1Nb2RlTW9kZUluZm8gdWhkX21vZGVfNjBoeiA9 IHsKKwkubmFtZSA9ICIzODQweDIxNjBANjBoeiIsCisJLnZyZWZyZXNoID0gNjAsCisJLmNsb2Nr ID0gMTQyNjY3KjIsCisJLmhkaXNwbGF5ID0gMzg0MCwKKwkuaHN5bmNfc3RhcnQgPSAxOTM2KjIs CisJLmhzeW5jX2VuZCA9IDE5NTIqMiwKKwkuaHRvdGFsID0gMjEwNCoyLAorCS52ZGlzcGxheSA9 IDIxNjAsCisJLnZzeW5jX3N0YXJ0ID0gMTA4MyoyLAorCS52c3luY19lbmQgPSAxMDk3KjIsCisJ LnZ0b3RhbCA9IDExMjgqMiwKKwkuZmxhZ3MgPSAweGEsCit9OworCisjZGVmaW5lIE5fRk9STUFU UyAzCitzdGF0aWMgY29uc3QgdWludDMyX3QgZm9ybWF0c1tOX0ZPUk1BVFNdID0geworCURSTV9G T1JNQVRfWFJHQjg4ODgsCisJRFJNX0ZPUk1BVF9SR0I1NjUsCisJRFJNX0ZPUk1BVF9YUkdCMjEw MTAxMCwKK307CisKKyNkZWZpbmUgTl9USUxJTkdfTUVUSE9EUyAzCitzdGF0aWMgY29uc3QgdWlu dDY0X3QgdGlsaW5nc1tOX1RJTElOR19NRVRIT0RTXSA9IHsKKwlEUk1fRk9STUFUX01PRF9MSU5F QVIsCisJSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQsCisJSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQs Cit9OworCitzdGF0aWMgY29uc3QgY2hhciAqZm9ybWF0X3N0cihpbnQgZm9ybWF0X2luZGV4KQor eworCXN3aXRjaCAoZm9ybWF0c1tmb3JtYXRfaW5kZXhdKSB7CisJY2FzZSBEUk1fRk9STUFUX1JH QjU2NToKKwkJcmV0dXJuICJyZ2I1NjUiOworCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKKwkJ cmV0dXJuICJ4cmdiODg4OCI7CisJY2FzZSBEUk1fRk9STUFUX1hSR0IyMTAxMDEwOgorCQlyZXR1 cm4gInhyZ2IyMTAxMDEwIjsKKwlkZWZhdWx0OgorCQlpZ3RfYXNzZXJ0KGZhbHNlKTsKKwl9Cit9 CisKK3N0YXRpYyBjb25zdCBjaGFyICp0aWxpbmdfc3RyKGludCB0aWxpbmdfaW5kZXgpCit7CisJ c3dpdGNoICh0aWxpbmdzW3RpbGluZ19pbmRleF0pIHsKKwljYXNlIERSTV9GT1JNQVRfTU9EX0xJ TkVBUjoKKwkJcmV0dXJuICJ1bnRpbGVkIjsKKwljYXNlIEk5MTVfRk9STUFUX01PRF9YX1RJTEVE OgorCQlyZXR1cm4gInh0aWxlZCI7CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRDoKKwkJ cmV0dXJuICJ5dGlsZWQiOworCWRlZmF1bHQ6CisJCWlndF9hc3NlcnQoZmFsc2UpOworCX0KK30K KworCisjZGVmaW5lIE1BWF9DT1JFUyA4CisjZGVmaW5lIE1BWF9QTEFORVMgMTYKKworc3RydWN0 IGRhdGE7CisKK3N0cnVjdCB0aHJlYWRfY29udGV4dCB7CisJc3RydWN0IGRhdGEgKmRhdGE7CisJ aW50IGlkOworCXZvaWQgKmJ1ZjE7CisJdm9pZCAqYnVmMjsKK307CisKK3N0cnVjdCByZWN0IHsK KwlpbnQgeDsKKwlpbnQgeTsKKwlpbnQgdzsKKwlpbnQgaDsKK307CisKK3N0cnVjdCBncHVfY29u dGV4dCB7CisJc3RydWN0IGRhdGEgKmRhdGE7CisJaW50IHBpcGU7CisJaW50IGNvbG9yOworCXN0 cnVjdCByZWN0IGJsdF9yZWN0OworfTsKKworc3RydWN0IGRhdGEgeworCWludCBkcm1fZmQ7CisJ aWd0X2Rpc3BsYXlfdCBkaXNwbGF5OworCWludCBudW1fcGxhbmVzW0lHVF9NQVhfUElQRVNdOwor CXVpbnQzMl90IGZvcm1hdDsKKwl1aW50NjRfdCBtb2RpZmllcjsKKwl1aW50MzJfdCBkZXZpZDsK Kwlkcm1faW50ZWxfYnVmbWdyICpidWZtZ3I7CisJZHJtTW9kZU1vZGVJbmZvICpsYXN0X21vZGVb SUdUX01BWF9QSVBFU107CisJc3RydWN0IGlndF9mYiBmYltJR1RfTUFYX1BJUEVTICogTUFYX1BM QU5FU107CisJc3RydWN0IGlndF9mYiBjdXJzb3JfZmJbSUdUX01BWF9QSVBFU107CisJcHRocmVh ZF90IGNwdV90aHJlYWRbTUFYX0NPUkVTXTsKKwlib29sIGNwdV90aHJlYWRfc3RvcFtNQVhfQ09S RVNdOworCXN0cnVjdCB0aHJlYWRfY29udGV4dCBjcHVfY29udGV4dFtNQVhfQ09SRVNdOworCXN0 cnVjdCBncHVfY29udGV4dCBncHVfY29udGV4dFtJR1RfTUFYX1BJUEVTXTsKK307CisKKworc3Ry dWN0IGJhc2VfY3JjIHsKKwlib29sIHNldDsKKwlpZ3RfY3JjX3QgY3JjOworfTsKKworaWd0X3Bp cGVfY3JjX3QgKnBpcGVfY3JjOworCisjZGVmaW5lIEJVRl9TSVpFIDEyOCoxMDI0KjEwMjQKKwor c3RhdGljIHZvaWQgKmNwdV9sb2FkKHZvaWQgKmQpCit7CisJY2hhciAqYnVmMSwgKmJ1ZjI7CisJ c3RydWN0IHRocmVhZF9jb250ZXh0ICpjb250ZXh0ID0gKHN0cnVjdCB0aHJlYWRfY29udGV4dCAq KWQ7CisJc3RydWN0IGRhdGEgKmRhdGEgPSBjb250ZXh0LT5kYXRhOworCisJYnVmMSA9IGNvbnRl eHQtPmJ1ZjE7CisJYnVmMiA9IGNvbnRleHQtPmJ1ZjI7CisKKwlkYXRhLT5jcHVfdGhyZWFkX3N0 b3BbY29udGV4dC0+aWRdID0gZmFsc2U7CisKKwl3aGlsZSghZGF0YS0+Y3B1X3RocmVhZF9zdG9w W2NvbnRleHQtPmlkXSkgeworCQltZW1jcHkoYnVmMSwgYnVmMiwgQlVGX1NJWkUpOworCQltZW1j cHkoYnVmMiwgYnVmMSwgQlVGX1NJWkUpOworCX0KKworCXJldHVybiBOVUxMOworfQorCisKK3N0 YXRpYyB2b2lkIHNjcmF0Y2hfYnVmX2luaXQoc3RydWN0IGlndF9idWYgKmJ1ZiwKKwkJCWRybV9p bnRlbF9ibyAqYm8sIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IHN0cmlkZSwgaW50IHRpbGlu ZywgaW50IGJwcCkKK3sKKwlidWYtPmJvID0gYm87CisJYnVmLT5zdHJpZGUgPSBzdHJpZGU7CisJ YnVmLT50aWxpbmcgPSB0aWxpbmc7CisJYnVmLT5zaXplID0gd2lkdGggKiBoZWlnaHQgKiBicHAg LyA4OworCWJ1Zi0+YnBwID0gYnBwOworfQorCisKK3N0YXRpYyB2b2lkIGdwdV9sb2FkKHN0cnVj dCBncHVfY29udGV4dCAqZ3B1X2NvbnRleHQsIGludCBwbGFuZV9pbmRleCkKK3sKKwlzdHJ1Y3Qg aW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoID0gTlVMTDsKKwlzdHJ1Y3QgaWd0X2J1ZiBkc3Q7CisJ c3RydWN0IGRhdGEgKmRhdGEgPSBncHVfY29udGV4dC0+ZGF0YTsKKwlpbnQgcGlwZSA9IGdwdV9j b250ZXh0LT5waXBlOworCWlndF9maWxsZnVuY190IGdwZ3B1X2ZpbGwgPSBOVUxMOworCWRybV9p bnRlbF9ibyAqYm87CisJc3RydWN0IGlndF9mYiAqZmIgPSAmZGF0YS0+ZmJbcGlwZSAqIE1BWF9Q TEFORVMgKyBwbGFuZV9pbmRleF07CisJaW50IHJlY3RfZGl2aXNvcjsKKwlpbnQgcmVjdF93aWR0 aDsKKwlpbnQgcmVjdF9oZWlnaHQ7CisJaW50IGZyYW1lX3dpZHRoID0gZmItPndpZHRoOworCWlu dCBmcmFtZV9oZWlnaHQgPSBmYi0+aGVpZ2h0IC8gMjsKKwlpbnQgYnl0ZXNfcGVyX3BpeGVsID0g ZmItPnBsYW5lX2JwcFswXSAvIDg7CisKKwlpZiAoIWRhdGEtPmRldmlkKSB7CisJCWRhdGEtPmRl dmlkID0gaW50ZWxfZ2V0X2RybV9kZXZpZChkYXRhLT5kcm1fZmQpOworCQlpZ3RfcmVxdWlyZV9n ZW0oZGF0YS0+ZHJtX2ZkKTsKKworCQlkYXRhLT5idWZtZ3IgPSBkcm1faW50ZWxfYnVmbWdyX2dl bV9pbml0KGRhdGEtPmRybV9mZCwgNDA5Nik7CisJCWlndF9hc3NlcnQoZGF0YS0+YnVmbWdyKTsK Kwl9CisKKwlncGdwdV9maWxsID0gaWd0X2dldF9ncGdwdV9maWxsZnVuYyhkYXRhLT5kZXZpZCk7 CisKKwlpZ3RfcmVxdWlyZV9mKGdwZ3B1X2ZpbGwsCisJICAgICAgIm5vIGdwZ3B1LWZpbGwgZnVu Y3Rpb25cbiIpOworCisJYmF0Y2ggPSBpbnRlbF9iYXRjaGJ1ZmZlcl9hbGxvYyhkYXRhLT5idWZt Z3IsIGRhdGEtPmRldmlkKTsKKwlpZ3RfYXNzZXJ0KGJhdGNoKTsKKworCWJvID0gZ2VtX2hhbmRs ZV90b19saWJkcm1fYm8oZGF0YS0+YnVmbWdyLCBkYXRhLT5kcm1fZmQsICIiLCBmYi0+Z2VtX2hh bmRsZSk7CisKKwlzY3JhdGNoX2J1Zl9pbml0KCZkc3QsIGJvLCBmcmFtZV93aWR0aCwgZnJhbWVf aGVpZ2h0LCBmYi0+c3RyaWRlc1swXSwgZmItPm1vZGlmaWVyLCBmYi0+cGxhbmVfYnBwWzBdKTsK KworCWdwZ3B1X2ZpbGwoYmF0Y2gsCisJICAgJmRzdCwgMCwgMCwgKGZyYW1lX3dpZHRoICogYnl0 ZXNfcGVyX3BpeGVsKSwgZnJhbWVfaGVpZ2h0LAorCSAgIGdwdV9jb250ZXh0LT5jb2xvcik7CisK KwlncHVfY29udGV4dC0+Y29sb3IgKz0gMHgxMDsKKworCWludGVsX2JhdGNoYnVmZmVyX2ZsdXNo KGJhdGNoKTsKKwlpbnRlbF9iYXRjaGJ1ZmZlcl9mcmVlKGJhdGNoKTsKKwlkcm1faW50ZWxfYm9f dW5yZWZlcmVuY2UoYm8pOworCisJLyogZGl2aWRlIGF0IGxlYXN0IGJ5IDIgYW5kIHVwIHRvIDgg Ki8KKwlyZWN0X2Rpdmlzb3IgPSAxIDw8IChoYXJzX3BldHJ1c2thX2Y1NF8xX3JhbmRvbV91bnNh ZmVfbWF4KDMpICsgMSk7CisKKwlyZWN0X3dpZHRoID0gZnJhbWVfd2lkdGggLyByZWN0X2Rpdmlz b3I7CisJcmVjdF9oZWlnaHQgPSBmcmFtZV9oZWlnaHQgLyByZWN0X2Rpdmlzb3I7CisKKwlncHVf Y29udGV4dC0+Ymx0X3JlY3QueCA9IChncHVfY29udGV4dC0+Ymx0X3JlY3QueCArIHJlY3Rfd2lk dGgpICUgKGZyYW1lX3dpZHRoIC0gcmVjdF93aWR0aCk7CisJZ3B1X2NvbnRleHQtPmJsdF9yZWN0 LnkgPSAoZ3B1X2NvbnRleHQtPmJsdF9yZWN0LnkgKyByZWN0X2hlaWdodCkgJSAoZnJhbWVfaGVp Z2h0IC0gcmVjdF9oZWlnaHQpOworCisJaWd0X2RyYXdfcmVjdChkYXRhLT5kcm1fZmQsIGRhdGEt PmJ1Zm1nciwgTlVMTCwKKwkJICAgZmItPmdlbV9oYW5kbGUsIGZyYW1lX3dpZHRoICogZnJhbWVf aGVpZ2h0ICogYnl0ZXNfcGVyX3BpeGVsLCBmYi0+d2lkdGggKiBieXRlc19wZXJfcGl4ZWwsCisJ CSAgIElHVF9EUkFXX0JMVCwgZ3B1X2NvbnRleHQtPmJsdF9yZWN0LngsIGdwdV9jb250ZXh0LT5i bHRfcmVjdC55LAorCQkgICByZWN0X3dpZHRoLCByZWN0X2hlaWdodCwgMHhmZiwgZmItPnBsYW5l X2JwcFswXSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgcGlwZV9zZWxlY3QoZW51bSBw aXBlIHBpcGUpCit7CisJaWYgKHBpcGUgPiAxKQorCQlyZXR1cm4gcGlwZSA8PCBEUk1fVkJMQU5L X0hJR0hfQ1JUQ19TSElGVDsKKwllbHNlIGlmIChwaXBlID4gMCkKKwkJcmV0dXJuIERSTV9WQkxB TktfU0VDT05EQVJZOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBn ZXRfdmJsYW5rKGludCBmZCwgZW51bSBwaXBlIHBpcGUsIHVuc2lnbmVkIGZsYWdzKQoreworCXVu aW9uIGRybV93YWl0X3ZibGFuayB2Ymw7CisKKwltZW1zZXQoJnZibCwgMCwgc2l6ZW9mKHZibCkp OworCXZibC5yZXF1ZXN0LnR5cGUgPSBEUk1fVkJMQU5LX1JFTEFUSVZFIHwgcGlwZV9zZWxlY3Qo cGlwZSkgfCBmbGFnczsKKwlpZiAoZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9XQUlUX1ZCTEFOSywg JnZibCkpCisJCXJldHVybiAwOworCisJcmV0dXJuIHZibC5yZXBseS5zZXF1ZW5jZTsKK30KKwor CitzdGF0aWMgaW50IHBsYW5lX3N0cmVzcyhzdHJ1Y3QgZGF0YSAqZGF0YSwgaWd0X291dHB1dF90 ICpvdXRwdXQsIGVudW0gcGlwZSBwaXBlLCBkcm1Nb2RlTW9kZUluZm8gKm1vZGUsIGJvb2wgZ3B1 KQoreworCWlndF9wbGFuZV90ICpwbGFuZTsKKwl1aW50NjRfdCBjdXJzb3Jfd2lkdGgsIGN1cnNv cl9oZWlnaHQ7CisJaW50IGk7CisJaW50IHJldDsKKwlpZ3RfY3JjX3QgY3JjLCBjcmMyOworCWJv b2wgbmV3X21vZGUgPSBmYWxzZTsKKworCWlmIChkYXRhLT5sYXN0X21vZGVbcGlwZV0gIT0gbW9k ZSkgeworCQlpZ3Rfb3V0cHV0X292ZXJyaWRlX21vZGUob3V0cHV0LCBtb2RlKTsKKwkJaWd0X291 dHB1dF9zZXRfcGlwZShvdXRwdXQsIHBpcGUpOworCisJCXJldCA9IGlndF9kaXNwbGF5X3RyeV9j b21taXRfYXRvbWljKCZkYXRhLT5kaXNwbGF5LAorCQkJCURSTV9NT0RFX0FUT01JQ19URVNUX09O TFkgfCBEUk1fTU9ERV9BVE9NSUNfQUxMT1dfTU9ERVNFVCwgTlVMTCk7CisJCWlmIChyZXQpIHsK KwkJCWlndF93YXJuKCJDb3VsZCBub3QgY29tbWl0IG1vZGU6IFxuIik7CisJCQlrbXN0ZXN0X2R1 bXBfbW9kZShtb2RlKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlpZ3RfZGlzcGxheV9jb21t aXQyKCZkYXRhLT5kaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKKwkJZGF0YS0+bGFzdF9tb2RlW3Bp cGVdID0gbW9kZTsKKwkJbmV3X21vZGUgPSB0cnVlOworCX0KKworCS8qCisJICogTG9va3MgbGlr ZSB3ZSBjYW4ndCBoYXZlIHBsYW5lcyBvbiB0aGF0IHBpcGUgYXQgYWxsCisJICovCisJaWYgKCFk YXRhLT5udW1fcGxhbmVzW3BpcGVdKQorCQlyZXR1cm4gMDsKKworCW1vZGUgPSBpZ3Rfb3V0cHV0 X2dldF9tb2RlKG91dHB1dCk7CisKKwlkb19vcl9kaWUoZHJtR2V0Q2FwKGRhdGEtPmRybV9mZCwg RFJNX0NBUF9DVVJTT1JfV0lEVEgsICZjdXJzb3Jfd2lkdGgpKTsKKwlkb19vcl9kaWUoZHJtR2V0 Q2FwKGRhdGEtPmRybV9mZCwgRFJNX0NBUF9DVVJTT1JfSEVJR0hULCAmY3Vyc29yX2hlaWdodCkp OworCisJaWYgKCFkYXRhLT5jdXJzb3JfZmJbcGlwZSAqIE1BWF9QTEFORVNdLmZiX2lkKSB7CisJ CWlndF9jcmVhdGVfY29sb3JfZmIoZGF0YS0+ZHJtX2ZkLCBjdXJzb3Jfd2lkdGgsIGN1cnNvcl9o ZWlnaHQsCisJCQkJRFJNX0ZPUk1BVF9BUkdCODg4OCwKKwkJCQlMT0NBTF9EUk1fRk9STUFUX01P RF9OT05FLAorCQkJCQkxLjAsMC4wLDAuMCwKKwkJCQkJJmRhdGEtPmN1cnNvcl9mYltwaXBlXSk7 CisJfQorCisKKwlmb3IgKGkgPSAwO2kgPCBkYXRhLT5udW1fcGxhbmVzW3BpcGVdO2krKykgewor CQlpZiAoIWRhdGEtPmZiW3BpcGUgKiBNQVhfUExBTkVTICsgaV0uZmJfaWQpIHsKKwkJCWlndF9j cmVhdGVfY29sb3JfcGF0dGVybl9mYihkYXRhLT5kcm1fZmQsIG1vZGUtPmhkaXNwbGF5LCBtb2Rl LT52ZGlzcGxheSwKKwkJCSAgICBkYXRhLT5mb3JtYXQsCisJCQkgICAgZGF0YS0+bW9kaWZpZXIs CisJCQkgICAgMC4wLCAxLjAsIDAuMCwgJmRhdGEtPmZiW3BpcGUgKiBNQVhfUExBTkVTICsgaV0p OworCQl9CisJfQorCisJaWYgKG5ld19tb2RlKSB7CisJCWkgPSAwOworCQlmb3JfZWFjaF9wbGFu ZV9vbl9waXBlKCZkYXRhLT5kaXNwbGF5LCBwaXBlLCBwbGFuZSkgeworCQkJaW50IHBsYW5lX3dp ZHRoLCBwbGFuZV9oZWlnaHQ7CisJCQlpZiAocGxhbmUtPnR5cGUgPT0gRFJNX1BMQU5FX1RZUEVf Q1VSU09SKSB7CisJCQkJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgJmRhdGEtPmN1cnNvcl9mYltw aXBlXSk7CisJCQkJaWd0X2ZiX3NldF9zaXplKCZkYXRhLT5jdXJzb3JfZmJbcGlwZV0sIHBsYW5l LCBjdXJzb3Jfd2lkdGgsIGN1cnNvcl9oZWlnaHQpOworCQkJCWlndF9wbGFuZV9zZXRfc2l6ZShw bGFuZSwgY3Vyc29yX3dpZHRoLCBjdXJzb3JfaGVpZ2h0KTsKKwkJCQlwbGFuZV93aWR0aCA9IGN1 cnNvcl93aWR0aDsKKwkJCQlwbGFuZV9oZWlnaHQgPSBjdXJzb3JfaGVpZ2h0OworCQkJfSBlbHNl IHsKKwkJCQlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCAmZGF0YS0+ZmJbcGlwZSAqIE1BWF9QTEFO RVMgKyBpXSk7CisJCQkJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihwbGFuZSwgMCwgMCk7CisJCQkJ aWd0X2ZiX3NldF9zaXplKCZkYXRhLT5mYltwaXBlICogTUFYX1BMQU5FUyArIGldLCBwbGFuZSwg bW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5KTsKKwkJCQlpZ3RfcGxhbmVfc2V0X3NpemUo cGxhbmUsIG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSk7CisJCQkJcGxhbmVfd2lkdGgg PSBtb2RlLT5oZGlzcGxheTsKKwkJCQlwbGFuZV9oZWlnaHQgPSBtb2RlLT52ZGlzcGxheTsKKwkJ CX0KKworCQkJcmV0ID0gaWd0X2Rpc3BsYXlfdHJ5X2NvbW1pdF9hdG9taWMoJmRhdGEtPmRpc3Bs YXksIERSTV9NT0RFX0FUT01JQ19URVNUX09OTFkgfCBEUk1fTU9ERV9BVE9NSUNfQUxMT1dfTU9E RVNFVCwgTlVMTCk7CisJCQl3aGlsZSAocmV0KSB7CisJCQkJaWYgKHBsYW5lX3dpZHRoIDw9IGN1 cnNvcl93aWR0aCB8fCBwbGFuZV9oZWlnaHQgPD0gY3Vyc29yX2hlaWdodCkKKwkJCQkJYnJlYWs7 CisJCQkJcGxhbmVfd2lkdGggLz0gMjsKKwkJCQlwbGFuZV9oZWlnaHQgLz0gMjsKKwkJCQlpZ3Rf cGxhbmVfc2V0X3NpemUocGxhbmUsIHBsYW5lX3dpZHRoLCBwbGFuZV9oZWlnaHQpOworCQkJCWln dF9pbmZvKCJSZWR1Y2VkIHBsYW5lICVkIHNpemUgdG8gJWR4JWRcbiIsIHBsYW5lLT5pbmRleCwg cGxhbmVfd2lkdGgsIHBsYW5lX2hlaWdodCk7CisJCQkJcmV0ID0gaWd0X2Rpc3BsYXlfdHJ5X2Nv bW1pdF9hdG9taWMoJmRhdGEtPmRpc3BsYXksIERSTV9NT0RFX0FUT01JQ19URVNUX09OTFkgfCBE Uk1fTU9ERV9BVE9NSUNfQUxMT1dfTU9ERVNFVCwgTlVMTCk7CisJCQl9CisJCQlpZiAocmV0KSB7 CisJCQkJaWd0X2luZm8oIlBsYW5lICVkIHBpcGUgJWQgdHJ5IGNvbW1pdCBmYWlsZWQsIGV4aXRp bmdcbiIsIGksIHBpcGUpOworCQkJCWRhdGEtPm51bV9wbGFuZXNbcGlwZV0gPSBpOworCQkJCS8q CisJCQkJICogV2UgaGF2ZSBub3cgZGV0ZXJtaW5lZCBtYXggYW1vdW50IG9mIGZ1bGwgc2l6ZWQg cGxhbmVzLCB3ZSB3aWxsIGp1c3QKKwkJCQkgKiBrZWVwIGl0IGluIG1pbmQgYW5kIGJlIHNtYXJ0 ZXIgbmV4dCB0aW1lLiBBbHNvIGxldHMgcmVtb3ZlIHVubmVlZGVkIGZicy4KKwkJCQkgKi8KKwkJ CQlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBOVUxMKTsKKwkJCQl3aGlsZSAoaSA8IE1BWF9QTEFO RVMpIHsKKwkJCQkJaWd0X3JlbW92ZV9mYihkYXRhLT5kaXNwbGF5LmRybV9mZCwgJmRhdGEtPmZi W3BpcGUgKiBNQVhfUExBTkVTICsgaV0pOworCQkJCQlkYXRhLT5mYltwaXBlICogTUFYX1BMQU5F UyArIGldLmZiX2lkID0gMDsKKwkJCQkJaSsrOworCQkJCX0KKwkJCQlpID0gZGF0YS0+bnVtX3Bs YW5lc1twaXBlXTsKKwkJCX0KKworCQkJaWYgKCsraSA+PSBkYXRhLT5udW1fcGxhbmVzW3BpcGVd KQorCQkJCWJyZWFrOworCQl9CisKKwkJaWd0X2Rpc3BsYXlfY29tbWl0MigmZGF0YS0+ZGlzcGxh eSwgQ09NTUlUX0FUT01JQyk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGRhdGEtPm51bV9wbGFu ZXNbcGlwZV07IGkrKykgeworCQlpZiAoZ3B1KSB7CisJCQlncHVfbG9hZCgmZGF0YS0+Z3B1X2Nv bnRleHRbcGlwZV0sIGkpOworCQl9CisJfQorCisJZ2V0X3ZibGFuayhkYXRhLT5kaXNwbGF5LmRy bV9mZCwgcGlwZSwgRFJNX1ZCTEFOS19ORVhUT05NSVNTKTsKKworCWlndF9waXBlX2NyY19jb2xs ZWN0X2NyYyhwaXBlX2NyYywgJmNyYyk7CisKKwlnZXRfdmJsYW5rKGRhdGEtPmRpc3BsYXkuZHJt X2ZkLCBwaXBlLCBEUk1fVkJMQU5LX05FWFRPTk1JU1MpOworCisJaWd0X3BpcGVfY3JjX2NvbGxl Y3RfY3JjKHBpcGVfY3JjLCAmY3JjMik7CisJaWd0X2Fzc2VydF9jcmNfZXF1YWwoJmNyYywgJmNy YzIpOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGRybU1vZGVNb2RlSW5mbyAqIGZpbmRf aGlnaGVzdF9tb2RlKGRybU1vZGVDb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlkcm1Nb2RlTW9k ZUluZm8gKmhpZ2hlc3RfbW9kZSA9IE5VTEw7CisJaW50IGo7CisKKwlmb3IgKGogPSAwOyBqIDwg Y29ubmVjdG9yLT5jb3VudF9tb2RlczsgaisrKSB7CisJCWlmICghaGlnaGVzdF9tb2RlKSB7CisJ CQloaWdoZXN0X21vZGUgPSAmY29ubmVjdG9yLT5tb2Rlc1tqXTsKKwkJfQorCQllbHNlIGlmIChj b25uZWN0b3ItPm1vZGVzW2pdLnZkaXNwbGF5ICYmIGNvbm5lY3Rvci0+bW9kZXNbal0uaGRpc3Bs YXkpIHsKKwkJCWlmIChoaWdoZXN0X21vZGUtPmhkaXNwbGF5IDwgY29ubmVjdG9yLT5tb2Rlc1tq XS5oZGlzcGxheSkKKwkJCQloaWdoZXN0X21vZGUgPSAmY29ubmVjdG9yLT5tb2Rlc1tqXTsKKwkJ CX0KKwl9CisKKwlyZXR1cm4gaGlnaGVzdF9tb2RlOworfQorCit0eXBlZGVmIGRybU1vZGVDb25u ZWN0b3IgKiBkcm1Nb2RlQ29ubmVjdG9yUHRyOworCitzdGF0aWMgdm9pZCBmaWxsX2Nvbm5lY3Rv cl90b19waXBlX2FycmF5KHN0cnVjdCBkYXRhICpkYXRhLCBkcm1Nb2RlUmVzICptb2RlX3Jlc291 cmNlcywgZHJtTW9kZUNvbm5lY3RvclB0ciAqY29ubmVjdG9ycykKK3sKKwlpbnQgcGlwZSA9IDAs IGNydGNfaWQ7CisJaWd0X291dHB1dF90ICpvdXRwdXQ7CisJaW50IGk7CisKKwltZW1zZXQoY29u bmVjdG9ycywgMCwgc2l6ZW9mKGRybU1vZGVDb25uZWN0b3JQdHIpICogSUdUX01BWF9QSVBFUyk7 CisKKwlmb3JfZWFjaF9jb25uZWN0ZWRfb3V0cHV0KCZkYXRhLT5kaXNwbGF5LCBvdXRwdXQpIHsK KwkJY3J0Y19pZCA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCBtb2RlX3Jlc291cmNlcy0+Y291bnRf Y29ubmVjdG9yczsgaSsrKSB7CisJCQlkcm1Nb2RlQ29ubmVjdG9yICpjb25uZWN0b3I7CisKKwkJ CWNvbm5lY3RvciA9IGRybU1vZGVHZXRDb25uZWN0b3JDdXJyZW50KGRhdGEtPmRybV9mZCwKKwkJ CQkgICAgICAgbW9kZV9yZXNvdXJjZXMtPmNvbm5lY3RvcnNbaV0pOworCisJCQlpZiAoIWNvbm5l Y3RvcikgeworCQkJCWlndF93YXJuKCJjb3VsZCBub3QgZ2V0IGNvbm5lY3RvciAlaTogJXNcbiIs CisJCQkJCW1vZGVfcmVzb3VyY2VzLT5jb25uZWN0b3JzW2ldLCBzdHJlcnJvcihlcnJubykpOwor CQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlpZiAoY29ubmVjdG9yLT5jb25uZWN0aW9uID09IERS TV9NT0RFX0NPTk5FQ1RFRCkgeworCQkJCWlmIChjcnRjX2lkID09IHBpcGUpIHsKKwkJCQkJY29u bmVjdG9yc1twaXBlXSA9IChkcm1Nb2RlQ29ubmVjdG9yUHRyKWNvbm5lY3RvcjsKKwkJCQl9CisJ CQkJY3J0Y19pZCsrOworCQkJfQorCQkJZWxzZQorCQkJCWRybU1vZGVGcmVlQ29ubmVjdG9yKGNv bm5lY3Rvcik7CisJCX0KKwkJaWYgKCgrK3BpcGUpID09IElHVF9NQVhfUElQRVMpCisJCQlicmVh azsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJlbGVhc2VfY29ubmVjdG9ycyhkcm1Nb2RlQ29ubmVj dG9yUHRyICpjb25uZWN0b3JzKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBJR1RfTUFY X1BJUEVTOyBpKyspIHsKKwkJaWYgKGNvbm5lY3RvcnNbaV0pCisJCQlkcm1Nb2RlRnJlZUNvbm5l Y3Rvcihjb25uZWN0b3JzW2ldKTsKKwl9Cit9CisKKyNkZWZpbmUgTUlOX0RVUkFUSU9OX1NFQyA1 LjAwCisjZGVmaW5lIE1JTl9JVEVSQVRJT05TIDIwCisKK3N0YXRpYyB2b2lkIHN0cmVzcyhzdHJ1 Y3QgZGF0YSAqZGF0YSwgYm9vbCBvdmVycmlkZSwgYm9vbCBncHUsIGludCBmb3JtYXRfaWR4LCBp bnQgdGlsaW5nX2lkeCkKK3sKKwlzdHJ1Y3QgdGltZXNwZWMgc3RhcnQsIGVuZDsKKwlpZ3Rfb3V0 cHV0X3QgKm91dHB1dDsKKwlpbnQgcmV0OworCWludCBwaXBlOworCWludCBpdGVyYXRpb25zID0g MDsKKwlib29sIG5lZWRfY29udGludWU7CisJZHJtTW9kZU1vZGVJbmZvICpoaWdoZXN0X21vZGVb SUdUX01BWF9QSVBFU107CisJZHJtTW9kZUNvbm5lY3RvclB0ciBjb25uZWN0b3JzW0lHVF9NQVhf UElQRVNdOworCWRybU1vZGVSZXMgKm1vZGVfcmVzb3VyY2VzID0gZHJtTW9kZUdldFJlc291cmNl cyhkYXRhLT5kcm1fZmQpOworCisJaWYgKCFtb2RlX3Jlc291cmNlcykgeworCQlpZ3Rfd2Fybigi ZHJtTW9kZUdldFJlc291cmNlcyBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworCQly ZXR1cm47CisJfQorCisJbWVtc2V0KGhpZ2hlc3RfbW9kZSwgMCwgc2l6ZW9mKGRybU1vZGVNb2Rl SW5mbyAqKSAqIElHVF9NQVhfUElQRVMpOworCisJZmlsbF9jb25uZWN0b3JfdG9fcGlwZV9hcnJh eShkYXRhLCBtb2RlX3Jlc291cmNlcywgY29ubmVjdG9ycyk7CisKKwlpZ3RfZ2V0dGltZSgmc3Rh cnQpOworCisJZG8geworCQkvKgorCQkgKiBJbmNyZW1lbnQgcGlwZSBvbmx5IGZvciBjb25uZWN0 ZWQgb3V0cHV0cywKKwkJICogZm9yIGVhY2ggY29ubmVjdGVkIG91dHB1dCB3ZSBzaG91bGQgYXNz aWduIGEKKwkJICogZGlmZmVyZW50IHBpcGUuCisJCSAqLworCQlwaXBlID0gMDsKKwkJZm9yX2Vh Y2hfY29ubmVjdGVkX291dHB1dCgmZGF0YS0+ZGlzcGxheSwgb3V0cHV0KSB7CisJCQlkcm1Nb2Rl Q29ubmVjdG9yICpjb25uZWN0b3IgPSAoZHJtTW9kZUNvbm5lY3RvciAqKWNvbm5lY3RvcnNbcGlw ZV07CisKKwkJCWlmICghaGlnaGVzdF9tb2RlW3BpcGVdKSB7CisJCQkJaWYgKCFvdmVycmlkZSAm JiBjb25uZWN0b3ItPmNvdW50X21vZGVzKSB7CisJCQkJCWhpZ2hlc3RfbW9kZVtwaXBlXSA9IGZp bmRfaGlnaGVzdF9tb2RlKGNvbm5lY3Rvcik7CisJCQkJfQorCQkJCWVsc2UKKwkJCQkJaGlnaGVz dF9tb2RlW3BpcGVdID0gJnVoZF9tb2RlXzYwaHo7CisJCQl9CisKKwkJCWRhdGEtPmZvcm1hdCA9 IGZvcm1hdHNbZm9ybWF0X2lkeF07CisJCQlkYXRhLT5tb2RpZmllciA9IHRpbGluZ3NbdGlsaW5n X2lkeF07CisKKwkJCS8qCisJCQkgKiBVbnRpbCB3ZSBmaWd1cmUgb3V0IG1heGltdW0gYW1vdW50 IG9mIHBsYW5lcywKKwkJCSAqIHVzZSB0aGUgb25lIGRlY2xhcmVkIGJ5IGtlcm5lbC4KKwkJCSAq LworCQkJaWYgKGRhdGEtPm51bV9wbGFuZXNbcGlwZV0gPT0gLTEpCisJCQkJZGF0YS0+bnVtX3Bs YW5lc1twaXBlXSA9IGRhdGEtPmRpc3BsYXkucGlwZXNbcGlwZV0ubl9wbGFuZXM7CisKKwkJCWln dF9hc3NlcnRfZihkYXRhLT5kaXNwbGF5LnBpcGVzW3BpcGVdLm5fcGxhbmVzIDwgTUFYX1BMQU5F UywKKwkJCQkiQ3VycmVudGx5IHdlIGRvbid0IHN1cHBvcnQgbW9yZSB0aGFuICVkIHBsYW5lcyEi LCBNQVhfUExBTkVTKTsKKworCQkJaWd0X2luZm8oIlBpcGUgJXMgJWQgcGxhbmVzLCB1c2luZyBt b2RlOiIsIGttc3Rlc3RfcGlwZV9uYW1lKHBpcGUpLAorCQkJCQlkYXRhLT5udW1fcGxhbmVzW3Bp cGVdKTsKKworCQkJa21zdGVzdF9kdW1wX21vZGUoaGlnaGVzdF9tb2RlW3BpcGVdKTsKKworCQkJ cGlwZV9jcmMgPSBpZ3RfcGlwZV9jcmNfbmV3KGRhdGEtPmRybV9mZCwgcGlwZSwKKwkJCQlJTlRF TF9QSVBFX0NSQ19TT1VSQ0VfQVVUTyk7CisKKwkJCXJldCA9IHBsYW5lX3N0cmVzcyhkYXRhLCBv dXRwdXQsIHBpcGUsIGhpZ2hlc3RfbW9kZVtwaXBlXSwgZ3B1KTsKKworCQkJaWd0X3BpcGVfY3Jj X2ZyZWUocGlwZV9jcmMpOworCisJCQlpZiAoKytwaXBlID09IElHVF9NQVhfUElQRVMpCisJCQkJ YnJlYWs7CisJCX0KKwkJaWd0X2dldHRpbWUoJmVuZCk7CisJCWl0ZXJhdGlvbnMrKzsKKwkJbmVl ZF9jb250aW51ZSA9IGlndF90aW1lX2VsYXBzZWQoJnN0YXJ0LCAmZW5kKSA8IE1JTl9EVVJBVElP Tl9TRUMgfHwgaXRlcmF0aW9ucyA8IE1JTl9JVEVSQVRJT05TOworCX0gd2hpbGUgKG5lZWRfY29u dGludWUgJiYgIXJldCk7CisKKwlyZWxlYXNlX2Nvbm5lY3RvcnMoY29ubmVjdG9ycyk7CisKKwlk cm1Nb2RlRnJlZVJlc291cmNlcyhtb2RlX3Jlc291cmNlcyk7Cit9CisKKworc3RhdGljIHZvaWQg dGVzdChzdHJ1Y3QgZGF0YSAqZGF0YSwgYm9vbCBvdmVycmlkZSwgYm9vbCBjcHUsIGJvb2wgZ3B1 KQoreworCWludCBpLCBqOworCWludCBudW1iZXJfb2ZfY29yZXMgPSBtaW4oc3lzY29uZihfU0Nf TlBST0NFU1NPUlNfT05MTiksIE1BWF9DT1JFUyk7CisJaW50IGZvcm1hdF9pZHgsIHRpbGluZ19p ZHg7CisKKwlpZ3RfZml4dHVyZSB7CisJCWZvciAoaSA9IDA7IGkgPCBJR1RfTUFYX1BJUEVTOyBp KyspIHsKKwkJCWZvciAoaiA9IDA7aiA8IE1BWF9QTEFORVM7IGorKykKKwkJCQlkYXRhLT5mYltp ICogTUFYX1BMQU5FUyArIGpdLmZiX2lkID0gMDsKKwkJCWRhdGEtPmN1cnNvcl9mYltpXS5mYl9p ZCA9IDA7CisJCQlkYXRhLT5udW1fcGxhbmVzW2ldID0gLTE7CisJCQlkYXRhLT5sYXN0X21vZGVb aV0gPSBOVUxMOworCQl9CisJCWlmIChncHUpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBJR1RfTUFY X1BJUEVTOyBpKyspIHsKKwkJCQlkYXRhLT5ncHVfY29udGV4dFtpXS5kYXRhID0gZGF0YTsKKwkJ CQlkYXRhLT5ncHVfY29udGV4dFtpXS5waXBlID0gaTsKKwkJCQlkYXRhLT5ncHVfY29udGV4dFtp XS5ibHRfcmVjdC54ID0gMDsKKwkJCQlkYXRhLT5ncHVfY29udGV4dFtpXS5ibHRfcmVjdC55ID0g MDsKKwkJCQlkYXRhLT5ncHVfY29udGV4dFtpXS5ibHRfcmVjdC53ID0gMDsKKwkJCQlkYXRhLT5n cHVfY29udGV4dFtpXS5ibHRfcmVjdC5oID0gMDsKKwkJCX0KKwkJfQorCisJCWlmIChjcHUpIHsK KwkJCWZvciAoaSA9IDA7IGkgPCBudW1iZXJfb2ZfY29yZXM7aSsrKSB7CisJCQkJZGF0YS0+Y3B1 X2NvbnRleHRbaV0uYnVmMSA9IG1hbGxvYyhCVUZfU0laRSk7CisJCQkJZGF0YS0+Y3B1X2NvbnRl eHRbaV0uYnVmMiA9IG1hbGxvYyhCVUZfU0laRSk7CisJCQkJZGF0YS0+Y3B1X2NvbnRleHRbaV0u aWQgPSBpOworCQkJCWRhdGEtPmNwdV9jb250ZXh0W2ldLmRhdGEgPSBkYXRhOworCQkJCXB0aHJl YWRfY3JlYXRlKCZkYXRhLT5jcHVfdGhyZWFkW2ldLCBOVUxMLCBjcHVfbG9hZCwgKHZvaWQqKSZk YXRhLT5jcHVfY29udGV4dFtpXSk7CisJCQl9CisJCX0KKwl9CisKKwlmb3IgKGZvcm1hdF9pZHgg PSAwOyBmb3JtYXRfaWR4IDwgTl9GT1JNQVRTOyBmb3JtYXRfaWR4KyspIHsKKwkJZm9yICh0aWxp bmdfaWR4ID0gMDsgdGlsaW5nX2lkeCA8IE5fVElMSU5HX01FVEhPRFM7IHRpbGluZ19pZHgrKykg eworCQkJaWd0X3N1YnRlc3RfZigic3RyZXNzJXMlcyVzLSVzLSVzIiwKKwkJCQkgICAgICBvdmVy cmlkZSA9PSBmYWxzZSA/ICIiIDogIi1tb2RlLW92ZXJyaWRlIiwKKwkJCQkgICAgICBjcHUgPT0g ZmFsc2UgPyAiIiA6ICItY3B1LWxvYWQiLAorCQkJCSAgICAgIGdwdSA9PSBmYWxzZSA/ICIiIDog Ii1ncHUtbG9hZCIsCisJCQkJICAgICAgZm9ybWF0X3N0cihmb3JtYXRfaWR4KSwKKwkJCQkgICAg ICB0aWxpbmdfc3RyKHRpbGluZ19pZHgpKSB7CisKKwkJCQlzdHJlc3MoZGF0YSwgb3ZlcnJpZGUs IGdwdSwgZm9ybWF0X2lkeCwgdGlsaW5nX2lkeCk7CisKKwkJCX0KKworCQkJaWd0X2ZpeHR1cmUg eworCQkJCS8qCisJCQkJICogQXMgd2UgY2hhbmdlIHRpbGluZy9mb3JtYXQgd2UgbmVlZCBhIG5l dyBGQgorCQkJCSAqLworCQkJCWZvciAoaSA9IDA7IGkgPCBJR1RfTUFYX1BJUEVTOyBpKyspIHsK KwkJCQkJZGF0YS0+bGFzdF9tb2RlW2ldID0gTlVMTDsKKwkJCQkJZm9yIChqID0gMDtqIDwgTUFY X1BMQU5FUzsgaisrKSB7CisJCQkJCQlpZiAoZGF0YS0+ZmJbaSAqIE1BWF9QTEFORVMgKyBqXS5m Yl9pZCkgeworCQkJCQkJCWlndF9wbGFuZV9zZXRfZmIoJmRhdGEtPmRpc3BsYXkucGlwZXNbaV0u cGxhbmVzW2pdLCBOVUxMKTsKKwkJCQkJCQlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmRpc3BsYXkuZHJt X2ZkLCAmZGF0YS0+ZmJbaSAqIE1BWF9QTEFORVMgKyBqXSk7CisJCQkJCQkJZGF0YS0+ZmJbaSAq IE1BWF9QTEFORVMgKyBqXS5mYl9pZCA9IDA7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJZGF0YS0+ bnVtX3BsYW5lc1tpXSA9IC0xOworCQkJCQlpZiAoZGF0YS0+Y3Vyc29yX2ZiW2ldLmZiX2lkKSB7 CisJCQkJCQlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmRpc3BsYXkuZHJtX2ZkLCAmZGF0YS0+Y3Vyc29y X2ZiW2ldKTsKKwkJCQkJCWRhdGEtPmN1cnNvcl9mYltpXS5mYl9pZCA9IDA7CisJCQkJCX0KKwkJ CQl9CisJCQl9CisJCX0KKwl9CisKKwlpZ3RfZml4dHVyZSB7CisJCWlmIChjcHUpIHsKKwkJCWZv ciAoaSA9IDA7IGkgPCBudW1iZXJfb2ZfY29yZXM7aSsrKSB7CisJCQkJZGF0YS0+Y3B1X3RocmVh ZF9zdG9wW2ldID0gdHJ1ZTsKKwkJCQlwdGhyZWFkX2pvaW4oZGF0YS0+Y3B1X3RocmVhZFtpXSwg TlVMTCk7CisJCQl9CisJCQlmb3IgKGkgPSAwO2kgPCBudW1iZXJfb2ZfY29yZXM7IGkrKykgewor CQkJCWZyZWUoZGF0YS0+Y3B1X2NvbnRleHRbaV0uYnVmMSk7CisJCQkJZnJlZShkYXRhLT5jcHVf Y29udGV4dFtpXS5idWYyKTsKKwkJCX0KKwkJfQorCX0KK30KKworCitzdHJ1Y3QgZGF0YSBkYXRh ID0geworCS5mb3JtYXQgPSBEUk1fRk9STUFUX1hSR0I4ODg4LAorCS5tb2RpZmllciA9IERSTV9G T1JNQVRfTU9EX0xJTkVBUiwKKwkuZGV2aWQgPSAwLAorfTsKKworCitpZ3RfbWFpbgoreworCWJv b2wgbW9kZV9vdmVycmlkZSA9IGZhbHNlOworCWJvb2wgY3B1X2xvYWQgPSBmYWxzZTsKKwlib29s IGdwdV9sb2FkID0gZmFsc2U7CisKKwlpZ3RfZml4dHVyZSB7CisJCWRhdGEuZHJtX2ZkID0gZGF0 YS5kaXNwbGF5LmRybV9mZCA9IGRybV9vcGVuX2RyaXZlcl9tYXN0ZXIoRFJJVkVSX0FOWSk7CisK KwkJa21zdGVzdF9zZXRfdnRfZ3JhcGhpY3NfbW9kZSgpOworCisJCWlndF9kaXNwbGF5X3JlcXVp cmUoJmRhdGEuZGlzcGxheSwgZGF0YS5kaXNwbGF5LmRybV9mZCk7CisJCWlndF9yZXF1aXJlKGRh dGEuZGlzcGxheS5pc19hdG9taWMpOworCQlpZ3RfZGlzcGxheV9yZXF1aXJlX291dHB1dCgmZGF0 YS5kaXNwbGF5KTsKKwl9CisKKwl0ZXN0KCZkYXRhLCBtb2RlX292ZXJyaWRlLCBjcHVfbG9hZCwg Z3B1X2xvYWQpOworCisJY3B1X2xvYWQgPSB0cnVlOworCWdwdV9sb2FkID0gdHJ1ZTsKKworCXRl c3QoJmRhdGEsIG1vZGVfb3ZlcnJpZGUsIGNwdV9sb2FkLCBncHVfbG9hZCk7CisKKwltb2RlX292 ZXJyaWRlID0gdHJ1ZTsKKwljcHVfbG9hZCA9IGZhbHNlOworCWdwdV9sb2FkID0gZmFsc2U7CisK Kwl0ZXN0KCZkYXRhLCBtb2RlX292ZXJyaWRlLCBjcHVfbG9hZCwgZ3B1X2xvYWQpOworCisJY3B1 X2xvYWQgPSB0cnVlOworCWdwdV9sb2FkID0gdHJ1ZTsKKworCXRlc3QoJmRhdGEsIG1vZGVfb3Zl cnJpZGUsIGNwdV9sb2FkLCBncHVfbG9hZCk7CisKKwlpZ3RfZml4dHVyZSB7CisJCWlndF9kaXNw bGF5X2ZpbmkoJmRhdGEuZGlzcGxheSk7CisJfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp bGUKZGlmZiAtLWdpdCBhL3Rlc3RzL21lc29uLmJ1aWxkIGIvdGVzdHMvbWVzb24uYnVpbGQKaW5k ZXggOTAxNWY4MDkuLmM1ODY2NDJjIDEwMDY0NAotLS0gYS90ZXN0cy9tZXNvbi5idWlsZAorKysg Yi90ZXN0cy9tZXNvbi5idWlsZApAQCAtNDYsNiArNDYsNyBAQCB0ZXN0X3Byb2dzID0gWwogCSdr bXNfcGxhbmVfbG93cmVzJywKIAkna21zX3BsYW5lX211bHRpcGxlJywKIAkna21zX3BsYW5lX3Nj YWxpbmcnLAorCSdrbXNfcGxhbmVfc3RyZXNzJywKIAkna21zX3Byb3BfYmxvYicsCiAJJ2ttc19w cm9wZXJ0aWVzJywKIAkna21zX3BzcicsCi0tIAoyLjE3LjEKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxt YW4vbGlzdGluZm8vaWd0LWRldg==