From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rodrigo Vivi Subject: [PATCH] tests/kms_psr_sink_crc: Create test to test PSR by checking panel CRC. Date: Wed, 15 Jan 2014 16:52:21 -0200 Message-ID: <1389811941-4191-1-git-send-email-rodrigo.vivi@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-qe0-f46.google.com (mail-qe0-f46.google.com [209.85.128.46]) by gabe.freedesktop.org (Postfix) with ESMTP id 38220108528 for ; Wed, 15 Jan 2014 10:52:30 -0800 (PST) Received: by mail-qe0-f46.google.com with SMTP id 8so1472349qea.19 for ; Wed, 15 Jan 2014 10:52:29 -0800 (PST) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org Errors-To: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org U2lnbmVkLW9mZi1ieTogUm9kcmlnbyBWaXZpIDxyb2RyaWdvLnZpdmlAZ21haWwuY29tPgotLS0K IHRlc3RzL0FuZHJvaWQubWsgICAgICAgICB8ICAgMSArCiB0ZXN0cy9NYWtlZmlsZS5zb3VyY2Vz ICAgfCAgIDEgKwogdGVzdHMva21zX3Bzcl9zaW5rX2NyYy5jIHwgNDc1ICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDQ3NyBp bnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMva21zX3Bzcl9zaW5rX2NyYy5j CgpkaWZmIC0tZ2l0IGEvdGVzdHMvQW5kcm9pZC5tayBiL3Rlc3RzL0FuZHJvaWQubWsKaW5kZXgg MWJkM2QyMS4uYmE4MDIxYiAxMDA2NDQKLS0tIGEvdGVzdHMvQW5kcm9pZC5taworKysgYi90ZXN0 cy9BbmRyb2lkLm1rCkBAIC02NSw2ICs2NSw3IEBAIHNraXBfdGVzdHNfbGlzdCA6PSBcCiAgICAg a21zX2N1cnNvcl9jcmMgXAogICAgIGttc19mbGlwIFwKICAgICBrbXNfcGlwZV9jcmNfYmFzaWMg XAorICAgIGttc19wc3Jfc2lua19jcmMgXAogICAgIGttc19yZW5kZXIgXAogICAgIGttc19zZXRt b2RlIFwKICAgICBwbV9wYzggXApkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcyBi L3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKaW5kZXggZDIwMTgwOS4uNjIzNTFmZiAxMDA2NDQKLS0t IGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcworKysgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCkBA IC01Miw2ICs1Miw3IEBAIFRFU1RTX3Byb2dzX00gPSBcCiAJa21zX2ZiY19jcmMgXAogCWttc19m bGlwIFwKIAlrbXNfcGlwZV9jcmNfYmFzaWMgXAorCWttc19wc3Jfc2lua19jcmMgXAogCWttc19y ZW5kZXIgXAogCWttc19zZXRtb2RlIFwKIAlwbV9wYzggXApkaWZmIC0tZ2l0IGEvdGVzdHMva21z X3Bzcl9zaW5rX2NyYy5jIGIvdGVzdHMva21zX3Bzcl9zaW5rX2NyYy5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3OWQyOTgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9r bXNfcHNyX3NpbmtfY3JjLmMKQEAgLTAsMCArMSw0NzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkg MjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50 ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9m IHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJT b2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlv biwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNv cHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBh bmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMg dG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0 byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBu b3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICog cGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFs IHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBS T1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IK KyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug QU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBP UiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBP VEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9S VCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9O IFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRI RSBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3Rk Ym9vbC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNs dWRlICJkcm1fZm91cmNjLmgiCisKKyNpbmNsdWRlICJkcm10ZXN0LmgiCisjaW5jbHVkZSAiaWd0 X2RlYnVnZnMuaCIKKyNpbmNsdWRlICJpZ3Rfa21zLmgiCisjaW5jbHVkZSAicmVuZGVyY29weS5o IgorCitlbnVtIHRlc3RfbW9kZSB7CisJVEVTVF9QQUdFX0ZMSVAsCisJVEVTVF9NTUFQX0NQVSwK KwlURVNUX01NQVBfR1RULAorCVRFU1RfQkxULAorCVRFU1RfUkVOREVSLAorCVRFU1RfQ09OVEVY VCwKKwlURVNUX1BBR0VfRkxJUF9BTkRfTU1BUF9DUFUsCisJVEVTVF9QQUdFX0ZMSVBfQU5EX01N QVBfR1RULAorCVRFU1RfUEFHRV9GTElQX0FORF9CTFQsCisJVEVTVF9QQUdFX0ZMSVBfQU5EX1JF TkRFUiwKKwlURVNUX1BBR0VfRkxJUF9BTkRfQ09OVEVYVCwKK307CisKK3R5cGVkZWYgc3RydWN0 IHsKKwlzdHJ1Y3Qga21zdGVzdF9jb25uZWN0b3JfY29uZmlnIGNvbmZpZzsKKwlkcm1Nb2RlTW9k ZUluZm8gbW9kZTsKKwlzdHJ1Y3Qga21zdGVzdF9mYiBmYlsyXTsKK30gY29ubmVjdG9yX3Q7CisK K3R5cGVkZWYgc3RydWN0IHsKKwlpbnQgZHJtX2ZkOworCWlndF9kZWJ1Z2ZzX3QgZGVidWdmczsK Kwlkcm1Nb2RlUmVzICpyZXNvdXJjZXM7CisJZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyOworCWRy bV9pbnRlbF9jb250ZXh0ICpjdHhbMl07CisJdWludDMyX3QgZGV2aWQ7CisJdWludDMyX3QgaGFu ZGxlWzJdOworCXVpbnQzMl90IGNydGNfaWQ7CisJdWludDMyX3QgY3J0Y19pZHg7CisJdWludDMy X3QgZmJfaWRbMl07Cit9IGRhdGFfdDsKKworc3RhdGljIGNvbnN0IGNoYXIgKnRlc3RfbW9kZV9z dHIoZW51bSB0ZXN0X21vZGUgbW9kZSkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHRl c3RfbW9kZXNbXSA9IHsKKwkJW1RFU1RfUEFHRV9GTElQXSA9ICJwYWdlX2ZsaXAiLAorCQlbVEVT VF9NTUFQX0NQVV0gPSAibW1hcF9jcHUiLAorCQlbVEVTVF9NTUFQX0dUVF0gPSAibW1hcF9ndHQi LAorCQlbVEVTVF9CTFRdID0gImJsdCIsCisJCVtURVNUX1JFTkRFUl0gPSAicmVuZGVyIiwKKwkJ W1RFU1RfQ09OVEVYVF0gPSAiY29udGV4dCIsCisJCVtURVNUX1BBR0VfRkxJUF9BTkRfTU1BUF9D UFVdID0gInBhZ2VfZmxpcF9hbmRfbW1hcF9jcHUiLAorCQlbVEVTVF9QQUdFX0ZMSVBfQU5EX01N QVBfR1RUXSA9ICJwYWdlX2ZsaXBfYW5kX21tYXBfZ3R0IiwKKwkJW1RFU1RfUEFHRV9GTElQX0FO RF9CTFRdID0gInBhZ2VfZmxpcF9hbmRfYmx0IiwKKwkJW1RFU1RfUEFHRV9GTElQX0FORF9SRU5E RVJdID0gInBhZ2VfZmxpcF9hbmRfcmVuZGVyIiwKKwkJW1RFU1RfUEFHRV9GTElQX0FORF9DT05U RVhUXSA9ICJwYWdlX2ZsaXBfYW5kX2NvbnRleHQiLAorCX07CisKKwlyZXR1cm4gdGVzdF9tb2Rl c1ttb2RlXTsKK30KKworc3RhdGljIHVpbnQzMl90IGNyZWF0ZV9mYihkYXRhX3QgKmRhdGEsCisJ CQkgIGludCB3LCBpbnQgaCwKKwkJCSAgZG91YmxlIHIsIGRvdWJsZSBnLCBkb3VibGUgYiwKKwkJ CSAgc3RydWN0IGttc3Rlc3RfZmIgKmZiKQoreworCXVpbnQzMl90IGZiX2lkOworCWNhaXJvX3Qg KmNyOworCisJZmJfaWQgPSBrbXN0ZXN0X2NyZWF0ZV9mYjIoZGF0YS0+ZHJtX2ZkLCB3LCBoLAor CQkJCSAgIERSTV9GT1JNQVRfWFJHQjg4ODgsIHRydWUsIGZiKTsKKwlpZ3RfYXNzZXJ0KGZiX2lk KTsKKworCWNyID0ga21zdGVzdF9nZXRfY2Fpcm9fY3R4KGRhdGEtPmRybV9mZCwgZmIpOworCWtt c3Rlc3RfcGFpbnRfY29sb3IoY3IsIDAsIDAsIHcsIGgsIHIsIGcsIGIpOworCWlndF9hc3NlcnQo Y2Fpcm9fc3RhdHVzKGNyKSA9PSAwKTsKKwljYWlyb19kZXN0cm95KGNyKTsKKworCXJldHVybiBm Yl9pZDsKK30KKworc3RhdGljIGJvb2wKK2Nvbm5lY3Rvcl9zZXRfbW9kZShkYXRhX3QgKmRhdGEs IGNvbm5lY3Rvcl90ICpjb25uZWN0b3IsCisJCSAgIGRybU1vZGVNb2RlSW5mbyAqbW9kZSwgdWlu dDMyX3QgZmJfaWQpCit7CisJc3RydWN0IGttc3Rlc3RfY29ubmVjdG9yX2NvbmZpZyAqY29uZmln ID0gJmNvbm5lY3Rvci0+Y29uZmlnOworCWludCByZXQ7CisKKyNpZiAwCisJZnByaW50ZihzdGRv dXQsICJVc2luZyBwaXBlICVjLCAlZHglZFxuIiwgcGlwZV9uYW1lKGNvbmZpZy0+cGlwZSksCisJ CW1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSk7CisjZW5kaWYKKworCXJldCA9IGRybU1v ZGVTZXRDcnRjKGRhdGEtPmRybV9mZCwKKwkJCSAgICAgY29uZmlnLT5jcnRjLT5jcnRjX2lkLAor CQkJICAgICBmYl9pZCwKKwkJCSAgICAgMCwgMCwgLyogeCwgeSAqLworCQkJICAgICAmY29uZmln LT5jb25uZWN0b3ItPmNvbm5lY3Rvcl9pZCwKKwkJCSAgICAgMSwKKwkJCSAgICAgbW9kZSk7CisJ aWd0X2Fzc2VydChyZXQgPT0gMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGlz cGxheV9pbml0KGRhdGFfdCAqZGF0YSkKK3sKKwlkYXRhLT5yZXNvdXJjZXMgPSBkcm1Nb2RlR2V0 UmVzb3VyY2VzKGRhdGEtPmRybV9mZCk7CisJaWd0X2Fzc2VydChkYXRhLT5yZXNvdXJjZXMpOwor fQorCitzdGF0aWMgdm9pZCBkaXNwbGF5X2ZpbmkoZGF0YV90ICpkYXRhKQoreworfQorCitzdGF0 aWMgdm9pZCBmaWxsX2JsdChkYXRhX3QgKmRhdGEsIHVpbnQzMl90IGhhbmRsZSwgdW5zaWduZWQg Y2hhciBjb2xvcikKK3sKKwlkcm1faW50ZWxfYm8gKmRzdCA9IGdlbV9oYW5kbGVfdG9fbGliZHJt X2JvKGRhdGEtPmJ1Zm1nciwKKwkJCQkJCSAgICBkYXRhLT5kcm1fZmQsCisJCQkJCQkgICAgIiIs IGhhbmRsZSk7CisJc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaDsKKworCWJhdGNoID0g aW50ZWxfYmF0Y2hidWZmZXJfYWxsb2MoZGF0YS0+YnVmbWdyLCBkYXRhLT5kZXZpZCk7CisJaWd0 X2Fzc2VydChiYXRjaCk7CisKKwlCRUdJTl9CQVRDSCg1KTsKKwlPVVRfQkFUQ0goQ09MT1JfQkxU X0NNRCk7CisJT1VUX0JBVENIKCgxIDw8IDI0KSB8ICgweGYwIDw8IDE2KSB8IDApOworCU9VVF9C QVRDSCgxIDw8IDE2IHwgNCk7CisJT1VUX1JFTE9DKGRzdCwgSTkxNV9HRU1fRE9NQUlOX1JFTkRF UiwgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUiwgMCk7CisJT1VUX0JBVENIKGNvbG9yKTsKKwlBRFZB TkNFX0JBVENIKCk7CisKKwlpbnRlbF9iYXRjaGJ1ZmZlcl9mbHVzaChiYXRjaCk7CisJaW50ZWxf YmF0Y2hidWZmZXJfZnJlZShiYXRjaCk7CisKKwlnZW1fYm9fYnVzeShkYXRhLT5kcm1fZmQsIGhh bmRsZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNjcmF0Y2hfYnVmX2luaXQoc3RydWN0IHNjcmF0Y2hf YnVmICpidWYsIGRybV9pbnRlbF9ibyAqYm8pCit7CisJYnVmLT5ibyA9IGJvOworCWJ1Zi0+c3Ry aWRlID0gNDA5NjsKKwlidWYtPnRpbGluZyA9IEk5MTVfVElMSU5HX1g7CisJYnVmLT5zaXplID0g NDA5NjsKK30KKworc3RhdGljIHZvaWQgZXhlY19ub3AoZGF0YV90ICpkYXRhLCB1aW50MzJfdCBo YW5kbGUsIGRybV9pbnRlbF9jb250ZXh0ICpjb250ZXh0KQoreworCWRybV9pbnRlbF9ibyAqZHN0 OworCXN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2g7CisKKwlkc3QgPSBnZW1faGFuZGxl X3RvX2xpYmRybV9ibyhkYXRhLT5idWZtZ3IsIGRhdGEtPmRybV9mZCwgIiIsIGhhbmRsZSk7CisJ aWd0X2Fzc2VydChkc3QpOworCisJYmF0Y2ggPSBpbnRlbF9iYXRjaGJ1ZmZlcl9hbGxvYyhkYXRh LT5idWZtZ3IsIGRhdGEtPmRldmlkKTsKKwlpZ3RfYXNzZXJ0KGJhdGNoKTsKKworCS8qIGFkZCB0 aGUgcmVsb2MgdG8gbWFrZSBzdXJlIHRoZSBrZXJuZWwgd2lsbCB0aGluayB3ZSB3cml0ZSB0byBk c3QgKi8KKwlCRUdJTl9CQVRDSCg0KTsKKwlPVVRfQkFUQ0goTUlfQkFUQ0hfQlVGRkVSX0VORCk7 CisJT1VUX0JBVENIKE1JX05PT1ApOworCU9VVF9SRUxPQyhkc3QsIEk5MTVfR0VNX0RPTUFJTl9S RU5ERVIsIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIsIDApOworCU9VVF9CQVRDSChNSV9OT09QKTsK KwlBRFZBTkNFX0JBVENIKCk7CisKKwlpbnRlbF9iYXRjaGJ1ZmZlcl9mbHVzaF93aXRoX2NvbnRl eHQoYmF0Y2gsIGNvbnRleHQpOworCWludGVsX2JhdGNoYnVmZmVyX2ZyZWUoYmF0Y2gpOworfQor CitzdGF0aWMgdm9pZCBmaWxsX3JlbmRlcihkYXRhX3QgKmRhdGEsIHVpbnQzMl90IGhhbmRsZSwK KwkJCWRybV9pbnRlbF9jb250ZXh0ICpjb250ZXh0LCB1bnNpZ25lZCBjaGFyIGNvbG9yKQorewor CWRybV9pbnRlbF9ibyAqc3JjLCAqZHN0OworCXN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0 Y2g7CisJc3RydWN0IHNjcmF0Y2hfYnVmIHNyY19idWYsIGRzdF9idWY7CisJY29uc3QgdWludDhf dCBidWZbNF0gPSB7IGNvbG9yLCBjb2xvciwgY29sb3IsIGNvbG9yIH07CisJcmVuZGVyX2NvcHlm dW5jX3QgcmVuZGVyY29weSA9IGdldF9yZW5kZXJfY29weWZ1bmMoZGF0YS0+ZGV2aWQpOworCisJ aWd0X3NraXBfb24oIXJlbmRlcmNvcHkpOworCisJZHN0ID0gZ2VtX2hhbmRsZV90b19saWJkcm1f Ym8oZGF0YS0+YnVmbWdyLCBkYXRhLT5kcm1fZmQsICIiLCBoYW5kbGUpOworCWlndF9hc3NlcnQo ZHN0KTsKKworCXNyYyA9IGRybV9pbnRlbF9ib19hbGxvYyhkYXRhLT5idWZtZ3IsICIiLCA0MDk2 LCA0MDk2KTsKKwlpZ3RfYXNzZXJ0KHNyYyk7CisKKwlnZW1fd3JpdGUoZGF0YS0+ZHJtX2ZkLCBz cmMtPmhhbmRsZSwgMCwgYnVmLCA0KTsKKworCXNjcmF0Y2hfYnVmX2luaXQoJnNyY19idWYsIHNy Yyk7CisJc2NyYXRjaF9idWZfaW5pdCgmZHN0X2J1ZiwgZHN0KTsKKworCWJhdGNoID0gaW50ZWxf YmF0Y2hidWZmZXJfYWxsb2MoZGF0YS0+YnVmbWdyLCBkYXRhLT5kZXZpZCk7CisJaWd0X2Fzc2Vy dChiYXRjaCk7CisKKwlyZW5kZXJjb3B5KGJhdGNoLCBjb250ZXh0LAorCQkgICAmc3JjX2J1Ziwg MCwgMCwgMSwgMSwKKwkJICAgJmRzdF9idWYsIDAsIDApOworCisJaW50ZWxfYmF0Y2hidWZmZXJf ZnJlZShiYXRjaCk7CisKKwlnZW1fYm9fYnVzeShkYXRhLT5kcm1fZmQsIGhhbmRsZSk7Cit9CisK K3N0YXRpYyBib29sIHBzcl9zaW5rX3N1cHBvcnQoZGF0YV90ICpkYXRhKQoreworCWludCByZXQ7 CisJRklMRSAqZmlsZTsKKwljaGFyIHN0cls0XTsKKworCWZpbGUgPSBpZ3RfZGVidWdmc19mb3Bl bigmZGF0YS0+ZGVidWdmcywgImk5MTVfZWRwX3Bzcl9zdGF0dXMiLCAiciIpOworCWlndF9yZXF1 aXJlKGZpbGUpOworCisJcmV0ID0gZnNjYW5mKGZpbGUsICJTaW5rX1N1cHBvcnQ6ICVzXG4iLCBz dHIpOworCWlmIChyZXQgPT0gMCkKKwkgICAgaWd0X3NraXAoImk5MTVfZWRwX3Bzcl9zdGF0dXMg Zm9ybWF0IG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyB0ZXN0IGNhc2VcbiIpOworCisJZmNsb3NlKGZp bGUpOworCXJldHVybiBzdHJjbXAoc3RyLCAieWVzIikgPT0gMDsKK30KKworc3RhdGljIGJvb2wg cHNyX2VuYWJsZWQoZGF0YV90ICpkYXRhKQoreworCWludCByZXQ7CisJRklMRSAqZmlsZTsKKwlj aGFyIHN0cls0XTsKKworCWZpbGUgPSBpZ3RfZGVidWdmc19mb3BlbigmZGF0YS0+ZGVidWdmcywg Imk5MTVfZWRwX3Bzcl9zdGF0dXMiLCAiciIpOworCWlndF9yZXF1aXJlKGZpbGUpOworCisJcmV0 ID0gZnNjYW5mKGZpbGUsICJTaW5rX1N1cHBvcnQ6ICVzXG4iLCBzdHIpOworCWlndF9hc3NlcnQo cmV0ICE9IDApOworCisJcmV0ID0gZnNjYW5mKGZpbGUsICJTb3VyY2VfT0s6ICVzXG4iLCBzdHIp OworCWlndF9hc3NlcnQocmV0ICE9IDApOworCisJcmV0ID0gZnNjYW5mKGZpbGUsICJFbmFibGVk OiAlc1xuIiwgc3RyKTsKKwlpZ3RfYXNzZXJ0KHJldCAhPSAwKTsKKworCWZjbG9zZShmaWxlKTsK KwlyZXR1cm4gc3RyY21wKHN0ciwgInllcyIpID09IDA7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9z aW5rX2NyYyhkYXRhX3QgKmRhdGEsIGNoYXIgKmNyYykgeworCWludCByZXQ7CisJRklMRSAqZmls ZTsKKworCWZpbGUgPSBpZ3RfZGVidWdmc19mb3BlbigmZGF0YS0+ZGVidWdmcywgImk5MTVfc2lu a19jcmNfZURQMSIsICJyIik7CisJaWd0X3JlcXVpcmUoZmlsZSk7CisKKwlyZXQgPSBmc2NhbmYo ZmlsZSwgIiVzXG4iLCBjcmMpOworCWlndF9yZXF1aXJlKHJldCA+IDApOworCisJZmNsb3NlKGZp bGUpOworfQorCisKK3N0YXRpYyB2b2lkIHRlc3RfY3JjKGRhdGFfdCAqZGF0YSwgZW51bSB0ZXN0 X21vZGUgbW9kZSkKK3sKKwl1aW50MzJfdCBoYW5kbGUgPSBkYXRhLT5oYW5kbGVbMF07CisJY2hh ciByZWZfY3JjWzEyXTsKKwljaGFyIGNyY1sxMl07CisKKwl1c2xlZXAoMzAwMDAwKTsKKwlpZ3Rf YXNzZXJ0KHBzcl9lbmFibGVkKGRhdGEpKTsKKwlnZXRfc2lua19jcmMoZGF0YSwgcmVmX2NyYyk7 CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwkJdm9pZCAqcHRyOworCWNhc2UgVEVTVF9QQUdFX0ZMSVA6 CisJCWlndF9hc3NlcnQoZHJtTW9kZVBhZ2VGbGlwKGRhdGEtPmRybV9mZCwgZGF0YS0+Y3J0Y19p ZCwKKwkJCQkJICAgZGF0YS0+ZmJfaWRbMV0sIDAsIE5VTEwpID09IDApOworCQlicmVhazsKKwlj YXNlIFRFU1RfTU1BUF9DUFU6CisJY2FzZSBURVNUX1BBR0VfRkxJUF9BTkRfTU1BUF9DUFU6CisJ CXB0ciA9IGdlbV9tbWFwX19jcHUoZGF0YS0+ZHJtX2ZkLCBoYW5kbGUsIDQwOTYsIFBST1RfV1JJ VEUpOworCQlnZW1fc2V0X2RvbWFpbihkYXRhLT5kcm1fZmQsIGhhbmRsZSwgSTkxNV9HRU1fRE9N QUlOX0NQVSwgSTkxNV9HRU1fRE9NQUlOX0NQVSk7CisJCW1lbXNldChwdHIsIDB4ZmYsIDQpOwor CQltdW5tYXAocHRyLCA0MDk2KTsKKwkJZ2VtX3N3X2ZpbmlzaChkYXRhLT5kcm1fZmQsIGhhbmRs ZSk7CisJCWJyZWFrOworCWNhc2UgVEVTVF9QQUdFX0ZMSVBfQU5EX01NQVBfR1RUOgorCQloYW5k bGUgPSBkYXRhLT5oYW5kbGVbMV07CisJCWlndF9hc3NlcnQoZHJtTW9kZVBhZ2VGbGlwKGRhdGEt PmRybV9mZCwgZGF0YS0+Y3J0Y19pZCwKKwkJCQkJICAgZGF0YS0+ZmJfaWRbMV0sIDAsIE5VTEwp ID09IDApOworCWNhc2UgVEVTVF9NTUFQX0dUVDoKKwkJcHRyID0gZ2VtX21tYXBfX2d0dChkYXRh LT5kcm1fZmQsIGhhbmRsZSwgNDA5NiwgUFJPVF9XUklURSk7CisJCWdlbV9zZXRfZG9tYWluKGRh dGEtPmRybV9mZCwgaGFuZGxlLCBJOTE1X0dFTV9ET01BSU5fR1RULCBJOTE1X0dFTV9ET01BSU5f R1RUKTsKKwkJbWVtc2V0KHB0ciwgMHhmZiwgNCk7CisJCW11bm1hcChwdHIsIDQwOTYpOworCQli cmVhazsKKwljYXNlIFRFU1RfQkxUOgorCWNhc2UgVEVTVF9QQUdFX0ZMSVBfQU5EX0JMVDoKKwkJ ZmlsbF9ibHQoZGF0YSwgaGFuZGxlLCAweGZmKTsKKwkJYnJlYWs7CisJY2FzZSBURVNUX1JFTkRF UjoKKwljYXNlIFRFU1RfQ09OVEVYVDoKKwljYXNlIFRFU1RfUEFHRV9GTElQX0FORF9SRU5ERVI6 CisJY2FzZSBURVNUX1BBR0VfRkxJUF9BTkRfQ09OVEVYVDoKKwkJZmlsbF9yZW5kZXIoZGF0YSwg aGFuZGxlLAorCQkJICAgIChtb2RlID09IFRFU1RfQ09OVEVYVCB8fCBtb2RlID09IFRFU1RfUEFH RV9GTElQX0FORF9DT05URVhUKSA/CisJCQkgICAgZGF0YS0+Y3R4WzFdIDogTlVMTCwgMHhmZik7 CisJCWJyZWFrOworCX0KKworCWdldF9zaW5rX2NyYyhkYXRhLCBjcmMpOworCisJaWd0X2Fzc2Vy dChzdHJjbXAocmVmX2NyYywgY3JjKSAhPSAwKTsKK30KKworc3RhdGljIGJvb2wgcHJlcGFyZV9j cnRjKGRhdGFfdCAqZGF0YSwgdWludDMyX3QgY29ubmVjdG9yX2lkLCBlbnVtIHRlc3RfbW9kZSBt b2RlKQoreworCWNvbm5lY3Rvcl90IGNvbm5lY3RvcjsKKwlpbnQgcmV0OworCisJcmV0ID0ga21z dGVzdF9nZXRfY29ubmVjdG9yX2NvbmZpZyhkYXRhLT5kcm1fZmQsCisJCQkJCSAgIGNvbm5lY3Rv cl9pZCwKKwkJCQkJICAgMSA8PCBkYXRhLT5jcnRjX2lkeCwKKwkJCQkJICAgJmNvbm5lY3Rvci5j b25maWcpOworCWlmIChyZXQpCisJCXJldHVybiBmYWxzZTsKKworCWRhdGEtPmZiX2lkWzBdID0g Y3JlYXRlX2ZiKGRhdGEsCisJCQkJICAgY29ubmVjdG9yLmNvbmZpZy5kZWZhdWx0X21vZGUuaGRp c3BsYXksCisJCQkJICAgY29ubmVjdG9yLmNvbmZpZy5kZWZhdWx0X21vZGUudmRpc3BsYXksCisJ CQkJICAgMC4wLCAwLjAsIDAuMCwgJmNvbm5lY3Rvci5mYlswXSk7CisJaWd0X2Fzc2VydChkYXRh LT5mYl9pZFswXSk7CisKKwlkYXRhLT5mYl9pZFsxXSA9IGNyZWF0ZV9mYihkYXRhLAorCQkJCSAg IGNvbm5lY3Rvci5jb25maWcuZGVmYXVsdF9tb2RlLmhkaXNwbGF5LAorCQkJCSAgIGNvbm5lY3Rv ci5jb25maWcuZGVmYXVsdF9tb2RlLnZkaXNwbGF5LAorCQkJCSAgIDAuMSwgMC4xLCAwLjEsICZj b25uZWN0b3IuZmJbMV0pOworCWlndF9hc3NlcnQoZGF0YS0+ZmJfaWRbMV0pOworCisJZGF0YS0+ aGFuZGxlWzBdID0gY29ubmVjdG9yLmZiWzBdLmdlbV9oYW5kbGU7CisJZGF0YS0+aGFuZGxlWzFd ID0gY29ubmVjdG9yLmZiWzFdLmdlbV9oYW5kbGU7CisKKwkvKiBzY2Fub3V0ID0gZmJbMV0gKi8K Kwljb25uZWN0b3Jfc2V0X21vZGUoZGF0YSwgJmNvbm5lY3RvciwgJmNvbm5lY3Rvci5jb25maWcu ZGVmYXVsdF9tb2RlLAorCQkJICAgZGF0YS0+ZmJfaWRbMV0pOworCisJaWYgKG1vZGUgPT0gVEVT VF9DT05URVhUIHx8IG1vZGUgPT0gVEVTVF9QQUdFX0ZMSVBfQU5EX0NPTlRFWFQpIHsKKwkJZGF0 YS0+Y3R4WzBdID0gZHJtX2ludGVsX2dlbV9jb250ZXh0X2NyZWF0ZShkYXRhLT5idWZtZ3IpOwor CQlpZ3RfcmVxdWlyZShkYXRhLT5jdHhbMF0pOworCQlkYXRhLT5jdHhbMV0gPSBkcm1faW50ZWxf Z2VtX2NvbnRleHRfY3JlYXRlKGRhdGEtPmJ1Zm1ncik7CisJCWlndF9yZXF1aXJlKGRhdGEtPmN0 eFsxXSk7CisKKwkJLyoKKwkJICogRGlzYWJsZSBGQkMgUlQgYWRkcmVzcyBmb3IgYm90aCBjb250 ZXh0cworCQkgKiAoYnkgInJlbmRlcmluZyIgdG8gYSBub24tc2Nhbm91dCBidWZmZXIpLgorCQkg Ki8KKwkJZXhlY19ub3AoZGF0YSwgZGF0YS0+aGFuZGxlWzBdLCBkYXRhLT5jdHhbMV0pOworCQll eGVjX25vcChkYXRhLCBkYXRhLT5oYW5kbGVbMF0sIGRhdGEtPmN0eFswXSk7CisJCWV4ZWNfbm9w KGRhdGEsIGRhdGEtPmhhbmRsZVswXSwgZGF0YS0+Y3R4WzFdKTsKKwkJZXhlY19ub3AoZGF0YSwg ZGF0YS0+aGFuZGxlWzBdLCBkYXRhLT5jdHhbMF0pOworCX0KKworCS8qIHNjYW5vdXQgPSBmYlsw XSAqLworCWNvbm5lY3Rvcl9zZXRfbW9kZShkYXRhLCAmY29ubmVjdG9yLCAmY29ubmVjdG9yLmNv bmZpZy5kZWZhdWx0X21vZGUsCisJCQkgICBkYXRhLT5mYl9pZFswXSk7CisKKwlpZiAobW9kZSA9 PSBURVNUX0NPTlRFWFQgfHwgbW9kZSA9PSBURVNUX1BBR0VfRkxJUF9BTkRfQ09OVEVYVCkgewor CQkvKgorCQkgKiBtYWtlIGN0eFswXSBGQkMgUlQgYWRkcmVzcyBwb2ludCB0byBmYlswXSwgY3R4 WzFdCisJCSAqIEZCQyBSVCBhZGRyZXNzIGlzIGxlZnQgYXMgZGlzYWJsZWQuCisJCSAqLworCQll eGVjX25vcChkYXRhLCBjb25uZWN0b3IuZmJbMF0uZ2VtX2hhbmRsZSwgZGF0YS0+Y3R4WzBdKTsK Kwl9CisKKwlrbXN0ZXN0X2ZyZWVfY29ubmVjdG9yX2NvbmZpZygmY29ubmVjdG9yLmNvbmZpZyk7 CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgZmluaXNoX2NydGMoZGF0YV90ICpk YXRhLCBlbnVtIHRlc3RfbW9kZSBtb2RlKQoreworCWlmIChtb2RlID09IFRFU1RfQ09OVEVYVCB8 fCBtb2RlID09IFRFU1RfUEFHRV9GTElQX0FORF9DT05URVhUKSB7CisJCWRybV9pbnRlbF9nZW1f Y29udGV4dF9kZXN0cm95KGRhdGEtPmN0eFswXSk7CisJCWRybV9pbnRlbF9nZW1fY29udGV4dF9k ZXN0cm95KGRhdGEtPmN0eFsxXSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBydW5fdGVzdChkYXRh X3QgKmRhdGEsIGVudW0gdGVzdF9tb2RlIG1vZGUpCit7CisJaW50IGk7CisJZHJtTW9kZUNvbm5l Y3RvclB0ciBjOworCisJZm9yIChpID0gMDsgaSA8IGRhdGEtPnJlc291cmNlcy0+Y291bnRfY29u bmVjdG9yczsgaSsrKSB7CisJCXVpbnQzMl90IGNvbm5lY3Rvcl9pZCA9IGRhdGEtPnJlc291cmNl cy0+Y29ubmVjdG9yc1tpXTsKKwkJYyA9IGRybU1vZGVHZXRDb25uZWN0b3IoZGF0YS0+ZHJtX2Zk LCBjb25uZWN0b3JfaWQpOworCisJCWlmIChjLT5jb25uZWN0b3JfdHlwZSAhPSBEUk1fTU9ERV9D T05ORUNUT1JfZURQIHx8CisJCSAgICBjLT5jb25uZWN0aW9uICE9IERSTV9NT0RFX0NPTk5FQ1RF RCkKKwkJCWNvbnRpbnVlOworCisJCWRhdGEtPmNydGNfaWR4ID0gMDsKKwkJZGF0YS0+Y3J0Y19p ZCA9IGRhdGEtPnJlc291cmNlcy0+Y3J0Y3NbMF07CisKKwkJaWYgKCFwcmVwYXJlX2NydGMoZGF0 YSwgY29ubmVjdG9yX2lkLCBtb2RlKSkKKwkJCWNvbnRpbnVlOworCisJCWZwcmludGYoc3Rkb3V0 LCAiQmVnaW5uaW5nICVzIG9uIGNydGMgJWQsIGNvbm5lY3RvciAlZFxuIiwKKwkJCWlndF9zdWJ0 ZXN0X25hbWUoKSwgZGF0YS0+Y3J0Y19pZCwgY29ubmVjdG9yX2lkKTsKKworCQl0ZXN0X2NyYyhk YXRhLCBtb2RlKTsKKworCQlmcHJpbnRmKHN0ZG91dCwgIlxuJXMgb24gY3J0YyAlZCwgY29ubmVj dG9yICVkOiBQQVNTRURcblxuIiwKKwkJCWlndF9zdWJ0ZXN0X25hbWUoKSwgZGF0YS0+Y3J0Y19p ZCwgY29ubmVjdG9yX2lkKTsKKworCQlmaW5pc2hfY3J0YyhkYXRhLCBtb2RlKTsKKwl9Cit9CisK K2lndF9tYWluCit7CisJZGF0YV90IGRhdGEgPSB7fTsKKwllbnVtIHRlc3RfbW9kZSBtb2RlOwor CisJaWd0X3NraXBfb25fc2ltdWxhdGlvbigpOworCisJaWd0X2ZpeHR1cmUgeworCQlkYXRhLmRy bV9mZCA9IGRybV9vcGVuX2FueSgpOworCQlpZ3Rfc2V0X3Z0X2dyYXBoaWNzX21vZGUoKTsKKwor CQlkYXRhLmRldmlkID0gaW50ZWxfZ2V0X2RybV9kZXZpZChkYXRhLmRybV9mZCk7CisKKwkJaWd0 X2RlYnVnZnNfaW5pdCgmZGF0YS5kZWJ1Z2ZzKTsKKworCQlpZ3RfYXNzZXJ0KHBzcl9zaW5rX3N1 cHBvcnQoJmRhdGEpKTsKKworCQlkYXRhLmJ1Zm1nciA9IGRybV9pbnRlbF9idWZtZ3JfZ2VtX2lu aXQoZGF0YS5kcm1fZmQsIDQwOTYpOworCQlpZ3RfYXNzZXJ0KGRhdGEuYnVmbWdyKTsKKwkJZHJt X2ludGVsX2J1Zm1ncl9nZW1fZW5hYmxlX3JldXNlKGRhdGEuYnVmbWdyKTsKKworCQlkaXNwbGF5 X2luaXQoJmRhdGEpOworCX0KKworCWZvciAobW9kZSA9IFRFU1RfUEFHRV9GTElQOyBtb2RlIDw9 IFRFU1RfUEFHRV9GTElQX0FORF9DT05URVhUOyBtb2RlKyspIHsKKwkJaWd0X3N1YnRlc3RfZigi JXMiLCB0ZXN0X21vZGVfc3RyKG1vZGUpKSB7CisJCQlydW5fdGVzdCgmZGF0YSwgbW9kZSk7CisJ CX0KKwl9CisKKwlpZ3RfZml4dHVyZSB7CisJCWRybV9pbnRlbF9idWZtZ3JfZGVzdHJveShkYXRh LmJ1Zm1ncik7CisJCWRpc3BsYXlfZmluaSgmZGF0YSk7CisJfQorfQotLSAKMS43LjExLjcKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBt YWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==