From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH v2 24/38] drm/i915: Add some mock tests for dmabuf interop Date: Thu, 19 Jan 2017 11:41:44 +0000 Message-ID: <20170119114158.17941-25-chris@chris-wilson.co.uk> References: <20170119114158.17941-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x242.google.com (mail-wm0-x242.google.com [IPv6:2a00:1450:400c:c09::242]) by gabe.freedesktop.org (Postfix) with ESMTPS id 66BD86EA07 for ; Thu, 19 Jan 2017 11:42:30 +0000 (UTC) Received: by mail-wm0-x242.google.com with SMTP id r126so11372608wmr.3 for ; Thu, 19 Jan 2017 03:42:30 -0800 (PST) In-Reply-To: <20170119114158.17941-1-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Q2hlY2sgdGhhdCB3ZSBjYW4gY3JlYXRlIGJvdGggZG1hYnVmIGFuZCBvYmplY3RzIGZyb20gZG1h YnVmLgoKdjI6IENsZWFudXBzLCBjb3JyZWN0IGluY2x1ZGUsIGZpeCB1bnBpbiBvbiBkZWFkIHBh dGggYW5kIHByZXZlbnQKZXhwbG9zaW9uIG9uIGRtYWJ1ZiBpbml0IGZhaWx1cmUKClNpZ25lZC1v ZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgpSZXZpZXdlZC1i eTogTWF0dGhldyBBdWxkIDxtYXR0aGV3LmF1bGRAaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ2VtX2RtYWJ1Zi5jICAgICAgICAgICAgIHwgICA1ICsKIGRyaXZlcnMv Z3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9kbWFidWYuYyAgIHwgMjk4ICsrKysrKysr KysrKysrKysrKysrKwogLi4uL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9tb2NrX3NlbGZ0 ZXN0cy5oICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL21vY2tfZG1h YnVmLmMgICAgICAgfCAxNzYgKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxm dGVzdHMvbW9ja19kbWFidWYuaCAgICAgICB8ICA0MSArKysKIDUgZmlsZXMgY2hhbmdlZCwgNTIx IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9z ZWxmdGVzdHMvaTkxNV9nZW1fZG1hYnVmLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vaTkxNS9zZWxmdGVzdHMvbW9ja19kbWFidWYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX2RtYWJ1Zi5oCgpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZG1hYnVmLmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbV9kbWFidWYuYwppbmRleCBkMDM3YWRjZGE2ZjIuLjNlMjc2ZWVlMDQ1MCAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZG1hYnVmLmMKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZG1hYnVmLmMKQEAgLTMwNywzICszMDcsOCBA QCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmk5MTVfZ2VtX3ByaW1lX2ltcG9ydChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LAogCiAJcmV0dXJuIEVSUl9QVFIocmV0KTsKIH0KKworI2lmIElTX0VOQUJM RUQoQ09ORklHX0RSTV9JOTE1X1NFTEZURVNUKQorI2luY2x1ZGUgInNlbGZ0ZXN0cy9tb2NrX2Rt YWJ1Zi5jIgorI2luY2x1ZGUgInNlbGZ0ZXN0cy9pOTE1X2dlbV9kbWFidWYuYyIKKyNlbmRpZgpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX2RtYWJ1 Zi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX2RtYWJ1Zi5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMmY2MTI3NDMxMGRhCi0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX2Rt YWJ1Zi5jCkBAIC0wLDAgKzEsMjk4IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTYgSW50ZWwg Q29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9m IGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3 YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwK KyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGlu ZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnks IG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwg Y29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhl CisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxv d2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0 aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkg c2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBv ZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMg SVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVE LCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZS SU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hU IEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJX SVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBT T0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUu CisgKgorICovCisKKyNpbmNsdWRlICJpOTE1X3NlbGZ0ZXN0LmgiCisKKyNpbmNsdWRlICJtb2Nr X2dlbV9kZXZpY2UuaCIKKyNpbmNsdWRlICJtb2NrX2RtYWJ1Zi5oIgorCitzdGF0aWMgaW50IGln dF9kbWFidWZfZXhwb3J0KHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNSA9IGFyZzsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBk bWFfYnVmICpkbWFidWY7CisJaW50IGVycjsKKworCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVh dGUoaTkxNSwgUEFHRV9TSVpFKTsKKwlpZiAoSVNfRVJSKG9iaikpCisJCXJldHVybiBQVFJfRVJS KG9iaik7CisKKwlkbWFidWYgPSBpOTE1X2dlbV9wcmltZV9leHBvcnQoJmk5MTUtPmRybSwgJm9i ai0+YmFzZSwgMCk7CisJaWYgKElTX0VSUihkbWFidWYpKSB7CisJCXByX2VycigiaTkxNV9nZW1f cHJpbWVfZXhwb3J0IGZhaWxlZCB3aXRoIGVycj0lZFxuIiwKKwkJICAgICAgIChpbnQpUFRSX0VS UihkbWFidWYpKTsKKwkJZXJyID0gUFRSX0VSUihkbWFidWYpOworCQlnb3RvIGVycjsKKwl9CisK KwllcnIgPSAwOworCWRtYV9idWZfcHV0KGRtYWJ1Zik7CitlcnI6CisJaTkxNV9nZW1fb2JqZWN0 X3B1dChvYmopOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgaWd0X2RtYWJ1Zl9pbXBv cnRfc2VsZih2b2lkICphcmcpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBh cmc7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgZHJtX2dlbV9v YmplY3QgKmltcG9ydDsKKwlzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmOworCWludCBlcnI7CisKKwlv YmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlKGk5MTUsIFBBR0VfU0laRSk7CisJaWYgKElTX0VS UihvYmopKQorCQlyZXR1cm4gUFRSX0VSUihvYmopOworCisJZG1hYnVmID0gaTkxNV9nZW1fcHJp bWVfZXhwb3J0KCZpOTE1LT5kcm0sICZvYmotPmJhc2UsIDApOworCWlmIChJU19FUlIoZG1hYnVm KSkgeworCQlwcl9lcnIoImk5MTVfZ2VtX3ByaW1lX2V4cG9ydCBmYWlsZWQgd2l0aCBlcnI9JWRc biIsCisJCSAgICAgICAoaW50KVBUUl9FUlIoZG1hYnVmKSk7CisJCWVyciA9IFBUUl9FUlIoZG1h YnVmKTsKKwkJZ290byBlcnI7CisJfQorCisJaW1wb3J0ID0gaTkxNV9nZW1fcHJpbWVfaW1wb3J0 KCZpOTE1LT5kcm0sIGRtYWJ1Zik7CisJaWYgKElTX0VSUihpbXBvcnQpKSB7CisJCXByX2Vycigi aTkxNV9nZW1fcHJpbWVfaW1wb3J0IGZhaWxlZCB3aXRoIGVycj0lZFxuIiwKKwkJICAgICAgIChp bnQpUFRSX0VSUihpbXBvcnQpKTsKKwkJZXJyID0gUFRSX0VSUihpbXBvcnQpOworCQlnb3RvIGVy cl9kbWFidWY7CisJfQorCisJaWYgKGltcG9ydCAhPSAmb2JqLT5iYXNlKSB7CisJCXByX2Vycigi aTkxNV9nZW1fcHJpbWVfaW1wb3J0IGNyZWF0ZWQgYSBuZXcgb2JqZWN0IVxuIik7CisJCWVyciA9 IC1FSU5WQUw7CisJCWdvdG8gZXJyX2ltcG9ydDsKKwl9CisKKwllcnIgPSAwOworZXJyX2ltcG9y dDoKKwlpOTE1X2dlbV9vYmplY3RfcHV0KHRvX2ludGVsX2JvKGltcG9ydCkpOworZXJyX2RtYWJ1 ZjoKKwlkbWFfYnVmX3B1dChkbWFidWYpOworZXJyOgorCWk5MTVfZ2VtX29iamVjdF9wdXQob2Jq KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGlndF9kbWFidWZfaW1wb3J0KHZvaWQg KmFyZykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGFyZzsKKwlzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBkbWFfYnVmICpkbWFidWY7CisJdm9p ZCAqb2JqX21hcCwgKmRtYV9tYXA7CisJdTMyIHBhdHRlcm5bXSA9IHsgMCwgMHhhYSwgMHhjYywg MHg1NSwgMHhmZiB9OworCWludCBlcnIsIGk7CisKKwlkbWFidWYgPSBtb2NrX2RtYWJ1ZigxKTsK KwlpZiAoSVNfRVJSKGRtYWJ1ZikpCisJCXJldHVybiBQVFJfRVJSKGRtYWJ1Zik7CisKKwlvYmog PSB0b19pbnRlbF9ibyhpOTE1X2dlbV9wcmltZV9pbXBvcnQoJmk5MTUtPmRybSwgZG1hYnVmKSk7 CisJaWYgKElTX0VSUihvYmopKSB7CisJCXByX2VycigiaTkxNV9nZW1fcHJpbWVfaW1wb3J0IGZh aWxlZCB3aXRoIGVycj0lZFxuIiwKKwkJICAgICAgIChpbnQpUFRSX0VSUihvYmopKTsKKwkJZXJy ID0gUFRSX0VSUihvYmopOworCQlnb3RvIGVycl9kbWFidWY7CisJfQorCisJaWYgKG9iai0+YmFz ZS5kZXYgIT0gJmk5MTUtPmRybSkgeworCQlwcl9lcnIoImk5MTVfZ2VtX3ByaW1lX2ltcG9ydCBj cmVhdGVkIGEgbm9uLWk5MTUgb2JqZWN0IVxuIik7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8g ZXJyX29iajsKKwl9CisKKwlpZiAob2JqLT5iYXNlLnNpemUgIT0gUEFHRV9TSVpFKSB7CisJCXBy X2VycigiaTkxNV9nZW1fcHJpbWVfaW1wb3J0IGlzIHdyb25nIHNpemUgZm91bmQgJWxsZCwgZXhw ZWN0ZWQgJWxkXG4iLAorCQkgICAgICAgKGxvbmcgbG9uZylvYmotPmJhc2Uuc2l6ZSwgUEFHRV9T SVpFKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBlcnJfb2JqOworCX0KKworCWRtYV9tYXAg PSBkbWFfYnVmX3ZtYXAoZG1hYnVmKTsKKwlpZiAoIWRtYV9tYXApIHsKKwkJcHJfZXJyKCJkbWFf YnVmX3ZtYXAgZmFpbGVkXG4iKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfb2JqOwor CX0KKworCWlmICgwKSB7IC8qIENhbiBub3QgeWV0IG1hcCBkbWFidWYgKi8KKwkJb2JqX21hcCA9 IGk5MTVfZ2VtX29iamVjdF9waW5fbWFwKG9iaiwgSTkxNV9NQVBfV0IpOworCQlpZiAoSVNfRVJS KG9ial9tYXApKSB7CisJCQllcnIgPSBQVFJfRVJSKG9ial9tYXApOworCQkJcHJfZXJyKCJpOTE1 X2dlbV9vYmplY3RfcGluX21hcCBmYWlsZWQgd2l0aCBlcnI9JWRcbiIsIGVycik7CisJCQlnb3Rv IGVycl9kbWFfbWFwOworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGF0dGVy bik7IGkrKykgeworCQkJbWVtc2V0KGRtYV9tYXAsIHBhdHRlcm5baV0sIFBBR0VfU0laRSk7CisJ CQlpZiAobWVtY2hyX2ludihvYmpfbWFwLCBwYXR0ZXJuW2ldLCBQQUdFX1NJWkUpKSB7CisJCQkJ ZXJyID0gLUVJTlZBTDsKKwkJCQlwcl9lcnIoImltcG9ydGVkIHZtYXAgbm90IGFsbCBzZXQgdG8g JXghXG4iLCBwYXR0ZXJuW2ldKTsKKwkJCQlpOTE1X2dlbV9vYmplY3RfdW5waW5fbWFwKG9iaik7 CisJCQkJZ290byBlcnJfZG1hX21hcDsKKwkJCX0KKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBB UlJBWV9TSVpFKHBhdHRlcm4pOyBpKyspIHsKKwkJCW1lbXNldChvYmpfbWFwLCBwYXR0ZXJuW2ld LCBQQUdFX1NJWkUpOworCQkJaWYgKG1lbWNocl9pbnYoZG1hX21hcCwgcGF0dGVybltpXSwgUEFH RV9TSVpFKSkgeworCQkJCWVyciA9IC1FSU5WQUw7CisJCQkJcHJfZXJyKCJleHBvcnRlZCB2bWFw IG5vdCBhbGwgc2V0IHRvICV4IVxuIiwgcGF0dGVybltpXSk7CisJCQkJaTkxNV9nZW1fb2JqZWN0 X3VucGluX21hcChvYmopOworCQkJCWdvdG8gZXJyX2RtYV9tYXA7CisJCQl9CisJCX0KKworCQlp OTE1X2dlbV9vYmplY3RfdW5waW5fbWFwKG9iaik7CisJfQorCisJZXJyID0gMDsKK2Vycl9kbWFf bWFwOgorCWRtYV9idWZfdnVubWFwKGRtYWJ1ZiwgZG1hX21hcCk7CitlcnJfb2JqOgorCWk5MTVf Z2VtX29iamVjdF9wdXQob2JqKTsKK2Vycl9kbWFidWY6CisJZG1hX2J1Zl9wdXQoZG1hYnVmKTsK KwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGlndF9kbWFidWZfaW1wb3J0X293bmVyc2hp cCh2b2lkICphcmcpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBhcmc7CisJ c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVm OworCXZvaWQgKnB0cjsKKwlpbnQgZXJyOworCisJZG1hYnVmID0gbW9ja19kbWFidWYoMSk7CisJ aWYgKElTX0VSUihkbWFidWYpKQorCQlyZXR1cm4gUFRSX0VSUihkbWFidWYpOworCisJcHRyID0g ZG1hX2J1Zl92bWFwKGRtYWJ1Zik7CisJaWYgKCFwdHIpIHsKKwkJcHJfZXJyKCJkbWFfYnVmX3Zt YXAgZmFpbGVkXG4iKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfZG1hYnVmOworCX0K KworCW1lbXNldChwdHIsIDB4YzUsIFBBR0VfU0laRSk7CisJZG1hX2J1Zl92dW5tYXAoZG1hYnVm LCBwdHIpOworCisJb2JqID0gdG9faW50ZWxfYm8oaTkxNV9nZW1fcHJpbWVfaW1wb3J0KCZpOTE1 LT5kcm0sIGRtYWJ1ZikpOworCWlmIChJU19FUlIob2JqKSkgeworCQlwcl9lcnIoImk5MTVfZ2Vt X3ByaW1lX2ltcG9ydCBmYWlsZWQgd2l0aCBlcnI9JWRcbiIsCisJCSAgICAgICAoaW50KVBUUl9F UlIob2JqKSk7CisJCWVyciA9IFBUUl9FUlIob2JqKTsKKwkJZ290byBlcnJfZG1hYnVmOworCX0K KworCWRtYV9idWZfcHV0KGRtYWJ1Zik7CisKKwllcnIgPSBpOTE1X2dlbV9vYmplY3RfcGluX3Bh Z2VzKG9iaik7CisJaWYgKGVycikgeworCQlwcl9lcnIoImk5MTVfZ2VtX29iamVjdF9waW5fcGFn ZXMgZmFpbGVkIHdpdGggZXJyPSVkXG4iLCBlcnIpOworCQlnb3RvIGVycl9vYmo7CisJfQorCisJ ZXJyID0gMDsKKwlpOTE1X2dlbV9vYmplY3RfdW5waW5fcGFnZXMob2JqKTsKK2Vycl9vYmo6CisJ aTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOworCXJldHVybiBlcnI7CisKK2Vycl9kbWFidWY6CisJ ZG1hX2J1Zl9wdXQoZG1hYnVmKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGlndF9k bWFidWZfZXhwb3J0X3ZtYXAodm9pZCAqYXJnKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1ID0gYXJnOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CisJc3RydWN0 IGRtYV9idWYgKmRtYWJ1ZjsKKwl2b2lkICpwdHI7CisJaW50IGVycjsKKworCW9iaiA9IGk5MTVf Z2VtX29iamVjdF9jcmVhdGUoaTkxNSwgUEFHRV9TSVpFKTsKKwlpZiAoSVNfRVJSKG9iaikpCisJ CXJldHVybiBQVFJfRVJSKG9iaik7CisKKwlkbWFidWYgPSBpOTE1X2dlbV9wcmltZV9leHBvcnQo Jmk5MTUtPmRybSwgJm9iai0+YmFzZSwgMCk7CisJaWYgKElTX0VSUihkbWFidWYpKSB7CisJCXBy X2VycigiaTkxNV9nZW1fcHJpbWVfZXhwb3J0IGZhaWxlZCB3aXRoIGVycj0lZFxuIiwKKwkJICAg ICAgIChpbnQpUFRSX0VSUihkbWFidWYpKTsKKwkJZXJyID0gUFRSX0VSUihkbWFidWYpOworCQln b3RvIGVycl9vYmo7CisJfQorCWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsKKworCXB0ciA9IGRt YV9idWZfdm1hcChkbWFidWYpOworCWlmIChJU19FUlIocHRyKSkgeworCQllcnIgPSBQVFJfRVJS KHB0cik7CisJCXByX2VycigiZG1hX2J1Zl92bWFwIGZhaWxlZCB3aXRoIGVycj0lZFxuIiwgZXJy KTsKKwkJZ290byBlcnI7CisJfQorCisJaWYgKG1lbWNocl9pbnYocHRyLCAwLCBkbWFidWYtPnNp emUpKSB7CisJCXByX2VycigiRXhwb3J0ZWQgb2JqZWN0IG5vdCBpbml0aWFsaWFzZWQgdG8gemVy byFcbiIpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGVycjsKKwl9CisKKwltZW1zZXQocHRy LCAweGM1LCBkbWFidWYtPnNpemUpOworCisJZXJyID0gMDsKKwlkbWFfYnVmX3Z1bm1hcChkbWFi dWYsIHB0cik7CitlcnI6CisJZG1hX2J1Zl9wdXQoZG1hYnVmKTsKKwlyZXR1cm4gZXJyOworCitl cnJfb2JqOgorCWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsKKwlyZXR1cm4gZXJyOworfQorCitp bnQgaTkxNV9nZW1fZG1hYnVmX21vY2tfc2VsZnRlc3RzKHZvaWQpCit7CisJc3RhdGljIGNvbnN0 IHN0cnVjdCBpOTE1X3N1YnRlc3QgdGVzdHNbXSA9IHsKKwkJU1VCVEVTVChpZ3RfZG1hYnVmX2V4 cG9ydCksCisJCVNVQlRFU1QoaWd0X2RtYWJ1Zl9pbXBvcnRfc2VsZiksCisJCVNVQlRFU1QoaWd0 X2RtYWJ1Zl9pbXBvcnQpLAorCQlTVUJURVNUKGlndF9kbWFidWZfaW1wb3J0X293bmVyc2hpcCks CisJCVNVQlRFU1QoaWd0X2RtYWJ1Zl9leHBvcnRfdm1hcCksCisJfTsKKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqaTkxNTsKKwlpbnQgZXJyOworCisJaTkxNSA9IG1vY2tfZ2VtX2RldmljZSgp OworCWlmICghaTkxNSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwllcnIgPSBpOTE1X3N1YnRlc3Rz KHRlc3RzLCBpOTE1KTsKKworCWRybV9kZXZfdW5yZWYoJmk5MTUtPmRybSk7CisJcmV0dXJuIGVy cjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X21v Y2tfc2VsZnRlc3RzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9tb2Nr X3NlbGZ0ZXN0cy5oCmluZGV4IGM2MWUwOGRlNzkxMy4uOTU1YTRkNmNjZGFmIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9tb2NrX3NlbGZ0ZXN0cy5oCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X21vY2tfc2VsZnRlc3RzLmgK QEAgLTE0LDMgKzE0LDQgQEAgc2VsZnRlc3QodW5jb3JlLCBpbnRlbF91bmNvcmVfbW9ja19zZWxm dGVzdHMpCiBzZWxmdGVzdChicmVhZGNydW1icywgaW50ZWxfYnJlYWRjcnVtYnNfbW9ja19zZWxm dGVzdHMpCiBzZWxmdGVzdChyZXF1ZXN0cywgaTkxNV9nZW1fcmVxdWVzdF9tb2NrX3NlbGZ0ZXN0 cykKIHNlbGZ0ZXN0KG9iamVjdHMsIGk5MTVfZ2VtX29iamVjdF9tb2NrX3NlbGZ0ZXN0cykKK3Nl bGZ0ZXN0KGRtYWJ1ZiwgaTkxNV9nZW1fZG1hYnVmX21vY2tfc2VsZnRlc3RzKQpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL21vY2tfZG1hYnVmLmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbW9ja19kbWFidWYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMDAuLjk5ZGE4ZjRlZjQ5NwotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX2RtYWJ1Zi5jCkBAIC0wLDAgKzEsMTc2 IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTYgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQ ZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNv biBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRv Y3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNv ZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24K KyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0 cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2Fy ZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJu aXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoK KyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl IChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4g YWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgor ICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZ IE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBM SU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVO VCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZP UiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBB TiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9N LCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9S IE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisKKyNpbmNsdWRl ICJtb2NrX2RtYWJ1Zi5oIgorCitzdGF0aWMgc3RydWN0IHNnX3RhYmxlICptb2NrX21hcF9kbWFf YnVmKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQsCisJCQkJCSBlbnVtIGRt YV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJc3RydWN0IG1vY2tfZG1hYnVmICptb2NrID0gdG9f bW9jayhhdHRhY2htZW50LT5kbWFidWYpOworCXN0cnVjdCBzZ190YWJsZSAqc3Q7CisJc3RydWN0 IHNjYXR0ZXJsaXN0ICpzZzsKKwlpbnQgaSwgZXJyOworCisJc3QgPSBrbWFsbG9jKHNpemVvZigq c3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0KQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsK KworCWVyciA9IHNnX2FsbG9jX3RhYmxlKHN0LCBtb2NrLT5ucGFnZXMsIEdGUF9LRVJORUwpOwor CWlmIChlcnIpCisJCWdvdG8gZXJyX2ZyZWU7CisKKwlzZyA9IHN0LT5zZ2w7CisJZm9yIChpID0g MDsgaSA8IG1vY2stPm5wYWdlczsgaSsrKSB7CisJCXNnX3NldF9wYWdlKHNnLCBtb2NrLT5wYWdl c1tpXSwgUEFHRV9TSVpFLCAwKTsKKwkJc2cgPSBzZ19uZXh0KHNnKTsKKwl9CisKKwlpZiAoIWRt YV9tYXBfc2coYXR0YWNobWVudC0+ZGV2LCBzdC0+c2dsLCBzdC0+bmVudHMsIGRpcikpIHsKKwkJ ZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfc3Q7CisJfQorCisJcmV0dXJuIHN0OworCitlcnJf c3Q6CisJc2dfZnJlZV90YWJsZShzdCk7CitlcnJfZnJlZToKKwlrZnJlZShzdCk7CisJcmV0dXJu IEVSUl9QVFIoZXJyKTsKK30KKworc3RhdGljIHZvaWQgbW9ja191bm1hcF9kbWFfYnVmKHN0cnVj dCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQsCisJCQkgICAgICAgc3RydWN0IHNnX3Rh YmxlICpzdCwKKwkJCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJZG1h X3VubWFwX3NnKGF0dGFjaG1lbnQtPmRldiwgc3QtPnNnbCwgc3QtPm5lbnRzLCBkaXIpOworCXNn X2ZyZWVfdGFibGUoc3QpOworCWtmcmVlKHN0KTsKK30KKworc3RhdGljIHZvaWQgbW9ja19kbWFi dWZfcmVsZWFzZShzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1ZikKK3sKKwlzdHJ1Y3QgbW9ja19kbWFi dWYgKm1vY2sgPSB0b19tb2NrKGRtYV9idWYpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8 IG1vY2stPm5wYWdlczsgaSsrKQorCQlwdXRfcGFnZShtb2NrLT5wYWdlc1tpXSk7CisKKwlrZnJl ZShtb2NrKTsKK30KKworc3RhdGljIHZvaWQgKm1vY2tfZG1hYnVmX3ZtYXAoc3RydWN0IGRtYV9i dWYgKmRtYV9idWYpCit7CisJc3RydWN0IG1vY2tfZG1hYnVmICptb2NrID0gdG9fbW9jayhkbWFf YnVmKTsKKworCXJldHVybiB2bV9tYXBfcmFtKG1vY2stPnBhZ2VzLCBtb2NrLT5ucGFnZXMsIDAs IFBBR0VfS0VSTkVMKTsKK30KKworc3RhdGljIHZvaWQgbW9ja19kbWFidWZfdnVubWFwKHN0cnVj dCBkbWFfYnVmICpkbWFfYnVmLCB2b2lkICp2YWRkcikKK3sKKwlzdHJ1Y3QgbW9ja19kbWFidWYg Km1vY2sgPSB0b19tb2NrKGRtYV9idWYpOworCisJdm1fdW5tYXBfcmFtKHZhZGRyLCBtb2NrLT5u cGFnZXMpOworfQorCitzdGF0aWMgdm9pZCAqbW9ja19kbWFidWZfa21hcF9hdG9taWMoc3RydWN0 IGRtYV9idWYgKmRtYV9idWYsIHVuc2lnbmVkIGxvbmcgcGFnZV9udW0pCit7CisJc3RydWN0IG1v Y2tfZG1hYnVmICptb2NrID0gdG9fbW9jayhkbWFfYnVmKTsKKworCXJldHVybiBrbWFwX2F0b21p Yyhtb2NrLT5wYWdlc1twYWdlX251bV0pOworfQorCitzdGF0aWMgdm9pZCBtb2NrX2RtYWJ1Zl9r dW5tYXBfYXRvbWljKHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmLCB1bnNpZ25lZCBsb25nIHBhZ2Vf bnVtLCB2b2lkICphZGRyKQoreworCWt1bm1hcF9hdG9taWMoYWRkcik7Cit9CisKK3N0YXRpYyB2 b2lkICptb2NrX2RtYWJ1Zl9rbWFwKHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmLCB1bnNpZ25lZCBs b25nIHBhZ2VfbnVtKQoreworCXN0cnVjdCBtb2NrX2RtYWJ1ZiAqbW9jayA9IHRvX21vY2soZG1h X2J1Zik7CisKKwlyZXR1cm4ga21hcChtb2NrLT5wYWdlc1twYWdlX251bV0pOworfQorCitzdGF0 aWMgdm9pZCBtb2NrX2RtYWJ1Zl9rdW5tYXAoc3RydWN0IGRtYV9idWYgKmRtYV9idWYsIHVuc2ln bmVkIGxvbmcgcGFnZV9udW0sIHZvaWQgKmFkZHIpCit7CisJc3RydWN0IG1vY2tfZG1hYnVmICpt b2NrID0gdG9fbW9jayhkbWFfYnVmKTsKKworCXJldHVybiBrdW5tYXAobW9jay0+cGFnZXNbcGFn ZV9udW1dKTsKK30KKworc3RhdGljIGludCBtb2NrX2RtYWJ1Zl9tbWFwKHN0cnVjdCBkbWFfYnVm ICpkbWFfYnVmLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlyZXR1cm4gLUVOT0RF VjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkbWFfYnVmX29wcyBtb2NrX2RtYWJ1Zl9vcHMg PSAgeworCS5tYXBfZG1hX2J1ZiA9IG1vY2tfbWFwX2RtYV9idWYsCisJLnVubWFwX2RtYV9idWYg PSBtb2NrX3VubWFwX2RtYV9idWYsCisJLnJlbGVhc2UgPSBtb2NrX2RtYWJ1Zl9yZWxlYXNlLAor CS5rbWFwID0gbW9ja19kbWFidWZfa21hcCwKKwkua21hcF9hdG9taWMgPSBtb2NrX2RtYWJ1Zl9r bWFwX2F0b21pYywKKwkua3VubWFwID0gbW9ja19kbWFidWZfa3VubWFwLAorCS5rdW5tYXBfYXRv bWljID0gbW9ja19kbWFidWZfa3VubWFwX2F0b21pYywKKwkubW1hcCA9IG1vY2tfZG1hYnVmX21t YXAsCisJLnZtYXAgPSBtb2NrX2RtYWJ1Zl92bWFwLAorCS52dW5tYXAgPSBtb2NrX2RtYWJ1Zl92 dW5tYXAsCit9OworCitzdGF0aWMgc3RydWN0IGRtYV9idWYgKm1vY2tfZG1hYnVmKGludCBucGFn ZXMpCit7CisJc3RydWN0IG1vY2tfZG1hYnVmICptb2NrOworCURFRklORV9ETUFfQlVGX0VYUE9S VF9JTkZPKGV4cF9pbmZvKTsKKwlzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmOworCWludCBpOworCisJ bW9jayA9IGttYWxsb2Moc2l6ZW9mKCptb2NrKSArIG5wYWdlcyAqIHNpemVvZihzdHJ1Y3QgcGFn ZSAqKSwKKwkJICAgICAgIEdGUF9LRVJORUwpOworCWlmICghbW9jaykKKwkJcmV0dXJuIEVSUl9Q VFIoLUVOT01FTSk7CisKKwltb2NrLT5ucGFnZXMgPSBucGFnZXM7CisJZm9yIChpID0gMDsgaSA8 IG5wYWdlczsgaSsrKSB7CisJCW1vY2stPnBhZ2VzW2ldID0gYWxsb2NfcGFnZShHRlBfS0VSTkVM KTsKKwkJaWYgKCFtb2NrLT5wYWdlc1tpXSkKKwkJCWdvdG8gZXJyOworCX0KKworCWV4cF9pbmZv Lm9wcyA9ICZtb2NrX2RtYWJ1Zl9vcHM7CisJZXhwX2luZm8uc2l6ZSA9IG5wYWdlcyAqIFBBR0Vf U0laRTsKKwlleHBfaW5mby5mbGFncyA9IE9fQ0xPRVhFQzsKKwlleHBfaW5mby5wcml2ID0gbW9j azsKKworCWRtYWJ1ZiA9IGRtYV9idWZfZXhwb3J0KCZleHBfaW5mbyk7CisJaWYgKElTX0VSUihk bWFidWYpKQorCQlnb3RvIGVycjsKKworCXJldHVybiBkbWFidWY7CisKK2VycjoKKwl3aGlsZSAo aS0tKQorCQlwdXRfcGFnZShtb2NrLT5wYWdlc1tpXSk7CisJa2ZyZWUobW9jayk7CisJcmV0dXJu IEVSUl9QVFIoLUVOT01FTSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9z ZWxmdGVzdHMvbW9ja19kbWFidWYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9t b2NrX2RtYWJ1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZWM4 MDYxMzE1OWI5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRl c3RzL21vY2tfZG1hYnVmLmgKQEAgLTAsMCArMSw0MSBAQAorCisvKgorICogQ29weXJpZ2h0IMKp IDIwMTYgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFu dGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBv ZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAi U29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rp b24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBj b3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICog YW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25z IHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3Qg dG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQg bm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAq IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlh bCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9S CisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF IEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMg T1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1Ig T1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRP UlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElP TiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBU SEUgU09GVFdBUkUuCisgKgorICovCisKKyNpZm5kZWYgX19NT0NLX0RNQUJVRl9IX18KKyNkZWZp bmUgX19NT0NLX0RNQUJVRl9IX18KKworI2luY2x1ZGUgPGxpbnV4L2RtYS1idWYuaD4KKworc3Ry dWN0IG1vY2tfZG1hYnVmIHsKKwlpbnQgbnBhZ2VzOworCXN0cnVjdCBwYWdlICpwYWdlc1tdOwor fTsKKworc3RhdGljIHN0cnVjdCBtb2NrX2RtYWJ1ZiAqdG9fbW9jayhzdHJ1Y3QgZG1hX2J1ZiAq YnVmKQoreworCXJldHVybiBidWYtPnByaXY7Cit9CisKKyNlbmRpZiAvKiAhX19NT0NLX0RNQUJV Rl9IX18gKi8KLS0gCjIuMTEuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v aW50ZWwtZ2Z4Cg==