From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paulo Zanoni Subject: [PATCH igt] tests: add pc8 Date: Mon, 19 Aug 2013 13:20:02 -0300 Message-ID: <1376929202-4060-1-git-send-email-przanoni@gmail.com> References: <1376929092-3968-1-git-send-email-przanoni@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-yh0-f45.google.com (mail-yh0-f45.google.com [209.85.213.45]) by gabe.freedesktop.org (Postfix) with ESMTP id 9FA25E73C1 for ; Mon, 19 Aug 2013 09:20:19 -0700 (PDT) Received: by mail-yh0-f45.google.com with SMTP id i72so838136yha.32 for ; Mon, 19 Aug 2013 09:20:19 -0700 (PDT) In-Reply-To: <1376929092-3968-1-git-send-email-przanoni@gmail.com> 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 Cc: Paulo Zanoni List-Id: intel-gfx@lists.freedesktop.org RnJvbTogUGF1bG8gWmFub25pIDxwYXVsby5yLnphbm9uaUBpbnRlbC5jb20+CgpUaGlzIHRlc3Qg Y2hla2NzIG91ciBjb2RlIHRoYXQgZW5hYmxlcyBQYWNrYWdlIEM4Ky4gVGhlIGVudmlyb25tZW50 CnJlcXVpcmVtZW50cyBmb3IgdGhpcyB0ZXN0IGFyZSBxdWl0ZSBjb21wbGljYXRlZDoKICAtIFRo ZSBtYWNoaW5lIG5lZWRzIHRvIGJlIHByb3Blcmx5IGNvbmZpZ3VyZWQgdG8gcmVhY2ggUEM4KyB3 aGVuCiAgICBwb3NzaWJsZSwgd2hpY2ggbWVhbnMgYWxsIHRoZSBwb3dlciBtYW5hZ2VtZW50IHBv bGljaWVzIGFuZCBkZXZpY2UKICAgIGRyaXZlcnMgbXVzdCBiZSBwcm9wZXJseSBjb25maWd1cmVk LgogIC0gWW91IG5lZWQgYXQgbGVhc3Qgb25lIG91dHB1dCBjb25uZWN0ZWQuCiAgLSBZb3UgbmVl ZCB0aGUgL2Rldi9jcHUvMC9tc3IgZmlsZSBhdmFpbGFibGUuCiAgLSBZb3UgbmVlZCB0aGUgL2Rl di9pMmMtKiBmaWxlcyBhdmFpbGFibGUuCgp2MjogLSBNYW55IG1hbnkgY2hhbmdlcyBkdWUgdG8g dGhlIGxhdGVzdCByZXZpZXcgY29tbWVudHMgYW5kIHJlYmFzZS4KClNpZ25lZC1vZmYtYnk6IFBh dWxvIFphbm9uaSA8cGF1bG8uci56YW5vbmlAaW50ZWwuY29tPgotLS0KIHRlc3RzLy5naXRpZ25v cmUgIHwgICAxICsKIHRlc3RzL01ha2VmaWxlLmFtIHwgICAxICsKIHRlc3RzL3BjOC5jICAgICAg IHwgODA0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwogMyBmaWxlcyBjaGFuZ2VkLCA4MDYgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAw NjQ0IHRlc3RzL3BjOC5jCgpkaWZmIC0tZ2l0IGEvdGVzdHMvLmdpdGlnbm9yZSBiL3Rlc3RzLy5n aXRpZ25vcmUKaW5kZXggYjVlYjdhNS4uMTlmODI3YSAxMDA2NDQKLS0tIGEvdGVzdHMvLmdpdGln bm9yZQorKysgYi90ZXN0cy8uZ2l0aWdub3JlCkBAIC05Myw2ICs5Myw3IEBAIGdldHZlcnNpb24K IGttc19mbGlwCiBrbXNfcmVuZGVyCiBrbXNfc2V0bW9kZQorcGM4CiBwcmltZV9udl9hcGkKIHBy aW1lX252X3Bjb3B5CiBwcmltZV9udl90ZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5h bSBiL3Rlc3RzL01ha2VmaWxlLmFtCmluZGV4IGM3MjQ4MjkuLjM3MGE3MDAgMTAwNjQ0Ci0tLSBh L3Rlc3RzL01ha2VmaWxlLmFtCisrKyBiL3Rlc3RzL01ha2VmaWxlLmFtCkBAIC00NSw2ICs0NSw3 IEBAIFRFU1RTX3Byb2dzX00gPSBcCiAJa21zX3JlbmRlciBcCiAJa21zX3NldG1vZGUgXAogCSQo Tk9VVkVBVV9URVNUU19NKSBcCisJcGM4IFwKIAlwcmltZV9zZWxmX2ltcG9ydCBcCiAJJChOVUxM KQogCmRpZmYgLS1naXQgYS90ZXN0cy9wYzguYyBiL3Rlc3RzL3BjOC5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YzU0YjcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9w YzguYwpAQCAtMCwwICsxLDgwNCBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDEzIEludGVsIENv cnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBj aGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2Fy ZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisg KiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcg d2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBt ZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNv cGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQor ICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dp bmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhp cyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNo YWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2Yg dGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT IiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwg SU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklO R0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBI T0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lT RSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09G VFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgor ICoKKyAqIEF1dGhvcnM6CisgKiAgICBQYXVsbyBaYW5vbmkgPHBhdWxvLnIuemFub25pQGludGVs LmNvbT4KKyAqCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+ CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8 dW5pc3RkLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNs dWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMv c3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1kZXYu aD4KKworI2luY2x1ZGUgImRybS5oIgorI2luY2x1ZGUgImRybXRlc3QuaCIKKyNpbmNsdWRlICJp bnRlbF9iYXRjaGJ1ZmZlci5oIgorI2luY2x1ZGUgImludGVsX2dwdV90b29scy5oIgorI2luY2x1 ZGUgImk5MTVfZHJtLmgiCisKKyNkZWZpbmUgTVNSX1BDOF9SRVMJMHg2MzAKKyNkZWZpbmUgTVNS X1BDOV9SRVMJMHg2MzEKKyNkZWZpbmUgTVNSX1BDMTBfUkVTCTB4NjMyCisKKyNkZWZpbmUgTUFY X0NPTk5FQ1RPUlMJMzIKKyNkZWZpbmUgTUFYX0VOQ09ERVJTCTMyCisjZGVmaW5lIE1BWF9DUlRD UwkxNgorCitpbnQgZHJtX2ZkLCBtc3JfZmQ7CitzdHJ1Y3QgbW9kZV9zZXRfZGF0YSBtc19kYXRh OworCisvKiBTdHVmZiB1c2VkIHdoZW4gY3JlYXRpbmcgRkJzIGFuZCBtb2RlIHNldHRpbmcuICov CitzdHJ1Y3QgbW9kZV9zZXRfZGF0YSB7CisJZHJtTW9kZVJlc1B0ciByZXM7CisJZHJtTW9kZUNv bm5lY3RvclB0ciBjb25uZWN0b3JzW01BWF9DT05ORUNUT1JTXTsKKwlkcm1Nb2RlUHJvcGVydHlC bG9iUHRyIGVkaWRzW01BWF9DT05ORUNUT1JTXTsKKworCWRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1n cjsKKwl1aW50MzJfdCBkZXZpZDsKK307CisKKy8qIFN0dWZmIHdlIHF1ZXJ5IGF0IGRpZmZlcmVu dCB0aW1lcyBzbyB3ZSBjYW4gY29tcGFyZS4gKi8KK3N0cnVjdCBjb21wYXJlX2RhdGEgeworCWRy bU1vZGVSZXNQdHIgcmVzOworCWRybU1vZGVFbmNvZGVyUHRyIGVuY29kZXJzW01BWF9FTkNPREVS U107CisJZHJtTW9kZUNvbm5lY3RvclB0ciBjb25uZWN0b3JzW01BWF9DT05ORUNUT1JTXTsKKwlk cm1Nb2RlQ3J0Y1B0ciBjcnRjc1tNQVhfQ1JUQ1NdOworCWRybU1vZGVQcm9wZXJ0eUJsb2JQdHIg ZWRpZHNbTUFYX0NPTk5FQ1RPUlNdOworfTsKKworc3RydWN0IGNvbXBhcmVfcmVnaXN0ZXJzIHsK KwkvKiBXZSBrbm93IHRoZXNlIGFyZSBsb3N0ICovCisJdWludDMyX3QgYXJiX21vZGU7CisJdWlu dDMyX3QgdGlsZWN0bDsKKworCS8qIFN0dWZmIHRvdWNoZWQgYXQgaW5pdF9jbG9ja19nYXRpbmcs IHNvIHdlIGNhbiBtYWtlIHN1cmUgd2UKKwkgKiBkb24ndCBuZWVkIHRvIGNhbGwgaXQgd2hlbiBy ZWluaXRpbmcuICovCisJdWludDMyX3QgZ2VuNl91Y2djdGwyOworCXVpbnQzMl90IGdlbjdfbDNj bnRscmVnMTsKKwl1aW50MzJfdCB0cmFuc2FfY2hpY2tlbjE7CisKKwl1aW50MzJfdCBkZWllcjsK Kwl1aW50MzJfdCBndGllcjsKKworCXVpbnQzMl90IGRkaV9idWZfdHJhbnNfYV8xOworCXVpbnQz Ml90IGRkaV9idWZfdHJhbnNfYl81OworCXVpbnQzMl90IGRkaV9idWZfdHJhbnNfY18xMDsKKwl1 aW50MzJfdCBkZGlfYnVmX3RyYW5zX2RfMTU7CisJdWludDMyX3QgZGRpX2J1Zl90cmFuc19lXzIw OworfTsKKworLyogSWYgdGhlIHJlYWQgZmFpbHMsIHRoZW4gdGhlIG1hY2hpbmUgZG9lc24ndCBz dXBwb3J0IFBDOCsgcmVzaWRlbmNpZXMuICovCitzdGF0aWMgYm9vbCBzdXBwb3J0c19wYzhfcGx1 c19yZXNpZGVuY2llcyh2b2lkKQoreworCWludCByYzsKKwl1aW50NjRfdCB2YWw7CisKKwlyYyA9 IHByZWFkKG1zcl9mZCwgJnZhbCwgc2l6ZW9mKHVpbnQ2NF90KSwgTVNSX1BDOF9SRVMpOworCWlm ICghcmMgPT0gc2l6ZW9mKHZhbCkpCisJCXJldHVybiBmYWxzZTsKKwlyYyA9IHByZWFkKG1zcl9m ZCwgJnZhbCwgc2l6ZW9mKHVpbnQ2NF90KSwgTVNSX1BDOV9SRVMpOworCWlmICghcmMgPT0gc2l6 ZW9mKHZhbCkpCisJCXJldHVybiBmYWxzZTsKKwlyYyA9IHByZWFkKG1zcl9mZCwgJnZhbCwgc2l6 ZW9mKHVpbnQ2NF90KSwgTVNSX1BDMTBfUkVTKTsKKwlpZiAoIXJjID09IHNpemVvZih2YWwpKQor CQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHVpbnQ2NF90IGdl dF9yZXNpZGVuY3kodWludDMyX3QgdHlwZSkKK3sKKwlpbnQgcmM7CisJdWludDY0X3QgcmV0Owor CisJcmMgPSBwcmVhZChtc3JfZmQsICZyZXQsIHNpemVvZih1aW50NjRfdCksIHR5cGUpOworCWln dF9hc3NlcnQocmMgPT0gc2l6ZW9mKHJldCkpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGlj IGJvb2wgcGM4X3BsdXNfcmVzaWRlbmN5X2NoYW5nZWQodW5zaWduZWQgaW50IHRpbWVvdXRfc2Vj KQoreworCXVuc2lnbmVkIGludCBpOworCXVpbnQ2NF90IHJlc19wYzgsIHJlc19wYzksIHJlc19w YzEwOworCWludCB0b19zbGVlcCA9IDEwMCAqIDEwMDA7CisKKwlyZXNfcGM4ID0gZ2V0X3Jlc2lk ZW5jeShNU1JfUEM4X1JFUyk7CisJcmVzX3BjOSA9IGdldF9yZXNpZGVuY3koTVNSX1BDOV9SRVMp OworCXJlc19wYzEwID0gZ2V0X3Jlc2lkZW5jeShNU1JfUEMxMF9SRVMpOworCisJZm9yIChpID0g MDsgaSA8IHRpbWVvdXRfc2VjICogMTAwMCAqIDEwMDA7IGkgKz0gdG9fc2xlZXApIHsKKwkJaWYg KHJlc19wYzggIT0gZ2V0X3Jlc2lkZW5jeShNU1JfUEM4X1JFUykgfHwKKwkJICAgIHJlc19wYzkg IT0gZ2V0X3Jlc2lkZW5jeShNU1JfUEM5X1JFUykgfHwKKwkJICAgIHJlc19wYzEwICE9IGdldF9y ZXNpZGVuY3koTVNSX1BDMTBfUkVTKSkgeworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJdXNsZWVw KHRvX3NsZWVwKTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qIENoZWNrcyBub3Qgb25s eSBpZiBQQzgrIGlzIGFsbG93ZWQsIGJ1dCBhbHNvIGlmIHdlJ3JlIHJlYWNoaW5nIGl0LgorICog V2UgY2FsbCB0aGlzIHdoZW4gd2UgZXhwZWN0IHRoaXMgZnVuY3Rpb24gdG8gcmV0dXJuIHF1aWNr bHkgc2luY2UgUEM4IGlzCisgKiBhY3R1YWxseSBlbmFibGVkLCBzbyB0aGUgMzBzIHRpbWVvdXQg d2UgdXNlIHNob3VsZG4ndCBtYXR0ZXIuICovCitzdGF0aWMgYm9vbCBwYzhfcGx1c19lbmFibGVk KHZvaWQpCit7CisJcmV0dXJuIHBjOF9wbHVzX3Jlc2lkZW5jeV9jaGFuZ2VkKDMwKTsKK30KKwor LyogV2UgY2FsbCB0aGlzIHdoZW4gd2UgZXhwZWN0IFBDOCsgdG8gYmUgYWN0dWFsbHkgZGlzYWJs ZWQsIHNvIHdlIHNob3VsZCBub3QKKyAqIHJldHVybiB1bnRpbCB0aGUgNXMgdGltZW91dCBleHBp cmVzLiBJbiBvdGhlciB3b3JkczogaW4gdGhlICJoYXBweSBjYXNlIiwKKyAqIGV2ZXJ5IHRpbWUg d2UgY2FsbCB0aGlzIGZ1bmN0aW9uIHRoZSBwcm9ncmFtIHdpbGwgdGFrZSA1cyBtb3JlIHRvIGZp bmlzaC4gKi8KK3N0YXRpYyBib29sIHBjOF9wbHVzX2Rpc2FibGVkKHZvaWQpCit7CisJcmV0dXJu ICFwYzhfcGx1c19yZXNpZGVuY3lfY2hhbmdlZCg1KTsKK30KKworc3RhdGljIHZvaWQgZGlzYWJs ZV9hbGxfc2NyZWVucyhzdHJ1Y3QgbW9kZV9zZXRfZGF0YSAqZGF0YSkKK3sKKwlpbnQgaSwgcmM7 CisKKwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+cmVzLT5jb3VudF9jcnRjczsgaSsrKSB7CisJCXJj ID0gZHJtTW9kZVNldENydGMoZHJtX2ZkLCBkYXRhLT5yZXMtPmNydGNzW2ldLCAtMSwgMCwgMCwK KwkJCQkgICAgTlVMTCwgMCwgTlVMTCk7CisJCWlndF9hc3NlcnQocmMgPT0gMCk7CisJfQorfQor CitzdGF0aWMgdWludDMyX3QgY3JlYXRlX2ZiKHN0cnVjdCBtb2RlX3NldF9kYXRhICpkYXRhLCBp bnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisJc3RydWN0IGttc3Rlc3RfZmIgZmI7CisJY2Fpcm9f dCAqY3I7CisJdWludDMyX3QgYnVmZmVyX2lkOworCisJYnVmZmVyX2lkID0ga21zdGVzdF9jcmVh dGVfZmIoZHJtX2ZkLCB3aWR0aCwgaGVpZ2h0LCAzMiwgMjQsIGZhbHNlLAorCQkJCSAgICAgICZm Yik7CisJY3IgPSBrbXN0ZXN0X2dldF9jYWlyb19jdHgoZHJtX2ZkLCAmZmIpOworCWttc3Rlc3Rf cGFpbnRfdGVzdF9wYXR0ZXJuKGNyLCB3aWR0aCwgaGVpZ2h0KTsKKwlyZXR1cm4gYnVmZmVyX2lk OworfQorCitzdGF0aWMgdm9pZCBlbmFibGVfb25lX3NjcmVlbihzdHJ1Y3QgbW9kZV9zZXRfZGF0 YSAqZGF0YSkKK3sKKwl1aW50MzJfdCBjcnRjX2lkID0gMCwgYnVmZmVyX2lkID0gMCwgY29ubmVj dG9yX2lkID0gMDsKKwlkcm1Nb2RlTW9kZUluZm9QdHIgbW9kZSA9IE5VTEw7CisJaW50IGksIHJj OworCisJZm9yIChpID0gMDsgaSA8IGRhdGEtPnJlcy0+Y291bnRfY29ubmVjdG9yczsgaSsrKSB7 CisJCWRybU1vZGVDb25uZWN0b3JQdHIgYyA9IGRhdGEtPmNvbm5lY3RvcnNbaV07CisKKwkJaWYg KGMtPmNvbm5lY3Rpb24gPT0gRFJNX01PREVfQ09OTkVDVEVEICYmIGMtPmNvdW50X21vZGVzKSB7 CisJCQljb25uZWN0b3JfaWQgPSBjLT5jb25uZWN0b3JfaWQ7CisJCQltb2RlID0gJmMtPm1vZGVz WzBdOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwljcnRjX2lkID0gZGF0YS0+cmVzLT5jcnRjc1sw XTsKKwlidWZmZXJfaWQgPSBjcmVhdGVfZmIoZGF0YSwgbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZk aXNwbGF5KTsKKworCWlndF9hc3NlcnQoY3J0Y19pZCk7CisJaWd0X2Fzc2VydChidWZmZXJfaWQp OworCWlndF9hc3NlcnQoY29ubmVjdG9yX2lkKTsKKwlpZ3RfYXNzZXJ0KG1vZGUpOworCisJcmMg PSBkcm1Nb2RlU2V0Q3J0Yyhkcm1fZmQsIGNydGNfaWQsIGJ1ZmZlcl9pZCwgMCwgMCwgJmNvbm5l Y3Rvcl9pZCwKKwkJCSAgICAxLCBtb2RlKTsKKwlpZ3RfYXNzZXJ0KHJjID09IDApOworfQorCitz dGF0aWMgZHJtTW9kZVByb3BlcnR5QmxvYlB0ciBnZXRfY29ubmVjdG9yX2VkaWQoZHJtTW9kZUNv bm5lY3RvclB0ciBjb25uZWN0b3IsCisJCQkJCQkgaW50IGluZGV4KQoreworCXVuc2lnbmVkIGlu dCBpOworCWRybU1vZGVPYmplY3RQcm9wZXJ0aWVzUHRyIHByb3BzOworCWRybU1vZGVQcm9wZXJ0 eUJsb2JQdHIgcmV0ID0gTlVMTDsKKworCXByb3BzID0gZHJtTW9kZU9iamVjdEdldFByb3BlcnRp ZXMoZHJtX2ZkLCBjb25uZWN0b3ItPmNvbm5lY3Rvcl9pZCwKKwkJCQkJICAgRFJNX01PREVfT0JK RUNUX0NPTk5FQ1RPUik7CisKKwlmb3IgKGkgPSAwOyBpIDwgcHJvcHMtPmNvdW50X3Byb3BzOyBp KyspIHsKKwkJZHJtTW9kZVByb3BlcnR5UHRyIHByb3AgPSBkcm1Nb2RlR2V0UHJvcGVydHkoZHJt X2ZkLAorCQkJCQkJCSAgICAgcHJvcHMtPnByb3BzW2ldKTsKKworCQlpZiAoc3RyY21wKHByb3At Pm5hbWUsICJFRElEIikgPT0gMCkgeworCQkJaWd0X2Fzc2VydChwcm9wLT5mbGFncyAmIERSTV9N T0RFX1BST1BfQkxPQik7CisJCQlpZ3RfYXNzZXJ0KHByb3AtPmNvdW50X2Jsb2JzID09IDApOwor CQkJcmV0ID0gZHJtTW9kZUdldFByb3BlcnR5QmxvYihkcm1fZmQsCisJCQkJCQkgICAgIHByb3Bz LT5wcm9wX3ZhbHVlc1tpXSk7CisJCX0KKworCQlkcm1Nb2RlRnJlZVByb3BlcnR5KHByb3ApOwor CX0KKworCWRybU1vZGVGcmVlT2JqZWN0UHJvcGVydGllcyhwcm9wcyk7CisJcmV0dXJuIHJldDsK K30KKworc3RhdGljIHZvaWQgaW5pdF9tb2RlX3NldF9kYXRhKHN0cnVjdCBtb2RlX3NldF9kYXRh ICpkYXRhKQoreworCWludCBpOworCisJZGF0YS0+cmVzID0gZHJtTW9kZUdldFJlc291cmNlcyhk cm1fZmQpOworCWlndF9hc3NlcnQoZGF0YS0+cmVzKTsKKwlpZ3RfYXNzZXJ0KGRhdGEtPnJlcy0+ Y291bnRfY29ubmVjdG9ycyA8PSBNQVhfQ09OTkVDVE9SUyk7CisKKwlmb3IgKGkgPSAwOyBpIDwg ZGF0YS0+cmVzLT5jb3VudF9jb25uZWN0b3JzOyBpKyspIHsKKwkJZGF0YS0+Y29ubmVjdG9yc1tp XSA9IGRybU1vZGVHZXRDb25uZWN0b3IoZHJtX2ZkLAorCQkJCQkJZGF0YS0+cmVzLT5jb25uZWN0 b3JzW2ldKTsKKwkJZGF0YS0+ZWRpZHNbaV0gPSBnZXRfY29ubmVjdG9yX2VkaWQoZGF0YS0+Y29u bmVjdG9yc1tpXSwgaSk7CisJfQorCisJZGF0YS0+YnVmbWdyID0gZHJtX2ludGVsX2J1Zm1ncl9n ZW1faW5pdChkcm1fZmQsIDQwOTYpOworCWRhdGEtPmRldmlkID0gaW50ZWxfZ2V0X2RybV9kZXZp ZChkcm1fZmQpOworCisJZG9fb3JfZGllKGlndF9zZXRfdnRfZ3JhcGhpY3NfbW9kZSgpKTsKKwlk cm1faW50ZWxfYnVmbWdyX2dlbV9lbmFibGVfcmV1c2UoZGF0YS0+YnVmbWdyKTsKK30KKworc3Rh dGljIHZvaWQgZmluaV9tb2RlX3NldF9kYXRhKHN0cnVjdCBtb2RlX3NldF9kYXRhICpkYXRhKQor eworCWludCBpOworCisJZHJtX2ludGVsX2J1Zm1ncl9kZXN0cm95KGRhdGEtPmJ1Zm1ncik7CisK Kwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+cmVzLT5jb3VudF9jb25uZWN0b3JzOyBpKyspIHsKKwkJ ZHJtTW9kZUZyZWVDb25uZWN0b3IoZGF0YS0+Y29ubmVjdG9yc1tpXSk7CisJCWRybU1vZGVGcmVl UHJvcGVydHlCbG9iKGRhdGEtPmVkaWRzW2ldKTsKKwl9CisJZHJtTW9kZUZyZWVSZXNvdXJjZXMo ZGF0YS0+cmVzKTsKK30KKworc3RhdGljIHZvaWQgZ2V0X2RybV9pbmZvKHN0cnVjdCBjb21wYXJl X2RhdGEgKmRhdGEpCit7CisJaW50IGk7CisKKwlkYXRhLT5yZXMgPSBkcm1Nb2RlR2V0UmVzb3Vy Y2VzKGRybV9mZCk7CisJaWd0X2Fzc2VydChkYXRhLT5yZXMpOworCisJaWd0X2Fzc2VydChkYXRh LT5yZXMtPmNvdW50X2Nvbm5lY3RvcnMgPD0gTUFYX0NPTk5FQ1RPUlMpOworCWlndF9hc3NlcnQo ZGF0YS0+cmVzLT5jb3VudF9lbmNvZGVycyA8PSBNQVhfRU5DT0RFUlMpOworCWlndF9hc3NlcnQo ZGF0YS0+cmVzLT5jb3VudF9jcnRjcyA8PSBNQVhfQ1JUQ1MpOworCisJZm9yIChpID0gMDsgaSA8 IGRhdGEtPnJlcy0+Y291bnRfY29ubmVjdG9yczsgaSsrKSB7CisJCWRhdGEtPmNvbm5lY3RvcnNb aV0gPSBkcm1Nb2RlR2V0Q29ubmVjdG9yKGRybV9mZCwKKwkJCQkJCWRhdGEtPnJlcy0+Y29ubmVj dG9yc1tpXSk7CisJCWRhdGEtPmVkaWRzW2ldID0gZ2V0X2Nvbm5lY3Rvcl9lZGlkKGRhdGEtPmNv bm5lY3RvcnNbaV0sIGkpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+cmVzLT5jb3VudF9l bmNvZGVyczsgaSsrKQorCQlkYXRhLT5lbmNvZGVyc1tpXSA9IGRybU1vZGVHZXRFbmNvZGVyKGRy bV9mZCwKKwkJCQkJCWRhdGEtPnJlcy0+ZW5jb2RlcnNbaV0pOworCWZvciAoaSA9IDA7IGkgPCBk YXRhLT5yZXMtPmNvdW50X2NydGNzOyBpKyspCisJCWRhdGEtPmNydGNzW2ldID0gZHJtTW9kZUdl dENydGMoZHJtX2ZkLCBkYXRhLT5yZXMtPmNydGNzW2ldKTsKK30KKworc3RhdGljIHZvaWQgZ2V0 X3JlZ2lzdGVycyhzdHJ1Y3QgY29tcGFyZV9yZWdpc3RlcnMgKmRhdGEpCit7CisJaW50ZWxfcmVn aXN0ZXJfYWNjZXNzX2luaXQoaW50ZWxfZ2V0X3BjaV9kZXZpY2UoKSwgMCk7CisJZGF0YS0+YXJi X21vZGUgPSBJTlJFRygweDQwMzApOworCWRhdGEtPnRpbGVjdGwgPSBJTlJFRygweDEwMTAwMCk7 CisJZGF0YS0+Z2VuNl91Y2djdGwyID0gSU5SRUcoMHg5NDA0KTsKKwlkYXRhLT5nZW43X2wzY250 bHJlZzEgPSBJTlJFRygweEIwQzEpOworCWRhdGEtPnRyYW5zYV9jaGlja2VuMSA9IElOUkVHKDB4 RjAwNjApOworCWRhdGEtPmRlaWVyID0gSU5SRUcoMHg0NDAwQyk7CisJZGF0YS0+Z3RpZXIgPSBJ TlJFRygweDQ0MDFDKTsKKwlkYXRhLT5kZGlfYnVmX3RyYW5zX2FfMSA9IElOUkVHKDB4NjRFMDAp OworCWRhdGEtPmRkaV9idWZfdHJhbnNfYl81ID0gSU5SRUcoMHg2NEU3MCk7CisJZGF0YS0+ZGRp X2J1Zl90cmFuc19jXzEwID0gSU5SRUcoMHg2NEVFMCk7CisJZGF0YS0+ZGRpX2J1Zl90cmFuc19k XzE1ID0gSU5SRUcoMHg2NEY1OCk7CisJZGF0YS0+ZGRpX2J1Zl90cmFuc19lXzIwID0gSU5SRUco MHg2NEZDQyk7CisJaW50ZWxfcmVnaXN0ZXJfYWNjZXNzX2ZpbmkoKTsKK30KKworc3RhdGljIHZv aWQgZnJlZV9kcm1faW5mbyhzdHJ1Y3QgY29tcGFyZV9kYXRhICpkYXRhKQoreworCWludCBpOwor CisJZm9yIChpID0gMDsgaSA8IGRhdGEtPnJlcy0+Y291bnRfY29ubmVjdG9yczsgaSsrKSB7CisJ CWRybU1vZGVGcmVlQ29ubmVjdG9yKGRhdGEtPmNvbm5lY3RvcnNbaV0pOworCQlkcm1Nb2RlRnJl ZVByb3BlcnR5QmxvYihkYXRhLT5lZGlkc1tpXSk7CisJfQorCWZvciAoaSA9IDA7IGkgPCBkYXRh LT5yZXMtPmNvdW50X2VuY29kZXJzOyBpKyspCisJCWRybU1vZGVGcmVlRW5jb2RlcihkYXRhLT5l bmNvZGVyc1tpXSk7CisJZm9yIChpID0gMDsgaSA8IGRhdGEtPnJlcy0+Y291bnRfY3J0Y3M7IGkr KykKKwkJZHJtTW9kZUZyZWVDcnRjKGRhdGEtPmNydGNzW2ldKTsKKworCWRybU1vZGVGcmVlUmVz b3VyY2VzKGRhdGEtPnJlcyk7Cit9CisKKyNkZWZpbmUgQ09NUEFSRShkMSwgZDIsIGRhdGEpIGln dF9hc3NlcnQoZDEtPmRhdGEgPT0gZDItPmRhdGEpCisjZGVmaW5lIENPTVBBUkVfQVJSQVkoZDEs IGQyLCBzaXplLCBkYXRhKSBkbyB7IFwKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSBcCisJ CWlndF9hc3NlcnQoZDEtPmRhdGFbaV0gPT0gZDItPmRhdGFbaV0pOyBcCit9IHdoaWxlICgwKQor CitzdGF0aWMgdm9pZCBhc3NlcnRfZHJtX3Jlc291cmNlc19lcXVhbChzdHJ1Y3QgY29tcGFyZV9k YXRhICpkMSwKKwkJCQkgICAgICAgc3RydWN0IGNvbXBhcmVfZGF0YSAqZDIpCit7CisJQ09NUEFS RShkMSwgZDIsIHJlcy0+Y291bnRfY29ubmVjdG9ycyk7CisJQ09NUEFSRShkMSwgZDIsIHJlcy0+ Y291bnRfZW5jb2RlcnMpOworCUNPTVBBUkUoZDEsIGQyLCByZXMtPmNvdW50X2NydGNzKTsKKwlD T01QQVJFKGQxLCBkMiwgcmVzLT5taW5fd2lkdGgpOworCUNPTVBBUkUoZDEsIGQyLCByZXMtPm1h eF93aWR0aCk7CisJQ09NUEFSRShkMSwgZDIsIHJlcy0+bWluX2hlaWdodCk7CisJQ09NUEFSRShk MSwgZDIsIHJlcy0+bWF4X2hlaWdodCk7Cit9CisKK3N0YXRpYyB2b2lkIGFzc2VydF9tb2Rlc19l cXVhbChkcm1Nb2RlTW9kZUluZm9QdHIgbTEsIGRybU1vZGVNb2RlSW5mb1B0ciBtMikKK3sKKwlD T01QQVJFKG0xLCBtMiwgY2xvY2spOworCUNPTVBBUkUobTEsIG0yLCBoZGlzcGxheSk7CisJQ09N UEFSRShtMSwgbTIsIGhzeW5jX3N0YXJ0KTsKKwlDT01QQVJFKG0xLCBtMiwgaHN5bmNfZW5kKTsK KwlDT01QQVJFKG0xLCBtMiwgaHRvdGFsKTsKKwlDT01QQVJFKG0xLCBtMiwgaHNrZXcpOworCUNP TVBBUkUobTEsIG0yLCB2ZGlzcGxheSk7CisJQ09NUEFSRShtMSwgbTIsIHZzeW5jX3N0YXJ0KTsK KwlDT01QQVJFKG0xLCBtMiwgdnN5bmNfZW5kKTsKKwlDT01QQVJFKG0xLCBtMiwgdnRvdGFsKTsK KwlDT01QQVJFKG0xLCBtMiwgdnNjYW4pOworCUNPTVBBUkUobTEsIG0yLCB2cmVmcmVzaCk7CisJ Q09NUEFSRShtMSwgbTIsIGZsYWdzKTsKKwlDT01QQVJFKG0xLCBtMiwgdHlwZSk7CisJaWd0X2Fz c2VydChzdHJjbXAobTEtPm5hbWUsIG0yLT5uYW1lKSA9PSAwKTsKK30KKworc3RhdGljIHZvaWQg YXNzZXJ0X2RybV9jb25uZWN0b3JzX2VxdWFsKGRybU1vZGVDb25uZWN0b3JQdHIgYzEsCisJCQkJ CWRybU1vZGVDb25uZWN0b3JQdHIgYzIpCit7CisJaW50IGk7CisKKwlDT01QQVJFKGMxLCBjMiwg Y29ubmVjdG9yX2lkKTsKKwlDT01QQVJFKGMxLCBjMiwgY29ubmVjdG9yX3R5cGUpOworCUNPTVBB UkUoYzEsIGMyLCBjb25uZWN0b3JfdHlwZV9pZCk7CisJQ09NUEFSRShjMSwgYzIsIG1tV2lkdGgp OworCUNPTVBBUkUoYzEsIGMyLCBtbUhlaWdodCk7CisJQ09NUEFSRShjMSwgYzIsIGNvdW50X21v ZGVzKTsKKwlDT01QQVJFKGMxLCBjMiwgY291bnRfcHJvcHMpOworCUNPTVBBUkUoYzEsIGMyLCBj b3VudF9lbmNvZGVycyk7CisJQ09NUEFSRV9BUlJBWShjMSwgYzIsIGMxLT5jb3VudF9wcm9wcywg cHJvcHMpOworCUNPTVBBUkVfQVJSQVkoYzEsIGMyLCBjMS0+Y291bnRfZW5jb2RlcnMsIGVuY29k ZXJzKTsKKworCWZvciAoaSA9IDA7IGkgPCBjMS0+Y291bnRfbW9kZXM7IGkrKykKKwkJYXNzZXJ0 X21vZGVzX2VxdWFsKCZjMS0+bW9kZXNbMF0sICZjMi0+bW9kZXNbMF0pOworfQorCitzdGF0aWMg dm9pZCBhc3NlcnRfZHJtX2VuY29kZXJzX2VxdWFsKGRybU1vZGVFbmNvZGVyUHRyIGUxLAorCQkJ CSAgICAgIGRybU1vZGVFbmNvZGVyUHRyIGUyKQoreworCUNPTVBBUkUoZTEsIGUyLCBlbmNvZGVy X2lkKTsKKwlDT01QQVJFKGUxLCBlMiwgZW5jb2Rlcl90eXBlKTsKKwlDT01QQVJFKGUxLCBlMiwg cG9zc2libGVfY3J0Y3MpOworCUNPTVBBUkUoZTEsIGUyLCBwb3NzaWJsZV9jbG9uZXMpOworfQor CitzdGF0aWMgdm9pZCBhc3NlcnRfZHJtX2NydGNzX2VxdWFsKGRybU1vZGVDcnRjUHRyIGMxLCBk cm1Nb2RlQ3J0Y1B0ciBjMikKK3sKKwlDT01QQVJFKGMxLCBjMiwgY3J0Y19pZCk7Cit9CisKK3N0 YXRpYyB2b2lkIGFzc2VydF9kcm1fZWRpZHNfZXF1YWwoZHJtTW9kZVByb3BlcnR5QmxvYlB0ciBl MSwKKwkJCQkgICBkcm1Nb2RlUHJvcGVydHlCbG9iUHRyIGUyKQoreworCWlmICghZTEgJiYgIWUy KQorCQlyZXR1cm47CisJaWd0X2Fzc2VydChlMSAmJiBlMik7CisKKwlDT01QQVJFKGUxLCBlMiwg aWQpOworCUNPTVBBUkUoZTEsIGUyLCBsZW5ndGgpOworCisJaWd0X2Fzc2VydChtZW1jbXAoZTEt PmRhdGEsIGUyLT5kYXRhLCBlMS0+bGVuZ3RoKSA9PSAwKTsKK30KKworc3RhdGljIHZvaWQgY29t cGFyZV9yZWdpc3RlcnMoc3RydWN0IGNvbXBhcmVfcmVnaXN0ZXJzICpkMSwKKwkJCSAgICAgIHN0 cnVjdCBjb21wYXJlX3JlZ2lzdGVycyAqZDIpCit7CisJQ09NUEFSRShkMSwgZDIsIGdlbjZfdWNn Y3RsMik7CisJQ09NUEFSRShkMSwgZDIsIGdlbjdfbDNjbnRscmVnMSk7CisJQ09NUEFSRShkMSwg ZDIsIHRyYW5zYV9jaGlja2VuMSk7CisJQ09NUEFSRShkMSwgZDIsIGFyYl9tb2RlKTsKKwlDT01Q QVJFKGQxLCBkMiwgdGlsZWN0bCk7CisJQ09NUEFSRShkMSwgZDIsIGFyYl9tb2RlKTsKKwlDT01Q QVJFKGQxLCBkMiwgdGlsZWN0bCk7CisJQ09NUEFSRShkMSwgZDIsIGd0aWVyKTsKKwlDT01QQVJF KGQxLCBkMiwgZGRpX2J1Zl90cmFuc19hXzEpOworCUNPTVBBUkUoZDEsIGQyLCBkZGlfYnVmX3Ry YW5zX2JfNSk7CisJQ09NUEFSRShkMSwgZDIsIGRkaV9idWZfdHJhbnNfY18xMCk7CisJQ09NUEFS RShkMSwgZDIsIGRkaV9idWZfdHJhbnNfZF8xNSk7CisJQ09NUEFSRShkMSwgZDIsIGRkaV9idWZf dHJhbnNfZV8yMCk7Cit9CisKK3N0YXRpYyB2b2lkIGFzc2VydF9kcm1faW5mb3NfZXF1YWwoc3Ry dWN0IGNvbXBhcmVfZGF0YSAqZDEsCisJCQkJICAgc3RydWN0IGNvbXBhcmVfZGF0YSAqZDIpCit7 CisJaW50IGk7CisKKwlhc3NlcnRfZHJtX3Jlc291cmNlc19lcXVhbChkMSwgZDIpOworCisJZm9y IChpID0gMDsgaSA8IGQxLT5yZXMtPmNvdW50X2Nvbm5lY3RvcnM7IGkrKykgeworCQlhc3NlcnRf ZHJtX2Nvbm5lY3RvcnNfZXF1YWwoZDEtPmNvbm5lY3RvcnNbaV0sCisJCQkJCSAgICBkMi0+Y29u bmVjdG9yc1tpXSk7CisJCWFzc2VydF9kcm1fZWRpZHNfZXF1YWwoZDEtPmVkaWRzW2ldLCBkMi0+ ZWRpZHNbaV0pOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBkMS0+cmVzLT5jb3VudF9lbmNvZGVy czsgaSsrKQorCQlhc3NlcnRfZHJtX2VuY29kZXJzX2VxdWFsKGQxLT5lbmNvZGVyc1tpXSwgZDIt PmVuY29kZXJzW2ldKTsKKworCWZvciAoaSA9IDA7IGkgPCBkMS0+cmVzLT5jb3VudF9jcnRjczsg aSsrKQorCQlhc3NlcnRfZHJtX2NydGNzX2VxdWFsKGQxLT5jcnRjc1tpXSwgZDItPmNydGNzW2ld KTsKK30KKworc3RhdGljIHZvaWQgYmx0X2NvbG9yX2ZpbGwoc3RydWN0IGludGVsX2JhdGNoYnVm ZmVyICpiYXRjaCwKKwkJCSAgIGRybV9pbnRlbF9ibyAqYnVmLAorCQkJICAgY29uc3QgdW5zaWdu ZWQgaW50IHBhZ2VzKQoreworCWNvbnN0IHVuc2lnbmVkIHNob3J0IGhlaWdodCA9IHBhZ2VzLzQ7 CisJY29uc3QgdW5zaWduZWQgc2hvcnQgd2lkdGggPSA0MDk2OworCisJQkVHSU5fQkFUQ0goNSk7 CisJT1VUX0JBVENIKENPTE9SX0JMVF9DTUQgfCBDT0xPUl9CTFRfV1JJVEVfQUxQSEEgfCBDT0xP Ul9CTFRfV1JJVEVfUkdCKTsKKwlPVVRfQkFUQ0goKDMgPDwgMjQpIHwgLyogMzIgQml0IENvbG9y ICovCisJCSAgMHhGMCB8IC8qIFJhc3RlciBPUCBjb3B5IGJhY2tncm91bmQgcmVnaXN0ZXIgKi8K KwkJICAwKTsgLyogRGVzdCBwaXRjaCBpcyAwICovCisJT1VUX0JBVENIKHdpZHRoIDw8IDE2IHwg aGVpZ2h0KTsKKwlPVVRfUkVMT0MoYnVmLCBJOTE1X0dFTV9ET01BSU5fUkVOREVSLCBJOTE1X0dF TV9ET01BSU5fUkVOREVSLCAwKTsKKwlPVVRfQkFUQ0gocmFuZCgpKTsgLyogcmFuZG9tIHBhdHRl cm4gKi8KKwlBRFZBTkNFX0JBVENIKCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfYmF0Y2goc3Ry dWN0IG1vZGVfc2V0X2RhdGEgKmRhdGEpCit7CisJc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpi YXRjaDsKKwlpbnQ2NF90IHRpbWVvdXRfbnMgPSAxMDAwICogMTAwMCAqIDEwMDAgKiAyOworCWRy bV9pbnRlbF9ibyAqZHN0OworCWludCBpLCByYzsKKworCWRzdCA9IGRybV9pbnRlbF9ib19hbGxv YyhkYXRhLT5idWZtZ3IsICJkc3QiLCAoOCA8PCAyMCksIDQwOTYpOworCisJYmF0Y2ggPSBpbnRl bF9iYXRjaGJ1ZmZlcl9hbGxvYyhkYXRhLT5idWZtZ3IsCisJCQkJCWludGVsX2dldF9kcm1fZGV2 aWQoZHJtX2ZkKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTAwMDsgaSsrKQorCQlibHRfY29sb3Jf ZmlsbChiYXRjaCwgZHN0LCAoKDggPDwgMjApID4+IDEyKSk7CisKKwlyYyA9IGRybV9pbnRlbF9n ZW1fYm9fd2FpdChkc3QsIHRpbWVvdXRfbnMpOworCWlndF9hc3NlcnQoIXJjKTsKKworCWludGVs X2JhdGNoYnVmZmVyX2ZyZWUoYmF0Y2gpOworfQorCisvKiBXZSBjb3VsZCBjaGVjayB0aGUgY2hl Y2tzdW0gdG9vLCBidXQganVzdCB0aGUgaGVhZGVyIGlzIHByb2JhYmx5IGVub3VnaC4gKi8KK3N0 YXRpYyBib29sIGVkaWRfaXNfdmFsaWQoY29uc3QgdW5zaWduZWQgY2hhciAqZWRpZCkKK3sKKwlj aGFyIGVkaWRfaGVhZGVyW10gPSB7CisJCTB4MCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhG RiwgMHhGRiwgMHgwLAorCX07CisKKwlyZXR1cm4gKG1lbWNtcChlZGlkLCBlZGlkX2hlYWRlciwg c2l6ZW9mKGVkaWRfaGVhZGVyKSkgPT0gMCk7Cit9CisKK3N0YXRpYyBpbnQgY291bnRfZHJtX3Zh bGlkX2VkaWRzKHN0cnVjdCBtb2RlX3NldF9kYXRhICpkYXRhKQoreworCWludCBpLCByZXQgPSAw OworCisJZm9yIChpID0gMDsgaSA8IGRhdGEtPnJlcy0+Y291bnRfY29ubmVjdG9yczsgaSsrKQor CQlpZiAoZGF0YS0+ZWRpZHNbaV0gJiYgZWRpZF9pc192YWxpZChkYXRhLT5lZGlkc1tpXS0+ZGF0 YSkpCisJCQlyZXQrKzsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGNvdW50X2RybV9l ZHBfb3V0cHV0cyhzdHJ1Y3QgbW9kZV9zZXRfZGF0YSAqZGF0YSkKK3sKKwlpbnQgaSwgcmV0ID0g MDsKKworCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5yZXMtPmNvdW50X2Nvbm5lY3RvcnM7IGkrKykK KwkJaWYgKGRhdGEtPmNvbm5lY3RvcnNbaV0tPmNvbm5lY3Rvcl90eXBlID09CisJCSAgICBEUk1f TU9ERV9DT05ORUNUT1JfZURQKQorCQkJcmV0Kys7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGlj IGJvb2wgaTJjX2VkaWRfaXNfdmFsaWQoaW50IGZkKQoreworCWludCByYzsKKwl1bnNpZ25lZCBj aGFyIGVkaWRbMTI4XSA9IHt9OworCXN0cnVjdCBpMmNfbXNnIG1zZ3NbXSA9IHsKKwkJeyAvKiBT dGFydCBhdCAwLiAqLworCQkJLmFkZHIgPSAweDUwLAorCQkJLmZsYWdzID0gMCwKKwkJCS5sZW4g PSAxLAorCQkJLmJ1ZiA9IGVkaWQsCisJCX0sIHsgLyogTm93IHJlYWQgdGhlIEVESUQuICovCisJ CQkuYWRkciA9IDB4NTAsCisJCQkuZmxhZ3MgPSBJMkNfTV9SRCwKKwkJCS5sZW4gPSAxMjgsCisJ CQkuYnVmID0gZWRpZCwKKwkJfQorCX07CisJc3RydWN0IGkyY19yZHdyX2lvY3RsX2RhdGEgbXNn c2V0ID0geworCQkubXNncyA9IG1zZ3MsCisJCS5ubXNncyA9IDIsCisJfTsKKworCXJjID0gaW9j dGwoZmQsIEkyQ19SRFdSLCAmbXNnc2V0KTsKKwlyZXR1cm4gKHJjID49IDApID8gZWRpZF9pc192 YWxpZChlZGlkKSA6IGZhbHNlOworfQorCitzdGF0aWMgaW50IGNvdW50X2kyY192YWxpZF9lZGlk cyh2b2lkKQoreworCWludCBmZCwgcmV0ID0gMDsKKwlESVIgKmRpcjsKKworCXN0cnVjdCBkaXJl bnQgKmRpcmVudDsKKwljaGFyIGZ1bGxfbmFtZVszMl07CisKKwlkaXIgPSBvcGVuZGlyKCIvZGV2 LyIpOworCWlndF9hc3NlcnQoZGlyKTsKKworCXdoaWxlICgoZGlyZW50ID0gcmVhZGRpcihkaXIp KSkgeworCQlpZiAoc3RybmNtcChkaXJlbnQtPmRfbmFtZSwgImkyYy0iLCA0KSA9PSAwKSB7CisJ CQlzbnByaW50ZihmdWxsX25hbWUsIDMyLCAiL2Rldi8lcyIsIGRpcmVudC0+ZF9uYW1lKTsKKwkJ CWZkID0gb3BlbihmdWxsX25hbWUsIE9fUkRXUik7CisJCQlpZ3RfYXNzZXJ0KGZkICE9IC0xKTsK KwkJCWlmIChpMmNfZWRpZF9pc192YWxpZChmZCkpCisJCQkJcmV0Kys7CisJCQljbG9zZShmZCk7 CisJCX0KKwl9CisKKwljbG9zZWRpcihkaXIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFdlIHJ1 biB0aGlzIHRlc3Qgd2hlbiBhbGwgb3V0cHV0cyBhcmUgdHVybmVkIG9mZi4gV2hlbiBlRFAgcGFu ZWxzIGFyZSB0dXJuZWQKKyAqIG9mZiwgSTJDIGRvZXNuJ3Qgd29yayBvbiB0aGVtIGFuZCB3ZSBn ZXQgYSBuaWNlIGRtZXNnIGJhY2t0cmFjZS4gU28gY291bnQgaG93CisgKiBtYW55IGVEUCBwYW5l bHMgd2UgaGF2ZSBhbmQgc3VidHJhY3QgdGhlbS4gKi8KK3N0YXRpYyBib29sIHRlc3RfaTJjKHN0 cnVjdCBtb2RlX3NldF9kYXRhICpkYXRhKQoreworCWludCBpMmNfZWRpZHMgPSBjb3VudF9pMmNf dmFsaWRfZWRpZHMoKTsKKwlpbnQgZHJtX2VkaWRzID0gY291bnRfZHJtX3ZhbGlkX2VkaWRzKGRh dGEpOworCWludCBlZHBzID0gY291bnRfZHJtX2VkcF9vdXRwdXRzKGRhdGEpOworCisJcmV0dXJu IGkyY19lZGlkcyArIGVkcHMgPT0gZHJtX2VkaWRzOworfQorCitzdGF0aWMgYm9vbCBzZXR1cF9l bnZpcm9ubWVudCh2b2lkKQoreworCWludCBpMmNfZGV2X2ZpbGVzOworCURJUiAqZGV2X2RpcjsK KwlzdHJ1Y3QgZGlyZW50ICpkaXJlbnQ7CisKKwlkcm1fZmQgPSBkcm1fb3Blbl9hbnkoKTsKKwlp ZiAoZHJtX2ZkIDw9IDApCisJCXJldHVybiBmYWxzZTsKKworCWluaXRfbW9kZV9zZXRfZGF0YSgm bXNfZGF0YSk7CisKKwkvKiBPbmx5IEhhc3dlbGwgc3VwcG9ydHMgdGhlIFBDOCBmZWF0dXJlLiAq LworCWlmICghSVNfSEFTV0VMTChtc19kYXRhLmRldmlkKSkgeworCQlwcmludGYoIlBDOCsgZmVh dHVyZSBvbmx5IHN1cHBvcnRlZCBvbiBIYXN3ZWxsLlxuIik7CisJCXJldHVybiBmYWxzZTsKKwl9 CisKKwkvKiBNYWtlIHN1cmUgb3VyIEtlcm5lbCBzdXBwb3J0cyBNU1IgYW5kIHRoZSBtb2R1bGUg aXMgbG9hZGVkLiAqLworCW1zcl9mZCA9IG9wZW4oIi9kZXYvY3B1LzAvbXNyIiwgT19SRE9OTFkp OworCWlmIChtc3JfZmQgPT0gLTEpIHsKKwkJcHJpbnRmKCJDYW4ndCBvcGVuIC9kZXYvY3B1LzAv bXNyLlxuIik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKiBNYWtlIHN1cmUgdGhlIC9kZXYv aTJjLSogZmlsZXMgZXhpc3QuICovCisJZGV2X2RpciA9IG9wZW5kaXIoIi9kZXYiKTsKKwlpZiAo IWRldl9kaXIpIHsKKwkJcHJpbnRmKCJDYW4ndCBvcGVuIC9kZXYuXG4iKTsKKwkJcmV0dXJuIGZh bHNlOworCX0KKwlpMmNfZGV2X2ZpbGVzID0gMDsKKwl3aGlsZSAoKGRpcmVudCA9IHJlYWRkaXIo ZGV2X2RpcikpKSB7CisJCWlmIChzdHJuY21wKGRpcmVudC0+ZF9uYW1lLCAiaTJjLSIsIDQpID09 IDApCisJCQlpMmNfZGV2X2ZpbGVzKys7CisJfQorCWNsb3NlZGlyKGRldl9kaXIpOworCWlmICgh aTJjX2Rldl9maWxlcykgeworCQlwcmludGYoIk5vIC9kZXYvaTJjLSogZmlsZXMuXG4iKTsKKwkJ cmV0dXJuIGZhbHNlOworCX0KKworCS8qIE5vbi1VTFQgbWFjaGluZXMgZG9uJ3Qgc3VwcG9ydCBQ QzgrLiAqLworCWlmICghc3VwcG9ydHNfcGM4X3BsdXNfcmVzaWRlbmNpZXMoKSkgeworCQlwcmlu dGYoIk1hY2hpbmUgZG9lc24ndCBzdXBwb3J0IFBDOCsgcmVzaWRlbmNpZXMuXG4iKTsKKwkJcmV0 dXJuIGZhbHNlOworCX0KKworCS8qIE1ha2Ugc3VyZSBQQzgrIHJlc2lkZW5jaWVzIG1vdmUhICov CisJZGlzYWJsZV9hbGxfc2NyZWVucygmbXNfZGF0YSk7CisJaWYgKCFwYzhfcGx1c19lbmFibGVk KCkpIHsKKwkJcHJpbnRmKCJNYWNoaW5lIGlzIG5vdCByZWFjaGluZyBQQzgrIHN0YXRlcywgcGxl YXNlIGNoZWNrIGl0cyAiCisJCSAgICAgICAiY29uZmlndXJhdGlvbi5cbiIpOworCQlyZXR1cm4g ZmFsc2U7CisJfQorCisJLyogTWFrZSBzdXJlIFBDOCsgcmVzaWRlbmNpZXMgc3RvcCEgKi8KKwll bmFibGVfb25lX3NjcmVlbigmbXNfZGF0YSk7CisJaWYgKCFwYzhfcGx1c19kaXNhYmxlZCgpKSB7 CisJCXByaW50ZigiUEM4KyByZXNpZGVuY3kgZGlkbid0IHN0b3Agd2l0aCBzY3JlZW4gZW5hYmxl ZC5cbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRp YyB2b2lkIHRlYXJkb3duX2Vudmlyb25tZW50KHZvaWQpCit7CisJZmluaV9tb2RlX3NldF9kYXRh KCZtc19kYXRhKTsKKwlkcm1DbG9zZShkcm1fZmQpOworCWNsb3NlKG1zcl9mZCk7Cit9CisKKy8q IFRlc3Qgb2YgdGhlIERSTSByZXNvdXJjZXMgcmVwb3J0ZWQgYnkgdGhlIElPQ1RMcyBhcmUgc3Rp bGwgdGhlIHNhbWUuIFRoaXMKKyAqIGVuc3VyZXMgd2Ugc3RpbGwgc2VlIHRoZSBtb25pdG9ycyB3 aXRoIHRoZSBzYW1lIGV5ZXMuIFdlIGdldCB0aGUgRURJRHMgYW5kCisgKiBjb21wYXJlIHRoZW0s IHdoaWNoIGVuc3VyZXMgd2UgdXNlIERQIEFVWCBvciBHTUJVUyBkZXBlbmRpbmcgb24gd2hhdCdz CisgKiBjb25uZWN0ZWQuICovCitzdGF0aWMgdm9pZCBkcm1fcmVzb3VyY2VzX2VxdWFsX3N1YnRl c3Qodm9pZCkKK3sKKwlzdHJ1Y3QgY29tcGFyZV9kYXRhIHByZV9wYzgsIGR1cmluZ19wYzgsIHBv c3RfcGM4OworCisJcHJpbnRmKCJDaGVja2luZyB0aGUgaWYgdGhlIERSTSByZXNvdXJjZXMgbWF0 Y2guXG4iKTsKKworCWVuYWJsZV9vbmVfc2NyZWVuKCZtc19kYXRhKTsKKwlpZ3RfYXNzZXJ0KHBj OF9wbHVzX2Rpc2FibGVkKCkpOworCWdldF9kcm1faW5mbygmcHJlX3BjOCk7CisJaWd0X2Fzc2Vy dChwYzhfcGx1c19kaXNhYmxlZCgpKTsKKworCWRpc2FibGVfYWxsX3NjcmVlbnMoJm1zX2RhdGEp OworCWlndF9hc3NlcnQocGM4X3BsdXNfZW5hYmxlZCgpKTsKKwlnZXRfZHJtX2luZm8oJmR1cmlu Z19wYzgpOworCWlndF9hc3NlcnQocGM4X3BsdXNfZW5hYmxlZCgpKTsKKworCWVuYWJsZV9vbmVf c2NyZWVuKCZtc19kYXRhKTsKKwlpZ3RfYXNzZXJ0KHBjOF9wbHVzX2Rpc2FibGVkKCkpOworCWdl dF9kcm1faW5mbygmcG9zdF9wYzgpOworCWlndF9hc3NlcnQocGM4X3BsdXNfZGlzYWJsZWQoKSk7 CisKKwlhc3NlcnRfZHJtX2luZm9zX2VxdWFsKCZwcmVfcGM4LCAmZHVyaW5nX3BjOCk7CisJYXNz ZXJ0X2RybV9pbmZvc19lcXVhbCgmcHJlX3BjOCwgJnBvc3RfcGM4KTsKKworCWZyZWVfZHJtX2lu Zm8oJnByZV9wYzgpOworCWZyZWVfZHJtX2luZm8oJmR1cmluZ19wYzgpOworCWZyZWVfZHJtX2lu Zm8oJnBvc3RfcGM4KTsKK30KKworLyogTWFrZSBzdXJlIGludGVycnVwdHMgYXJlIHdvcmtpbmcu ICovCitzdGF0aWMgdm9pZCBiYXRjaF9zdWJ0ZXN0KHZvaWQpCit7CisJcHJpbnRmKCJUZXN0aW5n IGJhdGNoYnVmZmVycy5cbiIpOworCisJZW5hYmxlX29uZV9zY3JlZW4oJm1zX2RhdGEpOworCWln dF9hc3NlcnQocGM4X3BsdXNfZGlzYWJsZWQoKSk7CisKKwlkaXNhYmxlX2FsbF9zY3JlZW5zKCZt c19kYXRhKTsKKwlpZ3RfYXNzZXJ0KHBjOF9wbHVzX2VuYWJsZWQoKSk7CisJdGVzdF9iYXRjaCgm bXNfZGF0YSk7CisJaWd0X2Fzc2VydChwYzhfcGx1c19lbmFibGVkKCkpOworfQorCisvKiBUcnkg dG8gdXNlIHJhdyBJMkMsIHdoaWNoIGFsc28gbmVlZHMgaW50ZXJydXB0cy4gKi8KK3N0YXRpYyB2 b2lkIGkyY19zdWJ0ZXN0KHZvaWQpCit7CisJcHJpbnRmKCJUZXN0aW5nIHJhdyBpMmMgcHJvdG9j b2wgY2FsbHMuXG4iKTsKKworCWVuYWJsZV9vbmVfc2NyZWVuKCZtc19kYXRhKTsKKwlpZ3RfYXNz ZXJ0KHBjOF9wbHVzX2Rpc2FibGVkKCkpOworCisJZGlzYWJsZV9hbGxfc2NyZWVucygmbXNfZGF0 YSk7CisJaWd0X2Fzc2VydChwYzhfcGx1c19lbmFibGVkKCkpOworCWlndF9hc3NlcnQodGVzdF9p MmMoJm1zX2RhdGEpKTsKKwlpZ3RfYXNzZXJ0KHBjOF9wbHVzX2VuYWJsZWQoKSk7CisKKwllbmFi bGVfb25lX3NjcmVlbigmbXNfZGF0YSk7Cit9CisKKy8qIE1ha2UgdXMgZW50ZXIvbGVhdmUgUEM4 KyBtYW55IHRpbWVzLiAqLworc3RhdGljIHZvaWQgc3RyZXNzX3Rlc3Qodm9pZCkKK3sKKwlpbnQg aTsKKworCXByaW50ZigiU3RyZXNzIHRlc3RpbmcuXG4iKTsKKworCWZvciAoaSA9IDA7IGkgPCAx MDA7IGkrKykgeworCQlkaXNhYmxlX2FsbF9zY3JlZW5zKCZtc19kYXRhKTsKKwkJaWd0X2Fzc2Vy dChwYzhfcGx1c19lbmFibGVkKCkpOworCQl0ZXN0X2JhdGNoKCZtc19kYXRhKTsKKwkJaWd0X2Fz c2VydChwYzhfcGx1c19lbmFibGVkKCkpOworCX0KK30KKworLyogSnVzdCByZWFkaW5nL3dyaXRp bmcgcmVnaXN0ZXJzIGZyb20gb3V0c2lkZSB0aGUgS2VybmVsIGlzIG5vdCByZWFsbHkgYSBzYWZl CisgKiB0aGluZyB0byBkbyBvbiBIYXN3ZWxsLCBzbyBkb24ndCBkbyB0aGlzIHRlc3Qgb24gdGhl IGRlZmF1bHQgY2FzZS4gKi8KK3N0YXRpYyB2b2lkIHJlZ2lzdGVyX2NvbXBhcmVfc3VidGVzdCh2 b2lkKQoreworCXN0cnVjdCBjb21wYXJlX3JlZ2lzdGVycyBwcmVfcGM4LCBwb3N0X3BjODsKKwor CXByaW50ZigiVGVzdGluZyByZWdpc3RlciBjb21wYXJlLlxuIik7CisKKwllbmFibGVfb25lX3Nj cmVlbigmbXNfZGF0YSk7CisJaWd0X2Fzc2VydChwYzhfcGx1c19kaXNhYmxlZCgpKTsKKwlnZXRf cmVnaXN0ZXJzKCZwcmVfcGM4KTsKKwlpZ3RfYXNzZXJ0KHBjOF9wbHVzX2Rpc2FibGVkKCkpOwor CisJZGlzYWJsZV9hbGxfc2NyZWVucygmbXNfZGF0YSk7CisJaWd0X2Fzc2VydChwYzhfcGx1c19l bmFibGVkKCkpOworCWVuYWJsZV9vbmVfc2NyZWVuKCZtc19kYXRhKTsKKwlpZ3RfYXNzZXJ0KHBj OF9wbHVzX2Rpc2FibGVkKCkpOworCS8qIFdhaXQgZm9yIHRoZSByZWdpc3RlcnMgdG8gYmUgcmVz dG9yZWQuICovCisJc2xlZXAoMSk7CisJZ2V0X3JlZ2lzdGVycygmcG9zdF9wYzgpOworCWlndF9h c3NlcnQocGM4X3BsdXNfZGlzYWJsZWQoKSk7CisKKwljb21wYXJlX3JlZ2lzdGVycygmcHJlX3Bj OCwgJnBvc3RfcGM4KTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sK Kwlib29sIGRvX3JlZ2lzdGVyX2NvbXBhcmUgPSBmYWxzZTsKKworCWlmIChhcmdjID4gMSAmJiBz dHJjbXAoYXJndlsxXSwgIi0tZG8tcmVnaXN0ZXItY29tcGFyZSIpID09IDApCisJCWRvX3JlZ2lz dGVyX2NvbXBhcmUgPSB0cnVlOworCisJaWd0X3N1YnRlc3RfaW5pdChhcmdjLCBhcmd2KTsKKwor CS8qIFNraXAgaW5zdGVhZCBvZiBmYWlsaW5nIGluIGNhc2UgdGhlIG1hY2hpbmUgaXMgbm90IHBy ZXBhcmVkIHRvIHJlYWNoCisJICogUEM4Ky4gV2UgZG9uJ3Qgd2FudCBidWcgcmVwb3J0cyBmcm9t IGNhc2VzIHdoZXJlIHRoZSBtYWNoaW5lIGlzIGp1c3QKKwkgKiBub3QgcHJvcGVybHkgY29uZmln dXJlZC4gKi8KKwlwcmludGYoIkNoZWNraW5nIGlmIHRoZSBlbnZpcm9ubWVudCBpcyBwcm9wZXJs eSBjb25maWd1cmVkLlxuIik7CisJaWYgKCFzZXR1cF9lbnZpcm9ubWVudCgpKQorCQlyZXR1cm4g Nzc7CisKKwlpZ3Rfc3VidGVzdCgiZHJtLXJlc291cmNlcy1lcXVhbCIpCisJCWRybV9yZXNvdXJj ZXNfZXF1YWxfc3VidGVzdCgpOworCWlndF9zdWJ0ZXN0KCJiYXRjaCIpCisJCWJhdGNoX3N1YnRl c3QoKTsKKwlpZ3Rfc3VidGVzdCgiaTJjIikKKwkJaTJjX3N1YnRlc3QoKTsKKwlpZ3Rfc3VidGVz dCgic3RyZXNzLXRlc3QiKQorCQlzdHJlc3NfdGVzdCgpOworCWlmIChkb19yZWdpc3Rlcl9jb21w YXJlKQorCQlpZ3Rfc3VidGVzdCgicmVnaXN0ZXItY29tcGFyZSIpCisJCQlyZWdpc3Rlcl9jb21w YXJlX3N1YnRlc3QoKTsKKworCXRlYXJkb3duX2Vudmlyb25tZW50KCk7CisKKwlwcmludGYoIkRv bmUhXG4iKTsKKwlyZXR1cm4gMDsKK30KLS0gCjEuOC4xLjIKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==