From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id 688206E270 for ; Thu, 24 Oct 2019 11:05:57 +0000 (UTC) From: Petri Latvala Date: Thu, 24 Oct 2019 14:05:39 +0300 Message-Id: <20191024110546.25569-2-petri.latvala@intel.com> In-Reply-To: <20191024110546.25569-1-petri.latvala@intel.com> References: <20191024110546.25569-1-petri.latvala@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t 1/8] lib: Introduce dynamic subsubtests 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: Petri Latvala List-ID: RHluYW1pYyBzdWJzdWJ0ZXN0cywgb3Igc3VidGVzdHMgb2Ygc3VidGVzdHMsIGFyZSBpbmRpdmlk dWFsIHBpZWNlcyBvZgp0ZXN0cyB0aGF0IGFyZSBub3Qgc3RhdGljYWxseSBhdmFpbGFibGUgYWxs IHRoZSB0aW1lLgoKQSBnb29kIGV4YW1wbGUgb2YgYSBuZWVkIGZvciBhIGR5bmFtaWMgc3Vic3Vi dGVzdCBpcyBpOTE1IGVuZ2luZQpsaXN0aW5nOiBBIG5vcm1hbCBzdWJ0ZXN0IGZvciBlYWNoIGVu Z2luZSBjbGFzcyAoImJzZCIpLCBhbmQgYSBkeW5hbWljCnN1YnN1YnRlc3QgZm9yIGVhY2ggaW5z dGFuY2UgKCJic2QwIiwgImJzZDIiLCBldGMpLiBPciBhIG5vcm1hbApzdWJ0ZXN0IGZvciBhbiBv cGVyYXRpb24gd2l0aCBhIGR5bmFtaWMgc3Vic3VidGVzdCBmb3IgZXZlcnkgZW5naW5lCnRoZXJl IGlzLgoKQW5vdGhlciBleGFtcGxlIGlzIGR5bmFtaWMgc3Vic3VidGVzdHMgZm9yIHBpcGVzOiBJ bnN0ZWFkIG9mIHVzaW5nCmZvcmVhY2hfcGlwZV9zdGF0aWMsIG1ha2Ugb25lIHN1YnRlc3QgYW5k IHVzZSBmb3JlYWNoX3BpcGUgd2l0aApkeW5hbWljIHN1YnN1YnRlc3RzIGZvciBlYWNoIHBpcGUu Cgp2MjogUmViYXNlIGFuZCBhZGFwdCB0byBpZ3RfZGVzY3JpYmUgY2hhbmdlcwoKdjM6IFJlbmFt ZSB0byBpZ3Rfc3VidGVzdF93aXRoX2R5bmFtaWNfc3Vic3VidGVzdHMgJgogICAgaWd0X2R5bmFt aWNfc3Vic3VidGVzdCwgYmV0dGVyIGRvY3MsIG1ha2UgaWd0X2Rlc2NyaWJlIGZhaWwgbG91ZGx5 CiAgICBpZiBpdCdzIHVzZWQgaW4gYW4gaW1wb3NzaWJsZSBjb250ZXh0LgoKU2lnbmVkLW9mZi1i eTogUGV0cmkgTGF0dmFsYSA8cGV0cmkubGF0dmFsYUBpbnRlbC5jb20+Ci0tLQogbGliL2lndF9j b3JlLmMgfCAxNDggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0t LS0tLQogbGliL2lndF9jb3JlLmggfCAxMjMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCAyNTAgaW5zZXJ0aW9ucygrKSwgMjEgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvbGliL2lndF9jb3JlLmMgYi9saWIvaWd0X2NvcmUuYwppbmRl eCA3YmQ1YWZhNS4uOWM1YzY5OGYgMTAwNjQ0Ci0tLSBhL2xpYi9pZ3RfY29yZS5jCisrKyBiL2xp Yi9pZ3RfY29yZS5jCkBAIC0yNjMsOSArMjYzLDEyIEBAIGJvb2wgaWd0X3NraXBfY3JjX2NvbXBh cmU7CiBzdGF0aWMgYm9vbCBsaXN0X3N1YnRlc3RzID0gZmFsc2U7CiBzdGF0aWMgYm9vbCBkZXNj cmliZV9zdWJ0ZXN0cyA9IGZhbHNlOwogc3RhdGljIGNoYXIgKnJ1bl9zaW5nbGVfc3VidGVzdCA9 IE5VTEw7CitzdGF0aWMgY2hhciAqcnVuX3NpbmdsZV9keW5hbWljX3N1YnRlc3QgPSBOVUxMOwog c3RhdGljIGJvb2wgcnVuX3NpbmdsZV9zdWJ0ZXN0X2ZvdW5kID0gZmFsc2U7CiBzdGF0aWMgY29u c3QgY2hhciAqaW5fc3VidGVzdCA9IE5VTEw7CitzdGF0aWMgY29uc3QgY2hhciAqaW5fZHluYW1p Y19zdWJ0ZXN0ID0gTlVMTDsKIHN0YXRpYyBzdHJ1Y3QgdGltZXNwZWMgc3VidGVzdF90aW1lOwor c3RhdGljIHN0cnVjdCB0aW1lc3BlYyBkeW5hbWljX3N1YnRlc3RfdGltZTsKIHN0YXRpYyBjbG9j a2lkX3QgaWd0X2Nsb2NrID0gKGNsb2NraWRfdCktMTsKIHN0YXRpYyBib29sIGluX2ZpeHR1cmUg PSBmYWxzZTsKIHN0YXRpYyBib29sIHRlc3Rfd2l0aF9zdWJ0ZXN0cyA9IGZhbHNlOwpAQCAtMzAw LDYgKzMwMyw3IEBAIGVudW0gewogCU9QVF9MSVNUX1NVQlRFU1RTID0gNTAwLAogCU9QVF9ERVND UklCRV9TVUJURVNUUywKIAlPUFRfUlVOX1NVQlRFU1QsCisJT1BUX1JVTl9EWU5BTUlDX1NVQlRF U1QsCiAJT1BUX0RFU0NSSVBUSU9OLAogCU9QVF9ERUJVRywKIAlPUFRfSU5URVJBQ1RJVkVfREVC VUcsCkBAIC0zMjMsNiArMzI3LDggQEAgY2hhciAqaWd0X2ZyYW1lX2R1bXBfcGF0aDsKIAogc3Rh dGljIGJvb2wgc3RkZXJyX25lZWRzX3NlbnRpbmVsID0gZmFsc2U7CiAKK3N0YXRpYyBpbnQgX2ln dF9keW5hbWljX3Rlc3RzX2V4ZWN1dGVkID0gLTE7CisKIGNvbnN0IGNoYXIgKmlndF90ZXN0X25h bWUodm9pZCkKIHsKIAlyZXR1cm4gY29tbWFuZF9zdHI7CkBAIC0zNTQsNyArMzYwLDkgQEAgc3Rh dGljIHZvaWQgX2lndF9sb2dfYnVmZmVyX2R1bXAodm9pZCkKIHsKIAl1aW50OF90IGk7CiAKLQlp ZiAoaW5fc3VidGVzdCkKKwlpZiAoaW5fZHluYW1pY19zdWJ0ZXN0KQorCQlmcHJpbnRmKHN0ZGVy ciwgIkR5bmFtaWMgc3VidGVzdCAlcyBmYWlsZWQuXG4iLCBpbl9keW5hbWljX3N1YnRlc3QpOwor CWVsc2UgaWYgKGluX3N1YnRlc3QpCiAJCWZwcmludGYoc3RkZXJyLCAiU3VidGVzdCAlcyBmYWls ZWQuXG4iLCBpbl9zdWJ0ZXN0KTsKIAllbHNlCiAJCWZwcmludGYoc3RkZXJyLCAiVGVzdCAlcyBm YWlsZWQuXG4iLCBjb21tYW5kX3N0cik7CkBAIC02MzksNiArNjQ3LDcgQEAgc3RhdGljIHZvaWQg cHJpbnRfdXNhZ2UoY29uc3QgY2hhciAqaGVscF9zdHIsIGJvb2wgb3V0cHV0X29uX3N0ZGVycikK IAlmcHJpbnRmKGYsICJVc2FnZTogJXMgW09QVElPTlNdXG4iLCBjb21tYW5kX3N0cik7CiAJZnBy aW50ZihmLCAiICAtLWxpc3Qtc3VidGVzdHNcbiIKIAkJICAgIiAgLS1ydW4tc3VidGVzdCA8cGF0 dGVybj5cbiIKKwkJICAgIiAgLS1keW5hbWljLXN1YnRlc3QgPHBhdHRlcm4+XG4iCiAJCSAgICIg IC0tZGVidWdbPWxvZy1kb21haW5dXG4iCiAJCSAgICIgIC0taW50ZXJhY3RpdmUtZGVidWdbPWRv bWFpbl1cbiIKIAkJICAgIiAgLS1za2lwLWNyYy1jb21wYXJlXG4iCkBAIC03ODEsNiArNzkwLDcg QEAgc3RhdGljIGludCBjb21tb25faW5pdChpbnQgKmFyZ2MsIGNoYXIgKiphcmd2LAogCQl7Imxp c3Qtc3VidGVzdHMiLCAgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsIE9QVF9MSVNUX1NVQlRF U1RTfSwKIAkJeyJkZXNjcmliZSIsICAgICAgICAgIG9wdGlvbmFsX2FyZ3VtZW50LCBOVUxMLCBP UFRfREVTQ1JJQkVfU1VCVEVTVFN9LAogCQl7InJ1bi1zdWJ0ZXN0IiwgICAgICAgcmVxdWlyZWRf YXJndW1lbnQsIE5VTEwsIE9QVF9SVU5fU1VCVEVTVH0sCisJCXsiZHluYW1pYy1zdWJ0ZXN0Iiwg ICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgT1BUX1JVTl9EWU5BTUlDX1NVQlRFU1R9LAogCQl7 ImhlbHAtZGVzY3JpcHRpb24iLCAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsIE9QVF9ERVNDUklQ VElPTn0sCiAJCXsiZGVidWciLCAgICAgICAgICAgICBvcHRpb25hbF9hcmd1bWVudCwgTlVMTCwg T1BUX0RFQlVHfSwKIAkJeyJpbnRlcmFjdGl2ZS1kZWJ1ZyIsIG9wdGlvbmFsX2FyZ3VtZW50LCBO VUxMLCBPUFRfSU5URVJBQ1RJVkVfREVCVUd9LApAQCAtOTAwLDYgKzkxMCwxMSBAQCBzdGF0aWMg aW50IGNvbW1vbl9pbml0KGludCAqYXJnYywgY2hhciAqKmFyZ3YsCiAJCQlpZiAoIWxpc3Rfc3Vi dGVzdHMpCiAJCQkJcnVuX3NpbmdsZV9zdWJ0ZXN0ID0gc3RyZHVwKG9wdGFyZyk7CiAJCQlicmVh azsKKwkJY2FzZSBPUFRfUlVOX0RZTkFNSUNfU1VCVEVTVDoKKwkJCWFzc2VydChvcHRhcmcpOwor CQkJaWYgKCFsaXN0X3N1YnRlc3RzKQorCQkJCXJ1bl9zaW5nbGVfZHluYW1pY19zdWJ0ZXN0ID0g c3RyZHVwKG9wdGFyZyk7CisJCQlicmVhazsKIAkJY2FzZSBPUFRfREVTQ1JJUFRJT046CiAJCQlw cmludF90ZXN0X2Rlc2NyaXB0aW9uKCk7CiAJCQlyZXQgPSAtMTsKQEAgLTEwODQsNiArMTA5OSwx OSBAQCBzdGF0aWMgdm9pZCBfX2lndF9wcmludF9kZXNjcmlwdGlvbihjb25zdCBjaGFyICpzdWJ0 ZXN0X25hbWUsIGNvbnN0IGNoYXIgKmZpbGUsCiAJCXByaW50ZigiJXNOTyBET0NVTUVOVEFUSU9O IVxuXG4iLCBpbmRlbnQpOwogfQogCitzdGF0aWMgYm9vbCB2YWxpZF9uYW1lX2Zvcl9zdWJ0ZXN0 KGNvbnN0IGNoYXIgKnN1YnRlc3RfbmFtZSkKK3sKKwlpbnQgaTsKKworCS8qIGNoZWNrIHRoZSBz dWJ0ZXN0IG5hbWUgb25seSBjb250YWlucyBhLXosIEEtWiwgMC05LCAnLScgYW5kICdfJyAqLwor CWZvciAoaSA9IDA7IHN1YnRlc3RfbmFtZVtpXSAhPSAnXDAnOyBpKyspCisJCWlmIChzdWJ0ZXN0 X25hbWVbaV0gIT0gJ18nICYmIHN1YnRlc3RfbmFtZVtpXSAhPSAnLScKKwkJICAgICYmICFpc2Fs bnVtKHN1YnRlc3RfbmFtZVtpXSkpCisJCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsK K30KKwogLyoKICAqIE5vdGU6IFRlc3RjYXNlcyB3aGljaCB1c2UgdGhlc2UgaGVscGVycyBNVVNU IE5PVCBvdXRwdXQgYW55dGhpbmcgdG8gc3Rkb3V0CiAgKiBvdXRzaWRlIG9mIHBsYWNlcyBwcm90 ZWN0ZWQgYnkgaWd0X3J1bl9zdWJ0ZXN0IGNoZWNrcyAtIHRoZSBwaWdsaXQKQEAgLTEwOTEsMTgg KzExMTksMTMgQEAgc3RhdGljIHZvaWQgX19pZ3RfcHJpbnRfZGVzY3JpcHRpb24oY29uc3QgY2hh ciAqc3VidGVzdF9uYW1lLCBjb25zdCBjaGFyICpmaWxlLAogICovCiBib29sIF9faWd0X3J1bl9z dWJ0ZXN0KGNvbnN0IGNoYXIgKnN1YnRlc3RfbmFtZSwgY29uc3QgY2hhciAqZmlsZSwgY29uc3Qg aW50IGxpbmUpCiB7Ci0JaW50IGk7Ci0KIAlhc3NlcnQoIWlndF9jYW5fZmFpbCgpKTsKIAotCS8q IGNoZWNrIHRoZSBzdWJ0ZXN0IG5hbWUgb25seSBjb250YWlucyBhLXosIEEtWiwgMC05LCAnLScg YW5kICdfJyAqLwotCWZvciAoaSA9IDA7IHN1YnRlc3RfbmFtZVtpXSAhPSAnXDAnOyBpKyspCi0J CWlmIChzdWJ0ZXN0X25hbWVbaV0gIT0gJ18nICYmIHN1YnRlc3RfbmFtZVtpXSAhPSAnLScKLQkJ ICAgICYmICFpc2FsbnVtKHN1YnRlc3RfbmFtZVtpXSkpIHsKLQkJCWlndF9jcml0aWNhbCgiSW52 YWxpZCBzdWJ0ZXN0IG5hbWUgXCIlc1wiLlxuIiwKLQkJCQkgICAgIHN1YnRlc3RfbmFtZSk7Ci0J CQlpZ3RfZXhpdCgpOwotCQl9CisJaWYgKCF2YWxpZF9uYW1lX2Zvcl9zdWJ0ZXN0KHN1YnRlc3Rf bmFtZSkpIHsKKwkJaWd0X2NyaXRpY2FsKCJJbnZhbGlkIHN1YnRlc3QgbmFtZSBcIiVzXCIuXG4i LAorCQkJICAgICBzdWJ0ZXN0X25hbWUpOworCQlpZ3RfZXhpdCgpOworCX0KIAogCWlmIChydW5f c2luZ2xlX3N1YnRlc3QpIHsKIAkJaWYgKHV3aWxkbWF0KHN1YnRlc3RfbmFtZSwgcnVuX3Npbmds ZV9zdWJ0ZXN0KSA9PSAwKSB7CkBAIC0xMTQ5LDYgKzExNzIsMzYgQEAgYm9vbCBfX2lndF9ydW5f c3VidGVzdChjb25zdCBjaGFyICpzdWJ0ZXN0X25hbWUsIGNvbnN0IGNoYXIgKmZpbGUsIGNvbnN0 IGludCBsaW4KIAlyZXR1cm4gKGluX3N1YnRlc3QgPSBzdWJ0ZXN0X25hbWUpOwogfQogCitib29s IF9faWd0X3J1bl9keW5hbWljX3N1YnRlc3QoY29uc3QgY2hhciAqZHluYW1pY19zdWJ0ZXN0X25h bWUpCit7CisJYXNzZXJ0KGluX3N1YnRlc3QpOworCWFzc2VydChfaWd0X2R5bmFtaWNfdGVzdHNf ZXhlY3V0ZWQgPj0gMCk7CisKKwlpZiAoIXZhbGlkX25hbWVfZm9yX3N1YnRlc3QoZHluYW1pY19z dWJ0ZXN0X25hbWUpKSB7CisJCQlpZ3RfY3JpdGljYWwoIkludmFsaWQgZHluYW1pYyBzdWJ0ZXN0 IG5hbWUgXCIlc1wiLlxuIiwKKwkJCQkgICAgIGR5bmFtaWNfc3VidGVzdF9uYW1lKTsKKwkJCWln dF9leGl0KCk7CisJfQorCisJaWYgKHJ1bl9zaW5nbGVfZHluYW1pY19zdWJ0ZXN0ICYmCisJICAg IHV3aWxkbWF0KGR5bmFtaWNfc3VidGVzdF9uYW1lLCBydW5fc2luZ2xlX2R5bmFtaWNfc3VidGVz dCkgPT0gMCkKKwkJcmV0dXJuIGZhbHNlOworCisJaWd0X2ttc2coS01TR19JTkZPICIlczogc3Rh cnRpbmcgZHluYW1pYyBzdWJ0ZXN0ICVzXG4iLAorCQkgY29tbWFuZF9zdHIsIGR5bmFtaWNfc3Vi dGVzdF9uYW1lKTsKKwlpZ3RfaW5mbygiU3RhcnRpbmcgZHluYW1pYyBzdWJ0ZXN0OiAlc1xuIiwg ZHluYW1pY19zdWJ0ZXN0X25hbWUpOworCWZmbHVzaChzdGRvdXQpOworCWlmIChzdGRlcnJfbmVl ZHNfc2VudGluZWwpCisJCWZwcmludGYoc3RkZXJyLCAiU3RhcnRpbmcgZHluYW1pYyBzdWJ0ZXN0 OiAlc1xuIiwgZHluYW1pY19zdWJ0ZXN0X25hbWUpOworCisJX2lndF9sb2dfYnVmZmVyX3Jlc2V0 KCk7CisKKwlfaWd0X2R5bmFtaWNfdGVzdHNfZXhlY3V0ZWQrKzsKKworCWlndF9nZXR0aW1lKCZk eW5hbWljX3N1YnRlc3RfdGltZSk7CisJcmV0dXJuIChpbl9keW5hbWljX3N1YnRlc3QgPSBkeW5h bWljX3N1YnRlc3RfbmFtZSk7Cit9CisKIC8qKgogICogaWd0X3N1YnRlc3RfbmFtZToKICAqCkBA IC0xMjAzLDI2ICsxMjU2LDUzIEBAIHZvaWQgX19pZ3Rfc3VidGVzdF9ncm91cF9yZXN0b3JlKGlu dCBzYXZlLCBpbnQgZGVzYykKIHN0YXRpYyBib29sIHNraXBwZWRfb25lID0gZmFsc2U7CiBzdGF0 aWMgYm9vbCBzdWNjZWVkZWRfb25lID0gZmFsc2U7CiBzdGF0aWMgYm9vbCBmYWlsZWRfb25lID0g ZmFsc2U7CitzdGF0aWMgYm9vbCBkeW5hbWljX2ZhaWxlZF9vbmUgPSBmYWxzZTsKKworYm9vbCBf X2lndF9lbnRlcl9keW5hbWljX2NvbnRhaW5lcih2b2lkKQoreworCV9pZ3RfZHluYW1pY190ZXN0 c19leGVjdXRlZCA9IDA7CisJZHluYW1pY19mYWlsZWRfb25lID0gZmFsc2U7CisKKwlyZXR1cm4g dHJ1ZTsKK30KIAogc3RhdGljIHZvaWQgZXhpdF9zdWJ0ZXN0KGNvbnN0IGNoYXIgKikgX19hdHRy aWJ1dGVfXygobm9yZXR1cm4pKTsKIHN0YXRpYyB2b2lkIGV4aXRfc3VidGVzdChjb25zdCBjaGFy ICpyZXN1bHQpCiB7CiAJc3RydWN0IHRpbWVzcGVjIG5vdzsKKwljb25zdCBjaGFyICpzdWJ0ZXN0 X3RleHQgPSBpbl9keW5hbWljX3N1YnRlc3QgPyAiRHluYW1pYyBzdWJ0ZXN0IiA6ICJTdWJ0ZXN0 IjsKKwljb25zdCBjaGFyICoqc3VidGVzdF9uYW1lID0gaW5fZHluYW1pY19zdWJ0ZXN0ID8gJmlu X2R5bmFtaWNfc3VidGVzdCA6ICZpbl9zdWJ0ZXN0OworCXN0cnVjdCB0aW1lc3BlYyAqdGhlbnRp bWUgPSBpbl9keW5hbWljX3N1YnRlc3QgPyAmZHluYW1pY19zdWJ0ZXN0X3RpbWUgOiAmc3VidGVz dF90aW1lOworCWptcF9idWYgKmptcHRhcmdldCA9IGluX2R5bmFtaWNfc3VidGVzdCA/ICZpZ3Rf ZHluYW1pY19zdWJzdWJ0ZXN0X2ptcGJ1ZiA6ICZpZ3Rfc3VidGVzdF9qbXBidWY7CiAKIAlpZ3Rf Z2V0dGltZSgmbm93KTsKLQlpZ3RfaW5mbygiJXNTdWJ0ZXN0ICVzOiAlcyAoJS4zZnMpJXNcbiIs CisKKwlpZ3RfaW5mbygiJXMlcyAlczogJXMgKCUuM2ZzKSVzXG4iLAogCQkgKCFfX2lndF9wbGFp bl9vdXRwdXQpID8gIlx4MWJbMW0iIDogIiIsCi0JCSBpbl9zdWJ0ZXN0LCByZXN1bHQsIGlndF90 aW1lX2VsYXBzZWQoJnN1YnRlc3RfdGltZSwgJm5vdyksCisJCSBzdWJ0ZXN0X3RleHQsICpzdWJ0 ZXN0X25hbWUsIHJlc3VsdCwKKwkJIGlndF90aW1lX2VsYXBzZWQodGhlbnRpbWUsICZub3cpLAog CQkgKCFfX2lndF9wbGFpbl9vdXRwdXQpID8gIlx4MWJbMG0iIDogIiIpOwogCWZmbHVzaChzdGRv dXQpOwogCWlmIChzdGRlcnJfbmVlZHNfc2VudGluZWwpCi0JCWZwcmludGYoc3RkZXJyLCAiU3Vi dGVzdCAlczogJXMgKCUuM2ZzKVxuIiwKLQkJCWluX3N1YnRlc3QsIHJlc3VsdCwgaWd0X3RpbWVf ZWxhcHNlZCgmc3VidGVzdF90aW1lLCAmbm93KSk7CisJCWZwcmludGYoc3RkZXJyLCAiJXMgJXM6 ICVzICglLjNmcylcbiIsCisJCQlzdWJ0ZXN0X3RleHQsICpzdWJ0ZXN0X25hbWUsCisJCQlyZXN1 bHQsIGlndF90aW1lX2VsYXBzZWQodGhlbnRpbWUsICZub3cpKTsKIAogCWlndF90ZXJtaW5hdGVf c3BpbnMoKTsKIAotCWluX3N1YnRlc3QgPSBOVUxMOwotCXNpZ2xvbmdqbXAoaWd0X3N1YnRlc3Rf am1wYnVmLCAxKTsKKwlpZiAoIWluX2R5bmFtaWNfc3VidGVzdCkKKwkJX2lndF9keW5hbWljX3Rl c3RzX2V4ZWN1dGVkID0gLTE7CisKKwkvKgorCSAqIERvbid0IGtlZXAgdGhlIGFib3ZlIHRleHQg aW4gdGhlIGxvZyBpZiBleGl0aW5nIGEgZHluYW1pYworCSAqIHN1YnN1YnRlc3QsIHRoZSBzdWJ0 ZXN0IHdvdWxkIHByaW50IGl0IGFnYWluIG90aGVyd2lzZQorCSAqLworCWlmIChpbl9keW5hbWlj X3N1YnRlc3QpCisJCV9pZ3RfbG9nX2J1ZmZlcl9yZXNldCgpOworCisJKnN1YnRlc3RfbmFtZSA9 IE5VTEw7CisKKwlzaWdsb25nam1wKCpqbXB0YXJnZXQsIDEpOwogfQogCiAvKioKQEAgLTEyNTMs NiArMTMzMyw3IEBAIHZvaWQgaWd0X3NraXAoY29uc3QgY2hhciAqZiwgLi4uKQogCX0KIAogCWlm IChpbl9zdWJ0ZXN0KSB7CisJCS8qIERvaW5nIHRoZSBzYW1lIGV2ZW4gaWYgaW5zaWRlIGEgZHlu YW1pYyBzdWJ0ZXN0ICovCiAJCWV4aXRfc3VidGVzdCgiU0tJUCIpOwogCX0gZWxzZSBpZiAodGVz dF93aXRoX3N1YnRlc3RzKSB7CiAJCXNraXBfc3VidGVzdHNfaGVuY2Vmb3J0aCA9IFNLSVA7CkBA IC0xMzA5LDcgKzEzOTAsMjIgQEAgdm9pZCBfX2lndF9za2lwX2NoZWNrKGNvbnN0IGNoYXIgKmZp bGUsIGNvbnN0IGludCBsaW5lLAogICovCiB2b2lkIGlndF9zdWNjZXNzKHZvaWQpCiB7Ci0Jc3Vj Y2VlZGVkX29uZSA9IHRydWU7CisJaWYgKGluX3N1YnRlc3QgJiYgIWluX2R5bmFtaWNfc3VidGVz dCAmJiBfaWd0X2R5bmFtaWNfdGVzdHNfZXhlY3V0ZWQgPj0gMCkgeworCQkvKgorCQkgKiBXZSdy ZSBleGl0aW5nIGEgZHluYW1pYyBjb250YWluZXIsIHlpZWxkIGEgcmVzdWx0CisJCSAqIGFjY29y ZGluZyB0byB0aGUgZHluYW1pYyB0ZXN0cyB0aGF0IGdvdAorCQkgKiBleGVjdXRlZC4KKwkJICov CisJCWlmIChkeW5hbWljX2ZhaWxlZF9vbmUpCisJCQlpZ3RfZmFpbChJR1RfRVhJVF9GQUlMVVJF KTsKKworCQlpZiAoX2lndF9keW5hbWljX3Rlc3RzX2V4ZWN1dGVkID09IDApCisJCQlpZ3Rfc2tp cCgiTm8gZHluYW1pYyB0ZXN0cyBleGVjdXRlZC5cbiIpOworCX0KKworCWlmICghaW5fZHluYW1p Y19zdWJ0ZXN0KQorCQlzdWNjZWVkZWRfb25lID0gdHJ1ZTsKKwogCWlmIChpbl9zdWJ0ZXN0KQog CQlleGl0X3N1YnRlc3QoIlNVQ0NFU1MiKTsKIH0KQEAgLTEzNDAsMTAgKzE0MzYsMTcgQEAgdm9p ZCBpZ3RfZmFpbChpbnQgZXhpdGNvZGUpCiAJaWYgKGluX2F0ZXhpdF9oYW5kbGVyKQogCQlfZXhp dChJR1RfRVhJVF9GQUlMVVJFKTsKIAotCWlmICghZmFpbGVkX29uZSkKLQkJaWd0X2V4aXRjb2Rl ID0gZXhpdGNvZGU7CisJaWYgKGluX2R5bmFtaWNfc3VidGVzdCkgeworCQlkeW5hbWljX2ZhaWxl ZF9vbmUgPSB0cnVlOworCX0gZWxzZSB7CisJCS8qIER5bmFtaWMgc3VidGVzdCBjb250YWluZXJz IG11c3Qgbm90IGZhaWwgZXhwbGljaXRseSAqLworCQlhc3NlcnQoX2lndF9keW5hbWljX3Rlc3Rz X2V4ZWN1dGVkIDwgMCB8fCBkeW5hbWljX2ZhaWxlZF9vbmUpOwogCi0JZmFpbGVkX29uZSA9IHRy dWU7CisJCWlmICghZmFpbGVkX29uZSkKKwkJCWlndF9leGl0Y29kZSA9IGV4aXRjb2RlOworCisJ CWZhaWxlZF9vbmUgPSB0cnVlOworCX0KIAogCS8qIFNpbGVudCBleGl0LCBwYXJlbnQgd2lsbCBk byB0aGUgeWVsbGluZy4gKi8KIAlpZiAodGVzdF9jaGlsZCkKQEAgLTE0MTksNiArMTUyMiw5IEBA IHZvaWQgaWd0X2Rlc2NyaWJlX2YoY29uc3QgY2hhciAqZm10LCAuLi4pCiAJaW50IHJldDsKIAl2 YV9saXN0IGFyZ3M7CiAKKwlpZiAoaW5fc3VidGVzdCAmJiBfaWd0X2R5bmFtaWNfdGVzdHNfZXhl Y3V0ZWQgPj0gMCkKKwkJYXNzZXJ0KCEiRG9jdW1lbnRpbmcgZHluYW1pYyBzdWJzdWJ0ZXN0cyBp cyBpbXBvc3NpYmxlLiBEb2N1bWVudCB0aGUgc3VidGVzdCBpbnN0ZWFkLiIpOworCiAJaWYgKCFk ZXNjcmliZV9zdWJ0ZXN0cykKIAkJcmV0dXJuOwogCmRpZmYgLS1naXQgYS9saWIvaWd0X2NvcmUu aCBiL2xpYi9pZ3RfY29yZS5oCmluZGV4IGU4YjYxMTI4Li44NmJjMWI0MSAxMDA2NDQKLS0tIGEv bGliL2lndF9jb3JlLmgKKysrIGIvbGliL2lndF9jb3JlLmgKQEAgLTE0Niw2ICsxNDYsNyBAQCB2 b2lkIF9faWd0X2ZpeHR1cmVfZW5kKHZvaWQpIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7CiAK IC8qIHN1YnRlc3QgaW5mcmFzdHJ1Y3R1cmUgKi8KIGptcF9idWYgaWd0X3N1YnRlc3Rfam1wYnVm Oworam1wX2J1ZiBpZ3RfZHluYW1pY19zdWJzdWJ0ZXN0X2ptcGJ1ZjsKIHR5cGVkZWYgaW50ICgq aWd0X29wdF9oYW5kbGVyX3QpKGludCBvcHQsIGludCBvcHRfaW5kZXgsIHZvaWQgKmRhdGEpOwog I2RlZmluZSBJR1RfT1BUX0hBTkRMRVJfU1VDQ0VTUyAwCiAjZGVmaW5lIElHVF9PUFRfSEFORExF Ul9FUlJPUiAtMgpAQCAtMTc3LDYgKzE3OCw4IEBAIGludCBpZ3Rfc3VidGVzdF9pbml0X3BhcnNl X29wdHMoaW50ICphcmdjLCBjaGFyICoqYXJndiwKIAlpZ3Rfc3VidGVzdF9pbml0X3BhcnNlX29w dHMoJmFyZ2MsIGFyZ3YsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOwogCiBib29sIF9f aWd0X3J1bl9zdWJ0ZXN0KGNvbnN0IGNoYXIgKnN1YnRlc3RfbmFtZSwgY29uc3QgY2hhciAqZmls ZSwgY29uc3QgaW50IGxpbmUpOworYm9vbCBfX2lndF9lbnRlcl9keW5hbWljX2NvbnRhaW5lcih2 b2lkKTsKK2Jvb2wgX19pZ3RfcnVuX2R5bmFtaWNfc3VidGVzdChjb25zdCBjaGFyICpkeW5hbWlj X3N1YnRlc3RfbmFtZSk7CiAjZGVmaW5lIF9faWd0X3Rva2VuY2F0Mih4LCB5KSB4ICMjIHkKIAog LyoqCkBAIC0yMjYsNiArMjI5LDEyNiBAQCBib29sIF9faWd0X3J1bl9zdWJ0ZXN0KGNvbnN0IGNo YXIgKnN1YnRlc3RfbmFtZSwgY29uc3QgY2hhciAqZmlsZSwgY29uc3QgaW50IGxpbgogI2RlZmlu ZSBpZ3Rfc3VidGVzdF9mKGYuLi4pIFwKIAlfX2lndF9zdWJ0ZXN0X2YoaWd0X3Rva2VuY2F0KF9f dG1wY2hhciwgX19MSU5FX18pLCBmKQogCisvKioKKyAqIGlndF9zdWJ0ZXN0X3dpdGhfZHluYW1p Y19zdWJzdWJ0ZXN0czoKKyAqIEBuYW1lOiBuYW1lIG9mIHRoZSBzdWJ0ZXN0CisgKgorICogVGhp cyBpcyBhIG1hZ2ljIGNvbnRyb2wgZmxvdyBibG9jayB3aGljaCBkZW5vdGVzIGEgc3VidGVzdCBj b2RlCisgKiBibG9jayB0aGF0IGNvbnRhaW5zIGR5bmFtaWMgc3Vic3VidGVzdHMuIFRoZSBfZiB2 YXJpYW50IGFjY2VwdHMgYQorICogcHJpbnRmIGZvcm1hdCBzdHJpbmcsIHdoaWNoIGlzIHVzZWZ1 bCBmb3IgY29uc3RydWN0aW5nCisgKiBjb21iaW5hdG9yaWFsIHRlc3RzLgorICoKKyAqIFNlZSBp Z3Rfc3VidGVzdF93aXRoX2R5bmFtaWNfc3Vic3VidGVzdHNfZigpIGZvciBkb2N1bWVudGF0aW9u LgorICovCisjZGVmaW5lIGlndF9zdWJ0ZXN0X3dpdGhfZHluYW1pY19zdWJzdWJ0ZXN0cyhuYW1l KSBmb3IgKDsgX19pZ3RfcnVuX3N1YnRlc3QoKG5hbWUpLCBfX0ZJTEVfXywgX19MSU5FX18pICYm IFwKKwkJCQkJCQkgX19pZ3RfZW50ZXJfZHluYW1pY19jb250YWluZXIoKSAmJiBcCisJCQkJCQkJ IChzaWdzZXRqbXAoaWd0X3N1YnRlc3Rfam1wYnVmLCAxKSA9PSAwKTsgXAorCQkJCQkJIGlndF9z dWNjZXNzKCkpCisjZGVmaW5lIF9faWd0X3N1YnRlc3Rfd2l0aF9keW5hbWljX3N1YnN1YnRlc3Rz X2YodG1wLCBmb3JtYXQuLi4pIFwKKwlmb3IgKGNoYXIgdG1wIFsyNTZdOyBcCisJICAgICBzbnBy aW50ZiggdG1wICwgc2l6ZW9mKCB0bXAgKSwgXAorCQkgICAgICBmb3JtYXQpLCBcCisJICAgICAg IF9faWd0X3J1bl9zdWJ0ZXN0KHRtcCwgX19GSUxFX18sIF9fTElORV9fICkgJiYgXAorCSAgICAg X19pZ3RfZW50ZXJfZHluYW1pY19jb250YWluZXIoKSAmJiBcCisJICAgICAoc2lnc2V0am1wKGln dF9zdWJ0ZXN0X2ptcGJ1ZiwgMSkgPT0gMCk7IFwKKwkgICAgIGlndF9zdWNjZXNzKCkpCisKKy8q KgorICogaWd0X3N1YnRlc3Rfd2l0aF9keW5hbWljX3N1YnN1YnRlc3RzX2Y6CisgKiBALi4uOiBm b3JtYXQgc3RyaW5nIGFuZCBvcHRpb25hbCBhcmd1bWVudHMKKyAqCisgKiBUaGlzIGlzIGEgbWFn aWMgY29udHJvbCBmbG93IGJsb2NrIHdoaWNoIGRlbm90ZXMgYSBzdWJ0ZXN0IGNvZGUKKyAqIGJs b2NrIHRoYXQgY29udGFpbnMgZHluYW1pYyBzdWJzdWJ0ZXN0cy4gVGhlIF9mIHZhcmlhbnQgYWNj ZXB0cyBhCisgKiBwcmludGYgZm9ybWF0IHN0cmluZywgd2hpY2ggaXMgdXNlZnVsIGZvciBjb25z dHJ1Y3RpbmcKKyAqIGNvbWJpbmF0b3JpYWwgdGVzdHMuCisgKgorICogRHluYW1pYyBzdWJzdWJ0 ZXN0cyBhcmUgdG8gYmUgdXNlZCB3aGVuIHJlcG9ydGluZyBzZXZlcmFsIGFzcGVjdHMKKyAqIG9m IHNvbWV0aGluZyBzZXBhcmF0ZWx5IGlzIGRlc2lyZWQsIGJ1dCBrbm93aW5nIHRoZSBmdWxsIHBv c3NpYmxlCisgKiBzZXQgYmVmb3JlaGFuZCBpcyBlaXRoZXIgdG9vIGJpZyBvZiBhIHNldCBvciBq dXN0IHBsYWluCisgKiBpbXBvc3NpYmxlLiBPdGhlcndpc2UsIHVzZSBub3JtYWwgc3VidGVzdHMu IEFuIGVhc3kgZXhhbXBsZSBpcworICogcGVyZm9ybWluZyBhbiBvcGVyYXRpb24gc2VwYXJhdGVs eSBmb3IgZWFjaCBLTVMgcGlwZTogQSBzdWJ0ZXN0IHBlcgorICogcGlwZSByZXF1aXJlcyBpdGVy YXRpbmcgdGhyb3VnaCBhbGwgcG9zc2libGUgcGlwZSBpZGVudGlmaWVycywKKyAqIGNoZWNraW5n IGlmIHRoZSBwaXBlIGV4aXN0cyBmb3IgdGhlIHRlc3RlZCBkZXZpY2UgYW5kIHNraXBwaW5nIGlm CisgKiBkb2VzIG5vdCwgYW5kIHRoZW4gcGVyZm9ybWluZyB0aGUgb3BlcmF0aW9uLiBXaXRoIGR5 bmFtaWMKKyAqIHN1YnN1YnRlc3RzIGluc3RlYWQsIHRoZXJlIHdvdWxkIGJlIGEgc2luZ2xlIHN1 YnRlc3QgZm9yIHRoZQorICogb3BlcmF0aW9uIHRoYXQgbG9vcHMgb3ZlciB0aGUgcGlwZXMgYXZh aWxhYmxlLCBlbnRlcnMgYSBkeW5hbWljCisgKiBzdWJzdWJ0ZXN0IGZvciBlYWNoIHBpcGUgYW5k IHBlcmZvcm1zIHRoZSBvcGVyYXRpb24gZm9yIHRoYXQgcGlwZQorICogaW4gdGhlcmUuCisgKgor ICogVGhlIHJlc3VsdCBvZiBhIHN1YnRlc3QgaWd0X3N1YnRlc3Rfd2l0aF9keW5hbWljX3N1YnN1 YnRlc3RzIHdpbGwgYmUKKyAqICogU0tJUCwgaWYgbm8gZHluYW1pYyBzdWJzdWJ0ZXN0cyBhcmUg ZW50ZXJlZAorICogKiBQQVNTLCBpZiBfYWxsXyBkeW5hbWljIHN1YnN1YnRlc3RzIFBBU1MKKyAq ICogRkFJTCwgaWYgX2FueV8gZHluYW1pYyBzdWJzdWJ0ZXN0cyBGQUlMCisgKgorICogV2l0aGlu IGEgaWd0X3N1YnRlc3Rfd2l0aF9keW5hbWljX3N1YnN1YnRlc3RzIGJsb2NrLCBleHBsaWNpdAor ICogZmFpbHVyZSAoZS5nLiBpZ3RfYXNzZXJ0KSBpcyBub3QgYWxsb3dlZCwgb25seSBkeW5hbWlj IHN1YnN1YnRlc3RzCisgKiB0aGVtc2VsdmVzIHdpbGwgcHJvZHVjZSB0ZXN0IHJlc3VsdHMuIGln dF9za2lwKCkvaWd0X3JlcXVpcmUoKSBpcworICogYWxsb3dlZC4gRXhhbXBsZToKKyAqCisgKiB8 WzwhLS0gbGFuZ3VhZ2U9IkMiIC0tPgorICogaWd0X21haW4KKyAqIHsKKyAqICAgICBpZ3Rfc3Vi dGVzdF93aXRoX2R5bmFtaWNfc3Vic3VidGVzdHMoImVuZ2luZS10ZXN0cyIpIHsKKyAqICAgICAg ICAgICAgICAgaWd0X3JlcXVpcmUoaXNfYXdlc29tZShmZCkpOyAvLyByZXF1aXJlcyBvayBoZXJl CisgKgorICogICAgICAgICAgICAgICBmb3JfZWFjaF9lbmdpbmUoZmQsIGUpIHsKKyAqICAgICAg ICAgICAgICAgICAgICAgICBpZ3RfZHluYW1pY19zdWJ0ZXN0X2YoIiVzIiwgZS0+bmFtZSkgewor ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWd0X2Fzc2VydCh3b3JrcyhlKSk7IC8v IGFzc2VydHMgb2sgaGVyZQorICogICAgICAgICAgICAgICAgICAgICAgIH0KKyAqICAgICAgICAg ICAgICAgfQorICogICAgICAgfQorICogfQorICogXXwKKyAqCisgKiBMaWtlIGlndF9zdWJ0ZXN0 X3dpdGhfZHluYW1pY19zdWJzdWJ0ZXN0cygpLCBidXQgYWxzbyBhY2NlcHRzIGEgcHJpbnRmCisg KiBmb3JtYXQgc3RyaW5nIGluc3RlYWQgb2YgYSBzdGF0aWMgc3RyaW5nLgorICovCisjZGVmaW5l IGlndF9zdWJ0ZXN0X3dpdGhfZHluYW1pY19zdWJzdWJ0ZXN0c19mKGYuLi4pIFwKKwlfX2lndF9z dWJ0ZXN0X3dpdGhfZHluYW1pY19zdWJzdWJ0ZXN0c19mKGlndF90b2tlbmNhdChfX3RtcGNoYXIs IF9fTElORV9fKSwgZikKKworLyoqCisgKiBpZ3RfZHluYW1pY19zdWJzdWJ0ZXN0OgorICogQG5h bWU6IG5hbWUgb2YgdGhlIGR5bmFtaWMgc3VidGVzdAorICoKKyAqIFRoaXMgaXMgYSBtYWdpYyBj b250cm9sIGZsb3cgYmxvY2sgd2hpY2ggZGVub3RlcyBhIGR5bmFtaWMKKyAqIHN1YnRlc3Qtb2Yt YS1zdWJ0ZXN0IGNvZGUgYmxvY2suIFdpdGhpbiB0aGF0IGNvZGUgYmxvY2sKKyAqIGlndF9za2lw fHN1Y2Nlc3Mgd2lsbCBvbmx5IGJhaWwgb3V0IG9mIHRoZSBkeW5hbWljIHN1YnRlc3QuIFRoZSBf ZgorICogdmFyaWFudCBhY2NlcHRzIGEgcHJpbnRmIGZvcm1hdCBzdHJpbmcsIHdoaWNoIGlzIHVz ZWZ1bCBmb3IKKyAqIGNvbnN0cnVjdGluZyBjb21iaW5hdG9yaWFsIHRlc3RzLgorICoKKyAqIFNl ZSBpZ3Rfc3VidGVzdF93aXRoX2R5bmFtaWNfc3Vic3VidGVzdHNfZigpIGZvciBkb2N1bWVudGF0 aW9uIG9uCisgKiBkeW5hbWljIHN1YnN1YnRlc3RzLgorICovCisjZGVmaW5lIGlndF9keW5hbWlj X3N1YnN1YnRlc3QobmFtZSkgZm9yICg7IF9faWd0X3J1bl9keW5hbWljX3N1YnRlc3QoKG5hbWUp KSAmJiBcCisJCQkJCSAgKHNpZ3NldGptcChpZ3RfZHluYW1pY19zdWJzdWJ0ZXN0X2ptcGJ1Ziwg MSkgPT0gMCk7IFwKKwkJCQkgIGlndF9zdWNjZXNzKCkpCisjZGVmaW5lIF9faWd0X2R5bmFtaWNf c3Vic3VidGVzdF9mKHRtcCwgZm9ybWF0Li4uKSBcCisJZm9yIChjaGFyIHRtcCBbMjU2XTsgXAor CSAgICAgc25wcmludGYoIHRtcCAsIHNpemVvZiggdG1wICksIFwKKwkJICAgICAgZm9ybWF0KSwg XAorCSAgICAgX19pZ3RfcnVuX2R5bmFtaWNfc3VidGVzdCggdG1wICkgJiYgXAorCSAgICAgKHNp Z3NldGptcChpZ3RfZHluYW1pY19zdWJzdWJ0ZXN0X2ptcGJ1ZiwgMSkgPT0gMCk7IFwKKwkgICAg IGlndF9zdWNjZXNzKCkpCisKKy8qKgorICogaWd0X2R5bmFtaWNfc3Vic3VidGVzdF9mOgorICog QC4uLjogZm9ybWF0IHN0cmluZyBhbmQgb3B0aW9uYWwgYXJndW1lbnRzCisgKgorICogVGhpcyBp cyBhIG1hZ2ljIGNvbnRyb2wgZmxvdyBibG9jayB3aGljaCBkZW5vdGVzIGEgZHluYW1pYworICog c3VidGVzdC1vZi1hLXN1YnRlc3QgY29kZSBibG9jay4gV2l0aGluIHRoYXQgY29kZSBibG9jawor ICogaWd0X3NraXB8c3VjY2VzcyB3aWxsIG9ubHkgYmFpbCBvdXQgb2YgdGhlIGR5bmFtaWMgc3Vi dGVzdC4gVGhlIF9mCisgKiB2YXJpYW50IGFjY2VwdHMgYSBwcmludGYgZm9ybWF0IHN0cmluZywg d2hpY2ggaXMgdXNlZnVsIGZvcgorICogY29uc3RydWN0aW5nIGNvbWJpbmF0b3JpYWwgdGVzdHMu CisgKgorICogU2VlIGlndF9zdWJ0ZXN0X3dpdGhfZHluYW1pY19zdWJzdWJ0ZXN0c19mKCkgZm9y IGRvY3VtZW50YXRpb24gb24KKyAqIGR5bmFtaWMgc3Vic3VidGVzdHMuCisgKgorICogTGlrZSBp Z3RfZHluYW1pY19zdWJzdWJ0ZXN0KCksIGJ1dCBhbHNvIGFjY2VwdHMgYSBwcmludGYgZm9ybWF0 IHN0cmluZworICogaW5zdGVhZCBvZiBhIHN0YXRpYyBzdHJpbmcuCisgKi8KKyNkZWZpbmUgaWd0 X2R5bmFtaWNfc3Vic3VidGVzdF9mKGYuLi4pIFwKKwlfX2lndF9keW5hbWljX3N1YnN1YnRlc3Rf ZihpZ3RfdG9rZW5jYXQoX190bXBjaGFyLCBfX0xJTkVfXyksIGYpCisKIGNvbnN0IGNoYXIgKmln dF9zdWJ0ZXN0X25hbWUodm9pZCk7CiBib29sIGlndF9vbmx5X2xpc3Rfc3VidGVzdHModm9pZCk7 CiAKLS0gCjIuMTkuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2