From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Mika Kuoppala Date: Thu, 14 Nov 2019 19:18:06 +0200 Message-Id: <20191114171806.9605-1-mika.kuoppala@linux.intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t] Add tests/gem_exec_parse_blt 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: intel-gfx@lists.freedesktop.org Cc: igt-dev@lists.freedesktop.org, Daniel Vetter List-ID: RnJvbTogTWlrYSBLdW9wcGFsYSA8bWlrYS5rdW9wcGFsYUBpbnRlbC5jb20+CgpGb3IgdGVzdGlu ZyBibGl0dGVyIGVuZ2luZSBjb21tYW5kIHBhcnNlciBvbiBnZW45LgoKdjI6IGJhZCBqdW1wIG9m ZnNldAp2MzogcmViYXNlCnY0OiBpbXByb3ZlIGJiIHN0YXJ0IGFuZCBzdWJjYXNlIGl0CnY1OiBm aXggcHJlc3VtZWQgb2Zmc2V0cyAoSm9uKQp2NjogbmFtZSwgcmVtb3ZlIHNwdXJpb3VzIGdlbV9z eW5jcyAoQ2hyaXMpCnY3OiBqdW1wIGZ1cnRoZXIgYmFja3dhcmRzIChEYW5pZWwpLCBjdHhfcGFy YW1fZW5naW5lcyAoQ2hyaXMpCgpDYzogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24u Y28udWs+CkNjOiBEYW5pZWwgVmV0dGVyIDxkYW5pZWxAZmZ3bGwuY2g+ClNpZ25lZC1vZmYtYnk6 IE1pa2EgS3VvcHBhbGEgPG1pa2Eua3VvcHBhbGFAbGludXguaW50ZWwuY29tPgotLS0KIHRlc3Rz L01ha2VmaWxlLnNvdXJjZXMgICAgICAgICAgICAgICAgfCAgICA3ICstCiB0ZXN0cy9pOTE1L2dl bV9leGVjX3BhcnNlX2JsdC5jICAgICAgIHwgMTAzMCArKysrKysrKysrKysrKysrKysrKysrKysr CiB0ZXN0cy9pbnRlbC1jaS9mYXN0LWZlZWRiYWNrLnRlc3RsaXN0IHwgICAgMSArCiB0ZXN0cy9t ZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgIHwgICAgMSArCiA0IGZpbGVzIGNoYW5nZWQs IDEwMzcgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0 ZXN0cy9pOTE1L2dlbV9leGVjX3BhcnNlX2JsdC5jCgpkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZp bGUuc291cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKaW5kZXggNmIxZDRjYjIuLjMzYTQ1 NTlkIDEwMDY0NAotLS0gYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCisrKyBiL3Rlc3RzL01ha2Vm aWxlLnNvdXJjZXMKQEAgLTIwNiw4ICsyMDYsOCBAQCBnZW1fZXhlY19iYXNpY19TT1VSQ0VTID0g aTkxNS9nZW1fZXhlY19iYXNpYy5jCiBURVNUU19wcm9ncyArPSBnZW1fZXhlY19iaWcKIGdlbV9l eGVjX2JpZ19TT1VSQ0VTID0gaTkxNS9nZW1fZXhlY19iaWcuYwogCi1URVNUU19wcm9ncyArPSBn ZW1fZXhlY19ibHQKLWdlbV9leGVjX2JsdF9TT1VSQ0VTID0gaTkxNS9nZW1fZXhlY19ibHQuYwor VEVTVFNfcHJvZ3MgKz0gZ2VtX2V4ZWNfcGFyc2VfYmx0CitnZW1fZXhlY19ibHRfU09VUkNFUyA9 IGk5MTUvZ2VtX2V4ZWNfcGFyc2VfYmx0LmMKIAogVEVTVFNfcHJvZ3MgKz0gZ2VtX2V4ZWNfY2Fw dHVyZQogZ2VtX2V4ZWNfY2FwdHVyZV9TT1VSQ0VTID0gaTkxNS9nZW1fZXhlY19jYXB0dXJlLmMK QEAgLTI0NSw2ICsyNDUsOSBAQCBnZW1fZXhlY19wYXJhbXNfU09VUkNFUyA9IGk5MTUvZ2VtX2V4 ZWNfcGFyYW1zLmMKIFRFU1RTX3Byb2dzICs9IGdlbV9leGVjX3BhcnNlCiBnZW1fZXhlY19wYXJz ZV9TT1VSQ0VTID0gaTkxNS9nZW1fZXhlY19wYXJzZS5jCiAKK1RFU1RTX3Byb2dzICs9IGdlbV9i bHRfcGFyc2UKK2dlbV9ibHRfcGFyc2VfU09VUkNFUyA9IGk5MTUvZ2VtX2JsdF9wYXJzZS5jCisK IFRFU1RTX3Byb2dzICs9IGdlbV9leGVjX3JlbG9jCiBnZW1fZXhlY19yZWxvY19TT1VSQ0VTID0g aTkxNS9nZW1fZXhlY19yZWxvYy5jCiAKZGlmZiAtLWdpdCBhL3Rlc3RzL2k5MTUvZ2VtX2V4ZWNf cGFyc2VfYmx0LmMgYi90ZXN0cy9pOTE1L2dlbV9leGVjX3BhcnNlX2JsdC5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi5iOGIyYmI1MAotLS0gL2Rldi9udWxsCisrKyBiL3Rl c3RzL2k5MTUvZ2VtX2V4ZWNfcGFyc2VfYmx0LmMKQEAgLTAsMCArMSwxMDMwIEBACisvKgorICog Q29weXJpZ2h0IMKpIDIwMTggSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlz IGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcg YQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24g ZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhv dXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdo dHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJs aWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBl cm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8g c28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92 ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcg dGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBv ciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBT T0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5E LCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRI RSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICog VEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0s IERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0Yg Q09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1Ig SU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJ TkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisKKyNpbmNsdWRlICJpZ3QuaCIKKyNp bmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRpby5o PgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlIDxkcm0uaD4KKworLyogVG8gaGVscCBj cmFmdCBjb21tYW5kcyBrbm93biB0byBiZSBpbnZhbGlkIGFjcm9zcyBhbGwgZW5naW5lcyAqLwor I2RlZmluZSBJTlNUUl9DTElFTlRfU0hJRlQJMjkKKyNkZWZpbmUgICBJTlNUUl9JTlZBTElEX0NM SUVOVCAgMHg3CisKKyNkZWZpbmUgTUlfTE9BRF9SRUdJU1RFUl9SRUcgKDB4MmEgPDwgMjMpCisj ZGVmaW5lIE1JX1NUT1JFX1JFR0lTVEVSX01FTSAoMHgyNCA8PCAyMykKKyNkZWZpbmUgTUlfQVJC X09OX09GRiAoMHg4IDw8IDIzKQorI2RlZmluZSBNSV9VU0VSX0lOVEVSUlVQVCAoMHgwMiA8PCAy MykKKyNkZWZpbmUgTUlfRkxVU0hfRFcgKDB4MjYgPDwgMjMpCisjZGVmaW5lIE1JX0FSQl9DSEVD SyAoMHgwNSA8PCAyMykKKyNkZWZpbmUgTUlfUkVQT1JUX0hFQUQgKDB4MDcgPDwgMjMpCisjZGVm aW5lIE1JX1NVU1BFTkRfRkxVU0ggKDB4MGIgPDwgMjMpCisjZGVmaW5lIE1JX0xPQURfU0NBTl9M SU5FU19FWENMICgweDEzIDw8IDIzKQorI2RlZmluZSBNSV9VUERBVEVfR1RUICgweDIzIDw8IDIz KQorCisjZGVmaW5lIEJDU19TV0NUUkwgICAgIDB4MjIyMDAKKyNkZWZpbmUgQkNTX0dQUl9CQVNF ICAgMHgyMjYwMAorI2RlZmluZSBCQ1NfR1BSKG4pICAgICAoMHgyMjYwMCArIChuKSAqIDgpCisj ZGVmaW5lIEJDU19HUFJfVURXKG4pICgweDIyNjAwICsgKG4pICogOCArIDQpCisKKyNkZWZpbmUg SEFORExFX1NJWkUgIDQwOTYKKworc3RhdGljIGludCBwYXJzZXJfdmVyc2lvbjsKKworc3RhdGlj IGludCBjb21tYW5kX3BhcnNlcl92ZXJzaW9uKGludCBmZCkKK3sKKwlpbnQgdmVyc2lvbiA9IC0x OworCWRybV9pOTE1X2dldHBhcmFtX3QgZ3A7CisKKwlncC5wYXJhbSA9IEk5MTVfUEFSQU1fQ01E X1BBUlNFUl9WRVJTSU9OOworCWdwLnZhbHVlID0gJnZlcnNpb247CisKKwlpZiAoZHJtSW9jdGwo ZmQsIERSTV9JT0NUTF9JOTE1X0dFVFBBUkFNLCAmZ3ApID09IDApCisJCXJldHVybiB2ZXJzaW9u OworCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50ICBfX2V4ZWNfYmF0Y2hfcGF0Y2hlZChp bnQgZmQsIGludCBlbmdpbmUsCisJCQkJIHVpbnQzMl90IGNtZF9ibywgY29uc3QgdWludDMyX3Qg KmNtZHMsIGludCBzaXplLAorCQkJCSB1aW50MzJfdCB0YXJnZXRfYm8sIHVpbnQ2NF90IHRhcmdl dF9vZmZzZXQsIHVpbnQ2NF90IHRhcmdldF9kZWx0YSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X2V4ZWNidWZmZXIyIGV4ZWNidWY7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIg b2JqWzJdOworCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSByZWxvY1sxXTsK KworCWdlbV93cml0ZShmZCwgY21kX2JvLCAwLCBjbWRzLCBzaXplKTsKKworCW1lbXNldChvYmos IDAsIHNpemVvZihvYmopKTsKKwlvYmpbMF0uaGFuZGxlID0gdGFyZ2V0X2JvOworCW9ialsxXS5o YW5kbGUgPSBjbWRfYm87CisKKwltZW1zZXQocmVsb2MsIDAsIHNpemVvZihyZWxvYykpOworCXJl bG9jWzBdLm9mZnNldCA9IHRhcmdldF9vZmZzZXQ7CisJcmVsb2NbMF0udGFyZ2V0X2hhbmRsZSA9 IHRhcmdldF9ibzsKKwlyZWxvY1swXS5kZWx0YSA9IHRhcmdldF9kZWx0YTsKKwlyZWxvY1swXS5y ZWFkX2RvbWFpbnMgPSBJOTE1X0dFTV9ET01BSU5fQ09NTUFORDsKKwlyZWxvY1swXS53cml0ZV9k b21haW4gPSBJOTE1X0dFTV9ET01BSU5fQ09NTUFORDsKKwlyZWxvY1swXS5wcmVzdW1lZF9vZmZz ZXQgPSAtMTsKKworCW9ialsxXS5yZWxvY3NfcHRyID0gdG9fdXNlcl9wb2ludGVyKHJlbG9jKTsK KwlvYmpbMV0ucmVsb2NhdGlvbl9jb3VudCA9IDE7CisKKwltZW1zZXQoJmV4ZWNidWYsIDAsIHNp emVvZihleGVjYnVmKSk7CisJZXhlY2J1Zi5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcihv YmopOworCWV4ZWNidWYuYnVmZmVyX2NvdW50ID0gMjsKKwlleGVjYnVmLmJhdGNoX2xlbiA9IHNp emU7CisJZXhlY2J1Zi5mbGFncyA9IGVuZ2luZTsKKworCXJldHVybiBfX2dlbV9leGVjYnVmKGZk LCAmZXhlY2J1Zik7Cit9CisKK3N0YXRpYyB2b2lkIGV4ZWNfYmF0Y2hfcGF0Y2hlZChpbnQgZmQs IGludCBlbmdpbmUsCisJCQkgICAgICAgdWludDMyX3QgY21kX2JvLCBjb25zdCB1aW50MzJfdCAq Y21kcywKKwkJCSAgICAgICBpbnQgc2l6ZSwgaW50IHBhdGNoX29mZnNldCwKKwkJCSAgICAgICBs b25nIGludCBleHBlY3RlZF92YWx1ZSkKK3sKKwljb25zdCB1aW50MzJfdCB0YXJnZXRfYm8gPSBn ZW1fY3JlYXRlKGZkLCBIQU5ETEVfU0laRSk7CisJdWludDY0X3QgYWN0dWFsX3ZhbHVlID0gMDsK Kwlsb25nIGludCByZXQ7CisKKwlyZXQgPSBfX2V4ZWNfYmF0Y2hfcGF0Y2hlZChmZCwgZW5naW5l LCBjbWRfYm8sIGNtZHMsIHNpemUsIHRhcmdldF9ibywgcGF0Y2hfb2Zmc2V0LCAwKTsKKwlpZiAo cmV0KSB7CisJCWlndF9hc3NlcnRfbHQocmV0LCAwKTsKKwkJZ2VtX2Nsb3NlKGZkLCB0YXJnZXRf Ym8pOworCQlpZ3RfYXNzZXJ0X2VxKHJldCwgZXhwZWN0ZWRfdmFsdWUpOworCQlyZXR1cm47CisJ fQorCisJZ2VtX3JlYWQoZmQsIHRhcmdldF9ibywgMCwgJmFjdHVhbF92YWx1ZSwgc2l6ZW9mKGFj dHVhbF92YWx1ZSkpOworCisJZ2VtX2Nsb3NlKGZkLCB0YXJnZXRfYm8pOworCisJaWd0X2Fzc2Vy dF9lcShhY3R1YWxfdmFsdWUsIGV4cGVjdGVkX3ZhbHVlKTsKK30KKworc3RhdGljIGludCBfX2V4 ZWNfYmF0Y2goaW50IGZkLCBpbnQgZW5naW5lLCB1aW50MzJfdCBjbWRfYm8sCisJCQljb25zdCB1 aW50MzJfdCAqY21kcywgaW50IHNpemUpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVm ZmVyMiBleGVjYnVmOworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9ialsxXTsK KwlpbnQgcmV0OworCisJZ2VtX3dyaXRlKGZkLCBjbWRfYm8sIDAsIGNtZHMsIHNpemUpOworCisJ bWVtc2V0KG9iaiwgMCwgc2l6ZW9mKG9iaikpOworCW9ialswXS5oYW5kbGUgPSBjbWRfYm87CisK KwltZW1zZXQoJmV4ZWNidWYsIDAsIHNpemVvZihleGVjYnVmKSk7CisJZXhlY2J1Zi5idWZmZXJz X3B0ciA9IHRvX3VzZXJfcG9pbnRlcihvYmopOworCWV4ZWNidWYuYnVmZmVyX2NvdW50ID0gMTsK KwlleGVjYnVmLmJhdGNoX2xlbiA9IHNpemU7CisJZXhlY2J1Zi5mbGFncyA9IGVuZ2luZTsKKwor CXJldCA9ICBfX2dlbV9leGVjYnVmKGZkLCAmZXhlY2J1Zik7CisKKwlyZXR1cm4gcmV0OworfQor CisjaWYgMAorc3RhdGljIHZvaWQgcHJpbnRfYmF0Y2goY29uc3QgdWludDMyX3QgKmNtZHMsIGNv bnN0IHVpbnQzMl90IHN6KQoreworCWNvbnN0IGludCBjb21tYW5kcyA9IHN6IC8gNDsKKwlpbnQg aTsKKworCWlndF9pbmZvKCJCYXRjaCBzaXplICVkXG4iLCBzeik7CisJZm9yIChpID0gMDsgaSA8 IGNvbW1hbmRzOyBpKyspCisJCWlndF9pbmZvKCIweCUwOHg6IDB4JTA4eFxuIiwgaSwgY21kc1tp XSk7Cit9CisjZWxzZQorI2RlZmluZSBwcmludF9iYXRjaChjbWRzLCBzaXplKQorI2VuZGlmCisK KyNkZWZpbmUgZXhlY19iYXRjaChmZCwgZW5naW5lLCBibywgY21kcywgc3osIGV4cGVjdGVkKQlc CisJcHJpbnRfYmF0Y2goY21kcywgc3opOyBcCisJaWd0X2Fzc2VydF9lcShfX2V4ZWNfYmF0Y2go ZmQsIGVuZ2luZSwgYm8sIGNtZHMsIHN6KSwgZXhwZWN0ZWQpCisKK3N0YXRpYyB2b2lkIGV4ZWNf c3BsaXRfYmF0Y2goaW50IGZkLCBpbnQgZW5naW5lLCBjb25zdCB1aW50MzJfdCAqY21kcywKKwkJ CSAgICAgaW50IHNpemUsIGludCBleHBlY3RlZF9yZXQpCit7CisJc3RydWN0IGRybV9pOTE1X2dl bV9leGVjYnVmZmVyMiBleGVjYnVmOworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3Qy IG9ialsxXTsKKwl1aW50MzJfdCBjbWRfYm87CisJY29uc3QgdWludDMyX3Qgbm9vcFsxMDI0XSA9 IHsgMCB9OworCWNvbnN0IGludCBhbGxvY19zaXplID0gNDA5NiAqIDI7CisJY29uc3QgaW50IGFj dHVhbF9zdGFydF9vZmZzZXQgPSA0MDk2LXNpemVvZih1aW50MzJfdCk7CisKKwkvKiBBbGxvY2F0 ZSBhbmQgZmlsbCBhIDItcGFnZSBiYXRjaCB3aXRoIG5vb3BzICovCisJY21kX2JvID0gZ2VtX2Ny ZWF0ZShmZCwgYWxsb2Nfc2l6ZSk7CisJZ2VtX3dyaXRlKGZkLCBjbWRfYm8sIDAsIG5vb3AsIHNp emVvZihub29wKSk7CisJZ2VtX3dyaXRlKGZkLCBjbWRfYm8sIDQwOTYsIG5vb3AsIHNpemVvZihu b29wKSk7CisKKwkvKiBXcml0ZSB0aGUgcHJvdmlkZWQgY29tbWFuZHMgc3VjaCB0aGF0IHRoZSBm aXJzdCBkd29yZAorCSAqIG9mIHRoZSBjb21tYW5kIGJ1ZmZlciBpcyB0aGUgbGFzdCBkd29yZCBv ZiB0aGUgZmlyc3QKKwkgKiBwYWdlIChpLmUuIHRoZSBjb21tYW5kIGlzIHNwbGl0IGFjcm9zcyB0 aGUgdHdvIHBhZ2VzKS4KKwkgKi8KKwlnZW1fd3JpdGUoZmQsIGNtZF9ibywgYWN0dWFsX3N0YXJ0 X29mZnNldCwgY21kcywgc2l6ZSk7CisKKwltZW1zZXQob2JqLCAwLCBzaXplb2Yob2JqKSk7CisJ b2JqWzBdLmhhbmRsZSA9IGNtZF9ibzsKKworCW1lbXNldCgmZXhlY2J1ZiwgMCwgc2l6ZW9mKGV4 ZWNidWYpKTsKKwlleGVjYnVmLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKG9iaik7CisJ ZXhlY2J1Zi5idWZmZXJfY291bnQgPSAxOworCS8qIE5COiBXZSB3YW50IGJhdGNoX3N0YXJ0X29m ZnNldCBhbmQgYmF0Y2hfbGVuIHRvIHBvaW50IHRvIHRoZSBibG9jaworCSAqIG9mIHRoZSBhY3R1 YWwgY29tbWFuZHMgKGkuZS4gYXQgdGhlIGxhc3QgZHdvcmQgb2YgdGhlIGZpcnN0IHBhZ2UpLAor CSAqIGJ1dCBoYXZlIHRvIGFkanVzdCBib3RoIHRoZSBzdGFydCBvZmZzZXQgYW5kIGxlbmd0aCB0 byBtZWV0IHRoZQorCSAqIGtlcm5lbCBkcml2ZXIncyByZXF1aXJlbWVudHMgb24gdGhlIGFsaWdu bWVudCBvZiB0aG9zZSBmaWVsZHMuCisJICovCisJZXhlY2J1Zi5iYXRjaF9zdGFydF9vZmZzZXQg PSBhY3R1YWxfc3RhcnRfb2Zmc2V0ICYgfjB4NzsKKwlleGVjYnVmLmJhdGNoX2xlbiA9CisJCUFM SUdOKHNpemUgKyBhY3R1YWxfc3RhcnRfb2Zmc2V0IC0gZXhlY2J1Zi5iYXRjaF9zdGFydF9vZmZz ZXQsCisJCSAgICAgIDB4OCk7CisJZXhlY2J1Zi5mbGFncyA9IGVuZ2luZTsKKworCWlndF9hc3Nl cnRfZXEoX19nZW1fZXhlY2J1ZihmZCwgJmV4ZWNidWYpLCBleHBlY3RlZF9yZXQpOworCisJZ2Vt X2Nsb3NlKGZkLCBjbWRfYm8pOworfQorCitzdGF0aWMgdm9pZCBleGVjX2JhdGNoX2NoYWluZWQo aW50IGZkLCBpbnQgZW5naW5lLAorCQkJICAgICAgIHVpbnQzMl90IGNtZF9ibywgY29uc3QgdWlu dDMyX3QgKmNtZHMsCisJCQkgICAgICAgaW50IHNpemUsIGludCBwYXRjaF9vZmZzZXQsCisJCQkg ICAgICAgdWludDY0X3QgZXhwZWN0ZWRfdmFsdWUsCisJCQkgICAgICAgaW50IGV4cGVjdGVkX3Jl dHVybikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWY7CisJc3Ry dWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqWzNdOworCXN0cnVjdCBkcm1faTkxNV9n ZW1fcmVsb2NhdGlvbl9lbnRyeSByZWxvY1sxXTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9j YXRpb25fZW50cnkgZmlyc3RfbGV2ZWxfcmVsb2M7CisKKwljb25zdCB1aW50MzJfdCB0YXJnZXRf Ym8gPSBnZW1fY3JlYXRlKGZkLCA0MDk2KTsKKwljb25zdCB1aW50MzJfdCBmaXJzdF9sZXZlbF9i byA9IGdlbV9jcmVhdGUoZmQsIDQwOTYpOworCXVpbnQ2NF90IGFjdHVhbF92YWx1ZSA9IDA7CisJ aW50IHJldDsKKworCWNvbnN0IHVpbnQzMl90IGZpcnN0X2xldmVsX2NtZHNbXSA9IHsKKwkJTUlf QkFUQ0hfQlVGRkVSX1NUQVJUIHwgTUlfQkFUQ0hfTk9OX1NFQ1VSRV9JOTY1IHwgMSwKKwkJMCwK KwkJMCwKKwkJTUlfQkFUQ0hfQlVGRkVSX0VORCwKKwl9OworCisJZ2VtX3dyaXRlKGZkLCBmaXJz dF9sZXZlbF9ibywgMCwKKwkJICBmaXJzdF9sZXZlbF9jbWRzLCBzaXplb2YoZmlyc3RfbGV2ZWxf Y21kcykpOworCWdlbV93cml0ZShmZCwgY21kX2JvLCAwLCBjbWRzLCBzaXplKTsKKworCW1lbXNl dChvYmosIDAsIHNpemVvZihvYmopKTsKKwlvYmpbMF0uaGFuZGxlID0gdGFyZ2V0X2JvOworCW9i alsxXS5oYW5kbGUgPSBjbWRfYm87CisJb2JqWzJdLmhhbmRsZSA9IGZpcnN0X2xldmVsX2JvOwor CisJbWVtc2V0KHJlbG9jLCAwLCBzaXplb2YocmVsb2MpKTsKKwlyZWxvY1swXS5vZmZzZXQgPSBw YXRjaF9vZmZzZXQ7CisJcmVsb2NbMF0uZGVsdGEgPSAwOworCXJlbG9jWzBdLnRhcmdldF9oYW5k bGUgPSB0YXJnZXRfYm87CisJcmVsb2NbMF0ucmVhZF9kb21haW5zID0gSTkxNV9HRU1fRE9NQUlO X0NPTU1BTkQ7CisJcmVsb2NbMF0ud3JpdGVfZG9tYWluID0gSTkxNV9HRU1fRE9NQUlOX0NPTU1B TkQ7CisJcmVsb2NbMF0ucHJlc3VtZWRfb2Zmc2V0ID0gLTE7CisKKwlvYmpbMV0ucmVsb2NhdGlv bl9jb3VudCA9IDE7CisJb2JqWzFdLnJlbG9jc19wdHIgPSB0b191c2VyX3BvaW50ZXIoJnJlbG9j KTsKKworCW1lbXNldCgmZmlyc3RfbGV2ZWxfcmVsb2MsIDAsIHNpemVvZihmaXJzdF9sZXZlbF9y ZWxvYykpOworCWZpcnN0X2xldmVsX3JlbG9jLm9mZnNldCA9IDQ7CisJZmlyc3RfbGV2ZWxfcmVs b2MuZGVsdGEgPSAwOworCWZpcnN0X2xldmVsX3JlbG9jLnRhcmdldF9oYW5kbGUgPSBjbWRfYm87 CisJZmlyc3RfbGV2ZWxfcmVsb2MucmVhZF9kb21haW5zID0gSTkxNV9HRU1fRE9NQUlOX0NPTU1B TkQ7CisJZmlyc3RfbGV2ZWxfcmVsb2Mud3JpdGVfZG9tYWluID0gMDsKKwlvYmpbMl0ucmVsb2Nh dGlvbl9jb3VudCA9IDE7CisJb2JqWzJdLnJlbG9jc19wdHIgPSB0b191c2VyX3BvaW50ZXIoJmZp cnN0X2xldmVsX3JlbG9jKTsKKworCW1lbXNldCgmZXhlY2J1ZiwgMCwgc2l6ZW9mKGV4ZWNidWYp KTsKKwlleGVjYnVmLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKG9iaik7CisJZXhlY2J1 Zi5idWZmZXJfY291bnQgPSAzOworCWV4ZWNidWYuYmF0Y2hfbGVuID0gc2l6ZW9mKGZpcnN0X2xl dmVsX2NtZHMpOworCWV4ZWNidWYuZmxhZ3MgPSBlbmdpbmU7CisKKwlyZXQgPSBfX2dlbV9leGVj YnVmKGZkLCAmZXhlY2J1Zik7CisJaWYgKGV4cGVjdGVkX3JldHVybiAmJiByZXQgPT0gZXhwZWN0 ZWRfcmV0dXJuKQorCQlnb3RvIG91dDsKKworCWdlbV9yZWFkKGZkLHRhcmdldF9ibywgMCwgJmFj dHVhbF92YWx1ZSwgc2l6ZW9mKGFjdHVhbF92YWx1ZSkpOworCitvdXQ6CisJaWYgKCFleHBlY3Rl ZF9yZXR1cm4pCisJCWlndF9hc3NlcnRfZXEoZXhwZWN0ZWRfdmFsdWUsIGFjdHVhbF92YWx1ZSk7 CisJZWxzZQorCQlpZ3RfYXNzZXJ0X25lcShleHBlY3RlZF92YWx1ZSwgYWN0dWFsX3ZhbHVlKTsK KworCWdlbV9jbG9zZShmZCwgZmlyc3RfbGV2ZWxfYm8pOworCWdlbV9jbG9zZShmZCwgdGFyZ2V0 X2JvKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9zZWN1cmVfYmF0Y2hlcyhjb25zdCBpbnQgZmQp Cit7CisJaW50IHYgPSAtMTsKKwlkcm1faTkxNV9nZXRwYXJhbV90IGdwOworCisJZ3AucGFyYW0g PSBJOTE1X1BBUkFNX0hBU19TRUNVUkVfQkFUQ0hFUzsKKwlncC52YWx1ZSA9ICZ2OworCisJaWd0 X2Fzc2VydF9lcShkcm1Jb2N0bChmZCwgRFJNX0lPQ1RMX0k5MTVfR0VUUEFSQU0sICZncCksIDAp OworCWlndF9hc3NlcnRfZXEodiwgMCk7Cit9CisKK3N0cnVjdCBjbWQgeworCXVpbnQzMl90IGNt ZDsKKwlpbnQgbGVuOworCWNvbnN0IGNoYXIgKm5hbWU7Cit9OworCisjZGVmaW5lIENNRChDLCBM KSB7IC5jbWQgPSAoQyksIC5sZW4gPSAoTCksIC5uYW1lID0gI0MgfQorI2RlZmluZSBDTURfTihD KSB7IC5jbWQgPSAoQyksIC5sZW4gPSAxLCAubmFtZSA9ICNDIH0KKworc3RhdGljIGNvbnN0IHN0 cnVjdCBjbWQgYWxsb3dlZF9jbWRzW10gPSB7CisJQ01EX04oTUlfTk9PUCksCisJQ01EX04oTUlf VVNFUl9JTlRFUlJVUFQpLAorCUNNRF9OKE1JX1dBSVRfRk9SX0VWRU5UKSwKKwlDTUQoTUlfRkxV U0hfRFcsIDUpLAorCUNNRF9OKE1JX0FSQl9DSEVDSyksCisJQ01EX04oTUlfUkVQT1JUX0hFQUQp LAorCUNNRF9OKE1JX0ZMVVNIKSwKKwlDTURfTihNSV9BUkJfT05fT0ZGKSwKKwlDTURfTihNSV9T VVNQRU5EX0ZMVVNIKSwKKwlDTUQoTUlfTE9BRF9TQ0FOX0xJTkVTX0lOQ0wsIDIpLAorCUNNRChN SV9MT0FEX1NDQU5fTElORVNfRVhDTCwgMiksCit9OworCitzdGF0aWMgdWludDMyX3QgKmluamVj dF9jbWQodWludDMyX3QgKmJhdGNoLCBjb25zdCB1aW50MzJfdCBjbWQsIGludCBsZW4pCit7CisJ aW50IGkgPSAwOworCisJYmF0Y2hbaSsrXSA9IGNtZDsKKworCXdoaWxlICgtLWxlbikKKwkJYmF0 Y2hbaSsrXSA9IDA7CisKKwlyZXR1cm4gJmJhdGNoW2ldOworfQorCitzdGF0aWMgdW5zaWduZWQg bG9uZyBiYXRjaF9udW1fY21kcyhjb25zdCB1aW50MzJfdCAqIGNvbnN0IGJhdGNoX3N0YXJ0LAor CQkJCSAgICBjb25zdCB1aW50MzJfdCAqIGNvbnN0IGJhdGNoX2VuZCkKK3sKKwlpZ3RfYXNzZXJ0 X2x0ZSgodW5zaWduZWQgbG9uZyliYXRjaF9zdGFydCwgKHVuc2lnbmVkIGxvbmcpYmF0Y2hfZW5k KTsKKworCXJldHVybiBiYXRjaF9lbmQgLSBiYXRjaF9zdGFydDsKK30KKworc3RhdGljIHVuc2ln bmVkIGxvbmcgYmF0Y2hfYnl0ZXMoY29uc3QgdWludDMyX3QgKiBjb25zdCBiYXRjaF9zdGFydCwK KwkJCQkgY29uc3QgdWludDMyX3QgKiBjb25zdCBiYXRjaF9lbmQpCit7CisJY29uc3QgdW5zaWdu ZWQgbG9uZyBieXRlcyA9IGJhdGNoX251bV9jbWRzKGJhdGNoX3N0YXJ0LCBiYXRjaF9lbmQpICog NDsKKworCWlndF9hc3NlcnQoIShieXRlcyAmIDB4NykpOworCisJcmV0dXJuIGJ5dGVzOworfQor CitzdGF0aWMgdm9pZCB0ZXN0X2FsbG93ZWRfYWxsKGNvbnN0IGludCBmZCwgY29uc3QgdWludDMy X3QgaGFuZGxlKQoreworCXVpbnQzMl90IGJhdGNoWzQwOTZdOworCXVpbnQzMl90ICpiID0gJmJh dGNoWzBdOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFsbG93ZWRfY21kcyk7 IGkrKykKKwkJYiA9IGluamVjdF9jbWQoYiwgYWxsb3dlZF9jbWRzW2ldLmNtZCwKKwkJCSAgICAg ICBhbGxvd2VkX2NtZHNbaV0ubGVuKTsKKworCWlmICghKGJhdGNoX251bV9jbWRzKGJhdGNoLCBi KSAlIDIpKQorCQliID0gaW5qZWN0X2NtZChiLCBNSV9OT09QLCAxKTsKKworCWIgPSBpbmplY3Rf Y21kKGIsIE1JX0JBVENIX0JVRkZFUl9FTkQsIDEpOworCisJZXhlY19iYXRjaChmZCwgSTkxNV9F WEVDX0JMVCwgaGFuZGxlLCBiYXRjaCwgYmF0Y2hfYnl0ZXMoYmF0Y2gsIGIpLCAwKTsKK30KKwor c3RhdGljIHZvaWQgdGVzdF9hbGxvd2VkX3NpbmdsZShjb25zdCBpbnQgZmQsIGNvbnN0IHVpbnQz Ml90IGhhbmRsZSkKK3sKKwl1aW50MzJfdCBiYXRjaFs0MDk2XTsKKwlpbnQgcmV0OworCisJZm9y IChpbnQgaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFsbG93ZWRfY21kcyk7IGkrKykgeworCQl1aW50 MzJfdCAqYiA9ICZiYXRjaFswXTsKKworCQliID0gaW5qZWN0X2NtZChiLCBhbGxvd2VkX2NtZHNb aV0uY21kLAorCQkJICAgICAgIGFsbG93ZWRfY21kc1tpXS5sZW4pOworCisJCWlmICghKGJhdGNo X251bV9jbWRzKGJhdGNoLCBiKSAlIDIpKQorCQkJYiA9IGluamVjdF9jbWQoYiwgTUlfTk9PUCwg MSk7CisKKwkJYiA9IGluamVjdF9jbWQoYiwgTUlfQkFUQ0hfQlVGRkVSX0VORCwgMSk7CisKKwkJ cmV0ID0gX19leGVjX2JhdGNoKGZkLCBJOTE1X0VYRUNfQkxULCBoYW5kbGUsCisJCQkJICAgYmF0 Y2gsIGJhdGNoX2J5dGVzKGJhdGNoLCBiKSk7CisKKwkJaWd0X2Fzc2VydF9lcShyZXQsIDApOwor CX07Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfYmJfc2VjdXJlKGNvbnN0IGludCBmZCwgY29uc3Qg dWludDMyX3QgaGFuZGxlKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhl Y2J1ZjsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBvYmpbMV07CisJc3RydWN0 IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IHJlbG9jWzFdOworCWludCByZXQ7CisKKwlj b25zdCB1aW50MzJfdCBiYXRjaF9zZWN1cmVbXSA9IHsKKwkJTUlfQkFUQ0hfQlVGRkVSX1NUQVJU IHwgMSwKKwkJMTIsCisJCTAsCisJCU1JX05PT1AsCisJCU1JX05PT1AsCisJCU1JX0JBVENIX0JV RkZFUl9FTkQsCisJfTsKKworCWdlbV93cml0ZShmZCwgaGFuZGxlLCAwLCBiYXRjaF9zZWN1cmUs IHNpemVvZihiYXRjaF9zZWN1cmUpKTsKKworCW1lbXNldChvYmosIDAsIHNpemVvZihvYmopKTsK KwlvYmpbMF0uaGFuZGxlID0gaGFuZGxlOworCisJbWVtc2V0KHJlbG9jLCAwLCBzaXplb2YocmVs b2MpKTsKKwlyZWxvY1swXS5vZmZzZXQgPSAxICogc2l6ZW9mKHVpbnQzMl90KTsKKwlyZWxvY1sw XS50YXJnZXRfaGFuZGxlID0gaGFuZGxlOworCXJlbG9jWzBdLmRlbHRhID0gNCAqIHNpemVvZih1 aW50MzJfdCk7CisJcmVsb2NbMF0ucmVhZF9kb21haW5zID0gSTkxNV9HRU1fRE9NQUlOX0NPTU1B TkQ7CisJcmVsb2NbMF0ud3JpdGVfZG9tYWluID0gMDsKKwlyZWxvY1swXS5wcmVzdW1lZF9vZmZz ZXQgPSAtMTsKKworCW9ialswXS5yZWxvY3NfcHRyID0gdG9fdXNlcl9wb2ludGVyKHJlbG9jKTsK KwlvYmpbMF0ucmVsb2NhdGlvbl9jb3VudCA9IDE7CisKKwltZW1zZXQoJmV4ZWNidWYsIDAsIHNp emVvZihleGVjYnVmKSk7CisJZXhlY2J1Zi5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcihv YmopOworCWV4ZWNidWYuYnVmZmVyX2NvdW50ID0gMTsKKwlleGVjYnVmLmJhdGNoX2xlbiA9IHNp emVvZihiYXRjaF9zZWN1cmUpOworCWV4ZWNidWYuZmxhZ3MgPSBJOTE1X0VYRUNfQkxUOworCisJ cmV0ID0gX19nZW1fZXhlY2J1ZihmZCwgJmV4ZWNidWYpOworCisJaWd0X2Fzc2VydF9lcShyZXQs IC1FQUNDRVMpOworfQorCisjZGVmaW5lIEJCX1NUQVJUX1BBUkFNIDAKKyNkZWZpbmUgQkJfU1RB UlRfT1VUICAgMQorI2RlZmluZSBCQl9TVEFSVF9DTUQgICAyCisjZGVmaW5lIEJCX1NUQVJUX0ZB UiAgIDMKKworc3RhdGljIHZvaWQgdGVzdF9iYl9zdGFydChjb25zdCBpbnQgZmQsIGNvbnN0IHVp bnQzMl90IGhhbmRsZSwgaW50IHRlc3QpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVm ZmVyMiBleGVjYnVmOworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9ialsyXTsK KwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgcmVsb2NbM107CisJY29uc3Qg dWludDMyX3QgdGFyZ2V0X2JvID0gZ2VtX2NyZWF0ZShmZCwgNDA5Nik7CisJdWludDMyX3QgKmRz dDsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCBqdW1wX29mZiwgZm9vdGVyX3BvczsKKwljb25z dCB1aW50MzJfdCBiYXRjaF9oZWFkZXJbXSA9IHsKKwkJTUlfTk9PUCwKKwkJTUlfTk9PUCwKKwkJ TUlfTk9PUCwKKwkJTUlfTk9PUCwKKwkJTUlfU1RPUkVfRFdPUkRfSU1NLAorCQkwLAorCQkwLAor CQkxLAorCQlNSV9TVE9SRV9EV09SRF9JTU0sCisJCTQsCisJCTAsCisJCTIsCisJCU1JX0NPTkRf QkFUQ0hfQlVGRkVSX0VORCB8IDEsCisJCTAsCisJCTAsCisJCTAKKwl9OworCWNvbnN0IHVpbnQz Ml90IGJhdGNoX2Zvb3RlcltdID0geworCQlNSV9CQVRDSF9CVUZGRVJfU1RBUlQgfCBNSV9CQVRD SF9OT05fU0VDVVJFX0k5NjUgfCAxLAorCQkwLAorCQkwLAorCQlNSV9CQVRDSF9CVUZGRVJfRU5E LAorCX07CisJdWludDMyX3QgYmF0Y2hbMTAyNF07CisKKwlpZ3RfcmVxdWlyZShnZW1fY2FuX3N0 b3JlX2R3b3JkKGZkLCBJOTE1X0VYRUNfQkxUKSk7CisKKwltZW1zZXQoYmF0Y2gsIDAsIHNpemVv ZihiYXRjaCkpOworCW1lbWNweShiYXRjaCwgYmF0Y2hfaGVhZGVyLCBzaXplb2YoYmF0Y2hfaGVh ZGVyKSk7CisKKwlzd2l0Y2ggKHRlc3QpIHsKKwljYXNlIEJCX1NUQVJUX1BBUkFNOgorCQlqdW1w X29mZiA9IDUgKiBzaXplb2YodWludDMyX3QpOworCQlicmVhazsKKwljYXNlIEJCX1NUQVJUX0NN RDoKKwljYXNlIEJCX1NUQVJUX0ZBUjoKKwkJanVtcF9vZmYgPSA4ICogc2l6ZW9mKHVpbnQzMl90 KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJanVtcF9vZmYgPSAweGYwMGQwMDAwOworCX0KKwor CWlmICh0ZXN0ID09IEJCX1NUQVJUX0ZBUikKKwkJZm9vdGVyX3BvcyA9IChzaXplb2YoYmF0Y2gp IC0gc2l6ZW9mKGJhdGNoX2Zvb3RlcikpOworCWVsc2UKKwkJZm9vdGVyX3BvcyA9IHNpemVvZihi YXRjaF9oZWFkZXIpOworCisJbWVtY3B5KGJhdGNoICsgZm9vdGVyX3BvcyAvIHNpemVvZih1aW50 MzJfdCksCisJICAgICAgIGJhdGNoX2Zvb3Rlciwgc2l6ZW9mKGJhdGNoX2Zvb3RlcikpOworCWdl bV93cml0ZShmZCwgaGFuZGxlLCAwLCBiYXRjaCwgc2l6ZW9mKGJhdGNoKSk7CisKKwltZW1zZXQo b2JqLCAwLCBzaXplb2Yob2JqKSk7CisJb2JqWzBdLmhhbmRsZSA9IHRhcmdldF9ibzsKKwlvYmpb MV0uaGFuZGxlID0gaGFuZGxlOworCisJbWVtc2V0KHJlbG9jLCAwLCBzaXplb2YocmVsb2MpKTsK KwlyZWxvY1swXS5vZmZzZXQgPSA1ICogc2l6ZW9mKHVpbnQzMl90KTsKKwlyZWxvY1swXS50YXJn ZXRfaGFuZGxlID0gb2JqWzBdLmhhbmRsZTsKKwlyZWxvY1swXS5kZWx0YSA9IDA7CisJcmVsb2Nb MF0ucmVhZF9kb21haW5zID0gSTkxNV9HRU1fRE9NQUlOX0NPTU1BTkQ7CisJcmVsb2NbMF0ud3Jp dGVfZG9tYWluID0gSTkxNV9HRU1fRE9NQUlOX0NPTU1BTkQ7CisJcmVsb2NbMF0ucHJlc3VtZWRf b2Zmc2V0ID0gLTE7CisKKwlyZWxvY1sxXS5vZmZzZXQgPSA5ICogc2l6ZW9mKHVpbnQzMl90KTsK KwlyZWxvY1sxXS50YXJnZXRfaGFuZGxlID0gb2JqWzBdLmhhbmRsZTsKKwlyZWxvY1sxXS5kZWx0 YSA9IDEgKiBzaXplb2YodWludDMyX3QpOworCXJlbG9jWzFdLnJlYWRfZG9tYWlucyA9IEk5MTVf R0VNX0RPTUFJTl9DT01NQU5EOworCXJlbG9jWzFdLndyaXRlX2RvbWFpbiA9IEk5MTVfR0VNX0RP TUFJTl9DT01NQU5EOworCXJlbG9jWzFdLnByZXN1bWVkX29mZnNldCA9IC0xOworCisJcmVsb2Nb Ml0ub2Zmc2V0ID0gZm9vdGVyX3BvcyArIDEgKiBzaXplb2YodWludDMyX3QpOworCXJlbG9jWzJd LnRhcmdldF9oYW5kbGUgPSBvYmpbMV0uaGFuZGxlOworCXJlbG9jWzJdLmRlbHRhID0ganVtcF9v ZmY7CisJcmVsb2NbMl0ucmVhZF9kb21haW5zID0gSTkxNV9HRU1fRE9NQUlOX0NPTU1BTkQ7CisJ cmVsb2NbMl0ud3JpdGVfZG9tYWluID0gMDsKKwlyZWxvY1syXS5wcmVzdW1lZF9vZmZzZXQgPSAt MTsKKworCW9ialsxXS5yZWxvY3NfcHRyID0gdG9fdXNlcl9wb2ludGVyKHJlbG9jKTsKKwlvYmpb MV0ucmVsb2NhdGlvbl9jb3VudCA9IDM7CisKKwltZW1zZXQoJmV4ZWNidWYsIDAsIHNpemVvZihl eGVjYnVmKSk7CisJZXhlY2J1Zi5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcihvYmopOwor CWV4ZWNidWYuYnVmZmVyX2NvdW50ID0gMjsKKwlleGVjYnVmLmJhdGNoX2xlbiA9IHNpemVvZihi YXRjaCk7CisJZXhlY2J1Zi5mbGFncyA9IEk5MTVfRVhFQ19CTFQ7CisKKwlkc3QgPSBnZW1fbW1h cF9fY3B1KGZkLCBvYmpbMF0uaGFuZGxlLCAwLCA0MDk2LAorCQkJICAgIFBST1RfUkVBRCB8IFBS T1RfV1JJVEUpOworCisJaWd0X2Fzc2VydF9lcShkc3RbMF0sIDApOworCWlndF9hc3NlcnRfZXEo ZHN0WzFdLCAwKTsKKworCXJldCA9IF9fZ2VtX2V4ZWNidWYoZmQsICZleGVjYnVmKTsKKworCXN3 aXRjaCAodGVzdCkgeworCWNhc2UgQkJfU1RBUlRfUEFSQU06CisJCWlndF9hc3NlcnRfZXEocmV0 LCAtRUlOVkFMKTsKKwkJYnJlYWs7CisJY2FzZSBCQl9TVEFSVF9DTUQ6CisJY2FzZSBCQl9TVEFS VF9GQVI6CisJCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKKworCQl3aGlsZSAoUkVBRF9PTkNFKGRz dFswXSkgPT0gMCkKKwkJICAgICAgIDsKKworCQl3aGlsZSAoUkVBRF9PTkNFKGRzdFsxXSkgPT0g MCkKKwkJCTsKKworCQlpZ3RfYXNzZXJ0X2VxKGRzdFswXSwgMSk7CisJCWlndF9hc3NlcnRfZXEo ZHN0WzFdLCAyKTsKKworCQlpZ3RfaW5mbygidmFsdWVzIG5vdyAleCAleFxuIiwgZHN0WzBdLCBk c3RbMV0pOworCisJCWRzdFswXSA9IDA7CisKKwkJaWd0X2luZm8oInZhbHVlcyBub3cgJXggJXhc biIsIGRzdFswXSwgZHN0WzFdKTsKKworCQlpZ3RfYXNzZXJ0X2VxKGRzdFswXSwgMCk7CisJCWln dF9hc3NlcnRfZXEoZHN0WzFdLCAyKTsKKworCQlicmVhazsKKworCWNhc2UgQkJfU1RBUlRfT1VU OgorCQlpZ3RfYXNzZXJ0X2VxKHJldCwgLUVJTlZBTCk7CisJCWJyZWFrOworCX0KKworCWdlbV9t dW5tYXAoZHN0LCA0MDk2KTsKKwlnZW1fY2xvc2UoZmQsIHRhcmdldF9ibyk7Cit9CisKK3N0YXRp YyB2b2lkIHRlc3RfYmJfY2hhaW5lZChjb25zdCBpbnQgZmQsIGNvbnN0IHVpbnQzMl90IGhhbmRs ZSkKK3sKKwljb25zdCB1aW50MzJfdCBiYXRjaFtdID0geworCQkoMHgyMCA8PCAyMykgfCAyLCAv KiBNSV9TVE9SRV9EQVRBX0lNTSAqLworCQkwLAorCQkwLAorCQkweGJhYWRmMDBkLAorCQlNSV9O T09QLAorCQlNSV9CQVRDSF9CVUZGRVJfRU5ELAorCX07CisKKwlleGVjX2JhdGNoX2NoYWluZWQo ZmQsIEk5MTVfRVhFQ19SRU5ERVIsCisJCQkgICBoYW5kbGUsCisJCQkgICBiYXRjaCwgc2l6ZW9m KGJhdGNoKSwKKwkJCSAgIDQsCisJCQkgICAweGJhYWRmMDBkLAorCQkJICAgMCk7CisKKwlleGVj X2JhdGNoX2NoYWluZWQoZmQsIEk5MTVfRVhFQ19CTFQsCisJCQkgICBoYW5kbGUsCisJCQkgICBi YXRjaCwgc2l6ZW9mKGJhdGNoKSwKKwkJCSAgIDQsCisJCQkgICAweGJhYWRmMDBkLAorCQkJICAg RVBFUk0pOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2NtZF9jcm9zc2luZ19wYWdlKGNvbnN0IGlu dCBmZCwgY29uc3QgdWludDMyX3QgaGFuZGxlKQoreworCWNvbnN0IHVpbnQzMl90IGxyaV9va1td ID0geworCQlNSV9MT0FEX1JFR0lTVEVSX0lNTSwKKwkJQkNTX0dQUigwKSwKKwkJMHhiYWFkZjAw ZCwKKwkJTUlfQkFUQ0hfQlVGRkVSX0VORCwKKwl9OworCWNvbnN0IHVpbnQzMl90IHN0b3JlX3Jl Z1tdID0geworCQlNSV9TVE9SRV9SRUdJU1RFUl9NRU0gfCAoNCAtIDIpLAorCQlCQ1NfR1BSKDAp LAorCQkwLCAvKiByZWxvYyAqLworCQkwLCAvKiByZWxvYyAqLworCQlNSV9OT09QLAorCQlNSV9C QVRDSF9CVUZGRVJfRU5ELAorCX07CisKKwlleGVjX3NwbGl0X2JhdGNoKGZkLCBJOTE1X0VYRUNf QkxULAorCQkJIGxyaV9vaywgc2l6ZW9mKGxyaV9vayksCisJCQkgMCk7CisKKwlleGVjX2JhdGNo X3BhdGNoZWQoZmQsIEk5MTVfRVhFQ19CTFQsIGhhbmRsZSwKKwkJCSAgIHN0b3JlX3JlZywgc2l6 ZW9mKHN0b3JlX3JlZyksCisJCQkgICAyICogc2l6ZW9mKHVpbnQzMl90KSwgLyogcmVsb2MgKi8K KwkJCSAgIDB4YmFhZGYwMGQpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2ludmFsaWRfbGVuZ3Ro KGNvbnN0IGludCBmZCwgY29uc3QgdWludDMyX3QgaGFuZGxlKQoreworCWNvbnN0IHVpbnQzMl90 IG9rX3ZhbCA9IDB4YmFhZGYwMGQ7CisJY29uc3QgdWludDMyX3QgYmFkX3ZhbCA9IDB4ZjAwZGJh YWQ7CisJY29uc3QgdWludDMyX3Qgbm9vcHNbODE5Ml0gPSB7IDAsIH07CisKKwljb25zdCB1aW50 MzJfdCBscmlfb2tbXSA9IHsKKwkJTUlfTE9BRF9SRUdJU1RFUl9JTU0sCisJCUJDU19HUFIoMCks CisJCW9rX3ZhbCwKKwkJTUlfQkFUQ0hfQlVGRkVSX0VORCwKKwl9OworCisJY29uc3QgdWludDMy X3QgbHJpX2JhZFtdID0geworCQlNSV9MT0FEX1JFR0lTVEVSX0lNTSwKKwkJQkNTX0dQUigwKSwK KwkJYmFkX3ZhbCwKKwkJTUlfQkFUQ0hfQlVGRkVSX0VORCwKKwl9OworCisJY29uc3QgdWludDMy X3Qgc3RvcmVfcmVnW10gPSB7CisJCU1JX1NUT1JFX1JFR0lTVEVSX01FTSB8ICg0IC0gMiksCisJ CUJDU19HUFIoMCksCisJCTAsIC8qIHJlbG9jICovCisJCTAsIC8qIHJlbG9jICovCisJCU1JX05P T1AsCisJCU1JX0JBVENIX0JVRkZFUl9FTkQsCisJfTsKKworCWV4ZWNfYmF0Y2goZmQsIEk5MTVf RVhFQ19CTFQsIGhhbmRsZSwKKwkJICAgbHJpX29rLCBzaXplb2YobHJpX29rKSwKKwkJICAgMCk7 CisKKwlleGVjX2JhdGNoX3BhdGNoZWQoZmQsIEk5MTVfRVhFQ19CTFQsIGhhbmRsZSwKKwkJCSAg IHN0b3JlX3JlZywgc2l6ZW9mKHN0b3JlX3JlZyksCisJCQkgICAyICogc2l6ZW9mKHVpbnQzMl90 KSwgLyogcmVsb2MgKi8KKwkJCSAgIG9rX3ZhbCk7CisKKwlleGVjX2JhdGNoKGZkLCBJOTE1X0VY RUNfQkxULCBoYW5kbGUsCisJCSAgIGxyaV9iYWQsIDAsCisJCSAgIDApOworCisJZXhlY19iYXRj aF9wYXRjaGVkKGZkLCBJOTE1X0VYRUNfQkxULCBoYW5kbGUsCisJCQkgICBzdG9yZV9yZWcsIHNp emVvZihzdG9yZV9yZWcpLAorCQkJICAgMiAqIHNpemVvZih1aW50MzJfdCksIC8qIHJlbG9jICov CisJCQkgICBva192YWwpOworCisJZXhlY19iYXRjaChmZCwgSTkxNV9FWEVDX0JMVCwgaGFuZGxl LAorCQkgICBscmlfb2ssIDQwOTYsCisJCSAgIDApOworCisJaWd0X2Fzc2VydF9lcShfX2dlbV93 cml0ZShmZCwgaGFuZGxlLCAwLCBub29wcywgNDA5NyksIC1FSU5WQUwpOworfQorCitzdHJ1Y3Qg cmVnIHsKKwl1aW50MzJfdCBhZGRyOworCXVpbnQzMl90IG1hc2s7CisJYm9vbCBtYXNrZWRfd3Jp dGU7CisJYm9vbCBwcml2aWxlZ2VkOworfTsKKworI2RlZmluZSBSRUdfTShBRERSLCBNQVNLLCBX TSwgUCkgeyAoQUREUiksIChNQVNLKSwgKFdNKSwgKFApIH0KKyNkZWZpbmUgUkVHKEFERFIpIFJF R19NKEFERFIsIDB4ZmZmZmZmZmYsIGZhbHNlLCBmYWxzZSkKKyNkZWZpbmUgUkVHX1AoQUREUikg UkVHX00oQUREUiwgMHhmZmZmZmZmZiwgZmFsc2UsIHRydWUpCisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgcmVnIHJlZ3NbXSA9IHsKKwlSRUdfTShCQ1NfU1dDVFJMLCAweDMsIHRydWUsIGZhbHNlKSwK KwlSRUcoQkNTX0dQUigwKSksCisJUkVHKEJDU19HUFJfVURXKDApKSwKKwlSRUcoQkNTX0dQUigx KSksCisJUkVHKEJDU19HUFJfVURXKDEpKSwKKwlSRUcoQkNTX0dQUigyKSksCisJUkVHKEJDU19H UFJfVURXKDIpKSwKKwlSRUcoQkNTX0dQUigzKSksCisJUkVHKEJDU19HUFJfVURXKDMpKSwKKwlS RUcoQkNTX0dQUig0KSksCisJUkVHKEJDU19HUFJfVURXKDQpKSwKKwlSRUcoQkNTX0dQUig1KSks CisJUkVHKEJDU19HUFJfVURXKDUpKSwKKwlSRUcoQkNTX0dQUig2KSksCisJUkVHKEJDU19HUFJf VURXKDYpKSwKKwlSRUcoQkNTX0dQUig3KSksCisJUkVHKEJDU19HUFJfVURXKDcpKSwKKwlSRUco QkNTX0dQUig4KSksCisJUkVHKEJDU19HUFJfVURXKDgpKSwKKwlSRUcoQkNTX0dQUig5KSksCisJ UkVHKEJDU19HUFJfVURXKDkpKSwKKwlSRUcoQkNTX0dQUigxMCkpLAorCVJFRyhCQ1NfR1BSX1VE VygxMCkpLAorCVJFRyhCQ1NfR1BSKDExKSksCisJUkVHKEJDU19HUFJfVURXKDExKSksCisJUkVH KEJDU19HUFIoMTIpKSwKKwlSRUcoQkNTX0dQUl9VRFcoMTIpKSwKKwlSRUcoQkNTX0dQUigxMykp LAorCVJFRyhCQ1NfR1BSX1VEVygxMykpLAorCVJFRyhCQ1NfR1BSKDE0KSksCisJUkVHKEJDU19H UFJfVURXKDE0KSksCisJUkVHKEJDU19HUFIoMTUpKSwKKwlSRUcoQkNTX0dQUl9VRFcoMTUpKSwK KworCVJFR19QKDApLAorCVJFR19QKDIwMDAwMCksCisKKwlSRUdfUChCQ1NfU1dDVFJMIC0gMSks CisJUkVHX1AoQkNTX1NXQ1RSTCAtIDIpLAorCVJFR19QKEJDU19TV0NUUkwgLSAzKSwKKwlSRUdf UChCQ1NfU1dDVFJMIC0gNCksCisJUkVHX1AoQkNTX1NXQ1RSTCArIDQpLAorCisJUkVHX1AoQkNT X0dQUigwKSAtIDEpLAorCVJFR19QKEJDU19HUFIoMCkgLSAyKSwKKwlSRUdfUChCQ1NfR1BSKDAp IC0gMyksCisJUkVHX1AoQkNTX0dQUigwKSAtIDQpLAorCVJFR19QKEJDU19HUFJfVURXKDE1KSAr IDQpLAorfTsKKworc3RhdGljIHZvaWQgdGVzdF9yZWdpc3Rlcihjb25zdCBpbnQgZmQsIGNvbnN0 IHVpbnQzMl90IGhhbmRsZSwKKwkJCSAgY29uc3Qgc3RydWN0IHJlZyAqcikKK3sKKwljb25zdCB1 aW50MzJfdCBscmlfemVyb1tdID0geworCQlNSV9MT0FEX1JFR0lTVEVSX0lNTSwKKwkJci0+YWRk ciwKKwkJci0+bWFza2VkX3dyaXRlID8gMHhmZmZmMDAwMCA6IDAsCisJCU1JX0JBVENIX0JVRkZF Ul9FTkQsCisJfTsKKworCWNvbnN0IHVpbnQzMl90IGxyaV9tYXNrW10gPSB7CisJCU1JX0xPQURf UkVHSVNURVJfSU1NLAorCQlyLT5hZGRyLAorCQlyLT5tYXNrZWRfd3JpdGUgPyAoci0+bWFzayA8 PCAxNikgfCByLT5tYXNrIDogci0+bWFzaywKKwkJTUlfQkFUQ0hfQlVGRkVSX0VORCwKKwl9Owor CisJY29uc3QgdWludDMyX3Qgc3RvcmVfcmVnW10gPSB7CisJCU1JX1NUT1JFX1JFR0lTVEVSX01F TSB8ICg0IC0gMiksCisJCXItPmFkZHIsCisJCTAsIC8qIHJlbG9jICovCisJCTAsIC8qIHJlbG9j ICovCisJCU1JX05PT1AsCisJCU1JX0JBVENIX0JVRkZFUl9FTkQsCisJfTsKKworCWV4ZWNfYmF0 Y2goZmQsIEk5MTVfRVhFQ19CTFQsIGhhbmRsZSwKKwkJICAgbHJpX21hc2ssIHNpemVvZihscmlf bWFzayksCisJCSAgIHItPnByaXZpbGVnZWQgPyAtRUFDQ0VTIDogMCk7CisKKwlleGVjX2JhdGNo X3BhdGNoZWQoZmQsIEk5MTVfRVhFQ19CTFQsIGhhbmRsZSwKKwkJCSAgIHN0b3JlX3JlZywgc2l6 ZW9mKHN0b3JlX3JlZyksCisJCQkgICAyICogc2l6ZW9mKHVpbnQzMl90KSwgLyogcmVsb2MgKi8K KwkJCSAgIHItPnByaXZpbGVnZWQgPyAtRUFDQ0VTIDogci0+bWFzayk7CisKKwlleGVjX2JhdGNo KGZkLCBJOTE1X0VYRUNfQkxULCBoYW5kbGUsCisJCSAgIGxyaV96ZXJvLCBzaXplb2YobHJpX3pl cm8pLAorCQkgICByLT5wcml2aWxlZ2VkID8gLUVBQ0NFUyA6IDApOworCisJZXhlY19iYXRjaF9w YXRjaGVkKGZkLCBJOTE1X0VYRUNfQkxULCBoYW5kbGUsCisJCQkgICBzdG9yZV9yZWcsIHNpemVv ZihzdG9yZV9yZWcpLAorCQkJICAgMiAqIHNpemVvZih1aW50MzJfdCksIC8qIHJlbG9jICovCisJ CQkgICByLT5wcml2aWxlZ2VkID8gLUVBQ0NFUyA6IDApOworfQorCitzdGF0aWMgdm9pZCB0ZXN0 X3ZhbGlkX3JlZ2lzdGVycyhjb25zdCBpbnQgZmQsIGNvbnN0IHVpbnQzMl90IGhhbmRsZSkKK3sK KwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJlZ3MpOyBpKyspCisJCXRl c3RfcmVnaXN0ZXIoZmQsIGhhbmRsZSwgJnJlZ3NbaV0pOworfQorCitzdGF0aWMgbG9uZyBpbnQg cmVhZF9yZWcoY29uc3QgaW50IGZkLCBjb25zdCB1aW50MzJfdCBoYW5kbGUsCisJCQkgY29uc3Qg dWludDMyX3QgYWRkcikKK3sKKwljb25zdCB1aW50MzJfdCBzdG9yZV9yZWdbXSA9IHsKKwkJTUlf U1RPUkVfUkVHSVNURVJfTUVNIHwgKDQgLSAyKSwKKwkJYWRkciwKKwkJMCwgLyogcmVsb2MgKi8K KwkJMCwgLyogcmVsb2MgKi8KKwkJTUlfTk9PUCwKKwkJTUlfQkFUQ0hfQlVGRkVSX0VORCwKKwl9 OworCXVpbnQzMl90IHRhcmdldF9ibzsKKwl1aW50MzJfdCB2YWx1ZTsKKwlsb25nIGludCByZXQ7 CisKKwl0YXJnZXRfYm8gPSBnZW1fY3JlYXRlKGZkLCBIQU5ETEVfU0laRSk7CisKKwlyZXQgPSBf X2V4ZWNfYmF0Y2hfcGF0Y2hlZChmZCwgSTkxNV9FWEVDX0JMVCwgaGFuZGxlLAorCQkJCSAgIHN0 b3JlX3JlZywgc2l6ZW9mKHN0b3JlX3JlZyksCisJCQkJICAgdGFyZ2V0X2JvLCAyICogc2l6ZW9m KHVpbnQzMl90KSwgMCk7CisKKwlpZiAocmV0KSB7CisJCWlndF9hc3NlcnRfbHQocmV0LCAwKTsK KwkJZ2VtX2Nsb3NlKGZkLCB0YXJnZXRfYm8pOworCQlyZXR1cm4gcmV0OworCX0KKworCWdlbV9y ZWFkKGZkLCB0YXJnZXRfYm8sIDAsICZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7CisKKwlnZW1fY2xv c2UoZmQsIHRhcmdldF9ibyk7CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyBpbnQgd3Jp dGVfcmVnKGNvbnN0IGludCBmZCwgY29uc3QgdWludDMyX3QgaGFuZGxlLAorCQkgICAgIGNvbnN0 IHVpbnQzMl90IGFkZHIsIGNvbnN0IHVpbnQzMl90IHZhbCkKK3sKKwljb25zdCB1aW50MzJfdCBs cmlbXSA9IHsKKwkJTUlfTE9BRF9SRUdJU1RFUl9JTU0sCisJCWFkZHIsCisJCXZhbCwKKwkJTUlf QkFUQ0hfQlVGRkVSX0VORCwKKwl9OworCisJcmV0dXJuIF9fZXhlY19iYXRjaChmZCwgSTkxNV9F WEVDX0JMVCwgaGFuZGxlLAorCQkJICAgIGxyaSwgc2l6ZW9mKGxyaSkpOworfQorCitzdGF0aWMg dm9pZCB0ZXN0X3VuYWxpZ25lZF9hY2Nlc3MoY29uc3QgaW50IGZkLCBjb25zdCB1aW50MzJfdCBo YW5kbGUpCit7CisJY29uc3QgdWludDMyX3QgYWRkciA9IEJDU19HUFIoNCk7CisJY29uc3QgdWlu dDMyX3QgdmFsID0gMHhiYWFkZmVhZDsKKwljb25zdCB1aW50MzJfdCBwcmUgPSAweDEyMzQ1Njc4 OworCWNvbnN0IHVpbnQzMl90IHBvc3QgPSAweDg3NjU0MzIxOworCisJaWd0X2Fzc2VydF9lcSh3 cml0ZV9yZWcoZmQsIGhhbmRsZSwgYWRkciAtIDQsIHByZSksICAwKTsKKwlpZ3RfYXNzZXJ0X2Vx KHdyaXRlX3JlZyhmZCwgaGFuZGxlLCBhZGRyLCB2YWwpLCAgICAgIDApOworCWlndF9hc3NlcnRf ZXEod3JpdGVfcmVnKGZkLCBoYW5kbGUsIGFkZHIgKyA0LCBwb3N0KSwgMCk7CisKKwlpZ3RfYXNz ZXJ0X2VxKHJlYWRfcmVnKGZkLCBoYW5kbGUsIGFkZHIgLSA0KSwgcHJlKTsKKwlpZ3RfYXNzZXJ0 X2VxKHJlYWRfcmVnKGZkLCBoYW5kbGUsIGFkZHIpLCAgICAgdmFsKTsKKwlpZ3RfYXNzZXJ0X2Vx KHJlYWRfcmVnKGZkLCBoYW5kbGUsIGFkZHIgKyA0KSwgcG9zdCk7CisKKwlmb3IgKGludCBpID0g MDsgaSA8IDQ7IGkrKykgeworCQlpZ3RfYXNzZXJ0X2VxKHdyaXRlX3JlZyhmZCwgaGFuZGxlLCBh ZGRyICsgaSwgdmFsKSwgMCk7CisJCWlndF9hc3NlcnRfZXEocmVhZF9yZWcoZmQsIGhhbmRsZSwg YWRkciksIHZhbCk7CisKKwkJaWd0X2Fzc2VydF9lcShyZWFkX3JlZyhmZCwgaGFuZGxlLCBhZGRy ICsgMSksIHZhbCk7CisJCWlndF9hc3NlcnRfZXEocmVhZF9yZWcoZmQsIGhhbmRsZSwgYWRkciAr IDIpLCB2YWwpOworCQlpZ3RfYXNzZXJ0X2VxKHJlYWRfcmVnKGZkLCBoYW5kbGUsIGFkZHIgKyAz KSwgdmFsKTsKKwkJaWd0X2Fzc2VydF9lcShyZWFkX3JlZyhmZCwgaGFuZGxlLCBhZGRyICsgNCks IHBvc3QpOworCQlpZ3RfYXNzZXJ0X2VxKHJlYWRfcmVnKGZkLCBoYW5kbGUsIGFkZHIgLSAzKSwg cHJlKTsKKwkJaWd0X2Fzc2VydF9lcShyZWFkX3JlZyhmZCwgaGFuZGxlLCBhZGRyIC0gMiksIHBy ZSk7CisJCWlndF9hc3NlcnRfZXEocmVhZF9yZWcoZmQsIGhhbmRsZSwgYWRkciAtIDEpLCBwcmUp OworCX0KK30KKworc3RhdGljIHZvaWQgdGVzdF9yZWplY3Rfb25fZW5naW5lKGludCBmZCwgdWlu dDMyX3QgaGFuZGxlLCB1bnNpZ25lZCBpbnQgZW5naW5lKQoreworCWNvbnN0IHVpbnQzMl90IGlu dmFsaWRfY21kW10gPSB7CisJCUlOU1RSX0lOVkFMSURfQ0xJRU5UIDw8IElOU1RSX0NMSUVOVF9T SElGVCwKKwkJTUlfQkFUQ0hfQlVGRkVSX0VORCwKKwl9OworCWNvbnN0IHVpbnQzMl90IGludmFs aWRfc2V0X2NvbnRleHRbXSA9IHsKKwkJTUlfU0VUX0NPTlRFWFQgfCAzMiwgLyogaW52YWxpZCBs ZW5ndGggKi8KKwkJTUlfQkFUQ0hfQlVGRkVSX0VORCwKKwl9OworCisJZXhlY19iYXRjaChmZCwg ZW5naW5lLCBoYW5kbGUsCisJCSAgIGludmFsaWRfY21kLCBzaXplb2YoaW52YWxpZF9jbWQpLAor CQkgICAtRUlOVkFMKTsKKworCWV4ZWNfYmF0Y2goZmQsIGVuZ2luZSwgaGFuZGxlLAorCQkgICBp bnZhbGlkX3NldF9jb250ZXh0LCBzaXplb2YoaW52YWxpZF9zZXRfY29udGV4dCksCisJCSAgIC1F SU5WQUwpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3JlamVjdGVkKGludCBmZCwgdWludDMyX3Qg aGFuZGxlLCBib29sIGN0eF9wYXJhbSkKK3sKKyNkZWZpbmUgZW5naW5lX2NsYXNzKGUsIG4pICgo ZSktPmVuZ2luZXNbKG4pXS5lbmdpbmVfY2xhc3MpCisjZGVmaW5lIGVuZ2luZV9pbnN0YW5jZShl LCBuKSAoKGUpLT5lbmdpbmVzWyhuKV0uZW5naW5lX2luc3RhbmNlKQorCisJaWYgKGN0eF9wYXJh bSkgeworCQlpbnQgaTsKKworCQlJOTE1X0RFRklORV9DT05URVhUX1BBUkFNX0VOR0lORVMoZW5n aW5lcyAsIEk5MTVfRVhFQ19SSU5HX01BU0sgKyAxKTsKKwkJc3RydWN0IGRybV9pOTE1X2dlbV9j b250ZXh0X3BhcmFtIHBhcmFtID0geworCQkJLmN0eF9pZCA9IDAsCisJCQkucGFyYW0gPSBJOTE1 X0NPTlRFWFRfUEFSQU1fRU5HSU5FUywKKwkJCS52YWx1ZSA9IHRvX3VzZXJfcG9pbnRlcigmZW5n aW5lcyksCisJCQkuc2l6ZSA9IHNpemVvZihlbmdpbmVzKSwKKwkJfTsKKworCQltZW1zZXQoJmVu Z2luZXMsIDAsIHNpemVvZihlbmdpbmVzKSk7CisJCWZvciAoaSA9IDA7IGkgPD0gSTkxNV9FWEVD X1JJTkdfTUFTSzsgaSsrKSB7CisJCQllbmdpbmVfY2xhc3MoJmVuZ2luZXMsIGkpID0gSTkxNV9F TkdJTkVfQ0xBU1NfQ09QWTsKKwkJCWVuZ2luZV9pbnN0YW5jZSgmZW5naW5lcywgaSkgPSAwOwor CQl9CisJCWdlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgJnBhcmFtKTsKKworCQlmb3IgKGkgPSAw OyBpIDw9IEk5MTVfRVhFQ19SSU5HX01BU0s7IGkrKykKKwkJCXRlc3RfcmVqZWN0X29uX2VuZ2lu ZShmZCwgaGFuZGxlLCBpKTsKKworCQlwYXJhbS5zaXplID0gMDsKKwkJZ2VtX2NvbnRleHRfc2V0 X3BhcmFtKGZkLCAmcGFyYW0pOworCX0gZWxzZSB7CisJCXRlc3RfcmVqZWN0X29uX2VuZ2luZShm ZCwgaGFuZGxlLCBJOTE1X0VYRUNfQkxUKTsKKwl9Cit9CisKK2lndF9tYWluCit7CisJdWludDMy X3QgaGFuZGxlOworCWludCBmZDsKKworCWlndF9maXh0dXJlIHsKKwkJZmQgPSBkcm1fb3Blbl9k cml2ZXIoRFJJVkVSX0lOVEVMKTsKKwkJaWd0X3JlcXVpcmVfZ2VtKGZkKTsKKwkJZ2VtX3JlcXVp cmVfYmxpdHRlcihmZCk7CisKKwkJcGFyc2VyX3ZlcnNpb24gPSBjb21tYW5kX3BhcnNlcl92ZXJz aW9uKGZkKTsKKwkJLyogaWd0X3JlcXVpcmUocGFyc2VyX3ZlcnNpb24gPT0gMTApOyAqLworCisJ CWlndF9yZXF1aXJlKGdlbV91c2VzX3BwZ3R0KGZkKSk7CisJCWlndF9yZXF1aXJlKGdlbV9oYXNf Ymx0KGZkKSk7CisJCWlndF9yZXF1aXJlKGludGVsX2dlbihpbnRlbF9nZXRfZHJtX2RldmlkKGZk KSkgPT0gOSk7CisKKwkJaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgSEFORExFX1NJWkUpOworCisJ CWlndF9mb3JrX2hhbmdfZGV0ZWN0b3IoZmQpOworCX0KKworCWlndF9zdWJ0ZXN0KCJzZWN1cmUt YmF0Y2hlcyIpCisJCXRlc3Rfc2VjdXJlX2JhdGNoZXMoZmQpOworCisJaWd0X3N1YnRlc3QoImFs bG93ZWQtYWxsIikKKwkJdGVzdF9hbGxvd2VkX2FsbChmZCwgaGFuZGxlKTsKKworCWlndF9zdWJ0 ZXN0KCJhbGxvd2VkLXNpbmdsZSIpCisJCXRlc3RfYWxsb3dlZF9zaW5nbGUoZmQsIGhhbmRsZSk7 CisKKwlpZ3Rfc3VidGVzdCgiYmItc3RhcnQtcGFyYW0iKQorCQl0ZXN0X2JiX3N0YXJ0KGZkLCBo YW5kbGUsIEJCX1NUQVJUX1BBUkFNKTsKKworCWlndF9zdWJ0ZXN0KCJiYi1zdGFydC1vdXQiKQor CQl0ZXN0X2JiX3N0YXJ0KGZkLCBoYW5kbGUsIEJCX1NUQVJUX09VVCk7CisKKwlpZ3Rfc3VidGVz dCgiYmItc2VjdXJlIikKKwkJdGVzdF9iYl9zZWN1cmUoZmQsIGhhbmRsZSk7CisKKwlpZ3Rfc3Vi dGVzdCgiYmItY2hhaW5lZCIpCisJCXRlc3RfYmJfY2hhaW5lZChmZCwgaGFuZGxlKTsKKworCWln dF9zdWJ0ZXN0KCJjbWQtY3Jvc3NpbmctcGFnZSIpCisJCXRlc3RfY21kX2Nyb3NzaW5nX3BhZ2Uo ZmQsIGhhbmRsZSk7CisKKwlpZ3Rfc3VidGVzdCgiYmF0Y2gtd2l0aG91dC1lbmQiKSB7CisJCWNv bnN0IHVpbnQzMl90IG5vb3BbMTAyNF0gPSB7IDAgfTsKKworCQlleGVjX2JhdGNoKGZkLCBJOTE1 X0VYRUNfQkxULCBoYW5kbGUsCisJCQkgICBub29wLCBzaXplb2Yobm9vcCksCisJCQkgICAtRUlO VkFMKTsKKwl9CisKKwlpZ3Rfc3VidGVzdCgiYmF0Y2gtemVyby1sZW5ndGgiKSB7CisJCWNvbnN0 IHVpbnQzMl90IG5vb3BbXSA9IHsgMCwgTUlfQkFUQ0hfQlVGRkVSX0VORCB9OworCisJCWV4ZWNf YmF0Y2goZmQsIEk5MTVfRVhFQ19CTFQsIGhhbmRsZSwKKwkJCSAgIG5vb3AsIDAsCisJCQkgICAt RUlOVkFMKTsKKwl9CisKKwlpZ3Rfc3VidGVzdCgiYmF0Y2gtaW52YWxpZC1sZW5ndGgiKQorCQl0 ZXN0X2ludmFsaWRfbGVuZ3RoKGZkLCBoYW5kbGUpOworCisJaWd0X3N1YnRlc3QoImJhc2ljLXJl amVjdGVkIikKKwkJdGVzdF9yZWplY3RlZChmZCwgaGFuZGxlLCBmYWxzZSk7CisKKwlpZ3Rfc3Vi dGVzdCgiYmFzaWMtcmVqZWN0ZWQtY3R4LXBhcmFtIikKKwkJdGVzdF9yZWplY3RlZChmZCwgaGFu ZGxlLCB0cnVlKTsKKworCWlndF9zdWJ0ZXN0KCJ2YWxpZC1yZWdpc3RlcnMiKQorCQl0ZXN0X3Zh bGlkX3JlZ2lzdGVycyhmZCwgaGFuZGxlKTsKKworCWlndF9zdWJ0ZXN0KCJ1bmFsaWduZWQtYWNj ZXNzIikKKwkJdGVzdF91bmFsaWduZWRfYWNjZXNzKGZkLCBoYW5kbGUpOworCisJaWd0X3N1YnRl c3RfZ3JvdXAgeworCQlpZ3RfaGFuZ190IGhhbmc7CisKKwkJaWd0X2ZpeHR1cmUgaWd0X2FsbG93 X2hhbmcoZmQsIDAsIDApOworCisJCWlndF9zdWJ0ZXN0KCJiYi1zdGFydC1jbWQiKQorCQkJdGVz dF9iYl9zdGFydChmZCwgaGFuZGxlLCBCQl9TVEFSVF9DTUQpOworCisJCWlndF9zdWJ0ZXN0KCJi Yi1zdGFydC1mYXIiKQorCQkJdGVzdF9iYl9zdGFydChmZCwgaGFuZGxlLCBCQl9TVEFSVF9GQVIp OworCisJCWlndF9maXh0dXJlIGlndF9kaXNhbGxvd19oYW5nKGZkLCBoYW5nKTsKKwl9CisKKwlp Z3RfZml4dHVyZSB7CisJCWlndF9zdG9wX2hhbmdfZGV0ZWN0b3IoKTsKKwkJZ2VtX2Nsb3NlKGZk LCBoYW5kbGUpOworCisJCWNsb3NlKGZkKTsKKwl9Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9pbnRl bC1jaS9mYXN0LWZlZWRiYWNrLnRlc3RsaXN0IGIvdGVzdHMvaW50ZWwtY2kvZmFzdC1mZWVkYmFj ay50ZXN0bGlzdAppbmRleCBkZWM2ZmRkYS4uNDdiYWQ2OGMgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2lu dGVsLWNpL2Zhc3QtZmVlZGJhY2sudGVzdGxpc3QKKysrIGIvdGVzdHMvaW50ZWwtY2kvZmFzdC1m ZWVkYmFjay50ZXN0bGlzdApAQCAtMjA0LDMgKzIwNCw0IEBAIGlndEBpOTE1X21vZHVsZV9sb2Fk QHJlbG9hZAogaWd0QGk5MTVfbW9kdWxlX2xvYWRAcmVsb2FkLW5vLWRpc3BsYXkKIGlndEBpOTE1 X21vZHVsZV9sb2FkQHJlbG9hZC13aXRoLWZhdWx0LWluamVjdGlvbgogaWd0QGk5MTVfcG1fcnBt QG1vZHVsZS1yZWxvYWQKK2lndEBnZW1fYmx0X3BhcnNlQGJiLXN0YXJ0ICNleHBlY3RlZCBoYW5n IHNvIGxhc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL21lc29uLmJ1aWxkIGIvdGVzdHMvbWVzb24uYnVp bGQKaW5kZXggNDRiZGRkMDIuLjc1NWZjOWU2IDEwMDY0NAotLS0gYS90ZXN0cy9tZXNvbi5idWls ZAorKysgYi90ZXN0cy9tZXNvbi5idWlsZApAQCAtMTQ5LDYgKzE0OSw3IEBAIGk5MTVfcHJvZ3Mg PSBbCiAJJ2dlbV9leGVjX3BhcmFsbGVsJywKIAknZ2VtX2V4ZWNfcGFyYW1zJywKIAknZ2VtX2V4 ZWNfcGFyc2UnLAorCSdnZW1fZXhlY19wYXJzZV9ibHQnLAogCSdnZW1fZXhlY19yZWxvYycsCiAJ J2dlbV9leGVjX3JldXNlJywKIAknZ2VtX2V4ZWNfc2NoZWR1bGUnLAotLSAKMi4xNy4xCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxp bmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXY=