From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thierry Reding Subject: [PATCH v2 libdrm 5/7] tegra: Add helper library for tests Date: Wed, 9 Apr 2014 13:40:28 +0200 Message-ID: <1397043630-13972-6-git-send-email-thierry.reding@gmail.com> References: <1397043630-13972-1-git-send-email-thierry.reding@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-bk0-f41.google.com (mail-bk0-f41.google.com [209.85.214.41]) by gabe.freedesktop.org (Postfix) with ESMTP id 8181A6EB1F for ; Wed, 9 Apr 2014 04:41:34 -0700 (PDT) Received: by mail-bk0-f41.google.com with SMTP id d7so2286249bkh.28 for ; Wed, 09 Apr 2014 04:41:33 -0700 (PDT) In-Reply-To: <1397043630-13972-1-git-send-email-thierry.reding@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org RnJvbTogVGhpZXJyeSBSZWRpbmcgPHRyZWRpbmdAbnZpZGlhLmNvbT4KClRoaXMgbGlicmFyeSBw cm92aWRlcyBoZWxwZXJzIGZvciBjb21tb24gZnVuY3Rpb25hbGl0eSBuZWVkZWQgYnkgdGVzdApw cm9ncmFtcy4KClNpZ25lZC1vZmYtYnk6IFRoaWVycnkgUmVkaW5nIDx0cmVkaW5nQG52aWRpYS5j b20+Ci0tLQpDaGFuZ2VzIGluIHYyOgotIGZpeCBhIGNvdXBsZSBvZiBtZW1vcnkgbGVha3MgYW5k IGdldCByaWQgb2Ygc29tZSB1bm5lZWRlZCBjb2RlCgogdGVzdHMvdGVncmEvTWFrZWZpbGUuYW0g ICAgICB8ICAxMCArLQogdGVzdHMvdGVncmEvZHJtLXRlc3QtdGVncmEuYyB8IDEzNyArKysrKysr KysrKysrKysrKysrKysrKysKIHRlc3RzL3RlZ3JhL2RybS10ZXN0LXRlZ3JhLmggfCAgNTUgKysr KysrKysrKwogdGVzdHMvdGVncmEvZHJtLXRlc3QuYyAgICAgICB8IDI0OCArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiB0ZXN0cy90ZWdyYS9kcm0tdGVzdC5oICAg ICAgIHwgIDcyICsrKysrKysrKysrKysKIDUgZmlsZXMgY2hhbmdlZCwgNTIxIGluc2VydGlvbnMo KyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy90ZWdyYS9kcm0tdGVz dC10ZWdyYS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMvdGVncmEvZHJtLXRlc3QtdGVncmEu aAogY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL3RlZ3JhL2RybS10ZXN0LmMKIGNyZWF0ZSBtb2Rl IDEwMDY0NCB0ZXN0cy90ZWdyYS9kcm0tdGVzdC5oCgpkaWZmIC0tZ2l0IGEvdGVzdHMvdGVncmEv TWFrZWZpbGUuYW0gYi90ZXN0cy90ZWdyYS9NYWtlZmlsZS5hbQppbmRleCA4YjQ4MWJkZTRmMTEu LmU0NjgwMjlkMTUyZSAxMDA2NDQKLS0tIGEvdGVzdHMvdGVncmEvTWFrZWZpbGUuYW0KKysrIGIv dGVzdHMvdGVncmEvTWFrZWZpbGUuYW0KQEAgLTUsOSArNSwxNyBAQCBBTV9DUFBGTEFHUyA9IFwK IAogQU1fQ0ZMQUdTID0gLVdhbGwgLVdlcnJvcgogCitub2luc3RfTFRMSUJSQVJJRVMgPSBsaWJk cm0tdGVzdC5sYQorbGliZHJtX3Rlc3RfbGFfU09VUkNFUyA9IFwKKwlkcm0tdGVzdC5jIFwKKwlk cm0tdGVzdC5oIFwKKwlkcm0tdGVzdC10ZWdyYS5jIFwKKwlkcm0tdGVzdC10ZWdyYS5oCisKIExE QUREID0gXAogCS4uLy4uL3RlZ3JhL2xpYmRybV90ZWdyYS5sYSBcCi0JLi4vLi4vbGliZHJtLmxh CisJLi4vLi4vbGliZHJtLmxhIFwKKwlsaWJkcm0tdGVzdC5sYQogCiBURVNUUyA9IFwKIAlvcGVu Y2xvc2UgXApkaWZmIC0tZ2l0IGEvdGVzdHMvdGVncmEvZHJtLXRlc3QtdGVncmEuYyBiL3Rlc3Rz L3RlZ3JhL2RybS10ZXN0LXRlZ3JhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAwLi5hZWQzNTNhZjczOWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy90ZWdyYS9kcm0t dGVzdC10ZWdyYS5jCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTQg TlZJRElBIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhp cyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3 YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBp bmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwg bW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9v ciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3 aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxs IGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICog VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5Z IEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQg VE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxM CisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBB TlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBB Q1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBP VVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisg KiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2lmZGVmIEhBVkVfQ09O RklHX0gKKyMgIGluY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDxlcnJuby5o PgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJkcm0tdGVzdC10ZWdyYS5oIgorI2lu Y2x1ZGUgInRlZ3JhLmgiCisKK2ludCBkcm1fdGVncmFfZ3IyZF9vcGVuKHN0cnVjdCBkcm1fdGVn cmFfZ3IyZCAqKmdyMmRwLCBzdHJ1Y3QgZHJtX3RlZ3JhICpkcm0pCit7CisJc3RydWN0IGRybV90 ZWdyYV9ncjJkICpncjJkOworCWludCBlcnI7CisKKwlncjJkID0gY2FsbG9jKDEsIHNpemVvZigq Z3IyZCkpOworCWlmICghZ3IyZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlncjJkLT5kcm0gPSBk cm07CisKKwllcnIgPSBkcm1fdGVncmFfY2hhbm5lbF9vcGVuKCZncjJkLT5jaGFubmVsLCBkcm0s IERSTV9URUdSQV9HUjJEKTsKKwlpZiAoZXJyIDwgMCkgeworCQlmcmVlKGdyMmQpOworCQlyZXR1 cm4gZXJyOworCX0KKworCSpncjJkcCA9IGdyMmQ7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGRy bV90ZWdyYV9ncjJkX2Nsb3NlKHN0cnVjdCBkcm1fdGVncmFfZ3IyZCAqZ3IyZCkKK3sKKwlpZiAo IWdyMmQpCisJCXJldHVybiAtRUlOVkFMOworCisJZHJtX3RlZ3JhX2NoYW5uZWxfY2xvc2UoZ3Iy ZC0+Y2hhbm5lbCk7CisJZnJlZShncjJkKTsKKworCXJldHVybiAwOworfQorCitpbnQgZHJtX3Rl Z3JhX2dyMmRfZmlsbChzdHJ1Y3QgZHJtX3RlZ3JhX2dyMmQgKmdyMmQsIHN0cnVjdCBkcm1fZnJh bWVidWZmZXIgKmZiLAorCQkJdW5zaWduZWQgaW50IHgsIHVuc2lnbmVkIGludCB5LCB1bnNpZ25l ZCBpbnQgd2lkdGgsCisJCQl1bnNpZ25lZCBpbnQgaGVpZ2h0LCB1aW50MzJfdCBjb2xvcikKK3sK KwlzdHJ1Y3QgZHJtX3RlZ3JhX2JvICpmYm8gPSBmYi0+ZGF0YTsKKwlzdHJ1Y3QgZHJtX3RlZ3Jh X3B1c2hidWYgKnB1c2hidWY7CisJc3RydWN0IGRybV90ZWdyYV9mZW5jZSAqZmVuY2U7CisJc3Ry dWN0IGRybV90ZWdyYV9qb2IgKmpvYjsKKwlpbnQgZXJyOworCisJZXJyID0gZHJtX3RlZ3JhX2pv Yl9uZXcoJmpvYiwgZ3IyZC0+Y2hhbm5lbCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7 CisKKwllcnIgPSBkcm1fdGVncmFfcHVzaGJ1Zl9uZXcoJnB1c2hidWYsIGpvYik7CisJaWYgKGVy ciA8IDApCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBkcm1fdGVncmFfcHVzaGJ1Zl9wcmVwYXJl KHB1c2hidWYsIDMyKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCSpwdXNoYnVm LT5wdHIrKyA9IEhPU1QxWF9PUENPREVfU0VUQ0woMCwgSE9TVDFYX0NMQVNTX0dSMkQsIDApOwor CisJKnB1c2hidWYtPnB0cisrID0gSE9TVDFYX09QQ09ERV9NQVNLKDB4OSwgMHg5KTsKKwkqcHVz aGJ1Zi0+cHRyKysgPSAweDAwMDAwMDNhOworCSpwdXNoYnVmLT5wdHIrKyA9IDB4MDAwMDAwMDA7 CisKKwkqcHVzaGJ1Zi0+cHRyKysgPSBIT1NUMVhfT1BDT0RFX01BU0soMHgxZSwgMHg3KTsKKwkq cHVzaGJ1Zi0+cHRyKysgPSAweDAwMDAwMDAwOworCSpwdXNoYnVmLT5wdHIrKyA9ICgyIDw8IDE2 KSB8ICgxIDw8IDYpIHwgKDEgPDwgMik7CisJKnB1c2hidWYtPnB0cisrID0gMHgwMDAwMDBjYzsK KworCSpwdXNoYnVmLT5wdHIrKyA9IEhPU1QxWF9PUENPREVfTUFTSygweDJiLCAweDkpOworCisJ LyogcmVsb2NhdGUgZGVzdGluYXRpb24gYnVmZmVyICovCisJZXJyID0gZHJtX3RlZ3JhX3B1c2hi dWZfcmVsb2NhdGUocHVzaGJ1ZiwgZmJvLCAwLCAwKTsKKwlpZiAoZXJyIDwgMCkgeworCQlmcHJp bnRmKHN0ZGVyciwgImZhaWxlZCB0byByZWxvY2F0ZSBidWZmZXIgb2JqZWN0OiAlZFxuIiwgZXJy KTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkqcHVzaGJ1Zi0+cHRyKysgPSBmYi0+cGl0Y2g7CisK KwkqcHVzaGJ1Zi0+cHRyKysgPSBIT1NUMVhfT1BDT0RFX05PTklOQ1IoMHgzNSwgMSk7CisJKnB1 c2hidWYtPnB0cisrID0gY29sb3I7CisKKwkqcHVzaGJ1Zi0+cHRyKysgPSBIT1NUMVhfT1BDT0RF X05PTklOQ1IoMHg0NiwgMSk7CisJKnB1c2hidWYtPnB0cisrID0gMHgwMDAwMDAwMDsKKworCSpw dXNoYnVmLT5wdHIrKyA9IEhPU1QxWF9PUENPREVfTUFTSygweDM4LCAweDUpOworCSpwdXNoYnVm LT5wdHIrKyA9IGhlaWdodCA8PCAxNiB8IHdpZHRoOworCSpwdXNoYnVmLT5wdHIrKyA9IHkgPDwg MTYgfCB4OworCisJZXJyID0gZHJtX3RlZ3JhX2pvYl9zdWJtaXQoam9iLCAmZmVuY2UpOworCWlm IChlcnIgPCAwKSB7CisJCWZwcmludGYoc3RkZXJyLCAiZmFpbGVkIHRvIHN1Ym1pdCBqb2I6ICVk XG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IGRybV90ZWdyYV9mZW5jZV93 YWl0KGZlbmNlKTsKKwlpZiAoZXJyIDwgMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgImZhaWxlZCB0 byB3YWl0IGZvciBmZW5jZTogJWRcbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJZHJt X3RlZ3JhX2ZlbmNlX2ZyZWUoZmVuY2UpOworCWRybV90ZWdyYV9wdXNoYnVmX2ZyZWUocHVzaGJ1 Zik7CisJZHJtX3RlZ3JhX2pvYl9mcmVlKGpvYik7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdp dCBhL3Rlc3RzL3RlZ3JhL2RybS10ZXN0LXRlZ3JhLmggYi90ZXN0cy90ZWdyYS9kcm0tdGVzdC10 ZWdyYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZDFjYjZiMWVl NDQwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdGVncmEvZHJtLXRlc3QtdGVncmEuaApAQCAt MCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTQgTlZJRElBIENvcnBvcmF0aW9u CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRv IGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNz b2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFs IGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBs aW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVi bGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0 aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdh cmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNz aW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFu dGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBS T1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IK KyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug QU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hU IEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMg T1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1Qs IFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVD VElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJ TiBUSEUgU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBURUdSQV9EUk1fVEVTVF9URUdSQV9ICisj ZGVmaW5lIFRFR1JBX0RSTV9URVNUX1RFR1JBX0gKKworI2luY2x1ZGUgImRybS10ZXN0LmgiCisj aW5jbHVkZSAidGVncmEuaCIKKworI2RlZmluZSBIT1NUMVhfT1BDT0RFX1NFVENMKG9mZnNldCwg Y2xhc3NpZCwgbWFzaykgXAorICAgICgoMHgwIDw8IDI4KSB8ICgoKG9mZnNldCkgJiAweGZmZikg PDwgMTYpIHwgKCgoY2xhc3NpZCkgJiAweDNmZikgPDwgNikgfCAoKG1hc2spICYgMHgzZikpCisj ZGVmaW5lIEhPU1QxWF9PUENPREVfSU5DUihvZmZzZXQsIGNvdW50KSBcCisgICAgKCgweDEgPDwg MjgpIHwgKCgob2Zmc2V0KSAmIDB4ZmZmKSA8PCAxNikgfCAoKGNvdW50KSAmIDB4ZmZmZikpCisj ZGVmaW5lIEhPU1QxWF9PUENPREVfTk9OSU5DUihvZmZzZXQsIGNvdW50KSBcCisgICAgKCgweDIg PDwgMjgpIHwgKCgob2Zmc2V0KSAmIDB4ZmZmKSA8PCAxNikgfCAoKGNvdW50KSAmIDB4ZmZmZikp CisjZGVmaW5lIEhPU1QxWF9PUENPREVfTUFTSyhvZmZzZXQsIG1hc2spIFwKKyAgICAoKDB4MyA8 PCAyOCkgfCAoKChvZmZzZXQpICYgMHhmZmYpIDw8IDE2KSB8ICgobWFzaykgJiAweGZmZmYpKQor I2RlZmluZSBIT1NUMVhfT1BDT0RFX0lNTShvZmZzZXQsIGRhdGEpIFwKKyAgICAoKDB4NCA8PCAy OCkgfCAoKChvZmZzZXQpICYgMHhmZmYpIDw8IDE2KSB8ICgoZGF0YSkgJiAweGZmZmYpKQorI2Rl ZmluZSBIT1NUMVhfT1BDT0RFX0VYVEVORChzdWJvcCwgdmFsdWUpIFwKKyAgICAoKDB4ZSA8PCAy OCkgfCAoKChzdWJvcCkgJiAweGYpIDw8IDI0KSB8ICgodmFsdWUpICYgMHhmZmZmZmYpKQorCisj ZGVmaW5lIEhPU1QxWF9DTEFTU19HUjJEIDB4NTEKKworc3RydWN0IGRybV90ZWdyYV9ncjJkIHsK KwlzdHJ1Y3QgZHJtX3RlZ3JhICpkcm07CisJc3RydWN0IGRybV90ZWdyYV9jaGFubmVsICpjaGFu bmVsOworfTsKKworaW50IGRybV90ZWdyYV9ncjJkX29wZW4oc3RydWN0IGRybV90ZWdyYV9ncjJk ICoqZ3IyZHAsIHN0cnVjdCBkcm1fdGVncmEgKmRybSk7CitpbnQgZHJtX3RlZ3JhX2dyMmRfY2xv c2Uoc3RydWN0IGRybV90ZWdyYV9ncjJkICpncjJkKTsKK2ludCBkcm1fdGVncmFfZ3IyZF9maWxs KHN0cnVjdCBkcm1fdGVncmFfZ3IyZCAqZ3IyZCwgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIs CisJCQl1bnNpZ25lZCBpbnQgeCwgdW5zaWduZWQgaW50IHksIHVuc2lnbmVkIGludCB3aWR0aCwK KwkJCXVuc2lnbmVkIGludCBoZWlnaHQsIHVpbnQzMl90IGNvbG9yKTsKKworI2VuZGlmCmRpZmYg LS1naXQgYS90ZXN0cy90ZWdyYS9kcm0tdGVzdC5jIGIvdGVzdHMvdGVncmEvZHJtLXRlc3QuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjFmOTFkMTdmNjFiYgotLS0g L2Rldi9udWxsCisrKyBiL3Rlc3RzL3RlZ3JhL2RybS10ZXN0LmMKQEAgLTAsMCArMSwyNDggQEAK Ky8qCisgKiBDb3B5cmlnaHQgwqkgMjAxNCBOVklESUEgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJt aXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBv YnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3Vt ZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3 YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAq IHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmli dXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwg YW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNo ZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAq IFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNo YWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25z IG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT IiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwg SU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklO R0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9S IEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIg TElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhF UldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhF IFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FS RS4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyAgaW5jbHVkZSAiY29uZmlnLmgiCisj ZW5kaWYKKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRl IDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNp bmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQu aD4KKworI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorCisjaW5jbHVkZSAieGY4NmRybS5oIgorI2lu Y2x1ZGUgInhmODZkcm1Nb2RlLmgiCisjaW5jbHVkZSAiZHJtX2ZvdXJjYy5oIgorCisjaW5jbHVk ZSAiZHJtLXRlc3QuaCIKKworc3RhdGljIGludCBkcm1fc2NyZWVuX3Byb2JlX2Nvbm5lY3Rvcihz dHJ1Y3QgZHJtX3NjcmVlbiAqc2NyZWVuLAorCQkJCSAgICAgIGRybU1vZGVDb25uZWN0b3JQdHIg Y29ubmVjdG9yKQoreworCWRybU1vZGVFbmNvZGVyUHRyIGVuY29kZXI7CisJZHJtTW9kZUNydGNQ dHIgY3J0YzsKKwlkcm1Nb2RlRkJQdHIgZmI7CisKKwllbmNvZGVyID0gZHJtTW9kZUdldEVuY29k ZXIoc2NyZWVuLT5mZCwgY29ubmVjdG9yLT5lbmNvZGVyX2lkKTsKKwlpZiAoIWVuY29kZXIpCisJ CXJldHVybiAtRU5PREVWOworCisJY3J0YyA9IGRybU1vZGVHZXRDcnRjKHNjcmVlbi0+ZmQsIGVu Y29kZXItPmNydGNfaWQpOworCWlmICghY3J0YykgeworCQlkcm1Nb2RlRnJlZUVuY29kZXIoZW5j b2Rlcik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXNjcmVlbi0+b2xkX2ZiID0gY3J0Yy0+ YnVmZmVyX2lkOworCisJZmIgPSBkcm1Nb2RlR2V0RkIoc2NyZWVuLT5mZCwgY3J0Yy0+YnVmZmVy X2lkKTsKKwlpZiAoIWZiKSB7CisJCS8qIFRPRE86IGNyZWF0ZSBuZXcgZnJhbWVidWZmZXIgKi8K KwkJZHJtTW9kZUZyZWVFbmNvZGVyKGVuY29kZXIpOworCQlkcm1Nb2RlRnJlZUNydGMoY3J0Yyk7 CisJCXJldHVybiAtRU5PU1lTOworCX0KKworCXNjcmVlbi0+Y29ubmVjdG9yID0gY29ubmVjdG9y LT5jb25uZWN0b3JfaWQ7CisJc2NyZWVuLT5vbGRfZmIgPSBjcnRjLT5idWZmZXJfaWQ7CisJc2Ny ZWVuLT5jcnRjID0gZW5jb2Rlci0+Y3J0Y19pZDsKKwkvKiBUT0RPOiBjaGVjayBjcnRjLT5tb2Rl X3ZhbGlkICovCisJc2NyZWVuLT5tb2RlID0gY3J0Yy0+bW9kZTsKKworCXNjcmVlbi0+d2lkdGgg PSBmYi0+d2lkdGg7CisJc2NyZWVuLT5oZWlnaHQgPSBmYi0+aGVpZ2h0OworCXNjcmVlbi0+cGl0 Y2ggPSBmYi0+cGl0Y2g7CisJc2NyZWVuLT5kZXB0aCA9IGZiLT5kZXB0aDsKKwlzY3JlZW4tPmJw cCA9IGZiLT5icHA7CisKKwlkcm1Nb2RlRnJlZUVuY29kZXIoZW5jb2Rlcik7CisJZHJtTW9kZUZy ZWVDcnRjKGNydGMpOworCWRybU1vZGVGcmVlRkIoZmIpOworCisJcmV0dXJuIDA7Cit9CisKK2lu dCBkcm1fc2NyZWVuX29wZW4oc3RydWN0IGRybV9zY3JlZW4gKipzY3JlZW5wLCBpbnQgZmQpCit7 CisJZHJtTW9kZUNvbm5lY3RvclB0ciBjb25uZWN0b3I7CisJc3RydWN0IGRybV9zY3JlZW4gKnNj cmVlbjsKKwlib29sIGZvdW5kID0gZmFsc2U7CisJZHJtTW9kZVJlc1B0ciByZXM7CisJdW5zaWdu ZWQgaW50IGk7CisJaW50IGVycjsKKworCWlmICghc2NyZWVucCB8fCBmZCA8IDApCisJCXJldHVy biAtRUlOVkFMOworCisJc2NyZWVuID0gY2FsbG9jKDEsIHNpemVvZigqc2NyZWVuKSk7CisJaWYg KCFzY3JlZW4pCisJCXJldHVybiAtRU5PTUVNOworCisJc2NyZWVuLT5mb3JtYXQgPSBEUk1fRk9S TUFUX1hSR0I4ODg4OworCXNjcmVlbi0+ZmQgPSBmZDsKKworCXJlcyA9IGRybU1vZGVHZXRSZXNv dXJjZXMoZmQpOworCWlmICghcmVzKSB7CisJCWZyZWUoc2NyZWVuKTsKKwkJcmV0dXJuIC1FTk9N RU07CisJfQorCisJZm9yIChpID0gMDsgaSA8IHJlcy0+Y291bnRfY29ubmVjdG9yczsgaSsrKSB7 CisJCWNvbm5lY3RvciA9IGRybU1vZGVHZXRDb25uZWN0b3IoZmQsIHJlcy0+Y29ubmVjdG9yc1tp XSk7CisJCWlmICghY29ubmVjdG9yKQorCQkJY29udGludWU7CisKKwkJaWYgKGNvbm5lY3Rvci0+ Y29ubmVjdGlvbiAhPSBEUk1fTU9ERV9DT05ORUNURUQpIHsKKwkJCWRybU1vZGVGcmVlQ29ubmVj dG9yKGNvbm5lY3Rvcik7CisJCQljb250aW51ZTsKKwkJfQorCisJCWVyciA9IGRybV9zY3JlZW5f cHJvYmVfY29ubmVjdG9yKHNjcmVlbiwgY29ubmVjdG9yKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJ CWRybU1vZGVGcmVlQ29ubmVjdG9yKGNvbm5lY3Rvcik7CisJCQljb250aW51ZTsKKwkJfQorCisJ CWRybU1vZGVGcmVlQ29ubmVjdG9yKGNvbm5lY3Rvcik7CisJCWZvdW5kID0gdHJ1ZTsKKwkJYnJl YWs7CisJfQorCisJZHJtTW9kZUZyZWVSZXNvdXJjZXMocmVzKTsKKworCWlmICghZm91bmQpIHsK KwkJZnJlZShzY3JlZW4pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkqc2NyZWVucCA9IHNj cmVlbjsKKworCXJldHVybiAwOworfQorCitpbnQgZHJtX3NjcmVlbl9jbG9zZShzdHJ1Y3QgZHJt X3NjcmVlbiAqc2NyZWVuKQoreworCWludCBlcnI7CisKKwllcnIgPSBkcm1Nb2RlU2V0Q3J0Yyhz Y3JlZW4tPmZkLCBzY3JlZW4tPmNydGMsIHNjcmVlbi0+b2xkX2ZiLCAwLCAwLAorCQkJICAgICAm c2NyZWVuLT5jb25uZWN0b3IsIDEsICZzY3JlZW4tPm1vZGUpOworCWlmIChlcnIgPCAwKSB7CisJ CWZwcmludGYoc3RkZXJyLCAiZHJtTW9kZVNldENydGMoKSBmYWlsZWQ6ICVtXG4iKTsKKwkJcmV0 dXJuIC1lcnJubzsKKwl9CisKKwlmcmVlKHNjcmVlbik7CisKKwlyZXR1cm4gMDsKK30KKworaW50 IGRybV9mcmFtZWJ1ZmZlcl9uZXcoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqKmZicCwKKwkJCXN0 cnVjdCBkcm1fc2NyZWVuICpzY3JlZW4sIHVpbnQzMl90IGhhbmRsZSwKKwkJCXVuc2lnbmVkIGlu dCB3aWR0aCwgdW5zaWduZWQgaW50IGhlaWdodCwKKwkJCXVuc2lnbmVkIGludCBwaXRjaCwgdWlu dDMyX3QgZm9ybWF0LAorCQkJdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYjsKKwl1aW50MzJfdCBoYW5kbGVzWzRdOworCXVpbnQzMl90IHBpdGNoZXNbNF07CisJdWlu dDMyX3Qgb2Zmc2V0c1s0XTsKKwlpbnQgZXJyOworCisJZmIgPSBjYWxsb2MoMSwgc2l6ZW9mKCpm YikpOworCWlmICghZmIpCisJCXJldHVybiAtRU5PTUVNOworCisJZmItPmZkID0gc2NyZWVuLT5m ZDsKKwlmYi0+d2lkdGggPSB3aWR0aDsKKwlmYi0+aGVpZ2h0ID0gaGVpZ2h0OworCWZiLT5waXRj aCA9IHBpdGNoOworCWZiLT5mb3JtYXQgPSBmb3JtYXQ7CisJZmItPmRhdGEgPSBkYXRhOworCisJ aGFuZGxlc1swXSA9IGhhbmRsZTsKKwlwaXRjaGVzWzBdID0gcGl0Y2g7CisJb2Zmc2V0c1swXSA9 IDA7CisKKwllcnIgPSBkcm1Nb2RlQWRkRkIyKHNjcmVlbi0+ZmQsIHdpZHRoLCBoZWlnaHQsIGZv cm1hdCwgaGFuZGxlcywKKwkJCSAgICBwaXRjaGVzLCBvZmZzZXRzLCAmZmItPmhhbmRsZSwgMCk7 CisJaWYgKGVyciA8IDApCisJCXJldHVybiAtZXJybm87CisKKwkqZmJwID0gZmI7CisKKwlyZXR1 cm4gMDsKK30KKworaW50IGRybV9mcmFtZWJ1ZmZlcl9mcmVlKHN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiKQoreworCWludCBlcnI7CisKKwllcnIgPSBkcm1Nb2RlUm1GQihmYi0+ZmQsIGZiLT5o YW5kbGUpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gLWVycm5vOworCisJZnJlZShmYik7CisK KwlyZXR1cm4gMDsKK30KKworaW50IGRybV9zY3JlZW5fc2V0X2ZyYW1lYnVmZmVyKHN0cnVjdCBk cm1fc2NyZWVuICpzY3JlZW4sCisJCQkgICAgICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIp Cit7CisJaW50IGVycjsKKworCWVyciA9IGRybU1vZGVTZXRDcnRjKHNjcmVlbi0+ZmQsIHNjcmVl bi0+Y3J0YywgZmItPmhhbmRsZSwgMCwgMCwKKwkJCSAgICAgJnNjcmVlbi0+Y29ubmVjdG9yLCAx LCAmc2NyZWVuLT5tb2RlKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIC1lcnJubzsKKworCXJl dHVybiAwOworfQorCitpbnQgZHJtX29wZW4oY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpbnQgZmQs IGVycjsKKworCWZkID0gb3BlbihwYXRoLCBPX1JEV1IpOworCWlmIChmZCA8IDApCisJCXJldHVy biAtZXJybm87CisKKwllcnIgPSBkcm1TZXRNYXN0ZXIoZmQpOworCWlmIChlcnIgPCAwKSB7CisJ CWNsb3NlKGZkKTsKKwkJcmV0dXJuIC1lcnJubzsKKwl9CisKKwlyZXR1cm4gZmQ7Cit9CisKK3Zv aWQgZHJtX2Nsb3NlKGludCBmZCkKK3sKKwlkcm1Ecm9wTWFzdGVyKGZkKTsKKwljbG9zZShmZCk7 Cit9CmRpZmYgLS1naXQgYS90ZXN0cy90ZWdyYS9kcm0tdGVzdC5oIGIvdGVzdHMvdGVncmEvZHJt LXRlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjBmM2QxZWMy NmUyYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3RlZ3JhL2RybS10ZXN0LmgKQEAgLTAsMCAr MSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE0IE5WSURJQSBDb3Jwb3JhdGlvbgorICoK KyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkg cGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0 ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0 aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRh dGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gs IGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNv ZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlz IGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6 CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBu b3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwg cG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURF RCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJ TVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBO T05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xE RVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisg KiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JU IE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04g V0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhF IFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgVEVHUkFfRFJNX1RFU1RfSAorI2RlZmluZSBURUdS QV9EUk1fVEVTVF9ICisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4K KworI2luY2x1ZGUgInhmODZkcm1Nb2RlLmgiCisKK3N0cnVjdCBkcm1fc2NyZWVuIHsKKwlpbnQg ZmQ7CisKKwl1bnNpZ25lZCBpbnQgd2lkdGg7CisJdW5zaWduZWQgaW50IGhlaWdodDsKKwl1bnNp Z25lZCBpbnQgcGl0Y2g7CisJdW5zaWduZWQgaW50IGRlcHRoOworCXVuc2lnbmVkIGludCBicHA7 CisKKwlkcm1Nb2RlTW9kZUluZm8gbW9kZTsKKwl1aW50MzJfdCBjb25uZWN0b3I7CisJdWludDMy X3Qgb2xkX2ZiOworCXVpbnQzMl90IGZvcm1hdDsKKwl1aW50MzJfdCBjcnRjOworfTsKKworc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciB7CisJdW5zaWduZWQgaW50IHdpZHRoOworCXVuc2lnbmVkIGlu dCBoZWlnaHQ7CisJdW5zaWduZWQgaW50IHBpdGNoOworCXVpbnQzMl90IGZvcm1hdDsKKwl1aW50 MzJfdCBoYW5kbGU7CisJdm9pZCAqZGF0YTsKKwlpbnQgZmQ7Cit9OworCitpbnQgZHJtX3NjcmVl bl9vcGVuKHN0cnVjdCBkcm1fc2NyZWVuICoqc2NyZWVucCwgaW50IGZkKTsKK2ludCBkcm1fc2Ny ZWVuX2Nsb3NlKHN0cnVjdCBkcm1fc2NyZWVuICpzY3JlZW4pOworaW50IGRybV9zY3JlZW5fc2V0 X2ZyYW1lYnVmZmVyKHN0cnVjdCBkcm1fc2NyZWVuICpzY3JlZW4sCisJCQkgICAgICAgc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqZmIpOworCitpbnQgZHJtX2ZyYW1lYnVmZmVyX25ldyhzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICoqZmJwLAorCQkJc3RydWN0IGRybV9zY3JlZW4gKnNjcmVlbiwgdWlu dDMyX3QgaGFuZGxlLAorCQkJdW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0 LAorCQkJdW5zaWduZWQgaW50IHBpdGNoLCB1aW50MzJfdCBmb3JtYXQsCisJCQl2b2lkICpkYXRh KTsKK2ludCBkcm1fZnJhbWVidWZmZXJfZnJlZShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYik7 CisKK2ludCBkcm1fb3Blbihjb25zdCBjaGFyICpwYXRoKTsKK3ZvaWQgZHJtX2Nsb3NlKGludCBm ZCk7CisKKyNlbmRpZgotLSAKMS45LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vZHJpLWRldmVsCg==