From mboxrd@z Thu Jan 1 00:00:00 1970 From: Joonas Lahtinen Subject: [PATCH i-g-t v2] lib/igt_core: Add kmsg capture and dumping Date: Thu, 19 Nov 2015 12:35:23 +0200 Message-ID: <1447929323-19370-1-git-send-email-joonas.lahtinen@linux.intel.com> References: <20151118173259.GB1043@nuc-i3427.alporthouse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTP id 90BB07A126 for ; Thu, 19 Nov 2015 02:35:29 -0800 (PST) In-Reply-To: <20151118173259.GB1043@nuc-i3427.alporthouse.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Intel graphics driver community testing & development Cc: Thomas Wood List-Id: intel-gfx@lists.freedesktop.org Q2FwdHVyZSB0aGUgb3V0cHV0IGZyb20gL2Rldi9rbXNnIGR1cmluZyB0ZXN0IGV4ZWN1dGlvbiBp bmRlcGVuZGFudGx5Cm9mIG90aGVyIGNvbmN1cnJlbnQgd2F0Y2hlcnMgbGlrZSBQaWdsaXQgdGVz dCBydW5uZXIuCgpUaGUgY2FwdHVyZWQgb3V0cHV0IGlzIGFuYWx5emVkIGFuZCB0aGUgdGVzdCB3 aWxsIGZhaWwgaWYgbG9nIG1lc3NhZ2VzCndpdGggaGlnaGVyIHByaW9yaXR5IHRoYW4gTE9HX05P VElDRSBhcmUgZW1pdHRlZCBmcm9tIGFueSBkb21haW4uCgpBbHNvIGFkZGluZyBpZ3RfY2FwdHVy ZSB0byBsaWIvdGVzdHMgd2hpY2ggd2lsbCBmYWlsIGFuZCBwcm9kdWNlIGttc2cKb3V0cHV0IHdo aWNoIHNob3VsZCBiZSBjYXB0dXJlZCBieSB0aGUgbmV3IGNvZGUgYW5kIGFsc28gZGVtb25zdHJh dGUKZmFpbGluZyBqdXN0IGR1ZSB0byAvZGV2L2ttc2cuCgp2MjoKLSBSZW9wZW4vY2xvc2UgdGhl IGttc2cgRkQgcGVyIGVhY2ggdGVzdCAoQ2hyaXMpCi0gQmV0dGVyIGNvbW1pdCBtZXNhZ2UgKERh bmllbCkKLSBEaXNwbGF5IGZhaWx1cmUgZHVlIHRvIGttc2cgb25seSBhcyBGQUlMIChLTVNHKQoK Q2M6IFRob21hcyBXb29kIDx0aG9tYXMud29vZEBpbnRlbC5jb20+CkNjOiBDaHJpcyBXaWxzb24g PGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KQ2M6IERhbWllbiBMZXNwaWF1IDxkYW1pZW4ubGVz cGlhdUBpbnRlbC5jb20+CkFja2VkLWJ5OiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGZm d2xsLmNoPgpTaWduZWQtb2ZmLWJ5OiBKb29uYXMgTGFodGluZW4gPGpvb25hcy5sYWh0aW5lbkBs aW51eC5pbnRlbC5jb20+Ci0tLQogbGliL2lndF9jb3JlLmMgICAgICAgICAgICAgfCAxMTMgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tCiBsaWIvaWd0X2NvcmUu aCAgICAgICAgICAgICB8ICAgNyArKysKIGxpYi90ZXN0cy8uZ2l0aWdub3JlICAgICAgIHwgICAx ICsKIGxpYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIHwgICAxICsKIGxpYi90ZXN0cy9pZ3RfY2Fw dHVyZS5jICAgIHwgIDg4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiA1IGZp bGVzIGNoYW5nZWQsIDIwNyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IGxpYi90ZXN0cy9pZ3RfY2FwdHVyZS5jCgpkaWZmIC0tZ2l0IGEvbGliL2lndF9j b3JlLmMgYi9saWIvaWd0X2NvcmUuYwppbmRleCAwNGEwYWIyLi5jYjc4MmRjIDEwMDY0NAotLS0g YS9saWIvaWd0X2NvcmUuYworKysgYi9saWIvaWd0X2NvcmUuYwpAQCAtNDMsNiArNDMsNyBAQAog I2luY2x1ZGUgPGdldG9wdC5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHVuaXN0 ZC5oPgorI2luY2x1ZGUgPHN5c2xvZy5oPgogI2luY2x1ZGUgPHN5cy93YWl0Lmg+CiAjaW5jbHVk ZSA8c3lzL3R5cGVzLmg+CiAjaWZkZWYgX19saW51eF9fCkBAIC0yMTEsNiArMjEyLDggQEAKICAq ICItLWhlbHAiIGNvbW1hbmQgbGluZSBvcHRpb24uCiAgKi8KIAorI2RlZmluZSBJR1RfS01TR19D QVBUVVJFX0RVTVBfQlVGX1NJWkUJCTQwOTYKKwogc3RhdGljIHVuc2lnbmVkIGludCBleGl0X2hh bmRsZXJfY291bnQ7CiBjb25zdCBjaGFyICppZ3RfaW50ZXJhY3RpdmVfZGVidWc7CiAKQEAgLTI0 Nyw2ICsyNTAsOSBAQCBlbnVtIHsKIHN0YXRpYyBpbnQgaWd0X2V4aXRjb2RlID0gSUdUX0VYSVRf U1VDQ0VTUzsKIHN0YXRpYyBjb25zdCBjaGFyICpjb21tYW5kX3N0cjsKIAorc3RhdGljIGludCBp Z3Rfa21zZ19jYXB0dXJlX2ZkID0gLTE7CitzdGF0aWMgY2hhciogaWd0X2ttc2dfY2FwdHVyZV9k dW1wX2J1ZiA9IE5VTEw7CisKIHN0YXRpYyBjaGFyKiBpZ3RfbG9nX2RvbWFpbl9maWx0ZXI7CiBz dGF0aWMgc3RydWN0IHsKIAljaGFyICplbnRyaWVzWzI1Nl07CkBAIC0zMTIsNiArMzE4LDkzIEBA IHN0YXRpYyB2b2lkIF9pZ3RfbG9nX2J1ZmZlcl9kdW1wKHZvaWQpCiAJcHRocmVhZF9tdXRleF91 bmxvY2soJmxvZ19idWZmZXJfbXV0ZXgpOwogfQogCitzdGF0aWMgdm9pZCBfaWd0X2ttc2dfY2Fw dHVyZV9yZXNldCh2b2lkKQoreworCWlmIChpZ3Rfa21zZ19jYXB0dXJlX2ZkICE9IC0xKQorCQlj bG9zZShpZ3Rfa21zZ19jYXB0dXJlX2ZkKTsKKworCWlndF9rbXNnX2NhcHR1cmVfZmQgPSBvcGVu KCIvZGV2L2ttc2ciLAorCQkJCSAgIE9fUkRPTkxZIHwgT19OT05CTE9DSyk7CisKKwlpZiAoaWd0 X2ttc2dfY2FwdHVyZV9mZCA9PSAtMSkKKwkJcmV0dXJuOworCisJbHNlZWsoaWd0X2ttc2dfY2Fw dHVyZV9mZCwgMCwgU0VFS19FTkQpOworCisJaWYgKGlndF9rbXNnX2NhcHR1cmVfZHVtcF9idWYg PT0gTlVMTCkKKwkJaWd0X2ttc2dfY2FwdHVyZV9kdW1wX2J1ZiA9CisJCQltYWxsb2MoSUdUX0tN U0dfQ0FQVFVSRV9EVU1QX0JVRl9TSVpFKTsKKworCWlmIChpZ3Rfa21zZ19jYXB0dXJlX2R1bXBf YnVmID09IE5VTEwpCisJCWlndF93YXJuKCJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5LCAiCisJ CQkgIndpbGwgbm90IGR1bXAga21zZy5cbiIpOworfQorCitzdGF0aWMgaW50IF9pZ3Rfa21zZ19j YXB0dXJlX2R1bXAoYm9vbCBub3RpZnlfZW1wdHksIGludCBzaG93X3ByaW9yaXR5KQoreworCXNp emVfdCBuYnl0ZXM7CisJaW50IG5saW5lczsKKwlpbnQgcHJlZml4OworCWludCBmYWNpbGl0eTsK KwlpbnQgcHJpb3JpdHk7CisJY2hhciAqcDsKKwlpbnQgYzsKKworCWlmIChpZ3Rfa21zZ19jYXB0 dXJlX2ZkID09IC0xIHx8CisJICAgIGlndF9rbXNnX2NhcHR1cmVfZHVtcF9idWYgPT0gTlVMTCkK KwkJcmV0dXJuIDA7CisKKwlubGluZXMgPSAwOworCWRvIHsKKwkJZXJybm8gPSAwOworCQluYnl0 ZXMgPSByZWFkKGlndF9rbXNnX2NhcHR1cmVfZmQsCisJCQkgICAgICBpZ3Rfa21zZ19jYXB0dXJl X2R1bXBfYnVmLAorCQkJICAgICAgSUdUX0tNU0dfQ0FQVFVSRV9EVU1QX0JVRl9TSVpFKTsKKwor CQlpZiAobmJ5dGVzID09IC0xKQorCQkJY29udGludWU7CisKKwkJc3NjYW5mKGlndF9rbXNnX2Nh cHR1cmVfZHVtcF9idWYsICIlZDsiLCAmcHJlZml4KTsKKwkJcHJpb3JpdHkgPSBwcmVmaXggJiAw eDc7CisKKwkJaWYgKHByaW9yaXR5ID4gc2hvd19wcmlvcml0eSkKKwkJCWNvbnRpbnVlOworCisJ CWlmICghbmxpbmVzKQorCQkJZnByaW50ZihzdGRlcnIsICIqKioqIEtNU0cgKioqKlxuIik7CisK KwkJcCA9IHN0cmNocihpZ3Rfa21zZ19jYXB0dXJlX2R1bXBfYnVmLCAnOycpICsgMTsKKwkJd2hp bGUgKHAgLSBpZ3Rfa21zZ19jYXB0dXJlX2R1bXBfYnVmIDwgbmJ5dGVzKSB7CisJCQlpZiAoKnAg IT0gJ1xcJykgeworCQkJCWZwdXRjKCpwKyssIHN0ZGVycik7CisJCQkJY29udGludWU7CisJCQl9 CisJCQlzc2NhbmYocCwgIlxceCV4IiwgJmMpOworCQkJZnB1dGMoYywgc3RkZXJyKTsKKwkJCXAg Kz0gNDsKKwkJfQorCQlubGluZXMrKzsKKwl9IHdoaWxlKGVycm5vID09IDApOworCisJaWYgKG5s aW5lcykgeworCQlmcHJpbnRmKHN0ZGVyciwgIioqKiogIEVORCAgKioqKlxuIik7CisJfSBlbHNl IHsKKwkJaWYgKG5vdGlmeV9lbXB0eSkKKwkJCWZwcmludGYoc3RkZXJyLCAiTm8ga21zZy5cbiIp OworCX0KKworCWlmIChlcnJubyAhPSBFQUdBSU4pCisJCWZwcmludGYoc3RkZXJyLCAiRXJyb3I6 IEluY29tcGxldGUga21zZyFcbiIpOworCisJY2xvc2UoaWd0X2ttc2dfY2FwdHVyZV9mZCk7CisJ aWd0X2ttc2dfY2FwdHVyZV9mZCA9IC0xOworCisJZnJlZShpZ3Rfa21zZ19jYXB0dXJlX2R1bXBf YnVmKTsKKwlpZ3Rfa21zZ19jYXB0dXJlX2R1bXBfYnVmID0gTlVMTDsKKworCXJldHVybiBubGlu ZXM7Cit9CisKIF9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsIDEsIDIpKSkKIHN0YXRpYyB2 b2lkIGttc2coY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiAjZGVmaW5lIEtFUk5fRU1FUgkiPDA+ IgpAQCAtNjc2LDggKzc2OSwxMCBAQCBvdXQ6CiAJLyogaW5zdGFsbCBleGl0IGhhbmRsZXIsIHRv IGVuc3VyZSB3ZSBjbGVhbiB1cCAqLwogCWlndF9pbnN0YWxsX2V4aXRfaGFuZGxlcihjb21tb25f ZXhpdF9oYW5kbGVyKTsKIAotCWlmICghdGVzdF93aXRoX3N1YnRlc3RzKQorCWlmICghdGVzdF93 aXRoX3N1YnRlc3RzKSB7CiAJCWdldHRpbWUoJnN1YnRlc3RfdGltZSk7CisJCV9pZ3Rfa21zZ19j YXB0dXJlX3Jlc2V0KCk7CisJfQogCiAJZm9yIChpID0gMDsgKG9wdGluZCArIGkpIDwgKmFyZ2M7 IGkrKykKIAkJYXJndltpICsgMV0gPSBhcmd2W29wdGluZCArIGldOwpAQCAtNzk2LDggKzg5MSw5 IEBAIGJvb2wgX19pZ3RfcnVuX3N1YnRlc3QoY29uc3QgY2hhciAqc3VidGVzdF9uYW1lKQogCWln dF9kZWJ1ZygiU3RhcnRpbmcgc3VidGVzdDogJXNcbiIsIHN1YnRlc3RfbmFtZSk7CiAKIAlfaWd0 X2xvZ19idWZmZXJfcmVzZXQoKTsKLQorCV9pZ3Rfa21zZ19jYXB0dXJlX3Jlc2V0KCk7CiAJZ2V0 dGltZSgmc3VidGVzdF90aW1lKTsKKwogCXJldHVybiAoaW5fc3VidGVzdCA9IHN1YnRlc3RfbmFt ZSk7CiB9CiAKQEAgLTkzMSw2ICsxMDI3LDkgQEAgdm9pZCBfX2lndF9za2lwX2NoZWNrKGNvbnN0 IGNoYXIgKmZpbGUsIGNvbnN0IGludCBsaW5lLAogICovCiB2b2lkIGlndF9zdWNjZXNzKHZvaWQp CiB7CisJaWYgKF9pZ3Rfa21zZ19jYXB0dXJlX2R1bXAoZmFsc2UsIExPR19OT1RJQ0UpKQorCQly ZXR1cm4gaWd0X2ZhaWwoSUdUX0VYSVRfRkFJTFVSRV9LTVNHKTsKKwogCXN1Y2NlZWRlZF9vbmUg PSB0cnVlOwogCWlmIChpbl9zdWJ0ZXN0KQogCQlleGl0X3N1YnRlc3QoIlNVQ0NFU1MiKTsKQEAg LTk3MSwxMSArMTA3MCwxNyBAQCB2b2lkIGlndF9mYWlsKGludCBleGl0Y29kZSkKIAlpZiAodGVz dF9jaGlsZCkKIAkJZXhpdChleGl0Y29kZSk7CiAKKwkvKiBTaG93IGttc2cgaWYgbm90IGFscmVh ZHkgc2hvd24uICovCisJaWYgKGV4aXRjb2RlICE9IElHVF9FWElUX0ZBSUxVUkVfS01TRykKKwkJ X2lndF9rbXNnX2NhcHR1cmVfZHVtcCh0cnVlLCBMT0dfREVCVUcpOworCiAJX2lndF9sb2dfYnVm ZmVyX2R1bXAoKTsKIAogCWlmIChpbl9zdWJ0ZXN0KSB7CiAJCWlmIChleGl0Y29kZSA9PSBJR1Rf RVhJVF9USU1FT1VUKQogCQkJZXhpdF9zdWJ0ZXN0KCJUSU1FT1VUIik7CisJCWVsc2UgaWYgKGV4 aXRjb2RlID09IElHVF9FWElUX0ZBSUxVUkVfS01TRykKKwkJCWV4aXRfc3VidGVzdCgiRkFJTCAo S01TRykiKTsKIAkJZWxzZQogCQkJZXhpdF9zdWJ0ZXN0KCJGQUlMIik7CiAJfSBlbHNlIHsKQEAg LTEwNzksNyArMTE4NCw2IEBAIHZvaWQgaWd0X2V4aXQodm9pZCkKIAkJZXhpdChJR1RfRVhJVF9J TlZBTElEKTsKIAl9CiAKLQogCWlmIChpZ3Rfb25seV9saXN0X3N1YnRlc3RzKCkpCiAJCWV4aXQo SUdUX0VYSVRfU1VDQ0VTUyk7CiAKQEAgLTExMDUsNiArMTIwOSw5IEBAIHZvaWQgaWd0X2V4aXQo dm9pZCkKIAkJCWNhc2UgSUdUX0VYSVRfU0tJUDoKIAkJCQlyZXN1bHQgPSAiU0tJUCI7CiAJCQkJ YnJlYWs7CisJCQljYXNlIElHVF9FWElUX0ZBSUxVUkVfS01TRzoKKwkJCQlyZXN1bHQgPSAiRkFJ TCAoS01TRykiOworCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCQlyZXN1bHQgPSAiRkFJTCI7 CiAJCX0KZGlmZiAtLWdpdCBhL2xpYi9pZ3RfY29yZS5oIGIvbGliL2lndF9jb3JlLmgKaW5kZXgg YTI0NGZjMy4uM2E5ZjQxYiAxMDA2NDQKLS0tIGEvbGliL2lndF9jb3JlLmgKKysrIGIvbGliL2ln dF9jb3JlLmgKQEAgLTkzLDYgKzkzLDEzIEBAIGV4dGVybiBib29sIF9faWd0X3BsYWluX291dHB1 dDsKICAqLwogI2RlZmluZSBJR1RfRVhJVF9GQUlMVVJFIDk5CiAKKy8qKgorICogSUdUX0VYSVRf RkFJTFVSRV9LTVNHCisgKgorICogRXhpdCBzdGF0dXMgaW5kaWNpbmcgcHJpbnRrIHdhcm5pbmdz L2Vycm9ycyBkdXJpbmcgdGVzdAorICovCisjZGVmaW5lIElHVF9FWElUX0ZBSUxVUkVfS01TRyA5 OAorCiBib29sIF9faWd0X2ZpeHR1cmUodm9pZCk7CiB2b2lkIF9faWd0X2ZpeHR1cmVfY29tcGxl dGUodm9pZCk7CiB2b2lkIF9faWd0X2ZpeHR1cmVfZW5kKHZvaWQpIF9fYXR0cmlidXRlX18oKG5v cmV0dXJuKSk7CmRpZmYgLS1naXQgYS9saWIvdGVzdHMvLmdpdGlnbm9yZSBiL2xpYi90ZXN0cy8u Z2l0aWdub3JlCmluZGV4IGE0ZjEwODAuLmM0OWMxNzggMTAwNjQ0Ci0tLSBhL2xpYi90ZXN0cy8u Z2l0aWdub3JlCisrKyBiL2xpYi90ZXN0cy8uZ2l0aWdub3JlCkBAIC0xLDUgKzEsNiBAQAogIyBQ bGVhc2Uga2VlcCBzb3J0ZWQgYWxwaGFiZXRpY2FsbHkKIGlndF9hc3NlcnQKK2lndF9jYXB0dXJl CiBpZ3RfZm9ya19oZWxwZXIKIGlndF9pbnZhbGlkX3N1YnRlc3RfbmFtZQogaWd0X2xpc3Rfb25s eQpkaWZmIC0tZ2l0IGEvbGliL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMgYi9saWIvdGVzdHMvTWFr ZWZpbGUuc291cmNlcwppbmRleCA3NzdiOWMxLi5kMmI1ZTA4IDEwMDY0NAotLS0gYS9saWIvdGVz dHMvTWFrZWZpbGUuc291cmNlcworKysgYi9saWIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwpAQCAt MSw0ICsxLDUgQEAKIGNoZWNrX1BST0dSQU1TID0gXAorCWlndF9jYXB0dXJlIFwKIAlpZ3Rfbm9f ZXhpdCBcCiAJaWd0X25vX2V4aXRfbGlzdF9vbmx5IFwKIAlpZ3RfZm9ya19oZWxwZXIgXApkaWZm IC0tZ2l0IGEvbGliL3Rlc3RzL2lndF9jYXB0dXJlLmMgYi9saWIvdGVzdHMvaWd0X2NhcHR1cmUu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTljNTI4Ci0tLSAvZGV2L251 bGwKKysrIGIvbGliL3Rlc3RzL2lndF9jYXB0dXJlLmMKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAq IENvcHlyaWdodCDCqSAyMDE1IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBp cyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5n IGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9u IGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRo b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmln aHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3Vi bGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBw ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRv IHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJv dmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5n IHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMg b3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUg U09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO RCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBU SEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAq IFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlN LCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9G IENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9S IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFM SU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBKb29uYXMg TGFodGluZW4gPGpvb25hcy5sYWh0aW5lbkBsaW51eC5pbnRlbC5jb20+CisgKgorICovCisKKyNp bmNsdWRlICJpZ3RfY29yZS5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK3N0YXRpYyBGSUxFKiBr bXNnOworCitzdGF0aWMgdm9pZAordGVzdF9rbXNnKGJvb2wgZmFpbCkKK3sKKwlmcHV0cygiVEVT VCAoS01TRylcbiIsIGttc2cpOworCWZmbHVzaChrbXNnKTsKKwlpZiAoZmFpbCkKKwkJaWd0X2Zh aWwoSUdUX0VYSVRfRkFJTFVSRSk7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3dhcm4odm9pZCkK K3sKKwlpZ3Rfd2FybigiVEVTVCAoV0FSTilcbiIpOworCWlndF9mYWlsKElHVF9FWElUX0ZBSUxV UkUpOworfQorCitzdGF0aWMgdm9pZAordGVzdF9kZWJ1Zyh2b2lkKQoreworCWlndF9kZWJ1Zygi VEVTVCAoREVCVUcpXG4iKTsKKwlpZ3RfZmFpbChJR1RfRVhJVF9GQUlMVVJFKTsKK30KKworc3Rh dGljIHZvaWQKK3Rlc3RfY29tYmluZWQodm9pZCkKK3sKKwlpZ3Rfd2FybigiVEVTVCAjMSAoV0FS TilcbiIpOworCWZwdXRzKCJURVNUICMxXG4iLCBrbXNnKTsKKwlpZ3Rfd2FybigiVEVTVCAjMiAo V0FSTilcbiIpOworCWZwdXRzKCJURVNUICMyXG4iLCBrbXNnKTsKKwlmZmx1c2goa21zZyk7CisJ aWd0X2ZhaWwoSUdUX0VYSVRfRkFJTFVSRSk7Cit9CisKK2lndF9tYWluCit7CisJaWd0X2ZpeHR1 cmUgeworCQlrbXNnID0gZm9wZW4oIi9kZXYva21zZyIsICJ3Iik7CisJCWlndF9yZXF1aXJlKGtt c2cgIT0gTlVMTCk7CisJfQorCisJaWd0X3N1YnRlc3QoImttc2ciKQorCQl0ZXN0X2ttc2codHJ1 ZSk7CisJaWd0X3N1YnRlc3QoImttc2ctc3VjY2VzcyIpCisJCXRlc3Rfa21zZyhmYWxzZSk7CisJ aWd0X3N1YnRlc3QoIndhcm4iKQorCQl0ZXN0X3dhcm4oKTsKKwlpZ3Rfc3VidGVzdCgiZGVidWci KQorCQl0ZXN0X2RlYnVnKCk7CisJaWd0X3N1YnRlc3QoImNvbWJpbmVkIikKKwkJdGVzdF9jb21i aW5lZCgpOworCisJaWd0X2ZpeHR1cmUgeworCQlmY2xvc2Uoa21zZyk7CisJfQorfQotLSAKMi40 LjMKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVs LWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==