From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Mika Kuoppala Date: Thu, 14 Nov 2019 19:30:45 +0200 Message-Id: <20191114173045.10813-1-mika.kuoppala@linux.intel.com> In-Reply-To: <20191114171806.9605-1-mika.kuoppala@linux.intel.com> References: <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 YW1fZW5naW5lcyAoQ2hyaXMpCnY4OiBkb250IG1lc3MgdXAgdGhlIE1ha2VmaWxlcwoKQ2M6IENo cmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgpDYzogRGFuaWVsIFZldHRlciA8 ZGFuaWVsQGZmd2xsLmNoPgpTaWduZWQtb2ZmLWJ5OiBNaWthIEt1b3BwYWxhIDxtaWthLmt1b3Bw YWxhQGxpbnV4LmludGVsLmNvbT4KLS0tCiB0ZXN0cy9NYWtlZmlsZS5zb3VyY2VzICAgICAgICAg IHwgICAgMyArCiB0ZXN0cy9pOTE1L2dlbV9leGVjX3BhcnNlX2JsdC5jIHwgMTAzMCArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCiB0ZXN0cy9tZXNvbi5idWlsZCAgICAgICAgICAgICAg IHwgICAgMSArCiAzIGZpbGVzIGNoYW5nZWQsIDEwMzQgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IHRlc3RzL2k5MTUvZ2VtX2V4ZWNfcGFyc2VfYmx0LmMKCmRpZmYgLS1naXQgYS90 ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwppbmRleCA2YjFk NGNiMi4uMjc4MDFjODkgMTAwNjQ0Ci0tLSBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKKysrIGIv dGVzdHMvTWFrZWZpbGUuc291cmNlcwpAQCAtMjQ1LDYgKzI0NSw5IEBAIGdlbV9leGVjX3BhcmFt c19TT1VSQ0VTID0gaTkxNS9nZW1fZXhlY19wYXJhbXMuYwogVEVTVFNfcHJvZ3MgKz0gZ2VtX2V4 ZWNfcGFyc2UKIGdlbV9leGVjX3BhcnNlX1NPVVJDRVMgPSBpOTE1L2dlbV9leGVjX3BhcnNlLmMK IAorVEVTVFNfcHJvZ3MgKz0gZ2VtX2V4ZWNfcGFyc2VfYmx0CitnZW1fZXhlY19wYXJzZV9ibHRf U09VUkNFUyA9IGk5MTUvZ2VtX2V4ZWNfcGFyc2VfYmx0LmMKKwogVEVTVFNfcHJvZ3MgKz0gZ2Vt X2V4ZWNfcmVsb2MKIGdlbV9leGVjX3JlbG9jX1NPVVJDRVMgPSBpOTE1L2dlbV9leGVjX3JlbG9j LmMKIApkaWZmIC0tZ2l0IGEvdGVzdHMvaTkxNS9nZW1fZXhlY19wYXJzZV9ibHQuYyBiL3Rlc3Rz L2k5MTUvZ2VtX2V4ZWNfcGFyc2VfYmx0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAuLmI4YjJiYjUwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvaTkxNS9nZW1fZXhlY19w YXJzZV9ibHQuYwpAQCAtMCwwICsxLDEwMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxOCBJ bnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZy ZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMg c29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2Fy ZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5j bHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1v ZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Ig c2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hv bSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Ug YW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdy YXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRp b25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVE ICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElN UExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5P TklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZ UklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgor ICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBP VEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEgg VEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZU V0FSRS4KKyAqCisgKi8KKworI2luY2x1ZGUgImlndC5oIgorI2luY2x1ZGUgPHN0ZGxpYi5oPgor I2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8u aD4KKworI2luY2x1ZGUgPGRybS5oPgorCisvKiBUbyBoZWxwIGNyYWZ0IGNvbW1hbmRzIGtub3du IHRvIGJlIGludmFsaWQgYWNyb3NzIGFsbCBlbmdpbmVzICovCisjZGVmaW5lIElOU1RSX0NMSUVO VF9TSElGVAkyOQorI2RlZmluZSAgIElOU1RSX0lOVkFMSURfQ0xJRU5UICAweDcKKworI2RlZmlu ZSBNSV9MT0FEX1JFR0lTVEVSX1JFRyAoMHgyYSA8PCAyMykKKyNkZWZpbmUgTUlfU1RPUkVfUkVH SVNURVJfTUVNICgweDI0IDw8IDIzKQorI2RlZmluZSBNSV9BUkJfT05fT0ZGICgweDggPDwgMjMp CisjZGVmaW5lIE1JX1VTRVJfSU5URVJSVVBUICgweDAyIDw8IDIzKQorI2RlZmluZSBNSV9GTFVT SF9EVyAoMHgyNiA8PCAyMykKKyNkZWZpbmUgTUlfQVJCX0NIRUNLICgweDA1IDw8IDIzKQorI2Rl ZmluZSBNSV9SRVBPUlRfSEVBRCAoMHgwNyA8PCAyMykKKyNkZWZpbmUgTUlfU1VTUEVORF9GTFVT SCAoMHgwYiA8PCAyMykKKyNkZWZpbmUgTUlfTE9BRF9TQ0FOX0xJTkVTX0VYQ0wgKDB4MTMgPDwg MjMpCisjZGVmaW5lIE1JX1VQREFURV9HVFQgKDB4MjMgPDwgMjMpCisKKyNkZWZpbmUgQkNTX1NX Q1RSTCAgICAgMHgyMjIwMAorI2RlZmluZSBCQ1NfR1BSX0JBU0UgICAweDIyNjAwCisjZGVmaW5l IEJDU19HUFIobikgICAgICgweDIyNjAwICsgKG4pICogOCkKKyNkZWZpbmUgQkNTX0dQUl9VRFco bikgKDB4MjI2MDAgKyAobikgKiA4ICsgNCkKKworI2RlZmluZSBIQU5ETEVfU0laRSAgNDA5Ngor CitzdGF0aWMgaW50IHBhcnNlcl92ZXJzaW9uOworCitzdGF0aWMgaW50IGNvbW1hbmRfcGFyc2Vy X3ZlcnNpb24oaW50IGZkKQoreworCWludCB2ZXJzaW9uID0gLTE7CisJZHJtX2k5MTVfZ2V0cGFy YW1fdCBncDsKKworCWdwLnBhcmFtID0gSTkxNV9QQVJBTV9DTURfUEFSU0VSX1ZFUlNJT047CisJ Z3AudmFsdWUgPSAmdmVyc2lvbjsKKworCWlmIChkcm1Jb2N0bChmZCwgRFJNX0lPQ1RMX0k5MTVf R0VUUEFSQU0sICZncCkgPT0gMCkKKwkJcmV0dXJuIHZlcnNpb247CisKKwlyZXR1cm4gLTE7Cit9 CisKK3N0YXRpYyBpbnQgIF9fZXhlY19iYXRjaF9wYXRjaGVkKGludCBmZCwgaW50IGVuZ2luZSwK KwkJCQkgdWludDMyX3QgY21kX2JvLCBjb25zdCB1aW50MzJfdCAqY21kcywgaW50IHNpemUsCisJ CQkJIHVpbnQzMl90IHRhcmdldF9ibywgdWludDY0X3QgdGFyZ2V0X29mZnNldCwgdWludDY0X3Qg dGFyZ2V0X2RlbHRhKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1 ZjsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBvYmpbMl07CisJc3RydWN0IGRy bV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IHJlbG9jWzFdOworCisJZ2VtX3dyaXRlKGZkLCBj bWRfYm8sIDAsIGNtZHMsIHNpemUpOworCisJbWVtc2V0KG9iaiwgMCwgc2l6ZW9mKG9iaikpOwor CW9ialswXS5oYW5kbGUgPSB0YXJnZXRfYm87CisJb2JqWzFdLmhhbmRsZSA9IGNtZF9ibzsKKwor CW1lbXNldChyZWxvYywgMCwgc2l6ZW9mKHJlbG9jKSk7CisJcmVsb2NbMF0ub2Zmc2V0ID0gdGFy Z2V0X29mZnNldDsKKwlyZWxvY1swXS50YXJnZXRfaGFuZGxlID0gdGFyZ2V0X2JvOworCXJlbG9j WzBdLmRlbHRhID0gdGFyZ2V0X2RlbHRhOworCXJlbG9jWzBdLnJlYWRfZG9tYWlucyA9IEk5MTVf R0VNX0RPTUFJTl9DT01NQU5EOworCXJlbG9jWzBdLndyaXRlX2RvbWFpbiA9IEk5MTVfR0VNX0RP TUFJTl9DT01NQU5EOworCXJlbG9jWzBdLnByZXN1bWVkX29mZnNldCA9IC0xOworCisJb2JqWzFd LnJlbG9jc19wdHIgPSB0b191c2VyX3BvaW50ZXIocmVsb2MpOworCW9ialsxXS5yZWxvY2F0aW9u X2NvdW50ID0gMTsKKworCW1lbXNldCgmZXhlY2J1ZiwgMCwgc2l6ZW9mKGV4ZWNidWYpKTsKKwll eGVjYnVmLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKG9iaik7CisJZXhlY2J1Zi5idWZm ZXJfY291bnQgPSAyOworCWV4ZWNidWYuYmF0Y2hfbGVuID0gc2l6ZTsKKwlleGVjYnVmLmZsYWdz ID0gZW5naW5lOworCisJcmV0dXJuIF9fZ2VtX2V4ZWNidWYoZmQsICZleGVjYnVmKTsKK30KKwor c3RhdGljIHZvaWQgZXhlY19iYXRjaF9wYXRjaGVkKGludCBmZCwgaW50IGVuZ2luZSwKKwkJCSAg ICAgICB1aW50MzJfdCBjbWRfYm8sIGNvbnN0IHVpbnQzMl90ICpjbWRzLAorCQkJICAgICAgIGlu dCBzaXplLCBpbnQgcGF0Y2hfb2Zmc2V0LAorCQkJICAgICAgIGxvbmcgaW50IGV4cGVjdGVkX3Zh bHVlKQoreworCWNvbnN0IHVpbnQzMl90IHRhcmdldF9ibyA9IGdlbV9jcmVhdGUoZmQsIEhBTkRM RV9TSVpFKTsKKwl1aW50NjRfdCBhY3R1YWxfdmFsdWUgPSAwOworCWxvbmcgaW50IHJldDsKKwor CXJldCA9IF9fZXhlY19iYXRjaF9wYXRjaGVkKGZkLCBlbmdpbmUsIGNtZF9ibywgY21kcywgc2l6 ZSwgdGFyZ2V0X2JvLCBwYXRjaF9vZmZzZXQsIDApOworCWlmIChyZXQpIHsKKwkJaWd0X2Fzc2Vy dF9sdChyZXQsIDApOworCQlnZW1fY2xvc2UoZmQsIHRhcmdldF9ibyk7CisJCWlndF9hc3NlcnRf ZXEocmV0LCBleHBlY3RlZF92YWx1ZSk7CisJCXJldHVybjsKKwl9CisKKwlnZW1fcmVhZChmZCwg dGFyZ2V0X2JvLCAwLCAmYWN0dWFsX3ZhbHVlLCBzaXplb2YoYWN0dWFsX3ZhbHVlKSk7CisKKwln ZW1fY2xvc2UoZmQsIHRhcmdldF9ibyk7CisKKwlpZ3RfYXNzZXJ0X2VxKGFjdHVhbF92YWx1ZSwg ZXhwZWN0ZWRfdmFsdWUpOworfQorCitzdGF0aWMgaW50IF9fZXhlY19iYXRjaChpbnQgZmQsIGlu dCBlbmdpbmUsIHVpbnQzMl90IGNtZF9ibywKKwkJCWNvbnN0IHVpbnQzMl90ICpjbWRzLCBpbnQg c2l6ZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWY7CisJc3Ry dWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqWzFdOworCWludCByZXQ7CisKKwlnZW1f d3JpdGUoZmQsIGNtZF9ibywgMCwgY21kcywgc2l6ZSk7CisKKwltZW1zZXQob2JqLCAwLCBzaXpl b2Yob2JqKSk7CisJb2JqWzBdLmhhbmRsZSA9IGNtZF9ibzsKKworCW1lbXNldCgmZXhlY2J1Ziwg MCwgc2l6ZW9mKGV4ZWNidWYpKTsKKwlleGVjYnVmLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2lu dGVyKG9iaik7CisJZXhlY2J1Zi5idWZmZXJfY291bnQgPSAxOworCWV4ZWNidWYuYmF0Y2hfbGVu ID0gc2l6ZTsKKwlleGVjYnVmLmZsYWdzID0gZW5naW5lOworCisJcmV0ID0gIF9fZ2VtX2V4ZWNi dWYoZmQsICZleGVjYnVmKTsKKworCXJldHVybiByZXQ7Cit9CisKKyNpZiAwCitzdGF0aWMgdm9p ZCBwcmludF9iYXRjaChjb25zdCB1aW50MzJfdCAqY21kcywgY29uc3QgdWludDMyX3Qgc3opCit7 CisJY29uc3QgaW50IGNvbW1hbmRzID0gc3ogLyA0OworCWludCBpOworCisJaWd0X2luZm8oIkJh dGNoIHNpemUgJWRcbiIsIHN6KTsKKwlmb3IgKGkgPSAwOyBpIDwgY29tbWFuZHM7IGkrKykKKwkJ aWd0X2luZm8oIjB4JTA4eDogMHglMDh4XG4iLCBpLCBjbWRzW2ldKTsKK30KKyNlbHNlCisjZGVm aW5lIHByaW50X2JhdGNoKGNtZHMsIHNpemUpCisjZW5kaWYKKworI2RlZmluZSBleGVjX2JhdGNo KGZkLCBlbmdpbmUsIGJvLCBjbWRzLCBzeiwgZXhwZWN0ZWQpCVwKKwlwcmludF9iYXRjaChjbWRz LCBzeik7IFwKKwlpZ3RfYXNzZXJ0X2VxKF9fZXhlY19iYXRjaChmZCwgZW5naW5lLCBibywgY21k cywgc3opLCBleHBlY3RlZCkKKworc3RhdGljIHZvaWQgZXhlY19zcGxpdF9iYXRjaChpbnQgZmQs IGludCBlbmdpbmUsIGNvbnN0IHVpbnQzMl90ICpjbWRzLAorCQkJICAgICBpbnQgc2l6ZSwgaW50 IGV4cGVjdGVkX3JldCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNi dWY7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqWzFdOworCXVpbnQzMl90 IGNtZF9ibzsKKwljb25zdCB1aW50MzJfdCBub29wWzEwMjRdID0geyAwIH07CisJY29uc3QgaW50 IGFsbG9jX3NpemUgPSA0MDk2ICogMjsKKwljb25zdCBpbnQgYWN0dWFsX3N0YXJ0X29mZnNldCA9 IDQwOTYtc2l6ZW9mKHVpbnQzMl90KTsKKworCS8qIEFsbG9jYXRlIGFuZCBmaWxsIGEgMi1wYWdl IGJhdGNoIHdpdGggbm9vcHMgKi8KKwljbWRfYm8gPSBnZW1fY3JlYXRlKGZkLCBhbGxvY19zaXpl KTsKKwlnZW1fd3JpdGUoZmQsIGNtZF9ibywgMCwgbm9vcCwgc2l6ZW9mKG5vb3ApKTsKKwlnZW1f d3JpdGUoZmQsIGNtZF9ibywgNDA5Niwgbm9vcCwgc2l6ZW9mKG5vb3ApKTsKKworCS8qIFdyaXRl IHRoZSBwcm92aWRlZCBjb21tYW5kcyBzdWNoIHRoYXQgdGhlIGZpcnN0IGR3b3JkCisJICogb2Yg dGhlIGNvbW1hbmQgYnVmZmVyIGlzIHRoZSBsYXN0IGR3b3JkIG9mIHRoZSBmaXJzdAorCSAqIHBh Z2UgKGkuZS4gdGhlIGNvbW1hbmQgaXMgc3BsaXQgYWNyb3NzIHRoZSB0d28gcGFnZXMpLgorCSAq LworCWdlbV93cml0ZShmZCwgY21kX2JvLCBhY3R1YWxfc3RhcnRfb2Zmc2V0LCBjbWRzLCBzaXpl KTsKKworCW1lbXNldChvYmosIDAsIHNpemVvZihvYmopKTsKKwlvYmpbMF0uaGFuZGxlID0gY21k X2JvOworCisJbWVtc2V0KCZleGVjYnVmLCAwLCBzaXplb2YoZXhlY2J1ZikpOworCWV4ZWNidWYu YnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIob2JqKTsKKwlleGVjYnVmLmJ1ZmZlcl9jb3Vu dCA9IDE7CisJLyogTkI6IFdlIHdhbnQgYmF0Y2hfc3RhcnRfb2Zmc2V0IGFuZCBiYXRjaF9sZW4g dG8gcG9pbnQgdG8gdGhlIGJsb2NrCisJICogb2YgdGhlIGFjdHVhbCBjb21tYW5kcyAoaS5lLiBh dCB0aGUgbGFzdCBkd29yZCBvZiB0aGUgZmlyc3QgcGFnZSksCisJICogYnV0IGhhdmUgdG8gYWRq dXN0IGJvdGggdGhlIHN0YXJ0IG9mZnNldCBhbmQgbGVuZ3RoIHRvIG1lZXQgdGhlCisJICoga2Vy bmVsIGRyaXZlcidzIHJlcXVpcmVtZW50cyBvbiB0aGUgYWxpZ25tZW50IG9mIHRob3NlIGZpZWxk cy4KKwkgKi8KKwlleGVjYnVmLmJhdGNoX3N0YXJ0X29mZnNldCA9IGFjdHVhbF9zdGFydF9vZmZz ZXQgJiB+MHg3OworCWV4ZWNidWYuYmF0Y2hfbGVuID0KKwkJQUxJR04oc2l6ZSArIGFjdHVhbF9z dGFydF9vZmZzZXQgLSBleGVjYnVmLmJhdGNoX3N0YXJ0X29mZnNldCwKKwkJICAgICAgMHg4KTsK KwlleGVjYnVmLmZsYWdzID0gZW5naW5lOworCisJaWd0X2Fzc2VydF9lcShfX2dlbV9leGVjYnVm KGZkLCAmZXhlY2J1ZiksIGV4cGVjdGVkX3JldCk7CisKKwlnZW1fY2xvc2UoZmQsIGNtZF9ibyk7 Cit9CisKK3N0YXRpYyB2b2lkIGV4ZWNfYmF0Y2hfY2hhaW5lZChpbnQgZmQsIGludCBlbmdpbmUs CisJCQkgICAgICAgdWludDMyX3QgY21kX2JvLCBjb25zdCB1aW50MzJfdCAqY21kcywKKwkJCSAg ICAgICBpbnQgc2l6ZSwgaW50IHBhdGNoX29mZnNldCwKKwkJCSAgICAgICB1aW50NjRfdCBleHBl Y3RlZF92YWx1ZSwKKwkJCSAgICAgICBpbnQgZXhwZWN0ZWRfcmV0dXJuKQoreworCXN0cnVjdCBk cm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZjsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4 ZWNfb2JqZWN0MiBvYmpbM107CisJc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5 IHJlbG9jWzFdOworCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSBmaXJzdF9s ZXZlbF9yZWxvYzsKKworCWNvbnN0IHVpbnQzMl90IHRhcmdldF9ibyA9IGdlbV9jcmVhdGUoZmQs IDQwOTYpOworCWNvbnN0IHVpbnQzMl90IGZpcnN0X2xldmVsX2JvID0gZ2VtX2NyZWF0ZShmZCwg NDA5Nik7CisJdWludDY0X3QgYWN0dWFsX3ZhbHVlID0gMDsKKwlpbnQgcmV0OworCisJY29uc3Qg dWludDMyX3QgZmlyc3RfbGV2ZWxfY21kc1tdID0geworCQlNSV9CQVRDSF9CVUZGRVJfU1RBUlQg fCBNSV9CQVRDSF9OT05fU0VDVVJFX0k5NjUgfCAxLAorCQkwLAorCQkwLAorCQlNSV9CQVRDSF9C VUZGRVJfRU5ELAorCX07CisKKwlnZW1fd3JpdGUoZmQsIGZpcnN0X2xldmVsX2JvLCAwLAorCQkg IGZpcnN0X2xldmVsX2NtZHMsIHNpemVvZihmaXJzdF9sZXZlbF9jbWRzKSk7CisJZ2VtX3dyaXRl KGZkLCBjbWRfYm8sIDAsIGNtZHMsIHNpemUpOworCisJbWVtc2V0KG9iaiwgMCwgc2l6ZW9mKG9i aikpOworCW9ialswXS5oYW5kbGUgPSB0YXJnZXRfYm87CisJb2JqWzFdLmhhbmRsZSA9IGNtZF9i bzsKKwlvYmpbMl0uaGFuZGxlID0gZmlyc3RfbGV2ZWxfYm87CisKKwltZW1zZXQocmVsb2MsIDAs IHNpemVvZihyZWxvYykpOworCXJlbG9jWzBdLm9mZnNldCA9IHBhdGNoX29mZnNldDsKKwlyZWxv Y1swXS5kZWx0YSA9IDA7CisJcmVsb2NbMF0udGFyZ2V0X2hhbmRsZSA9IHRhcmdldF9ibzsKKwly ZWxvY1swXS5yZWFkX2RvbWFpbnMgPSBJOTE1X0dFTV9ET01BSU5fQ09NTUFORDsKKwlyZWxvY1sw XS53cml0ZV9kb21haW4gPSBJOTE1X0dFTV9ET01BSU5fQ09NTUFORDsKKwlyZWxvY1swXS5wcmVz dW1lZF9vZmZzZXQgPSAtMTsKKworCW9ialsxXS5yZWxvY2F0aW9uX2NvdW50ID0gMTsKKwlvYmpb MV0ucmVsb2NzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcigmcmVsb2MpOworCisJbWVtc2V0KCZmaXJz dF9sZXZlbF9yZWxvYywgMCwgc2l6ZW9mKGZpcnN0X2xldmVsX3JlbG9jKSk7CisJZmlyc3RfbGV2 ZWxfcmVsb2Mub2Zmc2V0ID0gNDsKKwlmaXJzdF9sZXZlbF9yZWxvYy5kZWx0YSA9IDA7CisJZmly c3RfbGV2ZWxfcmVsb2MudGFyZ2V0X2hhbmRsZSA9IGNtZF9ibzsKKwlmaXJzdF9sZXZlbF9yZWxv Yy5yZWFkX2RvbWFpbnMgPSBJOTE1X0dFTV9ET01BSU5fQ09NTUFORDsKKwlmaXJzdF9sZXZlbF9y ZWxvYy53cml0ZV9kb21haW4gPSAwOworCW9ialsyXS5yZWxvY2F0aW9uX2NvdW50ID0gMTsKKwlv YmpbMl0ucmVsb2NzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcigmZmlyc3RfbGV2ZWxfcmVsb2MpOwor CisJbWVtc2V0KCZleGVjYnVmLCAwLCBzaXplb2YoZXhlY2J1ZikpOworCWV4ZWNidWYuYnVmZmVy c19wdHIgPSB0b191c2VyX3BvaW50ZXIob2JqKTsKKwlleGVjYnVmLmJ1ZmZlcl9jb3VudCA9IDM7 CisJZXhlY2J1Zi5iYXRjaF9sZW4gPSBzaXplb2YoZmlyc3RfbGV2ZWxfY21kcyk7CisJZXhlY2J1 Zi5mbGFncyA9IGVuZ2luZTsKKworCXJldCA9IF9fZ2VtX2V4ZWNidWYoZmQsICZleGVjYnVmKTsK KwlpZiAoZXhwZWN0ZWRfcmV0dXJuICYmIHJldCA9PSBleHBlY3RlZF9yZXR1cm4pCisJCWdvdG8g b3V0OworCisJZ2VtX3JlYWQoZmQsdGFyZ2V0X2JvLCAwLCAmYWN0dWFsX3ZhbHVlLCBzaXplb2Yo YWN0dWFsX3ZhbHVlKSk7CisKK291dDoKKwlpZiAoIWV4cGVjdGVkX3JldHVybikKKwkJaWd0X2Fz c2VydF9lcShleHBlY3RlZF92YWx1ZSwgYWN0dWFsX3ZhbHVlKTsKKwllbHNlCisJCWlndF9hc3Nl cnRfbmVxKGV4cGVjdGVkX3ZhbHVlLCBhY3R1YWxfdmFsdWUpOworCisJZ2VtX2Nsb3NlKGZkLCBm aXJzdF9sZXZlbF9ibyk7CisJZ2VtX2Nsb3NlKGZkLCB0YXJnZXRfYm8pOworfQorCitzdGF0aWMg dm9pZCB0ZXN0X3NlY3VyZV9iYXRjaGVzKGNvbnN0IGludCBmZCkKK3sKKwlpbnQgdiA9IC0xOwor CWRybV9pOTE1X2dldHBhcmFtX3QgZ3A7CisKKwlncC5wYXJhbSA9IEk5MTVfUEFSQU1fSEFTX1NF Q1VSRV9CQVRDSEVTOworCWdwLnZhbHVlID0gJnY7CisKKwlpZ3RfYXNzZXJ0X2VxKGRybUlvY3Rs KGZkLCBEUk1fSU9DVExfSTkxNV9HRVRQQVJBTSwgJmdwKSwgMCk7CisJaWd0X2Fzc2VydF9lcSh2 LCAwKTsKK30KKworc3RydWN0IGNtZCB7CisJdWludDMyX3QgY21kOworCWludCBsZW47CisJY29u c3QgY2hhciAqbmFtZTsKK307CisKKyNkZWZpbmUgQ01EKEMsIEwpIHsgLmNtZCA9IChDKSwgLmxl biA9IChMKSwgLm5hbWUgPSAjQyB9CisjZGVmaW5lIENNRF9OKEMpIHsgLmNtZCA9IChDKSwgLmxl biA9IDEsIC5uYW1lID0gI0MgfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNtZCBhbGxvd2VkX2Nt ZHNbXSA9IHsKKwlDTURfTihNSV9OT09QKSwKKwlDTURfTihNSV9VU0VSX0lOVEVSUlVQVCksCisJ Q01EX04oTUlfV0FJVF9GT1JfRVZFTlQpLAorCUNNRChNSV9GTFVTSF9EVywgNSksCisJQ01EX04o TUlfQVJCX0NIRUNLKSwKKwlDTURfTihNSV9SRVBPUlRfSEVBRCksCisJQ01EX04oTUlfRkxVU0gp LAorCUNNRF9OKE1JX0FSQl9PTl9PRkYpLAorCUNNRF9OKE1JX1NVU1BFTkRfRkxVU0gpLAorCUNN RChNSV9MT0FEX1NDQU5fTElORVNfSU5DTCwgMiksCisJQ01EKE1JX0xPQURfU0NBTl9MSU5FU19F WENMLCAyKSwKK307CisKK3N0YXRpYyB1aW50MzJfdCAqaW5qZWN0X2NtZCh1aW50MzJfdCAqYmF0 Y2gsIGNvbnN0IHVpbnQzMl90IGNtZCwgaW50IGxlbikKK3sKKwlpbnQgaSA9IDA7CisKKwliYXRj aFtpKytdID0gY21kOworCisJd2hpbGUgKC0tbGVuKQorCQliYXRjaFtpKytdID0gMDsKKworCXJl dHVybiAmYmF0Y2hbaV07Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGJhdGNoX251bV9jbWRz KGNvbnN0IHVpbnQzMl90ICogY29uc3QgYmF0Y2hfc3RhcnQsCisJCQkJICAgIGNvbnN0IHVpbnQz Ml90ICogY29uc3QgYmF0Y2hfZW5kKQoreworCWlndF9hc3NlcnRfbHRlKCh1bnNpZ25lZCBsb25n KWJhdGNoX3N0YXJ0LCAodW5zaWduZWQgbG9uZyliYXRjaF9lbmQpOworCisJcmV0dXJuIGJhdGNo X2VuZCAtIGJhdGNoX3N0YXJ0OworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBiYXRjaF9ieXRl cyhjb25zdCB1aW50MzJfdCAqIGNvbnN0IGJhdGNoX3N0YXJ0LAorCQkJCSBjb25zdCB1aW50MzJf dCAqIGNvbnN0IGJhdGNoX2VuZCkKK3sKKwljb25zdCB1bnNpZ25lZCBsb25nIGJ5dGVzID0gYmF0 Y2hfbnVtX2NtZHMoYmF0Y2hfc3RhcnQsIGJhdGNoX2VuZCkgKiA0OworCisJaWd0X2Fzc2VydCgh KGJ5dGVzICYgMHg3KSk7CisKKwlyZXR1cm4gYnl0ZXM7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rf YWxsb3dlZF9hbGwoY29uc3QgaW50IGZkLCBjb25zdCB1aW50MzJfdCBoYW5kbGUpCit7CisJdWlu dDMyX3QgYmF0Y2hbNDA5Nl07CisJdWludDMyX3QgKmIgPSAmYmF0Y2hbMF07CisKKwlmb3IgKGlu dCBpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWxsb3dlZF9jbWRzKTsgaSsrKQorCQliID0gaW5qZWN0 X2NtZChiLCBhbGxvd2VkX2NtZHNbaV0uY21kLAorCQkJICAgICAgIGFsbG93ZWRfY21kc1tpXS5s ZW4pOworCisJaWYgKCEoYmF0Y2hfbnVtX2NtZHMoYmF0Y2gsIGIpICUgMikpCisJCWIgPSBpbmpl Y3RfY21kKGIsIE1JX05PT1AsIDEpOworCisJYiA9IGluamVjdF9jbWQoYiwgTUlfQkFUQ0hfQlVG RkVSX0VORCwgMSk7CisKKwlleGVjX2JhdGNoKGZkLCBJOTE1X0VYRUNfQkxULCBoYW5kbGUsIGJh dGNoLCBiYXRjaF9ieXRlcyhiYXRjaCwgYiksIDApOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2Fs bG93ZWRfc2luZ2xlKGNvbnN0IGludCBmZCwgY29uc3QgdWludDMyX3QgaGFuZGxlKQoreworCXVp bnQzMl90IGJhdGNoWzQwOTZdOworCWludCByZXQ7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IEFS UkFZX1NJWkUoYWxsb3dlZF9jbWRzKTsgaSsrKSB7CisJCXVpbnQzMl90ICpiID0gJmJhdGNoWzBd OworCisJCWIgPSBpbmplY3RfY21kKGIsIGFsbG93ZWRfY21kc1tpXS5jbWQsCisJCQkgICAgICAg YWxsb3dlZF9jbWRzW2ldLmxlbik7CisKKwkJaWYgKCEoYmF0Y2hfbnVtX2NtZHMoYmF0Y2gsIGIp ICUgMikpCisJCQliID0gaW5qZWN0X2NtZChiLCBNSV9OT09QLCAxKTsKKworCQliID0gaW5qZWN0 X2NtZChiLCBNSV9CQVRDSF9CVUZGRVJfRU5ELCAxKTsKKworCQlyZXQgPSBfX2V4ZWNfYmF0Y2go ZmQsIEk5MTVfRVhFQ19CTFQsIGhhbmRsZSwKKwkJCQkgICBiYXRjaCwgYmF0Y2hfYnl0ZXMoYmF0 Y2gsIGIpKTsKKworCQlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7CisJfTsKK30KKworc3RhdGljIHZv aWQgdGVzdF9iYl9zZWN1cmUoY29uc3QgaW50IGZkLCBjb25zdCB1aW50MzJfdCBoYW5kbGUpCit7 CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmOworCXN0cnVjdCBkcm1f aTkxNV9nZW1fZXhlY19vYmplY3QyIG9ialsxXTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9j YXRpb25fZW50cnkgcmVsb2NbMV07CisJaW50IHJldDsKKworCWNvbnN0IHVpbnQzMl90IGJhdGNo X3NlY3VyZVtdID0geworCQlNSV9CQVRDSF9CVUZGRVJfU1RBUlQgfCAxLAorCQkxMiwKKwkJMCwK KwkJTUlfTk9PUCwKKwkJTUlfTk9PUCwKKwkJTUlfQkFUQ0hfQlVGRkVSX0VORCwKKwl9OworCisJ Z2VtX3dyaXRlKGZkLCBoYW5kbGUsIDAsIGJhdGNoX3NlY3VyZSwgc2l6ZW9mKGJhdGNoX3NlY3Vy ZSkpOworCisJbWVtc2V0KG9iaiwgMCwgc2l6ZW9mKG9iaikpOworCW9ialswXS5oYW5kbGUgPSBo YW5kbGU7CisKKwltZW1zZXQocmVsb2MsIDAsIHNpemVvZihyZWxvYykpOworCXJlbG9jWzBdLm9m ZnNldCA9IDEgKiBzaXplb2YodWludDMyX3QpOworCXJlbG9jWzBdLnRhcmdldF9oYW5kbGUgPSBo YW5kbGU7CisJcmVsb2NbMF0uZGVsdGEgPSA0ICogc2l6ZW9mKHVpbnQzMl90KTsKKwlyZWxvY1sw XS5yZWFkX2RvbWFpbnMgPSBJOTE1X0dFTV9ET01BSU5fQ09NTUFORDsKKwlyZWxvY1swXS53cml0 ZV9kb21haW4gPSAwOworCXJlbG9jWzBdLnByZXN1bWVkX29mZnNldCA9IC0xOworCisJb2JqWzBd LnJlbG9jc19wdHIgPSB0b191c2VyX3BvaW50ZXIocmVsb2MpOworCW9ialswXS5yZWxvY2F0aW9u X2NvdW50ID0gMTsKKworCW1lbXNldCgmZXhlY2J1ZiwgMCwgc2l6ZW9mKGV4ZWNidWYpKTsKKwll eGVjYnVmLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKG9iaik7CisJZXhlY2J1Zi5idWZm ZXJfY291bnQgPSAxOworCWV4ZWNidWYuYmF0Y2hfbGVuID0gc2l6ZW9mKGJhdGNoX3NlY3VyZSk7 CisJZXhlY2J1Zi5mbGFncyA9IEk5MTVfRVhFQ19CTFQ7CisKKwlyZXQgPSBfX2dlbV9leGVjYnVm KGZkLCAmZXhlY2J1Zik7CisKKwlpZ3RfYXNzZXJ0X2VxKHJldCwgLUVBQ0NFUyk7Cit9CisKKyNk ZWZpbmUgQkJfU1RBUlRfUEFSQU0gMAorI2RlZmluZSBCQl9TVEFSVF9PVVQgICAxCisjZGVmaW5l IEJCX1NUQVJUX0NNRCAgIDIKKyNkZWZpbmUgQkJfU1RBUlRfRkFSICAgMworCitzdGF0aWMgdm9p ZCB0ZXN0X2JiX3N0YXJ0KGNvbnN0IGludCBmZCwgY29uc3QgdWludDMyX3QgaGFuZGxlLCBpbnQg dGVzdCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWY7CisJc3Ry dWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqWzJdOworCXN0cnVjdCBkcm1faTkxNV9n ZW1fcmVsb2NhdGlvbl9lbnRyeSByZWxvY1szXTsKKwljb25zdCB1aW50MzJfdCB0YXJnZXRfYm8g PSBnZW1fY3JlYXRlKGZkLCA0MDk2KTsKKwl1aW50MzJfdCAqZHN0OworCWludCByZXQ7CisJdW5z aWduZWQgaW50IGp1bXBfb2ZmLCBmb290ZXJfcG9zOworCWNvbnN0IHVpbnQzMl90IGJhdGNoX2hl YWRlcltdID0geworCQlNSV9OT09QLAorCQlNSV9OT09QLAorCQlNSV9OT09QLAorCQlNSV9OT09Q LAorCQlNSV9TVE9SRV9EV09SRF9JTU0sCisJCTAsCisJCTAsCisJCTEsCisJCU1JX1NUT1JFX0RX T1JEX0lNTSwKKwkJNCwKKwkJMCwKKwkJMiwKKwkJTUlfQ09ORF9CQVRDSF9CVUZGRVJfRU5EIHwg MSwKKwkJMCwKKwkJMCwKKwkJMAorCX07CisJY29uc3QgdWludDMyX3QgYmF0Y2hfZm9vdGVyW10g PSB7CisJCU1JX0JBVENIX0JVRkZFUl9TVEFSVCB8IE1JX0JBVENIX05PTl9TRUNVUkVfSTk2NSB8 IDEsCisJCTAsCisJCTAsCisJCU1JX0JBVENIX0JVRkZFUl9FTkQsCisJfTsKKwl1aW50MzJfdCBi YXRjaFsxMDI0XTsKKworCWlndF9yZXF1aXJlKGdlbV9jYW5fc3RvcmVfZHdvcmQoZmQsIEk5MTVf RVhFQ19CTFQpKTsKKworCW1lbXNldChiYXRjaCwgMCwgc2l6ZW9mKGJhdGNoKSk7CisJbWVtY3B5 KGJhdGNoLCBiYXRjaF9oZWFkZXIsIHNpemVvZihiYXRjaF9oZWFkZXIpKTsKKworCXN3aXRjaCAo dGVzdCkgeworCWNhc2UgQkJfU1RBUlRfUEFSQU06CisJCWp1bXBfb2ZmID0gNSAqIHNpemVvZih1 aW50MzJfdCk7CisJCWJyZWFrOworCWNhc2UgQkJfU1RBUlRfQ01EOgorCWNhc2UgQkJfU1RBUlRf RkFSOgorCQlqdW1wX29mZiA9IDggKiBzaXplb2YodWludDMyX3QpOworCQlicmVhazsKKwlkZWZh dWx0OgorCQlqdW1wX29mZiA9IDB4ZjAwZDAwMDA7CisJfQorCisJaWYgKHRlc3QgPT0gQkJfU1RB UlRfRkFSKQorCQlmb290ZXJfcG9zID0gKHNpemVvZihiYXRjaCkgLSBzaXplb2YoYmF0Y2hfZm9v dGVyKSk7CisJZWxzZQorCQlmb290ZXJfcG9zID0gc2l6ZW9mKGJhdGNoX2hlYWRlcik7CisKKwlt ZW1jcHkoYmF0Y2ggKyBmb290ZXJfcG9zIC8gc2l6ZW9mKHVpbnQzMl90KSwKKwkgICAgICAgYmF0 Y2hfZm9vdGVyLCBzaXplb2YoYmF0Y2hfZm9vdGVyKSk7CisJZ2VtX3dyaXRlKGZkLCBoYW5kbGUs IDAsIGJhdGNoLCBzaXplb2YoYmF0Y2gpKTsKKworCW1lbXNldChvYmosIDAsIHNpemVvZihvYmop KTsKKwlvYmpbMF0uaGFuZGxlID0gdGFyZ2V0X2JvOworCW9ialsxXS5oYW5kbGUgPSBoYW5kbGU7 CisKKwltZW1zZXQocmVsb2MsIDAsIHNpemVvZihyZWxvYykpOworCXJlbG9jWzBdLm9mZnNldCA9 IDUgKiBzaXplb2YodWludDMyX3QpOworCXJlbG9jWzBdLnRhcmdldF9oYW5kbGUgPSBvYmpbMF0u aGFuZGxlOworCXJlbG9jWzBdLmRlbHRhID0gMDsKKwlyZWxvY1swXS5yZWFkX2RvbWFpbnMgPSBJ OTE1X0dFTV9ET01BSU5fQ09NTUFORDsKKwlyZWxvY1swXS53cml0ZV9kb21haW4gPSBJOTE1X0dF TV9ET01BSU5fQ09NTUFORDsKKwlyZWxvY1swXS5wcmVzdW1lZF9vZmZzZXQgPSAtMTsKKworCXJl bG9jWzFdLm9mZnNldCA9IDkgKiBzaXplb2YodWludDMyX3QpOworCXJlbG9jWzFdLnRhcmdldF9o YW5kbGUgPSBvYmpbMF0uaGFuZGxlOworCXJlbG9jWzFdLmRlbHRhID0gMSAqIHNpemVvZih1aW50 MzJfdCk7CisJcmVsb2NbMV0ucmVhZF9kb21haW5zID0gSTkxNV9HRU1fRE9NQUlOX0NPTU1BTkQ7 CisJcmVsb2NbMV0ud3JpdGVfZG9tYWluID0gSTkxNV9HRU1fRE9NQUlOX0NPTU1BTkQ7CisJcmVs b2NbMV0ucHJlc3VtZWRfb2Zmc2V0ID0gLTE7CisKKwlyZWxvY1syXS5vZmZzZXQgPSBmb290ZXJf cG9zICsgMSAqIHNpemVvZih1aW50MzJfdCk7CisJcmVsb2NbMl0udGFyZ2V0X2hhbmRsZSA9IG9i alsxXS5oYW5kbGU7CisJcmVsb2NbMl0uZGVsdGEgPSBqdW1wX29mZjsKKwlyZWxvY1syXS5yZWFk X2RvbWFpbnMgPSBJOTE1X0dFTV9ET01BSU5fQ09NTUFORDsKKwlyZWxvY1syXS53cml0ZV9kb21h aW4gPSAwOworCXJlbG9jWzJdLnByZXN1bWVkX29mZnNldCA9IC0xOworCisJb2JqWzFdLnJlbG9j c19wdHIgPSB0b191c2VyX3BvaW50ZXIocmVsb2MpOworCW9ialsxXS5yZWxvY2F0aW9uX2NvdW50 ID0gMzsKKworCW1lbXNldCgmZXhlY2J1ZiwgMCwgc2l6ZW9mKGV4ZWNidWYpKTsKKwlleGVjYnVm LmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKG9iaik7CisJZXhlY2J1Zi5idWZmZXJfY291 bnQgPSAyOworCWV4ZWNidWYuYmF0Y2hfbGVuID0gc2l6ZW9mKGJhdGNoKTsKKwlleGVjYnVmLmZs YWdzID0gSTkxNV9FWEVDX0JMVDsKKworCWRzdCA9IGdlbV9tbWFwX19jcHUoZmQsIG9ialswXS5o YW5kbGUsIDAsIDQwOTYsCisJCQkgICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7CisKKwlpZ3Rf YXNzZXJ0X2VxKGRzdFswXSwgMCk7CisJaWd0X2Fzc2VydF9lcShkc3RbMV0sIDApOworCisJcmV0 ID0gX19nZW1fZXhlY2J1ZihmZCwgJmV4ZWNidWYpOworCisJc3dpdGNoICh0ZXN0KSB7CisJY2Fz ZSBCQl9TVEFSVF9QQVJBTToKKwkJaWd0X2Fzc2VydF9lcShyZXQsIC1FSU5WQUwpOworCQlicmVh azsKKwljYXNlIEJCX1NUQVJUX0NNRDoKKwljYXNlIEJCX1NUQVJUX0ZBUjoKKwkJaWd0X2Fzc2Vy dF9lcShyZXQsIDApOworCisJCXdoaWxlIChSRUFEX09OQ0UoZHN0WzBdKSA9PSAwKQorCQkgICAg ICAgOworCisJCXdoaWxlIChSRUFEX09OQ0UoZHN0WzFdKSA9PSAwKQorCQkJOworCisJCWlndF9h c3NlcnRfZXEoZHN0WzBdLCAxKTsKKwkJaWd0X2Fzc2VydF9lcShkc3RbMV0sIDIpOworCisJCWln dF9pbmZvKCJ2YWx1ZXMgbm93ICV4ICV4XG4iLCBkc3RbMF0sIGRzdFsxXSk7CisKKwkJZHN0WzBd ID0gMDsKKworCQlpZ3RfaW5mbygidmFsdWVzIG5vdyAleCAleFxuIiwgZHN0WzBdLCBkc3RbMV0p OworCisJCWlndF9hc3NlcnRfZXEoZHN0WzBdLCAwKTsKKwkJaWd0X2Fzc2VydF9lcShkc3RbMV0s IDIpOworCisJCWJyZWFrOworCisJY2FzZSBCQl9TVEFSVF9PVVQ6CisJCWlndF9hc3NlcnRfZXEo cmV0LCAtRUlOVkFMKTsKKwkJYnJlYWs7CisJfQorCisJZ2VtX211bm1hcChkc3QsIDQwOTYpOwor CWdlbV9jbG9zZShmZCwgdGFyZ2V0X2JvKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9iYl9jaGFp bmVkKGNvbnN0IGludCBmZCwgY29uc3QgdWludDMyX3QgaGFuZGxlKQoreworCWNvbnN0IHVpbnQz Ml90IGJhdGNoW10gPSB7CisJCSgweDIwIDw8IDIzKSB8IDIsIC8qIE1JX1NUT1JFX0RBVEFfSU1N ICovCisJCTAsCisJCTAsCisJCTB4YmFhZGYwMGQsCisJCU1JX05PT1AsCisJCU1JX0JBVENIX0JV RkZFUl9FTkQsCisJfTsKKworCWV4ZWNfYmF0Y2hfY2hhaW5lZChmZCwgSTkxNV9FWEVDX1JFTkRF UiwKKwkJCSAgIGhhbmRsZSwKKwkJCSAgIGJhdGNoLCBzaXplb2YoYmF0Y2gpLAorCQkJICAgNCwK KwkJCSAgIDB4YmFhZGYwMGQsCisJCQkgICAwKTsKKworCWV4ZWNfYmF0Y2hfY2hhaW5lZChmZCwg STkxNV9FWEVDX0JMVCwKKwkJCSAgIGhhbmRsZSwKKwkJCSAgIGJhdGNoLCBzaXplb2YoYmF0Y2gp LAorCQkJICAgNCwKKwkJCSAgIDB4YmFhZGYwMGQsCisJCQkgICBFUEVSTSk7Cit9CisKK3N0YXRp YyB2b2lkIHRlc3RfY21kX2Nyb3NzaW5nX3BhZ2UoY29uc3QgaW50IGZkLCBjb25zdCB1aW50MzJf dCBoYW5kbGUpCit7CisJY29uc3QgdWludDMyX3QgbHJpX29rW10gPSB7CisJCU1JX0xPQURfUkVH SVNURVJfSU1NLAorCQlCQ1NfR1BSKDApLAorCQkweGJhYWRmMDBkLAorCQlNSV9CQVRDSF9CVUZG RVJfRU5ELAorCX07CisJY29uc3QgdWludDMyX3Qgc3RvcmVfcmVnW10gPSB7CisJCU1JX1NUT1JF X1JFR0lTVEVSX01FTSB8ICg0IC0gMiksCisJCUJDU19HUFIoMCksCisJCTAsIC8qIHJlbG9jICov CisJCTAsIC8qIHJlbG9jICovCisJCU1JX05PT1AsCisJCU1JX0JBVENIX0JVRkZFUl9FTkQsCisJ fTsKKworCWV4ZWNfc3BsaXRfYmF0Y2goZmQsIEk5MTVfRVhFQ19CTFQsCisJCQkgbHJpX29rLCBz aXplb2YobHJpX29rKSwKKwkJCSAwKTsKKworCWV4ZWNfYmF0Y2hfcGF0Y2hlZChmZCwgSTkxNV9F WEVDX0JMVCwgaGFuZGxlLAorCQkJICAgc3RvcmVfcmVnLCBzaXplb2Yoc3RvcmVfcmVnKSwKKwkJ CSAgIDIgKiBzaXplb2YodWludDMyX3QpLCAvKiByZWxvYyAqLworCQkJICAgMHhiYWFkZjAwZCk7 Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfaW52YWxpZF9sZW5ndGgoY29uc3QgaW50IGZkLCBjb25z dCB1aW50MzJfdCBoYW5kbGUpCit7CisJY29uc3QgdWludDMyX3Qgb2tfdmFsID0gMHhiYWFkZjAw ZDsKKwljb25zdCB1aW50MzJfdCBiYWRfdmFsID0gMHhmMDBkYmFhZDsKKwljb25zdCB1aW50MzJf dCBub29wc1s4MTkyXSA9IHsgMCwgfTsKKworCWNvbnN0IHVpbnQzMl90IGxyaV9va1tdID0gewor CQlNSV9MT0FEX1JFR0lTVEVSX0lNTSwKKwkJQkNTX0dQUigwKSwKKwkJb2tfdmFsLAorCQlNSV9C QVRDSF9CVUZGRVJfRU5ELAorCX07CisKKwljb25zdCB1aW50MzJfdCBscmlfYmFkW10gPSB7CisJ CU1JX0xPQURfUkVHSVNURVJfSU1NLAorCQlCQ1NfR1BSKDApLAorCQliYWRfdmFsLAorCQlNSV9C QVRDSF9CVUZGRVJfRU5ELAorCX07CisKKwljb25zdCB1aW50MzJfdCBzdG9yZV9yZWdbXSA9IHsK KwkJTUlfU1RPUkVfUkVHSVNURVJfTUVNIHwgKDQgLSAyKSwKKwkJQkNTX0dQUigwKSwKKwkJMCwg LyogcmVsb2MgKi8KKwkJMCwgLyogcmVsb2MgKi8KKwkJTUlfTk9PUCwKKwkJTUlfQkFUQ0hfQlVG RkVSX0VORCwKKwl9OworCisJZXhlY19iYXRjaChmZCwgSTkxNV9FWEVDX0JMVCwgaGFuZGxlLAor CQkgICBscmlfb2ssIHNpemVvZihscmlfb2spLAorCQkgICAwKTsKKworCWV4ZWNfYmF0Y2hfcGF0 Y2hlZChmZCwgSTkxNV9FWEVDX0JMVCwgaGFuZGxlLAorCQkJICAgc3RvcmVfcmVnLCBzaXplb2Yo c3RvcmVfcmVnKSwKKwkJCSAgIDIgKiBzaXplb2YodWludDMyX3QpLCAvKiByZWxvYyAqLworCQkJ ICAgb2tfdmFsKTsKKworCWV4ZWNfYmF0Y2goZmQsIEk5MTVfRVhFQ19CTFQsIGhhbmRsZSwKKwkJ ICAgbHJpX2JhZCwgMCwKKwkJICAgMCk7CisKKwlleGVjX2JhdGNoX3BhdGNoZWQoZmQsIEk5MTVf RVhFQ19CTFQsIGhhbmRsZSwKKwkJCSAgIHN0b3JlX3JlZywgc2l6ZW9mKHN0b3JlX3JlZyksCisJ CQkgICAyICogc2l6ZW9mKHVpbnQzMl90KSwgLyogcmVsb2MgKi8KKwkJCSAgIG9rX3ZhbCk7CisK KwlleGVjX2JhdGNoKGZkLCBJOTE1X0VYRUNfQkxULCBoYW5kbGUsCisJCSAgIGxyaV9vaywgNDA5 NiwKKwkJICAgMCk7CisKKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX3dyaXRlKGZkLCBoYW5kbGUsIDAs IG5vb3BzLCA0MDk3KSwgLUVJTlZBTCk7Cit9CisKK3N0cnVjdCByZWcgeworCXVpbnQzMl90IGFk ZHI7CisJdWludDMyX3QgbWFzazsKKwlib29sIG1hc2tlZF93cml0ZTsKKwlib29sIHByaXZpbGVn ZWQ7Cit9OworCisjZGVmaW5lIFJFR19NKEFERFIsIE1BU0ssIFdNLCBQKSB7IChBRERSKSwgKE1B U0spLCAoV00pLCAoUCkgfQorI2RlZmluZSBSRUcoQUREUikgUkVHX00oQUREUiwgMHhmZmZmZmZm ZiwgZmFsc2UsIGZhbHNlKQorI2RlZmluZSBSRUdfUChBRERSKSBSRUdfTShBRERSLCAweGZmZmZm ZmZmLCBmYWxzZSwgdHJ1ZSkKKworc3RhdGljIGNvbnN0IHN0cnVjdCByZWcgcmVnc1tdID0gewor CVJFR19NKEJDU19TV0NUUkwsIDB4MywgdHJ1ZSwgZmFsc2UpLAorCVJFRyhCQ1NfR1BSKDApKSwK KwlSRUcoQkNTX0dQUl9VRFcoMCkpLAorCVJFRyhCQ1NfR1BSKDEpKSwKKwlSRUcoQkNTX0dQUl9V RFcoMSkpLAorCVJFRyhCQ1NfR1BSKDIpKSwKKwlSRUcoQkNTX0dQUl9VRFcoMikpLAorCVJFRyhC Q1NfR1BSKDMpKSwKKwlSRUcoQkNTX0dQUl9VRFcoMykpLAorCVJFRyhCQ1NfR1BSKDQpKSwKKwlS RUcoQkNTX0dQUl9VRFcoNCkpLAorCVJFRyhCQ1NfR1BSKDUpKSwKKwlSRUcoQkNTX0dQUl9VRFco NSkpLAorCVJFRyhCQ1NfR1BSKDYpKSwKKwlSRUcoQkNTX0dQUl9VRFcoNikpLAorCVJFRyhCQ1Nf R1BSKDcpKSwKKwlSRUcoQkNTX0dQUl9VRFcoNykpLAorCVJFRyhCQ1NfR1BSKDgpKSwKKwlSRUco QkNTX0dQUl9VRFcoOCkpLAorCVJFRyhCQ1NfR1BSKDkpKSwKKwlSRUcoQkNTX0dQUl9VRFcoOSkp LAorCVJFRyhCQ1NfR1BSKDEwKSksCisJUkVHKEJDU19HUFJfVURXKDEwKSksCisJUkVHKEJDU19H UFIoMTEpKSwKKwlSRUcoQkNTX0dQUl9VRFcoMTEpKSwKKwlSRUcoQkNTX0dQUigxMikpLAorCVJF RyhCQ1NfR1BSX1VEVygxMikpLAorCVJFRyhCQ1NfR1BSKDEzKSksCisJUkVHKEJDU19HUFJfVURX KDEzKSksCisJUkVHKEJDU19HUFIoMTQpKSwKKwlSRUcoQkNTX0dQUl9VRFcoMTQpKSwKKwlSRUco QkNTX0dQUigxNSkpLAorCVJFRyhCQ1NfR1BSX1VEVygxNSkpLAorCisJUkVHX1AoMCksCisJUkVH X1AoMjAwMDAwKSwKKworCVJFR19QKEJDU19TV0NUUkwgLSAxKSwKKwlSRUdfUChCQ1NfU1dDVFJM IC0gMiksCisJUkVHX1AoQkNTX1NXQ1RSTCAtIDMpLAorCVJFR19QKEJDU19TV0NUUkwgLSA0KSwK KwlSRUdfUChCQ1NfU1dDVFJMICsgNCksCisKKwlSRUdfUChCQ1NfR1BSKDApIC0gMSksCisJUkVH X1AoQkNTX0dQUigwKSAtIDIpLAorCVJFR19QKEJDU19HUFIoMCkgLSAzKSwKKwlSRUdfUChCQ1Nf R1BSKDApIC0gNCksCisJUkVHX1AoQkNTX0dQUl9VRFcoMTUpICsgNCksCit9OworCitzdGF0aWMg dm9pZCB0ZXN0X3JlZ2lzdGVyKGNvbnN0IGludCBmZCwgY29uc3QgdWludDMyX3QgaGFuZGxlLAor CQkJICBjb25zdCBzdHJ1Y3QgcmVnICpyKQoreworCWNvbnN0IHVpbnQzMl90IGxyaV96ZXJvW10g PSB7CisJCU1JX0xPQURfUkVHSVNURVJfSU1NLAorCQlyLT5hZGRyLAorCQlyLT5tYXNrZWRfd3Jp dGUgPyAweGZmZmYwMDAwIDogMCwKKwkJTUlfQkFUQ0hfQlVGRkVSX0VORCwKKwl9OworCisJY29u c3QgdWludDMyX3QgbHJpX21hc2tbXSA9IHsKKwkJTUlfTE9BRF9SRUdJU1RFUl9JTU0sCisJCXIt PmFkZHIsCisJCXItPm1hc2tlZF93cml0ZSA/IChyLT5tYXNrIDw8IDE2KSB8IHItPm1hc2sgOiBy LT5tYXNrLAorCQlNSV9CQVRDSF9CVUZGRVJfRU5ELAorCX07CisKKwljb25zdCB1aW50MzJfdCBz dG9yZV9yZWdbXSA9IHsKKwkJTUlfU1RPUkVfUkVHSVNURVJfTUVNIHwgKDQgLSAyKSwKKwkJci0+ YWRkciwKKwkJMCwgLyogcmVsb2MgKi8KKwkJMCwgLyogcmVsb2MgKi8KKwkJTUlfTk9PUCwKKwkJ TUlfQkFUQ0hfQlVGRkVSX0VORCwKKwl9OworCisJZXhlY19iYXRjaChmZCwgSTkxNV9FWEVDX0JM VCwgaGFuZGxlLAorCQkgICBscmlfbWFzaywgc2l6ZW9mKGxyaV9tYXNrKSwKKwkJICAgci0+cHJp dmlsZWdlZCA/IC1FQUNDRVMgOiAwKTsKKworCWV4ZWNfYmF0Y2hfcGF0Y2hlZChmZCwgSTkxNV9F WEVDX0JMVCwgaGFuZGxlLAorCQkJICAgc3RvcmVfcmVnLCBzaXplb2Yoc3RvcmVfcmVnKSwKKwkJ CSAgIDIgKiBzaXplb2YodWludDMyX3QpLCAvKiByZWxvYyAqLworCQkJICAgci0+cHJpdmlsZWdl ZCA/IC1FQUNDRVMgOiByLT5tYXNrKTsKKworCWV4ZWNfYmF0Y2goZmQsIEk5MTVfRVhFQ19CTFQs IGhhbmRsZSwKKwkJICAgbHJpX3plcm8sIHNpemVvZihscmlfemVybyksCisJCSAgIHItPnByaXZp bGVnZWQgPyAtRUFDQ0VTIDogMCk7CisKKwlleGVjX2JhdGNoX3BhdGNoZWQoZmQsIEk5MTVfRVhF Q19CTFQsIGhhbmRsZSwKKwkJCSAgIHN0b3JlX3JlZywgc2l6ZW9mKHN0b3JlX3JlZyksCisJCQkg ICAyICogc2l6ZW9mKHVpbnQzMl90KSwgLyogcmVsb2MgKi8KKwkJCSAgIHItPnByaXZpbGVnZWQg PyAtRUFDQ0VTIDogMCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfdmFsaWRfcmVnaXN0ZXJzKGNv bnN0IGludCBmZCwgY29uc3QgdWludDMyX3QgaGFuZGxlKQoreworCWludCBpOworCisJZm9yIChp ID0gMDsgaSA8IEFSUkFZX1NJWkUocmVncyk7IGkrKykKKwkJdGVzdF9yZWdpc3RlcihmZCwgaGFu ZGxlLCAmcmVnc1tpXSk7Cit9CisKK3N0YXRpYyBsb25nIGludCByZWFkX3JlZyhjb25zdCBpbnQg ZmQsIGNvbnN0IHVpbnQzMl90IGhhbmRsZSwKKwkJCSBjb25zdCB1aW50MzJfdCBhZGRyKQorewor CWNvbnN0IHVpbnQzMl90IHN0b3JlX3JlZ1tdID0geworCQlNSV9TVE9SRV9SRUdJU1RFUl9NRU0g fCAoNCAtIDIpLAorCQlhZGRyLAorCQkwLCAvKiByZWxvYyAqLworCQkwLCAvKiByZWxvYyAqLwor CQlNSV9OT09QLAorCQlNSV9CQVRDSF9CVUZGRVJfRU5ELAorCX07CisJdWludDMyX3QgdGFyZ2V0 X2JvOworCXVpbnQzMl90IHZhbHVlOworCWxvbmcgaW50IHJldDsKKworCXRhcmdldF9ibyA9IGdl bV9jcmVhdGUoZmQsIEhBTkRMRV9TSVpFKTsKKworCXJldCA9IF9fZXhlY19iYXRjaF9wYXRjaGVk KGZkLCBJOTE1X0VYRUNfQkxULCBoYW5kbGUsCisJCQkJICAgc3RvcmVfcmVnLCBzaXplb2Yoc3Rv cmVfcmVnKSwKKwkJCQkgICB0YXJnZXRfYm8sIDIgKiBzaXplb2YodWludDMyX3QpLCAwKTsKKwor CWlmIChyZXQpIHsKKwkJaWd0X2Fzc2VydF9sdChyZXQsIDApOworCQlnZW1fY2xvc2UoZmQsIHRh cmdldF9ibyk7CisJCXJldHVybiByZXQ7CisJfQorCisJZ2VtX3JlYWQoZmQsIHRhcmdldF9ibywg MCwgJnZhbHVlLCBzaXplb2YodmFsdWUpKTsKKworCWdlbV9jbG9zZShmZCwgdGFyZ2V0X2JvKTsK KworCXJldHVybiB2YWx1ZTsKK30KKworc3RhdGljIGludCB3cml0ZV9yZWcoY29uc3QgaW50IGZk LCBjb25zdCB1aW50MzJfdCBoYW5kbGUsCisJCSAgICAgY29uc3QgdWludDMyX3QgYWRkciwgY29u c3QgdWludDMyX3QgdmFsKQoreworCWNvbnN0IHVpbnQzMl90IGxyaVtdID0geworCQlNSV9MT0FE X1JFR0lTVEVSX0lNTSwKKwkJYWRkciwKKwkJdmFsLAorCQlNSV9CQVRDSF9CVUZGRVJfRU5ELAor CX07CisKKwlyZXR1cm4gX19leGVjX2JhdGNoKGZkLCBJOTE1X0VYRUNfQkxULCBoYW5kbGUsCisJ CQkgICAgbHJpLCBzaXplb2YobHJpKSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfdW5hbGlnbmVk X2FjY2Vzcyhjb25zdCBpbnQgZmQsIGNvbnN0IHVpbnQzMl90IGhhbmRsZSkKK3sKKwljb25zdCB1 aW50MzJfdCBhZGRyID0gQkNTX0dQUig0KTsKKwljb25zdCB1aW50MzJfdCB2YWwgPSAweGJhYWRm ZWFkOworCWNvbnN0IHVpbnQzMl90IHByZSA9IDB4MTIzNDU2Nzg7CisJY29uc3QgdWludDMyX3Qg cG9zdCA9IDB4ODc2NTQzMjE7CisKKwlpZ3RfYXNzZXJ0X2VxKHdyaXRlX3JlZyhmZCwgaGFuZGxl LCBhZGRyIC0gNCwgcHJlKSwgIDApOworCWlndF9hc3NlcnRfZXEod3JpdGVfcmVnKGZkLCBoYW5k bGUsIGFkZHIsIHZhbCksICAgICAgMCk7CisJaWd0X2Fzc2VydF9lcSh3cml0ZV9yZWcoZmQsIGhh bmRsZSwgYWRkciArIDQsIHBvc3QpLCAwKTsKKworCWlndF9hc3NlcnRfZXEocmVhZF9yZWcoZmQs IGhhbmRsZSwgYWRkciAtIDQpLCBwcmUpOworCWlndF9hc3NlcnRfZXEocmVhZF9yZWcoZmQsIGhh bmRsZSwgYWRkciksICAgICB2YWwpOworCWlndF9hc3NlcnRfZXEocmVhZF9yZWcoZmQsIGhhbmRs ZSwgYWRkciArIDQpLCBwb3N0KTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJ CWlndF9hc3NlcnRfZXEod3JpdGVfcmVnKGZkLCBoYW5kbGUsIGFkZHIgKyBpLCB2YWwpLCAwKTsK KwkJaWd0X2Fzc2VydF9lcShyZWFkX3JlZyhmZCwgaGFuZGxlLCBhZGRyKSwgdmFsKTsKKworCQlp Z3RfYXNzZXJ0X2VxKHJlYWRfcmVnKGZkLCBoYW5kbGUsIGFkZHIgKyAxKSwgdmFsKTsKKwkJaWd0 X2Fzc2VydF9lcShyZWFkX3JlZyhmZCwgaGFuZGxlLCBhZGRyICsgMiksIHZhbCk7CisJCWlndF9h c3NlcnRfZXEocmVhZF9yZWcoZmQsIGhhbmRsZSwgYWRkciArIDMpLCB2YWwpOworCQlpZ3RfYXNz ZXJ0X2VxKHJlYWRfcmVnKGZkLCBoYW5kbGUsIGFkZHIgKyA0KSwgcG9zdCk7CisJCWlndF9hc3Nl cnRfZXEocmVhZF9yZWcoZmQsIGhhbmRsZSwgYWRkciAtIDMpLCBwcmUpOworCQlpZ3RfYXNzZXJ0 X2VxKHJlYWRfcmVnKGZkLCBoYW5kbGUsIGFkZHIgLSAyKSwgcHJlKTsKKwkJaWd0X2Fzc2VydF9l cShyZWFkX3JlZyhmZCwgaGFuZGxlLCBhZGRyIC0gMSksIHByZSk7CisJfQorfQorCitzdGF0aWMg dm9pZCB0ZXN0X3JlamVjdF9vbl9lbmdpbmUoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUsIHVuc2ln bmVkIGludCBlbmdpbmUpCit7CisJY29uc3QgdWludDMyX3QgaW52YWxpZF9jbWRbXSA9IHsKKwkJ SU5TVFJfSU5WQUxJRF9DTElFTlQgPDwgSU5TVFJfQ0xJRU5UX1NISUZULAorCQlNSV9CQVRDSF9C VUZGRVJfRU5ELAorCX07CisJY29uc3QgdWludDMyX3QgaW52YWxpZF9zZXRfY29udGV4dFtdID0g eworCQlNSV9TRVRfQ09OVEVYVCB8IDMyLCAvKiBpbnZhbGlkIGxlbmd0aCAqLworCQlNSV9CQVRD SF9CVUZGRVJfRU5ELAorCX07CisKKwlleGVjX2JhdGNoKGZkLCBlbmdpbmUsIGhhbmRsZSwKKwkJ ICAgaW52YWxpZF9jbWQsIHNpemVvZihpbnZhbGlkX2NtZCksCisJCSAgIC1FSU5WQUwpOworCisJ ZXhlY19iYXRjaChmZCwgZW5naW5lLCBoYW5kbGUsCisJCSAgIGludmFsaWRfc2V0X2NvbnRleHQs IHNpemVvZihpbnZhbGlkX3NldF9jb250ZXh0KSwKKwkJICAgLUVJTlZBTCk7Cit9CisKK3N0YXRp YyB2b2lkIHRlc3RfcmVqZWN0ZWQoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUsIGJvb2wgY3R4X3Bh cmFtKQoreworI2RlZmluZSBlbmdpbmVfY2xhc3MoZSwgbikgKChlKS0+ZW5naW5lc1sobildLmVu Z2luZV9jbGFzcykKKyNkZWZpbmUgZW5naW5lX2luc3RhbmNlKGUsIG4pICgoZSktPmVuZ2luZXNb KG4pXS5lbmdpbmVfaW5zdGFuY2UpCisKKwlpZiAoY3R4X3BhcmFtKSB7CisJCWludCBpOworCisJ CUk5MTVfREVGSU5FX0NPTlRFWFRfUEFSQU1fRU5HSU5FUyhlbmdpbmVzICwgSTkxNV9FWEVDX1JJ TkdfTUFTSyArIDEpOworCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0gcGFyYW0g PSB7CisJCQkuY3R4X2lkID0gMCwKKwkJCS5wYXJhbSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9FTkdJ TkVTLAorCQkJLnZhbHVlID0gdG9fdXNlcl9wb2ludGVyKCZlbmdpbmVzKSwKKwkJCS5zaXplID0g c2l6ZW9mKGVuZ2luZXMpLAorCQl9OworCisJCW1lbXNldCgmZW5naW5lcywgMCwgc2l6ZW9mKGVu Z2luZXMpKTsKKwkJZm9yIChpID0gMDsgaSA8PSBJOTE1X0VYRUNfUklOR19NQVNLOyBpKyspIHsK KwkJCWVuZ2luZV9jbGFzcygmZW5naW5lcywgaSkgPSBJOTE1X0VOR0lORV9DTEFTU19DT1BZOwor CQkJZW5naW5lX2luc3RhbmNlKCZlbmdpbmVzLCBpKSA9IDA7CisJCX0KKwkJZ2VtX2NvbnRleHRf c2V0X3BhcmFtKGZkLCAmcGFyYW0pOworCisJCWZvciAoaSA9IDA7IGkgPD0gSTkxNV9FWEVDX1JJ TkdfTUFTSzsgaSsrKQorCQkJdGVzdF9yZWplY3Rfb25fZW5naW5lKGZkLCBoYW5kbGUsIGkpOwor CisJCXBhcmFtLnNpemUgPSAwOworCQlnZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZwYXJhbSk7 CisJfSBlbHNlIHsKKwkJdGVzdF9yZWplY3Rfb25fZW5naW5lKGZkLCBoYW5kbGUsIEk5MTVfRVhF Q19CTFQpOworCX0KK30KKworaWd0X21haW4KK3sKKwl1aW50MzJfdCBoYW5kbGU7CisJaW50IGZk OworCisJaWd0X2ZpeHR1cmUgeworCQlmZCA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJfSU5URUwp OworCQlpZ3RfcmVxdWlyZV9nZW0oZmQpOworCQlnZW1fcmVxdWlyZV9ibGl0dGVyKGZkKTsKKwor CQlwYXJzZXJfdmVyc2lvbiA9IGNvbW1hbmRfcGFyc2VyX3ZlcnNpb24oZmQpOworCQkvKiBpZ3Rf cmVxdWlyZShwYXJzZXJfdmVyc2lvbiA9PSAxMCk7ICovCisKKwkJaWd0X3JlcXVpcmUoZ2VtX3Vz ZXNfcHBndHQoZmQpKTsKKwkJaWd0X3JlcXVpcmUoZ2VtX2hhc19ibHQoZmQpKTsKKwkJaWd0X3Jl cXVpcmUoaW50ZWxfZ2VuKGludGVsX2dldF9kcm1fZGV2aWQoZmQpKSA9PSA5KTsKKworCQloYW5k bGUgPSBnZW1fY3JlYXRlKGZkLCBIQU5ETEVfU0laRSk7CisKKwkJaWd0X2ZvcmtfaGFuZ19kZXRl Y3RvcihmZCk7CisJfQorCisJaWd0X3N1YnRlc3QoInNlY3VyZS1iYXRjaGVzIikKKwkJdGVzdF9z ZWN1cmVfYmF0Y2hlcyhmZCk7CisKKwlpZ3Rfc3VidGVzdCgiYWxsb3dlZC1hbGwiKQorCQl0ZXN0 X2FsbG93ZWRfYWxsKGZkLCBoYW5kbGUpOworCisJaWd0X3N1YnRlc3QoImFsbG93ZWQtc2luZ2xl IikKKwkJdGVzdF9hbGxvd2VkX3NpbmdsZShmZCwgaGFuZGxlKTsKKworCWlndF9zdWJ0ZXN0KCJi Yi1zdGFydC1wYXJhbSIpCisJCXRlc3RfYmJfc3RhcnQoZmQsIGhhbmRsZSwgQkJfU1RBUlRfUEFS QU0pOworCisJaWd0X3N1YnRlc3QoImJiLXN0YXJ0LW91dCIpCisJCXRlc3RfYmJfc3RhcnQoZmQs IGhhbmRsZSwgQkJfU1RBUlRfT1VUKTsKKworCWlndF9zdWJ0ZXN0KCJiYi1zZWN1cmUiKQorCQl0 ZXN0X2JiX3NlY3VyZShmZCwgaGFuZGxlKTsKKworCWlndF9zdWJ0ZXN0KCJiYi1jaGFpbmVkIikK KwkJdGVzdF9iYl9jaGFpbmVkKGZkLCBoYW5kbGUpOworCisJaWd0X3N1YnRlc3QoImNtZC1jcm9z c2luZy1wYWdlIikKKwkJdGVzdF9jbWRfY3Jvc3NpbmdfcGFnZShmZCwgaGFuZGxlKTsKKworCWln dF9zdWJ0ZXN0KCJiYXRjaC13aXRob3V0LWVuZCIpIHsKKwkJY29uc3QgdWludDMyX3Qgbm9vcFsx MDI0XSA9IHsgMCB9OworCisJCWV4ZWNfYmF0Y2goZmQsIEk5MTVfRVhFQ19CTFQsIGhhbmRsZSwK KwkJCSAgIG5vb3AsIHNpemVvZihub29wKSwKKwkJCSAgIC1FSU5WQUwpOworCX0KKworCWlndF9z dWJ0ZXN0KCJiYXRjaC16ZXJvLWxlbmd0aCIpIHsKKwkJY29uc3QgdWludDMyX3Qgbm9vcFtdID0g eyAwLCBNSV9CQVRDSF9CVUZGRVJfRU5EIH07CisKKwkJZXhlY19iYXRjaChmZCwgSTkxNV9FWEVD X0JMVCwgaGFuZGxlLAorCQkJICAgbm9vcCwgMCwKKwkJCSAgIC1FSU5WQUwpOworCX0KKworCWln dF9zdWJ0ZXN0KCJiYXRjaC1pbnZhbGlkLWxlbmd0aCIpCisJCXRlc3RfaW52YWxpZF9sZW5ndGgo ZmQsIGhhbmRsZSk7CisKKwlpZ3Rfc3VidGVzdCgiYmFzaWMtcmVqZWN0ZWQiKQorCQl0ZXN0X3Jl amVjdGVkKGZkLCBoYW5kbGUsIGZhbHNlKTsKKworCWlndF9zdWJ0ZXN0KCJiYXNpYy1yZWplY3Rl ZC1jdHgtcGFyYW0iKQorCQl0ZXN0X3JlamVjdGVkKGZkLCBoYW5kbGUsIHRydWUpOworCisJaWd0 X3N1YnRlc3QoInZhbGlkLXJlZ2lzdGVycyIpCisJCXRlc3RfdmFsaWRfcmVnaXN0ZXJzKGZkLCBo YW5kbGUpOworCisJaWd0X3N1YnRlc3QoInVuYWxpZ25lZC1hY2Nlc3MiKQorCQl0ZXN0X3VuYWxp Z25lZF9hY2Nlc3MoZmQsIGhhbmRsZSk7CisKKwlpZ3Rfc3VidGVzdF9ncm91cCB7CisJCWlndF9o YW5nX3QgaGFuZzsKKworCQlpZ3RfZml4dHVyZSBpZ3RfYWxsb3dfaGFuZyhmZCwgMCwgMCk7CisK KwkJaWd0X3N1YnRlc3QoImJiLXN0YXJ0LWNtZCIpCisJCQl0ZXN0X2JiX3N0YXJ0KGZkLCBoYW5k bGUsIEJCX1NUQVJUX0NNRCk7CisKKwkJaWd0X3N1YnRlc3QoImJiLXN0YXJ0LWZhciIpCisJCQl0 ZXN0X2JiX3N0YXJ0KGZkLCBoYW5kbGUsIEJCX1NUQVJUX0ZBUik7CisKKwkJaWd0X2ZpeHR1cmUg aWd0X2Rpc2FsbG93X2hhbmcoZmQsIGhhbmcpOworCX0KKworCWlndF9maXh0dXJlIHsKKwkJaWd0 X3N0b3BfaGFuZ19kZXRlY3RvcigpOworCQlnZW1fY2xvc2UoZmQsIGhhbmRsZSk7CisKKwkJY2xv c2UoZmQpOworCX0KK30KZGlmZiAtLWdpdCBhL3Rlc3RzL21lc29uLmJ1aWxkIGIvdGVzdHMvbWVz b24uYnVpbGQKaW5kZXggNDRiZGRkMDIuLjc1NWZjOWU2IDEwMDY0NAotLS0gYS90ZXN0cy9tZXNv bi5idWlsZAorKysgYi90ZXN0cy9tZXNvbi5idWlsZApAQCAtMTQ5LDYgKzE0OSw3IEBAIGk5MTVf cHJvZ3MgPSBbCiAJJ2dlbV9leGVjX3BhcmFsbGVsJywKIAknZ2VtX2V4ZWNfcGFyYW1zJywKIAkn Z2VtX2V4ZWNfcGFyc2UnLAorCSdnZW1fZXhlY19wYXJzZV9ibHQnLAogCSdnZW1fZXhlY19yZWxv YycsCiAJJ2dlbV9leGVjX3JldXNlJywKIAknZ2VtX2V4ZWNfc2NoZWR1bGUnLAotLSAKMi4xNy4x CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2 IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXY=